From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Thulasimani, Sivakumar" Subject: Re: [PATCH v5 01/12] drm/i915: Rewrite fb rotation GTT handling Date: Thu, 5 May 2016 13:44:08 +0530 Message-ID: <572B00D0.7050102@intel.com> References: <1462290001-9246-1-git-send-email-ville.syrjala@linux.intel.com> <1462290001-9246-2-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 D4E5B6E444 for ; Thu, 5 May 2016 08:14:15 +0000 (UTC) In-Reply-To: <1462290001-9246-2-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiA1LzMvMjAxNiA5OjA5IFBNLCB2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90 ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29t Pgo+Cj4gUmVkbyB0aGUgZmIgcm90YXRpb24gaGFuZGxpbmcgaW4gb3JkZXIgdG86Cj4gLSBlbGlt aW5hdGUgdGhlIE5WMTIgc3BlY2lhbCBjYXNpbmcKPiAtIGhhbmRsZSBmYi0+b2Zmc2V0c1tdIHBy b3Blcmx5Cj4gLSBtYWtlIHRoZSByb3RhdGlvbiBoYW5kbGluZyByZWFzaWVyIGZvciB0aGUgcGxh bmUgY29kZQp0eXBvICJlYXNpZXIiIDopIHRoYW5rcyBmb3IgdXBsb2FkaW5nIGFnYWluLgpSZXZp ZXdlZC1ieTogU2l2YWt1bWFyIFRodWxhc2ltYW5pIDxzaXZha3VtYXIudGh1bGFzaW1hbmlAaW50 ZWwuY29tPgpyZWdhcmRzLApTaXZha3VtYXIKPiBUbyBhY2hpZXZlIHRoZXNlIGdvYWxzIHdlIHJl ZHVjZSBpbnRlbF9yb3RhdGlvbl9pbmZvIHRvIG9ubHkgY29udGFpbgo+IChmb3IgZWFjaCBwbGFu ZSkgdGhlIHJvdGF0ZWQgdmlldyB3aWR0aCxoZWlnaHQsc3RyaWRlIGluIHRpbGUgdW5pdHMsCj4g YW5kIHRoZSBwYWdlIG9mZnNldCBpbnRvIHRoZSBvYmplY3Qgd2hlcmUgdGhlIHBsYW5lIHN0YXJ0 cy4gRWFjaCBwbGFuZQo+IGlzIGhhbmRsZWQgZXhhY3RseSB0aGUgc2FtZSB3YXksIG5vIHNwZWNp YWwgY2FzaW5nIGZvciBOVjEyIG9yIG90aGVyCj4gZm9ybWF0cy4gV2UgdGhlbiBzdG9yZSB0aGUg Y29tcHV0ZWQgcm90YXRpb25faW5mbyB1bmRlcgo+IGludGVsX2ZyYW1lYnVmZmVyIHNvIHRoYXQg d2UgZG9uJ3QgaGF2ZSB0byByZWNvbXB1dGUgaXQgYWdhaW4uCj4KPiBUbyBoYW5kbGUgZmItPm9m ZnNldHNbXSB3ZSB0cmVhdCB0aGVtIGFzIGEgbGluZWFyIG9mZnNldHMgYW5kIGNvbnZlcnQKPiB0 aGVtIHRvIHgveSBvZmZzZXRzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSByZWxldmFudCBHVFQgbWFw cGluZyAoZWl0aGVyCj4gbm9ybWFsIG9yIHJvdGF0ZWQpLiBXZSBzdG9yZSB0aGUgeC95IG9mZnNl dHMgdW5kZXIgaW50ZWxfZnJhbWVidWZmZXIsCj4gYW5kIGZvciBzb21lIGV4dHJhIGNvbnZlbmll bmNlIHdlIGFsc28gc3RvcmUgdGhlIHJvdGF0ZWQgcGl0Y2ggKGllLgo+IHRpbGUgYWxpZ25lZCBw bGFuZSBoZWlnaHQpLiBTbyBmb3IgZWFjaCBwbGFuZSB3ZSBoYXZlIHRoZSBub3JtYWwKPiB4L3kg b2Zmc2V0cywgcm90YXRlZCB4L3kgb2Zmc2V0cywgYW5kIHRoZSByb3RhdGVkIHBpdGNoLiBUaGUg bm9ybWFsCj4gcGl0Y2ggaXMgYXZhaWxhYmxlIGFscmVhZHkgaW4gZmItPnBpdGNoZXNbXS4KPgo+ IFdoaWxlIHdlJ3JlIGdhdGhlcmluZyB1cCBhbGwgdGhhdCBleHRyYSBpbmZvcm1hdGlvbiwgd2Ug Y2FuIGFsc28gZWFzaWx5Cj4gY29tcHV0ZSB0aGUgc3RvcmFnZSByZXF1aXJlbWVudHMgZm9yIHRo ZSBmcmFtZWJ1ZmZlciwgc28gdGhhdCB3ZSBjYW4KPiBjaGVjayB0aGF0IHRoZSBvYmplY3QgaXMg YmlnIGVub3VnaCB0byBob2xkIGl0Lgo+Cj4gV2hlbiBpdCBjb21lcyB0aW1lIHRvIGRlYWwgd2l0 aCB0aGUgcGxhbmUgc291cmNlIGNvb3JkaW5hdGVzLCB3ZSBmaXJzdAo+IHJvdGF0ZSB0aGUgY2xp cHBlZCBzcmMgY29vcmRpbmF0ZXMgdG8gbWF0Y2ggdGhlIHJlbGV2YW50IEdUVCB2aWV3Cj4gb3Jp ZW50YXRpb24sIHRoZW4gYWRkIHRvIHRoZW0gdGhlIGZiIHgveSBvZmZzZXRzLiBOZXh0IHdlIGNv bXB1dGUKPiB0aGUgYWxpZ25lZCBzdXJmYWNlIHBhZ2Ugb2Zmc2V0LCBhbmQgYXMgYSByZXN1bHQg d2UncmUgbGVmdCB3aXRoIHNvbWUKPiByZXNpZHVhbCB4L3kgb2Zmc2V0cy4gRmluYWxseSwgaWYg cmVxdWlyZWQgYnkgdGhlIGhhcmR3YXJlLCB3ZSBjb252ZXJ0Cj4gdGhlIHJlbWFpbmluZyB4L3kg b2Zmc2V0cyBpbnRvIGEgbGluZWFyIG9mZnNldC4KPgo+IEZvciBnZW4yLzMgd2Ugc2ltcGx5IHNr aXAgY29tcHV0aW5nIHRoZSBmaW5hbCBwYWdlIG9mZnNldCwgYW5kIGp1c3QKPiBjb252ZXJ0IHRo ZSBzcmMrZmIgeC95IG9mZnNldHMgZGlyZWN0bHkgaW50byBhIGxpbmVhciBvZmZzZXQgc2luY2UK PiB0aGF0J3Mgd2hhdCB0aGUgaGFyZHdhcmUgd2FudHMuCj4KPiBBZnRlciB0aGlzIGFsbCBwbGF0 Zm9ybXMsIGluY2x1aW5nIFNLTCssIGNvbXB1dGUgdGhlc2UgdGhpbmdzIGluIGV4YWN0bHkKPiB0 aGUgc2FtZSB3YXkgKGV4Y2x1ZGluZyBhbGlnbmVtbnQgZGlmZmVyZW5jZXMpLgo+Cj4gdjI6IFVz ZSBCSVQoRFJNX1JPVEFURV8yNzApIGluc3RlYWQgb2YgUk9UQVRFXzI3MCB3aGVuIHJvdGF0aW5n Cj4gICAgICBwbGFuZSBzcmMgY29vcmRpbmF0ZXMKPiAgICAgIERyb3Agc29tZSBzcHVyaW91cyBj aGFuZ2VzIHRoYXQgZ290IGxlZnQgYmVoaW5kIGR1cmluZwo+ICAgICAgZGV2ZWxvcG1lbnQKPiB2 MzogU3BsaXQgb3V0IG1vcmUgY2hhbmdlcyB0byBwcmVwIHBhdGNoZXMgKERhbmllbCkKPiAgICAg IHMvaW50ZWxfZmItPnBsYW5lW10uZm9vLmJhci9pbnRlbF9mYi0+Zm9vW10uYmFyLyBmb3IgYnJl dml0eQo+ICAgICAgUmVuYW1lIGludGVsX3N1cmZfZ3R0X29mZnNldCB0byBpbnRlbF9mYl9ndHRf b2Zmc2V0Cj4gICAgICBLaWxsIHRoZSBwb2ludGxlc3MgJ3BsYW5lJyBwYXJhbWV0ZXIgZnJvbSBp bnRlbF9mYl9ndHRfb2Zmc2V0KCkKPiB2NDogRml4IGFsaWdubWVudCB2cy4gYWxpZ25tZW50LTEg d2hlbiBjYWxsaW5nCj4gICAgICBfaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgpIGZyb20gaW50 ZWxfZmlsbF9mYl9pbmZvKCkKPiAgICAgIFBhc3MgdGhlIHBpdGNoIGluIHRpbGVzIGluCj4gICAg ICBzdGFkIG9mIHBpeGVscyB0byBpbnRlbF9hZGp1c3RfdGlsZV9vZmZzZXQoKSBmcm9tIGludGVs X2ZpbGxfZmJfaW5mbygpCj4gICAgICBQYXNzIHRoZSBmdWxsIHdpZHRoL2hlaWdodCBvZiB0aGUg cm90YXRlZCBhcmVhIHRvCj4gICAgICBkcm1fcmVjdF9yb3RhdGUoKSBmb3IgY2xhcml0eQo+ICAg ICAgVXNlIHUzMiBmb3IgbW9yZSBvZmZzZXRzCj4gdjU6IFByZXNlcnZlIHRoZSB1cHBlcl8zMl9i aXRzKCkvbG93ZXJfMzJfYml0cygpIGhhbmRsaW5nIGZvciB0aGUKPiAgICAgIGZiIGdndHQgb2Zm c2V0IChTaXZha3VtYXIpCj4KPiBDYzogU2l2YWt1bWFyIFRodWxhc2ltYW5pIDxzaXZha3VtYXIu dGh1bGFzaW1hbmlAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuYyAgfCAgNTEgKystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5oICB8ICAgNSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jIHwgMzY4ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgMTkgKy0KPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jICB8ICA5NyArKysrLS0tLS0KPiAgIDUgZmlsZXMg Y2hhbmdlZCwgMzMxIGluc2VydGlvbnMoKyksIDIwOSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggMzY0Y2Y4MjM2MDIxLi43MjEwY2ZmY2JhZWIg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IEBAIC0zMzgxLDE2ICszMzgx LDE0IEBAIHJvdGF0ZV9wYWdlcyhjb25zdCBkbWFfYWRkcl90ICppbiwgdW5zaWduZWQgaW50IG9m ZnNldCwKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCj4gLWludGVsX3Jv dGF0ZV9mYl9vYmpfcGFnZXMoc3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvLAo+ ICtpbnRlbF9yb3RhdGVfZmJfb2JqX3BhZ2VzKGNvbnN0IHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9p bmZvICpyb3RfaW5mbywKPiAgIAkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK PiAgIHsKPiAtCXVuc2lnbmVkIGludCBzaXplX3BhZ2VzID0gcm90X2luZm8tPnBsYW5lWzBdLndp ZHRoICogcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodDsKPiAtCXVuc2lnbmVkIGludCBzaXplX3Bh Z2VzX3V2Owo+ICsJdW5zaWduZWQgaW50IHNpemUgPSBpbnRlbF9yb3RhdGlvbl9pbmZvX3NpemUo cm90X2luZm8pOwo+ICAgCXN0cnVjdCBzZ19wYWdlX2l0ZXIgc2dfaXRlcjsKPiAgIAl1bnNpZ25l ZCBsb25nIGk7Cj4gICAJZG1hX2FkZHJfdCAqcGFnZV9hZGRyX2xpc3Q7Cj4gICAJc3RydWN0IHNn X3RhYmxlICpzdDsKPiAtCXVuc2lnbmVkIGludCB1dl9zdGFydF9wYWdlOwo+ICAgCXN0cnVjdCBz Y2F0dGVybGlzdCAqc2c7Cj4gICAJaW50IHJldCA9IC1FTk9NRU07Cj4gICAKPiBAQCAtMzQwMSwx OCArMzM5OSwxMiBAQCBpbnRlbF9yb3RhdGVfZmJfb2JqX3BhZ2VzKHN0cnVjdCBpbnRlbF9yb3Rh dGlvbl9pbmZvICpyb3RfaW5mbywKPiAgIAlpZiAoIXBhZ2VfYWRkcl9saXN0KQo+ICAgCQlyZXR1 cm4gRVJSX1BUUihyZXQpOwo+ICAgCj4gLQkvKiBBY2NvdW50IGZvciBVViBwbGFuZSB3aXRoIE5W MTIuICovCj4gLQlpZiAocm90X2luZm8tPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIp Cj4gLQkJc2l6ZV9wYWdlc191diA9IHJvdF9pbmZvLT5wbGFuZVsxXS53aWR0aCAqIHJvdF9pbmZv LT5wbGFuZVsxXS5oZWlnaHQ7Cj4gLQllbHNlCj4gLQkJc2l6ZV9wYWdlc191diA9IDA7Cj4gLQo+ ICAgCS8qIEFsbG9jYXRlIHRhcmdldCBTRyBsaXN0LiAqLwo+ICAgCXN0ID0ga21hbGxvYyhzaXpl b2YoKnN0KSwgR0ZQX0tFUk5FTCk7Cj4gICAJaWYgKCFzdCkKPiAgIAkJZ290byBlcnJfc3RfYWxs b2M7Cj4gICAKPiAtCXJldCA9IHNnX2FsbG9jX3RhYmxlKHN0LCBzaXplX3BhZ2VzICsgc2l6ZV9w YWdlc191diwgR0ZQX0tFUk5FTCk7Cj4gKwlyZXQgPSBzZ19hbGxvY190YWJsZShzdCwgc2l6ZSwg R0ZQX0tFUk5FTCk7Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290byBlcnJfc2dfYWxsb2M7Cj4gICAK PiBAQCAtMzQyNiwzMiArMzQxOCwxNCBAQCBpbnRlbF9yb3RhdGVfZmJfb2JqX3BhZ2VzKHN0cnVj dCBpbnRlbF9yb3RhdGlvbl9pbmZvICpyb3RfaW5mbywKPiAgIAlzdC0+bmVudHMgPSAwOwo+ICAg CXNnID0gc3QtPnNnbDsKPiAgIAo+IC0JLyogUm90YXRlIHRoZSBwYWdlcy4gKi8KPiAtCXNnID0g cm90YXRlX3BhZ2VzKHBhZ2VfYWRkcl9saXN0LCAwLAo+IC0JCQkgIHJvdF9pbmZvLT5wbGFuZVsw XS53aWR0aCwgcm90X2luZm8tPnBsYW5lWzBdLmhlaWdodCwKPiAtCQkJICByb3RfaW5mby0+cGxh bmVbMF0ud2lkdGgsCj4gLQkJCSAgc3QsIHNnKTsKPiAtCj4gLQkvKiBBcHBlbmQgdGhlIFVWIHBs YW5lIGlmIE5WMTIuICovCj4gLQlpZiAocm90X2luZm8tPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9S TUFUX05WMTIpIHsKPiAtCQl1dl9zdGFydF9wYWdlID0gc2l6ZV9wYWdlczsKPiAtCj4gLQkJLyog Q2hlY2sgZm9yIHRpbGUtcm93IHVuLWFsaWdubWVudC4gKi8KPiAtCQlpZiAob2Zmc2V0X2luX3Bh Z2Uocm90X2luZm8tPnV2X29mZnNldCkpCj4gLQkJCXV2X3N0YXJ0X3BhZ2UtLTsKPiAtCj4gLQkJ cm90X2luZm8tPnV2X3N0YXJ0X3BhZ2UgPSB1dl9zdGFydF9wYWdlOwo+IC0KPiAtCQlzZyA9IHJv dGF0ZV9wYWdlcyhwYWdlX2FkZHJfbGlzdCwgcm90X2luZm8tPnV2X3N0YXJ0X3BhZ2UsCj4gLQkJ CQkgIHJvdF9pbmZvLT5wbGFuZVsxXS53aWR0aCwgcm90X2luZm8tPnBsYW5lWzFdLmhlaWdodCwK PiAtCQkJCSAgcm90X2luZm8tPnBsYW5lWzFdLndpZHRoLAo+IC0JCQkJICBzdCwgc2cpOwo+ICsJ Zm9yIChpID0gMCA7IGkgPCBBUlJBWV9TSVpFKHJvdF9pbmZvLT5wbGFuZSk7IGkrKykgewo+ICsJ CXNnID0gcm90YXRlX3BhZ2VzKHBhZ2VfYWRkcl9saXN0LCByb3RfaW5mby0+cGxhbmVbaV0ub2Zm c2V0LAo+ICsJCQkJICByb3RfaW5mby0+cGxhbmVbaV0ud2lkdGgsIHJvdF9pbmZvLT5wbGFuZVtp XS5oZWlnaHQsCj4gKwkJCQkgIHJvdF9pbmZvLT5wbGFuZVtpXS5zdHJpZGUsIHN0LCBzZyk7Cj4g ICAJfQo+ICAgCj4gLQlEUk1fREVCVUdfS01TKCJDcmVhdGVkIHJvdGF0ZWQgcGFnZSBtYXBwaW5n IGZvciBvYmplY3Qgc2l6ZSAlenUgKCV1eCV1IHRpbGVzLCAldSBwYWdlcyAoJXUgcGxhbmUgMCkp LlxuIiwKPiAtCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcm90X2luZm8tPnBsYW5lWzBdLndpZHRo LAo+IC0JCSAgICAgIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQsIHNpemVfcGFnZXMgKyBzaXpl X3BhZ2VzX3V2LAo+IC0JCSAgICAgIHNpemVfcGFnZXMpOwo+ICsJRFJNX0RFQlVHX0tNUygiQ3Jl YXRlZCByb3RhdGVkIHBhZ2UgbWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1ICgldXgldSB0aWxl cywgJXUgcGFnZXMpXG4iLAo+ICsJCSAgICAgIG9iai0+YmFzZS5zaXplLCByb3RfaW5mby0+cGxh bmVbMF0ud2lkdGgsIHJvdF9pbmZvLT5wbGFuZVswXS5oZWlnaHQsIHNpemUpOwo+ICAgCj4gICAJ ZHJtX2ZyZWVfbGFyZ2UocGFnZV9hZGRyX2xpc3QpOwo+ICAgCj4gQEAgLTM0NjIsMTAgKzM0MzYs OSBAQCBlcnJfc2dfYWxsb2M6Cj4gICBlcnJfc3RfYWxsb2M6Cj4gICAJZHJtX2ZyZWVfbGFyZ2Uo cGFnZV9hZGRyX2xpc3QpOwo+ICAgCj4gLQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gY3JlYXRl IHJvdGF0ZWQgbWFwcGluZyBmb3Igb2JqZWN0IHNpemUgJXp1ISAoJWQpICgldXgldSB0aWxlcywg JXUgcGFnZXMgKCV1IHBsYW5lIDApKVxuIiwKPiAtCQkgICAgICBvYmotPmJhc2Uuc2l6ZSwgcmV0 LCByb3RfaW5mby0+cGxhbmVbMF0ud2lkdGgsCj4gLQkJICAgICAgcm90X2luZm8tPnBsYW5lWzBd LmhlaWdodCwgc2l6ZV9wYWdlcyArIHNpemVfcGFnZXNfdXYsCj4gLQkJICAgICAgc2l6ZV9wYWdl cyk7Cj4gKwlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gY3JlYXRlIHJvdGF0ZWQgbWFwcGluZyBm b3Igb2JqZWN0IHNpemUgJXp1ISAoJXV4JXUgdGlsZXMsICV1IHBhZ2VzKVxuIiwKPiArCQkgICAg ICBvYmotPmJhc2Uuc2l6ZSwgcm90X2luZm8tPnBsYW5lWzBdLndpZHRoLCByb3RfaW5mby0+cGxh bmVbMF0uaGVpZ2h0LCBzaXplKTsKPiArCj4gICAJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgIH0K PiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gaW5kZXggMTE0ODUwMzY4YmNh Li4zNGJiMDM3NjVlOTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZ3R0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IEBA IC0xMzcsMTIgKzEzNyw5IEBAIGVudW0gaTkxNV9nZ3R0X3ZpZXdfdHlwZSB7Cj4gICB9Owo+ICAg Cj4gICBzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyB7Cj4gLQl1bnNpZ25lZCBpbnQgdXZfb2Zm c2V0Owo+IC0JdWludDMyX3QgcGl4ZWxfZm9ybWF0Owo+IC0JdW5zaWduZWQgaW50IHV2X3N0YXJ0 X3BhZ2U7Cj4gICAJc3RydWN0IHsKPiAgIAkJLyogdGlsZXMgKi8KPiAtCQl1bnNpZ25lZCBpbnQg d2lkdGgsIGhlaWdodDsKPiArCQl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCBv ZmZzZXQ7Cj4gICAJfSBwbGFuZVsyXTsKPiAgIH07Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4gaW5kZXggODI2MmIyMzFkNzgzLi4zYzk1YTM2NjMyNjkgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTIxNzgsMzMgKzIxNzgsNiBAQCBp bnRlbF9maWxsX2ZiX2dndHRfdmlldyhzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcsCj4gICAJ fQo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkCj4gLWludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvICppbmZvID0gJnRvX2lu dGVsX2ZyYW1lYnVmZmVyKGZiKS0+cm90X2luZm87Cj4gLQl1bnNpZ25lZCBpbnQgdGlsZV9zaXpl LCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodCwgY3BwOwo+IC0KPiAtCXRpbGVfc2l6ZSA9IGludGVs X3RpbGVfc2l6ZShkZXZfcHJpdik7Cj4gLQo+IC0JY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAo ZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gLQlpbnRlbF90aWxlX2RpbXMoZGV2X3ByaXYsICZ0aWxl X3dpZHRoLCAmdGlsZV9oZWlnaHQsCj4gLQkJCWZiLT5tb2RpZmllclswXSwgY3BwKTsKPiAtCj4g LQlpbmZvLT5wbGFuZVswXS53aWR0aCA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hlc1swXSwgdGls ZV93aWR0aCAqIGNwcCk7Cj4gLQlpbmZvLT5wbGFuZVswXS5oZWlnaHQgPSBESVZfUk9VTkRfVVAo ZmItPmhlaWdodCwgdGlsZV9oZWlnaHQpOwo+IC0KPiAtCWlmIChpbmZvLT5waXhlbF9mb3JtYXQg PT0gRFJNX0ZPUk1BVF9OVjEyKSB7Cj4gLQkJY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmIt PnBpeGVsX2Zvcm1hdCwgMSk7Cj4gLQkJaW50ZWxfdGlsZV9kaW1zKGRldl9wcml2LCAmdGlsZV93 aWR0aCwgJnRpbGVfaGVpZ2h0LAo+IC0JCQkJZmItPm1vZGlmaWVyWzFdLCBjcHApOwo+IC0KPiAt CQlpbmZvLT51dl9vZmZzZXQgPSBmYi0+b2Zmc2V0c1sxXTsKPiAtCQlpbmZvLT5wbGFuZVsxXS53 aWR0aCA9IERJVl9ST1VORF9VUChmYi0+cGl0Y2hlc1sxXSwgdGlsZV93aWR0aCAqIGNwcCk7Cj4g LQkJaW5mby0+cGxhbmVbMV0uaGVpZ2h0ID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQgLyAyLCB0 aWxlX2hlaWdodCk7Cj4gLQl9Cj4gLX0KPiAtCj4gICBzdGF0aWMgdW5zaWduZWQgaW50IGludGVs X2xpbmVhcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICAgewo+ICAgCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDkpCj4gQEAgLTIz MjYsNiArMjI5OSw0MiBAQCB2b2lkIGludGVsX3VucGluX2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgdW5zaWduZWQgaW50IHJvdGF0aW9uKQo+ICAgfQo+ICAgCj4gICAvKgo+ICsg KiBDb252ZXJ0IHRoZSB4L3kgb2Zmc2V0cyBpbnRvIGEgbGluZWFyIG9mZnNldC4KPiArICogT25s eSB2YWxpZCB3aXRoIDAvMTgwIGRlZ3JlZSByb3RhdGlvbiwgd2hpY2ggaXMgZmluZSBzaW5jZSBs aW5lYXIKPiArICogb2Zmc2V0IGlzIG9ubHkgdXNlZCB3aXRoIGxpbmVhciBidWZmZXJzIG9uIHBy ZS1oc3cgYW5kIHRpbGVkIGJ1ZmZlcnMKPiArICogd2l0aCBnZW4yLzMsIGFuZCA5MC8yNzAgZGVn cmVlIHJvdGF0aW9ucyBpc24ndCBzdXBwb3J0ZWQgb24gYW55IG9mIHRoZW0uCj4gKyAqLwo+ICt1 MzIgaW50ZWxfZmJfeHlfdG9fbGluZWFyKGludCB4LCBpbnQgeSwKPiArCQkJICBjb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQg Y3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgcGxhbmUpOwo+ICsJ dW5zaWduZWQgaW50IHBpdGNoID0gZmItPnBpdGNoZXNbcGxhbmVdOwo+ICsKPiArCXJldHVybiB5 ICogcGl0Y2ggKyB4ICogY3BwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBBZGQgdGhlIHgveSBvZmZz ZXRzIGRlcml2ZWQgZnJvbSBmYi0+b2Zmc2V0c1tdIHRvIHRoZSB1c2VyCj4gKyAqIHNwZWNpZmll ZCBwbGFuZSBzcmMgeC95IG9mZnNldHMuIFRoZSByZXN1bHRpbmcgeC95IG9mZnNldHMKPiArICog c3BlY2lmeSB0aGUgc3RhcnQgb2Ygc2Nhbm91dCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGd0 dCBtYXBwaW5nLgo+ICsgKi8KPiArdm9pZCBpbnRlbF9hZGRfZmJfb2Zmc2V0cyhpbnQgKngsIGlu dCAqeSwKPiArCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5l LAo+ICsJCQkgIHVuc2lnbmVkIGludCByb3RhdGlvbikKPiArCj4gK3sKPiArCWNvbnN0IHN0cnVj dCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYik7 Cj4gKwo+ICsJaWYgKGludGVsX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKPiArCQkq eCArPSBpbnRlbF9mYi0+cm90YXRlZFtwbGFuZV0ueDsKPiArCQkqeSArPSBpbnRlbF9mYi0+cm90 YXRlZFtwbGFuZV0ueTsKPiArCX0gZWxzZSB7Cj4gKwkJKnggKz0gaW50ZWxfZmItPm5vcm1hbFtw bGFuZV0ueDsKPiArCQkqeSArPSBpbnRlbF9mYi0+bm9ybWFsW3BsYW5lXS55Owo+ICsJfQo+ICt9 Cj4gKwo+ICsvKgo+ICAgICogQWRqdXN0IHRoZSB0aWxlIG9mZnNldCBieSBtb3ZpbmcgdGhlIGRp ZmZlcmVuY2UgaW50bwo+ICAgICogdGhlIHgveSBvZmZzZXRzLgo+ICAgICoKPiBAQCAtMjM2MSwx OCArMjM3MCwyNCBAQCBzdGF0aWMgdTMyIGludGVsX2FkanVzdF90aWxlX29mZnNldChpbnQgKngs IGludCAqeSwKPiAgICAqIEluIHRoZSA5MC8yNzAgcm90YXRlZCBjYXNlLCB4IGFuZCB5IGFyZSBh c3N1bWVkCj4gICAgKiB0byBiZSBhbHJlYWR5IHJvdGF0ZWQgdG8gbWF0Y2ggdGhlIHJvdGF0ZWQg R1RUIHZpZXcsIGFuZAo+ICAgICogcGl0Y2ggaXMgdGhlIHRpbGVfaGVpZ2h0IGFsaWduZWQgZnJh bWVidWZmZXIgaGVpZ2h0Lgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBj b21wdXRpbmcgdGhlIGRlcml2ZWQgaW5mb3JtYXRpb24KPiArICogdW5kZXIgaW50ZWxfZnJhbWVi dWZmZXIsIHNvIHVzaW5nIGFueSBvZiB0aGF0IGluZm9ybWF0aW9uCj4gKyAqIGhlcmUgaXMgbm90 IGFsbG93ZWQuIEFueXRoaW5nIHVuZGVyIGRybV9mcmFtZWJ1ZmZlciBjYW4gYmUKPiArICogdXNl ZC4gVGhpcyBpcyB3aHkgdGhlIHVzZXIgaGFzIHRvIHBhc3MgaW4gdGhlIHBpdGNoIHNpbmNlIGl0 Cj4gKyAqIGlzIHNwZWNpZmllZCBpbiB0aGUgcm90YXRlZCBvcmllbnRhdGlvbi4KPiAgICAqLwo+ IC11MzIgaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldChpbnQgKngsIGludCAqeSwKPiAtCQkJICAg ICAgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPiAtCQkJICAg ICAgdW5zaWduZWQgaW50IHBpdGNoLAo+IC0JCQkgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24p Cj4gK3N0YXRpYyB1MzIgX2ludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoY29uc3Qgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJICAgICAgaW50ICp4LCBpbnQgKnksCj4g KwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IHBsYW5lLAo+ ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHBpdGNoLAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50 IHJvdGF0aW9uLAo+ICsJCQkJICAgICAgdTMyIGFsaWdubWVudCkKPiAgIHsKPiAtCWNvbnN0IHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZmItPmRldik7Cj4gICAJ dWludDY0X3QgZmJfbW9kaWZpZXIgPSBmYi0+bW9kaWZpZXJbcGxhbmVdOwo+ICAgCXVuc2lnbmVk IGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCBwbGFuZSk7 Cj4gLQl1MzIgb2Zmc2V0LCBvZmZzZXRfYWxpZ25lZCwgYWxpZ25tZW50Owo+ICsJdTMyIG9mZnNl dCwgb2Zmc2V0X2FsaWduZWQ7Cj4gICAKPiAtCWFsaWdubWVudCA9IGludGVsX3N1cmZfYWxpZ25t ZW50KGRldl9wcml2LCBmYl9tb2RpZmllcik7Cj4gICAJaWYgKGFsaWdubWVudCkKPiAgIAkJYWxp Z25tZW50LS07Cj4gICAKPiBAQCAtMjQxNCw2ICsyNDI5LDE0MSBAQCB1MzIgaW50ZWxfY29tcHV0 ZV90aWxlX29mZnNldChpbnQgKngsIGludCAqeSwKPiAgIAlyZXR1cm4gb2Zmc2V0X2FsaWduZWQ7 Cj4gICB9Cj4gICAKPiArdTMyIGludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoaW50ICp4LCBpbnQg KnksCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxh bmUsCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBwaXRjaCwKPiArCQkJICAgICAgdW5zaWduZWQg aW50IHJvdGF0aW9uKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGZiLT5kZXYpOwo+ICsJdTMyIGFsaWdubWVudCA9IGludGVsX3N1cmZf YWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbcGxhbmVdKTsKPiArCj4gKwlyZXR1cm4g X2ludGVsX2NvbXB1dGVfdGlsZV9vZmZzZXQoZGV2X3ByaXYsIHgsIHksIGZiLCBwbGFuZSwgcGl0 Y2gsCj4gKwkJCQkJICByb3RhdGlvbiwgYWxpZ25tZW50KTsKPiArfQo+ICsKPiArLyogQ29udmVy dCB0aGUgZmItPm9mZnNldFtdIGxpbmVhciBvZmZzZXQgaW50byB4L3kgb2Zmc2V0cyAqLwo+ICtz dGF0aWMgdm9pZCBpbnRlbF9mYl9vZmZzZXRfdG9feHkoaW50ICp4LCBpbnQgKnksCj4gKwkJCQkg IGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpCj4gK3sKPiArCXVu c2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCBw bGFuZSk7Cj4gKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBmYi0+cGl0Y2hlc1twbGFuZV07Cj4gKwl1 MzIgbGluZWFyX29mZnNldCA9IGZiLT5vZmZzZXRzW3BsYW5lXTsKPiArCj4gKwkqeSA9IGxpbmVh cl9vZmZzZXQgLyBwaXRjaDsKPiArCSp4ID0gbGluZWFyX29mZnNldCAlIHBpdGNoIC8gY3BwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2ludGVsX2ZpbGxfZmJfaW5mbyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIp Cj4gK3sKPiArCXN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqaW50ZWxfZmIgPSB0b19pbnRlbF9m cmFtZWJ1ZmZlcihmYik7Cj4gKwlzdHJ1Y3QgaW50ZWxfcm90YXRpb25faW5mbyAqcm90X2luZm8g PSAmaW50ZWxfZmItPnJvdF9pbmZvOwo+ICsJdTMyIGd0dF9vZmZzZXRfcm90YXRlZCA9IDA7Cj4g Kwl1bnNpZ25lZCBpbnQgbWF4X3NpemUgPSAwOwo+ICsJdWludDMyX3QgZm9ybWF0ID0gZmItPnBp eGVsX2Zvcm1hdDsKPiArCWludCBpLCBudW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9udW1fcGxhbmVz KGZvcm1hdCk7Cj4gKwl1bnNpZ25lZCBpbnQgdGlsZV9zaXplID0gaW50ZWxfdGlsZV9zaXplKGRl dl9wcml2KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsrKSB7Cj4gKwkJ dW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7Cj4gKwkJdW5zaWduZWQgaW50IGNwcCwgc2l6ZTsK PiArCQl1MzIgb2Zmc2V0Owo+ICsJCWludCB4LCB5Owo+ICsKPiArCQljcHAgPSBkcm1fZm9ybWF0 X3BsYW5lX2NwcChmb3JtYXQsIGkpOwo+ICsJCXdpZHRoID0gZHJtX2Zvcm1hdF9wbGFuZV93aWR0 aChmYi0+d2lkdGgsIGZvcm1hdCwgaSk7Cj4gKwkJaGVpZ2h0ID0gZHJtX2Zvcm1hdF9wbGFuZV9o ZWlnaHQoZmItPmhlaWdodCwgZm9ybWF0LCBpKTsKPiArCj4gKwkJaW50ZWxfZmJfb2Zmc2V0X3Rv X3h5KCZ4LCAmeSwgZmIsIGkpOwo+ICsKPiArCQkvKgo+ICsJCSAqIEZpcnN0IHBpeGVsIG9mIHRo ZSBmcmFtZWJ1ZmZlciBmcm9tCj4gKwkJICogdGhlIHN0YXJ0IG9mIHRoZSBub3JtYWwgZ3R0IG1h cHBpbmcuCj4gKwkJICovCj4gKwkJaW50ZWxfZmItPm5vcm1hbFtpXS54ID0geDsKPiArCQlpbnRl bF9mYi0+bm9ybWFsW2ldLnkgPSB5Owo+ICsKPiArCQlvZmZzZXQgPSBfaW50ZWxfY29tcHV0ZV90 aWxlX29mZnNldChkZXZfcHJpdiwgJngsICZ5LAo+ICsJCQkJCQkgICAgZmIsIDAsIGZiLT5waXRj aGVzW2ldLAo+ICsJCQkJCQkgICAgQklUKERSTV9ST1RBVEVfMCksIHRpbGVfc2l6ZSk7Cj4gKwkJ b2Zmc2V0IC89IHRpbGVfc2l6ZTsKPiArCj4gKwkJaWYgKGZiLT5tb2RpZmllcltpXSAhPSBEUk1f Rk9STUFUX01PRF9OT05FKSB7Cj4gKwkJCXVuc2lnbmVkIGludCB0aWxlX3dpZHRoLCB0aWxlX2hl aWdodDsKPiArCQkJdW5zaWduZWQgaW50IHBpdGNoX3RpbGVzOwo+ICsJCQlzdHJ1Y3QgZHJtX3Jl Y3QgcjsKPiArCj4gKwkJCWludGVsX3RpbGVfZGltcyhkZXZfcHJpdiwgJnRpbGVfd2lkdGgsICZ0 aWxlX2hlaWdodCwKPiArCQkJCQlmYi0+bW9kaWZpZXJbaV0sIGNwcCk7Cj4gKwo+ICsJCQlyb3Rf aW5mby0+cGxhbmVbaV0ub2Zmc2V0ID0gb2Zmc2V0Owo+ICsJCQlyb3RfaW5mby0+cGxhbmVbaV0u c3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5waXRjaGVzW2ldLCB0aWxlX3dpZHRoICogY3BwKTsK PiArCQkJcm90X2luZm8tPnBsYW5lW2ldLndpZHRoID0gRElWX1JPVU5EX1VQKHggKyB3aWR0aCwg dGlsZV93aWR0aCk7Cj4gKwkJCXJvdF9pbmZvLT5wbGFuZVtpXS5oZWlnaHQgPSBESVZfUk9VTkRf VVAoeSArIGhlaWdodCwgdGlsZV9oZWlnaHQpOwo+ICsKPiArCQkJaW50ZWxfZmItPnJvdGF0ZWRb aV0ucGl0Y2ggPQo+ICsJCQkJcm90X2luZm8tPnBsYW5lW2ldLmhlaWdodCAqIHRpbGVfaGVpZ2h0 Owo+ICsKPiArCQkJLyogaG93IG1hbnkgdGlsZXMgZG9lcyB0aGlzIHBsYW5lIG5lZWQgKi8KPiAr CQkJc2l6ZSA9IHJvdF9pbmZvLT5wbGFuZVtpXS5zdHJpZGUgKiByb3RfaW5mby0+cGxhbmVbaV0u aGVpZ2h0Owo+ICsJCQkvKgo+ICsJCQkgKiBJZiB0aGUgcGxhbmUgaXNuJ3QgaG9yaXpvbnRhbGx5 IHRpbGUgYWxpZ25lZCwKPiArCQkJICogd2UgbmVlZCBvbmUgbW9yZSB0aWxlLgo+ICsJCQkgKi8K PiArCQkJaWYgKHggIT0gMCkKPiArCQkJCXNpemUrKzsKPiArCj4gKwkJCS8qIHJvdGF0ZSB0aGUg eC95IG9mZnNldHMgdG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCj4gKwkJCXIueDEgPSB4Owo+ICsJ CQlyLnkxID0geTsKPiArCQkJci54MiA9IHggKyB3aWR0aDsKPiArCQkJci55MiA9IHkgKyBoZWln aHQ7Cj4gKwkJCWRybV9yZWN0X3JvdGF0ZSgmciwKPiArCQkJCQlyb3RfaW5mby0+cGxhbmVbaV0u d2lkdGggKiB0aWxlX3dpZHRoLAo+ICsJCQkJCXJvdF9pbmZvLT5wbGFuZVtpXS5oZWlnaHQgKiB0 aWxlX2hlaWdodCwKPiArCQkJCQlCSVQoRFJNX1JPVEFURV8yNzApKTsKPiArCQkJeCA9IHIueDE7 Cj4gKwkJCXkgPSByLnkxOwo+ICsKPiArCQkJLyogcm90YXRlIHRoZSB0aWxlIGRpbWVuc2lvbnMg dG8gbWF0Y2ggdGhlIEdUVCB2aWV3ICovCj4gKwkJCXBpdGNoX3RpbGVzID0gaW50ZWxfZmItPnJv dGF0ZWRbaV0ucGl0Y2ggLyB0aWxlX2hlaWdodDsKPiArCQkJc3dhcCh0aWxlX3dpZHRoLCB0aWxl X2hlaWdodCk7Cj4gKwo+ICsJCQkvKgo+ICsJCQkgKiBXZSBvbmx5IGtlZXAgdGhlIHgveSBvZmZz ZXRzLCBzbyBwdXNoIGFsbCBvZiB0aGUKPiArCQkJICogZ3R0IG9mZnNldCBpbnRvIHRoZSB4L3kg b2Zmc2V0cy4KPiArCQkJICovCj4gKwkJCWludGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnks IHRpbGVfc2l6ZSwKPiArCQkJCQkJIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LCBwaXRjaF90aWxl cywKPiArCQkJCQkJIGd0dF9vZmZzZXRfcm90YXRlZCAqIHRpbGVfc2l6ZSwgMCk7Cj4gKwo+ICsJ CQlndHRfb2Zmc2V0X3JvdGF0ZWQgKz0gcm90X2luZm8tPnBsYW5lW2ldLndpZHRoICogcm90X2lu Zm8tPnBsYW5lW2ldLmhlaWdodDsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIEZpcnN0IHBpeGVsIG9m IHRoZSBmcmFtZWJ1ZmZlciBmcm9tCj4gKwkJCSAqIHRoZSBzdGFydCBvZiB0aGUgcm90YXRlZCBn dHQgbWFwcGluZy4KPiArCQkJICovCj4gKwkJCWludGVsX2ZiLT5yb3RhdGVkW2ldLnggPSB4Owo+ ICsJCQlpbnRlbF9mYi0+cm90YXRlZFtpXS55ID0geTsKPiArCQl9IGVsc2Ugewo+ICsJCQlzaXpl ID0gRElWX1JPVU5EX1VQKCh5ICsgaGVpZ2h0KSAqIGZiLT5waXRjaGVzW2ldICsKPiArCQkJCQkg ICAgeCAqIGNwcCwgdGlsZV9zaXplKTsKPiArCQl9Cj4gKwo+ICsJCS8qIGhvdyBtYW55IHRpbGVz IGluIHRvdGFsIG5lZWRlZCBpbiB0aGUgYm8gKi8KPiArCQltYXhfc2l6ZSA9IG1heChtYXhfc2l6 ZSwgb2Zmc2V0ICsgc2l6ZSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKG1heF9zaXplICogdGlsZV9zaXpl ID4gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpLT5vYmotPmJhc2Uuc2l6ZSkgewo+ICsJCURSTV9E RUJVRygiZmIgdG9vIGJpZyBmb3IgYm8gKG5lZWQgJXUgYnl0ZXMsIGhhdmUgJXp1IGJ5dGVzKVxu IiwKPiArCQkJICBtYXhfc2l6ZSAqIHRpbGVfc2l6ZSwgdG9faW50ZWxfZnJhbWVidWZmZXIoZmIp LT5vYmotPmJhc2Uuc2l6ZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gICBzdGF0aWMgaW50IGk5eHhfZm9ybWF0X3RvX2ZvdXJjYyhpbnQg Zm9ybWF0KQo+ICAgewo+ICAgCXN3aXRjaCAoZm9ybWF0KSB7Cj4gQEAgLTI2NDksNyArMjc5OSw2 IEBAIHN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFu ZSAqcHJpbWFyeSwKPiAgIAl1MzIgZHNwY250cjsKPiAgIAlpOTE1X3JlZ190IHJlZyA9IERTUENO VFIocGxhbmUpOwo+ICAgCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNl LnJvdGF0aW9uOwo+IC0JaW50IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9m b3JtYXQsIDApOwo+ICAgCWludCB4ID0gcGxhbmVfc3RhdGUtPnNyYy54MSA+PiAxNjsKPiAgIAlp bnQgeSA9IHBsYW5lX3N0YXRlLT5zcmMueTEgPj4gMTY7Cj4gICAKPiBAQCAtMjcwOSwzMCArMjg1 OCwyNSBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1f cGxhbmUgKnByaW1hcnksCj4gICAJaWYgKElTX0c0WChkZXYpKQo+ICAgCQlkc3BjbnRyIHw9IERJ U1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiAgIAo+IC0JbGluZWFyX29mZnNldCA9IHkg KiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwg JnksIGZiLCAwLCByb3RhdGlvbik7Cj4gICAKPiAtCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+ PSA0KSB7Cj4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkKPiAgIAkJaW50ZWxfY3J0 Yy0+ZHNwYWRkcl9vZmZzZXQgPQo+ICAgCQkJaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwg JnksIGZiLCAwLAo+ICAgCQkJCQkJICBmYi0+cGl0Y2hlc1swXSwgcm90YXRpb24pOwo+IC0JCWxp bmVhcl9vZmZzZXQgLT0gaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQ7Cj4gLQl9IGVsc2Ugewo+ IC0JCWludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKPiAtCX0KPiAg IAo+ICAgCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gICAJCWRzcGNu dHIgfD0gRElTUFBMQU5FX1JPVEFURV8xODA7Cj4gICAKPiAgIAkJeCArPSAoY3J0Y19zdGF0ZS0+ cGlwZV9zcmNfdyAtIDEpOwo+ICAgCQl5ICs9IChjcnRjX3N0YXRlLT5waXBlX3NyY19oIC0gMSk7 Cj4gLQo+IC0JCS8qIEZpbmRpbmcgdGhlIGxhc3QgcGl4ZWwgb2YgdGhlIGxhc3QgbGluZSBvZiB0 aGUgZGlzcGxheQo+IC0JCWRhdGEgYW5kIGFkZGluZyB0byBsaW5lYXJfb2Zmc2V0Ki8KPiAtCQls aW5lYXJfb2Zmc2V0ICs9Cj4gLQkJCShjcnRjX3N0YXRlLT5waXBlX3NyY19oIC0gMSkgKiBmYi0+ cGl0Y2hlc1swXSArCj4gLQkJCShjcnRjX3N0YXRlLT5waXBlX3NyY193IC0gMSkgKiBjcHA7Cj4g ICAJfQo+ICAgCj4gKwlsaW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlfdG9fbGluZWFyKHgsIHks IGZiLCAwKTsKPiArCj4gKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0KQo+ICsJCWludGVs X2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0gbGluZWFyX29mZnNldDsKPiArCj4gICAJaW50ZWxfY3J0 Yy0+YWRqdXN0ZWRfeCA9IHg7Cj4gICAJaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHk7Cj4gICAK PiBAQCAtMjc0MSw3ICsyODg1LDggQEAgc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcHJpbWFyeV9w bGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5LAo+ICAgCUk5MTVfV1JJVEUoRFNQU1RSSURF KHBsYW5lKSwgZmItPnBpdGNoZXNbMF0pOwo+ICAgCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+ PSA0KSB7Cj4gICAJCUk5MTVfV1JJVEUoRFNQU1VSRihwbGFuZSksCj4gLQkJCSAgIGk5MTVfZ2Vt X29ial9nZ3R0X29mZnNldChvYmopICsgaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQpOwo+ICsJ CQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKwo+ICsJCQkgICBpbnRlbF9j cnRjLT5kc3BhZGRyX29mZnNldCk7Cj4gICAJCUk5MTVfV1JJVEUoRFNQVElMRU9GRihwbGFuZSks ICh5IDw8IDE2KSB8IHgpOwo+ICAgCQlJOTE1X1dSSVRFKERTUExJTk9GRihwbGFuZSksIGxpbmVh cl9vZmZzZXQpOwo+ICAgCX0gZWxzZQo+IEBAIC0yNzc5LDcgKzI5MjQsNiBAQCBzdGF0aWMgdm9p ZCBpcm9ubGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5 LAo+ICAgCXUzMiBkc3BjbnRyOwo+ICAgCWk5MTVfcmVnX3QgcmVnID0gRFNQQ05UUihwbGFuZSk7 Cj4gICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247 Cj4gLQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7 Cj4gICAJaW50IHggPSBwbGFuZV9zdGF0ZS0+c3JjLngxID4+IDE2Owo+ICAgCWludCB5ID0gcGxh bmVfc3RhdGUtPnNyYy55MSA+PiAxNjsKPiAgIAo+IEBAIC0yODE4LDI2ICsyOTYyLDIzIEBAIHN0 YXRpYyB2b2lkIGlyb25sYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUg KnByaW1hcnksCj4gICAJaWYgKCFJU19IQVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYp KQo+ICAgCQlkc3BjbnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKPiAgIAo+ IC0JbGluZWFyX29mZnNldCA9IHkgKiBmYi0+cGl0Y2hlc1swXSArIHggKiBjcHA7Cj4gKwlpbnRl bF9hZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gKwo+ICAgCWludGVs X2NydGMtPmRzcGFkZHJfb2Zmc2V0ID0KPiAgIAkJaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgm eCwgJnksIGZiLCAwLAo+ICAgCQkJCQkgIGZiLT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gLQls aW5lYXJfb2Zmc2V0IC09IGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0Owo+ICsKPiAgIAlpZiAo cm90YXRpb24gPT0gQklUKERSTV9ST1RBVEVfMTgwKSkgewo+ICAgCQlkc3BjbnRyIHw9IERJU1BQ TEFORV9ST1RBVEVfMTgwOwo+ICAgCj4gICAJCWlmICghSVNfSEFTV0VMTChkZXYpICYmICFJU19C Uk9BRFdFTEwoZGV2KSkgewo+ICAgCQkJeCArPSAoY3J0Y19zdGF0ZS0+cGlwZV9zcmNfdyAtIDEp Owo+ICAgCQkJeSArPSAoY3J0Y19zdGF0ZS0+cGlwZV9zcmNfaCAtIDEpOwo+IC0KPiAtCQkJLyog RmluZGluZyB0aGUgbGFzdCBwaXhlbCBvZiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBkaXNwbGF5Cj4g LQkJCWRhdGEgYW5kIGFkZGluZyB0byBsaW5lYXJfb2Zmc2V0Ki8KPiAtCQkJbGluZWFyX29mZnNl dCArPQo+IC0JCQkJKGNydGNfc3RhdGUtPnBpcGVfc3JjX2ggLSAxKSAqIGZiLT5waXRjaGVzWzBd ICsKPiAtCQkJCShjcnRjX3N0YXRlLT5waXBlX3NyY193IC0gMSkgKiBjcHA7Cj4gICAJCX0KPiAg IAl9Cj4gICAKPiArCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwgeSwg ZmIsIDApOwo+ICsKPiAgIAlpbnRlbF9jcnRjLT5hZGp1c3RlZF94ID0geDsKPiAgIAlpbnRlbF9j cnRjLT5hZGp1c3RlZF95ID0geTsKPiAgIAo+IEBAIC0yODQ1LDcgKzI5ODYsOCBAQCBzdGF0aWMg dm9pZCBpcm9ubGFrZV91cGRhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwcmlt YXJ5LAo+ICAgCj4gICAJSTkxNV9XUklURShEU1BTVFJJREUocGxhbmUpLCBmYi0+cGl0Y2hlc1sw XSk7Cj4gICAJSTkxNV9XUklURShEU1BTVVJGKHBsYW5lKSwKPiAtCQkgICBpOTE1X2dlbV9vYmpf Z2d0dF9vZmZzZXQob2JqKSArIGludGVsX2NydGMtPmRzcGFkZHJfb2Zmc2V0KTsKPiArCQkgICBp bnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCByb3RhdGlvbikgKwo+ICsJCSAgIGludGVsX2NydGMtPmRz cGFkZHJfb2Zmc2V0KTsKPiAgIAlpZiAoSVNfSEFTV0VMTChkZXYpIHx8IElTX0JST0FEV0VMTChk ZXYpKSB7Cj4gICAJCUk5MTVfV1JJVEUoRFNQT0ZGU0VUKHBsYW5lKSwgKHkgPDwgMTYpIHwgeCk7 Cj4gICAJfSBlbHNlIHsKPiBAQCAtMjg2NywyOCArMzAwOSwxNiBAQCB1MzIgaW50ZWxfZmJfc3Ry aWRlX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g ICAJfQo+ICAgfQo+ICAgCj4gLXUzMiBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KHN0cnVjdCBpbnRl bF9wbGFuZSAqaW50ZWxfcGxhbmUsCj4gLQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gLQkJCSAgIHVuc2lnbmVkIGludCBwbGFuZSkKPiArdTMyIGludGVsX2ZiX2d0dF9v ZmZzZXQoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gKwkJCXVuc2lnbmVkIGludCByb3Rh dGlvbikKPiAgIHsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9m Yl9vYmooZmIpOwo+ICAgCXN0cnVjdCBpOTE1X2dndHRfdmlldyB2aWV3Owo+IC0Jc3RydWN0IGk5 MTVfdm1hICp2bWE7Cj4gICAJdTY0IG9mZnNldDsKPiAgIAo+IC0JaW50ZWxfZmlsbF9mYl9nZ3R0 X3ZpZXcoJnZpZXcsIGludGVsX3BsYW5lLT5iYXNlLnN0YXRlLT5mYiwKPiAtCQkJCWludGVsX3Bs YW5lLT5iYXNlLnN0YXRlLT5yb3RhdGlvbik7Cj4gLQo+IC0Jdm1hID0gaTkxNV9nZW1fb2JqX3Rv X2dndHRfdmlldyhvYmosICZ2aWV3KTsKPiAtCWlmIChXQVJOKCF2bWEsICJnZ3R0IHZtYSBmb3Ig ZGlzcGxheSBvYmplY3Qgbm90IGZvdW5kISAodmlldz0ldSlcbiIsCj4gLQkJdmlldy50eXBlKSkK PiAtCQlyZXR1cm4gLTE7Cj4gLQo+IC0Jb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0Owo+ICsJaW50 ZWxfZmlsbF9mYl9nZ3R0X3ZpZXcoJnZpZXcsIGZiLCByb3RhdGlvbik7Cj4gICAKPiAtCWlmIChw bGFuZSA9PSAxKSB7Cj4gLQkJb2Zmc2V0ICs9IHZtYS0+Z2d0dF92aWV3LnBhcmFtcy5yb3RhdGVk LnV2X3N0YXJ0X3BhZ2UgKgo+IC0JCQkgIFBBR0VfU0laRTsKPiAtCX0KPiArCW9mZnNldCA9IGk5 MTVfZ2VtX29ial9nZ3R0X29mZnNldF92aWV3KG9iaiwgJnZpZXcpOwo+ICAgCj4gICAJV0FSTl9P Tih1cHBlcl8zMl9iaXRzKG9mZnNldCkpOwo+ICAgCj4gQEAgLTMwMTEsMTIgKzMxNDEsOSBAQCBz dGF0aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gICAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9j cnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ICAgCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlw ZTsKPiAgIAl1MzIgcGxhbmVfY3RsLCBzdHJpZGVfZGl2LCBzdHJpZGU7Cj4gLQl1MzIgdGlsZV9o ZWlnaHQsIHBsYW5lX29mZnNldCwgcGxhbmVfc2l6ZTsKPiAgIAl1bnNpZ25lZCBpbnQgcm90YXRp b24gPSBwbGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKPiAtCWludCB4X29mZnNldCwgeV9vZmZz ZXQ7Cj4gICAJdTMyIHN1cmZfYWRkcjsKPiAgIAlpbnQgc2NhbGVyX2lkID0gcGxhbmVfc3RhdGUt PnNjYWxlcl9pZDsKPiAgIAlpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+c3JjLngxID4+IDE2Owo+ IEBAIC0zMDM3LDM2ICszMTY0LDQ5IEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1h cnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJcGxhbmVfY3RsIHw9IFBMQU5F X0NUTF9QTEFORV9HQU1NQV9ESVNBQkxFOwo+ICAgCXBsYW5lX2N0bCB8PSBza2xfcGxhbmVfY3Rs X3JvdGF0aW9uKHJvdGF0aW9uKTsKPiAgIAo+IC0Jc3RyaWRlX2RpdiA9IGludGVsX2ZiX3N0cmlk ZV9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwKPiAtCQkJCQkgICAgICAgZmIt PnBpeGVsX2Zvcm1hdCk7Cj4gLQlzdXJmX2FkZHIgPSBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KHRv X2ludGVsX3BsYW5lKHBsYW5lKSwgb2JqLCAwKTsKPiAtCj4gLQlXQVJOX09OKGRybV9yZWN0X3dp ZHRoKCZwbGFuZV9zdGF0ZS0+c3JjKSA9PSAwKTsKPiAtCj4gICAJaWYgKGludGVsX3JvdGF0aW9u XzkwX29yXzI3MChyb3RhdGlvbikpIHsKPiArCQlzdHJ1Y3QgZHJtX3JlY3QgciA9IHsKPiArCQkJ LngxID0gc3JjX3gsCj4gKwkJCS54MiA9IHNyY194ICsgc3JjX3csCj4gKwkJCS55MSA9IHNyY195 LAo+ICsJCQkueTIgPSBzcmNfeSArIHNyY19oLAo+ICsJCX07Cj4gICAJCWludCBjcHAgPSBkcm1f Zm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsKPiArCQlzdHJ1Y3QgaW50ZWxf ZnJhbWVidWZmZXIgKmludGVsX2ZiID0gdG9faW50ZWxfZnJhbWVidWZmZXIoZmIpOwo+ICsKPiAr CQkvKiBSb3RhdGUgc3JjIGNvb3JkaW5hdGVzIHRvIG1hdGNoIHJvdGF0ZWQgR1RUIHZpZXcgKi8K PiArCQlkcm1fcmVjdF9yb3RhdGUoJnIsIGZiLT53aWR0aCwgZmItPmhlaWdodCwgQklUKERSTV9S T1RBVEVfMjcwKSk7Cj4gICAKPiAtCQkvKiBzdHJpZGUgPSBTdXJmYWNlIGhlaWdodCBpbiB0aWxl cyAqLwo+IC0JCXRpbGVfaGVpZ2h0ID0gaW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5t b2RpZmllclswXSwgY3BwKTsKPiAtCQlzdHJpZGUgPSBESVZfUk9VTkRfVVAoZmItPmhlaWdodCwg dGlsZV9oZWlnaHQpOwo+IC0JCXhfb2Zmc2V0ID0gc3RyaWRlICogdGlsZV9oZWlnaHQgLSBzcmNf eSAtIHNyY19oOwo+IC0JCXlfb2Zmc2V0ID0gc3JjX3g7Cj4gLQkJcGxhbmVfc2l6ZSA9IChzcmNf dyAtIDEpIDw8IDE2IHwgKHNyY19oIC0gMSk7Cj4gKwkJc3JjX3ggPSByLngxOwo+ICsJCXNyY195 ID0gci55MTsKPiArCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZyKTsKPiArCQlzcmNfaCA9IGRy bV9yZWN0X2hlaWdodCgmcik7Cj4gKwo+ICsJCXN0cmlkZV9kaXYgPSBpbnRlbF90aWxlX2hlaWdo dChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCBjcHApOwo+ICsJCXN0cmlkZSA9IGludGVsX2Zi LT5yb3RhdGVkWzBdLnBpdGNoOwo+ICAgCX0gZWxzZSB7Cj4gLQkJc3RyaWRlID0gZmItPnBpdGNo ZXNbMF0gLyBzdHJpZGVfZGl2Owo+IC0JCXhfb2Zmc2V0ID0gc3JjX3g7Cj4gLQkJeV9vZmZzZXQg PSBzcmNfeTsKPiAtCQlwbGFuZV9zaXplID0gKHNyY19oIC0gMSkgPDwgMTYgfCAoc3JjX3cgLSAx KTsKPiArCQlzdHJpZGVfZGl2ID0gaW50ZWxfZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwg ZmItPm1vZGlmaWVyWzBdLAo+ICsJCQkJCQkgICAgICAgZmItPnBpeGVsX2Zvcm1hdCk7Cj4gKwkJ c3RyaWRlID0gZmItPnBpdGNoZXNbMF07Cj4gICAJfQo+IC0JcGxhbmVfb2Zmc2V0ID0geV9vZmZz ZXQgPDwgMTYgfCB4X29mZnNldDsKPiAgIAo+IC0JaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeCA9IHhf b2Zmc2V0Owo+IC0JaW50ZWxfY3J0Yy0+YWRqdXN0ZWRfeSA9IHlfb2Zmc2V0Owo+ICsJaW50ZWxf YWRkX2ZiX29mZnNldHMoJnNyY194LCAmc3JjX3ksIGZiLCAwLCByb3RhdGlvbik7Cj4gKwlzdXJm X2FkZHIgPSBpbnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZzcmNfeCwgJnNyY195LCBmYiwgMCwK PiArCQkJCQkgICAgICBzdHJpZGUsIHJvdGF0aW9uKTsKPiArCj4gKwkvKiBTaXplcyBhcmUgMCBi YXNlZCAqLwo+ICsJc3JjX3ctLTsKPiArCXNyY19oLS07Cj4gKwlkc3Rfdy0tOwo+ICsJZHN0X2gt LTsKPiArCj4gKwlpbnRlbF9jcnRjLT5hZGp1c3RlZF94ID0gc3JjX3g7Cj4gKwlpbnRlbF9jcnRj LT5hZGp1c3RlZF95ID0gc3JjX3k7Cj4gICAKPiAgIAlJOTE1X1dSSVRFKFBMQU5FX0NUTChwaXBl LCAwKSwgcGxhbmVfY3RsKTsKPiAtCUk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIDApLCBw bGFuZV9vZmZzZXQpOwo+IC0JSTkxNV9XUklURShQTEFORV9TSVpFKHBpcGUsIDApLCBwbGFuZV9z aXplKTsKPiAtCUk5MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIDApLCBzdHJpZGUpOwo+ICsJ STkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgMCksIChzcmNfeSA8PCAxNikgfCBzcmNfeCk7 Cj4gKwlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCAwKSwgc3RyaWRlIC8gc3RyaWRlX2Rp dik7Cj4gKwlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgMCksIChzcmNfaCA8PCAxNikgfCBz cmNfdyk7Cj4gICAKPiAgIAlpZiAoc2NhbGVyX2lkID49IDApIHsKPiAgIAkJdWludDMyX3QgcHNf Y3RybCA9IDA7Cj4gQEAgLTMwODMsNyArMzIyMyw4IEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBk YXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJCUk5MTVfV1JJ VEUoUExBTkVfUE9TKHBpcGUsIDApLCAoZHN0X3kgPDwgMTYpIHwgZHN0X3gpOwo+ICAgCX0KPiAg IAo+IC0JSTkxNV9XUklURShQTEFORV9TVVJGKHBpcGUsIDApLCBzdXJmX2FkZHIpOwo+ICsJSTkx NV9XUklURShQTEFORV9TVVJGKHBpcGUsIDApLAo+ICsJCSAgIGludGVsX2ZiX2d0dF9vZmZzZXQo ZmIsIHJvdGF0aW9uKSArIHN1cmZfYWRkcik7Cj4gICAKPiAgIAlQT1NUSU5HX1JFQUQoUExBTkVf U1VSRihwaXBlLCAwKSk7Cj4gICB9Cj4gQEAgLTExMjg1LDcgKzExNDI2LDcgQEAgc3RhdGljIHZv aWQgc2tsX2RvX21taW9fZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiAgIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAg CXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gaW50ZWxfY3J0Yy0+YmFzZS5wcmltYXJ5LT5m YjsKPiAgIAljb25zdCBlbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gLQl1MzIg Y3RsLCBzdHJpZGUsIHRpbGVfaGVpZ2h0Owo+ICsJdTMyIGN0bCwgc3RyaWRlOwo+ICAgCj4gICAJ Y3RsID0gSTkxNV9SRUFEKFBMQU5FX0NUTChwaXBlLCAwKSk7Cj4gICAJY3RsICY9IH5QTEFORV9D VExfVElMRURfTUFTSzsKPiBAQCAtMTEzMTAsOSArMTE0NTEsMTEgQEAgc3RhdGljIHZvaWQgc2ts X2RvX21taW9fZmxpcChzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKPiAgIAkgKiBsaW5l YXIgYnVmZmVycyBvciBpbiBudW1iZXIgb2YgdGlsZXMgZm9yIHRpbGVkIGJ1ZmZlcnMuCj4gICAJ ICovCj4gICAJaWYgKGludGVsX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKPiAtCQkv KiBzdHJpZGUgPSBTdXJmYWNlIGhlaWdodCBpbiB0aWxlcyAqLwo+IC0JCXRpbGVfaGVpZ2h0ID0g aW50ZWxfdGlsZV9oZWlnaHQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwgMCk7Cj4gLQkJc3Ry aWRlID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRpbGVfaGVpZ2h0KTsKPiArCQlpbnQgY3Bw ID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gKwkJc3RydWN0 IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsK PiArCj4gKwkJc3RyaWRlID0gaW50ZWxfZmItPnJvdGF0ZWRbMF0ucGl0Y2ggLwo+ICsJCQlpbnRl bF90aWxlX2hlaWdodChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLCBjcHApOwo+ICAgCX0gZWxz ZSB7Cj4gICAJCXN0cmlkZSA9IGZiLT5waXRjaGVzWzBdIC8KPiAgIAkJCWludGVsX2ZiX3N0cmlk ZV9hbGlnbm1lbnQoZGV2X3ByaXYsIGZiLT5tb2RpZmllclswXSwKPiBAQCAtMTE2NDIsOCArMTE3 ODUsNyBAQCBzdGF0aWMgaW50IGludGVsX2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGNsZWFudXBfcGVuZGluZzsKPiAgIAo+IC0J d29yay0+Z3R0X29mZnNldCA9IGludGVsX3BsYW5lX29ial9vZmZzZXQodG9faW50ZWxfcGxhbmUo cHJpbWFyeSksCj4gLQkJCQkJCSAgb2JqLCAwKTsKPiArCXdvcmstPmd0dF9vZmZzZXQgPSBpbnRl bF9mYl9ndHRfb2Zmc2V0KGZiLCBwcmltYXJ5LT5zdGF0ZS0+cm90YXRpb24pOwo+ICAgCXdvcmst Pmd0dF9vZmZzZXQgKz0gaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQ7Cj4gICAKPiAgIAlpZiAo bW1pb19mbGlwKSB7Cj4gQEAgLTE0NzE2LDcgKzE0ODU4LDYgQEAgc3RhdGljIGludCBpbnRlbF9m cmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkJICBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAtCXVuc2lnbmVkIGludCBhbGlnbmVkX2hl aWdodDsKPiAgIAlpbnQgcmV0Owo+ICAgCXUzMiBwaXRjaF9saW1pdCwgc3RyaWRlX2FsaWdubWVu dDsKPiAgIAo+IEBAIC0xNDg0MSwxNyArMTQ5ODIsMTIgQEAgc3RhdGljIGludCBpbnRlbF9mcmFt ZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJaWYgKG1vZGVfY21kLT5v ZmZzZXRzWzBdICE9IDApCj4gICAJCXJldHVybiAtRUlOVkFMOwo+ICAgCj4gLQlhbGlnbmVkX2hl aWdodCA9IGludGVsX2ZiX2FsaWduX2hlaWdodChkZXYsIG1vZGVfY21kLT5oZWlnaHQsCj4gLQkJ CQkJICAgICAgIG1vZGVfY21kLT5waXhlbF9mb3JtYXQsCj4gLQkJCQkJICAgICAgIG1vZGVfY21k LT5tb2RpZmllclswXSk7Cj4gLQkvKiBGSVhNRSBkcm0gaGVscGVyIGZvciBzaXplIGNoZWNrcyAo ZXNwZWNpYWxseSBwbGFuYXIgZm9ybWF0cyk/ICovCj4gLQlpZiAob2JqLT5iYXNlLnNpemUgPCBh bGlnbmVkX2hlaWdodCAqIG1vZGVfY21kLT5waXRjaGVzWzBdKQo+IC0JCXJldHVybiAtRUlOVkFM Owo+IC0KPiAgIAlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJmludGVsX2ZiLT5iYXNl LCBtb2RlX2NtZCk7Cj4gICAJaW50ZWxfZmItPm9iaiA9IG9iajsKPiAgIAo+IC0JaW50ZWxfZmls bF9mYl9pbmZvKGRldl9wcml2LCAmaW50ZWxfZmItPmJhc2UpOwo+ICsJcmV0ID0gaW50ZWxfZmls bF9mYl9pbmZvKGRldl9wcml2LCAmaW50ZWxfZmItPmJhc2UpOwo+ICsJaWYgKHJldCkKPiArCQly ZXR1cm4gcmV0Owo+ICAgCj4gICAJcmV0ID0gZHJtX2ZyYW1lYnVmZmVyX2luaXQoZGV2LCAmaW50 ZWxfZmItPmJhc2UsICZpbnRlbF9mYl9mdW5jcyk7Cj4gICAJaWYgKHJldCkgewo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oCj4gaW5kZXggMjFkZWUzZjg5ZTg0Li4yZjExNzhkYmQzMjggMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBAIC0xNTMsNiArMTUzLDE2IEBAIHN0cnVjdCBp bnRlbF9mcmFtZWJ1ZmZlciB7Cj4gICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOwo+ICAg CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gICAJc3RydWN0IGludGVsX3JvdGF0 aW9uX2luZm8gcm90X2luZm87Cj4gKwo+ICsJLyogZm9yIGVhY2ggcGxhbmUgaW4gdGhlIG5vcm1h bCBHVFQgdmlldyAqLwo+ICsJc3RydWN0IHsKPiArCQl1bnNpZ25lZCBpbnQgeCwgeTsKPiArCX0g bm9ybWFsWzJdOwo+ICsJLyogZm9yIGVhY2ggcGxhbmUgaW4gdGhlIHJvdGF0ZWQgR1RUIHZpZXcg Ki8KPiArCXN0cnVjdCB7Cj4gKwkJdW5zaWduZWQgaW50IHgsIHk7Cj4gKwkJdW5zaWduZWQgaW50 IHBpdGNoOyAvKiBwaXhlbHMgKi8KPiArCX0gcm90YXRlZFsyXTsKPiAgIH07Cj4gICAKPiAgIHN0 cnVjdCBpbnRlbF9mYmRldiB7Cj4gQEAgLTExMTUsNiArMTEyNSwxMSBAQCBpbnQgdmx2X2dldF9j Y2tfY2xvY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCQkgICAgICBj b25zdCBjaGFyICpuYW1lLCB1MzIgcmVnLCBpbnQgcmVmX2ZyZXEpOwo+ICAgZXh0ZXJuIGNvbnN0 IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaW50ZWxfcGxhbmVfZnVuY3M7Cj4gICB2b2lkIGludGVs X2luaXRfZGlzcGxheV9ob29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ ICt1bnNpZ25lZCBpbnQgaW50ZWxfZmJfeHlfdG9fbGluZWFyKGludCB4LCBpbnQgeSwKPiArCQkJ CSAgIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUpOwo+ICt2b2lk IGludGVsX2FkZF9mYl9vZmZzZXRzKGludCAqeCwgaW50ICp5LAo+ICsJCQkgIGNvbnN0IHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgcGxhbmUsCj4gKwkJCSAgdW5zaWduZWQgaW50IHJv dGF0aW9uKTsKPiAgIHVuc2lnbmVkIGludCBpbnRlbF9yb3RhdGlvbl9pbmZvX3NpemUoY29uc3Qg c3RydWN0IGludGVsX3JvdGF0aW9uX2luZm8gKnJvdF9pbmZvKTsKPiAgIGJvb2wgaW50ZWxfaGFz X3BlbmRpbmdfZmJfdW5waW4oc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gICB2b2lkIGludGVs X21hcmtfYnVzeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiBAQCAtMTI2OCw5ICsxMjgzLDcg QEAgdm9pZCBpbnRlbF9tb2RlX2Zyb21fcGlwZV9jb25maWcoc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUsCj4gICBpbnQgc2tsX3VwZGF0ZV9zY2FsZXJfY3J0YyhzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7Cj4gICBpbnQgc2tsX21heF9zY2FsZShzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0Yywgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwo+ICAgCj4g LXUzMiBpbnRlbF9wbGFuZV9vYmpfb2Zmc2V0KHN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxh bmUsCj4gLQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJCSAgIHVu c2lnbmVkIGludCBwbGFuZSk7Cj4gK3UzMiBpbnRlbF9mYl9ndHRfb2Zmc2V0KHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCB1bnNpZ25lZCBpbnQgcm90YXRpb24pOwo+ICAgCj4gICB1MzIgc2ts X3BsYW5lX2N0bF9mb3JtYXQodWludDMyX3QgcGl4ZWxfZm9ybWF0KTsKPiAgIHUzMiBza2xfcGxh bmVfY3RsX3RpbGluZyh1aW50NjRfdCBmYl9tb2RpZmllcik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfc3ByaXRlLmMKPiBpbmRleCAwZjNlMjMwM2UwZTkuLjgwNmIwZDUwZmI1MCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gQEAgLTE4NiwxNSArMTg2LDEzIEBAIHNrbF91 cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+ICAgCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gICAJc3RydWN0IGlu dGVsX3BsYW5lICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKGRybV9wbGFuZSk7Cj4gICAJ c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiAtCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYl9vYmooZmIpOwo+ICsJc3Ry dWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZi KTsKPiAgIAljb25zdCBpbnQgcGlwZSA9IGludGVsX3BsYW5lLT5waXBlOwo+ICAgCWNvbnN0IGlu dCBwbGFuZSA9IGludGVsX3BsYW5lLT5wbGFuZSArIDE7Cj4gICAJdTMyIHBsYW5lX2N0bCwgc3Ry aWRlX2Rpdiwgc3RyaWRlOwo+ICAgCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9y a2V5ICprZXkgPSAmcGxhbmVfc3RhdGUtPmNrZXk7Cj4gICAJdTMyIHN1cmZfYWRkcjsKPiAtCXUz MiB0aWxlX2hlaWdodCwgcGxhbmVfb2Zmc2V0LCBwbGFuZV9zaXplOwo+ICAgCXVuc2lnbmVkIGlu dCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+IC0JaW50IHhfb2Zmc2V0 LCB5X29mZnNldDsKPiAgIAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmRzdC54MTsKPiAgIAlp bnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmRzdC55MTsKPiAgIAl1aW50MzJfdCBjcnRjX3cgPSBk cm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPmRzdCk7Cj4gQEAgLTIxNSwxNSArMjEzLDYgQEAg c2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxhbmUsCj4gICAKPiAgIAlw bGFuZV9jdGwgfD0gc2tsX3BsYW5lX2N0bF9yb3RhdGlvbihyb3RhdGlvbik7Cj4gICAKPiAtCXN0 cmlkZV9kaXYgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGRldl9wcml2LCBmYi0+bW9kaWZp ZXJbMF0sCj4gLQkJCQkJICAgICAgIGZiLT5waXhlbF9mb3JtYXQpOwo+IC0KPiAtCS8qIFNpemVz IGFyZSAwIGJhc2VkICovCj4gLQlzcmNfdy0tOwo+IC0Jc3JjX2gtLTsKPiAtCWNydGNfdy0tOwo+ IC0JY3J0Y19oLS07Cj4gLQo+ICAgCWlmIChrZXktPmZsYWdzKSB7Cj4gICAJCUk5MTVfV1JJVEUo UExBTkVfS0VZVkFMKHBpcGUsIHBsYW5lKSwga2V5LT5taW5fdmFsdWUpOwo+ICAgCQlJOTE1X1dS SVRFKFBMQU5FX0tFWU1BWChwaXBlLCBwbGFuZSksIGtleS0+bWF4X3ZhbHVlKTsKPiBAQCAtMjM1 LDI4ICsyMjQsNDQgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcm1fcGxh bmUsCj4gICAJZWxzZSBpZiAoa2V5LT5mbGFncyAmIEk5MTVfU0VUX0NPTE9SS0VZX1NPVVJDRSkK PiAgIAkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9LRVlfRU5BQkxFX1NPVVJDRTsKPiAgIAo+IC0J c3VyZl9hZGRyID0gaW50ZWxfcGxhbmVfb2JqX29mZnNldChpbnRlbF9wbGFuZSwgb2JqLCAwKTsK PiAtCj4gICAJaWYgKGludGVsX3JvdGF0aW9uXzkwX29yXzI3MChyb3RhdGlvbikpIHsKPiAtCQlp bnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gLQo+ IC0JCS8qIHN0cmlkZTogU3VyZmFjZSBoZWlnaHQgaW4gdGlsZXMgKi8KPiAtCQl0aWxlX2hlaWdo dCA9IGludGVsX3RpbGVfaGVpZ2h0KGRldl9wcml2LCBmYi0+bW9kaWZpZXJbMF0sIGNwcCk7Cj4g LQkJc3RyaWRlID0gRElWX1JPVU5EX1VQKGZiLT5oZWlnaHQsIHRpbGVfaGVpZ2h0KTsKPiAtCQlw bGFuZV9zaXplID0gKHNyY193IDw8IDE2KSB8IHNyY19oOwo+IC0JCXhfb2Zmc2V0ID0gc3RyaWRl ICogdGlsZV9oZWlnaHQgLSB5IC0gKHNyY19oICsgMSk7Cj4gLQkJeV9vZmZzZXQgPSB4Owo+ICsJ CXN0cnVjdCBkcm1fcmVjdCByID0gewo+ICsJCQkueDEgPSB4LAo+ICsJCQkueDIgPSB4ICsgc3Jj X3csCj4gKwkJCS55MSA9IHksCj4gKwkJCS55MiA9IHkgKyBzcmNfaCwKPiArCQl9Owo+ICsJCXVu c2lnbmVkIGludCBjcHAgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAw KTsKPiArCj4gKwkJLyogUm90YXRlIHNyYyBjb29yZGluYXRlcyB0byBtYXRjaCByb3RhdGVkIEdU VCB2aWV3ICovCj4gKwkJZHJtX3JlY3Rfcm90YXRlKCZyLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQs IEJJVChEUk1fUk9UQVRFXzI3MCkpOwo+ICsKPiArCQl4ID0gci54MTsKPiArCQl5ID0gci55MTsK PiArCQlzcmNfdyA9IGRybV9yZWN0X3dpZHRoKCZyKTsKPiArCQlzcmNfaCA9IGRybV9yZWN0X2hl aWdodCgmcik7Cj4gKwo+ICsJCXN0cmlkZV9kaXYgPSBpbnRlbF90aWxlX2hlaWdodChkZXZfcHJp diwgZmItPm1vZGlmaWVyWzBdLCBjcHApOwo+ICsJCXN0cmlkZSA9IGludGVsX2ZiLT5yb3RhdGVk WzBdLnBpdGNoOwo+ICAgCX0gZWxzZSB7Cj4gLQkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF0gLyBz dHJpZGVfZGl2Owo+IC0JCXBsYW5lX3NpemUgPSAoc3JjX2ggPDwgMTYpIHwgc3JjX3c7Cj4gLQkJ eF9vZmZzZXQgPSB4Owo+IC0JCXlfb2Zmc2V0ID0geTsKPiArCQlzdHJpZGVfZGl2ID0gaW50ZWxf ZmJfc3RyaWRlX2FsaWdubWVudChkZXZfcHJpdiwgZmItPm1vZGlmaWVyWzBdLAo+ICsJCQkJCQkg ICAgICAgZmItPnBpeGVsX2Zvcm1hdCk7Cj4gKwkJc3RyaWRlID0gZmItPnBpdGNoZXNbMF07Cj4g ICAJfQo+IC0JcGxhbmVfb2Zmc2V0ID0geV9vZmZzZXQgPDwgMTYgfCB4X29mZnNldDsKPiAgIAo+ IC0JSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgcGxhbmUpLCBwbGFuZV9vZmZzZXQpOwo+ IC0JSTkxNV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmUpLCBzdHJpZGUpOwo+IC0JSTkx NV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lKSwgcGxhbmVfc2l6ZSk7Cj4gKwlpbnRlbF9h ZGRfZmJfb2Zmc2V0cygmeCwgJnksIGZiLCAwLCByb3RhdGlvbik7Cj4gKwlzdXJmX2FkZHIgPSBp bnRlbF9jb21wdXRlX3RpbGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gKwkJCQkJICAgICAgc3Ry aWRlLCByb3RhdGlvbik7Cj4gKwo+ICsJLyogU2l6ZXMgYXJlIDAgYmFzZWQgKi8KPiArCXNyY193 LS07Cj4gKwlzcmNfaC0tOwo+ICsJY3J0Y193LS07Cj4gKwljcnRjX2gtLTsKPiArCj4gKwlJOTE1 X1dSSVRFKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZSksICh5IDw8IDE2KSB8IHgpOwo+ICsJSTkx NV9XUklURShQTEFORV9TVFJJREUocGlwZSwgcGxhbmUpLCBzdHJpZGUgLyBzdHJpZGVfZGl2KTsK PiArCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCBwbGFuZSksIChzcmNfaCA8PCAxNikgfCBz cmNfdyk7Cj4gICAKPiAgIAkvKiBwcm9ncmFtIHBsYW5lIHNjYWxlciAqLwo+ICAgCWlmIChwbGFu ZV9zdGF0ZS0+c2NhbGVyX2lkID49IDApIHsKPiBAQCAtMjc4LDcgKzI4Myw4IEBAIHNrbF91cGRh dGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLAo+ICAgCX0KPiAgIAo+ICAgCUk5 MTVfV1JJVEUoUExBTkVfQ1RMKHBpcGUsIHBsYW5lKSwgcGxhbmVfY3RsKTsKPiAtCUk5MTVfV1JJ VEUoUExBTkVfU1VSRihwaXBlLCBwbGFuZSksIHN1cmZfYWRkcik7Cj4gKwlJOTE1X1dSSVRFKFBM QU5FX1NVUkYocGlwZSwgcGxhbmUpLAo+ICsJCSAgIGludGVsX2ZiX2d0dF9vZmZzZXQoZmIsIHJv dGF0aW9uKSArIHN1cmZfYWRkcik7Cj4gICAJUE9TVElOR19SRUFEKFBMQU5FX1NVUkYocGlwZSwg cGxhbmUpKTsKPiAgIH0KPiAgIAo+IEBAIC0zNTEsNyArMzU3LDYgQEAgdmx2X3VwZGF0ZV9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxhbmUsCj4gICAJdTMyIHNwcmN0bDsKPiAgIAl1MzIgc3By c3VyZl9vZmZzZXQsIGxpbmVhcl9vZmZzZXQ7Cj4gICAJdW5zaWduZWQgaW50IHJvdGF0aW9uID0g ZHBsYW5lLT5zdGF0ZS0+cm90YXRpb247Cj4gLQlpbnQgY3BwID0gZHJtX2Zvcm1hdF9wbGFuZV9j cHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gICAJY29uc3Qgc3RydWN0IGRybV9pbnRlbF9zcHJp dGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsKPiAgIAlpbnQgY3J0Y194ID0g cGxhbmVfc3RhdGUtPmRzdC54MTsKPiAgIAlpbnQgY3J0Y195ID0gcGxhbmVfc3RhdGUtPmRzdC55 MTsKPiBAQCAtNDIyLDE5ICs0MjcsMTkgQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3Bs YW5lICpkcGxhbmUsCj4gICAJY3J0Y193LS07Cj4gICAJY3J0Y19oLS07Cj4gICAKPiAtCWxpbmVh cl9vZmZzZXQgPSB5ICogZmItPnBpdGNoZXNbMF0gKyB4ICogY3BwOwo+ICsJaW50ZWxfYWRkX2Zi X29mZnNldHMoJngsICZ5LCBmYiwgMCwgcm90YXRpb24pOwo+ICAgCXNwcnN1cmZfb2Zmc2V0ID0g aW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZiLCAwLAo+ICAgCQkJCQkJICAgZmIt PnBpdGNoZXNbMF0sIHJvdGF0aW9uKTsKPiAtCWxpbmVhcl9vZmZzZXQgLT0gc3Byc3VyZl9vZmZz ZXQ7Cj4gICAKPiAgIAlpZiAocm90YXRpb24gPT0gQklUKERSTV9ST1RBVEVfMTgwKSkgewo+ICAg CQlzcHJjdGwgfD0gU1BfUk9UQVRFXzE4MDsKPiAgIAo+ICAgCQl4ICs9IHNyY193Owo+ICAgCQl5 ICs9IHNyY19oOwo+IC0JCWxpbmVhcl9vZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSAr IHNyY193ICogY3BwOwo+ICAgCX0KPiAgIAo+ICsJbGluZWFyX29mZnNldCA9IGludGVsX2ZiX3h5 X3RvX2xpbmVhcih4LCB5LCBmYiwgMCk7Cj4gKwo+ICAgCWlmIChrZXktPmZsYWdzKSB7Cj4gICAJ CUk5MTVfV1JJVEUoU1BLRVlNSU5WQUwocGlwZSwgcGxhbmUpLCBrZXktPm1pbl92YWx1ZSk7Cj4g ICAJCUk5MTVfV1JJVEUoU1BLRVlNQVhWQUwocGlwZSwgcGxhbmUpLCBrZXktPm1heF92YWx1ZSk7 Cj4gQEAgLTQ1OSw4ICs0NjQsOCBAQCB2bHZfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUg KmRwbGFuZSwKPiAgIAo+ICAgCUk5MTVfV1JJVEUoU1BTSVpFKHBpcGUsIHBsYW5lKSwgKGNydGNf aCA8PCAxNikgfCBjcnRjX3cpOwo+ICAgCUk5MTVfV1JJVEUoU1BDTlRSKHBpcGUsIHBsYW5lKSwg c3ByY3RsKTsKPiAtCUk5MTVfV1JJVEUoU1BTVVJGKHBpcGUsIHBsYW5lKSwgaTkxNV9nZW1fb2Jq X2dndHRfb2Zmc2V0KG9iaikgKwo+IC0JCSAgIHNwcnN1cmZfb2Zmc2V0KTsKPiArCUk5MTVfV1JJ VEUoU1BTVVJGKHBpcGUsIHBsYW5lKSwKPiArCQkgICBpbnRlbF9mYl9ndHRfb2Zmc2V0KGZiLCBy b3RhdGlvbikgKyBzcHJzdXJmX29mZnNldCk7Cj4gICAJUE9TVElOR19SRUFEKFNQU1VSRihwaXBl LCBwbGFuZSkpOwo+ICAgfQo+ICAgCj4gQEAgLTQ5Myw3ICs0OTgsNiBAQCBpdmJfdXBkYXRlX3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCXUzMiBzcHJjdGwsIHNwcnNjYWxlID0g MDsKPiAgIAl1MzIgc3Byc3VyZl9vZmZzZXQsIGxpbmVhcl9vZmZzZXQ7Cj4gICAJdW5zaWduZWQg aW50IHJvdGF0aW9uID0gcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4gLQlpbnQgY3BwID0g ZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4gICAJY29uc3Qgc3Ry dWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkgKmtleSA9ICZwbGFuZV9zdGF0ZS0+Y2tleTsK PiAgIAlpbnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmRzdC54MTsKPiAgIAlpbnQgY3J0Y195ID0g cGxhbmVfc3RhdGUtPmRzdC55MTsKPiBAQCAtNTU1LDEwICs1NTksOSBAQCBpdmJfdXBkYXRlX3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgCWlmIChjcnRjX3cgIT0gc3JjX3cgfHwg Y3J0Y19oICE9IHNyY19oKQo+ICAgCQlzcHJzY2FsZSA9IFNQUklURV9TQ0FMRV9FTkFCTEUgfCAo c3JjX3cgPDwgMTYpIHwgc3JjX2g7Cj4gICAKPiAtCWxpbmVhcl9vZmZzZXQgPSB5ICogZmItPnBp dGNoZXNbMF0gKyB4ICogY3BwOwo+ICsJaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBmYiwg MCwgcm90YXRpb24pOwo+ICAgCXNwcnN1cmZfb2Zmc2V0ID0gaW50ZWxfY29tcHV0ZV90aWxlX29m ZnNldCgmeCwgJnksIGZiLCAwLAo+ICAgCQkJCQkJICAgZmItPnBpdGNoZXNbMF0sIHJvdGF0aW9u KTsKPiAtCWxpbmVhcl9vZmZzZXQgLT0gc3Byc3VyZl9vZmZzZXQ7Cj4gICAKPiAgIAlpZiAocm90 YXRpb24gPT0gQklUKERSTV9ST1RBVEVfMTgwKSkgewo+ICAgCQlzcHJjdGwgfD0gU1BSSVRFX1JP VEFURV8xODA7Cj4gQEAgLTU2NywxMCArNTcwLDExIEBAIGl2Yl91cGRhdGVfcGxhbmUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJCWlmICghSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9B RFdFTEwoZGV2KSkgewo+ICAgCQkJeCArPSBzcmNfdzsKPiAgIAkJCXkgKz0gc3JjX2g7Cj4gLQkJ CWxpbmVhcl9vZmZzZXQgKz0gc3JjX2ggKiBmYi0+cGl0Y2hlc1swXSArIHNyY193ICogY3BwOwo+ ICAgCQl9Cj4gICAJfQo+ICAgCj4gKwlsaW5lYXJfb2Zmc2V0ID0gaW50ZWxfZmJfeHlfdG9fbGlu ZWFyKHgsIHksIGZiLCAwKTsKPiArCj4gICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiAgIAkJSTkxNV9X UklURShTUFJLRVlWQUwocGlwZSksIGtleS0+bWluX3ZhbHVlKTsKPiAgIAkJSTkxNV9XUklURShT UFJLRVlNQVgocGlwZSksIGtleS0+bWF4X3ZhbHVlKTsKPiBAQCAtNTk5LDcgKzYwMyw3IEBAIGl2 Yl91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJCUk5MTVfV1JJVEUo U1BSU0NBTEUocGlwZSksIHNwcnNjYWxlKTsKPiAgIAlJOTE1X1dSSVRFKFNQUkNUTChwaXBlKSwg c3ByY3RsKTsKPiAgIAlJOTE1X1dSSVRFKFNQUlNVUkYocGlwZSksCj4gLQkJICAgaTkxNV9nZW1f b2JqX2dndHRfb2Zmc2V0KG9iaikgKyBzcHJzdXJmX29mZnNldCk7Cj4gKwkJICAgaW50ZWxfZmJf Z3R0X29mZnNldChmYiwgcm90YXRpb24pICsgc3Byc3VyZl9vZmZzZXQpOwo+ICAgCVBPU1RJTkdf UkVBRChTUFJTVVJGKHBpcGUpKTsKPiAgIH0KPiAgIAo+IEBAIC02MzQsNyArNjM4LDYgQEAgaWxr X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAl1MzIgZHZzY250ciwg ZHZzc2NhbGU7Cj4gICAJdTMyIGR2c3N1cmZfb2Zmc2V0LCBsaW5lYXJfb2Zmc2V0Owo+ICAgCXVu c2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uOwo+IC0JaW50 IGNwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZiLT5waXhlbF9mb3JtYXQsIDApOwo+ICAgCWNv bnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAmcGxhbmVfc3RhdGUt PmNrZXk7Cj4gICAJaW50IGNydGNfeCA9IHBsYW5lX3N0YXRlLT5kc3QueDE7Cj4gICAJaW50IGNy dGNfeSA9IHBsYW5lX3N0YXRlLT5kc3QueTE7Cj4gQEAgLTY5MiwxOSArNjk1LDE5IEBAIGlsa191 cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gICAJaWYgKGNydGNfdyAhPSBz cmNfdyB8fCBjcnRjX2ggIT0gc3JjX2gpCj4gICAJCWR2c3NjYWxlID0gRFZTX1NDQUxFX0VOQUJM RSB8IChzcmNfdyA8PCAxNikgfCBzcmNfaDsKPiAgIAo+IC0JbGluZWFyX29mZnNldCA9IHkgKiBm Yi0+cGl0Y2hlc1swXSArIHggKiBjcHA7Cj4gKwlpbnRlbF9hZGRfZmJfb2Zmc2V0cygmeCwgJnks IGZiLCAwLCByb3RhdGlvbik7Cj4gICAJZHZzc3VyZl9vZmZzZXQgPSBpbnRlbF9jb21wdXRlX3Rp bGVfb2Zmc2V0KCZ4LCAmeSwgZmIsIDAsCj4gICAJCQkJCQkgICBmYi0+cGl0Y2hlc1swXSwgcm90 YXRpb24pOwo+IC0JbGluZWFyX29mZnNldCAtPSBkdnNzdXJmX29mZnNldDsKPiAgIAo+ICAgCWlm IChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gICAJCWR2c2NudHIgfD0gRFZT X1JPVEFURV8xODA7Cj4gICAKPiAgIAkJeCArPSBzcmNfdzsKPiAgIAkJeSArPSBzcmNfaDsKPiAt CQlsaW5lYXJfb2Zmc2V0ICs9IHNyY19oICogZmItPnBpdGNoZXNbMF0gKyBzcmNfdyAqIGNwcDsK PiAgIAl9Cj4gICAKPiArCWxpbmVhcl9vZmZzZXQgPSBpbnRlbF9mYl94eV90b19saW5lYXIoeCwg eSwgZmIsIDApOwo+ICsKPiAgIAlpZiAoa2V5LT5mbGFncykgewo+ICAgCQlJOTE1X1dSSVRFKERW U0tFWVZBTChwaXBlKSwga2V5LT5taW5fdmFsdWUpOwo+ICAgCQlJOTE1X1dSSVRFKERWU0tFWU1B WChwaXBlKSwga2V5LT5tYXhfdmFsdWUpOwo+IEBAIC03MjgsNyArNzMxLDcgQEAgaWxrX3VwZGF0 ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgIAlJOTE1X1dSSVRFKERWU1NDQUxF KHBpcGUpLCBkdnNzY2FsZSk7Cj4gICAJSTkxNV9XUklURShEVlNDTlRSKHBpcGUpLCBkdnNjbnRy KTsKPiAgIAlJOTE1X1dSSVRFKERWU1NVUkYocGlwZSksCj4gLQkJICAgaTkxNV9nZW1fb2JqX2dn dHRfb2Zmc2V0KG9iaikgKyBkdnNzdXJmX29mZnNldCk7Cj4gKwkJICAgaW50ZWxfZmJfZ3R0X29m ZnNldChmYiwgcm90YXRpb24pICsgZHZzc3VyZl9vZmZzZXQpOwo+ICAgCVBPU1RJTkdfUkVBRChE VlNTVVJGKHBpcGUpKTsKPiAgIH0KPiAgIAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==