From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sinclair Yeh Subject: Re: [PATCH v4 1/2] drm: Improve drm_mm search (and fix topdown allocation) with rbtrees Date: Thu, 2 Feb 2017 11:11:53 -0800 Message-ID: <20170202191152.GB4907@ubuntu> References: <20170202114434.3060-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170202114434.3060-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Chris Wilson Cc: Thomas Hellstrom , Stephen Warren , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Russell King , Alexandre Courbot , Alex Deucher , Daniel Vetter , Christian =?iso-8859-1?Q?K=F6nig?= List-Id: intel-gfx@lists.freedesktop.org dm13Z2Z4IHBhcnQ6ICBSZXZpZXdlZC1ieTogU2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+ CgpPbiBUaHUsIEZlYiAwMiwgMjAxNyBhdCAxMTo0NDozM0FNICswMDAwLCBDaHJpcyBXaWxzb24g d3JvdGU6Cj4gVGhlIGRybV9tbSByYW5nZSBtYW5hZ2VyIGNsYWltZWQgdG8gc3VwcG9ydCB0b3At ZG93biBpbnNlcnRpb24sIGJ1dCBpdAo+IHdhcyBuZWl0aGVyIHNlYXJjaGluZyBmb3IgdGhlIHRv cC1tb3N0IGhvbGUgdGhhdCBjb3VsZCBmaXQgdGhlCj4gYWxsb2NhdGlvbiByZXF1ZXN0IG5vciBm aXR0aW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBob2xlIGNvcnJlY3RseS4KPiAKPiBJbiBvcmRlciB0 byBzZWFyY2ggdGhlIHJhbmdlIGVmZmljaWVudGx5LCB3ZSBjcmVhdGUgYSBzZWNvbmRhcnkgaW5k ZXgKPiBmb3IgdGhlIGhvbGVzIHVzaW5nIGVpdGhlciB0aGVpciBzaXplIG9yIHRoZWlyIGFkZHJl c3MuIFRoaXMgaW5kZXgKPiBhbGxvd3MgdXMgdG8gZmluZCB0aGUgc21hbGxlc3QgaG9sZSBvciB0 aGUgaG9sZSBhdCB0aGUgYm90dG9tIG9yIHRvcCBvZgo+IHRoZSByYW5nZSBlZmZpY2llbnRseSwg d2hpbHN0IGtlZXBpbmcgdGhlIGhvbGUgc3RhY2sgdG8gcmFwaWRseSBzZXJ2aWNlCj4gZXZpY3Rp b25zLgo+IAo+IHYyOiBTZWFyY2ggZm9yIGhvbGVzIGJvdGggaGlnaCBhbmQgbG93LiBSZW5hbWUg ZmxhZ3MgdG8gbW9kZS4KPiB2MzogRGlzY292ZXIgcmJfZW50cnlfc2FmZSgpIGFuZCB1c2UgaXQh Cj4gdjQ6IEtlcm5lbGRvYyBmb3IgZW51bSBkcm1fbW1faW5zZXJ0X21vZGUuCj4gCj4gU2lnbmVk LW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gUmV2aWV3 ZWQtYnk6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4K PiBDYzogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hlckBhbWQuY29tPgo+IENjOiAiQ2hy aXN0aWFuIEvDtm5pZyIgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPiBDYzogRGF2aWQgQWly bGllIDxhaXJsaWVkQGxpbnV4LmllPgo+IENjOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJt bGludXgub3JnLnVrPgo+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv bT4KPiBDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4KPiBDYzog U2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+Cj4gQ2M6IEx1Y2FzIFN0YWNoIDxsLnN0 YWNoQHBlbmd1dHJvbml4LmRlPgo+IENjOiBDaHJpc3RpYW4gR21laW5lciA8Y2hyaXN0aWFuLmdt ZWluZXJAZ21haWwuY29tPgo+IENjOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4g Q2M6IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BnbWFpbC5jb20+Cj4gQ2M6IFN0ZXBo ZW4gV2FycmVuIDxzd2FycmVuQHd3d2RvdG9yZy5vcmc+Cj4gQ2M6IEFsZXhhbmRyZSBDb3VyYm90 IDxnbnVyb3VAZ21haWwuY29tPgo+IENjOiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0Pgo+ IENjOiBTaW5jbGFpciBZZWggPHN5ZWhAdm13YXJlLmNvbT4KPiBDYzogVGhvbWFzIEhlbGxzdHJv bSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZ3R0X21nci5jICB8ICAxNiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdnJhbV9tZ3IuYyB8ICAyMCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtYWRh L2FybWFkYV9nZW0uYyAgICAgICAgICB8ICAgNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX21t LmMgICAgICAgICAgICAgICAgICAgICB8IDQ4OCArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0K PiAgZHJpdmVycy9ncHUvZHJtL2RybV92bWFfbWFuYWdlci5jICAgICAgICAgICAgfCAgIDMgKy0K PiAgZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYyAgICAgICAgfCAgMTYgKy0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgICAgfCAgMTAgKy0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYyAgICAgICAgfCAgIDkgKy0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jICAgfCAgIDUgKy0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgICAgICAgICAgfCAgMzkgKy0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jICAgICAgIHwgICA2ICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jICAgICAgICAgICAgICAgIHwgICAzICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV92bWEuYyAgICAgICAgICAgIHwgICAzICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fbW0uYyAgICAgIHwgIDU4ICsr LS0KPiAgZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYyAgICAgICAgICAgICAgICAgfCAgIDYg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jICAgICAgICAgICAgICAgICAgfCAgIDQg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fbWFuYWdlci5jICAgICAgICAgfCAgMTgg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jICAgICAgICAgICAgICAgfCAgIDIg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMgICAgICAgICAgICAgICAgfCAgIDMg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYyAgICAgICAgICAgICAgfCAgIDYg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYyAgICAgICAgICAgICAgICAgfCAgIDQg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMgICAgICAgfCAgMTAg Ky0KPiAgaW5jbHVkZS9kcm0vZHJtX21tLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAxODQg KysrKystLS0tLQo+ICAyMyBmaWxlcyBjaGFuZ2VkLCA0NzAgaW5zZXJ0aW9ucygrKSwgNDQ3IGRl bGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfZ3R0X21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2d0dF9t Z3IuYwo+IGluZGV4IGU0ZWI2ZGQzNzk4YS4uMDMzNWMyZjMzMWU5IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ndHRfbWdyLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ3R0X21nci5jCj4gQEAgLTk3LDggKzk3LDcgQEAg aW50IGFtZGdwdV9ndHRfbWdyX2FsbG9jKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFu LAo+ICB7Cj4gIAlzdHJ1Y3QgYW1kZ3B1X2d0dF9tZ3IgKm1nciA9IG1hbi0+cHJpdjsKPiAgCXN0 cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSA9IG1lbS0+bW1fbm9kZTsKPiAtCWVudW0gZHJtX21tX3Nl YXJjaF9mbGFncyBzZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0JFU1Q7Cj4gLQllbnVtIGRybV9tbV9h bGxvY2F0b3JfZmxhZ3MgYWZsYWdzID0gRFJNX01NX0NSRUFURV9ERUZBVUxUOwo+ICsJZW51bSBk cm1fbW1faW5zZXJ0X21vZGUgbW9kZTsKPiAgCXVuc2lnbmVkIGxvbmcgZnBmbiwgbHBmbjsKPiAg CWludCByOwo+ICAKPiBAQCAtMTE1LDE1ICsxMTQsMTQgQEAgaW50IGFtZGdwdV9ndHRfbWdyX2Fs bG9jKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ICAJZWxzZQo+ICAJCWxwZm4g PSBtYW4tPnNpemU7Cj4gIAo+IC0JaWYgKHBsYWNlICYmIHBsYWNlLT5mbGFncyAmIFRUTV9QTF9G TEFHX1RPUERPV04pIHsKPiAtCQlzZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0JFTE9XOwo+IC0JCWFm bGFncyA9IERSTV9NTV9DUkVBVEVfVE9QOwo+IC0JfQo+ICsJbW9kZSA9IERSTV9NTV9JTlNFUlRf QkVTVDsKPiArCWlmIChwbGFjZSAmJiBwbGFjZS0+ZmxhZ3MgJiBUVE1fUExfRkxBR19UT1BET1dO KQo+ICsJCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0hJR0g7Cj4gIAo+ICAJc3Bpbl9sb2NrKCZtZ3It PmxvY2spOwo+IC0JciA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKCZtZ3It Pm1tLCBub2RlLCBtZW0tPm51bV9wYWdlcywKPiAtCQkJCQkJbWVtLT5wYWdlX2FsaWdubWVudCwg MCwKPiAtCQkJCQkJZnBmbiwgbHBmbiwgc2ZsYWdzLCBhZmxhZ3MpOwo+ICsJciA9IGRybV9tbV9p bnNlcnRfbm9kZV9pbl9yYW5nZSgmbWdyLT5tbSwgbm9kZSwKPiArCQkJCQltZW0tPm51bV9wYWdl cywgbWVtLT5wYWdlX2FsaWdubWVudCwgMCwKPiArCQkJCQlmcGZuLCBscGZuLCBtb2RlKTsKPiAg CXNwaW5fdW5sb2NrKCZtZ3ItPmxvY2spOwo+ICAKPiAgCWlmICghcikgewo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92cmFtX21nci5jCj4gaW5kZXggYWM5MDA3OTg2YzEx Li45ZTU3N2UzZDMxNDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3ZyYW1fbWdyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfdnJhbV9tZ3IuYwo+IEBAIC05Nyw4ICs5Nyw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZyYW1f bWdyX25ldyhzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKPiAgCXN0cnVjdCBhbWRn cHVfdnJhbV9tZ3IgKm1nciA9IG1hbi0+cHJpdjsKPiAgCXN0cnVjdCBkcm1fbW0gKm1tID0gJm1n ci0+bW07Cj4gIAlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGVzOwo+IC0JZW51bSBkcm1fbW1fc2Vh cmNoX2ZsYWdzIHNmbGFncyA9IERSTV9NTV9TRUFSQ0hfREVGQVVMVDsKPiAtCWVudW0gZHJtX21t X2FsbG9jYXRvcl9mbGFncyBhZmxhZ3MgPSBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQ7Cj4gKwllbnVt IGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlOwo+ICAJdW5zaWduZWQgbG9uZyBscGZuLCBudW1fbm9k ZXMsIHBhZ2VzX3Blcl9ub2RlLCBwYWdlc19sZWZ0Owo+ICAJdW5zaWduZWQgaTsKPiAgCWludCBy Owo+IEBAIC0xMjEsMTAgKzEyMCw5IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZyYW1fbWdyX25ldyhz dHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKPiAgCWlmICghbm9kZXMpCj4gIAkJcmV0 dXJuIC1FTk9NRU07Cj4gIAo+IC0JaWYgKHBsYWNlLT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERP V04pIHsKPiAtCQlzZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0JFTE9XOwo+IC0JCWFmbGFncyA9IERS TV9NTV9DUkVBVEVfVE9QOwo+IC0JfQo+ICsJbW9kZSA9IERSTV9NTV9JTlNFUlRfQkVTVDsKPiAr CWlmIChwbGFjZS0+ZmxhZ3MgJiBUVE1fUExfRkxBR19UT1BET1dOKQo+ICsJCW1vZGUgPSBEUk1f TU1fSU5TRVJUX0hJR0g7Cj4gIAo+ICAJcGFnZXNfbGVmdCA9IG1lbS0+bnVtX3BhZ2VzOwo+ICAK PiBAQCAtMTM1LDEzICsxMzMsMTEgQEAgc3RhdGljIGludCBhbWRncHVfdnJhbV9tZ3JfbmV3KHN0 cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ICAKPiAgCQlpZiAocGFnZXMgPT0gcGFn ZXNfcGVyX25vZGUpCj4gIAkJCWFsaWdubWVudCA9IHBhZ2VzX3Blcl9ub2RlOwo+IC0JCWVsc2UK PiAtCQkJc2ZsYWdzIHw9IERSTV9NTV9TRUFSQ0hfQkVTVDsKPiAgCj4gLQkJciA9IGRybV9tbV9p bnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKG1tLCAmbm9kZXNbaV0sIHBhZ2VzLAo+IC0JCQkJ CQkJYWxpZ25tZW50LCAwLAo+IC0JCQkJCQkJcGxhY2UtPmZwZm4sIGxwZm4sCj4gLQkJCQkJCQlz ZmxhZ3MsIGFmbGFncyk7Cj4gKwkJciA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZShtbSwg Jm5vZGVzW2ldLAo+ICsJCQkJCQlwYWdlcywgYWxpZ25tZW50LCAwLAo+ICsJCQkJCQlwbGFjZS0+ ZnBmbiwgbHBmbiwKPiArCQkJCQkJbW9kZSk7Cj4gIAkJaWYgKHVubGlrZWx5KHIpKQo+ICAJCQln b3RvIGVycm9yOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1h ZGFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtYWRhL2FybWFkYV9nZW0uYwo+IGluZGV4IGEy OTNjOGJlMjMyYy4uNTYwZDQxNmRlYWIyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h cm1hZGEvYXJtYWRhX2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFf Z2VtLmMKPiBAQCAtMTQ4LDggKzE0OCw4IEBAIGFybWFkYV9nZW1fbGluZWFyX2JhY2soc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGFybWFkYV9nZW1fb2JqZWN0ICpvYmopCj4gIAkJCXJl dHVybiAtRU5PU1BDOwo+ICAKPiAgCQltdXRleF9sb2NrKCZwcml2LT5saW5lYXJfbG9jayk7Cj4g LQkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZwcml2LT5saW5lYXIsIG5vZGUsIHNpemUsIGFs aWduLAo+IC0JCQkJCSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ICsJCXJldCA9IGRybV9tbV9p bnNlcnRfbm9kZV9nZW5lcmljKCZwcml2LT5saW5lYXIsIG5vZGUsCj4gKwkJCQkJCSBzaXplLCBh bGlnbiwgMCwgMCk7Cj4gIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5saW5lYXJfbG9jayk7Cj4gIAkJ aWYgKHJldCkgewo+ICAJCQlrZnJlZShub2RlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCj4gaW5kZXggZTUxODc2ZTU4 OGQ2Li44YmZiMGIzMjcyNjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCj4gQEAgLTk3LDE0ICs5Nyw2IEBACj4g ICAqIGxvY2tpbmcgd291bGQgYmUgZnVsbHkgcmVkdW5kYW50Lgo+ICAgKi8KPiAgCj4gLXN0YXRp YyBzdHJ1Y3QgZHJtX21tX25vZGUgKmRybV9tbV9zZWFyY2hfZnJlZV9pbl9yYW5nZV9nZW5lcmlj KGNvbnN0IHN0cnVjdCBkcm1fbW0gKm1tLAo+IC0JCQkJCQl1NjQgc2l6ZSwKPiAtCQkJCQkJdTY0 IGFsaWdubWVudCwKPiAtCQkJCQkJdW5zaWduZWQgbG9uZyBjb2xvciwKPiAtCQkJCQkJdTY0IHN0 YXJ0LAo+IC0JCQkJCQl1NjQgZW5kLAo+IC0JCQkJCQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mg ZmxhZ3MpOwo+IC0KPiAgI2lmZGVmIENPTkZJR19EUk1fREVCVUdfTU0KPiAgI2luY2x1ZGUgPGxp bnV4L3N0YWNrZGVwb3QuaD4KPiAgCj4gQEAgLTIyNiw2OSArMjE4LDE1MSBAQCBzdGF0aWMgdm9p ZCBkcm1fbW1faW50ZXJ2YWxfdHJlZV9hZGRfbm9kZShzdHJ1Y3QgZHJtX21tX25vZGUgKmhvbGVf bm9kZSwKPiAgCQkJICAgICZkcm1fbW1faW50ZXJ2YWxfdHJlZV9hdWdtZW50KTsKPiAgfQo+ICAK PiAtc3RhdGljIHZvaWQgZHJtX21tX2luc2VydF9oZWxwZXIoc3RydWN0IGRybV9tbV9ub2RlICpo b2xlX25vZGUsCj4gLQkJCQkgc3RydWN0IGRybV9tbV9ub2RlICpub2RlLAo+IC0JCQkJIHU2NCBz aXplLCB1NjQgYWxpZ25tZW50LAo+IC0JCQkJIHVuc2lnbmVkIGxvbmcgY29sb3IsCj4gLQkJCQkg dTY0IHJhbmdlX3N0YXJ0LCB1NjQgcmFuZ2VfZW5kLAo+IC0JCQkJIGVudW0gZHJtX21tX2FsbG9j YXRvcl9mbGFncyBmbGFncykKPiArI2RlZmluZSBSQl9JTlNFUlQocm9vdCwgbWVtYmVyLCBleHBy KSBkbyB7IFwKPiArCXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZyb290LnJiX25vZGUsICpyYiA9 IE5VTEw7IFwKPiArCXU2NCB4ID0gZXhwcihub2RlKTsgXAo+ICsJd2hpbGUgKCpsaW5rKSB7IFwK PiArCQlyYiA9ICpsaW5rOyBcCj4gKwkJaWYgKHggPCBleHByKHJiX2VudHJ5KHJiLCBzdHJ1Y3Qg ZHJtX21tX25vZGUsIG1lbWJlcikpKSBcCj4gKwkJCWxpbmsgPSAmcmItPnJiX2xlZnQ7IFwKPiAr CQllbHNlIFwKPiArCQkJbGluayA9ICZyYi0+cmJfcmlnaHQ7IFwKPiArCX0gXAo+ICsJcmJfbGlu a19ub2RlKCZub2RlLT5tZW1iZXIsIHJiLCBsaW5rKTsgXAo+ICsJcmJfaW5zZXJ0X2NvbG9yKCZu b2RlLT5tZW1iZXIsICZyb290KTsgXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArI2RlZmluZSBIT0xF X1NJWkUoTk9ERSkgKChOT0RFKS0+aG9sZV9zaXplKQo+ICsjZGVmaW5lIEhPTEVfQUREUihOT0RF KSAoX19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0KE5PREUpKQo+ICsKPiArc3RhdGljIHZvaWQgYWRk X2hvbGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX21tICpt bSA9IGhvbGVfbm9kZS0+bW07Cj4gLQl1NjQgaG9sZV9zdGFydCA9IGRybV9tbV9ob2xlX25vZGVf c3RhcnQoaG9sZV9ub2RlKTsKPiAtCXU2NCBob2xlX2VuZCA9IGRybV9tbV9ob2xlX25vZGVfZW5k KGhvbGVfbm9kZSk7Cj4gLQl1NjQgYWRqX3N0YXJ0ID0gaG9sZV9zdGFydDsKPiAtCXU2NCBhZGpf ZW5kID0gaG9sZV9lbmQ7Cj4gKwlzdHJ1Y3QgZHJtX21tICptbSA9IG5vZGUtPm1tOwo+ICAKPiAt CURSTV9NTV9CVUdfT04oIWRybV9tbV9ob2xlX2ZvbGxvd3MoaG9sZV9ub2RlKSB8fCBub2RlLT5h bGxvY2F0ZWQpOwo+ICsJbm9kZS0+aG9sZV9zaXplID0KPiArCQlfX2RybV9tbV9ob2xlX25vZGVf ZW5kKG5vZGUpIC0gX19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0KG5vZGUpOwo+ICsJRFJNX01NX0JV R19PTighZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSk7Cj4gIAo+IC0JaWYgKG1tLT5jb2xvcl9h ZGp1c3QpCj4gLQkJbW0tPmNvbG9yX2FkanVzdChob2xlX25vZGUsIGNvbG9yLCAmYWRqX3N0YXJ0 LCAmYWRqX2VuZCk7Cj4gKwlSQl9JTlNFUlQobW0tPmhvbGVzX3NpemUsIHJiX2hvbGVfc2l6ZSwg SE9MRV9TSVpFKTsKPiArCVJCX0lOU0VSVChtbS0+aG9sZXNfYWRkciwgcmJfaG9sZV9hZGRyLCBI T0xFX0FERFIpOwo+ICAKPiAtCWFkal9zdGFydCA9IG1heChhZGpfc3RhcnQsIHJhbmdlX3N0YXJ0 KTsKPiAtCWFkal9lbmQgPSBtaW4oYWRqX2VuZCwgcmFuZ2VfZW5kKTsKPiArCWxpc3RfYWRkKCZu b2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwo+ICt9Cj4gIAo+IC0JaWYgKGZsYWdz ICYgRFJNX01NX0NSRUFURV9UT1ApCj4gLQkJYWRqX3N0YXJ0ID0gYWRqX2VuZCAtIHNpemU7Cj4g K3N0YXRpYyB2b2lkIHJtX2hvbGUoc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQo+ICt7Cj4gKwlE Uk1fTU1fQlVHX09OKCFkcm1fbW1faG9sZV9mb2xsb3dzKG5vZGUpKTsKPiAgCj4gLQlpZiAoYWxp Z25tZW50KSB7Cj4gLQkJdTY0IHJlbTsKPiArCWxpc3RfZGVsKCZub2RlLT5ob2xlX3N0YWNrKTsK PiArCXJiX2VyYXNlKCZub2RlLT5yYl9ob2xlX3NpemUsICZub2RlLT5tbS0+aG9sZXNfc2l6ZSk7 Cj4gKwlyYl9lcmFzZSgmbm9kZS0+cmJfaG9sZV9hZGRyLCAmbm9kZS0+bW0tPmhvbGVzX2FkZHIp Owo+ICsJbm9kZS0+aG9sZV9zaXplID0gMDsKPiAgCj4gLQkJZGl2NjRfdTY0X3JlbShhZGpfc3Rh cnQsIGFsaWdubWVudCwgJnJlbSk7Cj4gLQkJaWYgKHJlbSkgewo+IC0JCQlpZiAoZmxhZ3MgJiBE Uk1fTU1fQ1JFQVRFX1RPUCkKPiAtCQkJCWFkal9zdGFydCAtPSByZW07Cj4gLQkJCWVsc2UKPiAt CQkJCWFkal9zdGFydCArPSBhbGlnbm1lbnQgLSByZW07Cj4gKwlEUk1fTU1fQlVHX09OKGRybV9t bV9ob2xlX2ZvbGxvd3Mobm9kZSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBk cm1fbW1fbm9kZSAqcmJfaG9sZV9zaXplX3RvX25vZGUoc3RydWN0IHJiX25vZGUgKnJiKQo+ICt7 Cj4gKwlyZXR1cm4gcmJfZW50cnlfc2FmZShyYiwgc3RydWN0IGRybV9tbV9ub2RlLCByYl9ob2xl X3NpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fbW1fbm9kZSAqcmJf aG9sZV9hZGRyX3RvX25vZGUoc3RydWN0IHJiX25vZGUgKnJiKQo+ICt7Cj4gKwlyZXR1cm4gcmJf ZW50cnlfc2FmZShyYiwgc3RydWN0IGRybV9tbV9ub2RlLCByYl9ob2xlX2FkZHIpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIHU2NCByYl9ob2xlX3NpemUoc3RydWN0IHJiX25vZGUgKnJiKQo+ ICt7Cj4gKwlyZXR1cm4gcmJfZW50cnkocmIsIHN0cnVjdCBkcm1fbW1fbm9kZSwgcmJfaG9sZV9z aXplKS0+aG9sZV9zaXplOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICpi ZXN0X2hvbGUoc3RydWN0IGRybV9tbSAqbW0sIHU2NCBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgcmJf bm9kZSAqYmVzdCA9IE5VTEw7Cj4gKwlzdHJ1Y3QgcmJfbm9kZSAqKmxpbmsgPSAmbW0tPmhvbGVz X3NpemUucmJfbm9kZTsKPiArCj4gKwl3aGlsZSAoKmxpbmspIHsKPiArCQlzdHJ1Y3QgcmJfbm9k ZSAqcmIgPSAqbGluazsKPiArCj4gKwkJaWYgKHNpemUgPD0gcmJfaG9sZV9zaXplKHJiKSkgewo+ ICsJCQlsaW5rID0gJnJiLT5yYl9sZWZ0Owo+ICsJCQliZXN0ID0gcmI7Cj4gKwkJfSBlbHNlIHsK PiArCQkJbGluayA9ICZyYi0+cmJfcmlnaHQ7Cj4gIAkJfQo+ICAJfQo+ICAKPiAtCWlmIChhZGpf c3RhcnQgPT0gaG9sZV9zdGFydCkgewo+IC0JCWhvbGVfbm9kZS0+aG9sZV9mb2xsb3dzID0gMDsK PiAtCQlsaXN0X2RlbCgmaG9sZV9ub2RlLT5ob2xlX3N0YWNrKTsKPiArCXJldHVybiByYl9ob2xl X3NpemVfdG9fbm9kZShiZXN0KTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9k ZSAqZmluZF9ob2xlKHN0cnVjdCBkcm1fbW0gKm1tLCB1NjQgYWRkcikKPiArewo+ICsJc3RydWN0 IGRybV9tbV9ub2RlICpub2RlID0gTlVMTDsKPiArCXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZt bS0+aG9sZXNfYWRkci5yYl9ub2RlOwo+ICsKPiArCXdoaWxlICgqbGluaykgewo+ICsJCXU2NCBo b2xlX3N0YXJ0Owo+ICsKPiArCQlub2RlID0gcmJfaG9sZV9hZGRyX3RvX25vZGUoKmxpbmspOwo+ ICsJCWhvbGVfc3RhcnQgPSBfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQobm9kZSk7Cj4gKwo+ICsJ CWlmIChhZGRyIDwgaG9sZV9zdGFydCkKPiArCQkJbGluayA9ICZub2RlLT5yYl9ob2xlX2FkZHIu cmJfbGVmdDsKPiArCQllbHNlIGlmIChhZGRyID4gaG9sZV9zdGFydCArIG5vZGUtPmhvbGVfc2l6 ZSkKPiArCQkJbGluayA9ICZub2RlLT5yYl9ob2xlX2FkZHIucmJfcmlnaHQ7Cj4gKwkJZWxzZQo+ ICsJCQlicmVhazsKPiAgCX0KPiAgCj4gLQlub2RlLT5zdGFydCA9IGFkal9zdGFydDsKPiAtCW5v ZGUtPnNpemUgPSBzaXplOwo+IC0Jbm9kZS0+bW0gPSBtbTsKPiAtCW5vZGUtPmNvbG9yID0gY29s b3I7Cj4gLQlub2RlLT5hbGxvY2F0ZWQgPSAxOwo+ICsJcmV0dXJuIG5vZGU7Cj4gK30KPiAgCj4g LQlsaXN0X2FkZCgmbm9kZS0+bm9kZV9saXN0LCAmaG9sZV9ub2RlLT5ub2RlX2xpc3QpOwo+ICtz dGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICoKPiArZmlyc3RfaG9sZShzdHJ1Y3QgZHJtX21tICpt bSwKPiArCSAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsCj4gKwkgICBlbnVtIGRybV9t bV9pbnNlcnRfbW9kZSBtb2RlKQo+ICt7Cj4gKwlpZiAoUkJfRU1QVFlfUk9PVCgmbW0tPmhvbGVz X3NpemUpKQo+ICsJCXJldHVybiBOVUxMOwo+ICAKPiAtCWRybV9tbV9pbnRlcnZhbF90cmVlX2Fk ZF9ub2RlKGhvbGVfbm9kZSwgbm9kZSk7Cj4gKwlzd2l0Y2ggKG1vZGUpIHsKPiArCWRlZmF1bHQ6 Cj4gKwljYXNlIERSTV9NTV9JTlNFUlRfQkVTVDoKPiArCQlyZXR1cm4gYmVzdF9ob2xlKG1tLCBz aXplKTsKPiAgCj4gLQlEUk1fTU1fQlVHX09OKG5vZGUtPnN0YXJ0IDwgcmFuZ2Vfc3RhcnQpOwo+ IC0JRFJNX01NX0JVR19PTihub2RlLT5zdGFydCA8IGFkal9zdGFydCk7Cj4gLQlEUk1fTU1fQlVH X09OKG5vZGUtPnN0YXJ0ICsgbm9kZS0+c2l6ZSA+IGFkal9lbmQpOwo+IC0JRFJNX01NX0JVR19P Tihub2RlLT5zdGFydCArIG5vZGUtPnNpemUgPiByYW5nZV9lbmQpOwo+ICsJY2FzZSBEUk1fTU1f SU5TRVJUX0xPVzoKPiArCQlyZXR1cm4gZmluZF9ob2xlKG1tLCBzdGFydCk7Cj4gIAo+IC0Jbm9k ZS0+aG9sZV9mb2xsb3dzID0gMDsKPiAtCWlmIChfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQobm9k ZSkgPCBob2xlX2VuZCkgewo+IC0JCWxpc3RfYWRkKCZub2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhv bGVfc3RhY2spOwo+IC0JCW5vZGUtPmhvbGVfZm9sbG93cyA9IDE7Cj4gKwljYXNlIERSTV9NTV9J TlNFUlRfSElHSDoKPiArCQlyZXR1cm4gZmluZF9ob2xlKG1tLCBlbmQpOwo+ICsKPiArCWNhc2Ug RFJNX01NX0lOU0VSVF9FVklDVDoKPiArCQlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxs KCZtbS0+aG9sZV9zdGFjaywKPiArCQkJCQkJc3RydWN0IGRybV9tbV9ub2RlLAo+ICsJCQkJCQlo b2xlX3N0YWNrKTsKPiAgCX0KPiArfQo+ICAKPiAtCXNhdmVfc3RhY2sobm9kZSk7Cj4gK3N0YXRp YyBzdHJ1Y3QgZHJtX21tX25vZGUgKgo+ICtuZXh0X2hvbGUoc3RydWN0IGRybV9tbSAqbW0sCj4g KwkgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKPiArCSAgZW51bSBkcm1fbW1faW5zZXJ0X21v ZGUgbW9kZSkKPiArewo+ICsJc3dpdGNoIChtb2RlKSB7Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSBE Uk1fTU1fSU5TRVJUX0JFU1Q6Cj4gKwkJcmV0dXJuIHJiX2hvbGVfc2l6ZV90b19ub2RlKHJiX25l eHQoJm5vZGUtPnJiX2hvbGVfc2l6ZSkpOwo+ICsKPiArCWNhc2UgRFJNX01NX0lOU0VSVF9MT1c6 Cj4gKwkJcmV0dXJuIHJiX2hvbGVfYWRkcl90b19ub2RlKHJiX25leHQoJm5vZGUtPnJiX2hvbGVf YWRkcikpOwo+ICsKPiArCWNhc2UgRFJNX01NX0lOU0VSVF9ISUdIOgo+ICsJCXJldHVybiByYl9o b2xlX2FkZHJfdG9fbm9kZShyYl9wcmV2KCZub2RlLT5yYl9ob2xlX2FkZHIpKTsKPiArCj4gKwlj YXNlIERSTV9NTV9JTlNFUlRfRVZJQ1Q6Cj4gKwkJbm9kZSA9IGxpc3RfbmV4dF9lbnRyeShub2Rl LCBob2xlX3N0YWNrKTsKPiArCQlyZXR1cm4gJm5vZGUtPmhvbGVfc3RhY2sgPT0gJm1tLT5ob2xl X3N0YWNrID8gTlVMTCA6IG5vZGU7Cj4gKwl9Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC0zMTcsMjEg KzM5MSwxMiBAQCBpbnQgZHJtX21tX3Jlc2VydmVfbm9kZShzdHJ1Y3QgZHJtX21tICptbSwgc3Ry dWN0IGRybV9tbV9ub2RlICpub2RlKQo+ICAJCXJldHVybiAtRU5PU1BDOwo+ICAKPiAgCS8qIEZp bmQgdGhlIHJlbGV2YW50IGhvbGUgdG8gYWRkIG91ciBub2RlIHRvICovCj4gLQlob2xlID0gZHJt X21tX2ludGVydmFsX3RyZWVfaXRlcl9maXJzdCgmbW0tPmludGVydmFsX3RyZWUsCj4gLQkJCQkJ ICAgICAgIG5vZGUtPnN0YXJ0LCB+KHU2NCkwKTsKPiAtCWlmIChob2xlKSB7Cj4gLQkJaWYgKGhv bGUtPnN0YXJ0IDwgZW5kKQo+IC0JCQlyZXR1cm4gLUVOT1NQQzsKPiAtCX0gZWxzZSB7Cj4gLQkJ aG9sZSA9IGxpc3RfZW50cnkoZHJtX21tX25vZGVzKG1tKSwgdHlwZW9mKCpob2xlKSwgbm9kZV9s aXN0KTsKPiAtCX0KPiAtCj4gLQlob2xlID0gbGlzdF9sYXN0X2VudHJ5KCZob2xlLT5ub2RlX2xp c3QsIHR5cGVvZigqaG9sZSksIG5vZGVfbGlzdCk7Cj4gLQlpZiAoIWRybV9tbV9ob2xlX2ZvbGxv d3MoaG9sZSkpCj4gKwlob2xlID0gZmluZF9ob2xlKG1tLCBub2RlLT5zdGFydCk7Cj4gKwlpZiAo IWhvbGUpCj4gIAkJcmV0dXJuIC1FTk9TUEM7Cj4gIAo+ICAJYWRqX3N0YXJ0ID0gaG9sZV9zdGFy dCA9IF9fZHJtX21tX2hvbGVfbm9kZV9zdGFydChob2xlKTsKPiAtCWFkal9lbmQgPSBob2xlX2Vu ZCA9IF9fZHJtX21tX2hvbGVfbm9kZV9lbmQoaG9sZSk7Cj4gKwlhZGpfZW5kID0gaG9sZV9lbmQg PSBob2xlX3N0YXJ0ICsgaG9sZS0+aG9sZV9zaXplOwo+ICAKPiAgCWlmIChtbS0+Y29sb3JfYWRq dXN0KQo+ICAJCW1tLT5jb2xvcl9hZGp1c3QoaG9sZSwgbm9kZS0+Y29sb3IsICZhZGpfc3RhcnQs ICZhZGpfZW5kKTsKPiBAQCAtMzQwLDcwICs0MDUsMTMwIEBAIGludCBkcm1fbW1fcmVzZXJ2ZV9u b2RlKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUpCj4gIAkJcmV0 dXJuIC1FTk9TUEM7Cj4gIAo+ICAJbm9kZS0+bW0gPSBtbTsKPiAtCW5vZGUtPmFsbG9jYXRlZCA9 IDE7Cj4gIAo+ICAJbGlzdF9hZGQoJm5vZGUtPm5vZGVfbGlzdCwgJmhvbGUtPm5vZGVfbGlzdCk7 Cj4gLQo+ICAJZHJtX21tX2ludGVydmFsX3RyZWVfYWRkX25vZGUoaG9sZSwgbm9kZSk7Cj4gKwlu b2RlLT5hbGxvY2F0ZWQgPSB0cnVlOwo+ICsJbm9kZS0+aG9sZV9zaXplID0gMDsKPiAgCj4gLQlp ZiAobm9kZS0+c3RhcnQgPT0gaG9sZV9zdGFydCkgewo+IC0JCWhvbGUtPmhvbGVfZm9sbG93cyA9 IDA7Cj4gLQkJbGlzdF9kZWwoJmhvbGUtPmhvbGVfc3RhY2spOwo+IC0JfQo+IC0KPiAtCW5vZGUt PmhvbGVfZm9sbG93cyA9IDA7Cj4gLQlpZiAoZW5kICE9IGhvbGVfZW5kKSB7Cj4gLQkJbGlzdF9h ZGQoJm5vZGUtPmhvbGVfc3RhY2ssICZtbS0+aG9sZV9zdGFjayk7Cj4gLQkJbm9kZS0+aG9sZV9m b2xsb3dzID0gMTsKPiAtCX0KPiArCXJtX2hvbGUoaG9sZSk7Cj4gKwlpZiAobm9kZS0+c3RhcnQg PiBob2xlX3N0YXJ0KQo+ICsJCWFkZF9ob2xlKGhvbGUpOwo+ICsJaWYgKGVuZCA8IGhvbGVfZW5k KQo+ICsJCWFkZF9ob2xlKG5vZGUpOwo+ICAKPiAgCXNhdmVfc3RhY2sobm9kZSk7Cj4gLQo+ICAJ cmV0dXJuIDA7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVzZXJ2ZV9ub2RlKTsKPiAg Cj4gIC8qKgo+IC0gKiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyAtIHJhbmdl ZCBzZWFyY2ggZm9yIHNwYWNlIGFuZCBpbnNlcnQgQG5vZGUKPiArICogZHJtX21tX2luc2VydF9u b2RlX2luX3JhbmdlIC0gcmFuZ2VkIHNlYXJjaCBmb3Igc3BhY2UgYW5kIGluc2VydCBAbm9kZQo+ ICAgKiBAbW06IGRybV9tbSB0byBhbGxvY2F0ZSBmcm9tCj4gICAqIEBub2RlOiBwcmVhbGxvY2F0 ZSBub2RlIHRvIGluc2VydAo+ICAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgo+ICAg KiBAYWxpZ25tZW50OiBhbGlnbm1lbnQgb2YgdGhlIGFsbG9jYXRpb24KPiAgICogQGNvbG9yOiBv cGFxdWUgdGFnIHZhbHVlIHRvIHVzZSBmb3IgdGhpcyBub2RlCj4gLSAqIEBzdGFydDogc3RhcnQg b2YgdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoaXMgbm9kZQo+IC0gKiBAZW5kOiBlbmQgb2YgdGhl IGFsbG93ZWQgcmFuZ2UgZm9yIHRoaXMgbm9kZQo+IC0gKiBAc2ZsYWdzOiBmbGFncyB0byBmaW5l LXR1bmUgdGhlIGFsbG9jYXRpb24gc2VhcmNoCj4gLSAqIEBhZmxhZ3M6IGZsYWdzIHRvIGZpbmUt dHVuZSB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvcgo+ICsgKiBAcmFuZ2Vfc3RhcnQ6IHN0YXJ0IG9m IHRoZSBhbGxvd2VkIHJhbmdlIGZvciB0aGlzIG5vZGUKPiArICogQHJhbmdlX2VuZDogZW5kIG9m IHRoZSBhbGxvd2VkIHJhbmdlIGZvciB0aGlzIG5vZGUKPiArICogQG1vZGU6IGZpbmUtdHVuZSB0 aGUgYWxsb2NhdGlvbiBzZWFyY2ggYW5kIHBsYWNlbWVudAo+ICAgKgo+ICAgKiBUaGUgcHJlYWxs b2NhdGVkIEBub2RlIG11c3QgYmUgY2xlYXJlZCB0byAwLgo+ICAgKgo+ICAgKiBSZXR1cm5zOgo+ ICAgKiAwIG9uIHN1Y2Nlc3MsIC1FTk9TUEMgaWYgdGhlcmUncyBubyBzdWl0YWJsZSBob2xlLgo+ ICAgKi8KPiAtaW50IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKHN0cnVjdCBk cm1fbW0gKm1tLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsCj4gLQkJCQkJdTY0IHNpemUsIHU2 NCBhbGlnbm1lbnQsCj4gLQkJCQkJdW5zaWduZWQgbG9uZyBjb2xvciwKPiAtCQkJCQl1NjQgc3Rh cnQsIHU2NCBlbmQsCj4gLQkJCQkJZW51bSBkcm1fbW1fc2VhcmNoX2ZsYWdzIHNmbGFncywKPiAt CQkJCQllbnVtIGRybV9tbV9hbGxvY2F0b3JfZmxhZ3MgYWZsYWdzKQo+ICtpbnQgZHJtX21tX2lu c2VydF9ub2RlX2luX3JhbmdlKHN0cnVjdCBkcm1fbW0gKiBjb25zdCBtbSwKPiArCQkJCXN0cnVj dCBkcm1fbW1fbm9kZSAqIGNvbnN0IG5vZGUsCj4gKwkJCQl1NjQgc2l6ZSwgdTY0IGFsaWdubWVu dCwKPiArCQkJCXVuc2lnbmVkIGxvbmcgY29sb3IsCj4gKwkJCQl1NjQgcmFuZ2Vfc3RhcnQsIHU2 NCByYW5nZV9lbmQsCj4gKwkJCQllbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlKQo+ICB7Cj4g LQlzdHJ1Y3QgZHJtX21tX25vZGUgKmhvbGVfbm9kZTsKPiArCXN0cnVjdCBkcm1fbW1fbm9kZSAq aG9sZTsKPiArCXU2NCByZW1haW5kZXJfbWFzazsKPiAgCj4gLQlpZiAoV0FSTl9PTihzaXplID09 IDApKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+ICsJRFJNX01NX0JVR19PTihyYW5nZV9zdGFydCA+ PSByYW5nZV9lbmQpOwo+ICAKPiAtCWhvbGVfbm9kZSA9IGRybV9tbV9zZWFyY2hfZnJlZV9pbl9y YW5nZV9nZW5lcmljKG1tLAo+IC0JCQkJCQkJc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKPiAtCQkJ CQkJCXN0YXJ0LCBlbmQsIHNmbGFncyk7Cj4gLQlpZiAoIWhvbGVfbm9kZSkKPiArCWlmICh1bmxp a2VseShzaXplID09IDAgfHwgcmFuZ2VfZW5kIC0gcmFuZ2Vfc3RhcnQgPCBzaXplKSkKPiAgCQly ZXR1cm4gLUVOT1NQQzsKPiAgCj4gLQlkcm1fbW1faW5zZXJ0X2hlbHBlcihob2xlX25vZGUsIG5v ZGUsCj4gLQkJCSAgICAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKPiAtCQkJICAgICBzdGFydCwg ZW5kLCBhZmxhZ3MpOwo+IC0JcmV0dXJuIDA7Cj4gKwlpZiAoYWxpZ25tZW50IDw9IDEpCj4gKwkJ YWxpZ25tZW50ID0gMDsKPiArCj4gKwlyZW1haW5kZXJfbWFzayA9IGlzX3Bvd2VyX29mXzIoYWxp Z25tZW50KSA/IGFsaWdubWVudCAtIDEgOiAwOwo+ICsJZm9yIChob2xlID0gZmlyc3RfaG9sZSht bSwgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwgc2l6ZSwgbW9kZSk7IGhvbGU7Cj4gKwkgICAgIGhv bGUgPSBuZXh0X2hvbGUobW0sIGhvbGUsIG1vZGUpKSB7Cj4gKwkJdTY0IGhvbGVfc3RhcnQgPSBf X2RybV9tbV9ob2xlX25vZGVfc3RhcnQoaG9sZSk7Cj4gKwkJdTY0IGhvbGVfZW5kID0gaG9sZV9z dGFydCArIGhvbGUtPmhvbGVfc2l6ZTsKPiArCQl1NjQgYWRqX3N0YXJ0LCBhZGpfZW5kOwo+ICsJ CXU2NCBjb2xfc3RhcnQsIGNvbF9lbmQ7Cj4gKwo+ICsJCWlmIChtb2RlID09IERSTV9NTV9JTlNF UlRfTE9XICYmIGhvbGVfc3RhcnQgPj0gcmFuZ2VfZW5kKQo+ICsJCQlicmVhazsKPiArCj4gKwkJ aWYgKG1vZGUgPT0gRFJNX01NX0lOU0VSVF9ISUdIICYmIGhvbGVfZW5kIDw9IHJhbmdlX3N0YXJ0 KQo+ICsJCQlicmVhazsKPiArCj4gKwkJY29sX3N0YXJ0ID0gaG9sZV9zdGFydDsKPiArCQljb2xf ZW5kID0gaG9sZV9lbmQ7Cj4gKwkJaWYgKG1tLT5jb2xvcl9hZGp1c3QpCj4gKwkJCW1tLT5jb2xv cl9hZGp1c3QoaG9sZSwgY29sb3IsICZjb2xfc3RhcnQsICZjb2xfZW5kKTsKPiArCj4gKwkJYWRq X3N0YXJ0ID0gbWF4KGNvbF9zdGFydCwgcmFuZ2Vfc3RhcnQpOwo+ICsJCWFkal9lbmQgPSBtaW4o Y29sX2VuZCwgcmFuZ2VfZW5kKTsKPiArCj4gKwkJaWYgKGFkal9lbmQgPD0gYWRqX3N0YXJ0IHx8 IGFkal9lbmQgLSBhZGpfc3RhcnQgPCBzaXplKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYg KG1vZGUgPT0gRFJNX01NX0lOU0VSVF9ISUdIKQo+ICsJCQlhZGpfc3RhcnQgPSBhZGpfZW5kIC0g c2l6ZTsKPiArCj4gKwkJaWYgKGFsaWdubWVudCkgewo+ICsJCQl1NjQgcmVtOwo+ICsKPiArCQkJ aWYgKGxpa2VseShyZW1haW5kZXJfbWFzaykpCj4gKwkJCQlyZW0gPSBhZGpfc3RhcnQgJiByZW1h aW5kZXJfbWFzazsKPiArCQkJZWxzZQo+ICsJCQkJZGl2NjRfdTY0X3JlbShhZGpfc3RhcnQsIGFs aWdubWVudCwgJnJlbSk7Cj4gKwkJCWlmIChyZW0pIHsKPiArCQkJCWFkal9zdGFydCAtPSByZW07 Cj4gKwkJCQlpZiAobW9kZSAhPSBEUk1fTU1fSU5TRVJUX0hJR0gpCj4gKwkJCQkJYWRqX3N0YXJ0 ICs9IGFsaWdubWVudDsKPiArCj4gKwkJCQlpZiAoYWRqX3N0YXJ0IDwgbWF4KGNvbF9zdGFydCwg cmFuZ2Vfc3RhcnQpIHx8Cj4gKwkJCQkgICAgbWluKGNvbF9lbmQsIHJhbmdlX2VuZCkgLSBhZGpf c3RhcnQgPCBzaXplKQo+ICsJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJCWlmIChhZGpfZW5kIDw9 IGFkal9zdGFydCB8fAo+ICsJCQkJICAgIGFkal9lbmQgLSBhZGpfc3RhcnQgPCBzaXplKQo+ICsJ CQkJCWNvbnRpbnVlOwo+ICsJCQl9Cj4gKwkJfQo+ICsKPiArCQlub2RlLT5tbSA9IG1tOwo+ICsJ CW5vZGUtPnNpemUgPSBzaXplOwo+ICsJCW5vZGUtPnN0YXJ0ID0gYWRqX3N0YXJ0Owo+ICsJCW5v ZGUtPmNvbG9yID0gY29sb3I7Cj4gKwkJbm9kZS0+aG9sZV9zaXplID0gMDsKPiArCj4gKwkJbGlz dF9hZGQoJm5vZGUtPm5vZGVfbGlzdCwgJmhvbGUtPm5vZGVfbGlzdCk7Cj4gKwkJZHJtX21tX2lu dGVydmFsX3RyZWVfYWRkX25vZGUoaG9sZSwgbm9kZSk7Cj4gKwkJbm9kZS0+YWxsb2NhdGVkID0g dHJ1ZTsKPiArCj4gKwkJcm1faG9sZShob2xlKTsKPiArCQlpZiAoYWRqX3N0YXJ0ID4gaG9sZV9z dGFydCkKPiArCQkJYWRkX2hvbGUoaG9sZSk7Cj4gKwkJaWYgKGFkal9zdGFydCArIHNpemUgPCBo b2xlX2VuZCkKPiArCQkJYWRkX2hvbGUobm9kZSk7Cj4gKwo+ICsJCXNhdmVfc3RhY2sobm9kZSk7 Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC1FTk9TUEM7Cj4gIH0KPiAtRVhQ T1JUX1NZTUJPTChkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyk7Cj4gK0VYUE9S VF9TWU1CT0woZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKTsKPiAgCj4gIC8qKgo+ICAgKiBk cm1fbW1fcmVtb3ZlX25vZGUgLSBSZW1vdmUgYSBtZW1vcnkgbm9kZSBmcm9tIHRoZSBhbGxvY2F0 b3IuCj4gQEAgLTQyMSw5MiArNTQ2LDIwIEBAIHZvaWQgZHJtX21tX3JlbW92ZV9ub2RlKHN0cnVj dCBkcm1fbW1fbm9kZSAqbm9kZSkKPiAgCURSTV9NTV9CVUdfT04oIW5vZGUtPmFsbG9jYXRlZCk7 Cj4gIAlEUk1fTU1fQlVHX09OKG5vZGUtPnNjYW5uZWRfYmxvY2spOwo+ICAKPiAtCXByZXZfbm9k ZSA9Cj4gLQkgICAgbGlzdF9lbnRyeShub2RlLT5ub2RlX2xpc3QucHJldiwgc3RydWN0IGRybV9t bV9ub2RlLCBub2RlX2xpc3QpOwo+IC0KPiAtCWlmIChkcm1fbW1faG9sZV9mb2xsb3dzKG5vZGUp KSB7Cj4gLQkJRFJNX01NX0JVR19PTihfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQobm9kZSkgPT0K PiAtCQkJICAgICAgX19kcm1fbW1faG9sZV9ub2RlX2VuZChub2RlKSk7Cj4gLQkJbGlzdF9kZWwo Jm5vZGUtPmhvbGVfc3RhY2spOwo+IC0JfSBlbHNlIHsKPiAtCQlEUk1fTU1fQlVHX09OKF9fZHJt X21tX2hvbGVfbm9kZV9zdGFydChub2RlKSAhPQo+IC0JCQkgICAgICBfX2RybV9tbV9ob2xlX25v ZGVfZW5kKG5vZGUpKTsKPiAtCX0KPiArCXByZXZfbm9kZSA9IGxpc3RfcHJldl9lbnRyeShub2Rl LCBub2RlX2xpc3QpOwo+ICAKPiAtCWlmICghZHJtX21tX2hvbGVfZm9sbG93cyhwcmV2X25vZGUp KSB7Cj4gLQkJcHJldl9ub2RlLT5ob2xlX2ZvbGxvd3MgPSAxOwo+IC0JCWxpc3RfYWRkKCZwcmV2 X25vZGUtPmhvbGVfc3RhY2ssICZtbS0+aG9sZV9zdGFjayk7Cj4gLQl9IGVsc2UKPiAtCQlsaXN0 X21vdmUoJnByZXZfbm9kZS0+aG9sZV9zdGFjaywgJm1tLT5ob2xlX3N0YWNrKTsKPiArCWlmIChk cm1fbW1faG9sZV9mb2xsb3dzKG5vZGUpKQo+ICsJCXJtX2hvbGUobm9kZSk7Cj4gIAo+ICAJZHJt X21tX2ludGVydmFsX3RyZWVfcmVtb3ZlKG5vZGUsICZtbS0+aW50ZXJ2YWxfdHJlZSk7Cj4gIAls aXN0X2RlbCgmbm9kZS0+bm9kZV9saXN0KTsKPiAtCW5vZGUtPmFsbG9jYXRlZCA9IDA7Cj4gLX0K PiAtRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVtb3ZlX25vZGUpOwo+IC0KPiAtc3RhdGljIGludCBj aGVja19mcmVlX2hvbGUodTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgc2l6ZSwgdTY0IGFsaWdubWVu dCkKPiAtewo+IC0JaWYgKGVuZCAtIHN0YXJ0IDwgc2l6ZSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4g LQlpZiAoYWxpZ25tZW50KSB7Cj4gLQkJdTY0IHJlbTsKPiAtCj4gLQkJZGl2NjRfdTY0X3JlbShz dGFydCwgYWxpZ25tZW50LCAmcmVtKTsKPiAtCQlpZiAocmVtKQo+IC0JCQlzdGFydCArPSBhbGln bm1lbnQgLSByZW07Cj4gLQl9Cj4gKwlub2RlLT5hbGxvY2F0ZWQgPSBmYWxzZTsKPiAgCj4gLQly ZXR1cm4gZW5kID49IHN0YXJ0ICsgc2l6ZTsKPiAtfQo+IC0KPiAtc3RhdGljIHN0cnVjdCBkcm1f bW1fbm9kZSAqZHJtX21tX3NlYXJjaF9mcmVlX2luX3JhbmdlX2dlbmVyaWMoY29uc3Qgc3RydWN0 IGRybV9tbSAqbW0sCj4gLQkJCQkJCQl1NjQgc2l6ZSwKPiAtCQkJCQkJCXU2NCBhbGlnbm1lbnQs Cj4gLQkJCQkJCQl1bnNpZ25lZCBsb25nIGNvbG9yLAo+IC0JCQkJCQkJdTY0IHN0YXJ0LAo+IC0J CQkJCQkJdTY0IGVuZCwKPiAtCQkJCQkJCWVudW0gZHJtX21tX3NlYXJjaF9mbGFncyBmbGFncykK PiAtewo+IC0Jc3RydWN0IGRybV9tbV9ub2RlICplbnRyeTsKPiAtCXN0cnVjdCBkcm1fbW1fbm9k ZSAqYmVzdDsKPiAtCXU2NCBhZGpfc3RhcnQ7Cj4gLQl1NjQgYWRqX2VuZDsKPiAtCXU2NCBiZXN0 X3NpemU7Cj4gLQo+IC0JRFJNX01NX0JVR19PTihtbS0+c2Nhbl9hY3RpdmUpOwo+IC0KPiAtCWJl c3QgPSBOVUxMOwo+IC0JYmVzdF9zaXplID0gfjBVTDsKPiAtCj4gLQlfX2RybV9tbV9mb3JfZWFj aF9ob2xlKGVudHJ5LCBtbSwgYWRqX3N0YXJ0LCBhZGpfZW5kLAo+IC0JCQkgICAgICAgZmxhZ3Mg JiBEUk1fTU1fU0VBUkNIX0JFTE9XKSB7Cj4gLQkJdTY0IGhvbGVfc2l6ZSA9IGFkal9lbmQgLSBh ZGpfc3RhcnQ7Cj4gLQo+IC0JCWlmIChtbS0+Y29sb3JfYWRqdXN0KSB7Cj4gLQkJCW1tLT5jb2xv cl9hZGp1c3QoZW50cnksIGNvbG9yLCAmYWRqX3N0YXJ0LCAmYWRqX2VuZCk7Cj4gLQkJCWlmIChh ZGpfZW5kIDw9IGFkal9zdGFydCkKPiAtCQkJCWNvbnRpbnVlOwo+IC0JCX0KPiAtCj4gLQkJYWRq X3N0YXJ0ID0gbWF4KGFkal9zdGFydCwgc3RhcnQpOwo+IC0JCWFkal9lbmQgPSBtaW4oYWRqX2Vu ZCwgZW5kKTsKPiAtCj4gLQkJaWYgKCFjaGVja19mcmVlX2hvbGUoYWRqX3N0YXJ0LCBhZGpfZW5k LCBzaXplLCBhbGlnbm1lbnQpKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKCEoZmxhZ3Mg JiBEUk1fTU1fU0VBUkNIX0JFU1QpKQo+IC0JCQlyZXR1cm4gZW50cnk7Cj4gLQo+IC0JCWlmICho b2xlX3NpemUgPCBiZXN0X3NpemUpIHsKPiAtCQkJYmVzdCA9IGVudHJ5Owo+IC0JCQliZXN0X3Np emUgPSBob2xlX3NpemU7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiBiZXN0Owo+ICsJaWYg KGRybV9tbV9ob2xlX2ZvbGxvd3MocHJldl9ub2RlKSkKPiArCQlybV9ob2xlKHByZXZfbm9kZSk7 Cj4gKwlhZGRfaG9sZShwcmV2X25vZGUpOwo+ICB9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX21tX3Jl bW92ZV9ub2RlKTsKPiAgCj4gIC8qKgo+ICAgKiBkcm1fbW1fcmVwbGFjZV9ub2RlIC0gbW92ZSBh biBhbGxvY2F0aW9uIGZyb20gQG9sZCB0byBAbmV3Cj4gQEAgLTUyMSwxOCArNTc0LDIzIEBAIHZv aWQgZHJtX21tX3JlcGxhY2Vfbm9kZShzdHJ1Y3QgZHJtX21tX25vZGUgKm9sZCwgc3RydWN0IGRy bV9tbV9ub2RlICpuZXcpCj4gIHsKPiAgCURSTV9NTV9CVUdfT04oIW9sZC0+YWxsb2NhdGVkKTsK PiAgCj4gKwkqbmV3ID0gKm9sZDsKPiArCj4gIAlsaXN0X3JlcGxhY2UoJm9sZC0+bm9kZV9saXN0 LCAmbmV3LT5ub2RlX2xpc3QpOwo+IC0JbGlzdF9yZXBsYWNlKCZvbGQtPmhvbGVfc3RhY2ssICZu ZXctPmhvbGVfc3RhY2spOwo+ICAJcmJfcmVwbGFjZV9ub2RlKCZvbGQtPnJiLCAmbmV3LT5yYiwg Jm9sZC0+bW0tPmludGVydmFsX3RyZWUpOwo+IC0JbmV3LT5ob2xlX2ZvbGxvd3MgPSBvbGQtPmhv bGVfZm9sbG93czsKPiAtCW5ldy0+bW0gPSBvbGQtPm1tOwo+IC0JbmV3LT5zdGFydCA9IG9sZC0+ c3RhcnQ7Cj4gLQluZXctPnNpemUgPSBvbGQtPnNpemU7Cj4gLQluZXctPmNvbG9yID0gb2xkLT5j b2xvcjsKPiAtCW5ldy0+X19zdWJ0cmVlX2xhc3QgPSBvbGQtPl9fc3VidHJlZV9sYXN0Owo+IC0K PiAtCW9sZC0+YWxsb2NhdGVkID0gMDsKPiAtCW5ldy0+YWxsb2NhdGVkID0gMTsKPiArCj4gKwlp ZiAoZHJtX21tX2hvbGVfZm9sbG93cyhvbGQpKSB7Cj4gKwkJbGlzdF9yZXBsYWNlKCZvbGQtPmhv bGVfc3RhY2ssICZuZXctPmhvbGVfc3RhY2spOwo+ICsJCXJiX3JlcGxhY2Vfbm9kZSgmb2xkLT5y Yl9ob2xlX3NpemUsCj4gKwkJCQkmbmV3LT5yYl9ob2xlX3NpemUsCj4gKwkJCQkmb2xkLT5tbS0+ aG9sZXNfc2l6ZSk7Cj4gKwkJcmJfcmVwbGFjZV9ub2RlKCZvbGQtPnJiX2hvbGVfYWRkciwKPiAr CQkJCSZuZXctPnJiX2hvbGVfYWRkciwKPiArCQkJCSZvbGQtPm1tLT5ob2xlc19hZGRyKTsKPiAr CX0KPiArCj4gKwlvbGQtPmFsbG9jYXRlZCA9IGZhbHNlOwo+ICsJbmV3LT5hbGxvY2F0ZWQgPSB0 cnVlOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX21tX3JlcGxhY2Vfbm9kZSk7Cj4gIAo+IEBA IC01NzcsNyArNjM1LDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVwbGFjZV9ub2RlKTsKPiAg ICogQGNvbG9yOiBvcGFxdWUgdGFnIHZhbHVlIHRvIHVzZSBmb3IgdGhlIGFsbG9jYXRpb24KPiAg ICogQHN0YXJ0OiBzdGFydCBvZiB0aGUgYWxsb3dlZCByYW5nZSBmb3IgdGhlIGFsbG9jYXRpb24K PiAgICogQGVuZDogZW5kIG9mIHRoZSBhbGxvd2VkIHJhbmdlIGZvciB0aGUgYWxsb2NhdGlvbgo+ IC0gKiBAZmxhZ3M6IGZsYWdzIHRvIHNwZWNpZnkgaG93IHRoZSBhbGxvY2F0aW9uIHdpbGwgYmUg cGVyZm9ybWVkIGFmdGVyd2FyZHMKPiArICogQG1vZGU6IGZpbmUtdHVuZSB0aGUgYWxsb2NhdGlv biBzZWFyY2ggYW5kIHBsYWNlbWVudAo+ICAgKgo+ICAgKiBUaGlzIHNpbXBseSBzZXRzIHVwIHRo ZSBzY2FubmluZyByb3V0aW5lcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGVzaXJlZAo+ ICAgKiBob2xlLgo+IEBAIC01OTMsNyArNjUxLDcgQEAgdm9pZCBkcm1fbW1fc2Nhbl9pbml0X3dp dGhfcmFuZ2Uoc3RydWN0IGRybV9tbV9zY2FuICpzY2FuLAo+ICAJCQkJIHVuc2lnbmVkIGxvbmcg Y29sb3IsCj4gIAkJCQkgdTY0IHN0YXJ0LAo+ICAJCQkJIHU2NCBlbmQsCj4gLQkJCQkgdW5zaWdu ZWQgaW50IGZsYWdzKQo+ICsJCQkJIGVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUpCj4gIHsK PiAgCURSTV9NTV9CVUdfT04oc3RhcnQgPj0gZW5kKTsKPiAgCURSTV9NTV9CVUdfT04oIXNpemUg fHwgc2l6ZSA+IGVuZCAtIHN0YXJ0KTsKPiBAQCAtNjA4LDcgKzY2Niw3IEBAIHZvaWQgZHJtX21t X3NjYW5faW5pdF93aXRoX3JhbmdlKHN0cnVjdCBkcm1fbW1fc2NhbiAqc2NhbiwKPiAgCXNjYW4t PmFsaWdubWVudCA9IGFsaWdubWVudDsKPiAgCXNjYW4tPnJlbWFpbmRlcl9tYXNrID0gaXNfcG93 ZXJfb2ZfMihhbGlnbm1lbnQpID8gYWxpZ25tZW50IC0gMSA6IDA7Cj4gIAlzY2FuLT5zaXplID0g c2l6ZTsKPiAtCXNjYW4tPmZsYWdzID0gZmxhZ3M7Cj4gKwlzY2FuLT5tb2RlID0gbW9kZTsKPiAg Cj4gIAlEUk1fTU1fQlVHX09OKGVuZCA8PSBzdGFydCk7Cj4gIAlzY2FuLT5yYW5nZV9zdGFydCA9 IHN0YXJ0Owo+IEBAIC02NjcsNyArNzI1LDcgQEAgYm9vbCBkcm1fbW1fc2Nhbl9hZGRfYmxvY2so c3RydWN0IGRybV9tbV9zY2FuICpzY2FuLAo+ICAJaWYgKGFkal9lbmQgPD0gYWRqX3N0YXJ0IHx8 IGFkal9lbmQgLSBhZGpfc3RhcnQgPCBzY2FuLT5zaXplKQo+ICAJCXJldHVybiBmYWxzZTsKPiAg Cj4gLQlpZiAoc2Nhbi0+ZmxhZ3MgPT0gRFJNX01NX0NSRUFURV9UT1ApCj4gKwlpZiAoc2Nhbi0+ bW9kZSA9PSBEUk1fTU1fSU5TRVJUX0hJR0gpCj4gIAkJYWRqX3N0YXJ0ID0gYWRqX2VuZCAtIHNj YW4tPnNpemU7Cj4gIAo+ICAJaWYgKHNjYW4tPmFsaWdubWVudCkgewo+IEBAIC02NzksNyArNzM3 LDcgQEAgYm9vbCBkcm1fbW1fc2Nhbl9hZGRfYmxvY2soc3RydWN0IGRybV9tbV9zY2FuICpzY2Fu LAo+ICAJCQlkaXY2NF91NjRfcmVtKGFkal9zdGFydCwgc2Nhbi0+YWxpZ25tZW50LCAmcmVtKTsK PiAgCQlpZiAocmVtKSB7Cj4gIAkJCWFkal9zdGFydCAtPSByZW07Cj4gLQkJCWlmIChzY2FuLT5m bGFncyAhPSBEUk1fTU1fQ1JFQVRFX1RPUCkKPiArCQkJaWYgKHNjYW4tPm1vZGUgIT0gRFJNX01N X0lOU0VSVF9ISUdIKQo+ICAJCQkJYWRqX3N0YXJ0ICs9IHNjYW4tPmFsaWdubWVudDsKPiAgCQkJ aWYgKGFkal9zdGFydCA8IG1heChjb2xfc3RhcnQsIHNjYW4tPnJhbmdlX3N0YXJ0KSB8fAo+ICAJ CQkgICAgbWluKGNvbF9lbmQsIHNjYW4tPnJhbmdlX2VuZCkgLSBhZGpfc3RhcnQgPCBzY2FuLT5z aXplKQo+IEBAIC03NzUsNyArODMzLDcgQEAgc3RydWN0IGRybV9tbV9ub2RlICpkcm1fbW1fc2Nh bl9jb2xvcl9ldmljdChzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4pCj4gIAo+ICAJaG9sZSA9IGxp c3RfZmlyc3RfZW50cnkoJm1tLT5ob2xlX3N0YWNrLCB0eXBlb2YoKmhvbGUpLCBob2xlX3N0YWNr KTsKPiAgCWhvbGVfc3RhcnQgPSBfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQoaG9sZSk7Cj4gLQlo b2xlX2VuZCA9IF9fZHJtX21tX2hvbGVfbm9kZV9lbmQoaG9sZSk7Cj4gKwlob2xlX2VuZCA9IGhv bGVfc3RhcnQgKyBob2xlLT5ob2xlX3NpemU7Cj4gIAo+ICAJRFJNX01NX0JVR19PTihob2xlX3N0 YXJ0ID4gc2Nhbi0+aGl0X3N0YXJ0KTsKPiAgCURSTV9NTV9CVUdfT04oaG9sZV9lbmQgPCBzY2Fu LT5oaXRfZW5kKTsKPiBAQCAtODAyLDIxICs4NjAsMjIgQEAgdm9pZCBkcm1fbW1faW5pdChzdHJ1 Y3QgZHJtX21tICptbSwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSkKPiAgewo+ICAJRFJNX01NX0JVR19P TihzdGFydCArIHNpemUgPD0gc3RhcnQpOwo+ICAKPiArCW1tLT5jb2xvcl9hZGp1c3QgPSBOVUxM Owo+ICsKPiAgCUlOSVRfTElTVF9IRUFEKCZtbS0+aG9sZV9zdGFjayk7Cj4gLQltbS0+c2Nhbl9h Y3RpdmUgPSAwOwo+ICsJbW0tPmludGVydmFsX3RyZWUgPSBSQl9ST09UOwo+ICsJbW0tPmhvbGVz X3NpemUgPSBSQl9ST09UOwo+ICsJbW0tPmhvbGVzX2FkZHIgPSBSQl9ST09UOwo+ICAKPiAgCS8q IENsZXZlciB0cmljayB0byBhdm9pZCBhIHNwZWNpYWwgY2FzZSBpbiB0aGUgZnJlZSBob2xlIHRy YWNraW5nLiAqLwo+ICAJSU5JVF9MSVNUX0hFQUQoJm1tLT5oZWFkX25vZGUubm9kZV9saXN0KTsK PiAtCW1tLT5oZWFkX25vZGUuYWxsb2NhdGVkID0gMDsKPiAtCW1tLT5oZWFkX25vZGUuaG9sZV9m b2xsb3dzID0gMTsKPiArCW1tLT5oZWFkX25vZGUuYWxsb2NhdGVkID0gZmFsc2U7Cj4gIAltbS0+ aGVhZF9ub2RlLm1tID0gbW07Cj4gIAltbS0+aGVhZF9ub2RlLnN0YXJ0ID0gc3RhcnQgKyBzaXpl Owo+IC0JbW0tPmhlYWRfbm9kZS5zaXplID0gc3RhcnQgLSBtbS0+aGVhZF9ub2RlLnN0YXJ0Owo+ IC0JbGlzdF9hZGRfdGFpbCgmbW0tPmhlYWRfbm9kZS5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3Rh Y2spOwo+ICsJbW0tPmhlYWRfbm9kZS5zaXplID0gLXNpemU7Cj4gKwlhZGRfaG9sZSgmbW0tPmhl YWRfbm9kZSk7Cj4gIAo+IC0JbW0tPmludGVydmFsX3RyZWUgPSBSQl9ST09UOwo+IC0KPiAtCW1t LT5jb2xvcl9hZGp1c3QgPSBOVUxMOwo+ICsJbW0tPnNjYW5fYWN0aXZlID0gMDsKPiAgfQo+ICBF WFBPUlRfU1lNQk9MKGRybV9tbV9pbml0KTsKPiAgCj4gQEAgLTgzNywyMCArODk2LDE3IEBAIEVY UE9SVF9TWU1CT0woZHJtX21tX3Rha2Vkb3duKTsKPiAgCj4gIHN0YXRpYyB1NjQgZHJtX21tX2R1 bXBfaG9sZShzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAsIGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAq ZW50cnkpCj4gIHsKPiAtCXU2NCBob2xlX3N0YXJ0LCBob2xlX2VuZCwgaG9sZV9zaXplOwo+IC0K PiAtCWlmIChlbnRyeS0+aG9sZV9mb2xsb3dzKSB7Cj4gLQkJaG9sZV9zdGFydCA9IGRybV9tbV9o b2xlX25vZGVfc3RhcnQoZW50cnkpOwo+IC0JCWhvbGVfZW5kID0gZHJtX21tX2hvbGVfbm9kZV9l bmQoZW50cnkpOwo+IC0JCWhvbGVfc2l6ZSA9IGhvbGVfZW5kIC0gaG9sZV9zdGFydDsKPiAtCQlk cm1fcHJpbnRmKHAsICIlIzAxOGxseC0lIzAxOGxseDogJWxsdTogZnJlZVxuIiwgaG9sZV9zdGFy dCwKPiAtCQkJICAgaG9sZV9lbmQsIGhvbGVfc2l6ZSk7Cj4gLQkJcmV0dXJuIGhvbGVfc2l6ZTsK PiArCXU2NCBzdGFydCwgc2l6ZTsKPiArCj4gKwlzaXplID0gZW50cnktPmhvbGVfc2l6ZTsKPiAr CWlmIChzaXplKSB7Cj4gKwkJc3RhcnQgPSBkcm1fbW1faG9sZV9ub2RlX3N0YXJ0KGVudHJ5KTsK PiArCQlkcm1fcHJpbnRmKHAsICIlIzAxOGxseC0lIzAxOGxseDogJWxsdTogZnJlZVxuIiwKPiAr CQkJICAgc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgc2l6ZSk7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIDA7 Cj4gKwlyZXR1cm4gc2l6ZTsKPiAgfQo+IC0KPiAgLyoqCj4gICAqIGRybV9tbV9wcmludCAtIHBy aW50IGFsbG9jYXRvciBzdGF0ZQo+ICAgKiBAbW06IGRybV9tbSBhbGxvY2F0b3IgdG8gcHJpbnQK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV92bWFfbWFuYWdlci5jIGIvZHJpdmVy cy9ncHUvZHJtL2RybV92bWFfbWFuYWdlci5jCj4gaW5kZXggMjBjYzMzZDFiZmMxLi5kOTEwMGI1 NjUxOTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV92bWFfbWFuYWdlci5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bWFfbWFuYWdlci5jCj4gQEAgLTIxMiw4ICsyMTIs NyBAQCBpbnQgZHJtX3ZtYV9vZmZzZXRfYWRkKHN0cnVjdCBkcm1fdm1hX29mZnNldF9tYW5hZ2Vy ICptZ3IsCj4gIAkJZ290byBvdXRfdW5sb2NrOwo+ICAJfQo+ICAKPiAtCXJldCA9IGRybV9tbV9p bnNlcnRfbm9kZSgmbWdyLT52bV9hZGRyX3NwYWNlX21tLCAmbm9kZS0+dm1fbm9kZSwKPiAtCQkJ CSBwYWdlcywgMCwgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiArCXJldCA9IGRybV9tbV9pbnNl cnRfbm9kZSgmbWdyLT52bV9hZGRyX3NwYWNlX21tLCAmbm9kZS0+dm1fbm9kZSwgcGFnZXMpOwo+ ICAJaWYgKHJldCkKPiAgCQlnb3RvIG91dF91bmxvY2s7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2 aXYvZXRuYXZpdl9tbXUuYwo+IGluZGV4IGY1MDNhZjQ2MmRhZC4uMDA0NDU2NTM0ZTQ4IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5jCj4gQEAgLTEwNyw2ICsxMDcsNyBA QCBzdGF0aWMgaW50IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKHN0cnVjdCBldG5hdml2X2lvbW11 ICptbXUsCj4gIAkJCQkgICBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsIHNpemVfdCBzaXplKQo+ ICB7Cj4gIAlzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmcgKmZyZWUgPSBOVUxMOwo+ICsJZW51 bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSA9IERSTV9NTV9JTlNFUlRfTE9XOwo+ICAJaW50IHJl dDsKPiAgCj4gIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtbXUtPmxvY2spOwo+IEBAIC0xMTcsMTUg KzExOCwxMCBAQCBzdGF0aWMgaW50IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKHN0cnVjdCBldG5h dml2X2lvbW11ICptbXUsCj4gIAkJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICAJCWJvb2wgZm91 bmQ7Cj4gIAo+IC0JCS8qCj4gLQkJICogWFhYOiBUaGUgRFJNX01NX1NFQVJDSF9CRUxPVyBpcyBy ZWFsbHkgYSBoYWNrIHRvIHRyaWNrCj4gLQkJICogZHJtX21tIGludG8gZ2l2aW5nIG91dCBhIGxv dyBJT1ZBIGFmdGVyIGFkZHJlc3Mgc3BhY2UKPiAtCQkgKiByb2xsb3Zlci4gVGhpcyBuZWVkcyBh IHByb3BlciBmaXguCj4gLQkJICovCj4gIAkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3Jh bmdlKCZtbXUtPm1tLCBub2RlLAo+IC0JCQlzaXplLCAwLCBtbXUtPmxhc3RfaW92YSwgfjBVTCwK PiAtCQkJbW11LT5sYXN0X2lvdmEgPyBEUk1fTU1fU0VBUkNIX0RFRkFVTFQgOiBEUk1fTU1fU0VB UkNIX0JFTE9XKTsKPiAtCj4gKwkJCQkJCSAgc2l6ZSwgMCwgMCwKPiArCQkJCQkJICBtbXUtPmxh c3RfaW92YSwgVTY0X01BWCwKPiArCQkJCQkJICBtb2RlKTsKPiAgCQlpZiAocmV0ICE9IC1FTk9T UEMpCj4gIAkJCWJyZWFrOwo+ICAKPiBAQCAtMTQwLDcgKzEzNiw3IEBAIHN0YXRpYyBpbnQgZXRu YXZpdl9pb21tdV9maW5kX2lvdmEoc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKPiAgCQl9Cj4g IAo+ICAJCS8qIFRyeSB0byByZXRpcmUgc29tZSBlbnRyaWVzICovCj4gLQkJZHJtX21tX3NjYW5f aW5pdCgmc2NhbiwgJm1tdS0+bW0sIHNpemUsIDAsIDAsIDApOwo+ICsJCWRybV9tbV9zY2FuX2lu aXQoJnNjYW4sICZtbXUtPm1tLCBzaXplLCAwLCAwLCBtb2RlKTsKPiAgCj4gIAkJZm91bmQgPSAw Owo+ICAJCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKPiBAQCAtMTkyLDYgKzE4OCw4IEBAIHN0YXRp YyBpbnQgZXRuYXZpdl9pb21tdV9maW5kX2lvdmEoc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwK PiAgCQkJbGlzdF9kZWxfaW5pdCgmbS0+c2Nhbl9ub2RlKTsKPiAgCQl9Cj4gIAo+ICsJCW1vZGUg PSBEUk1fTU1fSU5TRVJUX0VWSUNUOwo+ICsKPiAgCQkvKgo+ICAJCSAqIFdlIHJlbW92ZWQgZW5v dWdoIG1hcHBpbmdzIHNvIHRoYXQgdGhlIG5ldyBhbGxvY2F0aW9uIHdpbGwKPiAgCQkgKiBzdWNj ZWVkLiAgRW5zdXJlIHRoYXQgdGhlIE1NVSB3aWxsIGJlIGZsdXNoZWQgYmVmb3JlIHRoZQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDgzOGY5Zjk3ODc4Ni4uNmM3YTgzYmJkMDY4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTY5LDEyICs2OSwxMCBAQCBpbnNlcnRf bWFwcGFibGVfbm9kZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0LAo+ICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsIHUzMiBzaXplKQo+ICB7Cj4gIAltZW1zZXQo bm9kZSwgMCwgc2l6ZW9mKCpub2RlKSk7Cj4gLQlyZXR1cm4gZHJtX21tX2luc2VydF9ub2RlX2lu X3JhbmdlX2dlbmVyaWMoJmdndHQtPmJhc2UubW0sIG5vZGUsCj4gLQkJCQkJCSAgIHNpemUsIDAs Cj4gLQkJCQkJCSAgIEk5MTVfQ09MT1JfVU5FVklDVEFCTEUsCj4gLQkJCQkJCSAgIDAsIGdndHQt Pm1hcHBhYmxlX2VuZCwKPiAtCQkJCQkJICAgRFJNX01NX1NFQVJDSF9ERUZBVUxULAo+IC0JCQkJ CQkgICBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQpOwo+ICsJcmV0dXJuIGRybV9tbV9pbnNlcnRfbm9k ZV9pbl9yYW5nZSgmZ2d0dC0+YmFzZS5tbSwgbm9kZSwKPiArCQkJCQkgICBzaXplLCAwLCBJOTE1 X0NPTE9SX1VORVZJQ1RBQkxFLAo+ICsJCQkJCSAgIDAsIGdndHQtPm1hcHBhYmxlX2VuZCwKPiAr CQkJCQkgICBEUk1fTU1fSU5TRVJUX0xPVyk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jCj4gaW5kZXggYTQzZTQ0ZTE4MDQyLi5jMTgx YjFiYjNkMmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZp Y3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0LmMKPiBAQCAt MTA5LDYgKzEwOSw3IEBAIGk5MTVfZ2VtX2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKPiAgCX0sICoqcGhhc2U7Cj4gIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYSwg Km5leHQ7Cj4gIAlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGU7Cj4gKwllbnVtIGRybV9tbV9pbnNl cnRfbW9kZSBtb2RlOwo+ICAJaW50IHJldDsKPiAgCj4gIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2 bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gQEAgLTEyNywxMCArMTI4LDE0IEBAIGk5MTVf Z2VtX2V2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCSAq IE9uIGVhY2ggbGlzdCwgdGhlIG9sZGVzdCBvYmplY3RzIGxpZSBhdCB0aGUgSEVBRCB3aXRoIHRo ZSBmcmVzaGVzdAo+ICAJICogb2JqZWN0IG9uIHRoZSBUQUlMLgo+ICAJICovCj4gKwltb2RlID0g RFJNX01NX0lOU0VSVF9CRVNUOwo+ICsJaWYgKGZsYWdzICYgUElOX0hJR0gpCj4gKwkJbW9kZSA9 IERSTV9NTV9JTlNFUlRfSElHSDsKPiArCWlmIChmbGFncyAmIFBJTl9NQVBQQUJMRSkKPiArCQlt b2RlID0gRFJNX01NX0lOU0VSVF9MT1c7Cj4gIAlkcm1fbW1fc2Nhbl9pbml0X3dpdGhfcmFuZ2Uo JnNjYW4sICZ2bS0+bW0sCj4gIAkJCQkgICAgbWluX3NpemUsIGFsaWdubWVudCwgY2FjaGVfbGV2 ZWwsCj4gLQkJCQkgICAgc3RhcnQsIGVuZCwKPiAtCQkJCSAgICBmbGFncyAmIFBJTl9ISUdIID8g RFJNX01NX0NSRUFURV9UT1AgOiAwKTsKPiArCQkJCSAgICBzdGFydCwgZW5kLCBtb2RlKTsKPiAg Cj4gIAkvKiBSZXRpcmUgYmVmb3JlIHdlIHNlYXJjaCB0aGUgYWN0aXZlIGxpc3QuIEFsdGhvdWdo IHdlIGhhdmUKPiAgCSAqIHJlYXNvbmFibGUgYWNjdXJhY3kgaW4gb3VyIHJldGlyZW1lbnQgbGlz dHMsIHdlIG1heSBoYXZlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZm ZXIuYwo+IGluZGV4IDkxYzIzOTMxOTlhMy4uYTQwYWRlNmQxYzE2IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+IEBAIC00MzcsMTIgKzQzNywxMSBA QCBzdGF0aWMgdm9pZCAqcmVsb2NfaW9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKPiAgCQkJCQkgICAgICAgUElOX01BUFBBQkxFIHwgUElOX05PTkJMT0NLKTsKPiAgCQlpZiAo SVNfRVJSKHZtYSkpIHsKPiAgCQkJbWVtc2V0KCZjYWNoZS0+bm9kZSwgMCwgc2l6ZW9mKGNhY2hl LT5ub2RlKSk7Cj4gLQkJCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmlj Cj4gKwkJCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZQo+ICAJCQkJKCZnZ3R0LT5i YXNlLm1tLCAmY2FjaGUtPm5vZGUsCj4gIAkJCQkgUEFHRV9TSVpFLCAwLCBJOTE1X0NPTE9SX1VO RVZJQ1RBQkxFLAo+ICAJCQkJIDAsIGdndHQtPm1hcHBhYmxlX2VuZCwKPiAtCQkJCSBEUk1fTU1f U0VBUkNIX0RFRkFVTFQsCj4gLQkJCQkgRFJNX01NX0NSRUFURV9ERUZBVUxUKTsKPiArCQkJCSBE Uk1fTU1fSU5TRVJUX0xPVyk7Cj4gIAkJCWlmIChyZXQpIC8qIG5vIGluYWN0aXZlIGFwZXJ0dXJl IHNwYWNlLCB1c2UgY3B1IHJlbG9jICovCj4gIAkJCQlyZXR1cm4gTlVMTDsKPiAgCQl9IGVsc2Ug ewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggMDQ4MDQwZWZjM2YwLi5i N2JjYjFlNjJjZTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0y NzQ4LDEyICsyNzQ4LDEwIEBAIGludCBpOTE1X2dlbV9pbml0X2dndHQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ICAJLyogUmVzZXJ2ZSBh IG1hcHBhYmxlIHNsb3QgZm9yIG91ciBsb2NrbGVzcyBlcnJvciBjYXB0dXJlICovCj4gLQlyZXQg PSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygmZ2d0dC0+YmFzZS5tbSwKPiAt CQkJCQkJICAmZ2d0dC0+ZXJyb3JfY2FwdHVyZSwKPiAtCQkJCQkJICBQQUdFX1NJWkUsIDAsCj4g LQkJCQkJCSAgSTkxNV9DT0xPUl9VTkVWSUNUQUJMRSwKPiAtCQkJCQkJICAwLCBnZ3R0LT5tYXBw YWJsZV9lbmQsCj4gLQkJCQkJCSAgMCwgMCk7Cj4gKwlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVf aW5fcmFuZ2UoJmdndHQtPmJhc2UubW0sICZnZ3R0LT5lcnJvcl9jYXB0dXJlLAo+ICsJCQkJCSAg UEFHRV9TSVpFLCAwLCBJOTE1X0NPTE9SX1VORVZJQ1RBQkxFLAo+ICsJCQkJCSAgMCwgZ2d0dC0+ bWFwcGFibGVfZW5kLAo+ICsJCQkJCSAgRFJNX01NX0lOU0VSVF9MT1cpOwo+ICAJaWYgKHJldCkK PiAgCQlyZXR1cm4gcmV0Owo+ICAKPiBAQCAtMzY2Myw3ICszNjYxLDcgQEAgaW50IGk5MTVfZ2Vt X2d0dF9pbnNlcnQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCXU2NCBzaXpl LCB1NjQgYWxpZ25tZW50LCB1bnNpZ25lZCBsb25nIGNvbG9yLAo+ICAJCQl1NjQgc3RhcnQsIHU2 NCBlbmQsIHVuc2lnbmVkIGludCBmbGFncykKPiAgewo+IC0JdTMyIHNlYXJjaF9mbGFnLCBhbGxv Y19mbGFnOwo+ICsJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZTsKPiAgCXU2NCBvZmZzZXQ7 Cj4gIAlpbnQgZXJyOwo+ICAKPiBAQCAtMzY4NCwxMyArMzY4MiwxMSBAQCBpbnQgaTkxNV9nZW1f Z3R0X2luc2VydChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCWlmICh1bmxpa2Vs eShyb3VuZF91cChzdGFydCwgYWxpZ25tZW50KSA+IHJvdW5kX2Rvd24oZW5kIC0gc2l6ZSwgYWxp Z25tZW50KSkpCj4gIAkJcmV0dXJuIC1FTk9TUEM7Cj4gIAo+IC0JaWYgKGZsYWdzICYgUElOX0hJ R0gpIHsKPiAtCQlzZWFyY2hfZmxhZyA9IERSTV9NTV9TRUFSQ0hfQkVMT1c7Cj4gLQkJYWxsb2Nf ZmxhZyA9IERSTV9NTV9DUkVBVEVfVE9QOwo+IC0JfSBlbHNlIHsKPiAtCQlzZWFyY2hfZmxhZyA9 IERSTV9NTV9TRUFSQ0hfREVGQVVMVDsKPiAtCQlhbGxvY19mbGFnID0gRFJNX01NX0NSRUFURV9E RUZBVUxUOwo+IC0JfQo+ICsJbW9kZSA9IERSTV9NTV9JTlNFUlRfQkVTVDsKPiArCWlmIChmbGFn cyAmIFBJTl9ISUdIKQo+ICsJCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0hJR0g7Cj4gKwlpZiAoZmxh Z3MgJiBQSU5fTUFQUEFCTEUpCj4gKwkJbW9kZSA9IERSTV9NTV9JTlNFUlRfTE9XOwo+ICAKPiAg CS8qIFdlIG9ubHkgYWxsb2NhdGUgaW4gUEFHRV9TSVpFL0dUVF9QQUdFX1NJWkUgKDQwOTYpIGNo dW5rcywKPiAgCSAqIHNvIHdlIGtub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIG1pbmltdW0gYWxp Z25tZW50IG9mIDQwOTYuCj4gQEAgLTM3MDIsMTAgKzM2OTgsOSBAQCBpbnQgaTkxNV9nZW1fZ3R0 X2luc2VydChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCWlmIChhbGlnbm1lbnQg PD0gSTkxNV9HVFRfTUlOX0FMSUdOTUVOVCkKPiAgCQlhbGlnbm1lbnQgPSAwOwo+ICAKPiAtCWVy ciA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKCZ2bS0+bW0sIG5vZGUsCj4g LQkJCQkJCSAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKPiAtCQkJCQkJICBzdGFydCwgZW5kLAo+ IC0JCQkJCQkgIHNlYXJjaF9mbGFnLCBhbGxvY19mbGFnKTsKPiArCWVyciA9IGRybV9tbV9pbnNl cnRfbm9kZV9pbl9yYW5nZSgmdm0tPm1tLCBub2RlLAo+ICsJCQkJCSAgc2l6ZSwgYWxpZ25tZW50 LCBjb2xvciwKPiArCQkJCQkgIHN0YXJ0LCBlbmQsIG1vZGUpOwo+ICAJaWYgKGVyciAhPSAtRU5P U1BDKQo+ICAJCXJldHVybiBlcnI7Cj4gIAo+IEBAIC0zNzQzLDkgKzM3MzgsNyBAQCBpbnQgaTkx NV9nZW1fZ3R0X2luc2VydChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCWlmIChl cnIpCj4gIAkJcmV0dXJuIGVycjsKPiAgCj4gLQlzZWFyY2hfZmxhZyA9IERSTV9NTV9TRUFSQ0hf REVGQVVMVDsKPiAtCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygm dm0tPm1tLCBub2RlLAo+IC0JCQkJCQkgICBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLAo+IC0JCQkJ CQkgICBzdGFydCwgZW5kLAo+IC0JCQkJCQkgICBzZWFyY2hfZmxhZywgYWxsb2NfZmxhZyk7Cj4g KwlyZXR1cm4gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZ2bS0+bW0sIG5vZGUsCj4gKwkJ CQkJICAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKPiArCQkJCQkgICBzdGFydCwgZW5kLCBEUk1f TU1fSU5TRVJUX0VWSUNUKTsKPiAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xl bi5jCj4gaW5kZXggY2JhMTJlZTkwY2JmLi44MmNhOGY0OWZlYzEgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+IEBAIC01NSw5ICs1NSw5IEBAIGludCBpOTE1X2dl bV9zdG9sZW5faW5zZXJ0X25vZGVfaW5fcmFuZ2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+ICAJCXJldHVybiAtRU5PREVWOwo+ICAKPiAgCW11dGV4X2xvY2soJmRldl9wcml2 LT5tbS5zdG9sZW5fbG9jayk7Cj4gLQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2Uo JmRldl9wcml2LT5tbS5zdG9sZW4sIG5vZGUsIHNpemUsCj4gLQkJCQkJICBhbGlnbm1lbnQsIHN0 YXJ0LCBlbmQsCj4gLQkJCQkJICBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ICsJcmV0ID0gZHJt X21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZkZXZfcHJpdi0+bW0uc3RvbGVuLCBub2RlLAo+ICsJ CQkJCSAgc2l6ZSwgYWxpZ25tZW50LCAwLAo+ICsJCQkJCSAgc3RhcnQsIGVuZCwgRFJNX01NX0lO U0VSVF9CRVNUKTsKPiAgCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPm1tLnN0b2xlbl9sb2NrKTsK PiAgCj4gIAlyZXR1cm4gcmV0Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21z bV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCj4gaW5kZXggODA5ODY3N2Ez OTE2Li5jM2I0M2Y0ZDRmMWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21f Z2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwo+IEBAIC01NCw4ICs1 NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqKmdldF9wYWdlc192cmFtKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqLAo+ICAJaWYgKCFwKQo+ICAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ ICAKPiAtCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmcHJpdi0+dnJhbS5tbSwgbXNtX29iai0+ dnJhbV9ub2RlLAo+IC0JCQlucGFnZXMsIDAsIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gKwly ZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJnByaXYtPnZyYW0ubW0sIG1zbV9vYmotPnZyYW1fbm9k ZSwgbnBhZ2VzKTsKPiAgCWlmIChyZXQpIHsKPiAgCQlkcm1fZnJlZV9sYXJnZShwKTsKPiAgCQly ZXR1cm4gRVJSX1BUUihyZXQpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21z bV9nZW1fdm1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fdm1hLmMKPiBpbmRleCBh MzExZDI2Y2NiMjEuLmI2NTRlY2E3NjM2YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9nZW1fdm1hLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fdm1h LmMKPiBAQCAtNDUsOCArNDUsNyBAQCBtc21fZ2VtX21hcF92bWEoc3RydWN0IG1zbV9nZW1fYWRk cmVzc19zcGFjZSAqYXNwYWNlLAo+ICAJaWYgKFdBUk5fT04oZHJtX21tX25vZGVfYWxsb2NhdGVk KCZ2bWEtPm5vZGUpKSkKPiAgCQlyZXR1cm4gMDsKPiAgCj4gLQlyZXQgPSBkcm1fbW1faW5zZXJ0 X25vZGUoJmFzcGFjZS0+bW0sICZ2bWEtPm5vZGUsIG5wYWdlcywKPiAtCQkJMCwgRFJNX01NX1NF QVJDSF9ERUZBVUxUKTsKPiArCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmYXNwYWNlLT5tbSwg JnZtYS0+bm9kZSwgbnBhZ2VzKTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fbW0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fbW0uYwo+IGluZGV4IDZkZjUzZTZjMTMw OC4uYmI1Yjc0ODBlMGI0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMv dGVzdC1kcm1fbW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1f bW0uYwo+IEBAIC0yMiwyMyArMjIsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtYXhfaXRlcmF0 aW9ucyA9IDgxOTI7Cj4gIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3ByaW1lID0gMTI4Owo+ICAK PiAgZW51bSB7Cj4gLQlERUZBVUxULAo+IC0JVE9QRE9XTiwKPiAgCUJFU1QsCj4gKwlCT1RUT01V UCwKPiArCVRPUERPV04sCj4gKwlFVklDVCwKPiAgfTsKPiAgCj4gIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgaW5zZXJ0X21vZGUgewo+ICAJY29uc3QgY2hhciAqbmFtZTsKPiAtCXVuc2lnbmVkIGludCBz ZWFyY2hfZmxhZ3M7Cj4gLQl1bnNpZ25lZCBpbnQgY3JlYXRlX2ZsYWdzOwo+ICsJZW51bSBkcm1f bW1faW5zZXJ0X21vZGUgbW9kZTsKPiAgfSBpbnNlcnRfbW9kZXNbXSA9IHsKPiAtCVtERUZBVUxU XSA9IHsgImRlZmF1bHQiLCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQsIERSTV9NTV9DUkVBVEVfREVG QVVMVCB9LAo+IC0JW1RPUERPV05dID0geyAidG9wLWRvd24iLCBEUk1fTU1fU0VBUkNIX0JFTE9X LCBEUk1fTU1fQ1JFQVRFX1RPUCB9LAo+IC0JW0JFU1RdID0geyAiYmVzdCIsIERSTV9NTV9TRUFS Q0hfQkVTVCwgRFJNX01NX0NSRUFURV9ERUZBVUxUIH0sCj4gKwlbQkVTVF0gPSB7ICJiZXN0Iiwg RFJNX01NX0lOU0VSVF9CRVNUIH0sCj4gKwlbQk9UVE9NVVBdID0geyAiYm90dG9tLXVwIiwgRFJN X01NX0lOU0VSVF9MT1cgfSwKPiArCVtUT1BET1dOXSA9IHsgInRvcC1kb3duIiwgRFJNX01NX0lO U0VSVF9ISUdIIH0sCj4gKwlbRVZJQ1RdID0geyAiZXZpY3QiLCBEUk1fTU1fSU5TRVJUX0VWSUNU IH0sCj4gIAl7fQo+ICB9LCBldmljdF9tb2Rlc1tdID0gewo+IC0JeyAiZGVmYXVsdCIsIERSTV9N TV9TRUFSQ0hfREVGQVVMVCwgRFJNX01NX0NSRUFURV9ERUZBVUxUIH0sCj4gLQl7ICJ0b3AtZG93 biIsIERSTV9NTV9TRUFSQ0hfQkVMT1csIERSTV9NTV9DUkVBVEVfVE9QIH0sCj4gKwl7ICJib3R0 b20tdXAiLCBEUk1fTU1fSU5TRVJUX0xPVyB9LAo+ICsJeyAidG9wLWRvd24iLCBEUk1fTU1fSU5T RVJUX0hJR0ggfSwKPiAgCXt9Cj4gIH07Cj4gIAo+IEBAIC01MjYsOCArNTI3LDcgQEAgc3RhdGlj IGJvb2wgZXhwZWN0X2luc2VydChzdHJ1Y3QgZHJtX21tICptbSwgc3RydWN0IGRybV9tbV9ub2Rl ICpub2RlLAo+ICAKPiAgCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljKG1tLCBub2Rl LAo+ICAJCQkJCSBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLAo+IC0JCQkJCSBtb2RlLT5zZWFyY2hf ZmxhZ3MsCj4gLQkJCQkJIG1vZGUtPmNyZWF0ZV9mbGFncyk7Cj4gKwkJCQkJIG1vZGUtPm1vZGUp Owo+ICAJaWYgKGVycikgewo+ICAJCXByX2VycigiaW5zZXJ0IChzaXplPSVsbHUsIGFsaWdubWVu dD0lbGx1LCBjb2xvcj0lbHUsIG1vZGU9JXMpIGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKPiAgCQkg ICAgICAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwgbW9kZS0+bmFtZSwgZXJyKTsKPiBAQCAtNTQ3 LDcgKzU0Nyw3IEBAIHN0YXRpYyBib29sIGV4cGVjdF9pbnNlcnRfZmFpbChzdHJ1Y3QgZHJtX21t ICptbSwgdTY0IHNpemUpCj4gIAlzdHJ1Y3QgZHJtX21tX25vZGUgdG1wID0ge307Cj4gIAlpbnQg ZXJyOwo+ICAKPiAtCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZShtbSwgJnRtcCwgc2l6ZSwgMCwg RFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiArCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZShtbSwg JnRtcCwgc2l6ZSk7Cj4gIAlpZiAobGlrZWx5KGVyciA9PSAtRU5PU1BDKSkKPiAgCQlyZXR1cm4g dHJ1ZTsKPiAgCj4gQEAgLTc1MywxMSArNzUzLDEwIEBAIHN0YXRpYyBib29sIGV4cGVjdF9pbnNl cnRfaW5fcmFuZ2Uoc3RydWN0IGRybV9tbSAqbW0sIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwK PiAgewo+ICAJaW50IGVycjsKPiAgCj4gLQllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFu Z2VfZ2VuZXJpYyhtbSwgbm9kZSwKPiAtCQkJCQkJICBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLAo+ IC0JCQkJCQkgIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQsCj4gLQkJCQkJCSAgbW9kZS0+c2VhcmNo X2ZsYWdzLAo+IC0JCQkJCQkgIG1vZGUtPmNyZWF0ZV9mbGFncyk7Cj4gKwllcnIgPSBkcm1fbW1f aW5zZXJ0X25vZGVfaW5fcmFuZ2UobW0sIG5vZGUsCj4gKwkJCQkJICBzaXplLCBhbGlnbm1lbnQs IGNvbG9yLAo+ICsJCQkJCSAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwKPiArCQkJCQkgIG1vZGUt Pm1vZGUpOwo+ICAJaWYgKGVycikgewo+ICAJCXByX2VycigiaW5zZXJ0IChzaXplPSVsbHUsIGFs aWdubWVudD0lbGx1LCBjb2xvcj0lbHUsIG1vZGU9JXMpIG50byByYW5nZSBbJWxseCwgJWxseF0g ZmFpbGVkIHdpdGggZXJyPSVkXG4iLAo+ICAJCSAgICAgICBzaXplLCBhbGlnbm1lbnQsIGNvbG9y LCBtb2RlLT5uYW1lLAo+IEBAIC03ODEsMTEgKzc4MCwxMCBAQCBzdGF0aWMgYm9vbCBleHBlY3Rf aW5zZXJ0X2luX3JhbmdlX2ZhaWwoc3RydWN0IGRybV9tbSAqbW0sCj4gIAlzdHJ1Y3QgZHJtX21t X25vZGUgdG1wID0ge307Cj4gIAlpbnQgZXJyOwo+ICAKPiAtCWVyciA9IGRybV9tbV9pbnNlcnRf bm9kZV9pbl9yYW5nZV9nZW5lcmljKG1tLCAmdG1wLAo+IC0JCQkJCQkgIHNpemUsIDAsIDAsCj4g LQkJCQkJCSAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwKPiAtCQkJCQkJICBEUk1fTU1fU0VBUkNI X0RFRkFVTFQsCj4gLQkJCQkJCSAgRFJNX01NX0NSRUFURV9ERUZBVUxUKTsKPiArCWVyciA9IGRy bV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZShtbSwgJnRtcCwKPiArCQkJCQkgIHNpemUsIDAsIDAs Cj4gKwkJCQkJICByYW5nZV9zdGFydCwgcmFuZ2VfZW5kLAo+ICsJCQkJCSAgMCk7Cj4gIAlpZiAo bGlrZWx5KGVyciA9PSAtRU5PU1BDKSkKPiAgCQlyZXR1cm4gdHJ1ZTsKPiAgCj4gQEAgLTEzMjQs NyArMTMyMiw3IEBAIHN0YXRpYyBpbnQgZXZpY3Rfc29tZXRoaW5nKHN0cnVjdCBkcm1fbW0gKm1t LAo+ICAJZHJtX21tX3NjYW5faW5pdF93aXRoX3JhbmdlKCZzY2FuLCBtbSwKPiAgCQkJCSAgICBz aXplLCBhbGlnbm1lbnQsIDAsCj4gIAkJCQkgICAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwKPiAt CQkJCSAgICBtb2RlLT5jcmVhdGVfZmxhZ3MpOwo+ICsJCQkJICAgIG1vZGUtPm1vZGUpOwo+ICAJ aWYgKCFldmljdF9ub2Rlcygmc2NhbiwKPiAgCQkJIG5vZGVzLCBvcmRlciwgY291bnQsIGZhbHNl LAo+ICAJCQkgJmV2aWN0X2xpc3QpKQo+IEBAIC0xMzMyLDggKzEzMzAsNyBAQCBzdGF0aWMgaW50 IGV2aWN0X3NvbWV0aGluZyhzdHJ1Y3QgZHJtX21tICptbSwKPiAgCj4gIAltZW1zZXQoJnRtcCwg MCwgc2l6ZW9mKHRtcCkpOwo+ICAJZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMobW0s ICZ0bXAsIHNpemUsIGFsaWdubWVudCwgMCwKPiAtCQkJCQkgbW9kZS0+c2VhcmNoX2ZsYWdzLAo+ IC0JCQkJCSBtb2RlLT5jcmVhdGVfZmxhZ3MpOwo+ICsJCQkJCSBEUk1fTU1fSU5TRVJUX0VWSUNU KTsKPiAgCWlmIChlcnIpIHsKPiAgCQlwcl9lcnIoIkZhaWxlZCB0byBpbnNlcnQgaW50byBldmlj dGlvbiBob2xlOiBzaXplPSVkLCBhbGlnbj0lZFxuIiwKPiAgCQkgICAgICAgc2l6ZSwgYWxpZ25t ZW50KTsKPiBAQCAtMTQwOCw4ICsxNDA1LDcgQEAgc3RhdGljIGludCBpZ3RfZXZpY3Qodm9pZCAq aWdub3JlZCkKPiAgCXJldCA9IC1FSU5WQUw7Cj4gIAlkcm1fbW1faW5pdCgmbW0sIDAsIHNpemUp Owo+ICAJZm9yIChuID0gMDsgbiA8IHNpemU7IG4rKykgewo+IC0JCWVyciA9IGRybV9tbV9pbnNl cnRfbm9kZSgmbW0sICZub2Rlc1tuXS5ub2RlLCAxLCAwLAo+IC0JCQkJCSBEUk1fTU1fU0VBUkNI X0RFRkFVTFQpOwo+ICsJCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZSgmbW0sICZub2Rlc1tuXS5u b2RlLCAxKTsKPiAgCQlpZiAoZXJyKSB7Cj4gIAkJCXByX2VycigiaW5zZXJ0IGZhaWxlZCwgc3Rl cCAlZFxuIiwgbik7Cj4gIAkJCXJldCA9IGVycjsKPiBAQCAtMTUxNyw4ICsxNTEzLDcgQEAgc3Rh dGljIGludCBpZ3RfZXZpY3RfcmFuZ2Uodm9pZCAqaWdub3JlZCkKPiAgCXJldCA9IC1FSU5WQUw7 Cj4gIAlkcm1fbW1faW5pdCgmbW0sIDAsIHNpemUpOwo+ICAJZm9yIChuID0gMDsgbiA8IHNpemU7 IG4rKykgewo+IC0JCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZSgmbW0sICZub2Rlc1tuXS5ub2Rl LCAxLCAwLAo+IC0JCQkJCSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOwo+ICsJCWVyciA9IGRybV9t bV9pbnNlcnRfbm9kZSgmbW0sICZub2Rlc1tuXS5ub2RlLCAxKTsKPiAgCQlpZiAoZXJyKSB7Cj4g IAkJCXByX2VycigiaW5zZXJ0IGZhaWxlZCwgc3RlcCAlZFxuIiwgbik7Cj4gIAkJCXJldCA9IGVy cjsKPiBAQCAtMTkwNCw3ICsxODk5LDcgQEAgc3RhdGljIGludCBldmljdF9jb2xvcihzdHJ1Y3Qg ZHJtX21tICptbSwKPiAgCWRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZSgmc2NhbiwgbW0sCj4g IAkJCQkgICAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKPiAgCQkJCSAgICByYW5nZV9zdGFydCwg cmFuZ2VfZW5kLAo+IC0JCQkJICAgIG1vZGUtPmNyZWF0ZV9mbGFncyk7Cj4gKwkJCQkgICAgbW9k ZS0+bW9kZSk7Cj4gIAlpZiAoIWV2aWN0X25vZGVzKCZzY2FuLAo+ICAJCQkgbm9kZXMsIG9yZGVy LCBjb3VudCwgdHJ1ZSwKPiAgCQkJICZldmljdF9saXN0KSkKPiBAQCAtMTkxMiw4ICsxOTA3LDcg QEAgc3RhdGljIGludCBldmljdF9jb2xvcihzdHJ1Y3QgZHJtX21tICptbSwKPiAgCj4gIAltZW1z ZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwo+ICAJZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2dl bmVyaWMobW0sICZ0bXAsIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4gLQkJCQkJIG1vZGUtPnNl YXJjaF9mbGFncywKPiAtCQkJCQkgbW9kZS0+Y3JlYXRlX2ZsYWdzKTsKPiArCQkJCQkgRFJNX01N X0lOU0VSVF9FVklDVCk7Cj4gIAlpZiAoZXJyKSB7Cj4gIAkJcHJfZXJyKCJGYWlsZWQgdG8gaW5z ZXJ0IGludG8gZXZpY3Rpb24gaG9sZTogc2l6ZT0lZCwgYWxpZ249JWQsIGNvbG9yPSVsdSwgZXJy PSVkXG4iLAo+ICAJCSAgICAgICBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLCBlcnIpOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jIGIvZHJpdmVycy9ncHUvZHJtL3Np cy9zaXNfbW0uYwo+IGluZGV4IDAzZGVmZGE3Nzc2Ni4uMTYyMmRiMjRjZDM5IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v c2lzL3Npc19tbS5jCj4gQEAgLTEwOSw4ICsxMDksNyBAQCBzdGF0aWMgaW50IHNpc19kcm1fYWxs b2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ICAJaWYg KHBvb2wgPT0gQUdQX1RZUEUpIHsKPiAgCQlyZXR2YWwgPSBkcm1fbW1faW5zZXJ0X25vZGUoJmRl dl9wcml2LT5hZ3BfbW0sCj4gIAkJCQkJICAgICZpdGVtLT5tbV9ub2RlLAo+IC0JCQkJCSAgICBt ZW0tPnNpemUsIDAsCj4gLQkJCQkJICAgIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gKwkJCQkJ ICAgIG1lbS0+c2l6ZSk7Cj4gIAkJb2Zmc2V0ID0gaXRlbS0+bW1fbm9kZS5zdGFydDsKPiAgCX0g ZWxzZSB7Cj4gICNpZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZC X1NJU19NT0RVTEUpCj4gQEAgLTEyMiw4ICsxMjEsNyBAQCBzdGF0aWMgaW50IHNpc19kcm1fYWxs b2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAo+ICAjZWxz ZQo+ICAJCXJldHZhbCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmZGV2X3ByaXYtPnZyYW1fbW0sCj4g IAkJCQkJICAgICZpdGVtLT5tbV9ub2RlLAo+IC0JCQkJCSAgICBtZW0tPnNpemUsIDAsCj4gLQkJ CQkJICAgIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gKwkJCQkJICAgIG1lbS0+c2l6ZSk7Cj4g IAkJb2Zmc2V0ID0gaXRlbS0+bW1fbm9kZS5zdGFydDsKPiAgI2VuZGlmCj4gIAl9Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdy YS9nZW0uYwo+IGluZGV4IDdkODUzZTZiNWZmMC4uYjUyM2E1ZDRhMzhjIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdy YS9nZW0uYwo+IEBAIC0xMjgsOCArMTI4LDggQEAgc3RhdGljIGludCB0ZWdyYV9ib19pb21tdV9t YXAoc3RydWN0IHRlZ3JhX2RybSAqdGVncmEsIHN0cnVjdCB0ZWdyYV9ibyAqYm8pCj4gIAlpZiAo IWJvLT5tbSkKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiAgCj4gLQllcnIgPSBkcm1fbW1faW5zZXJ0 X25vZGVfZ2VuZXJpYygmdGVncmEtPm1tLCBiby0+bW0sIGJvLT5nZW0uc2l6ZSwKPiAtCQkJCQkg UEFHRV9TSVpFLCAwLCAwLCAwKTsKPiArCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmlj KCZ0ZWdyYS0+bW0sCj4gKwkJCQkJIGJvLT5tbSwgYm8tPmdlbS5zaXplLCBQQUdFX1NJWkUsIDAs IDApOwo+ICAJaWYgKGVyciA8IDApIHsKPiAgCQlkZXZfZXJyKHRlZ3JhLT5kcm0tPmRldiwgIm91 dCBvZiBJL08gdmlydHVhbCBtZW1vcnk6ICV6ZFxuIiwKPiAgCQkJZXJyKTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJt L3R0bS90dG1fYm9fbWFuYWdlci5jCj4gaW5kZXggOTg4YzQ4ZDFjZjNlLi45MGE2YzBiMDNhZmMg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fbWFuYWdlci5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fbWFuYWdlci5jCj4gQEAgLTU0LDkgKzU0LDgg QEAgc3RhdGljIGludCB0dG1fYm9fbWFuX2dldF9ub2RlKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFu YWdlciAqbWFuLAo+ICB7Cj4gIAlzdHJ1Y3QgdHRtX3JhbmdlX21hbmFnZXIgKnJtYW4gPSAoc3Ry dWN0IHR0bV9yYW5nZV9tYW5hZ2VyICopIG1hbi0+cHJpdjsKPiAgCXN0cnVjdCBkcm1fbW0gKm1t ID0gJnJtYW4tPm1tOwo+IC0Jc3RydWN0IGRybV9tbV9ub2RlICpub2RlID0gTlVMTDsKPiAtCWVu dW0gZHJtX21tX3NlYXJjaF9mbGFncyBzZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0JFU1Q7Cj4gLQll bnVtIGRybV9tbV9hbGxvY2F0b3JfZmxhZ3MgYWZsYWdzID0gRFJNX01NX0NSRUFURV9ERUZBVUxU Owo+ICsJc3RydWN0IGRybV9tbV9ub2RlICpub2RlOwo+ICsJZW51bSBkcm1fbW1faW5zZXJ0X21v ZGUgbW9kZTsKPiAgCXVuc2lnbmVkIGxvbmcgbHBmbjsKPiAgCWludCByZXQ7Cj4gIAo+IEBAIC02 OCwxNiArNjcsMTUgQEAgc3RhdGljIGludCB0dG1fYm9fbWFuX2dldF9ub2RlKHN0cnVjdCB0dG1f bWVtX3R5cGVfbWFuYWdlciAqbWFuLAo+ICAJaWYgKCFub2RlKQo+ICAJCXJldHVybiAtRU5PTUVN Owo+ICAKPiAtCWlmIChwbGFjZS0+ZmxhZ3MgJiBUVE1fUExfRkxBR19UT1BET1dOKSB7Cj4gLQkJ c2ZsYWdzID0gRFJNX01NX1NFQVJDSF9CRUxPVzsKPiAtCQlhZmxhZ3MgPSBEUk1fTU1fQ1JFQVRF X1RPUDsKPiAtCX0KPiArCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0JFU1Q7Cj4gKwlpZiAocGxhY2Ut PmZsYWdzICYgVFRNX1BMX0ZMQUdfVE9QRE9XTikKPiArCQltb2RlID0gRFJNX01NX0lOU0VSVF9I SUdIOwo+ICAKPiAgCXNwaW5fbG9jaygmcm1hbi0+bG9jayk7Cj4gLQlyZXQgPSBkcm1fbW1faW5z ZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyhtbSwgbm9kZSwgbWVtLT5udW1fcGFnZXMsCj4gKwly ZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UobW0sIG5vZGUsCj4gKwkJCQkJICBtZW0t Pm51bV9wYWdlcywKPiAgCQkJCQkgIG1lbS0+cGFnZV9hbGlnbm1lbnQsIDAsCj4gLQkJCQkJICBw bGFjZS0+ZnBmbiwgbHBmbiwKPiAtCQkJCQkgIHNmbGFncywgYWZsYWdzKTsKPiArCQkJCQkgIHBs YWNlLT5mcGZuLCBscGZuLCBtb2RlKTsKPiAgCXNwaW5fdW5sb2NrKCZybWFuLT5sb2NrKTsKPiAg Cj4gIAlpZiAodW5saWtlbHkocmV0KSkgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiBpbmRleCA5 M2FlY2UyMDNjNTQuLjBjMDY4NDRhZjQ0NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9jcnRjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiBA QCAtNTkzLDcgKzU5Myw3IEBAIHN0YXRpYyBpbnQgdmM0X2NydGNfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiAgCj4gIAlzcGluX2xvY2tfaXJxc2F2ZSgmdmM0LT5odnMtPm1t X2xvY2ssIGZsYWdzKTsKPiAgCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZSgmdmM0LT5odnMtPmRs aXN0X21tLCAmdmM0X3N0YXRlLT5tbSwKPiAtCQkJCSBkbGlzdF9jb3VudCwgMSwgMCk7Cj4gKwkJ CQkgZGxpc3RfY291bnQpOwo+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmM0LT5odnMtPm1t X2xvY2ssIGZsYWdzKTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9odnMuYwo+IGluZGV4IGZjNjhiMWI0ZGE1Mi4uZjdmNzY3N2Y2ZDhkIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfaHZzLmMKPiBAQCAtMTQxLDggKzE0MSw3IEBAIHN0YXRpYyBpbnQgdmM0X2h2c191cGxv YWRfbGluZWFyX2tlcm5lbChzdHJ1Y3QgdmM0X2h2cyAqaHZzLAo+ICAJaW50IHJldCwgaTsKPiAg CXUzMiBfX2lvbWVtICpkc3Rfa2VybmVsOwo+ICAKPiAtCXJldCA9IGRybV9tbV9pbnNlcnRfbm9k ZSgmaHZzLT5kbGlzdF9tbSwgc3BhY2UsIFZDNF9LRVJORUxfRFdPUkRTLCAxLAo+IC0JCQkJIDAp Owo+ICsJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZodnMtPmRsaXN0X21tLCBzcGFjZSwgVkM0 X0tFUk5FTF9EV09SRFMpOwo+ICAJaWYgKHJldCkgewo+ICAJCURSTV9FUlJPUigiRmFpbGVkIHRv IGFsbG9jYXRlIHNwYWNlIGZvciBmaWx0ZXIga2VybmVsOiAlZFxuIiwKPiAgCQkJICByZXQpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jIGIvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfcGxhbmUuYwo+IGluZGV4IDExMGQxNTE4ZjVkNS4uYzFmMDY4OTcxMzZi IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCj4gQEAgLTUxNCw5ICs1MTQsOSBAQCBzdGF0 aWMgaW50IHZjNF9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCWlm IChsYm1fc2l6ZSkgewo+ICAJCWlmICghdmM0X3N0YXRlLT5sYm0uYWxsb2NhdGVkKSB7Cj4gIAkJ CXNwaW5fbG9ja19pcnFzYXZlKCZ2YzQtPmh2cy0+bW1fbG9jaywgaXJxZmxhZ3MpOwo+IC0JCQly ZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJnZjNC0+aHZzLT5sYm1fbW0sCj4gLQkJCQkJCSAmdmM0 X3N0YXRlLT5sYm0sCj4gLQkJCQkJCSBsYm1fc2l6ZSwgMzIsIDApOwo+ICsJCQlyZXQgPSBkcm1f bW1faW5zZXJ0X25vZGVfZ2VuZXJpYygmdmM0LT5odnMtPmxibV9tbSwKPiArCQkJCQkJCSAmdmM0 X3N0YXRlLT5sYm0sCj4gKwkJCQkJCQkgbGJtX3NpemUsIDMyLCAwLCAwKTsKPiAgCQkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdmM0LT5odnMtPm1tX2xvY2ssIGlycWZsYWdzKTsKPiAgCQl9IGVs c2Ugewo+ICAJCQlXQVJOX09OX09OQ0UobGJtX3NpemUgIT0gdmM0X3N0YXRlLT5sYm0uc2l6ZSk7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMgYi9kcml2ZXJzL2dw dS9kcm0vdmlhL3ZpYV9tbS5jCj4gaW5kZXggYTA0ZWYxYzk5MmQ5Li40MjE3ZDY2YTVjYzYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS92aWEvdmlhX21tLmMKPiBAQCAtMTQwLDExICsxNDAsMTEgQEAgaW50IHZpYV9tZW1f YWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgCWlmIChtZW0tPnR5 cGUgPT0gVklBX01FTV9BR1ApCj4gIAkJcmV0dmFsID0gZHJtX21tX2luc2VydF9ub2RlKCZkZXZf cHJpdi0+YWdwX21tLAo+ICAJCQkJCSAgICAmaXRlbS0+bW1fbm9kZSwKPiAtCQkJCQkgICAgdG1w U2l6ZSwgMCwgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKPiArCQkJCQkgICAgdG1wU2l6ZSk7Cj4g IAllbHNlCj4gIAkJcmV0dmFsID0gZHJtX21tX2luc2VydF9ub2RlKCZkZXZfcHJpdi0+dnJhbV9t bSwKPiAgCQkJCQkgICAgJml0ZW0tPm1tX25vZGUsCj4gLQkJCQkJICAgIHRtcFNpemUsIDAsIERS TV9NTV9TRUFSQ0hfREVGQVVMVCk7Cj4gKwkJCQkJICAgIHRtcFNpemUpOwo+ICAJaWYgKHJldHZh bCkKPiAgCQlnb3RvIGZhaWxfYWxsb2M7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9jbWRidWYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2NtZGJ1Zi5jCj4gaW5kZXggYWEwNGZiMDE1OWE3Li43N2NiN2M2MjdlMDkgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jbWRidWYuYwo+IEBAIC02NzMsMTYgKzY3MywxMCBAQCBz dGF0aWMgYm9vbCB2bXdfY21kYnVmX3RyeV9hbGxvYyhzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKm1h biwKPiAgIAo+ICAJbWVtc2V0KGluZm8tPm5vZGUsIDAsIHNpemVvZigqaW5mby0+bm9kZSkpOwo+ ICAJc3Bpbl9sb2NrX2JoKCZtYW4tPmxvY2spOwo+IC0JcmV0ID0gZHJtX21tX2luc2VydF9ub2Rl X2dlbmVyaWMoJm1hbi0+bW0sIGluZm8tPm5vZGUsIGluZm8tPnBhZ2Vfc2l6ZSwKPiAtCQkJCQkg MCwgMCwKPiAtCQkJCQkgRFJNX01NX1NFQVJDSF9ERUZBVUxULAo+IC0JCQkJCSBEUk1fTU1fQ1JF QVRFX0RFRkFVTFQpOwo+ICsJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZtYW4tPm1tLCBpbmZv LT5ub2RlLCBpbmZvLT5wYWdlX3NpemUpOwo+ICAJaWYgKHJldCkgewo+ICAJCXZtd19jbWRidWZf bWFuX3Byb2Nlc3MobWFuKTsKPiAtCQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYygm bWFuLT5tbSwgaW5mby0+bm9kZSwKPiAtCQkJCQkJIGluZm8tPnBhZ2Vfc2l6ZSwgMCwgMCwKPiAt CQkJCQkJIERSTV9NTV9TRUFSQ0hfREVGQVVMVCwKPiAtCQkJCQkJIERSTV9NTV9DUkVBVEVfREVG QVVMVCk7Cj4gKwkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZtYW4tPm1tLCBpbmZvLT5ub2Rl LCBpbmZvLT5wYWdlX3NpemUpOwo+ICAJfQo+ICAKPiAgCXNwaW5fdW5sb2NrX2JoKCZtYW4tPmxv Y2spOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW0uaCBiL2luY2x1ZGUvZHJtL2Ry bV9tbS5oCj4gaW5kZXggM2JkZGNhOGZkMmI1Li5kODFiMGJhOTkyMWYgMTAwNjQ0Cj4gLS0tIGEv aW5jbHVkZS9kcm0vZHJtX21tLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fbW0uaAo+IEBAIC01 MywxOSArNTMsNjIgQEAKPiAgI2RlZmluZSBEUk1fTU1fQlVHX09OKGV4cHIpIEJVSUxEX0JVR19P Tl9JTlZBTElEKGV4cHIpCj4gICNlbmRpZgo+ICAKPiAtZW51bSBkcm1fbW1fc2VhcmNoX2ZsYWdz IHsKPiAtCURSTV9NTV9TRUFSQ0hfREVGQVVMVCA9CQkwLAo+IC0JRFJNX01NX1NFQVJDSF9CRVNU ID0JCTEgPDwgMCwKPiAtCURSTV9NTV9TRUFSQ0hfQkVMT1cgPQkJMSA8PCAxLAo+IC19Owo+ICsv KioKPiArICogZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgLSBjb250cm9sIHNlYXJjaCBhbmQgYWxs b2NhdGlvbiBiZWhhdmlvdXIKPiArICoKPiArICogVGhlICZzdHJ1Y3QgZHJtX21tIHJhbmdlIG1h bmFnZXIgc3VwcG9ydHMgZmluZGluZyBhIHN1aXRhYmxlIG1vZGVzIHVzaW5nCj4gKyAqIGEgbnVt YmVyIG9mIHNlYXJjaCB0cmVlcy4gVGhlc2UgdHJlZXMgYXJlIG9yYW5pc2VkIGJ5IHNpemUsIGJ5 IGFkZHJlc3MgYW5kCj4gKyAqIGluIG1vc3QgcmVjZW50IGV2aWN0aW9uIG9yZGVyLiBUaGlzIGFs bG93cyB0aGUgdXNlciB0byBmaW5kIGVpdGhlciB0aGUKPiArICogc21hbGxlc3QgaG9sZSB0byBy ZXVzZSwgdGhlIGxvd2VzdCBvciBoaWdoZXN0IGFkZHJlc3MgdG8gcmV1c2UsIG9yIHNpbXBseQo+ ICsgKiByZXVzZSB0aGUgbW9zdCByZWNlbnQgZXZpY3Rpb24gdGhhdCBmaXRzLiBXaGVuIGFsbG9j YXRpbmcgdGhlICZkcm1fbW1fbm9kZQo+ICsgKiBmcm9tIHdpdGhpbiB0aGUgaG9sZSwgdGhlICZk cm1fbW1faW5zZXJ0X21vZGUgYWxzbyBkaWN0YXRlIHdoZXRoZXIgdG8KPiArICogYWxsb2NhdGUg dGhlIGxvd2VzdCBtYXRjaGluZyBhZGRyZXNzIG9yIHRoZSBoaWdoZXN0Lgo+ICsgKi8KPiArZW51 bSBkcm1fbW1faW5zZXJ0X21vZGUgewo+ICsJLyoqCj4gKwkgKiBARFJNX01NX0lOU0VSVF9CRVNU Ogo+ICsJICoKPiArCSAqIFNlYXJjaCBmb3IgdGhlIHNtYWxsZXN0IGhvbGUgKHdpdGhpbiB0aGUg c2VhcmNoIHJhbmdlKSB0aGF0IGZpdHMKPiArCSAqIHRoZSBkZXNpcmVkIG5vZGUuCj4gKwkgKgo+ ICsJICogQWxsb2NhdGVzIHRoZSBub2RlIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgZm91bmQgaG9s ZS4KPiArCSAqLwo+ICsJRFJNX01NX0lOU0VSVF9CRVNUID0gMCwKPiAgCj4gLWVudW0gZHJtX21t X2FsbG9jYXRvcl9mbGFncyB7Cj4gLQlEUk1fTU1fQ1JFQVRFX0RFRkFVTFQgPQkJMCwKPiAtCURS TV9NTV9DUkVBVEVfVE9QID0JCTEgPDwgMCwKPiAtfTsKPiArCS8qKgo+ICsJICogQERSTV9NTV9J TlNFUlRfTE9XOgo+ICsJICoKPiArCSAqIFNlYXJjaCBmb3IgdGhlIGxvd2VzdCBob2xlIChhZGRy ZXNzIGNsb3Nlc3QgdG8gMCwgd2l0aGluIHRoZSBzZWFyY2gKPiArCSAqIHJhbmdlKSB0aGF0IGZp dHMgdGhlIGRlc2lyZWQgbm9kZS4KPiArCSAqCj4gKwkgKiBBbGxvY2F0ZXMgdGhlIG5vZGUgZnJv bSB0aGUgYm90dG9tIG9mIHRoZSBmb3VuZCBob2xlLgo+ICsJICovCj4gKwlEUk1fTU1fSU5TRVJU X0xPVywKPiAgCj4gLSNkZWZpbmUgRFJNX01NX0JPVFRPTVVQIERSTV9NTV9TRUFSQ0hfREVGQVVM VCwgRFJNX01NX0NSRUFURV9ERUZBVUxUCj4gLSNkZWZpbmUgRFJNX01NX1RPUERPV04gRFJNX01N X1NFQVJDSF9CRUxPVywgRFJNX01NX0NSRUFURV9UT1AKPiArCS8qKgo+ICsJICogQERSTV9NTV9J TlNFUlRfSElHSDoKPiArCSAqCj4gKwkgKiBTZWFyY2ggZm9yIHRoZSBoaWdoZXN0IGhvbGUgKGFk ZHJlc3MgY2xvc2VzdCB0byBVNjRfTUFYLCB3aXRoaW4gdGhlCj4gKwkgKiBzZWFyY2ggcmFuZ2Up IHRoYXQgZml0cyB0aGUgZGVzaXJlZCBub2RlLgo+ICsJICoKPiArCSAqIEFsbG9jYXRlcyB0aGUg bm9kZSBmcm9tIHRoZSAqdG9wKiBvZiB0aGUgZm91bmQgaG9sZS4gVGhlIHNwZWNpZmllZAo+ICsJ ICogYWxpZ25tZW50IGZvciB0aGUgbm9kZSBpcyBhcHBsaWVkIHRvIHRoZSBiYXNlIG9mIHRoZSBu b2RlCj4gKwkgKiAoJmRybV9tbV9ub2RlLnN0YXJ0KS4KPiArCSAqLwo+ICsJRFJNX01NX0lOU0VS VF9ISUdILAo+ICsKPiArCS8qKgo+ICsJICogQERSTV9NTV9JTlNFUlRfRVZJQ1Q6Cj4gKwkgKgo+ ICsJICogU2VhcmNoIGZvciB0aGUgbW9zdCByZWNlbnRseSBldmljdGVkIGhvbGUgKHdpdGhpbiB0 aGUgc2VhcmNoIHJhbmdlKQo+ICsJICogdGhhdCBmaXRzIHRoZSBkZXNpcmVkIG5vZGUuIFRoaXMg aXMgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbW1lZGlhdGVseQo+ICsJICogYWZ0ZXIgcGVyZm9ybWlu ZyBhbiBldmljdGlvbiBzY2FuIChzZWUgZHJtX21tX3NjYW5faW5pdCgpKSBhbmQKPiArCSAqIHJl bW92aW5nIHRoZSBzZWxlY3RlZCBub2RlcyB0byBmb3JtIGEgaG9sZS4KPiArCSAqCj4gKwkgKiBB bGxvY2F0ZXMgdGhlIG5vZGUgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBmb3VuZCBob2xlLgo+ICsJ ICovCj4gKwlEUk1fTU1fSU5TRVJUX0VWSUNULAo+ICt9Owo+ICAKPiAgLyoqCj4gICAqIHN0cnVj dCBkcm1fbW1fbm9kZSAtIGFsbG9jYXRlZCBibG9jayBpbiB0aGUgRFJNIGFsbG9jYXRvcgo+IEBA IC04NCwxNCArMTI3LDE2IEBAIHN0cnVjdCBkcm1fbW1fbm9kZSB7Cj4gIAkvKiogQHNpemU6IFNp emUgb2YgdGhlIGFsbG9jYXRlZCBibG9jay4gKi8KPiAgCXU2NCBzaXplOwo+ICAJLyogcHJpdmF0 ZTogKi8KPiArCXN0cnVjdCBkcm1fbW0gKm1tOwo+ICAJc3RydWN0IGxpc3RfaGVhZCBub2RlX2xp c3Q7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGhvbGVfc3RhY2s7Cj4gIAlzdHJ1Y3QgcmJfbm9kZSBy YjsKPiAtCXVuc2lnbmVkIGhvbGVfZm9sbG93cyA6IDE7Cj4gLQl1bnNpZ25lZCBhbGxvY2F0ZWQg OiAxOwo+IC0JYm9vbCBzY2FubmVkX2Jsb2NrIDogMTsKPiArCXN0cnVjdCByYl9ub2RlIHJiX2hv bGVfc2l6ZTsKPiArCXN0cnVjdCByYl9ub2RlIHJiX2hvbGVfYWRkcjsKPiAgCXU2NCBfX3N1YnRy ZWVfbGFzdDsKPiAtCXN0cnVjdCBkcm1fbW0gKm1tOwo+ICsJdTY0IGhvbGVfc2l6ZTsKPiArCWJv b2wgYWxsb2NhdGVkIDogMTsKPiArCWJvb2wgc2Nhbm5lZF9ibG9jayA6IDE7Cj4gICNpZmRlZiBD T05GSUdfRFJNX0RFQlVHX01NCj4gIAlkZXBvdF9zdGFja19oYW5kbGVfdCBzdGFjazsKPiAgI2Vu ZGlmCj4gQEAgLTEyNyw2ICsxNzIsOCBAQCBzdHJ1Y3QgZHJtX21tIHsKPiAgCXN0cnVjdCBkcm1f bW1fbm9kZSBoZWFkX25vZGU7Cj4gIAkvKiBLZWVwIGFuIGludGVydmFsX3RyZWUgZm9yIGZhc3Qg bG9va3VwIG9mIGRybV9tbV9ub2RlcyBieSBhZGRyZXNzLiAqLwo+ICAJc3RydWN0IHJiX3Jvb3Qg aW50ZXJ2YWxfdHJlZTsKPiArCXN0cnVjdCByYl9yb290IGhvbGVzX3NpemU7Cj4gKwlzdHJ1Y3Qg cmJfcm9vdCBob2xlc19hZGRyOwo+ICAKPiAgCXVuc2lnbmVkIGxvbmcgc2Nhbl9hY3RpdmU7Cj4g IH07Cj4gQEAgLTE1NSw3ICsyMDIsNyBAQCBzdHJ1Y3QgZHJtX21tX3NjYW4gewo+ICAJdTY0IGhp dF9lbmQ7Cj4gIAo+ICAJdW5zaWduZWQgbG9uZyBjb2xvcjsKPiAtCXVuc2lnbmVkIGludCBmbGFn czsKPiArCWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGU7Cj4gIH07Cj4gIAo+ICAvKioKPiBA QCAtMjA4LDcgKzI1NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkcm1fbW1faW5pdGlhbGl6ZWQo Y29uc3Qgc3RydWN0IGRybV9tbSAqbW0pCj4gICAqLwo+ICBzdGF0aWMgaW5saW5lIGJvb2wgZHJt X21tX2hvbGVfZm9sbG93cyhjb25zdCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUpCj4gIHsKPiAt CXJldHVybiBub2RlLT5ob2xlX2ZvbGxvd3M7Cj4gKwlyZXR1cm4gbm9kZS0+aG9sZV9zaXplOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgaW5saW5lIHU2NCBfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQoY29u c3Qgc3RydWN0IGRybV9tbV9ub2RlICpob2xlX25vZGUpCj4gQEAgLTI5MSwxNyArMzM4LDkgQEAg c3RhdGljIGlubGluZSB1NjQgZHJtX21tX2hvbGVfbm9kZV9lbmQoY29uc3Qgc3RydWN0IGRybV9t bV9ub2RlICpob2xlX25vZGUpCj4gICNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX25vZGVfc2FmZShl bnRyeSwgbmV4dCwgbW0pIFwKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4 dCwgZHJtX21tX25vZGVzKG1tKSwgbm9kZV9saXN0KQo+ICAKPiAtI2RlZmluZSBfX2RybV9tbV9m b3JfZWFjaF9ob2xlKGVudHJ5LCBtbSwgaG9sZV9zdGFydCwgaG9sZV9lbmQsIGJhY2t3YXJkcykg XAo+IC0JZm9yIChlbnRyeSA9IGxpc3RfZW50cnkoKGJhY2t3YXJkcykgPyAobW0pLT5ob2xlX3N0 YWNrLnByZXYgOiAobW0pLT5ob2xlX3N0YWNrLm5leHQsIHN0cnVjdCBkcm1fbW1fbm9kZSwgaG9s ZV9zdGFjayk7IFwKPiAtCSAgICAgJmVudHJ5LT5ob2xlX3N0YWNrICE9ICYobW0pLT5ob2xlX3N0 YWNrID8gXAo+IC0JICAgICBob2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9zdGFydChlbnRy eSksIFwKPiAtCSAgICAgaG9sZV9lbmQgPSBkcm1fbW1faG9sZV9ub2RlX2VuZChlbnRyeSksIFwK PiAtCSAgICAgMSA6IDA7IFwKPiAtCSAgICAgZW50cnkgPSBsaXN0X2VudHJ5KChiYWNrd2FyZHMp ID8gZW50cnktPmhvbGVfc3RhY2sucHJldiA6IGVudHJ5LT5ob2xlX3N0YWNrLm5leHQsIHN0cnVj dCBkcm1fbW1fbm9kZSwgaG9sZV9zdGFjaykpCj4gLQo+ICAvKioKPiAgICogZHJtX21tX2Zvcl9l YWNoX2hvbGUgLSBpdGVyYXRvciB0byB3YWxrIG92ZXIgYWxsIGhvbGVzCj4gLSAqIEBlbnRyeTog JmRybV9tbV9ub2RlIHVzZWQgaW50ZXJuYWxseSB0byB0cmFjayBwcm9ncmVzcwo+ICsgKiBAcG9z OiAmZHJtX21tX25vZGUgdXNlZCBpbnRlcm5hbGx5IHRvIHRyYWNrIHByb2dyZXNzCj4gICAqIEBt bTogJmRybV9tbSBhbGxvY2F0b3IgdG8gd2Fsawo+ICAgKiBAaG9sZV9zdGFydDogdWxvbmcgdmFy aWFibGUgdG8gYXNzaWduIHRoZSBob2xlIHN0YXJ0IHRvIG9uIGVhY2ggaXRlcmF0aW9uCj4gICAq IEBob2xlX2VuZDogdWxvbmcgdmFyaWFibGUgdG8gYXNzaWduIHRoZSBob2xlIGVuZCB0byBvbiBl YWNoIGl0ZXJhdGlvbgo+IEBAIC0zMTQsNTcgKzM1MywyOCBAQCBzdGF0aWMgaW5saW5lIHU2NCBk cm1fbW1faG9sZV9ub2RlX2VuZChjb25zdCBzdHJ1Y3QgZHJtX21tX25vZGUgKmhvbGVfbm9kZSkK PiAgICogSW1wbGVtZW50YXRpb24gTm90ZToKPiAgICogV2UgbmVlZCB0byBpbmxpbmUgbGlzdF9m b3JfZWFjaF9lbnRyeSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHNldCBob2xlX3N0YXJ0Cj4gICAq IGFuZCBob2xlX2VuZCBvbiBlYWNoIGl0ZXJhdGlvbiB3aGlsZSBrZWVwaW5nIHRoZSBtYWNybyBz YW5lLgo+IC0gKgo+IC0gKiBUaGUgX19kcm1fbW1fZm9yX2VhY2hfaG9sZSB2ZXJzaW9uIGlzIHNp bWlsYXIsIGJ1dCB3aXRoIGFkZGVkIHN1cHBvcnQgZm9yCj4gLSAqIGdvaW5nIGJhY2t3YXJkcy4K PiAgICovCj4gLSNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX2hvbGUoZW50cnksIG1tLCBob2xlX3N0 YXJ0LCBob2xlX2VuZCkgXAo+IC0JX19kcm1fbW1fZm9yX2VhY2hfaG9sZShlbnRyeSwgbW0sIGhv bGVfc3RhcnQsIGhvbGVfZW5kLCAwKQo+ICsjZGVmaW5lIGRybV9tbV9mb3JfZWFjaF9ob2xlKHBv cywgbW0sIGhvbGVfc3RhcnQsIGhvbGVfZW5kKSBcCj4gKwlmb3IgKHBvcyA9IGxpc3RfZmlyc3Rf ZW50cnkoJihtbSktPmhvbGVfc3RhY2ssIFwKPiArCQkJCSAgICB0eXBlb2YoKnBvcyksIGhvbGVf c3RhY2spOyBcCj4gKwkgICAgICZwb3MtPmhvbGVfc3RhY2sgIT0gJihtbSktPmhvbGVfc3RhY2sg PyBcCj4gKwkgICAgIGhvbGVfc3RhcnQgPSBkcm1fbW1faG9sZV9ub2RlX3N0YXJ0KHBvcyksIFwK PiArCSAgICAgaG9sZV9lbmQgPSBob2xlX3N0YXJ0ICsgcG9zLT5ob2xlX3NpemUsIFwKPiArCSAg ICAgMSA6IDA7IFwKPiArCSAgICAgcG9zID0gbGlzdF9uZXh0X2VudHJ5KHBvcywgaG9sZV9zdGFj aykpCj4gIAo+ICAvKgo+ICAgKiBCYXNpYyByYW5nZSBtYW5hZ2VyIHN1cHBvcnQgKGRybV9tbS5j KQo+ICAgKi8KPiAgaW50IGRybV9tbV9yZXNlcnZlX25vZGUoc3RydWN0IGRybV9tbSAqbW0sIHN0 cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSk7Cj4gLWludCBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFu Z2VfZ2VuZXJpYyhzdHJ1Y3QgZHJtX21tICptbSwKPiAtCQkJCQlzdHJ1Y3QgZHJtX21tX25vZGUg Km5vZGUsCj4gLQkJCQkJdTY0IHNpemUsCj4gLQkJCQkJdTY0IGFsaWdubWVudCwKPiAtCQkJCQl1 bnNpZ25lZCBsb25nIGNvbG9yLAo+IC0JCQkJCXU2NCBzdGFydCwKPiAtCQkJCQl1NjQgZW5kLAo+ IC0JCQkJCWVudW0gZHJtX21tX3NlYXJjaF9mbGFncyBzZmxhZ3MsCj4gLQkJCQkJZW51bSBkcm1f bW1fYWxsb2NhdG9yX2ZsYWdzIGFmbGFncyk7Cj4gLQo+IC0vKioKPiAtICogZHJtX21tX2luc2Vy dF9ub2RlX2luX3JhbmdlIC0gcmFuZ2VkIHNlYXJjaCBmb3Igc3BhY2UgYW5kIGluc2VydCBAbm9k ZQo+IC0gKiBAbW06IGRybV9tbSB0byBhbGxvY2F0ZSBmcm9tCj4gLSAqIEBub2RlOiBwcmVhbGxv Y2F0ZSBub2RlIHRvIGluc2VydAo+IC0gKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgo+ IC0gKiBAYWxpZ25tZW50OiBhbGlnbm1lbnQgb2YgdGhlIGFsbG9jYXRpb24KPiAtICogQHN0YXJ0 OiBzdGFydCBvZiB0aGUgYWxsb3dlZCByYW5nZSBmb3IgdGhpcyBub2RlCj4gLSAqIEBlbmQ6IGVu ZCBvZiB0aGUgYWxsb3dlZCByYW5nZSBmb3IgdGhpcyBub2RlCj4gLSAqIEBmbGFnczogZmxhZ3Mg dG8gZmluZS10dW5lIHRoZSBhbGxvY2F0aW9uCj4gLSAqCj4gLSAqIFRoaXMgaXMgYSBzaW1wbGlm aWVkIHZlcnNpb24gb2YgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMoKSB3aXRo Cj4gLSAqIEBjb2xvciBzZXQgdG8gMC4KPiAtICoKPiAtICogVGhlIHByZWFsbG9jYXRlZCBub2Rl IG11c3QgYmUgY2xlYXJlZCB0byAwLgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiAwIG9uIHN1 Y2Nlc3MsIC1FTk9TUEMgaWYgdGhlcmUncyBubyBzdWl0YWJsZSBob2xlLgo+IC0gKi8KPiAtc3Rh dGljIGlubGluZSBpbnQgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKHN0cnVjdCBkcm1fbW0g Km1tLAo+IC0JCQkJCSAgICAgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKPiAtCQkJCQkgICAg ICB1NjQgc2l6ZSwKPiAtCQkJCQkgICAgICB1NjQgYWxpZ25tZW50LAo+IC0JCQkJCSAgICAgIHU2 NCBzdGFydCwKPiAtCQkJCQkgICAgICB1NjQgZW5kLAo+IC0JCQkJCSAgICAgIGVudW0gZHJtX21t X3NlYXJjaF9mbGFncyBmbGFncykKPiAtewo+IC0JcmV0dXJuIGRybV9tbV9pbnNlcnRfbm9kZV9p bl9yYW5nZV9nZW5lcmljKG1tLCBub2RlLCBzaXplLCBhbGlnbm1lbnQsCj4gLQkJCQkJCSAgIDAs IHN0YXJ0LCBlbmQsIGZsYWdzLAo+IC0JCQkJCQkgICBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQpOwo+ IC19Cj4gK2ludCBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2Uoc3RydWN0IGRybV9tbSAqbW0s Cj4gKwkJCQlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsCj4gKwkJCQl1NjQgc2l6ZSwKPiArCQkJ CXU2NCBhbGlnbm1lbnQsCj4gKwkJCQl1bnNpZ25lZCBsb25nIGNvbG9yLAo+ICsJCQkJdTY0IHN0 YXJ0LAo+ICsJCQkJdTY0IGVuZCwKPiArCQkJCWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUp Owo+ICAKPiAgLyoqCj4gICAqIGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljIC0gc2VhcmNoIGZv ciBzcGFjZSBhbmQgaW5zZXJ0IEBub2RlCj4gQEAgLTM3Myw4ICszODMsNyBAQCBzdGF0aWMgaW5s aW5lIGludCBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2Uoc3RydWN0IGRybV9tbSAqbW0sCj4g ICAqIEBzaXplOiBzaXplIG9mIHRoZSBhbGxvY2F0aW9uCj4gICAqIEBhbGlnbm1lbnQ6IGFsaWdu bWVudCBvZiB0aGUgYWxsb2NhdGlvbgo+ICAgKiBAY29sb3I6IG9wYXF1ZSB0YWcgdmFsdWUgdG8g dXNlIGZvciB0aGlzIG5vZGUKPiAtICogQHNmbGFnczogZmxhZ3MgdG8gZmluZS10dW5lIHRoZSBh bGxvY2F0aW9uIHNlYXJjaAo+IC0gKiBAYWZsYWdzOiBmbGFncyB0byBmaW5lLXR1bmUgdGhlIGFs bG9jYXRpb24gYmVoYXZpb3IKPiArICogQG1vZGU6IGZpbmUtdHVuZSB0aGUgYWxsb2NhdGlvbiBz ZWFyY2ggYW5kIHBsYWNlbWVudAo+ICAgKgo+ICAgKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJz aW9uIG9mIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKCkgd2l0aCBubwo+ICAg KiByYW5nZSByZXN0cmljdGlvbnMgYXBwbGllZC4KPiBAQCAtMzg4LDEzICszOTcsMTEgQEAgc3Rh dGljIGlubGluZSBpbnQKPiAgZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoc3RydWN0IGRybV9t bSAqbW0sIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKPiAgCQkJICAgdTY0IHNpemUsIHU2NCBh bGlnbm1lbnQsCj4gIAkJCSAgIHVuc2lnbmVkIGxvbmcgY29sb3IsCj4gLQkJCSAgIGVudW0gZHJt X21tX3NlYXJjaF9mbGFncyBzZmxhZ3MsCj4gLQkJCSAgIGVudW0gZHJtX21tX2FsbG9jYXRvcl9m bGFncyBhZmxhZ3MpCj4gKwkJCSAgIGVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUpCj4gIHsK PiAtCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYyhtbSwgbm9kZSwK PiAtCQkJCQkJICAgc2l6ZSwgYWxpZ25tZW50LCAwLAo+IC0JCQkJCQkgICAwLCBVNjRfTUFYLAo+ IC0JCQkJCQkgICBzZmxhZ3MsIGFmbGFncyk7Cj4gKwlyZXR1cm4gZHJtX21tX2luc2VydF9ub2Rl X2luX3JhbmdlKG1tLCBub2RlLAo+ICsJCQkJCSAgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCj4g KwkJCQkJICAgMCwgVTY0X01BWCwgbW9kZSk7Cj4gIH0KPiAgCj4gIC8qKgo+IEBAIC00MDIsOCAr NDA5LDYgQEAgZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoc3RydWN0IGRybV9tbSAqbW0sIHN0 cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKPiAgICogQG1tOiBkcm1fbW0gdG8gYWxsb2NhdGUgZnJv bQo+ICAgKiBAbm9kZTogcHJlYWxsb2NhdGUgbm9kZSB0byBpbnNlcnQKPiAgICogQHNpemU6IHNp emUgb2YgdGhlIGFsbG9jYXRpb24KPiAtICogQGFsaWdubWVudDogYWxpZ25tZW50IG9mIHRoZSBh bGxvY2F0aW9uCj4gLSAqIEBmbGFnczogZmxhZ3MgdG8gZmluZS10dW5lIHRoZSBhbGxvY2F0aW9u Cj4gICAqCj4gICAqIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgZHJtX21tX2luc2Vy dF9ub2RlX2dlbmVyaWMoKSB3aXRoIEBjb2xvciBzZXQKPiAgICogdG8gMC4KPiBAQCAtNDE1LDEz ICs0MjAsOSBAQCBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYyhzdHJ1Y3QgZHJtX21tICptbSwg c3RydWN0IGRybV9tbV9ub2RlICpub2RlLAo+ICAgKi8KPiAgc3RhdGljIGlubGluZSBpbnQgZHJt X21tX2luc2VydF9ub2RlKHN0cnVjdCBkcm1fbW0gKm1tLAo+ICAJCQkJICAgICBzdHJ1Y3QgZHJt X21tX25vZGUgKm5vZGUsCj4gLQkJCQkgICAgIHU2NCBzaXplLAo+IC0JCQkJICAgICB1NjQgYWxp Z25tZW50LAo+IC0JCQkJICAgICBlbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3MgZmxhZ3MpCj4gKwkJ CQkgICAgIHU2NCBzaXplKQo+ICB7Cj4gLQlyZXR1cm4gZHJtX21tX2luc2VydF9ub2RlX2dlbmVy aWMobW0sIG5vZGUsCj4gLQkJCQkJICBzaXplLCBhbGlnbm1lbnQsIDAsCj4gLQkJCQkJICBmbGFn cywgRFJNX01NX0NSRUFURV9ERUZBVUxUKTsKPiArCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVf Z2VuZXJpYyhtbSwgbm9kZSwgc2l6ZSwgMCwgMCwgMCk7Cj4gIH0KPiAgCj4gIHZvaWQgZHJtX21t X3JlbW92ZV9ub2RlKHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSk7Cj4gQEAgLTQ2OCw3ICs0Njks NyBAQCB2b2lkIGRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZShzdHJ1Y3QgZHJtX21tX3NjYW4g KnNjYW4sCj4gIAkJCQkgc3RydWN0IGRybV9tbSAqbW0sCj4gIAkJCQkgdTY0IHNpemUsIHU2NCBh bGlnbm1lbnQsIHVuc2lnbmVkIGxvbmcgY29sb3IsCj4gIAkJCQkgdTY0IHN0YXJ0LCB1NjQgZW5k LAo+IC0JCQkJIHVuc2lnbmVkIGludCBmbGFncyk7Cj4gKwkJCQkgZW51bSBkcm1fbW1faW5zZXJ0 X21vZGUgbW9kZSk7Cj4gIAo+ICAvKioKPiAgICogZHJtX21tX3NjYW5faW5pdCAtIGluaXRpYWxp emUgbHJ1IHNjYW5uaW5nCj4gQEAgLTQ3Nyw3ICs0NzgsNyBAQCB2b2lkIGRybV9tbV9zY2FuX2lu aXRfd2l0aF9yYW5nZShzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4sCj4gICAqIEBzaXplOiBzaXpl IG9mIHRoZSBhbGxvY2F0aW9uCj4gICAqIEBhbGlnbm1lbnQ6IGFsaWdubWVudCBvZiB0aGUgYWxs b2NhdGlvbgo+ICAgKiBAY29sb3I6IG9wYXF1ZSB0YWcgdmFsdWUgdG8gdXNlIGZvciB0aGUgYWxs b2NhdGlvbgo+IC0gKiBAZmxhZ3M6IGZsYWdzIHRvIHNwZWNpZnkgaG93IHRoZSBhbGxvY2F0aW9u IHdpbGwgYmUgcGVyZm9ybWVkIGFmdGVyd2FyZHMKPiArICogQG1vZGU6IGZpbmUtdHVuZSB0aGUg YWxsb2NhdGlvbiBzZWFyY2ggYW5kIHBsYWNlbWVudAo+ICAgKgo+ICAgKiBUaGlzIGlzIGEgc2lt cGxpZmllZCB2ZXJzaW9uIG9mIGRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZSgpIHdpdGggbm8g cmFuZ2UKPiAgICogcmVzdHJpY3Rpb25zIGFwcGxpZWQuCj4gQEAgLTQ5NCwxMiArNDk1LDExIEBA IHN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fbW1fc2Nhbl9pbml0KHN0cnVjdCBkcm1fbW1fc2NhbiAq c2NhbiwKPiAgCQkJCSAgICB1NjQgc2l6ZSwKPiAgCQkJCSAgICB1NjQgYWxpZ25tZW50LAo+ICAJ CQkJICAgIHVuc2lnbmVkIGxvbmcgY29sb3IsCj4gLQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdz KQo+ICsJCQkJICAgIGVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUpCj4gIHsKPiAgCWRybV9t bV9zY2FuX2luaXRfd2l0aF9yYW5nZShzY2FuLCBtbSwKPiAgCQkJCSAgICBzaXplLCBhbGlnbm1l bnQsIGNvbG9yLAo+IC0JCQkJICAgIDAsIFU2NF9NQVgsCj4gLQkJCQkgICAgZmxhZ3MpOwo+ICsJ CQkJICAgIDAsIFU2NF9NQVgsIG1vZGUpOwo+ICB9Cj4gIAo+ICBib29sIGRybV9tbV9zY2FuX2Fk ZF9ibG9jayhzdHJ1Y3QgZHJtX21tX3NjYW4gKnNjYW4sCj4gLS0gCj4gMi4xMS4wCj4gCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=