From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v6 1/2] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Fri, 30 Oct 2015 23:24:09 +0200 Message-ID: <20151030212409.GH4437@intel.com> References: <1446161026-18708-1-git-send-email-rafael.antognolli@intel.com> <1446161026-18708-2-git-send-email-rafael.antognolli@intel.com> <20151030100417.GC4437@intel.com> <20151030205922.GA5932@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: <20151030205922.GA5932@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rafael Antognolli Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBPY3QgMzAsIDIwMTUgYXQgMDE6NTk6MjJQTSAtMDcwMCwgUmFmYWVsIEFudG9nbm9s bGkgd3JvdGU6Cj4gT24gRnJpLCBPY3QgMzAsIDIwMTUgYXQgMTI6MDQ6MTdQTSArMDIwMCwgVmls bGUgU3lyasOkbMOkIHdyb3RlOgo+ID4gT24gVGh1LCBPY3QgMjksIDIwMTUgYXQgMDQ6MjM6NDVQ TSAtMDcwMCwgUmFmYWVsIEFudG9nbm9sbGkgd3JvdGU6Cj4gPiA+IFRoaXMgbW9kdWxlIGlzIGhl YXZpbHkgYmFzZWQgb24gaTJjLWRldi4gT25jZSBsb2FkZWQsIGl0IHByb3ZpZGVzIG9uZQo+ID4g PiBkZXYgbm9kZSBwZXIgRFAgQVVYIGNoYW5uZWwsIG5hbWVkIGRybV9kcF9hdXhOLCB3aGVyZSBO IGlzIGFuIGludGVnZXIuCj4gPiA+IAo+ID4gPiBJdCdzIHBvc3NpYmxlIHRvIGtub3cgd2hpY2gg Y29ubmVjdG9yIG93bnMgdGhpcyBhdXggY2hhbm5lbCBieSBsb29raW5nCj4gPiA+IGF0IHRoZSBy ZXNwZWN0aXZlIHN5c2ZzIC9zeXMvY2xhc3MvZHJtX2F1eF9kZXYvZHJtX2RwX2F1eE4vY29ubmVj dG9yLCBpZgo+ID4gPiB0aGUgY29ubmVjdG9yIGRldmljZSBwb2ludGVyIHdhcyBjb3JyZWN0bHkg c2V0IGluIHRoZSBhdXggaGVscGVyIHN0cnVjdC4KPiA+ID4gCj4gPiA+IFR3byBtYWluIG9wZXJh dGlvbnMgYXJlIHByb3ZpZGVkIG9uIHRoZSByZWdpc3RlcnMgcmVhZCBhbmQgd3JpdGUuIFRoZQo+ ID4gPiBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSByZWFkIG9yIHdyaXR0ZW4gaXMgZ2l2 ZW4gdXNpbmcgbHNlZWsuIFRoZQo+ID4gPiBzZWVrIHBvc2l0aW9uIGlzIHVwZGF0ZWQgdXBvbiBy ZWFkIG9yIHdyaXRlLgo+ID4gCj4gPiBOb3RlIHRoYXQgd2UgKGk5MTUgZm9sa3MgYXQgbGVhc3Qp IGdlbmVyYWxseSBsaWtlIHRvIGhhdmUgdGhlIGNoYW5nZWxvZwo+ID4gaW4gdGhlIGNvbW1pdCBt ZXNzYWdlIGl0c2VsZi4gU28gbWF5YmUgbW92ZSBpdCBoZXJlIGZvciB0aGUgZmluYWwKPiA+IHZl cnNpb24uCj4gPiAKPiA+IEFueXdheXMsIHRoaXMgaXMgbG9va2luZyByYXRoZXIgbmljZSBub3cu IEkgc3BvdHRlZCBhIGZldyByZW1haW5pbmcgc3R5bGUKPiA+IGlzc3VlcywgYW5kIHNvbWUgZXJy b3IgaGFuZGxpbmcgcHJvYmxlbXMuIE9uY2UgdGhvc2UgYXJlIGRlYWx0IHdpdGgKPiA+IEkgdGhp bmsgd2Ugc2hvdWxkIGJlIGRvbmUuCj4gPiAKPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IFJh ZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwuYW50b2dub2xsaUBpbnRlbC5jb20+Cj4gPiA+IC0tLQo+ ID4gPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgfCAgIDggKwo+ID4gPiAgZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwo+ID4gPiAgZHJpdmVycy9ncHUv ZHJtL2RybV9kcF9hdXhfZGV2LmMgfCAzODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jICB8ICAgNSAr Cj4gPiA+ICBpbmNsdWRlL2RybS9kcm1fZHBfYXV4X2Rldi5oICAgICB8ICA1MCArKysrKwo+ID4g PiAgNSBmaWxlcyBjaGFuZ2VkLCA0NDUgaW5zZXJ0aW9ucygrKQo+ID4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4gPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaAo+ID4gPiAKPiA+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcK PiA+ID4gaW5kZXggYzRiZjlhMS4uZGFlZmNjZSAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL0tjb25maWcKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+ID4g QEAgLTI1LDYgKzI1LDE0IEBAIGNvbmZpZyBEUk1fTUlQSV9EU0kKPiA+ID4gIAlib29sCj4gPiA+ ICAJZGVwZW5kcyBvbiBEUk0KPiA+ID4gIAo+ID4gPiArY29uZmlnIERSTV9EUF9BVVhfQ0hBUkRF Vgo+ID4gPiArCWJvb2wgIkRSTSBEUCBBVVggSW50ZXJmYWNlIgo+ID4gPiArCWRlcGVuZHMgb24g RFJNCj4gPiA+ICsJaGVscAo+ID4gPiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBh IC9kZXYvZHJtX2RwX2F1eE4gbm9kZSB0aGF0IGFsbG93cyB0bwo+ID4gPiArCSAgcmVhZCBhbmQg d3JpdGUgdmFsdWVzIHRvIGFyYml0cmFyeSBEUENEIHJlZ2lzdGVycyBvbiB0aGUgRFAgYXV4Cj4g PiA+ICsJICBjaGFubmVsLgo+ID4gPiArCj4gPiA+ICBjb25maWcgRFJNX0tNU19IRUxQRVIKPiA+ ID4gIAl0cmlzdGF0ZQo+ID4gPiAgCWRlcGVuZHMgb24gRFJNCj4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ID4g aW5kZXggMWU5ZmY0Yy4uZTQ4ZWM4ZiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gPiBAQCAt MjgsNiArMjgsNyBAQCBkcm1fa21zX2hlbHBlci15IDo9IGRybV9jcnRjX2hlbHBlci5vIGRybV9k cF9oZWxwZXIubyBkcm1fcHJvYmVfaGVscGVyLm8gXAo+ID4gPiAgZHJtX2ttc19oZWxwZXItJChD T05GSUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9hZC5vCj4gPiA+ICBk cm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVs cGVyLm8KPiA+ID4gIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9LTVNfQ01BX0hFTFBFUikg Kz0gZHJtX2ZiX2NtYV9oZWxwZXIubwo+ID4gPiArZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJN X0RQX0FVWF9DSEFSREVWKSArPSBkcm1fZHBfYXV4X2Rldi5vCj4gPiA+ICAKPiA+ID4gIG9iai0k KENPTkZJR19EUk1fS01TX0hFTFBFUikgKz0gZHJtX2ttc19oZWxwZXIubwo+ID4gPiAgCj4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ IGluZGV4IDAwMDAwMDAuLjE2ZGJjMmUKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYwo+ID4gPiBAQCAtMCwwICsxLDM4MSBAQAo+ ID4gPiArLyoKPiA+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4g PiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCj4gPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK PiA+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ID4gKyAqCj4g PiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gPiA+ ICsgKiBTb2Z0d2FyZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4g PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ID4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gPiArICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUwo+ID4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gPiArICoKPiA+ ID4gKyAqIEF1dGhvcnM6Cj4gPiA+ICsgKiAgICBSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFu dG9nbm9sbGlAaW50ZWwuY29tPgo+ID4gPiArICoKPiA+ID4gKyAqLwo+ID4gPiArCj4gPiA+ICsj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvZnMuaD4KPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5o Pgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPiA+ID4gKyNpbmNs dWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5o Pgo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBkcm1f ZHBfYXV4X2RldiB7Cj4gPiA+ICsJdW5zaWduZWQgaW5kZXg7Cj4gPiA+ICsJc3RydWN0IGRybV9k cF9hdXggKmF1eDsKPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiA+ICsJc3RydWN0IGty ZWYgcmVmY291bnQ7Cj4gPiA+ICsJYXRvbWljX3QgdXNlY291bnQ7Cj4gPiA+ICt9Owo+ID4gPiAr Cj4gPiA+ICsjZGVmaW5lIERSTV9BVVhfTUlOT1JTCTI1Ngo+ID4gPiArI2RlZmluZSBBVVhfTUFY X09GRlNFVAkoMSA8PCAyMCkKPiA+ID4gK3N0YXRpYyBERUZJTkVfSURSKGF1eF9pZHIpOwo+ID4g PiArc3RhdGljIERFRklORV9NVVRFWChhdXhfaWRyX211dGV4KTsKPiA+ID4gK3N0YXRpYyBzdHJ1 Y3QgY2xhc3MgKmRybV9kcF9hdXhfZGV2X2NsYXNzOwo+ID4gPiArc3RhdGljIGludCBkcm1fZGV2 X21ham9yID0gLTE7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYg KmRybV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcih1bnNpZ25lZCBpbmRleCkKPiA+ID4gK3sKPiA+ ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPSBOVUxMOwo+ID4gPiArCj4gPiA+ ICsJbXV0ZXhfbG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gPiA+ICsJYXV4X2RldiA9IGlkcl9maW5k KCZhdXhfaWRyLCBpbmRleCk7Cj4gPiA+ICsJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmYXV4 X2Rldi0+cmVmY291bnQpKQo+ID4gPiArCQlhdXhfZGV2ID0gTlVMTDsKPiA+ID4gKwltdXRleF91 bmxvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIGF1eF9kZXY7Cj4g PiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmFsbG9j X2RybV9kcF9hdXhfZGV2KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gPiA+ICt7Cj4gPiA+ICsJ c3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ID4gPiArCWludCBpbmRleDsKPiA+ID4g Kwo+ID4gPiArCj4gPiAKPiA+IHNwdXJpb3VzIG5ld2xpbmUKPiA+IAo+ID4gPiArCWF1eF9kZXYg PSBremFsbG9jKHNpemVvZigqYXV4X2RldiksIEdGUF9LRVJORUwpOwo+ID4gPiArCWlmICghYXV4 X2RldikKPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiA+ICsJYXV4X2Rldi0+ YXV4ID0gYXV4Owo+ID4gPiArCWF0b21pY19zZXQoJmF1eF9kZXYtPnVzZWNvdW50LCAxKTsKPiA+ ID4gKwlrcmVmX2luaXQoJmF1eF9kZXYtPnJlZmNvdW50KTsKPiA+ID4gKwo+ID4gPiArCW11dGV4 X2xvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gPiArCWluZGV4ID0gaWRyX2FsbG9jX2N5Y2xpYygm YXV4X2lkciwgYXV4X2RldiwgMCwgRFJNX0FVWF9NSU5PUlMsCj4gPiA+ICsJCQkJIEdGUF9LRVJO RUwpOwo+ID4gPiArCW11dGV4X3VubG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gPiA+ICsJaWYgKGlu ZGV4IDwgMCkgewo+ID4gPiArCQlrZnJlZShhdXhfZGV2KTsKPiA+ID4gKwkJcmV0dXJuIEVSUl9Q VFIoaW5kZXgpOwo+ID4gPiArCX0KPiA+ID4gKwlhdXhfZGV2LT5pbmRleCA9IGluZGV4Owo+ID4g PiArCj4gPiA+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRp YyB2b2lkIHJlbGVhc2VfZHJtX2RwX2F1eF9kZXYoc3RydWN0IGtyZWYgKnJlZikKPiA+ID4gK3sK PiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPQo+ID4gPiArCQljb250YWlu ZXJfb2YocmVmLCBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYsIHJlZmNvdW50KTsKPiA+ID4gKwo+ID4g PiArCWtmcmVlKGF1eF9kZXYpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3NpemVf dCBuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArCQkJIHN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gPiA+ICt7Cj4gPiA+ICsJc3NpemVfdCByZXM7 Cj4gPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0KPiA+ID4gKwkJZHJtX2Rw X2F1eF9kZXZfZ2V0X2J5X21pbm9yKE1JTk9SKGRldi0+ZGV2dCkpOwo+ID4gPiArCj4gPiA+ICsJ aWYgKCFhdXhfZGV2KQo+ID4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ID4gKwo+ID4gPiArCXJl cyA9IHNwcmludGYoYnVmLCAiJXNcbiIsIGF1eF9kZXYtPmF1eC0+bmFtZSk7Cj4gPiA+ICsJa3Jl Zl9wdXQoJmF1eF9kZXYtPnJlZmNvdW50LCByZWxlYXNlX2RybV9kcF9hdXhfZGV2KTsKPiA+ID4g Kwo+ID4gPiArCXJldHVybiByZXM7Cj4gPiA+ICt9Cj4gPiA+ICtzdGF0aWMgREVWSUNFX0FUVFJf Uk8obmFtZSk7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkcm1fZHBf YXV4X2F0dHJzW10gPSB7Cj4gPiA+ICsJJmRldl9hdHRyX25hbWUuYXR0ciwKPiA+ID4gKwlOVUxM LAo+ID4gPiArfTsKPiA+ID4gK0FUVFJJQlVURV9HUk9VUFMoZHJtX2RwX2F1eCk7Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyBpbnQgYXV4ZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0 IGZpbGUgKmZpbGUpCj4gPiA+ICt7Cj4gPiA+ICsJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9y KGlub2RlKTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiA+ICsK PiA+ID4gKwlhdXhfZGV2ID0gZHJtX2RwX2F1eF9kZXZfZ2V0X2J5X21pbm9yKG1pbm9yKTsKPiA+ ID4gKwlpZiAoIWF1eF9kZXYpCj4gPiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4gPiArCj4gPiA+ ICsJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYXV4X2RldjsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4g K30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGxvZmZfdCBhdXhkZXZfbGxzZWVrKHN0cnVjdCBmaWxl ICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQo+ID4gPiArewo+ID4gPiArCXJldHVy biBmaXhlZF9zaXplX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdoZW5jZSwgQVVYX01BWF9PRkZTRVQp Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3NpemVfdCBhdXhkZXZfcmVhZChzdHJ1 Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAo+ID4gPiArCQkJ ICAgbG9mZl90ICpvZmZzZXQpCj4gPiA+ICt7Cj4gPiA+ICsJc2l6ZV90IGJ5dGVzX3BlbmRpbmcs IG51bV9ieXRlc19wcm9jZXNzZWQgPSAwOwo+ID4gPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAq YXV4X2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiA+ID4gKwlzc2l6ZV90IHJlcyA9IDA7Cj4g PiA+ICsKPiA+ID4gKwlpZiAoY291bnQgPCAwKQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ IAo+ID4gc2l6ZV90IGlzIHVuc2lnbmVkLCBzbyB0aGlzIGNhbid0IGhhcHBlbi4KPiA+IAo+ID4g PiArCj4gPiA+ICsJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZhdXhfZGV2LT51c2Vjb3VudCkp Cj4gPiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4gPiArCj4gPiA+ICsJYnl0ZXNfcGVuZGluZyA9 IG1pbigobG9mZl90KWNvdW50LCBBVVhfTUFYX09GRlNFVCAtICgqb2Zmc2V0KSk7Cj4gPiA+ICsK PiA+ID4gKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgYnl0ZXNfcGVuZGluZykp IHsKPiA+ID4gKwkJcmVzID0gLUVGQVVMVDsKPiA+ID4gKwkJZ290byBvdXQ7Cj4gPiA+ICsJfQo+ ID4gPiArCj4gPiA+ICsJd2hpbGUgKGJ5dGVzX3BlbmRpbmcgPiAwKSB7Cj4gPiA+ICsJCXVpbnQ4 X3QgbG9jYWxidWZbRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTXTsKPiA+ID4gKwkJc3NpemVfdCB0 b2RvID0gbWluX3Qoc2l6ZV90LCBieXRlc19wZW5kaW5nLCBzaXplb2YobG9jYWxidWYpKTsKPiA+ ID4gKwo+ID4gPiArCQlyZXMgPSBkcm1fZHBfZHBjZF9yZWFkKGF1eF9kZXYtPmF1eCwgKm9mZnNl dCwgbG9jYWxidWYsIHRvZG8pOwo+ID4gPiArCQlpZiAocmVzIDw9IDApIHsKPiA+ID4gKwkJCXJl cyA9IG51bV9ieXRlc19wcm9jZXNzZWQgPyBudW1fYnl0ZXNfcHJvY2Vzc2VkIDogcmVzOwo+ID4g PiArCQkJZ290byBvdXQ7Cj4gPiA+ICsJCX0KPiA+ID4gKwkJaWYgKF9fY29weV90b191c2VyKGJ1 ZiArIG51bV9ieXRlc19wcm9jZXNzZWQsIGxvY2FsYnVmLCByZXMpKSB7Cj4gPiA+ICsJCQlyZXMg PSBudW1fYnl0ZXNfcHJvY2Vzc2VkID8KPiA+ID4gKwkJCQludW1fYnl0ZXNfcHJvY2Vzc2VkIDog LUVGQVVMVDsKPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiArCQl9Cj4gPiA+ICsJCWJ5dGVzX3Bl bmRpbmcgLT0gcmVzOwo+ID4gPiArCQkqb2Zmc2V0ICs9IHJlczsKPiA+ID4gKwkJbnVtX2J5dGVz X3Byb2Nlc3NlZCArPSByZXM7Cj4gPiA+ICsJCXJlcyA9IG51bV9ieXRlc19wcm9jZXNzZWQ7Cj4g PiA+ICsJfQo+ID4gPiArCj4gPiA+ICtvdXQ6Cj4gPiA+ICsJYXRvbWljX2RlYygmYXV4X2Rldi0+ dXNlY291bnQpOwo+ID4gPiArCXdha2VfdXBfYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50KTsK PiA+IAo+ID4gSW50ZXJlc3RpbmcuIEZpcnN0IHRpbWUgSSd2ZSBzZWVuIHRoaXMgc3R1ZmYuCj4g PiAKPiA+ID4gKwlyZXR1cm4gcmVzOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgc3Np emVfdCBhdXhkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpi dWYsCj4gPiA+ICsJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKPiA+ID4gK3sK PiA+ID4gKwlzaXplX3QgYnl0ZXNfcGVuZGluZywgbnVtX2J5dGVzX3Byb2Nlc3NlZCA9IDA7Cj4g PiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRh Owo+ID4gPiArCXNzaXplX3QgcmVzID0gMDsKPiA+ID4gKwo+ID4gPiArCWlmIChjb3VudCA8IDAp Cj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gCj4gPiBBbm90aGVyICJzaXplX3QgaXMgdW5z aWduZWQiIGNhc2UuCj4gPiAKPiA+ID4gKwo+ID4gPiArCWlmICghYXRvbWljX2luY19ub3RfemVy bygmYXV4X2Rldi0+dXNlY291bnQpKQo+ID4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ID4gKwo+ ID4gPiArCWJ5dGVzX3BlbmRpbmcgPSBtaW4oKGxvZmZfdCljb3VudCwgQVVYX01BWF9PRkZTRVQg LSAqb2Zmc2V0KTsKPiA+ID4gKwo+ID4gPiArCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBi dWYsIGJ5dGVzX3BlbmRpbmcpKSB7Cj4gPiA+ICsJCXJlcyA9IC1FRkFVTFQ7Cj4gPiA+ICsJCWdv dG8gb3V0Owo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXdoaWxlIChieXRlc19wZW5kaW5nID4g MCkgewo+ID4gPiArCQl1aW50OF90IGxvY2FsYnVmW0RQX0FVWF9NQVhfUEFZTE9BRF9CWVRFU107 Cj4gPiA+ICsJCXNzaXplX3QgdG9kbyA9IG1pbl90KHNpemVfdCwgYnl0ZXNfcGVuZGluZywgc2l6 ZW9mKGxvY2FsYnVmKSk7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKF9fY29weV9mcm9tX3VzZXIobG9j YWxidWYsCj4gPiA+ICsJCQkJICAgICBidWYgKyBudW1fYnl0ZXNfcHJvY2Vzc2VkLCB0b2RvKSkg ewo+ID4gPiArCQkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZCA/Cj4gPiA+ICsJCQkJbnVtX2J5 dGVzX3Byb2Nlc3NlZCA6IC1FRkFVTFQ7Cj4gPiA+ICsJCQlnb3RvIG91dDsKPiA+ID4gKwkJfQo+ ID4gPiArCj4gPiA+ICsJCXJlcyA9IGRybV9kcF9kcGNkX3dyaXRlKGF1eF9kZXYtPmF1eCwgKm9m ZnNldCwgbG9jYWxidWYsIHRvZG8pOwo+ID4gPiArCQlpZiAocmVzIDw9IDApIHsKPiA+ID4gKwkJ CXJlcyA9IG51bV9ieXRlc19wcm9jZXNzZWQgPyBudW1fYnl0ZXNfcHJvY2Vzc2VkIDogcmVzOwo+ ID4gPiArCQkJZ290byBvdXQ7Cj4gPiA+ICsJCX0KPiA+ID4gKwkJYnl0ZXNfcGVuZGluZyAtPSBy ZXM7Cj4gPiA+ICsJCSpvZmZzZXQgKz0gcmVzOwo+ID4gPiArCQludW1fYnl0ZXNfcHJvY2Vzc2Vk ICs9IHJlczsKPiA+ID4gKwkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZDsKPiA+ID4gKwl9Cj4g PiA+ICsKPiA+ID4gK291dDoKPiA+ID4gKwlhdG9taWNfZGVjKCZhdXhfZGV2LT51c2Vjb3VudCk7 Cj4gPiA+ICsJd2FrZV91cF9hdG9taWNfdCgmYXV4X2Rldi0+dXNlY291bnQpOwo+ID4gPiArCXJl dHVybiByZXM7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgYXV4ZGV2X3JlbGVh c2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4gPiA+ICt7Cj4gPiA+ ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ ID4gPiArCj4gPiA+ICsJa3JlZl9wdXQoJmF1eF9kZXYtPnJlZmNvdW50LCByZWxlYXNlX2RybV9k cF9hdXhfZGV2KTsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXV4ZGV2X2ZvcHMgPSB7Cj4gPiA+ICsJ Lm93bmVyCQk9IFRISVNfTU9EVUxFLAo+ID4gPiArCS5sbHNlZWsJCT0gYXV4ZGV2X2xsc2VlaywK PiA+ID4gKwkucmVhZAkJPSBhdXhkZXZfcmVhZCwKPiA+ID4gKwkud3JpdGUJCT0gYXV4ZGV2X3dy aXRlLAo+ID4gPiArCS5vcGVuCQk9IGF1eGRldl9vcGVuLAo+ID4gPiArCS5yZWxlYXNlCT0gYXV4 ZGV2X3JlbGVhc2UsCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIHRvX2F1eGRldihk KSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRybV9kcF9hdXhfZGV2LCBhdXgpCj4gPiA+ICsKPiA+ ID4gKy8qKgo+ID4gPiArICogZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlKCkgLSByZWdpc3Rl ciBhIGRldm5vZGUgZm9yIHRoaXMgYXV4IGNoYW5uZWwKPiA+ID4gKyAqIEBhdXg6IERpc3BsYXlQ b3J0IEFVWCBjaGFubmVsCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mg b3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+ICsgKi8KPiA+ID4gK2lu dCBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiA+ICsJaW50 IHJlczsKPiA+ID4gKwo+ID4gPiArCWF1eF9kZXYgPSBhbGxvY19kcm1fZHBfYXV4X2RldihhdXgp Owo+ID4gPiArCWlmIChJU19FUlIoYXV4X2RldikpCj4gPiA+ICsJCXJldHVybiBQVFJfRVJSKGF1 eF9kZXYpOwo+ID4gPiArCj4gPiA+ICsJYXV4X2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShkcm1f ZHBfYXV4X2Rldl9jbGFzcywgYXV4LT5kZXYsCj4gPiA+ICsJCQkJICAgICBNS0RFVihkcm1fZGV2 X21ham9yLCBhdXhfZGV2LT5pbmRleCksIE5VTEwsCj4gPiA+ICsJCQkJICAgICAiZHJtX2RwX2F1 eCVkIiwgYXV4X2Rldi0+aW5kZXgpOwo+ID4gPiArCWlmIChJU19FUlIoYXV4X2Rldi0+ZGV2KSkg ewo+ID4gPiArCQlyZXMgPSBQVFJfRVJSKGF1eF9kZXYtPmRldik7Cj4gPiA+ICsJCWdvdG8gZXJy b3I7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcHJfZGVidWcoImRybV9kcF9hdXhfZGV2OiBh dXggWyVzXSByZWdpc3RlcmVkIGFzIG1pbm9yICVkXG4iLAo+ID4gPiArCQkgYXV4LT5uYW1lLCBh dXhfZGV2LT5pbmRleCk7Cj4gPiAKPiA+IFlvdSBzaG91bGQgdXNlIERSTV9ERUJVRyBhbmQgRFJN X0VSUk9SIGFsbCBhcm91bmQgdG8gY29uZm9ybSB0byBzdGFuZGFyZAo+ID4gZHJtIHN1YnN5c3Rl bSBzdHlsZS4KPiA+IAo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArZXJyb3I6Cj4gPiA+ICsJZGV2 aWNlX2Rlc3Ryb3koZHJtX2RwX2F1eF9kZXZfY2xhc3MsCj4gPiA+ICsJCSAgICAgICBNS0RFVihk cm1fZGV2X21ham9yLCBhdXhfZGV2LT5pbmRleCkpOwo+ID4gPiArCWtmcmVlKGF1eF9kZXYpOwo+ ID4gCj4gPiBJdCB3YXMgYWxyZWFkeSBhZGRlZCB0byB0aGUgaWRyLCBzbyB0aGlzIG5lZWRzIHNv bWV0aGluZyBhIGJpdCBtb3JlLgo+ID4gQWxzbyBpbiB0aGVvcnkgc29tZW9uZSBtaWdodCBoYXZl IGFscmVhZHkgb3BlbmVkIHRoZSBkZXZpY2UgYnkgbm93Lgo+ID4gCj4gPiBJIGd1ZXNzIHlvdSBj b3VsZCBqdXN0IGRvIGEgbm9ybWFsIHVucmVnaXN0ZXIgaGVyZT8gSSBhc3N1bWUgY2FsbGluZwo+ ID4gZGV2aWNlX2Rlc3Ryb3koKSBldmVuIHRob3VnaCBkZXZpY2VfY3JlYXRlKCkgZmFpbGVkIHNo b3VsZCBiZSBPSyBzaW5jZQo+ID4geW91J3JlIGFscmVhZHkgZG9pbmcgaXQsIHNvIGhhdmluZyB0 aGUgdW5yZWdpc3RlciBjb2RlIGRvIGl0IGluc3RlYWQKPiA+IHNob3VsZCBiZSBlcXVhbGx5IGZp bmUuCj4gCj4gSSBhbSBub3Qgc3VyZSBub3cgd2h5IHRoaXMgZGV2aWNlX2Rlc3Ryb3koKSBpcyBo ZXJlLCBzaW5jZSBpZgo+IGRldmljZV9jcmVhdGUgZmFpbGVkLCB0aGVyZSBzaG91bGQgYmUgbm8g bmVlZCB0byBkZXN0cm95IGl0LiBNYXliZSB0aGlzCj4gd2FzIGxlZnQgZnJvbSBwcmV2aW91cyB2 ZXJzaW9ucyBhbmQgSSBmb3Jnb3QgdG8gcmVtb3ZlIGl0IHRvbyBkdXJpbmcKPiB0aG9zZSBjaGFu Z2VzLgo+IAo+IFNob3VsZG4ndCBJIGp1c3QgcmVtb3ZlIHRoaXMgcGFydCwgYW5kIGFkZCB0aGUg Y29kZSB0byByZW1vdmUgZnJvbSB0aGUKPiBpZHI/CgpCdXQgd2hhdCBpZiBzb21lb25lIGFscmVh ZHkgb3BlbmVkIHRoZSBkZXZpY2U/IEkgdGhpbmsganVzdCBkb2luZyB0aGUKbm9ybWFsIHVucmVn aXN0ZXIgd291bGQgYmUgT0ssIGFzc3VtaW5nIGRldmljZV9kZXN0cm95KCkgY2FuIGJlIGNhbGxl ZApzYWZlbHkgd2l0aG91dCBhIHN1Y2Nlc2Z1bCBkZXZpY2VfY3JlYXRlKCkuIE9yIGlmIGl0IGNh bid0LCB0aGVuIEkgZ3Vlc3MKeW91IGNvdWxkIGp1c3QgZG8gc29tZXRoaW5nIGxpa2UgCidpZiAo IWF1eF9kZXYtPmRldikgZGV2aWNlX2Rlc3Ryb3koLi4uKScKaW4gdGhlIHVucmVnaXN0ZXIgcGF0 aCwgYW5kIG5vdCBzZXQgYXV4X2Rldi0+ZGV2IHVudGlsIHlvdSdyZSBzdXJlIAp0aGUgZGV2aWNl X2NyZWF0ZSgpIHN1Y2NlZWRlZCAob3IgY2xlYXIgdG8gTlVMTCBhZnRlciB0aGUgZmFpbHVyZSku Cgo+IAo+ID4gT2ggYW5kIEkgZ3Vlc3Mgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gc3RvcmUgdGhl IHN0cnVjdCBkZXZpY2UgcG9pbnRlcgo+ID4gdW5kZXIgYXV4X2RldiBzaW5jZSBpdCdzIG5vdCB1 c2VkIGJ5IGFueW9uZSwgbm90IGV2ZW4gYnkgZGV2aWNlX2Rlc3Ryb3koKS4KPiA+IAo+ID4gPiAr CXJldHVybiByZXM7Cj4gPiA+ICt9Cj4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfcmVn aXN0ZXJfZGV2bm9kZSk7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX2F1eF9k ZXYgKmRybV9kcF9hdXhfZGV2X2dldF9ieV9hdXgoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKml0ZXIsICphdXhfZGV2ID0gTlVM TDsKPiA+ID4gKwlpbnQgaWQ7Cj4gPiA+ICsKPiA+ID4gKwkvKiBkb24ndCBpbmNyZWFzZSBrcmVm IGNvdW50IGhlcmUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlCj4gPiA+ICsJ ICogdXNlZCBieSBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZS4gVGh1cywgaXQgd2lsbCBh bHdheXMgaGF2ZSBhdAo+ID4gPiArCSAqIGxlYXN0IG9uZSByZWZlcmVuY2UgLSB0aGUgb25lIHRo YXQgZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlCj4gPiA+ICsJICogY3JlYXRlZAo+ID4gPiAr CSAqLwo+ID4gPiArCW11dGV4X2xvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gPiArCWlkcl9mb3Jf ZWFjaF9lbnRyeSgmYXV4X2lkciwgaXRlciwgaWQpIHsKPiA+ID4gKwkJaWYgKGl0ZXItPmF1eCA9 PSBhdXgpIHsKPiA+ID4gKwkJCWF1eF9kZXYgPSBpdGVyOwo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZhdXhfaWRyX211dGV4KTsKPiA+ ID4gKwlyZXR1cm4gYXV4X2RldjsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCBh dXhkZXZfd2FpdF9hdG9taWNfdChhdG9taWNfdCAqcCkKPiA+ID4gK3sKPiA+ID4gKwlzY2hlZHVs ZSgpOwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArLyoqCj4gPiA+ICsgKiBkcm1f ZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZSgpIC0gdW5yZWdpc3RlciBhIGRldm5vZGUgZm9yIHRo aXMgYXV4IGNoYW5uZWwKPiA+ID4gKyAqIEBhdXg6IERpc3BsYXlQb3J0IEFVWCBjaGFubmVsCj4g PiA+ICsgKgo+ID4gPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJv ciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+ICsgKi8KPiA+ID4gK2ludCBkcm1fZHBfYXV4X3VucmVn aXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ID4gPiArewo+ID4gPiArCXN0 cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgbWlub3I7 Cj4gPiA+ICsKPiA+ID4gKwlhdXhfZGV2ID0gZHJtX2RwX2F1eF9kZXZfZ2V0X2J5X2F1eChhdXgp Owo+ID4gPiArCWlmICghYXV4X2RldikgLyogYXR0YWNoIG11c3QgaGF2ZSBmYWlsZWQgKi8KPiA+ ID4gKwkJcmV0dXJuIDA7Cj4gPiAKPiA+IFNob3VsZCB3ZSBtYXliZSByZXR1cm4gYW4gZXJyb3I/ IE9yIG1heWJlIGp1c3QgbWFrZSB0aGUgZnVuY3Rpb24gdm9pZAo+ID4gc2luY2Ugbm8gb25lIGlz IGxpa2VseSB0byBiZSBpbnRlcmVzdGVkIGluIHRoZSByZXR1cm4gdmFsdWU/Cj4gPiAKPiA+ID4g Kwo+ID4gPiArCW11dGV4X2xvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gPiArCWlkcl9yZW1vdmUo JmF1eF9pZHIsIGF1eF9kZXYtPmluZGV4KTsKPiA+ID4gKwltdXRleF91bmxvY2soJmF1eF9pZHJf bXV0ZXgpOwo+ID4gPiArCj4gPiA+ICsJYXRvbWljX2RlYygmYXV4X2Rldi0+dXNlY291bnQpOwo+ ID4gPiArCXdhaXRfb25fYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50LCBhdXhkZXZfd2FpdF9h dG9taWNfdCwKPiA+ID4gKwkJCSBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cj4gPiA+ICsKPiA+ID4g KwltaW5vciA9IGF1eF9kZXYtPmluZGV4Owo+ID4gPiArCWRldmljZV9kZXN0cm95KGRybV9kcF9h dXhfZGV2X2NsYXNzLCBNS0RFVihkcm1fZGV2X21ham9yLCBtaW5vcikpOwo+ID4gPiArCj4gPiA+ ICsJa3JlZl9wdXQoJmF1eF9kZXYtPnJlZmNvdW50LCByZWxlYXNlX2RybV9kcF9hdXhfZGV2KTsK PiA+ID4gKwlwcl9kZWJ1ZygiZHJtX2RwX2F1eF9kZXY6IGF1eCBbJXNdIHVucmVnaXN0ZXJlZFxu IiwgYXV4LT5uYW1lKTsKPiA+IAo+ID4gQ2FuJ3QgZGVyZWZlcmVuY2UgaXQgc2FmZWx5IGFmdGVy IHRoZSBrcmVmX3B1dCgpLgo+ID4gCj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30K PiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUpOwo+ID4g PiArCj4gPiA+ICtzdGF0aWMgaW50IF9faW5pdCBkcm1fZHBfYXV4X2Rldl9pbml0KHZvaWQpCj4g PiA+ICt7Cj4gPiA+ICsJaW50IHJlczsKPiA+ID4gKwo+ID4gPiArCWRybV9kcF9hdXhfZGV2X2Ns YXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiZHJtX2RwX2F1eF9kZXYiKTsKPiA+ID4g KwlpZiAoSVNfRVJSKGRybV9kcF9hdXhfZGV2X2NsYXNzKSkgewo+ID4gPiArCQlyZXMgPSBQVFJf RVJSKGRybV9kcF9hdXhfZGV2X2NsYXNzKTsKPiA+ID4gKwkJZ290byBvdXQ7Cj4gPiA+ICsJfQo+ ID4gPiArCWRybV9kcF9hdXhfZGV2X2NsYXNzLT5kZXZfZ3JvdXBzID0gZHJtX2RwX2F1eF9ncm91 cHM7Cj4gPiA+ICsKPiA+ID4gKwlyZXMgPSByZWdpc3Rlcl9jaHJkZXYoMCwgImF1eCIsICZhdXhk ZXZfZm9wcyk7Cj4gPiA+ICsJaWYgKHJlcyA8IDApCj4gPiA+ICsJCWdvdG8gb3V0Owo+ID4gCj4g PiBTaG91bGQgY2xhc3NfZGVzdHJveSgpIGluIHRoaXMgZXJyb3IgcGF0aC4KPiA+IAo+ID4gPiAr CWRybV9kZXZfbWFqb3IgPSByZXM7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK291 dDoKPiA+ID4gKwlkcm1fZXJyKCIlczogRHJpdmVyIEluaXRpYWxpc2F0aW9uIGZhaWxlZFxuIiwg X19GSUxFX18pOwo+ID4gPiArCXJldHVybiByZXM7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0 YXRpYyB2b2lkIF9fZXhpdCBkcm1fZHBfYXV4X2Rldl9leGl0KHZvaWQpCj4gPiA+ICt7Cj4gPiA+ ICsJY2xhc3NfZGVzdHJveShkcm1fZHBfYXV4X2Rldl9jbGFzcyk7Cj4gPiA+ICsJdW5yZWdpc3Rl cl9jaHJkZXYoZHJtX2Rldl9tYWpvciwgImF1eCIpOwo+ID4gCj4gPiBTd2FwIHRoZXNlIGFyb3Vu ZCB0byBiZSB0aGUgb3Bwb3NpdGUgb2YgaW5pdD8KPiA+IAo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtNT0RVTEVfQVVUSE9SKCJSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50 ZWwuY29tPiIpOwo+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRFAgQVVYIC9kZXYgZW50 cmllcyBkcml2ZXIiKTsKPiA+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwg cmlnaHRzIik7Cj4gPiA+ICsKPiA+ID4gK21vZHVsZV9pbml0KGRybV9kcF9hdXhfZGV2X2luaXQp Owo+ID4gPiArbW9kdWxlX2V4aXQoZHJtX2RwX2F1eF9kZXZfZXhpdCk7Cj4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9kcF9oZWxwZXIuYwo+ID4gPiBpbmRleCA5NTM1YzViLi5kMjU2NWNjIDEwMDY0NAo+ID4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jCj4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiA+ID4gQEAgLTI4LDYgKzI4LDcgQEAKPiA+ID4gICNp bmNsdWRlIDxsaW51eC9zY2hlZC5oPgo+ID4gPiAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ID4g PiAgI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9kcF9hdXhfZGV2Lmg+Cj4gPiA+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ID4gIAo+ID4g PiAgLyoqCj4gPiA+IEBAIC03NjgsNiArNzY5LDkgQEAgaW50IGRybV9kcF9hdXhfcmVnaXN0ZXIo c3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ID4gIAlzdHJsY3B5KGF1eC0+ZGRjLm5hbWUsIGF1 eC0+bmFtZSA/IGF1eC0+bmFtZSA6IGRldl9uYW1lKGF1eC0+ZGV2KSwKPiA+ID4gIAkJc2l6ZW9m KGF1eC0+ZGRjLm5hbWUpKTsKPiA+ID4gIAo+ID4gPiArCWlmIChkcm1fZHBfYXV4X3JlZ2lzdGVy X2Rldm5vZGUoYXV4KSkKPiA+ID4gKwkJZHJtX2VycigiJXM6IENvdWxkIG5vdCByZWdpc3RlciBk cm1fZHBfYXV4X2Rldi5cbiIsIF9fRklMRV9fKTsKPiA+ID4gKwo+ID4gPiAgCXJldHVybiBpMmNf YWRkX2FkYXB0ZXIoJmF1eC0+ZGRjKTsKPiA+ID4gIH0KPiA+ID4gIEVYUE9SVF9TWU1CT0woZHJt X2RwX2F1eF9yZWdpc3Rlcik7Cj4gPiA+IEBAIC03NzgsNiArNzgyLDcgQEAgRVhQT1JUX1NZTUJP TChkcm1fZHBfYXV4X3JlZ2lzdGVyKTsKPiA+ID4gICAqLwo+ID4gPiAgdm9pZCBkcm1fZHBfYXV4 X3VucmVnaXN0ZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ID4gIHsKPiA+ID4gKwlkcm1f ZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZShhdXgpOwo+ID4gPiAgCWkyY19kZWxfYWRhcHRlcigm YXV4LT5kZGMpOwo+ID4gPiAgfQo+ID4gPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3VucmVn aXN0ZXIpOwo+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaCBi L2luY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmgKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiA+ID4gaW5kZXggMDAwMDAwMC4uMzU0MDlhMgo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsr KyBiL2luY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmgKPiA+ID4gQEAgLTAsMCArMSw1MCBAQAo+ ID4gPiArLyoKPiA+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4g PiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCj4gPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK PiA+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ID4gKyAqCj4g PiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gPiA+ ICsgKiBTb2Z0d2FyZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4g PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ID4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gPiArICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUwo+ID4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gPiArICoKPiA+ ID4gKyAqIEF1dGhvcnM6Cj4gPiA+ICsgKiAgICBSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFu dG9nbm9sbGlAaW50ZWwuY29tPgo+ID4gPiArICoKPiA+ID4gKyAqLwo+ID4gPiArCj4gPiA+ICsj aWZuZGVmIERSTV9EUF9BVVhfREVWCj4gPiA+ICsjZGVmaW5lIERSTV9EUF9BVVhfREVWCj4gPiA+ ICsKPiA+ID4gKyNpZmRlZiBDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVWCj4gPiA+ICsKPiA+ID4g K2ludCBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCk7 Cj4gPiA+ICtpbnQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9h dXggKmF1eCk7Cj4gPiA+ICsKPiA+ID4gKyNlbHNlCj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbmxp bmUgaW50IGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4 KQo+ID4gPiArewo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0 aWMgaW5saW5lIGludCBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2Rw X2F1eCAqYXV4KQo+ID4gPiArewo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICsjZW5kaWYKPiA+ID4gKwo+ID4gPiArI2VuZGlmCj4gPiA+IC0tIAo+ID4gPiAyLjQuMwo+ ID4gPiAKPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPiA+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gPiBkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCj4gPiA+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwKPiA+IAo+ID4gLS0gCj4gPiBWaWxsZSBTeXJqw6Rsw6QKPiA+IElu dGVsIE9UQwoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK