From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 09/12] drm/i915: Rewrite VLV/CHV watermark code Date: Tue, 10 Mar 2015 13:27:25 +0200 Message-ID: <20150310112725.GE11371@intel.com> References: <1425583192-2584-1-git-send-email-ville.syrjala@linux.intel.com> <1425583192-2584-10-git-send-email-ville.syrjala@linux.intel.com> <20150310102629.GK3800@phenom.ffwll.local> 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 ESMTP id D7FA16E399 for ; Tue, 10 Mar 2015 04:27:29 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20150310102629.GK3800@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBNYXIgMTAsIDIwMTUgYXQgMTE6MjY6MjlBTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUaHUsIE1hciAwNSwgMjAxNSBhdCAwOToxOTo0OVBNICswMjAwLCB2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90ZToKPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiAKPiA+IEFzc3VtaW5nIHRoZSBQTkQg ZGVhZGxpbmUgbWVjaGFuaXNtIHdvcmtzIHJlYXNvbmFibHkgd2Ugc2hvdWxkIGRvCj4gPiBtZW1v cnkgcmVxdWVzdHMgYXMgZWFybHkgYXMgcG9zc2libGUgc28gdGhhdCBQTkQgaGFzIHNjaGVkdWxl IHRoZQo+ID4gcmVxdWVzdHMgbW9yZSBpbnRlbGxpZ2VudGx5LiBDdXJyZW50bHkgd2UncmUgc3Rp bGwgY2FsY3VsYXRpbmcKPiA+IHRoZSB3YXRlcm1hcmtzIGFzIGlmIFZMVi9DSFYgYXJlIGlkZW50 aWNhbCB0byBnNHgsIHdoaWNoIGlzbid0Cj4gPiB0aGUgY2FzZS4KPiA+IAo+ID4gVGhlIGN1cnJl bnQgY29kZSBhbHNvIHNlZW1zIHRvIGNhbGN1bGF0ZSBpbnN1ZmZpY2llbnQgd2F0ZXJtYXJrcwo+ ID4gYW5kIGhlbmNlIHdlJ3JlIHNlZWluZyBzb21lIHVuZGVycnVucywgZXNwZWNpYWxseSBvbiBo aWdoIHJlc29sdXRpb24KPiA+IGRpc3BsYXlzLgo+ID4gCj4gPiBUbyBmaXggaXQganVzdCByaXAg b3V0IHRoZSBjdXJyZW50IGNvZGUgYW5kIHJlcGxhY2UgaXMgd2l0aCBzb21ldGhpbmcKPiA+IHRo YXQgdHJpZXMgdG8gdXRpbGl6ZSBQTkQgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuCj4gPiAK PiA+IFdlIG5vdyBjYWxjdWxhdGUgdGhlIFdNIHdhdGVybWFyayB0byB0cmlnZ2VyIHdoZW4gdGhl IEZJRk8gc3RpbGwgaGFzCj4gPiAyNTZ1cyB3b3J0aCBvZiBkYXRhLiAyNTZ1cyBpcyB0aGUgbWF4 aW11bSBkZWFkbGluZSB2YWx1ZSBzdXBvb3J0ZWQgYnkKPiA+IFBORCwgc28gaXNzdWluZyBtZW1v cnkgcmVxdWVzdHMgZWFybGllciB3b3VsZCBtZWFuIHdlIHByb2JhYmx5IGNvdWxkbid0Cj4gPiB1 dGlsaXplIHRoZSBmdWxsIEZJRk8gYXMgUE5EIHdvdWxkIGF0dGVtcHQgdG8gcmV0dXJuIHRoZSBk YXRhIGF0Cj4gPiBsZWFzdCBpbiBhdCBsZWFzdCAyNTZ1cy4gV2UgYWxzbyBjbGFtcCB0aGUgd2F0 ZXJtYXJrIHRvIGF0IGxlYXN0IDgKPiA+IGNhY2hlbGluZXMgYXMgdGhhdCdzIHRoZSBtYWdpYyB3 YXRlcm1hcmsgdGhhdCBlbmFibGluZyB0cmlja2xlIGZlZWQKPiA+IHdvdWxkIGFsc28gaW1wb3Nl LiBJJ20gYXNzdW1pbmcgaXQgbWF0Y2hlcyBzb21lIGJ1cnN0IHNpemUuCj4gPiAKPiA+IEluIHRo ZW9yeSB3ZSBjb3VsZCBqdXN0IGVuYWJsZSB0cmlja2xlIGZlZWQgYW5kIGlnbm9yZSB0aGUgV00g dmFsdWVzLAo+ID4gZXhjZXB0IHRyaWNrbGUgZmVlZCBkb2Vzbid0IHdvcmsgd2l0aCBtYXggZmlm byBtb2RlIGFueXdheSwgc28gd2UnZAo+ID4gc3RpbGwgbmVlZCB0byBjYWxjdWxhdGUgdGhlIFNS IHdhdGVybWFya3MuIEl0IHNlZW1zIGNsZWFuZXIgdG8ganVzdAo+ID4gZGlzYWJsZSB0cmlja2xl IGZlZWQgYW5kIGNhbGN1bGF0ZSBhbGwgd2F0ZXJtYXJrcyB0aGUgc2FtZSB3YXkuIEFsc28KPiA+ IHRyaWNrbGUgZmVlZCB3b3VsZG4ndCBhY2NvdW50IGZvciB0aGUgMjU2dXMgbWF4IGRlYWRsaW5l IHZhbHVlLCB0aG9ndWgKPiA+IHRoYXQgbWF5IGJlIGEgbW9vdCBwb2ludCBpbiBub24tbWF4IGZp Zm8gbW9kZSBzaWNuZSB0aGUgRklGT3MgYXJlIGZhaXJseQo+ID4gc21hbGwuCj4gPiAKPiA+IE9u IFZMViBtYXggZmlmbyBtb2RlIGNhbiBiZSB1c2VkIHdpdGggZWl0aGVyIHByaW1hcnkgb3Igc3By aXRlIHBsYW5lcy4KPiA+IFNvIHRoZSBjb2RlIG5vdyBhbHNvIGNoZWNrcyBhbGwgdGhlIHBsYW5l cyAoYXBhcnQgZnJvbSB0aGUgY3Vyc29yKQo+ID4gd2hlbiBjYWxjdWxhdGluZyB0aGUgU1IgcGxh bmUgd2F0ZXJtYXJrLgo+ID4gCj4gPiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBX TTEgd2F0ZXJtYXJrcyBzaW5jZSB3ZSdyZSB1c2luZyB0aGUKPiA+IFBORCBkZWFkbGluZSBzY2hl bWUgd2hpY2ggbWVhbnMgdGhlIGhhcmR3YXJlIGlnbm9yZXMgV00xIHZhbHVlcy4KPiA+IAo+ID4g djI6IFVzZSBwbGFuZS0+c3RhdGUtPmZiIGluc3RlYWQgb2YgcGxhbmUtPmZiCj4gPiAKPiA+IFNp Z25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5j b20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIHwgIDExICsr Cj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCB8ICAgNCArLQo+ID4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgfCAzMzAgKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMTg4IGluc2VydGlvbnMoKyks IDE1NyBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gPiBpbmRl eCA1ZGU2OWEwLi5iMTkxYjEyIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4g QEAgLTE1MTYsNiArMTUxNiwxNyBAQCBzdHJ1Y3QgaWxrX3dtX3ZhbHVlcyB7Cj4gPiAgCj4gPiAg c3RydWN0IHZsdl93bV92YWx1ZXMgewo+ID4gIAlzdHJ1Y3Qgewo+ID4gKwkJdWludDE2X3QgcHJp bWFyeTsKPiA+ICsJCXVpbnQxNl90IHNwcml0ZVsyXTsKPiA+ICsJCXVpbnQ4X3QgY3Vyc29yOwo+ ID4gKwl9IHBpcGVbM107Cj4gPiArCj4gPiArCXN0cnVjdCB7Cj4gPiArCQl1aW50MTZfdCBwbGFu ZTsKPiA+ICsJCXVpbnQ4X3QgY3Vyc29yOwo+ID4gKwl9IHNyOwo+ID4gKwo+ID4gKwlzdHJ1Y3Qg ewo+ID4gIAkJdWludDhfdCBjdXJzb3I7Cj4gPiAgCQl1aW50OF90IHNwcml0ZVsyXTsKPiA+ICAJ CXVpbnQ4X3QgcHJpbWFyeTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gaW5kZXggODE3 ODYxMC4uOWY5ODM4NCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+IEBAIC00 MTI3LDcgKzQxMjcsNyBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dlbGxzIHsKPiA+ICAvKiB2bHYv Y2h2IGhpZ2ggb3JkZXIgYml0cyAqLwo+ID4gICNkZWZpbmUgRFNQSE9XTQkJCShWTFZfRElTUExB WV9CQVNFICsgMHg3MDA2NCkKPiA+ICAjZGVmaW5lICAgRFNQRldfU1JfSElfU0hJRlQJCTI0Cj4g PiAtI2RlZmluZSAgIERTUEZXX1NSX0hJX01BU0sJCSgxPDwyNCkKPiA+ICsjZGVmaW5lICAgRFNQ RldfU1JfSElfTUFTSwkJKDM8PDI0KSAvKiAyIGJpdHMgZm9yIGNodiwgMSBmb3Igdmx2ICovCj4g PiAgI2RlZmluZSAgIERTUEZXX1NQUklURUZfSElfU0hJRlQJMjMKPiA+ICAjZGVmaW5lICAgRFNQ RldfU1BSSVRFRl9ISV9NQVNLCQkoMTw8MjMpCj4gPiAgI2RlZmluZSAgIERTUEZXX1NQUklURUVf SElfU0hJRlQJMjIKPiA+IEBAIC00MTQ4LDcgKzQxNDgsNyBAQCBlbnVtIHNrbF9kaXNwX3Bvd2Vy X3dlbGxzIHsKPiA+ICAjZGVmaW5lICAgRFNQRldfUExBTkVBX0hJX01BU0sJCSgxPDwwKQo+ID4g ICNkZWZpbmUgRFNQSE9XTTEJCShWTFZfRElTUExBWV9CQVNFICsgMHg3MDA2OCkKPiA+ICAjZGVm aW5lICAgRFNQRldfU1JfV00xX0hJX1NISUZUCQkyNAo+ID4gLSNkZWZpbmUgICBEU1BGV19TUl9X TTFfSElfTUFTSwkJKDE8PDI0KQo+ID4gKyNkZWZpbmUgICBEU1BGV19TUl9XTTFfSElfTUFTSwkJ KDM8PDI0KSAvKiAyIGJpdHMgZm9yIGNodiwgMSBmb3Igdmx2ICovCj4gPiAgI2RlZmluZSAgIERT UEZXX1NQUklURUZfV00xX0hJX1NISUZUCTIzCj4gPiAgI2RlZmluZSAgIERTUEZXX1NQUklURUZf V00xX0hJX01BU0sJKDE8PDIzKQo+ID4gICNkZWZpbmUgICBEU1BGV19TUFJJVEVFX1dNMV9ISV9T SElGVAkyMgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiBpbmRleCBiZGIwZjVkLi40OTc4 NDdjIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gQEAgLTc3OCw2ICs3Nzgs NTUgQEAgc3RhdGljIHZvaWQgdmx2X3dyaXRlX3dtX3ZhbHVlcyhzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywKPiA+ICAJCSAgICh3bS0+ZGRsW3BpcGVdLnNwcml0ZVswXSA8PCBERExfU1BSSVRFX1NI SUZUKDApKSB8Cj4gPiAgCQkgICAod20tPmRkbFtwaXBlXS5wcmltYXJ5IDw8IERETF9QTEFORV9T SElGVCkpOwo+ID4gIAo+ID4gKwlJOTE1X1dSSVRFKERTUEZXMSwKPiA+ICsJCSAgICgod20tPnNy LnBsYW5lIDw8IERTUEZXX1NSX1NISUZUKSAmIERTUEZXX1NSX01BU0spIHwKPiA+ICsJCSAgICgo d20tPnBpcGVbUElQRV9CXS5jdXJzb3IgPDwgRFNQRldfQ1VSU09SQl9TSElGVCkgJiBEU1BGV19D VVJTT1JCX01BU0spIHwKPiA+ICsJCSAgICgod20tPnBpcGVbUElQRV9CXS5wcmltYXJ5IDw8IERT UEZXX1BMQU5FQl9TSElGVCkgJiBEU1BGV19QTEFORUJfTUFTS19WTFYpIHwKPiA+ICsJCSAgICgo d20tPnBpcGVbUElQRV9BXS5wcmltYXJ5IDw8IERTUEZXX1BMQU5FQV9TSElGVCkgJiBEU1BGV19Q TEFORUFfTUFTS19WTFYpKTsKPiA+ICsJSTkxNV9XUklURShEU1BGVzIsCj4gPiArCQkgICAoKHdt LT5waXBlW1BJUEVfQV0uc3ByaXRlWzFdIDw8IERTUEZXX1NQUklURUJfU0hJRlQpICYgRFNQRldf U1BSSVRFQl9NQVNLX1ZMVikgfAo+ID4gKwkJICAgKCh3bS0+cGlwZVtQSVBFX0FdLmN1cnNvciA8 PCBEU1BGV19DVVJTT1JBX1NISUZUKSAmIERTUEZXX0NVUlNPUkFfTUFTSykgfAo+ID4gKwkJICAg KCh3bS0+cGlwZVtQSVBFX0FdLnNwcml0ZVswXSA8PCBEU1BGV19TUFJJVEVBX1NISUZUKSAmIERT UEZXX1NQUklURUFfTUFTS19WTFYpKTsKPiA+ICsJSTkxNV9XUklURShEU1BGVzMsCj4gPiArCQkg ICAoKHdtLT5zci5jdXJzb3IgPDwgRFNQRldfQ1VSU09SX1NSX1NISUZUKSAmIERTUEZXX0NVUlNP Ul9TUl9NQVNLKSk7Cj4gPiArCj4gPiArCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewo+ ID4gKwkJSTkxNV9XUklURShEU1BGVzdfQ0hWLAo+ID4gKwkJCSAgICgod20tPnBpcGVbUElQRV9C XS5zcHJpdGVbMV0gPDwgRFNQRldfU1BSSVRFRF9TSElGVCkgJiBEU1BGV19TUFJJVEVEX01BU0sp IHwKPiA+ICsJCQkgICAoKHdtLT5waXBlW1BJUEVfQl0uc3ByaXRlWzBdIDw8IERTUEZXX1NQUklU RUNfU0hJRlQpICYgRFNQRldfU1BSSVRFQ19NQVNLKSk7Cj4gPiArCQlJOTE1X1dSSVRFKERTUEZX OF9DSFYsCj4gPiArCQkJICAgKCh3bS0+cGlwZVtQSVBFX0NdLnNwcml0ZVsxXSA8PCBEU1BGV19T UFJJVEVGX1NISUZUKSAmIERTUEZXX1NQUklURUZfTUFTSykgfAo+ID4gKwkJCSAgICgod20tPnBp cGVbUElQRV9DXS5zcHJpdGVbMF0gPDwgRFNQRldfU1BSSVRFRV9TSElGVCkgJiBEU1BGV19TUFJJ VEVFX01BU0spKTsKPiA+ICsJCUk5MTVfV1JJVEUoRFNQRlc5X0NIViwKPiA+ICsJCQkgICAoKHdt LT5waXBlW1BJUEVfQ10ucHJpbWFyeSA8PCBEU1BGV19QTEFORUNfU0hJRlQpICYgRFNQRldfUExB TkVDX01BU0spIHwKPiA+ICsJCQkgICAoKHdtLT5waXBlW1BJUEVfQ10uY3Vyc29yIDw8IERTUEZX X0NVUlNPUkNfU0hJRlQpICYgRFNQRldfQ1VSU09SQ19NQVNLKSk7Cj4gPiArCQlJOTE1X1dSSVRF KERTUEhPV00sCj4gPiArCQkJICAgKCgod20tPnNyLnBsYW5lID4+IDkpIDw8IERTUEZXX1NSX0hJ X1NISUZUKSAmIERTUEZXX1NSX0hJX01BU0spIHwKPiA+ICsJCQkgICAoKCh3bS0+cGlwZVtQSVBF X0NdLnNwcml0ZVsxXSA+PiA4KSA8PCBEU1BGV19TUFJJVEVGX0hJX1NISUZUKSAmIERTUEZXX1NQ UklURUZfSElfTUFTSykgfAo+ID4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVfQ10uc3ByaXRlWzBd ID4+IDgpIDw8IERTUEZXX1NQUklURUVfSElfU0hJRlQpICYgRFNQRldfU1BSSVRFRV9ISV9NQVNL KSB8Cj4gPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9DXS5wcmltYXJ5ID4+IDgpIDw8IERTUEZX X1BMQU5FQ19ISV9TSElGVCkgJiBEU1BGV19QTEFORUNfSElfTUFTSykgfAo+ID4gKwkJCSAgICgo KHdtLT5waXBlW1BJUEVfQl0uc3ByaXRlWzFdID4+IDgpIDw8IERTUEZXX1NQUklURURfSElfU0hJ RlQpICYgRFNQRldfU1BSSVRFRF9ISV9NQVNLKSB8Cj4gPiArCQkJICAgKCgod20tPnBpcGVbUElQ RV9CXS5zcHJpdGVbMF0gPj4gOCkgPDwgRFNQRldfU1BSSVRFQ19ISV9TSElGVCkgJiBEU1BGV19T UFJJVEVDX0hJX01BU0spIHwKPiA+ICsJCQkgICAoKCh3bS0+cGlwZVtQSVBFX0JdLnByaW1hcnkg Pj4gOCkgPDwgRFNQRldfUExBTkVCX0hJX1NISUZUKSAmIERTUEZXX1BMQU5FQl9ISV9NQVNLKSB8 Cj4gPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9BXS5zcHJpdGVbMV0gPj4gOCkgPDwgRFNQRldf U1BSSVRFQl9ISV9TSElGVCkgJiBEU1BGV19TUFJJVEVCX0hJX01BU0spIHwKPiA+ICsJCQkgICAo KCh3bS0+cGlwZVtQSVBFX0FdLnNwcml0ZVswXSA+PiA4KSA8PCBEU1BGV19TUFJJVEVBX0hJX1NI SUZUKSAmIERTUEZXX1NQUklURUFfSElfTUFTSykgfAo+ID4gKwkJCSAgICgoKHdtLT5waXBlW1BJ UEVfQV0ucHJpbWFyeSA+PiA4KSA8PCBEU1BGV19QTEFORUFfSElfU0hJRlQpICYgRFNQRldfUExB TkVBX0hJX01BU0spKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCUk5MTVfV1JJVEUoRFNQRlc3LAo+ ID4gKwkJCSAgICgod20tPnBpcGVbUElQRV9CXS5zcHJpdGVbMV0gPDwgRFNQRldfU1BSSVRFRF9T SElGVCkgJiBEU1BGV19TUFJJVEVEX01BU0spIHwKPiA+ICsJCQkgICAoKHdtLT5waXBlW1BJUEVf Ql0uc3ByaXRlWzBdIDw8IERTUEZXX1NQUklURUNfU0hJRlQpICYgRFNQRldfU1BSSVRFQ19NQVNL KSk7Cj4gPiArCQlJOTE1X1dSSVRFKERTUEhPV00sCj4gPiArCQkJICAgKCgod20tPnNyLnBsYW5l ID4+IDkpIDw8IERTUEZXX1NSX0hJX1NISUZUKSAmIERTUEZXX1NSX0hJX01BU0spIHwKPiA+ICsJ CQkgICAoKCh3bS0+cGlwZVtQSVBFX0JdLnNwcml0ZVsxXSA+PiA4KSA8PCBEU1BGV19TUFJJVEVE X0hJX1NISUZUKSAmIERTUEZXX1NQUklURURfSElfTUFTSykgfAo+ID4gKwkJCSAgICgoKHdtLT5w aXBlW1BJUEVfQl0uc3ByaXRlWzBdID4+IDgpIDw8IERTUEZXX1NQUklURUNfSElfU0hJRlQpICYg RFNQRldfU1BSSVRFQ19ISV9NQVNLKSB8Cj4gPiArCQkJICAgKCgod20tPnBpcGVbUElQRV9CXS5w cmltYXJ5ID4+IDgpIDw8IERTUEZXX1BMQU5FQl9ISV9TSElGVCkgJiBEU1BGV19QTEFORUJfSElf TUFTSykgfAo+ID4gKwkJCSAgICgoKHdtLT5waXBlW1BJUEVfQV0uc3ByaXRlWzFdID4+IDgpIDw8 IERTUEZXX1NQUklURUJfSElfU0hJRlQpICYgRFNQRldfU1BSSVRFQl9ISV9NQVNLKSB8Cj4gPiAr CQkJICAgKCgod20tPnBpcGVbUElQRV9BXS5zcHJpdGVbMF0gPj4gOCkgPDwgRFNQRldfU1BSSVRF QV9ISV9TSElGVCkgJiBEU1BGV19TUFJJVEVBX0hJX01BU0spIHwKPiA+ICsJCQkgICAoKCh3bS0+ cGlwZVtQSVBFX0FdLnByaW1hcnkgPj4gOCkgPDwgRFNQRldfUExBTkVBX0hJX1NISUZUKSAmIERT UEZXX1BMQU5FQV9ISV9NQVNLKSk7Cj4gCj4gQ2hlY2twYXRjaCBjb21wbGFpbmVkIGFib3V0IHRo aXMgY29kZSBhbmQgSSBjb25jdXIgdGhhdCBpdCdzIG5vdCBwcmV0dHkuCj4gQ2FyZSBmb3IgYSBw cmV0dGlmaWNhdGlvbiBmb2xsb3ctdXA/IFNvbWUgI2RlZmluZXMgdG8gZG8gdGhlIHNoaWZ0K21h c2sKPiB3b3VsZCBoZWxwIGEgbG90IGltby4gT3IgbWF5YmUgbm90IGNvbXB1dGluZyBldmVyeXRo aW5nIGluLXBsYWNlLgoKWWVhaCwgdGhhdCBwYXJ0IGlzIGFib3V0IGFzIHVnbHkgYXMgeW91IGNh biBnZXQuIEkgZGlkIHRoaW5rIGFib3V0CndyYXBwaW5nIHRoZSBtYWdpYyBpbiBhIG1hY3JvLCBi dXQgZGVjaWRlZCB0aGF0IEkgZGlkbid0IHdhbnQgdG8gd2FzdGUKbXkgdGltZSB3aXRoIHRvbyBt dWNoIHBvbGlzaCBhdCB0aGF0IHBvaW50LiBOb3cgdGhhdCB0aGluZ3MgYXJlIGEgYml0Cm1vcmUg Y2FsbSBwZXJoYXBzLCBJIGNhbiB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGF0LiBXcmFwcGluZyBp dCB1cCB3b3VsZAphbHNvIHJlZHVjZSB0aGUgY2hhbmNlcyBvZiBhIHR5cG8gc29tZXdoZXJlLgoK PiAtRGFuaWVsCj4gCj4gPiArCX0KPiA+ICsKPiA+ICsJUE9TVElOR19SRUFEKERTUEZXMSk7Cj4g PiArCj4gPiAgCWRldl9wcml2LT53bS52bHYgPSAqd207Cj4gPiAgfQo+ID4gIAo+ID4gQEAgLTgy MiwxNjkgKzg3MSwxMTMgQEAgc3RhdGljIHVpbnQ4X3Qgdmx2X2NvbXB1dGVfZHJhaW5fbGF0ZW5j eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAgCQkJCURETF9QUkVDSVNJT05fSElHSCA6IERE TF9QUkVDSVNJT05fTE9XKTsKPiA+ICB9Cj4gPiAgCj4gPiAtLyoKPiA+IC0gKiBVcGRhdGUgZHJh aW4gbGF0ZW5jeSByZWdpc3RlcnMgb2YgbWVtb3J5IGFyYml0ZXIKPiA+IC0gKgo+ID4gLSAqIFZh bGxleXZpZXcgU29DIGhhcyBhIG5ldyBtZW1vcnkgYXJiaXRlciBhbmQgbmVlZHMgZHJhaW4gbGF0 ZW5jeSByZWdpc3RlcnMKPiA+IC0gKiB0byBiZSBwcm9ncmFtbWVkLiBFYWNoIHBsYW5lIGhhcyBh IGRyYWluIGxhdGVuY3kgbXVsdGlwbGllciBhbmQgYSBkcmFpbgo+ID4gLSAqIGxhdGVuY3kgdmFs dWUuCj4gPiAtICovCj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgdmx2X3VwZGF0ZV9kcmFpbl9sYXRl bmN5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICtzdGF0aWMgaW50IHZsdl9jb21wdXRlX3dt KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+ID4gKwkJCSAgc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSwKPiA+ICsJCQkgIGludCBmaWZvX3NpemUpCj4gPiArewo+ID4gKwlpbnQgY2xvY2ssIGVu dHJpZXMsIHBpeGVsX3NpemU7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEZJWE1FIHRoZSBwbGFu ZSBtaWdodCBoYXZlIGFuIGZiCj4gPiArCSAqIGJ1dCBiZSBpbnZpc2libGUgKGVnLiBkdWUgdG8g Y2xpcHBpbmcpCj4gPiArCSAqLwo+ID4gKwlpZiAoIWNydGMtPmFjdGl2ZSB8fCAhcGxhbmUtPmJh c2Uuc3RhdGUtPmZiKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCXBpeGVsX3NpemUgPSBk cm1fZm9ybWF0X3BsYW5lX2NwcChwbGFuZS0+YmFzZS5zdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdCwg MCk7Cj4gPiArCWNsb2NrID0gY3J0Yy0+Y29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGUuY3J0Y19j bG9jazsKPiA+ICsKPiA+ICsJZW50cmllcyA9IERJVl9ST1VORF9VUChjbG9jaywgMTAwMCkgKiBw aXhlbF9zaXplOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBTZXQgdXAgdGhlIHdhdGVybWFyayBz dWNoIHRoYXQgd2UgZG9uJ3Qgc3RhcnQgaXNzdWluZyBtZW1vcnkKPiA+ICsJICogcmVxdWVzdHMg dW50aWwgd2UgYXJlIHdpdGhpbiBQTkQncyBtYXggZGVhZGxpbmUgdmFsdWUgKDI1NnVzKS4KPiA+ ICsJICogSWRlYSBiZWluZyB0byBiZSBpZGxlIGFzIGxvbmcgYXMgcG9zc2libGUgd2hpbGUgc3Rp bGwgdGFraW5nCj4gPiArCSAqIGFkdmF0YW5nZSBvZiBQTkQncyBkZWFkbGluZSBzY2hlZHVsaW5n LiBUaGUgbGltaXQgb2YgOAo+ID4gKwkgKiBjYWNoZWxpbmVzICh1c2VkIHdoZW4gdGhlIEZJRk8g d2lsbCBhbnl3YXkgZHJhaW4gaW4gbGVzcyB0aW1lCj4gPiArCSAqIHRoYW4gMjU2dXMpIHNob3Vs ZCBtYXRjaCB3aGF0IHdlIHdvdWxkIGJlIGRvbmUgaWYgdHJpY2tsZQo+ID4gKwkgKiBmZWVkIHdl cmUgZW5hYmxlZC4KPiA+ICsJICovCj4gPiArCXJldHVybiBmaWZvX3NpemUgLSBjbGFtcChESVZf Uk9VTkRfVVAoMjU2ICogZW50cmllcywgNjQpLCAwLCBmaWZvX3NpemUgLSA4KTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGJvb2wgdmx2X2NvbXB1dGVfc3Jfd20oc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiA+ICsJCQkgICAgICBzdHJ1Y3Qgdmx2X3dtX3ZhbHVlcyAqd20pCj4gPiArewo+ID4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gPiAr CXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ICsJZW51bSBwaXBlIHBpcGUgPSBJTlZBTElEX1BJ UEU7Cj4gPiArCWludCBudW1fcGxhbmVzID0gMDsKPiA+ICsJaW50IGZpZm9fc2l6ZSA9IDA7Cj4g PiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4gPiArCj4gPiArCXdtLT5zci5jdXJzb3Ig PSB3bS0+c3IucGxhbmUgPSAwOwo+ID4gKwo+ID4gKwljcnRjID0gc2luZ2xlX2VuYWJsZWRfY3J0 YyhkZXYpOwo+ID4gKwkvKiBtYXhmaWZvIG5vdCBzdXBwb3J0ZWQgb24gcGlwZSBDICovCj4gPiAr CWlmIChjcnRjICYmIHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGUgIT0gUElQRV9DKSB7Cj4gPiAr CQlwaXBlID0gdG9faW50ZWxfY3J0YyhjcnRjKS0+cGlwZTsKPiA+ICsJCW51bV9wbGFuZXMgPSAh IXdtLT5waXBlW3BpcGVdLnByaW1hcnkgKwo+ID4gKwkJCSEhd20tPnBpcGVbcGlwZV0uc3ByaXRl WzBdICsKPiA+ICsJCQkhIXdtLT5waXBlW3BpcGVdLnNwcml0ZVsxXTsKPiA+ICsJCWZpZm9fc2l6 ZSA9IElOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1fcGlwZXMgKiA1MTIgLSAxOwo+ID4gKwl9Cj4g PiArCj4gPiArCWlmIChmaWZvX3NpemUgPT0gMCB8fCBudW1fcGxhbmVzID4gMSkKPiA+ICsJCXJl dHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJd20tPnNyLmN1cnNvciA9IHZsdl9jb21wdXRlX3dtKHRv X2ludGVsX2NydGMoY3J0YyksCj4gPiArCQkJCSAgICAgICB0b19pbnRlbF9wbGFuZShjcnRjLT5j dXJzb3IpLCAweDNmKTsKPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwbGFuZSwgJmRl di0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwgYmFzZS5oZWFkKSB7Cj4gPiArCQlpZiAocGxhbmUt PmJhc2UudHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpCj4gPiArCQkJY29udGludWU7Cj4g PiArCj4gPiArCQlpZiAocGxhbmUtPnBpcGUgIT0gcGlwZSkKPiA+ICsJCQljb250aW51ZTsKPiA+ ICsKPiA+ICsJCXdtLT5zci5wbGFuZSA9IHZsdl9jb21wdXRlX3dtKHRvX2ludGVsX2NydGMoY3J0 YyksCj4gPiArCQkJCQkgICAgICBwbGFuZSwgZmlmb19zaXplKTsKPiA+ICsJCWlmICh3bS0+c3Iu cGxhbmUgIT0gMCkKPiA+ICsJCQlicmVhazsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gdHJ1 ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgdmFsbGV5dmlld191cGRhdGVfd20oc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNydGMtPmRldjsKPiA+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKPiA+ICAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19p bnRlbF9jcnRjKGNydGMpOwo+ID4gIAllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7 Cj4gPiArCWJvb2wgY3hzcl9lbmFibGVkOwo+ID4gIAlzdHJ1Y3Qgdmx2X3dtX3ZhbHVlcyB3bSA9 IGRldl9wcml2LT53bS52bHY7Cj4gPiAgCj4gPiAgCXdtLmRkbFtwaXBlXS5wcmltYXJ5ID0gdmx2 X2NvbXB1dGVfZHJhaW5fbGF0ZW5jeShjcnRjLCBjcnRjLT5wcmltYXJ5KTsKPiA+ICsJd20ucGlw ZVtwaXBlXS5wcmltYXJ5ID0gdmx2X2NvbXB1dGVfd20oaW50ZWxfY3J0YywKPiA+ICsJCQkJCSAg ICAgICB0b19pbnRlbF9wbGFuZShjcnRjLT5wcmltYXJ5KSwKPiA+ICsJCQkJCSAgICAgICB2bHZf Z2V0X2ZpZm9fc2l6ZShkZXYsIHBpcGUsIDApKTsKPiA+ICsKPiA+ICAJd20uZGRsW3BpcGVdLmN1 cnNvciA9IHZsdl9jb21wdXRlX2RyYWluX2xhdGVuY3koY3J0YywgY3J0Yy0+Y3Vyc29yKTsKPiA+ ICsJd20ucGlwZVtwaXBlXS5jdXJzb3IgPSB2bHZfY29tcHV0ZV93bShpbnRlbF9jcnRjLAo+ID4g KwkJCQkJICAgICAgdG9faW50ZWxfcGxhbmUoY3J0Yy0+Y3Vyc29yKSwKPiA+ICsJCQkJCSAgICAg IDB4M2YpOwo+ID4gKwo+ID4gKwljeHNyX2VuYWJsZWQgPSB2bHZfY29tcHV0ZV9zcl93bShkZXYs ICZ3bSk7Cj4gPiArCj4gPiArCWlmIChtZW1jbXAoJndtLCAmZGV2X3ByaXYtPndtLnZsdiwgc2l6 ZW9mKHdtKSkgPT0gMCkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJRFJNX0RFQlVHX0tNUygi U2V0dGluZyBGSUZPIHdhdGVybWFya3MgLSAlYzogcGxhbmU9JWQsIGN1cnNvcj0lZCwgIgo+ID4g KwkJICAgICAgIlNSOiBwbGFuZT0lZCwgY3Vyc29yPSVkXG4iLCBwaXBlX25hbWUocGlwZSksCj4g PiArCQkgICAgICB3bS5waXBlW3BpcGVdLnByaW1hcnksIHdtLnBpcGVbcGlwZV0uY3Vyc29yLAo+ ID4gKwkJICAgICAgd20uc3IucGxhbmUsIHdtLnNyLmN1cnNvcik7Cj4gPiArCj4gPiArCWlmICgh Y3hzcl9lbmFibGVkKQo+ID4gKwkJaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCBmYWxz ZSk7Cj4gPiAgCj4gPiAgCXZsdl93cml0ZV93bV92YWx1ZXMoaW50ZWxfY3J0YywgJndtKTsKPiA+ IC19Cj4gPiAtCj4gPiAtI2RlZmluZSBzaW5nbGVfcGxhbmVfZW5hYmxlZChtYXNrKSBpc19wb3dl cl9vZl8yKG1hc2spCj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgdmFsbGV5dmlld191cGRhdGVfd20o c3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKPiA+IC0Jc3RhdGljIGNvbnN0IGludCBzcl9sYXRlbmN5X25zID0gMTIw MDA7Cj4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gPiAtCWludCBwbGFuZWFfd20sIHBsYW5lYl93bSwgY3Vyc29yYV93bSwgY3Vyc29y Yl93bTsKPiA+IC0JaW50IHBsYW5lX3NyLCBjdXJzb3Jfc3I7Cj4gPiAtCWludCBpZ25vcmVfcGxh bmVfc3IsIGlnbm9yZV9jdXJzb3Jfc3I7Cj4gPiAtCXVuc2lnbmVkIGludCBlbmFibGVkID0gMDsK PiA+IC0JYm9vbCBjeHNyX2VuYWJsZWQ7Cj4gPiAtCj4gPiAtCXZsdl91cGRhdGVfZHJhaW5fbGF0 ZW5jeShjcnRjKTsKPiA+IC0KPiA+IC0JaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIFBJUEVfQSwK PiA+IC0JCQkgICAgJnZhbGxleXZpZXdfd21faW5mbywgcGVzc2ltYWxfbGF0ZW5jeV9ucywKPiA+ IC0JCQkgICAgJnZhbGxleXZpZXdfY3Vyc29yX3dtX2luZm8sIHBlc3NpbWFsX2xhdGVuY3lfbnMs Cj4gPiAtCQkJICAgICZwbGFuZWFfd20sICZjdXJzb3JhX3dtKSkKPiA+IC0JCWVuYWJsZWQgfD0g MSA8PCBQSVBFX0E7Cj4gPiAtCj4gPiAtCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2LCBQSVBFX0Is Cj4gPiAtCQkJICAgICZ2YWxsZXl2aWV3X3dtX2luZm8sIHBlc3NpbWFsX2xhdGVuY3lfbnMsCj4g PiAtCQkJICAgICZ2YWxsZXl2aWV3X2N1cnNvcl93bV9pbmZvLCBwZXNzaW1hbF9sYXRlbmN5X25z LAo+ID4gLQkJCSAgICAmcGxhbmViX3dtLCAmY3Vyc29yYl93bSkpCj4gPiAtCQllbmFibGVkIHw9 IDEgPDwgUElQRV9COwo+ID4gLQo+ID4gLQlpZiAoc2luZ2xlX3BsYW5lX2VuYWJsZWQoZW5hYmxl ZCkgJiYKPiA+IC0JICAgIGc0eF9jb21wdXRlX3Nyd20oZGV2LCBmZnMoZW5hYmxlZCkgLSAxLAo+ ID4gLQkJCSAgICAgc3JfbGF0ZW5jeV9ucywKPiA+IC0JCQkgICAgICZ2YWxsZXl2aWV3X3dtX2lu Zm8sCj4gPiAtCQkJICAgICAmdmFsbGV5dmlld19jdXJzb3Jfd21faW5mbywKPiA+IC0JCQkgICAg ICZwbGFuZV9zciwgJmlnbm9yZV9jdXJzb3Jfc3IpICYmCj4gPiAtCSAgICBnNHhfY29tcHV0ZV9z cndtKGRldiwgZmZzKGVuYWJsZWQpIC0gMSwKPiA+IC0JCQkgICAgIDIqc3JfbGF0ZW5jeV9ucywK PiA+IC0JCQkgICAgICZ2YWxsZXl2aWV3X3dtX2luZm8sCj4gPiAtCQkJICAgICAmdmFsbGV5dmll d19jdXJzb3Jfd21faW5mbywKPiA+IC0JCQkgICAgICZpZ25vcmVfcGxhbmVfc3IsICZjdXJzb3Jf c3IpKSB7Cj4gPiAtCQljeHNyX2VuYWJsZWQgPSB0cnVlOwo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJ Y3hzcl9lbmFibGVkID0gZmFsc2U7Cj4gPiAtCQlpbnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3By aXYsIGZhbHNlKTsKPiA+IC0JCXBsYW5lX3NyID0gY3Vyc29yX3NyID0gMDsKPiA+IC0JfQo+ID4g LQo+ID4gLQlEUk1fREVCVUdfS01TKCJTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtIEE6IHBsYW5l PSVkLCBjdXJzb3I9JWQsICIKPiA+IC0JCSAgICAgICJCOiBwbGFuZT0lZCwgY3Vyc29yPSVkLCBT UjogcGxhbmU9JWQsIGN1cnNvcj0lZFxuIiwKPiA+IC0JCSAgICAgIHBsYW5lYV93bSwgY3Vyc29y YV93bSwKPiA+IC0JCSAgICAgIHBsYW5lYl93bSwgY3Vyc29yYl93bSwKPiA+IC0JCSAgICAgIHBs YW5lX3NyLCBjdXJzb3Jfc3IpOwo+ID4gLQo+ID4gLQlJOTE1X1dSSVRFKERTUEZXMSwKPiA+IC0J CSAgIChwbGFuZV9zciA8PCBEU1BGV19TUl9TSElGVCkgfAo+ID4gLQkJICAgKGN1cnNvcmJfd20g PDwgRFNQRldfQ1VSU09SQl9TSElGVCkgfAo+ID4gLQkJICAgKHBsYW5lYl93bSA8PCBEU1BGV19Q TEFORUJfU0hJRlQpIHwKPiA+IC0JCSAgIChwbGFuZWFfd20gPDwgRFNQRldfUExBTkVBX1NISUZU KSk7Cj4gPiAtCUk5MTVfV1JJVEUoRFNQRlcyLAo+ID4gLQkJICAgKEk5MTVfUkVBRChEU1BGVzIp ICYgfkRTUEZXX0NVUlNPUkFfTUFTSykgfAo+ID4gLQkJICAgKGN1cnNvcmFfd20gPDwgRFNQRldf Q1VSU09SQV9TSElGVCkpOwo+ID4gLQlJOTE1X1dSSVRFKERTUEZXMywKPiA+IC0JCSAgIChJOTE1 X1JFQUQoRFNQRlczKSAmIH5EU1BGV19DVVJTT1JfU1JfTUFTSykgfAo+ID4gLQkJICAgKGN1cnNv cl9zciA8PCBEU1BGV19DVVJTT1JfU1JfU0hJRlQpKTsKPiA+IC0KPiA+IC0JaWYgKGN4c3JfZW5h YmxlZCkKPiA+IC0JCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7Cj4gPiAt fQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkIGNoZXJyeXZpZXdfdXBkYXRlX3dtKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7Cj4gPiAtCXN0YXRpYyBjb25zdCBpbnQgc3JfbGF0ZW5jeV9ucyA9IDEyMDAwOwo+ID4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4g LQlpbnQgcGxhbmVhX3dtLCBwbGFuZWJfd20sIHBsYW5lY193bTsKPiA+IC0JaW50IGN1cnNvcmFf d20sIGN1cnNvcmJfd20sIGN1cnNvcmNfd207Cj4gPiAtCWludCBwbGFuZV9zciwgY3Vyc29yX3Ny Owo+ID4gLQlpbnQgaWdub3JlX3BsYW5lX3NyLCBpZ25vcmVfY3Vyc29yX3NyOwo+ID4gLQl1bnNp Z25lZCBpbnQgZW5hYmxlZCA9IDA7Cj4gPiAtCWJvb2wgY3hzcl9lbmFibGVkOwo+ID4gLQo+ID4g LQl2bHZfdXBkYXRlX2RyYWluX2xhdGVuY3koY3J0Yyk7Cj4gPiAtCj4gPiAtCWlmIChnNHhfY29t cHV0ZV93bTAoZGV2LCBQSVBFX0EsCj4gPiAtCQkJICAgICZ2YWxsZXl2aWV3X3dtX2luZm8sIHBl c3NpbWFsX2xhdGVuY3lfbnMsCj4gPiAtCQkJICAgICZ2YWxsZXl2aWV3X2N1cnNvcl93bV9pbmZv LCBwZXNzaW1hbF9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICAmcGxhbmVhX3dtLCAmY3Vyc29yYV93 bSkpCj4gPiAtCQllbmFibGVkIHw9IDEgPDwgUElQRV9BOwo+ID4gLQo+ID4gLQlpZiAoZzR4X2Nv bXB1dGVfd20wKGRldiwgUElQRV9CLAo+ID4gLQkJCSAgICAmdmFsbGV5dmlld193bV9pbmZvLCBw ZXNzaW1hbF9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICAmdmFsbGV5dmlld19jdXJzb3Jfd21faW5m bywgcGVzc2ltYWxfbGF0ZW5jeV9ucywKPiA+IC0JCQkgICAgJnBsYW5lYl93bSwgJmN1cnNvcmJf d20pKQo+ID4gLQkJZW5hYmxlZCB8PSAxIDw8IFBJUEVfQjsKPiA+IC0KPiA+IC0JaWYgKGc0eF9j b21wdXRlX3dtMChkZXYsIFBJUEVfQywKPiA+IC0JCQkgICAgJnZhbGxleXZpZXdfd21faW5mbywg cGVzc2ltYWxfbGF0ZW5jeV9ucywKPiA+IC0JCQkgICAgJnZhbGxleXZpZXdfY3Vyc29yX3dtX2lu Zm8sIHBlc3NpbWFsX2xhdGVuY3lfbnMsCj4gPiAtCQkJICAgICZwbGFuZWNfd20sICZjdXJzb3Jj X3dtKSkKPiA+IC0JCWVuYWJsZWQgfD0gMSA8PCBQSVBFX0M7Cj4gPiAtCj4gPiAtCWlmIChzaW5n bGVfcGxhbmVfZW5hYmxlZChlbmFibGVkKSAmJgo+ID4gLQkgICAgZzR4X2NvbXB1dGVfc3J3bShk ZXYsIGZmcyhlbmFibGVkKSAtIDEsCj4gPiAtCQkJICAgICBzcl9sYXRlbmN5X25zLAo+ID4gLQkJ CSAgICAgJnZhbGxleXZpZXdfd21faW5mbywKPiA+IC0JCQkgICAgICZ2YWxsZXl2aWV3X2N1cnNv cl93bV9pbmZvLAo+ID4gLQkJCSAgICAgJnBsYW5lX3NyLCAmaWdub3JlX2N1cnNvcl9zcikgJiYK PiA+IC0JICAgIGc0eF9jb21wdXRlX3Nyd20oZGV2LCBmZnMoZW5hYmxlZCkgLSAxLAo+ID4gLQkJ CSAgICAgMipzcl9sYXRlbmN5X25zLAo+ID4gLQkJCSAgICAgJnZhbGxleXZpZXdfd21faW5mbywK PiA+IC0JCQkgICAgICZ2YWxsZXl2aWV3X2N1cnNvcl93bV9pbmZvLAo+ID4gLQkJCSAgICAgJmln bm9yZV9wbGFuZV9zciwgJmN1cnNvcl9zcikpIHsKPiA+IC0JCWN4c3JfZW5hYmxlZCA9IHRydWU7 Cj4gPiAtCX0gZWxzZSB7Cj4gPiAtCQljeHNyX2VuYWJsZWQgPSBmYWxzZTsKPiA+IC0JCWludGVs X3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgZmFsc2UpOwo+ID4gLQkJcGxhbmVfc3IgPSBjdXJz b3Jfc3IgPSAwOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCURSTV9ERUJVR19LTVMoIlNldHRpbmcgRklG TyB3YXRlcm1hcmtzIC0gQTogcGxhbmU9JWQsIGN1cnNvcj0lZCwgIgo+ID4gLQkJICAgICAgIkI6 IHBsYW5lPSVkLCBjdXJzb3I9JWQsIEM6IHBsYW5lPSVkLCBjdXJzb3I9JWQsICIKPiA+IC0JCSAg ICAgICJTUjogcGxhbmU9JWQsIGN1cnNvcj0lZFxuIiwKPiA+IC0JCSAgICAgIHBsYW5lYV93bSwg Y3Vyc29yYV93bSwKPiA+IC0JCSAgICAgIHBsYW5lYl93bSwgY3Vyc29yYl93bSwKPiA+IC0JCSAg ICAgIHBsYW5lY193bSwgY3Vyc29yY193bSwKPiA+IC0JCSAgICAgIHBsYW5lX3NyLCBjdXJzb3Jf c3IpOwo+ID4gLQo+ID4gLQlJOTE1X1dSSVRFKERTUEZXMSwKPiA+IC0JCSAgIChwbGFuZV9zciA8 PCBEU1BGV19TUl9TSElGVCkgfAo+ID4gLQkJICAgKGN1cnNvcmJfd20gPDwgRFNQRldfQ1VSU09S Ql9TSElGVCkgfAo+ID4gLQkJICAgKHBsYW5lYl93bSA8PCBEU1BGV19QTEFORUJfU0hJRlQpIHwK PiA+IC0JCSAgIChwbGFuZWFfd20gPDwgRFNQRldfUExBTkVBX1NISUZUKSk7Cj4gPiAtCUk5MTVf V1JJVEUoRFNQRlcyLAo+ID4gLQkJICAgKEk5MTVfUkVBRChEU1BGVzIpICYgfkRTUEZXX0NVUlNP UkFfTUFTSykgfAo+ID4gLQkJICAgKGN1cnNvcmFfd20gPDwgRFNQRldfQ1VSU09SQV9TSElGVCkp Owo+ID4gLQlJOTE1X1dSSVRFKERTUEZXMywKPiA+IC0JCSAgIChJOTE1X1JFQUQoRFNQRlczKSAm IH5EU1BGV19DVVJTT1JfU1JfTUFTSykgfAo+ID4gLQkJICAgKGN1cnNvcl9zciA8PCBEU1BGV19D VVJTT1JfU1JfU0hJRlQpKTsKPiA+IC0JSTkxNV9XUklURShEU1BGVzlfQ0hWLAo+ID4gLQkJICAg KEk5MTVfUkVBRChEU1BGVzlfQ0hWKSAmIH4oRFNQRldfUExBTkVDX01BU0sgfAo+ID4gLQkJCQkJ ICAgICAgRFNQRldfQ1VSU09SQ19NQVNLKSkgfAo+ID4gLQkJICAgKHBsYW5lY193bSA8PCBEU1BG V19QTEFORUNfU0hJRlQpIHwKPiA+IC0JCSAgIChjdXJzb3JjX3dtIDw8IERTUEZXX0NVUlNPUkNf U0hJRlQpKTsKPiA+ICAKPiA+ICAJaWYgKGN4c3JfZW5hYmxlZCkKPiA+ICAJCWludGVsX3NldF9t ZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7Cj4gPiBAQCAtMTAwMiwxNyArOTk1LDQ0IEBAIHN0 YXRpYyB2b2lkIHZhbGxleXZpZXdfdXBkYXRlX3Nwcml0ZV93bShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiA+ICAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRj KGNydGMpOwo+ID4gIAllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gPiAgCWlu dCBzcHJpdGUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSktPnBsYW5lOwo+ID4gKwlib29sIGN4c3Jf ZW5hYmxlZDsKPiA+ICAJc3RydWN0IHZsdl93bV92YWx1ZXMgd20gPSBkZXZfcHJpdi0+d20udmx2 Owo+ID4gIAo+ID4gLQlpZiAoZW5hYmxlZCkKPiA+ICsJaWYgKGVuYWJsZWQpIHsKPiA+ICAJCXdt LmRkbFtwaXBlXS5zcHJpdGVbc3ByaXRlXSA9Cj4gPiAgCQkJdmx2X2NvbXB1dGVfZHJhaW5fbGF0 ZW5jeShjcnRjLCBwbGFuZSk7Cj4gPiAtCWVsc2UKPiA+ICsKPiA+ICsJCXdtLnBpcGVbcGlwZV0u c3ByaXRlW3Nwcml0ZV0gPQo+ID4gKwkJCXZsdl9jb21wdXRlX3dtKGludGVsX2NydGMsCj4gPiAr CQkJCSAgICAgICB0b19pbnRlbF9wbGFuZShwbGFuZSksCj4gPiArCQkJCSAgICAgICB2bHZfZ2V0 X2ZpZm9fc2l6ZShkZXYsIHBpcGUsIHNwcml0ZSsxKSk7Cj4gPiArCX0gZWxzZSB7Cj4gPiAgCQl3 bS5kZGxbcGlwZV0uc3ByaXRlW3Nwcml0ZV0gPSAwOwo+ID4gKwkJd20ucGlwZVtwaXBlXS5zcHJp dGVbc3ByaXRlXSA9IDA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJY3hzcl9lbmFibGVkID0gdmx2X2Nv bXB1dGVfc3Jfd20oZGV2LCAmd20pOwo+ID4gKwo+ID4gKwlpZiAobWVtY21wKCZ3bSwgJmRldl9w cml2LT53bS52bHYsIHNpemVvZih3bSkpID09IDApCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiAr CURSTV9ERUJVR19LTVMoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gJWM6IHNwcml0ZSAlYz0l ZCwgIgo+ID4gKwkJICAgICAgIlNSOiBwbGFuZT0lZCwgY3Vyc29yPSVkXG4iLCBwaXBlX25hbWUo cGlwZSksCj4gPiArCQkgICAgICBzcHJpdGVfbmFtZShwaXBlLCBzcHJpdGUpLAo+ID4gKwkJICAg ICAgd20ucGlwZVtwaXBlXS5zcHJpdGVbc3ByaXRlXSwKPiA+ICsJCSAgICAgIHdtLnNyLnBsYW5l LCB3bS5zci5jdXJzb3IpOwo+ID4gKwo+ID4gKwlpZiAoIWN4c3JfZW5hYmxlZCkKPiA+ICsJCWlu dGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgZmFsc2UpOwo+ID4gIAo+ID4gIAl2bHZfd3Jp dGVfd21fdmFsdWVzKGludGVsX2NydGMsICZ3bSk7Cj4gPiArCj4gPiArCWlmIChjeHNyX2VuYWJs ZWQpCj4gPiArCQlpbnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIHRydWUpOwo+ID4gIH0K PiA+ICAKPiA+ICsjZGVmaW5lIHNpbmdsZV9wbGFuZV9lbmFibGVkKG1hc2spIGlzX3Bvd2VyX29m XzIobWFzaykKPiA+ICsKPiA+ICBzdGF0aWMgdm9pZCBnNHhfdXBkYXRlX3dtKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7Cj4gPiBAQCAtNjQ4NSw3ICs2NTA1LDcgQEAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gPiAgCQllbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA9PSA4 KQo+ID4gIAkJCWRldl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0gYnJvYWR3ZWxs X2luaXRfY2xvY2tfZ2F0aW5nOwo+ID4gIAl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2KSkg ewo+ID4gLQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gY2hlcnJ5dmlld191cGRhdGVf d207Cj4gPiArCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSB2YWxsZXl2aWV3X3VwZGF0 ZV93bTsKPiA+ICAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9zcHJpdGVfd20gPSB2YWxsZXl2 aWV3X3VwZGF0ZV9zcHJpdGVfd207Cj4gPiAgCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Nsb2Nr X2dhdGluZyA9Cj4gPiAgCQkJY2hlcnJ5dmlld19pbml0X2Nsb2NrX2dhdGluZzsKPiA+IC0tIAo+ ID4gMi4wLjUKPiA+IAo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KPiA+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiA+IEludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPiA+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngKPiAKPiAtLSAKPiBEYW5pZWwgVmV0dGVyCj4gU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4gKzQxICgwKSA3OSAzNjUgNTcgNDggLSBodHRwOi8v YmxvZy5mZndsbC5jaAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK