From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 22/40] drm/i915: Syntatic sugar for using intel_runtime_pm Date: Mon, 24 Sep 2018 13:08:15 +0100 Message-ID: <77638545-062e-c7ca-0ff3-54c22fbc64ab@linux.intel.com> References: <20180919195544.1511-1-chris@chris-wilson.co.uk> <20180919195544.1511-22-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2E8506E218 for ; Mon, 24 Sep 2018 12:08:43 +0000 (UTC) In-Reply-To: <20180919195544.1511-22-chris@chris-wilson.co.uk> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE5LzA5LzIwMTggMjA6NTUsIENocmlzIFdpbHNvbiB3cm90ZToKPiBGcmVxdWVudGx5LCB3 ZSB1c2UgaW50ZWxfcnVudGltZV9wbV9nZXQvX3B1dCBhcm91bmQgYSBzbWFsbCBibG9jay4KPiBG b3JtYWxpc2UgdGhhdCB1c2FnZSBieSBwcm92aWRpbmcgYSBtYWNybyB0byBkZWZpbmUgc3VjaCBh IGJsb2NrIHdpdGggYW4KPiBhdXRvbWF0aWMgY2xvc3VyZSB0byBzY29wZSB0aGUgaW50ZWxfcnVu dGltZV9wbSB3YWtlcmVmIHRvIHRoYXQgYmxvY2ssCj4gaS5lLiBtYWNybyBhYnVzZSBzbWVsbGlu ZyBvZiBweXRob24uCgpJbnRlcmVzdGluZyBhbmQgdGVtcHRpbmcgYnV0IEkgY2Fubm90IHNoYWtl IHRoZSBmZWVsaW5nIGl0IGlzIG1heWJlIApnb2luZyBhIGJpdCB0b28gZmFyLiBXZSBjb3VsZCBh ZGQgd2l0aF9sb2NrLCB3aXRoX211dGV4LCAKd2l0aF9ydW50aW1lX3BtX2FuZF9sb2NrIGFuZCB3 aGVyZSBkb2VzIGl0IGVuZD8gOikgRG9uJ3Qga25vdy4uIHBpbmcgCnNvbWUgbW9yZSBwZW9wbGUg b24gdGhpcyBvbmUgSSBndWVzcy4KClJlZ2FyZHMsCgpUdnJ0a28KCj4gU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgICAgICAgfCAxNjMgKysrKysrKystLS0t LS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICAg fCAgMTAgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jICAgICAgICAg ICB8ICAyMyArKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Nocmlua2VyLmMg ICAgICB8ICA0NCArKy0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyAgICAg ICAgICAgICAgIHwgICA3ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMg ICAgICAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o ICAgICAgICAgICAgICB8ICAgOCArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNf bG9nLmMgICAgICAgICAgfCAgMjYgKystCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9o dWMuYyAgICAgICAgICAgICAgfCAgIDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BhbmVsLmMgICAgICAgICAgICB8ICAxOCArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdW5jb3JlLmMgICAgICAgICAgIHwgIDMwICsrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2dlbS5jICAgICB8ICAzNCArKy0tCj4gICAuLi4vZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMgfCAgMTIgKy0KPiAgIC4uLi9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX29iamVjdC5jICB8ICAxMSArLQo+ICAgLi4uL2RybS9pOTE1 L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jICAgIHwgIDEyICstCj4gICAxNSBmaWxlcyBj aGFuZ2VkLCAxOTMgaW5zZXJ0aW9ucygrKSwgMjE5IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXggZGJmZTRlNDU2ZDk3Li45OGZhMjE2ZDE5YmIg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IEBAIC05NTIsOSArOTUyLDkg QEAgc3RhdGljIGludCBpOTE1X2dwdV9pbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbGUpCj4gICAJc3RydWN0IGk5MTVfZ3B1X3N0YXRlICpncHU7Cj4gICAJaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3Bt X2dldChpOTE1KTsKPiAtCWdwdSA9IGk5MTVfY2FwdHVyZV9ncHVfc3RhdGUoaTkxNSk7Cj4gLQlp bnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3YWtlcmVmKTsKPiArCWdwdSA9IE5VTEw7Cj4gKwl3 aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikKPiArCQlncHUgPSBpOTE1X2NhcHR1 cmVfZ3B1X3N0YXRlKGk5MTUpOwo+ICAgCWlmICghZ3B1KQo+ICAgCQlyZXR1cm4gLUVOT01FTTsK PiAgIAo+IEBAIC0xMDE1LDkgKzEwMTUsOCBAQCBpOTE1X25leHRfc2Vxbm9fc2V0KHZvaWQgKmRh dGEsIHU2NCB2YWwpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0Jd2Fr ZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCXJldCA9IGk5MTVfZ2Vt X3NldF9nbG9iYWxfc2Vxbm8oZGV2LCB2YWwpOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2 X3ByaXYsIHdha2VyZWYpOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtl cmVmKQo+ICsJCXJldCA9IGk5MTVfZ2VtX3NldF9nbG9iYWxfc2Vxbm8oZGV2LCB2YWwpOwo+ICAg Cj4gICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAKPiBAQCAtMTMwNSwx NyArMTMwNCwxNSBAQCBzdGF0aWMgaW50IGk5MTVfaGFuZ2NoZWNrX2luZm8oc3RydWN0IHNlcV9m aWxlICptLCB2b2lkICp1bnVzZWQpCj4gICAJCXJldHVybiAwOwo+ICAgCX0KPiAgIAo+IC0Jd2Fr ZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiArCXdpdGhfaW50ZWxfcnVu dGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikgewo+ICsJCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUs IGRldl9wcml2LCBpZCkgewo+ICsJCQlhY3RoZFtpZF0gPSBpbnRlbF9lbmdpbmVfZ2V0X2FjdGl2 ZV9oZWFkKGVuZ2luZSk7Cj4gKwkJCXNlcW5vW2lkXSA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8o ZW5naW5lKTsKPiArCQl9Cj4gICAKPiAtCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2 LCBpZCkgewo+IC0JCWFjdGhkW2lkXSA9IGludGVsX2VuZ2luZV9nZXRfYWN0aXZlX2hlYWQoZW5n aW5lKTsKPiAtCQlzZXFub1tpZF0gPSBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7Cj4g KwkJaW50ZWxfZW5naW5lX2dldF9pbnN0ZG9uZShkZXZfcHJpdi0+ZW5naW5lW1JDU10sICZpbnN0 ZG9uZSk7Cj4gICAJfQo+ICAgCj4gLQlpbnRlbF9lbmdpbmVfZ2V0X2luc3Rkb25lKGRldl9wcml2 LT5lbmdpbmVbUkNTXSwgJmluc3Rkb25lKTsKPiAtCj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChk ZXZfcHJpdiwgd2FrZXJlZik7Cj4gLQo+ICAgCWlmICh0aW1lcl9wZW5kaW5nKCZkZXZfcHJpdi0+ Z3B1X2Vycm9yLmhhbmdjaGVja193b3JrLnRpbWVyKSkKPiAgIAkJc2VxX3ByaW50ZihtLCAiSGFu Z2NoZWNrIGFjdGl2ZSwgdGltZXIgZmlyZXMgaW4gJWRtc1xuIiwKPiAgIAkJCSAgIGppZmZpZXNf dG9fbXNlY3MoZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfd29yay50aW1lci5leHBpcmVz IC0KPiBAQCAtMTU5MSwxOCArMTU4OCwxNiBAQCBzdGF0aWMgaW50IGk5MTVfZHJwY19pbmZvKHN0 cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKPiAgIAlpbnRl bF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWludCBlcnI7Cj4gLQo+IC0Jd2FrZXJlZiA9IGludGVs X3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCj4gLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZf cHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gLQkJZXJyID0gdmx2X2RycGNfaW5m byhtKTsKPiAtCWVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikKPiAtCQllcnIgPSBn ZW42X2RycGNfaW5mbyhtKTsKPiAtCWVsc2UKPiAtCQllcnIgPSBpcm9ubGFrZV9kcnBjX2luZm8o bSk7Cj4gKwlpbnQgZXJyID0gLUVOT0RFVjsKPiAgIAo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQo ZGV2X3ByaXYsIHdha2VyZWYpOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3 YWtlcmVmKSB7Cj4gKwkJaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJ RVcoZGV2X3ByaXYpKQo+ICsJCQllcnIgPSB2bHZfZHJwY19pbmZvKG0pOwo+ICsJCWVsc2UgaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gNikKPiArCQkJZXJyID0gZ2VuNl9kcnBjX2luZm8obSk7 Cj4gKwkJZWxzZQo+ICsJCQllcnIgPSBpcm9ubGFrZV9kcnBjX2luZm8obSk7Cj4gKwl9Cj4gICAK PiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+IEBAIC0yMTY3LDkgKzIxNjIsOCBAQCBzdGF0aWMgaW50 IGk5MTVfaHVjX2xvYWRfc3RhdHVzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRh KQo+ICAgCXAgPSBkcm1fc2VxX2ZpbGVfcHJpbnRlcihtKTsKPiAgIAlpbnRlbF91Y19md19kdW1w KCZkZXZfcHJpdi0+aHVjLmZ3LCAmcCk7Cj4gICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1l X3BtX2dldChkZXZfcHJpdik7Cj4gLQlzZXFfcHJpbnRmKG0sICJcbkh1QyBzdGF0dXMgMHglMDh4 OlxuIiwgSTkxNV9SRUFEKEhVQ19TVEFUVVMyKSk7Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChk ZXZfcHJpdiwgd2FrZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oZGV2X3ByaXYsIHdh a2VyZWYpCj4gKwkJc2VxX3ByaW50ZihtLCAiXG5IdUMgc3RhdHVzIDB4JTA4eDpcbiIsIEk5MTVf UkVBRChIVUNfU1RBVFVTMikpOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gQEAgLTIxNzks NyArMjE3Myw2IEBAIHN0YXRpYyBpbnQgaTkxNV9ndWNfbG9hZF9zdGF0dXNfaW5mbyhzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOwo+ICAgCWludGVsX3dha2VyZWZfdCB3 YWtlcmVmOwo+ICAgCXN0cnVjdCBkcm1fcHJpbnRlciBwOwo+IC0JdTMyIHRtcCwgaTsKPiAgIAo+ ICAgCWlmICghSEFTX0dVQyhkZXZfcHJpdikpCj4gICAJCXJldHVybiAtRU5PREVWOwo+IEBAIC0y MTg3LDIyICsyMTgwLDIzIEBAIHN0YXRpYyBpbnQgaTkxNV9ndWNfbG9hZF9zdGF0dXNfaW5mbyhz dHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gICAJcCA9IGRybV9zZXFfZmlsZV9wcmlu dGVyKG0pOwo+ICAgCWludGVsX3VjX2Z3X2R1bXAoJmRldl9wcml2LT5ndWMuZncsICZwKTsKPiAg IAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCj4gLQl0 bXAgPSBJOTE1X1JFQUQoR1VDX1NUQVRVUyk7Cj4gLQo+IC0Jc2VxX3ByaW50ZihtLCAiXG5HdUMg c3RhdHVzIDB4JTA4eDpcbiIsIHRtcCk7Cj4gLQlzZXFfcHJpbnRmKG0sICJcdEJvb3Ryb20gc3Rh dHVzID0gMHgleFxuIiwKPiAtCQkodG1wICYgR1NfQk9PVFJPTV9NQVNLKSA+PiBHU19CT09UUk9N X1NISUZUKTsKPiAtCXNlcV9wcmludGYobSwgIlx0dUtlcm5lbCBzdGF0dXMgPSAweCV4XG4iLAo+ IC0JCSh0bXAgJiBHU19VS0VSTkVMX01BU0spID4+IEdTX1VLRVJORUxfU0hJRlQpOwo+IC0Jc2Vx X3ByaW50ZihtLCAiXHRNSUEgQ29yZSBzdGF0dXMgPSAweCV4XG4iLAo+IC0JCSh0bXAgJiBHU19N SUFfTUFTSykgPj4gR1NfTUlBX1NISUZUKTsKPiAtCXNlcV9wdXRzKG0sICJcblNjcmF0Y2ggcmVn aXN0ZXJzOlxuIik7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKPiAtCQlzZXFfcHJpbnRm KG0sICJcdCUyZDogXHQweCV4XG4iLCBpLCBJOTE1X1JFQUQoU09GVF9TQ1JBVENIKGkpKSk7Cj4g LQo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYsIHdha2VyZWYpOwo+ICsJd2l0aF9p bnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtlcmVmKSB7Cj4gKwkJdTMyIHRtcCA9IEk5MTVf UkVBRChHVUNfU1RBVFVTKTsKPiArCQl1MzIgaTsKPiArCj4gKwkJc2VxX3ByaW50ZihtLCAiXG5H dUMgc3RhdHVzIDB4JTA4eDpcbiIsIHRtcCk7Cj4gKwkJc2VxX3ByaW50ZihtLCAiXHRCb290cm9t IHN0YXR1cyA9IDB4JXhcbiIsCj4gKwkJCSAgICh0bXAgJiBHU19CT09UUk9NX01BU0spID4+IEdT X0JPT1RST01fU0hJRlQpOwo+ICsJCXNlcV9wcmludGYobSwgIlx0dUtlcm5lbCBzdGF0dXMgPSAw eCV4XG4iLAo+ICsJCQkgICAodG1wICYgR1NfVUtFUk5FTF9NQVNLKSA+PiBHU19VS0VSTkVMX1NI SUZUKTsKPiArCQlzZXFfcHJpbnRmKG0sICJcdE1JQSBDb3JlIHN0YXR1cyA9IDB4JXhcbiIsCj4g KwkJCSAgICh0bXAgJiBHU19NSUFfTUFTSykgPj4gR1NfTUlBX1NISUZUKTsKPiArCQlzZXFfcHV0 cyhtLCAiXG5TY3JhdGNoIHJlZ2lzdGVyczpcbiIpOwo+ICsJCWZvciAoaSA9IDA7IGkgPCAxNjsg aSsrKSB7Cj4gKwkJCXNlcV9wcmludGYobSwgIlx0JTJkOiBcdDB4JXhcbiIsCj4gKwkJCQkgICBp LCBJOTE1X1JFQUQoU09GVF9TQ1JBVENIKGkpKSk7Cj4gKwkJfQo+ICsJfQo+ICAgCj4gICAJcmV0 dXJuIDA7Cj4gICB9Cj4gQEAgLTI2NzUsMTkgKzI2NjksMTQgQEAgc3RhdGljIGludCBpOTE1X2Vu ZXJneV91SihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gICAJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPCA2KQo+ICAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgIAo+IC0Jd2FrZXJlZiA9 IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCj4gLQlpZiAocmRtc3JsX3NhZmUo TVNSX1JBUExfUE9XRVJfVU5JVCwgJnBvd2VyKSkgewo+IC0JCWludGVsX3J1bnRpbWVfcG1fcHV0 KGRldl9wcml2LCB3YWtlcmVmKTsKPiArCWlmIChyZG1zcmxfc2FmZShNU1JfUkFQTF9QT1dFUl9V TklULCAmcG93ZXIpKQo+ICAgCQlyZXR1cm4gLUVOT0RFVjsKPiAtCX0KPiAgIAo+ICAgCXVuaXRz ID0gKHBvd2VyICYgMHgxZjAwKSA+PiA4Owo+IC0JcG93ZXIgPSBJOTE1X1JFQUQoTUNIX1NFQ1Bf TlJHX1NUVFMpOwo+IC0JcG93ZXIgPSAoMTAwMDAwMCAqIHBvd2VyKSA+PiB1bml0czsgLyogY29u dmVydCB0byB1SiAqLwo+IC0KPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3YWtl cmVmKTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikKPiArCQlw b3dlciA9IEk5MTVfUkVBRChNQ0hfU0VDUF9OUkdfU1RUUyk7Cj4gICAKPiArCXBvd2VyID0gKDEw MDAwMDAgKiBwb3dlcikgPj4gdW5pdHM7IC8qIGNvbnZlcnQgdG8gdUogKi8KPiAgIAlzZXFfcHJp bnRmKG0sICIlbGx1IiwgcG93ZXIpOwo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gQEAgLTMyNjgsMjIg KzMyNTcsMjAgQEAgc3RhdGljIHNzaXplX3QgaTkxNV9pcGNfc3RhdHVzX3dyaXRlKHN0cnVjdCBm aWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKPiAgIAlzdHJ1Y3Qgc2VxX2ZpbGUg Km0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gbS0+cHJpdmF0ZTsKPiAgIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCWlu dCByZXQ7Cj4gICAJYm9vbCBlbmFibGU7Cj4gKwlpbnQgcmV0Owo+ICAgCj4gICAJcmV0ID0ga3N0 cnRvYm9vbF9mcm9tX3VzZXIodWJ1ZiwgbGVuLCAmZW5hYmxlKTsKPiAgIAlpZiAocmV0IDwgMCkK PiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0 KGRldl9wcml2KTsKPiAtCj4gLQlpZiAoIWRldl9wcml2LT5pcGNfZW5hYmxlZCAmJiBlbmFibGUp Cj4gLQkJRFJNX0lORk8oIkVuYWJsaW5nIElQQzogV00gd2lsbCBiZSBwcm9wZXIgb25seSBhZnRl ciBuZXh0IGNvbW1pdFxuIik7Cj4gLQlkZXZfcHJpdi0+d20uZGlzdHJ1c3RfYmlvc193bSA9IHRy dWU7Cj4gLQlkZXZfcHJpdi0+aXBjX2VuYWJsZWQgPSBlbmFibGU7Cj4gLQlpbnRlbF9lbmFibGVf aXBjKGRldl9wcml2KTsKPiAtCj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2Fr ZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oZGV2X3ByaXYsIHdha2VyZWYpIHsKPiAr CQlpZiAoIWRldl9wcml2LT5pcGNfZW5hYmxlZCAmJiBlbmFibGUpCj4gKwkJCURSTV9JTkZPKCJF bmFibGluZyBJUEM6IFdNIHdpbGwgYmUgcHJvcGVyIG9ubHkgYWZ0ZXIgbmV4dCBjb21taXRcbiIp Owo+ICsJCWRldl9wcml2LT53bS5kaXN0cnVzdF9iaW9zX3dtID0gdHJ1ZTsKPiArCQlkZXZfcHJp di0+aXBjX2VuYWJsZWQgPSBlbmFibGU7Cj4gKwkJaW50ZWxfZW5hYmxlX2lwYyhkZXZfcHJpdik7 Cj4gKwl9Cj4gICAKPiAgIAlyZXR1cm4gbGVuOwo+ICAgfQo+IEBAIC00MTI3LDE2ICs0MTE0LDEz IEBAIGk5MTVfY2FjaGVfc2hhcmluZ19nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCj4gICB7Cj4g ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGF0YTsKPiAgIAlpbnRlbF93 YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCXUzMiBzbnBjcjsKPiArCXUzMiBzbnBjciA9IDA7Cj4gICAK PiAgIAlpZiAoIShJU19HRU42KGRldl9wcml2KSB8fCBJU19HRU43KGRldl9wcml2KSkpCj4gICAJ CXJldHVybiAtRU5PREVWOwo+ICAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQo ZGV2X3ByaXYpOwo+IC0KPiAtCXNucGNyID0gSTkxNV9SRUFEKEdFTjZfTUJDVU5JVF9TTlBDUik7 Cj4gLQo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYsIHdha2VyZWYpOwo+ICsJd2l0 aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtlcmVmKQo+ICsJCXNucGNyID0gSTkxNV9S RUFEKEdFTjZfTUJDVU5JVF9TTlBDUik7Cj4gICAKPiAgIAkqdmFsID0gKHNucGNyICYgR0VONl9N QkNfU05QQ1JfTUFTSykgPj4gR0VONl9NQkNfU05QQ1JfU0hJRlQ7Cj4gICAKPiBAQCAtNDE0OCw3 ICs0MTMyLDYgQEAgaTkxNV9jYWNoZV9zaGFyaW5nX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQo+ ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRhdGE7Cj4gICAJ aW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQl1MzIgc25wY3I7Cj4gICAKPiAgIAlpZiAoIShJ U19HRU42KGRldl9wcml2KSB8fCBJU19HRU43KGRldl9wcml2KSkpCj4gICAJCXJldHVybiAtRU5P REVWOwo+IEBAIC00MTU2LDE2ICs0MTM5LDE3IEBAIGk5MTVfY2FjaGVfc2hhcmluZ19zZXQodm9p ZCAqZGF0YSwgdTY0IHZhbCkKPiAgIAlpZiAodmFsID4gMykKPiAgIAkJcmV0dXJuIC1FSU5WQUw7 Cj4gICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gICAJ RFJNX0RFQlVHX0RSSVZFUigiTWFudWFsbHkgc2V0dGluZyB1bmNvcmUgc2hhcmluZyB0byAlbGx1 XG4iLCB2YWwpOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtlcmVmKSB7 Cj4gKwkJdTMyIHNucGNyOwo+ICsKPiArCQkvKiBVcGRhdGUgdGhlIGNhY2hlIHNoYXJpbmcgcG9s aWN5IGhlcmUgYXMgd2VsbCAqLwo+ICsJCXNucGNyID0gSTkxNV9SRUFEKEdFTjZfTUJDVU5JVF9T TlBDUik7Cj4gKwkJc25wY3IgJj0gfkdFTjZfTUJDX1NOUENSX01BU0s7Cj4gKwkJc25wY3IgfD0g dmFsIDw8IEdFTjZfTUJDX1NOUENSX1NISUZUOwo+ICsJCUk5MTVfV1JJVEUoR0VONl9NQkNVTklU X1NOUENSLCBzbnBjcik7Cj4gKwl9Cj4gICAKPiAtCS8qIFVwZGF0ZSB0aGUgY2FjaGUgc2hhcmlu ZyBwb2xpY3kgaGVyZSBhcyB3ZWxsICovCj4gLQlzbnBjciA9IEk5MTVfUkVBRChHRU42X01CQ1VO SVRfU05QQ1IpOwo+IC0Jc25wY3IgJj0gfkdFTjZfTUJDX1NOUENSX01BU0s7Cj4gLQlzbnBjciB8 PSAodmFsIDw8IEdFTjZfTUJDX1NOUENSX1NISUZUKTsKPiAtCUk5MTVfV1JJVEUoR0VONl9NQkNV TklUX1NOUENSLCBzbnBjcik7Cj4gLQo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYs IHdha2VyZWYpOwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gQEAgLTQ0MDIsMjAgKzQzODYs MTcgQEAgc3RhdGljIGludCBpOTE1X3NzZXVfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqdW51c2VkKQo+ICAgCXNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPQo+ICAgCQlJTlRFTF9J TkZPKGRldl9wcml2KS0+c3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZTsKPiAgIAo+IC0Jd2FrZXJl ZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCj4gLQlpZiAoSVNfQ0hFUlJZ VklFVyhkZXZfcHJpdikpIHsKPiAtCQljaGVycnl2aWV3X3NzZXVfZGV2aWNlX3N0YXR1cyhkZXZf cHJpdiwgJnNzZXUpOwo+IC0JfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4g LQkJYnJvYWR3ZWxsX3NzZXVfZGV2aWNlX3N0YXR1cyhkZXZfcHJpdiwgJnNzZXUpOwo+IC0JfSBl bHNlIGlmIChJU19HRU45KGRldl9wcml2KSkgewo+IC0JCWdlbjlfc3NldV9kZXZpY2Vfc3RhdHVz KGRldl9wcml2LCAmc3NldSk7Cj4gLQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTApIHsKPiAtCQlnZW4xMF9zc2V1X2RldmljZV9zdGF0dXMoZGV2X3ByaXYsICZzc2V1KTsKPiAr CXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikgewo+ICsJCWlmIChJU19D SEVSUllWSUVXKGRldl9wcml2KSkKPiArCQkJY2hlcnJ5dmlld19zc2V1X2RldmljZV9zdGF0dXMo ZGV2X3ByaXYsICZzc2V1KTsKPiArCQllbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKQo+ ICsJCQlicm9hZHdlbGxfc3NldV9kZXZpY2Vfc3RhdHVzKGRldl9wcml2LCAmc3NldSk7Cj4gKwkJ ZWxzZSBpZiAoSVNfR0VOOShkZXZfcHJpdikpCj4gKwkJCWdlbjlfc3NldV9kZXZpY2Vfc3RhdHVz KGRldl9wcml2LCAmc3NldSk7Cj4gKwkJZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MCkKPiArCQkJZ2VuMTBfc3NldV9kZXZpY2Vfc3RhdHVzKGRldl9wcml2LCAmc3NldSk7Cj4gICAJ fQo+ICAgCj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gLQo+ ICAgCWk5MTVfcHJpbnRfc3NldV9pbmZvKG0sIGZhbHNlLCAmc3NldSk7Cj4gICAKPiAgIAlyZXR1 cm4gMDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCBiNmRhNjg4NDYxNjQuLjIzM2E2 NTQ4N2MzZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC04MTQsMTMgKzgxNCwx MyBAQCB2b2lkIGk5MTVfZ2VtX2ZsdXNoX2dndHRfd3JpdGVzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAgIAo+ICAgCWk5MTVfZ2VtX2NoaXBzZXRfZmx1c2goZGV2X3ByaXYp Owo+ICAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOwo+IC0J c3Bpbl9sb2NrX2lycSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrKTsKPiArCXdpdGhfaW50ZWxfcnVu dGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikgewo+ICsJCXNwaW5fbG9ja19pcnEoJmRldl9wcml2 LT51bmNvcmUubG9jayk7Cj4gICAKPiAtCVBPU1RJTkdfUkVBRF9GVyhSSU5HX0hFQUQoUkVOREVS X1JJTkdfQkFTRSkpOwo+ICsJCVBPU1RJTkdfUkVBRF9GVyhSSU5HX0hFQUQoUkVOREVSX1JJTkdf QkFTRSkpOwo+ICAgCj4gLQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT51bmNvcmUubG9jayk7 Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gKwkJc3Bpbl91 bmxvY2tfaXJxKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2spOwo+ICsJfQo+ICAgfQo+ICAgCj4gICBz dGF0aWMgdm9pZAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggMDQ3MTBk MGVjZjhjLi5lZjM4ZDA5YjZjZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu Ywo+IEBAIC0yNzIwLDkgKzI3MjAsOCBAQCBzdGF0aWMgaW50IGdndHRfYmluZF92bWEoc3RydWN0 IGk5MTVfdm1hICp2bWEsCj4gICAJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19yZWFkb25seShvYmop KQo+ICAgCQlwdGVfZmxhZ3MgfD0gUFRFX1JFQURfT05MWTsKPiAgIAo+IC0Jd2FrZXJlZiA9IGlu dGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwo+IC0Jdm1hLT52bS0+aW5zZXJ0X2VudHJpZXModm1h LT52bSwgdm1hLCBjYWNoZV9sZXZlbCwgcHRlX2ZsYWdzKTsKPiAtCWludGVsX3J1bnRpbWVfcG1f cHV0KGk5MTUsIHdha2VyZWYpOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdha2Vy ZWYpCj4gKwkJdm1hLT52bS0+aW5zZXJ0X2VudHJpZXModm1hLT52bSwgdm1hLCBjYWNoZV9sZXZl bCwgcHRlX2ZsYWdzKTsKPiAgIAo+ICAgCXZtYS0+cGFnZV9zaXplcy5ndHQgPSBJOTE1X0dUVF9Q QUdFX1NJWkU7Cj4gICAKPiBAQCAtMjc0MSw5ICsyNzQwLDggQEAgc3RhdGljIHZvaWQgZ2d0dF91 bmJpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0gdm1hLT52bS0+aTkxNTsKPiAgIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsK PiAgIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwo+IC0Jdm1hLT52 bS0+Y2xlYXJfcmFuZ2Uodm1hLT52bSwgdm1hLT5ub2RlLnN0YXJ0LCB2bWEtPnNpemUpOwo+IC0J aW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRp bWVfcG0oaTkxNSwgd2FrZXJlZikKPiArCQl2bWEtPnZtLT5jbGVhcl9yYW5nZSh2bWEtPnZtLCB2 bWEtPm5vZGUuc3RhcnQsIHZtYS0+c2l6ZSk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQgYWxp YXNpbmdfZ3R0X2JpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+IEBAIC0yNzc3LDkgKzI3 NzUsMTAgQEAgc3RhdGljIGludCBhbGlhc2luZ19ndHRfYmluZF92bWEoc3RydWN0IGk5MTVfdm1h ICp2bWEsCj4gICAJaWYgKGZsYWdzICYgSTkxNV9WTUFfR0xPQkFMX0JJTkQpIHsKPiAgIAkJaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gICAKPiAtCQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9w bV9nZXQoaTkxNSk7Cj4gLQkJdm1hLT52bS0+aW5zZXJ0X2VudHJpZXModm1hLT52bSwgdm1hLCBj YWNoZV9sZXZlbCwgcHRlX2ZsYWdzKTsKPiAtCQlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3 YWtlcmVmKTsKPiArCQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikgewo+ICsJ CQl2bWEtPnZtLT5pbnNlcnRfZW50cmllcyh2bWEtPnZtLCB2bWEsCj4gKwkJCQkJCWNhY2hlX2xl dmVsLCBwdGVfZmxhZ3MpOwo+ICsJCX0KPiAgIAl9Cj4gICAKPiAgIAlyZXR1cm4gMDsKPiBAQCAt Mjc5MCwxMSArMjc4OSwxMSBAQCBzdGF0aWMgdm9pZCBhbGlhc2luZ19ndHRfdW5iaW5kX3ZtYShz dHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IHZtYS0+dm0tPmk5MTU7Cj4gICAKPiAgIAlpZiAodm1hLT5mbGFncyAmIEk5MTVfVk1BX0dMT0JB TF9CSU5EKSB7Cj4gKwkJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSB2bWEtPnZtOwo+ ICAgCQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAgIAo+IC0JCXdha2VyZWYgPSBpbnRlbF9y dW50aW1lX3BtX2dldChpOTE1KTsKPiAtCQl2bWEtPnZtLT5jbGVhcl9yYW5nZSh2bWEtPnZtLCB2 bWEtPm5vZGUuc3RhcnQsIHZtYS0+c2l6ZSk7Cj4gLQkJaW50ZWxfcnVudGltZV9wbV9wdXQoaTkx NSwgd2FrZXJlZik7Cj4gKwkJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdha2VyZWYpCj4g KwkJCXZtLT5jbGVhcl9yYW5nZSh2bSwgdm1hLT5ub2RlLnN0YXJ0LCB2bWEtPnNpemUpOwo+ICAg CX0KPiAgIAo+ICAgCWlmICh2bWEtPmZsYWdzICYgSTkxNV9WTUFfTE9DQUxfQklORCkgewo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zaHJpbmtlci5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc2hyaW5rZXIuYwo+IGluZGV4IGYyNWU0YzdjNzFi MS4uZmUxOTg4MjRkYmExIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3Nocmlua2VyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zaHJp bmtlci5jCj4gQEAgLTI5OSwxNCArMjk5LDE0IEBAIGk5MTVfZ2VtX3NocmluayhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIHVuc2lnbmVkIGxvbmcgaTkxNV9nZW1fc2hyaW5rX2Fs bChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAgIAlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKPiAtCXVuc2lnbmVkIGxvbmcgZnJlZWQ7Cj4gKwl1bnNpZ25lZCBsb25nIGZy ZWVkID0gMDsKPiAgIAo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwo+ IC0JZnJlZWQgPSBpOTE1X2dlbV9zaHJpbmsoaTkxNSwgLTFVTCwgTlVMTCwKPiAtCQkJCUk5MTVf U0hSSU5LX0JPVU5EIHwKPiAtCQkJCUk5MTVfU0hSSU5LX1VOQk9VTkQgfAo+IC0JCQkJSTkxNV9T SFJJTktfQUNUSVZFKTsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+ ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdha2VyZWYpIHsKPiArCQlmcmVlZCA9IGk5 MTVfZ2VtX3NocmluayhpOTE1LCAtMVVMLCBOVUxMLAo+ICsJCQkJCUk5MTVfU0hSSU5LX0JPVU5E IHwKPiArCQkJCQlJOTE1X1NIUklOS19VTkJPVU5EIHwKPiArCQkJCQlJOTE1X1NIUklOS19BQ1RJ VkUpOwo+ICsJfQo+ICAgCj4gICAJcmV0dXJuIGZyZWVkOwo+ICAgfQo+IEBAIC0zNzksMTQgKzM3 OSwxNCBAQCBpOTE1X2dlbV9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIs IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCj4gICAJaWYgKHNjLT5ucl9zY2FubmVkIDwgc2Mt Pm5yX3RvX3NjYW4gJiYgY3VycmVudF9pc19rc3dhcGQoKSkgewo+ICAgCQlpbnRlbF93YWtlcmVm X3Qgd2FrZXJlZjsKPiAgIAo+IC0JCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1 KTsKPiAtCQlmcmVlZCArPSBpOTE1X2dlbV9zaHJpbmsoaTkxNSwKPiAtCQkJCQkgc2MtPm5yX3Rv X3NjYW4gLSBzYy0+bnJfc2Nhbm5lZCwKPiAtCQkJCQkgJnNjLT5ucl9zY2FubmVkLAo+IC0JCQkJ CSBJOTE1X1NIUklOS19BQ1RJVkUgfAo+IC0JCQkJCSBJOTE1X1NIUklOS19CT1VORCB8Cj4gLQkJ CQkJIEk5MTVfU0hSSU5LX1VOQk9VTkQpOwo+IC0JCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUs IHdha2VyZWYpOwo+ICsJCXdpdGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtlcmVmKSB7Cj4g KwkJCWZyZWVkICs9IGk5MTVfZ2VtX3NocmluayhpOTE1LAo+ICsJCQkJCQkgc2MtPm5yX3RvX3Nj YW4gLSBzYy0+bnJfc2Nhbm5lZCwKPiArCQkJCQkJICZzYy0+bnJfc2Nhbm5lZCwKPiArCQkJCQkJ IEk5MTVfU0hSSU5LX0FDVElWRSB8Cj4gKwkJCQkJCSBJOTE1X1NIUklOS19CT1VORCB8Cj4gKwkJ CQkJCSBJOTE1X1NIUklOS19VTkJPVU5EKTsKPiArCQl9Cj4gICAJfQo+ICAgCj4gICAJc2hyaW5r ZXJfdW5sb2NrKGk5MTUsIHVubG9jayk7Cj4gQEAgLTQ4MywxMyArNDgzLDEzIEBAIGk5MTVfZ2Vt X3Nocmlua2VyX3ZtYXAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBl dmVudCwgdm9pZCAqcHRyCj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBvdXQ7Cj4gICAKPiAtCXdh a2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKPiAtCWZyZWVkX3BhZ2VzICs9IGk5 MTVfZ2VtX3NocmluayhpOTE1LCAtMVVMLCBOVUxMLAo+IC0JCQkJICAgICAgIEk5MTVfU0hSSU5L X0JPVU5EIHwKPiAtCQkJCSAgICAgICBJOTE1X1NIUklOS19VTkJPVU5EIHwKPiAtCQkJCSAgICAg ICBJOTE1X1NIUklOS19BQ1RJVkUgfAo+IC0JCQkJICAgICAgIEk5MTVfU0hSSU5LX1ZNQVBTKTsK PiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+ICsJd2l0aF9pbnRlbF9y dW50aW1lX3BtKGk5MTUsIHdha2VyZWYpIHsKPiArCQlmcmVlZF9wYWdlcyArPSBpOTE1X2dlbV9z aHJpbmsoaTkxNSwgLTFVTCwgTlVMTCwKPiArCQkJCQkgICAgICAgSTkxNV9TSFJJTktfQk9VTkQg fAo+ICsJCQkJCSAgICAgICBJOTE1X1NIUklOS19VTkJPVU5EIHwKPiArCQkJCQkgICAgICAgSTkx NV9TSFJJTktfQUNUSVZFIHwKPiArCQkJCQkgICAgICAgSTkxNV9TSFJJTktfVk1BUFMpOwo+ICsJ fQo+ICAgCj4gICAJLyogV2UgYWxzbyB3YW50IHRvIGNsZWFyIGFueSBjYWNoZWQgaW9tYXBzIGFz IHRoZXkgd3JhcCB2bWFwICovCj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgbmV4 dCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMKPiBpbmRleCAzZDQzZmM5ZGQyNWQuLmIxY2IyZDNj YWUxNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BtdS5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wbXUuYwo+IEBAIC0yMzAsMTQgKzIzMCwxMSBA QCBmcmVxdWVuY3lfc2FtcGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdW5z aWduZWQgaW50IHBlcmlvZF9ucykKPiAgIAo+ICAgCQl2YWwgPSBkZXZfcHJpdi0+Z3RfcG0ucnBz LmN1cl9mcmVxOwo+ICAgCQlpZiAoZGV2X3ByaXYtPmd0LmF3YWtlKSB7Cj4gLQkJCWludGVsX3dh a2VyZWZfdCB3YWtlcmVmID0KPiAtCQkJCWludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShk ZXZfcHJpdik7Cj4gKwkJCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAgCj4gLQkJCWlmICh3 YWtlcmVmKSB7Cj4gKwkJCXdpdGhfaW50ZWxfcnVudGltZV9wbV9pZl9pbl91c2UoZGV2X3ByaXYs IHdha2VyZWYpCj4gICAJCQkJdmFsID0gaW50ZWxfZ2V0X2NhZ2YoZGV2X3ByaXYsCj4gICAJCQkJ CQkgICAgIEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfUlBTVEFUMSkpOwo+IC0JCQkJaW50ZWxfcnVu dGltZV9wbV9wdXQoZGV2X3ByaXYsIHdha2VyZWYpOwo+IC0JCQl9Cj4gICAJCX0KPiAgIAo+ICAg CQlhZGRfc2FtcGxlX211bHQoJmRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJF UV9BQ1RdLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiBpbmRleCBhOTU5YWVlMjA4ZGUu LmUxMjYxOTY0MTNhNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5 c2ZzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPiBAQCAtNDMs MTEgKzQzLDEwIEBAIHN0YXRpYyB1MzIgY2FsY19yZXNpZGVuY3koc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAgCQkJICBpOTE1X3JlZ190IHJlZykKPiAgIHsKPiAgIAlpbnRl bF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAtCXU2NCByZXM7Cj4gKwl1NjQgcmVzID0gMDsKPiAgIAo+ IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCXJlcyA9IGlu dGVsX3JjNl9yZXNpZGVuY3lfdXMoZGV2X3ByaXYsIHJlZyk7Cj4gLQlpbnRlbF9ydW50aW1lX3Bt X3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oZGV2X3By aXYsIHdha2VyZWYpCj4gKwkJcmVzID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV91cyhkZXZfcHJpdiwg cmVnKTsKPiAgIAo+ICAgCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVF9VTEwocmVzLCAxMDAwKTsK PiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IDVkODhiNjNhM2Q2Yi4uZmQ4 NWE5MzdiMjM3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAtMjA2Miw2ICsy MDYyLDE0IEBAIGludGVsX3dha2VyZWZfdCBpbnRlbF9ydW50aW1lX3BtX2dldChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gICBpbnRlbF93YWtlcmVmX3QgaW50ZWxfcnVudGltZV9w bV9nZXRfaWZfaW5fdXNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAgIGludGVs X3dha2VyZWZfdCBpbnRlbF9ydW50aW1lX3BtX2dldF9ub3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSk7Cj4gICAKPiArI2RlZmluZSB3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkx NSwgd2YpIFwKPiArCWZvciAod2YgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsgd2Y7IFwK PiArCSAgICAgaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2YpLCB3ZiA9IDApCj4gKwo+ICsj ZGVmaW5lIHdpdGhfaW50ZWxfcnVudGltZV9wbV9pZl9pbl91c2UoaTkxNSwgd2YpIFwKPiArCWZv ciAod2YgPSBpbnRlbF9ydW50aW1lX3BtX2dldF9pZl9pbl91c2UoaTkxNSk7IHdmOyBcCj4gKwkg ICAgIGludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdmKSwgd2YgPSAwKQo+ICsKPiAgIHZvaWQg aW50ZWxfcnVudGltZV9wbV9wdXRfdW5jaGVja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KTsKPiAgICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19SVU5USU1FX1BN KQo+ICAgdm9pZCBpbnRlbF9ydW50aW1lX3BtX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwgaW50ZWxfd2FrZXJlZl90IHdyZWYpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWNfbG9nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNf bG9nLmMKPiBpbmRleCAyMGMwYjM2ZDc0OGUuLmI1MzU4MmMwYzZjMSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9nLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWNfbG9nLmMKPiBAQCAtNDQ0LDkgKzQ0NCw4IEBAIHN0YXRpYyB2b2lk IGd1Y19sb2dfY2FwdHVyZV9sb2dzKHN0cnVjdCBpbnRlbF9ndWNfbG9nICpsb2cpCj4gICAJICog R2VuZXJhbGx5IGRldmljZSBpcyBleHBlY3RlZCB0byBiZSBhY3RpdmUgb25seSBhdCB0aGlzCj4g ICAJICogdGltZSwgc28gZ2V0L3B1dCBzaG91bGQgYmUgcmVhbGx5IHF1aWNrLgo+ICAgCSAqLwo+ IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCWd1Y19hY3Rp b25fZmx1c2hfbG9nX2NvbXBsZXRlKGd1Yyk7Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZf cHJpdiwgd2FrZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oZGV2X3ByaXYsIHdha2Vy ZWYpCj4gKwkJZ3VjX2FjdGlvbl9mbHVzaF9sb2dfY29tcGxldGUoZ3VjKTsKPiAgIH0KPiAgIAo+ ICAgaW50IGludGVsX2d1Y19sb2dfY3JlYXRlKHN0cnVjdCBpbnRlbF9ndWNfbG9nICpsb2cpCj4g QEAgLTUwNyw3ICs1MDYsNyBAQCBpbnQgaW50ZWxfZ3VjX2xvZ19zZXRfbGV2ZWwoc3RydWN0IGlu dGVsX2d1Y19sb2cgKmxvZywgdTMyIGxldmVsKQo+ICAgCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9 IGxvZ190b19ndWMobG9nKTsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBndWNfdG9faTkxNShndWMpOwo+ICAgCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JaW50 IHJldDsKPiArCWludCByZXQgPSAwOwo+ICAgCj4gICAJQlVJTERfQlVHX09OKEdVQ19MT0dfVkVS Qk9TSVRZX01JTiAhPSAwKTsKPiAgIAlHRU1fQlVHX09OKCFsb2ctPnZtYSk7Cj4gQEAgLTUyMSwx NiArNTIwLDE0IEBAIGludCBpbnRlbF9ndWNfbG9nX3NldF9sZXZlbChzdHJ1Y3QgaW50ZWxfZ3Vj X2xvZyAqbG9nLCB1MzIgbGV2ZWwpCj4gICAKPiAgIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJt LnN0cnVjdF9tdXRleCk7Cj4gICAKPiAtCWlmIChsb2ctPmxldmVsID09IGxldmVsKSB7Cj4gLQkJ cmV0ID0gMDsKPiArCWlmIChsb2ctPmxldmVsID09IGxldmVsKQo+ICAgCQlnb3RvIG91dF91bmxv Y2s7Cj4gLQl9Cj4gICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJp dik7Cj4gLQlyZXQgPSBndWNfYWN0aW9uX2NvbnRyb2xfbG9nKGd1YywgR1VDX0xPR19MRVZFTF9J U19WRVJCT1NFKGxldmVsKSwKPiAtCQkJCSAgICAgR1VDX0xPR19MRVZFTF9JU19FTkFCTEVEKGxl dmVsKSwKPiAtCQkJCSAgICAgR1VDX0xPR19MRVZFTF9UT19WRVJCT1NJVFkobGV2ZWwpKTsKPiAt CWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3YWtlcmVmKTsKPiArCXdpdGhfaW50ZWxf cnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikKPiArCQlyZXQgPSBndWNfYWN0aW9uX2NvbnRy b2xfbG9nKGd1YywKPiArCQkJCQkgICAgIEdVQ19MT0dfTEVWRUxfSVNfVkVSQk9TRShsZXZlbCks Cj4gKwkJCQkJICAgICBHVUNfTE9HX0xFVkVMX0lTX0VOQUJMRUQobGV2ZWwpLAo+ICsJCQkJCSAg ICAgR1VDX0xPR19MRVZFTF9UT19WRVJCT1NJVFkobGV2ZWwpKTsKPiAgIAlpZiAocmV0KSB7Cj4g ICAJCURSTV9ERUJVR19EUklWRVIoImd1Y19sb2dfY29udHJvbCBhY3Rpb24gZmFpbGVkICVkXG4i LCByZXQpOwo+ICAgCQlnb3RvIG91dF91bmxvY2s7Cj4gQEAgLTYxMSw5ICs2MDgsOCBAQCB2b2lk IGludGVsX2d1Y19sb2dfcmVsYXlfZmx1c2goc3RydWN0IGludGVsX2d1Y19sb2cgKmxvZykKPiAg IAkgKi8KPiAgIAlmbHVzaF93b3JrKCZsb2ctPnJlbGF5LmZsdXNoX3dvcmspOwo+ICAgCj4gLQl3 YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gLQlndWNfYWN0aW9uX2ZsdXNo X2xvZyhndWMpOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gKwl3 aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikKPiArCQlndWNfYWN0aW9uX2ZsdXNo X2xvZyhndWMpOwo+ICAgCj4gICAJLyogR3VDIHdvdWxkIGhhdmUgdXBkYXRlZCBsb2cgYnVmZmVy IGJ5IG5vdywgc28gY2FwdHVyZSBpdCAqLwo+ICAgCWd1Y19sb2dfY2FwdHVyZV9sb2dzKGxvZyk7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1Yy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMKPiBpbmRleCBhNjFjOTQ0YzMwMzYuLmZiNjljZjE5 NTI1MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWMuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1Yy5jCj4gQEAgLTExNSwxNCArMTE1LDEz IEBAIGludCBpbnRlbF9odWNfY2hlY2tfc3RhdHVzKHN0cnVjdCBpbnRlbF9odWMgKmh1YykKPiAg IHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBodWNfdG9faTkxNSho dWMpOwo+ICAgCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JdTMyIHN0YXR1czsKPiArCXUz MiBzdGF0dXMgPSAwOwo+ICAgCj4gICAJaWYgKCFIQVNfSFVDKGRldl9wcml2KSkKPiAgIAkJcmV0 dXJuIC1FTk9ERVY7Cj4gICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChkZXZf cHJpdik7Cj4gLQlzdGF0dXMgPSBJOTE1X1JFQUQoSFVDX1NUQVRVUzIpICYgSFVDX0ZXX1ZFUklG SUVEOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYsIHdha2VyZWYpOwo+ICsJd2l0 aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtlcmVmKQo+ICsJCXN0YXR1cyA9IEk5MTVf UkVBRChIVUNfU1RBVFVTMikgJiBIVUNfRldfVkVSSUZJRUQ7Cj4gICAKPiAgIAlyZXR1cm4gc3Rh dHVzOwo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5l bC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYwo+IGluZGV4IGU1N2M0MjMy M2IxNy4uZDM2ZmNjYWNjZWZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BhbmVsLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCj4g QEAgLTEyMDQsMTcgKzEyMDQsMTkgQEAgc3RhdGljIGludCBpbnRlbF9iYWNrbGlnaHRfZGV2aWNl X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKPiAgIAlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5iYXNlLmRldjsKPiAgIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gICAJaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7Cj4gLQl1MzIgaHdfbGV2ZWw7Cj4gLQlpbnQgcmV0Owo+ICsJaW50IHJldCA9IDA7 Cj4gICAKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Cj4gLQlk cm1fbW9kZXNldF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwp Owo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGRldl9wcml2LCB3YWtlcmVmKSB7Cj4gKwkJdTMy IGh3X2xldmVsOwo+ICAgCj4gLQlod19sZXZlbCA9IGludGVsX3BhbmVsX2dldF9iYWNrbGlnaHQo Y29ubmVjdG9yKTsKPiAtCXJldCA9IHNjYWxlX2h3X3RvX3VzZXIoY29ubmVjdG9yLCBod19sZXZl bCwgYmQtPnByb3BzLm1heF9icmlnaHRuZXNzKTsKPiArCQlkcm1fbW9kZXNldF9sb2NrKCZkZXYt Pm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwpOwo+ICAgCj4gLQlkcm1fbW9kZXNl dF91bmxvY2soJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7Cj4gLQlpbnRlbF9y dW50aW1lX3BtX3B1dChkZXZfcHJpdiwgd2FrZXJlZik7Cj4gKwkJaHdfbGV2ZWwgPSBpbnRlbF9w YW5lbF9nZXRfYmFja2xpZ2h0KGNvbm5lY3Rvcik7Cj4gKwkJcmV0ID0gc2NhbGVfaHdfdG9fdXNl cihjb25uZWN0b3IsCj4gKwkJCQkgICAgICAgaHdfbGV2ZWwsIGJkLT5wcm9wcy5tYXhfYnJpZ2h0 bmVzcyk7Cj4gKwo+ICsJCWRybV9tb2Rlc2V0X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5jb25u ZWN0aW9uX211dGV4KTsKPiArCX0KPiAgIAo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKPiBpbmRleCA1Yjg0MjMxOGVkYmMuLmU2MTFkZmIyNTQz ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VuY29yZS5jCj4gQEAgLTE2OTYsMjEgKzE2 OTYsMjEgQEAgaW50IGk5MTVfcmVnX3JlYWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAgIAo+ICAgCWZsYWdzID0gcmVnLT5vZmZzZXQgJiAoZW50cnktPnNpemUgLSAxKTsKPiAgIAo+ IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCWlmIChlbnRy eS0+c2l6ZSA9PSA4ICYmIGZsYWdzID09IEk5MTVfUkVHX1JFQURfOEJfV0EpCj4gLQkJcmVnLT52 YWwgPSBJOTE1X1JFQUQ2NF8yeDMyKGVudHJ5LT5vZmZzZXRfbGR3LAo+IC0JCQkJCSAgICBlbnRy eS0+b2Zmc2V0X3Vkdyk7Cj4gLQllbHNlIGlmIChlbnRyeS0+c2l6ZSA9PSA4ICYmIGZsYWdzID09 IDApCj4gLQkJcmVnLT52YWwgPSBJOTE1X1JFQUQ2NChlbnRyeS0+b2Zmc2V0X2xkdyk7Cj4gLQll bHNlIGlmIChlbnRyeS0+c2l6ZSA9PSA0ICYmIGZsYWdzID09IDApCj4gLQkJcmVnLT52YWwgPSBJ OTE1X1JFQUQoZW50cnktPm9mZnNldF9sZHcpOwo+IC0JZWxzZSBpZiAoZW50cnktPnNpemUgPT0g MiAmJiBmbGFncyA9PSAwKQo+IC0JCXJlZy0+dmFsID0gSTkxNV9SRUFEMTYoZW50cnktPm9mZnNl dF9sZHcpOwo+IC0JZWxzZSBpZiAoZW50cnktPnNpemUgPT0gMSAmJiBmbGFncyA9PSAwKQo+IC0J CXJlZy0+dmFsID0gSTkxNV9SRUFEOChlbnRyeS0+b2Zmc2V0X2xkdyk7Cj4gLQllbHNlCj4gLQkJ cmV0ID0gLUVJTlZBTDsKPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2LCB3YWtlcmVm KTsKPiArCXdpdGhfaW50ZWxfcnVudGltZV9wbShkZXZfcHJpdiwgd2FrZXJlZikgewo+ICsJCWlm IChlbnRyeS0+c2l6ZSA9PSA4ICYmIGZsYWdzID09IEk5MTVfUkVHX1JFQURfOEJfV0EpCj4gKwkJ CXJlZy0+dmFsID0gSTkxNV9SRUFENjRfMngzMihlbnRyeS0+b2Zmc2V0X2xkdywKPiArCQkJCQkJ ICAgIGVudHJ5LT5vZmZzZXRfdWR3KTsKPiArCQllbHNlIGlmIChlbnRyeS0+c2l6ZSA9PSA4ICYm IGZsYWdzID09IDApCj4gKwkJCXJlZy0+dmFsID0gSTkxNV9SRUFENjQoZW50cnktPm9mZnNldF9s ZHcpOwo+ICsJCWVsc2UgaWYgKGVudHJ5LT5zaXplID09IDQgJiYgZmxhZ3MgPT0gMCkKPiArCQkJ cmVnLT52YWwgPSBJOTE1X1JFQUQoZW50cnktPm9mZnNldF9sZHcpOwo+ICsJCWVsc2UgaWYgKGVu dHJ5LT5zaXplID09IDIgJiYgZmxhZ3MgPT0gMCkKPiArCQkJcmVnLT52YWwgPSBJOTE1X1JFQUQx NihlbnRyeS0+b2Zmc2V0X2xkdyk7Cj4gKwkJZWxzZSBpZiAoZW50cnktPnNpemUgPT0gMSAmJiBm bGFncyA9PSAwKQo+ICsJCQlyZWctPnZhbCA9IEk5MTVfUkVBRDgoZW50cnktPm9mZnNldF9sZHcp Owo+ICsJCWVsc2UKPiArCQkJcmV0ID0gLUVJTlZBTDsKPiArCX0KPiAgIAo+ICAgCXJldHVybiBy ZXQ7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtLmMKPiBp bmRleCA4OTZmMGIzN2IzNGMuLjhkYjI3MjBiODAyOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbS5jCj4gQEAgLTk4LDI2ICs5OCwyMiBAQCBzdGF0aWMgdm9p ZCBwbV9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgewo+ICAgCWlu dGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9w bV9nZXQoaTkxNSk7Cj4gLQo+IC0JaTkxNV9nZW1fc3VzcGVuZF9ndHRfbWFwcGluZ3MoaTkxNSk7 Cj4gLQlpOTE1X2dlbV9zdXNwZW5kX2xhdGUoaTkxNSk7Cj4gLQo+IC0JaW50ZWxfcnVudGltZV9w bV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2Fr ZXJlZikgewo+ICsJCWk5MTVfZ2VtX3N1c3BlbmRfZ3R0X21hcHBpbmdzKGk5MTUpOwo+ICsJCWk5 MTVfZ2VtX3N1c3BlbmRfbGF0ZShpOTE1KTsKPiArCX0KPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZv aWQgcG1faGliZXJuYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgewo+ICAg CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICAgCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGlt ZV9wbV9nZXQoaTkxNSk7Cj4gLQo+IC0JaTkxNV9nZW1fc3VzcGVuZF9ndHRfbWFwcGluZ3MoaTkx NSk7Cj4gLQo+IC0JaTkxNV9nZW1fZnJlZXplKGk5MTUpOwo+IC0JaTkxNV9nZW1fZnJlZXplX2xh dGUoaTkxNSk7Cj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikgewo+ICsJ CWk5MTVfZ2VtX3N1c3BlbmRfZ3R0X21hcHBpbmdzKGk5MTUpOwo+ICAgCj4gLQlpbnRlbF9ydW50 aW1lX3BtX3B1dChpOTE1LCB3YWtlcmVmKTsKPiArCQlpOTE1X2dlbV9mcmVlemUoaTkxNSk7Cj4g KwkJaTkxNV9nZW1fZnJlZXplX2xhdGUoaTkxNSk7Cj4gKwl9Cj4gICB9Cj4gICAKPiAgIHN0YXRp YyB2b2lkIHBtX3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiBAQCAtMTI4 LDEzICsxMjQsMTEgQEAgc3RhdGljIHZvaWQgcG1fcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1KQo+ICAgCSAqIEJvdGggc3VzcGVuZCBhbmQgaGliZXJuYXRlIGZvbGxvdyB0aGUg c2FtZSB3YWtldXAgcGF0aCBhbmQgYXNzdW1lCj4gICAJICogdGhhdCBydW50aW1lLXBtIGp1c3Qg d29ya3MuCj4gICAJICovCj4gLQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7 Cj4gLQo+IC0JaW50ZWxfZW5naW5lc19zYW5pdGl6ZShpOTE1KTsKPiAtCWk5MTVfZ2VtX3Nhbml0 aXplKGk5MTUpOwo+IC0JaTkxNV9nZW1fcmVzdW1lKGk5MTUpOwo+IC0KPiAtCWludGVsX3J1bnRp bWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+ICsJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUs IHdha2VyZWYpIHsKPiArCQlpbnRlbF9lbmdpbmVzX3Nhbml0aXplKGk5MTUpOwo+ICsJCWk5MTVf Z2VtX3Nhbml0aXplKGk5MTUpOwo+ICsJCWk5MTVfZ2VtX3Jlc3VtZShpOTE1KTsKPiArCX0KPiAg IH0KPiAgIAo+ICAgc3RhdGljIGludCBpZ3RfZ2VtX3N1c3BlbmQodm9pZCAqYXJnKQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+IGlu ZGV4IGU1ZGI3MWUzOTkxZC4uYzdjODkxYTI4N2Y1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jCj4gQEAgLTU4MCw5ICs1ODAs OSBAQCBzdGF0aWMgaW50IGlndF9jdHhfZXhlYyh2b2lkICphcmcpCj4gICAJCQkJfQo+ICAgCQkJ fQo+ICAgCj4gLQkJCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChpOTE1KTsKPiAtCQkJ ZXJyID0gZ3B1X2ZpbGwob2JqLCBjdHgsIGVuZ2luZSwgZHcpOwo+IC0JCQlpbnRlbF9ydW50aW1l X3BtX3B1dChpOTE1LCB3YWtlcmVmKTsKPiArCQkJZXJyID0gMDsKPiArCQkJd2l0aF9pbnRlbF9y dW50aW1lX3BtKGk5MTUsIHdha2VyZWYpCj4gKwkJCQllcnIgPSBncHVfZmlsbChvYmosIGN0eCwg ZW5naW5lLCBkdyk7Cj4gICAJCQlpZiAoZXJyKSB7Cj4gICAJCQkJcHJfZXJyKCJGYWlsZWQgdG8g ZmlsbCBkd29yZCAlbHUgWyVsdS8lbHVdIHdpdGggZ3B1ICglcykgaW4gY3R4ICV1IFtmdWxsLXBw Z3R0PyAlc10sIGVycj0lZFxuIiwKPiAgIAkJCQkgICAgICAgbmR3b3JkcywgZHcsIG1heF9kd29y ZHMob2JqKSwKPiBAQCAtNjgzLDkgKzY4Myw5IEBAIHN0YXRpYyBpbnQgaWd0X2N0eF9yZWFkb25s eSh2b2lkICphcmcpCj4gICAJCQkJCWk5MTVfZ2VtX29iamVjdF9zZXRfcmVhZG9ubHkob2JqKTsK PiAgIAkJCX0KPiAgIAo+IC0JCQl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7 Cj4gLQkJCWVyciA9IGdwdV9maWxsKG9iaiwgY3R4LCBlbmdpbmUsIGR3KTsKPiAtCQkJaW50ZWxf cnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gKwkJCWVyciA9IDA7Cj4gKwkJCXdpdGhf aW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtlcmVmKQo+ICsJCQkJZXJyID0gZ3B1X2ZpbGwob2Jq LCBjdHgsIGVuZ2luZSwgZHcpOwo+ICAgCQkJaWYgKGVycikgewo+ICAgCQkJCXByX2VycigiRmFp bGVkIHRvIGZpbGwgZHdvcmQgJWx1IFslbHUvJWx1XSB3aXRoIGdwdSAoJXMpIGluIGN0eCAldSBb ZnVsbC1wcGd0dD8gJXNdLCBlcnI9JWRcbiIsCj4gICAJCQkJICAgICAgIG5kd29yZHMsIGR3LCBt YXhfZHdvcmRzKG9iaiksCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X2dlbV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2dlbV9vYmplY3QuYwo+IGluZGV4IDEzZDRkYzVlOGRmYi4uNTcyMDE2YTQ1YTU5IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3Qu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9vYmplY3Qu Ywo+IEBAIC01MDYsOSArNTA2LDggQEAgc3RhdGljIHZvaWQgZGlzYWJsZV9yZXRpcmVfd29ya2Vy KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCWlmICghaTkxNS0+Z3QuYWN0aXZl X3JlcXVlc3RzKyspIHsKPiAgIAkJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gICAKPiAtCQl3 YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gLQkJaTkxNV9nZW1fdW5wYXJr KGk5MTUpOwo+IC0JCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdha2VyZWYpOwo+ICsJCXdp dGhfaW50ZWxfcnVudGltZV9wbShpOTE1LCB3YWtlcmVmKQo+ICsJCQlpOTE1X2dlbV91bnBhcmso aTkxNSk7Cj4gICAJfQo+ICAgCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gICAKPiBAQCAtNTkwLDEwICs1ODksMTAgQEAgc3RhdGljIGludCBpZ3RfbW1hcF9vZmZzZXRf ZXhoYXVzdGlvbih2b2lkICphcmcpCj4gICAJCQlnb3RvIG91dDsKPiAgIAkJfQo+ICAgCj4gKwkJ ZXJyID0gMDsKPiAgIAkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQkJ d2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwo+IC0JCWVyciA9IG1ha2Vfb2Jq X2J1c3kob2JqKTsKPiAtCQlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3YWtlcmVmKTsKPiAr CQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikKPiArCQkJZXJyID0gbWFrZV9v YmpfYnVzeShvYmopOwo+ICAgCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+ICAgCQlpZiAoZXJyKSB7Cj4gICAJCQlwcl9lcnIoIltsb29wICVkXSBGYWlsZWQgdG8gYnVz eSB0aGUgb2JqZWN0XG4iLCBsb29wKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMuYwo+IGluZGV4IDBkYjYzZWIyNGRmYy4uZTJiNTQy YzZiZmIxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRl bF93b3JrYXJvdW5kcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX3dvcmthcm91bmRzLmMKPiBAQCAtNDUsOSArNDUsOSBAQCByZWFkX25vbnByaXZzKHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgIAlpZiAoZXJyKQo+ICAgCQlnb3RvIGVycl9vYmo7Cj4gICAKPiAtCXdha2VyZWYgPSBpbnRl bF9ydW50aW1lX3BtX2dldChlbmdpbmUtPmk5MTUpOwo+IC0JcnEgPSBpOTE1X3JlcXVlc3RfYWxs b2MoZW5naW5lLCBjdHgpOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZW5naW5lLT5pOTE1LCB3 YWtlcmVmKTsKPiArCXJxID0gRVJSX1BUUigtRU5PREVWKTsKPiArCXdpdGhfaW50ZWxfcnVudGlt ZV9wbShlbmdpbmUtPmk5MTUsIHdha2VyZWYpCj4gKwkJcnEgPSBpOTE1X3JlcXVlc3RfYWxsb2Mo ZW5naW5lLCBjdHgpOwo+ICAgCWlmIChJU19FUlIocnEpKSB7Cj4gICAJCWVyciA9IFBUUl9FUlIo cnEpOwo+ICAgCQlnb3RvIGVycl9waW47Cj4gQEAgLTE3OSw5ICsxNzksOSBAQCBzdGF0aWMgaW50 IHN3aXRjaF90b19zY3JhdGNoX2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAgCWlmIChJU19FUlIoY3R4KSkKPiAgIAkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKPiAgIAo+ IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KGVuZ2luZS0+aTkxNSk7Cj4gLQlycSA9 IGk5MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1 dChlbmdpbmUtPmk5MTUsIHdha2VyZWYpOwo+ICsJcnEgPSBFUlJfUFRSKC1FTk9ERVYpOwo+ICsJ d2l0aF9pbnRlbF9ydW50aW1lX3BtKGVuZ2luZS0+aTkxNSwgd2FrZXJlZikKPiArCQlycSA9IGk5 MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7Cj4gICAKPiAgIAlrZXJuZWxfY29udGV4dF9j bG9zZShjdHgpOwo+ICAgCWlmIChJU19FUlIocnEpKQo+IApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK