From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 7/8] drm/i915: Keep track of reserved execlist ports Date: Thu, 21 Sep 2017 15:08:20 +0300 Message-ID: <87k20s1cgb.fsf@gaia.fi.intel.com> References: <20170920143705.11277-1-mika.kuoppala@intel.com> <20170920143705.11277-8-mika.kuoppala@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8CEFA6E1D0 for ; Thu, 21 Sep 2017 12:10:16 +0000 (UTC) In-Reply-To: <20170920143705.11277-8-mika.kuoppala@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org TWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+IHdyaXRlczoKCj4g VG8gZnVydGhlciBlbmNoYW5jZSBwb3J0IHByb2Nlc3NpbmcsIGtlZXAgdHJhY2sgb2YKPiByZXNl cnZlZCBwb3J0cy4gVGhpcyB3YXkgd2UgY2FuIGl0ZXJhdGUgb25seSB0aGUgdXNlZCBzdWJzZXQK PiBvZiBwb3J0IHNwYWNlLiBOb3RlIHRoYXQgd2UgbGlmdCB0aGUgcmVzcG9uc2liaWxpdHkgb2YK PiBleGVjbGlzdHNfc3VibWl0X3JlcXVlc3QoKSB0byBpbnNwZWN0IGh3IGF2YWlsYWJpbGl0eSBh bmQKCnMvZXhlY2xpc3Rfc3VibWl0X3JlcXVlc3QvaW5zZXJ0X3JlcXVlc3QuCgotTWlrYQoKPiBh bHdheXMgZG8gZGVxdWV1aW5nLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IG9ubHkgdGhlIGlycQo+ IGhhbmRsZXIgd2lsbCBiZSByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBhdmFpbGFi bGUgcG9ydHMuCj4KPiB2MjogcmViYXNlLCBjb21tZW50IGZpeCwgUkVBRF9PTkNFIG9ubHkgb3V0 c2lkZSBvZiBpcnEgaGFuZGxlciAoQ2hyaXMpCj4KPiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IE1pY2hhxYIgV2luaWFyc2tpIDxtaWNoYWwud2luaWFy c2tpQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3Bw YWxhQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3Vi bWlzc2lvbi5jIHwgNTEgKysrKysrKysrLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9pcnEuYyAgICAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZW5naW5lX2NzLmMgICAgIHwgIDcgKystCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jICAgICAgICAgICB8IDkwICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggICAgfCA1NSArKysrKysrKysr KysrLS0tLS0KPiAgNSBmaWxlcyBjaGFuZ2VkLCAxMjkgaW5zZXJ0aW9ucygrKSwgNzYgZGVsZXRp b25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3Vi bWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCj4g aW5kZXggMjVjOWJhYzk0YzM5Li4zNTlmNTdhNTljYmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCj4gQEAgLTQ4Nyw3ICs0ODcsNyBAQCBzdGF0aWMg dm9pZCBndWNfcmluZ19kb29yYmVsbChzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpCj4g ICAqIEBlbmdpbmU6IGVuZ2luZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1hbmRzCj4gICAqCj4g ICAqIFRoZSBvbmx5IGVycm9yIGhlcmUgYXJpc2VzIGlmIHRoZSBkb29yYmVsbCBoYXJkd2FyZSBp c24ndCBmdW5jdGlvbmluZwo+IC0gKiBhcyBleHBlY3RlZCwgd2hpY2ggcmVhbGx5IHNob3Vsbid0 IGhhcHBlbi4KPiArICogYXMgZXhwZWN0ZWQsIHdoaWNoIHJlYWxseSBzaG91bGRuJ3QgaGFwcGVu Lgo+ICAgKi8KPiAgc3RhdGljIHZvaWQgaTkxNV9ndWNfc3VibWl0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiAgewo+IEBAIC00OTUsMTcgKzQ5NSwxOSBAQCBzdGF0aWMgdm9pZCBp OTE1X2d1Y19zdWJtaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJc3RydWN0 IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7Cj4gIAlzdHJ1Y3QgaTkxNV9ndWNfY2xp ZW50ICpjbGllbnQgPSBndWMtPmV4ZWNidWZfY2xpZW50Owo+ICAJc3RydWN0IGludGVsX2VuZ2lu ZV9leGVjbGlzdCAqIGNvbnN0IGVsID0gJmVuZ2luZS0+ZXhlY2xpc3Q7Cj4gLQlzdHJ1Y3QgZXhl Y2xpc3RfcG9ydCAqcG9ydCA9IGVsLT5wb3J0Owo+ICAJY29uc3QgdW5zaWduZWQgaW50IGVuZ2lu ZV9pZCA9IGVuZ2luZS0+aWQ7Cj4gIAl1bnNpZ25lZCBpbnQgbjsKPiAgCj4gLQlmb3IgKG4gPSAw OyBuIDwgQVJSQVlfU0laRShlbC0+cG9ydCk7IG4rKykgewo+ICsJZm9yIChuID0gMDsgbiA8IGV4 ZWNsaXN0X2FjdGl2ZV9wb3J0cyhlbCk7IG4rKykgewo+ICsJCXN0cnVjdCBleGVjbGlzdF9wb3J0 ICpwb3J0Owo+ICAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gIAkJdW5zaWdu ZWQgaW50IGNvdW50Owo+ICAKPiAtCQlycSA9IHBvcnRfdW5wYWNrKCZwb3J0W25dLCAmY291bnQp Owo+ICsJCXBvcnQgPSBleGVjbGlzdF9wb3J0X2luZGV4KGVsLCBuKTsKPiArCj4gKwkJcnEgPSBw b3J0X3VucGFjayhwb3J0LCAmY291bnQpOwo+ICAJCWlmIChycSAmJiBjb3VudCA9PSAwKSB7Cj4g LQkJCXBvcnRfc2V0KCZwb3J0W25dLCBwb3J0X3BhY2socnEsICsrY291bnQpKTsKPiArCQkJcG9y dF9zZXQocG9ydCwgcG9ydF9wYWNrKHJxLCArK2NvdW50KSk7Cj4gIAo+ICAJCQlpZiAoaTkxNV92 bWFfaXNfbWFwX2FuZF9mZW5jZWFibGUocnEtPnJpbmctPnZtYSkpCj4gIAkJCQlQT1NUSU5HX1JF QURfRlcoR1VDX1NUQVRVUyk7Cj4gQEAgLTU2MCwyNSArNTYyLDI3IEBAIHN0YXRpYyB2b2lkIHBv cnRfYXNzaWduKHN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0LAo+ICBzdGF0aWMgdm9pZCBpOTE1 X2d1Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdCAqIGNvbnN0IGVsID0gJmVuZ2luZS0+ZXhlY2xpc3Q7 Cj4gLQlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCA9IGVsLT5wb3J0Owo+ICsJc3RydWN0IGV4 ZWNsaXN0X3BvcnQgKnBvcnQ7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKmxhc3Qg PSBOVUxMOwo+IC0JY29uc3Qgc3RydWN0IGV4ZWNsaXN0X3BvcnQgKiBjb25zdCBsYXN0X3BvcnQg PSBleGVjbGlzdF9wb3J0X3RhaWwoZWwpOwo+ICAJYm9vbCBzdWJtaXQgPSBmYWxzZTsKPiAgCXN0 cnVjdCByYl9ub2RlICpyYjsKPiAgCj4gLQlpZiAocG9ydF9pc3NldChwb3J0KSkKPiAtCQlwb3J0 Kys7Cj4gLQo+ICAJc3Bpbl9sb2NrX2lycSgmZW5naW5lLT50aW1lbGluZS0+bG9jayk7Cj4gIAly YiA9IGVsLT5maXJzdDsKPiAgCUdFTV9CVUdfT04ocmJfZmlyc3QoJmVsLT5xdWV1ZSkgIT0gcmIp Owo+IC0Jd2hpbGUgKHJiKSB7Cj4gKwo+ICsJaWYgKHVubGlrZWx5KCFyYikpCj4gKwkJZ290byBk b25lOwo+ICsKPiArCXBvcnQgPSBleGVjbGlzdF9yZXF1ZXN0X3BvcnQoZWwpOwo+ICsKPiArCWRv IHsKPiAgCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHJiX2VudHJ5KHJiLCB0eXBlb2YoKnAp LCBub2RlKTsKPiAgCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxLCAqcm47Cj4gIAo+ ICAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycSwgcm4sICZwLT5yZXF1ZXN0cywgcHJpb3Ry ZWUubGluaykgewo+ICAJCQlpZiAobGFzdCAmJiBycS0+Y3R4ICE9IGxhc3QtPmN0eCkgewo+IC0J CQkJaWYgKHBvcnQgPT0gbGFzdF9wb3J0KSB7Cj4gKwkJCQlpZiAoIWV4ZWNsaXN0X2luYWN0aXZl X3BvcnRzKGVsKSkgewo+ICAJCQkJCV9fbGlzdF9kZWxfbWFueSgmcC0+cmVxdWVzdHMsCj4gIAkJ CQkJCQkmcnEtPnByaW90cmVlLmxpbmspOwo+ICAJCQkJCWdvdG8gZG9uZTsKPiBAQCAtNTg3LDcg KzU5MSw4IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ3VjX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQo+ICAJCQkJaWYgKHN1Ym1pdCkKPiAgCQkJCQlwb3J0X2Fzc2lnbihwb3J0 LCBsYXN0KTsKPiAgCj4gLQkJCQlwb3J0ID0gZXhlY2xpc3RfcG9ydF9uZXh0KGVsLCBwb3J0KTsK PiArCQkJCXBvcnQgPSBleGVjbGlzdF9yZXF1ZXN0X3BvcnQoZWwpOwo+ICsJCQkJR0VNX0JVR19P Tihwb3J0X2lzc2V0KHBvcnQpKTsKPiAgCQkJfQo+ICAKPiAgCQkJSU5JVF9MSVNUX0hFQUQoJnJx LT5wcmlvdHJlZS5saW5rKTsKPiBAQCAtNjA0LDcgKzYwOSw3IEBAIHN0YXRpYyB2b2lkIGk5MTVf Z3VjX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCUlOSVRfTElT VF9IRUFEKCZwLT5yZXF1ZXN0cyk7Cj4gIAkJaWYgKHAtPnByaW9yaXR5ICE9IEk5MTVfUFJJT1JJ VFlfTk9STUFMKQo+ICAJCQlrbWVtX2NhY2hlX2ZyZWUoZW5naW5lLT5pOTE1LT5wcmlvcml0aWVz LCBwKTsKPiAtCX0KPiArCX0gd2hpbGUgKHJiKTsKPiAgZG9uZToKPiAgCWVsLT5maXJzdCA9IHJi Owo+ICAJaWYgKHN1Ym1pdCkgewo+IEBAIC02MTgsMjEgKzYyMywyMSBAQCBzdGF0aWMgdm9pZCBp OTE1X2d1Y19pcnFfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCj4gIHsKPiAgCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKiBjb25zdCBlbmdpbmUgPSAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq KWRhdGE7Cj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0ICogY29uc3QgZWwgPSAmZW5n aW5lLT5leGVjbGlzdDsKPiAtCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0gZXhlY2xpc3Rf cG9ydF9oZWFkKGVsKTsKPiAtCWNvbnN0IHN0cnVjdCBleGVjbGlzdF9wb3J0ICogY29uc3QgbGFz dF9wb3J0ID0gZXhlY2xpc3RfcG9ydF90YWlsKGVsKTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcnE7Cj4gIAo+IC0JcnEgPSBwb3J0X3JlcXVlc3QocG9ydCk7Cj4gLQl3aGlsZSAo cnEgJiYgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocnEpKSB7Cj4gKwl3aGlsZSAoZXhlY2xp c3RfYWN0aXZlX3BvcnRzKGVsKSkgewo+ICsJCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0g ZXhlY2xpc3RfcG9ydF9oZWFkKGVsKTsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJxID0gcG9ydF9yZXF1ZXN0KHBvcnQpOwo+ICsKPiArCQlpZiAoIWk5MTVfZ2VtX3JlcXVlc3Rf Y29tcGxldGVkKHJxKSkKPiArCQkJYnJlYWs7Cj4gKwo+ICAJCXRyYWNlX2k5MTVfZ2VtX3JlcXVl c3Rfb3V0KHJxKTsKPiAgCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChycSk7Cj4gIAo+IC0JCXBvcnQg PSBleGVjbGlzdF9wb3J0X2NvbXBsZXRlKGVsLCBwb3J0KTsKPiAtCj4gLQkJcnEgPSBwb3J0X3Jl cXVlc3QocG9ydCk7Cj4gKwkJZXhlY2xpc3RfcmVsZWFzZV9wb3J0KGVsLCBwb3J0KTsKPiAgCX0K PiAgCj4gLQlpZiAoIXBvcnRfaXNzZXQobGFzdF9wb3J0KSkKPiArCWlmIChleGVjbGlzdF9pbmFj dGl2ZV9wb3J0cyhlbCkpCj4gIAkJaTkxNV9ndWNfZGVxdWV1ZShlbmdpbmUpOwo+ICB9Cj4gIAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+IGluZGV4IGFjNWE5NTQzOTM5My4uYTlkODg4YjcyNmM0 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4gQEAgLTEzNDIsNyArMTM0Miw3IEBAIGdl bjhfY3NfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgaWly LCBpbnQgdGVzdF9zaGlmdCkKPiAgCWJvb2wgdGFza2xldCA9IGZhbHNlOwo+ICAKPiAgCWlmIChp aXIgJiAoR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUIDw8IHRlc3Rfc2hpZnQpKSB7Cj4gLQkJ aWYgKHBvcnRfY291bnQoZXhlY2xpc3RfcG9ydF9oZWFkKGVsKSkpIHsKPiArCQlpZiAoUkVBRF9P TkNFKGVsLT5wb3J0X2NvdW50KSkgewo+ICAJCQlfX3NldF9iaXQoRU5HSU5FX0lSUV9FWEVDTElT VCwgJmVuZ2luZS0+aXJxX3Bvc3RlZCk7Cj4gIAkJCXRhc2tsZXQgPSB0cnVlOwo+ICAJCX0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+IGluZGV4IGIwZDcwMjA2M2E1MC4u MjliMTcwZmRkNmVmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Vu Z2luZV9jcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMK PiBAQCAtNDA3LDYgKzQwNyw5IEBAIHN0YXRpYyB2b2lkIGludGVsX2VuZ2luZV9pbml0X2V4ZWNs aXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCUJVSUxEX0JVR19PTl9OT1Rf UE9XRVJfT0ZfMihleGVjbGlzdF9udW1fcG9ydHMoJmVuZ2luZS0+ZXhlY2xpc3QpKTsKPiAgCUdF TV9CVUdfT04oZXhlY2xpc3RfbnVtX3BvcnRzKCZlbmdpbmUtPmV4ZWNsaXN0KSA+IEVYRUNMSVNU X01BWF9QT1JUUyk7Cj4gIAo+ICsJZWwtPnBvcnRfaGVhZCA9IDA7Cj4gKwllbC0+cG9ydF9jb3Vu dCA9IDA7Cj4gKwo+ICAJZWwtPnF1ZXVlID0gUkJfUk9PVDsKPiAgCWVsLT5maXJzdCA9IE5VTEw7 Cj4gIH0KPiBAQCAtMTUwMSw4ICsxNTA0LDggQEAgYm9vbCBpbnRlbF9lbmdpbmVfaXNfaWRsZShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAlpZiAodGVzdF9iaXQoRU5HSU5FX0lS UV9FWEVDTElTVCwgJmVuZ2luZS0+aXJxX3Bvc3RlZCkpCj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAK PiAtCS8qIEJvdGggcG9ydHMgZHJhaW5lZCwgbm8gbW9yZSBFTFNQIHN1Ym1pc3Npb24/ICovCj4g LQlpZiAocG9ydF9yZXF1ZXN0KGV4ZWNsaXN0X3BvcnRfaGVhZCgmZW5naW5lLT5leGVjbGlzdCkp KQo+ICsJLyogQWxsIHBvcnRzIGRyYWluZWQsIG5vIG1vcmUgRUxTUCBzdWJtaXNzaW9uPyAqLwo+ ICsJaWYgKGV4ZWNsaXN0X2FjdGl2ZV9wb3J0cygmZW5naW5lLT5leGVjbGlzdCkpCj4gIAkJcmV0 dXJuIGZhbHNlOwo+ICAKPiAgCS8qIEVMU1AgaXMgZW1wdHksIGJ1dCB0aGVyZSBhcmUgcmVhZHkg cmVxdWVzdHM/ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCA4NTUwY2Q2NjM1 YzkuLmJlYTEwNjIwYmVkMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gQEAgLTM5 OSwyNiArMzk5LDI5IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcG9ydHMoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCWVuZ2luZS0+aTkxNS0+cmVncyArIGk5MTVf bW1pb19yZWdfb2Zmc2V0KFJJTkdfRUxTUChlbmdpbmUpKTsKPiAgCXVuc2lnbmVkIGludCBuOwo+ ICAKPiAtCWZvciAobiA9IGV4ZWNsaXN0X251bV9wb3J0cyhlbCk7IG4tLTsgKSB7Cj4gLQkJc3Ry dWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQ7Cj4gKwlmb3IgKG4gPSAwOyBuIDwgZXhlY2xpc3RfaW5h Y3RpdmVfcG9ydHMoZWwpOyBuKyspIHsKPiArCQl3cml0ZWwoMCwgZWxzcCk7Cj4gKwkJd3JpdGVs KDAsIGVsc3ApOwo+ICsJfQo+ICsKPiArCWZvciAobiA9IGV4ZWNsaXN0X2FjdGl2ZV9wb3J0cyhl bCk7IG4tLTsgKSB7Cj4gIAkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiArCQlz dHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydDsKPiAgCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gIAkJ dTY0IGRlc2M7Cj4gIAo+ICAJCXBvcnQgPSBleGVjbGlzdF9wb3J0X2luZGV4KGVsLCBuKTsKPiAt Cj4gIAkJcnEgPSBwb3J0X3VucGFjayhwb3J0LCAmY291bnQpOwo+IC0JCWlmIChycSkgewo+IC0J CQlHRU1fQlVHX09OKGNvdW50ID4gIW4pOwo+IC0JCQlpZiAoIWNvdW50KyspCj4gLQkJCQlleGVj bGlzdHNfY29udGV4dF9zdGF0dXNfY2hhbmdlKHJxLCBJTlRFTF9DT05URVhUX1NDSEVEVUxFX0lO KTsKPiAtCQkJcG9ydF9zZXQocG9ydCwgcG9ydF9wYWNrKHJxLCBjb3VudCkpOwo+IC0JCQlkZXNj ID0gZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KHJxKTsKPiAtCQkJR0VNX0RFQlVHX0VYRUMocG9y dC0+Y29udGV4dF9pZCA9IHVwcGVyXzMyX2JpdHMoZGVzYykpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJ CUdFTV9CVUdfT04oIW4pOwo+IC0JCQlkZXNjID0gMDsKPiAtCQl9Cj4gKwo+ICsJCUdFTV9CVUdf T04oIXJxKTsKPiArCQlHRU1fQlVHX09OKGNvdW50ID4gIW4pOwo+ICsKPiArCQlpZiAoIWNvdW50 KyspCj4gKwkJCWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFuZ2UocnEsIElOVEVMX0NPTlRF WFRfU0NIRURVTEVfSU4pOwo+ICsKPiArCQlwb3J0X3NldChwb3J0LCBwb3J0X3BhY2socnEsIGNv dW50KSk7Cj4gKwkJZGVzYyA9IGV4ZWNsaXN0c191cGRhdGVfY29udGV4dChycSk7Cj4gKwkJR0VN X0RFQlVHX0VYRUMocG9ydC0+Y29udGV4dF9pZCA9IHVwcGVyXzMyX2JpdHMoZGVzYykpOwo+ICAK PiAgCQl3cml0ZWwodXBwZXJfMzJfYml0cyhkZXNjKSwgZWxzcCk7Cj4gIAkJd3JpdGVsKGxvd2Vy XzMyX2JpdHMoZGVzYyksIGVsc3ApOwo+IEBAIC00NTYsMTUgKzQ1OSwyMyBAQCBzdGF0aWMgdm9p ZCBwb3J0X2Fzc2lnbihzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCwKPiAgCj4gIHN0YXRpYyB2 b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg ewo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpsYXN0Owo+ICAJc3RydWN0IGludGVs X2VuZ2luZV9leGVjbGlzdCAqIGNvbnN0IGVsID0gJmVuZ2luZS0+ZXhlY2xpc3Q7Cj4gLQlzdHJ1 Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCA9IGV4ZWNsaXN0X3BvcnRfaGVhZChlbCk7Cj4gLQljb25z dCBzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqIGNvbnN0IGxhc3RfcG9ydCA9IGV4ZWNsaXN0X3BvcnRf dGFpbChlbCk7Cj4gKwlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydDsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqbGFzdDsKPiAgCXN0cnVjdCByYl9ub2RlICpyYjsKPiAgCWJvb2wg c3VibWl0ID0gZmFsc2U7Cj4gIAo+IC0JbGFzdCA9IHBvcnRfcmVxdWVzdChwb3J0KTsKPiAtCWlm IChsYXN0KQo+ICsJc3Bpbl9sb2NrX2lycSgmZW5naW5lLT50aW1lbGluZS0+bG9jayk7Cj4gKwly YiA9IGVsLT5maXJzdDsKPiArCUdFTV9CVUdfT04ocmJfZmlyc3QoJmVsLT5xdWV1ZSkgIT0gcmIp Owo+ICsKPiArCWlmICh1bmxpa2VseSghcmIpKQo+ICsJCWdvdG8gZG9uZTsKPiArCj4gKwlpZiAo ZXhlY2xpc3RfYWN0aXZlX3BvcnRzKGVsKSkgewo+ICsJCXBvcnQgPSBleGVjbGlzdF9wb3J0X3Rh aWwoZWwpOwo+ICsJCWxhc3QgPSBwb3J0X3JlcXVlc3QocG9ydCk7Cj4gKwo+ICAJCS8qIFdhSWRs ZUxpdGVSZXN0b3JlOmJkdyxza2wKPiAgCQkgKiBBcHBseSB0aGUgd2EgTk9PUHMgdG8gcHJldmVu dCByaW5nOkhFQUQgPT0gcmVxOlRBSUwKPiAgCQkgKiBhcyB3ZSByZXN1Ym1pdCB0aGUgcmVxdWVz dC4gU2VlIGdlbjhfZW1pdF9icmVhZGNydW1iKCkKPiBAQCAtNDcyLDYgKzQ4MywxMSBAQCBzdGF0 aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIAkJICogcmVxdWVzdC4KPiAgCQkgKi8KPiAgCQlsYXN0LT50YWlsID0gbGFzdC0+d2FfdGFp bDsKPiArCX0gZWxzZSB7Cj4gKwkJLyogQWxsb2NhdGUgZmlyc3QgcG9ydCB0byBjb2FsZXNjZSBp bnRvICovCj4gKwkJcG9ydCA9IGV4ZWNsaXN0X3JlcXVlc3RfcG9ydChlbCk7Cj4gKwkJbGFzdCA9 IE5VTEw7Cj4gKwl9Cj4gIAo+ICAJLyogSGFyZHdhcmUgc3VibWlzc2lvbiBpcyB0aHJvdWdoIDIg cG9ydHMuIENvbmNlcHR1YWxseSBlYWNoIHBvcnQKPiAgCSAqIGhhcyBhIChSSU5HX1NUQVJULCBS SU5HX0hFQUQsIFJJTkdfVEFJTCkgdHVwbGUuIFJJTkdfU1RBUlQgaXMKPiBAQCAtNDkzLDExICs1 MDksNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gIAkgKiBzZXF1ZW5jZSBvZiByZXF1ZXN0cyBhcyBiZWluZyB0aGUgbW9z dCBvcHRpbWFsIChmZXdlc3Qgd2FrZSB1cHMKPiAgCSAqIGFuZCBjb250ZXh0IHN3aXRjaGVzKSBz dWJtaXNzaW9uLgo+ICAJICovCj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmZW5naW5lLT50aW1lbGlu ZS0+bG9jayk7Cj4gLQlyYiA9IGVsLT5maXJzdDsKPiAtCUdFTV9CVUdfT04ocmJfZmlyc3QoJmVs LT5xdWV1ZSkgIT0gcmIpOwo+IC0Jd2hpbGUgKHJiKSB7Cj4gKwlkbyB7Cj4gIAkJc3RydWN0IGk5 MTVfcHJpb2xpc3QgKnAgPSByYl9lbnRyeShyYiwgdHlwZW9mKCpwKSwgbm9kZSk7Cj4gIAkJc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSwgKnJuOwo+ICAKPiBAQCAtNTE1LDExICs1Mjcs MTEgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICAJCQkgKi8KPiAgCQkJaWYgKGxhc3QgJiYgIWNhbl9tZXJnZV9jdHgocnEt PmN0eCwgbGFzdC0+Y3R4KSkgewo+ICAJCQkJLyoKPiAtCQkJCSAqIElmIHdlIGFyZSBvbiB0aGUg c2Vjb25kIHBvcnQgYW5kIGNhbm5vdAo+ICsJCQkJICogSWYgd2UgYXJlIG9uIHRoZSBsYXN0IHBv cnQgYW5kIGNhbm5vdAo+ICAJCQkJICogY29tYmluZSB0aGlzIHJlcXVlc3Qgd2l0aCB0aGUgbGFz dCwgdGhlbiB3ZQo+ICAJCQkJICogYXJlIGRvbmUuCj4gIAkJCQkgKi8KPiAtCQkJCWlmIChwb3J0 ID09IGxhc3RfcG9ydCkgewo+ICsJCQkJaWYgKCFleGVjbGlzdF9pbmFjdGl2ZV9wb3J0cyhlbCkp IHsKPiAgCQkJCQlfX2xpc3RfZGVsX21hbnkoJnAtPnJlcXVlc3RzLAo+ICAJCQkJCQkJJnJxLT5w cmlvdHJlZS5saW5rKTsKPiAgCQkJCQlnb3RvIGRvbmU7Cj4gQEAgLTU0NCw4ICs1NTYsNyBAQCBz dGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4gIAkJCQlpZiAoc3VibWl0KQo+ICAJCQkJCXBvcnRfYXNzaWduKHBvcnQsIGxhc3QpOwo+ ICAKPiAtCQkJCXBvcnQgPSBleGVjbGlzdF9wb3J0X25leHQoZWwsIHBvcnQpOwo+IC0KPiArCQkJ CXBvcnQgPSBleGVjbGlzdF9yZXF1ZXN0X3BvcnQoZWwpOwo+ICAJCQkJR0VNX0JVR19PTihwb3J0 X2lzc2V0KHBvcnQpKTsKPiAgCQkJfQo+ICAKPiBAQCAtNTYzLDcgKzU3NCw4IEBAIHN0YXRpYyB2 b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg CQlJTklUX0xJU1RfSEVBRCgmcC0+cmVxdWVzdHMpOwo+ICAJCWlmIChwLT5wcmlvcml0eSAhPSBJ OTE1X1BSSU9SSVRZX05PUk1BTCkKPiAgCQkJa21lbV9jYWNoZV9mcmVlKGVuZ2luZS0+aTkxNS0+ cHJpb3JpdGllcywgcCk7Cj4gLQl9Cj4gKwl9IHdoaWxlIChyYik7Cj4gKwo+ICBkb25lOgo+ICAJ ZWwtPmZpcnN0ID0gcmI7Cj4gIAlpZiAoc3VibWl0KQo+IEBAIC01ODIsNiArNTk0LDkgQEAgc3Rh dGljIHZvaWQgZXhlY2xpc3RfY2FuY2VsX3BvcnRfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2lu ZV9leGVjbGlzdCAqZWwpCj4gIAkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocG9ydF9yZXF1ZXN0KCZl bC0+cG9ydFtpXSkpOwo+ICAKPiAgCW1lbXNldChlbC0+cG9ydCwgMCwgc2l6ZW9mKGVsLT5wb3J0 KSk7Cj4gKwo+ICsJZWwtPnBvcnRfY291bnQgPSAwOwo+ICsJZWwtPnBvcnRfaGVhZCA9IDA7Cj4g IH0KPiAgCj4gIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IEBAIC02NDMsMTAgKzY1OCwxMiBAQCBzdGF0aWMgdm9p ZCBleGVjbGlzdHNfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKPiAgCj4gIHN0YXRpYyBib29sIGV4ZWNsaXN0c19lbHNwX3JlYWR5KHN0cnVjdCBpbnRlbF9l bmdpbmVfZXhlY2xpc3QgKiBjb25zdCBlbCkKPiAgewo+IC0Jc3RydWN0IGV4ZWNsaXN0X3BvcnQg KiBjb25zdCBwb3J0MCA9IGV4ZWNsaXN0X3BvcnRfaGVhZChlbCk7Cj4gLQlzdHJ1Y3QgZXhlY2xp c3RfcG9ydCAqIGNvbnN0IHBvcnQxID0gZXhlY2xpc3RfcG9ydF9uZXh0KGVsLCBwb3J0MCk7Cj4g Kwljb25zdCB1bnNpZ25lZCBpbnQgYWN0aXZlID0gZXhlY2xpc3RfYWN0aXZlX3BvcnRzKGVsKTsK PiArCj4gKwlpZiAoIWFjdGl2ZSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiAgCj4gLQlyZXR1cm4gcG9y dF9jb3VudChwb3J0MCkgKyBwb3J0X2NvdW50KHBvcnQxKSA8IDI7Cj4gKwlyZXR1cm4gcG9ydF9j b3VudChleGVjbGlzdF9wb3J0X3RhaWwoZWwpKSArIGFjdGl2ZSA8IDI7Cj4gIH0KPiAgCj4gIC8q Cj4gQEAgLTY1Nyw3ICs2NzQsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9scmNfaXJxX2hhbmRsZXIo dW5zaWduZWQgbG9uZyBkYXRhKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICogY29u c3QgZW5naW5lID0gKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKilkYXRhOwo+ICAJc3RydWN0IGlu dGVsX2VuZ2luZV9leGVjbGlzdCAqIGNvbnN0IGVsID0gJmVuZ2luZS0+ZXhlY2xpc3Q7Cj4gLQlz dHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCA9IGV4ZWNsaXN0X3BvcnRfaGVhZChlbCk7Cj4gIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7Cj4gIAo+ICAJ LyogV2UgY2FuIHNraXAgYWNxdWlyaW5nIGludGVsX3J1bnRpbWVfcG1fZ2V0KCkgaGVyZSBhcyBp dCB3YXMgdGFrZW4KPiBAQCAtNzE0LDYgKzczMCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2xyY19p cnFfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCj4gIAkJfQo+ICAKPiAgCQl3aGlsZSAoaGVh ZCAhPSB0YWlsKSB7Cj4gKwkJCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0Owo+ICAJCQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICAJCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwo+ ICAJCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gQEAgLTc0Miw2ICs3NTksNyBAQCBzdGF0aWMgdm9p ZCBpbnRlbF9scmNfaXJxX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQo+ICAJCQlpZiAoIShz dGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQ09NUExFVEVEX01BU0spKQo+ICAJCQkJY29udGludWU7 Cj4gIAo+ICsJCQlwb3J0ID0gZXhlY2xpc3RfcG9ydF9oZWFkKGVsKTsKPiAgCQkJLyogQ2hlY2sg dGhlIGNvbnRleHQvZGVzYyBpZCBmb3IgdGhpcyBldmVudCBtYXRjaGVzICovCj4gIAkJCUdFTV9E RUJVR19CVUdfT04oYnVmWzIgKiBoZWFkICsgMV0gIT0gcG9ydC0+Y29udGV4dF9pZCk7Cj4gIAo+ IEBAIC03NTUsMTMgKzc3MywxMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9scmNfaXJxX2hhbmRsZXIo dW5zaWduZWQgbG9uZyBkYXRhKQo+ICAJCQkJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9vdXQocnEp Owo+ICAJCQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocnEpOwo+ICAKPiAtCQkJCXBvcnQgPSBleGVj bGlzdF9wb3J0X2NvbXBsZXRlKGVsLCBwb3J0KTsKPiArCQkJCWV4ZWNsaXN0X3JlbGVhc2VfcG9y dChlbCwgcG9ydCk7Cj4gIAkJCX0gZWxzZSB7Cj4gIAkJCQlwb3J0X3NldChwb3J0LCBwb3J0X3Bh Y2socnEsIGNvdW50KSk7Cj4gIAkJCX0KPiAgCj4gIAkJCS8qIEFmdGVyIHRoZSBmaW5hbCBlbGVt ZW50LCB0aGUgaHcgc2hvdWxkIGJlIGlkbGUgKi8KPiAtCQkJR0VNX0JVR19PTihwb3J0X2NvdW50 KHBvcnQpID09IDAgJiYKPiArCQkJR0VNX0JVR19PTihleGVjbGlzdF9hY3RpdmVfcG9ydHMoZWwp ID09IDAgJiYKPiAgCQkJCSAgICEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0FDVElWRV9JRExF KSk7Cj4gIAkJfQo+ICAKPiBAQCAtNzg2LDcgKzgwNCw3IEBAIHN0YXRpYyB2b2lkIGluc2VydF9y ZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCXN0cnVjdCBpOTE1X3By aW9saXN0ICpwID0gbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHQsIHByaW8pOwo+ICAKPiAgCWxp c3RfYWRkX3RhaWwoJnB0LT5saW5rLCAmcHRyX21hc2tfYml0cyhwLCAxKS0+cmVxdWVzdHMpOwo+ IC0JaWYgKHB0cl91bm1hc2tfYml0cyhwLCAxKSAmJiBleGVjbGlzdHNfZWxzcF9yZWFkeShlbCkp Cj4gKwlpZiAocHRyX3VubWFza19iaXRzKHAsIDEpKQo+ICAJCXRhc2tsZXRfaGlfc2NoZWR1bGUo JmVsLT5pcnFfdGFza2xldCk7Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuaAo+IGluZGV4IDk5MWY2YzBiZDZjMi4uZWZhNWE4ZWExZWNiIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+IEBAIC0yNDksNiArMjQ5LDExIEBA IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3Qgewo+ICAJdW5zaWduZWQgaW50IHBvcnRfaGVh ZDsKPiAgCj4gIAkvKioKPiArCSAqIEBwb3J0X2NvdW50OiByZXNlcnZlZCBwb3J0cwo+ICsJICov Cj4gKwl1bnNpZ25lZCBpbnQgcG9ydF9jb3VudDsKPiArCj4gKwkvKioKPiAgCSAqIEBxdWV1ZTog cXVldWUgb2YgcmVxdWVzdHMsIGluIHByaW9yaXR5IGxpc3RzCj4gIAkgKi8KPiAgCXN0cnVjdCBy Yl9yb290IHF1ZXVlOwo+IEBAIC01MjksMTQgKzUzNCwyMCBAQCBleGVjbGlzdF9udW1fcG9ydHMo Y29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdCAqIGNvbnN0IGVsKQo+ICAJcmV0dXJu IGVsLT5wb3J0X21hc2sgKyAxOwo+ICB9Cj4gIAo+IC0jZGVmaW5lIF9fcG9ydF9pZHgoc3RhcnQs IGluZGV4LCBtYXNrKSAoKChzdGFydCkgKyAoaW5kZXgpKSAmIChtYXNrKSkKPiArc3RhdGljIGlu bGluZSB1bnNpZ25lZCBpbnQKPiArZXhlY2xpc3RfYWN0aXZlX3BvcnRzKGNvbnN0IHN0cnVjdCBp bnRlbF9lbmdpbmVfZXhlY2xpc3QgKiBjb25zdCBlbCkKPiArewo+ICsJcmV0dXJuIGVsLT5wb3J0 X2NvdW50Owo+ICt9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBleGVjbGlzdF9wb3J0ICoK PiAtZXhlY2xpc3RfcG9ydF9oZWFkKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3QgKiBjb25z dCBlbCkKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKPiArZXhlY2xpc3RfaW5hY3RpdmVf cG9ydHMoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdCAqIGNvbnN0IGVsKQo+ICB7 Cj4gLQlyZXR1cm4gJmVsLT5wb3J0W2VsLT5wb3J0X2hlYWRdOwo+ICsJcmV0dXJuIGV4ZWNsaXN0 X251bV9wb3J0cyhlbCkgLSBleGVjbGlzdF9hY3RpdmVfcG9ydHMoZWwpOwo+ICB9Cj4gIAo+ICsj ZGVmaW5lIF9fcG9ydF9pZHgoc3RhcnQsIGluZGV4LCBtYXNrKSAoKChzdGFydCkgKyAoaW5kZXgp KSAmIChtYXNrKSkKPiArCj4gIC8qIEluZGV4IHN0YXJ0aW5nIGZyb20gcG9ydF9oZWFkICovCj4g IHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4ZWNsaXN0X3BvcnQgKgo+ICBleGVjbGlzdF9wb3J0X2lu ZGV4KHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3QgKiBjb25zdCBlbCwKPiBAQCAtNTQ2LDMw ICs1NTcsNDYgQEAgZXhlY2xpc3RfcG9ydF9pbmRleChzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNs aXN0ICogY29uc3QgZWwsCj4gIH0KPiAgCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4ZWNsaXN0 X3BvcnQgKgo+IC1leGVjbGlzdF9wb3J0X3RhaWwoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlz dCAqIGNvbnN0IGVsKQo+ICtleGVjbGlzdF9wb3J0X2hlYWQoc3RydWN0IGludGVsX2VuZ2luZV9l eGVjbGlzdCAqIGNvbnN0IGVsKQo+ICB7Cj4gLQlyZXR1cm4gJmVsLT5wb3J0W19fcG9ydF9pZHgo ZWwtPnBvcnRfaGVhZCwgLTEsIGVsLT5wb3J0X21hc2spXTsKPiArCUdFTV9CVUdfT04oIWVsLT5w b3J0X2NvdW50KTsKPiArCj4gKwlyZXR1cm4gZXhlY2xpc3RfcG9ydF9pbmRleChlbCwgMCk7Cj4g IH0KPiAgCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4ZWNsaXN0X3BvcnQgKgo+IC1leGVjbGlz dF9wb3J0X25leHQoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdCAqIGNvbnN0IGVsLAo+IC0J CSAgIGNvbnN0IHN0cnVjdCBleGVjbGlzdF9wb3J0ICogY29uc3QgcG9ydCkKPiArZXhlY2xpc3Rf cG9ydF90YWlsKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3QgKiBjb25zdCBlbCkKPiAgewo+ IC0JY29uc3QgdW5zaWduZWQgaW50IGkgPSBwb3J0X2luZGV4KHBvcnQsIGVsKTsKPiArCUdFTV9C VUdfT04oIWVsLT5wb3J0X2NvdW50KTsKPiAgCj4gLQlyZXR1cm4gJmVsLT5wb3J0W19fcG9ydF9p ZHgoaSwgMSwgZWwtPnBvcnRfbWFzayldOwo+ICsJcmV0dXJuIGV4ZWNsaXN0X3BvcnRfaW5kZXgo ZWwsIGVsLT5wb3J0X2NvdW50IC0gMSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0 IGV4ZWNsaXN0X3BvcnQgKgo+IC1leGVjbGlzdF9wb3J0X2NvbXBsZXRlKHN0cnVjdCBpbnRlbF9l bmdpbmVfZXhlY2xpc3QgKiBjb25zdCBlbCwKPiAtCQkgICAgICAgc3RydWN0IGV4ZWNsaXN0X3Bv cnQgKiBjb25zdCBwb3J0KQo+ICtleGVjbGlzdF9yZXF1ZXN0X3BvcnQoc3RydWN0IGludGVsX2Vu Z2luZV9leGVjbGlzdCAqIGNvbnN0IGVsKQo+ICB7Cj4gKwlHRU1fQlVHX09OKGVsLT5wb3J0X2Nv dW50ID09IGVsLT5wb3J0X21hc2sgKyAxKTsKPiArCj4gKwllbC0+cG9ydF9jb3VudCsrOwo+ICsK PiArCUdFTV9CVUdfT04ocG9ydF9pc3NldChleGVjbGlzdF9wb3J0X3RhaWwoZWwpKSk7Cj4gKwo+ ICsJcmV0dXJuIGV4ZWNsaXN0X3BvcnRfdGFpbChlbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxp bmUgdm9pZAo+ICtleGVjbGlzdF9yZWxlYXNlX3BvcnQoc3RydWN0IGludGVsX2VuZ2luZV9leGVj bGlzdCAqIGNvbnN0IGVsLAo+ICsJCSAgICAgIHN0cnVjdCBleGVjbGlzdF9wb3J0ICogY29uc3Qg cG9ydCkKPiArewo+ICsKPiAgCUdFTV9CVUdfT04ocG9ydF9pbmRleChwb3J0LCBlbCkgIT0gZWwt PnBvcnRfaGVhZCk7Cj4gKwlHRU1fQlVHX09OKCFwb3J0X2lzc2V0KHBvcnQpKTsKPiArCUdFTV9C VUdfT04oIWVsLT5wb3J0X2NvdW50KTsKPiAgCj4gIAltZW1zZXQocG9ydCwgMCwgc2l6ZW9mKHN0 cnVjdCBleGVjbGlzdF9wb3J0KSk7Cj4gLQllbC0+cG9ydF9oZWFkID0gX19wb3J0X2lkeChlbC0+ cG9ydF9oZWFkLCAxLCBlbC0+cG9ydF9tYXNrKTsKPiAgCj4gLQlyZXR1cm4gZXhlY2xpc3RfcG9y dF9oZWFkKGVsKTsKPiArCWVsLT5wb3J0X2hlYWQgPSBfX3BvcnRfaWR4KGVsLT5wb3J0X2hlYWQs IDEsIGVsLT5wb3J0X21hc2spOwo+ICsJZWwtPnBvcnRfY291bnQtLTsKPiAgfQo+ICAKPiAgc3Rh dGljIGlubGluZSB1bnNpZ25lZCBpbnQKPiAtLSAKPiAyLjExLjAKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==