From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 07/14] drm/i915: Compute vlv/chv wms the atomic way Date: Thu, 15 Dec 2016 17:38:12 +0200 Message-ID: <20161215153812.GJ31595@intel.com> References: <1481574931-8658-1-git-send-email-ville.syrjala@linux.intel.com> <1481574931-8658-8-git-send-email-ville.syrjala@linux.intel.com> <1bbe7729-3ba9-5d90-1ab4-0f263f6c3a84@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id B2F2D6E9E6 for ; Thu, 15 Dec 2016 15:39:05 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1bbe7729-3ba9-5d90-1ab4-0f263f6c3a84@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBEZWMgMTUsIDIwMTYgYXQgMDQ6MzA6NTRQTSArMDEwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gT3AgMTItMTItMTYgb20gMjE6MzUgc2NocmVlZiB2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbToKPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20+Cj4gPgo+ID4gU3RhcnQgY29tcHV0aW5nIHRoZSB2bHYvY2h2IHdhdGVy bWFya3MgdGhlIGF0b21pYyB3YXksIGZyb20gdGhlCj4gPiAuY29tcHV0ZV9waXBlX3dtKCkgaG9v ay4gV2UnbGwgcmVjb21wdXRlIHRoZSBhY3R1YWwgd2F0ZXJtYXJrcwo+ID4gZm9yIG9ubHkgcGxh bmVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHN0YXRlLCB0aGUgb3RoZXIgcGxhbmVzIHdpbGwKPiA+ IGtlZXAgdGhlaXIgd2F0ZXJtYXJrIGZyb20gdGhlIGxhc3QgdGltZSBpdCB3YXMgY29tcHV0ZWQu Cj4gPgo+ID4gQW5kIHRoZSBhY3R1YWwgd2F0ZXJtYXJrIHByb2dyYW1taW5nIHdpbGwgaGFwcGVu IGZyb20gdGhlCj4gPiAuaW5pdGlhbF93YXRlcm1hcmtzKCkgaG9vay4gRm9yIG5vdyB3ZSdsbCBq dXN0IGNvbXB1dGUgdGhlCj4gPiBvcHRpbWFsIHdhdGVybWFya3MsIGFuZCB3ZSdsbCBob29rIHVw IHRoZSBpbnRlcm1lZGlhdGUKPiA+IHdhdGVybWFya3MgcHJvcGVybHkgbGF0ZXIuCj4gPgo+ID4g VGhlIERTUEFSQiByZWdpc3RlcnMgcmVzcG9uc2libGUgZm9yIHRoZSBGSUZPIHBhcml0aW9uaW5n IGFyZQo+ID4gZG91YmxlIGJ1ZmZlcmVkLCBzbyB0aGV5IHdpbGwgYmUgcHJvZ3JhbW1pbmcgZnJv bQo+ID4gaW50ZWxfYmVnaW5fY3J0Y19jb21taXQoKS4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBW aWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gLS0tCj4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgIHwgICA4ICsKPiA+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAgMjEgKystCj4gPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgICAyIC0KPiA+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jICAgICAgfCAzMjcgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDIzOCBpbnNlcnRpb25zKCspLCAxMjAgZGVsZXRp b25zKC0pCj4gPgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBpbmRleCAyMGJjMDRkNWU2 MTcuLmYyMzY5OGY5OTY4NSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+IEBA IC00OTMsNiArNDkzLDE0IEBAIHN0cnVjdCBpOTE1X2hvdHBsdWcgewo+ID4gIAlmb3IgKChkb21h aW4pID0gMDsgKGRvbWFpbikgPCBQT1dFUl9ET01BSU5fTlVNOyAoZG9tYWluKSsrKQlcCj4gPiAg CQlmb3JfZWFjaF9pZiAoKDEgPDwgKGRvbWFpbikpICYgKG1hc2spKQo+ID4gIAo+ID4gKyNkZWZp bmUgZm9yX2VhY2hfaW50ZWxfcGxhbmVfaW5fc3RhdGUoX19zdGF0ZSwgcGxhbmUsIHBsYW5lX3N0 YXRlLCBfX2kpIFwKPiA+ICsJZm9yICgoX19pKSA9IDA7IFwKPiA+ICsJICAgICAoX19pKSA8IChf X3N0YXRlKS0+YmFzZS5kZXYtPm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFuZSAmJiBcCj4gPiAr CQkgICAgICgocGxhbmUpID0gdG9faW50ZWxfcGxhbmUoKF9fc3RhdGUpLT5iYXNlLnBsYW5lc1tf X2ldLnB0ciksIFwKPiA+ICsJCSAgICAgIChwbGFuZV9zdGF0ZSkgPSB0b19pbnRlbF9wbGFuZV9z dGF0ZSgoX19zdGF0ZSktPmJhc2UucGxhbmVzW19faV0uc3RhdGUpLCAxKTsgXAo+ID4gKwkgICAg IChfX2kpKyspIFwKPiA+ICsJCWZvcl9lYWNoX2lmIChwbGFuZV9zdGF0ZSkKPiA+ICsKPiA+ICBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKPiA+ICBzdHJ1Y3QgaTkxNV9tbV9zdHJ1Y3Q7Cj4gPiAg c3RydWN0IGk5MTVfbW11X29iamVjdDsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPiA+IGluZGV4IDNmMDI3MzQxYjBmMy4uOGQ4MDg3M2I2NjQzIDEwMDY0NAo+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IEBAIC02NzM2LDYgKzY3MzYsOCBAQCBzdGF0 aWMgdm9pZCB2YWxsZXl2aWV3X21vZGVzZXRfY29tbWl0X2NkY2xrKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpvbGRfc3RhdGUpCj4gPiAgc3RhdGljIHZvaWQgdmFsbGV5dmlld19jcnRjX2VuYWJs ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCj4gPiAgCQkJCSAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4gPiAgewo+ID4gKwlzdHJ1Y3QgaW50ZWxf YXRvbWljX3N0YXRlICpvbGRfaW50ZWxfc3RhdGUgPQo+ID4gKwkJdG9faW50ZWxfYXRvbWljX3N0 YXRlKG9sZF9zdGF0ZSk7Cj4gPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHBpcGVfY29uZmln LT5iYXNlLmNydGM7Cj4gPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4g PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+ IEBAIC02NzgwLDcgKzY3ODIsOCBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2NydGNfZW5hYmxl KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKPiA+ICAKPiA+ICAJaW50ZWxf Y29sb3JfbG9hZF9sdXRzKCZwaXBlX2NvbmZpZy0+YmFzZSk7Cj4gPiAgCj4gPiAtCWludGVsX3Vw ZGF0ZV93YXRlcm1hcmtzKGludGVsX2NydGMpOwo+ID4gKwlkZXZfcHJpdi0+ZGlzcGxheS5pbml0 aWFsX3dhdGVybWFya3Mob2xkX2ludGVsX3N0YXRlLAo+ID4gKwkJCQkJICAgICBwaXBlX2NvbmZp Zyk7Cj4gPiAgCWludGVsX2VuYWJsZV9waXBlKGludGVsX2NydGMpOwo+ID4gIAo+ID4gIAlhc3Nl cnRfdmJsYW5rX2Rpc2FibGVkKGNydGMpOwo+ID4gQEAgLTY4OTcsNiArNjkwMCw5IEBAIHN0YXRp YyB2b2lkIGk5eHhfY3J0Y19kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0 Y19zdGF0ZSwKPiA+ICAKPiA+ICAJaWYgKCFJU19HRU4yKGRldl9wcml2KSkKPiA+ICAJCWludGVs X3NldF9jcHVfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2X3ByaXYsIHBpcGUsIGZhbHNlKTsK PiA+ICsKPiA+ICsJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS5pbml0aWFsX3dhdGVybWFya3MpCj4g PiArCQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhpbnRlbF9jcnRjKTsKPiA+ICB9Cj4gPiAgCj4g PiAgc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19kaXNhYmxlX25vYXRvbWljKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKPiA+IEBAIC0xMjk4MCwxMCArMTI5ODYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tf ZGlnaXRhbF9wb3J0X2NvbmZsaWN0cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4g PiAgc3RhdGljIHZvaWQKPiA+ICBjbGVhcl9pbnRlbF9jcnRjX3N0YXRlKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4gIHsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0KPiA+ICsJCXRvX2k5MTUoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYp Owo+ID4gIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgdG1wX3N0YXRlOwo+ID4gIAlzdHJ1Y3QgaW50 ZWxfY3J0Y19zY2FsZXJfc3RhdGUgc2NhbGVyX3N0YXRlOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfZHBs bF9od19zdGF0ZSBkcGxsX2h3X3N0YXRlOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwg KnNoYXJlZF9kcGxsOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y193bV9zdGF0ZSB3bV9zdGF0ZTsK PiA+ICAJYm9vbCBmb3JjZV90aHJ1Owo+ID4gIAo+ID4gIAkvKiBGSVhNRTogYmVmb3JlIHRoZSBz d2l0Y2ggdG8gYXRvbWljIHN0YXJ0ZWQsIGEgbmV3IHBpcGVfY29uZmlnIHdhcwo+ID4gQEAgLTEy OTk2LDYgKzEzMDA1LDggQEAgY2xlYXJfaW50ZWxfY3J0Y19zdGF0ZShzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICAJc2hhcmVkX2RwbGwgPSBjcnRjX3N0YXRlLT5zaGFy ZWRfZHBsbDsKPiA+ICAJZHBsbF9od19zdGF0ZSA9IGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGU7 Cj4gPiAgCWZvcmNlX3RocnUgPSBjcnRjX3N0YXRlLT5wY2hfcGZpdC5mb3JjZV90aHJ1Owo+ID4g KwlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikp Cj4gPiArCQl3bV9zdGF0ZSA9IGNydGNfc3RhdGUtPndtOwo+ID4gIAo+ID4gIAltZW1zZXQoY3J0 Y19zdGF0ZSwgMCwgc2l6ZW9mICpjcnRjX3N0YXRlKTsKPiA+ICAKPiA+IEBAIC0xMzAwNCw2ICsx MzAxNSw4IEBAIGNsZWFyX2ludGVsX2NydGNfc3RhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCj4gPiAgCWNydGNfc3RhdGUtPnNoYXJlZF9kcGxsID0gc2hhcmVkX2RwbGw7 Cj4gPiAgCWNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUgPSBkcGxsX2h3X3N0YXRlOwo+ID4gIAlj cnRjX3N0YXRlLT5wY2hfcGZpdC5mb3JjZV90aHJ1ID0gZm9yY2VfdGhydTsKPiA+ICsJaWYgKElT X1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ID4gKwkJ Y3J0Y19zdGF0ZS0+d20gPSB3bV9zdGF0ZTsKPiBJcyB0aGlzIHJlcXVpcmVkPyBJbiBza2wgd2Ug dGhyb3cgYXdheSBldmVyeXRoaW5nIGFuZCByZWJ1aWxkIHVzaW5nIGRybV9hdG9taWNfY3J0Y19z dGF0ZV9mb3JfZWFjaF9wbGFuZV9zdGF0ZS4KCkkgZG9uJ3Qgd2FudCB0byBhZGQgYWxsIHRoZSBw bGFuZXMgaW50byB0aGUgc3RhdGUgd2hlbiBub3QgbmVjZXNzYXJ5LgoKPiA+ICAKPiA+ICBzdGF0 aWMgaW50Cj4gPiBAQCAtMTQ0OTcsMTIgKzE0NTEwLDEyIEBAIHN0YXRpYyB2b2lkIGludGVsX2F0 b21pY19jb21taXRfdGFpbChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiAgCQkJ CS8qCj4gPiAgCQkJCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBjYWxsIGluaXRpYWxfd2F0ZXJtYXJr cwo+ID4gIAkJCQkgKiBmb3IgSUxLLXN0eWxlIHdhdGVybWFyayB1cGRhdGVzLgo+ID4gKwkJCQkg Kgo+ID4gKwkJCQkgKiBObyBjbHVlIHdoYXQgdGhpcyBpcyBzdXBwb3NlZCB0byBhY2hpZXZlLgo+ ID4gIAkJCQkgKi8KPiA+IC0JCQkJaWYgKGRldl9wcml2LT5kaXNwbGF5LmF0b21pY191cGRhdGVf d2F0ZXJtYXJrcykKPiA+ICsJCQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKPiA+ICAJ CQkJCWRldl9wcml2LT5kaXNwbGF5LmluaXRpYWxfd2F0ZXJtYXJrcyhpbnRlbF9zdGF0ZSwKPiA+ ICAJCQkJCQkJCQkgICAgIHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpKTsKPiA+IC0J CQkJZWxzZQo+ID4gLQkJCQkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoaW50ZWxfY3J0Yyk7Cj4g PiAgCQkJfQo+ID4gIAkJfQo+ID4gIAl9Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4g aW5kZXggMGUxOTlkYjI2YmRhLi42NjY2OGMxOGE0N2EgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHJ2LmgKPiA+IEBAIC00OTAsOSArNDkwLDcgQEAgZW51bSB2bHZfd21fbGV2ZWwgewo+ ID4gIHN0cnVjdCB2bHZfd21fc3RhdGUgewo+ID4gIAlzdHJ1Y3Qgdmx2X3BpcGVfd20gd21bTlVN X1ZMVl9XTV9MRVZFTFNdOwo+ID4gIAlzdHJ1Y3Qgdmx2X3NyX3dtIHNyW05VTV9WTFZfV01fTEVW RUxTXTsKPiA+IC0JdWludDhfdCBudW1fYWN0aXZlX3BsYW5lczsKPiA+ICAJdWludDhfdCBudW1f bGV2ZWxzOwo+ID4gLQl1aW50OF90IGxldmVsOwo+ID4gIAlib29sIGN4c3I7Cj4gPiAgfTsKPiA+ ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gaW5kZXggMjMzZTYzMjI0NjQ5Li5mNjhi NDZlZWQyMjQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5j Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiBAQCAtMTA3Miw2 ICsxMDcyLDI4IEBAIHN0YXRpYyBpbnQgdmx2X2NvbXB1dGVfZmlmbyhzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0 YXRpYyBpbnQgdmx2X251bV93bV9sZXZlbHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+ID4gK3sKPiA+ICsJcmV0dXJuIGRldl9wcml2LT53bS5tYXhfbGV2ZWwgKyAxOwo+ID4g K30KPiA+ICsKPiA+ICsvKiBtYXJrIGFsbCBsZXZlbHMgc3RhcnRpbmcgZnJvbSAnbGV2ZWwnIGFz IGludmFsaWQgKi8KPiA+ICtzdGF0aWMgdm9pZCB2bHZfaW52YWxpZGF0ZV93bXMoc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCj4gPiArCQkJICAgICAgIHN0cnVjdCB2bHZfd21fc3RhdGUgKndtX3N0 YXRlLCBpbnQgbGV2ZWwpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiA+ICsKPiA+ICsJZm9yICg7IGxldmVs IDwgdmx2X251bV93bV9sZXZlbHMoZGV2X3ByaXYpOyBsZXZlbCsrKSB7Cj4gPiArCQllbnVtIHBs YW5lX2lkIHBsYW5lX2lkOwo+ID4gKwo+ID4gKwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0Yyhj cnRjLCBwbGFuZV9pZCkKPiA+ICsJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLnBsYW5lW3BsYW5lX2lk XSA9IFVTSFJUX01BWDsKPiA+ICsKPiA+ICsJCXdtX3N0YXRlLT5zcltsZXZlbF0uY3Vyc29yID0g VVNIUlRfTUFYOwo+ID4gKwkJd21fc3RhdGUtPnNyW2xldmVsXS5wbGFuZSA9IFVTSFJUX01BWDsK PiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgdTE2IHZsdl9pbnZlcnRfd21fdmFsdWUo dTE2IHdtLCB1MTYgZmlmb19zaXplKQo+ID4gIHsKPiA+ICAJaWYgKHdtID4gZmlmb19zaXplKQo+ ID4gQEAgLTEwODAsMTA4ICsxMTAyLDE2MiBAQCBzdGF0aWMgdTE2IHZsdl9pbnZlcnRfd21fdmFs dWUodTE2IHdtLCB1MTYgZmlmb19zaXplKQo+ID4gIAkJcmV0dXJuIGZpZm9fc2l6ZSAtIHdtOwo+ ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgdm9pZCB2bHZfaW52ZXJ0X3dtcyhzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICsvKiBzdGFydGluZyBmcm9tICdsZXZlbCcgc2V0 IGFsbCBoaWdoZXIgbGV2ZWxzIHRvICd2YWx1ZScgKi8KPiA+ICtzdGF0aWMgdm9pZCB2bHZfcGxh bmVfd21fc2V0KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCSAg ICAgaW50IGxldmVsLCBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkLCB1MTYgdmFsdWUpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3Rh dGUtPmJhc2UuY3J0Yy0+ZGV2KTsKPiA+ICsJaW50IG51bV9sZXZlbHMgPSB2bHZfbnVtX3dtX2xl dmVscyhkZXZfcHJpdik7Cj4gPiArCj4gPiArCWZvciAoOyBsZXZlbCA8IG51bV9sZXZlbHM7IGxl dmVsKyspIHsKPiA+ICsJCXN0cnVjdCB2bHZfcGlwZV93bSAqbm9uaW52ZXJ0ZWQgPQo+ID4gKwkJ CSZjcnRjX3N0YXRlLT53bS52bHYubm9uaW52ZXJ0ZWRbbGV2ZWxdOwo+ID4gKwo+ID4gKwkJbm9u aW52ZXJ0ZWQtPnBsYW5lW3BsYW5lX2lkXSA9IHZhbHVlOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIHZsdl9wbGFuZV93bV9jb21wdXRlKHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCQkgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRl ICpwbGFuZV9zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0 b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+YmFzZS5wbGFuZSk7Cj4gPiArCWVudW0gcGxhbmVf aWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7Cj4gPiArCWludCBudW1fbGV2ZWxzID0gdmx2X251bV93 bV9sZXZlbHModG9faTkxNShwbGFuZS0+YmFzZS5kZXYpKTsKPiA+ICsJaW50IGxldmVsOwo+ID4g Kwo+ID4gKwlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2libGUpIHsKPiA+ICsJCXZsdl9wbGFu ZV93bV9zZXQoY3J0Y19zdGF0ZSwgMCwgcGxhbmVfaWQsIDApOwo+ID4gKwkJcmV0dXJuOwo+ID4g Kwl9Cj4gPiArCj4gPiArCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IG51bV9sZXZlbHM7IGxldmVs KyspIHsKPiA+ICsJCXN0cnVjdCB2bHZfcGlwZV93bSAqbm9uaW52ZXJ0ZWQgPQo+ID4gKwkJCSZj cnRjX3N0YXRlLT53bS52bHYubm9uaW52ZXJ0ZWRbbGV2ZWxdOwo+ID4gKwkJaW50IHdtID0gdmx2 X2NvbXB1dGVfd21fbGV2ZWwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIGxldmVsKTsKPiA+ICsJ CWludCBtYXhfd20gPSBwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IgPyA2MyA6IDUxMTsKPiA+ICsK PiA+ICsJCS8qIEZJWE1FIGp1c3QgYmFpbCAqLwo+ID4gKwkJaWYgKFdBUk5fT04obGV2ZWwgPT0g MCAmJiB3bSA+IG1heF93bSkpCj4gPiArCQkJd20gPSBtYXhfd207Cj4gPiArCj4gPiArCQlpZiAo d20gPiBtYXhfd20pCj4gPiArCQkJYnJlYWs7Cj4gPiArCj4gPiArCQlub25pbnZlcnRlZC0+cGxh bmVbcGxhbmVfaWRdID0gd207Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogbWFyayBhbGwgaGlnaGVy IGxldmVscyBhcyBpbnZhbGlkICovCj4gPiArCXZsdl9wbGFuZV93bV9zZXQoY3J0Y19zdGF0ZSwg bGV2ZWwsIHBsYW5lX2lkLCBVU0hSVF9NQVgpOwo+ID4gKwo+ID4gKwlEUk1fREVCVUdfS01TKCIl cyB3bXM6IFswXT0lZCxbMV09JWQsWzJdPSVkXG4iLAo+ID4gKwkJICAgICAgcGxhbmUtPmJhc2Uu bmFtZSwKPiA+ICsJCSAgICAgIGNydGNfc3RhdGUtPndtLnZsdi5ub25pbnZlcnRlZFtWTFZfV01f TEVWRUxfUE0yXS5wbGFuZVtwbGFuZV9pZF0sCj4gPiArCQkgICAgICBjcnRjX3N0YXRlLT53bS52 bHYubm9uaW52ZXJ0ZWRbVkxWX1dNX0xFVkVMX1BNNV0ucGxhbmVbcGxhbmVfaWRdLAo+ID4gKwkJ ICAgICAgY3J0Y19zdGF0ZS0+d20udmx2Lm5vbmludmVydGVkW1ZMVl9XTV9MRVZFTF9ERFJfRFZG U10ucGxhbmVbcGxhbmVfaWRdKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgdmx2X3Bs YW5lX3dtX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAo+ID4gKwkJCQkgIGVudW0gcGxhbmVfaWQgcGxhbmVfaWQsIGludCBsZXZlbCkKPiA+ICt7Cj4g PiArCWNvbnN0IHN0cnVjdCB2bHZfcGlwZV93bSAqbm9uaW52ZXJ0ZWQgPQo+ID4gKwkJJmNydGNf c3RhdGUtPndtLnZsdi5ub25pbnZlcnRlZFtsZXZlbF07Cj4gPiArCWNvbnN0IHN0cnVjdCB2bHZf Zmlmb19zdGF0ZSAqZmlmb19zdGF0ZSA9Cj4gPiArCQkmY3J0Y19zdGF0ZS0+d20udmx2LmZpZm9f c3RhdGU7Cj4gPiArCj4gPiArCXJldHVybiBub25pbnZlcnRlZC0+cGxhbmVbcGxhbmVfaWRdIDw9 IGZpZm9fc3RhdGUtPnBsYW5lW3BsYW5lX2lkXTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJv b2wgdmx2X2NydGNfd21faXNfdmFsaWQoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsIGludCBsZXZlbCkKPiA+ICt7Cj4gPiArCXJldHVybiB2bHZfcGxhbmVfd21faXNf dmFsaWQoY3J0Y19zdGF0ZSwgUExBTkVfUFJJTUFSWSwgbGV2ZWwpICYmCj4gPiArCQl2bHZfcGxh bmVfd21faXNfdmFsaWQoY3J0Y19zdGF0ZSwgUExBTkVfU1BSSVRFMCwgbGV2ZWwpICYmCj4gPiAr CQl2bHZfcGxhbmVfd21faXNfdmFsaWQoY3J0Y19zdGF0ZSwgUExBTkVfU1BSSVRFMSwgbGV2ZWwp ICYmCj4gPiArCQl2bHZfcGxhbmVfd21faXNfdmFsaWQoY3J0Y19zdGF0ZSwgUExBTkVfQ1VSU09S LCBsZXZlbCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgdmx2X2NvbXB1dGVfcGlwZV93 bShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICB7Cj4gPiAgCXN0cnVj dCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMp Owo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMt PmJhc2UuZGV2KTsKPiA+ICsJc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUgPQo+ID4g KwkJdG9faW50ZWxfYXRvbWljX3N0YXRlKGNydGNfc3RhdGUtPmJhc2Uuc3RhdGUpOwo+ID4gIAlz dHJ1Y3Qgdmx2X3dtX3N0YXRlICp3bV9zdGF0ZSA9ICZjcnRjX3N0YXRlLT53bS52bHYub3B0aW1h bDsKPiA+ICAJY29uc3Qgc3RydWN0IHZsdl9maWZvX3N0YXRlICpmaWZvX3N0YXRlID0KPiA+ICAJ CSZjcnRjX3N0YXRlLT53bS52bHYuZmlmb19zdGF0ZTsKPiA+IC0JaW50IGxldmVsOwo+ID4gKwlp bnQgbnVtX2FjdGl2ZV9wbGFuZXMgPSBod2VpZ2h0MzIoY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5l cyAmCj4gPiArCQkJCQkgIH5CSVQoUExBTkVfQ1VSU09SKSk7Cj4gPiArCXN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7 Cj4gPiArCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQ7Cj4gPiArCWludCBsZXZlbCwgcmV0LCBpOwo+ ID4gKwo+ID4gKwlmb3JfZWFjaF9pbnRlbF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBs YW5lX3N0YXRlLCBpKSB7Cj4gPiArCQljb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9s ZF9wbGFuZV9zdGF0ZSA9Cj4gPiArCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uu c3RhdGUpOwo+ID4gKwo+ID4gKwkJaWYgKHBsYW5lX3N0YXRlLT5iYXNlLmNydGMgIT0gJmNydGMt PmJhc2UgJiYKPiA+ICsJCSAgICBvbGRfcGxhbmVfc3RhdGUtPmJhc2UuY3J0YyAhPSAmY3J0Yy0+ YmFzZSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCXZsdl9wbGFuZV93bV9jb21wdXRl KGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBpbml0aWFs bHkgYWxsb3cgYWxsIGxldmVscyAqLwo+ID4gKwl3bV9zdGF0ZS0+bnVtX2xldmVscyA9IHZsdl9u dW1fd21fbGV2ZWxzKGRldl9wcml2KTsKPiA+ICsJLyoKPiA+ICsJICogTm90ZSB0aGF0IGVuYWJs aW5nIGN4c3Igd2l0aCBubyBwcmltYXJ5L3Nwcml0ZSBwbGFuZXMKPiA+ICsJICogZW5hYmxlZCBj YW4gd2VkZ2UgdGhlIHBpcGUuIEhlbmNlIHdlIG9ubHkgYWxsb3cgY3hzcgo+ID4gKwkgKiB3aXRo IGV4YWN0bHkgb25lIGVuYWJsZWQgcHJpbWFyeS9zcHJpdGUgcGxhbmUuCj4gPiArCSAqLwo+ID4g Kwl3bV9zdGF0ZS0+Y3hzciA9IGNydGMtPnBpcGUgIT0gUElQRV9DICYmCj4gPiArCQljcnRjLT53 bS5jeHNyX2FsbG93ZWQgJiYgbnVtX2FjdGl2ZV9wbGFuZXMgPT0gMTsKPiA+ICsKPiA+ICsJcmV0 ID0gdmx2X2NvbXB1dGVfZmlmbyhjcnRjX3N0YXRlKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJl dHVybiByZXQ7Cj4gPiAgCj4gPiAgCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IHdtX3N0YXRlLT5u dW1fbGV2ZWxzOyBsZXZlbCsrKSB7Cj4gPiAtCQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiA+IC0JCWNvbnN0IGludCBzcl9maWZv X3NpemUgPQo+ID4gLQkJCUlOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1fcGlwZXMgKiA1MTIgLSAx Owo+ID4gLQkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZDsKPiA+ICsJCWNvbnN0IHN0cnVjdCB2bHZf cGlwZV93bSAqbm9uaW52ZXJ0ZWQgPQo+ID4gKwkJCSZjcnRjX3N0YXRlLT53bS52bHYubm9uaW52 ZXJ0ZWRbbGV2ZWxdOwo+ID4gKwkJY29uc3QgaW50IHNyX2ZpZm9fc2l6ZSA9IElOVEVMX0lORk8o ZGV2X3ByaXYpLT5udW1fcGlwZXMgKiA1MTIgLSAxOwo+ID4gKwo+ID4gKwkJaWYgKCF2bHZfY3J0 Y193bV9pc192YWxpZChjcnRjX3N0YXRlLCBsZXZlbCkpCj4gPiArCQkJYnJlYWs7Cj4gPiArCj4g PiArCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKSB7Cj4gPiArCQkJ d21fc3RhdGUtPndtW2xldmVsXS5wbGFuZVtwbGFuZV9pZF0gPQo+ID4gKwkJCQl2bHZfaW52ZXJ0 X3dtX3ZhbHVlKG5vbmludmVydGVkLT5wbGFuZVtwbGFuZV9pZF0sCj4gPiArCQkJCQkJICAgIGZp Zm9fc3RhdGUtPnBsYW5lW3BsYW5lX2lkXSk7Cj4gPiArCQl9Cj4gPiAgCj4gPiAgCQl3bV9zdGF0 ZS0+c3JbbGV2ZWxdLnBsYW5lID0KPiA+IC0JCQl2bHZfaW52ZXJ0X3dtX3ZhbHVlKHdtX3N0YXRl LT5zcltsZXZlbF0ucGxhbmUsCj4gPiArCQkJdmx2X2ludmVydF93bV92YWx1ZShtYXgzKG5vbmlu dmVydGVkLT5wbGFuZVtQTEFORV9QUklNQVJZXSwKPiA+ICsJCQkJCQkgbm9uaW52ZXJ0ZWQtPnBs YW5lW1BMQU5FX1NQUklURTBdLAo+ID4gKwkJCQkJCSBub25pbnZlcnRlZC0+cGxhbmVbUExBTkVf U1BSSVRFMV0pLAo+ID4gIAkJCQkJICAgIHNyX2ZpZm9fc2l6ZSk7Cj4gPiArCj4gPiAgCQl3bV9z dGF0ZS0+c3JbbGV2ZWxdLmN1cnNvciA9Cj4gPiAtCQkJdmx2X2ludmVydF93bV92YWx1ZSh3bV9z dGF0ZS0+c3JbbGV2ZWxdLmN1cnNvciwKPiA+ICsJCQl2bHZfaW52ZXJ0X3dtX3ZhbHVlKG5vbmlu dmVydGVkLT5wbGFuZVtQTEFORV9DVVJTT1JdLAo+ID4gIAkJCQkJICAgIDYzKTsKPiA+IC0KPiA+ IC0JCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpIHsKPiA+IC0JCQl3 bV9zdGF0ZS0+d21bbGV2ZWxdLnBsYW5lW3BsYW5lX2lkXSA9Cj4gPiAtCQkJCXZsdl9pbnZlcnRf d21fdmFsdWUod21fc3RhdGUtPndtW2xldmVsXS5wbGFuZVtwbGFuZV9pZF0sCj4gPiAtCQkJCQkJ ICAgIGZpZm9fc3RhdGUtPnBsYW5lW3BsYW5lX2lkXSk7Cj4gPiAtCQl9Cj4gPiAtCX0KPiA+IC19 Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgdmx2X2NvbXB1dGVfd20oc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiA+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4gPiAtCXN0 cnVjdCB2bHZfd21fc3RhdGUgKndtX3N0YXRlID0gJmNydGNfc3RhdGUtPndtLnZsdi5vcHRpbWFs Owo+ID4gLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lOwo+ID4gLQlpbnQgbGV2ZWw7Cj4gPiAt Cj4gPiAtCW1lbXNldCh3bV9zdGF0ZSwgMCwgc2l6ZW9mKCp3bV9zdGF0ZSkpOwo+ID4gLQltZW1z ZXQoY3J0Y19zdGF0ZS0+d20udmx2Lm5vbmludmVydGVkLCAwLAo+ID4gLQkgICAgICAgc2l6ZW9m KGNydGNfc3RhdGUtPndtLnZsdi5ub25pbnZlcnRlZCkpOwo+ID4gLQo+ID4gLQl3bV9zdGF0ZS0+ Y3hzciA9IGNydGMtPnBpcGUgIT0gUElQRV9DICYmIGNydGMtPndtLmN4c3JfYWxsb3dlZDsKPiA+ IC0Jd21fc3RhdGUtPm51bV9sZXZlbHMgPSBkZXZfcHJpdi0+d20ubWF4X2xldmVsICsgMTsKPiA+ IC0KPiA+IC0Jd21fc3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzID0gMDsKPiA+IC0KPiA+IC0JaWYg KHdtX3N0YXRlLT5udW1fYWN0aXZlX3BsYW5lcyAhPSAxKQo+ID4gLQkJd21fc3RhdGUtPmN4c3Ig PSBmYWxzZTsKPiA+IC0KPiA+IC0JZm9yX2VhY2hfaW50ZWxfcGxhbmVfb25fY3J0YygmZGV2X3By aXYtPmRybSwgY3J0YywgcGxhbmUpIHsKPiA+IC0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq c3RhdGUgPQo+ID4gLQkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsK PiA+IC0KPiA+IC0JCWlmICghc3RhdGUtPmJhc2UudmlzaWJsZSkKPiA+IC0JCQljb250aW51ZTsK PiA+IC0KPiA+IC0JCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IHdtX3N0YXRlLT5udW1fbGV2ZWxz OyBsZXZlbCsrKSB7Cj4gPiAtCQkJc3RydWN0IHZsdl9waXBlX3dtICpub25pbnZlcnRlZCA9Cj4g PiAtCQkJCSZjcnRjX3N0YXRlLT53bS52bHYubm9uaW52ZXJ0ZWRbbGV2ZWxdOwo+ID4gLQkJCWlu dCB3bSA9IHZsdl9jb21wdXRlX3dtX2xldmVsKGNydGNfc3RhdGUsIHN0YXRlLCBsZXZlbCk7Cj4g PiAtCQkJaW50IG1heF93bSA9IHBsYW5lLT5pZCA9PSBQTEFORV9DVVJTT1IgPyA2MyA6IDUxMTsK PiA+IC0KPiA+IC0JCQkvKiBoYWNrICovCj4gPiAtCQkJaWYgKFdBUk5fT04obGV2ZWwgPT0gMCAm JiB3bSA+IG1heF93bSkpCj4gPiAtCQkJCXdtID0gbWF4X3dtOwo+ID4gLQo+ID4gLQkJCWlmICh3 bSA+IG1heF93bSkKPiA+IC0JCQkJYnJlYWs7Cj4gPiAtCj4gPiAtCQkJbm9uaW52ZXJ0ZWQtPnBs YW5lW3BsYW5lLT5pZF0gPSB3bTsKPiA+IC0JCX0KPiA+IC0KPiA+IC0JCXdtX3N0YXRlLT5udW1f bGV2ZWxzID0gbGV2ZWw7Cj4gPiAgCX0KPiA+ICAKPiA+IC0Jdmx2X2NvbXB1dGVfZmlmbyhjcnRj X3N0YXRlKTsKPiA+ICsJaWYgKGxldmVsID09IDApCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ ICAKPiA+IC0JZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgd21fc3RhdGUtPm51bV9sZXZlbHM7IGxl dmVsKyspIHsKPiA+IC0JCXN0cnVjdCB2bHZfcGlwZV93bSAqbm9uaW52ZXJ0ZWQgPQo+ID4gLQkJ CSZjcnRjX3N0YXRlLT53bS52bHYubm9uaW52ZXJ0ZWRbbGV2ZWxdOwo+ID4gKwkvKiBsaW1pdCB0 byBvbmx5IGxldmVscyB3ZSBjYW4gYWN0dWFsbHkgaGFuZGxlICovCj4gPiArCXdtX3N0YXRlLT5u dW1fbGV2ZWxzID0gbGV2ZWw7Cj4gPiAgCj4gPiAtCQl3bV9zdGF0ZS0+d21bbGV2ZWxdID0gKm5v bmludmVydGVkOwo+ID4gLQo+ID4gLQkJd21fc3RhdGUtPnNyW2xldmVsXS5wbGFuZSA9IG1heDMo bm9uaW52ZXJ0ZWQtPnBsYW5lW1BMQU5FX1BSSU1BUlldLAo+ID4gLQkJCQkJCSBub25pbnZlcnRl ZC0+cGxhbmVbUExBTkVfU1BSSVRFMF0sCj4gPiAtCQkJCQkJIG5vbmludmVydGVkLT5wbGFuZVtQ TEFORV9TUFJJVEUxXSk7Cj4gPiAtCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLmN1cnNvciA9IG5vbmlu dmVydGVkLT5wbGFuZVtQTEFORV9DVVJTT1JdOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCS8qIGNsZWFy IGFueSAocGFydGlhbGx5KSBmaWxsZWQgaW52YWxpZCBsZXZlbHMgKi8KPiA+IC0JZm9yIChsZXZl bCA9IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCA8IGRldl9wcml2LT53bS5tYXhfbGV2ZWwg KyAxOyBsZXZlbCsrKSB7Cj4gPiAtCQltZW1zZXQoJndtX3N0YXRlLT53bVtsZXZlbF0sIDAsIHNp emVvZih3bV9zdGF0ZS0+d21bbGV2ZWxdKSk7Cj4gPiAtCQltZW1zZXQoJndtX3N0YXRlLT5zclts ZXZlbF0sIDAsIHNpemVvZih3bV9zdGF0ZS0+c3JbbGV2ZWxdKSk7Cj4gPiAtCX0KPiA+ICsJLyog aW52YWxpZGF0ZSB0aGUgaGlnaGVyIGxldmVscyAqLwo+ID4gKwl2bHZfaW52YWxpZGF0ZV93bXMo Y3J0Yywgd21fc3RhdGUsIGxldmVsKTsKPiA+ICAKPiA+IC0Jdmx2X2ludmVydF93bXMoY3J0Y19z dGF0ZSk7Cj4gPiArCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+ICAjZGVmaW5lIFZMVl9GSUZP KHBsYW5lLCB2YWx1ZSkgXAo+ID4gIAkoKCh2YWx1ZSkgPDwgRFNQQVJCXyAjIyBwbGFuZSAjIyBf U0hJRlRfVkxWKSAmIERTUEFSQl8gIyMgcGxhbmUgIyMgX01BU0tfVkxWKQo+ID4gIAo+ID4gLXN0 YXRpYyB2b2lkIHZsdl9waXBlX3NldF9maWZvX3NpemUoY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCj4gPiArc3RhdGljIHZvaWQgdmx2X2F0b21pY191cGRhdGVfZmlm byhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkJICAgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKPiA+ICAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7 Cj4gPiBAQCAtMTE5NiwxMCArMTI3Miw2IEBAIHN0YXRpYyB2b2lkIHZsdl9waXBlX3NldF9maWZv X3NpemUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPiAgCVdB Uk5fT04oZmlmb19zdGF0ZS0+cGxhbmVbUExBTkVfQ1VSU09SXSAhPSA2Myk7Cj4gPiAgCVdBUk5f T04oZmlmb19zaXplICE9IDUxMSk7Cj4gPiAgCj4gPiAtCURSTV9ERUJVR19LTVMoIlBpcGUgJWMg RklGTyBzcGxpdCAlZCAvICVkIC8gJWRcbiIsCj4gPiAtCQkgICAgICBwaXBlX25hbWUoY3J0Yy0+ cGlwZSksIHNwcml0ZTBfc3RhcnQsCj4gPiAtCQkgICAgICBzcHJpdGUxX3N0YXJ0LCBmaWZvX3Np emUpOwo+ID4gLQo+ID4gIAlzcGluX2xvY2soJmRldl9wcml2LT53bS5kc3BhcmJfbG9jayk7Cj4g PiAgCj4gPiAgCXN3aXRjaCAoY3J0Yy0+cGlwZSkgewo+ID4gQEAgLTEyOTgsMTEgKzEzNzAsOCBA QCBzdGF0aWMgdm9pZCB2bHZfbWVyZ2Vfd20oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ID4gIAkJY29uc3Qgc3RydWN0IHZsdl93bV9zdGF0ZSAqd21fc3RhdGUgPSAmY3J0Yy0+ d20uYWN0aXZlLnZsdjsKPiA+ICAJCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiA+ICAK PiA+IC0JCWlmICghY3J0Yy0+YWN0aXZlKQo+ID4gLQkJCWNvbnRpbnVlOwo+ID4gLQo+ID4gIAkJ d20tPnBpcGVbcGlwZV0gPSB3bV9zdGF0ZS0+d21bd20tPmxldmVsXTsKPiA+IC0JCWlmICh3bS0+ Y3hzcikKPiA+ICsJCWlmIChjcnRjLT5hY3RpdmUgJiYgd20tPmN4c3IpCj4gPiAgCQkJd20tPnNy ID0gd21fc3RhdGUtPnNyW3dtLT5sZXZlbF07Cj4gPiAgCj4gPiAgCQl3bS0+ZGRsW3BpcGVdLnBs YW5lW1BMQU5FX1BSSU1BUlldID0gRERMX1BSRUNJU0lPTl9ISUdIIHwgMjsKPiA+IEBAIC0xMzIy LDI0ICsxMzkxLDE1IEBAIHN0YXRpYyBib29sIGlzX2VuYWJsaW5nKGludCBvbGQsIGludCBuZXcs IGludCB0aHJlc2hvbGQpCj4gPiAgCXJldHVybiBvbGQgPCB0aHJlc2hvbGQgJiYgbmV3ID49IHRo cmVzaG9sZDsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgdmx2X3VwZGF0ZV93bShzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiA+ICtzdGF0aWMgdm9pZCB2bHZfcHJvZ3JhbV93YXRlcm1h cmtzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICB7Cj4gPiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOwo+ ID4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9Cj4gPiAtCQl0b19pbnRl bF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwo+ID4gLQllbnVtIHBpcGUgcGlwZSA9IGNy dGMtPnBpcGU7Cj4gPiAgCXN0cnVjdCB2bHZfd21fdmFsdWVzICpvbGRfd20gPSAmZGV2X3ByaXYt PndtLnZsdjsKPiA+ICAJc3RydWN0IHZsdl93bV92YWx1ZXMgbmV3X3dtID0ge307Cj4gPiAgCj4g PiAtCXZsdl9jb21wdXRlX3dtKGNydGNfc3RhdGUpOwo+ID4gLQljcnRjLT53bS5hY3RpdmUudmx2 ID0gY3J0Y19zdGF0ZS0+d20udmx2Lm9wdGltYWw7Cj4gPiAgCXZsdl9tZXJnZV93bShkZXZfcHJp diwgJm5ld193bSk7Cj4gPiAgCj4gPiAtCWlmIChtZW1jbXAob2xkX3dtLCAmbmV3X3dtLCBzaXpl b2YobmV3X3dtKSkgPT0gMCkgewo+ID4gLQkJLyogRklYTUUgc2hvdWxkIGJlIHBhcnQgb2YgY3J0 YyBhdG9taWMgY29tbWl0ICovCj4gPiAtCQl2bHZfcGlwZV9zZXRfZmlmb19zaXplKGNydGNfc3Rh dGUpOwo+ID4gKwlpZiAobWVtY21wKG9sZF93bSwgJm5ld193bSwgc2l6ZW9mKG5ld193bSkpID09 IDApCj4gPiAgCQlyZXR1cm47Cj4gPiAtCX0KPiA+ICAKPiA+ICAJaWYgKGlzX2Rpc2FibGluZyhv bGRfd20tPmxldmVsLCBuZXdfd20ubGV2ZWwsIFZMVl9XTV9MRVZFTF9ERFJfRFZGUykpCj4gPiAg CQljaHZfc2V0X21lbW9yeV9kdmZzKGRldl9wcml2LCBmYWxzZSk7Cj4gPiBAQCAtMTM1MCwxNyAr MTQxMCw4IEBAIHN0YXRpYyB2b2lkIHZsdl91cGRhdGVfd20oc3RydWN0IGludGVsX2NydGMgKmNy dGMpCj4gPiAgCWlmIChpc19kaXNhYmxpbmcob2xkX3dtLT5jeHNyLCBuZXdfd20uY3hzciwgdHJ1 ZSkpCj4gPiAgCQlfaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCBmYWxzZSk7Cj4gPiAg Cj4gPiAtCS8qIEZJWE1FIHNob3VsZCBiZSBwYXJ0IG9mIGNydGMgYXRvbWljIGNvbW1pdCAqLwo+ ID4gLQl2bHZfcGlwZV9zZXRfZmlmb19zaXplKGNydGNfc3RhdGUpOwo+ID4gLQo+ID4gIAl2bHZf d3JpdGVfd21fdmFsdWVzKGRldl9wcml2LCAmbmV3X3dtKTsKPiA+ICAKPiA+IC0JRFJNX0RFQlVH X0tNUygiU2V0dGluZyBGSUZPIHdhdGVybWFya3MgLSAlYzogcGxhbmU9JWQsIGN1cnNvcj0lZCwg Igo+ID4gLQkJICAgICAgInNwcml0ZTA9JWQsIHNwcml0ZTE9JWQsIFNSOiBwbGFuZT0lZCwgY3Vy c29yPSVkIGxldmVsPSVkIGN4c3I9JWRcbiIsCj4gPiAtCQkgICAgICBwaXBlX25hbWUocGlwZSks IG5ld193bS5waXBlW3BpcGVdLnBsYW5lW1BMQU5FX1BSSU1BUlldLCBuZXdfd20ucGlwZVtwaXBl XS5wbGFuZVtQTEFORV9DVVJTT1JdLAo+ID4gLQkJICAgICAgbmV3X3dtLnBpcGVbcGlwZV0ucGxh bmVbUExBTkVfU1BSSVRFMF0sIG5ld193bS5waXBlW3BpcGVdLnBsYW5lW1BMQU5FX1NQUklURTFd LAo+ID4gLQkJICAgICAgbmV3X3dtLnNyLnBsYW5lLCBuZXdfd20uc3IuY3Vyc29yLCBuZXdfd20u bGV2ZWwsIG5ld193bS5jeHNyKTsKPiA+IC0KPiA+ICAJaWYgKGlzX2VuYWJsaW5nKG9sZF93bS0+ Y3hzciwgbmV3X3dtLmN4c3IsIHRydWUpKQo+ID4gIAkJX2ludGVsX3NldF9tZW1vcnlfY3hzcihk ZXZfcHJpdiwgdHJ1ZSk7Cj4gPiAgCj4gPiBAQCAtMTM3Myw2ICsxNDI0LDE4IEBAIHN0YXRpYyB2 b2lkIHZsdl91cGRhdGVfd20oc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gPiAgCSpvbGRfd20g PSBuZXdfd207Cj4gPiAgfQo+ID4gIAo+ID4gK3N0YXRpYyB2b2lkIHZsdl9pbml0aWFsX3dhdGVy bWFya3Moc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiArCQkJCSAgIHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLT5iYXNlLmNydGMtPmRl dik7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0 YXRlLT5iYXNlLmNydGMpOwo+ID4gKwo+ID4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+d20ud21f bXV0ZXgpOwo+ID4gKwljcnRjLT53bS5hY3RpdmUudmx2ID0gY3J0Y19zdGF0ZS0+d20udmx2Lm9w dGltYWw7Cj4gPiArCXZsdl9wcm9ncmFtX3dhdGVybWFya3MoZGV2X3ByaXYpOwo+ID4gKwltdXRl eF91bmxvY2soJmRldl9wcml2LT53bS53bV9tdXRleCk7Cj4gPiArfQo+ID4gKwo+ID4gICNkZWZp bmUgc2luZ2xlX3BsYW5lX2VuYWJsZWQobWFzaykgaXNfcG93ZXJfb2ZfMihtYXNrKQo+ID4gIAo+ ID4gIHN0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4g PiBAQCAtNDUxMiwxNCArNDU3NSwxMCBAQCB2b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShkZXYpOwo+ID4gIAlzdHJ1Y3Qgdmx2X3dtX3ZhbHVlcyAqd20gPSAmZGV2X3By aXYtPndtLnZsdjsKPiA+ICAJc3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4gPiAtCWVudW0gcGlw ZSBwaXBlOwo+ID4gIAl1MzIgdmFsOwo+ID4gIAo+ID4gIAl2bHZfcmVhZF93bV92YWx1ZXMoZGV2 X3ByaXYsIHdtKTsKPiA+ICAKPiA+IC0JZm9yX2VhY2hfaW50ZWxfY3J0YyhkZXYsIGNydGMpCj4g PiAtCQl2bHZfZ2V0X2ZpZm9fc2l6ZSh0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3Rh dGUpKTsKPiA+IC0KPiA+ICAJd20tPmN4c3IgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEZfVkxWKSAm IEZXX0NTUFdSRFdORU47Cj4gPiAgCXdtLT5sZXZlbCA9IFZMVl9XTV9MRVZFTF9QTTI7Cj4gPiAg Cj4gPiBAQCAtNDU1NywxMyArNDYxNiw1MSBAQCB2b2lkIHZsdl93bV9nZXRfaHdfc3RhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICAJCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnJwcy5o d19sb2NrKTsKPiA+ICAJfQo+ID4gIAo+ID4gLQlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBl KQo+ID4gKwlmb3JfZWFjaF9pbnRlbF9jcnRjKGRldiwgY3J0Yykgewo+ID4gKwkJc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQo+ID4gKwkJCXRvX2ludGVsX2NydGNfc3RhdGUo Y3J0Yy0+YmFzZS5zdGF0ZSk7Cj4gPiArCQlzdHJ1Y3Qgdmx2X3dtX3N0YXRlICphY3RpdmUgPSAm Y3J0Yy0+d20uYWN0aXZlLnZsdjsKPiA+ICsJCWNvbnN0IHN0cnVjdCB2bHZfZmlmb19zdGF0ZSAq Zmlmb19zdGF0ZSA9Cj4gPiArCQkJJmNydGNfc3RhdGUtPndtLnZsdi5maWZvX3N0YXRlOwo+ID4g KwkJZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwo+ID4gKwkJZW51bSBwbGFuZV9pZCBwbGFu ZV9pZDsKPiA+ICsJCWludCBsZXZlbDsKPiA+ICsKPiA+ICsJCXZsdl9nZXRfZmlmb19zaXplKGNy dGNfc3RhdGUpOwo+ID4gKwo+ID4gKwkJYWN0aXZlLT5udW1fbGV2ZWxzID0gd20tPmxldmVsICsg MTsKPiA+ICsJCWFjdGl2ZS0+Y3hzciA9IHdtLT5jeHNyOwo+ID4gKwo+ID4gKwkJLyogRklYTUUg c2FuaXRpemUgdGhpbmdzIG1vcmUgKi8KPiA+ICsJCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IGFj dGl2ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykgewo+ID4gKwkJCXN0cnVjdCB2bHZfcGlwZV93bSAq bm9uaW52ZXJ0ZWQgPQo+ID4gKwkJCQkmY3J0Y19zdGF0ZS0+d20udmx2Lm5vbmludmVydGVkW2xl dmVsXTsKPiA+ICsKPiA+ICsJCQlhY3RpdmUtPnNyW2xldmVsXS5wbGFuZSA9IHdtLT5zci5wbGFu ZTsKPiA+ICsJCQlhY3RpdmUtPnNyW2xldmVsXS5jdXJzb3IgPSB3bS0+c3IuY3Vyc29yOwo+ID4g Kwo+ID4gKwkJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoY3J0YywgcGxhbmVfaWQpIHsKPiA+ ICsJCQkJYWN0aXZlLT53bVtsZXZlbF0ucGxhbmVbcGxhbmVfaWRdID0gd20tPnBpcGVbcGlwZV0u cGxhbmVbcGxhbmVfaWRdOwo+ID4gKwo+ID4gKwkJCQlub25pbnZlcnRlZC0+cGxhbmVbcGxhbmVf aWRdID0KPiA+ICsJCQkJCXZsdl9pbnZlcnRfd21fdmFsdWUoYWN0aXZlLT53bVtsZXZlbF0ucGxh bmVbcGxhbmVfaWRdLAo+ID4gKwkJCQkJCQkgICAgZmlmb19zdGF0ZS0+cGxhbmVbcGxhbmVfaWRd KTsKPiA+ICsJCQl9Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9j cnRjKGNydGMsIHBsYW5lX2lkKQo+ID4gKwkJCXZsdl9wbGFuZV93bV9zZXQoY3J0Y19zdGF0ZSwg bGV2ZWwsIHBsYW5lX2lkLCBVU0hSVF9NQVgpOwo+ID4gKwkJdmx2X2ludmFsaWRhdGVfd21zKGNy dGMsIGFjdGl2ZSwgbGV2ZWwpOwo+ID4gKwo+ID4gKwkJY3J0Y19zdGF0ZS0+d20udmx2Lm9wdGlt YWwgPSAqYWN0aXZlOwo+ID4gKwo+ID4gIAkJRFJNX0RFQlVHX0tNUygiSW5pdGlhbCB3YXRlcm1h cmtzOiBwaXBlICVjLCBwbGFuZT0lZCwgY3Vyc29yPSVkLCBzcHJpdGUwPSVkLCBzcHJpdGUxPSVk XG4iLAo+ID4gIAkJCSAgICAgIHBpcGVfbmFtZShwaXBlKSwKPiA+ICAJCQkgICAgICB3bS0+cGlw ZVtwaXBlXS5wbGFuZVtQTEFORV9QUklNQVJZXSwKPiA+ICAJCQkgICAgICB3bS0+cGlwZVtwaXBl XS5wbGFuZVtQTEFORV9DVVJTT1JdLAo+ID4gIAkJCSAgICAgIHdtLT5waXBlW3BpcGVdLnBsYW5l W1BMQU5FX1NQUklURTBdLAo+ID4gIAkJCSAgICAgIHdtLT5waXBlW3BpcGVdLnBsYW5lW1BMQU5F X1NQUklURTFdKTsKPiA+ICsJfQo+ID4gIAo+ID4gIAlEUk1fREVCVUdfS01TKCJJbml0aWFsIHdh dGVybWFya3M6IFNSIHBsYW5lPSVkLCBTUiBjdXJzb3I9JWQgbGV2ZWw9JWQgY3hzcj0lZFxuIiwK PiA+ICAJCSAgICAgIHdtLT5zci5wbGFuZSwgd20tPnNyLmN1cnNvciwgd20tPmxldmVsLCB3bS0+ Y3hzcik7Cj4gPiBAQCAtNzY5MSw3ICs3Nzg4LDkgQEAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICAJCX0KPiA+ICAJfSBlbHNlIGlmIChJ U19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewo+ID4g IAkJdmx2X3NldHVwX3dtX2xhdGVuY3koZGV2X3ByaXYpOwo+ID4gLQkJZGV2X3ByaXYtPmRpc3Bs YXkudXBkYXRlX3dtID0gdmx2X3VwZGF0ZV93bTsKPiA+ICsJCWRldl9wcml2LT5kaXNwbGF5LmNv bXB1dGVfcGlwZV93bSA9IHZsdl9jb21wdXRlX3BpcGVfd207Cj4gPiArCQlkZXZfcHJpdi0+ZGlz cGxheS5pbml0aWFsX3dhdGVybWFya3MgPSB2bHZfaW5pdGlhbF93YXRlcm1hcmtzOwo+ID4gKwkJ ZGV2X3ByaXYtPmRpc3BsYXkuYXRvbWljX3VwZGF0ZV93YXRlcm1hcmtzID0gdmx2X2F0b21pY191 cGRhdGVfZmlmbzsKPiA+ICAJfSBlbHNlIGlmIChJU19QSU5FVklFVyhkZXZfcHJpdikpIHsKPiA+ ICAJCWlmICghaW50ZWxfZ2V0X2N4c3JfbGF0ZW5jeShJU19QSU5FVklFV19HKGRldl9wcml2KSwK PiA+ICAJCQkJCSAgICBkZXZfcHJpdi0+aXNfZGRyMywKPiAKCi0tIApWaWxsZSBTeXJqw6Rsw6QK SW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=