From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 2/6] drm/i915: Retire requests along rings Date: Tue, 24 Apr 2018 15:56:04 +0100 Message-ID: <13a83670-6ce4-eaec-01a1-68ebbf7f3d58@linux.intel.com> References: <20180424131415.15102-1-chris@chris-wilson.co.uk> <20180424131415.15102-2-chris@chris-wilson.co.uk> <5b44e046-3d10-2cc4-d1dc-12c4842560c9@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id C11B86E413 for ; Tue, 24 Apr 2018 14:56:07 +0000 (UTC) In-Reply-To: <5b44e046-3d10-2cc4-d1dc-12c4842560c9@linux.intel.com> Content-Language: en-GB 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 Ck9uIDI0LzA0LzIwMTggMTU6NDYsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+IAo+IE9uIDI0LzA0 LzIwMTggMTQ6MTQsIENocmlzIFdpbHNvbiB3cm90ZToKPj4gSW4gdGhlIG5leHQgcGF0Y2gsIHJp bmdzIGFyZSB0aGUgY2VudHJhbCB0aW1lbGluZSBhcyByZXF1ZXN0cyBtYXkganVtcAo+PiBiZXR3 ZWVuIGVuZ2luZXMuIFRoZXJlZm9yZSBpbiB0aGUgZnV0dXJlIGFzIHdlIHJldGlyZSBpbiBvcmRl ciBhbG9uZyB0aGUKPj4gZW5naW5lIHRpbWVsaW5lLCB3ZSBtYXkgcmV0aXJlIG91dC1vZi1vcmRl ciB3aXRoaW4gYSByaW5nIChhcyB0aGUgcmluZyAKPj4gbm93Cj4+IG9jY3VycyBhbG9uZyBtdWx0 aXBsZSBlbmdpbmVzKSwgbGVhZGluZyB0byBtdWNoIGhpbGFyaXR5IGluIG1pc2NvbXB1dGluZwo+ PiB0aGUgcG9zaXRpb24gb2YgcmluZy0+aGVhZC4KPj4KPj4gQXMgYW4gYWRkZWQgYm9udXMsIHJl dGlyaW5nIGFsb25nIHRoZSByaW5nIHJlZHVjZXMgdGhlIHBlbmFsdHkgb2YgaGF2aW5nCj4+IG9u ZSBleGVjbGlzdHMgY2xpZW50IGRvIGNsZWFudXAgZm9yIGFub3RoZXIgKG9sZCBsZWdhY3kgc3Vi bWlzc2lvbgo+PiBzaGFyZXMgYSByaW5nIGJldHdlZW4gYWxsIGNsaWVudHMpLiBUaGUgZG93bnNp ZGUgaXMgdGhhdCBzbG93IGFuZAo+PiBpcnJlZ3VsYXIgKG9mZiB0aGUgY3JpdGljYWwgcGF0aCkg cHJvY2VzcyBvZiBjbGVhbmluZyB1cCBzdGFsZSByZXF1ZXN0cwo+PiBhZnRlciB1c2Vyc3BhY2Ug YmVjb21lcyBhIG1vZGljdW0gbGVzcyBlZmZpY2llbnQuCj4+Cj4+IEluIHRoZSBsb25nIHJ1biwg aXQgd2lsbCBiZWNvbWUgYXBwYXJlbnQgdGhhdCB0aGUgb3JkZXJlZAo+PiByaW5nLT5yZXF1ZXN0 X2xpc3QgbWF0Y2hlcyB0aGUgcmluZy0+dGltZWxpbmUsIGEgZnVuIGNoYWxsZW5nZSBmb3IgdGhl Cj4+IGZ1dHVyZSB3aWxsIGJlIHVuaWZ5aW5nIHRoZSB0d28gbGlzdHMgdG8gYXZvaWQgZHVwbGlj YXRpb24hCj4+Cj4+IHYyOiBXZSBuZWVkIGJvdGggZW5naW5lLW9yZGVyIGFuZCByaW5nLW9yZGVy IHByb2Nlc3NpbmcgdG8gbWFpbnRhaW4gb3VyCj4+IGtub3dsZWRnZSBvZiB3aGVyZSBpbmRpdmlk dWFsIHJpbmdzIGhhdmUgY29tcGxldGVkIHVwdG8gYXMgd2VsbCBhcwo+PiBrbm93aW5nIHdoYXQg d2FzIGxhc3QgZXhlY3V0aW5nIG9uIGFueSBlbmdpbmUuIEFuZCBmaW5hbGx5IGJ5IGRlY291cGxp bmcKPj4gcmV0aXJpbmcgdGhlIGNvbnRleHRzIG9uIHRoZSBlbmdpbmUgYW5kIHRoZSB0aW1lbGlu ZXMgYWxvbmcgdGhlIHJpbmdzLAo+PiB3ZSBkbyBoYXZlIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8g dGhlIGNvbnRleHQgb24gZWFjaCByZXF1ZXN0Cj4+IChwcmV2aW91c2x5IGl0IHdhcyBndWFyYW50 ZWVkIGJ5IHRoZSBjb250ZXh0IGJlaW5nIHBpbm5lZCkuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+PiBDYzogVHZydGtvIFVyc3Vs aW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4gLS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKy0K Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uY8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqAgMSArCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVz dC5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAxNDAgKysrKysrKysrKystLS0tLS0tCj4+IMKgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdXRpbHMuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 wqDCoCA2ICsKPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jwqDC oMKgwqDCoMKgIHzCoMKgIDYgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5owqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvbW9ja19lbmdpbmUuY8KgIHzCoCAyNyArKystCj4+IMKgIC4uLi9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jwqAgfMKgwqAgMiArCj4+IMKgIDggZmls ZXMgY2hhbmdlZCwgMTIwIGluc2VydGlvbnMoKyksIDY2IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAKPj4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+IGluZGV4IDhmZDlmYjZlZmJhNS4uMTgzN2MwMWQ0NGQw IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gQEAgLTIwNTgsOCArMjA1OCw5IEBA IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHZvaWQgKCpy ZXN1bWUpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg dm9pZCAoKmNsZWFudXBfZW5naW5lKShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ PiAtwqDCoMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCB0aW1lbGluZXM7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fdGltZWxpbmUgZ2xvYmFsX3RpbWVsaW5lOwo+PiAr wqDCoMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCB0aW1lbGluZXM7Cj4+ICvCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIHJpbmdzOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGFj dGl2ZV9yZXF1ZXN0czsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiByZXF1ZXN0X3NlcmlhbDsK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgCj4+IGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+PiBpbmRleCA3OTVjYTgzYWVkN2EuLjkwNmUy Mzk1YzI0NSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4+IEBAIC01NjAwLDYgKzU2 MDAsNyBAQCBpbnQgaTkxNV9nZW1faW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAK Pj4gKmRldl9wcml2KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfZGVwZW5kZW5jaWVz Owo+PiDCoMKgwqDCoMKgIG11dGV4X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsK Pj4gK8KgwqDCoCBJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmd0LnJpbmdzKTsKPj4gwqDCoMKg wqDCoCBJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmd0LnRpbWVsaW5lcyk7Cj4+IMKgwqDCoMKg wqAgZXJyID0gaTkxNV9nZW1fdGltZWxpbmVfaW5pdF9fZ2xvYmFsKGRldl9wcml2KTsKPj4gwqDC oMKgwqDCoCBtdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jIAo+PiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4+IGluZGV4IGIxOTkzZDRhMWE1My4uYWE4 NGI1NDQ3ZmQ1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVl c3QuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+PiBAQCAt Mjg2LDYgKzI4Niw3IEBAIHN0YXRpYyBpbnQgcmVzZXJ2ZV9ndChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkKPj4gwqAgc3RhdGljIHZvaWQgdW5yZXNlcnZlX2d0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1KQo+PiDCoCB7Cj4+ICvCoMKgwqAgR0VNX0JVR19PTighaTkxNS0+Z3Qu YWN0aXZlX3JlcXVlc3RzKTsKPj4gwqDCoMKgwqDCoCBpZiAoIS0taTkxNS0+Z3QuYWN0aXZlX3Jl cXVlc3RzKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9nZW1fcGFyayhpOTE1KTsKPj4gwqAg fQo+PiBAQCAtMjk4LDYgKzI5OSw3IEBAIHZvaWQgaTkxNV9nZW1fcmV0aXJlX25vb3Aoc3RydWN0 IGk5MTVfZ2VtX2FjdGl2ZSAKPj4gKmFjdGl2ZSwKPj4gwqAgc3RhdGljIHZvaWQgYWR2YW5jZV9y aW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCj4+IMKgIHsKPj4gK8KgwqDCoCBzdHJ1 Y3QgaW50ZWxfcmluZyAqcmluZyA9IHJlcXVlc3QtPnJpbmc7Cj4+IMKgwqDCoMKgwqAgdW5zaWdu ZWQgaW50IHRhaWw7Cj4+IMKgwqDCoMKgwqAgLyoKPj4gQEAgLTMwOSw3ICszMTEsOCBAQCBzdGF0 aWMgdm9pZCBhZHZhbmNlX3Jpbmcoc3RydWN0IGk5MTVfcmVxdWVzdCAKPj4gKnJlcXVlc3QpCj4+ IMKgwqDCoMKgwqDCoCAqIE5vdGUgdGhpcyByZXF1aXJlcyB0aGF0IHdlIGFyZSBhbHdheXMgY2Fs bGVkIGluIHJlcXVlc3QKPj4gwqDCoMKgwqDCoMKgICogY29tcGxldGlvbiBvcmRlci4KPj4gwqDC oMKgwqDCoMKgICovCj4+IC3CoMKgwqAgaWYgKGxpc3RfaXNfbGFzdCgmcmVxdWVzdC0+cmluZ19s aW5rLCAKPj4gJnJlcXVlc3QtPnJpbmctPnJlcXVlc3RfbGlzdCkpIHsKPj4gK8KgwqDCoCBHRU1f QlVHX09OKCFsaXN0X2lzX2ZpcnN0KCZyZXF1ZXN0LT5yaW5nX2xpbmssIAo+PiAmcmluZy0+cmVx dWVzdF9saXN0KSk7Cj4+ICvCoMKgwqAgaWYgKGxpc3RfaXNfbGFzdCgmcmVxdWVzdC0+cmluZ19s aW5rLCAmcmluZy0+cmVxdWVzdF9saXN0KSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLyoKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBXZSBtYXkgcmFjZSBoZXJlIHdpdGggZXhlY2xpc3RzIHJl c3VibWl0dGluZyB0aGlzIHJlcXVlc3QKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBhcyB3ZSBy ZXRpcmUgaXQuIFRoZSByZXN1Ym1pc3Npb24gd2lsbCBtb3ZlIHRoZSByaW5nLT50YWlsCj4+IEBA IC0zMjIsOSArMzI1LDkgQEAgc3RhdGljIHZvaWQgYWR2YW5jZV9yaW5nKHN0cnVjdCBpOTE1X3Jl cXVlc3QgCj4+ICpyZXF1ZXN0KQo+PiDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCB0YWlsID0gcmVxdWVzdC0+cG9zdGZpeDsKPj4gwqDCoMKgwqDCoCB9Cj4+IC3CoMKg wqAgbGlzdF9kZWwoJnJlcXVlc3QtPnJpbmdfbGluayk7Cj4+ICvCoMKgwqAgbGlzdF9kZWxfaW5p dCgmcmVxdWVzdC0+cmluZ19saW5rKTsKPiAKPiBXaHkgdGhlIF9pbml0IGZsYXZvdXI/IFRoZXJl IGFyZSB0d28gbGlzdCBoZWFkcyBmb3IgYmVpbmcgb24gdHdvIAo+IHNlcGFyYXRlIGxpc3RzLCBi dXQgYXJlIGVpdGhlciBwYXRoIHJlYWNoYWJsZSBhZnRlciBiZWluZyByZW1vdmVkIGZyb20gCj4g dGhlIHJlc3BlY3RpdmUgbGlzdHM/IChJIG1heSBmaW5kIHRoZSBhbnN3ZXIgYXMgSSByZWFkIG9u LikKPiAKPj4gLcKgwqDCoCByZXF1ZXN0LT5yaW5nLT5oZWFkID0gdGFpbDsKPj4gK8KgwqDCoCBy aW5nLT5oZWFkID0gdGFpbDsKPj4gwqAgfQo+PiDCoCBzdGF0aWMgdm9pZCBmcmVlX2NhcHR1cmVf bGlzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQo+PiBAQCAtMzQwLDMwICszNDMsNzkg QEAgc3RhdGljIHZvaWQgZnJlZV9jYXB0dXJlX2xpc3Qoc3RydWN0IAo+PiBpOTE1X3JlcXVlc3Qg KnJlcXVlc3QpCj4+IMKgwqDCoMKgwqAgfQo+PiDCoCB9Cj4+ICtzdGF0aWMgdm9pZCBfX3JldGly ZV9lbmdpbmVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy ZXF1ZXN0KQo+PiArewo+PiArwqDCoMKgIEdFTV9CVUdfT04oIWk5MTVfcmVxdWVzdF9jb21wbGV0 ZWQocmVxdWVzdCkpOwo+PiArCj4+ICvCoMKgwqAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKPj4gKwo+ PiArwqDCoMKgIHNwaW5fbG9jaygmZW5naW5lLT50aW1lbGluZS0+bG9jayk7Cj4+ICvCoMKgwqAg R0VNX0JVR19PTighbGlzdF9pc19maXJzdCgmcmVxdWVzdC0+bGluaywgCj4+ICZlbmdpbmUtPnRp bWVsaW5lLT5yZXF1ZXN0cykpOwo+PiArwqDCoMKgIGxpc3RfZGVsX2luaXQoJnJlcXVlc3QtPmxp bmspOwo+PiArwqDCoMKgIHNwaW5fdW5sb2NrKCZlbmdpbmUtPnRpbWVsaW5lLT5sb2NrKTsKPj4g Kwo+PiArwqDCoMKgIHNwaW5fbG9jaygmcmVxdWVzdC0+bG9jayk7Cj4+ICvCoMKgwqAgaWYgKCF0 ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19TSUdOQUxFRF9CSVQsICZyZXF1ZXN0LT5mZW5jZS5mbGFn cykpCj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2Vfc2lnbmFsX2xvY2tlZCgmcmVxdWVzdC0+ ZmVuY2UpOwo+PiArwqDCoMKgIGlmICh0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lH TkFMX0JJVCwgCj4+ICZyZXF1ZXN0LT5mZW5jZS5mbGFncykpCj4+ICvCoMKgwqDCoMKgwqDCoCBp bnRlbF9lbmdpbmVfY2FuY2VsX3NpZ25hbGluZyhyZXF1ZXN0KTsKPj4gK8KgwqDCoCBpZiAocmVx dWVzdC0+d2FpdGJvb3N0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBHRU1fQlVHX09OKCFhdG9taWNf cmVhZCgmcmVxdWVzdC0+aTkxNS0+Z3RfcG0ucnBzLm51bV93YWl0ZXJzKSk7Cj4+ICvCoMKgwqDC oMKgwqDCoCBhdG9taWNfZGVjKCZyZXF1ZXN0LT5pOTE1LT5ndF9wbS5ycHMubnVtX3dhaXRlcnMp Owo+PiArwqDCoMKgIH0KPj4gK8KgwqDCoCBzcGluX3VubG9jaygmcmVxdWVzdC0+bG9jayk7Cj4+ ICsKPj4gK8KgwqDCoCBsb2NhbF9pcnFfZW5hYmxlKCk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiAr wqDCoMKgwqAgKiBUaGUgYmFja2luZyBvYmplY3QgZm9yIHRoZSBjb250ZXh0IGlzIGRvbmUgYWZ0 ZXIgc3dpdGNoaW5nIHRvIHRoZQo+PiArwqDCoMKgwqAgKiAqbmV4dCogY29udGV4dC4gVGhlcmVm b3JlIHdlIGNhbm5vdCByZXRpcmUgdGhlIHByZXZpb3VzIAo+PiBjb250ZXh0IHVudGlsCj4+ICvC oMKgwqDCoCAqIHRoZSBuZXh0IGNvbnRleHQgaGFzIGFscmVhZHkgc3RhcnRlZCBydW5uaW5nLiBI b3dldmVyLCBzaW5jZSB3ZQo+PiArwqDCoMKgwqAgKiBjYW5ub3QgdGFrZSB0aGUgcmVxdWlyZWQg bG9ja3MgYXQgaTkxNV9yZXF1ZXN0X3N1Ym1pdCgpIHdlCj4+ICvCoMKgwqDCoCAqIGRlZmVyIHRo ZSB1bnBpbm5pbmcgb2YgdGhlIGFjdGl2ZSBjb250ZXh0IHRvIG5vdywgcmV0aXJlbWVudCBvZgo+ PiArwqDCoMKgwqAgKiB0aGUgc3Vic2VxdWVudCByZXF1ZXN0Lgo+PiArwqDCoMKgwqAgKi8KPj4g K8KgwqDCoCBpZiAoZW5naW5lLT5sYXN0X3JldGlyZWRfY29udGV4dCkKPj4gK8KgwqDCoMKgwqDC oMKgIGVuZ2luZS0+Y29udGV4dF91bnBpbihlbmdpbmUsIGVuZ2luZS0+bGFzdF9yZXRpcmVkX2Nv bnRleHQpOwo+PiArwqDCoMKgIGVuZ2luZS0+bGFzdF9yZXRpcmVkX2NvbnRleHQgPSByZXF1ZXN0 LT5jdHg7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9fcmV0aXJlX2VuZ2luZV91cHRvKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+PiArewo+PiArwqDCoMKgIHN0cnVj dCBpOTE1X3JlcXVlc3QgKnRtcDsKPj4gKwo+PiArwqDCoMKgIEdFTV9CVUdfT04oIWk5MTVfcmVx dWVzdF9jb21wbGV0ZWQocnEpKTsKPj4gK8KgwqDCoCBpZiAobGlzdF9lbXB0eSgmcnEtPmxpbmsp KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ICvCoMKgwqAgZG8gewo+PiArwqDC oMKgwqDCoMKgwqAgdG1wID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT50aW1lbGluZS0+cmVx dWVzdHMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0 eXBlb2YoKnRtcCksIGxpbmspOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBHRU1fQlVHX09OKHRt cC0+ZW5naW5lICE9IGVuZ2luZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBfX3JldGlyZV9lbmdpbmVf cmVxdWVzdChlbmdpbmUsIHRtcCk7Cj4+ICvCoMKgwqAgfSB3aGlsZSAodG1wICE9IHJxKTsKPj4g K30KPj4gKwo+PiDCoCBzdGF0aWMgdm9pZCBpOTE1X3JlcXVlc3RfcmV0aXJlKHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJlcXVlc3QpCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVf Z2VtX2FjdGl2ZSAqYWN0aXZlLCAqbmV4dDsKPj4gwqDCoMKgwqDCoCBHRU1fVFJBQ0UoIiVzIGZl bmNlICVsbHg6JWQsIGdsb2JhbD0lZCwgY3VycmVudCAlZFxuIiwKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoCBlbmdpbmUtPm5hbWUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqAgcmVxdWVzdC0+ZW5naW5l LT5uYW1lLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcXVlc3QtPmZlbmNlLmNvbnRleHQs IHJlcXVlc3QtPmZlbmNlLnNlcW5vLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcXVlc3Qt Pmdsb2JhbF9zZXFubywKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9lbmdpbmVfZ2V0X3Nl cW5vKGVuZ2luZSkpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2VuZ2luZV9nZXRfc2Vx bm8ocmVxdWVzdC0+ZW5naW5lKSk7Cj4+IMKgwqDCoMKgwqAgbG9ja2RlcF9hc3NlcnRfaGVsZCgm cmVxdWVzdC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAgR0VNX0JVR19P TighaTkxNV9zd19mZW5jZV9zaWduYWxlZCgmcmVxdWVzdC0+c3VibWl0KSk7Cj4+IMKgwqDCoMKg wqAgR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChyZXF1ZXN0KSk7Cj4+IC3CoMKg wqAgR0VNX0JVR19PTighcmVxdWVzdC0+aTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKTsKPj4gwqDC oMKgwqDCoCB0cmFjZV9pOTE1X3JlcXVlc3RfcmV0aXJlKHJlcXVlc3QpOwo+PiAtwqDCoMKgIHNw aW5fbG9ja19pcnEoJmVuZ2luZS0+dGltZWxpbmUtPmxvY2spOwo+PiAtwqDCoMKgIGxpc3RfZGVs X2luaXQoJnJlcXVlc3QtPmxpbmspOwo+PiAtwqDCoMKgIHNwaW5fdW5sb2NrX2lycSgmZW5naW5l LT50aW1lbGluZS0+bG9jayk7Cj4+IC0KPj4gwqDCoMKgwqDCoCBhZHZhbmNlX3JpbmcocmVxdWVz dCk7Cj4+IC0KPj4gwqDCoMKgwqDCoCBmcmVlX2NhcHR1cmVfbGlzdChyZXF1ZXN0KTsKPj4gwqDC oMKgwqDCoCAvKgo+PiBAQCAtNDAwLDQ5ICs0NTIsMzAgQEAgc3RhdGljIHZvaWQgaTkxNV9yZXF1 ZXN0X3JldGlyZShzdHJ1Y3QgCj4+IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPj4gwqDCoMKgwqDC oCAvKiBSZXRpcmVtZW50IGRlY2F5cyB0aGUgYmFuIHNjb3JlIGFzIGl0IGlzIGEgc2lnbiBvZiBj dHggCj4+IHByb2dyZXNzICovCj4+IMKgwqDCoMKgwqAgYXRvbWljX2RlY19pZl9wb3NpdGl2ZSgm cmVxdWVzdC0+Y3R4LT5iYW5fc2NvcmUpOwo+PiAtwqDCoMKgIC8qCj4+IC3CoMKgwqDCoCAqIFRo ZSBiYWNraW5nIG9iamVjdCBmb3IgdGhlIGNvbnRleHQgaXMgZG9uZSBhZnRlciBzd2l0Y2hpbmcg dG8gdGhlCj4+IC3CoMKgwqDCoCAqICpuZXh0KiBjb250ZXh0LiBUaGVyZWZvcmUgd2UgY2Fubm90 IHJldGlyZSB0aGUgcHJldmlvdXMgCj4+IGNvbnRleHQgdW50aWwKPj4gLcKgwqDCoMKgICogdGhl IG5leHQgY29udGV4dCBoYXMgYWxyZWFkeSBzdGFydGVkIHJ1bm5pbmcuIEhvd2V2ZXIsIHNpbmNl IHdlCj4+IC3CoMKgwqDCoCAqIGNhbm5vdCB0YWtlIHRoZSByZXF1aXJlZCBsb2NrcyBhdCBpOTE1 X3JlcXVlc3Rfc3VibWl0KCkgd2UKPj4gLcKgwqDCoMKgICogZGVmZXIgdGhlIHVucGlubmluZyBv ZiB0aGUgYWN0aXZlIGNvbnRleHQgdG8gbm93LCByZXRpcmVtZW50IG9mCj4+IC3CoMKgwqDCoCAq IHRoZSBzdWJzZXF1ZW50IHJlcXVlc3QuCj4+IC3CoMKgwqDCoCAqLwo+PiAtwqDCoMKgIGlmIChl bmdpbmUtPmxhc3RfcmV0aXJlZF9jb250ZXh0KQo+PiAtwqDCoMKgwqDCoMKgwqAgZW5naW5lLT5j b250ZXh0X3VucGluKGVuZ2luZSwgZW5naW5lLT5sYXN0X3JldGlyZWRfY29udGV4dCk7Cj4+IC3C oMKgwqAgZW5naW5lLT5sYXN0X3JldGlyZWRfY29udGV4dCA9IHJlcXVlc3QtPmN0eDsKPj4gLQo+ PiAtwqDCoMKgIHNwaW5fbG9ja19pcnEoJnJlcXVlc3QtPmxvY2spOwo+PiAtwqDCoMKgIGlmICgh dGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULCAmcmVxdWVzdC0+ZmVuY2UuZmxh Z3MpKQo+PiAtwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3NpZ25hbF9sb2NrZWQoJnJlcXVlc3Qt PmZlbmNlKTsKPj4gLcKgwqDCoCBpZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfRU5BQkxFX1NJ R05BTF9CSVQsIAo+PiAmcmVxdWVzdC0+ZmVuY2UuZmxhZ3MpKQo+PiAtwqDCoMKgwqDCoMKgwqAg aW50ZWxfZW5naW5lX2NhbmNlbF9zaWduYWxpbmcocmVxdWVzdCk7Cj4+IC3CoMKgwqAgaWYgKHJl cXVlc3QtPndhaXRib29zdCkgewo+PiAtwqDCoMKgwqDCoMKgwqAgR0VNX0JVR19PTighYXRvbWlj X3JlYWQoJnJlcXVlc3QtPmk5MTUtPmd0X3BtLnJwcy5udW1fd2FpdGVycykpOwo+PiAtwqDCoMKg wqDCoMKgwqAgYXRvbWljX2RlYygmcmVxdWVzdC0+aTkxNS0+Z3RfcG0ucnBzLm51bV93YWl0ZXJz KTsKPj4gLcKgwqDCoCB9Cj4+IC3CoMKgwqAgc3Bpbl91bmxvY2tfaXJxKCZyZXF1ZXN0LT5sb2Nr KTsKPj4gK8KgwqDCoCBfX3JldGlyZV9lbmdpbmVfdXB0byhyZXF1ZXN0LT5lbmdpbmUsIHJlcXVl c3QpOwo+IAo+IEkgZGlkIG5vdCBmaWd1cmUgb3V0IHdoeSBkbyB5b3UgbmVlZCB0byBkbyB0aGlz LiBOb3JtYWxseSByZXRpcmVtZW50IAo+IGRyaXZlbiBmcm9tIHJpbmcgdGltZWxpbmVzIHdvdWxk IHJldGlyZSByZXF1ZXN0cyBvbiB0aGUgc2FtZSBlbmdpbmUgCj4gYmVsb25naW5nIHRvIGEgZGlm ZmVyZW50IHJpbmcsIGFzIGl0IHdhbGtzIG92ZXIgcmluZyB0aW1lbGluZXMuCj4gCj4gT25seSBm b3IgZGlyZWN0IGNhbGxlcnMgb2YgaTkxNV9yZXF1ZXN0X3JldGlyZSBpdCBtYXkgbWFrZSBhIGRp ZmZlcmVuY2UgCj4gYnV0IEkgZG9uJ3QgdW5kZXJzdGFuZCBpcyBpdCBhbiBmdW5jdGlvbmFsIGRp ZmZlcmVuY2Ugb3IganVzdCBvcHRpbWlzYXRpb24uCgpDb250ZXh0IHBpbm5pbmcgb2YgY291cnNl IG5lZWRzIHRvIGJlIGluIGVuZ2luZSBvcmRlciEKClJlZ2FyZHMsCgpUdnJ0a28KCgo+IFRoaXMg aXMgdGhlbiBmcm9tIHdoZXJlIGxpc3RfZGVsX2luaXQgY29tZXMgZnJvbSwgc2luY2UgdGhpcyBm dW5jdGlvbiAKPiBjYW4gcmV0aXJlIHdpZGVyIHRoYW4gdGhlIGNhbGxlciB3b3VsZCBleHBlY3Qu IEJ1dCB0aGVuIGl0IHJldGlyZXMgb24gCj4gdGhlIGVuZ2luZSAodXB0bykgYW5kIHRoZSBjYWxs ZXJzIGp1c3Qgd2Fsa3MgdGhlIGxpc3QgYW5kIGNhbGxzIHJldGlyZSAKPiBvbmx5IHRvIGZpbmQg YWxyZWFkeSB1bmxpbmtlZCBlbGVtZW50cy4gQ291bGQgaXQganVzdCBhcyB3ZWxsIHRoZW4gCj4g cmV0aXJlIGl0IGNvbXBsZXRlbHk/Cj4gCj4+IMKgwqDCoMKgwqAgdW5yZXNlcnZlX2d0KHJlcXVl c3QtPmk5MTUpOwo+PiDCoMKgwqDCoMKgIGk5MTVfc2NoZWRfbm9kZV9maW5pKHJlcXVlc3QtPmk5 MTUsICZyZXF1ZXN0LT5zY2hlZCk7Cj4+ICsKPj4gK8KgwqDCoCBpOTE1X2dlbV9jb250ZXh0X3B1 dChyZXF1ZXN0LT5jdHgpOwo+PiDCoMKgwqDCoMKgIGk5MTVfcmVxdWVzdF9wdXQocmVxdWVzdCk7 Cj4+IMKgIH0KPj4gwqAgdm9pZCBpOTE1X3JlcXVlc3RfcmV0aXJlX3VwdG8oc3RydWN0IGk5MTVf cmVxdWVzdCAqcnEpCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUgPSBycS0+ZW5naW5lOwo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nID0g cnEtPnJpbmc7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfcmVxdWVzdCAqdG1wOwo+PiDCoMKg wqDCoMKgIGxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJxLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsK Pj4gwqDCoMKgwqDCoCBHRU1fQlVHX09OKCFpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSk7Cj4+ IC3CoMKgwqAgaWYgKGxpc3RfZW1wdHkoJnJxLT5saW5rKSkKPj4gK8KgwqDCoCBpZiAobGlzdF9l bXB0eSgmcnEtPnJpbmdfbGluaykpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+IMKg wqDCoMKgwqAgZG8gewo+PiAtwqDCoMKgwqDCoMKgwqAgdG1wID0gbGlzdF9maXJzdF9lbnRyeSgm ZW5naW5lLT50aW1lbGluZS0+cmVxdWVzdHMsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB0eXBlb2YoKnRtcCksIGxpbmspOwo+PiArwqDCoMKgwqDCoMKg wqAgdG1wID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+cmVxdWVzdF9saXN0LAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHlwZW9mKCp0bXApLCByaW5n X2xpbmspOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9yZXF1ZXN0X3JldGlyZSh0bXApOwo+ PiDCoMKgwqDCoMKgIH0gd2hpbGUgKHRtcCAhPSBycSk7Cj4+IEBAIC02NTEsOSArNjg0LDkgQEAg aTkxNV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgCj4+IHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+IMKgwqDCoMKgwqAgaWYgKHJldCkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX3VucmVzZXJ2ZTsKPj4gLcKgwqDCoCAvKiBNb3ZlIHRo ZSBvbGRlc3QgcmVxdWVzdCB0byB0aGUgc2xhYi1jYWNoZSAoaWYgbm90IGluIHVzZSEpICovCj4+ IC3CoMKgwqAgcnEgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmVuZ2luZS0+dGltZWxpbmUt PnJlcXVlc3RzLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHR5cGVvZigqcnEpLCBsaW5rKTsKPj4gK8KgwqDCoCAvKiBNb3ZlIG91ciBvbGRlc3QgcmVxdWVz dCB0byB0aGUgc2xhYi1jYWNoZSAoaWYgbm90IGluIHVzZSEpICovCj4+ICvCoMKgwqAgcnEgPSBs aXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJnJpbmctPnJlcXVlc3RfbGlzdCwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0eXBlb2YoKnJxKSwgcmluZ19saW5r KTsKPiAKPiBUaGlzIGlzIGxlc3MgZWZmaWNpZW50IG5vdyAtIEkgd29uZGVyIGlmIHlvdSBzaG91 bGQgc3RpbGwgYmUgbG9va2luZyBhdCAKPiB0aGUgZW5naW5lIHRpbWVsaW5lIGhlcmU/Cj4gCj4+ IMKgwqDCoMKgwqAgaWYgKHJxICYmIGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgaTkxNV9yZXF1ZXN0X3JldGlyZShycSk7Cj4+IEBAIC03MzMsNyArNzY2 LDcgQEAgaTkxNV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwg Cj4+IHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+IMKgwqDCoMKgwqAgSU5JVF9MSVNU X0hFQUQoJnJxLT5hY3RpdmVfbGlzdCk7Cj4+IMKgwqDCoMKgwqAgcnEtPmk5MTUgPSBpOTE1Owo+ PiDCoMKgwqDCoMKgIHJxLT5lbmdpbmUgPSBlbmdpbmU7Cj4+IC3CoMKgwqAgcnEtPmN0eCA9IGN0 eDsKPj4gK8KgwqDCoCBycS0+Y3R4ID0gaTkxNV9nZW1fY29udGV4dF9nZXQoY3R4KTsKPiAKPiBQ dXR0aW5nIGluIGEgc2hvcnQgY29tbWVudCBzYXlpbmcgd2h5IHRoZSByZWZlcmVuY2UgaXMgbmVl ZGVkIHdvdWxkIGJlIAo+IGdvb2QuCj4gCj4+IMKgwqDCoMKgwqAgcnEtPnJpbmcgPSByaW5nOwo+ PiDCoMKgwqDCoMKgIC8qIE5vIHphbGxvYywgbXVzdCBjbGVhciB3aGF0IHdlIG5lZWQgYnkgaGFu ZCAqLwo+PiBAQCAtNzc3LDYgKzgxMCw3IEBAIGk5MTVfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsIAo+PiBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ PiDCoCBlcnJfdW53aW5kOgo+PiDCoMKgwqDCoMKgIHJxLT5yaW5nLT5lbWl0ID0gcnEtPmhlYWQ7 Cj4+ICvCoMKgwqAgaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPj4gwqDCoMKgwqDCoCAvKiBN YWtlIHN1cmUgd2UgZGlkbid0IGFkZCBvdXJzZWx2ZXMgdG8gZXh0ZXJuYWwgc3RhdGUgYmVmb3Jl IAo+PiBmcmVlaW5nICovCj4+IMKgwqDCoMKgwqAgR0VNX0JVR19PTighbGlzdF9lbXB0eSgmcnEt PmFjdGl2ZV9saXN0KSk7Cj4+IEBAIC0xMzU3LDM4ICsxMzkxLDMwIEBAIGxvbmcgaTkxNV9yZXF1 ZXN0X3dhaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4+IMKgwqDCoMKgwqAgcmV0dXJuIHRp bWVvdXQ7Cj4+IMKgIH0KPj4gLXN0YXRpYyB2b2lkIGVuZ2luZV9yZXRpcmVfcmVxdWVzdHMoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiArc3RhdGljIHZvaWQgcmluZ19yZXRpcmVf cmVxdWVzdHMoc3RydWN0IGludGVsX3JpbmcgKnJpbmcpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LCAqbmV4dDsKPj4gLcKgwqDCoCB1MzIgc2Vxbm8g PSBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7Cj4+IC3CoMKgwqAgTElTVF9IRUFEKHJl dGlyZSk7Cj4+IC3CoMKgwqAgc3Bpbl9sb2NrX2lycSgmZW5naW5lLT50aW1lbGluZS0+bG9jayk7 Cj4+IMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcXVlc3QsIG5leHQsCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmZW5naW5lLT50aW1lbGluZS0+cmVx dWVzdHMsIGxpbmspIHsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmICghaTkxNV9zZXFub19wYXNzZWQo c2Vxbm8sIHJlcXVlc3QtPmdsb2JhbF9zZXFubykpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmcmluZy0+cmVxdWVzdF9saXN0LCByaW5nX2xpbmspIHsKPj4gK8KgwqDCoMKg wqDCoMKgIGlmICghaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChyZXF1ZXN0KSkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IC3CoMKgwqDCoMKgwqDCoCBsaXN0X21vdmVfdGFp bCgmcmVxdWVzdC0+bGluaywgJnJldGlyZSk7Cj4+IC3CoMKgwqAgfQo+PiAtwqDCoMKgIHNwaW5f dW5sb2NrX2lycSgmZW5naW5lLT50aW1lbGluZS0+bG9jayk7Cj4+IC0KPj4gLcKgwqDCoCBsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxdWVzdCwgbmV4dCwgJnJldGlyZSwgbGluaykKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGk5MTVfcmVxdWVzdF9yZXRpcmUocmVxdWVzdCk7Cj4+ICvCoMKgwqAg fQo+PiDCoCB9Cj4+IMKgIHZvaWQgaTkxNV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCj4+IMKgIHsKPj4gLcKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7Cj4+IC3CoMKgwqAgZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4+ICvCoMKgwqAg c3RydWN0IGludGVsX3JpbmcgKnJpbmcsICpuZXh0Owo+PiDCoMKgwqDCoMKgIGxvY2tkZXBfYXNz ZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIGlmICghaTkx NS0+Z3QuYWN0aXZlX3JlcXVlc3RzKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiAt wqDCoMKgIGZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKQo+PiAtwqDCoMKgwqDCoMKg wqAgZW5naW5lX3JldGlyZV9yZXF1ZXN0cyhlbmdpbmUpOwo+PiArwqDCoMKgIGxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShyaW5nLCBuZXh0LCAmaTkxNS0+Z3QucmluZ3MsIGxpbmspCj4+ICvCoMKg wqDCoMKgwqDCoCByaW5nX3JldGlyZV9yZXF1ZXN0cyhyaW5nKTsKPj4gwqAgfQo+PiDCoCAjaWYg SVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3V0aWxzLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV91dGlscy5oCj4+IGluZGV4IDA2OTU3MTc1MjJlYS4uMDAxNjVhZDU1ZmIzIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3V0aWxzLmgKPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV91dGlscy5oCj4+IEBAIC0xMjAsNiArMTIwLDEyIEBAIHN0YXRp YyBpbmxpbmUgdTY0IHB0cl90b191NjQoY29uc3Qgdm9pZCAqcHRyKQo+PiDCoCAjaW5jbHVkZSA8 bGludXgvbGlzdC5oPgo+PiArc3RhdGljIGlubGluZSBpbnQgbGlzdF9pc19maXJzdChjb25zdCBz dHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCj4+ICt7Cj4+ICvCoMKgwqAgcmV0dXJuIGhl YWQtPm5leHQgPT0gbGlzdDsKPj4gK30KPj4gKwo+PiDCoCBzdGF0aWMgaW5saW5lIHZvaWQgX19s aXN0X2RlbF9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QpCj4+IMKgIHsK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyAK Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPj4gaW5kZXggYzY4 YWM2MDViOGE5Li43NWRjYTI4NzgyZWUgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3JpbmdidWZmZXIuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmMKPj4gQEAgLTEwNjUsNyArMTA2NSw2IEBAIGludCBpbnRlbF9yaW5nX3Bp bihzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZywKPj4gwqAgdm9pZCBpbnRlbF9yaW5nX3Jlc2V0KHN0 cnVjdCBpbnRlbF9yaW5nICpyaW5nLCB1MzIgdGFpbCkKPj4gwqAgewo+PiAtwqDCoMKgIEdFTV9C VUdfT04oIWxpc3RfZW1wdHkoJnJpbmctPnJlcXVlc3RfbGlzdCkpOwo+PiDCoMKgwqDCoMKgIHJp bmctPnRhaWwgPSB0YWlsOwo+PiDCoMKgwqDCoMKgIHJpbmctPmhlYWQgPSB0YWlsOwo+PiDCoMKg wqDCoMKgIHJpbmctPmVtaXQgPSB0YWlsOwo+PiBAQCAtMTEyNCw2ICsxMTIzLDcgQEAgaW50ZWxf ZW5naW5lX2NyZWF0ZV9yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgCj4+ICplbmdpbmUsIGlu dCBzaXplKQo+PiDCoMKgwqDCoMKgIEdFTV9CVUdfT04oIWlzX3Bvd2VyX29mXzIoc2l6ZSkpOwo+ PiDCoMKgwqDCoMKgIEdFTV9CVUdfT04oUklOR19DVExfU0laRShzaXplKSAmIH5SSU5HX05SX1BB R0VTKTsKPj4gK8KgwqDCoCBsb2NrZGVwX2Fzc2VydF9oZWxkKCZlbmdpbmUtPmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+PiDCoMKgwqDCoMKgIHJpbmcgPSBremFsbG9jKHNpemVvZigqcmluZyks IEdGUF9LRVJORUwpOwo+PiDCoMKgwqDCoMKgIGlmICghcmluZykKPj4gQEAgLTExNDksNiArMTE0 OSw4IEBAIGludGVsX2VuZ2luZV9jcmVhdGVfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIAo+ PiAqZW5naW5lLCBpbnQgc2l6ZSkKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgcmluZy0+ dm1hID0gdm1hOwo+PiArwqDCoMKgIGxpc3RfYWRkKCZyaW5nLT5saW5rLCAmZW5naW5lLT5pOTE1 LT5ndC5yaW5ncyk7Cj4+ICsKPj4gwqDCoMKgwqDCoCByZXR1cm4gcmluZzsKPj4gwqAgfQo+PiBA QCAtMTE2MCw2ICsxMTYyLDggQEAgaW50ZWxfcmluZ19mcmVlKHN0cnVjdCBpbnRlbF9yaW5nICpy aW5nKQo+PiDCoMKgwqDCoMKgIGk5MTVfdm1hX2Nsb3NlKHJpbmctPnZtYSk7Cj4+IMKgwqDCoMKg wqAgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV91bmxlc3NfYWN0aXZlKG9iaik7Cj4+ICvCoMKg wqAgbGlzdF9kZWwoJnJpbmctPmxpbmspOwo+PiArCj4+IMKgwqDCoMKgwqAga2ZyZWUocmluZyk7 Cj4+IMKgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPj4g aW5kZXggYzVlMjc5MDViMGUxLi5kODE2ZjhkZWEyNDUgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPj4gQEAgLTEyOSw2ICsxMjksNyBAQCBzdHJ1Y3QgaW50 ZWxfcmluZyB7Cj4+IMKgwqDCoMKgwqAgdm9pZCAqdmFkZHI7Cj4+IMKgwqDCoMKgwqAgc3RydWN0 IGxpc3RfaGVhZCByZXF1ZXN0X2xpc3Q7Cj4+ICvCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBsaW5r Owo+PiDCoMKgwqDCoMKgIHUzMiBoZWFkOwo+PiDCoMKgwqDCoMKgIHUzMiB0YWlsOwo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMgCj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMKPj4gaW5kZXgg NzhhODllZmExMTE5Li5hMGJjMzI0ZWRhZGQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5jCj4+IEBAIC0xNDAsOSArMTQwLDE4IEBAIHN0YXRp YyBzdHJ1Y3QgaW50ZWxfcmluZyAqbW9ja19yaW5nKHN0cnVjdCAKPj4gaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4+IMKgwqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJnJpbmctPnJlcXVlc3RfbGlz dCk7Cj4+IMKgwqDCoMKgwqAgaW50ZWxfcmluZ191cGRhdGVfc3BhY2UocmluZyk7Cj4+ICvCoMKg wqAgbGlzdF9hZGQoJnJpbmctPmxpbmssICZlbmdpbmUtPmk5MTUtPmd0LnJpbmdzKTsKPj4gKwo+ PiDCoMKgwqDCoMKgIHJldHVybiByaW5nOwo+PiDCoCB9Cj4+ICtzdGF0aWMgdm9pZCBtb2NrX3Jp bmdfZnJlZShzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBsaXN0X2Rl bCgmcmluZy0+bGluayk7Cj4+ICsKPj4gK8KgwqDCoCBrZnJlZShyaW5nKTsKPj4gK30KPj4gKwo+ PiDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICptb2NrX2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnN0IGNoYXIgKm5hbWUsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpbnQgaWQpCj4+IEBAIC0xNTUsMTIgKzE2NCw2IEBAIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKm1vY2tfZW5naW5lKHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwK Pj4gwqDCoMKgwqDCoCBpZiAoIWVuZ2luZSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBO VUxMOwo+PiAtwqDCoMKgIGVuZ2luZS0+YmFzZS5idWZmZXIgPSBtb2NrX3JpbmcoJmVuZ2luZS0+ YmFzZSk7Cj4+IC3CoMKgwqAgaWYgKCFlbmdpbmUtPmJhc2UuYnVmZmVyKSB7Cj4+IC3CoMKgwqDC oMKgwqDCoCBrZnJlZShlbmdpbmUpOwo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+ IC3CoMKgwqAgfQo+PiAtCj4+IMKgwqDCoMKgwqAgLyogbWluaW1hbCBlbmdpbmUgc2V0dXAgZm9y IHJlcXVlc3RzICovCj4+IMKgwqDCoMKgwqAgZW5naW5lLT5iYXNlLmk5MTUgPSBpOTE1Owo+PiDC oMKgwqDCoMKgIHNucHJpbnRmKGVuZ2luZS0+YmFzZS5uYW1lLCBzaXplb2YoZW5naW5lLT5iYXNl Lm5hbWUpLCAiJXMiLCBuYW1lKTsKPj4gQEAgLTE4NSw3ICsxODgsMTYgQEAgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqbW9ja19lbmdpbmUoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICppOTE1 LAo+PiDCoMKgwqDCoMKgIHRpbWVyX3NldHVwKCZlbmdpbmUtPmh3X2RlbGF5LCBod19kZWxheV9j b21wbGV0ZSwgMCk7Cj4+IMKgwqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmVuZ2luZS0+aHdfcXVl dWUpOwo+PiArwqDCoMKgIGVuZ2luZS0+YmFzZS5idWZmZXIgPSBtb2NrX3JpbmcoJmVuZ2luZS0+ YmFzZSk7Cj4+ICvCoMKgwqAgaWYgKCFlbmdpbmUtPmJhc2UuYnVmZmVyKQo+PiArwqDCoMKgwqDC oMKgwqAgZ290byBlcnJfYnJlYWRjcnVtYnM7Cj4+ICsKPj4gwqDCoMKgwqDCoCByZXR1cm4gJmVu Z2luZS0+YmFzZTsKPj4gKwo+PiArZXJyX2JyZWFkY3J1bWJzOgo+PiArwqDCoMKgIGludGVsX2Vu Z2luZV9maW5pX2JyZWFkY3J1bWJzKCZlbmdpbmUtPmJhc2UpOwo+PiArwqDCoMKgIGtmcmVlKGVu Z2luZSk7Cj4+ICvCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+IMKgIH0KPj4gwqAgdm9pZCBtb2NrX2Vu Z2luZV9mbHVzaChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+IEBAIC0yMTksOCAr MjMxLDkgQEAgdm9pZCBtb2NrX2VuZ2luZV9mcmVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPj4gwqDCoMKgwqDCoCBpZiAoZW5naW5lLT5sYXN0X3JldGlyZWRfY29udGV4dCkKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIGVuZ2luZS0+Y29udGV4dF91bnBpbihlbmdpbmUsIGVuZ2luZS0+ bGFzdF9yZXRpcmVkX2NvbnRleHQpOwo+PiArwqDCoMKgIG1vY2tfcmluZ19mcmVlKGVuZ2luZS0+ YnVmZmVyKTsKPj4gKwo+PiDCoMKgwqDCoMKgIGludGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJz KGVuZ2luZSk7Cj4+IC3CoMKgwqAga2ZyZWUoZW5naW5lLT5idWZmZXIpOwo+PiDCoMKgwqDCoMKg IGtmcmVlKGVuZ2luZSk7Cj4+IMKgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMKPj4gaW5kZXggZTZkNGI4ODI1OTlhLi5hYzRi YWNmOGI1YjkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9t b2NrX2dlbV9kZXZpY2UuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv bW9ja19nZW1fZGV2aWNlLmMKPj4gQEAgLTQ0LDYgKzQ0LDcgQEAgdm9pZCBtb2NrX2RldmljZV9m bHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKg IG1vY2tfZW5naW5lX2ZsdXNoKGVuZ2luZSk7Cj4+IMKgwqDCoMKgwqAgaTkxNV9yZXRpcmVfcmVx dWVzdHMoaTkxNSk7Cj4+ICvCoMKgwqAgR0VNX0JVR19PTihpOTE1LT5ndC5hY3RpdmVfcmVxdWVz dHMpOwo+PiDCoCB9Cj4+IMKgIHN0YXRpYyB2b2lkIG1vY2tfZGV2aWNlX3JlbGVhc2Uoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKPj4gQEAgLTIyNCw2ICsyMjUsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqbW9ja19nZW1fZGV2aWNlKHZvaWQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3Rv IGVycl9kZXBlbmRlbmNpZXM7Cj4+IMKgwqDCoMKgwqAgbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4+ICvCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmk5MTUtPmd0LnJpbmdzKTsK Pj4gwqDCoMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmaTkxNS0+Z3QudGltZWxpbmVzKTsKPj4gwqDC oMKgwqDCoCBlcnIgPSBpOTE1X2dlbV90aW1lbGluZV9pbml0X19nbG9iYWwoaTkxNSk7Cj4+IMKg wqDCoMKgwqAgaWYgKGVycikgewo+Pgo+IAo+IFNvcnJ5IEkgZGlkIG5vdCBzcG90IHRoZSBwcm9i bGVtIHlldC4gU3RpbGwgaW4gdGhlIHBoYXNlIG9mIHRyeWluZyB0byAKPiB1bmRlcnN0YW5kIHRo ZSBhcHByb2FjaC4KPiAKPiBSZWdhcmRzLAo+IAo+IFR2cnRrbwpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK