From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 1/9] drm/i915: Remove HW semaphores for gen7 inter-engine synchronisation Date: Fri, 28 Dec 2018 13:37:32 +0200 Message-ID: <87ftuh6fwj.fsf@gaia.fi.intel.com> References: <20181219145747.19835-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 603896E4BC for ; Fri, 28 Dec 2018 11:39:03 +0000 (UTC) In-Reply-To: <20181219145747.19835-1-chris@chris-wilson.co.uk> 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 Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gVGhlIHdy aXRpbmcgaXMgb24gdGhlIHdhbGwgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYSBzaW5nbGUgZXhlY3V0 aW9uIHF1ZXVlCj4gYWxvbmcgZWFjaCBlbmdpbmUsIGFuZCBhcyBhIGNvbnNlcXVlbmNlIHdlIHdp bGwgbm90IGJlIGFibGUgdG8gdHJhY2sKPiBkZXBlbmRlbmNpZXMgYWxvbmcgdGhlIEhXIHF1ZXVl IGl0c2VsZiwgaS5lLiB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZQo+IEhXIHNlbWFwaG9yZXMg b24gZ2VuNyBhcyB0aGV5IHVzZSBhIGdsb2JhbCBzZXQgb2YgcmVnaXN0ZXJzIChhbmQgdW5saWtl Cj4gZ2VuOCsgd2UgY2FuIG5vdCBlZmZlY3RpdmVseSB0YXJnZXQgbWVtb3J5IHRvIGtlZXAgcGVy LWNvbnRleHQgc2Vxbm8gYW5kCj4gZGVwZW5kZW5jaWVzKS4KPgo+IE9uIHRoZSBwb3NpdGl2ZSBz aWRlLCB3aGVuIHdlIGltcGxlbWVudCByZXF1ZXN0IHJlb3JkZXJpbmcgZm9yIGdlbjcgd2UKPiBj b3VsZCBhbHNvIG5vdCBwcmVzdW1lIGEgc2ltcGxlIGV4ZWN1dGlvbiBxdWV1ZSBhbmQgd291bGQg YWxzbyByZXF1aXJlCj4gcmVtb3ZpbmcgdGhlIGN1cnJlbnQgc2VtYXBob3JlIGdlbmVyYXRpb24g Y29kZS4gU28gdGhpcyBicmluZyB1cyBhbm90aGVyCj4gc3RlcCBjbG9zZXIgdG8gcmVxdWVzdCBy ZW9yZGVyaW5nIQo+Cj4gVGhlIG5lZ2F0aXZlIHNpZGUgaXMgdGhhdCB1c2luZyBpbnRlcnJ1cHRz IHRvIGRyaXZlIGludGVyLWVuZ2luZQo+IHN5bmNocm9uaXNhdGlvbiBpcyBtdWNoIHNsb3dlciAo NHVzIC0+IDE1dXMgdG8gZG8gYSBub3Agb24gZWFjaCBvZiB0aGUgMwo+IGVuZ2luZXMgb24gaXZi KS4gVGhpcyBpcyBtdWNoIGJldHRlciB0aGFuIGl0IGF0IHRoZSB0aW1lIG9mIGludHJvZHVjaW5n Cj4gdGhlIEhXIHNlbWFwaG9yZXMgYW5kIGVxdWFsbHkgaW1wb3J0YW50bHkgdXNlcnNwYWNlIHdl YW5lZCBpdHNlbGYgb2YKCnMvb2Yvb2ZmID8KCj4gaW50ZXJtaXhpbmcgZGVwZW5kZW50IEJMVC9S RU5ERVIgb3BlcmF0aW9ucyAodGhlIHByaW1lIGN1bHByaXQgd2FzIGdseXBoCj4gcmVuZGVyaW5n IGluIFVYQSkuIFNvIHdoaWxlIHdlIHJlZ3Jlc3MgdGhlIG1pY3JvYmVuY2htYXJrcyBpdCBzaG91 bGQgbm90Cj4gaW1wYWN0IHRoZSB1c2VyLgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZGVidWdmcy5jICAgICB8ICAxOSArLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYyAgICAgICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggICAgICAgICB8ICAgMyAtCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAg ICAgICB8ICAgNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyAgICAg fCAxMjYgKy0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVs aW5lLmggICAgfCAgIDggLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3Mu YyAgfCAgMjkgKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oYW5nY2hlY2suYyAg fCAxNTUgLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5jIHwgMTg3ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggfCAgNTYgKy0tLS0tLQo+ICAxMCBmaWxlcyBj aGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA1NzQgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RlYnVnZnMuYwo+IGluZGV4IDc3NDg2YTYxNDYxNC4uYjBiZGYzYzBkNzc2IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBAQCAtMTA0MSwyMSArMTA0MSw3 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk5MTVfZXJyb3Jfc3RhdGVf Zm9wcyA9IHsKPiAgc3RhdGljIGludAo+ICBpOTE1X25leHRfc2Vxbm9fc2V0KHZvaWQgKmRhdGEs IHU2NCB2YWwpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRh dGE7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07Cj4gLQlpbnQg cmV0Owo+IC0KPiAtCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCWludGVsX3J1bnRp bWVfcG1fZ2V0KGRldl9wcml2KTsKPiAtCXJldCA9IGk5MTVfZ2VtX3NldF9nbG9iYWxfc2Vxbm8o ZGV2LCB2YWwpOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwo+IC0KPiAtCW11 dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gKwly ZXR1cm4gdmFsID8gMCA6IC1FSU5WQUw7CgpUaGlzIGJlZ3MgdG8gbWVldCBpdCdzIG1ha2VyIHNv b24uCgpJIGRpZG4ndCBmaW5kIGFueXRoaW5nIGVsc2UgaW4gdGhpcyBwYXRjaCwgc28gbG9va3MK b2sgYW5kIHdoYXQgYSBjbHVtcCBvZiBjb21waWxhdGVkIGNvZGUgd2UgY2FuIGdldCByaWQgb2Zm IQpDb2RlIHRoYXQgd2UgaGF2ZSBkcmFnZ2VkIGFsb25nIHdpdGggbm8gc21hbGwgYW1vdW50IG9m CnN1ZmZlcmluZy4gSSBhbSBpbiBmYXZvdXIuCgpSZXZpZXdlZC1ieTogTWlrYSBLdW9wcGFsYSA8 bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Cgo+ICB9Cj4gIAo+ICBERUZJTkVfU0lNUExF X0FUVFJJQlVURShpOTE1X25leHRfc2Vxbm9fZm9wcywKPiBAQCAtNDIxOSw5ICs0MjA1LDYgQEAg aTkxNV9kcm9wX2NhY2hlc19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKPiAgCQkJCQkJICAgICBJ OTE1X1dBSVRfTE9DS0VELAo+ICAJCQkJCQkgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPiAg Cj4gLQkJaWYgKHJldCA9PSAwICYmIHZhbCAmIERST1BfUkVTRVRfU0VRTk8pCj4gLQkJCXJldCA9 IGk5MTVfZ2VtX3NldF9nbG9iYWxfc2Vxbm8oJmk5MTUtPmRybSwgMSk7Cj4gLQo+ICAJCWlmICh2 YWwgJiBEUk9QX1JFVElSRSkKPiAgCQkJaTkxNV9yZXRpcmVfcmVxdWVzdHMoaTkxNSk7Cj4gIAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IGluZGV4IGNhYTA1NWFjOTQ3Mi4uZGNiOTM1MzM4YzYz IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gQEAgLTM0OSw3ICszNDksNyBAQCBzdGF0 aWMgaW50IGk5MTVfZ2V0cGFyYW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKPiAgCQl2YWx1ZSA9IG1pbl90KGludCwgSU5URUxfUFBHVFQoZGV2X3ByaXYpLCBJOTE1 X0dFTV9QUEdUVF9GVUxMKTsKPiAgCQlicmVhazsKPiAgCWNhc2UgSTkxNV9QQVJBTV9IQVNfU0VN QVBIT1JFUzoKPiAtCQl2YWx1ZSA9IEhBU19MRUdBQ1lfU0VNQVBIT1JFUyhkZXZfcHJpdik7Cj4g KwkJdmFsdWUgPSAwOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSBJOTE1X1BBUkFNX0hBU19TRUNVUkVf QkFUQ0hFUzoKPiAgCQl2YWx1ZSA9IGNhcGFibGUoQ0FQX1NZU19BRE1JTik7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4gaW5kZXggODE1ZGIxNjBiOTY2Li43ZGE2NTNlY2U0ZGQgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTk0OCw3ICsxOTQ4LDYgQEAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgewo+ICAJCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX3JpbmdzOwo+ICAJCXN0 cnVjdCBsaXN0X2hlYWQgY2xvc2VkX3ZtYTsKPiAgCQl1MzIgYWN0aXZlX3JlcXVlc3RzOwo+IC0J CXUzMiByZXF1ZXN0X3NlcmlhbDsKPiAgCj4gIAkJLyoqCj4gIAkJICogSXMgdGhlIEdQVSBjdXJy ZW50bHkgY29uc2lkZXJlZCBpZGxlLCBvciBidXN5IGV4ZWN1dGluZwo+IEBAIC0yMzk0LDggKzIz OTMsNiBAQCBpbnRlbF9pbmZvKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAgI2RlZmluZSBIQVNfQkxUKGRldl9wcml2KQlIQVNfRU5HSU5FKGRldl9wcml2LCBCQ1Mp Cj4gICNkZWZpbmUgSEFTX1ZFQk9YKGRldl9wcml2KQlIQVNfRU5HSU5FKGRldl9wcml2LCBWRUNT KQo+ICAKPiAtI2RlZmluZSBIQVNfTEVHQUNZX1NFTUFQSE9SRVMoZGV2X3ByaXYpIElTX0dFTihk ZXZfcHJpdiwgNykKPiAtCj4gICNkZWZpbmUgSEFTX0xMQyhkZXZfcHJpdikJKChkZXZfcHJpdikt PmluZm8uaGFzX2xsYykKPiAgI2RlZmluZSBIQVNfU05PT1AoZGV2X3ByaXYpCSgoZGV2X3ByaXYp LT5pbmZvLmhhc19zbm9vcCkKPiAgI2RlZmluZSBIQVNfRURSQU0oZGV2X3ByaXYpCSghISgoZGV2 X3ByaXYpLT5lZHJhbV9jYXAgJiBFRFJBTV9FTkFCTEVEKSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKPiBpbmRleCBkOTIxNDdhYjQ0ODkuLmY0MjU0ZTAxMjYyMCAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+IEBAIC0zMzE4LDcgKzMzMTgsNyBAQCBzdGF0aWMgdm9pZCBub3Bfc3VibWl0 X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiAgCj4gIAlzcGluX2xvY2tf aXJxc2F2ZSgmcmVxdWVzdC0+ZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7Cj4gIAlfX2k5 MTVfcmVxdWVzdF9zdWJtaXQocmVxdWVzdCk7Cj4gLQlpbnRlbF9lbmdpbmVfaW5pdF9nbG9iYWxf c2Vxbm8ocmVxdWVzdC0+ZW5naW5lLCByZXF1ZXN0LT5nbG9iYWxfc2Vxbm8pOwo+ICsJaW50ZWxf ZW5naW5lX3dyaXRlX2dsb2JhbF9zZXFubyhyZXF1ZXN0LT5lbmdpbmUsIHJlcXVlc3QtPmdsb2Jh bF9zZXFubyk7Cj4gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZXF1ZXN0LT5lbmdpbmUtPnRp bWVsaW5lLmxvY2ssIGZsYWdzKTsKPiAgfQo+ICAKPiBAQCAtMzM1OSw3ICszMzU5LDcgQEAgdm9p ZCBpOTE1X2dlbV9zZXRfd2VkZ2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAK PiAgCS8qCj4gIAkgKiBNYWtlIHN1cmUgbm8gcmVxdWVzdCBjYW4gc2xpcCB0aHJvdWdoIHdpdGhv dXQgZ2V0dGluZyBjb21wbGV0ZWQgYnkKPiAtCSAqIGVpdGhlciB0aGlzIGNhbGwgaGVyZSB0byBp bnRlbF9lbmdpbmVfaW5pdF9nbG9iYWxfc2Vxbm8sIG9yIHRoZSBvbmUKPiArCSAqIGVpdGhlciB0 aGlzIGNhbGwgaGVyZSB0byBpbnRlbF9lbmdpbmVfd3JpdGVfZ2xvYmFsX3NlcW5vLCBvciB0aGUg b25lCj4gIAkgKiBpbiBub3Bfc3VibWl0X3JlcXVlc3QuCj4gIAkgKi8KPiAgCXN5bmNocm9uaXpl X3JjdSgpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3Qu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4gaW5kZXggNjM3OTA5YzU5 ZjFmLi42Y2VkY2ZlYTMzYjUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZXF1ZXN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+ IEBAIC0xMTEsOTkgKzExMSwxMCBAQCBpOTE1X3JlcXVlc3RfcmVtb3ZlX2Zyb21fY2xpZW50KHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCj4gIAlzcGluX3VubG9jaygmZmlsZV9wcml2LT5t bS5sb2NrKTsKPiAgfQo+ICAKPiAtc3RhdGljIGludCByZXNldF9hbGxfZ2xvYmFsX3NlcW5vKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1MzIgc2Vxbm8pCj4gK3N0YXRpYyB2b2lkIHJl c2VydmVfZ3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIHsKPiAtCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCXN0cnVjdCBpOTE1X3RpbWVsaW5lICp0aW1lbGlu ZTsKPiAtCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+IC0JaW50IHJldDsKPiAtCj4gLQkvKiBD YXJlZnVsbHkgcmV0aXJlIGFsbCByZXF1ZXN0cyB3aXRob3V0IHdyaXRpbmcgdG8gdGhlIHJpbmdz ICovCj4gLQlyZXQgPSBpOTE1X2dlbV93YWl0X2Zvcl9pZGxlKGk5MTUsCj4gLQkJCQkgICAgIEk5 MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwKPiAtCQkJCSAgICAgSTkxNV9XQUlUX0xPQ0tFRCwKPiAt CQkJCSAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4g cmV0Owo+IC0KPiAtCUdFTV9CVUdfT04oaTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKTsKPiAtCj4g LQkvKiBJZiB0aGUgc2Vxbm8gd3JhcHMgYXJvdW5kLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBicmVh ZGNydW1iIHJidHJlZSAqLwo+IC0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsK PiAtCQlHRU1fVFJBQ0UoIiVzIHNlcW5vICVkIChjdXJyZW50ICVkKSAtPiAlZFxuIiwKPiAtCQkJ ICBlbmdpbmUtPm5hbWUsCj4gLQkJCSAgZW5naW5lLT50aW1lbGluZS5zZXFubywKPiAtCQkJICBp bnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSksCj4gLQkJCSAgc2Vxbm8pOwo+IC0KPiAtCQlp ZiAoc2Vxbm8gPT0gZW5naW5lLT50aW1lbGluZS5zZXFubykKPiAtCQkJY29udGludWU7Cj4gLQo+ IC0JCWt0aHJlYWRfcGFyayhlbmdpbmUtPmJyZWFkY3J1bWJzLnNpZ25hbGVyKTsKPiAtCj4gLQkJ aWYgKCFpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgZW5naW5lLT50aW1lbGluZS5zZXFubykpIHsK PiAtCQkJLyogRmx1c2ggYW55IHdhaXRlcnMgYmVmb3JlIHdlIHJldXNlIHRoZSBzZXFubyAqLwo+ IC0JCQlpbnRlbF9lbmdpbmVfZGlzYXJtX2JyZWFkY3J1bWJzKGVuZ2luZSk7Cj4gLQkJCWludGVs X2VuZ2luZV9pbml0X2hhbmdjaGVjayhlbmdpbmUpOwo+IC0JCQlHRU1fQlVHX09OKCFsaXN0X2Vt cHR5KCZlbmdpbmUtPmJyZWFkY3J1bWJzLnNpZ25hbHMpKTsKPiAtCQl9Cj4gLQo+IC0JCS8qIENo ZWNrIHdlIGFyZSBpZGxlIGJlZm9yZSB3ZSBmaWRkbGUgd2l0aCBodyBzdGF0ZSEgKi8KPiAtCQlH RU1fQlVHX09OKCFpbnRlbF9lbmdpbmVfaXNfaWRsZShlbmdpbmUpKTsKPiAtCQlHRU1fQlVHX09O KGk5MTVfZ2VtX2FjdGl2ZV9pc3NldCgmZW5naW5lLT50aW1lbGluZS5sYXN0X3JlcXVlc3QpKTsK PiAtCj4gLQkJLyogRmluYWxseSByZXNldCBodyBzdGF0ZSAqLwo+IC0JCWludGVsX2VuZ2luZV9p bml0X2dsb2JhbF9zZXFubyhlbmdpbmUsIHNlcW5vKTsKPiAtCQllbmdpbmUtPnRpbWVsaW5lLnNl cW5vID0gc2Vxbm87Cj4gLQo+IC0JCWt0aHJlYWRfdW5wYXJrKGVuZ2luZS0+YnJlYWRjcnVtYnMu c2lnbmFsZXIpOwo+IC0JfQo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkodGltZWxpbmUsICZp OTE1LT5ndC50aW1lbGluZXMsIGxpbmspCj4gLQkJbWVtc2V0KHRpbWVsaW5lLT5nbG9iYWxfc3lu YywgMCwgc2l6ZW9mKHRpbWVsaW5lLT5nbG9iYWxfc3luYykpOwo+IC0KPiAtCWk5MTUtPmd0LnJl cXVlc3Rfc2VyaWFsID0gc2Vxbm87Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLWludCBp OTE1X2dlbV9zZXRfZ2xvYmFsX3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBzZXFu bykKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7 Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g LQo+IC0JaWYgKHNlcW5vID09IDApCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JLyogSFdT IHBhZ2UgbmVlZHMgdG8gYmUgc2V0IGxlc3MgdGhhbiB3aGF0IHdlIHdpbGwgaW5qZWN0IHRvIHJp bmcgKi8KPiAtCXJldHVybiByZXNldF9hbGxfZ2xvYmFsX3NlcW5vKGk5MTUsIHNlcW5vIC0gMSk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcmVzZXJ2ZV9ndChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKPiAtewo+IC0JaW50IHJldDsKPiAtCj4gLQkvKgo+IC0JICogUmVzZXJ2YXRpb24g aXMgZmluZSB1bnRpbCB3ZSBtYXkgbmVlZCB0byB3cmFwIGFyb3VuZAo+IC0JICoKPiAtCSAqIEJ5 IGluY3JlbWVudGluZyB0aGUgc2VyaWFsIGZvciBldmVyeSByZXF1ZXN0LCB3ZSBrbm93IHRoYXQg bm8KPiAtCSAqIGluZGl2aWR1YWwgZW5naW5lIG1heSBleGNlZWQgdGhhdCBzZXJpYWwgKGFzIGVh Y2ggaXMgcmVzZXQgdG8gMAo+IC0JICogb24gYW55IHdyYXApLiBUaGlzIHByb3RlY3RzIGV2ZW4g dGhlIG1vc3QgcGVzc2ltaXN0aWMgb2YgbWlncmF0aW9ucwo+IC0JICogb2YgZXZlcnkgcmVxdWVz dCBmcm9tIGFsbCBlbmdpbmVzIG9udG8ganVzdCBvbmUuCj4gLQkgKi8KPiAtCXdoaWxlICh1bmxp a2VseSgrK2k5MTUtPmd0LnJlcXVlc3Rfc2VyaWFsID09IDApKSB7Cj4gLQkJcmV0ID0gcmVzZXRf YWxsX2dsb2JhbF9zZXFubyhpOTE1LCAwKTsKPiAtCQlpZiAocmV0KSB7Cj4gLQkJCWk5MTUtPmd0 LnJlcXVlc3Rfc2VyaWFsLS07Cj4gLQkJCXJldHVybiByZXQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAg CWlmICghaTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKyspCj4gIAkJaTkxNV9nZW1fdW5wYXJrKGk5 MTUpOwo+IC0KPiAtCXJldHVybiAwOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCB1bnJlc2VydmVf Z3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gQEAgLTYwOCw5ICs1MTksNyBAQCBp OTE1X3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAJaWYgKElTX0VSUihjZSkpCj4gIAkJcmV0dXJuIEVS Ul9DQVNUKGNlKTsKPiAgCj4gLQlyZXQgPSByZXNlcnZlX2d0KGk5MTUpOwo+IC0JaWYgKHJldCkK PiAtCQlnb3RvIGVycl91bnBpbjsKPiArCXJlc2VydmVfZ3QoaTkxNSk7Cj4gIAo+ICAJcmV0ID0g aW50ZWxfcmluZ193YWl0X2Zvcl9zcGFjZShjZS0+cmluZywgTUlOX1NQQUNFX0ZPUl9BRERfUkVR VUVTVCk7Cj4gIAlpZiAocmV0KQo+IEBAIC03NDMsNyArNjUyLDYgQEAgaTkxNV9yZXF1ZXN0X2Fs bG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eCkKPiAgCWttZW1fY2FjaGVfZnJlZShpOTE1LT5yZXF1ZXN0cywgcnEpOwo+ICBlcnJf dW5yZXNlcnZlOgo+ICAJdW5yZXNlcnZlX2d0KGk5MTUpOwo+IC1lcnJfdW5waW46Cj4gIAlpbnRl bF9jb250ZXh0X3VucGluKGNlKTsKPiAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gIH0KPiBAQCAt NzcxLDM0ICs2NzksMTIgQEAgaTkxNV9yZXF1ZXN0X2F3YWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVf cmVxdWVzdCAqdG8sIHN0cnVjdCBpOTE1X3JlcXVlc3QgKmZyb20pCj4gIAkJcmV0ID0gaTkxNV9z d19mZW5jZV9hd2FpdF9zd19mZW5jZV9nZnAoJnRvLT5zdWJtaXQsCj4gIAkJCQkJCSAgICAgICAm ZnJvbS0+c3VibWl0LAo+ICAJCQkJCQkgICAgICAgSTkxNV9GRU5DRV9HRlApOwo+IC0JCXJldHVy biByZXQgPCAwID8gcmV0IDogMDsKPiAtCX0KPiAtCj4gLQlpZiAodG8tPmVuZ2luZS0+c2VtYXBo b3JlLnN5bmNfdG8pIHsKPiAtCQl1MzIgc2Vxbm87Cj4gLQo+IC0JCUdFTV9CVUdfT04oIWZyb20t PmVuZ2luZS0+c2VtYXBob3JlLnNpZ25hbCk7Cj4gLQo+IC0JCXNlcW5vID0gaTkxNV9yZXF1ZXN0 X2dsb2JhbF9zZXFubyhmcm9tKTsKPiAtCQlpZiAoIXNlcW5vKQo+IC0JCQlnb3RvIGF3YWl0X2Rt YV9mZW5jZTsKPiAtCj4gLQkJaWYgKHNlcW5vIDw9IHRvLT50aW1lbGluZS0+Z2xvYmFsX3N5bmNb ZnJvbS0+ZW5naW5lLT5pZF0pCj4gLQkJCXJldHVybiAwOwo+IC0KPiAtCQl0cmFjZV9pOTE1X2dl bV9yaW5nX3N5bmNfdG8odG8sIGZyb20pOwo+IC0JCXJldCA9IHRvLT5lbmdpbmUtPnNlbWFwaG9y ZS5zeW5jX3RvKHRvLCBmcm9tKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+IC0K PiAtCQl0by0+dGltZWxpbmUtPmdsb2JhbF9zeW5jW2Zyb20tPmVuZ2luZS0+aWRdID0gc2Vxbm87 Cj4gLQkJcmV0dXJuIDA7Cj4gKwl9IGVsc2Ugewo+ICsJCXJldCA9IGk5MTVfc3dfZmVuY2VfYXdh aXRfZG1hX2ZlbmNlKCZ0by0+c3VibWl0LAo+ICsJCQkJCQkgICAgJmZyb20tPmZlbmNlLCAwLAo+ ICsJCQkJCQkgICAgSTkxNV9GRU5DRV9HRlApOwo+ICAJfQo+ICAKPiAtYXdhaXRfZG1hX2ZlbmNl Ogo+IC0JcmV0ID0gaTkxNV9zd19mZW5jZV9hd2FpdF9kbWFfZmVuY2UoJnRvLT5zdWJtaXQsCj4g LQkJCQkJICAgICZmcm9tLT5mZW5jZSwgMCwKPiAtCQkJCQkgICAgSTkxNV9GRU5DRV9HRlApOwo+ ICAJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3RpbWVsaW5lLmgKPiBpbmRleCBlYmQ3MWI0ODcyMjAuLjM4YzFlMTVlOTI3YSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lLmgKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lLmgKPiBAQCAtNjMsMTQgKzYzLDYgQEAgc3Ry dWN0IGk5MTVfdGltZWxpbmUgewo+ICAJICogcmVkdW5kYW50IGFuZCB3ZSBjYW4gZGlzY2FyZCBp dCB3aXRob3V0IGxvc3Mgb2YgZ2VuZXJhbGl0eS4KPiAgCSAqLwo+ICAJc3RydWN0IGk5MTVfc3lu Y21hcCAqc3luYzsKPiAtCS8qKgo+IC0JICogU2VwYXJhdGVseSB0byB0aGUgaW50ZXItY29udGV4 dCBzZXFubyBtYXAgYWJvdmUsIHdlIHRyYWNrIHRoZSBsYXN0Cj4gLQkgKiBiYXJyaWVyIChlLmcu IHNlbWFwaG9yZSB3YWl0KSB0byB0aGUgZ2xvYmFsIGVuZ2luZSB0aW1lbGluZXMuIE5vdGUKPiAt CSAqIHRoYXQgdGhpcyB0cmFja3MgZ2xvYmFsX3NlcW5vIHJhdGhlciB0aGFuIHRoZSBjb250ZXh0 LnNlcW5vLCBhbmQKPiAtCSAqIHNvIGl0IGlzIHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9m IGh3IHdyYXBhcm91bmQgYW5kIHRoYXQgd2UKPiAtCSAqIG1heSBuZWVkIHRvIHJldm9rZSBnbG9i YWxfc2Vxbm8gKG9uIHByZS1lbXB0aW9uKS4KPiAtCSAqLwo+IC0JdTMyIGdsb2JhbF9zeW5jW0k5 MTVfTlVNX0VOR0lORVNdOwo+ICAKPiAgCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiAgCWNvbnN0 IGNoYXIgKm5hbWU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Vu Z2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKPiBpbmRl eCBkM2RlYzMxZGYxMjMuLjE0NjJiYjQ5ZjQyMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2VuZ2luZV9jcy5jCj4gQEAgLTQ1NCwyNSArNDU0LDggQEAgaW50IGludGVsX2VuZ2luZXNf aW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAlyZXR1cm4gZXJyOwo+ ICB9Cj4gIAo+IC12b2lkIGludGVsX2VuZ2luZV9pbml0X2dsb2JhbF9zZXFubyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBzZXFubykKPiArdm9pZCBpbnRlbF9lbmdpbmVfd3Jp dGVfZ2xvYmFsX3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIHNlcW5v KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5 MTU7Cj4gLQo+IC0JLyogT3VyIHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiBpcyBzdHJpY3RseSBt b25vdG9uaWMgKGkuZS4gd2UgcHJvY2VlZAo+IC0JICogc28gbG9uZyBhcyB0aGUgc2VtYXBob3Jl IHZhbHVlIGluIHRoZSByZWdpc3Rlci9wYWdlIGlzIGdyZWF0ZXIKPiAtCSAqIHRoYW4gdGhlIHN5 bmMgdmFsdWUpLCBzbyB3aGVuZXZlciB3ZSByZXNldCB0aGUgc2Vxbm8sCj4gLQkgKiBzbyBsb25n IGFzIHdlIHJlc2V0IHRoZSB0cmFja2luZyBzZW1hcGhvcmUgdmFsdWUgdG8gMCwgaXQgd2lsbAo+ IC0JICogYWx3YXlzIGJlIGJlZm9yZSB0aGUgbmV4dCByZXF1ZXN0J3Mgc2Vxbm8uIElmIHdlIGRv bid0IHJlc2V0Cj4gLQkgKiB0aGUgc2VtYXBob3JlIHZhbHVlLCB0aGVuIHdoZW4gdGhlIHNlcW5v IG1vdmVzIGJhY2t3YXJkcyBhbGwKPiAtCSAqIGZ1dHVyZSB3YWl0cyB3aWxsIGNvbXBsZXRlIGlu c3RhbnRseSAoY2F1c2luZyByZW5kZXJpbmcgY29ycnVwdGlvbikuCj4gLQkgKi8KPiAtCWlmIChJ U19HRU5fUkFOR0UoZGV2X3ByaXYsIDYsIDcpKSB7Cj4gLQkJSTkxNV9XUklURShSSU5HX1NZTkNf MChlbmdpbmUtPm1taW9fYmFzZSksIDApOwo+IC0JCUk5MTVfV1JJVEUoUklOR19TWU5DXzEoZW5n aW5lLT5tbWlvX2Jhc2UpLCAwKTsKPiAtCQlpZiAoSEFTX1ZFQk9YKGRldl9wcml2KSkKPiAtCQkJ STkxNV9XUklURShSSU5HX1NZTkNfMihlbmdpbmUtPm1taW9fYmFzZSksIDApOwo+IC0JfQo+IC0K PiAgCWludGVsX3dyaXRlX3N0YXR1c19wYWdlKGVuZ2luZSwgSTkxNV9HRU1fSFdTX0lOREVYLCBz ZXFubyk7Cj4gIAljbGVhcl9iaXQoRU5HSU5FX0lSUV9CUkVBRENSVU1CLCAmZW5naW5lLT5pcnFf cG9zdGVkKTsKPiAgCj4gQEAgLTEzMDAsMTYgKzEyODMsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9l bmdpbmVfcHJpbnRfcmVnaXN0ZXJzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKPiAgCQlkcm1fcHJpbnRmKG0sICJcdFJJTkdfSU1SOiAlMDh4XG4iLCBJOTE1X1JFQURfSU1S KGVuZ2luZSkpOwo+ICAJfQo+ICAKPiAtCWlmIChIQVNfTEVHQUNZX1NFTUFQSE9SRVMoZGV2X3By aXYpKSB7Cj4gLQkJZHJtX3ByaW50ZihtLCAiXHRTWU5DXzA6IDB4JTA4eFxuIiwKPiAtCQkJICAg STkxNV9SRUFEKFJJTkdfU1lOQ18wKGVuZ2luZS0+bW1pb19iYXNlKSkpOwo+IC0JCWRybV9wcmlu dGYobSwgIlx0U1lOQ18xOiAweCUwOHhcbiIsCj4gLQkJCSAgIEk5MTVfUkVBRChSSU5HX1NZTkNf MShlbmdpbmUtPm1taW9fYmFzZSkpKTsKPiAtCQlpZiAoSEFTX1ZFQk9YKGRldl9wcml2KSkKPiAt CQkJZHJtX3ByaW50ZihtLCAiXHRTWU5DXzI6IDB4JTA4eFxuIiwKPiAtCQkJCSAgIEk5MTVfUkVB RChSSU5HX1NZTkNfMihlbmdpbmUtPm1taW9fYmFzZSkpKTsKPiAtCX0KPiAtCj4gIAlhZGRyID0g aW50ZWxfZW5naW5lX2dldF9hY3RpdmVfaGVhZChlbmdpbmUpOwo+ICAJZHJtX3ByaW50ZihtLCAi XHRBQ1RIRDogIDB4JTA4eF8lMDh4XG4iLAo+ICAJCSAgIHVwcGVyXzMyX2JpdHMoYWRkciksIGxv d2VyXzMyX2JpdHMoYWRkcikpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9oYW5nY2hlY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hhbmdjaGVjay5j Cj4gaW5kZXggNDk1ZmExNDVmMzdmLi5jM2Y5MjlmNTk0MjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9oYW5nY2hlY2suYwo+IEBAIC0yNCwxNDQgKzI0LDYgQEAKPiAgCj4gICNpbmNs dWRlICJpOTE1X2Rydi5oIgo+ICAKPiAtc3RhdGljIGJvb2wKPiAtaXBlaHJfaXNfc2VtYXBob3Jl X3dhaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgaXBlaHIpCj4gLXsKPiAt CWlwZWhyICY9IH5NSV9TRU1BUEhPUkVfU1lOQ19NQVNLOwo+IC0JcmV0dXJuIGlwZWhyID09IChN SV9TRU1BUEhPUkVfTUJPWCB8IE1JX1NFTUFQSE9SRV9DT01QQVJFIHwKPiAtCQkJIE1JX1NFTUFQ SE9SRV9SRUdJU1RFUik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICoKPiAtc2VtYXBob3JlX3dhaXRfdG9fc2lnbmFsbGVyX3Jpbmcoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLCB1MzIgaXBlaHIsCj4gLQkJCQkgdTY0IG9mZnNldCkKPiAtewo+IC0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+IC0JdTMyIHN5 bmNfYml0cyA9IGlwZWhyICYgTUlfU0VNQVBIT1JFX1NZTkNfTUFTSzsKPiAtCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnNpZ25hbGxlcjsKPiAtCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+IC0K PiAtCWZvcl9lYWNoX2VuZ2luZShzaWduYWxsZXIsIGRldl9wcml2LCBpZCkgewo+IC0JCWlmIChl bmdpbmUgPT0gc2lnbmFsbGVyKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYgKHN5bmNfYml0 cyA9PSBzaWduYWxsZXItPnNlbWFwaG9yZS5tYm94LndhaXRbZW5naW5lLT5od19pZF0pCj4gLQkJ CXJldHVybiBzaWduYWxsZXI7Cj4gLQl9Cj4gLQo+IC0JRFJNX0RFQlVHX0RSSVZFUigiTm8gc2ln bmFsbGVyIHJpbmcgZm91bmQgZm9yICVzLCBpcGVociAweCUwOHhcbiIsCj4gLQkJCSBlbmdpbmUt Pm5hbWUsIGlwZWhyKTsKPiAtCj4gLQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiAtfQo+IC0K PiAtc3RhdGljIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgo+IC1zZW1hcGhvcmVfd2FpdHNfZm9y KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpzZXFubykKPiAtewo+IC0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1Owo+IC0Jdm9pZCBf X2lvbWVtICp2YWRkcjsKPiAtCXUzMiBjbWQsIGlwZWhyLCBoZWFkOwo+IC0JdTY0IG9mZnNldCA9 IDA7Cj4gLQlpbnQgaSwgYmFja3dhcmRzOwo+IC0KPiAtCS8qCj4gLQkgKiBUaGlzIGZ1bmN0aW9u IGRvZXMgbm90IHN1cHBvcnQgZXhlY2xpc3QgbW9kZSAtIGFueSBhdHRlbXB0IHRvCj4gLQkgKiBw cm9jZWVkIGZ1cnRoZXIgaW50byB0aGlzIGZ1bmN0aW9uIHdpbGwgcmVzdWx0IGluIGEga2VybmVs IHBhbmljCj4gLQkgKiB3aGVuIGRlcmVmZXJlbmNpbmcgcmluZy0+YnVmZmVyLCB3aGljaCBpcyBu b3Qgc2V0IHVwIGluIGV4ZWNsaXN0Cj4gLQkgKiBtb2RlLgo+IC0JICoKPiAtCSAqIFRoZSBjb3Jy ZWN0IHdheSBvZiBkb2luZyBpdCB3b3VsZCBiZSB0byBkZXJpdmUgdGhlIGN1cnJlbnRseQo+IC0J ICogZXhlY3V0aW5nIHJpbmcgYnVmZmVyIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCwgd2hpY2gg aXMgZGVyaXZlZAo+IC0JICogZnJvbSB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcmVxdWVzdC4gVW5m b3J0dW5hdGVseSwgdG8gZ2V0IHRoZQo+IC0JICogY3VycmVudCByZXF1ZXN0IHdlIHdvdWxkIGhh dmUgdG8gZ3JhYiB0aGUgc3RydWN0X211dGV4IGJlZm9yZSBkb2luZwo+IC0JICogYW55dGhpbmcg ZWxzZSwgd2hpY2ggd291bGQgYmUgaWxsLWFkdmlzZWQgc2luY2Ugc29tZSBvdGhlciB0aHJlYWQK PiAtCSAqIG1pZ2h0IGhhdmUgZ3JhYmJlZCBpdCBhbHJlYWR5IGFuZCBtYW5hZ2VkIHRvIGhhbmcg aXRzZWxmLCBjYXVzaW5nCj4gLQkgKiB0aGUgaGFuZyBjaGVja2VyIHRvIGRlYWRsb2NrLgo+IC0J ICoKPiAtCSAqIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGV4ZWNs aXN0IG1vZGUgaW4gaXRzCj4gLQkgKiBjdXJyZW50IGZvcm0uIEp1c3QgcmV0dXJuIE5VTEwgYW5k IG1vdmUgb24uCj4gLQkgKi8KPiAtCWlmIChlbmdpbmUtPmJ1ZmZlciA9PSBOVUxMKQo+IC0JCXJl dHVybiBOVUxMOwo+IC0KPiAtCWlwZWhyID0gSTkxNV9SRUFEKFJJTkdfSVBFSFIoZW5naW5lLT5t bWlvX2Jhc2UpKTsKPiAtCWlmICghaXBlaHJfaXNfc2VtYXBob3JlX3dhaXQoZW5naW5lLCBpcGVo cikpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0JLyoKPiAtCSAqIEhFQUQgaXMgbGlrZWx5IHBv aW50aW5nIHRvIHRoZSBkd29yZCBhZnRlciB0aGUgYWN0dWFsIGNvbW1hbmQsCj4gLQkgKiBzbyBz Y2FuIGJhY2t3YXJkcyB1bnRpbCB3ZSBmaW5kIHRoZSBNQk9YLiBCdXQgbGltaXQgaXQgdG8ganVz dCAzCj4gLQkgKiBvciA0IGR3b3JkcyBkZXBlbmRpbmcgb24gdGhlIHNlbWFwaG9yZSB3YWl0IGNv bW1hbmQgc2l6ZS4KPiAtCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBjYXJlIGFib3V0IEFDVEhEIGhl cmUgc2luY2UgdGhhdCBtaWdodAo+IC0JICogcG9pbnQgYXQgYXQgYmF0Y2gsIGFuZCBzZW1hcGhv cmVzIGFyZSBhbHdheXMgZW1pdHRlZCBpbnRvIHRoZQo+IC0JICogcmluZ2J1ZmZlciBpdHNlbGYu Cj4gLQkgKi8KPiAtCWhlYWQgPSBJOTE1X1JFQURfSEVBRChlbmdpbmUpICYgSEVBRF9BRERSOwo+ IC0JYmFja3dhcmRzID0gKElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCkgPyA1IDogNDsKPiAtCXZh ZGRyID0gKHZvaWQgX19pb21lbSAqKWVuZ2luZS0+YnVmZmVyLT52YWRkcjsKPiAtCj4gLQlmb3Ig KGkgPSBiYWNrd2FyZHM7IGk7IC0taSkgewo+IC0JCS8qCj4gLQkJICogQmUgcGFyYW5vaWQgYW5k IHByZXN1bWUgdGhlIGh3IGhhcyBnb25lIG9mZiBpbnRvIHRoZSB3aWxkIC0KPiAtCQkgKiBvdXIg cmluZyBpcyBzbWFsbGVyIHRoYW4gd2hhdCB0aGUgaGFyZHdhcmUgKGFuZCBoZW5jZQo+IC0JCSAq IEhFQURfQUREUikgYWxsb3dzLiBBbHNvIGhhbmRsZXMgd3JhcC1hcm91bmQuCj4gLQkJICovCj4g LQkJaGVhZCAmPSBlbmdpbmUtPmJ1ZmZlci0+c2l6ZSAtIDE7Cj4gLQo+IC0JCS8qIFRoaXMgaGVy ZSBzZWVtcyB0byBibG93IHVwICovCj4gLQkJY21kID0gaW9yZWFkMzIodmFkZHIgKyBoZWFkKTsK PiAtCQlpZiAoY21kID09IGlwZWhyKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJaGVhZCAtPSA0Owo+ IC0JfQo+IC0KPiAtCWlmICghaSkKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQkqc2Vxbm8gPSBp b3JlYWQzMih2YWRkciArIGhlYWQgKyA0KSArIDE7Cj4gLQlyZXR1cm4gc2VtYXBob3JlX3dhaXRf dG9fc2lnbmFsbGVyX3JpbmcoZW5naW5lLCBpcGVociwgb2Zmc2V0KTsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBzZW1hcGhvcmVfcGFzc2VkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1 Owo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2lnbmFsbGVyOwo+IC0JdTMyIHNlcW5vOwo+ IC0KPiAtCWVuZ2luZS0+aGFuZ2NoZWNrLmRlYWRsb2NrKys7Cj4gLQo+IC0Jc2lnbmFsbGVyID0g c2VtYXBob3JlX3dhaXRzX2ZvcihlbmdpbmUsICZzZXFubyk7Cj4gLQlpZiAoc2lnbmFsbGVyID09 IE5VTEwpCj4gLQkJcmV0dXJuIC0xOwo+IC0KPiAtCWlmIChJU19FUlIoc2lnbmFsbGVyKSkKPiAt CQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBQcmV2ZW50IHBhdGhvbG9naWNhbCByZWN1cnNpb24gZHVl IHRvIGRyaXZlciBidWdzICovCj4gLQlpZiAoc2lnbmFsbGVyLT5oYW5nY2hlY2suZGVhZGxvY2sg Pj0gSTkxNV9OVU1fRU5HSU5FUykKPiAtCQlyZXR1cm4gLTE7Cj4gLQo+IC0JaWYgKGludGVsX2Vu Z2luZV9zaWduYWxlZChzaWduYWxsZXIsIHNlcW5vKSkKPiAtCQlyZXR1cm4gMTsKPiAtCj4gLQkv KiBjdXJzb3J5IGNoZWNrIGZvciBhbiB1bmtpY2thYmxlIGRlYWRsb2NrICovCj4gLQlpZiAoSTkx NV9SRUFEX0NUTChzaWduYWxsZXIpICYgUklOR19XQUlUX1NFTUFQSE9SRSAmJgo+IC0JICAgIHNl bWFwaG9yZV9wYXNzZWQoc2lnbmFsbGVyKSA8IDApCj4gLQkJcmV0dXJuIC0xOwo+IC0KPiAtCXJl dHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBzZW1hcGhvcmVfY2xlYXJfZGVhZGxvY2tz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQo+IC0J Zm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGlkKQo+IC0JCWVuZ2luZS0+aGFuZ2No ZWNrLmRlYWRsb2NrID0gMDsKPiAtfQo+IC0KPiAgc3RhdGljIGJvb2wgaW5zdGRvbmVfdW5jaGFu Z2VkKHUzMiBjdXJyZW50X2luc3Rkb25lLCB1MzIgKm9sZF9pbnN0ZG9uZSkKPiAgewo+ICAJdTMy IHRtcCA9IGN1cnJlbnRfaW5zdGRvbmUgfCAqb2xkX2luc3Rkb25lOwo+IEBAIC0yNTIsMjEgKzEx NCw2IEBAIGVuZ2luZV9zdHVjayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHU2NCBh Y3RoZCkKPiAgCQlyZXR1cm4gRU5HSU5FX1dBSVRfS0lDSzsKPiAgCX0KPiAgCj4gLQlpZiAoSVNf R0VOX1JBTkdFKGRldl9wcml2LCA2LCA3KSAmJiB0bXAgJiBSSU5HX1dBSVRfU0VNQVBIT1JFKSB7 Cj4gLQkJc3dpdGNoIChzZW1hcGhvcmVfcGFzc2VkKGVuZ2luZSkpIHsKPiAtCQlkZWZhdWx0Ogo+ IC0JCQlyZXR1cm4gRU5HSU5FX0RFQUQ7Cj4gLQkJY2FzZSAxOgo+IC0JCQlpOTE1X2hhbmRsZV9l cnJvcihkZXZfcHJpdiwgQUxMX0VOR0lORVMsIDAsCj4gLQkJCQkJICAic3R1Y2sgc2VtYXBob3Jl IG9uICVzIiwKPiAtCQkJCQkgIGVuZ2luZS0+bmFtZSk7Cj4gLQkJCUk5MTVfV1JJVEVfQ1RMKGVu Z2luZSwgdG1wKTsKPiAtCQkJcmV0dXJuIEVOR0lORV9XQUlUX0tJQ0s7Cj4gLQkJY2FzZSAwOgo+ IC0JCQlyZXR1cm4gRU5HSU5FX1dBSVQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAgCXJldHVybiBFTkdJ TkVfREVBRDsKPiAgfQo+ICAKPiBAQCAtNDMzLDggKzI4MCw2IEBAIHN0YXRpYyB2b2lkIGk5MTVf aGFuZ2NoZWNrX2VsYXBzZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJZm9yX2VhY2hf ZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYsIGlkKSB7Cj4gIAkJc3RydWN0IGludGVsX2VuZ2luZV9o YW5nY2hlY2sgaGM7Cj4gIAo+IC0JCXNlbWFwaG9yZV9jbGVhcl9kZWFkbG9ja3MoZGV2X3ByaXYp Owo+IC0KPiAgCQloYW5nY2hlY2tfbG9hZF9zYW1wbGUoZW5naW5lLCAmaGMpOwo+ICAJCWhhbmdj aGVja19hY2N1bXVsYXRlX3NhbXBsZShlbmdpbmUsICZoYyk7Cj4gIAkJaGFuZ2NoZWNrX3N0b3Jl X3NhbXBsZShlbmdpbmUsICZoYyk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYwo+IGluZGV4IDY1ZmQ5MmViMDcxZC4uZDVhOWVkYmNmMWJlIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+IEBAIC01NTYsMTMgKzU1Niw2IEBAIHN0YXRp YyBpbnQgaW5pdF9yaW5nX2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g IAo+ICAJaW50ZWxfZW5naW5lX3Jlc2V0X2JyZWFkY3J1bWJzKGVuZ2luZSk7Cj4gIAo+IC0JaWYg KEhBU19MRUdBQ1lfU0VNQVBIT1JFUyhlbmdpbmUtPmk5MTUpKSB7Cj4gLQkJSTkxNV9XUklURShS SU5HX1NZTkNfMChlbmdpbmUtPm1taW9fYmFzZSksIDApOwo+IC0JCUk5MTVfV1JJVEUoUklOR19T WU5DXzEoZW5naW5lLT5tbWlvX2Jhc2UpLCAwKTsKPiAtCQlpZiAoSEFTX1ZFQk9YKGRldl9wcml2 KSkKPiAtCQkJSTkxNV9XUklURShSSU5HX1NZTkNfMihlbmdpbmUtPm1taW9fYmFzZSksIDApOwo+ IC0JfQo+IC0KPiAgCS8qIEVuZm9yY2Ugb3JkZXJpbmcgYnkgcmVhZGluZyBIRUFEIHJlZ2lzdGVy IGJhY2sgKi8KPiAgCUk5MTVfUkVBRF9IRUFEKGVuZ2luZSk7Cj4gIAo+IEBAIC03NDUsMzMgKzcz OCw2IEBAIHN0YXRpYyBpbnQgaW5pdF9yZW5kZXJfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIHUzMiAqZ2VuNl9zaWdu YWwoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiAqY3MpCj4gLXsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJxLT5pOTE1Owo+IC0Jc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lOwo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQlpbnQgbnVtX3Jp bmdzID0gMDsKPiAtCj4gLQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsK PiAtCQlpOTE1X3JlZ190IG1ib3hfcmVnOwo+IC0KPiAtCQlpZiAoIShCSVQoZW5naW5lLT5od19p ZCkgJiBHRU42X1NFTUFQSE9SRVNfTUFTSykpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQltYm94 X3JlZyA9IHJxLT5lbmdpbmUtPnNlbWFwaG9yZS5tYm94LnNpZ25hbFtlbmdpbmUtPmh3X2lkXTsK PiAtCQlpZiAoaTkxNV9tbWlvX3JlZ192YWxpZChtYm94X3JlZykpIHsKPiAtCQkJKmNzKysgPSBN SV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKPiAtCQkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNl dChtYm94X3JlZyk7Cj4gLQkJCSpjcysrID0gcnEtPmdsb2JhbF9zZXFubzsKPiAtCQkJbnVtX3Jp bmdzKys7Cj4gLQkJfQo+IC0JfQo+IC0JaWYgKG51bV9yaW5ncyAmIDEpCj4gLQkJKmNzKysgPSBN SV9OT09QOwo+IC0KPiAtCXJldHVybiBjczsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQgY2FuY2Vs X3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3RydWN0 IGk5MTVfcmVxdWVzdCAqcmVxdWVzdDsKPiBAQCAtODIyLDM5ICs3ODgsNiBAQCBzdGF0aWMgdm9p ZCBpOXh4X2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgdTMyICpjcykK PiAgCj4gIHN0YXRpYyBjb25zdCBpbnQgaTl4eF9lbWl0X2JyZWFkY3J1bWJfc3ogPSA0Owo+ICAK PiAtc3RhdGljIHZvaWQgZ2VuNl9zZW1hX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycSwgdTMyICpjcykKPiAtewo+IC0JcmV0dXJuIGk5eHhfZW1pdF9icmVhZGNydW1iKHJx LCBycS0+ZW5naW5lLT5zZW1hcGhvcmUuc2lnbmFsKHJxLCBjcykpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50Cj4gLWdlbjZfcmluZ19zeW5jX3RvKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpzaWduYWwpCj4gLXsKPiAtCXUzMiBkdzEgPSBNSV9TRU1BUEhPUkVf TUJPWCB8Cj4gLQkJICBNSV9TRU1BUEhPUkVfQ09NUEFSRSB8Cj4gLQkJICBNSV9TRU1BUEhPUkVf UkVHSVNURVI7Cj4gLQl1MzIgd2FpdF9tYm94ID0gc2lnbmFsLT5lbmdpbmUtPnNlbWFwaG9yZS5t Ym94LndhaXRbcnEtPmVuZ2luZS0+aHdfaWRdOwo+IC0JdTMyICpjczsKPiAtCj4gLQlXQVJOX09O KHdhaXRfbWJveCA9PSBNSV9TRU1BUEhPUkVfU1lOQ19JTlZBTElEKTsKPiAtCj4gLQljcyA9IGlu dGVsX3JpbmdfYmVnaW4ocnEsIDQpOwo+IC0JaWYgKElTX0VSUihjcykpCj4gLQkJcmV0dXJuIFBU Ul9FUlIoY3MpOwo+IC0KPiAtCSpjcysrID0gZHcxIHwgd2FpdF9tYm94Owo+IC0JLyogVGhyb3Vn aG91dCBhbGwgb2YgdGhlIEdFTSBjb2RlLCBzZXFubyBwYXNzZWQgaW1wbGllcyBvdXIgY3VycmVu dAo+IC0JICogc2Vxbm8gaXMgPj0gdGhlIGxhc3Qgc2Vxbm8gZXhlY3V0ZWQuIEhvd2V2ZXIgZm9y IGhhcmR3YXJlIHRoZQo+IC0JICogY29tcGFyaXNvbiBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4u Cj4gLQkgKi8KPiAtCSpjcysrID0gc2lnbmFsLT5nbG9iYWxfc2Vxbm8gLSAxOwo+IC0JKmNzKysg PSAwOwo+IC0JKmNzKysgPSBNSV9OT09QOwo+IC0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7 Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkCj4gIGdlbjVfc2Vxbm9f YmFycmllcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiBAQCAtMTYwMiwx MiArMTUzNSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1pX3NldF9jb250ZXh0KHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxLCB1MzIgZmxhZ3MpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gcnEtPmk5MTU7Cj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBy cS0+ZW5naW5lOwo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQljb25zdCBpbnQgbnVt X3JpbmdzID0KPiAtCQkvKiBVc2UgYW4gZXh0ZW5kZWQgdy9hIG9uIGdlbjcgaWYgc2lnbmFsbGlu ZyBmcm9tIG90aGVyIHJpbmdzICovCj4gLQkJKEhBU19MRUdBQ1lfU0VNQVBIT1JFUyhpOTE1KSAm JiBJU19HRU4oaTkxNSwgNykpID8KPiAtCQlJTlRFTF9JTkZPKGk5MTUpLT5udW1fcmluZ3MgLSAx IDoKPiAtCQkwOwo+ICAJYm9vbCBmb3JjZV9yZXN0b3JlID0gZmFsc2U7Cj4gIAlpbnQgbGVuOwo+ ICAJdTMyICpjczsKPiBAQCAtMTYyMSw3ICsxNTQ4LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWlf c2V0X2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBmbGFncykKPiAgCj4gIAls ZW4gPSA0Owo+ICAJaWYgKElTX0dFTihpOTE1LCA3KSkKPiAtCQlsZW4gKz0gMiArIChudW1fcmlu Z3MgPyA0Km51bV9yaW5ncyArIDYgOiAwKTsKPiArCQlsZW4gKz0gMjsKPiAgCWlmIChmbGFncyAm IE1JX0ZPUkNFX1JFU1RPUkUpIHsKPiAgCQlHRU1fQlVHX09OKGZsYWdzICYgTUlfUkVTVE9SRV9J TkhJQklUKTsKPiAgCQlmbGFncyAmPSB+TUlfRk9SQ0VfUkVTVE9SRTsKPiBAQCAtMTYzNCwyMyAr MTU2MSw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1pX3NldF9jb250ZXh0KHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxLCB1MzIgZmxhZ3MpCj4gIAkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICAKPiAgCS8q IFdhUHJvZ3JhbU1pQXJiT25PZmZBcm91bmRNaVNldENvbnRleHQ6aXZiLHZsdixoc3csYmR3LGNo diAqLwo+IC0JaWYgKElTX0dFTihpOTE1LCA3KSkgewo+ICsJaWYgKElTX0dFTihpOTE1LCA3KSkK PiAgCQkqY3MrKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRTsKPiAtCQlpZiAobnVt X3JpbmdzKSB7Cj4gLQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpZ25hbGxlcjsKPiAtCj4g LQkJCSpjcysrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0obnVtX3JpbmdzKTsKPiAtCQkJZm9yX2Vh Y2hfZW5naW5lKHNpZ25hbGxlciwgaTkxNSwgaWQpIHsKPiAtCQkJCWlmIChzaWduYWxsZXIgPT0g ZW5naW5lKQo+IC0JCQkJCWNvbnRpbnVlOwo+IC0KPiAtCQkJCSpjcysrID0gaTkxNV9tbWlvX3Jl Z19vZmZzZXQoCj4gLQkJCQkJICAgUklOR19QU01JX0NUTChzaWduYWxsZXItPm1taW9fYmFzZSkp Owo+IC0JCQkJKmNzKysgPSBfTUFTS0VEX0JJVF9FTkFCTEUoCj4gLQkJCQkJCUdFTjZfUFNNSV9T TEVFUF9NU0dfRElTQUJMRSk7Cj4gLQkJCX0KPiAtCQl9Cj4gLQl9Cj4gIAo+ICAJaWYgKGZvcmNl X3Jlc3RvcmUpIHsKPiAgCQkvKgo+IEBAIC0xNjgxLDMwICsxNTkzLDggQEAgc3RhdGljIGlubGlu ZSBpbnQgbWlfc2V0X2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBmbGFncykK PiAgCSAqLwo+ICAJKmNzKysgPSBNSV9OT09QOwo+ICAKPiAtCWlmIChJU19HRU4oaTkxNSwgNykp IHsKPiAtCQlpZiAobnVtX3JpbmdzKSB7Cj4gLQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNp Z25hbGxlcjsKPiAtCQkJaTkxNV9yZWdfdCBsYXN0X3JlZyA9IHt9OyAvKiBrZWVwIGdjYyBxdWll dCAqLwo+IC0KPiAtCQkJKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShudW1fcmluZ3MpOwo+ IC0JCQlmb3JfZWFjaF9lbmdpbmUoc2lnbmFsbGVyLCBpOTE1LCBpZCkgewo+IC0JCQkJaWYgKHNp Z25hbGxlciA9PSBlbmdpbmUpCj4gLQkJCQkJY29udGludWU7Cj4gLQo+IC0JCQkJbGFzdF9yZWcg PSBSSU5HX1BTTUlfQ1RMKHNpZ25hbGxlci0+bW1pb19iYXNlKTsKPiAtCQkJCSpjcysrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQobGFzdF9yZWcpOwo+IC0JCQkJKmNzKysgPSBfTUFTS0VEX0JJVF9E SVNBQkxFKAo+IC0JCQkJCQlHRU42X1BTTUlfU0xFRVBfTVNHX0RJU0FCTEUpOwo+IC0JCQl9Cj4g LQo+IC0JCQkvKiBJbnNlcnQgYSBkZWxheSBiZWZvcmUgdGhlIG5leHQgc3dpdGNoISAqLwo+IC0J CQkqY3MrKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsK PiAtCQkJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChsYXN0X3JlZyk7Cj4gLQkJCSpjcysr ID0gaTkxNV9zY3JhdGNoX29mZnNldChycS0+aTkxNSk7Cj4gLQkJCSpjcysrID0gTUlfTk9PUDsK PiAtCQl9Cj4gKwlpZiAoSVNfR0VOKGk5MTUsIDcpKQo+ICAJCSpjcysrID0gTUlfQVJCX09OX09G RiB8IE1JX0FSQl9FTkFCTEU7Cj4gLQl9Cj4gIAo+ICAJaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBj cyk7Cj4gIAo+IEBAIC0yMTU0LDY2ICsyMDQ0LDYgQEAgc3RhdGljIGludCBnZW42X3JpbmdfZmx1 c2goc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBtb2RlKQo+ICAJcmV0dXJuIGdlbjZfZmx1 c2hfZHcocnEsIG1vZGUsIE1JX0lOVkFMSURBVEVfVExCKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZv aWQgaW50ZWxfcmluZ19pbml0X3NlbWFwaG9yZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAo+IC0JCQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAt ewo+IC0JaW50IGk7Cj4gLQo+IC0JaWYgKCFIQVNfTEVHQUNZX1NFTUFQSE9SRVMoZGV2X3ByaXYp KQo+IC0JCXJldHVybjsKPiAtCj4gLQlHRU1fQlVHX09OKElOVEVMX0dFTihkZXZfcHJpdikgPCA2 KTsKPiAtCWVuZ2luZS0+c2VtYXBob3JlLnN5bmNfdG8gPSBnZW42X3Jpbmdfc3luY190bzsKPiAt CWVuZ2luZS0+c2VtYXBob3JlLnNpZ25hbCA9IGdlbjZfc2lnbmFsOwo+IC0KPiAtCS8qCj4gLQkg KiBUaGUgY3VycmVudCBzZW1hcGhvcmUgaXMgb25seSBhcHBsaWVkIG9uIHByZS1nZW44Cj4gLQkg KiBwbGF0Zm9ybS4gIEFuZCB0aGVyZSBpcyBubyBWQ1MyIHJpbmcgb24gdGhlIHByZS1nZW44Cj4g LQkgKiBwbGF0Zm9ybS4gU28gdGhlIHNlbWFwaG9yZSBiZXR3ZWVuIFJDUyBhbmQgVkNTMiBpcwo+ IC0JICogaW5pdGlhbGl6ZWQgYXMgSU5WQUxJRC4KPiAtCSAqLwo+IC0JZm9yIChpID0gMDsgaSA8 IEdFTjZfTlVNX1NFTUFQSE9SRVM7IGkrKykgewo+IC0JCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgewo+ IC0JCQl1MzIgd2FpdF9tYm94Owo+IC0JCQlpOTE1X3JlZ190IG1ib3hfcmVnOwo+IC0JCX0gc2Vt X2RhdGFbR0VONl9OVU1fU0VNQVBIT1JFU11bR0VONl9OVU1fU0VNQVBIT1JFU10gPSB7Cj4gLQkJ CVtSQ1NfSFddID0gewo+IC0JCQkJW1ZDU19IV10gPSAgeyAud2FpdF9tYm94ID0gTUlfU0VNQVBI T1JFX1NZTkNfUlYsICAubWJveF9yZWcgPSBHRU42X1ZSU1lOQyB9LAo+IC0JCQkJW0JDU19IV10g PSAgeyAud2FpdF9tYm94ID0gTUlfU0VNQVBIT1JFX1NZTkNfUkIsICAubWJveF9yZWcgPSBHRU42 X0JSU1lOQyB9LAo+IC0JCQkJW1ZFQ1NfSFddID0geyAud2FpdF9tYm94ID0gTUlfU0VNQVBIT1JF X1NZTkNfUlZFLCAubWJveF9yZWcgPSBHRU42X1ZFUlNZTkMgfSwKPiAtCQkJfSwKPiAtCQkJW1ZD U19IV10gPSB7Cj4gLQkJCQlbUkNTX0hXXSA9ICB7IC53YWl0X21ib3ggPSBNSV9TRU1BUEhPUkVf U1lOQ19WUiwgIC5tYm94X3JlZyA9IEdFTjZfUlZTWU5DIH0sCj4gLQkJCQlbQkNTX0hXXSA9ICB7 IC53YWl0X21ib3ggPSBNSV9TRU1BUEhPUkVfU1lOQ19WQiwgIC5tYm94X3JlZyA9IEdFTjZfQlZT WU5DIH0sCj4gLQkJCQlbVkVDU19IV10gPSB7IC53YWl0X21ib3ggPSBNSV9TRU1BUEhPUkVfU1lO Q19WVkUsIC5tYm94X3JlZyA9IEdFTjZfVkVWU1lOQyB9LAo+IC0JCQl9LAo+IC0JCQlbQkNTX0hX XSA9IHsKPiAtCQkJCVtSQ1NfSFddID0gIHsgLndhaXRfbWJveCA9IE1JX1NFTUFQSE9SRV9TWU5D X0JSLCAgLm1ib3hfcmVnID0gR0VONl9SQlNZTkMgfSwKPiAtCQkJCVtWQ1NfSFddID0gIHsgLndh aXRfbWJveCA9IE1JX1NFTUFQSE9SRV9TWU5DX0JWLCAgLm1ib3hfcmVnID0gR0VONl9WQlNZTkMg fSwKPiAtCQkJCVtWRUNTX0hXXSA9IHsgLndhaXRfbWJveCA9IE1JX1NFTUFQSE9SRV9TWU5DX0JW RSwgLm1ib3hfcmVnID0gR0VONl9WRUJTWU5DIH0sCj4gLQkJCX0sCj4gLQkJCVtWRUNTX0hXXSA9 IHsKPiAtCQkJCVtSQ1NfSFddID0gIHsgLndhaXRfbWJveCA9IE1JX1NFTUFQSE9SRV9TWU5DX1ZF UiwgLm1ib3hfcmVnID0gR0VONl9SVkVTWU5DIH0sCj4gLQkJCQlbVkNTX0hXXSA9ICB7IC53YWl0 X21ib3ggPSBNSV9TRU1BUEhPUkVfU1lOQ19WRVYsIC5tYm94X3JlZyA9IEdFTjZfVlZFU1lOQyB9 LAo+IC0JCQkJW0JDU19IV10gPSAgeyAud2FpdF9tYm94ID0gTUlfU0VNQVBIT1JFX1NZTkNfVkVC LCAubWJveF9yZWcgPSBHRU42X0JWRVNZTkMgfSwKPiAtCQkJfSwKPiAtCQl9Owo+IC0JCXUzMiB3 YWl0X21ib3g7Cj4gLQkJaTkxNV9yZWdfdCBtYm94X3JlZzsKPiAtCj4gLQkJaWYgKGkgPT0gZW5n aW5lLT5od19pZCkgewo+IC0JCQl3YWl0X21ib3ggPSBNSV9TRU1BUEhPUkVfU1lOQ19JTlZBTElE Owo+IC0JCQltYm94X3JlZyA9IEdFTjZfTk9TWU5DOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCXdhaXRf bWJveCA9IHNlbV9kYXRhW2VuZ2luZS0+aHdfaWRdW2ldLndhaXRfbWJveDsKPiAtCQkJbWJveF9y ZWcgPSBzZW1fZGF0YVtlbmdpbmUtPmh3X2lkXVtpXS5tYm94X3JlZzsKPiAtCQl9Cj4gLQo+IC0J CWVuZ2luZS0+c2VtYXBob3JlLm1ib3gud2FpdFtpXSA9IHdhaXRfbWJveDsKPiAtCQllbmdpbmUt PnNlbWFwaG9yZS5tYm94LnNpZ25hbFtpXSA9IG1ib3hfcmVnOwo+IC0JfQo+IC19Cj4gLQo+ICBz dGF0aWMgdm9pZCBpbnRlbF9yaW5nX2luaXRfaXJxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiAgCQkJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+IEBA IC0yMjU2LDcgKzIwODYsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9yaW5nX2RlZmF1bHRfdmZ1bmNz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCUdFTV9CVUdfT04oSU5URUxf R0VOKGRldl9wcml2KSA+PSA4KTsKPiAgCj4gIAlpbnRlbF9yaW5nX2luaXRfaXJxKGRldl9wcml2 LCBlbmdpbmUpOwo+IC0JaW50ZWxfcmluZ19pbml0X3NlbWFwaG9yZXMoZGV2X3ByaXYsIGVuZ2lu ZSk7Cj4gIAo+ICAJZW5naW5lLT5pbml0X2h3ID0gaW5pdF9yaW5nX2NvbW1vbjsKPiAgCWVuZ2lu ZS0+cmVzZXQucHJlcGFyZSA9IHJlc2V0X3ByZXBhcmU7Cj4gQEAgLTIyNjgsMTYgKzIwOTcsNiBA QCBzdGF0aWMgdm9pZCBpbnRlbF9yaW5nX2RlZmF1bHRfdmZ1bmNzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAgCj4gIAllbmdpbmUtPmVtaXRfYnJlYWRjcnVtYiA9IGk5eHhf ZW1pdF9icmVhZGNydW1iOwo+ICAJZW5naW5lLT5lbWl0X2JyZWFkY3J1bWJfc3ogPSBpOXh4X2Vt aXRfYnJlYWRjcnVtYl9zejsKPiAtCWlmIChIQVNfTEVHQUNZX1NFTUFQSE9SRVMoZGV2X3ByaXYp KSB7Cj4gLQkJaW50IG51bV9yaW5nczsKPiAtCj4gLQkJZW5naW5lLT5lbWl0X2JyZWFkY3J1bWIg PSBnZW42X3NlbWFfZW1pdF9icmVhZGNydW1iOwo+IC0KPiAtCQludW1fcmluZ3MgPSBJTlRFTF9J TkZPKGRldl9wcml2KS0+bnVtX3JpbmdzIC0gMTsKPiAtCQllbmdpbmUtPmVtaXRfYnJlYWRjcnVt Yl9zeiArPSBudW1fcmluZ3MgKiAzOwo+IC0JCWlmIChudW1fcmluZ3MgJiAxKQo+IC0JCQllbmdp bmUtPmVtaXRfYnJlYWRjcnVtYl9zeisrOwo+IC0JfQo+ICAKPiAgCWVuZ2luZS0+c2V0X2RlZmF1 bHRfc3VibWlzc2lvbiA9IGk5eHhfc2V0X2RlZmF1bHRfc3VibWlzc2lvbjsKPiAgCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+IGluZGV4IDZiNDFiOWNlNWY1Yi4uYzky N2JkZmIxZWQwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+ IEBAIC01MTAsNjAgKzUxMCw2IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mgewo+ICAJdm9pZAkJ KCppcnFfc2Vxbm9fYmFycmllcikoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAg CXZvaWQJCSgqY2xlYW51cCkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgCj4g LQkvKiBHRU44IHNpZ25hbC93YWl0IHRhYmxlIC0gbmV2ZXIgdHJ1c3QgY29tbWVudHMhCj4gLQkg KgkgIHNpZ25hbCB0bwlzaWduYWwgdG8gICAgc2lnbmFsIHRvICAgc2lnbmFsIHRvICAgICAgc2ln bmFsIHRvCj4gLQkgKgkgICAgUkNTCQkgICBWQ1MgICAgICAgICAgQkNTICAgICAgICBWRUNTCQkg VkNTMgo+IC0JICogICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IC0JICogIFJDUyB8IE5PUCAoMHgwMCkgfCBW Q1MgKDB4MDgpIHwgQkNTICgweDEwKSB8IFZFQ1MgKDB4MTgpIHwgVkNTMiAoMHgyMCkgfAo+IC0J ICoJfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiAtCSAqICBWQ1MgfCBSQ1MgKDB4MjgpIHwgTk9QICgweDMwKSB8IEJD UyAoMHgzOCkgfCBWRUNTICgweDQwKSB8IFZDUzIgKDB4NDgpIHwKPiAtCSAqCXwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gLQkgKiAgQkNTIHwgUkNTICgweDUwKSB8IFZDUyAoMHg1OCkgfCBOT1AgKDB4NjApIHwgVkVD UyAoMHg2OCkgfCBWQ1MyICgweDcwKSB8Cj4gLQkgKgl8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IC0JICogVkVDUyB8 IFJDUyAoMHg3OCkgfCBWQ1MgKDB4ODApIHwgQkNTICgweDg4KSB8ICBOT1AgKDB4OTApIHwgVkNT MiAoMHg5OCkgfAo+IC0JICoJfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAtCSAqIFZDUzIgfCBSQ1MgKDB4YTApIHwg VkNTICgweGE4KSB8IEJDUyAoMHhiMCkgfCBWRUNTICgweGI4KSB8IE5PUCAgKDB4YzApIHwKPiAt CSAqCXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4gLQkgKgo+IC0JICogR2VuZXJhbGl6YXRpb246Cj4gLQkgKiAgZih4 LCB5KSA6PSAoeC0+aWQgKiBOVU1fUklOR1MgKiBzZXFub19zaXplKSArIChzZXFub19zaXplICog eS0+aWQpCj4gLQkgKiAgaWUuIHRyYW5zcG9zZSBvZiBnKHgsIHkpCj4gLQkgKgo+IC0JICoJIHN5 bmMgZnJvbQlzeW5jIGZyb20gICAgc3luYyBmcm9tICAgIHN5bmMgZnJvbQlzeW5jIGZyb20KPiAt CSAqCSAgICBSQ1MJCSAgIFZDUyAgICAgICAgICBCQ1MgICAgICAgIFZFQ1MJCSBWQ1MyCj4gLQkg KiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gLQkgKiAgUkNTIHwgTk9QICgweDAwKSB8IFZDUyAoMHgyOCkg fCBCQ1MgKDB4NTApIHwgVkVDUyAoMHg3OCkgfCBWQ1MyICgweGEwKSB8Cj4gLQkgKgl8LS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+IC0JICogIFZDUyB8IFJDUyAoMHgwOCkgfCBOT1AgKDB4MzApIHwgQkNTICgweDU4KSB8 IFZFQ1MgKDB4ODApIHwgVkNTMiAoMHhhOCkgfAo+IC0JICoJfC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAtCSAqICBC Q1MgfCBSQ1MgKDB4MTApIHwgVkNTICgweDM4KSB8IE5PUCAoMHg2MCkgfCBWRUNTICgweDg4KSB8 IFZDUzIgKDB4YjApIHwKPiAtCSAqCXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gLQkgKiBWRUNTIHwgUkNTICgweDE4 KSB8IFZDUyAoMHg0MCkgfCBCQ1MgKDB4NjgpIHwgIE5PUCAoMHg5MCkgfCBWQ1MyICgweGI4KSB8 Cj4gLQkgKgl8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+IC0JICogVkNTMiB8IFJDUyAoMHgyMCkgfCBWQ1MgKDB4NDgp IHwgQkNTICgweDcwKSB8IFZFQ1MgKDB4OTgpIHwgIE5PUCAoMHhjMCkgfAo+IC0JICoJfC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KPiAtCSAqCj4gLQkgKiBHZW5lcmFsaXphdGlvbjoKPiAtCSAqICBnKHgsIHkpIDo9ICh5 LT5pZCAqIE5VTV9SSU5HUyAqIHNlcW5vX3NpemUpICsgKHNlcW5vX3NpemUgKiB4LT5pZCkKPiAt CSAqICBpZS4gdHJhbnNwb3NlIG9mIGYoeCwgeSkKPiAtCSAqLwo+IC0Jc3RydWN0IHsKPiAtI2Rl ZmluZSBHRU42X1NFTUFQSE9SRV9MQVNUCVZFQ1NfSFcKPiAtI2RlZmluZSBHRU42X05VTV9TRU1B UEhPUkVTCShHRU42X1NFTUFQSE9SRV9MQVNUICsgMSkKPiAtI2RlZmluZSBHRU42X1NFTUFQSE9S RVNfTUFTSwlHRU5NQVNLKEdFTjZfU0VNQVBIT1JFX0xBU1QsIDApCj4gLQkJc3RydWN0IHsKPiAt CQkJLyogb3VyIG1ib3ggd3JpdHRlbiBieSBvdGhlcnMgKi8KPiAtCQkJdTMyCQl3YWl0W0dFTjZf TlVNX1NFTUFQSE9SRVNdOwo+IC0JCQkvKiBtYm94ZXMgdGhpcyByaW5nIHNpZ25hbHMgdG8gKi8K PiAtCQkJaTkxNV9yZWdfdAlzaWduYWxbR0VONl9OVU1fU0VNQVBIT1JFU107Cj4gLQkJfSBtYm94 Owo+IC0KPiAtCQkvKiBBS0Egd2FpdCgpICovCj4gLQkJaW50CSgqc3luY190bykoc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEsCj4gLQkJCQkgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpzaWduYWwpOwo+ IC0JCXUzMgkqKCpzaWduYWwpKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKTsKPiAt CX0gc2VtYXBob3JlOwo+IC0KPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzIGV4ZWNs aXN0czsKPiAgCj4gIAkvKiBDb250ZXh0cyBhcmUgcGlubmVkIHdoaWxzdCB0aGV5IGFyZSBhY3Rp dmUgb24gdGhlIEdQVS4gVGhlIGxhc3QKPiBAQCAtODg5LDcgKzgzNSw3IEBAIGludGVsX3Jpbmdf c2V0X3RhaWwoc3RydWN0IGludGVsX3JpbmcgKnJpbmcsIHVuc2lnbmVkIGludCB0YWlsKQo+ICAJ cmV0dXJuIHRhaWw7Cj4gIH0KPiAgCj4gLXZvaWQgaW50ZWxfZW5naW5lX2luaXRfZ2xvYmFsX3Nl cW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIHNlcW5vKTsKPiArdm9pZCBp bnRlbF9lbmdpbmVfd3JpdGVfZ2xvYmFsX3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyIHNlcW5vKTsKPiAgCj4gIHZvaWQgaW50ZWxfZW5naW5lX3NldHVwX2NvbW1vbihz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICBpbnQgaW50ZWxfZW5naW5lX2luaXRf Y29tbW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gLS0gCj4gMi4yMC4wCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=