From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arun Siluvery Subject: Re: [PATCH 044/190] drm/i915: Move GEM request routines to i915_gem_request.c Date: Thu, 25 Feb 2016 17:52:12 +0000 Message-ID: <56CF3F4C.1070202@linux.intel.com> References: <1452503961-14837-1-git-send-email-chris@chris-wilson.co.uk> <1452503961-14837-44-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id C80EA6E1C3 for ; Thu, 25 Feb 2016 17:52:15 +0000 (UTC) In-Reply-To: <1452503961-14837-44-git-send-email-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 T24gMTEvMDEvMjAxNiAwOToxNiwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IE1pZ3JhdGUgdGhlIHJl cXVlc3Qgb3BlcmF0aW9ucyBvdXQgb2YgdGhlIG1haW4gYm9keSBvZiBpOTE1X2dlbS5jIGFuZAo+ IGludG8gdGhlaXIgb3duIEMgZmlsZSBmb3IgZWFzaWVyIGV4cGFuc2lvbi4KPgo+IHYyOiBNb3Zl IF9faTkxNV9hZGRfcmVxdWVzdCgpIGFjcm9zcyBhcyB3ZWxsCj4KPiBTaWduZWQtb2ZmLWJ5OiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KCmRvbid0IHdlIGxv c2UgdGhlIGhpc3RvcnkgaW4gZ2l0IGJsYW1lIHdoZW4gbW92ZWQgdG8gYSBuZXcgZmlsZT8gaXMg dGhpcyAKb2s/IGVzcGVjaWFsbHkgZm9yIGZpbGVzIGxpa2UgaTkxNV9nZW0uYy4KCnJlZ2FyZHMK QXJ1bgoKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8ICAgMSAr Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAyMDUgKy0tLS0t LS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgIHwgNjUyICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX3JlcXVlc3QuYyB8IDY1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oIHwgMjIzICsrKysrKysr KysrCj4gICA1IGZpbGVzIGNoYW5nZWQsIDg5NSBpbnNlcnRpb25zKCspLCA4NDUgZGVsZXRpb25z KC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f cmVxdWVzdC5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fcmVxdWVzdC5oCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDk5Y2U1OTFjODU3 NC4uYjBhODMyMTVkYjgwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtMzEsNiArMzEs NyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAo+ICAgCSAgaTkxNV9nZW1fZ3R0Lm8g XAo+ICAgCSAgaTkxNV9nZW0ubyBcCj4gICAJICBpOTE1X2dlbV9yZW5kZXJfc3RhdGUubyBcCj4g KwkgIGk5MTVfZ2VtX3JlcXVlc3QubyBcCj4gICAJICBpOTE1X2dlbV9zaHJpbmtlci5vIFwKPiAg IAkgIGk5MTVfZ2VtX3N0b2xlbi5vIFwKPiAgIAkgIGk5MTVfZ2VtX3RpbGluZy5vIFwKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA1N2U0NTBlMjVhZDYuLmVlMTQ2Y2UwMjQxMiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC00MSw2ICs0MSw3IEBACj4gICAjaW5jbHVk ZSAiaW50ZWxfbHJjLmgiCj4gICAjaW5jbHVkZSAiaTkxNV9nZW1fZ3R0LmgiCj4gICAjaW5jbHVk ZSAiaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmgiCj4gKyNpbmNsdWRlICJpOTE1X2dlbV9yZXF1ZXN0 LmgiCj4gICAjaW5jbHVkZSA8bGludXgvaW8tbWFwcGluZy5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgo+IEBAIC0yMTYyLDE3 OSArMjE2MywxNSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7Cj4gICB9Owo+ICAgI2Rl ZmluZSB0b19pbnRlbF9ibyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QsIGJhc2UpCj4KPiAtdm9pZCBpOTE1X2dlbV90cmFja19mYihzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2xkLAo+IC0JCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq bmV3LAo+IC0JCSAgICAgICB1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRzKTsKPiAtCj4gLS8qKgo+ IC0gKiBSZXF1ZXN0IHF1ZXVlIHN0cnVjdHVyZS4KPiAtICoKPiAtICogVGhlIHJlcXVlc3QgcXVl dWUgYWxsb3dzIHVzIHRvIG5vdGUgc2VxdWVuY2UgbnVtYmVycyB0aGF0IGhhdmUgYmVlbiBlbWl0 dGVkCj4gLSAqIGFuZCBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIGFjdGl2ZSBidWZmZXJzIHRvIGJl IHJldGlyZWQuCj4gLSAqCj4gLSAqIEJ5IGtlZXBpbmcgdGhpcyBsaXN0LCB3ZSBjYW4gYXZvaWQg aGF2aW5nIHRvIGRvIHF1ZXN0aW9uYWJsZSBzZXF1ZW5jZQo+IC0gKiBudW1iZXIgY29tcGFyaXNv bnMgb24gYnVmZmVyIGxhc3RfcmVhZHx3cml0ZV9zZXFuby4gSXQgYWxzbyBhbGxvd3MgYW4KPiAt ICogZW1pc3Npb24gdGltZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QgZm9yIHRy YWNraW5nIGhvdyBmYXIgYWhlYWQKPiAtICogb2YgdGhlIEdQVSB0aGUgc3VibWlzc2lvbiBpcy4K PiAtICoKPiAtICogVGhlIHJlcXVlc3RzIGFyZSByZWZlcmVuY2UgY291bnRlZCwgc28gdXBvbiBj cmVhdGlvbiB0aGV5IHNob3VsZCBoYXZlIGFuCj4gLSAqIGluaXRpYWwgcmVmZXJlbmNlIHRha2Vu IHVzaW5nIGtyZWZfaW5pdAo+IC0gKi8KPiAtc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0IHsK PiAtCXN0cnVjdCBrcmVmIHJlZjsKPiAtCj4gLQkvKiogT24gV2hpY2ggcmluZyB0aGlzIHJlcXVl c3Qgd2FzIGdlbmVyYXRlZCAqLwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4g LQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0JdW5zaWduZWQgcmVzZXRfY291bnRl cjsKPiAtCj4gLQkgLyoqIEdFTSBzZXF1ZW5jZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBw cmV2aW91cyByZXF1ZXN0LAo+IC0JICAqIHdoZW4gdGhlIEhXUyBicmVhZGNydW1iIGlzIGVxdWFs IHRvIHRoaXMgdGhlIEdQVSBpcyBwcm9jZXNzaW5nCj4gLQkgICogdGhpcyByZXF1ZXN0Lgo+IC0J ICAqLwo+IC0JdTMyIHByZXZpb3VzX3NlcW5vOwo+IC0KPiAtCSAvKiogR0VNIHNlcXVlbmNlIG51 bWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0LAo+IC0JICAqIHdoZW4gdGhlIEhXUyBi cmVhZGNydW1iIGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGlzIHRoZSBHUFUKPiAtCSAgKiBo YXMgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QuCj4gLQkgICovCj4gLQl1MzIgc2Vx bm87Cj4gLQo+IC0JLyoqIFBvc2l0aW9uIGluIHRoZSByaW5nYnVmZmVyIG9mIHRoZSBzdGFydCBv ZiB0aGUgcmVxdWVzdCAqLwo+IC0JdTMyIGhlYWQ7Cj4gLQo+IC0JLyoqCj4gLQkgKiBQb3NpdGlv biBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHBvc3RmaXguCj4gLQkgKiBU aGlzIGlzIHJlcXVpcmVkIHRvIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBhdmFpbGFibGUgcmluZ2J1 ZmZlcgo+IC0JICogc3BhY2Ugd2l0aG91dCBvdmVyd3JpdGluZyB0aGUgcG9zdGZpeC4KPiAtCSAq Lwo+IC0JIHUzMiBwb3N0Zml4Owo+IC0KPiAtCS8qKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZl ciBvZiB0aGUgZW5kIG9mIHRoZSB3aG9sZSByZXF1ZXN0ICovCj4gLQl1MzIgdGFpbDsKPiAtCj4g LQkvKioKPiAtCSAqIENvbnRleHQgYW5kIHJpbmcgYnVmZmVyIHJlbGF0ZWQgdG8gdGhpcyByZXF1 ZXN0Cj4gLQkgKiBDb250ZXh0cyBhcmUgcmVmY291bnRlZCwgc28gd2hlbiB0aGlzIHJlcXVlc3Qg aXMgYXNzb2NpYXRlZCB3aXRoIGEKPiAtCSAqIGNvbnRleHQsIHdlIG11c3QgaW5jcmVtZW50IHRo ZSBjb250ZXh0J3MgcmVmY291bnQsIHRvIGd1YXJhbnRlZSB0aGF0Cj4gLQkgKiBpdCBwZXJzaXN0 cyB3aGlsZSBhbnkgcmVxdWVzdCBpcyBsaW5rZWQgdG8gaXQuIFJlcXVlc3RzIHRoZW1zZWx2ZXMK PiAtCSAqIGFyZSBhbHNvIHJlZmNvdW50ZWQsIHNvIHRoZSByZXF1ZXN0IHdpbGwgb25seSBiZSBm cmVlZCB3aGVuIHRoZSBsYXN0Cj4gLQkgKiByZWZlcmVuY2UgdG8gaXQgaXMgZGlzbWlzc2VkLCBh bmQgdGhlIGNvZGUgaW4KPiAtCSAqIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZSgpIHdpbGwgdGhlbiBk ZWNyZW1lbnQgdGhlIHJlZmNvdW50IG9uIHRoZQo+IC0JICogY29udGV4dC4KPiAtCSAqLwo+IC0J c3RydWN0IGludGVsX2NvbnRleHQgKmN0eDsKPiAtCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpy aW5nYnVmOwo+IC0KPiAtCS8qKiBCYXRjaCBidWZmZXIgcmVsYXRlZCB0byB0aGlzIHJlcXVlc3Qg aWYgYW55ICh1c2VkIGZvcgo+IC0JICAgIGVycm9yIHN0YXRlIGR1bXAgb25seSkgKi8KPiAtCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7Cj4gLQo+IC0JLyoqIFRpbWUgYXQg d2hpY2ggdGhpcyByZXF1ZXN0IHdhcyBlbWl0dGVkLCBpbiBqaWZmaWVzLiAqLwo+IC0JdW5zaWdu ZWQgbG9uZyBlbWl0dGVkX2ppZmZpZXM7Cj4gLQo+IC0JLyoqIGdsb2JhbCBsaXN0IGVudHJ5IGZv ciB0aGlzIHJlcXVlc3QgKi8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiAtCj4gLQlzdHJ1 Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4gLQkvKiogZmlsZV9wcml2IGxp c3QgZW50cnkgZm9yIHRoaXMgcmVxdWVzdCAqLwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBjbGllbnRf bGlzdDsKPiAtCj4gLQkvKiogcHJvY2VzcyBpZGVudGlmaWVyIHN1Ym1pdHRpbmcgdGhpcyByZXF1 ZXN0ICovCj4gLQlzdHJ1Y3QgcGlkICpwaWQ7Cj4gLQo+IC0JLyoqCj4gLQkgKiBUaGUgRUxTUCBv bmx5IGFjY2VwdHMgdHdvIGVsZW1lbnRzIGF0IGEgdGltZSwgc28gd2UgcXVldWUKPiAtCSAqIGNv bnRleHQvdGFpbCBwYWlycyBvbiBhIGdpdmVuIHF1ZXVlIChyaW5nLT5leGVjbGlzdF9xdWV1ZSkg dW50aWwgdGhlCj4gLQkgKiBoYXJkd2FyZSBpcyBhdmFpbGFibGUuIFRoZSBxdWV1ZSBzZXJ2ZXMg YSBkb3VibGUgcHVycG9zZTogd2UgYWxzbyB1c2UKPiAtCSAqIGl0IHRvIGtlZXAgdHJhY2sgb2Yg dGhlIHVwIHRvIDIgY29udGV4dHMgY3VycmVudGx5IGluIHRoZSBoYXJkd2FyZQo+IC0JICogKHVz dWFsbHkgb25lIGluIGV4ZWN1dGlvbiBhbmQgdGhlIG90aGVyIHF1ZXVlZCB1cCBieSB0aGUgR1BV KTogV2UKPiAtCSAqIG9ubHkgcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1 ZXVlIHdoZW4gdGhlIGhhcmR3YXJlCj4gLQkgKiBpbmZvcm1zIHVzIHRoYXQgYW4gZWxlbWVudCBo YXMgYmVlbiBjb21wbGV0ZWQuCj4gLQkgKgo+IC0JICogQWxsIGFjY2Vzc2VzIHRvIHRoZSBxdWV1 ZSBhcmUgbWVkaWF0ZWQgYnkgYSBzcGlubG9jawo+IC0JICogKHJpbmctPmV4ZWNsaXN0X2xvY2sp Lgo+IC0JICovCj4gLQo+IC0JLyoqIEV4ZWNsaXN0IGxpbmsgaW4gdGhlIHN1Ym1pc3Npb24gcXVl dWUuKi8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgZXhlY2xpc3RfbGluazsKPiAtCj4gLQkvKiogRXhl Y2xpc3RzIG5vLiBvZiB0aW1lcyB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2VudCB0byB0aGUgRUxT UCAqLwo+IC0JaW50IGVsc3Bfc3VibWl0dGVkOwo+IC0KPiAtfTsKPiAtCj4gICAjaWZkZWYgQ09O RklHX0RSTV9JOTE1X0RFQlVHX0dFTQo+ICAgI2RlZmluZSBHRU1fQlVHX09OKGV4cHIpIEJVR19P TihleHByKQo+ICAgI2Vsc2UKPiAgICNkZWZpbmUgR0VNX0JVR19PTihleHByKQo+ICAgI2VuZGlm Cj4KPiAtaW50IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZywKPiAtCQkJICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwKPiAtCQkJICAgc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoqcmVxX291dCk7Cj4gLXZvaWQgaTkxNV9nZW1fcmVxdWVz dF9jYW5jZWwoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+IC12b2lkIGk5MTVf Z2VtX3JlcXVlc3RfZnJlZShzdHJ1Y3Qga3JlZiAqcmVxX3JlZik7Cj4gLWludCBpOTE1X2dlbV9y ZXF1ZXN0X2FkZF90b19jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4g LQkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+IC0KPiAtc3RhdGljIGlubGluZSB1aW50 MzJfdAo+IC1pOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSkKPiAtewo+IC0JcmV0dXJuIHJlcSA/IHJlcS0+c2Vxbm8gOiAwOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+IC1pOTE1X2dlbV9y ZXF1ZXN0X2dldF9yaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+IC17Cj4g LQlyZXR1cm4gcmVxID8gcmVxLT5yaW5nIDogTlVMTDsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGlu ZSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgo+IC1pOTE1X2dlbV9yZXF1ZXN0X3JlZmVy ZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAtewo+IC0JaWYgKHJlcSkK PiAtCQlrcmVmX2dldCgmcmVxLT5yZWYpOwo+IC0JcmV0dXJuIHJlcTsKPiAtfQo+IC0KPiAtc3Rh dGljIGlubGluZSB2b2lkCj4gLWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gLXsKPiAtCVdBUk5fT04oIW11dGV4X2lzX2xvY2tl ZCgmcmVxLT5yaW5nLT5kZXYtPnN0cnVjdF9tdXRleCkpOwo+IC0Ja3JlZl9wdXQoJnJlcS0+cmVm LCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQK PiAtaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZV9fdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXEpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gLQo+ IC0JaWYgKCFyZXEpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWRldiA9IHJlcS0+cmluZy0+ZGV2Owo+ IC0JaWYgKGtyZWZfcHV0X211dGV4KCZyZXEtPnJlZiwgaTkxNV9nZW1fcmVxdWVzdF9mcmVlLCAm ZGV2LT5zdHJ1Y3RfbXV0ZXgpKQo+IC0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24o c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoqcGRzdCwKPiAtCQkJCQkgICBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnNyYykKPiAtewo+IC0JaWYgKHNyYykKPiAtCQlpOTE1X2dlbV9y ZXF1ZXN0X3JlZmVyZW5jZShzcmMpOwo+IC0KPiAtCWlmICgqcGRzdCkKPiAtCQlpOTE1X2dlbV9y ZXF1ZXN0X3VucmVmZXJlbmNlKCpwZHN0KTsKPiAtCj4gLQkqcGRzdCA9IHNyYzsKPiAtfQo+IC0K PiAtLyoKPiAtICogWFhYOiBpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZCBzaG91bGQgYmUgaGVy ZSBidXQgY3VycmVudGx5IG5lZWRzIHRoZQo+IC0gKiBkZWZpbml0aW9uIG9mIGk5MTVfc2Vxbm9f cGFzc2VkKCkgd2hpY2ggaXMgYmVsb3cuIEl0IHdpbGwgYmUgbW92ZWQgaW4KPiAtICogYSBsYXRl ciBwYXRjaCB3aGVuIHRoZSBjYWxsIHRvIGk5MTVfc2Vxbm9fcGFzc2VkKCkgaXMgb2Jzb2xldGVk Li4uCj4gLSAqLwo+ICt2b2lkIGk5MTVfZ2VtX3RyYWNrX2ZiKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvbGQsCj4gKwkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpuZXcs Cj4gKwkJICAgICAgIHVuc2lnbmVkIGZyb250YnVmZmVyX2JpdHMpOwo+Cj4gICAvKgo+ICAgICog QSBjb21tYW5kIHRoYXQgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBieSB0aGUgY29tbWFuZCBw YXJzZXIuCj4gQEAgLTI5NTYsMjggKzI3OTMsNiBAQCBpbnQgaTkxNV9nZW1fZHVtYl9jcmVhdGUo c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gICAJCQkgc3RydWN0IGRybV9tb2RlX2NyZWF0 ZV9kdW1iICphcmdzKTsKPiAgIGludCBpOTE1X2dlbV9tbWFwX2d0dChzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJICAgICAgdWludDMyX3Qg aGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0KTsKPiAtLyoqCj4gLSAqIFJldHVybnMgdHJ1ZSBpZiBz ZXExIGlzIGxhdGVyIHRoYW4gc2VxMi4KPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgYm9vbAo+IC1p OTE1X3NlcW5vX3Bhc3NlZCh1aW50MzJfdCBzZXExLCB1aW50MzJfdCBzZXEyKQo+IC17Cj4gLQly ZXR1cm4gKGludDMyX3QpKHNlcTEgLSBzZXEyKSA+PSAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5s aW5lIGJvb2wgaTkxNV9nZW1fcmVxdWVzdF9zdGFydGVkKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxKQo+IC17Cj4gLQlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfcmluZ19n ZXRfc2Vxbm8ocmVxLT5yaW5nKSwKPiAtCQkJCSByZXEtPnByZXZpb3VzX3NlcW5vKTsKPiAtfQo+ IC0KPiAtc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+IC17Cj4gLQlyZXR1cm4gaTkxNV9zZXFub19w YXNzZWQoaW50ZWxfcmluZ19nZXRfc2Vxbm8ocmVxLT5yaW5nKSwKPiAtCQkJCSByZXEtPnNlcW5v KTsKPiAtfQo+IC0KPiAtaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9nZXRfc2Vxbm8oc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdTMyICpzZXFubyk7Cj4gICBpbnQgX19tdXN0X2NoZWNrIGk5MTVf Z2VtX3NldF9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pOwo+Cj4gICBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgo+IEBAIC0zMDM2LDE4ICsyODUxLDYgQEAgdm9p ZCBpOTE1X2dlbV9pbml0X3N3aXp6bGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgIHZv aWQgaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dwdV9pZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+IC12b2lkIF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcSwKPiAtCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJhdGNoX29iaiwK PiAtCQkJYm9vbCBmbHVzaF9jYWNoZXMpOwo+IC0jZGVmaW5lIGk5MTVfYWRkX3JlcXVlc3QocmVx KSBcCj4gLQlfX2k5MTVfYWRkX3JlcXVlc3QocmVxLCBOVUxMLCB0cnVlKQo+IC0jZGVmaW5lIGk5 MTVfYWRkX3JlcXVlc3Rfbm9fZmx1c2gocmVxKSBcCj4gLQlfX2k5MTVfYWRkX3JlcXVlc3QocmVx LCBOVUxMLCBmYWxzZSkKPiAtaW50IF9faTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXEsCj4gLQkJCWJvb2wgaW50ZXJydXB0aWJsZSwKPiAtCQkJczY0ICp0 aW1lb3V0LAo+IC0JCQlzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzKTsKPiAtaW50IF9fbXVz dF9jaGVjayBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cSk7Cj4gICBpbnQgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0 cnVjdCB2bV9mYXVsdCAqdm1mKTsKPiAgIGludCBfX211c3RfY2hlY2sKPiAgIGk5MTVfZ2VtX29i amVjdF93YWl0X3JlbmRlcmluZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IGVhOTM0NDUwM2JmNi4uNjhhMjU2MTdjYTdhIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTExMDMsMzY1ICsxMTAzLDYgQEAgcHV0 X3JwbToKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+Cj4gLXN0YXRpYyBpbnQKPiAtaTkxNV9nZW1f Y2hlY2tfd2VkZ2UodW5zaWduZWQgcmVzZXRfY291bnRlciwgYm9vbCBpbnRlcnJ1cHRpYmxlKQo+ IC17Cj4gLQlpZiAoX19pOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKHJlc2V0X2NvdW50ZXIpKQo+IC0J CXJldHVybiAtRUlPOwo+IC0KPiAtCWlmIChfX2k5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MocmVzZXRf Y291bnRlcikpIHsKPiAtCQkvKiBOb24taW50ZXJydXB0aWJsZSBjYWxsZXJzIGNhbid0IGhhbmRs ZSAtRUFHQUlOLCBoZW5jZSByZXR1cm4KPiAtCQkgKiAtRUlPIHVuY29uZGl0aW9uYWxseSBmb3Ig dGhlc2UuICovCj4gLQkJaWYgKCFpbnRlcnJ1cHRpYmxlKQo+IC0JCQlyZXR1cm4gLUVJTzsKPiAt Cj4gLQkJcmV0dXJuIC1FQUdBSU47Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4g LXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2FsX2Nsb2NrX3VzKHVuc2lnbmVkICpjcHUpCj4gLXsK PiAtCXVuc2lnbmVkIGxvbmcgdDsKPiAtCj4gLQkvKiBDaGVhcGx5IGFuZCBhcHByb3hpbWF0ZWx5 IGNvbnZlcnQgZnJvbSBuYW5vc2Vjb25kcyB0byBtaWNyb3NlY29uZHMuCj4gLQkgKiBUaGUgcmVz dWx0IGFuZCBzdWJzZXF1ZW50IGNhbGN1bGF0aW9ucyBhcmUgYWxzbyBkZWZpbmVkIGluIHRoZSBz YW1lCj4gLQkgKiBhcHByb3hpbWF0ZSBtaWNyb3NlY29uZHMgdW5pdHMuIFRoZSBwcmluY2lwYWwg c291cmNlIG9mIHRpbWluZwo+IC0JICogZXJyb3IgaGVyZSBpcyBmcm9tIHRoZSBzaW1wbGUgdHJ1 bmNhdGlvbi4KPiAtCSAqCj4gLQkgKiBOb3RlIHRoYXQgbG9jYWxfY2xvY2soKSBpcyBvbmx5IGRl ZmluZWQgd3J0IHRvIHRoZSBjdXJyZW50IENQVTsKPiAtCSAqIHRoZSBjb21wYXJpc29ucyBhcmUg bm8gbG9uZ2VyIHZhbGlkIGlmIHdlIHN3aXRjaCBDUFVzLiBJbnN0ZWFkIG9mCj4gLQkgKiBibG9j a2luZyBwcmVlbXB0aW9uIGZvciB0aGUgZW50aXJlIGJ1c3l3YWl0LCB3ZSBjYW4gZGV0ZWN0IHRo ZSBDUFUKPiAtCSAqIHN3aXRjaCBhbmQgdXNlIHRoYXQgYXMgaW5kaWNhdG9yIG9mIHN5c3RlbSBs b2FkIGFuZCBhIHJlYXNvbiB0bwo+IC0JICogc3RvcCBidXN5d2FpdGluZywgc2VlIGJ1c3l3YWl0 X3N0b3AoKS4KPiAtCSAqLwo+IC0JKmNwdSA9IGdldF9jcHUoKTsKPiAtCXQgPSBsb2NhbF9jbG9j aygpID4+IDEwOwo+IC0JcHV0X2NwdSgpOwo+IC0KPiAtCXJldHVybiB0Owo+IC19Cj4gLQo+IC1z dGF0aWMgYm9vbCBidXN5d2FpdF9zdG9wKHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdW5zaWduZWQg Y3B1KQo+IC17Cj4gLQl1bnNpZ25lZCB0aGlzX2NwdTsKPiAtCj4gLQlpZiAodGltZV9hZnRlcihs b2NhbF9jbG9ja191cygmdGhpc19jcHUpLCB0aW1lb3V0KSkKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAt Cj4gLQlyZXR1cm4gdGhpc19jcHUgIT0gY3B1Owo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBfX2k5 MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+IC0JCQkJ c3RydWN0IGludGVsX3dhaXQgKndhaXQsCj4gLQkJCQlpbnQgc3RhdGUpCj4gLXsKPiAtCXVuc2ln bmVkIGxvbmcgdGltZW91dDsKPiAtCXVuc2lnbmVkIGNwdTsKPiAtCj4gLQkvKiBXaGVuIHdhaXRp bmcgZm9yIGhpZ2ggZnJlcXVlbmN5IHJlcXVlc3RzLCBlLmcuIGR1cmluZyBzeW5jaHJvbm91cwo+ IC0JICogcmVuZGVyaW5nIHNwbGl0IGJldHdlZW4gdGhlIENQVSBhbmQgR1BVLCB0aGUgZmluaXRl IGFtb3VudCBvZiB0aW1lCj4gLQkgKiByZXF1aXJlZCB0byBzZXQgdXAgdGhlIGlycSBhbmQgd2Fp dCB1cG9uIGl0IGxpbWl0cyB0aGUgcmVzcG9uc2UKPiAtCSAqIHJhdGUuIEJ5IGJ1c3l3YWl0aW5n IG9uIHRoZSByZXF1ZXN0IGNvbXBsZXRpb24gZm9yIGEgc2hvcnQgd2hpbGUgd2UKPiAtCSAqIGNh biBzZXJ2aWNlIHRoZSBoaWdoIGZyZXF1ZW5jeSB3YWl0cyBhcyBxdWljayBhcyBwb3NzaWJsZS4g SG93ZXZlciwKPiAtCSAqIGlmIGl0IGlzIGEgc2xvdyByZXF1ZXN0LCB3ZSB3YW50IHRvIHNsZWVw IGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCj4gLQkgKiBUaGUgdHJhZGVvZmYgYmV0d2VlbiB3YWl0 aW5nIGFuZCBzbGVlcGluZyBpcyByb3VnaGx5IHRoZSB0aW1lIGl0Cj4gLQkgKiB0YWtlcyB0byBz bGVlcCBvbiBhIHJlcXVlc3QsIG9uIHRoZSBvcmRlciBvZiBhIG1pY3Jvc2Vjb25kLgo+IC0JICov Cj4gLQo+IC0JLyogT25seSBzcGluIGlmIHdlIGtub3cgdGhlIEdQVSBpcyBwcm9jZXNzaW5nIHRo aXMgcmVxdWVzdCAqLwo+IC0JaWYgKCFpOTE1X2dlbV9yZXF1ZXN0X3N0YXJ0ZWQocmVxKSkKPiAt CQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0JdGltZW91dCA9IGxvY2FsX2Nsb2NrX3VzKCZjcHUpICsg NTsKPiAtCWRvIHsKPiAtCQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKPiAt CQkJcmV0dXJuIHRydWU7Cj4gLQo+IC0JCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwg d2FpdC0+dGFzaykpCj4gLQkJCWJyZWFrOwo+IC0KPiAtCQlpZiAoYnVzeXdhaXRfc3RvcCh0aW1l b3V0LCBjcHUpKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJY3B1X3JlbGF4X2xvd2xhdGVuY3koKTsK PiAtCj4gLQkJLyogQnJlYWsgdGhlIGxvb3AgaWYgd2UgaGF2ZSBjb25zdW1lZCB0aGUgdGltZXNs aWNlIChvciBiZWVuCj4gLQkJICogcHJlZW1wdGVkKSBvciB3aGVuIGVpdGhlciB0aGUgYmFja2dy b3VuZCB0aHJlYWQgaGFzCj4gLQkJICogZW5hYmxlZCB0aGUgaW50ZXJydXB0LCBvciB0aGUgSVJR IGl0c2VsZiBoYXMgZmlyZWQuCj4gLQkJICovCj4gLQl9IHdoaWxlICghbmVlZF9yZXNjaGVkKCkg JiYgd2FpdC0+dGFzay0+c3RhdGUgPT0gc3RhdGUpOwo+IC0KPiAtCXJldHVybiBmYWxzZTsKPiAt fQo+IC0KPiAtLyoqCj4gLSAqIF9faTkxNV93YWl0X3JlcXVlc3QgLSB3YWl0IHVudGlsIGV4ZWN1 dGlvbiBvZiByZXF1ZXN0IGhhcyBmaW5pc2hlZAo+IC0gKiBAcmVxOiBkdWghCj4gLSAqIEBpbnRl cnJ1cHRpYmxlOiBkbyBhbiBpbnRlcnJ1cHRpYmxlIHdhaXQgKG5vcm1hbGx5IHllcykKPiAtICog QHRpbWVvdXQ6IGluIC0gaG93IGxvbmcgdG8gd2FpdCAoTlVMTCBmb3JldmVyKTsgb3V0IC0gaG93 IG11Y2ggdGltZSByZW1haW5pbmcKPiAtICoKPiAtICogTm90ZTogSXQgaXMgb2YgdXRtb3N0IGlt cG9ydGFuY2UgdGhhdCB0aGUgcGFzc2VkIGluIHNlcW5vIGFuZCByZXNldF9jb3VudGVyCj4gLSAq IHZhbHVlcyBoYXZlIGJlZW4gcmVhZCBieSB0aGUgY2FsbGVyIGluIGFuIHNtcCBzYWZlIG1hbm5l ci4gV2hlcmUgcmVhZC1zaWRlCj4gLSAqIGxvY2tzIGFyZSBpbnZvbHZlZCwgaXQgaXMgc3VmZmlj aWVudCB0byByZWFkIHRoZSByZXNldF9jb3VudGVyIGJlZm9yZQo+IC0gKiB1bmxvY2tpbmcgdGhl IGxvY2sgdGhhdCBwcm90ZWN0cyB0aGUgc2Vxbm8uIEZvciBsb2NrbGVzcyB0cmlja3MsIHRoZQo+ IC0gKiByZXNldF9jb3VudGVyIF9tdXN0XyBiZSByZWFkIGJlZm9yZSwgYW5kIGFuIGFwcHJvcHJp YXRlIHNtcF9ybWIgbXVzdCBiZQo+IC0gKiBpbnNlcnRlZC4KPiAtICoKPiAtICogUmV0dXJucyAw IGlmIHRoZSByZXF1ZXN0IHdhcyBmb3VuZCB3aXRoaW4gdGhlIGFsbG90ZWQgdGltZS4gRWxzZSBy ZXR1cm5zIHRoZQo+IC0gKiBlcnJubyB3aXRoIHJlbWFpbmluZyB0aW1lIGZpbGxlZCBpbiB0aW1l b3V0IGFyZ3VtZW50Lgo+IC0gKi8KPiAtaW50IF9faTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gLQkJCWJvb2wgaW50ZXJydXB0aWJsZSwKPiAtCQkJ czY0ICp0aW1lb3V0LAo+IC0JCQlzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzKQo+IC17Cj4g LQlpbnQgc3RhdGUgPSBpbnRlcnJ1cHRpYmxlID8gVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19V TklOVEVSUlVQVElCTEU7Cj4gLQlzdHJ1Y3QgaW50ZWxfd2FpdCB3YWl0Owo+IC0JdW5zaWduZWQg bG9uZyB0aW1lb3V0X3JlbWFpbjsKPiAtCWludCByZXQgPSAwOwo+IC0KPiAtCW1pZ2h0X3NsZWVw KCk7Cj4gLQo+IC0JaWYgKGxpc3RfZW1wdHkoJnJlcS0+bGlzdCkpCj4gLQkJcmV0dXJuIDA7Cj4g LQo+IC0JaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSkpCj4gLQkJcmV0dXJuIDA7 Cj4gLQo+IC0JdGltZW91dF9yZW1haW4gPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKPiAtCWlmICh0 aW1lb3V0KSB7Cj4gLQkJaWYgKFdBUk5fT04oKnRpbWVvdXQgPCAwKSkKPiAtCQkJcmV0dXJuIC1F SU5WQUw7Cj4gLQo+IC0JCWlmICgqdGltZW91dCA9PSAwKQo+IC0JCQlyZXR1cm4gLUVUSU1FOwo+ IC0KPiAtCQkvKiBSZWNvcmQgY3VycmVudCB0aW1lIGluIGNhc2UgaW50ZXJydXB0ZWQsIG9yIHdl ZGdlZCAqLwo+IC0JCXRpbWVvdXRfcmVtYWluID0gbnNlY3NfdG9famlmZmllc190aW1lb3V0KCp0 aW1lb3V0KTsKPiAtCQkqdGltZW91dCArPSBrdGltZV9nZXRfcmF3X25zKCk7Cj4gLQl9Cj4gLQo+ IC0JdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luKHJlcSk7Cj4gLQo+IC0JLyogVGhp cyBjbGllbnQgaXMgYWJvdXQgdG8gc3RhbGwgd2FpdGluZyBmb3IgdGhlIEdQVS4gSW4gbWFueSBj YXNlcwo+IC0JICogdGhpcyBpcyB1bmRlc2lyYWJsZSBhbmQgbGltaXRzIHRoZSB0aHJvdWdocHV0 IG9mIHRoZSBzeXN0ZW0sIGFzCj4gLQkgKiBtYW55IGNsaWVudHMgY2Fubm90IGNvbnRpbnVlIHBy b2Nlc3NpbmcgdXNlciBpbnB1dC9vdXRwdXQgd2hpbHN0Cj4gLQkgKiBibG9ja2VkLiBSUFMgYXV0 b3R1bmluZyBtYXkgdGFrZSB0ZW5zIG9mIG1pbGxpc2Vjb25kcyB0byByZXNwb25kCj4gLQkgKiB0 byB0aGUgR1BVIGxvYWQgYW5kIHRodXMgaW5jdXJzIGFkZGl0aW9uYWwgbGF0ZW5jeSBmb3IgdGhl IGNsaWVudC4KPiAtCSAqIFdlIGNhbiBjaXJjdW12ZW50IHRoYXQgYnkgcHJvbW90aW5nIHRoZSBH UFUgZnJlcXVlbmN5IHRvIG1heGltdW0KPiAtCSAqIGJlZm9yZSB3ZSB3YWl0LiBUaGlzIG1ha2Vz IHRoZSBHUFUgdGhyb3R0bGUgdXAgbXVjaCBtb3JlIHF1aWNrbHkKPiAtCSAqIChnb29kIGZvciBi ZW5jaG1hcmtzIGFuZCB1c2VyIGV4cGVyaWVuY2UsIGUuZy4gd2luZG93IGFuaW1hdGlvbnMpLAo+ IC0JICogYnV0IGF0IGEgY29zdCBvZiBzcGVuZGluZyBtb3JlIHBvd2VyIHByb2Nlc3NpbmcgdGhl IHdvcmtsb2FkCj4gLQkgKiAoYmFkIGZvciBiYXR0ZXJ5KS4gTm90IGFsbCBjbGllbnRzIGV2ZW4g d2FudCB0aGVpciByZXN1bHRzCj4gLQkgKiBpbW1lZGlhdGVseSBhbmQgZm9yIHRoZW0gd2Ugc2hv dWxkIGp1c3QgbGV0IHRoZSBHUFUgc2VsZWN0IGl0cyBvd24KPiAtCSAqIGZyZXF1ZW5jeSB0byBt YXhpbWlzZSBlZmZpY2llbmN5LiBUbyBwcmV2ZW50IGEgc2luZ2xlIGNsaWVudCBmcm9tCj4gLQkg KiBmb3JjaW5nIHRoZSBjbG9ja3MgdG9vIGhpZ2ggZm9yIHRoZSB3aG9sZSBzeXN0ZW0sIHdlIG9u bHkgYWxsb3cKPiAtCSAqIGVhY2ggY2xpZW50IHRvIHdhaXRib29zdCBvbmNlIGluIGEgYnVzeSBw ZXJpb2QuCj4gLQkgKi8KPiAtCWlmIChJTlRFTF9JTkZPKHJlcS0+aTkxNSktPmdlbiA+PSA2KQo+ IC0JCWdlbjZfcnBzX2Jvb3N0KHJlcS0+aTkxNSwgcnBzLCByZXEtPmVtaXR0ZWRfamlmZmllcyk7 Cj4gLQo+IC0JaW50ZWxfd2FpdF9pbml0KCZ3YWl0LCByZXEtPnNlcW5vKTsKPiAtCXNldF90YXNr X3N0YXRlKHdhaXQudGFzaywgc3RhdGUpOwo+IC0KPiAtCS8qIE9wdGltaXN0aWMgc3BpbiBmb3Ig dGhlIG5leHQgfmppZmZpZSBiZWZvcmUgdG91Y2hpbmcgSVJRcyAqLwo+IC0JaWYgKGludGVsX2Vu Z2luZV9hZGRfd2FpdChyZXEtPnJpbmcsICZ3YWl0KSkgewo+IC0JCWlmIChfX2k5MTVfc3Bpbl9y ZXF1ZXN0KHJlcSwgJndhaXQsIHN0YXRlKSkKPiAtCQkJZ290byBjb21wbGV0ZTsKPiAtCj4gLQkJ LyogSW4gb3JkZXIgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlbid0IG1pc3NlZCB0aGUgaW50ZXJydXB0 Cj4gLQkJICogYXMgd2UgZW5hYmxlZCBpdCwgd2UgbmVlZCB0byBraWNrIG91cnNlbHZlcyB0byBk byBhCj4gLQkJICogY29oZXJlbnQgY2hlY2sgb24gdGhlIHNlcW5vIGJlZm9yZSB3ZSBzbGVlcC4K PiAtCQkgKi8KPiAtCQlpZiAoaW50ZWxfZW5naW5lX2VuYWJsZV93YWl0X2lycShyZXEtPnJpbmcs ICZ3YWl0KSkKPiAtCQkJZ290byB3YWtldXA7Cj4gLQl9Cj4gLQo+IC0JZm9yICg7Oykgewo+IC0J CWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgd2FpdC50YXNrKSkgewo+IC0JCQlyZXQg PSAtRVJFU1RBUlRTWVM7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gLQkJLyogRW5zdXJlIHRo YXQgZXZlbiBpZiB0aGUgR1BVIGhhbmdzLCB3ZSBnZXQgd29rZW4gdXAuICovCj4gLQkJaTkxNV9x dWV1ZV9oYW5nY2hlY2socmVxLT5pOTE1KTsKPiAtCj4gLQkJdGltZW91dF9yZW1haW4gPSBpb19z Y2hlZHVsZV90aW1lb3V0KHRpbWVvdXRfcmVtYWluKTsKPiAtCQlpZiAodGltZW91dF9yZW1haW4g PT0gMCkgewo+IC0JCQlyZXQgPSAtRVRJTUU7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCj4gLQkJ aWYgKGludGVsX3dhaXRfY29tcGxldGUoJndhaXQpKQo+IC0JCQlicmVhazsKPiAtCj4gLXdha2V1 cDoKPiAtCQlzZXRfdGFza19zdGF0ZSh3YWl0LnRhc2ssIHN0YXRlKTsKPiAtCj4gLQkJLyogQ2Fy ZWZ1bGx5IGNoZWNrIGlmIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlLCBnaXZpbmcgdGltZQo+IC0J CSAqIGZvciB0aGUgc2Vxbm8gdG8gYmUgdmlzaWJsZSBmb2xsb3dpbmcgdGhlIGludGVycnVwdC4K PiAtCQkgKiBXZSBhbHNvIGhhdmUgdG8gY2hlY2sgaW4gY2FzZSB3ZSBhcmUga2lja2VkIGJ5IHRo ZSBHUFUKPiAtCQkgKiByZXNldCBpbiBvcmRlciB0byBkcm9wIHRoZSBzdHJ1Y3RfbXV0ZXguCj4g LQkJICovCj4gLQkJaWYgKF9faTkxNV9yZXF1ZXN0X2lycV9jb21wbGV0ZShyZXEpKQo+IC0JCQli cmVhazsKPiAtCX0KPiAtCj4gLWNvbXBsZXRlOgo+IC0JaW50ZWxfZW5naW5lX3JlbW92ZV93YWl0 KHJlcS0+cmluZywgJndhaXQpOwo+IC0JX19zZXRfdGFza19zdGF0ZSh3YWl0LnRhc2ssIFRBU0tf UlVOTklORyk7Cj4gLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5kKHJlcSk7Cj4gLQo+ IC0JaWYgKHRpbWVvdXQpIHsKPiAtCQkqdGltZW91dCAtPSBrdGltZV9nZXRfcmF3X25zKCk7Cj4g LQkJaWYgKCp0aW1lb3V0IDwgMCkKPiAtCQkJKnRpbWVvdXQgPSAwOwo+IC0KPiAtCQkvKgo+IC0J CSAqIEFwcGFyZW50bHkga3RpbWUgaXNuJ3QgYWNjdXJhdGUgZW5vdWdoIGFuZCBvY2Nhc2lvbmFs bHkgaGFzIGEKPiAtCQkgKiBiaXQgb2YgbWlzbWF0Y2ggaW4gdGhlIGppZmZpZXM8LT5uc2Vjczwt Pmt0aW1lIGxvb3AuIFNvIHBhdGNoCj4gLQkJICogdGhpbmdzIHVwIHRvIG1ha2UgdGhlIHRlc3Qg aGFwcHkuIFdlIGFsbG93IHVwIHRvIDEgamlmZnkuCj4gLQkJICoKPiAtCQkgKiBUaGlzIGlzIGEg cmVncnNzaW9uIGZyb20gdGhlIHRpbWVzcGVjLT5rdGltZSBjb252ZXJzaW9uLgo+IC0JCSAqLwo+ IC0JCWlmIChyZXQgPT0gLUVUSU1FICYmICp0aW1lb3V0IDwgamlmZmllc190b191c2VjcygxKSox MDAwKQo+IC0JCQkqdGltZW91dCA9IDA7Cj4gLQl9Cj4gLQo+IC0JaWYgKHJldCA9PSAwICYmIHJw cyAmJiByZXEtPnNlcW5vID09IHJlcS0+cmluZy0+bGFzdF9zdWJtaXR0ZWRfc2Vxbm8pIHsKPiAt CQkvKiBUaGUgR1BVIGlzIG5vdyBpZGxlIGFuZCB0aGlzIGNsaWVudCBoYXMgc3RhbGxlZC4KPiAt CQkgKiBTaW5jZSBubyBvdGhlciBjbGllbnQgaGFzIHN1Ym1pdHRlZCBhIHJlcXVlc3QgaW4gdGhl Cj4gLQkJICogbWVhbnRpbWUsIGFzc3VtZSB0aGF0IHRoaXMgY2xpZW50IGlzIHRoZSBvbmx5IG9u ZQo+IC0JCSAqIHN1cHBseWluZyB3b3JrIHRvIHRoZSBHUFUgYnV0IGlzIHVuYWJsZSB0byBrZWVw IHRoYXQKPiAtCQkgKiB3b3JrIHN1cHBsaWVkIGJlY2F1c2UgaXQgaXMgd2FpdGluZy4gU2luY2Ug dGhlIEdQVSBpcwo+IC0JCSAqIHRoZW4gbmV2ZXIga2VwdCBmdWxseSBidXN5LCBSUFMgYXV0b2Ns b2NraW5nIHdpbGwKPiAtCQkgKiBrZWVwIHRoZSBjbG9ja3MgcmVsYXRpdmVseSBsb3csIGNhdXNp bmcgZnVydGhlciBkZWxheXMuCj4gLQkJICogQ29tcGVuc2F0ZSBieSBnaXZpbmcgdGhlIHN5bmNo cm9ub3VzIGNsaWVudCBjcmVkaXQgZm9yCj4gLQkJICogYSB3YWl0Ym9vc3QgbmV4dCB0aW1lLgo+ IC0JCSAqLwo+IC0JCXNwaW5fbG9jaygmcmVxLT5pOTE1LT5ycHMuY2xpZW50X2xvY2spOwo+IC0J CWxpc3RfZGVsX2luaXQoJnJwcy0+bGluayk7Cj4gLQkJc3Bpbl91bmxvY2soJnJlcS0+aTkxNS0+ cnBzLmNsaWVudF9sb2NrKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1p bnQgaTkxNV9nZW1fcmVxdWVzdF9hZGRfdG9fY2xpZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxLAo+IC0JCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZmls ZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4gLQo+IC0JV0FSTl9PTighcmVxIHx8ICFmaWxlIHx8IHJl cS0+ZmlsZV9wcml2KTsKPiAtCj4gLQlpZiAoIXJlcSB8fCAhZmlsZSkKPiAtCQlyZXR1cm4gLUVJ TlZBTDsKPiAtCj4gLQlpZiAocmVxLT5maWxlX3ByaXYpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4g LQo+IC0JZGV2X3ByaXZhdGUgPSByZXEtPnJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlmaWxl X3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiAtCj4gLQlzcGluX2xvY2soJmZpbGVfcHJpdi0+ bW0ubG9jayk7Cj4gLQlyZXEtPmZpbGVfcHJpdiA9IGZpbGVfcHJpdjsKPiAtCWxpc3RfYWRkX3Rh aWwoJnJlcS0+Y2xpZW50X2xpc3QsICZmaWxlX3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7Cj4gLQlz cGluX3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiAtCj4gLQlyZXEtPnBpZCA9IGdldF9w aWQodGFza19waWQoY3VycmVudCkpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIHZvaWQKPiAtaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSByZXF1ZXN0LT5maWxlX3ByaXY7Cj4gLQo+IC0J aWYgKCFmaWxlX3ByaXYpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXNwaW5fbG9jaygmZmlsZV9wcml2 LT5tbS5sb2NrKTsKPiAtCWxpc3RfZGVsKCZyZXF1ZXN0LT5jbGllbnRfbGlzdCk7Cj4gLQlyZXF1 ZXN0LT5maWxlX3ByaXYgPSBOVUxMOwo+IC0Jc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+bW0ubG9j ayk7Cj4gLQo+IC0JcHV0X3BpZChyZXF1ZXN0LT5waWQpOwo+IC0JcmVxdWVzdC0+cGlkID0gTlVM TDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUoc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQo+IC17Cj4gLQl0cmFjZV9pOTE1X2dlbV9y ZXF1ZXN0X3JldGlyZShyZXF1ZXN0KTsKPiAtCj4gLQkvKiBXZSBrbm93IHRoZSBHUFUgbXVzdCBo YXZlIHJlYWQgdGhlIHJlcXVlc3QgdG8gaGF2ZQo+IC0JICogc2VudCB1cyB0aGUgc2Vxbm8gKyBp bnRlcnJ1cHQsIHNvIHVzZSB0aGUgcG9zaXRpb24KPiAtCSAqIG9mIHRhaWwgb2YgdGhlIHJlcXVl c3QgdG8gdXBkYXRlIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uCj4gLQkgKiBvZiB0aGUgR1BVIGhl YWQuCj4gLQkgKgo+IC0JICogTm90ZSB0aGlzIHJlcXVpcmVzIHRoYXQgd2UgYXJlIGFsd2F5cyBj YWxsZWQgaW4gcmVxdWVzdAo+IC0JICogY29tcGxldGlvbiBvcmRlci4KPiAtCSAqLwo+IC0JcmVx dWVzdC0+cmluZ2J1Zi0+bGFzdF9yZXRpcmVkX2hlYWQgPSByZXF1ZXN0LT5wb3N0Zml4Owo+IC0K PiAtCWxpc3RfZGVsX2luaXQoJnJlcXVlc3QtPmxpc3QpOwo+IC0JaTkxNV9nZW1fcmVxdWVzdF9y ZW1vdmVfZnJvbV9jbGllbnQocmVxdWVzdCk7Cj4gLQo+IC0JaTkxNV9nZW1fcmVxdWVzdF91bnJl ZmVyZW5jZShyZXF1ZXN0KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtX19pOTE1X2dlbV9y ZXF1ZXN0X3JldGlyZV9fdXB0byhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAt ewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcmVxLT5yaW5nOwo+IC0Jc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICp0bXA7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmZW5naW5lLT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JaWYgKGxpc3RfZW1wdHkoJnJl cS0+bGlzdCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWRvIHsKPiAtCQl0bXAgPSBsaXN0X2ZpcnN0 X2VudHJ5KCZlbmdpbmUtPnJlcXVlc3RfbGlzdCwKPiAtCQkJCSAgICAgICB0eXBlb2YoKnRtcCks IGxpc3QpOwo+IC0KPiAtCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZSh0bXApOwo+IC0JfSB3aGls ZSAodG1wICE9IHJlcSk7Cj4gLQo+IC0JV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhlbmdpbmUt PmRldikpOwo+IC19Cj4gLQo+IC0vKioKPiAtICogV2FpdHMgZm9yIGEgcmVxdWVzdCB0byBiZSBz aWduYWxlZCwgYW5kIGNsZWFucyB1cCB0aGUKPiAtICogcmVxdWVzdCBhbmQgb2JqZWN0IGxpc3Rz IGFwcHJvcHJpYXRlbHkgZm9yIHRoYXQgZXZlbnQuCj4gLSAqLwo+IC1pbnQKPiAtaTkxNV93YWl0 X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gLXsKPiAtCXN0cnVj dCBkcm1fZGV2aWNlICpkZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7 Cj4gLQlib29sIGludGVycnVwdGlibGU7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCUJVR19PTihyZXEg PT0gTlVMTCk7Cj4gLQo+IC0JZGV2ID0gcmVxLT5yaW5nLT5kZXY7Cj4gLQlkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7Cj4gLQlpbnRlcnJ1cHRpYmxlID0gZGV2X3ByaXYtPm1tLmludGVycnVw dGlibGU7Cj4gLQo+IC0JQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4 KSk7Cj4gLQo+IC0JcmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChyZXEsIGludGVycnVwdGlibGUs IE5VTEwsIE5VTEwpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCV9faTkx NV9nZW1fcmVxdWVzdF9yZXRpcmVfX3VwdG8ocmVxKTsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ ICAgLyoqCj4gICAgKiBFbnN1cmVzIHRoYXQgYWxsIHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IGhh cyBjb21wbGV0ZWQgYW5kIHRoZSBvYmplY3QgaXMKPiAgICAqIHNhZmUgdG8gdW5iaW5kIGZyb20g dGhlIEdUVCBvciBhY2Nlc3MgZnJvbSB0aGUgQ1BVLgo+IEBAIC0xNTE1LDcgKzExNTYsNyBAQCBp OTE1X2dlbV9vYmplY3RfcmV0aXJlX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiAgIAllbHNlIGlmIChvYmotPmxhc3Rfd3JpdGVfcmVxID09IHJlcSkKPiAgIAkJaTkx NV9nZW1fb2JqZWN0X3JldGlyZV9fd3JpdGUob2JqKTsKPgo+IC0JX19pOTE1X2dlbV9yZXF1ZXN0 X3JldGlyZV9fdXB0byhyZXEpOwo+ICsJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVfdXB0byhyZXEp Owo+ICAgfQo+Cj4gICAvKiBBIG5vbmJsb2NraW5nIHZhcmlhbnQgb2YgdGhlIGFib3ZlIHdhaXQu IFRoaXMgaXMgYSBoaWdobHkgZGFuZ2Vyb3VzIHJvdXRpbmUKPiBAQCAtMjQ0MSw5NCArMjA4Miw2 IEBAIGk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3JlYWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwgaW50IHJpbmcpCj4gICAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+ YmFzZSk7Cj4gICB9Cj4KPiAtc3RhdGljIGludAo+IC1pOTE1X2dlbV9pbml0X3NlcW5vKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFubykKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmc7Cj4gLQlpbnQgcmV0LCBpLCBqOwo+IC0KPiAtCS8qIENhcmVmdWxseSByZXRp cmUgYWxsIHJlcXVlc3RzIHdpdGhvdXQgd3JpdGluZyB0byB0aGUgcmluZ3MgKi8KPiAtCWZvcl9l YWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsKPiAtCQlyZXQgPSBpbnRlbF9yaW5nX2lkbGUo cmluZyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCWk5MTVfZ2Vt X3JldGlyZV9yZXF1ZXN0cyhkZXYpOwo+IC0KPiAtCS8qIEZpbmFsbHkgcmVzZXQgaHcgc3RhdGUg Ki8KPiAtCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsKPiAtCQlpbnRlbF9yaW5n X2luaXRfc2Vxbm8ocmluZywgc2Vxbm8pOwo+IC0KPiAtCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlf U0laRShyaW5nLT5zZW1hcGhvcmUuc3luY19zZXFubyk7IGorKykKPiAtCQkJcmluZy0+c2VtYXBo b3JlLnN5bmNfc2Vxbm9bal0gPSAwOwo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ IC1pbnQgaTkxNV9nZW1fc2V0X3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFu bykKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKHNlcW5vID09IDApCj4gLQkJcmV0dXJu IC1FSU5WQUw7Cj4gLQo+IC0JLyogSFdTIHBhZ2UgbmVlZHMgdG8gYmUgc2V0IGxlc3MgdGhhbiB3 aGF0IHdlCj4gLQkgKiB3aWxsIGluamVjdCB0byByaW5nCj4gLQkgKi8KPiAtCXJldCA9IGk5MTVf Z2VtX2luaXRfc2Vxbm8oZGV2LCBzZXFubyAtIDEpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4g cmV0Owo+IC0KPiAtCS8qIENhcmVmdWxseSBzZXQgdGhlIGxhc3Rfc2Vxbm8gdmFsdWUgc28gdGhh dCB3cmFwCj4gLQkgKiBkZXRlY3Rpb24gc3RpbGwgd29ya3MKPiAtCSAqLwo+IC0JZGV2X3ByaXYt Pm5leHRfc2Vxbm8gPSBzZXFubzsKPiAtCWRldl9wcml2LT5sYXN0X3NlcW5vID0gc2Vxbm8gLSAx Owo+IC0JaWYgKGRldl9wcml2LT5sYXN0X3NlcW5vID09IDApCj4gLQkJZGV2X3ByaXYtPmxhc3Rf c2Vxbm8tLTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtaW50Cj4gLWk5MTVfZ2VtX2dl dF9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgKnNlcW5vKQo+IC17Cj4gLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IC0KPiAt CS8qIHJlc2VydmUgMCBmb3Igbm9uLXNlcW5vICovCj4gLQlpZiAoZGV2X3ByaXYtPm5leHRfc2Vx bm8gPT0gMCkgewo+IC0JCWludCByZXQgPSBpOTE1X2dlbV9pbml0X3NlcW5vKGRldiwgMCk7Cj4g LQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCj4gLQkJZGV2X3ByaXYtPm5leHRfc2Vx bm8gPSAxOwo+IC0JfQo+IC0KPiAtCSpzZXFubyA9IGRldl9wcml2LT5sYXN0X3NlcW5vID0gZGV2 X3ByaXYtPm5leHRfc2Vxbm8rKzsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9p ZCBpOTE1X2dlbV9tYXJrX2J1c3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ IC17Cj4gLQlpZiAoZGV2X3ByaXYtPm1tLmJ1c3kpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWludGVs X3J1bnRpbWVfcG1fZ2V0X25vcmVzdW1lKGRldl9wcml2KTsKPiAtCj4gLQlpOTE1X3VwZGF0ZV9n ZnhfdmFsKGRldl9wcml2KTsKPiAtCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDYp Cj4gLQkJZ2VuNl9ycHNfYnVzeShkZXZfcHJpdik7Cj4gLQo+IC0JcXVldWVfZGVsYXllZF93b3Jr KGRldl9wcml2LT53cSwKPiAtCQkJICAgJmRldl9wcml2LT5tbS5yZXRpcmVfd29yaywKPiAtCQkJ ICAgcm91bmRfamlmZmllc191cF9yZWxhdGl2ZShIWikpOwo+IC0KPiAtCWRldl9wcml2LT5tbS5i dXN5ID0gdHJ1ZTsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX21hcmtfaWRsZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICB7Cj4gICAJZGV2X3ByaXYtPm1t LmJ1c3kgPSBmYWxzZTsKPiBAQCAtMjU0Miw5MiArMjA5NSw2IEBAIHN0YXRpYyB2b2lkIGk5MTVf Z2VtX21hcmtfaWRsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAJaW50 ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwo+ICAgfQo+Cj4gLS8qCj4gLSAqIE5COiBUaGlz IGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGZhaWwuIERvaW5nIHNvIHdvdWxkIG1lYW4gdGhl IHRoZQo+IC0gKiByZXF1ZXN0IGlzIG5vdCBiZWluZyB0cmFja2VkIGZvciBjb21wbGV0aW9uIGJ1 dCB0aGUgd29yayBpdHNlbGYgaXMKPiAtICogZ29pbmcgdG8gaGFwcGVuIG9uIHRoZSBoYXJkd2Fy ZS4gVGhpcyB3b3VsZCBiZSBhIEJhZCBUaGluZyh0bSkuCj4gLSAqLwo+IC12b2lkIF9faTkxNV9h ZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCj4gLQkJCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCWJvb2wgZmx1c2hfY2FjaGVzKQo+ IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOwo+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2Owo+IC0Jc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWY7 Cj4gLQl1MzIgcmVxdWVzdF9zdGFydDsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKFdBUk5fT04o cmVxdWVzdCA9PSBOVUxMKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JcmluZyA9IHJlcXVlc3QtPnJp bmc7Cj4gLQlkZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlyaW5nYnVmID0g cmVxdWVzdC0+cmluZ2J1ZjsKPiAtCj4gLQkvKgo+IC0JICogVG8gZW5zdXJlIHRoYXQgdGhpcyBj YWxsIHdpbGwgbm90IGZhaWwsIHNwYWNlIGZvciBpdHMgZW1pc3Npb25zCj4gLQkgKiBzaG91bGQg YWxyZWFkeSBoYXZlIGJlZW4gcmVzZXJ2ZWQgaW4gdGhlIHJpbmcgYnVmZmVyLiBMZXQgdGhlIHJp bmcKPiAtCSAqIGtub3cgdGhhdCBpdCBpcyB0aW1lIHRvIHVzZSB0aGF0IHNwYWNlIHVwLgo+IC0J ICovCj4gLQlpbnRlbF9yaW5nX3Jlc2VydmVkX3NwYWNlX3VzZShyaW5nYnVmKTsKPiAtCj4gLQly ZXF1ZXN0X3N0YXJ0ID0gaW50ZWxfcmluZ19nZXRfdGFpbChyaW5nYnVmKTsKPiAtCS8qCj4gLQkg KiBFbWl0IGFueSBvdXRzdGFuZGluZyBmbHVzaGVzIC0gZXhlY2J1ZiBjYW4gZmFpbCB0byBlbWl0 IHRoZSBmbHVzaAo+IC0JICogYWZ0ZXIgaGF2aW5nIGVtaXR0ZWQgdGhlIGJhdGNoYnVmZmVyIGNv bW1hbmQuIEhlbmNlIHdlIG5lZWQgdG8gZml4Cj4gLQkgKiB0aGluZ3MgdXAgc2ltaWxhciB0byBl bWl0dGluZyB0aGUgbGF6eSByZXF1ZXN0LiBUaGUgZGlmZmVyZW5jZSBoZXJlCj4gLQkgKiBpcyB0 aGF0IHRoZSBmbHVzaCBfbXVzdF8gaGFwcGVuIGJlZm9yZSB0aGUgbmV4dCByZXF1ZXN0LCBubyBt YXR0ZXIKPiAtCSAqIHdoYXQuCj4gLQkgKi8KPiAtCWlmIChmbHVzaF9jYWNoZXMpIHsKPiAtCQlp ZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+IC0JCQlyZXQgPSBsb2dpY2FsX3JpbmdfZmx1c2hf YWxsX2NhY2hlcyhyZXF1ZXN0KTsKPiAtCQllbHNlCj4gLQkJCXJldCA9IGludGVsX3JpbmdfZmx1 c2hfYWxsX2NhY2hlcyhyZXF1ZXN0KTsKPiAtCQkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAqLwo+ IC0JCVdBUk4ocmV0LCAiKl9yaW5nX2ZsdXNoX2FsbF9jYWNoZXMgZmFpbGVkOiAlZCFcbiIsIHJl dCk7Cj4gLQl9Cj4gLQo+IC0JLyogUmVjb3JkIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2Yg dGhlIHJlcXVlc3Qgc28gdGhhdAo+IC0JICogc2hvdWxkIHdlIGRldGVjdCB0aGUgdXBkYXRlZCBz ZXFubyBwYXJ0LXdheSB0aHJvdWdoIHRoZQo+IC0JICogR1BVIHByb2Nlc3NpbmcgdGhlIHJlcXVl c3QsIHdlIG5ldmVyIG92ZXItZXN0aW1hdGUgdGhlCj4gLQkgKiBwb3NpdGlvbiBvZiB0aGUgaGVh ZC4KPiAtCSAqLwo+IC0JcmVxdWVzdC0+cG9zdGZpeCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmlu Z2J1Zik7Cj4gLQo+IC0JaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKPiAtCQlyZXQgPSByaW5n LT5lbWl0X3JlcXVlc3QocmVxdWVzdCk7Cj4gLQllbHNlIHsKPiAtCQlyZXQgPSByaW5nLT5hZGRf cmVxdWVzdChyZXF1ZXN0KTsKPiAtCj4gLQkJcmVxdWVzdC0+dGFpbCA9IGludGVsX3JpbmdfZ2V0 X3RhaWwocmluZ2J1Zik7Cj4gLQl9Cj4gLQkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAqLwo+IC0J V0FSTihyZXQsICJlbWl0fGFkZF9yZXF1ZXN0IGZhaWxlZDogJWQhXG4iLCByZXQpOwo+IC0KPiAt CXJlcXVlc3QtPmhlYWQgPSByZXF1ZXN0X3N0YXJ0Owo+IC0KPiAtCS8qIFdoaWxzdCB0aGlzIHJl cXVlc3QgZXhpc3RzLCBiYXRjaF9vYmogd2lsbCBiZSBvbiB0aGUKPiAtCSAqIGFjdGl2ZV9saXN0 LCBhbmQgc28gd2lsbCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlLiBPbmx5IHdoZW4gdGhpcwo+ IC0JICogcmVxdWVzdCBpcyByZXRpcmVkIHdpbGwgdGhlIHRoZSBiYXRjaF9vYmogYmUgbW92ZWQg b250byB0aGUKPiAtCSAqIGluYWN0aXZlX2xpc3QgYW5kIGxvc2UgaXRzIGFjdGl2ZSByZWZlcmVu Y2UuIEhlbmNlIHdlIGRvIG5vdCBuZWVkCj4gLQkgKiB0byBleHBsaWNpdGx5IGhvbGQgYW5vdGhl ciByZWZlcmVuY2UgaGVyZS4KPiAtCSAqLwo+IC0JcmVxdWVzdC0+YmF0Y2hfb2JqID0gb2JqOwo+ IC0KPiAtCXJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7Cj4gLQlyZXF1ZXN0LT5w cmV2aW91c19zZXFubyA9IHJpbmctPmxhc3Rfc3VibWl0dGVkX3NlcW5vOwo+IC0JcmluZy0+bGFz dF9zdWJtaXR0ZWRfc2Vxbm8gPSByZXF1ZXN0LT5zZXFubzsKPiAtCWxpc3RfYWRkX3RhaWwoJnJl cXVlc3QtPmxpc3QsICZyaW5nLT5yZXF1ZXN0X2xpc3QpOwo+IC0KPiAtCXRyYWNlX2k5MTVfZ2Vt X3JlcXVlc3RfYWRkKHJlcXVlc3QpOwo+IC0KPiAtCWk5MTVfZ2VtX21hcmtfYnVzeShkZXZfcHJp dik7Cj4gLQo+IC0JLyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIHJlc2VydmVkIHNpemUgd2FzIGxh cmdlIGVub3VnaC4gKi8KPiAtCWludGVsX3JpbmdfcmVzZXJ2ZWRfc3BhY2VfZW5kKHJpbmdidWYp Owo+IC19Cj4gLQo+ICAgc3RhdGljIGJvb2wgaTkxNV9jb250ZXh0X2lzX2Jhbm5lZChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJCQkJICAgY29uc3Qgc3RydWN0IGludGVs X2NvbnRleHQgKmN0eCkKPiAgIHsKPiBAQCAtMjY2NiwxMDkgKzIxMzMsNiBAQCBzdGF0aWMgdm9p ZCBpOTE1X3NldF9yZXNldF9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+ICAgCX0KPiAgIH0KPgo+IC12b2lkIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZShzdHJ1Y3Qga3Jl ZiAqcmVxX3JlZikKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEgPSBj b250YWluZXJfb2YocmVxX3JlZiwKPiAtCQkJCQkJIHR5cGVvZigqcmVxKSwgcmVmKTsKPiAtCXN0 cnVjdCBpbnRlbF9jb250ZXh0ICpjdHggPSByZXEtPmN0eDsKPiAtCj4gLQlpZiAocmVxLT5maWxl X3ByaXYpCj4gLQkJaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQocmVxKTsKPiAt Cj4gLQlpZiAoY3R4KSB7Cj4gLQkJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykgewo+IC0JCQlp ZiAoY3R4ICE9IHJlcS0+cmluZy0+ZGVmYXVsdF9jb250ZXh0KQo+IC0JCQkJaW50ZWxfbHJfY29u dGV4dF91bnBpbihyZXEpOwo+IC0JCX0KPiAtCj4gLQkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVy ZW5jZShjdHgpOwo+IC0JfQo+IC0KPiAtCWttZW1fY2FjaGVfZnJlZShyZXEtPmk5MTUtPnJlcXVl c3RzLCByZXEpOwo+IC19Cj4gLQo+IC1pbnQgaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAo+IC0JCQkgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4 LAo+IC0JCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXFfb3V0KQo+IC17Cj4g LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHJpbmctPmRldik7 Cj4gLQl1bnNpZ25lZCByZXNldF9jb3VudGVyID0gaTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJp di0+Z3B1X2Vycm9yKTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+IC0J aW50IHJldDsKPiAtCj4gLQlpZiAoIXJlcV9vdXQpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+ IC0JKnJlcV9vdXQgPSBOVUxMOwo+IC0KPiAtCS8qIEFCSTogQmVmb3JlIHVzZXJzcGFjZSBhY2Nl c3NlcyB0aGUgR1BVIChlLmcuIGV4ZWNidWZmZXIpLCByZXBvcnQKPiAtCSAqIEVJTyBpZiB0aGUg R1BVIGlzIGFscmVhZHkgd2VkZ2VkLCBvciBFQUdBSU4gdG8gZHJvcCB0aGUgc3RydWN0X211dGV4 Cj4gLQkgKiBhbmQgcmVzdGFydC4KPiAtCSAqLwo+IC0JcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2Vk Z2UocmVzZXRfY291bnRlciwgZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGUpOwo+IC0JaWYgKHJl dCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCXJlcSA9IGttZW1fY2FjaGVfemFsbG9jKGRldl9w cml2LT5yZXF1ZXN0cywgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAocmVxID09IE5VTEwpCj4gLQkJcmV0 dXJuIC1FTk9NRU07Cj4gLQo+IC0JcmV0ID0gaTkxNV9nZW1fZ2V0X3NlcW5vKHJpbmctPmRldiwg JnJlcS0+c2Vxbm8pOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGVycjsKPiAtCj4gLQlrcmVmX2lu aXQoJnJlcS0+cmVmKTsKPiAtCXJlcS0+aTkxNSA9IGRldl9wcml2Owo+IC0JcmVxLT5yaW5nID0g cmluZzsKPiAtCXJlcS0+cmVzZXRfY291bnRlciA9IHJlc2V0X2NvdW50ZXI7Cj4gLQlyZXEtPmN0 eCAgPSBjdHg7Cj4gLQlpOTE1X2dlbV9jb250ZXh0X3JlZmVyZW5jZShyZXEtPmN0eCk7Cj4gLQo+ IC0JaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKPiAtCQlyZXQgPSBpbnRlbF9sb2dpY2FsX3Jp bmdfYWxsb2NfcmVxdWVzdF9leHRyYXMocmVxKTsKPiAtCWVsc2UKPiAtCQlyZXQgPSBpbnRlbF9y aW5nX2FsbG9jX3JlcXVlc3RfZXh0cmFzKHJlcSk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJaTkxNV9n ZW1fY29udGV4dF91bnJlZmVyZW5jZShyZXEtPmN0eCk7Cj4gLQkJZ290byBlcnI7Cj4gLQl9Cj4g LQo+IC0JLyoKPiAtCSAqIFJlc2VydmUgc3BhY2UgaW4gdGhlIHJpbmcgYnVmZmVyIGZvciBhbGwg dGhlIGNvbW1hbmRzIHJlcXVpcmVkIHRvCj4gLQkgKiBldmVudHVhbGx5IGVtaXQgdGhpcyByZXF1 ZXN0LiBUaGlzIGlzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZQo+IC0JICogaTkxNV9hZGRfcmVxdWVz dCgpIGNhbGwgY2FuJ3QgZmFpbC4gTm90ZSB0aGF0IHRoZSByZXNlcnZlIG1heSBuZWVkCj4gLQkg KiB0byBiZSByZWRvbmUgaWYgdGhlIHJlcXVlc3QgaXMgbm90IGFjdHVhbGx5IHN1Ym1pdHRlZCBz dHJhaWdodAo+IC0JICogYXdheSwgZS5nLiBiZWNhdXNlIGEgR1BVIHNjaGVkdWxlciBoYXMgZGVm ZXJyZWQgaXQuCj4gLQkgKi8KPiAtCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCj4gLQkJcmV0 ID0gaW50ZWxfbG9naWNhbF9yaW5nX3Jlc2VydmVfc3BhY2UocmVxKTsKPiAtCWVsc2UKPiAtCQly ZXQgPSBpbnRlbF9yaW5nX3Jlc2VydmVfc3BhY2UocmVxKTsKPiAtCWlmIChyZXQpIHsKPiAtCQkv Kgo+IC0JCSAqIEF0IHRoaXMgcG9pbnQsIHRoZSByZXF1ZXN0IGlzIGZ1bGx5IGFsbG9jYXRlZCBl dmVuIGlmIG5vdAo+IC0JCSAqIGZ1bGx5IHByZXBhcmVkLiBUaHVzIGl0IGNhbiBiZSBjbGVhbmVk IHVwIHVzaW5nIHRoZSBwcm9wZXIKPiAtCQkgKiBmcmVlIGNvZGUuCj4gLQkJICovCj4gLQkJaTkx NV9nZW1fcmVxdWVzdF9jYW5jZWwocmVxKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAt CSpyZXFfb3V0ID0gcmVxOwo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1lcnI6Cj4gLQlrbWVtX2NhY2hl X2ZyZWUoZGV2X3ByaXYtPnJlcXVlc3RzLCByZXEpOwo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0K PiAtdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2NhbmNlbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSkKPiAtewo+IC0JaW50ZWxfcmluZ19yZXNlcnZlZF9zcGFjZV9jYW5jZWwocmVxLT5y aW5nYnVmKTsKPiAtCj4gLQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcSk7Cj4gLX0K PiAtCj4gICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgo+ICAgaTkxNV9nZW1fZmluZF9h Y3RpdmVfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAgewo+IEBAIC0y ODUwLDE0ICsyMjE0LDE0IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3Jlc2V0X3JpbmdfY2xlYW51 cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJICogaW1wbGljaXQgcmVm ZXJlbmNlcyBvbiB0aGluZ3MgbGlrZSBlLmcuIHBwZ3R0IGFkZHJlc3Mgc3BhY2VzIHRocm91Z2gK PiAgIAkgKiB0aGUgcmVxdWVzdC4KPiAgIAkgKi8KPiAtCXdoaWxlICghbGlzdF9lbXB0eSgmcmlu Zy0+cmVxdWVzdF9saXN0KSkgewo+ICsJaWYgKCFsaXN0X2VtcHR5KCZyaW5nLT5yZXF1ZXN0X2xp c3QpKSB7Cj4gICAJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKPgo+IC0J CXJlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyaW5nLT5yZXF1ZXN0X2xpc3QsCj4gLQkJCQkJ ICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0LAo+IC0JCQkJCSAgIGxpc3QpOwo+ICsJCXJl cXVlc3QgPSBsaXN0X2xhc3RfZW50cnkoJnJpbmctPnJlcXVlc3RfbGlzdCwKPiArCQkJCQkgIHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCwKPiArCQkJCQkgIGxpc3QpOwo+Cj4gLQkJaTkxNV9n ZW1fcmVxdWVzdF9yZXRpcmUocmVxdWVzdCk7Cj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVf dXB0byhyZXF1ZXN0KTsKPiAgIAl9Cj4KPiAgIAkvKiBIYXZpbmcgZmx1c2hlZCBhbGwgcmVxdWVz dHMgZnJvbSBhbGwgcXVldWVzLCB3ZSBrbm93IHRoYXQgYWxsCj4gQEAgLTI5MjIsNyArMjI4Niw3 IEBAIGk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcpCj4gICAJCWlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxdWVzdCkpCj4g ICAJCQlicmVhazsKPgo+IC0JCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHJlcXVlc3QpOwo+ICsJ CWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX3VwdG8ocmVxdWVzdCk7Cj4gICAJfQo+Cj4gICAJLyog TW92ZSBhbnkgYnVmZmVycyBvbiB0aGUgYWN0aXZlIGxpc3QgdGhhdCBhcmUgbm8gbG9uZ2VyIHJl ZmVyZW5jZWQKPiBAQCAtMzA1Myw3ICsyNDE3LDcgQEAgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2Fj dGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCQkJZ290byByZXRpcmU7 Cj4KPiAgIAkJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSkpIHsKPiAtCQkJX19p OTE1X2dlbV9yZXF1ZXN0X3JldGlyZV9fdXB0byhyZXEpOwo+ICsJCQlpOTE1X2dlbV9yZXF1ZXN0 X3JldGlyZV91cHRvKHJlcSk7Cj4gICByZXRpcmU6Cj4gICAJCQlpOTE1X2dlbV9vYmplY3RfcmV0 aXJlX19yZWFkKG9iaiwgaSk7Cj4gICAJCX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f cmVxdWVzdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmI0 ZWRlNmRkN2IyMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9yZXF1ZXN0LmMKPiBAQCAtMCwwICsxLDY1OSBAQAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgwqkgMjAwOC0yMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsg Kgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29m dHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdB UkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKwo+ICtzdGF0 aWMgaW50Cj4gK2k5MTVfZ2VtX2NoZWNrX3dlZGdlKHVuc2lnbmVkIHJlc2V0X2NvdW50ZXIsIGJv b2wgaW50ZXJydXB0aWJsZSkKPiArewo+ICsJaWYgKF9faTkxNV90ZXJtaW5hbGx5X3dlZGdlZChy ZXNldF9jb3VudGVyKSkKPiArCQlyZXR1cm4gLUVJTzsKPiArCj4gKwlpZiAoX19pOTE1X3Jlc2V0 X2luX3Byb2dyZXNzKHJlc2V0X2NvdW50ZXIpKSB7Cj4gKwkJLyogTm9uLWludGVycnVwdGlibGUg Y2FsbGVycyBjYW4ndCBoYW5kbGUgLUVBR0FJTiwgaGVuY2UgcmV0dXJuCj4gKwkJICogLUVJTyB1 bmNvbmRpdGlvbmFsbHkgZm9yIHRoZXNlLiAqLwo+ICsJCWlmICghaW50ZXJydXB0aWJsZSkKPiAr CQkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJCXJldHVybiAtRUFHQUlOOwo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2k5MTVfZ2VtX2luaXRfc2Vxbm8oc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgc2Vxbm8pCj4gK3sKPiArCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gKwlpbnQgcmV0LCBpLCBqOwo+ICsKPiArCS8qIENh cmVmdWxseSByZXRpcmUgYWxsIHJlcXVlc3RzIHdpdGhvdXQgd3JpdGluZyB0byB0aGUgcmluZ3Mg Ki8KPiArCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsKPiArCQlyZXQgPSBpbnRl bF9yaW5nX2lkbGUocmluZyk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0K PiArCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXZfcHJpdi0+ZGV2KTsKPiArCj4gKwkvKiBG aW5hbGx5IHJlc2V0IGh3IHN0YXRlICovCj4gKwlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9wcml2 LCBpKSB7Cj4gKwkJaW50ZWxfcmluZ19pbml0X3NlcW5vKHJpbmcsIHNlcW5vKTsKPiArCj4gKwkJ Zm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocmluZy0+c2VtYXBob3JlLnN5bmNfc2Vxbm8pOyBq KyspCj4gKwkJCXJpbmctPnNlbWFwaG9yZS5zeW5jX3NlcW5vW2pdID0gMDsKPiArCX0KPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGk5MTVfZ2VtX3NldF9zZXFubyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChz ZXFubyA9PSAwKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCS8qIEhXUyBwYWdlIG5lZWRz IHRvIGJlIHNldCBsZXNzIHRoYW4gd2hhdCB3ZQo+ICsJICogd2lsbCBpbmplY3QgdG8gcmluZwo+ ICsJICovCj4gKwlyZXQgPSBpOTE1X2dlbV9pbml0X3NlcW5vKGRldl9wcml2LCBzZXFubyAtIDEp Owo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIENhcmVmdWxseSBzZXQg dGhlIGxhc3Rfc2Vxbm8gdmFsdWUgc28gdGhhdCB3cmFwCj4gKwkgKiBkZXRlY3Rpb24gc3RpbGwg d29ya3MKPiArCSAqLwo+ICsJZGV2X3ByaXYtPm5leHRfc2Vxbm8gPSBzZXFubzsKPiArCWRldl9w cml2LT5sYXN0X3NlcW5vID0gc2Vxbm8gLSAxOwo+ICsJaWYgKGRldl9wcml2LT5sYXN0X3NlcW5v ID09IDApCj4gKwkJZGV2X3ByaXYtPmxhc3Rfc2Vxbm8tLTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludAo+ICtpOTE1X2dlbV9nZXRfc2Vxbm8oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgKnNlcW5vKQo+ICt7Cj4gKwkvKiByZXNlcnZlIDAgZm9y IG5vbi1zZXFubyAqLwo+ICsJaWYgKHVubGlrZWx5KGRldl9wcml2LT5uZXh0X3NlcW5vID09IDAp KSB7Cj4gKwkJaW50IHJldCA9IGk5MTVfZ2VtX2luaXRfc2Vxbm8oZGV2X3ByaXYsIDApOwo+ICsJ CWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCWRldl9wcml2LT5uZXh0X3NlcW5v ID0gMTsKPiArCX0KPiArCj4gKwkqc2Vxbm8gPSBkZXZfcHJpdi0+bGFzdF9zZXFubyA9IGRldl9w cml2LT5uZXh0X3NlcW5vKys7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGk5MTVfZ2Vt X3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiArCQkJICAgc3Ry dWN0IGludGVsX2NvbnRleHQgKmN0eCwKPiArCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICoqcmVxX291dCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShyaW5nLT5kZXYpOwo+ICsJdW5zaWduZWQgcmVzZXRfY291bnRlciA9IGk5MTVf cmVzZXRfY291bnRlcigmZGV2X3ByaXYtPmdwdV9lcnJvcik7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFyZXFfb3V0KQo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsKPiArCSpyZXFfb3V0ID0gTlVMTDsKPiArCj4gKwkvKiBBQkk6 IEJlZm9yZSB1c2Vyc3BhY2UgYWNjZXNzZXMgdGhlIEdQVSAoZS5nLiBleGVjYnVmZmVyKSwgcmVw b3J0Cj4gKwkgKiBFSU8gaWYgdGhlIEdQVSBpcyBhbHJlYWR5IHdlZGdlZCwgb3IgRUFHQUlOIHRv IGRyb3AgdGhlIHN0cnVjdF9tdXRleAo+ICsJICogYW5kIHJlc3RhcnQuCj4gKwkgKi8KPiArCXJl dCA9IGk5MTVfZ2VtX2NoZWNrX3dlZGdlKHJlc2V0X2NvdW50ZXIsIGRldl9wcml2LT5tbS5pbnRl cnJ1cHRpYmxlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXEgPSBr bWVtX2NhY2hlX3phbGxvYyhkZXZfcHJpdi0+cmVxdWVzdHMsIEdGUF9LRVJORUwpOwo+ICsJaWYg KHJlcSA9PSBOVUxMKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXJldCA9IGk5MTVfZ2Vt X2dldF9zZXFubyhkZXZfcHJpdiwgJnJlcS0+c2Vxbm8pOwo+ICsJaWYgKHJldCkKPiArCQlnb3Rv IGVycjsKPiArCj4gKwlrcmVmX2luaXQoJnJlcS0+cmVmKTsKPiArCXJlcS0+aTkxNSA9IGRldl9w cml2Owo+ICsJcmVxLT5yaW5nID0gcmluZzsKPiArCXJlcS0+cmVzZXRfY291bnRlciA9IHJlc2V0 X2NvdW50ZXI7Cj4gKwlyZXEtPmN0eCAgPSBjdHg7Cj4gKwlpOTE1X2dlbV9jb250ZXh0X3JlZmVy ZW5jZShyZXEtPmN0eCk7Cj4gKwo+ICsJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKPiArCQly ZXQgPSBpbnRlbF9sb2dpY2FsX3JpbmdfYWxsb2NfcmVxdWVzdF9leHRyYXMocmVxKTsKPiArCWVs c2UKPiArCQlyZXQgPSBpbnRlbF9yaW5nX2FsbG9jX3JlcXVlc3RfZXh0cmFzKHJlcSk7Cj4gKwlp ZiAocmV0KSB7Cj4gKwkJaTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShyZXEtPmN0eCk7Cj4g KwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFJlc2VydmUgc3BhY2UgaW4gdGhl IHJpbmcgYnVmZmVyIGZvciBhbGwgdGhlIGNvbW1hbmRzIHJlcXVpcmVkIHRvCj4gKwkgKiBldmVu dHVhbGx5IGVtaXQgdGhpcyByZXF1ZXN0LiBUaGlzIGlzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZQo+ ICsJICogaTkxNV9hZGRfcmVxdWVzdCgpIGNhbGwgY2FuJ3QgZmFpbC4gTm90ZSB0aGF0IHRoZSBy ZXNlcnZlIG1heSBuZWVkCj4gKwkgKiB0byBiZSByZWRvbmUgaWYgdGhlIHJlcXVlc3QgaXMgbm90 IGFjdHVhbGx5IHN1Ym1pdHRlZCBzdHJhaWdodAo+ICsJICogYXdheSwgZS5nLiBiZWNhdXNlIGEg R1BVIHNjaGVkdWxlciBoYXMgZGVmZXJyZWQgaXQuCj4gKwkgKi8KPiArCWlmIChpOTE1LmVuYWJs ZV9leGVjbGlzdHMpCj4gKwkJcmV0ID0gaW50ZWxfbG9naWNhbF9yaW5nX3Jlc2VydmVfc3BhY2Uo cmVxKTsKPiArCWVsc2UKPiArCQlyZXQgPSBpbnRlbF9yaW5nX3Jlc2VydmVfc3BhY2UocmVxKTsK PiArCWlmIChyZXQpIHsKPiArCQkvKgo+ICsJCSAqIEF0IHRoaXMgcG9pbnQsIHRoZSByZXF1ZXN0 IGlzIGZ1bGx5IGFsbG9jYXRlZCBldmVuIGlmIG5vdAo+ICsJCSAqIGZ1bGx5IHByZXBhcmVkLiBU aHVzIGl0IGNhbiBiZSBjbGVhbmVkIHVwIHVzaW5nIHRoZSBwcm9wZXIKPiArCQkgKiBmcmVlIGNv ZGUuCj4gKwkJICovCj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9jYW5jZWwocmVxKTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCSpyZXFfb3V0ID0gcmVxOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ ICtlcnI6Cj4gKwlrbWVtX2NhY2hlX2ZyZWUoZGV2X3ByaXYtPnJlcXVlc3RzLCByZXEpOwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2NhbmNlbChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJaW50ZWxfcmluZ19yZXNlcnZl ZF9zcGFjZV9jYW5jZWwocmVxLT5yaW5nYnVmKTsKPiArCj4gKwlpOTE1X2dlbV9yZXF1ZXN0X3Vu cmVmZXJlbmNlKHJlcSk7Cj4gK30KPiArCj4gK2ludCBpOTE1X2dlbV9yZXF1ZXN0X2FkZF90b19j bGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gKwkJCQkgICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dmF0ZTsKPiArCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdjsKPiArCj4g KwlXQVJOX09OKCFyZXEgfHwgIWZpbGUgfHwgcmVxLT5maWxlX3ByaXYpOwo+ICsKPiArCWlmICgh cmVxIHx8ICFmaWxlKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmIChyZXEtPmZpbGVf cHJpdikKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlkZXZfcHJpdmF0ZSA9IHJlcS0+cmlu Zy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owo+ ICsKPiArCXNwaW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiArCXJlcS0+ZmlsZV9wcml2 ID0gZmlsZV9wcml2Owo+ICsJbGlzdF9hZGRfdGFpbCgmcmVxLT5jbGllbnRfbGlzdCwgJmZpbGVf cHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKPiArCXNwaW5fdW5sb2NrKCZmaWxlX3ByaXYtPm1tLmxv Y2spOwo+ICsKPiArCXJlcS0+cGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICtpOTE1X2dlbV9y ZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cXVlc3QpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9 IHJlcXVlc3QtPmZpbGVfcHJpdjsKPiArCj4gKwlpZiAoIWZpbGVfcHJpdikKPiArCQlyZXR1cm47 Cj4gKwo+ICsJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwo+ICsJbGlzdF9kZWwoJnJl cXVlc3QtPmNsaWVudF9saXN0KTsKPiArCXJlcXVlc3QtPmZpbGVfcHJpdiA9IE5VTEw7Cj4gKwlz cGluX3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiArCj4gKwlwdXRfcGlkKHJlcXVlc3Qt PnBpZCk7Cj4gKwlyZXF1ZXN0LT5waWQgPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBp OTE1X2dlbV9yZXF1ZXN0X3JldGlyZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVl c3QpCj4gK3sKPiArCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHJlcXVlc3QpOwo+ICsK PiArCS8qIFdlIGtub3cgdGhlIEdQVSBtdXN0IGhhdmUgcmVhZCB0aGUgcmVxdWVzdCB0byBoYXZl Cj4gKwkgKiBzZW50IHVzIHRoZSBzZXFubyArIGludGVycnVwdCwgc28gdXNlIHRoZSBwb3NpdGlv bgo+ICsJICogb2YgdGFpbCBvZiB0aGUgcmVxdWVzdCB0byB1cGRhdGUgdGhlIGxhc3Qga25vd24g cG9zaXRpb24KPiArCSAqIG9mIHRoZSBHUFUgaGVhZC4KPiArCSAqCj4gKwkgKiBOb3RlIHRoaXMg cmVxdWlyZXMgdGhhdCB3ZSBhcmUgYWx3YXlzIGNhbGxlZCBpbiByZXF1ZXN0Cj4gKwkgKiBjb21w bGV0aW9uIG9yZGVyLgo+ICsJICovCj4gKwlyZXF1ZXN0LT5yaW5nYnVmLT5sYXN0X3JldGlyZWRf aGVhZCA9IHJlcXVlc3QtPnBvc3RmaXg7Cj4gKwo+ICsJbGlzdF9kZWxfaW5pdCgmcmVxdWVzdC0+ bGlzdCk7Cj4gKwlpOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChyZXF1ZXN0KTsK PiArCj4gKwlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKHJlcXVlc3QpOwo+ICt9Cj4gKwo+ ICt2b2lkCj4gK2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX3VwdG8oc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXEpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9 IHJlcS0+cmluZzsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqdG1wOwo+ICsKPiAr CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmVuZ2luZS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiAr CWlmIChsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKQo+ICsJCXJldHVybjsKPiArCj4gKwlkbyB7Cj4g KwkJdG1wID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT5yZXF1ZXN0X2xpc3QsCj4gKwkJCQkg ICAgICAgdHlwZW9mKCp0bXApLCBsaXN0KTsKPiArCj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9yZXRp cmUodG1wKTsKPiArCX0gd2hpbGUgKHRtcCAhPSByZXEpOwo+ICsKPiArCVdBUk5fT04oaTkxNV92 ZXJpZnlfbGlzdHMoZW5naW5lLT5kZXYpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9n ZW1fbWFya19idXN5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJ aWYgKGRldl9wcml2LT5tbS5idXN5KQo+ICsJCXJldHVybjsKPiArCj4gKwlpbnRlbF9ydW50aW1l X3BtX2dldF9ub3Jlc3VtZShkZXZfcHJpdik7Cj4gKwo+ICsJaTkxNV91cGRhdGVfZ2Z4X3ZhbChk ZXZfcHJpdik7Cj4gKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA2KQo+ICsJCWdl bjZfcnBzX2J1c3koZGV2X3ByaXYpOwo+ICsKPiArCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXZfcHJp di0+d3EsCj4gKwkJCSAgICZkZXZfcHJpdi0+bW0ucmV0aXJlX3dvcmssCj4gKwkJCSAgIHJvdW5k X2ppZmZpZXNfdXBfcmVsYXRpdmUoSFopKTsKPiArCj4gKwlkZXZfcHJpdi0+bW0uYnVzeSA9IHRy dWU7Cj4gK30KPiArCj4gKy8qCj4gKyAqIE5COiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2Vk IHRvIGZhaWwuIERvaW5nIHNvIHdvdWxkIG1lYW4gdGhlIHRoZQo+ICsgKiByZXF1ZXN0IGlzIG5v dCBiZWluZyB0cmFja2VkIGZvciBjb21wbGV0aW9uIGJ1dCB0aGUgd29yayBpdHNlbGYgaXMKPiAr ICogZ29pbmcgdG8gaGFwcGVuIG9uIHRoZSBoYXJkd2FyZS4gVGhpcyB3b3VsZCBiZSBhIEJhZCBU aGluZyh0bSkuCj4gKyAqLwo+ICt2b2lkIF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gKwkJCWJvb2wgZmx1c2hfY2FjaGVzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpyaW5nOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Owo+ICsJ c3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWY7Cj4gKwl1MzIgcmVxdWVzdF9zdGFydDsK PiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKFdBUk5fT04ocmVxdWVzdCA9PSBOVUxMKSkKPiArCQly ZXR1cm47Cj4gKwo+ICsJcmluZyA9IHJlcXVlc3QtPnJpbmc7Cj4gKwlkZXZfcHJpdiA9IHJpbmct PmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlyaW5nYnVmID0gcmVxdWVzdC0+cmluZ2J1ZjsKPiArCj4g KwkvKgo+ICsJICogVG8gZW5zdXJlIHRoYXQgdGhpcyBjYWxsIHdpbGwgbm90IGZhaWwsIHNwYWNl IGZvciBpdHMgZW1pc3Npb25zCj4gKwkgKiBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gcmVzZXJ2 ZWQgaW4gdGhlIHJpbmcgYnVmZmVyLiBMZXQgdGhlIHJpbmcKPiArCSAqIGtub3cgdGhhdCBpdCBp cyB0aW1lIHRvIHVzZSB0aGF0IHNwYWNlIHVwLgo+ICsJICovCj4gKwlpbnRlbF9yaW5nX3Jlc2Vy dmVkX3NwYWNlX3VzZShyaW5nYnVmKTsKPiArCj4gKwlyZXF1ZXN0X3N0YXJ0ID0gaW50ZWxfcmlu Z19nZXRfdGFpbChyaW5nYnVmKTsKPiArCS8qCj4gKwkgKiBFbWl0IGFueSBvdXRzdGFuZGluZyBm bHVzaGVzIC0gZXhlY2J1ZiBjYW4gZmFpbCB0byBlbWl0IHRoZSBmbHVzaAo+ICsJICogYWZ0ZXIg aGF2aW5nIGVtaXR0ZWQgdGhlIGJhdGNoYnVmZmVyIGNvbW1hbmQuIEhlbmNlIHdlIG5lZWQgdG8g Zml4Cj4gKwkgKiB0aGluZ3MgdXAgc2ltaWxhciB0byBlbWl0dGluZyB0aGUgbGF6eSByZXF1ZXN0 LiBUaGUgZGlmZmVyZW5jZSBoZXJlCj4gKwkgKiBpcyB0aGF0IHRoZSBmbHVzaCBfbXVzdF8gaGFw cGVuIGJlZm9yZSB0aGUgbmV4dCByZXF1ZXN0LCBubyBtYXR0ZXIKPiArCSAqIHdoYXQuCj4gKwkg Ki8KPiArCWlmIChmbHVzaF9jYWNoZXMpIHsKPiArCQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3Rz KQo+ICsJCQlyZXQgPSBsb2dpY2FsX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyhyZXF1ZXN0KTsKPiAr CQllbHNlCj4gKwkJCXJldCA9IGludGVsX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyhyZXF1ZXN0KTsK PiArCQkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAqLwo+ICsJCVdBUk4ocmV0LCAiKl9yaW5nX2Zs dXNoX2FsbF9jYWNoZXMgZmFpbGVkOiAlZCFcbiIsIHJldCk7Cj4gKwl9Cj4gKwo+ICsJLyogUmVj b3JkIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3Qgc28gdGhhdAo+ICsJ ICogc2hvdWxkIHdlIGRldGVjdCB0aGUgdXBkYXRlZCBzZXFubyBwYXJ0LXdheSB0aHJvdWdoIHRo ZQo+ICsJICogR1BVIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QsIHdlIG5ldmVyIG92ZXItZXN0aW1h dGUgdGhlCj4gKwkgKiBwb3NpdGlvbiBvZiB0aGUgaGVhZC4KPiArCSAqLwo+ICsJcmVxdWVzdC0+ cG9zdGZpeCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1Zik7Cj4gKwo+ICsJaWYgKGk5MTUu ZW5hYmxlX2V4ZWNsaXN0cykKPiArCQlyZXQgPSByaW5nLT5lbWl0X3JlcXVlc3QocmVxdWVzdCk7 Cj4gKwllbHNlIHsKPiArCQlyZXQgPSByaW5nLT5hZGRfcmVxdWVzdChyZXF1ZXN0KTsKPiArCj4g KwkJcmVxdWVzdC0+dGFpbCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1Zik7Cj4gKwl9Cj4g KwkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAqLwo+ICsJV0FSTihyZXQsICJlbWl0fGFkZF9yZXF1 ZXN0IGZhaWxlZDogJWQhXG4iLCByZXQpOwo+ICsKPiArCXJlcXVlc3QtPmhlYWQgPSByZXF1ZXN0 X3N0YXJ0Owo+ICsKPiArCS8qIFdoaWxzdCB0aGlzIHJlcXVlc3QgZXhpc3RzLCBiYXRjaF9vYmog d2lsbCBiZSBvbiB0aGUKPiArCSAqIGFjdGl2ZV9saXN0LCBhbmQgc28gd2lsbCBob2xkIHRoZSBh Y3RpdmUgcmVmZXJlbmNlLiBPbmx5IHdoZW4gdGhpcwo+ICsJICogcmVxdWVzdCBpcyByZXRpcmVk IHdpbGwgdGhlIHRoZSBiYXRjaF9vYmogYmUgbW92ZWQgb250byB0aGUKPiArCSAqIGluYWN0aXZl X2xpc3QgYW5kIGxvc2UgaXRzIGFjdGl2ZSByZWZlcmVuY2UuIEhlbmNlIHdlIGRvIG5vdCBuZWVk Cj4gKwkgKiB0byBleHBsaWNpdGx5IGhvbGQgYW5vdGhlciByZWZlcmVuY2UgaGVyZS4KPiArCSAq Lwo+ICsJcmVxdWVzdC0+YmF0Y2hfb2JqID0gb2JqOwo+ICsKPiArCXJlcXVlc3QtPmVtaXR0ZWRf amlmZmllcyA9IGppZmZpZXM7Cj4gKwlyZXF1ZXN0LT5wcmV2aW91c19zZXFubyA9IHJpbmctPmxh c3Rfc3VibWl0dGVkX3NlcW5vOwo+ICsJcmluZy0+bGFzdF9zdWJtaXR0ZWRfc2Vxbm8gPSByZXF1 ZXN0LT5zZXFubzsKPiArCWxpc3RfYWRkX3RhaWwoJnJlcXVlc3QtPmxpc3QsICZyaW5nLT5yZXF1 ZXN0X2xpc3QpOwo+ICsKPiArCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfYWRkKHJlcXVlc3QpOwo+ ICsKPiArCWk5MTVfZ2VtX21hcmtfYnVzeShkZXZfcHJpdik7Cj4gKwo+ICsJLyogU2FuaXR5IGNo ZWNrIHRoYXQgdGhlIHJlc2VydmVkIHNpemUgd2FzIGxhcmdlIGVub3VnaC4gKi8KPiArCWludGVs X3JpbmdfcmVzZXJ2ZWRfc3BhY2VfZW5kKHJpbmdidWYpOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGlj IHVuc2lnbmVkIGxvbmcgbG9jYWxfY2xvY2tfdXModW5zaWduZWQgKmNwdSkKPiArewo+ICsJdW5z aWduZWQgbG9uZyB0Owo+ICsKPiArCS8qIENoZWFwbHkgYW5kIGFwcHJveGltYXRlbHkgY29udmVy dCBmcm9tIG5hbm9zZWNvbmRzIHRvIG1pY3Jvc2Vjb25kcy4KPiArCSAqIFRoZSByZXN1bHQgYW5k IHN1YnNlcXVlbnQgY2FsY3VsYXRpb25zIGFyZSBhbHNvIGRlZmluZWQgaW4gdGhlIHNhbWUKPiAr CSAqIGFwcHJveGltYXRlIG1pY3Jvc2Vjb25kcyB1bml0cy4gVGhlIHByaW5jaXBhbCBzb3VyY2Ug b2YgdGltaW5nCj4gKwkgKiBlcnJvciBoZXJlIGlzIGZyb20gdGhlIHNpbXBsZSB0cnVuY2F0aW9u Lgo+ICsJICoKPiArCSAqIE5vdGUgdGhhdCBsb2NhbF9jbG9jaygpIGlzIG9ubHkgZGVmaW5lZCB3 cnQgdG8gdGhlIGN1cnJlbnQgQ1BVOwo+ICsJICogdGhlIGNvbXBhcmlzb25zIGFyZSBubyBsb25n ZXIgdmFsaWQgaWYgd2Ugc3dpdGNoIENQVXMuIEluc3RlYWQgb2YKPiArCSAqIGJsb2NraW5nIHBy ZWVtcHRpb24gZm9yIHRoZSBlbnRpcmUgYnVzeXdhaXQsIHdlIGNhbiBkZXRlY3QgdGhlIENQVQo+ ICsJICogc3dpdGNoIGFuZCB1c2UgdGhhdCBhcyBpbmRpY2F0b3Igb2Ygc3lzdGVtIGxvYWQgYW5k IGEgcmVhc29uIHRvCj4gKwkgKiBzdG9wIGJ1c3l3YWl0aW5nLCBzZWUgYnVzeXdhaXRfc3RvcCgp Lgo+ICsJICovCj4gKwkqY3B1ID0gZ2V0X2NwdSgpOwo+ICsJdCA9IGxvY2FsX2Nsb2NrKCkgPj4g MTA7Cj4gKwlwdXRfY3B1KCk7Cj4gKwo+ICsJcmV0dXJuIHQ7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGJ1c3l3YWl0X3N0b3AodW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1bnNpZ25lZCBjcHUpCj4g K3sKPiArCXVuc2lnbmVkIHRoaXNfY3B1Owo+ICsKPiArCWlmICh0aW1lX2FmdGVyKGxvY2FsX2Ns b2NrX3VzKCZ0aGlzX2NwdSksIHRpbWVvdXQpKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXJl dHVybiB0aGlzX2NwdSAhPSBjcHU7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIF9faTkxNV9zcGlu X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gKwkJCQlzdHJ1Y3Qg aW50ZWxfd2FpdCAqd2FpdCwKPiArCQkJCWludCBzdGF0ZSkKPiArewo+ICsJdW5zaWduZWQgbG9u ZyB0aW1lb3V0Owo+ICsJdW5zaWduZWQgY3B1Owo+ICsKPiArCS8qIFdoZW4gd2FpdGluZyBmb3Ig aGlnaCBmcmVxdWVuY3kgcmVxdWVzdHMsIGUuZy4gZHVyaW5nIHN5bmNocm9ub3VzCj4gKwkgKiBy ZW5kZXJpbmcgc3BsaXQgYmV0d2VlbiB0aGUgQ1BVIGFuZCBHUFUsIHRoZSBmaW5pdGUgYW1vdW50 IG9mIHRpbWUKPiArCSAqIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgaXJxIGFuZCB3YWl0IHVwb24g aXQgbGltaXRzIHRoZSByZXNwb25zZQo+ICsJICogcmF0ZS4gQnkgYnVzeXdhaXRpbmcgb24gdGhl IHJlcXVlc3QgY29tcGxldGlvbiBmb3IgYSBzaG9ydCB3aGlsZSB3ZQo+ICsJICogY2FuIHNlcnZp Y2UgdGhlIGhpZ2ggZnJlcXVlbmN5IHdhaXRzIGFzIHF1aWNrIGFzIHBvc3NpYmxlLiBIb3dldmVy LAo+ICsJICogaWYgaXQgaXMgYSBzbG93IHJlcXVlc3QsIHdlIHdhbnQgdG8gc2xlZXAgYXMgcXVp Y2tseSBhcyBwb3NzaWJsZS4KPiArCSAqIFRoZSB0cmFkZW9mZiBiZXR3ZWVuIHdhaXRpbmcgYW5k IHNsZWVwaW5nIGlzIHJvdWdobHkgdGhlIHRpbWUgaXQKPiArCSAqIHRha2VzIHRvIHNsZWVwIG9u IGEgcmVxdWVzdCwgb24gdGhlIG9yZGVyIG9mIGEgbWljcm9zZWNvbmQuCj4gKwkgKi8KPiArCj4g KwkvKiBPbmx5IHNwaW4gaWYgd2Uga25vdyB0aGUgR1BVIGlzIHByb2Nlc3NpbmcgdGhpcyByZXF1 ZXN0ICovCj4gKwlpZiAoIWk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChyZXEpKQo+ICsJCXJldHVy biBmYWxzZTsKPiArCj4gKwl0aW1lb3V0ID0gbG9jYWxfY2xvY2tfdXMoJmNwdSkgKyA1Owo+ICsJ ZG8gewo+ICsJCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQo+ICsJCQlyZXR1 cm4gdHJ1ZTsKPiArCj4gKwkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCB3YWl0LT50 YXNrKSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWlmIChidXN5d2FpdF9zdG9wKHRpbWVvdXQsIGNw dSkpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQljcHVfcmVsYXhfbG93bGF0ZW5jeSgpOwo+ICsKPiAr CQkvKiBCcmVhayB0aGUgbG9vcCBpZiB3ZSBoYXZlIGNvbnN1bWVkIHRoZSB0aW1lc2xpY2UgKG9y IGJlZW4KPiArCQkgKiBwcmVlbXB0ZWQpIG9yIHdoZW4gZWl0aGVyIHRoZSBiYWNrZ3JvdW5kIHRo cmVhZCBoYXMKPiArCQkgKiBlbmFibGVkIHRoZSBpbnRlcnJ1cHQsIG9yIHRoZSBJUlEgaXRzZWxm IGhhcyBmaXJlZC4KPiArCQkgKi8KPiArCX0gd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSAmJiB3YWl0 LT50YXNrLT5zdGF0ZSA9PSBzdGF0ZSk7Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogX19pOTE1X3dhaXRfcmVxdWVzdCAtIHdhaXQgdW50aWwgZXhlY3V0aW9uIG9m IHJlcXVlc3QgaGFzIGZpbmlzaGVkCj4gKyAqIEByZXE6IGR1aCEKPiArICogQGludGVycnVwdGli bGU6IGRvIGFuIGludGVycnVwdGlibGUgd2FpdCAobm9ybWFsbHkgeWVzKQo+ICsgKiBAdGltZW91 dDogaW4gLSBob3cgbG9uZyB0byB3YWl0IChOVUxMIGZvcmV2ZXIpOyBvdXQgLSBob3cgbXVjaCB0 aW1lIHJlbWFpbmluZwo+ICsgKgo+ICsgKiBOb3RlOiBJdCBpcyBvZiB1dG1vc3QgaW1wb3J0YW5j ZSB0aGF0IHRoZSBwYXNzZWQgaW4gc2Vxbm8gYW5kIHJlc2V0X2NvdW50ZXIKPiArICogdmFsdWVz IGhhdmUgYmVlbiByZWFkIGJ5IHRoZSBjYWxsZXIgaW4gYW4gc21wIHNhZmUgbWFubmVyLiBXaGVy ZSByZWFkLXNpZGUKPiArICogbG9ja3MgYXJlIGludm9sdmVkLCBpdCBpcyBzdWZmaWNpZW50IHRv IHJlYWQgdGhlIHJlc2V0X2NvdW50ZXIgYmVmb3JlCj4gKyAqIHVubG9ja2luZyB0aGUgbG9jayB0 aGF0IHByb3RlY3RzIHRoZSBzZXFuby4gRm9yIGxvY2tsZXNzIHRyaWNrcywgdGhlCj4gKyAqIHJl c2V0X2NvdW50ZXIgX211c3RfIGJlIHJlYWQgYmVmb3JlLCBhbmQgYW4gYXBwcm9wcmlhdGUgc21w X3JtYiBtdXN0IGJlCj4gKyAqIGluc2VydGVkLgo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgaWYgdGhl IHJlcXVlc3Qgd2FzIGZvdW5kIHdpdGhpbiB0aGUgYWxsb3RlZCB0aW1lLiBFbHNlIHJldHVybnMg dGhlCj4gKyAqIGVycm5vIHdpdGggcmVtYWluaW5nIHRpbWUgZmlsbGVkIGluIHRpbWVvdXQgYXJn dW1lbnQuCj4gKyAqLwo+ICtpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSwKPiArCQkJYm9vbCBpbnRlcnJ1cHRpYmxlLAo+ICsJCQlzNjQgKnRp bWVvdXQsCj4gKwkJCXN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpycHMpCj4gK3sKPiArCWludCBz dGF0ZSA9IGludGVycnVwdGlibGUgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJS VVBUSUJMRTsKPiArCXN0cnVjdCBpbnRlbF93YWl0IHdhaXQ7Cj4gKwl1bnNpZ25lZCBsb25nIHRp bWVvdXRfcmVtYWluOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJbWlnaHRfc2xlZXAoKTsKPiAr Cj4gKwlpZiAobGlzdF9lbXB0eSgmcmVxLT5saXN0KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlp ZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKPiArCQlyZXR1cm4gMDsKPiArCj4g Kwl0aW1lb3V0X3JlbWFpbiA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwo+ICsJaWYgKHRpbWVvdXQp IHsKPiArCQlpZiAoV0FSTl9PTigqdGltZW91dCA8IDApKQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsK PiArCj4gKwkJaWYgKCp0aW1lb3V0ID09IDApCj4gKwkJCXJldHVybiAtRVRJTUU7Cj4gKwo+ICsJ CS8qIFJlY29yZCBjdXJyZW50IHRpbWUgaW4gY2FzZSBpbnRlcnJ1cHRlZCwgb3Igd2VkZ2VkICov Cj4gKwkJdGltZW91dF9yZW1haW4gPSBuc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoKnRpbWVvdXQp Owo+ICsJCSp0aW1lb3V0ICs9IGt0aW1lX2dldF9yYXdfbnMoKTsKPiArCX0KPiArCj4gKwl0cmFj ZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4ocmVxKTsKPiArCj4gKwkvKiBUaGlzIGNsaWVu dCBpcyBhYm91dCB0byBzdGFsbCB3YWl0aW5nIGZvciB0aGUgR1BVLiBJbiBtYW55IGNhc2VzCj4g KwkgKiB0aGlzIGlzIHVuZGVzaXJhYmxlIGFuZCBsaW1pdHMgdGhlIHRocm91Z2hwdXQgb2YgdGhl IHN5c3RlbSwgYXMKPiArCSAqIG1hbnkgY2xpZW50cyBjYW5ub3QgY29udGludWUgcHJvY2Vzc2lu ZyB1c2VyIGlucHV0L291dHB1dCB3aGlsc3QKPiArCSAqIGJsb2NrZWQuIFJQUyBhdXRvdHVuaW5n IG1heSB0YWtlIHRlbnMgb2YgbWlsbGlzZWNvbmRzIHRvIHJlc3BvbmQKPiArCSAqIHRvIHRoZSBH UFUgbG9hZCBhbmQgdGh1cyBpbmN1cnMgYWRkaXRpb25hbCBsYXRlbmN5IGZvciB0aGUgY2xpZW50 Lgo+ICsJICogV2UgY2FuIGNpcmN1bXZlbnQgdGhhdCBieSBwcm9tb3RpbmcgdGhlIEdQVSBmcmVx dWVuY3kgdG8gbWF4aW11bQo+ICsJICogYmVmb3JlIHdlIHdhaXQuIFRoaXMgbWFrZXMgdGhlIEdQ VSB0aHJvdHRsZSB1cCBtdWNoIG1vcmUgcXVpY2tseQo+ICsJICogKGdvb2QgZm9yIGJlbmNobWFy a3MgYW5kIHVzZXIgZXhwZXJpZW5jZSwgZS5nLiB3aW5kb3cgYW5pbWF0aW9ucyksCj4gKwkgKiBi dXQgYXQgYSBjb3N0IG9mIHNwZW5kaW5nIG1vcmUgcG93ZXIgcHJvY2Vzc2luZyB0aGUgd29ya2xv YWQKPiArCSAqIChiYWQgZm9yIGJhdHRlcnkpLiBOb3QgYWxsIGNsaWVudHMgZXZlbiB3YW50IHRo ZWlyIHJlc3VsdHMKPiArCSAqIGltbWVkaWF0ZWx5IGFuZCBmb3IgdGhlbSB3ZSBzaG91bGQganVz dCBsZXQgdGhlIEdQVSBzZWxlY3QgaXRzIG93bgo+ICsJICogZnJlcXVlbmN5IHRvIG1heGltaXNl IGVmZmljaWVuY3kuIFRvIHByZXZlbnQgYSBzaW5nbGUgY2xpZW50IGZyb20KPiArCSAqIGZvcmNp bmcgdGhlIGNsb2NrcyB0b28gaGlnaCBmb3IgdGhlIHdob2xlIHN5c3RlbSwgd2Ugb25seSBhbGxv dwo+ICsJICogZWFjaCBjbGllbnQgdG8gd2FpdGJvb3N0IG9uY2UgaW4gYSBidXN5IHBlcmlvZC4K PiArCSAqLwo+ICsJaWYgKElOVEVMX0lORk8ocmVxLT5pOTE1KS0+Z2VuID49IDYpCj4gKwkJZ2Vu Nl9ycHNfYm9vc3QocmVxLT5pOTE1LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKPiArCj4g KwlpbnRlbF93YWl0X2luaXQoJndhaXQsIHJlcS0+c2Vxbm8pOwo+ICsJc2V0X3Rhc2tfc3RhdGUo d2FpdC50YXNrLCBzdGF0ZSk7Cj4gKwo+ICsJLyogT3B0aW1pc3RpYyBzcGluIGZvciB0aGUgbmV4 dCB+amlmZmllIGJlZm9yZSB0b3VjaGluZyBJUlFzICovCj4gKwlpZiAoaW50ZWxfZW5naW5lX2Fk ZF93YWl0KHJlcS0+cmluZywgJndhaXQpKSB7Cj4gKwkJaWYgKF9faTkxNV9zcGluX3JlcXVlc3Qo cmVxLCAmd2FpdCwgc3RhdGUpKQo+ICsJCQlnb3RvIGNvbXBsZXRlOwo+ICsKPiArCQkvKiBJbiBv cmRlciB0byBjaGVjayB0aGF0IHdlIGhhdmVuJ3QgbWlzc2VkIHRoZSBpbnRlcnJ1cHQKPiArCQkg KiBhcyB3ZSBlbmFibGVkIGl0LCB3ZSBuZWVkIHRvIGtpY2sgb3Vyc2VsdmVzIHRvIGRvIGEKPiAr CQkgKiBjb2hlcmVudCBjaGVjayBvbiB0aGUgc2Vxbm8gYmVmb3JlIHdlIHNsZWVwLgo+ICsJCSAq Lwo+ICsJCWlmIChpbnRlbF9lbmdpbmVfZW5hYmxlX3dhaXRfaXJxKHJlcS0+cmluZywgJndhaXQp KQo+ICsJCQlnb3RvIHdha2V1cDsKPiArCX0KPiArCj4gKwlmb3IgKDs7KSB7Cj4gKwkJaWYgKHNp Z25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCB3YWl0LnRhc2spKSB7Cj4gKwkJCXJldCA9IC1FUkVT VEFSVFNZUzsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQkvKiBFbnN1cmUgdGhhdCBldmVu IGlmIHRoZSBHUFUgaGFuZ3MsIHdlIGdldCB3b2tlbiB1cC4gKi8KPiArCQlpOTE1X3F1ZXVlX2hh bmdjaGVjayhyZXEtPmk5MTUpOwo+ICsKPiArCQl0aW1lb3V0X3JlbWFpbiA9IGlvX3NjaGVkdWxl X3RpbWVvdXQodGltZW91dF9yZW1haW4pOwo+ICsJCWlmICh0aW1lb3V0X3JlbWFpbiA9PSAwKSB7 Cj4gKwkJCXJldCA9IC1FVElNRTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlpZiAoaW50 ZWxfd2FpdF9jb21wbGV0ZSgmd2FpdCkpCj4gKwkJCWJyZWFrOwo+ICsKPiArd2FrZXVwOgo+ICsJ CXNldF90YXNrX3N0YXRlKHdhaXQudGFzaywgc3RhdGUpOwo+ICsKPiArCQkvKiBDYXJlZnVsbHkg Y2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMgY29tcGxldGUsIGdpdmluZyB0aW1lCj4gKwkJICogZm9y IHRoZSBzZXFubyB0byBiZSB2aXNpYmxlIGZvbGxvd2luZyB0aGUgaW50ZXJydXB0Lgo+ICsJCSAq IFdlIGFsc28gaGF2ZSB0byBjaGVjayBpbiBjYXNlIHdlIGFyZSBraWNrZWQgYnkgdGhlIEdQVQo+ ICsJCSAqIHJlc2V0IGluIG9yZGVyIHRvIGRyb3AgdGhlIHN0cnVjdF9tdXRleC4KPiArCQkgKi8K PiArCQlpZiAoX19pOTE1X3JlcXVlc3RfaXJxX2NvbXBsZXRlKHJlcSkpCj4gKwkJCWJyZWFrOwo+ ICsJfQo+ICsKPiArY29tcGxldGU6Cj4gKwlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQocmVxLT5y aW5nLCAmd2FpdCk7Cj4gKwlfX3NldF90YXNrX3N0YXRlKHdhaXQudGFzaywgVEFTS19SVU5OSU5H KTsKPiArCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQocmVxKTsKPiArCj4gKwlpZiAo dGltZW91dCkgewo+ICsJCSp0aW1lb3V0IC09IGt0aW1lX2dldF9yYXdfbnMoKTsKPiArCQlpZiAo KnRpbWVvdXQgPCAwKQo+ICsJCQkqdGltZW91dCA9IDA7Cj4gKwo+ICsJCS8qCj4gKwkJICogQXBw YXJlbnRseSBrdGltZSBpc24ndCBhY2N1cmF0ZSBlbm91Z2ggYW5kIG9jY2FzaW9uYWxseSBoYXMg YQo+ICsJCSAqIGJpdCBvZiBtaXNtYXRjaCBpbiB0aGUgamlmZmllczwtPm5zZWNzPC0+a3RpbWUg bG9vcC4gU28gcGF0Y2gKPiArCQkgKiB0aGluZ3MgdXAgdG8gbWFrZSB0aGUgdGVzdCBoYXBweS4g V2UgYWxsb3cgdXAgdG8gMSBqaWZmeS4KPiArCQkgKgo+ICsJCSAqIFRoaXMgaXMgYSByZWdyc3Np b24gZnJvbSB0aGUgdGltZXNwZWMtPmt0aW1lIGNvbnZlcnNpb24uCj4gKwkJICovCj4gKwkJaWYg KHJldCA9PSAtRVRJTUUgJiYgKnRpbWVvdXQgPCBqaWZmaWVzX3RvX3VzZWNzKDEpKjEwMDApCj4g KwkJCSp0aW1lb3V0ID0gMDsKPiArCX0KPiArCj4gKwlpZiAocmV0ID09IDAgJiYgcnBzICYmIHJl cS0+c2Vxbm8gPT0gcmVxLT5yaW5nLT5sYXN0X3N1Ym1pdHRlZF9zZXFubykgewo+ICsJCS8qIFRo ZSBHUFUgaXMgbm93IGlkbGUgYW5kIHRoaXMgY2xpZW50IGhhcyBzdGFsbGVkLgo+ICsJCSAqIFNp bmNlIG5vIG90aGVyIGNsaWVudCBoYXMgc3VibWl0dGVkIGEgcmVxdWVzdCBpbiB0aGUKPiArCQkg KiBtZWFudGltZSwgYXNzdW1lIHRoYXQgdGhpcyBjbGllbnQgaXMgdGhlIG9ubHkgb25lCj4gKwkJ ICogc3VwcGx5aW5nIHdvcmsgdG8gdGhlIEdQVSBidXQgaXMgdW5hYmxlIHRvIGtlZXAgdGhhdAo+ ICsJCSAqIHdvcmsgc3VwcGxpZWQgYmVjYXVzZSBpdCBpcyB3YWl0aW5nLiBTaW5jZSB0aGUgR1BV IGlzCj4gKwkJICogdGhlbiBuZXZlciBrZXB0IGZ1bGx5IGJ1c3ksIFJQUyBhdXRvY2xvY2tpbmcg d2lsbAo+ICsJCSAqIGtlZXAgdGhlIGNsb2NrcyByZWxhdGl2ZWx5IGxvdywgY2F1c2luZyBmdXJ0 aGVyIGRlbGF5cy4KPiArCQkgKiBDb21wZW5zYXRlIGJ5IGdpdmluZyB0aGUgc3luY2hyb25vdXMg Y2xpZW50IGNyZWRpdCBmb3IKPiArCQkgKiBhIHdhaXRib29zdCBuZXh0IHRpbWUuCj4gKwkJICov Cj4gKwkJc3Bpbl9sb2NrKCZyZXEtPmk5MTUtPnJwcy5jbGllbnRfbG9jayk7Cj4gKwkJbGlzdF9k ZWxfaW5pdCgmcnBzLT5saW5rKTsKPiArCQlzcGluX3VubG9jaygmcmVxLT5pOTE1LT5ycHMuY2xp ZW50X2xvY2spOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBXYWl0cyBmb3IgYSByZXF1ZXN0IHRvIGJlIHNpZ25hbGVkLCBhbmQgY2xlYW5zIHVwIHRoZQo+ ICsgKiByZXF1ZXN0IGFuZCBvYmplY3QgbGlzdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhhdCBldmVu dC4KPiArICovCj4gK2ludAo+ICtpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiArCWJvb2wgaW50ZXJydXB0aWJsZTsKPiAr CWludCByZXQ7Cj4gKwo+ICsJQlVHX09OKHJlcSA9PSBOVUxMKTsKPiArCj4gKwlkZXYgPSByZXEt PnJpbmctPmRldjsKPiArCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWludGVycnVw dGlibGUgPSBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZTsKPiArCj4gKwlCVUdfT04oIW11dGV4 X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiArCj4gKwlyZXQgPSBfX2k5MTVfd2Fp dF9yZXF1ZXN0KHJlcSwgaW50ZXJydXB0aWJsZSwgTlVMTCwgTlVMTCk7Cj4gKwlpZiAocmV0KQo+ ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVfdXB0byhyZXEp Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKHN0 cnVjdCBrcmVmICpyZXFfcmVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcSA9IGNvbnRhaW5lcl9vZihyZXFfcmVmLAo+ICsJCQkJCQkgdHlwZW9mKCpyZXEpLCByZWYp Owo+ICsJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCA9IHJlcS0+Y3R4Owo+ICsKPiArCWlmIChy ZXEtPmZpbGVfcHJpdikKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChy ZXEpOwo+ICsKPiArCWlmIChjdHgpIHsKPiArCQlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKSB7 Cj4gKwkJCWlmIChjdHggIT0gcmVxLT5yaW5nLT5kZWZhdWx0X2NvbnRleHQpCj4gKwkJCQlpbnRl bF9scl9jb250ZXh0X3VucGluKHJlcSk7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X2dlbV9jb250ZXh0 X3VucmVmZXJlbmNlKGN0eCk7Cj4gKwl9Cj4gKwo+ICsJa21lbV9jYWNoZV9mcmVlKHJlcS0+aTkx NS0+cmVxdWVzdHMsIHJlcSk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fcmVxdWVzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVx dWVzdC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ0NmYy MmYzMGIwYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9yZXF1ZXN0LmgKPiBAQCAtMCwwICsxLDIyMyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQg wqkgMjAwOC0yMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Cj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdh cmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUu Cj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBJOTE1X0dFTV9SRVFVRVNUX0gKPiArI2RlZmlu ZSBJOTE1X0dFTV9SRVFVRVNUX0gKPiArCj4gKy8qKgo+ICsgKiBSZXF1ZXN0IHF1ZXVlIHN0cnVj dHVyZS4KPiArICoKPiArICogVGhlIHJlcXVlc3QgcXVldWUgYWxsb3dzIHVzIHRvIG5vdGUgc2Vx dWVuY2UgbnVtYmVycyB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkCj4gKyAqIGFuZCBtYXkgYmUgYXNz b2NpYXRlZCB3aXRoIGFjdGl2ZSBidWZmZXJzIHRvIGJlIHJldGlyZWQuCj4gKyAqCj4gKyAqIEJ5 IGtlZXBpbmcgdGhpcyBsaXN0LCB3ZSBjYW4gYXZvaWQgaGF2aW5nIHRvIGRvIHF1ZXN0aW9uYWJs ZSBzZXF1ZW5jZQo+ICsgKiBudW1iZXIgY29tcGFyaXNvbnMgb24gYnVmZmVyIGxhc3RfcmVhZHx3 cml0ZV9zZXFuby4gSXQgYWxzbyBhbGxvd3MgYW4KPiArICogZW1pc3Npb24gdGltZSB0byBiZSBh c3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QgZm9yIHRyYWNraW5nIGhvdyBmYXIgYWhlYWQKPiAr ICogb2YgdGhlIEdQVSB0aGUgc3VibWlzc2lvbiBpcy4KPiArICoKPiArICogVGhlIHJlcXVlc3Rz IGFyZSByZWZlcmVuY2UgY291bnRlZCwgc28gdXBvbiBjcmVhdGlvbiB0aGV5IHNob3VsZCBoYXZl IGFuCj4gKyAqIGluaXRpYWwgcmVmZXJlbmNlIHRha2VuIHVzaW5nIGtyZWZfaW5pdAo+ICsgKi8K PiArc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0IHsKPiArCXN0cnVjdCBrcmVmIHJlZjsKPiAr Cj4gKwkvKiogT24gV2hpY2ggcmluZyB0aGlzIHJlcXVlc3Qgd2FzIGdlbmVyYXRlZCAqLwo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nOwo+ICsJdW5zaWduZWQgcmVzZXRfY291bnRlcjsKPiArCj4gKwkgLyoqIEdFTSBzZXF1 ZW5jZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcmV2aW91cyByZXF1ZXN0LAo+ICsJICAq IHdoZW4gdGhlIEhXUyBicmVhZGNydW1iIGlzIGVxdWFsIHRvIHRoaXMgdGhlIEdQVSBpcyBwcm9j ZXNzaW5nCj4gKwkgICogdGhpcyByZXF1ZXN0Lgo+ICsJICAqLwo+ICsJdTMyIHByZXZpb3VzX3Nl cW5vOwo+ICsKPiArCSAvKiogR0VNIHNlcXVlbmNlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhp cyByZXF1ZXN0LAo+ICsJICAqIHdoZW4gdGhlIEhXUyBicmVhZGNydW1iIGlzIGVxdWFsIG9yIGdy ZWF0ZXIgdGhhbiB0aGlzIHRoZSBHUFUKPiArCSAgKiBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyB0 aGlzIHJlcXVlc3QuCj4gKwkgICovCj4gKwl1MzIgc2Vxbm87Cj4gKwo+ICsJLyoqIFBvc2l0aW9u IGluIHRoZSByaW5nYnVmZmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdCAqLwo+ICsJdTMy IGhlYWQ7Cj4gKwo+ICsJLyoqCj4gKwkgKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0 aGUgc3RhcnQgb2YgdGhlIHBvc3RmaXguCj4gKwkgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGNhbGN1 bGF0ZSB0aGUgbWF4aW11bSBhdmFpbGFibGUgcmluZ2J1ZmZlcgo+ICsJICogc3BhY2Ugd2l0aG91 dCBvdmVyd3JpdGluZyB0aGUgcG9zdGZpeC4KPiArCSAqLwo+ICsJIHUzMiBwb3N0Zml4Owo+ICsK PiArCS8qKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgZW5kIG9mIHRoZSB3aG9s ZSByZXF1ZXN0ICovCj4gKwl1MzIgdGFpbDsKPiArCj4gKwkvKioKPiArCSAqIENvbnRleHQgYW5k IHJpbmcgYnVmZmVyIHJlbGF0ZWQgdG8gdGhpcyByZXF1ZXN0Cj4gKwkgKiBDb250ZXh0cyBhcmUg cmVmY291bnRlZCwgc28gd2hlbiB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoIGEKPiAr CSAqIGNvbnRleHQsIHdlIG11c3QgaW5jcmVtZW50IHRoZSBjb250ZXh0J3MgcmVmY291bnQsIHRv IGd1YXJhbnRlZSB0aGF0Cj4gKwkgKiBpdCBwZXJzaXN0cyB3aGlsZSBhbnkgcmVxdWVzdCBpcyBs aW5rZWQgdG8gaXQuIFJlcXVlc3RzIHRoZW1zZWx2ZXMKPiArCSAqIGFyZSBhbHNvIHJlZmNvdW50 ZWQsIHNvIHRoZSByZXF1ZXN0IHdpbGwgb25seSBiZSBmcmVlZCB3aGVuIHRoZSBsYXN0Cj4gKwkg KiByZWZlcmVuY2UgdG8gaXQgaXMgZGlzbWlzc2VkLCBhbmQgdGhlIGNvZGUgaW4KPiArCSAqIGk5 MTVfZ2VtX3JlcXVlc3RfZnJlZSgpIHdpbGwgdGhlbiBkZWNyZW1lbnQgdGhlIHJlZmNvdW50IG9u IHRoZQo+ICsJICogY29udGV4dC4KPiArCSAqLwo+ICsJc3RydWN0IGludGVsX2NvbnRleHQgKmN0 eDsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmOwo+ICsKPiArCS8qKiBCYXRj aCBidWZmZXIgcmVsYXRlZCB0byB0aGlzIHJlcXVlc3QgaWYgYW55ICh1c2VkIGZvcgo+ICsJICAg IGVycm9yIHN0YXRlIGR1bXAgb25seSkgKi8KPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpiYXRjaF9vYmo7Cj4gKwo+ICsJLyoqIFRpbWUgYXQgd2hpY2ggdGhpcyByZXF1ZXN0IHdhcyBl bWl0dGVkLCBpbiBqaWZmaWVzLiAqLwo+ICsJdW5zaWduZWQgbG9uZyBlbWl0dGVkX2ppZmZpZXM7 Cj4gKwo+ICsJLyoqIGdsb2JhbCBsaXN0IGVudHJ5IGZvciB0aGlzIHJlcXVlc3QgKi8KPiArCXN0 cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRl ICpmaWxlX3ByaXY7Cj4gKwkvKiogZmlsZV9wcml2IGxpc3QgZW50cnkgZm9yIHRoaXMgcmVxdWVz dCAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsKPiArCj4gKwkvKiogcHJvY2Vz cyBpZGVudGlmaWVyIHN1Ym1pdHRpbmcgdGhpcyByZXF1ZXN0ICovCj4gKwlzdHJ1Y3QgcGlkICpw aWQ7Cj4gKwo+ICsJLyoqCj4gKwkgKiBUaGUgRUxTUCBvbmx5IGFjY2VwdHMgdHdvIGVsZW1lbnRz IGF0IGEgdGltZSwgc28gd2UgcXVldWUKPiArCSAqIGNvbnRleHQvdGFpbCBwYWlycyBvbiBhIGdp dmVuIHF1ZXVlIChyaW5nLT5leGVjbGlzdF9xdWV1ZSkgdW50aWwgdGhlCj4gKwkgKiBoYXJkd2Fy ZSBpcyBhdmFpbGFibGUuIFRoZSBxdWV1ZSBzZXJ2ZXMgYSBkb3VibGUgcHVycG9zZTogd2UgYWxz byB1c2UKPiArCSAqIGl0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHVwIHRvIDIgY29udGV4dHMgY3Vy cmVudGx5IGluIHRoZSBoYXJkd2FyZQo+ICsJICogKHVzdWFsbHkgb25lIGluIGV4ZWN1dGlvbiBh bmQgdGhlIG90aGVyIHF1ZXVlZCB1cCBieSB0aGUgR1BVKTogV2UKPiArCSAqIG9ubHkgcmVtb3Zl IGVsZW1lbnRzIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIHdoZW4gdGhlIGhhcmR3YXJlCj4g KwkgKiBpbmZvcm1zIHVzIHRoYXQgYW4gZWxlbWVudCBoYXMgYmVlbiBjb21wbGV0ZWQuCj4gKwkg Kgo+ICsJICogQWxsIGFjY2Vzc2VzIHRvIHRoZSBxdWV1ZSBhcmUgbWVkaWF0ZWQgYnkgYSBzcGlu bG9jawo+ICsJICogKHJpbmctPmV4ZWNsaXN0X2xvY2spLgo+ICsJICovCj4gKwo+ICsJLyoqIEV4 ZWNsaXN0IGxpbmsgaW4gdGhlIHN1Ym1pc3Npb24gcXVldWUuKi8KPiArCXN0cnVjdCBsaXN0X2hl YWQgZXhlY2xpc3RfbGluazsKPiArCj4gKwkvKiogRXhlY2xpc3RzIG5vLiBvZiB0aW1lcyB0aGlz IHJlcXVlc3QgaGFzIGJlZW4gc2VudCB0byB0aGUgRUxTUCAqLwo+ICsJaW50IGVsc3Bfc3VibWl0 dGVkOwo+ICt9Owo+ICsKPiAraW50IGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZywKPiArCQkJICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwKPiAr CQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoqcmVxX291dCk7Cj4gK3ZvaWQgaTkx NV9nZW1fcmVxdWVzdF9jYW5jZWwoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpOwo+ ICt2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfZnJlZShzdHJ1Y3Qga3JlZiAqcmVxX3JlZik7Cj4gK2lu dCBpOTE1X2dlbV9yZXF1ZXN0X2FkZF90b19jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICt2b2lkIGk5MTVf Z2VtX3JlcXVlc3RfcmV0aXJlX3VwdG8oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEp Owo+ICsKPiArc3RhdGljIGlubGluZSB1aW50MzJfdAo+ICtpOTE1X2dlbV9yZXF1ZXN0X2dldF9z ZXFubyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJcmV0dXJuIHJl cSA/IHJlcS0+c2Vxbm8gOiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKgo+ICtpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxKQo+ICt7Cj4gKwlyZXR1cm4gcmVxID8gcmVxLT5yaW5nIDogTlVM TDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg Kgo+ICtpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSkKPiArewo+ICsJaWYgKHJlcSkKPiArCQlrcmVmX2dldCgmcmVxLT5yZWYpOwo+ICsJ cmV0dXJuIHJlcTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkCj4gK2k5MTVfZ2VtX3Jl cXVlc3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gK3sK PiArCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmcmVxLT5yaW5nLT5kZXYtPnN0cnVjdF9tdXRl eCkpOwo+ICsJa3JlZl9wdXQoJnJlcS0+cmVmLCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQKPiAraTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5j ZV9fdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gKwo+ICsJaWYgKCFyZXEpCj4gKwkJcmV0dXJuOwo+ICsK PiArCWRldiA9IHJlcS0+cmluZy0+ZGV2Owo+ICsJaWYgKGtyZWZfcHV0X211dGV4KCZyZXEtPnJl ZiwgaTkxNV9nZW1fcmVxdWVzdF9mcmVlLCAmZGV2LT5zdHJ1Y3RfbXV0ZXgpKQo+ICsJCW11dGV4 X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZv aWQgaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoq cGRzdCwKPiArCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnNyYykKPiArewo+ ICsJaWYgKHNyYykKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShzcmMpOwo+ICsKPiAr CWlmICgqcGRzdCkKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKCpwZHN0KTsKPiAr Cj4gKwkqcGRzdCA9IHNyYzsKPiArfQo+ICsKPiArdm9pZCBfX2k5MTVfYWRkX3JlcXVlc3Qoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpiYXRjaF9vYmosCj4gKwkJCWJvb2wgZmx1c2hfY2FjaGVzKTsKPiArI2RlZmluZSBp OTE1X2FkZF9yZXF1ZXN0KHJlcSkgXAo+ICsJX19pOTE1X2FkZF9yZXF1ZXN0KHJlcSwgTlVMTCwg dHJ1ZSkKPiArI2RlZmluZSBpOTE1X2FkZF9yZXF1ZXN0X25vX2ZsdXNoKHJlcSkgXAo+ICsJX19p OTE1X2FkZF9yZXF1ZXN0KHJlcSwgTlVMTCwgZmFsc2UpCj4gKwo+ICtzdHJ1Y3QgaW50ZWxfcnBz X2NsaWVudDsKPiArCj4gK2ludCBfX2k5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxLAo+ICsJCQlib29sIGludGVycnVwdGlibGUsCj4gKwkJCXM2NCAqdGlt ZW91dCwKPiArCQkJc3RydWN0IGludGVsX3Jwc19jbGllbnQgKnJwcyk7Cj4gK2ludCBfX211c3Rf Y2hlY2sgaTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEp Owo+ICsKPiArLyoqCj4gKyAqIFJldHVybnMgdHJ1ZSBpZiBzZXExIGlzIGxhdGVyIHRoYW4gc2Vx Mi4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgYm9vbAo+ICtpOTE1X3NlcW5vX3Bhc3NlZCh1aW50 MzJfdCBzZXExLCB1aW50MzJfdCBzZXEyKQo+ICt7Cj4gKwlyZXR1cm4gKGludDMyX3QpKHNlcTEg LSBzZXEyKSA+PSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1fcmVx dWVzdF9zdGFydGVkKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICt7Cj4gKwly ZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfcmluZ19nZXRfc2Vxbm8ocmVxLT5yaW5nKSwK PiArCQkJCSByZXEtPnByZXZpb3VzX3NlcW5vKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBi b29sIGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKQo+ICt7Cj4gKwlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfcmluZ19nZXRf c2Vxbm8ocmVxLT5yaW5nKSwKPiArCQkJCSByZXEtPnNlcW5vKTsKPiArfQo+ICsKPiArI2VuZGlm IC8qIEk5MTVfR0VNX1JFUVVFU1RfSCAqLwo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK