From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 05/27] drm/i915: Pull i915_vma_pin under the vm->mutex Date: Fri, 27 Sep 2019 09:47:59 +0100 Message-ID: <88f1d5bc-ec67-cdb6-3ccc-ab7a11fdce62@linux.intel.com> References: <20190925100137.17956-1-chris@chris-wilson.co.uk> <20190925100137.17956-6-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 mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 24B746EEB0 for ; Fri, 27 Sep 2019 08:48:04 +0000 (UTC) In-Reply-To: <20190925100137.17956-6-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 Ck9uIDI1LzA5LzIwMTkgMTE6MDEsIENocmlzIFdpbHNvbiB3cm90ZToKPiBSZXBsYWNlIHRoZSBz dHJ1Y3RfbXV0ZXggcmVxdWlyZW1lbnQgZm9yIHBpbm5pbmcgdGhlIGk5MTVfdm1hIHdpdGggdGhl Cj4gbG9jYWwgdm0tPm11dGV4IGluc3RlYWQuIE5vdGUgdGhhdCB0aGUgdm0tPm11dGV4IGlzIHRh aW50ZWQgYnkgdGhlCj4gc2hyaW5rZXIgKHdlIHJlcXVpcmUgdW5iaW5kaW5nIGZyb20gaW5zaWRl IGZzLXJlY2xhaW0pIGFuZCBzbyB3ZSBjYW5ub3QKPiBhbGxvY2F0ZSB3aGlsZSBob2xkaW5nIHRo YXQgbXV0ZXguIEluc3RlYWQgd2UgaGF2ZSB0byBwcmVhbGxvY2F0ZQo+IHdvcmtlcnMgdG8gZG8g YWxsb2NhdGUgYW5kIGFwcGx5IHRoZSBQVEUgdXBkYXRlcyBhZnRlciB3ZSBoYXZlIHdlCj4gcmVz ZXJ2ZWQgdGhlaXIgc2xvdCBpbiB0aGUgZHJtX21tICh1c2luZyBmZW5jZXMgdG8gb3JkZXIgdGhl IFBURSB3cml0ZXMKPiB3aXRoIHRoZSBHUFUgd29yayBhbmQgd2l0aCBsYXRlciB1bmJpbmQpLgo+ IAo+IEluIGFkZGluZyB0aGUgYXN5bmNocm9ub3VzIHZtYSBiaW5kaW5nLCBvbmUgc3VidGxlIHJl cXVpcmVtZW50IGlzIHRvCj4gYXZvaWQgY291cGxpbmcgdGhlIGJpbmRpbmcgZmVuY2UgaW50byB0 aGUgYmFja2luZyBvYmplY3QtPnJlc3YuIFRoYXQgaXMKPiB0aGUgYXN5bmNocm9ub3VzIGJpbmRp bmcgb25seSBhcHBsaWVzIHRvIHRoZSB2bWEgdGltZWxpbmUgaXRzZWxmIGFuZCBub3QKPiB0byB0 aGUgcGFnZXMgYXMgdGhhdCBpcyBhIG1vcmUgZ2xvYmFsIHRpbWVsaW5lICh0aGUgYmluZGluZyBv ZiBvbmUgdm1hCj4gZG9lcyBub3QgbmVlZCB0byBiZSBvcmRlcmVkIHdpdGggYW5vdGhlciB2bWEs IG5vciBkb2VzIHRoZSBpbXBsaWNpdCBHRU0KPiBmZW5jaW5nIGRlcGVuZCBvbiBhIHZtYSwgb25s eSBvbiB3cml0ZXMgdG8gdGhlIGJhY2tpbmcgc3RvcmUpLiBLZWVwaW5nCj4gdGhlIHZtYSBiaW5k aW5nIGRpc3RpbmN0IGZyb20gdGhlIGJhY2tpbmcgc3RvcmUgdGltZWxpbmVzIGlzIHZlcmlmaWVk IGJ5Cj4gYSBudW1iZXIgb2YgYXN5bmMgZ2VtX2V4ZWNfZmVuY2UgYW5kIGdlbV9leGVjX3NjaGVk dWxlIHRlc3RzLiBUaGUgd2F5IHdlCj4gZG8gdGhpcyBpcyBxdWl0ZSBzaW1wbGUsIHdlIGtlZXAg dGhlIGZlbmNlIGZvciB0aGUgdm1hIGJpbmRpbmcgc2VwYXJhdGUKPiBhbmQgb25seSB3YWl0IG9u IGl0IGFzIHJlcXVpcmVkLCBhbmQgbmV2ZXIgYWRkIGl0IHRvIHRoZSBvYmotPnJlc3YKPiBpdHNl bGYuCj4gCj4gQW5vdGhlciBjb25zZXF1ZW5jZSBpbiByZWR1Y2luZyB0aGUgbG9ja2luZyBhcm91 bmQgdGhlIHZtYSBpcyB0aGUKPiBkZXN0cnVjdGlvbiBvZiB0aGUgdm1hIGlzIG5vIGxvbmdlciBn bG9iYWxseSBzZXJpYWxpc2VkIGJ5IHN0cnVjdF9tdXRleC4KPiBBIG5hdHVyYWwgc29sdXRpb24g d291bGQgYmUgdG8gYWRkIGEga3JlZiB0byBpOTE1X3ZtYSwgYnV0IHRoYXQgcmVxdWlyZXMKPiBk ZWNvdXBsaW5nIHRoZSByZWZlcmVuY2UgY3ljbGVzLCBwb3NzaWJseSBieSBpbnRyb2R1Y2luZyBh IG5ldwo+IGk5MTVfbW1fcGFnZXMgb2JqZWN0IHRoYXQgaXMgb3duIGJ5IGJvdGggb2JqLT5tbSBh bmQgdm1hLT5wYWdlcy4KPiBIb3dldmVyLCB3ZSBoYXZlIG5vdCB0YWtlbiB0aGF0IHJvdXRlIGR1 ZSB0byB0aGUgb3ZlcnNoYWRvd2luZyBsbWVtL3R0bQo+IGRpc2N1c3Npb25zLCBhbmQgaW5zdGVh ZCBwbGF5IGEgc2VyaWVzIG9mIGNvbXBsaWNhdGVkIGdhbWVzIHdpdGgKPiB0cnlsb2NrcyB0byAo aG9wZWZ1bGx5KSBlbnN1cmUgdGhhdCBvbmx5IG9uZSBkZXN0cnVjdGlvbiBwYXRoIGlzIGNhbGxl ZCEKPiAKPiB2MjogQWRkIHNvbWUgY29tbWVudGFyeSwgYW5kIHNvbWUgaGVscGVycyB0byByZWR1 Y2UgcGF0Y2ggY2h1cm4uCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBp bnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXkuYyAgfCAgMjkgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZmJkZXYuYyAgICB8ICAgOCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9vdmVybGF5LmMgIHwgIDExICstCj4gICAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9j bGllbnRfYmx0LmMgICAgfCAgIDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9jb250ZXh0LmMgICB8ICAyMCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2RvbWFpbi5jICAgIHwgIDEzICstCj4gICAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9leGVjYnVmZmVyLmMgICAgfCAgNDMgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9tbWFuLmMgICAgICB8ICAyMCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX29iamVjdC5jICAgIHwgIDMzICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0LmggICAgfCAgIDUgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmMgIHwgIDczICstLQo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX3N0b2xlbi5jICAgIHwgICA4ICstCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fdGlsaW5nLmMgICAgfCAgMjcgKy0KPiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMgICB8ICAyNyArLQo+ICAgLi4uL2dwdS9k cm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyAgIHwgICA5ICstCj4gICAuLi4vZHJt L2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgfCAgMTIgKy0KPiAgIC4uLi9k cm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYyAgICB8ICAgNCAtCj4gICAuLi4v ZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMgICAgfCAgIDcgKy0KPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMgICAgICAgICAgICB8ICAgNSArLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ2J1ZmZlci5jICAgIHwgICA0ICstCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYyAgfCAgMTkgKy0K PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9hcGVydHVyZV9nbS5jICAgICAgICB8ICAxMiAr LQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuYyAgICAgICAgICAgIHwgIDk1 ICsrKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmggICAgICAgICAgICB8 ICAgNyArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZV90eXBlcy5oICAgICAg fCAgIDUgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgICAgICAg IHwgICAyIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICAg ICB8ICA4MyArKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMgICAg ICAgICB8ICAyOCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2VfcmVn LmMgICAgIHwgICA5ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyAg ICAgICAgICAgfCAxMDkgKystLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmggICAgICAgICAgIHwgIDQ1ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BlcmYu YyAgICAgICAgICAgICAgfCAgMzIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1h LmMgICAgICAgICAgICAgICB8IDUyNCArKysrKysrKysrKystLS0tLS0KPiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfdm1hLmggICAgICAgICAgICAgICB8ICA4NCArLS0KPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbS5jICAgICB8ICAgMiAtCj4gICAuLi4vZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ldmljdC5jICAgfCAgMzYgKy0KPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyB8ICA1OCArLQo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jIHwgICA3ICsKPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3ZtYS5jICAgICB8ICAgNiArLQo+ICAg MzkgZmlsZXMgY2hhbmdlZCwgODIzIGluc2VydGlvbnMoKyksIDcwMCBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4 IDVlY2Y1NDI3MDE4MS4uMTJhYmNkMWU0NzFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtMjA3OSw3ICsyMDc5LDYgQEAgaW50ZWxf cGluX2FuZF9mZW5jZV9mYl9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gICAJdW5z aWduZWQgaW50IHBpbmN0bDsKPiAgIAl1MzIgYWxpZ25tZW50Owo+ICAgCj4gLQlXQVJOX09OKCFt dXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7Cj4gICAJaWYgKFdBUk5fT04oIWk5 MTVfZ2VtX29iamVjdF9pc19mcmFtZWJ1ZmZlcihvYmopKSkKPiAgIAkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7Cj4gICAKPiBAQCAtMjE2Myw4ICsyMTYyLDYgQEAgaW50ZWxfcGluX2FuZF9mZW5j ZV9mYl9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gICAKPiAgIHZvaWQgaW50ZWxf dW5waW5fZmJfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ ICAgewo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm1hLT52bS0+aTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gLQo+ICAgCWk5MTVfZ2VtX29iamVjdF9sb2NrKHZtYS0+b2JqKTsKPiAgIAlpZiAo ZmxhZ3MgJiBQTEFORV9IQVNfRkVOQ0UpCj4gICAJCWk5MTVfdm1hX3VucGluX2ZlbmNlKHZtYSk7 Cj4gQEAgLTMwNjUsMTIgKzMwNjIsMTAgQEAgaW50ZWxfYWxsb2NfaW5pdGlhbF9wbGFuZV9vYmoo c3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gICAJCXJldHVybiBmYWxzZTsKPiAgIAl9Cj4gICAK PiAtCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX3N0b2xlbl9mb3JfcHJlYWxsb2NhdGVkKGRldl9wcml2LAo+ICAgCQkJCQkJ CSAgICAgYmFzZV9hbGlnbmVkLAo+ICAgCQkJCQkJCSAgICAgYmFzZV9hbGlnbmVkLAo+ICAgCQkJ CQkJCSAgICAgc2l6ZV9hbGlnbmVkKTsKPiAtCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0 ZXgpOwo+ICAgCWlmICghb2JqKQo+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gICAKPiBAQCAtMzIzMiwx MyArMzIyNywxMSBAQCBpbnRlbF9maW5kX2luaXRpYWxfcGxhbmVfb2JqKHN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjLAo+ICAgCWludGVsX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUg PQo+ICAgCQlpbnRlbF9mYl9waXRjaChmYiwgMCwgaW50ZWxfc3RhdGUtPmJhc2Uucm90YXRpb24p Owo+ICAgCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJaW50ZWxfc3Rh dGUtPnZtYSA9Cj4gICAJCWludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGZiLAo+ICAgCQkJCQkg ICAmaW50ZWxfc3RhdGUtPnZpZXcsCj4gICAJCQkJCSAgIGludGVsX3BsYW5lX3VzZXNfZmVuY2Uo aW50ZWxfc3RhdGUpLAo+ICAgCQkJCQkgICAmaW50ZWxfc3RhdGUtPmZsYWdzKTsKPiAtCW11dGV4 X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWlmIChJU19FUlIoaW50ZWxfc3RhdGUt PnZtYSkpIHsKPiAgIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIGJvb3QgZmIgb24gcGlwZSAl ZDogJWxpXG4iLAo+ICAgCQkJICBpbnRlbF9jcnRjLT5waXBlLCBQVFJfRVJSKGludGVsX3N0YXRl LT52bWEpKTsKPiBAQCAtMTQzNjgsOCArMTQzNjEsNiBAQCBzdGF0aWMgdm9pZCBmYl9vYmpfYnVt cF9yZW5kZXJfcHJpb3JpdHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgICAq IGJpdHMuICBTb21lIG9sZGVyIHBsYXRmb3JtcyBuZWVkIHNwZWNpYWwgcGh5c2ljYWwgYWRkcmVz cyBoYW5kbGluZyBmb3IKPiAgICAqIGN1cnNvciBwbGFuZXMuCj4gICAgKgo+IC0gKiBNdXN0IGJl IGNhbGxlZCB3aXRoIHN0cnVjdF9tdXRleCBoZWxkLgo+IC0gKgo+ICAgICogUmV0dXJucyAwIG9u IHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiAgICAqLwo+ICAgaW50 Cj4gQEAgLTE0NDI2LDE1ICsxNDQxNyw4IEBAIGludGVsX3ByZXBhcmVfcGxhbmVfZmIoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+ IC0JcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9i aik7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gICAJcmV0ID0gaW50ZWxfcGxhbmVfcGlu X2ZiKHRvX2ludGVsX3BsYW5lX3N0YXRlKG5ld19zdGF0ZSkpOwo+ICAgCj4gLQltdXRleF91bmxv Y2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlpOTE1X2dlbV9vYmplY3RfdW5w aW5fcGFnZXMob2JqKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+IEBAIC0xNDQ4 Myw4ICsxNDQ2Nyw2IEBAIGludGVsX3ByZXBhcmVfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gICAgKiBAb2xkX3N0YXRlOiB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgbW9k ZXNldAo+ICAgICoKPiAgICAqIENsZWFucyB1cCBhIGZyYW1lYnVmZmVyIHRoYXQgaGFzIGp1c3Qg YmVlbiByZW1vdmVkIGZyb20gYSBwbGFuZS4KPiAtICoKPiAtICogTXVzdCBiZSBjYWxsZWQgd2l0 aCBzdHJ1Y3RfbXV0ZXggaGVsZC4KPiAgICAqLwo+ICAgdm9pZAo+ICAgaW50ZWxfY2xlYW51cF9w bGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiBAQCAtMTQ1MDAsOSArMTQ0ODIsNyBA QCBpbnRlbF9jbGVhbnVwX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCX0K PiAgIAo+ICAgCS8qIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgaW50 ZWxfcHJlcGFyZV9wbGFuZV9mYigpISAqLwo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+ICAgCWludGVsX3BsYW5lX3VucGluX2ZiKHRvX2ludGVsX3BsYW5lX3N0 YXRlKG9sZF9zdGF0ZSkpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gICB9Cj4gICAKPiAgIGludAo+IEBAIC0xNDcwNSw3ICsxNDY4NSw2IEBAIGludGVs X2xlZ2FjeV9jdXJzb3JfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCQkJICAg dTMyIHNyY193LCB1MzIgc3JjX2gsCj4gICAJCQkgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWly ZV9jdHggKmN0eCkKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoY3J0Yy0+ZGV2KTsKPiAgIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxh bmVfc3RhdGUsICpuZXdfcGxhbmVfc3RhdGU7Cj4gICAJc3RydWN0IGludGVsX3BsYW5lICppbnRl bF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKTsKPiAgIAlzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSA9Cj4gQEAgLTE0NzcxLDEzICsxNDc1MCw5IEBAIGludGVsX2xlZ2Fj eV9jdXJzb3JfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCWlmIChyZXQpCj4g ICAJCWdvdG8gb3V0X2ZyZWU7Cj4gICAKPiAtCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJs ZSgmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIG91 dF9mcmVlOwo+IC0KPiAgIAlyZXQgPSBpbnRlbF9wbGFuZV9waW5fZmIodG9faW50ZWxfcGxhbmVf c3RhdGUobmV3X3BsYW5lX3N0YXRlKSk7Cj4gICAJaWYgKHJldCkKPiAtCQlnb3RvIG91dF91bmxv Y2s7Cj4gKwkJZ290byBvdXRfZnJlZTsKPiAgIAo+ICAgCWludGVsX2Zyb250YnVmZmVyX2ZsdXNo KHRvX2ludGVsX2Zyb250YnVmZmVyKGZiKSwgT1JJR0lOX0ZMSVApOwo+ICAgCWludGVsX2Zyb250 YnVmZmVyX3RyYWNrKHRvX2ludGVsX2Zyb250YnVmZmVyKG9sZF9wbGFuZV9zdGF0ZS0+ZmIpLAo+ IEBAIC0xNDgwNyw4ICsxNDc4Miw2IEBAIGludGVsX2xlZ2FjeV9jdXJzb3JfdXBkYXRlKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCj4gICAJaW50ZWxfcGxhbmVfdW5waW5fZmIodG9faW50 ZWxfcGxhbmVfc3RhdGUob2xkX3BsYW5lX3N0YXRlKSk7Cj4gICAKPiAtb3V0X3VubG9jazoKPiAt CW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgb3V0X2ZyZWU6 Cj4gICAJaWYgKG5ld19jcnRjX3N0YXRlKQo+ICAgCQlpbnRlbF9jcnRjX2Rlc3Ryb3lfc3RhdGUo Y3J0YywgJm5ld19jcnRjX3N0YXRlLT5iYXNlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9mYmRldi5jCj4gaW5kZXggNjgzMzg2NjlmMDU0Li45N2NkZTAxNzY3MGEgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mYmRldi5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mYmRldi5jCj4gQEAgLTIw NCw3ICsyMDQsNiBAQCBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVs cGVyICpoZWxwZXIsCj4gICAJCXNpemVzLT5mYl9oZWlnaHQgPSBpbnRlbF9mYi0+YmFzZS5oZWln aHQ7Cj4gICAJfQo+ICAgCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAJ d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7Cj4g ICAKPiAgIAkvKiBQaW4gdGhlIEdHVFQgdm1hIGZvciBvdXIgYWNjZXNzIHZpYSBpbmZvLT5zY3Jl ZW5fYmFzZS4KPiBAQCAtMjY2LDcgKzI2NSw2IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9jcmVhdGUo c3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiAgIAlpZmJkZXYtPnZtYV9mbGFncyA9IGZs YWdzOwo+ICAgCj4gICAJaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3Bt LCB3YWtlcmVmKTsKPiAtCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCXZn YV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQocGRldiwgaW5mbyk7Cj4gICAJcmV0dXJuIDA7Cj4g ICAKPiBAQCAtMjc0LDcgKzI3Miw2IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0 IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiAgIAlpbnRlbF91bnBpbl9mYl92bWEodm1hLCBmbGFn cyk7Cj4gICBvdXRfdW5sb2NrOgo+ICAgCWludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+ cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4 KTsKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gQEAgLTI5MSwxMSArMjg4LDggQEAgc3Rh dGljIHZvaWQgaW50ZWxfZmJkZXZfZGVzdHJveShzdHJ1Y3QgaW50ZWxfZmJkZXYgKmlmYmRldikK PiAgIAo+ICAgCWRybV9mYl9oZWxwZXJfZmluaSgmaWZiZGV2LT5oZWxwZXIpOwo+ICAgCj4gLQlp ZiAoaWZiZGV2LT52bWEpIHsKPiAtCQltdXRleF9sb2NrKCZpZmJkZXYtPmhlbHBlci5kZXYtPnN0 cnVjdF9tdXRleCk7Cj4gKwlpZiAoaWZiZGV2LT52bWEpCj4gICAJCWludGVsX3VucGluX2ZiX3Zt YShpZmJkZXYtPnZtYSwgaWZiZGV2LT52bWFfZmxhZ3MpOwo+IC0JCW11dGV4X3VubG9jaygmaWZi ZGV2LT5oZWxwZXIuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0JfQo+ICAgCj4gICAJaWYgKGlmYmRl di0+ZmIpCj4gICAJCWRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoJmlmYmRldi0+ZmItPmJhc2UpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX292ZXJsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfb3ZlcmxheS5jCj4gaW5kZXgg NWVmZWY5YmFiYWRiLi4zZjRhYzFlZTc2NjggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9vdmVybGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX292ZXJsYXkuYwo+IEBAIC0xMzAzLDE1ICsxMzAzLDExIEBAIHN0YXRp YyBpbnQgZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSwgYm9vbCB1 c2VfcGh5cykKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgIAlpbnQgZXJyOwo+ICAgCj4g LQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJb2JqID0gaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZV9zdG9sZW4oaTkxNSwgUEFHRV9TSVpFKTsKPiAgIAlpZiAob2Jq ID09IE5VTEwpCj4gICAJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkx NSwgUEFHRV9TSVpFKTsKPiAtCWlmIChJU19FUlIob2JqKSkgewo+IC0JCWVyciA9IFBUUl9FUlIo b2JqKTsKPiAtCQlnb3RvIGVycl91bmxvY2s7Cj4gLQl9Cj4gKwlpZiAoSVNfRVJSKG9iaikpCj4g KwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKPiAgIAo+ICAgCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9n Z3R0X3BpbihvYmosIE5VTEwsIDAsIDAsIFBJTl9NQVBQQUJMRSk7Cj4gICAJaWYgKElTX0VSUih2 bWEpKSB7Cj4gQEAgLTEzMzIsMTMgKzEzMjgsMTAgQEAgc3RhdGljIGludCBnZXRfcmVnaXN0ZXJz KHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5LCBib29sIHVzZV9waHlzKQo+ICAgCX0KPiAg IAo+ICAgCW92ZXJsYXktPnJlZ19ibyA9IG9iajsKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7Cj4gICAJcmV0dXJuIDA7Cj4gICAKPiAgIGVycl9wdXRfYm86Cj4gICAJ aTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+IC1lcnJfdW5sb2NrOgo+IC0JbXV0ZXhfdW5sb2Nr KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+ICAgCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY2xpZW50X2JsdC5jCj4gaW5k ZXggN2Y2MWE4MDI0MTMzLi5jMWZjYTU3MjhlNmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NsaWVudF9ibHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9jbGllbnRfYmx0LmMKPiBAQCAtMjExLDcgKzIxMSw3IEBAIHN0 YXRpYyB2b2lkIGNsZWFyX3BhZ2VzX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4g ICAJICoga2VlcCB0cmFjayBvZiB0aGUgR1BVIGFjdGl2aXR5IHdpdGhpbiB0aGlzIHZtYS9yZXF1 ZXN0LCBhbmQKPiAgIAkgKiBwcm9wYWdhdGUgdGhlIHNpZ25hbCBmcm9tIHRoZSByZXF1ZXN0IHRv IHctPmRtYS4KPiAgIAkgKi8KPiAtCWVyciA9IGk5MTVfYWN0aXZlX2FkZF9yZXF1ZXN0KCZ2bWEt PmFjdGl2ZSwgcnEpOwo+ICsJZXJyID0gX19pOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZSh2bWEsIHJx KTsKPiAgIAlpZiAoZXJyKQo+ICAgCQlnb3RvIG91dF9yZXF1ZXN0Owo+ICAgCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jCj4gaW5kZXggZjdiYTA5MzVlZDY3 Li45NWY4ZTY2ZTQ1ZGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9jb250ZXh0LmMKPiBAQCAtMzEzLDggKzMxMyw2IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX2Nv bnRleHRfZnJlZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgCUdFTV9CVUdfT04o IWk5MTVfZ2VtX2NvbnRleHRfaXNfY2xvc2VkKGN0eCkpOwo+ICAgCj4gICAJcmVsZWFzZV9od19p ZChjdHgpOwo+IC0JaWYgKGN0eC0+dm0pCj4gLQkJaTkxNV92bV9wdXQoY3R4LT52bSk7Cj4gICAK PiAgIAlmcmVlX2VuZ2luZXMocmN1X2FjY2Vzc19wb2ludGVyKGN0eC0+ZW5naW5lcykpOwo+ICAg CW11dGV4X2Rlc3Ryb3koJmN0eC0+ZW5naW5lc19tdXRleCk7Cj4gQEAgLTM3OSw5ICszNzcsMTMg QEAgdm9pZCBpOTE1X2dlbV9jb250ZXh0X3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKPiAgIAo+ ICAgc3RhdGljIHZvaWQgY29udGV4dF9jbG9zZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 KQo+ICAgewo+ICsJaTkxNV9nZW1fY29udGV4dF9zZXRfY2xvc2VkKGN0eCk7Cj4gKwo+ICsJaWYg KGN0eC0+dm0pCj4gKwkJaTkxNV92bV9jbG9zZShjdHgtPnZtKTsKPiArCj4gICAJbXV0ZXhfbG9j aygmY3R4LT5tdXRleCk7Cj4gICAKPiAtCWk5MTVfZ2VtX2NvbnRleHRfc2V0X2Nsb3NlZChjdHgp Owo+ICAgCWN0eC0+ZmlsZV9wcml2ID0gRVJSX1BUUigtRUJBREYpOwo+ICAgCj4gICAJLyoKPiBA QCAtNDc0LDcgKzQ3Niw3IEBAIF9fc2V0X3BwZ3R0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpj dHgsIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAgCj4gICAJR0VNX0JVR19PTihv bGQgJiYgaTkxNV92bV9pc180bHZsKHZtKSAhPSBpOTE1X3ZtX2lzXzRsdmwob2xkKSk7Cj4gICAK PiAtCWN0eC0+dm0gPSBpOTE1X3ZtX2dldCh2bSk7Cj4gKwljdHgtPnZtID0gaTkxNV92bV9vcGVu KHZtKTsKPiAgIAljb250ZXh0X2FwcGx5X2FsbChjdHgsIF9fYXBwbHlfcHBndHQsIHZtKTsKPiAg IAo+ICAgCXJldHVybiBvbGQ7Cj4gQEAgLTQ4OCw3ICs0OTAsNyBAQCBzdGF0aWMgdm9pZCBfX2Fz c2lnbl9wcGd0dChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAgCj4gICAJdm0gPSBf X3NldF9wcGd0dChjdHgsIHZtKTsKPiAgIAlpZiAodm0pCj4gLQkJaTkxNV92bV9wdXQodm0pOwo+ ICsJCWk5MTVfdm1fY2xvc2Uodm0pOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZCBfX3NldF90 aW1lbGluZShzdHJ1Y3QgaW50ZWxfdGltZWxpbmUgKipkc3QsCj4gQEAgLTk1Myw3ICs5NTUsNyBA QCBzdGF0aWMgaW50IGdldF9wcGd0dChzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxl X3ByaXYsCj4gICAJaWYgKHJldCA8IDApCj4gICAJCWdvdG8gZXJyX3VubG9jazsKPiAgIAo+IC0J aTkxNV92bV9nZXQodm0pOwo+ICsJaTkxNV92bV9vcGVuKHZtKTsKPiAgIAo+ICAgCWFyZ3MtPnNp emUgPSAwOwo+ICAgCWFyZ3MtPnZhbHVlID0gcmV0Owo+IEBAIC05NzMsNyArOTc1LDcgQEAgc3Rh dGljIHZvaWQgc2V0X3BwZ3R0X2JhcnJpZXIodm9pZCAqZGF0YSkKPiAgIAlpZiAoSU5URUxfR0VO KG9sZC0+aTkxNSkgPCA4KQo+ICAgCQlnZW42X3BwZ3R0X3VucGluX2FsbChpOTE1X3ZtX3RvX3Bw Z3R0KG9sZCkpOwo+ICAgCj4gLQlpOTE1X3ZtX3B1dChvbGQpOwo+ICsJaTkxNV92bV9jbG9zZShv bGQpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGVtaXRfcHBndHRfdXBkYXRlKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLCB2b2lkICpkYXRhKQo+IEBAIC0xMDkwLDggKzEwOTIsOCBAQCBzdGF0 aWMgaW50IHNldF9wcGd0dChzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYs Cj4gICAJCQkJICAgc2V0X3BwZ3R0X2JhcnJpZXIsCj4gICAJCQkJICAgb2xkKTsKPiAgIAlpZiAo ZXJyKSB7Cj4gLQkJaTkxNV92bV9wdXQoX19zZXRfcHBndHQoY3R4LCBvbGQpKTsKPiAtCQlpOTE1 X3ZtX3B1dChvbGQpOwo+ICsJCWk5MTVfdm1fY2xvc2UoX19zZXRfcHBndHQoY3R4LCBvbGQpKTsK PiArCQlpOTE1X3ZtX2Nsb3NlKG9sZCk7Cj4gICAJfQo+ICAgCj4gICB1bmxvY2s6Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kb21haW4uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kb21haW4uYwo+IGluZGV4IDU1YzNhYjU5ZTNh YS4uOTkzN2I0YzM0MWYxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9kb21haW4uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9kb21haW4uYwo+IEBAIC0yODgsNyArMjg4LDEyIEBAIGludCBpOTE1X2dlbV9vYmplY3Rfc2V0 X2NhY2hlX2xldmVsKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQlpZiAo IWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSkKPiAgIAkJCQljb250aW51ZTsKPiAg IAo+IC0JCQlyZXQgPSBpOTE1X3ZtYV9iaW5kKHZtYSwgY2FjaGVfbGV2ZWwsIFBJTl9VUERBVEUp Owo+ICsJCQkvKiBXYWl0IGZvciBhbiBlYXJsaWVyIGFzeW5jIGJpbmQsIG5lZWQgdG8gcmV3cml0 ZSBpdCAqLwo+ICsJCQlyZXQgPSBpOTE1X3ZtYV9zeW5jKHZtYSk7Cj4gKwkJCWlmIChyZXQpCj4g KwkJCQlyZXR1cm4gcmV0Owo+ICsKPiArCQkJcmV0ID0gaTkxNV92bWFfYmluZCh2bWEsIGNhY2hl X2xldmVsLCBQSU5fVVBEQVRFLCBOVUxMKTsKPiAgIAkJCWlmIChyZXQpCj4gICAJCQkJcmV0dXJu IHJldDsKPiAgIAkJfQo+IEBAIC0zOTEsMTYgKzM5NiwxMSBAQCBpbnQgaTkxNV9nZW1fc2V0X2Nh Y2hpbmdfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAlpZiAo cmV0KQo+ICAgCQlnb3RvIG91dDsKPiAgIAo+IC0JcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBvdXQ7 Cj4gLQo+ICAgCXJldCA9IGk5MTVfZ2VtX29iamVjdF9sb2NrX2ludGVycnVwdGlibGUob2JqKTsK PiAgIAlpZiAocmV0ID09IDApIHsKPiAgIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNo ZV9sZXZlbChvYmosIGxldmVsKTsKPiAgIAkJaTkxNV9nZW1fb2JqZWN0X3VubG9jayhvYmopOwo+ ICAgCX0KPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiAg IG91dDoKPiAgIAlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gQEAgLTQ4NSw2ICs0ODUsNyBA QCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfYnVtcF9pbmFjdGl2ZV9nZ3R0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJCWlmICghZHJtX21tX25vZGVfYWxsb2NhdGVk KCZ2bWEtPm5vZGUpKQo+ICAgCQkJY29udGludWU7Cj4gICAKPiArCQlHRU1fQlVHX09OKHZtYS0+ dm0gIT0gJmk5MTUtPmdndHQudm0pOwo+ICAgCQlsaXN0X21vdmVfdGFpbCgmdm1hLT52bV9saW5r LCAmdm1hLT52bS0+Ym91bmRfbGlzdCk7Cj4gICAJfQo+ICAgCW11dGV4X3VubG9jaygmaTkxNS0+ Z2d0dC52bS5tdXRleCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f ZXhlY2J1ZmZlci5jCj4gaW5kZXggYzA0OTE5OWExZGY1Li44OGE4ODFiZTEyZWMgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiBAQCAt Njk4LDcgKzY5OCw5IEBAIHN0YXRpYyBpbnQgZWJfcmVzZXJ2ZShzdHJ1Y3QgaTkxNV9leGVjYnVm ZmVyICplYikKPiAgIAo+ICAgCQljYXNlIDE6Cj4gICAJCQkvKiBUb28gZnJhZ21lbnRlZCwgdW5i aW5kIGV2ZXJ5dGhpbmcgYW5kIHJldHJ5ICovCj4gKwkJCW11dGV4X2xvY2soJmViLT5jb250ZXh0 LT52bS0+bXV0ZXgpOwo+ICAgCQkJZXJyID0gaTkxNV9nZW1fZXZpY3Rfdm0oZWItPmNvbnRleHQt PnZtKTsKPiArCQkJbXV0ZXhfdW5sb2NrKCZlYi0+Y29udGV4dC0+dm0tPm11dGV4KTsKPiAgIAkJ CWlmIChlcnIpCj4gICAJCQkJcmV0dXJuIGVycjsKPiAgIAkJCWJyZWFrOwo+IEBAIC05NzIsNyAr OTc0LDkgQEAgc3RhdGljIHZvaWQgcmVsb2NfY2FjaGVfcmVzZXQoc3RydWN0IHJlbG9jX2NhY2hl ICpjYWNoZSkKPiAgIAkJCWdndHQtPnZtLmNsZWFyX3JhbmdlKCZnZ3R0LT52bSwKPiAgIAkJCQkJ ICAgICBjYWNoZS0+bm9kZS5zdGFydCwKPiAgIAkJCQkJICAgICBjYWNoZS0+bm9kZS5zaXplKTsK PiArCQkJbXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQkJZHJtX21tX3JlbW92ZV9u b2RlKCZjYWNoZS0+bm9kZSk7Cj4gKwkJCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ ICAgCQl9IGVsc2Ugewo+ICAgCQkJaTkxNV92bWFfdW5waW4oKHN0cnVjdCBpOTE1X3ZtYSAqKWNh Y2hlLT5ub2RlLm1tKTsKPiAgIAkJfQo+IEBAIC0xMDQ3LDExICsxMDUxLDEzIEBAIHN0YXRpYyB2 b2lkICpyZWxvY19pb21hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJ CQkgICAgICAgUElOX05PRVZJQ1QpOwo+ICAgCQlpZiAoSVNfRVJSKHZtYSkpIHsKPiAgIAkJCW1l bXNldCgmY2FjaGUtPm5vZGUsIDAsIHNpemVvZihjYWNoZS0+bm9kZSkpOwo+ICsJCQltdXRleF9s b2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJCQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5f cmFuZ2UKPiAgIAkJCQkoJmdndHQtPnZtLm1tLCAmY2FjaGUtPm5vZGUsCj4gICAJCQkJIFBBR0Vf U0laRSwgMCwgSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiAgIAkJCQkgMCwgZ2d0dC0+bWFwcGFi bGVfZW5kLAo+ICAgCQkJCSBEUk1fTU1fSU5TRVJUX0xPVyk7Cj4gKwkJCW11dGV4X3VubG9jaygm Z2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQkJaWYgKGVycikgLyogbm8gaW5hY3RpdmUgYXBlcnR1cmUg c3BhY2UsIHVzZSBjcHUgcmVsb2MgKi8KPiAgIAkJCQlyZXR1cm4gTlVMTDsKPiAgIAkJfSBlbHNl IHsKPiBAQCAtMTQxNiw3ICsxNDIyLDcgQEAgZWJfcmVsb2NhdGVfZW50cnkoc3RydWN0IGk5MTVf ZXhlY2J1ZmZlciAqZWIsCj4gICAJCWlmIChyZWxvYy0+d3JpdGVfZG9tYWluID09IEk5MTVfR0VN X0RPTUFJTl9JTlNUUlVDVElPTiAmJgo+ICAgCQkgICAgSVNfR0VOKGViLT5pOTE1LCA2KSkgewo+ ICAgCQkJZXJyID0gaTkxNV92bWFfYmluZCh0YXJnZXQsIHRhcmdldC0+b2JqLT5jYWNoZV9sZXZl bCwKPiAtCQkJCQkgICAgUElOX0dMT0JBTCk7Cj4gKwkJCQkJICAgIFBJTl9HTE9CQUwsIE5VTEwp Owo+ICAgCQkJaWYgKFdBUk5fT05DRShlcnIsCj4gICAJCQkJICAgICAgIlVuZXhwZWN0ZWQgZmFp bHVyZSB0byBiaW5kIHRhcmdldCBWTUEhIikpCj4gICAJCQkJcmV0dXJuIGVycjsKPiBAQCAtMjE0 MCwzNSArMjE0Niw2IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICplYl90aHJvdHRsZShz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gICAJcmV0dXJuIGk5MTVfcmVxdWVzdF9nZXQocnEp Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQKPiAtX19lYl9waW5fY29udGV4dChzdHJ1Y3QgaTkx NV9leGVjYnVmZmVyICplYiwgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+IC17Cj4gLQlpbnQg ZXJyOwo+IC0KPiAtCWlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybygmY2UtPnBpbl9jb3Vu dCkpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJs ZSgmZWItPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKGVycikKPiAtCQlyZXR1cm4g ZXJyOwo+IC0KPiAtCWVyciA9IF9faW50ZWxfY29udGV4dF9kb19waW4oY2UpOwo+IC0JbXV0ZXhf dW5sb2NrKCZlYi0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+IC0JcmV0dXJuIGVycjsK PiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAtX19lYl91bnBpbl9jb250ZXh0KHN0cnVjdCBpOTE1 X2V4ZWNidWZmZXIgKmViLCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gLXsKPiAtCWlmIChs aWtlbHkoYXRvbWljX2FkZF91bmxlc3MoJmNlLT5waW5fY291bnQsIC0xLCAxKSkpCj4gLQkJcmV0 dXJuOwo+IC0KPiAtCW11dGV4X2xvY2soJmViLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAt CWludGVsX2NvbnRleHRfdW5waW4oY2UpOwo+IC0JbXV0ZXhfdW5sb2NrKCZlYi0+aTkxNS0+ZHJt LnN0cnVjdF9tdXRleCk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgaW50IF9fZWJfcGluX2VuZ2luZShz dHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICAg ewo+ICAgCXN0cnVjdCBpbnRlbF90aW1lbGluZSAqdGw7Cj4gQEAgLTIxODgsNyArMjE2NSw3IEBA IHN0YXRpYyBpbnQgX19lYl9waW5fZW5naW5lKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLCBz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gICAJICogR0dUVCBzcGFjZSwgc28gZG8gdGhpcyBm aXJzdCBiZWZvcmUgd2UgcmVzZXJ2ZSBhIHNlcW5vIGZvcgo+ICAgCSAqIG91cnNlbHZlcy4KPiAg IAkgKi8KPiAtCWVyciA9IF9fZWJfcGluX2NvbnRleHQoZWIsIGNlKTsKPiArCWVyciA9IGludGVs X2NvbnRleHRfcGluKGNlKTsKPiAgIAlpZiAoZXJyKQo+ICAgCQlyZXR1cm4gZXJyOwo+ICAgCj4g QEAgLTIyMzIsNyArMjIwOSw3IEBAIHN0YXRpYyBpbnQgX19lYl9waW5fZW5naW5lKHN0cnVjdCBp OTE1X2V4ZWNidWZmZXIgKmViLCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gICAJaW50ZWxf Y29udGV4dF9leGl0KGNlKTsKPiAgIAlpbnRlbF9jb250ZXh0X3RpbWVsaW5lX3VubG9jayh0bCk7 Cj4gICBlcnJfdW5waW46Cj4gLQlfX2ViX3VucGluX2NvbnRleHQoZWIsIGNlKTsKPiArCWludGVs X2NvbnRleHRfdW5waW4oY2UpOwo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gICAKPiBAQCAtMjI0 NSw3ICsyMjIyLDcgQEAgc3RhdGljIHZvaWQgZWJfdW5waW5fZW5naW5lKHN0cnVjdCBpOTE1X2V4 ZWNidWZmZXIgKmViKQo+ICAgCWludGVsX2NvbnRleHRfZXhpdChjZSk7Cj4gICAJbXV0ZXhfdW5s b2NrKCZ0bC0+bXV0ZXgpOwo+ICAgCj4gLQlfX2ViX3VucGluX2NvbnRleHQoZWIsIGNlKTsKPiAr CWludGVsX2NvbnRleHRfdW5waW4oY2UpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdW5zaWduZWQg aW50Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFu LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbW1hbi5jCj4gaW5kZXggODYw Yjc1MWM1MWYxLi5jNDQ2MTQ4OTU0ODcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9tbWFuLmMKPiBAQCAtMjQ5LDE2ICsyNDksNiBAQCB2bV9mYXVsdF90IGk5MTVfZ2Vt X2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gZXJy X3JwbTsKPiAgIAo+IC0JcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoZGV2KTsK PiAtCWlmIChyZXQpCj4gLQkJZ290byBlcnJfcmVzZXQ7Cj4gLQo+IC0JLyogQWNjZXNzIHRvIHNu b29wYWJsZSBwYWdlcyB0aHJvdWdoIHRoZSBHVFQgaXMgaW5jb2hlcmVudC4gKi8KPiAtCWlmIChv YmotPmNhY2hlX2xldmVsICE9IEk5MTVfQ0FDSEVfTk9ORSAmJiAhSEFTX0xMQyhpOTE1KSkgewo+ IC0JCXJldCA9IC1FRkFVTFQ7Cj4gLQkJZ290byBlcnJfdW5sb2NrOwo+IC0JfQo+IC0KPiAgIAkv KiBOb3cgcGluIGl0IGludG8gdGhlIEdUVCBhcyBuZWVkZWQgKi8KPiAgIAl2bWEgPSBpOTE1X2dl bV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCAwLAo+ICAgCQkJCSAgICAgICBQSU5fTUFQ UEFCTEUgfAo+IEBAIC0yOTEsNyArMjgxLDEzIEBAIHZtX2ZhdWx0X3QgaTkxNV9nZW1fZmF1bHQo c3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4gICAJfQo+ICAgCWlmIChJU19FUlIodm1hKSkgewo+ICAg CQlyZXQgPSBQVFJfRVJSKHZtYSk7Cj4gLQkJZ290byBlcnJfdW5sb2NrOwo+ICsJCWdvdG8gZXJy X3Jlc2V0Owo+ICsJfQo+ICsKPiArCS8qIEFjY2VzcyB0byBzbm9vcGFibGUgcGFnZXMgdGhyb3Vn aCB0aGUgR1RUIGlzIGluY29oZXJlbnQuICovCj4gKwlpZiAob2JqLT5jYWNoZV9sZXZlbCAhPSBJ OTE1X0NBQ0hFX05PTkUgJiYgIUhBU19MTEMoaTkxNSkpIHsKPiArCQlyZXQgPSAtRUZBVUxUOwo+ ICsJCWdvdG8gZXJyX3VucGluOwo+ICAgCX0KPiAgIAo+ICAgCXJldCA9IGk5MTVfdm1hX3Bpbl9m ZW5jZSh2bWEpOwo+IEBAIC0zMjksOCArMzI1LDYgQEAgdm1fZmF1bHRfdCBpOTE1X2dlbV9mYXVs dChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPiAgIAlpOTE1X3ZtYV91bnBpbl9mZW5jZSh2bWEpOwo+ ICAgZXJyX3VucGluOgo+ICAgCV9faTkxNV92bWFfdW5waW4odm1hKTsKPiAtZXJyX3VubG9jazoK PiAtCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgZXJyX3Jlc2V0Ogo+ICAg CWludGVsX2d0X3Jlc2V0X3VubG9jayhnZ3R0LT52bS5ndCwgc3JjdSk7Cj4gICBlcnJfcnBtOgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKPiBpbmRleCAwZWY2 MGRhZTIzYTcuLmRiZjliZTlhNzlmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fb2JqZWN0LmMKPiBAQCAtMTU1LDIxICsxNTUsMzAgQEAgc3RhdGljIHZvaWQgX19p OTE1X2dlbV9mcmVlX29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAK PiAgIAl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmk5MTUtPnJ1bnRpbWVfcG0pOwo+ ICAgCWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBvbiwgZnJlZWQsIGZyZWVkKSB7Cj4g LQkJc3RydWN0IGk5MTVfdm1hICp2bWEsICp2bjsKPiAtCj4gICAJCXRyYWNlX2k5MTVfZ2VtX29i amVjdF9kZXN0cm95KG9iaik7Cj4gICAKPiAtCQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPiAtCj4gLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgdm4sICZvYmot PnZtYS5saXN0LCBvYmpfbGluaykgewo+IC0JCQlHRU1fQlVHX09OKGk5MTVfdm1hX2lzX2FjdGl2 ZSh2bWEpKTsKPiAtCQkJYXRvbWljX2FuZCh+STkxNV9WTUFfUElOX01BU0ssICZ2bWEtPmZsYWdz KTsKPiAtCQkJaTkxNV92bWFfZGVzdHJveSh2bWEpOwo+ICsJCWlmICghbGlzdF9lbXB0eSgmb2Jq LT52bWEubGlzdCkpIHsKPiArCQkJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwo+ICsJCQkvKgo+ ICsJCQkgKiBOb3RlIHRoYXQgdGhlIHZtYSBrZWVwcyBhbiBvYmplY3QgcmVmZXJlbmNlIHdoaWxl Cj4gKwkJCSAqIGl0IGlzIGFjdGl2ZSwgc28gaXQgKnNob3VsZCogbm90IHNsZWVwIHdoaWxlIHdl Cj4gKwkJCSAqIGRlc3Ryb3kgaXQuIE91ciBkZWJ1ZyBjb2RlIGVycnMgaW5zaXRzIGl0ICptaWdo dCouCj4gKwkJCSAqIEZvciB0aGUgbW9tZW50LCBwbGF5IGFsb25nLgo+ICsJCQkgKi8KPiArCQkJ c3Bpbl9sb2NrKCZvYmotPnZtYS5sb2NrKTsKPiArCQkJd2hpbGUgKCh2bWEgPSBsaXN0X2ZpcnN0 X2VudHJ5X29yX251bGwoJm9iai0+dm1hLmxpc3QsCj4gKwkJCQkJCQkgICAgICAgc3RydWN0IGk5 MTVfdm1hLAo+ICsJCQkJCQkJICAgICAgIG9ial9saW5rKSkpIHsKPiArCQkJCUdFTV9CVUdfT04o dm1hLT5vYmogIT0gb2JqKTsKPiArCQkJCXNwaW5fdW5sb2NrKCZvYmotPnZtYS5sb2NrKTsKPiAr Cj4gKwkJCQlpOTE1X3ZtYV9kZXN0cm95KHZtYSk7Cj4gKwo+ICsJCQkJc3Bpbl9sb2NrKCZvYmot PnZtYS5sb2NrKTsKPiArCQkJfQo+ICsJCQlzcGluX3VubG9jaygmb2JqLT52bWEubG9jayk7Cj4g ICAJCX0KPiAtCQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZvYmotPnZtYS5saXN0KSk7Cj4gLQkJ R0VNX0JVR19PTighUkJfRU1QVFlfUk9PVCgmb2JqLT52bWEudHJlZSkpOwo+IC0KPiAtCQltdXRl eF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gICAJCUdFTV9CVUdfT04o YXRvbWljX3JlYWQoJm9iai0+YmluZF9jb3VudCkpOwo+ICAgCQlHRU1fQlVHX09OKG9iai0+dXNl cmZhdWx0X2NvdW50KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVj dC5oCj4gaW5kZXggMjliOWVkZGM0YzdmLi5hNzhhZjI1ZGNlMzYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCj4gQEAgLTEwNiw2ICsxMDYsMTEgQEAg c3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2VtX29iamVjdF9sb2NrKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCj4gICAJZG1hX3Jlc3ZfbG9jayhvYmotPmJhc2UucmVzdiwgTlVMTCk7 Cj4gICB9Cj4gICAKPiArc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX29iamVjdF90cnlsb2Nr KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXJldHVybiBkbWFfcmVz dl90cnlsb2NrKG9iai0+YmFzZS5yZXN2KTsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbmxpbmUgaW50 Cj4gICBpOTE1X2dlbV9vYmplY3RfbG9ja19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCj4gICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX3Nocmlua2VyLmMKPiBpbmRleCBkMmMwNWQ3NTI5MDkuLmZkM2NlNmRhODQ5NyAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jCj4gQEAgLTE2 LDQwICsxNiw2IEBACj4gICAKPiAgICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4gICAKPiAtc3Rh dGljIGJvb2wgc2hyaW5rZXJfbG9jayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAt CQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MsCj4gLQkJCSAgYm9vbCAqdW5sb2NrKQo+IC17Cj4gLQlz dHJ1Y3QgbXV0ZXggKm0gPSAmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleDsKPiAtCj4gLQlzd2l0Y2gg KG11dGV4X3RyeWxvY2tfcmVjdXJzaXZlKG0pKSB7Cj4gLQljYXNlIE1VVEVYX1RSWUxPQ0tfUkVD VVJTSVZFOgo+IC0JCSp1bmxvY2sgPSBmYWxzZTsKPiAtCQlyZXR1cm4gdHJ1ZTsKPiAtCj4gLQlj YXNlIE1VVEVYX1RSWUxPQ0tfRkFJTEVEOgo+IC0JCSp1bmxvY2sgPSBmYWxzZTsKPiAtCQlpZiAo ZmxhZ3MgJiBJOTE1X1NIUklOS19BQ1RJVkUgJiYKPiAtCQkgICAgbXV0ZXhfbG9ja19raWxsYWJs ZV9uZXN0ZWQobSwgSTkxNV9NTV9TSFJJTktFUikgPT0gMCkKPiAtCQkJKnVubG9jayA9IHRydWU7 Cj4gLQkJcmV0dXJuICp1bmxvY2s7Cj4gLQo+IC0JY2FzZSBNVVRFWF9UUllMT0NLX1NVQ0NFU1M6 Cj4gLQkJKnVubG9jayA9IHRydWU7Cj4gLQkJcmV0dXJuIHRydWU7Cj4gLQl9Cj4gLQo+IC0JQlVH KCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHNocmlua2VyX3VubG9jayhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSwgYm9vbCB1bmxvY2spCj4gLXsKPiAtCWlmICghdW5sb2NrKQo+IC0J CXJldHVybjsKPiAtCj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ IC19Cj4gLQo+ICAgc3RhdGljIGJvb2wgc3dhcF9hdmFpbGFibGUodm9pZCkKPiAgIHsKPiAgIAly ZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKSA+IDA7Cj4gQEAgLTE1NSwxMCArMTIxLDYgQEAgaTkx NV9nZW1fc2hyaW5rKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmID0gMDsKPiAgIAl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKPiAgIAl1 bnNpZ25lZCBsb25nIHNjYW5uZWQgPSAwOwo+IC0JYm9vbCB1bmxvY2s7Cj4gLQo+IC0JaWYgKCFz aHJpbmtlcl9sb2NrKGk5MTUsIHNocmluaywgJnVubG9jaykpCj4gLQkJcmV0dXJuIDA7Cj4gICAK PiAgIAkvKgo+ICAgCSAqIFdoZW4gc2hyaW5raW5nIHRoZSBhY3RpdmUgbGlzdCwgd2Ugc2hvdWxk IGFsc28gY29uc2lkZXIgYWN0aXZlCj4gQEAgLTI2OCw4ICsyMzAsNiBAQCBpOTE1X2dlbV9zaHJp bmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAJaWYgKHNocmluayAmIEk5MTVf U0hSSU5LX0JPVU5EKQo+ICAgCQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmaTkxNS0+cnVudGltZV9w bSwgd2FrZXJlZik7Cj4gICAKPiAtCXNocmlua2VyX3VubG9jayhpOTE1LCB1bmxvY2spOwo+IC0K PiAgIAlpZiAobnJfc2Nhbm5lZCkKPiAgIAkJKm5yX3NjYW5uZWQgKz0gc2Nhbm5lZDsKPiAgIAly ZXR1cm4gY291bnQ7Cj4gQEAgLTMzOSwxOSArMjk5LDE0IEBAIGk5MTVfZ2VtX3Nocmlua2VyX3Nj YW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwgc3RydWN0IHNocmlua19jb250cm9sICpzYykK PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9Cj4gICAJCWNvbnRhaW5lcl9vZihz aHJpbmtlciwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsIG1tLnNocmlua2VyKTsKPiAgIAl1bnNp Z25lZCBsb25nIGZyZWVkOwo+IC0JYm9vbCB1bmxvY2s7Cj4gICAKPiAgIAlzYy0+bnJfc2Nhbm5l ZCA9IDA7Cj4gICAKPiAtCWlmICghc2hyaW5rZXJfbG9jayhpOTE1LCAwLCAmdW5sb2NrKSkKPiAt CQlyZXR1cm4gU0hSSU5LX1NUT1A7Cj4gLQo+ICAgCWZyZWVkID0gaTkxNV9nZW1fc2hyaW5rKGk5 MTUsCj4gICAJCQkJc2MtPm5yX3RvX3NjYW4sCj4gICAJCQkJJnNjLT5ucl9zY2FubmVkLAo+ICAg CQkJCUk5MTVfU0hSSU5LX0JPVU5EIHwKPiAtCQkJCUk5MTVfU0hSSU5LX1VOQk9VTkQgfAo+IC0J CQkJSTkxNV9TSFJJTktfV1JJVEVCQUNLKTsKPiArCQkJCUk5MTVfU0hSSU5LX1VOQk9VTkQpOwo+ ICAgCWlmIChzYy0+bnJfc2Nhbm5lZCA8IHNjLT5ucl90b19zY2FuICYmIGN1cnJlbnRfaXNfa3N3 YXBkKCkpIHsKPiAgIAkJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gICAKPiBAQCAtMzY2LDgg KzMyMSw2IEBAIGk5MTVfZ2VtX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtl ciwgc3RydWN0IHNocmlua19jb250cm9sICpzYykKPiAgIAkJfQo+ICAgCX0KPiAgIAo+IC0Jc2hy aW5rZXJfdW5sb2NrKGk5MTUsIHVubG9jayk7Cj4gLQo+ICAgCXJldHVybiBzYy0+bnJfc2Nhbm5l ZCA/IGZyZWVkIDogU0hSSU5LX1NUT1A7Cj4gICB9Cj4gICAKPiBAQCAtMzg0LDYgKzMzNyw3IEBA IGk5MTVfZ2VtX3Nocmlua2VyX29vbShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25l ZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCj4gICAJZnJlZWRfcGFnZXMgPSAwOwo+ICAgCXdpdGhf aW50ZWxfcnVudGltZV9wbSgmaTkxNS0+cnVudGltZV9wbSwgd2FrZXJlZikKPiAgIAkJZnJlZWRf cGFnZXMgKz0gaTkxNV9nZW1fc2hyaW5rKGk5MTUsIC0xVUwsIE5VTEwsCj4gKwkJCQkJICAgICAg IEk5MTVfU0hSSU5LX0FDVElWRSB8Cj4gICAJCQkJCSAgICAgICBJOTE1X1NIUklOS19CT1VORCB8 Cj4gICAJCQkJCSAgICAgICBJOTE1X1NIUklOS19VTkJPVU5EIHwKPiAgIAkJCQkJICAgICAgIEk5 MTVfU0hSSU5LX1dSSVRFQkFDSyk7Cj4gQEAgLTQxOSwxMCArMzczLDYgQEAgaTkxNV9nZW1fc2hy aW5rZXJfdm1hcChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50 LCB2b2lkICpwdHIKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgKm5leHQ7Cj4gICAJdW5zaWdu ZWQgbG9uZyBmcmVlZF9wYWdlcyA9IDA7Cj4gICAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4g LQlib29sIHVubG9jazsKPiAtCj4gLQlpZiAoIXNocmlua2VyX2xvY2soaTkxNSwgMCwgJnVubG9j aykpCj4gLQkJcmV0dXJuIE5PVElGWV9ET05FOwo+ICAgCj4gICAJd2l0aF9pbnRlbF9ydW50aW1l X3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKQo+ICAgCQlmcmVlZF9wYWdlcyArPSBpOTE1 X2dlbV9zaHJpbmsoaTkxNSwgLTFVTCwgTlVMTCwKPiBAQCAtNDM5LDE1ICszODksMTEgQEAgaTkx NV9nZW1fc2hyaW5rZXJfdm1hcChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBs b25nIGV2ZW50LCB2b2lkICpwdHIKPiAgIAkJaWYgKCF2bWEtPmlvbWFwIHx8IGk5MTVfdm1hX2lz X2FjdGl2ZSh2bWEpKQo+ICAgCQkJY29udGludWU7Cj4gICAKPiAtCQltdXRleF91bmxvY2soJmk5 MTUtPmdndHQudm0ubXV0ZXgpOwo+IC0JCWlmIChpOTE1X3ZtYV91bmJpbmQodm1hKSA9PSAwKQo+ ICsJCWlmIChfX2k5MTVfdm1hX3VuYmluZCh2bWEpID09IDApCj4gICAJCQlmcmVlZF9wYWdlcyAr PSBjb3VudDsKPiAtCQltdXRleF9sb2NrKCZpOTE1LT5nZ3R0LnZtLm11dGV4KTsKPiAgIAl9Cj4g ICAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5nZ3R0LnZtLm11dGV4KTsKPiAgIAo+IC0Jc2hyaW5rZXJf dW5sb2NrKGk5MTUsIHVubG9jayk7Cj4gLQo+ICAgCSoodW5zaWduZWQgbG9uZyAqKXB0ciArPSBm cmVlZF9wYWdlczsKPiAgIAlyZXR1cm4gTk9USUZZX0RPTkU7Cj4gICB9Cj4gQEAgLTQ5MCwyMiAr NDM2LDkgQEAgdm9pZCBpOTE1X2dlbV9zaHJpbmtlcl90YWludHNfbXV0ZXgoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsCj4gICAKPiAgIAlmc19yZWNsYWltX2FjcXVpcmUoR0ZQX0tFUk5F TCk7Cj4gICAKPiAtCS8qCj4gLQkgKiBBcyB3ZSBpbnZhcmlhYmx5IHJlbHkgb24gdGhlIHN0cnVj dF9tdXRleCB3aXRoaW4gdGhlIHNocmlua2VyLAo+IC0JICogYnV0IGhhdmUgYSBjb21wbGljYXRl ZCByZWN1cnNpb24gZGFuY2UsIHRhaW50IGFsbCB0aGUgbXV0ZXhlcyB1c2VkCj4gLQkgKiB3aXRo aW4gdGhlIHNocmlua2VyIHdpdGggdGhlIHN0cnVjdF9tdXRleC4gRm9yIGNvbXBsZXRlbmVzcywg d2UKPiAtCSAqIHRhaW50IHdpdGggYWxsIHN1YmNsYXNzIG9mIHN0cnVjdF9tdXRleCwgZXZlbiB0 aG91Z2ggd2Ugc2hvdWxkCj4gLQkgKiBvbmx5IG5lZWQgdGFpbnRpbmcgYnkgSTkxNV9NTV9OT1JN QUwgdG8gY2F0Y2ggcG9zc2libGUgQUJCQQo+IC0JICogZGVhZGxvY2tzIGZyb20gdXNpbmcgc3Ry dWN0X211dGV4IGluc2lkZSBAbXV0ZXguCj4gLQkgKi8KPiAtCW11dGV4X2FjcXVpcmUoJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXguZGVwX21hcCwKPiAtCQkgICAgICBJOTE1X01NX1NIUklOS0VSLCAw LCBfUkVUX0lQXyk7Cj4gLQo+ICAgCW11dGV4X2FjcXVpcmUoJm11dGV4LT5kZXBfbWFwLCAwLCAw LCBfUkVUX0lQXyk7Cj4gICAJbXV0ZXhfcmVsZWFzZSgmbXV0ZXgtPmRlcF9tYXAsIDAsIF9SRVRf SVBfKTsKPiAgIAo+IC0JbXV0ZXhfcmVsZWFzZSgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleC5kZXBf bWFwLCAwLCBfUkVUX0lQXyk7Cj4gLQo+ICAgCWZzX3JlY2xhaW1fcmVsZWFzZShHRlBfS0VSTkVM KTsKPiAgIAo+ICAgCWlmICh1bmxvY2spCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9zdG9sZW4uYwo+IGluZGV4IGU0NWViODcyMTg1MC4uZmFkOThhOTIxY2RlIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zdG9sZW4uYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zdG9sZW4uYwo+IEBAIC02MjQsOCAr NjI0LDYgQEAgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zdG9sZW5fZm9yX3ByZWFsbG9jYXRlZChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYKPiAgIAlpZiAoIWRybV9tbV9pbml0aWFs aXplZCgmZGV2X3ByaXYtPm1tLnN0b2xlbikpCj4gICAJCXJldHVybiBOVUxMOwo+ICAgCj4gLQls b2NrZGVwX2Fzc2VydF9oZWxkKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAg CURSTV9ERUJVR19EUklWRVIoImNyZWF0aW5nIHByZWFsbG9jYXRlZCBzdG9sZW4gb2JqZWN0OiBz dG9sZW5fb2Zmc2V0PSVwYSwgZ3R0X29mZnNldD0lcGEsIHNpemU9JXBhXG4iLAo+ICAgCQkJICZz dG9sZW5fb2Zmc2V0LCAmZ3R0X29mZnNldCwgJnNpemUpOwo+ICAgCj4gQEAgLTY3NywyMSArNjc1 LDI1IEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuX2Zvcl9wcmVhbGxvY2F0ZWQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Cj4gICAJICogc2V0dGluZyB1cCB0aGUgR1RU IHNwYWNlLiBUaGUgYWN0dWFsIHJlc2VydmF0aW9uIHdpbGwgb2NjdXIKPiAgIAkgKiBsYXRlci4K PiAgIAkgKi8KPiArCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAlyZXQgPSBpOTE1 X2dlbV9ndHRfcmVzZXJ2ZSgmZ2d0dC0+dm0sICZ2bWEtPm5vZGUsCj4gICAJCQkJICAgc2l6ZSwg Z3R0X29mZnNldCwgb2JqLT5jYWNoZV9sZXZlbCwKPiAgIAkJCQkgICAwKTsKPiAgIAlpZiAocmV0 KSB7Cj4gICAJCURSTV9ERUJVR19EUklWRVIoImZhaWxlZCB0byBhbGxvY2F0ZSBzdG9sZW4gR1RU IHNwYWNlXG4iKTsKPiArCQltdXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAkJZ290 byBlcnJfcGFnZXM7Cj4gICAJfQo+ICAgCj4gICAJR0VNX0JVR19PTighZHJtX21tX25vZGVfYWxs b2NhdGVkKCZ2bWEtPm5vZGUpKTsKPiAgIAo+ICsJR0VNX0JVR19PTih2bWEtPnBhZ2VzKTsKPiAg IAl2bWEtPnBhZ2VzID0gb2JqLT5tbS5wYWdlczsKPiArCWF0b21pY19zZXQoJnZtYS0+cGFnZXNf Y291bnQsIEk5MTVfVk1BX1BBR0VTX0FDVElWRSk7Cj4gKwo+ICAgCXNldF9iaXQoSTkxNV9WTUFf R0xPQkFMX0JJTkRfQklULCBfX2k5MTVfdm1hX2ZsYWdzKHZtYSkpOwo+ICAgCV9faTkxNV92bWFf c2V0X21hcF9hbmRfZmVuY2VhYmxlKHZtYSk7Cj4gICAKPiAtCW11dGV4X2xvY2soJmdndHQtPnZt Lm11dGV4KTsKPiAgIAlsaXN0X2FkZF90YWlsKCZ2bWEtPnZtX2xpbmssICZnZ3R0LT52bS5ib3Vu ZF9saXN0KTsKPiAgIAltdXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdGlsaW5nLmMKPiBpbmRleCBlNWQxYWU4ZDRk YmEuLmRjMmE4M2NlNDRkNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fdGlsaW5nLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fdGlsaW5nLmMKPiBAQCAtMTgxLDIyICsxODEsMjUgQEAgc3RhdGljIGludAo+ICAgaTkxNV9n ZW1fb2JqZWN0X2ZlbmNlX3ByZXBhcmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK PiAgIAkJCSAgICAgIGludCB0aWxpbmdfbW9kZSwgdW5zaWduZWQgaW50IHN0cmlkZSkKPiAgIHsK PiArCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmdG9faTkxNShvYmotPmJhc2UuZGV2KS0+Z2d0 dDsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0ID0g MDsKPiAgIAo+ICAgCWlmICh0aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FKQo+ICAgCQly ZXR1cm4gMDsKPiAgIAo+ICsJbXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCWZvcl9l YWNoX2dndHRfdm1hKHZtYSwgb2JqKSB7Cj4gICAJCWlmIChpOTE1X3ZtYV9mZW5jZV9wcmVwYXJl KHZtYSwgdGlsaW5nX21vZGUsIHN0cmlkZSkpCj4gICAJCQljb250aW51ZTsKPiAgIAo+IC0JCXJl dCA9IGk5MTVfdm1hX3VuYmluZCh2bWEpOwo+ICsJCXJldCA9IF9faTkxNV92bWFfdW5iaW5kKHZt YSk7Cj4gICAJCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gKwkJCWJyZWFrOwo+ICAgCX0K PiArCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCj4gLQlyZXR1cm4gMDsKPiAr CXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIGludAo+IEBAIC0yMTIsNyArMjE1LDYgQEAgaTkx NV9nZW1fb2JqZWN0X3NldF90aWxpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK PiAgIAo+ICAgCUdFTV9CVUdfT04oIWk5MTVfdGlsaW5nX29rKG9iaiwgdGlsaW5nLCBzdHJpZGUp KTsKPiAgIAlHRU1fQlVHX09OKCFzdHJpZGUgXiAodGlsaW5nID09IEk5MTVfVElMSU5HX05PTkUp KTsKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAg Cj4gICAJaWYgKCh0aWxpbmcgfCBzdHJpZGUpID09IG9iai0+dGlsaW5nX2FuZF9zdHJpZGUpCj4g ICAJCXJldHVybiAwOwo+IEBAIC0yMzMsMTYgKzIzNSwxOCBAQCBpOTE1X2dlbV9vYmplY3Rfc2V0 X3RpbGluZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCSAqIHdoaWxzdCBl eGVjdXRpbmcgYSBmZW5jZWQgY29tbWFuZCBmb3IgYW4gdW50aWxlZCBvYmplY3QuCj4gICAJICov Cj4gICAKPiAtCWVyciA9IGk5MTVfZ2VtX29iamVjdF9mZW5jZV9wcmVwYXJlKG9iaiwgdGlsaW5n LCBzdHJpZGUpOwo+IC0JaWYgKGVycikKPiAtCQlyZXR1cm4gZXJyOwo+IC0KPiAgIAlpOTE1X2dl bV9vYmplY3RfbG9jayhvYmopOwo+ICAgCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfZnJhbWVidWZm ZXIob2JqKSkgewo+ICAgCQlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKG9iaik7Cj4gICAJCXJldHVy biAtRUJVU1k7Cj4gICAJfQo+ICAgCj4gKwllcnIgPSBpOTE1X2dlbV9vYmplY3RfZmVuY2VfcHJl cGFyZShvYmosIHRpbGluZywgc3RyaWRlKTsKPiArCWlmIChlcnIpIHsKPiArCQlpOTE1X2dlbV9v YmplY3RfdW5sb2NrKG9iaik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gICAJLyogSWYg dGhlIG1lbW9yeSBoYXMgdW5rbm93biAoaS5lLiB2YXJ5aW5nKSBzd2l6emxpbmcsIHdlIHBpbiB0 aGUKPiAgIAkgKiBwYWdlcyB0byBwcmV2ZW50IHRoZW0gYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGNh dXNpbmcgY29ycnVwdGlvbgo+ICAgCSAqIGR1ZSB0byB0aGUgY2hhbmdlIGluIHN3aXp6bGluZy4K PiBAQCAtMzY4LDEyICszNzIsNyBAQCBpOTE1X2dlbV9zZXRfdGlsaW5nX2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCX0KPiAgIAl9Cj4gICAKPiAtCWVyciA9 IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKGVy cikKPiAtCQlnb3RvIGVycjsKPiAtCj4gICAJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3NldF90aWxp bmcob2JqLCBhcmdzLT50aWxpbmdfbW9kZSwgYXJncy0+c3RyaWRlKTsKPiAtCW11dGV4X3VubG9j aygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gICAJLyogV2UgaGF2ZSB0byBtYWludGFpbiB0 aGlzIGV4aXN0aW5nIEFCSS4uLiAqLwo+ICAgCWFyZ3MtPnN0cmlkZSA9IGk5MTVfZ2VtX29iamVj dF9nZXRfc3RyaWRlKG9iaik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f dXNlcnB0ci5jCj4gaW5kZXggMTFiMjMxYzE4N2M1Li4yNzU3M2VmOTAzYjQgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMKPiBAQCAtOTIsNyArOTIs NiBAQCB1c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmll ciAqX21uLAo+ICAgCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW4gPQo+ICAgCQljb250YWlu ZXJfb2YoX21uLCBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIsIG1uKTsKPiAgIAlzdHJ1Y3QgaW50 ZXJ2YWxfdHJlZV9ub2RlICppdDsKPiAtCXN0cnVjdCBtdXRleCAqdW5sb2NrID0gTlVMTDsKPiAg IAl1bnNpZ25lZCBsb25nIGVuZDsKPiAgIAlpbnQgcmV0ID0gMDsKPiAgIAo+IEBAIC0xMjksMzMg KzEyOCwxMyBAQCB1c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9u b3RpZmllciAqX21uLAo+ICAgCQl9Cj4gICAJCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7Cj4gICAK PiAtCQlpZiAoIXVubG9jaykgewo+IC0JCQl1bmxvY2sgPSAmbW4tPm1tLT5pOTE1LT5kcm0uc3Ry dWN0X211dGV4Owo+IC0KPiAtCQkJc3dpdGNoIChtdXRleF90cnlsb2NrX3JlY3Vyc2l2ZSh1bmxv Y2spKSB7Cj4gLQkJCWRlZmF1bHQ6Cj4gLQkJCWNhc2UgTVVURVhfVFJZTE9DS19GQUlMRUQ6Cj4g LQkJCQlpZiAobXV0ZXhfbG9ja19raWxsYWJsZV9uZXN0ZWQodW5sb2NrLCBJOTE1X01NX1NIUklO S0VSKSkgewo+IC0JCQkJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiAtCQkJCQlyZXR1cm4g LUVJTlRSOwo+IC0JCQkJfQo+IC0JCQkJLyogZmFsbCB0aHJvdWdoICovCj4gLQkJCWNhc2UgTVVU RVhfVFJZTE9DS19TVUNDRVNTOgo+IC0JCQkJYnJlYWs7Cj4gLQo+IC0JCQljYXNlIE1VVEVYX1RS WUxPQ0tfUkVDVVJTSVZFOgo+IC0JCQkJdW5sb2NrID0gRVJSX1BUUigtRUVYSVNUKTsKPiAtCQkJ CWJyZWFrOwo+IC0JCQl9Cj4gLQkJfQo+IC0KPiAgIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3Vu YmluZChvYmosCj4gICAJCQkJCSAgICAgSTkxNV9HRU1fT0JKRUNUX1VOQklORF9BQ1RJVkUpOwo+ ICAgCQlpZiAocmV0ID09IDApCj4gICAJCQlyZXQgPSBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFn ZXMob2JqLCBJOTE1X01NX1NIUklOS0VSKTsKPiAgIAkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmop Owo+ICAgCQlpZiAocmV0KQo+IC0JCQlnb3RvIHVubG9jazsKPiArCQkJcmV0dXJuIHJldDsKPiAg IAo+ICAgCQlzcGluX2xvY2soJm1uLT5sb2NrKTsKPiAgIAo+IEBAIC0xNjgsMTAgKzE0Nyw2IEBA IHVzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICpf bW4sCj4gICAJfQo+ICAgCXNwaW5fdW5sb2NrKCZtbi0+bG9jayk7Cj4gICAKPiAtdW5sb2NrOgo+ IC0JaWYgKCFJU19FUlJfT1JfTlVMTCh1bmxvY2spKQo+IC0JCW11dGV4X3VubG9jayh1bmxvY2sp Owo+IC0KPiAgIAlyZXR1cm4gcmV0Owo+ICAgCj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKPiBpbmRleCBjNWNlYTQzNzkyMTYuLjk4 YjJhNmNjZmNjMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRl c3RzL2h1Z2VfcGFnZXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVz dHMvaHVnZV9wYWdlcy5jCj4gQEAgLTMzMyw3ICszMzMsMTIgQEAgc3RhdGljIGludCBpZ3RfY2hl Y2tfcGFnZV9zaXplcyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IHZtYS0+dm0tPmk5MTU7Cj4gICAJdW5zaWduZWQgaW50IHN1cHBvcnRl ZCA9IElOVEVMX0lORk8oaTkxNSktPnBhZ2Vfc2l6ZXM7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOwo+IC0JaW50IGVyciA9IDA7Cj4gKwlpbnQgZXJyOwo+ ICsKPiArCS8qIFdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIGFzeW5jIGJpbmQgdG8gY29tcGxldGUg YmVmb3JlIG91ciBhc3NlcnRzICovCj4gKwllcnIgPSBpOTE1X3ZtYV9zeW5jKHZtYSk7Cj4gKwlp ZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gICAKPiAgIAlpZiAoIUhBU19QQUdFX1NJWkVTKGk5 MTUsIHZtYS0+cGFnZV9zaXplcy5zZykpIHsKPiAgIAkJcHJfZXJyKCJ1bnN1cHBvcnRlZCBwYWdl X3NpemVzLnNnPSV1LCBzdXBwb3J0ZWQ9JXVcbiIsCj4gQEAgLTEzOTAsNyArMTM5NSw3IEBAIHN0 YXRpYyBpbnQgaWd0X3BwZ3R0X3Bpbl91cGRhdGUodm9pZCAqYXJnKQo+ICAgCQkJZ290byBvdXRf dW5waW47Cj4gICAJCX0KPiAgIAo+IC0JCWVyciA9IGk5MTVfdm1hX2JpbmQodm1hLCBJOTE1X0NB Q0hFX05PTkUsIFBJTl9VUERBVEUpOwo+ICsJCWVyciA9IGk5MTVfdm1hX2JpbmQodm1hLCBJOTE1 X0NBQ0hFX05PTkUsIFBJTl9VUERBVEUsIE5VTEwpOwo+ICAgCQlpZiAoZXJyKQo+ICAgCQkJZ290 byBvdXRfdW5waW47Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IGRjMjViY2MzZTM3Mi4uNmVmM2Q3 NDVkYzhkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMv aTkxNV9nZW1fY29udGV4dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0 ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtNzQ3LDEwICs3NDcsNyBAQCBlbWl0X3JwY3Nf cXVlcnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlpZiAoZXJyKQo+ICAg CQlnb3RvIHNraXBfcmVxdWVzdDsKPiAgIAo+IC0JaTkxNV92bWFfdW5waW4oYmF0Y2gpOwo+IC0J aTkxNV92bWFfY2xvc2UoYmF0Y2gpOwo+IC0JaTkxNV92bWFfcHV0KGJhdGNoKTsKPiAtCj4gKwlp OTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmYmF0Y2gsIDApOwo+ICAgCWk5MTVfdm1hX3VucGlu KHZtYSk7Cj4gICAKPiAgIAkqcnFfb3V0ID0gaTkxNV9yZXF1ZXN0X2dldChycSk7Cj4gQEAgLTc2 NCw4ICs3NjEsNyBAQCBlbWl0X3JwY3NfcXVlcnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiAgIGVycl9yZXF1ZXN0Ogo+ICAgCWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+ICAgZXJy X2JhdGNoOgo+IC0JaTkxNV92bWFfdW5waW4oYmF0Y2gpOwo+IC0JaTkxNV92bWFfcHV0KGJhdGNo KTsKPiArCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZiYXRjaCwgMCk7Cj4gICBlcnJfdm1h Ogo+ICAgCWk5MTVfdm1hX3VucGluKHZtYSk7Cj4gICAKPiBAQCAtMTMwOSw5ICsxMzA1LDcgQEAg c3RhdGljIGludCB3cml0ZV90b19zY3JhdGNoKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgs Cj4gICAJaWYgKGVycikKPiAgIAkJZ290byBza2lwX3JlcXVlc3Q7Cj4gICAKPiAtCWk5MTVfdm1h X3VucGluKHZtYSk7Cj4gLQlpOTE1X3ZtYV9jbG9zZSh2bWEpOwo+IC0JaTkxNV92bWFfcHV0KHZt YSk7Cj4gKwlpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmdm1hLCAwKTsKPiAgIAo+ICAgCWk5 MTVfcmVxdWVzdF9hZGQocnEpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbW1hbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9tbWFuLmMKPiBpbmRleCBhZWZlNTU3NTI3ZjguLjM2YWNh MWMxNzJlNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3Rz L2k5MTVfZ2VtX21tYW4uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVz dHMvaTkxNV9nZW1fbW1hbi5jCj4gQEAgLTMyMiw3ICszMjIsNiBAQCBzdGF0aWMgaW50IGlndF9w YXJ0aWFsX3RpbGluZyh2b2lkICphcmcpCj4gICAJCWdvdG8gb3V0Owo+ICAgCX0KPiAgIAo+IC0J bXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJd2FrZXJlZiA9IGludGVs X3J1bnRpbWVfcG1fZ2V0KCZpOTE1LT5ydW50aW1lX3BtKTsKPiAgIAo+ICAgCWlmICgxKSB7Cj4g QEAgLTQxNSw3ICs0MTQsNiBAQCBuZXh0X3RpbGluZzogOwo+ICAgCj4gICBvdXRfdW5sb2NrOgo+ ICAgCWludGVsX3J1bnRpbWVfcG1fcHV0KCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKPiAt CW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJaTkxNV9nZW1fb2Jq ZWN0X3VucGluX3BhZ2VzKG9iaik7Cj4gICBvdXQ6Cj4gICAJaTkxNV9nZW1fb2JqZWN0X3B1dChv YmopOwo+IEBAIC00NTgsNyArNDU2LDYgQEAgc3RhdGljIGludCBpZ3Rfc21va2VfdGlsaW5nKHZv aWQgKmFyZykKPiAgIAkJZ290byBvdXQ7Cj4gICAJfQo+ICAgCj4gLQltdXRleF9sb2NrKCZpOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQo Jmk5MTUtPnJ1bnRpbWVfcG0pOwo+ICAgCj4gICAJY291bnQgPSAwOwo+IEBAIC01MDgsNyArNTA1 LDYgQEAgc3RhdGljIGludCBpZ3Rfc21va2VfdGlsaW5nKHZvaWQgKmFyZykKPiAgIAlwcl9pbmZv KCIlczogQ29tcGxldGVkICVsdSB0cmlhbHNcbiIsIF9fZnVuY19fLCBjb3VudCk7Cj4gICAKPiAg IAlpbnRlbF9ydW50aW1lX3BtX3B1dCgmaTkxNS0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gLQlt dXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWk5MTVfZ2VtX29iamVj dF91bnBpbl9wYWdlcyhvYmopOwo+ICAgb3V0Ogo+ICAgCWk5MTVfZ2VtX29iamVjdF9wdXQob2Jq KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3Rf Z2VtX3V0aWxzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1f dXRpbHMuYwo+IGluZGV4IGVlNWRjMTNhMzBiMy4uNjcxOGRhMjBmMzVkIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMKPiBA QCAtMTU0LDkgKzE1NCw3IEBAIGludCBpZ3RfZ3B1X2ZpbGxfZHcoc3RydWN0IGludGVsX2NvbnRl eHQgKmNlLAo+ICAgCj4gICAJaTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4gICAKPiAtCWk5MTVfdm1h X3VucGluKGJhdGNoKTsKPiAtCWk5MTVfdm1hX2Nsb3NlKGJhdGNoKTsKPiAtCWk5MTVfdm1hX3B1 dChiYXRjaCk7Cj4gKwlpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmYmF0Y2gsIDApOwo+ICAg Cj4gICAJcmV0dXJuIDA7Cj4gICAKPiBAQCAtMTY1LDcgKzE2Myw2IEBAIGludCBpZ3RfZ3B1X2Zp bGxfZHcoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAgZXJyX3JlcXVlc3Q6Cj4gICAJaTkx NV9yZXF1ZXN0X2FkZChycSk7Cj4gICBlcnJfYmF0Y2g6Cj4gLQlpOTE1X3ZtYV91bnBpbihiYXRj aCk7Cj4gLQlpOTE1X3ZtYV9wdXQoYmF0Y2gpOwo+ICsJaTkxNV92bWFfdW5waW5fYW5kX3JlbGVh c2UoJmJhdGNoLCAwKTsKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfZ3QuYwo+IGluZGV4IGVlZjliZGFlOGViYi4uOTVlNjdkYjUyNjY4IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCj4gQEAgLTMwMSwxMSArMzAxLDEyIEBAIHZvaWQgaW50 ZWxfZ3RfZmx1c2hfZ2d0dF93cml0ZXMoc3RydWN0IGludGVsX2d0ICpndCkKPiAgIAo+ICAgCXdp dGhfaW50ZWxfcnVudGltZV9wbSgmaTkxNS0+cnVudGltZV9wbSwgd2FrZXJlZikgewo+ICAgCQlz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwo+ICsJCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Cj4gICAKPiAtCQlzcGluX2xvY2tfaXJxKCZ1bmNvcmUtPmxvY2spOwo+ICsJCXNw aW5fbG9ja19pcnFzYXZlKCZ1bmNvcmUtPmxvY2ssIGZsYWdzKTsKPiAgIAkJaW50ZWxfdW5jb3Jl X3Bvc3RpbmdfcmVhZF9mdyh1bmNvcmUsCj4gICAJCQkJCSAgICAgUklOR19IRUFEKFJFTkRFUl9S SU5HX0JBU0UpKTsKPiAtCQlzcGluX3VubG9ja19pcnEoJnVuY29yZS0+bG9jayk7Cj4gKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmdW5jb3JlLT5sb2NrLCBmbGFncyk7Cj4gICAJfQo+ICAgfQo+ ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JpbmdidWZm ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3JpbmdidWZmZXIuYwo+IGluZGV4 IDA3NDdiOGM5Zjc2OC4uZWMzMjk5NjI1NGMwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX3JpbmdidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX3JpbmdidWZmZXIuYwo+IEBAIC0xMzM4LDE1ICsxMzM4LDEzIEBAIHZvaWQgaW50 ZWxfcmluZ19mcmVlKHN0cnVjdCBrcmVmICpyZWYpCj4gICB7Cj4gICAJc3RydWN0IGludGVsX3Jp bmcgKnJpbmcgPSBjb250YWluZXJfb2YocmVmLCB0eXBlb2YoKnJpbmcpLCByZWYpOwo+ICAgCj4g LQlpOTE1X3ZtYV9jbG9zZShyaW5nLT52bWEpOwo+ICAgCWk5MTVfdm1hX3B1dChyaW5nLT52bWEp Owo+IC0KPiAgIAlrZnJlZShyaW5nKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgX19yaW5n X2NvbnRleHRfZmluaShzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gICB7Cj4gLQlpOTE1X2dl bV9vYmplY3RfcHV0KGNlLT5zdGF0ZS0+b2JqKTsKPiArCWk5MTVfdm1hX3B1dChjZS0+c3RhdGUp Owo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZCByaW5nX2NvbnRleHRfZGVzdHJveShzdHJ1Y3Qg a3JlZiAqcmVmKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVz dF9oYW5nY2hlY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2hhbmdjaGVj ay5jCj4gaW5kZXggYTAwOThmYzM1OTIxLi5lNTNlZWExMDUwZjggMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwo+IEBAIC0xMTI3LDE1ICsxMTI3 LDE0IEBAIHN0YXRpYyBpbnQgZXZpY3Rfdm1hKHZvaWQgKmRhdGEpCj4gICB7Cj4gICAJc3RydWN0 IGV2aWN0X3ZtYSAqYXJnID0gZGF0YTsKPiAgIAlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSA9IGFyZy0+dm1hLT52bTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdm0t Pmk5MTU7Cj4gICAJc3RydWN0IGRybV9tbV9ub2RlIGV2aWN0ID0gYXJnLT52bWEtPm5vZGU7Cj4g ICAJaW50IGVycjsKPiAgIAo+ICAgCWNvbXBsZXRlKCZhcmctPmNvbXBsZXRpb24pOwo+ICAgCj4g LQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCW11dGV4X2xvY2soJnZt LT5tdXRleCk7Cj4gICAJZXJyID0gaTkxNV9nZW1fZXZpY3RfZm9yX25vZGUodm0sICZldmljdCwg MCk7Cj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhf dW5sb2NrKCZ2bS0+bXV0ZXgpOwo+ICAgCj4gICAJcmV0dXJuIGVycjsKPiAgIH0KPiBAQCAtMTE0 MywzOSArMTE0MiwzMyBAQCBzdGF0aWMgaW50IGV2aWN0X3ZtYSh2b2lkICpkYXRhKQo+ICAgc3Rh dGljIGludCBldmljdF9mZW5jZSh2b2lkICpkYXRhKQo+ICAgewo+ICAgCXN0cnVjdCBldmljdF92 bWEgKmFyZyA9IGRhdGE7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZy0+ dm1hLT52bS0+aTkxNTsKPiAgIAlpbnQgZXJyOwo+ICAgCj4gICAJY29tcGxldGUoJmFyZy0+Y29t cGxldGlvbik7Cj4gICAKPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ IC0KPiAgIAkvKiBNYXJrIHRoZSBmZW5jZSByZWdpc3RlciBhcyBkaXJ0eSB0byBmb3JjZSB0aGUg bW1pbyB1cGRhdGUuICovCj4gICAJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3NldF90aWxpbmcoYXJn LT52bWEtPm9iaiwgSTkxNV9USUxJTkdfWSwgNTEyKTsKPiAgIAlpZiAoZXJyKSB7Cj4gICAJCXBy X2VycigiSW52YWxpZCBZLXRpbGluZyBzZXR0aW5nczsgZXJyOiVkXG4iLCBlcnIpOwo+IC0JCWdv dG8gb3V0X3VubG9jazsKPiArCQlyZXR1cm4gZXJyOwo+ICAgCX0KPiAgIAo+ICAgCWVyciA9IGk5 MTVfdm1hX3BpbihhcmctPnZtYSwgMCwgMCwgUElOX0dMT0JBTCB8IFBJTl9NQVBQQUJMRSk7Cj4g ICAJaWYgKGVycikgewo+ICAgCQlwcl9lcnIoIlVuYWJsZSB0byBwaW4gdm1hIGZvciBZLXRpbGVk IGZlbmNlOyBlcnI6JWRcbiIsIGVycik7Cj4gLQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCXJldHVy biBlcnI7Cj4gICAJfQo+ICAgCj4gICAJZXJyID0gaTkxNV92bWFfcGluX2ZlbmNlKGFyZy0+dm1h KTsKPiAgIAlpOTE1X3ZtYV91bnBpbihhcmctPnZtYSk7Cj4gICAJaWYgKGVycikgewo+ICAgCQlw cl9lcnIoIlVuYWJsZSB0byBwaW4gWS10aWxlZCBmZW5jZTsgZXJyOiVkXG4iLCBlcnIpOwo+IC0J CWdvdG8gb3V0X3VubG9jazsKPiArCQlyZXR1cm4gZXJyOwo+ICAgCX0KPiAgIAo+ICAgCWk5MTVf dm1hX3VucGluX2ZlbmNlKGFyZy0+dm1hKTsKPiAgIAo+IC1vdXRfdW5sb2NrOgo+IC0JbXV0ZXhf dW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gLQlyZXR1cm4gZXJyOwo+ICsJ cmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQgX19pZ3RfcmVzZXRfZXZpY3Rfdm1h KHN0cnVjdCBpbnRlbF9ndCAqZ3QsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9hcGVydHVyZV9nbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2FwZXJ0dXJlX2dt LmMKPiBpbmRleCA1ZmYyNDM3YjI5OTguLmQ5OTZiYmM3ZWE1OSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvYXBlcnR1cmVfZ20uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9hcGVydHVyZV9nbS5jCj4gQEAgLTYxLDE0ICs2MSwxNCBAQCBzdGF0aWMgaW50 IGFsbG9jX2dtKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCBib29sIGhpZ2hfZ20pCj4gICAJCWZs YWdzID0gUElOX01BUFBBQkxFOwo+ICAgCX0KPiAgIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmdndHQudm0ubXV0 ZXgpOwo+ICAgCW1taW9faHdfYWNjZXNzX3ByZShkZXZfcHJpdik7Cj4gICAJcmV0ID0gaTkxNV9n ZW1fZ3R0X2luc2VydCgmZGV2X3ByaXYtPmdndHQudm0sIG5vZGUsCj4gICAJCQkJICBzaXplLCBJ OTE1X0dUVF9QQUdFX1NJWkUsCj4gICAJCQkJICBJOTE1X0NPTE9SX1VORVZJQ1RBQkxFLAo+ICAg CQkJCSAgc3RhcnQsIGVuZCwgZmxhZ3MpOwo+ICAgCW1taW9faHdfYWNjZXNzX3Bvc3QoZGV2X3By aXYpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlt dXRleF91bmxvY2soJmRldl9wcml2LT5nZ3R0LnZtLm11dGV4KTsKPiAgIAlpZiAocmV0KQo+ICAg CQlndnRfZXJyKCJmYWlsIHRvIGFsbG9jICVzIGdtIHNwYWNlIGZyb20gaG9zdFxuIiwKPiAgIAkJ CWhpZ2hfZ20gPyAiaGlnaCIgOiAibG93Iik7Cj4gQEAgLTk4LDkgKzk4LDkgQEAgc3RhdGljIGlu dCBhbGxvY192Z3B1X2dtKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KQo+ICAgCj4gICAJcmV0dXJu IDA7Cj4gICBvdXRfZnJlZV9hcGVydHVyZToKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0u c3RydWN0X211dGV4KTsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5nZ3R0LnZtLm11dGV4KTsK PiAgIAlkcm1fbW1fcmVtb3ZlX25vZGUoJnZncHUtPmdtLmxvd19nbV9ub2RlKTsKPiAtCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfdW5sb2NrKCZk ZXZfcHJpdi0+Z2d0dC52bS5tdXRleCk7Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+IEBA IC0xMDgsMTAgKzEwOCwxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX3ZncHVfZ20oc3RydWN0IGludGVs X3ZncHUgKnZncHUpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdmdwdS0+Z3Z0LT5kZXZfcHJpdjsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmdndHQudm0ubXV0ZXgp Owo+ICAgCWRybV9tbV9yZW1vdmVfbm9kZSgmdmdwdS0+Z20ubG93X2dtX25vZGUpOwo+ICAgCWRy bV9tbV9yZW1vdmVfbm9kZSgmdmdwdS0+Z20uaGlnaF9nbV9ub2RlKTsKPiAtCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+Z2d0dC52bS5tdXRleCk7Cj4gICB9Cj4gICAKPiAgIC8qKgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9hY3RpdmUuYwo+IGluZGV4IGQ1YWFjNmZmODAzYS4uMDc5MTczNmEwOGZkIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlLmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5jCj4gQEAgLTE0Niw2ICsxNDYsNyBAQCBfX2FjdGl2ZV9y ZXRpcmUoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpCj4gICAJaWYgKCFyZXRpcmUpCj4gICAJCXJl dHVybjsKPiAgIAo+ICsJR0VNX0JVR19PTihyY3VfYWNjZXNzX3BvaW50ZXIocmVmLT5leGNsKSk7 Cj4gICAJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0LCBuLCAmcm9vdCwg bm9kZSkgewo+ICAgCQlHRU1fQlVHX09OKGk5MTVfYWN0aXZlX3JlcXVlc3RfaXNzZXQoJml0LT5i YXNlKSk7Cj4gICAJCWttZW1fY2FjaGVfZnJlZShnbG9iYWwuc2xhYl9jYWNoZSwgaXQpOwo+IEBA IC0yNDUsNiArMjQ2LDggQEAgdm9pZCBfX2k5MTVfYWN0aXZlX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gICAJcmVmLT5mbGFncyA9IDA7Cj4gICAJcmVmLT5hY3RpdmUgPSBh Y3RpdmU7Cj4gICAJcmVmLT5yZXRpcmUgPSByZXRpcmU7Cj4gKwo+ICsJcmVmLT5leGNsID0gTlVM TDsKPiAgIAlyZWYtPnRyZWUgPSBSQl9ST09UOwo+ICAgCXJlZi0+Y2FjaGUgPSBOVUxMOwo+ICAg CWluaXRfbGxpc3RfaGVhZCgmcmVmLT5wcmVhbGxvY2F0ZWRfYmFycmllcnMpOwo+IEBAIC0zNDEs NiArMzQ0LDQ2IEBAIGludCBpOTE1X2FjdGl2ZV9yZWYoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYs Cj4gICAJcmV0dXJuIGVycjsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCBleGNsX2NiKHN0cnVj dCBkbWFfZmVuY2UgKmYsIHN0cnVjdCBkbWFfZmVuY2VfY2IgKmNiKQo+ICt7Cj4gKwlzdHJ1Y3Qg aTkxNV9hY3RpdmUgKnJlZiA9IGNvbnRhaW5lcl9vZihjYiwgdHlwZW9mKCpyZWYpLCBleGNsX2Ni KTsKPiArCj4gKwlSQ1VfSU5JVF9QT0lOVEVSKHJlZi0+ZXhjbCwgTlVMTCk7Cj4gKwlkbWFfZmVu Y2VfcHV0KGYpOwo+ICsKPiArCWFjdGl2ZV9yZXRpcmUocmVmKTsKPiArfQo+ICsKPiArdm9pZCBp OTE1X2FjdGl2ZV9zZXRfZXhjbHVzaXZlKHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmLCBzdHJ1Y3Qg ZG1hX2ZlbmNlICpmKQo+ICt7Cj4gKwkvKiBXZSBleHBlY3QgdGhlIGNhbGxlciB0byBtYW5hZ2Ug dGhlIGV4Y2x1c2l2ZSB0aW1lbGluZSBvcmRlcmluZyAqLwo+ICsJR0VNX0JVR19PTihpOTE1X2Fj dGl2ZV9pc19pZGxlKHJlZikpOwo+ICsKPiArCWRtYV9mZW5jZV9nZXQoZik7Cj4gKwo+ICsJcmN1 X3JlYWRfbG9jaygpOwo+ICsJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihyZWYtPmV4Y2wpKSB7Cj4g KwkJc3RydWN0IGRtYV9mZW5jZSAqb2xkOwo+ICsKPiArCQlvbGQgPSBkbWFfZmVuY2VfZ2V0X3Jj dV9zYWZlKCZyZWYtPmV4Y2wpOwo+ICsJCWlmIChvbGQpIHsKPiArCQkJaWYgKGRtYV9mZW5jZV9y ZW1vdmVfY2FsbGJhY2sob2xkLCAmcmVmLT5leGNsX2NiKSkKPiArCQkJCWF0b21pY19kZWMoJnJl Zi0+Y291bnQpOwo+ICsJCQlkbWFfZmVuY2VfcHV0KG9sZCk7Cj4gKwkJfQo+ICsJfQo+ICsJcmN1 X3JlYWRfdW5sb2NrKCk7Cj4gKwo+ICsJYXRvbWljX2luYygmcmVmLT5jb3VudCk7Cj4gKwlyY3Vf YXNzaWduX3BvaW50ZXIocmVmLT5leGNsLCBmKTsKPiArCj4gKwlpZiAoZG1hX2ZlbmNlX2FkZF9j YWxsYmFjayhmLCAmcmVmLT5leGNsX2NiLCBleGNsX2NiKSkgewo+ICsJCVJDVV9JTklUX1BPSU5U RVIocmVmLT5leGNsLCBOVUxMKTsKPiArCQlhdG9taWNfZGVjKCZyZWYtPmNvdW50KTsKPiArCQlk bWFfZmVuY2VfcHV0KGYpOwo+ICsJfQo+ICt9Cj4gKwo+ICAgaW50IGk5MTVfYWN0aXZlX2FjcXVp cmUoc3RydWN0IGk5MTVfYWN0aXZlICpyZWYpCj4gICB7Cj4gICAJaW50IGVycjsKPiBAQCAtMzk5 LDYgKzQ0MiwyNSBAQCB2b2lkIGk5MTVfYWN0aXZlX3VuZ3JhYihzdHJ1Y3QgaTkxNV9hY3RpdmUg KnJlZikKPiAgIAlfX2FjdGl2ZV91bmdyYWIocmVmKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50 IGV4Y2xfd2FpdChzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZikKPiArewo+ICsJc3RydWN0IGRtYV9m ZW5jZSAqb2xkOwo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJaWYgKCFyY3VfYWNjZXNzX3BvaW50 ZXIocmVmLT5leGNsKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyY3VfcmVhZF9sb2NrKCk7Cj4g KwlvbGQgPSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZlKCZyZWYtPmV4Y2wpOwo+ICsJcmN1X3JlYWRf dW5sb2NrKCk7Cj4gKwlpZiAob2xkKSB7Cj4gKwkJZXJyID0gZG1hX2ZlbmNlX3dhaXQob2xkLCB0 cnVlKTsKPiArCQlkbWFfZmVuY2VfcHV0KG9sZCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGVycjsK PiArfQo+ICsKPiAgIGludCBpOTE1X2FjdGl2ZV93YWl0KHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVm KQo+ICAgewo+ICAgCXN0cnVjdCBhY3RpdmVfbm9kZSAqaXQsICpuOwo+IEBAIC00MTksNiArNDgx LDEwIEBAIGludCBpOTE1X2FjdGl2ZV93YWl0KHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmKQo+ICAg CQlyZXR1cm4gMDsKPiAgIAl9Cj4gICAKPiArCWVyciA9IGV4Y2xfd2FpdChyZWYpOwo+ICsJaWYg KGVycikKPiArCQlnb3RvIG91dDsKPiArCj4gICAJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9l bnRyeV9zYWZlKGl0LCBuLCAmcmVmLT50cmVlLCBub2RlKSB7Cj4gICAJCWlmIChpc19iYXJyaWVy KCZpdC0+YmFzZSkpIHsgLyogdW5jb25uZWN0ZWQgaWRsZS1iYXJyaWVyICovCj4gICAJCQllcnIg PSAtRUJVU1k7Cj4gQEAgLTQzMCw2ICs0OTYsNyBAQCBpbnQgaTkxNV9hY3RpdmVfd2FpdChzdHJ1 Y3QgaTkxNV9hY3RpdmUgKnJlZikKPiAgIAkJCWJyZWFrOwo+ICAgCX0KPiAgIAo+ICtvdXQ6Cj4g ICAJX19hY3RpdmVfcmV0aXJlKHJlZik7Cj4gICAJaWYgKGVycikKPiAgIAkJcmV0dXJuIGVycjsK PiBAQCAtNDU0LDI2ICs1MjEsMjIgQEAgaW50IGk5MTVfcmVxdWVzdF9hd2FpdF9hY3RpdmVfcmVx dWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgIAo+ICAgaW50IGk5MTVfcmVxdWVzdF9h d2FpdF9hY3RpdmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHN0cnVjdCBpOTE1X2FjdGl2ZSAq cmVmKQo+ICAgewo+IC0Jc3RydWN0IGFjdGl2ZV9ub2RlICppdCwgKm47Cj4gLQlpbnQgZXJyOwo+ IC0KPiAtCWlmIChSQl9FTVBUWV9ST09UKCZyZWYtPnRyZWUpKQo+IC0JCXJldHVybiAwOwo+ICsJ aW50IGVyciA9IDA7Cj4gICAKPiAtCS8qIGF3YWl0IGFsbG9jYXRlcyBhbmQgc28gd2UgbmVlZCB0 byBhdm9pZCBoaXR0aW5nIHRoZSBzaHJpbmtlciAqLwo+IC0JZXJyID0gaTkxNV9hY3RpdmVfYWNx dWlyZShyZWYpOwo+IC0JaWYgKGVycikKPiAtCQlyZXR1cm4gZXJyOwo+ICsJaWYgKHJjdV9hY2Nl c3NfcG9pbnRlcihyZWYtPmV4Y2wpKSB7Cj4gKwkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4g ICAKPiAtCW11dGV4X2xvY2soJnJlZi0+bXV0ZXgpOwo+IC0JcmJ0cmVlX3Bvc3RvcmRlcl9mb3Jf ZWFjaF9lbnRyeV9zYWZlKGl0LCBuLCAmcmVmLT50cmVlLCBub2RlKSB7Cj4gLQkJZXJyID0gaTkx NV9yZXF1ZXN0X2F3YWl0X2FjdGl2ZV9yZXF1ZXN0KHJxLCAmaXQtPmJhc2UpOwo+IC0JCWlmIChl cnIpCj4gLQkJCWJyZWFrOwo+ICsJCXJjdV9yZWFkX2xvY2soKTsKPiArCQlmZW5jZSA9IGRtYV9m ZW5jZV9nZXRfcmN1X3NhZmUoJnJlZi0+ZXhjbCk7Cj4gKwkJcmN1X3JlYWRfdW5sb2NrKCk7Cj4g KwkJaWYgKGZlbmNlKSB7Cj4gKwkJCWVyciA9IGk5MTVfcmVxdWVzdF9hd2FpdF9kbWFfZmVuY2Uo cnEsIGZlbmNlKTsKPiArCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gKwkJfQo+ICAgCX0KPiAt CW11dGV4X3VubG9jaygmcmVmLT5tdXRleCk7Cj4gICAKPiAtCWk5MTVfYWN0aXZlX3JlbGVhc2Uo cmVmKTsKPiArCS8qIEluIHRoZSBmdXR1cmUgd2UgbWF5IGNob29zZSB0byBhd2FpdCBvbiBhbGwg ZmVuY2VzICovCj4gKwo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gICAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfYWN0aXZlLmgKPiBpbmRleCA5NDljNjgzNTMzNWIuLjkwMDM0ZjYxYjdjMiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZS5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9hY3RpdmUuaAo+IEBAIC0zNzksNiArMzc5LDEzIEBAIGk5MTVf YWN0aXZlX2FkZF9yZXF1ZXN0KHN0cnVjdCBpOTE1X2FjdGl2ZSAqcmVmLCBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSkKPiAgIAlyZXR1cm4gaTkxNV9hY3RpdmVfcmVmKHJlZiwgaTkxNV9yZXF1ZXN0 X3RpbWVsaW5lKHJxKSwgcnEpOwo+ICAgfQo+ICAgCj4gK3ZvaWQgaTkxNV9hY3RpdmVfc2V0X2V4 Y2x1c2l2ZShzdHJ1Y3QgaTkxNV9hY3RpdmUgKnJlZiwgc3RydWN0IGRtYV9mZW5jZSAqZik7Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9hY3RpdmVfaGFzX2V4Y2x1c2l2ZShzdHJ1Y3Qg aTkxNV9hY3RpdmUgKnJlZikKPiArewo+ICsJcmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihyZWYt PmV4Y2wpOwo+ICt9Cj4gKwo+ICAgaW50IGk5MTVfYWN0aXZlX3dhaXQoc3RydWN0IGk5MTVfYWN0 aXZlICpyZWYpOwo+ICAgCj4gICBpbnQgaTkxNV9yZXF1ZXN0X2F3YWl0X2FjdGl2ZShzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9hY3RpdmVfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYWN0aXZlX3R5cGVz LmgKPiBpbmRleCAxODU0ZTdkMTY4YzEuLjg2ZTdhMjMyZWEzYyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2FjdGl2ZV90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9hY3RpdmVfdHlwZXMuaAo+IEBAIC04LDYgKzgsNyBAQAo+ICAgI2RlZmlu ZSBfSTkxNV9BQ1RJVkVfVFlQRVNfSF8KPiAgIAo+ICAgI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvbGxp c3QuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3Ji dHJlZS5oPgo+IEBAIC01MSw2ICs1MiwxMCBAQCBzdHJ1Y3QgaTkxNV9hY3RpdmUgewo+ICAgCXN0 cnVjdCBtdXRleCBtdXRleDsKPiAgIAlhdG9taWNfdCBjb3VudDsKPiAgIAo+ICsJLyogUHJlYWxs b2NhdGVkICJleGNsdXNpdmUiIG5vZGUgKi8KPiArCXN0cnVjdCBkbWFfZmVuY2UgX19yY3UgKmV4 Y2w7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlX2NiIGV4Y2xfY2I7Cj4gKwo+ICAgCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Cj4gICAjZGVmaW5lIEk5MTVfQUNUSVZFX0dSQUJfQklUIDAKPiAgIAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuYwo+IGluZGV4IGE5ZWU3M2I2MWY0ZC4uYWIwMGJhNmY2OTViIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gQEAgLTE4ODEsMTAgKzE4ODEsOCBAQCBzdGF0aWMg aW50IGk5MTVfZHJtX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgCWlmIChyZXQp Cj4gICAJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlLWVuYWJsZSBHR1RUXG4iKTsKPiAgIAo+IC0J bXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWk5MTVfZ2VtX3Jl c3RvcmVfZ3R0X21hcHBpbmdzKGRldl9wcml2KTsKPiAgIAlpOTE1X2dlbV9yZXN0b3JlX2ZlbmNl cyhkZXZfcHJpdik7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4 KTsKPiAgIAo+ICAgCWludGVsX2Nzcl91Y29kZV9yZXN1bWUoZGV2X3ByaXYpOwo+ICAgCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggYjhmN2ZlMzExYjBhLi45MzRlYTc3NmE0NmEgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtNjIsMjAgKzYyLDMxIEBACj4gICAjaW5j bHVkZSAiaW50ZWxfcG0uaCIKPiAgIAo+ICAgc3RhdGljIGludAo+IC1pbnNlcnRfbWFwcGFibGVf bm9kZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LAo+IC0gICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHJtX21tX25vZGUgKm5vZGUsIHUzMiBzaXplKQo+ICtpbnNlcnRfbWFwcGFibGVfbm9kZShz dHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsIHUzMiBzaXpl KQo+ICAgewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGli bGUoJmdndHQtPnZtLm11dGV4KTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4g ICAJbWVtc2V0KG5vZGUsIDAsIHNpemVvZigqbm9kZSkpOwo+IC0JcmV0dXJuIGRybV9tbV9pbnNl cnRfbm9kZV9pbl9yYW5nZSgmZ2d0dC0+dm0ubW0sIG5vZGUsCj4gLQkJCQkJICAgc2l6ZSwgMCwg STkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiAtCQkJCQkgICAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQs Cj4gLQkJCQkJICAgRFJNX01NX0lOU0VSVF9MT1cpOwo+ICsJZXJyID0gZHJtX21tX2luc2VydF9u b2RlX2luX3JhbmdlKCZnZ3R0LT52bS5tbSwgbm9kZSwKPiArCQkJCQkgIHNpemUsIDAsIEk5MTVf Q09MT1JfVU5FVklDVEFCTEUsCj4gKwkJCQkJICAwLCBnZ3R0LT5tYXBwYWJsZV9lbmQsCj4gKwkJ CQkJICBEUk1fTU1fSU5TRVJUX0xPVyk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5t dXRleCk7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAt cmVtb3ZlX21hcHBhYmxlX25vZGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQo+ICtyZW1vdmVf bWFwcGFibGVfbm9kZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LCBzdHJ1Y3QgZHJtX21tX25vZGUg Km5vZGUpCj4gICB7Cj4gKwltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJZHJtX21t X3JlbW92ZV9ub2RlKG5vZGUpOwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4g ICB9Cj4gICAKPiAgIGludAo+IEBAIC04Nyw3ICs5OCw4IEBAIGk5MTVfZ2VtX2dldF9hcGVydHVy ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCXN0cnVjdCBp OTE1X3ZtYSAqdm1hOwo+ICAgCXU2NCBwaW5uZWQ7Cj4gICAKPiAtCW11dGV4X2xvY2soJmdndHQt PnZtLm11dGV4KTsKPiArCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdndHQtPnZtLm11 dGV4KSkKPiArCQlyZXR1cm4gLUVJTlRSOwo+ICAgCj4gICAJcGlubmVkID0gZ2d0dC0+dm0ucmVz ZXJ2ZWQ7Cj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZnZ3R0LT52bS5ib3VuZF9saXN0 LCB2bV9saW5rKQo+IEBAIC0xMDksMjAgKzEyMSwyNCBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0X3Vu YmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCUxJU1RfSEVBRChzdGls bF9pbl9saXN0KTsKPiAgIAlpbnQgcmV0ID0gMDsKPiAgIAo+IC0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiAtCj4gICAJc3Bpbl9sb2NrKCZvYmot PnZtYS5sb2NrKTsKPiAgIAl3aGlsZSAoIXJldCAmJiAodm1hID0gbGlzdF9maXJzdF9lbnRyeV9v cl9udWxsKCZvYmotPnZtYS5saXN0LAo+ICAgCQkJCQkJICAgICAgIHN0cnVjdCBpOTE1X3ZtYSwK PiAgIAkJCQkJCSAgICAgICBvYmpfbGluaykpKSB7Cj4gKwkJc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0gPSB2bWEtPnZtOwo+ICsKPiArCQlyZXQgPSAtRUJVU1k7Cj4gKwkJaWYgKCFpOTE1 X3ZtX3RyeW9wZW4odm0pKQo+ICsJCQlicmVhazsKPiArCj4gICAJCWxpc3RfbW92ZV90YWlsKCZ2 bWEtPm9ial9saW5rLCAmc3RpbGxfaW5fbGlzdCk7Cj4gICAJCXNwaW5fdW5sb2NrKCZvYmotPnZt YS5sb2NrKTsKPiAgIAo+IC0JCXJldCA9IC1FQlVTWTsKPiAgIAkJaWYgKGZsYWdzICYgSTkxNV9H RU1fT0JKRUNUX1VOQklORF9BQ1RJVkUgfHwKPiAgIAkJICAgICFpOTE1X3ZtYV9pc19hY3RpdmUo dm1hKSkKPiAgIAkJCXJldCA9IGk5MTVfdm1hX3VuYmluZCh2bWEpOwo+ICAgCj4gKwkJaTkxNV92 bV9jbG9zZSh2bSk7Cj4gICAJCXNwaW5fbG9jaygmb2JqLT52bWEubG9jayk7Cj4gICAJfQo+ICAg CWxpc3Rfc3BsaWNlKCZzdGlsbF9pbl9saXN0LCAmb2JqLT52bWEubGlzdCk7Cj4gQEAgLTMzOCwx MCArMzU0LDYgQEAgaTkxNV9nZW1fZ3R0X3ByZWFkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gICAJdTY0IHJlbWFpbiwgb2Zmc2V0Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXJl dCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g LQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ICAgCXdha2VyZWYgPSBpbnRlbF9ydW50 aW1lX3BtX2dldCgmaTkxNS0+cnVudGltZV9wbSk7Cj4gICAJdm1hID0gRVJSX1BUUigtRU5PREVW KTsKPiAgIAlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc190aWxlZChvYmopKQo+IEBAIC0zNTUsMTIg KzM2NywxMCBAQCBpOTE1X2dlbV9ndHRfcHJlYWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwKPiAgIAl9IGVsc2Ugewo+ICAgCQlyZXQgPSBpbnNlcnRfbWFwcGFibGVfbm9kZShnZ3R0 LCAmbm9kZSwgUEFHRV9TSVpFKTsKPiAgIAkJaWYgKHJldCkKPiAtCQkJZ290byBvdXRfdW5sb2Nr Owo+ICsJCQlnb3RvIG91dF9ycG07Cj4gICAJCUdFTV9CVUdfT04oIWRybV9tbV9ub2RlX2FsbG9j YXRlZCgmbm9kZSkpOwo+ICAgCX0KPiAgIAo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiAtCj4gICAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2xvY2tfaW50ZXJydXB0 aWJsZShvYmopOwo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gb3V0X3VucGluOwo+IEBAIC00MTQs MTcgKzQyNCwxNCBAQCBpOTE1X2dlbV9ndHRfcHJlYWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgIAo+ICAgCWk5MTVfZ2VtX29iamVjdF91bmxvY2tfZmVuY2Uob2JqLCBmZW5j ZSk7Cj4gICBvdXRfdW5waW46Cj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPiAgIAlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZub2RlKSkgewo+ICAgCQlnZ3R0LT52 bS5jbGVhcl9yYW5nZSgmZ2d0dC0+dm0sIG5vZGUuc3RhcnQsIG5vZGUuc2l6ZSk7Cj4gLQkJcmVt b3ZlX21hcHBhYmxlX25vZGUoJm5vZGUpOwo+ICsJCXJlbW92ZV9tYXBwYWJsZV9ub2RlKGdndHQs ICZub2RlKTsKPiAgIAl9IGVsc2Ugewo+ICAgCQlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICAgCX0K PiAtb3V0X3VubG9jazoKPiArb3V0X3JwbToKPiAgIAlpbnRlbF9ydW50aW1lX3BtX3B1dCgmaTkx NS0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+IC0KPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gQEAgLTUzMSwxMCAr NTM4LDYgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCj4gICAJdm9pZCBfX3VzZXIgKnVzZXJfZGF0YTsKPiAgIAlpbnQgcmV0Owo+ICAg Cj4gLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgIAlpZiAoaTkxNV9nZW1f b2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShvYmopKSB7Cj4gICAJCS8qCj4gICAJCSAqIEF2b2lkIHdh a2luZyB0aGUgZGV2aWNlIHVwIGlmIHdlIGNhbiBmYWxsYmFjaywgYXMKPiBAQCAtNTQ0LDEwICs1 NDcsOCBAQCBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgIAkJICogdXNpbmcgdGhlIGNhY2hlIGJ5cGFzcyBvZiBpbmRpcmVjdCBHR1RU IGFjY2Vzcy4KPiAgIAkJICovCj4gICAJCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldF9p Zl9pbl91c2UocnBtKTsKPiAtCQlpZiAoIXdha2VyZWYpIHsKPiAtCQkJcmV0ID0gLUVGQVVMVDsK PiAtCQkJZ290byBvdXRfdW5sb2NrOwo+IC0JCX0KPiArCQlpZiAoIXdha2VyZWYpCj4gKwkJCXJl dHVybiAtRUZBVUxUOwo+ICAgCX0gZWxzZSB7Cj4gICAJCS8qIE5vIGJhY2tpbmcgcGFnZXMsIG5v IGZhbGxiYWNrLCB3ZSBtdXN0IGZvcmNlIEdHVFQgYWNjZXNzICovCj4gICAJCXdha2VyZWYgPSBp bnRlbF9ydW50aW1lX3BtX2dldChycG0pOwo+IEBAIC01NjksOCArNTcwLDYgQEAgaTkxNV9nZW1f Z3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCUdF TV9CVUdfT04oIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmbm9kZSkpOwo+ICAgCX0KPiAgIAo+IC0J bXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJcmV0ID0gaTkx NV9nZW1fb2JqZWN0X2xvY2tfaW50ZXJydXB0aWJsZShvYmopOwo+ICAgCWlmIChyZXQpCj4gICAJ CWdvdG8gb3V0X3VucGluOwo+IEBAIC02MzQsMTggKzYzMywxNSBAQCBpOTE1X2dlbV9ndHRfcHdy aXRlX2Zhc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAo+ICAgCWk5MTVf Z2VtX29iamVjdF91bmxvY2tfZmVuY2Uob2JqLCBmZW5jZSk7Cj4gICBvdXRfdW5waW46Cj4gLQlt dXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlpbnRlbF9ndF9mbHVzaF9n Z3R0X3dyaXRlcyhnZ3R0LT52bS5ndCk7Cj4gICAJaWYgKGRybV9tbV9ub2RlX2FsbG9jYXRlZCgm bm9kZSkpIHsKPiAgIAkJZ2d0dC0+dm0uY2xlYXJfcmFuZ2UoJmdndHQtPnZtLCBub2RlLnN0YXJ0 LCBub2RlLnNpemUpOwo+IC0JCXJlbW92ZV9tYXBwYWJsZV9ub2RlKCZub2RlKTsKPiArCQlyZW1v dmVfbWFwcGFibGVfbm9kZShnZ3R0LCAmbm9kZSk7Cj4gICAJfSBlbHNlIHsKPiAgIAkJaTkxNV92 bWFfdW5waW4odm1hKTsKPiAgIAl9Cj4gICBvdXRfcnBtOgo+ICAgCWludGVsX3J1bnRpbWVfcG1f cHV0KHJwbSwgd2FrZXJlZik7Cj4gLW91dF91bmxvY2s6Cj4gLQltdXRleF91bmxvY2soJmk5MTUt PmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiBAQCAtOTY4 LDggKzk2NCw2IEBAIGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAgCWludCByZXQ7Cj4g ICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7 Cj4gLQo+ICAgCWlmIChmbGFncyAmIFBJTl9NQVBQQUJMRSAmJgo+ICAgCSAgICAoIXZpZXcgfHwg dmlldy0+dHlwZSA9PSBJOTE1X0dHVFRfVklFV19OT1JNQUwpKSB7Cj4gICAJCS8qIElmIHRoZSBy ZXF1aXJlZCBzcGFjZSBpcyBsYXJnZXIgdGhhbiB0aGUgYXZhaWxhYmxlCj4gQEAgLTEwMTYsMTMg KzEwMTAsNiBAQCBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4oc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiwKPiAgIAkJCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPiAgIAkJfQo+ICAg Cj4gLQkJV0FSTihpOTE1X3ZtYV9pc19waW5uZWQodm1hKSwKPiAtCQkgICAgICJibyBpcyBhbHJl YWR5IHBpbm5lZCBpbiBnZ3R0IHdpdGggaW5jb3JyZWN0IGFsaWdubWVudDoiCj4gLQkJICAgICAi IG9mZnNldD0lMDh4LCByZXEuYWxpZ25tZW50PSVsbHgsIgo+IC0JCSAgICAgIiByZXEubWFwX2Fu ZF9mZW5jZWFibGU9JWQsIHZtYS0+bWFwX2FuZF9mZW5jZWFibGU9JWRcbiIsCj4gLQkJICAgICBp OTE1X2dndHRfb2Zmc2V0KHZtYSksIGFsaWdubWVudCwKPiAtCQkgICAgICEhKGZsYWdzICYgUElO X01BUFBBQkxFKSwKPiAtCQkgICAgIGk5MTVfdm1hX2lzX21hcF9hbmRfZmVuY2VhYmxlKHZtYSkp Owo+ICAgCQlyZXQgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKPiAgIAkJaWYgKHJldCkKPiAgIAkJ CXJldHVybiBFUlJfUFRSKHJldCk7Cj4gQEAgLTE0NDEsOCArMTQyOCw2IEBAIGludCBpOTE1X2dl bV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIAl9Cj4gICAKPiAg IAlpZiAocmV0ID09IC1FSU8pIHsKPiAtCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4gLQo+ICAgCQkvKgo+ICAgCQkgKiBBbGxvdyBlbmdpbmVzIG9yIHVDIGluaXRp YWxpc2F0aW9uIHRvIGZhaWwgYnkgbWFya2luZyB0aGUgR1BVCj4gICAJCSAqIGFzIHdlZGdlZC4g QnV0IHdlIG9ubHkgd2FudCB0byBkbyB0aGlzIHdoZW4gdGhlIEdQVSBpcyBhbmdyeSwKPiBAQCAt MTQ1OSw4ICsxNDQ0LDYgQEAgaW50IGk5MTVfZ2VtX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICAgCQlpOTE1X2dlbV9yZXN0b3JlX2d0dF9tYXBwaW5ncyhkZXZfcHJp dik7Cj4gICAJCWk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKGRldl9wcml2KTsKPiAgIAkJaW50ZWxf aW5pdF9jbG9ja19nYXRpbmcoZGV2X3ByaXYpOwo+IC0KPiAtCQltdXRleF91bmxvY2soJmRldl9w cml2LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAl9Cj4gICAKPiAgIAlpOTE1X2dlbV9kcmFpbl9m cmVlZF9vYmplY3RzKGRldl9wcml2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZXZpY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0 LmMKPiBpbmRleCA4YzFlMDRmNDAyYmMuLjA1NTJiZjkzZWVhMyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZXZpY3QuYwo+IEBAIC00Nyw4ICs0Nyw3IEBAIHN0YXRpYyBpbnQgZ2d0 dF9mbHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAkgKiBib3VuZCBieSB0 aGVpciBhY3RpdmUgcmVmZXJlbmNlLgo+ICAgCSAqLwo+ICAgCXJldHVybiBpOTE1X2dlbV93YWl0 X2Zvcl9pZGxlKGk5MTUsCj4gLQkJCQkgICAgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8Cj4g LQkJCQkgICAgICBJOTE1X1dBSVRfTE9DS0VELAo+ICsJCQkJICAgICAgSTkxNV9XQUlUX0lOVEVS UlVQVElCTEUsCj4gICAJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ICAgfQo+ICAg Cj4gQEAgLTEwNCw3ICsxMDMsNyBAQCBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gICAJc3RydWN0IGk5MTVfdm1hICphY3RpdmU7Cj4gICAJ aW50IHJldDsKPiAgIAo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm0tPmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm0tPm11dGV4KTsKPiAgIAl0cmFj ZV9pOTE1X2dlbV9ldmljdCh2bSwgbWluX3NpemUsIGFsaWdubWVudCwgZmxhZ3MpOwo+ICAgCj4g ICAJLyoKPiBAQCAtMTI3LDE1ICsxMjYsNiBAQCBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gICAJCQkJICAgIG1pbl9zaXplLCBhbGlnbm1l bnQsIGNvbG9yLAo+ICAgCQkJCSAgICBzdGFydCwgZW5kLCBtb2RlKTsKPiAgIAo+IC0JLyoKPiAt CSAqIFJldGlyZSBiZWZvcmUgd2Ugc2VhcmNoIHRoZSBhY3RpdmUgbGlzdC4gQWx0aG91Z2ggd2Ug aGF2ZQo+IC0JICogcmVhc29uYWJsZSBhY2N1cmFjeSBpbiBvdXIgcmV0aXJlbWVudCBsaXN0cywg d2UgbWF5IGhhdmUKPiAtCSAqIGEgc3RyYXkgcGluIChwcmV2ZW50aW5nIGV2aWN0aW9uKSB0aGF0 IGNhbiBvbmx5IGJlIHJlc29sdmVkIGJ5Cj4gLQkgKiByZXRpcmluZy4KPiAtCSAqLwo+IC0JaWYg KCEoZmxhZ3MgJiBQSU5fTk9OQkxPQ0spKQo+IC0JCWk5MTVfcmV0aXJlX3JlcXVlc3RzKGRldl9w cml2KTsKPiAtCj4gICBzZWFyY2hfYWdhaW46Cj4gICAJYWN0aXZlID0gTlVMTDsKPiAgIAlJTklU X0xJU1RfSEVBRCgmZXZpY3Rpb25fbGlzdCk7Cj4gQEAgLTIzNSwxMiArMjI1LDEyIEBAIGk5MTVf Z2VtX2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgIAls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCBuZXh0LCAmZXZpY3Rpb25fbGlzdCwgZXZpY3Rf bGluaykgewo+ICAgCQlfX2k5MTVfdm1hX3VucGluKHZtYSk7Cj4gICAJCWlmIChyZXQgPT0gMCkK PiAtCQkJcmV0ID0gaTkxNV92bWFfdW5iaW5kKHZtYSk7Cj4gKwkJCXJldCA9IF9faTkxNV92bWFf dW5iaW5kKHZtYSk7Cj4gICAJfQo+ICAgCj4gICAJd2hpbGUgKHJldCA9PSAwICYmIChub2RlID0g ZHJtX21tX3NjYW5fY29sb3JfZXZpY3QoJnNjYW4pKSkgewo+ICAgCQl2bWEgPSBjb250YWluZXJf b2Yobm9kZSwgc3RydWN0IGk5MTVfdm1hLCBub2RlKTsKPiAtCQlyZXQgPSBpOTE1X3ZtYV91bmJp bmQodm1hKTsKPiArCQlyZXQgPSBfX2k5MTVfdm1hX3VuYmluZCh2bWEpOwo+ICAgCX0KPiAgIAo+ ICAgCXJldHVybiByZXQ7Cj4gQEAgLTI2OCw3ICsyNTgsNyBAQCBpbnQgaTkxNV9nZW1fZXZpY3Rf Zm9yX25vZGUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gICAJc3RydWN0IGk5MTVf dm1hICp2bWEsICpuZXh0Owo+ICAgCWludCByZXQgPSAwOwo+ICAgCj4gLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZ2bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZ2bS0+bXV0ZXgpOwo+ICAgCUdFTV9CVUdfT04oIUlTX0FMSUdORUQoc3RhcnQsIEk5MTVf R1RUX1BBR0VfU0laRSkpOwo+ICAgCUdFTV9CVUdfT04oIUlTX0FMSUdORUQoZW5kLCBJOTE1X0dU VF9QQUdFX1NJWkUpKTsKPiAgIAo+IEBAIC0zNDksNyArMzM5LDcgQEAgaW50IGk5MTVfZ2VtX2V2 aWN0X2Zvcl9ub2RlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAgCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZSh2bWEsIG5leHQsICZldmljdGlvbl9saXN0LCBldmljdF9saW5rKSB7 Cj4gICAJCV9faTkxNV92bWFfdW5waW4odm1hKTsKPiAgIAkJaWYgKHJldCA9PSAwKQo+IC0JCQly ZXQgPSBpOTE1X3ZtYV91bmJpbmQodm1hKTsKPiArCQkJcmV0ID0gX19pOTE1X3ZtYV91bmJpbmQo dm1hKTsKPiAgIAl9Cj4gICAKPiAgIAlyZXR1cm4gcmV0Owo+IEBAIC0zNzMsNyArMzYzLDcgQEAg aW50IGk5MTVfZ2VtX2V2aWN0X3ZtKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAg CXN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAqbmV4dDsKPiAgIAlpbnQgcmV0Owo+ICAgCj4gLQlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZ2bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlsb2NrZGVw X2Fzc2VydF9oZWxkKCZ2bS0+bXV0ZXgpOwo+ICAgCXRyYWNlX2k5MTVfZ2VtX2V2aWN0X3ZtKHZt KTsKPiAgIAo+ICAgCS8qIFN3aXRjaCBiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbnRleHQgaW4gb3Jk ZXIgdG8gdW5waW4KPiBAQCAtMzg4LDcgKzM3OCw2IEBAIGludCBpOTE1X2dlbV9ldmljdF92bShz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiAgIAl9Cj4gICAKPiAgIAlJTklUX0xJU1Rf SEVBRCgmZXZpY3Rpb25fbGlzdCk7Cj4gLQltdXRleF9sb2NrKCZ2bS0+bXV0ZXgpOwo+ICAgCWxp c3RfZm9yX2VhY2hfZW50cnkodm1hLCAmdm0tPmJvdW5kX2xpc3QsIHZtX2xpbmspIHsKPiAgIAkJ aWYgKGk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKQo+ICAgCQkJY29udGludWU7Cj4gQEAgLTM5Niwx MyArMzg1LDEyIEBAIGludCBpOTE1X2dlbV9ldmljdF92bShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSkKPiAgIAkJX19pOTE1X3ZtYV9waW4odm1hKTsKPiAgIAkJbGlzdF9hZGQoJnZtYS0+ ZXZpY3RfbGluaywgJmV2aWN0aW9uX2xpc3QpOwo+ICAgCX0KPiAtCW11dGV4X3VubG9jaygmdm0t Pm11dGV4KTsKPiAgIAo+ICAgCXJldCA9IDA7Cj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHZtYSwgbmV4dCwgJmV2aWN0aW9uX2xpc3QsIGV2aWN0X2xpbmspIHsKPiAgIAkJX19pOTE1X3Zt YV91bnBpbih2bWEpOwo+ICAgCQlpZiAocmV0ID09IDApCj4gLQkJCXJldCA9IGk5MTVfdm1hX3Vu YmluZCh2bWEpOwo+ICsJCQlyZXQgPSBfX2k5MTVfdm1hX3VuYmluZCh2bWEpOwo+ICAgCX0KPiAg IAlyZXR1cm4gcmV0Owo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9mZW5jZV9yZWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNl X3JlZy5jCj4gaW5kZXggNjE1YTlmNGVmMzBjLi40ODdiNzI2MWY3ZWQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2VfcmVnLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZV9yZWcuYwo+IEBAIC0yMzAsMTQgKzIzMCwxNSBA QCBzdGF0aWMgaW50IGZlbmNlX3VwZGF0ZShzdHJ1Y3QgaTkxNV9mZW5jZV9yZWcgKmZlbmNlLAo+ ICAgCQkJIGk5MTVfZ2VtX29iamVjdF9nZXRfdGlsaW5nKHZtYS0+b2JqKSkpCj4gICAJCQlyZXR1 cm4gLUVJTlZBTDsKPiAgIAo+IC0JCXJldCA9IGk5MTVfYWN0aXZlX3dhaXQoJnZtYS0+YWN0aXZl KTsKPiArCQlyZXQgPSBpOTE1X3ZtYV9zeW5jKHZtYSk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQly ZXR1cm4gcmV0Owo+ICAgCX0KPiAgIAo+ICAgCW9sZCA9IHhjaGcoJmZlbmNlLT52bWEsIE5VTEwp Owo+ICAgCWlmIChvbGQpIHsKPiAtCQlyZXQgPSBpOTE1X2FjdGl2ZV93YWl0KCZvbGQtPmFjdGl2 ZSk7Cj4gKwkJLyogWFhYIElkZWFsbHkgd2Ugd291bGQgbW92ZSB0aGUgd2FpdGluZyB0byBvdXRz aWRlIHRoZSBtdXRleCAqLwo+ICsJCXJldCA9IGk5MTVfdm1hX3N5bmMob2xkKTsKPiAgIAkJaWYg KHJldCkgewo+ICAgCQkJZmVuY2UtPnZtYSA9IG9sZDsKPiAgIAkJCXJldHVybiByZXQ7Cj4gQEAg LTMzMSwxMyArMzMyLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9mZW5jZV9yZWcgKmZlbmNlX2Zp bmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJcmV0dXJuIEVSUl9QVFIoLUVE RUFETEspOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgX19pOTE1X3ZtYV9waW5fZmVuY2Uoc3Ry dWN0IGk5MTVfdm1hICp2bWEpCj4gK2ludCBfX2k5MTVfdm1hX3Bpbl9mZW5jZShzdHJ1Y3QgaTkx NV92bWEgKnZtYSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gaTkxNV92bV90 b19nZ3R0KHZtYS0+dm0pOwo+ICAgCXN0cnVjdCBpOTE1X2ZlbmNlX3JlZyAqZmVuY2U7Cj4gICAJ c3RydWN0IGk5MTVfdm1hICpzZXQgPSBpOTE1X2dlbV9vYmplY3RfaXNfdGlsZWQodm1hLT5vYmop ID8gdm1hIDogTlVMTDsKPiAgIAlpbnQgZXJyOwo+ICAgCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxk KCZ2bWEtPnZtLT5tdXRleCk7Cj4gKwo+ICAgCS8qIEp1c3QgdXBkYXRlIG91ciBwbGFjZSBpbiB0 aGUgTFJVIGlmIG91ciBmZW5jZSBpcyBnZXR0aW5nIHJldXNlZC4gKi8KPiAgIAlpZiAodm1hLT5m ZW5jZSkgewo+ICAgCQlmZW5jZSA9IHZtYS0+ZmVuY2U7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZ3R0LmMKPiBpbmRleCA0ODNlZWZmODczMGUuLmEzNTFiOThhZmUwMyAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTE1MCwxNiArMTUwLDE4IEBAIHN0YXRpYyB2 b2lkIGdtY2hfZ2d0dF9pbnZhbGlkYXRlKHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gICAKPiAg IHN0YXRpYyBpbnQgcHBndHRfYmluZF92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gICAJCQkg IGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiAtCQkJICB1MzIgdW51c2VkKQo+ ICsJCQkgIHUzMiBmbGFncykKPiAgIHsKPiAgIAl1MzIgcHRlX2ZsYWdzOwo+ICAgCWludCBlcnI7 Cj4gICAKPiAtCWlmICghaTkxNV92bWFfaXNfYm91bmQodm1hLCBJOTE1X1ZNQV9MT0NBTF9CSU5E KSkgewo+ICsJaWYgKGZsYWdzICYgSTkxNV9WTUFfQUxMT0MpIHsKPiAgIAkJZXJyID0gdm1hLT52 bS0+YWxsb2NhdGVfdmFfcmFuZ2Uodm1hLT52bSwKPiAgIAkJCQkJCSB2bWEtPm5vZGUuc3RhcnQs IHZtYS0+c2l6ZSk7Cj4gICAJCWlmIChlcnIpCj4gICAJCQlyZXR1cm4gZXJyOwo+ICsKPiArCQlz ZXRfYml0KEk5MTVfVk1BX0FMTE9DX0JJVCwgX19pOTE1X3ZtYV9mbGFncyh2bWEpKTsKPiAgIAl9 Cj4gICAKPiAgIAkvKiBBcHBsaWNhYmxlIHRvIFZMViwgYW5kIGdlbjgrICovCj4gQEAgLTE2Nyw2 ICsxNjksNyBAQCBzdGF0aWMgaW50IHBwZ3R0X2JpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1h LAo+ICAgCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfcmVhZG9ubHkodm1hLT5vYmopKQo+ICAgCQlw dGVfZmxhZ3MgfD0gUFRFX1JFQURfT05MWTsKPiAgIAo+ICsJR0VNX0JVR19PTighdGVzdF9iaXQo STkxNV9WTUFfQUxMT0NfQklULCBfX2k5MTVfdm1hX2ZsYWdzKHZtYSkpKTsKPiAgIAl2bWEtPnZt LT5pbnNlcnRfZW50cmllcyh2bWEtPnZtLCB2bWEsIGNhY2hlX2xldmVsLCBwdGVfZmxhZ3MpOwo+ ICAgCXdtYigpOwo+ICAgCj4gQEAgLTE3NSw3ICsxNzgsOCBAQCBzdGF0aWMgaW50IHBwZ3R0X2Jp bmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICAgCj4gICBzdGF0aWMgdm9pZCBwcGd0dF91 bmJpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+IC0Jdm1hLT52bS0+Y2xlYXJf cmFuZ2Uodm1hLT52bSwgdm1hLT5ub2RlLnN0YXJ0LCB2bWEtPnNpemUpOwo+ICsJaWYgKHRlc3Rf YW5kX2NsZWFyX2JpdChJOTE1X1ZNQV9BTExPQ19CSVQsIF9faTkxNV92bWFfZmxhZ3Modm1hKSkp Cj4gKwkJdm1hLT52bS0+Y2xlYXJfcmFuZ2Uodm1hLT52bSwgdm1hLT5ub2RlLnN0YXJ0LCB2bWEt PnNpemUpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IHBwZ3R0X3NldF9wYWdlcyhzdHJ1Y3Qg aTkxNV92bWEgKnZtYSkKPiBAQCAtNTAzLDE1ICs1MDcsMjYgQEAgc3RhdGljIHZvaWQgaTkxNV9h ZGRyZXNzX3NwYWNlX2Zpbmkoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gICAJbXV0 ZXhfZGVzdHJveSgmdm0tPm11dGV4KTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBwcGd0dF9k ZXN0cm95X3ZtYShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiArdm9pZCBfX2k5MTVf dm1fY2xvc2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gICB7Cj4gICAJc3RydWN0 IGk5MTVfdm1hICp2bWEsICp2bjsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmdm0tPmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgdm4sICZ2bS0+ Ym91bmRfbGlzdCwgdm1fbGluaykKPiArCW11dGV4X2xvY2soJnZtLT5tdXRleCk7Cj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUodm1hLCB2biwgJnZtLT5ib3VuZF9saXN0LCB2bV9saW5rKSB7 Cj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOwo+ICsKPiAr CQkvKiBLZWVwIHRoZSBvYmogKGFuZCBoZW5jZSB0aGUgdm1hKSBhbGl2ZSBhcyBfd2VfIGRlc3Ry b3kgaXQgKi8KPiArCQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZvYmotPmJhc2UucmVmY291 bnQpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJYXRvbWljX2FuZCh+STkxNV9WTUFfUElOX01B U0ssICZ2bWEtPmZsYWdzKTsKPiArCQlXQVJOX09OKF9faTkxNV92bWFfdW5iaW5kKHZtYSkpOwo+ ICAgCQlpOTE1X3ZtYV9kZXN0cm95KHZtYSk7Cj4gKwo+ICsJCWk5MTVfZ2VtX29iamVjdF9wdXQo b2JqKTsKPiArCX0KPiAgIAlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZ2bS0+Ym91bmRfbGlzdCkp Owo+IC0JbXV0ZXhfdW5sb2NrKCZ2bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwltdXRl eF91bmxvY2soJnZtLT5tdXRleCk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIF9faTkxNV92 bV9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiBAQCAtNTE5LDggKzUzNCw2IEBA IHN0YXRpYyB2b2lkIF9faTkxNV92bV9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK PiAgIAlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSA9Cj4gICAJCWNvbnRhaW5lcl9vZih3 b3JrLCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlLCByY3Uud29yayk7Cj4gICAKPiAtCXBwZ3R0 X2Rlc3Ryb3lfdm1hKHZtKTsKPiAtCj4gICAJdm0tPmNsZWFudXAodm0pOwo+ICAgCWk5MTVfYWRk cmVzc19zcGFjZV9maW5pKHZtKTsKPiAgIAo+IEBAIC01MzUsNyArNTQ4LDYgQEAgdm9pZCBpOTE1 X3ZtX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCj4gICAJR0VNX0JVR19PTihpOTE1X2lzX2dn dHQodm0pKTsKPiAgIAl0cmFjZV9pOTE1X3BwZ3R0X3JlbGVhc2Uodm0pOwo+ICAgCj4gLQl2bS0+ Y2xvc2VkID0gdHJ1ZTsKPiAgIAlxdWV1ZV9yY3Vfd29yayh2bS0+aTkxNS0+d3EsICZ2bS0+cmN1 KTsKPiAgIH0KPiAgIAo+IEBAIC01NDMsNiArNTU1LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9hZGRy ZXNzX3NwYWNlX2luaXQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sIGludCBzdWJjbGFz cykKPiAgIHsKPiAgIAlrcmVmX2luaXQoJnZtLT5yZWYpOwo+ICAgCUlOSVRfUkNVX1dPUksoJnZt LT5yY3UsIF9faTkxNV92bV9yZWxlYXNlKTsKPiArCWF0b21pY19zZXQoJnZtLT5vcGVuLCAxKTsK PiAgIAo+ICAgCS8qCj4gICAJICogVGhlIHZtLT5tdXRleCBtdXN0IGJlIHJlY2xhaW0gc2FmZSAo Zm9yIHVzZSBpbiB0aGUgc2hyaW5rZXIpLgo+IEBAIC0xNzcxLDEyICsxNzg0LDggQEAgc3RhdGlj IHZvaWQgZ2VuNl9wcGd0dF9mcmVlX3BkKHN0cnVjdCBnZW42X3BwZ3R0ICpwcGd0dCkKPiAgIHN0 YXRpYyB2b2lkIGdlbjZfcHBndHRfY2xlYW51cChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZ2VuNl9wcGd0dCAqcHBndHQgPSB0b19nZW42X3BwZ3R0KGk5 MTVfdm1fdG9fcHBndHQodm0pKTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g dm0tPmk5MTU7Cj4gICAKPiAtCS8qIEZJWE1FIHJlbW92ZSB0aGUgc3RydWN0X211dGV4IHRvIGJy aW5nIHRoZSBsb2NraW5nIHVuZGVyIGNvbnRyb2wgKi8KPiAtCW11dGV4X2xvY2soJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWk5MTVfdm1hX2Rlc3Ryb3kocHBndHQtPnZtYSk7Cj4gLQlt dXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gICAJZ2VuNl9wcGd0 dF9mcmVlX3BkKHBwZ3R0KTsKPiAgIAlmcmVlX3NjcmF0Y2godm0pOwo+IEBAIC0xODY1LDcgKzE4 NzQsOCBAQCBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpwZF92bWFfY3JlYXRlKHN0cnVjdCBnZW42 X3BwZ3R0ICpwcGd0dCwgaW50IHNpemUpCj4gICAKPiAgIAlpOTE1X2FjdGl2ZV9pbml0KGk5MTUs ICZ2bWEtPmFjdGl2ZSwgTlVMTCwgTlVMTCk7Cj4gICAKPiAtCXZtYS0+dm0gPSAmZ2d0dC0+dm07 Cj4gKwltdXRleF9pbml0KCZ2bWEtPnBhZ2VzX211dGV4KTsKPiArCXZtYS0+dm0gPSBpOTE1X3Zt X2dldCgmZ2d0dC0+dm0pOwo+ICAgCXZtYS0+b3BzID0gJnBkX3ZtYV9vcHM7Cj4gICAJdm1hLT5w cml2YXRlID0gcHBndHQ7Cj4gICAKPiBAQCAtMTg4NSw3ICsxODk1LDcgQEAgaW50IGdlbjZfcHBn dHRfcGluKHN0cnVjdCBpOTE1X3BwZ3R0ICpiYXNlKQo+ICAgCXN0cnVjdCBnZW42X3BwZ3R0ICpw cGd0dCA9IHRvX2dlbjZfcHBndHQoYmFzZSk7Cj4gICAJaW50IGVyciA9IDA7Cj4gICAKPiAtCUdF TV9CVUdfT04ocHBndHQtPmJhc2Uudm0uY2xvc2VkKTsKPiArCUdFTV9CVUdfT04oIWF0b21pY19y ZWFkKCZwcGd0dC0+YmFzZS52bS5vcGVuKSk7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIFdvcmthcm91 bmQgdGhlIGxpbWl0ZWQgbWF4aW11bSB2bWEtPnBpbl9jb3VudCBhbmQgdGhlIGFsaWFzaW5nX3Bw Z3R0Cj4gQEAgLTI0NjMsMTQgKzI0NzMsMTggQEAgc3RhdGljIGludCBhbGlhc2luZ19ndHRfYmlu ZF92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gICAJaWYgKGZsYWdzICYgSTkxNV9WTUFfTE9D QUxfQklORCkgewo+ICAgCQlzdHJ1Y3QgaTkxNV9wcGd0dCAqYWxpYXMgPSBpOTE1X3ZtX3RvX2dn dHQodm1hLT52bSktPmFsaWFzOwo+ICAgCj4gLQkJaWYgKCFpOTE1X3ZtYV9pc19ib3VuZCh2bWEs IEk5MTVfVk1BX0xPQ0FMX0JJTkQpKSB7Cj4gKwkJaWYgKGZsYWdzICYgSTkxNV9WTUFfQUxMT0Mp IHsKPiAgIAkJCXJldCA9IGFsaWFzLT52bS5hbGxvY2F0ZV92YV9yYW5nZSgmYWxpYXMtPnZtLAo+ ICAgCQkJCQkJCSAgdm1hLT5ub2RlLnN0YXJ0LAo+ICAgCQkJCQkJCSAgdm1hLT5zaXplKTsKPiAg IAkJCWlmIChyZXQpCj4gICAJCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJCXNldF9iaXQoSTkxNV9W TUFfQUxMT0NfQklULCBfX2k5MTVfdm1hX2ZsYWdzKHZtYSkpOwo+ICAgCQl9Cj4gICAKPiArCQlH RU1fQlVHX09OKCF0ZXN0X2JpdChJOTE1X1ZNQV9BTExPQ19CSVQsCj4gKwkJCQkgICAgIF9faTkx NV92bWFfZmxhZ3Modm1hKSkpOwo+ICAgCQlhbGlhcy0+dm0uaW5zZXJ0X2VudHJpZXMoJmFsaWFz LT52bSwgdm1hLAo+ICAgCQkJCQkgY2FjaGVfbGV2ZWwsIHB0ZV9mbGFncyk7Cj4gICAJfQo+IEBA IC0yNDk5LDcgKzI1MTMsNyBAQCBzdGF0aWMgdm9pZCBhbGlhc2luZ19ndHRfdW5iaW5kX3ZtYShz dHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAkJCXZtLT5jbGVhcl9yYW5nZSh2bSwgdm1hLT5ub2Rl LnN0YXJ0LCB2bWEtPnNpemUpOwo+ICAgCX0KPiAgIAo+IC0JaWYgKGk5MTVfdm1hX2lzX2JvdW5k KHZtYSwgSTkxNV9WTUFfTE9DQUxfQklORCkpIHsKPiArCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQo STkxNV9WTUFfQUxMT0NfQklULCBfX2k5MTVfdm1hX2ZsYWdzKHZtYSkpKSB7Cj4gICAJCXN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0KPiAgIAkJCSZpOTE1X3ZtX3RvX2dndHQodm1hLT52 bSktPmFsaWFzLT52bTsKPiAgIAo+IEBAIC0yNjAyLDIyICsyNjE2LDE2IEBAIHN0YXRpYyBpbnQg aW5pdF9hbGlhc2luZ19wcGd0dChzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ICAgCj4gICBzdGF0 aWMgdm9pZCBmaW5pX2FsaWFzaW5nX3BwZ3R0KHN0cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gICB7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGdndHQtPnZtLmk5MTU7Cj4gICAJ c3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0Owo+ICAgCj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiAtCj4gICAJcHBndHQgPSBmZXRjaF9hbmRfemVybygmZ2d0dC0+YWxp YXMpOwo+ICAgCWlmICghcHBndHQpCj4gLQkJZ290byBvdXQ7Cj4gKwkJcmV0dXJuOwo+ICAgCj4g ICAJaTkxNV92bV9wdXQoJnBwZ3R0LT52bSk7Cj4gICAKPiAgIAlnZ3R0LT52bS52bWFfb3BzLmJp bmRfdm1hICAgPSBnZ3R0X2JpbmRfdm1hOwo+ICAgCWdndHQtPnZtLnZtYV9vcHMudW5iaW5kX3Zt YSA9IGdndHRfdW5iaW5kX3ZtYTsKPiAtCj4gLW91dDoKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQgZ2d0dF9yZXNlcnZl X2d1Y190b3Aoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPiBAQCAtMjczNCwzMiArMjc0MiwyOCBA QCBpbnQgaTkxNV9pbml0X2dndHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAK PiAgIHN0YXRpYyB2b2lkIGdndHRfY2xlYW51cF9odyhzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBnZ3R0LT52bS5pOTE1Owo+ ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hLCAqdm47Cj4gICAKPiAtCWdndHQtPnZtLmNsb3NlZCA9 IHRydWU7Cj4gKwlhdG9taWNfc2V0KCZnZ3R0LT52bS5vcGVuLCAwKTsKPiAgIAo+ICAgCXJjdV9i YXJyaWVyKCk7IC8qIGZsdXNoIHRoZSBSQ1UnZWRfX2k5MTVfdm1fcmVsZWFzZSAqLwo+IC0JZmx1 c2hfd29ya3F1ZXVlKGk5MTUtPndxKTsKPiArCWZsdXNoX3dvcmtxdWV1ZShnZ3R0LT52bS5pOTE1 LT53cSk7Cj4gICAKPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJ bXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCj4gICAJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHZtYSwgdm4sICZnZ3R0LT52bS5ib3VuZF9saXN0LCB2bV9saW5rKQo+IC0JCVdBUk5f T04oaTkxNV92bWFfdW5iaW5kKHZtYSkpOwo+ICsJCVdBUk5fT04oX19pOTE1X3ZtYV91bmJpbmQo dm1hKSk7Cj4gICAKPiAgIAlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZnZ3R0LT5lcnJvcl9j YXB0dXJlKSkKPiAgIAkJZHJtX21tX3JlbW92ZV9ub2RlKCZnZ3R0LT5lcnJvcl9jYXB0dXJlKTsK PiAgIAo+ICAgCWdndHRfcmVsZWFzZV9ndWNfdG9wKGdndHQpOwo+IC0KPiAtCWlmIChkcm1fbW1f aW5pdGlhbGl6ZWQoJmdndHQtPnZtLm1tKSkgewo+IC0JCWludGVsX3ZndF9kZWJhbGxvb24oZ2d0 dCk7Cj4gLQkJaTkxNV9hZGRyZXNzX3NwYWNlX2ZpbmkoJmdndHQtPnZtKTsKPiAtCX0KPiArCWlu dGVsX3ZndF9kZWJhbGxvb24oZ2d0dCk7Cj4gICAKPiAgIAlnZ3R0LT52bS5jbGVhbnVwKCZnZ3R0 LT52bSk7Cj4gICAKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g KwltdXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiArCWk5MTVfYWRkcmVzc19zcGFjZV9m aW5pKCZnZ3R0LT52bSk7Cj4gICAKPiAgIAlhcmNoX3BoeXNfd2NfZGVsKGdndHQtPm10cnIpOwo+ ICAgCWlvX21hcHBpbmdfZmluaSgmZ2d0dC0+aW9tYXApOwo+IEBAIC0zMTg4LDkgKzMxOTIsNiBA QCBpbnQgaTkxNV9nZ3R0X3Byb2JlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ ICAgc3RhdGljIGludCBnZ3R0X2luaXRfaHcoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPiAgIHsK PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGdndHQtPnZtLmk5MTU7Cj4gLQlp bnQgcmV0ID0gMDsKPiAtCj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsK PiAgIAo+ICAgCWk5MTVfYWRkcmVzc19zcGFjZV9pbml0KCZnZ3R0LT52bSwgVk1fQ0xBU1NfR0dU VCk7Cj4gICAKPiBAQCAtMzIwNiwxOCArMzIwNywxNCBAQCBzdGF0aWMgaW50IGdndHRfaW5pdF9o dyhzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ICAgCQkJCWdndHQtPmdtYWRyLnN0YXJ0LAo+ICAg CQkJCWdndHQtPm1hcHBhYmxlX2VuZCkpIHsKPiAgIAkJZ2d0dC0+dm0uY2xlYW51cCgmZ2d0dC0+ dm0pOwo+IC0JCXJldCA9IC1FSU87Cj4gLQkJZ290byBvdXQ7Cj4gKwkJcmV0dXJuIC1FSU87Cj4g ICAJfQo+ICAgCj4gICAJZ2d0dC0+bXRyciA9IGFyY2hfcGh5c193Y19hZGQoZ2d0dC0+Z21hZHIu c3RhcnQsIGdndHQtPm1hcHBhYmxlX2VuZCk7Cj4gICAKPiAgIAlpOTE1X2dndHRfaW5pdF9mZW5j ZXMoZ2d0dCk7Cj4gICAKPiAtb3V0Ogo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAg IC8qKgo+IEBAIC0zMjg5LDYgKzMyODYsNyBAQCBzdGF0aWMgdm9pZCBnZ3R0X3Jlc3RvcmVfbWFw cGluZ3Moc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCkKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEg KnZtYSwgKnZuOwo+ICAgCWJvb2wgZmx1c2ggPSBmYWxzZTsKPiArCWludCBvcGVuOwo+ICAgCj4g ICAJaW50ZWxfZ3RfY2hlY2tfYW5kX2NsZWFyX2ZhdWx0cyhnZ3R0LT52bS5ndCk7Cj4gICAKPiBA QCAtMzI5Niw3ICszMjk0LDkgQEAgc3RhdGljIHZvaWQgZ2d0dF9yZXN0b3JlX21hcHBpbmdzKHN0 cnVjdCBpOTE1X2dndHQgKmdndHQpCj4gICAKPiAgIAkvKiBGaXJzdCBmaWxsIG91ciBwb3J0aW9u IG9mIHRoZSBHVFQgd2l0aCBzY3JhdGNoIHBhZ2VzICovCj4gICAJZ2d0dC0+dm0uY2xlYXJfcmFu Z2UoJmdndHQtPnZtLCAwLCBnZ3R0LT52bS50b3RhbCk7Cj4gLQlnZ3R0LT52bS5jbG9zZWQgPSB0 cnVlOyAvKiBza2lwIHJld3JpdGluZyBQVEUgb24gVk1BIHVuYmluZCAqLwo+ICsKPiArCS8qIFNr aXAgcmV3cml0aW5nIFBURSBvbiBWTUEgdW5iaW5kLiAqLwo+ICsJb3BlbiA9IGF0b21pY194Y2hn KCZnZ3R0LT52bS5vcGVuLCAwKTsKPiAgIAo+ICAgCS8qIGNsZmx1c2ggb2JqZWN0cyBib3VuZCBp bnRvIHRoZSBHR1RUIGFuZCByZWJpbmQgdGhlbS4gKi8KPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUodm1hLCB2biwgJmdndHQtPnZtLmJvdW5kX2xpc3QsIHZtX2xpbmspIHsKPiBAQCAtMzMw NSwyNCArMzMwNSwyMCBAQCBzdGF0aWMgdm9pZCBnZ3R0X3Jlc3RvcmVfbWFwcGluZ3Moc3RydWN0 IGk5MTVfZ2d0dCAqZ2d0dCkKPiAgIAkJaWYgKCFpOTE1X3ZtYV9pc19ib3VuZCh2bWEsIEk5MTVf Vk1BX0dMT0JBTF9CSU5EKSkKPiAgIAkJCWNvbnRpbnVlOwo+ICAgCj4gLQkJbXV0ZXhfdW5sb2Nr KCZnZ3R0LT52bS5tdXRleCk7Cj4gLQo+IC0JCWlmICghaTkxNV92bWFfdW5iaW5kKHZtYSkpCj4g LQkJCWdvdG8gbG9jazsKPiArCQlpZiAoIV9faTkxNV92bWFfdW5iaW5kKHZtYSkpCj4gKwkJCWNv bnRpbnVlOwo+ICAgCj4gKwkJY2xlYXJfYml0KEk5MTVfVk1BX0dMT0JBTF9CSU5EX0JJVCwgX19p OTE1X3ZtYV9mbGFncyh2bWEpKTsKPiAgIAkJV0FSTl9PTihpOTE1X3ZtYV9iaW5kKHZtYSwKPiAg IAkJCQkgICAgICBvYmogPyBvYmotPmNhY2hlX2xldmVsIDogMCwKPiAtCQkJCSAgICAgIFBJTl9V UERBVEUpKTsKPiArCQkJCSAgICAgIFBJTl9HTE9CQUwsIE5VTEwpKTsKPiAgIAkJaWYgKG9iaikg eyAvKiBvbmx5IHVzZWQgZHVyaW5nIHJlc3VtZSA9PiBleGNsdXNpdmUgYWNjZXNzICovCj4gICAJ CQlmbHVzaCB8PSBmZXRjaF9hbmRfemVybygmb2JqLT53cml0ZV9kb21haW4pOwo+ICAgCQkJb2Jq LT5yZWFkX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlOX0dUVDsKPiAgIAkJfQo+IC0KPiAtbG9j azoKPiAtCQltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJfQo+ICAgCj4gLQlnZ3R0 LT52bS5jbG9zZWQgPSBmYWxzZTsKPiArCWF0b21pY19zZXQoJmdndHQtPnZtLm9wZW4sIG9wZW4p Owo+ICAgCWdndHQtPmludmFsaWRhdGUoZ2d0dCk7Cj4gICAKPiAgIAltdXRleF91bmxvY2soJmdn dHQtPnZtLm11dGV4KTsKPiBAQCAtMzcxNCw3ICszNzEwLDggQEAgaW50IGk5MTVfZ2VtX2d0dF9p bnNlcnQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gICAJdTY0IG9mZnNldDsKPiAg IAlpbnQgZXJyOwo+ICAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+aTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bS0+bXV0ZXgpOwo+ICsKPiAg IAlHRU1fQlVHX09OKCFzaXplKTsKPiAgIAlHRU1fQlVHX09OKCFJU19BTElHTkVEKHNpemUsIEk5 MTVfR1RUX1BBR0VfU0laRSkpOwo+ICAgCUdFTV9CVUdfT04oYWxpZ25tZW50ICYmICFpc19wb3dl cl9vZl8yKGFsaWdubWVudCkpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gaW5k ZXggZDhkZmEzODExZTU0Li4wMzQxOGRlZGU1MDMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuaAo+IEBAIC0zMDcsNyArMzA3LDE0IEBAIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2Ugewo+ICAgCj4gICAJdW5zaWduZWQgaW50IGJpbmRfYWxsb2M7Cj4gICAKPiAtCWJvb2wgY2xv c2VkOwo+ICsJLyoKPiArCSAqIEVhY2ggYWN0aXZlIHVzZXIgY29udGV4dCBoYXMgaXRzIG93biBh ZGRyZXNzIHNwYWNlIChpbiBmdWxsLXBwZ3R0KS4KPiArCSAqIFNpbmNlIHRoZSB2bSBtYXkgYmUg c2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgY29udGV4dHMsIHdlIGNvdW50IGhvdwo+ICsJICogbWFu eSBjb250ZXh0cyBrZWVwIHVzICJvcGVuIi4gT25jZSBvcGVuIGhpdHMgemVybywgd2UgYXJlIGNs b3NlZAo+ICsJICogYW5kIGRvIG5vdCBhbGxvdyBhbnkgbmV3IGF0dGFjaG1lbnRzLCBhbmQgcHJv Y2VlZCB0byBzaHV0ZG93biBvdXIKPiArCSAqIHZtYSBhbmQgcGFnZSBkaXJlY3Rvcmllcy4KPiAr CSAqLwo+ICsJYXRvbWljX3Qgb3BlbjsKPiAgIAo+ICAgCXN0cnVjdCBtdXRleCBtdXRleDsgLyog cHJvdGVjdHMgdm1hIGFuZCBvdXIgbGlzdHMgKi8KPiAgICNkZWZpbmUgVk1fQ0xBU1NfR0dUVCAw Cj4gQEAgLTU4MSw2ICs1ODgsMzUgQEAgc3RhdGljIGlubGluZSB2b2lkIGk5MTVfdm1fcHV0KHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAgCWtyZWZfcHV0KCZ2bS0+cmVmLCBpOTE1 X3ZtX3JlbGVhc2UpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqCj4gK2k5MTVfdm1fb3BlbihzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKPiArewo+ICsJR0VNX0JVR19PTighYXRvbWljX3JlYWQoJnZtLT5vcGVuKSk7Cj4gKwlhdG9t aWNfaW5jKCZ2bS0+b3Blbik7Cj4gKwlyZXR1cm4gaTkxNV92bV9nZXQodm0pOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIGJvb2wKPiAraTkxNV92bV90cnlvcGVuKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtKQo+ICt7Cj4gKwlpZiAoYXRvbWljX2FkZF91bmxlc3MoJnZtLT5vcGVuLCAx LCAwKSkKPiArCQlyZXR1cm4gaTkxNV92bV9nZXQodm0pOwo+ICsKPiArCXJldHVybiBmYWxzZTsK PiArfQo+ICsKPiArdm9pZCBfX2k5MTVfdm1fY2xvc2Uoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0pOwo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkCj4gK2k5MTVfdm1fY2xvc2Uoc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gK3sKPiArCUdFTV9CVUdfT04oIWF0b21pY19yZWFk KCZ2bS0+b3BlbikpOwo+ICsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnZtLT5vcGVuKSkKPiAr CQlfX2k5MTVfdm1fY2xvc2Uodm0pOwo+ICsKPiArCWk5MTVfdm1fcHV0KHZtKTsKPiArfQo+ICsK PiAgIGludCBnZW42X3BwZ3R0X3BpbihzdHJ1Y3QgaTkxNV9wcGd0dCAqYmFzZSk7Cj4gICB2b2lk IGdlbjZfcHBndHRfdW5waW4oc3RydWN0IGk5MTVfcHBndHQgKmJhc2UpOwo+ICAgdm9pZCBnZW42 X3BwZ3R0X3VucGluX2FsbChzdHJ1Y3QgaTkxNV9wcGd0dCAqYmFzZSk7Cj4gQEAgLTYxMywxMCAr NjQ5LDkgQEAgaW50IGk5MTVfZ2VtX2d0dF9pbnNlcnQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0sCj4gICAjZGVmaW5lIFBJTl9PRkZTRVRfQklBUwkJQklUX1VMTCg2KQo+ICAgI2RlZmlu ZSBQSU5fT0ZGU0VUX0ZJWEVECUJJVF9VTEwoNykKPiAgIAo+IC0jZGVmaW5lIFBJTl9NQloJCQlC SVRfVUxMKDgpIC8qIEk5MTVfVk1BX1BJTl9PVkVSRkxPVyAqLwo+IC0jZGVmaW5lIFBJTl9HTE9C QUwJCUJJVF9VTEwoOSkgLyogSTkxNV9WTUFfR0xPQkFMX0JJTkQgKi8KPiAtI2RlZmluZSBQSU5f VVNFUgkJQklUX1VMTCgxMCkgLyogSTkxNV9WTUFfTE9DQUxfQklORCAqLwo+IC0jZGVmaW5lIFBJ Tl9VUERBVEUJCUJJVF9VTEwoMTEpCj4gKyNkZWZpbmUgUElOX1VQREFURQkJQklUX1VMTCg5KQo+ ICsjZGVmaW5lIFBJTl9HTE9CQUwJCUJJVF9VTEwoMTApIC8qIEk5MTVfVk1BX0dMT0JBTF9CSU5E ICovCj4gKyNkZWZpbmUgUElOX1VTRVIJCUJJVF9VTEwoMTEpIC8qIEk5MTVfVk1BX0xPQ0FMX0JJ TkQgKi8KPiAgIAo+ICAgI2RlZmluZSBQSU5fT0ZGU0VUX01BU0sJCSgtSTkxNV9HVFRfUEFHRV9T SVpFKQo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPiBpbmRleCA1MjRmNjcxMGI3YWEu LjgwMDU1NTAxZWNjYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bl cmYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4gQEAgLTEyMDQs MTUgKzEyMDQsMTAgQEAgc3RhdGljIGludCBpOTE1X29hX3JlYWQoc3RydWN0IGk5MTVfcGVyZl9z dHJlYW0gKnN0cmVhbSwKPiAgIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqb2FfcGluX2Nv bnRleHQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIHsKPiAgIAlzdHJ1Y3Qg aTkxNV9nZW1fZW5naW5lc19pdGVyIGl0Owo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBzdHJlYW0tPmRldl9wcml2Owo+ICAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgg PSBzdHJlYW0tPmN0eDsKPiAgIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gICAJaW50IGVy cjsKPiAgIAo+IC0JZXJyID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmk5MTUtPmRy bSk7Cj4gLQlpZiAoZXJyKQo+IC0JCXJldHVybiBFUlJfUFRSKGVycik7Cj4gLQo+ICAgCWZvcl9l YWNoX2dlbV9lbmdpbmUoY2UsIGk5MTVfZ2VtX2NvbnRleHRfbG9ja19lbmdpbmVzKGN0eCksIGl0 KSB7Cj4gICAJCWlmIChjZS0+ZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gICAJCQlj b250aW51ZTsKPiBAQCAtMTIyOSwxMCArMTIyNCw2IEBAIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqb2FfcGluX2NvbnRleHQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAg IAl9Cj4gICAJaTkxNV9nZW1fY29udGV4dF91bmxvY2tfZW5naW5lcyhjdHgpOwo+ICAgCj4gLQlt dXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0JaWYgKGVycikKPiAtCQly ZXR1cm4gRVJSX1BUUihlcnIpOwo+IC0KPiAgIAlyZXR1cm4gc3RyZWFtLT5waW5uZWRfY3R4Owo+ ICAgfQo+ICAgCj4gQEAgLTEzMzEsMzIgKzEzMjIsMjIgQEAgc3RhdGljIGludCBvYV9nZXRfcmVu ZGVyX2N0eF9pZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgICovCj4gICBz dGF0aWMgdm9pZCBvYV9wdXRfcmVuZGVyX2N0eF9pZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAq c3RyZWFtKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3Ry ZWFtLT5kZXZfcHJpdjsKPiAgIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gICAKPiAgIAlz dHJlYW0tPnNwZWNpZmljX2N0eF9pZCA9IElOVkFMSURfQ1RYX0lEOwo+ICAgCXN0cmVhbS0+c3Bl Y2lmaWNfY3R4X2lkX21hc2sgPSAwOwo+ICAgCj4gICAJY2UgPSBmZXRjaF9hbmRfemVybygmc3Ry ZWFtLT5waW5uZWRfY3R4KTsKPiAtCWlmIChjZSkgewo+IC0JCW11dGV4X2xvY2soJmRldl9wcml2 LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWlmIChjZSkKPiAgIAkJaW50ZWxfY29udGV4dF91bnBp bihjZSk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g LQl9Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkCj4gICBmcmVlX29hX2J1ZmZlcihzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSBzdHJlYW0tPmRldl9wcml2Owo+IC0KPiAtCW11dGV4X2xvY2soJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmc3Ry ZWFtLT5vYV9idWZmZXIudm1hLAo+ICAgCQkJCSAgIEk5MTVfVk1BX1JFTEVBU0VfTUFQKTsKPiAg IAo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJc3Ry ZWFtLT5vYV9idWZmZXIudmFkZHIgPSBOVUxMOwo+ICAgfQo+ICAgCj4gQEAgLTE1MTEsMTggKzE0 OTIsMTMgQEAgc3RhdGljIGludCBhbGxvY19vYV9idWZmZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSkKPiAgIAlpZiAoV0FSTl9PTihzdHJlYW0tPm9hX2J1ZmZlci52bWEpKQo+ICAg CQlyZXR1cm4gLUVOT0RFVjsKPiAgIAo+IC0JcmV0ID0gaTkxNV9tdXRleF9sb2NrX2ludGVycnVw dGlibGUoJmRldl9wcml2LT5kcm0pOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0K PiAgIAlCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIoT0FfQlVGRkVSX1NJWkUpOwo+ICAgCUJV SUxEX0JVR19PTihPQV9CVUZGRVJfU0laRSA8IFNaXzEyOEsgfHwgT0FfQlVGRkVSX1NJWkUgPiBT Wl8xNk0pOwo+ICAgCj4gICAJYm8gPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGRldl9w cml2LCBPQV9CVUZGRVJfU0laRSk7Cj4gICAJaWYgKElTX0VSUihibykpIHsKPiAgIAkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgT0EgYnVmZmVyXG4iKTsKPiAtCQlyZXQgPSBQVFJfRVJS KGJvKTsKPiAtCQlnb3RvIHVubG9jazsKPiArCQlyZXR1cm4gUFRSX0VSUihibyk7Cj4gICAJfQo+ ICAgCj4gICAJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3koYm8sIEk5MTVfQ0FD SEVfTExDKTsKPiBAQCAtMTU0Niw3ICsxNTIyLDcgQEAgc3RhdGljIGludCBhbGxvY19vYV9idWZm ZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIAkJCSBpOTE1X2dndHRfb2Zm c2V0KHN0cmVhbS0+b2FfYnVmZmVyLnZtYSksCj4gICAJCQkgc3RyZWFtLT5vYV9idWZmZXIudmFk ZHIpOwo+ICAgCj4gLQlnb3RvIHVubG9jazsKPiArCXJldHVybiAwOwo+ICAgCj4gICBlcnJfdW5w aW46Cj4gICAJX19pOTE1X3ZtYV91bnBpbih2bWEpOwo+IEBAIC0xNTU3LDggKzE1MzMsNiBAQCBz dGF0aWMgaW50IGFsbG9jX29hX2J1ZmZlcihzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt KQo+ICAgCXN0cmVhbS0+b2FfYnVmZmVyLnZhZGRyID0gTlVMTDsKPiAgIAlzdHJlYW0tPm9hX2J1 ZmZlci52bWEgPSBOVUxMOwo+ICAgCj4gLXVubG9jazoKPiAtCW11dGV4X3VubG9jaygmZGV2X3By aXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfdm1hLmMKPiBpbmRleCBkMDk3Zjc3ODkwYmEuLmRlZmViOWJiMWRhYSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwo+IEBAIC0zMiw2ICszMiw3IEBACj4gICAKPiAgICNp bmNsdWRlICJpOTE1X2Rydi5oIgo+ICAgI2luY2x1ZGUgImk5MTVfZ2xvYmFscy5oIgo+ICsjaW5j bHVkZSAiaTkxNV9zd19mZW5jZV93b3JrLmgiCj4gICAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgo+ ICAgI2luY2x1ZGUgImk5MTVfdm1hLmgiCj4gICAKPiBAQCAtMTEwLDcgKzExMSw4IEBAIHZtYV9j cmVhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlpZiAodm1hID09IE5V TEwpCj4gICAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICAgCj4gLQl2bWEtPnZtID0gdm07 Cj4gKwltdXRleF9pbml0KCZ2bWEtPnBhZ2VzX211dGV4KTsKPiArCXZtYS0+dm0gPSBpOTE1X3Zt X2dldCh2bSk7Cj4gICAJdm1hLT5vcHMgPSAmdm0tPnZtYV9vcHM7Cj4gICAJdm1hLT5vYmogPSBv Ymo7Cj4gICAJdm1hLT5yZXN2ID0gb2JqLT5iYXNlLnJlc3Y7Cj4gQEAgLTI2MSw4ICsyNjMsNiBA QCB2bWFfbG9va3VwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAgKiBPbmNl IGNyZWF0ZWQsIHRoZSBWTUEgaXMga2VwdCB1bnRpbCBlaXRoZXIgdGhlIG9iamVjdCBpcyBmcmVl ZCwgb3IgdGhlCj4gICAgKiBhZGRyZXNzIHNwYWNlIGlzIGNsb3NlZC4KPiAgICAqCj4gLSAqIE11 c3QgYmUgY2FsbGVkIHdpdGggc3RydWN0X211dGV4IGhlbGQuCj4gLSAqCj4gICAgKiBSZXR1cm5z IHRoZSB2bWEsIG9yIGFuIGVycm9yIHBvaW50ZXIuCj4gICAgKi8KPiAgIHN0cnVjdCBpOTE1X3Zt YSAqCj4gQEAgLTI3Myw3ICsyNzMsNyBAQCBpOTE1X3ZtYV9pbnN0YW5jZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICAgCj4gICAJ R0VNX0JVR19PTih2aWV3ICYmICFpOTE1X2lzX2dndHQodm0pKTsKPiAtCUdFTV9CVUdfT04odm0t PmNsb3NlZCk7Cj4gKwlHRU1fQlVHX09OKCFhdG9taWNfcmVhZCgmdm0tPm9wZW4pKTsKPiAgIAo+ ICAgCXNwaW5fbG9jaygmb2JqLT52bWEubG9jayk7Cj4gICAJdm1hID0gdm1hX2xvb2t1cChvYmos IHZtLCB2aWV3KTsKPiBAQCAtMjg3LDE4ICsyODcsNjMgQEAgaTkxNV92bWFfaW5zdGFuY2Uoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlyZXR1cm4gdm1hOwo+ICAgfQo+ICAg Cj4gK3N0cnVjdCBpOTE1X3ZtYV93b3JrIHsKPiArCXN0cnVjdCBkbWFfZmVuY2Vfd29yayBiYXNl Owo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwllbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2Fj aGVfbGV2ZWw7Cj4gKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50 IF9fdm1hX2JpbmQoc3RydWN0IGRtYV9mZW5jZV93b3JrICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3Qg aTkxNV92bWFfd29yayAqdncgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCp2dyksIGJhc2Up Owo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWEgPSB2dy0+dm1hOwo+ICsJaW50IGVycjsKPiArCj4g KwllcnIgPSB2bWEtPm9wcy0+YmluZF92bWEodm1hLCB2dy0+Y2FjaGVfbGV2ZWwsIHZ3LT5mbGFn cyk7Cj4gKwlpZiAoZXJyKQo+ICsJCWF0b21pY19vcihJOTE1X1ZNQV9FUlJPUiwgJnZtYS0+Zmxh Z3MpOwo+ICsKPiArCWlmICh2bWEtPm9iaikKPiArCQlfX2k5MTVfZ2VtX29iamVjdF91bnBpbl9w YWdlcyh2bWEtPm9iaik7Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBkbWFfZmVuY2Vfd29ya19vcHMgYmluZF9vcHMgPSB7Cj4gKwkubmFtZSA9ICJi aW5kIiwKPiArCS53b3JrID0gX192bWFfYmluZCwKPiArfTsKPiArCj4gK3N0cnVjdCBpOTE1X3Zt YV93b3JrICppOTE1X3ZtYV93b3JrKHZvaWQpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3ZtYV93b3Jr ICp2dzsKPiArCj4gKwl2dyA9IGt6YWxsb2Moc2l6ZW9mKCp2dyksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCF2dykKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlkbWFfZmVuY2Vfd29ya19pbml0KCZ2 dy0+YmFzZSwgJmJpbmRfb3BzKTsKPiArCXZ3LT5iYXNlLmRtYS5lcnJvciA9IC1FQUdBSU47IC8q IGRpc2FibGUgdGhlIHdvcmtlciBieSBkZWZhdWx0ICovCj4gKwo+ICsJcmV0dXJuIHZ3Owo+ICt9 Cj4gKwo+ICAgLyoqCj4gICAgKiBpOTE1X3ZtYV9iaW5kIC0gU2V0cyB1cCBQVEVzIGZvciBhbiBW TUEgaW4gaXQncyBjb3JyZXNwb25kaW5nIGFkZHJlc3Mgc3BhY2UuCj4gICAgKiBAdm1hOiBWTUEg dG8gbWFwCj4gICAgKiBAY2FjaGVfbGV2ZWw6IG1hcHBpbmcgY2FjaGUgbGV2ZWwKPiAgICAqIEBm bGFnczogZmxhZ3MgbGlrZSBnbG9iYWwgb3IgbG9jYWwgbWFwcGluZwo+ICsgKiBAd29yazogcHJl YWxsb2NhdGVkIHdvcmtlciBmb3IgYWxsb2NhdGluZyBhbmQgYmluZGluZyB0aGUgUFRFCj4gICAg Kgo+ICAgICogRE1BIGFkZHJlc3NlcyBhcmUgdGFrZW4gZnJvbSB0aGUgc2NhdHRlci1nYXRoZXIg dGFibGUgb2YgdGhpcyBvYmplY3QgKG9yIG9mCj4gICAgKiB0aGlzIFZNQSBpbiBjYXNlIG9mIG5v bi1kZWZhdWx0IEdHVFQgdmlld3MpIGFuZCBQVEUgZW50cmllcyBzZXQgdXAuCj4gICAgKiBOb3Rl IHRoYXQgRE1BIGFkZHJlc3NlcyBhcmUgYWxzbyB0aGUgb25seSBwYXJ0IG9mIHRoZSBTRyB0YWJs ZSB3ZSBjYXJlIGFib3V0Lgo+ICAgICovCj4gLWludCBpOTE1X3ZtYV9iaW5kKHN0cnVjdCBpOTE1 X3ZtYSAqdm1hLCBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCj4gLQkJICB1MzIg ZmxhZ3MpCj4gK2ludCBpOTE1X3ZtYV9iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICsJCSAg ZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+ICsJCSAgdTMyIGZsYWdzLAo+ICsJ CSAgc3RydWN0IGk5MTVfdm1hX3dvcmsgKndvcmspCj4gICB7Cj4gICAJdTMyIGJpbmRfZmxhZ3M7 Cj4gICAJdTMyIHZtYV9mbGFnczsKPiBAQCAtMzE1LDExICszNjAsOCBAQCBpbnQgaTkxNV92bWFf YmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xl dmVsLAo+ICAgCWlmIChHRU1fREVCVUdfV0FSTl9PTighZmxhZ3MpKQo+ICAgCQlyZXR1cm4gLUVJ TlZBTDsKPiAgIAo+IC0JYmluZF9mbGFncyA9IDA7Cj4gLQlpZiAoZmxhZ3MgJiBQSU5fR0xPQkFM KQo+IC0JCWJpbmRfZmxhZ3MgfD0gSTkxNV9WTUFfR0xPQkFMX0JJTkQ7Cj4gLQlpZiAoZmxhZ3Mg JiBQSU5fVVNFUikKPiAtCQliaW5kX2ZsYWdzIHw9IEk5MTVfVk1BX0xPQ0FMX0JJTkQ7Cj4gKwli aW5kX2ZsYWdzID0gZmxhZ3M7Cj4gKwliaW5kX2ZsYWdzICY9IEk5MTVfVk1BX0dMT0JBTF9CSU5E IHwgSTkxNV9WTUFfTE9DQUxfQklORDsKPiAgIAo+ICAgCXZtYV9mbGFncyA9IGF0b21pY19yZWFk KCZ2bWEtPmZsYWdzKTsKPiAgIAl2bWFfZmxhZ3MgJj0gSTkxNV9WTUFfR0xPQkFMX0JJTkQgfCBJ OTE1X1ZNQV9MT0NBTF9CSU5EOwo+IEBAIC0zMzMsOSArMzc1LDMyIEBAIGludCBpOTE1X3ZtYV9i aW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2 ZWwsCj4gICAJR0VNX0JVR19PTighdm1hLT5wYWdlcyk7Cj4gICAKPiAgIAl0cmFjZV9pOTE1X3Zt YV9iaW5kKHZtYSwgYmluZF9mbGFncyk7Cj4gLQlyZXQgPSB2bWEtPm9wcy0+YmluZF92bWEodm1h LCBjYWNoZV9sZXZlbCwgYmluZF9mbGFncyk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7 Cj4gKwlpZiAod29yayAmJiAoYmluZF9mbGFncyAmIH52bWFfZmxhZ3MpICYgdm1hLT52bS0+Ymlu ZF9hbGxvYykgewo+ICsJCXdvcmstPnZtYSA9IHZtYTsKPiArCQl3b3JrLT5jYWNoZV9sZXZlbCA9 IGNhY2hlX2xldmVsOwo+ICsJCXdvcmstPmZsYWdzID0gYmluZF9mbGFncyB8IEk5MTVfVk1BX0FM TE9DOwo+ICsKPiArCQkvKgo+ICsJCSAqIE5vdGUgd2Ugb25seSB3YW50IHRvIGNoYWluIHVwIHRv IHRoZSBtaWdyYXRpb24gZmVuY2Ugb24KPiArCQkgKiB0aGUgcGFnZXMgKG5vdCB0aGUgb2JqZWN0 IGl0c2VsZikuIEFzIHdlIGRvbid0IHRyYWNrIHRoYXQsCj4gKwkJICogeWV0LCB3ZSBoYXZlIHRv IHVzZSB0aGUgZXhjbHVzaXZlIGZlbmNlIGluc3RlYWQuCj4gKwkJICoKPiArCQkgKiBBbHNvIG5v dGUgdGhhdCB3ZSBkbyBub3Qgd2FudCB0byB0cmFjayB0aGUgYXN5bmMgdm1hIGFzCj4gKwkJICog cGFydCBvZiB0aGUgb2JqLT5yZXN2LT5leGNsX2ZlbmNlIGFzIGl0IG9ubHkgYWZmZWN0cwo+ICsJ CSAqIGV4ZWN1dGlvbiBhbmQgbm90IGNvbnRlbnQgb3Igb2JqZWN0J3MgYmFja2luZyBzdG9yZSBs aWZldGltZS4KPiArCQkgKi8KPiArCQlHRU1fQlVHX09OKGk5MTVfYWN0aXZlX2hhc19leGNsdXNp dmUoJnZtYS0+YWN0aXZlKSk7Cj4gKwkJaTkxNV9hY3RpdmVfc2V0X2V4Y2x1c2l2ZSgmdm1hLT5h Y3RpdmUsICZ3b3JrLT5iYXNlLmRtYSk7Cj4gKwkJd29yay0+YmFzZS5kbWEuZXJyb3IgPSAwOyAv KiBlbmFibGUgdGhlIHF1ZXVlX3dvcmsoKSAqLwo+ICsKPiArCQlpZiAodm1hLT5vYmopCj4gKwkJ CV9faTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyh2bWEtPm9iaik7Cj4gKwl9IGVsc2Ugewo+ICsJ CUdFTV9CVUdfT04oKGJpbmRfZmxhZ3MgJiB+dm1hX2ZsYWdzKSAmIHZtYS0+dm0tPmJpbmRfYWxs b2MpOwo+ICsJCXJldCA9IHZtYS0+b3BzLT5iaW5kX3ZtYSh2bWEsIGNhY2hlX2xldmVsLCBiaW5k X2ZsYWdzKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICAgCj4gICAJ YXRvbWljX29yKGJpbmRfZmxhZ3MsICZ2bWEtPmZsYWdzKTsKPiAgIAlyZXR1cm4gMDsKPiBAQCAt MzQ4LDkgKzQxMyw3IEBAIHZvaWQgX19pb21lbSAqaTkxNV92bWFfcGluX2lvbWFwKHN0cnVjdCBp OTE1X3ZtYSAqdm1hKQo+ICAgCj4gICAJLyogQWNjZXNzIHRocm91Z2ggdGhlIEdUVCByZXF1aXJl cyB0aGUgZGV2aWNlIHRvIGJlIGF3YWtlLiAqLwo+ICAgCWFzc2VydF9ycG1fd2FrZWxvY2tfaGVs ZCgmdm1hLT52bS0+aTkxNS0+cnVudGltZV9wbSk7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmdm1hLT52bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAoV0FSTl9PTighaTkx NV92bWFfaXNfbWFwX2FuZF9mZW5jZWFibGUodm1hKSkpIHsKPiArCWlmIChHRU1fV0FSTl9PTigh aTkxNV92bWFfaXNfbWFwX2FuZF9mZW5jZWFibGUodm1hKSkpIHsKPiAgIAkJZXJyID0gLUVOT0RF VjsKPiAgIAkJZ290byBlcnI7Cj4gICAJfQo+IEBAIC0zNTgsNyArNDIxLDcgQEAgdm9pZCBfX2lv bWVtICppOTE1X3ZtYV9waW5faW9tYXAoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gICAJR0VNX0JV R19PTighaTkxNV92bWFfaXNfZ2d0dCh2bWEpKTsKPiAgIAlHRU1fQlVHX09OKCFpOTE1X3ZtYV9p c19ib3VuZCh2bWEsIEk5MTVfVk1BX0dMT0JBTF9CSU5EKSk7Cj4gICAKPiAtCXB0ciA9IHZtYS0+ aW9tYXA7Cj4gKwlwdHIgPSBSRUFEX09OQ0Uodm1hLT5pb21hcCk7Cj4gICAJaWYgKHB0ciA9PSBO VUxMKSB7Cj4gICAJCXB0ciA9IGlvX21hcHBpbmdfbWFwX3djKCZpOTE1X3ZtX3RvX2dndHQodm1h LT52bSktPmlvbWFwLAo+ICAgCQkJCQl2bWEtPm5vZGUuc3RhcnQsCj4gQEAgLTM2OCw3ICs0MzEs MTAgQEAgdm9pZCBfX2lvbWVtICppOTE1X3ZtYV9waW5faW9tYXAoc3RydWN0IGk5MTVfdm1hICp2 bWEpCj4gICAJCQlnb3RvIGVycjsKPiAgIAkJfQo+ICAgCj4gLQkJdm1hLT5pb21hcCA9IHB0cjsK PiArCQlpZiAodW5saWtlbHkoY21weGNoZygmdm1hLT5pb21hcCwgTlVMTCwgcHRyKSkpIHsKPiAr CQkJaW9fbWFwcGluZ191bm1hcChwdHIpOwo+ICsJCQlwdHIgPSB2bWEtPmlvbWFwOwo+ICsJCX0K PiAgIAl9Cj4gICAKPiAgIAlfX2k5MTVfdm1hX3Bpbih2bWEpOwo+IEBAIC0zODgsMTggKzQ1NCwx MiBAQCB2b2lkIF9faW9tZW0gKmk5MTVfdm1hX3Bpbl9pb21hcChzdHJ1Y3QgaTkxNV92bWEgKnZt YSkKPiAgIAo+ICAgdm9pZCBpOTE1X3ZtYV9mbHVzaF93cml0ZXMoc3RydWN0IGk5MTVfdm1hICp2 bWEpCj4gICB7Cj4gLQlpZiAoIWk5MTVfdm1hX2hhc19nZ3R0X3dyaXRlKHZtYSkpCj4gLQkJcmV0 dXJuOwo+IC0KPiAtCWludGVsX2d0X2ZsdXNoX2dndHRfd3JpdGVzKHZtYS0+dm0tPmd0KTsKPiAt Cj4gLQlpOTE1X3ZtYV91bnNldF9nZ3R0X3dyaXRlKHZtYSk7Cj4gKwlpZiAoaTkxNV92bWFfdW5z ZXRfZ2d0dF93cml0ZSh2bWEpKQo+ICsJCWludGVsX2d0X2ZsdXNoX2dndHRfd3JpdGVzKHZtYS0+ dm0tPmd0KTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBpOTE1X3ZtYV91bnBpbl9pb21hcChzdHJ1Y3Qg aTkxNV92bWEgKnZtYSkKPiAgIHsKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtYS0+dm0tPmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlHRU1fQlVHX09OKHZtYS0+aW9tYXAgPT0g TlVMTCk7Cj4gICAKPiAgIAlpOTE1X3ZtYV9mbHVzaF93cml0ZXModm1hKTsKPiBAQCAtNDM1LDYg KzQ5NSw5IEBAIGJvb2wgaTkxNV92bWFfbWlzcGxhY2VkKGNvbnN0IHN0cnVjdCBpOTE1X3ZtYSAq dm1hLAo+ICAgCWlmICghZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKQo+ICAgCQly ZXR1cm4gZmFsc2U7Cj4gICAKPiArCWlmICh0ZXN0X2JpdChJOTE1X1ZNQV9FUlJPUl9CSVQsIF9f aTkxNV92bWFfZmxhZ3Modm1hKSkpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICAgCWlmICh2bWEt Pm5vZGUuc2l6ZSA8IHNpemUpCj4gICAJCXJldHVybiB0cnVlOwo+ICAgCj4gQEAgLTUzNSw3ICs1 OTgsNiBAQCBzdGF0aWMgdm9pZCBhc3NlcnRfYmluZF9jb3VudChjb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgc3RhdGljIGludAo+ICAgaTkxNV92bWFfaW5zZXJ0KHN0 cnVjdCBpOTE1X3ZtYSAqdm1hLCB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwgdTY0IGZsYWdzKQo+ ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdm1hLT52bS0+aTkx NTsKPiAgIAl1bnNpZ25lZCBsb25nIGNvbG9yOwo+ICAgCXU2NCBzdGFydCwgZW5kOwo+ICAgCWlu dCByZXQ7Cj4gQEAgLTU2MSw3ICs2MjMsNyBAQCBpOTE1X3ZtYV9pbnNlcnQoc3RydWN0IGk5MTVf dm1hICp2bWEsIHU2NCBzaXplLCB1NjQgYWxpZ25tZW50LCB1NjQgZmxhZ3MpCj4gICAKPiAgIAll bmQgPSB2bWEtPnZtLT50b3RhbDsKPiAgIAlpZiAoZmxhZ3MgJiBQSU5fTUFQUEFCTEUpCj4gLQkJ ZW5kID0gbWluX3QodTY0LCBlbmQsIGRldl9wcml2LT5nZ3R0Lm1hcHBhYmxlX2VuZCk7Cj4gKwkJ ZW5kID0gbWluX3QodTY0LCBlbmQsIGk5MTVfdm1fdG9fZ2d0dCh2bWEtPnZtKS0+bWFwcGFibGVf ZW5kKTsKPiAgIAlpZiAoZmxhZ3MgJiBQSU5fWk9ORV80RykKPiAgIAkJZW5kID0gbWluX3QodTY0 LCBlbmQsICgxVUxMIDw8IDMyKSAtIEk5MTVfR1RUX1BBR0VfU0laRSk7Cj4gICAJR0VNX0JVR19P TighSVNfQUxJR05FRChlbmQsIEk5MTVfR1RUX1BBR0VfU0laRSkpOwo+IEBAIC01NzgsMzQgKzY0 MCwyMCBAQCBpOTE1X3ZtYV9pbnNlcnQoc3RydWN0IGk5MTVfdm1hICp2bWEsIHU2NCBzaXplLCB1 NjQgYWxpZ25tZW50LCB1NjQgZmxhZ3MpCj4gICAJfQo+ICAgCj4gICAJY29sb3IgPSAwOwo+IC0J aWYgKHZtYS0+b2JqKSB7Cj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyh2bWEt Pm9iaik7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCj4gLQkJaWYgKGk5MTVf dm1faGFzX2NhY2hlX2NvbG9yaW5nKHZtYS0+dm0pKQo+IC0JCQljb2xvciA9IHZtYS0+b2JqLT5j YWNoZV9sZXZlbDsKPiAtCX0KPiAtCj4gLQlHRU1fQlVHX09OKHZtYS0+cGFnZXMpOwo+IC0KPiAt CXJldCA9IHZtYS0+b3BzLT5zZXRfcGFnZXModm1hKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBl cnJfdW5waW47Cj4gKwlpZiAodm1hLT5vYmogJiYgaTkxNV92bV9oYXNfY2FjaGVfY29sb3Jpbmco dm1hLT52bSkpCj4gKwkJY29sb3IgPSB2bWEtPm9iai0+Y2FjaGVfbGV2ZWw7Cj4gICAKPiAgIAlp ZiAoZmxhZ3MgJiBQSU5fT0ZGU0VUX0ZJWEVEKSB7Cj4gICAJCXU2NCBvZmZzZXQgPSBmbGFncyAm IFBJTl9PRkZTRVRfTUFTSzsKPiAgIAkJaWYgKCFJU19BTElHTkVEKG9mZnNldCwgYWxpZ25tZW50 KSB8fAo+IC0JCSAgICByYW5nZV9vdmVyZmxvd3Mob2Zmc2V0LCBzaXplLCBlbmQpKSB7Cj4gLQkJ CXJldCA9IC1FSU5WQUw7Cj4gLQkJCWdvdG8gZXJyX2NsZWFyOwo+IC0JCX0KPiArCQkgICAgcmFu Z2Vfb3ZlcmZsb3dzKG9mZnNldCwgc2l6ZSwgZW5kKSkKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4g ICAKPiAgIAkJcmV0ID0gaTkxNV9nZW1fZ3R0X3Jlc2VydmUodm1hLT52bSwgJnZtYS0+bm9kZSwK PiAgIAkJCQkJICAgc2l6ZSwgb2Zmc2V0LCBjb2xvciwKPiAgIAkJCQkJICAgZmxhZ3MpOwo+ICAg CQlpZiAocmV0KQo+IC0JCQlnb3RvIGVycl9jbGVhcjsKPiArCQkJcmV0dXJuIHJldDsKPiAgIAl9 IGVsc2Ugewo+ICAgCQkvKgo+ICAgCQkgKiBXZSBvbmx5IHN1cHBvcnQgaHVnZSBndHQgcGFnZXMg dGhyb3VnaCB0aGUgNDhiIFBQR1RULAo+IEBAIC02NDQsNyArNjkyLDcgQEAgaTkxNV92bWFfaW5z ZXJ0KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwgdTY0IGZs YWdzKQo+ICAgCQkJCQkgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gICAJCQkJCSAgc3RhcnQs IGVuZCwgZmxhZ3MpOwo+ICAgCQlpZiAocmV0KQo+IC0JCQlnb3RvIGVycl9jbGVhcjsKPiArCQkJ cmV0dXJuIHJldDsKPiAgIAo+ICAgCQlHRU1fQlVHX09OKHZtYS0+bm9kZS5zdGFydCA8IHN0YXJ0 KTsKPiAgIAkJR0VNX0JVR19PTih2bWEtPm5vZGUuc3RhcnQgKyB2bWEtPm5vZGUuc2l6ZSA+IGVu ZCk7Cj4gQEAgLTY1MiwyMyArNzAwLDE1IEBAIGk5MTVfdm1hX2luc2VydChzdHJ1Y3QgaTkxNV92 bWEgKnZtYSwgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsIHU2NCBmbGFncykKPiAgIAlHRU1fQlVH X09OKCFkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpOwo+ICAgCUdFTV9CVUdfT04o IWk5MTVfZ2VtX3ZhbGlkX2d0dF9zcGFjZSh2bWEsIGNvbG9yKSk7Cj4gICAKPiAtCW11dGV4X2xv Y2soJnZtYS0+dm0tPm11dGV4KTsKPiAgIAlsaXN0X2FkZF90YWlsKCZ2bWEtPnZtX2xpbmssICZ2 bWEtPnZtLT5ib3VuZF9saXN0KTsKPiAtCW11dGV4X3VubG9jaygmdm1hLT52bS0+bXV0ZXgpOwo+ ICAgCj4gICAJaWYgKHZtYS0+b2JqKSB7Cj4gKwkJYXRvbWljX2luYygmdm1hLT5vYmotPm1tLnBh Z2VzX3Bpbl9jb3VudCk7Cj4gICAJCWF0b21pY19pbmMoJnZtYS0+b2JqLT5iaW5kX2NvdW50KTsK PiAgIAkJYXNzZXJ0X2JpbmRfY291bnQodm1hLT5vYmopOwo+ICAgCX0KPiAgIAo+ICAgCXJldHVy biAwOwo+IC0KPiAtZXJyX2NsZWFyOgo+IC0Jdm1hLT5vcHMtPmNsZWFyX3BhZ2VzKHZtYSk7Cj4g LWVycl91bnBpbjoKPiAtCWlmICh2bWEtPm9iaikKPiAtCQlpOTE1X2dlbV9vYmplY3RfdW5waW5f cGFnZXModm1hLT5vYmopOwo+IC0JcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZv aWQKPiBAQCAtNjc3LDEyICs3MTcsNyBAQCBpOTE1X3ZtYV9yZW1vdmUoc3RydWN0IGk5MTVfdm1h ICp2bWEpCj4gICAJR0VNX0JVR19PTighZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUp KTsKPiAgIAlHRU1fQlVHX09OKGk5MTVfdm1hX2lzX2JvdW5kKHZtYSwgSTkxNV9WTUFfR0xPQkFM X0JJTkQgfCBJOTE1X1ZNQV9MT0NBTF9CSU5EKSk7Cj4gICAKPiAtCXZtYS0+b3BzLT5jbGVhcl9w YWdlcyh2bWEpOwo+IC0KPiAtCW11dGV4X2xvY2soJnZtYS0+dm0tPm11dGV4KTsKPiAtCWRybV9t bV9yZW1vdmVfbm9kZSgmdm1hLT5ub2RlKTsKPiAgIAlsaXN0X2RlbCgmdm1hLT52bV9saW5rKTsK PiAtCW11dGV4X3VubG9jaygmdm1hLT52bS0+bXV0ZXgpOwo+ICAgCj4gICAJLyoKPiAgIAkgKiBT aW5jZSB0aGUgdW5ib3VuZCBsaXN0IGlzIGdsb2JhbCwgb25seSBtb3ZlIHRvIHRoYXQgbGlzdCBp Zgo+IEBAIC03MDEsNTEgKzczNiwyMTEgQEAgaTkxNV92bWFfcmVtb3ZlKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQo+ICAgCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKPiAgIAkJYXNz ZXJ0X2JpbmRfY291bnQob2JqKTsKPiAgIAl9Cj4gKwo+ICsJZHJtX21tX3JlbW92ZV9ub2RlKCZ2 bWEtPm5vZGUpOwo+ICAgfQo+ICAgCj4gLWludCBfX2k5MTVfdm1hX2RvX3BpbihzdHJ1Y3QgaTkx NV92bWEgKnZtYSwKPiAtCQkgICAgICB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwgdTY0IGZsYWdz KQo+ICtzdGF0aWMgYm9vbCB0cnlfcWFkX3BpbihzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgdW5zaWdu ZWQgaW50IGZsYWdzKQoKV2hhdCBkb2VzIHRoZSBRQUQgc3RhbmQgZm9yPwoKPiAgIHsKPiAtCWNv bnN0IHVuc2lnbmVkIGludCBib3VuZCA9IGF0b21pY19yZWFkKCZ2bWEtPmZsYWdzKTsKPiAtCWlu dCByZXQ7Cj4gKwl1bnNpZ25lZCBpbnQgYm91bmQ7Cj4gKwlib29sIHBpbm5lZCA9IHRydWU7Cj4g ICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtYS0+dm0tPmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+IC0JR0VNX0JVR19PTigoZmxhZ3MgJiAoUElOX0dMT0JBTCB8IFBJTl9VU0VSKSkgPT0g MCk7Cj4gLQlHRU1fQlVHX09OKChmbGFncyAmIFBJTl9HTE9CQUwpICYmICFpOTE1X3ZtYV9pc19n Z3R0KHZtYSkpOwo+ICsJYm91bmQgPSBhdG9taWNfcmVhZCgmdm1hLT5mbGFncyk7Cj4gKwlkbyB7 Cj4gKwkJaWYgKHVubGlrZWx5KGZsYWdzICYgfmJvdW5kKSkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ ICAgCj4gLQlpZiAoV0FSTl9PTihib3VuZCAmIEk5MTVfVk1BX1BJTl9PVkVSRkxPVykpIHsKPiAt CQlyZXQgPSAtRUJVU1k7Cj4gLQkJZ290byBlcnJfdW5waW47Cj4gKwkJaWYgKHVubGlrZWx5KGJv dW5kICYgKEk5MTVfVk1BX09WRVJGTE9XIHwgSTkxNV9WTUFfRVJST1IpKSkKPiArCQkJcmV0dXJu IGZhbHNlOwo+ICsKPiArCQlpZiAoIShib3VuZCAmIEk5MTVfVk1BX1BJTl9NQVNLKSkKPiArCQkJ Z290byB1bnBpbm5lZDsKPiArCj4gKwkJR0VNX0JVR19PTigoKGJvdW5kICsgMSkgJiBJOTE1X1ZN QV9QSU5fTUFTSykgPT0gMCk7Cj4gKwl9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKCZ2bWEt PmZsYWdzLCAmYm91bmQsIGJvdW5kICsgMSkpOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICsKPiAr dW5waW5uZWQ6Cj4gKwkvKgo+ICsJICogSWYgcGluX2NvdW50PT0wLCBidXQgd2UgYXJlIGJvdW5k LCBjaGVjayB1bmRlciB0aGUgbG9jayB0byBhdm9pZAo+ICsJICogcmFjaW5nIHdpdGggYSBjb25j dXJyZW50IGk5MTVfdm1hX3VuYmluZCgpLgo+ICsJICovCj4gKwltdXRleF9sb2NrKCZ2bWEtPnZt LT5tdXRleCk7Cj4gKwlkbyB7Cj4gKwkJaWYgKHVubGlrZWx5KGJvdW5kICYgKEk5MTVfVk1BX09W RVJGTE9XIHwgSTkxNV9WTUFfRVJST1IpKSkgewo+ICsJCQlwaW5uZWQgPSBmYWxzZTsKPiArCQkJ YnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlpZiAodW5saWtlbHkoZmxhZ3MgJiB+Ym91bmQpKSB7Cj4g KwkJCXBpbm5lZCA9IGZhbHNlOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9IHdoaWxlICghYXRv bWljX3RyeV9jbXB4Y2hnKCZ2bWEtPmZsYWdzLCAmYm91bmQsIGJvdW5kICsgMSkpOwo+ICsJbXV0 ZXhfdW5sb2NrKCZ2bWEtPnZtLT5tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIHBpbm5lZDsKPiArfQo+ ICsKPiArc3RhdGljIGludCB2bWFfZ2V0X3BhZ2VzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICt7 Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlpZiAoYXRvbWljX2FkZF91bmxlc3MoJnZtYS0+cGFn ZXNfY291bnQsIDEsIDApKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCS8qIEFsbG9jYXRpb25zIGFo b3khICovCj4gKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2bWEtPnBhZ2VzX211dGV4 KSkKPiArCQlyZXR1cm4gLUVJTlRSOwo+ICsKPiArCWlmICghYXRvbWljX3JlYWQoJnZtYS0+cGFn ZXNfY291bnQpKSB7Cj4gKwkJaWYgKHZtYS0+b2JqKSB7Cj4gKwkJCWVyciA9IGk5MTVfZ2VtX29i amVjdF9waW5fcGFnZXModm1hLT5vYmopOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byB1bmxv Y2s7Cj4gKwkJfQo+ICsKPiArCQllcnIgPSB2bWEtPm9wcy0+c2V0X3BhZ2VzKHZtYSk7Cj4gKwkJ aWYgKGVycikKPiArCQkJZ290byB1bmxvY2s7Cj4gICAJfQo+ICsJYXRvbWljX2luYygmdm1hLT5w YWdlc19jb3VudCk7Cj4gICAKPiAtCWlmICgoYm91bmQgJiBJOTE1X1ZNQV9CSU5EX01BU0spID09 IDApIHsKPiAtCQlyZXQgPSBpOTE1X3ZtYV9pbnNlcnQodm1hLCBzaXplLCBhbGlnbm1lbnQsIGZs YWdzKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlnb3RvIGVycl91bnBpbjsKPiArdW5sb2NrOgo+ICsJ bXV0ZXhfdW5sb2NrKCZ2bWEtPnBhZ2VzX211dGV4KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX3ZtYV9wdXRfcGFnZXMoc3RydWN0IGk5MTVfdm1hICp2bWEs IHVuc2lnbmVkIGludCBjb3VudCkKPiArewo+ICsJLyogV2UgYWxsb2NhdGUgdW5kZXIgdm1hX2dl dF9wYWdlcywgc28gYmV3YXJlIHRoZSBzaHJpbmtlciAqLwo+ICsJbXV0ZXhfbG9ja19uZXN0ZWQo JnZtYS0+cGFnZXNfbXV0ZXgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKPiArCUdFTV9CVUdfT04o YXRvbWljX3JlYWQoJnZtYS0+cGFnZXNfY291bnQpIDwgY291bnQpOwo+ICsJaWYgKGF0b21pY19z dWJfcmV0dXJuKGNvdW50LCAmdm1hLT5wYWdlc19jb3VudCkgPT0gMCkgewo+ICsJCXZtYS0+b3Bz LT5jbGVhcl9wYWdlcyh2bWEpOwo+ICsJCUdFTV9CVUdfT04odm1hLT5wYWdlcyk7Cj4gKwkJaWYg KHZtYS0+b2JqKQo+ICsJCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXModm1hLT5vYmopOwo+ ICAgCX0KPiAtCUdFTV9CVUdfT04oIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7 Cj4gKwltdXRleF91bmxvY2soJnZtYS0+cGFnZXNfbXV0ZXgpOwo+ICt9Cj4gICAKPiAtCXJldCA9 IGk5MTVfdm1hX2JpbmQodm1hLCB2bWEtPm9iaiA/IHZtYS0+b2JqLT5jYWNoZV9sZXZlbCA6IDAs IGZsYWdzKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBlcnJfcmVtb3ZlOwo+ICtzdGF0aWMgdm9p ZCB2bWFfcHV0X3BhZ2VzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICt7Cj4gKwlpZiAoYXRvbWlj X2FkZF91bmxlc3MoJnZtYS0+cGFnZXNfY291bnQsIC0xLCAxKSkKPiArCQlyZXR1cm47Cj4gKwo+ ICsJX192bWFfcHV0X3BhZ2VzKHZtYSwgMSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZtYV91 bmJpbmRfcGFnZXMoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gK3sKPiArCXVuc2lnbmVkIGludCBj b3VudDsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5tdXRleCk7Cj4gKwo+ ICsJLyogVGhlIHVwcGVyIHBvcnRpb24gb2YgcGFnZXNfY291bnQgaXMgdGhlIG51bWJlciBvZiBi aW5kaW5ncyAqLwo+ICsJY291bnQgPSBhdG9taWNfcmVhZCgmdm1hLT5wYWdlc19jb3VudCk7Cj4g Kwljb3VudCA+Pj0gSTkxNV9WTUFfUEFHRVNfQklBUzsKPiArCUdFTV9CVUdfT04oIWNvdW50KTsK PiArCj4gKwlfX3ZtYV9wdXRfcGFnZXModm1hLCBjb3VudCB8IGNvdW50IDw8IEk5MTVfVk1BX1BB R0VTX0JJQVMpOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV92bWFfcGluKHN0cnVjdCBpOTE1X3ZtYSAq dm1hLCB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwgdTY0IGZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3Qg aTkxNV92bWFfd29yayAqd29yayA9IE5VTEw7Cj4gKwl1bnNpZ25lZCBpbnQgYm91bmQ7Cj4gKwlp bnQgZXJyOwo+ICsKPiArCUJVSUxEX0JVR19PTihQSU5fR0xPQkFMICE9IEk5MTVfVk1BX0dMT0JB TF9CSU5EKTsKPiArCUJVSUxEX0JVR19PTihQSU5fVVNFUiAhPSBJOTE1X1ZNQV9MT0NBTF9CSU5E KTsKPiArCj4gKwlHRU1fQlVHX09OKGZsYWdzICYgUElOX1VQREFURSk7Cj4gKwlHRU1fQlVHX09O KCEoZmxhZ3MgJiAoUElOX1VTRVIgfCBQSU5fR0xPQkFMKSkpOwo+ICsKPiArCS8qIEZpcnN0IHRy eSBhbmQgZ3JhYiB0aGUgcGluIHdpdGhvdXQgcmViaW5kaW5nIHRoZSB2bWEgKi8KPiArCWlmICh0 cnlfcWFkX3Bpbih2bWEsIGZsYWdzICYgSTkxNV9WTUFfQklORF9NQVNLKSkKPiArCQlyZXR1cm4g MDsKPiArCj4gKwllcnIgPSB2bWFfZ2V0X3BhZ2VzKHZtYSk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJl dHVybiBlcnI7Cj4gKwo+ICsJaWYgKGZsYWdzICYgdm1hLT52bS0+YmluZF9hbGxvYykgewo+ICsJ CXdvcmsgPSBpOTE1X3ZtYV93b3JrKCk7Cj4gKwkJaWYgKCF3b3JrKSB7Cj4gKwkJCWVyciA9IC1F Tk9NRU07Cj4gKwkJCWdvdG8gZXJyX3BhZ2VzOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBObyBt b3JlIGFsbG9jYXRpb25zIGFsbG93ZWQgb25jZSB3ZSBob2xkIHZtLT5tdXRleCAqLwo+ICsJZXJy ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2bWEtPnZtLT5tdXRleCk7Cj4gKwlpZiAoZXJy KQo+ICsJCWdvdG8gZXJyX2ZlbmNlOwo+ICsKPiArCWJvdW5kID0gYXRvbWljX3JlYWQoJnZtYS0+ ZmxhZ3MpOwo+ICsJaWYgKHVubGlrZWx5KGJvdW5kICYgSTkxNV9WTUFfRVJST1IpKSB7Cj4gKwkJ ZXJyID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl91bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJaWYgKHVu bGlrZWx5KCEoKGJvdW5kICsgMSkgJiBJOTE1X1ZNQV9QSU5fTUFTSykpKSB7Cj4gKwkJZXJyID0g LUVBR0FJTjsgLyogcGlucyBhcmUgbWVhbnQgdG8gYmUgZmFpcmx5IHRlbXBvcmFyeSAqLwo+ICsJ CWdvdG8gZXJyX3VubG9jazsKPiArCX0KPiArCj4gKwlpZiAodW5saWtlbHkoIShmbGFncyAmIH5i b3VuZCAmIEk5MTVfVk1BX0JJTkRfTUFTSykpKSB7Cj4gKwkJX19pOTE1X3ZtYV9waW4odm1hKTsK PiArCQlnb3RvIGVycl91bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gaTkxNV9hY3RpdmVfYWNx dWlyZSgmdm1hLT5hY3RpdmUpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGVycl91bmxvY2s7Cj4g Kwo+ICsJaWYgKCEoYm91bmQgJiBJOTE1X1ZNQV9CSU5EX01BU0spKSB7Cj4gKwkJZXJyID0gaTkx NV92bWFfaW5zZXJ0KHZtYSwgc2l6ZSwgYWxpZ25tZW50LCBmbGFncyk7Cj4gKwkJaWYgKGVycikK PiArCQkJZ290byBlcnJfYWN0aXZlOwo+ICsKPiArCQlpZiAoaTkxNV9pc19nZ3R0KHZtYS0+dm0p KQo+ICsJCQlfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZSh2bWEpOwo+ICsJfQo+ICAg Cj4gLQlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19ib3VuZCh2bWEsIEk5MTVfVk1BX0JJTkRfTUFT SykpOwo+ICsJR0VNX0JVR19PTighdm1hLT5wYWdlcyk7Cj4gKwllcnIgPSBpOTE1X3ZtYV9iaW5k KHZtYSwKPiArCQkJICAgIHZtYS0+b2JqID8gdm1hLT5vYmotPmNhY2hlX2xldmVsIDogMCwKPiAr CQkJICAgIGZsYWdzLCB3b3JrKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBlcnJfcmVtb3ZlOwo+ ICAgCj4gLQlpZiAoKGJvdW5kIF4gYXRvbWljX3JlYWQoJnZtYS0+ZmxhZ3MpKSAmIEk5MTVfVk1B X0dMT0JBTF9CSU5EKQo+IC0JCV9faTkxNV92bWFfc2V0X21hcF9hbmRfZmVuY2VhYmxlKHZtYSk7 Cj4gKwkvKiBUaGVyZSBzaG91bGQgb25seSBiZSBhdCBtb3N0IDIgYWN0aXZlIGJpbmRpbmdzICh1 c2VyLCBnbG9iYWwpICovCj4gKwlHRU1fQlVHX09OKGJvdW5kICsgSTkxNV9WTUFfUEFHRVNfQUNU SVZFIDwgYm91bmQpOwo+ICsJYXRvbWljX2FkZChJOTE1X1ZNQV9QQUdFU19BQ1RJVkUsICZ2bWEt PnBhZ2VzX2NvdW50KTsKPiArCWxpc3RfbW92ZV90YWlsKCZ2bWEtPnZtX2xpbmssICZ2bWEtPnZt LT5ib3VuZF9saXN0KTsKPiAgIAo+ICsJX19pOTE1X3ZtYV9waW4odm1hKTsKPiArCUdFTV9CVUdf T04oIWk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKTsKPiArCUdFTV9CVUdfT04oIWk5MTVfdm1hX2lz X2JvdW5kKHZtYSwgZmxhZ3MpKTsKPiAgIAlHRU1fQlVHX09OKGk5MTVfdm1hX21pc3BsYWNlZCh2 bWEsIHNpemUsIGFsaWdubWVudCwgZmxhZ3MpKTsKPiAtCXJldHVybiAwOwo+ICAgCj4gICBlcnJf cmVtb3ZlOgo+IC0JaWYgKChib3VuZCAmIEk5MTVfVk1BX0JJTkRfTUFTSykgPT0gMCkgewo+ICsJ aWYgKCFpOTE1X3ZtYV9pc19ib3VuZCh2bWEsIEk5MTVfVk1BX0JJTkRfTUFTSykpCj4gICAJCWk5 MTVfdm1hX3JlbW92ZSh2bWEpOwo+IC0JCUdFTV9CVUdfT04odm1hLT5wYWdlcyk7Cj4gLQkJR0VN X0JVR19PTihhdG9taWNfcmVhZCgmdm1hLT5mbGFncykgJiBJOTE1X1ZNQV9CSU5EX01BU0spOwo+ IC0JfQo+IC1lcnJfdW5waW46Cj4gLQlfX2k5MTVfdm1hX3VucGluKHZtYSk7Cj4gLQlyZXR1cm4g cmV0Owo+ICtlcnJfYWN0aXZlOgo+ICsJaTkxNV9hY3RpdmVfcmVsZWFzZSgmdm1hLT5hY3RpdmUp Owo+ICtlcnJfdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZ2bWEtPnZtLT5tdXRleCk7Cj4gK2Vy cl9mZW5jZToKPiArCWlmICh3b3JrKQo+ICsJCWRtYV9mZW5jZV93b3JrX2NvbW1pdCgmd29yay0+ YmFzZSk7Cj4gK2Vycl9wYWdlczoKPiArCXZtYV9wdXRfcGFnZXModm1hKTsKPiArCXJldHVybiBl cnI7Cj4gICB9Cj4gICAKPiAgIHZvaWQgaTkxNV92bWFfY2xvc2Uoc3RydWN0IGk5MTVfdm1hICp2 bWEpCj4gQEAgLTc3Niw5ICs5NzEsNiBAQCBzdGF0aWMgdm9pZCBfX2k5MTVfdm1hX3JlbW92ZV9j bG9zZWQoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSB2bWEtPnZtLT5pOTE1Owo+ICAgCj4gLQlpZiAoIWk5MTVfdm1hX2lzX2Ns b3NlZCh2bWEpKQo+IC0JCXJldHVybjsKPiAtCj4gICAJc3Bpbl9sb2NrX2lycSgmaTkxNS0+Z3Qu Y2xvc2VkX2xvY2spOwo+ICAgCWxpc3RfZGVsX2luaXQoJnZtYS0+Y2xvc2VkX2xpbmspOwo+ICAg CXNwaW5fdW5sb2NrX2lycSgmaTkxNS0+Z3QuY2xvc2VkX2xvY2spOwo+IEBAIC03ODYsNDAgKzk3 OCwzNSBAQCBzdGF0aWMgdm9pZCBfX2k5MTVfdm1hX3JlbW92ZV9jbG9zZWQoc3RydWN0IGk5MTVf dm1hICp2bWEpCj4gICAKPiAgIHZvaWQgaTkxNV92bWFfcmVvcGVuKHN0cnVjdCBpOTE1X3ZtYSAq dm1hKQo+ICAgewo+IC0JX19pOTE1X3ZtYV9yZW1vdmVfY2xvc2VkKHZtYSk7Cj4gKwlpZiAoaTkx NV92bWFfaXNfY2xvc2VkKHZtYSkpCj4gKwkJX19pOTE1X3ZtYV9yZW1vdmVfY2xvc2VkKHZtYSk7 Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgX19pOTE1X3ZtYV9kZXN0cm95KHN0cnVjdCBpOTE1 X3ZtYSAqdm1hKQo+ICt2b2lkIGk5MTVfdm1hX2Rlc3Ryb3koc3RydWN0IGk5MTVfdm1hICp2bWEp Cj4gICB7Cj4gLQlHRU1fQlVHX09OKGRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7 Cj4gLQlHRU1fQlVHX09OKHZtYS0+ZmVuY2UpOwo+ICsJaWYgKGRybV9tbV9ub2RlX2FsbG9jYXRl ZCgmdm1hLT5ub2RlKSkgewo+ICsJCW11dGV4X2xvY2soJnZtYS0+dm0tPm11dGV4KTsKPiArCQlh dG9taWNfYW5kKH5JOTE1X1ZNQV9QSU5fTUFTSywgJnZtYS0+ZmxhZ3MpOwo+ICsJCVdBUk5fT04o X19pOTE1X3ZtYV91bmJpbmQodm1hKSk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZ2bWEtPnZtLT5tdXRl eCk7Cj4gKwkJR0VNX0JVR19PTihkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpOwo+ ICsJfQo+ICsJR0VNX0JVR19PTihpOTE1X3ZtYV9pc19hY3RpdmUodm1hKSk7Cj4gICAKPiAgIAlp ZiAodm1hLT5vYmopIHsKPiAgIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZt YS0+b2JqOwo+ICAgCj4gICAJCXNwaW5fbG9jaygmb2JqLT52bWEubG9jayk7Cj4gICAJCWxpc3Rf ZGVsKCZ2bWEtPm9ial9saW5rKTsKPiAtCQlyYl9lcmFzZSgmdm1hLT5vYmpfbm9kZSwgJnZtYS0+ b2JqLT52bWEudHJlZSk7Cj4gKwkJcmJfZXJhc2UoJnZtYS0+b2JqX25vZGUsICZvYmotPnZtYS50 cmVlKTsKPiAgIAkJc3Bpbl91bmxvY2soJm9iai0+dm1hLmxvY2spOwo+ICAgCX0KPiAgIAo+IC0J aTkxNV9hY3RpdmVfZmluaSgmdm1hLT5hY3RpdmUpOwo+IC0KPiAtCWk5MTVfdm1hX2ZyZWUodm1h KTsKPiAtfQo+IC0KPiAtdm9pZCBpOTE1X3ZtYV9kZXN0cm95KHN0cnVjdCBpOTE1X3ZtYSAqdm1h KQo+IC17Cj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPiAtCj4gLQlHRU1fQlVHX09OKGk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKTsKPiAt Cj4gICAJX19pOTE1X3ZtYV9yZW1vdmVfY2xvc2VkKHZtYSk7Cj4gKwlpOTE1X3ZtX3B1dCh2bWEt PnZtKTsKPiAgIAo+IC0JV0FSTl9PTihpOTE1X3ZtYV91bmJpbmQodm1hKSk7Cj4gLQlHRU1fQlVH X09OKGk5MTVfdm1hX2lzX2FjdGl2ZSh2bWEpKTsKPiAtCj4gLQlfX2k5MTVfdm1hX2Rlc3Ryb3ko dm1hKTsKPiArCWk5MTVfYWN0aXZlX2ZpbmkoJnZtYS0+YWN0aXZlKTsKPiArCWk5MTVfdm1hX2Zy ZWUodm1hKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBpOTE1X3ZtYV9wYXJrZWQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCj4gQEAgLTgyOCwxMiArMTAxNSwzMiBAQCB2b2lkIGk5MTVfdm1h X3BhcmtlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAo+ICAgCXNwaW5fbG9j a19pcnEoJmk5MTUtPmd0LmNsb3NlZF9sb2NrKTsKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUodm1hLCBuZXh0LCAmaTkxNS0+Z3QuY2xvc2VkX3ZtYSwgY2xvc2VkX2xpbmspIHsKPiAtCQls aXN0X2RlbF9pbml0KCZ2bWEtPmNsb3NlZF9saW5rKTsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqID0gdm1hLT5vYmo7Cj4gKwkJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0gPSB2bWEtPnZtOwo+ICsKPiArCQkvKiBYWFggQWxsIHRvIGF2b2lkIGtlZXBpbmcgYSByZWZl cmVuY2Ugb24gaTkxNV92bWEgaXRzZWxmICovCj4gKwo+ICsJCWlmICgha3JlZl9nZXRfdW5sZXNz X3plcm8oJm9iai0+YmFzZS5yZWZjb3VudCkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAo IWk5MTVfdm1fdHJ5b3Blbih2bSkpIHsKPiArCQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ ICsJCQlvYmogPSBOVUxMOwo+ICsJCX0KPiArCj4gICAJCXNwaW5fdW5sb2NrX2lycSgmaTkxNS0+ Z3QuY2xvc2VkX2xvY2spOwo+ICAgCj4gLQkJaTkxNV92bWFfZGVzdHJveSh2bWEpOwo+ICsJCWlm IChvYmopIHsKPiArCQkJaTkxNV92bWFfZGVzdHJveSh2bWEpOwo+ICsJCQlpOTE1X2dlbV9vYmpl Y3RfcHV0KG9iaik7Cj4gKwkJfQo+ICAgCj4gKwkJaTkxNV92bV9jbG9zZSh2bSk7Cj4gKwo+ICsJ CS8qIFJlc3RhcnQgYWZ0ZXIgZHJvcHBpbmcgbG9jayAqLwo+ICAgCQlzcGluX2xvY2tfaXJxKCZp OTE1LT5ndC5jbG9zZWRfbG9jayk7Cj4gKwkJbmV4dCA9IGxpc3RfZmlyc3RfZW50cnkoJmk5MTUt Pmd0LmNsb3NlZF92bWEsCj4gKwkJCQkJdHlwZW9mKCpuZXh0KSwgY2xvc2VkX2xpbmspOwo+ICAg CX0KPiAgIAlzcGluX3VubG9ja19pcnEoJmk5MTUtPmd0LmNsb3NlZF9sb2NrKTsKPiAgIH0KPiBA QCAtODczLDYgKzEwODAsMjAgQEAgdm9pZCBpOTE1X3ZtYV9yZXZva2VfbW1hcChzdHJ1Y3QgaTkx NV92bWEgKnZtYSkKPiAgIAkJbGlzdF9kZWwoJnZtYS0+b2JqLT51c2VyZmF1bHRfbGluayk7Cj4g ICB9Cj4gICAKPiAraW50IF9faTkxNV92bWFfbW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1h ICp2bWEsIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiAr CUdFTV9CVUdfT04oIWk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKTsKPiArCj4gKwkvKiBXYWl0IGZv ciB0aGUgdm1hIHRvIGJlIGJvdW5kIGJlZm9yZSB3ZSBzdGFydCEgKi8KPiArCWVyciA9IGk5MTVf cmVxdWVzdF9hd2FpdF9hY3RpdmUocnEsICZ2bWEtPmFjdGl2ZSk7Cj4gKwlpZiAoZXJyKQo+ICsJ CXJldHVybiBlcnI7Cj4gKwo+ICsJcmV0dXJuIGk5MTVfYWN0aXZlX2FkZF9yZXF1ZXN0KCZ2bWEt PmFjdGl2ZSwgcnEpOwo+ICt9Cj4gKwo+ICAgaW50IGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0 cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICAgCQkJICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ ICAgCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKPiBAQCAtODgwLDE5ICsxMTAxLDkgQEAgaW50 IGk5MTVfdm1hX21vdmVfdG9fYWN0aXZlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICAgCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsKPiAgIAlpbnQgZXJyOwo+ICAg Cj4gLQlhc3NlcnRfdm1hX2hlbGQodm1hKTsKPiAgIAlhc3NlcnRfb2JqZWN0X2hlbGQob2JqKTsK PiAtCUdFTV9CVUdfT04oIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4gICAK PiAtCS8qCj4gLQkgKiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3bHkgZW50ZXJpbmcgdGhl IGFjdGl2ZSBsaXN0Lgo+IC0JICogVGhlIG9yZGVyIGluIHdoaWNoIHdlIGFkZCBvcGVyYXRpb25z IHRvIHRoZSByZXRpcmVtZW50IHF1ZXVlIGlzCj4gLQkgKiB2aXRhbCBoZXJlOiBtYXJrX2FjdGl2 ZSBhZGRzIHRvIHRoZSBzdGFydCBvZiB0aGUgY2FsbGJhY2sgbGlzdCwKPiAtCSAqIHN1Y2ggdGhh dCBzdWJzZXF1ZW50IGNhbGxiYWNrcyBhcmUgY2FsbGVkIGZpcnN0LiBUaGVyZWZvcmUgd2UKPiAt CSAqIGFkZCB0aGUgYWN0aXZlIHJlZmVyZW5jZSBmaXJzdCBhbmQgcXVldWUgZm9yIGl0IHRvIGJl IGRyb3BwZWQKPiAtCSAqICpsYXN0Ki4KPiAtCSAqLwo+IC0JZXJyID0gaTkxNV9hY3RpdmVfYWRk X3JlcXVlc3QoJnZtYS0+YWN0aXZlLCBycSk7Cj4gKwllcnIgPSBfX2k5MTVfdm1hX21vdmVfdG9f YWN0aXZlKHZtYSwgcnEpOwo+ICAgCWlmICh1bmxpa2VseShlcnIpKQo+ICAgCQlyZXR1cm4gZXJy Owo+ICAgCj4gQEAgLTkxOCwzOCArMTEyOSwyMyBAQCBpbnQgaTkxNV92bWFfbW92ZV90b19hY3Rp dmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtaW50 IGk5MTVfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAraW50IF9faTkxNV92bWFf dW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+ICAgCWludCByZXQ7Cj4gICAKPiAt CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtYS0+dm0tPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm1hLT52bS0+bXV0ZXgpOwo+ICAgCj4gICAJLyoKPiAg IAkgKiBGaXJzdCB3YWl0IHVwb24gYW55IGFjdGl2aXR5IGFzIHJldGlyaW5nIHRoZSByZXF1ZXN0 IG1heQo+ICAgCSAqIGhhdmUgc2lkZS1lZmZlY3RzIHN1Y2ggYXMgdW5waW5uaW5nIG9yIGV2ZW4g dW5iaW5kaW5nIHRoaXMgdm1hLgo+ICsJICoKPiArCSAqIFhYWCBBY3R1YWxseSB3YWl0aW5nIHVu ZGVyIHRoZSB2bS0+bXV0ZXggaXMgYSBoaW5kZXJhbmNlIGFuZAo+ICsJICogc2hvdWxkIGJlIHBp cGVsaW5lZCB3aGVyZXZlciBwb3NzaWJsZS4gSW4gY2FzZXMgd2hlcmUgdGhhdCBpcwo+ICsJICog dW5hdm9pZGFibGUsIHdlIHNob3VsZCBsaWZ0IHRoZSB3YWl0IHRvIGJlZm9yZSB0aGUgbXV0ZXgu Cj4gICAJICovCj4gLQltaWdodF9zbGVlcCgpOwo+IC0JaWYgKGk5MTVfdm1hX2lzX2FjdGl2ZSh2 bWEpKSB7Cj4gLQkJLyoKPiAtCQkgKiBXaGVuIGEgY2xvc2VkIFZNQSBpcyByZXRpcmVkLCBpdCBp cyB1bmJvdW5kIC0gZWVrLgo+IC0JCSAqIEluIG9yZGVyIHRvIHByZXZlbnQgaXQgZnJvbSBiZWlu ZyByZWN1cnNpdmVseSBjbG9zZWQsCj4gLQkJICogdGFrZSBhIHBpbiBvbiB0aGUgdm1hIHNvIHRo YXQgdGhlIHNlY29uZCB1bmJpbmQgaXMKPiAtCQkgKiBhYm9ydGVkLgo+IC0JCSAqCj4gLQkJICog RXZlbiBtb3JlIHNjYXJ5IGlzIHRoYXQgdGhlIHJldGlyZSBjYWxsYmFjayBtYXkgZnJlZQo+IC0J CSAqIHRoZSBvYmplY3QgKGxhc3QgYWN0aXZlIHZtYSkuIFRvIHByZXZlbnQgdGhlIGV4cGxvc2lv bgo+IC0JCSAqIHdlIGRlZmVyIHRoZSBhY3R1YWwgb2JqZWN0IGZyZWUgdG8gYSB3b3JrZXIgdGhh dCBjYW4KPiAtCQkgKiBvbmx5IHByb2NlZWQgb25jZSBpdCBhY3F1aXJlcyB0aGUgc3RydWN0X211 dGV4ICh3aGljaAo+IC0JCSAqIHdlIGN1cnJlbnRseSBob2xkLCB0aGVyZWZvcmUgaXQgY2Fubm90 IGZyZWUgdGhpcyBvYmplY3QKPiAtCQkgKiBiZWZvcmUgd2UgYXJlIGZpbmlzaGVkKS4KPiAtCQkg Ki8KPiAtCQlfX2k5MTVfdm1hX3Bpbih2bWEpOwo+IC0JCXJldCA9IGk5MTVfYWN0aXZlX3dhaXQo JnZtYS0+YWN0aXZlKTsKPiAtCQlfX2k5MTVfdm1hX3VucGluKHZtYSk7Cj4gLQkJaWYgKHJldCkK PiAtCQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCUdFTV9CVUdfT04oaTkxNV92bWFfaXNfYWN0aXZl KHZtYSkpOwo+ICsJcmV0ID0gaTkxNV92bWFfc3luYyh2bWEpOwo+ICsJaWYgKHJldCkKPiArCQly ZXR1cm4gcmV0Owo+ICAgCj4gICAJaWYgKGk5MTVfdm1hX2lzX3Bpbm5lZCh2bWEpKSB7Cj4gICAJ CXZtYV9wcmludF9hbGxvY2F0b3Iodm1hLCAiaXMgcGlubmVkIik7Cj4gQEAgLTk3MCwxNiArMTE2 NiwxMiBAQCBpbnQgaTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgCQlH RU1fQlVHX09OKGk5MTVfdm1hX2hhc19nZ3R0X3dyaXRlKHZtYSkpOwo+ICAgCj4gICAJCS8qIHJl bGVhc2UgdGhlIGZlbmNlIHJlZyBfYWZ0ZXJfIGZsdXNoaW5nICovCj4gLQkJbXV0ZXhfbG9jaygm dm1hLT52bS0+bXV0ZXgpOwo+ICAgCQlyZXQgPSBpOTE1X3ZtYV9yZXZva2VfZmVuY2Uodm1hKTsK PiAtCQltdXRleF91bmxvY2soJnZtYS0+dm0tPm11dGV4KTsKPiAgIAkJaWYgKHJldCkKPiAgIAkJ CXJldHVybiByZXQ7Cj4gICAKPiAgIAkJLyogRm9yY2UgYSBwYWdlZmF1bHQgZm9yIGRvbWFpbiB0 cmFja2luZyBvbiBuZXh0IHVzZXIgYWNjZXNzICovCj4gLQkJbXV0ZXhfbG9jaygmdm1hLT52bS0+ bXV0ZXgpOwo+ICAgCQlpOTE1X3ZtYV9yZXZva2VfbW1hcCh2bWEpOwo+IC0JCW11dGV4X3VubG9j aygmdm1hLT52bS0+bXV0ZXgpOwo+ICAgCj4gICAJCV9faTkxNV92bWFfaW91bm1hcCh2bWEpOwo+ ICAgCQljbGVhcl9iaXQoSTkxNV9WTUFfQ0FOX0ZFTkNFX0JJVCwgX19pOTE1X3ZtYV9mbGFncyh2 bWEpKTsKPiBAQCAtOTg3LDE3ICsxMTc5LDMzIEBAIGludCBpOTE1X3ZtYV91bmJpbmQoc3RydWN0 IGk5MTVfdm1hICp2bWEpCj4gICAJR0VNX0JVR19PTih2bWEtPmZlbmNlKTsKPiAgIAlHRU1fQlVH X09OKGk5MTVfdm1hX2hhc191c2VyZmF1bHQodm1hKSk7Cj4gICAKPiAtCWlmIChsaWtlbHkoIXZt YS0+dm0tPmNsb3NlZCkpIHsKPiArCWlmIChsaWtlbHkoYXRvbWljX3JlYWQoJnZtYS0+dm0tPm9w ZW4pKSkgewo+ICAgCQl0cmFjZV9pOTE1X3ZtYV91bmJpbmQodm1hKTsKPiAgIAkJdm1hLT5vcHMt PnVuYmluZF92bWEodm1hKTsKPiAgIAl9Cj4gLQlhdG9taWNfYW5kKH5JOTE1X1ZNQV9CSU5EX01B U0ssICZ2bWEtPmZsYWdzKTsKPiArCWF0b21pY19hbmQofihJOTE1X1ZNQV9CSU5EX01BU0sgfCBJ OTE1X1ZNQV9FUlJPUiksICZ2bWEtPmZsYWdzKTsKPiAgIAo+ICsJdm1hX3VuYmluZF9wYWdlcyh2 bWEpOwo+ICAgCWk5MTVfdm1hX3JlbW92ZSh2bWEpOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gICB9 Cj4gICAKPiAraW50IGk5MTVfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiArewo+ ICsJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSB2bWEtPnZtOwo+ICsJaW50IGVycjsK PiArCj4gKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZtLT5tdXRleCk7Cj4gKwlp ZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJZXJyID0gX19pOTE1X3ZtYV91bmJpbmQo dm1hKTsKPiArCW11dGV4X3VubG9jaygmdm0tPm11dGV4KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ ICt9Cj4gKwo+ICAgc3RydWN0IGk5MTVfdm1hICppOTE1X3ZtYV9tYWtlX3Vuc2hyaW5rYWJsZShz dHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiAgIAlpOTE1X2dlbV9vYmplY3RfbWFrZV91bnNo cmlua2FibGUodm1hLT5vYmopOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3ZtYS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaAo+IGluZGV4IGU0OWIx OTlmN2RlNy4uODU4OTA4ZTNkMWNjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfdm1hLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCj4gQEAg LTk2LDI1ICs5NiwyOCBAQCBzdHJ1Y3QgaTkxNV92bWEgewo+ICAgCSAqIGV4Y2x1c2l2ZSBjYWNo ZWxpbmVzIG9mIGEgc2luZ2xlIHBhZ2UsIHNvIGEgbWF4aW11bSBvZiA2NCBwb3NzaWJsZQo+ICAg CSAqIHVzZXJzLgo+ICAgCSAqLwo+IC0jZGVmaW5lIEk5MTVfVk1BX1BJTl9NQVNLIDB4ZmYKPiAt I2RlZmluZSBJOTE1X1ZNQV9QSU5fT1ZFUkZMT1dfQklUIDgKPiAtI2RlZmluZSBJOTE1X1ZNQV9Q SU5fT1ZFUkZMT1cJKChpbnQpQklUKEk5MTVfVk1BX1BJTl9PVkVSRkxPV19CSVQpKQo+ICsjZGVm aW5lIEk5MTVfVk1BX1BJTl9NQVNLIDB4M2ZmCj4gKyNkZWZpbmUgSTkxNV9WTUFfT1ZFUkZMT1cg MHgyMDAKPiAgIAo+ICAgCS8qKiBGbGFncyBhbmQgYWRkcmVzcyBzcGFjZSB0aGlzIFZNQSBpcyBi b3VuZCB0byAqLwo+IC0jZGVmaW5lIEk5MTVfVk1BX0dMT0JBTF9CSU5EX0JJVCA5Cj4gLSNkZWZp bmUgSTkxNV9WTUFfTE9DQUxfQklORF9CSVQgMTAKPiArI2RlZmluZSBJOTE1X1ZNQV9HTE9CQUxf QklORF9CSVQgMTAKPiArI2RlZmluZSBJOTE1X1ZNQV9MT0NBTF9CSU5EX0JJVCAgMTEKPiAgIAo+ ICAgI2RlZmluZSBJOTE1X1ZNQV9HTE9CQUxfQklORAkoKGludClCSVQoSTkxNV9WTUFfR0xPQkFM X0JJTkRfQklUKSkKPiAgICNkZWZpbmUgSTkxNV9WTUFfTE9DQUxfQklORAkoKGludClCSVQoSTkx NV9WTUFfTE9DQUxfQklORF9CSVQpKQo+ICAgCj4gLSNkZWZpbmUgSTkxNV9WTUFfQklORF9NQVNL IChJOTE1X1ZNQV9HTE9CQUxfQklORCB8IFwKPiAtCQkJICAgIEk5MTVfVk1BX0xPQ0FMX0JJTkQg fCBcCj4gLQkJCSAgICBJOTE1X1ZNQV9QSU5fT1ZFUkZMT1cpCj4gKyNkZWZpbmUgSTkxNV9WTUFf QklORF9NQVNLIChJOTE1X1ZNQV9HTE9CQUxfQklORCB8IEk5MTVfVk1BX0xPQ0FMX0JJTkQpCj4g ICAKPiAtI2RlZmluZSBJOTE1X1ZNQV9HR1RUX0JJVAkxMQo+IC0jZGVmaW5lIEk5MTVfVk1BX0NB Tl9GRU5DRV9CSVQJMTIKPiAtI2RlZmluZSBJOTE1X1ZNQV9VU0VSRkFVTFRfQklUCTEzCj4gLSNk ZWZpbmUgSTkxNV9WTUFfR0dUVF9XUklURV9CSVQJMTQKPiArI2RlZmluZSBJOTE1X1ZNQV9BTExP Q19CSVQJMTIKPiArI2RlZmluZSBJOTE1X1ZNQV9BTExPQwkJKChpbnQpQklUKEk5MTVfVk1BX0FM TE9DX0JJVCkpCj4gKwo+ICsjZGVmaW5lIEk5MTVfVk1BX0VSUk9SX0JJVAkxMwo+ICsjZGVmaW5l IEk5MTVfVk1BX0VSUk9SCQkoKGludClCSVQoSTkxNV9WTUFfRVJST1JfQklUKSkKPiArCj4gKyNk ZWZpbmUgSTkxNV9WTUFfR0dUVF9CSVQJMTQKPiArI2RlZmluZSBJOTE1X1ZNQV9DQU5fRkVOQ0Vf QklUCTE1Cj4gKyNkZWZpbmUgSTkxNV9WTUFfVVNFUkZBVUxUX0JJVAkxNgo+ICsjZGVmaW5lIEk5 MTVfVk1BX0dHVFRfV1JJVEVfQklUCTE3Cj4gICAKPiAgICNkZWZpbmUgSTkxNV9WTUFfR0dUVAkJ KChpbnQpQklUKEk5MTVfVk1BX0dHVFRfQklUKSkKPiAgICNkZWZpbmUgSTkxNV9WTUFfQ0FOX0ZF TkNFCSgoaW50KUJJVChJOTE1X1ZNQV9DQU5fRkVOQ0VfQklUKSkKPiBAQCAtMTIzLDYgKzEyNiwx MSBAQCBzdHJ1Y3QgaTkxNV92bWEgewo+ICAgCj4gICAJc3RydWN0IGk5MTVfYWN0aXZlIGFjdGl2 ZTsKPiAgIAo+ICsjZGVmaW5lIEk5MTVfVk1BX1BBR0VTX0JJQVMgMjQKPiArI2RlZmluZSBJOTE1 X1ZNQV9QQUdFU19BQ1RJVkUgKEJJVCgyNCkgfCAxKQo+ICsJYXRvbWljX3QgcGFnZXNfY291bnQ7 IC8qIG51bWJlciBvZiBhY3RpdmUgYmluZHMgdG8gdGhlIHBhZ2VzICovCj4gKwlzdHJ1Y3QgbXV0 ZXggcGFnZXNfbXV0ZXg7IC8qIHByb3RlY3QgYWNxdWlyZS9yZWxlYXNlIG9mIGJhY2tpbmcgcGFn ZXMgKi8KPiArCj4gICAJLyoqCj4gICAJICogU3VwcG9ydCBkaWZmZXJlbnQgR0dUVCB2aWV3cyBp bnRvIHRoZSBzYW1lIG9iamVjdC4KPiAgIAkgKiBUaGlzIG1lYW5zIHRoZXJlIGNhbiBiZSBtdWx0 aXBsZSBWTUEgbWFwcGluZ3MgcGVyIG9iamVjdCBhbmQgcGVyIFZNLgo+IEBAIC0xNjksNiArMTc3 LDggQEAgc3RhdGljIGlubGluZSBib29sIGk5MTVfdm1hX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3Qg aTkxNV92bWEgKnZtYSkKPiAgIAlyZXR1cm4gIWk5MTVfYWN0aXZlX2lzX2lkbGUoJnZtYS0+YWN0 aXZlKTsKPiAgIH0KPiAgIAo+ICtpbnQgX19tdXN0X2NoZWNrIF9faTkxNV92bWFfbW92ZV90b19h Y3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gKwkJCQkJICAgc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEpOwo+ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1 Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAkJCQkJIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+ICAg CQkJCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKPiBAQCAtMzA3LDEzICszMTcsMTggQEAgaTkxNV92 bWFfY29tcGFyZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAlyZXR1cm4gbWVtY21wKCZ2bWEt PmdndHRfdmlldy5wYXJ0aWFsLCAmdmlldy0+cGFydGlhbCwgdmlldy0+dHlwZSk7Cj4gICB9Cj4g ICAKPiAtaW50IGk5MTVfdm1hX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEsIGVudW0gaTkxNV9j YWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiAtCQkgIHUzMiBmbGFncyk7Cj4gK3N0cnVjdCBpOTE1 X3ZtYV93b3JrICppOTE1X3ZtYV93b3JrKHZvaWQpOwo+ICtpbnQgaTkxNV92bWFfYmluZChzdHJ1 Y3QgaTkxNV92bWEgKnZtYSwKPiArCQkgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZl bCwKPiArCQkgIHUzMiBmbGFncywKPiArCQkgIHN0cnVjdCBpOTE1X3ZtYV93b3JrICp3b3JrKTsK PiArCj4gICBib29sIGk5MTVfZ2VtX3ZhbGlkX2d0dF9zcGFjZShzdHJ1Y3QgaTkxNV92bWEgKnZt YSwgdW5zaWduZWQgbG9uZyBjb2xvcik7Cj4gICBib29sIGk5MTVfdm1hX21pc3BsYWNlZChjb25z dCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAgIAkJCXU2NCBzaXplLCB1NjQgYWxpZ25tZW50LCB1 NjQgZmxhZ3MpOwo+ICAgdm9pZCBfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZShzdHJ1 Y3QgaTkxNV92bWEgKnZtYSk7Cj4gICB2b2lkIGk5MTVfdm1hX3Jldm9rZV9tbWFwKHN0cnVjdCBp OTE1X3ZtYSAqdm1hKTsKPiAraW50IF9faTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAq dm1hKTsKPiAgIGludCBfX211c3RfY2hlY2sgaTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKTsKPiAgIHZvaWQgaTkxNV92bWFfdW5saW5rX2N0eChzdHJ1Y3QgaTkxNV92bWEgKnZt YSk7Cj4gICB2b2lkIGk5MTVfdm1hX2Nsb3NlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiBAQCAt MzMyLDI2ICszNDcsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV92bWFfdW5sb2NrKHN0cnVj dCBpOTE1X3ZtYSAqdm1hKQo+ICAgCWRtYV9yZXN2X3VubG9jayh2bWEtPnJlc3YpOwo+ICAgfQo+ ICAgCj4gLWludCBfX2k5MTVfdm1hX2RvX3BpbihzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAtCQkg ICAgICB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwgdTY0IGZsYWdzKTsKPiAtc3RhdGljIGlubGlu ZSBpbnQgX19tdXN0X2NoZWNrCj4gLWk5MTVfdm1hX3BpbihzdHJ1Y3QgaTkxNV92bWEgKnZtYSwg dTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsIHU2NCBmbGFncykKPiAtewo+IC0JQlVJTERfQlVHX09O KFBJTl9NQlogIT0gSTkxNV9WTUFfUElOX09WRVJGTE9XKTsKPiAtCUJVSUxEX0JVR19PTihQSU5f R0xPQkFMICE9IEk5MTVfVk1BX0dMT0JBTF9CSU5EKTsKPiAtCUJVSUxEX0JVR19PTihQSU5fVVNF UiAhPSBJOTE1X1ZNQV9MT0NBTF9CSU5EKTsKPiAtCj4gLQkvKiBQaW4gZWFybHkgdG8gcHJldmVu dCB0aGUgc2hyaW5rZXIvZXZpY3Rpb24gbG9naWMgZnJvbSBkZXN0cm95aW5nCj4gLQkgKiBvdXIg dm1hIGFzIHdlIGluc2VydCBhbmQgYmluZC4KPiAtCSAqLwo+IC0JaWYgKGxpa2VseSgoKGF0b21p Y19pbmNfcmV0dXJuKCZ2bWEtPmZsYWdzKSBeIGZsYWdzKSAmIEk5MTVfVk1BX0JJTkRfTUFTSykg PT0gMCkpIHsKPiAtCQlHRU1fQlVHX09OKCFkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9k ZSkpOwo+IC0JCUdFTV9CVUdfT04oaTkxNV92bWFfbWlzcGxhY2VkKHZtYSwgc2l6ZSwgYWxpZ25t ZW50LCBmbGFncykpOwo+IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCXJldHVybiBfX2k5MTVf dm1hX2RvX3Bpbih2bWEsIHNpemUsIGFsaWdubWVudCwgZmxhZ3MpOwo+IC19Cj4gK2ludCBfX211 c3RfY2hlY2sKPiAraTkxNV92bWFfcGluKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCB1NjQgc2l6ZSwg dTY0IGFsaWdubWVudCwgdTY0IGZsYWdzKTsKPiAgIAo+ICAgc3RhdGljIGlubGluZSBpbnQgaTkx NV92bWFfcGluX2NvdW50KGNvbnN0IHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+IEBAIC0z NjYsMTcgKzM2MywxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV92bWFfaXNfcGlubmVkKGNv bnN0IHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgc3RhdGljIGlubGluZSB2b2lkIF9faTkxNV92 bWFfcGluKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+ICAgCWF0b21pY19pbmMoJnZtYS0+ ZmxhZ3MpOwo+IC0JR0VNX0JVR19PTihhdG9taWNfcmVhZCgmdm1hLT5mbGFncykgJiBJOTE1X1ZN QV9QSU5fT1ZFUkZMT1cpOwo+ICsJR0VNX0JVR19PTighaTkxNV92bWFfaXNfcGlubmVkKHZtYSkp Owo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW5saW5lIHZvaWQgX19pOTE1X3ZtYV91bnBpbihzdHJ1 Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiArCUdFTV9CVUdfT04oIWk5MTVfdm1hX2lzX3Bpbm5l ZCh2bWEpKTsKPiAgIAlhdG9taWNfZGVjKCZ2bWEtPmZsYWdzKTsKPiAgIH0KPiAgIAo+ICAgc3Rh dGljIGlubGluZSB2b2lkIGk5MTVfdm1hX3VucGluKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAg ewo+IC0JR0VNX0JVR19PTighaTkxNV92bWFfaXNfcGlubmVkKHZtYSkpOwo+ICAgCUdFTV9CVUdf T04oIWRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSk7Cj4gICAJX19pOTE1X3ZtYV91 bnBpbih2bWEpOwo+ICAgfQo+IEBAIC00MDIsOCArMzk5LDYgQEAgc3RhdGljIGlubGluZSBib29s IGk5MTVfbm9kZV9jb2xvcl9kaWZmZXJzKGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwK PiAgICAqIHRoZSBjYWxsZXIgbXVzdCBjYWxsIGk5MTVfdm1hX3VucGluX2lvbWFwIHRvIHJlbGlu cXVpc2ggdGhlIHBpbm5pbmcKPiAgICAqIGFmdGVyIHRoZSBpb21hcHBpbmcgaXMgbm8gbG9uZ2Vy IHJlcXVpcmVkLgo+ICAgICoKPiAtICogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIHN0cnVjdF9tdXRl eC4KPiAtICoKPiAgICAqIFJldHVybnMgYSB2YWxpZCBpb21hcHBlZCBwb2ludGVyIG9yIEVSUl9Q VFIuCj4gICAgKi8KPiAgIHZvaWQgX19pb21lbSAqaTkxNV92bWFfcGluX2lvbWFwKHN0cnVjdCBp OTE1X3ZtYSAqdm1hKTsKPiBAQCAtNDE1LDggKzQxMCw4IEBAIHZvaWQgX19pb21lbSAqaTkxNV92 bWFfcGluX2lvbWFwKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiAgICAqCj4gICAgKiBVbnBpbnMg dGhlIHByZXZpb3VzbHkgaW9tYXBwZWQgVk1BIGZyb20gaTkxNV92bWFfcGluX2lvbWFwKCkuCj4g ICAgKgo+IC0gKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgc3RydWN0X211dGV4LiBUaGlzIGZ1bmN0 aW9uIGlzIG9ubHkgdmFsaWQgdG8gYmUKPiAtICogY2FsbGVkIG9uIGEgVk1BIHByZXZpb3VzbHkg aW9tYXBwZWQgYnkgdGhlIGNhbGxlciB3aXRoIGk5MTVfdm1hX3Bpbl9pb21hcCgpLgo+ICsgKiBU aGlzIGZ1bmN0aW9uIGlzIG9ubHkgdmFsaWQgdG8gYmUgY2FsbGVkIG9uIGEgVk1BIHByZXZpb3Vz bHkKPiArICogaW9tYXBwZWQgYnkgdGhlIGNhbGxlciB3aXRoIGk5MTVfdm1hX3Bpbl9pb21hcCgp Lgo+ICAgICovCj4gICB2b2lkIGk5MTVfdm1hX3VucGluX2lvbWFwKHN0cnVjdCBpOTE1X3ZtYSAq dm1hKTsKPiAgIAo+IEBAIC00NDQsNiArNDM5LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFn ZSAqaTkxNV92bWFfZmlyc3RfcGFnZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIGludCBfX211 c3RfY2hlY2sgaTkxNV92bWFfcGluX2ZlbmNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiAgIGlu dCBfX211c3RfY2hlY2sgaTkxNV92bWFfcmV2b2tlX2ZlbmNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1h KTsKPiAgIAo+ICtpbnQgX19pOTE1X3ZtYV9waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEp Owo+ICsKPiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2k5MTVfdm1hX3VucGluX2ZlbmNlKHN0cnVj dCBpOTE1X3ZtYSAqdm1hKQo+ICAgewo+ICAgCUdFTV9CVUdfT04oYXRvbWljX3JlYWQoJnZtYS0+ ZmVuY2UtPnBpbl9jb3VudCkgPD0gMCk7Cj4gQEAgLTQ2MSw3ICs0NTgsNiBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgX19pOTE1X3ZtYV91bnBpbl9mZW5jZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAg IHN0YXRpYyBpbmxpbmUgdm9pZAo+ICAgaTkxNV92bWFfdW5waW5fZmVuY2Uoc3RydWN0IGk5MTVf dm1hICp2bWEpCj4gICB7Cj4gLQkvKiBsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5pOTE1 LT5kcm0uc3RydWN0X211dGV4KTsgKi8KPiAgIAlpZiAodm1hLT5mZW5jZSkKPiAgIAkJX19pOTE1 X3ZtYV91bnBpbl9mZW5jZSh2bWEpOwo+ICAgfQo+IEBAIC00OTAsNCArNDg2LDEwIEBAIHN0cnVj dCBpOTE1X3ZtYSAqaTkxNV92bWFfbWFrZV91bnNocmlua2FibGUoc3RydWN0IGk5MTVfdm1hICp2 bWEpOwo+ICAgdm9pZCBpOTE1X3ZtYV9tYWtlX3Nocmlua2FibGUoc3RydWN0IGk5MTVfdm1hICp2 bWEpOwo+ICAgdm9pZCBpOTE1X3ZtYV9tYWtlX3B1cmdlYWJsZShzdHJ1Y3QgaTkxNV92bWEgKnZt YSk7Cj4gICAKPiArc3RhdGljIGlubGluZSBpbnQgaTkxNV92bWFfc3luYyhzdHJ1Y3QgaTkxNV92 bWEgKnZtYSkKPiArewo+ICsJLyogV2FpdCBmb3IgdGhlIGFzeW5jaHJvbm91cyBiaW5kaW5ncyBh bmQgcGVuZGluZyBHUFUgcmVhZHMgKi8KPiArCXJldHVybiBpOTE1X2FjdGl2ZV93YWl0KCZ2bWEt PmFjdGl2ZSk7Cj4gK30KPiArCj4gICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaTkxNV9nZW0uYwo+IGluZGV4IDM3NTkzODMxYjUzOS4uMDM0NmMzZTViNmI2IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbS5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtLmMKPiBAQCAtMTE5LDEw ICsxMTksOCBAQCBzdGF0aWMgdm9pZCBwbV9yZXN1bWUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpCj4gICAJCWludGVsX2d0X3Nhbml0aXplKCZpOTE1LT5ndCwgZmFsc2UpOwo+ICAgCQlp OTE1X2dlbV9zYW5pdGl6ZShpOTE1KTsKPiAgIAo+IC0JCW11dGV4X2xvY2soJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+ICAgCQlpOTE1X2dlbV9yZXN0b3JlX2d0dF9tYXBwaW5ncyhpOTE1KTsK PiAgIAkJaTkxNV9nZW1fcmVzdG9yZV9mZW5jZXMoaTkxNSk7Cj4gLQkJbXV0ZXhfdW5sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+ICAgCQlpOTE1X2dlbV9yZXN1bWUoaTkxNSk7 Cj4gICAJfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9nZW1fZXZpY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9l dmljdC5jCj4gaW5kZXggMjkwNWZiMjFkODY2Li43NWE0Njk1YjgyYmIgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2V2aWN0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZXZpY3QuYwo+IEBAIC0xMDYs MTQgKzEwNiwxMSBAQCBzdGF0aWMgaW50IHBvcHVsYXRlX2dndHQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCj4gICAKPiAgIHN0YXRpYyB2b2lkIHVucGluX2dndHQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCj4gICB7Cj4gLQlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmk5 MTUtPmdndHQ7Cj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gICAKPiAtCW11dGV4X2xvY2so JmdndHQtPnZtLm11dGV4KTsKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmk5MTUtPmdn dHQudm0uYm91bmRfbGlzdCwgdm1fbGluaykKPiAgIAkJaWYgKHZtYS0+b2JqLT5tbS5xdWlya2Vk KQo+ICAgCQkJaTkxNV92bWFfdW5waW4odm1hKTsKPiAtCW11dGV4X3VubG9jaygmZ2d0dC0+dm0u bXV0ZXgpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZCBjbGVhbnVwX29iamVjdHMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gQEAgLTEyNywxMSArMTI0LDcgQEAgc3RhdGljIHZv aWQgY2xlYW51cF9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCQlp OTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gICAJfQo+ICAgCj4gLQltdXRleF91bmxvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAgIAlpOTE1X2dlbV9kcmFpbl9mcmVlZF9vYmpl Y3RzKGk5MTUpOwo+IC0KPiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGlndF9ldmljdF9zb21ldGhpbmcodm9pZCAqYXJnKQo+ IEBAIC0xNDgsMTAgKzE0MSwxMiBAQCBzdGF0aWMgaW50IGlndF9ldmljdF9zb21ldGhpbmcodm9p ZCAqYXJnKQo+ICAgCQlnb3RvIGNsZWFudXA7Cj4gICAKPiAgIAkvKiBFdmVyeXRoaW5nIGlzIHBp bm5lZCwgbm90aGluZyBzaG91bGQgaGFwcGVuICovCj4gKwltdXRleF9sb2NrKCZnZ3R0LT52bS5t dXRleCk7Cj4gICAJZXJyID0gaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKCZnZ3R0LT52bSwKPiAg IAkJCQkgICAgICAgSTkxNV9HVFRfUEFHRV9TSVpFLCAwLCAwLAo+ICAgCQkJCSAgICAgICAwLCBV NjRfTUFYLAo+ICAgCQkJCSAgICAgICAwKTsKPiArCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0 ZXgpOwo+ICAgCWlmIChlcnIgIT0gLUVOT1NQQykgewo+ICAgCQlwcl9lcnIoImk5MTVfZ2VtX2V2 aWN0X3NvbWV0aGluZyBmYWlsZWQgb24gYSBmdWxsIEdHVFQgd2l0aCBlcnI9JWRcbiIsCj4gICAJ CSAgICAgICBlcnIpOwo+IEBAIC0xNjEsMTAgKzE1NiwxMiBAQCBzdGF0aWMgaW50IGlndF9ldmlj dF9zb21ldGhpbmcodm9pZCAqYXJnKQo+ICAgCXVucGluX2dndHQoaTkxNSk7Cj4gICAKPiAgIAkv KiBFdmVyeXRoaW5nIGlzIHVucGlubmVkLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBldmljdCBzb21l dGhpbmcgKi8KPiArCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAllcnIgPSBpOTE1 X2dlbV9ldmljdF9zb21ldGhpbmcoJmdndHQtPnZtLAo+ICAgCQkJCSAgICAgICBJOTE1X0dUVF9Q QUdFX1NJWkUsIDAsIDAsCj4gICAJCQkJICAgICAgIDAsIFU2NF9NQVgsCj4gICAJCQkJICAgICAg IDApOwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJaWYgKGVycikgewo+ ICAgCQlwcl9lcnIoImk5MTVfZ2VtX2V2aWN0X3NvbWV0aGluZyBmYWlsZWQgb24gYSBmdWxsIEdH VFQgd2l0aCBlcnI9JWRcbiIsCj4gICAJCSAgICAgICBlcnIpOwo+IEBAIC0yMzAsNyArMjI3LDkg QEAgc3RhdGljIGludCBpZ3RfZXZpY3RfZm9yX3ZtYSh2b2lkICphcmcpCj4gICAJCWdvdG8gY2xl YW51cDsKPiAgIAo+ICAgCS8qIEV2ZXJ5dGhpbmcgaXMgcGlubmVkLCBub3RoaW5nIHNob3VsZCBo YXBwZW4gKi8KPiArCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAllcnIgPSBpOTE1 X2dlbV9ldmljdF9mb3Jfbm9kZSgmZ2d0dC0+dm0sICZ0YXJnZXQsIDApOwo+ICsJbXV0ZXhfdW5s b2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJaWYgKGVyciAhPSAtRU5PU1BDKSB7Cj4gICAJCXBy X2VycigiaTkxNV9nZW1fZXZpY3RfZm9yX25vZGUgb24gYSBmdWxsIEdHVFQgcmV0dXJuZWQgZXJy PSVkXG4iLAo+ICAgCQkgICAgICAgZXJyKTsKPiBAQCAtMjQwLDcgKzIzOSw5IEBAIHN0YXRpYyBp bnQgaWd0X2V2aWN0X2Zvcl92bWEodm9pZCAqYXJnKQo+ICAgCXVucGluX2dndHQoaTkxNSk7Cj4g ICAKPiAgIAkvKiBFdmVyeXRoaW5nIGlzIHVucGlubmVkLCB3ZSBzaG91bGQgYmUgYWJsZSB0byBl dmljdCB0aGUgbm9kZSAqLwo+ICsJbXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCWVy ciA9IGk5MTVfZ2VtX2V2aWN0X2Zvcl9ub2RlKCZnZ3R0LT52bSwgJnRhcmdldCwgMCk7Cj4gKwlt dXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAlpZiAoZXJyKSB7Cj4gICAJCXByX2Vy cigiaTkxNV9nZW1fZXZpY3RfZm9yX25vZGUgcmV0dXJuZWQgZXJyPSVkXG4iLAo+ICAgCQkgICAg ICAgZXJyKTsKPiBAQCAtMzE5LDcgKzMyMCw5IEBAIHN0YXRpYyBpbnQgaWd0X2V2aWN0X2Zvcl9j YWNoZV9jb2xvcih2b2lkICphcmcpCj4gICAJaTkxNV92bWFfdW5waW4odm1hKTsKPiAgIAo+ICAg CS8qIFJlbW92ZSBqdXN0IHRoZSBzZWNvbmQgdm1hICovCj4gKwltdXRleF9sb2NrKCZnZ3R0LT52 bS5tdXRleCk7Cj4gICAJZXJyID0gaTkxNV9nZW1fZXZpY3RfZm9yX25vZGUoJmdndHQtPnZtLCAm dGFyZ2V0LCAwKTsKPiArCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCWlmIChl cnIpIHsKPiAgIAkJcHJfZXJyKCJbMF1pOTE1X2dlbV9ldmljdF9mb3Jfbm9kZSByZXR1cm5lZCBl cnI9JWRcbiIsIGVycik7Cj4gICAJCWdvdG8gY2xlYW51cDsKPiBAQCAtMzMwLDcgKzMzMyw5IEBA IHN0YXRpYyBpbnQgaWd0X2V2aWN0X2Zvcl9jYWNoZV9jb2xvcih2b2lkICphcmcpCj4gICAJICov Cj4gICAJdGFyZ2V0LmNvbG9yID0gSTkxNV9DQUNIRV9MM19MTEM7Cj4gICAKPiArCW11dGV4X2xv Y2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAllcnIgPSBpOTE1X2dlbV9ldmljdF9mb3Jfbm9kZSgm Z2d0dC0+dm0sICZ0YXJnZXQsIDApOwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7 Cj4gICAJaWYgKCFlcnIpIHsKPiAgIAkJcHJfZXJyKCJbMV1pOTE1X2dlbV9ldmljdF9mb3Jfbm9k ZSByZXR1cm5lZCBlcnI9JWRcbiIsIGVycik7Cj4gICAJCWVyciA9IC1FSU5WQUw7Cj4gQEAgLTM2 MCw3ICszNjUsOSBAQCBzdGF0aWMgaW50IGlndF9ldmljdF92bSh2b2lkICphcmcpCj4gICAJCWdv dG8gY2xlYW51cDsKPiAgIAo+ICAgCS8qIEV2ZXJ5dGhpbmcgaXMgcGlubmVkLCBub3RoaW5nIHNo b3VsZCBoYXBwZW4gKi8KPiArCW11dGV4X2xvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAllcnIg PSBpOTE1X2dlbV9ldmljdF92bSgmZ2d0dC0+dm0pOwo+ICsJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52 bS5tdXRleCk7Cj4gICAJaWYgKGVycikgewo+ICAgCQlwcl9lcnIoImk5MTVfZ2VtX2V2aWN0X3Zt IG9uIGEgZnVsbCBHR1RUIHJldHVybmVkIGVycj0lZF1cbiIsCj4gICAJCSAgICAgICBlcnIpOwo+ IEBAIC0zNjksNyArMzc2LDkgQEAgc3RhdGljIGludCBpZ3RfZXZpY3Rfdm0odm9pZCAqYXJnKQo+ ICAgCj4gICAJdW5waW5fZ2d0dChpOTE1KTsKPiAgIAo+ICsJbXV0ZXhfbG9jaygmZ2d0dC0+dm0u bXV0ZXgpOwo+ICAgCWVyciA9IGk5MTVfZ2VtX2V2aWN0X3ZtKCZnZ3R0LT52bSk7Cj4gKwltdXRl eF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAlpZiAoZXJyKSB7Cj4gICAJCXByX2Vycigi aTkxNV9nZW1fZXZpY3Rfdm0gb24gYSBmdWxsIEdHVFQgcmV0dXJuZWQgZXJyPSVkXVxuIiwKPiAg IAkJICAgICAgIGVycik7Cj4gQEAgLTQxMCwxMSArNDE5LDExIEBAIHN0YXRpYyBpbnQgaWd0X2V2 aWN0X2NvbnRleHRzKHZvaWQgKmFyZykKPiAgIAlpZiAoIUhBU19GVUxMX1BQR1RUKGk5MTUpKQo+ ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7Cj4gICAJd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZpOTE1LT5ydW50aW1lX3Bt KTsKPiAgIAo+ICAgCS8qIFJlc2VydmUgYSBibG9jayBzbyB0aGF0IHdlIGtub3cgd2UgaGF2ZSBl bm91Z2ggdG8gZml0IGEgZmV3IHJxICovCj4gICAJbWVtc2V0KCZob2xlLCAwLCBzaXplb2YoaG9s ZSkpOwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+Z2d0dC52bS5tdXRleCk7Cj4gICAJZXJyID0gaTkx NV9nZW1fZ3R0X2luc2VydCgmaTkxNS0+Z2d0dC52bSwgJmhvbGUsCj4gICAJCQkJICBQUkVURU5E X0dHVFRfU0laRSwgMCwgSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiAgIAkJCQkgIDAsIGk5MTUt PmdndHQudm0udG90YWwsCj4gQEAgLTQyNyw3ICs0MzYsOSBAQCBzdGF0aWMgaW50IGlndF9ldmlj dF9jb250ZXh0cyh2b2lkICphcmcpCj4gICAJZG8gewo+ICAgCQlzdHJ1Y3QgcmVzZXJ2ZWQgKnI7 Cj4gICAKPiArCQltdXRleF91bmxvY2soJmk5MTUtPmdndHQudm0ubXV0ZXgpOwo+ICAgCQlyID0g a2NhbGxvYygxLCBzaXplb2YoKnIpLCBHRlBfS0VSTkVMKTsKPiArCQltdXRleF9sb2NrKCZpOTE1 LT5nZ3R0LnZtLm11dGV4KTsKPiAgIAkJaWYgKCFyKSB7Cj4gICAJCQllcnIgPSAtRU5PTUVNOwo+ ICAgCQkJZ290byBvdXRfbG9ja2VkOwo+IEBAIC00NDcsNyArNDU4LDcgQEAgc3RhdGljIGludCBp Z3RfZXZpY3RfY29udGV4dHModm9pZCAqYXJnKQo+ICAgCQljb3VudCsrOwo+ICAgCX0gd2hpbGUg KDEpOwo+ICAgCWRybV9tbV9yZW1vdmVfbm9kZSgmaG9sZSk7Cj4gLQltdXRleF91bmxvY2soJmk5 MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfdW5sb2NrKCZpOTE1LT5nZ3R0LnZtLm11 dGV4KTsKPiAgIAlwcl9pbmZvKCJGaWxsZWQgR0dUVCB3aXRoICVsdSAxTWlCIG5vZGVzXG4iLCBj b3VudCk7Cj4gICAKPiAgIAkvKiBPdmVyZmlsbCB0aGUgR0dUVCB3aXRoIGNvbnRleHQgb2JqZWN0 cyBhbmQgc28gdHJ5IHRvIGV2aWN0IG9uZS4gKi8KPiBAQCAtNTEwLDcgKzUyMSw3IEBAIHN0YXRp YyBpbnQgaWd0X2V2aWN0X2NvbnRleHRzKHZvaWQgKmFyZykKPiAgIAkJCWJyZWFrOwo+ICAgCX0K PiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwltdXRleF9s b2NrKCZpOTE1LT5nZ3R0LnZtLm11dGV4KTsKPiAgIG91dF9sb2NrZWQ6Cj4gICAJaWYgKGlndF9m bHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQo+ICAgCQllcnIgPSAtRUlPOwo+IEBA IC01MjQsOCArNTM1LDggQEAgc3RhdGljIGludCBpZ3RfZXZpY3RfY29udGV4dHModm9pZCAqYXJn KQo+ICAgCX0KPiAgIAlpZiAoZHJtX21tX25vZGVfYWxsb2NhdGVkKCZob2xlKSkKPiAgIAkJZHJt X21tX3JlbW92ZV9ub2RlKCZob2xlKTsKPiArCW11dGV4X3VubG9jaygmaTkxNS0+Z2d0dC52bS5t dXRleCk7Cj4gICAJaW50ZWxfcnVudGltZV9wbV9wdXQoJmk5MTUtPnJ1bnRpbWVfcG0sIHdha2Vy ZWYpOwo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+ICAg CXJldHVybiBlcnI7Cj4gICB9Cj4gQEAgLTU0NywxMiArNTU4LDkgQEAgaW50IGk5MTVfZ2VtX2V2 aWN0X21vY2tfc2VsZnRlc3RzKHZvaWQpCj4gICAJaWYgKCFpOTE1KQo+ICAgCQlyZXR1cm4gLUVO T01FTTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJ d2l0aF9pbnRlbF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKQo+ICAgCQll cnIgPSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBpOTE1KTsKPiAgIAo+IC0JbXV0ZXhfdW5sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCj4gICAJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7 Cj4gICAJcmV0dXJuIGVycjsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggODRkOTRlYWJjN2RkLi4zNzNmYmQ1OGExN2EgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jCj4g QEAgLTM4LDE2ICszOCw3IEBACj4gICAKPiAgIHN0YXRpYyB2b2lkIGNsZWFudXBfZnJlZWRfb2Jq ZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAtCS8qCj4gLQkgKiBB cyB3ZSBtYXkgaG9sZCBvbnRvIHRoZSBzdHJ1Y3RfbXV0ZXggZm9yIGlub3JkaW5hdGUgbGVuZ3Ro cyBvZgo+IC0JICogdGltZSwgdGhlIE5NSSBraHVuZ3Rhc2tkIGRldGVjdG9yIG1heSBmaXJlIGZv ciB0aGUgZnJlZSBvYmplY3RzCj4gLQkgKiB3b3JrZXIuCj4gLQkgKi8KPiAtCW11dGV4X3VubG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAgCWk5MTVfZ2VtX2RyYWluX2ZyZWVk X29iamVjdHMoaTkxNSk7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGZha2VfZnJlZV9wYWdlcyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IEBAIC04ODAsNiArODcxLDE1IEBAIHN0YXRpYyBpbnQg X19zaHJpbmtfaG9sZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkJaTkxNV92 bWFfdW5waW4odm1hKTsKPiAgIAkJYWRkciArPSBzaXplOwo+ICAgCj4gKwkJLyoKPiArCQkgKiBT aW5jZSB3ZSBhcmUgaW5qZWN0aW5nIGFsbG9jYXRpb24gZmF1bHRzIGF0IHJhbmRvbSBpbnRlcnZh bHMsCj4gKwkJICogd2FpdCBmb3IgdGhpcyBhbGxvY2F0aW9uIHRvIGNvbXBsZXRlIGJlZm9yZSB3 ZSBjaGFuZ2UgdGhlCj4gKwkJICogZmF1bHRpbmplY3Rpb24uCj4gKwkJICovCj4gKwkJZXJyID0g aTkxNV92bWFfc3luYyh2bWEpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWJyZWFrOwo+ICsKPiAgIAkJ aWYgKGlndF90aW1lb3V0KGVuZF90aW1lLAo+ICAgCQkJCSIlcyB0aW1lZCBvdXQgYXQgb2ZzZXQg JWxseCBbJWxseCAtICVsbHhdXG4iLAo+ICAgCQkJCV9fZnVuY19fLCBhZGRyLCBob2xlX3N0YXJ0 LCBob2xlX2VuZCkpIHsKPiBAQCAtMTAxMywyMSArMTAxMywxOSBAQCBzdGF0aWMgaW50IGV4ZXJj aXNlX3BwZ3R0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAlpZiAoSVNf RVJSKGZpbGUpKQo+ICAgCQlyZXR1cm4gUFRSX0VSUihmaWxlKTsKPiAgIAo+IC0JbXV0ZXhfbG9j aygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCXBwZ3R0ID0gaTkxNV9wcGd0dF9j cmVhdGUoZGV2X3ByaXYpOwo+ICAgCWlmIChJU19FUlIocHBndHQpKSB7Cj4gICAJCWVyciA9IFBU Ul9FUlIocHBndHQpOwo+IC0JCWdvdG8gb3V0X3VubG9jazsKPiArCQlnb3RvIG91dF9mcmVlOwo+ ICAgCX0KPiAgIAlHRU1fQlVHX09OKG9mZnNldF9pbl9wYWdlKHBwZ3R0LT52bS50b3RhbCkpOwo+ IC0JR0VNX0JVR19PTihwcGd0dC0+dm0uY2xvc2VkKTsKPiArCUdFTV9CVUdfT04oIWF0b21pY19y ZWFkKCZwcGd0dC0+dm0ub3BlbikpOwo+ICAgCj4gICAJZXJyID0gZnVuYyhkZXZfcHJpdiwgJnBw Z3R0LT52bSwgMCwgcHBndHQtPnZtLnRvdGFsLCBlbmRfdGltZSk7Cj4gICAKPiAgIAlpOTE1X3Zt X3B1dCgmcHBndHQtPnZtKTsKPiAtb3V0X3VubG9jazoKPiAtCW11dGV4X3VubG9jaygmZGV2X3By aXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gK291dF9mcmVlOgo+ICAgCW1vY2tfZmlsZV9m cmVlKGRldl9wcml2LCBmaWxlKTsKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+IEBAIC0xMDkwLDcg KzEwODgsNiBAQCBzdGF0aWMgaW50IGV4ZXJjaXNlX2dndHQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCj4gICAJSUdUX1RJTUVPVVQoZW5kX3RpbWUpOwo+ICAgCWludCBlcnIgPSAwOwo+ ICAgCj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIHJlc3RhcnQ6 Cj4gICAJbGlzdF9zb3J0KE5VTEwsICZnZ3R0LT52bS5tbS5ob2xlX3N0YWNrLCBzb3J0X2hvbGVz KTsKPiAgIAlkcm1fbW1fZm9yX2VhY2hfaG9sZShub2RlLCAmZ2d0dC0+dm0ubW0sIGhvbGVfc3Rh cnQsIGhvbGVfZW5kKSB7Cj4gQEAgLTExMTEsNyArMTEwOCw2IEBAIHN0YXRpYyBpbnQgZXhlcmNp c2VfZ2d0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkJbGFzdCA9IGhvbGVf ZW5kOwo+ICAgCQlnb3RvIHJlc3RhcnQ7Cj4gICAJfQo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1LT5k cm0uc3RydWN0X211dGV4KTsKPiAgIAo+ICAgCXJldHVybiBlcnI7Cj4gICB9Cj4gQEAgLTExNTMs MTMgKzExNDksOSBAQCBzdGF0aWMgaW50IGlndF9nZ3R0X3BhZ2Uodm9pZCAqYXJnKQo+ICAgCXVu c2lnbmVkIGludCAqb3JkZXIsIG47Cj4gICAJaW50IGVycjsKPiAgIAo+IC0JbXV0ZXhfbG9jaygm aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAgCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9j cmVhdGVfaW50ZXJuYWwoaTkxNSwgUEFHRV9TSVpFKTsKPiAtCWlmIChJU19FUlIob2JqKSkgewo+ IC0JCWVyciA9IFBUUl9FUlIob2JqKTsKPiAtCQlnb3RvIG91dF91bmxvY2s7Cj4gLQl9Cj4gKwlp ZiAoSVNfRVJSKG9iaikpCj4gKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKPiAgIAo+ICAgCWVyciA9 IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKPiAgIAlpZiAoZXJyKQo+IEBAIC0xMjI3 LDggKzEyMTksNiBAQCBzdGF0aWMgaW50IGlndF9nZ3R0X3BhZ2Uodm9pZCAqYXJnKQo+ICAgCWk5 MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOwo+ICAgb3V0X2ZyZWU6Cj4gICAJaTkxNV9n ZW1fb2JqZWN0X3B1dChvYmopOwo+IC1vdXRfdW5sb2NrOgo+IC0JbXV0ZXhfdW5sb2NrKCZpOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+ICAgCj4gQEAgLTEy MzksNiArMTIyOSw5IEBAIHN0YXRpYyB2b2lkIHRyYWNrX3ZtYV9iaW5kKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQo+ICAgCWF0b21pY19pbmMoJm9iai0+YmluZF9jb3VudCk7IC8qIHRyYWNrIGZvciBl dmljdGlvbiBsYXRlciAqLwo+ICAgCV9faTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOwo+ ICAgCj4gKwlHRU1fQlVHX09OKHZtYS0+cGFnZXMpOwo+ICsJYXRvbWljX3NldCgmdm1hLT5wYWdl c19jb3VudCwgSTkxNV9WTUFfUEFHRVNfQUNUSVZFKTsKPiArCV9faTkxNV9nZW1fb2JqZWN0X3Bp bl9wYWdlcyhvYmopOwo+ICAgCXZtYS0+cGFnZXMgPSBvYmotPm1tLnBhZ2VzOwo+ICAgCj4gICAJ bXV0ZXhfbG9jaygmdm1hLT52bS0+bXV0ZXgpOwo+IEBAIC0xMzM1LDExICsxMzI4LDEzIEBAIHN0 YXRpYyBpbnQgaWd0X2d0dF9yZXNlcnZlKHZvaWQgKmFyZykKPiAgIAkJCWdvdG8gb3V0Owo+ICAg CQl9Cj4gICAKPiArCQltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJCWVyciA9IGk5 MTVfZ2VtX2d0dF9yZXNlcnZlKCZnZ3R0LT52bSwgJnZtYS0+bm9kZSwKPiAgIAkJCQkJICAgb2Jq LT5iYXNlLnNpemUsCj4gICAJCQkJCSAgIHRvdGFsLAo+ICAgCQkJCQkgICBvYmotPmNhY2hlX2xl dmVsLAo+ICAgCQkJCQkgICAwKTsKPiArCQltdXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsK PiAgIAkJaWYgKGVycikgewo+ICAgCQkJcHJfZXJyKCJpOTE1X2dlbV9ndHRfcmVzZXJ2ZSAocGFz cyAxKSBmYWlsZWQgYXQgJWxsdS8lbGx1IHdpdGggZXJyPSVkXG4iLAo+ICAgCQkJICAgICAgIHRv dGFsLCBnZ3R0LT52bS50b3RhbCwgZXJyKTsKPiBAQCAtMTM4NSwxMSArMTM4MCwxMyBAQCBzdGF0 aWMgaW50IGlndF9ndHRfcmVzZXJ2ZSh2b2lkICphcmcpCj4gICAJCQlnb3RvIG91dDsKPiAgIAkJ fQo+ICAgCj4gKwkJbXV0ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQllcnIgPSBpOTE1 X2dlbV9ndHRfcmVzZXJ2ZSgmZ2d0dC0+dm0sICZ2bWEtPm5vZGUsCj4gICAJCQkJCSAgIG9iai0+ YmFzZS5zaXplLAo+ICAgCQkJCQkgICB0b3RhbCwKPiAgIAkJCQkJICAgb2JqLT5jYWNoZV9sZXZl bCwKPiAgIAkJCQkJICAgMCk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4g ICAJCWlmIChlcnIpIHsKPiAgIAkJCXByX2VycigiaTkxNV9nZW1fZ3R0X3Jlc2VydmUgKHBhc3Mg MikgZmFpbGVkIGF0ICVsbHUvJWxsdSB3aXRoIGVycj0lZFxuIiwKPiAgIAkJCSAgICAgICB0b3Rh bCwgZ2d0dC0+dm0udG90YWwsIGVycik7Cj4gQEAgLTE0MjksMTEgKzE0MjYsMTMgQEAgc3RhdGlj IGludCBpZ3RfZ3R0X3Jlc2VydmUodm9pZCAqYXJnKQo+ICAgCQkJCSAgICAgICAyKkk5MTVfR1RU X1BBR0VfU0laRSwKPiAgIAkJCQkgICAgICAgSTkxNV9HVFRfTUlOX0FMSUdOTUVOVCk7Cj4gICAK PiArCQltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJCWVyciA9IGk5MTVfZ2VtX2d0 dF9yZXNlcnZlKCZnZ3R0LT52bSwgJnZtYS0+bm9kZSwKPiAgIAkJCQkJICAgb2JqLT5iYXNlLnNp emUsCj4gICAJCQkJCSAgIG9mZnNldCwKPiAgIAkJCQkJICAgb2JqLT5jYWNoZV9sZXZlbCwKPiAg IAkJCQkJICAgMCk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJCWlm IChlcnIpIHsKPiAgIAkJCXByX2VycigiaTkxNV9nZW1fZ3R0X3Jlc2VydmUgKHBhc3MgMykgZmFp bGVkIGF0ICVsbHUvJWxsdSB3aXRoIGVycj0lZFxuIiwKPiAgIAkJCSAgICAgICB0b3RhbCwgZ2d0 dC0+dm0udG90YWwsIGVycik7Cj4gQEAgLTE1MDIsMTEgKzE1MDEsMTMgQEAgc3RhdGljIGludCBp Z3RfZ3R0X2luc2VydCh2b2lkICphcmcpCj4gICAKPiAgIAkvKiBDaGVjayBhIGNvdXBsZSBvZiBv YnZpb3VzbHkgaW52YWxpZCByZXF1ZXN0cyAqLwo+ICAgCWZvciAoaWkgPSBpbnZhbGlkX2luc2Vy dDsgaWktPnNpemU7IGlpKyspIHsKPiArCQltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4g ICAJCWVyciA9IGk5MTVfZ2VtX2d0dF9pbnNlcnQoJmdndHQtPnZtLCAmdG1wLAo+ICAgCQkJCQkg IGlpLT5zaXplLCBpaS0+YWxpZ25tZW50LAo+ICAgCQkJCQkgIEk5MTVfQ09MT1JfVU5FVklDVEFC TEUsCj4gICAJCQkJCSAgaWktPnN0YXJ0LCBpaS0+ZW5kLAo+ICAgCQkJCQkgIDApOwo+ICsJCW11 dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQlpZiAoZXJyICE9IC1FTk9TUEMpIHsK PiAgIAkJCXByX2VycigiSW52YWxpZCBpOTE1X2dlbV9ndHRfaW5zZXJ0KC5zaXplPSVsbHgsIC5h bGlnbm1lbnQ9JWxseCwgLnN0YXJ0PSVsbHgsIC5lbmQ9JWxseCkgc3VjY2VlZGVkIChlcnI9JWQp XG4iLAo+ICAgCQkJICAgICAgIGlpLT5zaXplLCBpaS0+YWxpZ25tZW50LCBpaS0+c3RhcnQsIGlp LT5lbmQsCj4gQEAgLTE1NDIsMTAgKzE1NDMsMTIgQEAgc3RhdGljIGludCBpZ3RfZ3R0X2luc2Vy dCh2b2lkICphcmcpCj4gICAJCQlnb3RvIG91dDsKPiAgIAkJfQo+ICAgCj4gKwkJbXV0ZXhfbG9j aygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQllcnIgPSBpOTE1X2dlbV9ndHRfaW5zZXJ0KCZnZ3R0 LT52bSwgJnZtYS0+bm9kZSwKPiAgIAkJCQkJICBvYmotPmJhc2Uuc2l6ZSwgMCwgb2JqLT5jYWNo ZV9sZXZlbCwKPiAgIAkJCQkJICAwLCBnZ3R0LT52bS50b3RhbCwKPiAgIAkJCQkJICAwKTsKPiAr CQltdXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAkJaWYgKGVyciA9PSAtRU5PU1BD KSB7Cj4gICAJCQkvKiBtYXhlZCBvdXQgdGhlIEdHVFQgc3BhY2UgKi8KPiAgIAkJCWk5MTVfZ2Vt X29iamVjdF9wdXQob2JqKTsKPiBAQCAtMTYwMCwxMCArMTYwMywxMiBAQCBzdGF0aWMgaW50IGln dF9ndHRfaW5zZXJ0KHZvaWQgKmFyZykKPiAgIAkJCWdvdG8gb3V0Owo+ICAgCQl9Cj4gICAKPiAr CQltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gICAJCWVyciA9IGk5MTVfZ2VtX2d0dF9p bnNlcnQoJmdndHQtPnZtLCAmdm1hLT5ub2RlLAo+ICAgCQkJCQkgIG9iai0+YmFzZS5zaXplLCAw LCBvYmotPmNhY2hlX2xldmVsLAo+ICAgCQkJCQkgIDAsIGdndHQtPnZtLnRvdGFsLAo+ICAgCQkJ CQkgIDApOwo+ICsJCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQlpZiAoZXJy KSB7Cj4gICAJCQlwcl9lcnIoImk5MTVfZ2VtX2d0dF9pbnNlcnQgKHBhc3MgMikgZmFpbGVkIGF0 ICVsbHUvJWxsdSB3aXRoIGVycj0lZFxuIiwKPiAgIAkJCSAgICAgICB0b3RhbCwgZ2d0dC0+dm0u dG90YWwsIGVycik7Cj4gQEAgLTE2NDcsMTAgKzE2NTIsMTIgQEAgc3RhdGljIGludCBpZ3RfZ3R0 X2luc2VydCh2b2lkICphcmcpCj4gICAJCQlnb3RvIG91dDsKPiAgIAkJfQo+ICAgCj4gKwkJbXV0 ZXhfbG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICAgCQllcnIgPSBpOTE1X2dlbV9ndHRfaW5zZXJ0 KCZnZ3R0LT52bSwgJnZtYS0+bm9kZSwKPiAgIAkJCQkJICBvYmotPmJhc2Uuc2l6ZSwgMCwgb2Jq LT5jYWNoZV9sZXZlbCwKPiAgIAkJCQkJICAwLCBnZ3R0LT52bS50b3RhbCwKPiAgIAkJCQkJICAw KTsKPiArCQltdXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgIAkJaWYgKGVycikgewo+ ICAgCQkJcHJfZXJyKCJpOTE1X2dlbV9ndHRfaW5zZXJ0IChwYXNzIDMpIGZhaWxlZCBhdCAlbGx1 LyVsbHUgd2l0aCBlcnI9JWRcbiIsCj4gICAJCQkgICAgICAgdG90YWwsIGdndHQtPnZtLnRvdGFs LCBlcnIpOwo+IEBAIC0xNjk0LDggKzE3MDEsOSBAQCBpbnQgaTkxNV9nZW1fZ3R0X21vY2tfc2Vs ZnRlc3RzKHZvaWQpCj4gICAJfQo+ICAgCW1vY2tfaW5pdF9nZ3R0KGk5MTUsIGdndHQpOwo+ICAg Cj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAllcnIgPSBpOTE1 X3N1YnRlc3RzKHRlc3RzLCBnZ3R0KTsKPiArCj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiAgIAltb2NrX2RldmljZV9mbHVzaChpOTE1KTsKPiAgIAltdXRleF91bmxv Y2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYwo+IGluZGV4IGIzNjg4NTQzZWQ3ZC4uNmI1YjAz MDgxODgwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1 X3JlcXVlc3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3Jl cXVlc3QuYwo+IEBAIC02NDcsOCArNjQ3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKmVt cHR5X2JhdGNoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCWlmIChlcnIpCj4g ICAJCWdvdG8gZXJyOwo+ICAgCj4gKwkvKiBGb3JjZSB0aGUgd2FpdCB3YWl0IG5vdyB0byBhdm9p ZCBpbmNsdWRpbmcgaXQgaW4gdGhlIGJlbmNobWFyayAqLwo+ICsJZXJyID0gaTkxNV92bWFfc3lu Yyh2bWEpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGVycl9waW47Cj4gKwo+ICAgCXJldHVybiB2 bWE7Cj4gICAKPiArZXJyX3BpbjoKPiArCWk5MTVfdm1hX3VucGluKHZtYSk7Cj4gICBlcnI6Cj4g ICAJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICAgCXJldHVybiBFUlJfUFRSKGVycik7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3ZtYS5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfdm1hLmMKPiBpbmRleCA5Nzc1MmRl ZWNjY2IuLjBlNGY2NjMxMmIzOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV92bWEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X3ZtYS5jCj4gQEAgLTgzMSw4ICs4MzEsOSBAQCBpbnQgaTkxNV92bWFfbW9ja19zZWxm dGVzdHModm9pZCkKPiAgIAl9Cj4gICAJbW9ja19pbml0X2dndHQoaTkxNSwgZ2d0dCk7Cj4gICAK PiAtCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCWVyciA9IGk5MTVf c3VidGVzdHModGVzdHMsIGdndHQpOwo+ICsKPiArCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICAgCW1vY2tfZGV2aWNlX2ZsdXNoKGk5MTUpOwo+ICAgCW11dGV4X3VubG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiBAQCAtODc5LDggKzg4MCw2IEBAIHN0 YXRpYyBpbnQgaWd0X3ZtYV9yZW1hcHBlZF9ndHQodm9pZCAqYXJnKQo+ICAgCWlmIChJU19FUlIo b2JqKSkKPiAgIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQo+ICAgCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3Bt X2dldCgmaTkxNS0+cnVudGltZV9wbSk7Cj4gICAKPiAgIAlmb3IgKHQgPSB0eXBlczsgKnQ7IHQr Kykgewo+IEBAIC05NzYsNyArOTc1LDYgQEAgc3RhdGljIGludCBpZ3Rfdm1hX3JlbWFwcGVkX2d0 dCh2b2lkICphcmcpCj4gICAKPiAgIG91dDoKPiAgIAlpbnRlbF9ydW50aW1lX3BtX3B1dCgmaTkx NS0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gLQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICAgCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiAgIAo+ICAgCXJldHVy biBlcnI7Cj4gCgpIaWdoIGxldmVsIGNvbmNlcHQgbG9va3Mgb2theSB0byBtZSwgYW5kIHRoZSBs b3cgbGV2ZWwgZGV0YWlscyBhcyB3ZWxsLiAKQnV0IGl0IGlzIHNvIGh1Z2UgdGhhdCBJIGNhbm5v dCBndWFyYW50ZWUgSSBoYXZlbid0IG1pc3NlZCBzb21ldGhpbmcgaW4gCnRoZSBtaWRkbGUuIFNv IGZvciBhbnkgaHlwb3RoZXRpY2FsIG1pc3NlZCB0aGluZyBpbiB0aGF0IGxhc3QgdGhpcmQsIEkg CnB1dCBteSBmYWl0aCB0aGF0IGJlZm9yZSByZWxlYXNlIHdlIGNhdGNoIGl0IGFuZCBmaXggaXQu CgpSZXZpZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4K ClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4