From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 21/27] drm/i915: Move context management under GEM Date: Thu, 26 Sep 2019 14:57:24 +0100 Message-ID: <87d2e408-0331-b1f9-e580-9df49fc0bab7@linux.intel.com> References: <20190925100137.17956-1-chris@chris-wilson.co.uk> <20190925100137.17956-22-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 671746ED3B for ; Thu, 26 Sep 2019 13:57:28 +0000 (UTC) In-Reply-To: <20190925100137.17956-22-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDI1LzA5LzIwMTkgMTE6MDEsIENocmlzIFdpbHNvbiB3cm90ZToKPiBLZWVwIHRyYWNrIG9m IHRoZSBHRU0gY29udGV4dHMgdW5kZXJuZWF0aCBpOTE1LT5nZW0uY29udGV4dHMgYW5kIGFzc2ln bgo+IHRoZW0gdGhlaXIgb3duIGxvY2sgZm9yIHRoZSBwdXJwb3NlcyBvZiBsaXN0IG1hbmFnZW1l bnQuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24u Y28udWs+Cj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4g LS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jICAgfCAx NTUgKysrKysrKy0tLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fY29udGV4dC5oICAgfCAgIDQgKy0KPiAgIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2NvbnRleHRfdHlwZXMuaCB8ICAgMiArLQo+ICAgLi4uL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fZXhlY2J1ZmZlci5jICAgIHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fdXNlcnB0ci5jICAgfCAgIDIgKy0KPiAgIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL3Nl bGZ0ZXN0cy9odWdlX3BhZ2VzLmMgICB8ICAxMiArLQo+ICAgLi4uL2RybS9pOTE1L2dlbS9zZWxm dGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIHwgMTIyICsrKysrKy0tLS0tLS0tCj4gICAuLi4vZ3B1 L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMgfCAgIDQgKy0KPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHQuYyAgICAgICB8ICAgOCArLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfY29udGV4dC5jICAgIHwgIDI0ICstLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMgIHwgIDE5ICstLQo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgICAgICAgIHwgICA0ICst Cj4gICAuLi4vZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMgICAgfCAgMTAg Ky0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuYyAgICAgICAgICB8ICAy MCArLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8 ICA1MCArKystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAg ICAgICB8ICAgMiAtCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAg ICAgICAgfCAgMjcgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAg ICAgICAgICAgfCAgMTAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5j ICAgICAgICAgICB8ICAgNCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMg ICAgICAgICAgICAgIHwgIDI0ICsrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNm cy5jICAgICAgICAgICAgIHwgIDc3ICsrKystLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV90cmFjZS5oICAgICAgICAgICAgIHwgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaTkxNV9nZW0uYyAgICAgfCAgIDggLQo+ICAgLi4uL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9nZW1fZXZpY3QuYyAgIHwgICAzIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyB8ICAgNCArLQo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jIHwgIDExICstCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV92bWEuYyAgICAgfCAgIDUgKy0KPiAgIC4uLi9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jICB8ICAgNiArLQo+ICAgMjggZmlsZXMg Y2hhbmdlZCwgMjcyIGluc2VydGlvbnMoKyksIDM0OSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMKPiBpbmRleCA0ZTU5YjgwOWQ5 MDEuLmE3N2Y0MzkzNThkNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fY29udGV4dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX2NvbnRleHQuYwo+IEBAIC0yMTksOSArMjE5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9n ZW1fZW5naW5lcyAqZGVmYXVsdF9lbmdpbmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgp Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfZnJlZShzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4KQo+ICAgewo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmY3R4LT5pOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlHRU1fQlVHX09OKCFpOTE1X2dlbV9jb250ZXh0X2lz X2Nsb3NlZChjdHgpKTsKPiAgIAo+ICsJc3Bpbl9sb2NrKCZjdHgtPmk5MTUtPmdlbS5jb250ZXh0 cy5sb2NrKTsKPiArCWxpc3RfZGVsKCZjdHgtPmxpbmspOwo+ICsJc3Bpbl91bmxvY2soJmN0eC0+ aTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+ICsKPiAgIAlmcmVlX2VuZ2luZXMocmN1X2FjY2Vz c19wb2ludGVyKGN0eC0+ZW5naW5lcykpOwo+ICAgCW11dGV4X2Rlc3Ryb3koJmN0eC0+ZW5naW5l c19tdXRleCk7Cj4gICAKPiBAQCAtMjMxLDU2ICsyMzQsNDAgQEAgc3RhdGljIHZvaWQgaTkxNV9n ZW1fY29udGV4dF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gICAJa2ZyZWUo Y3R4LT5uYW1lKTsKPiAgIAlwdXRfcGlkKGN0eC0+cGlkKTsKPiAgIAo+IC0JbGlzdF9kZWwoJmN0 eC0+bGluayk7Cj4gICAJbXV0ZXhfZGVzdHJveSgmY3R4LT5tdXRleCk7Cj4gICAKPiAgIAlrZnJl ZV9yY3UoY3R4LCByY3UpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIGNvbnRleHRzX2ZyZWUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3N0YXRpYyB2b2lkIGNvbnRleHRzX2Zy ZWVfYWxsKHN0cnVjdCBsbGlzdF9ub2RlICpsaXN0KQo+ICAgewo+IC0Jc3RydWN0IGxsaXN0X25v ZGUgKmZyZWVkID0gbGxpc3RfZGVsX2FsbCgmaTkxNS0+Y29udGV4dHMuZnJlZV9saXN0KTsKPiAg IAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCAqY247Cj4gICAKPiAtCWxvY2tkZXBfYXNz ZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAtCWxsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUoY3R4LCBjbiwgZnJlZWQsIGZyZWVfbGluaykKPiArCWxsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUoY3R4LCBjbiwgbGlzdCwgZnJlZV9saW5rKQo+ICAgCQlpOTE1X2dlbV9jb250 ZXh0X2ZyZWUoY3R4KTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBjb250ZXh0c19mcmVlX2Zp cnN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICtzdGF0aWMgdm9pZCBjb250ZXh0 c19mbHVzaF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0cyAqZ2MpCj4gICB7Cj4gLQlzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+IC0Jc3RydWN0IGxsaXN0X25vZGUgKmZyZWVkOwo+ IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0K PiAtCWZyZWVkID0gbGxpc3RfZGVsX2ZpcnN0KCZpOTE1LT5jb250ZXh0cy5mcmVlX2xpc3QpOwo+ IC0JaWYgKCFmcmVlZCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JY3R4ID0gY29udGFpbmVyX29mKGZy ZWVkLCB0eXBlb2YoKmN0eCksIGZyZWVfbGluayk7Cj4gLQlpOTE1X2dlbV9jb250ZXh0X2ZyZWUo Y3R4KTsKPiArCWNvbnRleHRzX2ZyZWVfYWxsKGxsaXN0X2RlbF9hbGwoJmdjLT5mcmVlX2xpc3Qp KTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgY29udGV4dHNfZnJlZV93b3JrZXIoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPQo+IC0JCWNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKmk5MTUpLCBjb250ZXh0cy5mcmVl X3dvcmspOwo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHRzICpnYyA9Cj4gKwkJY29udGFpbmVy X29mKHdvcmssIHR5cGVvZigqZ2MpLCBmcmVlX3dvcmspOwo+ICAgCj4gLQltdXRleF9sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCWNvbnRleHRzX2ZyZWUoaTkxNSk7Cj4gLQltdXRl eF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJY29udGV4dHNfZmx1c2hfZnJl ZShnYyk7Cj4gICB9Cj4gICAKPiAgIHZvaWQgaTkxNV9nZW1fY29udGV4dF9yZWxlYXNlKHN0cnVj dCBrcmVmICpyZWYpCj4gICB7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGNv bnRhaW5lcl9vZihyZWYsIHR5cGVvZigqY3R4KSwgcmVmKTsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gY3R4LT5pOTE1Owo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHRzICpn YyA9ICZjdHgtPmk5MTUtPmdlbS5jb250ZXh0czsKPiAgIAo+ICAgCXRyYWNlX2k5MTVfY29udGV4 dF9mcmVlKGN0eCk7Cj4gLQlpZiAobGxpc3RfYWRkKCZjdHgtPmZyZWVfbGluaywgJmk5MTUtPmNv bnRleHRzLmZyZWVfbGlzdCkpCj4gLQkJcXVldWVfd29yayhpOTE1LT53cSwgJmk5MTUtPmNvbnRl eHRzLmZyZWVfd29yayk7Cj4gKwlpZiAobGxpc3RfYWRkKCZjdHgtPmZyZWVfbGluaywgJmdjLT5m cmVlX2xpc3QpKQo+ICsJCXF1ZXVlX3dvcmsoY3R4LT5pOTE1LT53cSwgJmdjLT5mcmVlX3dvcmsp OwoKQXQgZmlyc3QgSSB0aG91Z2h0IGdjIHdhcyBzb21lIHNvcnQgb2YgZ2FyYmFnZSBjb2xsZWN0 aW9uIGxpc3QuIEJ1dCBpdCAKaXMgYSBHRU0gY29udGV4dHMgbGlzdC4gOikgVGhpcyBodW5rIGxv b2tzIGNvbXBsZXRlbHkgYXZvaWRhYmxlLCBJIGRvbid0IApzZWUgaXQgYnJpbmdzIG11Y2ggYmVu ZWZpdCBvbiBiYWxhbmNlIHNpbmNlIGluIHR1cm4gaXQgYWRkcyBjdHgtPmk5MTUgCnR3aWNlIC4g QnV0IGFzIHlvdSB3aXNoLi4KCj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbmxpbmUgc3RydWN0IGk5 MTVfZ2VtX2VuZ2luZXMgKgo+IEBAIC0zNTksOCArMzQ2LDggQEAgc3RhdGljIHZvaWQgY29udGV4 dF9jbG9zZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgewo+ICAgCWk5MTVfZ2Vt X2NvbnRleHRfc2V0X2Nsb3NlZChjdHgpOwo+ICAgCj4gLQlpZiAoY3R4LT52bSkKPiAtCQlpOTE1 X3ZtX2Nsb3NlKGN0eC0+dm0pOwo+ICsJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihjdHgtPnZtKSkK PiArCQlpOTE1X3ZtX2Nsb3NlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1 ZSkpOwo+ICAgCj4gICAJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7Cj4gICAKPiBAQCAtMzk0LDcg KzM4MSw2IEBAIF9fY3JlYXRlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Cj4gICAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICAgCj4gICAJa3JlZl9pbml0KCZjdHgt PnJlZik7Cj4gLQlsaXN0X2FkZF90YWlsKCZjdHgtPmxpbmssICZpOTE1LT5jb250ZXh0cy5saXN0 KTsKPiAgIAljdHgtPmk5MTUgPSBpOTE1Owo+ICAgCWN0eC0+c2NoZWQucHJpb3JpdHkgPSBJOTE1 X1VTRVJfUFJJT1JJVFkoSTkxNV9QUklPUklUWV9OT1JNQUwpOwo+ICAgCW11dGV4X2luaXQoJmN0 eC0+bXV0ZXgpOwo+IEBAIC00MzUsNiArNDIxLDEwIEBAIF9fY3JlYXRlX2NvbnRleHQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y3R4LT5oYW5nX3RpbWVzdGFtcCk7IGkrKykKPiAgIAkJY3R4LT5oYW5nX3RpbWVzdGFtcFtpXSA9 IGppZmZpZXMgLSBDT05URVhUX0ZBU1RfSEFOR19KSUZGSUVTOwo+ICAgCj4gKwlzcGluX2xvY2so Jmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPiArCWxpc3RfYWRkX3RhaWwoJmN0eC0+bGluaywg Jmk5MTUtPmdlbS5jb250ZXh0cy5saXN0KTsKPiArCXNwaW5fdW5sb2NrKCZpOTE1LT5nZW0uY29u dGV4dHMubG9jayk7Cj4gKwo+ICAgCXJldHVybiBjdHg7Cj4gICAKPiAgIGVycl9mcmVlOgo+IEBA IC00NjQsMTEgKzQ1NCwxMSBAQCBzdGF0aWMgdm9pZCBfX2FwcGx5X3BwZ3R0KHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSwgdm9pZCAqdm0pCj4gICBzdGF0aWMgc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqCj4gICBfX3NldF9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCBzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgIHsKPiAtCXN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKm9sZCA9IGN0eC0+dm07Cj4gKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICpvbGQg PSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0+dm0sIDEpOwo+ICAgCj4gICAJR0VNX0JV R19PTihvbGQgJiYgaTkxNV92bV9pc180bHZsKHZtKSAhPSBpOTE1X3ZtX2lzXzRsdmwob2xkKSk7 Cj4gICAKPiAtCWN0eC0+dm0gPSBpOTE1X3ZtX29wZW4odm0pOwo+ICsJcmN1X2Fzc2lnbl9wb2lu dGVyKGN0eC0+dm0sIGk5MTVfdm1fb3Blbih2bSkpOwoKQXJlIHVwZGF0ZXJzIGhlcmUgc2VyaWFs aXplZD8gTG9zdCB0cmFjayBpZiBzdHJ1Y3QgbXV0ZXggaXMgc3RpbGwgaGVsZCAKaW4gc2V0X3Bw Z3R0IGF0IHRoaXMgcG9pbnQgaW4gdGhlIHNlcmllcyBvciBub3QuLiBUaGlua2luZyBvZiAib2xk ID0gCnJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQuLiIgYW5kIGhlcmUuCgo+ICAgCWNvbnRleHRf YXBwbHlfYWxsKGN0eCwgX19hcHBseV9wcGd0dCwgdm0pOwo+ICAgCj4gICAJcmV0dXJuIG9sZDsK PiBAQCAtNDc3LDcgKzQ2Nyw3IEBAIF9fc2V0X3BwZ3R0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAgc3RhdGljIHZvaWQgX19h c3NpZ25fcHBndHQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAkJCSAgIHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAgewo+IC0JaWYgKHZtID09IGN0eC0+dm0pCj4g KwlpZiAodm0gPT0gcmN1X2FjY2Vzc19wb2ludGVyKGN0eC0+dm0pKQo+ICAgCQlyZXR1cm47Cj4g ICAKPiAgIAl2bSA9IF9fc2V0X3BwZ3R0KGN0eCwgdm0pOwo+IEBAIC01MDksMjcgKzQ5OSwyNSBA QCBzdGF0aWMgdm9pZCBfX2Fzc2lnbl90aW1lbGluZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4LAo+ICAgfQo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKgo+IC1p OTE1X2dlbV9jcmVhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHVuc2lnbmVkIGludCBmbGFncykKPiAraTkxNV9nZW1fY3JlYXRlX2NvbnRleHQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsIHVuc2lnbmVkIGludCBmbGFncykKPiAgIHsKPiAgIAlzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+ICAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZk ZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAgCWlmIChmbGFncyAmIEk5MTVfQ09O VEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xFX1RJTUVMSU5FICYmCj4gLQkgICAgIUhBU19FWEVDTElT VFMoZGV2X3ByaXYpKQo+ICsJICAgICFIQVNfRVhFQ0xJU1RTKGk5MTUpKQo+ICAgCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKPiAgIAo+IC0JLyogUmVhcCB0aGUgbW9zdCBzdGFsZSBjb250ZXh0 ICovCj4gLQljb250ZXh0c19mcmVlX2ZpcnN0KGRldl9wcml2KTsKPiArCS8qIFJlYXAgdGhlIHN0 YWxlIGNvbnRleHRzICovCj4gKwljb250ZXh0c19mbHVzaF9mcmVlKCZpOTE1LT5nZW0uY29udGV4 dHMpOwo+ICAgCj4gLQljdHggPSBfX2NyZWF0ZV9jb250ZXh0KGRldl9wcml2KTsKPiArCWN0eCA9 IF9fY3JlYXRlX2NvbnRleHQoaTkxNSk7Cj4gICAJaWYgKElTX0VSUihjdHgpKQo+ICAgCQlyZXR1 cm4gY3R4Owo+ICAgCj4gLQlpZiAoSEFTX0ZVTExfUFBHVFQoZGV2X3ByaXYpKSB7Cj4gKwlpZiAo SEFTX0ZVTExfUFBHVFQoaTkxNSkpIHsKPiAgIAkJc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0Owo+ ICAgCj4gLQkJcHBndHQgPSBpOTE1X3BwZ3R0X2NyZWF0ZShkZXZfcHJpdik7Cj4gKwkJcHBndHQg PSBpOTE1X3BwZ3R0X2NyZWF0ZShpOTE1KTsKPiAgIAkJaWYgKElTX0VSUihwcGd0dCkpIHsKPiAg IAkJCURSTV9ERUJVR19EUklWRVIoIlBQR1RUIHNldHVwIGZhaWxlZCAoJWxkKVxuIiwKPiAgIAkJ CQkJIFBUUl9FUlIocHBndHQpKTsKPiBAQCAtNTQ0LDcgKzUzMiw3IEBAIGk5MTVfZ2VtX2NyZWF0 ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgaW50 IGZsYWdzKQo+ICAgCWlmIChmbGFncyAmIEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xF X1RJTUVMSU5FKSB7Cj4gICAJCXN0cnVjdCBpbnRlbF90aW1lbGluZSAqdGltZWxpbmU7Cj4gICAK PiAtCQl0aW1lbGluZSA9IGludGVsX3RpbWVsaW5lX2NyZWF0ZSgmZGV2X3ByaXYtPmd0LCBOVUxM KTsKPiArCQl0aW1lbGluZSA9IGludGVsX3RpbWVsaW5lX2NyZWF0ZSgmaTkxNS0+Z3QsIE5VTEwp Owo+ICAgCQlpZiAoSVNfRVJSKHRpbWVsaW5lKSkgewo+ICAgCQkJY29udGV4dF9jbG9zZShjdHgp Owo+ICAgCQkJcmV0dXJuIEVSUl9DQVNUKHRpbWVsaW5lKTsKPiBAQCAtNTkwLDQ4ICs1NzgsNDAg QEAgaTkxNV9nZW1fY29udGV4dF9jcmVhdGVfa2VybmVsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LCBpbnQgcHJpbykKPiAgIAlyZXR1cm4gY3R4Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2 b2lkIGluaXRfY29udGV4dHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3N0YXRp YyB2b2lkIGluaXRfY29udGV4dHMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHRzICpnYykKPiAgIHsK PiAtCW11dGV4X2luaXQoJmk5MTUtPmNvbnRleHRzLm11dGV4KTsKPiAtCUlOSVRfTElTVF9IRUFE KCZpOTE1LT5jb250ZXh0cy5saXN0KTsKPiAtCj4gLQkvKiBVc2luZyB0aGUgc2ltcGxlIGlkYSBp bnRlcmZhY2UsIHRoZSBtYXggaXMgbGltaXRlZCBieSBzaXplb2YoaW50KSAqLwo+IC0JQlVJTERf QlVHX09OKE1BWF9DT05URVhUX0hXX0lEID4gSU5UX01BWCk7Cj4gLQlCVUlMRF9CVUdfT04oR0VO MTFfTUFYX0NPTlRFWFRfSFdfSUQgPiBJTlRfTUFYKTsKPiAtCWlkYV9pbml0KCZpOTE1LT5jb250 ZXh0cy5od19pZGEpOwo+IC0JSU5JVF9MSVNUX0hFQUQoJmk5MTUtPmNvbnRleHRzLmh3X2lkX2xp c3QpOwoKVGhpcyAoYW5kIHNvbWUgbW9yZSBiaXRzKSBiZWxvbmcgdG8gdGhlIGh3X2lkIHJlbW92 YWwgcGF0Y2guCgo+ICsJc3Bpbl9sb2NrX2luaXQoJmdjLT5sb2NrKTsKPiArCUlOSVRfTElTVF9I RUFEKCZnYy0+bGlzdCk7Cj4gICAKPiAtCUlOSVRfV09SSygmaTkxNS0+Y29udGV4dHMuZnJlZV93 b3JrLCBjb250ZXh0c19mcmVlX3dvcmtlcik7Cj4gLQlpbml0X2xsaXN0X2hlYWQoJmk5MTUtPmNv bnRleHRzLmZyZWVfbGlzdCk7Cj4gKwlJTklUX1dPUksoJmdjLT5mcmVlX3dvcmssIGNvbnRleHRz X2ZyZWVfd29ya2VyKTsKPiArCWluaXRfbGxpc3RfaGVhZCgmZ2MtPmZyZWVfbGlzdCk7Cj4gICB9 Cj4gICAKPiAtaW50IGk5MTVfZ2VtX2NvbnRleHRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICtpbnQgaTkxNV9nZW1faW5pdF9jb250ZXh0cyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 Owo+ICAgCj4gICAJLyogUmVhc3N1cmUgb3Vyc2VsdmVzIHdlIGFyZSBvbmx5IGNhbGxlZCBvbmNl ICovCj4gLQlHRU1fQlVHX09OKGRldl9wcml2LT5rZXJuZWxfY29udGV4dCk7Cj4gKwlHRU1fQlVH X09OKGk5MTUtPmtlcm5lbF9jb250ZXh0KTsKPiAgIAo+IC0JaW5pdF9jb250ZXh0cyhkZXZfcHJp dik7Cj4gKwlpbml0X2NvbnRleHRzKCZpOTE1LT5nZW0uY29udGV4dHMpOwo+ICAgCj4gICAJLyog bG93ZXN0IHByaW9yaXR5OyBpZGxlIHRhc2sgKi8KPiAtCWN0eCA9IGk5MTVfZ2VtX2NvbnRleHRf Y3JlYXRlX2tlcm5lbChkZXZfcHJpdiwgSTkxNV9QUklPUklUWV9NSU4pOwo+ICsJY3R4ID0gaTkx NV9nZW1fY29udGV4dF9jcmVhdGVfa2VybmVsKGk5MTUsIEk5MTVfUFJJT1JJVFlfTUlOKTsKPiAg IAlpZiAoSVNfRVJSKGN0eCkpIHsKPiAgIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRl ZmF1bHQgZ2xvYmFsIGNvbnRleHRcbiIpOwo+ICAgCQlyZXR1cm4gUFRSX0VSUihjdHgpOwo+ICAg CX0KPiAtCWRldl9wcml2LT5rZXJuZWxfY29udGV4dCA9IGN0eDsKPiArCWk5MTUtPmtlcm5lbF9j b250ZXh0ID0gY3R4Owo+ICAgCj4gICAJRFJNX0RFQlVHX0RSSVZFUigiJXMgY29udGV4dCBzdXBw b3J0IGluaXRpYWxpemVkXG4iLAo+IC0JCQkgRFJJVkVSX0NBUFMoZGV2X3ByaXYpLT5oYXNfbG9n aWNhbF9jb250ZXh0cyA/Cj4gKwkJCSBEUklWRVJfQ0FQUyhpOTE1KS0+aGFzX2xvZ2ljYWxfY29u dGV4dHMgPwo+ICAgCQkJICJsb2dpY2FsIiA6ICJmYWtlIik7Cj4gICAJcmV0dXJuIDA7Cj4gICB9 Cj4gICAKPiAtdm9pZCBpOTE1X2dlbV9jb250ZXh0c19maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQo+ICt2b2lkIGk5MTVfZ2VtX2RyaXZlcl9yZWxlYXNlX19jb250ZXh0cyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQo Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlkZXN0cm95X2tlcm5lbF9jb250ZXh0 KCZpOTE1LT5rZXJuZWxfY29udGV4dCk7Cj4gICB9Cj4gICAKPiBAQCAtNjUzLDggKzYzMyw4IEBA IHN0YXRpYyBpbnQgZ2VtX2NvbnRleHRfcmVnaXN0ZXIoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQg KmN0eCwKPiAgIAlpbnQgcmV0Owo+ICAgCj4gICAJY3R4LT5maWxlX3ByaXYgPSBmcHJpdjsKPiAt CWlmIChjdHgtPnZtKQo+IC0JCWN0eC0+dm0tPmZpbGUgPSBmcHJpdjsKPiArCWlmIChyY3VfYWNj ZXNzX3BvaW50ZXIoY3R4LT52bSkpCj4gKwkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgt PnZtLCB0cnVlKS0+ZmlsZSA9IGZwcml2OwoKSGVyZSByY3UgYWNjZXNzZXMgYXJlIGp1c3QgdG8g c2F0aXNmeSBzcGFyc2U/Cgo+ICAgCj4gICAJY3R4LT5waWQgPSBnZXRfdGFza19waWQoY3VycmVu dCwgUElEVFlQRV9QSUQpOwo+ICAgCWN0eC0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAi JXNbJWRdIiwKPiBAQCAtNjkxLDkgKzY3MSw3IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X29wZW4o c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJaWRyX2luaXQoJmZpbGVfcHJpdi0+ Y29udGV4dF9pZHIpOwo+ICAgCWlkcl9pbml0X2Jhc2UoJmZpbGVfcHJpdi0+dm1faWRyLCAxKTsK PiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJY3R4ID0g aTkxNV9nZW1fY3JlYXRlX2NvbnRleHQoaTkxNSwgMCk7Cj4gLQltdXRleF91bmxvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWlmIChJU19FUlIoY3R4KSkgewo+ICAgCQllcnIgPSBQ VFJfRVJSKGN0eCk7Cj4gICAJCWdvdG8gZXJyOwo+IEBAIC03MjEsNiArNjk5LDcgQEAgaW50IGk5 MTVfZ2VtX2NvbnRleHRfb3BlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIHZv aWQgaTkxNV9nZW1fY29udGV4dF9jbG9zZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICB7Cj4g ICAJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVy X3ByaXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGZpbGVfcHJpdi0+ZGV2 X3ByaXY7Cj4gICAKPiAgIAlpZHJfZm9yX2VhY2goJmZpbGVfcHJpdi0+Y29udGV4dF9pZHIsIGNv bnRleHRfaWRyX2NsZWFudXAsIE5VTEwpOwo+ICAgCWlkcl9kZXN0cm95KCZmaWxlX3ByaXYtPmNv bnRleHRfaWRyKTsKPiBAQCAtNzI5LDYgKzcwOCw4IEBAIHZvaWQgaTkxNV9nZW1fY29udGV4dF9j bG9zZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICAJaWRyX2Zvcl9lYWNoKCZmaWxlX3ByaXYt PnZtX2lkciwgdm1faWRyX2NsZWFudXAsIE5VTEwpOwo+ICAgCWlkcl9kZXN0cm95KCZmaWxlX3By aXYtPnZtX2lkcik7Cj4gICAJbXV0ZXhfZGVzdHJveSgmZmlsZV9wcml2LT52bV9pZHJfbG9jayk7 Cj4gKwo+ICsJY29udGV4dHNfZmx1c2hfZnJlZSgmaTkxNS0+Z2VtLmNvbnRleHRzKTsKPiAgIH0K PiAgIAo+ICAgaW50IGk5MTVfZ2VtX3ZtX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+IEBAIC05MDcsMTYgKzg4OCwxMiBAQCBzdGF0aWMgaW50IGdldF9w cGd0dChzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYsCj4gICAJc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JaWYgKCFjdHgt PnZtKQo+ICsJaWYgKCFyY3VfYWNjZXNzX3BvaW50ZXIoY3R4LT52bSkpCj4gICAJCXJldHVybiAt RU5PREVWOwo+ICAgCj4gLQkvKiBYWFggcmN1IGFjcXVpcmU/ICovCj4gLQlyZXQgPSBtdXRleF9s b2NrX2ludGVycnVwdGlibGUoJmN0eC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAo cmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ICsJcmN1X3JlYWRfbG9jaygpOwo+ICAgCXZtID0g aTkxNV92bV9nZXQoY3R4LT52bSk7Cj4gLQltdXRleF91bmxvY2soJmN0eC0+aTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4gKwlyY3VfcmVhZF91bmxvY2soKTsKPiAgIAo+ICAgCXJldCA9IG11dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmZmlsZV9wcml2LT52bV9pZHJfbG9jayk7Cj4gICAJaWYgKHJl dCkKPiBAQCAtMTAyNSw3ICsxMDAyLDcgQEAgc3RhdGljIGludCBzZXRfcHBndHQoc3RydWN0IGRy bV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2LAo+ICAgCWlmIChhcmdzLT5zaXplKQo+ICAg CQlyZXR1cm4gLUVJTlZBTDsKPiAgIAo+IC0JaWYgKCFjdHgtPnZtKQo+ICsJaWYgKCFyY3VfYWNj ZXNzX3BvaW50ZXIoY3R4LT52bSkpCj4gICAJCXJldHVybiAtRU5PREVWOwo+ICAgCj4gICAJaWYg KHVwcGVyXzMyX2JpdHMoYXJncy0+dmFsdWUpKQo+IEBAIC0xMDM5LDE3ICsxMDE2LDE1IEBAIHN0 YXRpYyBpbnQgc2V0X3BwZ3R0KHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJp diwKPiAgIAlpZiAoIXZtKQo+ICAgCQlyZXR1cm4gLUVOT0VOVDsKPiAgIAo+IC0JZXJyID0gbXV0 ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJ ZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdHgtPm11dGV4KTsKPiAgIAlpZiAoZXJy KQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JaWYgKHZtID09IGN0eC0+dm0pCj4gKwlpZiAodm0g PT0gcmN1X2FjY2Vzc19wb2ludGVyKGN0eC0+dm0pKQo+ICAgCQlnb3RvIHVubG9jazsKPiAgIAo+ ICAgCS8qIFRlYXJkb3duIHRoZSBleGlzdGluZyBvYmo6dm1hIGNhY2hlLCBpdCB3aWxsIGhhdmUg dG8gYmUgcmVidWlsdC4gKi8KPiAtCW11dGV4X2xvY2soJmN0eC0+bXV0ZXgpOwo+ICAgCWx1dF9j bG9zZShjdHgpOwo+IC0JbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKPiAgIAo+ICAgCW9sZCA9 IF9fc2V0X3BwZ3R0KGN0eCwgdm0pOwo+ICAgCj4gQEAgLTEwNjksOCArMTA0NCw3IEBAIHN0YXRp YyBpbnQgc2V0X3BwZ3R0KHN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiwK PiAgIAl9Cj4gICAKPiAgIHVubG9jazoKPiAtCW11dGV4X3VubG9jaygmY3R4LT5pOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAtCj4gKwltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOwo+ICAgb3V0 Ogo+ICAgCWk5MTVfdm1fcHV0KHZtKTsKPiAgIAlyZXR1cm4gZXJyOwo+IEBAIC0xOTUzLDcgKzE5 MjcsNyBAQCBzdGF0aWMgaW50IGNsb25lX3ZtKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpkc3Qs Cj4gICAKPiAgIAlyY3VfcmVhZF9sb2NrKCk7Cj4gICAJZG8gewo+IC0JCXZtID0gUkVBRF9PTkNF KHNyYy0+dm0pOwo+ICsJCXZtID0gcmN1X2RlcmVmZXJlbmNlKHNyYy0+dm0pOwo+ICAgCQlpZiAo IXZtKQo+ICAgCQkJYnJlYWs7Cj4gICAKPiBAQCAtMTk3NSw3ICsxOTQ5LDcgQEAgc3RhdGljIGlu dCBjbG9uZV92bShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqZHN0LAo+ICAgCQkgKiBpdCBjYW5u b3QgYmUgcmVhbGxvY2F0ZWQgZWxzZXdoZXJlLgo+ICAgCQkgKi8KPiAgIAo+IC0JCWlmICh2bSA9 PSBSRUFEX09OQ0Uoc3JjLT52bSkpCj4gKwkJaWYgKHZtID09IHJjdV9hY2Nlc3NfcG9pbnRlcihz cmMtPnZtKSkKPiAgIAkJCWJyZWFrOwo+ICAgCj4gICAJCWk5MTVfdm1fcHV0KHZtKTsKPiBAQCAt MjA3NywxMiArMjA1MSw3IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCQlyZXR1cm4gLUVJTzsKPiAgIAl9 Cj4gICAKPiAtCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7Cj4gLQlp ZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ICAgCWV4dF9kYXRhLmN0eCA9IGk5MTVfZ2Vt X2NyZWF0ZV9jb250ZXh0KGk5MTUsIGFyZ3MtPmZsYWdzKTsKPiAtCW11dGV4X3VubG9jaygmZGV2 LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWlmIChJU19FUlIoZXh0X2RhdGEuY3R4KSkKPiAgIAkJcmV0 dXJuIFBUUl9FUlIoZXh0X2RhdGEuY3R4KTsKPiAgIAo+IEBAIC0yMjA5LDEwICsyMTc4LDEyIEBA IGludCBpOTE1X2dlbV9jb250ZXh0X2dldHBhcmFtX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsCj4gICAKPiAgIAljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9HVFRfU0la RToKPiAgIAkJYXJncy0+c2l6ZSA9IDA7Cj4gLQkJaWYgKGN0eC0+dm0pCj4gLQkJCWFyZ3MtPnZh bHVlID0gY3R4LT52bS0+dG90YWw7Cj4gKwkJcmN1X3JlYWRfbG9jaygpOwo+ICsJCWlmIChyY3Vf YWNjZXNzX3BvaW50ZXIoY3R4LT52bSkpCj4gKwkJCWFyZ3MtPnZhbHVlID0gcmN1X2RlcmVmZXJl bmNlKGN0eC0+dm0pLT50b3RhbDsKPiAgIAkJZWxzZQo+ICAgCQkJYXJncy0+dmFsdWUgPSB0b19p OTE1KGRldiktPmdndHQudm0udG90YWw7Cj4gKwkJcmN1X3JlYWRfdW5sb2NrKCk7Cj4gICAJCWJy ZWFrOwo+ICAgCj4gICAJY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fTk9fRVJST1JfQ0FQVFVSRToK PiBAQCAtMjI4Myw3ICsyMjU0LDcgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfc2V0cGFyYW1faW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIGludCBpOTE1X2dlbV9j b250ZXh0X3Jlc2V0X3N0YXRzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJ ICAgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAgIHsKPiAtCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShkZXYpOwo+ICAgCXN0cnVjdCBkcm1faTkx NV9yZXNldF9zdGF0cyAqYXJncyA9IGRhdGE7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQg KmN0eDsKPiAgIAlpbnQgcmV0Owo+IEBAIC0yMzA1LDcgKzIyNzYsNyBAQCBpbnQgaTkxNV9nZW1f Y29udGV4dF9yZXNldF9zdGF0c19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCSAq Lwo+ICAgCj4gICAJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpCj4gLQkJYXJncy0+cmVzZXRf Y291bnQgPSBpOTE1X3Jlc2V0X2NvdW50KCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsKPiArCQlhcmdz LT5yZXNldF9jb3VudCA9IGk5MTVfcmVzZXRfY291bnQoJmk5MTUtPmdwdV9lcnJvcik7Cj4gICAJ ZWxzZQo+ICAgCQlhcmdzLT5yZXNldF9jb3VudCA9IDA7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmgKPiBpbmRleCAxYjBkZjUzNDM2Y2YuLjRlZTVk ZmM1Nzk0ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f Y29udGV4dC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRl eHQuaAo+IEBAIC0xMzMsOCArMTMzLDggQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX2Nv bnRleHRfaXNfa2VybmVsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gICB9Cj4gICAK PiAgIC8qIGk5MTVfZ2VtX2NvbnRleHQuYyAqLwo+IC1pbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2Vt X2NvbnRleHRzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9p ZCBpOTE1X2dlbV9jb250ZXh0c19maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7Cj4gK2ludCBfX211c3RfY2hlY2sgaTkxNV9nZW1faW5pdF9jb250ZXh0cyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gK3ZvaWQgaTkxNV9nZW1fZHJpdmVyX3JlbGVhc2VfX2Nv bnRleHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAgIAo+ICAgaW50IGk5MTVf Z2VtX2NvbnRleHRfb3BlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkJCSAg c3RydWN0IGRybV9maWxlICpmaWxlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHRfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9jb250ZXh0X3R5cGVzLmgKPiBpbmRleCA2NDE5ZGE3YzlmOTAuLmEzZWNkMTlm MjMwMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29u dGV4dF90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2Nv bnRleHRfdHlwZXMuaAo+IEBAIC04OCw3ICs4OCw3IEBAIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 IHsKPiAgIAkgKiBJbiBvdGhlciBtb2RlcywgdGhpcyBpcyBhIE5VTEwgcG9pbnRlciB3aXRoIHRo ZSBleHBlY3RhdGlvbiB0aGF0Cj4gICAJICogdGhlIGNhbGxlciB1c2VzIHRoZSBzaGFyZWQgZ2xv YmFsIEdUVC4KPiAgIAkgKi8KPiAtCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtOwo+ICsJ c3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSBfX3JjdSAqdm07Cj4gICAKPiAgIAkvKioKPiAgIAkg KiBAcGlkOiBwcm9jZXNzIGlkIG9mIGNyZWF0b3IKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiBpbmRleCA4OGE4ODFiZTEyZWMuLjk4ODE2YzM1 ZmZjMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhl Y2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNi dWZmZXIuYwo+IEBAIC03MjgsNyArNzI4LDcgQEAgc3RhdGljIGludCBlYl9zZWxlY3RfY29udGV4 dChzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYikKPiAgIAkJcmV0dXJuIC1FTk9FTlQ7Cj4gICAK PiAgIAllYi0+Z2VtX2NvbnRleHQgPSBjdHg7Cj4gLQlpZiAoY3R4LT52bSkKPiArCWlmIChyY3Vf YWNjZXNzX3BvaW50ZXIoY3R4LT52bSkpCj4gICAJCWViLT5pbnZhbGlkX2ZsYWdzIHw9IEVYRUNf T0JKRUNUX05FRURTX0dUVDsKPiAgIAo+ICAgCWViLT5jb250ZXh0X2ZsYWdzID0gMDsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMKPiBpbmRleCAyNzU3M2Vm OTAzYjQuLjdjMjI1ZTFkMmExMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fdXNlcnB0ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3VzZXJwdHIuYwo+IEBAIC03NTcsNyArNzU3LDcgQEAgaTkxNV9nZW1fdXNlcnB0cl9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCQkgKiBPbiBhbG1vc3QgYWxsIG9mIHRo ZSBvbGRlciBodywgd2UgY2Fubm90IHRlbGwgdGhlIEdQVSB0aGF0Cj4gICAJCSAqIGEgcGFnZSBp cyByZWFkb25seS4KPiAgIAkJICovCj4gLQkJdm0gPSBkZXZfcHJpdi0+a2VybmVsX2NvbnRleHQt PnZtOwo+ICsJCXZtID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXZfcHJpdi0+a2VybmVs X2NvbnRleHQtPnZtLCB0cnVlKTsKCkhtLCBzaG91bGQgaXQgbm90IGJlIHJjdV9kZXJlZmVyZW5j ZSBoZXJlPwoKPiAgIAkJaWYgKCF2bSB8fCAhdm0tPmhhc19yZWFkX29ubHkpCj4gICAJCQlyZXR1 cm4gLUVOT0RFVjsKPiAgIAl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0 ZXN0cy9odWdlX3BhZ2VzLmMKPiBpbmRleCA5OGIyYTZjY2ZjYzEuLmUyMDRlNjUzYjQ1OSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5j Cj4gQEAgLTEzMjIsNyArMTMyMiw3IEBAIHN0YXRpYyBpbnQgaWd0X3BwZ3R0X3Bpbl91cGRhdGUo dm9pZCAqYXJnKQo+ICAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPSBhcmc7Cj4gICAJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5pOTE1Owo+ICAgCXVuc2ln bmVkIGxvbmcgc3VwcG9ydGVkID0gSU5URUxfSU5GTyhkZXZfcHJpdiktPnBhZ2Vfc2l6ZXM7Cj4g LQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9IGN0eC0+dm07Cj4gKwlzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwg MSk7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiAgIAlzdHJ1Y3QgaTkx NV9nZW1fZW5naW5lc19pdGVyIGl0Owo+ICAgCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKPiBA QCAtMTQ2MCw3ICsxNDYwLDggQEAgc3RhdGljIGludCBpZ3RfdG1wZnNfZmFsbGJhY2sodm9pZCAq YXJnKQo+ICAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPSBhcmc7Cj4gICAJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBjdHgtPmk5MTU7Cj4gICAJc3RydWN0IHZmc21vdW50 ICpnZW1mcyA9IGk5MTUtPm1tLmdlbWZzOwo+IC0Jc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0gPSBjdHgtPnZtID86ICZpOTE1LT5nZ3R0LnZtOwo+ICsJc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0gPQo+ICsJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1ZSkg PzogJmk5MTUtPmdndHQudm07Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsK PiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgIAl1MzIgKnZhZGRyOwo+IEBAIC0xNTE3LDcg KzE1MTgsOCBAQCBzdGF0aWMgaW50IGlndF9zaHJpbmtfdGhwKHZvaWQgKmFyZykKPiAgIHsKPiAg IAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gYXJnOwo+ICAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gY3R4LT5pOTE1Owo+IC0Jc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0gPSBjdHgtPnZtID86ICZpOTE1LT5nZ3R0LnZtOwo+ICsJc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0gPQo+ICsJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1 ZSkgPzogJmk5MTUtPmdndHQudm07Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i ajsKPiAgIAlzdHJ1Y3QgaTkxNV9nZW1fZW5naW5lc19pdGVyIGl0Owo+ICAgCXN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZTsKPiBAQCAtMTY5OSw4ICsxNzAxLDggQEAgaW50IGk5MTVfZ2VtX2h1Z2Vf cGFnZV9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAkJ Z290byBvdXRfdW5sb2NrOwo+ICAgCX0KPiAgIAo+IC0JaWYgKGN0eC0+dm0pCj4gLQkJY3R4LT52 bS0+c2NydWJfNjRLID0gdHJ1ZTsKPiArCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3R4LT52bSkp Cj4gKwkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtPnZtLCB0cnVlKS0+c2NydWJfNjRL ID0gdHJ1ZTsKPiAgIAo+ICAgCWVyciA9IGk5MTVfc3VidGVzdHModGVzdHMsIGN0eCk7Cj4gICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dl bV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2Vt X2NvbnRleHQuYwo+IGluZGV4IGE4YTkyOTNmNGFjNi4uN2RlMWMwMDc4ZDZmIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250 ZXh0LmMKPiBAQCAtNTMsMTkgKzUzLDE3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ub3Bfc3dpdGNoKHZv aWQgKmFyZykKPiAgIAlpZiAoSVNfRVJSKGZpbGUpKQo+ICAgCQlyZXR1cm4gUFRSX0VSUihmaWxl KTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAg CWN0eCA9IGtjYWxsb2MobmN0eCwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKPiAgIAlpZiAo IWN0eCkgewo+ICAgCQllcnIgPSAtRU5PTUVNOwo+IC0JCWdvdG8gb3V0X3VubG9jazsKPiArCQln b3RvIG91dF9maWxlOwo+ICAgCX0KPiAgIAo+ICAgCWZvciAobiA9IDA7IG4gPCBuY3R4OyBuKysp IHsKPiAgIAkJY3R4W25dID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+ICAgCQlpZiAoSVNf RVJSKGN0eFtuXSkpIHsKPiAgIAkJCWVyciA9IFBUUl9FUlIoY3R4W25dKTsKPiAtCQkJZ290byBv dXRfdW5sb2NrOwo+ICsJCQlnb3RvIG91dF9maWxlOwo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gQEAg LTc5LDcgKzc3LDcgQEAgc3RhdGljIGludCBsaXZlX25vcF9zd2l0Y2godm9pZCAqYXJnKQo+ICAg CQkJcnEgPSBpZ3RfcmVxdWVzdF9hbGxvYyhjdHhbbl0sIGVuZ2luZSk7Cj4gICAJCQlpZiAoSVNf RVJSKHJxKSkgewo+ICAgCQkJCWVyciA9IFBUUl9FUlIocnEpOwo+IC0JCQkJZ290byBvdXRfdW5s b2NrOwo+ICsJCQkJZ290byBvdXRfZmlsZTsKPiAgIAkJCX0KPiAgIAkJCWk5MTVfcmVxdWVzdF9h ZGQocnEpOwo+ICAgCQl9Cj4gQEAgLTg3LDcgKzg1LDcgQEAgc3RhdGljIGludCBsaXZlX25vcF9z d2l0Y2godm9pZCAqYXJnKQo+ICAgCQkJcHJfZXJyKCJGYWlsZWQgdG8gcG9wdWxhdGVkICVkIGNv bnRleHRzXG4iLCBuY3R4KTsKPiAgIAkJCWludGVsX2d0X3NldF93ZWRnZWQoJmk5MTUtPmd0KTsK PiAgIAkJCWVyciA9IC1FSU87Cj4gLQkJCWdvdG8gb3V0X3VubG9jazsKPiArCQkJZ290byBvdXRf ZmlsZTsKPiAgIAkJfQo+ICAgCj4gICAJCXRpbWVzWzFdID0ga3RpbWVfZ2V0X3JhdygpOwo+IEBA IC05Nyw3ICs5NSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ub3Bfc3dpdGNoKHZvaWQgKmFyZykKPiAg IAo+ICAgCQllcnIgPSBpZ3RfbGl2ZV90ZXN0X2JlZ2luKCZ0LCBpOTE1LCBfX2Z1bmNfXywgZW5n aW5lLT5uYW1lKTsKPiAgIAkJaWYgKGVycikKPiAtCQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCQln b3RvIG91dF9maWxlOwo+ICAgCj4gICAJCWVuZF90aW1lID0gamlmZmllcyArIGk5MTVfc2VsZnRl c3QudGltZW91dF9qaWZmaWVzOwo+ICAgCQlmb3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbShwcmlt ZSwgMiwgODE5Mikgewo+IEBAIC0xMDcsNyArMTA1LDcgQEAgc3RhdGljIGludCBsaXZlX25vcF9z d2l0Y2godm9pZCAqYXJnKQo+ICAgCQkJCXJxID0gaWd0X3JlcXVlc3RfYWxsb2MoY3R4W24gJSBu Y3R4XSwgZW5naW5lKTsKPiAgIAkJCQlpZiAoSVNfRVJSKHJxKSkgewo+ICAgCQkJCQllcnIgPSBQ VFJfRVJSKHJxKTsKPiAtCQkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJCQkJZ290byBvdXRfZmls ZTsKPiAgIAkJCQl9Cj4gICAKPiAgIAkJCQkvKgo+IEBAIC0xNDMsNyArMTQxLDcgQEAgc3RhdGlj IGludCBsaXZlX25vcF9zd2l0Y2godm9pZCAqYXJnKQo+ICAgCj4gICAJCWVyciA9IGlndF9saXZl X3Rlc3RfZW5kKCZ0KTsKPiAgIAkJaWYgKGVycikKPiAtCQkJZ290byBvdXRfdW5sb2NrOwo+ICsJ CQlnb3RvIG91dF9maWxlOwo+ICAgCj4gICAJCXByX2luZm8oIlN3aXRjaCBsYXRlbmNpZXMgb24g JXM6IDEgPSAlbGx1bnMsICVsdSA9ICVsbHVuc1xuIiwKPiAgIAkJCWVuZ2luZS0+bmFtZSwKPiBA QCAtMTUxLDggKzE0OSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ub3Bfc3dpdGNoKHZvaWQgKmFyZykK PiAgIAkJCXByaW1lIC0gMSwgZGl2NjRfdTY0KGt0aW1lX3RvX25zKHRpbWVzWzFdKSwgcHJpbWUg LSAxKSk7Cj4gICAJfQo+ICAgCj4gLW91dF91bmxvY2s6Cj4gLQltdXRleF91bmxvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICtvdXRfZmlsZToKPiAgIAltb2NrX2ZpbGVfZnJlZShpOTE1 LCBmaWxlKTsKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+IEBAIC00MTIsMTEgKzQwOSw5IEBAIHN0 YXRpYyBpbnQgaWd0X2N0eF9leGVjKHZvaWQgKmFyZykKPiAgIAkJaWYgKElTX0VSUihmaWxlKSkK PiAgIAkJCXJldHVybiBQVFJfRVJSKGZpbGUpOwo+ICAgCj4gLQkJbXV0ZXhfbG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAgCQllcnIgPSBpZ3RfbGl2ZV90ZXN0X2JlZ2luKCZ0 LCBpOTE1LCBfX2Z1bmNfXywgZW5naW5lLT5uYW1lKTsKPiAgIAkJaWYgKGVycikKPiAtCQkJZ290 byBvdXRfdW5sb2NrOwo+ICsJCQlnb3RvIG91dF9maWxlOwo+ICAgCj4gICAJCW5jb250ZXh0cyA9 IDA7Cj4gICAJCW5kd29yZHMgPSAwOwo+IEBAIC00MjgsNyArNDIzLDcgQEAgc3RhdGljIGludCBp Z3RfY3R4X2V4ZWModm9pZCAqYXJnKQo+ICAgCQkJY3R4ID0ga2VybmVsX2NvbnRleHQoaTkxNSk7 Cj4gICAJCQlpZiAoSVNfRVJSKGN0eCkpIHsKPiAgIAkJCQllcnIgPSBQVFJfRVJSKGN0eCk7Cj4g LQkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJCQlnb3RvIG91dF9maWxlOwo+ICAgCQkJfQo+ICAg Cj4gICAJCQljZSA9IGk5MTVfZ2VtX2NvbnRleHRfZ2V0X2VuZ2luZShjdHgsIGVuZ2luZS0+bGVn YWN5X2lkeCk7Cj4gQEAgLTQ0MCw3ICs0MzUsNyBAQCBzdGF0aWMgaW50IGlndF9jdHhfZXhlYyh2 b2lkICphcmcpCj4gICAJCQkJCWVyciA9IFBUUl9FUlIob2JqKTsKPiAgIAkJCQkJaW50ZWxfY29u dGV4dF9wdXQoY2UpOwo+ICAgCQkJCQlrZXJuZWxfY29udGV4dF9jbG9zZShjdHgpOwo+IC0JCQkJ CWdvdG8gb3V0X3VubG9jazsKPiArCQkJCQlnb3RvIG91dF9maWxlOwo+ICAgCQkJCX0KPiAgIAkJ CX0KPiAgIAo+IEBAIC00NDksMTcgKzQ0NCwxOCBAQCBzdGF0aWMgaW50IGlndF9jdHhfZXhlYyh2 b2lkICphcmcpCj4gICAJCQkJcHJfZXJyKCJGYWlsZWQgdG8gZmlsbCBkd29yZCAlbHUgWyVsdS8l bHVdIHdpdGggZ3B1ICglcykgW2Z1bGwtcHBndHQ/ICVzXSwgZXJyPSVkXG4iLAo+ICAgCQkJCSAg ICAgICBuZHdvcmRzLCBkdywgbWF4X2R3b3JkcyhvYmopLAo+ICAgCQkJCSAgICAgICBlbmdpbmUt Pm5hbWUsCj4gLQkJCQkgICAgICAgeWVzbm8oISFjdHgtPnZtKSwgZXJyKTsKPiArCQkJCSAgICAg ICB5ZXNubyghIXJjdV9hY2Nlc3NfcG9pbnRlcihjdHgtPnZtKSksCj4gKwkJCQkgICAgICAgZXJy KTsKPiAgIAkJCQlpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4gICAJCQkJa2VybmVsX2NvbnRleHRf Y2xvc2UoY3R4KTsKPiAtCQkJCWdvdG8gb3V0X3VubG9jazsKPiArCQkJCWdvdG8gb3V0X2ZpbGU7 Cj4gICAJCQl9Cj4gICAKPiAgIAkJCWVyciA9IHRocm90dGxlKGNlLCB0cSwgQVJSQVlfU0laRSh0 cSkpOwo+ICAgCQkJaWYgKGVycikgewo+ICAgCQkJCWludGVsX2NvbnRleHRfcHV0KGNlKTsKPiAg IAkJCQlrZXJuZWxfY29udGV4dF9jbG9zZShjdHgpOwo+IC0JCQkJZ290byBvdXRfdW5sb2NrOwo+ ICsJCQkJZ290byBvdXRfZmlsZTsKPiAgIAkJCX0KPiAgIAo+ICAgCQkJaWYgKCsrZHcgPT0gbWF4 X2R3b3JkcyhvYmopKSB7Cj4gQEAgLTQ4OSwxMSArNDg1LDEwIEBAIHN0YXRpYyBpbnQgaWd0X2N0 eF9leGVjKHZvaWQgKmFyZykKPiAgIAkJCWR3ICs9IHJlbTsKPiAgIAkJfQo+ICAgCj4gLW91dF91 bmxvY2s6Cj4gK291dF9maWxlOgo+ICAgCQl0aHJvdHRsZV9yZWxlYXNlKHRxLCBBUlJBWV9TSVpF KHRxKSk7Cj4gICAJCWlmIChpZ3RfbGl2ZV90ZXN0X2VuZCgmdCkpCj4gICAJCQllcnIgPSAtRUlP Owo+IC0JCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiAgIAkJ bW9ja19maWxlX2ZyZWUoaTkxNSwgZmlsZSk7Cj4gICAJCWlmIChlcnIpCj4gQEAgLTUyOCwyMiAr NTIzLDIwIEBAIHN0YXRpYyBpbnQgaWd0X3NoYXJlZF9jdHhfZXhlYyh2b2lkICphcmcpCj4gICAJ aWYgKElTX0VSUihmaWxlKSkKPiAgIAkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4gICAKPiAtCW11 dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlwYXJlbnQgPSBsaXZl X2NvbnRleHQoaTkxNSwgZmlsZSk7Cj4gICAJaWYgKElTX0VSUihwYXJlbnQpKSB7Cj4gICAJCWVy ciA9IFBUUl9FUlIocGFyZW50KTsKPiAtCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJZ290byBvdXRf ZmlsZTsKPiAgIAl9Cj4gICAKPiAgIAlpZiAoIXBhcmVudC0+dm0pIHsgLyogbm90IGZ1bGwtcHBn dHQ7IG5vdGhpbmcgdG8gc2hhcmUgKi8KPiAgIAkJZXJyID0gMDsKPiAtCQlnb3RvIG91dF91bmxv Y2s7Cj4gKwkJZ290byBvdXRfZmlsZTsKPiAgIAl9Cj4gICAKPiAgIAllcnIgPSBpZ3RfbGl2ZV90 ZXN0X2JlZ2luKCZ0LCBpOTE1LCBfX2Z1bmNfXywgIiIpOwo+ICAgCWlmIChlcnIpCj4gLQkJZ290 byBvdXRfdW5sb2NrOwo+ICsJCWdvdG8gb3V0X2ZpbGU7Cj4gICAKPiAgIAlmb3JfZWFjaF9lbmdp bmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ICAgCQl1bnNpZ25lZCBsb25nIG5jb250ZXh0cywgbmR3 b3JkcywgZHc7Cj4gQEAgLTU4Nyw3ICs1ODAsOCBAQCBzdGF0aWMgaW50IGlndF9zaGFyZWRfY3R4 X2V4ZWModm9pZCAqYXJnKQo+ICAgCQkJCXByX2VycigiRmFpbGVkIHRvIGZpbGwgZHdvcmQgJWx1 IFslbHUvJWx1XSB3aXRoIGdwdSAoJXMpIFtmdWxsLXBwZ3R0PyAlc10sIGVycj0lZFxuIiwKPiAg IAkJCQkgICAgICAgbmR3b3JkcywgZHcsIG1heF9kd29yZHMob2JqKSwKPiAgIAkJCQkgICAgICAg ZW5naW5lLT5uYW1lLAo+IC0JCQkJICAgICAgIHllc25vKCEhY3R4LT52bSksIGVycik7Cj4gKwkJ CQkgICAgICAgeWVzbm8oISFyY3VfYWNjZXNzX3BvaW50ZXIoY3R4LT52bSkpLAo+ICsJCQkJICAg ICAgIGVycik7Cj4gICAJCQkJaW50ZWxfY29udGV4dF9wdXQoY2UpOwo+ICAgCQkJCWtlcm5lbF9j b250ZXh0X2Nsb3NlKGN0eCk7Cj4gICAJCQkJZ290byBvdXRfdGVzdDsKPiBAQCAtNjI2LDE3ICs2 MjAsMTMgQEAgc3RhdGljIGludCBpZ3Rfc2hhcmVkX2N0eF9leGVjKHZvaWQgKmFyZykKPiAgIAkJ CWR3ICs9IHJlbTsKPiAgIAkJfQo+ICAgCj4gLQkJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiAgIAkJaTkxNV9nZW1fZHJhaW5fZnJlZWRfb2JqZWN0cyhpOTE1KTsKPiAt CQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAl9Cj4gICBvdXRfdGVz dDoKPiAgIAl0aHJvdHRsZV9yZWxlYXNlKHRxLCBBUlJBWV9TSVpFKHRxKSk7Cj4gICAJaWYgKGln dF9saXZlX3Rlc3RfZW5kKCZ0KSkKPiAgIAkJZXJyID0gLUVJTzsKPiAtb3V0X3VubG9jazoKPiAt CW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICtvdXRfZmlsZToK PiAgIAltb2NrX2ZpbGVfZnJlZShpOTE1LCBmaWxlKTsKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+ IEBAIC0xMDA4LDggKzk5OCw2IEBAIF9faWd0X2N0eF9zc2V1KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LAo+ICAgCWlmIChmbGFncyAmIFRFU1RfUkVTRVQpCj4gICAJCWlndF9nbG9iYWxf cmVzZXRfbG9jaygmaTkxNS0+Z3QpOwo+ICAgCj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiAtCj4gICAJY3R4ID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+ICAg CWlmIChJU19FUlIoY3R4KSkgewo+ICAgCQlyZXQgPSBQVFJfRVJSKGN0eCk7Cj4gQEAgLTEwNjQs OCArMTA1Miw2IEBAIF9faWd0X2N0eF9zc2V1KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LAo+ICAgCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiAgIAo+ICAgb3V0X3VubG9jazoKPiAt CW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAgCWlmIChmbGFn cyAmIFRFU1RfUkVTRVQpCj4gICAJCWlndF9nbG9iYWxfcmVzZXRfdW5sb2NrKCZpOTE1LT5ndCk7 Cj4gICAKPiBAQCAtMTEyNSwyMyArMTExMSwyNCBAQCBzdGF0aWMgaW50IGlndF9jdHhfcmVhZG9u bHkodm9pZCAqYXJnKQo+ICAgCWlmIChJU19FUlIoZmlsZSkpCj4gICAJCXJldHVybiBQVFJfRVJS KGZpbGUpOwo+ICAgCj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAt Cj4gICAJZXJyID0gaWd0X2xpdmVfdGVzdF9iZWdpbigmdCwgaTkxNSwgX19mdW5jX18sICIiKTsK PiAgIAlpZiAoZXJyKQo+IC0JCWdvdG8gb3V0X3VubG9jazsKPiArCQlnb3RvIG91dF9maWxlOwo+ ICAgCj4gICAJY3R4ID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+ICAgCWlmIChJU19FUlIo Y3R4KSkgewo+ICAgCQllcnIgPSBQVFJfRVJSKGN0eCk7Cj4gLQkJZ290byBvdXRfdW5sb2NrOwo+ ICsJCWdvdG8gb3V0X2ZpbGU7Cj4gICAJfQo+ICAgCj4gLQl2bSA9IGN0eC0+dm0gPzogJmk5MTUt PmdndHQuYWxpYXMtPnZtOwo+ICsJcmN1X3JlYWRfbG9jaygpOwo+ICsJdm0gPSByY3VfZGVyZWZl cmVuY2UoY3R4LT52bSkgPzogJmk5MTUtPmdndHQuYWxpYXMtPnZtOwo+ICAgCWlmICghdm0gfHwg IXZtLT5oYXNfcmVhZF9vbmx5KSB7Cj4gKwkJcmN1X3JlYWRfdW5sb2NrKCk7Cj4gICAJCWVyciA9 IDA7Cj4gLQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCWdvdG8gb3V0X2ZpbGU7Cj4gICAJfQo+ICsJ cmN1X3JlYWRfdW5sb2NrKCk7Cj4gICAKPiAgIAluZHdvcmRzID0gMDsKPiAgIAlkdyA9IDA7Cj4g QEAgLTExNTksNyArMTE0Niw3IEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9yZWFkb25seSh2b2lkICph cmcpCj4gICAJCQkJaWYgKElTX0VSUihvYmopKSB7Cj4gICAJCQkJCWVyciA9IFBUUl9FUlIob2Jq KTsKPiAgIAkJCQkJaTkxNV9nZW1fY29udGV4dF91bmxvY2tfZW5naW5lcyhjdHgpOwo+IC0JCQkJ CWdvdG8gb3V0X3VubG9jazsKPiArCQkJCQlnb3RvIG91dF9maWxlOwo+ICAgCQkJCX0KPiAgIAo+ ICAgCQkJCWlmIChwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykgJiAxKQo+IEBAIC0xMTcwLDE1ICsx MTU3LDE3IEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9yZWFkb25seSh2b2lkICphcmcpCj4gICAJCQlp ZiAoZXJyKSB7Cj4gICAJCQkJcHJfZXJyKCJGYWlsZWQgdG8gZmlsbCBkd29yZCAlbHUgWyVsdS8l bHVdIHdpdGggZ3B1ICglcykgW2Z1bGwtcHBndHQ/ICVzXSwgZXJyPSVkXG4iLAo+ICAgCQkJCSAg ICAgICBuZHdvcmRzLCBkdywgbWF4X2R3b3JkcyhvYmopLAo+IC0JCQkJICAgICAgIGNlLT5lbmdp bmUtPm5hbWUsIHllc25vKCEhY3R4LT52bSksIGVycik7Cj4gKwkJCQkgICAgICAgY2UtPmVuZ2lu ZS0+bmFtZSwKPiArCQkJCSAgICAgICB5ZXNubyghIXJjdV9hY2Nlc3NfcG9pbnRlcihjdHgtPnZt KSksCj4gKwkJCQkgICAgICAgZXJyKTsKPiAgIAkJCQlpOTE1X2dlbV9jb250ZXh0X3VubG9ja19l bmdpbmVzKGN0eCk7Cj4gLQkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJCQlnb3RvIG91dF9maWxl Owo+ICAgCQkJfQo+ICAgCj4gICAJCQllcnIgPSB0aHJvdHRsZShjZSwgdHEsIEFSUkFZX1NJWkUo dHEpKTsKPiAgIAkJCWlmIChlcnIpIHsKPiAgIAkJCQlpOTE1X2dlbV9jb250ZXh0X3VubG9ja19l bmdpbmVzKGN0eCk7Cj4gLQkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJCQlnb3RvIG91dF9maWxl Owo+ICAgCQkJfQo+ICAgCj4gICAJCQlpZiAoKytkdyA9PSBtYXhfZHdvcmRzKG9iaikpIHsKPiBA QCAtMTIxMCwxMSArMTE5OSwxMCBAQCBzdGF0aWMgaW50IGlndF9jdHhfcmVhZG9ubHkodm9pZCAq YXJnKQo+ICAgCQlkdyArPSByZW07Cj4gICAJfQo+ICAgCj4gLW91dF91bmxvY2s6Cj4gK291dF9m aWxlOgo+ICAgCXRocm90dGxlX3JlbGVhc2UodHEsIEFSUkFZX1NJWkUodHEpKTsKPiAgIAlpZiAo aWd0X2xpdmVfdGVzdF9lbmQoJnQpKQo+ICAgCQllcnIgPSAtRUlPOwo+IC0JbXV0ZXhfdW5sb2Nr KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+ICAgCW1vY2tfZmlsZV9mcmVlKGk5MTUs IGZpbGUpOwo+ICAgCXJldHVybiBlcnI7Cj4gQEAgLTEyMjMsNyArMTIxMSw3IEBAIHN0YXRpYyBp bnQgaWd0X2N0eF9yZWFkb25seSh2b2lkICphcmcpCj4gICBzdGF0aWMgaW50IGNoZWNrX3NjcmF0 Y2goc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgdTY0IG9mZnNldCkKPiAgIHsKPiAgIAlz dHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUgPQo+IC0JCV9fZHJtX21tX2ludGVydmFsX2ZpcnN0KCZj dHgtPnZtLT5tbSwKPiArCQlfX2RybV9tbV9pbnRlcnZhbF9maXJzdCgmcmN1X2RlcmVmZXJlbmNl X3Byb3RlY3RlZChjdHgtPnZtLCB0cnVlKS0+bW0sCj4gICAJCQkJCW9mZnNldCwgb2Zmc2V0ICsg c2l6ZW9mKHUzMikgLSAxKTsKPiAgIAlpZiAoIW5vZGUgfHwgbm9kZS0+c3RhcnQgPiBvZmZzZXQp Cj4gICAJCXJldHVybiAwOwo+IEBAIC0xMjczLDcgKzEyNjEsOSBAQCBzdGF0aWMgaW50IHdyaXRl X3RvX3NjcmF0Y2goc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAo+ICAgCWludGVs X2d0X2NoaXBzZXRfZmx1c2goZW5naW5lLT5ndCk7Cj4gICAKPiAtCXZtYSA9IGk5MTVfdm1hX2lu c3RhbmNlKG9iaiwgY3R4LT52bSwgTlVMTCk7Cj4gKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShv YmosCj4gKwkJCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0+dm0sIHRydWUpLAo+ICsJ CQkJTlVMTCk7Cj4gICAJaWYgKElTX0VSUih2bWEpKSB7Cj4gICAJCWVyciA9IFBUUl9FUlIodm1h KTsKPiAgIAkJZ290byBlcnI7Cj4gQEAgLTEzNzIsNyArMTM2Miw5IEBAIHN0YXRpYyBpbnQgcmVh ZF9mcm9tX3NjcmF0Y2goc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgIAo+ICAgCWlu dGVsX2d0X2NoaXBzZXRfZmx1c2goZW5naW5lLT5ndCk7Cj4gICAKPiAtCXZtYSA9IGk5MTVfdm1h X2luc3RhbmNlKG9iaiwgY3R4LT52bSwgTlVMTCk7Cj4gKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5j ZShvYmosCj4gKwkJCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0+dm0sIHRydWUpLAo+ ICsJCQkJTlVMTCk7Cj4gICAJaWYgKElTX0VSUih2bWEpKSB7Cj4gICAJCWVyciA9IFBUUl9FUlIo dm1hKTsKPiAgIAkJZ290byBlcnI7Cj4gQEAgLTE0NjMsMjcgKzE0NTUsMjUgQEAgc3RhdGljIGlu dCBpZ3Rfdm1faXNvbGF0aW9uKHZvaWQgKmFyZykKPiAgIAlpZiAoSVNfRVJSKGZpbGUpKQo+ICAg CQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4gLQo+ICAgCWVyciA9IGlndF9saXZlX3Rlc3RfYmVnaW4oJnQsIGk5MTUs IF9fZnVuY19fLCAiIik7Cj4gICAJaWYgKGVycikKPiAtCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJ Z290byBvdXRfZmlsZTsKPiAgIAo+ICAgCWN0eF9hID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUp Owo+ICAgCWlmIChJU19FUlIoY3R4X2EpKSB7Cj4gICAJCWVyciA9IFBUUl9FUlIoY3R4X2EpOwo+ IC0JCWdvdG8gb3V0X3VubG9jazsKPiArCQlnb3RvIG91dF9maWxlOwo+ICAgCX0KPiAgIAo+ICAg CWN0eF9iID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+ICAgCWlmIChJU19FUlIoY3R4X2Ip KSB7Cj4gICAJCWVyciA9IFBUUl9FUlIoY3R4X2IpOwo+IC0JCWdvdG8gb3V0X3VubG9jazsKPiAr CQlnb3RvIG91dF9maWxlOwo+ICAgCX0KPiAgIAo+ICAgCS8qIFdlIGNhbiBvbmx5IHRlc3Qgdm0g aXNvbGF0aW9uLCBpZiB0aGUgdm0gYXJlIGRpc3RpbmN0ICovCj4gICAJaWYgKGN0eF9hLT52bSA9 PSBjdHhfYi0+dm0pCj4gLQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCWdvdG8gb3V0X2ZpbGU7Cj4g ICAKPiAgIAl2bV90b3RhbCA9IGN0eF9hLT52bS0+dG90YWw7Cj4gICAJR0VNX0JVR19PTihjdHhf Yi0+dm0tPnRvdGFsICE9IHZtX3RvdGFsKTsKPiBAQCAtMTUxMiw3ICsxNTAyLDcgQEAgc3RhdGlj IGludCBpZ3Rfdm1faXNvbGF0aW9uKHZvaWQgKmFyZykKPiAgIAkJCQllcnIgPSByZWFkX2Zyb21f c2NyYXRjaChjdHhfYiwgZW5naW5lLAo+ICAgCQkJCQkJCW9mZnNldCwgJnZhbHVlKTsKPiAgIAkJ CWlmIChlcnIpCj4gLQkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJCQlnb3RvIG91dF9maWxlOwo+ ICAgCj4gICAJCQlpZiAodmFsdWUpIHsKPiAgIAkJCQlwcl9lcnIoIiVzOiBSZWFkICUwOHggZnJv bSBzY3JhdGNoIChvZmZzZXQgMHglMDh4XyUwOHgpLCBhZnRlciAlbHUgcmVhZHMhXG4iLAo+IEBA IC0xNTIxLDcgKzE1MTEsNyBAQCBzdGF0aWMgaW50IGlndF92bV9pc29sYXRpb24odm9pZCAqYXJn KQo+ICAgCQkJCSAgICAgICBsb3dlcl8zMl9iaXRzKG9mZnNldCksCj4gICAJCQkJICAgICAgIHRo aXMpOwo+ICAgCQkJCWVyciA9IC1FSU5WQUw7Cj4gLQkJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJ CQlnb3RvIG91dF9maWxlOwo+ICAgCQkJfQo+ICAgCj4gICAJCQl0aGlzKys7Cj4gQEAgLTE1MzEs MTEgKzE1MjEsOSBAQCBzdGF0aWMgaW50IGlndF92bV9pc29sYXRpb24odm9pZCAqYXJnKQo+ICAg CXByX2luZm8oIkNoZWNrZWQgJWx1IHNjcmF0Y2ggb2Zmc2V0cyBhY3Jvc3MgJWQgZW5naW5lc1xu IiwKPiAgIAkJY291bnQsIFJVTlRJTUVfSU5GTyhpOTE1KS0+bnVtX2VuZ2luZXMpOwo+ICAgCj4g LW91dF91bmxvY2s6Cj4gK291dF9maWxlOgo+ICAgCWlmIChpZ3RfbGl2ZV90ZXN0X2VuZCgmdCkp Cj4gICAJCWVyciA9IC1FSU87Cj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+IC0KPiAgIAltb2NrX2ZpbGVfZnJlZShpOTE1LCBmaWxlKTsKPiAgIAlyZXR1cm4gZXJy Owo+ICAgfQo+IEBAIC0xNTY3LDEzICsxNTU1LDkgQEAgc3RhdGljIGludCBtb2NrX2NvbnRleHRf YmFycmllcih2b2lkICphcmcpCj4gICAJICogYSByZXF1ZXN0OyB1c2VmdWwgZm9yIHJldGlyaW5n IG9sZCBzdGF0ZSBhZnRlciBsb2FkaW5nIG5ldy4KPiAgIAkgKi8KPiAgIAo+IC0JbXV0ZXhfbG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAgCWN0eCA9IG1vY2tfY29udGV4dChp OTE1LCAibW9jayIpOwo+IC0JaWYgKCFjdHgpIHsKPiAtCQllcnIgPSAtRU5PTUVNOwo+IC0JCWdv dG8gdW5sb2NrOwo+IC0JfQo+ICsJaWYgKCFjdHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gICAK PiAgIAljb3VudGVyID0gMDsKPiAgIAllcnIgPSBjb250ZXh0X2JhcnJpZXJfdGFzayhjdHgsIDAs Cj4gQEAgLTE2NDYsOCArMTYzMCw2IEBAIHN0YXRpYyBpbnQgbW9ja19jb250ZXh0X2JhcnJpZXIo dm9pZCAqYXJnKQo+ICAgCj4gICBvdXQ6Cj4gICAJbW9ja19jb250ZXh0X2Nsb3NlKGN0eCk7Cj4g LXVubG9jazoKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJ cmV0dXJuIGVycjsKPiAgICN1bmRlZiBwcl9mbXQKPiAgICNkZWZpbmUgcHJfZm10KHgpIHgKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9tb2NrX2NvbnRl eHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMK PiBpbmRleCBlYmM0NmYwOTg1NjEuLjZlZjg2ZTc5MjNhNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL21vY2tfY29udGV4dC5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+IEBAIC02Nyw3ICs2 Nyw3IEBAIHZvaWQgbW9ja19jb250ZXh0X2Nsb3NlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpj dHgpCj4gICAKPiAgIHZvaWQgbW9ja19pbml0X2NvbnRleHRzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQo+ICAgewo+IC0JaW5pdF9jb250ZXh0cyhpOTE1KTsKPiArCWluaXRfY29udGV4 dHMoJmk5MTUtPmdlbS5jb250ZXh0cyk7Cj4gICB9Cj4gICAKPiAgIHN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICoKPiBAQCAtNzYsOCArNzYsNiBAQCBsaXZlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAgIAlzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4Owo+ICAgCWludCBlcnI7Cj4gICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAljdHggPSBpOTE1X2dlbV9jcmVh dGVfY29udGV4dChpOTE1LCAwKTsKPiAgIAlpZiAoSVNfRVJSKGN0eCkpCj4gICAJCXJldHVybiBj dHg7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHQu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHQuYwo+IGluZGV4IDM1YTQw YzI4MjBhMi4uMTA3ZWIwM2Q2ZGQ0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2NvbnRleHQuYwo+IEBAIC0yMjYsNyArMjI2LDEzIEBAIGludGVsX2NvbnRleHRfaW5pdChzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gICAJa3JlZl9pbml0KCZjZS0+cmVmKTsKPiAgIAo+ICAg CWNlLT5nZW1fY29udGV4dCA9IGN0eDsKPiAtCWNlLT52bSA9IGk5MTVfdm1fZ2V0KGN0eC0+dm0g PzogJmVuZ2luZS0+Z3QtPmdndHQtPnZtKTsKPiArCXJjdV9yZWFkX2xvY2soKTsKPiArCWNlLT52 bSA9IHJjdV9kZXJlZmVyZW5jZShjdHgtPnZtKTsKPiArCWlmIChjZS0+dm0gJiYgIWtyZWZfZ2V0 X3VubGVzc196ZXJvKCZjZS0+dm0tPnJlZikpCj4gKwkJY2UtPnZtID0gTlVMTDsKPiArCWlmICgh Y2UtPnZtKQo+ICsJCWNlLT52bSA9IGk5MTVfdm1fZ2V0KCZlbmdpbmUtPmd0LT5nZ3R0LT52bSk7 Cj4gKwlyY3VfcmVhZF91bmxvY2soKTsKPiAgIAlpZiAoY3R4LT50aW1lbGluZSkKPiAgIAkJY2Ut PnRpbWVsaW5lID0gaW50ZWxfdGltZWxpbmVfZ2V0KGN0eC0+dGltZWxpbmUpOwo+ICAgCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2NvbnRleHQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2NvbnRleHQuYwo+IGluZGV4IDg2Y2ZmYmIw YTljYi4uN2M4MzhhNTdlMTc0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3NlbGZ0ZXN0X2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0 ZXN0X2NvbnRleHQuYwo+IEBAIC0xNTUsMTMgKzE1NSw5IEBAIHN0YXRpYyBpbnQgbGl2ZV9jb250 ZXh0X3NpemUodm9pZCAqYXJnKQo+ICAgCSAqIEhXIHRyaWVzIHRvIHdyaXRlIHBhc3QgdGhlIGVu ZCBvZiBvbmUuCj4gICAJICovCj4gICAKPiAtCW11dGV4X2xvY2soJmd0LT5pOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiAtCj4gICAJZml4bWUgPSBrZXJuZWxfY29udGV4dChndC0+aTkxNSk7Cj4g LQlpZiAoSVNfRVJSKGZpeG1lKSkgewo+IC0JCWVyciA9IFBUUl9FUlIoZml4bWUpOwo+IC0JCWdv dG8gdW5sb2NrOwo+IC0JfQo+ICsJaWYgKElTX0VSUihmaXhtZSkpCj4gKwkJcmV0dXJuIFBUUl9F UlIoZml4bWUpOwo+ICAgCj4gICAJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3QtPmk5MTUsIGlk KSB7Cj4gICAJCXN0cnVjdCB7Cj4gQEAgLTIwMSw4ICsxOTcsNiBAQCBzdGF0aWMgaW50IGxpdmVf Y29udGV4dF9zaXplKHZvaWQgKmFyZykKPiAgIAl9Cj4gICAKPiAgIAlrZXJuZWxfY29udGV4dF9j bG9zZShmaXhtZSk7Cj4gLXVubG9jazoKPiAtCW11dGV4X3VubG9jaygmZ3QtPmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gICAKPiBAQCAtMzA1LDEyICsy OTksMTAgQEAgc3RhdGljIGludCBsaXZlX2FjdGl2ZV9jb250ZXh0KHZvaWQgKmFyZykKPiAgIAlp ZiAoSVNfRVJSKGZpbGUpKQo+ICAgCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKPiAgIAo+IC0JbXV0 ZXhfbG9jaygmZ3QtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlmaXhtZSA9IGxp dmVfY29udGV4dChndC0+aTkxNSwgZmlsZSk7Cj4gICAJaWYgKElTX0VSUihmaXhtZSkpIHsKPiAg IAkJZXJyID0gUFRSX0VSUihmaXhtZSk7Cj4gLQkJZ290byB1bmxvY2s7Cj4gKwkJZ290byBvdXRf ZmlsZTsKPiAgIAl9Cj4gICAKPiAgIAlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndC0+aTkxNSwg aWQpIHsKPiBAQCAtMzIzLDggKzMxNSw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9hY3RpdmVfY29udGV4 dCh2b2lkICphcmcpCj4gICAJCQlicmVhazsKPiAgIAl9Cj4gICAKPiAtdW5sb2NrOgo+IC0JbXV0 ZXhfdW5sb2NrKCZndC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gK291dF9maWxlOgo+ICAg CW1vY2tfZmlsZV9mcmVlKGd0LT5pOTE1LCBmaWxlKTsKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+ IEBAIC00MTgsMTIgKzQwOSwxMCBAQCBzdGF0aWMgaW50IGxpdmVfcmVtb3RlX2NvbnRleHQodm9p ZCAqYXJnKQo+ICAgCWlmIChJU19FUlIoZmlsZSkpCj4gICAJCXJldHVybiBQVFJfRVJSKGZpbGUp Owo+ICAgCj4gLQltdXRleF9sb2NrKCZndC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ ICAgCWZpeG1lID0gbGl2ZV9jb250ZXh0KGd0LT5pOTE1LCBmaWxlKTsKPiAgIAlpZiAoSVNfRVJS KGZpeG1lKSkgewo+ICAgCQllcnIgPSBQVFJfRVJSKGZpeG1lKTsKPiAtCQlnb3RvIHVubG9jazsK PiArCQlnb3RvIG91dF9maWxlOwo+ICAgCX0KPiAgIAo+ICAgCWZvcl9lYWNoX2VuZ2luZShlbmdp bmUsIGd0LT5pOTE1LCBpZCkgewo+IEBAIC00MzYsOCArNDI1LDcgQEAgc3RhdGljIGludCBsaXZl X3JlbW90ZV9jb250ZXh0KHZvaWQgKmFyZykKPiAgIAkJCWJyZWFrOwo+ICAgCX0KPiAgIAo+IC11 bmxvY2s6Cj4gLQltdXRleF91bmxvY2soJmd0LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAr b3V0X2ZpbGU6Cj4gICAJbW9ja19maWxlX2ZyZWUoZ3QtPmk5MTUsIGZpbGUpOwo+ICAgCXJldHVy biBlcnI7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0 ZXN0X2hhbmdjaGVjay5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2No ZWNrLmMKPiBpbmRleCBmMmI1YWIxZTVhMmUuLjFiODM2ZmYwYTc1NiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2hhbmdjaGVjay5jCj4gQEAgLTU4LDkgKzU4LDcg QEAgc3RhdGljIGludCBoYW5nX2luaXQoc3RydWN0IGhhbmcgKmgsIHN0cnVjdCBpbnRlbF9ndCAq Z3QpCj4gICAJbWVtc2V0KGgsIDAsIHNpemVvZigqaCkpOwo+ICAgCWgtPmd0ID0gZ3Q7Cj4gICAK PiAtCW11dGV4X2xvY2soJmd0LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAloLT5jdHgg PSBrZXJuZWxfY29udGV4dChndC0+aTkxNSk7Cj4gLQltdXRleF91bmxvY2soJmd0LT5pOTE1LT5k cm0uc3RydWN0X211dGV4KTsKPiAgIAlpZiAoSVNfRVJSKGgtPmN0eCkpCj4gICAJCXJldHVybiBQ VFJfRVJSKGgtPmN0eCk7Cj4gICAKPiBAQCAtMTMzLDcgKzEzMSw4IEBAIHN0YXRpYyBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICoKPiAgIGhhbmdfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGhhbmcgKmgsIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0ID0gaC0+Z3Q7Cj4gLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9IGgtPmN0eC0+ dm0gPzogJmVuZ2luZS0+Z3QtPmdndHQtPnZtOwo+ICsJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0gPQo+ICsJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaC0+Y3R4LT52bSwgdHJ1ZSkg PzogJmVuZ2luZS0+Z3QtPmdndHQtPnZtOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmo7Cj4gICAJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPSBOVUxMOwo+ICAgCXN0cnVjdCBp OTE1X3ZtYSAqaHdzLCAqdm1hOwo+IEBAIC0zODIsOSArMzgxLDcgQEAgc3RhdGljIGludCBpZ3Rf cmVzZXRfbm9wKHZvaWQgKmFyZykKPiAgIAlpZiAoSVNfRVJSKGZpbGUpKQo+ICAgCQlyZXR1cm4g UFRSX0VSUihmaWxlKTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmZ3QtPmk5MTUtPmRybS5zdHJ1Y3Rf bXV0ZXgpOwo+ICAgCWN0eCA9IGxpdmVfY29udGV4dChndC0+aTkxNSwgZmlsZSk7Cj4gLQltdXRl eF91bmxvY2soJmd0LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlpZiAoSVNfRVJSKGN0 eCkpIHsKPiAgIAkJZXJyID0gUFRSX0VSUihjdHgpOwo+ICAgCQlnb3RvIG91dDsKPiBAQCAtNDU4 LDkgKzQ1NSw3IEBAIHN0YXRpYyBpbnQgaWd0X3Jlc2V0X25vcF9lbmdpbmUodm9pZCAqYXJnKQo+ ICAgCWlmIChJU19FUlIoZmlsZSkpCj4gICAJCXJldHVybiBQVFJfRVJSKGZpbGUpOwo+ICAgCj4g LQltdXRleF9sb2NrKCZndC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJY3R4ID0gbGl2 ZV9jb250ZXh0KGd0LT5pOTE1LCBmaWxlKTsKPiAtCW11dGV4X3VubG9jaygmZ3QtPmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWlmIChJU19FUlIoY3R4KSkgewo+ICAgCQllcnIgPSBQVFJf RVJSKGN0eCk7Cj4gICAJCWdvdG8gb3V0Owo+IEBAIC03MDUsOSArNzAwLDcgQEAgc3RhdGljIGlu dCBhY3RpdmVfZW5naW5lKHZvaWQgKmRhdGEpCj4gICAJCXJldHVybiBQVFJfRVJSKGZpbGUpOwo+ ICAgCj4gICAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgQVJSQVlfU0laRShjdHgpOyBjb3VudCsr KSB7Cj4gLQkJbXV0ZXhfbG9jaygmZW5naW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAg IAkJY3R4W2NvdW50XSA9IGxpdmVfY29udGV4dChlbmdpbmUtPmk5MTUsIGZpbGUpOwo+IC0JCW11 dGV4X3VubG9jaygmZW5naW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAkJaWYgKElT X0VSUihjdHhbY291bnRdKSkgewo+ICAgCQkJZXJyID0gUFRSX0VSUihjdHhbY291bnRdKTsKPiAg IAkJCXdoaWxlICgtLWNvdW50KQo+IEBAIC0xMjk4LDE4ICsxMjkxLDE4IEBAIHN0YXRpYyBpbnQg aWd0X3Jlc2V0X2V2aWN0X3BwZ3R0KHZvaWQgKmFyZykKPiAgIAlpZiAoSVNfRVJSKGZpbGUpKQo+ ICAgCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmZ3QtPmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWN0eCA9IGxpdmVfY29udGV4dChndC0+aTkxNSwgZmls ZSk7Cj4gLQltdXRleF91bmxvY2soJmd0LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlp ZiAoSVNfRVJSKGN0eCkpIHsKPiAgIAkJZXJyID0gUFRSX0VSUihjdHgpOwo+ICAgCQlnb3RvIG91 dDsKPiAgIAl9Cj4gICAKPiAgIAllcnIgPSAwOwo+IC0JaWYgKGN0eC0+dm0pIC8qIGFsaWFzaW5n ID09IGdsb2JhbCBndHQgbG9ja2luZywgY292ZXJlZCBhYm92ZSAqLwo+IC0JCWVyciA9IF9faWd0 X3Jlc2V0X2V2aWN0X3ZtYShndCwgY3R4LT52bSwKPiArCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIo Y3R4LT52bSkpIHsKPiArCQkvKiBhbGlhc2luZyA9PSBnbG9iYWwgZ3R0IGxvY2tpbmcsIGNvdmVy ZWQgYWJvdmUgKi8KPiArCQllcnIgPSBfX2lndF9yZXNldF9ldmljdF92bWEoZ3QsIHJjdV9kZXJl ZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1ZSksCj4gICAJCQkJCSAgICBldmljdF92bWEs IEVYRUNfT0JKRUNUX1dSSVRFKTsKPiArCX0KPiAgIAo+ICAgb3V0Ogo+ICAgCW1vY2tfZmlsZV9m cmVlKGd0LT5pOTE1LCBmaWxlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Qvc2VsZnRlc3RfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMu Ywo+IGluZGV4IDMzMDBhY2Q5MTk5ZC4uZTMzYzJmNjZjNjgzIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKPiBAQCAtMTQ1Myw3ICsxNDUzLDkgQEAgc3RhdGljIGlu dCBzbW9rZV9zdWJtaXQoc3RydWN0IHByZWVtcHRfc21va2UgKnNtb2tlLAo+ICAgCWludCBlcnIg PSAwOwo+ICAgCj4gICAJaWYgKGJhdGNoKSB7Cj4gLQkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uo YmF0Y2gsIGN0eC0+dm0sIE5VTEwpOwo+ICsJCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKGJhdGNo LAo+ICsJCQkJCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1ZSksCj4gKwkJ CQkJTlVMTCk7Cj4gICAJCWlmIChJU19FUlIodm1hKSkKPiAgIAkJCXJldHVybiBQVFJfRVJSKHZt YSk7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rf d29ya2Fyb3VuZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91 bmRzLmMKPiBpbmRleCAwNjM1MWZlZmJiZjMuLmVkNDQzMzNkOWUyMCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF93b3JrYXJvdW5kcy5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+IEBAIC0zMyw2ICsz Myw4IEBAIHN0cnVjdCB3YV9saXN0cyB7Cj4gICAJfSBlbmdpbmVbSTkxNV9OVU1fRU5HSU5FU107 Cj4gICB9Owo+ICAgCj4gKyNkZWZpbmUgY3R4X3ZtKGN0eCkgcmN1X2RlcmVmZXJlbmNlX3Byb3Rl Y3RlZCgoY3R4KS0+dm0sIHRydWUpCj4gKwo+ICAgc3RhdGljIHZvaWQKPiAgIHJlZmVyZW5jZV9s aXN0c19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3Qgd2FfbGlzdHMg Kmxpc3RzKQo+ICAgewo+IEBAIC0zNjIsNyArMzY0LDcgQEAgc3RhdGljIHN0cnVjdCBpOTE1X3Zt YSAqY3JlYXRlX2JhdGNoKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gICAJaWYgKElT X0VSUihvYmopKQo+ICAgCQlyZXR1cm4gRVJSX0NBU1Qob2JqKTsKPiAgIAo+IC0Jdm1hID0gaTkx NV92bWFfaW5zdGFuY2Uob2JqLCBjdHgtPnZtLCBOVUxMKTsKPiArCXZtYSA9IGk5MTVfdm1hX2lu c3RhbmNlKG9iaiwgY3R4X3ZtKGN0eCksIE5VTEwpOwo+ICAgCWlmIChJU19FUlIodm1hKSkgewo+ ICAgCQllcnIgPSBQVFJfRVJSKHZtYSk7Cj4gICAJCWdvdG8gZXJyX29iajsKPiBAQCAtNDY4LDcg KzQ3MCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfZGlydHlfd2hpdGVsaXN0KHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHgsCj4gICAJaW50IGVyciA9IDAsIGksIHY7Cj4gICAJdTMyICpjcywgKnJl c3VsdHM7Cj4gICAKPiAtCXNjcmF0Y2ggPSBjcmVhdGVfc2NyYXRjaChjdHgtPnZtLCAyICogQVJS QVlfU0laRSh2YWx1ZXMpICsgMSk7Cj4gKwlzY3JhdGNoID0gY3JlYXRlX3NjcmF0Y2goY3R4X3Zt KGN0eCksIDIgKiBBUlJBWV9TSVpFKHZhbHVlcykgKyAxKTsKPiAgIAlpZiAoSVNfRVJSKHNjcmF0 Y2gpKQo+ICAgCQlyZXR1cm4gUFRSX0VSUihzY3JhdGNoKTsKPiAgIAo+IEBAIC0xMDE4LDE0ICsx MDIwLDE0IEBAIHN0YXRpYyBpbnQgbGl2ZV9pc29sYXRlZF93aGl0ZWxpc3Qodm9pZCAqYXJnKQo+ ICAgCQkJZ290byBlcnI7Cj4gICAJCX0KPiAgIAo+IC0JCWNsaWVudFtpXS5zY3JhdGNoWzBdID0g Y3JlYXRlX3NjcmF0Y2goYy0+dm0sIDEwMjQpOwo+ICsJCWNsaWVudFtpXS5zY3JhdGNoWzBdID0g Y3JlYXRlX3NjcmF0Y2goY3R4X3ZtKGMpLCAxMDI0KTsKPiAgIAkJaWYgKElTX0VSUihjbGllbnRb aV0uc2NyYXRjaFswXSkpIHsKPiAgIAkJCWVyciA9IFBUUl9FUlIoY2xpZW50W2ldLnNjcmF0Y2hb MF0pOwo+ICAgCQkJa2VybmVsX2NvbnRleHRfY2xvc2UoYyk7Cj4gICAJCQlnb3RvIGVycjsKPiAg IAkJfQo+ICAgCj4gLQkJY2xpZW50W2ldLnNjcmF0Y2hbMV0gPSBjcmVhdGVfc2NyYXRjaChjLT52 bSwgMTAyNCk7Cj4gKwkJY2xpZW50W2ldLnNjcmF0Y2hbMV0gPSBjcmVhdGVfc2NyYXRjaChjdHhf dm0oYyksIDEwMjQpOwo+ICAgCQlpZiAoSVNfRVJSKGNsaWVudFtpXS5zY3JhdGNoWzFdKSkgewo+ ICAgCQkJZXJyID0gUFRSX0VSUihjbGllbnRbaV0uc2NyYXRjaFsxXSk7Cj4gICAJCQlpOTE1X3Zt YV91bnBpbl9hbmRfcmVsZWFzZSgmY2xpZW50W2ldLnNjcmF0Y2hbMF0sIDApOwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMKPiBpbmRleCAwM2Y1NjcwODQ1NDguLmNlNWNmZjAxZjQ0 YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMKPiBAQCAtMzY1LDcgKzM2 NSw4IEBAIHN0YXRpYyB2b2lkIHNldF9jb250ZXh0X3BwZ3R0X2Zyb21fc2hhZG93KHN0cnVjdCBp bnRlbF92Z3B1X3dvcmtsb2FkICp3b3JrbG9hZCwKPiAgIAkJCQkJICBzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4KQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF92Z3B1X21tICptbSA9IHdvcmts b2FkLT5zaGFkb3dfbW07Cj4gLQlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQgPSBpOTE1X3ZtX3Rv X3BwZ3R0KGN0eC0+dm0pOwo+ICsJc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0ID0KPiArCQlpOTE1 X3ZtX3RvX3BwZ3R0KHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LT52bSwgdHJ1ZSkpOwo+ ICAgCWludCBpID0gMDsKPiAgIAo+ICAgCWlmIChtbS0+cHBndHRfbW0ucm9vdF9lbnRyeV90eXBl ID09IEdUVF9UWVBFX1BQR1RUX1JPT1RfTDRfRU5UUlkpIHsKPiBAQCAtMTIzMCwyMCArMTIzMSwx OCBAQCBpbnQgaW50ZWxfdmdwdV9zZXR1cF9zdWJtaXNzaW9uKHN0cnVjdCBpbnRlbF92Z3B1ICp2 Z3B1KQo+ICAgCXN0cnVjdCBpbnRlbF92Z3B1X3N1Ym1pc3Npb24gKnMgPSAmdmdwdS0+c3VibWlz c2lvbjsKPiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gICAJc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiArCXN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dDsKPiAgIAll bnVtIGludGVsX2VuZ2luZV9pZCBpOwo+ICAgCWludCByZXQ7Cj4gICAKPiAtCW11dGV4X2xvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAljdHggPSBpOTE1X2dlbV9jb250ZXh0 X2NyZWF0ZV9rZXJuZWwoaTkxNSwgSTkxNV9QUklPUklUWV9NQVgpOwo+IC0JaWYgKElTX0VSUihj dHgpKSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihjdHgpOwo+IC0JCWdvdG8gb3V0X3VubG9jazsKPiAt CX0KPiArCWlmIChJU19FUlIoY3R4KSkKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgpOwo+ICAgCj4g ICAJaTkxNV9nZW1fY29udGV4dF9zZXRfZm9yY2Vfc2luZ2xlX3N1Ym1pc3Npb24oY3R4KTsKPiAg IAo+IC0JaTkxNV9jb250ZXh0X3BwZ3R0X3Jvb3Rfc2F2ZShzLCBpOTE1X3ZtX3RvX3BwZ3R0KGN0 eC0+dm0pKTsKPiArCXBwZ3R0ID0gaTkxNV92bV90b19wcGd0dChyY3VfZGVyZWZlcmVuY2VfcHJv dGVjdGVkKGN0eC0+dm0sIHRydWUpKTsKPiArCWk5MTVfY29udGV4dF9wcGd0dF9yb290X3NhdmUo cywgcHBndHQpOwo+ICAgCj4gICAJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaSkgewo+ ICAgCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gQEAgLTEyODksMTEgKzEyODgsMTAgQEAg aW50IGludGVsX3ZncHVfc2V0dXBfc3VibWlzc2lvbihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSkK PiAgIAliaXRtYXBfemVybyhzLT50bGJfaGFuZGxlX3BlbmRpbmcsIEk5MTVfTlVNX0VOR0lORVMp Owo+ICAgCj4gICAJaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPiAtCW11dGV4X3VubG9jaygm aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJcmV0dXJuIDA7Cj4gICAKPiAgIG91dF9zaGFk b3dfY3R4Ogo+IC0JaTkxNV9jb250ZXh0X3BwZ3R0X3Jvb3RfcmVzdG9yZShzLCBpOTE1X3ZtX3Rv X3BwZ3R0KGN0eC0+dm0pKTsKPiArCWk5MTVfY29udGV4dF9wcGd0dF9yb290X3Jlc3RvcmUocywg cHBndHQpOwo+ICAgCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGkpIHsKPiAgIAkJaWYg KElTX0VSUihzLT5zaGFkb3dbaV0pKQo+ICAgCQkJYnJlYWs7Cj4gQEAgLTEzMDIsOCArMTMwMCw2 IEBAIGludCBpbnRlbF92Z3B1X3NldHVwX3N1Ym1pc3Npb24oc3RydWN0IGludGVsX3ZncHUgKnZn cHUpCj4gICAJCWludGVsX2NvbnRleHRfcHV0KHMtPnNoYWRvd1tpXSk7Cj4gICAJfQo+ICAgCWk5 MTVfZ2VtX2NvbnRleHRfcHV0KGN0eCk7Cj4gLW91dF91bmxvY2s6Cj4gLQltdXRleF91bmxvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IGluZGV4IDhjYWFhNDQ2NDkwZi4uZDRhN2Nk YTYwNjc5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBAQCAtMzE1LDEy ICszMTUsMTggQEAgc3RhdGljIHZvaWQgcHJpbnRfY29udGV4dF9zdGF0cyhzdHJ1Y3Qgc2VxX2Zp bGUgKm0sCj4gICAJCQkJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICB7Cj4gICAJ c3RydWN0IGZpbGVfc3RhdHMga3N0YXRzID0ge307Cj4gLQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqY3R4Owo+ICsJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwgKmNuOwo+ICAgCj4gLQls aXN0X2Zvcl9lYWNoX2VudHJ5KGN0eCwgJmk5MTUtPmNvbnRleHRzLmxpc3QsIGxpbmspIHsKPiAr CXNwaW5fbG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKGN0eCwgY24sICZpOTE1LT5nZW0uY29udGV4dHMubGlzdCwgbGluaykgewo+ICAg CQlzdHJ1Y3QgaTkxNV9nZW1fZW5naW5lc19pdGVyIGl0Owo+ICAgCQlzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2U7Cj4gICAKPiArCQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZjdHgtPnJlZikp Cj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlzcGluX3VubG9jaygmaTkxNS0+Z2VtLmNvbnRleHRz LmxvY2spOwo+ICsKPiAgIAkJZm9yX2VhY2hfZ2VtX2VuZ2luZShjZSwKPiAgIAkJCQkgICAgaTkx NV9nZW1fY29udGV4dF9sb2NrX2VuZ2luZXMoY3R4KSwgaXQpIHsKPiAgIAkJCWludGVsX2NvbnRl eHRfbG9ja19waW5uZWQoY2UpOwo+IEBAIC0zMzcsNyArMzQzLDkgQEAgc3RhdGljIHZvaWQgcHJp bnRfY29udGV4dF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCj4gICAJCWk5MTVfZ2VtX2NvbnRl eHRfdW5sb2NrX2VuZ2luZXMoY3R4KTsKPiAgIAo+ICAgCQlpZiAoIUlTX0VSUl9PUl9OVUxMKGN0 eC0+ZmlsZV9wcml2KSkgewo+IC0JCQlzdHJ1Y3QgZmlsZV9zdGF0cyBzdGF0cyA9IHsgLnZtID0g Y3R4LT52bSwgfTsKPiArCQkJc3RydWN0IGZpbGVfc3RhdHMgc3RhdHMgPSB7Cj4gKwkJCQkudm0g PSByY3VfYWNjZXNzX3BvaW50ZXIoY3R4LT52bSksCj4gKwkJCX07Cj4gICAJCQlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUgPSBjdHgtPmZpbGVfcHJpdi0+ZmlsZTsKPiAgIAkJCXN0cnVjdCB0YXNrX3N0 cnVjdCAqdGFzazsKPiAgIAkJCWNoYXIgbmFtZVs4MF07Cj4gQEAgLTM1NCw3ICszNjIsMTIgQEAg c3RhdGljIHZvaWQgcHJpbnRfY29udGV4dF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCj4gICAK PiAgIAkJCXByaW50X2ZpbGVfc3RhdHMobSwgbmFtZSwgc3RhdHMpOwo+ICAgCQl9Cj4gKwo+ICsJ CXNwaW5fbG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+ICsJCWxpc3Rfc2FmZV9yZXNl dF9uZXh0KGN0eCwgY24sIGxpbmspOwo+ICsJCWk5MTVfZ2VtX2NvbnRleHRfcHV0KGN0eCk7Cj4g ICAJfQo+ICsJc3Bpbl91bmxvY2soJmk5MTUtPmdlbS5jb250ZXh0cy5sb2NrKTsKPiAgIAo+ICAg CXByaW50X2ZpbGVfc3RhdHMobSwgIltrXWNvbnRleHRzIiwga3N0YXRzKTsKPiAgIH0KPiBAQCAt MzYyLDcgKzM3NSw2IEBAIHN0YXRpYyB2b2lkIHByaW50X2NvbnRleHRfc3RhdHMoc3RydWN0IHNl cV9maWxlICptLAo+ICAgc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfaW5mbyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7Cj4gLQlpbnQgcmV0Owo+ICAgCj4gICAJ c2VxX3ByaW50ZihtLCAiJXUgc2hyaW5rYWJsZSBbJXUgZnJlZV0gb2JqZWN0cywgJWxsdSBieXRl c1xuIiwKPiAgIAkJICAgaTkxNS0+bW0uc2hyaW5rX2NvdW50LAo+IEBAIC0zNzEsMTIgKzM4Myw3 IEBAIHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2 b2lkICpkYXRhKQo+ICAgCj4gICAJc2VxX3B1dGMobSwgJ1xuJyk7Cj4gICAKPiAtCXJldCA9IG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAo cmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ICAgCXByaW50X2NvbnRleHRfc3RhdHMobSwgaTkx NSk7Cj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gICAJ cmV0dXJuIDA7Cj4gICB9Cj4gQEAgLTE0OTAsMTkgKzE0OTcsMTkgQEAgc3RhdGljIHZvaWQgZGVz Y3JpYmVfY3R4X3Jpbmcoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmlu ZykKPiAgIAo+ICAgc3RhdGljIGludCBpOTE1X2NvbnRleHRfc3RhdHVzKHN0cnVjdCBzZXFfZmls ZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOwo+IC0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9ICZkZXZfcHJpdi0+ZHJtOwo+IC0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsK PiAtCWludCByZXQ7Cj4gLQo+IC0JcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYt PnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKPiArCXN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsICpjbjsKPiAgIAo+IC0JbGlzdF9mb3JfZWFjaF9l bnRyeShjdHgsICZkZXZfcHJpdi0+Y29udGV4dHMubGlzdCwgbGluaykgewo+ICsJc3Bpbl9sb2Nr KCZpOTE1LT5nZW0uY29udGV4dHMubG9jayk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo Y3R4LCBjbiwgJmk5MTUtPmdlbS5jb250ZXh0cy5saXN0LCBsaW5rKSB7Cj4gICAJCXN0cnVjdCBp OTE1X2dlbV9lbmdpbmVzX2l0ZXIgaXQ7Cj4gICAJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsK PiAgIAo+ICsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmN0eC0+cmVmKSkKPiArCQkJY29u dGludWU7Cj4gKwo+ICsJCXNwaW5fdW5sb2NrKCZpOTE1LT5nZW0uY29udGV4dHMubG9jayk7Cj4g Kwo+ICAgCQlzZXFfcHV0cyhtLCAiSFcgY29udGV4dCAiKTsKPiAgIAkJaWYgKGN0eC0+cGlkKSB7 Cj4gICAJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Cj4gQEAgLTE1MzcsOSArMTU0NCwxMiBA QCBzdGF0aWMgaW50IGk5MTVfY29udGV4dF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICp1bnVzZWQpCj4gICAJCWk5MTVfZ2VtX2NvbnRleHRfdW5sb2NrX2VuZ2luZXMoY3R4KTsKPiAg IAo+ICAgCQlzZXFfcHV0YyhtLCAnXG4nKTsKPiAtCX0KPiAgIAo+IC0JbXV0ZXhfdW5sb2NrKCZk ZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwkJc3Bpbl9sb2NrKCZpOTE1LT5nZW0uY29udGV4dHMubG9j ayk7Cj4gKwkJbGlzdF9zYWZlX3Jlc2V0X25leHQoY3R4LCBjbiwgbGluayk7Cj4gKwkJaTkxNV9n ZW1fY29udGV4dF9wdXQoY3R4KTsKPiArCX0KPiArCXNwaW5fdW5sb2NrKCZpOTE1LT5nZW0uY29u dGV4dHMubG9jayk7Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmMKPiBpbmRleCA4Y2FjNjEyNGQxNmEuLmE4ZGRhYzIyZDYzMyAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYwo+IEBAIC0xNjg1LDEwICsxNjg1LDggQEAgc3RhdGljIHZvaWQgaTkxNV9k cml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYg PSBmaWxlLT5kcml2ZXJfcHJpdjsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0 ZXgpOwo+ICAgCWk5MTVfZ2VtX2NvbnRleHRfY2xvc2UoZmlsZSk7Cj4gICAJaTkxNV9nZW1fcmVs ZWFzZShkZXYsIGZpbGUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4g ICAKPiAgIAlrZnJlZV9yY3UoZmlsZV9wcml2LCByY3UpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gaW5kZXggYWQ3ZWQ3ZjcyZGE4Li4yM2YzMTExNzJlNzUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTU0MywyNSArMTU0Myw2IEBAIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlIHsKPiAgIAlpbnQgYXVkaW9fcG93ZXJfcmVmY291bnQ7Cj4gICAJdTMyIGF1ZGlvX2Zy ZXFfY250cmw7Cj4gICAKPiAtCXN0cnVjdCB7Cj4gLQkJc3RydWN0IG11dGV4IG11dGV4Owo+IC0J CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiAtCQlzdHJ1Y3QgbGxpc3RfaGVhZCBmcmVlX2xpc3Q7 Cj4gLQkJc3RydWN0IHdvcmtfc3RydWN0IGZyZWVfd29yazsKPiAtCj4gLQkJLyogVGhlIGh3IHdh bnRzIHRvIGhhdmUgYSBzdGFibGUgY29udGV4dCBpZGVudGlmaWVyIGZvciB0aGUKPiAtCQkgKiBs aWZldGltZSBvZiB0aGUgY29udGV4dCAoZm9yIE9BLCBQQVNJRCwgZmF1bHRzLCBldGMpLgo+IC0J CSAqIFRoaXMgaXMgbGltaXRlZCBpbiBleGVjbGlzdHMgdG8gMjEgYml0cy4KPiAtCQkgKi8KPiAt CQlzdHJ1Y3QgaWRhIGh3X2lkYTsKPiAtI2RlZmluZSBNQVhfQ09OVEVYVF9IV19JRCAoMTw8MjEp IC8qIGV4Y2x1c2l2ZSAqLwo+IC0jZGVmaW5lIE1BWF9HVUNfQ09OVEVYVF9IV19JRCAoMSA8PCAy MCkgLyogZXhjbHVzaXZlICovCj4gLSNkZWZpbmUgR0VOMTFfTUFYX0NPTlRFWFRfSFdfSUQgKDE8 PDExKSAvKiBleGNsdXNpdmUgKi8KPiAtLyogaW4gR2VuMTIgSUQgMHg3RkYgaXMgcmVzZXJ2ZWQg dG8gaW5kaWNhdGUgaWRsZSAqLwo+IC0jZGVmaW5lIEdFTjEyX01BWF9DT05URVhUX0hXX0lECShH RU4xMV9NQVhfQ09OVEVYVF9IV19JRCAtIDEpCj4gLQkJc3RydWN0IGxpc3RfaGVhZCBod19pZF9s aXN0OwoKVGhlc2UgYml0cy4KCj4gLQl9IGNvbnRleHRzOwo+IC0KPiAgIAl1MzIgZmRpX3J4X2Nv bmZpZzsKPiAgIAo+ICAgCS8qIFNoYWRvdyBmb3IgRElTUExBWV9QSFlfQ09OVFJPTCB3aGljaCBj YW4ndCBiZSBzYWZlbHkgcmVhZCAqLwo+IEBAIC0xNzE3LDYgKzE2OTgsMTQgQEAgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgewo+ICAgCj4gICAJc3RydWN0IHsKPiAgIAkJc3RydWN0IG5vdGlmaWVy X2Jsb2NrIHBtX25vdGlmaWVyOwo+ICsKPiArCQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dHMgewo+ ICsJCQlzcGlubG9ja190IGxvY2s7IC8qIGxvY2tzIGxpc3QgKi8KPiArCQkJc3RydWN0IGxpc3Rf aGVhZCBsaXN0Owo+ICsKPiArCQkJc3RydWN0IGxsaXN0X2hlYWQgZnJlZV9saXN0Owo+ICsJCQlz dHJ1Y3Qgd29ya19zdHJ1Y3QgZnJlZV93b3JrOwo+ICsJCX0gY29udGV4dHM7Cj4gICAJfSBnZW07 Cj4gICAKPiAgIAkvKiBGb3IgaTk0NWdtIHZibGFuayBpcnEgdnMuIEMzIHdvcmthcm91bmQgKi8K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCA5YzI4Nzc0NDE1NDAuLjg4MTRkYjcwMjNk YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0xMjYzLDcgKzEyNjMsNyBAQCBp bnQgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAJ CWdvdG8gZXJyX3VubG9jazsKPiAgIAl9Cj4gICAKPiAtCXJldCA9IGk5MTVfZ2VtX2NvbnRleHRz X2luaXQoZGV2X3ByaXYpOwo+ICsJcmV0ID0gaTkxNV9nZW1faW5pdF9jb250ZXh0cyhkZXZfcHJp dik7Cj4gICAJaWYgKHJldCkgewo+ICAgCQlHRU1fQlVHX09OKHJldCA9PSAtRUlPKTsKPiAgIAkJ Z290byBlcnJfc2NyYXRjaDsKPiBAQCAtMTM0NSw3ICsxMzQ1LDcgQEAgaW50IGk5MTVfZ2VtX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCX0KPiAgIGVycl9jb250 ZXh0Ogo+ICAgCWlmIChyZXQgIT0gLUVJTykKPiAtCQlpOTE1X2dlbV9jb250ZXh0c19maW5pKGRl dl9wcml2KTsKPiArCQlpOTE1X2dlbV9kcml2ZXJfcmVsZWFzZV9fY29udGV4dHMoZGV2X3ByaXYp Owo+ICAgZXJyX3NjcmF0Y2g6Cj4gICAJaW50ZWxfZ3RfZHJpdmVyX3JlbGVhc2UoJmRldl9wcml2 LT5ndCk7Cj4gICBlcnJfdW5sb2NrOgo+IEBAIC0xNDEzLDExICsxNDEzLDkgQEAgdm9pZCBpOTE1 X2dlbV9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAg IAo+ICAgdm9pZCBpOTE1X2dlbV9kcml2ZXJfcmVsZWFzZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gICB7Cj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gICAJaW50ZWxfZW5naW5lc19jbGVhbnVwKGRldl9wcml2KTsKPiAtCWk5MTVfZ2Vt X2NvbnRleHRzX2ZpbmkoZGV2X3ByaXYpOwo+ICsJaTkxNV9nZW1fZHJpdmVyX3JlbGVhc2VfX2Nv bnRleHRzKGRldl9wcml2KTsKPiAgIAlpbnRlbF9ndF9kcml2ZXJfcmVsZWFzZSgmZGV2X3ByaXYt Pmd0KTsKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAg Cj4gICAJaW50ZWxfd2FfbGlzdF9mcmVlKCZkZXZfcHJpdi0+Z3Rfd2FfbGlzdCk7Cj4gICAKPiBA QCAtMTQyNyw3ICsxNDI1LDcgQEAgdm9pZCBpOTE1X2dlbV9kcml2ZXJfcmVsZWFzZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAKPiAgIAlpOTE1X2dlbV9kcmFpbl9mcmVl ZF9vYmplY3RzKGRldl9wcml2KTsKPiAgIAo+IC0JV0FSTl9PTighbGlzdF9lbXB0eSgmZGV2X3By aXYtPmNvbnRleHRzLmxpc3QpKTsKPiArCVdBUk5fT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5n ZW0uY29udGV4dHMubGlzdCkpOwo+ICAgfQo+ICAgCj4gICB2b2lkIGk5MTVfZ2VtX2luaXRfbW1p byhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuYwo+IGluZGV4IDBkMDQwNTE3Nzg3Yi4uZGIzMmUwZmU3OGIxIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBAQCAtMTM2Niw3ICsxMzY2LDkgQEAgc3RhdGljIGlu dCBnZW44X2luaXRfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgIAlp ZiAodm0tPmhhc19yZWFkX29ubHkgJiYKPiAgIAkgICAgdm0tPmk5MTUtPmtlcm5lbF9jb250ZXh0 ICYmCj4gICAJICAgIHZtLT5pOTE1LT5rZXJuZWxfY29udGV4dC0+dm0pIHsKPiAtCQlzdHJ1Y3Qg aTkxNV9hZGRyZXNzX3NwYWNlICpjbG9uZSA9IHZtLT5pOTE1LT5rZXJuZWxfY29udGV4dC0+dm07 Cj4gKwkJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqY2xvbmUgPQo+ICsJCQlyY3VfZGVyZWZl cmVuY2VfcHJvdGVjdGVkKHZtLT5pOTE1LT5rZXJuZWxfY29udGV4dC0+dm0sCj4gKwkJCQkJCSAg dHJ1ZSk7CgpXaGF0IGlzIHRoZSBwcm90ZWN0aW9uIGhlcmU/Cgo+ICAgCj4gICAJCUdFTV9CVUdf T04oIWNsb25lLT5oYXNfcmVhZF9vbmx5KTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5j Cj4gaW5kZXggZDM2YmEyNDhkNDM4Li5iZmU2ZTliNmQ3MWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3BlcmYuYwo+IEBAIC0xODUzLDggKzE4NTMsOCBAQCBzdGF0aWMgaW50IGdlbjhfY29uZmln dXJlX2FsbF9jb250ZXh0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCX07 Cj4gICAjdW5kZWYgY3R4X2ZsZXhldU4KPiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7Cj4gLQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+IC0JaW50IGk7Cj4gKwlzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCAqY247Cj4gKwlpbnQgaSwgZXJyOwo+ICAgCj4gICAJ Zm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykKPiAgIAkJcmVnc1tpXS52YWx1 ZSA9IG9hX2NvbmZpZ19mbGV4X3JlZyhvYV9jb25maWcsIHJlZ3NbaV0ucmVnKTsKPiBAQCAtMTg3 NywxNiArMTg3NywyNyBAQCBzdGF0aWMgaW50IGdlbjhfY29uZmlndXJlX2FsbF9jb250ZXh0cyhz dHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCSAqIGNvbnRleHQuIENvbnRleHRz IGlkbGUgYXQgdGhlIHRpbWUgb2YgcmVjb25maWd1cmF0aW9uIGFyZSBub3QKPiAgIAkgKiB0cmFw cGVkIGJlaGluZCB0aGUgYmFycmllci4KPiAgIAkgKi8KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnko Y3R4LCAmaTkxNS0+Y29udGV4dHMubGlzdCwgbGluaykgewo+IC0JCWludCBlcnI7Cj4gLQo+ICsJ c3Bpbl9sb2NrKCZpOTE1LT5nZW0uY29udGV4dHMubG9jayk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoY3R4LCBjbiwgJmk5MTUtPmdlbS5jb250ZXh0cy5saXN0LCBsaW5rKSB7Cj4gICAJ CWlmIChjdHggPT0gaTkxNS0+a2VybmVsX2NvbnRleHQpCj4gICAJCQljb250aW51ZTsKPiAgIAo+ ICsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmN0eC0+cmVmKSkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCXNwaW5fdW5sb2NrKCZpOTE1LT5nZW0uY29udGV4dHMubG9jayk7Cj4gKwo+ICAg CQllcnIgPSBnZW44X2NvbmZpZ3VyZV9jb250ZXh0KGN0eCwgcmVncywgQVJSQVlfU0laRShyZWdz KSk7Cj4gLQkJaWYgKGVycikKPiArCQlpZiAoZXJyKSB7Cj4gKwkJCWk5MTVfZ2VtX2NvbnRleHRf cHV0KGN0eCk7Cj4gICAJCQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCj4gKwkJc3Bpbl9sb2NrKCZp OTE1LT5nZW0uY29udGV4dHMubG9jayk7Cj4gKwkJbGlzdF9zYWZlX3Jlc2V0X25leHQoY3R4LCBj biwgbGluayk7Cj4gKwkJaTkxNV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPiAgIAl9Cj4gKwlzcGlu X3VubG9jaygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+ICAgCj4gICAJLyoKPiAgIAkgKiBB ZnRlciB1cGRhdGluZyBhbGwgb3RoZXIgY29udGV4dHMsIHdlIG5lZWQgdG8gbW9kaWZ5IG91cnNl bHZlcy4KPiBAQCAtMTg5NSw3ICsxOTA2LDYgQEAgc3RhdGljIGludCBnZW44X2NvbmZpZ3VyZV9h bGxfY29udGV4dHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAgIAkgKi8KPiAg IAlmb3JfZWFjaF91YWJpX2VuZ2luZShlbmdpbmUsIGk5MTUpIHsKPiAgIAkJc3RydWN0IGludGVs X2NvbnRleHQgKmNlID0gZW5naW5lLT5rZXJuZWxfY29udGV4dDsKPiAtCQlpbnQgZXJyOwo+ICAg Cj4gICAJCWlmIChlbmdpbmUtPmNsYXNzICE9IFJFTkRFUl9DTEFTUykKPiAgIAkJCWNvbnRpbnVl Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiBpbmRleCA2Yjg4ZDkzNDkyN2EuLjU4NTgw OGMyZWU4NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiBAQCAtMTQ0LDkgKzE0 NCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lZGlhX3JjNl9hdHRy X2dyb3VwID0gewo+ICAgfTsKPiAgICNlbmRpZgo+ICAgCj4gLXN0YXRpYyBpbnQgbDNfYWNjZXNz X3ZhbGlkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgbG9mZl90IG9mZnNldCkK PiArc3RhdGljIGludCBsM19hY2Nlc3NfdmFsaWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUsIGxvZmZfdCBvZmZzZXQpCj4gICB7Cj4gLQlpZiAoIUhBU19MM19EUEYoZGV2X3ByaXYpKQo+ ICsJaWYgKCFIQVNfTDNfRFBGKGk5MTUpKQo+ICAgCQlyZXR1cm4gLUVQRVJNOwo+ICAgCj4gICAJ aWYgKG9mZnNldCAlIDQgIT0gMCkKPiBAQCAtMTY0LDMxICsxNjQsMjQgQEAgaTkxNV9sM19yZWFk KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKPiAgIAkgICAgIGxvZmZf dCBvZmZzZXQsIHNpemVfdCBjb3VudCkKPiAgIHsKPiAgIAlzdHJ1Y3QgZGV2aWNlICprZGV2ID0g a29ial90b19kZXYoa29iaik7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g JmRldl9wcml2LT5kcm07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGtkZXZf bWlub3JfdG9faTkxNShrZGV2KTsKPiAgIAlpbnQgc2xpY2UgPSAoaW50KSh1aW50cHRyX3QpYXR0 ci0+cHJpdmF0ZTsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQljb3VudCA9IHJvdW5kX2Rvd24oY291 bnQsIDQpOwo+IC0KPiAtCXJldCA9IGwzX2FjY2Vzc192YWxpZChkZXZfcHJpdiwgb2Zmc2V0KTsK PiArCXJldCA9IGwzX2FjY2Vzc192YWxpZChpOTE1LCBvZmZzZXQpOwo+ICAgCWlmIChyZXQpCj4g ICAJCXJldHVybiByZXQ7Cj4gICAKPiArCWNvdW50ID0gcm91bmRfZG93bihjb3VudCwgNCk7Cj4g ICAJY291bnQgPSBtaW5fdChzaXplX3QsIEdFTjdfTDNMT0dfU0laRSAtIG9mZnNldCwgY291bnQp Owo+ICsJbWVtc2V0KGJ1ZiwgMCwgY291bnQpOwo+ICAgCj4gLQlyZXQgPSBpOTE1X211dGV4X2xv Y2tfaW50ZXJydXB0aWJsZShkZXYpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0K PiAtCWlmIChkZXZfcHJpdi0+bDNfcGFyaXR5LnJlbWFwX2luZm9bc2xpY2VdKQo+ICsJc3Bpbl9s b2NrKCZpOTE1LT5nZW0uY29udGV4dHMubG9jayk7Cj4gKwlpZiAoaTkxNS0+bDNfcGFyaXR5LnJl bWFwX2luZm9bc2xpY2VdKQo+ICAgCQltZW1jcHkoYnVmLAo+IC0JCSAgICAgICBkZXZfcHJpdi0+ bDNfcGFyaXR5LnJlbWFwX2luZm9bc2xpY2VdICsgKG9mZnNldC80KSwKPiArCQkgICAgICAgaTkx NS0+bDNfcGFyaXR5LnJlbWFwX2luZm9bc2xpY2VdICsgb2Zmc2V0IC8gNCwKPiAgIAkJICAgICAg IGNvdW50KTsKPiAtCWVsc2UKPiAtCQltZW1zZXQoYnVmLCAwLCBjb3VudCk7Cj4gLQo+IC0JbXV0 ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwlzcGluX3VubG9jaygmaTkxNS0+Z2Vt LmNvbnRleHRzLmxvY2spOwo+ICAgCj4gICAJcmV0dXJuIGNvdW50Owo+ICAgfQo+IEBAIC0xOTks NDYgKzE5Miw0NiBAQCBpOTE1X2wzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29i amVjdCAqa29iaiwKPiAgIAkgICAgICBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCj4gICB7 Cj4gICAJc3RydWN0IGRldmljZSAqa2RldiA9IGtvYmpfdG9fZGV2KGtvYmopOwo+IC0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwo+ IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gICAJc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiAgIAlpbnQgc2xpY2UgPSAoaW50KSh1aW50cHRy X3QpYXR0ci0+cHJpdmF0ZTsKPiAtCXUzMiAqKnJlbWFwX2luZm87Cj4gKwl1MzIgKnJlbWFwX2lu Zm8sICpmcmVlbWUgPSBOVUxMOwo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXJldCA9IGwzX2FjY2Vz c192YWxpZChkZXZfcHJpdiwgb2Zmc2V0KTsKPiArCXJldCA9IGwzX2FjY2Vzc192YWxpZChpOTE1 LCBvZmZzZXQpOwo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7Cj4gICAKPiAtCXJldCA9 IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7Cj4gLQlpZiAocmV0KQo+IC0JCXJl dHVybiByZXQ7Cj4gKwlyZW1hcF9pbmZvID0ga3phbGxvYyhHRU43X0wzTE9HX1NJWkUsIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFyZW1hcF9pbmZvKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICAgCj4g LQlyZW1hcF9pbmZvID0gJmRldl9wcml2LT5sM19wYXJpdHkucmVtYXBfaW5mb1tzbGljZV07Cj4g LQlpZiAoISpyZW1hcF9pbmZvKSB7Cj4gLQkJKnJlbWFwX2luZm8gPSBremFsbG9jKEdFTjdfTDNM T0dfU0laRSwgR0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCEqcmVtYXBfaW5mbykgewo+IC0JCQlyZXQg PSAtRU5PTUVNOwo+IC0JCQlnb3RvIG91dDsKPiAtCQl9Cj4gKwlzcGluX2xvY2soJmk5MTUtPmdl bS5jb250ZXh0cy5sb2NrKTsKPiArCj4gKwlpZiAoaTkxNS0+bDNfcGFyaXR5LnJlbWFwX2luZm9b c2xpY2VdKSB7Cj4gKwkJZnJlZW1lID0gcmVtYXBfaW5mbzsKPiArCQlyZW1hcF9pbmZvID0gaTkx NS0+bDNfcGFyaXR5LnJlbWFwX2luZm9bc2xpY2VdOwo+ICsJfSBlbHNlIHsKPiArCQlpOTE1LT5s M19wYXJpdHkucmVtYXBfaW5mb1tzbGljZV0gPSByZW1hcF9pbmZvOwo+ICAgCX0KPiAgIAo+IC0J LyogVE9ETzogSWRlYWxseSB3ZSByZWFsbHkgd2FudCBhIEdQVSByZXNldCBoZXJlIHRvIG1ha2Ug c3VyZSBlcnJvcnMKPiAtCSAqIGFyZW4ndCBwcm9wYWdhdGVkLiBTaW5jZSBJIGNhbm5vdCBmaW5k IGEgc3RhYmxlIHdheSB0byByZXNldCB0aGUgR1BVCj4gLQkgKiBhdCB0aGlzIHBvaW50IGl0IGlz IGxlZnQgYXMgYSBUT0RPLgo+IC0JKi8KPiAtCW1lbWNweSgqcmVtYXBfaW5mbyArIChvZmZzZXQv NCksIGJ1ZiwgY291bnQpOwo+ICsJY291bnQgPSByb3VuZF9kb3duKGNvdW50LCA0KTsKCldoZXJl IHdhcyB0aGlzIHJvdW5kX2Rvd24gYmVmb3JlLCBjYW4ndCBzZWUgaXQhCgo+ICsJbWVtY3B5KHJl bWFwX2luZm8gKyBvZmZzZXQgLyA0LCBidWYsIGNvdW50KTsKPiAgIAo+ICAgCS8qIE5COiBXZSBk ZWZlciB0aGUgcmVtYXBwaW5nIHVudGlsIHdlIHN3aXRjaCB0byB0aGUgY29udGV4dCAqLwo+IC0J bGlzdF9mb3JfZWFjaF9lbnRyeShjdHgsICZkZXZfcHJpdi0+Y29udGV4dHMubGlzdCwgbGluaykK PiAtCQljdHgtPnJlbWFwX3NsaWNlIHw9ICgxPDxzbGljZSk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGN0eCwgJmk5MTUtPmdlbS5jb250ZXh0cy5saXN0LCBsaW5rKQo+ICsJCWN0eC0+cmVtYXBf c2xpY2UgfD0gQklUKHNsaWNlKTsKPiAgIAo+IC0JcmV0ID0gY291bnQ7Cj4gKwlzcGluX3VubG9j aygmaTkxNS0+Z2VtLmNvbnRleHRzLmxvY2spOwo+ICsJa2ZyZWUoZnJlZW1lKTsKPiAgIAo+IC1v dXQ6Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCS8qCj4gKwkgKiBU T0RPOiBJZGVhbGx5IHdlIHJlYWxseSB3YW50IGEgR1BVIHJlc2V0IGhlcmUgdG8gbWFrZSBzdXJl IGVycm9ycwo+ICsJICogYXJlbid0IHByb3BhZ2F0ZWQuIFNpbmNlIEkgY2Fubm90IGZpbmQgYSBz dGFibGUgd2F5IHRvIHJlc2V0IHRoZSBHUFUKPiArCSAqIGF0IHRoaXMgcG9pbnQgaXQgaXMgbGVm dCBhcyBhIFRPRE8uCj4gKwkgKi8KPiAgIAo+IC0JcmV0dXJuIHJldDsKPiArCXJldHVybiBjb3Vu dDsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlIGRwZl9h dHRycyA9IHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCj4gaW5kZXggMWYyY2Y2Y2ZhZmI1 Li43ZWY3YTFlMTY2NGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90 cmFjZS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCj4gQEAgLTk1 Miw3ICs5NTIsNyBAQCBERUNMQVJFX0VWRU5UX0NMQVNTKGk5MTVfY29udGV4dCwKPiAgIAlUUF9m YXN0X2Fzc2lnbigKPiAgIAkJCV9fZW50cnktPmRldiA9IGN0eC0+aTkxNS0+ZHJtLnByaW1hcnkt PmluZGV4Owo+ICAgCQkJX19lbnRyeS0+Y3R4ID0gY3R4Owo+IC0JCQlfX2VudHJ5LT52bSA9IGN0 eC0+dm07Cj4gKwkJCV9fZW50cnktPnZtID0gcmN1X2FjY2Vzc19wb2ludGVyKGN0eC0+dm0pOwo+ ICAgCSksCj4gICAKPiAgIAlUUF9wcmludGsoImRldj0ldSwgY3R4PSVwLCBjdHhfdm09JXAiLAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbS5jCj4gaW5kZXggMDM0NmMz ZTViNmI2Li5iZmE0MGE1YjZkOTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9nZW0uYwo+IEBAIC0xMzgsMTEgKzEzOCw5IEBAIHN0YXRpYyBpbnQgaWd0X2dlbV9z dXNwZW5kKHZvaWQgKmFyZykKPiAgIAkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4gICAKPiAgIAll cnIgPSAtRU5PTUVNOwo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g ICAJY3R4ID0gbGl2ZV9jb250ZXh0KGk5MTUsIGZpbGUpOwo+ICAgCWlmICghSVNfRVJSKGN0eCkp Cj4gICAJCWVyciA9IHN3aXRjaF90b19jb250ZXh0KGk5MTUsIGN0eCk7Cj4gLQltdXRleF91bmxv Y2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWlmIChlcnIpCj4gICAJCWdvdG8gb3V0 Owo+ICAgCj4gQEAgLTE1Nyw5ICsxNTUsNyBAQCBzdGF0aWMgaW50IGlndF9nZW1fc3VzcGVuZCh2 b2lkICphcmcpCj4gICAKPiAgIAlwbV9yZXN1bWUoaTkxNSk7Cj4gICAKPiAtCW11dGV4X2xvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWVyciA9IHN3aXRjaF90b19jb250ZXh0KGk5 MTUsIGN0eCk7Cj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAg b3V0Ogo+ICAgCW1vY2tfZmlsZV9mcmVlKGk5MTUsIGZpbGUpOwo+ICAgCXJldHVybiBlcnI7Cj4g QEAgLTE3NywxMSArMTczLDkgQEAgc3RhdGljIGludCBpZ3RfZ2VtX2hpYmVybmF0ZSh2b2lkICph cmcpCj4gICAJCXJldHVybiBQVFJfRVJSKGZpbGUpOwo+ICAgCj4gICAJZXJyID0gLUVOT01FTTsK PiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWN0eCA9IGxpdmVf Y29udGV4dChpOTE1LCBmaWxlKTsKPiAgIAlpZiAoIUlTX0VSUihjdHgpKQo+ICAgCQllcnIgPSBz d2l0Y2hfdG9fY29udGV4dChpOTE1LCBjdHgpOwo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAgIAlpZiAoZXJyKQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IEBAIC0x OTYsOSArMTkwLDcgQEAgc3RhdGljIGludCBpZ3RfZ2VtX2hpYmVybmF0ZSh2b2lkICphcmcpCj4g ICAKPiAgIAlwbV9yZXN1bWUoaTkxNSk7Cj4gICAKPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+ICAgCWVyciA9IHN3aXRjaF90b19jb250ZXh0KGk5MTUsIGN0eCk7Cj4g LQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgb3V0Ogo+ICAgCW1v Y2tfZmlsZV9mcmVlKGk5MTUsIGZpbGUpOwo+ICAgCXJldHVybiBlcnI7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2V2aWN0LmMKPiBpbmRleCBmMzlmMDI4 MmU3OGMuLjBhZjlhNThkMDExZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9nZW1fZXZpY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jCj4gQEAgLTQ3Myw3ICs0NzMsNiBAQCBzdGF0aWMgaW50 IGlndF9ldmljdF9jb250ZXh0cyh2b2lkICphcmcpCj4gICAJCX0KPiAgIAo+ICAgCQljb3VudCA9 IDA7Cj4gLQkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJCW9uc3Rh Y2tfZmVuY2VfaW5pdCgmZmVuY2UpOwo+ICAgCQlkbyB7Cj4gICAJCQlzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycTsKPiBAQCAtNTEwLDggKzUwOSw2IEBAIHN0YXRpYyBpbnQgaWd0X2V2aWN0X2NvbnRl eHRzKHZvaWQgKmFyZykKPiAgIAkJCWNvdW50Kys7Cj4gICAJCQllcnIgPSAwOwo+ICAgCQl9IHdo aWxlKDEpOwo+IC0JCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ ICAgCQlvbnN0YWNrX2ZlbmNlX2ZpbmkoJmZlbmNlKTsKPiAgIAkJcHJfaW5mbygiU3VibWl0dGVk ICVsdSBjb250ZXh0cy9yZXF1ZXN0cyBvbiAlc1xuIiwKPiAgIAkJCWNvdW50LCBlbmdpbmUtPm5h bWUpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9n ZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZ3R0LmMK PiBpbmRleCA5OTM5ZGQ0MGM2YTguLjY3NzdhMzM1YmQ0NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZ3R0LmMKPiBAQCAtMTI0Niw2ICsxMjQ2LDcg QEAgc3RhdGljIGludCBleGVyY2lzZV9tb2NrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LAo+ICAgCQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmRfdGltZSkpCj4gICB7Cj4gICAJY29uc3Qg dTY0IGxpbWl0ID0gdG90YWxyYW1fcGFnZXMoKSA8PCBQQUdFX1NISUZUOwo+ICsJc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm07Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsK PiAgIAlJR1RfVElNRU9VVChlbmRfdGltZSk7Cj4gICAJaW50IGVycjsKPiBAQCAtMTI1NCw3ICsx MjU1LDggQEAgc3RhdGljIGludCBleGVyY2lzZV9tb2NrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAo+ICAgCWlmICghY3R4KQo+ICAgCQlyZXR1cm4gLUVOT01FTTsKPiAgIAo+IC0JZXJy ID0gZnVuYyhpOTE1LCBjdHgtPnZtLCAwLCBtaW4oY3R4LT52bS0+dG90YWwsIGxpbWl0KSwgZW5k X3RpbWUpOwo+ICsJdm0gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0+dm0sIHRydWUp Owo+ICsJZXJyID0gZnVuYyhpOTE1LCB2bSwgMCwgbWluKHZtLT50b3RhbCwgbGltaXQpLCBlbmRf dGltZSk7Cj4gICAKPiAgIAltb2NrX2NvbnRleHRfY2xvc2UoY3R4KTsKPiAgIAlyZXR1cm4gZXJy Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1 ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMKPiBp bmRleCBkMWVlMzg0YTMyNjAuLjRhYmY1MjczMzUyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMKPiBAQCAtMTgxLDkgKzE4MSw3IEBAIHN0 YXRpYyBpbnQgaWd0X3JlcXVlc3RfcmV3aW5kKHZvaWQgKmFyZykKPiAgIAlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2U7Cj4gICAJaW50IGVyciA9IC1FSU5WQUw7Cj4gICAKPiAtCW11dGV4X2xvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWN0eFswXSA9IG1vY2tfY29udGV4dChpOTE1 LCAiQSIpOwo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+ ICAgCWNlID0gaTkxNV9nZW1fY29udGV4dF9nZXRfZW5naW5lKGN0eFswXSwgUkNTMCk7Cj4gICAJ R0VNX0JVR19PTihJU19FUlIoY2UpKTsKPiBAQCAtMTk3LDkgKzE5NSw3IEBAIHN0YXRpYyBpbnQg aWd0X3JlcXVlc3RfcmV3aW5kKHZvaWQgKmFyZykKPiAgIAlpOTE1X3JlcXVlc3RfZ2V0KHJlcXVl c3QpOwo+ICAgCWk5MTVfcmVxdWVzdF9hZGQocmVxdWVzdCk7Cj4gICAKPiAtCW11dGV4X2xvY2so Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWN0eFsxXSA9IG1vY2tfY29udGV4dChpOTE1 LCAiQiIpOwo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+ ICAgCWNlID0gaTkxNV9nZW1fY29udGV4dF9nZXRfZW5naW5lKGN0eFsxXSwgUkNTMCk7Cj4gICAJ R0VNX0JVR19PTihJU19FUlIoY2UpKTsKPiBAQCAtNDM4LDkgKzQzNCw3IEBAIHN0YXRpYyBpbnQg bW9ja19icmVhZGNydW1ic19zbW9rZXRlc3Qodm9pZCAqYXJnKQo+ICAgCX0KPiAgIAo+ICAgCWZv ciAobiA9IDA7IG4gPCB0Lm5jb250ZXh0czsgbisrKSB7Cj4gLQkJbXV0ZXhfbG9jaygmdC5lbmdp bmUtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCQl0LmNvbnRleHRzW25dID0gbW9ja19j b250ZXh0KHQuZW5naW5lLT5pOTE1LCAibW9jayIpOwo+IC0JCW11dGV4X3VubG9jaygmdC5lbmdp bmUtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCQlpZiAoIXQuY29udGV4dHNbbl0pIHsK PiAgIAkJCXJldCA9IC1FTk9NRU07Cj4gICAJCQlnb3RvIG91dF9jb250ZXh0czsKPiBAQCAtNzM0 LDcgKzcyOCw4IEBAIHN0YXRpYyBpbnQgbGl2ZV9lbXB0eV9yZXF1ZXN0KHZvaWQgKmFyZykKPiAg IHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKnJlY3Vyc2l2ZV9iYXRjaChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0g aTkxNS0+a2VybmVsX2NvbnRleHQ7Cj4gLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9 IGN0eC0+dm0gPzogJmk5MTUtPmdndHQudm07Cj4gKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSA9Cj4gKwkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtPnZtLCB0cnVlKSA/OiAm aTkxNS0+Z2d0dC52bTsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICAg CWNvbnN0IGludCBnZW4gPSBJTlRFTF9HRU4oaTkxNSk7Cj4gICAJc3RydWN0IGk5MTVfdm1hICp2 bWE7Cj4gQEAgLTExMDksOSArMTEwNCw3IEBAIHN0YXRpYyBpbnQgbGl2ZV9icmVhZGNydW1ic19z bW9rZXRlc3Qodm9pZCAqYXJnKQo+ICAgCX0KPiAgIAo+ICAgCWZvciAobiA9IDA7IG4gPCB0WzBd Lm5jb250ZXh0czsgbisrKSB7Cj4gLQkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7Cj4gICAJCXRbMF0uY29udGV4dHNbbl0gPSBsaXZlX2NvbnRleHQoaTkxNSwgZmlsZSk7Cj4g LQkJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAkJaWYgKCF0WzBd LmNvbnRleHRzW25dKSB7Cj4gICAJCQlyZXQgPSAtRU5PTUVNOwo+ICAgCQkJZ290byBvdXRfY29u dGV4dHM7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1 X3ZtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfdm1hLmMKPiBpbmRl eCBhYzFmZjU1OGViOTAuLmY2ZTZiMGFhZTM4YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV92bWEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X3ZtYS5jCj4gQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIGJvb2wgYXNz ZXJ0X3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIHsKPiAgIAlib29sIG9rID0gdHJ1ZTsK PiAgIAo+IC0JaWYgKHZtYS0+dm0gIT0gY3R4LT52bSkgewo+ICsJaWYgKHZtYS0+dm0gIT0gcmN1 X2FjY2Vzc19wb2ludGVyKGN0eC0+dm0pKSB7Cj4gICAJCXByX2VycigiVk1BIGNyZWF0ZWQgd2l0 aCB3cm9uZyBWTVxuIik7Cj4gICAJCW9rID0gZmFsc2U7Cj4gICAJfQo+IEBAIC0xMTMsNyArMTEz LDggQEAgc3RhdGljIGludCBjcmVhdGVfdm1hcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgb2JqZWN0cywgc3RfbGluaykgewo+ICAg CQlmb3IgKHBpbm5lZCA9IDA7IHBpbm5lZCA8PSAxOyBwaW5uZWQrKykgewo+ICAgCQkJbGlzdF9m b3JfZWFjaF9lbnRyeShjdHgsIGNvbnRleHRzLCBsaW5rKSB7Cj4gLQkJCQlzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSA9IGN0eC0+dm07Cj4gKwkJCQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSA9Cj4gKwkJCQkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtPnZtLCB0cnVl KTsKPiAgIAkJCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgIAkJCQlpbnQgZXJyOwo+ICAgCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZp Y2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+ IGluZGV4IGVmZTQwYzI5ZmNmMi4uMGVkMjFhN2I4NjgyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+IEBAIC01OSwxMSArNTks OSBAQCBzdGF0aWMgdm9pZCBtb2NrX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gICAKPiAgIAlpOTE1X2dlbV9kcmFpbl93b3JrcXVldWUoaTkxNSk7Cj4gICAKPiAtCW11 dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWZvcl9lYWNoX2VuZ2luZShl bmdpbmUsIGk5MTUsIGlkKQo+ICAgCQltb2NrX2VuZ2luZV9mcmVlKGVuZ2luZSk7Cj4gLQlpOTE1 X2dlbV9jb250ZXh0c19maW5pKGk5MTUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiArCWk5MTVfZ2VtX2RyaXZlcl9yZWxlYXNlX19jb250ZXh0cyhpOTE1KTsK PiAgIAo+ICAgCWludGVsX3RpbWVsaW5lc19maW5pKGk5MTUpOwo+ICAgCj4gQEAgLTIwNyw3ICsy MDUsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbW9ja19nZW1fZGV2aWNlKHZvaWQpCj4g ICAJcmV0dXJuIGk5MTU7Cj4gICAKPiAgIGVycl9jb250ZXh0Ogo+IC0JaTkxNV9nZW1fY29udGV4 dHNfZmluaShpOTE1KTsKPiArCWk5MTVfZ2VtX2RyaXZlcl9yZWxlYXNlX19jb250ZXh0cyhpOTE1 KTsKPiAgIGVycl9lbmdpbmU6Cj4gICAJbW9ja19lbmdpbmVfZnJlZShpOTE1LT5lbmdpbmVbUkNT MF0pOwo+ICAgZXJyX3VubG9jazoKPiAKClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4