From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kara Subject: Re: [PATCH v2 2/3] mm/mmu_notifier: use structure for invalidate_range_start/end calls v2 Date: Wed, 5 Dec 2018 17:48:27 +0100 Message-ID: <20181205164827.GH30615@quack2.suse.cz> References: <20181205053628.3210-1-jglisse@redhat.com> <20181205053628.3210-3-jglisse@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id D65656E497 for ; Wed, 5 Dec 2018 16:48:29 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181205053628.3210-3-jglisse@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: jglisse@redhat.com Cc: Ralph Campbell , Jan Kara , kvm@vger.kernel.org, Matthew Wilcox , linux-rdma@vger.kernel.org, John Hubbard , Felix Kuehling , Radim =?utf-8?B?S3LEjW3DocWZ?= , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Michal Hocko , linux-mm@kvack.org, Ross Zwisler , linux-fsdevel@vger.kernel.org, Paolo Bonzini , Andrew Morton , Dan Williams List-Id: dri-devel@lists.freedesktop.org T24gV2VkIDA1LTEyLTE4IDAwOjM2OjI3LCBqZ2xpc3NlQHJlZGhhdC5jb20gd3JvdGU6Cj4gRnJv bTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+Cj4gCj4gVG8gYXZvaWQgaGF2 aW5nIHRvIGNoYW5nZSBtYW55IGNhbGwgc2l0ZXMgZXZlcnl0aW1lIHdlIHdhbnQgdG8gYWRkIGEK PiBwYXJhbWV0ZXIgdXNlIGEgc3RydWN0dXJlIHRvIGdyb3VwIGFsbCBwYXJhbWV0ZXJzIGZvciB0 aGUgbW11X25vdGlmaWVyCj4gaW52YWxpZGF0ZV9yYW5nZV9zdGFydC9lbmQgY2Fra3MuIE5vIGZ1 bmN0aW9uYWwgY2hhbmdlcyB3aXRoIHRoaXMKPiBwYXRjaC4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYx Ogo+ICAgICAtIGludHJvZHVjZSBtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgpIGFzIGFuIGhlbHBl ciB0byBpbml0aWFsaXplCj4gICAgICAgdGhlIHJhbmdlIHN0cnVjdHVyZSBhbGxvd2luZyB0byBv cHRpbWl6ZSBvdXQgdGhlIGNhc2Ugd2hlbiBtbXUKPiAgICAgICBub3RpZmllciBpcyBub3QgZW5h YmxlZAo+ICAgICAtIGZpeCBtbS9taWdyYXRlLmMgbWlncmF0ZV92bWFfY29sbGVjdCgpCj4gCj4g U2lnbmVkLW9mZi1ieTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+Cj4gQWNr ZWQtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KClRoZSBw YXRjaCBsb29rcyBnb29kIHRvIG1lLiBZb3UgY2FuIGFkZDoKCkFja2VkLWJ5OiBKYW4gS2FyYSA8 amFja0BzdXNlLmN6PgoKCQkJCQkJCQlIb256YQoKCj4gQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1A bGludXgtZm91bmRhdGlvbi5vcmc+Cj4gQ2M6IE1hdHRoZXcgV2lsY294IDxtYXdpbGNveEBtaWNy b3NvZnQuY29tPgo+IENjOiBSb3NzIFp3aXNsZXIgPHp3aXNsZXJAa2VybmVsLm9yZz4KPiBDYzog SmFuIEthcmEgPGphY2tAc3VzZS5jej4KPiBDYzogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFt c0BpbnRlbC5jb20+Cj4gQ2M6IFBhb2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+Cj4g Q2M6IFJhZGltIEtyxI1tw6HFmSA8cmtyY21hckByZWRoYXQuY29tPgo+IENjOiBNaWNoYWwgSG9j a28gPG1ob2Nrb0BrZXJuZWwub3JnPgo+IENjOiBGZWxpeCBLdWVobGluZyA8ZmVsaXgua3VlaGxp bmdAYW1kLmNvbT4KPiBDYzogUmFscGggQ2FtcGJlbGwgPHJjYW1wYmVsbEBudmlkaWEuY29tPgo+ IENjOiBKb2huIEh1YmJhcmQgPGpodWJiYXJkQG52aWRpYS5jb20+Cj4gQ2M6IGt2bUB2Z2VyLmtl cm5lbC5vcmcKPiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IENjOiBsaW51 eC1yZG1hQHZnZXIua2VybmVsLm9yZwo+IENjOiBsaW51eC1mc2RldmVsQHZnZXIua2VybmVsLm9y Zwo+IC0tLQo+ICBmcy9kYXguYyAgICAgICAgICAgICAgICAgICAgIHwgIDggKy0tCj4gIGZzL3By b2MvdGFza19tbXUuYyAgICAgICAgICAgfCAgNyArKy0KPiAgaW5jbHVkZS9saW51eC9tbS5oICAg ICAgICAgICB8ICA0ICstCj4gIGluY2x1ZGUvbGludXgvbW11X25vdGlmaWVyLmggfCA4NyArKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQo+ICBrZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyAg ICAgIHwgMTAgKystLQo+ICBtbS9odWdlX21lbW9yeS5jICAgICAgICAgICAgIHwgNTQgKysrKysr KysrKy0tLS0tLS0tLS0KPiAgbW0vaHVnZXRsYi5jICAgICAgICAgICAgICAgICB8IDUyICsrKysr KysrKystLS0tLS0tLS0KPiAgbW0va2h1Z2VwYWdlZC5jICAgICAgICAgICAgICB8IDEwICsrLS0K PiAgbW0va3NtLmMgICAgICAgICAgICAgICAgICAgICB8IDIxICsrKystLS0tCj4gIG1tL21hZHZp c2UuYyAgICAgICAgICAgICAgICAgfCAyMSArKysrLS0tLQo+ICBtbS9tZW1vcnkuYyAgICAgICAg ICAgICAgICAgIHwgOTcgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCj4gIG1t L21pZ3JhdGUuYyAgICAgICAgICAgICAgICAgfCAyNSArKysrKy0tLS0tCj4gIG1tL21tdV9ub3Rp Zmllci5jICAgICAgICAgICAgfCAzNSArKystLS0tLS0tLS0tCj4gIG1tL21wcm90ZWN0LmMgICAg ICAgICAgICAgICAgfCAxNSArKystLS0KPiAgbW0vbXJlbWFwLmMgICAgICAgICAgICAgICAgICB8 IDEwICsrLS0KPiAgbW0vb29tX2tpbGwuYyAgICAgICAgICAgICAgICB8IDE3ICsrKystLS0KPiAg bW0vcm1hcC5jICAgICAgICAgICAgICAgICAgICB8IDMwICsrKysrKy0tLS0tCj4gIDE3IGZpbGVz IGNoYW5nZWQsIDI1OCBpbnNlcnRpb25zKCspLCAyNDUgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAt LWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmMKPiBpbmRleCA5YmNjZTg5ZWExOGUuLjg3NDA4NWJh Y2FmNSAxMDA2NDQKPiAtLS0gYS9mcy9kYXguYwo+ICsrKyBiL2ZzL2RheC5jCj4gQEAgLTc1OCw3 ICs3NTgsOCBAQCBzdGF0aWMgdm9pZCBkYXhfZW50cnlfbWtjbGVhbihzdHJ1Y3QgYWRkcmVzc19z cGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCwKPiAgCj4gIAlpX21tYXBfbG9ja19yZWFkKG1h cHBpbmcpOwo+ICAJdm1hX2ludGVydmFsX3RyZWVfZm9yZWFjaCh2bWEsICZtYXBwaW5nLT5pX21t YXAsIGluZGV4LCBpbmRleCkgewo+IC0JCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RhcnQsIGVu ZDsKPiArCQlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwo+ICsJCXVuc2lnbmVkIGxv bmcgYWRkcmVzczsKPiAgCj4gIAkJY29uZF9yZXNjaGVkKCk7Cj4gIAo+IEBAIC03NzIsNyArNzcz LDggQEAgc3RhdGljIHZvaWQgZGF4X2VudHJ5X21rY2xlYW4oc3RydWN0IGFkZHJlc3Nfc3BhY2Ug Km1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgsCj4gIAkJICogY2FsbCBtbXVfbm90aWZpZXJfaW52YWxp ZGF0ZV9yYW5nZV9zdGFydCgpIG9uIG91ciBiZWhhbGYKPiAgCQkgKiBiZWZvcmUgdGFraW5nIGFu eSBsb2NrLgo+ICAJCSAqLwo+IC0JCWlmIChmb2xsb3dfcHRlX3BtZCh2bWEtPnZtX21tLCBhZGRy ZXNzLCAmc3RhcnQsICZlbmQsICZwdGVwLCAmcG1kcCwgJnB0bCkpCj4gKwkJaWYgKGZvbGxvd19w dGVfcG1kKHZtYS0+dm1fbW0sIGFkZHJlc3MsICZyYW5nZSwKPiArCQkJCSAgICZwdGVwLCAmcG1k cCwgJnB0bCkpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQkvKgo+IEBAIC04MTQsNyArODE2LDcg QEAgc3RhdGljIHZvaWQgZGF4X2VudHJ5X21rY2xlYW4oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1h cHBpbmcsIHBnb2ZmX3QgaW5kZXgsCj4gIAkJCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsK PiAgCQl9Cj4gIAo+IC0JCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCh2bWEtPnZt X21tLCBzdGFydCwgZW5kKTsKPiArCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQo JnJhbmdlKTsKPiAgCX0KPiAgCWlfbW1hcF91bmxvY2tfcmVhZChtYXBwaW5nKTsKPiAgfQo+IGRp ZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKPiBpbmRl eCA0N2MzNzY0YzQ2OWIuLmIzZGRjZWIwMDNiYyAxMDA2NDQKPiAtLS0gYS9mcy9wcm9jL3Rhc2tf bW11LmMKPiArKysgYi9mcy9wcm9jL3Rhc2tfbW11LmMKPiBAQCAtMTA5Niw2ICsxMDk2LDcgQEAg c3RhdGljIHNzaXplX3QgY2xlYXJfcmVmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qg Y2hhciBfX3VzZXIgKmJ1ZiwKPiAgCQlyZXR1cm4gLUVTUkNIOwo+ICAJbW0gPSBnZXRfdGFza19t bSh0YXNrKTsKPiAgCWlmIChtbSkgewo+ICsJCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFu Z2U7Cj4gIAkJc3RydWN0IGNsZWFyX3JlZnNfcHJpdmF0ZSBjcCA9IHsKPiAgCQkJLnR5cGUgPSB0 eXBlLAo+ICAJCX07Cj4gQEAgLTExMzksMTEgKzExNDAsMTMgQEAgc3RhdGljIHNzaXplX3QgY2xl YXJfcmVmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwK PiAgCQkJCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKPiAgCQkJCWJyZWFrOwo+ICAJ CQl9Cj4gLQkJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tLCAwLCAtMSk7 Cj4gKwo+ICsJCQltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIG1tLCAwLCAtMVVMKTsK PiArCQkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoJnJhbmdlKTsKPiAgCQl9 Cj4gIAkJd2Fsa19wYWdlX3JhbmdlKDAsIG1tLT5oaWdoZXN0X3ZtX2VuZCwgJmNsZWFyX3JlZnNf d2Fsayk7Cj4gIAkJaWYgKHR5cGUgPT0gQ0xFQVJfUkVGU19TT0ZUX0RJUlRZKQo+IC0JCQltbXVf bm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIDAsIC0xKTsKPiArCQkJbW11X25vdGlm aWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCZyYW5nZSk7Cj4gIAkJdGxiX2ZpbmlzaF9tbXUoJnRs YiwgMCwgLTEpOwo+ICAJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Cj4gIG91dF9tbToKPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCj4gaW5kZXgg NTQxMWRlOTNhMzYzLi5lN2I2ZjJiMzA3MTMgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9t bS5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCj4gQEAgLTEzOTcsNiArMTM5Nyw4IEBAIHN0 cnVjdCBtbV93YWxrIHsKPiAgCXZvaWQgKnByaXZhdGU7Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgbW11 X25vdGlmaWVyX3JhbmdlOwo+ICsKPiAgaW50IHdhbGtfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25n IGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo+ICAJCXN0cnVjdCBtbV93YWxrICp3YWxrKTsKPiAg aW50IHdhbGtfcGFnZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV93 YWxrICp3YWxrKTsKPiBAQCAtMTQwNSw3ICsxNDA3LDcgQEAgdm9pZCBmcmVlX3BnZF9yYW5nZShz dHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gIGludCBjb3B5X3Bh Z2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsCj4g IAkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKPiAgaW50IGZvbGxvd19wdGVfcG1kKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCj4gLQkJCSAgICAgdW5z aWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKPiArCQkgCSAgICAgc3RydWN0 IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UsCj4gIAkJCSAgICAgcHRlX3QgKipwdGVwcCwgcG1k X3QgKipwbWRwcCwgc3BpbmxvY2tfdCAqKnB0bHApOwo+ICBpbnQgZm9sbG93X3BmbihzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAo+ICAJdW5zaWduZWQg bG9uZyAqcGZuKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaCBi L2luY2x1ZGUvbGludXgvbW11X25vdGlmaWVyLmgKPiBpbmRleCAzNjhmMGMxYTA0OWQuLjM5YjA2 NzcyNDI3ZiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L21tdV9ub3RpZmllci5oCj4gKysr IGIvaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaAo+IEBAIC0yMjAsMTEgKzIyMCw4IEBAIGV4 dGVybiBpbnQgX19tbXVfbm90aWZpZXJfdGVzdF95b3VuZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwK PiAgCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKPiAgZXh0ZXJuIHZvaWQgX19tbXVf bm90aWZpZXJfY2hhbmdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAgCQkJCSAgICAgIHVu c2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKTsKPiAtZXh0ZXJuIGludCBfX21tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+IC0JCQkJ ICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKPiAtCQkJCSAgYm9vbCBi bG9ja2FibGUpOwo+IC1leHRlcm4gdm9pZCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3Jhbmdl X2VuZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAtCQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwg dW5zaWduZWQgbG9uZyBlbmQsCj4gK2V4dGVybiBpbnQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0 ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICopOwo+ICtleHRlcm4gdm9p ZCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVy X3JhbmdlICpyLAo+ICAJCQkJICBib29sIG9ubHlfZW5kKTsKPiAgZXh0ZXJuIHZvaWQgX19tbXVf bm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAgCQkJCSAg dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwo+IEBAIC0yNjgsMzMgKzI2 NSwzNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW11X25vdGlmaWVyX2NoYW5nZV9wdGUoc3RydWN0 IG1tX3N0cnVjdCAqbW0sCj4gIAkJX19tbXVfbm90aWZpZXJfY2hhbmdlX3B0ZShtbSwgYWRkcmVz cywgcHRlKTsKPiAgfQo+ICAKPiAtc3RhdGljIGlubGluZSB2b2lkIG1tdV9ub3RpZmllcl9pbnZh bGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+IC0JCQkJICB1bnNpZ25l ZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKPiArc3RhdGljIGlubGluZSB2b2lkCj4g K21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXJf cmFuZ2UgKnJhbmdlKQo+ICB7Cj4gLQlpZiAobW1faGFzX25vdGlmaWVycyhtbSkpCj4gLQkJX19t bXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwgc3RhcnQsIGVuZCwgdHJ1ZSk7 Cj4gKwlpZiAobW1faGFzX25vdGlmaWVycyhyYW5nZS0+bW0pKSB7Cj4gKwkJcmFuZ2UtPmJsb2Nr YWJsZSA9IHRydWU7Cj4gKwkJX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChy YW5nZSk7Cj4gKwl9Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgaW50IG1tdV9ub3RpZmllcl9p bnZhbGlkYXRlX3JhbmdlX3N0YXJ0X25vbmJsb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+IC0J CQkJICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKPiArc3RhdGljIGlu bGluZSBpbnQKPiArbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxvY2so c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpCj4gIHsKPiAtCWlmIChtbV9oYXNfbm90 aWZpZXJzKG1tKSkKPiAtCQlyZXR1cm4gX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9z dGFydChtbSwgc3RhcnQsIGVuZCwgZmFsc2UpOwo+ICsJaWYgKG1tX2hhc19ub3RpZmllcnMocmFu Z2UtPm1tKSkgewo+ICsJCXJhbmdlLT5ibG9ja2FibGUgPSBmYWxzZTsKPiArCQlyZXR1cm4gX19t bXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChyYW5nZSk7Cj4gKwl9Cj4gIAlyZXR1 cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGlubGluZSB2b2lkIG1tdV9ub3RpZmllcl9pbnZhbGlk YXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAtCQkJCSAgdW5zaWduZWQgbG9u ZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICttbXVf bm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAq cmFuZ2UpCj4gIHsKPiAtCWlmIChtbV9oYXNfbm90aWZpZXJzKG1tKSkKPiAtCQlfX21tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChtbSwgc3RhcnQsIGVuZCwgZmFsc2UpOwo+ICsJaWYg KG1tX2hhc19ub3RpZmllcnMocmFuZ2UtPm1tKSkKPiArCQlfX21tdV9ub3RpZmllcl9pbnZhbGlk YXRlX3JhbmdlX2VuZChyYW5nZSwgZmFsc2UpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHZv aWQgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfb25seV9lbmQoc3RydWN0IG1tX3N0cnVj dCAqbW0sCj4gLQkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQo+ ICtzdGF0aWMgaW5saW5lIHZvaWQKPiArbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfb25s eV9lbmQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpCj4gIHsKPiAtCWlmIChtbV9o YXNfbm90aWZpZXJzKG1tKSkKPiAtCQlfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2Vu ZChtbSwgc3RhcnQsIGVuZCwgdHJ1ZSk7Cj4gKwlpZiAobW1faGFzX25vdGlmaWVycyhyYW5nZS0+ bW0pKQo+ICsJCV9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHJhbmdlLCB0cnVl KTsKPiAgfQo+ICAKPiAgc3RhdGljIGlubGluZSB2b2lkIG1tdV9ub3RpZmllcl9pbnZhbGlkYXRl X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+IEBAIC0zMTUsNiArMzE2LDE3IEBAIHN0YXRp YyBpbmxpbmUgdm9pZCBtbXVfbm90aWZpZXJfbW1fZGVzdHJveShzdHJ1Y3QgbW1fc3RydWN0ICpt bSkKPiAgCQlfX21tdV9ub3RpZmllcl9tbV9kZXN0cm95KG1tKTsKPiAgfQo+ICAKPiArCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChzdHJ1Y3QgbW11X25vdGlm aWVyX3JhbmdlICpyYW5nZSwKPiArCQkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiArCQkJ CQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LAo+ICsJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZW5kKQo+ ICt7Cj4gKwlyYW5nZS0+bW0gPSBtbTsKPiArCXJhbmdlLT5zdGFydCA9IHN0YXJ0Owo+ICsJcmFu Z2UtPmVuZCA9IGVuZDsKPiArfQo+ICsKPiAgI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5n X25vdGlmeShfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXApCQlcCj4gICh7CQkJCQkJCQkJXAo+ICAJ aW50IF9feW91bmc7CQkJCQkJCVwKPiBAQCAtNDI4LDYgKzQ0MCwyMyBAQCBleHRlcm4gdm9pZCBt bXVfbm90aWZpZXJfc3luY2hyb25pemUodm9pZCk7Cj4gIAo+ICAjZWxzZSAvKiBDT05GSUdfTU1V X05PVElGSUVSICovCj4gIAo+ICtzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHsKPiArCXVuc2ln bmVkIGxvbmcgc3RhcnQ7Cj4gKwl1bnNpZ25lZCBsb25nIGVuZDsKPiArfTsKPiArCj4gK3N0YXRp YyBpbmxpbmUgdm9pZCBfbW11X25vdGlmaWVyX3JhbmdlX2luaXQoc3RydWN0IG1tdV9ub3RpZmll cl9yYW5nZSAqcmFuZ2UsCj4gKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4gKwkJCQkJ ICAgIHVuc2lnbmVkIGxvbmcgZW5kKQo+ICt7Cj4gKwlyYW5nZS0+c3RhcnQgPSBzdGFydDsKPiAr CXJhbmdlLT5lbmQgPSBlbmQ7Cj4gK30KPiArCj4gKyNkZWZpbmUgbW11X25vdGlmaWVyX3Jhbmdl X2luaXQocmFuZ2UsIG1tLCBzdGFydCwgZW5kKSBcCj4gKwlfbW11X25vdGlmaWVyX3JhbmdlX2lu aXQocmFuZ2UsIHN0YXJ0LCBlbmQpCj4gKwo+ICsKPiAgc3RhdGljIGlubGluZSBpbnQgbW1faGFz X25vdGlmaWVycyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAgewo+ICAJcmV0dXJuIDA7Cj4gQEAg LTQ1NSwyNCArNDg0LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbXVfbm90aWZpZXJfY2hhbmdl X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAgewo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5l IHZvaWQgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tX3N0cnVj dCAqbW0sCj4gLQkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQo+ ICtzdGF0aWMgaW5saW5lIHZvaWQKPiArbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3Rh cnQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpCj4gIHsKPiAgfQo+ICAKPiAtc3Rh dGljIGlubGluZSBpbnQgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbm9uYmxv Y2soc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gLQkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVu c2lnbmVkIGxvbmcgZW5kKQo+ICtzdGF0aWMgaW5saW5lIGludAo+ICttbXVfbm90aWZpZXJfaW52 YWxpZGF0ZV9yYW5nZV9zdGFydF9ub25ibG9jayhzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpy YW5nZSkKPiAgewo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBt bXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4g LQkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQo+ICtzdGF0aWMg aW5saW5lCj4gK3ZvaWQgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBt bXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKQo+ICB7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUg dm9pZCBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9vbmx5X2VuZChzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwKPiAtCQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQp Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICttbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9v bmx5X2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKPiAgewo+ICB9Cj4gIAo+ IGRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXBy b2Jlcy5jCj4gaW5kZXggMzIyZTk3YmJiNDM3Li4xZmM4YTkzNzA5YzMgMTAwNjQ0Cj4gLS0tIGEv a2VybmVsL2V2ZW50cy91cHJvYmVzLmMKPiArKysgYi9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYwo+ IEBAIC0xNzEsMTEgKzE3MSwxMSBAQCBzdGF0aWMgaW50IF9fcmVwbGFjZV9wYWdlKHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gIAkJLmFkZHJlc3MgPSBh ZGRyLAo+ICAJfTsKPiAgCWludCBlcnI7Cj4gLQkvKiBGb3IgbW11X25vdGlmaWVycyAqLwo+IC0J Y29uc3QgdW5zaWduZWQgbG9uZyBtbXVuX3N0YXJ0ID0gYWRkcjsKPiAtCWNvbnN0IHVuc2lnbmVk IGxvbmcgbW11bl9lbmQgICA9IGFkZHIgKyBQQUdFX1NJWkU7Cj4gKwlzdHJ1Y3QgbW11X25vdGlm aWVyX3JhbmdlIHJhbmdlOwo+ICAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwo+ICAKPiArCW1t dV9ub3RpZmllcl9yYW5nZV9pbml0KCZyYW5nZSwgbW0sIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUp Owo+ICsKPiAgCVZNX0JVR19PTl9QQUdFKFBhZ2VUcmFuc0h1Z2Uob2xkX3BhZ2UpLCBvbGRfcGFn ZSk7Cj4gIAo+ICAJZXJyID0gbWVtX2Nncm91cF90cnlfY2hhcmdlKG5ld19wYWdlLCB2bWEtPnZt X21tLCBHRlBfS0VSTkVMLCAmbWVtY2csCj4gQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMgaW50 IF9fcmVwbGFjZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25n IGFkZHIsCj4gIAkvKiBGb3IgdHJ5X3RvX2ZyZWVfc3dhcCgpIGFuZCBtdW5sb2NrX3ZtYV9wYWdl KCkgYmVsb3cgKi8KPiAgCWxvY2tfcGFnZShvbGRfcGFnZSk7Cj4gIAo+IC0JbW11X25vdGlmaWVy X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQobW0sIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKPiArCW1t dV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCZyYW5nZSk7Cj4gIAllcnIgPSAtRUFH QUlOOwo+ICAJaWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsaygmcHZtdykpIHsKPiAgCQltZW1fY2dy b3VwX2NhbmNlbF9jaGFyZ2UobmV3X3BhZ2UsIG1lbWNnLCBmYWxzZSk7Cj4gQEAgLTIyMCw3ICsy MjAsNyBAQCBzdGF0aWMgaW50IF9fcmVwbGFjZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gIAo+ICAJZXJyID0gMDsKPiAgIHVubG9jazoKPiAt CW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChtbSwgbW11bl9zdGFydCwgbW11bl9l bmQpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCZyYW5nZSk7Cj4gIAl1 bmxvY2tfcGFnZShvbGRfcGFnZSk7Cj4gIAlyZXR1cm4gZXJyOwo+ICB9Cj4gZGlmZiAtLWdpdCBh L21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCj4gaW5kZXggNjIyY2NlZDc0ZmQ5 Li5jMWQzY2U4MDk0MTYgMTAwNjQ0Cj4gLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwo+ICsrKyBiL21t L2h1Z2VfbWVtb3J5LmMKPiBAQCAtMTE0NCw4ICsxMTQ0LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3Qg ZG9faHVnZV9wbWRfd3BfcGFnZV9mYWxsYmFjayhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKPiAgCWlu dCBpOwo+ICAJdm1fZmF1bHRfdCByZXQgPSAwOwo+ICAJc3RydWN0IHBhZ2UgKipwYWdlczsKPiAt CXVuc2lnbmVkIGxvbmcgbW11bl9zdGFydDsJLyogRm9yIG1tdV9ub3RpZmllcnMgKi8KPiAtCXVu c2lnbmVkIGxvbmcgbW11bl9lbmQ7CQkvKiBGb3IgbW11X25vdGlmaWVycyAqLwo+ICsJc3RydWN0 IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKPiAgCj4gIAlwYWdlcyA9IGttYWxsb2NfYXJyYXko SFBBR0VfUE1EX05SLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCj4gIAkJCSAgICAgIEdGUF9LRVJO RUwpOwo+IEBAIC0xMTgzLDkgKzExODIsOSBAQCBzdGF0aWMgdm1fZmF1bHRfdCBkb19odWdlX3Bt ZF93cF9wYWdlX2ZhbGxiYWNrKHN0cnVjdCB2bV9mYXVsdCAqdm1mLAo+ICAJCWNvbmRfcmVzY2hl ZCgpOwo+ICAJfQo+ICAKPiAtCW1tdW5fc3RhcnQgPSBoYWRkcjsKPiAtCW1tdW5fZW5kICAgPSBo YWRkciArIEhQQUdFX1BNRF9TSVpFOwo+IC0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vf c3RhcnQodm1hLT52bV9tbSwgbW11bl9zdGFydCwgbW11bl9lbmQpOwo+ICsJbW11X25vdGlmaWVy X3JhbmdlX2luaXQoJnJhbmdlLCB2bWEtPnZtX21tLCBoYWRkciwKPiArCQkJCWhhZGRyICsgSFBB R0VfUE1EX1NJWkUpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoJnJh bmdlKTsKPiAgCj4gIAl2bWYtPnB0bCA9IHBtZF9sb2NrKHZtYS0+dm1fbW0sIHZtZi0+cG1kKTsK PiAgCWlmICh1bmxpa2VseSghcG1kX3NhbWUoKnZtZi0+cG1kLCBvcmlnX3BtZCkpKQo+IEBAIC0x MjMwLDggKzEyMjksNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlX2Zh bGxiYWNrKHN0cnVjdCB2bV9mYXVsdCAqdm1mLAo+ICAJICogTm8gbmVlZCB0byBkb3VibGUgY2Fs bCBtbXVfbm90aWZpZXItPmludmFsaWRhdGVfcmFuZ2UoKSBjYWxsYmFjayBhcwo+ICAJICogdGhl IGFib3ZlIHBtZHBfaHVnZV9jbGVhcl9mbHVzaF9ub3RpZnkoKSBkaWQgYWxyZWFkeSBjYWxsIGl0 Lgo+ICAJICovCj4gLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9vbmx5X2VuZCh2bWEt PnZtX21tLCBtbXVuX3N0YXJ0LAo+IC0JCQkJCQltbXVuX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJf aW52YWxpZGF0ZV9yYW5nZV9vbmx5X2VuZCgmcmFuZ2UpOwo+ICAKPiAgCXJldCB8PSBWTV9GQVVM VF9XUklURTsKPiAgCXB1dF9wYWdlKHBhZ2UpOwo+IEBAIC0xMjQxLDcgKzEyMzksNyBAQCBzdGF0 aWMgdm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlX2ZhbGxiYWNrKHN0cnVjdCB2bV9mYXVs dCAqdm1mLAo+ICAKPiAgb3V0X2ZyZWVfcGFnZXM6Cj4gIAlzcGluX3VubG9jayh2bWYtPnB0bCk7 Cj4gLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQodm1hLT52bV9tbSwgbW11bl9z dGFydCwgbW11bl9lbmQpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCZy YW5nZSk7Cj4gIAlmb3IgKGkgPSAwOyBpIDwgSFBBR0VfUE1EX05SOyBpKyspIHsKPiAgCQltZW1j ZyA9ICh2b2lkICopcGFnZV9wcml2YXRlKHBhZ2VzW2ldKTsKPiAgCQlzZXRfcGFnZV9wcml2YXRl KHBhZ2VzW2ldLCAwKTsKPiBAQCAtMTI1OCw4ICsxMjU2LDcgQEAgdm1fZmF1bHRfdCBkb19odWdl X3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwbWRfdCBvcmlnX3BtZCkKPiAgCXN0 cnVjdCBwYWdlICpwYWdlID0gTlVMTCwgKm5ld19wYWdlOwo+ICAJc3RydWN0IG1lbV9jZ3JvdXAg Km1lbWNnOwo+ICAJdW5zaWduZWQgbG9uZyBoYWRkciA9IHZtZi0+YWRkcmVzcyAmIEhQQUdFX1BN RF9NQVNLOwo+IC0JdW5zaWduZWQgbG9uZyBtbXVuX3N0YXJ0OwkvKiBGb3IgbW11X25vdGlmaWVy cyAqLwo+IC0JdW5zaWduZWQgbG9uZyBtbXVuX2VuZDsJCS8qIEZvciBtbXVfbm90aWZpZXJzICov Cj4gKwlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwo+ICAJZ2ZwX3QgaHVnZV9nZnA7 CQkJLyogZm9yIGFsbG9jYXRpb24gYW5kIGNoYXJnZSAqLwo+ICAJdm1fZmF1bHRfdCByZXQgPSAw Owo+ICAKPiBAQCAtMTM0OSw5ICsxMzQ2LDkgQEAgdm1fZmF1bHRfdCBkb19odWdlX3BtZF93cF9w YWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwbWRfdCBvcmlnX3BtZCkKPiAgCQkJCSAgICB2bWEs IEhQQUdFX1BNRF9OUik7Cj4gIAlfX1NldFBhZ2VVcHRvZGF0ZShuZXdfcGFnZSk7Cj4gIAo+IC0J bW11bl9zdGFydCA9IGhhZGRyOwo+IC0JbW11bl9lbmQgICA9IGhhZGRyICsgSFBBR0VfUE1EX1NJ WkU7Cj4gLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCh2bWEtPnZtX21tLCBt bXVuX3N0YXJ0LCBtbXVuX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2Us IHZtYS0+dm1fbW0sIGhhZGRyLAo+ICsJCQkJaGFkZHIgKyBIUEFHRV9QTURfU0laRSk7Cj4gKwlt bXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmcmFuZ2UpOwo+ICAKPiAgCXNwaW5f bG9jayh2bWYtPnB0bCk7Cj4gIAlpZiAocGFnZSkKPiBAQCAtMTM4Niw4ICsxMzgzLDcgQEAgdm1f ZmF1bHRfdCBkb19odWdlX3BtZF93cF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwbWRfdCBv cmlnX3BtZCkKPiAgCSAqIE5vIG5lZWQgdG8gZG91YmxlIGNhbGwgbW11X25vdGlmaWVyLT5pbnZh bGlkYXRlX3JhbmdlKCkgY2FsbGJhY2sgYXMKPiAgCSAqIHRoZSBhYm92ZSBwbWRwX2h1Z2VfY2xl YXJfZmx1c2hfbm90aWZ5KCkgZGlkIGFscmVhZHkgY2FsbCBpdC4KPiAgCSAqLwo+IC0JbW11X25v dGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfb25seV9lbmQodm1hLT52bV9tbSwgbW11bl9zdGFydCwK PiAtCQkJCQkgICAgICAgbW11bl9lbmQpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFu Z2Vfb25seV9lbmQoJnJhbmdlKTsKPiAgb3V0Ogo+ICAJcmV0dXJuIHJldDsKPiAgb3V0X3VubG9j azoKPiBAQCAtMjAyOCwxNCArMjAyNCwxNSBAQCB2b2lkIF9fc3BsaXRfaHVnZV9wdWQoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB1ZF90ICpwdWQsCj4gIAkJdW5zaWduZWQgbG9uZyBhZGRy ZXNzKQo+ICB7Cj4gIAlzcGlubG9ja190ICpwdGw7Cj4gLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9 IHZtYS0+dm1fbW07Cj4gLQl1bnNpZ25lZCBsb25nIGhhZGRyID0gYWRkcmVzcyAmIEhQQUdFX1BV RF9NQVNLOwo+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKPiAgCj4gLQltbXVf bm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwgaGFkZHIsIGhhZGRyICsgSFBBR0Vf UFVEX1NJWkUpOwo+IC0JcHRsID0gcHVkX2xvY2sobW0sIHB1ZCk7Cj4gKwltbXVfbm90aWZpZXJf cmFuZ2VfaW5pdCgmcmFuZ2UsIHZtYS0+dm1fbW0sIGFkZHJlc3MgJiBIUEFHRV9QVURfTUFTSywK PiArCQkJCShhZGRyZXNzICYgSFBBR0VfUFVEX01BU0spICsgSFBBR0VfUFVEX1NJWkUpOwo+ICsJ bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoJnJhbmdlKTsKPiArCXB0bCA9IHB1 ZF9sb2NrKHZtYS0+dm1fbW0sIHB1ZCk7Cj4gIAlpZiAodW5saWtlbHkoIXB1ZF90cmFuc19odWdl KCpwdWQpICYmICFwdWRfZGV2bWFwKCpwdWQpKSkKPiAgCQlnb3RvIG91dDsKPiAtCV9fc3BsaXRf aHVnZV9wdWRfbG9ja2VkKHZtYSwgcHVkLCBoYWRkcik7Cj4gKwlfX3NwbGl0X2h1Z2VfcHVkX2xv Y2tlZCh2bWEsIHB1ZCwgcmFuZ2Uuc3RhcnQpOwo+ICAKPiAgb3V0Ogo+ICAJc3Bpbl91bmxvY2so cHRsKTsKPiBAQCAtMjA0Myw4ICsyMDQwLDcgQEAgdm9pZCBfX3NwbGl0X2h1Z2VfcHVkKHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkLAo+ICAJICogTm8gbmVlZCB0byBkb3Vi bGUgY2FsbCBtbXVfbm90aWZpZXItPmludmFsaWRhdGVfcmFuZ2UoKSBjYWxsYmFjayBhcwo+ICAJ ICogdGhlIGFib3ZlIHB1ZHBfaHVnZV9jbGVhcl9mbHVzaF9ub3RpZnkoKSBkaWQgYWxyZWFkeSBj YWxsIGl0Lgo+ICAJICovCj4gLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9vbmx5X2Vu ZChtbSwgaGFkZHIsIGhhZGRyICsKPiAtCQkJCQkgICAgICAgSFBBR0VfUFVEX1NJWkUpOwo+ICsJ bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfb25seV9lbmQoJnJhbmdlKTsKPiAgfQo+ICAj ZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi8KPiAg Cj4gQEAgLTIyNDQsMTEgKzIyNDAsMTIgQEAgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kKHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLAo+ICAJCXVuc2lnbmVkIGxvbmcgYWRkcmVz cywgYm9vbCBmcmVlemUsIHN0cnVjdCBwYWdlICpwYWdlKQo+ICB7Cj4gIAlzcGlubG9ja190ICpw dGw7Cj4gLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Cj4gLQl1bnNpZ25lZCBs b25nIGhhZGRyID0gYWRkcmVzcyAmIEhQQUdFX1BNRF9NQVNLOwo+ICsJc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZSByYW5nZTsKPiAgCj4gLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9z dGFydChtbSwgaGFkZHIsIGhhZGRyICsgSFBBR0VfUE1EX1NJWkUpOwo+IC0JcHRsID0gcG1kX2xv Y2sobW0sIHBtZCk7Cj4gKwltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIHZtYS0+dm1f bW0sIGFkZHJlc3MgJiBIUEFHRV9QTURfTUFTSywKPiArCQkJCShhZGRyZXNzICYgSFBBR0VfUE1E X01BU0spICsgSFBBR0VfUE1EX1NJWkUpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFu Z2Vfc3RhcnQoJnJhbmdlKTsKPiArCXB0bCA9IHBtZF9sb2NrKHZtYS0+dm1fbW0sIHBtZCk7Cj4g IAo+ICAJLyoKPiAgCSAqIElmIGNhbGxlciBhc2tzIHRvIHNldHVwIGEgbWlncmF0aW9uIGVudHJp ZXMsIHdlIG5lZWQgYSBwYWdlIHRvIGNoZWNrCj4gQEAgLTIyNjQsNyArMjI2MSw3IEBAIHZvaWQg X19zcGxpdF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCwK PiAgCQkJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKPiAgCX0gZWxzZSBpZiAoIShwbWRfZGV2bWFw KCpwbWQpIHx8IGlzX3BtZF9taWdyYXRpb25fZW50cnkoKnBtZCkpKQo+ICAJCWdvdG8gb3V0Owo+ IC0JX19zcGxpdF9odWdlX3BtZF9sb2NrZWQodm1hLCBwbWQsIGhhZGRyLCBmcmVlemUpOwo+ICsJ X19zcGxpdF9odWdlX3BtZF9sb2NrZWQodm1hLCBwbWQsIHJhbmdlLnN0YXJ0LCBmcmVlemUpOwo+ ICBvdXQ6Cj4gIAlzcGluX3VubG9jayhwdGwpOwo+ICAJLyoKPiBAQCAtMjI4MCw4ICsyMjc3LDcg QEAgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRf dCAqcG1kLAo+ICAJICogICAgIGFueSBmdXJ0aGVyIGNoYW5nZXMgdG8gaW5kaXZpZHVhbCBwdGUg d2lsbCBub3RpZnkuIFNvIG5vIG5lZWQKPiAgCSAqICAgICB0byBjYWxsIG1tdV9ub3RpZmllci0+ aW52YWxpZGF0ZV9yYW5nZSgpCj4gIAkgKi8KPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3Jh bmdlX29ubHlfZW5kKG1tLCBoYWRkciwgaGFkZHIgKwo+IC0JCQkJCSAgICAgICBIUEFHRV9QTURf U0laRSk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9vbmx5X2VuZCgmcmFuZ2Up Owo+ICB9Cj4gIAo+ICB2b2lkIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3Moc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKPiBkaWZmIC0tZ2l0IGEvbW0vaHVn ZXRsYi5jIGIvbW0vaHVnZXRsYi5jCj4gaW5kZXggNzA1YTNlOWNjOTEwLi5lN2MxNzljYmNkNzUg MTAwNjQ0Cj4gLS0tIGEvbW0vaHVnZXRsYi5jCj4gKysrIGIvbW0vaHVnZXRsYi5jCj4gQEAgLTMy MzksMTYgKzMyMzksMTYgQEAgaW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9z dHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLAo+ICAJaW50IGNvdzsKPiAgCXN0cnVj dCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7Cj4gIAl1bnNpZ25lZCBsb25nIHN6ID0gaHVn ZV9wYWdlX3NpemUoaCk7Cj4gLQl1bnNpZ25lZCBsb25nIG1tdW5fc3RhcnQ7CS8qIEZvciBtbXVf bm90aWZpZXJzICovCj4gLQl1bnNpZ25lZCBsb25nIG1tdW5fZW5kOwkJLyogRm9yIG1tdV9ub3Rp ZmllcnMgKi8KPiArCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7Cj4gIAlpbnQgcmV0 ID0gMDsKPiAgCj4gIAljb3cgPSAodm1hLT52bV9mbGFncyAmIChWTV9TSEFSRUQgfCBWTV9NQVlX UklURSkpID09IFZNX01BWVdSSVRFOwo+ICAKPiAtCW1tdW5fc3RhcnQgPSB2bWEtPnZtX3N0YXJ0 Owo+IC0JbW11bl9lbmQgPSB2bWEtPnZtX2VuZDsKPiAtCWlmIChjb3cpCj4gLQkJbW11X25vdGlm aWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3JjLCBtbXVuX3N0YXJ0LCBtbXVuX2VuZCk7Cj4g KwlpZiAoY293KSB7Cj4gKwkJbW11X25vdGlmaWVyX3JhbmdlX2luaXQoJnJhbmdlLCBzcmMsIHZt YS0+dm1fc3RhcnQsCj4gKwkJCQkJdm1hLT52bV9lbmQpOwo+ICsJCW1tdV9ub3RpZmllcl9pbnZh bGlkYXRlX3JhbmdlX3N0YXJ0KCZyYW5nZSk7Cj4gKwl9Cj4gIAo+ICAJZm9yIChhZGRyID0gdm1h LT52bV9zdGFydDsgYWRkciA8IHZtYS0+dm1fZW5kOyBhZGRyICs9IHN6KSB7Cj4gIAkJc3Bpbmxv Y2tfdCAqc3JjX3B0bCwgKmRzdF9wdGw7Cj4gQEAgLTMzMjQsNyArMzMyNCw3IEBAIGludCBjb3B5 X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1 Y3QgKnNyYywKPiAgCX0KPiAgCj4gIAlpZiAoY293KQo+IC0JCW1tdV9ub3RpZmllcl9pbnZhbGlk YXRlX3JhbmdlX2VuZChzcmMsIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKPiArCQltbXVfbm90aWZp ZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJnJhbmdlKTsKPiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9 Cj4gQEAgLTMzNDEsOCArMzM0MSw3IEBAIHZvaWQgX191bm1hcF9odWdlcGFnZV9yYW5nZShzdHJ1 Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgCXN0cnVj dCBwYWdlICpwYWdlOwo+ICAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKPiAg CXVuc2lnbmVkIGxvbmcgc3ogPSBodWdlX3BhZ2Vfc2l6ZShoKTsKPiAtCXVuc2lnbmVkIGxvbmcg bW11bl9zdGFydCA9IHN0YXJ0OwkvKiBGb3IgbW11X25vdGlmaWVycyAqLwo+IC0JdW5zaWduZWQg bG9uZyBtbXVuX2VuZCAgID0gZW5kOwkJLyogRm9yIG1tdV9ub3RpZmllcnMgKi8KPiArCXN0cnVj dCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7Cj4gIAo+ICAJV0FSTl9PTighaXNfdm1faHVnZXRs Yl9wYWdlKHZtYSkpOwo+ICAJQlVHX09OKHN0YXJ0ICYgfmh1Z2VfcGFnZV9tYXNrKGgpKTsKPiBA QCAtMzM1OCw4ICszMzU3LDkgQEAgdm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBt bXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICAJLyoKPiAgCSAq IElmIHNoYXJpbmcgcG9zc2libGUsIGFsZXJ0IG1tdSBub3RpZmllcnMgb2Ygd29yc3QgY2FzZS4K PiAgCSAqLwo+IC0JYWRqdXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJm1t dW5fc3RhcnQsICZtbXVuX2VuZCk7Cj4gLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9z dGFydChtbSwgbW11bl9zdGFydCwgbW11bl9lbmQpOwo+ICsJbW11X25vdGlmaWVyX3JhbmdlX2lu aXQoJnJhbmdlLCBtbSwgc3RhcnQsIGVuZCk7Cj4gKwlhZGp1c3RfcmFuZ2VfaWZfcG1kX3NoYXJp bmdfcG9zc2libGUodm1hLCAmcmFuZ2Uuc3RhcnQsICZyYW5nZS5lbmQpOwo+ICsJbW11X25vdGlm aWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoJnJhbmdlKTsKPiAgCWFkZHJlc3MgPSBzdGFydDsK PiAgCWZvciAoOyBhZGRyZXNzIDwgZW5kOyBhZGRyZXNzICs9IHN6KSB7Cj4gIAkJcHRlcCA9IGh1 Z2VfcHRlX29mZnNldChtbSwgYWRkcmVzcywgc3opOwo+IEBAIC0zNDI3LDcgKzM0MjcsNyBAQCB2 b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4gIAkJaWYgKHJlZl9wYWdlKQo+ICAJCQlicmVhazsKPiAg CX0KPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChtbSwgbW11bl9zdGFydCwg bW11bl9lbmQpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCZyYW5nZSk7 Cj4gIAl0bGJfZW5kX3ZtYSh0bGIsIHZtYSk7Cj4gIH0KPiAgCj4gQEAgLTM1NDUsOSArMzU0NSw4 IEBAIHN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfY293KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgCXN0cnVjdCBwYWdlICpvbGRfcGFnZSwgKm5l d19wYWdlOwo+ICAJaW50IG91dHNpZGVfcmVzZXJ2ZSA9IDA7Cj4gIAl2bV9mYXVsdF90IHJldCA9 IDA7Cj4gLQl1bnNpZ25lZCBsb25nIG1tdW5fc3RhcnQ7CS8qIEZvciBtbXVfbm90aWZpZXJzICov Cj4gLQl1bnNpZ25lZCBsb25nIG1tdW5fZW5kOwkJLyogRm9yIG1tdV9ub3RpZmllcnMgKi8KPiAg CXVuc2lnbmVkIGxvbmcgaGFkZHIgPSBhZGRyZXNzICYgaHVnZV9wYWdlX21hc2soaCk7Cj4gKwlz dHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwo+ICAKPiAgCXB0ZSA9IGh1Z2VfcHRlcF9n ZXQocHRlcCk7Cj4gIAlvbGRfcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7Cj4gQEAgLTM2MjYsOSArMzYy NSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfY293KHN0cnVjdCBtbV9zdHJ1Y3QgKm1t LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgCV9fU2V0UGFnZVVwdG9kYXRlKG5ld19w YWdlKTsKPiAgCXNldF9wYWdlX2h1Z2VfYWN0aXZlKG5ld19wYWdlKTsKPiAgCj4gLQltbXVuX3N0 YXJ0ID0gaGFkZHI7Cj4gLQltbXVuX2VuZCA9IG1tdW5fc3RhcnQgKyBodWdlX3BhZ2Vfc2l6ZSho KTsKPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tLCBtbXVuX3N0YXJ0 LCBtbXVuX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIG1tLCBoYWRk ciwgaGFkZHIgKyBodWdlX3BhZ2Vfc2l6ZShoKSk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0 ZV9yYW5nZV9zdGFydCgmcmFuZ2UpOwo+ICAKPiAgCS8qCj4gIAkgKiBSZXRha2UgdGhlIHBhZ2Ug dGFibGUgbG9jayB0byBjaGVjayBmb3IgcmFjaW5nIHVwZGF0ZXMKPiBAQCAtMzY0MSw3ICszNjM5 LDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9jb3coc3RydWN0IG1tX3N0cnVjdCAqbW0s IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICAKPiAgCQkvKiBCcmVhayBDT1cgKi8KPiAg CQlodWdlX3B0ZXBfY2xlYXJfZmx1c2godm1hLCBoYWRkciwgcHRlcCk7Cj4gLQkJbW11X25vdGlm aWVyX2ludmFsaWRhdGVfcmFuZ2UobW0sIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKPiArCQltbXVf bm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZShtbSwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Cj4g IAkJc2V0X2h1Z2VfcHRlX2F0KG1tLCBoYWRkciwgcHRlcCwKPiAgCQkJCW1ha2VfaHVnZV9wdGUo dm1hLCBuZXdfcGFnZSwgMSkpOwo+ICAJCXBhZ2VfcmVtb3ZlX3JtYXAob2xkX3BhZ2UsIHRydWUp Owo+IEBAIC0zNjUwLDcgKzM2NDgsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX2Nvdyhz dHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4gIAkJbmV3 X3BhZ2UgPSBvbGRfcGFnZTsKPiAgCX0KPiAgCXNwaW5fdW5sb2NrKHB0bCk7Cj4gLQltbXVfbm90 aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKPiAr CW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgmcmFuZ2UpOwo+ICBvdXRfcmVsZWFz ZV9hbGw6Cj4gIAlyZXN0b3JlX3Jlc2VydmVfb25fZXJyb3IoaCwgdm1hLCBoYWRkciwgbmV3X3Bh Z2UpOwo+ICAJcHV0X3BhZ2UobmV3X3BhZ2UpOwo+IEBAIC00MzM5LDIxICs0MzM3LDIxIEBAIHVu c2lnbmVkIGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSwKPiAgCXB0ZV90IHB0ZTsKPiAgCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1h KHZtYSk7Cj4gIAl1bnNpZ25lZCBsb25nIHBhZ2VzID0gMDsKPiAtCXVuc2lnbmVkIGxvbmcgZl9z dGFydCA9IHN0YXJ0Owo+IC0JdW5zaWduZWQgbG9uZyBmX2VuZCA9IGVuZDsKPiAgCWJvb2wgc2hh cmVkX3BtZCA9IGZhbHNlOwo+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKPiAg Cj4gIAkvKgo+ICAJICogSW4gdGhlIGNhc2Ugb2Ygc2hhcmVkIFBNRHMsIHRoZSBhcmVhIHRvIGZs dXNoIGNvdWxkIGJlIGJleW9uZAo+IC0JICogc3RhcnQvZW5kLiAgU2V0IGZfc3RhcnQvZl9lbmQg dG8gY292ZXIgdGhlIG1heGltdW0gcG9zc2libGUKPiArCSAqIHN0YXJ0L2VuZC4gIFNldCByYW5n ZS5zdGFydC9yYW5nZS5lbmQgdG8gY292ZXIgdGhlIG1heGltdW0gcG9zc2libGUKPiAgCSAqIHJh bmdlIGlmIFBNRCBzaGFyaW5nIGlzIHBvc3NpYmxlLgo+ICAJICovCj4gLQlhZGp1c3RfcmFuZ2Vf aWZfcG1kX3NoYXJpbmdfcG9zc2libGUodm1hLCAmZl9zdGFydCwgJmZfZW5kKTsKPiArCW1tdV9u b3RpZmllcl9yYW5nZV9pbml0KCZyYW5nZSwgbW0sIHN0YXJ0LCBlbmQpOwo+ICsJYWRqdXN0X3Jh bmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJnJhbmdlLnN0YXJ0LCAmcmFuZ2UuZW5k KTsKPiAgCj4gIAlCVUdfT04oYWRkcmVzcyA+PSBlbmQpOwo+IC0JZmx1c2hfY2FjaGVfcmFuZ2Uo dm1hLCBmX3N0YXJ0LCBmX2VuZCk7Cj4gKwlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHJhbmdlLnN0 YXJ0LCByYW5nZS5lbmQpOwo+ICAKPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0KG1tLCBmX3N0YXJ0LCBmX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5n ZV9zdGFydCgmcmFuZ2UpOwo+ICAJaV9tbWFwX2xvY2tfd3JpdGUodm1hLT52bV9maWxlLT5mX21h cHBpbmcpOwo+ICAJZm9yICg7IGFkZHJlc3MgPCBlbmQ7IGFkZHJlc3MgKz0gaHVnZV9wYWdlX3Np emUoaCkpIHsKPiAgCQlzcGlubG9ja190ICpwdGw7Cj4gQEAgLTQ0MDQsNyArNDQwMiw3IEBAIHVu c2lnbmVkIGxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSwKPiAgCSAqIGRpZCB1bnNoYXJlIGEgcGFnZSBvZiBwbWRzLCBmbHVzaCB0aGUgcmFu Z2UgY29ycmVzcG9uZGluZyB0byB0aGUgcHVkLgo+ICAJICovCj4gIAlpZiAoc2hhcmVkX3BtZCkK PiAtCQlmbHVzaF9odWdldGxiX3RsYl9yYW5nZSh2bWEsIGZfc3RhcnQsIGZfZW5kKTsKPiArCQlm bHVzaF9odWdldGxiX3RsYl9yYW5nZSh2bWEsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwo+ICAJ ZWxzZQo+ICAJCWZsdXNoX2h1Z2V0bGJfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7Cj4gIAkv Kgo+IEBAIC00NDE0LDcgKzQ0MTIsNyBAQCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY2hhbmdlX3By b3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4gIAkgKiBTZWUgRG9jdW1lbnRh dGlvbi92bS9tbXVfbm90aWZpZXIucnN0Cj4gIAkgKi8KPiAgCWlfbW1hcF91bmxvY2tfd3JpdGUo dm1hLT52bV9maWxlLT5mX21hcHBpbmcpOwo+IC0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFu Z2VfZW5kKG1tLCBmX3N0YXJ0LCBmX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9y YW5nZV9lbmQoJnJhbmdlKTsKPiAgCj4gIAlyZXR1cm4gcGFnZXMgPDwgaC0+b3JkZXI7Cj4gIH0K PiBkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCj4gaW5kZXgg OGUyZmYxOTVlY2IzLi43NzM2ZjZjMzdmMTkgMTAwNjQ0Cj4gLS0tIGEvbW0va2h1Z2VwYWdlZC5j Cj4gKysrIGIvbW0va2h1Z2VwYWdlZC5jCj4gQEAgLTk0NCw4ICs5NDQsNyBAQCBzdGF0aWMgdm9p ZCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gIAlpbnQgaXNvbGF0 ZWQgPSAwLCByZXN1bHQgPSAwOwo+ICAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwo+ICAJc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Cj4gLQl1bnNpZ25lZCBsb25nIG1tdW5fc3RhcnQ7CS8q IEZvciBtbXVfbm90aWZpZXJzICovCj4gLQl1bnNpZ25lZCBsb25nIG1tdW5fZW5kOwkJLyogRm9y IG1tdV9ub3RpZmllcnMgKi8KPiArCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7Cj4g IAlnZnBfdCBnZnA7Cj4gIAo+ICAJVk1fQlVHX09OKGFkZHJlc3MgJiB+SFBBR0VfUE1EX01BU0sp Owo+IEBAIC0xMDE3LDkgKzEwMTYsOCBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9odWdlX3BhZ2Uo c3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gIAlwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHJl c3MpOwo+ICAJcHRlX3B0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWQpOwo+ICAKPiAtCW1tdW5fc3Rh cnQgPSBhZGRyZXNzOwo+IC0JbW11bl9lbmQgICA9IGFkZHJlc3MgKyBIUEFHRV9QTURfU0laRTsK PiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tLCBtbXVuX3N0YXJ0LCBt bXVuX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIG1tLCBhZGRyZXNz LCBhZGRyZXNzICsgSFBBR0VfUE1EX1NJWkUpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVf cmFuZ2Vfc3RhcnQoJnJhbmdlKTsKPiAgCXBtZF9wdGwgPSBwbWRfbG9jayhtbSwgcG1kKTsgLyog cHJvYmFibHkgdW5uZWNlc3NhcnkgKi8KPiAgCS8qCj4gIAkgKiBBZnRlciB0aGlzIGd1cF9mYXN0 IGNhbid0IHJ1biBhbnltb3JlLiBUaGlzIGFsc28gcmVtb3Zlcwo+IEBAIC0xMDI5LDcgKzEwMjcs NyBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0s Cj4gIAkgKi8KPiAgCV9wbWQgPSBwbWRwX2NvbGxhcHNlX2ZsdXNoKHZtYSwgYWRkcmVzcywgcG1k KTsKPiAgCXNwaW5fdW5sb2NrKHBtZF9wdGwpOwo+IC0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVf cmFuZ2VfZW5kKG1tLCBtbXVuX3N0YXJ0LCBtbXVuX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfaW52 YWxpZGF0ZV9yYW5nZV9lbmQoJnJhbmdlKTsKPiAgCj4gIAlzcGluX2xvY2socHRlX3B0bCk7Cj4g IAlpc29sYXRlZCA9IF9fY29sbGFwc2VfaHVnZV9wYWdlX2lzb2xhdGUodm1hLCBhZGRyZXNzLCBw dGUpOwo+IGRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCj4gaW5kZXggNWIwODk0YjQ1 ZWU1Li42MjM5ZDJkZjdhOGUgMTAwNjQ0Cj4gLS0tIGEvbW0va3NtLmMKPiArKysgYi9tbS9rc20u Ywo+IEBAIC0xMDQyLDggKzEwNDIsNyBAQCBzdGF0aWMgaW50IHdyaXRlX3Byb3RlY3RfcGFnZShz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCj4gIAl9Owo+ICAJ aW50IHN3YXBwZWQ7Cj4gIAlpbnQgZXJyID0gLUVGQVVMVDsKPiAtCXVuc2lnbmVkIGxvbmcgbW11 bl9zdGFydDsJLyogRm9yIG1tdV9ub3RpZmllcnMgKi8KPiAtCXVuc2lnbmVkIGxvbmcgbW11bl9l bmQ7CQkvKiBGb3IgbW11X25vdGlmaWVycyAqLwo+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5n ZSByYW5nZTsKPiAgCj4gIAlwdm13LmFkZHJlc3MgPSBwYWdlX2FkZHJlc3NfaW5fdm1hKHBhZ2Us IHZtYSk7Cj4gIAlpZiAocHZtdy5hZGRyZXNzID09IC1FRkFVTFQpCj4gQEAgLTEwNTEsOSArMTA1 MCw5IEBAIHN0YXRpYyBpbnQgd3JpdGVfcHJvdGVjdF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKPiAgCj4gIAlCVUdfT04oUGFnZVRyYW5zQ29tcG91 bmQocGFnZSkpOwo+ICAKPiAtCW1tdW5fc3RhcnQgPSBwdm13LmFkZHJlc3M7Cj4gLQltbXVuX2Vu ZCAgID0gcHZtdy5hZGRyZXNzICsgUEFHRV9TSVpFOwo+IC0JbW11X25vdGlmaWVyX2ludmFsaWRh dGVfcmFuZ2Vfc3RhcnQobW0sIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKPiArCW1tdV9ub3RpZmll cl9yYW5nZV9pbml0KCZyYW5nZSwgbW0sIHB2bXcuYWRkcmVzcywKPiArCQkJCXB2bXcuYWRkcmVz cyArIFBBR0VfU0laRSk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgm cmFuZ2UpOwo+ICAKPiAgCWlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoJnB2bXcpKQo+ICAJCWdv dG8gb3V0X21uOwo+IEBAIC0xMTA1LDcgKzExMDQsNyBAQCBzdGF0aWMgaW50IHdyaXRlX3Byb3Rl Y3RfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCj4g IG91dF91bmxvY2s6Cj4gIAlwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCZwdm13KTsKPiAgb3V0 X21uOgo+IC0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKG1tLCBtbXVuX3N0YXJ0 LCBtbXVuX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJnJhbmdl KTsKPiAgb3V0Ogo+ICAJcmV0dXJuIGVycjsKPiAgfQo+IEBAIC0xMTI5LDggKzExMjgsNyBAQCBz dGF0aWMgaW50IHJlcGxhY2VfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0 IHBhZ2UgKnBhZ2UsCj4gIAlzcGlubG9ja190ICpwdGw7Cj4gIAl1bnNpZ25lZCBsb25nIGFkZHI7 Cj4gIAlpbnQgZXJyID0gLUVGQVVMVDsKPiAtCXVuc2lnbmVkIGxvbmcgbW11bl9zdGFydDsJLyog Rm9yIG1tdV9ub3RpZmllcnMgKi8KPiAtCXVuc2lnbmVkIGxvbmcgbW11bl9lbmQ7CQkvKiBGb3Ig bW11X25vdGlmaWVycyAqLwo+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTsKPiAg Cj4gIAlhZGRyID0gcGFnZV9hZGRyZXNzX2luX3ZtYShwYWdlLCB2bWEpOwo+ICAJaWYgKGFkZHIg PT0gLUVGQVVMVCkKPiBAQCAtMTE0MCw5ICsxMTM4LDggQEAgc3RhdGljIGludCByZXBsYWNlX3Bh Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAo+ICAJaWYg KCFwbWQpCj4gIAkJZ290byBvdXQ7Cj4gIAo+IC0JbW11bl9zdGFydCA9IGFkZHI7Cj4gLQltbXVu X2VuZCAgID0gYWRkciArIFBBR0VfU0laRTsKPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3Jh bmdlX3N0YXJ0KG1tLCBtbXVuX3N0YXJ0LCBtbXVuX2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfcmFu Z2VfaW5pdCgmcmFuZ2UsIG1tLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTsKPiArCW1tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCZyYW5nZSk7Cj4gIAo+ICAJcHRlcCA9IHB0ZV9v ZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgJnB0bCk7Cj4gIAlpZiAoIXB0ZV9zYW1lKCpw dGVwLCBvcmlnX3B0ZSkpIHsKPiBAQCAtMTE4OCw3ICsxMTg1LDcgQEAgc3RhdGljIGludCByZXBs YWNlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAo+ ICAJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOwo+ICAJZXJyID0gMDsKPiAgb3V0X21uOgo+ IC0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKG1tLCBtbXVuX3N0YXJ0LCBtbXVu X2VuZCk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJnJhbmdlKTsKPiAg b3V0Ogo+ICAJcmV0dXJuIGVycjsKPiAgfQo+IGRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9t bS9tYWR2aXNlLmMKPiBpbmRleCA2Y2IxY2E5M2UyOTAuLjIxYTc4ODFhMmRiNCAxMDA2NDQKPiAt LS0gYS9tbS9tYWR2aXNlLmMKPiArKysgYi9tbS9tYWR2aXNlLmMKPiBAQCAtNDU4LDI5ICs0NTgs MzAgQEAgc3RhdGljIHZvaWQgbWFkdmlzZV9mcmVlX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRo ZXIgKnRsYiwKPiAgc3RhdGljIGludCBtYWR2aXNlX2ZyZWVfc2luZ2xlX3ZtYShzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSwKPiAgCQkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCB1bnNpZ25l ZCBsb25nIGVuZF9hZGRyKQo+ICB7Cj4gLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Cj4gIAlz dHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Cj4gKwlzdHJ1Y3QgbW11X25vdGlmaWVy X3JhbmdlIHJhbmdlOwo+ICAJc3RydWN0IG1tdV9nYXRoZXIgdGxiOwo+ICAKPiAgCS8qIE1BRFZf RlJFRSB3b3JrcyBmb3Igb25seSBhbm9uIHZtYSBhdCB0aGUgbW9tZW50ICovCj4gIAlpZiAoIXZt YV9pc19hbm9ueW1vdXModm1hKSkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gLQlzdGFydCA9 IG1heCh2bWEtPnZtX3N0YXJ0LCBzdGFydF9hZGRyKTsKPiAtCWlmIChzdGFydCA+PSB2bWEtPnZt X2VuZCkKPiArCXJhbmdlLnN0YXJ0ID0gbWF4KHZtYS0+dm1fc3RhcnQsIHN0YXJ0X2FkZHIpOwo+ ICsJaWYgKHJhbmdlLnN0YXJ0ID49IHZtYS0+dm1fZW5kKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ IC0JZW5kID0gbWluKHZtYS0+dm1fZW5kLCBlbmRfYWRkcik7Cj4gLQlpZiAoZW5kIDw9IHZtYS0+ dm1fc3RhcnQpCj4gKwlyYW5nZS5lbmQgPSBtaW4odm1hLT52bV9lbmQsIGVuZF9hZGRyKTsKPiAr CWlmIChyYW5nZS5lbmQgPD0gdm1hLT52bV9zdGFydCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAr CW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZyYW5nZSwgbW0sIHJhbmdlLnN0YXJ0LCByYW5nZS5l bmQpOwo+ICAKPiAgCWxydV9hZGRfZHJhaW4oKTsKPiAtCXRsYl9nYXRoZXJfbW11KCZ0bGIsIG1t LCBzdGFydCwgZW5kKTsKPiArCXRsYl9nYXRoZXJfbW11KCZ0bGIsIG1tLCByYW5nZS5zdGFydCwg cmFuZ2UuZW5kKTsKPiAgCXVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7Cj4gIAo+IC0JbW11X25vdGlm aWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQobW0sIHN0YXJ0LCBlbmQpOwo+IC0JbWFkdmlzZV9m cmVlX3BhZ2VfcmFuZ2UoJnRsYiwgdm1hLCBzdGFydCwgZW5kKTsKPiAtCW1tdV9ub3RpZmllcl9p bnZhbGlkYXRlX3JhbmdlX2VuZChtbSwgc3RhcnQsIGVuZCk7Cj4gLQl0bGJfZmluaXNoX21tdSgm dGxiLCBzdGFydCwgZW5kKTsKPiArCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0 KCZyYW5nZSk7Cj4gKwltYWR2aXNlX2ZyZWVfcGFnZV9yYW5nZSgmdGxiLCB2bWEsIHJhbmdlLnN0 YXJ0LCByYW5nZS5lbmQpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCZy YW5nZSk7Cj4gKwl0bGJfZmluaXNoX21tdSgmdGxiLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsK PiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+IGRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21l bW9yeS5jCj4gaW5kZXggNGFkMmQyOTNkZGMyLi41NzQzMDdmMTE0NjQgMTAwNjQ0Cj4gLS0tIGEv bW0vbWVtb3J5LmMKPiArKysgYi9tbS9tZW1vcnkuYwo+IEBAIC05NzMsOCArOTczLDcgQEAgaW50 IGNvcHlfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1 Y3QgKnNyY19tbSwKPiAgCXVuc2lnbmVkIGxvbmcgbmV4dDsKPiAgCXVuc2lnbmVkIGxvbmcgYWRk ciA9IHZtYS0+dm1fc3RhcnQ7Cj4gIAl1bnNpZ25lZCBsb25nIGVuZCA9IHZtYS0+dm1fZW5kOwo+ IC0JdW5zaWduZWQgbG9uZyBtbXVuX3N0YXJ0OwkvKiBGb3IgbW11X25vdGlmaWVycyAqLwo+IC0J dW5zaWduZWQgbG9uZyBtbXVuX2VuZDsJCS8qIEZvciBtbXVfbm90aWZpZXJzICovCj4gKwlzdHJ1 Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwo+ICAJYm9vbCBpc19jb3c7Cj4gIAlpbnQgcmV0 Owo+ICAKPiBAQCAtMTAwOCwxMSArMTAwNywxMSBAQCBpbnQgY29weV9wYWdlX3JhbmdlKHN0cnVj dCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLAo+ICAJICogaXNf Y293X21hcHBpbmcoKSByZXR1cm5zIHRydWUuCj4gIAkgKi8KPiAgCWlzX2NvdyA9IGlzX2Nvd19t YXBwaW5nKHZtYS0+dm1fZmxhZ3MpOwo+IC0JbW11bl9zdGFydCA9IGFkZHI7Cj4gLQltbXVuX2Vu ZCAgID0gZW5kOwo+IC0JaWYgKGlzX2NvdykKPiAtCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9y YW5nZV9zdGFydChzcmNfbW0sIG1tdW5fc3RhcnQsCj4gLQkJCQkJCSAgICBtbXVuX2VuZCk7Cj4g Kwo+ICsJaWYgKGlzX2Nvdykgewo+ICsJCW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZyYW5nZSwg c3JjX21tLCBhZGRyLCBlbmQpOwo+ICsJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0KCZyYW5nZSk7Cj4gKwl9Cj4gIAo+ICAJcmV0ID0gMDsKPiAgCWRzdF9wZ2QgPSBwZ2Rfb2Zm c2V0KGRzdF9tbSwgYWRkcik7Cj4gQEAgLTEwMjksNyArMTAyOCw3IEBAIGludCBjb3B5X3BhZ2Vf cmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0s Cj4gIAl9IHdoaWxlIChkc3RfcGdkKyssIHNyY19wZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0g ZW5kKTsKPiAgCj4gIAlpZiAoaXNfY293KQo+IC0JCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3Jh bmdlX2VuZChzcmNfbW0sIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKPiArCQltbXVfbm90aWZpZXJf aW52YWxpZGF0ZV9yYW5nZV9lbmQoJnJhbmdlKTsKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4g QEAgLTEzMzIsMTIgKzEzMzEsMTMgQEAgdm9pZCB1bm1hcF92bWFzKHN0cnVjdCBtbXVfZ2F0aGVy ICp0bGIsCj4gIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3Rh cnRfYWRkciwKPiAgCQl1bnNpZ25lZCBsb25nIGVuZF9hZGRyKQo+ICB7Cj4gLQlzdHJ1Y3QgbW1f c3RydWN0ICptbSA9IHZtYS0+dm1fbW07Cj4gKwlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJh bmdlOwo+ICAKPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tLCBzdGFy dF9hZGRyLCBlbmRfYWRkcik7Cj4gKwltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIHZt YS0+dm1fbW0sIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKPiArCW1tdV9ub3RpZmllcl9pbnZhbGlk YXRlX3JhbmdlX3N0YXJ0KCZyYW5nZSk7Cj4gIAlmb3IgKCA7IHZtYSAmJiB2bWEtPnZtX3N0YXJ0 IDwgZW5kX2FkZHI7IHZtYSA9IHZtYS0+dm1fbmV4dCkKPiAgCQl1bm1hcF9zaW5nbGVfdm1hKHRs Yiwgdm1hLCBzdGFydF9hZGRyLCBlbmRfYWRkciwgTlVMTCk7Cj4gLQltbXVfbm90aWZpZXJfaW52 YWxpZGF0ZV9yYW5nZV9lbmQobW0sIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKPiArCW1tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgmcmFuZ2UpOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAt MTM1MSwxOCArMTM1MSwxOCBAQCB2b2lkIHVubWFwX3ZtYXMoc3RydWN0IG1tdV9nYXRoZXIgKnRs YiwKPiAgdm9pZCB6YXBfcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5z aWduZWQgbG9uZyBzdGFydCwKPiAgCQl1bnNpZ25lZCBsb25nIHNpemUpCj4gIHsKPiAtCXN0cnVj dCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKPiArCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFu Z2UgcmFuZ2U7Cj4gIAlzdHJ1Y3QgbW11X2dhdGhlciB0bGI7Cj4gLQl1bnNpZ25lZCBsb25nIGVu ZCA9IHN0YXJ0ICsgc2l6ZTsKPiAgCj4gIAlscnVfYWRkX2RyYWluKCk7Cj4gLQl0bGJfZ2F0aGVy X21tdSgmdGxiLCBtbSwgc3RhcnQsIGVuZCk7Cj4gLQl1cGRhdGVfaGl3YXRlcl9yc3MobW0pOwo+ IC0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQobW0sIHN0YXJ0LCBlbmQpOwo+ IC0JZm9yICggOyB2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZDsgdm1hID0gdm1hLT52bV9uZXh0 KQo+IC0JCXVubWFwX3NpbmdsZV92bWEoJnRsYiwgdm1hLCBzdGFydCwgZW5kLCBOVUxMKTsKPiAt CW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChtbSwgc3RhcnQsIGVuZCk7Cj4gLQl0 bGJfZmluaXNoX21tdSgmdGxiLCBzdGFydCwgZW5kKTsKPiArCW1tdV9ub3RpZmllcl9yYW5nZV9p bml0KCZyYW5nZSwgdm1hLT52bV9tbSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7Cj4gKwl0bGJfZ2F0 aGVyX21tdSgmdGxiLCB2bWEtPnZtX21tLCBzdGFydCwgcmFuZ2UuZW5kKTsKPiArCXVwZGF0ZV9o aXdhdGVyX3Jzcyh2bWEtPnZtX21tKTsKPiArCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3Jhbmdl X3N0YXJ0KCZyYW5nZSk7Cj4gKwlmb3IgKCA7IHZtYSAmJiB2bWEtPnZtX3N0YXJ0IDwgcmFuZ2Uu ZW5kOyB2bWEgPSB2bWEtPnZtX25leHQpCj4gKwkJdW5tYXBfc2luZ2xlX3ZtYSgmdGxiLCB2bWEs IHN0YXJ0LCByYW5nZS5lbmQsIE5VTEwpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFu Z2VfZW5kKCZyYW5nZSk7Cj4gKwl0bGJfZmluaXNoX21tdSgmdGxiLCBzdGFydCwgcmFuZ2UuZW5k KTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTEzNzcsMTcgKzEzNzcsMTcgQEAgdm9pZCB6YXBfcGFn ZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwK PiAgc3RhdGljIHZvaWQgemFwX3BhZ2VfcmFuZ2Vfc2luZ2xlKHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCj4gIAkJdW5zaWduZWQgbG9uZyBzaXplLCBz dHJ1Y3QgemFwX2RldGFpbHMgKmRldGFpbHMpCj4gIHsKPiAtCXN0cnVjdCBtbV9zdHJ1Y3QgKm1t ID0gdm1hLT52bV9tbTsKPiArCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7Cj4gIAlz dHJ1Y3QgbW11X2dhdGhlciB0bGI7Cj4gLQl1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgKyBz aXplOwo+ICAKPiAgCWxydV9hZGRfZHJhaW4oKTsKPiAtCXRsYl9nYXRoZXJfbW11KCZ0bGIsIG1t LCBhZGRyZXNzLCBlbmQpOwo+IC0JdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKPiAtCW1tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tLCBhZGRyZXNzLCBlbmQpOwo+IC0JdW5tYXBf c2luZ2xlX3ZtYSgmdGxiLCB2bWEsIGFkZHJlc3MsIGVuZCwgZGV0YWlscyk7Cj4gLQltbXVfbm90 aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIGFkZHJlc3MsIGVuZCk7Cj4gLQl0bGJfZmlu aXNoX21tdSgmdGxiLCBhZGRyZXNzLCBlbmQpOwo+ICsJbW11X25vdGlmaWVyX3JhbmdlX2luaXQo JnJhbmdlLCB2bWEtPnZtX21tLCBhZGRyZXNzLCBhZGRyZXNzICsgc2l6ZSk7Cj4gKwl0bGJfZ2F0 aGVyX21tdSgmdGxiLCB2bWEtPnZtX21tLCBhZGRyZXNzLCByYW5nZS5lbmQpOwo+ICsJdXBkYXRl X2hpd2F0ZXJfcnNzKHZtYS0+dm1fbW0pOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFu Z2Vfc3RhcnQoJnJhbmdlKTsKPiArCXVubWFwX3NpbmdsZV92bWEoJnRsYiwgdm1hLCBhZGRyZXNz LCByYW5nZS5lbmQsIGRldGFpbHMpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vf ZW5kKCZyYW5nZSk7Cj4gKwl0bGJfZmluaXNoX21tdSgmdGxiLCBhZGRyZXNzLCByYW5nZS5lbmQp Owo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMjI0Nyw5ICsyMjQ3LDggQEAgc3RhdGljIHZtX2ZhdWx0 X3Qgd3BfcGFnZV9jb3B5KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQo+ICAJc3RydWN0IHBhZ2UgKm5l d19wYWdlID0gTlVMTDsKPiAgCXB0ZV90IGVudHJ5Owo+ICAJaW50IHBhZ2VfY29waWVkID0gMDsK PiAtCWNvbnN0IHVuc2lnbmVkIGxvbmcgbW11bl9zdGFydCA9IHZtZi0+YWRkcmVzcyAmIFBBR0Vf TUFTSzsKPiAtCWNvbnN0IHVuc2lnbmVkIGxvbmcgbW11bl9lbmQgPSBtbXVuX3N0YXJ0ICsgUEFH RV9TSVpFOwo+ICAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwo+ICsJc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZSByYW5nZTsKPiAgCj4gIAlpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2 bWEpKSkKPiAgCQlnb3RvIG9vbTsKPiBAQCAtMjI3Miw3ICsyMjcxLDkgQEAgc3RhdGljIHZtX2Zh dWx0X3Qgd3BfcGFnZV9jb3B5KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQo+ICAKPiAgCV9fU2V0UGFn ZVVwdG9kYXRlKG5ld19wYWdlKTsKPiAgCj4gLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5n ZV9zdGFydChtbSwgbW11bl9zdGFydCwgbW11bl9lbmQpOwo+ICsJbW11X25vdGlmaWVyX3Jhbmdl X2luaXQoJnJhbmdlLCBtbSwgdm1mLT5hZGRyZXNzICYgUEFHRV9NQVNLLAo+ICsJCQkJKHZtZi0+ YWRkcmVzcyAmIFBBR0VfTUFTSykgKyBQQUdFX1NJWkUpOwo+ICsJbW11X25vdGlmaWVyX2ludmFs aWRhdGVfcmFuZ2Vfc3RhcnQoJnJhbmdlKTsKPiAgCj4gIAkvKgo+ICAJICogUmUtY2hlY2sgdGhl IHB0ZSAtIHdlIGRyb3BwZWQgdGhlIGxvY2sKPiBAQCAtMjM0OSw3ICsyMzUwLDcgQEAgc3RhdGlj IHZtX2ZhdWx0X3Qgd3BfcGFnZV9jb3B5KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQo+ICAJICogTm8g bmVlZCB0byBkb3VibGUgY2FsbCBtbXVfbm90aWZpZXItPmludmFsaWRhdGVfcmFuZ2UoKSBjYWxs YmFjayBhcwo+ICAJICogdGhlIGFib3ZlIHB0ZXBfY2xlYXJfZmx1c2hfbm90aWZ5KCkgZGlkIGFs cmVhZHkgY2FsbCBpdC4KPiAgCSAqLwo+IC0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vf b25seV9lbmQobW0sIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKPiArCW1tdV9ub3RpZmllcl9pbnZh bGlkYXRlX3JhbmdlX29ubHlfZW5kKCZyYW5nZSk7Cj4gIAlpZiAob2xkX3BhZ2UpIHsKPiAgCQkv Kgo+ICAJCSAqIERvbid0IGxldCBhbm90aGVyIHRhc2ssIHdpdGggcG9zc2libHkgdW5sb2NrZWQg dm1hLAo+IEBAIC00MDMwLDcgKzQwMzEsNyBAQCBpbnQgX19wbWRfYWxsb2Moc3RydWN0IG1tX3N0 cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKPiAgI2VuZGlmIC8q IF9fUEFHRVRBQkxFX1BNRF9GT0xERUQgKi8KPiAgCj4gIHN0YXRpYyBpbnQgX19mb2xsb3dfcHRl X3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAo+IC0JCQkg ICAgdW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKPiArCQkJICAgIHN0 cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlLAo+ICAJCQkgICAgcHRlX3QgKipwdGVwcCwg cG1kX3QgKipwbWRwcCwgc3BpbmxvY2tfdCAqKnB0bHApCj4gIHsKPiAgCXBnZF90ICpwZ2Q7Cj4g QEAgLTQwNTgsMTAgKzQwNTksMTAgQEAgc3RhdGljIGludCBfX2ZvbGxvd19wdGVfcG1kKHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCj4gIAkJaWYgKCFwbWRwcCkK PiAgCQkJZ290byBvdXQ7Cj4gIAo+IC0JCWlmIChzdGFydCAmJiBlbmQpIHsKPiAtCQkJKnN0YXJ0 ID0gYWRkcmVzcyAmIFBNRF9NQVNLOwo+IC0JCQkqZW5kID0gKnN0YXJ0ICsgUE1EX1NJWkU7Cj4g LQkJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tLCAqc3RhcnQsICplbmQp Owo+ICsJCWlmIChyYW5nZSkgewo+ICsJCQltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChyYW5nZSwg bW0sIGFkZHJlc3MgJiBQTURfTUFTSywKPiArCQkJCQkgICAgIChhZGRyZXNzICYgUE1EX01BU0sp ICsgUE1EX1NJWkUpOwo+ICsJCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChy YW5nZSk7Cj4gIAkJfQo+ICAJCSpwdGxwID0gcG1kX2xvY2sobW0sIHBtZCk7Cj4gIAkJaWYgKHBt ZF9odWdlKCpwbWQpKSB7Cj4gQEAgLTQwNjksMTcgKzQwNzAsMTcgQEAgc3RhdGljIGludCBfX2Zv bGxvd19wdGVfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3Ms Cj4gIAkJCXJldHVybiAwOwo+ICAJCX0KPiAgCQlzcGluX3VubG9jaygqcHRscCk7Cj4gLQkJaWYg KHN0YXJ0ICYmIGVuZCkKPiAtCQkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKG1t LCAqc3RhcnQsICplbmQpOwo+ICsJCWlmIChyYW5nZSkKPiArCQkJbW11X25vdGlmaWVyX2ludmFs aWRhdGVfcmFuZ2VfZW5kKHJhbmdlKTsKPiAgCX0KPiAgCj4gIAlpZiAocG1kX25vbmUoKnBtZCkg fHwgdW5saWtlbHkocG1kX2JhZCgqcG1kKSkpCj4gIAkJZ290byBvdXQ7Cj4gIAo+IC0JaWYgKHN0 YXJ0ICYmIGVuZCkgewo+IC0JCSpzdGFydCA9IGFkZHJlc3MgJiBQQUdFX01BU0s7Cj4gLQkJKmVu ZCA9ICpzdGFydCArIFBBR0VfU0laRTsKPiAtCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5n ZV9zdGFydChtbSwgKnN0YXJ0LCAqZW5kKTsKPiArCWlmIChyYW5nZSkgewo+ICsJCXJhbmdlLT5z dGFydCA9IGFkZHJlc3MgJiBQQUdFX01BU0s7Cj4gKwkJcmFuZ2UtPmVuZCA9IHJhbmdlLT5zdGFy dCArIFBBR0VfU0laRTsKPiArCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChy YW5nZSk7Cj4gIAl9Cj4gIAlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRy ZXNzLCBwdGxwKTsKPiAgCWlmICghcHRlX3ByZXNlbnQoKnB0ZXApKQo+IEBAIC00MDg4LDggKzQw ODksOCBAQCBzdGF0aWMgaW50IF9fZm9sbG93X3B0ZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0s IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKPiAgCXJldHVybiAwOwo+ICB1bmxvY2s6Cj4gIAlwdGVf dW5tYXBfdW5sb2NrKHB0ZXAsICpwdGxwKTsKPiAtCWlmIChzdGFydCAmJiBlbmQpCj4gLQkJbW11 X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKG1tLCAqc3RhcnQsICplbmQpOwo+ICsJaWYg KHJhbmdlKQo+ICsJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChyYW5nZSk7Cj4g IG91dDoKPiAgCXJldHVybiAtRUlOVkFMOwo+ICB9Cj4gQEAgLTQxMDEsMjAgKzQxMDIsMjAgQEAg c3RhdGljIGlubGluZSBpbnQgZm9sbG93X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWdu ZWQgbG9uZyBhZGRyZXNzLAo+ICAKPiAgCS8qICh2b2lkKSBpcyBuZWVkZWQgdG8gbWFrZSBnY2Mg aGFwcHkgKi8KPiAgCSh2b2lkKSBfX2NvbmRfbG9jaygqcHRscCwKPiAtCQkJICAgIShyZXMgPSBf X2ZvbGxvd19wdGVfcG1kKG1tLCBhZGRyZXNzLCBOVUxMLCBOVUxMLAo+ICsJCQkgICAhKHJlcyA9 IF9fZm9sbG93X3B0ZV9wbWQobW0sIGFkZHJlc3MsIE5VTEwsCj4gIAkJCQkJCSAgICBwdGVwcCwg TlVMTCwgcHRscCkpKTsKPiAgCXJldHVybiByZXM7Cj4gIH0KPiAgCj4gIGludCBmb2xsb3dfcHRl X3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAo+IC0JCQkg ICAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsCj4gKwkJIAkgICAg IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlLAo+ICAJCQkgICAgIHB0ZV90ICoqcHRl cHAsIHBtZF90ICoqcG1kcHAsIHNwaW5sb2NrX3QgKipwdGxwKQo+ICB7Cj4gIAlpbnQgcmVzOwo+ ICAKPiAgCS8qICh2b2lkKSBpcyBuZWVkZWQgdG8gbWFrZSBnY2MgaGFwcHkgKi8KPiAgCSh2b2lk KSBfX2NvbmRfbG9jaygqcHRscCwKPiAtCQkJICAgIShyZXMgPSBfX2ZvbGxvd19wdGVfcG1kKG1t LCBhZGRyZXNzLCBzdGFydCwgZW5kLAo+ICsJCQkgICAhKHJlcyA9IF9fZm9sbG93X3B0ZV9wbWQo bW0sIGFkZHJlc3MsIHJhbmdlLAo+ICAJCQkJCQkgICAgcHRlcHAsIHBtZHBwLCBwdGxwKSkpOwo+ ICAJcmV0dXJuIHJlczsKPiAgfQo+IGRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdy YXRlLmMKPiBpbmRleCBmN2U0YmZkYzEzYjcuLjc0ZjViMzIwOGMwNSAxMDA2NDQKPiAtLS0gYS9t bS9taWdyYXRlLmMKPiArKysgYi9tbS9taWdyYXRlLmMKPiBAQCAtMjMwMyw2ICsyMzAzLDcgQEAg c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCwKPiAgICovCj4g IHN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2NvbGxlY3Qoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdy YXRlKQo+ICB7Cj4gKwlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwo+ICAJc3RydWN0 IG1tX3dhbGsgbW1fd2FsazsKPiAgCj4gIAltbV93YWxrLnBtZF9lbnRyeSA9IG1pZ3JhdGVfdm1h X2NvbGxlY3RfcG1kOwo+IEBAIC0yMzE0LDEzICsyMzE1LDExIEBAIHN0YXRpYyB2b2lkIG1pZ3Jh dGVfdm1hX2NvbGxlY3Qoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKQo+ICAJbW1fd2Fsay5t bSA9IG1pZ3JhdGUtPnZtYS0+dm1fbW07Cj4gIAltbV93YWxrLnByaXZhdGUgPSBtaWdyYXRlOwo+ ICAKPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tX3dhbGsubW0sCj4g LQkJCQkJICAgIG1pZ3JhdGUtPnN0YXJ0LAo+IC0JCQkJCSAgICBtaWdyYXRlLT5lbmQpOwo+ICsJ bW11X25vdGlmaWVyX3JhbmdlX2luaXQoJnJhbmdlLCBtbV93YWxrLm1tLCBtaWdyYXRlLT5zdGFy dCwKPiArCQkJCW1pZ3JhdGUtPmVuZCk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5n ZV9zdGFydCgmcmFuZ2UpOwo+ICAJd2Fsa19wYWdlX3JhbmdlKG1pZ3JhdGUtPnN0YXJ0LCBtaWdy YXRlLT5lbmQsICZtbV93YWxrKTsKPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2Vu ZChtbV93YWxrLm1tLAo+IC0JCQkJCSAgbWlncmF0ZS0+c3RhcnQsCj4gLQkJCQkJICBtaWdyYXRl LT5lbmQpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKCZyYW5nZSk7Cj4g IAo+ICAJbWlncmF0ZS0+ZW5kID0gbWlncmF0ZS0+c3RhcnQgKyAobWlncmF0ZS0+bnBhZ2VzIDw8 IFBBR0VfU0hJRlQpOwo+ICB9Cj4gQEAgLTI3MDMsNyArMjcwMiw4IEBAIHN0YXRpYyB2b2lkIG1p Z3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSkKPiAgCWNvbnN0IHVu c2lnbmVkIGxvbmcgc3RhcnQgPSBtaWdyYXRlLT5zdGFydDsKPiAgCXN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hID0gbWlncmF0ZS0+dm1hOwo+ICAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEt PnZtX21tOwo+IC0JdW5zaWduZWQgbG9uZyBhZGRyLCBpLCBtbXVfc3RhcnQ7Cj4gKwlzdHJ1Y3Qg bW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwo+ICsJdW5zaWduZWQgbG9uZyBhZGRyLCBpOwo+ICAJ Ym9vbCBub3RpZmllZCA9IGZhbHNlOwo+ICAKPiAgCWZvciAoaSA9IDAsIGFkZHIgPSBzdGFydDsg aSA8IG5wYWdlczsgYWRkciArPSBQQUdFX1NJWkUsIGkrKykgewo+IEBAIC0yNzIyLDExICsyNzIy LDExIEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAq bWlncmF0ZSkKPiAgCQkJCWNvbnRpbnVlOwo+ICAJCQl9Cj4gIAkJCWlmICghbm90aWZpZWQpIHsK PiAtCQkJCW1tdV9zdGFydCA9IGFkZHI7Cj4gIAkJCQlub3RpZmllZCA9IHRydWU7Cj4gLQkJCQlt bXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwKPiAtCQkJCQkJCQltbXVfc3Rh cnQsCj4gLQkJCQkJCQkJbWlncmF0ZS0+ZW5kKTsKPiArCj4gKwkJCQltbXVfbm90aWZpZXJfcmFu Z2VfaW5pdCgmcmFuZ2UsIG1tLCBhZGRyLAo+ICsJCQkJCQkJbWlncmF0ZS0+ZW5kKTsKPiArCQkJ CW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCZyYW5nZSk7Cj4gIAkJCX0KPiAg CQkJbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2UobWlncmF0ZSwgYWRkciwgbmV3cGFnZSwKPiAgCQkJ CQkJJm1pZ3JhdGUtPnNyY1tpXSwKPiBAQCAtMjc2Nyw4ICsyNzY3LDcgQEAgc3RhdGljIHZvaWQg bWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKQo+ICAJICogZGlk IGFscmVhZHkgY2FsbCBpdC4KPiAgCSAqLwo+ICAJaWYgKG5vdGlmaWVkKQo+IC0JCW1tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX29ubHlfZW5kKG1tLCBtbXVfc3RhcnQsCj4gLQkJCQkJCSAg ICAgICBtaWdyYXRlLT5lbmQpOwo+ICsJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX29u bHlfZW5kKCZyYW5nZSk7Cj4gIH0KPiAgCj4gIC8qCj4gZGlmZiAtLWdpdCBhL21tL21tdV9ub3Rp Zmllci5jIGIvbW0vbW11X25vdGlmaWVyLmMKPiBpbmRleCA1ZjY2NjVhZTNlZTIuLjRjNTJiMzUx NGM1MCAxMDA2NDQKPiAtLS0gYS9tbS9tbXVfbm90aWZpZXIuYwo+ICsrKyBiL21tL21tdV9ub3Rp Zmllci5jCj4gQEAgLTE3NCwyOCArMTc0LDIwIEBAIHZvaWQgX19tbXVfbm90aWZpZXJfY2hhbmdl X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAo+ICAJc3Jj dV9yZWFkX3VubG9jaygmc3JjdSwgaWQpOwo+ICB9Cj4gIAo+IC1pbnQgX19tbXVfbm90aWZpZXJf aW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAtCQkJCSAgdW5z aWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCj4gLQkJCQkgIGJvb2wgYmxvY2th YmxlKQo+ICtpbnQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3Qg bW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSkKPiAgewo+IC0Jc3RydWN0IG1tdV9ub3RpZmllcl9y YW5nZSBfcmFuZ2UsICpyYW5nZSA9ICZfcmFuZ2U7Cj4gIAlzdHJ1Y3QgbW11X25vdGlmaWVyICpt bjsKPiAgCWludCByZXQgPSAwOwo+ICAJaW50IGlkOwo+ICAKPiAtCXJhbmdlLT5ibG9ja2FibGUg PSBibG9ja2FibGU7Cj4gLQlyYW5nZS0+c3RhcnQgPSBzdGFydDsKPiAtCXJhbmdlLT5lbmQgPSBl bmQ7Cj4gLQlyYW5nZS0+bW0gPSBtbTsKPiAtCj4gIAlpZCA9IHNyY3VfcmVhZF9sb2NrKCZzcmN1 KTsKPiAtCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtbiwgJm1tLT5tbXVfbm90aWZpZXJfbW0t Pmxpc3QsIGhsaXN0KSB7Cj4gKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW4sICZyYW5nZS0+ bW0tPm1tdV9ub3RpZmllcl9tbS0+bGlzdCwgaGxpc3QpIHsKPiAgCQlpZiAobW4tPm9wcy0+aW52 YWxpZGF0ZV9yYW5nZV9zdGFydCkgewo+ICAJCQlpbnQgX3JldCA9IG1uLT5vcHMtPmludmFsaWRh dGVfcmFuZ2Vfc3RhcnQobW4sIHJhbmdlKTsKPiAgCQkJaWYgKF9yZXQpIHsKPiAgCQkJCXByX2lu Zm8oIiVwUyBjYWxsYmFjayBmYWlsZWQgd2l0aCAlZCBpbiAlc2Jsb2NrYWJsZSBjb250ZXh0Llxu IiwKPiAgCQkJCQkJbW4tPm9wcy0+aW52YWxpZGF0ZV9yYW5nZV9zdGFydCwgX3JldCwKPiAtCQkJ CQkJIWJsb2NrYWJsZSA/ICJub24tIiA6ICIiKTsKPiArCQkJCQkJIXJhbmdlLT5ibG9ja2FibGUg PyAibm9uLSIgOiAiIik7Cj4gIAkJCQlyZXQgPSBfcmV0Owo+ICAJCQl9Cj4gIAkJfQo+IEBAIC0y MDYsMjcgKzE5OCwxNCBAQCBpbnQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFy dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChfX21tdV9u b3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KTsKPiAgCj4gLXZvaWQgX19tbXVfbm90aWZp ZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4gLQkJCQkJIHVu c2lnbmVkIGxvbmcgc3RhcnQsCj4gLQkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kLAo+ICt2b2lkIF9f bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfcmFu Z2UgKnJhbmdlLAo+ICAJCQkJCSBib29sIG9ubHlfZW5kKQo+ICB7Cj4gLQlzdHJ1Y3QgbW11X25v dGlmaWVyX3JhbmdlIF9yYW5nZSwgKnJhbmdlID0gJl9yYW5nZTsKPiAgCXN0cnVjdCBtbXVfbm90 aWZpZXIgKm1uOwo+ICAJaW50IGlkOwo+ICAKPiAtCS8qCj4gLQkgKiBUaGUgZW5kIGNhbGwgYmFj ayB3aWxsIG5ldmVyIGJlIGNhbGwgaWYgdGhlIHN0YXJ0IHJlZnVzZWQgdG8gZ28KPiAtCSAqIHRo cm91Z2ggYmVjYXVzZSBvZiBibG9ja2FibGUgd2FzIGZhbHNlIHNvIGhlcmUgYXNzdW1lIHRoYXQg d2UKPiAtCSAqIGNhbiBibG9jay4KPiAtCSAqLwo+IC0JcmFuZ2UtPmJsb2NrYWJsZSA9IHRydWU7 Cj4gLQlyYW5nZS0+c3RhcnQgPSBzdGFydDsKPiAtCXJhbmdlLT5lbmQgPSBlbmQ7Cj4gLQlyYW5n ZS0+bW0gPSBtbTsKPiAtCj4gIAlpZCA9IHNyY3VfcmVhZF9sb2NrKCZzcmN1KTsKPiAtCWhsaXN0 X2Zvcl9lYWNoX2VudHJ5X3JjdShtbiwgJm1tLT5tbXVfbm90aWZpZXJfbW0tPmxpc3QsIGhsaXN0 KSB7Cj4gKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobW4sICZyYW5nZS0+bW0tPm1tdV9ub3Rp Zmllcl9tbS0+bGlzdCwgaGxpc3QpIHsKPiAgCQkvKgo+ICAJCSAqIENhbGwgaW52YWxpZGF0ZV9y YW5nZSBoZXJlIHRvbyB0byBhdm9pZCB0aGUgbmVlZCBmb3IgdGhlCj4gIAkJICogc3Vic3lzdGVt IG9mIGhhdmluZyB0byByZWdpc3RlciBhbiBpbnZhbGlkYXRlX3JhbmdlX2VuZAo+IEBAIC0yNDEs NyArMjIwLDkgQEAgdm9pZCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1 Y3QgbW1fc3RydWN0ICptbSwKPiAgCQkgKiBhbHJlYWR5IGhhcHBlbiB1bmRlciBwYWdlIHRhYmxl IGxvY2suCj4gIAkJICovCj4gIAkJaWYgKCFvbmx5X2VuZCAmJiBtbi0+b3BzLT5pbnZhbGlkYXRl X3JhbmdlKQo+IC0JCQltbi0+b3BzLT5pbnZhbGlkYXRlX3JhbmdlKG1uLCBtbSwgc3RhcnQsIGVu ZCk7Cj4gKwkJCW1uLT5vcHMtPmludmFsaWRhdGVfcmFuZ2UobW4sIHJhbmdlLT5tbSwKPiArCQkJ CQkJICByYW5nZS0+c3RhcnQsCj4gKwkJCQkJCSAgcmFuZ2UtPmVuZCk7Cj4gIAkJaWYgKG1uLT5v cHMtPmludmFsaWRhdGVfcmFuZ2VfZW5kKQo+ICAJCQltbi0+b3BzLT5pbnZhbGlkYXRlX3Jhbmdl X2VuZChtbiwgcmFuZ2UpOwo+ICAJfQo+IGRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0v bXByb3RlY3QuYwo+IGluZGV4IDZkMzMxNjIwYjllNS4uMzZjYjM1OGRiMTcwIDEwMDY0NAo+IC0t LSBhL21tL21wcm90ZWN0LmMKPiArKysgYi9tbS9tcHJvdGVjdC5jCj4gQEAgLTE2NywxMSArMTY3 LDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGFuZ2VfcG1kX3JhbmdlKHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICAJCXBncHJvdF90IG5ld3Byb3QsIGludCBkaXJ0eV9h Y2NvdW50YWJsZSwgaW50IHByb3RfbnVtYSkKPiAgewo+ICAJcG1kX3QgKnBtZDsKPiAtCXN0cnVj dCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKPiAgCXVuc2lnbmVkIGxvbmcgbmV4dDsKPiAg CXVuc2lnbmVkIGxvbmcgcGFnZXMgPSAwOwo+ICAJdW5zaWduZWQgbG9uZyBucl9odWdlX3VwZGF0 ZXMgPSAwOwo+IC0JdW5zaWduZWQgbG9uZyBtbmlfc3RhcnQgPSAwOwo+ICsJc3RydWN0IG1tdV9u b3RpZmllcl9yYW5nZSByYW5nZTsKPiArCj4gKwlyYW5nZS5zdGFydCA9IDA7Cj4gIAo+ICAJcG1k ID0gcG1kX29mZnNldChwdWQsIGFkZHIpOwo+ICAJZG8gewo+IEBAIC0xODMsOSArMTg0LDkgQEAg c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNoYW5nZV9wbWRfcmFuZ2Uoc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEsCj4gIAkJCWdvdG8gbmV4dDsKPiAgCj4gIAkJLyogaW52b2tlIHRoZSBt bXUgbm90aWZpZXIgaWYgdGhlIHBtZCBpcyBwb3B1bGF0ZWQgKi8KPiAtCQlpZiAoIW1uaV9zdGFy dCkgewo+IC0JCQltbmlfc3RhcnQgPSBhZGRyOwo+IC0JCQltbXVfbm90aWZpZXJfaW52YWxpZGF0 ZV9yYW5nZV9zdGFydChtbSwgbW5pX3N0YXJ0LCBlbmQpOwo+ICsJCWlmICghcmFuZ2Uuc3RhcnQp IHsKPiArCQkJbW11X25vdGlmaWVyX3JhbmdlX2luaXQoJnJhbmdlLCB2bWEtPnZtX21tLCBhZGRy LCBlbmQpOwo+ICsJCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmcmFuZ2Up Owo+ICAJCX0KPiAgCj4gIAkJaWYgKGlzX3N3YXBfcG1kKCpwbWQpIHx8IHBtZF90cmFuc19odWdl KCpwbWQpIHx8IHBtZF9kZXZtYXAoKnBtZCkpIHsKPiBAQCAtMjE0LDggKzIxNSw4IEBAIHN0YXRp YyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjaGFuZ2VfcG1kX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hLAo+ICAJCWNvbmRfcmVzY2hlZCgpOwo+ICAJfSB3aGlsZSAocG1kKyssIGFkZHIg PSBuZXh0LCBhZGRyICE9IGVuZCk7Cj4gIAo+IC0JaWYgKG1uaV9zdGFydCkKPiAtCQltbXVfbm90 aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIG1uaV9zdGFydCwgZW5kKTsKPiArCWlmIChy YW5nZS5zdGFydCkKPiArCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJnJhbmdl KTsKPiAgCj4gIAlpZiAobnJfaHVnZV91cGRhdGVzKQo+ICAJCWNvdW50X3ZtX251bWFfZXZlbnRz KE5VTUFfSFVHRV9QVEVfVVBEQVRFUywgbnJfaHVnZV91cGRhdGVzKTsKPiBkaWZmIC0tZ2l0IGEv bW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwo+IGluZGV4IDdmOWY5MTgwZTQwMS4uZGVmMDFkODZl MzZmIDEwMDY0NAo+IC0tLSBhL21tL21yZW1hcC5jCj4gKysrIGIvbW0vbXJlbWFwLmMKPiBAQCAt MTk3LDE2ICsxOTcsMTQgQEAgdW5zaWduZWQgbG9uZyBtb3ZlX3BhZ2VfdGFibGVzKHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICAJCWJvb2wgbmVlZF9ybWFwX2xvY2tzKQo+ICB7Cj4gIAl1 bnNpZ25lZCBsb25nIGV4dGVudCwgbmV4dCwgb2xkX2VuZDsKPiArCXN0cnVjdCBtbXVfbm90aWZp ZXJfcmFuZ2UgcmFuZ2U7Cj4gIAlwbWRfdCAqb2xkX3BtZCwgKm5ld19wbWQ7Cj4gLQl1bnNpZ25l ZCBsb25nIG1tdW5fc3RhcnQ7CS8qIEZvciBtbXVfbm90aWZpZXJzICovCj4gLQl1bnNpZ25lZCBs b25nIG1tdW5fZW5kOwkJLyogRm9yIG1tdV9ub3RpZmllcnMgKi8KPiAgCj4gIAlvbGRfZW5kID0g b2xkX2FkZHIgKyBsZW47Cj4gIAlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIG9sZF9hZGRyLCBvbGRf ZW5kKTsKPiAgCj4gLQltbXVuX3N0YXJ0ID0gb2xkX2FkZHI7Cj4gLQltbXVuX2VuZCAgID0gb2xk X2VuZDsKPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHZtYS0+dm1fbW0s IG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKPiArCW1tdV9ub3RpZmllcl9yYW5nZV9pbml0KCZyYW5n ZSwgdm1hLT52bV9tbSwgb2xkX2FkZHIsIG9sZF9lbmQpOwo+ICsJbW11X25vdGlmaWVyX2ludmFs aWRhdGVfcmFuZ2Vfc3RhcnQoJnJhbmdlKTsKPiAgCj4gIAlmb3IgKDsgb2xkX2FkZHIgPCBvbGRf ZW5kOyBvbGRfYWRkciArPSBleHRlbnQsIG5ld19hZGRyICs9IGV4dGVudCkgewo+ICAJCWNvbmRf cmVzY2hlZCgpOwo+IEBAIC0yNDcsNyArMjQ1LDcgQEAgdW5zaWduZWQgbG9uZyBtb3ZlX3BhZ2Vf dGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICAJCQkgIG5ld19wbWQsIG5ld19h ZGRyLCBuZWVkX3JtYXBfbG9ja3MpOwo+ICAJfQo+ICAKPiAtCW1tdV9ub3RpZmllcl9pbnZhbGlk YXRlX3JhbmdlX2VuZCh2bWEtPnZtX21tLCBtbXVuX3N0YXJ0LCBtbXVuX2VuZCk7Cj4gKwltbXVf bm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJnJhbmdlKTsKPiAgCj4gIAlyZXR1cm4gbGVu ICsgb2xkX2FkZHIgLSBvbGRfZW5kOwkvKiBob3cgbXVjaCBkb25lICovCj4gIH0KPiBkaWZmIC0t Z2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKPiBpbmRleCA2NTg5ZjYwZDUwMTgu LjFlZWE4YjA0ZjI3YSAxMDA2NDQKPiAtLS0gYS9tbS9vb21fa2lsbC5jCj4gKysrIGIvbW0vb29t X2tpbGwuYwo+IEBAIC01MTYsMTkgKzUxNiwyMCBAQCBib29sIF9fb29tX3JlYXBfdGFza19tbShz dHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAgCQkgKiBjb3VudCBlbGV2YXRlZCB3aXRob3V0IGEgZ29v ZCByZWFzb24uCj4gIAkJICovCj4gIAkJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSB8fCAhKHZt YS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKSB7Cj4gLQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgc3Rh cnQgPSB2bWEtPnZtX3N0YXJ0Owo+IC0JCQljb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IHZtYS0+ dm1fZW5kOwo+ICsJCQlzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlOwo+ICAJCQlzdHJ1 Y3QgbW11X2dhdGhlciB0bGI7Cj4gIAo+IC0JCQl0bGJfZ2F0aGVyX21tdSgmdGxiLCBtbSwgc3Rh cnQsIGVuZCk7Cj4gLQkJCWlmIChtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9u b25ibG9jayhtbSwgc3RhcnQsIGVuZCkpIHsKPiAtCQkJCXRsYl9maW5pc2hfbW11KCZ0bGIsIHN0 YXJ0LCBlbmQpOwo+ICsJCQltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIG1tLCB2bWEt PnZtX3N0YXJ0LAo+ICsJCQkJCQl2bWEtPnZtX2VuZCk7Cj4gKwkJCXRsYl9nYXRoZXJfbW11KCZ0 bGIsIG1tLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKPiArCQkJaWYgKG1tdV9ub3RpZmllcl9p bnZhbGlkYXRlX3JhbmdlX3N0YXJ0X25vbmJsb2NrKCZyYW5nZSkpIHsKPiArCQkJCXRsYl9maW5p c2hfbW11KCZ0bGIsIHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwo+ICAJCQkJcmV0ID0gZmFsc2U7 Cj4gIAkJCQljb250aW51ZTsKPiAgCQkJfQo+IC0JCQl1bm1hcF9wYWdlX3JhbmdlKCZ0bGIsIHZt YSwgc3RhcnQsIGVuZCwgTlVMTCk7Cj4gLQkJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3Jhbmdl X2VuZChtbSwgc3RhcnQsIGVuZCk7Cj4gLQkJCXRsYl9maW5pc2hfbW11KCZ0bGIsIHN0YXJ0LCBl bmQpOwo+ICsJCQl1bm1hcF9wYWdlX3JhbmdlKCZ0bGIsIHZtYSwgcmFuZ2Uuc3RhcnQsIHJhbmdl LmVuZCwgTlVMTCk7Cj4gKwkJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgmcmFu Z2UpOwo+ICsJCQl0bGJfZmluaXNoX21tdSgmdGxiLCByYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsK PiAgCQl9Cj4gIAl9Cj4gIAo+IGRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKPiBp bmRleCA4NWI3Zjk0MjMzNTIuLmM3NWY3MmY2ZmUwZSAxMDA2NDQKPiAtLS0gYS9tbS9ybWFwLmMK PiArKysgYi9tbS9ybWFwLmMKPiBAQCAtODg5LDE1ICs4ODksMTcgQEAgc3RhdGljIGJvb2wgcGFn ZV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEsCj4gIAkJLmFkZHJlc3MgPSBhZGRyZXNzLAo+ICAJCS5mbGFncyA9IFBWTVdfU1lOQywKPiAg CX07Cj4gLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcmVzcywgZW5kOwo+ICsJc3RydWN0IG1t dV9ub3RpZmllcl9yYW5nZSByYW5nZTsKPiAgCWludCAqY2xlYW5lZCA9IGFyZzsKPiAgCj4gIAkv Kgo+ICAJICogV2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnNlIGNhc2UgaWUgcG1kIGZvciBpbnZh bGlkYXRpb24uIE5vdGUgdGhhdAo+ICAJICogdGhlIHBhZ2UgY2FuIG5vdCBiZSBmcmVlIGZyb20g dGhpcyBmdW5jdGlvbi4KPiAgCSAqLwo+IC0JZW5kID0gbWluKHZtYS0+dm1fZW5kLCBzdGFydCAr IChQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSkpKTsKPiAtCW1tdV9ub3RpZmllcl9p bnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHZtYS0+dm1fbW0sIHN0YXJ0LCBlbmQpOwo+ICsJbW11X25v dGlmaWVyX3JhbmdlX2luaXQoJnJhbmdlLCB2bWEtPnZtX21tLCBhZGRyZXNzLAo+ICsJCQkJbWlu KHZtYS0+dm1fZW5kLCBhZGRyZXNzICsKPiArCQkJCSAgICAoUEFHRV9TSVpFIDw8IGNvbXBvdW5k X29yZGVyKHBhZ2UpKSkpOwo+ICsJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQo JnJhbmdlKTsKPiAgCj4gIAl3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoJnB2bXcpKSB7Cj4g IAkJdW5zaWduZWQgbG9uZyBjc3RhcnQ7Cj4gQEAgLTk0OSw3ICs5NTEsNyBAQCBzdGF0aWMgYm9v bCBwYWdlX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSwKPiAgCQkJKCpjbGVhbmVkKSsrOwo+ICAJfQo+ICAKPiAtCW1tdV9ub3RpZmllcl9p bnZhbGlkYXRlX3JhbmdlX2VuZCh2bWEtPnZtX21tLCBzdGFydCwgZW5kKTsKPiArCW1tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgmcmFuZ2UpOwo+ICAKPiAgCXJldHVybiB0cnVlOwo+ ICB9Cj4gQEAgLTEzNDUsNyArMTM0Nyw3IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUo c3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICAJcHRlX3Qg cHRldmFsOwo+ICAJc3RydWN0IHBhZ2UgKnN1YnBhZ2U7Cj4gIAlib29sIHJldCA9IHRydWU7Cj4g LQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcmVzcywgZW5kOwo+ICsJc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZSByYW5nZTsKPiAgCWVudW0gdHR1X2ZsYWdzIGZsYWdzID0gKGVudW0gdHR1X2Zs YWdzKWFyZzsKPiAgCj4gIAkvKiBtdW5sb2NrIGhhcyBub3RoaW5nIHRvIGdhaW4gZnJvbSBleGFt aW5pbmcgdW4tbG9ja2VkIHZtYXMgKi8KPiBAQCAtMTM2OSwxNSArMTM3MSwxOCBAQCBzdGF0aWMg Ym9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwKPiAgCSAqIE5vdGUgdGhhdCB0aGUgcGFnZSBjYW4gbm90IGJlIGZyZWUgaW4g dGhpcyBmdW5jdGlvbiBhcyBjYWxsIG9mCj4gIAkgKiB0cnlfdG9fdW5tYXAoKSBtdXN0IGhvbGQg YSByZWZlcmVuY2Ugb24gdGhlIHBhZ2UuCj4gIAkgKi8KPiAtCWVuZCA9IG1pbih2bWEtPnZtX2Vu ZCwgc3RhcnQgKyAoUEFHRV9TSVpFIDw8IGNvbXBvdW5kX29yZGVyKHBhZ2UpKSk7Cj4gKwltbXVf bm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIHZtYS0+dm1fbW0sIHZtYS0+dm1fc3RhcnQsCj4g KwkJCQltaW4odm1hLT52bV9lbmQsIHZtYS0+dm1fc3RhcnQgKwo+ICsJCQkJICAgIChQQUdFX1NJ WkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSkpKSk7Cj4gIAlpZiAoUGFnZUh1Z2UocGFnZSkpIHsK PiAgCQkvKgo+ICAJCSAqIElmIHNoYXJpbmcgaXMgcG9zc2libGUsIHN0YXJ0IGFuZCBlbmQgd2ls bCBiZSBhZGp1c3RlZAo+ICAJCSAqIGFjY29yZGluZ2x5Lgo+ICAJCSAqLwo+IC0JCWFkanVzdF9y YW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSh2bWEsICZzdGFydCwgJmVuZCk7Cj4gKwkJYWRq dXN0X3JhbmdlX2lmX3BtZF9zaGFyaW5nX3Bvc3NpYmxlKHZtYSwgJnJhbmdlLnN0YXJ0LAo+ICsJ CQkJCQkgICAgICZyYW5nZS5lbmQpOwo+ICAJfQo+IC0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVf cmFuZ2Vfc3RhcnQodm1hLT52bV9tbSwgc3RhcnQsIGVuZCk7Cj4gKwltbXVfbm90aWZpZXJfaW52 YWxpZGF0ZV9yYW5nZV9zdGFydCgmcmFuZ2UpOwo+ICAKPiAgCXdoaWxlIChwYWdlX3ZtYV9tYXBw ZWRfd2FsaygmcHZtdykpIHsKPiAgI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFU SU9OCj4gQEAgLTE0MjgsOSArMTQzMywxMCBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25l KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgCQkJCSAq IHdlIG11c3QgZmx1c2ggdGhlbSBhbGwuICBzdGFydC9lbmQgd2VyZQo+ICAJCQkJICogYWxyZWFk eSBhZGp1c3RlZCBhYm92ZSB0byBjb3ZlciB0aGlzIHJhbmdlLgo+ICAJCQkJICovCj4gLQkJCQlm bHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpOwo+IC0JCQkJZmx1c2hfdGxiX3Jhbmdl KHZtYSwgc3RhcnQsIGVuZCk7Cj4gLQkJCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZSht bSwgc3RhcnQsIGVuZCk7Cj4gKwkJCQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHJhbmdlLnN0YXJ0 LCByYW5nZS5lbmQpOwo+ICsJCQkJZmx1c2hfdGxiX3JhbmdlKHZtYSwgcmFuZ2Uuc3RhcnQsIHJh bmdlLmVuZCk7Cj4gKwkJCQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZShtbSwgcmFuZ2Uu c3RhcnQsCj4gKwkJCQkJCQkgICAgICByYW5nZS5lbmQpOwo+ICAKPiAgCQkJCS8qCj4gIAkJCQkg KiBUaGUgcmVmIGNvdW50IG9mIHRoZSBQTUQgcGFnZSB3YXMgZHJvcHBlZAo+IEBAIC0xNjUwLDcg KzE2NTYsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBwYWdlICpwYWdl LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKPiAgCQlwdXRfcGFnZShwYWdlKTsKPiAgCX0K PiAgCj4gLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQodm1hLT52bV9tbSwgc3Rh cnQsIGVuZCk7Cj4gKwltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJnJhbmdlKTsK PiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gLS0gCj4gMi4xNy4yCj4gCj4gCi0tIApKYW4gS2Fy YSA8amFja0BzdXNlLmNvbT4KU1VTRSBMYWJzLCBDUgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK