From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v8 1/2] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Tue, 24 Nov 2015 22:28:41 +0200 Message-ID: <20151124202841.GK4437@intel.com> References: <1446496428-12135-1-git-send-email-rafael.antognolli@intel.com> <1446496428-12135-2-git-send-email-rafael.antognolli@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: <1446496428-12135-2-git-send-email-rafael.antognolli@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rafael Antognolli Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBOb3YgMDIsIDIwMTUgYXQgMTI6MzM6NDdQTSAtMDgwMCwgUmFmYWVsIEFudG9nbm9s bGkgd3JvdGU6Cj4gVGhpcyBtb2R1bGUgaXMgaGVhdmlseSBiYXNlZCBvbiBpMmMtZGV2LiBPbmNl IGxvYWRlZCwgaXQgcHJvdmlkZXMgb25lCj4gZGV2IG5vZGUgcGVyIERQIEFVWCBjaGFubmVsLCBu YW1lZCBkcm1fZHBfYXV4Tiwgd2hlcmUgTiBpcyBhbiBpbnRlZ2VyLgo+IAo+IEl0J3MgcG9zc2li bGUgdG8ga25vdyB3aGljaCBjb25uZWN0b3Igb3ducyB0aGlzIGF1eCBjaGFubmVsIGJ5IGxvb2tp bmcKPiBhdCB0aGUgcmVzcGVjdGl2ZSBzeXNmcyAvc3lzL2NsYXNzL2RybV9hdXhfZGV2L2RybV9k cF9hdXhOL2Nvbm5lY3RvciwgaWYKPiB0aGUgY29ubmVjdG9yIGRldmljZSBwb2ludGVyIHdhcyBj b3JyZWN0bHkgc2V0IGluIHRoZSBhdXggaGVscGVyIHN0cnVjdC4KPiAKPiBUd28gbWFpbiBvcGVy YXRpb25zIGFyZSBwcm92aWRlZCBvbiB0aGUgcmVnaXN0ZXJzIHJlYWQgYW5kIHdyaXRlLiBUaGUK PiBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSByZWFkIG9yIHdyaXR0ZW4gaXMgZ2l2ZW4g dXNpbmcgbHNlZWsuIFRoZQo+IHNlZWsgcG9zaXRpb24gaXMgdXBkYXRlZCB1cG9uIHJlYWQgb3Ig d3JpdGUuCj4gCj4gdjI6Cj4gIC0gbHNlZWsgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHJlZ2lzdGVy IHRvIHJlYWQvd3JpdGUKPiAgLSByZWFkL3dyaXRlIGFyZSB1c2VkIGluc3RlYWQgb2YgaW9jdGwK PiAgLSBubyBibG9ja2luZ19ub3RpZmllciBpcyB1c2VkLCBqdXN0IGEgZGlyZWN0IGNhbGxiYWNr Cj4gCj4gdjM6Cj4gIC0gdXNlIGRybV9kcF9hdXhfZGV2IHByZWZpeCBmb3IgcHVibGljIGZ1bmN0 aW9ucwo+ICAtIGNoYXJkZXYgaXMgbmFtZWQgZHJtX2RwX2F1eE4KPiAgLSByZWFkL3dyaXRlIGRv bid0IGFsbG9jYXRlIGEgYnVmZmVyIGFueW1vcmUsIGFuZCB0cmFuc2ZlciB1cCB0byAxNiBieXRl cyBhCj4gICAgdGltZQo+ICAtIHJlbW92ZSBub3RpZmllciBsaXN0IGZyb20gdGhlIGltcGxlbWVu dGF0aW9uCj4gIC0gb3B0aW9uIG9uIG1lbnVjb25maWcgaXMgbm93IGEgYm9vbGVhbgo+ICAtIGFk ZCBpbmxpbmUgc3R1YiBmdW5jdGlvbnMgdG8gYXZvaWQgYnJlYWthZ2Ugd2hlbiB0aGlzIG9wdGlv biBpcyBkaXNhYmxlZAo+IAo+IHY0Ogo+ICAtIGZpeCBidWlsZCBzeXN0ZW0gY2hhbmdlcyAtIGFj dHVhbGx5IGRpc2FibGUgdGhpcyBtb2R1bGUgd2hlbiBub3Qgc2VsZWN0ZWQuCj4gCj4gdjU6Cj4g IC0gVXNlIGtyZWYgdG8gYXZvaWQgZGV2aWNlIGNsb3Npbmcgd2hpbGUgc3RpbGwgaW4gdXNlCj4g IC0gRG9uJ3QgdXNlIGxpc3QsIHVzZSBhbiBpZHIgZm9yIHN0b3JpbmcgYXV4X2Rldgo+ICAtIFJl bW92ZSAiY29ubmVjdG9yIiBhdHRyaWJ1dGUKPiAgLSBzZXQgYXV4LmRldiB0byB0aGUgY29ubmVj dG9yIGRybV9jb25uZWN0b3IgZGV2aWNlLCBpbnN0ZWFkIG9mCj4gICAgZHJtX2RldmljZQo+IAo+ IHY2Ogo+ICAtIFVzZSBhdG9taWNfdCBmb3IgdXNhZ2UgY291bnQKPiAgLSBVc2UgYSBtdXRleCBp bnN0ZWFkIG9mIHNwaW5sb2NrIGZvciBpZHIgbG9jawo+ICAtIERlc3Ryb3kgY2hhcmRldiBpbW1l ZGlhdGVseSBvbiB1bnJlZ2lzdGVyCj4gIC0gb3RoZXIgbWlub3Igc3VnZ2VzdGlvbnMgZnJvbSBW aWxsZQo+IAo+IHY3Ogo+ICAtIHN0eWxlIGZpeGVzCj4gIC0gZXJyb3IgaGFuZGxpbmcgZml4ZXMK PiAKPiB2ODoKPiAgLSBtb3JlIGVycm9yIGhhbmRsaW5nIGZpeGVzCj4gCj4gU2lnbmVkLW9mZi1i eTogUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KCkkgdGhv dWdodCBJIGFscmVhZHkgci1iJ2QgdGhpcy4gTGV0IG1lIGRvIGl0IGFnYWluOgpSZXZpZXdlZC1i eTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCj4gLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgIHwgICA4ICsKPiAgZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2Rw X2F1eF9kZXYuYyB8IDM3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK PiAgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYyAgfCAgMTYgKy0KPiAgaW5jbHVkZS9k cm0vZHJtX2RwX2F1eF9kZXYuaCAgICAgfCAgNTAgKysrKysrCj4gIDUgZmlsZXMgY2hhbmdlZCwg NDQ3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs dWRlL2RybS9kcm1fZHBfYXV4X2Rldi5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBpbmRleCBjNGJmOWExLi5kYWVm Y2NlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcKPiBAQCAtMjUsNiArMjUsMTQgQEAgY29uZmlnIERSTV9NSVBJX0RT SQo+ICAJYm9vbAo+ICAJZGVwZW5kcyBvbiBEUk0KPiAgCj4gK2NvbmZpZyBEUk1fRFBfQVVYX0NI QVJERVYKPiArCWJvb2wgIkRSTSBEUCBBVVggSW50ZXJmYWNlIgo+ICsJZGVwZW5kcyBvbiBEUk0K PiArCWhlbHAKPiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBhIC9kZXYvZHJtX2Rw X2F1eE4gbm9kZSB0aGF0IGFsbG93cyB0bwo+ICsJICByZWFkIGFuZCB3cml0ZSB2YWx1ZXMgdG8g YXJiaXRyYXJ5IERQQ0QgcmVnaXN0ZXJzIG9uIHRoZSBEUCBhdXgKPiArCSAgY2hhbm5lbC4KPiAr Cj4gIGNvbmZpZyBEUk1fS01TX0hFTFBFUgo+ICAJdHJpc3RhdGUKPiAgCWRlcGVuZHMgb24gRFJN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQo+IGluZGV4IDFlOWZmNGMuLmU0OGVjOGYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAg LTI4LDYgKzI4LDcgQEAgZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1f ZHBfaGVscGVyLm8gZHJtX3Byb2JlX2hlbHBlci5vIFwKPiAgZHJtX2ttc19oZWxwZXItJChDT05G SUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9hZC5vCj4gIGRybV9rbXNf aGVscGVyLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9IGRybV9mYl9oZWxwZXIubwo+ ICBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fS01TX0NNQV9IRUxQRVIpICs9IGRybV9mYl9j bWFfaGVscGVyLm8KPiArZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVW KSArPSBkcm1fZHBfYXV4X2Rldi5vCj4gIAo+ICBvYmotJChDT05GSUdfRFJNX0tNU19IRUxQRVIp ICs9IGRybV9rbXNfaGVscGVyLm8KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fZHBfYXV4X2Rldi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9hdXhfZGV2LmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjAyNjk1NTYKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9hdXhfZGV2LmMKPiBAQCAtMCwwICsxLDM3 MyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsg Kgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBk ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK PiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBSYWZh ZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50ZWwuY29tPgo+ICsgKgo+ICsgKi8K PiArCj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxw ZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybVAu aD4KPiArCj4gK3N0cnVjdCBkcm1fZHBfYXV4X2RldiB7Cj4gKwl1bnNpZ25lZCBpbmRleDsKPiAr CXN0cnVjdCBkcm1fZHBfYXV4ICphdXg7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1 Y3Qga3JlZiByZWZjb3VudDsKPiArCWF0b21pY190IHVzZWNvdW50Owo+ICt9Owo+ICsKPiArI2Rl ZmluZSBEUk1fQVVYX01JTk9SUwkyNTYKPiArI2RlZmluZSBBVVhfTUFYX09GRlNFVAkoMSA8PCAy MCkKPiArc3RhdGljIERFRklORV9JRFIoYXV4X2lkcik7Cj4gK3N0YXRpYyBERUZJTkVfTVVURVgo YXV4X2lkcl9tdXRleCk7Cj4gK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmRybV9kcF9hdXhfZGV2X2Ns YXNzOwo+ICtzdGF0aWMgaW50IGRybV9kZXZfbWFqb3IgPSAtMTsKPiArCj4gK3N0YXRpYyBzdHJ1 Y3QgZHJtX2RwX2F1eF9kZXYgKmRybV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcih1bnNpZ25lZCBp bmRleCkKPiArewo+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0gTlVMTDsKPiAr Cj4gKwltdXRleF9sb2NrKCZhdXhfaWRyX211dGV4KTsKPiArCWF1eF9kZXYgPSBpZHJfZmluZCgm YXV4X2lkciwgaW5kZXgpOwo+ICsJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmYXV4X2Rldi0+ cmVmY291bnQpKQo+ICsJCWF1eF9kZXYgPSBOVUxMOwo+ICsJbXV0ZXhfdW5sb2NrKCZhdXhfaWRy X211dGV4KTsKPiArCj4gKwlyZXR1cm4gYXV4X2RldjsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBkcm1fZHBfYXV4X2RldiAqYWxsb2NfZHJtX2RwX2F1eF9kZXYoc3RydWN0IGRybV9kcF9hdXgg KmF1eCkKPiArewo+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ICsJaW50IGlu ZGV4Owo+ICsKPiArCWF1eF9kZXYgPSBremFsbG9jKHNpemVvZigqYXV4X2RldiksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFhdXhfZGV2KQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJ YXV4X2Rldi0+YXV4ID0gYXV4Owo+ICsJYXRvbWljX3NldCgmYXV4X2Rldi0+dXNlY291bnQsIDEp Owo+ICsJa3JlZl9pbml0KCZhdXhfZGV2LT5yZWZjb3VudCk7Cj4gKwo+ICsJbXV0ZXhfbG9jaygm YXV4X2lkcl9tdXRleCk7Cj4gKwlpbmRleCA9IGlkcl9hbGxvY19jeWNsaWMoJmF1eF9pZHIsIGF1 eF9kZXYsIDAsIERSTV9BVVhfTUlOT1JTLAo+ICsJCQkJIEdGUF9LRVJORUwpOwo+ICsJbXV0ZXhf dW5sb2NrKCZhdXhfaWRyX211dGV4KTsKPiArCWlmIChpbmRleCA8IDApIHsKPiArCQlrZnJlZShh dXhfZGV2KTsKPiArCQlyZXR1cm4gRVJSX1BUUihpbmRleCk7Cj4gKwl9Cj4gKwlhdXhfZGV2LT5p bmRleCA9IGluZGV4Owo+ICsKPiArCXJldHVybiBhdXhfZGV2Owo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCByZWxlYXNlX2RybV9kcF9hdXhfZGV2KHN0cnVjdCBrcmVmICpyZWYpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9Cj4gKwkJY29udGFpbmVyX29mKHJlZiwgc3Ry dWN0IGRybV9kcF9hdXhfZGV2LCByZWZjb3VudCk7Cj4gKwo+ICsJa2ZyZWUoYXV4X2Rldik7Cj4g K30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4g KwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICt7Cj4gKwlz c2l6ZV90IHJlczsKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9Cj4gKwkJZHJt X2RwX2F1eF9kZXZfZ2V0X2J5X21pbm9yKE1JTk9SKGRldi0+ZGV2dCkpOwo+ICsKPiArCWlmICgh YXV4X2RldikKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlyZXMgPSBzcHJpbnRmKGJ1Ziwg IiVzXG4iLCBhdXhfZGV2LT5hdXgtPm5hbWUpOwo+ICsJa3JlZl9wdXQoJmF1eF9kZXYtPnJlZmNv dW50LCByZWxlYXNlX2RybV9kcF9hdXhfZGV2KTsKPiArCj4gKwlyZXR1cm4gcmVzOwo+ICt9Cj4g K3N0YXRpYyBERVZJQ0VfQVRUUl9STyhuYW1lKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmli dXRlICpkcm1fZHBfYXV4X2F0dHJzW10gPSB7Cj4gKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAo+ICsJ TlVMTCwKPiArfTsKPiArQVRUUklCVVRFX0dST1VQUyhkcm1fZHBfYXV4KTsKPiArCj4gK3N0YXRp YyBpbnQgYXV4ZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUp Cj4gK3sKPiArCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Cj4gKwlzdHJ1Y3Qg ZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gKwo+ICsJYXV4X2RldiA9IGRybV9kcF9hdXhfZGV2 X2dldF9ieV9taW5vcihtaW5vcik7Cj4gKwlpZiAoIWF1eF9kZXYpCj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwo+ICsJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYXV4X2RldjsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgbG9mZl90IGF1eGRldl9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUs IGxvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCj4gK3sKPiArCXJldHVybiBmaXhlZF9zaXplX2xs c2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSwgQVVYX01BWF9PRkZTRVQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgc3NpemVfdCBhdXhkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIg KmJ1Ziwgc2l6ZV90IGNvdW50LAo+ICsJCQkgICBsb2ZmX3QgKm9mZnNldCkKPiArewo+ICsJc2l6 ZV90IGJ5dGVzX3BlbmRpbmcsIG51bV9ieXRlc19wcm9jZXNzZWQgPSAwOwo+ICsJc3RydWN0IGRy bV9kcF9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsJc3NpemVfdCBy ZXMgPSAwOwo+ICsKPiArCWlmICghYXRvbWljX2luY19ub3RfemVybygmYXV4X2Rldi0+dXNlY291 bnQpKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWJ5dGVzX3BlbmRpbmcgPSBtaW4oKGxv ZmZfdCljb3VudCwgQVVYX01BWF9PRkZTRVQgLSAoKm9mZnNldCkpOwo+ICsKPiArCWlmICghYWNj ZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBieXRlc19wZW5kaW5nKSkgewo+ICsJCXJlcyA9IC1F RkFVTFQ7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJd2hpbGUgKGJ5dGVzX3BlbmRpbmcg PiAwKSB7Cj4gKwkJdWludDhfdCBsb2NhbGJ1ZltEUF9BVVhfTUFYX1BBWUxPQURfQllURVNdOwo+ ICsJCXNzaXplX3QgdG9kbyA9IG1pbl90KHNpemVfdCwgYnl0ZXNfcGVuZGluZywgc2l6ZW9mKGxv Y2FsYnVmKSk7Cj4gKwo+ICsJCXJlcyA9IGRybV9kcF9kcGNkX3JlYWQoYXV4X2Rldi0+YXV4LCAq b2Zmc2V0LCBsb2NhbGJ1ZiwgdG9kbyk7Cj4gKwkJaWYgKHJlcyA8PSAwKSB7Cj4gKwkJCXJlcyA9 IG51bV9ieXRlc19wcm9jZXNzZWQgPyBudW1fYnl0ZXNfcHJvY2Vzc2VkIDogcmVzOwo+ICsJCQln b3RvIG91dDsKPiArCQl9Cj4gKwkJaWYgKF9fY29weV90b191c2VyKGJ1ZiArIG51bV9ieXRlc19w cm9jZXNzZWQsIGxvY2FsYnVmLCByZXMpKSB7Cj4gKwkJCXJlcyA9IG51bV9ieXRlc19wcm9jZXNz ZWQgPwo+ICsJCQkJbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IC1FRkFVTFQ7Cj4gKwkJCWdvdG8gb3V0 Owo+ICsJCX0KPiArCQlieXRlc19wZW5kaW5nIC09IHJlczsKPiArCQkqb2Zmc2V0ICs9IHJlczsK PiArCQludW1fYnl0ZXNfcHJvY2Vzc2VkICs9IHJlczsKPiArCQlyZXMgPSBudW1fYnl0ZXNfcHJv Y2Vzc2VkOwo+ICsJfQo+ICsKPiArb3V0Ogo+ICsJYXRvbWljX2RlYygmYXV4X2Rldi0+dXNlY291 bnQpOwo+ICsJd2FrZV91cF9hdG9taWNfdCgmYXV4X2Rldi0+dXNlY291bnQpOwo+ICsJcmV0dXJu IHJlczsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgYXV4ZGV2X3dyaXRlKHN0cnVjdCBmaWxl ICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAo+ICsJCQkgICAgc2l6ZV90IGNvdW50LCBs b2ZmX3QgKm9mZnNldCkKPiArewo+ICsJc2l6ZV90IGJ5dGVzX3BlbmRpbmcsIG51bV9ieXRlc19w cm9jZXNzZWQgPSAwOwo+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+ cHJpdmF0ZV9kYXRhOwo+ICsJc3NpemVfdCByZXMgPSAwOwo+ICsKPiArCWlmICghYXRvbWljX2lu Y19ub3RfemVybygmYXV4X2Rldi0+dXNlY291bnQpKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsK PiArCWJ5dGVzX3BlbmRpbmcgPSBtaW4oKGxvZmZfdCljb3VudCwgQVVYX01BWF9PRkZTRVQgLSAq b2Zmc2V0KTsKPiArCj4gKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmLCBieXRlc19w ZW5kaW5nKSkgewo+ICsJCXJlcyA9IC1FRkFVTFQ7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ ICsJd2hpbGUgKGJ5dGVzX3BlbmRpbmcgPiAwKSB7Cj4gKwkJdWludDhfdCBsb2NhbGJ1ZltEUF9B VVhfTUFYX1BBWUxPQURfQllURVNdOwo+ICsJCXNzaXplX3QgdG9kbyA9IG1pbl90KHNpemVfdCwg Ynl0ZXNfcGVuZGluZywgc2l6ZW9mKGxvY2FsYnVmKSk7Cj4gKwo+ICsJCWlmIChfX2NvcHlfZnJv bV91c2VyKGxvY2FsYnVmLAo+ICsJCQkJICAgICBidWYgKyBudW1fYnl0ZXNfcHJvY2Vzc2VkLCB0 b2RvKSkgewo+ICsJCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2VkID8KPiArCQkJCW51bV9ieXRl c19wcm9jZXNzZWQgOiAtRUZBVUxUOwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwo+ICsJCXJl cyA9IGRybV9kcF9kcGNkX3dyaXRlKGF1eF9kZXYtPmF1eCwgKm9mZnNldCwgbG9jYWxidWYsIHRv ZG8pOwo+ICsJCWlmIChyZXMgPD0gMCkgewo+ICsJCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2Vk ID8gbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IHJlczsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsJ CWJ5dGVzX3BlbmRpbmcgLT0gcmVzOwo+ICsJCSpvZmZzZXQgKz0gcmVzOwo+ICsJCW51bV9ieXRl c19wcm9jZXNzZWQgKz0gcmVzOwo+ICsJCXJlcyA9IG51bV9ieXRlc19wcm9jZXNzZWQ7Cj4gKwl9 Cj4gKwo+ICtvdXQ6Cj4gKwlhdG9taWNfZGVjKCZhdXhfZGV2LT51c2Vjb3VudCk7Cj4gKwl3YWtl X3VwX2F0b21pY190KCZhdXhfZGV2LT51c2Vjb3VudCk7Cj4gKwlyZXR1cm4gcmVzOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGF1eGRldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVj dCBmaWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPSBm aWxlLT5wcml2YXRlX2RhdGE7Cj4gKwo+ICsJa3JlZl9wdXQoJmF1eF9kZXYtPnJlZmNvdW50LCBy ZWxlYXNlX2RybV9kcF9hdXhfZGV2KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdXhkZXZfZm9wcyA9IHsKPiArCS5vd25lcgkJ PSBUSElTX01PRFVMRSwKPiArCS5sbHNlZWsJCT0gYXV4ZGV2X2xsc2VlaywKPiArCS5yZWFkCQk9 IGF1eGRldl9yZWFkLAo+ICsJLndyaXRlCQk9IGF1eGRldl93cml0ZSwKPiArCS5vcGVuCQk9IGF1 eGRldl9vcGVuLAo+ICsJLnJlbGVhc2UJPSBhdXhkZXZfcmVsZWFzZSwKPiArfTsKPiArCj4gKyNk ZWZpbmUgdG9fYXV4ZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYs IGF1eCkKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmRybV9kcF9hdXhfZGV2 X2dldF9ieV9hdXgoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiArewo+ICsJc3RydWN0IGRybV9k cF9hdXhfZGV2ICppdGVyLCAqYXV4X2RldiA9IE5VTEw7Cj4gKwlpbnQgaWQ7Cj4gKwo+ICsJLyog ZG9uJ3QgaW5jcmVhc2Uga3JlZiBjb3VudCBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBzaG91 bGQgb25seSBiZQo+ICsJICogdXNlZCBieSBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZS4g VGh1cywgaXQgd2lsbCBhbHdheXMgaGF2ZSBhdAo+ICsJICogbGVhc3Qgb25lIHJlZmVyZW5jZSAt IHRoZSBvbmUgdGhhdCBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUKPiArCSAqIGNyZWF0ZWQK PiArCSAqLwo+ICsJbXV0ZXhfbG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gKwlpZHJfZm9yX2VhY2hf ZW50cnkoJmF1eF9pZHIsIGl0ZXIsIGlkKSB7Cj4gKwkJaWYgKGl0ZXItPmF1eCA9PSBhdXgpIHsK PiArCQkJYXV4X2RldiA9IGl0ZXI7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCW11dGV4 X3VubG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gKwlyZXR1cm4gYXV4X2RldjsKPiArfQo+ICsKPiAr c3RhdGljIGludCBhdXhkZXZfd2FpdF9hdG9taWNfdChhdG9taWNfdCAqcCkKPiArewo+ICsJc2No ZWR1bGUoKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKy8qKgo+ICsgKiBkcm1fZHBfYXV4X3VucmVn aXN0ZXJfZGV2bm9kZSgpIC0gdW5yZWdpc3RlciBhIGRldm5vZGUgZm9yIHRoaXMgYXV4IGNoYW5u ZWwKPiArICogQGF1eDogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiArICoKPiArICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAq Lwo+ICt2b2lkIGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4 ICphdXgpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiArCXVuc2ln bmVkIGludCBtaW5vcjsKPiArCj4gKwlhdXhfZGV2ID0gZHJtX2RwX2F1eF9kZXZfZ2V0X2J5X2F1 eChhdXgpOwo+ICsJaWYgKCFhdXhfZGV2KSAvKiBhdHRhY2ggbXVzdCBoYXZlIGZhaWxlZCAqLwo+ ICsJCXJldHVybjsKPiArCj4gKwltdXRleF9sb2NrKCZhdXhfaWRyX211dGV4KTsKPiArCWlkcl9y ZW1vdmUoJmF1eF9pZHIsIGF1eF9kZXYtPmluZGV4KTsKPiArCW11dGV4X3VubG9jaygmYXV4X2lk cl9tdXRleCk7Cj4gKwo+ICsJYXRvbWljX2RlYygmYXV4X2Rldi0+dXNlY291bnQpOwo+ICsJd2Fp dF9vbl9hdG9taWNfdCgmYXV4X2Rldi0+dXNlY291bnQsIGF1eGRldl93YWl0X2F0b21pY190LAo+ ICsJCQkgVEFTS19VTklOVEVSUlVQVElCTEUpOwo+ICsKPiArCW1pbm9yID0gYXV4X2Rldi0+aW5k ZXg7Cj4gKwlpZiAoYXV4X2Rldi0+ZGV2KQo+ICsJCWRldmljZV9kZXN0cm95KGRybV9kcF9hdXhf ZGV2X2NsYXNzLAo+ICsJCQkgICAgICAgTUtERVYoZHJtX2Rldl9tYWpvciwgbWlub3IpKTsKPiAr Cj4gKwlEUk1fREVCVUcoImRybV9kcF9hdXhfZGV2OiBhdXggWyVzXSB1bnJlZ2lzdGVyaW5nXG4i LCBhdXgtPm5hbWUpOwo+ICsJa3JlZl9wdXQoJmF1eF9kZXYtPnJlZmNvdW50LCByZWxlYXNlX2Ry bV9kcF9hdXhfZGV2KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfdW5yZWdpc3Rl cl9kZXZub2RlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUo KSAtIHJlZ2lzdGVyIGEgZGV2bm9kZSBmb3IgdGhpcyBhdXggY2hhbm5lbAo+ICsgKiBAYXV4OiBE aXNwbGF5UG9ydCBBVVggY2hhbm5lbAo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBv ciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiArICovCj4gK2ludCBkcm1fZHBf YXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiArewo+ICsJc3Ry dWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ICsJaW50IHJlczsKPiArCj4gKwlhdXhfZGV2 ID0gYWxsb2NfZHJtX2RwX2F1eF9kZXYoYXV4KTsKPiArCWlmIChJU19FUlIoYXV4X2RldikpCj4g KwkJcmV0dXJuIFBUUl9FUlIoYXV4X2Rldik7Cj4gKwo+ICsJYXV4X2Rldi0+ZGV2ID0gZGV2aWNl X2NyZWF0ZShkcm1fZHBfYXV4X2Rldl9jbGFzcywgYXV4LT5kZXYsCj4gKwkJCQkgICAgIE1LREVW KGRybV9kZXZfbWFqb3IsIGF1eF9kZXYtPmluZGV4KSwgTlVMTCwKPiArCQkJCSAgICAgImRybV9k cF9hdXglZCIsIGF1eF9kZXYtPmluZGV4KTsKPiArCWlmIChJU19FUlIoYXV4X2Rldi0+ZGV2KSkg ewo+ICsJCXJlcyA9IFBUUl9FUlIoYXV4X2Rldi0+ZGV2KTsKPiArCQlhdXhfZGV2LT5kZXYgPSBO VUxMOwo+ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHKCJkcm1fZHBfYXV4 X2RldjogYXV4IFslc10gcmVnaXN0ZXJlZCBhcyBtaW5vciAlZFxuIiwKPiArCQkgIGF1eC0+bmFt ZSwgYXV4X2Rldi0+aW5kZXgpOwo+ICsJcmV0dXJuIDA7Cj4gK2Vycm9yOgo+ICsJZHJtX2RwX2F1 eF91bnJlZ2lzdGVyX2Rldm5vZGUoYXV4KTsKPiArCXJldHVybiByZXM7Cj4gK30KPiArRVhQT1JU X1NZTUJPTChkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUpOwo+ICsKPiArc3RhdGljIGludCBf X2luaXQgZHJtX2RwX2F1eF9kZXZfaW5pdCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmVzOwo+ICsKPiAr CWRybV9kcF9hdXhfZGV2X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiZHJtX2Rw X2F1eF9kZXYiKTsKPiArCWlmIChJU19FUlIoZHJtX2RwX2F1eF9kZXZfY2xhc3MpKSB7Cj4gKwkJ cmVzID0gUFRSX0VSUihkcm1fZHBfYXV4X2Rldl9jbGFzcyk7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9 Cj4gKwlkcm1fZHBfYXV4X2Rldl9jbGFzcy0+ZGV2X2dyb3VwcyA9IGRybV9kcF9hdXhfZ3JvdXBz Owo+ICsKPiArCXJlcyA9IHJlZ2lzdGVyX2NocmRldigwLCAiYXV4IiwgJmF1eGRldl9mb3BzKTsK PiArCWlmIChyZXMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsJZHJtX2Rldl9tYWpvciA9IHJlczsK PiArCj4gKwlyZXR1cm4gMDsKPiArb3V0Ogo+ICsJY2xhc3NfZGVzdHJveShkcm1fZHBfYXV4X2Rl dl9jbGFzcyk7Cj4gKwlyZXR1cm4gcmVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQg ZHJtX2RwX2F1eF9kZXZfZXhpdCh2b2lkKQo+ICt7Cj4gKwl1bnJlZ2lzdGVyX2NocmRldihkcm1f ZGV2X21ham9yLCAiYXV4Iik7Cj4gKwljbGFzc19kZXN0cm95KGRybV9kcF9hdXhfZGV2X2NsYXNz KTsKPiArfQo+ICsKPiArTU9EVUxFX0FVVEhPUigiUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5h bnRvZ25vbGxpQGludGVsLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRFAgQVVY IC9kZXYgZW50cmllcyBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRp b25hbCByaWdodHMiKTsKPiArCj4gK21vZHVsZV9pbml0KGRybV9kcF9hdXhfZGV2X2luaXQpOwo+ ICttb2R1bGVfZXhpdChkcm1fZHBfYXV4X2Rldl9leGl0KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVy LmMKPiBpbmRleCA5NTM1YzViLi43ZDU4ZjU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZHBfaGVscGVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5j Cj4gQEAgLTI4LDYgKzI4LDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Cj4gICNpbmNs dWRlIDxsaW51eC9pMmMuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2RwX2F1eF9kZXYuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4g IAo+ICAvKioKPiBAQCAtNzU0LDYgKzc1NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2Fs Z29yaXRobSBkcm1fZHBfaTJjX2FsZ28gPSB7Cj4gICAqLwo+ICBpbnQgZHJtX2RwX2F1eF9yZWdp c3RlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ICB7Cj4gKwlpbnQgcmV0Owo+ICsKPiAgCW11 dGV4X2luaXQoJmF1eC0+aHdfbXV0ZXgpOwo+ICAKPiAgCWF1eC0+ZGRjLmFsZ28gPSAmZHJtX2Rw X2kyY19hbGdvOwo+IEBAIC03NjgsNyArNzcxLDE3IEBAIGludCBkcm1fZHBfYXV4X3JlZ2lzdGVy KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gIAlzdHJsY3B5KGF1eC0+ZGRjLm5hbWUsIGF1eC0+ bmFtZSA/IGF1eC0+bmFtZSA6IGRldl9uYW1lKGF1eC0+ZGV2KSwKPiAgCQlzaXplb2YoYXV4LT5k ZGMubmFtZSkpOwo+ICAKPiAtCXJldHVybiBpMmNfYWRkX2FkYXB0ZXIoJmF1eC0+ZGRjKTsKPiAr CXJldCA9IGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZShhdXgpOwo+ICsJaWYgKHJldCkKPiAr CQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IGkyY19hZGRfYWRhcHRlcigmYXV4LT5kZGMpOwo+ ICsJaWYgKHJldCkgewo+ICsJCWRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKGF1eCk7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAgfQo+ICBFWFBPUlRfU1lN Qk9MKGRybV9kcF9hdXhfcmVnaXN0ZXIpOwo+ICAKPiBAQCAtNzc4LDYgKzc5MSw3IEBAIEVYUE9S VF9TWU1CT0woZHJtX2RwX2F1eF9yZWdpc3Rlcik7Cj4gICAqLwo+ICB2b2lkIGRybV9kcF9hdXhf dW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ICB7Cj4gKwlkcm1fZHBfYXV4X3Vu cmVnaXN0ZXJfZGV2bm9kZShhdXgpOwo+ICAJaTJjX2RlbF9hZGFwdGVyKCZhdXgtPmRkYyk7Cj4g IH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3VucmVnaXN0ZXIpOwo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1fZHBfYXV4X2Rldi5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9k ZXYuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzkxYTJjZgo+IC0t LSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfYXV4X2Rldi5oCj4gQEAgLTAs MCArMSw1MCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlv bgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAg ICBSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50ZWwuY29tPgo+ICsgKgo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgRFJNX0RQX0FVWF9ERVYKPiArI2RlZmluZSBEUk1fRFBfQVVY X0RFVgo+ICsKPiArI2lmZGVmIENPTkZJR19EUk1fRFBfQVVYX0NIQVJERVYKPiArCj4gK2ludCBk cm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCk7Cj4gK3Zv aWQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCk7 Cj4gKwo+ICsjZWxzZQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgZHJtX2RwX2F1eF9yZWdpc3Rl cl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUo c3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKyNl bmRpZgo+ICsKPiArI2VuZGlmCj4gLS0gCj4gMi40LjMKPiAKPiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRl bCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK