From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 21/22] drm/i915: Rewrite fb rotation GTT handling Date: Wed, 21 Oct 2015 17:19:56 +0300 Message-ID: <20151021141956.GG26517@intel.com> References: <1444840154-7804-22-git-send-email-ville.syrjala@linux.intel.com> <1444931985-26045-1-git-send-email-ville.syrjala@linux.intel.com> <20151021120101.GL13786@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 899036EE38 for ; Wed, 21 Oct 2015 07:20:01 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20151021120101.GL13786@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBPY3QgMjEsIDIwMTUgYXQgMDI6MDE6MDFQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUaHUsIE9jdCAxNSwgMjAxNSBhdCAwODo1OTo0NVBNICswMzAwLCB2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90ZToKPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiAKPiA+IFJlZG8gdGhlIGZiIHJvdGF0 aW9uIGhhbmRsaW5nIGluIG9yZGVyIHRvOgo+ID4gLSBlbGltaW5hdGUgdGhlIE5WMTIgc3BlY2lh bCBjYXNpbmcKPiA+IC0gaGFuZGxlIGZiLT5vZmZzZXRzW10gcHJvcGVybHkKPiA+IC0gbWFrZSB0 aGUgcm90YXRpb24gaGFuZGxpbmcgcmVhc2llciBmb3IgdGhlIHBsYW5lIGNvZGUKPiAKPiBJIHRo aW5rIHRoaXMgaXMgdG9vIGJpZyBhbmQgc2hvdWxkIGJlIHNwbGl0IGEgYml0LiBUaGVyZSdzIGFs c28gYSBwaWxlIG9mCj4gcmVuYW1lcyBtaXhlZCBpbnQgb24gdG9wLgoKSXQgZ3JldyBmcm9tIGEg YnVuY2ggb2Ygc2VwZWFyYXRlIGNoYW5nZXMsIGJ1dCB0aGV5IGdvdCBnb2JibGVkCnRvZ2V0aGVy IGR1ZSB0byBjaGFuZ2luZyB0aGUgZW50aXJlIGFwcHJvYWNoIGEgZmV3IHRpbWVzLiBJbiB0aGUg ZW5kIEkKd2FzIHRvbyBzY2FyZWQgdG8gc3BsaXQgaXQgdXAgYW55bW9yZS4gQnV0IEkgZ3Vlc3Mg SSBzaG91bGQgcmVhbGx5IHRyeS4KCj4gCj4gPiBUbyBhY2hpZXZlIHRoZXNlIGdvYWxzIHdlIHJl ZHVjZSBpbnRlbF9yb3RhdGlvbl9pbmZvIHRvIG9ubHkgY29udGFpbgo+ID4gKGZvciBlYWNoIHBs YW5lKSB0aGUgcm90YXRlZCB2aWV3IHdpZHRoLGhlaWdodCxzdHJpZGUgaW4gdGlsZSB1bml0cywK PiA+IGFuZCB0aGUgcGFnZSBvZmZzZXQgaW50byB0aGUgb2JqZWN0IHdoZXJlIHRoZSBwbGFuZSBz dGFydHMuIEVhY2ggcGxhbmUKPiA+IGlzIGhhbmRsZWQgZXhhY3RseSB0aGUgc2FtZSB3YXksIG5v IHNwZWNpYWwgY2FzaW5nIGZvciBOVjEyIG9yIG90aGVyCj4gPiBmb3JtYXRzLgo+IAo+IFRoYXQg c291bmRzIGxpa2UgYSBnb29kIHByZXAgcGF0Y2ggdG8gc3BsaXQgb3V0Lgo+IAo+ID4gV2UgdGhl biBzdG9yZSB0aGUgY29tcHV0ZWQgcm90YXRpb25faW5mbyB1bmRlcgo+ID4gaW50ZWxfZnJhbWVi dWZmZXIgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlY29tcHV0ZSBpdCBhZ2Fpbi4KPiAKPiBB bmQgYW5vdGhlciBvbmUsIHBsdXMgdGhlbiBmb2xsb3dpbmcgdXAgd2l0aCB0aGUgZmFsbG91dC4K PiAKPiBUaGlzIHBhdGNoIGFsc28gZml4ZXMgdGhlIGludGVsX3BsYW5lX29ial9vZmZzZXQgaXNz dWUgZm9yIGVhcmxpZXIgaW4gdGhlCj4gc2VyaWVzLiBMb29rcyBnb29kIG90aGVyd2lzZSBmcm9t IHJlYWRpbmcgdGhyb3VnaCBpdC4KPiAKPiA+IFRvIGhhbmRsZSBmYi0+b2Zmc2V0c1tdIHdlIHRy ZWF0IHRoZW0gYXMgYSBsaW5lYXIgb2Zmc2V0cyBhbmQgY29udmVydAo+ID4gdGhlbSB0byB4L3kg b2Zmc2V0cyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcmVsZXZhbnQgR1RUIG1hcHBpbmcgKGVpdGhl cgo+ID4gbm9ybWFsIG9yIHJvdGF0ZWQpLiBXZSBzdG9yZSB0aGUgeC95IG9mZnNldHMgdW5kZXIg aW50ZWxfZnJhbWVidWZmZXIsCj4gPiBhbmQgZm9yIHNvbWUgZXh0cmEgY29udmVuaWVuY2Ugd2Ug YWxzbyBzdG9yZSB0aGUgcm90YXRlZCBwaXRjaCAoaWUuCj4gPiB0aWxlIGFsaWduZWQgcGxhbmUg aGVpZ2h0KS4gU28gZm9yIGVhY2ggcGxhbmUgd2UgaGF2ZSB0aGUgbm9ybWFsCj4gPiB4L3kgb2Zm c2V0cywgcm90YXRlZCB4L3kgb2Zmc2V0cywgYW5kIHRoZSByb3RhdGVkIHBpdGNoLiBUaGUgbm9y bWFsCj4gPiBwaXRjaCBpcyBhdmFpbGFibGUgYWxyZWFkeSBpbiBmYi0+cGl0Y2hlc1tdLgo+ID4g Cj4gPiBXaGlsZSB3ZSdyZSBnYXRoZXJpbmcgdXAgYWxsIHRoYXQgZXh0cmEgaW5mb3JtYXRpb24s IHdlIGNhbiBhbHNvIGVhc2lseQo+ID4gY29tcHV0ZSB0aGUgc3RvcmFnZSByZXF1aXJlbWVudHMg Zm9yIHRoZSBmcmFtZWJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4KPiA+IGNoZWNrIHRoYXQgdGhlIG9i amVjdCBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgaXQuCj4gPiAKPiA+IFdoZW4gaXQgY29tZXMgdGlt ZSB0byBkZWFsIHdpdGggdGhlIHBsYW5lIHNvdXJjZSBjb29yZGluYXRlcywgd2UgZmlyc3QKPiA+ IHJvdGF0ZSB0aGUgY2xpcHBlZCBzcmMgY29vcmRpbmF0ZXMgdG8gbWF0Y2ggdGhlIHJlbGV2YW50 IEdUVCB2aWV3Cj4gPiBvcmllbnRhdGlvbiwgdGhlbiBhZGQgdG8gdGhlbSB0aGUgZmIgeC95IG9m ZnNldHMuIE5leHQgd2UgY29tcHV0ZQo+ID4gdGhlIGFsaWduZWQgc3VyZmFjZSBwYWdlIG9mZnNl dCwgYW5kIGFzIGEgcmVzdWx0IHdlJ3JlIGxlZnQgd2l0aCBzb21lCj4gPiByZXNpZHVhbCB4L3kg b2Zmc2V0cy4gRmluYWxseSwgaWYgcmVxdWlyZWQgYnkgdGhlIGhhcmR3YXJlLCB3ZSBjb252ZXJ0 Cj4gPiB0aGUgcmVtYWluaW5nIHgveSBvZmZzZXRzIGludG8gYSBsaW5lYXIgb2Zmc2V0Lgo+ID4g Cj4gPiBGb3IgZ2VuMi8zIHdlIHNpbXBseSBza2lwIGNvbXB1dGluZyB0aGUgZmluYWwgcGFnZSBv ZmZzZXQsIGFuZCBqdXN0Cj4gPiBjb252ZXJ0IHRoZSBzcmMrZmIgeC95IG9mZnNldHMgZGlyZWN0 bHkgaW50byBhIGxpbmVhciBvZmZzZXQgc2luY2UKPiA+IHRoYXQncyB3aGF0IHRoZSBoYXJkd2Fy ZSB3YW50cy4KPiA+IAo+ID4gQWZ0ZXIgdGhpcyBhbGwgcGxhdGZvcm1zLCBpbmNsdWluZyBTS0wr LCBjb21wdXRlIHRoZXNlIHRoaW5ncyBpbiBleGFjdGx5Cj4gPiB0aGUgc2FtZSB3YXkgKGV4Y2x1 ZGluZyBhbGlnbmVtbnQgZGlmZmVyZW5jZXMpLgo+ID4gCj4gPiB2MjogVXNlIEJJVChEUk1fUk9U QVRFXzI3MCkgaW5zdGVhZCBvZiBST1RBVEVfMjcwIHdoZW4gcm90YXRpbmcKPiA+ICAgICBwbGFu ZSBzcmMgY29vcmRpbmF0ZXMKPiA+ICAgICBEcm9wIHNvbWUgc3B1cmlvdXMgY2hhbmdlcyB0aGF0 IGdvdCBsZWZ0IGJlaGluZCBkdXJpbmcgZGV2ZWxvcG1lbnQKPiA+IAo+ID4gU2lnbmVkLW9mZi1i eTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiAKPiBU d28gY29tbWVudHMgYmVsb3cgaW5saW5lLgo+IC1EYW5pZWwKPiAKPiA+IC0tLQo+ID4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jICB8ICA2NiArKy0tLS0KPiA+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCAgfCAgMTQgKy0KPiA+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCA0NDggKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgMzIg KystCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgIHwgMTAyICsrKyst LS0tCj4gPiAgNSBmaWxlcyBjaGFuZ2VkLCA0MDIgaW5zZXJ0aW9ucygrKSwgMjYwIGRlbGV0aW9u cygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ID4gaW5kZXggYmI5 NWI4Ni4uOThhZWU2YyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ ID4gQEAgLTMyNTUsMTEgKzMyNTUsNiBAQCByb3RhdGVfcGFnZXMoY29uc3QgZG1hX2FkZHJfdCAq aW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCj4gPiAgCXVuc2lnbmVkIGludCBjb2x1bW4sIHJvdzsK PiA+ICAJdW5zaWduZWQgaW50IHNyY19pZHg7Cj4gPiAgCj4gPiAtCWlmICghc2cpIHsKPiA+IC0J CXN0LT5uZW50cyA9IDA7Cj4gPiAtCQlzZyA9IHN0LT5zZ2w7Cj4gPiAtCX0KPiA+IC0KPiA+ICAJ Zm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCB3aWR0aDsgY29sdW1uKyspIHsKPiA+ICAJCXNyY19p ZHggPSBzdHJpZGUgKiAoaGVpZ2h0IC0gMSkgKyBjb2x1bW47Cj4gPiAgCQlmb3IgKHJvdyA9IDA7 IHJvdyA8IGhlaWdodDsgcm93KyspIHsKPiA+IEBAIC0zMjgwLDE2ICszMjc1LDE0IEBAIHJvdGF0 ZV9wYWdlcyhjb25zdCBkbWFfYWRkcl90ICppbiwgdW5zaWduZWQgaW50IG9mZnNldCwKPiA+ICB9 Cj4gPiAgCj4gPiAgc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCj4gPiAtaW50ZWxfcm90YXRlX2Zi X29ial9wYWdlcyhzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqcm90X2luZm8sCj4gPiAraW50 ZWxfcm90YXRlX2ZiX29ial9wYWdlcyhjb25zdCBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAq aW5mbywKPiA+ICAJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gPiAgewo+ ID4gLQl1bnNpZ25lZCBpbnQgc2l6ZV9wYWdlcyA9IHJvdF9pbmZvLT5zaXplID4+IFBBR0VfU0hJ RlQ7Cj4gPiAtCXVuc2lnbmVkIGludCBzaXplX3BhZ2VzX3V2Owo+ID4gKwl1bnNpZ25lZCBpbnQg c2l6ZSA9IGludGVsX3JvdGF0aW9uX2luZm9fc2l6ZShpbmZvKTsKPiA+ICAJc3RydWN0IHNnX3Bh Z2VfaXRlciBzZ19pdGVyOwo+ID4gIAl1bnNpZ25lZCBsb25nIGk7Cj4gPiAgCWRtYV9hZGRyX3Qg KnBhZ2VfYWRkcl9saXN0Owo+ID4gIAlzdHJ1Y3Qgc2dfdGFibGUgKnN0Owo+ID4gLQl1bnNpZ25l ZCBpbnQgdXZfc3RhcnRfcGFnZTsKPiA+ICAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiA+ICAJ aW50IHJldCA9IC1FTk9NRU07Cj4gPiAgCj4gPiBAQCAtMzI5OSw1NyArMzI5MiwzMiBAQCBpbnRl bF9yb3RhdGVfZmJfb2JqX3BhZ2VzKHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5m bywKPiA+ICAJaWYgKCFwYWdlX2FkZHJfbGlzdCkKPiA+ICAJCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4gPiAgCj4gPiAtCS8qIEFjY291bnQgZm9yIFVWIHBsYW5lIHdpdGggTlYxMi4gKi8KPiA+IC0J aWYgKHJvdF9pbmZvLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKQo+ID4gLQkJc2l6 ZV9wYWdlc191diA9IHJvdF9pbmZvLT5zaXplX3V2ID4+IFBBR0VfU0hJRlQ7Cj4gPiAtCWVsc2UK PiA+IC0JCXNpemVfcGFnZXNfdXYgPSAwOwo+ID4gLQo+ID4gIAkvKiBBbGxvY2F0ZSB0YXJnZXQg U0cgbGlzdC4gKi8KPiA+ICAJc3QgPSBrbWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsK PiA+ICAJaWYgKCFzdCkKPiA+ICAJCWdvdG8gZXJyX3N0X2FsbG9jOwo+ID4gIAo+ID4gLQlyZXQg PSBzZ19hbGxvY190YWJsZShzdCwgc2l6ZV9wYWdlcyArIHNpemVfcGFnZXNfdXYsIEdGUF9LRVJO RUwpOwo+ID4gKwlyZXQgPSBzZ19hbGxvY190YWJsZShzdCwgc2l6ZSwgR0ZQX0tFUk5FTCk7Cj4g PiAgCWlmIChyZXQpCj4gPiAgCQlnb3RvIGVycl9zZ19hbGxvYzsKPiA+ICAKPiA+ICAJLyogUG9w dWxhdGUgc291cmNlIHBhZ2UgbGlzdCBmcm9tIHRoZSBvYmplY3QuICovCj4gPiAgCWkgPSAwOwo+ ID4gIAlmb3JfZWFjaF9zZ19wYWdlKG9iai0+cGFnZXMtPnNnbCwgJnNnX2l0ZXIsIG9iai0+cGFn ZXMtPm5lbnRzLCAwKSB7Cj4gPiAtCQlwYWdlX2FkZHJfbGlzdFtpXSA9IHNnX3BhZ2VfaXRlcl9k bWFfYWRkcmVzcygmc2dfaXRlcik7Cj4gPiAtCQlpKys7Cj4gPiArCQlwYWdlX2FkZHJfbGlzdFtp KytdID0gc2dfcGFnZV9pdGVyX2RtYV9hZGRyZXNzKCZzZ19pdGVyKTsKPiA+ICAJfQo+ID4gIAo+ ID4gLQkvKiBSb3RhdGUgdGhlIHBhZ2VzLiAqLwo+ID4gLQlzZyA9IHJvdGF0ZV9wYWdlcyhwYWdl X2FkZHJfbGlzdCwgMCwKPiA+IC0JCSAgICAgcm90X2luZm8tPndpZHRoX3BhZ2VzLCByb3RfaW5m by0+aGVpZ2h0X3BhZ2VzLAo+ID4gLQkJICAgICByb3RfaW5mby0+d2lkdGhfcGFnZXMsCj4gPiAt CQkgICAgIHN0LCBOVUxMKTsKPiA+ICsJc3QtPm5lbnRzID0gMDsKPiA+ICsJc2cgPSBzdC0+c2ds Owo+ID4gIAo+ID4gLQkvKiBBcHBlbmQgdGhlIFVWIHBsYW5lIGlmIE5WMTIuICovCj4gPiAtCWlm IChyb3RfaW5mby0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMikgewo+ID4gLQkJdXZf c3RhcnRfcGFnZSA9IHNpemVfcGFnZXM7Cj4gPiAtCj4gPiAtCQkvKiBDaGVjayBmb3IgdGlsZS1y b3cgdW4tYWxpZ25tZW50LiAqLwo+ID4gLQkJaWYgKG9mZnNldF9pbl9wYWdlKHJvdF9pbmZvLT51 dl9vZmZzZXQpKQo+ID4gLQkJCXV2X3N0YXJ0X3BhZ2UtLTsKPiA+IC0KPiA+IC0JCXJvdF9pbmZv LT51dl9zdGFydF9wYWdlID0gdXZfc3RhcnRfcGFnZTsKPiA+IC0KPiA+IC0JCXJvdGF0ZV9wYWdl cyhwYWdlX2FkZHJfbGlzdCwgdXZfc3RhcnRfcGFnZSwKPiA+IC0JCQkgICAgIHJvdF9pbmZvLT53 aWR0aF9wYWdlc191diwKPiA+IC0JCQkgICAgIHJvdF9pbmZvLT5oZWlnaHRfcGFnZXNfdXYsCj4g PiAtCQkJICAgICByb3RfaW5mby0+d2lkdGhfcGFnZXNfdXYsCj4gPiAtCQkJICAgICBzdCwgc2cp Owo+ID4gKwlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUoaW5mby0+cGxhbmUpOyBpKyspIHsK PiA+ICsJCXNnID0gcm90YXRlX3BhZ2VzKHBhZ2VfYWRkcl9saXN0LCBpbmZvLT5wbGFuZVtpXS5v ZmZzZXQsCj4gPiArCQkJCSAgaW5mby0+cGxhbmVbaV0ud2lkdGgsIGluZm8tPnBsYW5lW2ldLmhl aWdodCwKPiA+ICsJCQkJICBpbmZvLT5wbGFuZVtpXS5zdHJpZGUsIHN0LCBzZyk7Cj4gPiAgCX0K PiA+ICAKPiA+IC0JRFJNX0RFQlVHX0tNUygKPiA+IC0JCSAgICAgICJDcmVhdGVkIHJvdGF0ZWQg cGFnZSBtYXBwaW5nIGZvciBvYmplY3Qgc2l6ZSAlenUgKHBpdGNoPSV1LCBoZWlnaHQ9JXUsIHBp eGVsX2Zvcm1hdD0weCV4LCAldXgldSB0aWxlcywgJXUgcGFnZXMgKCV1IHBsYW5lIDApKS5cbiIs Cj4gPiAtCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcm90X2luZm8tPnBpdGNoLCByb3RfaW5mby0+ aGVpZ2h0LAo+ID4gLQkJICAgICAgcm90X2luZm8tPnBpeGVsX2Zvcm1hdCwgcm90X2luZm8tPndp ZHRoX3BhZ2VzLAo+ID4gLQkJICAgICAgcm90X2luZm8tPmhlaWdodF9wYWdlcywgc2l6ZV9wYWdl cyArIHNpemVfcGFnZXNfdXYsCj4gPiAtCQkgICAgICBzaXplX3BhZ2VzKTsKPiA+ICsJRFJNX0RF QlVHX0tNUygiQ3JlYXRlZCByb3RhdGVkIHBhZ2UgbWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1 ICgldXgldSB0aWxlcywgJXUgcGFnZXMpXG4iLAo+ID4gKwkJICAgICAgb2JqLT5iYXNlLnNpemUs IGluZm8tPnBsYW5lWzBdLndpZHRoLCBpbmZvLT5wbGFuZVswXS5oZWlnaHQsIHNpemUpOwo+ID4g IAo+ID4gIAlkcm1fZnJlZV9sYXJnZShwYWdlX2FkZHJfbGlzdCk7Cj4gPiAgCj4gPiBAQCAtMzM2 MCwxMiArMzMyOCw4IEBAIGVycl9zZ19hbGxvYzoKPiA+ICBlcnJfc3RfYWxsb2M6Cj4gPiAgCWRy bV9mcmVlX2xhcmdlKHBhZ2VfYWRkcl9saXN0KTsKPiA+ICAKPiA+IC0JRFJNX0RFQlVHX0tNUygK PiA+IC0JCSAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHJvdGF0ZWQgbWFwcGluZyBmb3Igb2JqZWN0 IHNpemUgJXp1ISAoJWQpIChwaXRjaD0ldSwgaGVpZ2h0PSV1LCBwaXhlbF9mb3JtYXQ9MHgleCwg JXV4JXUgdGlsZXMsICV1IHBhZ2VzICgldSBwbGFuZSAwKSlcbiIsCj4gPiAtCQkgICAgICBvYmot PmJhc2Uuc2l6ZSwgcmV0LCByb3RfaW5mby0+cGl0Y2gsIHJvdF9pbmZvLT5oZWlnaHQsCj4gPiAt CQkgICAgICByb3RfaW5mby0+cGl4ZWxfZm9ybWF0LCByb3RfaW5mby0+d2lkdGhfcGFnZXMsCj4g PiAtCQkgICAgICByb3RfaW5mby0+aGVpZ2h0X3BhZ2VzLCBzaXplX3BhZ2VzICsgc2l6ZV9wYWdl c191diwKPiA+IC0JCSAgICAgIHNpemVfcGFnZXMpOwo+ID4gKwlEUk1fREVCVUdfS01TKCJGYWls ZWQgdG8gY3JlYXRlIHJvdGF0ZWQgbWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1ISAoJXV4JXUg dGlsZXMsICV1IHBhZ2VzKVxuIiwKPiA+ICsJCSAgICAgIG9iai0+YmFzZS5zaXplLCBpbmZvLT5w bGFuZVswXS53aWR0aCwgaW5mby0+cGxhbmVbMF0uaGVpZ2h0LCBzaXplKTsKPiA+ICAJcmV0dXJu IEVSUl9QVFIocmV0KTsKPiA+ICB9Cj4gPiAgCj4gPiBAQCAtMzUxNiw3ICszNDgwLDcgQEAgaTkx NV9nZ3R0X3ZpZXdfc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ID4gIAlp ZiAodmlldy0+dHlwZSA9PSBJOTE1X0dHVFRfVklFV19OT1JNQUwpIHsKPiA+ICAJCXJldHVybiBv YmotPmJhc2Uuc2l6ZTsKPiA+ICAJfSBlbHNlIGlmICh2aWV3LT50eXBlID09IEk5MTVfR0dUVF9W SUVXX1JPVEFURUQpIHsKPiA+IC0JCXJldHVybiB2aWV3LT5yb3RhdGVkLnNpemU7Cj4gPiArCQly ZXR1cm4gaW50ZWxfcm90YXRpb25faW5mb19zaXplKCZ2aWV3LT5yb3RhdGVkKSA8PCBQQUdFX1NI SUZUOwo+ID4gIAl9IGVsc2UgaWYgKHZpZXctPnR5cGUgPT0gSTkxNV9HR1RUX1ZJRVdfUEFSVElB TCkgewo+ID4gIAkJcmV0dXJuIHZpZXctPnBhcnRpYWwuc2l6ZSA8PCBQQUdFX1NISUZUOwo+ID4g IAl9IGVsc2Ugewo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiA+IGluZGV4IDY4 ZGU3MzQuLmVhMjhmN2QgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgK PiA+IEBAIC0xMzYsMTYgKzEzNiwxMCBAQCBlbnVtIGk5MTVfZ2d0dF92aWV3X3R5cGUgewo+ID4g IH07Cj4gPiAgCj4gPiAgc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gewo+ID4gLQl1bnNpZ25l ZCBpbnQgaGVpZ2h0Owo+ID4gLQl1bnNpZ25lZCBpbnQgcGl0Y2g7Cj4gPiAtCXVuc2lnbmVkIGlu dCB1dl9vZmZzZXQ7Cj4gPiAtCXVpbnQzMl90IHBpeGVsX2Zvcm1hdDsKPiA+IC0JdWludDY0X3Qg ZmJfbW9kaWZpZXI7Cj4gPiAtCXVuc2lnbmVkIGludCB3aWR0aF9wYWdlcywgaGVpZ2h0X3BhZ2Vz Owo+ID4gLQl1aW50NjRfdCBzaXplOwo+ID4gLQl1bnNpZ25lZCBpbnQgd2lkdGhfcGFnZXNfdXYs IGhlaWdodF9wYWdlc191djsKPiA+IC0JdWludDY0X3Qgc2l6ZV91djsKPiA+IC0JdW5zaWduZWQg aW50IHV2X3N0YXJ0X3BhZ2U7Cj4gPiArCXN0cnVjdCB7Cj4gPiArCQkvKiB0aWxlcyAqLwo+ID4g KwkJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwgb2Zmc2V0Owo+ID4gKwl9IHBs YW5lWzJdOwo+ID4gIH07Cj4gPiAgCj4gPiAgc3RydWN0IGk5MTVfZ2d0dF92aWV3IHsKPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IGluZGV4IDAyOGRjNGEuLjBkY2I3MTAg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTIyNzQs NDkgKzIyNzQsMjggQEAgaW50ZWxfZmJfYWxpZ25faGVpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHVuc2lnbmVkIGludCBoZWlnaHQsCj4gPiAgCXJldHVybiBBTElHTihoZWlnaHQsIHRpbGVf aGVpZ2h0KTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGludAo+ID4gK3Vuc2lnbmVkIGludCBp bnRlbF9yb3RhdGlvbl9pbmZvX3NpemUoY29uc3Qgc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8g KmluZm8pCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IDA7Cj4gPiArCWludCBpOwo+ ID4gKwo+ID4gKwlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUoaW5mby0+cGxhbmUpOyBpKysp Cj4gPiArCQlzaXplICs9IGluZm8tPnBsYW5lW2ldLndpZHRoICogaW5mby0+cGxhbmVbaV0uaGVp Z2h0Owo+ID4gKwo+ID4gKwlyZXR1cm4gc2l6ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZv aWQKPiA+ICBpbnRlbF9maWxsX2ZiX2dndHRfdmlldyhzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZp ZXcsCj4gPiAgCQkJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiAgCQkJdW5z aWduZWQgaW50IHJvdGF0aW9uKQo+ID4gIHsKPiA+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShmYi0+ZGV2KTsKPiA+IC0Jc3RydWN0IGludGVsX3JvdGF0aW9u X2luZm8gKmluZm8gPSAmdmlldy0+cm90YXRlZDsKPiA+IC0JdW5zaWduZWQgaW50IHRpbGVfc2l6 ZSwgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQsIGNwcDsKPiA+IC0KPiA+IC0JKnZpZXcgPSBpOTE1 X2dndHRfdmlld19ub3JtYWw7Cj4gPiAtCj4gPiAtCWlmICghaW50ZWxfcm90YXRpb25fOTBfb3Jf MjcwKHJvdGF0aW9uKSkKPiA+IC0JCXJldHVybiAwOwo+ID4gLQo+ID4gLQkqdmlldyA9IGk5MTVf Z2d0dF92aWV3X3JvdGF0ZWQ7Cj4gPiAtCj4gPiAtCWluZm8tPmhlaWdodCA9IGZiLT5oZWlnaHQ7 Cj4gPiAtCWluZm8tPnBpeGVsX2Zvcm1hdCA9IGZiLT5waXhlbF9mb3JtYXQ7Cj4gPiAtCWluZm8t PnBpdGNoID0gZmItPnBpdGNoZXNbMF07Cj4gPiAtCWluZm8tPnV2X29mZnNldCA9IGZiLT5vZmZz ZXRzWzFdOwo+ID4gLQlpbmZvLT5mYl9tb2RpZmllciA9IGZiLT5tb2RpZmllclswXTsKPiA+IC0K PiA+IC0JdGlsZV9zaXplID0gaW50ZWxfdGlsZV9zaXplKGRldl9wcml2KTsKPiA+IC0KPiA+IC0J Y3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gPiAtCXRp bGVfd2lkdGggPSBpbnRlbF90aWxlX3dpZHRoKGRldl9wcml2LCBjcHAsIGZiLT5tb2RpZmllclsw XSk7Cj4gPiAtCXRpbGVfaGVpZ2h0ID0gdGlsZV9zaXplIC8gdGlsZV93aWR0aDsKPiA+IC0KPiA+ IC0JaW5mby0+d2lkdGhfcGFnZXMgPSBESVZfUk9VTkRfVVAoZmItPnBpdGNoZXNbMF0sIHRpbGVf d2lkdGgpOwo+ID4gLQlpbmZvLT5oZWlnaHRfcGFnZXMgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdo dCwgdGlsZV9oZWlnaHQpOwo+ID4gLQlpbmZvLT5zaXplID0gaW5mby0+d2lkdGhfcGFnZXMgKiBp bmZvLT5oZWlnaHRfcGFnZXMgKiB0aWxlX3NpemU7Cj4gPiAtCj4gPiAtCWlmIChpbmZvLT5waXhl bF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyKSB7Cj4gPiAtCQljcHAgPSBkcm1fZm9ybWF0X3Bs YW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAxKTsKPiA+IC0JCXRpbGVfd2lkdGggPSBpbnRlbF90 aWxlX3dpZHRoKGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMV0sIGNwcCk7Cj4gPiAtCQl0aWxlX2hl aWdodCA9IHRpbGVfc2l6ZSAvIHRpbGVfd2lkdGg7Cj4gPiAtCj4gPiAtCQlpbmZvLT53aWR0aF9w YWdlc191diA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hlc1sxXSwgdGlsZV93aWR0aCk7Cj4gPiAt CQlpbmZvLT5oZWlnaHRfcGFnZXNfdXYgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCAvIDIsIHRp bGVfaGVpZ2h0KTsKPiA+IC0JCWluZm8tPnNpemVfdXYgPSBpbmZvLT53aWR0aF9wYWdlc191diAq IGluZm8tPmhlaWdodF9wYWdlc191diAqIHRpbGVfc2l6ZTsKPiA+ICsJaWYgKGludGVsX3JvdGF0 aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKPiA+ICsJCSp2aWV3ID0gaTkxNV9nZ3R0X3ZpZXdf cm90YXRlZDsKPiA+ICsJCXZpZXctPnJvdGF0ZWQgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYikt PmluZm87Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQkqdmlldyA9IGk5MTVfZ2d0dF92aWV3X25vcm1h bDsKPiA+ICAJfQo+ID4gLQo+ID4gLQlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGlj IHVuc2lnbmVkIGludCBpbnRlbF9saW5lYXJfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiA+IEBAIC0yMzY4LDkgKzIzNDcsNyBAQCBpbnRlbF9waW5f YW5kX2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiA+ICAKPiA+ICAJ YWxpZ25tZW50ID0gaW50ZWxfc3VyZl9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclsw XSk7Cj4gPiAgCj4gPiAtCXJldCA9IGludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KCZ2aWV3LCBmYiwg cm90YXRpb24pOwo+ID4gLQlpZiAocmV0KQo+ID4gLQkJcmV0dXJuIHJldDsKPiA+ICsJaW50ZWxf ZmlsbF9mYl9nZ3R0X3ZpZXcoJnZpZXcsIGZiLCByb3RhdGlvbik7Cj4gPiAgCj4gPiAgCS8qIE5v dGUgdGhhdCB0aGUgdy9hIGFsc28gcmVxdWlyZXMgNjQgUFRFIG9mIHBhZGRpbmcgZm9sbG93aW5n IHRoZQo+ID4gIAkgKiBiby4gV2UgY3VycmVudGx5IGZpbGwgYWxsIHVudXNlZCBQVEUgd2l0aCB0 aGUgc2hhZG93IHBhZ2UgYW5kIHNvCj4gPiBAQCAtMjQzMywxOCArMjQxMCwzMSBAQCBzdGF0aWMg dm9pZCBpbnRlbF91bnBpbl9mYl9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHVuc2ln bmVkIGludCByb3RhdGlvbgo+ID4gIHsKPiA+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4gPiAgCXN0cnVjdCBpOTE1X2dndHRfdmlldyB2aWV3 Owo+ID4gLQlpbnQgcmV0Owo+ID4gIAo+ID4gIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJm9i ai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCkpOwo+ID4gIAo+ID4gLQlyZXQgPSBpbnRlbF9maWxs X2ZiX2dndHRfdmlldygmdmlldywgZmIsIHJvdGF0aW9uKTsKPiA+IC0JV0FSTl9PTkNFKHJldCwg IkNvdWxkbid0IGdldCB2aWV3IGZyb20gcGxhbmUgc3RhdGUhIik7Cj4gPiArCWludGVsX2ZpbGxf ZmJfZ2d0dF92aWV3KCZ2aWV3LCBmYiwgcm90YXRpb24pOwo+ID4gIAo+ID4gIAlpOTE1X2dlbV9v YmplY3RfdW5waW5fZmVuY2Uob2JqKTsKPiA+ICAJaTkxNV9nZW1fb2JqZWN0X3VucGluX2Zyb21f ZGlzcGxheV9wbGFuZShvYmosICZ2aWV3KTsKPiA+ICB9Cj4gPiAgCj4gPiAgLyoKPiA+ICsgKiBD b252ZXJ0IHRoZSB4L3kgb2Zmc2V0cyBpbnRvIGEgbGluZWFyIG9mZnNldC4KPiA+ICsgKiBPbmx5 IHZhbGlkIHdpdGggMC8xODAgZGVncmVlIHJvdGF0aW9uLCB3aGljaCBpcyBmaW5lIHNpbmNlIGxp bmVhcgo+ID4gKyAqIG9mZnNldCBpcyBvbmx5IHVzZWQgd2l0aCBsaW5lYXIgYnVmZmVycyBvbiBw cmUtaHN3IGFuZCB0aWxlZCBidWZmZXJzCj4gPiArICogd2l0aCBnZW4yLzMsIGFuZCA5MC8yNzAg ZGVncmVlIHJvdGF0aW9ucyBpc24ndCBzdXBwb3J0ZWQgb24gYW55IG9mIHRoZW0uCj4gPiArICov Cj4gPiArdW5zaWduZWQgaW50IGludGVsX2ZiX3h5X3RvX2xpbmVhcihpbnQgeCwgaW50IHksCj4g PiArCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCj4g PiArewo+ID4gKwl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBp eGVsX2Zvcm1hdCwgcGxhbmUpOwo+ID4gKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBmYi0+cGl0Y2hl c1twbGFuZV07Cj4gPiArCj4gPiArCXJldHVybiB5ICogcGl0Y2ggKyB4ICogY3BwOwo+ID4gK30K PiA+ICsKPiA+ICsvKgo+ID4gICAqIFJldHVybiB0aGUgdGlsZSBkaW1lbnNpb25zIGluIHBpeGVs IHVuaXRzIG1hdGNoaW5nCj4gPiAgICogdGhlIHNwZWNpZmllZCByb3RhdGlvbiBhbmdsZS4KPiA+ ICAgKi8KPiA+IEBAIC0yNDc1LDYgKzI0NjUsNTUgQEAgc3RhdGljIHZvaWQgaW50ZWxfcm90YXRl X3RpbGVfZGltcyh1bnNpZ25lZCBpbnQgKnRpbGVfd2lkdGgsCj4gPiAgfQo+ID4gIAo+ID4gIC8q Cj4gPiArICogQWRkIHRoZSB4L3kgb2Zmc2V0cyBkZXJpdmVkIGZyb20gZmItPm9mZnNldHNbXSB0 byB0aGUgdXNlcgo+ID4gKyAqIHNwZWNpZmllZCBwbGFuZSBzcmMgeC95IG9mZnNldHMuIFRoZSBy ZXN1bHRpbmcgeC95IG9mZnNldHMKPiA+ICsgKiBzcGVjaWZ5IHRoZSBzdGFydCBvZiBzY2Fub3V0 IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZ3R0IG1hcHBpbmcuCj4gPiArICovCj4gPiArdm9p ZCBpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwKPiA+ICsJCQkgIGNvbnN0IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gPiArCQkJICB1bnNpZ25lZCBp bnQgcm90YXRpb24pCj4gPiArCj4gPiArewo+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwo+ID4gKwljb25zdCBzdHJ1Y3QgaW50 ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwo+ID4g Kwl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1h dCwgcGxhbmUpOwo+ID4gKwl1bnNpZ25lZCBpbnQgcGl0Y2g7Cj4gPiArCj4gPiArCWlmIChpbnRl bF9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gPiArCQlwaXRjaCA9IGludGVsX2Zi LT5wbGFuZVtwbGFuZV0ucm90YXRlZC5waXRjaDsKPiA+ICsKPiA+ICsJCSp4ICs9IGludGVsX2Zi LT5wbGFuZVtwbGFuZV0ucm90YXRlZC54Owo+ID4gKwkJKnkgKz0gaW50ZWxfZmItPnBsYW5lW3Bs YW5lXS5yb3RhdGVkLnk7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlwaXRjaCA9IGZiLT5waXRjaGVz W3BsYW5lXTsKPiA+ICsKPiA+ICsJCSp4ICs9IGludGVsX2ZiLT5wbGFuZVtwbGFuZV0ubm9ybWFs Lng7Cj4gPiArCQkqeSArPSBpbnRlbF9mYi0+cGxhbmVbcGxhbmVdLm5vcm1hbC55Owo+ID4gKwl9 Cj4gPiArCj4gPiArCS8qIG1pbmltaXplIHggKi8KPiA+ICsJaWYgKGZiLT5tb2RpZmllcltwbGFu ZV0gIT0gRFJNX0ZPUk1BVF9NT0RfTk9ORSkgewo+ID4gKwkJdW5zaWduZWQgaW50IHRpbGVfc2l6 ZSwgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQ7Cj4gPiArCj4gPiArCQl0aWxlX3NpemUgPSBpbnRl bF90aWxlX3NpemUoZGV2X3ByaXYpOwo+ID4gKwkJdGlsZV93aWR0aCA9IGludGVsX3RpbGVfd2lk dGgoZGV2X3ByaXYsIGZiLT5tb2RpZmllcltwbGFuZV0sIGNwcCk7Cj4gPiArCQl0aWxlX2hlaWdo dCA9IHRpbGVfc2l6ZSAvIHRpbGVfd2lkdGg7Cj4gPiArCj4gPiArCQlpbnRlbF9yb3RhdGVfdGls ZV9kaW1zKCZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQsCj4gPiArCQkJCSAgICAgICAmcGl0Y2gs IGNwcCwgcm90YXRpb24pOwo+ID4gKwo+ID4gKwkJKnkgKz0gKnggLyBwaXRjaCAqIHRpbGVfaGVp Z2h0Owo+ID4gKwkJKnggID0gKnggJSBwaXRjaDsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCS8qIGlu IHBpeGVscyAqLwo+ID4gKwkJcGl0Y2ggLz0gY3BwOwo+ID4gKwo+ID4gKwkJKnkgKz0gKnggLyBw aXRjaDsKPiA+ICsJCSp4ICA9ICp4ICUgcGl0Y2g7Cj4gPiArCX0KPiAKPiBUaGlzIGlzIGNhbGxl ZCBiZWZvcmUgd2UgZG8gdGhlIGVudGlyZSBwYWdlX29mZnNldCBkYW5jZSwgc28gSSBkb24ndCB0 aGluawo+IHdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgZm9yIHRpbGVkIHZzLiB1bnRpbGVkLgoKSG1t LiBJIHRoaW5rIHRoaXMgaXMgbGVmdG92ZXIgZnJvbSBzb21lIGVhcmxpZXIgdmVyc2lvbiB3aGVy ZSBJIGRpZApzdHVmZiBpbiBhIGRpZmZlcmVudCBvcmRlci4gWWVhaCwgdGhlIHBhZ2Vfb2Zmc2V0 IHN0dWZmIHNob3VsZCBkZWFsCndpdGggdGhpcyBqdXN0IGZpbmUsIGFuZCBmb3IgZ2VuMi8zIHdl IGp1c3QgY29udmVydCBpdCB0byBhIGxpbmVhciAKb2Zmc2V0IGFueXdheSBzbyBpdCdzIHRoZSBz YW1lIHRoaW5nIGluIHRoZSBlbmQuIEknbGwganVzdCB0aHJvdyB0aGUKZW50aXJlICJtaW5pbWl6 ZSB4IiBjcmFwIGluIHRoZSBiaW4uCgo+IC1EYW5pZWwKPiAKPiA+ICt9Cj4gPiArCj4gPiArLyoK PiA+ICAgKiBBZGp1c3QgdGhlIHBhZ2Ugb2Zmc2V0IGJ5IG1vdmluZyB0aGUgZGlmZmVyZW5jZSBp bnRvCj4gPiAgICogdGhlIHgveSBvZmZzZXRzLgo+ID4gICAqCj4gPiBAQCAtMjUxNCwyMCArMjU1 MywyMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hZGp1c3RfcGFnZV9vZmZzZXQoaW50ICp4LCBpbnQg KnksCj4gPiAgICogSW4gdGhlIDkwLzI3MCByb3RhdGVkIGNhc2UsIHggYW5kIHkgYXJlIGFzc3Vt ZWQKPiA+ICAgKiB0byBiZSBhbHJlYWR5IHJvdGF0ZWQgdG8gbWF0Y2ggdGhlIHJvdGF0ZWQgR1RU IHZpZXcsIGFuZAo+ID4gICAqIHBpdGNoIGlzIHRoZSB0aWxlX2hlaWdodCBhbGlnbmVkIGZyYW1l YnVmZmVyIGhlaWdodC4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVu IGNvbXB1dGluZyB0aGUgZGVyaXZlZCBpbmZvcm1hdGlvbgo+ID4gKyAqIHVuZGVyIGludGVsX2Zy YW1lYnVmZmVyLCBzbyB1c2luZyBhbnkgb2YgdGhhdCBpbmZvcm1hdGlvbgo+ID4gKyAqIGhlcmUg aXMgbm90IGFsbG93ZWQuIEFueXRoaW5nIHVuZGVyIGRybV9mcmFtZWJ1ZmZlciBjYW4gYmUKPiA+ ICsgKiB1c2VkLiBUaGlzIGlzIHdoeSB0aGUgdXNlciBoYXMgdG8gcGFzcyBpbiB0aGUgcGl0Y2gg c2luY2UgaXQKPiA+ICsgKiBpcyBzcGVjaWZpZWQgaW4gdGhlIHJvdGF0ZWQgb3JpZW50YXRpb24u Cj4gPiAgICovCj4gPiAtdW5zaWduZWQgbG9uZyBpbnRlbF9jb21wdXRlX3BhZ2Vfb2Zmc2V0KGlu dCAqeCwgaW50ICp5LAo+ID4gLQkJCQkJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs IGludCBwbGFuZSwKPiA+IC0JCQkJCXVuc2lnbmVkIGludCBwaXRjaCwKPiA+IC0JCQkJCXVuc2ln bmVkIGludCByb3RhdGlvbikKPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IF9pbnRlbF9jb21wdXRl X3BhZ2Vfb2Zmc2V0KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ ICsJCQkJCSAgICAgICBpbnQgKngsIGludCAqeSwKPiA+ICsJCQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ID4gKwkJCQkJICAgICAgIHVuc2ln bmVkIGludCBwaXRjaCwKPiA+ICsJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24sCj4g PiArCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGFsaWdubWVudCkKPiA+ICB7Cj4gPiAtCWNvbnN0 IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7Cj4g PiAgCXVpbnQ2NF90IGZiX21vZGlmaWVyID0gZmItPm1vZGlmaWVyW3BsYW5lXTsKPiA+ICAJdW5z aWduZWQgaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIHBs YW5lKTsKPiA+IC0JdW5zaWduZWQgaW50IG9mZnNldCwgYWxpZ25tZW50Owo+ID4gLQo+ID4gLQlh bGlnbm1lbnQgPSBpbnRlbF9zdXJmX2FsaWdubWVudChkZXZfcHJpdiwgZmJfbW9kaWZpZXIpOwo+ ID4gLQlpZiAoYWxpZ25tZW50KQo+ID4gLQkJYWxpZ25tZW50LS07Cj4gPiArCXVuc2lnbmVkIGlu dCBvZmZzZXQ7Cj4gPiAgCj4gPiAgCWlmIChmYl9tb2RpZmllciAhPSBEUk1fRk9STUFUX01PRF9O T05FKSB7Cj4gPiAgCQl1bnNpZ25lZCBpbnQgdGlsZV9zaXplLCB0aWxlX3dpZHRoLCB0aWxlX2hl aWdodDsKPiA+IEBAIC0yNTYwLDYgKzI2MDIsMTQ1IEBAIHVuc2lnbmVkIGxvbmcgaW50ZWxfY29t cHV0ZV9wYWdlX29mZnNldChpbnQgKngsIGludCAqeSwKPiA+ICAJcmV0dXJuIG9mZnNldCAmIH5h bGlnbm1lbnQ7Cj4gPiAgfQo+ID4gIAo+ID4gK3Vuc2lnbmVkIGludCBpbnRlbF9jb21wdXRlX3Bh Z2Vfb2Zmc2V0KGludCAqeCwgaW50ICp5LAo+ID4gKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiA+ICsJCQkJICAgICAgIHVuc2lnbmVkIGlu dCBwaXRjaCwKPiA+ICsJCQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKPiA+ICt7Cj4g PiArCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmIt PmRldik7Cj4gPiArCXVuc2lnbmVkIGludCBhbGlnbm1lbnQgPSBpbnRlbF9zdXJmX2FsaWdubWVu dChkZXZfcHJpdiwgZmItPm1vZGlmaWVyW3BsYW5lXSk7Cj4gPiArCj4gPiArCXJldHVybiBfaW50 ZWxfY29tcHV0ZV9wYWdlX29mZnNldChkZXZfcHJpdiwgeCwgeSwgZmIsIHBsYW5lLCBwaXRjaCwK PiA+ICsJCQkJCSAgcm90YXRpb24sIGFsaWdubWVudCA/IChhbGlnbm1lbnQgLSAxKSA6IDApOwo+ ID4gK30KPiA+ICsKPiA+ICsvKiBDb252ZXJ0IHRoZSBmYi0+b2Zmc2V0W10gbGluZWFyIG9mZnNl dCBpbnRvIHgveSBvZmZzZXRzICovCj4gPiArc3RhdGljIHZvaWQgaW50ZWxfZmJfb2Zmc2V0X3Rv X3h5KGludCAqeCwgaW50ICp5LAo+ID4gKwkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiLCBpbnQgcGxhbmUpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgY3BwID0gZHJtX2Zv cm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgcGxhbmUpOwo+ID4gKwl1bnNpZ25lZCBp bnQgcGl0Y2ggPSBmYi0+cGl0Y2hlc1twbGFuZV07Cj4gPiArCXVuc2lnbmVkIGludCBsaW5lYXJf b2Zmc2V0ID0gZmItPm9mZnNldHNbcGxhbmVdOwo+ID4gKwo+ID4gKwkqeSA9IGxpbmVhcl9vZmZz ZXQgLyBwaXRjaDsKPiA+ICsJKnggPSBsaW5lYXJfb2Zmc2V0ICUgcGl0Y2ggLyBjcHA7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQKPiA+ICtpbnRlbF9maWxsX2ZiX2luZm8oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIgKmludGVsX2ZiID0g dG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5m byAqaW5mbyA9ICZpbnRlbF9mYi0+aW5mbzsKPiA+ICsJdW5zaWduZWQgaW50IHRpbGVfc2l6ZTsK PiA+ICsJdW5zaWduZWQgaW50IGd0dF9vZmZzZXRfcm90YXRlZCA9IDA7Cj4gPiArCXVuc2lnbmVk IGludCBtYXhfc2l6ZSA9IDA7Cj4gPiArCXVpbnQzMl90IGZvcm1hdCA9IGZiLT5waXhlbF9mb3Jt YXQ7Cj4gPiArCWludCBpLCBudW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGZvcm1h dCk7Cj4gPiArCj4gPiArCXRpbGVfc2l6ZSA9IGludGVsX3RpbGVfc2l6ZShkZXZfcHJpdik7Cj4g PiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fcGxhbmVzOyBpKyspIHsKPiA+ICsJCXVuc2ln bmVkIGludCB3aWR0aCwgaGVpZ2h0Owo+ID4gKwkJdW5zaWduZWQgaW50IGNwcCwgb2Zmc2V0LCBz aXplOwo+ID4gKwkJaW50IHgsIHk7Cj4gPiArCj4gPiArCQljcHAgPSBkcm1fZm9ybWF0X3BsYW5l X2NwcChmb3JtYXQsIGkpOwo+ID4gKwkJd2lkdGggPSBkcm1fZm9ybWF0X3BsYW5lX3dpZHRoKGZi LT53aWR0aCwgZm9ybWF0LCBpKTsKPiA+ICsJCWhlaWdodCA9IGRybV9mb3JtYXRfcGxhbmVfaGVp Z2h0KGZiLT5oZWlnaHQsIGZvcm1hdCwgaSk7Cj4gPiArCj4gPiArCQlpbnRlbF9mYl9vZmZzZXRf dG9feHkoJngsICZ5LCBmYiwgaSk7Cj4gPiArCj4gPiArCQkvKgo+ID4gKwkJICogRmlyc3QgcGl4 ZWwgb2YgdGhlIGZyYW1lYnVmZmVyIGZyb20KPiA+ICsJCSAqIHRoZSBzdGFydCBvZiB0aGUgbm9y bWFsIGd0dCBtYXBwaW5nLgo+ID4gKwkJICovCj4gPiArCQlpbnRlbF9mYi0+cGxhbmVbaV0ubm9y bWFsLnggPSB4Owo+ID4gKwkJaW50ZWxfZmItPnBsYW5lW2ldLm5vcm1hbC55ID0geTsKPiA+ICsK PiA+ICsJCW9mZnNldCA9IF9pbnRlbF9jb21wdXRlX3BhZ2Vfb2Zmc2V0KGRldl9wcml2LCAmeCwg JnksCj4gPiArCQkJCQkJICAgIGZiLCAwLCBmYi0+cGl0Y2hlc1tpXSwKPiA+ICsJCQkJCQkgICAg QklUKERSTV9ST1RBVEVfMCksCj4gPiArCQkJCQkJICAgIHRpbGVfc2l6ZSk7Cj4gPiArCQlvZmZz ZXQgLz0gdGlsZV9zaXplOwo+ID4gKwkJRFJNX0RFQlVHKCJwYWdlIG9mZnNldCAldSBwYWdlc1xu Iiwgb2Zmc2V0KTsKPiA+ICsKPiA+ICsJCWlmIChmYi0+bW9kaWZpZXJbaV0gIT0gRFJNX0ZPUk1B VF9NT0RfTk9ORSkgewo+ID4gKwkJCXVuc2lnbmVkIGludCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdo dDsKPiA+ICsJCQl1bnNpZ25lZCBpbnQgcGl0Y2g7Cj4gPiArCQkJc3RydWN0IGRybV9yZWN0IHI7 Cj4gPiArCj4gPiArCQkJdGlsZV93aWR0aCA9IGludGVsX3RpbGVfd2lkdGgoZGV2X3ByaXYsIGZi LT5tb2RpZmllcltpXSwgY3BwKTsKPiA+ICsJCQl0aWxlX2hlaWdodCA9IHRpbGVfc2l6ZSAvIHRp bGVfd2lkdGg7Cj4gPiArCj4gPiArCQkJaW5mby0+cGxhbmVbaV0ub2Zmc2V0ID0gb2Zmc2V0Owo+ ID4gKwkJCWluZm8tPnBsYW5lW2ldLnN0cmlkZSA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hlc1tp XSwgdGlsZV93aWR0aCk7Cj4gPiArCQkJaW5mby0+cGxhbmVbaV0ud2lkdGggPSBESVZfUk9VTkRf VVAoKHggKyB3aWR0aCkgKiBjcHAsIHRpbGVfd2lkdGgpOwo+ID4gKwkJCWluZm8tPnBsYW5lW2ld LmhlaWdodCA9IERJVl9ST1VORF9VUCh5ICsgaGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4gPiArCj4g PiArCj4gPiArCQkJaW50ZWxfZmItPnBsYW5lW2ldLnJvdGF0ZWQucGl0Y2ggPQo+ID4gKwkJCQlp bmZvLT5wbGFuZVtpXS5oZWlnaHQgKiB0aWxlX2hlaWdodDsKPiA+ICsKPiA+ICsJCQkvKiBob3cg bWFueSB0aWxlcyBkb2VzIHRoaXMgcGxhbmUgbmVlZCAqLwo+ID4gKwkJCXNpemUgPSBpbmZvLT5w bGFuZVtpXS5zdHJpZGUgKiBpbmZvLT5wbGFuZVtpXS5oZWlnaHQ7Cj4gPiArCQkJLyoKPiA+ICsJ CQkgKiBJZiB0aGUgcGxhbmUgaXNuJ3QgaG9yaXpvbnRhbGx5IHRpbGUgYWxpZ25lZCwKPiA+ICsJ CQkgKiB3ZSBuZWVkIG9uZSBtb3JlIHRpbGUuCj4gPiArCQkJICovCj4gPiArCQkJaWYgKHggIT0g MCkKPiA+ICsJCQkJc2l6ZSsrOwo+ID4gKwo+ID4gKwkJCXBpdGNoID0gaW50ZWxfZmItPnBsYW5l W2ldLnJvdGF0ZWQucGl0Y2g7Cj4gPiArCj4gPiArCQkJLyogcm90YXRlIHRoZSB4L3kgb2Zmc2V0 cyB0byBtYXRjaCB0aGUgR1RUIHZpZXcgKi8KPiA+ICsJCQlyLngxID0geDsKPiA+ICsJCQlyLnkx ID0geTsKPiA+ICsJCQlyLngyID0geCArIHdpZHRoOwo+ID4gKwkJCXIueTIgPSB5ICsgaGVpZ2h0 Owo+ID4gKwkJCWRybV9yZWN0X3JvdGF0ZSgmciwgd2lkdGgsIHBpdGNoLCBCSVQoRFJNX1JPVEFU RV8yNzApKTsKPiA+ICsJCQl4ID0gci54MTsKPiA+ICsJCQl5ID0gci55MTsKPiA+ICsKPiA+ICsJ CQlpbnRlbF9yb3RhdGVfdGlsZV9kaW1zKCZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQsICZwaXRj aCwKPiA+ICsJCQkJCSAgICAgICBjcHAsIEJJVChEUk1fUk9UQVRFXzI3MCkpOwo+ID4gKwo+ID4g KwkJCS8qCj4gPiArCQkJICogV2Ugb25seSBrZWVwIHRoZSB4L3kgb2Zmc2V0cywgc28gcHVzaCBh bGwgb2YgdGhlCj4gPiArCQkJICogZ3R0IG9mZnNldCBpbnRvIHRoZSB4L3kgb2Zmc2V0cy4KPiA+ ICsJCQkgKi8KPiA+ICsJCQlpbnRlbF9hZGp1c3RfcGFnZV9vZmZzZXQoJngsICZ5LCB0aWxlX3dp ZHRoLCB0aWxlX2hlaWdodCwKPiA+ICsJCQkJCQkgdGlsZV9zaXplLCBwaXRjaCwKPiA+ICsJCQkJ CQkgZ3R0X29mZnNldF9yb3RhdGVkICogdGlsZV9zaXplLCAwKTsKPiA+ICsKPiA+ICsJCQlndHRf b2Zmc2V0X3JvdGF0ZWQgKz0gaW5mby0+cGxhbmVbaV0ud2lkdGggKiBpbmZvLT5wbGFuZVtpXS5o ZWlnaHQ7Cj4gPiArCj4gPiArCQkJLyoKPiA+ICsJCQkgKiBGaXJzdCBwaXhlbCBvZiB0aGUgZnJh bWVidWZmZXIgZnJvbQo+ID4gKwkJCSAqIHRoZSBzdGFydCBvZiB0aGUgcm90YXRlZCBndHQgbWFw cGluZy4KPiA+ICsJCQkgKi8KPiA+ICsJCQlpbnRlbF9mYi0+cGxhbmVbaV0ucm90YXRlZC54ID0g eDsKPiA+ICsJCQlpbnRlbF9mYi0+cGxhbmVbaV0ucm90YXRlZC55ID0geTsKPiA+ICsJCX0gZWxz ZSB7Cj4gPiArCQkJc2l6ZSA9IERJVl9ST1VORF9VUCgoeSArIGhlaWdodCkgKiBmYi0+cGl0Y2hl c1tpXSArCj4gPiArCQkJCQkgICAgeCAqIGNwcCwgdGlsZV9zaXplKTsKPiA+ICsJCX0KPiA+ICsJ CURSTV9ERUJVRygiJWQgb2Zmc2V0ICV1LCBzaXplICV1LCBzdHJpZGUgJXUsIGhlaWdodCAldVxu IiwKPiA+ICsJCQkgIGksIG9mZnNldCwgc2l6ZSwgaW5mby0+cGxhbmVbaV0uc3RyaWRlLCBpbmZv LT5wbGFuZVtpXS5oZWlnaHQpOwo+ID4gKwo+ID4gKwkJLyogaG93IG1hbnkgdGlsZXMgaW4gdG90 YWwgbmVlZGVkIGluIHRoZSBibyAqLwo+ID4gKwkJbWF4X3NpemUgPSBtYXgobWF4X3NpemUsIG9m ZnNldCArIHNpemUpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChtYXhfc2l6ZSAqIHRpbGVfc2l6 ZSA+IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKS0+b2JqLT5iYXNlLnNpemUpIHsKPiA+ICsJCURS TV9ERUJVRygiZmIgdG9vIGJpZyBmb3IgYm8gKG5lZWQgJXUgYnl0ZXMsIGhhdmUgJXp1IGJ5dGVz KVxuIiwKPiA+ICsJCQkgIG1heF9zaXplICogdGlsZV9zaXplLCB0b19pbnRlbF9mcmFtZWJ1ZmZl cihmYiktPm9iai0+YmFzZS5zaXplKTsKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4g PiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgaW50IGk5eHhfZm9y bWF0X3RvX2ZvdXJjYyhpbnQgZm9ybWF0KQo+ID4gIHsKPiA+ICAJc3dpdGNoIChmb3JtYXQpIHsK PiA+IEBAIC0yNzYxLDcgKzI5NDIsNyBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wcmltYXJ5 X3BsYW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKPiA+ICAJaW50IHBsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmU7Cj4gPiAgCXVu c2lnbmVkIGludCByb3RhdGlvbjsKPiA+IC0JdW5zaWduZWQgbG9uZyBsaW5lYXJfb2Zmc2V0Owo+ ID4gKwl1bnNpZ25lZCBpbnQgbGluZWFyX29mZnNldDsKPiA+ICAJdTMyIGRzcGNudHI7Cj4gPiAg CXUzMiByZWcgPSBEU1BDTlRSKHBsYW5lKTsKPiA+ICAJaW50IHBpeGVsX3NpemU7Cj4gPiBAQCAt MjgzOSwzMCArMzAyMCwyNSBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wcmltYXJ5X3BsYW5l KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJaWYgKElTX0c0WChkZXYpKQo+ID4gIAkJZHNw Y250ciB8PSBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7Cj4gPiAgCj4gPiAtCWxpbmVh cl9vZmZzZXQgPSB5ICogZmItPnBpdGNoZXNbMF0gKyB4ICogcGl4ZWxfc2l6ZTsKPiA+ICsJaW50 ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBmYiwgMCwgcm90YXRpb24pOwo+ID4gIAo+ID4gLQlp ZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkgewo+ID4gKwlpZiAoSU5URUxfSU5GTyhkZXYp LT5nZW4gPj0gNCkKPiA+ICAJCWludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0KPiA+ICAJCQlp bnRlbF9jb21wdXRlX3BhZ2Vfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gPiAgCQkJCQkJICBmYi0+ cGl0Y2hlc1swXSwgcm90YXRpb24pOwo+ID4gLQkJbGluZWFyX29mZnNldCAtPSBpbnRlbF9jcnRj LT5kc3BhZGRyX29mZnNldDsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCWludGVsX2NydGMtPmRzcGFk ZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKPiA+IC0JfQo+ID4gIAo+ID4gIAlpZiAoY3J0Yy0+ cHJpbWFyeS0+c3RhdGUtPnJvdGF0aW9uID09IEJJVChEUk1fUk9UQVRFXzE4MCkpIHsKPiA+ICAJ CWRzcGNudHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7Cj4gPiAgCj4gPiAgCQl4ICs9IChpbnRl bF9jcnRjLT5jb25maWctPnBpcGVfc3JjX3cgLSAxKTsKPiA+ICAJCXkgKz0gKGludGVsX2NydGMt PmNvbmZpZy0+cGlwZV9zcmNfaCAtIDEpOwo+ID4gLQo+ID4gLQkJLyogRmluZGluZyB0aGUgbGFz dCBwaXhlbCBvZiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBkaXNwbGF5Cj4gPiAtCQlkYXRhIGFuZCBh ZGRpbmcgdG8gbGluZWFyX29mZnNldCovCj4gPiAtCQlsaW5lYXJfb2Zmc2V0ICs9Cj4gPiAtCQkJ KGludGVsX2NydGMtPmNvbmZpZy0+cGlwZV9zcmNfaCAtIDEpICogZmItPnBpdGNoZXNbMF0gKwo+ ID4gLQkJCShpbnRlbF9jcnRjLT5jb25maWctPnBpcGVfc3JjX3cgLSAxKSAqIHBpeGVsX3NpemU7 Cj4gPiAgCX0KPiA+ICAKPiA+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVh cih4LCB5LCBmYiwgMCk7Cj4gPiArCj4gPiArCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDQp Cj4gPiArCQlpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCA9IGxpbmVhcl9vZmZzZXQ7Cj4gPiAr Cj4gPiAgCWludGVsX2NydGMtPmFkanVzdGVkX3ggPSB4Owo+ID4gIAlpbnRlbF9jcnRjLT5hZGp1 c3RlZF95ID0geTsKPiA+ICAKPiA+IEBAIC0yODcxLDcgKzMwNDcsOCBAQCBzdGF0aWMgdm9pZCBp OXh4X3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJSTkx NV9XUklURShEU1BTVFJJREUocGxhbmUpLCBmYi0+cGl0Y2hlc1swXSk7Cj4gPiAgCWlmIChJTlRF TF9JTkZPKGRldiktPmdlbiA+PSA0KSB7Cj4gPiAgCQlJOTE1X1dSSVRFKERTUFNVUkYocGxhbmUp LAo+ID4gLQkJCSAgIGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgaW50ZWxfY3J0Yy0+ ZHNwYWRkcl9vZmZzZXQpOwo+ID4gKwkJCSAgIGludGVsX3N1cmZfZ3R0X29mZnNldChmYiwgMCwg cm90YXRpb24pICsKPiA+ICsJCQkgICBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldCk7Cj4gPiAg CQlJOTE1X1dSSVRFKERTUFRJTEVPRkYocGxhbmUpLCAoeSA8PCAxNikgfCB4KTsKPiA+ICAJCUk5 MTVfV1JJVEUoRFNQTElOT0ZGKHBsYW5lKSwgbGluZWFyX29mZnNldCk7Cj4gPiAgCX0gZWxzZQo+ ID4gQEAgLTI4OTEsNyArMzA2OCw3IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX3VwZGF0ZV9wcmlt YXJ5X3BsYW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKPiA+ICAJaW50IHBsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmU7Cj4gPiAg CXVuc2lnbmVkIGludCByb3RhdGlvbjsKPiA+IC0JdW5zaWduZWQgbG9uZyBsaW5lYXJfb2Zmc2V0 Owo+ID4gKwl1bnNpZ25lZCBpbnQgbGluZWFyX29mZnNldDsKPiA+ICAJdTMyIGRzcGNudHI7Cj4g PiAgCXUzMiByZWcgPSBEU1BDTlRSKHBsYW5lKTsKPiA+ICAJaW50IHBpeGVsX3NpemU7Cj4gPiBA QCAtMjk0NiwyNiArMzEyMywyMiBAQCBzdGF0aWMgdm9pZCBpcm9ubGFrZV91cGRhdGVfcHJpbWFy eV9wbGFuZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAgCWlmICghSVNfSEFTV0VMTChkZXYp ICYmICFJU19CUk9BRFdFTEwoZGV2KSkKPiA+ICAJCWRzcGNudHIgfD0gRElTUFBMQU5FX1RSSUNL TEVfRkVFRF9ESVNBQkxFOwo+ID4gIAo+ID4gLQlsaW5lYXJfb2Zmc2V0ID0geSAqIGZiLT5waXRj aGVzWzBdICsgeCAqIHBpeGVsX3NpemU7Cj4gPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAm eSwgZmIsIDAsIHJvdGF0aW9uKTsKPiA+ICAJaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQgPQo+ ID4gIAkJaW50ZWxfY29tcHV0ZV9wYWdlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ID4gIAkJCQkJ ICBmYi0+cGl0Y2hlc1swXSwgcm90YXRpb24pOwo+ID4gLQlsaW5lYXJfb2Zmc2V0IC09IGludGVs X2NydGMtPmRzcGFkZHJfb2Zmc2V0Owo+ID4gKwo+ID4gIAlpZiAocm90YXRpb24gPT0gQklUKERS TV9ST1RBVEVfMTgwKSkgewo+ID4gIAkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsK PiA+ICAKPiA+ICAJCWlmICghSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSkg ewo+ID4gIAkJCXggKz0gKGludGVsX2NydGMtPmNvbmZpZy0+cGlwZV9zcmNfdyAtIDEpOwo+ID4g IAkJCXkgKz0gKGludGVsX2NydGMtPmNvbmZpZy0+cGlwZV9zcmNfaCAtIDEpOwo+ID4gLQo+ID4g LQkJCS8qIEZpbmRpbmcgdGhlIGxhc3QgcGl4ZWwgb2YgdGhlIGxhc3QgbGluZSBvZiB0aGUgZGlz cGxheQo+ID4gLQkJCWRhdGEgYW5kIGFkZGluZyB0byBsaW5lYXJfb2Zmc2V0Ki8KPiA+IC0JCQls aW5lYXJfb2Zmc2V0ICs9Cj4gPiAtCQkJCShpbnRlbF9jcnRjLT5jb25maWctPnBpcGVfc3JjX2gg LSAxKSAqIGZiLT5waXRjaGVzWzBdICsKPiA+IC0JCQkJKGludGVsX2NydGMtPmNvbmZpZy0+cGlw ZV9zcmNfdyAtIDEpICogcGl4ZWxfc2l6ZTsKPiA+ICAJCX0KPiA+ICAJfQo+ID4gIAo+ID4gKwls aW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlfdG9fbGluZWFyKHgsIHksIGZiLCAwKTsKPiA+ICsK PiA+ICAJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeCA9IHg7Cj4gPiAgCWludGVsX2NydGMtPmFkanVz dGVkX3kgPSB5Owo+ID4gIAo+ID4gQEAgLTI5NzMsNyArMzE0Niw4IEBAIHN0YXRpYyB2b2lkIGly b25sYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAK PiA+ICAJSTkxNV9XUklURShEU1BTVFJJREUocGxhbmUpLCBmYi0+cGl0Y2hlc1swXSk7Cj4gPiAg CUk5MTVfV1JJVEUoRFNQU1VSRihwbGFuZSksCj4gPiAtCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9v ZmZzZXQob2JqKSArIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiA+ICsJCSAgIGludGVs X3N1cmZfZ3R0X29mZnNldChmYiwgMCwgcm90YXRpb24pICsKPiA+ICsJCSAgIGludGVsX2NydGMt PmRzcGFkZHJfb2Zmc2V0KTsKPiA+ICAJaWYgKElTX0hBU1dFTEwoZGV2KSB8fCBJU19CUk9BRFdF TEwoZGV2KSkgewo+ID4gIAkJSTkxNV9XUklURShEU1BPRkZTRVQocGxhbmUpLCAoeSA8PCAxNikg fCB4KTsKPiA+ICAJfSBlbHNlIHsKPiA+IEBAIC0zMDAwLDMwICszMTc0LDE1IEBAIHUzMiBpbnRl bF9mYl9zdHJpZGVfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiA+ICAJfQo+ID4gIH0KPiA+ICAKPiA+IC11bnNpZ25lZCBsb25nIGludGVsX3BsYW5l X29ial9vZmZzZXQoc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSwKPiA+IC0JCQkJICAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ID4gLQkJCQkgICAgIHVuc2lnbmVk IGludCBwbGFuZSkKPiA+ICt1bnNpZ25lZCBpbnQgaW50ZWxfc3VyZl9ndHRfb2Zmc2V0KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gPiArCQkJCSAgIHVuc2lnbmVkIGlu dCByb3RhdGlvbikKPiAKPiBJZiB5b3Ugd2FudCB0byBmcm9iIHRoZSBpbnRlcmZhY2UsIHRoZW4g SSdkIHJlcGxhY2UgdGhlIGZiIGFuZCByb3RhdGlvbgo+IHdpdGggdGhlIHBsYW5lIHN0YXRlLgoK SG1tLiBZZWFoIGhlcmUgd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgcGxhbmUgc3RhdGUsIHNvIGNv dWxkIHBhc3MgdGhhdAppbi4gSXQncyBhIGJpdCBmdW5reSBwYXNzaW5nIGluIHRoZSBwbGFuZSBz dGF0ZSBhbmQgdGhlIChjb2xvcikgcGxhbmUKaW5kZXguIFVzdWFsbHkgdGhlIGxhdHRlciBnb2Vz IHdpdGggZmIgb3IgcGl4ZWwgZm9ybWF0LiBCdXQgSSB0aGluayBJCmFscmVhZHkgaGF2ZSBzb21l IHdtIGNsZWFudXAgc3R1ZmYgc29tZXdoZXJlIHRoYXQgZG9lcyB0aGUgc2FtZSBhY3R1YWxseSwK c28gbWlnaHQgYXMgd2VsbCBkbyBpdCBoZXJlLgoKSSdtIGFsc28gdGhpbmtpbmcgd2UgbWF5IHdh bnQgdG8gbW92ZSBhIGJ1bmNoIG9mIHRoaXMgY29vcmRpbmF0ZQptYW5nbGluZyBpbnRvIHRoZSBj aGVjayBwaGFzZSBvZiB0aGUgb3BlcmF0aW9uIGFuZCByZWR1Y2UgdGhlIGNvbW1pdAp0byBqdXN0 IGdldHRpbmcgdGhlIHZtYSBvZmZzZXQgYW5kIGFkZGluZyBpdCB3aXRoIHRoZSBwYWdlX29mZnNl dApjb21wdXRlZCBpbiBjaGVjaygpLiBCdXQgSSdsbCBsZWF2ZSB0aGF0IGZvciB0aGUgZnV0dXJl LgoKPiAKPiA+ICB7Cj4gPiAtCWNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldyA9ICZp OTE1X2dndHRfdmlld19ub3JtYWw7Cj4gPiAtCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ID4gLQl1 bnNpZ25lZCBjaGFyICpvZmZzZXQ7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ID4gKwlzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgdmlldzsK PiA+ICAKPiA+IC0JaWYgKGludGVsX3JvdGF0aW9uXzkwX29yXzI3MChpbnRlbF9wbGFuZS0+YmFz ZS5zdGF0ZS0+cm90YXRpb24pKQo+ID4gLQkJdmlldyA9ICZpOTE1X2dndHRfdmlld19yb3RhdGVk Owo+ID4gKwlpbnRlbF9maWxsX2ZiX2dndHRfdmlldygmdmlldywgZmIsIHJvdGF0aW9uKTsKPiA+ ICAKPiA+IC0Jdm1hID0gaTkxNV9nZW1fb2JqX3RvX2dndHRfdmlldyhvYmosIHZpZXcpOwo+ID4g LQlpZiAoV0FSTighdm1hLCAiZ2d0dCB2bWEgZm9yIGRpc3BsYXkgb2JqZWN0IG5vdCBmb3VuZCEg KHZpZXc9JXUpXG4iLAo+ID4gLQkJdmlldy0+dHlwZSkpCj4gPiAtCQlyZXR1cm4gLTE7Cj4gPiAt Cj4gPiAtCW9mZnNldCA9ICh1bnNpZ25lZCBjaGFyICopdm1hLT5ub2RlLnN0YXJ0Owo+ID4gLQo+ ID4gLQlpZiAocGxhbmUgPT0gMSkgewo+ID4gLQkJb2Zmc2V0ICs9IHZtYS0+Z2d0dF92aWV3LnJv dGF0ZWQudXZfc3RhcnRfcGFnZSAqCj4gPiAtCQkJICBQQUdFX1NJWkU7Cj4gPiAtCX0KPiA+IC0K PiA+IC0JcmV0dXJuICh1bnNpZ25lZCBsb25nKW9mZnNldDsKPiA+ICsJcmV0dXJuIGk5MTVfZ2Vt X29ial9nZ3R0X29mZnNldF92aWV3KG9iaiwgJnZpZXcpOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0 aWMgdm9pZCBza2xfZGV0YWNoX3NjYWxlcihzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0Yywg aW50IGlkKQo+ID4gQEAgLTMxNDIsMTggKzMzMDEsMTYgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91 cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiAgCXN0cnVj dCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+ICAJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUgPSBjcnRjLT5wcmltYXJ5Owo+ID4gKwlzdHJ1Y3QgaW50ZWxf ZnJhbWVidWZmZXIgKmludGVsX2ZiOwo+ID4gIAlib29sIHZpc2libGUgPSB0b19pbnRlbF9wbGFu ZV9zdGF0ZShwbGFuZS0+c3RhdGUpLT52aXNpYmxlOwo+ID4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqOwo+ID4gIAlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gPiAgCXUz MiBwbGFuZV9jdGwsIHN0cmlkZV9kaXYsIHN0cmlkZTsKPiA+IC0JdTMyIHRpbGVfaGVpZ2h0LCBw bGFuZV9vZmZzZXQsIHBsYW5lX3NpemU7Cj4gPiAgCXVuc2lnbmVkIGludCByb3RhdGlvbjsKPiA+ IC0JaW50IHhfb2Zmc2V0LCB5X29mZnNldDsKPiA+ICAJdW5zaWduZWQgbG9uZyBzdXJmX2FkZHI7 Cj4gPiAgCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gaW50ZWxfY3J0Yy0+ Y29uZmlnOwo+ID4gIAlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ID4g LQlpbnQgc3JjX3ggPSAwLCBzcmNfeSA9IDAsIHNyY193ID0gMCwgc3JjX2ggPSAwOwo+ID4gLQlp bnQgZHN0X3ggPSAwLCBkc3RfeSA9IDAsIGRzdF93ID0gMCwgZHN0X2ggPSAwOwo+ID4gKwlpbnQg c3JjX3csIHNyY19oOwo+ID4gKwlpbnQgZHN0X3gsIGRzdF95LCBkc3RfdywgZHN0X2g7Cj4gPiAg CWludCBzY2FsZXJfaWQgPSAtMTsKPiA+ICAJaW50IHBpeGVsX3NpemU7Cj4gPiAgCj4gPiBAQCAt MzE2Niw2ICszMzIzLDcgQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFu ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAgCQlyZXR1cm47Cj4gPiAgCX0KPiA+ICAKPiA+ ICsJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7Cj4gPiAgCXBpeGVsX3NpemUg PSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiA+ICAKPiA+ICAJ cGxhbmVfY3RsID0gUExBTkVfQ1RMX0VOQUJMRSB8Cj4gPiBAQCAtMzE3OSwxNiArMzMzNyw3IEBA IHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+ID4gIAlyb3RhdGlvbiA9IHBsYW5lLT5zdGF0ZS0+cm90YXRpb247Cj4gPiAgCXBs YW5lX2N0bCB8PSBza2xfcGxhbmVfY3RsX3JvdGF0aW9uKHJvdGF0aW9uKTsKPiA+ICAKPiA+IC0J b2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKPiA+IC0Jc3RyaWRlX2RpdiA9IGludGVsX2ZiX3N0cmlk ZV9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwKPiA+IC0JCQkJCSAgICAgICBm Yi0+cGl4ZWxfZm9ybWF0KTsKPiA+IC0Jc3VyZl9hZGRyID0gaW50ZWxfcGxhbmVfb2JqX29mZnNl dCh0b19pbnRlbF9wbGFuZShwbGFuZSksIG9iaiwgMCk7Cj4gPiAtCj4gPiAtCVdBUk5fT04oZHJt X3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5zcmMpID09IDApOwo+ID4gLQo+ID4gIAlzY2FsZXJf aWQgPSBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkOwo+ID4gLQlzcmNfeCA9IHBsYW5lX3N0YXRlLT5z cmMueDEgPj4gMTY7Cj4gPiAtCXNyY195ID0gcGxhbmVfc3RhdGUtPnNyYy55MSA+PiAxNjsKPiA+ ICAJc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnNyYykgPj4gMTY7Cj4gPiAg CXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+c3JjKSA+PiAxNjsKPiA+ICAJ ZHN0X3ggPSBwbGFuZV9zdGF0ZS0+ZHN0LngxOwo+ID4gQEAgLTMxOTYsMzEgKzMzNDUsNDggQEAg c3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gPiAgCWRzdF93ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5kc3QpOwo+ ID4gIAlkc3RfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPmRzdCk7Cj4gPiAgCj4g PiAtCVdBUk5fT04oeCAhPSBzcmNfeCB8fCB5ICE9IHNyY195KTsKPiA+IC0KPiA+ICAJaWYgKGlu dGVsX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKPiA+IC0JCS8qIHN0cmlkZSA9IFN1 cmZhY2UgaGVpZ2h0IGluIHRpbGVzICovCj4gPiAtCQl0aWxlX2hlaWdodCA9IGludGVsX3RpbGVf aGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sCj4gPiAtCQkJCQkJcGl4ZWxfc2l6ZSk7 Cj4gPiAtCQlzdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwgdGlsZV9oZWlnaHQpOwo+ ID4gLQkJeF9vZmZzZXQgPSBzdHJpZGUgKiB0aWxlX2hlaWdodCAtIHkgLSBzcmNfaDsKPiA+IC0J CXlfb2Zmc2V0ID0geDsKPiA+IC0JCXBsYW5lX3NpemUgPSAoc3JjX3cgLSAxKSA8PCAxNiB8IChz cmNfaCAtIDEpOwo+ID4gKwkJc3RydWN0IGRybV9yZWN0IHIgPSB7Cj4gPiArCQkJLngxID0geCwK PiA+ICsJCQkueDIgPSB4ICsgc3JjX3csCj4gPiArCQkJLnkxID0geSwKPiA+ICsJCQkueTIgPSB5 ICsgc3JjX2gsCj4gPiArCQl9Owo+ID4gKwo+ID4gKwkJLyogUm90YXRlIHNyYyBjb29yZGluYXRl cyB0byBtYXRjaCByb3RhdGVkIEdUVCB2aWV3ICovCj4gPiArCQlkcm1fcmVjdF9yb3RhdGUoJnIs IGZiLT53aWR0aCwgZmItPmhlaWdodCwgQklUKERSTV9ST1RBVEVfMjcwKSk7Cj4gPiArCj4gPiAr CQl4ID0gci54MTsKPiA+ICsJCXkgPSByLnkxOwo+ID4gKwkJc3JjX3cgPSBkcm1fcmVjdF93aWR0 aCgmcik7Cj4gPiArCQlzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcik7Cj4gPiArCj4gPiArCQlz dHJpZGVfZGl2ID0gaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwK PiA+ICsJCQkJCSAgICAgICBwaXhlbF9zaXplKTsKPiA+ICsJCXN0cmlkZSA9IGludGVsX2ZiLT5w bGFuZVswXS5yb3RhdGVkLnBpdGNoOwo+ID4gIAl9IGVsc2Ugewo+ID4gLQkJc3RyaWRlID0gZmIt PnBpdGNoZXNbMF0gLyBzdHJpZGVfZGl2Owo+ID4gLQkJeF9vZmZzZXQgPSB4Owo+ID4gLQkJeV9v ZmZzZXQgPSB5Owo+ID4gLQkJcGxhbmVfc2l6ZSA9IChzcmNfaCAtIDEpIDw8IDE2IHwgKHNyY193 IC0gMSk7Cj4gPiArCQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChkZXZf cHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+ID4gKwkJCQkJCSAgICAgICBmYi0+cGl4ZWxfZm9ybWF0 KTsKPiA+ICsJCXN0cmlkZSA9IGZiLT5waXRjaGVzWzBdOwo+ID4gIAl9Cj4gPiAtCXBsYW5lX29m ZnNldCA9IHlfb2Zmc2V0IDw8IDE2IHwgeF9vZmZzZXQ7Cj4gPiAgCj4gPiAtCWludGVsX2NydGMt PmFkanVzdGVkX3ggPSB4X29mZnNldDsKPiA+IC0JaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHlf b2Zmc2V0Owo+ID4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlv bik7Cj4gPiArCXN1cmZfYWRkciA9IGludGVsX2NvbXB1dGVfcGFnZV9vZmZzZXQoJngsICZ5LCBm YiwgMCwKPiA+ICsJCQkJCSAgICAgIHN0cmlkZSwgcm90YXRpb24pOwo+ID4gKwo+ID4gKwkvKiBT aXplcyBhcmUgMCBiYXNlZCAqLwo+ID4gKwlzcmNfdy0tOwo+ID4gKwlzcmNfaC0tOwo+ID4gKwlk c3Rfdy0tOwo+ID4gKwlkc3RfaC0tOwo+ID4gKwo+ID4gKwlpbnRlbF9jcnRjLT5hZGp1c3RlZF94 ID0geDsKPiA+ICsJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHk7Cj4gPiAgCj4gPiAgCUk5MTVf V1JJVEUoUExBTkVfQ1RMKHBpcGUsIDApLCBwbGFuZV9jdGwpOwo+ID4gLQlJOTE1X1dSSVRFKFBM QU5FX09GRlNFVChwaXBlLCAwKSwgcGxhbmVfb2Zmc2V0KTsKPiA+IC0JSTkxNV9XUklURShQTEFO RV9TSVpFKHBpcGUsIDApLCBwbGFuZV9zaXplKTsKPiA+IC0JSTkxNV9XUklURShQTEFORV9TVFJJ REUocGlwZSwgMCksIHN0cmlkZSk7Cj4gPiArCUk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUs IDApLCAoeSA8PCAxNikgfCB4KTsKPiA+ICsJSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwg MCksIHN0cmlkZSAvIHN0cmlkZV9kaXYpOwo+ID4gKwlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlw ZSwgMCksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4gPiAgCj4gPiAgCWlmIChzY2FsZXJfaWQg Pj0gMCkgewo+ID4gIAkJdWludDMyX3QgcHNfY3RybCA9IDA7Cj4gPiBAQCAtMzIzNyw3ICszNDAz LDggQEAgc3RhdGljIHZvaWQgc2t5bGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCj4gPiAgCQlJOTE1X1dSSVRFKFBMQU5FX1BPUyhwaXBlLCAwKSwgKGRzdF95 IDw8IDE2KSB8IGRzdF94KTsKPiA+ICAJfQo+ID4gIAo+ID4gLQlJOTE1X1dSSVRFKFBMQU5FX1NV UkYocGlwZSwgMCksIHN1cmZfYWRkcik7Cj4gPiArCUk5MTVfV1JJVEUoUExBTkVfU1VSRihwaXBl LCAwKSwKPiA+ICsJCSAgIGludGVsX3N1cmZfZ3R0X29mZnNldChmYiwgMCwgcm90YXRpb24pICsg c3VyZl9hZGRyKTsKPiA+ICAKPiA+ICAJUE9TVElOR19SRUFEKFBMQU5FX1NVUkYocGlwZSwgMCkp Owo+ID4gIH0KPiA+IEBAIC0xMTUyMSw4ICsxMTY4OCw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0 Y19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gIAlpZiAocmV0KQo+ID4gIAkJ Z290byBjbGVhbnVwX3BlbmRpbmc7Cj4gPiAgCj4gPiAtCXdvcmstPmd0dF9vZmZzZXQgPSBpbnRl bF9wbGFuZV9vYmpfb2Zmc2V0KHRvX2ludGVsX3BsYW5lKHByaW1hcnkpLAo+ID4gLQkJCQkJCSAg b2JqLCAwKTsKPiA+ICsJd29yay0+Z3R0X29mZnNldCA9IGludGVsX3N1cmZfZ3R0X29mZnNldChm YiwgMCwgcHJpbWFyeS0+c3RhdGUtPnJvdGF0aW9uKTsKPiA+ICAJd29yay0+Z3R0X29mZnNldCAr PSBpbnRlbF9jcnRjLT5kc3BhZGRyX29mZnNldDsKPiA+ICAKPiA+ICAJaWYgKG1taW9fZmxpcCkg ewo+ID4gQEAgLTE0MzE5LDcgKzE0NDg1LDYgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZl cl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCQkJCSAgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaikKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+IC0JdW5zaWduZWQgaW50IGFsaWduZWRfaGVpZ2h0 Owo+ID4gIAlpbnQgcmV0Owo+ID4gIAl1MzIgcGl0Y2hfbGltaXQsIHN0cmlkZV9hbGlnbm1lbnQ7 Cj4gPiAgCj4gPiBAQCAtMTQ0NDMsMTYgKzE0NjA4LDEzIEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJh bWVidWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gIAlpZiAocmV0KQo+ID4g IAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+IC0JYWxpZ25lZF9oZWlnaHQgPSBpbnRlbF9mYl9hbGln bl9oZWlnaHQoZGV2LCBtb2RlX2NtZC0+aGVpZ2h0LAo+ID4gLQkJCQkJICAgICAgIG1vZGVfY21k LT5waXhlbF9mb3JtYXQsCj4gPiAtCQkJCQkgICAgICAgbW9kZV9jbWQtPm1vZGlmaWVyWzBdKTsK PiA+IC0JLyogRklYTUUgZHJtIGhlbHBlciBmb3Igc2l6ZSBjaGVja3MgKGVzcGVjaWFsbHkgcGxh bmFyIGZvcm1hdHMpPyAqLwo+ID4gLQlpZiAob2JqLT5iYXNlLnNpemUgPCBhbGlnbmVkX2hlaWdo dCAqIG1vZGVfY21kLT5waXRjaGVzWzBdKQo+ID4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAtCj4g PiAgCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdCgmaW50ZWxfZmItPmJhc2UsIG1vZGVf Y21kKTsKPiA+ICAJaW50ZWxfZmItPm9iaiA9IG9iajsKPiA+ICAKPiA+ICsJcmV0ID0gaW50ZWxf ZmlsbF9mYl9pbmZvKGRldl9wcml2LCAmaW50ZWxfZmItPmJhc2UpOwo+ID4gKwlpZiAocmV0KQo+ ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICAJcmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQo ZGV2LCAmaW50ZWxfZmItPmJhc2UsICZpbnRlbF9mYl9mdW5jcyk7Cj4gPiAgCWlmIChyZXQpIHsK PiA+ICAJCURSTV9FUlJPUigiZnJhbWVidWZmZXIgaW5pdCBmYWlsZWQgJWRcbiIsIHJldCk7Cj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gaW5kZXggMzZkMDQ5ZC4uMzk1YWZkMyAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gQEAgLTExOCw2ICsxMTgsMTkgQEAg ZW51bSBpbnRlbF9vdXRwdXRfdHlwZSB7Cj4gPiAgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyIHsK PiA+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOwo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyBpbmZvOwo+ ID4gKwo+ID4gKwlzdHJ1Y3Qgewo+ID4gKwkJc3RydWN0IHsKPiA+ICsJCQkvKiBwaXhlbHMgKi8K PiA+ICsJCQl1bnNpZ25lZCBpbnQgeCwgeTsKPiA+ICsJCX0gbm9ybWFsOwo+ID4gKwkJc3RydWN0 IHsKPiA+ICsJCQkvKiBwaXhlbHMgKi8KPiA+ICsJCQl1bnNpZ25lZCBpbnQgeCwgeTsKPiA+ICsJ CQl1bnNpZ25lZCBpbnQgcGl0Y2g7Cj4gPiArCQl9IHJvdGF0ZWQ7Cj4gPiArCX0gcGxhbmVbMl07 Cj4gPiAgfTsKPiA+ICAKPiA+ICBzdHJ1Y3QgaW50ZWxfZmJkZXYgewo+ID4gQEAgLTEwMjgsNiAr MTA0MSwxMiBAQCB2b2lkIGk5MTVfYXVkaW9fY29tcG9uZW50X2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKPiA+ICB2b2lkIGk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFu dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiA+ICAKPiA+ICAvKiBpbnRl bF9kaXNwbGF5LmMgKi8KPiA+ICt1bnNpZ25lZCBpbnQgaW50ZWxfcm90YXRpb25faW5mb19zaXpl KGNvbnN0IHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICppbmZvKTsKPiA+ICt1bnNpZ25lZCBp bnQgaW50ZWxfZmJfeHlfdG9fbGluZWFyKGludCB4LCBpbnQgeSwKPiA+ICsJCQkJICAgY29uc3Qg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSk7Cj4gPiArdm9pZCBpbnRlbF9h ZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGludCAqeSwKPiA+ICsJCQkgIGNvbnN0IHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gPiArCQkJICB1bnNpZ25lZCBpbnQgcm90YXRp b24pOwo+ID4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGludGVsX3BsYW5l X2Z1bmNzOwo+ID4gIGJvb2wgaW50ZWxfaGFzX3BlbmRpbmdfZmJfdW5waW4oc3RydWN0IGRybV9k ZXZpY2UgKmRldik7Cj4gPiAgaW50IGludGVsX3BjaF9yYXdjbGsoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cj4gPiBAQCAtMTEzNCwxMCArMTE1MywxMCBAQCB2b2lkIGFzc2VydF9mZGlfcnhfcGxs KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICB2b2lkIGFzc2VydF9waXBl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUsIGJvb2wg c3RhdGUpOwo+ID4gICNkZWZpbmUgYXNzZXJ0X3BpcGVfZW5hYmxlZChkLCBwKSBhc3NlcnRfcGlw ZShkLCBwLCB0cnVlKQo+ID4gICNkZWZpbmUgYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZCwgcCkgYXNz ZXJ0X3BpcGUoZCwgcCwgZmFsc2UpCj4gPiAtdW5zaWduZWQgbG9uZyBpbnRlbF9jb21wdXRlX3Bh Z2Vfb2Zmc2V0KGludCAqeCwgaW50ICp5LAo+ID4gLQkJCQkJY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiA+IC0JCQkJCXVuc2lnbmVkIGludCBwaXRjaCwKPiA+ IC0JCQkJCXVuc2lnbmVkIGludCByb3RhdGlvbik7Cj4gPiArdW5zaWduZWQgaW50IGludGVsX2Nv bXB1dGVfcGFnZV9vZmZzZXQoaW50ICp4LCBpbnQgKnksCj4gPiArCQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ID4gKwkJCQkgICAgICAgdW5z aWduZWQgaW50IHBpdGNoLAo+ID4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKTsK PiA+ICB2b2lkIGludGVsX3ByZXBhcmVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4g PiAgdm9pZCBpbnRlbF9maW5pc2hfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAg dm9pZCBoc3dfZW5hYmxlX3BjOChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ ID4gQEAgLTExNzQsOSArMTE5Myw4IEBAIHZvaWQgaW50ZWxfbW9kZXNldF9wcmVjbG9zZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ID4gIGludCBza2xf dXBkYXRlX3NjYWxlcl9jcnRjKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsK PiA+ICBpbnQgc2tsX21heF9zY2FsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yywgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ID4gIAo+ID4gLXVuc2lnbmVkIGxvbmcgaW50 ZWxfcGxhbmVfb2JqX29mZnNldChzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lLAo+ID4g LQkJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiAtCQkJCSAgICAg dW5zaWduZWQgaW50IHBsYW5lKTsKPiA+ICt1bnNpZ25lZCBpbnQgaW50ZWxfc3VyZl9ndHRfb2Zm c2V0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gPiArCQkJCSAgIHVu c2lnbmVkIGludCByb3RhdGlvbik7Cj4gPiAgCj4gPiAgdTMyIHNrbF9wbGFuZV9jdGxfZm9ybWF0 KHVpbnQzMl90IHBpeGVsX2Zvcm1hdCk7Cj4gPiAgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5nKHVp bnQ2NF90IGZiX21vZGlmaWVyKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4g PiBpbmRleCA4MjhjM2ViLi5kOWQzN2IwIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfc3ByaXRlLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3Nwcml0ZS5jCj4gPiBAQCAtMTg4LDE3ICsxODgsMTUgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGRybV9wbGFuZS0+ZGV2Owo+ID4gIAlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4gIAlzdHJ1Y3QgaW50 ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUoZHJtX3BsYW5lKTsKPiA+IC0J c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4gPiAr CXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZl cihmYik7Cj4gPiAgCWNvbnN0IGludCBwaXBlID0gaW50ZWxfcGxhbmUtPnBpcGU7Cj4gPiAgCWNv bnN0IGludCBwbGFuZSA9IGludGVsX3BsYW5lLT5wbGFuZSArIDE7Cj4gPiAgCXUzMiBwbGFuZV9j dGwsIHN0cmlkZV9kaXYsIHN0cmlkZTsKPiA+ICAJaW50IHBpeGVsX3NpemUgPSBkcm1fZm9ybWF0 X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiA+ICAJY29uc3Qgc3RydWN0IGRybV9p bnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9Cj4gPiAgCQkmdG9faW50ZWxfcGxhbmVfc3RhdGUo ZHJtX3BsYW5lLT5zdGF0ZSktPmNrZXk7Cj4gPiAtCXVuc2lnbmVkIGxvbmcgc3VyZl9hZGRyOwo+ ID4gLQl1MzIgdGlsZV9oZWlnaHQsIHBsYW5lX29mZnNldCwgcGxhbmVfc2l6ZTsKPiA+ICsJdW5z aWduZWQgaW50IHN1cmZfYWRkcjsKPiA+ICAJdW5zaWduZWQgaW50IHJvdGF0aW9uOwo+ID4gLQlp bnQgeF9vZmZzZXQsIHlfb2Zmc2V0Owo+ID4gIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSA9IHRvX2ludGVsX2NydGMoY3J0YyktPmNvbmZpZzsKPiA+ICAJaW50IHNjYWxlcl9p ZDsKPiA+ICAKPiA+IEBAIC0yMTUsMTcgKzIxMyw4IEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0 IGRybV9wbGFuZSAqZHJtX3BsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAgCQkJCSAg ICAgICBwaXhlbF9zaXplLCB0cnVlLAo+ID4gIAkJCQkgICAgICAgc3JjX3cgIT0gY3J0Y193IHx8 IHNyY19oICE9IGNydGNfaCk7Cj4gPiAgCj4gPiAtCXN0cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJp ZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sCj4gPiAtCQkJCQkgICAgICAg ZmItPnBpeGVsX2Zvcm1hdCk7Cj4gPiAtCj4gPiAgCXNjYWxlcl9pZCA9IHRvX2ludGVsX3BsYW5l X3N0YXRlKGRybV9wbGFuZS0+c3RhdGUpLT5zY2FsZXJfaWQ7Cj4gPiAgCj4gPiAtCS8qIFNpemVz IGFyZSAwIGJhc2VkICovCj4gPiAtCXNyY193LS07Cj4gPiAtCXNyY19oLS07Cj4gPiAtCWNydGNf dy0tOwo+ID4gLQljcnRjX2gtLTsKPiA+IC0KPiA+ICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiA+ICAJ CUk5MTVfV1JJVEUoUExBTkVfS0VZVkFMKHBpcGUsIHBsYW5lKSwga2V5LT5taW5fdmFsdWUpOwo+ ID4gIAkJSTkxNV9XUklURShQTEFORV9LRVlNQVgocGlwZSwgcGxhbmUpLCBrZXktPm1heF92YWx1 ZSk7Cj4gPiBAQCAtMjM3LDI3ICsyMjYsNDMgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpkcm1fcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJZWxzZSBpZiAo a2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkKPiA+ICAJCXBsYW5lX2N0bCB8 PSBQTEFORV9DVExfS0VZX0VOQUJMRV9TT1VSQ0U7Cj4gPiAgCj4gPiAtCXN1cmZfYWRkciA9IGlu dGVsX3BsYW5lX29ial9vZmZzZXQoaW50ZWxfcGxhbmUsIG9iaiwgMCk7Cj4gPiAtCj4gPiAgCWlm IChpbnRlbF9yb3RhdGlvbl85MF9vcl8yNzAocm90YXRpb24pKSB7Cj4gPiAtCQkvKiBzdHJpZGU6 IFN1cmZhY2UgaGVpZ2h0IGluIHRpbGVzICovCj4gPiAtCQl0aWxlX2hlaWdodCA9IGludGVsX3Rp bGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sCj4gPiAtCQkJCQkJcGl4ZWxfc2l6 ZSk7Cj4gPiAtCQlzdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwgdGlsZV9oZWlnaHQp Owo+ID4gLQkJcGxhbmVfc2l6ZSA9IChzcmNfdyA8PCAxNikgfCBzcmNfaDsKPiA+IC0JCXhfb2Zm c2V0ID0gc3RyaWRlICogdGlsZV9oZWlnaHQgLSB5IC0gKHNyY19oICsgMSk7Cj4gPiAtCQl5X29m ZnNldCA9IHg7Cj4gPiArCQlzdHJ1Y3QgZHJtX3JlY3QgciA9IHsKPiA+ICsJCQkueDEgPSB4LAo+ ID4gKwkJCS54MiA9IHggKyBzcmNfdywKPiA+ICsJCQkueTEgPSB5LAo+ID4gKwkJCS55MiA9IHkg KyBzcmNfaCwKPiA+ICsJCX07Cj4gPiArCj4gPiArCQkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVz IHRvIG1hdGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8KPiA+ICsJCWRybV9yZWN0X3JvdGF0ZSgmciwg ZmItPndpZHRoLCBmYi0+aGVpZ2h0LCBCSVQoRFJNX1JPVEFURV8yNzApKTsKPiA+ICsKPiA+ICsJ CXggPSByLngxOwo+ID4gKwkJeSA9IHIueTE7Cj4gPiArCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRo KCZyKTsKPiA+ICsJCXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZyKTsKPiA+ICsKPiA+ICsJCXN0 cmlkZV9kaXYgPSBpbnRlbF90aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCBw aXhlbF9zaXplKTsKPiA+ICsJCXN0cmlkZSA9IGludGVsX2ZiLT5wbGFuZVswXS5yb3RhdGVkLnBp dGNoOwo+ID4gIAl9IGVsc2Ugewo+ID4gLQkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF0gLyBzdHJp ZGVfZGl2Owo+ID4gLQkJcGxhbmVfc2l6ZSA9IChzcmNfaCA8PCAxNikgfCBzcmNfdzsKPiA+IC0J CXhfb2Zmc2V0ID0geDsKPiA+IC0JCXlfb2Zmc2V0ID0geTsKPiA+ICsJCXN0cmlkZV9kaXYgPSBp bnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sCj4gPiAr CQkJCQkJICAgICAgIGZiLT5waXhlbF9mb3JtYXQpOwo+ID4gKwkJc3RyaWRlID0gZmItPnBpdGNo ZXNbMF07Cj4gPiAgCX0KPiA+IC0JcGxhbmVfb2Zmc2V0ID0geV9vZmZzZXQgPDwgMTYgfCB4X29m ZnNldDsKPiA+ICAKPiA+IC0JSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgcGxhbmUpLCBw bGFuZV9vZmZzZXQpOwo+ID4gLQlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZSks IHN0cmlkZSk7Cj4gPiAtCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCBwbGFuZSksIHBsYW5l X3NpemUpOwo+ID4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlv bik7Cj4gPiArCXN1cmZfYWRkciA9IGludGVsX2NvbXB1dGVfcGFnZV9vZmZzZXQoJngsICZ5LCBm YiwgMCwKPiA+ICsJCQkJCSAgICAgIHN0cmlkZSwgcm90YXRpb24pOwo+ID4gKwo+ID4gKwkvKiBT aXplcyBhcmUgMCBiYXNlZCAqLwo+ID4gKwlzcmNfdy0tOwo+ID4gKwlzcmNfaC0tOwo+ID4gKwlj cnRjX3ctLTsKPiA+ICsJY3J0Y19oLS07Cj4gPiArCj4gPiArCUk5MTVfV1JJVEUoUExBTkVfT0ZG U0VUKHBpcGUsIHBsYW5lKSwgKHkgPDwgMTYpIHwgeCk7Cj4gPiArCUk5MTVfV1JJVEUoUExBTkVf U1RSSURFKHBpcGUsIHBsYW5lKSwgc3RyaWRlIC8gc3RyaWRlX2Rpdik7Cj4gPiArCUk5MTVfV1JJ VEUoUExBTkVfU0laRShwaXBlLCBwbGFuZSksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4gPiAg Cj4gPiAgCS8qIHByb2dyYW0gcGxhbmUgc2NhbGVyICovCj4gPiAgCWlmIChzY2FsZXJfaWQgPj0g MCkgewo+ID4gQEAgLTI3OSw3ICsyODQsOCBAQCBza2xfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1f cGxhbmUgKmRybV9wbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gIAl9Cj4gPiAgCj4g PiAgCUk5MTVfV1JJVEUoUExBTkVfQ1RMKHBpcGUsIHBsYW5lKSwgcGxhbmVfY3RsKTsKPiA+IC0J STkxNV9XUklURShQTEFORV9TVVJGKHBpcGUsIHBsYW5lKSwgc3VyZl9hZGRyKTsKPiA+ICsJSTkx NV9XUklURShQTEFORV9TVVJGKHBpcGUsIHBsYW5lKSwKPiA+ICsJCSAgIGludGVsX3N1cmZfZ3R0 X29mZnNldChmYiwgMCwgcm90YXRpb24pICsgc3VyZl9hZGRyKTsKPiA+ICAJUE9TVElOR19SRUFE KFBMQU5FX1NVUkYocGlwZSwgcGxhbmUpKTsKPiA+ICB9Cj4gPiAgCj4gPiBAQCAtMzU1LDggKzM2 MSw3IEBAIHZsdl91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHBsYW5lLCBzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCj4gPiAgCWludCBwbGFuZSA9IGludGVsX3BsYW5lLT5wbGFuZTsKPiA+ ICAJdTMyIHNwcmN0bDsKPiA+ICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gZHBsYW5lLT5zdGF0 ZS0+cm90YXRpb247Cj4gPiAtCXVuc2lnbmVkIGxvbmcgc3Byc3VyZl9vZmZzZXQsIGxpbmVhcl9v ZmZzZXQ7Cj4gPiAtCWludCBwaXhlbF9zaXplID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBp eGVsX2Zvcm1hdCwgMCk7Cj4gPiArCXVuc2lnbmVkIGludCBzcHJzdXJmX29mZnNldCwgbGluZWFy X29mZnNldDsKPiA+ICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtl eSA9Cj4gPiAgCQkmdG9faW50ZWxfcGxhbmVfc3RhdGUoZHBsYW5lLT5zdGF0ZSktPmNrZXk7Cj4g PiAgCj4gPiBAQCAtNDIwLDE5ICs0MjUsMTkgQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpkcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJY3J0Y193LS07Cj4g PiAgCWNydGNfaC0tOwo+ID4gIAo+ID4gLQlsaW5lYXJfb2Zmc2V0ID0geSAqIGZiLT5waXRjaGVz WzBdICsgeCAqIHBpeGVsX3NpemU7Cj4gPiArCWludGVsX2FkZF9mYl9vZmZzZXRzKCZ4LCAmeSwg ZmIsIDAsIHJvdGF0aW9uKTsKPiA+ICAJc3Byc3VyZl9vZmZzZXQgPSBpbnRlbF9jb21wdXRlX3Bh Z2Vfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gPiAgCQkJCQkJICAgZmItPnBpdGNoZXNbMF0sIHJv dGF0aW9uKTsKPiA+IC0JbGluZWFyX29mZnNldCAtPSBzcHJzdXJmX29mZnNldDsKPiA+ICAKPiA+ ICAJaWYgKHJvdGF0aW9uID09IEJJVChEUk1fUk9UQVRFXzE4MCkpIHsKPiA+ICAJCXNwcmN0bCB8 PSBTUF9ST1RBVEVfMTgwOwo+ID4gIAo+ID4gIAkJeCArPSBzcmNfdzsKPiA+ICAJCXkgKz0gc3Jj X2g7Cj4gPiAtCQlsaW5lYXJfb2Zmc2V0ICs9IHNyY19oICogZmItPnBpdGNoZXNbMF0gKyBzcmNf dyAqIHBpeGVsX3NpemU7Cj4gPiAgCX0KPiA+ICAKPiA+ICsJbGluZWFyX29mZnNldCA9IGludGVs X2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gPiArCj4gPiAgCWlmIChrZXktPmZsYWdz KSB7Cj4gPiAgCQlJOTE1X1dSSVRFKFNQS0VZTUlOVkFMKHBpcGUsIHBsYW5lKSwga2V5LT5taW5f dmFsdWUpOwo+ID4gIAkJSTkxNV9XUklURShTUEtFWU1BWFZBTChwaXBlLCBwbGFuZSksIGtleS0+ bWF4X3ZhbHVlKTsKPiA+IEBAIC00NTcsOCArNDYyLDggQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpkcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAKPiA+ICAJ STkxNV9XUklURShTUFNJWkUocGlwZSwgcGxhbmUpLCAoY3J0Y19oIDw8IDE2KSB8IGNydGNfdyk7 Cj4gPiAgCUk5MTVfV1JJVEUoU1BDTlRSKHBpcGUsIHBsYW5lKSwgc3ByY3RsKTsKPiA+IC0JSTkx NV9XUklURShTUFNVUkYocGlwZSwgcGxhbmUpLCBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2Jq KSArCj4gPiAtCQkgICBzcHJzdXJmX29mZnNldCk7Cj4gPiArCUk5MTVfV1JJVEUoU1BTVVJGKHBp cGUsIHBsYW5lKSwKPiA+ICsJCSAgIGludGVsX3N1cmZfZ3R0X29mZnNldChmYiwgMCwgcm90YXRp b24pICsgc3Byc3VyZl9vZmZzZXQpOwo+ID4gIAlQT1NUSU5HX1JFQUQoU1BTVVJGKHBpcGUsIHBs YW5lKSk7Cj4gPiAgfQo+ID4gIAo+ID4gQEAgLTQ5Miw3ICs0OTcsNyBAQCBpdmJfdXBkYXRlX3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAg CWVudW0gcGlwZSBwaXBlID0gaW50ZWxfcGxhbmUtPnBpcGU7Cj4gPiAgCXUzMiBzcHJjdGwsIHNw cnNjYWxlID0gMDsKPiA+ICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmUtPnN0YXRlLT5y b3RhdGlvbjsKPiA+IC0JdW5zaWduZWQgbG9uZyBzcHJzdXJmX29mZnNldCwgbGluZWFyX29mZnNl dDsKPiA+ICsJdW5zaWduZWQgaW50IHNwcnN1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zmc2V0Owo+ID4g IAlpbnQgcGl4ZWxfc2l6ZSA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQs IDApOwo+ID4gIAljb25zdCBzdHJ1Y3QgZHJtX2ludGVsX3Nwcml0ZV9jb2xvcmtleSAqa2V5ID0K PiA+ICAJCSZ0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpLT5ja2V5Owo+ID4gQEAg LTU1MiwxMCArNTU3LDkgQEAgaXZiX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gIAlpZiAoY3J0Y193ICE9IHNyY193IHx8IGNy dGNfaCAhPSBzcmNfaCkKPiA+ICAJCXNwcnNjYWxlID0gU1BSSVRFX1NDQUxFX0VOQUJMRSB8IChz cmNfdyA8PCAxNikgfCBzcmNfaDsKPiA+ICAKPiA+IC0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+ cGl0Y2hlc1swXSArIHggKiBwaXhlbF9zaXplOwo+ID4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygm eCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gPiAgCXNwcnN1cmZfb2Zmc2V0ID0gaW50ZWxfY29t cHV0ZV9wYWdlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ID4gIAkJCQkJCSAgIGZiLT5waXRjaGVz WzBdLCByb3RhdGlvbik7Cj4gPiAtCWxpbmVhcl9vZmZzZXQgLT0gc3Byc3VyZl9vZmZzZXQ7Cj4g PiAgCj4gPiAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gPiAgCQlz cHJjdGwgfD0gU1BSSVRFX1JPVEFURV8xODA7Cj4gPiBAQCAtNTY0LDExICs1NjgsMTEgQEAgaXZi X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9jcnRjICpj cnRjLAo+ID4gIAkJaWYgKCFJU19IQVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKSB7 Cj4gPiAgCQkJeCArPSBzcmNfdzsKPiA+ICAJCQl5ICs9IHNyY19oOwo+ID4gLQkJCWxpbmVhcl9v ZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSArCj4gPiAtCQkJCXNyY193ICogcGl4ZWxf c2l6ZTsKPiA+ICAJCX0KPiA+ICAJfQo+ID4gIAo+ID4gKwlsaW5lYXJfb2Zmc2V0ID0gaW50ZWxf ZmJfeHlfdG9fbGluZWFyKHgsIHksIGZiLCAwKTsKPiA+ICsKPiA+ICAJaWYgKGtleS0+ZmxhZ3Mp IHsKPiA+ICAJCUk5MTVfV1JJVEUoU1BSS0VZVkFMKHBpcGUpLCBrZXktPm1pbl92YWx1ZSk7Cj4g PiAgCQlJOTE1X1dSSVRFKFNQUktFWU1BWChwaXBlKSwga2V5LT5tYXhfdmFsdWUpOwo+ID4gQEAg LTU5Nyw3ICs2MDEsNyBAQCBpdmJfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAgCQlJOTE1X1dSSVRFKFNQUlNDQUxFKHBpcGUp LCBzcHJzY2FsZSk7Cj4gPiAgCUk5MTVfV1JJVEUoU1BSQ1RMKHBpcGUpLCBzcHJjdGwpOwo+ID4g IAlJOTE1X1dSSVRFKFNQUlNVUkYocGlwZSksCj4gPiAtCQkgICBpOTE1X2dlbV9vYmpfZ2d0dF9v ZmZzZXQob2JqKSArIHNwcnN1cmZfb2Zmc2V0KTsKPiA+ICsJCSAgIGludGVsX3N1cmZfZ3R0X29m ZnNldChmYiwgMCwgcm90YXRpb24pICsgc3Byc3VyZl9vZmZzZXQpOwo+ID4gIAlQT1NUSU5HX1JF QUQoU1BSU1VSRihwaXBlKSk7Cj4gPiAgfQo+ID4gIAo+ID4gQEAgLTYzMiw3ICs2MzYsNyBAQCBp bGtfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9v YmooZmIpOwo+ID4gIAlpbnQgcGlwZSA9IGludGVsX3BsYW5lLT5waXBlOwo+ID4gIAl1bnNpZ25l ZCBpbnQgcm90YXRpb24gPSBwbGFuZS0+c3RhdGUtPnJvdGF0aW9uOwo+ID4gLQl1bnNpZ25lZCBs b25nIGR2c3N1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zmc2V0Owo+ID4gKwl1bnNpZ25lZCBpbnQgZHZz c3VyZl9vZmZzZXQsIGxpbmVhcl9vZmZzZXQ7Cj4gPiAgCXUzMiBkdnNjbnRyLCBkdnNzY2FsZTsK PiA+ICAJaW50IHBpeGVsX3NpemUgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9y bWF0LCAwKTsKPiA+ICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtl eSA9Cj4gPiBAQCAtNjg5LDE5ICs2OTMsMTkgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gIAlpZiAoY3J0Y193ICE9 IHNyY193IHx8IGNydGNfaCAhPSBzcmNfaCkKPiA+ICAJCWR2c3NjYWxlID0gRFZTX1NDQUxFX0VO QUJMRSB8IChzcmNfdyA8PCAxNikgfCBzcmNfaDsKPiA+ICAKPiA+IC0JbGluZWFyX29mZnNldCA9 IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBwaXhlbF9zaXplOwo+ID4gKwlpbnRlbF9hZGRfZmJf b2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gPiAgCWR2c3N1cmZfb2Zmc2V0ID0g aW50ZWxfY29tcHV0ZV9wYWdlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ID4gIAkJCQkJCSAgIGZi LT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gPiAtCWxpbmVhcl9vZmZzZXQgLT0gZHZzc3VyZl9v ZmZzZXQ7Cj4gPiAgCj4gPiAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7 Cj4gPiAgCQlkdnNjbnRyIHw9IERWU19ST1RBVEVfMTgwOwo+ID4gIAo+ID4gIAkJeCArPSBzcmNf dzsKPiA+ICAJCXkgKz0gc3JjX2g7Cj4gPiAtCQlsaW5lYXJfb2Zmc2V0ICs9IHNyY19oICogZmIt PnBpdGNoZXNbMF0gKyBzcmNfdyAqIHBpeGVsX3NpemU7Cj4gPiAgCX0KPiA+ICAKPiA+ICsJbGlu ZWFyX29mZnNldCA9IGludGVsX2ZiX3h5X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gPiArCj4g PiAgCWlmIChrZXktPmZsYWdzKSB7Cj4gPiAgCQlJOTE1X1dSSVRFKERWU0tFWVZBTChwaXBlKSwg a2V5LT5taW5fdmFsdWUpOwo+ID4gIAkJSTkxNV9XUklURShEVlNLRVlNQVgocGlwZSksIGtleS0+ bWF4X3ZhbHVlKTsKPiA+IEBAIC03MjUsNyArNzI5LDcgQEAgaWxrX3VwZGF0ZV9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gIAlJOTE1X1dS SVRFKERWU1NDQUxFKHBpcGUpLCBkdnNzY2FsZSk7Cj4gPiAgCUk5MTVfV1JJVEUoRFZTQ05UUihw aXBlKSwgZHZzY250cik7Cj4gPiAgCUk5MTVfV1JJVEUoRFZTU1VSRihwaXBlKSwKPiA+IC0JCSAg IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgZHZzc3VyZl9vZmZzZXQpOwo+ID4gKwkJ ICAgaW50ZWxfc3VyZl9ndHRfb2Zmc2V0KGZiLCAwLCByb3RhdGlvbikgKyBkdnNzdXJmX29mZnNl dCk7Cj4gPiAgCVBPU1RJTkdfUkVBRChEVlNTVVJGKHBpcGUpKTsKPiA+ICB9Cj4gPiAgCj4gPiAt LSAKPiA+IDIuNC45Cj4gPiAKPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCj4gPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gPiBJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cj4gCj4gLS0gCj4gRGFuaWVsIFZldHRlcgo+IFNvZnR3YXJl IEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCgotLSAK VmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=