From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: Re: [PATCH 5/6] drm/i915: Implement color management on bdw/skl/bxt/kbl Date: Thu, 18 Feb 2016 16:42:53 -0800 Message-ID: <20160219004253.GB27772@intel.com> References: <1455020358-18926-1-git-send-email-lionel.g.landwerlin@intel.com> <1455020358-18926-6-git-send-email-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1455020358-18926-6-git-send-email-lionel.g.landwerlin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lionel Landwerlin Cc: intel-gfx@lists.freedesktop.org, Kumar@freedesktop.org, dri-devel@lists.freedesktop.org, kausalmalladi@gmail.com List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBGZWIgMDksIDIwMTYgYXQgMTI6MTk6MTdQTSArMDAwMCwgTGlvbmVsIExhbmR3ZXJs aW4gd3JvdGU6Cj4gUGF0Y2ggYmFzZWQgb24gYSBwcmV2aW91cyBzZXJpZXMgYnkgU2hhc2hhbmsg U2hhcm1hLgo+IAo+IHYyOiBEbyBub3QgcmVhZCBHQU1NQV9NT0RFIHJlZ2lzdGVyIHRvIGZpZ3Vy ZSB3aGF0IG1vZGUgd2UncmUgaW4KPiAKPiB2MzogUHJvZ3JhbSBQUkVDX1BBTF9HQ19NQVggdG8g Y2xhbXAgcGl4ZWwgdmFsdWVzID4gMS4wCj4gCj4gICAgIEFkZCBkb2N1bWVudGF0aW9uIG9uIGhv dyB0aGUgQnJvYWRjYXN0IFJHQiBwcm9wZXJ0eSBpcyBhZmZlY3RlZCBieQo+ICAgICBDVE1fTUFU UklYCj4gCj4gdjQ6IFVwZGF0ZSBjb250cmlidXRvcnMKPiAKPiBTaWduZWQtb2ZmLWJ5OiBTaGFz aGFuayBTaGFybWEgPHNoYXNoYW5rLnNoYXJtYUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTog TGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgo+IFNpZ25l ZC1vZmYtYnk6IEt1bWFyLCBLaXJhbiBTIDxraXJhbi5zLmt1bWFyQGludGVsLmNvbT4KPiBTaWdu ZWQtb2ZmLWJ5OiBLYXVzYWwgTWFsbGFkaSA8a2F1c2FsbWFsbGFkaUBnbWFpbC5jb20+Cj4gLS0t Cj4gIERvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbCAgICAgICB8ICAgNiArLQo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgfCAgMjQgKystCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICB8ICAgOSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmggICAgICB8ICAyMiArKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf Y29sb3IuYyAgIHwgMzY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8ICAyMiArKy0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgICA2ICstCj4gIDcgZmlsZXMgY2hhbmdlZCwg Mzk2IGluc2VydGlvbnMoKyksIDYwIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ3B1LnRt cGwKPiBpbmRleCA3YzQ5YTkyLi43OGI4ODc3IDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24v RG9jQm9vay9ncHUudG1wbAo+ICsrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbAo+ IEBAIC0yMTUyLDcgKzIxNTIsMTEgQEAgdm9pZCBpbnRlbF9jcnRfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+ICAJPHRkIHZhbGlnbj0idG9wIiA+RU5VTTwvdGQ+Cj4gIAk8dGQgdmFsaWdu PSJ0b3AiID57ICJBdXRvbWF0aWMiLCAiRnVsbCIsICJMaW1pdGVkIDE2OjIzNSIgfTwvdGQ+Cj4g IAk8dGQgdmFsaWduPSJ0b3AiID5Db25uZWN0b3I8L3RkPgo+IC0JPHRkIHZhbGlnbj0idG9wIiA+ VEJEPC90ZD4KPiArCTx0ZCB2YWxpZ249InRvcCIgPldoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQg dG8gTGltaXRlZCAxNjoyMzUKPiArCQlhbmQgQ1RNX01BVFJJWCBpcyBzZXQsIHRoZSBoYXJkd2Fy ZSB3aWxsIGJlIHByb2dyYW1tZWQgd2l0aAo+ICsJCXRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGxp Y2F0aW9uIG9mIENUTV9NQVRSSVggYnkgdGhlIGxpbWl0ZWQKPiArCQlyYW5nZSBtYXRyaXggdG8g ZW5zdXJlIHRoZSBwaXhlbHMgbm9ybWFseSBpbiB0aGUgcmFuZ2UgMC4uMS4wCj4gKwkJYXJlIHJl bWFwcGVkIHRvIHRoZSByYW5nZSAxNi8yNTUuLjIzNS8yNTUuPC90ZD4KPiAgCTwvdHI+Cj4gIAk8 dHI+Cj4gIAk8dGQgdmFsaWduPSJ0b3AiID7igJxhdWRpb+KAnTwvdGQ+Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jCj4gaW5kZXggNDQ5MTJlYy4uYjY1YWEyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYwo+IEBAIC02Niw2ICs2Niw5IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2 ZXI7Cj4gICNkZWZpbmUgSVZCX0NVUlNPUl9PRkZTRVRTIFwKPiAgCS5jdXJzb3Jfb2Zmc2V0cyA9 IHsgQ1VSU09SX0FfT0ZGU0VULCBJVkJfQ1VSU09SX0JfT0ZGU0VULCBJVkJfQ1VSU09SX0NfT0ZG U0VUIH0KPiAgCj4gKyNkZWZpbmUgQkRXX0NPTE9SUyBcCj4gKwkuY29sb3IgPSB7IC5kZWdhbW1h X2x1dF9zaXplID0gNTEyLCAuZ2FtbWFfbHV0X3NpemUgPSA1MTIgfQo+ICsKPiAgc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pODMwX2luZm8gPSB7Cj4gIAkuZ2Vu ID0gMiwgLmlzX21vYmlsZSA9IDEsIC5jdXJzb3JfbmVlZHNfcGh5c2ljYWwgPSAxLCAubnVtX3Bp cGVzID0gMiwKPiAgCS5oYXNfb3ZlcmxheSA9IDEsIC5vdmVybGF5X25lZWRzX3BoeXNpY2FsID0g MSwKPiBAQCAtMjg4LDI0ICsyOTEsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZp Y2VfaW5mbyBpbnRlbF9oYXN3ZWxsX21faW5mbyA9IHsKPiAgCS5pc19tb2JpbGUgPSAxLAo+ICB9 Owo+ICAKPiArI2RlZmluZSBCRFdfRkVBVFVSRVMgXAo+ICsJSFNXX0ZFQVRVUkVTLCBcCj4gKwlC RFdfQ09MT1JTCj4gKwo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGlu dGVsX2Jyb2Fkd2VsbF9kX2luZm8gPSB7Cj4gLQlIU1dfRkVBVFVSRVMsCj4gKwlCRFdfRkVBVFVS RVMsCj4gIAkuZ2VuID0gOCwKPiAgfTsKPiAgCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxf ZGV2aWNlX2luZm8gaW50ZWxfYnJvYWR3ZWxsX21faW5mbyA9IHsKPiAtCUhTV19GRUFUVVJFUywK PiArCUJEV19GRUFUVVJFUywKPiAgCS5nZW4gPSA4LCAuaXNfbW9iaWxlID0gMSwKPiAgfTsKPiAg Cj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfYnJvYWR3ZWxs X2d0M2RfaW5mbyA9IHsKPiAtCUhTV19GRUFUVVJFUywKPiArCUJEV19GRUFUVVJFUywKPiAgCS5n ZW4gPSA4LAo+ICAJLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5HIHwgQlNEX1JJTkcgfCBCTFRfUklO RyB8IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCj4gIH07Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3Ry dWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2Jyb2Fkd2VsbF9ndDNtX2luZm8gPSB7Cj4gLQlI U1dfRkVBVFVSRVMsCj4gKwlCRFdfRkVBVFVSRVMsCj4gIAkuZ2VuID0gOCwgLmlzX21vYmlsZSA9 IDEsCj4gIAkucmluZ19tYXNrID0gUkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwg VkVCT1hfUklORyB8IEJTRDJfUklORywKPiAgfTsKPiBAQCAtMzIxLDEzICszMjgsMTMgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9jaGVycnl2aWV3X2luZm8g PSB7Cj4gIH07Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGlu dGVsX3NreWxha2VfaW5mbyA9IHsKPiAtCUhTV19GRUFUVVJFUywKPiArCUJEV19GRUFUVVJFUywK PiAgCS5pc19za3lsYWtlID0gMSwKPiAgCS5nZW4gPSA5LAo+ICB9Owo+ICAKPiAgc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9za3lsYWtlX2d0M19pbmZvID0gewo+ IC0JSFNXX0ZFQVRVUkVTLAo+ICsJQkRXX0ZFQVRVUkVTLAo+ICAJLmlzX3NreWxha2UgPSAxLAo+ ICAJLmdlbiA9IDksCj4gIAkucmluZ19tYXNrID0gUkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJM VF9SSU5HIHwgVkVCT1hfUklORyB8IEJTRDJfUklORywKPiBAQCAtMzQ1LDE3ICszNTIsMTggQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9icm94dG9uX2luZm8g PSB7Cj4gIAkuaGFzX2ZiYyA9IDEsCj4gIAlHRU5fREVGQVVMVF9QSVBFT0ZGU0VUUywKPiAgCUlW Ql9DVVJTT1JfT0ZGU0VUUywKPiArCUJEV19DT0xPUlMsCj4gIH07Cj4gIAo+ICBzdGF0aWMgY29u c3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2thYnlsYWtlX2luZm8gPSB7Cj4gLQlI U1dfRkVBVFVSRVMsCj4gKwlCRFdfRkVBVFVSRVMsCj4gIAkuaXNfcHJlbGltaW5hcnkgPSAxLAo+ ICAJLmlzX2thYnlsYWtlID0gMSwKPiAgCS5nZW4gPSA5LAo+ICB9Owo+ICAKPiAgc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9rYWJ5bGFrZV9ndDNfaW5mbyA9IHsK PiAtCUhTV19GRUFUVVJFUywKPiArCUJEV19GRUFUVVJFUywKPiAgCS5pc19wcmVsaW1pbmFyeSA9 IDEsCj4gIAkuaXNfa2FieWxha2UgPSAxLAo+ICAJLmdlbiA9IDksCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gaW5kZXggODIxNjY2NS4uYzFjYTRkMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+IEBAIC02NTksNiArNjU5LDEwIEBAIHN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNz IHsKPiAgCS8qIHJlbmRlciBjbG9jayBpbmNyZWFzZS9kZWNyZWFzZSAqLwo+ICAJLyogZGlzcGxh eSBjbG9jayBpbmNyZWFzZS9kZWNyZWFzZSAqLwo+ICAJLyogcGxsIGNsb2NrIGluY3JlYXNlL2Rl Y3JlYXNlICovCj4gKwo+ICsJdm9pZCAoKmxvYWRfZGVnYW1tYV9sdXQpKHN0cnVjdCBkcm1fY3J0 YyAqY3J0Yyk7Cj4gKwl2b2lkICgqbG9hZF9jc2NfbWF0cml4KShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOwo+ICsJdm9pZCAoKmxvYWRfZ2FtbWFfbHV0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ ICB9Owo+ICAKPiAgZW51bSBmb3JjZXdha2VfZG9tYWluX2lkIHsKPiBAQCAtODA2LDYgKzgxMCwx MSBAQCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gewo+ICAJdTggaGFzX3NsaWNlX3BnOjE7Cj4g IAl1OCBoYXNfc3Vic2xpY2VfcGc6MTsKPiAgCXU4IGhhc19ldV9wZzoxOwo+ICsKPiArCXN0cnVj dCBjb2xvcl9sdXRzIHsKPiArCQl1MTYgZGVnYW1tYV9sdXRfc2l6ZTsKPiArCQl1MTYgZ2FtbWFf bHV0X3NpemU7Cj4gKwl9IGNvbG9yOwo+ICB9Owo+ICAKPiAgI3VuZGVmIERFRklORV9GTEFHCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gaW5kZXggZjhiMGQ2Yy4uMWRjNWQzYiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC03NjYzLDYgKzc2NjMsMjggQEAgZW51bSBza2xfZGlz cF9wb3dlcl93ZWxscyB7Cj4gICNkZWZpbmUgUElQRV9DU0NfUE9TVE9GRl9NRShwaXBlKQlfTU1J T19QSVBFMyhwaXBlLCBfUElQRV9BX0NTQ19QT1NUT0ZGX01FLCBfUElQRV9CX0NTQ19QT1NUT0ZG X01FLCBfUElQRV9DX0NTQ19QT1NUT0ZGX01FKQo+ICAjZGVmaW5lIFBJUEVfQ1NDX1BPU1RPRkZf TE8ocGlwZSkJX01NSU9fUElQRTMocGlwZSwgX1BJUEVfQV9DU0NfUE9TVE9GRl9MTywgX1BJUEVf Ql9DU0NfUE9TVE9GRl9MTywgX1BJUEVfQ19DU0NfUE9TVE9GRl9MTykKPiAgCj4gKy8qIHBpcGUg ZGVnYW1tYS9nYW1tYSBMVVRzIG9uIElWQisgKi8KPiArI2RlZmluZSBfUEFMX1BSRUNfSU5ERVhf QQkweDRBNDAwCj4gKyNkZWZpbmUgX1BBTF9QUkVDX0lOREVYX0IJMHg0QUMwMAo+ICsjZGVmaW5l IF9QQUxfUFJFQ19JTkRFWF9DCTB4NEI0MDAKPiArI2RlZmluZSAgIFBBTF9QUkVDXzEwXzEyX0JJ VAkJKDAgPDwgMzEpCj4gKyNkZWZpbmUgICBQQUxfUFJFQ19TUExJVF9NT0RFCQkoMSA8PCAzMSkK PiArI2RlZmluZSAgIFBBTF9QUkVDX0FVVE9fSU5DUkVNRU5UCSgxIDw8IDE1KQo+ICsjZGVmaW5l IF9QQUxfUFJFQ19EQVRBX0EJMHg0QTQwNAo+ICsjZGVmaW5lIF9QQUxfUFJFQ19EQVRBX0IJMHg0 QUMwNAo+ICsjZGVmaW5lIF9QQUxfUFJFQ19EQVRBX0MJMHg0QjQwNAo+ICsjZGVmaW5lIF9QQUxf UFJFQ19HQ19NQVhfQQkweDRBNDEwCj4gKyNkZWZpbmUgX1BBTF9QUkVDX0dDX01BWF9CCTB4NEFD MTAKPiArI2RlZmluZSBfUEFMX1BSRUNfR0NfTUFYX0MJMHg0QjQxMAo+ICsjZGVmaW5lIF9QQUxf UFJFQ19FWFRfR0NfTUFYX0EJMHg0QTQyMAo+ICsjZGVmaW5lIF9QQUxfUFJFQ19FWFRfR0NfTUFY X0IJMHg0QUMyMAo+ICsjZGVmaW5lIF9QQUxfUFJFQ19FWFRfR0NfTUFYX0MJMHg0QjQyMAo+ICsK PiArI2RlZmluZSBQUkVDX1BBTF9JTkRFWChwaXBlKQkJX01NSU9fUElQRTMocGlwZSwgX1BBTF9Q UkVDX0lOREVYX0EsIF9QQUxfUFJFQ19JTkRFWF9CLCBfUEFMX1BSRUNfSU5ERVhfQykKPiArI2Rl ZmluZSBQUkVDX1BBTF9EQVRBKHBpcGUpCQlfTU1JT19QSVBFMyhwaXBlLCBfUEFMX1BSRUNfREFU QV9BLCBfUEFMX1BSRUNfREFUQV9CLCBfUEFMX1BSRUNfREFUQV9DKQo+ICsjZGVmaW5lIFBSRUNf UEFMX0dDX01BWChwaXBlLCBpKQlfTU1JTyhfUElQRTMocGlwZSwgX1BBTF9QUkVDX0dDX01BWF9B LCBfUEFMX1BSRUNfR0NfTUFYX0IsIF9QQUxfUFJFQ19HQ19NQVhfQykgKyAoaSkgKiA0KQo+ICsj ZGVmaW5lIFBSRUNfUEFMX0VYVF9HQ19NQVgocGlwZSwgaSkJX01NSU8oX1BJUEUzKHBpcGUsIF9Q QUxfUFJFQ19FWFRfR0NfTUFYX0EsIF9QQUxfUFJFQ19FWFRfR0NfTUFYX0IsIF9QQUxfUFJFQ19F WFRfR0NfTUFYX0MpICsgKGkpICogNCkKPiArCj4gIC8qIE1JUEkgRFNJIHJlZ2lzdGVycyAqLwo+ ICAKPiAgI2RlZmluZSBfTUlQSV9QT1JUKHBvcnQsIGEsIGMpCV9QT1JUMyhwb3J0LCBhLCAwLCBj KQkvKiBwb3J0cyBBIGFuZCBDIG9ubHkgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfY29sb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbG9yLmMK PiBpbmRleCAzOWNhMjE1Li43ODJiOWQ4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2NvbG9yLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb2xv ci5jCj4gQEAgLTI0LDQ0ICsyNCwxNjkgQEAKPiAgCj4gICNpbmNsdWRlICJpbnRlbF9kcnYuaCIK PiAgCj4gKyNkZWZpbmUgQ1RNX0NPRUZGX1NJR04JKDFVTEwgPDwgNjMpCj4gKwo+ICsjZGVmaW5l IENUTV9DT0VGRl8xXzAJKDFVTEwgPDwgMzIpCj4gKyNkZWZpbmUgQ1RNX0NPRUZGXzJfMAkoQ1RN X0NPRUZGXzFfMCA8PCAxKQo+ICsjZGVmaW5lIENUTV9DT0VGRl80XzAJKENUTV9DT0VGRl8yXzAg PDwgMSkKPiArI2RlZmluZSBDVE1fQ09FRkZfMF81CShDVE1fQ09FRkZfMV8wID4+IDEpCj4gKyNk ZWZpbmUgQ1RNX0NPRUZGXzBfMjUJKENUTV9DT0VGRl8wXzUgPj4gMSkKPiArI2RlZmluZSBDVE1f Q09FRkZfMF8xMjUJKENUTV9DT0VGRl8wXzI1ID4+IDEpCj4gKwo+ICsjZGVmaW5lIENUTV9DT0VG Rl9MSU1JVEVEX1JBTkdFICgoMjM1VUxMIC0gMTZVTEwpICogQ1RNX0NPRUZGXzFfMCAvIDI1NSkK PiArCj4gKyNkZWZpbmUgQ1RNX0NPRUZGX05FR0FUSVZFKGNvZWZmKQkoKChjb2VmZikgJiBDVE1f Q09FRkZfU0lHTikgIT0gMCkKPiArI2RlZmluZSBDVE1fQ09FRkZfQUJTKGNvZWZmKQkJKChjb2Vm ZikgJiAoQ1RNX0NPRUZGX1NJR04gLSAxKSkKPiArCj4gKy8qCj4gKyAqIEV4dHJhY3QgdGhlIENT QyBjb2VmZmljaWVudCBmcm9tIGEgQ1RNIGNvZWZmaWNpZW50IChpbiBVMzIuMzIgZml4ZWQgcG9p bnQKPiArICogZm9ybWF0KS4gVGhpcyBtYWNybyB0YWtlcyB0aGUgY29lZmZpY2llbnQgd2Ugd2Fu dCB0cmFuc2Zvcm1lZCBhbmQgdGhlCj4gKyAqIG51bWJlciBvZiBmcmFjdGlvbmFsIGJpdHMuCj4g KyAqCj4gKyAqIFdlIG9ubHkgaGF2ZSBhIDkgYml0cyBwcmVjaXNpb24gd2luZG93IHdoaWNoIHNs aWRlcyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlCj4gKyAqIG9mIHRoZSBDVE0gY29lZmZpY2llbnQg YW5kIHdlIHdyaXRlIHRoZSB2YWx1ZSBmcm9tIGJpdCAzLiBXZSBhbHNvIHJvdW5kIHRoZQo+ICsg KiB2YWx1ZS4KPiArICovCj4gKyNkZWZpbmUgSTlYWF9DU0NfQ09FRkZfRlAoY29lZmYsIGZiaXRz KQlcCj4gKwkoY2xhbXBfdmFsKCgoY29lZmYpID4+ICgzMiAtIChmYml0cykgLSAzKSkgKyA0LCAw LCAweGZmZikgJiAweGZmOCkKPiArCj4gKyNkZWZpbmUgSTlYWF9DU0NfQ09FRkZfTElNSVRFRF9S QU5HRQlcCj4gKwlJOVhYX0NTQ19DT0VGRl9GUChDVE1fQ09FRkZfTElNSVRFRF9SQU5HRSwgOSkK PiArI2RlZmluZSBJOVhYX0NTQ19DT0VGRl8xXzAJCVwKPiArCSgoNyA8PCAxMikgfCBJOVhYX0NT Q19DT0VGRl9GUChDVE1fQ09FRkZfMV8wLCA4KSkKPiArCj4gKy8qCj4gKyAqIFdoZW4gdXNpbmcg bGltaXRlZCByYW5nZSwgbXVsdGlwbHkgdGhlIG1hdHJpeCBnaXZlbiBieSB1c2Vyc3BhY2UgYnkK PiArICogdGhlIG1hdHJpeCB0aGF0IHdlIHdvdWxkIHVzZSBmb3IgdGhlIGxpbWl0ZWQgcmFuZ2Uu IFdlIGRvIHRoZQo+ICsgKiBtdWx0aXBsaWNhdGlvbiBpbiBVMi4zMCBmb3JtYXQuCj4gKyAqLwo+ ICtzdGF0aWMgdm9pZCBjdG1fbWF0cml4X211bHRfYnlfbGltaXRlZCh1aW50NjRfdCAqcmVzdWx0 LAo+ICsJCQkJICAgICAgIGludDY0X3QgKmlucHV0KQo+ICt7Cj4gKwlpbnQgaSwgajsKPiArCXVp bnQ2NF90IGxpbWl0ZWRfY29lZmZzWzldID0geyBDVE1fQ09FRkZfTElNSVRFRF9SQU5HRSwgMCwg MCwKPiArCQkJCSAgICAgICAwLCBDVE1fQ09FRkZfTElNSVRFRF9SQU5HRSwgMCwKPiArCQkJCSAg ICAgICAwLCAwLCBDVE1fQ09FRkZfTElNSVRFRF9SQU5HRSB9Owo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGxpbWl0ZWRfY29lZmZzKTsgaSsrKSB7Cj4gKwkJaW50IGNvbHVtbiA9 IGkgJSAzLCByb3cgPSBpIC8gMzsKPiArCQlpbnQgbmVnYXRpdmUgPSAwOwo+ICsKPiArCQlpbnB1 dFtpXSA9IDA7CgpNYXliZSBJJ20gbm90IHVuZGVyc3RhbmRpbmcgdGhlIG1hdHJpeCBtYXRoIGhl cmUsIGJ1dCB3aHkgYXJlIHdlCmNsZWFyaW5nIGlucHV0W2ldPyAgV2FzIHRoaXMgc3VwcG9zZWQg dG8gYmUgcmVzdWx0W2ldIGluc3RlYWQ/Cgo+ICsJCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsK PiArCQkJaW50NjRfdCB1c2VyX2NvZWZmID0gaW5wdXRbaiAqIDMgKyBjb2x1bW5dOwo+ICsJCQl1 aW50NjRfdCBsaW1pdGVkX2NvZWZmID0KPiArCQkJCWxpbWl0ZWRfY29lZmZzW3JvdyAqIDMgKyBq XSA+PiAyOwo+ICsJCQl1aW50NjRfdCBhYnNfY29lZmYgPQo+ICsJCQkJY2xhbXBfdmFsKENUTV9D T0VGRl9BQlModXNlcl9jb2VmZiksCj4gKwkJCQkJICAwLAo+ICsJCQkJCSAgQ1RNX0NPRUZGXzRf MCAtIDEpID4+IDI7Cj4gKwo+ICsJCQlpZiAoQ1RNX0NPRUZGX05FR0FUSVZFKHVzZXJfY29lZmYp KQo+ICsJCQkJbmVnYXRpdmUgPSAhbmVnYXRpdmU7Cj4gKwkJCXJlc3VsdFtpXSArPSBsaW1pdGVk X2NvZWZmICogYWJzX2NvZWZmOwo+ICsJCX0KPiArCj4gKwkJcmVzdWx0W2ldID4+PSAyNzsKPiAr CQlpZiAobmVnYXRpdmUpCj4gKwkJCXJlc3VsdFtpXSB8PSBDVE1fQ09FRkZfU0lHTjsKCkdpdmVu IHRoYXQgdGhlIGxpbWl0ZWRfY29lZmZzW10gbWF0cml4IGlzIGEgZGlhZ29uYWwgbWF0cml4LCB3 ZSBkb24ndAphY3R1YWxseSBuZWVkIGFuIGlubmVyIGxvb3AgaGVyZSwgcmlnaHQ/ICBXb3VsZCBp dCBiZSBzaW1wbGVyIHRvIGp1c3QKcmVwbGFjZSB0aGlzIHdpdGggc29tZXRoaW5nIG1vcmUgbGlr ZSB0aGUgZm9sbG93aW5nPwoKICAgICAgICBhYnN1c2VyX2NvZWZmID0gY2xhbXBfdmFsKGlucHV0 W2ldKTsKICAgICAgICBsaW1pdGVkX2NvZWZmID0gbGltaXRlZF9jb2VmZnNbY29sdW1uICogMyAr IGNvbHVtbl0gPj4gMjsKICAgICAgICByZXN1bHRbaV0gPSAoYWJzdXNlcl9jb2VmZiAqIGxpbWl0 ZWRfY29lZmYpID4+IDI3OwogICAgICAgIGlmIChDVE1fQ09FRkZfTkVHQVRJVkUoaW5wdXRbaV0p KQogICAgICAgICAgICAgICAgcmVzdWx0W2ldIHw9IENUTV9DT0VGRl9TSUdOOwoKVGVjaG5pY2Fs bHkgeW91IGRvbid0IGV2ZW4gbmVlZCB0byBhY3R1YWxseSBzdG9yZSBsaW1pdGVkX2NvZWZmc1td IGluIGEKc3F1YXJlIG1hdHJpeCwgYWx0aG91Z2ggZG9pbmcgc28gZG9lcyBoZWxwIGNsYXJpZnkg Zm9yIHRoZSByZWFkZXIgdGhlCmtpbmQgb2YgbWF0cml4IG1hdGggeW91J3JlIHBlcmZvcm1pbmcu CgoKPiArCX0KPiArfQo+ICsKPiAgLyoKPiAgICogU2V0IHVwIHRoZSBwaXBlIENTQyB1bml0Lgo+ ICAgKgo+IC0gKiBDdXJyZW50bHkgb25seSBmdWxsIHJhbmdlIFJHQiB0byBsaW1pdGVkIHJhbmdl IFJHQiBjb252ZXJzaW9uCj4gLSAqIGlzIHN1cHBvcnRlZCwgYnV0IGV2ZW50dWFsbHkgdGhpcyBz aG91bGQgaGFuZGxlIHZhcmlvdXMKPiAtICogUkdCPC0+WUNiQ3Igc2NlbmFyaW9zIGFzIHdlbGwu Cj4gKyAqIEN1cnJlbnRseSBvbmx5IGZ1bGwgcmFuZ2UgUkdCIHRvIGxpbWl0ZWQgcmFuZ2UgUkdC IGNvbnZlcnNpb24gaXMgc3VwcG9ydGVkLAo+ICsgKiBidXQgZXZlbnR1YWxseSB0aGlzIHNob3Vs ZCBoYW5kbGUgdmFyaW91cyBSR0I8LT5ZQ2JDciBzY2VuYXJpb3MgYXMgd2VsbC4KPiAgICovCj4g IHN0YXRpYyB2b2lkIGk5eHhfbG9hZF9jc2NfbWF0cml4KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiArCXN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IGNydGMtPnN0YXRlOwo+ICAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiAtCWludCBwaXBlID0g aW50ZWxfY3J0Yy0+cGlwZTsKPiAtCXVpbnQxNl90IGNvZWZmID0gMHg3ODAwOyAvKiAxLjAgKi8K PiArCWludCBpLCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiArCXVpbnQxNl90IGNvZWZmc1s5 XSA9IHsgMCwgfTsKPiAgCj4gLQkvKgo+IC0JICogVE9ETzogQ2hlY2sgd2hhdCBraW5kIG9mIHZh bHVlcyBhY3R1YWxseSBjb21lIG91dCBvZiB0aGUgcGlwZQo+IC0JICogd2l0aCB0aGVzZSBjb2Vm Zi9wb3N0b2ZmIHZhbHVlcyBhbmQgYWRqdXN0IHRvIGdldCB0aGUgYmVzdAo+IC0JICogYWNjdXJh Y3kuIFBlcmhhcHMgd2UgZXZlbiBuZWVkIHRvIHRha2UgdGhlIGJwYyB2YWx1ZSBpbnRvCj4gLQkg KiBjb25zaWRlcmF0aW9uLgo+IC0JICovCj4gKwlpZiAoY3J0Y19zdGF0ZS0+Y3RtX21hdHJpeCkg ewo+ICsJCXN0cnVjdCBkcm1fY29sb3JfY3RtICpjdG0gPQo+ICsJCQkoc3RydWN0IGRybV9jb2xv cl9jdG0gKiljcnRjX3N0YXRlLT5jdG1fbWF0cml4LT5kYXRhOwo+ICsJCXVpbnQ2NF90IGlucHV0 WzldID0geyAwLCB9Owo+ICsKPiArCQlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5saW1pdGVkX2Nv bG9yX3JhbmdlKQo+ICsJCQljdG1fbWF0cml4X211bHRfYnlfbGltaXRlZChpbnB1dCwgY3RtLT5t YXRyaXgpOwo+ICsJCWVsc2UgewoKTWlub3Igbml0cGljazsga2VybmVsIGNvZGluZyBzdGFuZGFy ZCBzYXlzIHdlIG5lZWQgdG8gdXNlIGJyYWNlcyBvbiBib3RoCmJyYW5jaGVzIG9mIGFuIGlmL2Vs c2UgaWYgZWl0aGVyIG9mIHRoZW0gbmVlZHMgaXQuCgoKPiArCQkJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoaW5wdXQpOyBpKyspCj4gKwkJCQlpbnB1dFtpXSA9IGN0bS0+bWF0cml4W2ldOwo+ ICsJCX0KPiAgCj4gLQlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5saW1pdGVkX2NvbG9yX3Jhbmdl KQo+IC0JCWNvZWZmID0gKCgyMzUgLSAxNikgKiAoMSA8PCAxMikgLyAyNTUpICYgMHhmZjg7IC8q IDAueHh4Li4uICovCj4gKwo+ICsJCS8qCj4gKwkJICogQ29udmVydCBmaXhlZCBwb2ludCBTMzEu MzIgaW5wdXQgdG8gZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUKPiArCQkgKiBoYXJkd2FyZS4KPiAr CQkgKi8KPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2VmZnMpOyBpKyspIHsKPiAr CQkJdWludDY0X3QgYWJzX2NvZWZmID0gKCgxVUxMIDw8IDYzKSAtIDEpICYgaW5wdXRbaV07Cj4g Kwo+ICsJCQkvKgo+ICsJCQkgKiBDbGFtcCBpbnB1dCB2YWx1ZSB0byBtaW4vbWF4IHN1cHBvcnRl ZCBieQo+ICsJCQkgKiBoYXJkd2FyZS4KPiArCQkJICovCj4gKwkJCWFic19jb2VmZiA9IGNsYW1w X3ZhbChhYnNfY29lZmYsIDAsIENUTV9DT0VGRl80XzAgLSAxKTsKPiArCj4gKwkJCS8qIHNpZ24g Yml0ICovCj4gKwkJCWlmIChDVE1fQ09FRkZfTkVHQVRJVkUoaW5wdXRbaV0pKQo+ICsJCQkJY29l ZmZzW2ldIHw9IDEgPDwgMTU7Cj4gKwo+ICsJCQlpZiAoYWJzX2NvZWZmIDwgQ1RNX0NPRUZGXzBf MTI1KQo+ICsJCQkJY29lZmZzW2ldIHw9ICgzIDw8IDEyKSB8Cj4gKwkJCQkJSTlYWF9DU0NfQ09F RkZfRlAoYWJzX2NvZWZmLCAxMik7Cj4gKwkJCWVsc2UgaWYgKGFic19jb2VmZiA8IENUTV9DT0VG Rl8wXzI1KQo+ICsJCQkJY29lZmZzW2ldIHw9ICgyIDw8IDEyKSB8Cj4gKwkJCQkJSTlYWF9DU0Nf Q09FRkZfRlAoYWJzX2NvZWZmLCAxMSk7Cj4gKwkJCWVsc2UgaWYgKGFic19jb2VmZiA8IENUTV9D T0VGRl8wXzUpCj4gKwkJCQljb2VmZnNbaV0gfD0gKDEgPDwgMTIpIHwKPiArCQkJCQlJOVhYX0NT Q19DT0VGRl9GUChhYnNfY29lZmYsIDEwKTsKPiArCQkJZWxzZSBpZiAoYWJzX2NvZWZmIDwgQ1RN X0NPRUZGXzFfMCkKPiArCQkJCWNvZWZmc1tpXSB8PSBJOVhYX0NTQ19DT0VGRl9GUChhYnNfY29l ZmYsIDkpOwo+ICsJCQllbHNlIGlmIChhYnNfY29lZmYgPCBDVE1fQ09FRkZfMl8wKQo+ICsJCQkJ Y29lZmZzW2ldIHw9ICg3IDw8IDEyKSB8Cj4gKwkJCQkJSTlYWF9DU0NfQ09FRkZfRlAoYWJzX2Nv ZWZmLCA4KTsKPiArCQkJZWxzZQo+ICsJCQkJY29lZmZzW2ldIHw9ICg2IDw8IDEyKSB8Cj4gKwkJ CQkJSTlYWF9DU0NfQ09FRkZfRlAoYWJzX2NvZWZmLCA3KTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ ICsJCS8qCj4gKwkJICogTG9hZCBhbiBpZGVudGlmeSBtYXRyaXggaWYgbm8gY29lZmZpY2llbnRz IGFyZSBwcm92aWRlZC4KPiArCQkgKgo+ICsJCSAqIFRPRE86IENoZWNrIHdoYXQga2luZCBvZiB2 YWx1ZXMgYWN0dWFsbHkgY29tZSBvdXQgb2YgdGhlCj4gKwkJICogcGlwZSB3aXRoIHRoZXNlIGNv ZWZmL3Bvc3RvZmYgdmFsdWVzIGFuZCBhZGp1c3QgdG8gZ2V0IHRoZQo+ICsJCSAqIGJlc3QgYWNj dXJhY3kuIFBlcmhhcHMgd2UgZXZlbiBuZWVkIHRvIHRha2UgdGhlIGJwYyB2YWx1ZQo+ICsJCSAq IGludG8gY29uc2lkZXJhdGlvbi4KPiArCQkgKi8KPiArCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsr KSB7Cj4gKwkJCWlmIChpbnRlbF9jcnRjLT5jb25maWctPmxpbWl0ZWRfY29sb3JfcmFuZ2UpCj4g KwkJCQljb2VmZnNbaSAqIDMgKyBpXSA9Cj4gKwkJCQkJSTlYWF9DU0NfQ09FRkZfTElNSVRFRF9S QU5HRTsKPiArCQkJZWxzZQo+ICsJCQkJY29lZmZzW2kgKiAzICsgaV0gPSBJOVhYX0NTQ19DT0VG Rl8xXzA7Cj4gKwkJfQo+ICsJfQo+ICAKPiAgCS8qCj4gIAkgKiBHWS9HVSBhbmQgUlkvUlUgc2hv dWxkIGJlIHRoZSBvdGhlciB3YXkgYXJvdW5kIGFjY29yZGluZwo+ICAJICogdG8gQlNwZWMsIGJ1 dCByZWFsaXR5IGRvZXNuJ3QgYWdyZWUuIEp1c3Qgc2V0IHRoZW0gdXAgaW4KPiAgCSAqIGEgd2F5 IHRoYXQgcmVzdWx0cyBpbiB0aGUgY29ycmVjdCBwaWN0dXJlLgo+ICAJICovCgpJcyB0aGlzIGNv bW1lbnQgc3RpbGwgcmVsZXZhbnQvY29ycmVjdD8gIEl0IGxvb2tzIHRvIG1lIGxpa2UgeW91J3Jl CnByb2dyYW1taW5nIHRoZSBzYW1lIHdheSB0aGUgYnNwZWMgcmVjb21tZW5kcyBub3csIGF0IGxl YXN0IGFzIGZhciBhcwp0aGUgQkRXLVNLTCBzZWN0aW9uIGdvZXMuCgo+IC0JSTkxNV9XUklURShQ SVBFX0NTQ19DT0VGRl9SWV9HWShwaXBlKSwgY29lZmYgPDwgMTYpOwo+IC0JSTkxNV9XUklURShQ SVBFX0NTQ19DT0VGRl9CWShwaXBlKSwgMCk7Cj4gKwlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZG X1JZX0dZKHBpcGUpLCBjb2VmZnNbMF0gPDwgMTYgfCBjb2VmZnNbMV0pOwo+ICsJSTkxNV9XUklU RShQSVBFX0NTQ19DT0VGRl9CWShwaXBlKSwgY29lZmZzWzJdIDw8IDE2KTsKPiAgCj4gLQlJOTE1 X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX1JVX0dVKHBpcGUpLCBjb2VmZik7Cj4gLQlJOTE1X1dSSVRF KFBJUEVfQ1NDX0NPRUZGX0JVKHBpcGUpLCAwKTsKPiArCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09F RkZfUlVfR1UocGlwZSksIGNvZWZmc1szXSA8PCAxNiB8IGNvZWZmc1s0XSk7Cj4gKwlJOTE1X1dS SVRFKFBJUEVfQ1NDX0NPRUZGX0JVKHBpcGUpLCBjb2VmZnNbNV0gPDwgMTYpOwo+ICAKPiAtCUk5 MTVfV1JJVEUoUElQRV9DU0NfQ09FRkZfUlZfR1YocGlwZSksIDApOwo+IC0JSTkxNV9XUklURShQ SVBFX0NTQ19DT0VGRl9CVihwaXBlKSwgY29lZmYgPDwgMTYpOwo+ICsJSTkxNV9XUklURShQSVBF X0NTQ19DT0VGRl9SVl9HVihwaXBlKSwgY29lZmZzWzZdIDw8IDE2IHwgY29lZmZzWzddKTsKPiAr CUk5MTVfV1JJVEUoUElQRV9DU0NfQ09FRkZfQlYocGlwZSksIGNvZWZmc1s4XSA8PCAxNik7Cj4g IAo+ICAJSTkxNV9XUklURShQSVBFX0NTQ19QUkVPRkZfSEkocGlwZSksIDApOwo+ICAJSTkxNV9X UklURShQSVBFX0NTQ19QUkVPRkZfTUUocGlwZSksIDApOwo+IEBAIC04OCwyMSArMjEzLDE0NiBA QCBzdGF0aWMgdm9pZCBpOXh4X2xvYWRfY3NjX21hdHJpeChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cj4gIAl9Cj4gIH0KPiAgCj4gLXZvaWQgaW50ZWxfY29sb3Jfc2V0X2NzYyhzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4gKy8qKiBMb2FkcyB0aGUgbGVnYWN5IHBhbGV0dGUvZ2FtbWEgdW5pdCBmb3Ig dGhlIENSVEMgd2l0aCB0aGUgcHJlcGFyZWQKPiArICogdmFsdWVzLgo+ICsgKi8KPiArc3RhdGlj IHZvaWQgaTl4eF9sb2FkX2xlZ2FjeV9nYW1tYV9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ ICB7Cj4gLQlpOXh4X2xvYWRfY3NjX21hdHJpeChjcnRjKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0 b19pbnRlbF9jcnRjKGNydGMpOwo+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmludGVsX3N0 YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Cj4gKwllbnVtIHBpcGUgcGlw ZSA9IHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGU7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgMjU2OyBpKyspIHsKPiArCQl1aW50MzJfdCB3b3JkID0gKGludGVsX2NydGMtPmx1 dF9yW2ldIDw8IDE2KSB8Cj4gKwkJCShpbnRlbF9jcnRjLT5sdXRfZ1tpXSA8PCA4KSB8Cj4gKwkJ CWludGVsX2NydGMtPmx1dF9iW2ldOwo+ICsJCWlmIChIQVNfR01DSF9ESVNQTEFZKGRldikpCj4g KwkJCUk5MTVfV1JJVEUoUEFMRVRURShwaXBlLCBpKSwgd29yZCk7Cj4gKwkJZWxzZQo+ICsJCQlJ OTE1X1dSSVRFKExHQ19QQUxFVFRFKHBpcGUsIGkpLCB3b3JkKTsKPiArCX0KPiArCj4gKwlpbnRl bF9zdGF0ZS0+Z2FtbWFfbW9kZSA9IEdBTU1BX01PREVfTU9ERV84QklUOwo+ICsJSTkxNV9XUklU RShHQU1NQV9NT0RFKGludGVsX2NydGMtPnBpcGUpLCBHQU1NQV9NT0RFX01PREVfOEJJVCk7Cj4g IH0KPiAgCj4gLS8qKiBMb2FkcyB0aGUgcGFsZXR0ZS9nYW1tYSB1bml0IGZvciB0aGUgQ1JUQyB3 aXRoIHRoZSBwcmVwYXJlZCB2YWx1ZXMgb24gICovCj4gLXN0YXRpYyB2b2lkIGk5eHhfbG9hZF9s ZWdhY3lfZ2FtbWFfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArc3RhdGljIHZvaWQgYnJv YWR3ZWxsX2xvYWRfZGVnYW1tYV9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqc3RhdGUgPSBjcnRjLT5zdGF0ZTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpp bnRlbF9zdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoc3RhdGUpOwo+ICsJZW51bSBwaXBlIHBp cGUgPSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOwo+ICsJdWludDMyX3QgaSwgbHV0X3NpemUg PSBJTlRFTF9JTkZPKGRldiktPmNvbG9yLmRlZ2FtbWFfbHV0X3NpemU7Cj4gKwo+ICsJSTkxNV9X UklURShQUkVDX1BBTF9JTkRFWChwaXBlKSwKPiArCQkgICBQQUxfUFJFQ19TUExJVF9NT0RFIHwg UEFMX1BSRUNfQVVUT19JTkNSRU1FTlQpOwo+ICsKPiArCWlmIChzdGF0ZS0+ZGVnYW1tYV9sdXQp IHsKPiArCQlzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqbHV0ID0KPiArCQkJKHN0cnVjdCBkcm1fY29s b3JfbHV0ICopIHN0YXRlLT5kZWdhbW1hX2x1dC0+ZGF0YTsKPiArCj4gKwkJZm9yIChpID0gMDsg aSA8IGx1dF9zaXplOyBpKyspIHsKPiArCQkJdWludDMyX3Qgd29yZCA9Cj4gKwkJCWRybV9jb2xv cl9sdXRfZXh0cmFjdChsdXRbaV0ucmVkLCAxMCkgPDwgMjAgfAo+ICsJCQlkcm1fY29sb3JfbHV0 X2V4dHJhY3QobHV0W2ldLmdyZWVuLCAxMCkgPDwgMTAgfAo+ICsJCQlkcm1fY29sb3JfbHV0X2V4 dHJhY3QobHV0W2ldLmJsdWUsIDEwKTsKPiArCj4gKwkJCUk5MTVfV1JJVEUoUFJFQ19QQUxfREFU QShwaXBlKSwgd29yZCk7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwg bHV0X3NpemU7IGkrKykgewo+ICsJCQl1aW50MzJfdCB2ID0gKGkgKiAoKDEgPDwgMTApIC0gMSkp IC8gKGx1dF9zaXplIC0gMSk7Cj4gKwo+ICsJCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0RBVEEocGlw ZSksCj4gKwkJCQkgICAodiA8PCAyMCkgfCAodiA8PCAxMCkgfCB2KTsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJaW50ZWxfc3RhdGUtPmdhbW1hX21vZGUgPSBHQU1NQV9NT0RFX01PREVfU1BMSVQ7Cj4g KwlJOTE1X1dSSVRFKEdBTU1BX01PREUocGlwZSksIEdBTU1BX01PREVfTU9ERV9TUExJVCk7Cj4g KwlQT1NUSU5HX1JFQUQoR0FNTUFfTU9ERShwaXBlKSk7Cj4gKwo+ICsJLyogUmVzZXQgdGhlIGlu ZGV4LCBvdGhlcndpc2UgaXQgcHJldmVudHMgdGhlIGxlZ2FjeSBwYWxldHRlIHRvIGJlCj4gKwkg KiB3cml0dGVuIHByb3Blcmx5Lgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKFBSRUNfUEFMX0lOREVY KHBpcGUpLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYnJvYWR3ZWxsX2xvYWRfZ2FtbWFf bHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+ c3RhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfc3RhdGUgPSB0b19pbnRl bF9jcnRjX3N0YXRlKHN0YXRlKTsKPiArCWVudW0gcGlwZSBwaXBlID0gdG9faW50ZWxfY3J0Yyhj cnRjKS0+cGlwZTsKPiArCXVpbnQzMl90IGksIGx1dF9vZmZzZXQgPSBJTlRFTF9JTkZPKGRldikt PmNvbG9yLmRlZ2FtbWFfbHV0X3NpemUsCj4gKwkJbHV0X3NpemUgPSBJTlRFTF9JTkZPKGRldikt PmNvbG9yLmdhbW1hX2x1dF9zaXplOwo+ICsKPiArCj4gKwlJOTE1X1dSSVRFKFBSRUNfUEFMX0lO REVYKHBpcGUpLAo+ICsJCSAgIFBBTF9QUkVDX1NQTElUX01PREUgfCBQQUxfUFJFQ19BVVRPX0lO Q1JFTUVOVCB8IGx1dF9vZmZzZXQpOwo+ICsKPiArCWlmIChzdGF0ZS0+Z2FtbWFfbHV0KSB7Cj4g KwkJc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dCA9Cj4gKwkJCShzdHJ1Y3QgZHJtX2NvbG9yX2x1 dCAqKSBzdGF0ZS0+Z2FtbWFfbHV0LT5kYXRhOwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbHV0 X3NpemU7IGkrKykgewo+ICsJCQl1aW50MzJfdCB3b3JkID0KPiArCQkJKGRybV9jb2xvcl9sdXRf ZXh0cmFjdChsdXRbaV0ucmVkLCAxMCkgPDwgMjApIHwKPiArCQkJKGRybV9jb2xvcl9sdXRfZXh0 cmFjdChsdXRbaV0uZ3JlZW4sIDEwKSA8PCAxMCkgfAo+ICsJCQlkcm1fY29sb3JfbHV0X2V4dHJh Y3QobHV0W2ldLmJsdWUsIDEwKTsKPiArCj4gKwkJCUk5MTVfV1JJVEUoUFJFQ19QQUxfREFUQShw aXBlKSwgd29yZCk7Cj4gKwkJfQo+ICsKPiArCQkvKiBQcm9ncmFtIHRoZSBtYXggcmVnaXN0ZXIg dG8gY2xhbXAgdmFsdWVzID4gMS4wLiAqLwo+ICsJCUk5MTVfV1JJVEUoUFJFQ19QQUxfR0NfTUFY KHBpcGUsIDApLAo+ICsJCQkgICBkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLnJlZCwgMTYp KTsKPiArCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBlLCAxKSwKPiArCQkJICAgZHJt X2NvbG9yX2x1dF9leHRyYWN0KGx1dFtpXS5ncmVlbiwgMTYpKTsKPiArCQlJOTE1X1dSSVRFKFBS RUNfUEFMX0dDX01BWChwaXBlLCAyKSwKPiArCQkJICAgZHJtX2NvbG9yX2x1dF9leHRyYWN0KGx1 dFtpXS5ibHVlLCAxNikpOwo+ICsJfSBlbHNlIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbHV0X3Np emU7IGkrKykgewo+ICsJCQl1aW50MzJfdCB2ID0gKGkgKiAoKDEgPDwgMTApIC0gMSkpIC8gKGx1 dF9zaXplIC0gMSk7Cj4gKwo+ICsJCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0RBVEEocGlwZSksCj4g KwkJCQkgICAodiA8PCAyMCkgfCAodiA8PCAxMCkgfCB2KTsKPiArCQl9Cj4gKwo+ICsJCUk5MTVf V1JJVEUoUFJFQ19QQUxfR0NfTUFYKHBpcGUsIDApLCAoMSA8PCAxNikgLSAxKTsKPiArCQlJOTE1 X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBlLCAxKSwgKDEgPDwgMTYpIC0gMSk7Cj4gKwkJSTkx NV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMiksICgxIDw8IDE2KSAtIDEpOwo+ICsJfQo+ ICsKPiArCWludGVsX3N0YXRlLT5nYW1tYV9tb2RlID0gR0FNTUFfTU9ERV9NT0RFX1NQTElUOwo+ ICsJSTkxNV9XUklURShHQU1NQV9NT0RFKHBpcGUpLCBHQU1NQV9NT0RFX01PREVfU1BMSVQpOwo+ ICsJUE9TVElOR19SRUFEKEdBTU1BX01PREUocGlwZSkpOwo+ICsKPiArCS8qIFJlc2V0IHRoZSBp bmRleCwgb3RoZXJ3aXNlIGl0IHByZXZlbnRzIHRoZSBsZWdhY3kgcGFsZXR0ZSB0byBiZQo+ICsJ ICogd3JpdHRlbiBwcm9wZXJseS4KPiArCSAqLwo+ICsJSTkxNV9XUklURShQUkVDX1BBTF9JTkRF WChwaXBlKSwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGludGVsX2NvbG9yX2xvYWRfbHV0 c19pbnRlcm5hbChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkJICBib29sIGxlZ2FjeSkK PiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gIAlzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gLQllbnVtIHBp cGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gLQlpbnQgaTsKPiArCXN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICppbnRlbF9zdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUp Owo+ICsJZW51bSBwaXBlIHBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOwo+ICAJYm9v bCByZWVuYWJsZV9pcHMgPSBmYWxzZTsKPiAgCj4gKwkvKiBUaGUgY2xvY2tzIGhhdmUgdG8gYmUg b24gdG8gbG9hZCB0aGUgcGFsZXR0ZS4gKi8KPiArCWlmICghY3J0Yy0+c3RhdGUtPmFjdGl2ZSkK PiArCQlyZXR1cm47Cj4gKwo+ICAJaWYgKEhBU19HTUNIX0RJU1BMQVkoZGV2KSkgewo+ICAJCWlm IChpbnRlbF9jcnRjLT5jb25maWctPmhhc19kc2lfZW5jb2RlcikKPiAgCQkJYXNzZXJ0X2RzaV9w bGxfZW5hYmxlZChkZXZfcHJpdik7Cj4gQEAgLTExNCw0MiArMzY0LDMyIEBAIHN0YXRpYyB2b2lk IGk5eHhfbG9hZF9sZWdhY3lfZ2FtbWFfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgCSAq IEdBTU1BX01PREUgaXMgY29uZmlndXJlZCBmb3Igc3BsaXQgZ2FtbWEgYW5kIElQU19DVEwgaGFz IElQUyBlbmFibGVkLgo+ICAJICovCj4gIAlpZiAoSVNfSEFTV0VMTChkZXYpICYmIGludGVsX2Ny dGMtPmNvbmZpZy0+aXBzX2VuYWJsZWQgJiYKPiAtCSAgICAoKEk5MTVfUkVBRChHQU1NQV9NT0RF KHBpcGUpKSAmIEdBTU1BX01PREVfTU9ERV9NQVNLKSA9PQo+IC0JICAgICBHQU1NQV9NT0RFX01P REVfU1BMSVQpKSB7Cj4gKwkgICAgaW50ZWxfc3RhdGUtPmdhbW1hX21vZGUgPT0gR0FNTUFfTU9E RV9NT0RFX1NQTElUKSB7Cj4gIAkJaHN3X2Rpc2FibGVfaXBzKGludGVsX2NydGMpOwo+ICAJCXJl ZW5hYmxlX2lwcyA9IHRydWU7Cj4gIAl9Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSsr KSB7Cj4gLQkJdWludDMyX3Qgd29yZCA9IChpbnRlbF9jcnRjLT5sdXRfcltpXSA8PCAxNikgfAo+ IC0JCQkoaW50ZWxfY3J0Yy0+bHV0X2dbaV0gPDwgOCkgfAo+IC0JCQlpbnRlbF9jcnRjLT5sdXRf YltpXTsKPiAtCQlpZiAoSEFTX0dNQ0hfRElTUExBWShkZXYpKQo+IC0JCQlJOTE1X1dSSVRFKFBB TEVUVEUocGlwZSwgaSksIHdvcmQpOwo+IC0JCWVsc2UKPiAtCQkJSTkxNV9XUklURShMR0NfUEFM RVRURShwaXBlLCBpKSwgd29yZCk7Cj4gKwlpZiAobGVnYWN5KQo+ICsJCWk5eHhfbG9hZF9sZWdh Y3lfZ2FtbWFfbHV0KGNydGMpOwo+ICsJZWxzZSB7Cj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkubG9h ZF9kZWdhbW1hX2x1dChjcnRjKTsKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2dhbW1hX2x1 dChjcnRjKTsKPiAgCX0KPiAgCj4gLQlJOTE1X1dSSVRFKEdBTU1BX01PREUoaW50ZWxfY3J0Yy0+ cGlwZSksIEdBTU1BX01PREVfTU9ERV84QklUKTsKPiAtCj4gIAlpZiAocmVlbmFibGVfaXBzKQo+ ICAJCWhzd19lbmFibGVfaXBzKGludGVsX2NydGMpOwo+ICB9Cj4gIAo+IC12b2lkIGludGVsX2Nv bG9yX2xvYWRfZ2FtbWFfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArdm9pZCBpbnRlbF9j b2xvcl9sZWdhY3lfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICB7Cj4gLQkvKiBU aGUgY2xvY2tzIGhhdmUgdG8gYmUgb24gdG8gbG9hZCB0aGUgcGFsZXR0ZS4gKi8KPiAtCWlmICgh Y3J0Yy0+c3RhdGUtPmFjdGl2ZSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaTl4eF9sb2FkX2xlZ2Fj eV9nYW1tYV9sdXQoY3J0Yyk7Cj4gKwlpbnRlbF9jb2xvcl9sb2FkX2x1dHNfaW50ZXJuYWwoY3J0 YywgdHJ1ZSk7Cj4gIH0KPiAgCj4gIHZvaWQgaW50ZWxfY29sb3JfbGVnYWN5X2dhbW1hX3NldChz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAo+ICAJCQkJICB1MTYg KmJsdWUsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBzaXplKQo+ICB7Cj4gLQlpbnQgZW5kID0g KHN0YXJ0ICsgc2l6ZSA+IDI1NikgPyAyNTYgOiBzdGFydCArIHNpemUsIGk7Cj4gIAlzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gKwlpbnQgZW5k ID0gKHN0YXJ0ICsgc2l6ZSA+IDI1NikgPyAyNTYgOiBzdGFydCArIHNpemUsIGk7Cj4gIAo+ICAJ Zm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewo+ICAJCWludGVsX2NydGMtPmx1dF9yW2ld ID0gcmVkW2ldID4+IDg7Cj4gQEAgLTE1NywxMSArMzk3LDI5IEBAIHZvaWQgaW50ZWxfY29sb3Jf bGVnYWN5X2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdy ZWVuLAo+ICAJCWludGVsX2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA4Owo+ICAJfQo+ICAK PiAtCWludGVsX2NvbG9yX2xvYWRfZ2FtbWFfbHV0KGNydGMpOwo+ICsJaW50ZWxfY29sb3JfbG9h ZF9sdXRzX2ludGVybmFsKGNydGMsIHRydWUpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2NvbG9y X2xvYWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCWludGVsX2NvbG9yX2xv YWRfbHV0c19pbnRlcm5hbChjcnRjLAo+ICsJCQkJICAgICAgICFjcnRjLT5zdGF0ZS0+ZGVnYW1t YV9sdXQgJiYKPiArCQkJCSAgICAgICAhY3J0Yy0+c3RhdGUtPmdhbW1hX2x1dCk7Cj4gK30KPiAr Cj4gK3ZvaWQgaW50ZWxfY29sb3Jfc2V0X2NzYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sK PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsKPiArCWlmIChkZXZf cHJpdi0+ZGlzcGxheS5sb2FkX2NzY19tYXRyaXgpCj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkubG9h ZF9jc2NfbWF0cml4KGNydGMpOwo+ICB9Cj4gIAo+ICB2b2lkIGludGVsX2NvbG9yX2luaXQoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0 Yy0+ZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKPiAgCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKPiAgCWludCBpOwo+ICAKPiBAQCAtMTcxLDQgKzQyOSwyMyBAQCB2b2lkIGludGVs X2NvbG9yX2luaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJCWludGVsX2NydGMtPmx1dF9n W2ldID0gaTsKPiAgCQlpbnRlbF9jcnRjLT5sdXRfYltpXSA9IGk7Cj4gIAl9Cj4gKwo+ICsJaWYg KElTX0JST0FEV0VMTChkZXYpIHx8IElTX1NLWUxBS0UoZGV2KSB8fAo+ICsJICAgIElTX0JST1hU T04oZGV2KSB8fCBJU19LQUJZTEFLRShkZXYpKSB7Cj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkubG9h ZF9kZWdhbW1hX2x1dCA9IGJyb2Fkd2VsbF9sb2FkX2RlZ2FtbWFfbHV0Owo+ICsJCWRldl9wcml2 LT5kaXNwbGF5LmxvYWRfZ2FtbWFfbHV0ID0gYnJvYWR3ZWxsX2xvYWRfZ2FtbWFfbHV0Owo+ICsJ CWRldl9wcml2LT5kaXNwbGF5LmxvYWRfY3NjX21hdHJpeCA9IGk5eHhfbG9hZF9jc2NfbWF0cml4 Owo+ICsJfSBlbHNlIHsKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2NzY19tYXRyaXggPSBp OXh4X2xvYWRfY3NjX21hdHJpeDsKPiArCX0KPiArCj4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5j b2xvci5kZWdhbW1hX2x1dF9zaXplICE9IDAgJiYKPiArCSAgICBJTlRFTF9JTkZPKGRldiktPmNv bG9yLmdhbW1hX2x1dF9zaXplICE9IDApIHsKPiArCQlXQVJOX09OKCFkZXZfcHJpdi0+ZGlzcGxh eS5sb2FkX2RlZ2FtbWFfbHV0IHx8Cj4gKwkJCSFkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2dhbW1h X2x1dCB8fAo+ICsJCQkhZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9jc2NfbWF0cml4KTsKPiArCQlk cm1faGVscGVyX2NydGNfZW5hYmxlX2NvbG9yX21nbXQoY3J0YywKPiArCQkJCQlJTlRFTF9JTkZP KGRldiktPmNvbG9yLmRlZ2FtbWFfbHV0X3NpemUsCj4gKwkJCQkJSU5URUxfSU5GTyhkZXYpLT5j b2xvci5nYW1tYV9sdXRfc2l6ZSk7Cj4gKwl9Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCj4gaW5kZXggZjEwYmJhMi4uZTM4YjMxYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtNDg2NCw3ICs0ODY0LDcgQEAgc3RhdGljIHZvaWQgaXJv bmxha2VfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJICogT24gSUxLKyBM VVQgbXVzdCBiZSBsb2FkZWQgYmVmb3JlIHRoZSBwaXBlIGlzIHJ1bm5pbmcgYnV0IHdpdGgKPiAg CSAqIGNsb2NrcyBlbmFibGVkCj4gIAkgKi8KPiAtCWludGVsX2NvbG9yX2xvYWRfZ2FtbWFfbHV0 KGNydGMpOwo+ICsJaW50ZWxfY29sb3JfbG9hZF9sdXRzKGNydGMpOwo+ICAKPiAgCWludGVsX3Vw ZGF0ZV93YXRlcm1hcmtzKGNydGMpOwo+ICAJaW50ZWxfZW5hYmxlX3BpcGUoaW50ZWxfY3J0Yyk7 Cj4gQEAgLTQ5NTksNyArNDk1OSw3IEBAIHN0YXRpYyB2b2lkIGhhc3dlbGxfY3J0Y19lbmFibGUo c3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJICogT24gSUxLKyBMVVQgbXVzdCBiZSBsb2FkZWQg YmVmb3JlIHRoZSBwaXBlIGlzIHJ1bm5pbmcgYnV0IHdpdGgKPiAgCSAqIGNsb2NrcyBlbmFibGVk Cj4gIAkgKi8KPiAtCWludGVsX2NvbG9yX2xvYWRfZ2FtbWFfbHV0KGNydGMpOwo+ICsJaW50ZWxf Y29sb3JfbG9hZF9sdXRzKGNydGMpOwo+ICAKPiAgCWludGVsX2RkaV9zZXRfcGlwZV9zZXR0aW5n cyhjcnRjKTsKPiAgCWlmICghaW50ZWxfY3J0Yy0+Y29uZmlnLT5oYXNfZHNpX2VuY29kZXIpCj4g QEAgLTYxNzQsNyArNjE3NCw3IEBAIHN0YXRpYyB2b2lkIHZhbGxleXZpZXdfY3J0Y19lbmFibGUo c3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAKPiAgCWk5eHhfcGZpdF9lbmFibGUoaW50ZWxfY3J0 Yyk7Cj4gIAo+IC0JaW50ZWxfY29sb3JfbG9hZF9nYW1tYV9sdXQoY3J0Yyk7Cj4gKwlpbnRlbF9j b2xvcl9sb2FkX2x1dHMoY3J0Yyk7Cj4gIAo+ICAJaW50ZWxfZW5hYmxlX3BpcGUoaW50ZWxfY3J0 Yyk7Cj4gIAo+IEBAIC02MjI3LDcgKzYyMjcsNyBAQCBzdGF0aWMgdm9pZCBpOXh4X2NydGNfZW5h YmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgCj4gIAlpOXh4X3BmaXRfZW5hYmxlKGludGVs X2NydGMpOwo+ICAKPiAtCWludGVsX2NvbG9yX2xvYWRfZ2FtbWFfbHV0KGNydGMpOwo+ICsJaW50 ZWxfY29sb3JfbG9hZF9sdXRzKGNydGMpOwo+ICAKPiAgCWludGVsX3VwZGF0ZV93YXRlcm1hcmtz KGNydGMpOwo+ICAJaW50ZWxfZW5hYmxlX3BpcGUoaW50ZWxfY3J0Yyk7Cj4gQEAgLTExODk4LDcg KzExODk4LDcgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9m dW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7Cj4gIAkubW9kZV9zZXRfYmFzZV9hdG9taWMgPSBp bnRlbF9waXBlX3NldF9iYXNlX2F0b21pYywKPiAtCS5sb2FkX2x1dCA9IGludGVsX2NvbG9yX2xv YWRfZ2FtbWFfbHV0LAo+ICsJLmxvYWRfbHV0ID0gaW50ZWxfY29sb3JfbGVnYWN5X2xvYWRfbHV0 LAo+ICAJLmF0b21pY19iZWdpbiA9IGludGVsX2JlZ2luX2NydGNfY29tbWl0LAo+ICAJLmF0b21p Y19mbHVzaCA9IGludGVsX2ZpbmlzaF9jcnRjX2NvbW1pdCwKPiAgCS5hdG9taWNfY2hlY2sgPSBp bnRlbF9jcnRjX2F0b21pY19jaGVjaywKPiBAQCAtMTM0MjgsNiArMTM0MjgsMTcgQEAgc3RhdGlj IGludCBpbnRlbF9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJCWh3 X2NoZWNrID0gdHJ1ZTsKPiAgCQl9Cj4gIAo+ICsJCWlmICghbW9kZXNldCAmJgo+ICsJCSAgICBj cnRjLT5zdGF0ZS0+YWN0aXZlICYmCj4gKwkJICAgIGNydGMtPnN0YXRlLT5jb2xvcl9tZ210X2No YW5nZWQpIHsKPiArCQkJLyogT25seSB1cGRhdGUgY29sb3IgbWFuYWdlbWVudCB3aGVuIG5vdCBk b2luZwoKTWlub3Igbml0cGljazsga2VybmVsIGNvZGluZyBzdHlsZSBzYXlzIHRoZSBvcGVuaW5n ICIvKiIgb2YgbXVsdGktbGluZQpjb21tZW50cyBzaG91bGQgYmUgb24gYSBsaW5lIGJ5IGl0c2Vs Zi4KCj4gKwkJCSAqIGEgbW9kZXNldCBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieQo+ICsJCQkgKiBj cnRjX2VuYWJsZSBhbHJlYWR5Lgo+ICsJCQkgKi8KPiArCQkJaW50ZWxfY29sb3Jfc2V0X2NzYyhj cnRjKTsKPiArCQkJaW50ZWxfY29sb3JfbG9hZF9sdXRzKGNydGMpOwo+ICsJCX0KPiArCj4gIAkJ aWYgKCFtb2Rlc2V0KQo+ICAJCQlpbnRlbF9wcmVfcGxhbmVfdXBkYXRlKHRvX2ludGVsX2NydGNf c3RhdGUoY3J0Y19zdGF0ZSkpOwo+ICAKPiBAQCAtMTM1MTksNiArMTM1MzAsNyBAQCBvdXQ6Cj4g IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsK PiAgCS5nYW1tYV9zZXQgPSBpbnRlbF9jb2xvcl9sZWdhY3lfZ2FtbWFfc2V0LAo+ICAJLnNldF9j b25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAo+ICsJLnNldF9wcm9wZXJ0eSA9 IGRybV9hdG9taWNfaGVscGVyX2NydGNfc2V0X3Byb3BlcnR5LAo+ICAJLmRlc3Ryb3kgPSBpbnRl bF9jcnRjX2Rlc3Ryb3ksCj4gIAkucGFnZV9mbGlwID0gaW50ZWxfY3J0Y19wYWdlX2ZsaXAsCj4g IAkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGludGVsX2NydGNfZHVwbGljYXRlX3N0YXRlLAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gaW5kZXggMmI1ZDAzYS4uYzM4NGM3OCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTUwNyw2ICs1MDcsOCBAQCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSB7Cj4gIAkvKiBJVkIgc3ByaXRlIHNjYWxpbmcgdy9hIChXYUN4U1JEaXNh YmxlZEZvclNwcml0ZVNjYWxpbmc6aXZiKSAqLwo+ICAJYm9vbCBkaXNhYmxlX2xwX3dtOwo+ICAK PiArCXVpbnQzMl90IGdhbW1hX21vZGU7Cj4gKwo+ICAJc3RydWN0IHsKPiAgCQkvKgo+ICAJCSAq IG9wdGltYWwgd2F0ZXJtYXJrcywgcHJvZ3JhbW1lZCBwb3N0LXZibGFuayB3aGVuIHRoaXMgc3Rh dGUKPiBAQCAtMTYyMCw5ICsxNjIyLDExIEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2hlbHBlcl9mdW5jcyBpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3M7Cj4gIAo+ICAvKiBpbnRlbF9j b2xvci5jICovCj4gIHZvaWQgaW50ZWxfY29sb3JfaW5pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Owo+ICt2b2lkIGludGVsX2NvbG9yX3VwZGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICB2 b2lkIGludGVsX2NvbG9yX3NldF9jc2Moc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiAtdm9pZCBp bnRlbF9jb2xvcl9sb2FkX2dhbW1hX2x1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICt2b2lk IGludGVsX2NvbG9yX2xvYWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICB2b2lkIGlu dGVsX2NvbG9yX2xlZ2FjeV9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJl ZCwgdTE2ICpncmVlbiwKPiAgCQkJCSAgdTE2ICpibHVlLCB1aW50MzJfdCBzdGFydCwgdWludDMy X3Qgc2l6ZSk7Cj4gK3ZvaWQgaW50ZWxfY29sb3JfbGVnYWN5X2xvYWRfbHV0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0Yyk7CgppbnRlbF9jb2xvcl9sb2FkX2dhbW1hX2x1dCgpIHdhcyBhIHJlbmFtZSBm cm9tIHBhdGNoICMxIG9mIHRoZSBzZXJpZXMuCk1heWJlIHdlIHNob3VsZCBzcXVhc2ggdGhpcyBu YW1lIGNoYW5nZSBiYWNrIGludG8gdGhhdCBwYXRjaCwgZXZlbgp0aG91Z2ggd2Ugb25seSBoYXZl IGEgc2luZ2xlIExVVCBhdCB0aGF0IHBvaW50PyAgSSBndWVzcyBpdCBkb2Vzbid0CnJlYWxseSBt YXR0ZXIgdG9vIG11Y2ggZWl0aGVyIHdheS4KCgpNYXR0Cgo+ICAKPiAgI2VuZGlmIC8qIF9fSU5U RUxfRFJWX0hfXyAqLwo+IC0tIAo+IDIuNy4wCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKTWF0dCBSb3BlcgpHcmFwaGljcyBTb2Z0 d2FyZSBFbmdpbmVlcgpJb1RHIFBsYXRmb3JtIEVuYWJsaW5nICYgRGV2ZWxvcG1lbnQKSW50ZWwg Q29ycG9yYXRpb24KKDkxNikgMzU2LTI3OTUKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==