From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andi Shyti Subject: Re: [PATCH v2 1/2] drm/i915: Extract GT render power state management Date: Wed, 23 Oct 2019 12:52:48 +0300 Message-ID: <20191023095248.GA2593@intel.intel> References: <20191023093821.3350-1-andi.shyti@intel.com> <20191023095000.3782-1-andi.shyti@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1598B6EA14 for ; Wed, 23 Oct 2019 09:52:51 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20191023095000.3782-1-andi.shyti@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel GFX List-Id: intel-gfx@lists.freedesktop.org SGksCgpTb3JyeSwgSSBtZXNzZWQgdXAgd2l0aCB0aGUgZS1tYWlsIChhbmQgd2l0aCB0aGUgaW4t cmVwbHktdG8sIGFzCndlbGwsIGFuZCBJIGZvcmdvdCB0byBhZGQgYSBub3RlIHRvIHRoaXMgdjIp LCBwbGVhc2UgdGFrZSB0aGlzCmFzIDEvMiBiZWNhdXNlIGl0IGhhcyB0aGUgY29ycmVjdCBlLW1h aWwuCgpBbmRpCgpPbiBXZWQsIE9jdCAyMywgMjAxOSBhdCAxMjo1MDowMFBNICswMzAwLCBBbmRp IFNoeXRpIHdyb3RlOgo+IGk5MTVfaXJxLmMgaXMgbGFyZ2UuIE9uZSByZWFzb24gZm9yIHRoaXMg aXMgdGhhdCBoYXMgYSBsYXJnZSBjaHVuayBvZgo+IHRoZSBHVCByZW5kZXIgcG93ZXIgbWFuYWdl bWVudCBzdGFzaGVkIGF3YXkgaW4gaXQuIEV4dHJhY3QgdGhhdCBsb2dpYwo+IG91dCBvZiBpOTE1 X2lycS5jIGFuZCBpbnRlbF9wbS5jIGFuZCBwdXQgaXQgdW5kZXIgb25lIHJvb2YuCj4gCj4gQmFz ZWQgb24gYSBwYXRjaCBieSBDaHJpcyBXaWxzb24uCj4gCj4gU2lnbmVkLW9mZi1ieTogQW5kaSBT aHl0aSA8YW5kaS5zaHl0aUBpbnRlbC5jb20+Cj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgfCAgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5jICB8ICAgIDggKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3QuYyAgICAgICAgICAgIHwgICAgNiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF9pcnEuYyAgICAgICAgfCAgICA1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2d0X3BtLmMgICAgICAgICB8ICAgNDkgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3RfcG0uaCAgICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2d0X3R5cGVzLmggICAgICB8ICAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9sbGMuYyAgICAgICAgICAgfCAgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3Jwcy5jICAgICAgICAgICB8IDE4NzIgKysrKysrKysrKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5oICAgICAgICAgICB8ICAgMzcgKwo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHNfdHlwZXMuaCAgICAgfCAgIDkzICsKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMgICAgICAgIHwgICAgNyArLQo+ ICAuLi4vZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAgICA0ICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8ICAgNzMg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgICAgICAgIHwgICAg MiArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAg OTYgLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAgfCAg ICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgICAgICAgICAgICAgICB8 ICAzNTkgKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmggICAgICAgICAgICAg ICB8ICAgIDMgLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgICAg ICAgfCAgIDEwICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAg ICAgICB8ICAgIDcgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jICAgICAg ICAgICAgIHwgICA3NCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAg ICAgICAgICAgfCAyMTA1ICsrLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmggICAgICAgICAgICAgICB8ICAgMjIgLQo+ICAyNCBmaWxlcyBjaGFuZ2VkLCAy MzU5IGluc2VydGlvbnMoKyksIDI0ODQgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmgKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5oCj4gCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiBpbmRleCAyZmQ0YmVkMTg4ZTUuLjEzM2NhNTllN2M0OCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCj4gQEAgLTkwLDExICs5MCwxMiBAQCBndC15ICs9IFwKPiAgCWd0L2lu dGVsX2hhbmdjaGVjay5vIFwKPiAgCWd0L2ludGVsX2xsYy5vIFwKPiAgCWd0L2ludGVsX2xyYy5v IFwKPiArCWd0L2ludGVsX21vY3MubyBcCj4gIAlndC9pbnRlbF9yYzYubyBcCj4gIAlndC9pbnRl bF9yZW5kZXJzdGF0ZS5vIFwKPiAgCWd0L2ludGVsX3Jlc2V0Lm8gXAo+ICAJZ3QvaW50ZWxfcmlu Z2J1ZmZlci5vIFwKPiAtCWd0L2ludGVsX21vY3MubyBcCj4gKwlndC9pbnRlbF9ycHMubyBcCj4g IAlndC9pbnRlbF9zc2V1Lm8gXAo+ICAJZ3QvaW50ZWxfdGltZWxpbmUubyBcCj4gIAlndC9pbnRl bF93b3JrYXJvdW5kcy5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmMKPiBpbmRleCAyMzZmZGYxMjJlNDcuLjQ5YzJjN2Y3MTM5NCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTU1LDYgKzU1 LDggQEAKPiAgI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfdHYuaCIKPiAgI2luY2x1ZGUgImRpc3Bs YXkvaW50ZWxfdmRzYy5oIgo+ICAKPiArI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgo+ICsKPiAg I2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4gICNpbmNs dWRlICJpbnRlbF9hY3BpLmgiCj4gQEAgLTE0NzgyLDcgKzE0Nzg0LDcgQEAgc3RhdGljIGludCBk b19ycHNfYm9vc3Qoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKl93YWl0LAo+ICAJICogdmJsYW5r IHdpdGhvdXQgb3VyIGludGVydmVudGlvbiwgc28gbGVhdmUgUlBTIGFsb25lLgo+ICAJICovCj4g IAlpZiAoIWk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSkKPiAtCQlnZW42X3Jwc19ib29zdChycSk7 Cj4gKwkJaW50ZWxfcnBzX2Jvb3N0KHJxKTsKPiAgCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICAK PiAgCWRybV9jcnRjX3ZibGFua19wdXQod2FpdC0+Y3J0Yyk7Cj4gQEAgLTE0OTc2LDcgKzE0OTc4 LDcgQEAgaW50ZWxfcHJlcGFyZV9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAg CSAqIG1heGltdW0gY2xvY2tzIGZvbGxvd2luZyBhIHZibGFuayBtaXNzIChzZWUgZG9fcnBzX2Jv b3N0KCkpLgo+ICAJICovCj4gIAlpZiAoIWludGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUpIHsK PiAtCQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShkZXZfcHJpdiwgdHJ1ZSk7Cj4gKwkJaW50 ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoJmRldl9wcml2LT5ndC5ycHMsIHRydWUpOwo+ICAJCWlu dGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUgPSB0cnVlOwo+ICAJfQo+ICAKPiBAQCAtMTUwMDEs NyArMTUwMDMsNyBAQCBpbnRlbF9jbGVhbnVwX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFu ZS0+ZGV2KTsKPiAgCj4gIAlpZiAoaW50ZWxfc3RhdGUtPnJwc19pbnRlcmFjdGl2ZSkgewo+IC0J CWludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKGRldl9wcml2LCBmYWxzZSk7Cj4gKwkJaW50ZWxf cnBzX21hcmtfaW50ZXJhY3RpdmUoJmRldl9wcml2LT5ndC5ycHMsIGZhbHNlKTsKPiAgCQlpbnRl bF9zdGF0ZS0+cnBzX2ludGVyYWN0aXZlID0gZmFsc2U7Cj4gIAl9Cj4gIAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3QuYwo+IGluZGV4IDFjNGI2Yzk2NDJhZC4uNzUxODg1MmNiNzhhIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCj4gQEAgLTksNiArOSw3IEBACj4gICNpbmNs dWRlICJpbnRlbF9ndF9yZXF1ZXN0cy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfcmM2LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ycHMuaCIKPiAgI2luY2x1 ZGUgImludGVsX3VuY29yZS5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcG0uaCIKPiAgCj4gQEAgLTMy MSw4ICszMjIsNyBAQCB2b2lkIGludGVsX2d0X2NoaXBzZXRfZmx1c2goc3RydWN0IGludGVsX2d0 ICpndCkKPiAgCj4gIHZvaWQgaW50ZWxfZ3RfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBpbnRlbF9n dCAqZ3QpCj4gIHsKPiAtCWlmIChJU19HRU4oZ3QtPmk5MTUsIDUpKQo+IC0JCWludGVsX2dwdV9p cHNfaW5pdChndC0+aTkxNSk7Cj4gKwlpbnRlbF9ycHNfZHJpdmVyX3JlZ2lzdGVyKCZndC0+cnBz KTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBpbnRlbF9ndF9pbml0X3NjcmF0Y2goc3RydWN0IGlu dGVsX2d0ICpndCwgdW5zaWduZWQgaW50IHNpemUpCj4gQEAgLTM4NSw3ICszODUsNyBAQCB2b2lk IGludGVsX2d0X2RyaXZlcl9yZW1vdmUoc3RydWN0IGludGVsX2d0ICpndCkKPiAgCj4gIHZvaWQg aW50ZWxfZ3RfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVsX2d0ICpndCkKPiAgewo+IC0J aW50ZWxfZ3B1X2lwc190ZWFyZG93bigpOwo+ICsJaW50ZWxfcnBzX2RyaXZlcl91bnJlZ2lzdGVy KCZndC0+cnBzKTsKPiAgfQo+ICAKPiAgdm9pZCBpbnRlbF9ndF9kcml2ZXJfcmVsZWFzZShzdHJ1 Y3QgaW50ZWxfZ3QgKmd0KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jCj4g aW5kZXggMzRhNGZiNjI0YmY3Li45NzNlZTdlZGVkNjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfaXJxLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndF9pcnEuYwo+IEBAIC0xMSw2ICsxMSw3IEBACj4gICNpbmNsdWRlICJpbnRl bF9ndC5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCj4gICNpbmNsdWRlICJpbnRlbF91 bmNvcmUuaCIKPiArI2luY2x1ZGUgImludGVsX3Jwcy5oIgo+ICAKPiAgc3RhdGljIHZvaWQgZ3Vj X2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTE2IGlpcikKPiAgewo+IEBAIC03 Nyw3ICs3OCw3IEBAIGdlbjExX290aGVyX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3Qs IGNvbnN0IHU4IGluc3RhbmNlLAo+ICAJCXJldHVybiBndWNfaXJxX2hhbmRsZXIoJmd0LT51Yy5n dWMsIGlpcik7Cj4gIAo+ICAJaWYgKGluc3RhbmNlID09IE9USEVSX0dUUE1fSU5TVEFOQ0UpCj4g LQkJcmV0dXJuIGdlbjExX3Jwc19pcnFfaGFuZGxlcihndCwgaWlyKTsKPiArCQlyZXR1cm4gZ2Vu MTFfcnBzX2lycV9oYW5kbGVyKCZndC0+cnBzLCBpaXIpOwo+ICAKPiAgCVdBUk5fT05DRSgxLCAi dW5oYW5kbGVkIG90aGVyIGludGVycnVwdCBpbnN0YW5jZT0weCV4LCBpaXI9MHgleFxuIiwKPiAg CQkgIGluc3RhbmNlLCBpaXIpOwo+IEBAIC0zMzYsNyArMzM3LDcgQEAgdm9pZCBnZW44X2d0X2ly cV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBtYXN0ZXJfY3RsLCB1MzIgZ3RfaWly WzRdKQo+ICAJfQo+ICAKPiAgCWlmIChtYXN0ZXJfY3RsICYgKEdFTjhfR1RfUE1fSVJRIHwgR0VO OF9HVF9HVUNfSVJRKSkgewo+IC0JCWdlbjZfcnBzX2lycV9oYW5kbGVyKGd0LT5pOTE1LCBndF9p aXJbMl0pOwo+ICsJCWdlbjZfcnBzX2lycV9oYW5kbGVyKCZndC0+cnBzLCBndF9paXJbMl0pOwo+ ICAJCWd1Y19pcnFfaGFuZGxlcigmZ3QtPnVjLmd1YywgZ3RfaWlyWzJdID4+IDE2KTsKPiAgCX0K PiAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYwo+IGluZGV4IDA2ZTczZDU2 Y2ZjZi4uMzJjYTg3MjY1MjIyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2d0X3BtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9w bS5jCj4gQEAgLTEyLDggKzEyLDEwIEBACj4gICNpbmNsdWRlICJpbnRlbF9ndC5oIgo+ICAjaW5j bHVkZSAiaW50ZWxfZ3RfcG0uaCIKPiAgI2luY2x1ZGUgImludGVsX2d0X3JlcXVlc3RzLmgiCj4g KyNpbmNsdWRlICJpbnRlbF9sbGMuaCIKPiAgI2luY2x1ZGUgImludGVsX3BtLmgiCj4gICNpbmNs dWRlICJpbnRlbF9yYzYuaCIKPiArI2luY2x1ZGUgImludGVsX3Jwcy5oIgo+ICAjaW5jbHVkZSAi aW50ZWxfd2FrZXJlZi5oIgo+ICAKPiAgc3RhdGljIGludCBfX2d0X3VucGFyayhzdHJ1Y3QgaW50 ZWxfd2FrZXJlZiAqd2YpCj4gQEAgLTM5LDEyICs0MSw4IEBAIHN0YXRpYyBpbnQgX19ndF91bnBh cmsoc3RydWN0IGludGVsX3dha2VyZWYgKndmKQo+ICAJZ3QtPmF3YWtlID0gaW50ZWxfZGlzcGxh eV9wb3dlcl9nZXQoaTkxNSwgUE9XRVJfRE9NQUlOX0dUX0lSUSk7Cj4gIAlHRU1fQlVHX09OKCFn dC0+YXdha2UpOwo+ICAKPiAtCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoaTkxNSk7Cj4gLQo+ IC0JaTkxNV91cGRhdGVfZ2Z4X3ZhbChpOTE1KTsKPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0g NikKPiAtCQlnZW42X3Jwc19idXN5KGk5MTUpOwo+IC0KPiArCWludGVsX3Jwc191bnBhcmsoJmd0 LT5ycHMpOwo+ICsJaW50ZWxfbGxjX2VuYWJsZSgmZ3QtPmxsYyk7Cj4gIAlpOTE1X3BtdV9ndF91 bnBhcmtlZChpOTE1KTsKPiAgCj4gIAlpbnRlbF9ndF9xdWV1ZV9oYW5nY2hlY2soZ3QpOwo+IEBA IC02NSw4ICs2Myw4IEBAIHN0YXRpYyBpbnQgX19ndF9wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVm ICp3ZikKPiAgCj4gIAlpOTE1X3ZtYV9wYXJrZWQoZ3QpOwo+ICAJaTkxNV9wbXVfZ3RfcGFya2Vk KGk5MTUpOwo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQo+IC0JCWdlbjZfcnBzX2lkbGUo aTkxNSk7Cj4gKwlpbnRlbF9sbGNfZGlzYWJsZSgmZ3QtPmxsYyk7Cj4gKwlpbnRlbF9ycHNfcGFy aygmZ3QtPnJwcyk7Cj4gIAo+ICAJLyogRXZlcnl0aGluZyBzd2l0Y2hlZCBvZmYsIGZsdXNoIGFu eSByZXNpZHVhbCBpbnRlcnJ1cHQganVzdCBpbiBjYXNlICovCj4gIAlpbnRlbF9zeW5jaHJvbml6 ZV9pcnEoaTkxNSk7Cj4gQEAgLTk4LDYgKzk2LDcgQEAgdm9pZCBpbnRlbF9ndF9wbV9pbml0KHN0 cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAkgKiB1c2VyLgo+ICAJICovCj4gIAlpbnRlbF9yYzZfaW5p dCgmZ3QtPnJjNik7Cj4gKwlpbnRlbF9ycHNfaW5pdCgmZ3QtPnJwcyk7Cj4gIH0KPiAgCj4gIHN0 YXRpYyBib29sIHJlc2V0X2VuZ2luZXMoc3RydWN0IGludGVsX2d0ICpndCkKPiBAQCAtMTQxLDEw ICsxNDAsMzkgQEAgdm9pZCBpbnRlbF9ndF9zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBi b29sIGZvcmNlKQo+ICAJCQllbmdpbmUtPnJlc2V0LmZpbmlzaChlbmdpbmUpOwo+ICB9Cj4gIAo+ ICt2b2lkIGludGVsX2d0X3BtX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICt7Cj4gKwlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBp ZDsKPiArCj4gKwkvKiBQb3dlcnNhdmluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0IHdoZW4g aW5zaWRlIGEgVk0gKi8KPiArCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShndC0+aTkxNSkpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWlmIChpc19tb2NrX2d0KGd0KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ aW50ZWxfZ3RfcG1fZ2V0KGd0KTsKPiArCWludGVsX3Jwc19lbmFibGUoJmd0LT5ycHMpOwo+ICsJ aW50ZWxfbGxjX2VuYWJsZSgmZ3QtPmxsYyk7Cj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2lu ZSwgZ3QtPmk5MTUsIGlkKSB7Cj4gKwkJaW50ZWxfZW5naW5lX3BtX2dldChlbmdpbmUpOwo+ICsJ CWVuZ2luZS0+c2VyaWFsKys7IC8qIGZvcmNlIGtlcm5lbCBjb250ZXh0IHJlbG9hZCAqLwo+ICsJ CWludGVsX2VuZ2luZV9wbV9wdXQoZW5naW5lKTsKPiArCX0KPiArCj4gKwlpbnRlbF9ndF9wbV9w dXQoZ3QpOwo+ICt9Cj4gKwo+ICB2b2lkIGludGVsX2d0X3BtX2Rpc2FibGUoc3RydWN0IGludGVs X2d0ICpndCkKPiAgewo+IC0JaWYgKCFpc19tb2NrX2d0KGd0KSkKPiAtCQlpbnRlbF9zYW5pdGl6 ZV9ndF9wb3dlcnNhdmUoZ3QtPmk5MTUpOwo+ICsJaWYgKGlzX21vY2tfZ3QoZ3QpKQo+ICsJCXJl dHVybjsKPiArCj4gKwlpbnRlbF9yYzZfZGlzYWJsZSgmZ3QtPnJjNik7Cj4gKwlpbnRlbF9sbGNf ZGlzYWJsZSgmZ3QtPmxsYyk7Cj4gKwlpbnRlbF9ycHNfZGlzYWJsZSgmZ3QtPnJwcyk7Cj4gIH0K PiAgCj4gIHZvaWQgaW50ZWxfZ3RfcG1fZmluaShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+IEBAIC0x NjUsNiArMTkzLDcgQEAgaW50IGludGVsX2d0X3Jlc3VtZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ ICAJICogYWxsb3dpbmcgdXMgdG8gZml4dXAgdGhlIHVzZXIgY29udGV4dHMgb24gdGhlaXIgZmly c3QgcGluLgo+ICAJICovCj4gIAlpbnRlbF9ndF9wbV9nZXQoZ3QpOwo+ICsKPiAgCWludGVsX3Vu Y29yZV9mb3JjZXdha2VfZ2V0KGd0LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ICAJaW50ZWxf cmM2X3Nhbml0aXplKCZndC0+cmM2KTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2d0X3BtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9n dF9wbS5oCj4gaW5kZXggMGVkODdkYTRiYjY4Li5kZjUwZjg1Mzc0OGQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmgKPiBAQCAtNDAsNiArNDAsNyBAQCBzdGF0aWMgaW5s aW5lIGludCBpbnRlbF9ndF9wbV93YWl0X2Zvcl9pZGxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4g IHZvaWQgaW50ZWxfZ3RfcG1faW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKPiAgdm9p ZCBpbnRlbF9ndF9wbV9pbml0KHN0cnVjdCBpbnRlbF9ndCAqZ3QpOwo+ICB2b2lkIGludGVsX2d0 X3BtX2Rpc2FibGUoc3RydWN0IGludGVsX2d0ICpndCk7Cj4gK3ZvaWQgaW50ZWxfZ3RfcG1fZW5h YmxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpOwo+ICB2b2lkIGludGVsX2d0X3BtX2Zpbmkoc3RydWN0 IGludGVsX2d0ICpndCk7Cj4gIAo+ICB2b2lkIGludGVsX2d0X3Nhbml0aXplKHN0cnVjdCBpbnRl bF9ndCAqZ3QsIGJvb2wgZm9yY2UpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3Rf dHlwZXMuaAo+IGluZGV4IDk4MDk3M2U2NmU3Zi4uZTRiZDIzZWI4MjkwIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3R5cGVzLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oCj4gQEAgLTIwLDYgKzIwLDcgQEAKPiAg I2luY2x1ZGUgImludGVsX2xsY190eXBlcy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcmVzZXRfdHlw ZXMuaCIKPiAgI2luY2x1ZGUgImludGVsX3JjNl90eXBlcy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxf cnBzX3R5cGVzLmgiCj4gICNpbmNsdWRlICJpbnRlbF93YWtlcmVmLmgiCj4gIAo+ICBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZTsKPiBAQCAtODIsNiArODMsNyBAQCBzdHJ1Y3QgaW50ZWxfZ3Qgewo+ ICAKPiAgCXN0cnVjdCBpbnRlbF9sbGMgbGxjOwo+ICAJc3RydWN0IGludGVsX3JjNiByYzY7Cj4g KwlzdHJ1Y3QgaW50ZWxfcnBzIHJwczsKPiAgCj4gIAlrdGltZV90IGxhc3RfaW5pdF90aW1lOwo+ ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYwo+IGluZGV4IDM1MDkzZWI1ZjI0ZS4u Y2ViNzg1Yjc1YzI1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2xsYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMKPiBAQCAt NDgsNyArNDgsNyBAQCBzdGF0aWMgYm9vbCBnZXRfaWFfY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9s bGMgKmxsYywKPiAgCQkJICAgICBzdHJ1Y3QgaWFfY29uc3RhbnRzICpjb25zdHMpCj4gIHsKPiAg CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gbGxjX3RvX2d0KGxsYyktPmk5MTU7Cj4g LQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmaTkxNS0+Z3RfcG0ucnBzOwo+ICsJc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmxsY190b19ndChsbGMpLT5ycHM7Cj4gIAo+ICAJaWYgKHJwcy0+bWF4 X2ZyZXEgPD0gcnBzLT5taW5fZnJlcSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcnBzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uMzBmNTZjNzg2NDY4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX3Jwcy5jCj4gQEAgLTAsMCArMSwxODcyIEBACj4gKy8qCj4gKyAqIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArICoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkg SW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAr I2luY2x1ZGUgImludGVsX2d0LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ndF9pcnEuaCIKPiArI2lu Y2x1ZGUgImludGVsX2d0X3BtX2lycS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCj4gKyNp bmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgo+ICsjaW5jbHVkZSAiLi4vLi4vLi4vcGxhdGZvcm0v eDg2L2ludGVsX2lwcy5oIgo+ICsKPiArLyoKPiArICogTG9jayBwcm90ZWN0aW5nIElQUyByZWxh dGVkIGRhdGEgc3RydWN0dXJlcwo+ICsgKi8KPiArc3RhdGljIERFRklORV9TUElOTE9DSyhtY2hk ZXZfbG9jayk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGludGVsX2d0ICpycHNfdG9fZ3Qoc3RydWN0 IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHJwcywgc3RydWN0 IGludGVsX2d0LCBycHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKnJwc190b19pOTE1KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJcmV0dXJuIHJw c190b19ndChycHMpLT5pOTE1Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGludGVsX3VuY29y ZSAqcnBzX3RvX3VuY29yZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCXJldHVybiBy cHNfdG9fZ3QocnBzKS0+dW5jb3JlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIHJwc19wbV9zYW5p dGl6ZV9tYXNrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIG1hc2spCj4gK3sKPiArCXJldHVy biBtYXNrICYgfnJwcy0+cG1faW50cm1za19tYno7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgcnBz X3BtX21hc2soc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4gK3sKPiArCXUzMiBtYXNr ID0gMDsKPiArCj4gKwkvKiBXZSB1c2UgVVBfRUlfRVhQSVJFRCBpbnRlcnJ1cHRzIGZvciBib3Ro IHVwL2Rvd24gaW4gbWFudWFsIG1vZGUgKi8KPiArCWlmICh2YWwgPiBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCkKPiArCQltYXNrIHw9IChHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfAo+ICsJCQkg R0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8Cj4gKwkJCSBHRU42X1BNX1JQX0RPV05fVElNRU9V VCk7Cj4gKwo+ICsJaWYgKHZhbCA8IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQo+ICsJCW1hc2sg fD0gR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEIHwgR0VONl9QTV9SUF9VUF9USFJFU0hPTEQ7Cj4g Kwo+ICsJbWFzayAmPSBycHMtPnBtX2V2ZW50czsKPiArCj4gKwlyZXR1cm4gcnBzX3BtX3Nhbml0 aXplX21hc2socnBzLCB+bWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJwc19yZXNldF9l aShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCW1lbXNldCgmcnBzLT5laSwgMCwgc2l6 ZW9mKHJwcy0+ZWkpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcnBzX2VuYWJsZV9pbnRlcnJ1 cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJc3RydWN0IGludGVsX2d0ICpndCA9 IHJwc190b19ndChycHMpOwo+ICsKPiArCXJwc19yZXNldF9laShycHMpOwo+ICsKPiArCWlmIChJ U19WQUxMRVlWSUVXKGd0LT5pOTE1KSkKPiArCQkvKiBXYUdzdlJDMFJlc2lkZW5jeU1ldGhvZDp2 bHYgKi8KPiArCQlycHMtPnBtX2V2ZW50cyA9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKPiAr CWVsc2UKPiArCQlycHMtPnBtX2V2ZW50cyA9IChHRU42X1BNX1JQX1VQX1RIUkVTSE9MRCB8Cj4g KwkJCQkgIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQgfAo+ICsJCQkJICBHRU42X1BNX1JQX0RP V05fVElNRU9VVCk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiArCWdl bjZfZ3RfcG1fZW5hYmxlX2lycShndCwgcnBzLT5wbV9ldmVudHMpOwo+ICsJc3Bpbl91bmxvY2tf aXJxKCZndC0+aXJxX2xvY2spOwo+ICsKPiArCWludGVsX3VuY29yZV93cml0ZShndC0+dW5jb3Jl LCBHRU42X1BNSU5UUk1TSywKPiArCQkJICAgcnBzX3BtX21hc2socnBzLCBycHMtPmN1cl9mcmVx KSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjZfcnBzX3Jlc2V0X2ludGVycnVwdHMoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlnZW42X2d0X3BtX3Jlc2V0X2lpcihycHNfdG9f Z3QocnBzKSwgR0VONl9QTV9SUFNfRVZFTlRTKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ2Vu MTFfcnBzX3Jlc2V0X2ludGVycnVwdHMoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwl3 aGlsZSAoZ2VuMTFfZ3RfcmVzZXRfb25lX2lpcihycHNfdG9fZ3QocnBzKSwgMCwgR0VOMTFfR1RQ TSkpCj4gKwkJOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBycHNfcmVzZXRfaW50ZXJydXB0cyhz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNf dG9fZ3QocnBzKTsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwo+ICsJaWYg KElOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEpCj4gKwkJZ2VuMTFfcnBzX3Jlc2V0X2ludGVycnVw dHMocnBzKTsKPiArCWVsc2UKPiArCQlnZW42X3Jwc19yZXNldF9pbnRlcnJ1cHRzKHJwcyk7Cj4g Kwo+ICsJcnBzLT5wbV9paXIgPSAwOwo+ICsJc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2sp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBycHNfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBp bnRlbF9ycHMgKnJwcykKPiArewo+ICsJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19ndChy cHMpOwo+ICsKPiArCXJwcy0+cG1fZXZlbnRzID0gMDsKPiArCj4gKwlpbnRlbF91bmNvcmVfd3Jp dGUoZ3QtPnVuY29yZSwgR0VONl9QTUlOVFJNU0ssCj4gKwkJCSAgIHJwc19wbV9zYW5pdGl6ZV9t YXNrKHJwcywgfjB1KSk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiAr CWdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoZ3QsIEdFTjZfUE1fUlBTX0VWRU5UUyk7Cj4gKwlzcGlu X3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gKwo+ICsJaW50ZWxfc3luY2hyb25pemVfaXJx KGd0LT5pOTE1KTsKPiArCj4gKwkvKgo+ICsJICogTm93IHRoYXQgd2Ugd2lsbCBub3QgYmUgZ2Vu ZXJhdGluZyBhbnkgbW9yZSB3b3JrLCBmbHVzaCBhbnkKPiArCSAqIG91dHN0YW5kaW5nIHRhc2tz LiBBcyB3ZSBhcmUgY2FsbGVkIG9uIHRoZSBSUFMgaWRsZSBwYXRoLAo+ICsJICogd2Ugd2lsbCBy ZXNldCB0aGUgR1BVIHRvIG1pbmltdW0gZnJlcXVlbmNpZXMsIHNvIHRoZSBjdXJyZW50Cj4gKwkg KiBzdGF0ZSBvZiB0aGUgd29ya2VyIGNhbiBiZSBkaXNjYXJkZWQuCj4gKwkgKi8KPiArCWNhbmNl bF93b3JrX3N5bmMoJnJwcy0+d29yayk7Cj4gKwo+ICsJcnBzX3Jlc2V0X2ludGVycnVwdHMocnBz KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjcGFyYW1zIHsKPiArCXUxNiBpOwo+ ICsJdTE2IHQ7Cj4gKwl1MTYgbTsKPiArCXUxNiBjOwo+ICt9IGNwYXJhbXNbXSA9IHsKPiArCXsg MSwgMTMzMywgMzAxLCAyODY2NCB9LAo+ICsJeyAxLCAxMDY2LCAyOTQsIDI0NDYwIH0sCj4gKwl7 IDEsIDgwMCwgMjk0LCAyNTE5MiB9LAo+ICsJeyAwLCAxMzMzLCAyNzYsIDI3NjA1IH0sCj4gKwl7 IDAsIDEwNjYsIDI3NiwgMjc2MDUgfSwKPiArCXsgMCwgODAwLCAyMzEsIDIzNzg0IH0sCj4gK307 Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW41X3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK PiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMp Owo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ ICsJdTggZm1heCwgZm1pbiwgZnN0YXJ0Owo+ICsJdTMyIHJndm1vZGVjdGw7Cj4gKwlpbnQgY19t LCBpOwo+ICsKPiArCWlmIChpOTE1LT5mc2JfZnJlcSA8PSAzMjAwKQo+ICsJCWNfbSA9IDA7Cj4g KwllbHNlIGlmIChpOTE1LT5mc2JfZnJlcSA8PSA0ODAwKQo+ICsJCWNfbSA9IDE7Cj4gKwllbHNl Cj4gKwkJY19tID0gMjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcGFyYW1z KTsgaSsrKSB7Cj4gKwkJaWYgKGNwYXJhbXNbaV0uaSA9PSBjX20gJiYgY3BhcmFtc1tpXS50ID09 IGk5MTUtPm1lbV9mcmVxKSB7Cj4gKwkJCXJwcy0+aXBzLm0gPSBjcGFyYW1zW2ldLm07Cj4gKwkJ CXJwcy0+aXBzLmMgPSBjcGFyYW1zW2ldLmM7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlyZ3Ztb2RlY3RsID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1NT0RFQ1RMKTsK PiArCj4gKwkvKiBTZXQgdXAgbWluLCBtYXgsIGFuZCBjdXIgZm9yIGludGVycnVwdCBoYW5kbGlu ZyAqLwo+ICsJZm1heCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GTUFYX01BU0spID4+IE1FTU1P REVfRk1BWF9TSElGVDsKPiArCWZtaW4gPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1JTl9NQVNL KTsKPiArCWZzdGFydCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GU1RBUlRfTUFTSykgPj4KPiAr CQlNRU1NT0RFX0ZTVEFSVF9TSElGVDsKPiArCURSTV9ERUJVR19EUklWRVIoImZtYXg6ICVkLCBm bWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKPiArCQkJIGZtYXgsIGZtaW4sIGZzdGFydCk7Cj4gKwo+ ICsJcnBzLT5taW5fZnJlcSA9IC1mc3RhcnQ7Cj4gKwlycHMtPm1heF9mcmVxID0gLWZtaW47Cj4g Kwo+ICsJcnBzLT5pZGxlX2ZyZXEgPSBycHMtPm1pbl9mcmVxOwo+ICsJcnBzLT5jdXJfZnJlcSA9 IHJwcy0+aWRsZV9mcmVxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZwo+ICtfX2lw c19jaGlwc2V0X3ZhbChzdHJ1Y3QgaW50ZWxfaXBzICppcHMpCj4gK3sKPiArCXN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSA9Cj4gKwkJcnBzX3RvX3VuY29yZShjb250YWluZXJfb2YoaXBzLCBz dHJ1Y3QgaW50ZWxfcnBzLCBpcHMpKTsKPiArCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllc190 b19tc2VjcyhqaWZmaWVzKSwgZHQ7Cj4gKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKPiArCXU2NCB0 b3RhbCwgZGVsdGE7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xvY2spOwo+ ICsKPiArCS8qCj4gKwkgKiBQcmV2ZW50IGRpdmlzaW9uLWJ5LXplcm8gaWYgd2UgYXJlIGFza2lu ZyB0b28gZmFzdC4KPiArCSAqIEFsc28sIHdlIGRvbid0IGdldCBpbnRlcmVzdGluZyByZXN1bHRz IGlmIHdlIGFyZSBwb2xsaW5nCj4gKwkgKiBmYXN0ZXIgdGhhbiBvbmNlIGluIDEwbXMsIHNvIGp1 c3QgcmV0dXJuIHRoZSBzYXZlZCB2YWx1ZQo+ICsJICogaW4gc3VjaCBjYXNlcy4KPiArCSAqLwo+ ICsJZHQgPSBub3cgLSBpcHMtPmxhc3RfdGltZTE7Cj4gKwlpZiAoZHQgPD0gMTApCj4gKwkJcmV0 dXJuIGlwcy0+Y2hpcHNldF9wb3dlcjsKPiArCj4gKwkvKiBGSVhNRTogaGFuZGxlIHBlci1jb3Vu dGVyIG92ZXJmbG93ICovCj4gKwl0b3RhbCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgRE1J RUMpOwo+ICsJdG90YWwgKz0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBERFJFQyk7Cj4gKwl0 b3RhbCArPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIENTSUVDKTsKPiArCj4gKwlkZWx0YSA9 IHRvdGFsIC0gaXBzLT5sYXN0X2NvdW50MTsKPiArCj4gKwlyZXN1bHQgPSBkaXZfdTY0KGRpdl91 NjQoaXBzLT5tICogZGVsdGEsIGR0KSArIGlwcy0+YywgMTApOwo+ICsKPiArCWlwcy0+bGFzdF9j b3VudDEgPSB0b3RhbDsKPiArCWlwcy0+bGFzdF90aW1lMSA9IG5vdzsKPiArCj4gKwlpcHMtPmNo aXBzZXRfcG93ZXIgPSByZXN1bHQ7Cj4gKwo+ICsJcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsKPiAr c3RhdGljIHVuc2lnbmVkIGxvbmcgaXBzX21jaF92YWwoc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgbSwgeCwgYjsKPiArCXUzMiB0c2ZzOwo+ICsKPiAr CXRzZnMgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFRTRlMpOwo+ICsJeCA9IGludGVsX3Vu Y29yZV9yZWFkOCh1bmNvcmUsIFRSMSk7Cj4gKwo+ICsJYiA9IHRzZnMgJiBUU0ZTX0lOVFJfTUFT SzsKPiArCW0gPSAodHNmcyAmIFRTRlNfU0xPUEVfTUFTSykgPj4gVFNGU19TTE9QRV9TSElGVDsK PiArCj4gKwlyZXR1cm4gbSAqIHggLyAxMjcgLSBiOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9w eHZpZF90b192ZCh1OCBweHZpZCkKPiArewo+ICsJaWYgKHB4dmlkID09IDApCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJaWYgKHB4dmlkID49IDggJiYgcHh2aWQgPCAzMSkKPiArCQlweHZpZCA9IDMx Owo+ICsKPiArCXJldHVybiAocHh2aWQgKyAyKSAqIDEyNTsKPiArfQo+ICsKPiArc3RhdGljIHUz MiBwdmlkX3RvX2V4dHZpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggcHh2aWQp Cj4gK3sKPiArCWNvbnN0IGludCB2ZCA9IF9weHZpZF90b192ZChweHZpZCk7Cj4gKwo+ICsJaWYg KElOVEVMX0lORk8oaTkxNSktPmlzX21vYmlsZSkKPiArCQlyZXR1cm4gbWF4KHZkIC0gMTEyNSwg MCk7Cj4gKwo+ICsJcmV0dXJuIHZkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2dlbjVfaXBz X3VwZGF0ZShzdHJ1Y3QgaW50ZWxfaXBzICppcHMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSA9Cj4gKwkJcnBzX3RvX3VuY29yZShjb250YWluZXJfb2YoaXBzLCBzdHJ1Y3Qg aW50ZWxfcnBzLCBpcHMpKTsKPiArCXU2NCBub3csIGRlbHRhLCBkdDsKPiArCXUzMiBjb3VudDsK PiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9jayk7Cj4gKwo+ICsJbm93ID0g a3RpbWVfZ2V0X3Jhd19ucygpOwo+ICsJZHQgPSBub3cgLSBpcHMtPmxhc3RfdGltZTI7Cj4gKwlk b19kaXYoZHQsIE5TRUNfUEVSX01TRUMpOwo+ICsKPiArCS8qIERvbid0IGRpdmlkZSBieSAwICov Cj4gKwlpZiAoZHQgPD0gMTApCj4gKwkJcmV0dXJuOwo+ICsKPiArCWNvdW50ID0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCBHRlhFQyk7Cj4gKwlkZWx0YSA9IGNvdW50IC0gaXBzLT5sYXN0X2Nv dW50MjsKPiArCj4gKwlpcHMtPmxhc3RfY291bnQyID0gY291bnQ7Cj4gKwlpcHMtPmxhc3RfdGlt ZTIgPSBub3c7Cj4gKwo+ICsJLyogTW9yZSBtYWdpYyBjb25zdGFudHMuLi4gKi8KPiArCWlwcy0+ Z2Z4X3Bvd2VyID0gZGl2X3U2NChkZWx0YSAqIDExODEsIGR0ICogMTApOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBnZW41X3Jwc191cGRhdGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4g KwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gKwlfX2dlbjVfaXBzX3VwZGF0ZSgmcnBz LT5pcHMpOwo+ICsJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gK30KPiArCj4gK3N0 YXRpYyBib29sIGdlbjVfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKPiAr ewo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ ICsJdTE2IHJndnN3Y3RsOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2Nr KTsKPiArCj4gKwlyZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFkMTYodW5jb3JlLCBNRU1TV0NU TCk7Cj4gKwlpZiAocmd2c3djdGwgJiBNRU1DVExfQ01EX1NUUykgewo+ICsJCURSTV9ERUJVRygi Z3B1IGJ1c3ksIFJDUyBjaGFuZ2UgcmVqZWN0ZWRcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsgLyog c3RpbGwgYnVzeSB3aXRoIGFub3RoZXIgY29tbWFuZCAqLwo+ICsJfQo+ICsKPiArCXZhbCA9IC12 YWw7Cj4gKwo+ICsJcmd2c3djdGwgPQo+ICsJCShNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExf Q01EX1NISUZUKSB8Cj4gKwkJKHZhbCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfAo+ICsJCU1FTUNU TF9TRkNBVk07Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIE1FTVNXQ1RMLCByZ3Zz d2N0bCk7Cj4gKwlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkMTYodW5jb3JlLCBNRU1TV0NUTCk7 Cj4gKwo+ICsJcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7Cj4gKwlpbnRlbF91bmNvcmVfd3Jp dGUxNih1bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4g K30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludGVsX3B4ZnJlcSh1MzIgdmlkZnJlcSkK PiArewo+ICsJaW50IGRpdiA9ICh2aWRmcmVxICYgMHgzZjAwMDApID4+IDE2Owo+ICsJaW50IHBv c3QgPSAodmlkZnJlcSAmIDB4MzAwMCkgPj4gMTI7Cj4gKwlpbnQgcHJlID0gKHZpZGZyZXEgJiAw eDcpOwo+ICsKPiArCWlmICghcHJlKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiBkaXYg KiAxMzMzMzMgLyAocHJlIDw8IHBvc3QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgaW50 IGluaXRfZW1vbihzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCj4gK3sKPiArCXU4IHB4d1sx Nl07Cj4gKwlpbnQgaTsKPiArCj4gKwkvKiBEaXNhYmxlIHRvIHByb2dyYW0gKi8KPiArCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIEVDUiwgMCk7Cj4gKwlpbnRlbF91bmNvcmVfcG9zdGluZ19y ZWFkKHVuY29yZSwgRUNSKTsKPiArCj4gKwkvKiBQcm9ncmFtIGVuZXJneSB3ZWlnaHRzIGZvciB2 YXJpb3VzIGV2ZW50cyAqLwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgU0RFVywgMHgx NTA0MGQwMCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBDU0lFVzAsIDB4MDA3ZjAw MDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgQ1NJRVcxLCAweDFlMjIwMDA0KTsK PiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIENTSUVXMiwgMHgwNDAwMDAwNCk7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKPiArCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBQRVcoaSksIDApOwo+ICsJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKPiArCQlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBERVcoaSksIDApOwo+ICsKPiArCS8qIFByb2dyYW0gUC1zdGF0ZSB3 ZWlnaHRzIHRvIGFjY291bnQgZm9yIGZyZXF1ZW5jeSBwb3dlciBhZGp1c3RtZW50ICovCj4gKwlm b3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewo+ICsJCXUzMiBweHZpZGZyZXEgPSBpbnRlbF91bmNv cmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoaSkpOwo+ICsJCXVuc2lnbmVkIGludCBmcmVxID0gaW50 ZWxfcHhmcmVxKHB4dmlkZnJlcSk7Cj4gKwkJdW5zaWduZWQgaW50IHZpZCA9Cj4gKwkJCShweHZp ZGZyZXEgJiBQWFZGUkVRX1BYX01BU0spID4+IFBYVkZSRVFfUFhfU0hJRlQ7Cj4gKwkJdW5zaWdu ZWQgaW50IHZhbDsKPiArCj4gKwkJdmFsID0gdmlkICogdmlkICogZnJlcSAvIDEwMDAgKiAyNTU7 Cj4gKwkJdmFsIC89IDEyNyAqIDEyNyAqIDkwMDsKPiArCj4gKwkJcHh3W2ldID0gdmFsOwo+ICsJ fQo+ICsJLyogUmVuZGVyIHN0YW5kYnkgc3RhdGVzIGdldCAwIHdlaWdodCAqLwo+ICsJcHh3WzE0 XSA9IDA7Cj4gKwlweHdbMTVdID0gMDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7 Cj4gKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUFhXKGkpLAo+ICsJCQkJICAgcHh3W2kg KiA0ICsgMF0gPDwgMjQgfAo+ICsJCQkJICAgcHh3W2kgKiA0ICsgMV0gPDwgMTYgfAo+ICsJCQkJ ICAgcHh3W2kgKiA0ICsgMl0gPDwgIDggfAo+ICsJCQkJICAgcHh3W2kgKiA0ICsgM10gPDwgIDAp Owo+ICsJfQo+ICsKPiArCS8qIEFkanVzdCBtYWdpYyByZWdzIHRvIG1hZ2ljIHZhbHVlcyAobW9y ZSBleHBlcmltZW50YWwgcmVzdWx0cykgKi8KPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IE9HVzAsIDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgT0dXMSwgMCk7Cj4gKwlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzAsIDB4MDAwMDdmMDApOwo+ICsJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwgRUcxLCAweDAwMDAwMDBlKTsKPiArCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIEVHMiwgMHgwMDBlMDAwMCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBFRzMsIDB4NjgwMDAzMDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUc0LCAw eDQyMDAwMDAwKTsKPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHNSwgMHgwMDE0MDAz MSk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzYsIDApOwo+ICsJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwgRUc3LCAwKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsr KQo+ICsJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFBYV0woaSksIDApOwo+ICsKPiArCS8q IEVuYWJsZSBQTU9OICsgc2VsZWN0IGV2ZW50cyAqLwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwgRUNSLCAweDgwMDAwMDE5KTsKPiArCj4gKwlyZXR1cm4gaW50ZWxfdW5jb3JlX3JlYWQo dW5jb3JlLCBMQ0ZVU0UwMikgJiBMQ0ZVU0VfSElWX01BU0s7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGdlbjVfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCXN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKPiArCXU4IGZzdGFy dCwgdnN0YXJ0Owo+ICsJdTMyIHJndm1vZGVjdGw7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmbWNo ZGV2X2xvY2spOwo+ICsKPiArCXJndm1vZGVjdGwgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUs IE1FTU1PREVDVEwpOwo+ICsKPiArCS8qIEVuYWJsZSB0ZW1wIHJlcG9ydGluZyAqLwo+ICsJaW50 ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBQTU1JU0MsCj4gKwkJCSAgICAgaW50ZWxfdW5jb3Jl X3JlYWQxNih1bmNvcmUsIFBNTUlTQykgfCBNQ1BQQ0VfRU4pOwo+ICsJaW50ZWxfdW5jb3JlX3dy aXRlMTYodW5jb3JlLCBUU0MxLAo+ICsJCQkgICAgIGludGVsX3VuY29yZV9yZWFkMTYodW5jb3Jl LCBUU0MxKSB8IFRTRSk7Cj4gKwo+ICsJLyogMTAwbXMgUkMgZXZhbHVhdGlvbiBpbnRlcnZhbHMg Ki8KPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDVVBFSSwgMTAwMDAwKTsKPiArCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDRE5FSSwgMTAwMDAwKTsKPiArCj4gKwkvKiBTZXQg bWF4L21pbiB0aHJlc2hvbGRzIHRvIDkwbXMgYW5kIDgwbXMgcmVzcGVjdGl2ZWx5ICovCj4gKwlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBSQ0JNQVhBVkcsIDkwMDAwKTsKPiArCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIFJDQk1JTkFWRywgODAwMDApOwo+ICsKPiArCWludGVsX3VuY29y ZV93cml0ZSh1bmNvcmUsIE1FTUlIWVNULCAxKTsKPiArCj4gKwkvKiBTZXQgdXAgbWluLCBtYXgs IGFuZCBjdXIgZm9yIGludGVycnVwdCBoYW5kbGluZyAqLwo+ICsJZnN0YXJ0ID0gKHJndm1vZGVj dGwgJiBNRU1NT0RFX0ZTVEFSVF9NQVNLKSA+Pgo+ICsJCU1FTU1PREVfRlNUQVJUX1NISUZUOwo+ ICsKPiArCXZzdGFydCA9IChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoZnN0YXJ0 KSkgJgo+ICsJCSAgUFhWRlJFUV9QWF9NQVNLKSA+PiBQWFZGUkVRX1BYX1NISUZUOwo+ICsKPiAr CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCj4gKwkJCSAgIE1FTUlOVFJFTiwKPiArCQkJICAg TUVNSU5UX0NYX1NVUFJfRU4gfCBNRU1JTlRfRVZBTF9DSEdfRU4pOwo+ICsKPiArCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIFZJRFNUQVJULCB2c3RhcnQpOwo+ICsJaW50ZWxfdW5jb3JlX3Bv c3RpbmdfcmVhZCh1bmNvcmUsIFZJRFNUQVJUKTsKPiArCj4gKwlyZ3Ztb2RlY3RsIHw9IE1FTU1P REVfU1dNT0RFX0VOOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNTU9ERUNUTCwg cmd2bW9kZWN0bCk7Cj4gKwo+ICsJaWYgKHdhaXRfZm9yX2F0b21pYygoaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBNRU1TV0NUTCkgJgo+ICsJCQkgICAgIE1FTUNUTF9DTURfU1RTKSA9PSAwLCAx MCkpCj4gKwkJRFJNX0VSUk9SKCJzdHVjayB0cnlpbmcgdG8gY2hhbmdlIHBlcmYgbW9kZVxuIik7 Cj4gKwltZGVsYXkoMSk7Cj4gKwo+ICsJZ2VuNV9ycHNfc2V0KHJwcywgcnBzLT5jdXJfZnJlcSk7 Cj4gKwo+ICsJcnBzLT5pcHMubGFzdF9jb3VudDEgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUs IERNSUVDKTsKPiArCXJwcy0+aXBzLmxhc3RfY291bnQxICs9IGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgRERSRUMpOwo+ICsJcnBzLT5pcHMubGFzdF9jb3VudDEgKz0gaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBDU0lFQyk7Cj4gKwlycHMtPmlwcy5sYXN0X3RpbWUxID0gamlmZmllc190b19t c2VjcyhqaWZmaWVzKTsKPiArCj4gKwlycHMtPmlwcy5sYXN0X2NvdW50MiA9IGludGVsX3VuY29y ZV9yZWFkKHVuY29yZSwgR0ZYRUMpOwo+ICsJcnBzLT5pcHMubGFzdF90aW1lMiA9IGt0aW1lX2dl dF9yYXdfbnMoKTsKPiArCj4gKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiArCj4g KwlycHMtPmlwcy5jb3JyID0gaW5pdF9lbW9uKHVuY29yZSk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjVfcnBzX2Rpc2FibGUoc3RydWN0IGludGVsX3Jw cyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5j b3JlKHJwcyk7Cj4gKwl1MTYgcmd2c3djdGw7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmbWNoZGV2 X2xvY2spOwo+ICsKPiArCXJndnN3Y3RsID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUsIE1F TVNXQ1RMKTsKPiArCj4gKwkvKiBBY2sgaW50ZXJydXB0cywgZGlzYWJsZSBFRkMgaW50ZXJydXB0 ICovCj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1JTlRSRU4sCj4gKwkJCSAgIGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNSU5UUkVOKSAmCj4gKwkJCSAgIH5NRU1JTlRfRVZB TF9DSEdfRU4pOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUlNUUywgTUVN SU5UX0VWQUxfQ0hHKTsKPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIERFSUVSLAo+ICsJ CQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERFSUVSKSAmIH5ERV9QQ1VfRVZFTlQpOwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVJSVIsIERFX1BDVV9FVkVOVCk7Cj4gKwlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBERUlNUiwKPiArCQkJICAgaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBERUlNUikgfCBERV9QQ1VfRVZFTlQpOwo+ICsKPiArCS8qIEdvIGJhY2sgdG8g dGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSAqLwo+ICsJZ2VuNV9ycHNfc2V0KHJwcywgcnBzLT5pZGxl X2ZyZXEpOwo+ICsJbWRlbGF5KDEpOwo+ICsJcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7Cj4g KwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwo+ICsJbWRl bGF5KDEpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdTMyIHJwc19saW1pdHMoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4g K3sKPiArCXUzMiBsaW1pdHM7Cj4gKwo+ICsJLyoKPiArCSAqIE9ubHkgc2V0IHRoZSBkb3duIGxp bWl0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgbG93ZXN0IGxldmVsIHRvIGF2b2lkCj4gKwkgKiBn ZXR0aW5nIG1vcmUgaW50ZXJydXB0cywgb3RoZXJ3aXNlIGxlYXZlIHRoaXMgY2xlYXIuIFRoaXMg cHJldmVudHMgYQo+ICsJICogcmFjZSBpbiB0aGUgaHcgd2hlbiBjb21pbmcgb3V0IG9mIHJjNjog VGhlcmUncyBhIHRpbnkgd2luZG93IHdoZXJlCj4gKwkgKiB0aGUgaHcgcnVucyBhdCB0aGUgbWlu aW1hbCBjbG9jayBiZWZvcmUgc2VsZWN0aW5nIHRoZSBkZXNpcmVkCj4gKwkgKiBmcmVxdWVuY3ks IGlmIHRoZSBkb3duIHRocmVzaG9sZCBleHBpcmVzIGluIHRoYXQgd2luZG93IHdlIHdpbGwgbm90 Cj4gKwkgKiByZWNlaXZlIGEgZG93biBpbnRlcnJ1cHQuCj4gKwkgKi8KPiArCWlmIChJTlRFTF9H RU4ocnBzX3RvX2k5MTUocnBzKSkgPj0gOSkgewo+ICsJCWxpbWl0cyA9IHJwcy0+bWF4X2ZyZXFf c29mdGxpbWl0IDw8IDIzOwo+ICsJCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQp Cj4gKwkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNDsKPiArCX0gZWxz ZSB7Cj4gKwkJbGltaXRzID0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPDwgMjQ7Cj4gKwkJaWYg KHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPiArCQkJbGltaXRzIHw9IHJwcy0+bWlu X2ZyZXFfc29mdGxpbWl0IDw8IDE2Owo+ICsJfQo+ICsKPiArCXJldHVybiBsaW1pdHM7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHJwc19zZXRfcG93ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCBp bnQgbmV3X3Bvd2VyKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNf dG9fdW5jb3JlKHJwcyk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190 b19pOTE1KHJwcyk7Cj4gKwl1MzIgdGhyZXNob2xkX3VwID0gMCwgdGhyZXNob2xkX2Rvd24gPSAw OyAvKiBpbiAlICovCj4gKwl1MzIgZWlfdXAgPSAwLCBlaV9kb3duID0gMDsKPiArCj4gKwlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZycHMtPnBvd2VyLm11dGV4KTsKPiArCj4gKwlpZiAobmV3X3Bvd2Vy ID09IHJwcy0+cG93ZXIubW9kZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogTm90ZSB0aGUgdW5p dHMgaGVyZSBhcmUgbm90IGV4YWN0bHkgMXVzLCBidXQgMTI4MG5zLiAqLwo+ICsJc3dpdGNoIChu ZXdfcG93ZXIpIHsKPiArCWNhc2UgTE9XX1BPV0VSOgo+ICsJCS8qIFVwY2xvY2sgaWYgbW9yZSB0 aGFuIDk1JSBidXN5IG92ZXIgMTZtcyAqLwo+ICsJCWVpX3VwID0gMTYwMDA7Cj4gKwkJdGhyZXNo b2xkX3VwID0gOTU7Cj4gKwo+ICsJCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gODUlIGJ1c3kg b3ZlciAzMm1zICovCj4gKwkJZWlfZG93biA9IDMyMDAwOwo+ICsJCXRocmVzaG9sZF9kb3duID0g ODU7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBCRVRXRUVOOgo+ICsJCS8qIFVwY2xvY2sgaWYg bW9yZSB0aGFuIDkwJSBidXN5IG92ZXIgMTNtcyAqLwo+ICsJCWVpX3VwID0gMTMwMDA7Cj4gKwkJ dGhyZXNob2xkX3VwID0gOTA7Cj4gKwo+ICsJCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gNzUl IGJ1c3kgb3ZlciAzMm1zICovCj4gKwkJZWlfZG93biA9IDMyMDAwOwo+ICsJCXRocmVzaG9sZF9k b3duID0gNzU7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBISUdIX1BPV0VSOgo+ICsJCS8qIFVw Y2xvY2sgaWYgbW9yZSB0aGFuIDg1JSBidXN5IG92ZXIgMTBtcyAqLwo+ICsJCWVpX3VwID0gMTAw MDA7Cj4gKwkJdGhyZXNob2xkX3VwID0gODU7Cj4gKwo+ICsJCS8qIERvd25jbG9jayBpZiBsZXNz IHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1zICovCj4gKwkJZWlfZG93biA9IDMyMDAwOwo+ICsJCXRo cmVzaG9sZF9kb3duID0gNjA7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJLyogV2hlbiBieXQg Y2FuIHN1cnZpdmUgd2l0aG91dCBzeXN0ZW0gaGFuZyB3aXRoIGR5bmFtaWMKPiArCSAqIHN3IGZy ZXEgYWRqdXN0bWVudHMsIHRoaXMgcmVzdHJpY3Rpb24gY2FuIGJlIGxpZnRlZC4KPiArCSAqLwo+ ICsJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCj4gKwkJZ290byBza2lwX2h3X3dyaXRlOwo+ICsK PiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfVVBfRUksCj4gKwkJCSAgIEdU X0lOVEVSVkFMX0ZST01fVVMoaTkxNSwgZWlfdXApKTsKPiArCWludGVsX3VuY29yZV93cml0ZSh1 bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xELAo+ICsJCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VT KGk5MTUsCj4gKwkJCQkJICAgICAgIGVpX3VwICogdGhyZXNob2xkX3VwIC8gMTAwKSk7Cj4gKwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLAo+ICsJCQkgICBH VF9JTlRFUlZBTF9GUk9NX1VTKGk5MTUsIGVpX2Rvd24pKTsKPiArCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsCj4gKwkJCSAgIEdUX0lOVEVSVkFMX0ZS T01fVVMoaTkxNSwKPiArCQkJCQkgICAgICAgZWlfZG93biAqIHRocmVzaG9sZF9kb3duIC8gMTAw KSk7Cj4gKwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9DT05UUk9MLAo+ ICsJCQkgICAoSU5URUxfR0VOKGk5MTUpID4gOSA/IDAgOiBHRU42X1JQX01FRElBX1RVUkJPKSB8 Cj4gKwkJCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAo+ICsJCQkgICBHRU42X1JQ X01FRElBX0lTX0dGWCB8Cj4gKwkJCSAgIEdFTjZfUlBfRU5BQkxFIHwKPiArCQkJICAgR0VONl9S UF9VUF9CVVNZX0FWRyB8Cj4gKwkJCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Cj4gKwo+ICtz a2lwX2h3X3dyaXRlOgo+ICsJcnBzLT5wb3dlci5tb2RlID0gbmV3X3Bvd2VyOwo+ICsJcnBzLT5w b3dlci51cF90aHJlc2hvbGQgPSB0aHJlc2hvbGRfdXA7Cj4gKwlycHMtPnBvd2VyLmRvd25fdGhy ZXNob2xkID0gdGhyZXNob2xkX2Rvd247Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjZfcnBz X3NldF90aHJlc2hvbGRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQo+ICt7Cj4gKwlp bnQgbmV3X3Bvd2VyOwo+ICsKPiArCW5ld19wb3dlciA9IHJwcy0+cG93ZXIubW9kZTsKPiArCXN3 aXRjaCAocnBzLT5wb3dlci5tb2RlKSB7Cj4gKwljYXNlIExPV19QT1dFUjoKPiArCQlpZiAodmFs ID4gcnBzLT5lZmZpY2llbnRfZnJlcSArIDEgJiYKPiArCQkgICAgdmFsID4gcnBzLT5jdXJfZnJl cSkKPiArCQkJbmV3X3Bvd2VyID0gQkVUV0VFTjsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEJF VFdFRU46Cj4gKwkJaWYgKHZhbCA8PSBycHMtPmVmZmljaWVudF9mcmVxICYmCj4gKwkJICAgIHZh bCA8IHJwcy0+Y3VyX2ZyZXEpCj4gKwkJCW5ld19wb3dlciA9IExPV19QT1dFUjsKPiArCQllbHNl IGlmICh2YWwgPj0gcnBzLT5ycDBfZnJlcSAmJgo+ICsJCQkgdmFsID4gcnBzLT5jdXJfZnJlcSkK PiArCQkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEhJ R0hfUE9XRVI6Cj4gKwkJaWYgKHZhbCA8IChycHMtPnJwMV9mcmVxICsgcnBzLT5ycDBfZnJlcSkg Pj4gMSAmJgo+ICsJCSAgICB2YWwgPCBycHMtPmN1cl9mcmVxKQo+ICsJCQluZXdfcG93ZXIgPSBC RVRXRUVOOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJLyogTWF4L21pbiBiaW5zIGFyZSBzcGVjaWFs ICovCj4gKwlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQo+ICsJCW5ld19wb3dl ciA9IExPV19QT1dFUjsKPiArCWlmICh2YWwgPj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCj4g KwkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKPiArCj4gKwltdXRleF9sb2NrKCZycHMtPnBvd2Vy Lm11dGV4KTsKPiArCWlmIChycHMtPnBvd2VyLmludGVyYWN0aXZlKQo+ICsJCW5ld19wb3dlciA9 IEhJR0hfUE9XRVI7Cj4gKwlycHNfc2V0X3Bvd2VyKHJwcywgbmV3X3Bvd2VyKTsKPiArCW11dGV4 X3VubG9jaygmcnBzLT5wb3dlci5tdXRleCk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfcnBzX21h cmtfaW50ZXJhY3RpdmUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBib29sIGludGVyYWN0aXZlKQo+ ICt7Cj4gKwlpZiAoIXJwcy0+ZW5hYmxlZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbXV0ZXhfbG9j aygmcnBzLT5wb3dlci5tdXRleCk7Cj4gKwlpZiAoaW50ZXJhY3RpdmUpIHsKPiArCQlpZiAoIXJw cy0+cG93ZXIuaW50ZXJhY3RpdmUrKyAmJiBycHMtPmFjdGl2ZSkKPiArCQkJcnBzX3NldF9wb3dl cihycHMsIEhJR0hfUE9XRVIpOwo+ICsJfSBlbHNlIHsKPiArCQlHRU1fQlVHX09OKCFycHMtPnBv d2VyLmludGVyYWN0aXZlKTsKPiArCQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07Cj4gKwl9Cj4g KwltdXRleF91bmxvY2soJnJwcy0+cG93ZXIubXV0ZXgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGdlbjZfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKPiArewo+ICsJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJdTMyIHN3cmVx Owo+ICsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKPiArCQlzd3JlcSA9IEdFTjlfRlJF UVVFTkNZKHZhbCk7Cj4gKwllbHNlIGlmIChJU19IQVNXRUxMKGk5MTUpIHx8IElTX0JST0FEV0VM TChpOTE1KSkKPiArCQlzd3JlcSA9IEhTV19GUkVRVUVOQ1kodmFsKTsKPiArCWVsc2UKPiArCQlz d3JlcSA9IChHRU42X0ZSRVFVRU5DWSh2YWwpIHwKPiArCQkJIEdFTjZfT0ZGU0VUKDApIHwKPiAr CQkJIEdFTjZfQUdHUkVTU0lWRV9UVVJCTyk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBHRU42X1JQTlNXUkVRLCBzd3JlcSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdmx2X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKPiAr CWludCBlcnI7Cj4gKwo+ICsJdmx2X3B1bml0X2dldChpOTE1KTsKPiArCWVyciA9IHZsdl9wdW5p dF93cml0ZShpOTE1LCBQVU5JVF9SRUdfR1BVX0ZSRVFfUkVRLCB2YWwpOwo+ICsJdmx2X3B1bml0 X3B1dChpOTE1KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJw c19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKPiArCWludCBlcnI7Cj4gKwo+ ICsJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKHZh bCA9PSBycHMtPmxhc3RfZnJlcSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoSVNfVkFMTEVZ VklFVyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKQo+ICsJCWVyciA9IHZsdl9ycHNfc2V0 KHJwcywgdmFsKTsKPiArCWVsc2UKPiArCQllcnIgPSBnZW42X3Jwc19zZXQocnBzLCB2YWwpOwo+ ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWdlbjZfcnBzX3NldF90aHJlc2hv bGRzKHJwcywgdmFsKTsKPiArCXJwcy0+bGFzdF9mcmVxID0gdmFsOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX3Jwc191bnBhcmsoc3RydWN0IGludGVsX3JwcyAqcnBz KQo+ICt7Cj4gKwl1OCBmcmVxOwo+ICsKPiArCWlmICghcnBzLT5lbmFibGVkKQo+ICsJCXJldHVy bjsKPiArCj4gKwkvKgo+ICsJICogVXNlIHRoZSB1c2VyJ3MgZGVzaXJlZCBmcmVxdWVuY3kgYXMg YSBndWlkZSwgYnV0IGZvciBiZXR0ZXIKPiArCSAqIHBlcmZvcm1hbmNlLCBqdW1wIGRpcmVjdGx5 IHRvIFJQZSBhcyBvdXIgc3RhcnRpbmcgZnJlcXVlbmN5Lgo+ICsJICovCj4gKwltdXRleF9sb2Nr KCZycHMtPmxvY2spOwo+ICsJcnBzLT5hY3RpdmUgPSB0cnVlOwo+ICsJZnJlcSA9IG1heChycHMt PmN1cl9mcmVxLCBycHMtPmVmZmljaWVudF9mcmVxKSwKPiArCWZyZXEgPSBjbGFtcChmcmVxLCBy cHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpOwo+ICsJaW50 ZWxfcnBzX3NldChycHMsIGZyZXEpOwo+ICsJcnBzLT5sYXN0X2FkaiA9IDA7Cj4gKwltdXRleF91 bmxvY2soJnJwcy0+bG9jayk7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihycHNfdG9faTkxNShycHMp KSA+PSA2KQo+ICsJCXJwc19lbmFibGVfaW50ZXJydXB0cyhycHMpOwo+ICsKPiArCWlmIChJU19H RU4ocnBzX3RvX2k5MTUocnBzKSwgNSkpCj4gKwkJZ2VuNV9ycHNfdXBkYXRlKHJwcyk7Cj4gK30K PiArCj4gK3ZvaWQgaW50ZWxfcnBzX3Bhcmsoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwo+ ICsJaWYgKCFycHMtPmVuYWJsZWQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChJTlRFTF9HRU4o aTkxNSkgPj0gNikKPiArCQlycHNfZGlzYWJsZV9pbnRlcnJ1cHRzKHJwcyk7Cj4gKwo+ICsJcnBz LT5hY3RpdmUgPSBmYWxzZTsKPiArCWlmIChycHMtPmxhc3RfZnJlcSA8PSBycHMtPmlkbGVfZnJl cSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBwdW5pdCBkZWxheXMgdGhlIHdy aXRlIG9mIHRoZSBmcmVxdWVuY3kgYW5kIHZvbHRhZ2UgdW50aWwgaXQKPiArCSAqIGRldGVybWlu ZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1c2FnZSB3ZSBkb24ndCB3YW50IHRv Cj4gKwkgKiB3YXN0ZSBwb3dlciBjaGFuZ2luZyB0aGUgZnJlcXVlbmN5IGlmIHRoZSBHUFUgaXMg c2xlZXBpbmcgKHJjNikuCj4gKwkgKiBIb3dldmVyLCB0aGUgR1BVIGFuZCBkcml2ZXIgaXMgbm93 IGlkbGUgYW5kIHdlIGRvIG5vdCB3YW50IHRvIGRlbGF5Cj4gKwkgKiBzd2l0Y2hpbmcgdG8gbWlu aW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkgYXMgd2UgZG8KPiArCSAq IG5vdCBleHBlY3QgdG8gYmUgd29rZW4gaW4gdGhlIG5lYXIgZnV0dXJlIGFuZCBzbyBtdXN0IGZs dXNoIHRoZQo+ICsJICogY2hhbmdlIGJ5IHdha2luZyB0aGUgZGV2aWNlLgo+ICsJICoKPiArCSAq IFdlIGNob29zZSB0byB0YWtlIHRoZSBtZWRpYSBwb3dlcndlbGwgKGVpdGhlciB3b3VsZCBkbyB0 byB0cmljayB0aGUKPiArCSAqIHB1bml0IGludG8gY29tbWl0dGluZyB0aGUgdm9sdGFnZSBjaGFu Z2UpIGFzIHRoYXQgdGFrZXMgYSBsb3QgbGVzcwo+ICsJICogcG93ZXIgdGhhbiB0aGUgcmVuZGVy IHBvd2Vyd2VsbC4KPiArCSAqLwo+ICsJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQocnBzX3Rv X3VuY29yZShycHMpLCBGT1JDRVdBS0VfTUVESUEpOwo+ICsJcnBzX3NldChycHMsIHJwcy0+aWRs ZV9mcmVxKTsKPiArCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KHJwc190b191bmNvcmUocnBz KSwgRk9SQ0VXQUtFX01FRElBKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9ycHNfYm9vc3Qoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZy cS0+ZW5naW5lLT5ndC0+cnBzOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlpZiAo aTkxNV9yZXF1ZXN0X3NpZ25hbGVkKHJxKSB8fCAhcnBzLT5hY3RpdmUpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCS8qIFNlcmlhbGl6ZXMgd2l0aCBpOTE1X3JlcXVlc3RfcmV0aXJlKCkgKi8KPiArCXNw aW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwo+ICsJaWYgKCFpOTE1X3JlcXVlc3Rf aGFzX3dhaXRib29zdChycSkgJiYKPiArCSAgICAhZG1hX2ZlbmNlX2lzX3NpZ25hbGVkX2xvY2tl ZCgmcnEtPmZlbmNlKSkgewo+ICsJCXJxLT5mbGFncyB8PSBJOTE1X1JFUVVFU1RfV0FJVEJPT1NU Owo+ICsKPiArCQlpZiAoIWF0b21pY19mZXRjaF9pbmMoJnJwcy0+bnVtX3dhaXRlcnMpICYmCj4g KwkJICAgIFJFQURfT05DRShycHMtPmN1cl9mcmVxKSA8IHJwcy0+Ym9vc3RfZnJlcSkKPiArCQkJ c2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKPiArCj4gKwkJYXRvbWljX2luYygmcnBzLT5ib29z dHMpOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsK PiArfQo+ICsKPiAraW50IGludGVsX3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2 YWwpCj4gK3sKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJw cy0+bG9jayk7Cj4gKwlHRU1fQlVHX09OKHZhbCA+IHJwcy0+bWF4X2ZyZXEpOwo+ICsJR0VNX0JV R19PTih2YWwgPCBycHMtPm1pbl9mcmVxKTsKPiArCj4gKwlpZiAocnBzLT5hY3RpdmUpIHsKPiAr CQllcnIgPSBycHNfc2V0KHJwcywgdmFsKTsKPiArCj4gKwkJLyoKPiArCQkgKiBNYWtlIHN1cmUg d2UgY29udGludWUgdG8gZ2V0IGludGVycnVwdHMKPiArCQkgKiB1bnRpbCB3ZSBoaXQgdGhlIG1p bmltdW0gb3IgbWF4aW11bSBmcmVxdWVuY2llcy4KPiArCQkgKi8KPiArCQlpZiAoSU5URUxfR0VO KHJwc190b19pOTE1KHJwcykpID49IDYpIHsKPiArCQkJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ICsKPiArCQkJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwgR0VONl9SUF9JTlRFUlJVUFRfTElNSVRTLAo+ICsJCQkJCSAgIHJwc19saW1pdHMocnBz LCB2YWwpKTsKPiArCj4gKwkJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUE1JTlRS TVNLLAo+ICsJCQkJCSAgIHJwc19wbV9tYXNrKHJwcywgdmFsKSk7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCWlmIChlcnIgPT0gMCkKPiArCQlycHMtPmN1cl9mcmVxID0gdmFsOwo+ICsKPiArCXJldHVy biBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjZfcnBzX2luaXQoc3RydWN0IGludGVs X3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190 b19pOTE1KHJwcyk7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5j b3JlKHJwcyk7Cj4gKwo+ICsJLyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2Yg NTBNSHogKi8KPiArCj4gKwkvKiBzdGF0aWMgdmFsdWVzIGZyb20gSFc6IFJQMCA+IFJQMSA+IFJQ biAobWluX2ZyZXEpICovCj4gKwlpZiAoSVNfR0VOOV9MUChpOTE1KSkgewo+ICsJCXUzMiBycF9z dGF0ZV9jYXAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEJYVF9SUF9TVEFURV9DQVApOwo+ ICsKPiArCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOwo+ICsJ CXJwcy0+cnAxX2ZyZXEgPSAocnBfc3RhdGVfY2FwID4+ICA4KSAmIDB4ZmY7Cj4gKwkJcnBzLT5t aW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDApICYgMHhmZjsKPiArCX0gZWxzZSB7Cj4gKwkJ dTMyIHJwX3N0YXRlX2NhcCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VONl9SUF9TVEFU RV9DQVApOwo+ICsKPiArCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAw eGZmOwo+ICsJCXJwcy0+cnAxX2ZyZXEgPSAocnBfc3RhdGVfY2FwID4+ICA4KSAmIDB4ZmY7Cj4g KwkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsKPiArCX0KPiAr Cj4gKwkvKiBod19tYXggPSBSUDAgdW50aWwgd2UgY2hlY2sgZm9yIG92ZXJjbG9ja2luZyAqLwo+ ICsJcnBzLT5tYXhfZnJlcSA9IHJwcy0+cnAwX2ZyZXE7Cj4gKwo+ICsJcnBzLT5lZmZpY2llbnRf ZnJlcSA9IHJwcy0+cnAxX2ZyZXE7Cj4gKwlpZiAoSVNfSEFTV0VMTChpOTE1KSB8fCBJU19CUk9B RFdFTEwoaTkxNSkgfHwKPiArCSAgICBJU19HRU45X0JDKGk5MTUpIHx8IElOVEVMX0dFTihpOTE1 KSA+PSAxMCkgewo+ICsJCXUzMiBkZGNjX3N0YXR1cyA9IDA7Cj4gKwo+ICsJCWlmIChzYW5keWJy aWRnZV9wY29kZV9yZWFkKGk5MTUsCj4gKwkJCQkJICAgSFNXX1BDT0RFX0RZTkFNSUNfRFVUWV9D WUNMRV9DT05UUk9MLAo+ICsJCQkJCSAgICZkZGNjX3N0YXR1cywgTlVMTCkgPT0gMCkKPiArCQkJ cnBzLT5lZmZpY2llbnRfZnJlcSA9Cj4gKwkJCQljbGFtcF90KHU4LAo+ICsJCQkJCShkZGNjX3N0 YXR1cyA+PiA4KSAmIDB4ZmYsCj4gKwkJCQkJcnBzLT5taW5fZnJlcSwKPiArCQkJCQlycHMtPm1h eF9mcmVxKTsKPiArCX0KPiArCj4gKwlpZiAoSVNfR0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9HRU4o aTkxNSkgPj0gMTApIHsKPiArCQkvKiBTdG9yZSB0aGUgZnJlcXVlbmN5IHZhbHVlcyBpbiAxNi42 NiBNSFogdW5pdHMsIHdoaWNoIGlzCj4gKwkJICogdGhlIG5hdHVyYWwgaGFyZHdhcmUgdW5pdCBm b3IgU0tMCj4gKwkJICovCj4gKwkJcnBzLT5ycDBfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOwo+ ICsJCXJwcy0+cnAxX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKPiArCQlycHMtPm1pbl9mcmVx ICo9IEdFTjlfRlJFUV9TQ0FMRVI7Cj4gKwkJcnBzLT5tYXhfZnJlcSAqPSBHRU45X0ZSRVFfU0NB TEVSOwo+ICsJCXJwcy0+ZWZmaWNpZW50X2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKPiArCX0K PiArfQo+ICsKPiArc3RhdGljIGJvb2wgcnBzX3Jlc2V0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK PiArewo+ICsJLyogZm9yY2UgYSByZXNldCAqLwo+ICsJcnBzLT5wb3dlci5tb2RlID0gLTE7Cj4g KwlycHMtPmxhc3RfZnJlcSA9IC0xOwo+ICsKPiArCWlmIChycHNfc2V0KHJwcywgcnBzLT5taW5f ZnJlcSkpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBSUFMgdG8gaW5pdGlhbCB2 YWx1ZXNcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlycHMtPmN1cl9mcmVx ID0gcnBzLT5taW5fZnJlcTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsvKiBTZWUgdGhl IEdlbjlfR1RfUE1fUHJvZ3JhbW1pbmdfR3VpZGUgZG9jIGZvciB0aGUgYmVsb3cgKi8KPiArc3Rh dGljIGJvb2wgZ2VuOV9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ICsKPiArCS8q IFByb2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyAqLwo+ICsJaWYgKElTX0dF TihpOTE1LCA5KSkKPiArCQlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1ZJ REVPX0ZSRVEsCj4gKwkJCQkgICAgICBHRU45X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7Cj4g Kwo+ICsJLyogMSBzZWNvbmQgdGltZW91dCAqLwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVu Y29yZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsCj4gKwkJCSAgICAgIEdUX0lOVEVSVkFMX0ZST01f VVMoaTkxNSwgMTAwMDAwMCkpOwo+ICsKPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUs IEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDB4YSk7Cj4gKwo+ICsJcmV0dXJuIHJwc19yZXNldChy cHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBnZW44X3Jwc19lbmFibGUoc3RydWN0IGludGVs X3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9f dW5jb3JlKHJwcyk7Cj4gKwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9S Q19WSURFT19GUkVRLAo+ICsJCQkgICAgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsK PiArCj4gKwkvKiBOQjogRG9jcyBzYXkgMXMsIGFuZCAxMDAwMDAwIC0gd2hpY2ggYXJlbid0IGVx dWl2YWxlbnQgKi8KPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9X Tl9USU1FT1VULAo+ICsJCQkgICAgICAxMDAwMDAwMDAgLyAxMjgpOyAvKiAxIHNlY29uZCB0aW1l b3V0ICovCj4gKwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9JRExF X0hZU1RFUlNJUywgMTApOwo+ICsKPiArCXJldHVybiBycHNfcmVzZXQocnBzKTsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgZ2VuNl9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiAr ewo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ ICsKPiArCS8qIFBvd2VyIGRvd24gaWYgY29tcGxldGVseSBpZGxlIGZvciBvdmVyIDUwbXMgKi8K PiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULCA1 MDAwMCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0lETEVfSFlT VEVSU0lTLCAxMCk7Cj4gKwo+ICsJcmV0dXJuIHJwc19yZXNldChycHMpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGNodl9ycHNfbWF4X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwl1 MzIgdmFsOwo+ICsKPiArCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIEZCX0dGWF9GTUFYX0FU X1ZNQVhfRlVTRSk7Cj4gKwo+ICsJc3dpdGNoIChSVU5USU1FX0lORk8oaTkxNSktPnNzZXUuZXVf dG90YWwpIHsKPiArCWNhc2UgODoKPiArCQkvKiAoMiAqIDQpIGNvbmZpZyAqLwo+ICsJCXZhbCA+ Pj0gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M0RVVfRlVTRV9TSElGVDsKPiArCQlicmVhazsKPiAr CWNhc2UgMTI6Cj4gKwkJLyogKDIgKiA2KSBjb25maWcgKi8KPiArCQl2YWwgPj49IEZCX0dGWF9G TUFYX0FUX1ZNQVhfMlNTNkVVX0ZVU0VfU0hJRlQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE2Ogo+ ICsJCS8qICgyICogOCkgY29uZmlnICovCj4gKwlkZWZhdWx0Ogo+ICsJCS8qIFNldHRpbmcgKDIg KiA4KSBNaW4gUlAwIGZvciBhbnkgb3RoZXIgY29tYmluYXRpb24gKi8KPiArCQl2YWwgPj49IEZC X0dGWF9GTUFYX0FUX1ZNQVhfMlNTOEVVX0ZVU0VfU0hJRlQ7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIHZhbCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSzsKPiArfQo+ICsKPiArc3Rh dGljIGludCBjaHZfcnBzX3JwZV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJdTMy IHZhbDsKPiArCj4gKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5JVF9HUFVfRFVUWUNZ Q0xFX1JFRyk7Cj4gKwl2YWwgPj49IFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfU0hJRlQ7 Cj4gKwo+ICsJcmV0dXJuIHZhbCAmIFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfTUFTSzsK PiArfQo+ICsKPiArc3RhdGljIGludCBjaHZfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgaW50ZWxfcnBz ICpycHMpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5 MTUocnBzKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkxNSwg RkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKPiArCj4gKwlyZXR1cm4gdmFsICYgRkJfR0ZYX0ZS RVFfRlVTRV9NQVNLOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGNodl9ycHNfbWluX2ZyZXEoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXZhbCA9IHZsdl9wdW5p dF9yZWFkKGk5MTUsIEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRSk7Cj4gKwl2YWwgPj49IEZCX0dG WF9GTUlOX0FUX1ZNSU5fRlVTRV9TSElGVDsKPiArCj4gKwlyZXR1cm4gdmFsICYgRkJfR0ZYX0ZS RVFfRlVTRV9NQVNLOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBjaHZfcnBzX2VuYWJsZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 IHJwc190b191bmNvcmUocnBzKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g cnBzX3RvX2k5MTUocnBzKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJLyogMTogUHJvZ3JhbSBkZWZh dWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTKi8KPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1 bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULCAxMDAwMDAwKTsKPiArCWludGVsX3VuY29yZV93 cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xELCA1OTQwMCk7Cj4gKwlpbnRlbF91 bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05fVEhSRVNIT0xELCAyNDUwMDApOwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9VUF9FSSwgNjYwMDApOwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLCAzNTAwMDAp Owo+ICsKPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfSURMRV9IWVNU RVJTSVMsIDEwKTsKPiArCj4gKwkvKiAyOiBFbmFibGUgUlBTICovCj4gKwlpbnRlbF91bmNvcmVf d3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0NPTlRST0wsCj4gKwkJCSAgICAgIEdFTjZfUlBfTUVE SUFfSFdfTk9STUFMX01PREUgfAo+ICsJCQkgICAgICBHRU42X1JQX01FRElBX0lTX0dGWCB8Cj4g KwkJCSAgICAgIEdFTjZfUlBfRU5BQkxFIHwKPiArCQkJICAgICAgR0VONl9SUF9VUF9CVVNZX0FW RyB8Cj4gKwkJCSAgICAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Cj4gKwo+ICsJLyogU2V0dGlu ZyBGaXhlZCBCaWFzICovCj4gKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOwo+ICsKPiArCXZhbCA9IFZM Vl9PVkVSUklERV9FTiB8IFZMVl9TT0NfVERQX0VOIHwgQ0hWX0JJQVNfQ1BVXzUwX1NPQ181MDsK PiArCXZsdl9wdW5pdF93cml0ZShpOTE1LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwpOwo+ ICsKPiArCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIFBVTklUX1JFR19HUFVfRlJFUV9TVFMp Owo+ICsKPiArCXZsdl9wdW5pdF9wdXQoaTkxNSk7Cj4gKwo+ICsJLyogUlBTIGNvZGUgYXNzdW1l cyBHUExMIGlzIHVzZWQgKi8KPiArCVdBUk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwg IkdQTEwgbm90IGVuYWJsZWRcbiIpOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5h YmxlZD8gJXNcbiIsIHllc25vKHZhbCAmIEdQTExFTkFCTEUpKTsKPiArCURSTV9ERUJVR19EUklW RVIoIkdQVSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKPiArCj4gKwlyZXR1cm4gcnBzX3Jlc2V0 KHJwcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmx2X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJw c190b19pOTE1KHJwcyk7Cj4gKwl1MzIgdmFsLCBycDE7Cj4gKwo+ICsJdmFsID0gdmx2X25jX3Jl YWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRlJFUV9GVVNFKTsKPiArCj4gKwlycDEgPSB2YWwgJiBG Ql9HRlhfRkdVQVJBTlRFRURfRlJFUV9GVVNFX01BU0s7Cj4gKwlycDEgPj49IEZCX0dGWF9GR1VB UkFOVEVFRF9GUkVRX0ZVU0VfU0hJRlQ7Cj4gKwo+ICsJcmV0dXJuIHJwMTsKPiArfQo+ICsKPiAr c3RhdGljIGludCB2bHZfcnBzX21heF9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJ dTMyIHZhbCwgcnAwOwo+ICsKPiArCXZhbCA9IHZsdl9uY19yZWFkKGk5MTUsIElPU0ZfTkNfRkJf R0ZYX0ZSRVFfRlVTRSk7Cj4gKwo+ICsJcnAwID0gKHZhbCAmIEZCX0dGWF9NQVhfRlJFUV9GVVNF X01BU0spID4+IEZCX0dGWF9NQVhfRlJFUV9GVVNFX1NISUZUOwo+ICsJLyogQ2xhbXAgdG8gbWF4 ICovCj4gKwlycDAgPSBtaW5fdCh1MzIsIHJwMCwgMHhlYSk7Cj4gKwo+ICsJcmV0dXJuIHJwMDsK PiArfQo+ICsKPiArc3RhdGljIGludCB2bHZfcnBzX3JwZV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMg KnJwcykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOwo+ICsJdTMyIHZhbCwgcnBlOwo+ICsKPiArCXZhbCA9IHZsdl9uY19yZWFkKGk5MTUs IElPU0ZfTkNfRkJfR0ZYX0ZNQVhfRlVTRV9MTyk7Cj4gKwlycGUgPSAodmFsICYgRkJfRk1BWF9W TUlOX0ZSRVFfTE9fTUFTSykgPj4gRkJfRk1BWF9WTUlOX0ZSRVFfTE9fU0hJRlQ7Cj4gKwl2YWwg PSB2bHZfbmNfcmVhZChpOTE1LCBJT1NGX05DX0ZCX0dGWF9GTUFYX0ZVU0VfSEkpOwo+ICsJcnBl IHw9ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9ISV9NQVNLKSA8PCA1Owo+ICsKPiArCXJldHVy biBycGU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmx2X3Jwc19taW5fZnJlcShzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBz X3RvX2k5MTUocnBzKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0gdmx2X3B1bml0X3JlYWQo aTkxNSwgUFVOSVRfUkVHX0dQVV9MRk0pICYgMHhmZjsKPiArCS8qCj4gKwkgKiBBY2NvcmRpbmcg dG8gdGhlIEJZVCBQdW5pdCBHUFUgdHVyYm8gSEFTIDEuMS42LjMgdGhlIG1pbmltdW0gdmFsdWUK PiArCSAqIGZvciB0aGUgbWluaW11bSBmcmVxdWVuY3kgaW4gR1BMTCBtb2RlIGlzIDB4YzEuIENv bnRyYXJ5IHRvIHRoaXMgb24KPiArCSAqIGEgQllULU0gQjAgdGhlIGFib3ZlIHJlZ2lzdGVyIGNv bnRhaW5zIDB4YmYuIE1vcmVvdmVyIHdoZW4gc2V0dGluZwo+ICsJICogYSBmcmVxdWVuY3kgUHVu aXQgd2lsbCBub3QgYWxsb3cgdmFsdWVzIGJlbG93IDB4YzAuIENsYW1wIGl0IDB4YzAKPiArCSAq IHRvIG1ha2Ugc3VyZSBpdCBtYXRjaGVzIHdoYXQgUHVuaXQgYWNjZXB0cy4KPiArCSAqLwo+ICsJ cmV0dXJuIG1heF90KHUzMiwgdmFsLCAweGMwKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmx2 X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxf dW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCWlu dGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULCAxMDAwMDAw KTsKPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xE LCA1OTQwMCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05f VEhSRVNIT0xELCAyNDUwMDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VO Nl9SUF9VUF9FSSwgNjYwMDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VO Nl9SUF9ET1dOX0VJLCAzNTAwMDApOwo+ICsKPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNv cmUsIEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKPiArCj4gKwlpbnRlbF91bmNvcmVfd3Jp dGVfZncodW5jb3JlLCBHRU42X1JQX0NPTlRST0wsCj4gKwkJCSAgICAgIEdFTjZfUlBfTUVESUFf VFVSQk8gfAo+ICsJCQkgICAgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKPiArCQkJ ICAgICAgR0VONl9SUF9NRURJQV9JU19HRlggfAo+ICsJCQkgICAgICBHRU42X1JQX0VOQUJMRSB8 Cj4gKwkJCSAgICAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAo+ICsJCQkgICAgICBHRU42X1JQX0RP V05fSURMRV9DT05UKTsKPiArCj4gKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOwo+ICsKPiArCS8qIFNl dHRpbmcgRml4ZWQgQmlhcyAqLwo+ICsJdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19U RFBfRU4gfCBWTFZfQklBU19DUFVfMTI1X1NPQ184NzU7Cj4gKwl2bHZfcHVuaXRfd3JpdGUoaTkx NSwgVkxWX1RVUkJPX1NPQ19PVkVSUklERSwgdmFsKTsKPiArCj4gKwl2YWwgPSB2bHZfcHVuaXRf cmVhZChpOTE1LCBQVU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKPiArCj4gKwl2bHZfcHVuaXRfcHV0 KGk5MTUpOwo+ICsKPiArCS8qIFJQUyBjb2RlIGFzc3VtZXMgR1BMTCBpcyB1c2VkICovCj4gKwlX QVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsK PiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJHUExMIGVuYWJsZWQ/ICVzXG4iLCB5ZXNubyh2YWwg JiBHUExMRU5BQkxFKSk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhc biIsIHZhbCk7Cj4gKwo+ICsJcmV0dXJuIHJwc19yZXNldChycHMpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdW5zaWduZWQgbG9uZyBfX2lwc19nZnhfdmFsKHN0cnVjdCBpbnRlbF9pcHMgKmlwcykKPiAr ewo+ICsJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVyX29mKGlwcywgdHlwZW9mKCpy cHMpLCBpcHMpOwo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29y ZShycHMpOwo+ICsJdW5zaWduZWQgbG9uZyB0LCBjb3JyLCBzdGF0ZTEsIGNvcnIyLCBzdGF0ZTI7 Cj4gKwl1MzIgcHh2aWQsIGV4dF92Owo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRl dl9sb2NrKTsKPiArCj4gKwlweHZpZCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUFhWRlJF UShycHMtPmN1cl9mcmVxKSk7Cj4gKwlweHZpZCA9IChweHZpZCA+PiAyNCkgJiAweDdmOwo+ICsJ ZXh0X3YgPSBwdmlkX3RvX2V4dHZpZChycHNfdG9faTkxNShycHMpLCBweHZpZCk7Cj4gKwo+ICsJ c3RhdGUxID0gZXh0X3Y7Cj4gKwo+ICsJLyogUmV2ZWwgaW4gdGhlIGVtcGlyaWNhbGx5IGRlcml2 ZWQgY29uc3RhbnRzICovCj4gKwo+ICsJLyogQ29ycmVjdGlvbiBmYWN0b3IgaW4gMS8xMDAwMDAg dW5pdHMgKi8KPiArCXQgPSBpcHNfbWNoX3ZhbCh1bmNvcmUpOwo+ICsJaWYgKHQgPiA4MCkKPiAr CQljb3JyID0gdCAqIDIzNDkgKyAxMzU5NDA7Cj4gKwllbHNlIGlmICh0ID49IDUwKQo+ICsJCWNv cnIgPSB0ICogOTY0ICsgMjkzMTc7Cj4gKwllbHNlIC8qIDwgNTAgKi8KPiArCQljb3JyID0gdCAq IDMwMSArIDEwMDQ7Cj4gKwo+ICsJY29yciA9IGNvcnIgKiAxNTAxNDIgKiBzdGF0ZTEgLyAxMDAw MCAtIDc4NjQyOwo+ICsJY29yciAvPSAxMDAwMDA7Cj4gKwljb3JyMiA9IGNvcnIgKiBpcHMtPmNv cnI7Cj4gKwo+ICsJc3RhdGUyID0gY29ycjIgKiBzdGF0ZTEgLyAxMDAwMDsKPiArCXN0YXRlMiAv PSAxMDA7IC8qIGNvbnZlcnQgdG8gbVcgKi8KPiArCj4gKwlfX2dlbjVfaXBzX3VwZGF0ZShpcHMp Owo+ICsKPiArCXJldHVybiBpcHMtPmdmeF9wb3dlciArIHN0YXRlMjsKPiArfQo+ICsKPiArdm9p ZCBpbnRlbF9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ICsKPiArCWludGVsX3Vu Y29yZV9mb3JjZXdha2VfZ2V0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwlpZiAoSVNfQ0hF UlJZVklFVyhpOTE1KSkKPiArCQlycHMtPmVuYWJsZWQgPSBjaHZfcnBzX2VuYWJsZShycHMpOwo+ ICsJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKPiArCQlycHMtPmVuYWJsZWQgPSB2bHZf cnBzX2VuYWJsZShycHMpOwo+ICsJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4gKwkJ cnBzLT5lbmFibGVkID0gZ2VuOV9ycHNfZW5hYmxlKHJwcyk7Cj4gKwllbHNlIGlmIChJTlRFTF9H RU4oaTkxNSkgPj0gOCkKPiArCQlycHMtPmVuYWJsZWQgPSBnZW44X3Jwc19lbmFibGUocnBzKTsK PiArCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQo+ICsJCXJwcy0+ZW5hYmxlZCA9IGdl bjZfcnBzX2VuYWJsZShycHMpOwo+ICsJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKPiAr CQlycHMtPmVuYWJsZWQgPSBnZW41X3Jwc19lbmFibGUocnBzKTsKPiArCWludGVsX3VuY29yZV9m b3JjZXdha2VfcHV0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwlpZiAoIXJwcy0+ZW5hYmxl ZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJV0FSTl9PTihycHMtPm1heF9mcmVxIDwgcnBzLT5taW5f ZnJlcSk7Cj4gKwlXQVJOX09OKHJwcy0+aWRsZV9mcmVxID4gcnBzLT5tYXhfZnJlcSk7Cj4gKwo+ ICsJV0FSTl9PTihycHMtPmVmZmljaWVudF9mcmVxIDwgcnBzLT5taW5fZnJlcSk7Cj4gKwlXQVJO X09OKHJwcy0+ZWZmaWNpZW50X2ZyZXEgPiBycHMtPm1heF9mcmVxKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgZ2VuNl9ycHNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiAr CWludGVsX3VuY29yZV93cml0ZShycHNfdG9fdW5jb3JlKHJwcyksIEdFTjZfUlBfQ09OVFJPTCwg MCk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfcnBzX2Rpc2FibGUoc3RydWN0IGludGVsX3JwcyAq cnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1 KHJwcyk7Cj4gKwo+ICsJcnBzLT5lbmFibGVkID0gZmFsc2U7Cj4gKwo+ICsJaWYgKElOVEVMX0dF TihpOTE1KSA+PSA2KQo+ICsJCWdlbjZfcnBzX2Rpc2FibGUocnBzKTsKPiArCWVsc2UgaWYgKElT X0lST05MQUtFX00oaTkxNSkpCj4gKwkJZ2VuNV9ycHNfZGlzYWJsZShycHMpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGJ5dF9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwp Cj4gK3sKPiArCS8qCj4gKwkgKiBOID0gdmFsIC0gMHhiNwo+ICsJICogU2xvdyA9IEZhc3QgPSBH UExMIHJlZiAqIE4KPiArCSAqLwo+ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHJwcy0+Z3Bs bF9yZWZfZnJlcSAqICh2YWwgLSAweGI3KSwgMTAwMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg Ynl0X2ZyZXFfb3Bjb2RlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCkKPiArewo+ICsJ cmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDEwMDAgKiB2YWwsIHJwcy0+Z3BsbF9yZWZfZnJlcSkg KyAweGI3Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNodl9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxf cnBzICpycHMsIGludCB2YWwpCj4gK3sKPiArCS8qCj4gKwkgKiBOID0gdmFsIC8gMgo+ICsJICog Q1UgKHNsb3cpID0gQ1UyeCAoZmFzdCkgLyAyID0gR1BMTCByZWYgKiBOIC8gMgo+ICsJICovCj4g KwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocnBzLT5ncGxsX3JlZl9mcmVxICogdmFsLCAyICog MiAqIDEwMDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNodl9mcmVxX29wY29kZShzdHJ1Y3Qg aW50ZWxfcnBzICpycHMsIGludCB2YWwpCj4gK3sKPiArCS8qIENIViBuZWVkcyBldmVuIHZhbHVl cyAqLwo+ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDIgKiAxMDAwICogdmFsLCBycHMtPmdw bGxfcmVmX2ZyZXEpICogMjsKPiArfQo+ICsKPiAraW50IGludGVsX2dwdV9mcmVxKHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgaW50IHZhbCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0g OSkKPiArCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsICogR1RfRlJFUVVFTkNZX01VTFRJ UExJRVIsCj4gKwkJCQkJIEdFTjlfRlJFUV9TQ0FMRVIpOwo+ICsJZWxzZSBpZiAoSVNfQ0hFUlJZ VklFVyhpOTE1KSkKPiArCQlyZXR1cm4gY2h2X2dwdV9mcmVxKHJwcywgdmFsKTsKPiArCWVsc2Ug aWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCj4gKwkJcmV0dXJuIGJ5dF9ncHVfZnJlcShycHMsIHZh bCk7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSOwo+ ICt9Cj4gKwo+ICtpbnQgaW50ZWxfZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBp bnQgdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19p OTE1KHJwcyk7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQo+ICsJCXJldHVybiBE SVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHRU45X0ZSRVFfU0NBTEVSLAo+ICsJCQkJCSBHVF9GUkVR VUVOQ1lfTVVMVElQTElFUik7Cj4gKwllbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpKQo+ICsJ CXJldHVybiBjaHZfZnJlcV9vcGNvZGUocnBzLCB2YWwpOwo+ICsJZWxzZSBpZiAoSVNfVkFMTEVZ VklFVyhpOTE1KSkKPiArCQlyZXR1cm4gYnl0X2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKPiArCWVs c2UKPiArCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBHVF9GUkVRVUVOQ1lfTVVMVElQ TElFUik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZsdl9pbml0X2dwbGxfcmVmX2ZyZXEoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwo+ICsJcnBzLT5ncGxsX3JlZl9mcmVxID0KPiArCQl2 bHZfZ2V0X2Nja19jbG9jayhpOTE1LCAiR1BMTCByZWYiLAo+ICsJCQkJICBDQ0tfR1BMTF9DTE9D S19DT05UUk9MLAo+ICsJCQkJICBpOTE1LT5jemNsa19mcmVxKTsKPiArCj4gKwlEUk1fREVCVUdf RFJJVkVSKCJHUExMIHJlZmVyZW5jZSBmcmVxOiAlZCBrSHpcbiIsIHJwcy0+Z3BsbF9yZWZfZnJl cSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZsdl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBz ICpycHMpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5 MTUocnBzKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmx2X2lvc2Zfc2JfZ2V0KGk5MTUsCj4gKwkJ CUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAo+ICsJCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwKPiAr CQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOwo+ICsKPiArCXZsdl9pbml0X2dwbGxfcmVmX2ZyZXEo cnBzKTsKPiArCj4gKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5JVF9SRUdfR1BVX0ZS RVFfU1RTKTsKPiArCXN3aXRjaCAoKHZhbCA+PiA2KSAmIDMpIHsKPiArCWNhc2UgMDoKPiArCWNh c2UgMToKPiArCQlpOTE1LT5tZW1fZnJlcSA9IDgwMDsKPiArCQlicmVhazsKPiArCWNhc2UgMjoK PiArCQlpOTE1LT5tZW1fZnJlcSA9IDEwNjY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDM6Cj4gKwkJ aTkxNS0+bWVtX2ZyZXEgPSAxMzMzOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJRFJNX0RFQlVHX0RS SVZFUigiRERSIHNwZWVkOiAlZCBNSHpcbiIsIGk5MTUtPm1lbV9mcmVxKTsKPiArCj4gKwlycHMt Pm1heF9mcmVxID0gdmx2X3Jwc19tYXhfZnJlcShycHMpOwo+ICsJcnBzLT5ycDBfZnJlcSA9IHJw cy0+bWF4X2ZyZXE7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJtYXggR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSwKPiArCQkJ IHJwcy0+bWF4X2ZyZXEpOwo+ICsKPiArCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSB2bHZfcnBzX3Jw ZV9mcmVxKHJwcyk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJSUGUgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSwK PiArCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOwo+ICsKPiArCXJwcy0+cnAxX2ZyZXEgPSB2bHZf cnBzX2d1YXJfZnJlcShycHMpOwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIgRnJlcSkg R1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMt PnJwMV9mcmVxKSwKPiArCQkJIHJwcy0+cnAxX2ZyZXEpOwo+ICsKPiArCXJwcy0+bWluX2ZyZXEg PSB2bHZfcnBzX21pbl9mcmVxKHJwcyk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJtaW4gR1BVIGZy ZXE6ICVkIE1IeiAoJXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9m cmVxKSwKPiArCQkJIHJwcy0+bWluX2ZyZXEpOwo+ICsKPiArCXZsdl9pb3NmX3NiX3B1dChpOTE1 LAo+ICsJCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKPiArCQkJQklUKFZMVl9JT1NGX1NCX05D KSB8Cj4gKwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg Y2h2X3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJdTMyIHZhbDsKPiArCj4g Kwl2bHZfaW9zZl9zYl9nZXQoaTkxNSwKPiArCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Cj4g KwkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAo+ICsJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7Cj4g Kwo+ICsJdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShycHMpOwo+ICsKPiArCXZhbCA9IHZsdl9jY2tf cmVhZChpOTE1LCBDQ0tfRlVTRV9SRUcpOwo+ICsKPiArCXN3aXRjaCAoKHZhbCA+PiAyKSAmIDB4 Nykgewo+ICsJY2FzZSAzOgo+ICsJCWk5MTUtPm1lbV9mcmVxID0gMjAwMDsKPiArCQlicmVhazsK PiArCWRlZmF1bHQ6Cj4gKwkJaTkxNS0+bWVtX2ZyZXEgPSAxNjAwOwo+ICsJCWJyZWFrOwo+ICsJ fQo+ICsJRFJNX0RFQlVHX0RSSVZFUigiRERSIHNwZWVkOiAlZCBNSHpcbiIsIGk5MTUtPm1lbV9m cmVxKTsKPiArCj4gKwlycHMtPm1heF9mcmVxID0gY2h2X3Jwc19tYXhfZnJlcShycHMpOwo+ICsJ cnBzLT5ycDBfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJtYXgg R1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMt Pm1heF9mcmVxKSwKPiArCQkJIHJwcy0+bWF4X2ZyZXEpOwo+ICsKPiArCXJwcy0+ZWZmaWNpZW50 X2ZyZXEgPSBjaHZfcnBzX3JwZV9mcmVxKHJwcyk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJSUGUg R1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMt PmVmZmljaWVudF9mcmVxKSwKPiArCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOwo+ICsKPiArCXJw cy0+cnAxX2ZyZXEgPSBjaHZfcnBzX2d1YXJfZnJlcShycHMpOwo+ICsJRFJNX0RFQlVHX0RSSVZF UigiUlAxKEd1YXIpIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKPiArCQkJIGludGVsX2dwdV9m cmVxKHJwcywgcnBzLT5ycDFfZnJlcSksCj4gKwkJCSBycHMtPnJwMV9mcmVxKTsKPiArCj4gKwly cHMtPm1pbl9mcmVxID0gY2h2X3Jwc19taW5fZnJlcShycHMpOwo+ICsJRFJNX0RFQlVHX0RSSVZF UigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKPiArCQkJIGludGVsX2dwdV9mcmVxKHJw cywgcnBzLT5taW5fZnJlcSksCj4gKwkJCSBycHMtPm1pbl9mcmVxKTsKPiArCj4gKwl2bHZfaW9z Zl9zYl9wdXQoaTkxNSwKPiArCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Cj4gKwkJCUJJVChW TFZfSU9TRl9TQl9OQykgfAo+ICsJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7Cj4gKwo+ICsJV0FS Tl9PTkNFKChycHMtPm1heF9mcmVxIHwgcnBzLT5lZmZpY2llbnRfZnJlcSB8IHJwcy0+cnAxX2Zy ZXEgfAo+ICsJCSAgIHJwcy0+bWluX2ZyZXEpICYgMSwKPiArCQkgICJPZGQgR1BVIGZyZXEgdmFs dWVzXG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmx2X2MwX3JlYWQoc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlLCBzdHJ1Y3QgaW50ZWxfcnBzX2VpICplaSkKPiArewo+ICsJZWktPmt0 aW1lID0ga3RpbWVfZ2V0X3JhdygpOwo+ICsJZWktPnJlbmRlcl9jMCA9IGludGVsX3VuY29yZV9y ZWFkKHVuY29yZSwgVkxWX1JFTkRFUl9DMF9DT1VOVCk7Cj4gKwllaS0+bWVkaWFfYzAgPSBpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIFZMVl9NRURJQV9DMF9DT1VOVCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB1MzIgdmx2X3dhX2MwX2VpKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcikK PiArewo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMp Owo+ICsJY29uc3Qgc3RydWN0IGludGVsX3Jwc19laSAqcHJldiA9ICZycHMtPmVpOwo+ICsJc3Ry dWN0IGludGVsX3Jwc19laSBub3c7Cj4gKwl1MzIgZXZlbnRzID0gMDsKPiArCj4gKwlpZiAoKHBt X2lpciAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCkgPT0gMCkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwl2bHZfYzBfcmVhZCh1bmNvcmUsICZub3cpOwo+ICsKPiArCWlmIChwcmV2LT5rdGltZSkg ewo+ICsJCXU2NCB0aW1lLCBjMDsKPiArCQl1MzIgcmVuZGVyLCBtZWRpYTsKPiArCj4gKwkJdGlt ZSA9IGt0aW1lX3VzX2RlbHRhKG5vdy5rdGltZSwgcHJldi0+a3RpbWUpOwo+ICsKPiArCQl0aW1l ICo9IHJwc190b19pOTE1KHJwcyktPmN6Y2xrX2ZyZXE7Cj4gKwo+ICsJCS8qIFdvcmtsb2FkIGNh biBiZSBzcGxpdCBiZXR3ZWVuIHJlbmRlciArIG1lZGlhLAo+ICsJCSAqIGUuZy4gU3dhcEJ1ZmZl cnMgYmVpbmcgYmxpdHRlZCBpbiBYIGFmdGVyIGJlaW5nIHJlbmRlcmVkIGluCj4gKwkJICogbWVz YS4gVG8gYWNjb3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNvbWJpbmUgYm90aCBlbmdpbmVzCj4g KwkJICogaW50byBvdXIgYWN0aXZpdHkgY291bnRlci4KPiArCQkgKi8KPiArCQlyZW5kZXIgPSBu b3cucmVuZGVyX2MwIC0gcHJldi0+cmVuZGVyX2MwOwo+ICsJCW1lZGlhID0gbm93Lm1lZGlhX2Mw IC0gcHJldi0+bWVkaWFfYzA7Cj4gKwkJYzAgPSBtYXgocmVuZGVyLCBtZWRpYSk7Cj4gKwkJYzAg Kj0gMTAwMCAqIDEwMCA8PCA4OyAvKiB0byB1c2VjcyBhbmQgc2NhbGUgdG8gdGhyZXNob2xkJSAq Lwo+ICsKPiArCQlpZiAoYzAgPiB0aW1lICogcnBzLT5wb3dlci51cF90aHJlc2hvbGQpCj4gKwkJ CWV2ZW50cyA9IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwo+ICsJCWVsc2UgaWYgKGMwIDwgdGlt ZSAqIHJwcy0+cG93ZXIuZG93bl90aHJlc2hvbGQpCj4gKwkJCWV2ZW50cyA9IEdFTjZfUE1fUlBf RE9XTl9USFJFU0hPTEQ7Cj4gKwl9Cj4gKwo+ICsJcnBzLT5laSA9IG5vdzsKPiArCXJldHVybiBl dmVudHM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJwc193b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKPiArewo+ICsJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVyX29mKHdv cmssIHR5cGVvZigqcnBzKSwgd29yayk7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3Rv X2d0KHJwcyk7Cj4gKwlib29sIGNsaWVudF9ib29zdCA9IGZhbHNlOwo+ICsJaW50IG5ld19mcmVx LCBhZGosIG1pbiwgbWF4Owo+ICsJdTMyIHBtX2lpciA9IDA7Cj4gKwo+ICsJc3Bpbl9sb2NrX2ly cSgmZ3QtPmlycV9sb2NrKTsKPiArCXBtX2lpciA9IGZldGNoX2FuZF96ZXJvKCZycHMtPnBtX2lp cik7Cj4gKwljbGllbnRfYm9vc3QgPSBhdG9taWNfcmVhZCgmcnBzLT5udW1fd2FpdGVycyk7Cj4g KwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gKwo+ICsJLyogTWFrZSBzdXJlIHdl IGRpZG4ndCBxdWV1ZSBhbnl0aGluZyB3ZSdyZSBub3QgZ29pbmcgdG8gcHJvY2Vzcy4gKi8KPiAr CWlmICgocG1faWlyICYgcnBzLT5wbV9ldmVudHMpID09IDAgJiYgIWNsaWVudF9ib29zdCkKPiAr CQlnb3RvIG91dDsKPiArCj4gKwltdXRleF9sb2NrKCZycHMtPmxvY2spOwo+ICsKPiArCXBtX2lp ciB8PSB2bHZfd2FfYzBfZWkocnBzLCBwbV9paXIpOwo+ICsKPiArCWFkaiA9IHJwcy0+bGFzdF9h ZGo7Cj4gKwluZXdfZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7Cj4gKwltaW4gPSBycHMtPm1pbl9mcmVx X3NvZnRsaW1pdDsKPiArCW1heCA9IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0Owo+ICsJaWYgKGNs aWVudF9ib29zdCkKPiArCQltYXggPSBycHMtPm1heF9mcmVxOwo+ICsJaWYgKGNsaWVudF9ib29z dCAmJiBuZXdfZnJlcSA8IHJwcy0+Ym9vc3RfZnJlcSkgewo+ICsJCW5ld19mcmVxID0gcnBzLT5i b29zdF9mcmVxOwo+ICsJCWFkaiA9IDA7Cj4gKwl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1f UlBfVVBfVEhSRVNIT0xEKSB7Cj4gKwkJaWYgKGFkaiA+IDApCj4gKwkJCWFkaiAqPSAyOwo+ICsJ CWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLwo+ICsJCQlhZGogPSBJU19D SEVSUllWSUVXKGd0LT5pOTE1KSA/IDIgOiAxOwo+ICsKPiArCQlpZiAobmV3X2ZyZXEgPj0gcnBz LT5tYXhfZnJlcV9zb2Z0bGltaXQpCj4gKwkJCWFkaiA9IDA7Cj4gKwl9IGVsc2UgaWYgKGNsaWVu dF9ib29zdCkgewo+ICsJCWFkaiA9IDA7Cj4gKwl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1f UlBfRE9XTl9USU1FT1VUKSB7Cj4gKwkJaWYgKHJwcy0+Y3VyX2ZyZXEgPiBycHMtPmVmZmljaWVu dF9mcmVxKQo+ICsJCQluZXdfZnJlcSA9IHJwcy0+ZWZmaWNpZW50X2ZyZXE7Cj4gKwkJZWxzZSBp ZiAocnBzLT5jdXJfZnJlcSA+IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQo+ICsJCQluZXdfZnJl cSA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0Owo+ICsJCWFkaiA9IDA7Cj4gKwl9IGVsc2UgaWYg KHBtX2lpciAmIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQpIHsKPiArCQlpZiAoYWRqIDwgMCkK PiArCQkJYWRqICo9IDI7Cj4gKwkJZWxzZSAvKiBDSFYgbmVlZHMgZXZlbiBlbmNvZGUgdmFsdWVz ICovCj4gKwkJCWFkaiA9IElTX0NIRVJSWVZJRVcoZ3QtPmk5MTUpID8gLTIgOiAtMTsKPiArCj4g KwkJaWYgKG5ld19mcmVxIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQo+ICsJCQlhZGogPSAw Owo+ICsJfSBlbHNlIHsgLyogdW5rbm93biBldmVudCAqLwo+ICsJCWFkaiA9IDA7Cj4gKwl9Cj4g Kwo+ICsJcnBzLT5sYXN0X2FkaiA9IGFkajsKPiArCj4gKwkvKgo+ICsJICogTGltaXQgZGVib29z dGluZyBhbmQgYm9vc3RpbmcgdG8ga2VlcCBvdXJzZWx2ZXMgYXQgdGhlIGV4dHJlbWVzCj4gKwkg KiB3aGVuIGluIHRoZSByZXNwZWN0aXZlIHBvd2VyIG1vZGVzIChpLmUuIHNsb3dseSBkZWNyZWFz ZSBmcmVxdWVuY2llcwo+ICsJICogd2hpbGUgaW4gdGhlIEhJR0hfUE9XRVIgem9uZSBhbmQgc2xv d2x5IGluY3JlYXNlIGZyZXF1ZW5jaWVzIHdoaWxlCj4gKwkgKiBpbiB0aGUgTE9XX1BPV0VSIHpv bmUpLiBPbiBpZGxlLCB3ZSB3aWxsIGhpdCB0aGUgdGltZW91dCBhbmQgZHJvcAo+ICsJICogdG8g dGhlIG5leHQgbGV2ZWwgcXVpY2tseSwgYW5kIGNvbnZlcnNlbHkgaWYgYnVzeSB3ZSBleHBlY3Qg dG8KPiArCSAqIGhpdCBhIHdhaXRib29zdCBhbmQgcmFwaWRseSBzd2l0Y2ggaW50byBtYXggcG93 ZXIuCj4gKwkgKi8KPiArCWlmICgoYWRqIDwgMCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gSElHSF9Q T1dFUikgfHwKPiArCSAgICAoYWRqID4gMCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gTE9XX1BPV0VS KSkKPiArCQlycHMtPmxhc3RfYWRqID0gMDsKPiArCj4gKwkvKiBzeXNmcyBmcmVxdWVuY3kgaW50 ZXJmYWNlcyBtYXkgaGF2ZSBzbnVjayBpbiB3aGlsZSBzZXJ2aWNpbmcgdGhlCj4gKwkgKiBpbnRl cnJ1cHQKPiArCSAqLwo+ICsJbmV3X2ZyZXEgKz0gYWRqOwo+ICsJbmV3X2ZyZXEgPSBjbGFtcF90 KGludCwgbmV3X2ZyZXEsIG1pbiwgbWF4KTsKPiArCj4gKwlpZiAoaW50ZWxfcnBzX3NldChycHMs IG5ld19mcmVxKSkgewo+ICsJCURSTV9ERUJVR19EUklWRVIoIkZhaWxlZCB0byBzZXQgbmV3IEdQ VSBmcmVxdWVuY3lcbiIpOwo+ICsJCXJwcy0+bGFzdF9hZGogPSAwOwo+ICsJfQo+ICsKPiArCW11 dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKPiArCj4gK291dDoKPiArCXNwaW5fbG9ja19pcnEoJmd0 LT5pcnFfbG9jayk7Cj4gKwlnZW42X2d0X3BtX3VubWFza19pcnEoZ3QsIHJwcy0+cG1fZXZlbnRz KTsKPiArCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiArfQo+ICsKPiArdm9pZCBn ZW4xMV9ycHNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKQo+ ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7Cj4gKwljb25zdCB1 MzIgZXZlbnRzID0gcnBzLT5wbV9ldmVudHMgJiBwbV9paXI7Cj4gKwo+ICsJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZ3QtPmlycV9sb2NrKTsKPiArCj4gKwlpZiAodW5saWtlbHkoIWV2ZW50cykpCj4g KwkJcmV0dXJuOwo+ICsKPiArCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIGV2ZW50cyk7Cj4gKwo+ ICsJcnBzLT5wbV9paXIgfD0gZXZlbnRzOwo+ICsJc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsK PiArfQo+ICsKPiArdm9pZCBnZW42X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpy cHMsIHUzMiBwbV9paXIpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g cnBzX3RvX2k5MTUocnBzKTsKPiArCj4gKwlpZiAocG1faWlyICYgcnBzLT5wbV9ldmVudHMpIHsK PiArCQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7Cj4gKwo+ICsJCXNwaW5f bG9jaygmZ3QtPmlycV9sb2NrKTsKPiArCQlnZW42X2d0X3BtX21hc2tfaXJxKGd0LCBwbV9paXIg JiBycHMtPnBtX2V2ZW50cyk7Cj4gKwkJcnBzLT5wbV9paXIgfD0gcG1faWlyICYgcnBzLT5wbV9l dmVudHM7Cj4gKwkJc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKPiArCQlzcGluX3VubG9jaygm Z3QtPmlycV9sb2NrKTsKPiArCX0KPiArCj4gKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpCj4g KwkJcmV0dXJuOwo+ICsKPiArCWlmIChwbV9paXIgJiBQTV9WRUJPWF9VU0VSX0lOVEVSUlVQVCkK PiArCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGk5MTUtPmVuZ2luZVtWRUNTMF0pOwo+ ICsKPiArCWlmIChwbV9paXIgJiBQTV9WRUJPWF9DU19FUlJPUl9JTlRFUlJVUFQpCj4gKwkJRFJN X0RFQlVHKCJDb21tYW5kIHBhcnNlciBlcnJvciwgcG1faWlyIDB4JTA4eFxuIiwgcG1faWlyKTsK PiArfQo+ICsKPiArdm9pZCBnZW41X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpy cHMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUo cnBzKTsKPiArCXUzMiBidXN5X3VwLCBidXN5X2Rvd24sIG1heF9hdmcsIG1pbl9hdmc7Cj4gKwl1 OCBuZXdfZnJlcTsKPiArCj4gKwlzcGluX2xvY2soJm1jaGRldl9sb2NrKTsKPiArCj4gKwlpbnRl bF91bmNvcmVfd3JpdGUxNih1bmNvcmUsCj4gKwkJCSAgICAgTUVNSU5UUlNUUywKPiArCQkJICAg ICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJTVFMpKTsKPiArCj4gKwlpbnRlbF91 bmNvcmVfd3JpdGUxNih1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7Cj4gKwli dXN5X3VwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ1BSRVZCU1lUVVBBVkcpOwo+ICsJ YnVzeV9kb3duID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ1BSRVZCU1lURE5BVkcpOwo+ ICsJbWF4X2F2ZyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUFYQVZHKTsKPiArCW1p bl9hdmcgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDQk1JTkFWRyk7Cj4gKwo+ICsJLyog SGFuZGxlIFJDUyBjaGFuZ2UgcmVxdWVzdCBmcm9tIGh3ICovCj4gKwluZXdfZnJlcSA9IHJwcy0+ Y3VyX2ZyZXE7Cj4gKwlpZiAoYnVzeV91cCA+IG1heF9hdmcpCj4gKwkJbmV3X2ZyZXErKzsKPiAr CWVsc2UgaWYgKGJ1c3lfZG93biA8IG1pbl9hdmcpCj4gKwkJbmV3X2ZyZXEtLTsKPiArCW5ld19m cmVxID0gY2xhbXAobmV3X2ZyZXEsCj4gKwkJCSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKPiAr CQkJIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KTsKPiArCj4gKwlpZiAobmV3X2ZyZXEgIT0gcnBz LT5jdXJfZnJlcSAmJiBnZW41X3Jwc19zZXQocnBzLCBuZXdfZnJlcSkpCj4gKwkJcnBzLT5jdXJf ZnJlcSA9IG5ld19mcmVxOwo+ICsKPiArCXNwaW5fdW5sb2NrKCZtY2hkZXZfbG9jayk7Cj4gK30K PiArCj4gK3ZvaWQgaW50ZWxfcnBzX2luaXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwo+ ICsJbXV0ZXhfaW5pdCgmcnBzLT5sb2NrKTsKPiArCW11dGV4X2luaXQoJnJwcy0+cG93ZXIubXV0 ZXgpOwo+ICsKPiArCUlOSVRfV09SSygmcnBzLT53b3JrLCBycHNfd29yayk7Cj4gKwo+ICsJYXRv bWljX3NldCgmcnBzLT5udW1fd2FpdGVycywgMCk7Cj4gKwo+ICsJaWYgKElTX0NIRVJSWVZJRVco aTkxNSkpCj4gKwkJY2h2X3Jwc19pbml0KHJwcyk7Cj4gKwllbHNlIGlmIChJU19WQUxMRVlWSUVX KGk5MTUpKQo+ICsJCXZsdl9ycHNfaW5pdChycHMpOwo+ICsJZWxzZSBpZiAoSU5URUxfR0VOKGk5 MTUpID49IDYpCj4gKwkJZ2VuNl9ycHNfaW5pdChycHMpOwo+ICsJZWxzZSBpZiAoSVNfSVJPTkxB S0VfTShpOTE1KSkKPiArCQlnZW41X3Jwc19pbml0KHJwcyk7Cj4gKwo+ICsJLyogRGVyaXZlIGlu aXRpYWwgdXNlciBwcmVmZXJlbmNlcy9saW1pdHMgZnJvbSB0aGUgaGFyZHdhcmUgbGltaXRzICov Cj4gKwlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWF4X2ZyZXE7Cj4gKwlycHMtPm1p bl9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWluX2ZyZXE7Cj4gKwo+ICsJLyogQWZ0ZXIgc2V0dGlu ZyBtYXgtc29mdGxpbWl0LCBmaW5kIHRoZSBvdmVyY2xvY2sgbWF4IGZyZXEgKi8KPiArCWlmIChJ U19HRU4oaTkxNSwgNikgfHwgSVNfSVZZQlJJREdFKGk5MTUpIHx8IElTX0hBU1dFTEwoaTkxNSkp IHsKPiArCQl1MzIgcGFyYW1zID0gMDsKPiArCj4gKwkJc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChp OTE1LCBHRU42X1JFQURfT0NfUEFSQU1TLAo+ICsJCQkJICAgICAgICZwYXJhbXMsIE5VTEwpOwo+ ICsJCWlmIChwYXJhbXMgJiBCSVQoMzEpKSB7IC8qIE9DIHN1cHBvcnRlZCAqLwo+ICsJCQlEUk1f REVCVUdfRFJJVkVSKCJPdmVyY2xvY2tpbmcgc3VwcG9ydGVkLCBtYXg6ICVkTUh6LCBvdmVyY2xv Y2s6ICVkTUh6XG4iLAo+ICsJCQkJCSAocnBzLT5tYXhfZnJlcSAmIDB4ZmYpICogNTAsCj4gKwkJ CQkJIChwYXJhbXMgJiAweGZmKSAqIDUwKTsKPiArCQkJcnBzLT5tYXhfZnJlcSA9IHBhcmFtcyAm IDB4ZmY7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIEZpbmFsbHkgYWxsb3cgdXMgdG8gYm9vc3Qg dG8gbWF4IGJ5IGRlZmF1bHQgKi8KPiArCXJwcy0+Ym9vc3RfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7 Cj4gKwlycHMtPmlkbGVfZnJlcSA9IHJwcy0+bWluX2ZyZXE7Cj4gKwlycHMtPmN1cl9mcmVxID0g cnBzLT5pZGxlX2ZyZXE7Cj4gKwo+ICsJcnBzLT5wbV9pbnRybXNrX21ieiA9IDA7Cj4gKwo+ICsJ LyoKPiArCSAqIFNOQixJVkIsSFNXIGNhbiB3aGlsZSBWTFYsQ0hWIG1heSBoYXJkIGhhbmcgb24g bG9vcGluZyBiYXRjaGJ1ZmZlcgo+ICsJICogaWYgR0VONl9QTV9VUF9FSV9FWFBJUkVEIGlzIG1h c2tlZC4KPiArCSAqCj4gKwkgKiBUT0RPOiB2ZXJpZnkgaWYgdGhpcyBjYW4gYmUgcmVwcm9kdWNl ZCBvbiBWTFYsQ0hWLgo+ICsJICovCj4gKwlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDcpCj4gKwkJ cnBzLT5wbV9pbnRybXNrX21ieiB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQ7Cj4gKwo+ICsJ aWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQo+ICsJCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VO OF9QTUlOVFJfRElTQUJMRV9SRURJUkVDVF9UT19HVUM7Cj4gK30KPiArCj4gK3UzMiBpbnRlbF9n ZXRfY2FnZihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBycHN0YXQpCj4gK3sKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKPiArCXUzMiBjYWdm Owo+ICsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKPiArCQljYWdmID0gKHJwc3RhdCAm IEdFTjlfQ0FHRl9NQVNLKSA+PiBHRU45X0NBR0ZfU0hJRlQ7Cj4gKwllbHNlIGlmIChJU19IQVNX RUxMKGk5MTUpIHx8IElTX0JST0FEV0VMTChpOTE1KSkKPiArCQljYWdmID0gKHJwc3RhdCAmIEhT V19DQUdGX01BU0spID4+IEhTV19DQUdGX1NISUZUOwo+ICsJZWxzZQo+ICsJCWNhZ2YgPSAocnBz dGF0ICYgR0VONl9DQUdGX01BU0spID4+IEdFTjZfQ0FHRl9TSElGVDsKPiArCj4gKwlyZXR1cm4g IGNhZ2Y7Cj4gK30KPiArCj4gKy8qIEV4dGVybmFsIGludGVyZmFjZSBmb3IgaW50ZWxfaXBzLmtv ICovCj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgX19yY3UgKmlwc19tY2hk ZXY7Cj4gKwo+ICsvKioKPiArICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhhdCB0aGUg aTkxNSBkcml2ZXIgaXMgbm93IGxvYWRlZCwgaWYKPiArICogSVBTIGdvdCBsb2FkZWQgZmlyc3Qu Cj4gKyAqCj4gKyAqIFRoaXMgYXdrd2FyZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIgbW9kdWxl IGhhcyB0byBkZXBlbmQgb24gdGhlCj4gKyAqIG90aGVyIGluIG9yZGVyIGZvciBJUFMgdG8gZG8g dGhlIGFwcHJvcHJpYXRlIGNvbW11bmljYXRpb24gb2YKPiArICogR1BVIHR1cmJvIGxpbWl0cyB0 byBpOTE1Lgo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiAraXBzX3BpbmdfZm9yX2k5MTVfbG9hZCh2 b2lkKQo+ICt7Cj4gKwl2b2lkICgqbGluaykodm9pZCk7Cj4gKwo+ICsJbGluayA9IHN5bWJvbF9n ZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOwo+ICsJaWYgKGxpbmspIHsKPiArCQlsaW5rKCk7 Cj4gKwkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1X2RyaXZlcik7Cj4gKwl9Cj4gK30KPiAr Cj4gK3ZvaWQgaW50ZWxfcnBzX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMp Cj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKPiArCj4gKwkv Kgo+ICsJICogV2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFydCB3aXRoIGludGVsLWlw cyBvbmNlIGV2ZXJ5dGhpbmcgaXMKPiArCSAqIHNldCB1cCwgdG8gYXZvaWQgaW50ZWwtaXBzIHNu ZWFraW5nIGluIGFuZCByZWFkaW5nIGJvZ3VzIHZhbHVlcy4KPiArCSAqLwo+ICsJaWYgKElTX0dF TihndC0+aTkxNSwgNSkpIHsKPiArCQlyY3VfYXNzaWduX3BvaW50ZXIoaXBzX21jaGRldiwgZ3Qt Pmk5MTUpOwo+ICsJCWlwc19waW5nX2Zvcl9pOTE1X2xvYWQoKTsKPiArCX0KPiArfQo+ICsKPiAr dm9pZCBpbnRlbF9ycHNfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ ICt7Cj4gKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBzX21jaGRldiwgTlVMTCk7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbWNoZGV2X2dldCh2b2lkKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPiArCj4gKwlyY3VfcmVhZF9sb2NrKCk7 Cj4gKwlpOTE1ID0gcmN1X2RlcmVmZXJlbmNlKGlwc19tY2hkZXYpOwo+ICsJaWYgKCFrcmVmX2dl dF91bmxlc3NfemVybygmaTkxNS0+ZHJtLnJlZikpCj4gKwkJaTkxNSA9IE5VTEw7Cj4gKwlyY3Vf cmVhZF91bmxvY2soKTsKPiArCj4gKwlyZXR1cm4gaTkxNTsKPiArfQo+ICsKPiArLyoqCj4gKyAq IGk5MTVfcmVhZF9tY2hfdmFsIC0gcmV0dXJuIHZhbHVlIGZvciBJUFMgdXNlCj4gKyAqCj4gKyAq IENhbGN1bGF0ZSBhbmQgcmV0dXJuIGEgdmFsdWUgZm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3 aGVuIGRlY2lkaW5nIHdoZXRoZXIKPiArICogd2UgaGF2ZSB0aGVybWFsIGFuZCBwb3dlciBoZWFk cm9vbSB0byBpbmNyZWFzZSBDUFUgb3IgR1BVIHBvd2VyIGJ1ZGdldC4KPiArICovCj4gK3Vuc2ln bmVkIGxvbmcgaTkxNV9yZWFkX21jaF92YWwodm9pZCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTU7Cj4gKwl1bnNpZ25lZCBsb25nIGNoaXBzZXRfdmFsID0gMDsKPiArCXVu c2lnbmVkIGxvbmcgZ3JhcGhpY3NfdmFsID0gMDsKPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVm Owo+ICsKPiArCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Cj4gKwlpZiAoIWk5MTUpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtl cmVmKSB7Cj4gKwkJc3RydWN0IGludGVsX2lwcyAqaXBzID0gJmk5MTUtPmd0LnJwcy5pcHM7Cj4g Kwo+ICsJCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiArCQljaGlwc2V0X3ZhbCA9IF9f aXBzX2NoaXBzZXRfdmFsKGlwcyk7Cj4gKwkJZ3JhcGhpY3NfdmFsID0gX19pcHNfZ2Z4X3ZhbChp cHMpOwo+ICsJCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+ICsJfQo+ICsKPiArCWRy bV9kZXZfcHV0KCZpOTE1LT5kcm0pOwo+ICsJcmV0dXJuIGNoaXBzZXRfdmFsICsgZ3JhcGhpY3Nf dmFsOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVhZF9tY2hfdmFsKTsKPiArCj4g Ky8qKgo+ICsgKiBpOTE1X2dwdV9yYWlzZSAtIHJhaXNlIEdQVSBmcmVxdWVuY3kgbGltaXQKPiAr ICoKPiArICogUmFpc2UgdGhlIGxpbWl0OyBJUFMgaW5kaWNhdGVzIHdlIGhhdmUgdGhlcm1hbCBo ZWFkcm9vbS4KPiArICovCj4gK2Jvb2wgaTkxNV9ncHVfcmFpc2Uodm9pZCkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7Cj4g Kwo+ICsJaTkxNSA9IG1jaGRldl9nZXQoKTsKPiArCWlmICghaTkxNSkKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwo+ICsJcnBzID0gJmk5MTUtPmd0LnJwczsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZt Y2hkZXZfbG9jayk7Cj4gKwlpZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPCBycHMtPm1heF9m cmVxKQo+ICsJCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0Kys7Cj4gKwlzcGluX3VubG9ja19pcnEo Jm1jaGRldl9sb2NrKTsKPiArCj4gKwlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKPiArCXJldHVy biB0cnVlOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X3JhaXNlKTsKPiArCj4g Ky8qKgo+ICsgKiBpOTE1X2dwdV9sb3dlciAtIGxvd2VyIEdQVSBmcmVxdWVuY3kgbGltaXQKPiAr ICoKPiArICogSVBTIGluZGljYXRlcyB3ZSdyZSBjbG9zZSB0byBhIHRoZXJtYWwgbGltaXQsIHNv IHRocm90dGxlIGJhY2sgdGhlIEdQVQo+ICsgKiBmcmVxdWVuY3kgbWF4aW11bS4KPiArICovCj4g K2Jvb2wgaTkxNV9ncHVfbG93ZXIodm9pZCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7Cj4gKwo+ICsJaTkxNSA9IG1jaGRl dl9nZXQoKTsKPiArCWlmICghaTkxNSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcnBzID0g Jmk5MTUtPmd0LnJwczsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gKwlp ZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPiBycHMtPm1pbl9mcmVxKQo+ICsJCXJwcy0+bWF4 X2ZyZXFfc29mdGxpbWl0LS07Cj4gKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiAr Cj4gKwlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X2xvd2VyKTsKPiArCj4gKy8qKgo+ICsgKiBpOTE1X2dw dV9idXN5IC0gaW5kaWNhdGUgR1BVIGJ1c2luZXNzIHRvIElQUwo+ICsgKgo+ICsgKiBUZWxsIHRo ZSBJUFMgZHJpdmVyIHdoZXRoZXIgb3Igbm90IHRoZSBHUFUgaXMgYnVzeS4KPiArICovCj4gK2Jv b2wgaTkxNV9ncHVfYnVzeSh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNTsKPiArCWJvb2wgcmV0Owo+ICsKPiArCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Cj4gKwlpZiAo IWk5MTUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldCA9IGk5MTUtPmd0LmF3YWtlOwo+ ICsKPiArCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtF WFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9idXN5KTsKPiArCj4gKy8qKgo+ICsgKiBpOTE1X2dw dV90dXJib19kaXNhYmxlIC0gZGlzYWJsZSBncmFwaGljcyB0dXJibwo+ICsgKgo+ICsgKiBEaXNh YmxlIGdyYXBoaWNzIHR1cmJvIGJ5IHJlc2V0dGluZyB0aGUgbWF4IGZyZXF1ZW5jeSBhbmQgc2V0 dGluZyB0aGUKPiArICogY3VycmVudCBmcmVxdWVuY3kgdG8gdGhlIGRlZmF1bHQuCj4gKyAqLwo+ ICtib29sIGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUodm9pZCkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7Cj4gKwlib29sIHJl dDsKPiArCj4gKwlpOTE1ID0gbWNoZGV2X2dldCgpOwo+ICsJaWYgKCFpOTE1KQo+ICsJCXJldHVy biBmYWxzZTsKPiArCj4gKwlycHMgPSAmaTkxNS0+Z3QucnBzOwo+ICsKPiArCXNwaW5fbG9ja19p cnEoJm1jaGRldl9sb2NrKTsKPiArCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5taW5f ZnJlcTsKPiArCXJldCA9IGdlbjVfcnBzX3NldCgmaTkxNS0+Z3QucnBzLCBycHMtPm1pbl9mcmVx KTsKPiArCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+ICsKPiArCWRybV9kZXZfcHV0 KCZpOTE1LT5kcm0pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChp OTE1X2dwdV90dXJib19kaXNhYmxlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcnBzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi45OTdhNGI0ZTAyMDcK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBz LmgKPiBAQCAtMCwwICsxLDM3IEBACj4gKy8qCj4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBNSVQKPiArICoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiAr ICovCj4gKwo+ICsjaWZuZGVmIElOVEVMX1JQU19ICj4gKyNkZWZpbmUgSU5URUxfUlBTX0gKPiAr Cj4gKyNpbmNsdWRlICJpbnRlbF9ycHNfdHlwZXMuaCIKPiArCj4gK3N0cnVjdCBpOTE1X3JlcXVl c3Q7Cj4gKwo+ICt2b2lkIGludGVsX3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cj4g Kwo+ICt2b2lkIGludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBz KTsKPiArdm9pZCBpbnRlbF9ycHNfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAq cnBzKTsKPiArCj4gK3ZvaWQgaW50ZWxfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMp Owo+ICt2b2lkIGludGVsX3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cj4gKwo+ ICt2b2lkIGludGVsX3Jwc19wYXJrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cj4gK3ZvaWQgaW50 ZWxfcnBzX3VucGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwo+ICt2b2lkIGludGVsX3Jwc19i b29zdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7Cj4gKwo+ICtpbnQgaW50ZWxfcnBzX3NldChz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCk7Cj4gK3ZvaWQgaW50ZWxfcnBzX21hcmtfaW50 ZXJhY3RpdmUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBib29sIGludGVyYWN0aXZlKTsKPiArCj4g K2ludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpOwo+ICtp bnQgaW50ZWxfZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKTsKPiAr dTMyIGludGVsX2dldF9jYWdmKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHJwc3RhdDEpOwo+ ICsKPiArdm9pZCBnZW41X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwo+ ICt2b2lkIGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBt X2lpcik7Cj4gK3ZvaWQgZ2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJw cywgdTMyIHBtX2lpcik7Cj4gKwo+ICsjZW5kaWYgLyogSU5URUxfUlBTX0ggKi8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzX3R5cGVzLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHNfdHlwZXMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40MGViMWZiNjUxZTcKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzX3R5cGVzLmgKPiBAQCAtMCwwICsx LDkzIEBACj4gKy8qCj4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArICoKPiAr ICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaWZu ZGVmIElOVEVMX1JQU19UWVBFU19ICj4gKyNkZWZpbmUgSU5URUxfUlBTX1RZUEVTX0gKPiArCj4g KyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgo+ICsKPiArc3RydWN0IGludGVsX2lwcyB7Cj4g Kwl1NjQgbGFzdF9jb3VudDE7Cj4gKwl1bnNpZ25lZCBsb25nIGxhc3RfdGltZTE7Cj4gKwl1bnNp Z25lZCBsb25nIGNoaXBzZXRfcG93ZXI7Cj4gKwl1NjQgbGFzdF9jb3VudDI7Cj4gKwl1NjQgbGFz dF90aW1lMjsKPiArCXVuc2lnbmVkIGxvbmcgZ2Z4X3Bvd2VyOwo+ICsJdTggY29ycjsKPiArCj4g KwlpbnQgYywgbTsKPiArfTsKPiArCj4gK3N0cnVjdCBpbnRlbF9ycHNfZWkgewo+ICsJa3RpbWVf dCBrdGltZTsKPiArCXUzMiByZW5kZXJfYzA7Cj4gKwl1MzIgbWVkaWFfYzA7Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgaW50ZWxfcnBzIHsKPiArCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBl bmFibGluZyBhbmQgdGhlIHdvcmtlciAqLwo+ICsKPiArCS8qCj4gKwkgKiB3b3JrLCBpbnRlcnJ1 cHRzX2VuYWJsZWQgYW5kIHBtX2lpciBhcmUgcHJvdGVjdGVkIGJ5Cj4gKwkgKiBkZXZfcHJpdi0+ aXJxX2xvY2sKPiArCSAqLwo+ICsJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cj4gKwlib29sIGVu YWJsZWQ7Cj4gKwlib29sIGFjdGl2ZTsKPiArCXUzMiBwbV9paXI7Cj4gKwo+ICsJLyogUE0gaW50 ZXJydXB0IGJpdHMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgbWFza2VkICovCj4gKwl1MzIgcG1faW50 cm1za19tYno7Cj4gKwl1MzIgcG1fZXZlbnRzOwo+ICsKPiArCS8qIEZyZXF1ZW5jaWVzIGFyZSBz dG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0gZGVwZW5kZW50IG11bHRpcGxlcy4KPiArCSAq IEluIG90aGVyIHdvcmRzLCAqX2ZyZXEgbmVlZHMgdG8gYmUgbXVsdGlwbGllZCBieSBYIHRvIGJl IGludGVyZXN0aW5nLgo+ICsJICogU29mdCBsaW1pdHMgYXJlIHRob3NlIHdoaWNoIGFyZSB1c2Vk IGZvciB0aGUgZHluYW1pYyByZWNsb2NraW5nIGRvbmUKPiArCSAqIGJ5IHRoZSBkcml2ZXIgKHJh aXNlIGZyZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBhbmQgbG93ZXIgZm9yCj4gKwkgKiBs aWdodGVyIGxvYWRzKS4gSGFyZCBsaW1pdHMgYXJlIHRob3NlIGltcG9zZWQgYnkgdGhlIGhhcmR3 YXJlLgo+ICsJICoKPiArCSAqIEEgZGlzdGluY3Rpb24gaXMgbWFkZSBmb3Igb3ZlcmNsb2NraW5n LCB3aGljaCBpcyBuZXZlciBlbmFibGVkIGJ5Cj4gKwkgKiBkZWZhdWx0LCBhbmQgaXMgY29uc2lk ZXJlZCB0byBiZSBhYm92ZSB0aGUgaGFyZCBsaW1pdCBpZiBpdCdzCj4gKwkgKiBwb3NzaWJsZSBh dCBhbGwuCj4gKwkgKi8KPiArCXU4IGN1cl9mcmVxOwkJLyogQ3VycmVudCBmcmVxdWVuY3kgKGNh Y2hlZCwgbWF5IG5vdCA9PSBIVykgKi8KPiArCXU4IGxhc3RfZnJlcTsJCS8qIExhc3Qgc3dxcmVx IGZyZXF1ZW5jeSAqLwo+ICsJdTggbWluX2ZyZXFfc29mdGxpbWl0OwkvKiBNaW5pbXVtIGZyZXF1 ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLwo+ICsJdTggbWF4X2ZyZXFfc29mdGxpbWl0 OwkvKiBNYXggZnJlcXVlbmN5IHBlcm1pdHRlZCBieSB0aGUgZHJpdmVyICovCj4gKwl1OCBtYXhf ZnJlcTsJCS8qIE1heGltdW0gZnJlcXVlbmN5LCBSUDAgaWYgbm90IG92ZXJjbG9ja2luZyAqLwo+ ICsJdTggbWluX2ZyZXE7CQkvKiBBS0EgUlBuLiBNaW5pbXVtIGZyZXF1ZW5jeSAqLwo+ICsJdTgg Ym9vc3RfZnJlcTsJCS8qIEZyZXF1ZW5jeSB0byByZXF1ZXN0IHdoZW4gd2FpdCBib29zdGluZyAq Lwo+ICsJdTggaWRsZV9mcmVxOwkJLyogRnJlcXVlbmN5IHRvIHJlcXVlc3Qgd2hlbiB3ZSBhcmUg aWRsZSAqLwo+ICsJdTggZWZmaWNpZW50X2ZyZXE7CS8qIEFLQSBSUGUuIFByZS1kZXRlcm1pbmVk IGJhbGFuY2VkIGZyZXF1ZW5jeSAqLwo+ICsJdTggcnAxX2ZyZXE7CQkvKiAibGVzcyB0aGFuIiBS UDAgcG93ZXIvZnJlcWVuY3kgKi8KPiArCXU4IHJwMF9mcmVxOwkJLyogTm9uLW92ZXJjbG9ja2Vk IG1heCBmcmVxdWVuY3kuICovCj4gKwl1MTYgZ3BsbF9yZWZfZnJlcTsJLyogdmx2L2NodiBHUExM IHJlZmVyZW5jZSBmcmVxdWVuY3kgKi8KPiArCj4gKwlpbnQgbGFzdF9hZGo7Cj4gKwo+ICsJc3Ry dWN0IHsKPiArCQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Cj4gKwo+ICsJCWVudW0geyBMT1dfUE9XRVIs IEJFVFdFRU4sIEhJR0hfUE9XRVIgfSBtb2RlOwo+ICsJCXVuc2lnbmVkIGludCBpbnRlcmFjdGl2 ZTsKPiArCj4gKwkJdTggdXBfdGhyZXNob2xkOyAvKiBDdXJyZW50ICVidXN5IHJlcXVpcmVkIHRv IHVwbG9jayAqLwo+ICsJCXU4IGRvd25fdGhyZXNob2xkOyAvKiBDdXJyZW50ICVidXN5IHJlcXVp cmVkIHRvIGRvd25jbG9jayAqLwo+ICsJfSBwb3dlcjsKPiArCj4gKwlhdG9taWNfdCBudW1fd2Fp dGVyczsKPiArCWF0b21pY190IGJvb3N0czsKPiArCj4gKwkvKiBtYW51YWwgd2EgcmVzaWRlbmN5 IGNhbGN1bGF0aW9ucyAqLwo+ICsJc3RydWN0IGludGVsX3Jwc19laSBlaTsKPiArCXN0cnVjdCBp bnRlbF9pcHMgaXBzOwo+ICt9Owo+ICsKPiArI2VuZGlmIC8qIElOVEVMX1JQU19UWVBFU19IICov Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMKPiBpbmRleCBhNzA1Nzc4NWU0 MjAuLmZkMzc3MGU0OGFjNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9sbGMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xs Yy5jCj4gQEAgLTYsNiArNiw3IEBACj4gIAo+ICAjaW5jbHVkZSAiaW50ZWxfcG0uaCIgLyogaW50 ZWxfZ3B1X2ZyZXEoKSAqLwo+ICAjaW5jbHVkZSAic2VsZnRlc3RfbGxjLmgiCj4gKyNpbmNsdWRl ICJpbnRlbF9ycHMuaCIKPiAgCj4gIHN0YXRpYyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0 cnVjdCBpbnRlbF9sbGMgKmxsYykKPiAgewo+IEBAIC0yNSw2ICsyNiw4IEBAIHN0YXRpYyBpbnQg Z2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxsYykKPiAgCWZvciAoZ3B1 X2ZyZXEgPSBjb25zdHMubWluX2dwdV9mcmVxOwo+ICAJICAgICBncHVfZnJlcSA8PSBjb25zdHMu bWF4X2dwdV9mcmVxOwo+ICAJICAgICBncHVfZnJlcSsrKSB7Cj4gKwkJc3RydWN0IGludGVsX3Jw cyAqcnBzID0gJmxsY190b19ndChsbGMpLT5ycHM7Cj4gKwo+ICAJCXVuc2lnbmVkIGludCBpYV9m cmVxLCByaW5nX2ZyZXEsIGZvdW5kOwo+ICAJCXUzMiB2YWw7Cj4gIAo+IEBAIC00NCw3ICs0Nyw3 IEBAIHN0YXRpYyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxs YykKPiAgCQlpZiAoZm91bmQgIT0gaWFfZnJlcSkgewo+ICAJCQlwcl9lcnIoIk1pbiBmcmVxIHRh YmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIENQVSBmcmVxLCBm b3VuZCAlZCwgZXhwZWN0ZWQgJWRcbiIsCj4gIAkJCSAgICAgICBncHVfZnJlcSwgY29uc3RzLm1p bl9ncHVfZnJlcSwgY29uc3RzLm1heF9ncHVfZnJlcSwKPiAtCQkJICAgICAgIGludGVsX2dwdV9m cmVxKGk5MTUsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1ND QUxFUiA6IDEpKSwKPiArCQkJICAgICAgIGludGVsX2dwdV9mcmVxKHJwcywgZ3B1X2ZyZXEgKiAo SU5URUxfR0VOKGk5MTUpID49IDkgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSkpLAo+ICAJCQkgICAg ICAgZm91bmQsIGlhX2ZyZXEpOwo+ICAJCQllcnIgPSAtRUlOVkFMOwo+ICAJCQlicmVhazsKPiBA QCAtNTQsNyArNTcsNyBAQCBzdGF0aWMgaW50IGdlbjZfdmVyaWZ5X3JpbmdfZnJlcShzdHJ1Y3Qg aW50ZWxfbGxjICpsbGMpCj4gIAkJaWYgKGZvdW5kICE9IHJpbmdfZnJlcSkgewo+ICAJCQlwcl9l cnIoIk1pbiBmcmVxIHRhYmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90IG1hdGNoIGV4cGVj dGVkIHJpbmcgZnJlcSwgZm91bmQgJWQsIGV4cGVjdGVkICVkXG4iLAo+ICAJCQkgICAgICAgZ3B1 X2ZyZXEsIGNvbnN0cy5taW5fZ3B1X2ZyZXEsIGNvbnN0cy5tYXhfZ3B1X2ZyZXEsCj4gLQkJCSAg ICAgICBpbnRlbF9ncHVfZnJlcShpOTE1LCBncHVfZnJlcSAqIChJTlRFTF9HRU4oaTkxNSkgPj0g OSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCj4gKwkJCSAgICAgICBpbnRlbF9ncHVfZnJlcShy cHMsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6 IDEpKSwKPiAgCQkJICAgICAgIGZvdW5kLCByaW5nX2ZyZXEpOwo+ICAJCQllcnIgPSAtRUlOVkFM Owo+ICAJCQlicmVhazsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv aW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVs X2d1Y19zdWJtaXNzaW9uLmMKPiBpbmRleCAwMDllNTRhMzc2NGYuLjk3Yjg1OGNlNzY4MiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lv bi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Np b24uYwo+IEBAIC0xMDEwLDcgKzEwMTAsNyBAQCB2b2lkIGludGVsX2d1Y19zdWJtaXNzaW9uX2Zp bmkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICAKPiAgc3RhdGljIHZvaWQgZ3VjX2ludGVycnVw dHNfY2FwdHVyZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBz ICpycHMgPSAmZ3QtPmk5MTUtPmd0X3BtLnJwczsKPiArCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9 ICZndC0+cnBzOwo+ICAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsK PiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgCWVudW0gaW50ZWxfZW5naW5l X2lkIGlkOwo+IEBAIC0xMDU2LDcgKzEwNTYsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW50ZXJydXB0 c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAo+ICBzdGF0aWMgdm9pZCBndWNfaW50 ZXJydXB0c19yZWxlYXNlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIHsKPiAtCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZndC0+aTkxNS0+Z3RfcG0ucnBzOwo+ICsJc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmd0LT5ycHM7Cj4gIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5j b3JlOwo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICAJZW51bSBpbnRlbF9l bmdpbmVfaWQgaWQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVi dWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCAxNjIx MTQzMGViNzguLjIyOTYyMzczNzIzYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdm cy5jCj4gQEAgLTQ0LDYgKzQ0LDcgQEAKPiAgI2luY2x1ZGUgImd0L2ludGVsX2d0X3JlcXVlc3Rz LmgiCj4gICNpbmNsdWRlICJndC9pbnRlbF9yZXNldC5oIgo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxf cmM2LmgiCj4gKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKPiAgI2luY2x1ZGUgImd0L3VjL2lu dGVsX2d1Y19zdWJtaXNzaW9uLmgiCj4gIAo+ICAjaW5jbHVkZSAiaTkxNV9kZWJ1Z2ZzLmgiCj4g QEAgLTc5MSw3ICs3OTIsNyBAQCBzdGF0aWMgaW50IGk5MTVfZnJlcXVlbmN5X2luZm8oc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKPiAgCXN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSA9ICZkZXZfcHJpdi0+dW5jb3JlOwo+IC0Jc3RydWN0IGludGVsX3Jw cyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZGV2X3ByaXYtPmd0LnJwczsKPiAgCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAJaW50 IHJldCA9IDA7Cj4gIAo+IEBAIC04MjcsMjMgKzgyOCwyMyBAQCBzdGF0aWMgaW50IGk5MTVfZnJl cXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIAkJc2VxX3By aW50ZihtLCAiRERSIGZyZXE6ICVkIE1IelxuIiwgZGV2X3ByaXYtPm1lbV9mcmVxKTsKPiAgCj4g IAkJc2VxX3ByaW50ZihtLCAiYWN0dWFsIEdQVSBmcmVxOiAlZCBNSHpcbiIsCj4gLQkJCSAgIGlu dGVsX2dwdV9mcmVxKGRldl9wcml2LCAoZnJlcV9zdHMgPj4gOCkgJiAweGZmKSk7Cj4gKwkJCSAg IGludGVsX2dwdV9mcmVxKHJwcywgKGZyZXFfc3RzID4+IDgpICYgMHhmZikpOwo+ICAKPiAgCQlz ZXFfcHJpbnRmKG0sICJjdXJyZW50IEdQVSBmcmVxOiAlZCBNSHpcbiIsCj4gLQkJCSAgIGludGVs X2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmN1cl9mcmVxKSk7Cj4gKwkJCSAgIGludGVsX2dwdV9m cmVxKHJwcywgcnBzLT5jdXJfZnJlcSkpOwo+ICAKPiAgCQlzZXFfcHJpbnRmKG0sICJtYXggR1BV IGZyZXE6ICVkIE1IelxuIiwKPiAtCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+ bWF4X2ZyZXEpKTsKPiArCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSk7 Cj4gIAo+ICAJCXNlcV9wcmludGYobSwgIm1pbiBHUFUgZnJlcTogJWQgTUh6XG4iLAo+IC0JCQkg ICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSkpOwo+ICsJCQkgICBpbnRl bF9ncHVfZnJlcShycHMsIHJwcy0+bWluX2ZyZXEpKTsKPiAgCj4gIAkJc2VxX3ByaW50ZihtLCAi aWRsZSBHUFUgZnJlcTogJWQgTUh6XG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcnBzLT5pZGxlX2ZyZXEpKTsKPiArCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmlk bGVfZnJlcSkpOwo+ICAKPiAgCQlzZXFfcHJpbnRmKG0sCj4gIAkJCSAgICJlZmZpY2llbnQgKFJQ ZSkgZnJlcXVlbmN5OiAlZCBNSHpcbiIsCj4gLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCBycHMtPmVmZmljaWVudF9mcmVxKSk7Cj4gKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBz LT5lZmZpY2llbnRfZnJlcSkpOwo+ICAJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDYpIHsKPiAgCQl1MzIgcnBfc3RhdGVfbGltaXRzOwo+ICAJCXUzMiBndF9wZXJmX3N0YXR1czsK PiBAQCAtODc3LDcgKzg3OCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiAgCQkJZWxzZQo+ICAJCQkJcmVxZiA+Pj0g MjU7Cj4gIAkJfQo+IC0JCXJlcWYgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcmVxZik7Cj4g KwkJcmVxZiA9IGludGVsX2dwdV9mcmVxKHJwcywgcmVxZik7Cj4gIAo+ICAJCXJwbW9kZWN0bCA9 IEk5MTVfUkVBRChHRU42X1JQX0NPTlRST0wpOwo+ICAJCXJwaW5jbGltaXQgPSBJOTE1X1JFQUQo R0VONl9SUF9VUF9USFJFU0hPTEQpOwo+IEBAIC04OTAsOCArODkxLDcgQEAgc3RhdGljIGludCBp OTE1X2ZyZXF1ZW5jeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAJ CXJwZG93bmVpID0gSTkxNV9SRUFEKEdFTjZfUlBfQ1VSX0RPV05fRUkpICYgR0VONl9DVVJJQVZH X01BU0s7Cj4gIAkJcnBjdXJkb3duID0gSTkxNV9SRUFEKEdFTjZfUlBfQ1VSX0RPV04pICYgR0VO Nl9DVVJCU1lUQVZHX01BU0s7Cj4gIAkJcnBwcmV2ZG93biA9IEk5MTVfUkVBRChHRU42X1JQX1BS RVZfRE9XTikgJiBHRU42X0NVUkJTWVRBVkdfTUFTSzsKPiAtCQljYWdmID0gaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsCj4gLQkJCQkgICAgICBpbnRlbF9nZXRfY2FnZihkZXZfcHJpdiwgcnBzdGF0 KSk7Cj4gKwkJY2FnZiA9IGludGVsX2dwdV9mcmVxKHJwcywgaW50ZWxfZ2V0X2NhZ2YocnBzLCBy cHN0YXQpKTsKPiAgCj4gIAkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51 bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ICAKPiBAQCAtOTY4LDM3ICs5NjgsMzcgQEAgc3RhdGlj IGludCBpOTE1X2ZyZXF1ZW5jeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2Vk KQo+ICAJCW1heF9mcmVxICo9IChJU19HRU45X0JDKGRldl9wcml2KSB8fAo+ICAJCQkgICAgIElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7Cj4gIAkJc2Vx X3ByaW50ZihtLCAiTG93ZXN0IChSUE4pIGZyZXF1ZW5jeTogJWRNSHpcbiIsCj4gLQkJCSAgIGlu dGVsX2dwdV9mcmVxKGRldl9wcml2LCBtYXhfZnJlcSkpOwo+ICsJCQkgICBpbnRlbF9ncHVfZnJl cShycHMsIG1heF9mcmVxKSk7Cj4gIAo+ICAJCW1heF9mcmVxID0gKHJwX3N0YXRlX2NhcCAmIDB4 ZmYwMCkgPj4gODsKPiAgCQltYXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwKPiAg CQkJICAgICBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEp Owo+ICAJCXNlcV9wcmludGYobSwgIk5vbWluYWwgKFJQMSkgZnJlcXVlbmN5OiAlZE1IelxuIiwK PiAtCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIG1heF9mcmVxKSk7Cj4gKwkJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKPiAgCj4gIAkJbWF4X2ZyZXEgPSAoSVNfR0VO OV9MUChkZXZfcHJpdikgPyBycF9zdGF0ZV9jYXAgPj4gMTYgOgo+ICAJCQkgICAgcnBfc3RhdGVf Y2FwID4+IDApICYgMHhmZjsKPiAgCQltYXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhkZXZfcHJpdikg fHwKPiAgCQkJICAgICBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwID8gR0VOOV9GUkVRX1NDQUxF UiA6IDEpOwo+ICAJCXNlcV9wcmludGYobSwgIk1heCBub24tb3ZlcmNsb2NrZWQgKFJQMCkgZnJl cXVlbmN5OiAlZE1IelxuIiwKPiAtCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIG1heF9m cmVxKSk7Cj4gKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKPiAgCQlzZXFf cHJpbnRmKG0sICJNYXggb3ZlcmNsb2NrZWQgZnJlcXVlbmN5OiAlZE1IelxuIiwKPiAtCQkJICAg aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpKTsKPiArCQkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSk7Cj4gIAo+ICAJCXNlcV9wcmludGYobSwgIkN1 cnJlbnQgZnJlcTogJWQgTUh6XG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg cnBzLT5jdXJfZnJlcSkpOwo+ICsJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2Zy ZXEpKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJBY3R1YWwgZnJlcTogJWQgTUh6XG4iLCBjYWdmKTsK PiAgCQlzZXFfcHJpbnRmKG0sICJJZGxlIGZyZXE6ICVkIE1IelxuIiwKPiAtCQkJICAgaW50ZWxf Z3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+aWRsZV9mcmVxKSk7Cj4gKwkJCSAgIGludGVsX2dwdV9m cmVxKHJwcywgcnBzLT5pZGxlX2ZyZXEpKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJNaW4gZnJlcTog JWQgTUh6XG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJl cSkpOwo+ICsJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWluX2ZyZXEpKTsKPiAgCQlz ZXFfcHJpbnRmKG0sICJCb29zdCBmcmVxOiAlZCBNSHpcbiIsCj4gLQkJCSAgIGludGVsX2dwdV9m cmVxKGRldl9wcml2LCBycHMtPmJvb3N0X2ZyZXEpKTsKPiArCQkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPmJvb3N0X2ZyZXEpKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJNYXggZnJlcTogJWQg TUh6XG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5tYXhfZnJlcSkp Owo+ICsJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWF4X2ZyZXEpKTsKPiAgCQlzZXFf cHJpbnRmKG0sCj4gIAkJCSAgICJlZmZpY2llbnQgKFJQZSkgZnJlcXVlbmN5OiAlZCBNSHpcbiIs Cj4gLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9mcmVxKSk7 Cj4gKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5lZmZpY2llbnRfZnJlcSkpOwo+ICAJ fSBlbHNlIHsKPiAgCQlzZXFfcHV0cyhtLCAibm8gUC1zdGF0ZSBpbmZvIGF2YWlsYWJsZVxuIik7 Cj4gIAl9Cj4gQEAgLTE0NjEsNyArMTQ2MSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9zcl9zdGF0dXMo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIHN0YXRpYyBpbnQgaTkxNV9yaW5n X2ZyZXFfdGFibGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIHsKPiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRl KTsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+ICsJ c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7Cj4gIAl1bnNpZ25lZCBp bnQgbWF4X2dwdV9mcmVxLCBtaW5fZ3B1X2ZyZXE7Cj4gIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJl ZjsKPiAgCWludCBncHVfZnJlcSwgaWFfZnJlcTsKPiBAQCAtMTQ4NiwxMCArMTQ4NiwxMSBAQCBz dGF0aWMgaW50IGk5MTVfcmluZ19mcmVxX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq dW51c2VkKQo+ICAJCQkJICAgICAgIEdFTjZfUENPREVfUkVBRF9NSU5fRlJFUV9UQUJMRSwKPiAg CQkJCSAgICAgICAmaWFfZnJlcSwgTlVMTCk7Cj4gIAkJc2VxX3ByaW50ZihtLCAiJWRcdFx0JWRc dFx0XHRcdCVkXG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgKGdwdV9mcmVx ICoKPiAtCQkJCQkJICAgICAoSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwKPiAtCQkJCQkJICAgICAg SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCA/Cj4gLQkJCQkJCSAgICAgIEdFTjlfRlJFUV9TQ0FM RVIgOiAxKSkpLAo+ICsJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsCj4gKwkJCQkJICAoZ3B1X2Zy ZXEgKgo+ICsJCQkJCSAgIChJU19HRU45X0JDKGRldl9wcml2KSB8fAo+ICsJCQkJCSAgICBJTlRF TF9HRU4oZGV2X3ByaXYpID49IDEwID8KPiArCQkJCQkgICAgR0VOOV9GUkVRX1NDQUxFUiA6IDEp KSksCj4gIAkJCSAgICgoaWFfZnJlcSA+PiAwKSAmIDB4ZmYpICogMTAwLAo+ICAJCQkgICAoKGlh X2ZyZXEgPj4gOCkgJiAweGZmKSAqIDEwMCk7Cj4gIAl9Cj4gQEAgLTE3MTcsNyArMTcxOCw3IEBA IHN0YXRpYyBjb25zdCBjaGFyICpycHNfcG93ZXJfdG9fc3RyKHVuc2lnbmVkIGludCBwb3dlcikK PiAgc3RhdGljIGludCBpOTE1X3Jwc19ib29zdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqZGF0YSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9k ZV90b19pOTE1KG0tPnByaXZhdGUpOwo+IC0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndF9wbS5ycHM7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0 LnJwczsKPiAgCXUzMiBhY3RfZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7Cj4gIAlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKPiAgCj4gQEAgLTE3MjksNyArMTczMCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9y cHNfYm9vc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAkJCXZsdl9w dW5pdF9wdXQoZGV2X3ByaXYpOwo+ICAJCQlhY3RfZnJlcSA9IChhY3RfZnJlcSA+PiA4KSAmIDB4 ZmY7Cj4gIAkJfSBlbHNlIHsKPiAtCQkJYWN0X2ZyZXEgPSBpbnRlbF9nZXRfY2FnZihkZXZfcHJp diwKPiArCQkJYWN0X2ZyZXEgPSBpbnRlbF9nZXRfY2FnZihycHMsCj4gIAkJCQkJCSAgSTkxNV9S RUFEKEdFTjZfUlBTVEFUMSkpOwo+ICAJCX0KPiAgCX0KPiBAQCAtMTc0MCwxNyArMTc0MSwxNyBA QCBzdGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICpkYXRhKQo+ICAJCSAgIGF0b21pY19yZWFkKCZycHMtPm51bV93YWl0ZXJzKSk7Cj4gIAlzZXFf cHJpbnRmKG0sICJJbnRlcmFjdGl2ZT8gJWRcbiIsIFJFQURfT05DRShycHMtPnBvd2VyLmludGVy YWN0aXZlKSk7Cj4gIAlzZXFfcHJpbnRmKG0sICJGcmVxdWVuY3kgcmVxdWVzdGVkICVkLCBhY3R1 YWwgJWRcbiIsCj4gLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+Y3VyX2ZyZXEp LAo+IC0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBhY3RfZnJlcSkpOwo+ICsJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgcnBzLT5jdXJfZnJlcSksCj4gKwkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBhY3RfZnJlcSkpOwo+ICAJc2VxX3ByaW50ZihtLCAiICBtaW4gaGFyZDolZCwgc29mdDol ZDsgbWF4IHNvZnQ6JWQsIGhhcmQ6JWRcbiIsCj4gLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+bWluX2ZyZXEpLAo+IC0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMt Pm1pbl9mcmVxX3NvZnRsaW1pdCksCj4gLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0KSwKPiAtCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg cnBzLT5tYXhfZnJlcSkpOwo+ICsJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJl cSksCj4gKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCks Cj4gKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCksCj4g KwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSk7Cj4gIAlzZXFfcHJpbnRm KG0sICIgIGlkbGU6JWQsIGVmZmljaWVudDolZCwgYm9vc3Q6JWRcbiIsCj4gLQkJICAgaW50ZWxf Z3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+aWRsZV9mcmVxKSwKPiAtCQkgICBpbnRlbF9ncHVfZnJl cShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJlcSksCj4gLQkJICAgaW50ZWxfZ3B1X2ZyZXEo ZGV2X3ByaXYsIHJwcy0+Ym9vc3RfZnJlcSkpOwo+ICsJCSAgIGludGVsX2dwdV9mcmVxKHJwcywg cnBzLT5pZGxlX2ZyZXEpLAo+ICsJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5lZmZpY2ll bnRfZnJlcSksCj4gKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmJvb3N0X2ZyZXEpKTsK PiAgCj4gIAlzZXFfcHJpbnRmKG0sICJXYWl0IGJvb3N0czogJWRcbiIsIGF0b21pY19yZWFkKCZy cHMtPmJvb3N0cykpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCA1MTM4ZDFl ZWQzMDYuLjc4YWMwOGRiNDhhMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC0x ODQxLDYgKzE4NDEsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJtX3Jlc3VtZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+ICAKPiAgCWludGVsX2RwX21zdF9yZXN1bWUoZGV2X3ByaXYpOwo+ICAKPiAr CWludGVsX2d0X3BtX2VuYWJsZSgmZGV2X3ByaXYtPmd0KTsKPiArCj4gIAlpbnRlbF9kaXNwbGF5 X3Jlc3VtZShkZXYpOwo+ICAKPiAgCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRldik7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggODg4MmMwOTA4YzNiLi5lYjU0NjAyOTA4MTEg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtNTQzLDk0ICs1NDMsNiBAQCBzdHJ1 Y3QgaTkxNV9zdXNwZW5kX3NhdmVkX3JlZ2lzdGVycyB7Cj4gIAo+ICBzdHJ1Y3Qgdmx2X3MwaXhf c3RhdGU7Cj4gIAo+IC1zdHJ1Y3QgaW50ZWxfcnBzX2VpIHsKPiAtCWt0aW1lX3Qga3RpbWU7Cj4g LQl1MzIgcmVuZGVyX2MwOwo+IC0JdTMyIG1lZGlhX2MwOwo+IC19Owo+IC0KPiAtc3RydWN0IGlu dGVsX3JwcyB7Cj4gLQlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgZW5hYmxpbmcgYW5k IHRoZSB3b3JrZXIgKi8KPiAtCj4gLQkvKgo+IC0JICogd29yaywgaW50ZXJydXB0c19lbmFibGVk IGFuZCBwbV9paXIgYXJlIHByb3RlY3RlZCBieQo+IC0JICogZGV2X3ByaXYtPmlycV9sb2NrCj4g LQkgKi8KPiAtCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+IC0JYm9vbCBpbnRlcnJ1cHRzX2Vu YWJsZWQ7Cj4gLQl1MzIgcG1faWlyOwo+IC0KPiAtCS8qIFBNIGludGVycnVwdCBiaXRzIHRoYXQg c2hvdWxkIG5ldmVyIGJlIG1hc2tlZCAqLwo+IC0JdTMyIHBtX2ludHJtc2tfbWJ6Owo+IC0KPiAt CS8qIEZyZXF1ZW5jaWVzIGFyZSBzdG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0gZGVwZW5k ZW50IG11bHRpcGxlcy4KPiAtCSAqIEluIG90aGVyIHdvcmRzLCAqX2ZyZXEgbmVlZHMgdG8gYmUg bXVsdGlwbGllZCBieSBYIHRvIGJlIGludGVyZXN0aW5nLgo+IC0JICogU29mdCBsaW1pdHMgYXJl IHRob3NlIHdoaWNoIGFyZSB1c2VkIGZvciB0aGUgZHluYW1pYyByZWNsb2NraW5nIGRvbmUKPiAt CSAqIGJ5IHRoZSBkcml2ZXIgKHJhaXNlIGZyZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBh bmQgbG93ZXIgZm9yCj4gLQkgKiBsaWdodGVyIGxvYWRzKS4gSGFyZCBsaW1pdHMgYXJlIHRob3Nl IGltcG9zZWQgYnkgdGhlIGhhcmR3YXJlLgo+IC0JICoKPiAtCSAqIEEgZGlzdGluY3Rpb24gaXMg bWFkZSBmb3Igb3ZlcmNsb2NraW5nLCB3aGljaCBpcyBuZXZlciBlbmFibGVkIGJ5Cj4gLQkgKiBk ZWZhdWx0LCBhbmQgaXMgY29uc2lkZXJlZCB0byBiZSBhYm92ZSB0aGUgaGFyZCBsaW1pdCBpZiBp dCdzCj4gLQkgKiBwb3NzaWJsZSBhdCBhbGwuCj4gLQkgKi8KPiAtCXU4IGN1cl9mcmVxOwkJLyog Q3VycmVudCBmcmVxdWVuY3kgKGNhY2hlZCwgbWF5IG5vdCA9PSBIVykgKi8KPiAtCXU4IG1pbl9m cmVxX3NvZnRsaW1pdDsJLyogTWluaW11bSBmcmVxdWVuY3kgcGVybWl0dGVkIGJ5IHRoZSBkcml2 ZXIgKi8KPiAtCXU4IG1heF9mcmVxX3NvZnRsaW1pdDsJLyogTWF4IGZyZXF1ZW5jeSBwZXJtaXR0 ZWQgYnkgdGhlIGRyaXZlciAqLwo+IC0JdTggbWF4X2ZyZXE7CQkvKiBNYXhpbXVtIGZyZXF1ZW5j eSwgUlAwIGlmIG5vdCBvdmVyY2xvY2tpbmcgKi8KPiAtCXU4IG1pbl9mcmVxOwkJLyogQUtBIFJQ bi4gTWluaW11bSBmcmVxdWVuY3kgKi8KPiAtCXU4IGJvb3N0X2ZyZXE7CQkvKiBGcmVxdWVuY3kg dG8gcmVxdWVzdCB3aGVuIHdhaXQgYm9vc3RpbmcgKi8KPiAtCXU4IGlkbGVfZnJlcTsJCS8qIEZy ZXF1ZW5jeSB0byByZXF1ZXN0IHdoZW4gd2UgYXJlIGlkbGUgKi8KPiAtCXU4IGVmZmljaWVudF9m cmVxOwkvKiBBS0EgUlBlLiBQcmUtZGV0ZXJtaW5lZCBiYWxhbmNlZCBmcmVxdWVuY3kgKi8KPiAt CXU4IHJwMV9mcmVxOwkJLyogImxlc3MgdGhhbiIgUlAwIHBvd2VyL2ZyZXFlbmN5ICovCj4gLQl1 OCBycDBfZnJlcTsJCS8qIE5vbi1vdmVyY2xvY2tlZCBtYXggZnJlcXVlbmN5LiAqLwo+IC0JdTE2 IGdwbGxfcmVmX2ZyZXE7CS8qIHZsdi9jaHYgR1BMTCByZWZlcmVuY2UgZnJlcXVlbmN5ICovCj4g LQo+IC0JaW50IGxhc3RfYWRqOwo+IC0KPiAtCXN0cnVjdCB7Cj4gLQkJc3RydWN0IG11dGV4IG11 dGV4Owo+IC0KPiAtCQllbnVtIHsgTE9XX1BPV0VSLCBCRVRXRUVOLCBISUdIX1BPV0VSIH0gbW9k ZTsKPiAtCQl1bnNpZ25lZCBpbnQgaW50ZXJhY3RpdmU7Cj4gLQo+IC0JCXU4IHVwX3RocmVzaG9s ZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byB1cGxvY2sgKi8KPiAtCQl1OCBkb3duX3Ro cmVzaG9sZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byBkb3duY2xvY2sgKi8KPiAtCX0g cG93ZXI7Cj4gLQo+IC0JYm9vbCBlbmFibGVkOwo+IC0JYXRvbWljX3QgbnVtX3dhaXRlcnM7Cj4g LQlhdG9taWNfdCBib29zdHM7Cj4gLQo+IC0JLyogbWFudWFsIHdhIHJlc2lkZW5jeSBjYWxjdWxh dGlvbnMgKi8KPiAtCXN0cnVjdCBpbnRlbF9ycHNfZWkgZWk7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3Qg aW50ZWxfZ2VuNl9wb3dlcl9tZ210IHsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgcnBzOwo+IC19Owo+ IC0KPiAtLyogZGVmaW5lZCBpbnRlbF9wbS5jICovCj4gLWV4dGVybiBzcGlubG9ja190IG1jaGRl dl9sb2NrOwo+IC0KPiAtc3RydWN0IGludGVsX2lsa19wb3dlcl9tZ210IHsKPiAtCXU4IGN1cl9k ZWxheTsKPiAtCXU4IG1pbl9kZWxheTsKPiAtCXU4IG1heF9kZWxheTsKPiAtCXU4IGZtYXg7Cj4g LQl1OCBmc3RhcnQ7Cj4gLQo+IC0JdTY0IGxhc3RfY291bnQxOwo+IC0JdW5zaWduZWQgbG9uZyBs YXN0X3RpbWUxOwo+IC0JdW5zaWduZWQgbG9uZyBjaGlwc2V0X3Bvd2VyOwo+IC0JdTY0IGxhc3Rf Y291bnQyOwo+IC0JdTY0IGxhc3RfdGltZTI7Cj4gLQl1bnNpZ25lZCBsb25nIGdmeF9wb3dlcjsK PiAtCXU4IGNvcnI7Cj4gLQo+IC0JaW50IGNfbTsKPiAtCWludCByX3Q7Cj4gLX07Cj4gLQo+ICAj ZGVmaW5lIE1BWF9MM19TTElDRVMgMgo+ICBzdHJ1Y3QgaW50ZWxfbDNfcGFyaXR5IHsKPiAgCXUz MiAqcmVtYXBfaW5mb1tNQVhfTDNfU0xJQ0VTXTsKPiBAQCAtMTA2Nyw3ICs5NzksNiBAQCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gIAkJdTMyIGlycV9tYXNrOwo+ICAJCXUzMiBkZV9pcnFf bWFza1tJOTE1X01BWF9QSVBFU107Cj4gIAl9Owo+IC0JdTMyIHBtX3Jwc19ldmVudHM7Cj4gIAl1 MzIgcGlwZXN0YXRfaXJxX21hc2tbSTkxNV9NQVhfUElQRVNdOwo+ICAKPiAgCXN0cnVjdCBpOTE1 X2hvdHBsdWcgaG90cGx1ZzsKPiBAQCAtMTIwMiwxMyArMTExMyw2IEBAIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIHsKPiAgCSAqLwo+ICAJdTMyIGVkcmFtX3NpemVfbWI7Cj4gIAo+IC0JLyogZ2Vu NisgR1QgUE0gc3RhdGUgKi8KPiAtCXN0cnVjdCBpbnRlbF9nZW42X3Bvd2VyX21nbXQgZ3RfcG07 Cj4gLQo+IC0JLyogaWxrLW9ubHkgaXBzL3JwcyBzdGF0ZS4gRXZlcnl0aGluZyBpbiBoZXJlIGlz IHByb3RlY3RlZCBieSB0aGUgZ2xvYmFsCj4gLQkgKiBtY2hkZXZfbG9jayBpbiBpbnRlbF9wbS5j ICovCj4gLQlzdHJ1Y3QgaW50ZWxfaWxrX3Bvd2VyX21nbXQgaXBzOwo+IC0KPiAgCXN0cnVjdCBp OTE1X3Bvd2VyX2RvbWFpbnMgcG93ZXJfZG9tYWluczsKPiAgCj4gIAlzdHJ1Y3QgaTkxNV9wc3Ig cHNyOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IGI4ODI5ODgwNTZiZC4uZWFiMTcw OWQxODk3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTUyLDYgKzUyLDcgQEAK PiAgI2luY2x1ZGUgImd0L2ludGVsX21vY3MuaCIKPiAgI2luY2x1ZGUgImd0L2ludGVsX3Jlc2V0 LmgiCj4gICNpbmNsdWRlICJndC9pbnRlbF9yZW5kZXJzdGF0ZS5oIgo+ICsjaW5jbHVkZSAiZ3Qv aW50ZWxfcnBzLmgiCj4gICNpbmNsdWRlICJndC9pbnRlbF93b3JrYXJvdW5kcy5oIgo+ICAKPiAg I2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gQEAgLTEyNzIsOCArMTI3Myw2IEBAIGludCBpOTE1X2dl bV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQlnb3RvIGVycl9j b250ZXh0Owo+ICAJfQo+ICAKPiAtCWludGVsX2luaXRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsK PiAtCj4gIAlpbnRlbF91Y19pbml0KCZkZXZfcHJpdi0+Z3QudWMpOwo+ICAKPiAgCXJldCA9IGlu dGVsX2d0X2luaXRfaHcoJmRldl9wcml2LT5ndCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4g aW5kZXggNTcyYTVjMzdjYzYxLi41OTg5MjRiM2M1NTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMKPiBAQCAtNDUsNiArNDUsNyBAQAo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKPiAg I2luY2x1ZGUgImd0L2ludGVsX2d0X2lycS5oIgo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3RfcG1f aXJxLmgiCj4gKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKPiAgCj4gICNpbmNsdWRlICJpOTE1 X2Rydi5oIgo+ICAjaW5jbHVkZSAiaTkxNV9pcnEuaCIKPiBAQCAtMzI3LDg3ICszMjgsNiBAQCBz dGF0aWMgaTkxNV9yZWdfdCBnZW42X3BtX2lpcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIAlyZXR1cm4gSU5URUxfR0VOKGRldl9wcml2KSA+PSA4ID8gR0VOOF9HVF9JSVIo MikgOiBHRU42X1BNSUlSOwo+ICB9Cj4gIAo+IC12b2lkIGdlbjExX3Jlc2V0X3Jwc19pbnRlcnJ1 cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGlu dGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmZ3QtPmly cV9sb2NrKTsKPiAtCj4gLQl3aGlsZSAoZ2VuMTFfZ3RfcmVzZXRfb25lX2lpcihndCwgMCwgR0VO MTFfR1RQTSkpCj4gLQkJOwo+IC0KPiAtCWRldl9wcml2LT5ndF9wbS5ycHMucG1faWlyID0gMDsK PiAtCj4gLQlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLX0KPiAtCj4gLXZvaWQg Z2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0Owo+IC0KPiAt CXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLQlnZW42X2d0X3BtX3Jlc2V0X2lpcihn dCwgR0VONl9QTV9SUFNfRVZFTlRTKTsKPiAtCWRldl9wcml2LT5ndF9wbS5ycHMucG1faWlyID0g MDsKPiAtCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiAtfQo+IC0KPiAtdm9pZCBn ZW42X2VuYWJsZV9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0Owo+IC0Jc3Ry dWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gLQo+IC0JaWYgKFJF QURfT05DRShycHMtPmludGVycnVwdHNfZW5hYmxlZCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXNw aW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLQlXQVJOX09OX09OQ0UocnBzLT5wbV9paXIp Owo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+IC0JCVdBUk5fT05fT05D RShnZW4xMV9ndF9yZXNldF9vbmVfaWlyKGd0LCAwLCBHRU4xMV9HVFBNKSk7Cj4gLQllbHNlCj4g LQkJV0FSTl9PTl9PTkNFKEk5MTVfUkVBRChnZW42X3BtX2lpcihkZXZfcHJpdikpICYgZGV2X3By aXYtPnBtX3Jwc19ldmVudHMpOwo+IC0KPiAtCXJwcy0+aW50ZXJydXB0c19lbmFibGVkID0gdHJ1 ZTsKPiAtCWdlbjZfZ3RfcG1fZW5hYmxlX2lycShndCwgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMp Owo+IC0KPiAtCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiAtfQo+IC0KPiAtdTMy IGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsIHUzMiBtYXNrKQo+IC17Cj4gLQlyZXR1cm4gbWFzayAmIH5pOTE1LT5ndF9wbS5ycHMu cG1faW50cm1za19tYno7Cj4gLX0KPiAtCj4gLXZvaWQgZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1 cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gLQlzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0ID0gJmRldl9wcml2LT5ndDsKPiAtCj4gLQlpZiAoIVJFQURfT05DRShycHMtPmludGVycnVw dHNfZW5hYmxlZCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFf bG9jayk7Cj4gLQlycHMtPmludGVycnVwdHNfZW5hYmxlZCA9IGZhbHNlOwo+IC0KPiAtCUk5MTVf V1JJVEUoR0VONl9QTUlOVFJNU0ssIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soZGV2X3ByaXYs IH4wdSkpOwo+IC0KPiAtCWdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoZ3QsIEdFTjZfUE1fUlBTX0VW RU5UUyk7Cj4gLQo+IC0Jc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOwo+IC0JaW50ZWxf c3luY2hyb25pemVfaXJxKGRldl9wcml2KTsKPiAtCj4gLQkvKiBOb3cgdGhhdCB3ZSB3aWxsIG5v dCBiZSBnZW5lcmF0aW5nIGFueSBtb3JlIHdvcmssIGZsdXNoIGFueQo+IC0JICogb3V0c3RhbmRp bmcgdGFza3MuIEFzIHdlIGFyZSBjYWxsZWQgb24gdGhlIFJQUyBpZGxlIHBhdGgsCj4gLQkgKiB3 ZSB3aWxsIHJlc2V0IHRoZSBHUFUgdG8gbWluaW11bSBmcmVxdWVuY2llcywgc28gdGhlIGN1cnJl bnQKPiAtCSAqIHN0YXRlIG9mIHRoZSB3b3JrZXIgY2FuIGJlIGRpc2NhcmRlZC4KPiAtCSAqLwo+ IC0JY2FuY2VsX3dvcmtfc3luYygmcnBzLT53b3JrKTsKPiAtCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExKQo+IC0JCWdlbjExX3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKPiAt CWVsc2UKPiAtCQlnZW42X3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKPiAtfQo+IC0K PiAgdm9pZCBnZW45X3Jlc2V0X2d1Y19pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykK PiAgewo+ICAJc3RydWN0IGludGVsX2d0ICpndCA9IGd1Y190b19ndChndWMpOwo+IEBAIC0xMDY1 LDE5OSArOTg1LDYgQEAgaW50IGludGVsX2dldF9jcnRjX3NjYW5saW5lKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjKQo+ICAJcmV0dXJuIHBvc2l0aW9uOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBp cm9ubGFrZV9ycHNfY2hhbmdlX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmRldl9wcml2 LT51bmNvcmU7Cj4gLQl1MzIgYnVzeV91cCwgYnVzeV9kb3duLCBtYXhfYXZnLCBtaW5fYXZnOwo+ IC0JdTggbmV3X2RlbGF5Owo+IC0KPiAtCXNwaW5fbG9jaygmbWNoZGV2X2xvY2spOwo+IC0KPiAt CWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwKPiAtCQkJICAgICBNRU1JTlRSU1RTLAo+IC0J CQkgICAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNSU5UUlNUUykpOwo+IC0KPiAtCW5l d19kZWxheSA9IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5Owo+IC0KPiAtCWludGVsX3VuY29yZV93 cml0ZTE2KHVuY29yZSwgTUVNSU5UUlNUUywgTUVNSU5UX0VWQUxfQ0hHKTsKPiAtCWJ1c3lfdXAg PSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRVUEFWRyk7Cj4gLQlidXN5X2Rv d24gPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRETkFWRyk7Cj4gLQltYXhf YXZnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ0JNQVhBVkcpOwo+IC0JbWluX2F2ZyA9 IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUlOQVZHKTsKPiAtCj4gLQkvKiBIYW5kbGUg UkNTIGNoYW5nZSByZXF1ZXN0IGZyb20gaHcgKi8KPiAtCWlmIChidXN5X3VwID4gbWF4X2F2Zykg ewo+IC0JCWlmIChkZXZfcHJpdi0+aXBzLmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+aXBzLm1heF9k ZWxheSkKPiAtCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgLSAxOwo+IC0J CWlmIChuZXdfZGVsYXkgPCBkZXZfcHJpdi0+aXBzLm1heF9kZWxheSkKPiAtCQkJbmV3X2RlbGF5 ID0gZGV2X3ByaXYtPmlwcy5tYXhfZGVsYXk7Cj4gLQl9IGVsc2UgaWYgKGJ1c3lfZG93biA8IG1p bl9hdmcpIHsKPiAtCQlpZiAoZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgIT0gZGV2X3ByaXYtPmlw cy5taW5fZGVsYXkpCj4gLQkJCW5ld19kZWxheSA9IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5ICsg MTsKPiAtCQlpZiAobmV3X2RlbGF5ID4gZGV2X3ByaXYtPmlwcy5taW5fZGVsYXkpCj4gLQkJCW5l d19kZWxheSA9IGRldl9wcml2LT5pcHMubWluX2RlbGF5Owo+IC0JfQo+IC0KPiAtCWlmIChpcm9u bGFrZV9zZXRfZHJwcyhkZXZfcHJpdiwgbmV3X2RlbGF5KSkKPiAtCQlkZXZfcHJpdi0+aXBzLmN1 cl9kZWxheSA9IG5ld19kZWxheTsKPiAtCj4gLQlzcGluX3VubG9jaygmbWNoZGV2X2xvY2spOwo+ IC0KPiAtCXJldHVybjsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdmx2X2MwX3JlYWQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQlzdHJ1Y3QgaW50ZWxfcnBzX2VpICpl aSkKPiAtewo+IC0JZWktPmt0aW1lID0ga3RpbWVfZ2V0X3JhdygpOwo+IC0JZWktPnJlbmRlcl9j MCA9IEk5MTVfUkVBRChWTFZfUkVOREVSX0MwX0NPVU5UKTsKPiAtCWVpLT5tZWRpYV9jMCA9IEk5 MTVfUkVBRChWTFZfTUVESUFfQzBfQ09VTlQpOwo+IC19Cj4gLQo+IC12b2lkIGdlbjZfcnBzX3Jl c2V0X2VpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JbWVtc2V0 KCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmVpLCAwLCBzaXplb2YoZGV2X3ByaXYtPmd0X3BtLnJwcy5l aSkpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdTMyIHZsdl93YV9jMF9laShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwbV9paXIpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMg KnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0JY29uc3Qgc3RydWN0IGludGVsX3Jwc19l aSAqcHJldiA9ICZycHMtPmVpOwo+IC0Jc3RydWN0IGludGVsX3Jwc19laSBub3c7Cj4gLQl1MzIg ZXZlbnRzID0gMDsKPiAtCj4gLQlpZiAoKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJF RCkgPT0gMCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQl2bHZfYzBfcmVhZChkZXZfcHJpdiwgJm5v dyk7Cj4gLQo+IC0JaWYgKHByZXYtPmt0aW1lKSB7Cj4gLQkJdTY0IHRpbWUsIGMwOwo+IC0JCXUz MiByZW5kZXIsIG1lZGlhOwo+IC0KPiAtCQl0aW1lID0ga3RpbWVfdXNfZGVsdGEobm93Lmt0aW1l LCBwcmV2LT5rdGltZSk7Cj4gLQo+IC0JCXRpbWUgKj0gZGV2X3ByaXYtPmN6Y2xrX2ZyZXE7Cj4g LQo+IC0JCS8qIFdvcmtsb2FkIGNhbiBiZSBzcGxpdCBiZXR3ZWVuIHJlbmRlciArIG1lZGlhLAo+ IC0JCSAqIGUuZy4gU3dhcEJ1ZmZlcnMgYmVpbmcgYmxpdHRlZCBpbiBYIGFmdGVyIGJlaW5nIHJl bmRlcmVkIGluCj4gLQkJICogbWVzYS4gVG8gYWNjb3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNv bWJpbmUgYm90aCBlbmdpbmVzCj4gLQkJICogaW50byBvdXIgYWN0aXZpdHkgY291bnRlci4KPiAt CQkgKi8KPiAtCQlyZW5kZXIgPSBub3cucmVuZGVyX2MwIC0gcHJldi0+cmVuZGVyX2MwOwo+IC0J CW1lZGlhID0gbm93Lm1lZGlhX2MwIC0gcHJldi0+bWVkaWFfYzA7Cj4gLQkJYzAgPSBtYXgocmVu ZGVyLCBtZWRpYSk7Cj4gLQkJYzAgKj0gMTAwMCAqIDEwMCA8PCA4OyAvKiB0byB1c2VjcyBhbmQg c2NhbGUgdG8gdGhyZXNob2xkJSAqLwo+IC0KPiAtCQlpZiAoYzAgPiB0aW1lICogcnBzLT5wb3dl ci51cF90aHJlc2hvbGQpCj4gLQkJCWV2ZW50cyA9IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwo+ IC0JCWVsc2UgaWYgKGMwIDwgdGltZSAqIHJwcy0+cG93ZXIuZG93bl90aHJlc2hvbGQpCj4gLQkJ CWV2ZW50cyA9IEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQ7Cj4gLQl9Cj4gLQo+IC0JcnBzLT5l aSA9IG5vdzsKPiAtCXJldHVybiBldmVudHM7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdlbjZf cG1fcnBzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+IC17Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+IC0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSwgZ3RfcG0ucnBzLndvcmspOwo+IC0Jc3RydWN0IGludGVsX2d0ICpn dCA9ICZkZXZfcHJpdi0+Z3Q7Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYt Pmd0X3BtLnJwczsKPiAtCWJvb2wgY2xpZW50X2Jvb3N0ID0gZmFsc2U7Cj4gLQlpbnQgbmV3X2Rl bGF5LCBhZGosIG1pbiwgbWF4Owo+IC0JdTMyIHBtX2lpciA9IDA7Cj4gLQo+IC0Jc3Bpbl9sb2Nr X2lycSgmZ3QtPmlycV9sb2NrKTsKPiAtCWlmIChycHMtPmludGVycnVwdHNfZW5hYmxlZCkgewo+ IC0JCXBtX2lpciA9IGZldGNoX2FuZF96ZXJvKCZycHMtPnBtX2lpcik7Cj4gLQkJY2xpZW50X2Jv b3N0ID0gYXRvbWljX3JlYWQoJnJwcy0+bnVtX3dhaXRlcnMpOwo+IC0JfQo+IC0Jc3Bpbl91bmxv Y2tfaXJxKCZndC0+aXJxX2xvY2spOwo+IC0KPiAtCS8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgcXVl dWUgYW55dGhpbmcgd2UncmUgbm90IGdvaW5nIHRvIHByb2Nlc3MuICovCj4gLQlXQVJOX09OKHBt X2lpciAmIH5kZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7Cj4gLQlpZiAoKHBtX2lpciAmIGRldl9w cml2LT5wbV9ycHNfZXZlbnRzKSA9PSAwICYmICFjbGllbnRfYm9vc3QpCj4gLQkJZ290byBvdXQ7 Cj4gLQo+IC0JbXV0ZXhfbG9jaygmcnBzLT5sb2NrKTsKPiAtCj4gLQlwbV9paXIgfD0gdmx2X3dh X2MwX2VpKGRldl9wcml2LCBwbV9paXIpOwo+IC0KPiAtCWFkaiA9IHJwcy0+bGFzdF9hZGo7Cj4g LQluZXdfZGVsYXkgPSBycHMtPmN1cl9mcmVxOwo+IC0JbWluID0gcnBzLT5taW5fZnJlcV9zb2Z0 bGltaXQ7Cj4gLQltYXggPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdDsKPiAtCWlmIChjbGllbnRf Ym9vc3QpCj4gLQkJbWF4ID0gcnBzLT5tYXhfZnJlcTsKPiAtCWlmIChjbGllbnRfYm9vc3QgJiYg bmV3X2RlbGF5IDwgcnBzLT5ib29zdF9mcmVxKSB7Cj4gLQkJbmV3X2RlbGF5ID0gcnBzLT5ib29z dF9mcmVxOwo+IC0JCWFkaiA9IDA7Cj4gLQl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBf VVBfVEhSRVNIT0xEKSB7Cj4gLQkJaWYgKGFkaiA+IDApCj4gLQkJCWFkaiAqPSAyOwo+IC0JCWVs c2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLwo+IC0JCQlhZGogPSBJU19DSEVS UllWSUVXKGRldl9wcml2KSA/IDIgOiAxOwo+IC0KPiAtCQlpZiAobmV3X2RlbGF5ID49IHJwcy0+ bWF4X2ZyZXFfc29mdGxpbWl0KQo+IC0JCQlhZGogPSAwOwo+IC0JfSBlbHNlIGlmIChjbGllbnRf Ym9vc3QpIHsKPiAtCQlhZGogPSAwOwo+IC0JfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQ X0RPV05fVElNRU9VVCkgewo+IC0JCWlmIChycHMtPmN1cl9mcmVxID4gcnBzLT5lZmZpY2llbnRf ZnJlcSkKPiAtCQkJbmV3X2RlbGF5ID0gcnBzLT5lZmZpY2llbnRfZnJlcTsKPiAtCQllbHNlIGlm IChycHMtPmN1cl9mcmVxID4gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCj4gLQkJCW5ld19kZWxh eSA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0Owo+IC0JCWFkaiA9IDA7Cj4gLQl9IGVsc2UgaWYg KHBtX2lpciAmIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQpIHsKPiAtCQlpZiAoYWRqIDwgMCkK PiAtCQkJYWRqICo9IDI7Cj4gLQkJZWxzZSAvKiBDSFYgbmVlZHMgZXZlbiBlbmNvZGUgdmFsdWVz ICovCj4gLQkJCWFkaiA9IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpID8gLTIgOiAtMTsKPiAtCj4g LQkJaWYgKG5ld19kZWxheSA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPiAtCQkJYWRqID0g MDsKPiAtCX0gZWxzZSB7IC8qIHVua25vd24gZXZlbnQgKi8KPiAtCQlhZGogPSAwOwo+IC0JfQo+ IC0KPiAtCXJwcy0+bGFzdF9hZGogPSBhZGo7Cj4gLQo+IC0JLyoKPiAtCSAqIExpbWl0IGRlYm9v c3RpbmcgYW5kIGJvb3N0aW5nIHRvIGtlZXAgb3Vyc2VsdmVzIGF0IHRoZSBleHRyZW1lcwo+IC0J ICogd2hlbiBpbiB0aGUgcmVzcGVjdGl2ZSBwb3dlciBtb2RlcyAoaS5lLiBzbG93bHkgZGVjcmVh c2UgZnJlcXVlbmNpZXMKPiAtCSAqIHdoaWxlIGluIHRoZSBISUdIX1BPV0VSIHpvbmUgYW5kIHNs b3dseSBpbmNyZWFzZSBmcmVxdWVuY2llcyB3aGlsZQo+IC0JICogaW4gdGhlIExPV19QT1dFUiB6 b25lKS4gT24gaWRsZSwgd2Ugd2lsbCBoaXQgdGhlIHRpbWVvdXQgYW5kIGRyb3AKPiAtCSAqIHRv IHRoZSBuZXh0IGxldmVsIHF1aWNrbHksIGFuZCBjb252ZXJzZWx5IGlmIGJ1c3kgd2UgZXhwZWN0 IHRvCj4gLQkgKiBoaXQgYSB3YWl0Ym9vc3QgYW5kIHJhcGlkbHkgc3dpdGNoIGludG8gbWF4IHBv d2VyLgo+IC0JICovCj4gLQlpZiAoKGFkaiA8IDAgJiYgcnBzLT5wb3dlci5tb2RlID09IEhJR0hf UE9XRVIpIHx8Cj4gLQkgICAgKGFkaiA+IDAgJiYgcnBzLT5wb3dlci5tb2RlID09IExPV19QT1dF UikpCj4gLQkJcnBzLT5sYXN0X2FkaiA9IDA7Cj4gLQo+IC0JLyogc3lzZnMgZnJlcXVlbmN5IGlu dGVyZmFjZXMgbWF5IGhhdmUgc251Y2sgaW4gd2hpbGUgc2VydmljaW5nIHRoZQo+IC0JICogaW50 ZXJydXB0Cj4gLQkgKi8KPiAtCW5ld19kZWxheSArPSBhZGo7Cj4gLQluZXdfZGVsYXkgPSBjbGFt cF90KGludCwgbmV3X2RlbGF5LCBtaW4sIG1heCk7Cj4gLQo+IC0JaWYgKGludGVsX3NldF9ycHMo ZGV2X3ByaXYsIG5ld19kZWxheSkpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8g c2V0IG5ldyBHUFUgZnJlcXVlbmN5XG4iKTsKPiAtCQlycHMtPmxhc3RfYWRqID0gMDsKPiAtCX0K PiAtCj4gLQltdXRleF91bmxvY2soJnJwcy0+bG9jayk7Cj4gLQo+IC1vdXQ6Cj4gLQkvKiBNYWtl IHN1cmUgbm90IHRvIGNvcnJ1cHQgUE1JTVIgc3RhdGUgdXNlZCBieSByaW5nYnVmZmVyIG9uIEdF TjYgKi8KPiAtCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLQlpZiAocnBzLT5pbnRl cnJ1cHRzX2VuYWJsZWQpCj4gLQkJZ2VuNl9ndF9wbV91bm1hc2tfaXJxKGd0LCBkZXZfcHJpdi0+ cG1fcnBzX2V2ZW50cyk7Cj4gLQlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLX0K PiAtCj4gLQo+ICAvKioKPiAgICogaXZ5YnJpZGdlX3Bhcml0eV93b3JrIC0gV29ya3F1ZXVlIGNh bGxlZCB3aGVuIGEgcGFyaXR5IGVycm9yIGludGVycnVwdAo+ICAgKiBvY2N1cnJlZC4KPiBAQCAt MTYzMSw1NCArMTM1OCw2IEBAIHN0YXRpYyB2b2lkIGk5eHhfcGlwZV9jcmNfaXJxX2hhbmRsZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCQkJICAgICByZXMxLCByZXMy KTsKPiAgfQo+ICAKPiAtLyogVGhlIFJQUyBldmVudHMgbmVlZCBmb3JjZXdha2UsIHNvIHdlIGFk ZCB0aGVtIHRvIGEgd29yayBxdWV1ZSBhbmQgbWFzayB0aGVpcgo+IC0gKiBJTVIgYml0cyB1bnRp bCB0aGUgd29yayBpcyBkb25lLiBPdGhlciBpbnRlcnJ1cHRzIGNhbiBiZSBwcm9jZXNzZWQgd2l0 aG91dAo+IC0gKiB0aGUgd29yayBxdWV1ZS4gKi8KPiAtdm9pZCBnZW4xMV9ycHNfaXJxX2hhbmRs ZXIoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIHBtX2lpcikKPiAtewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkxNTsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9 ICZpOTE1LT5ndF9wbS5ycHM7Cj4gLQljb25zdCB1MzIgZXZlbnRzID0gaTkxNS0+cG1fcnBzX2V2 ZW50cyAmIHBtX2lpcjsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+aXJxX2xvY2sp Owo+IC0KPiAtCWlmICh1bmxpa2VseSghZXZlbnRzKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZ2Vu Nl9ndF9wbV9tYXNrX2lycShndCwgZXZlbnRzKTsKPiAtCj4gLQlpZiAoIXJwcy0+aW50ZXJydXB0 c19lbmFibGVkKQo+IC0JCXJldHVybjsKPiAtCj4gLQlycHMtPnBtX2lpciB8PSBldmVudHM7Cj4g LQlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOwo+IC19Cj4gLQo+IC12b2lkIGdlbjZfcnBzX2ly cV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBtX2lpcikK PiAtewo+IC0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4g LQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmRldl9wcml2LT5ndDsKPiAtCj4gLQlpZiAocG1faWly ICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpIHsKPiAtCQlzcGluX2xvY2soJmd0LT5pcnFfbG9j ayk7Cj4gLQkJZ2VuNl9ndF9wbV9tYXNrX2lycShndCwgcG1faWlyICYgZGV2X3ByaXYtPnBtX3Jw c19ldmVudHMpOwo+IC0JCWlmIChycHMtPmludGVycnVwdHNfZW5hYmxlZCkgewo+IC0JCQlycHMt PnBtX2lpciB8PSBwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50czsKPiAtCQkJc2NoZWR1 bGVfd29yaygmcnBzLT53b3JrKTsKPiAtCQl9Cj4gLQkJc3Bpbl91bmxvY2soJmd0LT5pcnFfbG9j ayk7Cj4gLQl9Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKPiAtCQlyZXR1 cm47Cj4gLQo+IC0JaWYgKHBtX2lpciAmIFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQo+IC0JCWlu dGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtWRUNTMF0pOwo+IC0K PiAtCWlmIChwbV9paXIgJiBQTV9WRUJPWF9DU19FUlJPUl9JTlRFUlJVUFQpCj4gLQkJRFJNX0RF QlVHKCJDb21tYW5kIHBhcnNlciBlcnJvciwgcG1faWlyIDB4JTA4eFxuIiwgcG1faWlyKTsKPiAt fQo+IC0KPiAgc3RhdGljIHZvaWQgaTl4eF9waXBlc3RhdF9pcnFfcmVzZXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gIAllbnVtIHBpcGUgcGlwZTsKPiBAQCAtMTk4 OSw3ICsxNjY4LDcgQEAgc3RhdGljIGlycXJldHVybl90IHZhbGxleXZpZXdfaXJxX2hhbmRsZXIo aW50IGlycSwgdm9pZCAqYXJnKQo+ICAJCWlmIChndF9paXIpCj4gIAkJCWdlbjZfZ3RfaXJxX2hh bmRsZXIoJmRldl9wcml2LT5ndCwgZ3RfaWlyKTsKPiAgCQlpZiAocG1faWlyKQo+IC0JCQlnZW42 X3Jwc19pcnFfaGFuZGxlcihkZXZfcHJpdiwgcG1faWlyKTsKPiArCQkJZ2VuNl9ycHNfaXJxX2hh bmRsZXIoJmRldl9wcml2LT5ndC5ycHMsIHBtX2lpcik7Cj4gIAo+ICAJCWlmIChob3RwbHVnX3N0 YXR1cykKPiAgCQkJaTl4eF9ocGRfaXJxX2hhbmRsZXIoZGV2X3ByaXYsIGhvdHBsdWdfc3RhdHVz KTsKPiBAQCAtMjM5Myw3ICsyMDcyLDcgQEAgc3RhdGljIHZvaWQgaWxrX2Rpc3BsYXlfaXJxX2hh bmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJfQo+ICAKPiAgCWlm IChJU19HRU4oZGV2X3ByaXYsIDUpICYmIGRlX2lpciAmIERFX1BDVV9FVkVOVCkKPiAtCQlpcm9u bGFrZV9ycHNfY2hhbmdlX2lycV9oYW5kbGVyKGRldl9wcml2KTsKPiArCQlnZW41X3Jwc19pcnFf aGFuZGxlcigmZGV2X3ByaXYtPmd0LnJwcyk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGl2Yl9k aXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiBA QCAtMjQ5OCw3ICsyMTc3LDcgQEAgc3RhdGljIGlycXJldHVybl90IGlyb25sYWtlX2lycV9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiAgCQlpZiAocG1faWlyKSB7Cj4gIAkJCUk5MTVfV1JJ VEUoR0VONl9QTUlJUiwgcG1faWlyKTsKPiAgCQkJcmV0ID0gSVJRX0hBTkRMRUQ7Cj4gLQkJCWdl bjZfcnBzX2lycV9oYW5kbGVyKGRldl9wcml2LCBwbV9paXIpOwo+ICsJCQlnZW42X3Jwc19pcnFf aGFuZGxlcigmZGV2X3ByaXYtPmd0LnJwcywgcG1faWlyKTsKPiAgCQl9Cj4gIAl9Cj4gIAo+IEBA IC00MjcwLDEzICszOTQ5LDEwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpOTY1X2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmFyZykKPiAgdm9pZCBpbnRlbF9pcnFfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAm ZGV2X3ByaXYtPmRybTsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3Rf cG0ucnBzOwo+ICAJaW50IGk7Cj4gIAo+ICAJaW50ZWxfaHBkX2luaXRfd29yayhkZXZfcHJpdik7 Cj4gIAo+IC0JSU5JVF9XT1JLKCZycHMtPndvcmssIGdlbjZfcG1fcnBzX3dvcmspOwo+IC0KPiAg CUlOSVRfV09SSygmZGV2X3ByaXYtPmwzX3Bhcml0eS5lcnJvcl93b3JrLCBpdnlicmlkZ2VfcGFy aXR5X3dvcmspOwo+ICAJZm9yIChpID0gMDsgaSA8IE1BWF9MM19TTElDRVM7ICsraSkKPiAgCQlk ZXZfcHJpdi0+bDNfcGFyaXR5LnJlbWFwX2luZm9baV0gPSBOVUxMOwo+IEBAIC00Mjg1LDMzICsz OTYxLDYgQEAgdm9pZCBpbnRlbF9pcnFfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIAlpZiAoSEFTX0dUX1VDKGRldl9wcml2KSAmJiBJTlRFTF9HRU4oZGV2X3ByaXYp IDwgMTEpCj4gIAkJZGV2X3ByaXYtPmd0LnBtX2d1Y19ldmVudHMgPSBHVUNfSU5UUl9HVUMySE9T VCA8PCAxNjsKPiAgCj4gLQkvKiBMZXQncyB0cmFjayB0aGUgZW5hYmxlZCBycHMgZXZlbnRzICov Cj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCj4gLQkJLyogV2FHc3ZSQzBSZXNpZGVu Y3lNZXRob2Q6dmx2ICovCj4gLQkJZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMgPSBHRU42X1BNX1JQ X1VQX0VJX0VYUElSRUQ7Cj4gLQllbHNlCj4gLQkJZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMgPSAo R0VONl9QTV9SUF9VUF9USFJFU0hPTEQgfAo+IC0JCQkJCSAgIEdFTjZfUE1fUlBfRE9XTl9USFJF U0hPTEQgfAo+IC0JCQkJCSAgIEdFTjZfUE1fUlBfRE9XTl9USU1FT1VUKTsKPiAtCj4gLQkvKiBX ZSBzaGFyZSB0aGUgcmVnaXN0ZXIgd2l0aCBvdGhlciBlbmdpbmUgKi8KPiAtCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID4gOSkKPiAtCQlHRU1fV0FSTl9PTihkZXZfcHJpdi0+cG1fcnBzX2V2ZW50 cyAmIDB4ZmZmZjAwMDApOwo+IC0KPiAtCXJwcy0+cG1faW50cm1za19tYnogPSAwOwo+IC0KPiAt CS8qCj4gLQkgKiBTTkIsSVZCLEhTVyBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFyZCBoYW5nIG9u IGxvb3BpbmcgYmF0Y2hidWZmZXIKPiAtCSAqIGlmIEdFTjZfUE1fVVBfRUlfRVhQSVJFRCBpcyBt YXNrZWQuCj4gLQkgKgo+IC0JICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJvZHVj ZWQgb24gVkxWLENIVi4KPiAtCSAqLwo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPD0gNykK PiAtCQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKPiAt Cj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KQo+IC0JCXJwcy0+cG1faW50cm1za19t YnogfD0gR0VOOF9QTUlOVFJfRElTQUJMRV9SRURJUkVDVF9UT19HVUM7Cj4gLQo+ICAJZGV2LT52 YmxhbmtfZGlzYWJsZV9pbW1lZGlhdGUgPSB0cnVlOwo+ICAKPiAgCS8qIE1vc3QgcGxhdGZvcm1z IHRyZWF0IHRoZSBkaXNwbGF5IGlycSBibG9jayBhcyBhbiBhbHdheXMtb24KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaXJxLmgKPiBpbmRleCAxOWEzYmMwMTk1MzUuLmQwZDkxYzZlMDBkNyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9pcnEuaAo+IEBAIC0yMiw5ICsyMiw2IEBAIHN0cnVjdCBpbnRlbF9ndDsK PiAgc3RydWN0IGludGVsX2d1YzsKPiAgc3RydWN0IGludGVsX3VuY29yZTsKPiAgCj4gLXZvaWQg Z2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBwbV9paXIpOwo+ IC12b2lkIGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTMyIHBtX2lpcik7Cj4gLQo+ICB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxfaXJxX2Zpbmkoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgaW50IGludGVsX2lycV9pbnN0YWxsKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcG11LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCj4g aW5kZXggODU5MTI5MTdjMDYyLi4yNjZkNjZiMWZiN2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wbXUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cG11LmMKPiBAQCAtMTIsNiArMTIsNyBAQAo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3Vz ZXIuaCIKPiAgI2luY2x1ZGUgImd0L2ludGVsX2d0X3BtLmgiCj4gICNpbmNsdWRlICJndC9pbnRl bF9yYzYuaCIKPiArI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgo+ICAKPiAgI2luY2x1ZGUgImk5 MTVfZHJ2LmgiCj4gICNpbmNsdWRlICJpOTE1X3BtdS5oIgo+IEBAIC0zNTgsMjUgKzM1OSwyNiBA QCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHVuc2lnbmVkIGludCBwZXJp b2RfbnMpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5pOTE1Owo+ICAJ c3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKPiAgCXN0cnVjdCBpOTE1 X3BtdSAqcG11ID0gJmk5MTUtPnBtdTsKPiArCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZndC0+ cnBzOwo+ICAKPiAgCWlmIChwbXUtPmVuYWJsZSAmIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9Q TVVfQUNUVUFMX0ZSRVFVRU5DWSkpIHsKPiAgCQl1MzIgdmFsOwo+ICAKPiAtCQl2YWwgPSBpOTE1 LT5ndF9wbS5ycHMuY3VyX2ZyZXE7Cj4gKwkJdmFsID0gcnBzLT5jdXJfZnJlcTsKPiAgCQlpZiAo aW50ZWxfZ3RfcG1fZ2V0X2lmX2F3YWtlKGd0KSkgewo+ICAJCQl2YWwgPSBpbnRlbF91bmNvcmVf cmVhZF9ub3RyYWNlKHVuY29yZSwgR0VONl9SUFNUQVQxKTsKPiAtCQkJdmFsID0gaW50ZWxfZ2V0 X2NhZ2YoaTkxNSwgdmFsKTsKPiArCQkJdmFsID0gaW50ZWxfZ2V0X2NhZ2YocnBzLCB2YWwpOwo+ ICAJCQlpbnRlbF9ndF9wbV9wdXQoZ3QpOwo+ICAJCX0KPiAgCj4gIAkJYWRkX3NhbXBsZV9tdWx0 KCZwbXUtPnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXSwKPiAtCQkJCWludGVsX2dwdV9m cmVxKGk5MTUsIHZhbCksCj4gKwkJCQlpbnRlbF9ncHVfZnJlcShycHMsIHZhbCksCj4gIAkJCQlw ZXJpb2RfbnMgLyAxMDAwKTsKPiAgCX0KPiAgCj4gIAlpZiAocG11LT5lbmFibGUgJiBjb25maWdf ZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kpKSB7Cj4gIAkJYWRkX3Nh bXBsZV9tdWx0KCZwbXUtPnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXSwKPiAtCQkJCWlu dGVsX2dwdV9mcmVxKGk5MTUsIGk5MTUtPmd0X3BtLnJwcy5jdXJfZnJlcSksCj4gKwkJCQlpbnRl bF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpLAo+ICAJCQkJcGVyaW9kX25zIC8gMTAwMCk7 Cj4gIAl9Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1 ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IGluZGV4IDQ1NzVm MzY4NDU1ZC4uMDhjZTJlZWVjZjdlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVxdWVzdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0 LmMKPiBAQCAtMzEsNiArMzEsNyBAQAo+ICAKPiAgI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9jb250 ZXh0LmgiCj4gICNpbmNsdWRlICJndC9pbnRlbF9jb250ZXh0LmgiCj4gKyNpbmNsdWRlICJndC9p bnRlbF9ycHMuaCIKPiAgCj4gICNpbmNsdWRlICJpOTE1X2FjdGl2ZS5oIgo+ICAjaW5jbHVkZSAi aTkxNV9kcnYuaCIKPiBAQCAtMjU3LDggKzI1OCw4IEBAIGJvb2wgaTkxNV9yZXF1ZXN0X3JldGly ZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgCWlmICh0ZXN0X2JpdChETUFfRkVOQ0VfRkxB R19FTkFCTEVfU0lHTkFMX0JJVCwgJnJxLT5mZW5jZS5mbGFncykpCj4gIAkJaTkxNV9yZXF1ZXN0 X2NhbmNlbF9icmVhZGNydW1iKHJxKTsKPiAgCWlmIChpOTE1X3JlcXVlc3RfaGFzX3dhaXRib29z dChycSkpIHsKPiAtCQlHRU1fQlVHX09OKCFhdG9taWNfcmVhZCgmcnEtPmk5MTUtPmd0X3BtLnJw cy5udW1fd2FpdGVycykpOwo+IC0JCWF0b21pY19kZWMoJnJxLT5pOTE1LT5ndF9wbS5ycHMubnVt X3dhaXRlcnMpOwo+ICsJCUdFTV9CVUdfT04oIWF0b21pY19yZWFkKCZycS0+ZW5naW5lLT5ndC0+ cnBzLm51bV93YWl0ZXJzKSk7Cj4gKwkJYXRvbWljX2RlYygmcnEtPmVuZ2luZS0+Z3QtPnJwcy5u dW1fd2FpdGVycyk7Cj4gIAl9Cj4gIAlpZiAoIXRlc3RfYml0KEk5MTVfRkVOQ0VfRkxBR19BQ1RJ VkUsICZycS0+ZmVuY2UuZmxhZ3MpKSB7Cj4gIAkJc2V0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNU SVZFLCAmcnEtPmZlbmNlLmZsYWdzKTsKPiBAQCAtMTQ2Niw3ICsxNDY3LDcgQEAgbG9uZyBpOTE1 X3JlcXVlc3Rfd2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgCSAqLwo+ICAJaWYgKGZs YWdzICYgSTkxNV9XQUlUX1BSSU9SSVRZKSB7Cj4gIAkJaWYgKCFpOTE1X3JlcXVlc3Rfc3RhcnRl ZChycSkgJiYgSU5URUxfR0VOKHJxLT5pOTE1KSA+PSA2KQo+IC0JCQlnZW42X3Jwc19ib29zdChy cSk7Cj4gKwkJCWludGVsX3Jwc19ib29zdChycSk7Cj4gIAkJaTkxNV9zY2hlZHVsZV9idW1wX3By aW9yaXR5KHJxLCBJOTE1X1BSSU9SSVRZX1dBSVQpOwo+ICAJfQo+ICAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zeXNmcy5jCj4gaW5kZXggYmYwMzliOGJhNTkzLi42NTQ3NjkwOWQxYmYgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jCj4gQEAgLTMxLDYgKzMxLDcgQEAKPiAgI2luY2x1ZGUg PGxpbnV4L3N5c2ZzLmg+Cj4gIAo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxfcmM2LmgiCj4gKyNpbmNs dWRlICJndC9pbnRlbF9ycHMuaCIKPiAgCj4gICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICAjaW5j bHVkZSAiaTkxNV9zeXNmcy5oIgo+IEBAIC0yNTksNiArMjYwLDcgQEAgc3RhdGljIHNzaXplX3Qg Z3RfYWN0X2ZyZXFfbWh6X3Nob3coc3RydWN0IGRldmljZSAqa2RldiwKPiAgCQkJCSAgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gKwlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKPiAgCWludGVsX3dha2Vy ZWZfdCB3YWtlcmVmOwo+ICAJdTMyIGZyZXE7Cj4gIAo+IEBAIC0yNzEsMzEgKzI3MywzMSBAQCBz dGF0aWMgc3NpemVfdCBndF9hY3RfZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LAo+ ICAKPiAgCQlmcmVxID0gKGZyZXEgPj4gOCkgJiAweGZmOwo+ICAJfSBlbHNlIHsKPiAtCQlmcmVx ID0gaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKPiAr CQlmcmVxID0gaW50ZWxfZ2V0X2NhZ2YocnBzLCBJOTE1X1JFQUQoR0VONl9SUFNUQVQxKSk7Cj4g IAl9Cj4gIAo+ICAJaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3 YWtlcmVmKTsKPiAgCj4gLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwg aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIGZyZXEpKTsKPiArCXJldHVybiBzbnByaW50ZihidWYs IFBBR0VfU0laRSwgIiVkXG4iLCBpbnRlbF9ncHVfZnJlcShycHMsIGZyZXEpKTsKPiAgfQo+ICAK PiAgc3RhdGljIHNzaXplX3QgZ3RfY3VyX2ZyZXFfbWh6X3Nob3coc3RydWN0IGRldmljZSAqa2Rl diwKPiAgCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3Rv X2k5MTUoa2Rldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJw czsKPiAgCj4gIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKPiAtCQkJ aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCj4gLQkJCQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJw cy5jdXJfZnJlcSkpOwo+ICsJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpKTsK PiAgfQo+ICAKPiAgc3RhdGljIHNzaXplX3QgZ3RfYm9vc3RfZnJlcV9taHpfc2hvdyhzdHJ1Y3Qg ZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3Rv X2k5MTUoa2Rldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJw czsKPiAgCj4gIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKPiAtCQkJ aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCj4gLQkJCQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJw cy5ib29zdF9mcmVxKSk7Cj4gKwkJCWludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ib29zdF9mcmVx KSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFfbWh6X3N0b3JlKHN0 cnVjdCBkZXZpY2UgKmtkZXYsCj4gQEAgLTMwMyw3ICszMDUsNyBAQCBzdGF0aWMgc3NpemVfdCBn dF9ib29zdF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAo+ICAJCQkJICAgICAg IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gLQlzdHJ1Y3Qg aW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiArCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwo+ICAJYm9vbCBib29zdCA9IGZhbHNlOwo+ICAJ c3NpemVfdCByZXQ7Cj4gIAl1MzIgdmFsOwo+IEBAIC0zMTMsNyArMzE1LDcgQEAgc3RhdGljIHNz aXplX3QgZ3RfYm9vc3RfZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKPiAgCQly ZXR1cm4gcmV0Owo+ICAKPiAgCS8qIFZhbGlkYXRlIGFnYWluc3QgKHN0YXRpYykgaGFyZHdhcmUg bGltaXRzICovCj4gLQl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKPiAr CXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKPiAgCWlmICh2YWwgPCBycHMtPm1p bl9mcmVxIHx8IHZhbCA+IHJwcy0+bWF4X2ZyZXEpCj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAo+ IEBAIC0zMzMsMTkgKzMzNSwxOSBAQCBzdGF0aWMgc3NpemVfdCB2bHZfcnBlX2ZyZXFfbWh6X3No b3coc3RydWN0IGRldmljZSAqa2RldiwKPiAgCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwo+ICsJc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndC5ycHM7Cj4gIAo+ICAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFH RV9TSVpFLCAiJWRcbiIsCj4gLQkJCWludGVsX2dwdV9mcmVxKGRldl9wcml2LAo+IC0JCQkJICAg ICAgIGRldl9wcml2LT5ndF9wbS5ycHMuZWZmaWNpZW50X2ZyZXEpKTsKPiArCQkJaW50ZWxfZ3B1 X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBzc2l6 ZV90IGd0X21heF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKPiArCXN0cnVjdCBp bnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwo+ICAKPiAgCXJldHVybiBzbnByaW50 ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAo+IC0JCQlpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwK PiAtCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBzLm1heF9mcmVxX3NvZnRsaW1pdCkpOwo+ ICsJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSk7Cj4gIH0K PiAgCj4gIHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNl ICprZGV2LAo+IEBAIC0zNTMsMTkgKzM1NSwxNyBAQCBzdGF0aWMgc3NpemVfdCBndF9tYXhfZnJl cV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKPiAgCQkJCSAgICAgY29uc3QgY2hhciAq YnVmLCBzaXplX3QgY291bnQpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJw cyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4g LQl1MzIgdmFsOwo+ICsJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7 Cj4gIAlzc2l6ZV90IHJldDsKPiArCXUzMiB2YWw7Cj4gIAo+ICAJcmV0ID0ga3N0cnRvdTMyKGJ1 ZiwgMCwgJnZhbCk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0Jd2FrZXJl ZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7Cj4gIAltdXRl eF9sb2NrKCZycHMtPmxvY2spOwo+ICAKPiAtCXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKGRldl9w cml2LCB2YWwpOwo+ICsJdmFsID0gaW50ZWxfZnJlcV9vcGNvZGUocnBzLCB2YWwpOwo+ICAJaWYg KHZhbCA8IHJwcy0+bWluX2ZyZXEgfHwKPiAgCSAgICB2YWwgPiBycHMtPm1heF9mcmVxIHx8Cj4g IAkgICAgdmFsIDwgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpIHsKPiBAQCAtMzc1LDcgKzM3NSw3 IEBAIHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICpr ZGV2LAo+ICAKPiAgCWlmICh2YWwgPiBycHMtPnJwMF9mcmVxKQo+ICAJCURSTV9ERUJVRygiVXNl ciByZXF1ZXN0ZWQgb3ZlcmNsb2NraW5nIHRvICVkXG4iLAo+IC0JCQkgIGludGVsX2dwdV9mcmVx KGRldl9wcml2LCB2YWwpKTsKPiArCQkJICBpbnRlbF9ncHVfZnJlcShycHMsIHZhbCkpOwo+ICAK PiAgCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0ID0gdmFsOwo+ICAKPiBAQCAtMzgzLDE0ICszODMs MTUgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2Ug KmtkZXYsCj4gIAkJICAgICAgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQsCj4gIAkJICAgICAgcnBz LT5tYXhfZnJlcV9zb2Z0bGltaXQpOwo+ICAKPiAtCS8qIFdlIHN0aWxsIG5lZWQgKl9zZXRfcnBz IHRvIHByb2Nlc3MgdGhlIG5ldyBtYXhfZGVsYXkgYW5kCj4gKwkvKgo+ICsJICogV2Ugc3RpbGwg bmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0aGUgbmV3IG1heF9kZWxheSBhbmQKPiAgCSAqIHVw ZGF0ZSB0aGUgaW50ZXJydXB0IGxpbWl0cyBhbmQgUE1JTlRSTVNLIGV2ZW4gdGhvdWdoCj4gLQkg KiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkgYmUgdW5jaGFuZ2VkLiAqLwo+IC0JcmV0ID0gaW50ZWxf c2V0X3JwcyhkZXZfcHJpdiwgdmFsKTsKPiArCSAqIGZyZXF1ZW5jeSByZXF1ZXN0IG1heSBiZSB1 bmNoYW5nZWQuCj4gKwkgKi8KPiArCWludGVsX3Jwc19zZXQocnBzLCB2YWwpOwo+ICAKPiAgdW5s b2NrOgo+ICAJbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwo+IC0JaW50ZWxfcnVudGltZV9wbV9w dXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKPiAgCj4gIAlyZXR1cm4gcmV0ID86 IGNvdW50Owo+ICB9Cj4gQEAgLTM5OCwxMCArMzk5LDEwIEBAIHN0YXRpYyBzc2l6ZV90IGd0X21h eF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAo+ICBzdGF0aWMgc3NpemVfdCBn dF9taW5fZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gKwlzdHJ1Y3QgaW50ZWxf cnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKPiAgCj4gIAlyZXR1cm4gc25wcmludGYoYnVm LCBQQUdFX1NJWkUsICIlZFxuIiwKPiAtCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCj4gLQkJ CQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5taW5fZnJlcV9zb2Z0bGltaXQpKTsKPiArCQkJ aW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkpOwo+ICB9Cj4gIAo+ ICBzdGF0aWMgc3NpemVfdCBndF9taW5fZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2Rl diwKPiBAQCAtNDA5LDE5ICs0MTAsMTcgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWluX2ZyZXFfbWh6 X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCj4gIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwg c2l6ZV90IGNvdW50KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JdTMy IHZhbDsKPiArCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwo+ICAJ c3NpemVfdCByZXQ7Cj4gKwl1MzIgdmFsOwo+ICAKPiAgCXJldCA9IGtzdHJ0b3UzMihidWYsIDAs ICZ2YWwpOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXdha2VyZWYgPSBp bnRlbF9ydW50aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOwo+ICAJbXV0ZXhfbG9j aygmcnBzLT5sb2NrKTsKPiAgCj4gLQl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwg dmFsKTsKPiArCXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKPiAgCWlmICh2YWwg PCBycHMtPm1pbl9mcmVxIHx8Cj4gIAkgICAgdmFsID4gcnBzLT5tYXhfZnJlcSB8fAo+ICAJICAg IHZhbCA+IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSB7Cj4gQEAgLTQzNSwxNCArNDM0LDE1IEBA IHN0YXRpYyBzc2l6ZV90IGd0X21pbl9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2 LAo+ICAJCSAgICAgIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0LAo+ICAJCSAgICAgIHJwcy0+bWF4 X2ZyZXFfc29mdGxpbWl0KTsKPiAgCj4gLQkvKiBXZSBzdGlsbCBuZWVkICpfc2V0X3JwcyB0byBw cm9jZXNzIHRoZSBuZXcgbWluX2RlbGF5IGFuZAo+ICsJLyoKPiArCSAqIFdlIHN0aWxsIG5lZWQg Kl9zZXRfcnBzIHRvIHByb2Nlc3MgdGhlIG5ldyBtaW5fZGVsYXkgYW5kCj4gIAkgKiB1cGRhdGUg dGhlIGludGVycnVwdCBsaW1pdHMgYW5kIFBNSU5UUk1TSyBldmVuIHRob3VnaAo+IC0JICogZnJl cXVlbmN5IHJlcXVlc3QgbWF5IGJlIHVuY2hhbmdlZC4gKi8KPiAtCXJldCA9IGludGVsX3NldF9y cHMoZGV2X3ByaXYsIHZhbCk7Cj4gKwkgKiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkgYmUgdW5jaGFu Z2VkLgo+ICsJICovCj4gKwlpbnRlbF9ycHNfc2V0KHJwcywgdmFsKTsKPiAgCj4gIHVubG9jazoK PiAgCW11dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KCZk ZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gIAo+ICAJcmV0dXJuIHJldCA/OiBjb3Vu dDsKPiAgfQo+IEBAIC00NjQsMTUgKzQ2NCwxNSBAQCBzdGF0aWMgREVWSUNFX0FUVFIoZ3RfUlBu X2ZyZXFfbWh6LCBTX0lSVUdPLCBndF9ycF9taHpfc2hvdywgTlVMTCk7Cj4gIHN0YXRpYyBzc2l6 ZV90IGd0X3JwX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKPiAtCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+ICsJc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmRldl9wcml2LT5ndC5ycHM7Cj4gIAl1MzIgdmFsOwo+ICAKPiAgCWlmIChhdHRyID09ICZk ZXZfYXR0cl9ndF9SUDBfZnJlcV9taHopCj4gLQkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+cnAwX2ZyZXEpOwo+ICsJCXZhbCA9IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5y cDBfZnJlcSk7Cj4gIAllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9ndF9SUDFfZnJlcV9taHop Cj4gLQkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+cnAxX2ZyZXEpOwo+ICsJ CXZhbCA9IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ycDFfZnJlcSk7Cj4gIAllbHNlIGlmIChh dHRyID09ICZkZXZfYXR0cl9ndF9SUG5fZnJlcV9taHopCj4gLQkJdmFsID0gaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHJwcy0+bWluX2ZyZXEpOwo+ICsJCXZhbCA9IGludGVsX2dwdV9mcmVxKHJw cywgcnBzLT5taW5fZnJlcSk7Cj4gIAllbHNlCj4gIAkJQlVHKCk7Cj4gIAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYwo+IGluZGV4IDM2MjIzNDQ0OTA4Ny4uNjc0MTUwN2M3NGYzIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jCj4gQEAgLTE5Nyw4ICsxOTcsNiBAQCBzdGF0aWMgdm9pZCBpOTE1 X2lyb25sYWtlX2dldF9tZW1fZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gIAkJYnJlYWs7Cj4gIAl9Cj4gIAo+IC0JZGV2X3ByaXYtPmlwcy5yX3QgPSBkZXZfcHJpdi0+ bWVtX2ZyZXE7Cj4gLQo+ICAJc3dpdGNoIChjc2lwbGwgJiAweDNmZikgewo+ICAJY2FzZSAweDAw YzoKPiAgCQlkZXZfcHJpdi0+ZnNiX2ZyZXEgPSAzMjAwOwo+IEBAIC0yMjcsMTQgKzIyNSw2IEBA IHN0YXRpYyB2b2lkIGk5MTVfaXJvbmxha2VfZ2V0X21lbV9mcmVxKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAgCQlkZXZfcHJpdi0+ZnNiX2ZyZXEgPSAwOwo+ICAJCWJyZWFr Owo+ICAJfQo+IC0KPiAtCWlmIChkZXZfcHJpdi0+ZnNiX2ZyZXEgPT0gMzIwMCkgewo+IC0JCWRl dl9wcml2LT5pcHMuY19tID0gMDsKPiAtCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmZzYl9mcmVxID4g MzIwMCAmJiBkZXZfcHJpdi0+ZnNiX2ZyZXEgPD0gNDgwMCkgewo+IC0JCWRldl9wcml2LT5pcHMu Y19tID0gMTsKPiAtCX0gZWxzZSB7Cj4gLQkJZGV2X3ByaXYtPmlwcy5jX20gPSAyOwo+IC0JfQo+ ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGN4c3JfbGF0ZW5jeSBjeHNyX2xhdGVuY3lf dGFibGVbXSA9IHsKPiBAQCAtNjMzOSwxODY1ICs2MzI5LDI1OCBAQCB2b2lkIGludGVsX2luaXRf aXBjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCWludGVsX2VuYWJsZV9p cGMoZGV2X3ByaXYpOwo+ICB9Cj4gIAo+IC0vKgo+IC0gKiBMb2NrIHByb3RlY3RpbmcgSVBTIHJl bGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzCj4gLSAqLwo+IC1ERUZJTkVfU1BJTkxPQ0sobWNoZGV2X2xv Y2spOwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNwYXJhbXMgewo+ICsJdTE2IGk7Cj4gKwl1MTYg dDsKPiArCXUxNiBtOwo+ICsJdTE2IGM7Cj4gK30gY3BhcmFtc1tdID0gewo+ICsJeyAxLCAxMzMz LCAzMDEsIDI4NjY0IH0sCj4gKwl7IDEsIDEwNjYsIDI5NCwgMjQ0NjAgfSwKPiArCXsgMSwgODAw LCAyOTQsIDI1MTkyIH0sCj4gKwl7IDAsIDEzMzMsIDI3NiwgMjc2MDUgfSwKPiArCXsgMCwgMTA2 NiwgMjc2LCAyNzYwNSB9LAo+ICsJeyAwLCA4MDAsIDIzMSwgMjM3ODQgfSwKPiArfTsKPiAgCj4g LWJvb2wgaXJvbmxha2Vfc2V0X2RycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4 IHZhbCkKPiArc3RhdGljIHZvaWQgaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0Jc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gJmk5MTUtPnVuY29yZTsKPiAtCXUxNiByZ3Zzd2N0bDsKPiAtCj4gLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZtY2hkZXZfbG9jayk7Cj4gLQo+IC0Jcmd2c3djdGwgPSBpbnRlbF91bmNvcmVfcmVh ZDE2KHVuY29yZSwgTUVNU1dDVEwpOwo+IC0JaWYgKHJndnN3Y3RsICYgTUVNQ1RMX0NNRF9TVFMp IHsKPiAtCQlEUk1fREVCVUcoImdwdSBidXN5LCBSQ1MgY2hhbmdlIHJlamVjdGVkXG4iKTsKPiAt CQlyZXR1cm4gZmFsc2U7IC8qIHN0aWxsIGJ1c3kgd2l0aCBhbm90aGVyIGNvbW1hbmQgKi8KPiAt CX0KPiAtCj4gLQlyZ3Zzd2N0bCA9IChNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExfQ01EX1NI SUZUKSB8Cj4gLQkJKHZhbCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfCBNRU1DVExfU0ZDQVZNOwo+ IC0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwo+IC0J aW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOwo+IC0KPiAtCXJn dnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3Jl LCBNRU1TV0NUTCwgcmd2c3djdGwpOwo+IC0KPiAtCXJldHVybiB0cnVlOwo+ICsJLyoKPiArCSAq IE9uIEliZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sK PiArCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZh aWwgdG8KPiArCSAqIHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4KPiArCSAqLwo+ ICsJSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRfQ0xPQ0tfR0FU RV9ESVNBQkxFKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaXJvbmxha2VfZW5hYmxlX2RycHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgdm9pZCBnNHhfZGlz YWJsZV90cmlja2xlX2ZlZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7 Cj4gLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3ByaXYtPnVuY29yZTsKPiAt CXUzMiByZ3Ztb2RlY3RsOwo+IC0JdTggZm1heCwgZm1pbiwgZnN0YXJ0LCB2c3RhcnQ7Cj4gLQo+ IC0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0KPiAtCXJndm1vZGVjdGwgPSBpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTU1PREVDVEwpOwo+IC0KPiAtCS8qIEVuYWJsZSB0ZW1w IHJlcG9ydGluZyAqLwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBQTU1JU0MsIEk5 MTVfUkVBRChQTU1JU0MpIHwgTUNQUENFX0VOKTsKPiAtCWludGVsX3VuY29yZV93cml0ZTE2KHVu Y29yZSwgVFNDMSwgSTkxNV9SRUFEKFRTQzEpIHwgVFNFKTsKPiAtCj4gLQkvKiAxMDBtcyBSQyBl dmFsdWF0aW9uIGludGVydmFscyAqLwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNV UEVJLCAxMDAwMDApOwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNETkVJLCAxMDAw MDApOwo+IC0KPiAtCS8qIFNldCBtYXgvbWluIHRocmVzaG9sZHMgdG8gOTBtcyBhbmQgODBtcyBy ZXNwZWN0aXZlbHkgKi8KPiAtCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDQk1BWEFWRywg OTAwMDApOwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNCTUlOQVZHLCA4MDAwMCk7 Cj4gLQo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSUhZU1QsIDEpOwo+ICsJZW51 bSBwaXBlIHBpcGU7Cj4gIAo+IC0JLyogU2V0IHVwIG1pbiwgbWF4LCBhbmQgY3VyIGZvciBpbnRl cnJ1cHQgaGFuZGxpbmcgKi8KPiAtCWZtYXggPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1BWF9N QVNLKSA+PiBNRU1NT0RFX0ZNQVhfU0hJRlQ7Cj4gLQlmbWluID0gKHJndm1vZGVjdGwgJiBNRU1N T0RFX0ZNSU5fTUFTSyk7Cj4gLQlmc3RhcnQgPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRlNUQVJU X01BU0spID4+Cj4gLQkJTUVNTU9ERV9GU1RBUlRfU0hJRlQ7Cj4gKwlmb3JfZWFjaF9waXBlKGRl dl9wcml2LCBwaXBlKSB7Cj4gKwkJSTkxNV9XUklURShEU1BDTlRSKHBpcGUpLAo+ICsJCQkgICBJ OTE1X1JFQUQoRFNQQ05UUihwaXBlKSkgfAo+ICsJCQkgICBESVNQUExBTkVfVFJJQ0tMRV9GRUVE X0RJU0FCTEUpOwo+ICAKPiAtCXZzdGFydCA9IChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBY VkZSRVEoZnN0YXJ0KSkgJgo+IC0JCSAgUFhWRlJFUV9QWF9NQVNLKSA+PiBQWFZGUkVRX1BYX1NI SUZUOwo+ICsJCUk5MTVfV1JJVEUoRFNQU1VSRihwaXBlKSwgSTkxNV9SRUFEKERTUFNVUkYocGlw ZSkpKTsKPiArCQlQT1NUSU5HX1JFQUQoRFNQU1VSRihwaXBlKSk7Cj4gKwl9Cj4gK30KPiAgCj4g LQlkZXZfcHJpdi0+aXBzLmZtYXggPSBmbWF4OyAvKiBJUFMgY2FsbGJhY2sgd2lsbCBpbmNyZWFz ZSB0aGlzICovCj4gLQlkZXZfcHJpdi0+aXBzLmZzdGFydCA9IGZzdGFydDsKPiArc3RhdGljIHZv aWQgaWxrX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiArewo+ICsJdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFOwo+ICAKPiAtCWRldl9wcml2LT5pcHMubWF4X2RlbGF5ID0gZnN0YXJ0Owo+IC0JZGV2X3By aXYtPmlwcy5taW5fZGVsYXkgPSBmbWluOwo+IC0JZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgPSBm c3RhcnQ7Cj4gKwkvKgo+ICsJICogUmVxdWlyZWQgZm9yIEZCQwo+ICsJICogV2FGYmNEaXNhYmxl RHBmY0Nsb2NrR2F0aW5nOmlsawo+ICsJICovCj4gKwlkc3BjbGtfZ2F0ZSB8PSBJTEtfRFBGQ1JV TklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Cj4gKwkJICAgSUxLX0RQRkNVTklUX0NMT0NLX0dBVEVf RElTQUJMRSB8Cj4gKwkJICAgSUxLX0RQRkRVTklUX0NMT0NLX0dBVEVfRU5BQkxFOwo+ICAKPiAt CURSTV9ERUJVR19EUklWRVIoImZtYXg6ICVkLCBmbWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKPiAt CQkJIGZtYXgsIGZtaW4sIGZzdGFydCk7Cj4gKwlJOTE1X1dSSVRFKFBDSF8zRENHRElTMCwKPiAr CQkgICBNQVJJVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAo+ICsJCSAgIFNWU01VTklUX0NMT0NL X0dBVEVfRElTQUJMRSk7Cj4gKwlJOTE1X1dSSVRFKFBDSF8zRENHRElTMSwKPiArCQkgICBWRk1V TklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Cj4gIAo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwKPiAtCQkJICAgTUVNSU5UUkVOLAo+IC0JCQkgICBNRU1JTlRfQ1hfU1VQUl9FTiB8IE1FTUlO VF9FVkFMX0NIR19FTik7Cj4gKwkvKgo+ICsJICogQWNjb3JkaW5nIHRvIHRoZSBzcGVjIHRoZSBm b2xsb3dpbmcgYml0cyBzaG91bGQgYmUgc2V0IGluCj4gKwkgKiBvcmRlciB0byBlbmFibGUgbWVt b3J5IHNlbGYtcmVmcmVzaAo+ICsJICogVGhlIGJpdCAyMi8yMSBvZiAweDQyMDA0Cj4gKwkgKiBU aGUgYml0IDUgb2YgMHg0MjAyMAo+ICsJICogVGhlIGJpdCAxNSBvZiAweDQ1MDAwCj4gKwkgKi8K PiArCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCj4gKwkJICAgKEk5MTVfUkVBRChJ TEtfRElTUExBWV9DSElDS0VOMikgfAo+ICsJCSAgICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQ RkRfRlVMTCkpOwo+ICsJZHNwY2xrX2dhdGUgfD0gSUxLX0RQQVJCVU5JVF9DTE9DS19HQVRFX0VO QUJMRTsKPiArCUk5MTVfV1JJVEUoRElTUF9BUkJfQ1RMLAo+ICsJCSAgIChJOTE1X1JFQUQoRElT UF9BUkJfQ1RMKSB8Cj4gKwkJICAgIERJU1BfRkJDX1dNX0RJUykpOwo+ICAKPiAgCS8qCj4gLQkg KiBJbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBpbiBpcm9ubGFrZV9pcnFfcG9zdGluc3RhbGwK PiArCSAqIEJhc2VkIG9uIHRoZSBkb2N1bWVudCBmcm9tIGhhcmR3YXJlIGd1eXMgdGhlIGZvbGxv d2luZyBiaXRzCj4gKwkgKiBzaG91bGQgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0 byBlbmFibGUgRkJDLgo+ICsJICogVGhlIGJpdCAyMiBvZiAweDQyMDAwCj4gKwkgKiBUaGUgYml0 IDIyIG9mIDB4NDIwMDQKPiArCSAqIFRoZSBiaXQgNyw4LDkgb2YgMHg0MjAyMC4KPiAgCSAqLwo+ ICsJaWYgKElTX0lST05MQUtFX00oZGV2X3ByaXYpKSB7Cj4gKwkJLyogV2FGYmNBc3luY2hGbGlw RGlzYWJsZUZiY1F1ZXVlOmlsayAqLwo+ICsJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tF TjEsCj4gKwkJCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMSkgfAo+ICsJCQkgICBJ TEtfRkJDUV9ESVMpOwo+ICsJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCj4gKwkJ CSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAo+ICsJCQkgICBJTEtfRFBBUkJf R0FURSk7Cj4gKwl9Cj4gIAo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgVklEU1RBUlQs IHZzdGFydCk7Cj4gLQlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgVklEU1RBUlQp Owo+ICsJSTkxNV9XUklURShJTEtfRFNQQ0xLX0dBVEVfRCwgZHNwY2xrX2dhdGUpOwo+ICAKPiAt CXJndm1vZGVjdGwgfD0gTUVNTU9ERV9TV01PREVfRU47Cj4gLQlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBNRU1NT0RFQ1RMLCByZ3Ztb2RlY3RsKTsKPiArCUk5MTVfV1JJVEUoSUxLX0RJU1BM QVlfQ0hJQ0tFTjIsCj4gKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8Cj4g KwkJICAgSUxLX0VMUElOXzQwOV9TRUxFQ1QpOwo+ICsJSTkxNV9XUklURShfM0RfQ0hJQ0tFTjIs Cj4gKwkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJTkVEIDw8IDE2IHwKPiArCQkgICBf M0RfQ0hJQ0tFTjJfV01fUkVBRF9QSVBFTElORUQpOwo+ICAKPiAtCWlmICh3YWl0X2Zvcl9hdG9t aWMoKGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNU1dDVEwpICYKPiAtCQkJICAgICBNRU1D VExfQ01EX1NUUykgPT0gMCwgMTApKQo+IC0JCURSTV9FUlJPUigic3R1Y2sgdHJ5aW5nIHRvIGNo YW5nZSBwZXJmIG1vZGVcbiIpOwo+IC0JbWRlbGF5KDEpOwo+ICsJLyogV2FEaXNhYmxlUmVuZGVy Q2FjaGVQaXBlbGluZWRGbHVzaDppbGsgKi8KPiArCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLAo+ ICsJCSAgIF9NQVNLRURfQklUX0VOQUJMRShDTTBfUElQRUxJTkVEX1JFTkRFUl9GTFVTSF9ESVNB QkxFKSk7Cj4gIAo+IC0JaXJvbmxha2Vfc2V0X2RycHMoZGV2X3ByaXYsIGZzdGFydCk7Cj4gKwkv KiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVzaDppbGsgKi8KPiArCUk5MTVf V1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZMVVNIX0VOQUJM RSkpOwo+ICAKPiAtCWRldl9wcml2LT5pcHMubGFzdF9jb3VudDEgPQo+IC0JCWludGVsX3VuY29y ZV9yZWFkKHVuY29yZSwgRE1JRUMpICsKPiAtCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERE UkVDKSArCj4gLQkJaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBDU0lFQyk7Cj4gLQlkZXZfcHJp di0+aXBzLmxhc3RfdGltZTEgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwo+IC0JZGV2X3By aXYtPmlwcy5sYXN0X2NvdW50MiA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0ZYRUMpOwo+ IC0JZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUyID0ga3RpbWVfZ2V0X3Jhd19ucygpOwo+ICsJZzR4 X2Rpc2FibGVfdHJpY2tsZV9mZWVkKGRldl9wcml2KTsKPiAgCj4gLQlzcGluX3VubG9ja19pcnEo Jm1jaGRldl9sb2NrKTsKPiArCWlieF9pbml0X2Nsb2NrX2dhdGluZyhkZXZfcHJpdik7Cj4gIH0K PiAgCj4gLXN0YXRpYyB2b2lkIGlyb25sYWtlX2Rpc2FibGVfZHJwcyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKPiArc3RhdGljIHZvaWQgY3B0X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0Jc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gJmk5MTUtPnVuY29yZTsKPiAtCXUxNiByZ3Zzd2N0bDsKPiAtCj4gLQlzcGlu X2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gLQo+IC0Jcmd2c3djdGwgPSBpbnRlbF91bmNvcmVf cmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOwo+IC0KPiAtCS8qIEFjayBpbnRlcnJ1cHRzLCBkaXNh YmxlIEVGQyBpbnRlcnJ1cHQgKi8KPiAtCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCj4gLQkJ CSAgIE1FTUlOVFJFTiwKPiAtCQkJICAgaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1JTlRS RU4pICYKPiAtCQkJICAgfk1FTUlOVF9FVkFMX0NIR19FTik7Cj4gLQlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBNRU1JTlRSU1RTLCBNRU1JTlRfRVZBTF9DSEcpOwo+IC0JaW50ZWxfdW5jb3Jl X3dyaXRlKHVuY29yZSwKPiAtCQkJICAgREVJRVIsCj4gLQkJCSAgIGludGVsX3VuY29yZV9yZWFk KHVuY29yZSwgREVJRVIpICYgfkRFX1BDVV9FVkVOVCk7Cj4gLQlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBERUlJUiwgREVfUENVX0VWRU5UKTsKPiAtCWludGVsX3VuY29yZV93cml0ZSh1bmNv cmUsCj4gLQkJCSAgIERFSU1SLAo+IC0JCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERF SU1SKSB8IERFX1BDVV9FVkVOVCk7Cj4gLQo+IC0JLyogR28gYmFjayB0byB0aGUgc3RhcnRpbmcg ZnJlcXVlbmN5ICovCj4gLQlpcm9ubGFrZV9zZXRfZHJwcyhpOTE1LCBpOTE1LT5pcHMuZnN0YXJ0 KTsKPiAtCW1kZWxheSgxKTsKPiAtCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOwo+IC0JaW50 ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsKPiAtCW1kZWxheSgx KTsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsJdTMyIHZhbDsKPiAgCj4gLQlzcGluX3VubG9ja19p cnEoJm1jaGRldl9sb2NrKTsKPiArCS8qCj4gKwkgKiBPbiBJYmV4IFBlYWsgYW5kIENvdWdhciBQ b2ludCwgd2UgbmVlZCB0byBkaXNhYmxlIGNsb2NrCj4gKwkgKiBnYXRpbmcgZm9yIHRoZSBwYW5l bCBwb3dlciBzZXF1ZW5jZXIgb3IgaXQgd2lsbCBmYWlsIHRvCj4gKwkgKiBzdGFydCB1cCB3aGVu IG5vIHBvcnRzIGFyZSBhY3RpdmUuCj4gKwkgKi8KPiArCUk5MTVfV1JJVEUoU09VVEhfRFNQQ0xL X0dBVEVfRCwgUENIX0RQTFNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Cj4gKwkJICAgUENIX0RQ TFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKPiArCQkgICBQQ0hfQ1BVTklUX0NMT0NLX0dBVEVf RElTQUJMRSk7Cj4gKwlJOTE1X1dSSVRFKFNPVVRIX0NISUNLRU4yLCBJOTE1X1JFQUQoU09VVEhf Q0hJQ0tFTjIpIHwKPiArCQkgICBEUExTX0VEUF9QUFNfRklYX0RJUyk7Cj4gKwkvKiBUaGUgYmVs b3cgZml4ZXMgdGhlIHdlaXJkIGRpc3BsYXkgY29ycnVwdGlvbiwgYSBmZXcgcGl4ZWxzIHNoaWZ0 ZWQKPiArCSAqIGRvd253YXJkLCBvbiAob25seSkgTFZEUyBvZiBzb21lIEhQIGxhcHRvcHMgd2l0 aCBJVlkuCj4gKwkgKi8KPiArCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKPiArCQl2 YWwgPSBJOTE1X1JFQUQoVFJBTlNfQ0hJQ0tFTjIocGlwZSkpOwo+ICsJCXZhbCB8PSBUUkFOU19D SElDS0VOMl9USU1JTkdfT1ZFUlJJREU7Cj4gKwkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9GRElf UE9MQVJJVFlfUkVWRVJTRUQ7Cj4gKwkJaWYgKGRldl9wcml2LT52YnQuZmRpX3J4X3BvbGFyaXR5 X2ludmVydGVkKQo+ICsJCQl2YWwgfD0gVFJBTlNfQ0hJQ0tFTjJfRkRJX1BPTEFSSVRZX1JFVkVS U0VEOwo+ICsJCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRlJBTUVfU1RBUlRfREVMQVlfTUFTSzsK PiArCQl2YWwgJj0gflRSQU5TX0NISUNLRU4yX0RJU0FCTEVfREVFUF9DT0xPUl9DT1VOVEVSOwo+ ICsJCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQX0NPTE9SX01PREVTV0lUQ0g7 Cj4gKwkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMihwaXBlKSwgdmFsKTsKPiArCX0KPiArCS8q IFdBRFAwQ2xvY2tHYXRpbmdEaXNhYmxlICovCj4gKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBw aXBlKSB7Cj4gKwkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMShwaXBlKSwKPiArCQkJICAgVFJB TlNfQ0hJQ0tFTjFfRFAwVU5JVF9HQ19ESVNBQkxFKTsKPiArCX0KPiAgfQo+ICAKPiAtLyogVGhl cmUncyBhIGZ1bm55IGh3IGlzc3VlIHdoZXJlIHRoZSBodyByZXR1cm5zIGFsbCAwIHdoZW4gcmVh ZGluZyBmcm9tCj4gLSAqIEdFTjZfUlBfSU5URVJSVVBUX0xJTUlUUy4gSGVuY2Ugd2UgYWx3YXlz IG5lZWQgdG8gY29tcHV0ZSB0aGUgZGVzaXJlZCB2YWx1ZQo+IC0gKiBvdXJzZWx2ZXMsIGluc3Rl YWQgb2YgZG9pbmcgYSBybXcgY3ljbGUgKHdoaWNoIG1pZ2h0IHJlc3VsdCBpbiB1cyBjbGVhcmlu Zwo+IC0gKiBhbGwgbGltaXRzIGFuZCB0aGUgZ3B1IHN0dWNrIGF0IHdoYXRldmVyIGZyZXF1ZW5j eSBpdCBpcyBhdCBhdG0pLgo+IC0gKi8KPiAtc3RhdGljIHUzMiBpbnRlbF9ycHNfbGltaXRzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKQo+ICtzdGF0aWMgdm9pZCBn ZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4g IHsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0J dTMyIGxpbWl0czsKPiAtCj4gLQkvKiBPbmx5IHNldCB0aGUgZG93biBsaW1pdCB3aGVuIHdlJ3Zl IHJlYWNoZWQgdGhlIGxvd2VzdCBsZXZlbCB0byBhdm9pZAo+IC0JICogZ2V0dGluZyBtb3JlIGlu dGVycnVwdHMsIG90aGVyd2lzZSBsZWF2ZSB0aGlzIGNsZWFyLiBUaGlzIHByZXZlbnRzIGEKPiAt CSAqIHJhY2UgaW4gdGhlIGh3IHdoZW4gY29taW5nIG91dCBvZiByYzY6IFRoZXJlJ3MgYSB0aW55 IHdpbmRvdyB3aGVyZQo+IC0JICogdGhlIGh3IHJ1bnMgYXQgdGhlIG1pbmltYWwgY2xvY2sgYmVm b3JlIHNlbGVjdGluZyB0aGUgZGVzaXJlZAo+IC0JICogZnJlcXVlbmN5LCBpZiB0aGUgZG93biB0 aHJlc2hvbGQgZXhwaXJlcyBpbiB0aGF0IHdpbmRvdyB3ZSB3aWxsIG5vdAo+IC0JICogcmVjZWl2 ZSBhIGRvd24gaW50ZXJydXB0LiAqLwo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkg ewo+IC0JCWxpbWl0cyA9IChycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkgPDwgMjM7Cj4gLQkJaWYg KHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPiAtCQkJbGltaXRzIHw9IChycHMtPm1p bl9mcmVxX3NvZnRsaW1pdCkgPDwgMTQ7Cj4gLQl9IGVsc2Ugewo+IC0JCWxpbWl0cyA9IHJwcy0+ bWF4X2ZyZXFfc29mdGxpbWl0IDw8IDI0Owo+IC0JCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9z b2Z0bGltaXQpCj4gLQkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNjsK PiAtCX0KPiArCXUzMiB0bXA7Cj4gIAo+IC0JcmV0dXJuIGxpbWl0czsKPiArCXRtcCA9IEk5MTVf UkVBRChNQ0hfU1NLUEQpOwo+ICsJaWYgKCh0bXAgJiBNQ0hfU1NLUERfV00wX01BU0spICE9IE1D SF9TU0tQRF9XTTBfVkFMKQo+ICsJCURSTV9ERUJVR19LTVMoIldyb25nIE1DSF9TU0tQRCB2YWx1 ZTogMHglMDh4IFRoaXMgY2FuIGNhdXNlIHVuZGVycnVucy5cbiIsCj4gKwkJCSAgICAgIHRtcCk7 Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHJwc19zZXRfcG93ZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCBpbnQgbmV3X3Bvd2VyKQo+ICtzdGF0aWMgdm9pZCBnZW42X2luaXRf Y2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0J c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gLQl1MzIgdGhy ZXNob2xkX3VwID0gMCwgdGhyZXNob2xkX2Rvd24gPSAwOyAvKiBpbiAlICovCj4gLQl1MzIgZWlf dXAgPSAwLCBlaV9kb3duID0gMDsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPnBv d2VyLm11dGV4KTsKPiArCXUzMiBkc3BjbGtfZ2F0ZSA9IElMS19WUkhVTklUX0NMT0NLX0dBVEVf RElTQUJMRTsKPiAgCj4gLQlpZiAobmV3X3Bvd2VyID09IHJwcy0+cG93ZXIubW9kZSkKPiAtCQly ZXR1cm47Cj4gKwlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7Cj4g IAo+IC0JLyogTm90ZSB0aGUgdW5pdHMgaGVyZSBhcmUgbm90IGV4YWN0bHkgMXVzLCBidXQgMTI4 MG5zLiAqLwo+IC0Jc3dpdGNoIChuZXdfcG93ZXIpIHsKPiAtCWNhc2UgTE9XX1BPV0VSOgo+IC0J CS8qIFVwY2xvY2sgaWYgbW9yZSB0aGFuIDk1JSBidXN5IG92ZXIgMTZtcyAqLwo+IC0JCWVpX3Vw ID0gMTYwMDA7Cj4gLQkJdGhyZXNob2xkX3VwID0gOTU7Cj4gKwlJOTE1X1dSSVRFKElMS19ESVNQ TEFZX0NISUNLRU4yLAo+ICsJCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAo+ ICsJCSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKPiAgCj4gLQkJLyogRG93bmNsb2NrIGlmIGxl c3MgdGhhbiA4NSUgYnVzeSBvdmVyIDMybXMgKi8KPiAtCQllaV9kb3duID0gMzIwMDA7Cj4gLQkJ dGhyZXNob2xkX2Rvd24gPSA4NTsKPiAtCQlicmVhazsKPiArCS8qIFdhRGlzYWJsZUhpWlBsYW5l c1doZW5NU0FBRW5hYmxlZDpzbmIgKi8KPiArCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4sCj4gKwkJ ICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOX0hJWl9QTEFORV9ESVNBQkxFX01TQUFf NFhfU05CKSk7Cj4gIAo+IC0JY2FzZSBCRVRXRUVOOgo+IC0JCS8qIFVwY2xvY2sgaWYgbW9yZSB0 aGFuIDkwJSBidXN5IG92ZXIgMTNtcyAqLwo+IC0JCWVpX3VwID0gMTMwMDA7Cj4gLQkJdGhyZXNo b2xkX3VwID0gOTA7Cj4gKwkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVz aDpzbmIgKi8KPiArCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxF KFJDX09QX0ZMVVNIX0VOQUJMRSkpOwo+ICAKPiAtCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFu IDc1JSBidXN5IG92ZXIgMzJtcyAqLwo+IC0JCWVpX2Rvd24gPSAzMjAwMDsKPiAtCQl0aHJlc2hv bGRfZG93biA9IDc1Owo+IC0JCWJyZWFrOwo+ICsJLyoKPiArCSAqIEJTcGVjIHJlY29vbWVuZHMg OHg0IHdoZW4gTVNBQSBpcyB1c2VkLAo+ICsJICogaG93ZXZlciBpbiBwcmFjdGljZSAxNng0IHNl ZW1zIGZhc3Rlc3QuCj4gKwkgKgo+ICsJICogTm90ZSB0aGF0IFBTL1dNIHRocmVhZCBjb3VudHMg ZGVwZW5kIG9uIHRoZSBXSVogaGFzaGluZwo+ICsJICogZGlzYWJsZSBiaXQsIHdoaWNoIHdlIGRv bid0IHRvdWNoIGhlcmUsIGJ1dCBpdCdzIGdvb2QKPiArCSAqIHRvIGtlZXAgaW4gbWluZCAoc2Vl IDNEU1RBVEVfUFMgYW5kIDNEU1RBVEVfV00pLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKEdFTjZf R1RfTU9ERSwKPiArCQkgICBfTUFTS0VEX0ZJRUxEKEdFTjZfV0laX0hBU0hJTkdfTUFTSywgR0VO Nl9XSVpfSEFTSElOR18xNng0KSk7Cj4gIAo+IC0JY2FzZSBISUdIX1BPV0VSOgo+IC0JCS8qIFVw Y2xvY2sgaWYgbW9yZSB0aGFuIDg1JSBidXN5IG92ZXIgMTBtcyAqLwo+IC0JCWVpX3VwID0gMTAw MDA7Cj4gLQkJdGhyZXNob2xkX3VwID0gODU7Cj4gKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwK PiArCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKENNMF9TVENfRVZJQ1RfRElTQUJMRV9MUkFfU05C KSk7Cj4gIAo+IC0JCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1z ICovCj4gLQkJZWlfZG93biA9IDMyMDAwOwo+IC0JCXRocmVzaG9sZF9kb3duID0gNjA7Cj4gLQkJ YnJlYWs7Cj4gLQl9Cj4gKwlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwKPiArCQkgICBJOTE1X1JF QUQoR0VONl9VQ0dDVEwxKSB8Cj4gKwkJICAgR0VONl9CTEJVTklUX0NMT0NLX0dBVEVfRElTQUJM RSB8Cj4gKwkJICAgR0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiAgCj4gLQkvKiBX aGVuIGJ5dCBjYW4gc3Vydml2ZSB3aXRob3V0IHN5c3RlbSBoYW5nIHdpdGggZHluYW1pYwo+IC0J ICogc3cgZnJlcSBhZGp1c3RtZW50cywgdGhpcyByZXN0cmljdGlvbiBjYW4gYmUgbGlmdGVkLgo+ ICsJLyogQWNjb3JkaW5nIHRvIHRoZSBCU3BlYyB2b2wxZywgYml0IDEyIChSQ1BCVU5JVCkgY2xv Y2sKPiArCSAqIGdhdGluZyBkaXNhYmxlIG11c3QgYmUgc2V0LiAgRmFpbHVyZSB0byBzZXQgaXQg cmVzdWx0cyBpbgo+ICsJICogZmxpY2tlcmluZyBwaXhlbHMgZHVlIHRvIFogd3JpdGUgb3JkZXJp bmcgZmFpbHVyZXMgYWZ0ZXIKPiArCSAqIHNvbWUgYW1vdW50IG9mIHJ1bnRpbWUgaW4gdGhlIE1l c2EgImZpcmUiIGRlbW8sIGFuZCBVbmlnaW5lCj4gKwkgKiBTYW5jdHVhcnkgYW5kIFRyb3BpY3Ms IGFuZCBhcHBhcmVudGx5IGFueXRoaW5nIGVsc2Ugd2l0aAo+ICsJICogYWxwaGEgdGVzdCBvciBw aXhlbCBkaXNjYXJkLgo+ICsJICoKPiArCSAqIEFjY29yZGluZyB0byB0aGUgc3BlYywgYml0IDEx IChSQ0NVTklUKSBtdXN0IGFsc28gYmUgc2V0LAo+ICsJICogYnV0IHdlIGRpZG4ndCBkZWJ1ZyBh Y3R1YWwgdGVzdGNhc2VzIHRvIGZpbmQgaXQgb3V0Lgo+ICsJICoKPiArCSAqIFdhRGlzYWJsZVJD Q1VuaXRDbG9ja0dhdGluZzpzbmIKPiArCSAqIFdhRGlzYWJsZVJDUEJVbml0Q2xvY2tHYXRpbmc6 c25iCj4gIAkgKi8KPiAtCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKPiAtCQlnb3RvIHNr aXBfaHdfd3JpdGU7Cj4gLQo+IC0JSTkxNV9XUklURShHRU42X1JQX1VQX0VJLAo+IC0JCSAgIEdU X0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsIGVpX3VwKSk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZf UlBfVVBfVEhSRVNIT0xELAo+IC0JCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsCj4g LQkJCQkgICAgICAgZWlfdXAgKiB0aHJlc2hvbGRfdXAgLyAxMDApKTsKPiAtCj4gLQlJOTE1X1dS SVRFKEdFTjZfUlBfRE9XTl9FSSwKPiAtCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2 LCBlaV9kb3duKSk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsCj4gLQkJ ICAgR1RfSU5URVJWQUxfRlJPTV9VUyhkZXZfcHJpdiwKPiAtCQkJCSAgICAgICBlaV9kb3duICog dGhyZXNob2xkX2Rvd24gLyAxMDApKTsKPiAtCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJP TCwKPiAtCQkgICAoSU5URUxfR0VOKGRldl9wcml2KSA+IDkgPyAwIDogR0VONl9SUF9NRURJQV9U VVJCTykgfAo+IC0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAo+IC0JCSAgIEdF TjZfUlBfTUVESUFfSVNfR0ZYIHwKPiAtCQkgICBHRU42X1JQX0VOQUJMRSB8Cj4gLQkJICAgR0VO Nl9SUF9VUF9CVVNZX0FWRyB8Cj4gLQkJICAgR0VONl9SUF9ET1dOX0lETEVfQVZHKTsKPiAtCj4g LXNraXBfaHdfd3JpdGU6Cj4gLQlycHMtPnBvd2VyLm1vZGUgPSBuZXdfcG93ZXI7Cj4gLQlycHMt PnBvd2VyLnVwX3RocmVzaG9sZCA9IHRocmVzaG9sZF91cDsKPiAtCXJwcy0+cG93ZXIuZG93bl90 aHJlc2hvbGQgPSB0aHJlc2hvbGRfZG93bjsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZ2VuNl9z ZXRfcnBzX3RocmVzaG9sZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2 YWwpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBz Owo+IC0JaW50IG5ld19wb3dlcjsKPiAtCj4gLQluZXdfcG93ZXIgPSBycHMtPnBvd2VyLm1vZGU7 Cj4gLQlzd2l0Y2ggKHJwcy0+cG93ZXIubW9kZSkgewo+IC0JY2FzZSBMT1dfUE9XRVI6Cj4gLQkJ aWYgKHZhbCA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEgKyAxICYmCj4gLQkJICAgIHZhbCA+IHJwcy0+ Y3VyX2ZyZXEpCj4gLQkJCW5ld19wb3dlciA9IEJFVFdFRU47Cj4gLQkJYnJlYWs7Cj4gKwlJOTE1 X1dSSVRFKEdFTjZfVUNHQ1RMMiwKPiArCQkgICBHRU42X1JDUEJVTklUX0NMT0NLX0dBVEVfRElT QUJMRSB8Cj4gKwkJICAgR0VONl9SQ0NVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Cj4gIAo+IC0J Y2FzZSBCRVRXRUVOOgo+IC0JCWlmICh2YWwgPD0gcnBzLT5lZmZpY2llbnRfZnJlcSAmJgo+IC0J CSAgICB2YWwgPCBycHMtPmN1cl9mcmVxKQo+IC0JCQluZXdfcG93ZXIgPSBMT1dfUE9XRVI7Cj4g LQkJZWxzZSBpZiAodmFsID49IHJwcy0+cnAwX2ZyZXEgJiYKPiAtCQkJIHZhbCA+IHJwcy0+Y3Vy X2ZyZXEpCj4gLQkJCW5ld19wb3dlciA9IEhJR0hfUE9XRVI7Cj4gLQkJYnJlYWs7Cj4gKwkvKiBX YVN0cmlwc0ZhbnNEaXNhYmxlRmFzdENsaXBQZXJmb3JtYW5jZUZpeDpzbmIgKi8KPiArCUk5MTVf V1JJVEUoXzNEX0NISUNLRU4zLAo+ICsJCSAgIF9NQVNLRURfQklUX0VOQUJMRShfM0RfQ0hJQ0tF TjNfU0ZfRElTQUJMRV9GQVNUQ0xJUF9DVUxMKSk7Cj4gIAo+IC0JY2FzZSBISUdIX1BPV0VSOgo+ IC0JCWlmICh2YWwgPCAocnBzLT5ycDFfZnJlcSArIHJwcy0+cnAwX2ZyZXEpID4+IDEgJiYKPiAt CQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKPiAtCQkJbmV3X3Bvd2VyID0gQkVUV0VFTjsKPiAt CQlicmVhazsKPiAtCX0KPiAtCS8qIE1heC9taW4gYmlucyBhcmUgc3BlY2lhbCAqLwo+IC0JaWYg KHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPiAtCQluZXdfcG93ZXIgPSBMT1dfUE9X RVI7Cj4gLQlpZiAodmFsID49IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQo+IC0JCW5ld19wb3dl ciA9IEhJR0hfUE9XRVI7Cj4gKwkvKgo+ICsJICogQnNwZWMgc2F5czoKPiArCSAqICJUaGlzIGJp dCBtdXN0IGJlIHNldCBpZiAzRFNUQVRFX0NMSVAgY2xpcCBtb2RlIGlzIHNldCB0byBub3JtYWwg YW5kCj4gKwkgKiAzRFNUQVRFX1NGIG51bWJlciBvZiBTRiBvdXRwdXQgYXR0cmlidXRlcyBpcyBt b3JlIHRoYW4gMTYuIgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKPiArCQkg ICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU4zX1NGX0RJU0FCTEVfUElQRUxJTkVEX0FU VFJfRkVUQ0gpKTsKPiAgCj4gLQltdXRleF9sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKPiAtCWlm IChycHMtPnBvd2VyLmludGVyYWN0aXZlKQo+IC0JCW5ld19wb3dlciA9IEhJR0hfUE9XRVI7Cj4g LQlycHNfc2V0X3Bvd2VyKGRldl9wcml2LCBuZXdfcG93ZXIpOwo+IC0JbXV0ZXhfdW5sb2NrKCZy cHMtPnBvd2VyLm11dGV4KTsKPiAtfQo+ICsJLyoKPiArCSAqIEFjY29yZGluZyB0byB0aGUgc3Bl YyB0aGUgZm9sbG93aW5nIGJpdHMgc2hvdWxkIGJlCj4gKwkgKiBzZXQgaW4gb3JkZXIgdG8gZW5h YmxlIG1lbW9yeSBzZWxmLXJlZnJlc2ggYW5kIGZiYzoKPiArCSAqIFRoZSBiaXQyMSBhbmQgYml0 MjIgb2YgMHg0MjAwMAo+ICsJICogVGhlIGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDA0Cj4gKwkg KiBUaGUgYml0NSBhbmQgYml0NyBvZiAweDQyMDIwCj4gKwkgKiBUaGUgYml0MTQgb2YgMHg3MDE4 MAo+ICsJICogVGhlIGJpdDE0IG9mIDB4NzExODAKPiArCSAqCj4gKwkgKiBXYUZiY0FzeW5jaEZs aXBEaXNhYmxlRmJjUXVldWU6c25iCj4gKwkgKi8KPiArCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlf Q0hJQ0tFTjEsCj4gKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8Cj4gKwkJ ICAgSUxLX0ZCQ1FfRElTIHwgSUxLX1BBQlNUUkVUQ0hfRElTKTsKPiArCUk5MTVfV1JJVEUoSUxL X0RJU1BMQVlfQ0hJQ0tFTjIsCj4gKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4y KSB8Cj4gKwkJICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpOwo+ICsJSTkxNV9X UklURShJTEtfRFNQQ0xLX0dBVEVfRCwKPiArCQkgICBJOTE1X1JFQUQoSUxLX0RTUENMS19HQVRF X0QpIHwKPiArCQkgICBJTEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFICB8Cj4gKwkJICAg SUxLX0RQRkRVTklUX0NMT0NLX0dBVEVfRU5BQkxFKTsKPiAgCj4gLXZvaWQgaW50ZWxfcnBzX21h cmtfaW50ZXJhY3RpdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgaW50ZXJh Y3RpdmUpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZpOTE1LT5ndF9wbS5ycHM7 Cj4gKwlnNHhfZGlzYWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYpOwo+ICAKPiAtCWlmIChJTlRF TF9HRU4oaTkxNSkgPCA2KQo+IC0JCXJldHVybjsKPiArCWNwdF9pbml0X2Nsb2NrX2dhdGluZyhk ZXZfcHJpdik7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmcnBzLT5wb3dlci5tdXRleCk7Cj4gLQlpZiAo aW50ZXJhY3RpdmUpIHsKPiAtCQlpZiAoIXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUrKyAmJiBSRUFE X09OQ0UoaTkxNS0+Z3QuYXdha2UpKQo+IC0JCQlycHNfc2V0X3Bvd2VyKGk5MTUsIEhJR0hfUE9X RVIpOwo+IC0JfSBlbHNlIHsKPiAtCQlHRU1fQlVHX09OKCFycHMtPnBvd2VyLmludGVyYWN0aXZl KTsKPiAtCQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07Cj4gLQl9Cj4gLQltdXRleF91bmxvY2so JnJwcy0+cG93ZXIubXV0ZXgpOwo+ICsJZ2VuNl9jaGVja19tY2hfc2V0dXAoZGV2X3ByaXYpOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdTMyIGdlbjZfcnBzX3BtX21hc2soc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCj4gK3N0YXRpYyB2b2lkIGdlbjdfc2V0dXBfZml4ZWRf ZnVuY19zY2hlZHVsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4g LQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCXUzMiBt YXNrID0gMDsKPiAtCj4gLQkvKiBXZSB1c2UgVVBfRUlfRVhQSVJFRCBpbnRlcnVwdHMgZm9yIGJv dGggdXAvZG93biBpbiBtYW51YWwgbW9kZSAqLwo+IC0JaWYgKHZhbCA+IHJwcy0+bWluX2ZyZXFf c29mdGxpbWl0KQo+IC0JCW1hc2sgfD0gR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEIHwgR0VONl9Q TV9SUF9ET1dOX1RIUkVTSE9MRCB8IEdFTjZfUE1fUlBfRE9XTl9USU1FT1VUOwo+IC0JaWYgKHZh bCA8IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQo+IC0JCW1hc2sgfD0gR0VONl9QTV9SUF9VUF9F SV9FWFBJUkVEIHwgR0VONl9QTV9SUF9VUF9USFJFU0hPTEQ7Cj4gLQo+IC0JbWFzayAmPSBkZXZf cHJpdi0+cG1fcnBzX2V2ZW50czsKPiAtCj4gLQlyZXR1cm4gZ2VuNl9zYW5pdGl6ZV9ycHNfcG1f bWFzayhkZXZfcHJpdiwgfm1hc2spOwo+IC19Cj4gLQo+IC0vKiBnZW42X3NldF9ycHMgaXMgY2Fs bGVkIHRvIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IHJlcXVlc3QsIGJ1dCBzaG91bGQgYWxzbyBiZQo+ IC0gKiBjYWxsZWQgd2hlbiB0aGUgcmFuZ2UgKG1pbl9kZWxheSBhbmQgbWF4X2RlbGF5KSBpcyBt b2RpZmllZCBzbyB0aGF0IHdlIGNhbgo+IC0gKiB1cGRhdGUgdGhlIEdFTjZfUlBfSU5URVJSVVBU X0xJTUlUUyByZWdpc3RlciBhY2NvcmRpbmdseS4gKi8KPiAtc3RhdGljIGludCBnZW42X3NldF9y cHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCj4gLXsKPiAtCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0KPiAtCS8qIG1p bi9tYXggZGVsYXkgbWF5IHN0aWxsIGhhdmUgYmVlbiBtb2RpZmllZCBzbyBiZSBzdXJlIHRvCj4g LQkgKiB3cml0ZSB0aGUgbGltaXRzIHZhbHVlLgo+IC0JICovCj4gLQlpZiAodmFsICE9IHJwcy0+ Y3VyX2ZyZXEpIHsKPiAtCQlnZW42X3NldF9ycHNfdGhyZXNob2xkcyhkZXZfcHJpdiwgdmFsKTsK PiAtCj4gLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKPiAtCQkJSTkxNV9XUklURShH RU42X1JQTlNXUkVRLAo+IC0JCQkJICAgR0VOOV9GUkVRVUVOQ1kodmFsKSk7Cj4gLQkJZWxzZSBp ZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiAtCQkJ STkxNV9XUklURShHRU42X1JQTlNXUkVRLAo+IC0JCQkJICAgSFNXX0ZSRVFVRU5DWSh2YWwpKTsK PiAtCQllbHNlCj4gLQkJCUk5MTVfV1JJVEUoR0VONl9SUE5TV1JFUSwKPiAtCQkJCSAgIEdFTjZf RlJFUVVFTkNZKHZhbCkgfAo+IC0JCQkJICAgR0VONl9PRkZTRVQoMCkgfAo+IC0JCQkJICAgR0VO Nl9BR0dSRVNTSVZFX1RVUkJPKTsKPiAtCX0KPiAtCj4gLQkvKiBNYWtlIHN1cmUgd2UgY29udGlu dWUgdG8gZ2V0IGludGVycnVwdHMKPiAtCSAqIHVudGlsIHdlIGhpdCB0aGUgbWluaW11bSBvciBt YXhpbXVtIGZyZXF1ZW5jaWVzLgo+IC0JICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfSU5URVJS VVBUX0xJTUlUUywgaW50ZWxfcnBzX2xpbWl0cyhkZXZfcHJpdiwgdmFsKSk7Cj4gLQlJOTE1X1dS SVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Jwc19wbV9tYXNrKGRldl9wcml2LCB2YWwpKTsKPiAt Cj4gLQlycHMtPmN1cl9mcmVxID0gdmFsOwo+IC0JdHJhY2VfaW50ZWxfZ3B1X2ZyZXFfY2hhbmdl KGludGVsX2dwdV9mcmVxKGRldl9wcml2LCB2YWwpKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCB2YWxsZXl2aWV3X3NldF9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCB1OCB2YWwpCj4gLXsKPiAtCWludCBlcnI7Cj4gLQo+IC0JaWYgKFdBUk5f T05DRShJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiAodmFsICYgMSksCj4gLQkJICAgICAgIk9k ZCBHUFUgZnJlcSB2YWx1ZVxuIikpCj4gLQkJdmFsICY9IH4xOwo+IC0KPiAtCUk5MTVfV1JJVEUo R0VONl9QTUlOVFJNU0ssIGdlbjZfcnBzX3BtX21hc2soZGV2X3ByaXYsIHZhbCkpOwo+IC0KPiAt CWlmICh2YWwgIT0gZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkgewo+IC0JCXZsdl9wdW5p dF9nZXQoZGV2X3ByaXYpOwo+IC0JCWVyciA9IHZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgUFVO SVRfUkVHX0dQVV9GUkVRX1JFUSwgdmFsKTsKPiAtCQl2bHZfcHVuaXRfcHV0KGRldl9wcml2KTsK PiAtCQlpZiAoZXJyKQo+IC0JCQlyZXR1cm4gZXJyOwo+IC0KPiAtCQlnZW42X3NldF9ycHNfdGhy ZXNob2xkcyhkZXZfcHJpdiwgdmFsKTsKPiAtCX0KPiAtCj4gLQlkZXZfcHJpdi0+Z3RfcG0ucnBz LmN1cl9mcmVxID0gdmFsOwo+IC0JdHJhY2VfaW50ZWxfZ3B1X2ZyZXFfY2hhbmdlKGludGVsX2dw dV9mcmVxKGRldl9wcml2LCB2YWwpKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyog dmx2X3NldF9ycHNfaWRsZTogU2V0IHRoZSBmcmVxdWVuY3kgdG8gaWRsZSwgaWYgR2Z4IGNsb2Nr cyBhcmUgZG93bgo+IC0gKgo+IC0gKiAqIElmIEdmeCBpcyBJZGxlLCB0aGVuCj4gLSAqIDEuIEZv cmNld2FrZSBNZWRpYSB3ZWxsLgo+IC0gKiAyLiBSZXF1ZXN0IGlkbGUgZnJlcS4KPiAtICogMy4g UmVsZWFzZSBGb3JjZXdha2Ugb2YgTWVkaWEgd2VsbC4KPiAtKi8KPiAtc3RhdGljIHZvaWQgdmx2 X3NldF9ycHNfaWRsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAt CXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0JdTMyIHZh bCA9IHJwcy0+aWRsZV9mcmVxOwo+IC0JaW50IGVycjsKPiAtCj4gLQlpZiAocnBzLT5jdXJfZnJl cSA8PSB2YWwpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCS8qIFRoZSBwdW5pdCBkZWxheXMgdGhlIHdy aXRlIG9mIHRoZSBmcmVxdWVuY3kgYW5kIHZvbHRhZ2UgdW50aWwgaXQKPiAtCSAqIGRldGVybWlu ZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1c2FnZSB3ZSBkb24ndCB3YW50IHRv Cj4gLQkgKiB3YXN0ZSBwb3dlciBjaGFuZ2luZyB0aGUgZnJlcXVlbmN5IGlmIHRoZSBHUFUgaXMg c2xlZXBpbmcgKHJjNikuCj4gLQkgKiBIb3dldmVyLCB0aGUgR1BVIGFuZCBkcml2ZXIgaXMgbm93 IGlkbGUgYW5kIHdlIGRvIG5vdCB3YW50IHRvIGRlbGF5Cj4gLQkgKiBzd2l0Y2hpbmcgdG8gbWlu aW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkgYXMgd2UgZG8KPiAtCSAq IG5vdCBleHBlY3QgdG8gYmUgd29rZW4gaW4gdGhlIG5lYXIgZnV0dXJlIGFuZCBzbyBtdXN0IGZs dXNoIHRoZQo+IC0JICogY2hhbmdlIGJ5IHdha2luZyB0aGUgZGV2aWNlLgo+IC0JICoKPiAtCSAq IFdlIGNob29zZSB0byB0YWtlIHRoZSBtZWRpYSBwb3dlcndlbGwgKGVpdGhlciB3b3VsZCBkbyB0 byB0cmljayB0aGUKPiAtCSAqIHB1bml0IGludG8gY29tbWl0dGluZyB0aGUgdm9sdGFnZSBjaGFu Z2UpIGFzIHRoYXQgdGFrZXMgYSBsb3QgbGVzcwo+IC0JICogcG93ZXIgdGhhbiB0aGUgcmVuZGVy IHBvd2Vyd2VsbC4KPiAtCSAqLwo+IC0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRldl9w cml2LT51bmNvcmUsIEZPUkNFV0FLRV9NRURJQSk7Cj4gLQllcnIgPSB2YWxsZXl2aWV3X3NldF9y cHMoZGV2X3ByaXYsIHZhbCk7Cj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3By aXYtPnVuY29yZSwgRk9SQ0VXQUtFX01FRElBKTsKPiAtCj4gLQlpZiAoZXJyKQo+IC0JCURSTV9F UlJPUigiRmFpbGVkIHRvIHNldCBSUFMgZm9yIGlkbGVcbiIpOwo+IC19Cj4gLQo+IC12b2lkIGdl bjZfcnBzX2J1c3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCj4gLQltdXRl eF9sb2NrKCZycHMtPmxvY2spOwo+IC0JaWYgKHJwcy0+ZW5hYmxlZCkgewo+IC0JCXU4IGZyZXE7 Cj4gLQo+IC0JCWlmIChkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyAmIEdFTjZfUE1fUlBfVVBfRUlf RVhQSVJFRCkKPiAtCQkJZ2VuNl9ycHNfcmVzZXRfZWkoZGV2X3ByaXYpOwo+IC0JCUk5MTVfV1JJ VEUoR0VONl9QTUlOVFJNU0ssCj4gLQkJCSAgIGdlbjZfcnBzX3BtX21hc2soZGV2X3ByaXYsIHJw cy0+Y3VyX2ZyZXEpKTsKPiAtCj4gLQkJZ2VuNl9lbmFibGVfcnBzX2ludGVycnVwdHMoZGV2X3By aXYpOwo+IC0KPiAtCQkvKiBVc2UgdGhlIHVzZXIncyBkZXNpcmVkIGZyZXF1ZW5jeSBhcyBhIGd1 aWRlLCBidXQgZm9yIGJldHRlcgo+IC0JCSAqIHBlcmZvcm1hbmNlLCBqdW1wIGRpcmVjdGx5IHRv IFJQZSBhcyBvdXIgc3RhcnRpbmcgZnJlcXVlbmN5Lgo+IC0JCSAqLwo+IC0JCWZyZXEgPSBtYXgo cnBzLT5jdXJfZnJlcSwKPiAtCQkJICAgcnBzLT5lZmZpY2llbnRfZnJlcSk7Cj4gLQo+IC0JCWlm IChpbnRlbF9zZXRfcnBzKGRldl9wcml2LAo+IC0JCQkJICBjbGFtcChmcmVxLAo+IC0JCQkJCXJw cy0+bWluX2ZyZXFfc29mdGxpbWl0LAo+IC0JCQkJCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSkp Cj4gLQkJCURSTV9ERUJVR19EUklWRVIoIkZhaWxlZCB0byBzZXQgaWRsZSBmcmVxdWVuY3lcbiIp Owo+IC0JfQo+IC0JbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwo+IC19Cj4gLQo+IC12b2lkIGdl bjZfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCj4gLQkvKiBG bHVzaCBvdXIgYm90dG9tLWhhbGYgc28gdGhhdCBpdCBkb2VzIG5vdCByYWNlIHdpdGggdXMKPiAt CSAqIHNldHRpbmcgdGhlIGlkbGUgZnJlcXVlbmN5IGFuZCBzbyB0aGF0IGl0IGlzIGJvdW5kZWQg YnkKPiAtCSAqIG91ciBycG0gd2FrZXJlZi4gQW5kIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0 cyB0byBzdG9wIGFueQo+IC0JICogZnV0aGVyIFJQUyByZWNsb2NraW5nIHdoaWxzdCB3ZSBhcmUg YXNsZWVwLgo+IC0JICovCj4gLQlnZW42X2Rpc2FibGVfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYp Owo+IC0KPiAtCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Cj4gLQlpZiAocnBzLT5lbmFibGVkKSB7 Cj4gLQkJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3By aXYpKQo+IC0JCQl2bHZfc2V0X3Jwc19pZGxlKGRldl9wcml2KTsKPiAtCQllbHNlCj4gLQkJCWdl bjZfc2V0X3JwcyhkZXZfcHJpdiwgcnBzLT5pZGxlX2ZyZXEpOwo+IC0JCXJwcy0+bGFzdF9hZGog PSAwOwo+IC0JCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssCj4gLQkJCSAgIGdlbjZfc2FuaXRp emVfcnBzX3BtX21hc2soZGV2X3ByaXYsIH4wKSk7Cj4gLQl9Cj4gLQltdXRleF91bmxvY2soJnJw cy0+bG9jayk7Cj4gLX0KPiAtCj4gLXZvaWQgZ2VuNl9ycHNfYm9vc3Qoc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZycS0+aTkxNS0+Z3Rf cG0ucnBzOwo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsKPiAtCWJvb2wgYm9vc3Q7Cj4gLQo+IC0J LyogVGhpcyBpcyBpbnRlbnRpb25hbGx5IHJhY3khIFdlIHBlZWsgYXQgdGhlIHN0YXRlIGhlcmUs IHRoZW4KPiAtCSAqIHZhbGlkYXRlIGluc2lkZSB0aGUgUlBTIHdvcmtlci4KPiAtCSAqLwo+IC0J aWYgKCFycHMtPmVuYWJsZWQpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChpOTE1X3JlcXVlc3Rf c2lnbmFsZWQocnEpKQo+IC0JCXJldHVybjsKPiAtCj4gLQkvKiBTZXJpYWxpemVzIHdpdGggaTkx NV9yZXF1ZXN0X3JldGlyZSgpICovCj4gLQlib29zdCA9IGZhbHNlOwo+IC0Jc3Bpbl9sb2NrX2ly cXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7Cj4gLQlpZiAoIWk5MTVfcmVxdWVzdF9oYXNfd2FpdGJv b3N0KHJxKSAmJgo+IC0JICAgICFkbWFfZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKCZycS0+ZmVu Y2UpKSB7Cj4gLQkJYm9vc3QgPSAhYXRvbWljX2ZldGNoX2luYygmcnBzLT5udW1fd2FpdGVycyk7 Cj4gLQkJcnEtPmZsYWdzIHw9IEk5MTVfUkVRVUVTVF9XQUlUQk9PU1Q7Cj4gLQl9Cj4gLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwo+IC0JaWYgKCFib29zdCkKPiAt CQlyZXR1cm47Cj4gLQo+IC0JaWYgKFJFQURfT05DRShycHMtPmN1cl9mcmVxKSA8IHJwcy0+Ym9v c3RfZnJlcSkKPiAtCQlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOwo+IC0KPiAtCWF0b21pY19p bmMoJnJwcy0+Ym9vc3RzKTsKPiAtfQo+IC0KPiAtaW50IGludGVsX3NldF9ycHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0JaW50IGVycjsKPiAtCj4gLQlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOwo+IC0JR0VNX0JVR19PTih2YWwgPiBycHMtPm1h eF9mcmVxKTsKPiAtCUdFTV9CVUdfT04odmFsIDwgcnBzLT5taW5fZnJlcSk7Cj4gLQo+IC0JaWYg KCFycHMtPmVuYWJsZWQpIHsKPiAtCQlycHMtPmN1cl9mcmVxID0gdmFsOwo+IC0JCXJldHVybiAw Owo+IC0JfQo+IC0KPiAtCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllW SUVXKGRldl9wcml2KSkKPiAtCQllcnIgPSB2YWxsZXl2aWV3X3NldF9ycHMoZGV2X3ByaXYsIHZh bCk7Cj4gLQllbHNlCj4gLQkJZXJyID0gZ2VuNl9zZXRfcnBzKGRldl9wcml2LCB2YWwpOwo+IC0K PiAtCXJldHVybiBlcnI7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdlbjlfZGlzYWJsZV9ycHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlJOTE1X1dSSVRFKEdF TjZfUlBfQ09OVFJPTCwgMCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdlbjZfZGlzYWJsZV9y cHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlJOTE1X1dSSVRF KEdFTjZfUlBOU1dSRVEsIDEgPDwgMzEpOwo+IC0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0ws IDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjaGVycnl2aWV3X2Rpc2FibGVfcnBzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JSTkxNV9XUklURShHRU42X1JQ X0NPTlRST0wsIDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2Rpc2FibGVf cnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JSTkxNV9XUklU RShHRU42X1JQX0NPTlRST0wsIDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBnZW42X2luaXRf cnBzX2ZyZXF1ZW5jaWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+ IC0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gLQo+IC0J LyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2YgNTBNSHogKi8KPiAtCj4gLQkv KiBzdGF0aWMgdmFsdWVzIGZyb20gSFc6IFJQMCA+IFJQMSA+IFJQbiAobWluX2ZyZXEpICovCj4g LQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpIHsKPiAtCQl1MzIgcnBfc3RhdGVfY2FwID0gSTkx NV9SRUFEKEJYVF9SUF9TVEFURV9DQVApOwo+IC0JCXJwcy0+cnAwX2ZyZXEgPSAocnBfc3RhdGVf Y2FwID4+IDE2KSAmIDB4ZmY7Cj4gLQkJcnBzLT5ycDFfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4g IDgpICYgMHhmZjsKPiAtCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAw eGZmOwo+IC0JfSBlbHNlIHsKPiAtCQl1MzIgcnBfc3RhdGVfY2FwID0gSTkxNV9SRUFEKEdFTjZf UlBfU1RBVEVfQ0FQKTsKPiAtCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkg JiAweGZmOwo+IC0JCXJwcy0+cnAxX2ZyZXEgPSAocnBfc3RhdGVfY2FwID4+ICA4KSAmIDB4ZmY7 Cj4gLQkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsKPiAtCX0K PiAtCS8qIGh3X21heCA9IFJQMCB1bnRpbCB3ZSBjaGVjayBmb3Igb3ZlcmNsb2NraW5nICovCj4g LQlycHMtPm1heF9mcmVxID0gcnBzLT5ycDBfZnJlcTsKPiAtCj4gLQlycHMtPmVmZmljaWVudF9m cmVxID0gcnBzLT5ycDFfZnJlcTsKPiAtCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19C Uk9BRFdFTEwoZGV2X3ByaXYpIHx8Cj4gLQkgICAgSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwgSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMCkgewo+IC0JCXUzMiBkZGNjX3N0YXR1cyA9IDA7Cj4gLQo+ IC0JCWlmIChzYW5keWJyaWRnZV9wY29kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJCSAgIEhTV19Q Q09ERV9EWU5BTUlDX0RVVFlfQ1lDTEVfQ09OVFJPTCwKPiAtCQkJCQkgICAmZGRjY19zdGF0dXMs IE5VTEwpID09IDApCj4gLQkJCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPQo+IC0JCQkJY2xhbXBfdCh1 OCwKPiAtCQkJCQkoKGRkY2Nfc3RhdHVzID4+IDgpICYgMHhmZiksCj4gLQkJCQkJcnBzLT5taW5f ZnJlcSwKPiAtCQkJCQlycHMtPm1heF9mcmVxKTsKPiAtCX0KPiAtCj4gLQlpZiAoSVNfR0VOOV9C QyhkZXZfcHJpdikgfHwgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkgewo+IC0JCS8qIFN0b3Jl IHRoZSBmcmVxdWVuY3kgdmFsdWVzIGluIDE2LjY2IE1IWiB1bml0cywgd2hpY2ggaXMKPiAtCQkg KiB0aGUgbmF0dXJhbCBoYXJkd2FyZSB1bml0IGZvciBTS0wKPiAtCQkgKi8KPiAtCQlycHMtPnJw MF9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7Cj4gLQkJcnBzLT5ycDFfZnJlcSAqPSBHRU45X0ZS RVFfU0NBTEVSOwo+IC0JCXJwcy0+bWluX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKPiAtCQly cHMtPm1heF9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7Cj4gLQkJcnBzLT5lZmZpY2llbnRfZnJl cSAqPSBHRU45X0ZSRVFfU0NBTEVSOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCByZXNl dF9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCSAgICAgIGludCAo KnNldCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKiwgdTgpKQo+IC17Cj4gLQlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCXU4IGZyZXEgPSBycHMtPmN1 cl9mcmVxOwo+IC0KPiAtCS8qIGZvcmNlIGEgcmVzZXQgKi8KPiAtCXJwcy0+cG93ZXIubW9kZSA9 IC0xOwo+IC0JcnBzLT5jdXJfZnJlcSA9IC0xOwo+IC0KPiAtCWlmIChzZXQoZGV2X3ByaXYsIGZy ZXEpKQo+IC0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlc2V0IFJQUyB0byBpbml0aWFsIHZhbHVl c1xuIik7Cj4gLX0KPiAtCj4gLS8qIFNlZSB0aGUgR2VuOV9HVF9QTV9Qcm9ncmFtbWluZ19HdWlk ZSBkb2MgZm9yIHRoZSBiZWxvdyAqLwo+IC1zdGF0aWMgdm9pZCBnZW45X2VuYWJsZV9ycHMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gLQo+IC0JLyog UHJvZ3JhbSBkZWZhdWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTICovCj4gLQlpZiAoSVNfR0VO KGRldl9wcml2LCA5KSkKPiAtCQlJOTE1X1dSSVRFKEdFTjZfUkNfVklERU9fRlJFUSwKPiAtCQkJ R0VOOV9GUkVRVUVOQ1koZGV2X3ByaXYtPmd0X3BtLnJwcy5ycDFfZnJlcSkpOwo+IC0KPiAtCS8q IDEgc2Vjb25kIHRpbWVvdXQqLwo+IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwK PiAtCQlHVF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2LCAxMDAwMDAwKSk7Cj4gLQo+IC0JSTkx NV9XUklURShHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAweGEpOwo+IC0KPiAtCS8qIExlYW5pbmcg b24gdGhlIGJlbG93IGNhbGwgdG8gZ2VuNl9zZXRfcnBzIHRvIHByb2dyYW0vc2V0dXAgdGhlCj4g LQkgKiBVcC9Eb3duIEVJICYgdGhyZXNob2xkIHJlZ2lzdGVycywgYXMgd2VsbCBhcyB0aGUgUlBf Q09OVFJPTCwKPiAtCSAqIFJQX0lOVEVSUlVQVF9MSU1JVFMgJiBSUE5TV1JFUSByZWdpc3RlcnMg Ki8KPiAtCXJlc2V0X3JwcyhkZXZfcHJpdiwgZ2VuNl9zZXRfcnBzKTsKPiAtCj4gLQlpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdlbjhfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJp di0+Z3RfcG0ucnBzOwo+IC0KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZkZXZfcHJp di0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPiAtCj4gLQkvKiAxIFByb2dyYW0gZGVmYXVsdHMg YW5kIHRocmVzaG9sZHMgZm9yIFJQUyovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsCj4g LQkJICAgSFNXX0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZf UkNfVklERU9fRlJFUSwKPiAtCQkgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsKPiAt CS8qIE5COiBEb2NzIHNheSAxcywgYW5kIDEwMDAwMDAgLSB3aGljaCBhcmVuJ3QgZXF1aXZhbGVu dCAqLwo+IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMDAwIC8gMTI4 KTsgLyogMSBzZWNvbmQgdGltZW91dCAqLwo+IC0KPiAtCS8qIERvY3MgcmVjb21tZW5kIDkwME1I eiwgYW5kIDMwMCBNSHogcmVzcGVjdGl2ZWx5ICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfSU5U RVJSVVBUX0xJTUlUUywKPiAtCQkgICBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyNCB8Cj4g LQkJICAgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQgPDwgMTYpOwo+IC0KPiAtCUk5MTVfV1JJVEUo R0VONl9SUF9VUF9USFJFU0hPTEQsIDc2MDAwMDAgLyAxMjgpOyAvKiA3Nm1zIGJ1c3luZXNzIHBl ciBFSSwgOTAlICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsIDMxMzAw MDAwIC8gMTI4KTsgLyogMzEzbXMgYnVzeW5lc3MgcGVyIEVJLCA3MCUqLwo+IC0JSTkxNV9XUklU RShHRU42X1JQX1VQX0VJLCA2NjAwMCk7IC8qIDg0LjQ4bXMsIFhYWDogcmFuZG9tPyAqLwo+IC0J STkxNV9XUklURShHRU42X1JQX0RPV05fRUksIDM1MDAwMCk7IC8qIDQ0OG1zLCBYWFg6IHJhbmRv bT8gKi8KPiAtCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKPiAt Cj4gLQkvKiAyOiBFbmFibGUgUlBTICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwK PiAtCQkgICBHRU42X1JQX01FRElBX1RVUkJPIHwKPiAtCQkgICBHRU42X1JQX01FRElBX0hXX05P Uk1BTF9NT0RFIHwKPiAtCQkgICBHRU42X1JQX01FRElBX0lTX0dGWCB8Cj4gLQkJICAgR0VONl9S UF9FTkFCTEUgfAo+IC0JCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAo+IC0JCSAgIEdFTjZfUlBf RE9XTl9JRExFX0FWRyk7Cj4gLQo+IC0JcmVzZXRfcnBzKGRldl9wcml2LCBnZW42X3NldF9ycHMp Owo+IC0KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBG T1JDRVdBS0VfQUxMKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZ2VuNl9lbmFibGVfcnBzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JLyogSGVyZSBiZWdpbnMg YSBtYWdpYyBzZXF1ZW5jZSBvZiByZWdpc3RlciB3cml0ZXMgdG8gZW5hYmxlCj4gLQkgKiBhdXRv LWRvd25jbG9ja2luZy4KPiAtCSAqCj4gLQkgKiBQZXJoYXBzIHRoZXJlIG1pZ2h0IGJlIHNvbWUg dmFsdWUgaW4gZXhwb3NpbmcgdGhlc2UgdG8KPiAtCSAqIHVzZXJzcGFjZS4uLgo+IC0JICovCj4g LQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtF X0FMTCk7Cj4gLQo+IC0JLyogUG93ZXIgZG93biBpZiBjb21wbGV0ZWx5IGlkbGUgZm9yIG92ZXIg NTBtcyAqLwo+IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgNTAwMDApOwo+IC0J STkxNV9XUklURShHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAxMCk7Cj4gLQo+IC0JcmVzZXRfcnBz KGRldl9wcml2LCBnZW42X3NldF9ycHMpOwo+IC0KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2Vf cHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPiAtfQo+IC0KPiAtc3RhdGlj IGludCBjaGVycnl2aWV3X3Jwc19tYXhfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gLXsKPiAtCXUzMiB2YWwsIHJwMDsKPiAtCj4gLQl2YWwgPSB2bHZfcHVuaXRfcmVh ZChkZXZfcHJpdiwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKPiAtCj4gLQlzd2l0Y2ggKFJV TlRJTUVfSU5GTyhkZXZfcHJpdiktPnNzZXUuZXVfdG90YWwpIHsKPiAtCWNhc2UgODoKPiAtCQkv KiAoMiAqIDQpIGNvbmZpZyAqLwo+IC0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1B WF8yU1M0RVVfRlVTRV9TSElGVCk7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDEyOgo+IC0JCS8qICgy ICogNikgY29uZmlnICovCj4gLQkJcnAwID0gKHZhbCA+PiBGQl9HRlhfRk1BWF9BVF9WTUFYXzJT UzZFVV9GVVNFX1NISUZUKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgMTY6Cj4gLQkJLyogKDIgKiA4 KSBjb25maWcgKi8KPiAtCWRlZmF1bHQ6Cj4gLQkJLyogU2V0dGluZyAoMiAqIDgpIE1pbiBSUDAg Zm9yIGFueSBvdGhlciBjb21iaW5hdGlvbiAqLwo+IC0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZN QVhfQVRfVk1BWF8yU1M4RVVfRlVTRV9TSElGVCk7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0J cnAwID0gKHJwMCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSyk7Cj4gLQo+IC0JcmV0dXJuIHJwMDsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBjaGVycnl2aWV3X3Jwc19ycGVfZnJlcShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiB2YWwsIHJwZTsKPiAtCj4gLQl2 YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfR1BVX0RVVFlDWUNMRV9SRUcpOwo+ IC0JcnBlID0gKHZhbCA+PiBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JQRV9GUkVRX1NISUZUKSAmIFBV TklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfTUFTSzsKPiAtCj4gLQlyZXR1cm4gcnBlOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IGNoZXJyeXZpZXdfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiB2YWwsIHJwMTsKPiAtCj4gLQl2YWwg PSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKPiAt CXJwMSA9ICh2YWwgJiBGQl9HRlhfRlJFUV9GVVNFX01BU0spOwo+IC0KPiAtCXJldHVybiBycDE7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB1MzIgY2hlcnJ5dmlld19ycHNfbWluX2ZyZXEoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgdmFsLCBycG47Cj4gLQo+IC0J dmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRSk7 Cj4gLQlycG4gPSAoKHZhbCA+PiBGQl9HRlhfRk1JTl9BVF9WTUlOX0ZVU0VfU0hJRlQpICYKPiAt CQkgICAgICAgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLKTsKPiAtCj4gLQlyZXR1cm4gcnBuOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IHZhbGxleXZpZXdfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiB2YWwsIHJwMTsKPiAtCj4gLQl2YWwg PSB2bHZfbmNfcmVhZChkZXZfcHJpdiwgSU9TRl9OQ19GQl9HRlhfRlJFUV9GVVNFKTsKPiAtCj4g LQlycDEgPSAodmFsICYgRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9NQVNLKSA+PiBGQl9H RlhfRkdVQVJBTlRFRURfRlJFUV9GVVNFX1NISUZUOwo+IC0KPiAtCXJldHVybiBycDE7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfbWF4X2ZyZXEoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgdmFsLCBycDA7Cj4gLQo+IC0JdmFsID0g dmx2X25jX3JlYWQoZGV2X3ByaXYsIElPU0ZfTkNfRkJfR0ZYX0ZSRVFfRlVTRSk7Cj4gLQo+IC0J cnAwID0gKHZhbCAmIEZCX0dGWF9NQVhfRlJFUV9GVVNFX01BU0spID4+IEZCX0dGWF9NQVhfRlJF UV9GVVNFX1NISUZUOwo+IC0JLyogQ2xhbXAgdG8gbWF4ICovCj4gLQlycDAgPSBtaW5fdCh1MzIs IHJwMCwgMHhlYSk7Cj4gLQo+IC0JcmV0dXJuIHJwMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCB2 YWxsZXl2aWV3X3Jwc19ycGVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gLXsKPiAtCXUzMiB2YWwsIHJwZTsKPiAtCj4gLQl2YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJp diwgSU9TRl9OQ19GQl9HRlhfRk1BWF9GVVNFX0xPKTsKPiAtCXJwZSA9ICh2YWwgJiBGQl9GTUFY X1ZNSU5fRlJFUV9MT19NQVNLKSA+PiBGQl9GTUFYX1ZNSU5fRlJFUV9MT19TSElGVDsKPiAtCXZh bCA9IHZsdl9uY19yZWFkKGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GTUFYX0ZVU0VfSEkpOwo+ IC0JcnBlIHw9ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9ISV9NQVNLKSA8PCA1Owo+IC0KPiAt CXJldHVybiBycGU7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfbWluX2Zy ZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgdmFsOwo+ IC0KPiAtCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0xGTSkg JiAweGZmOwo+IC0JLyoKPiAtCSAqIEFjY29yZGluZyB0byB0aGUgQllUIFB1bml0IEdQVSB0dXJi byBIQVMgMS4xLjYuMyB0aGUgbWluaW11bSB2YWx1ZQo+IC0JICogZm9yIHRoZSBtaW5pbXVtIGZy ZXF1ZW5jeSBpbiBHUExMIG1vZGUgaXMgMHhjMS4gQ29udHJhcnkgdG8gdGhpcyBvbgo+IC0JICog YSBCWVQtTSBCMCB0aGUgYWJvdmUgcmVnaXN0ZXIgY29udGFpbnMgMHhiZi4gTW9yZW92ZXIgd2hl biBzZXR0aW5nCj4gLQkgKiBhIGZyZXF1ZW5jeSBQdW5pdCB3aWxsIG5vdCBhbGxvdyB2YWx1ZXMg YmVsb3cgMHhjMC4gQ2xhbXAgaXQgMHhjMAo+IC0JICogdG8gbWFrZSBzdXJlIGl0IG1hdGNoZXMg d2hhdCBQdW5pdCBhY2NlcHRzLgo+IC0JICovCj4gLQlyZXR1cm4gbWF4X3QodTMyLCB2YWwsIDB4 YzApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JZGV2X3ByaXYtPmd0X3BtLnJw cy5ncGxsX3JlZl9mcmVxID0KPiAtCQl2bHZfZ2V0X2Nja19jbG9jayhkZXZfcHJpdiwgIkdQTEwg cmVmIiwKPiAtCQkJCSAgQ0NLX0dQTExfQ0xPQ0tfQ09OVFJPTCwKPiAtCQkJCSAgZGV2X3ByaXYt PmN6Y2xrX2ZyZXEpOwo+IC0KPiAtCURSTV9ERUJVR19EUklWRVIoIkdQTEwgcmVmZXJlbmNlIGZy ZXE6ICVkIGtIelxuIiwKPiAtCQkJIGRldl9wcml2LT5ndF9wbS5ycHMuZ3BsbF9yZWZfZnJlcSk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfaW5pdF9ndF9wb3dlcnNhdmUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBz ICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0Jdmx2X2lv c2Zfc2JfZ2V0KGRldl9wcml2LAo+IC0JCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKPiAtCQkJ QklUKFZMVl9JT1NGX1NCX05DKSB8Cj4gLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKPiAtCj4g LQl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKGRldl9wcml2KTsKPiAtCj4gLQl2YWwgPSB2bHZfcHVu aXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Cj4gLQlzd2l0Y2ggKCh2 YWwgPj4gNikgJiAzKSB7Cj4gLQljYXNlIDA6Cj4gLQljYXNlIDE6Cj4gLQkJZGV2X3ByaXYtPm1l bV9mcmVxID0gODAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSAyOgo+IC0JCWRldl9wcml2LT5tZW1f ZnJlcSA9IDEwNjY7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDM6Cj4gLQkJZGV2X3ByaXYtPm1lbV9m cmVxID0gMTMzMzsKPiAtCQlicmVhazsKPiAtCX0KPiAtCURSTV9ERUJVR19EUklWRVIoIkREUiBz cGVlZDogJWQgTUh6XG4iLCBkZXZfcHJpdi0+bWVtX2ZyZXEpOwo+IC0KPiAtCXJwcy0+bWF4X2Zy ZXEgPSB2YWxsZXl2aWV3X3Jwc19tYXhfZnJlcShkZXZfcHJpdik7Cj4gLQlycHMtPnJwMF9mcmVx ID0gcnBzLT5tYXhfZnJlcTsKPiAtCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQg TUh6ICgldSlcbiIsCj4gLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5tYXhfZnJl cSksCj4gLQkJCSBycHMtPm1heF9mcmVxKTsKPiAtCj4gLQlycHMtPmVmZmljaWVudF9mcmVxID0g dmFsbGV5dmlld19ycHNfcnBlX2ZyZXEoZGV2X3ByaXYpOwo+IC0JRFJNX0RFQlVHX0RSSVZFUigi UlBlIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKPiAtCQkJIGludGVsX2dwdV9mcmVxKGRldl9w cml2LCBycHMtPmVmZmljaWVudF9mcmVxKSwKPiAtCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOwo+ IC0KPiAtCXJwcy0+cnAxX2ZyZXEgPSB2YWxsZXl2aWV3X3Jwc19ndWFyX2ZyZXEoZGV2X3ByaXYp Owo+IC0JRFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIgRnJlcSkgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAo+IC0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+cnAxX2ZyZXEpLAo+ IC0JCQkgcnBzLT5ycDFfZnJlcSk7Cj4gLQo+IC0JcnBzLT5taW5fZnJlcSA9IHZhbGxleXZpZXdf cnBzX21pbl9mcmVxKGRldl9wcml2KTsKPiAtCURSTV9ERUJVR19EUklWRVIoIm1pbiBHUFUgZnJl cTogJWQgTUh6ICgldSlcbiIsCj4gLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5t aW5fZnJlcSksCj4gLQkJCSBycHMtPm1pbl9mcmVxKTsKPiAtCj4gLQl2bHZfaW9zZl9zYl9wdXQo ZGV2X3ByaXYsCj4gLQkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAo+IC0JCQlCSVQoVkxWX0lP U0ZfU0JfTkMpIHwKPiAtCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBjaGVycnl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2 LT5ndF9wbS5ycHM7Cj4gLQl1MzIgdmFsOwo+IC0KPiAtCXZsdl9pb3NmX3NiX2dldChkZXZfcHJp diwKPiAtCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Cj4gLQkJCUJJVChWTFZfSU9TRl9TQl9O QykgfAo+IC0JCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7Cj4gLQo+IC0Jdmx2X2luaXRfZ3BsbF9y ZWZfZnJlcShkZXZfcHJpdik7Cj4gLQo+IC0JdmFsID0gdmx2X2Nja19yZWFkKGRldl9wcml2LCBD Q0tfRlVTRV9SRUcpOwo+IC0KPiAtCXN3aXRjaCAoKHZhbCA+PiAyKSAmIDB4Nykgewo+IC0JY2Fz ZSAzOgo+IC0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDIwMDA7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZh dWx0Ogo+IC0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDE2MDA7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4g LQlEUk1fREVCVUdfRFJJVkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgZGV2X3ByaXYtPm1lbV9m cmVxKTsKPiAtCj4gLQlycHMtPm1heF9mcmVxID0gY2hlcnJ5dmlld19ycHNfbWF4X2ZyZXEoZGV2 X3ByaXYpOwo+IC0JcnBzLT5ycDBfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Cj4gLQlEUk1fREVCVUdf RFJJVkVSKCJtYXggR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAo+IC0JCQkgaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpLAo+IC0JCQkgcnBzLT5tYXhfZnJlcSk7Cj4gLQo+ IC0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IGNoZXJyeXZpZXdfcnBzX3JwZV9mcmVxKGRldl9wcml2 KTsKPiAtCURSTV9ERUJVR19EUklWRVIoIlJQZSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCj4g LQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJlcSksCj4gLQkJ CSBycHMtPmVmZmljaWVudF9mcmVxKTsKPiAtCj4gLQlycHMtPnJwMV9mcmVxID0gY2hlcnJ5dmll d19ycHNfZ3Vhcl9mcmVxKGRldl9wcml2KTsKPiAtCURSTV9ERUJVR19EUklWRVIoIlJQMShHdWFy KSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCj4gLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcnBzLT5ycDFfZnJlcSksCj4gLQkJCSBycHMtPnJwMV9mcmVxKTsKPiAtCj4gLQlycHMtPm1p bl9mcmVxID0gY2hlcnJ5dmlld19ycHNfbWluX2ZyZXEoZGV2X3ByaXYpOwo+IC0JRFJNX0RFQlVH X0RSSVZFUigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKPiAtCQkJIGludGVsX2dwdV9m cmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxKSwKPiAtCQkJIHJwcy0+bWluX2ZyZXEpOwo+IC0K PiAtCXZsdl9pb3NmX3NiX3B1dChkZXZfcHJpdiwKPiAtCQkJQklUKFZMVl9JT1NGX1NCX1BVTklU KSB8Cj4gLQkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAo+IC0JCQlCSVQoVkxWX0lPU0ZfU0JfQ0NL KSk7Cj4gLQo+IC0JV0FSTl9PTkNFKChycHMtPm1heF9mcmVxIHwgcnBzLT5lZmZpY2llbnRfZnJl cSB8IHJwcy0+cnAxX2ZyZXEgfAo+IC0JCSAgIHJwcy0+bWluX2ZyZXEpICYgMSwKPiAtCQkgICJP ZGQgR1BVIGZyZXEgdmFsdWVzXG4iKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgY2hlcnJ5dmll d19lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0J dTMyIHZhbDsKPiAtCj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVu Y29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gLQo+IC0JLyogMTogUHJvZ3JhbSBkZWZhdWx0cyBhbmQg dGhyZXNob2xkcyBmb3IgUlBTKi8KPiAtCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJTUVPVVQs IDEwMDAwMDApOwo+IC0JSTkxNV9XUklURShHRU42X1JQX1VQX1RIUkVTSE9MRCwgNTk0MDApOwo+ IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVEhSRVNIT0xELCAyNDUwMDApOwo+IC0JSTkxNV9X UklURShHRU42X1JQX1VQX0VJLCA2NjAwMCk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9F SSwgMzUwMDAwKTsKPiAtCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEw KTsKPiAtCj4gLQkvKiAyOiBFbmFibGUgUlBTICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09O VFJPTCwKPiAtCQkgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKPiAtCQkgICBHRU42 X1JQX01FRElBX0lTX0dGWCB8Cj4gLQkJICAgR0VONl9SUF9FTkFCTEUgfAo+IC0JCSAgIEdFTjZf UlBfVVBfQlVTWV9BVkcgfAo+IC0JCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Cj4gLQo+IC0J LyogU2V0dGluZyBGaXhlZCBCaWFzICovCj4gLQl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsKPiAt Cj4gLQl2YWwgPSBWTFZfT1ZFUlJJREVfRU4gfCBWTFZfU09DX1REUF9FTiB8IENIVl9CSUFTX0NQ VV81MF9TT0NfNTA7Cj4gLQl2bHZfcHVuaXRfd3JpdGUoZGV2X3ByaXYsIFZMVl9UVVJCT19TT0Nf T1ZFUlJJREUsIHZhbCk7Cj4gLQo+IC0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBV TklUX1JFR19HUFVfRlJFUV9TVFMpOwo+IC0KPiAtCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwo+ IC0KPiAtCS8qIFJQUyBjb2RlIGFzc3VtZXMgR1BMTCBpcyB1c2VkICovCj4gLQlXQVJOX09OQ0Uo KHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsKPiAtCj4gLQlE Uk1fREVCVUdfRFJJVkVSKCJHUExMIGVuYWJsZWQ/ICVzXG4iLCB5ZXNubyh2YWwgJiBHUExMRU5B QkxFKSk7Cj4gLQlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIsIHZhbCk7 Cj4gLQo+IC0JcmVzZXRfcnBzKGRldl9wcml2LCB2YWxsZXl2aWV3X3NldF9ycHMpOwo+IC0KPiAt CWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0Vf QUxMKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdmFsbGV5dmlld19lbmFibGVfcnBzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdTMyIHZhbDsKPiAtCj4gLQlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FM TCk7Cj4gLQo+IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMCk7Cj4g LQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfVEhSRVNIT0xELCA1OTQwMCk7Cj4gLQlJOTE1X1dSSVRF KEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsIDI0NTAwMCk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBf VVBfRUksIDY2MDAwKTsKPiAtCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX0VJLCAzNTAwMDApOwo+ IC0KPiAtCUk5MTVfV1JJVEUoR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOwo+IC0KPiAtCUk5 MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLAo+IC0JCSAgIEdFTjZfUlBfTUVESUFfVFVSQk8gfAo+ IC0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAo+IC0JCSAgIEdFTjZfUlBfTUVE SUFfSVNfR0ZYIHwKPiAtCQkgICBHRU42X1JQX0VOQUJMRSB8Cj4gLQkJICAgR0VONl9SUF9VUF9C VVNZX0FWRyB8Cj4gLQkJICAgR0VONl9SUF9ET1dOX0lETEVfQ09OVCk7Cj4gLQo+IC0Jdmx2X3B1 bml0X2dldChkZXZfcHJpdik7Cj4gLQo+IC0JLyogU2V0dGluZyBGaXhlZCBCaWFzICovCj4gLQl2 YWwgPSBWTFZfT1ZFUlJJREVfRU4gfCBWTFZfU09DX1REUF9FTiB8IFZMVl9CSUFTX0NQVV8xMjVf U09DXzg3NTsKPiAtCXZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgVkxWX1RVUkJPX1NPQ19PVkVS UklERSwgdmFsKTsKPiAtCj4gLQl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRf UkVHX0dQVV9GUkVRX1NUUyk7Cj4gLQo+IC0Jdmx2X3B1bml0X3B1dChkZXZfcHJpdik7Cj4gLQo+ IC0JLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8KPiAtCVdBUk5fT05DRSgodmFs ICYgR1BMTEVOQUJMRSkgPT0gMCwgIkdQTEwgbm90IGVuYWJsZWRcbiIpOwo+IC0KPiAtCURSTV9E RUJVR19EUklWRVIoIkdQTEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAmIEdQTExFTkFCTEUp KTsKPiAtCURSTV9ERUJVR19EUklWRVIoIkdQVSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKPiAt Cj4gLQlyZXNldF9ycHMoZGV2X3ByaXYsIHZhbGxleXZpZXdfc2V0X3Jwcyk7Cj4gLQo+IC0JaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwp Owo+IC19Cj4gLQo+IC1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlbF9weGZyZXEodTMyIHZpZGZy ZXEpCj4gLXsKPiAtCXVuc2lnbmVkIGxvbmcgZnJlcTsKPiAtCWludCBkaXYgPSAodmlkZnJlcSAm IDB4M2YwMDAwKSA+PiAxNjsKPiAtCWludCBwb3N0ID0gKHZpZGZyZXEgJiAweDMwMDApID4+IDEy Owo+IC0JaW50IHByZSA9ICh2aWRmcmVxICYgMHg3KTsKPiAtCj4gLQlpZiAoIXByZSkKPiAtCQly ZXR1cm4gMDsKPiAtCj4gLQlmcmVxID0gKChkaXYgKiAxMzMzMzMpIC8gKCgxPDxwb3N0KSAqIHBy ZSkpOwo+IC0KPiAtCXJldHVybiBmcmVxOwo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0 IGNwYXJhbXMgewo+IC0JdTE2IGk7Cj4gLQl1MTYgdDsKPiAtCXUxNiBtOwo+IC0JdTE2IGM7Cj4g LX0gY3BhcmFtc1tdID0gewo+IC0JeyAxLCAxMzMzLCAzMDEsIDI4NjY0IH0sCj4gLQl7IDEsIDEw NjYsIDI5NCwgMjQ0NjAgfSwKPiAtCXsgMSwgODAwLCAyOTQsIDI1MTkyIH0sCj4gLQl7IDAsIDEz MzMsIDI3NiwgMjc2MDUgfSwKPiAtCXsgMCwgMTA2NiwgMjc2LCAyNzYwNSB9LAo+IC0JeyAwLCA4 MDAsIDIzMSwgMjM3ODQgfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faTkx NV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAt CXU2NCB0b3RhbF9jb3VudCwgZGlmZiwgcmV0Owo+IC0JdTMyIGNvdW50MSwgY291bnQyLCBjb3Vu dDMsIG0gPSAwLCBjID0gMDsKPiAtCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllc190b19tc2Vj cyhqaWZmaWVzKSwgZGlmZjE7Cj4gLQlpbnQgaTsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxk KCZtY2hkZXZfbG9jayk7Cj4gLQo+IC0JZGlmZjEgPSBub3cgLSBkZXZfcHJpdi0+aXBzLmxhc3Rf dGltZTE7Cj4gLQo+IC0JLyogUHJldmVudCBkaXZpc2lvbi1ieS16ZXJvIGlmIHdlIGFyZSBhc2tp bmcgdG9vIGZhc3QuCj4gLQkgKiBBbHNvLCB3ZSBkb24ndCBnZXQgaW50ZXJlc3RpbmcgcmVzdWx0 cyBpZiB3ZSBhcmUgcG9sbGluZwo+IC0JICogZmFzdGVyIHRoYW4gb25jZSBpbiAxMG1zLCBzbyBq dXN0IHJldHVybiB0aGUgc2F2ZWQgdmFsdWUKPiAtCSAqIGluIHN1Y2ggY2FzZXMuCj4gLQkgKi8K PiAtCWlmIChkaWZmMSA8PSAxMCkKPiAtCQlyZXR1cm4gZGV2X3ByaXYtPmlwcy5jaGlwc2V0X3Bv d2VyOwo+IC0KPiAtCWNvdW50MSA9IEk5MTVfUkVBRChETUlFQyk7Cj4gLQljb3VudDIgPSBJOTE1 X1JFQUQoRERSRUMpOwo+IC0JY291bnQzID0gSTkxNV9SRUFEKENTSUVDKTsKPiAtCj4gLQl0b3Rh bF9jb3VudCA9IGNvdW50MSArIGNvdW50MiArIGNvdW50MzsKPiAtCj4gLQkvKiBGSVhNRTogaGFu ZGxlIHBlci1jb3VudGVyIG92ZXJmbG93ICovCj4gLQlpZiAodG90YWxfY291bnQgPCBkZXZfcHJp di0+aXBzLmxhc3RfY291bnQxKSB7Cj4gLQkJZGlmZiA9IH4wVUwgLSBkZXZfcHJpdi0+aXBzLmxh c3RfY291bnQxOwo+IC0JCWRpZmYgKz0gdG90YWxfY291bnQ7Cj4gLQl9IGVsc2Ugewo+IC0JCWRp ZmYgPSB0b3RhbF9jb3VudCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDE7Cj4gLQl9Cj4gLQo+ IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3BhcmFtcyk7IGkrKykgewo+IC0JCWlmIChj cGFyYW1zW2ldLmkgPT0gZGV2X3ByaXYtPmlwcy5jX20gJiYKPiAtCQkgICAgY3BhcmFtc1tpXS50 ID09IGRldl9wcml2LT5pcHMucl90KSB7Cj4gLQkJCW0gPSBjcGFyYW1zW2ldLm07Cj4gLQkJCWMg PSBjcGFyYW1zW2ldLmM7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlkaWZmID0g ZGl2X3U2NChkaWZmLCBkaWZmMSk7Cj4gLQlyZXQgPSAoKG0gKiBkaWZmKSArIGMpOwo+IC0JcmV0 ID0gZGl2X3U2NChyZXQsIDEwKTsKPiAtCj4gLQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxID0g dG90YWxfY291bnQ7Cj4gLQlkZXZfcHJpdi0+aXBzLmxhc3RfdGltZTEgPSBub3c7Cj4gLQo+IC0J ZGV2X3ByaXYtPmlwcy5jaGlwc2V0X3Bvd2VyID0gcmV0Owo+IC0KPiAtCXJldHVybiByZXQ7Cj4g LX0KPiAtCj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0J dW5zaWduZWQgbG9uZyB2YWwgPSAwOwo+IC0KPiAtCWlmICghSVNfR0VOKGRldl9wcml2LCA1KSkK PiAtCQlyZXR1cm4gMDsKPiAtCj4gLQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmRldl9wcml2LT5y dW50aW1lX3BtLCB3YWtlcmVmKSB7Cj4gLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+ IC0JCXZhbCA9IF9faTkxNV9jaGlwc2V0X3ZhbChkZXZfcHJpdik7Cj4gLQkJc3Bpbl91bmxvY2tf aXJxKCZtY2hkZXZfbG9jayk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHZhbDsKPiAtfQo+IC0KPiAt dW5zaWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Cj4gLXsKPiAtCXVuc2lnbmVkIGxvbmcgbSwgeCwgYjsKPiAtCXUzMiB0c2ZzOwo+IC0KPiAtCXRz ZnMgPSBpbnRlbF91bmNvcmVfcmVhZCgmaTkxNS0+dW5jb3JlLCBUU0ZTKTsKPiAtCj4gLQltID0g KCh0c2ZzICYgVFNGU19TTE9QRV9NQVNLKSA+PiBUU0ZTX1NMT1BFX1NISUZUKTsKPiAtCXggPSBp bnRlbF91bmNvcmVfcmVhZDgoJmk5MTUtPnVuY29yZSwgVFIxKTsKPiAtCj4gLQliID0gdHNmcyAm IFRTRlNfSU5UUl9NQVNLOwo+IC0KPiAtCXJldHVybiAoKG0gKiB4KSAvIDEyNykgLSBiOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IF9weHZpZF90b192ZCh1OCBweHZpZCkKPiAtewo+IC0JaWYgKHB4 dmlkID09IDApCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JaWYgKHB4dmlkID49IDggJiYgcHh2aWQg PCAzMSkKPiAtCQlweHZpZCA9IDMxOwo+IC0KPiAtCXJldHVybiAocHh2aWQgKyAyKSAqIDEyNTsK PiAtfQo+IC0KPiAtc3RhdGljIHUzMiBwdmlkX3RvX2V4dHZpZChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIHU4IHB4dmlkKQo+IC17Cj4gLQljb25zdCBpbnQgdmQgPSBfcHh2aWRf dG9fdmQocHh2aWQpOwo+IC0JY29uc3QgaW50IHZtID0gdmQgLSAxMTI1Owo+IC0KPiAtCWlmIChJ TlRFTF9JTkZPKGRldl9wcml2KS0+aXNfbW9iaWxlKQo+IC0JCXJldHVybiB2bSA+IDAgPyB2bSA6 IDA7Cj4gLQo+IC0JcmV0dXJuIHZkOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX2k5MTVfdXBk YXRlX2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1 NjQgbm93LCBkaWZmLCBkaWZmbXM7Cj4gLQl1MzIgY291bnQ7Cj4gLQo+IC0JbG9ja2RlcF9hc3Nl cnRfaGVsZCgmbWNoZGV2X2xvY2spOwo+IC0KPiAtCW5vdyA9IGt0aW1lX2dldF9yYXdfbnMoKTsK PiAtCWRpZmZtcyA9IG5vdyAtIGRldl9wcml2LT5pcHMubGFzdF90aW1lMjsKPiAtCWRvX2Rpdihk aWZmbXMsIE5TRUNfUEVSX01TRUMpOwo+IC0KPiAtCS8qIERvbid0IGRpdmlkZSBieSAwICovCj4g LQlpZiAoIWRpZmZtcykKPiAtCQlyZXR1cm47Cj4gLQo+IC0JY291bnQgPSBJOTE1X1JFQUQoR0ZY RUMpOwo+IC0KPiAtCWlmIChjb3VudCA8IGRldl9wcml2LT5pcHMubGFzdF9jb3VudDIpIHsKPiAt CQlkaWZmID0gfjBVTCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDI7Cj4gLQkJZGlmZiArPSBj b3VudDsKPiAtCX0gZWxzZSB7Cj4gLQkJZGlmZiA9IGNvdW50IC0gZGV2X3ByaXYtPmlwcy5sYXN0 X2NvdW50MjsKPiAtCX0KPiAtCj4gLQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQyID0gY291bnQ7 Cj4gLQlkZXZfcHJpdi0+aXBzLmxhc3RfdGltZTIgPSBub3c7Cj4gLQo+IC0JLyogTW9yZSBtYWdp YyBjb25zdGFudHMuLi4gKi8KPiAtCWRpZmYgPSBkaWZmICogMTE4MTsKPiAtCWRpZmYgPSBkaXZf dTY0KGRpZmYsIGRpZmZtcyAqIDEwKTsKPiAtCWRldl9wcml2LT5pcHMuZ2Z4X3Bvd2VyID0gZGlm ZjsKPiAtfQo+IC0KPiAtdm9pZCBpOTE1X3VwZGF0ZV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQo+ IC0JaWYgKCFJU19HRU4oZGV2X3ByaXYsIDUpKQo+IC0JCXJldHVybjsKPiAtCj4gLQl3aXRoX2lu dGVsX3J1bnRpbWVfcG0oJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKSB7Cj4gLQkJc3Bp bl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0JCV9faTkxNV91cGRhdGVfZ2Z4X3ZhbChkZXZf cHJpdik7Cj4gLQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gLQl9Cj4gLX0KPiAt Cj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faTkxNV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdW5zaWduZWQgbG9uZyB0LCBjb3JyLCBzdGF0ZTEs IGNvcnIyLCBzdGF0ZTI7Cj4gLQl1MzIgcHh2aWQsIGV4dF92Owo+IC0KPiAtCWxvY2tkZXBfYXNz ZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKPiAtCj4gLQlweHZpZCA9IEk5MTVfUkVBRChQWFZGUkVR KGRldl9wcml2LT5ndF9wbS5ycHMuY3VyX2ZyZXEpKTsKPiAtCXB4dmlkID0gKHB4dmlkID4+IDI0 KSAmIDB4N2Y7Cj4gLQlleHRfdiA9IHB2aWRfdG9fZXh0dmlkKGRldl9wcml2LCBweHZpZCk7Cj4g LQo+IC0Jc3RhdGUxID0gZXh0X3Y7Cj4gLQo+IC0JdCA9IGk5MTVfbWNoX3ZhbChkZXZfcHJpdik7 Cj4gLQo+IC0JLyogUmV2ZWwgaW4gdGhlIGVtcGlyaWNhbGx5IGRlcml2ZWQgY29uc3RhbnRzICov Cj4gLQo+IC0JLyogQ29ycmVjdGlvbiBmYWN0b3IgaW4gMS8xMDAwMDAgdW5pdHMgKi8KPiAtCWlm ICh0ID4gODApCj4gLQkJY29yciA9ICgodCAqIDIzNDkpICsgMTM1OTQwKTsKPiAtCWVsc2UgaWYg KHQgPj0gNTApCj4gLQkJY29yciA9ICgodCAqIDk2NCkgKyAyOTMxNyk7Cj4gLQllbHNlIC8qIDwg NTAgKi8KPiAtCQljb3JyID0gKCh0ICogMzAxKSArIDEwMDQpOwo+IC0KPiAtCWNvcnIgPSBjb3Jy ICogKCgxNTAxNDIgKiBzdGF0ZTEpIC8gMTAwMDAgLSA3ODY0Mik7Cj4gLQljb3JyIC89IDEwMDAw MDsKPiAtCWNvcnIyID0gKGNvcnIgKiBkZXZfcHJpdi0+aXBzLmNvcnIpOwo+IC0KPiAtCXN0YXRl MiA9IChjb3JyMiAqIHN0YXRlMSkgLyAxMDAwMDsKPiAtCXN0YXRlMiAvPSAxMDA7IC8qIGNvbnZl cnQgdG8gbVcgKi8KPiAtCj4gLQlfX2k5MTVfdXBkYXRlX2dmeF92YWwoZGV2X3ByaXYpOwo+IC0K PiAtCXJldHVybiBkZXZfcHJpdi0+aXBzLmdmeF9wb3dlciArIHN0YXRlMjsKPiAtfQo+IC0KPiAt dW5zaWduZWQgbG9uZyBpOTE1X2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+IC17Cj4gLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCXVuc2lnbmVkIGxvbmcg dmFsID0gMDsKPiAtCj4gLQlpZiAoIUlTX0dFTihkZXZfcHJpdiwgNSkpCj4gLQkJcmV0dXJuIDA7 Cj4gLQo+IC0Jd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2Fr ZXJlZikgewo+IC0JCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiAtCQl2YWwgPSBfX2k5 MTVfZ2Z4X3ZhbChkZXZfcHJpdik7Cj4gLQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7 Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHZhbDsKPiAtfQo+IC0KPiAtc3RhdGljIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIF9fcmN1ICppOTE1X21jaF9kZXY7Cj4gLQo+IC1zdGF0aWMgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKm1jaGRldl9nZXQodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTU7Cj4gLQo+IC0JcmN1X3JlYWRfbG9jaygpOwo+IC0JaTkxNSA9IHJjdV9k ZXJlZmVyZW5jZShpOTE1X21jaF9kZXYpOwo+IC0JaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygm aTkxNS0+ZHJtLnJlZikpCj4gLQkJaTkxNSA9IE5VTEw7Cj4gLQlyY3VfcmVhZF91bmxvY2soKTsK PiAtCj4gLQlyZXR1cm4gaTkxNTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfcmVhZF9tY2hf dmFsIC0gcmV0dXJuIHZhbHVlIGZvciBJUFMgdXNlCj4gLSAqCj4gLSAqIENhbGN1bGF0ZSBhbmQg cmV0dXJuIGEgdmFsdWUgZm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3aGVuIGRlY2lkaW5nIHdo ZXRoZXIKPiAtICogd2UgaGF2ZSB0aGVybWFsIGFuZCBwb3dlciBoZWFkcm9vbSB0byBpbmNyZWFz ZSBDUFUgb3IgR1BVIHBvd2VyIGJ1ZGdldC4KPiAtICovCj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9y ZWFkX21jaF92YWwodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7 Cj4gLQl1bnNpZ25lZCBsb25nIGNoaXBzZXRfdmFsID0gMDsKPiAtCXVuc2lnbmVkIGxvbmcgZ3Jh cGhpY3NfdmFsID0gMDsKPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0KPiAtCWk5MTUg PSBtY2hkZXZfZ2V0KCk7Cj4gLQlpZiAoIWk5MTUpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0Jd2l0 aF9pbnRlbF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKSB7Cj4gLQkJc3Bp bl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0JCWNoaXBzZXRfdmFsID0gX19pOTE1X2NoaXBz ZXRfdmFsKGk5MTUpOwo+IC0JCWdyYXBoaWNzX3ZhbCA9IF9faTkxNV9nZnhfdmFsKGk5MTUpOwo+ IC0JCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0JfQo+IC0KPiAtCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOwo+IC0JcmV0dXJuIGNoaXBzZXRfdmFsICsgZ3JhcGhpY3NfdmFsOwo+ IC19Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVhZF9tY2hfdmFsKTsKPiAtCj4gLS8qKgo+ IC0gKiBpOTE1X2dwdV9yYWlzZSAtIHJhaXNlIEdQVSBmcmVxdWVuY3kgbGltaXQKPiAtICoKPiAt ICogUmFpc2UgdGhlIGxpbWl0OyBJUFMgaW5kaWNhdGVzIHdlIGhhdmUgdGhlcm1hbCBoZWFkcm9v bS4KPiAtICovCj4gLWJvb2wgaTkxNV9ncHVfcmFpc2Uodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gLQo+IC0JaTkxNSA9IG1jaGRldl9nZXQoKTsKPiAtCWlm ICghaTkxNSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2 X2xvY2spOwo+IC0JaWYgKGk5MTUtPmlwcy5tYXhfZGVsYXkgPiBpOTE1LT5pcHMuZm1heCkKPiAt CQlpOTE1LT5pcHMubWF4X2RlbGF5LS07Cj4gLQlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2Nr KTsKPiAtCj4gLQlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKPiAtCXJldHVybiB0cnVlOwo+IC19 Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X3JhaXNlKTsKPiAtCj4gLS8qKgo+IC0gKiBp OTE1X2dwdV9sb3dlciAtIGxvd2VyIEdQVSBmcmVxdWVuY3kgbGltaXQKPiAtICoKPiAtICogSVBT IGluZGljYXRlcyB3ZSdyZSBjbG9zZSB0byBhIHRoZXJtYWwgbGltaXQsIHNvIHRocm90dGxlIGJh Y2sgdGhlIEdQVQo+IC0gKiBmcmVxdWVuY3kgbWF4aW11bS4KPiAtICovCj4gLWJvb2wgaTkxNV9n cHVfbG93ZXIodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4g LQo+IC0JaTkxNSA9IG1jaGRldl9nZXQoKTsKPiAtCWlmICghaTkxNSkKPiAtCQlyZXR1cm4gZmFs c2U7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0JaWYgKGk5MTUtPmlw cy5tYXhfZGVsYXkgPCBpOTE1LT5pcHMubWluX2RlbGF5KQo+IC0JCWk5MTUtPmlwcy5tYXhfZGVs YXkrKzsKPiAtCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0KPiAtCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOwo+IC0JcmV0dXJuIHRydWU7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTF9H UEwoaTkxNV9ncHVfbG93ZXIpOwo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfZ3B1X2J1c3kgLSBpbmRp Y2F0ZSBHUFUgYnVzaW5lc3MgdG8gSVBTCj4gLSAqCj4gLSAqIFRlbGwgdGhlIElQUyBkcml2ZXIg d2hldGhlciBvciBub3QgdGhlIEdQVSBpcyBidXN5Lgo+IC0gKi8KPiAtYm9vbCBpOTE1X2dwdV9i dXN5KHZvaWQpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1Owo+IC0JYm9v bCByZXQ7Cj4gLQo+IC0JaTkxNSA9IG1jaGRldl9nZXQoKTsKPiAtCWlmICghaTkxNSkKPiAtCQly ZXR1cm4gZmFsc2U7Cj4gLQo+IC0JcmV0ID0gaTkxNS0+Z3QuYXdha2U7Cj4gLQo+IC0JZHJtX2Rl dl9wdXQoJmk5MTUtPmRybSk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLUVYUE9SVF9TWU1CT0xf R1BMKGk5MTVfZ3B1X2J1c3kpOwo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfZ3B1X3R1cmJvX2Rpc2Fi bGUgLSBkaXNhYmxlIGdyYXBoaWNzIHR1cmJvCj4gLSAqCj4gLSAqIERpc2FibGUgZ3JhcGhpY3Mg dHVyYm8gYnkgcmVzZXR0aW5nIHRoZSBtYXggZnJlcXVlbmN5IGFuZCBzZXR0aW5nIHRoZQo+IC0g KiBjdXJyZW50IGZyZXF1ZW5jeSB0byB0aGUgZGVmYXVsdC4KPiAtICovCj4gLWJvb2wgaTkxNV9n cHVfdHVyYm9fZGlzYWJsZSh2b2lkKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNTsKPiAtCWJvb2wgcmV0Owo+IC0KPiAtCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Cj4gLQlpZiAo IWk5MTUpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCXNwaW5fbG9ja19pcnEoJm1jaGRldl9s b2NrKTsKPiAtCWk5MTUtPmlwcy5tYXhfZGVsYXkgPSBpOTE1LT5pcHMuZnN0YXJ0Owo+IC0JcmV0 ID0gaXJvbmxha2Vfc2V0X2RycHMoaTkxNSwgaTkxNS0+aXBzLmZzdGFydCk7Cj4gLQlzcGluX3Vu bG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiAtCj4gLQlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsK PiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfdHVyYm9f ZGlzYWJsZSk7Cj4gLQo+IC0vKioKPiAtICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhh dCB0aGUgaTkxNSBkcml2ZXIgaXMgbm93IGxvYWRlZCwgaWYKPiAtICogSVBTIGdvdCBsb2FkZWQg Zmlyc3QuCj4gLSAqCj4gLSAqIFRoaXMgYXdrd2FyZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIg bW9kdWxlIGhhcyB0byBkZXBlbmQgb24gdGhlCj4gLSAqIG90aGVyIGluIG9yZGVyIGZvciBJUFMg dG8gZG8gdGhlIGFwcHJvcHJpYXRlIGNvbW11bmljYXRpb24gb2YKPiAtICogR1BVIHR1cmJvIGxp bWl0cyB0byBpOTE1Lgo+IC0gKi8KPiAtc3RhdGljIHZvaWQKPiAtaXBzX3BpbmdfZm9yX2k5MTVf bG9hZCh2b2lkKQo+IC17Cj4gLQl2b2lkICgqbGluaykodm9pZCk7Cj4gLQo+IC0JbGluayA9IHN5 bWJvbF9nZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOwo+IC0JaWYgKGxpbmspIHsKPiAtCQls aW5rKCk7Cj4gLQkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1X2RyaXZlcik7Cj4gLQl9Cj4g LX0KPiAtCj4gLXZvaWQgaW50ZWxfZ3B1X2lwc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiAtewo+IC0JLyogV2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFy dCB3aXRoIGludGVsLWlwcyBvbmNlIGV2ZXJ5dGhpbmcgaXMKPiAtCSAqIHNldCB1cCwgdG8gYXZv aWQgaW50ZWwtaXBzIHNuZWFraW5nIGluIGFuZCByZWFkaW5nIGJvZ3VzIHZhbHVlcy4gKi8KPiAt CXJjdV9hc3NpZ25fcG9pbnRlcihpOTE1X21jaF9kZXYsIGRldl9wcml2KTsKPiAtCj4gLQlpcHNf cGluZ19mb3JfaTkxNV9sb2FkKCk7Cj4gLX0KPiAtCj4gLXZvaWQgaW50ZWxfZ3B1X2lwc190ZWFy ZG93bih2b2lkKQo+IC17Cj4gLQlyY3VfYXNzaWduX3BvaW50ZXIoaTkxNV9tY2hfZGV2LCBOVUxM KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaW50ZWxfaW5pdF9lbW9uKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdTMyIGxjZnVzZTsKPiAtCXU4IHB4d1sxNl07 Cj4gLQlpbnQgaTsKPiAtCj4gLQkvKiBEaXNhYmxlIHRvIHByb2dyYW0gKi8KPiAtCUk5MTVfV1JJ VEUoRUNSLCAwKTsKPiAtCVBPU1RJTkdfUkVBRChFQ1IpOwo+IC0KPiAtCS8qIFByb2dyYW0gZW5l cmd5IHdlaWdodHMgZm9yIHZhcmlvdXMgZXZlbnRzICovCj4gLQlJOTE1X1dSSVRFKFNERVcsIDB4 MTUwNDBkMDApOwo+IC0JSTkxNV9XUklURShDU0lFVzAsIDB4MDA3ZjAwMDApOwo+IC0JSTkxNV9X UklURShDU0lFVzEsIDB4MWUyMjAwMDQpOwo+IC0JSTkxNV9XUklURShDU0lFVzIsIDB4MDQwMDAw MDQpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCj4gLQkJSTkxNV9XUklURShQRVco aSksIDApOwo+IC0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKPiAtCQlJOTE1X1dSSVRFKERFVyhp KSwgMCk7Cj4gLQo+IC0JLyogUHJvZ3JhbSBQLXN0YXRlIHdlaWdodHMgdG8gYWNjb3VudCBmb3Ig ZnJlcXVlbmN5IHBvd2VyIGFkanVzdG1lbnQgKi8KPiAtCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsr KSB7Cj4gLQkJdTMyIHB4dmlkZnJlcSA9IEk5MTVfUkVBRChQWFZGUkVRKGkpKTsKPiAtCQl1bnNp Z25lZCBsb25nIGZyZXEgPSBpbnRlbF9weGZyZXEocHh2aWRmcmVxKTsKPiAtCQl1bnNpZ25lZCBs b25nIHZpZCA9IChweHZpZGZyZXEgJiBQWFZGUkVRX1BYX01BU0spID4+Cj4gLQkJCVBYVkZSRVFf UFhfU0hJRlQ7Cj4gLQkJdW5zaWduZWQgbG9uZyB2YWw7Cj4gLQo+IC0JCXZhbCA9IHZpZCAqIHZp ZDsKPiAtCQl2YWwgKj0gKGZyZXEgLyAxMDAwKTsKPiAtCQl2YWwgKj0gMjU1Owo+IC0JCXZhbCAv PSAoMTI3KjEyNyo5MDApOwo+IC0JCWlmICh2YWwgPiAweGZmKQo+IC0JCQlEUk1fRVJST1IoImJh ZCBweHZhbDogJWxkXG4iLCB2YWwpOwo+IC0JCXB4d1tpXSA9IHZhbDsKPiAtCX0KPiAtCS8qIFJl bmRlciBzdGFuZGJ5IHN0YXRlcyBnZXQgMCB3ZWlnaHQgKi8KPiAtCXB4d1sxNF0gPSAwOwo+IC0J cHh3WzE1XSA9IDA7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+IC0JCXUzMiB2 YWwgPSAocHh3W2kqNF0gPDwgMjQpIHwgKHB4d1soaSo0KSsxXSA8PCAxNikgfAo+IC0JCQkocHh3 WyhpKjQpKzJdIDw8IDgpIHwgKHB4d1soaSo0KSszXSk7Cj4gLQkJSTkxNV9XUklURShQWFcoaSks IHZhbCk7Cj4gLQl9Cj4gLQo+IC0JLyogQWRqdXN0IG1hZ2ljIHJlZ3MgdG8gbWFnaWMgdmFsdWVz IChtb3JlIGV4cGVyaW1lbnRhbCByZXN1bHRzKSAqLwo+IC0JSTkxNV9XUklURShPR1cwLCAwKTsK PiAtCUk5MTVfV1JJVEUoT0dXMSwgMCk7Cj4gLQlJOTE1X1dSSVRFKEVHMCwgMHgwMDAwN2YwMCk7 Cj4gLQlJOTE1X1dSSVRFKEVHMSwgMHgwMDAwMDAwZSk7Cj4gLQlJOTE1X1dSSVRFKEVHMiwgMHgw MDBlMDAwMCk7Cj4gLQlJOTE1X1dSSVRFKEVHMywgMHg2ODAwMDMwMCk7Cj4gLQlJOTE1X1dSSVRF KEVHNCwgMHg0MjAwMDAwMCk7Cj4gLQlJOTE1X1dSSVRFKEVHNSwgMHgwMDE0MDAzMSk7Cj4gLQlJ OTE1X1dSSVRFKEVHNiwgMCk7Cj4gLQlJOTE1X1dSSVRFKEVHNywgMCk7Cj4gLQo+IC0JZm9yIChp ID0gMDsgaSA8IDg7IGkrKykKPiAtCQlJOTE1X1dSSVRFKFBYV0woaSksIDApOwo+IC0KPiAtCS8q IEVuYWJsZSBQTU9OICsgc2VsZWN0IGV2ZW50cyAqLwo+IC0JSTkxNV9XUklURShFQ1IsIDB4ODAw MDAwMTkpOwo+IC0KPiAtCWxjZnVzZSA9IEk5MTVfUkVBRChMQ0ZVU0UwMik7Cj4gLQo+IC0JZGV2 X3ByaXYtPmlwcy5jb3JyID0gKGxjZnVzZSAmIExDRlVTRV9ISVZfTUFTSyk7Cj4gLX0KPiAtCj4g LXZvaWQgaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKPiAtCj4gLQkvKiBQb3dlcnNhdmluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0IHdo ZW4gaW5zaWRlIGEgVk0gKi8KPiAtCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCj4g LQkJbWt3cml0ZV9kZXZpY2VfaW5mbyhkZXZfcHJpdiktPmhhc19ycHMgPSBmYWxzZTsKPiAtCj4g LQkvKiBJbml0aWFsaXplIFJQUyBsaW1pdHMgKGZvciB1c2Vyc3BhY2UpICovCj4gLQlpZiAoSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpCj4gLQkJY2hlcnJ5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShk ZXZfcHJpdik7Cj4gLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKPiAtCQl2YWxs ZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsKPiAtCWVsc2UgaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gNikKPiAtCQlnZW42X2luaXRfcnBzX2ZyZXF1ZW5jaWVzKGRldl9wcml2 KTsKPiAtCj4gLQkvKiBEZXJpdmUgaW5pdGlhbCB1c2VyIHByZWZlcmVuY2VzL2xpbWl0cyBmcm9t IHRoZSBoYXJkd2FyZSBsaW1pdHMgKi8KPiAtCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0ID0gcnBz LT5tYXhfZnJlcTsKPiAtCXJwcy0+bWluX2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5taW5fZnJlcTsK PiAtCj4gLQkvKiBBZnRlciBzZXR0aW5nIG1heC1zb2Z0bGltaXQsIGZpbmQgdGhlIG92ZXJjbG9j ayBtYXggZnJlcSAqLwo+IC0JaWYgKElTX0dFTihkZXZfcHJpdiwgNikgfHwKPiAtCSAgICBJU19J VllCUklER0UoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7Cj4gLQkJdTMyIHBh cmFtcyA9IDA7Cj4gLQo+IC0JCXNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoZGV2X3ByaXYsIEdFTjZf UkVBRF9PQ19QQVJBTVMsCj4gLQkJCQkgICAgICAgJnBhcmFtcywgTlVMTCk7Cj4gLQkJaWYgKHBh cmFtcyAmIEJJVCgzMSkpIHsgLyogT0Mgc3VwcG9ydGVkICovCj4gLQkJCURSTV9ERUJVR19EUklW RVIoIk92ZXJjbG9ja2luZyBzdXBwb3J0ZWQsIG1heDogJWRNSHosIG92ZXJjbG9jazogJWRNSHpc biIsCj4gLQkJCQkJIChycHMtPm1heF9mcmVxICYgMHhmZikgKiA1MCwKPiAtCQkJCQkgKHBhcmFt cyAmIDB4ZmYpICogNTApOwo+IC0JCQlycHMtPm1heF9mcmVxID0gcGFyYW1zICYgMHhmZjsKPiAt CQl9Cj4gLQl9Cj4gLQo+IC0JLyogRmluYWxseSBhbGxvdyB1cyB0byBib29zdCB0byBtYXggYnkg ZGVmYXVsdCAqLwo+IC0JcnBzLT5ib29zdF9mcmVxID0gcnBzLT5tYXhfZnJlcTsKPiAtCXJwcy0+ aWRsZV9mcmVxID0gcnBzLT5taW5fZnJlcTsKPiAtCXJwcy0+Y3VyX2ZyZXEgPSBycHMtPmlkbGVf ZnJlcTsKPiAtfQo+IC0KPiAtdm9pZCBpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNhdmUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlkZXZfcHJpdi0+Z3RfcG0ucnBz LmVuYWJsZWQgPSB0cnVlOyAvKiBmb3JjZSBSUFMgZGlzYWJsaW5nICovCj4gLQlpbnRlbF9kaXNh YmxlX2d0X3Bvd2Vyc2F2ZShkZXZfcHJpdik7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTEpCj4gLQkJZ2VuMTFfcmVzZXRfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYpOwo+IC0J ZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQo+IC0JCWdlbjZfcmVzZXRfcnBzX2lu dGVycnVwdHMoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbnRlbF9kaXNhYmxl X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Cj4gLQo+IC0JaWYgKCFkZXZf cHJpdi0+Z3RfcG0ucnBzLmVuYWJsZWQpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDkpCj4gLQkJZ2VuOV9kaXNhYmxlX3JwcyhkZXZfcHJpdik7Cj4gLQll bHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAtCQljaGVycnl2aWV3X2Rpc2FibGVf cnBzKGRldl9wcml2KTsKPiAtCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQo+IC0J CXZhbGxleXZpZXdfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwo+IC0JZWxzZSBpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA2KQo+IC0JCWdlbjZfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwo+IC0JZWxz ZSBpZiAoSVNfSVJPTkxBS0VfTShkZXZfcHJpdikpCj4gLQkJaXJvbmxha2VfZGlzYWJsZV9kcnBz KGRldl9wcml2KTsKPiAtCj4gLQlkZXZfcHJpdi0+Z3RfcG0ucnBzLmVuYWJsZWQgPSBmYWxzZTsK PiAtfQo+IC0KPiAtdm9pZCBpbnRlbF9kaXNhYmxlX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5ndF9w bS5ycHMubG9jayk7Cj4gLQo+IC0JaW50ZWxfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwo+IC0JaWYg KEhBU19MTEMoZGV2X3ByaXYpKQo+IC0JCWludGVsX2xsY19kaXNhYmxlKCZkZXZfcHJpdi0+Z3Qu bGxjKTsKPiAtCj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0X3BtLnJwczsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOwo+ IC0KPiAtCWlmIChycHMtPmVuYWJsZWQpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChJU19DSEVS UllWSUVXKGRldl9wcml2KSkgewo+IC0JCWNoZXJyeXZpZXdfZW5hYmxlX3JwcyhkZXZfcHJpdik7 Cj4gLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7Cj4gLQkJdmFsbGV5dmll d19lbmFibGVfcnBzKGRldl9wcml2KTsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA5KSB7Cj4gLQkJZ2VuOV9lbmFibGVfcnBzKGRldl9wcml2KTsKPiAtCX0gZWxzZSBpZiAo SVNfQlJPQURXRUxMKGRldl9wcml2KSkgewo+IC0JCWdlbjhfZW5hYmxlX3JwcyhkZXZfcHJpdik7 Cj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikgewo+IC0JCWdlbjZfZW5h YmxlX3JwcyhkZXZfcHJpdik7Cj4gLQl9IGVsc2UgaWYgKElTX0lST05MQUtFX00oZGV2X3ByaXYp KSB7Cj4gLQkJaXJvbmxha2VfZW5hYmxlX2RycHMoZGV2X3ByaXYpOwo+IC0JCWludGVsX2luaXRf ZW1vbihkZXZfcHJpdik7Cj4gLQl9Cj4gLQo+IC0JV0FSTl9PTihycHMtPm1heF9mcmVxIDwgcnBz LT5taW5fZnJlcSk7Cj4gLQlXQVJOX09OKHJwcy0+aWRsZV9mcmVxID4gcnBzLT5tYXhfZnJlcSk7 Cj4gLQo+IC0JV0FSTl9PTihycHMtPmVmZmljaWVudF9mcmVxIDwgcnBzLT5taW5fZnJlcSk7Cj4g LQlXQVJOX09OKHJwcy0+ZWZmaWNpZW50X2ZyZXEgPiBycHMtPm1heF9mcmVxKTsKPiAtCj4gLQly cHMtPmVuYWJsZWQgPSB0cnVlOwo+IC19Cj4gLQo+IC12b2lkIGludGVsX2VuYWJsZV9ndF9wb3dl cnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQkvKiBQb3dl cnNhdmluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0IHdoZW4gaW5zaWRlIGEgVk0gKi8KPiAt CWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCW11 dGV4X2xvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Cj4gLQo+IC0JaWYgKEhBU19SUFMo ZGV2X3ByaXYpKQo+IC0JCWludGVsX2VuYWJsZV9ycHMoZGV2X3ByaXYpOwo+IC0KPiAtCWludGVs X2xsY19lbmFibGUoJmRldl9wcml2LT5ndC5sbGMpOwo+IC0KPiAtCW11dGV4X3VubG9jaygmZGV2 X3ByaXYtPmd0X3BtLnJwcy5sb2NrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaWJ4X2luaXRf Y2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0J LyoKPiAtCSAqIE9uIEliZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2Fi bGUgY2xvY2sKPiAtCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNlciBvciBp dCB3aWxsIGZhaWwgdG8KPiAtCSAqIHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4K PiAtCSAqLwo+IC0JSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRf Q0xPQ0tfR0FURV9ESVNBQkxFKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZzR4X2Rpc2FibGVf dHJpY2tsZV9mZWVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0J ZW51bSBwaXBlIHBpcGU7Cj4gLQo+IC0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewo+ IC0JCUk5MTVfV1JJVEUoRFNQQ05UUihwaXBlKSwKPiAtCQkJICAgSTkxNV9SRUFEKERTUENOVFIo cGlwZSkpIHwKPiAtCQkJICAgRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFKTsKPiAtCj4g LQkJSTkxNV9XUklURShEU1BTVVJGKHBpcGUpLCBJOTE1X1JFQUQoRFNQU1VSRihwaXBlKSkpOwo+ IC0JCVBPU1RJTkdfUkVBRChEU1BTVVJGKHBpcGUpKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgaWxrX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiAtewo+IC0JdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9E SVNBQkxFOwo+IC0KPiAtCS8qCj4gLQkgKiBSZXF1aXJlZCBmb3IgRkJDCj4gLQkgKiBXYUZiY0Rp c2FibGVEcGZjQ2xvY2tHYXRpbmc6aWxrCj4gLQkgKi8KPiAtCWRzcGNsa19nYXRlIHw9IElMS19E UEZDUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKPiAtCQkgICBJTEtfRFBGQ1VOSVRfQ0xPQ0tf R0FURV9ESVNBQkxFIHwKPiAtCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tfR0FURV9FTkFCTEU7Cj4g LQo+IC0JSTkxNV9XUklURShQQ0hfM0RDR0RJUzAsCj4gLQkJICAgTUFSSVVOSVRfQ0xPQ0tfR0FU RV9ESVNBQkxFIHwKPiAtCQkgICBTVlNNVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+IC0JSTkx NV9XUklURShQQ0hfM0RDR0RJUzEsCj4gLQkJICAgVkZNVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUp Owo+IC0KPiAtCS8qCj4gLQkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBi aXRzIHNob3VsZCBiZSBzZXQgaW4KPiAtCSAqIG9yZGVyIHRvIGVuYWJsZSBtZW1vcnkgc2VsZi1y ZWZyZXNoCj4gLQkgKiBUaGUgYml0IDIyLzIxIG9mIDB4NDIwMDQKPiAtCSAqIFRoZSBiaXQgNSBv ZiAweDQyMDIwCj4gLQkgKiBUaGUgYml0IDE1IG9mIDB4NDUwMDAKPiAtCSAqLwo+IC0JSTkxNV9X UklURShJTEtfRElTUExBWV9DSElDS0VOMiwKPiAtCQkgICAoSTkxNV9SRUFEKElMS19ESVNQTEFZ X0NISUNLRU4yKSB8Cj4gLQkJICAgIElMS19EUEFSQl9HQVRFIHwgSUxLX1ZTRFBGRF9GVUxMKSk7 Cj4gLQlkc3BjbGtfZ2F0ZSB8PSBJTEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFOwo+IC0J STkxNV9XUklURShESVNQX0FSQl9DVEwsCj4gLQkJICAgKEk5MTVfUkVBRChESVNQX0FSQl9DVEwp IHwKPiAtCQkgICAgRElTUF9GQkNfV01fRElTKSk7Cj4gLQo+IC0JLyoKPiAtCSAqIEJhc2VkIG9u IHRoZSBkb2N1bWVudCBmcm9tIGhhcmR3YXJlIGd1eXMgdGhlIGZvbGxvd2luZyBiaXRzCj4gLQkg KiBzaG91bGQgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBlbmFibGUgRkJDLgo+ IC0JICogVGhlIGJpdCAyMiBvZiAweDQyMDAwCj4gLQkgKiBUaGUgYml0IDIyIG9mIDB4NDIwMDQK PiAtCSAqIFRoZSBiaXQgNyw4LDkgb2YgMHg0MjAyMC4KPiAtCSAqLwo+IC0JaWYgKElTX0lST05M QUtFX00oZGV2X3ByaXYpKSB7Cj4gLQkJLyogV2FGYmNBc3luY2hGbGlwRGlzYWJsZUZiY1F1ZXVl OmlsayAqLwo+IC0JCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEsCj4gLQkJCSAgIEk5 MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMSkgfAo+IC0JCQkgICBJTEtfRkJDUV9ESVMpOwo+ IC0JCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCj4gLQkJCSAgIEk5MTVfUkVBRChJ TEtfRElTUExBWV9DSElDS0VOMikgfAo+IC0JCQkgICBJTEtfRFBBUkJfR0FURSk7Cj4gLQl9Cj4g LQo+IC0JSTkxNV9XUklURShJTEtfRFNQQ0xLX0dBVEVfRCwgZHNwY2xrX2dhdGUpOwo+IC0KPiAt CUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCj4gLQkJICAgSTkxNV9SRUFEKElMS19E SVNQTEFZX0NISUNLRU4yKSB8Cj4gLQkJICAgSUxLX0VMUElOXzQwOV9TRUxFQ1QpOwo+IC0JSTkx NV9XUklURShfM0RfQ0hJQ0tFTjIsCj4gLQkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJ TkVEIDw8IDE2IHwKPiAtCQkgICBfM0RfQ0hJQ0tFTjJfV01fUkVBRF9QSVBFTElORUQpOwo+IC0K PiAtCS8qIFdhRGlzYWJsZVJlbmRlckNhY2hlUGlwZWxpbmVkRmx1c2g6aWxrICovCj4gLQlJOTE1 X1dSSVRFKENBQ0hFX01PREVfMCwKPiAtCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoQ00wX1BJUEVM SU5FRF9SRU5ERVJfRkxVU0hfRElTQUJMRSkpOwo+IC0KPiAtCS8qIFdhRGlzYWJsZV9SZW5kZXJD YWNoZV9PcGVyYXRpb25hbEZsdXNoOmlsayAqLwo+IC0JSTkxNV9XUklURShDQUNIRV9NT0RFXzAs IF9NQVNLRURfQklUX0RJU0FCTEUoUkNfT1BfRkxVU0hfRU5BQkxFKSk7Cj4gLQo+IC0JZzR4X2Rp c2FibGVfdHJpY2tsZV9mZWVkKGRldl9wcml2KTsKPiAtCj4gLQlpYnhfaW5pdF9jbG9ja19nYXRp bmcoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjcHRfaW5pdF9jbG9ja19nYXRp bmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQllbnVtIHBpcGUg cGlwZTsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0JLyoKPiAtCSAqIE9uIEliZXggUGVhayBhbmQgQ291 Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sKPiAtCSAqIGdhdGluZyBmb3IgdGhl IHBhbmVsIHBvd2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZhaWwgdG8KPiAtCSAqIHN0YXJ0IHVw IHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4KPiAtCSAqLwo+IC0JSTkxNV9XUklURShTT1VUSF9E U1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKPiAtCQkgICBQ Q0hfRFBMVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAo+IC0JCSAgIFBDSF9DUFVOSVRfQ0xPQ0tf R0FURV9ESVNBQkxFKTsKPiAtCUk5MTVfV1JJVEUoU09VVEhfQ0hJQ0tFTjIsIEk5MTVfUkVBRChT T1VUSF9DSElDS0VOMikgfAo+IC0JCSAgIERQTFNfRURQX1BQU19GSVhfRElTKTsKPiAtCS8qIFRo ZSBiZWxvdyBmaXhlcyB0aGUgd2VpcmQgZGlzcGxheSBjb3JydXB0aW9uLCBhIGZldyBwaXhlbHMg c2hpZnRlZAo+IC0JICogZG93bndhcmQsIG9uIChvbmx5KSBMVkRTIG9mIHNvbWUgSFAgbGFwdG9w cyB3aXRoIElWWS4KPiAtCSAqLwo+IC0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewo+ IC0JCXZhbCA9IEk5MTVfUkVBRChUUkFOU19DSElDS0VOMihwaXBlKSk7Cj4gLQkJdmFsIHw9IFRS QU5TX0NISUNLRU4yX1RJTUlOR19PVkVSUklERTsKPiAtCQl2YWwgJj0gflRSQU5TX0NISUNLRU4y X0ZESV9QT0xBUklUWV9SRVZFUlNFRDsKPiAtCQlpZiAoZGV2X3ByaXYtPnZidC5mZGlfcnhfcG9s YXJpdHlfaW52ZXJ0ZWQpCj4gLQkJCXZhbCB8PSBUUkFOU19DSElDS0VOMl9GRElfUE9MQVJJVFlf UkVWRVJTRUQ7Cj4gLQkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9GUkFNRV9TVEFSVF9ERUxBWV9N QVNLOwo+IC0JCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQX0NPTE9SX0NPVU5U RVI7Cj4gLQkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RFRVBfQ09MT1JfTU9ERVNX SVRDSDsKPiAtCQlJOTE1X1dSSVRFKFRSQU5TX0NISUNLRU4yKHBpcGUpLCB2YWwpOwo+IC0JfQo+ IC0JLyogV0FEUDBDbG9ja0dhdGluZ0Rpc2FibGUgKi8KPiAtCWZvcl9lYWNoX3BpcGUoZGV2X3By aXYsIHBpcGUpIHsKPiAtCQlJOTE1X1dSSVRFKFRSQU5TX0NISUNLRU4xKHBpcGUpLAo+IC0JCQkg ICBUUkFOU19DSElDS0VOMV9EUDBVTklUX0dDX0RJU0FCTEUpOwo+IC0JfQo+IC19Cj4gLQo+IC1z dGF0aWMgdm9pZCBnZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiB0bXA7Cj4gLQo+IC0JdG1wID0gSTkxNV9SRUFEKE1DSF9T U0tQRCk7Cj4gLQlpZiAoKHRtcCAmIE1DSF9TU0tQRF9XTTBfTUFTSykgIT0gTUNIX1NTS1BEX1dN MF9WQUwpCj4gLQkJRFJNX0RFQlVHX0tNUygiV3JvbmcgTUNIX1NTS1BEIHZhbHVlOiAweCUwOHgg VGhpcyBjYW4gY2F1c2UgdW5kZXJydW5zLlxuIiwKPiAtCQkJICAgICAgdG1wKTsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgZ2VuNl9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiBkc3BjbGtfZ2F0ZSA9IElMS19WUkhVTklUX0NM T0NLX0dBVEVfRElTQUJMRTsKPiAtCj4gLQlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBk c3BjbGtfZ2F0ZSk7Cj4gLQo+IC0JSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMiwKPiAt CQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKPiAtCQkgICBJTEtfRUxQSU5f NDA5X1NFTEVDVCk7Cj4gLQo+IC0JLyogV2FEaXNhYmxlSGlaUGxhbmVzV2hlbk1TQUFFbmFibGVk OnNuYiAqLwo+IC0JSTkxNV9XUklURShfM0RfQ0hJQ0tFTiwKPiAtCQkgICBfTUFTS0VEX0JJVF9F TkFCTEUoXzNEX0NISUNLRU5fSElaX1BMQU5FX0RJU0FCTEVfTVNBQV80WF9TTkIpKTsKPiAtCj4g LQkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVzaDpzbmIgKi8KPiAtCUk5 MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZMVVNIX0VO QUJMRSkpOwo+IC0KPiAtCS8qCj4gLQkgKiBCU3BlYyByZWNvb21lbmRzIDh4NCB3aGVuIE1TQUEg aXMgdXNlZCwKPiAtCSAqIGhvd2V2ZXIgaW4gcHJhY3RpY2UgMTZ4NCBzZWVtcyBmYXN0ZXN0Lgo+ IC0JICoKPiAtCSAqIE5vdGUgdGhhdCBQUy9XTSB0aHJlYWQgY291bnRzIGRlcGVuZCBvbiB0aGUg V0laIGhhc2hpbmcKPiAtCSAqIGRpc2FibGUgYml0LCB3aGljaCB3ZSBkb24ndCB0b3VjaCBoZXJl LCBidXQgaXQncyBnb29kCj4gLQkgKiB0byBrZWVwIGluIG1pbmQgKHNlZSAzRFNUQVRFX1BTIGFu ZCAzRFNUQVRFX1dNKS4KPiAtCSAqLwo+IC0JSTkxNV9XUklURShHRU42X0dUX01PREUsCj4gLQkJ ICAgX01BU0tFRF9GSUVMRChHRU42X1dJWl9IQVNISU5HX01BU0ssIEdFTjZfV0laX0hBU0hJTkdf MTZ4NCkpOwo+IC0KPiAtCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLAo+IC0JCSAgIF9NQVNLRURf QklUX0RJU0FCTEUoQ00wX1NUQ19FVklDVF9ESVNBQkxFX0xSQV9TTkIpKTsKPiAtCj4gLQlJOTE1 X1dSSVRFKEdFTjZfVUNHQ1RMMSwKPiAtCQkgICBJOTE1X1JFQUQoR0VONl9VQ0dDVEwxKSB8Cj4g LQkJICAgR0VONl9CTEJVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Cj4gLQkJICAgR0VONl9DU1VO SVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiAtCj4gLQkvKiBBY2NvcmRpbmcgdG8gdGhlIEJTcGVj IHZvbDFnLCBiaXQgMTIgKFJDUEJVTklUKSBjbG9jawo+IC0JICogZ2F0aW5nIGRpc2FibGUgbXVz dCBiZSBzZXQuICBGYWlsdXJlIHRvIHNldCBpdCByZXN1bHRzIGluCj4gLQkgKiBmbGlja2VyaW5n IHBpeGVscyBkdWUgdG8gWiB3cml0ZSBvcmRlcmluZyBmYWlsdXJlcyBhZnRlcgo+IC0JICogc29t ZSBhbW91bnQgb2YgcnVudGltZSBpbiB0aGUgTWVzYSAiZmlyZSIgZGVtbywgYW5kIFVuaWdpbmUK PiAtCSAqIFNhbmN0dWFyeSBhbmQgVHJvcGljcywgYW5kIGFwcGFyZW50bHkgYW55dGhpbmcgZWxz ZSB3aXRoCj4gLQkgKiBhbHBoYSB0ZXN0IG9yIHBpeGVsIGRpc2NhcmQuCj4gLQkgKgo+IC0JICog QWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBiaXQgMTEgKFJDQ1VOSVQpIG11c3QgYWxzbyBiZSBzZXQs Cj4gLQkgKiBidXQgd2UgZGlkbid0IGRlYnVnIGFjdHVhbCB0ZXN0Y2FzZXMgdG8gZmluZCBpdCBv dXQuCj4gLQkgKgo+IC0JICogV2FEaXNhYmxlUkNDVW5pdENsb2NrR2F0aW5nOnNuYgo+IC0JICog V2FEaXNhYmxlUkNQQlVuaXRDbG9ja0dhdGluZzpzbmIKPiAtCSAqLwo+IC0JSTkxNV9XUklURShH RU42X1VDR0NUTDIsCj4gLQkJICAgR0VONl9SQ1BCVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAo+ IC0JCSAgIEdFTjZfUkNDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+IC0KPiAtCS8qIFdhU3Ry aXBzRmFuc0Rpc2FibGVGYXN0Q2xpcFBlcmZvcm1hbmNlRml4OnNuYiAqLwo+IC0JSTkxNV9XUklU RShfM0RfQ0hJQ0tFTjMsCj4gLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19T Rl9ESVNBQkxFX0ZBU1RDTElQX0NVTEwpKTsKPiAtCj4gLQkvKgo+IC0JICogQnNwZWMgc2F5czoK PiAtCSAqICJUaGlzIGJpdCBtdXN0IGJlIHNldCBpZiAzRFNUQVRFX0NMSVAgY2xpcCBtb2RlIGlz IHNldCB0byBub3JtYWwgYW5kCj4gLQkgKiAzRFNUQVRFX1NGIG51bWJlciBvZiBTRiBvdXRwdXQg YXR0cmlidXRlcyBpcyBtb3JlIHRoYW4gMTYuIgo+IC0JICovCj4gLQlJOTE1X1dSSVRFKF8zRF9D SElDS0VOMywKPiAtCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU4zX1NGX0RJU0FC TEVfUElQRUxJTkVEX0FUVFJfRkVUQ0gpKTsKPiAtCj4gLQkvKgo+IC0JICogQWNjb3JkaW5nIHRv IHRoZSBzcGVjIHRoZSBmb2xsb3dpbmcgYml0cyBzaG91bGQgYmUKPiAtCSAqIHNldCBpbiBvcmRl ciB0byBlbmFibGUgbWVtb3J5IHNlbGYtcmVmcmVzaCBhbmQgZmJjOgo+IC0JICogVGhlIGJpdDIx IGFuZCBiaXQyMiBvZiAweDQyMDAwCj4gLQkgKiBUaGUgYml0MjEgYW5kIGJpdDIyIG9mIDB4NDIw MDQKPiAtCSAqIFRoZSBiaXQ1IGFuZCBiaXQ3IG9mIDB4NDIwMjAKPiAtCSAqIFRoZSBiaXQxNCBv ZiAweDcwMTgwCj4gLQkgKiBUaGUgYml0MTQgb2YgMHg3MTE4MAo+IC0JICoKPiAtCSAqIFdhRmJj QXN5bmNoRmxpcERpc2FibGVGYmNRdWV1ZTpzbmIKPiAtCSAqLwo+IC0JSTkxNV9XUklURShJTEtf RElTUExBWV9DSElDS0VOMSwKPiAtCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEp IHwKPiAtCQkgICBJTEtfRkJDUV9ESVMgfCBJTEtfUEFCU1RSRVRDSF9ESVMpOwo+IC0JSTkxNV9X UklURShJTEtfRElTUExBWV9DSElDS0VOMiwKPiAtCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjIpIHwKPiAtCQkgICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQRkRfRlVMTCk7Cj4g LQlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELAo+IC0JCSAgIEk5MTVfUkVBRChJTEtfRFNQ Q0xLX0dBVEVfRCkgfAo+IC0JCSAgIElMS19EUEFSQlVOSVRfQ0xPQ0tfR0FURV9FTkFCTEUgIHwK PiAtCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tfR0FURV9FTkFCTEUpOwo+IC0KPiAtCWc0eF9kaXNh YmxlX3RyaWNrbGVfZmVlZChkZXZfcHJpdik7Cj4gLQo+IC0JY3B0X2luaXRfY2xvY2tfZ2F0aW5n KGRldl9wcml2KTsKPiAtCj4gLQlnZW42X2NoZWNrX21jaF9zZXR1cChkZXZfcHJpdik7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIGdlbjdfc2V0dXBfZml4ZWRfZnVuY19zY2hlZHVsZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgcmVnID0gSTkxNV9SRUFE KEdFTjdfRkZfVEhSRUFEX01PREUpOwo+ICsJdTMyIHJlZyA9IEk5MTVfUkVBRChHRU43X0ZGX1RI UkVBRF9NT0RFKTsKPiAgCj4gIAkvKgo+ICAJICogV2FWU1RocmVhZERpc3BhdGNoT3ZlcnJpZGU6 aXZiLHZsdgo+IEBAIC04OTQyLDkwICs3MzI1LDggQEAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIGlu dCBieXRfZ3B1X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFs KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsK PiAtCj4gLQkvKgo+IC0JICogTiA9IHZhbCAtIDB4YjcKPiAtCSAqIFNsb3cgPSBGYXN0ID0gR1BM TCByZWYgKiBOCj4gLQkgKi8KPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChycHMtPmdwbGxf cmVmX2ZyZXEgKiAodmFsIC0gMHhiNyksIDEwMDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGJ5 dF9mcmVxX29wY29kZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwp Cj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+ IC0KPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgxMDAwICogdmFsLCBycHMtPmdwbGxfcmVm X2ZyZXEpICsgMHhiNzsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBjaHZfZ3B1X2ZyZXEoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKQo+IC17Cj4gLQlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCj4gLQkvKgo+IC0JICogTiA9 IHZhbCAvIDIKPiAtCSAqIENVIChzbG93KSA9IENVMnggKGZhc3QpIC8gMiA9IEdQTEwgcmVmICog TiAvIDIKPiAtCSAqLwo+IC0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHJwcy0+Z3BsbF9yZWZf ZnJlcSAqIHZhbCwgMiAqIDIgKiAxMDAwKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBjaHZfZnJl cV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKQo+IC17 Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCj4g LQkvKiBDSFYgbmVlZHMgZXZlbiB2YWx1ZXMgKi8KPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VT VCgyICogMTAwMCAqIHZhbCwgcnBzLT5ncGxsX3JlZl9mcmVxKSAqIDI7Cj4gLX0KPiAtCj4gLWlu dCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2 YWwpCj4gLXsKPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4gLQkJcmV0dXJuIERJ Vl9ST1VORF9DTE9TRVNUKHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSLAo+IC0JCQkJCSBH RU45X0ZSRVFfU0NBTEVSKTsKPiAtCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ IC0JCXJldHVybiBjaHZfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7Cj4gLQllbHNlIGlmIChJU19W QUxMRVlWSUVXKGRldl9wcml2KSkKPiAtCQlyZXR1cm4gYnl0X2dwdV9mcmVxKGRldl9wcml2LCB2 YWwpOwo+IC0JZWxzZQo+IC0JCXJldHVybiB2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUjsK PiAtfQo+IC0KPiAtaW50IGludGVsX2ZyZXFfb3Bjb2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgaW50IHZhbCkKPiAtewo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g OSkKPiAtCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsICogR0VOOV9GUkVRX1NDQUxFUiwK PiAtCQkJCQkgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwo+IC0JZWxzZSBpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCj4gLQkJcmV0dXJuIGNodl9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFs KTsKPiAtCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQo+IC0JCXJldHVybiBieXRf ZnJlcV9vcGNvZGUoZGV2X3ByaXYsIHZhbCk7Cj4gLQllbHNlCj4gLQkJcmV0dXJuIERJVl9ST1VO RF9DTE9TRVNUKHZhbCwgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwo+IC19Cj4gLQo+ICB2b2lk IGludGVsX3BtX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+ IC0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmd0X3BtLnJwcy5sb2NrKTsKPiAtCW11dGV4X2luaXQo JmRldl9wcml2LT5ndF9wbS5ycHMucG93ZXIubXV0ZXgpOwo+IC0KPiAtCWF0b21pY19zZXQoJmRl dl9wcml2LT5ndF9wbS5ycHMubnVtX3dhaXRlcnMsIDApOwo+IC0KPiAgCWRldl9wcml2LT5ydW50 aW1lX3BtLnN1c3BlbmRlZCA9IGZhbHNlOwo+ICAJYXRvbWljX3NldCgmZGV2X3ByaXYtPnJ1bnRp bWVfcG0ud2FrZXJlZl9jb3VudCwgMCk7Cj4gIH0KPiAtCj4gLXUzMiBpbnRlbF9nZXRfY2FnZihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBycHN0YXQpCj4gLXsKPiAtCXUz MiBjYWdmOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4gLQkJY2FnZiA9 IChycHN0YXQgJiBHRU45X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NISUZUOwo+IC0JZWxzZSBp ZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiAtCQlj YWdmID0gKHJwc3RhdCAmIEhTV19DQUdGX01BU0spID4+IEhTV19DQUdGX1NISUZUOwo+IC0JZWxz ZQo+IC0JCWNhZ2YgPSAocnBzdGF0ICYgR0VONl9DQUdGX01BU0spID4+IEdFTjZfQ0FHRl9TSElG VDsKPiAtCj4gLQlyZXR1cm4gIGNhZ2Y7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmgKPiBp bmRleCA5M2QxOTJkMDYxMGEuLmI1NmU2Mjg1ZDFjMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uaAo+IEBAIC0yOSwxNSArMjksNiBAQCB2b2lkIGludGVsX3VwZGF0ZV93YXRlcm1hcmtzKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKPiAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxfaW5pdF9jbG9ja19nYXRpbmdf aG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBpbnRlbF9w bV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC12b2lkIGludGVs X2dwdV9pcHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC12b2lk IGludGVsX2dwdV9pcHNfdGVhcmRvd24odm9pZCk7Cj4gLXZvaWQgaW50ZWxfaW5pdF9ndF9wb3dl cnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBpbnRlbF9z YW5pdGl6ZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK PiAtdm9pZCBpbnRlbF9lbmFibGVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7Cj4gLXZvaWQgaW50ZWxfZGlzYWJsZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBnZW42X3Jwc19idXN5KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXZvaWQgZ2VuNl9ycHNfaWRsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC12b2lkIGdlbjZfcnBzX2Jvb3N0KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxKTsKPiAgdm9pZCBnNHhfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgdmx2X3dtX2dldF9od19zdGF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICB2b2lkIGlsa193bV9nZXRfaHdf c3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiBAQCAtNjksMTkgKzYw LDYgQEAgaW50IHNrbF9jaGVja19waXBlX21heF9waXhlbF9yYXRlKHN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjLAo+ICB2b2lkIGludGVsX2luaXRfaXBjKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxfZW5hYmxlX2lwYyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAKPiAtaW50IGludGVsX2dwdV9mcmVxKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCk7Cj4gLWludCBpbnRlbF9mcmVxX29wY29k ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpOwo+IC0KPiAtdTMy IGludGVsX2dldF9jYWdmKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJw c3RhdDEpOwo+IC0KPiAtdW5zaWduZWQgbG9uZyBpOTE1X2NoaXBzZXRfdmFsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9tY2hfdmFsKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9n ZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXZvaWQgaTkxNV91 cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC0KPiAt Ym9vbCBpcm9ubGFrZV9zZXRfZHJwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHU4IHZhbCk7Cj4gLWludCBpbnRlbF9zZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgdTggdmFsKTsKPiAtdm9pZCBpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgYm9vbCBpbnRlcmFjdGl2ZSk7Cj4gIGJvb2wgaW50 ZWxfc2V0X21lbW9yeV9jeHNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgYm9v bCBlbmFibGUpOwo+ICAKPiAgI2VuZGlmIC8qIF9fSU5URUxfUE1fSF9fICovCj4gLS0gCj4gMi4y My4wCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1CBDBCA9EB6 for ; Wed, 23 Oct 2019 09:52:53 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F090C2064A for ; Wed, 23 Oct 2019 09:52:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F090C2064A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 758E66EA14; Wed, 23 Oct 2019 09:52:52 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1598B6EA14 for ; Wed, 23 Oct 2019 09:52:51 +0000 (UTC) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Oct 2019 02:52:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,220,1569308400"; d="scan'208";a="209891978" Received: from server.fi.intel.com (HELO intel.intel) ([10.237.72.186]) by fmsmga001.fm.intel.com with ESMTP; 23 Oct 2019 02:52:45 -0700 Date: Wed, 23 Oct 2019 12:52:48 +0300 From: Andi Shyti To: Intel GFX Message-ID: <20191023095248.GA2593@intel.intel> References: <20191023093821.3350-1-andi.shyti@intel.com> <20191023095000.3782-1-andi.shyti@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191023095000.3782-1-andi.shyti@intel.com> User-Agent: Mutt/1.10.1 (2018-07-13) Subject: Re: [Intel-gfx] [PATCH v2 1/2] drm/i915: Extract GT render power state management X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191023095248.dJPU7P0IxUwC-y1g9LCTuZQkhJmnA6EYXD_sD8Xw6zg@z> SGksCgpTb3JyeSwgSSBtZXNzZWQgdXAgd2l0aCB0aGUgZS1tYWlsIChhbmQgd2l0aCB0aGUgaW4t cmVwbHktdG8sIGFzCndlbGwsIGFuZCBJIGZvcmdvdCB0byBhZGQgYSBub3RlIHRvIHRoaXMgdjIp LCBwbGVhc2UgdGFrZSB0aGlzCmFzIDEvMiBiZWNhdXNlIGl0IGhhcyB0aGUgY29ycmVjdCBlLW1h aWwuCgpBbmRpCgpPbiBXZWQsIE9jdCAyMywgMjAxOSBhdCAxMjo1MDowMFBNICswMzAwLCBBbmRp IFNoeXRpIHdyb3RlOgo+IGk5MTVfaXJxLmMgaXMgbGFyZ2UuIE9uZSByZWFzb24gZm9yIHRoaXMg aXMgdGhhdCBoYXMgYSBsYXJnZSBjaHVuayBvZgo+IHRoZSBHVCByZW5kZXIgcG93ZXIgbWFuYWdl bWVudCBzdGFzaGVkIGF3YXkgaW4gaXQuIEV4dHJhY3QgdGhhdCBsb2dpYwo+IG91dCBvZiBpOTE1 X2lycS5jIGFuZCBpbnRlbF9wbS5jIGFuZCBwdXQgaXQgdW5kZXIgb25lIHJvb2YuCj4gCj4gQmFz ZWQgb24gYSBwYXRjaCBieSBDaHJpcyBXaWxzb24uCj4gCj4gU2lnbmVkLW9mZi1ieTogQW5kaSBT aHl0aSA8YW5kaS5zaHl0aUBpbnRlbC5jb20+Cj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgfCAgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5jICB8ICAgIDggKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZ3QuYyAgICAgICAgICAgIHwgICAgNiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF9pcnEuYyAgICAgICAgfCAgICA1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2d0X3BtLmMgICAgICAgICB8ICAgNDkgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3RfcG0uaCAgICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2d0X3R5cGVzLmggICAgICB8ICAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9sbGMuYyAgICAgICAgICAgfCAgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX3Jwcy5jICAgICAgICAgICB8IDE4NzIgKysrKysrKysrKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5oICAgICAgICAgICB8ICAgMzcgKwo+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHNfdHlwZXMuaCAgICAgfCAgIDkzICsKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMgICAgICAgIHwgICAgNyArLQo+ ICAuLi4vZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgfCAgICA0ICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8ICAgNzMg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgICAgICAgIHwgICAg MiArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgICB8ICAg OTYgLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAgfCAg ICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgICAgICAgICAgICAgICB8 ICAzNTkgKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmggICAgICAgICAgICAg ICB8ICAgIDMgLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jICAgICAgICAgICAg ICAgfCAgIDEwICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAg ICAgICB8ICAgIDcgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jICAgICAg ICAgICAgIHwgICA3NCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICAgICAg ICAgICAgICAgfCAyMTA1ICsrLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3BtLmggICAgICAgICAgICAgICB8ICAgMjIgLQo+ICAyNCBmaWxlcyBjaGFuZ2VkLCAy MzU5IGluc2VydGlvbnMoKyksIDI0ODQgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzLmgKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwc190eXBlcy5oCj4gCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvTWFrZWZpbGUKPiBpbmRleCAyZmQ0YmVkMTg4ZTUuLjEzM2NhNTllN2M0OCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCj4gQEAgLTkwLDExICs5MCwxMiBAQCBndC15ICs9IFwKPiAgCWd0L2lu dGVsX2hhbmdjaGVjay5vIFwKPiAgCWd0L2ludGVsX2xsYy5vIFwKPiAgCWd0L2ludGVsX2xyYy5v IFwKPiArCWd0L2ludGVsX21vY3MubyBcCj4gIAlndC9pbnRlbF9yYzYubyBcCj4gIAlndC9pbnRl bF9yZW5kZXJzdGF0ZS5vIFwKPiAgCWd0L2ludGVsX3Jlc2V0Lm8gXAo+ICAJZ3QvaW50ZWxfcmlu Z2J1ZmZlci5vIFwKPiAtCWd0L2ludGVsX21vY3MubyBcCj4gKwlndC9pbnRlbF9ycHMubyBcCj4g IAlndC9pbnRlbF9zc2V1Lm8gXAo+ICAJZ3QvaW50ZWxfdGltZWxpbmUubyBcCj4gIAlndC9pbnRl bF93b3JrYXJvdW5kcy5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5LmMKPiBpbmRleCAyMzZmZGYxMjJlNDcuLjQ5YzJjN2Y3MTM5NCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTU1LDYgKzU1 LDggQEAKPiAgI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfdHYuaCIKPiAgI2luY2x1ZGUgImRpc3Bs YXkvaW50ZWxfdmRzYy5oIgo+ICAKPiArI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgo+ICsKPiAg I2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4gICNpbmNs dWRlICJpbnRlbF9hY3BpLmgiCj4gQEAgLTE0NzgyLDcgKzE0Nzg0LDcgQEAgc3RhdGljIGludCBk b19ycHNfYm9vc3Qoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKl93YWl0LAo+ICAJICogdmJsYW5r IHdpdGhvdXQgb3VyIGludGVydmVudGlvbiwgc28gbGVhdmUgUlBTIGFsb25lLgo+ICAJICovCj4g IAlpZiAoIWk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSkKPiAtCQlnZW42X3Jwc19ib29zdChycSk7 Cj4gKwkJaW50ZWxfcnBzX2Jvb3N0KHJxKTsKPiAgCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICAK PiAgCWRybV9jcnRjX3ZibGFua19wdXQod2FpdC0+Y3J0Yyk7Cj4gQEAgLTE0OTc2LDcgKzE0OTc4 LDcgQEAgaW50ZWxfcHJlcGFyZV9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAg CSAqIG1heGltdW0gY2xvY2tzIGZvbGxvd2luZyBhIHZibGFuayBtaXNzIChzZWUgZG9fcnBzX2Jv b3N0KCkpLgo+ICAJICovCj4gIAlpZiAoIWludGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUpIHsK PiAtCQlpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShkZXZfcHJpdiwgdHJ1ZSk7Cj4gKwkJaW50 ZWxfcnBzX21hcmtfaW50ZXJhY3RpdmUoJmRldl9wcml2LT5ndC5ycHMsIHRydWUpOwo+ICAJCWlu dGVsX3N0YXRlLT5ycHNfaW50ZXJhY3RpdmUgPSB0cnVlOwo+ICAJfQo+ICAKPiBAQCAtMTUwMDEs NyArMTUwMDMsNyBAQCBpbnRlbF9jbGVhbnVwX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFu ZS0+ZGV2KTsKPiAgCj4gIAlpZiAoaW50ZWxfc3RhdGUtPnJwc19pbnRlcmFjdGl2ZSkgewo+IC0J CWludGVsX3Jwc19tYXJrX2ludGVyYWN0aXZlKGRldl9wcml2LCBmYWxzZSk7Cj4gKwkJaW50ZWxf cnBzX21hcmtfaW50ZXJhY3RpdmUoJmRldl9wcml2LT5ndC5ycHMsIGZhbHNlKTsKPiAgCQlpbnRl bF9zdGF0ZS0+cnBzX2ludGVyYWN0aXZlID0gZmFsc2U7Cj4gIAl9Cj4gIAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3QuYwo+IGluZGV4IDFjNGI2Yzk2NDJhZC4uNzUxODg1MmNiNzhhIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCj4gQEAgLTksNiArOSw3IEBACj4gICNpbmNs dWRlICJpbnRlbF9ndF9yZXF1ZXN0cy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfbW9jcy5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfcmM2LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ycHMuaCIKPiAgI2luY2x1 ZGUgImludGVsX3VuY29yZS5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcG0uaCIKPiAgCj4gQEAgLTMy MSw4ICszMjIsNyBAQCB2b2lkIGludGVsX2d0X2NoaXBzZXRfZmx1c2goc3RydWN0IGludGVsX2d0 ICpndCkKPiAgCj4gIHZvaWQgaW50ZWxfZ3RfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBpbnRlbF9n dCAqZ3QpCj4gIHsKPiAtCWlmIChJU19HRU4oZ3QtPmk5MTUsIDUpKQo+IC0JCWludGVsX2dwdV9p cHNfaW5pdChndC0+aTkxNSk7Cj4gKwlpbnRlbF9ycHNfZHJpdmVyX3JlZ2lzdGVyKCZndC0+cnBz KTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBpbnRlbF9ndF9pbml0X3NjcmF0Y2goc3RydWN0IGlu dGVsX2d0ICpndCwgdW5zaWduZWQgaW50IHNpemUpCj4gQEAgLTM4NSw3ICszODUsNyBAQCB2b2lk IGludGVsX2d0X2RyaXZlcl9yZW1vdmUoc3RydWN0IGludGVsX2d0ICpndCkKPiAgCj4gIHZvaWQg aW50ZWxfZ3RfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVsX2d0ICpndCkKPiAgewo+IC0J aW50ZWxfZ3B1X2lwc190ZWFyZG93bigpOwo+ICsJaW50ZWxfcnBzX2RyaXZlcl91bnJlZ2lzdGVy KCZndC0+cnBzKTsKPiAgfQo+ICAKPiAgdm9pZCBpbnRlbF9ndF9kcml2ZXJfcmVsZWFzZShzdHJ1 Y3QgaW50ZWxfZ3QgKmd0KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jCj4g aW5kZXggMzRhNGZiNjI0YmY3Li45NzNlZTdlZGVkNjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfaXJxLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndF9pcnEuYwo+IEBAIC0xMSw2ICsxMSw3IEBACj4gICNpbmNsdWRlICJpbnRl bF9ndC5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfZ3RfaXJxLmgiCj4gICNpbmNsdWRlICJpbnRlbF91 bmNvcmUuaCIKPiArI2luY2x1ZGUgImludGVsX3Jwcy5oIgo+ICAKPiAgc3RhdGljIHZvaWQgZ3Vj X2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTE2IGlpcikKPiAgewo+IEBAIC03 Nyw3ICs3OCw3IEBAIGdlbjExX290aGVyX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3Qs IGNvbnN0IHU4IGluc3RhbmNlLAo+ICAJCXJldHVybiBndWNfaXJxX2hhbmRsZXIoJmd0LT51Yy5n dWMsIGlpcik7Cj4gIAo+ICAJaWYgKGluc3RhbmNlID09IE9USEVSX0dUUE1fSU5TVEFOQ0UpCj4g LQkJcmV0dXJuIGdlbjExX3Jwc19pcnFfaGFuZGxlcihndCwgaWlyKTsKPiArCQlyZXR1cm4gZ2Vu MTFfcnBzX2lycV9oYW5kbGVyKCZndC0+cnBzLCBpaXIpOwo+ICAKPiAgCVdBUk5fT05DRSgxLCAi dW5oYW5kbGVkIG90aGVyIGludGVycnVwdCBpbnN0YW5jZT0weCV4LCBpaXI9MHgleFxuIiwKPiAg CQkgIGluc3RhbmNlLCBpaXIpOwo+IEBAIC0zMzYsNyArMzM3LDcgQEAgdm9pZCBnZW44X2d0X2ly cV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBtYXN0ZXJfY3RsLCB1MzIgZ3RfaWly WzRdKQo+ICAJfQo+ICAKPiAgCWlmIChtYXN0ZXJfY3RsICYgKEdFTjhfR1RfUE1fSVJRIHwgR0VO OF9HVF9HVUNfSVJRKSkgewo+IC0JCWdlbjZfcnBzX2lycV9oYW5kbGVyKGd0LT5pOTE1LCBndF9p aXJbMl0pOwo+ICsJCWdlbjZfcnBzX2lycV9oYW5kbGVyKCZndC0+cnBzLCBndF9paXJbMl0pOwo+ ICAJCWd1Y19pcnFfaGFuZGxlcigmZ3QtPnVjLmd1YywgZ3RfaWlyWzJdID4+IDE2KTsKPiAgCX0K PiAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYwo+IGluZGV4IDA2ZTczZDU2 Y2ZjZi4uMzJjYTg3MjY1MjIyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2d0X3BtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9w bS5jCj4gQEAgLTEyLDggKzEyLDEwIEBACj4gICNpbmNsdWRlICJpbnRlbF9ndC5oIgo+ICAjaW5j bHVkZSAiaW50ZWxfZ3RfcG0uaCIKPiAgI2luY2x1ZGUgImludGVsX2d0X3JlcXVlc3RzLmgiCj4g KyNpbmNsdWRlICJpbnRlbF9sbGMuaCIKPiAgI2luY2x1ZGUgImludGVsX3BtLmgiCj4gICNpbmNs dWRlICJpbnRlbF9yYzYuaCIKPiArI2luY2x1ZGUgImludGVsX3Jwcy5oIgo+ICAjaW5jbHVkZSAi aW50ZWxfd2FrZXJlZi5oIgo+ICAKPiAgc3RhdGljIGludCBfX2d0X3VucGFyayhzdHJ1Y3QgaW50 ZWxfd2FrZXJlZiAqd2YpCj4gQEAgLTM5LDEyICs0MSw4IEBAIHN0YXRpYyBpbnQgX19ndF91bnBh cmsoc3RydWN0IGludGVsX3dha2VyZWYgKndmKQo+ICAJZ3QtPmF3YWtlID0gaW50ZWxfZGlzcGxh eV9wb3dlcl9nZXQoaTkxNSwgUE9XRVJfRE9NQUlOX0dUX0lSUSk7Cj4gIAlHRU1fQlVHX09OKCFn dC0+YXdha2UpOwo+ICAKPiAtCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUoaTkxNSk7Cj4gLQo+ IC0JaTkxNV91cGRhdGVfZ2Z4X3ZhbChpOTE1KTsKPiAtCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0g NikKPiAtCQlnZW42X3Jwc19idXN5KGk5MTUpOwo+IC0KPiArCWludGVsX3Jwc191bnBhcmsoJmd0 LT5ycHMpOwo+ICsJaW50ZWxfbGxjX2VuYWJsZSgmZ3QtPmxsYyk7Cj4gIAlpOTE1X3BtdV9ndF91 bnBhcmtlZChpOTE1KTsKPiAgCj4gIAlpbnRlbF9ndF9xdWV1ZV9oYW5nY2hlY2soZ3QpOwo+IEBA IC02NSw4ICs2Myw4IEBAIHN0YXRpYyBpbnQgX19ndF9wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVm ICp3ZikKPiAgCj4gIAlpOTE1X3ZtYV9wYXJrZWQoZ3QpOwo+ICAJaTkxNV9wbXVfZ3RfcGFya2Vk KGk5MTUpOwo+IC0JaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQo+IC0JCWdlbjZfcnBzX2lkbGUo aTkxNSk7Cj4gKwlpbnRlbF9sbGNfZGlzYWJsZSgmZ3QtPmxsYyk7Cj4gKwlpbnRlbF9ycHNfcGFy aygmZ3QtPnJwcyk7Cj4gIAo+ICAJLyogRXZlcnl0aGluZyBzd2l0Y2hlZCBvZmYsIGZsdXNoIGFu eSByZXNpZHVhbCBpbnRlcnJ1cHQganVzdCBpbiBjYXNlICovCj4gIAlpbnRlbF9zeW5jaHJvbml6 ZV9pcnEoaTkxNSk7Cj4gQEAgLTk4LDYgKzk2LDcgQEAgdm9pZCBpbnRlbF9ndF9wbV9pbml0KHN0 cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAkgKiB1c2VyLgo+ICAJICovCj4gIAlpbnRlbF9yYzZfaW5p dCgmZ3QtPnJjNik7Cj4gKwlpbnRlbF9ycHNfaW5pdCgmZ3QtPnJwcyk7Cj4gIH0KPiAgCj4gIHN0 YXRpYyBib29sIHJlc2V0X2VuZ2luZXMoc3RydWN0IGludGVsX2d0ICpndCkKPiBAQCAtMTQxLDEw ICsxNDAsMzkgQEAgdm9pZCBpbnRlbF9ndF9zYW5pdGl6ZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBi b29sIGZvcmNlKQo+ICAJCQllbmdpbmUtPnJlc2V0LmZpbmlzaChlbmdpbmUpOwo+ICB9Cj4gIAo+ ICt2b2lkIGludGVsX2d0X3BtX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICt7Cj4gKwlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBp ZDsKPiArCj4gKwkvKiBQb3dlcnNhdmluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0IHdoZW4g aW5zaWRlIGEgVk0gKi8KPiArCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShndC0+aTkxNSkpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWlmIChpc19tb2NrX2d0KGd0KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ aW50ZWxfZ3RfcG1fZ2V0KGd0KTsKPiArCWludGVsX3Jwc19lbmFibGUoJmd0LT5ycHMpOwo+ICsJ aW50ZWxfbGxjX2VuYWJsZSgmZ3QtPmxsYyk7Cj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2lu ZSwgZ3QtPmk5MTUsIGlkKSB7Cj4gKwkJaW50ZWxfZW5naW5lX3BtX2dldChlbmdpbmUpOwo+ICsJ CWVuZ2luZS0+c2VyaWFsKys7IC8qIGZvcmNlIGtlcm5lbCBjb250ZXh0IHJlbG9hZCAqLwo+ICsJ CWludGVsX2VuZ2luZV9wbV9wdXQoZW5naW5lKTsKPiArCX0KPiArCj4gKwlpbnRlbF9ndF9wbV9w dXQoZ3QpOwo+ICt9Cj4gKwo+ICB2b2lkIGludGVsX2d0X3BtX2Rpc2FibGUoc3RydWN0IGludGVs X2d0ICpndCkKPiAgewo+IC0JaWYgKCFpc19tb2NrX2d0KGd0KSkKPiAtCQlpbnRlbF9zYW5pdGl6 ZV9ndF9wb3dlcnNhdmUoZ3QtPmk5MTUpOwo+ICsJaWYgKGlzX21vY2tfZ3QoZ3QpKQo+ICsJCXJl dHVybjsKPiArCj4gKwlpbnRlbF9yYzZfZGlzYWJsZSgmZ3QtPnJjNik7Cj4gKwlpbnRlbF9sbGNf ZGlzYWJsZSgmZ3QtPmxsYyk7Cj4gKwlpbnRlbF9ycHNfZGlzYWJsZSgmZ3QtPnJwcyk7Cj4gIH0K PiAgCj4gIHZvaWQgaW50ZWxfZ3RfcG1fZmluaShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+IEBAIC0x NjUsNiArMTkzLDcgQEAgaW50IGludGVsX2d0X3Jlc3VtZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ ICAJICogYWxsb3dpbmcgdXMgdG8gZml4dXAgdGhlIHVzZXIgY29udGV4dHMgb24gdGhlaXIgZmly c3QgcGluLgo+ICAJICovCj4gIAlpbnRlbF9ndF9wbV9nZXQoZ3QpOwo+ICsKPiAgCWludGVsX3Vu Y29yZV9mb3JjZXdha2VfZ2V0KGd0LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ICAJaW50ZWxf cmM2X3Nhbml0aXplKCZndC0+cmM2KTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2d0X3BtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9n dF9wbS5oCj4gaW5kZXggMGVkODdkYTRiYjY4Li5kZjUwZjg1Mzc0OGQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmgKPiBAQCAtNDAsNiArNDAsNyBAQCBzdGF0aWMgaW5s aW5lIGludCBpbnRlbF9ndF9wbV93YWl0X2Zvcl9pZGxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4g IHZvaWQgaW50ZWxfZ3RfcG1faW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKPiAgdm9p ZCBpbnRlbF9ndF9wbV9pbml0KHN0cnVjdCBpbnRlbF9ndCAqZ3QpOwo+ICB2b2lkIGludGVsX2d0 X3BtX2Rpc2FibGUoc3RydWN0IGludGVsX2d0ICpndCk7Cj4gK3ZvaWQgaW50ZWxfZ3RfcG1fZW5h YmxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpOwo+ICB2b2lkIGludGVsX2d0X3BtX2Zpbmkoc3RydWN0 IGludGVsX2d0ICpndCk7Cj4gIAo+ICB2b2lkIGludGVsX2d0X3Nhbml0aXplKHN0cnVjdCBpbnRl bF9ndCAqZ3QsIGJvb2wgZm9yY2UpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3Rf dHlwZXMuaAo+IGluZGV4IDk4MDk3M2U2NmU3Zi4uZTRiZDIzZWI4MjkwIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3R5cGVzLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oCj4gQEAgLTIwLDYgKzIwLDcgQEAKPiAg I2luY2x1ZGUgImludGVsX2xsY190eXBlcy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcmVzZXRfdHlw ZXMuaCIKPiAgI2luY2x1ZGUgImludGVsX3JjNl90eXBlcy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxf cnBzX3R5cGVzLmgiCj4gICNpbmNsdWRlICJpbnRlbF93YWtlcmVmLmgiCj4gIAo+ICBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZTsKPiBAQCAtODIsNiArODMsNyBAQCBzdHJ1Y3QgaW50ZWxfZ3Qgewo+ ICAKPiAgCXN0cnVjdCBpbnRlbF9sbGMgbGxjOwo+ICAJc3RydWN0IGludGVsX3JjNiByYzY7Cj4g KwlzdHJ1Y3QgaW50ZWxfcnBzIHJwczsKPiAgCj4gIAlrdGltZV90IGxhc3RfaW5pdF90aW1lOwo+ ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9sbGMuYwo+IGluZGV4IDM1MDkzZWI1ZjI0ZS4u Y2ViNzg1Yjc1YzI1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2xsYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbGxjLmMKPiBAQCAt NDgsNyArNDgsNyBAQCBzdGF0aWMgYm9vbCBnZXRfaWFfY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9s bGMgKmxsYywKPiAgCQkJICAgICBzdHJ1Y3QgaWFfY29uc3RhbnRzICpjb25zdHMpCj4gIHsKPiAg CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gbGxjX3RvX2d0KGxsYyktPmk5MTU7Cj4g LQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmaTkxNS0+Z3RfcG0ucnBzOwo+ICsJc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmxsY190b19ndChsbGMpLT5ycHM7Cj4gIAo+ICAJaWYgKHJwcy0+bWF4 X2ZyZXEgPD0gcnBzLT5taW5fZnJlcSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jwcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcnBzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uMzBmNTZjNzg2NDY4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX3Jwcy5jCj4gQEAgLTAsMCArMSwxODcyIEBACj4gKy8qCj4gKyAqIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArICoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkg SW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAr I2luY2x1ZGUgImludGVsX2d0LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ndF9pcnEuaCIKPiArI2lu Y2x1ZGUgImludGVsX2d0X3BtX2lycS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfcnBzLmgiCj4gKyNp bmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgo+ICsjaW5jbHVkZSAiLi4vLi4vLi4vcGxhdGZvcm0v eDg2L2ludGVsX2lwcy5oIgo+ICsKPiArLyoKPiArICogTG9jayBwcm90ZWN0aW5nIElQUyByZWxh dGVkIGRhdGEgc3RydWN0dXJlcwo+ICsgKi8KPiArc3RhdGljIERFRklORV9TUElOTE9DSyhtY2hk ZXZfbG9jayk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGludGVsX2d0ICpycHNfdG9fZ3Qoc3RydWN0 IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHJwcywgc3RydWN0 IGludGVsX2d0LCBycHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKnJwc190b19pOTE1KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJcmV0dXJuIHJw c190b19ndChycHMpLT5pOTE1Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGludGVsX3VuY29y ZSAqcnBzX3RvX3VuY29yZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCXJldHVybiBy cHNfdG9fZ3QocnBzKS0+dW5jb3JlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIHJwc19wbV9zYW5p dGl6ZV9tYXNrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIG1hc2spCj4gK3sKPiArCXJldHVy biBtYXNrICYgfnJwcy0+cG1faW50cm1za19tYno7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgcnBz X3BtX21hc2soc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4gK3sKPiArCXUzMiBtYXNr ID0gMDsKPiArCj4gKwkvKiBXZSB1c2UgVVBfRUlfRVhQSVJFRCBpbnRlcnJ1cHRzIGZvciBib3Ro IHVwL2Rvd24gaW4gbWFudWFsIG1vZGUgKi8KPiArCWlmICh2YWwgPiBycHMtPm1pbl9mcmVxX3Nv ZnRsaW1pdCkKPiArCQltYXNrIHw9IChHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQgfAo+ICsJCQkg R0VONl9QTV9SUF9ET1dOX1RIUkVTSE9MRCB8Cj4gKwkJCSBHRU42X1BNX1JQX0RPV05fVElNRU9V VCk7Cj4gKwo+ICsJaWYgKHZhbCA8IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQo+ICsJCW1hc2sg fD0gR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEIHwgR0VONl9QTV9SUF9VUF9USFJFU0hPTEQ7Cj4g Kwo+ICsJbWFzayAmPSBycHMtPnBtX2V2ZW50czsKPiArCj4gKwlyZXR1cm4gcnBzX3BtX3Nhbml0 aXplX21hc2socnBzLCB+bWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJwc19yZXNldF9l aShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCW1lbXNldCgmcnBzLT5laSwgMCwgc2l6 ZW9mKHJwcy0+ZWkpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcnBzX2VuYWJsZV9pbnRlcnJ1 cHRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJc3RydWN0IGludGVsX2d0ICpndCA9 IHJwc190b19ndChycHMpOwo+ICsKPiArCXJwc19yZXNldF9laShycHMpOwo+ICsKPiArCWlmIChJ U19WQUxMRVlWSUVXKGd0LT5pOTE1KSkKPiArCQkvKiBXYUdzdlJDMFJlc2lkZW5jeU1ldGhvZDp2 bHYgKi8KPiArCQlycHMtPnBtX2V2ZW50cyA9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKPiAr CWVsc2UKPiArCQlycHMtPnBtX2V2ZW50cyA9IChHRU42X1BNX1JQX1VQX1RIUkVTSE9MRCB8Cj4g KwkJCQkgIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQgfAo+ICsJCQkJICBHRU42X1BNX1JQX0RP V05fVElNRU9VVCk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiArCWdl bjZfZ3RfcG1fZW5hYmxlX2lycShndCwgcnBzLT5wbV9ldmVudHMpOwo+ICsJc3Bpbl91bmxvY2tf aXJxKCZndC0+aXJxX2xvY2spOwo+ICsKPiArCWludGVsX3VuY29yZV93cml0ZShndC0+dW5jb3Jl LCBHRU42X1BNSU5UUk1TSywKPiArCQkJICAgcnBzX3BtX21hc2socnBzLCBycHMtPmN1cl9mcmVx KSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjZfcnBzX3Jlc2V0X2ludGVycnVwdHMoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlnZW42X2d0X3BtX3Jlc2V0X2lpcihycHNfdG9f Z3QocnBzKSwgR0VONl9QTV9SUFNfRVZFTlRTKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ2Vu MTFfcnBzX3Jlc2V0X2ludGVycnVwdHMoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwl3 aGlsZSAoZ2VuMTFfZ3RfcmVzZXRfb25lX2lpcihycHNfdG9fZ3QocnBzKSwgMCwgR0VOMTFfR1RQ TSkpCj4gKwkJOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBycHNfcmVzZXRfaW50ZXJydXB0cyhz dHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNf dG9fZ3QocnBzKTsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZndC0+aXJxX2xvY2spOwo+ICsJaWYg KElOVEVMX0dFTihndC0+aTkxNSkgPj0gMTEpCj4gKwkJZ2VuMTFfcnBzX3Jlc2V0X2ludGVycnVw dHMocnBzKTsKPiArCWVsc2UKPiArCQlnZW42X3Jwc19yZXNldF9pbnRlcnJ1cHRzKHJwcyk7Cj4g Kwo+ICsJcnBzLT5wbV9paXIgPSAwOwo+ICsJc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2sp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBycHNfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBp bnRlbF9ycHMgKnJwcykKPiArewo+ICsJc3RydWN0IGludGVsX2d0ICpndCA9IHJwc190b19ndChy cHMpOwo+ICsKPiArCXJwcy0+cG1fZXZlbnRzID0gMDsKPiArCj4gKwlpbnRlbF91bmNvcmVfd3Jp dGUoZ3QtPnVuY29yZSwgR0VONl9QTUlOVFJNU0ssCj4gKwkJCSAgIHJwc19wbV9zYW5pdGl6ZV9t YXNrKHJwcywgfjB1KSk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiAr CWdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoZ3QsIEdFTjZfUE1fUlBTX0VWRU5UUyk7Cj4gKwlzcGlu X3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gKwo+ICsJaW50ZWxfc3luY2hyb25pemVfaXJx KGd0LT5pOTE1KTsKPiArCj4gKwkvKgo+ICsJICogTm93IHRoYXQgd2Ugd2lsbCBub3QgYmUgZ2Vu ZXJhdGluZyBhbnkgbW9yZSB3b3JrLCBmbHVzaCBhbnkKPiArCSAqIG91dHN0YW5kaW5nIHRhc2tz LiBBcyB3ZSBhcmUgY2FsbGVkIG9uIHRoZSBSUFMgaWRsZSBwYXRoLAo+ICsJICogd2Ugd2lsbCBy ZXNldCB0aGUgR1BVIHRvIG1pbmltdW0gZnJlcXVlbmNpZXMsIHNvIHRoZSBjdXJyZW50Cj4gKwkg KiBzdGF0ZSBvZiB0aGUgd29ya2VyIGNhbiBiZSBkaXNjYXJkZWQuCj4gKwkgKi8KPiArCWNhbmNl bF93b3JrX3N5bmMoJnJwcy0+d29yayk7Cj4gKwo+ICsJcnBzX3Jlc2V0X2ludGVycnVwdHMocnBz KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjcGFyYW1zIHsKPiArCXUxNiBpOwo+ ICsJdTE2IHQ7Cj4gKwl1MTYgbTsKPiArCXUxNiBjOwo+ICt9IGNwYXJhbXNbXSA9IHsKPiArCXsg MSwgMTMzMywgMzAxLCAyODY2NCB9LAo+ICsJeyAxLCAxMDY2LCAyOTQsIDI0NDYwIH0sCj4gKwl7 IDEsIDgwMCwgMjk0LCAyNTE5MiB9LAo+ICsJeyAwLCAxMzMzLCAyNzYsIDI3NjA1IH0sCj4gKwl7 IDAsIDEwNjYsIDI3NiwgMjc2MDUgfSwKPiArCXsgMCwgODAwLCAyMzEsIDIzNzg0IH0sCj4gK307 Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW41X3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK PiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMp Owo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ ICsJdTggZm1heCwgZm1pbiwgZnN0YXJ0Owo+ICsJdTMyIHJndm1vZGVjdGw7Cj4gKwlpbnQgY19t LCBpOwo+ICsKPiArCWlmIChpOTE1LT5mc2JfZnJlcSA8PSAzMjAwKQo+ICsJCWNfbSA9IDA7Cj4g KwllbHNlIGlmIChpOTE1LT5mc2JfZnJlcSA8PSA0ODAwKQo+ICsJCWNfbSA9IDE7Cj4gKwllbHNl Cj4gKwkJY19tID0gMjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcGFyYW1z KTsgaSsrKSB7Cj4gKwkJaWYgKGNwYXJhbXNbaV0uaSA9PSBjX20gJiYgY3BhcmFtc1tpXS50ID09 IGk5MTUtPm1lbV9mcmVxKSB7Cj4gKwkJCXJwcy0+aXBzLm0gPSBjcGFyYW1zW2ldLm07Cj4gKwkJ CXJwcy0+aXBzLmMgPSBjcGFyYW1zW2ldLmM7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlyZ3Ztb2RlY3RsID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1NT0RFQ1RMKTsK PiArCj4gKwkvKiBTZXQgdXAgbWluLCBtYXgsIGFuZCBjdXIgZm9yIGludGVycnVwdCBoYW5kbGlu ZyAqLwo+ICsJZm1heCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GTUFYX01BU0spID4+IE1FTU1P REVfRk1BWF9TSElGVDsKPiArCWZtaW4gPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1JTl9NQVNL KTsKPiArCWZzdGFydCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GU1RBUlRfTUFTSykgPj4KPiAr CQlNRU1NT0RFX0ZTVEFSVF9TSElGVDsKPiArCURSTV9ERUJVR19EUklWRVIoImZtYXg6ICVkLCBm bWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKPiArCQkJIGZtYXgsIGZtaW4sIGZzdGFydCk7Cj4gKwo+ ICsJcnBzLT5taW5fZnJlcSA9IC1mc3RhcnQ7Cj4gKwlycHMtPm1heF9mcmVxID0gLWZtaW47Cj4g Kwo+ICsJcnBzLT5pZGxlX2ZyZXEgPSBycHMtPm1pbl9mcmVxOwo+ICsJcnBzLT5jdXJfZnJlcSA9 IHJwcy0+aWRsZV9mcmVxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZwo+ICtfX2lw c19jaGlwc2V0X3ZhbChzdHJ1Y3QgaW50ZWxfaXBzICppcHMpCj4gK3sKPiArCXN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSA9Cj4gKwkJcnBzX3RvX3VuY29yZShjb250YWluZXJfb2YoaXBzLCBz dHJ1Y3QgaW50ZWxfcnBzLCBpcHMpKTsKPiArCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllc190 b19tc2VjcyhqaWZmaWVzKSwgZHQ7Cj4gKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKPiArCXU2NCB0 b3RhbCwgZGVsdGE7Cj4gKwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbWNoZGV2X2xvY2spOwo+ ICsKPiArCS8qCj4gKwkgKiBQcmV2ZW50IGRpdmlzaW9uLWJ5LXplcm8gaWYgd2UgYXJlIGFza2lu ZyB0b28gZmFzdC4KPiArCSAqIEFsc28sIHdlIGRvbid0IGdldCBpbnRlcmVzdGluZyByZXN1bHRz IGlmIHdlIGFyZSBwb2xsaW5nCj4gKwkgKiBmYXN0ZXIgdGhhbiBvbmNlIGluIDEwbXMsIHNvIGp1 c3QgcmV0dXJuIHRoZSBzYXZlZCB2YWx1ZQo+ICsJICogaW4gc3VjaCBjYXNlcy4KPiArCSAqLwo+ ICsJZHQgPSBub3cgLSBpcHMtPmxhc3RfdGltZTE7Cj4gKwlpZiAoZHQgPD0gMTApCj4gKwkJcmV0 dXJuIGlwcy0+Y2hpcHNldF9wb3dlcjsKPiArCj4gKwkvKiBGSVhNRTogaGFuZGxlIHBlci1jb3Vu dGVyIG92ZXJmbG93ICovCj4gKwl0b3RhbCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgRE1J RUMpOwo+ICsJdG90YWwgKz0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBERFJFQyk7Cj4gKwl0 b3RhbCArPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIENTSUVDKTsKPiArCj4gKwlkZWx0YSA9 IHRvdGFsIC0gaXBzLT5sYXN0X2NvdW50MTsKPiArCj4gKwlyZXN1bHQgPSBkaXZfdTY0KGRpdl91 NjQoaXBzLT5tICogZGVsdGEsIGR0KSArIGlwcy0+YywgMTApOwo+ICsKPiArCWlwcy0+bGFzdF9j b3VudDEgPSB0b3RhbDsKPiArCWlwcy0+bGFzdF90aW1lMSA9IG5vdzsKPiArCj4gKwlpcHMtPmNo aXBzZXRfcG93ZXIgPSByZXN1bHQ7Cj4gKwo+ICsJcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsKPiAr c3RhdGljIHVuc2lnbmVkIGxvbmcgaXBzX21jaF92YWwoc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgbSwgeCwgYjsKPiArCXUzMiB0c2ZzOwo+ICsKPiAr CXRzZnMgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFRTRlMpOwo+ICsJeCA9IGludGVsX3Vu Y29yZV9yZWFkOCh1bmNvcmUsIFRSMSk7Cj4gKwo+ICsJYiA9IHRzZnMgJiBUU0ZTX0lOVFJfTUFT SzsKPiArCW0gPSAodHNmcyAmIFRTRlNfU0xPUEVfTUFTSykgPj4gVFNGU19TTE9QRV9TSElGVDsK PiArCj4gKwlyZXR1cm4gbSAqIHggLyAxMjcgLSBiOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9w eHZpZF90b192ZCh1OCBweHZpZCkKPiArewo+ICsJaWYgKHB4dmlkID09IDApCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJaWYgKHB4dmlkID49IDggJiYgcHh2aWQgPCAzMSkKPiArCQlweHZpZCA9IDMx Owo+ICsKPiArCXJldHVybiAocHh2aWQgKyAyKSAqIDEyNTsKPiArfQo+ICsKPiArc3RhdGljIHUz MiBwdmlkX3RvX2V4dHZpZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggcHh2aWQp Cj4gK3sKPiArCWNvbnN0IGludCB2ZCA9IF9weHZpZF90b192ZChweHZpZCk7Cj4gKwo+ICsJaWYg KElOVEVMX0lORk8oaTkxNSktPmlzX21vYmlsZSkKPiArCQlyZXR1cm4gbWF4KHZkIC0gMTEyNSwg MCk7Cj4gKwo+ICsJcmV0dXJuIHZkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2dlbjVfaXBz X3VwZGF0ZShzdHJ1Y3QgaW50ZWxfaXBzICppcHMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91bmNv cmUgKnVuY29yZSA9Cj4gKwkJcnBzX3RvX3VuY29yZShjb250YWluZXJfb2YoaXBzLCBzdHJ1Y3Qg aW50ZWxfcnBzLCBpcHMpKTsKPiArCXU2NCBub3csIGRlbHRhLCBkdDsKPiArCXUzMiBjb3VudDsK PiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtY2hkZXZfbG9jayk7Cj4gKwo+ICsJbm93ID0g a3RpbWVfZ2V0X3Jhd19ucygpOwo+ICsJZHQgPSBub3cgLSBpcHMtPmxhc3RfdGltZTI7Cj4gKwlk b19kaXYoZHQsIE5TRUNfUEVSX01TRUMpOwo+ICsKPiArCS8qIERvbid0IGRpdmlkZSBieSAwICov Cj4gKwlpZiAoZHQgPD0gMTApCj4gKwkJcmV0dXJuOwo+ICsKPiArCWNvdW50ID0gaW50ZWxfdW5j b3JlX3JlYWQodW5jb3JlLCBHRlhFQyk7Cj4gKwlkZWx0YSA9IGNvdW50IC0gaXBzLT5sYXN0X2Nv dW50MjsKPiArCj4gKwlpcHMtPmxhc3RfY291bnQyID0gY291bnQ7Cj4gKwlpcHMtPmxhc3RfdGlt ZTIgPSBub3c7Cj4gKwo+ICsJLyogTW9yZSBtYWdpYyBjb25zdGFudHMuLi4gKi8KPiArCWlwcy0+ Z2Z4X3Bvd2VyID0gZGl2X3U2NChkZWx0YSAqIDExODEsIGR0ICogMTApOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBnZW41X3Jwc191cGRhdGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4g KwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gKwlfX2dlbjVfaXBzX3VwZGF0ZSgmcnBz LT5pcHMpOwo+ICsJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gK30KPiArCj4gK3N0 YXRpYyBib29sIGdlbjVfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKPiAr ewo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ ICsJdTE2IHJndnN3Y3RsOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRldl9sb2Nr KTsKPiArCj4gKwlyZ3Zzd2N0bCA9IGludGVsX3VuY29yZV9yZWFkMTYodW5jb3JlLCBNRU1TV0NU TCk7Cj4gKwlpZiAocmd2c3djdGwgJiBNRU1DVExfQ01EX1NUUykgewo+ICsJCURSTV9ERUJVRygi Z3B1IGJ1c3ksIFJDUyBjaGFuZ2UgcmVqZWN0ZWRcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsgLyog c3RpbGwgYnVzeSB3aXRoIGFub3RoZXIgY29tbWFuZCAqLwo+ICsJfQo+ICsKPiArCXZhbCA9IC12 YWw7Cj4gKwo+ICsJcmd2c3djdGwgPQo+ICsJCShNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExf Q01EX1NISUZUKSB8Cj4gKwkJKHZhbCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfAo+ICsJCU1FTUNU TF9TRkNBVk07Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUxNih1bmNvcmUsIE1FTVNXQ1RMLCByZ3Zz d2N0bCk7Cj4gKwlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkMTYodW5jb3JlLCBNRU1TV0NUTCk7 Cj4gKwo+ICsJcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7Cj4gKwlpbnRlbF91bmNvcmVfd3Jp dGUxNih1bmNvcmUsIE1FTVNXQ1RMLCByZ3Zzd2N0bCk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4g K30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludGVsX3B4ZnJlcSh1MzIgdmlkZnJlcSkK PiArewo+ICsJaW50IGRpdiA9ICh2aWRmcmVxICYgMHgzZjAwMDApID4+IDE2Owo+ICsJaW50IHBv c3QgPSAodmlkZnJlcSAmIDB4MzAwMCkgPj4gMTI7Cj4gKwlpbnQgcHJlID0gKHZpZGZyZXEgJiAw eDcpOwo+ICsKPiArCWlmICghcHJlKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiBkaXYg KiAxMzMzMzMgLyAocHJlIDw8IHBvc3QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgaW50 IGluaXRfZW1vbihzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUpCj4gK3sKPiArCXU4IHB4d1sx Nl07Cj4gKwlpbnQgaTsKPiArCj4gKwkvKiBEaXNhYmxlIHRvIHByb2dyYW0gKi8KPiArCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIEVDUiwgMCk7Cj4gKwlpbnRlbF91bmNvcmVfcG9zdGluZ19y ZWFkKHVuY29yZSwgRUNSKTsKPiArCj4gKwkvKiBQcm9ncmFtIGVuZXJneSB3ZWlnaHRzIGZvciB2 YXJpb3VzIGV2ZW50cyAqLwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgU0RFVywgMHgx NTA0MGQwMCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBDU0lFVzAsIDB4MDA3ZjAw MDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgQ1NJRVcxLCAweDFlMjIwMDA0KTsK PiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIENTSUVXMiwgMHgwNDAwMDAwNCk7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKPiArCQlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBQRVcoaSksIDApOwo+ICsJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKPiArCQlpbnRlbF91bmNv cmVfd3JpdGUodW5jb3JlLCBERVcoaSksIDApOwo+ICsKPiArCS8qIFByb2dyYW0gUC1zdGF0ZSB3 ZWlnaHRzIHRvIGFjY291bnQgZm9yIGZyZXF1ZW5jeSBwb3dlciBhZGp1c3RtZW50ICovCj4gKwlm b3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewo+ICsJCXUzMiBweHZpZGZyZXEgPSBpbnRlbF91bmNv cmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoaSkpOwo+ICsJCXVuc2lnbmVkIGludCBmcmVxID0gaW50 ZWxfcHhmcmVxKHB4dmlkZnJlcSk7Cj4gKwkJdW5zaWduZWQgaW50IHZpZCA9Cj4gKwkJCShweHZp ZGZyZXEgJiBQWFZGUkVRX1BYX01BU0spID4+IFBYVkZSRVFfUFhfU0hJRlQ7Cj4gKwkJdW5zaWdu ZWQgaW50IHZhbDsKPiArCj4gKwkJdmFsID0gdmlkICogdmlkICogZnJlcSAvIDEwMDAgKiAyNTU7 Cj4gKwkJdmFsIC89IDEyNyAqIDEyNyAqIDkwMDsKPiArCj4gKwkJcHh3W2ldID0gdmFsOwo+ICsJ fQo+ICsJLyogUmVuZGVyIHN0YW5kYnkgc3RhdGVzIGdldCAwIHdlaWdodCAqLwo+ICsJcHh3WzE0 XSA9IDA7Cj4gKwlweHdbMTVdID0gMDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7 Cj4gKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUFhXKGkpLAo+ICsJCQkJICAgcHh3W2kg KiA0ICsgMF0gPDwgMjQgfAo+ICsJCQkJICAgcHh3W2kgKiA0ICsgMV0gPDwgMTYgfAo+ICsJCQkJ ICAgcHh3W2kgKiA0ICsgMl0gPDwgIDggfAo+ICsJCQkJICAgcHh3W2kgKiA0ICsgM10gPDwgIDAp Owo+ICsJfQo+ICsKPiArCS8qIEFkanVzdCBtYWdpYyByZWdzIHRvIG1hZ2ljIHZhbHVlcyAobW9y ZSBleHBlcmltZW50YWwgcmVzdWx0cykgKi8KPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUs IE9HVzAsIDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgT0dXMSwgMCk7Cj4gKwlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzAsIDB4MDAwMDdmMDApOwo+ICsJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwgRUcxLCAweDAwMDAwMDBlKTsKPiArCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIEVHMiwgMHgwMDBlMDAwMCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBFRzMsIDB4NjgwMDAzMDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgRUc0LCAw eDQyMDAwMDAwKTsKPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEVHNSwgMHgwMDE0MDAz MSk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBFRzYsIDApOwo+ICsJaW50ZWxfdW5j b3JlX3dyaXRlKHVuY29yZSwgRUc3LCAwKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsr KQo+ICsJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFBYV0woaSksIDApOwo+ICsKPiArCS8q IEVuYWJsZSBQTU9OICsgc2VsZWN0IGV2ZW50cyAqLwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwgRUNSLCAweDgwMDAwMDE5KTsKPiArCj4gKwlyZXR1cm4gaW50ZWxfdW5jb3JlX3JlYWQo dW5jb3JlLCBMQ0ZVU0UwMikgJiBMQ0ZVU0VfSElWX01BU0s7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGdlbjVfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCXN0cnVj dCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUocnBzKTsKPiArCXU4IGZzdGFy dCwgdnN0YXJ0Owo+ICsJdTMyIHJndm1vZGVjdGw7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmbWNo ZGV2X2xvY2spOwo+ICsKPiArCXJndm1vZGVjdGwgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUs IE1FTU1PREVDVEwpOwo+ICsKPiArCS8qIEVuYWJsZSB0ZW1wIHJlcG9ydGluZyAqLwo+ICsJaW50 ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBQTU1JU0MsCj4gKwkJCSAgICAgaW50ZWxfdW5jb3Jl X3JlYWQxNih1bmNvcmUsIFBNTUlTQykgfCBNQ1BQQ0VfRU4pOwo+ICsJaW50ZWxfdW5jb3JlX3dy aXRlMTYodW5jb3JlLCBUU0MxLAo+ICsJCQkgICAgIGludGVsX3VuY29yZV9yZWFkMTYodW5jb3Jl LCBUU0MxKSB8IFRTRSk7Cj4gKwo+ICsJLyogMTAwbXMgUkMgZXZhbHVhdGlvbiBpbnRlcnZhbHMg Ki8KPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDVVBFSSwgMTAwMDAwKTsKPiArCWlu dGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDRE5FSSwgMTAwMDAwKTsKPiArCj4gKwkvKiBTZXQg bWF4L21pbiB0aHJlc2hvbGRzIHRvIDkwbXMgYW5kIDgwbXMgcmVzcGVjdGl2ZWx5ICovCj4gKwlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBSQ0JNQVhBVkcsIDkwMDAwKTsKPiArCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIFJDQk1JTkFWRywgODAwMDApOwo+ICsKPiArCWludGVsX3VuY29y ZV93cml0ZSh1bmNvcmUsIE1FTUlIWVNULCAxKTsKPiArCj4gKwkvKiBTZXQgdXAgbWluLCBtYXgs IGFuZCBjdXIgZm9yIGludGVycnVwdCBoYW5kbGluZyAqLwo+ICsJZnN0YXJ0ID0gKHJndm1vZGVj dGwgJiBNRU1NT0RFX0ZTVEFSVF9NQVNLKSA+Pgo+ICsJCU1FTU1PREVfRlNUQVJUX1NISUZUOwo+ ICsKPiArCXZzdGFydCA9IChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBYVkZSRVEoZnN0YXJ0 KSkgJgo+ICsJCSAgUFhWRlJFUV9QWF9NQVNLKSA+PiBQWFZGUkVRX1BYX1NISUZUOwo+ICsKPiAr CWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCj4gKwkJCSAgIE1FTUlOVFJFTiwKPiArCQkJICAg TUVNSU5UX0NYX1NVUFJfRU4gfCBNRU1JTlRfRVZBTF9DSEdfRU4pOwo+ICsKPiArCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIFZJRFNUQVJULCB2c3RhcnQpOwo+ICsJaW50ZWxfdW5jb3JlX3Bv c3RpbmdfcmVhZCh1bmNvcmUsIFZJRFNUQVJUKTsKPiArCj4gKwlyZ3Ztb2RlY3RsIHw9IE1FTU1P REVfU1dNT0RFX0VOOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNTU9ERUNUTCwg cmd2bW9kZWN0bCk7Cj4gKwo+ICsJaWYgKHdhaXRfZm9yX2F0b21pYygoaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBNRU1TV0NUTCkgJgo+ICsJCQkgICAgIE1FTUNUTF9DTURfU1RTKSA9PSAwLCAx MCkpCj4gKwkJRFJNX0VSUk9SKCJzdHVjayB0cnlpbmcgdG8gY2hhbmdlIHBlcmYgbW9kZVxuIik7 Cj4gKwltZGVsYXkoMSk7Cj4gKwo+ICsJZ2VuNV9ycHNfc2V0KHJwcywgcnBzLT5jdXJfZnJlcSk7 Cj4gKwo+ICsJcnBzLT5pcHMubGFzdF9jb3VudDEgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUs IERNSUVDKTsKPiArCXJwcy0+aXBzLmxhc3RfY291bnQxICs9IGludGVsX3VuY29yZV9yZWFkKHVu Y29yZSwgRERSRUMpOwo+ICsJcnBzLT5pcHMubGFzdF9jb3VudDEgKz0gaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBDU0lFQyk7Cj4gKwlycHMtPmlwcy5sYXN0X3RpbWUxID0gamlmZmllc190b19t c2VjcyhqaWZmaWVzKTsKPiArCj4gKwlycHMtPmlwcy5sYXN0X2NvdW50MiA9IGludGVsX3VuY29y ZV9yZWFkKHVuY29yZSwgR0ZYRUMpOwo+ICsJcnBzLT5pcHMubGFzdF90aW1lMiA9IGt0aW1lX2dl dF9yYXdfbnMoKTsKPiArCj4gKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiArCj4g KwlycHMtPmlwcy5jb3JyID0gaW5pdF9lbW9uKHVuY29yZSk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjVfcnBzX2Rpc2FibGUoc3RydWN0IGludGVsX3Jw cyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5j b3JlKHJwcyk7Cj4gKwl1MTYgcmd2c3djdGw7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmbWNoZGV2 X2xvY2spOwo+ICsKPiArCXJndnN3Y3RsID0gaW50ZWxfdW5jb3JlX3JlYWQxNih1bmNvcmUsIE1F TVNXQ1RMKTsKPiArCj4gKwkvKiBBY2sgaW50ZXJydXB0cywgZGlzYWJsZSBFRkMgaW50ZXJydXB0 ICovCj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1JTlRSRU4sCj4gKwkJCSAgIGlu dGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNSU5UUkVOKSAmCj4gKwkJCSAgIH5NRU1JTlRfRVZB TF9DSEdfRU4pOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSU5UUlNUUywgTUVN SU5UX0VWQUxfQ0hHKTsKPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIERFSUVSLAo+ICsJ CQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERFSUVSKSAmIH5ERV9QQ1VfRVZFTlQpOwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgREVJSVIsIERFX1BDVV9FVkVOVCk7Cj4gKwlp bnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBERUlNUiwKPiArCQkJICAgaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBERUlNUikgfCBERV9QQ1VfRVZFTlQpOwo+ICsKPiArCS8qIEdvIGJhY2sgdG8g dGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSAqLwo+ICsJZ2VuNV9ycHNfc2V0KHJwcywgcnBzLT5pZGxl X2ZyZXEpOwo+ICsJbWRlbGF5KDEpOwo+ICsJcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7Cj4g KwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwo+ICsJbWRl bGF5KDEpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdTMyIHJwc19saW1pdHMoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4g K3sKPiArCXUzMiBsaW1pdHM7Cj4gKwo+ICsJLyoKPiArCSAqIE9ubHkgc2V0IHRoZSBkb3duIGxp bWl0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgbG93ZXN0IGxldmVsIHRvIGF2b2lkCj4gKwkgKiBn ZXR0aW5nIG1vcmUgaW50ZXJydXB0cywgb3RoZXJ3aXNlIGxlYXZlIHRoaXMgY2xlYXIuIFRoaXMg cHJldmVudHMgYQo+ICsJICogcmFjZSBpbiB0aGUgaHcgd2hlbiBjb21pbmcgb3V0IG9mIHJjNjog VGhlcmUncyBhIHRpbnkgd2luZG93IHdoZXJlCj4gKwkgKiB0aGUgaHcgcnVucyBhdCB0aGUgbWlu aW1hbCBjbG9jayBiZWZvcmUgc2VsZWN0aW5nIHRoZSBkZXNpcmVkCj4gKwkgKiBmcmVxdWVuY3ks IGlmIHRoZSBkb3duIHRocmVzaG9sZCBleHBpcmVzIGluIHRoYXQgd2luZG93IHdlIHdpbGwgbm90 Cj4gKwkgKiByZWNlaXZlIGEgZG93biBpbnRlcnJ1cHQuCj4gKwkgKi8KPiArCWlmIChJTlRFTF9H RU4ocnBzX3RvX2k5MTUocnBzKSkgPj0gOSkgewo+ICsJCWxpbWl0cyA9IHJwcy0+bWF4X2ZyZXFf c29mdGxpbWl0IDw8IDIzOwo+ICsJCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQp Cj4gKwkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNDsKPiArCX0gZWxz ZSB7Cj4gKwkJbGltaXRzID0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPDwgMjQ7Cj4gKwkJaWYg KHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPiArCQkJbGltaXRzIHw9IHJwcy0+bWlu X2ZyZXFfc29mdGxpbWl0IDw8IDE2Owo+ICsJfQo+ICsKPiArCXJldHVybiBsaW1pdHM7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHJwc19zZXRfcG93ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCBp bnQgbmV3X3Bvd2VyKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNf dG9fdW5jb3JlKHJwcyk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190 b19pOTE1KHJwcyk7Cj4gKwl1MzIgdGhyZXNob2xkX3VwID0gMCwgdGhyZXNob2xkX2Rvd24gPSAw OyAvKiBpbiAlICovCj4gKwl1MzIgZWlfdXAgPSAwLCBlaV9kb3duID0gMDsKPiArCj4gKwlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZycHMtPnBvd2VyLm11dGV4KTsKPiArCj4gKwlpZiAobmV3X3Bvd2Vy ID09IHJwcy0+cG93ZXIubW9kZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogTm90ZSB0aGUgdW5p dHMgaGVyZSBhcmUgbm90IGV4YWN0bHkgMXVzLCBidXQgMTI4MG5zLiAqLwo+ICsJc3dpdGNoIChu ZXdfcG93ZXIpIHsKPiArCWNhc2UgTE9XX1BPV0VSOgo+ICsJCS8qIFVwY2xvY2sgaWYgbW9yZSB0 aGFuIDk1JSBidXN5IG92ZXIgMTZtcyAqLwo+ICsJCWVpX3VwID0gMTYwMDA7Cj4gKwkJdGhyZXNo b2xkX3VwID0gOTU7Cj4gKwo+ICsJCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gODUlIGJ1c3kg b3ZlciAzMm1zICovCj4gKwkJZWlfZG93biA9IDMyMDAwOwo+ICsJCXRocmVzaG9sZF9kb3duID0g ODU7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBCRVRXRUVOOgo+ICsJCS8qIFVwY2xvY2sgaWYg bW9yZSB0aGFuIDkwJSBidXN5IG92ZXIgMTNtcyAqLwo+ICsJCWVpX3VwID0gMTMwMDA7Cj4gKwkJ dGhyZXNob2xkX3VwID0gOTA7Cj4gKwo+ICsJCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gNzUl IGJ1c3kgb3ZlciAzMm1zICovCj4gKwkJZWlfZG93biA9IDMyMDAwOwo+ICsJCXRocmVzaG9sZF9k b3duID0gNzU7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBISUdIX1BPV0VSOgo+ICsJCS8qIFVw Y2xvY2sgaWYgbW9yZSB0aGFuIDg1JSBidXN5IG92ZXIgMTBtcyAqLwo+ICsJCWVpX3VwID0gMTAw MDA7Cj4gKwkJdGhyZXNob2xkX3VwID0gODU7Cj4gKwo+ICsJCS8qIERvd25jbG9jayBpZiBsZXNz IHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1zICovCj4gKwkJZWlfZG93biA9IDMyMDAwOwo+ICsJCXRo cmVzaG9sZF9kb3duID0gNjA7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJLyogV2hlbiBieXQg Y2FuIHN1cnZpdmUgd2l0aG91dCBzeXN0ZW0gaGFuZyB3aXRoIGR5bmFtaWMKPiArCSAqIHN3IGZy ZXEgYWRqdXN0bWVudHMsIHRoaXMgcmVzdHJpY3Rpb24gY2FuIGJlIGxpZnRlZC4KPiArCSAqLwo+ ICsJaWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCj4gKwkJZ290byBza2lwX2h3X3dyaXRlOwo+ICsK PiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUlBfVVBfRUksCj4gKwkJCSAgIEdU X0lOVEVSVkFMX0ZST01fVVMoaTkxNSwgZWlfdXApKTsKPiArCWludGVsX3VuY29yZV93cml0ZSh1 bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xELAo+ICsJCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VT KGk5MTUsCj4gKwkJCQkJICAgICAgIGVpX3VwICogdGhyZXNob2xkX3VwIC8gMTAwKSk7Cj4gKwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLAo+ICsJCQkgICBH VF9JTlRFUlZBTF9GUk9NX1VTKGk5MTUsIGVpX2Rvd24pKTsKPiArCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsCj4gKwkJCSAgIEdUX0lOVEVSVkFMX0ZS T01fVVMoaTkxNSwKPiArCQkJCQkgICAgICAgZWlfZG93biAqIHRocmVzaG9sZF9kb3duIC8gMTAw KSk7Cj4gKwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VONl9SUF9DT05UUk9MLAo+ ICsJCQkgICAoSU5URUxfR0VOKGk5MTUpID4gOSA/IDAgOiBHRU42X1JQX01FRElBX1RVUkJPKSB8 Cj4gKwkJCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAo+ICsJCQkgICBHRU42X1JQ X01FRElBX0lTX0dGWCB8Cj4gKwkJCSAgIEdFTjZfUlBfRU5BQkxFIHwKPiArCQkJICAgR0VONl9S UF9VUF9CVVNZX0FWRyB8Cj4gKwkJCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Cj4gKwo+ICtz a2lwX2h3X3dyaXRlOgo+ICsJcnBzLT5wb3dlci5tb2RlID0gbmV3X3Bvd2VyOwo+ICsJcnBzLT5w b3dlci51cF90aHJlc2hvbGQgPSB0aHJlc2hvbGRfdXA7Cj4gKwlycHMtPnBvd2VyLmRvd25fdGhy ZXNob2xkID0gdGhyZXNob2xkX2Rvd247Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjZfcnBz X3NldF90aHJlc2hvbGRzKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTggdmFsKQo+ICt7Cj4gKwlp bnQgbmV3X3Bvd2VyOwo+ICsKPiArCW5ld19wb3dlciA9IHJwcy0+cG93ZXIubW9kZTsKPiArCXN3 aXRjaCAocnBzLT5wb3dlci5tb2RlKSB7Cj4gKwljYXNlIExPV19QT1dFUjoKPiArCQlpZiAodmFs ID4gcnBzLT5lZmZpY2llbnRfZnJlcSArIDEgJiYKPiArCQkgICAgdmFsID4gcnBzLT5jdXJfZnJl cSkKPiArCQkJbmV3X3Bvd2VyID0gQkVUV0VFTjsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEJF VFdFRU46Cj4gKwkJaWYgKHZhbCA8PSBycHMtPmVmZmljaWVudF9mcmVxICYmCj4gKwkJICAgIHZh bCA8IHJwcy0+Y3VyX2ZyZXEpCj4gKwkJCW5ld19wb3dlciA9IExPV19QT1dFUjsKPiArCQllbHNl IGlmICh2YWwgPj0gcnBzLT5ycDBfZnJlcSAmJgo+ICsJCQkgdmFsID4gcnBzLT5jdXJfZnJlcSkK PiArCQkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIEhJ R0hfUE9XRVI6Cj4gKwkJaWYgKHZhbCA8IChycHMtPnJwMV9mcmVxICsgcnBzLT5ycDBfZnJlcSkg Pj4gMSAmJgo+ICsJCSAgICB2YWwgPCBycHMtPmN1cl9mcmVxKQo+ICsJCQluZXdfcG93ZXIgPSBC RVRXRUVOOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJLyogTWF4L21pbiBiaW5zIGFyZSBzcGVjaWFs ICovCj4gKwlpZiAodmFsIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQo+ICsJCW5ld19wb3dl ciA9IExPV19QT1dFUjsKPiArCWlmICh2YWwgPj0gcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpCj4g KwkJbmV3X3Bvd2VyID0gSElHSF9QT1dFUjsKPiArCj4gKwltdXRleF9sb2NrKCZycHMtPnBvd2Vy Lm11dGV4KTsKPiArCWlmIChycHMtPnBvd2VyLmludGVyYWN0aXZlKQo+ICsJCW5ld19wb3dlciA9 IEhJR0hfUE9XRVI7Cj4gKwlycHNfc2V0X3Bvd2VyKHJwcywgbmV3X3Bvd2VyKTsKPiArCW11dGV4 X3VubG9jaygmcnBzLT5wb3dlci5tdXRleCk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfcnBzX21h cmtfaW50ZXJhY3RpdmUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBib29sIGludGVyYWN0aXZlKQo+ ICt7Cj4gKwlpZiAoIXJwcy0+ZW5hYmxlZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbXV0ZXhfbG9j aygmcnBzLT5wb3dlci5tdXRleCk7Cj4gKwlpZiAoaW50ZXJhY3RpdmUpIHsKPiArCQlpZiAoIXJw cy0+cG93ZXIuaW50ZXJhY3RpdmUrKyAmJiBycHMtPmFjdGl2ZSkKPiArCQkJcnBzX3NldF9wb3dl cihycHMsIEhJR0hfUE9XRVIpOwo+ICsJfSBlbHNlIHsKPiArCQlHRU1fQlVHX09OKCFycHMtPnBv d2VyLmludGVyYWN0aXZlKTsKPiArCQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07Cj4gKwl9Cj4g KwltdXRleF91bmxvY2soJnJwcy0+cG93ZXIubXV0ZXgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGdlbjZfcnBzX3NldChzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCkKPiArewo+ICsJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJdTMyIHN3cmVx Owo+ICsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKPiArCQlzd3JlcSA9IEdFTjlfRlJF UVVFTkNZKHZhbCk7Cj4gKwllbHNlIGlmIChJU19IQVNXRUxMKGk5MTUpIHx8IElTX0JST0FEV0VM TChpOTE1KSkKPiArCQlzd3JlcSA9IEhTV19GUkVRVUVOQ1kodmFsKTsKPiArCWVsc2UKPiArCQlz d3JlcSA9IChHRU42X0ZSRVFVRU5DWSh2YWwpIHwKPiArCQkJIEdFTjZfT0ZGU0VUKDApIHwKPiAr CQkJIEdFTjZfQUdHUkVTU0lWRV9UVVJCTyk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3Jl LCBHRU42X1JQTlNXUkVRLCBzd3JlcSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdmx2X3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKPiAr CWludCBlcnI7Cj4gKwo+ICsJdmx2X3B1bml0X2dldChpOTE1KTsKPiArCWVyciA9IHZsdl9wdW5p dF93cml0ZShpOTE1LCBQVU5JVF9SRUdfR1BVX0ZSRVFfUkVRLCB2YWwpOwo+ICsJdmx2X3B1bml0 X3B1dChpOTE1KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJw c19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2YWwpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKPiArCWludCBlcnI7Cj4gKwo+ ICsJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKHZh bCA9PSBycHMtPmxhc3RfZnJlcSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoSVNfVkFMTEVZ VklFVyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUpKQo+ICsJCWVyciA9IHZsdl9ycHNfc2V0 KHJwcywgdmFsKTsKPiArCWVsc2UKPiArCQllcnIgPSBnZW42X3Jwc19zZXQocnBzLCB2YWwpOwo+ ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWdlbjZfcnBzX3NldF90aHJlc2hv bGRzKHJwcywgdmFsKTsKPiArCXJwcy0+bGFzdF9mcmVxID0gdmFsOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX3Jwc191bnBhcmsoc3RydWN0IGludGVsX3JwcyAqcnBz KQo+ICt7Cj4gKwl1OCBmcmVxOwo+ICsKPiArCWlmICghcnBzLT5lbmFibGVkKQo+ICsJCXJldHVy bjsKPiArCj4gKwkvKgo+ICsJICogVXNlIHRoZSB1c2VyJ3MgZGVzaXJlZCBmcmVxdWVuY3kgYXMg YSBndWlkZSwgYnV0IGZvciBiZXR0ZXIKPiArCSAqIHBlcmZvcm1hbmNlLCBqdW1wIGRpcmVjdGx5 IHRvIFJQZSBhcyBvdXIgc3RhcnRpbmcgZnJlcXVlbmN5Lgo+ICsJICovCj4gKwltdXRleF9sb2Nr KCZycHMtPmxvY2spOwo+ICsJcnBzLT5hY3RpdmUgPSB0cnVlOwo+ICsJZnJlcSA9IG1heChycHMt PmN1cl9mcmVxLCBycHMtPmVmZmljaWVudF9mcmVxKSwKPiArCWZyZXEgPSBjbGFtcChmcmVxLCBy cHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwgcnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQpOwo+ICsJaW50 ZWxfcnBzX3NldChycHMsIGZyZXEpOwo+ICsJcnBzLT5sYXN0X2FkaiA9IDA7Cj4gKwltdXRleF91 bmxvY2soJnJwcy0+bG9jayk7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihycHNfdG9faTkxNShycHMp KSA+PSA2KQo+ICsJCXJwc19lbmFibGVfaW50ZXJydXB0cyhycHMpOwo+ICsKPiArCWlmIChJU19H RU4ocnBzX3RvX2k5MTUocnBzKSwgNSkpCj4gKwkJZ2VuNV9ycHNfdXBkYXRlKHJwcyk7Cj4gK30K PiArCj4gK3ZvaWQgaW50ZWxfcnBzX3Bhcmsoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwo+ ICsJaWYgKCFycHMtPmVuYWJsZWQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChJTlRFTF9HRU4o aTkxNSkgPj0gNikKPiArCQlycHNfZGlzYWJsZV9pbnRlcnJ1cHRzKHJwcyk7Cj4gKwo+ICsJcnBz LT5hY3RpdmUgPSBmYWxzZTsKPiArCWlmIChycHMtPmxhc3RfZnJlcSA8PSBycHMtPmlkbGVfZnJl cSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBwdW5pdCBkZWxheXMgdGhlIHdy aXRlIG9mIHRoZSBmcmVxdWVuY3kgYW5kIHZvbHRhZ2UgdW50aWwgaXQKPiArCSAqIGRldGVybWlu ZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1c2FnZSB3ZSBkb24ndCB3YW50IHRv Cj4gKwkgKiB3YXN0ZSBwb3dlciBjaGFuZ2luZyB0aGUgZnJlcXVlbmN5IGlmIHRoZSBHUFUgaXMg c2xlZXBpbmcgKHJjNikuCj4gKwkgKiBIb3dldmVyLCB0aGUgR1BVIGFuZCBkcml2ZXIgaXMgbm93 IGlkbGUgYW5kIHdlIGRvIG5vdCB3YW50IHRvIGRlbGF5Cj4gKwkgKiBzd2l0Y2hpbmcgdG8gbWlu aW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkgYXMgd2UgZG8KPiArCSAq IG5vdCBleHBlY3QgdG8gYmUgd29rZW4gaW4gdGhlIG5lYXIgZnV0dXJlIGFuZCBzbyBtdXN0IGZs dXNoIHRoZQo+ICsJICogY2hhbmdlIGJ5IHdha2luZyB0aGUgZGV2aWNlLgo+ICsJICoKPiArCSAq IFdlIGNob29zZSB0byB0YWtlIHRoZSBtZWRpYSBwb3dlcndlbGwgKGVpdGhlciB3b3VsZCBkbyB0 byB0cmljayB0aGUKPiArCSAqIHB1bml0IGludG8gY29tbWl0dGluZyB0aGUgdm9sdGFnZSBjaGFu Z2UpIGFzIHRoYXQgdGFrZXMgYSBsb3QgbGVzcwo+ICsJICogcG93ZXIgdGhhbiB0aGUgcmVuZGVy IHBvd2Vyd2VsbC4KPiArCSAqLwo+ICsJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQocnBzX3Rv X3VuY29yZShycHMpLCBGT1JDRVdBS0VfTUVESUEpOwo+ICsJcnBzX3NldChycHMsIHJwcy0+aWRs ZV9mcmVxKTsKPiArCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KHJwc190b191bmNvcmUocnBz KSwgRk9SQ0VXQUtFX01FRElBKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9ycHNfYm9vc3Qoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZy cS0+ZW5naW5lLT5ndC0+cnBzOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlpZiAo aTkxNV9yZXF1ZXN0X3NpZ25hbGVkKHJxKSB8fCAhcnBzLT5hY3RpdmUpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCS8qIFNlcmlhbGl6ZXMgd2l0aCBpOTE1X3JlcXVlc3RfcmV0aXJlKCkgKi8KPiArCXNw aW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOwo+ICsJaWYgKCFpOTE1X3JlcXVlc3Rf aGFzX3dhaXRib29zdChycSkgJiYKPiArCSAgICAhZG1hX2ZlbmNlX2lzX3NpZ25hbGVkX2xvY2tl ZCgmcnEtPmZlbmNlKSkgewo+ICsJCXJxLT5mbGFncyB8PSBJOTE1X1JFUVVFU1RfV0FJVEJPT1NU Owo+ICsKPiArCQlpZiAoIWF0b21pY19mZXRjaF9pbmMoJnJwcy0+bnVtX3dhaXRlcnMpICYmCj4g KwkJICAgIFJFQURfT05DRShycHMtPmN1cl9mcmVxKSA8IHJwcy0+Ym9vc3RfZnJlcSkKPiArCQkJ c2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKPiArCj4gKwkJYXRvbWljX2luYygmcnBzLT5ib29z dHMpOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsK PiArfQo+ICsKPiAraW50IGludGVsX3Jwc19zZXQoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1OCB2 YWwpCj4gK3sKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJw cy0+bG9jayk7Cj4gKwlHRU1fQlVHX09OKHZhbCA+IHJwcy0+bWF4X2ZyZXEpOwo+ICsJR0VNX0JV R19PTih2YWwgPCBycHMtPm1pbl9mcmVxKTsKPiArCj4gKwlpZiAocnBzLT5hY3RpdmUpIHsKPiAr CQllcnIgPSBycHNfc2V0KHJwcywgdmFsKTsKPiArCj4gKwkJLyoKPiArCQkgKiBNYWtlIHN1cmUg d2UgY29udGludWUgdG8gZ2V0IGludGVycnVwdHMKPiArCQkgKiB1bnRpbCB3ZSBoaXQgdGhlIG1p bmltdW0gb3IgbWF4aW11bSBmcmVxdWVuY2llcy4KPiArCQkgKi8KPiArCQlpZiAoSU5URUxfR0VO KHJwc190b19pOTE1KHJwcykpID49IDYpIHsKPiArCQkJc3RydWN0IGludGVsX3VuY29yZSAqdW5j b3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ICsKPiArCQkJaW50ZWxfdW5jb3JlX3dyaXRlKHVu Y29yZSwgR0VONl9SUF9JTlRFUlJVUFRfTElNSVRTLAo+ICsJCQkJCSAgIHJwc19saW1pdHMocnBz LCB2YWwpKTsKPiArCj4gKwkJCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjZfUE1JTlRS TVNLLAo+ICsJCQkJCSAgIHJwc19wbV9tYXNrKHJwcywgdmFsKSk7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCWlmIChlcnIgPT0gMCkKPiArCQlycHMtPmN1cl9mcmVxID0gdmFsOwo+ICsKPiArCXJldHVy biBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbjZfcnBzX2luaXQoc3RydWN0IGludGVs X3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190 b19pOTE1KHJwcyk7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5j b3JlKHJwcyk7Cj4gKwo+ICsJLyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2Yg NTBNSHogKi8KPiArCj4gKwkvKiBzdGF0aWMgdmFsdWVzIGZyb20gSFc6IFJQMCA+IFJQMSA+IFJQ biAobWluX2ZyZXEpICovCj4gKwlpZiAoSVNfR0VOOV9MUChpOTE1KSkgewo+ICsJCXUzMiBycF9z dGF0ZV9jYXAgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEJYVF9SUF9TVEFURV9DQVApOwo+ ICsKPiArCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAxNikgJiAweGZmOwo+ICsJ CXJwcy0+cnAxX2ZyZXEgPSAocnBfc3RhdGVfY2FwID4+ICA4KSAmIDB4ZmY7Cj4gKwkJcnBzLT5t aW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gIDApICYgMHhmZjsKPiArCX0gZWxzZSB7Cj4gKwkJ dTMyIHJwX3N0YXRlX2NhcCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0VONl9SUF9TVEFU RV9DQVApOwo+ICsKPiArCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAw eGZmOwo+ICsJCXJwcy0+cnAxX2ZyZXEgPSAocnBfc3RhdGVfY2FwID4+ICA4KSAmIDB4ZmY7Cj4g KwkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsKPiArCX0KPiAr Cj4gKwkvKiBod19tYXggPSBSUDAgdW50aWwgd2UgY2hlY2sgZm9yIG92ZXJjbG9ja2luZyAqLwo+ ICsJcnBzLT5tYXhfZnJlcSA9IHJwcy0+cnAwX2ZyZXE7Cj4gKwo+ICsJcnBzLT5lZmZpY2llbnRf ZnJlcSA9IHJwcy0+cnAxX2ZyZXE7Cj4gKwlpZiAoSVNfSEFTV0VMTChpOTE1KSB8fCBJU19CUk9B RFdFTEwoaTkxNSkgfHwKPiArCSAgICBJU19HRU45X0JDKGk5MTUpIHx8IElOVEVMX0dFTihpOTE1 KSA+PSAxMCkgewo+ICsJCXUzMiBkZGNjX3N0YXR1cyA9IDA7Cj4gKwo+ICsJCWlmIChzYW5keWJy aWRnZV9wY29kZV9yZWFkKGk5MTUsCj4gKwkJCQkJICAgSFNXX1BDT0RFX0RZTkFNSUNfRFVUWV9D WUNMRV9DT05UUk9MLAo+ICsJCQkJCSAgICZkZGNjX3N0YXR1cywgTlVMTCkgPT0gMCkKPiArCQkJ cnBzLT5lZmZpY2llbnRfZnJlcSA9Cj4gKwkJCQljbGFtcF90KHU4LAo+ICsJCQkJCShkZGNjX3N0 YXR1cyA+PiA4KSAmIDB4ZmYsCj4gKwkJCQkJcnBzLT5taW5fZnJlcSwKPiArCQkJCQlycHMtPm1h eF9mcmVxKTsKPiArCX0KPiArCj4gKwlpZiAoSVNfR0VOOV9CQyhpOTE1KSB8fCBJTlRFTF9HRU4o aTkxNSkgPj0gMTApIHsKPiArCQkvKiBTdG9yZSB0aGUgZnJlcXVlbmN5IHZhbHVlcyBpbiAxNi42 NiBNSFogdW5pdHMsIHdoaWNoIGlzCj4gKwkJICogdGhlIG5hdHVyYWwgaGFyZHdhcmUgdW5pdCBm b3IgU0tMCj4gKwkJICovCj4gKwkJcnBzLT5ycDBfZnJlcSAqPSBHRU45X0ZSRVFfU0NBTEVSOwo+ ICsJCXJwcy0+cnAxX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKPiArCQlycHMtPm1pbl9mcmVx ICo9IEdFTjlfRlJFUV9TQ0FMRVI7Cj4gKwkJcnBzLT5tYXhfZnJlcSAqPSBHRU45X0ZSRVFfU0NB TEVSOwo+ICsJCXJwcy0+ZWZmaWNpZW50X2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKPiArCX0K PiArfQo+ICsKPiArc3RhdGljIGJvb2wgcnBzX3Jlc2V0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykK PiArewo+ICsJLyogZm9yY2UgYSByZXNldCAqLwo+ICsJcnBzLT5wb3dlci5tb2RlID0gLTE7Cj4g KwlycHMtPmxhc3RfZnJlcSA9IC0xOwo+ICsKPiArCWlmIChycHNfc2V0KHJwcywgcnBzLT5taW5f ZnJlcSkpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBSUFMgdG8gaW5pdGlhbCB2 YWx1ZXNcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlycHMtPmN1cl9mcmVx ID0gcnBzLT5taW5fZnJlcTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsvKiBTZWUgdGhl IEdlbjlfR1RfUE1fUHJvZ3JhbW1pbmdfR3VpZGUgZG9jIGZvciB0aGUgYmVsb3cgKi8KPiArc3Rh dGljIGJvb2wgZ2VuOV9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ICsKPiArCS8q IFByb2dyYW0gZGVmYXVsdHMgYW5kIHRocmVzaG9sZHMgZm9yIFJQUyAqLwo+ICsJaWYgKElTX0dF TihpOTE1LCA5KSkKPiArCQlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JDX1ZJ REVPX0ZSRVEsCj4gKwkJCQkgICAgICBHRU45X0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7Cj4g Kwo+ICsJLyogMSBzZWNvbmQgdGltZW91dCAqLwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVu Y29yZSwgR0VONl9SUF9ET1dOX1RJTUVPVVQsCj4gKwkJCSAgICAgIEdUX0lOVEVSVkFMX0ZST01f VVMoaTkxNSwgMTAwMDAwMCkpOwo+ICsKPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUs IEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDB4YSk7Cj4gKwo+ICsJcmV0dXJuIHJwc19yZXNldChy cHMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBnZW44X3Jwc19lbmFibGUoc3RydWN0IGludGVs X3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBycHNfdG9f dW5jb3JlKHJwcyk7Cj4gKwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9S Q19WSURFT19GUkVRLAo+ICsJCQkgICAgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsK PiArCj4gKwkvKiBOQjogRG9jcyBzYXkgMXMsIGFuZCAxMDAwMDAwIC0gd2hpY2ggYXJlbid0IGVx dWl2YWxlbnQgKi8KPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9X Tl9USU1FT1VULAo+ICsJCQkgICAgICAxMDAwMDAwMDAgLyAxMjgpOyAvKiAxIHNlY29uZCB0aW1l b3V0ICovCj4gKwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9JRExF X0hZU1RFUlNJUywgMTApOwo+ICsKPiArCXJldHVybiBycHNfcmVzZXQocnBzKTsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgZ2VuNl9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiAr ewo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ ICsKPiArCS8qIFBvd2VyIGRvd24gaWYgY29tcGxldGVseSBpZGxlIGZvciBvdmVyIDUwbXMgKi8K PiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULCA1 MDAwMCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0lETEVfSFlT VEVSU0lTLCAxMCk7Cj4gKwo+ICsJcmV0dXJuIHJwc19yZXNldChycHMpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGNodl9ycHNfbWF4X2ZyZXEoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwl1 MzIgdmFsOwo+ICsKPiArCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIEZCX0dGWF9GTUFYX0FU X1ZNQVhfRlVTRSk7Cj4gKwo+ICsJc3dpdGNoIChSVU5USU1FX0lORk8oaTkxNSktPnNzZXUuZXVf dG90YWwpIHsKPiArCWNhc2UgODoKPiArCQkvKiAoMiAqIDQpIGNvbmZpZyAqLwo+ICsJCXZhbCA+ Pj0gRkJfR0ZYX0ZNQVhfQVRfVk1BWF8yU1M0RVVfRlVTRV9TSElGVDsKPiArCQlicmVhazsKPiAr CWNhc2UgMTI6Cj4gKwkJLyogKDIgKiA2KSBjb25maWcgKi8KPiArCQl2YWwgPj49IEZCX0dGWF9G TUFYX0FUX1ZNQVhfMlNTNkVVX0ZVU0VfU0hJRlQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE2Ogo+ ICsJCS8qICgyICogOCkgY29uZmlnICovCj4gKwlkZWZhdWx0Ogo+ICsJCS8qIFNldHRpbmcgKDIg KiA4KSBNaW4gUlAwIGZvciBhbnkgb3RoZXIgY29tYmluYXRpb24gKi8KPiArCQl2YWwgPj49IEZC X0dGWF9GTUFYX0FUX1ZNQVhfMlNTOEVVX0ZVU0VfU0hJRlQ7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIHZhbCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSzsKPiArfQo+ICsKPiArc3Rh dGljIGludCBjaHZfcnBzX3JwZV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJdTMy IHZhbDsKPiArCj4gKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5JVF9HUFVfRFVUWUNZ Q0xFX1JFRyk7Cj4gKwl2YWwgPj49IFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfU0hJRlQ7 Cj4gKwo+ICsJcmV0dXJuIHZhbCAmIFBVTklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfTUFTSzsK PiArfQo+ICsKPiArc3RhdGljIGludCBjaHZfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgaW50ZWxfcnBz ICpycHMpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5 MTUocnBzKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0gdmx2X3B1bml0X3JlYWQoaTkxNSwg RkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKPiArCj4gKwlyZXR1cm4gdmFsICYgRkJfR0ZYX0ZS RVFfRlVTRV9NQVNLOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGNodl9ycHNfbWluX2ZyZXEoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXZhbCA9IHZsdl9wdW5p dF9yZWFkKGk5MTUsIEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRSk7Cj4gKwl2YWwgPj49IEZCX0dG WF9GTUlOX0FUX1ZNSU5fRlVTRV9TSElGVDsKPiArCj4gKwlyZXR1cm4gdmFsICYgRkJfR0ZYX0ZS RVFfRlVTRV9NQVNLOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBjaHZfcnBzX2VuYWJsZShzdHJ1 Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9 IHJwc190b191bmNvcmUocnBzKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g cnBzX3RvX2k5MTUocnBzKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJLyogMTogUHJvZ3JhbSBkZWZh dWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTKi8KPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1 bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULCAxMDAwMDAwKTsKPiArCWludGVsX3VuY29yZV93 cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xELCA1OTQwMCk7Cj4gKwlpbnRlbF91 bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05fVEhSRVNIT0xELCAyNDUwMDApOwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9VUF9FSSwgNjYwMDApOwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VONl9SUF9ET1dOX0VJLCAzNTAwMDAp Owo+ICsKPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfSURMRV9IWVNU RVJTSVMsIDEwKTsKPiArCj4gKwkvKiAyOiBFbmFibGUgUlBTICovCj4gKwlpbnRlbF91bmNvcmVf d3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0NPTlRST0wsCj4gKwkJCSAgICAgIEdFTjZfUlBfTUVE SUFfSFdfTk9STUFMX01PREUgfAo+ICsJCQkgICAgICBHRU42X1JQX01FRElBX0lTX0dGWCB8Cj4g KwkJCSAgICAgIEdFTjZfUlBfRU5BQkxFIHwKPiArCQkJICAgICAgR0VONl9SUF9VUF9CVVNZX0FW RyB8Cj4gKwkJCSAgICAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Cj4gKwo+ICsJLyogU2V0dGlu ZyBGaXhlZCBCaWFzICovCj4gKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOwo+ICsKPiArCXZhbCA9IFZM Vl9PVkVSUklERV9FTiB8IFZMVl9TT0NfVERQX0VOIHwgQ0hWX0JJQVNfQ1BVXzUwX1NPQ181MDsK PiArCXZsdl9wdW5pdF93cml0ZShpOTE1LCBWTFZfVFVSQk9fU09DX09WRVJSSURFLCB2YWwpOwo+ ICsKPiArCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGk5MTUsIFBVTklUX1JFR19HUFVfRlJFUV9TVFMp Owo+ICsKPiArCXZsdl9wdW5pdF9wdXQoaTkxNSk7Cj4gKwo+ICsJLyogUlBTIGNvZGUgYXNzdW1l cyBHUExMIGlzIHVzZWQgKi8KPiArCVdBUk5fT05DRSgodmFsICYgR1BMTEVOQUJMRSkgPT0gMCwg IkdQTEwgbm90IGVuYWJsZWRcbiIpOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIkdQTEwgZW5h YmxlZD8gJXNcbiIsIHllc25vKHZhbCAmIEdQTExFTkFCTEUpKTsKPiArCURSTV9ERUJVR19EUklW RVIoIkdQVSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKPiArCj4gKwlyZXR1cm4gcnBzX3Jlc2V0 KHJwcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmx2X3Jwc19ndWFyX2ZyZXEoc3RydWN0IGlu dGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJw c190b19pOTE1KHJwcyk7Cj4gKwl1MzIgdmFsLCBycDE7Cj4gKwo+ICsJdmFsID0gdmx2X25jX3Jl YWQoaTkxNSwgSU9TRl9OQ19GQl9HRlhfRlJFUV9GVVNFKTsKPiArCj4gKwlycDEgPSB2YWwgJiBG Ql9HRlhfRkdVQVJBTlRFRURfRlJFUV9GVVNFX01BU0s7Cj4gKwlycDEgPj49IEZCX0dGWF9GR1VB UkFOVEVFRF9GUkVRX0ZVU0VfU0hJRlQ7Cj4gKwo+ICsJcmV0dXJuIHJwMTsKPiArfQo+ICsKPiAr c3RhdGljIGludCB2bHZfcnBzX21heF9mcmVxKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJ dTMyIHZhbCwgcnAwOwo+ICsKPiArCXZhbCA9IHZsdl9uY19yZWFkKGk5MTUsIElPU0ZfTkNfRkJf R0ZYX0ZSRVFfRlVTRSk7Cj4gKwo+ICsJcnAwID0gKHZhbCAmIEZCX0dGWF9NQVhfRlJFUV9GVVNF X01BU0spID4+IEZCX0dGWF9NQVhfRlJFUV9GVVNFX1NISUZUOwo+ICsJLyogQ2xhbXAgdG8gbWF4 ICovCj4gKwlycDAgPSBtaW5fdCh1MzIsIHJwMCwgMHhlYSk7Cj4gKwo+ICsJcmV0dXJuIHJwMDsK PiArfQo+ICsKPiArc3RhdGljIGludCB2bHZfcnBzX3JwZV9mcmVxKHN0cnVjdCBpbnRlbF9ycHMg KnJwcykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkx NShycHMpOwo+ICsJdTMyIHZhbCwgcnBlOwo+ICsKPiArCXZhbCA9IHZsdl9uY19yZWFkKGk5MTUs IElPU0ZfTkNfRkJfR0ZYX0ZNQVhfRlVTRV9MTyk7Cj4gKwlycGUgPSAodmFsICYgRkJfRk1BWF9W TUlOX0ZSRVFfTE9fTUFTSykgPj4gRkJfRk1BWF9WTUlOX0ZSRVFfTE9fU0hJRlQ7Cj4gKwl2YWwg PSB2bHZfbmNfcmVhZChpOTE1LCBJT1NGX05DX0ZCX0dGWF9GTUFYX0ZVU0VfSEkpOwo+ICsJcnBl IHw9ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9ISV9NQVNLKSA8PCA1Owo+ICsKPiArCXJldHVy biBycGU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmx2X3Jwc19taW5fZnJlcShzdHJ1Y3QgaW50 ZWxfcnBzICpycHMpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBz X3RvX2k5MTUocnBzKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0gdmx2X3B1bml0X3JlYWQo aTkxNSwgUFVOSVRfUkVHX0dQVV9MRk0pICYgMHhmZjsKPiArCS8qCj4gKwkgKiBBY2NvcmRpbmcg dG8gdGhlIEJZVCBQdW5pdCBHUFUgdHVyYm8gSEFTIDEuMS42LjMgdGhlIG1pbmltdW0gdmFsdWUK PiArCSAqIGZvciB0aGUgbWluaW11bSBmcmVxdWVuY3kgaW4gR1BMTCBtb2RlIGlzIDB4YzEuIENv bnRyYXJ5IHRvIHRoaXMgb24KPiArCSAqIGEgQllULU0gQjAgdGhlIGFib3ZlIHJlZ2lzdGVyIGNv bnRhaW5zIDB4YmYuIE1vcmVvdmVyIHdoZW4gc2V0dGluZwo+ICsJICogYSBmcmVxdWVuY3kgUHVu aXQgd2lsbCBub3QgYWxsb3cgdmFsdWVzIGJlbG93IDB4YzAuIENsYW1wIGl0IDB4YzAKPiArCSAq IHRvIG1ha2Ugc3VyZSBpdCBtYXRjaGVzIHdoYXQgUHVuaXQgYWNjZXB0cy4KPiArCSAqLwo+ICsJ cmV0dXJuIG1heF90KHUzMiwgdmFsLCAweGMwKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmx2 X3Jwc19lbmFibGUoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxf dW5jb3JlICp1bmNvcmUgPSBycHNfdG9fdW5jb3JlKHJwcyk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCWlu dGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfRE9XTl9USU1FT1VULCAxMDAwMDAw KTsKPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNvcmUsIEdFTjZfUlBfVVBfVEhSRVNIT0xE LCA1OTQwMCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGVfZncodW5jb3JlLCBHRU42X1JQX0RPV05f VEhSRVNIT0xELCAyNDUwMDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VO Nl9SUF9VUF9FSSwgNjYwMDApOwo+ICsJaW50ZWxfdW5jb3JlX3dyaXRlX2Z3KHVuY29yZSwgR0VO Nl9SUF9ET1dOX0VJLCAzNTAwMDApOwo+ICsKPiArCWludGVsX3VuY29yZV93cml0ZV9mdyh1bmNv cmUsIEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKPiArCj4gKwlpbnRlbF91bmNvcmVfd3Jp dGVfZncodW5jb3JlLCBHRU42X1JQX0NPTlRST0wsCj4gKwkJCSAgICAgIEdFTjZfUlBfTUVESUFf VFVSQk8gfAo+ICsJCQkgICAgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKPiArCQkJ ICAgICAgR0VONl9SUF9NRURJQV9JU19HRlggfAo+ICsJCQkgICAgICBHRU42X1JQX0VOQUJMRSB8 Cj4gKwkJCSAgICAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAo+ICsJCQkgICAgICBHRU42X1JQX0RP V05fSURMRV9DT05UKTsKPiArCj4gKwl2bHZfcHVuaXRfZ2V0KGk5MTUpOwo+ICsKPiArCS8qIFNl dHRpbmcgRml4ZWQgQmlhcyAqLwo+ICsJdmFsID0gVkxWX09WRVJSSURFX0VOIHwgVkxWX1NPQ19U RFBfRU4gfCBWTFZfQklBU19DUFVfMTI1X1NPQ184NzU7Cj4gKwl2bHZfcHVuaXRfd3JpdGUoaTkx NSwgVkxWX1RVUkJPX1NPQ19PVkVSUklERSwgdmFsKTsKPiArCj4gKwl2YWwgPSB2bHZfcHVuaXRf cmVhZChpOTE1LCBQVU5JVF9SRUdfR1BVX0ZSRVFfU1RTKTsKPiArCj4gKwl2bHZfcHVuaXRfcHV0 KGk5MTUpOwo+ICsKPiArCS8qIFJQUyBjb2RlIGFzc3VtZXMgR1BMTCBpcyB1c2VkICovCj4gKwlX QVJOX09OQ0UoKHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsK PiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJHUExMIGVuYWJsZWQ/ICVzXG4iLCB5ZXNubyh2YWwg JiBHUExMRU5BQkxFKSk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhc biIsIHZhbCk7Cj4gKwo+ICsJcmV0dXJuIHJwc19yZXNldChycHMpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdW5zaWduZWQgbG9uZyBfX2lwc19nZnhfdmFsKHN0cnVjdCBpbnRlbF9pcHMgKmlwcykKPiAr ewo+ICsJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVyX29mKGlwcywgdHlwZW9mKCpy cHMpLCBpcHMpOwo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29y ZShycHMpOwo+ICsJdW5zaWduZWQgbG9uZyB0LCBjb3JyLCBzdGF0ZTEsIGNvcnIyLCBzdGF0ZTI7 Cj4gKwl1MzIgcHh2aWQsIGV4dF92Owo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1jaGRl dl9sb2NrKTsKPiArCj4gKwlweHZpZCA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUFhWRlJF UShycHMtPmN1cl9mcmVxKSk7Cj4gKwlweHZpZCA9IChweHZpZCA+PiAyNCkgJiAweDdmOwo+ICsJ ZXh0X3YgPSBwdmlkX3RvX2V4dHZpZChycHNfdG9faTkxNShycHMpLCBweHZpZCk7Cj4gKwo+ICsJ c3RhdGUxID0gZXh0X3Y7Cj4gKwo+ICsJLyogUmV2ZWwgaW4gdGhlIGVtcGlyaWNhbGx5IGRlcml2 ZWQgY29uc3RhbnRzICovCj4gKwo+ICsJLyogQ29ycmVjdGlvbiBmYWN0b3IgaW4gMS8xMDAwMDAg dW5pdHMgKi8KPiArCXQgPSBpcHNfbWNoX3ZhbCh1bmNvcmUpOwo+ICsJaWYgKHQgPiA4MCkKPiAr CQljb3JyID0gdCAqIDIzNDkgKyAxMzU5NDA7Cj4gKwllbHNlIGlmICh0ID49IDUwKQo+ICsJCWNv cnIgPSB0ICogOTY0ICsgMjkzMTc7Cj4gKwllbHNlIC8qIDwgNTAgKi8KPiArCQljb3JyID0gdCAq IDMwMSArIDEwMDQ7Cj4gKwo+ICsJY29yciA9IGNvcnIgKiAxNTAxNDIgKiBzdGF0ZTEgLyAxMDAw MCAtIDc4NjQyOwo+ICsJY29yciAvPSAxMDAwMDA7Cj4gKwljb3JyMiA9IGNvcnIgKiBpcHMtPmNv cnI7Cj4gKwo+ICsJc3RhdGUyID0gY29ycjIgKiBzdGF0ZTEgLyAxMDAwMDsKPiArCXN0YXRlMiAv PSAxMDA7IC8qIGNvbnZlcnQgdG8gbVcgKi8KPiArCj4gKwlfX2dlbjVfaXBzX3VwZGF0ZShpcHMp Owo+ICsKPiArCXJldHVybiBpcHMtPmdmeF9wb3dlciArIHN0YXRlMjsKPiArfQo+ICsKPiArdm9p ZCBpbnRlbF9ycHNfZW5hYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJc3RydWN0IGlu dGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMpOwo+ICsKPiArCWludGVsX3Vu Y29yZV9mb3JjZXdha2VfZ2V0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwlpZiAoSVNfQ0hF UlJZVklFVyhpOTE1KSkKPiArCQlycHMtPmVuYWJsZWQgPSBjaHZfcnBzX2VuYWJsZShycHMpOwo+ ICsJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSkKPiArCQlycHMtPmVuYWJsZWQgPSB2bHZf cnBzX2VuYWJsZShycHMpOwo+ICsJZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDkpCj4gKwkJ cnBzLT5lbmFibGVkID0gZ2VuOV9ycHNfZW5hYmxlKHJwcyk7Cj4gKwllbHNlIGlmIChJTlRFTF9H RU4oaTkxNSkgPj0gOCkKPiArCQlycHMtPmVuYWJsZWQgPSBnZW44X3Jwc19lbmFibGUocnBzKTsK PiArCWVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KQo+ICsJCXJwcy0+ZW5hYmxlZCA9IGdl bjZfcnBzX2VuYWJsZShycHMpOwo+ICsJZWxzZSBpZiAoSVNfSVJPTkxBS0VfTShpOTE1KSkKPiAr CQlycHMtPmVuYWJsZWQgPSBnZW41X3Jwc19lbmFibGUocnBzKTsKPiArCWludGVsX3VuY29yZV9m b3JjZXdha2VfcHV0KHVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwlpZiAoIXJwcy0+ZW5hYmxl ZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJV0FSTl9PTihycHMtPm1heF9mcmVxIDwgcnBzLT5taW5f ZnJlcSk7Cj4gKwlXQVJOX09OKHJwcy0+aWRsZV9mcmVxID4gcnBzLT5tYXhfZnJlcSk7Cj4gKwo+ ICsJV0FSTl9PTihycHMtPmVmZmljaWVudF9mcmVxIDwgcnBzLT5taW5fZnJlcSk7Cj4gKwlXQVJO X09OKHJwcy0+ZWZmaWNpZW50X2ZyZXEgPiBycHMtPm1heF9mcmVxKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgZ2VuNl9ycHNfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMpCj4gK3sKPiAr CWludGVsX3VuY29yZV93cml0ZShycHNfdG9fdW5jb3JlKHJwcyksIEdFTjZfUlBfQ09OVFJPTCwg MCk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfcnBzX2Rpc2FibGUoc3RydWN0IGludGVsX3JwcyAq cnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1 KHJwcyk7Cj4gKwo+ICsJcnBzLT5lbmFibGVkID0gZmFsc2U7Cj4gKwo+ICsJaWYgKElOVEVMX0dF TihpOTE1KSA+PSA2KQo+ICsJCWdlbjZfcnBzX2Rpc2FibGUocnBzKTsKPiArCWVsc2UgaWYgKElT X0lST05MQUtFX00oaTkxNSkpCj4gKwkJZ2VuNV9ycHNfZGlzYWJsZShycHMpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGJ5dF9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwp Cj4gK3sKPiArCS8qCj4gKwkgKiBOID0gdmFsIC0gMHhiNwo+ICsJICogU2xvdyA9IEZhc3QgPSBH UExMIHJlZiAqIE4KPiArCSAqLwo+ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHJwcy0+Z3Bs bF9yZWZfZnJlcSAqICh2YWwgLSAweGI3KSwgMTAwMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg Ynl0X2ZyZXFfb3Bjb2RlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgaW50IHZhbCkKPiArewo+ICsJ cmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDEwMDAgKiB2YWwsIHJwcy0+Z3BsbF9yZWZfZnJlcSkg KyAweGI3Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNodl9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxf cnBzICpycHMsIGludCB2YWwpCj4gK3sKPiArCS8qCj4gKwkgKiBOID0gdmFsIC8gMgo+ICsJICog Q1UgKHNsb3cpID0gQ1UyeCAoZmFzdCkgLyAyID0gR1BMTCByZWYgKiBOIC8gMgo+ICsJICovCj4g KwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QocnBzLT5ncGxsX3JlZl9mcmVxICogdmFsLCAyICog MiAqIDEwMDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNodl9mcmVxX29wY29kZShzdHJ1Y3Qg aW50ZWxfcnBzICpycHMsIGludCB2YWwpCj4gK3sKPiArCS8qIENIViBuZWVkcyBldmVuIHZhbHVl cyAqLwo+ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDIgKiAxMDAwICogdmFsLCBycHMtPmdw bGxfcmVmX2ZyZXEpICogMjsKPiArfQo+ICsKPiAraW50IGludGVsX2dwdV9mcmVxKHN0cnVjdCBp bnRlbF9ycHMgKnJwcywgaW50IHZhbCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0g OSkKPiArCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsICogR1RfRlJFUVVFTkNZX01VTFRJ UExJRVIsCj4gKwkJCQkJIEdFTjlfRlJFUV9TQ0FMRVIpOwo+ICsJZWxzZSBpZiAoSVNfQ0hFUlJZ VklFVyhpOTE1KSkKPiArCQlyZXR1cm4gY2h2X2dwdV9mcmVxKHJwcywgdmFsKTsKPiArCWVsc2Ug aWYgKElTX1ZBTExFWVZJRVcoaTkxNSkpCj4gKwkJcmV0dXJuIGJ5dF9ncHVfZnJlcShycHMsIHZh bCk7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSOwo+ ICt9Cj4gKwo+ICtpbnQgaW50ZWxfZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBp bnQgdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19p OTE1KHJwcyk7Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihpOTE1KSA+PSA5KQo+ICsJCXJldHVybiBE SVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHRU45X0ZSRVFfU0NBTEVSLAo+ICsJCQkJCSBHVF9GUkVR VUVOQ1lfTVVMVElQTElFUik7Cj4gKwllbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpKQo+ICsJ CXJldHVybiBjaHZfZnJlcV9vcGNvZGUocnBzLCB2YWwpOwo+ICsJZWxzZSBpZiAoSVNfVkFMTEVZ VklFVyhpOTE1KSkKPiArCQlyZXR1cm4gYnl0X2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKPiArCWVs c2UKPiArCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBHVF9GUkVRVUVOQ1lfTVVMVElQ TElFUik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZsdl9pbml0X2dwbGxfcmVmX2ZyZXEoc3Ry dWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwo+ICsJcnBzLT5ncGxsX3JlZl9mcmVxID0KPiArCQl2 bHZfZ2V0X2Nja19jbG9jayhpOTE1LCAiR1BMTCByZWYiLAo+ICsJCQkJICBDQ0tfR1BMTF9DTE9D S19DT05UUk9MLAo+ICsJCQkJICBpOTE1LT5jemNsa19mcmVxKTsKPiArCj4gKwlEUk1fREVCVUdf RFJJVkVSKCJHUExMIHJlZmVyZW5jZSBmcmVxOiAlZCBrSHpcbiIsIHJwcy0+Z3BsbF9yZWZfZnJl cSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZsdl9ycHNfaW5pdChzdHJ1Y3QgaW50ZWxfcnBz ICpycHMpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5 MTUocnBzKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmx2X2lvc2Zfc2JfZ2V0KGk5MTUsCj4gKwkJ CUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAo+ICsJCQlCSVQoVkxWX0lPU0ZfU0JfTkMpIHwKPiAr CQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOwo+ICsKPiArCXZsdl9pbml0X2dwbGxfcmVmX2ZyZXEo cnBzKTsKPiArCj4gKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChpOTE1LCBQVU5JVF9SRUdfR1BVX0ZS RVFfU1RTKTsKPiArCXN3aXRjaCAoKHZhbCA+PiA2KSAmIDMpIHsKPiArCWNhc2UgMDoKPiArCWNh c2UgMToKPiArCQlpOTE1LT5tZW1fZnJlcSA9IDgwMDsKPiArCQlicmVhazsKPiArCWNhc2UgMjoK PiArCQlpOTE1LT5tZW1fZnJlcSA9IDEwNjY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDM6Cj4gKwkJ aTkxNS0+bWVtX2ZyZXEgPSAxMzMzOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJRFJNX0RFQlVHX0RS SVZFUigiRERSIHNwZWVkOiAlZCBNSHpcbiIsIGk5MTUtPm1lbV9mcmVxKTsKPiArCj4gKwlycHMt Pm1heF9mcmVxID0gdmx2X3Jwc19tYXhfZnJlcShycHMpOwo+ICsJcnBzLT5ycDBfZnJlcSA9IHJw cy0+bWF4X2ZyZXE7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJtYXggR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSwKPiArCQkJ IHJwcy0+bWF4X2ZyZXEpOwo+ICsKPiArCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPSB2bHZfcnBzX3Jw ZV9mcmVxKHJwcyk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJSUGUgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSwK PiArCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOwo+ICsKPiArCXJwcy0+cnAxX2ZyZXEgPSB2bHZf cnBzX2d1YXJfZnJlcShycHMpOwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIgRnJlcSkg R1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMt PnJwMV9mcmVxKSwKPiArCQkJIHJwcy0+cnAxX2ZyZXEpOwo+ICsKPiArCXJwcy0+bWluX2ZyZXEg PSB2bHZfcnBzX21pbl9mcmVxKHJwcyk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJtaW4gR1BVIGZy ZXE6ICVkIE1IeiAoJXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9m cmVxKSwKPiArCQkJIHJwcy0+bWluX2ZyZXEpOwo+ICsKPiArCXZsdl9pb3NmX3NiX3B1dChpOTE1 LAo+ICsJCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKPiArCQkJQklUKFZMVl9JT1NGX1NCX05D KSB8Cj4gKwkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg Y2h2X3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcykKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSBycHNfdG9faTkxNShycHMpOwo+ICsJdTMyIHZhbDsKPiArCj4g Kwl2bHZfaW9zZl9zYl9nZXQoaTkxNSwKPiArCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Cj4g KwkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAo+ICsJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7Cj4g Kwo+ICsJdmx2X2luaXRfZ3BsbF9yZWZfZnJlcShycHMpOwo+ICsKPiArCXZhbCA9IHZsdl9jY2tf cmVhZChpOTE1LCBDQ0tfRlVTRV9SRUcpOwo+ICsKPiArCXN3aXRjaCAoKHZhbCA+PiAyKSAmIDB4 Nykgewo+ICsJY2FzZSAzOgo+ICsJCWk5MTUtPm1lbV9mcmVxID0gMjAwMDsKPiArCQlicmVhazsK PiArCWRlZmF1bHQ6Cj4gKwkJaTkxNS0+bWVtX2ZyZXEgPSAxNjAwOwo+ICsJCWJyZWFrOwo+ICsJ fQo+ICsJRFJNX0RFQlVHX0RSSVZFUigiRERSIHNwZWVkOiAlZCBNSHpcbiIsIGk5MTUtPm1lbV9m cmVxKTsKPiArCj4gKwlycHMtPm1heF9mcmVxID0gY2h2X3Jwc19tYXhfZnJlcShycHMpOwo+ICsJ cnBzLT5ycDBfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJtYXgg R1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMt Pm1heF9mcmVxKSwKPiArCQkJIHJwcy0+bWF4X2ZyZXEpOwo+ICsKPiArCXJwcy0+ZWZmaWNpZW50 X2ZyZXEgPSBjaHZfcnBzX3JwZV9mcmVxKHJwcyk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJSUGUg R1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAo+ICsJCQkgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMt PmVmZmljaWVudF9mcmVxKSwKPiArCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOwo+ICsKPiArCXJw cy0+cnAxX2ZyZXEgPSBjaHZfcnBzX2d1YXJfZnJlcShycHMpOwo+ICsJRFJNX0RFQlVHX0RSSVZF UigiUlAxKEd1YXIpIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKPiArCQkJIGludGVsX2dwdV9m cmVxKHJwcywgcnBzLT5ycDFfZnJlcSksCj4gKwkJCSBycHMtPnJwMV9mcmVxKTsKPiArCj4gKwly cHMtPm1pbl9mcmVxID0gY2h2X3Jwc19taW5fZnJlcShycHMpOwo+ICsJRFJNX0RFQlVHX0RSSVZF UigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKPiArCQkJIGludGVsX2dwdV9mcmVxKHJw cywgcnBzLT5taW5fZnJlcSksCj4gKwkJCSBycHMtPm1pbl9mcmVxKTsKPiArCj4gKwl2bHZfaW9z Zl9zYl9wdXQoaTkxNSwKPiArCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Cj4gKwkJCUJJVChW TFZfSU9TRl9TQl9OQykgfAo+ICsJCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7Cj4gKwo+ICsJV0FS Tl9PTkNFKChycHMtPm1heF9mcmVxIHwgcnBzLT5lZmZpY2llbnRfZnJlcSB8IHJwcy0+cnAxX2Zy ZXEgfAo+ICsJCSAgIHJwcy0+bWluX2ZyZXEpICYgMSwKPiArCQkgICJPZGQgR1BVIGZyZXEgdmFs dWVzXG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmx2X2MwX3JlYWQoc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlLCBzdHJ1Y3QgaW50ZWxfcnBzX2VpICplaSkKPiArewo+ICsJZWktPmt0 aW1lID0ga3RpbWVfZ2V0X3JhdygpOwo+ICsJZWktPnJlbmRlcl9jMCA9IGludGVsX3VuY29yZV9y ZWFkKHVuY29yZSwgVkxWX1JFTkRFUl9DMF9DT1VOVCk7Cj4gKwllaS0+bWVkaWFfYzAgPSBpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIFZMVl9NRURJQV9DMF9DT1VOVCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB1MzIgdmx2X3dhX2MwX2VpKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBtX2lpcikK PiArewo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gcnBzX3RvX3VuY29yZShycHMp Owo+ICsJY29uc3Qgc3RydWN0IGludGVsX3Jwc19laSAqcHJldiA9ICZycHMtPmVpOwo+ICsJc3Ry dWN0IGludGVsX3Jwc19laSBub3c7Cj4gKwl1MzIgZXZlbnRzID0gMDsKPiArCj4gKwlpZiAoKHBt X2lpciAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRCkgPT0gMCkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwl2bHZfYzBfcmVhZCh1bmNvcmUsICZub3cpOwo+ICsKPiArCWlmIChwcmV2LT5rdGltZSkg ewo+ICsJCXU2NCB0aW1lLCBjMDsKPiArCQl1MzIgcmVuZGVyLCBtZWRpYTsKPiArCj4gKwkJdGlt ZSA9IGt0aW1lX3VzX2RlbHRhKG5vdy5rdGltZSwgcHJldi0+a3RpbWUpOwo+ICsKPiArCQl0aW1l ICo9IHJwc190b19pOTE1KHJwcyktPmN6Y2xrX2ZyZXE7Cj4gKwo+ICsJCS8qIFdvcmtsb2FkIGNh biBiZSBzcGxpdCBiZXR3ZWVuIHJlbmRlciArIG1lZGlhLAo+ICsJCSAqIGUuZy4gU3dhcEJ1ZmZl cnMgYmVpbmcgYmxpdHRlZCBpbiBYIGFmdGVyIGJlaW5nIHJlbmRlcmVkIGluCj4gKwkJICogbWVz YS4gVG8gYWNjb3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNvbWJpbmUgYm90aCBlbmdpbmVzCj4g KwkJICogaW50byBvdXIgYWN0aXZpdHkgY291bnRlci4KPiArCQkgKi8KPiArCQlyZW5kZXIgPSBu b3cucmVuZGVyX2MwIC0gcHJldi0+cmVuZGVyX2MwOwo+ICsJCW1lZGlhID0gbm93Lm1lZGlhX2Mw IC0gcHJldi0+bWVkaWFfYzA7Cj4gKwkJYzAgPSBtYXgocmVuZGVyLCBtZWRpYSk7Cj4gKwkJYzAg Kj0gMTAwMCAqIDEwMCA8PCA4OyAvKiB0byB1c2VjcyBhbmQgc2NhbGUgdG8gdGhyZXNob2xkJSAq Lwo+ICsKPiArCQlpZiAoYzAgPiB0aW1lICogcnBzLT5wb3dlci51cF90aHJlc2hvbGQpCj4gKwkJ CWV2ZW50cyA9IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwo+ICsJCWVsc2UgaWYgKGMwIDwgdGlt ZSAqIHJwcy0+cG93ZXIuZG93bl90aHJlc2hvbGQpCj4gKwkJCWV2ZW50cyA9IEdFTjZfUE1fUlBf RE9XTl9USFJFU0hPTEQ7Cj4gKwl9Cj4gKwo+ICsJcnBzLT5laSA9IG5vdzsKPiArCXJldHVybiBl dmVudHM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJwc193b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKPiArewo+ICsJc3RydWN0IGludGVsX3JwcyAqcnBzID0gY29udGFpbmVyX29mKHdv cmssIHR5cGVvZigqcnBzKSwgd29yayk7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3Rv X2d0KHJwcyk7Cj4gKwlib29sIGNsaWVudF9ib29zdCA9IGZhbHNlOwo+ICsJaW50IG5ld19mcmVx LCBhZGosIG1pbiwgbWF4Owo+ICsJdTMyIHBtX2lpciA9IDA7Cj4gKwo+ICsJc3Bpbl9sb2NrX2ly cSgmZ3QtPmlycV9sb2NrKTsKPiArCXBtX2lpciA9IGZldGNoX2FuZF96ZXJvKCZycHMtPnBtX2lp cik7Cj4gKwljbGllbnRfYm9vc3QgPSBhdG9taWNfcmVhZCgmcnBzLT5udW1fd2FpdGVycyk7Cj4g KwlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gKwo+ICsJLyogTWFrZSBzdXJlIHdl IGRpZG4ndCBxdWV1ZSBhbnl0aGluZyB3ZSdyZSBub3QgZ29pbmcgdG8gcHJvY2Vzcy4gKi8KPiAr CWlmICgocG1faWlyICYgcnBzLT5wbV9ldmVudHMpID09IDAgJiYgIWNsaWVudF9ib29zdCkKPiAr CQlnb3RvIG91dDsKPiArCj4gKwltdXRleF9sb2NrKCZycHMtPmxvY2spOwo+ICsKPiArCXBtX2lp ciB8PSB2bHZfd2FfYzBfZWkocnBzLCBwbV9paXIpOwo+ICsKPiArCWFkaiA9IHJwcy0+bGFzdF9h ZGo7Cj4gKwluZXdfZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7Cj4gKwltaW4gPSBycHMtPm1pbl9mcmVx X3NvZnRsaW1pdDsKPiArCW1heCA9IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0Owo+ICsJaWYgKGNs aWVudF9ib29zdCkKPiArCQltYXggPSBycHMtPm1heF9mcmVxOwo+ICsJaWYgKGNsaWVudF9ib29z dCAmJiBuZXdfZnJlcSA8IHJwcy0+Ym9vc3RfZnJlcSkgewo+ICsJCW5ld19mcmVxID0gcnBzLT5i b29zdF9mcmVxOwo+ICsJCWFkaiA9IDA7Cj4gKwl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1f UlBfVVBfVEhSRVNIT0xEKSB7Cj4gKwkJaWYgKGFkaiA+IDApCj4gKwkJCWFkaiAqPSAyOwo+ICsJ CWVsc2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLwo+ICsJCQlhZGogPSBJU19D SEVSUllWSUVXKGd0LT5pOTE1KSA/IDIgOiAxOwo+ICsKPiArCQlpZiAobmV3X2ZyZXEgPj0gcnBz LT5tYXhfZnJlcV9zb2Z0bGltaXQpCj4gKwkJCWFkaiA9IDA7Cj4gKwl9IGVsc2UgaWYgKGNsaWVu dF9ib29zdCkgewo+ICsJCWFkaiA9IDA7Cj4gKwl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1f UlBfRE9XTl9USU1FT1VUKSB7Cj4gKwkJaWYgKHJwcy0+Y3VyX2ZyZXEgPiBycHMtPmVmZmljaWVu dF9mcmVxKQo+ICsJCQluZXdfZnJlcSA9IHJwcy0+ZWZmaWNpZW50X2ZyZXE7Cj4gKwkJZWxzZSBp ZiAocnBzLT5jdXJfZnJlcSA+IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQo+ICsJCQluZXdfZnJl cSA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0Owo+ICsJCWFkaiA9IDA7Cj4gKwl9IGVsc2UgaWYg KHBtX2lpciAmIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQpIHsKPiArCQlpZiAoYWRqIDwgMCkK PiArCQkJYWRqICo9IDI7Cj4gKwkJZWxzZSAvKiBDSFYgbmVlZHMgZXZlbiBlbmNvZGUgdmFsdWVz ICovCj4gKwkJCWFkaiA9IElTX0NIRVJSWVZJRVcoZ3QtPmk5MTUpID8gLTIgOiAtMTsKPiArCj4g KwkJaWYgKG5ld19mcmVxIDw9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0KQo+ICsJCQlhZGogPSAw Owo+ICsJfSBlbHNlIHsgLyogdW5rbm93biBldmVudCAqLwo+ICsJCWFkaiA9IDA7Cj4gKwl9Cj4g Kwo+ICsJcnBzLT5sYXN0X2FkaiA9IGFkajsKPiArCj4gKwkvKgo+ICsJICogTGltaXQgZGVib29z dGluZyBhbmQgYm9vc3RpbmcgdG8ga2VlcCBvdXJzZWx2ZXMgYXQgdGhlIGV4dHJlbWVzCj4gKwkg KiB3aGVuIGluIHRoZSByZXNwZWN0aXZlIHBvd2VyIG1vZGVzIChpLmUuIHNsb3dseSBkZWNyZWFz ZSBmcmVxdWVuY2llcwo+ICsJICogd2hpbGUgaW4gdGhlIEhJR0hfUE9XRVIgem9uZSBhbmQgc2xv d2x5IGluY3JlYXNlIGZyZXF1ZW5jaWVzIHdoaWxlCj4gKwkgKiBpbiB0aGUgTE9XX1BPV0VSIHpv bmUpLiBPbiBpZGxlLCB3ZSB3aWxsIGhpdCB0aGUgdGltZW91dCBhbmQgZHJvcAo+ICsJICogdG8g dGhlIG5leHQgbGV2ZWwgcXVpY2tseSwgYW5kIGNvbnZlcnNlbHkgaWYgYnVzeSB3ZSBleHBlY3Qg dG8KPiArCSAqIGhpdCBhIHdhaXRib29zdCBhbmQgcmFwaWRseSBzd2l0Y2ggaW50byBtYXggcG93 ZXIuCj4gKwkgKi8KPiArCWlmICgoYWRqIDwgMCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gSElHSF9Q T1dFUikgfHwKPiArCSAgICAoYWRqID4gMCAmJiBycHMtPnBvd2VyLm1vZGUgPT0gTE9XX1BPV0VS KSkKPiArCQlycHMtPmxhc3RfYWRqID0gMDsKPiArCj4gKwkvKiBzeXNmcyBmcmVxdWVuY3kgaW50 ZXJmYWNlcyBtYXkgaGF2ZSBzbnVjayBpbiB3aGlsZSBzZXJ2aWNpbmcgdGhlCj4gKwkgKiBpbnRl cnJ1cHQKPiArCSAqLwo+ICsJbmV3X2ZyZXEgKz0gYWRqOwo+ICsJbmV3X2ZyZXEgPSBjbGFtcF90 KGludCwgbmV3X2ZyZXEsIG1pbiwgbWF4KTsKPiArCj4gKwlpZiAoaW50ZWxfcnBzX3NldChycHMs IG5ld19mcmVxKSkgewo+ICsJCURSTV9ERUJVR19EUklWRVIoIkZhaWxlZCB0byBzZXQgbmV3IEdQ VSBmcmVxdWVuY3lcbiIpOwo+ICsJCXJwcy0+bGFzdF9hZGogPSAwOwo+ICsJfQo+ICsKPiArCW11 dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKPiArCj4gK291dDoKPiArCXNwaW5fbG9ja19pcnEoJmd0 LT5pcnFfbG9jayk7Cj4gKwlnZW42X2d0X3BtX3VubWFza19pcnEoZ3QsIHJwcy0+cG1fZXZlbnRz KTsKPiArCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiArfQo+ICsKPiArdm9pZCBn ZW4xMV9ycHNfaXJxX2hhbmRsZXIoc3RydWN0IGludGVsX3JwcyAqcnBzLCB1MzIgcG1faWlyKQo+ ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7Cj4gKwljb25zdCB1 MzIgZXZlbnRzID0gcnBzLT5wbV9ldmVudHMgJiBwbV9paXI7Cj4gKwo+ICsJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZ3QtPmlycV9sb2NrKTsKPiArCj4gKwlpZiAodW5saWtlbHkoIWV2ZW50cykpCj4g KwkJcmV0dXJuOwo+ICsKPiArCWdlbjZfZ3RfcG1fbWFza19pcnEoZ3QsIGV2ZW50cyk7Cj4gKwo+ ICsJcnBzLT5wbV9paXIgfD0gZXZlbnRzOwo+ICsJc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsK PiArfQo+ICsKPiArdm9pZCBnZW42X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpy cHMsIHUzMiBwbV9paXIpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0g cnBzX3RvX2k5MTUocnBzKTsKPiArCj4gKwlpZiAocG1faWlyICYgcnBzLT5wbV9ldmVudHMpIHsK PiArCQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gcnBzX3RvX2d0KHJwcyk7Cj4gKwo+ICsJCXNwaW5f bG9jaygmZ3QtPmlycV9sb2NrKTsKPiArCQlnZW42X2d0X3BtX21hc2tfaXJxKGd0LCBwbV9paXIg JiBycHMtPnBtX2V2ZW50cyk7Cj4gKwkJcnBzLT5wbV9paXIgfD0gcG1faWlyICYgcnBzLT5wbV9l dmVudHM7Cj4gKwkJc2NoZWR1bGVfd29yaygmcnBzLT53b3JrKTsKPiArCQlzcGluX3VubG9jaygm Z3QtPmlycV9sb2NrKTsKPiArCX0KPiArCj4gKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDgpCj4g KwkJcmV0dXJuOwo+ICsKPiArCWlmIChwbV9paXIgJiBQTV9WRUJPWF9VU0VSX0lOVEVSUlVQVCkK PiArCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGk5MTUtPmVuZ2luZVtWRUNTMF0pOwo+ ICsKPiArCWlmIChwbV9paXIgJiBQTV9WRUJPWF9DU19FUlJPUl9JTlRFUlJVUFQpCj4gKwkJRFJN X0RFQlVHKCJDb21tYW5kIHBhcnNlciBlcnJvciwgcG1faWlyIDB4JTA4eFxuIiwgcG1faWlyKTsK PiArfQo+ICsKPiArdm9pZCBnZW41X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpy cHMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHJwc190b191bmNvcmUo cnBzKTsKPiArCXUzMiBidXN5X3VwLCBidXN5X2Rvd24sIG1heF9hdmcsIG1pbl9hdmc7Cj4gKwl1 OCBuZXdfZnJlcTsKPiArCj4gKwlzcGluX2xvY2soJm1jaGRldl9sb2NrKTsKPiArCj4gKwlpbnRl bF91bmNvcmVfd3JpdGUxNih1bmNvcmUsCj4gKwkJCSAgICAgTUVNSU5UUlNUUywKPiArCQkJICAg ICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTUlOVFJTVFMpKTsKPiArCj4gKwlpbnRlbF91 bmNvcmVfd3JpdGUxNih1bmNvcmUsIE1FTUlOVFJTVFMsIE1FTUlOVF9FVkFMX0NIRyk7Cj4gKwli dXN5X3VwID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ1BSRVZCU1lUVVBBVkcpOwo+ICsJ YnVzeV9kb3duID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ1BSRVZCU1lURE5BVkcpOwo+ ICsJbWF4X2F2ZyA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUFYQVZHKTsKPiArCW1p bl9hdmcgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDQk1JTkFWRyk7Cj4gKwo+ICsJLyog SGFuZGxlIFJDUyBjaGFuZ2UgcmVxdWVzdCBmcm9tIGh3ICovCj4gKwluZXdfZnJlcSA9IHJwcy0+ Y3VyX2ZyZXE7Cj4gKwlpZiAoYnVzeV91cCA+IG1heF9hdmcpCj4gKwkJbmV3X2ZyZXErKzsKPiAr CWVsc2UgaWYgKGJ1c3lfZG93biA8IG1pbl9hdmcpCj4gKwkJbmV3X2ZyZXEtLTsKPiArCW5ld19m cmVxID0gY2xhbXAobmV3X2ZyZXEsCj4gKwkJCSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCwKPiAr CQkJIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KTsKPiArCj4gKwlpZiAobmV3X2ZyZXEgIT0gcnBz LT5jdXJfZnJlcSAmJiBnZW41X3Jwc19zZXQocnBzLCBuZXdfZnJlcSkpCj4gKwkJcnBzLT5jdXJf ZnJlcSA9IG5ld19mcmVxOwo+ICsKPiArCXNwaW5fdW5sb2NrKCZtY2hkZXZfbG9jayk7Cj4gK30K PiArCj4gK3ZvaWQgaW50ZWxfcnBzX2luaXQoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHJwc190b19pOTE1KHJwcyk7Cj4gKwo+ ICsJbXV0ZXhfaW5pdCgmcnBzLT5sb2NrKTsKPiArCW11dGV4X2luaXQoJnJwcy0+cG93ZXIubXV0 ZXgpOwo+ICsKPiArCUlOSVRfV09SSygmcnBzLT53b3JrLCBycHNfd29yayk7Cj4gKwo+ICsJYXRv bWljX3NldCgmcnBzLT5udW1fd2FpdGVycywgMCk7Cj4gKwo+ICsJaWYgKElTX0NIRVJSWVZJRVco aTkxNSkpCj4gKwkJY2h2X3Jwc19pbml0KHJwcyk7Cj4gKwllbHNlIGlmIChJU19WQUxMRVlWSUVX KGk5MTUpKQo+ICsJCXZsdl9ycHNfaW5pdChycHMpOwo+ICsJZWxzZSBpZiAoSU5URUxfR0VOKGk5 MTUpID49IDYpCj4gKwkJZ2VuNl9ycHNfaW5pdChycHMpOwo+ICsJZWxzZSBpZiAoSVNfSVJPTkxB S0VfTShpOTE1KSkKPiArCQlnZW41X3Jwc19pbml0KHJwcyk7Cj4gKwo+ICsJLyogRGVyaXZlIGlu aXRpYWwgdXNlciBwcmVmZXJlbmNlcy9saW1pdHMgZnJvbSB0aGUgaGFyZHdhcmUgbGltaXRzICov Cj4gKwlycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWF4X2ZyZXE7Cj4gKwlycHMtPm1p bl9mcmVxX3NvZnRsaW1pdCA9IHJwcy0+bWluX2ZyZXE7Cj4gKwo+ICsJLyogQWZ0ZXIgc2V0dGlu ZyBtYXgtc29mdGxpbWl0LCBmaW5kIHRoZSBvdmVyY2xvY2sgbWF4IGZyZXEgKi8KPiArCWlmIChJ U19HRU4oaTkxNSwgNikgfHwgSVNfSVZZQlJJREdFKGk5MTUpIHx8IElTX0hBU1dFTEwoaTkxNSkp IHsKPiArCQl1MzIgcGFyYW1zID0gMDsKPiArCj4gKwkJc2FuZHlicmlkZ2VfcGNvZGVfcmVhZChp OTE1LCBHRU42X1JFQURfT0NfUEFSQU1TLAo+ICsJCQkJICAgICAgICZwYXJhbXMsIE5VTEwpOwo+ ICsJCWlmIChwYXJhbXMgJiBCSVQoMzEpKSB7IC8qIE9DIHN1cHBvcnRlZCAqLwo+ICsJCQlEUk1f REVCVUdfRFJJVkVSKCJPdmVyY2xvY2tpbmcgc3VwcG9ydGVkLCBtYXg6ICVkTUh6LCBvdmVyY2xv Y2s6ICVkTUh6XG4iLAo+ICsJCQkJCSAocnBzLT5tYXhfZnJlcSAmIDB4ZmYpICogNTAsCj4gKwkJ CQkJIChwYXJhbXMgJiAweGZmKSAqIDUwKTsKPiArCQkJcnBzLT5tYXhfZnJlcSA9IHBhcmFtcyAm IDB4ZmY7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIEZpbmFsbHkgYWxsb3cgdXMgdG8gYm9vc3Qg dG8gbWF4IGJ5IGRlZmF1bHQgKi8KPiArCXJwcy0+Ym9vc3RfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7 Cj4gKwlycHMtPmlkbGVfZnJlcSA9IHJwcy0+bWluX2ZyZXE7Cj4gKwlycHMtPmN1cl9mcmVxID0g cnBzLT5pZGxlX2ZyZXE7Cj4gKwo+ICsJcnBzLT5wbV9pbnRybXNrX21ieiA9IDA7Cj4gKwo+ICsJ LyoKPiArCSAqIFNOQixJVkIsSFNXIGNhbiB3aGlsZSBWTFYsQ0hWIG1heSBoYXJkIGhhbmcgb24g bG9vcGluZyBiYXRjaGJ1ZmZlcgo+ICsJICogaWYgR0VONl9QTV9VUF9FSV9FWFBJUkVEIGlzIG1h c2tlZC4KPiArCSAqCj4gKwkgKiBUT0RPOiB2ZXJpZnkgaWYgdGhpcyBjYW4gYmUgcmVwcm9kdWNl ZCBvbiBWTFYsQ0hWLgo+ICsJICovCj4gKwlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDcpCj4gKwkJ cnBzLT5wbV9pbnRybXNrX21ieiB8PSBHRU42X1BNX1JQX1VQX0VJX0VYUElSRUQ7Cj4gKwo+ICsJ aWYgKElOVEVMX0dFTihpOTE1KSA+PSA4KQo+ICsJCXJwcy0+cG1faW50cm1za19tYnogfD0gR0VO OF9QTUlOVFJfRElTQUJMRV9SRURJUkVDVF9UT19HVUM7Cj4gK30KPiArCj4gK3UzMiBpbnRlbF9n ZXRfY2FnZihzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIHUzMiBycHN0YXQpCj4gK3sKPiArCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnBzX3RvX2k5MTUocnBzKTsKPiArCXUzMiBjYWdm Owo+ICsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOSkKPiArCQljYWdmID0gKHJwc3RhdCAm IEdFTjlfQ0FHRl9NQVNLKSA+PiBHRU45X0NBR0ZfU0hJRlQ7Cj4gKwllbHNlIGlmIChJU19IQVNX RUxMKGk5MTUpIHx8IElTX0JST0FEV0VMTChpOTE1KSkKPiArCQljYWdmID0gKHJwc3RhdCAmIEhT V19DQUdGX01BU0spID4+IEhTV19DQUdGX1NISUZUOwo+ICsJZWxzZQo+ICsJCWNhZ2YgPSAocnBz dGF0ICYgR0VONl9DQUdGX01BU0spID4+IEdFTjZfQ0FHRl9TSElGVDsKPiArCj4gKwlyZXR1cm4g IGNhZ2Y7Cj4gK30KPiArCj4gKy8qIEV4dGVybmFsIGludGVyZmFjZSBmb3IgaW50ZWxfaXBzLmtv ICovCj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgX19yY3UgKmlwc19tY2hk ZXY7Cj4gKwo+ICsvKioKPiArICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhhdCB0aGUg aTkxNSBkcml2ZXIgaXMgbm93IGxvYWRlZCwgaWYKPiArICogSVBTIGdvdCBsb2FkZWQgZmlyc3Qu Cj4gKyAqCj4gKyAqIFRoaXMgYXdrd2FyZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIgbW9kdWxl IGhhcyB0byBkZXBlbmQgb24gdGhlCj4gKyAqIG90aGVyIGluIG9yZGVyIGZvciBJUFMgdG8gZG8g dGhlIGFwcHJvcHJpYXRlIGNvbW11bmljYXRpb24gb2YKPiArICogR1BVIHR1cmJvIGxpbWl0cyB0 byBpOTE1Lgo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiAraXBzX3BpbmdfZm9yX2k5MTVfbG9hZCh2 b2lkKQo+ICt7Cj4gKwl2b2lkICgqbGluaykodm9pZCk7Cj4gKwo+ICsJbGluayA9IHN5bWJvbF9n ZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOwo+ICsJaWYgKGxpbmspIHsKPiArCQlsaW5rKCk7 Cj4gKwkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1X2RyaXZlcik7Cj4gKwl9Cj4gK30KPiAr Cj4gK3ZvaWQgaW50ZWxfcnBzX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMp Cj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBycHNfdG9fZ3QocnBzKTsKPiArCj4gKwkv Kgo+ICsJICogV2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFydCB3aXRoIGludGVsLWlw cyBvbmNlIGV2ZXJ5dGhpbmcgaXMKPiArCSAqIHNldCB1cCwgdG8gYXZvaWQgaW50ZWwtaXBzIHNu ZWFraW5nIGluIGFuZCByZWFkaW5nIGJvZ3VzIHZhbHVlcy4KPiArCSAqLwo+ICsJaWYgKElTX0dF TihndC0+aTkxNSwgNSkpIHsKPiArCQlyY3VfYXNzaWduX3BvaW50ZXIoaXBzX21jaGRldiwgZ3Qt Pmk5MTUpOwo+ICsJCWlwc19waW5nX2Zvcl9pOTE1X2xvYWQoKTsKPiArCX0KPiArfQo+ICsKPiAr dm9pZCBpbnRlbF9ycHNfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBzKQo+ ICt7Cj4gKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBzX21jaGRldiwgTlVMTCk7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbWNoZGV2X2dldCh2b2lkKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPiArCj4gKwlyY3VfcmVhZF9sb2NrKCk7 Cj4gKwlpOTE1ID0gcmN1X2RlcmVmZXJlbmNlKGlwc19tY2hkZXYpOwo+ICsJaWYgKCFrcmVmX2dl dF91bmxlc3NfemVybygmaTkxNS0+ZHJtLnJlZikpCj4gKwkJaTkxNSA9IE5VTEw7Cj4gKwlyY3Vf cmVhZF91bmxvY2soKTsKPiArCj4gKwlyZXR1cm4gaTkxNTsKPiArfQo+ICsKPiArLyoqCj4gKyAq IGk5MTVfcmVhZF9tY2hfdmFsIC0gcmV0dXJuIHZhbHVlIGZvciBJUFMgdXNlCj4gKyAqCj4gKyAq IENhbGN1bGF0ZSBhbmQgcmV0dXJuIGEgdmFsdWUgZm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3 aGVuIGRlY2lkaW5nIHdoZXRoZXIKPiArICogd2UgaGF2ZSB0aGVybWFsIGFuZCBwb3dlciBoZWFk cm9vbSB0byBpbmNyZWFzZSBDUFUgb3IgR1BVIHBvd2VyIGJ1ZGdldC4KPiArICovCj4gK3Vuc2ln bmVkIGxvbmcgaTkxNV9yZWFkX21jaF92YWwodm9pZCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTU7Cj4gKwl1bnNpZ25lZCBsb25nIGNoaXBzZXRfdmFsID0gMDsKPiArCXVu c2lnbmVkIGxvbmcgZ3JhcGhpY3NfdmFsID0gMDsKPiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVm Owo+ICsKPiArCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Cj4gKwlpZiAoIWk5MTUpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtl cmVmKSB7Cj4gKwkJc3RydWN0IGludGVsX2lwcyAqaXBzID0gJmk5MTUtPmd0LnJwcy5pcHM7Cj4g Kwo+ICsJCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiArCQljaGlwc2V0X3ZhbCA9IF9f aXBzX2NoaXBzZXRfdmFsKGlwcyk7Cj4gKwkJZ3JhcGhpY3NfdmFsID0gX19pcHNfZ2Z4X3ZhbChp cHMpOwo+ICsJCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+ICsJfQo+ICsKPiArCWRy bV9kZXZfcHV0KCZpOTE1LT5kcm0pOwo+ICsJcmV0dXJuIGNoaXBzZXRfdmFsICsgZ3JhcGhpY3Nf dmFsOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVhZF9tY2hfdmFsKTsKPiArCj4g Ky8qKgo+ICsgKiBpOTE1X2dwdV9yYWlzZSAtIHJhaXNlIEdQVSBmcmVxdWVuY3kgbGltaXQKPiAr ICoKPiArICogUmFpc2UgdGhlIGxpbWl0OyBJUFMgaW5kaWNhdGVzIHdlIGhhdmUgdGhlcm1hbCBo ZWFkcm9vbS4KPiArICovCj4gK2Jvb2wgaTkxNV9ncHVfcmFpc2Uodm9pZCkKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7Cj4g Kwo+ICsJaTkxNSA9IG1jaGRldl9nZXQoKTsKPiArCWlmICghaTkxNSkKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwo+ICsJcnBzID0gJmk5MTUtPmd0LnJwczsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZt Y2hkZXZfbG9jayk7Cj4gKwlpZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPCBycHMtPm1heF9m cmVxKQo+ICsJCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0Kys7Cj4gKwlzcGluX3VubG9ja19pcnEo Jm1jaGRldl9sb2NrKTsKPiArCj4gKwlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKPiArCXJldHVy biB0cnVlOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X3JhaXNlKTsKPiArCj4g Ky8qKgo+ICsgKiBpOTE1X2dwdV9sb3dlciAtIGxvd2VyIEdQVSBmcmVxdWVuY3kgbGltaXQKPiAr ICoKPiArICogSVBTIGluZGljYXRlcyB3ZSdyZSBjbG9zZSB0byBhIHRoZXJtYWwgbGltaXQsIHNv IHRocm90dGxlIGJhY2sgdGhlIEdQVQo+ICsgKiBmcmVxdWVuY3kgbWF4aW11bS4KPiArICovCj4g K2Jvb2wgaTkxNV9ncHVfbG93ZXIodm9pZCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7Cj4gKwo+ICsJaTkxNSA9IG1jaGRl dl9nZXQoKTsKPiArCWlmICghaTkxNSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcnBzID0g Jmk5MTUtPmd0LnJwczsKPiArCj4gKwlzcGluX2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gKwlp ZiAocnBzLT5tYXhfZnJlcV9zb2Z0bGltaXQgPiBycHMtPm1pbl9mcmVxKQo+ICsJCXJwcy0+bWF4 X2ZyZXFfc29mdGxpbWl0LS07Cj4gKwlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiAr Cj4gKwlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X2xvd2VyKTsKPiArCj4gKy8qKgo+ICsgKiBpOTE1X2dw dV9idXN5IC0gaW5kaWNhdGUgR1BVIGJ1c2luZXNzIHRvIElQUwo+ICsgKgo+ICsgKiBUZWxsIHRo ZSBJUFMgZHJpdmVyIHdoZXRoZXIgb3Igbm90IHRoZSBHUFUgaXMgYnVzeS4KPiArICovCj4gK2Jv b2wgaTkxNV9ncHVfYnVzeSh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNTsKPiArCWJvb2wgcmV0Owo+ICsKPiArCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Cj4gKwlpZiAo IWk5MTUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldCA9IGk5MTUtPmd0LmF3YWtlOwo+ ICsKPiArCWRybV9kZXZfcHV0KCZpOTE1LT5kcm0pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtF WFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9idXN5KTsKPiArCj4gKy8qKgo+ICsgKiBpOTE1X2dw dV90dXJib19kaXNhYmxlIC0gZGlzYWJsZSBncmFwaGljcyB0dXJibwo+ICsgKgo+ICsgKiBEaXNh YmxlIGdyYXBoaWNzIHR1cmJvIGJ5IHJlc2V0dGluZyB0aGUgbWF4IGZyZXF1ZW5jeSBhbmQgc2V0 dGluZyB0aGUKPiArICogY3VycmVudCBmcmVxdWVuY3kgdG8gdGhlIGRlZmF1bHQuCj4gKyAqLwo+ ICtib29sIGk5MTVfZ3B1X3R1cmJvX2Rpc2FibGUodm9pZCkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHM7Cj4gKwlib29sIHJl dDsKPiArCj4gKwlpOTE1ID0gbWNoZGV2X2dldCgpOwo+ICsJaWYgKCFpOTE1KQo+ICsJCXJldHVy biBmYWxzZTsKPiArCj4gKwlycHMgPSAmaTkxNS0+Z3QucnBzOwo+ICsKPiArCXNwaW5fbG9ja19p cnEoJm1jaGRldl9sb2NrKTsKPiArCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5taW5f ZnJlcTsKPiArCXJldCA9IGdlbjVfcnBzX3NldCgmaTkxNS0+Z3QucnBzLCBycHMtPm1pbl9mcmVx KTsKPiArCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+ICsKPiArCWRybV9kZXZfcHV0 KCZpOTE1LT5kcm0pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChp OTE1X2dwdV90dXJib19kaXNhYmxlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfcnBzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHMuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi45OTdhNGI0ZTAyMDcK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBz LmgKPiBAQCAtMCwwICsxLDM3IEBACj4gKy8qCj4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBNSVQKPiArICoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiAr ICovCj4gKwo+ICsjaWZuZGVmIElOVEVMX1JQU19ICj4gKyNkZWZpbmUgSU5URUxfUlBTX0gKPiAr Cj4gKyNpbmNsdWRlICJpbnRlbF9ycHNfdHlwZXMuaCIKPiArCj4gK3N0cnVjdCBpOTE1X3JlcXVl c3Q7Cj4gKwo+ICt2b2lkIGludGVsX3Jwc19pbml0KHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cj4g Kwo+ICt2b2lkIGludGVsX3Jwc19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAqcnBz KTsKPiArdm9pZCBpbnRlbF9ycHNfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGludGVsX3JwcyAq cnBzKTsKPiArCj4gK3ZvaWQgaW50ZWxfcnBzX2VuYWJsZShzdHJ1Y3QgaW50ZWxfcnBzICpycHMp Owo+ICt2b2lkIGludGVsX3Jwc19kaXNhYmxlKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cj4gKwo+ ICt2b2lkIGludGVsX3Jwc19wYXJrKHN0cnVjdCBpbnRlbF9ycHMgKnJwcyk7Cj4gK3ZvaWQgaW50 ZWxfcnBzX3VucGFyayhzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwo+ICt2b2lkIGludGVsX3Jwc19i b29zdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSk7Cj4gKwo+ICtpbnQgaW50ZWxfcnBzX3NldChz dHJ1Y3QgaW50ZWxfcnBzICpycHMsIHU4IHZhbCk7Cj4gK3ZvaWQgaW50ZWxfcnBzX21hcmtfaW50 ZXJhY3RpdmUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBib29sIGludGVyYWN0aXZlKTsKPiArCj4g K2ludCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgaW50ZWxfcnBzICpycHMsIGludCB2YWwpOwo+ICtp bnQgaW50ZWxfZnJlcV9vcGNvZGUoc3RydWN0IGludGVsX3JwcyAqcnBzLCBpbnQgdmFsKTsKPiAr dTMyIGludGVsX2dldF9jYWdmKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHJwc3RhdDEpOwo+ ICsKPiArdm9pZCBnZW41X3Jwc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfcnBzICpycHMpOwo+ ICt2b2lkIGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJwcywgdTMyIHBt X2lpcik7Cj4gK3ZvaWQgZ2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ycHMgKnJw cywgdTMyIHBtX2lpcik7Cj4gKwo+ICsjZW5kaWYgLyogSU5URUxfUlBTX0ggKi8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzX3R5cGVzLmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ycHNfdHlwZXMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40MGViMWZiNjUxZTcKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcnBzX3R5cGVzLmgKPiBAQCAtMCwwICsx LDkzIEBACj4gKy8qCj4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArICoKPiAr ICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaWZu ZGVmIElOVEVMX1JQU19UWVBFU19ICj4gKyNkZWZpbmUgSU5URUxfUlBTX1RZUEVTX0gKPiArCj4g KyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgo+ICsKPiArc3RydWN0IGludGVsX2lwcyB7Cj4g Kwl1NjQgbGFzdF9jb3VudDE7Cj4gKwl1bnNpZ25lZCBsb25nIGxhc3RfdGltZTE7Cj4gKwl1bnNp Z25lZCBsb25nIGNoaXBzZXRfcG93ZXI7Cj4gKwl1NjQgbGFzdF9jb3VudDI7Cj4gKwl1NjQgbGFz dF90aW1lMjsKPiArCXVuc2lnbmVkIGxvbmcgZ2Z4X3Bvd2VyOwo+ICsJdTggY29ycjsKPiArCj4g KwlpbnQgYywgbTsKPiArfTsKPiArCj4gK3N0cnVjdCBpbnRlbF9ycHNfZWkgewo+ICsJa3RpbWVf dCBrdGltZTsKPiArCXUzMiByZW5kZXJfYzA7Cj4gKwl1MzIgbWVkaWFfYzA7Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgaW50ZWxfcnBzIHsKPiArCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyBl bmFibGluZyBhbmQgdGhlIHdvcmtlciAqLwo+ICsKPiArCS8qCj4gKwkgKiB3b3JrLCBpbnRlcnJ1 cHRzX2VuYWJsZWQgYW5kIHBtX2lpciBhcmUgcHJvdGVjdGVkIGJ5Cj4gKwkgKiBkZXZfcHJpdi0+ aXJxX2xvY2sKPiArCSAqLwo+ICsJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cj4gKwlib29sIGVu YWJsZWQ7Cj4gKwlib29sIGFjdGl2ZTsKPiArCXUzMiBwbV9paXI7Cj4gKwo+ICsJLyogUE0gaW50 ZXJydXB0IGJpdHMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgbWFza2VkICovCj4gKwl1MzIgcG1faW50 cm1za19tYno7Cj4gKwl1MzIgcG1fZXZlbnRzOwo+ICsKPiArCS8qIEZyZXF1ZW5jaWVzIGFyZSBz dG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0gZGVwZW5kZW50IG11bHRpcGxlcy4KPiArCSAq IEluIG90aGVyIHdvcmRzLCAqX2ZyZXEgbmVlZHMgdG8gYmUgbXVsdGlwbGllZCBieSBYIHRvIGJl IGludGVyZXN0aW5nLgo+ICsJICogU29mdCBsaW1pdHMgYXJlIHRob3NlIHdoaWNoIGFyZSB1c2Vk IGZvciB0aGUgZHluYW1pYyByZWNsb2NraW5nIGRvbmUKPiArCSAqIGJ5IHRoZSBkcml2ZXIgKHJh aXNlIGZyZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBhbmQgbG93ZXIgZm9yCj4gKwkgKiBs aWdodGVyIGxvYWRzKS4gSGFyZCBsaW1pdHMgYXJlIHRob3NlIGltcG9zZWQgYnkgdGhlIGhhcmR3 YXJlLgo+ICsJICoKPiArCSAqIEEgZGlzdGluY3Rpb24gaXMgbWFkZSBmb3Igb3ZlcmNsb2NraW5n LCB3aGljaCBpcyBuZXZlciBlbmFibGVkIGJ5Cj4gKwkgKiBkZWZhdWx0LCBhbmQgaXMgY29uc2lk ZXJlZCB0byBiZSBhYm92ZSB0aGUgaGFyZCBsaW1pdCBpZiBpdCdzCj4gKwkgKiBwb3NzaWJsZSBh dCBhbGwuCj4gKwkgKi8KPiArCXU4IGN1cl9mcmVxOwkJLyogQ3VycmVudCBmcmVxdWVuY3kgKGNh Y2hlZCwgbWF5IG5vdCA9PSBIVykgKi8KPiArCXU4IGxhc3RfZnJlcTsJCS8qIExhc3Qgc3dxcmVx IGZyZXF1ZW5jeSAqLwo+ICsJdTggbWluX2ZyZXFfc29mdGxpbWl0OwkvKiBNaW5pbXVtIGZyZXF1 ZW5jeSBwZXJtaXR0ZWQgYnkgdGhlIGRyaXZlciAqLwo+ICsJdTggbWF4X2ZyZXFfc29mdGxpbWl0 OwkvKiBNYXggZnJlcXVlbmN5IHBlcm1pdHRlZCBieSB0aGUgZHJpdmVyICovCj4gKwl1OCBtYXhf ZnJlcTsJCS8qIE1heGltdW0gZnJlcXVlbmN5LCBSUDAgaWYgbm90IG92ZXJjbG9ja2luZyAqLwo+ ICsJdTggbWluX2ZyZXE7CQkvKiBBS0EgUlBuLiBNaW5pbXVtIGZyZXF1ZW5jeSAqLwo+ICsJdTgg Ym9vc3RfZnJlcTsJCS8qIEZyZXF1ZW5jeSB0byByZXF1ZXN0IHdoZW4gd2FpdCBib29zdGluZyAq Lwo+ICsJdTggaWRsZV9mcmVxOwkJLyogRnJlcXVlbmN5IHRvIHJlcXVlc3Qgd2hlbiB3ZSBhcmUg aWRsZSAqLwo+ICsJdTggZWZmaWNpZW50X2ZyZXE7CS8qIEFLQSBSUGUuIFByZS1kZXRlcm1pbmVk IGJhbGFuY2VkIGZyZXF1ZW5jeSAqLwo+ICsJdTggcnAxX2ZyZXE7CQkvKiAibGVzcyB0aGFuIiBS UDAgcG93ZXIvZnJlcWVuY3kgKi8KPiArCXU4IHJwMF9mcmVxOwkJLyogTm9uLW92ZXJjbG9ja2Vk IG1heCBmcmVxdWVuY3kuICovCj4gKwl1MTYgZ3BsbF9yZWZfZnJlcTsJLyogdmx2L2NodiBHUExM IHJlZmVyZW5jZSBmcmVxdWVuY3kgKi8KPiArCj4gKwlpbnQgbGFzdF9hZGo7Cj4gKwo+ICsJc3Ry dWN0IHsKPiArCQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Cj4gKwo+ICsJCWVudW0geyBMT1dfUE9XRVIs IEJFVFdFRU4sIEhJR0hfUE9XRVIgfSBtb2RlOwo+ICsJCXVuc2lnbmVkIGludCBpbnRlcmFjdGl2 ZTsKPiArCj4gKwkJdTggdXBfdGhyZXNob2xkOyAvKiBDdXJyZW50ICVidXN5IHJlcXVpcmVkIHRv IHVwbG9jayAqLwo+ICsJCXU4IGRvd25fdGhyZXNob2xkOyAvKiBDdXJyZW50ICVidXN5IHJlcXVp cmVkIHRvIGRvd25jbG9jayAqLwo+ICsJfSBwb3dlcjsKPiArCj4gKwlhdG9taWNfdCBudW1fd2Fp dGVyczsKPiArCWF0b21pY190IGJvb3N0czsKPiArCj4gKwkvKiBtYW51YWwgd2EgcmVzaWRlbmN5 IGNhbGN1bGF0aW9ucyAqLwo+ICsJc3RydWN0IGludGVsX3Jwc19laSBlaTsKPiArCXN0cnVjdCBp bnRlbF9pcHMgaXBzOwo+ICt9Owo+ICsKPiArI2VuZGlmIC8qIElOVEVMX1JQU19UWVBFU19IICov Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xsYy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbGxjLmMKPiBpbmRleCBhNzA1Nzc4NWU0 MjAuLmZkMzc3MGU0OGFjNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9sbGMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xs Yy5jCj4gQEAgLTYsNiArNiw3IEBACj4gIAo+ICAjaW5jbHVkZSAiaW50ZWxfcG0uaCIgLyogaW50 ZWxfZ3B1X2ZyZXEoKSAqLwo+ICAjaW5jbHVkZSAic2VsZnRlc3RfbGxjLmgiCj4gKyNpbmNsdWRl ICJpbnRlbF9ycHMuaCIKPiAgCj4gIHN0YXRpYyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0 cnVjdCBpbnRlbF9sbGMgKmxsYykKPiAgewo+IEBAIC0yNSw2ICsyNiw4IEBAIHN0YXRpYyBpbnQg Z2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxsYykKPiAgCWZvciAoZ3B1 X2ZyZXEgPSBjb25zdHMubWluX2dwdV9mcmVxOwo+ICAJICAgICBncHVfZnJlcSA8PSBjb25zdHMu bWF4X2dwdV9mcmVxOwo+ICAJICAgICBncHVfZnJlcSsrKSB7Cj4gKwkJc3RydWN0IGludGVsX3Jw cyAqcnBzID0gJmxsY190b19ndChsbGMpLT5ycHM7Cj4gKwo+ICAJCXVuc2lnbmVkIGludCBpYV9m cmVxLCByaW5nX2ZyZXEsIGZvdW5kOwo+ICAJCXUzMiB2YWw7Cj4gIAo+IEBAIC00NCw3ICs0Nyw3 IEBAIHN0YXRpYyBpbnQgZ2VuNl92ZXJpZnlfcmluZ19mcmVxKHN0cnVjdCBpbnRlbF9sbGMgKmxs YykKPiAgCQlpZiAoZm91bmQgIT0gaWFfZnJlcSkgewo+ICAJCQlwcl9lcnIoIk1pbiBmcmVxIHRh YmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIENQVSBmcmVxLCBm b3VuZCAlZCwgZXhwZWN0ZWQgJWRcbiIsCj4gIAkJCSAgICAgICBncHVfZnJlcSwgY29uc3RzLm1p bl9ncHVfZnJlcSwgY29uc3RzLm1heF9ncHVfZnJlcSwKPiAtCQkJICAgICAgIGludGVsX2dwdV9m cmVxKGk5MTUsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1ND QUxFUiA6IDEpKSwKPiArCQkJICAgICAgIGludGVsX2dwdV9mcmVxKHJwcywgZ3B1X2ZyZXEgKiAo SU5URUxfR0VOKGk5MTUpID49IDkgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSkpLAo+ICAJCQkgICAg ICAgZm91bmQsIGlhX2ZyZXEpOwo+ICAJCQllcnIgPSAtRUlOVkFMOwo+ICAJCQlicmVhazsKPiBA QCAtNTQsNyArNTcsNyBAQCBzdGF0aWMgaW50IGdlbjZfdmVyaWZ5X3JpbmdfZnJlcShzdHJ1Y3Qg aW50ZWxfbGxjICpsbGMpCj4gIAkJaWYgKGZvdW5kICE9IHJpbmdfZnJlcSkgewo+ICAJCQlwcl9l cnIoIk1pbiBmcmVxIHRhYmxlKCVkL1slZCwgJWRdKTolZE1IeiBkaWQgbm90IG1hdGNoIGV4cGVj dGVkIHJpbmcgZnJlcSwgZm91bmQgJWQsIGV4cGVjdGVkICVkXG4iLAo+ICAJCQkgICAgICAgZ3B1 X2ZyZXEsIGNvbnN0cy5taW5fZ3B1X2ZyZXEsIGNvbnN0cy5tYXhfZ3B1X2ZyZXEsCj4gLQkJCSAg ICAgICBpbnRlbF9ncHVfZnJlcShpOTE1LCBncHVfZnJlcSAqIChJTlRFTF9HRU4oaTkxNSkgPj0g OSA/IEdFTjlfRlJFUV9TQ0FMRVIgOiAxKSksCj4gKwkJCSAgICAgICBpbnRlbF9ncHVfZnJlcShy cHMsIGdwdV9mcmVxICogKElOVEVMX0dFTihpOTE1KSA+PSA5ID8gR0VOOV9GUkVRX1NDQUxFUiA6 IDEpKSwKPiAgCQkJICAgICAgIGZvdW5kLCByaW5nX2ZyZXEpOwo+ICAJCQllcnIgPSAtRUlOVkFM Owo+ICAJCQlicmVhazsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv aW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVs X2d1Y19zdWJtaXNzaW9uLmMKPiBpbmRleCAwMDllNTRhMzc2NGYuLjk3Yjg1OGNlNzY4MiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lv bi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Np b24uYwo+IEBAIC0xMDEwLDcgKzEwMTAsNyBAQCB2b2lkIGludGVsX2d1Y19zdWJtaXNzaW9uX2Zp bmkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICAKPiAgc3RhdGljIHZvaWQgZ3VjX2ludGVycnVw dHNfY2FwdHVyZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0KQo+ICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBz ICpycHMgPSAmZ3QtPmk5MTUtPmd0X3BtLnJwczsKPiArCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9 ICZndC0+cnBzOwo+ICAJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsK PiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgCWVudW0gaW50ZWxfZW5naW5l X2lkIGlkOwo+IEBAIC0xMDU2LDcgKzEwNTYsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW50ZXJydXB0 c19jYXB0dXJlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIAo+ICBzdGF0aWMgdm9pZCBndWNfaW50 ZXJydXB0c19yZWxlYXNlKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gIHsKPiAtCXN0cnVjdCBpbnRl bF9ycHMgKnJwcyA9ICZndC0+aTkxNS0+Z3RfcG0ucnBzOwo+ICsJc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmd0LT5ycHM7Cj4gIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5j b3JlOwo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICAJZW51bSBpbnRlbF9l bmdpbmVfaWQgaWQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVi dWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCAxNjIx MTQzMGViNzguLjIyOTYyMzczNzIzYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdm cy5jCj4gQEAgLTQ0LDYgKzQ0LDcgQEAKPiAgI2luY2x1ZGUgImd0L2ludGVsX2d0X3JlcXVlc3Rz LmgiCj4gICNpbmNsdWRlICJndC9pbnRlbF9yZXNldC5oIgo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxf cmM2LmgiCj4gKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKPiAgI2luY2x1ZGUgImd0L3VjL2lu dGVsX2d1Y19zdWJtaXNzaW9uLmgiCj4gIAo+ICAjaW5jbHVkZSAiaTkxNV9kZWJ1Z2ZzLmgiCj4g QEAgLTc5MSw3ICs3OTIsNyBAQCBzdGF0aWMgaW50IGk5MTVfZnJlcXVlbmN5X2luZm8oc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKPiAgCXN0cnVjdCBpbnRl bF91bmNvcmUgKnVuY29yZSA9ICZkZXZfcHJpdi0+dW5jb3JlOwo+IC0Jc3RydWN0IGludGVsX3Jw cyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMg PSAmZGV2X3ByaXYtPmd0LnJwczsKPiAgCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAJaW50 IHJldCA9IDA7Cj4gIAo+IEBAIC04MjcsMjMgKzgyOCwyMyBAQCBzdGF0aWMgaW50IGk5MTVfZnJl cXVlbmN5X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIAkJc2VxX3By aW50ZihtLCAiRERSIGZyZXE6ICVkIE1IelxuIiwgZGV2X3ByaXYtPm1lbV9mcmVxKTsKPiAgCj4g IAkJc2VxX3ByaW50ZihtLCAiYWN0dWFsIEdQVSBmcmVxOiAlZCBNSHpcbiIsCj4gLQkJCSAgIGlu dGVsX2dwdV9mcmVxKGRldl9wcml2LCAoZnJlcV9zdHMgPj4gOCkgJiAweGZmKSk7Cj4gKwkJCSAg IGludGVsX2dwdV9mcmVxKHJwcywgKGZyZXFfc3RzID4+IDgpICYgMHhmZikpOwo+ICAKPiAgCQlz ZXFfcHJpbnRmKG0sICJjdXJyZW50IEdQVSBmcmVxOiAlZCBNSHpcbiIsCj4gLQkJCSAgIGludGVs X2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmN1cl9mcmVxKSk7Cj4gKwkJCSAgIGludGVsX2dwdV9m cmVxKHJwcywgcnBzLT5jdXJfZnJlcSkpOwo+ICAKPiAgCQlzZXFfcHJpbnRmKG0sICJtYXggR1BV IGZyZXE6ICVkIE1IelxuIiwKPiAtCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+ bWF4X2ZyZXEpKTsKPiArCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSk7 Cj4gIAo+ICAJCXNlcV9wcmludGYobSwgIm1pbiBHUFUgZnJlcTogJWQgTUh6XG4iLAo+IC0JCQkg ICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJlcSkpOwo+ICsJCQkgICBpbnRl bF9ncHVfZnJlcShycHMsIHJwcy0+bWluX2ZyZXEpKTsKPiAgCj4gIAkJc2VxX3ByaW50ZihtLCAi aWRsZSBHUFUgZnJlcTogJWQgTUh6XG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcnBzLT5pZGxlX2ZyZXEpKTsKPiArCQkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmlk bGVfZnJlcSkpOwo+ICAKPiAgCQlzZXFfcHJpbnRmKG0sCj4gIAkJCSAgICJlZmZpY2llbnQgKFJQ ZSkgZnJlcXVlbmN5OiAlZCBNSHpcbiIsCj4gLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2 LCBycHMtPmVmZmljaWVudF9mcmVxKSk7Cj4gKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBz LT5lZmZpY2llbnRfZnJlcSkpOwo+ICAJfSBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDYpIHsKPiAgCQl1MzIgcnBfc3RhdGVfbGltaXRzOwo+ICAJCXUzMiBndF9wZXJmX3N0YXR1czsK PiBAQCAtODc3LDcgKzg3OCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVuY3lfaW5mbyhzdHJ1 Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiAgCQkJZWxzZQo+ICAJCQkJcmVxZiA+Pj0g MjU7Cj4gIAkJfQo+IC0JCXJlcWYgPSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcmVxZik7Cj4g KwkJcmVxZiA9IGludGVsX2dwdV9mcmVxKHJwcywgcmVxZik7Cj4gIAo+ICAJCXJwbW9kZWN0bCA9 IEk5MTVfUkVBRChHRU42X1JQX0NPTlRST0wpOwo+ICAJCXJwaW5jbGltaXQgPSBJOTE1X1JFQUQo R0VONl9SUF9VUF9USFJFU0hPTEQpOwo+IEBAIC04OTAsOCArODkxLDcgQEAgc3RhdGljIGludCBp OTE1X2ZyZXF1ZW5jeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAJ CXJwZG93bmVpID0gSTkxNV9SRUFEKEdFTjZfUlBfQ1VSX0RPV05fRUkpICYgR0VONl9DVVJJQVZH X01BU0s7Cj4gIAkJcnBjdXJkb3duID0gSTkxNV9SRUFEKEdFTjZfUlBfQ1VSX0RPV04pICYgR0VO Nl9DVVJCU1lUQVZHX01BU0s7Cj4gIAkJcnBwcmV2ZG93biA9IEk5MTVfUkVBRChHRU42X1JQX1BS RVZfRE9XTikgJiBHRU42X0NVUkJTWVRBVkdfTUFTSzsKPiAtCQljYWdmID0gaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsCj4gLQkJCQkgICAgICBpbnRlbF9nZXRfY2FnZihkZXZfcHJpdiwgcnBzdGF0 KSk7Cj4gKwkJY2FnZiA9IGludGVsX2dwdV9mcmVxKHJwcywgaW50ZWxfZ2V0X2NhZ2YocnBzLCBy cHN0YXQpKTsKPiAgCj4gIAkJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51 bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ICAKPiBAQCAtOTY4LDM3ICs5NjgsMzcgQEAgc3RhdGlj IGludCBpOTE1X2ZyZXF1ZW5jeV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2Vk KQo+ICAJCW1heF9mcmVxICo9IChJU19HRU45X0JDKGRldl9wcml2KSB8fAo+ICAJCQkgICAgIElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTAgPyBHRU45X0ZSRVFfU0NBTEVSIDogMSk7Cj4gIAkJc2Vx X3ByaW50ZihtLCAiTG93ZXN0IChSUE4pIGZyZXF1ZW5jeTogJWRNSHpcbiIsCj4gLQkJCSAgIGlu dGVsX2dwdV9mcmVxKGRldl9wcml2LCBtYXhfZnJlcSkpOwo+ICsJCQkgICBpbnRlbF9ncHVfZnJl cShycHMsIG1heF9mcmVxKSk7Cj4gIAo+ICAJCW1heF9mcmVxID0gKHJwX3N0YXRlX2NhcCAmIDB4 ZmYwMCkgPj4gODsKPiAgCQltYXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwKPiAg CQkJICAgICBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwID8gR0VOOV9GUkVRX1NDQUxFUiA6IDEp Owo+ICAJCXNlcV9wcmludGYobSwgIk5vbWluYWwgKFJQMSkgZnJlcXVlbmN5OiAlZE1IelxuIiwK PiAtCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIG1heF9mcmVxKSk7Cj4gKwkJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKPiAgCj4gIAkJbWF4X2ZyZXEgPSAoSVNfR0VO OV9MUChkZXZfcHJpdikgPyBycF9zdGF0ZV9jYXAgPj4gMTYgOgo+ICAJCQkgICAgcnBfc3RhdGVf Y2FwID4+IDApICYgMHhmZjsKPiAgCQltYXhfZnJlcSAqPSAoSVNfR0VOOV9CQyhkZXZfcHJpdikg fHwKPiAgCQkJICAgICBJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwID8gR0VOOV9GUkVRX1NDQUxF UiA6IDEpOwo+ICAJCXNlcV9wcmludGYobSwgIk1heCBub24tb3ZlcmNsb2NrZWQgKFJQMCkgZnJl cXVlbmN5OiAlZE1IelxuIiwKPiAtCQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIG1heF9m cmVxKSk7Cj4gKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgbWF4X2ZyZXEpKTsKPiAgCQlzZXFf cHJpbnRmKG0sICJNYXggb3ZlcmNsb2NrZWQgZnJlcXVlbmN5OiAlZE1IelxuIiwKPiAtCQkJICAg aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpKTsKPiArCQkJICAgaW50ZWxf Z3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSk7Cj4gIAo+ICAJCXNlcV9wcmludGYobSwgIkN1 cnJlbnQgZnJlcTogJWQgTUh6XG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg cnBzLT5jdXJfZnJlcSkpOwo+ICsJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2Zy ZXEpKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJBY3R1YWwgZnJlcTogJWQgTUh6XG4iLCBjYWdmKTsK PiAgCQlzZXFfcHJpbnRmKG0sICJJZGxlIGZyZXE6ICVkIE1IelxuIiwKPiAtCQkJICAgaW50ZWxf Z3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+aWRsZV9mcmVxKSk7Cj4gKwkJCSAgIGludGVsX2dwdV9m cmVxKHJwcywgcnBzLT5pZGxlX2ZyZXEpKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJNaW4gZnJlcTog JWQgTUh6XG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5taW5fZnJl cSkpOwo+ICsJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWluX2ZyZXEpKTsKPiAgCQlz ZXFfcHJpbnRmKG0sICJCb29zdCBmcmVxOiAlZCBNSHpcbiIsCj4gLQkJCSAgIGludGVsX2dwdV9m cmVxKGRldl9wcml2LCBycHMtPmJvb3N0X2ZyZXEpKTsKPiArCQkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBycHMtPmJvb3N0X2ZyZXEpKTsKPiAgCQlzZXFfcHJpbnRmKG0sICJNYXggZnJlcTogJWQg TUh6XG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5tYXhfZnJlcSkp Owo+ICsJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWF4X2ZyZXEpKTsKPiAgCQlzZXFf cHJpbnRmKG0sCj4gIAkJCSAgICJlZmZpY2llbnQgKFJQZSkgZnJlcXVlbmN5OiAlZCBNSHpcbiIs Cj4gLQkJCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMtPmVmZmljaWVudF9mcmVxKSk7 Cj4gKwkJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5lZmZpY2llbnRfZnJlcSkpOwo+ICAJ fSBlbHNlIHsKPiAgCQlzZXFfcHV0cyhtLCAibm8gUC1zdGF0ZSBpbmZvIGF2YWlsYWJsZVxuIik7 Cj4gIAl9Cj4gQEAgLTE0NjEsNyArMTQ2MSw3IEBAIHN0YXRpYyBpbnQgaTkxNV9zcl9zdGF0dXMo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIHN0YXRpYyBpbnQgaTkxNV9yaW5n X2ZyZXFfdGFibGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gIHsKPiAgCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRl KTsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+ICsJ c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7Cj4gIAl1bnNpZ25lZCBp bnQgbWF4X2dwdV9mcmVxLCBtaW5fZ3B1X2ZyZXE7Cj4gIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJl ZjsKPiAgCWludCBncHVfZnJlcSwgaWFfZnJlcTsKPiBAQCAtMTQ4NiwxMCArMTQ4NiwxMSBAQCBz dGF0aWMgaW50IGk5MTVfcmluZ19mcmVxX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq dW51c2VkKQo+ICAJCQkJICAgICAgIEdFTjZfUENPREVfUkVBRF9NSU5fRlJFUV9UQUJMRSwKPiAg CQkJCSAgICAgICAmaWFfZnJlcSwgTlVMTCk7Cj4gIAkJc2VxX3ByaW50ZihtLCAiJWRcdFx0JWRc dFx0XHRcdCVkXG4iLAo+IC0JCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgKGdwdV9mcmVx ICoKPiAtCQkJCQkJICAgICAoSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwKPiAtCQkJCQkJICAgICAg SU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCA/Cj4gLQkJCQkJCSAgICAgIEdFTjlfRlJFUV9TQ0FM RVIgOiAxKSkpLAo+ICsJCQkgICBpbnRlbF9ncHVfZnJlcShycHMsCj4gKwkJCQkJICAoZ3B1X2Zy ZXEgKgo+ICsJCQkJCSAgIChJU19HRU45X0JDKGRldl9wcml2KSB8fAo+ICsJCQkJCSAgICBJTlRF TF9HRU4oZGV2X3ByaXYpID49IDEwID8KPiArCQkJCQkgICAgR0VOOV9GUkVRX1NDQUxFUiA6IDEp KSksCj4gIAkJCSAgICgoaWFfZnJlcSA+PiAwKSAmIDB4ZmYpICogMTAwLAo+ICAJCQkgICAoKGlh X2ZyZXEgPj4gOCkgJiAweGZmKSAqIDEwMCk7Cj4gIAl9Cj4gQEAgLTE3MTcsNyArMTcxOCw3IEBA IHN0YXRpYyBjb25zdCBjaGFyICpycHNfcG93ZXJfdG9fc3RyKHVuc2lnbmVkIGludCBwb3dlcikK PiAgc3RhdGljIGludCBpOTE1X3Jwc19ib29zdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqZGF0YSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9k ZV90b19pOTE1KG0tPnByaXZhdGUpOwo+IC0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9w cml2LT5ndF9wbS5ycHM7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0 LnJwczsKPiAgCXUzMiBhY3RfZnJlcSA9IHJwcy0+Y3VyX2ZyZXE7Cj4gIAlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKPiAgCj4gQEAgLTE3MjksNyArMTczMCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9y cHNfYm9vc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gIAkJCXZsdl9w dW5pdF9wdXQoZGV2X3ByaXYpOwo+ICAJCQlhY3RfZnJlcSA9IChhY3RfZnJlcSA+PiA4KSAmIDB4 ZmY7Cj4gIAkJfSBlbHNlIHsKPiAtCQkJYWN0X2ZyZXEgPSBpbnRlbF9nZXRfY2FnZihkZXZfcHJp diwKPiArCQkJYWN0X2ZyZXEgPSBpbnRlbF9nZXRfY2FnZihycHMsCj4gIAkJCQkJCSAgSTkxNV9S RUFEKEdFTjZfUlBTVEFUMSkpOwo+ICAJCX0KPiAgCX0KPiBAQCAtMTc0MCwxNyArMTc0MSwxNyBA QCBzdGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICpkYXRhKQo+ICAJCSAgIGF0b21pY19yZWFkKCZycHMtPm51bV93YWl0ZXJzKSk7Cj4gIAlzZXFf cHJpbnRmKG0sICJJbnRlcmFjdGl2ZT8gJWRcbiIsIFJFQURfT05DRShycHMtPnBvd2VyLmludGVy YWN0aXZlKSk7Cj4gIAlzZXFfcHJpbnRmKG0sICJGcmVxdWVuY3kgcmVxdWVzdGVkICVkLCBhY3R1 YWwgJWRcbiIsCj4gLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+Y3VyX2ZyZXEp LAo+IC0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBhY3RfZnJlcSkpOwo+ICsJCSAgIGlu dGVsX2dwdV9mcmVxKHJwcywgcnBzLT5jdXJfZnJlcSksCj4gKwkJICAgaW50ZWxfZ3B1X2ZyZXEo cnBzLCBhY3RfZnJlcSkpOwo+ICAJc2VxX3ByaW50ZihtLCAiICBtaW4gaGFyZDolZCwgc29mdDol ZDsgbWF4IHNvZnQ6JWQsIGhhcmQ6JWRcbiIsCj4gLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+bWluX2ZyZXEpLAo+IC0JCSAgIGludGVsX2dwdV9mcmVxKGRldl9wcml2LCBycHMt Pm1pbl9mcmVxX3NvZnRsaW1pdCksCj4gLQkJICAgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJw cy0+bWF4X2ZyZXFfc29mdGxpbWl0KSwKPiAtCQkgICBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwg cnBzLT5tYXhfZnJlcSkpOwo+ICsJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5taW5fZnJl cSksCj4gKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCks Cj4gKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCksCj4g KwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1heF9mcmVxKSk7Cj4gIAlzZXFfcHJpbnRm KG0sICIgIGlkbGU6JWQsIGVmZmljaWVudDolZCwgYm9vc3Q6JWRcbiIsCj4gLQkJICAgaW50ZWxf Z3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+aWRsZV9mcmVxKSwKPiAtCQkgICBpbnRlbF9ncHVfZnJl cShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJlcSksCj4gLQkJICAgaW50ZWxfZ3B1X2ZyZXEo ZGV2X3ByaXYsIHJwcy0+Ym9vc3RfZnJlcSkpOwo+ICsJCSAgIGludGVsX2dwdV9mcmVxKHJwcywg cnBzLT5pZGxlX2ZyZXEpLAo+ICsJCSAgIGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5lZmZpY2ll bnRfZnJlcSksCj4gKwkJICAgaW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPmJvb3N0X2ZyZXEpKTsK PiAgCj4gIAlzZXFfcHJpbnRmKG0sICJXYWl0IGJvb3N0czogJWRcbiIsIGF0b21pY19yZWFkKCZy cHMtPmJvb3N0cykpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCA1MTM4ZDFl ZWQzMDYuLjc4YWMwOGRiNDhhMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC0x ODQxLDYgKzE4NDEsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJtX3Jlc3VtZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQo+ICAKPiAgCWludGVsX2RwX21zdF9yZXN1bWUoZGV2X3ByaXYpOwo+ICAKPiAr CWludGVsX2d0X3BtX2VuYWJsZSgmZGV2X3ByaXYtPmd0KTsKPiArCj4gIAlpbnRlbF9kaXNwbGF5 X3Jlc3VtZShkZXYpOwo+ICAKPiAgCWRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRldik7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggODg4MmMwOTA4YzNiLi5lYjU0NjAyOTA4MTEg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtNTQzLDk0ICs1NDMsNiBAQCBzdHJ1 Y3QgaTkxNV9zdXNwZW5kX3NhdmVkX3JlZ2lzdGVycyB7Cj4gIAo+ICBzdHJ1Y3Qgdmx2X3MwaXhf c3RhdGU7Cj4gIAo+IC1zdHJ1Y3QgaW50ZWxfcnBzX2VpIHsKPiAtCWt0aW1lX3Qga3RpbWU7Cj4g LQl1MzIgcmVuZGVyX2MwOwo+IC0JdTMyIG1lZGlhX2MwOwo+IC19Owo+IC0KPiAtc3RydWN0IGlu dGVsX3JwcyB7Cj4gLQlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgZW5hYmxpbmcgYW5k IHRoZSB3b3JrZXIgKi8KPiAtCj4gLQkvKgo+IC0JICogd29yaywgaW50ZXJydXB0c19lbmFibGVk IGFuZCBwbV9paXIgYXJlIHByb3RlY3RlZCBieQo+IC0JICogZGV2X3ByaXYtPmlycV9sb2NrCj4g LQkgKi8KPiAtCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwo+IC0JYm9vbCBpbnRlcnJ1cHRzX2Vu YWJsZWQ7Cj4gLQl1MzIgcG1faWlyOwo+IC0KPiAtCS8qIFBNIGludGVycnVwdCBiaXRzIHRoYXQg c2hvdWxkIG5ldmVyIGJlIG1hc2tlZCAqLwo+IC0JdTMyIHBtX2ludHJtc2tfbWJ6Owo+IC0KPiAt CS8qIEZyZXF1ZW5jaWVzIGFyZSBzdG9yZWQgaW4gcG90ZW50aWFsbHkgcGxhdGZvcm0gZGVwZW5k ZW50IG11bHRpcGxlcy4KPiAtCSAqIEluIG90aGVyIHdvcmRzLCAqX2ZyZXEgbmVlZHMgdG8gYmUg bXVsdGlwbGllZCBieSBYIHRvIGJlIGludGVyZXN0aW5nLgo+IC0JICogU29mdCBsaW1pdHMgYXJl IHRob3NlIHdoaWNoIGFyZSB1c2VkIGZvciB0aGUgZHluYW1pYyByZWNsb2NraW5nIGRvbmUKPiAt CSAqIGJ5IHRoZSBkcml2ZXIgKHJhaXNlIGZyZXF1ZW5jaWVzIHVuZGVyIGhlYXZ5IGxvYWRzLCBh bmQgbG93ZXIgZm9yCj4gLQkgKiBsaWdodGVyIGxvYWRzKS4gSGFyZCBsaW1pdHMgYXJlIHRob3Nl IGltcG9zZWQgYnkgdGhlIGhhcmR3YXJlLgo+IC0JICoKPiAtCSAqIEEgZGlzdGluY3Rpb24gaXMg bWFkZSBmb3Igb3ZlcmNsb2NraW5nLCB3aGljaCBpcyBuZXZlciBlbmFibGVkIGJ5Cj4gLQkgKiBk ZWZhdWx0LCBhbmQgaXMgY29uc2lkZXJlZCB0byBiZSBhYm92ZSB0aGUgaGFyZCBsaW1pdCBpZiBp dCdzCj4gLQkgKiBwb3NzaWJsZSBhdCBhbGwuCj4gLQkgKi8KPiAtCXU4IGN1cl9mcmVxOwkJLyog Q3VycmVudCBmcmVxdWVuY3kgKGNhY2hlZCwgbWF5IG5vdCA9PSBIVykgKi8KPiAtCXU4IG1pbl9m cmVxX3NvZnRsaW1pdDsJLyogTWluaW11bSBmcmVxdWVuY3kgcGVybWl0dGVkIGJ5IHRoZSBkcml2 ZXIgKi8KPiAtCXU4IG1heF9mcmVxX3NvZnRsaW1pdDsJLyogTWF4IGZyZXF1ZW5jeSBwZXJtaXR0 ZWQgYnkgdGhlIGRyaXZlciAqLwo+IC0JdTggbWF4X2ZyZXE7CQkvKiBNYXhpbXVtIGZyZXF1ZW5j eSwgUlAwIGlmIG5vdCBvdmVyY2xvY2tpbmcgKi8KPiAtCXU4IG1pbl9mcmVxOwkJLyogQUtBIFJQ bi4gTWluaW11bSBmcmVxdWVuY3kgKi8KPiAtCXU4IGJvb3N0X2ZyZXE7CQkvKiBGcmVxdWVuY3kg dG8gcmVxdWVzdCB3aGVuIHdhaXQgYm9vc3RpbmcgKi8KPiAtCXU4IGlkbGVfZnJlcTsJCS8qIEZy ZXF1ZW5jeSB0byByZXF1ZXN0IHdoZW4gd2UgYXJlIGlkbGUgKi8KPiAtCXU4IGVmZmljaWVudF9m cmVxOwkvKiBBS0EgUlBlLiBQcmUtZGV0ZXJtaW5lZCBiYWxhbmNlZCBmcmVxdWVuY3kgKi8KPiAt CXU4IHJwMV9mcmVxOwkJLyogImxlc3MgdGhhbiIgUlAwIHBvd2VyL2ZyZXFlbmN5ICovCj4gLQl1 OCBycDBfZnJlcTsJCS8qIE5vbi1vdmVyY2xvY2tlZCBtYXggZnJlcXVlbmN5LiAqLwo+IC0JdTE2 IGdwbGxfcmVmX2ZyZXE7CS8qIHZsdi9jaHYgR1BMTCByZWZlcmVuY2UgZnJlcXVlbmN5ICovCj4g LQo+IC0JaW50IGxhc3RfYWRqOwo+IC0KPiAtCXN0cnVjdCB7Cj4gLQkJc3RydWN0IG11dGV4IG11 dGV4Owo+IC0KPiAtCQllbnVtIHsgTE9XX1BPV0VSLCBCRVRXRUVOLCBISUdIX1BPV0VSIH0gbW9k ZTsKPiAtCQl1bnNpZ25lZCBpbnQgaW50ZXJhY3RpdmU7Cj4gLQo+IC0JCXU4IHVwX3RocmVzaG9s ZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byB1cGxvY2sgKi8KPiAtCQl1OCBkb3duX3Ro cmVzaG9sZDsgLyogQ3VycmVudCAlYnVzeSByZXF1aXJlZCB0byBkb3duY2xvY2sgKi8KPiAtCX0g cG93ZXI7Cj4gLQo+IC0JYm9vbCBlbmFibGVkOwo+IC0JYXRvbWljX3QgbnVtX3dhaXRlcnM7Cj4g LQlhdG9taWNfdCBib29zdHM7Cj4gLQo+IC0JLyogbWFudWFsIHdhIHJlc2lkZW5jeSBjYWxjdWxh dGlvbnMgKi8KPiAtCXN0cnVjdCBpbnRlbF9ycHNfZWkgZWk7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3Qg aW50ZWxfZ2VuNl9wb3dlcl9tZ210IHsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgcnBzOwo+IC19Owo+ IC0KPiAtLyogZGVmaW5lZCBpbnRlbF9wbS5jICovCj4gLWV4dGVybiBzcGlubG9ja190IG1jaGRl dl9sb2NrOwo+IC0KPiAtc3RydWN0IGludGVsX2lsa19wb3dlcl9tZ210IHsKPiAtCXU4IGN1cl9k ZWxheTsKPiAtCXU4IG1pbl9kZWxheTsKPiAtCXU4IG1heF9kZWxheTsKPiAtCXU4IGZtYXg7Cj4g LQl1OCBmc3RhcnQ7Cj4gLQo+IC0JdTY0IGxhc3RfY291bnQxOwo+IC0JdW5zaWduZWQgbG9uZyBs YXN0X3RpbWUxOwo+IC0JdW5zaWduZWQgbG9uZyBjaGlwc2V0X3Bvd2VyOwo+IC0JdTY0IGxhc3Rf Y291bnQyOwo+IC0JdTY0IGxhc3RfdGltZTI7Cj4gLQl1bnNpZ25lZCBsb25nIGdmeF9wb3dlcjsK PiAtCXU4IGNvcnI7Cj4gLQo+IC0JaW50IGNfbTsKPiAtCWludCByX3Q7Cj4gLX07Cj4gLQo+ICAj ZGVmaW5lIE1BWF9MM19TTElDRVMgMgo+ICBzdHJ1Y3QgaW50ZWxfbDNfcGFyaXR5IHsKPiAgCXUz MiAqcmVtYXBfaW5mb1tNQVhfTDNfU0xJQ0VTXTsKPiBAQCAtMTA2Nyw3ICs5NzksNiBAQCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gIAkJdTMyIGlycV9tYXNrOwo+ICAJCXUzMiBkZV9pcnFf bWFza1tJOTE1X01BWF9QSVBFU107Cj4gIAl9Owo+IC0JdTMyIHBtX3Jwc19ldmVudHM7Cj4gIAl1 MzIgcGlwZXN0YXRfaXJxX21hc2tbSTkxNV9NQVhfUElQRVNdOwo+ICAKPiAgCXN0cnVjdCBpOTE1 X2hvdHBsdWcgaG90cGx1ZzsKPiBAQCAtMTIwMiwxMyArMTExMyw2IEBAIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIHsKPiAgCSAqLwo+ICAJdTMyIGVkcmFtX3NpemVfbWI7Cj4gIAo+IC0JLyogZ2Vu NisgR1QgUE0gc3RhdGUgKi8KPiAtCXN0cnVjdCBpbnRlbF9nZW42X3Bvd2VyX21nbXQgZ3RfcG07 Cj4gLQo+IC0JLyogaWxrLW9ubHkgaXBzL3JwcyBzdGF0ZS4gRXZlcnl0aGluZyBpbiBoZXJlIGlz IHByb3RlY3RlZCBieSB0aGUgZ2xvYmFsCj4gLQkgKiBtY2hkZXZfbG9jayBpbiBpbnRlbF9wbS5j ICovCj4gLQlzdHJ1Y3QgaW50ZWxfaWxrX3Bvd2VyX21nbXQgaXBzOwo+IC0KPiAgCXN0cnVjdCBp OTE1X3Bvd2VyX2RvbWFpbnMgcG93ZXJfZG9tYWluczsKPiAgCj4gIAlzdHJ1Y3QgaTkxNV9wc3Ig cHNyOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IGI4ODI5ODgwNTZiZC4uZWFiMTcw OWQxODk3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTUyLDYgKzUyLDcgQEAK PiAgI2luY2x1ZGUgImd0L2ludGVsX21vY3MuaCIKPiAgI2luY2x1ZGUgImd0L2ludGVsX3Jlc2V0 LmgiCj4gICNpbmNsdWRlICJndC9pbnRlbF9yZW5kZXJzdGF0ZS5oIgo+ICsjaW5jbHVkZSAiZ3Qv aW50ZWxfcnBzLmgiCj4gICNpbmNsdWRlICJndC9pbnRlbF93b3JrYXJvdW5kcy5oIgo+ICAKPiAg I2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gQEAgLTEyNzIsOCArMTI3Myw2IEBAIGludCBpOTE1X2dl bV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCQlnb3RvIGVycl9j b250ZXh0Owo+ICAJfQo+ICAKPiAtCWludGVsX2luaXRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsK PiAtCj4gIAlpbnRlbF91Y19pbml0KCZkZXZfcHJpdi0+Z3QudWMpOwo+ICAKPiAgCXJldCA9IGlu dGVsX2d0X2luaXRfaHcoJmRldl9wcml2LT5ndCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4g aW5kZXggNTcyYTVjMzdjYzYxLi41OTg5MjRiM2M1NTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMKPiBAQCAtNDUsNiArNDUsNyBAQAo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKPiAg I2luY2x1ZGUgImd0L2ludGVsX2d0X2lycS5oIgo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3RfcG1f aXJxLmgiCj4gKyNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKPiAgCj4gICNpbmNsdWRlICJpOTE1 X2Rydi5oIgo+ICAjaW5jbHVkZSAiaTkxNV9pcnEuaCIKPiBAQCAtMzI3LDg3ICszMjgsNiBAQCBz dGF0aWMgaTkxNV9yZWdfdCBnZW42X3BtX2lpcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIAlyZXR1cm4gSU5URUxfR0VOKGRldl9wcml2KSA+PSA4ID8gR0VOOF9HVF9JSVIo MikgOiBHRU42X1BNSUlSOwo+ICB9Cj4gIAo+IC12b2lkIGdlbjExX3Jlc2V0X3Jwc19pbnRlcnJ1 cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGlu dGVsX2d0ICpndCA9ICZkZXZfcHJpdi0+Z3Q7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmZ3QtPmly cV9sb2NrKTsKPiAtCj4gLQl3aGlsZSAoZ2VuMTFfZ3RfcmVzZXRfb25lX2lpcihndCwgMCwgR0VO MTFfR1RQTSkpCj4gLQkJOwo+IC0KPiAtCWRldl9wcml2LT5ndF9wbS5ycHMucG1faWlyID0gMDsK PiAtCj4gLQlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLX0KPiAtCj4gLXZvaWQg Z2VuNl9yZXNldF9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0Owo+IC0KPiAt CXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLQlnZW42X2d0X3BtX3Jlc2V0X2lpcihn dCwgR0VONl9QTV9SUFNfRVZFTlRTKTsKPiAtCWRldl9wcml2LT5ndF9wbS5ycHMucG1faWlyID0g MDsKPiAtCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiAtfQo+IC0KPiAtdm9pZCBn ZW42X2VuYWJsZV9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSAmZGV2X3ByaXYtPmd0Owo+IC0Jc3Ry dWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gLQo+IC0JaWYgKFJF QURfT05DRShycHMtPmludGVycnVwdHNfZW5hYmxlZCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXNw aW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLQlXQVJOX09OX09OQ0UocnBzLT5wbV9paXIp Owo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+IC0JCVdBUk5fT05fT05D RShnZW4xMV9ndF9yZXNldF9vbmVfaWlyKGd0LCAwLCBHRU4xMV9HVFBNKSk7Cj4gLQllbHNlCj4g LQkJV0FSTl9PTl9PTkNFKEk5MTVfUkVBRChnZW42X3BtX2lpcihkZXZfcHJpdikpICYgZGV2X3By aXYtPnBtX3Jwc19ldmVudHMpOwo+IC0KPiAtCXJwcy0+aW50ZXJydXB0c19lbmFibGVkID0gdHJ1 ZTsKPiAtCWdlbjZfZ3RfcG1fZW5hYmxlX2lycShndCwgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMp Owo+IC0KPiAtCXNwaW5fdW5sb2NrX2lycSgmZ3QtPmlycV9sb2NrKTsKPiAtfQo+IC0KPiAtdTMy IGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsIHUzMiBtYXNrKQo+IC17Cj4gLQlyZXR1cm4gbWFzayAmIH5pOTE1LT5ndF9wbS5ycHMu cG1faW50cm1za19tYno7Cj4gLX0KPiAtCj4gLXZvaWQgZ2VuNl9kaXNhYmxlX3Jwc19pbnRlcnJ1 cHRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGlu dGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gLQlzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0ID0gJmRldl9wcml2LT5ndDsKPiAtCj4gLQlpZiAoIVJFQURfT05DRShycHMtPmludGVycnVw dHNfZW5hYmxlZCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFf bG9jayk7Cj4gLQlycHMtPmludGVycnVwdHNfZW5hYmxlZCA9IGZhbHNlOwo+IC0KPiAtCUk5MTVf V1JJVEUoR0VONl9QTUlOVFJNU0ssIGdlbjZfc2FuaXRpemVfcnBzX3BtX21hc2soZGV2X3ByaXYs IH4wdSkpOwo+IC0KPiAtCWdlbjZfZ3RfcG1fZGlzYWJsZV9pcnEoZ3QsIEdFTjZfUE1fUlBTX0VW RU5UUyk7Cj4gLQo+IC0Jc3Bpbl91bmxvY2tfaXJxKCZndC0+aXJxX2xvY2spOwo+IC0JaW50ZWxf c3luY2hyb25pemVfaXJxKGRldl9wcml2KTsKPiAtCj4gLQkvKiBOb3cgdGhhdCB3ZSB3aWxsIG5v dCBiZSBnZW5lcmF0aW5nIGFueSBtb3JlIHdvcmssIGZsdXNoIGFueQo+IC0JICogb3V0c3RhbmRp bmcgdGFza3MuIEFzIHdlIGFyZSBjYWxsZWQgb24gdGhlIFJQUyBpZGxlIHBhdGgsCj4gLQkgKiB3 ZSB3aWxsIHJlc2V0IHRoZSBHUFUgdG8gbWluaW11bSBmcmVxdWVuY2llcywgc28gdGhlIGN1cnJl bnQKPiAtCSAqIHN0YXRlIG9mIHRoZSB3b3JrZXIgY2FuIGJlIGRpc2NhcmRlZC4KPiAtCSAqLwo+ IC0JY2FuY2VsX3dvcmtfc3luYygmcnBzLT53b3JrKTsKPiAtCWlmIChJTlRFTF9HRU4oZGV2X3By aXYpID49IDExKQo+IC0JCWdlbjExX3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKPiAt CWVsc2UKPiAtCQlnZW42X3Jlc2V0X3Jwc19pbnRlcnJ1cHRzKGRldl9wcml2KTsKPiAtfQo+IC0K PiAgdm9pZCBnZW45X3Jlc2V0X2d1Y19pbnRlcnJ1cHRzKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykK PiAgewo+ICAJc3RydWN0IGludGVsX2d0ICpndCA9IGd1Y190b19ndChndWMpOwo+IEBAIC0xMDY1 LDE5OSArOTg1LDYgQEAgaW50IGludGVsX2dldF9jcnRjX3NjYW5saW5lKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjKQo+ICAJcmV0dXJuIHBvc2l0aW9uOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBp cm9ubGFrZV9ycHNfY2hhbmdlX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gJmRldl9wcml2 LT51bmNvcmU7Cj4gLQl1MzIgYnVzeV91cCwgYnVzeV9kb3duLCBtYXhfYXZnLCBtaW5fYXZnOwo+ IC0JdTggbmV3X2RlbGF5Owo+IC0KPiAtCXNwaW5fbG9jaygmbWNoZGV2X2xvY2spOwo+IC0KPiAt CWludGVsX3VuY29yZV93cml0ZTE2KHVuY29yZSwKPiAtCQkJICAgICBNRU1JTlRSU1RTLAo+IC0J CQkgICAgIGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNSU5UUlNUUykpOwo+IC0KPiAtCW5l d19kZWxheSA9IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5Owo+IC0KPiAtCWludGVsX3VuY29yZV93 cml0ZTE2KHVuY29yZSwgTUVNSU5UUlNUUywgTUVNSU5UX0VWQUxfQ0hHKTsKPiAtCWJ1c3lfdXAg PSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRVUEFWRyk7Cj4gLQlidXN5X2Rv d24gPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFJDUFJFVkJTWVRETkFWRyk7Cj4gLQltYXhf YXZnID0gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBSQ0JNQVhBVkcpOwo+IC0JbWluX2F2ZyA9 IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgUkNCTUlOQVZHKTsKPiAtCj4gLQkvKiBIYW5kbGUg UkNTIGNoYW5nZSByZXF1ZXN0IGZyb20gaHcgKi8KPiAtCWlmIChidXN5X3VwID4gbWF4X2F2Zykg ewo+IC0JCWlmIChkZXZfcHJpdi0+aXBzLmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+aXBzLm1heF9k ZWxheSkKPiAtCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgLSAxOwo+IC0J CWlmIChuZXdfZGVsYXkgPCBkZXZfcHJpdi0+aXBzLm1heF9kZWxheSkKPiAtCQkJbmV3X2RlbGF5 ID0gZGV2X3ByaXYtPmlwcy5tYXhfZGVsYXk7Cj4gLQl9IGVsc2UgaWYgKGJ1c3lfZG93biA8IG1p bl9hdmcpIHsKPiAtCQlpZiAoZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgIT0gZGV2X3ByaXYtPmlw cy5taW5fZGVsYXkpCj4gLQkJCW5ld19kZWxheSA9IGRldl9wcml2LT5pcHMuY3VyX2RlbGF5ICsg MTsKPiAtCQlpZiAobmV3X2RlbGF5ID4gZGV2X3ByaXYtPmlwcy5taW5fZGVsYXkpCj4gLQkJCW5l d19kZWxheSA9IGRldl9wcml2LT5pcHMubWluX2RlbGF5Owo+IC0JfQo+IC0KPiAtCWlmIChpcm9u bGFrZV9zZXRfZHJwcyhkZXZfcHJpdiwgbmV3X2RlbGF5KSkKPiAtCQlkZXZfcHJpdi0+aXBzLmN1 cl9kZWxheSA9IG5ld19kZWxheTsKPiAtCj4gLQlzcGluX3VubG9jaygmbWNoZGV2X2xvY2spOwo+ IC0KPiAtCXJldHVybjsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdmx2X2MwX3JlYWQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQlzdHJ1Y3QgaW50ZWxfcnBzX2VpICpl aSkKPiAtewo+IC0JZWktPmt0aW1lID0ga3RpbWVfZ2V0X3JhdygpOwo+IC0JZWktPnJlbmRlcl9j MCA9IEk5MTVfUkVBRChWTFZfUkVOREVSX0MwX0NPVU5UKTsKPiAtCWVpLT5tZWRpYV9jMCA9IEk5 MTVfUkVBRChWTFZfTUVESUFfQzBfQ09VTlQpOwo+IC19Cj4gLQo+IC12b2lkIGdlbjZfcnBzX3Jl c2V0X2VpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JbWVtc2V0 KCZkZXZfcHJpdi0+Z3RfcG0ucnBzLmVpLCAwLCBzaXplb2YoZGV2X3ByaXYtPmd0X3BtLnJwcy5l aSkpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdTMyIHZsdl93YV9jMF9laShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwbV9paXIpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMg KnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0JY29uc3Qgc3RydWN0IGludGVsX3Jwc19l aSAqcHJldiA9ICZycHMtPmVpOwo+IC0Jc3RydWN0IGludGVsX3Jwc19laSBub3c7Cj4gLQl1MzIg ZXZlbnRzID0gMDsKPiAtCj4gLQlpZiAoKHBtX2lpciAmIEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJF RCkgPT0gMCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQl2bHZfYzBfcmVhZChkZXZfcHJpdiwgJm5v dyk7Cj4gLQo+IC0JaWYgKHByZXYtPmt0aW1lKSB7Cj4gLQkJdTY0IHRpbWUsIGMwOwo+IC0JCXUz MiByZW5kZXIsIG1lZGlhOwo+IC0KPiAtCQl0aW1lID0ga3RpbWVfdXNfZGVsdGEobm93Lmt0aW1l LCBwcmV2LT5rdGltZSk7Cj4gLQo+IC0JCXRpbWUgKj0gZGV2X3ByaXYtPmN6Y2xrX2ZyZXE7Cj4g LQo+IC0JCS8qIFdvcmtsb2FkIGNhbiBiZSBzcGxpdCBiZXR3ZWVuIHJlbmRlciArIG1lZGlhLAo+ IC0JCSAqIGUuZy4gU3dhcEJ1ZmZlcnMgYmVpbmcgYmxpdHRlZCBpbiBYIGFmdGVyIGJlaW5nIHJl bmRlcmVkIGluCj4gLQkJICogbWVzYS4gVG8gYWNjb3VudCBmb3IgdGhpcyB3ZSBuZWVkIHRvIGNv bWJpbmUgYm90aCBlbmdpbmVzCj4gLQkJICogaW50byBvdXIgYWN0aXZpdHkgY291bnRlci4KPiAt CQkgKi8KPiAtCQlyZW5kZXIgPSBub3cucmVuZGVyX2MwIC0gcHJldi0+cmVuZGVyX2MwOwo+IC0J CW1lZGlhID0gbm93Lm1lZGlhX2MwIC0gcHJldi0+bWVkaWFfYzA7Cj4gLQkJYzAgPSBtYXgocmVu ZGVyLCBtZWRpYSk7Cj4gLQkJYzAgKj0gMTAwMCAqIDEwMCA8PCA4OyAvKiB0byB1c2VjcyBhbmQg c2NhbGUgdG8gdGhyZXNob2xkJSAqLwo+IC0KPiAtCQlpZiAoYzAgPiB0aW1lICogcnBzLT5wb3dl ci51cF90aHJlc2hvbGQpCj4gLQkJCWV2ZW50cyA9IEdFTjZfUE1fUlBfVVBfVEhSRVNIT0xEOwo+ IC0JCWVsc2UgaWYgKGMwIDwgdGltZSAqIHJwcy0+cG93ZXIuZG93bl90aHJlc2hvbGQpCj4gLQkJ CWV2ZW50cyA9IEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQ7Cj4gLQl9Cj4gLQo+IC0JcnBzLT5l aSA9IG5vdzsKPiAtCXJldHVybiBldmVudHM7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdlbjZf cG1fcnBzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+IC17Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+IC0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSwgZ3RfcG0ucnBzLndvcmspOwo+IC0Jc3RydWN0IGludGVsX2d0ICpn dCA9ICZkZXZfcHJpdi0+Z3Q7Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYt Pmd0X3BtLnJwczsKPiAtCWJvb2wgY2xpZW50X2Jvb3N0ID0gZmFsc2U7Cj4gLQlpbnQgbmV3X2Rl bGF5LCBhZGosIG1pbiwgbWF4Owo+IC0JdTMyIHBtX2lpciA9IDA7Cj4gLQo+IC0Jc3Bpbl9sb2Nr X2lycSgmZ3QtPmlycV9sb2NrKTsKPiAtCWlmIChycHMtPmludGVycnVwdHNfZW5hYmxlZCkgewo+ IC0JCXBtX2lpciA9IGZldGNoX2FuZF96ZXJvKCZycHMtPnBtX2lpcik7Cj4gLQkJY2xpZW50X2Jv b3N0ID0gYXRvbWljX3JlYWQoJnJwcy0+bnVtX3dhaXRlcnMpOwo+IC0JfQo+IC0Jc3Bpbl91bmxv Y2tfaXJxKCZndC0+aXJxX2xvY2spOwo+IC0KPiAtCS8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgcXVl dWUgYW55dGhpbmcgd2UncmUgbm90IGdvaW5nIHRvIHByb2Nlc3MuICovCj4gLQlXQVJOX09OKHBt X2lpciAmIH5kZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyk7Cj4gLQlpZiAoKHBtX2lpciAmIGRldl9w cml2LT5wbV9ycHNfZXZlbnRzKSA9PSAwICYmICFjbGllbnRfYm9vc3QpCj4gLQkJZ290byBvdXQ7 Cj4gLQo+IC0JbXV0ZXhfbG9jaygmcnBzLT5sb2NrKTsKPiAtCj4gLQlwbV9paXIgfD0gdmx2X3dh X2MwX2VpKGRldl9wcml2LCBwbV9paXIpOwo+IC0KPiAtCWFkaiA9IHJwcy0+bGFzdF9hZGo7Cj4g LQluZXdfZGVsYXkgPSBycHMtPmN1cl9mcmVxOwo+IC0JbWluID0gcnBzLT5taW5fZnJlcV9zb2Z0 bGltaXQ7Cj4gLQltYXggPSBycHMtPm1heF9mcmVxX3NvZnRsaW1pdDsKPiAtCWlmIChjbGllbnRf Ym9vc3QpCj4gLQkJbWF4ID0gcnBzLT5tYXhfZnJlcTsKPiAtCWlmIChjbGllbnRfYm9vc3QgJiYg bmV3X2RlbGF5IDwgcnBzLT5ib29zdF9mcmVxKSB7Cj4gLQkJbmV3X2RlbGF5ID0gcnBzLT5ib29z dF9mcmVxOwo+IC0JCWFkaiA9IDA7Cj4gLQl9IGVsc2UgaWYgKHBtX2lpciAmIEdFTjZfUE1fUlBf VVBfVEhSRVNIT0xEKSB7Cj4gLQkJaWYgKGFkaiA+IDApCj4gLQkJCWFkaiAqPSAyOwo+IC0JCWVs c2UgLyogQ0hWIG5lZWRzIGV2ZW4gZW5jb2RlIHZhbHVlcyAqLwo+IC0JCQlhZGogPSBJU19DSEVS UllWSUVXKGRldl9wcml2KSA/IDIgOiAxOwo+IC0KPiAtCQlpZiAobmV3X2RlbGF5ID49IHJwcy0+ bWF4X2ZyZXFfc29mdGxpbWl0KQo+IC0JCQlhZGogPSAwOwo+IC0JfSBlbHNlIGlmIChjbGllbnRf Ym9vc3QpIHsKPiAtCQlhZGogPSAwOwo+IC0JfSBlbHNlIGlmIChwbV9paXIgJiBHRU42X1BNX1JQ X0RPV05fVElNRU9VVCkgewo+IC0JCWlmIChycHMtPmN1cl9mcmVxID4gcnBzLT5lZmZpY2llbnRf ZnJlcSkKPiAtCQkJbmV3X2RlbGF5ID0gcnBzLT5lZmZpY2llbnRfZnJlcTsKPiAtCQllbHNlIGlm IChycHMtPmN1cl9mcmVxID4gcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpCj4gLQkJCW5ld19kZWxh eSA9IHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0Owo+IC0JCWFkaiA9IDA7Cj4gLQl9IGVsc2UgaWYg KHBtX2lpciAmIEdFTjZfUE1fUlBfRE9XTl9USFJFU0hPTEQpIHsKPiAtCQlpZiAoYWRqIDwgMCkK PiAtCQkJYWRqICo9IDI7Cj4gLQkJZWxzZSAvKiBDSFYgbmVlZHMgZXZlbiBlbmNvZGUgdmFsdWVz ICovCj4gLQkJCWFkaiA9IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpID8gLTIgOiAtMTsKPiAtCj4g LQkJaWYgKG5ld19kZWxheSA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPiAtCQkJYWRqID0g MDsKPiAtCX0gZWxzZSB7IC8qIHVua25vd24gZXZlbnQgKi8KPiAtCQlhZGogPSAwOwo+IC0JfQo+ IC0KPiAtCXJwcy0+bGFzdF9hZGogPSBhZGo7Cj4gLQo+IC0JLyoKPiAtCSAqIExpbWl0IGRlYm9v c3RpbmcgYW5kIGJvb3N0aW5nIHRvIGtlZXAgb3Vyc2VsdmVzIGF0IHRoZSBleHRyZW1lcwo+IC0J ICogd2hlbiBpbiB0aGUgcmVzcGVjdGl2ZSBwb3dlciBtb2RlcyAoaS5lLiBzbG93bHkgZGVjcmVh c2UgZnJlcXVlbmNpZXMKPiAtCSAqIHdoaWxlIGluIHRoZSBISUdIX1BPV0VSIHpvbmUgYW5kIHNs b3dseSBpbmNyZWFzZSBmcmVxdWVuY2llcyB3aGlsZQo+IC0JICogaW4gdGhlIExPV19QT1dFUiB6 b25lKS4gT24gaWRsZSwgd2Ugd2lsbCBoaXQgdGhlIHRpbWVvdXQgYW5kIGRyb3AKPiAtCSAqIHRv IHRoZSBuZXh0IGxldmVsIHF1aWNrbHksIGFuZCBjb252ZXJzZWx5IGlmIGJ1c3kgd2UgZXhwZWN0 IHRvCj4gLQkgKiBoaXQgYSB3YWl0Ym9vc3QgYW5kIHJhcGlkbHkgc3dpdGNoIGludG8gbWF4IHBv d2VyLgo+IC0JICovCj4gLQlpZiAoKGFkaiA8IDAgJiYgcnBzLT5wb3dlci5tb2RlID09IEhJR0hf UE9XRVIpIHx8Cj4gLQkgICAgKGFkaiA+IDAgJiYgcnBzLT5wb3dlci5tb2RlID09IExPV19QT1dF UikpCj4gLQkJcnBzLT5sYXN0X2FkaiA9IDA7Cj4gLQo+IC0JLyogc3lzZnMgZnJlcXVlbmN5IGlu dGVyZmFjZXMgbWF5IGhhdmUgc251Y2sgaW4gd2hpbGUgc2VydmljaW5nIHRoZQo+IC0JICogaW50 ZXJydXB0Cj4gLQkgKi8KPiAtCW5ld19kZWxheSArPSBhZGo7Cj4gLQluZXdfZGVsYXkgPSBjbGFt cF90KGludCwgbmV3X2RlbGF5LCBtaW4sIG1heCk7Cj4gLQo+IC0JaWYgKGludGVsX3NldF9ycHMo ZGV2X3ByaXYsIG5ld19kZWxheSkpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8g c2V0IG5ldyBHUFUgZnJlcXVlbmN5XG4iKTsKPiAtCQlycHMtPmxhc3RfYWRqID0gMDsKPiAtCX0K PiAtCj4gLQltdXRleF91bmxvY2soJnJwcy0+bG9jayk7Cj4gLQo+IC1vdXQ6Cj4gLQkvKiBNYWtl IHN1cmUgbm90IHRvIGNvcnJ1cHQgUE1JTVIgc3RhdGUgdXNlZCBieSByaW5nYnVmZmVyIG9uIEdF TjYgKi8KPiAtCXNwaW5fbG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLQlpZiAocnBzLT5pbnRl cnJ1cHRzX2VuYWJsZWQpCj4gLQkJZ2VuNl9ndF9wbV91bm1hc2tfaXJxKGd0LCBkZXZfcHJpdi0+ cG1fcnBzX2V2ZW50cyk7Cj4gLQlzcGluX3VubG9ja19pcnEoJmd0LT5pcnFfbG9jayk7Cj4gLX0K PiAtCj4gLQo+ICAvKioKPiAgICogaXZ5YnJpZGdlX3Bhcml0eV93b3JrIC0gV29ya3F1ZXVlIGNh bGxlZCB3aGVuIGEgcGFyaXR5IGVycm9yIGludGVycnVwdAo+ICAgKiBvY2N1cnJlZC4KPiBAQCAt MTYzMSw1NCArMTM1OCw2IEBAIHN0YXRpYyB2b2lkIGk5eHhfcGlwZV9jcmNfaXJxX2hhbmRsZXIo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCQkJICAgICByZXMxLCByZXMy KTsKPiAgfQo+ICAKPiAtLyogVGhlIFJQUyBldmVudHMgbmVlZCBmb3JjZXdha2UsIHNvIHdlIGFk ZCB0aGVtIHRvIGEgd29yayBxdWV1ZSBhbmQgbWFzayB0aGVpcgo+IC0gKiBJTVIgYml0cyB1bnRp bCB0aGUgd29yayBpcyBkb25lLiBPdGhlciBpbnRlcnJ1cHRzIGNhbiBiZSBwcm9jZXNzZWQgd2l0 aG91dAo+IC0gKiB0aGUgd29yayBxdWV1ZS4gKi8KPiAtdm9pZCBnZW4xMV9ycHNfaXJxX2hhbmRs ZXIoc3RydWN0IGludGVsX2d0ICpndCwgdTMyIHBtX2lpcikKPiAtewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSBndC0+aTkxNTsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9 ICZpOTE1LT5ndF9wbS5ycHM7Cj4gLQljb25zdCB1MzIgZXZlbnRzID0gaTkxNS0+cG1fcnBzX2V2 ZW50cyAmIHBtX2lpcjsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZndC0+aXJxX2xvY2sp Owo+IC0KPiAtCWlmICh1bmxpa2VseSghZXZlbnRzKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZ2Vu Nl9ndF9wbV9tYXNrX2lycShndCwgZXZlbnRzKTsKPiAtCj4gLQlpZiAoIXJwcy0+aW50ZXJydXB0 c19lbmFibGVkKQo+IC0JCXJldHVybjsKPiAtCj4gLQlycHMtPnBtX2lpciB8PSBldmVudHM7Cj4g LQlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOwo+IC19Cj4gLQo+IC12b2lkIGdlbjZfcnBzX2ly cV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBtX2lpcikK PiAtewo+IC0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4g LQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmRldl9wcml2LT5ndDsKPiAtCj4gLQlpZiAocG1faWly ICYgZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpIHsKPiAtCQlzcGluX2xvY2soJmd0LT5pcnFfbG9j ayk7Cj4gLQkJZ2VuNl9ndF9wbV9tYXNrX2lycShndCwgcG1faWlyICYgZGV2X3ByaXYtPnBtX3Jw c19ldmVudHMpOwo+IC0JCWlmIChycHMtPmludGVycnVwdHNfZW5hYmxlZCkgewo+IC0JCQlycHMt PnBtX2lpciB8PSBwbV9paXIgJiBkZXZfcHJpdi0+cG1fcnBzX2V2ZW50czsKPiAtCQkJc2NoZWR1 bGVfd29yaygmcnBzLT53b3JrKTsKPiAtCQl9Cj4gLQkJc3Bpbl91bmxvY2soJmd0LT5pcnFfbG9j ayk7Cj4gLQl9Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkKPiAtCQlyZXR1 cm47Cj4gLQo+IC0JaWYgKHBtX2lpciAmIFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQo+IC0JCWlu dGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtWRUNTMF0pOwo+IC0K PiAtCWlmIChwbV9paXIgJiBQTV9WRUJPWF9DU19FUlJPUl9JTlRFUlJVUFQpCj4gLQkJRFJNX0RF QlVHKCJDb21tYW5kIHBhcnNlciBlcnJvciwgcG1faWlyIDB4JTA4eFxuIiwgcG1faWlyKTsKPiAt fQo+IC0KPiAgc3RhdGljIHZvaWQgaTl4eF9waXBlc3RhdF9pcnFfcmVzZXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4gIAllbnVtIHBpcGUgcGlwZTsKPiBAQCAtMTk4 OSw3ICsxNjY4LDcgQEAgc3RhdGljIGlycXJldHVybl90IHZhbGxleXZpZXdfaXJxX2hhbmRsZXIo aW50IGlycSwgdm9pZCAqYXJnKQo+ICAJCWlmIChndF9paXIpCj4gIAkJCWdlbjZfZ3RfaXJxX2hh bmRsZXIoJmRldl9wcml2LT5ndCwgZ3RfaWlyKTsKPiAgCQlpZiAocG1faWlyKQo+IC0JCQlnZW42 X3Jwc19pcnFfaGFuZGxlcihkZXZfcHJpdiwgcG1faWlyKTsKPiArCQkJZ2VuNl9ycHNfaXJxX2hh bmRsZXIoJmRldl9wcml2LT5ndC5ycHMsIHBtX2lpcik7Cj4gIAo+ICAJCWlmIChob3RwbHVnX3N0 YXR1cykKPiAgCQkJaTl4eF9ocGRfaXJxX2hhbmRsZXIoZGV2X3ByaXYsIGhvdHBsdWdfc3RhdHVz KTsKPiBAQCAtMjM5Myw3ICsyMDcyLDcgQEAgc3RhdGljIHZvaWQgaWxrX2Rpc3BsYXlfaXJxX2hh bmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJfQo+ICAKPiAgCWlm IChJU19HRU4oZGV2X3ByaXYsIDUpICYmIGRlX2lpciAmIERFX1BDVV9FVkVOVCkKPiAtCQlpcm9u bGFrZV9ycHNfY2hhbmdlX2lycV9oYW5kbGVyKGRldl9wcml2KTsKPiArCQlnZW41X3Jwc19pcnFf aGFuZGxlcigmZGV2X3ByaXYtPmd0LnJwcyk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGl2Yl9k aXNwbGF5X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiBA QCAtMjQ5OCw3ICsyMTc3LDcgQEAgc3RhdGljIGlycXJldHVybl90IGlyb25sYWtlX2lycV9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiAgCQlpZiAocG1faWlyKSB7Cj4gIAkJCUk5MTVfV1JJ VEUoR0VONl9QTUlJUiwgcG1faWlyKTsKPiAgCQkJcmV0ID0gSVJRX0hBTkRMRUQ7Cj4gLQkJCWdl bjZfcnBzX2lycV9oYW5kbGVyKGRldl9wcml2LCBwbV9paXIpOwo+ICsJCQlnZW42X3Jwc19pcnFf aGFuZGxlcigmZGV2X3ByaXYtPmd0LnJwcywgcG1faWlyKTsKPiAgCQl9Cj4gIAl9Cj4gIAo+IEBA IC00MjcwLDEzICszOTQ5LDEwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpOTY1X2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmFyZykKPiAgdm9pZCBpbnRlbF9pcnFfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAm ZGV2X3ByaXYtPmRybTsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3Rf cG0ucnBzOwo+ICAJaW50IGk7Cj4gIAo+ICAJaW50ZWxfaHBkX2luaXRfd29yayhkZXZfcHJpdik7 Cj4gIAo+IC0JSU5JVF9XT1JLKCZycHMtPndvcmssIGdlbjZfcG1fcnBzX3dvcmspOwo+IC0KPiAg CUlOSVRfV09SSygmZGV2X3ByaXYtPmwzX3Bhcml0eS5lcnJvcl93b3JrLCBpdnlicmlkZ2VfcGFy aXR5X3dvcmspOwo+ICAJZm9yIChpID0gMDsgaSA8IE1BWF9MM19TTElDRVM7ICsraSkKPiAgCQlk ZXZfcHJpdi0+bDNfcGFyaXR5LnJlbWFwX2luZm9baV0gPSBOVUxMOwo+IEBAIC00Mjg1LDMzICsz OTYxLDYgQEAgdm9pZCBpbnRlbF9pcnFfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gIAlpZiAoSEFTX0dUX1VDKGRldl9wcml2KSAmJiBJTlRFTF9HRU4oZGV2X3ByaXYp IDwgMTEpCj4gIAkJZGV2X3ByaXYtPmd0LnBtX2d1Y19ldmVudHMgPSBHVUNfSU5UUl9HVUMySE9T VCA8PCAxNjsKPiAgCj4gLQkvKiBMZXQncyB0cmFjayB0aGUgZW5hYmxlZCBycHMgZXZlbnRzICov Cj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCj4gLQkJLyogV2FHc3ZSQzBSZXNpZGVu Y3lNZXRob2Q6dmx2ICovCj4gLQkJZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMgPSBHRU42X1BNX1JQ X1VQX0VJX0VYUElSRUQ7Cj4gLQllbHNlCj4gLQkJZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMgPSAo R0VONl9QTV9SUF9VUF9USFJFU0hPTEQgfAo+IC0JCQkJCSAgIEdFTjZfUE1fUlBfRE9XTl9USFJF U0hPTEQgfAo+IC0JCQkJCSAgIEdFTjZfUE1fUlBfRE9XTl9USU1FT1VUKTsKPiAtCj4gLQkvKiBX ZSBzaGFyZSB0aGUgcmVnaXN0ZXIgd2l0aCBvdGhlciBlbmdpbmUgKi8KPiAtCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID4gOSkKPiAtCQlHRU1fV0FSTl9PTihkZXZfcHJpdi0+cG1fcnBzX2V2ZW50 cyAmIDB4ZmZmZjAwMDApOwo+IC0KPiAtCXJwcy0+cG1faW50cm1za19tYnogPSAwOwo+IC0KPiAt CS8qCj4gLQkgKiBTTkIsSVZCLEhTVyBjYW4gd2hpbGUgVkxWLENIViBtYXkgaGFyZCBoYW5nIG9u IGxvb3BpbmcgYmF0Y2hidWZmZXIKPiAtCSAqIGlmIEdFTjZfUE1fVVBfRUlfRVhQSVJFRCBpcyBt YXNrZWQuCj4gLQkgKgo+IC0JICogVE9ETzogdmVyaWZ5IGlmIHRoaXMgY2FuIGJlIHJlcHJvZHVj ZWQgb24gVkxWLENIVi4KPiAtCSAqLwo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPD0gNykK PiAtCQlycHMtPnBtX2ludHJtc2tfbWJ6IHw9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKPiAt Cj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KQo+IC0JCXJwcy0+cG1faW50cm1za19t YnogfD0gR0VOOF9QTUlOVFJfRElTQUJMRV9SRURJUkVDVF9UT19HVUM7Cj4gLQo+ICAJZGV2LT52 YmxhbmtfZGlzYWJsZV9pbW1lZGlhdGUgPSB0cnVlOwo+ICAKPiAgCS8qIE1vc3QgcGxhdGZvcm1z IHRyZWF0IHRoZSBkaXNwbGF5IGlycSBibG9jayBhcyBhbiBhbHdheXMtb24KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfaXJxLmgKPiBpbmRleCAxOWEzYmMwMTk1MzUuLmQwZDkxYzZlMDBkNyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9pcnEuaAo+IEBAIC0yMiw5ICsyMiw2IEBAIHN0cnVjdCBpbnRlbF9ndDsK PiAgc3RydWN0IGludGVsX2d1YzsKPiAgc3RydWN0IGludGVsX3VuY29yZTsKPiAgCj4gLXZvaWQg Z2VuMTFfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHUzMiBwbV9paXIpOwo+ IC12b2lkIGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgdTMyIHBtX2lpcik7Cj4gLQo+ICB2b2lkIGludGVsX2lycV9pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxfaXJxX2Zpbmkoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgaW50IGludGVsX2lycV9pbnN0YWxsKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcG11LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCj4g aW5kZXggODU5MTI5MTdjMDYyLi4yNjZkNjZiMWZiN2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wbXUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cG11LmMKPiBAQCAtMTIsNiArMTIsNyBAQAo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3Vz ZXIuaCIKPiAgI2luY2x1ZGUgImd0L2ludGVsX2d0X3BtLmgiCj4gICNpbmNsdWRlICJndC9pbnRl bF9yYzYuaCIKPiArI2luY2x1ZGUgImd0L2ludGVsX3Jwcy5oIgo+ICAKPiAgI2luY2x1ZGUgImk5 MTVfZHJ2LmgiCj4gICNpbmNsdWRlICJpOTE1X3BtdS5oIgo+IEBAIC0zNTgsMjUgKzM1OSwyNiBA QCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBpbnRlbF9ndCAqZ3QsIHVuc2lnbmVkIGludCBwZXJp b2RfbnMpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGd0LT5pOTE1Owo+ICAJ c3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gZ3QtPnVuY29yZTsKPiAgCXN0cnVjdCBpOTE1 X3BtdSAqcG11ID0gJmk5MTUtPnBtdTsKPiArCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZndC0+ cnBzOwo+ICAKPiAgCWlmIChwbXUtPmVuYWJsZSAmIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9Q TVVfQUNUVUFMX0ZSRVFVRU5DWSkpIHsKPiAgCQl1MzIgdmFsOwo+ICAKPiAtCQl2YWwgPSBpOTE1 LT5ndF9wbS5ycHMuY3VyX2ZyZXE7Cj4gKwkJdmFsID0gcnBzLT5jdXJfZnJlcTsKPiAgCQlpZiAo aW50ZWxfZ3RfcG1fZ2V0X2lmX2F3YWtlKGd0KSkgewo+ICAJCQl2YWwgPSBpbnRlbF91bmNvcmVf cmVhZF9ub3RyYWNlKHVuY29yZSwgR0VONl9SUFNUQVQxKTsKPiAtCQkJdmFsID0gaW50ZWxfZ2V0 X2NhZ2YoaTkxNSwgdmFsKTsKPiArCQkJdmFsID0gaW50ZWxfZ2V0X2NhZ2YocnBzLCB2YWwpOwo+ ICAJCQlpbnRlbF9ndF9wbV9wdXQoZ3QpOwo+ICAJCX0KPiAgCj4gIAkJYWRkX3NhbXBsZV9tdWx0 KCZwbXUtPnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfQUNUXSwKPiAtCQkJCWludGVsX2dwdV9m cmVxKGk5MTUsIHZhbCksCj4gKwkJCQlpbnRlbF9ncHVfZnJlcShycHMsIHZhbCksCj4gIAkJCQlw ZXJpb2RfbnMgLyAxMDAwKTsKPiAgCX0KPiAgCj4gIAlpZiAocG11LT5lbmFibGUgJiBjb25maWdf ZW5hYmxlZF9tYXNrKEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVOQ1kpKSB7Cj4gIAkJYWRkX3Nh bXBsZV9tdWx0KCZwbXUtPnNhbXBsZVtfX0k5MTVfU0FNUExFX0ZSRVFfUkVRXSwKPiAtCQkJCWlu dGVsX2dwdV9mcmVxKGk5MTUsIGk5MTUtPmd0X3BtLnJwcy5jdXJfZnJlcSksCj4gKwkJCQlpbnRl bF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpLAo+ICAJCQkJcGVyaW9kX25zIC8gMTAwMCk7 Cj4gIAl9Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1 ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IGluZGV4IDQ1NzVm MzY4NDU1ZC4uMDhjZTJlZWVjZjdlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVxdWVzdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0 LmMKPiBAQCAtMzEsNiArMzEsNyBAQAo+ICAKPiAgI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9jb250 ZXh0LmgiCj4gICNpbmNsdWRlICJndC9pbnRlbF9jb250ZXh0LmgiCj4gKyNpbmNsdWRlICJndC9p bnRlbF9ycHMuaCIKPiAgCj4gICNpbmNsdWRlICJpOTE1X2FjdGl2ZS5oIgo+ICAjaW5jbHVkZSAi aTkxNV9kcnYuaCIKPiBAQCAtMjU3LDggKzI1OCw4IEBAIGJvb2wgaTkxNV9yZXF1ZXN0X3JldGly ZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgCWlmICh0ZXN0X2JpdChETUFfRkVOQ0VfRkxB R19FTkFCTEVfU0lHTkFMX0JJVCwgJnJxLT5mZW5jZS5mbGFncykpCj4gIAkJaTkxNV9yZXF1ZXN0 X2NhbmNlbF9icmVhZGNydW1iKHJxKTsKPiAgCWlmIChpOTE1X3JlcXVlc3RfaGFzX3dhaXRib29z dChycSkpIHsKPiAtCQlHRU1fQlVHX09OKCFhdG9taWNfcmVhZCgmcnEtPmk5MTUtPmd0X3BtLnJw cy5udW1fd2FpdGVycykpOwo+IC0JCWF0b21pY19kZWMoJnJxLT5pOTE1LT5ndF9wbS5ycHMubnVt X3dhaXRlcnMpOwo+ICsJCUdFTV9CVUdfT04oIWF0b21pY19yZWFkKCZycS0+ZW5naW5lLT5ndC0+ cnBzLm51bV93YWl0ZXJzKSk7Cj4gKwkJYXRvbWljX2RlYygmcnEtPmVuZ2luZS0+Z3QtPnJwcy5u dW1fd2FpdGVycyk7Cj4gIAl9Cj4gIAlpZiAoIXRlc3RfYml0KEk5MTVfRkVOQ0VfRkxBR19BQ1RJ VkUsICZycS0+ZmVuY2UuZmxhZ3MpKSB7Cj4gIAkJc2V0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNU SVZFLCAmcnEtPmZlbmNlLmZsYWdzKTsKPiBAQCAtMTQ2Niw3ICsxNDY3LDcgQEAgbG9uZyBpOTE1 X3JlcXVlc3Rfd2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAgCSAqLwo+ICAJaWYgKGZs YWdzICYgSTkxNV9XQUlUX1BSSU9SSVRZKSB7Cj4gIAkJaWYgKCFpOTE1X3JlcXVlc3Rfc3RhcnRl ZChycSkgJiYgSU5URUxfR0VOKHJxLT5pOTE1KSA+PSA2KQo+IC0JCQlnZW42X3Jwc19ib29zdChy cSk7Cj4gKwkJCWludGVsX3Jwc19ib29zdChycSk7Cj4gIAkJaTkxNV9zY2hlZHVsZV9idW1wX3By aW9yaXR5KHJxLCBJOTE1X1BSSU9SSVRZX1dBSVQpOwo+ICAJfQo+ICAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zeXNmcy5jCj4gaW5kZXggYmYwMzliOGJhNTkzLi42NTQ3NjkwOWQxYmYgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9zeXNmcy5jCj4gQEAgLTMxLDYgKzMxLDcgQEAKPiAgI2luY2x1ZGUg PGxpbnV4L3N5c2ZzLmg+Cj4gIAo+ICAjaW5jbHVkZSAiZ3QvaW50ZWxfcmM2LmgiCj4gKyNpbmNs dWRlICJndC9pbnRlbF9ycHMuaCIKPiAgCj4gICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICAjaW5j bHVkZSAiaTkxNV9zeXNmcy5oIgo+IEBAIC0yNTksNiArMjYwLDcgQEAgc3RhdGljIHNzaXplX3Qg Z3RfYWN0X2ZyZXFfbWh6X3Nob3coc3RydWN0IGRldmljZSAqa2RldiwKPiAgCQkJCSAgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gKwlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKPiAgCWludGVsX3dha2Vy ZWZfdCB3YWtlcmVmOwo+ICAJdTMyIGZyZXE7Cj4gIAo+IEBAIC0yNzEsMzEgKzI3MywzMSBAQCBz dGF0aWMgc3NpemVfdCBndF9hY3RfZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LAo+ ICAKPiAgCQlmcmVxID0gKGZyZXEgPj4gOCkgJiAweGZmOwo+ICAJfSBlbHNlIHsKPiAtCQlmcmVx ID0gaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsIEk5MTVfUkVBRChHRU42X1JQU1RBVDEpKTsKPiAr CQlmcmVxID0gaW50ZWxfZ2V0X2NhZ2YocnBzLCBJOTE1X1JFQUQoR0VONl9SUFNUQVQxKSk7Cj4g IAl9Cj4gIAo+ICAJaW50ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3 YWtlcmVmKTsKPiAgCj4gLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwg aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIGZyZXEpKTsKPiArCXJldHVybiBzbnByaW50ZihidWYs IFBBR0VfU0laRSwgIiVkXG4iLCBpbnRlbF9ncHVfZnJlcShycHMsIGZyZXEpKTsKPiAgfQo+ICAK PiAgc3RhdGljIHNzaXplX3QgZ3RfY3VyX2ZyZXFfbWh6X3Nob3coc3RydWN0IGRldmljZSAqa2Rl diwKPiAgCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3Rv X2k5MTUoa2Rldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJw czsKPiAgCj4gIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKPiAtCQkJ aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCj4gLQkJCQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJw cy5jdXJfZnJlcSkpOwo+ICsJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+Y3VyX2ZyZXEpKTsK PiAgfQo+ICAKPiAgc3RhdGljIHNzaXplX3QgZ3RfYm9vc3RfZnJlcV9taHpfc2hvdyhzdHJ1Y3Qg ZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3Rv X2k5MTUoa2Rldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJw czsKPiAgCj4gIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKPiAtCQkJ aW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCj4gLQkJCQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJw cy5ib29zdF9mcmVxKSk7Cj4gKwkJCWludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ib29zdF9mcmVx KSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBzc2l6ZV90IGd0X2Jvb3N0X2ZyZXFfbWh6X3N0b3JlKHN0 cnVjdCBkZXZpY2UgKmtkZXYsCj4gQEAgLTMwMyw3ICszMDUsNyBAQCBzdGF0aWMgc3NpemVfdCBn dF9ib29zdF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAo+ICAJCQkJICAgICAg IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gLQlzdHJ1Y3Qg aW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiArCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwo+ICAJYm9vbCBib29zdCA9IGZhbHNlOwo+ICAJ c3NpemVfdCByZXQ7Cj4gIAl1MzIgdmFsOwo+IEBAIC0zMTMsNyArMzE1LDcgQEAgc3RhdGljIHNz aXplX3QgZ3RfYm9vc3RfZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKPiAgCQly ZXR1cm4gcmV0Owo+ICAKPiAgCS8qIFZhbGlkYXRlIGFnYWluc3QgKHN0YXRpYykgaGFyZHdhcmUg bGltaXRzICovCj4gLQl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKPiAr CXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKPiAgCWlmICh2YWwgPCBycHMtPm1p bl9mcmVxIHx8IHZhbCA+IHJwcy0+bWF4X2ZyZXEpCj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAo+ IEBAIC0zMzMsMTkgKzMzNSwxOSBAQCBzdGF0aWMgc3NpemVfdCB2bHZfcnBlX2ZyZXFfbWh6X3No b3coc3RydWN0IGRldmljZSAqa2RldiwKPiAgCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0ga2Rldl9taW5vcl90b19pOTE1KGtkZXYpOwo+ICsJc3RydWN0IGludGVsX3JwcyAq cnBzID0gJmRldl9wcml2LT5ndC5ycHM7Cj4gIAo+ICAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFH RV9TSVpFLCAiJWRcbiIsCj4gLQkJCWludGVsX2dwdV9mcmVxKGRldl9wcml2LAo+IC0JCQkJICAg ICAgIGRldl9wcml2LT5ndF9wbS5ycHMuZWZmaWNpZW50X2ZyZXEpKTsKPiArCQkJaW50ZWxfZ3B1 X2ZyZXEocnBzLCBycHMtPmVmZmljaWVudF9mcmVxKSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBzc2l6 ZV90IGd0X21heF9mcmVxX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKPiArCXN0cnVjdCBp bnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwo+ICAKPiAgCXJldHVybiBzbnByaW50 ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAo+IC0JCQlpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwK PiAtCQkJCSAgICAgICBkZXZfcHJpdi0+Z3RfcG0ucnBzLm1heF9mcmVxX3NvZnRsaW1pdCkpOwo+ ICsJCQlpbnRlbF9ncHVfZnJlcShycHMsIHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSk7Cj4gIH0K PiAgCj4gIHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNl ICprZGV2LAo+IEBAIC0zNTMsMTkgKzM1NSwxNyBAQCBzdGF0aWMgc3NpemVfdCBndF9tYXhfZnJl cV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2RldiwKPiAgCQkJCSAgICAgY29uc3QgY2hhciAq YnVmLCBzaXplX3QgY291bnQpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJw cyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4g LQl1MzIgdmFsOwo+ICsJc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndC5ycHM7 Cj4gIAlzc2l6ZV90IHJldDsKPiArCXUzMiB2YWw7Cj4gIAo+ICAJcmV0ID0ga3N0cnRvdTMyKGJ1 ZiwgMCwgJnZhbCk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0Jd2FrZXJl ZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0+cnVudGltZV9wbSk7Cj4gIAltdXRl eF9sb2NrKCZycHMtPmxvY2spOwo+ICAKPiAtCXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKGRldl9w cml2LCB2YWwpOwo+ICsJdmFsID0gaW50ZWxfZnJlcV9vcGNvZGUocnBzLCB2YWwpOwo+ICAJaWYg KHZhbCA8IHJwcy0+bWluX2ZyZXEgfHwKPiAgCSAgICB2YWwgPiBycHMtPm1heF9mcmVxIHx8Cj4g IAkgICAgdmFsIDwgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQpIHsKPiBAQCAtMzc1LDcgKzM3NSw3 IEBAIHN0YXRpYyBzc2l6ZV90IGd0X21heF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICpr ZGV2LAo+ICAKPiAgCWlmICh2YWwgPiBycHMtPnJwMF9mcmVxKQo+ICAJCURSTV9ERUJVRygiVXNl ciByZXF1ZXN0ZWQgb3ZlcmNsb2NraW5nIHRvICVkXG4iLAo+IC0JCQkgIGludGVsX2dwdV9mcmVx KGRldl9wcml2LCB2YWwpKTsKPiArCQkJICBpbnRlbF9ncHVfZnJlcShycHMsIHZhbCkpOwo+ICAK PiAgCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0ID0gdmFsOwo+ICAKPiBAQCAtMzgzLDE0ICszODMs MTUgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWF4X2ZyZXFfbWh6X3N0b3JlKHN0cnVjdCBkZXZpY2Ug KmtkZXYsCj4gIAkJICAgICAgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQsCj4gIAkJICAgICAgcnBz LT5tYXhfZnJlcV9zb2Z0bGltaXQpOwo+ICAKPiAtCS8qIFdlIHN0aWxsIG5lZWQgKl9zZXRfcnBz IHRvIHByb2Nlc3MgdGhlIG5ldyBtYXhfZGVsYXkgYW5kCj4gKwkvKgo+ICsJICogV2Ugc3RpbGwg bmVlZCAqX3NldF9ycHMgdG8gcHJvY2VzcyB0aGUgbmV3IG1heF9kZWxheSBhbmQKPiAgCSAqIHVw ZGF0ZSB0aGUgaW50ZXJydXB0IGxpbWl0cyBhbmQgUE1JTlRSTVNLIGV2ZW4gdGhvdWdoCj4gLQkg KiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkgYmUgdW5jaGFuZ2VkLiAqLwo+IC0JcmV0ID0gaW50ZWxf c2V0X3JwcyhkZXZfcHJpdiwgdmFsKTsKPiArCSAqIGZyZXF1ZW5jeSByZXF1ZXN0IG1heSBiZSB1 bmNoYW5nZWQuCj4gKwkgKi8KPiArCWludGVsX3Jwc19zZXQocnBzLCB2YWwpOwo+ICAKPiAgdW5s b2NrOgo+ICAJbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwo+IC0JaW50ZWxfcnVudGltZV9wbV9w dXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsKPiAgCj4gIAlyZXR1cm4gcmV0ID86 IGNvdW50Owo+ICB9Cj4gQEAgLTM5OCwxMCArMzk5LDEwIEBAIHN0YXRpYyBzc2l6ZV90IGd0X21h eF9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2LAo+ICBzdGF0aWMgc3NpemVfdCBn dF9taW5fZnJlcV9taHpfc2hvdyhzdHJ1Y3QgZGV2aWNlICprZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gKwlzdHJ1Y3QgaW50ZWxf cnBzICpycHMgPSAmZGV2X3ByaXYtPmd0LnJwczsKPiAgCj4gIAlyZXR1cm4gc25wcmludGYoYnVm LCBQQUdFX1NJWkUsICIlZFxuIiwKPiAtCQkJaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsCj4gLQkJ CQkgICAgICAgZGV2X3ByaXYtPmd0X3BtLnJwcy5taW5fZnJlcV9zb2Z0bGltaXQpKTsKPiArCQkJ aW50ZWxfZ3B1X2ZyZXEocnBzLCBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkpOwo+ICB9Cj4gIAo+ ICBzdGF0aWMgc3NpemVfdCBndF9taW5fZnJlcV9taHpfc3RvcmUoc3RydWN0IGRldmljZSAqa2Rl diwKPiBAQCAtNDA5LDE5ICs0MTAsMTcgQEAgc3RhdGljIHNzaXplX3QgZ3RfbWluX2ZyZXFfbWh6 X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmtkZXYsCj4gIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwg c2l6ZV90IGNvdW50KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBrZGV2X21pbm9yX3RvX2k5MTUoa2Rldik7Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAm ZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JdTMy IHZhbDsKPiArCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3QucnBzOwo+ICAJ c3NpemVfdCByZXQ7Cj4gKwl1MzIgdmFsOwo+ICAKPiAgCXJldCA9IGtzdHJ0b3UzMihidWYsIDAs ICZ2YWwpOwo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXdha2VyZWYgPSBp bnRlbF9ydW50aW1lX3BtX2dldCgmZGV2X3ByaXYtPnJ1bnRpbWVfcG0pOwo+ICAJbXV0ZXhfbG9j aygmcnBzLT5sb2NrKTsKPiAgCj4gLQl2YWwgPSBpbnRlbF9mcmVxX29wY29kZShkZXZfcHJpdiwg dmFsKTsKPiArCXZhbCA9IGludGVsX2ZyZXFfb3Bjb2RlKHJwcywgdmFsKTsKPiAgCWlmICh2YWwg PCBycHMtPm1pbl9mcmVxIHx8Cj4gIAkgICAgdmFsID4gcnBzLT5tYXhfZnJlcSB8fAo+ICAJICAg IHZhbCA+IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSB7Cj4gQEAgLTQzNSwxNCArNDM0LDE1IEBA IHN0YXRpYyBzc2l6ZV90IGd0X21pbl9mcmVxX21oel9zdG9yZShzdHJ1Y3QgZGV2aWNlICprZGV2 LAo+ICAJCSAgICAgIHJwcy0+bWluX2ZyZXFfc29mdGxpbWl0LAo+ICAJCSAgICAgIHJwcy0+bWF4 X2ZyZXFfc29mdGxpbWl0KTsKPiAgCj4gLQkvKiBXZSBzdGlsbCBuZWVkICpfc2V0X3JwcyB0byBw cm9jZXNzIHRoZSBuZXcgbWluX2RlbGF5IGFuZAo+ICsJLyoKPiArCSAqIFdlIHN0aWxsIG5lZWQg Kl9zZXRfcnBzIHRvIHByb2Nlc3MgdGhlIG5ldyBtaW5fZGVsYXkgYW5kCj4gIAkgKiB1cGRhdGUg dGhlIGludGVycnVwdCBsaW1pdHMgYW5kIFBNSU5UUk1TSyBldmVuIHRob3VnaAo+IC0JICogZnJl cXVlbmN5IHJlcXVlc3QgbWF5IGJlIHVuY2hhbmdlZC4gKi8KPiAtCXJldCA9IGludGVsX3NldF9y cHMoZGV2X3ByaXYsIHZhbCk7Cj4gKwkgKiBmcmVxdWVuY3kgcmVxdWVzdCBtYXkgYmUgdW5jaGFu Z2VkLgo+ICsJICovCj4gKwlpbnRlbF9ycHNfc2V0KHJwcywgdmFsKTsKPiAgCj4gIHVubG9jazoK PiAgCW11dGV4X3VubG9jaygmcnBzLT5sb2NrKTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KCZk ZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZik7Cj4gIAo+ICAJcmV0dXJuIHJldCA/OiBjb3Vu dDsKPiAgfQo+IEBAIC00NjQsMTUgKzQ2NCwxNSBAQCBzdGF0aWMgREVWSUNFX0FUVFIoZ3RfUlBu X2ZyZXFfbWh6LCBTX0lSVUdPLCBndF9ycF9taHpfc2hvdywgTlVMTCk7Cj4gIHN0YXRpYyBzc2l6 ZV90IGd0X3JwX21oel9zaG93KHN0cnVjdCBkZXZpY2UgKmtkZXYsIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGtkZXZfbWlub3JfdG9faTkxNShrZGV2KTsKPiAtCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+ICsJc3RydWN0IGludGVsX3JwcyAqcnBz ID0gJmRldl9wcml2LT5ndC5ycHM7Cj4gIAl1MzIgdmFsOwo+ICAKPiAgCWlmIChhdHRyID09ICZk ZXZfYXR0cl9ndF9SUDBfZnJlcV9taHopCj4gLQkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3By aXYsIHJwcy0+cnAwX2ZyZXEpOwo+ICsJCXZhbCA9IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5y cDBfZnJlcSk7Cj4gIAllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl9ndF9SUDFfZnJlcV9taHop Cj4gLQkJdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+cnAxX2ZyZXEpOwo+ICsJ CXZhbCA9IGludGVsX2dwdV9mcmVxKHJwcywgcnBzLT5ycDFfZnJlcSk7Cj4gIAllbHNlIGlmIChh dHRyID09ICZkZXZfYXR0cl9ndF9SUG5fZnJlcV9taHopCj4gLQkJdmFsID0gaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHJwcy0+bWluX2ZyZXEpOwo+ICsJCXZhbCA9IGludGVsX2dwdV9mcmVxKHJw cywgcnBzLT5taW5fZnJlcSk7Cj4gIAllbHNlCj4gIAkJQlVHKCk7Cj4gIAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcG0uYwo+IGluZGV4IDM2MjIzNDQ0OTA4Ny4uNjc0MTUwN2M3NGYzIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9wbS5jCj4gQEAgLTE5Nyw4ICsxOTcsNiBAQCBzdGF0aWMgdm9pZCBpOTE1 X2lyb25sYWtlX2dldF9tZW1fZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gIAkJYnJlYWs7Cj4gIAl9Cj4gIAo+IC0JZGV2X3ByaXYtPmlwcy5yX3QgPSBkZXZfcHJpdi0+ bWVtX2ZyZXE7Cj4gLQo+ICAJc3dpdGNoIChjc2lwbGwgJiAweDNmZikgewo+ICAJY2FzZSAweDAw YzoKPiAgCQlkZXZfcHJpdi0+ZnNiX2ZyZXEgPSAzMjAwOwo+IEBAIC0yMjcsMTQgKzIyNSw2IEBA IHN0YXRpYyB2b2lkIGk5MTVfaXJvbmxha2VfZ2V0X21lbV9mcmVxKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAgCQlkZXZfcHJpdi0+ZnNiX2ZyZXEgPSAwOwo+ICAJCWJyZWFr Owo+ICAJfQo+IC0KPiAtCWlmIChkZXZfcHJpdi0+ZnNiX2ZyZXEgPT0gMzIwMCkgewo+IC0JCWRl dl9wcml2LT5pcHMuY19tID0gMDsKPiAtCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmZzYl9mcmVxID4g MzIwMCAmJiBkZXZfcHJpdi0+ZnNiX2ZyZXEgPD0gNDgwMCkgewo+IC0JCWRldl9wcml2LT5pcHMu Y19tID0gMTsKPiAtCX0gZWxzZSB7Cj4gLQkJZGV2X3ByaXYtPmlwcy5jX20gPSAyOwo+IC0JfQo+ ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGN4c3JfbGF0ZW5jeSBjeHNyX2xhdGVuY3lf dGFibGVbXSA9IHsKPiBAQCAtNjMzOSwxODY1ICs2MzI5LDI1OCBAQCB2b2lkIGludGVsX2luaXRf aXBjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCWludGVsX2VuYWJsZV9p cGMoZGV2X3ByaXYpOwo+ICB9Cj4gIAo+IC0vKgo+IC0gKiBMb2NrIHByb3RlY3RpbmcgSVBTIHJl bGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzCj4gLSAqLwo+IC1ERUZJTkVfU1BJTkxPQ0sobWNoZGV2X2xv Y2spOwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNwYXJhbXMgewo+ICsJdTE2IGk7Cj4gKwl1MTYg dDsKPiArCXUxNiBtOwo+ICsJdTE2IGM7Cj4gK30gY3BhcmFtc1tdID0gewo+ICsJeyAxLCAxMzMz LCAzMDEsIDI4NjY0IH0sCj4gKwl7IDEsIDEwNjYsIDI5NCwgMjQ0NjAgfSwKPiArCXsgMSwgODAw LCAyOTQsIDI1MTkyIH0sCj4gKwl7IDAsIDEzMzMsIDI3NiwgMjc2MDUgfSwKPiArCXsgMCwgMTA2 NiwgMjc2LCAyNzYwNSB9LAo+ICsJeyAwLCA4MDAsIDIzMSwgMjM3ODQgfSwKPiArfTsKPiAgCj4g LWJvb2wgaXJvbmxha2Vfc2V0X2RycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4 IHZhbCkKPiArc3RhdGljIHZvaWQgaWJ4X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0Jc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3Jl ID0gJmk5MTUtPnVuY29yZTsKPiAtCXUxNiByZ3Zzd2N0bDsKPiAtCj4gLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZtY2hkZXZfbG9jayk7Cj4gLQo+IC0Jcmd2c3djdGwgPSBpbnRlbF91bmNvcmVfcmVh ZDE2KHVuY29yZSwgTUVNU1dDVEwpOwo+IC0JaWYgKHJndnN3Y3RsICYgTUVNQ1RMX0NNRF9TVFMp IHsKPiAtCQlEUk1fREVCVUcoImdwdSBidXN5LCBSQ1MgY2hhbmdlIHJlamVjdGVkXG4iKTsKPiAt CQlyZXR1cm4gZmFsc2U7IC8qIHN0aWxsIGJ1c3kgd2l0aCBhbm90aGVyIGNvbW1hbmQgKi8KPiAt CX0KPiAtCj4gLQlyZ3Zzd2N0bCA9IChNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExfQ01EX1NI SUZUKSB8Cj4gLQkJKHZhbCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfCBNRU1DVExfU0ZDQVZNOwo+ IC0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBNRU1TV0NUTCwgcmd2c3djdGwpOwo+IC0J aW50ZWxfdW5jb3JlX3Bvc3RpbmdfcmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOwo+IC0KPiAtCXJn dnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3Jl LCBNRU1TV0NUTCwgcmd2c3djdGwpOwo+IC0KPiAtCXJldHVybiB0cnVlOwo+ICsJLyoKPiArCSAq IE9uIEliZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sK PiArCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZh aWwgdG8KPiArCSAqIHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4KPiArCSAqLwo+ ICsJSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRfQ0xPQ0tfR0FU RV9ESVNBQkxFKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgaXJvbmxha2VfZW5hYmxlX2RycHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgdm9pZCBnNHhfZGlz YWJsZV90cmlja2xlX2ZlZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7 Cj4gLQlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmZGV2X3ByaXYtPnVuY29yZTsKPiAt CXUzMiByZ3Ztb2RlY3RsOwo+IC0JdTggZm1heCwgZm1pbiwgZnN0YXJ0LCB2c3RhcnQ7Cj4gLQo+ IC0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0KPiAtCXJndm1vZGVjdGwgPSBpbnRl bF91bmNvcmVfcmVhZCh1bmNvcmUsIE1FTU1PREVDVEwpOwo+IC0KPiAtCS8qIEVuYWJsZSB0ZW1w IHJlcG9ydGluZyAqLwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlMTYodW5jb3JlLCBQTU1JU0MsIEk5 MTVfUkVBRChQTU1JU0MpIHwgTUNQUENFX0VOKTsKPiAtCWludGVsX3VuY29yZV93cml0ZTE2KHVu Y29yZSwgVFNDMSwgSTkxNV9SRUFEKFRTQzEpIHwgVFNFKTsKPiAtCj4gLQkvKiAxMDBtcyBSQyBl dmFsdWF0aW9uIGludGVydmFscyAqLwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNV UEVJLCAxMDAwMDApOwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNETkVJLCAxMDAw MDApOwo+IC0KPiAtCS8qIFNldCBtYXgvbWluIHRocmVzaG9sZHMgdG8gOTBtcyBhbmQgODBtcyBy ZXNwZWN0aXZlbHkgKi8KPiAtCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIFJDQk1BWEFWRywg OTAwMDApOwo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgUkNCTUlOQVZHLCA4MDAwMCk7 Cj4gLQo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNSUhZU1QsIDEpOwo+ICsJZW51 bSBwaXBlIHBpcGU7Cj4gIAo+IC0JLyogU2V0IHVwIG1pbiwgbWF4LCBhbmQgY3VyIGZvciBpbnRl cnJ1cHQgaGFuZGxpbmcgKi8KPiAtCWZtYXggPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1BWF9N QVNLKSA+PiBNRU1NT0RFX0ZNQVhfU0hJRlQ7Cj4gLQlmbWluID0gKHJndm1vZGVjdGwgJiBNRU1N T0RFX0ZNSU5fTUFTSyk7Cj4gLQlmc3RhcnQgPSAocmd2bW9kZWN0bCAmIE1FTU1PREVfRlNUQVJU X01BU0spID4+Cj4gLQkJTUVNTU9ERV9GU1RBUlRfU0hJRlQ7Cj4gKwlmb3JfZWFjaF9waXBlKGRl dl9wcml2LCBwaXBlKSB7Cj4gKwkJSTkxNV9XUklURShEU1BDTlRSKHBpcGUpLAo+ICsJCQkgICBJ OTE1X1JFQUQoRFNQQ05UUihwaXBlKSkgfAo+ICsJCQkgICBESVNQUExBTkVfVFJJQ0tMRV9GRUVE X0RJU0FCTEUpOwo+ICAKPiAtCXZzdGFydCA9IChpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIFBY VkZSRVEoZnN0YXJ0KSkgJgo+IC0JCSAgUFhWRlJFUV9QWF9NQVNLKSA+PiBQWFZGUkVRX1BYX1NI SUZUOwo+ICsJCUk5MTVfV1JJVEUoRFNQU1VSRihwaXBlKSwgSTkxNV9SRUFEKERTUFNVUkYocGlw ZSkpKTsKPiArCQlQT1NUSU5HX1JFQUQoRFNQU1VSRihwaXBlKSk7Cj4gKwl9Cj4gK30KPiAgCj4g LQlkZXZfcHJpdi0+aXBzLmZtYXggPSBmbWF4OyAvKiBJUFMgY2FsbGJhY2sgd2lsbCBpbmNyZWFz ZSB0aGlzICovCj4gLQlkZXZfcHJpdi0+aXBzLmZzdGFydCA9IGZzdGFydDsKPiArc3RhdGljIHZv aWQgaWxrX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiArewo+ICsJdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9ESVNB QkxFOwo+ICAKPiAtCWRldl9wcml2LT5pcHMubWF4X2RlbGF5ID0gZnN0YXJ0Owo+IC0JZGV2X3By aXYtPmlwcy5taW5fZGVsYXkgPSBmbWluOwo+IC0JZGV2X3ByaXYtPmlwcy5jdXJfZGVsYXkgPSBm c3RhcnQ7Cj4gKwkvKgo+ICsJICogUmVxdWlyZWQgZm9yIEZCQwo+ICsJICogV2FGYmNEaXNhYmxl RHBmY0Nsb2NrR2F0aW5nOmlsawo+ICsJICovCj4gKwlkc3BjbGtfZ2F0ZSB8PSBJTEtfRFBGQ1JV TklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Cj4gKwkJICAgSUxLX0RQRkNVTklUX0NMT0NLX0dBVEVf RElTQUJMRSB8Cj4gKwkJICAgSUxLX0RQRkRVTklUX0NMT0NLX0dBVEVfRU5BQkxFOwo+ICAKPiAt CURSTV9ERUJVR19EUklWRVIoImZtYXg6ICVkLCBmbWluOiAlZCwgZnN0YXJ0OiAlZFxuIiwKPiAt CQkJIGZtYXgsIGZtaW4sIGZzdGFydCk7Cj4gKwlJOTE1X1dSSVRFKFBDSF8zRENHRElTMCwKPiAr CQkgICBNQVJJVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAo+ICsJCSAgIFNWU01VTklUX0NMT0NL X0dBVEVfRElTQUJMRSk7Cj4gKwlJOTE1X1dSSVRFKFBDSF8zRENHRElTMSwKPiArCQkgICBWRk1V TklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Cj4gIAo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwKPiAtCQkJICAgTUVNSU5UUkVOLAo+IC0JCQkgICBNRU1JTlRfQ1hfU1VQUl9FTiB8IE1FTUlO VF9FVkFMX0NIR19FTik7Cj4gKwkvKgo+ICsJICogQWNjb3JkaW5nIHRvIHRoZSBzcGVjIHRoZSBm b2xsb3dpbmcgYml0cyBzaG91bGQgYmUgc2V0IGluCj4gKwkgKiBvcmRlciB0byBlbmFibGUgbWVt b3J5IHNlbGYtcmVmcmVzaAo+ICsJICogVGhlIGJpdCAyMi8yMSBvZiAweDQyMDA0Cj4gKwkgKiBU aGUgYml0IDUgb2YgMHg0MjAyMAo+ICsJICogVGhlIGJpdCAxNSBvZiAweDQ1MDAwCj4gKwkgKi8K PiArCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCj4gKwkJICAgKEk5MTVfUkVBRChJ TEtfRElTUExBWV9DSElDS0VOMikgfAo+ICsJCSAgICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQ RkRfRlVMTCkpOwo+ICsJZHNwY2xrX2dhdGUgfD0gSUxLX0RQQVJCVU5JVF9DTE9DS19HQVRFX0VO QUJMRTsKPiArCUk5MTVfV1JJVEUoRElTUF9BUkJfQ1RMLAo+ICsJCSAgIChJOTE1X1JFQUQoRElT UF9BUkJfQ1RMKSB8Cj4gKwkJICAgIERJU1BfRkJDX1dNX0RJUykpOwo+ICAKPiAgCS8qCj4gLQkg KiBJbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBpbiBpcm9ubGFrZV9pcnFfcG9zdGluc3RhbGwK PiArCSAqIEJhc2VkIG9uIHRoZSBkb2N1bWVudCBmcm9tIGhhcmR3YXJlIGd1eXMgdGhlIGZvbGxv d2luZyBiaXRzCj4gKwkgKiBzaG91bGQgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0 byBlbmFibGUgRkJDLgo+ICsJICogVGhlIGJpdCAyMiBvZiAweDQyMDAwCj4gKwkgKiBUaGUgYml0 IDIyIG9mIDB4NDIwMDQKPiArCSAqIFRoZSBiaXQgNyw4LDkgb2YgMHg0MjAyMC4KPiAgCSAqLwo+ ICsJaWYgKElTX0lST05MQUtFX00oZGV2X3ByaXYpKSB7Cj4gKwkJLyogV2FGYmNBc3luY2hGbGlw RGlzYWJsZUZiY1F1ZXVlOmlsayAqLwo+ICsJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tF TjEsCj4gKwkJCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMSkgfAo+ICsJCQkgICBJ TEtfRkJDUV9ESVMpOwo+ICsJCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCj4gKwkJ CSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAo+ICsJCQkgICBJTEtfRFBBUkJf R0FURSk7Cj4gKwl9Cj4gIAo+IC0JaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgVklEU1RBUlQs IHZzdGFydCk7Cj4gLQlpbnRlbF91bmNvcmVfcG9zdGluZ19yZWFkKHVuY29yZSwgVklEU1RBUlQp Owo+ICsJSTkxNV9XUklURShJTEtfRFNQQ0xLX0dBVEVfRCwgZHNwY2xrX2dhdGUpOwo+ICAKPiAt CXJndm1vZGVjdGwgfD0gTUVNTU9ERV9TV01PREVfRU47Cj4gLQlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBNRU1NT0RFQ1RMLCByZ3Ztb2RlY3RsKTsKPiArCUk5MTVfV1JJVEUoSUxLX0RJU1BM QVlfQ0hJQ0tFTjIsCj4gKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4yKSB8Cj4g KwkJICAgSUxLX0VMUElOXzQwOV9TRUxFQ1QpOwo+ICsJSTkxNV9XUklURShfM0RfQ0hJQ0tFTjIs Cj4gKwkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJTkVEIDw8IDE2IHwKPiArCQkgICBf M0RfQ0hJQ0tFTjJfV01fUkVBRF9QSVBFTElORUQpOwo+ICAKPiAtCWlmICh3YWl0X2Zvcl9hdG9t aWMoKGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgTUVNU1dDVEwpICYKPiAtCQkJICAgICBNRU1D VExfQ01EX1NUUykgPT0gMCwgMTApKQo+IC0JCURSTV9FUlJPUigic3R1Y2sgdHJ5aW5nIHRvIGNo YW5nZSBwZXJmIG1vZGVcbiIpOwo+IC0JbWRlbGF5KDEpOwo+ICsJLyogV2FEaXNhYmxlUmVuZGVy Q2FjaGVQaXBlbGluZWRGbHVzaDppbGsgKi8KPiArCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLAo+ ICsJCSAgIF9NQVNLRURfQklUX0VOQUJMRShDTTBfUElQRUxJTkVEX1JFTkRFUl9GTFVTSF9ESVNB QkxFKSk7Cj4gIAo+IC0JaXJvbmxha2Vfc2V0X2RycHMoZGV2X3ByaXYsIGZzdGFydCk7Cj4gKwkv KiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVzaDppbGsgKi8KPiArCUk5MTVf V1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZMVVNIX0VOQUJM RSkpOwo+ICAKPiAtCWRldl9wcml2LT5pcHMubGFzdF9jb3VudDEgPQo+IC0JCWludGVsX3VuY29y ZV9yZWFkKHVuY29yZSwgRE1JRUMpICsKPiAtCQlpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERE UkVDKSArCj4gLQkJaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBDU0lFQyk7Cj4gLQlkZXZfcHJp di0+aXBzLmxhc3RfdGltZTEgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwo+IC0JZGV2X3By aXYtPmlwcy5sYXN0X2NvdW50MiA9IGludGVsX3VuY29yZV9yZWFkKHVuY29yZSwgR0ZYRUMpOwo+ IC0JZGV2X3ByaXYtPmlwcy5sYXN0X3RpbWUyID0ga3RpbWVfZ2V0X3Jhd19ucygpOwo+ICsJZzR4 X2Rpc2FibGVfdHJpY2tsZV9mZWVkKGRldl9wcml2KTsKPiAgCj4gLQlzcGluX3VubG9ja19pcnEo Jm1jaGRldl9sb2NrKTsKPiArCWlieF9pbml0X2Nsb2NrX2dhdGluZyhkZXZfcHJpdik7Cj4gIH0K PiAgCj4gLXN0YXRpYyB2b2lkIGlyb25sYWtlX2Rpc2FibGVfZHJwcyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKPiArc3RhdGljIHZvaWQgY3B0X2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0Jc3RydWN0IGludGVsX3VuY29y ZSAqdW5jb3JlID0gJmk5MTUtPnVuY29yZTsKPiAtCXUxNiByZ3Zzd2N0bDsKPiAtCj4gLQlzcGlu X2xvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gLQo+IC0Jcmd2c3djdGwgPSBpbnRlbF91bmNvcmVf cmVhZDE2KHVuY29yZSwgTUVNU1dDVEwpOwo+IC0KPiAtCS8qIEFjayBpbnRlcnJ1cHRzLCBkaXNh YmxlIEVGQyBpbnRlcnJ1cHQgKi8KPiAtCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsCj4gLQkJ CSAgIE1FTUlOVFJFTiwKPiAtCQkJICAgaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBNRU1JTlRS RU4pICYKPiAtCQkJICAgfk1FTUlOVF9FVkFMX0NIR19FTik7Cj4gLQlpbnRlbF91bmNvcmVfd3Jp dGUodW5jb3JlLCBNRU1JTlRSU1RTLCBNRU1JTlRfRVZBTF9DSEcpOwo+IC0JaW50ZWxfdW5jb3Jl X3dyaXRlKHVuY29yZSwKPiAtCQkJICAgREVJRVIsCj4gLQkJCSAgIGludGVsX3VuY29yZV9yZWFk KHVuY29yZSwgREVJRVIpICYgfkRFX1BDVV9FVkVOVCk7Cj4gLQlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBERUlJUiwgREVfUENVX0VWRU5UKTsKPiAtCWludGVsX3VuY29yZV93cml0ZSh1bmNv cmUsCj4gLQkJCSAgIERFSU1SLAo+IC0JCQkgICBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIERF SU1SKSB8IERFX1BDVV9FVkVOVCk7Cj4gLQo+IC0JLyogR28gYmFjayB0byB0aGUgc3RhcnRpbmcg ZnJlcXVlbmN5ICovCj4gLQlpcm9ubGFrZV9zZXRfZHJwcyhpOTE1LCBpOTE1LT5pcHMuZnN0YXJ0 KTsKPiAtCW1kZWxheSgxKTsKPiAtCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOwo+IC0JaW50 ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgTUVNU1dDVEwsIHJndnN3Y3RsKTsKPiAtCW1kZWxheSgx KTsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsJdTMyIHZhbDsKPiAgCj4gLQlzcGluX3VubG9ja19p cnEoJm1jaGRldl9sb2NrKTsKPiArCS8qCj4gKwkgKiBPbiBJYmV4IFBlYWsgYW5kIENvdWdhciBQ b2ludCwgd2UgbmVlZCB0byBkaXNhYmxlIGNsb2NrCj4gKwkgKiBnYXRpbmcgZm9yIHRoZSBwYW5l bCBwb3dlciBzZXF1ZW5jZXIgb3IgaXQgd2lsbCBmYWlsIHRvCj4gKwkgKiBzdGFydCB1cCB3aGVu IG5vIHBvcnRzIGFyZSBhY3RpdmUuCj4gKwkgKi8KPiArCUk5MTVfV1JJVEUoU09VVEhfRFNQQ0xL X0dBVEVfRCwgUENIX0RQTFNVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Cj4gKwkJICAgUENIX0RQ TFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKPiArCQkgICBQQ0hfQ1BVTklUX0NMT0NLX0dBVEVf RElTQUJMRSk7Cj4gKwlJOTE1X1dSSVRFKFNPVVRIX0NISUNLRU4yLCBJOTE1X1JFQUQoU09VVEhf Q0hJQ0tFTjIpIHwKPiArCQkgICBEUExTX0VEUF9QUFNfRklYX0RJUyk7Cj4gKwkvKiBUaGUgYmVs b3cgZml4ZXMgdGhlIHdlaXJkIGRpc3BsYXkgY29ycnVwdGlvbiwgYSBmZXcgcGl4ZWxzIHNoaWZ0 ZWQKPiArCSAqIGRvd253YXJkLCBvbiAob25seSkgTFZEUyBvZiBzb21lIEhQIGxhcHRvcHMgd2l0 aCBJVlkuCj4gKwkgKi8KPiArCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKPiArCQl2 YWwgPSBJOTE1X1JFQUQoVFJBTlNfQ0hJQ0tFTjIocGlwZSkpOwo+ICsJCXZhbCB8PSBUUkFOU19D SElDS0VOMl9USU1JTkdfT1ZFUlJJREU7Cj4gKwkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9GRElf UE9MQVJJVFlfUkVWRVJTRUQ7Cj4gKwkJaWYgKGRldl9wcml2LT52YnQuZmRpX3J4X3BvbGFyaXR5 X2ludmVydGVkKQo+ICsJCQl2YWwgfD0gVFJBTlNfQ0hJQ0tFTjJfRkRJX1BPTEFSSVRZX1JFVkVS U0VEOwo+ICsJCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRlJBTUVfU1RBUlRfREVMQVlfTUFTSzsK PiArCQl2YWwgJj0gflRSQU5TX0NISUNLRU4yX0RJU0FCTEVfREVFUF9DT0xPUl9DT1VOVEVSOwo+ ICsJCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQX0NPTE9SX01PREVTV0lUQ0g7 Cj4gKwkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMihwaXBlKSwgdmFsKTsKPiArCX0KPiArCS8q IFdBRFAwQ2xvY2tHYXRpbmdEaXNhYmxlICovCj4gKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBw aXBlKSB7Cj4gKwkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMShwaXBlKSwKPiArCQkJICAgVFJB TlNfQ0hJQ0tFTjFfRFAwVU5JVF9HQ19ESVNBQkxFKTsKPiArCX0KPiAgfQo+ICAKPiAtLyogVGhl cmUncyBhIGZ1bm55IGh3IGlzc3VlIHdoZXJlIHRoZSBodyByZXR1cm5zIGFsbCAwIHdoZW4gcmVh ZGluZyBmcm9tCj4gLSAqIEdFTjZfUlBfSU5URVJSVVBUX0xJTUlUUy4gSGVuY2Ugd2UgYWx3YXlz IG5lZWQgdG8gY29tcHV0ZSB0aGUgZGVzaXJlZCB2YWx1ZQo+IC0gKiBvdXJzZWx2ZXMsIGluc3Rl YWQgb2YgZG9pbmcgYSBybXcgY3ljbGUgKHdoaWNoIG1pZ2h0IHJlc3VsdCBpbiB1cyBjbGVhcmlu Zwo+IC0gKiBhbGwgbGltaXRzIGFuZCB0aGUgZ3B1IHN0dWNrIGF0IHdoYXRldmVyIGZyZXF1ZW5j eSBpdCBpcyBhdCBhdG0pLgo+IC0gKi8KPiAtc3RhdGljIHUzMiBpbnRlbF9ycHNfbGltaXRzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTggdmFsKQo+ICtzdGF0aWMgdm9pZCBn ZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4g IHsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0J dTMyIGxpbWl0czsKPiAtCj4gLQkvKiBPbmx5IHNldCB0aGUgZG93biBsaW1pdCB3aGVuIHdlJ3Zl IHJlYWNoZWQgdGhlIGxvd2VzdCBsZXZlbCB0byBhdm9pZAo+IC0JICogZ2V0dGluZyBtb3JlIGlu dGVycnVwdHMsIG90aGVyd2lzZSBsZWF2ZSB0aGlzIGNsZWFyLiBUaGlzIHByZXZlbnRzIGEKPiAt CSAqIHJhY2UgaW4gdGhlIGh3IHdoZW4gY29taW5nIG91dCBvZiByYzY6IFRoZXJlJ3MgYSB0aW55 IHdpbmRvdyB3aGVyZQo+IC0JICogdGhlIGh3IHJ1bnMgYXQgdGhlIG1pbmltYWwgY2xvY2sgYmVm b3JlIHNlbGVjdGluZyB0aGUgZGVzaXJlZAo+IC0JICogZnJlcXVlbmN5LCBpZiB0aGUgZG93biB0 aHJlc2hvbGQgZXhwaXJlcyBpbiB0aGF0IHdpbmRvdyB3ZSB3aWxsIG5vdAo+IC0JICogcmVjZWl2 ZSBhIGRvd24gaW50ZXJydXB0LiAqLwo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkg ewo+IC0JCWxpbWl0cyA9IChycHMtPm1heF9mcmVxX3NvZnRsaW1pdCkgPDwgMjM7Cj4gLQkJaWYg KHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPiAtCQkJbGltaXRzIHw9IChycHMtPm1p bl9mcmVxX3NvZnRsaW1pdCkgPDwgMTQ7Cj4gLQl9IGVsc2Ugewo+IC0JCWxpbWl0cyA9IHJwcy0+ bWF4X2ZyZXFfc29mdGxpbWl0IDw8IDI0Owo+IC0JCWlmICh2YWwgPD0gcnBzLT5taW5fZnJlcV9z b2Z0bGltaXQpCj4gLQkJCWxpbWl0cyB8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCA8PCAxNjsK PiAtCX0KPiArCXUzMiB0bXA7Cj4gIAo+IC0JcmV0dXJuIGxpbWl0czsKPiArCXRtcCA9IEk5MTVf UkVBRChNQ0hfU1NLUEQpOwo+ICsJaWYgKCh0bXAgJiBNQ0hfU1NLUERfV00wX01BU0spICE9IE1D SF9TU0tQRF9XTTBfVkFMKQo+ICsJCURSTV9ERUJVR19LTVMoIldyb25nIE1DSF9TU0tQRCB2YWx1 ZTogMHglMDh4IFRoaXMgY2FuIGNhdXNlIHVuZGVycnVucy5cbiIsCj4gKwkJCSAgICAgIHRtcCk7 Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHJwc19zZXRfcG93ZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCBpbnQgbmV3X3Bvd2VyKQo+ICtzdGF0aWMgdm9pZCBnZW42X2luaXRf Y2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+IC0J c3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gLQl1MzIgdGhy ZXNob2xkX3VwID0gMCwgdGhyZXNob2xkX2Rvd24gPSAwOyAvKiBpbiAlICovCj4gLQl1MzIgZWlf dXAgPSAwLCBlaV9kb3duID0gMDsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPnBv d2VyLm11dGV4KTsKPiArCXUzMiBkc3BjbGtfZ2F0ZSA9IElMS19WUkhVTklUX0NMT0NLX0dBVEVf RElTQUJMRTsKPiAgCj4gLQlpZiAobmV3X3Bvd2VyID09IHJwcy0+cG93ZXIubW9kZSkKPiAtCQly ZXR1cm47Cj4gKwlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBkc3BjbGtfZ2F0ZSk7Cj4g IAo+IC0JLyogTm90ZSB0aGUgdW5pdHMgaGVyZSBhcmUgbm90IGV4YWN0bHkgMXVzLCBidXQgMTI4 MG5zLiAqLwo+IC0Jc3dpdGNoIChuZXdfcG93ZXIpIHsKPiAtCWNhc2UgTE9XX1BPV0VSOgo+IC0J CS8qIFVwY2xvY2sgaWYgbW9yZSB0aGFuIDk1JSBidXN5IG92ZXIgMTZtcyAqLwo+IC0JCWVpX3Vw ID0gMTYwMDA7Cj4gLQkJdGhyZXNob2xkX3VwID0gOTU7Cj4gKwlJOTE1X1dSSVRFKElMS19ESVNQ TEFZX0NISUNLRU4yLAo+ICsJCSAgIEk5MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMikgfAo+ ICsJCSAgIElMS19FTFBJTl80MDlfU0VMRUNUKTsKPiAgCj4gLQkJLyogRG93bmNsb2NrIGlmIGxl c3MgdGhhbiA4NSUgYnVzeSBvdmVyIDMybXMgKi8KPiAtCQllaV9kb3duID0gMzIwMDA7Cj4gLQkJ dGhyZXNob2xkX2Rvd24gPSA4NTsKPiAtCQlicmVhazsKPiArCS8qIFdhRGlzYWJsZUhpWlBsYW5l c1doZW5NU0FBRW5hYmxlZDpzbmIgKi8KPiArCUk5MTVfV1JJVEUoXzNEX0NISUNLRU4sCj4gKwkJ ICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOX0hJWl9QTEFORV9ESVNBQkxFX01TQUFf NFhfU05CKSk7Cj4gIAo+IC0JY2FzZSBCRVRXRUVOOgo+IC0JCS8qIFVwY2xvY2sgaWYgbW9yZSB0 aGFuIDkwJSBidXN5IG92ZXIgMTNtcyAqLwo+IC0JCWVpX3VwID0gMTMwMDA7Cj4gLQkJdGhyZXNo b2xkX3VwID0gOTA7Cj4gKwkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVz aDpzbmIgKi8KPiArCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxF KFJDX09QX0ZMVVNIX0VOQUJMRSkpOwo+ICAKPiAtCQkvKiBEb3duY2xvY2sgaWYgbGVzcyB0aGFu IDc1JSBidXN5IG92ZXIgMzJtcyAqLwo+IC0JCWVpX2Rvd24gPSAzMjAwMDsKPiAtCQl0aHJlc2hv bGRfZG93biA9IDc1Owo+IC0JCWJyZWFrOwo+ICsJLyoKPiArCSAqIEJTcGVjIHJlY29vbWVuZHMg OHg0IHdoZW4gTVNBQSBpcyB1c2VkLAo+ICsJICogaG93ZXZlciBpbiBwcmFjdGljZSAxNng0IHNl ZW1zIGZhc3Rlc3QuCj4gKwkgKgo+ICsJICogTm90ZSB0aGF0IFBTL1dNIHRocmVhZCBjb3VudHMg ZGVwZW5kIG9uIHRoZSBXSVogaGFzaGluZwo+ICsJICogZGlzYWJsZSBiaXQsIHdoaWNoIHdlIGRv bid0IHRvdWNoIGhlcmUsIGJ1dCBpdCdzIGdvb2QKPiArCSAqIHRvIGtlZXAgaW4gbWluZCAoc2Vl IDNEU1RBVEVfUFMgYW5kIDNEU1RBVEVfV00pLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKEdFTjZf R1RfTU9ERSwKPiArCQkgICBfTUFTS0VEX0ZJRUxEKEdFTjZfV0laX0hBU0hJTkdfTUFTSywgR0VO Nl9XSVpfSEFTSElOR18xNng0KSk7Cj4gIAo+IC0JY2FzZSBISUdIX1BPV0VSOgo+IC0JCS8qIFVw Y2xvY2sgaWYgbW9yZSB0aGFuIDg1JSBidXN5IG92ZXIgMTBtcyAqLwo+IC0JCWVpX3VwID0gMTAw MDA7Cj4gLQkJdGhyZXNob2xkX3VwID0gODU7Cj4gKwlJOTE1X1dSSVRFKENBQ0hFX01PREVfMCwK PiArCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKENNMF9TVENfRVZJQ1RfRElTQUJMRV9MUkFfU05C KSk7Cj4gIAo+IC0JCS8qIERvd25jbG9jayBpZiBsZXNzIHRoYW4gNjAlIGJ1c3kgb3ZlciAzMm1z ICovCj4gLQkJZWlfZG93biA9IDMyMDAwOwo+IC0JCXRocmVzaG9sZF9kb3duID0gNjA7Cj4gLQkJ YnJlYWs7Cj4gLQl9Cj4gKwlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwKPiArCQkgICBJOTE1X1JF QUQoR0VONl9VQ0dDVEwxKSB8Cj4gKwkJICAgR0VONl9CTEJVTklUX0NMT0NLX0dBVEVfRElTQUJM RSB8Cj4gKwkJICAgR0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiAgCj4gLQkvKiBX aGVuIGJ5dCBjYW4gc3Vydml2ZSB3aXRob3V0IHN5c3RlbSBoYW5nIHdpdGggZHluYW1pYwo+IC0J ICogc3cgZnJlcSBhZGp1c3RtZW50cywgdGhpcyByZXN0cmljdGlvbiBjYW4gYmUgbGlmdGVkLgo+ ICsJLyogQWNjb3JkaW5nIHRvIHRoZSBCU3BlYyB2b2wxZywgYml0IDEyIChSQ1BCVU5JVCkgY2xv Y2sKPiArCSAqIGdhdGluZyBkaXNhYmxlIG11c3QgYmUgc2V0LiAgRmFpbHVyZSB0byBzZXQgaXQg cmVzdWx0cyBpbgo+ICsJICogZmxpY2tlcmluZyBwaXhlbHMgZHVlIHRvIFogd3JpdGUgb3JkZXJp bmcgZmFpbHVyZXMgYWZ0ZXIKPiArCSAqIHNvbWUgYW1vdW50IG9mIHJ1bnRpbWUgaW4gdGhlIE1l c2EgImZpcmUiIGRlbW8sIGFuZCBVbmlnaW5lCj4gKwkgKiBTYW5jdHVhcnkgYW5kIFRyb3BpY3Ms IGFuZCBhcHBhcmVudGx5IGFueXRoaW5nIGVsc2Ugd2l0aAo+ICsJICogYWxwaGEgdGVzdCBvciBw aXhlbCBkaXNjYXJkLgo+ICsJICoKPiArCSAqIEFjY29yZGluZyB0byB0aGUgc3BlYywgYml0IDEx IChSQ0NVTklUKSBtdXN0IGFsc28gYmUgc2V0LAo+ICsJICogYnV0IHdlIGRpZG4ndCBkZWJ1ZyBh Y3R1YWwgdGVzdGNhc2VzIHRvIGZpbmQgaXQgb3V0Lgo+ICsJICoKPiArCSAqIFdhRGlzYWJsZVJD Q1VuaXRDbG9ja0dhdGluZzpzbmIKPiArCSAqIFdhRGlzYWJsZVJDUEJVbml0Q2xvY2tHYXRpbmc6 c25iCj4gIAkgKi8KPiAtCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKPiAtCQlnb3RvIHNr aXBfaHdfd3JpdGU7Cj4gLQo+IC0JSTkxNV9XUklURShHRU42X1JQX1VQX0VJLAo+IC0JCSAgIEdU X0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsIGVpX3VwKSk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZf UlBfVVBfVEhSRVNIT0xELAo+IC0JCSAgIEdUX0lOVEVSVkFMX0ZST01fVVMoZGV2X3ByaXYsCj4g LQkJCQkgICAgICAgZWlfdXAgKiB0aHJlc2hvbGRfdXAgLyAxMDApKTsKPiAtCj4gLQlJOTE1X1dS SVRFKEdFTjZfUlBfRE9XTl9FSSwKPiAtCQkgICBHVF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2 LCBlaV9kb3duKSk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsCj4gLQkJ ICAgR1RfSU5URVJWQUxfRlJPTV9VUyhkZXZfcHJpdiwKPiAtCQkJCSAgICAgICBlaV9kb3duICog dGhyZXNob2xkX2Rvd24gLyAxMDApKTsKPiAtCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJP TCwKPiAtCQkgICAoSU5URUxfR0VOKGRldl9wcml2KSA+IDkgPyAwIDogR0VONl9SUF9NRURJQV9U VVJCTykgfAo+IC0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAo+IC0JCSAgIEdF TjZfUlBfTUVESUFfSVNfR0ZYIHwKPiAtCQkgICBHRU42X1JQX0VOQUJMRSB8Cj4gLQkJICAgR0VO Nl9SUF9VUF9CVVNZX0FWRyB8Cj4gLQkJICAgR0VONl9SUF9ET1dOX0lETEVfQVZHKTsKPiAtCj4g LXNraXBfaHdfd3JpdGU6Cj4gLQlycHMtPnBvd2VyLm1vZGUgPSBuZXdfcG93ZXI7Cj4gLQlycHMt PnBvd2VyLnVwX3RocmVzaG9sZCA9IHRocmVzaG9sZF91cDsKPiAtCXJwcy0+cG93ZXIuZG93bl90 aHJlc2hvbGQgPSB0aHJlc2hvbGRfZG93bjsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZ2VuNl9z ZXRfcnBzX3RocmVzaG9sZHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2 YWwpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBz Owo+IC0JaW50IG5ld19wb3dlcjsKPiAtCj4gLQluZXdfcG93ZXIgPSBycHMtPnBvd2VyLm1vZGU7 Cj4gLQlzd2l0Y2ggKHJwcy0+cG93ZXIubW9kZSkgewo+IC0JY2FzZSBMT1dfUE9XRVI6Cj4gLQkJ aWYgKHZhbCA+IHJwcy0+ZWZmaWNpZW50X2ZyZXEgKyAxICYmCj4gLQkJICAgIHZhbCA+IHJwcy0+ Y3VyX2ZyZXEpCj4gLQkJCW5ld19wb3dlciA9IEJFVFdFRU47Cj4gLQkJYnJlYWs7Cj4gKwlJOTE1 X1dSSVRFKEdFTjZfVUNHQ1RMMiwKPiArCQkgICBHRU42X1JDUEJVTklUX0NMT0NLX0dBVEVfRElT QUJMRSB8Cj4gKwkJICAgR0VONl9SQ0NVTklUX0NMT0NLX0dBVEVfRElTQUJMRSk7Cj4gIAo+IC0J Y2FzZSBCRVRXRUVOOgo+IC0JCWlmICh2YWwgPD0gcnBzLT5lZmZpY2llbnRfZnJlcSAmJgo+IC0J CSAgICB2YWwgPCBycHMtPmN1cl9mcmVxKQo+IC0JCQluZXdfcG93ZXIgPSBMT1dfUE9XRVI7Cj4g LQkJZWxzZSBpZiAodmFsID49IHJwcy0+cnAwX2ZyZXEgJiYKPiAtCQkJIHZhbCA+IHJwcy0+Y3Vy X2ZyZXEpCj4gLQkJCW5ld19wb3dlciA9IEhJR0hfUE9XRVI7Cj4gLQkJYnJlYWs7Cj4gKwkvKiBX YVN0cmlwc0ZhbnNEaXNhYmxlRmFzdENsaXBQZXJmb3JtYW5jZUZpeDpzbmIgKi8KPiArCUk5MTVf V1JJVEUoXzNEX0NISUNLRU4zLAo+ICsJCSAgIF9NQVNLRURfQklUX0VOQUJMRShfM0RfQ0hJQ0tF TjNfU0ZfRElTQUJMRV9GQVNUQ0xJUF9DVUxMKSk7Cj4gIAo+IC0JY2FzZSBISUdIX1BPV0VSOgo+ IC0JCWlmICh2YWwgPCAocnBzLT5ycDFfZnJlcSArIHJwcy0+cnAwX2ZyZXEpID4+IDEgJiYKPiAt CQkgICAgdmFsIDwgcnBzLT5jdXJfZnJlcSkKPiAtCQkJbmV3X3Bvd2VyID0gQkVUV0VFTjsKPiAt CQlicmVhazsKPiAtCX0KPiAtCS8qIE1heC9taW4gYmlucyBhcmUgc3BlY2lhbCAqLwo+IC0JaWYg KHZhbCA8PSBycHMtPm1pbl9mcmVxX3NvZnRsaW1pdCkKPiAtCQluZXdfcG93ZXIgPSBMT1dfUE9X RVI7Cj4gLQlpZiAodmFsID49IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQo+IC0JCW5ld19wb3dl ciA9IEhJR0hfUE9XRVI7Cj4gKwkvKgo+ICsJICogQnNwZWMgc2F5czoKPiArCSAqICJUaGlzIGJp dCBtdXN0IGJlIHNldCBpZiAzRFNUQVRFX0NMSVAgY2xpcCBtb2RlIGlzIHNldCB0byBub3JtYWwg YW5kCj4gKwkgKiAzRFNUQVRFX1NGIG51bWJlciBvZiBTRiBvdXRwdXQgYXR0cmlidXRlcyBpcyBt b3JlIHRoYW4gMTYuIgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKF8zRF9DSElDS0VOMywKPiArCQkg ICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU4zX1NGX0RJU0FCTEVfUElQRUxJTkVEX0FU VFJfRkVUQ0gpKTsKPiAgCj4gLQltdXRleF9sb2NrKCZycHMtPnBvd2VyLm11dGV4KTsKPiAtCWlm IChycHMtPnBvd2VyLmludGVyYWN0aXZlKQo+IC0JCW5ld19wb3dlciA9IEhJR0hfUE9XRVI7Cj4g LQlycHNfc2V0X3Bvd2VyKGRldl9wcml2LCBuZXdfcG93ZXIpOwo+IC0JbXV0ZXhfdW5sb2NrKCZy cHMtPnBvd2VyLm11dGV4KTsKPiAtfQo+ICsJLyoKPiArCSAqIEFjY29yZGluZyB0byB0aGUgc3Bl YyB0aGUgZm9sbG93aW5nIGJpdHMgc2hvdWxkIGJlCj4gKwkgKiBzZXQgaW4gb3JkZXIgdG8gZW5h YmxlIG1lbW9yeSBzZWxmLXJlZnJlc2ggYW5kIGZiYzoKPiArCSAqIFRoZSBiaXQyMSBhbmQgYml0 MjIgb2YgMHg0MjAwMAo+ICsJICogVGhlIGJpdDIxIGFuZCBiaXQyMiBvZiAweDQyMDA0Cj4gKwkg KiBUaGUgYml0NSBhbmQgYml0NyBvZiAweDQyMDIwCj4gKwkgKiBUaGUgYml0MTQgb2YgMHg3MDE4 MAo+ICsJICogVGhlIGJpdDE0IG9mIDB4NzExODAKPiArCSAqCj4gKwkgKiBXYUZiY0FzeW5jaEZs aXBEaXNhYmxlRmJjUXVldWU6c25iCj4gKwkgKi8KPiArCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlf Q0hJQ0tFTjEsCj4gKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4xKSB8Cj4gKwkJ ICAgSUxLX0ZCQ1FfRElTIHwgSUxLX1BBQlNUUkVUQ0hfRElTKTsKPiArCUk5MTVfV1JJVEUoSUxL X0RJU1BMQVlfQ0hJQ0tFTjIsCj4gKwkJICAgSTkxNV9SRUFEKElMS19ESVNQTEFZX0NISUNLRU4y KSB8Cj4gKwkJICAgSUxLX0RQQVJCX0dBVEUgfCBJTEtfVlNEUEZEX0ZVTEwpOwo+ICsJSTkxNV9X UklURShJTEtfRFNQQ0xLX0dBVEVfRCwKPiArCQkgICBJOTE1X1JFQUQoSUxLX0RTUENMS19HQVRF X0QpIHwKPiArCQkgICBJTEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFICB8Cj4gKwkJICAg SUxLX0RQRkRVTklUX0NMT0NLX0dBVEVfRU5BQkxFKTsKPiAgCj4gLXZvaWQgaW50ZWxfcnBzX21h cmtfaW50ZXJhY3RpdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIGJvb2wgaW50ZXJh Y3RpdmUpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZpOTE1LT5ndF9wbS5ycHM7 Cj4gKwlnNHhfZGlzYWJsZV90cmlja2xlX2ZlZWQoZGV2X3ByaXYpOwo+ICAKPiAtCWlmIChJTlRF TF9HRU4oaTkxNSkgPCA2KQo+IC0JCXJldHVybjsKPiArCWNwdF9pbml0X2Nsb2NrX2dhdGluZyhk ZXZfcHJpdik7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmcnBzLT5wb3dlci5tdXRleCk7Cj4gLQlpZiAo aW50ZXJhY3RpdmUpIHsKPiAtCQlpZiAoIXJwcy0+cG93ZXIuaW50ZXJhY3RpdmUrKyAmJiBSRUFE X09OQ0UoaTkxNS0+Z3QuYXdha2UpKQo+IC0JCQlycHNfc2V0X3Bvd2VyKGk5MTUsIEhJR0hfUE9X RVIpOwo+IC0JfSBlbHNlIHsKPiAtCQlHRU1fQlVHX09OKCFycHMtPnBvd2VyLmludGVyYWN0aXZl KTsKPiAtCQlycHMtPnBvd2VyLmludGVyYWN0aXZlLS07Cj4gLQl9Cj4gLQltdXRleF91bmxvY2so JnJwcy0+cG93ZXIubXV0ZXgpOwo+ICsJZ2VuNl9jaGVja19tY2hfc2V0dXAoZGV2X3ByaXYpOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdTMyIGdlbjZfcnBzX3BtX21hc2soc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCj4gK3N0YXRpYyB2b2lkIGdlbjdfc2V0dXBfZml4ZWRf ZnVuY19zY2hlZHVsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4g LQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCXUzMiBt YXNrID0gMDsKPiAtCj4gLQkvKiBXZSB1c2UgVVBfRUlfRVhQSVJFRCBpbnRlcnVwdHMgZm9yIGJv dGggdXAvZG93biBpbiBtYW51YWwgbW9kZSAqLwo+IC0JaWYgKHZhbCA+IHJwcy0+bWluX2ZyZXFf c29mdGxpbWl0KQo+IC0JCW1hc2sgfD0gR0VONl9QTV9SUF9VUF9FSV9FWFBJUkVEIHwgR0VONl9Q TV9SUF9ET1dOX1RIUkVTSE9MRCB8IEdFTjZfUE1fUlBfRE9XTl9USU1FT1VUOwo+IC0JaWYgKHZh bCA8IHJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KQo+IC0JCW1hc2sgfD0gR0VONl9QTV9SUF9VUF9F SV9FWFBJUkVEIHwgR0VONl9QTV9SUF9VUF9USFJFU0hPTEQ7Cj4gLQo+IC0JbWFzayAmPSBkZXZf cHJpdi0+cG1fcnBzX2V2ZW50czsKPiAtCj4gLQlyZXR1cm4gZ2VuNl9zYW5pdGl6ZV9ycHNfcG1f bWFzayhkZXZfcHJpdiwgfm1hc2spOwo+IC19Cj4gLQo+IC0vKiBnZW42X3NldF9ycHMgaXMgY2Fs bGVkIHRvIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IHJlcXVlc3QsIGJ1dCBzaG91bGQgYWxzbyBiZQo+ IC0gKiBjYWxsZWQgd2hlbiB0aGUgcmFuZ2UgKG1pbl9kZWxheSBhbmQgbWF4X2RlbGF5KSBpcyBt b2RpZmllZCBzbyB0aGF0IHdlIGNhbgo+IC0gKiB1cGRhdGUgdGhlIEdFTjZfUlBfSU5URVJSVVBU X0xJTUlUUyByZWdpc3RlciBhY2NvcmRpbmdseS4gKi8KPiAtc3RhdGljIGludCBnZW42X3NldF9y cHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCj4gLXsKPiAtCXN0 cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0KPiAtCS8qIG1p bi9tYXggZGVsYXkgbWF5IHN0aWxsIGhhdmUgYmVlbiBtb2RpZmllZCBzbyBiZSBzdXJlIHRvCj4g LQkgKiB3cml0ZSB0aGUgbGltaXRzIHZhbHVlLgo+IC0JICovCj4gLQlpZiAodmFsICE9IHJwcy0+ Y3VyX2ZyZXEpIHsKPiAtCQlnZW42X3NldF9ycHNfdGhyZXNob2xkcyhkZXZfcHJpdiwgdmFsKTsK PiAtCj4gLQkJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOSkKPiAtCQkJSTkxNV9XUklURShH RU42X1JQTlNXUkVRLAo+IC0JCQkJICAgR0VOOV9GUkVRVUVOQ1kodmFsKSk7Cj4gLQkJZWxzZSBp ZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiAtCQkJ STkxNV9XUklURShHRU42X1JQTlNXUkVRLAo+IC0JCQkJICAgSFNXX0ZSRVFVRU5DWSh2YWwpKTsK PiAtCQllbHNlCj4gLQkJCUk5MTVfV1JJVEUoR0VONl9SUE5TV1JFUSwKPiAtCQkJCSAgIEdFTjZf RlJFUVVFTkNZKHZhbCkgfAo+IC0JCQkJICAgR0VONl9PRkZTRVQoMCkgfAo+IC0JCQkJICAgR0VO Nl9BR0dSRVNTSVZFX1RVUkJPKTsKPiAtCX0KPiAtCj4gLQkvKiBNYWtlIHN1cmUgd2UgY29udGlu dWUgdG8gZ2V0IGludGVycnVwdHMKPiAtCSAqIHVudGlsIHdlIGhpdCB0aGUgbWluaW11bSBvciBt YXhpbXVtIGZyZXF1ZW5jaWVzLgo+IC0JICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfSU5URVJS VVBUX0xJTUlUUywgaW50ZWxfcnBzX2xpbWl0cyhkZXZfcHJpdiwgdmFsKSk7Cj4gLQlJOTE1X1dS SVRFKEdFTjZfUE1JTlRSTVNLLCBnZW42X3Jwc19wbV9tYXNrKGRldl9wcml2LCB2YWwpKTsKPiAt Cj4gLQlycHMtPmN1cl9mcmVxID0gdmFsOwo+IC0JdHJhY2VfaW50ZWxfZ3B1X2ZyZXFfY2hhbmdl KGludGVsX2dwdV9mcmVxKGRldl9wcml2LCB2YWwpKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCB2YWxsZXl2aWV3X3NldF9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCB1OCB2YWwpCj4gLXsKPiAtCWludCBlcnI7Cj4gLQo+IC0JaWYgKFdBUk5f T05DRShJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiAodmFsICYgMSksCj4gLQkJICAgICAgIk9k ZCBHUFUgZnJlcSB2YWx1ZVxuIikpCj4gLQkJdmFsICY9IH4xOwo+IC0KPiAtCUk5MTVfV1JJVEUo R0VONl9QTUlOVFJNU0ssIGdlbjZfcnBzX3BtX21hc2soZGV2X3ByaXYsIHZhbCkpOwo+IC0KPiAt CWlmICh2YWwgIT0gZGV2X3ByaXYtPmd0X3BtLnJwcy5jdXJfZnJlcSkgewo+IC0JCXZsdl9wdW5p dF9nZXQoZGV2X3ByaXYpOwo+IC0JCWVyciA9IHZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgUFVO SVRfUkVHX0dQVV9GUkVRX1JFUSwgdmFsKTsKPiAtCQl2bHZfcHVuaXRfcHV0KGRldl9wcml2KTsK PiAtCQlpZiAoZXJyKQo+IC0JCQlyZXR1cm4gZXJyOwo+IC0KPiAtCQlnZW42X3NldF9ycHNfdGhy ZXNob2xkcyhkZXZfcHJpdiwgdmFsKTsKPiAtCX0KPiAtCj4gLQlkZXZfcHJpdi0+Z3RfcG0ucnBz LmN1cl9mcmVxID0gdmFsOwo+IC0JdHJhY2VfaW50ZWxfZ3B1X2ZyZXFfY2hhbmdlKGludGVsX2dw dV9mcmVxKGRldl9wcml2LCB2YWwpKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyog dmx2X3NldF9ycHNfaWRsZTogU2V0IHRoZSBmcmVxdWVuY3kgdG8gaWRsZSwgaWYgR2Z4IGNsb2Nr cyBhcmUgZG93bgo+IC0gKgo+IC0gKiAqIElmIEdmeCBpcyBJZGxlLCB0aGVuCj4gLSAqIDEuIEZv cmNld2FrZSBNZWRpYSB3ZWxsLgo+IC0gKiAyLiBSZXF1ZXN0IGlkbGUgZnJlcS4KPiAtICogMy4g UmVsZWFzZSBGb3JjZXdha2Ugb2YgTWVkaWEgd2VsbC4KPiAtKi8KPiAtc3RhdGljIHZvaWQgdmx2 X3NldF9ycHNfaWRsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAt CXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0JdTMyIHZh bCA9IHJwcy0+aWRsZV9mcmVxOwo+IC0JaW50IGVycjsKPiAtCj4gLQlpZiAocnBzLT5jdXJfZnJl cSA8PSB2YWwpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCS8qIFRoZSBwdW5pdCBkZWxheXMgdGhlIHdy aXRlIG9mIHRoZSBmcmVxdWVuY3kgYW5kIHZvbHRhZ2UgdW50aWwgaXQKPiAtCSAqIGRldGVybWlu ZXMgdGhlIEdQVSBpcyBhd2FrZS4gRHVyaW5nIG5vcm1hbCB1c2FnZSB3ZSBkb24ndCB3YW50IHRv Cj4gLQkgKiB3YXN0ZSBwb3dlciBjaGFuZ2luZyB0aGUgZnJlcXVlbmN5IGlmIHRoZSBHUFUgaXMg c2xlZXBpbmcgKHJjNikuCj4gLQkgKiBIb3dldmVyLCB0aGUgR1BVIGFuZCBkcml2ZXIgaXMgbm93 IGlkbGUgYW5kIHdlIGRvIG5vdCB3YW50IHRvIGRlbGF5Cj4gLQkgKiBzd2l0Y2hpbmcgdG8gbWlu aW11bSB2b2x0YWdlIChyZWR1Y2luZyBwb3dlciB3aGlsc3QgaWRsZSkgYXMgd2UgZG8KPiAtCSAq IG5vdCBleHBlY3QgdG8gYmUgd29rZW4gaW4gdGhlIG5lYXIgZnV0dXJlIGFuZCBzbyBtdXN0IGZs dXNoIHRoZQo+IC0JICogY2hhbmdlIGJ5IHdha2luZyB0aGUgZGV2aWNlLgo+IC0JICoKPiAtCSAq IFdlIGNob29zZSB0byB0YWtlIHRoZSBtZWRpYSBwb3dlcndlbGwgKGVpdGhlciB3b3VsZCBkbyB0 byB0cmljayB0aGUKPiAtCSAqIHB1bml0IGludG8gY29tbWl0dGluZyB0aGUgdm9sdGFnZSBjaGFu Z2UpIGFzIHRoYXQgdGFrZXMgYSBsb3QgbGVzcwo+IC0JICogcG93ZXIgdGhhbiB0aGUgcmVuZGVy IHBvd2Vyd2VsbC4KPiAtCSAqLwo+IC0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoJmRldl9w cml2LT51bmNvcmUsIEZPUkNFV0FLRV9NRURJQSk7Cj4gLQllcnIgPSB2YWxsZXl2aWV3X3NldF9y cHMoZGV2X3ByaXYsIHZhbCk7Cj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3By aXYtPnVuY29yZSwgRk9SQ0VXQUtFX01FRElBKTsKPiAtCj4gLQlpZiAoZXJyKQo+IC0JCURSTV9F UlJPUigiRmFpbGVkIHRvIHNldCBSUFMgZm9yIGlkbGVcbiIpOwo+IC19Cj4gLQo+IC12b2lkIGdl bjZfcnBzX2J1c3koc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCj4gLQltdXRl eF9sb2NrKCZycHMtPmxvY2spOwo+IC0JaWYgKHJwcy0+ZW5hYmxlZCkgewo+IC0JCXU4IGZyZXE7 Cj4gLQo+IC0JCWlmIChkZXZfcHJpdi0+cG1fcnBzX2V2ZW50cyAmIEdFTjZfUE1fUlBfVVBfRUlf RVhQSVJFRCkKPiAtCQkJZ2VuNl9ycHNfcmVzZXRfZWkoZGV2X3ByaXYpOwo+IC0JCUk5MTVfV1JJ VEUoR0VONl9QTUlOVFJNU0ssCj4gLQkJCSAgIGdlbjZfcnBzX3BtX21hc2soZGV2X3ByaXYsIHJw cy0+Y3VyX2ZyZXEpKTsKPiAtCj4gLQkJZ2VuNl9lbmFibGVfcnBzX2ludGVycnVwdHMoZGV2X3By aXYpOwo+IC0KPiAtCQkvKiBVc2UgdGhlIHVzZXIncyBkZXNpcmVkIGZyZXF1ZW5jeSBhcyBhIGd1 aWRlLCBidXQgZm9yIGJldHRlcgo+IC0JCSAqIHBlcmZvcm1hbmNlLCBqdW1wIGRpcmVjdGx5IHRv IFJQZSBhcyBvdXIgc3RhcnRpbmcgZnJlcXVlbmN5Lgo+IC0JCSAqLwo+IC0JCWZyZXEgPSBtYXgo cnBzLT5jdXJfZnJlcSwKPiAtCQkJICAgcnBzLT5lZmZpY2llbnRfZnJlcSk7Cj4gLQo+IC0JCWlm IChpbnRlbF9zZXRfcnBzKGRldl9wcml2LAo+IC0JCQkJICBjbGFtcChmcmVxLAo+IC0JCQkJCXJw cy0+bWluX2ZyZXFfc29mdGxpbWl0LAo+IC0JCQkJCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0KSkp Cj4gLQkJCURSTV9ERUJVR19EUklWRVIoIkZhaWxlZCB0byBzZXQgaWRsZSBmcmVxdWVuY3lcbiIp Owo+IC0JfQo+IC0JbXV0ZXhfdW5sb2NrKCZycHMtPmxvY2spOwo+IC19Cj4gLQo+IC12b2lkIGdl bjZfcnBzX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlz dHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCj4gLQkvKiBG bHVzaCBvdXIgYm90dG9tLWhhbGYgc28gdGhhdCBpdCBkb2VzIG5vdCByYWNlIHdpdGggdXMKPiAt CSAqIHNldHRpbmcgdGhlIGlkbGUgZnJlcXVlbmN5IGFuZCBzbyB0aGF0IGl0IGlzIGJvdW5kZWQg YnkKPiAtCSAqIG91ciBycG0gd2FrZXJlZi4gQW5kIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0 cyB0byBzdG9wIGFueQo+IC0JICogZnV0aGVyIFJQUyByZWNsb2NraW5nIHdoaWxzdCB3ZSBhcmUg YXNsZWVwLgo+IC0JICovCj4gLQlnZW42X2Rpc2FibGVfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYp Owo+IC0KPiAtCW11dGV4X2xvY2soJnJwcy0+bG9jayk7Cj4gLQlpZiAocnBzLT5lbmFibGVkKSB7 Cj4gLQkJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3By aXYpKQo+IC0JCQl2bHZfc2V0X3Jwc19pZGxlKGRldl9wcml2KTsKPiAtCQllbHNlCj4gLQkJCWdl bjZfc2V0X3JwcyhkZXZfcHJpdiwgcnBzLT5pZGxlX2ZyZXEpOwo+IC0JCXJwcy0+bGFzdF9hZGog PSAwOwo+IC0JCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssCj4gLQkJCSAgIGdlbjZfc2FuaXRp emVfcnBzX3BtX21hc2soZGV2X3ByaXYsIH4wKSk7Cj4gLQl9Cj4gLQltdXRleF91bmxvY2soJnJw cy0+bG9jayk7Cj4gLX0KPiAtCj4gLXZvaWQgZ2VuNl9ycHNfYm9vc3Qoc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZycS0+aTkxNS0+Z3Rf cG0ucnBzOwo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsKPiAtCWJvb2wgYm9vc3Q7Cj4gLQo+IC0J LyogVGhpcyBpcyBpbnRlbnRpb25hbGx5IHJhY3khIFdlIHBlZWsgYXQgdGhlIHN0YXRlIGhlcmUs IHRoZW4KPiAtCSAqIHZhbGlkYXRlIGluc2lkZSB0aGUgUlBTIHdvcmtlci4KPiAtCSAqLwo+IC0J aWYgKCFycHMtPmVuYWJsZWQpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChpOTE1X3JlcXVlc3Rf c2lnbmFsZWQocnEpKQo+IC0JCXJldHVybjsKPiAtCj4gLQkvKiBTZXJpYWxpemVzIHdpdGggaTkx NV9yZXF1ZXN0X3JldGlyZSgpICovCj4gLQlib29zdCA9IGZhbHNlOwo+IC0Jc3Bpbl9sb2NrX2ly cXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7Cj4gLQlpZiAoIWk5MTVfcmVxdWVzdF9oYXNfd2FpdGJv b3N0KHJxKSAmJgo+IC0JICAgICFkbWFfZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKCZycS0+ZmVu Y2UpKSB7Cj4gLQkJYm9vc3QgPSAhYXRvbWljX2ZldGNoX2luYygmcnBzLT5udW1fd2FpdGVycyk7 Cj4gLQkJcnEtPmZsYWdzIHw9IEk5MTVfUkVRVUVTVF9XQUlUQk9PU1Q7Cj4gLQl9Cj4gLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwo+IC0JaWYgKCFib29zdCkKPiAt CQlyZXR1cm47Cj4gLQo+IC0JaWYgKFJFQURfT05DRShycHMtPmN1cl9mcmVxKSA8IHJwcy0+Ym9v c3RfZnJlcSkKPiAtCQlzY2hlZHVsZV93b3JrKCZycHMtPndvcmspOwo+IC0KPiAtCWF0b21pY19p bmMoJnJwcy0+Ym9vc3RzKTsKPiAtfQo+IC0KPiAtaW50IGludGVsX3NldF9ycHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1OCB2YWwpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9y cHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+IC0JaW50IGVycjsKPiAtCj4gLQlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOwo+IC0JR0VNX0JVR19PTih2YWwgPiBycHMtPm1h eF9mcmVxKTsKPiAtCUdFTV9CVUdfT04odmFsIDwgcnBzLT5taW5fZnJlcSk7Cj4gLQo+IC0JaWYg KCFycHMtPmVuYWJsZWQpIHsKPiAtCQlycHMtPmN1cl9mcmVxID0gdmFsOwo+IC0JCXJldHVybiAw Owo+IC0JfQo+IC0KPiAtCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllW SUVXKGRldl9wcml2KSkKPiAtCQllcnIgPSB2YWxsZXl2aWV3X3NldF9ycHMoZGV2X3ByaXYsIHZh bCk7Cj4gLQllbHNlCj4gLQkJZXJyID0gZ2VuNl9zZXRfcnBzKGRldl9wcml2LCB2YWwpOwo+IC0K PiAtCXJldHVybiBlcnI7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdlbjlfZGlzYWJsZV9ycHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlJOTE1X1dSSVRFKEdF TjZfUlBfQ09OVFJPTCwgMCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdlbjZfZGlzYWJsZV9y cHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlJOTE1X1dSSVRF KEdFTjZfUlBOU1dSRVEsIDEgPDwgMzEpOwo+IC0JSTkxNV9XUklURShHRU42X1JQX0NPTlRST0ws IDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjaGVycnl2aWV3X2Rpc2FibGVfcnBzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JSTkxNV9XUklURShHRU42X1JQ X0NPTlRST0wsIDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2Rpc2FibGVf cnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JSTkxNV9XUklU RShHRU42X1JQX0NPTlRST0wsIDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBnZW42X2luaXRf cnBzX2ZyZXF1ZW5jaWVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+ IC0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2LT5ndF9wbS5ycHM7Cj4gLQo+IC0J LyogQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgaW4gdW5pdHMgb2YgNTBNSHogKi8KPiAtCj4gLQkv KiBzdGF0aWMgdmFsdWVzIGZyb20gSFc6IFJQMCA+IFJQMSA+IFJQbiAobWluX2ZyZXEpICovCj4g LQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpIHsKPiAtCQl1MzIgcnBfc3RhdGVfY2FwID0gSTkx NV9SRUFEKEJYVF9SUF9TVEFURV9DQVApOwo+IC0JCXJwcy0+cnAwX2ZyZXEgPSAocnBfc3RhdGVf Y2FwID4+IDE2KSAmIDB4ZmY7Cj4gLQkJcnBzLT5ycDFfZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4g IDgpICYgMHhmZjsKPiAtCQlycHMtPm1pbl9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkgJiAw eGZmOwo+IC0JfSBlbHNlIHsKPiAtCQl1MzIgcnBfc3RhdGVfY2FwID0gSTkxNV9SRUFEKEdFTjZf UlBfU1RBVEVfQ0FQKTsKPiAtCQlycHMtPnJwMF9mcmVxID0gKHJwX3N0YXRlX2NhcCA+PiAgMCkg JiAweGZmOwo+IC0JCXJwcy0+cnAxX2ZyZXEgPSAocnBfc3RhdGVfY2FwID4+ICA4KSAmIDB4ZmY7 Cj4gLQkJcnBzLT5taW5fZnJlcSA9IChycF9zdGF0ZV9jYXAgPj4gMTYpICYgMHhmZjsKPiAtCX0K PiAtCS8qIGh3X21heCA9IFJQMCB1bnRpbCB3ZSBjaGVjayBmb3Igb3ZlcmNsb2NraW5nICovCj4g LQlycHMtPm1heF9mcmVxID0gcnBzLT5ycDBfZnJlcTsKPiAtCj4gLQlycHMtPmVmZmljaWVudF9m cmVxID0gcnBzLT5ycDFfZnJlcTsKPiAtCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19C Uk9BRFdFTEwoZGV2X3ByaXYpIHx8Cj4gLQkgICAgSVNfR0VOOV9CQyhkZXZfcHJpdikgfHwgSU5U RUxfR0VOKGRldl9wcml2KSA+PSAxMCkgewo+IC0JCXUzMiBkZGNjX3N0YXR1cyA9IDA7Cj4gLQo+ IC0JCWlmIChzYW5keWJyaWRnZV9wY29kZV9yZWFkKGRldl9wcml2LAo+IC0JCQkJCSAgIEhTV19Q Q09ERV9EWU5BTUlDX0RVVFlfQ1lDTEVfQ09OVFJPTCwKPiAtCQkJCQkgICAmZGRjY19zdGF0dXMs IE5VTEwpID09IDApCj4gLQkJCXJwcy0+ZWZmaWNpZW50X2ZyZXEgPQo+IC0JCQkJY2xhbXBfdCh1 OCwKPiAtCQkJCQkoKGRkY2Nfc3RhdHVzID4+IDgpICYgMHhmZiksCj4gLQkJCQkJcnBzLT5taW5f ZnJlcSwKPiAtCQkJCQlycHMtPm1heF9mcmVxKTsKPiAtCX0KPiAtCj4gLQlpZiAoSVNfR0VOOV9C QyhkZXZfcHJpdikgfHwgSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkgewo+IC0JCS8qIFN0b3Jl IHRoZSBmcmVxdWVuY3kgdmFsdWVzIGluIDE2LjY2IE1IWiB1bml0cywgd2hpY2ggaXMKPiAtCQkg KiB0aGUgbmF0dXJhbCBoYXJkd2FyZSB1bml0IGZvciBTS0wKPiAtCQkgKi8KPiAtCQlycHMtPnJw MF9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7Cj4gLQkJcnBzLT5ycDFfZnJlcSAqPSBHRU45X0ZS RVFfU0NBTEVSOwo+IC0JCXJwcy0+bWluX2ZyZXEgKj0gR0VOOV9GUkVRX1NDQUxFUjsKPiAtCQly cHMtPm1heF9mcmVxICo9IEdFTjlfRlJFUV9TQ0FMRVI7Cj4gLQkJcnBzLT5lZmZpY2llbnRfZnJl cSAqPSBHRU45X0ZSRVFfU0NBTEVSOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCByZXNl dF9ycHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCSAgICAgIGludCAo KnNldCkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKiwgdTgpKQo+IC17Cj4gLQlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCXU4IGZyZXEgPSBycHMtPmN1 cl9mcmVxOwo+IC0KPiAtCS8qIGZvcmNlIGEgcmVzZXQgKi8KPiAtCXJwcy0+cG93ZXIubW9kZSA9 IC0xOwo+IC0JcnBzLT5jdXJfZnJlcSA9IC0xOwo+IC0KPiAtCWlmIChzZXQoZGV2X3ByaXYsIGZy ZXEpKQo+IC0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlc2V0IFJQUyB0byBpbml0aWFsIHZhbHVl c1xuIik7Cj4gLX0KPiAtCj4gLS8qIFNlZSB0aGUgR2VuOV9HVF9QTV9Qcm9ncmFtbWluZ19HdWlk ZSBkb2MgZm9yIHRoZSBiZWxvdyAqLwo+IC1zdGF0aWMgdm9pZCBnZW45X2VuYWJsZV9ycHMoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlpbnRlbF91bmNvcmVfZm9y Y2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gLQo+IC0JLyog UHJvZ3JhbSBkZWZhdWx0cyBhbmQgdGhyZXNob2xkcyBmb3IgUlBTICovCj4gLQlpZiAoSVNfR0VO KGRldl9wcml2LCA5KSkKPiAtCQlJOTE1X1dSSVRFKEdFTjZfUkNfVklERU9fRlJFUSwKPiAtCQkJ R0VOOV9GUkVRVUVOQ1koZGV2X3ByaXYtPmd0X3BtLnJwcy5ycDFfZnJlcSkpOwo+IC0KPiAtCS8q IDEgc2Vjb25kIHRpbWVvdXQqLwo+IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwK PiAtCQlHVF9JTlRFUlZBTF9GUk9NX1VTKGRldl9wcml2LCAxMDAwMDAwKSk7Cj4gLQo+IC0JSTkx NV9XUklURShHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAweGEpOwo+IC0KPiAtCS8qIExlYW5pbmcg b24gdGhlIGJlbG93IGNhbGwgdG8gZ2VuNl9zZXRfcnBzIHRvIHByb2dyYW0vc2V0dXAgdGhlCj4g LQkgKiBVcC9Eb3duIEVJICYgdGhyZXNob2xkIHJlZ2lzdGVycywgYXMgd2VsbCBhcyB0aGUgUlBf Q09OVFJPTCwKPiAtCSAqIFJQX0lOVEVSUlVQVF9MSU1JVFMgJiBSUE5TV1JFUSByZWdpc3RlcnMg Ki8KPiAtCXJlc2V0X3JwcyhkZXZfcHJpdiwgZ2VuNl9zZXRfcnBzKTsKPiAtCj4gLQlpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIGdlbjhfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJp di0+Z3RfcG0ucnBzOwo+IC0KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZkZXZfcHJp di0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPiAtCj4gLQkvKiAxIFByb2dyYW0gZGVmYXVsdHMg YW5kIHRocmVzaG9sZHMgZm9yIFJQUyovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBOU1dSRVEsCj4g LQkJICAgSFNXX0ZSRVFVRU5DWShycHMtPnJwMV9mcmVxKSk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZf UkNfVklERU9fRlJFUSwKPiAtCQkgICBIU1dfRlJFUVVFTkNZKHJwcy0+cnAxX2ZyZXEpKTsKPiAt CS8qIE5COiBEb2NzIHNheSAxcywgYW5kIDEwMDAwMDAgLSB3aGljaCBhcmVuJ3QgZXF1aXZhbGVu dCAqLwo+IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMDAwIC8gMTI4 KTsgLyogMSBzZWNvbmQgdGltZW91dCAqLwo+IC0KPiAtCS8qIERvY3MgcmVjb21tZW5kIDkwME1I eiwgYW5kIDMwMCBNSHogcmVzcGVjdGl2ZWx5ICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfSU5U RVJSVVBUX0xJTUlUUywKPiAtCQkgICBycHMtPm1heF9mcmVxX3NvZnRsaW1pdCA8PCAyNCB8Cj4g LQkJICAgcnBzLT5taW5fZnJlcV9zb2Z0bGltaXQgPDwgMTYpOwo+IC0KPiAtCUk5MTVfV1JJVEUo R0VONl9SUF9VUF9USFJFU0hPTEQsIDc2MDAwMDAgLyAxMjgpOyAvKiA3Nm1zIGJ1c3luZXNzIHBl ciBFSSwgOTAlICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsIDMxMzAw MDAwIC8gMTI4KTsgLyogMzEzbXMgYnVzeW5lc3MgcGVyIEVJLCA3MCUqLwo+IC0JSTkxNV9XUklU RShHRU42X1JQX1VQX0VJLCA2NjAwMCk7IC8qIDg0LjQ4bXMsIFhYWDogcmFuZG9tPyAqLwo+IC0J STkxNV9XUklURShHRU42X1JQX0RPV05fRUksIDM1MDAwMCk7IC8qIDQ0OG1zLCBYWFg6IHJhbmRv bT8gKi8KPiAtCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEwKTsKPiAt Cj4gLQkvKiAyOiBFbmFibGUgUlBTICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09OVFJPTCwK PiAtCQkgICBHRU42X1JQX01FRElBX1RVUkJPIHwKPiAtCQkgICBHRU42X1JQX01FRElBX0hXX05P Uk1BTF9NT0RFIHwKPiAtCQkgICBHRU42X1JQX01FRElBX0lTX0dGWCB8Cj4gLQkJICAgR0VONl9S UF9FTkFCTEUgfAo+IC0JCSAgIEdFTjZfUlBfVVBfQlVTWV9BVkcgfAo+IC0JCSAgIEdFTjZfUlBf RE9XTl9JRExFX0FWRyk7Cj4gLQo+IC0JcmVzZXRfcnBzKGRldl9wcml2LCBnZW42X3NldF9ycHMp Owo+IC0KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBG T1JDRVdBS0VfQUxMKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZ2VuNl9lbmFibGVfcnBzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JLyogSGVyZSBiZWdpbnMg YSBtYWdpYyBzZXF1ZW5jZSBvZiByZWdpc3RlciB3cml0ZXMgdG8gZW5hYmxlCj4gLQkgKiBhdXRv LWRvd25jbG9ja2luZy4KPiAtCSAqCj4gLQkgKiBQZXJoYXBzIHRoZXJlIG1pZ2h0IGJlIHNvbWUg dmFsdWUgaW4gZXhwb3NpbmcgdGhlc2UgdG8KPiAtCSAqIHVzZXJzcGFjZS4uLgo+IC0JICovCj4g LQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtF X0FMTCk7Cj4gLQo+IC0JLyogUG93ZXIgZG93biBpZiBjb21wbGV0ZWx5IGlkbGUgZm9yIG92ZXIg NTBtcyAqLwo+IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgNTAwMDApOwo+IC0J STkxNV9XUklURShHRU42X1JQX0lETEVfSFlTVEVSU0lTLCAxMCk7Cj4gLQo+IC0JcmVzZXRfcnBz KGRldl9wcml2LCBnZW42X3NldF9ycHMpOwo+IC0KPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2Vf cHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPiAtfQo+IC0KPiAtc3RhdGlj IGludCBjaGVycnl2aWV3X3Jwc19tYXhfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gLXsKPiAtCXUzMiB2YWwsIHJwMDsKPiAtCj4gLQl2YWwgPSB2bHZfcHVuaXRfcmVh ZChkZXZfcHJpdiwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKPiAtCj4gLQlzd2l0Y2ggKFJV TlRJTUVfSU5GTyhkZXZfcHJpdiktPnNzZXUuZXVfdG90YWwpIHsKPiAtCWNhc2UgODoKPiAtCQkv KiAoMiAqIDQpIGNvbmZpZyAqLwo+IC0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZNQVhfQVRfVk1B WF8yU1M0RVVfRlVTRV9TSElGVCk7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDEyOgo+IC0JCS8qICgy ICogNikgY29uZmlnICovCj4gLQkJcnAwID0gKHZhbCA+PiBGQl9HRlhfRk1BWF9BVF9WTUFYXzJT UzZFVV9GVVNFX1NISUZUKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgMTY6Cj4gLQkJLyogKDIgKiA4 KSBjb25maWcgKi8KPiAtCWRlZmF1bHQ6Cj4gLQkJLyogU2V0dGluZyAoMiAqIDgpIE1pbiBSUDAg Zm9yIGFueSBvdGhlciBjb21iaW5hdGlvbiAqLwo+IC0JCXJwMCA9ICh2YWwgPj4gRkJfR0ZYX0ZN QVhfQVRfVk1BWF8yU1M4RVVfRlVTRV9TSElGVCk7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0J cnAwID0gKHJwMCAmIEZCX0dGWF9GUkVRX0ZVU0VfTUFTSyk7Cj4gLQo+IC0JcmV0dXJuIHJwMDsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBjaGVycnl2aWV3X3Jwc19ycGVfZnJlcShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiB2YWwsIHJwZTsKPiAtCj4gLQl2 YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfR1BVX0RVVFlDWUNMRV9SRUcpOwo+ IC0JcnBlID0gKHZhbCA+PiBQVU5JVF9HUFVfRFVUWUNZQ0xFX1JQRV9GUkVRX1NISUZUKSAmIFBV TklUX0dQVV9EVVRZQ1lDTEVfUlBFX0ZSRVFfTUFTSzsKPiAtCj4gLQlyZXR1cm4gcnBlOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IGNoZXJyeXZpZXdfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiB2YWwsIHJwMTsKPiAtCj4gLQl2YWwg PSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgRkJfR0ZYX0ZNQVhfQVRfVk1BWF9GVVNFKTsKPiAt CXJwMSA9ICh2YWwgJiBGQl9HRlhfRlJFUV9GVVNFX01BU0spOwo+IC0KPiAtCXJldHVybiBycDE7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB1MzIgY2hlcnJ5dmlld19ycHNfbWluX2ZyZXEoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgdmFsLCBycG47Cj4gLQo+IC0J dmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIEZCX0dGWF9GTUlOX0FUX1ZNSU5fRlVTRSk7 Cj4gLQlycG4gPSAoKHZhbCA+PiBGQl9HRlhfRk1JTl9BVF9WTUlOX0ZVU0VfU0hJRlQpICYKPiAt CQkgICAgICAgRkJfR0ZYX0ZSRVFfRlVTRV9NQVNLKTsKPiAtCj4gLQlyZXR1cm4gcnBuOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IHZhbGxleXZpZXdfcnBzX2d1YXJfZnJlcShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiB2YWwsIHJwMTsKPiAtCj4gLQl2YWwg PSB2bHZfbmNfcmVhZChkZXZfcHJpdiwgSU9TRl9OQ19GQl9HRlhfRlJFUV9GVVNFKTsKPiAtCj4g LQlycDEgPSAodmFsICYgRkJfR0ZYX0ZHVUFSQU5URUVEX0ZSRVFfRlVTRV9NQVNLKSA+PiBGQl9H RlhfRkdVQVJBTlRFRURfRlJFUV9GVVNFX1NISUZUOwo+IC0KPiAtCXJldHVybiBycDE7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfbWF4X2ZyZXEoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgdmFsLCBycDA7Cj4gLQo+IC0JdmFsID0g dmx2X25jX3JlYWQoZGV2X3ByaXYsIElPU0ZfTkNfRkJfR0ZYX0ZSRVFfRlVTRSk7Cj4gLQo+IC0J cnAwID0gKHZhbCAmIEZCX0dGWF9NQVhfRlJFUV9GVVNFX01BU0spID4+IEZCX0dGWF9NQVhfRlJF UV9GVVNFX1NISUZUOwo+IC0JLyogQ2xhbXAgdG8gbWF4ICovCj4gLQlycDAgPSBtaW5fdCh1MzIs IHJwMCwgMHhlYSk7Cj4gLQo+IC0JcmV0dXJuIHJwMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCB2 YWxsZXl2aWV3X3Jwc19ycGVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gLXsKPiAtCXUzMiB2YWwsIHJwZTsKPiAtCj4gLQl2YWwgPSB2bHZfbmNfcmVhZChkZXZfcHJp diwgSU9TRl9OQ19GQl9HRlhfRk1BWF9GVVNFX0xPKTsKPiAtCXJwZSA9ICh2YWwgJiBGQl9GTUFY X1ZNSU5fRlJFUV9MT19NQVNLKSA+PiBGQl9GTUFYX1ZNSU5fRlJFUV9MT19TSElGVDsKPiAtCXZh bCA9IHZsdl9uY19yZWFkKGRldl9wcml2LCBJT1NGX05DX0ZCX0dGWF9GTUFYX0ZVU0VfSEkpOwo+ IC0JcnBlIHw9ICh2YWwgJiBGQl9GTUFYX1ZNSU5fRlJFUV9ISV9NQVNLKSA8PCA1Owo+IC0KPiAt CXJldHVybiBycGU7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgdmFsbGV5dmlld19ycHNfbWluX2Zy ZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgdmFsOwo+ IC0KPiAtCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfR1BVX0xGTSkg JiAweGZmOwo+IC0JLyoKPiAtCSAqIEFjY29yZGluZyB0byB0aGUgQllUIFB1bml0IEdQVSB0dXJi byBIQVMgMS4xLjYuMyB0aGUgbWluaW11bSB2YWx1ZQo+IC0JICogZm9yIHRoZSBtaW5pbXVtIGZy ZXF1ZW5jeSBpbiBHUExMIG1vZGUgaXMgMHhjMS4gQ29udHJhcnkgdG8gdGhpcyBvbgo+IC0JICog YSBCWVQtTSBCMCB0aGUgYWJvdmUgcmVnaXN0ZXIgY29udGFpbnMgMHhiZi4gTW9yZW92ZXIgd2hl biBzZXR0aW5nCj4gLQkgKiBhIGZyZXF1ZW5jeSBQdW5pdCB3aWxsIG5vdCBhbGxvdyB2YWx1ZXMg YmVsb3cgMHhjMC4gQ2xhbXAgaXQgMHhjMAo+IC0JICogdG8gbWFrZSBzdXJlIGl0IG1hdGNoZXMg d2hhdCBQdW5pdCBhY2NlcHRzLgo+IC0JICovCj4gLQlyZXR1cm4gbWF4X3QodTMyLCB2YWwsIDB4 YzApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JZGV2X3ByaXYtPmd0X3BtLnJw cy5ncGxsX3JlZl9mcmVxID0KPiAtCQl2bHZfZ2V0X2Nja19jbG9jayhkZXZfcHJpdiwgIkdQTEwg cmVmIiwKPiAtCQkJCSAgQ0NLX0dQTExfQ0xPQ0tfQ09OVFJPTCwKPiAtCQkJCSAgZGV2X3ByaXYt PmN6Y2xrX2ZyZXEpOwo+IC0KPiAtCURSTV9ERUJVR19EUklWRVIoIkdQTEwgcmVmZXJlbmNlIGZy ZXE6ICVkIGtIelxuIiwKPiAtCQkJIGRldl9wcml2LT5ndF9wbS5ycHMuZ3BsbF9yZWZfZnJlcSk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfaW5pdF9ndF9wb3dlcnNhdmUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBz ICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0Jdmx2X2lv c2Zfc2JfZ2V0KGRldl9wcml2LAo+IC0JCQlCSVQoVkxWX0lPU0ZfU0JfUFVOSVQpIHwKPiAtCQkJ QklUKFZMVl9JT1NGX1NCX05DKSB8Cj4gLQkJCUJJVChWTFZfSU9TRl9TQl9DQ0spKTsKPiAtCj4g LQl2bHZfaW5pdF9ncGxsX3JlZl9mcmVxKGRldl9wcml2KTsKPiAtCj4gLQl2YWwgPSB2bHZfcHVu aXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0dQVV9GUkVRX1NUUyk7Cj4gLQlzd2l0Y2ggKCh2 YWwgPj4gNikgJiAzKSB7Cj4gLQljYXNlIDA6Cj4gLQljYXNlIDE6Cj4gLQkJZGV2X3ByaXYtPm1l bV9mcmVxID0gODAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSAyOgo+IC0JCWRldl9wcml2LT5tZW1f ZnJlcSA9IDEwNjY7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDM6Cj4gLQkJZGV2X3ByaXYtPm1lbV9m cmVxID0gMTMzMzsKPiAtCQlicmVhazsKPiAtCX0KPiAtCURSTV9ERUJVR19EUklWRVIoIkREUiBz cGVlZDogJWQgTUh6XG4iLCBkZXZfcHJpdi0+bWVtX2ZyZXEpOwo+IC0KPiAtCXJwcy0+bWF4X2Zy ZXEgPSB2YWxsZXl2aWV3X3Jwc19tYXhfZnJlcShkZXZfcHJpdik7Cj4gLQlycHMtPnJwMF9mcmVx ID0gcnBzLT5tYXhfZnJlcTsKPiAtCURSTV9ERUJVR19EUklWRVIoIm1heCBHUFUgZnJlcTogJWQg TUh6ICgldSlcbiIsCj4gLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5tYXhfZnJl cSksCj4gLQkJCSBycHMtPm1heF9mcmVxKTsKPiAtCj4gLQlycHMtPmVmZmljaWVudF9mcmVxID0g dmFsbGV5dmlld19ycHNfcnBlX2ZyZXEoZGV2X3ByaXYpOwo+IC0JRFJNX0RFQlVHX0RSSVZFUigi UlBlIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKPiAtCQkJIGludGVsX2dwdV9mcmVxKGRldl9w cml2LCBycHMtPmVmZmljaWVudF9mcmVxKSwKPiAtCQkJIHJwcy0+ZWZmaWNpZW50X2ZyZXEpOwo+ IC0KPiAtCXJwcy0+cnAxX2ZyZXEgPSB2YWxsZXl2aWV3X3Jwc19ndWFyX2ZyZXEoZGV2X3ByaXYp Owo+IC0JRFJNX0RFQlVHX0RSSVZFUigiUlAxKEd1YXIgRnJlcSkgR1BVIGZyZXE6ICVkIE1IeiAo JXUpXG4iLAo+IC0JCQkgaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIHJwcy0+cnAxX2ZyZXEpLAo+ IC0JCQkgcnBzLT5ycDFfZnJlcSk7Cj4gLQo+IC0JcnBzLT5taW5fZnJlcSA9IHZhbGxleXZpZXdf cnBzX21pbl9mcmVxKGRldl9wcml2KTsKPiAtCURSTV9ERUJVR19EUklWRVIoIm1pbiBHUFUgZnJl cTogJWQgTUh6ICgldSlcbiIsCj4gLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5t aW5fZnJlcSksCj4gLQkJCSBycHMtPm1pbl9mcmVxKTsKPiAtCj4gLQl2bHZfaW9zZl9zYl9wdXQo ZGV2X3ByaXYsCj4gLQkJCUJJVChWTFZfSU9TRl9TQl9QVU5JVCkgfAo+IC0JCQlCSVQoVkxWX0lP U0ZfU0JfTkMpIHwKPiAtCQkJQklUKFZMVl9JT1NGX1NCX0NDSykpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBjaGVycnl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGludGVsX3JwcyAqcnBzID0gJmRldl9wcml2 LT5ndF9wbS5ycHM7Cj4gLQl1MzIgdmFsOwo+IC0KPiAtCXZsdl9pb3NmX3NiX2dldChkZXZfcHJp diwKPiAtCQkJQklUKFZMVl9JT1NGX1NCX1BVTklUKSB8Cj4gLQkJCUJJVChWTFZfSU9TRl9TQl9O QykgfAo+IC0JCQlCSVQoVkxWX0lPU0ZfU0JfQ0NLKSk7Cj4gLQo+IC0Jdmx2X2luaXRfZ3BsbF9y ZWZfZnJlcShkZXZfcHJpdik7Cj4gLQo+IC0JdmFsID0gdmx2X2Nja19yZWFkKGRldl9wcml2LCBD Q0tfRlVTRV9SRUcpOwo+IC0KPiAtCXN3aXRjaCAoKHZhbCA+PiAyKSAmIDB4Nykgewo+IC0JY2Fz ZSAzOgo+IC0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDIwMDA7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZh dWx0Ogo+IC0JCWRldl9wcml2LT5tZW1fZnJlcSA9IDE2MDA7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4g LQlEUk1fREVCVUdfRFJJVkVSKCJERFIgc3BlZWQ6ICVkIE1IelxuIiwgZGV2X3ByaXYtPm1lbV9m cmVxKTsKPiAtCj4gLQlycHMtPm1heF9mcmVxID0gY2hlcnJ5dmlld19ycHNfbWF4X2ZyZXEoZGV2 X3ByaXYpOwo+IC0JcnBzLT5ycDBfZnJlcSA9IHJwcy0+bWF4X2ZyZXE7Cj4gLQlEUk1fREVCVUdf RFJJVkVSKCJtYXggR1BVIGZyZXE6ICVkIE1IeiAoJXUpXG4iLAo+IC0JCQkgaW50ZWxfZ3B1X2Zy ZXEoZGV2X3ByaXYsIHJwcy0+bWF4X2ZyZXEpLAo+IC0JCQkgcnBzLT5tYXhfZnJlcSk7Cj4gLQo+ IC0JcnBzLT5lZmZpY2llbnRfZnJlcSA9IGNoZXJyeXZpZXdfcnBzX3JwZV9mcmVxKGRldl9wcml2 KTsKPiAtCURSTV9ERUJVR19EUklWRVIoIlJQZSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCj4g LQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgcnBzLT5lZmZpY2llbnRfZnJlcSksCj4gLQkJ CSBycHMtPmVmZmljaWVudF9mcmVxKTsKPiAtCj4gLQlycHMtPnJwMV9mcmVxID0gY2hlcnJ5dmll d19ycHNfZ3Vhcl9mcmVxKGRldl9wcml2KTsKPiAtCURSTV9ERUJVR19EUklWRVIoIlJQMShHdWFy KSBHUFUgZnJlcTogJWQgTUh6ICgldSlcbiIsCj4gLQkJCSBpbnRlbF9ncHVfZnJlcShkZXZfcHJp diwgcnBzLT5ycDFfZnJlcSksCj4gLQkJCSBycHMtPnJwMV9mcmVxKTsKPiAtCj4gLQlycHMtPm1p bl9mcmVxID0gY2hlcnJ5dmlld19ycHNfbWluX2ZyZXEoZGV2X3ByaXYpOwo+IC0JRFJNX0RFQlVH X0RSSVZFUigibWluIEdQVSBmcmVxOiAlZCBNSHogKCV1KVxuIiwKPiAtCQkJIGludGVsX2dwdV9m cmVxKGRldl9wcml2LCBycHMtPm1pbl9mcmVxKSwKPiAtCQkJIHJwcy0+bWluX2ZyZXEpOwo+IC0K PiAtCXZsdl9pb3NmX3NiX3B1dChkZXZfcHJpdiwKPiAtCQkJQklUKFZMVl9JT1NGX1NCX1BVTklU KSB8Cj4gLQkJCUJJVChWTFZfSU9TRl9TQl9OQykgfAo+IC0JCQlCSVQoVkxWX0lPU0ZfU0JfQ0NL KSk7Cj4gLQo+IC0JV0FSTl9PTkNFKChycHMtPm1heF9mcmVxIHwgcnBzLT5lZmZpY2llbnRfZnJl cSB8IHJwcy0+cnAxX2ZyZXEgfAo+IC0JCSAgIHJwcy0+bWluX2ZyZXEpICYgMSwKPiAtCQkgICJP ZGQgR1BVIGZyZXEgdmFsdWVzXG4iKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgY2hlcnJ5dmll d19lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0J dTMyIHZhbDsKPiAtCj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVu Y29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gLQo+IC0JLyogMTogUHJvZ3JhbSBkZWZhdWx0cyBhbmQg dGhyZXNob2xkcyBmb3IgUlBTKi8KPiAtCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX1RJTUVPVVQs IDEwMDAwMDApOwo+IC0JSTkxNV9XUklURShHRU42X1JQX1VQX1RIUkVTSE9MRCwgNTk0MDApOwo+ IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVEhSRVNIT0xELCAyNDUwMDApOwo+IC0JSTkxNV9X UklURShHRU42X1JQX1VQX0VJLCA2NjAwMCk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfRE9XTl9F SSwgMzUwMDAwKTsKPiAtCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfSURMRV9IWVNURVJTSVMsIDEw KTsKPiAtCj4gLQkvKiAyOiBFbmFibGUgUlBTICovCj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBfQ09O VFJPTCwKPiAtCQkgICBHRU42X1JQX01FRElBX0hXX05PUk1BTF9NT0RFIHwKPiAtCQkgICBHRU42 X1JQX01FRElBX0lTX0dGWCB8Cj4gLQkJICAgR0VONl9SUF9FTkFCTEUgfAo+IC0JCSAgIEdFTjZf UlBfVVBfQlVTWV9BVkcgfAo+IC0JCSAgIEdFTjZfUlBfRE9XTl9JRExFX0FWRyk7Cj4gLQo+IC0J LyogU2V0dGluZyBGaXhlZCBCaWFzICovCj4gLQl2bHZfcHVuaXRfZ2V0KGRldl9wcml2KTsKPiAt Cj4gLQl2YWwgPSBWTFZfT1ZFUlJJREVfRU4gfCBWTFZfU09DX1REUF9FTiB8IENIVl9CSUFTX0NQ VV81MF9TT0NfNTA7Cj4gLQl2bHZfcHVuaXRfd3JpdGUoZGV2X3ByaXYsIFZMVl9UVVJCT19TT0Nf T1ZFUlJJREUsIHZhbCk7Cj4gLQo+IC0JdmFsID0gdmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBV TklUX1JFR19HUFVfRlJFUV9TVFMpOwo+IC0KPiAtCXZsdl9wdW5pdF9wdXQoZGV2X3ByaXYpOwo+ IC0KPiAtCS8qIFJQUyBjb2RlIGFzc3VtZXMgR1BMTCBpcyB1c2VkICovCj4gLQlXQVJOX09OQ0Uo KHZhbCAmIEdQTExFTkFCTEUpID09IDAsICJHUExMIG5vdCBlbmFibGVkXG4iKTsKPiAtCj4gLQlE Uk1fREVCVUdfRFJJVkVSKCJHUExMIGVuYWJsZWQ/ICVzXG4iLCB5ZXNubyh2YWwgJiBHUExMRU5B QkxFKSk7Cj4gLQlEUk1fREVCVUdfRFJJVkVSKCJHUFUgc3RhdHVzOiAweCUwOHhcbiIsIHZhbCk7 Cj4gLQo+IC0JcmVzZXRfcnBzKGRldl9wcml2LCB2YWxsZXl2aWV3X3NldF9ycHMpOwo+IC0KPiAt CWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KCZkZXZfcHJpdi0+dW5jb3JlLCBGT1JDRVdBS0Vf QUxMKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdmFsbGV5dmlld19lbmFibGVfcnBzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdTMyIHZhbDsKPiAtCj4gLQlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldCgmZGV2X3ByaXYtPnVuY29yZSwgRk9SQ0VXQUtFX0FM TCk7Cj4gLQo+IC0JSTkxNV9XUklURShHRU42X1JQX0RPV05fVElNRU9VVCwgMTAwMDAwMCk7Cj4g LQlJOTE1X1dSSVRFKEdFTjZfUlBfVVBfVEhSRVNIT0xELCA1OTQwMCk7Cj4gLQlJOTE1X1dSSVRF KEdFTjZfUlBfRE9XTl9USFJFU0hPTEQsIDI0NTAwMCk7Cj4gLQlJOTE1X1dSSVRFKEdFTjZfUlBf VVBfRUksIDY2MDAwKTsKPiAtCUk5MTVfV1JJVEUoR0VONl9SUF9ET1dOX0VJLCAzNTAwMDApOwo+ IC0KPiAtCUk5MTVfV1JJVEUoR0VONl9SUF9JRExFX0hZU1RFUlNJUywgMTApOwo+IC0KPiAtCUk5 MTVfV1JJVEUoR0VONl9SUF9DT05UUk9MLAo+IC0JCSAgIEdFTjZfUlBfTUVESUFfVFVSQk8gfAo+ IC0JCSAgIEdFTjZfUlBfTUVESUFfSFdfTk9STUFMX01PREUgfAo+IC0JCSAgIEdFTjZfUlBfTUVE SUFfSVNfR0ZYIHwKPiAtCQkgICBHRU42X1JQX0VOQUJMRSB8Cj4gLQkJICAgR0VONl9SUF9VUF9C VVNZX0FWRyB8Cj4gLQkJICAgR0VONl9SUF9ET1dOX0lETEVfQ09OVCk7Cj4gLQo+IC0Jdmx2X3B1 bml0X2dldChkZXZfcHJpdik7Cj4gLQo+IC0JLyogU2V0dGluZyBGaXhlZCBCaWFzICovCj4gLQl2 YWwgPSBWTFZfT1ZFUlJJREVfRU4gfCBWTFZfU09DX1REUF9FTiB8IFZMVl9CSUFTX0NQVV8xMjVf U09DXzg3NTsKPiAtCXZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgVkxWX1RVUkJPX1NPQ19PVkVS UklERSwgdmFsKTsKPiAtCj4gLQl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRf UkVHX0dQVV9GUkVRX1NUUyk7Cj4gLQo+IC0Jdmx2X3B1bml0X3B1dChkZXZfcHJpdik7Cj4gLQo+ IC0JLyogUlBTIGNvZGUgYXNzdW1lcyBHUExMIGlzIHVzZWQgKi8KPiAtCVdBUk5fT05DRSgodmFs ICYgR1BMTEVOQUJMRSkgPT0gMCwgIkdQTEwgbm90IGVuYWJsZWRcbiIpOwo+IC0KPiAtCURSTV9E RUJVR19EUklWRVIoIkdQTEwgZW5hYmxlZD8gJXNcbiIsIHllc25vKHZhbCAmIEdQTExFTkFCTEUp KTsKPiAtCURSTV9ERUJVR19EUklWRVIoIkdQVSBzdGF0dXM6IDB4JTA4eFxuIiwgdmFsKTsKPiAt Cj4gLQlyZXNldF9ycHMoZGV2X3ByaXYsIHZhbGxleXZpZXdfc2V0X3Jwcyk7Cj4gLQo+IC0JaW50 ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRldl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwp Owo+IC19Cj4gLQo+IC1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlbF9weGZyZXEodTMyIHZpZGZy ZXEpCj4gLXsKPiAtCXVuc2lnbmVkIGxvbmcgZnJlcTsKPiAtCWludCBkaXYgPSAodmlkZnJlcSAm IDB4M2YwMDAwKSA+PiAxNjsKPiAtCWludCBwb3N0ID0gKHZpZGZyZXEgJiAweDMwMDApID4+IDEy Owo+IC0JaW50IHByZSA9ICh2aWRmcmVxICYgMHg3KTsKPiAtCj4gLQlpZiAoIXByZSkKPiAtCQly ZXR1cm4gMDsKPiAtCj4gLQlmcmVxID0gKChkaXYgKiAxMzMzMzMpIC8gKCgxPDxwb3N0KSAqIHBy ZSkpOwo+IC0KPiAtCXJldHVybiBmcmVxOwo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0 IGNwYXJhbXMgewo+IC0JdTE2IGk7Cj4gLQl1MTYgdDsKPiAtCXUxNiBtOwo+IC0JdTE2IGM7Cj4g LX0gY3BhcmFtc1tdID0gewo+IC0JeyAxLCAxMzMzLCAzMDEsIDI4NjY0IH0sCj4gLQl7IDEsIDEw NjYsIDI5NCwgMjQ0NjAgfSwKPiAtCXsgMSwgODAwLCAyOTQsIDI1MTkyIH0sCj4gLQl7IDAsIDEz MzMsIDI3NiwgMjc2MDUgfSwKPiAtCXsgMCwgMTA2NiwgMjc2LCAyNzYwNSB9LAo+IC0JeyAwLCA4 MDAsIDIzMSwgMjM3ODQgfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faTkx NV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAt CXU2NCB0b3RhbF9jb3VudCwgZGlmZiwgcmV0Owo+IC0JdTMyIGNvdW50MSwgY291bnQyLCBjb3Vu dDMsIG0gPSAwLCBjID0gMDsKPiAtCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllc190b19tc2Vj cyhqaWZmaWVzKSwgZGlmZjE7Cj4gLQlpbnQgaTsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxk KCZtY2hkZXZfbG9jayk7Cj4gLQo+IC0JZGlmZjEgPSBub3cgLSBkZXZfcHJpdi0+aXBzLmxhc3Rf dGltZTE7Cj4gLQo+IC0JLyogUHJldmVudCBkaXZpc2lvbi1ieS16ZXJvIGlmIHdlIGFyZSBhc2tp bmcgdG9vIGZhc3QuCj4gLQkgKiBBbHNvLCB3ZSBkb24ndCBnZXQgaW50ZXJlc3RpbmcgcmVzdWx0 cyBpZiB3ZSBhcmUgcG9sbGluZwo+IC0JICogZmFzdGVyIHRoYW4gb25jZSBpbiAxMG1zLCBzbyBq dXN0IHJldHVybiB0aGUgc2F2ZWQgdmFsdWUKPiAtCSAqIGluIHN1Y2ggY2FzZXMuCj4gLQkgKi8K PiAtCWlmIChkaWZmMSA8PSAxMCkKPiAtCQlyZXR1cm4gZGV2X3ByaXYtPmlwcy5jaGlwc2V0X3Bv d2VyOwo+IC0KPiAtCWNvdW50MSA9IEk5MTVfUkVBRChETUlFQyk7Cj4gLQljb3VudDIgPSBJOTE1 X1JFQUQoRERSRUMpOwo+IC0JY291bnQzID0gSTkxNV9SRUFEKENTSUVDKTsKPiAtCj4gLQl0b3Rh bF9jb3VudCA9IGNvdW50MSArIGNvdW50MiArIGNvdW50MzsKPiAtCj4gLQkvKiBGSVhNRTogaGFu ZGxlIHBlci1jb3VudGVyIG92ZXJmbG93ICovCj4gLQlpZiAodG90YWxfY291bnQgPCBkZXZfcHJp di0+aXBzLmxhc3RfY291bnQxKSB7Cj4gLQkJZGlmZiA9IH4wVUwgLSBkZXZfcHJpdi0+aXBzLmxh c3RfY291bnQxOwo+IC0JCWRpZmYgKz0gdG90YWxfY291bnQ7Cj4gLQl9IGVsc2Ugewo+IC0JCWRp ZmYgPSB0b3RhbF9jb3VudCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDE7Cj4gLQl9Cj4gLQo+ IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3BhcmFtcyk7IGkrKykgewo+IC0JCWlmIChj cGFyYW1zW2ldLmkgPT0gZGV2X3ByaXYtPmlwcy5jX20gJiYKPiAtCQkgICAgY3BhcmFtc1tpXS50 ID09IGRldl9wcml2LT5pcHMucl90KSB7Cj4gLQkJCW0gPSBjcGFyYW1zW2ldLm07Cj4gLQkJCWMg PSBjcGFyYW1zW2ldLmM7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlkaWZmID0g ZGl2X3U2NChkaWZmLCBkaWZmMSk7Cj4gLQlyZXQgPSAoKG0gKiBkaWZmKSArIGMpOwo+IC0JcmV0 ID0gZGl2X3U2NChyZXQsIDEwKTsKPiAtCj4gLQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQxID0g dG90YWxfY291bnQ7Cj4gLQlkZXZfcHJpdi0+aXBzLmxhc3RfdGltZTEgPSBub3c7Cj4gLQo+IC0J ZGV2X3ByaXYtPmlwcy5jaGlwc2V0X3Bvd2VyID0gcmV0Owo+IC0KPiAtCXJldHVybiByZXQ7Cj4g LX0KPiAtCj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0J dW5zaWduZWQgbG9uZyB2YWwgPSAwOwo+IC0KPiAtCWlmICghSVNfR0VOKGRldl9wcml2LCA1KSkK PiAtCQlyZXR1cm4gMDsKPiAtCj4gLQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oJmRldl9wcml2LT5y dW50aW1lX3BtLCB3YWtlcmVmKSB7Cj4gLQkJc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+ IC0JCXZhbCA9IF9faTkxNV9jaGlwc2V0X3ZhbChkZXZfcHJpdik7Cj4gLQkJc3Bpbl91bmxvY2tf aXJxKCZtY2hkZXZfbG9jayk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHZhbDsKPiAtfQo+IC0KPiAt dW5zaWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Cj4gLXsKPiAtCXVuc2lnbmVkIGxvbmcgbSwgeCwgYjsKPiAtCXUzMiB0c2ZzOwo+IC0KPiAtCXRz ZnMgPSBpbnRlbF91bmNvcmVfcmVhZCgmaTkxNS0+dW5jb3JlLCBUU0ZTKTsKPiAtCj4gLQltID0g KCh0c2ZzICYgVFNGU19TTE9QRV9NQVNLKSA+PiBUU0ZTX1NMT1BFX1NISUZUKTsKPiAtCXggPSBp bnRlbF91bmNvcmVfcmVhZDgoJmk5MTUtPnVuY29yZSwgVFIxKTsKPiAtCj4gLQliID0gdHNmcyAm IFRTRlNfSU5UUl9NQVNLOwo+IC0KPiAtCXJldHVybiAoKG0gKiB4KSAvIDEyNykgLSBiOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IF9weHZpZF90b192ZCh1OCBweHZpZCkKPiAtewo+IC0JaWYgKHB4 dmlkID09IDApCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JaWYgKHB4dmlkID49IDggJiYgcHh2aWQg PCAzMSkKPiAtCQlweHZpZCA9IDMxOwo+IC0KPiAtCXJldHVybiAocHh2aWQgKyAyKSAqIDEyNTsK PiAtfQo+IC0KPiAtc3RhdGljIHUzMiBwdmlkX3RvX2V4dHZpZChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsIHU4IHB4dmlkKQo+IC17Cj4gLQljb25zdCBpbnQgdmQgPSBfcHh2aWRf dG9fdmQocHh2aWQpOwo+IC0JY29uc3QgaW50IHZtID0gdmQgLSAxMTI1Owo+IC0KPiAtCWlmIChJ TlRFTF9JTkZPKGRldl9wcml2KS0+aXNfbW9iaWxlKQo+IC0JCXJldHVybiB2bSA+IDAgPyB2bSA6 IDA7Cj4gLQo+IC0JcmV0dXJuIHZkOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX2k5MTVfdXBk YXRlX2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1 NjQgbm93LCBkaWZmLCBkaWZmbXM7Cj4gLQl1MzIgY291bnQ7Cj4gLQo+IC0JbG9ja2RlcF9hc3Nl cnRfaGVsZCgmbWNoZGV2X2xvY2spOwo+IC0KPiAtCW5vdyA9IGt0aW1lX2dldF9yYXdfbnMoKTsK PiAtCWRpZmZtcyA9IG5vdyAtIGRldl9wcml2LT5pcHMubGFzdF90aW1lMjsKPiAtCWRvX2Rpdihk aWZmbXMsIE5TRUNfUEVSX01TRUMpOwo+IC0KPiAtCS8qIERvbid0IGRpdmlkZSBieSAwICovCj4g LQlpZiAoIWRpZmZtcykKPiAtCQlyZXR1cm47Cj4gLQo+IC0JY291bnQgPSBJOTE1X1JFQUQoR0ZY RUMpOwo+IC0KPiAtCWlmIChjb3VudCA8IGRldl9wcml2LT5pcHMubGFzdF9jb3VudDIpIHsKPiAt CQlkaWZmID0gfjBVTCAtIGRldl9wcml2LT5pcHMubGFzdF9jb3VudDI7Cj4gLQkJZGlmZiArPSBj b3VudDsKPiAtCX0gZWxzZSB7Cj4gLQkJZGlmZiA9IGNvdW50IC0gZGV2X3ByaXYtPmlwcy5sYXN0 X2NvdW50MjsKPiAtCX0KPiAtCj4gLQlkZXZfcHJpdi0+aXBzLmxhc3RfY291bnQyID0gY291bnQ7 Cj4gLQlkZXZfcHJpdi0+aXBzLmxhc3RfdGltZTIgPSBub3c7Cj4gLQo+IC0JLyogTW9yZSBtYWdp YyBjb25zdGFudHMuLi4gKi8KPiAtCWRpZmYgPSBkaWZmICogMTE4MTsKPiAtCWRpZmYgPSBkaXZf dTY0KGRpZmYsIGRpZmZtcyAqIDEwKTsKPiAtCWRldl9wcml2LT5pcHMuZ2Z4X3Bvd2VyID0gZGlm ZjsKPiAtfQo+IC0KPiAtdm9pZCBpOTE1X3VwZGF0ZV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQo+ IC0JaWYgKCFJU19HRU4oZGV2X3ByaXYsIDUpKQo+IC0JCXJldHVybjsKPiAtCj4gLQl3aXRoX2lu dGVsX3J1bnRpbWVfcG0oJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKSB7Cj4gLQkJc3Bp bl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0JCV9faTkxNV91cGRhdGVfZ2Z4X3ZhbChkZXZf cHJpdik7Cj4gLQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7Cj4gLQl9Cj4gLX0KPiAt Cj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faTkxNV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdW5zaWduZWQgbG9uZyB0LCBjb3JyLCBzdGF0ZTEs IGNvcnIyLCBzdGF0ZTI7Cj4gLQl1MzIgcHh2aWQsIGV4dF92Owo+IC0KPiAtCWxvY2tkZXBfYXNz ZXJ0X2hlbGQoJm1jaGRldl9sb2NrKTsKPiAtCj4gLQlweHZpZCA9IEk5MTVfUkVBRChQWFZGUkVR KGRldl9wcml2LT5ndF9wbS5ycHMuY3VyX2ZyZXEpKTsKPiAtCXB4dmlkID0gKHB4dmlkID4+IDI0 KSAmIDB4N2Y7Cj4gLQlleHRfdiA9IHB2aWRfdG9fZXh0dmlkKGRldl9wcml2LCBweHZpZCk7Cj4g LQo+IC0Jc3RhdGUxID0gZXh0X3Y7Cj4gLQo+IC0JdCA9IGk5MTVfbWNoX3ZhbChkZXZfcHJpdik7 Cj4gLQo+IC0JLyogUmV2ZWwgaW4gdGhlIGVtcGlyaWNhbGx5IGRlcml2ZWQgY29uc3RhbnRzICov Cj4gLQo+IC0JLyogQ29ycmVjdGlvbiBmYWN0b3IgaW4gMS8xMDAwMDAgdW5pdHMgKi8KPiAtCWlm ICh0ID4gODApCj4gLQkJY29yciA9ICgodCAqIDIzNDkpICsgMTM1OTQwKTsKPiAtCWVsc2UgaWYg KHQgPj0gNTApCj4gLQkJY29yciA9ICgodCAqIDk2NCkgKyAyOTMxNyk7Cj4gLQllbHNlIC8qIDwg NTAgKi8KPiAtCQljb3JyID0gKCh0ICogMzAxKSArIDEwMDQpOwo+IC0KPiAtCWNvcnIgPSBjb3Jy ICogKCgxNTAxNDIgKiBzdGF0ZTEpIC8gMTAwMDAgLSA3ODY0Mik7Cj4gLQljb3JyIC89IDEwMDAw MDsKPiAtCWNvcnIyID0gKGNvcnIgKiBkZXZfcHJpdi0+aXBzLmNvcnIpOwo+IC0KPiAtCXN0YXRl MiA9IChjb3JyMiAqIHN0YXRlMSkgLyAxMDAwMDsKPiAtCXN0YXRlMiAvPSAxMDA7IC8qIGNvbnZl cnQgdG8gbVcgKi8KPiAtCj4gLQlfX2k5MTVfdXBkYXRlX2dmeF92YWwoZGV2X3ByaXYpOwo+IC0K PiAtCXJldHVybiBkZXZfcHJpdi0+aXBzLmdmeF9wb3dlciArIHN0YXRlMjsKPiAtfQo+IC0KPiAt dW5zaWduZWQgbG9uZyBpOTE1X2dmeF92YWwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQo+IC17Cj4gLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCXVuc2lnbmVkIGxvbmcg dmFsID0gMDsKPiAtCj4gLQlpZiAoIUlTX0dFTihkZXZfcHJpdiwgNSkpCj4gLQkJcmV0dXJuIDA7 Cj4gLQo+IC0Jd2l0aF9pbnRlbF9ydW50aW1lX3BtKCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2Fr ZXJlZikgewo+IC0JCXNwaW5fbG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiAtCQl2YWwgPSBfX2k5 MTVfZ2Z4X3ZhbChkZXZfcHJpdik7Cj4gLQkJc3Bpbl91bmxvY2tfaXJxKCZtY2hkZXZfbG9jayk7 Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHZhbDsKPiAtfQo+IC0KPiAtc3RhdGljIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIF9fcmN1ICppOTE1X21jaF9kZXY7Cj4gLQo+IC1zdGF0aWMgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKm1jaGRldl9nZXQodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTU7Cj4gLQo+IC0JcmN1X3JlYWRfbG9jaygpOwo+IC0JaTkxNSA9IHJjdV9k ZXJlZmVyZW5jZShpOTE1X21jaF9kZXYpOwo+IC0JaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygm aTkxNS0+ZHJtLnJlZikpCj4gLQkJaTkxNSA9IE5VTEw7Cj4gLQlyY3VfcmVhZF91bmxvY2soKTsK PiAtCj4gLQlyZXR1cm4gaTkxNTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfcmVhZF9tY2hf dmFsIC0gcmV0dXJuIHZhbHVlIGZvciBJUFMgdXNlCj4gLSAqCj4gLSAqIENhbGN1bGF0ZSBhbmQg cmV0dXJuIGEgdmFsdWUgZm9yIHRoZSBJUFMgZHJpdmVyIHRvIHVzZSB3aGVuIGRlY2lkaW5nIHdo ZXRoZXIKPiAtICogd2UgaGF2ZSB0aGVybWFsIGFuZCBwb3dlciBoZWFkcm9vbSB0byBpbmNyZWFz ZSBDUFUgb3IgR1BVIHBvd2VyIGJ1ZGdldC4KPiAtICovCj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9y ZWFkX21jaF92YWwodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7 Cj4gLQl1bnNpZ25lZCBsb25nIGNoaXBzZXRfdmFsID0gMDsKPiAtCXVuc2lnbmVkIGxvbmcgZ3Jh cGhpY3NfdmFsID0gMDsKPiAtCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0KPiAtCWk5MTUg PSBtY2hkZXZfZ2V0KCk7Cj4gLQlpZiAoIWk5MTUpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0Jd2l0 aF9pbnRlbF9ydW50aW1lX3BtKCZpOTE1LT5ydW50aW1lX3BtLCB3YWtlcmVmKSB7Cj4gLQkJc3Bp bl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0JCWNoaXBzZXRfdmFsID0gX19pOTE1X2NoaXBz ZXRfdmFsKGk5MTUpOwo+IC0JCWdyYXBoaWNzX3ZhbCA9IF9faTkxNV9nZnhfdmFsKGk5MTUpOwo+ IC0JCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0JfQo+IC0KPiAtCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOwo+IC0JcmV0dXJuIGNoaXBzZXRfdmFsICsgZ3JhcGhpY3NfdmFsOwo+ IC19Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVhZF9tY2hfdmFsKTsKPiAtCj4gLS8qKgo+ IC0gKiBpOTE1X2dwdV9yYWlzZSAtIHJhaXNlIEdQVSBmcmVxdWVuY3kgbGltaXQKPiAtICoKPiAt ICogUmFpc2UgdGhlIGxpbWl0OyBJUFMgaW5kaWNhdGVzIHdlIGhhdmUgdGhlcm1hbCBoZWFkcm9v bS4KPiAtICovCj4gLWJvb2wgaTkxNV9ncHVfcmFpc2Uodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gLQo+IC0JaTkxNSA9IG1jaGRldl9nZXQoKTsKPiAtCWlm ICghaTkxNSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2 X2xvY2spOwo+IC0JaWYgKGk5MTUtPmlwcy5tYXhfZGVsYXkgPiBpOTE1LT5pcHMuZm1heCkKPiAt CQlpOTE1LT5pcHMubWF4X2RlbGF5LS07Cj4gLQlzcGluX3VubG9ja19pcnEoJm1jaGRldl9sb2Nr KTsKPiAtCj4gLQlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKPiAtCXJldHVybiB0cnVlOwo+IC19 Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfZ3B1X3JhaXNlKTsKPiAtCj4gLS8qKgo+IC0gKiBp OTE1X2dwdV9sb3dlciAtIGxvd2VyIEdQVSBmcmVxdWVuY3kgbGltaXQKPiAtICoKPiAtICogSVBT IGluZGljYXRlcyB3ZSdyZSBjbG9zZSB0byBhIHRoZXJtYWwgbGltaXQsIHNvIHRocm90dGxlIGJh Y2sgdGhlIEdQVQo+IC0gKiBmcmVxdWVuY3kgbWF4aW11bS4KPiAtICovCj4gLWJvb2wgaTkxNV9n cHVfbG93ZXIodm9pZCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4g LQo+IC0JaTkxNSA9IG1jaGRldl9nZXQoKTsKPiAtCWlmICghaTkxNSkKPiAtCQlyZXR1cm4gZmFs c2U7Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0JaWYgKGk5MTUtPmlw cy5tYXhfZGVsYXkgPCBpOTE1LT5pcHMubWluX2RlbGF5KQo+IC0JCWk5MTUtPmlwcy5tYXhfZGVs YXkrKzsKPiAtCXNwaW5fdW5sb2NrX2lycSgmbWNoZGV2X2xvY2spOwo+IC0KPiAtCWRybV9kZXZf cHV0KCZpOTE1LT5kcm0pOwo+IC0JcmV0dXJuIHRydWU7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTF9H UEwoaTkxNV9ncHVfbG93ZXIpOwo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfZ3B1X2J1c3kgLSBpbmRp Y2F0ZSBHUFUgYnVzaW5lc3MgdG8gSVBTCj4gLSAqCj4gLSAqIFRlbGwgdGhlIElQUyBkcml2ZXIg d2hldGhlciBvciBub3QgdGhlIEdQVSBpcyBidXN5Lgo+IC0gKi8KPiAtYm9vbCBpOTE1X2dwdV9i dXN5KHZvaWQpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1Owo+IC0JYm9v bCByZXQ7Cj4gLQo+IC0JaTkxNSA9IG1jaGRldl9nZXQoKTsKPiAtCWlmICghaTkxNSkKPiAtCQly ZXR1cm4gZmFsc2U7Cj4gLQo+IC0JcmV0ID0gaTkxNS0+Z3QuYXdha2U7Cj4gLQo+IC0JZHJtX2Rl dl9wdXQoJmk5MTUtPmRybSk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLUVYUE9SVF9TWU1CT0xf R1BMKGk5MTVfZ3B1X2J1c3kpOwo+IC0KPiAtLyoqCj4gLSAqIGk5MTVfZ3B1X3R1cmJvX2Rpc2Fi bGUgLSBkaXNhYmxlIGdyYXBoaWNzIHR1cmJvCj4gLSAqCj4gLSAqIERpc2FibGUgZ3JhcGhpY3Mg dHVyYm8gYnkgcmVzZXR0aW5nIHRoZSBtYXggZnJlcXVlbmN5IGFuZCBzZXR0aW5nIHRoZQo+IC0g KiBjdXJyZW50IGZyZXF1ZW5jeSB0byB0aGUgZGVmYXVsdC4KPiAtICovCj4gLWJvb2wgaTkxNV9n cHVfdHVyYm9fZGlzYWJsZSh2b2lkKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNTsKPiAtCWJvb2wgcmV0Owo+IC0KPiAtCWk5MTUgPSBtY2hkZXZfZ2V0KCk7Cj4gLQlpZiAo IWk5MTUpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCXNwaW5fbG9ja19pcnEoJm1jaGRldl9s b2NrKTsKPiAtCWk5MTUtPmlwcy5tYXhfZGVsYXkgPSBpOTE1LT5pcHMuZnN0YXJ0Owo+IC0JcmV0 ID0gaXJvbmxha2Vfc2V0X2RycHMoaTkxNSwgaTkxNS0+aXBzLmZzdGFydCk7Cj4gLQlzcGluX3Vu bG9ja19pcnEoJm1jaGRldl9sb2NrKTsKPiAtCj4gLQlkcm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsK PiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoaTkxNV9ncHVfdHVyYm9f ZGlzYWJsZSk7Cj4gLQo+IC0vKioKPiAtICogVGVsbHMgdGhlIGludGVsX2lwcyBkcml2ZXIgdGhh dCB0aGUgaTkxNSBkcml2ZXIgaXMgbm93IGxvYWRlZCwgaWYKPiAtICogSVBTIGdvdCBsb2FkZWQg Zmlyc3QuCj4gLSAqCj4gLSAqIFRoaXMgYXdrd2FyZCBkYW5jZSBpcyBzbyB0aGF0IG5laXRoZXIg bW9kdWxlIGhhcyB0byBkZXBlbmQgb24gdGhlCj4gLSAqIG90aGVyIGluIG9yZGVyIGZvciBJUFMg dG8gZG8gdGhlIGFwcHJvcHJpYXRlIGNvbW11bmljYXRpb24gb2YKPiAtICogR1BVIHR1cmJvIGxp bWl0cyB0byBpOTE1Lgo+IC0gKi8KPiAtc3RhdGljIHZvaWQKPiAtaXBzX3BpbmdfZm9yX2k5MTVf bG9hZCh2b2lkKQo+IC17Cj4gLQl2b2lkICgqbGluaykodm9pZCk7Cj4gLQo+IC0JbGluayA9IHN5 bWJvbF9nZXQoaXBzX2xpbmtfdG9faTkxNV9kcml2ZXIpOwo+IC0JaWYgKGxpbmspIHsKPiAtCQls aW5rKCk7Cj4gLQkJc3ltYm9sX3B1dChpcHNfbGlua190b19pOTE1X2RyaXZlcik7Cj4gLQl9Cj4g LX0KPiAtCj4gLXZvaWQgaW50ZWxfZ3B1X2lwc19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiAtewo+IC0JLyogV2Ugb25seSByZWdpc3RlciB0aGUgaTkxNSBpcHMgcGFy dCB3aXRoIGludGVsLWlwcyBvbmNlIGV2ZXJ5dGhpbmcgaXMKPiAtCSAqIHNldCB1cCwgdG8gYXZv aWQgaW50ZWwtaXBzIHNuZWFraW5nIGluIGFuZCByZWFkaW5nIGJvZ3VzIHZhbHVlcy4gKi8KPiAt CXJjdV9hc3NpZ25fcG9pbnRlcihpOTE1X21jaF9kZXYsIGRldl9wcml2KTsKPiAtCj4gLQlpcHNf cGluZ19mb3JfaTkxNV9sb2FkKCk7Cj4gLX0KPiAtCj4gLXZvaWQgaW50ZWxfZ3B1X2lwc190ZWFy ZG93bih2b2lkKQo+IC17Cj4gLQlyY3VfYXNzaWduX3BvaW50ZXIoaTkxNV9tY2hfZGV2LCBOVUxM KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaW50ZWxfaW5pdF9lbW9uKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdTMyIGxjZnVzZTsKPiAtCXU4IHB4d1sxNl07 Cj4gLQlpbnQgaTsKPiAtCj4gLQkvKiBEaXNhYmxlIHRvIHByb2dyYW0gKi8KPiAtCUk5MTVfV1JJ VEUoRUNSLCAwKTsKPiAtCVBPU1RJTkdfUkVBRChFQ1IpOwo+IC0KPiAtCS8qIFByb2dyYW0gZW5l cmd5IHdlaWdodHMgZm9yIHZhcmlvdXMgZXZlbnRzICovCj4gLQlJOTE1X1dSSVRFKFNERVcsIDB4 MTUwNDBkMDApOwo+IC0JSTkxNV9XUklURShDU0lFVzAsIDB4MDA3ZjAwMDApOwo+IC0JSTkxNV9X UklURShDU0lFVzEsIDB4MWUyMjAwMDQpOwo+IC0JSTkxNV9XUklURShDU0lFVzIsIDB4MDQwMDAw MDQpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCj4gLQkJSTkxNV9XUklURShQRVco aSksIDApOwo+IC0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKPiAtCQlJOTE1X1dSSVRFKERFVyhp KSwgMCk7Cj4gLQo+IC0JLyogUHJvZ3JhbSBQLXN0YXRlIHdlaWdodHMgdG8gYWNjb3VudCBmb3Ig ZnJlcXVlbmN5IHBvd2VyIGFkanVzdG1lbnQgKi8KPiAtCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsr KSB7Cj4gLQkJdTMyIHB4dmlkZnJlcSA9IEk5MTVfUkVBRChQWFZGUkVRKGkpKTsKPiAtCQl1bnNp Z25lZCBsb25nIGZyZXEgPSBpbnRlbF9weGZyZXEocHh2aWRmcmVxKTsKPiAtCQl1bnNpZ25lZCBs b25nIHZpZCA9IChweHZpZGZyZXEgJiBQWFZGUkVRX1BYX01BU0spID4+Cj4gLQkJCVBYVkZSRVFf UFhfU0hJRlQ7Cj4gLQkJdW5zaWduZWQgbG9uZyB2YWw7Cj4gLQo+IC0JCXZhbCA9IHZpZCAqIHZp ZDsKPiAtCQl2YWwgKj0gKGZyZXEgLyAxMDAwKTsKPiAtCQl2YWwgKj0gMjU1Owo+IC0JCXZhbCAv PSAoMTI3KjEyNyo5MDApOwo+IC0JCWlmICh2YWwgPiAweGZmKQo+IC0JCQlEUk1fRVJST1IoImJh ZCBweHZhbDogJWxkXG4iLCB2YWwpOwo+IC0JCXB4d1tpXSA9IHZhbDsKPiAtCX0KPiAtCS8qIFJl bmRlciBzdGFuZGJ5IHN0YXRlcyBnZXQgMCB3ZWlnaHQgKi8KPiAtCXB4d1sxNF0gPSAwOwo+IC0J cHh3WzE1XSA9IDA7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+IC0JCXUzMiB2 YWwgPSAocHh3W2kqNF0gPDwgMjQpIHwgKHB4d1soaSo0KSsxXSA8PCAxNikgfAo+IC0JCQkocHh3 WyhpKjQpKzJdIDw8IDgpIHwgKHB4d1soaSo0KSszXSk7Cj4gLQkJSTkxNV9XUklURShQWFcoaSks IHZhbCk7Cj4gLQl9Cj4gLQo+IC0JLyogQWRqdXN0IG1hZ2ljIHJlZ3MgdG8gbWFnaWMgdmFsdWVz IChtb3JlIGV4cGVyaW1lbnRhbCByZXN1bHRzKSAqLwo+IC0JSTkxNV9XUklURShPR1cwLCAwKTsK PiAtCUk5MTVfV1JJVEUoT0dXMSwgMCk7Cj4gLQlJOTE1X1dSSVRFKEVHMCwgMHgwMDAwN2YwMCk7 Cj4gLQlJOTE1X1dSSVRFKEVHMSwgMHgwMDAwMDAwZSk7Cj4gLQlJOTE1X1dSSVRFKEVHMiwgMHgw MDBlMDAwMCk7Cj4gLQlJOTE1X1dSSVRFKEVHMywgMHg2ODAwMDMwMCk7Cj4gLQlJOTE1X1dSSVRF KEVHNCwgMHg0MjAwMDAwMCk7Cj4gLQlJOTE1X1dSSVRFKEVHNSwgMHgwMDE0MDAzMSk7Cj4gLQlJ OTE1X1dSSVRFKEVHNiwgMCk7Cj4gLQlJOTE1X1dSSVRFKEVHNywgMCk7Cj4gLQo+IC0JZm9yIChp ID0gMDsgaSA8IDg7IGkrKykKPiAtCQlJOTE1X1dSSVRFKFBYV0woaSksIDApOwo+IC0KPiAtCS8q IEVuYWJsZSBQTU9OICsgc2VsZWN0IGV2ZW50cyAqLwo+IC0JSTkxNV9XUklURShFQ1IsIDB4ODAw MDAwMTkpOwo+IC0KPiAtCWxjZnVzZSA9IEk5MTVfUkVBRChMQ0ZVU0UwMik7Cj4gLQo+IC0JZGV2 X3ByaXYtPmlwcy5jb3JyID0gKGxjZnVzZSAmIExDRlVTRV9ISVZfTUFTSyk7Cj4gLX0KPiAtCj4g LXZvaWQgaW50ZWxfaW5pdF9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3Bt LnJwczsKPiAtCj4gLQkvKiBQb3dlcnNhdmluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0IHdo ZW4gaW5zaWRlIGEgVk0gKi8KPiAtCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCj4g LQkJbWt3cml0ZV9kZXZpY2VfaW5mbyhkZXZfcHJpdiktPmhhc19ycHMgPSBmYWxzZTsKPiAtCj4g LQkvKiBJbml0aWFsaXplIFJQUyBsaW1pdHMgKGZvciB1c2Vyc3BhY2UpICovCj4gLQlpZiAoSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpCj4gLQkJY2hlcnJ5dmlld19pbml0X2d0X3Bvd2Vyc2F2ZShk ZXZfcHJpdik7Cj4gLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKPiAtCQl2YWxs ZXl2aWV3X2luaXRfZ3RfcG93ZXJzYXZlKGRldl9wcml2KTsKPiAtCWVsc2UgaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gNikKPiAtCQlnZW42X2luaXRfcnBzX2ZyZXF1ZW5jaWVzKGRldl9wcml2 KTsKPiAtCj4gLQkvKiBEZXJpdmUgaW5pdGlhbCB1c2VyIHByZWZlcmVuY2VzL2xpbWl0cyBmcm9t IHRoZSBoYXJkd2FyZSBsaW1pdHMgKi8KPiAtCXJwcy0+bWF4X2ZyZXFfc29mdGxpbWl0ID0gcnBz LT5tYXhfZnJlcTsKPiAtCXJwcy0+bWluX2ZyZXFfc29mdGxpbWl0ID0gcnBzLT5taW5fZnJlcTsK PiAtCj4gLQkvKiBBZnRlciBzZXR0aW5nIG1heC1zb2Z0bGltaXQsIGZpbmQgdGhlIG92ZXJjbG9j ayBtYXggZnJlcSAqLwo+IC0JaWYgKElTX0dFTihkZXZfcHJpdiwgNikgfHwKPiAtCSAgICBJU19J VllCUklER0UoZGV2X3ByaXYpIHx8IElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7Cj4gLQkJdTMyIHBh cmFtcyA9IDA7Cj4gLQo+IC0JCXNhbmR5YnJpZGdlX3Bjb2RlX3JlYWQoZGV2X3ByaXYsIEdFTjZf UkVBRF9PQ19QQVJBTVMsCj4gLQkJCQkgICAgICAgJnBhcmFtcywgTlVMTCk7Cj4gLQkJaWYgKHBh cmFtcyAmIEJJVCgzMSkpIHsgLyogT0Mgc3VwcG9ydGVkICovCj4gLQkJCURSTV9ERUJVR19EUklW RVIoIk92ZXJjbG9ja2luZyBzdXBwb3J0ZWQsIG1heDogJWRNSHosIG92ZXJjbG9jazogJWRNSHpc biIsCj4gLQkJCQkJIChycHMtPm1heF9mcmVxICYgMHhmZikgKiA1MCwKPiAtCQkJCQkgKHBhcmFt cyAmIDB4ZmYpICogNTApOwo+IC0JCQlycHMtPm1heF9mcmVxID0gcGFyYW1zICYgMHhmZjsKPiAt CQl9Cj4gLQl9Cj4gLQo+IC0JLyogRmluYWxseSBhbGxvdyB1cyB0byBib29zdCB0byBtYXggYnkg ZGVmYXVsdCAqLwo+IC0JcnBzLT5ib29zdF9mcmVxID0gcnBzLT5tYXhfZnJlcTsKPiAtCXJwcy0+ aWRsZV9mcmVxID0gcnBzLT5taW5fZnJlcTsKPiAtCXJwcy0+Y3VyX2ZyZXEgPSBycHMtPmlkbGVf ZnJlcTsKPiAtfQo+IC0KPiAtdm9pZCBpbnRlbF9zYW5pdGl6ZV9ndF9wb3dlcnNhdmUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlkZXZfcHJpdi0+Z3RfcG0ucnBz LmVuYWJsZWQgPSB0cnVlOyAvKiBmb3JjZSBSUFMgZGlzYWJsaW5nICovCj4gLQlpbnRlbF9kaXNh YmxlX2d0X3Bvd2Vyc2F2ZShkZXZfcHJpdik7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gMTEpCj4gLQkJZ2VuMTFfcmVzZXRfcnBzX2ludGVycnVwdHMoZGV2X3ByaXYpOwo+IC0J ZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA2KQo+IC0JCWdlbjZfcmVzZXRfcnBzX2lu dGVycnVwdHMoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbnRlbF9kaXNhYmxl X3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Cj4gLQo+IC0JaWYgKCFkZXZf cHJpdi0+Z3RfcG0ucnBzLmVuYWJsZWQpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDkpCj4gLQkJZ2VuOV9kaXNhYmxlX3JwcyhkZXZfcHJpdik7Cj4gLQll bHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAtCQljaGVycnl2aWV3X2Rpc2FibGVf cnBzKGRldl9wcml2KTsKPiAtCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQo+IC0J CXZhbGxleXZpZXdfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwo+IC0JZWxzZSBpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA2KQo+IC0JCWdlbjZfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwo+IC0JZWxz ZSBpZiAoSVNfSVJPTkxBS0VfTShkZXZfcHJpdikpCj4gLQkJaXJvbmxha2VfZGlzYWJsZV9kcnBz KGRldl9wcml2KTsKPiAtCj4gLQlkZXZfcHJpdi0+Z3RfcG0ucnBzLmVuYWJsZWQgPSBmYWxzZTsK PiAtfQo+IC0KPiAtdm9pZCBpbnRlbF9kaXNhYmxlX2d0X3Bvd2Vyc2F2ZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5ndF9w bS5ycHMubG9jayk7Cj4gLQo+IC0JaW50ZWxfZGlzYWJsZV9ycHMoZGV2X3ByaXYpOwo+IC0JaWYg KEhBU19MTEMoZGV2X3ByaXYpKQo+IC0JCWludGVsX2xsY19kaXNhYmxlKCZkZXZfcHJpdi0+Z3Qu bGxjKTsKPiAtCj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9ycHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3By aXYtPmd0X3BtLnJwczsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZycHMtPmxvY2spOwo+ IC0KPiAtCWlmIChycHMtPmVuYWJsZWQpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChJU19DSEVS UllWSUVXKGRldl9wcml2KSkgewo+IC0JCWNoZXJyeXZpZXdfZW5hYmxlX3JwcyhkZXZfcHJpdik7 Cj4gLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7Cj4gLQkJdmFsbGV5dmll d19lbmFibGVfcnBzKGRldl9wcml2KTsKPiAtCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA5KSB7Cj4gLQkJZ2VuOV9lbmFibGVfcnBzKGRldl9wcml2KTsKPiAtCX0gZWxzZSBpZiAo SVNfQlJPQURXRUxMKGRldl9wcml2KSkgewo+IC0JCWdlbjhfZW5hYmxlX3JwcyhkZXZfcHJpdik7 Cj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikgewo+IC0JCWdlbjZfZW5h YmxlX3JwcyhkZXZfcHJpdik7Cj4gLQl9IGVsc2UgaWYgKElTX0lST05MQUtFX00oZGV2X3ByaXYp KSB7Cj4gLQkJaXJvbmxha2VfZW5hYmxlX2RycHMoZGV2X3ByaXYpOwo+IC0JCWludGVsX2luaXRf ZW1vbihkZXZfcHJpdik7Cj4gLQl9Cj4gLQo+IC0JV0FSTl9PTihycHMtPm1heF9mcmVxIDwgcnBz LT5taW5fZnJlcSk7Cj4gLQlXQVJOX09OKHJwcy0+aWRsZV9mcmVxID4gcnBzLT5tYXhfZnJlcSk7 Cj4gLQo+IC0JV0FSTl9PTihycHMtPmVmZmljaWVudF9mcmVxIDwgcnBzLT5taW5fZnJlcSk7Cj4g LQlXQVJOX09OKHJwcy0+ZWZmaWNpZW50X2ZyZXEgPiBycHMtPm1heF9mcmVxKTsKPiAtCj4gLQly cHMtPmVuYWJsZWQgPSB0cnVlOwo+IC19Cj4gLQo+IC12b2lkIGludGVsX2VuYWJsZV9ndF9wb3dl cnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQkvKiBQb3dl cnNhdmluZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBob3N0IHdoZW4gaW5zaWRlIGEgVk0gKi8KPiAt CWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdikpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCW11 dGV4X2xvY2soJmRldl9wcml2LT5ndF9wbS5ycHMubG9jayk7Cj4gLQo+IC0JaWYgKEhBU19SUFMo ZGV2X3ByaXYpKQo+IC0JCWludGVsX2VuYWJsZV9ycHMoZGV2X3ByaXYpOwo+IC0KPiAtCWludGVs X2xsY19lbmFibGUoJmRldl9wcml2LT5ndC5sbGMpOwo+IC0KPiAtCW11dGV4X3VubG9jaygmZGV2 X3ByaXYtPmd0X3BtLnJwcy5sb2NrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaWJ4X2luaXRf Y2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0J LyoKPiAtCSAqIE9uIEliZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2Fi bGUgY2xvY2sKPiAtCSAqIGdhdGluZyBmb3IgdGhlIHBhbmVsIHBvd2VyIHNlcXVlbmNlciBvciBp dCB3aWxsIGZhaWwgdG8KPiAtCSAqIHN0YXJ0IHVwIHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4K PiAtCSAqLwo+IC0JSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRf Q0xPQ0tfR0FURV9ESVNBQkxFKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZzR4X2Rpc2FibGVf dHJpY2tsZV9mZWVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0J ZW51bSBwaXBlIHBpcGU7Cj4gLQo+IC0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewo+ IC0JCUk5MTVfV1JJVEUoRFNQQ05UUihwaXBlKSwKPiAtCQkJICAgSTkxNV9SRUFEKERTUENOVFIo cGlwZSkpIHwKPiAtCQkJICAgRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFKTsKPiAtCj4g LQkJSTkxNV9XUklURShEU1BTVVJGKHBpcGUpLCBJOTE1X1JFQUQoRFNQU1VSRihwaXBlKSkpOwo+ IC0JCVBPU1RJTkdfUkVBRChEU1BTVVJGKHBpcGUpKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgaWxrX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiAtewo+IC0JdTMyIGRzcGNsa19nYXRlID0gSUxLX1ZSSFVOSVRfQ0xPQ0tfR0FURV9E SVNBQkxFOwo+IC0KPiAtCS8qCj4gLQkgKiBSZXF1aXJlZCBmb3IgRkJDCj4gLQkgKiBXYUZiY0Rp c2FibGVEcGZjQ2xvY2tHYXRpbmc6aWxrCj4gLQkgKi8KPiAtCWRzcGNsa19nYXRlIHw9IElMS19E UEZDUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKPiAtCQkgICBJTEtfRFBGQ1VOSVRfQ0xPQ0tf R0FURV9ESVNBQkxFIHwKPiAtCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tfR0FURV9FTkFCTEU7Cj4g LQo+IC0JSTkxNV9XUklURShQQ0hfM0RDR0RJUzAsCj4gLQkJICAgTUFSSVVOSVRfQ0xPQ0tfR0FU RV9ESVNBQkxFIHwKPiAtCQkgICBTVlNNVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+IC0JSTkx NV9XUklURShQQ0hfM0RDR0RJUzEsCj4gLQkJICAgVkZNVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUp Owo+IC0KPiAtCS8qCj4gLQkgKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgdGhlIGZvbGxvd2luZyBi aXRzIHNob3VsZCBiZSBzZXQgaW4KPiAtCSAqIG9yZGVyIHRvIGVuYWJsZSBtZW1vcnkgc2VsZi1y ZWZyZXNoCj4gLQkgKiBUaGUgYml0IDIyLzIxIG9mIDB4NDIwMDQKPiAtCSAqIFRoZSBiaXQgNSBv ZiAweDQyMDIwCj4gLQkgKiBUaGUgYml0IDE1IG9mIDB4NDUwMDAKPiAtCSAqLwo+IC0JSTkxNV9X UklURShJTEtfRElTUExBWV9DSElDS0VOMiwKPiAtCQkgICAoSTkxNV9SRUFEKElMS19ESVNQTEFZ X0NISUNLRU4yKSB8Cj4gLQkJICAgIElMS19EUEFSQl9HQVRFIHwgSUxLX1ZTRFBGRF9GVUxMKSk7 Cj4gLQlkc3BjbGtfZ2F0ZSB8PSBJTEtfRFBBUkJVTklUX0NMT0NLX0dBVEVfRU5BQkxFOwo+IC0J STkxNV9XUklURShESVNQX0FSQl9DVEwsCj4gLQkJICAgKEk5MTVfUkVBRChESVNQX0FSQl9DVEwp IHwKPiAtCQkgICAgRElTUF9GQkNfV01fRElTKSk7Cj4gLQo+IC0JLyoKPiAtCSAqIEJhc2VkIG9u IHRoZSBkb2N1bWVudCBmcm9tIGhhcmR3YXJlIGd1eXMgdGhlIGZvbGxvd2luZyBiaXRzCj4gLQkg KiBzaG91bGQgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBlbmFibGUgRkJDLgo+ IC0JICogVGhlIGJpdCAyMiBvZiAweDQyMDAwCj4gLQkgKiBUaGUgYml0IDIyIG9mIDB4NDIwMDQK PiAtCSAqIFRoZSBiaXQgNyw4LDkgb2YgMHg0MjAyMC4KPiAtCSAqLwo+IC0JaWYgKElTX0lST05M QUtFX00oZGV2X3ByaXYpKSB7Cj4gLQkJLyogV2FGYmNBc3luY2hGbGlwRGlzYWJsZUZiY1F1ZXVl OmlsayAqLwo+IC0JCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEsCj4gLQkJCSAgIEk5 MTVfUkVBRChJTEtfRElTUExBWV9DSElDS0VOMSkgfAo+IC0JCQkgICBJTEtfRkJDUV9ESVMpOwo+ IC0JCUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCj4gLQkJCSAgIEk5MTVfUkVBRChJ TEtfRElTUExBWV9DSElDS0VOMikgfAo+IC0JCQkgICBJTEtfRFBBUkJfR0FURSk7Cj4gLQl9Cj4g LQo+IC0JSTkxNV9XUklURShJTEtfRFNQQ0xLX0dBVEVfRCwgZHNwY2xrX2dhdGUpOwo+IC0KPiAt CUk5MTVfV1JJVEUoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIsCj4gLQkJICAgSTkxNV9SRUFEKElMS19E SVNQTEFZX0NISUNLRU4yKSB8Cj4gLQkJICAgSUxLX0VMUElOXzQwOV9TRUxFQ1QpOwo+IC0JSTkx NV9XUklURShfM0RfQ0hJQ0tFTjIsCj4gLQkJICAgXzNEX0NISUNLRU4yX1dNX1JFQURfUElQRUxJ TkVEIDw8IDE2IHwKPiAtCQkgICBfM0RfQ0hJQ0tFTjJfV01fUkVBRF9QSVBFTElORUQpOwo+IC0K PiAtCS8qIFdhRGlzYWJsZVJlbmRlckNhY2hlUGlwZWxpbmVkRmx1c2g6aWxrICovCj4gLQlJOTE1 X1dSSVRFKENBQ0hFX01PREVfMCwKPiAtCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoQ00wX1BJUEVM SU5FRF9SRU5ERVJfRkxVU0hfRElTQUJMRSkpOwo+IC0KPiAtCS8qIFdhRGlzYWJsZV9SZW5kZXJD YWNoZV9PcGVyYXRpb25hbEZsdXNoOmlsayAqLwo+IC0JSTkxNV9XUklURShDQUNIRV9NT0RFXzAs IF9NQVNLRURfQklUX0RJU0FCTEUoUkNfT1BfRkxVU0hfRU5BQkxFKSk7Cj4gLQo+IC0JZzR4X2Rp c2FibGVfdHJpY2tsZV9mZWVkKGRldl9wcml2KTsKPiAtCj4gLQlpYnhfaW5pdF9jbG9ja19nYXRp bmcoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBjcHRfaW5pdF9jbG9ja19nYXRp bmcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQllbnVtIHBpcGUg cGlwZTsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0JLyoKPiAtCSAqIE9uIEliZXggUGVhayBhbmQgQ291 Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sKPiAtCSAqIGdhdGluZyBmb3IgdGhl IHBhbmVsIHBvd2VyIHNlcXVlbmNlciBvciBpdCB3aWxsIGZhaWwgdG8KPiAtCSAqIHN0YXJ0IHVw IHdoZW4gbm8gcG9ydHMgYXJlIGFjdGl2ZS4KPiAtCSAqLwo+IC0JSTkxNV9XUklURShTT1VUSF9E U1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFIHwKPiAtCQkgICBQ Q0hfRFBMVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAo+IC0JCSAgIFBDSF9DUFVOSVRfQ0xPQ0tf R0FURV9ESVNBQkxFKTsKPiAtCUk5MTVfV1JJVEUoU09VVEhfQ0hJQ0tFTjIsIEk5MTVfUkVBRChT T1VUSF9DSElDS0VOMikgfAo+IC0JCSAgIERQTFNfRURQX1BQU19GSVhfRElTKTsKPiAtCS8qIFRo ZSBiZWxvdyBmaXhlcyB0aGUgd2VpcmQgZGlzcGxheSBjb3JydXB0aW9uLCBhIGZldyBwaXhlbHMg c2hpZnRlZAo+IC0JICogZG93bndhcmQsIG9uIChvbmx5KSBMVkRTIG9mIHNvbWUgSFAgbGFwdG9w cyB3aXRoIElWWS4KPiAtCSAqLwo+IC0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewo+ IC0JCXZhbCA9IEk5MTVfUkVBRChUUkFOU19DSElDS0VOMihwaXBlKSk7Cj4gLQkJdmFsIHw9IFRS QU5TX0NISUNLRU4yX1RJTUlOR19PVkVSUklERTsKPiAtCQl2YWwgJj0gflRSQU5TX0NISUNLRU4y X0ZESV9QT0xBUklUWV9SRVZFUlNFRDsKPiAtCQlpZiAoZGV2X3ByaXYtPnZidC5mZGlfcnhfcG9s YXJpdHlfaW52ZXJ0ZWQpCj4gLQkJCXZhbCB8PSBUUkFOU19DSElDS0VOMl9GRElfUE9MQVJJVFlf UkVWRVJTRUQ7Cj4gLQkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9GUkFNRV9TVEFSVF9ERUxBWV9N QVNLOwo+IC0JCXZhbCAmPSB+VFJBTlNfQ0hJQ0tFTjJfRElTQUJMRV9ERUVQX0NPTE9SX0NPVU5U RVI7Cj4gLQkJdmFsICY9IH5UUkFOU19DSElDS0VOMl9ESVNBQkxFX0RFRVBfQ09MT1JfTU9ERVNX SVRDSDsKPiAtCQlJOTE1X1dSSVRFKFRSQU5TX0NISUNLRU4yKHBpcGUpLCB2YWwpOwo+IC0JfQo+ IC0JLyogV0FEUDBDbG9ja0dhdGluZ0Rpc2FibGUgKi8KPiAtCWZvcl9lYWNoX3BpcGUoZGV2X3By aXYsIHBpcGUpIHsKPiAtCQlJOTE1X1dSSVRFKFRSQU5TX0NISUNLRU4xKHBpcGUpLAo+IC0JCQkg ICBUUkFOU19DSElDS0VOMV9EUDBVTklUX0dDX0RJU0FCTEUpOwo+IC0JfQo+IC19Cj4gLQo+IC1z dGF0aWMgdm9pZCBnZW42X2NoZWNrX21jaF9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiB0bXA7Cj4gLQo+IC0JdG1wID0gSTkxNV9SRUFEKE1DSF9T U0tQRCk7Cj4gLQlpZiAoKHRtcCAmIE1DSF9TU0tQRF9XTTBfTUFTSykgIT0gTUNIX1NTS1BEX1dN MF9WQUwpCj4gLQkJRFJNX0RFQlVHX0tNUygiV3JvbmcgTUNIX1NTS1BEIHZhbHVlOiAweCUwOHgg VGhpcyBjYW4gY2F1c2UgdW5kZXJydW5zLlxuIiwKPiAtCQkJICAgICAgdG1wKTsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgZ2VuNl9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXUzMiBkc3BjbGtfZ2F0ZSA9IElMS19WUkhVTklUX0NM T0NLX0dBVEVfRElTQUJMRTsKPiAtCj4gLQlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELCBk c3BjbGtfZ2F0ZSk7Cj4gLQo+IC0JSTkxNV9XUklURShJTEtfRElTUExBWV9DSElDS0VOMiwKPiAt CQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjIpIHwKPiAtCQkgICBJTEtfRUxQSU5f NDA5X1NFTEVDVCk7Cj4gLQo+IC0JLyogV2FEaXNhYmxlSGlaUGxhbmVzV2hlbk1TQUFFbmFibGVk OnNuYiAqLwo+IC0JSTkxNV9XUklURShfM0RfQ0hJQ0tFTiwKPiAtCQkgICBfTUFTS0VEX0JJVF9F TkFCTEUoXzNEX0NISUNLRU5fSElaX1BMQU5FX0RJU0FCTEVfTVNBQV80WF9TTkIpKTsKPiAtCj4g LQkvKiBXYURpc2FibGVfUmVuZGVyQ2FjaGVfT3BlcmF0aW9uYWxGbHVzaDpzbmIgKi8KPiAtCUk5 MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLCBfTUFTS0VEX0JJVF9ESVNBQkxFKFJDX09QX0ZMVVNIX0VO QUJMRSkpOwo+IC0KPiAtCS8qCj4gLQkgKiBCU3BlYyByZWNvb21lbmRzIDh4NCB3aGVuIE1TQUEg aXMgdXNlZCwKPiAtCSAqIGhvd2V2ZXIgaW4gcHJhY3RpY2UgMTZ4NCBzZWVtcyBmYXN0ZXN0Lgo+ IC0JICoKPiAtCSAqIE5vdGUgdGhhdCBQUy9XTSB0aHJlYWQgY291bnRzIGRlcGVuZCBvbiB0aGUg V0laIGhhc2hpbmcKPiAtCSAqIGRpc2FibGUgYml0LCB3aGljaCB3ZSBkb24ndCB0b3VjaCBoZXJl LCBidXQgaXQncyBnb29kCj4gLQkgKiB0byBrZWVwIGluIG1pbmQgKHNlZSAzRFNUQVRFX1BTIGFu ZCAzRFNUQVRFX1dNKS4KPiAtCSAqLwo+IC0JSTkxNV9XUklURShHRU42X0dUX01PREUsCj4gLQkJ ICAgX01BU0tFRF9GSUVMRChHRU42X1dJWl9IQVNISU5HX01BU0ssIEdFTjZfV0laX0hBU0hJTkdf MTZ4NCkpOwo+IC0KPiAtCUk5MTVfV1JJVEUoQ0FDSEVfTU9ERV8wLAo+IC0JCSAgIF9NQVNLRURf QklUX0RJU0FCTEUoQ00wX1NUQ19FVklDVF9ESVNBQkxFX0xSQV9TTkIpKTsKPiAtCj4gLQlJOTE1 X1dSSVRFKEdFTjZfVUNHQ1RMMSwKPiAtCQkgICBJOTE1X1JFQUQoR0VONl9VQ0dDVEwxKSB8Cj4g LQkJICAgR0VONl9CTEJVTklUX0NMT0NLX0dBVEVfRElTQUJMRSB8Cj4gLQkJICAgR0VONl9DU1VO SVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiAtCj4gLQkvKiBBY2NvcmRpbmcgdG8gdGhlIEJTcGVj IHZvbDFnLCBiaXQgMTIgKFJDUEJVTklUKSBjbG9jawo+IC0JICogZ2F0aW5nIGRpc2FibGUgbXVz dCBiZSBzZXQuICBGYWlsdXJlIHRvIHNldCBpdCByZXN1bHRzIGluCj4gLQkgKiBmbGlja2VyaW5n IHBpeGVscyBkdWUgdG8gWiB3cml0ZSBvcmRlcmluZyBmYWlsdXJlcyBhZnRlcgo+IC0JICogc29t ZSBhbW91bnQgb2YgcnVudGltZSBpbiB0aGUgTWVzYSAiZmlyZSIgZGVtbywgYW5kIFVuaWdpbmUK PiAtCSAqIFNhbmN0dWFyeSBhbmQgVHJvcGljcywgYW5kIGFwcGFyZW50bHkgYW55dGhpbmcgZWxz ZSB3aXRoCj4gLQkgKiBhbHBoYSB0ZXN0IG9yIHBpeGVsIGRpc2NhcmQuCj4gLQkgKgo+IC0JICog QWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBiaXQgMTEgKFJDQ1VOSVQpIG11c3QgYWxzbyBiZSBzZXQs Cj4gLQkgKiBidXQgd2UgZGlkbid0IGRlYnVnIGFjdHVhbCB0ZXN0Y2FzZXMgdG8gZmluZCBpdCBv dXQuCj4gLQkgKgo+IC0JICogV2FEaXNhYmxlUkNDVW5pdENsb2NrR2F0aW5nOnNuYgo+IC0JICog V2FEaXNhYmxlUkNQQlVuaXRDbG9ja0dhdGluZzpzbmIKPiAtCSAqLwo+IC0JSTkxNV9XUklURShH RU42X1VDR0NUTDIsCj4gLQkJICAgR0VONl9SQ1BCVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAo+ IC0JCSAgIEdFTjZfUkNDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUpOwo+IC0KPiAtCS8qIFdhU3Ry aXBzRmFuc0Rpc2FibGVGYXN0Q2xpcFBlcmZvcm1hbmNlRml4OnNuYiAqLwo+IC0JSTkxNV9XUklU RShfM0RfQ0hJQ0tFTjMsCj4gLQkJICAgX01BU0tFRF9CSVRfRU5BQkxFKF8zRF9DSElDS0VOM19T Rl9ESVNBQkxFX0ZBU1RDTElQX0NVTEwpKTsKPiAtCj4gLQkvKgo+IC0JICogQnNwZWMgc2F5czoK PiAtCSAqICJUaGlzIGJpdCBtdXN0IGJlIHNldCBpZiAzRFNUQVRFX0NMSVAgY2xpcCBtb2RlIGlz IHNldCB0byBub3JtYWwgYW5kCj4gLQkgKiAzRFNUQVRFX1NGIG51bWJlciBvZiBTRiBvdXRwdXQg YXR0cmlidXRlcyBpcyBtb3JlIHRoYW4gMTYuIgo+IC0JICovCj4gLQlJOTE1X1dSSVRFKF8zRF9D SElDS0VOMywKPiAtCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoXzNEX0NISUNLRU4zX1NGX0RJU0FC TEVfUElQRUxJTkVEX0FUVFJfRkVUQ0gpKTsKPiAtCj4gLQkvKgo+IC0JICogQWNjb3JkaW5nIHRv IHRoZSBzcGVjIHRoZSBmb2xsb3dpbmcgYml0cyBzaG91bGQgYmUKPiAtCSAqIHNldCBpbiBvcmRl ciB0byBlbmFibGUgbWVtb3J5IHNlbGYtcmVmcmVzaCBhbmQgZmJjOgo+IC0JICogVGhlIGJpdDIx IGFuZCBiaXQyMiBvZiAweDQyMDAwCj4gLQkgKiBUaGUgYml0MjEgYW5kIGJpdDIyIG9mIDB4NDIw MDQKPiAtCSAqIFRoZSBiaXQ1IGFuZCBiaXQ3IG9mIDB4NDIwMjAKPiAtCSAqIFRoZSBiaXQxNCBv ZiAweDcwMTgwCj4gLQkgKiBUaGUgYml0MTQgb2YgMHg3MTE4MAo+IC0JICoKPiAtCSAqIFdhRmJj QXN5bmNoRmxpcERpc2FibGVGYmNRdWV1ZTpzbmIKPiAtCSAqLwo+IC0JSTkxNV9XUklURShJTEtf RElTUExBWV9DSElDS0VOMSwKPiAtCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlfQ0hJQ0tFTjEp IHwKPiAtCQkgICBJTEtfRkJDUV9ESVMgfCBJTEtfUEFCU1RSRVRDSF9ESVMpOwo+IC0JSTkxNV9X UklURShJTEtfRElTUExBWV9DSElDS0VOMiwKPiAtCQkgICBJOTE1X1JFQUQoSUxLX0RJU1BMQVlf Q0hJQ0tFTjIpIHwKPiAtCQkgICBJTEtfRFBBUkJfR0FURSB8IElMS19WU0RQRkRfRlVMTCk7Cj4g LQlJOTE1X1dSSVRFKElMS19EU1BDTEtfR0FURV9ELAo+IC0JCSAgIEk5MTVfUkVBRChJTEtfRFNQ Q0xLX0dBVEVfRCkgfAo+IC0JCSAgIElMS19EUEFSQlVOSVRfQ0xPQ0tfR0FURV9FTkFCTEUgIHwK PiAtCQkgICBJTEtfRFBGRFVOSVRfQ0xPQ0tfR0FURV9FTkFCTEUpOwo+IC0KPiAtCWc0eF9kaXNh YmxlX3RyaWNrbGVfZmVlZChkZXZfcHJpdik7Cj4gLQo+IC0JY3B0X2luaXRfY2xvY2tfZ2F0aW5n KGRldl9wcml2KTsKPiAtCj4gLQlnZW42X2NoZWNrX21jaF9zZXR1cChkZXZfcHJpdik7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIGdlbjdfc2V0dXBfZml4ZWRfZnVuY19zY2hlZHVsZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgcmVnID0gSTkxNV9SRUFE KEdFTjdfRkZfVEhSRUFEX01PREUpOwo+ICsJdTMyIHJlZyA9IEk5MTVfUkVBRChHRU43X0ZGX1RI UkVBRF9NT0RFKTsKPiAgCj4gIAkvKgo+ICAJICogV2FWU1RocmVhZERpc3BhdGNoT3ZlcnJpZGU6 aXZiLHZsdgo+IEBAIC04OTQyLDkwICs3MzI1LDggQEAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIGlu dCBieXRfZ3B1X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFs KQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsK PiAtCj4gLQkvKgo+IC0JICogTiA9IHZhbCAtIDB4YjcKPiAtCSAqIFNsb3cgPSBGYXN0ID0gR1BM TCByZWYgKiBOCj4gLQkgKi8KPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChycHMtPmdwbGxf cmVmX2ZyZXEgKiAodmFsIC0gMHhiNyksIDEwMDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGJ5 dF9mcmVxX29wY29kZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwp Cj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ycHMgKnJwcyA9ICZkZXZfcHJpdi0+Z3RfcG0ucnBzOwo+ IC0KPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgxMDAwICogdmFsLCBycHMtPmdwbGxfcmVm X2ZyZXEpICsgMHhiNzsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBjaHZfZ3B1X2ZyZXEoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKQo+IC17Cj4gLQlzdHJ1Y3QgaW50 ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCj4gLQkvKgo+IC0JICogTiA9 IHZhbCAvIDIKPiAtCSAqIENVIChzbG93KSA9IENVMnggKGZhc3QpIC8gMiA9IEdQTEwgcmVmICog TiAvIDIKPiAtCSAqLwo+IC0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHJwcy0+Z3BsbF9yZWZf ZnJlcSAqIHZhbCwgMiAqIDIgKiAxMDAwKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBjaHZfZnJl cV9vcGNvZGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKQo+IC17 Cj4gLQlzdHJ1Y3QgaW50ZWxfcnBzICpycHMgPSAmZGV2X3ByaXYtPmd0X3BtLnJwczsKPiAtCj4g LQkvKiBDSFYgbmVlZHMgZXZlbiB2YWx1ZXMgKi8KPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VT VCgyICogMTAwMCAqIHZhbCwgcnBzLT5ncGxsX3JlZl9mcmVxKSAqIDI7Cj4gLX0KPiAtCj4gLWlu dCBpbnRlbF9ncHVfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2 YWwpCj4gLXsKPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4gLQkJcmV0dXJuIERJ Vl9ST1VORF9DTE9TRVNUKHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSLAo+IC0JCQkJCSBH RU45X0ZSRVFfU0NBTEVSKTsKPiAtCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ IC0JCXJldHVybiBjaHZfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7Cj4gLQllbHNlIGlmIChJU19W QUxMRVlWSUVXKGRldl9wcml2KSkKPiAtCQlyZXR1cm4gYnl0X2dwdV9mcmVxKGRldl9wcml2LCB2 YWwpOwo+IC0JZWxzZQo+IC0JCXJldHVybiB2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUjsK PiAtfQo+IC0KPiAtaW50IGludGVsX2ZyZXFfb3Bjb2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgaW50IHZhbCkKPiAtewo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g OSkKPiAtCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsICogR0VOOV9GUkVRX1NDQUxFUiwK PiAtCQkJCQkgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwo+IC0JZWxzZSBpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpCj4gLQkJcmV0dXJuIGNodl9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFs KTsKPiAtCWVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQo+IC0JCXJldHVybiBieXRf ZnJlcV9vcGNvZGUoZGV2X3ByaXYsIHZhbCk7Cj4gLQllbHNlCj4gLQkJcmV0dXJuIERJVl9ST1VO RF9DTE9TRVNUKHZhbCwgR1RfRlJFUVVFTkNZX01VTFRJUExJRVIpOwo+IC19Cj4gLQo+ICB2b2lk IGludGVsX3BtX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+ IC0JbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmd0X3BtLnJwcy5sb2NrKTsKPiAtCW11dGV4X2luaXQo JmRldl9wcml2LT5ndF9wbS5ycHMucG93ZXIubXV0ZXgpOwo+IC0KPiAtCWF0b21pY19zZXQoJmRl dl9wcml2LT5ndF9wbS5ycHMubnVtX3dhaXRlcnMsIDApOwo+IC0KPiAgCWRldl9wcml2LT5ydW50 aW1lX3BtLnN1c3BlbmRlZCA9IGZhbHNlOwo+ICAJYXRvbWljX3NldCgmZGV2X3ByaXYtPnJ1bnRp bWVfcG0ud2FrZXJlZl9jb3VudCwgMCk7Cj4gIH0KPiAtCj4gLXUzMiBpbnRlbF9nZXRfY2FnZihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBycHN0YXQpCj4gLXsKPiAtCXUz MiBjYWdmOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4gLQkJY2FnZiA9 IChycHN0YXQgJiBHRU45X0NBR0ZfTUFTSykgPj4gR0VOOV9DQUdGX1NISUZUOwo+IC0JZWxzZSBp ZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiAtCQlj YWdmID0gKHJwc3RhdCAmIEhTV19DQUdGX01BU0spID4+IEhTV19DQUdGX1NISUZUOwo+IC0JZWxz ZQo+IC0JCWNhZ2YgPSAocnBzdGF0ICYgR0VONl9DQUdGX01BU0spID4+IEdFTjZfQ0FHRl9TSElG VDsKPiAtCj4gLQlyZXR1cm4gIGNhZ2Y7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmgKPiBp bmRleCA5M2QxOTJkMDYxMGEuLmI1NmU2Mjg1ZDFjMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9wbS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cG0uaAo+IEBAIC0yOSwxNSArMjksNiBAQCB2b2lkIGludGVsX3VwZGF0ZV93YXRlcm1hcmtzKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKPiAgdm9pZCBpbnRlbF9pbml0X3BtKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxfaW5pdF9jbG9ja19nYXRpbmdf aG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAgdm9pZCBpbnRlbF9w bV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC12b2lkIGludGVs X2dwdV9pcHNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC12b2lk IGludGVsX2dwdV9pcHNfdGVhcmRvd24odm9pZCk7Cj4gLXZvaWQgaW50ZWxfaW5pdF9ndF9wb3dl cnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBpbnRlbF9z YW5pdGl6ZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsK PiAtdm9pZCBpbnRlbF9lbmFibGVfZ3RfcG93ZXJzYXZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7Cj4gLXZvaWQgaW50ZWxfZGlzYWJsZV9ndF9wb3dlcnNhdmUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiAtdm9pZCBnZW42X3Jwc19idXN5KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXZvaWQgZ2VuNl9ycHNfaWRsZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC12b2lkIGdlbjZfcnBzX2Jvb3N0KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxKTsKPiAgdm9pZCBnNHhfd21fZ2V0X2h3X3N0YXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgdmx2X3dtX2dldF9od19zdGF0ZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICB2b2lkIGlsa193bV9nZXRfaHdf c3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiBAQCAtNjksMTkgKzYw LDYgQEAgaW50IHNrbF9jaGVja19waXBlX21heF9waXhlbF9yYXRlKHN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjLAo+ICB2b2lkIGludGVsX2luaXRfaXBjKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gIHZvaWQgaW50ZWxfZW5hYmxlX2lwYyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICAKPiAtaW50IGludGVsX2dwdV9mcmVxKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHZhbCk7Cj4gLWludCBpbnRlbF9mcmVxX29wY29k ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpOwo+IC0KPiAtdTMy IGludGVsX2dldF9jYWdmKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJw c3RhdDEpOwo+IC0KPiAtdW5zaWduZWQgbG9uZyBpOTE1X2NoaXBzZXRfdmFsKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9tY2hfdmFsKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXVuc2lnbmVkIGxvbmcgaTkxNV9n ZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gLXZvaWQgaTkxNV91 cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC0KPiAt Ym9vbCBpcm9ubGFrZV9zZXRfZHJwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IHU4IHZhbCk7Cj4gLWludCBpbnRlbF9zZXRfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgdTggdmFsKTsKPiAtdm9pZCBpbnRlbF9ycHNfbWFya19pbnRlcmFjdGl2ZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgYm9vbCBpbnRlcmFjdGl2ZSk7Cj4gIGJvb2wgaW50 ZWxfc2V0X21lbW9yeV9jeHNyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgYm9v bCBlbmFibGUpOwo+ICAKPiAgI2VuZGlmIC8qIF9fSU5URUxfUE1fSF9fICovCj4gLS0gCj4gMi4y My4wCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==