From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: Re: [PATCH v2 1/1] drm/i915: Fix VGA handling using stop_machine() or mmio Date: Mon, 30 Sep 2013 08:43:51 -0600 Message-ID: <1380552231.2674.79.camel@ul30vt.home> References: <1380550111-31590-1-git-send-email-ville.syrjala@linux.intel.com> <1380550111-31590-2-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTP id BA3ADE5EFB for ; Mon, 30 Sep 2013 07:43:56 -0700 (PDT) In-Reply-To: <1380550111-31590-2-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: ville.syrjala@linux.intel.com Cc: Dave Airlie , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDEzLTA5LTMwIGF0IDE3OjA4ICswMzAwLCB2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbSB3cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGlu dXguaW50ZWwuY29tPgo+IAo+IFdlIGhhdmUgc2V2ZXJhbCBwcm9ibGVtcyB3aXRoIG91dCBWR0Eg aGFuZGxpbmc6Cj4gLSBXZSB0cnkgdG8gdXNlIHRoZSBHTUNIIGNvbnRyb2wgVkdBIGRpc2FibGUg Yml0IGV2ZW4gdGhvdWdoIGl0IG1heQo+ICAgYmUgbG9ja2VkCj4gLSBJZiB3ZSBtYW5hZ2UgdG8g ZGlzYWJsZSBWR0EgdGhyb3VoIEdNQ0ggY29udHJvbCwgd2UncmUgbm8gbG9uZ2VyCj4gICBhYmxl IHRvIGNvcnJlY3RseSBkaXNhYmxlIHRoZSBWR0EgcGxhbmUKPiAtIFRha2luZyBwYXJ0IGluIHRo ZSBWR0EgYXJiaXRyYXRpb24gaXMgdG9vIGV4cGVuc2l2ZSBmb3IgWCBbMV0KPiAKPiBTbyBsZXQn cyB0cmVhdCB0aGUgR01DSCBjb250cm9sIFZHQSBkaXNhYmxlIGJpdCBhcyByZWFkLW9ubHkgYW5k IGxlYXZlCj4gaXQgZm9yIHRoZSBCSU9TIHRvIHNldCwgYXMgaXQgd2FzIGludGVuZGVkLiBUbyBk aXNhYmxlIFZHQSB3ZSB3aWxsIHVzZQo+IHRoZSBWR0EgbWlzYyByZWdpc3RlciwgYW5kIHRvIGRp c2FibGUgVkdBIElPIHdlIHdpbGwgZGlzYWJsZSBJTyBzcGFjZQo+IGNvbXBsZXRlbHkgdmlhIHRo ZSBQQ0kgY29tbWFuZCByZWdpc3Rlci4KPiAKPiBCdXQgd2Ugc3RpbGwgbmVlZCBWR0EgcmVnaXN0 ZXIgYWNjZXNzIGR1cmluZyByZXN1bWUgKGFuZCBwb3NzaWJseSBkdXJpbmcKPiBsaWQgZXZlbnQg b24gaW5zYW5lIEJJT1NlbikgdG8gZGlzYWJsZSB0aGUgVkdBIHBsYW5lLiBBbHNvIHdlIG5lZWQg dG8KPiByZS1kaXNhYmxlIFZHQSBtZW1vcnkgZGVjb2RlIHZpYSB0aGUgVkdBIG1pc2MgcmVnaXN0 ZXIgb24gcmVzdW1lLgo+IAo+IEx1Y2tpbHkgdXAgdG8gZ2VuNCwgVkdBIHJlZ2lzdGVycyBjYW4g YmUgYWNjZXNzZWQgdGhyb3VnaCBNTUlPLgo+IFVuZm9ydHVuYXRlbHkgZnJvbSBnZW41IG9ud2Fy ZHMgb25seSB0aGUgbGVnYWN5IFZHQSBJTyBwb3J0IHJhbmdlCj4gd29ya3MuIFNvIG9uIGdlbjUr IHdlIHN0aWxsIG5lZWQgSU8gc3BhY2UgdG8gYmUgZW5hYmxlZCBkdXJpbmcgdGhvc2UKPiBmZXcg c3BlY2lhbCBtb21lbnRzIHdoZW4gd2UgbmVlZCB0byBhY2Nlc3MgVkdBIHJlZ2lzdGVycy4KPiAK PiBXZSBzdGlsbCB3YW50IHRvIG9wdCBvdXQgb2YgVkdBIGFyYml0cmF0aW9uIG9uIGdlbjUrLCBz byB3ZSBoYXZlIGtlZXAKPiBJTyBzcGFjZSBkaXNhYmxlZCBtb3N0IG9mIHRoZSB0aW1lLiBBbmQg d2hlbiB3ZSBkbyBuZWVkIHRvIHBva2UgYXQgVkdBCj4gcmVnaXN0ZXJzLCB3ZSBlbmFibGUgSU8g c3BhY2UgYnJpZWZseSB3aGlsZSBubyBvbmUgaXMgbG9va2luZy4gVG8KPiBndWFyYW50ZWUgdGhh dCBubyBvbmUgaXMgbG9va2luZyB3ZSB3aWxsIHVzZSBzdG9wX21hY2hpbmUoKS4KCldoYXQ/ISAg V2h5IHdvdWxkIHdlIG5vdCBzaW1wbHkgd2FpdCBmb3IgdGhlIGFyYml0ZXIgbG9jaz8KCj4gWzFd IGh0dHA6Ly9saXN0cy54Lm9yZy9hcmNoaXZlcy94b3JnLWRldmVsLzIwMTMtU2VwdGVtYmVyLzAz Nzc2My5odG1sCgpFZWssIGRvZXMgdGhpcyBYIHBhdGNoIGVmZmVjdGl2ZWx5IGtpbGwgVkdBIEFy Yml0ZXIgaW50ZXJhY3Rpb24gdW5sZXNzCmFuIGluc3RhbmNlIG9mIFggaGFzIG11bHRpcGxlIGFk YXB0ZXJzIG5lZWRpbmcgVkdBPwogICAgICAgIAogICAgICAgICJTZWNvbmRseSwgd2UgdGhlbiBv bmx5IHdyYXAgdGhlIG9wZXJhdGlvbnMgd2l0aCB2Z2FhcmIgZ2V0L3B1dAogICAgICAgIGZvciB0 aGUgZHJpdmVycyB0aGF0IHJlcXVpcmUgVkdBIGFjY2Vzcy4gSWYgd2Ugb25seSBoYXZlIGEKICAg ICAgICBzaW5nbGUgZHJpdmVyIHJlcXVyaW5nIFZHQSBhY2Nlc3MsIHdlIGp1c3Qgd3JhcCBFbnRl ci9MZWF2ZVZUCiAgICAgICAgYW5kIGxvY2sgdGhlIFZHQSBhcmJpdGVyIGZvciB0aGUgZW50aXJl IGR1cmF0aW9uIHRoYXQgdGhlCiAgICAgICAgWHNlcnZlciBpcyBhY3RpdmUuIgoKTWF5YmUgSSdt IHJlYWRpbmcgdGhlIGNvZGUgd3JvbmcsIGJ1dCBpdCBsb29rcyBsaWtlIGlmCnhmODZWR0FhcmJp dGVySW5pdCgpIGlzIG5vdCBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdGhlbiBYIGp1c3QgbG9ja3Mg VkdBCmFuZCBuZXZlciB1bmxvY2tzIGl0LiAgSWYgc28sIHRoaXMgaXMgYnJva2VuISAgSG93IGlz IHRoaXMgc3VwcG9zZWQgdG8Kd29yayB3aXRoIG11bHRpcGxlIFggc2Vzc2lvbnM/ICBIb3cgY2Fu IGl0IGV2ZXIgd29yayBpZiB3ZSB3YW50IHRvCmFzc2lnbiBhIFZHQSBkZXZpY2UgdG8gYSB2aXJ0 dWFsIG1hY2hpbmU/ICBDaHJpcywgcGxlYXNlIHRlbGwgbWUgSSdtCm1pc3JlYWRpbmcgdGhlIGlu dGVudCBvZiB0aGlzIHBhdGNoLiAgVGhhbmtzLAoKQWxleAoKPiAKPiB2MjogVXNlIFNOQl9HTUNI X1RSTCBvbiBTTkIrCj4gICAgIFVzZSBwb3J0IElPIGluc3RlYWQgb2YgTU1JTyBvbiBDVEcvRUxL Cj4gICAgIEFkZCBXYUVuYWJsZVZHQUFjY2Vzc1Rocm91Z2hJT1BvcnQgY29tbWVudAo+ICAgICBG aXggdGhlIG1heCBudW1iZXIgb2YgZGV2aWNlcyBvbiB0aGUgYnVzIGxpbWl0Cj4gCj4gQ2M6IEFs ZXggV2lsbGlhbXNvbiA8YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb20+Cj4gQ2M6IENocmlzIFdp bHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBEYXZlIEFpcmxpZSA8YWlybGll ZEByZWRoYXQuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3ly amFsYUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZG1hLmMgICAgICB8ICAzOSArLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNw ZW5kLmMgIHwgICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8 IDI0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQo+ICAzIGZpbGVzIGNoYW5n ZWQsIDIxNyBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZG1hLmMKPiBpbmRleCBkMzVkZTFiLi41OWEyMDQ4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RtYS5jCj4gQEAgLTEyMjUsMTkgKzEyMjUsNiBAQCBpbnRlbF90ZWFyZG93bl9tY2hiYXIoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKPiAgCQlyZWxlYXNlX3Jlc291cmNlKCZkZXZfcHJpdi0+bWNo X3Jlcyk7Cj4gIH0KPiAgCj4gLS8qIHRydWUgPSBlbmFibGUgZGVjb2RlLCBmYWxzZSA9IGRpc2Fi bGUgZGVjb2RlciAqLwo+IC1zdGF0aWMgdW5zaWduZWQgaW50IGk5MTVfdmdhX3NldF9kZWNvZGUo dm9pZCAqY29va2llLCBib29sIHN0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gY29va2llOwo+IC0KPiAtCWludGVsX21vZGVzZXRfdmdhX3NldF9zdGF0ZShkZXYsIHN0YXRl KTsKPiAtCWlmIChzdGF0ZSkKPiAtCQlyZXR1cm4gVkdBX1JTUkNfTEVHQUNZX0lPIHwgVkdBX1JT UkNfTEVHQUNZX01FTSB8Cj4gLQkJICAgICAgIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JD X05PUk1BTF9NRU07Cj4gLQllbHNlCj4gLQkJcmV0dXJuIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZH QV9SU1JDX05PUk1BTF9NRU07Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGk5MTVfc3dpdGNoZXJv b19zZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3Rh dGUgc3RhdGUpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRh dGEocGRldik7Cj4gQEAgLTEyODMsMjUgKzEyNzAsMTEgQEAgc3RhdGljIGludCBpOTE1X2xvYWRf bW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlpZiAocmV0KQo+ICAJCURS TV9JTkZPKCJmYWlsZWQgdG8gZmluZCBWQklPUyB0YWJsZXNcbiIpOwo+ICAKPiAtCS8qIElmIHdl IGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiB3ZSBuZWVkIHRvIGFyYml0cmF0ZSBhY2Nlc3MKPiAt CSAqIHRvIHRoZSBjb21tb24gVkdBIHJlc291cmNlcy4KPiAtCSAqCj4gLQkgKiBJZiB3ZSBhcmUg YSBzZWNvbmRhcnkgZGlzcGxheSBjb250cm9sbGVyICghUENJX0RJU1BMQVlfQ0xBU1NfVkdBKSwK PiAtCSAqIHRoZW4gd2UgZG8gbm90IHRha2UgcGFydCBpbiBWR0EgYXJiaXRyYXRpb24gYW5kIHRo ZQo+IC0JICogdmdhX2NsaWVudF9yZWdpc3RlcigpIGZhaWxzIHdpdGggLUVOT0RFVi4KPiAtCSAq Lwo+IC0JaWYgKCFIQVNfUENIX1NQTElUKGRldikpIHsKPiAtCQlyZXQgPSB2Z2FfY2xpZW50X3Jl Z2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLAo+IC0JCQkJCSAgaTkxNV92Z2Ffc2V0X2RlY29k ZSk7Cj4gLQkJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RFVikKPiAtCQkJZ290byBvdXQ7Cj4gLQl9 Cj4gLQo+ICAJaW50ZWxfcmVnaXN0ZXJfZHNtX2hhbmRsZXIoKTsKPiAgCj4gIAlyZXQgPSB2Z2Ff c3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQoZGV2LT5wZGV2LCAmaTkxNV9zd2l0Y2hlcm9vX29w cywgZmFsc2UpOwo+ICAJaWYgKHJldCkKPiAtCQlnb3RvIGNsZWFudXBfdmdhX2NsaWVudDsKPiAr CQlnb3RvIG91dDsKPiAgCj4gIAkvKiBJbml0aWFsaXNlIHN0b2xlbiBmaXJzdCBzbyB0aGF0IHdl IG1heSByZXNlcnZlIHByZWFsbG9jYXRlZAo+ICAJICogb2JqZWN0cyBmb3IgdGhlIEJJT1MgdG8g S01TIHRyYW5zaXRpb24uCj4gQEAgLTEzMTYsNyArMTI4OSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9s b2FkX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAKPiAgCWludGVsX2lu aXRfcG93ZXJfd2VsbChkZXYpOwo+ICAKPiAtCS8qIEtlZXAgVkdBIGFsaXZlIHVudGlsIGk5MTVf ZGlzYWJsZV92Z2FfbWVtKCkgKi8KPiArCS8qIEtlZXAgVkdBIGFsaXZlIHVudGlsIGludGVsX21v ZGVzZXRfdmdhX3NldF9zdGF0ZSgpICovCj4gIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXYs IFBPV0VSX0RPTUFJTl9WR0EpOwo+ICAKPiAgCS8qIEltcG9ydGFudDogVGhlIG91dHB1dCBzZXR1 cCBmdW5jdGlvbnMgY2FsbGVkIGJ5IG1vZGVzZXRfaW5pdCBuZWVkCj4gQEAgLTEzNTksMTAgKzEz MzIsMTMgQEAgc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gIAlpbnRlbF9mYmRldl9pbml0aWFsX2NvbmZpZyhkZXYpOwo+ICAKPiAgCS8q Cj4gKwkgKiBEaXNhYmxlIFZHQSBJTyBhbmQgbWVtb3J5LCBhbmQKPiArCSAqIHRlbGwgdGhlIGFy Yml0ZXIgdG8gaWdub3JlIHVzLgo+ICsJICoKPiAgCSAqIE11c3QgZG8gdGhpcyBhZnRlciBmYmNv biBpbml0IHNvIHRoYXQKPiAgCSAqIHZnYWNvbl9zYXZlX3NjcmVlbigpIHdvcmtzIGR1cmluZyB0 aGUgaGFuZG92ZXIuCj4gIAkgKi8KPiAtCWk5MTVfZGlzYWJsZV92Z2FfbWVtKGRldik7Cj4gKwlp bnRlbF9tb2Rlc2V0X3ZnYV9zZXRfc3RhdGUoZGV2LCBmYWxzZSk7Cj4gIAlpbnRlbF9kaXNwbGF5 X3Bvd2VyX3B1dChkZXYsIFBPV0VSX0RPTUFJTl9WR0EpOwo+ICAKPiAgCS8qIE9ubHkgZW5hYmxl IGhvdHBsdWcgaGFuZGxpbmcgb25jZSB0aGUgZmJkZXYgaXMgZnVsbHkgc2V0IHVwLiAqLwo+IEBA IC0xMzg2LDggKzEzNjIsNiBAQCBjbGVhbnVwX2dlbV9zdG9sZW46Cj4gIAlpOTE1X2dlbV9jbGVh bnVwX3N0b2xlbihkZXYpOwo+ICBjbGVhbnVwX3ZnYV9zd2l0Y2hlcm9vOgo+ICAJdmdhX3N3aXRj aGVyb29fdW5yZWdpc3Rlcl9jbGllbnQoZGV2LT5wZGV2KTsKPiAtY2xlYW51cF92Z2FfY2xpZW50 Ogo+IC0JdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwo+ ICBvdXQ6Cj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gQEAgLTE3NTgsNyArMTczMiw2IEBAIGludCBp OTE1X2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCQl9Cj4gIAo+ICAJ CXZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfY2xpZW50KGRldi0+cGRldik7Cj4gLQkJdmdhX2Ns aWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwo+ICAJfQo+ICAKPiAg CS8qIEZyZWUgZXJyb3Igc3RhdGUgYWZ0ZXIgaW50ZXJydXB0cyBhcmUgZnVsbHkgZGlzYWJsZWQu ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKPiBpbmRleCAzNTM4MzcwLi5jYzBk NDU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKPiBAQCAtMzMxLDggKzMz MSwxMCBAQCBzdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfZGlzcGxheShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQo+ICAKPiAgCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9N T0RFU0VUKSkKPiAgCQlpOTE1X3Jlc3RvcmVfdmdhKGRldik7Cj4gLQllbHNlCj4gKwllbHNlIHsK PiAgCQlpOTE1X3JlZGlzYWJsZV92Z2EoZGV2KTsKPiArCQlpbnRlbF9tb2Rlc2V0X3ZnYV9zZXRf c3RhdGUoZGV2LCBmYWxzZSk7Cj4gKwl9Cj4gIH0KPiAgCj4gIGludCBpOTE1X3NhdmVfc3RhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j Cj4gaW5kZXggNzY4NzBmMC4uMjU5NTViZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKPiBAQCAtNDAsNiArNDAsNyBAQAo+ICAjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxw ZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGxp bnV4L2RtYV9yZW1hcHBpbmcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3N0b3BfbWFjaGluZS5oPgo+ ICAKPiAgc3RhdGljIHZvaWQgaW50ZWxfaW5jcmVhc2VfcGxsY2xvY2soc3RydWN0IGRybV9jcnRj ICpjcnRjKTsKPiAgc3RhdGljIHZvaWQgaW50ZWxfY3J0Y191cGRhdGVfY3Vyc29yKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywgYm9vbCBvbik7Cj4gQEAgLTEwMjMyLDUxICsxMDIzMywxOTUgQEAgc3Rh dGljIHZvaWQgaW50ZWxfaW5pdF9xdWlya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCX0K PiAgfQo+ICAKPiAtLyogRGlzYWJsZSB0aGUgVkdBIHBsYW5lIHRoYXQgd2UgbmV2ZXIgdXNlICov Cj4gLXN0YXRpYyB2b2lkIGk5MTVfZGlzYWJsZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiArZW51bSB2Z2Ffb3Agewo+ICsJVkdBX09QX01FTV9ESVNBQkxFLAo+ICsJVkdBX09QX01FTV9F TkFCTEUsCj4gKwlWR0FfT1BfU0NSRUVOX09GRiwKPiArfTsKPiArCj4gK3N0cnVjdCBpOTE1X3Zn YV9vcCB7Cj4gKwllbnVtIHZnYV9vcCBvcDsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4g K307Cj4gKwo+ICsvKgo+ICsgKiAyMSBkZXZpY2VzIHdpdGggOCBmdW5jdGlvbnMgcGVyIGRldmlj ZSBtYXggb24gdGhlIHNhbWUgYnVzLgo+ICsgKiBXZSBkb24ndCBuZWVkIGxvY2tpbmcgZm9yIHRo ZXNlIGR1ZSB0byBzdG9wX21hY2hpbmUoKS4KPiArICovCj4gK3N0YXRpYyB1MTYgdmdhX2NtZFsy MSo4XTsKPiArc3RhdGljIHUxNiB2Z2FfY3RsWzIxKjhdOwo+ICsKPiArLyoKPiArICogRGlzYWJs ZSBJTyBkZWNvZGUgYW5kIFZHQSBicmlkZ2UgZm9yd2FyZGluZwo+ICsgKiBmb3IgZXZlcnlvbmUg ZWxzZSBvbiB0aGUgc2FtZSBidXMuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBpOTE1X3ZnYV9idXNf ZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0JdTggc3IxOwo+IC0JdTMy IHZnYV9yZWcgPSBpOTE1X3ZnYWNudHJsX3JlZyhkZXYpOwo+ICsJc3RydWN0IHBjaV9kZXYgKnBk ZXYsICpzZWxmID0gZGV2LT5wZGV2Owo+ICsJc3RydWN0IHBjaV9idXMgKmJ1czsKPiArCWludCBp Owo+ICAKPiAtCXZnYV9nZXRfdW5pbnRlcnJ1cHRpYmxlKGRldi0+cGRldiwgVkdBX1JTUkNfTEVH QUNZX0lPKTsKPiAtCW91dGIoU1IwMSwgVkdBX1NSX0lOREVYKTsKPiAtCXNyMSA9IGluYihWR0Ff U1JfREFUQSk7Cj4gLQlvdXRiKHNyMSB8IDE8PDUsIFZHQV9TUl9EQVRBKTsKPiAtCXZnYV9wdXQo ZGV2LT5wZGV2LCBWR0FfUlNSQ19MRUdBQ1lfSU8pOwo+IC0JdWRlbGF5KDMwMCk7Cj4gKwlpID0g MDsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmc2VsZi0+YnVzLT5jaGlsZHJlbiwgbm9k ZSkgewo+ICsJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJ1cy0+c2VsZiwgUENJX0JSSURHRV9DT05U Uk9MLCAmdmdhX2N0bFtpXSk7Cj4gKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJ1cy0+c2VsZiwg UENJX0JSSURHRV9DT05UUk9MLCB2Z2FfY3RsW2ldICYgflBDSV9CUklER0VfQ1RMX1ZHQSk7Cj4g IAo+IC0JSTkxNV9XUklURSh2Z2FfcmVnLCBWR0FfRElTUF9ESVNBQkxFKTsKPiAtCVBPU1RJTkdf UkVBRCh2Z2FfcmVnKTsKPiArCQlpZiAoV0FSTl9PTigrK2kgPj0gQVJSQVlfU0laRSh2Z2FfY3Rs KSkpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWkgPSAwOwo+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeShwZGV2LCAmc2VsZi0+YnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewo+ICsJCWlmIChwZGV2 ID09IHNlbGYpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlwY2lfcmVhZF9jb25maWdfd29yZChw ZGV2LCBQQ0lfQ09NTUFORCwgJnZnYV9jbWRbaV0pOwo+ICsJCXBjaV93cml0ZV9jb25maWdfd29y ZChwZGV2LCBQQ0lfQ09NTUFORCwgdmdhX2NtZFtpXSAmIH5QQ0lfQ09NTUFORF9JTyk7Cj4gKwo+ ICsJCWlmIChXQVJOX09OKCsraSA+PSBBUlJBWV9TSVpFKHZnYV9jbWQpKSkKPiArCQkJYnJlYWs7 Cj4gKwl9Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGk5MTVfZW5hYmxlX3ZnYV9tZW0oc3RydWN0 IGRybV9kZXZpY2UgKmRldikKPiArLyoKPiArICogUmVzdG9yZSBJTyBkZWNvZGUgYW5kIFZHQSBi cmlkZ2UgZm9yd2FyZGluZwo+ICsgKiBmb3IgZXZlcnlvbmUgZWxzZSBvbiB0aGUgc2FtZSBidXMu Cj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBpOTE1X3ZnYV9idXNfcmVzdG9yZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+ICB7Cj4gLQkvKiBFbmFibGUgVkdBIG1lbW9yeSBvbiBJbnRlbCBIRCAqLwo+ IC0JaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewo+IC0JCXZnYV9nZXRfdW5pbnRlcnJ1cHRpYmxl KGRldi0+cGRldiwgVkdBX1JTUkNfTEVHQUNZX0lPKTsKPiAtCQlvdXRiKGluYihWR0FfTVNSX1JF QUQpIHwgVkdBX01TUl9NRU1fRU4sIFZHQV9NU1JfV1JJVEUpOwo+IC0JCXZnYV9zZXRfbGVnYWN5 X2RlY29kaW5nKGRldi0+cGRldiwgVkdBX1JTUkNfTEVHQUNZX0lPIHwKPiAtCQkJCQkJICAgVkdB X1JTUkNfTEVHQUNZX01FTSB8Cj4gLQkJCQkJCSAgIFZHQV9SU1JDX05PUk1BTF9JTyB8Cj4gLQkJ CQkJCSAgIFZHQV9SU1JDX05PUk1BTF9NRU0pOwo+IC0JCXZnYV9wdXQoZGV2LT5wZGV2LCBWR0Ff UlNSQ19MRUdBQ1lfSU8pOwo+ICsJc3RydWN0IHBjaV9kZXYgKnBkZXYsICpzZWxmID0gZGV2LT5w ZGV2Owo+ICsJc3RydWN0IHBjaV9idXMgKmJ1czsKPiArCWludCBpOwo+ICsKPiArCWkgPSAwOwo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwZGV2LCAmc2VsZi0+YnVzLT5kZXZpY2VzLCBidXNfbGlz dCkgewo+ICsJCWlmIChwZGV2ID09IHNlbGYpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlwY2lf d3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIHZnYV9jbWRbaV0pOwo+ICsKPiAr CQlpZiAoV0FSTl9PTigrK2kgPj0gQVJSQVlfU0laRSh2Z2FfY21kKSkpCj4gKwkJCWJyZWFrOwo+ ICsJfQo+ICsKPiArCWkgPSAwOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZzZWxmLT5i dXMtPmNoaWxkcmVuLCBub2RlKSB7Cj4gKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJ1cy0+c2Vs ZiwgUENJX0JSSURHRV9DT05UUk9MLCB2Z2FfY3RsW2ldKTsKPiArCj4gKwkJaWYgKFdBUk5fT04o KytpID49IEFSUkFZX1NJWkUodmdhX2N0bCkpKQo+ICsJCQlicmVhazsKPiAgCX0KPiAgfQo+ICAK PiAtdm9pZCBpOTE1X2Rpc2FibGVfdmdhX21lbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICsv Kgo+ICsgKiBIaWRlIG91ciBWR0EgSU8gYWNjZXNzIGZyb20gdGhlIHJlc3Qgb2YgdGhlIHN5c3Rl bQo+ICsgKiB1c2luZyBzdG9wX21hY2hpbmUoKS4KPiArICoKPiArICogTm90ZSB0aGF0IHdlIGFz c3VtZSB0aGF0IHRoZSBJR0QgaXMgb24gdGhlIHJvb3QgYnVzLgo+ICsgKi8KPiArc3RhdGljIGlu dCBpOTE1X3ZnYV9zdG9wX21hY2hpbmVfY2Iodm9pZCAqZGF0YSkKPiAgewo+IC0JLyogRGlzYWJs ZSBWR0EgbWVtb3J5IG9uIEludGVsIEhEICovCj4gLQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7 Cj4gLQkJdmdhX2dldF91bmludGVycnVwdGlibGUoZGV2LT5wZGV2LCBWR0FfUlNSQ19MRUdBQ1lf SU8pOwo+IC0JCW91dGIoaW5iKFZHQV9NU1JfUkVBRCkgJiB+VkdBX01TUl9NRU1fRU4sIFZHQV9N U1JfV1JJVEUpOwo+IC0JCXZnYV9zZXRfbGVnYWN5X2RlY29kaW5nKGRldi0+cGRldiwgVkdBX1JT UkNfTEVHQUNZX0lPIHwKPiAtCQkJCQkJICAgVkdBX1JTUkNfTk9STUFMX0lPIHwKPiAtCQkJCQkJ ICAgVkdBX1JTUkNfTk9STUFMX01FTSk7Cj4gLQkJdmdhX3B1dChkZXYtPnBkZXYsIFZHQV9SU1JD X0xFR0FDWV9JTyk7Cj4gKwlzdHJ1Y3QgaTkxNV92Z2Ffb3AgKm9wID0gZGF0YTsKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBvcC0+ZGV2Owo+ICsJdTE2IGNtZDsKPiArCXU4IHRtcDsKPiAr Cj4gKwlpOTE1X3ZnYV9idXNfZGlzYWJsZShkZXYpOwo+ICsKPiArCXBjaV9yZWFkX2NvbmZpZ193 b3JkKGRldi0+cGRldiwgUENJX0NPTU1BTkQsICZjbWQpOwo+ICsJcGNpX3dyaXRlX2NvbmZpZ193 b3JkKGRldi0+cGRldiwgUENJX0NPTU1BTkQsIGNtZCB8IFBDSV9DT01NQU5EX0lPKTsKPiArCj4g Kwlzd2l0Y2ggKG9wLT5vcCkgewo+ICsJY2FzZSBWR0FfT1BfTUVNX0RJU0FCTEU6Cj4gKwkJdG1w ID0gaW5iKFZHQV9NU1JfUkVBRCk7Cj4gKwkJdG1wICY9IH5WR0FfTVNSX01FTV9FTjsKPiArCQlv dXRiKHRtcCwgVkdBX01TUl9XUklURSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFZHQV9PUF9NRU1f RU5BQkxFOgo+ICsJCXRtcCA9IGluYihWR0FfTVNSX1JFQUQpOwo+ICsJCXRtcCB8PSBWR0FfTVNS X01FTV9FTjsKPiArCQlvdXRiKHRtcCwgVkdBX01TUl9XUklURSk7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIFZHQV9PUF9TQ1JFRU5fT0ZGOgo+ICsJCW91dGIoU1IwMSwgVkdBX1NSX0lOREVYKTsKPiAr CQl0bXAgPSBpbmIoVkdBX1NSX0RBVEEpOwo+ICsJCXRtcCB8PSAxIDw8IDU7Cj4gKwkJb3V0Yih0 bXAsIFZHQV9TUl9EQVRBKTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlwY2lfd3JpdGVfY29u ZmlnX3dvcmQoZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKPiArCj4gKwlpOTE1X3ZnYV9i dXNfcmVzdG9yZShkZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBNTUlPIGJh c2VkIFZHQSByZWdpc3RlciBhY2Nlc3MsIHByZS1HZW41IG9ubHkgKi8KPiArc3RhdGljIHZvaWQg aTkxNV92Z2FfZXhlY3V0ZV9tbWlvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gdmdhX29w IG9wKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOwo+ICsJdTggdG1wOwo+ICsKPiArCXN3aXRjaCAob3ApIHsKPiArCWNhc2UgVkdB X09QX01FTV9ESVNBQkxFOgo+ICsJCXRtcCA9IEk5MTVfUkVBRDgoVkdBX01TUl9SRUFEKTsKPiAr CQl0bXAgJj0gflZHQV9NU1JfTUVNX0VOOwo+ICsJCUk5MTVfV1JJVEU4KFZHQV9NU1JfV1JJVEUs IHRtcCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFZHQV9PUF9NRU1fRU5BQkxFOgo+ICsJCXRtcCA9 IEk5MTVfUkVBRDgoVkdBX01TUl9SRUFEKTsKPiArCQl0bXAgfD0gVkdBX01TUl9NRU1fRU47Cj4g KwkJSTkxNV9XUklURTgoVkdBX01TUl9XUklURSwgdG1wKTsKPiArCQlicmVhazsKPiArCWNhc2Ug VkdBX09QX1NDUkVFTl9PRkY6Cj4gKwkJSTkxNV9XUklURTgoVkdBX1NSX0lOREVYLCBTUjAxKTsK PiArCQl0bXAgPSBJOTE1X1JFQUQ4KFZHQV9TUl9EQVRBKTsKPiArCQl0bXAgfD0gMSA8PCA1Owo+ ICsJCUk5MTVfV1JJVEU4KFZHQV9TUl9EQVRBLCB0bXApOwo+ICsJCWJyZWFrOwo+ICAJfQo+ICB9 Cj4gIAo+ICtzdGF0aWMgdm9pZCBpOTE1X3ZnYV9leGVjdXRlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIGVudW0gdmdhX29wIG9wKQo+ICt7Cj4gKwkvKiBXYUVuYWJsZVZHQUFjY2Vzc1Rocm91Z2hJ T1BvcnQ6Y3RnLGVsZyxpbGssc25iLGl2Yix2bHYsaHN3ICovCj4gKwlpZiAoSVNfRzRYKGRldikg fHwgSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNSkgewo+ICsJCXN0cnVjdCBpOTE1X3ZnYV9vcCB2 Z2Ffb3AgPSB7Cj4gKwkJCS5vcCA9IG9wLAo+ICsJCQkuZGV2ID0gZGV2LAo+ICsJCX07Cj4gKwo+ ICsJCXN0b3BfbWFjaGluZShpOTE1X3ZnYV9zdG9wX21hY2hpbmVfY2IsICZ2Z2Ffb3AsIE5VTEwp Owo+ICsJfSBlbHNlIHsKPiArCQlpOTE1X3ZnYV9leGVjdXRlX21taW8oZGV2LCBvcCk7Cj4gKwl9 Cj4gK30KPiArCj4gKy8qIERpc2FibGUgdGhlIFZHQSBwbGFuZSB0aGF0IHdlIG5ldmVyIHVzZSAq Lwo+ICtzdGF0aWMgdm9pZCBpOTE1X2Rpc2FibGVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4gKwl1MzIgdmdhX3JlZyA9IGk5MTVfdmdhY250cmxfcmVnKGRldik7Cj4gKwl1MTYg Z21jaF9jdHJsOwo+ICsKPiArCS8qIGFscmVhZHkgZGlzYWJsZWQ/ICovCj4gKwlpZiAoSTkxNV9S RUFEKHZnYV9yZWcpICYgVkdBX0RJU1BfRElTQUJMRSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJcGNp X3JlYWRfY29uZmlnX3dvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIElOVEVMX0lORk8oZGV2KS0+ Z2VuID49IDYgPwo+ICsJCQkgICAgIFNOQl9HTUNIX0NUUkwgOiBJTlRFTF9HTUNIX0NUUkwsICZn bWNoX2N0cmwpOwo+ICsJaWYgKGdtY2hfY3RybCAmIElOVEVMX0dNQ0hfVkdBX0RJU0FCTEUpCj4g KwkJRFJNX0VSUk9SKCJWR0EgcGxhbmUgZW5hYmxlZCB3aGlsZSBWR0EgZGlzYWJsZWQgdmlhIEdN Q0ggY29udHJvbFxuIik7Cj4gKwo+ICsJaTkxNV92Z2FfZXhlY3V0ZShkZXYsIFZHQV9PUF9TQ1JF RU5fT0ZGKTsKPiArCj4gKwl1ZGVsYXkoMzAwKTsKPiArCj4gKwlJOTE1X1dSSVRFKHZnYV9yZWcs IFZHQV9ESVNQX0RJU0FCTEUpOwo+ICsJUE9TVElOR19SRUFEKHZnYV9yZWcpOwo+ICt9Cj4gKwo+ ICB2b2lkIGludGVsX21vZGVzZXRfaW5pdF9odyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7 Cj4gIAlpbnRlbF9wcmVwYXJlX2RkaShkZXYpOwo+IEBAIC0xMDU1Myw3ICsxMDY5OCw2IEBAIHZv aWQgaTkxNV9yZWRpc2FibGVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlpZiAoSTkx NV9SRUFEKHZnYV9yZWcpICE9IFZHQV9ESVNQX0RJU0FCTEUpIHsKPiAgCQlEUk1fREVCVUdfS01T KCJTb21ldGhpbmcgZW5hYmxlZCBWR0EgcGxhbmUsIGRpc2FibGluZyBpdFxuIik7Cj4gIAkJaTkx NV9kaXNhYmxlX3ZnYShkZXYpOwo+IC0JCWk5MTVfZGlzYWJsZV92Z2FfbWVtKGRldik7Cj4gIAl9 Cj4gIH0KPiAgCj4gQEAgLTEwNzU1LDcgKzEwODk5LDcgQEAgdm9pZCBpbnRlbF9tb2Rlc2V0X2Ns ZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCj4gIAlpbnRlbF9kaXNhYmxlX2ZiYyhk ZXYpOwo+ICAKPiAtCWk5MTVfZW5hYmxlX3ZnYV9tZW0oZGV2KTsKPiArCWludGVsX21vZGVzZXRf dmdhX3NldF9zdGF0ZShkZXYsIHRydWUpOwo+ICAKPiAgCWludGVsX2Rpc2FibGVfZ3RfcG93ZXJz YXZlKGRldik7Cj4gIAo+IEBAIC0xMDc5OCwxMiArMTA5NDIsMzYgQEAgaW50IGludGVsX21vZGVz ZXRfdmdhX3NldF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIHN0YXRlKQo+ICAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAg CXUxNiBnbWNoX2N0cmw7Cj4gIAo+IC0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2X3ByaXYtPmJy aWRnZV9kZXYsIElOVEVMX0dNQ0hfQ1RSTCwgJmdtY2hfY3RybCk7Cj4gLQlpZiAoc3RhdGUpCj4g LQkJZ21jaF9jdHJsICY9IH5JTlRFTF9HTUNIX1ZHQV9ESVNBQkxFOwo+IC0JZWxzZQo+IC0JCWdt Y2hfY3RybCB8PSBJTlRFTF9HTUNIX1ZHQV9ESVNBQkxFOwo+IC0JcGNpX3dyaXRlX2NvbmZpZ193 b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBJTlRFTF9HTUNIX0NUUkwsIGdtY2hfY3RybCk7Cj4g KwkvKiBJcyBWR0EgdG90YWxseSBkaXNhYmxlZCBmb3IgdGhlIElHRD8gKi8KPiArCXBjaV9yZWFk X2NvbmZpZ193b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBJTlRFTF9JTkZPKGRldiktPmdlbiA+ PSA2ID8KPiArCQkJICAgICBTTkJfR01DSF9DVFJMIDogSU5URUxfR01DSF9DVFJMLCAmZ21jaF9j dHJsKTsKPiArCWlmIChnbWNoX2N0cmwgJiBJTlRFTF9HTUNIX1ZHQV9ESVNBQkxFKQo+ICsJCXJl dHVybiAwOwo+ICsKPiArCWlmIChzdGF0ZSkgewo+ICsJCWk5MTVfdmdhX2V4ZWN1dGUoZGV2LCBW R0FfT1BfTUVNX0VOQUJMRSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogTGVhdmUgUENJX0NPTU1BTkRf SU8gYWxvbmUgZm9yIG5vdy4gdmdhYXJiCj4gKwkJICogc2hvdWxkIHJlLWVuYWJsZSBpdCBpZiBh bmQgd2hlbiBuZWVkZWQuCj4gKwkJICovCj4gKwo+ICsJCXZnYV9zZXRfbGVnYWN5X2RlY29kaW5n KGRldi0+cGRldiwgVkdBX1JTUkNfTEVHQUNZX0lPIHwKPiArCQkJCQkJICAgVkdBX1JTUkNfTEVH QUNZX01FTSB8Cj4gKwkJCQkJCSAgIFZHQV9SU1JDX05PUk1BTF9JTyB8Cj4gKwkJCQkJCSAgIFZH QV9SU1JDX05PUk1BTF9NRU0pOwo+ICsJfSBlbHNlIHsKPiArCQl1MTYgY21kOwo+ICsKPiArCQlp OTE1X3ZnYV9leGVjdXRlKGRldiwgVkdBX09QX01FTV9ESVNBQkxFKTsKPiArCj4gKwkJcGNpX3Jl YWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Cj4gKwkJY21kICY9 IH5QQ0lfQ09NTUFORF9JTzsKPiArCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBQ Q0lfQ09NTUFORCwgY21kKTsKPiArCj4gKwkJdmdhX3NldF9sZWdhY3lfZGVjb2RpbmcoZGV2LT5w ZGV2LCBWR0FfUlNSQ19OT1JNQUxfTUVNKTsKPiArCX0KPiArCj4gIAlyZXR1cm4gMDsKPiAgfQo+ ICAKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK