From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 1/3] drm/i915/execlists: Reinitialise context image after GPU hang Date: Mon, 03 Oct 2016 15:25:16 +0300 Message-ID: <87twct4o2b.fsf@gaia.fi.intel.com> References: <20160930075032.30967-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0DE666E114 for ; Mon, 3 Oct 2016 12:25:34 +0000 (UTC) In-Reply-To: <20160930075032.30967-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gT24gQnJh c3dlbGwsIGF0IGxlYXN0LCB3ZSBvYnNlcnZlIHRoYXQgdGhlIGNvbnRleHQgaW1hZ2UgaXMgd3Jp dHRlbiBpbgo+IG11bHRpcGxlIHBoYXNlcy4gVGhlIGZpcnN0IHBoYXNlIGlzIHRvIGNsZWFyIHRo ZSByZWdpc3RlciBzdGF0ZSwgYW5kCj4gc3Vic2VxdWVudGx5IHJld3JpdGUgaXQuIEEgR1BVIHJl c2V0IGF0IHRoZSByaWdodCBtb21lbnQgY2FuIGludGVycnVwdAo+IHRoZSBjb250ZXh0IHVwZGF0 ZSBsZWF2aW5nIGl0IGNvcnJ1cHQsIGFuZCBvdXIgdXBkYXRlIG9mIHRoZSBSSU5HX0hFQUQKPiBp cyBub3Qgc3VmZmljaWVudCB0byByZXN0YXJ0IHRoZSBlbmdpbmUgYWZ0ZXJ3YXJkcy4gVG8gcmVj b3Zlciwgd2UgbmVlZAo+IHRvIHJlc2V0IHRoZSByZWdpc3RlcnMgYmFjayB0byB0aGVpciBvcmln aW5hbCB2YWx1ZXMuIFRoZSBjb250ZXh0IHN0YXRlCj4gaXMgbG9zdC4gV2hhdCB3ZSBuZWVkIGlz IGEgYmV0dGVyIG1lY2hhbmlzbSB0byBzZXJpYWxpc2UgdGhlIHJlc2V0IHdpdGgKPiBwZW5kaW5n IGZsdXNoZXMgZnJvbSB0aGUgR1BVLgo+Cj4gRml4ZXM6IDgyMWVkN2RmNmUyYSAoImRybS9pOTE1 OiBVcGRhdGUgcmVzZXQgcGF0aCB0byBmaXggaW5jb21wbGV0ZSByZXF1ZXN0cyIpCj4gU2lnbmVk LW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IE1p a2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmMuYyB8IDk1ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDM5IGRlbGV0 aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCAyZDhlYjJlYjJiNzIu LmQ2ZTc2MjcxOGZmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gQEAgLTIyNiwx MCArMjI2LDE2IEBAIGVudW0gewo+ICAvKiBUeXBpY2FsIHNpemUgb2YgdGhlIGF2ZXJhZ2UgcmVx dWVzdCAoMiBwaXBlY29udHJvbHMgYW5kIGEgTUlfQkIpICovCj4gICNkZWZpbmUgRVhFQ0xJU1RT X1JFUVVFU1RfU0laRSA2NCAvKiBieXRlcyAqLwo+ICAKPiArI2RlZmluZSBXQV9UQUlMX0RXT1JE UyAyCj4gKwo+ICBzdGF0aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X2RlZmVycmVkX2FsbG9jKHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gIAkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSk7Cj4gIHN0YXRpYyBpbnQgaW50ZWxfbHJfY29udGV4dF9waW4oc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgCQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSk7Cj4gK3N0YXRpYyB2b2lkIGV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ19z dGF0ZSwKPiArCQkJCSAgICAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiArCQkJCSAg ICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJICAgICBzdHJ1Y3QgaW50 ZWxfcmluZyAqcmluZyk7Cj4gIAo+ICAvKioKPiAgICogaW50ZWxfc2FuaXRpemVfZW5hYmxlX2V4 ZWNsaXN0cygpIC0gc2FuaXRpemUgaTkxNS5lbmFibGVfZXhlY2xpc3RzCj4gQEAgLTcwNyw3ICs3 MTMsNiBAQCBzdGF0aWMgaW50IGludGVsX2xyX2NvbnRleHRfcGluKHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHgsCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9ICZjdHgtPmVu Z2luZVtlbmdpbmUtPmlkXTsKPiAgCXZvaWQgKnZhZGRyOwo+IC0JdTMyICpscmNfcmVnX3N0YXRl Owo+ICAJaW50IHJldDsKPiAgCj4gIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZjdHgtPmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+IEBAIC03MjYsMTcgKzczMSwxNiBAQCBzdGF0aWMgaW50IGludGVs X2xyX2NvbnRleHRfcGluKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gIAkJZ290byB1 bnBpbl92bWE7Cj4gIAl9Cj4gIAo+IC0JbHJjX3JlZ19zdGF0ZSA9IHZhZGRyICsgTFJDX1NUQVRF X1BOICogUEFHRV9TSVpFOwo+IC0KPiAgCXJldCA9IGludGVsX3JpbmdfcGluKGNlLT5yaW5nKTsK PiAgCWlmIChyZXQpCj4gIAkJZ290byB1bnBpbl9tYXA7Cj4gIAo+ICAJaW50ZWxfbHJfY29udGV4 dF9kZXNjcmlwdG9yX3VwZGF0ZShjdHgsIGVuZ2luZSk7Cj4gIAo+IC0JbHJjX3JlZ19zdGF0ZVtD VFhfUklOR19CVUZGRVJfU1RBUlQrMV0gPQo+ICsJY2UtPmxyY19yZWdfc3RhdGUgPSB2YWRkciAr IExSQ19TVEFURV9QTiAqIFBBR0VfU0laRTsKPiArCWNlLT5scmNfcmVnX3N0YXRlW0NUWF9SSU5H X0JVRkZFUl9TVEFSVCsxXSA9Cj4gIAkJaTkxNV9nZ3R0X29mZnNldChjZS0+cmluZy0+dm1hKTsK PiAtCWNlLT5scmNfcmVnX3N0YXRlID0gbHJjX3JlZ19zdGF0ZTsKPiArCj4gIAljZS0+c3RhdGUt Pm9iai0+ZGlydHkgPSB0cnVlOwo+ICAKPiAgCS8qIEludmFsaWRhdGUgR3VDIFRMQi4gKi8KPiBA QCAtMTI4NCw4ICsxMjg4LDE0IEBAIHN0YXRpYyB2b2lkIHJlc2V0X2NvbW1vbl9yaW5nKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0 ID0gZW5naW5lLT5leGVjbGlzdF9wb3J0Owo+ICAJc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0g JnJlcXVlc3QtPmN0eC0+ZW5naW5lW2VuZ2luZS0+aWRdOwo+ICAKPiArCWV4ZWNsaXN0c19pbml0 X3JlZ19zdGF0ZShjZS0+bHJjX3JlZ19zdGF0ZSwKPiArCQkJCSByZXF1ZXN0LT5jdHgsIGVuZ2lu ZSwgY2UtPnJpbmcpOwo+ICsKPiAgCS8qIE1vdmUgdGhlIFJJTkdfSEVBRCBvbnRvIHRoZSBicmVh ZGNydW1iLCBwYXN0IHRoZSBoYW5naW5nIGJhdGNoICovCj4gKwljZS0+bHJjX3JlZ19zdGF0ZVtD VFhfUklOR19CVUZGRVJfU1RBUlQrMV0gPQo+ICsJCWk5MTVfZ2d0dF9vZmZzZXQoY2UtPnJpbmct PnZtYSk7Cj4gIAljZS0+bHJjX3JlZ19zdGF0ZVtDVFhfUklOR19IRUFEKzFdID0gcmVxdWVzdC0+ cG9zdGZpeDsKPiArCj4gIAlyZXF1ZXN0LT5yaW5nLT5oZWFkID0gcmVxdWVzdC0+cG9zdGZpeDsK PiAgCXJlcXVlc3QtPnJpbmctPmxhc3RfcmV0aXJlZF9oZWFkID0gLTE7Cj4gIAlpbnRlbF9yaW5n X3VwZGF0ZV9zcGFjZShyZXF1ZXN0LT5yaW5nKTsKPiBAQCAtMTMwNSw2ICsxMzE1LDkgQEAgc3Rh dGljIHZvaWQgcmVzZXRfY29tbW9uX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAo+ICAJR0VNX0JVR19PTihyZXF1ZXN0LT5jdHggIT0gcG9ydFswXS5yZXF1ZXN0LT5jdHgpOwo+ ICAJcG9ydFswXS5jb3VudCA9IDA7Cj4gIAlwb3J0WzFdLmNvdW50ID0gMDsKPiArCj4gKwkvKiBS ZXNldCBXYUlkbGVMaXRlUmVzdG9yZTpiZHcsc2tsIGFzIHdlbGwgKi8KPiArCXJlcXVlc3QtPnRh aWwgPSByZXF1ZXN0LT53YV90YWlsIC0gV0FfVEFJTF9EV09SRFMgKiBzaXplb2YodTMyKTsKPiAg fQo+ICAKPiAgc3RhdGljIGludCBpbnRlbF9sb2dpY2FsX3JpbmdfZW1pdF9wZHBzKHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+IEBAIC0xNTQyLDcgKzE1NTUsNiBAQCBzdGF0aWMg dm9pZCBieHRfYV9zZXFub19iYXJyaWVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgICogdXNlZCBhcyBhIHdvcmthcm91bmQgZm9yIG5vdCBiZWluZyBhbGxvd2VkIHRvIGRvIGxp dGUKPiAgICogcmVzdG9yZSB3aXRoIEhFQUQ9PVRBSUwgKFdhSWRsZUxpdGVSZXN0b3JlKS4KPiAg ICovCj4gLSNkZWZpbmUgV0FfVEFJTF9EV09SRFMgMgo+ICAKPiAgc3RhdGljIGludCBnZW44X2Vt aXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4gIHsKPiBA QCAtMTg4OSwzOCArMTkwMSwxMyBAQCBzdGF0aWMgdTMyIGludGVsX2xyX2luZGlyZWN0X2N0eF9v ZmZzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJcmV0dXJuIGluZGlyZWN0 X2N0eF9vZmZzZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQKPiAtcG9wdWxhdGVfbHJfY29udGV4 dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+IC0JCSAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqY3R4X29iaiwKPiAtCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAo+IC0JCSAgICBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZykKPiArc3RhdGljIHZvaWQgZXhl Y2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVnX3N0YXRlLAo+ICsJCQkJICAgICBzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICsJCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gKwkJCQkgICAgIHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nKQo+ICB7Cj4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmk5MTU7Cj4gLQlzdHJ1Y3Qg aTkxNV9od19wcGd0dCAqcHBndHQgPSBjdHgtPnBwZ3R0Owo+IC0Jdm9pZCAqdmFkZHI7Cj4gLQl1 MzIgKnJlZ19zdGF0ZTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKCFwcGd0dCkKPiAtCQlwcGd0 dCA9IGRldl9wcml2LT5tbS5hbGlhc2luZ19wcGd0dDsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9v YmplY3Rfc2V0X3RvX2NwdV9kb21haW4oY3R4X29iaiwgdHJ1ZSk7Cj4gLQlpZiAocmV0KSB7Cj4g LQkJRFJNX0RFQlVHX0RSSVZFUigiQ291bGQgbm90IHNldCB0byBDUFUgZG9tYWluXG4iKTsKPiAt CQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCXZhZGRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9t YXAoY3R4X29iaiwgSTkxNV9NQVBfV0IpOwo+IC0JaWYgKElTX0VSUih2YWRkcikpIHsKPiAtCQly ZXQgPSBQVFJfRVJSKHZhZGRyKTsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJDb3VsZCBub3QgbWFw IG9iamVjdCBwYWdlcyEgKCVkKVxuIiwgcmV0KTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0J Y3R4X29iai0+ZGlydHkgPSB0cnVlOwo+IC0KPiAtCS8qIFRoZSBzZWNvbmQgcGFnZSBvZiB0aGUg Y29udGV4dCBvYmplY3QgY29udGFpbnMgc29tZSBmaWVsZHMgd2hpY2ggbXVzdAo+IC0JICogYmUg c2V0IHVwIHByaW9yIHRvIHRoZSBmaXJzdCBleGVjdXRpb24uICovCj4gLQlyZWdfc3RhdGUgPSB2 YWRkciArIExSQ19TVEFURV9QTiAqIFBBR0VfU0laRTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiArCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpw cGd0dCA9IGN0eC0+cHBndHQgPzogZGV2X3ByaXYtPm1tLmFsaWFzaW5nX3BwZ3R0Owo+ICAKPiAg CS8qIEEgY29udGV4dCBpcyBhY3R1YWxseSBhIGJpZyBiYXRjaCBidWZmZXIgd2l0aCBzZXZlcmFs IE1JX0xPQURfUkVHSVNURVJfSU1NCj4gIAkgKiBjb21tYW5kcyBmb2xsb3dlZCBieSAocmVnLCB2 YWx1ZSkgcGFpcnMuIFRoZSB2YWx1ZXMgd2UgYXJlIHNldHRpbmcgaGVyZSBhcmUKPiBAQCAtMTkz NCw3ICsxOTIxLDcgQEAgcG9wdWxhdGVfbHJfY29udGV4dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqY3R4LAo+ICAJCSAgICAgICBfTUFTS0VEX0JJVF9FTkFCTEUoQ1RYX0NUUkxfSU5ISUJJVF9T WU5fQ1RYX1NXSVRDSCB8Cj4gIAkJCQkJICBDVFhfQ1RSTF9FTkdJTkVfQ1RYX1JFU1RPUkVfSU5I SUJJVCB8Cj4gIAkJCQkJICAoSEFTX1JFU09VUkNFX1NUUkVBTUVSKGRldl9wcml2KSA/Cj4gLQkJ CQkJICAgIENUWF9DVFJMX1JTX0NUWF9FTkFCTEUgOiAwKSkpOwo+ICsJCQkJCSAgIENUWF9DVFJM X1JTX0NUWF9FTkFCTEUgOiAwKSkpOwo+ICAJQVNTSUdOX0NUWF9SRUcocmVnX3N0YXRlLCBDVFhf UklOR19IRUFELCBSSU5HX0hFQUQoZW5naW5lLT5tbWlvX2Jhc2UpLAo+ICAJCSAgICAgICAwKTsK PiAgCUFTU0lHTl9DVFhfUkVHKHJlZ19zdGF0ZSwgQ1RYX1JJTkdfVEFJTCwgUklOR19UQUlMKGVu Z2luZS0+bW1pb19iYXNlKSwKPiBAQCAtMTk0Niw3ICsxOTMzLDcgQEAgcG9wdWxhdGVfbHJfY29u dGV4dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAJCSAgICAgICBSSU5HX1NUQVJU KGVuZ2luZS0+bW1pb19iYXNlKSwgMCk7Cj4gIAlBU1NJR05fQ1RYX1JFRyhyZWdfc3RhdGUsIENU WF9SSU5HX0JVRkZFUl9DT05UUk9MLAo+ICAJCSAgICAgICBSSU5HX0NUTChlbmdpbmUtPm1taW9f YmFzZSksCj4gLQkJICAgICAgICgocmluZy0+c2l6ZSAtIFBBR0VfU0laRSkgJiBSSU5HX05SX1BB R0VTKSB8IFJJTkdfVkFMSUQpOwo+ICsJCSAgICAgICAocmluZy0+c2l6ZSAtIFBBR0VfU0laRSkg fCBSSU5HX1ZBTElEKTsKClBhdGNoIGxvb2tzIGdvb2QuCgpSZXZpZXdlZC1ieTogTWlrYSBLdW9w cGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+CgpOb3QgZXhhY3RseSBwcm9ibGVtcyB3aXRo IHRoaXMgcGF0Y2gsIGJ1dCBhcyB3ZSBhcmUgaW4KdGhlIHRlcnJpdG9yeToKCkkgc3RpbGwgd291 bGQgbGlrZSB0aGUgcmluZy0+c2l6ZSBzZXR0aW5nIHRvIGJlIGFjY29tcGFuaWVkCndpdGggY29t bWVudCBhYm91dCBpdCBtYXRjaGluZyBwYWdlIHNoaWZ0LiBJIGhhdmUgZmFsbGVuCmZvciBpdCB0 d2ljZSBub3cgc28gSSBzdXNwZWN0IHRoZSBuZXh0IHJlYWRlciB3aWxsIHRvby4KCkFuZCBmb3Ig dGhhdCBtYXR0ZXIsIHJlbW92YWwgb2YgbWlzbGVhZGluZyBjb21tZW50CgovICogSXQgaXMgd3Jp dHRlbiB0byB0aGUgY29udGV4dCBpbWFnZSBpbiBleGVjbGlzdHNfdXBkYXRlX2NvbnRleHQoKSAq LwoKaW4gZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKCkKClRoYW5rcywKLU1pa2EKCgo+ICAJQVNT SUdOX0NUWF9SRUcocmVnX3N0YXRlLCBDVFhfQkJfSEVBRF9VLAo+ICAJCSAgICAgICBSSU5HX0JC QUREUl9VRFcoZW5naW5lLT5tbWlvX2Jhc2UpLCAwKTsKPiAgCUFTU0lHTl9DVFhfUkVHKHJlZ19z dGF0ZSwgQ1RYX0JCX0hFQURfTCwKPiBAQCAtMjAyNCw2ICsyMDExLDM2IEBAIHBvcHVsYXRlX2xy X2NvbnRleHQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgCQlBU1NJR05fQ1RYX1JF RyhyZWdfc3RhdGUsIENUWF9SX1BXUl9DTEtfU1RBVEUsIEdFTjhfUl9QV1JfQ0xLX1NUQVRFLAo+ ICAJCQkgICAgICAgbWFrZV9ycGNzKGRldl9wcml2KSk7Cj4gIAl9Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQKPiArcG9wdWxhdGVfbHJfY29udGV4dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 LAo+ICsJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X29iaiwKPiArCQkgICAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCSAgICBzdHJ1Y3QgaW50ZWxfcmlu ZyAqcmluZykKPiArewo+ICsJdm9pZCAqdmFkZHI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9 IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihjdHhfb2JqLCB0cnVlKTsKPiArCWlm IChyZXQpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJDb3VsZCBub3Qgc2V0IHRvIENQVSBkb21h aW5cbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJdmFkZHIgPSBpOTE1X2dlbV9v YmplY3RfcGluX21hcChjdHhfb2JqLCBJOTE1X01BUF9XQik7Cj4gKwlpZiAoSVNfRVJSKHZhZGRy KSkgewo+ICsJCXJldCA9IFBUUl9FUlIodmFkZHIpOwo+ICsJCURSTV9ERUJVR19EUklWRVIoIkNv dWxkIG5vdCBtYXAgb2JqZWN0IHBhZ2VzISAoJWQpXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwljdHhfb2JqLT5kaXJ0eSA9IHRydWU7Cj4gKwo+ICsJLyogVGhlIHNlY29uZCBw YWdlIG9mIHRoZSBjb250ZXh0IG9iamVjdCBjb250YWlucyBzb21lIGZpZWxkcyB3aGljaCBtdXN0 Cj4gKwkgKiBiZSBzZXQgdXAgcHJpb3IgdG8gdGhlIGZpcnN0IGV4ZWN1dGlvbi4gKi8KPiArCj4g KwlleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodmFkZHIgKyBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJ WkUsCj4gKwkJCQkgY3R4LCBlbmdpbmUsIHJpbmcpOwo+ICAKPiAgCWk5MTVfZ2VtX29iamVjdF91 bnBpbl9tYXAoY3R4X29iaik7Cj4gIAo+IC0tIAo+IDIuOS4zCj4KPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QK PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==