From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 2/4] drm: Add support for ARM's HDLCD controller. Date: Wed, 2 Dec 2015 16:33:31 +0100 Message-ID: <20151202153331.GE17050@phenom.ffwll.local> References: <1449058982-18595-1-git-send-email-Liviu.Dudau@arm.com> <1449058982-18595-3-git-send-email-Liviu.Dudau@arm.com> <20151202152419.GC17050@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20151202152419.GC17050@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Liviu Dudau , David Airlie , Catalin Marinas , Will Deacon , Rob Herring , Sudeep Holla , Jon Medhurst , Mark Rutland , Ian Campbell , Kumar Gala , Rob Herring , Russell King , devicetree , Pawel Moll , Arnd Bergmann , Greg Kroah-Hartman , Punit Agrawal , LKML , DRI devel , Andrew Morton , Robin Murphy , LAKML List-Id: devicetree@vger.kernel.org T24gV2VkLCBEZWMgMDIsIDIwMTUgYXQgMDQ6MjQ6MTlQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBXZWQsIERlYyAwMiwgMjAxNSBhdCAxMjoyMzowMFBNICswMDAwLCBMaXZpdSBE dWRhdSB3cm90ZToKPiA+IFRoZSBIRExDRCBjb250cm9sbGVyIGlzIGEgZGlzcGxheSBjb250cm9s bGVyIHRoYXQgc3VwcG9ydHMgcmVzb2x1dGlvbnMKPiA+IHVwIHRvIDQwOTZ4NDA5NiBwaXhlbHMu IEl0IGlzIHByZXNlbnQgb24gdmFyaW91cyBkZXZlbG9wbWVudCBib2FyZHMKPiA+IHByb2R1Y2Vk IGJ5IEFSTSBMdGQgYW5kIGVtdWxhdGVkIGJ5IHRoZSBsYXRlc3QgRmFzdCBNb2RlbHMgZnJvbSB0 aGUKPiA+IGNvbXBhbnkuCj4gPiAKPiA+IENjOiBEYXZpZCBBaXJsaWUgPGFpcmxpZWRAbGludXgu aWU+Cj4gPiBDYzogUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJwaHlAYXJtLmNvbT4KPiA+IAo+ID4g U2lnbmVkLW9mZi1ieTogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Cj4gCj4gQSBm ZXcgc21hbGwgbml0cGlja3MgYmVsb3cuCgpJJ3ZlIGZvcmdvdHRlbiB0byBhZGQgQWNrZWQtYnk6 IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+CndpdGggdGhlc2UgYWxsIGFk ZHJlc3NlZC4KLURhbmllbAoKPiAKPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9LY29uZmln ICAgICAgICAgIHwgICAyICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICB8 ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnICAgICAgfCAgMjkgKysKPiA+ ICBkcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlICAgICB8ICAgMiArCj4gPiAgZHJpdmVycy9n cHUvZHJtL2FybS9oZGxjZF9jcnRjLmMgfCAzMzQgKysrKysrKysrKysrKysrKysrKysrKysKPiA+ ICBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5jICB8IDU1NSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Ry di5oICB8ICA0MiArKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX3JlZ3MuaCB8ICA4 NyArKysrKysKPiA+ICA4IGZpbGVzIGNoYW5nZWQsIDEwNTIgaW5zZXJ0aW9ucygrKQo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiA+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZQo+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2NydGMuYwo+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5jCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2LmgKPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9yZWdzLmgKPiA+IAo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+ IGluZGV4IGM0YmY5YTEuLjNmZDkxMjQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v S2NvbmZpZwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+IEBAIC0xMDYsNiAr MTA2LDggQEAgY29uZmlnIERSTV9UREZYCj4gPiAgCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlv dSBoYXZlIGEgM2RmeCBCYW5zaGVlIG9yIFZvb2RvbzMgKG9yIGxhdGVyKSwKPiA+ICAJICBncmFw aGljcyBjYXJkLiAgSWYgTSBpcyBzZWxlY3RlZCwgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0 ZGZ4Lgo+ID4gIAo+ID4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnIgo+ID4g Kwo+ID4gIGNvbmZpZyBEUk1fUjEyOAo+ID4gIAl0cmlzdGF0ZSAiQVRJIFJhZ2UgMTI4Igo+ID4g IAlkZXBlbmRzIG9uIERSTSAmJiBQQ0kKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+IGluZGV4IDFlOWZmNGMuLjZi NDJkNzUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gQEAgLTM1LDYgKzM1LDcgQEAgQ0ZMQUdTX2Ry bV90cmFjZV9wb2ludHMubyA6PSAtSSQoc3JjKQo+ID4gIAo+ID4gIG9iai0kKENPTkZJR19EUk0p CSs9IGRybS5vCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9NSVBJX0RTSSkgKz0gZHJtX21pcGlfZHNp Lm8KPiA+ICtvYmotJChDT05GSUdfRFJNX0FSTSkJKz0gYXJtLwo+ID4gIG9iai0kKENPTkZJR19E Uk1fVFRNKQkrPSB0dG0vCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9UREZYKQkrPSB0ZGZ4Lwo+ID4g IG9iai0kKENPTkZJR19EUk1fUjEyOCkJKz0gcjEyOC8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYXJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi41ZThjOGE4Cj4gPiAtLS0gL2Rl di9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiA+IEBAIC0wLDAg KzEsMjkgQEAKPiA+ICtjb25maWcgRFJNX0FSTQo+ID4gKwlib29sICJBUk0gTHRkLiBkcml2ZXJz Igo+ID4gKwlkZXBlbmRzIG9uIERSTSAmJiBPRiAmJiAoQVJNIHx8IEFSTTY0KQo+ID4gKwlzZWxl Y3QgRFJNX0tNU19IRUxQRVIKPiA+ICsJaGVscAo+ID4gKwkgIENob29zZSB0aGlzIG9wdGlvbiB0 byBzZWxlY3QgZHJpdmVycyBmb3IgQVJNJ3MgZGV2aWNlcwo+ID4gKwo+ID4gK2NvbmZpZyBEUk1f SERMQ0QKPiA+ICsJdHJpc3RhdGUgIkFSTSBIRExDRCIKPiA+ICsJZGVwZW5kcyBvbiBEUk1fQVJN Cj4gPiArCWRlcGVuZHMgb24gQ09NTU9OX0NMSwo+ID4gKwlzZWxlY3QgQ09NTU9OX0NMS19TQ1BJ Cj4gPiArCXNlbGVjdCBETUFfQ01BCj4gPiArCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKPiA+ ICsJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgo+ID4gKwloZWxwCj4gPiArCSAgQ2hvb3NlIHRo aXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIEFSTSBIaWdoIERlZmluaXRpb24gQ29sb3VyIExDRAo+ ID4gKwkgIGNvbnRyb2xsZXIuCj4gPiArCj4gPiArCSAgSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9k dWxlIHdpbGwgYmUgY2FsbGVkIGhkbGNkLgo+ID4gKwo+ID4gK2NvbmZpZyBEUk1fSERMQ0RfU0hP V19VTkRFUlJVTgo+ID4gKwlib29sICJTaG93IHVuZGVycnVuIGNvbmRpdGlvbnMiCj4gPiArCWRl cGVuZHMgb24gRFJNX0hETENECj4gPiArCWRlZmF1bHQgbgo+ID4gKwloZWxwCj4gPiArCSAgRW5h YmxlIHRoaXMgb3B0aW9uIHRvIHNob3cgaW4gcmVkIGNvbG91ciB0aGUgcGl4ZWxzIHRoYXQgdGhl Cj4gPiArCSAgSERMQ0QgZGV2aWNlIGRpZCBub3QgZmV0Y2ggZnJvbSBmcmFtZWJ1ZmZlciBkdWUg dG8gdW5kZXJydW4KPiA+ICsJICBjb25kaXRpb25zLgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uODlkY2I3Ygo+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZQo+ID4gQEAgLTAs MCArMSwyIEBACj4gPiAraGRsY2QteSA6PSBoZGxjZF9kcnYubyBoZGxjZF9jcnRjLm8KPiA+ICtv YmotJChDT05GSUdfRFJNX0hETENEKQkrPSBoZGxjZC5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FybS9oZGxjZF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Ny dGMuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjM1MGMxZmUK PiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfY3J0 Yy5jCj4gPiBAQCAtMCwwICsxLDMzNCBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChDKSAy MDEzLTIwMTUgQVJNIExpbWl0ZWQKPiA+ICsgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5E dWRhdUBhcm0uY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBM aWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRo aXMgYXJjaGl2ZQo+ID4gKyAqIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICoKPiA+ICsgKiAgSW1w bGVtZW50YXRpb24gb2YgYSBDUlRDIGNsYXNzIGZvciB0aGUgSERMQ0QgZHJpdmVyLgo+ID4gKyAq Lwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiArI2lu Y2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9o ZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+Cj4gPiArI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9v Zi5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KPiA+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9zaW1wbGVmYi5oPgo+ID4gKyNpbmNsdWRlIDx2aWRl by92aWRlb21vZGUuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAiaGRsY2RfZHJ2LmgiCj4gPiArI2lu Y2x1ZGUgImhkbGNkX3JlZ3MuaCIKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFRoZSBIRExDRCBjb250 cm9sbGVyIGlzIGEgZHVtYiBSR0Igc3RyZWFtZXIgdGhhdCBnZXRzIGNvbm5lY3RlZCB0bwo+ID4g KyAqIGEgc2luZ2xlIEhETUkgdHJhbnNtaXR0ZXIgb3IgaW4gdGhlIGNhc2Ugb2YgdGhlIEFSTSBN b2RlbHMgaXQgZ2V0cwo+ID4gKyAqIGVtdWxhdGVkIGJ5IHRoZSBzb2Z0d2FyZSB0aGF0IGRvZXMg dGhlIGFjdHVhbCByZW5kZXJpbmcuCj4gPiArICoKPiA+ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGhkbGNkX2NydGNfZnVuY3MgPSB7Cj4gPiArCS5k ZXN0cm95ID0gZHJtX2NydGNfY2xlYW51cCwKPiA+ICsJLnNldF9jb25maWcgPSBkcm1fYXRvbWlj X2hlbHBlcl9zZXRfY29uZmlnLAo+ID4gKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJf cGFnZV9mbGlwLAo+ID4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAo+ ID4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfZHVw bGljYXRlX3N0YXRlLAo+ID4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0 IHNpbXBsZWZiX2Zvcm1hdCBzdXBwb3J0ZWRfZm9ybWF0c1tdID0gU0lNUExFRkJfRk9STUFUUzsK PiA+ICsKPiA+ICsvKgo+ID4gKyAqIFNldHVwIHRoZSBIRExDRCByZWdpc3RlcnMgZm9yIGRlY29k aW5nIHRoZSBwaXhlbHMgb3V0IG9mIHRoZSBmcmFtZWJ1ZmZlcgo+ID4gKyAqLwo+ID4gK3N0YXRp YyBpbnQgaGRsY2Rfc2V0X3B4bF9mbXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ ICsJdW5zaWduZWQgaW50IGJ0cHAsIGRlZmF1bHRfY29sb3IgPSAweDAwMDAwMDAwOwo+ID4gKwlz dHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gY3J0Y190b19oZGxjZF9wcml2KGNydGMp Owo+ID4gKwl1aW50MzJfdCBwaXhlbF9mb3JtYXQ7Cj4gPiArCXN0cnVjdCBzaW1wbGVmYl9mb3Jt YXQgKmZvcm1hdCA9IE5VTEw7Cj4gPiArCWludCBpOwo+ID4gKwo+ID4gKyNpZmRlZiBDT05GSUdf RFJNX0hETENEX1NIT1dfVU5ERVJSVU4KPiA+ICsJZGVmYXVsdF9jb2xvciA9IDB4MDBmZjAwMDA7 CS8qIHNob3cgdW5kZXJydW5zIGluIHJlZCAqLwo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKwlpZiAo IWNydGMtPnByaW1hcnktPnN0YXRlLT5mYikgewo+ID4gKwkJRFJNX0VSUk9SKCJObyBmYiBhc3Nv Y2lhdGVkIHdpdGggc3RhdGUgJXBcbiIsCj4gPiArCQkJICBjcnRjLT5wcmltYXJ5LT5zdGF0ZSk7 Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAKPiBUaGUgaGlnaGVyLWxldmVsIC0+bW9kZV9zZXRf bm9mYiBjYW4ndCBmYWlsIGFuZCB5b3UncmUgdmlvbGF0aW5nIHRoaXMKPiBoZXJlLiBDb3JyZWN0 IGZpeCBpbiBhdG9taWMgaXMgdG8gY2hlY2sgaW4geW91ciBjcnRjLT5hdG9taWNfY2hlY2sgdGhh dAo+IHRoZXJlJ3MgYWx3YXlzIGEgcHJpbWFyeSBmYiBzZXQuIFNpbmNlIHRoYXQncyBhIHNtYWxs IGRhbmNlICh5b3UgbmVlZCB0bwo+IGdyYWIgdGhlIHByaW1hcnkgcGxhbmUgc3RhdGUgZmlyc3Qp IG1pZ2h0IGJlIGdvb2QgdG8gZXh0cmFjdCBpdCBpbnRvIGEKPiBzbWFsbCBoZWxwZXIsIGJ1dCBu b3QgcmVhbGx5IG5lZWRlZC4KPiAKPiBIZXJlIHlvdSBzaG91bGQgV0FSTl9PTiBpZiB0aGlzIGV2 ZXIgaGFwcGVucyBhbmQganVzdCByZXR1cm4gKHdpdGhvdXQKPiB0cnlpbmcgdG8gdHJhY2sgYW4g ZXJyb3IgY29kZSksIHNpbmNlIGl0J3MgdG9vIGxhdGUgYWxyZWFkeS4KPiAKPiA+ICsJfQo+ID4g Kwo+ID4gKwlwaXhlbF9mb3JtYXQgPSBjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+ZmItPnBpeGVsX2Zv cm1hdDsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VwcG9ydGVkX2Zv cm1hdHMpOyBpKyspIHsKPiA+ICsJCWlmIChzdXBwb3J0ZWRfZm9ybWF0c1tpXS5mb3VyY2MgPT0g cGl4ZWxfZm9ybWF0KQo+ID4gKwkJCWZvcm1hdCA9ICZzdXBwb3J0ZWRfZm9ybWF0c1tpXTsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlpZiAoIWZvcm1hdCkgewo+ID4gKwkJRFJNX0VSUk9SKCJGb3JtYXQg bm90IHN1cHBvcnRlZDogMHgleFxuIiwgcGl4ZWxfZm9ybWF0KTsKPiA+ICsJCXJldHVybiAtRUlO VkFMOwo+ID4gKwl9Cj4gCj4gU2FtZSBoZXJlLiBBbHRob3VnaCB0aGlzIHNob3VsZCBiZSBpbXBv c3NpYmxlLCB3aXRoIGF0b21pYyB0aGUKPiBjb3JlL2hlbHBlcnMgcHJlLWNoZWNrIHRoZSBwaXhl bCBmb3JtYXQgYWdhaW5zdCB0aGUgZm9ybWF0IHRhYmxlIHlvdQo+IHJlZ2lzdGVyIG9uIHRoZSAo cHJpbWFyeSkgcGxhbmUgYWxyZWFkeS4gU28ganVzdCBXQVJOX09OICsgYmFpbGluZyBvdXQuCj4g Cj4gPiArCj4gPiArCS8qIEhETENEIHVzZXMgJ2J5dGVzIHBlciBwaXhlbCcsIHplcm8gbWVhbnMg MSBieXRlICovCj4gPiArCWJ0cHAgPSAoZm9ybWF0LT5iaXRzX3Blcl9waXhlbCArIDcpIC8gODsK PiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19QSVhFTF9GT1JNQVQsIChidHBwIC0g MSkgPDwgMyk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFRoZSBmb3JtYXQgb2YgdGhlIEhETENE X1JFR188Y29sb3I+X1NFTEVDVCByZWdpc3RlciBpczoKPiA+ICsJICogICAtIGJpdHNbMjM6MTZd IC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGhhdCBjb2xvciBjb21wb25lbnQKPiA+ICsJICogICAtIGJp dHNbMTE6OF0gIC0gbnVtYmVyIG9mIGJpdHMgdG8gZXh0cmFjdCBmb3IgZWFjaCBjb2xvciBjb21w b25lbnQKPiA+ICsJICogICAtIGJpdHNbNDowXSAgIC0gaW5kZXggb2YgdGhlIGxvd2VzdCBiaXQg dG8gZXh0cmFjdAo+ID4gKwkgKgo+ID4gKwkgKiBUaGUgZGVmYXVsdCBjb2xvciB2YWx1ZSBpcyB1 c2VkIHdoZW4gYml0c1sxMTo4XSBhcmUgemVybywgd2hlbiB0aGUKPiA+ICsJICogcGl4ZWwgaXMg b3V0c2lkZSB0aGUgdmlzaWJsZSBmcmFtZSBhcmVhIG9yIHdoZW4gdGhlcmUgaXMgYQo+ID4gKwkg KiBidWZmZXIgdW5kZXJydW4uCj4gPiArCSAqLwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERM Q0RfUkVHX1JFRF9TRUxFQ1QsIGRlZmF1bHRfY29sb3IgfAo+ID4gKwkJZm9ybWF0LT5yZWQub2Zm c2V0IHwgKGZvcm1hdC0+cmVkLmxlbmd0aCAmIDB4ZikgPDwgOCk7Cj4gPiArCWhkbGNkX3dyaXRl KGhkbGNkLCBIRExDRF9SRUdfR1JFRU5fU0VMRUNULCBkZWZhdWx0X2NvbG9yIHwKPiA+ICsJCWZv cm1hdC0+Z3JlZW4ub2Zmc2V0IHwgKGZvcm1hdC0+Z3JlZW4ubGVuZ3RoICYgMHhmKSA8PCA4KTsK PiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19CTFVFX1NFTEVDVCwgZGVmYXVsdF9j b2xvciB8Cj4gPiArCQlmb3JtYXQtPmJsdWUub2Zmc2V0IHwgKGZvcm1hdC0+Ymx1ZS5sZW5ndGgg JiAweGYpIDw8IDgpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgaGRsY2RfY3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK PiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBjcnRjX3RvX2hk bGNkX3ByaXYoY3J0Yyk7Cj4gPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptID0gJmNydGMt PnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ID4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ID4gKwl1 bnNpZ25lZCBpbnQgcG9sYXJpdGllcywgbGluZV9sZW5ndGgsIGVycjsKPiA+ICsKPiA+ICsJdm0u dmZyb250X3BvcmNoID0gbS0+Y3J0Y192c3luY19zdGFydCAtIG0tPmNydGNfdmRpc3BsYXk7Cj4g PiArCXZtLnZiYWNrX3BvcmNoID0gbS0+Y3J0Y192dG90YWwgLSBtLT5jcnRjX3ZzeW5jX2VuZDsK PiA+ICsJdm0udnN5bmNfbGVuID0gbS0+Y3J0Y192c3luY19lbmQgLSBtLT5jcnRjX3ZzeW5jX3N0 YXJ0Owo+ID4gKwl2bS5oZnJvbnRfcG9yY2ggPSBtLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbS0+Y3J0 Y19oZGlzcGxheTsKPiA+ICsJdm0uaGJhY2tfcG9yY2ggPSBtLT5jcnRjX2h0b3RhbCAtIG0tPmNy dGNfaHN5bmNfZW5kOwo+ID4gKwl2bS5oc3luY19sZW4gPSBtLT5jcnRjX2hzeW5jX2VuZCAtIG0t PmNydGNfaHN5bmNfc3RhcnQ7Cj4gPiArCj4gPiArCXBvbGFyaXRpZXMgPSBIRExDRF9QT0xBUklU WV9EQVRBRU4gfCBIRExDRF9QT0xBUklUWV9EQVRBOwo+ID4gKwo+ID4gKwlpZiAobS0+ZmxhZ3Mg JiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKPiA+ICsJCXBvbGFyaXRpZXMgfD0gSERMQ0RfUE9MQVJJ VFlfSFNZTkM7Cj4gPiArCWlmIChtLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQo+ID4g KwkJcG9sYXJpdGllcyB8PSBIRExDRF9QT0xBUklUWV9WU1lOQzsKPiA+ICsKPiA+ICsJbGluZV9s ZW5ndGggPSBjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+ZmItPnBpdGNoZXNbMF07Cj4gPiArCj4gPiAr CS8qIEFsbG93IG1heCBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMgYW5kIGxhcmdlc3Qg YnVyc3Qgc2l6ZSAqLwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0JVU19PUFRJ T05TLAo+ID4gKwkJICAgIEhETENEX0JVU19NQVhfT1VUU1RBTkQgfCBIRExDRF9CVVNfQlVSU1Rf MTYpOwo+ID4gKwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0ZCX0xJTkVfTEVO R1RILCBsaW5lX2xlbmd0aCk7Cj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfRkJf TElORV9QSVRDSCwgbGluZV9sZW5ndGgpOwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0Rf UkVHX0ZCX0xJTkVfQ09VTlQsIG0tPmNydGNfdmRpc3BsYXkgLSAxKTsKPiA+ICsJaGRsY2Rfd3Jp dGUoaGRsY2QsIEhETENEX1JFR19WX0RBVEEsIG0tPmNydGNfdmRpc3BsYXkgLSAxKTsKPiA+ICsJ aGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19WX0JBQ0tfUE9SQ0gsIHZtLnZiYWNrX3BvcmNo IC0gMSk7Cj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfVl9GUk9OVF9QT1JDSCwg dm0udmZyb250X3BvcmNoIC0gMSk7Cj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdf Vl9TWU5DLCB2bS52c3luY19sZW4gLSAxKTsKPiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENE X1JFR19IX0JBQ0tfUE9SQ0gsIHZtLmhiYWNrX3BvcmNoIC0gMSk7Cj4gPiArCWhkbGNkX3dyaXRl KGhkbGNkLCBIRExDRF9SRUdfSF9GUk9OVF9QT1JDSCwgdm0uaGZyb250X3BvcmNoIC0gMSk7Cj4g PiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfSF9TWU5DLCB2bS5oc3luY19sZW4gLSAx KTsKPiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19IX0RBVEEsIG0tPmNydGNfaGRp c3BsYXkgLSAxKTsKPiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19QT0xBUklUSUVT LCBwb2xhcml0aWVzKTsKPiA+ICsKPiA+ICsJZXJyID0gaGRsY2Rfc2V0X3B4bF9mbXQoY3J0Yyk7 Cj4gPiArCWlmIChlcnIpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCWNsa19zZXRfcmF0ZSho ZGxjZC0+Y2xrLCBtLT5jcnRjX2Nsb2NrICogMTAwMCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGhkbGNkX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4g PiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBjcnRjX3RvX2hkbGNkX3ByaXYo Y3J0Yyk7Cj4gPiArCj4gPiArCWNsa19wcmVwYXJlX2VuYWJsZShoZGxjZC0+Y2xrKTsKPiA+ICsJ aGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19DT01NQU5ELCAxKTsKPiA+ICsJZHJtX2NydGNf dmJsYW5rX29uKGNydGMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBoZGxjZF9jcnRj X2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IGhkbGNk X2RybV9wcml2YXRlICpoZGxjZCA9IGNydGNfdG9faGRsY2RfcHJpdihjcnRjKTsKPiA+ICsKPiA+ ICsJaWYgKCFjcnRjLT5wcmltYXJ5LT5mYikKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGhkbGNkLT5jbGspOwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwg SERMQ0RfUkVHX0NPTU1BTkQsIDApOwo+ID4gKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGhkbGNkX2NydGNfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0 ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBjcnRjX3Rv X2hkbGNkX3ByaXYoY3J0Yyk7Cj4gPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0g JnN0YXRlLT5hZGp1c3RlZF9tb2RlOwo+ID4gKwlsb25nIHJhdGUsIGNsa19yYXRlID0gbW9kZS0+ Y2xvY2sgKiAxMDAwOwo+ID4gKwo+ID4gKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUoaGRsY2QtPmNs aywgY2xrX3JhdGUpOwo+ID4gKwlpZiAocmF0ZSAhPSBjbGtfcmF0ZSkgewo+ID4gKwkJLyogY2xv Y2sgcmVxdWlyZWQgYnkgbW9kZSBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlICovCj4gPiArCQly ZXR1cm4gLUVJTlZBTDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgaGRsY2RfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+ID4gKwkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBjcnRjX3RvX2hkbGNkX3By aXYoY3J0Yyk7Cj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiArCj4gPiArCWlmIChjcnRj LT5zdGF0ZS0+ZXZlbnQpIHsKPiA+ICsJCWNydGMtPnN0YXRlLT5ldmVudC0+cGlwZSA9IGRybV9j cnRjX2luZGV4KGNydGMpOwo+ID4gKwo+ID4gKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0 KGNydGMpICE9IDApOwo+ID4gKwo+ID4gKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNydGMtPmRldi0+ ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ID4gKwkJaGRsY2QtPmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2 ZW50Owo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2Nr LCBmbGFncyk7Cj4gPiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ID4gKwl9Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGhkbGNkX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUp Cj4gPiArewo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBoZGxjZF9jcnRjX21vZGVfZml4 dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gKwkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlLAo+ID4gKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9t b2RlKQo+ID4gK3sKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGhkbGNkX2NydGNfaGVscGVyX2Z1bmNz ID0gewo+ID4gKwkubW9kZV9maXh1cAk9IGhkbGNkX2NydGNfbW9kZV9maXh1cCwKPiA+ICsJLm1v ZGVfc2V0CT0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0LAo+ID4gKwkubW9kZV9zZXRfYmFzZQk9 IGRybV9oZWxwZXJfY3J0Y19tb2RlX3NldF9iYXNlLAo+ID4gKwkubW9kZV9zZXRfbm9mYgk9IGhk bGNkX2NydGNfbW9kZV9zZXRfbm9mYiwKPiA+ICsJLmVuYWJsZQkJPSBoZGxjZF9jcnRjX2VuYWJs ZSwKPiA+ICsJLmRpc2FibGUJPSBoZGxjZF9jcnRjX2Rpc2FibGUsCj4gPiArCS5wcmVwYXJlCT0g aGRsY2RfY3J0Y19kaXNhYmxlLAo+ID4gKwkuY29tbWl0CQk9IGhkbGNkX2NydGNfZW5hYmxlLAo+ ID4gKwkuYXRvbWljX2NoZWNrCT0gaGRsY2RfY3J0Y19hdG9taWNfY2hlY2ssCj4gPiArCS5hdG9t aWNfYmVnaW4JPSBoZGxjZF9jcnRjX2F0b21pY19iZWdpbiwKPiA+ICsJLmF0b21pY19mbHVzaAk9 IGhkbGNkX2NydGNfYXRvbWljX2ZsdXNoLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBo ZGxjZF9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiArCQkJ CSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArCXJldHVybiAw Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBoZGxjZF9wbGFuZV9hdG9taWNfdXBkYXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gKwkJCQkgICAgICBzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRs Y2Q7Cj4gPiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmdlbTsKPiA+ICsJZG1hX2FkZHJf dCBzY2Fub3V0X3N0YXJ0Owo+ID4gKwo+ID4gKwlpZiAoIXBsYW5lLT5zdGF0ZS0+Y3J0YyB8fCAh cGxhbmUtPnN0YXRlLT5mYikKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJaGRsY2QgPSBjcnRj X3RvX2hkbGNkX3ByaXYocGxhbmUtPnN0YXRlLT5jcnRjKTsKPiA+ICsJZ2VtID0gZHJtX2ZiX2Nt YV9nZXRfZ2VtX29iaihwbGFuZS0+c3RhdGUtPmZiLCAwKTsKPiA+ICsJc2Nhbm91dF9zdGFydCA9 IGdlbS0+cGFkZHI7Cj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfRkJfQkFTRSwg c2Nhbm91dF9zdGFydCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3BsYW5lX2hlbHBlcl9mdW5jcyBoZGxjZF9wbGFuZV9oZWxwZXJfZnVuY3MgPSB7Cj4gPiArCS5w cmVwYXJlX2ZiID0gTlVMTCwKPiA+ICsJLmNsZWFudXBfZmIgPSBOVUxMLAo+ID4gKwkuYXRvbWlj X2NoZWNrID0gaGRsY2RfcGxhbmVfYXRvbWljX2NoZWNrLAo+ID4gKwkuYXRvbWljX3VwZGF0ZSA9 IGhkbGNkX3BsYW5lX2F0b21pY191cGRhdGUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9p ZCBoZGxjZF9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ID4gK3sKPiA+ ICsJZHJtX3BsYW5lX2hlbHBlcl9kaXNhYmxlKHBsYW5lKTsKPiA+ICsJZHJtX3BsYW5lX2NsZWFu dXAocGxhbmUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFu ZV9mdW5jcyBoZGxjZF9wbGFuZV9mdW5jcyA9IHsKPiA+ICsJLnVwZGF0ZV9wbGFuZQkJPSBkcm1f YXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCj4gPiArCS5kaXNhYmxlX3BsYW5lCQk9IGRybV9h dG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCj4gPiArCS5kZXN0cm95CQk9IGhkbGNkX3BsYW5l X2Rlc3Ryb3ksCj4gPiArCS5yZXNldAkJCT0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQs Cj4gPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVf ZHVwbGljYXRlX3N0YXRlLAo+ID4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBkcm1fYXRvbWlj X2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0 cnVjdCBkcm1fcGxhbmUgKmhkbGNkX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkK PiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9w cml2YXRlOwo+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IE5VTEw7Cj4gPiArCXUzMiBm b3JtYXRzW0FSUkFZX1NJWkUoc3VwcG9ydGVkX2Zvcm1hdHMpXSwgaTsKPiA+ICsJaW50IHJldDsK PiA+ICsKPiA+ICsJcGxhbmUgPSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqcGxhbmUp LCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFwbGFuZSkKPiA+ICsJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdXBwb3J0ZWRf Zm9ybWF0cyk7IGkrKykKPiA+ICsJCWZvcm1hdHNbaV0gPSBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5m b3VyY2M7Cj4gPiArCj4gPiArCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0sIHBs YW5lLCAweGZmLCAmaGRsY2RfcGxhbmVfZnVuY3MsCj4gPiArCQkJCSAgICAgICBmb3JtYXRzLCBB UlJBWV9TSVpFKGZvcm1hdHMpLAo+ID4gKwkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFS WSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldm1fa2ZyZWUoZHJtLT5kZXYsIHBsYW5lKTsK PiA+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZHJtX3BsYW5l X2hlbHBlcl9hZGQocGxhbmUsICZoZGxjZF9wbGFuZV9oZWxwZXJfZnVuY3MpOwo+ID4gKwloZGxj ZC0+cGxhbmUgPSBwbGFuZTsKPiA+ICsKPiA+ICsJcmV0dXJuIHBsYW5lOwo+ID4gK30KPiA+ICsK PiA+ICt2b2lkIGhkbGNkX2NydGNfc3VzcGVuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPiAr ewo+ID4gKwloZGxjZF9jcnRjX2Rpc2FibGUoY3J0Yyk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQg aGRsY2RfY3J0Y19yZXN1bWUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJaGRs Y2RfY3J0Y19lbmFibGUoY3J0Yyk7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBoZGxjZF9zZXR1cF9j cnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgaGRsY2RfZHJt X3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJc3RydWN0IGRybV9wbGFu ZSAqcHJpbWFyeTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcHJpbWFyeSA9IGhkbGNkX3Bs YW5lX2luaXQoZHJtKTsKPiA+ICsJaWYgKElTX0VSUihwcmltYXJ5KSkKPiA+ICsJCXJldHVybiBQ VFJfRVJSKHByaW1hcnkpOwo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxh bmVzKGRybSwgJmhkbGNkLT5jcnRjLCBwcmltYXJ5LCBOVUxMLAo+ID4gKwkJCQkJJmhkbGNkX2Ny dGNfZnVuY3MpOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQloZGxjZF9wbGFuZV9kZXN0cm95KHBy aW1hcnkpOwo+ID4gKwkJZGV2bV9rZnJlZShkcm0tPmRldiwgcHJpbWFyeSk7Cj4gPiArCQlyZXR1 cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWRybV9jcnRjX2hlbHBlcl9hZGQoJmhkbGNkLT5j cnRjLCAmaGRsY2RfY3J0Y19oZWxwZXJfZnVuY3MpOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuYyBiL2RyaXZlcnMv Z3B1L2RybS9hcm0vaGRsY2RfZHJ2LmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRl eCAwMDAwMDAwLi40NTQ0MGIxCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXJtL2hkbGNkX2Rydi5jCj4gPiBAQCAtMCwwICsxLDU1NSBAQAo+ID4gKy8qCj4gPiAr ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQVJNIExpbWl0ZWQKPiA+ICsgKiBBdXRob3I6IExp dml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBmaWxl IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1h aW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQo+ID4gKyAqIGZvciBtb3JlIGRldGFpbHMuCj4g PiArICoKPiA+ICsgKiAgQVJNIEhETENEIERyaXZlcgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5o Pgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9v Zl9yZXNlcnZlZF9tZW0uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ID4g Kwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21p Y19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiArI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUg PGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgo+ ID4gKwo+ID4gKyNpbmNsdWRlICJoZGxjZF9kcnYuaCIKPiA+ICsjaW5jbHVkZSAiaGRsY2RfcmVn cy5oIgo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgY29tcGFyZV9kZXYoc3RydWN0IGRldmljZSAqZGV2 LCB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRhOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGhkbGNkX2xvYWQoc3RydWN0IGRybV9kZXZpY2Ug KmRybSwgdW5zaWduZWQgbG9uZyBmbGFncykKPiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1f cHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRybS0+ZGV2KTsKPiA+ICsJc3RydWN0 IHJlc291cmNlICpyZXM7Cj4gPiArCXUzMiB2ZXJzaW9uOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ ID4gKwloZGxjZC0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRybS0+ZGV2LCAicHhsY2xrIik7Cj4gPiAr CWlmIChJU19FUlIoaGRsY2QtPmNsaykpCj4gPiArCQlyZXR1cm4gUFRSX0VSUihoZGxjZC0+Y2xr KTsKPiA+ICsKPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gPiArCWF0b21pY19zZXQoJmhk bGNkLT5idWZmZXJfdW5kZXJydW5fY291bnQsIDApOwo+ID4gKwlhdG9taWNfc2V0KCZoZGxjZC0+ YnVzX2Vycm9yX2NvdW50LCAwKTsKPiA+ICsJYXRvbWljX3NldCgmaGRsY2QtPnZzeW5jX2NvdW50 LCAwKTsKPiA+ICsJYXRvbWljX3NldCgmaGRsY2QtPmRtYV9lbmRfY291bnQsIDApOwo+ID4gKyNl bmRpZgo+ID4gKwo+ID4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNP VVJDRV9NRU0sIDApOwo+ID4gKwloZGxjZC0+bW1pbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk cm0tPmRldiwgcmVzKTsKPiA+ICsJaWYgKElTX0VSUihoZGxjZC0+bW1pbykpIHsKPiA+ICsJCURS TV9FUlJPUigiZmFpbGVkIHRvIG1hcCBjb250cm9sIHJlZ2lzdGVycyBhcmVhXG4iKTsKPiA+ICsJ CXJldCA9IFBUUl9FUlIoaGRsY2QtPm1taW8pOwo+ID4gKwkJaGRsY2QtPm1taW8gPSBOVUxMOwo+ ID4gKwkJZ290byBmYWlsOwo+ID4gKwl9Cj4gPiArCj4gPiArCXZlcnNpb24gPSBoZGxjZF9yZWFk KGhkbGNkLCBIRExDRF9SRUdfVkVSU0lPTik7Cj4gPiArCWlmICgodmVyc2lvbiAmIEhETENEX1BS T0RVQ1RfTUFTSykgIT0gSERMQ0RfUFJPRFVDVF9JRCkgewo+ID4gKwkJRFJNX0VSUk9SKCJ1bmtu b3duIHByb2R1Y3QgaWQ6IDB4JXhcbiIsIHZlcnNpb24pOwo+ID4gKwkJcmV0ID0gLUVJTlZBTDsK PiA+ICsJCWdvdG8gZmFpbDsKPiA+ICsJfQo+ID4gKwlEUk1fSU5GTygiZm91bmQgQVJNIEhETENE IHZlcnNpb24gciVkcCVkXG4iLAo+ID4gKwkJKHZlcnNpb24gJiBIRExDRF9WRVJTSU9OX01BSk9S X01BU0spID4+IDgsCj4gPiArCQl2ZXJzaW9uICYgSERMQ0RfVkVSU0lPTl9NSU5PUl9NQVNLKTsK PiA+ICsKPiA+ICsJLyogR2V0IHRoZSBvcHRpb25hbCBmcmFtZWJ1ZmZlciBtZW1vcnkgcmVzb3Vy Y2UgKi8KPiA+ICsJcmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9pbml0KGRybS0+ZGV2KTsK PiA+ICsJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RFVikKPiA+ICsJCWdvdG8gZmFpbDsKPiA+ICsK PiA+ICsJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkcm0tPmRldiwgRE1BX0JJVF9N QVNLKDMyKSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIHNldHVwX2ZhaWw7Cj4gPiArCj4g PiArCXJldCA9IGhkbGNkX3NldHVwX2NydGMoZHJtKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBjcnRjXG4iKTsKPiA+ICsJCWdvdG8gc2V0 dXBfZmFpbDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlwbV9ydW50aW1lX2VuYWJsZShkcm0tPmRldik7 Cj4gPiArCj4gPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHJtLT5kZXYpOwo+ID4gKwlyZXQgPSBk cm1faXJxX2luc3RhbGwoZHJtLCBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApKTsKPiA+ICsJcG1f cnVudGltZV9wdXRfc3luYyhkcm0tPmRldik7Cj4gPiArCWlmIChyZXQgPCAwKSB7Cj4gPiArCQlE Uk1fRVJST1IoImZhaWxlZCB0byBpbnN0YWxsIElSUSBoYW5kbGVyXG4iKTsKPiA+ICsJCWdvdG8g aXJxX2ZhaWw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiAraXJxX2Zh aWw6Cj4gPiArCWRybV9jcnRjX2NsZWFudXAoJmhkbGNkLT5jcnRjKTsKPiA+ICtzZXR1cF9mYWls Ogo+ID4gKwlvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX3JlbGVhc2UoZHJtLT5kZXYpOwo+ID4gK2Zh aWw6Cj4gPiArCWRldm1fY2xrX3B1dChkcm0tPmRldiwgaGRsY2QtPmNsayk7Cj4gPiArCj4gPiAr CXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGhkbGNkX2ZiX291dHB1 dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiA+ICt7Cj4gPiArCXN0cnVj dCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwo+ID4g KwlpZiAoaGRsY2QtPmZiZGV2KSB7Cj4gPiArCQlkcm1fZmJkZXZfY21hX2hvdHBsdWdfZXZlbnQo aGRsY2QtPmZiZGV2KTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBoZGxjZF9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKPiA+ ICsJLmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFfY3JlYXRlLAo+ID4gKwkub3V0cHV0X3BvbGxfY2hh bmdlZCA9IGhkbGNkX2ZiX291dHB1dF9wb2xsX2NoYW5nZWQsCj4gPiArCS5hdG9taWNfY2hlY2sg PSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiA+ICsJLmF0b21pY19jb21taXQgPSBkcm1fYXRv bWljX2hlbHBlcl9jb21taXQsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBoZGxjZF9z ZXR1cF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJZHJt X21vZGVfY29uZmlnX2luaXQoZHJtKTsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5fd2lkdGgg PSAwOwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAwOwo+ID4gKwlkcm0tPm1v ZGVfY29uZmlnLm1heF93aWR0aCA9IEhETENEX01BWF9YUkVTOwo+ID4gKwlkcm0tPm1vZGVfY29u ZmlnLm1heF9oZWlnaHQgPSBIRExDRF9NQVhfWVJFUzsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5m dW5jcyA9ICZoZGxjZF9tb2RlX2NvbmZpZ19mdW5jczsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IHZvaWQgaGRsY2RfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IGRybV9m aWxlICpmaWxlKQo+ID4gK3sKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgaGRsY2RfbGFz dGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgaGRsY2Rf ZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsKPiA+ICsJZHJtX2Zi ZGV2X2NtYV9yZXN0b3JlX21vZGUoaGRsY2QtPmZiZGV2KTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGlycXJldHVybl90IGhkbGNkX2lycShpbnQgaXJxLCB2b2lkICphcmcpCj4gPiArewo+ID4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gYXJnOwo+ID4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3By aXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJdW5zaWduZWQgbG9uZyBpcnFf c3RhdHVzOwo+ID4gKwo+ID4gKwlpcnFfc3RhdHVzID0gaGRsY2RfcmVhZChoZGxjZCwgSERMQ0Rf UkVHX0lOVF9TVEFUVVMpOwo+ID4gKwo+ID4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiA+ICsJ aWYgKGlycV9zdGF0dXMgJiBIRExDRF9JTlRFUlJVUFRfVU5ERVJSVU4pIHsKPiA+ICsJCWF0b21p Y19pbmMoJmhkbGNkLT5idWZmZXJfdW5kZXJydW5fY291bnQpOwo+ID4gKwl9Cj4gPiArCWlmIChp cnFfc3RhdHVzICYgSERMQ0RfSU5URVJSVVBUX0RNQV9FTkQpIHsKPiA+ICsJCWF0b21pY19pbmMo JmhkbGNkLT5kbWFfZW5kX2NvdW50KTsKPiA+ICsJfQo+ID4gKwlpZiAoaXJxX3N0YXR1cyAmIEhE TENEX0lOVEVSUlVQVF9CVVNfRVJST1IpIHsKPiA+ICsJCWF0b21pY19pbmMoJmhkbGNkLT5idXNf ZXJyb3JfY291bnQpOwo+ID4gKwl9Cj4gPiArCWlmIChpcnFfc3RhdHVzICYgSERMQ0RfSU5URVJS VVBUX1ZTWU5DKSB7Cj4gPiArCQlhdG9taWNfaW5jKCZoZGxjZC0+dnN5bmNfY291bnQpOwo+ID4g Kwl9Cj4gPiArI2VuZGlmCj4gPiArCWlmIChpcnFfc3RhdHVzICYgSERMQ0RfSU5URVJSVVBUX1ZT WU5DKSB7Cj4gPiArCQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwo+ID4gKwkJZHJtX2hhbmRs ZV92YmxhbmsoZHJtLCAwKTsKPiAKPiBXZSBoYXZlIGRybV9jcnRjXyB2ZXJzaW9ucyBmb3IgdGhp cyBvbmUgLi4uCj4gPiArCj4gPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJtLT5ldmVudF9sb2Nr LCBmbGFncyk7Cj4gPiArCQlpZiAoaGRsY2QtPmV2ZW50KSB7Cj4gPiArCQkJZHJtX3NlbmRfdmJs YW5rX2V2ZW50KGRybSwgaGRsY2QtPmV2ZW50LT5waXBlLCBoZGxjZC0+ZXZlbnQpOwo+IAo+IGFu ZCB0aGlzIG9uZSBub3cgdG9vLiBOZXcgZHJpdmVycyBzaG91bGRuJ3QgbmVlZCB0byBkZWFsIHdp dGggdGhlIG9wYXF1ZQo+IGludCBwaXBlIHN0dWZmIGFueSBtb3JlIG9uIHRoZSBjYWxsZXIgc2lk ZXMsIGFuZCByZWFsIHNvb24gKGhvcGVmdWxseSkKPiB3ZSdsbCBoYXZlIGhvb2tzIGZvciB0aGUg dmJsYW5rIHN0dWZmIHRoYXQgdGFrZSBzdHJ1Y3QgZHJtX2NydGMgKiB0b28uCj4gCj4gSSd2ZSBx dWlja2x5IHNjcm9sbGVkIHRocm91Z2ggdGhlIGRyaXZlciBvdGhlcndpc2UgYW5kIGRpZG4ndCBu b3RpY2UKPiBhbnl0aGluZyBlbHNlIHRoYXQgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gbGF0ZXN0IHBy YWN0aWNlcy4gTG9va3MgcmVhbGx5Cj4gZ29vZC4KPiAtRGFuaWVsCj4gCj4gPiArCQkJZHJtX2Ny dGNfdmJsYW5rX3B1dCgmaGRsY2QtPmNydGMpOwo+ID4gKwkJCWhkbGNkLT5ldmVudCA9IE5VTEw7 Cj4gPiArCQl9Cj4gPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcm0tPmV2ZW50X2xvY2ss IGZsYWdzKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQocykg Ki8KPiA+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19JTlRfQ0xFQVIsIGlycV9zdGF0 dXMpOwo+ID4gKwo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkIGhkbGNkX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4g PiArewo+ID4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJp dmF0ZTsKPiA+ICsJLyogRW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCj4gPiArCWhk bGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfSU5UX01BU0ssIDApOwo+ID4gKwloZGxjZF93cml0 ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9DTEVBUiwgfjApOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGhkbGNkX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4g K3sKPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJp dmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOwo+ID4gKwl1bnNpZ25lZCBsb25nIGlycV9t YXNrID0gaGRsY2RfcmVhZChoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLKTsKPiA+ICsKPiA+ICsJ LyogZW5hYmxlIGRlYnVnIGludGVycnVwdHMgKi8KPiA+ICsJaXJxX21hc2sgfD0gSERMQ0RfREVC VUdfSU5UX01BU0s7Cj4gPiArCj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfSU5U X01BU0ssIGlycV9tYXNrKTsKPiA+ICsjZW5kaWYKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIGhkbGNkX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2Ug KmRybSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0t PmRldl9wcml2YXRlOwo+ID4gKwkvKiBkaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyB0aGF0IHdl IG1pZ2h0IGhhdmUgZW5hYmxlZCAqLwo+ID4gKwl1bnNpZ25lZCBsb25nIGlycV9tYXNrID0gaGRs Y2RfcmVhZChoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLKTsKPiA+ICsKPiA+ICsjaWZkZWYgQ09O RklHX0RFQlVHX0ZTCj4gPiArCS8qIGRpc2FibGUgZGVidWcgaW50ZXJydXB0cyAqLwo+ID4gKwlp cnFfbWFzayAmPSB+SERMQ0RfREVCVUdfSU5UX01BU0s7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiAr CS8qIGRpc2FibGUgdnN5bmMgaW50ZXJydXB0cyAqLwo+ID4gKwlpcnFfbWFzayAmPSB+SERMQ0Rf SU5URVJSVVBUX1ZTWU5DOwo+ID4gKwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVH X0lOVF9NQVNLLCBpcnFfbWFzayk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaGRsY2Rf ZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgY3J0YykK PiA+ICt7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9w cml2YXRlOwo+ID4gKwl1bnNpZ25lZCBpbnQgbWFzayA9IGhkbGNkX3JlYWQoaGRsY2QsIEhETENE X1JFR19JTlRfTUFTSyk7Cj4gPiArCj4gPiArCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdf SU5UX01BU0ssIG1hc2sgfCBIRExDRF9JTlRFUlJVUFRfVlNZTkMpOwo+ID4gKwo+ID4gKwlyZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgaGRsY2RfZGlzYWJsZV92Ymxhbmso c3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IGNydGMpCj4gPiArewo+ID4gKwlz dHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsJ dW5zaWduZWQgaW50IG1hc2sgPSBoZGxjZF9yZWFkKGhkbGNkLCBIRExDRF9SRUdfSU5UX01BU0sp Owo+ID4gKwo+ID4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBtYXNr ICYgfkhETENEX0lOVEVSUlVQVF9WU1lOQyk7Cj4gPiArfQo+ID4gKwo+ID4gKyNpZmRlZiBDT05G SUdfREVCVUdfRlMKPiA+ICtzdGF0aWMgaW50IGhkbGNkX3Nob3dfdW5kZXJydW5fY291bnQoc3Ry dWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2luZm9f bm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKW0tPnByaXZhdGU7Cj4gPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBub2RlLT5taW5vci0+ZGV2Owo+ID4gKwlzdHJ1Y3QgaGRs Y2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsKPiA+ICsJc2Vx X3ByaW50ZihtLCAidW5kZXJydW4gOiAlZFxuIiwgYXRvbWljX3JlYWQoJmhkbGNkLT5idWZmZXJf dW5kZXJydW5fY291bnQpKTsKPiA+ICsJc2VxX3ByaW50ZihtLCAiZG1hX2VuZCAgOiAlZFxuIiwg YXRvbWljX3JlYWQoJmhkbGNkLT5kbWFfZW5kX2NvdW50KSk7Cj4gPiArCXNlcV9wcmludGYobSwg ImJ1c19lcnJvcjogJWRcbiIsIGF0b21pY19yZWFkKCZoZGxjZC0+YnVzX2Vycm9yX2NvdW50KSk7 Cj4gPiArCXNlcV9wcmludGYobSwgInZzeW5jICAgIDogJWRcbiIsIGF0b21pY19yZWFkKCZoZGxj ZC0+dnN5bmNfY291bnQpKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgaGRsY2Rfc2hvd19weGxjbG9jayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZykK PiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5m b19ub2RlICopbS0+cHJpdmF0ZTsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IG5vZGUt Pm1pbm9yLT5kZXY7Cj4gPiArCXN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QgPSBkcm0t PmRldl9wcml2YXRlOwo+ID4gKwl1bnNpZ25lZCBsb25nIGNsa3JhdGUgPSBjbGtfZ2V0X3JhdGUo aGRsY2QtPmNsayk7Cj4gPiArCXVuc2lnbmVkIGxvbmcgbW9kZV9jbG9jayA9IGhkbGNkLT5jcnRj Lm1vZGUuY3J0Y19jbG9jayAqIDEwMDA7Cj4gPiArCj4gPiArCXNlcV9wcmludGYobSwgImh3ICA6 ICVsdVxuIiwgY2xrcmF0ZSk7Cj4gPiArCXNlcV9wcmludGYobSwgIm1vZGU6ICVsdVxuIiwgbW9k ZV9jbG9jayk7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0 IGRybV9pbmZvX2xpc3QgaGRsY2RfZGVidWdmc19saXN0W10gPSB7Cj4gPiArCXsgImludGVycnVw dF9jb3VudCIsIGhkbGNkX3Nob3dfdW5kZXJydW5fY291bnQsIDAgfSwKPiA+ICsJeyAiY2xvY2tz IiwgaGRsY2Rfc2hvd19weGxjbG9jaywgMCB9LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGlu dCBoZGxjZF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpCj4gPiArewo+ID4g KwlyZXR1cm4gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKGhkbGNkX2RlYnVnZnNfbGlzdCwKPiA+ ICsJCUFSUkFZX1NJWkUoaGRsY2RfZGVidWdmc19saXN0KSwJbWlub3ItPmRlYnVnZnNfcm9vdCwg bWlub3IpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBoZGxjZF9kZWJ1Z2ZzX2NsZWFu dXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpCj4gPiArewo+ID4gKwlkcm1fZGVidWdmc19yZW1v dmVfZmlsZXMoaGRsY2RfZGVidWdmc19saXN0LAo+ID4gKwkJQVJSQVlfU0laRShoZGxjZF9kZWJ1 Z2ZzX2xpc3QpLCBtaW5vcik7Cj4gPiArfQo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7Cj4gPiArCS5vd25lcgkJPSBUSElT X01PRFVMRSwKPiA+ICsJLm9wZW4JCT0gZHJtX29wZW4sCj4gPiArCS5yZWxlYXNlCT0gZHJtX3Jl bGVhc2UsCj4gPiArCS51bmxvY2tlZF9pb2N0bAk9IGRybV9pb2N0bCwKPiA+ICsjaWZkZWYgQ09O RklHX0NPTVBBVAo+ID4gKwkuY29tcGF0X2lvY3RsCT0gZHJtX2NvbXBhdF9pb2N0bCwKPiA+ICsj ZW5kaWYKPiA+ICsJLnBvbGwJCT0gZHJtX3BvbGwsCj4gPiArCS5yZWFkCQk9IGRybV9yZWFkLAo+ ID4gKwkubGxzZWVrCQk9IG5vb3BfbGxzZWVrLAo+ID4gKwkubW1hcAkJPSBkcm1fZ2VtX2NtYV9t bWFwLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGhkbGNkX2Ry aXZlciA9IHsKPiA+ICsJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9IQVZFX0lSUSB8IERSSVZF Ul9HRU0gfAo+ID4gKwkJCSAgIERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX1BSSU1FIHwKPiA+ICsJ CQkgICBEUklWRVJfQVRPTUlDLAo+ID4gKwkucHJlY2xvc2UgPSBoZGxjZF9wcmVjbG9zZSwKPiA+ ICsJLmxhc3RjbG9zZSA9IGhkbGNkX2xhc3RjbG9zZSwKPiA+ICsJLmlycV9oYW5kbGVyID0gaGRs Y2RfaXJxLAo+ID4gKwkuaXJxX3ByZWluc3RhbGwgPSBoZGxjZF9pcnFfcHJlaW5zdGFsbCwKPiA+ ICsJLmlycV9wb3N0aW5zdGFsbCA9IGhkbGNkX2lycV9wb3N0aW5zdGFsbCwKPiA+ICsJLmlycV91 bmluc3RhbGwgPSBoZGxjZF9pcnFfdW5pbnN0YWxsLAo+ID4gKwkuZ2V0X3ZibGFua19jb3VudGVy ID0gZHJtX3ZibGFua19ub19od19jb3VudGVyLAo+ID4gKwkuZW5hYmxlX3ZibGFuayA9IGhkbGNk X2VuYWJsZV92YmxhbmssCj4gPiArCS5kaXNhYmxlX3ZibGFuayA9IGhkbGNkX2Rpc2FibGVfdmJs YW5rLAo+ID4gKwkuZ2VtX2ZyZWVfb2JqZWN0ID0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCj4g PiArCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKPiA+ICsJLmR1bWJfY3JlYXRl ID0gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUsCj4gPiArCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1f Z2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCj4gPiArCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2VtX2R1 bWJfZGVzdHJveSwKPiA+ICsJLnByaW1lX2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFu ZGxlX3RvX2ZkLAo+ID4gKwkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90 b19oYW5kbGUsCj4gPiArCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQs Cj4gPiArCS5nZW1fcHJpbWVfaW1wb3J0ID0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCj4gPiArCS5n ZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ ID4gKwkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9y dF9zZ190YWJsZSwKPiA+ICsJLmdlbV9wcmltZV92bWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfdm1h cCwKPiA+ICsJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCj4g PiArCS5nZW1fcHJpbWVfbW1hcCA9IGRybV9nZW1fY21hX3ByaW1lX21tYXAsCj4gPiArI2lmZGVm IENPTkZJR19ERUJVR19GUwo+ID4gKwkuZGVidWdmc19pbml0ID0gaGRsY2RfZGVidWdmc19pbml0 LAo+ID4gKwkuZGVidWdmc19jbGVhbnVwID0gaGRsY2RfZGVidWdmc19jbGVhbnVwLAo+ID4gKyNl bmRpZgo+ID4gKwkuZm9wcyA9ICZmb3BzLAo+ID4gKwkubmFtZSA9ICJoZGxjZCIsCj4gPiArCS5k ZXNjID0gIkFSTSBIRExDRCBDb250cm9sbGVyIERSTSIsCj4gPiArCS5kYXRlID0gIjIwMTUxMDIx IiwKPiA+ICsJLm1ham9yID0gMSwKPiA+ICsJLm1pbm9yID0gMCwKPiA+ICt9Owo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgaGRsY2RfYWRkX2NvbXBvbmVudHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgbWFzdGVyICptYXN0ZXIpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnQs ICplcCA9IE5VTEw7Cj4gPiArCWludCByZXQgPSAtRU5YSU87Cj4gPiArCj4gPiArCWlmICghZGV2 LT5vZl9ub2RlKQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCj4gPiArCWRvIHsKPiA+ICsJ CWVwID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBlcCk7Cj4gPiAr CQlpZiAoIWVwKQo+ID4gKwkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJaWYgKCFvZl9kZXZpY2VfaXNf YXZhaWxhYmxlKGVwKSkgewo+ID4gKwkJCW9mX25vZGVfcHV0KGVwKTsKPiA+ICsJCQljb250aW51 ZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXBvcnQgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRf cGFyZW50KGVwKTsKPiA+ICsJCW9mX25vZGVfcHV0KGVwKTsKPiA+ICsJCWlmICghcG9ydCB8fCAh b2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwb3J0KSkgewo+ID4gKwkJCW9mX25vZGVfcHV0KHBvcnQp Owo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJcmV0ID0gY29tcG9uZW50 X21hc3Rlcl9hZGRfY2hpbGQobWFzdGVyLCBjb21wYXJlX2RldiwgcG9ydCk7Cj4gPiArCQlvZl9u b2RlX3B1dChwb3J0KTsKPiA+ICsJfSB3aGlsZSAoMSk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaGRsY2RfZHJtX2JpbmQoc3RydWN0IGRldmlj ZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiA+ICsJc3RydWN0 IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZDsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJaGRs Y2QgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhkbGNkKSwgR0ZQX0tFUk5FTCk7Cj4gPiAr CWlmICghaGRsY2QpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJZHJtID0gZHJt X2Rldl9hbGxvYygmaGRsY2RfZHJpdmVyLCBkZXYpOwo+ID4gKwlpZiAoIWRybSkKPiA+ICsJCXJl dHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gKwlkcm0tPmRldl9wcml2YXRlID0gaGRsY2Q7Cj4gPiAr Cj4gPiArCXJldCA9IGRybV9kZXZfc2V0X3VuaXF1ZShkcm0sICIlcyIsIGRldl9uYW1lKGRldikp Owo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ICsKPiA+ICsJaGRsY2Rf c2V0dXBfbW9kZV9jb25maWcoZHJtKTsKPiA+ICsKPiA+ICsJcmV0ID0gaGRsY2RfbG9hZChkcm0s IDApOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ICsKPiA+ICsJcmV0 ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDApOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBl cnJfdW5sb2FkOwo+ID4gKwo+ID4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcm0pOwo+ID4gKwo+ ID4gKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBkcm0pOwo+ID4gKwlpZiAocmV0KSB7 Cj4gPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBiaW5kIGFsbCBjb21wb25lbnRzXG4iKTsKPiA+ ICsJCWdvdG8gZXJyX3VucmVnaXN0ZXI7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gZHJtX3Zi bGFua19pbml0KGRybSwgZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7Cj4gPiArCWlmIChyZXQg PCAwKSB7Cj4gPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXNlIHZibGFua1xuIik7 Cj4gPiArCQlnb3RvIGVycl92Ymxhbms7Cj4gPiArCX0KPiA+ICsJZHJtLT52YmxhbmtfZGlzYWJs ZV9hbGxvd2VkID0gdHJ1ZTsKPiA+ICsKPiA+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7 Cj4gPiArCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOwo+ID4gKwo+ID4gKwloZGxjZC0+ ZmJkZXYgPSBkcm1fZmJkZXZfY21hX2luaXQoZHJtLCAzMiwgZHJtLT5tb2RlX2NvbmZpZy5udW1f Y3J0YywKPiA+ICsJCQkJCSAgZHJtLT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yKTsKPiA+ICsK PiA+ICsJaWYgKElTX0VSUihoZGxjZC0+ZmJkZXYpKSB7Cj4gPiArCQlyZXQgPSBQVFJfRVJSKGhk bGNkLT5mYmRldik7Cj4gPiArCQloZGxjZC0+ZmJkZXYgPSBOVUxMOwo+ID4gKwkJZ290byBlcnJf ZmJkZXY7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArZXJyX2ZiZGV2 Ogo+ID4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiA+ICsJZHJtX21vZGVfY29u ZmlnX2NsZWFudXAoZHJtKTsKPiA+ICsJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gPiArZXJy X3ZibGFuazoKPiA+ICsJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOwo+ID4gK2Vycl91 bnJlZ2lzdGVyOgo+ID4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKPiA+ICtlcnJfdW5sb2Fk Ogo+ID4gKwlwbV9ydW50aW1lX2dldF9zeW5jKGRybS0+ZGV2KTsKPiA+ICsJZHJtX2lycV91bmlu c3RhbGwoZHJtKTsKPiA+ICsJcG1fcnVudGltZV9wdXRfc3luYyhkcm0tPmRldik7Cj4gPiArCXBt X3J1bnRpbWVfZGlzYWJsZShkcm0tPmRldik7Cj4gPiArCW9mX3Jlc2VydmVkX21lbV9kZXZpY2Vf cmVsZWFzZShkcm0tPmRldik7Cj4gPiArCWRldm1fY2xrX3B1dChkZXYsIGhkbGNkLT5jbGspOwo+ ID4gK2Vycl9mcmVlOgo+ID4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gPiArCj4gPiArCXJldHVy biByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGhkbGNkX2RybV91bmJpbmQoc3Ry dWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNk ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsKPiA+ICsJaWYgKGhkbGNkLT5mYmRldikgewo+ID4g KwkJZHJtX2ZiZGV2X2NtYV9maW5pKGhkbGNkLT5mYmRldik7Cj4gPiArCQloZGxjZC0+ZmJkZXYg PSBOVUxMOwo+ID4gKwl9Cj4gPiArCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOwo+ID4g Kwljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRybSk7Cj4gPiArCWRybV92YmxhbmtfY2xlYW51 cChkcm0pOwo+ID4gKwlwbV9ydW50aW1lX2dldF9zeW5jKGRybS0+ZGV2KTsKPiA+ICsJZHJtX2ly cV91bmluc3RhbGwoZHJtKTsKPiA+ICsJcG1fcnVudGltZV9wdXRfc3luYyhkcm0tPmRldik7Cj4g PiArCXBtX3J1bnRpbWVfZGlzYWJsZShkcm0tPmRldik7Cj4gPiArCW9mX3Jlc2VydmVkX21lbV9k ZXZpY2VfcmVsZWFzZShkcm0tPmRldik7Cj4gPiArCWlmICghSVNfRVJSKGhkbGNkLT5jbGspKSB7 Cj4gPiArCQlkZXZtX2Nsa19wdXQoZHJtLT5kZXYsIGhkbGNkLT5jbGspOwo+ID4gKwkJaGRsY2Qt PmNsayA9IE5VTEw7Cj4gPiArCX0KPiA+ICsJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsK PiA+ICsJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7Cj4gPiArCWRybV9kZXZfdW5yZWYoZHJtKTsK PiA+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7Cj4gPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYs IE5VTEwpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9t YXN0ZXJfb3BzIGhkbGNkX21hc3Rlcl9vcHMgPSB7Cj4gPiArCS5hZGRfY29tcG9uZW50cwk9IGhk bGNkX2FkZF9jb21wb25lbnRzLAo+ID4gKwkuYmluZAkJPSBoZGxjZF9kcm1fYmluZCwKPiA+ICsJ LnVuYmluZAkJPSBoZGxjZF9kcm1fdW5iaW5kLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGlu dCBoZGxjZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsJ cmV0dXJuIGNvbXBvbmVudF9tYXN0ZXJfYWRkKCZwZGV2LT5kZXYsICZoZGxjZF9tYXN0ZXJfb3Bz KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBoZGxjZF9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCWNvbXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2 LT5kZXYsICZoZGxjZF9tYXN0ZXJfb3BzKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICBoZGxjZF9vZl9tYXRjaFtdID0g ewo+ID4gKwl7IC5jb21wYXRpYmxlCT0gImFybSxoZGxjZCIgfSwKPiA+ICsJe30sCj4gPiArfTsK PiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBoZGxjZF9vZl9tYXRjaCk7Cj4gPiArCj4gPiAr c3RhdGljIGludCBoZGxjZF9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4g PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsJ c3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4gKwo+ID4gKwlpZiAocG1fcnVudGltZV9zdXNwZW5k ZWQoZGV2KSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlkcm1fbW9kZXNldF9sb2NrX2Fs bChkcm0pOwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkcm0tPm1vZGVfY29uZmln LmNydGNfbGlzdCwgaGVhZCkKPiA+ICsJCWhkbGNkX2NydGNfc3VzcGVuZChjcnRjKTsKPiA+ICsJ ZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkcm0pOwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBoZGxjZF9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4g K3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gPiArCj4gPiArCWlmICghcG1fcnVudGltZV9z dXNwZW5kZWQoZGV2KSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlkcm1fbW9kZXNldF9s b2NrX2FsbChkcm0pOwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkcm0tPm1vZGVf Y29uZmlnLmNydGNfbGlzdCwgaGVhZCkKPiA+ICsJCWhkbGNkX2NydGNfcmVzdW1lKGNydGMpOwo+ ID4gKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7Cj4gPiArCXJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaGRsY2RfcG1fb3BzLCBoZGxjZF9w bV9zdXNwZW5kLCBoZGxjZF9wbV9yZXN1bWUpOwo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIGhkbGNkX3BsYXRmb3JtX2RyaXZlciA9IHsKPiA+ICsJLnByb2JlCQk9IGhk bGNkX3Byb2JlLAo+ID4gKwkucmVtb3ZlCQk9IGhkbGNkX3JlbW92ZSwKPiA+ICsJLmRyaXZlcgk9 IHsKPiA+ICsJCS5uYW1lID0gImhkbGNkIiwKPiA+ICsJCS5wbSA9ICZoZGxjZF9wbV9vcHMsCj4g PiArCQkub2ZfbWF0Y2hfdGFibGUJPSBoZGxjZF9vZl9tYXRjaCwKPiA+ICsJfSwKPiA+ICt9Owo+ ID4gKwo+ID4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaGRsY2RfcGxhdGZvcm1fZHJpdmVyKTsK PiA+ICsKPiA+ICtNT0RVTEVfQVVUSE9SKCJMaXZpdSBEdWRhdSIpOwo+ID4gK01PRFVMRV9ERVND UklQVElPTigiQVJNIEhETENEIERSTSBkcml2ZXIiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BM IHYyIik7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2LmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gPiBpbmRleCAwMDAwMDAwLi5mMmVlZGZiCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5oCj4gPiBAQCAtMCwwICsxLDQyIEBACj4gPiAr LyoKPiA+ICsgKiAgQVJNIEhETENEIENvbnRyb2xsZXIgcmVnaXN0ZXIgZGVmaW5pdGlvbgo+ID4g KyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX19IRExDRF9EUlZfSF9fCj4gPiArI2RlZmluZSBfX0hE TENEX0RSVl9IX18KPiA+ICsKPiA+ICtzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgewo+ID4gKwl2 b2lkIF9faW9tZW0JCQkqbW1pbzsKPiA+ICsJc3RydWN0IGNsawkJCSpjbGs7Cj4gPiArCXN0cnVj dCBkcm1fZmJkZXZfY21hCQkqZmJkZXY7Cj4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIJCSpm YjsKPiA+ICsJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudAkqZXZlbnQ7Cj4gPiArCXN0 cnVjdCBkcm1fY3J0YwkJCWNydGM7Cj4gPiArCXN0cnVjdCBkcm1fcGxhbmUJCSpwbGFuZTsKPiA+ ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gPiArCWF0b21pY190IGJ1ZmZlcl91bmRlcnJ1bl9j b3VudDsKPiA+ICsJYXRvbWljX3QgYnVzX2Vycm9yX2NvdW50Owo+ID4gKwlhdG9taWNfdCB2c3lu Y19jb3VudDsKPiA+ICsJYXRvbWljX3QgZG1hX2VuZF9jb3VudDsKPiA+ICsjZW5kaWYKPiA+ICt9 Owo+ID4gKwo+ID4gKyNkZWZpbmUgY3J0Y190b19oZGxjZF9wcml2KHgpCWNvbnRhaW5lcl9vZih4 LCBzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUsIGNydGMpCj4gPiArCj4gPiArc3RhdGljIGlubGlu ZSB2b2lkIGhkbGNkX3dyaXRlKHN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QsCj4gPiAr CQkJICAgICAgIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWx1ZSkKPiA+ICt7Cj4gPiArCXdyaXRl bCh2YWx1ZSwgaGRsY2QtPm1taW8gKyByZWcpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5s aW5lIHUzMiBoZGxjZF9yZWFkKHN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0ZSAqaGRsY2QsIHVuc2ln bmVkIGludCByZWcpCj4gPiArewo+ID4gKwlyZXR1cm4gcmVhZGwoaGRsY2QtPm1taW8gKyByZWcp Owo+ID4gK30KPiA+ICsKPiA+ICtpbnQgaGRsY2Rfc2V0dXBfY3J0YyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKPiA+ICt2b2lkIGhkbGNkX3NldF9zY2Fub3V0KHN0cnVjdCBoZGxjZF9kcm1fcHJp dmF0ZSAqaGRsY2QpOwo+ID4gK3ZvaWQgaGRsY2RfY3J0Y19zdXNwZW5kKHN0cnVjdCBkcm1fY3J0 YyAqY3J0Yyk7Cj4gPiArdm9pZCBoZGxjZF9jcnRjX3Jlc3VtZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOwo+ID4gKwo+ID4gKyNlbmRpZiAvKiBfX0hETENEX0RSVl9IX18gKi8KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9h cm0vaGRsY2RfcmVncy5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAw MC4uNjY3OTllYgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Fy bS9oZGxjZF9yZWdzLmgKPiA+IEBAIC0wLDAgKzEsODcgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHly aWdodCAoQykgMjAxMywyMDE0IEFSTSBMaW1pdGVkCj4gPiArICoKPiA+ICsgKiBUaGlzIGZpbGUg aXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFp biBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCj4gPiArICogZm9yIG1vcmUgZGV0YWlscy4KPiA+ ICsgKgo+ID4gKyAqICBBUk0gSERMQ0QgQ29udHJvbGxlciByZWdpc3RlciBkZWZpbml0aW9uCj4g PiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfX0hETENEX1JFR1NfSF9fCj4gPiArI2RlZmluZSBf X0hETENEX1JFR1NfSF9fCj4gPiArCj4gPiArLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLwo+ID4gKyNk ZWZpbmUgSERMQ0RfUkVHX1ZFUlNJT04JCTB4MDAwMAkvKiBybyAqLwo+ID4gKyNkZWZpbmUgSERM Q0RfUkVHX0lOVF9SQVdTVEFUCQkweDAwMTAJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JF R19JTlRfQ0xFQVIJCTB4MDAxNAkvKiB3byAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX0lOVF9N QVNLCQkweDAwMTgJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19JTlRfU1RBVFVTCQkw eDAwMWMJLyogcm8gKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19GQl9CQVNFCQkweDAxMDAJLyog cncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19GQl9MSU5FX0xFTkdUSAkweDAxMDQJLyogcncg Ki8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19GQl9MSU5FX0NPVU5UCQkweDAxMDgJLyogcncgKi8K PiA+ICsjZGVmaW5lIEhETENEX1JFR19GQl9MSU5FX1BJVENICQkweDAxMGMJLyogcncgKi8KPiA+ ICsjZGVmaW5lIEhETENEX1JFR19CVVNfT1BUSU9OUwkJMHgwMTEwCS8qIHJ3ICovCj4gPiArI2Rl ZmluZSBIRExDRF9SRUdfVl9TWU5DCQkweDAyMDAJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENE X1JFR19WX0JBQ0tfUE9SQ0gJCTB4MDIwNAkvKiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVH X1ZfREFUQQkJMHgwMjA4CS8qIHJ3ICovCj4gPiArI2RlZmluZSBIRExDRF9SRUdfVl9GUk9OVF9Q T1JDSAkJMHgwMjBjCS8qIHJ3ICovCj4gPiArI2RlZmluZSBIRExDRF9SRUdfSF9TWU5DCQkweDAy MTAJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19IX0JBQ0tfUE9SQ0gJCTB4MDIxNAkv KiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX0hfREFUQQkJMHgwMjE4CS8qIHJ3ICovCj4g PiArI2RlZmluZSBIRExDRF9SRUdfSF9GUk9OVF9QT1JDSAkJMHgwMjFjCS8qIHJ3ICovCj4gPiAr I2RlZmluZSBIRExDRF9SRUdfUE9MQVJJVElFUwkJMHgwMjIwCS8qIHJ3ICovCj4gPiArI2RlZmlu ZSBIRExDRF9SRUdfQ09NTUFORAkJMHgwMjMwCS8qIHJ3ICovCj4gPiArI2RlZmluZSBIRExDRF9S RUdfUElYRUxfRk9STUFUCQkweDAyNDAJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19S RURfU0VMRUNUCQkweDAyNDQJLyogcncgKi8KPiA+ICsjZGVmaW5lIEhETENEX1JFR19HUkVFTl9T RUxFQ1QJCTB4MDI0OAkvKiBydyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfUkVHX0JMVUVfU0VMRUNU CQkweDAyNGMJLyogcncgKi8KPiA+ICsKPiA+ICsvKiB2ZXJzaW9uICovCj4gPiArI2RlZmluZSBI RExDRF9QUk9EVUNUX0lECQkweDFDREMwMDAwCj4gPiArI2RlZmluZSBIRExDRF9QUk9EVUNUX01B U0sJCTB4RkZGRjAwMDAKPiA+ICsjZGVmaW5lIEhETENEX1ZFUlNJT05fTUFKT1JfTUFTSwkweDAw MDBGRjAwCj4gPiArI2RlZmluZSBIRExDRF9WRVJTSU9OX01JTk9SX01BU0sJMHgwMDAwMDBGRgo+ ID4gKwo+ID4gKy8qIGludGVycnVwdHMgKi8KPiA+ICsjZGVmaW5lIEhETENEX0lOVEVSUlVQVF9E TUFfRU5ECQkoMSA8PCAwKQo+ID4gKyNkZWZpbmUgSERMQ0RfSU5URVJSVVBUX0JVU19FUlJPUgko MSA8PCAxKQo+ID4gKyNkZWZpbmUgSERMQ0RfSU5URVJSVVBUX1ZTWU5DCQkoMSA8PCAyKQo+ID4g KyNkZWZpbmUgSERMQ0RfSU5URVJSVVBUX1VOREVSUlVOCSgxIDw8IDMpCj4gPiArI2RlZmluZSBI RExDRF9ERUJVR19JTlRfTUFTSwkJKEhETENEX0lOVEVSUlVQVF9ETUFfRU5EIHwgIFwKPiA+ICsJ CQkJCUhETENEX0lOVEVSUlVQVF9CVVNfRVJST1IgfCBcCj4gPiArCQkJCQlIRExDRF9JTlRFUlJV UFRfVU5ERVJSVU4pCj4gPiArCj4gPiArLyogcG9sYXJpdGllcyAqLwo+ID4gKyNkZWZpbmUgSERM Q0RfUE9MQVJJVFlfVlNZTkMJCSgxIDw8IDApCj4gPiArI2RlZmluZSBIRExDRF9QT0xBUklUWV9I U1lOQwkJKDEgPDwgMSkKPiA+ICsjZGVmaW5lIEhETENEX1BPTEFSSVRZX0RBVEFFTgkJKDEgPDwg MikKPiA+ICsjZGVmaW5lIEhETENEX1BPTEFSSVRZX0RBVEEJCSgxIDw8IDMpCj4gPiArI2RlZmlu ZSBIRExDRF9QT0xBUklUWV9QSVhFTENMSwkJKDEgPDwgNCkKPiA+ICsKPiA+ICsvKiBjb21tYW5k cyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfQ09NTUFORF9ESVNBQkxFCQkoMCA8PCAwKQo+ID4gKyNk ZWZpbmUgSERMQ0RfQ09NTUFORF9FTkFCTEUJCSgxIDw8IDApCj4gPiArCj4gPiArLyogcGl4ZWwg Zm9ybWF0ICovCj4gPiArI2RlZmluZSBIRExDRF9QSVhFTF9GTVRfTElUVExFX0VORElBTgkoMCA8 PCAzMSkKPiA+ICsjZGVmaW5lIEhETENEX1BJWEVMX0ZNVF9CSUdfRU5ESUFOCSgxIDw8IDMxKQo+ ID4gKyNkZWZpbmUgSERMQ0RfQllURVNfUEVSX1BJWEVMX01BU0sJKDMgPDwgMykKPiA+ICsKPiA+ ICsvKiBidXMgb3B0aW9ucyAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUX01BU0sJCTB4 MDFmCj4gPiArI2RlZmluZSBIRExDRF9CVVNfTUFYX09VVFNUQU5ECQkweGYwMAo+ID4gKyNkZWZp bmUgSERMQ0RfQlVTX0JVUlNUX05PTkUJCSgwIDw8IDApCj4gPiArI2RlZmluZSBIRExDRF9CVVNf QlVSU1RfMQkJKDEgPDwgMCkKPiA+ICsjZGVmaW5lIEhETENEX0JVU19CVVJTVF8yCQkoMSA8PCAx KQo+ID4gKyNkZWZpbmUgSERMQ0RfQlVTX0JVUlNUXzQJCSgxIDw8IDIpCj4gPiArI2RlZmluZSBI RExDRF9CVVNfQlVSU1RfOAkJKDEgPDwgMykKPiA+ICsjZGVmaW5lIEhETENEX0JVU19CVVJTVF8x NgkJKDEgPDwgNCkKPiA+ICsKPiA+ICsvKiBNYXggcmVzb2x1dGlvbiBzdXBwb3J0ZWQgaXMgNDA5 Nng0MDk2LCAzMmJwcCAqLwo+ID4gKyNkZWZpbmUgSERMQ0RfTUFYX1hSRVMJCQk0MDk2Cj4gPiAr I2RlZmluZSBIRExDRF9NQVhfWVJFUwkJCTQwOTYKPiA+ICsKPiA+ICsjZGVmaW5lIE5SX1BBTEVU VEUJCQkyNTYKPiA+ICsKPiA+ICsjZW5kaWYgLyogX19IRExDRF9SRUdTX0hfXyAqLwo+ID4gLS0g Cj4gPiAyLjYuMgo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo+IAo+IC0tIAo+IERhbmllbCBWZXR0ZXIKPiBTb2Z0d2FyZSBF bmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxvZy5mZndsbC5jaAoKLS0gCkRh bmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9i bG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==