From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH v3 2/2] drm/msm: remove partial update support Date: Fri, 2 Mar 2018 12:05:06 -0500 Message-ID: <20180302170506.GR223881@art_vandelay> References: <1519951955-27068-1-git-send-email-jsanka@codeaurora.org> <1519951955-27068-2-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1519951955-27068-2-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Jeykumar Sankaran Cc: jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gVGh1LCBNYXIgMDEsIDIwMTggYXQgMDQ6NTI6MzVQTSAtMDgwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gSW1wbGVtZW50YXRpb24gb2YgcGFydGlhbCB1cGRhdGUgaW4gRFBVIERSTSBp cyBoZWF2aWx5Cj4gZGVwZW5kZW50IG9uIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCBkc2kgaG9va3Mu IFJlbW92aW5nIHRoZQo+IHN1cHBvcnQgZm9yIG5vdy4gV2UgbWF5IG5lZWQgdG8gcmV2aXNpdCB0 aGUgc3VwcG9ydCBpbiB0aGUKPiBmdXR1cmUuCj4gCj4gY2hhbmdlcyBzaW5jZSB2MToKPiAJLSBn ZXQgYXdheSB3aXRoIHVud2FudGVkIHBhcmFtZXRlciB2YWxpZGF0aW9uCj4gCS0gY29kZSBzdHls ZSBmaXhlcwo+IAktIHJlbW92ZSBoZWFkZXIgZmlsZSBkZWZpbml0aW9ucyBmb3IgcGFydGlhbCB1 cGRhdGUKPiAKPiBjaGFuZ2VzIHNpbmNlIHYyOgo+IAktIHJlbW92ZSBjb21waWxhdGlvbiBmbGFn IGZvciBEUFVfQUQ0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxqc2Fu a2FAY29kZWF1cm9yYS5vcmc+CgpUaGFua3MgZm9yIHRoZSByZXZpc2VkIHBhdGNoZXMuIEkndmUg YXBwbGllZCB0aGVtIHRvIGJvdGggZm9yLW5leHQgYW5kCm10cC10ZXN0aW5nIHN0YWdpbmcgYnJh bmNoZXMuIEkgaGFkIHNvbWUgdHJvdWJsZSBhcHBseWluZyB0aGlzIHBhdGNoIGNsZWFubHksIEkK cmVzb2x2ZWQgdGhlIGNvbmZsaWN0cyBmb3IgdGhpcyBvbmUsIGJ1dCAgcHJvYmFibHkgYSBnb29k IGlkZWEgdG8gdXBkYXRlIHlvdXIKbG9jYWwgYnJhbmNoLgoKU2VhbgoKPiAtLS0KPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5jIHwgMTM5ICstLS0tLS0KPiAg ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oIHwgICA3ICstCj4g IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICB8IDU0NCArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfY3J0Yy5oICAgICAgfCAgMTggLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfZW5jb2Rlci5jICAgfCAyNzcgKysrKy0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zLmggICAgICAgfCAgIDggLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMgfCAgNDIgLS0KPiAgZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMgICAgIHwgIDEzIC0KPiAgZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZHJ2LmggICAgICAgICAgICAgICAgIHwgIDU2IC0tLQo+ICA5IGZpbGVzIGNoYW5nZWQs IDg3IGluc2VydGlvbnMoKyksIDEwMTcgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYwo+IGluZGV4IDU3Yjg2MjcuLmM1ZTZj NTMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5l Y3Rvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rv ci5jCj4gQEAgLTQyNCw4ICs0MjQsNyBAQCBpbnQgZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29mZihz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICB7Cj4gIAlzdHJ1Y3QgZHB1X2Nvbm5l Y3RvciAqY19jb25uOwo+ICAJc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGU7Cj4g LQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfa2lja29mZl9wYXJhbXMgcGFyYW1zOwo+IC0JaW50IGlkeCwg cmM7Cj4gKwlpbnQgaWR4LCByYyA9IDA7Cj4gIAo+ICAJaWYgKCFjb25uZWN0b3IpIHsKPiAgCQlE UFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwo+IEBAIC00NjIsMTUgKzQ2MSw4IEBAIGlu dCBkcHVfY29ubmVjdG9yX3ByZV9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCj4gIAkJfQo+ICAJfQo+ICAKPiAtCWlmICghY19jb25uLT5vcHMucHJlX2tpY2tvZmYpCj4g LQkJcmV0dXJuIDA7Cj4gLQo+IC0JcGFyYW1zLnJvaXMgPSAmY19zdGF0ZS0+cm9pczsKPiAtCj4g IAlEUFVfRVZUMzJfVkVSQk9TRShjb25uZWN0b3ItPmJhc2UuaWQpOwo+ICAKPiAtCXJjID0gY19j b25uLT5vcHMucHJlX2tpY2tvZmYoY29ubmVjdG9yLCBjX2Nvbm4tPmRpc3BsYXksICZwYXJhbXMp Owo+IC0KPiAgCXJldHVybiByYzsKPiAgfQo+ICAKPiBAQCAtNjQ1LDEyMiArNjM3LDYgQEAgc3Rh dGljIHZvaWQgZHB1X2Nvbm5lY3Rvcl9hdG9taWNfcmVzZXQoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKPiAgCXJldHVybiAmY19zdGF0ZS0+YmFzZTsKPiAgfQo+ICAKPiAtc3RhdGlj IGludCBfZHB1X2Nvbm5lY3Rvcl9yb2lfdjFfY2hlY2tfcm9pKAo+IC0JCXN0cnVjdCBkcHVfY29u bmVjdG9yICpjX2Nvbm4sCj4gLQkJc3RydWN0IGRybV9jbGlwX3JlY3QgKnJvaV9jb25uLAo+IC0J CWNvbnN0IHN0cnVjdCBtc21fcm9pX2NhcHMgKmNhcHMpCj4gLXsKPiAtCWNvbnN0IHN0cnVjdCBt c21fcm9pX2FsaWdubWVudCAqYWxpZ24gPSAmY2Fwcy0+YWxpZ247Cj4gLQlpbnQgdyA9IHJvaV9j b25uLT54MiAtIHJvaV9jb25uLT54MTsKPiAtCWludCBoID0gcm9pX2Nvbm4tPnkyIC0gcm9pX2Nv bm4tPnkxOwo+IC0KPiAtCWlmICh3IDw9IDAgfHwgaCA8PSAwKSB7Cj4gLQkJRFBVX0VSUk9SX0NP Tk4oY19jb25uLCAiaW52YWxpZCBjb25uIHJvaSB3ICVkIGggJWRcbiIsIHcsIGgpOwo+IC0JCXJl dHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmICh3IDwgYWxpZ24tPm1pbl93aWR0aCB8fCB3 ICUgYWxpZ24tPndpZHRoX3BpeF9hbGlnbikgewo+IC0JCURQVV9FUlJPUl9DT05OKGNfY29ubiwK PiAtCQkJCSJpbnZhbGlkIGNvbm4gcm9pIHdpZHRoICVkIG1pbiAlZCBhbGlnbiAlZFxuIiwKPiAt CQkJCXcsIGFsaWduLT5taW5fd2lkdGgsIGFsaWduLT53aWR0aF9waXhfYWxpZ24pOwo+IC0JCXJl dHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmIChoIDwgYWxpZ24tPm1pbl9oZWlnaHQgfHwg aCAlIGFsaWduLT5oZWlnaHRfcGl4X2FsaWduKSB7Cj4gLQkJRFBVX0VSUk9SX0NPTk4oY19jb25u LAo+IC0JCQkJImludmFsaWQgY29ubiByb2kgaGVpZ2h0ICVkIG1pbiAlZCBhbGlnbiAlZFxuIiwK PiAtCQkJCWgsIGFsaWduLT5taW5faGVpZ2h0LCBhbGlnbi0+aGVpZ2h0X3BpeF9hbGlnbik7Cj4g LQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JaWYgKHJvaV9jb25uLT54MSAlIGFsaWdu LT54c3RhcnRfcGl4X2FsaWduKSB7Cj4gLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAiaW52YWxp ZCBjb25uIHJvaSB4MSAlZCBhbGlnbiAlZFxuIiwKPiAtCQkJCXJvaV9jb25uLT54MSwgYWxpZ24t PnhzdGFydF9waXhfYWxpZ24pOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlm IChyb2lfY29ubi0+eTEgJSBhbGlnbi0+eXN0YXJ0X3BpeF9hbGlnbikgewo+IC0JCURQVV9FUlJP Ul9DT05OKGNfY29ubiwgImludmFsaWQgY29ubiByb2kgeTEgJWQgYWxpZ24gJWRcbiIsCj4gLQkJ CQlyb2lfY29ubi0+eTEsIGFsaWduLT55c3RhcnRfcGl4X2FsaWduKTsKPiAtCQlyZXR1cm4gLUVJ TlZBTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBfZHB1 X2Nvbm5lY3Rvcl9zZXRfcm9pX3YxKAo+IC0JCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4s Cj4gLQkJc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGUsCj4gLQkJdm9pZCAqdXNy X3B0cikKPiAtewo+IC0Jc3RydWN0IGRwdV9kcm1fcm9pX3YxIHJvaV92MTsKPiAtCXN0cnVjdCBt c21fZGlzcGxheV9pbmZvIGRpc3BsYXlfaW5mbzsKPiAtCXN0cnVjdCBtc21fcm9pX2NhcHMgKmNh cHM7Cj4gLQlpbnQgaSwgcmM7Cj4gLQo+IC0JaWYgKCFjX2Nvbm4gfHwgIWNfc3RhdGUpIHsKPiAt CQlEUFVfRVJST1IoImludmFsaWQgYXJnc1xuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9 Cj4gLQo+IC0JcmMgPSBkcHVfY29ubmVjdG9yX2dldF9pbmZvKCZjX2Nvbm4tPmJhc2UsICZkaXNw bGF5X2luZm8pOwo+IC0JaWYgKHJjKSB7Cj4gLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAiZGlz cGxheSBnZXQgaW5mbyBlcnJvcjogJWRcbiIsIHJjKTsKPiAtCQlyZXR1cm4gcmM7Cj4gLQl9Cj4g LQo+IC0JY2FwcyA9ICZkaXNwbGF5X2luZm8ucm9pX2NhcHM7Cj4gLQlpZiAoIWNhcHMtPmVuYWJs ZWQpIHsKPiAtCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJkaXNwbGF5IHJvaSBjYXBhYmlsaXR5 IGlzIGRpc2FibGVkXG4iKTsKPiAtCQlyZXR1cm4gLUVOT1RTVVBQOwo+IC0JfQo+IC0KPiAtCW1l bXNldCgmY19zdGF0ZS0+cm9pcywgMCwgc2l6ZW9mKGNfc3RhdGUtPnJvaXMpKTsKPiAtCj4gLQlp ZiAoIXVzcl9wdHIpIHsKPiAtCQlEUFVfREVCVUdfQ09OTihjX2Nvbm4sICJyb2lzIGNsZWFyZWRc biIpOwo+IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWlmIChjb3B5X2Zyb21fdXNlcigmcm9p X3YxLCB1c3JfcHRyLCBzaXplb2Yocm9pX3YxKSkpIHsKPiAtCQlEUFVfRVJST1JfQ09OTihjX2Nv bm4sICJmYWlsZWQgdG8gY29weSByb2lfdjEgZGF0YVxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7 Cj4gLQl9Cj4gLQo+IC0JRFBVX0RFQlVHX0NPTk4oY19jb25uLCAibnVtX3JlY3RzICVkXG4iLCBy b2lfdjEubnVtX3JlY3RzKTsKPiAtCj4gLQlpZiAocm9pX3YxLm51bV9yZWN0cyA9PSAwKSB7Cj4g LQkJRFBVX0RFQlVHX0NPTk4oY19jb25uLCAicm9pcyBjbGVhcmVkXG4iKTsKPiAtCQlyZXR1cm4g MDsKPiAtCX0KPiAtCj4gLQlpZiAocm9pX3YxLm51bV9yZWN0cyA+IERQVV9NQVhfUk9JX1YxIHx8 Cj4gLQkJCXJvaV92MS5udW1fcmVjdHMgPiBjYXBzLT5udW1fcm9pKSB7Cj4gLQkJRFBVX0VSUk9S X0NPTk4oY19jb25uLCAidG9vIG1hbnkgcmVjdHMgc3BlY2lmaWVkOiAlZFxuIiwKPiAtCQkJCXJv aV92MS5udW1fcmVjdHMpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWNfc3Rh dGUtPnJvaXMubnVtX3JlY3RzID0gcm9pX3YxLm51bV9yZWN0czsKPiAtCWZvciAoaSA9IDA7IGkg PCByb2lfdjEubnVtX3JlY3RzOyArK2kpIHsKPiAtCQlpbnQgcmM7Cj4gLQo+IC0JCXJjID0gX2Rw dV9jb25uZWN0b3Jfcm9pX3YxX2NoZWNrX3JvaShjX2Nvbm4sICZyb2lfdjEucm9pW2ldLAo+IC0J CQkJY2Fwcyk7Cj4gLQkJaWYgKHJjKQo+IC0JCQlyZXR1cm4gcmM7Cj4gLQo+IC0JCWNfc3RhdGUt PnJvaXMucm9pW2ldID0gcm9pX3YxLnJvaVtpXTsKPiAtCQlEUFVfREVCVUdfQ09OTihjX2Nvbm4s ICJyb2klZDogcm9pICglZCwlZCkgKCVkLCVkKVxuIiwgaSwKPiAtCQkJCWNfc3RhdGUtPnJvaXMu cm9pW2ldLngxLAo+IC0JCQkJY19zdGF0ZS0+cm9pcy5yb2lbaV0ueTEsCj4gLQkJCQljX3N0YXRl LT5yb2lzLnJvaVtpXS54MiwKPiAtCQkJCWNfc3RhdGUtPnJvaXMucm9pW2ldLnkyKTsKPiAtCX0K PiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAgc3RhdGljIGludCBfZHB1X2Nvbm5lY3Rvcl91 cGRhdGVfYmxfc2NhbGUoc3RydWN0IGRwdV9jb25uZWN0b3IgKmNfY29ubiwKPiAgCQlpbnQgaWR4 LAo+ICAJCXVpbnQ2NF90IHZhbHVlKQo+IEBAIC04NTIsMTIgKzcyOCw2IEBAIHN0YXRpYyBpbnQg ZHB1X2Nvbm5lY3Rvcl9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCj4gIAkJYnJlYWs7Cj4gIAl9Cj4gIAo+IC0JaWYgKGlkeCA9PSBDT05ORUNUT1Jf UFJPUF9ST0lfVjEpIHsKPiAtCQlyYyA9IF9kcHVfY29ubmVjdG9yX3NldF9yb2lfdjEoY19jb25u LCBjX3N0YXRlLCAodm9pZCAqKXZhbCk7Cj4gLQkJaWYgKHJjKQo+IC0JCQlEUFVfRVJST1JfQ09O TihjX2Nvbm4sICJpbnZhbGlkIHJvaV92MSwgcmM6ICVkXG4iLCByYyk7Cj4gLQl9Cj4gLQo+ICAJ LyogY2hlY2sgZm9yIGN1c3RvbSBwcm9wZXJ0eSBoYW5kbGluZyAqLwo+ICAJaWYgKCFyYyAmJiBj X2Nvbm4tPm9wcy5zZXRfcHJvcGVydHkpIHsKPiAgCQlyYyA9IGNfY29ubi0+b3BzLnNldF9wcm9w ZXJ0eShjb25uZWN0b3IsCj4gQEAgLTEzMDQsMTMgKzExNzQsNiBAQCBzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqZHB1X2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJQ09O TkVDVE9SX1BST1BfQURfQkxfU0NBTEUpOwo+ICAjZW5kaWYKPiAgCj4gLQlyYyA9IGRwdV9jb25u ZWN0b3JfZ2V0X2luZm8oJmNfY29ubi0+YmFzZSwgJmRpc3BsYXlfaW5mbyk7Cj4gLQlpZiAoIXJj ICYmIGRpc3BsYXlfaW5mby5yb2lfY2Fwcy5lbmFibGVkKSB7Cj4gLQkJbXNtX3Byb3BlcnR5X2lu c3RhbGxfdm9sYXRpbGVfcmFuZ2UoCj4gLQkJCQkmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAiZHB1 X2RybV9yb2lfdjEiLCAweDAsCj4gLQkJCQkwLCB+MCwgMCwgQ09OTkVDVE9SX1BST1BfUk9JX1Yx KTsKPiAtCX0KPiAtCj4gIAltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmY19jb25uLT5wcm9w ZXJ0eV9pbmZvLCAiUkVUSVJFX0ZFTkNFIiwKPiAgCQkJMHgwLCAwLCBJTlJfT1BFTl9NQVgsIDAs IENPTk5FQ1RPUl9QUk9QX1JFVElSRV9GRU5DRSk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmggYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmgKPiBpbmRleCA1NzNhMGM4Li45ODFmNDU5IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3Iu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaAo+ IEBAIC0xNjMsMTMgKzE2MywxMCBAQCBzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9vcHMgewo+ICAJICog cHJlX2tpY2tvZmYgLSB0cmlnZ2VyIGRpc3BsYXkgdG8gcHJvZ3JhbSBraWNrb2ZmLXRpbWUgZmVh dHVyZXMKPiAgCSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1 cmUKPiAgCSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUK PiAtCSAqIEBwYXJhbXM6IFBhcmFtZXRlciBidW5kbGUgb2YgY29ubmVjdG9yLXN0b3JlZCBpbmZv cm1hdGlvbiBmb3IKPiAtCSAqCWtpY2tvZmYtdGltZSBwcm9ncmFtbWluZyBpbnRvIHRoZSBkaXNw bGF5Cj4gIAkgKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKPiAgCSAqLwo+ICAJaW50ICgqcHJl X2tpY2tvZmYpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gLQkJCXZvaWQgKmRp c3BsYXksCj4gLQkJCXN0cnVjdCBtc21fZGlzcGxheV9raWNrb2ZmX3BhcmFtcyAqcGFyYW1zKTsK PiArCQkJdm9pZCAqZGlzcGxheSk7Cj4gIAo+ICAJLyoqCj4gIAkgKiBjbGtfY3RybCAtIHBlcmZv cm0gY2xrIGVuYWJsZS9kaXNhYmxlIG9uIHRoZSBjb25uZWN0b3IKPiBAQCAtMzQwLDcgKzMzNyw2 IEBAIHN0cnVjdCBkcHVfY29ubmVjdG9yIHsKPiAgICogQG91dF9mYjogUG9pbnRlciB0byBvdXRw dXQgZnJhbWUgYnVmZmVyLCBpZiBhcHBsaWNhYmxlCj4gICAqIEBwcm9wZXJ0eV9zdGF0ZTogTG9j YWwgc3RvcmFnZSBmb3IgbXNtX3Byb3AgcHJvcGVydGllcwo+ICAgKiBAcHJvcGVydHlfdmFsdWVz OiBMb2NhbCBjYWNoZSBvZiBjdXJyZW50IGNvbm5lY3RvciBwcm9wZXJ0eSB2YWx1ZXMKPiAtICog QHJvaXM6IFJlZ2lvbnMgb2YgaW50ZXJlc3Qgc3RydWN0dXJlIGZvciBtYXBwaW5nIENSVEMgdG8g Q29ubmVjdG9yIG91dHB1dAo+ICAgKiBAcHJvcGVydHlfYmxvYnM6IGJsb2IgcHJvcGVydGllcwo+ ICAgKi8KPiAgc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgewo+IEBAIC0zNDksNyArMzQ1LDYg QEAgc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgewo+ICAJc3RydWN0IG1zbV9wcm9wZXJ0eV9z dGF0ZSBwcm9wZXJ0eV9zdGF0ZTsKPiAgCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgcHJvcGVy dHlfdmFsdWVzW0NPTk5FQ1RPUl9QUk9QX0NPVU5UXTsKPiAgCj4gLQlzdHJ1Y3QgbXNtX3JvaV9s aXN0IHJvaXM7Cj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKnByb3BlcnR5X2Jsb2JzW0NP Tk5FQ1RPUl9QUk9QX0JMT0JDT1VOVF07Cj4gIH07Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NydGMuYwo+IGluZGV4IDNjZGYxZTMuLmFiMzY1NzggMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiBAQCAtNzgyLDQ2NSArNzgyLDI0 IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9kaW1fbGF5ZXJfY2ZnKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKPiAgCX0KPiAgfQo+ICAKPiAtdm9pZCBkcHVfY3J0Y19nZXRfY3J0Y19yb2ko c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPiAtCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3Qg KipjcnRjX3JvaSkKPiAtewo+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ IC0KPiAtCWlmICghc3RhdGUgfHwgIWNydGNfcm9pKQo+IC0JCXJldHVybjsKPiAtCj4gLQljcnRj X3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwo+IC0JKmNydGNfcm9pID0gJmNydGNf c3RhdGUtPmNydGNfcm9pOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IF9kcHVfY3J0Y19zZXRfcm9p X3YxKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCj4gLQkJdm9pZCBfX3VzZXIgKnVzcl9w dHIpCj4gLXsKPiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiAtCXN0cnVjdCBkcHVfY3J0Y19z dGF0ZSAqY3N0YXRlOwo+IC0Jc3RydWN0IGRwdV9kcm1fcm9pX3YxIHJvaV92MTsKPiAtCWludCBp Owo+IC0KPiAtCWlmICghc3RhdGUpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgYXJnc1xuIik7 Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JY3N0YXRlID0gdG9fZHB1X2NydGNf c3RhdGUoc3RhdGUpOwo+IC0JY3J0YyA9IGNzdGF0ZS0+YmFzZS5jcnRjOwo+IC0KPiAtCW1lbXNl dCgmY3N0YXRlLT51c2VyX3JvaV9saXN0LCAwLCBzaXplb2YoY3N0YXRlLT51c2VyX3JvaV9saXN0 KSk7Cj4gLQo+IC0JaWYgKCF1c3JfcHRyKSB7Cj4gLQkJRFBVX0RFQlVHKCJjcnRjJWQ6IHJvaXMg Y2xlYXJlZFxuIiwgRFJNSUQoY3J0YykpOwo+IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWlm IChjb3B5X2Zyb21fdXNlcigmcm9pX3YxLCB1c3JfcHRyLCBzaXplb2Yocm9pX3YxKSkpIHsKPiAt CQlEUFVfRVJST1IoImNydGMlZDogZmFpbGVkIHRvIGNvcHkgcm9pX3YxIGRhdGFcbiIsIERSTUlE KGNydGMpKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlEUFVfREVCVUcoImNy dGMlZDogbnVtX3JlY3RzICVkXG4iLCBEUk1JRChjcnRjKSwgcm9pX3YxLm51bV9yZWN0cyk7Cj4g LQo+IC0JaWYgKHJvaV92MS5udW1fcmVjdHMgPT0gMCkgewo+IC0JCURQVV9ERUJVRygiY3J0YyVk OiByb2lzIGNsZWFyZWRcbiIsIERSTUlEKGNydGMpKTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAt Cj4gLQlpZiAocm9pX3YxLm51bV9yZWN0cyA+IERQVV9NQVhfUk9JX1YxKSB7Cj4gLQkJRFBVX0VS Uk9SKCJjcnRjJWQ6IHRvbyBtYW55IHJlY3RzIHNwZWNpZmllZDogJWRcbiIsIERSTUlEKGNydGMp LAo+IC0JCQkJcm9pX3YxLm51bV9yZWN0cyk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4g LQo+IC0JY3N0YXRlLT51c2VyX3JvaV9saXN0Lm51bV9yZWN0cyA9IHJvaV92MS5udW1fcmVjdHM7 Cj4gLQlmb3IgKGkgPSAwOyBpIDwgcm9pX3YxLm51bV9yZWN0czsgKytpKSB7Cj4gLQkJY3N0YXRl LT51c2VyX3JvaV9saXN0LnJvaVtpXSA9IHJvaV92MS5yb2lbaV07Cj4gLQkJRFBVX0RFQlVHKCJj cnRjJWQ6IHJvaSVkOiByb2kgKCVkLCVkKSAoJWQsJWQpXG4iLAo+IC0JCQkJRFJNSUQoY3J0Yyks IGksCj4gLQkJCQljc3RhdGUtPnVzZXJfcm9pX2xpc3Qucm9pW2ldLngxLAo+IC0JCQkJY3N0YXRl LT51c2VyX3JvaV9saXN0LnJvaVtpXS55MSwKPiAtCQkJCWNzdGF0ZS0+dXNlcl9yb2lfbGlzdC5y b2lbaV0ueDIsCj4gLQkJCQljc3RhdGUtPnVzZXJfcm9pX2xpc3Qucm9pW2ldLnkyKTsKPiAtCX0K PiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgX2RwdV9jcnRjX3NldHVw X2lzXzNkbXV4X2RzYyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+IC17Cj4gLQlpbnQg aTsKPiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwo+IC0JYm9vbCBpc18zZG11eF9k c2MgPSBmYWxzZTsKPiAtCj4gLQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7Cj4g LQo+IC0JZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+IC0J CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uID0gY3N0YXRlLT5jb25uZWN0b3JzW2ldOwo+IC0K PiAtCQlpZiAoZHB1X2Nvbm5lY3Rvcl9nZXRfdG9wb2xvZ3lfbmFtZShjb25uKSA9PQo+IC0JCQkJ RFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFXzNETUVSR0VfRFNDKQo+IC0JCQlpc18zZG11eF9kc2Mg PSB0cnVlOwo+IC0JfQo+IC0KPiAtCXJldHVybiBpc18zZG11eF9kc2M7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBpbnQgX2RwdV9jcnRjX3NldF9jcnRjX3JvaShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4g LQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm47Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsK PiAtCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Cj4gLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUg KmNydGNfc3RhdGU7Cj4gLQlzdHJ1Y3QgZHB1X3JlY3QgKmNydGNfcm9pOwo+IC0JaW50IGksIG51 bV9hdHRhY2hlZF9jb25ucyA9IDA7Cj4gLQo+IC0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkKPiAtCQly ZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwo+IC0J Y3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAtCWNydGNfcm9pID0gJmNy dGNfc3RhdGUtPmNydGNfcm9pOwo+IC0KPiAtCWZvcl9lYWNoX29sZF9jb25uZWN0b3JfaW5fc3Rh dGUoc3RhdGUtPnN0YXRlLCBjb25uLCBjb25uX3N0YXRlLCBpKSB7Cj4gLQkJc3RydWN0IGRwdV9j b25uZWN0b3Jfc3RhdGUgKmRwdV9jb25uX3N0YXRlOwo+IC0KPiAtCQlpZiAoIWNvbm5fc3RhdGUg fHwgY29ubl9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJaWYg KG51bV9hdHRhY2hlZF9jb25ucykgewo+IC0JCQlEUFVfRVJST1IoCj4gLQkJCQkiY3J0YyVkOiB1 bnN1cHBvcnRlZDogcm9pIG9uIGNydGMgdy8gPjEgY29ubmVjdG9yc1xuIiwKPiAtCQkJCQlEUk1J RChjcnRjKSk7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0KPiAtCQkrK251bV9hdHRhY2hl ZF9jb25uczsKPiAtCj4gLQkJZHB1X2Nvbm5fc3RhdGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRl KGNvbm5fc3RhdGUpOwo+IC0KPiAtCQkvKgo+IC0JCSAqIGN1cnJlbnQgZHJpdmVyIG9ubHkgc3Vw cG9ydHMgc2FtZSBjb25uZWN0b3IgYW5kIGNydGMgc2l6ZSwKPiAtCQkgKiBidXQgaWYgc3VwcG9y dCBmb3IgZGlmZmVyZW50IHNpemVzIGlzIGFkZGVkLCBkcml2ZXIgbmVlZHMKPiAtCQkgKiB0byBj aGVjayB0aGUgY29ubmVjdG9yIHJvaSBoZXJlIHRvIG1ha2Ugc3VyZSBpcyBmdWxsIHNjcmVlbgo+ IC0JCSAqIGZvciBkc2MgM2QtbXV4IHRvcG9sb2d5IHRoYXQgZG9lc24ndCBzdXBwb3J0IHBhcnRp YWwgdXBkYXRlLgo+IC0JCSAqLwo+IC0JCWlmIChtZW1jbXAoJmRwdV9jb25uX3N0YXRlLT5yb2lz LCAmY3J0Y19zdGF0ZS0+dXNlcl9yb2lfbGlzdCwKPiAtCQkJCXNpemVvZihjcnRjX3N0YXRlLT51 c2VyX3JvaV9saXN0KSkpIHsKPiAtCQkJRFBVX0VSUk9SKCIlczogY3J0YyAtPiBjb25uIHJvaSBz Y2FsaW5nIHVuc3VwcG9ydGVkXG4iLAo+IC0JCQkJCWRwdV9jcnRjLT5uYW1lKTsKPiAtCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWRwdV9rbXNfcmVjdF9tZXJnZV9yZWN0 YW5nbGVzKCZjcnRjX3N0YXRlLT51c2VyX3JvaV9saXN0LCBjcnRjX3JvaSk7Cj4gLQo+IC0JRFBV X0RFQlVHKCIlczogY3J0YyByb2kgKCVkLCVkLCVkLCVkKVxuIiwgZHB1X2NydGMtPm5hbWUsCj4g LQkJCWNydGNfcm9pLT54LCBjcnRjX3JvaS0+eSwgY3J0Y19yb2ktPncsIGNydGNfcm9pLT5oKTsK PiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBfZHB1X2NydGNfY2hlY2tf YXV0b3JlZnJlc2goc3RydWN0IGRybV9jcnRjICpjcnRjLAo+IC0JCXN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Cj4gLQlzdHJ1 Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubjsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwo+IC0JaW50 IGk7Cj4gLQo+IC0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAt Cj4gLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwo+IC0JY3J0Y19zdGF0ZSA9IHRvX2Rw dV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAtCj4gLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoJmNy dGNfc3RhdGUtPmNydGNfcm9pKSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBwYXJ0aWFsIHVw ZGF0ZSBhY3RpdmUsIGNoZWNrIGlmIGF1dG9yZWZyZXNoIGlzIGFsc28gcmVxdWVzdGVkICovCj4g LQlmb3JfZWFjaF9vbGRfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLT5zdGF0ZSwgY29ubiwgY29u bl9zdGF0ZSwgaSkgewo+IC0JCXVpbnQ2NF90IGF1dG9yZWZyZXNoOwo+IC0KPiAtCQlpZiAoIWNv bm5fc3RhdGUgfHwgY29ubl9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQo+IC0JCQljb250aW51ZTsKPiAt Cj4gLQkJYXV0b3JlZnJlc2ggPSBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eShjb25uX3N0YXRl LAo+IC0JCQkJQ09OTkVDVE9SX1BST1BfQVVUT1JFRlJFU0gpOwo+IC0JCWlmIChhdXRvcmVmcmVz aCkgewo+IC0JCQlEUFVfRVJST1IoCj4gLQkJCQkiJXM6IGF1dG9yZWZyZXNoICYgcGFydGlhbCBj cnRjIHJvaSBpbmNvbXBhdGlibGUgJWxsdVxuIiwKPiAtCQkJCQlkcHVfY3J0Yy0+bmFtZSwgYXV0 b3JlZnJlc2gpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgX2RwdV9jcnRjX3NldF9sbV9yb2koc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+IC0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsIGludCBs bV9pZHgpCj4gLXsKPiAtCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Cj4gLQlzdHJ1Y3QgZHB1 X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmNydGNf cm9pOwo+IC0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpsbV9ib3VuZHM7Cj4gLQlzdHJ1Y3QgZHB1 X3JlY3QgKmxtX3JvaTsKPiAtCj4gLQlpZiAoIWNydGMgfHwgIXN0YXRlIHx8IGxtX2lkeCA+PSBB UlJBWV9TSVpFKGNydGNfc3RhdGUtPmxtX2JvdW5kcykpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4g LQo+IC0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiAtCWNydGNfc3RhdGUgPSB0b19k cHVfY3J0Y19zdGF0ZShzdGF0ZSk7Cj4gLQljcnRjX3JvaSA9ICZjcnRjX3N0YXRlLT5jcnRjX3Jv aTsKPiAtCWxtX2JvdW5kcyA9ICZjcnRjX3N0YXRlLT5sbV9ib3VuZHNbbG1faWR4XTsKPiAtCWxt X3JvaSA9ICZjcnRjX3N0YXRlLT5sbV9yb2lbbG1faWR4XTsKPiAtCj4gLQlpZiAoZHB1X2ttc19y ZWN0X2lzX251bGwoY3J0Y19yb2kpKQo+IC0JCW1lbWNweShsbV9yb2ksIGxtX2JvdW5kcywgc2l6 ZW9mKCpsbV9yb2kpKTsKPiAtCWVsc2UKPiAtCQlkcHVfa21zX3JlY3RfaW50ZXJzZWN0KGNydGNf cm9pLCBsbV9ib3VuZHMsIGxtX3JvaSk7Cj4gLQo+IC0JRFBVX0RFQlVHKCIlczogbG0lZCByb2kg KCVkLCVkLCVkLCVkKVxuIiwgZHB1X2NydGMtPm5hbWUsIGxtX2lkeCwKPiAtCQkJbG1fcm9pLT54 LCBsbV9yb2ktPnksIGxtX3JvaS0+dywgbG1fcm9pLT5oKTsKPiAtCj4gLQkvKgo+IC0JICogcGFy dGlhbCB1cGRhdGUgaXMgbm90IHN1cHBvcnRlZCB3aXRoIDNkbXV4IGRzYyBvciBkZXN0IHNjYWxl ci4KPiAtCSAqIGhlbmNlLCBjcnRjIHJvaSBtdXN0IG1hdGNoIHRoZSBtaXhlciBkaW1lbnNpb25z Lgo+IC0JICovCj4gLQlpZiAoY3J0Y19zdGF0ZS0+bnVtX2RzX2VuYWJsZWQgfHwKPiAtCQlfZHB1 X2NydGNfc2V0dXBfaXNfM2RtdXhfZHNjKHN0YXRlKSkgewo+IC0JCWlmIChtZW1jbXAobG1fcm9p LCBsbV9ib3VuZHMsIHNpemVvZihzdHJ1Y3QgZHB1X3JlY3QpKSkgewo+IC0JCQlEUFVfRVJST1Io IlVuc3VwcG9ydGVkOiBEZXN0IHNjYWxlci8zZCBtdXggRFNDICsgUFVcbiIpOwo+IC0JCQlyZXR1 cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JLyogaWYgYW55IGRpbWVuc2lvbiBpcyB6 ZXJvLCBjbGVhciBhbGwgZGltZW5zaW9ucyBmb3IgY2xhcml0eSAqLwo+IC0JaWYgKGRwdV9rbXNf cmVjdF9pc19udWxsKGxtX3JvaSkpCj4gLQkJbWVtc2V0KGxtX3JvaSwgMCwgc2l6ZW9mKCpsbV9y b2kpKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHUzMiBfZHB1X2NydGNf Z2V0X2Rpc3BsYXlzX2FmZmVjdGVkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQlzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRj Owo+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0JdTMyIGRpc3BfYml0 bWFzayA9IDA7Cj4gLQlpbnQgaTsKPiAtCj4gLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMp Owo+IC0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAtCj4gLQkvKiBw aW5ncG9uZyBzcGxpdDogb25lIFJPSSwgb25lIExNLCB0d28gcGh5c2ljYWwgZGlzcGxheXMgKi8K PiAtCWlmIChjcnRjX3N0YXRlLT5pc19wcHNwbGl0KSB7Cj4gLQkJdTMyIGxtX3NwbGl0X3dpZHRo ID0gY3J0Y19zdGF0ZS0+bG1fYm91bmRzWzBdLncgLyAyOwo+IC0JCXN0cnVjdCBkcHVfcmVjdCAq cm9pID0gJmNydGNfc3RhdGUtPmxtX3JvaVswXTsKPiAtCj4gLQkJaWYgKGRwdV9rbXNfcmVjdF9p c19udWxsKHJvaSkpCj4gLQkJCWRpc3BfYml0bWFzayA9IDA7Cj4gLQkJZWxzZSBpZiAoKHUzMily b2ktPnggKyAodTMyKXJvaS0+dyA8PSBsbV9zcGxpdF93aWR0aCkKPiAtCQkJZGlzcF9iaXRtYXNr ID0gQklUKDApOwkJLyogbGVmdCBvbmx5ICovCj4gLQkJZWxzZSBpZiAocm9pLT54ID49IGxtX3Nw bGl0X3dpZHRoKQo+IC0JCQlkaXNwX2JpdG1hc2sgPSBCSVQoMSk7CQkvKiByaWdodCBvbmx5ICov Cj4gLQkJZWxzZQo+IC0JCQlkaXNwX2JpdG1hc2sgPSBCSVQoMCkgfCBCSVQoMSk7IC8qIGxlZnQg YW5kIHJpZ2h0ICovCj4gLQl9IGVsc2Ugewo+IC0JCWZvciAoaSA9IDA7IGkgPCBkcHVfY3J0Yy0+ bnVtX21peGVyczsgaSsrKSB7Cj4gLQkJCWlmICghZHB1X2ttc19yZWN0X2lzX251bGwoJmNydGNf c3RhdGUtPmxtX3JvaVtpXSkpCj4gLQkJCQlkaXNwX2JpdG1hc2sgfD0gQklUKGkpOwo+IC0JCX0K PiAtCX0KPiAtCj4gLQlEUFVfREVCVUcoImFmZmVjdGVkIGRpc3BsYXlzIDB4JXhcbiIsIGRpc3Bf Yml0bWFzayk7Cj4gLQo+IC0JcmV0dXJuIGRpc3BfYml0bWFzazsKPiAtfQo+IC0KPiAtc3RhdGlj IGludCBfZHB1X2NydGNfY2hlY2tfcm9pc19jZW50ZXJlZF9hbmRfc3ltbWV0cmljKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+IC17Cj4g LQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwo+IC0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpyb2lbQ1JUQ19EVUFMX01JWEVS U107Cj4gLQo+IC0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAt Cj4gLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwo+IC0JY3J0Y19zdGF0ZSA9IHRvX2Rw dV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAtCj4gLQlpZiAoZHB1X2NydGMtPm51bV9taXhlcnMgPiBD UlRDX0RVQUxfTUlYRVJTKSB7Cj4gLQkJRFBVX0VSUk9SKCIlczogdW5zdXBwb3J0ZWQgbnVtYmVy IG9mIG1peGVyczogJWRcbiIsCj4gLQkJCQlkcHVfY3J0Yy0+bmFtZSwgZHB1X2NydGMtPm51bV9t aXhlcnMpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBJZiB1 c2luZyBwaW5ncG9uZyBzcGxpdDogb25lIFJPSSwgb25lIExNLCB0d28gcGh5c2ljYWwgZGlzcGxh eXMKPiAtCSAqIHRoZW4gdGhlIFJPSSBtdXN0IGJlIGNlbnRlcmVkIG9uIHRoZSBwYW5lbCBzcGxp dCBib3VuZGFyeSBhbmQKPiAtCSAqIGJlIG9mIGVxdWFsIHdpZHRoIGFjcm9zcyB0aGUgc3BsaXQu Cj4gLQkgKi8KPiAtCWlmIChjcnRjX3N0YXRlLT5pc19wcHNwbGl0KSB7Cj4gLQkJdTE2IHBhbmVs X3NwbGl0X3dpZHRoOwo+IC0JCXUzMiBkaXNwbGF5X21hc2s7Cj4gLQo+IC0JCXJvaVswXSA9ICZj cnRjX3N0YXRlLT5sbV9yb2lbMF07Cj4gLQo+IC0JCWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbChy b2lbMF0pKQo+IC0JCQlyZXR1cm4gMDsKPiAtCj4gLQkJZGlzcGxheV9tYXNrID0gX2RwdV9jcnRj X2dldF9kaXNwbGF5c19hZmZlY3RlZChjcnRjLCBzdGF0ZSk7Cj4gLQkJaWYgKGRpc3BsYXlfbWFz ayAhPSAoQklUKDApIHwgQklUKDEpKSkKPiAtCQkJcmV0dXJuIDA7Cj4gLQo+IC0JCXBhbmVsX3Nw bGl0X3dpZHRoID0gY3J0Y19zdGF0ZS0+bG1fYm91bmRzWzBdLncgLyAyOwo+IC0JCWlmIChyb2lb MF0tPnggKyByb2lbMF0tPncgLyAyICE9IHBhbmVsX3NwbGl0X3dpZHRoKSB7Cj4gLQkJCURQVV9F UlJPUigiJXM6IHJvaSB4ICVkIHcgJWQgc3BsaXQgJWRcbiIsCj4gLQkJCQkJZHB1X2NydGMtPm5h bWUsIHJvaVswXS0+eCwgcm9pWzBdLT53LAo+IC0JCQkJCXBhbmVsX3NwbGl0X3dpZHRoKTsKPiAt CQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0KPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4g LQkvKgo+IC0JICogT24gY2VydGFpbiBIVywgaWYgdXNpbmcgMiBMTSwgUk9JcyBtdXN0IGJlIHNw bGl0IGV2ZW5seSBiZXR3ZWVuIHRoZQo+IC0JICogTE1zIGFuZCBiZSBvZiBlcXVhbCB3aWR0aC4K PiAtCSAqLwo+IC0JaWYgKGRwdV9jcnRjLT5udW1fbWl4ZXJzIDwgMikKPiAtCQlyZXR1cm4gMDsK PiAtCj4gLQlyb2lbMF0gPSAmY3J0Y19zdGF0ZS0+bG1fcm9pWzBdOwo+IC0Jcm9pWzFdID0gJmNy dGNfc3RhdGUtPmxtX3JvaVsxXTsKPiAtCj4gLQkvKiBpZiBvbmUgb2YgdGhlIHJvaSBpcyBudWxs IGl0J3MgYSBsZWZ0L3JpZ2h0LW9ubHkgdXBkYXRlICovCj4gLQlpZiAoZHB1X2ttc19yZWN0X2lz X251bGwocm9pWzBdKSB8fCBkcHVfa21zX3JlY3RfaXNfbnVsbChyb2lbMV0pKQo+IC0JCXJldHVy biAwOwo+IC0KPiAtCS8qIGNoZWNrIGxtIHJvaXMgYXJlIGVxdWFsIHdpZHRoICYgZmlyc3Qgcm9p IGVuZHMgYXQgMm5kIHJvaSAqLwo+IC0JaWYgKHJvaVswXS0+eCArIHJvaVswXS0+dyAhPSByb2lb MV0tPnggfHwgcm9pWzBdLT53ICE9IHJvaVsxXS0+dykgewo+IC0JCURQVV9FUlJPUigKPiAtCQkJ IiVzOiByb2lzIG5vdCBjZW50ZXJlZCBhbmQgc3ltbWV0cmljOiByb2kwIHggJWQgdyAlZCByb2kx IHggJWQgdyAlZFxuIiwKPiAtCQkJCWRwdV9jcnRjLT5uYW1lLCByb2lbMF0tPngsIHJvaVswXS0+ dywKPiAtCQkJCXJvaVsxXS0+eCwgcm9pWzFdLT53KTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAt CX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBfZHB1X2NydGNfY2hl Y2tfcGxhbmVzX3dpdGhpbl9jcnRjX3JvaShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9jcnRjICpkcHVf Y3J0YzsKPiAtCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAtCWNvbnN0IHN0 cnVjdCBkcHVfcmVjdCAqY3J0Y19yb2k7Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3Rh dGU7Cj4gLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKPiAtCj4gLQlpZiAoIWNydGMgfHwgIXN0 YXRlKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCS8qCj4gLQkgKiBSZWplY3QgY29tbWl0 IGlmIGEgUGxhbmUgQ1JUQyBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmYWxsIG91dHNpZGUKPiAt CSAqIHRoZSBwYXJ0aWFsIENSVEMgUk9JLiBMTSBvdXRwdXQgaXMgZGV0ZXJtaW5lZCB2aWEgY29u bmVjdG9yIFJPSXMsCj4gLQkgKiBpZiB0aGV5IGFyZSBzcGVjaWZpZWQsIG5vdCBQbGFuZSBDUlRD IFJPSXMuCj4gLQkgKi8KPiAtCj4gLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwo+IC0J Y3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKPiAtCWNydGNfcm9pID0gJmNy dGNfc3RhdGUtPmNydGNfcm9pOwo+IC0KPiAtCWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbChjcnRj X3JvaSkpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9l YWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgewo+IC0JCXN0cnVjdCBkcHVfcmVjdCBwbGFuZV9yb2ks IGludGVyc2VjdGlvbjsKPiAtCj4gLQkJcHN0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3Rh dGUoc3RhdGUtPnN0YXRlLCBwbGFuZSk7Cj4gLQkJaWYgKElTX0VSUl9PUl9OVUxMKHBzdGF0ZSkp IHsKPiAtCQkJaW50IHJjID0gUFRSX0VSUihwc3RhdGUpOwo+IC0KPiAtCQkJRFBVX0VSUk9SKCIl czogZmFpbGVkIHRvIGdldCBwbGFuZSVkIHN0YXRlLCAlZFxuIiwKPiAtCQkJCQlkcHVfY3J0Yy0+ bmFtZSwgcGxhbmUtPmJhc2UuaWQsIHJjKTsKPiAtCQkJcmV0dXJuIHJjOwo+IC0JCX0KPiAtCj4g LQkJcGxhbmVfcm9pLnggPSBwc3RhdGUtPmNydGNfeDsKPiAtCQlwbGFuZV9yb2kueSA9IHBzdGF0 ZS0+Y3J0Y195Owo+IC0JCXBsYW5lX3JvaS53ID0gcHN0YXRlLT5jcnRjX3c7Cj4gLQkJcGxhbmVf cm9pLmggPSBwc3RhdGUtPmNydGNfaDsKPiAtCQlkcHVfa21zX3JlY3RfaW50ZXJzZWN0KGNydGNf cm9pLCAmcGxhbmVfcm9pLCAmaW50ZXJzZWN0aW9uKTsKPiAtCQlpZiAoIWRwdV9rbXNfcmVjdF9p c19lcXVhbCgmcGxhbmVfcm9pLCAmaW50ZXJzZWN0aW9uKSkgewo+IC0JCQlEUFVfRVJST1IoCj4g LQkJCQkiJXM6IHBsYW5lJWQgY3J0YyByb2kgKCVkLCVkLCVkLCVkKSBvdXRzaWRlIGNydGMgcm9p ICglZCwlZCwlZCwlZClcbiIsCj4gLQkJCQkJZHB1X2NydGMtPm5hbWUsIHBsYW5lLT5iYXNlLmlk LAo+IC0JCQkJCXBsYW5lX3JvaS54LCBwbGFuZV9yb2kueSwKPiAtCQkJCQlwbGFuZV9yb2kudywg cGxhbmVfcm9pLmgsCj4gLQkJCQkJY3J0Y19yb2ktPngsIGNydGNfcm9pLT55LAo+IC0JCQkJCWNy dGNfcm9pLT53LCBjcnRjX3JvaS0+aCk7Cj4gLQkJCXJldHVybiAtRTJCSUc7Cj4gLQkJfQo+IC0J fQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IF9kcHVfY3J0Y19jaGVj a19yb2lzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAtCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KnN0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0JaW50IGxtX2lk eDsKPiAtCWludCByYzsKPiAtCj4gLQlpZiAoIWNydGMgfHwgIXN0YXRlKQo+IC0JCXJldHVybiAt RUlOVkFMOwo+IC0KPiAtCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Cj4gLQo+IC0JcmMg PSBfZHB1X2NydGNfc2V0X2NydGNfcm9pKGNydGMsIHN0YXRlKTsKPiAtCWlmIChyYykKPiAtCQly ZXR1cm4gcmM7Cj4gLQo+IC0JcmMgPSBfZHB1X2NydGNfY2hlY2tfYXV0b3JlZnJlc2goY3J0Yywg c3RhdGUpOwo+IC0JaWYgKHJjKQo+IC0JCXJldHVybiByYzsKPiAtCj4gLQlmb3IgKGxtX2lkeCA9 IDA7IGxtX2lkeCA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBsbV9pZHgrKykgewo+IC0JCXJjID0g X2RwdV9jcnRjX3NldF9sbV9yb2koY3J0Yywgc3RhdGUsIGxtX2lkeCk7Cj4gLQkJaWYgKHJjKQo+ IC0JCQlyZXR1cm4gcmM7Cj4gLQl9Cj4gLQo+IC0JcmMgPSBfZHB1X2NydGNfY2hlY2tfcm9pc19j ZW50ZXJlZF9hbmRfc3ltbWV0cmljKGNydGMsIHN0YXRlKTsKPiAtCWlmIChyYykKPiAtCQlyZXR1 cm4gcmM7Cj4gLQo+IC0JcmMgPSBfZHB1X2NydGNfY2hlY2tfcGxhbmVzX3dpdGhpbl9jcnRjX3Jv aShjcnRjLCBzdGF0ZSk7Cj4gLQlpZiAocmMpCj4gLQkJcmV0dXJuIHJjOwo+IC0KPiAtCXJldHVy biAwOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCBfZHB1X2NydGNfcHJvZ3JhbV9sbV9vdXRwdXRf cm9pKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgewo+ICAJc3RydWN0IGRwdV9jcnRjICpkcHVf Y3J0YzsKPiAgCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAtCWNvbnN0IHN0 cnVjdCBkcHVfcmVjdCAqbG1fcm9pOwo+IC0Jc3RydWN0IGRwdV9od19taXhlciAqaHdfbG07Cj4g IAlpbnQgbG1faWR4LCBsbV9ob3Jpel9wb3NpdGlvbjsKPiAgCj4gLQlpZiAoIWNydGMpCj4gLQkJ cmV0dXJuOwo+IC0KPiAgCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Cj4gIAljcnRjX3N0 YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ICAKPiAgCWxtX2hvcml6X3Bv c2l0aW9uID0gMDsKPiAgCWZvciAobG1faWR4ID0gMDsgbG1faWR4IDwgZHB1X2NydGMtPm51bV9t aXhlcnM7IGxtX2lkeCsrKSB7Cj4gKwkJY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpsbV9yb2kgPSAm Y3J0Y19zdGF0ZS0+bG1fYm91bmRzW2xtX2lkeF07Cj4gKwkJc3RydWN0IGRwdV9od19taXhlciAq aHdfbG0gPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfbG07Cj4gIAkJc3RydWN0IGRwdV9o d19taXhlcl9jZmcgY2ZnOwo+ICAKPiAtCQlsbV9yb2kgPSAmY3J0Y19zdGF0ZS0+bG1fcm9pW2xt X2lkeF07Cj4gLQkJaHdfbG0gPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfbG07Cj4gLQo+ IC0JCURQVV9FVlQzMihEUk1JRChjcnRjX3N0YXRlLT5iYXNlLmNydGMpLCBsbV9pZHgsCj4gLQkJ CWxtX3JvaS0+eCwgbG1fcm9pLT55LCBsbV9yb2ktPncsIGxtX3JvaS0+aCk7Cj4gLQo+ICAJCWlm IChkcHVfa21zX3JlY3RfaXNfbnVsbChsbV9yb2kpKQo+ICAJCQljb250aW51ZTsKPiAgCj4gLQkJ aHdfbG0tPmNmZy5vdXRfd2lkdGggPSBsbV9yb2ktPnc7Cj4gLQkJaHdfbG0tPmNmZy5vdXRfaGVp Z2h0ID0gbG1fcm9pLT5oOwo+IC0JCWh3X2xtLT5jZmcucmlnaHRfbWl4ZXIgPSBsbV9ob3Jpel9w b3NpdGlvbjsKPiAtCj4gIAkJY2ZnLm91dF93aWR0aCA9IGxtX3JvaS0+dzsKPiAgCQljZmcub3V0 X2hlaWdodCA9IGxtX3JvaS0+aDsKPiAgCQljZmcucmlnaHRfbWl4ZXIgPSBsbV9ob3Jpel9wb3Np dGlvbisrOwo+IEBAIC0xMzYxLDcwICs5MjAsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxl bmRfc2V0dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJCQkJCW1peGVyLCAmY3N0 YXRlLT5kaW1fbGF5ZXJbaV0pOwo+ICAJfQo+ICAKPiAtCV9kcHVfY3J0Y19wcm9ncmFtX2xtX291 dHB1dF9yb2koY3J0Yyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zd2FwX21p eGVyc19mb3JfcmlnaHRfcGFydGlhbF91cGRhdGUoCj4gLQkJc3RydWN0IGRybV9jcnRjICpjcnRj KQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwo+IC0Jc3RydWN0IGRwdV9jcnRj X3N0YXRlICpjc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmM7Cj4gLQlib29s IGlzX3JpZ2h0X29ubHk7Cj4gLQlib29sIGVuY29kZXJfaW5fZHNjX21lcmdlID0gZmFsc2U7Cj4g LQo+IC0JaWYgKCFjcnRjIHx8ICFjcnRjLT5zdGF0ZSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZHB1 X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKPiAtCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRl KGNydGMtPnN0YXRlKTsKPiAtCj4gLQlpZiAoZHB1X2NydGMtPm51bV9taXhlcnMgIT0gQ1JUQ19E VUFMX01JWEVSUykKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZHJtX2Zvcl9lYWNoX2VuY29kZXIoZHJt X2VuYywgY3J0Yy0+ZGV2KSB7Cj4gLQkJaWYgKGRybV9lbmMtPmNydGMgPT0gY3J0YyAmJgo+IC0J CQkJZHB1X2VuY29kZXJfaXNfZHNjX21lcmdlKGRybV9lbmMpKSB7Cj4gLQkJCWVuY29kZXJfaW5f ZHNjX21lcmdlID0gdHJ1ZTsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCS8qKgo+ IC0JICogRm9yIHJpZ2h0LW9ubHkgcGFydGlhbCB1cGRhdGUgd2l0aCBEU0MgbWVyZ2UsIHdlIHN3 YXAgTE0wICYgTE0xLgo+IC0JICogVGhpcyBpcyBkdWUgdG8gdHdvIHJlYXNvbnM6Cj4gLQkgKiAt IE9uIDg5OTYsIHRoZXJlIGlzIGEgRFNDIEhXIHJlcXVpcmVtZW50IHRoYXQgaW4gRFNDIE1lcmdl IE1vZGUsCj4gLQkgKiAgIHRoZSBsZWZ0IERTQyBtdXN0IGJlIHVzZWQsIHJpZ2h0IERTQyBjYW5u b3QgYmUgdXNlZCBhbG9uZS4KPiAtCSAqICAgRm9yIHJpZ2h0LW9ubHkgcGFydGlhbCB1cGRhdGUs IHRoaXMgbWVhbnMgc3dhcCBsYXllciBtaXhlcnMgdG8gbWFwCj4gLQkgKiAgIExlZnQgTE0gdG8g UmlnaHQgSU5URi4gT24gbGF0ZXIgSFcgdGhpcyB3YXMgcmVsYXhlZC4KPiAtCSAqIC0gSW4gRFND IE1lcmdlIG1vZGUsIHRoZSBwaHlzaWNhbCBlbmNvZGVyIGhhcyBhbHJlYWR5IHJlZ2lzdGVyZWQK PiAtCSAqICAgUFAwIGFzIHRoZSBtYXN0ZXIsIHRvIHN3aXRjaCB0byByaWdodC1vbmx5IHdlIHdv dWxkIGhhdmUgdG8KPiAtCSAqICAgcmVwcm9ncmFtIHRvIGJlIGRyaXZlbiBieSBQUDEgaW5zdGVh ZC4KPiAtCSAqIFRvIHN1cHBvcnQgYm90aCBjYXNlcywgd2UgcHJlZmVyIHRvIHN1cHBvcnQgdGhl IG1peGVyIHN3YXAgc29sdXRpb24uCj4gLQkgKi8KPiAtCWlmICghZW5jb2Rlcl9pbl9kc2NfbWVy Z2UpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlzX3JpZ2h0X29ubHkgPSBkcHVfa21zX3JlY3RfaXNf bnVsbCgmY3N0YXRlLT5sbV9yb2lbMF0pICYmCj4gLQkJCSFkcHVfa21zX3JlY3RfaXNfbnVsbCgm Y3N0YXRlLT5sbV9yb2lbMV0pOwo+IC0KPiAtCWlmIChpc19yaWdodF9vbmx5ICYmICFkcHVfY3J0 Yy0+bWl4ZXJzX3N3YXBwZWQpIHsKPiAtCQkvKiByaWdodC1vbmx5IHVwZGF0ZSBzd2FwIG1peGVy cyAqLwo+IC0JCXN3YXAoZHB1X2NydGMtPm1peGVyc1swXSwgZHB1X2NydGMtPm1peGVyc1sxXSk7 Cj4gLQkJZHB1X2NydGMtPm1peGVyc19zd2FwcGVkID0gdHJ1ZTsKPiAtCX0gZWxzZSBpZiAoIWlz X3JpZ2h0X29ubHkgJiYgZHB1X2NydGMtPm1peGVyc19zd2FwcGVkKSB7Cj4gLQkJLyogbGVmdC1v bmx5IG9yIGZ1bGwgdXBkYXRlLCBzd2FwIGJhY2sgKi8KPiAtCQlzd2FwKGRwdV9jcnRjLT5taXhl cnNbMF0sIGRwdV9jcnRjLT5taXhlcnNbMV0pOwo+IC0JCWRwdV9jcnRjLT5taXhlcnNfc3dhcHBl ZCA9IGZhbHNlOwo+IC0JfQo+IC0KPiAtCURQVV9ERUJVRygiJXM6IHJpZ2h0X29ubHkgJWQgc3dh cHBlZCAlZCwgbWl4MC0+bG0lZCwgbWl4MS0+bG0lZFxuIiwKPiAtCQkJZHB1X2NydGMtPm5hbWUs IGlzX3JpZ2h0X29ubHksIGRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCwKPiAtCQkJZHB1X2NydGMt Pm1peGVyc1swXS5od19sbS0+aWR4IC0gTE1fMCwKPiAtCQkJZHB1X2NydGMtPm1peGVyc1sxXS5o d19sbS0+aWR4IC0gTE1fMCk7Cj4gLQlEUFVfRVZUMzIoRFJNSUQoY3J0YyksIGlzX3JpZ2h0X29u bHksIGRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCwKPiAtCQkJZHB1X2NydGMtPm1peGVyc1swXS5o d19sbS0+aWR4IC0gTE1fMCwKPiAtCQkJZHB1X2NydGMtPm1peGVyc1sxXS5od19sbS0+aWR4IC0g TE1fMCk7Cj4gKwkgX2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShjcnRjKTsKPiAgfQo+ ICAKPiAgLyoqCj4gQEAgLTE0NzIsMjcgKzk2OCwxNSBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNf YmxlbmRfc2V0dXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJCQlsbS0+b3BzLmNsZWFyX2Rp bV9sYXllcihsbSk7Cj4gIAl9Cj4gIAo+IC0JX2RwdV9jcnRjX3N3YXBfbWl4ZXJzX2Zvcl9yaWdo dF9wYXJ0aWFsX3VwZGF0ZShjcnRjKTsKPiAtCj4gIAkvKiBpbml0aWFsaXplIHN0YWdlIGNmZyAq Lwo+ICAJbWVtc2V0KCZkcHVfY3J0Yy0+c3RhZ2VfY2ZnLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9o d19zdGFnZV9jZmcpKTsKPiAgCj4gIAlfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIoY3J0Yywg ZHB1X2NydGMsIG1peGVyKTsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9t aXhlcnM7IGkrKykgewo+IC0JCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqbG1fcm9pID0gJmRwdV9j cnRjX3N0YXRlLT5sbV9yb2lbaV07Cj4gLQo+ICAJCWN0bCA9IG1peGVyW2ldLmh3X2N0bDsKPiAg CQlsbSA9IG1peGVyW2ldLmh3X2xtOwo+ICAKPiAtCQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwo bG1fcm9pKSkgewo+IC0JCQlEUFVfREVCVUcoCj4gLQkJCQkiJXM6IGxtJWQgbGVhdmUgY3RsJWQg bWFzayAwIHNpbmNlIG51bGwgcm9pXG4iLAo+IC0JCQkJCWRwdV9jcnRjLT5uYW1lLCBsbS0+aWR4 IC0gTE1fMCwKPiAtCQkJCQljdGwtPmlkeCAtIENUTF8wKTsKPiAtCQkJY29udGludWU7Cj4gLQkJ fQo+IC0KPiAgCQlsbS0+b3BzLnNldHVwX2FscGhhX291dChsbSwgbWl4ZXJbaV0ubWl4ZXJfb3Bf bW9kZSk7Cj4gIAo+ICAJCW1peGVyW2ldLmZsdXNoX21hc2sgfD0gY3RsLT5vcHMuZ2V0X2JpdG1h c2tfbWl4ZXIoY3RsLAo+IEBAIC0xNTEwLDggKzk5NCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0 Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAkJY3RsLT5vcHMuc2V0dXBf YmxlbmRzdGFnZShjdGwsIG1peGVyW2ldLmh3X2xtLT5pZHgsCj4gIAkJCSZkcHVfY3J0Yy0+c3Rh Z2VfY2ZnKTsKPiAgCX0KPiAtCj4gLQlfZHB1X2NydGNfcHJvZ3JhbV9sbV9vdXRwdXRfcm9pKGNy dGMpOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMjY2NCwxNCArMjE0Niw5IEBAIHN0YXRpYyB2b2lk IF9kcHVfY3J0Y19zZXR1cF9sbV9ib3VuZHMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJCWNz dGF0ZS0+bG1fYm91bmRzW2ldLncgPSBjcnRjX3NwbGl0X3dpZHRoOwo+ICAJCWNzdGF0ZS0+bG1f Ym91bmRzW2ldLmggPQo+ICAJCQlkcHVfY3J0Y19nZXRfbWl4ZXJfaGVpZ2h0KGRwdV9jcnRjLCBj c3RhdGUsIGFkal9tb2RlKTsKPiAtCQltZW1jcHkoJmNzdGF0ZS0+bG1fcm9pW2ldLCAmY3N0YXRl LT5sbV9ib3VuZHNbaV0sCj4gLQkJCQlzaXplb2YoY3N0YXRlLT5sbV9yb2lbaV0pKTsKPiAgCQlE UFVfRVZUMzJfVkVSQk9TRShEUk1JRChjcnRjKSwgaSwKPiAgCQkJCWNzdGF0ZS0+bG1fYm91bmRz W2ldLngsIGNzdGF0ZS0+bG1fYm91bmRzW2ldLnksCj4gIAkJCQljc3RhdGUtPmxtX2JvdW5kc1tp XS53LCBjc3RhdGUtPmxtX2JvdW5kc1tpXS5oKTsKPiAtCQlEUFVfREVCVUcoIiVzOiBsbSVkIGJu ZCZyb2kgKCVkLCVkLCVkLCVkKVxuIiwgZHB1X2NydGMtPm5hbWUsIGksCj4gLQkJCQljc3RhdGUt PmxtX3JvaVtpXS54LCBjc3RhdGUtPmxtX3JvaVtpXS55LAo+IC0JCQkJY3N0YXRlLT5sbV9yb2lb aV0udywgY3N0YXRlLT5sbV9yb2lbaV0uaCk7Cj4gIAl9Cj4gIAo+ICAJZHJtX21vZGVfZGVidWdf cHJpbnRtb2RlbGluZShhZGpfbW9kZSk7Cj4gQEAgLTMwMTksOCArMjQ5Niw2IEBAIHZvaWQgZHB1 X2NydGNfY29tbWl0X2tpY2tvZmYoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJCSAqIElmIHNv LCBpdCBtYXkgZGVsYXkgYW5kIGZsdXNoIGF0IGFuIGlycSBldmVudCAoZS5nLiBwcGRvbmUpCj4g IAkJICovCj4gIAkJcGFyYW1zLmlubGluZV9yb3RhdGVfcHJlZmlsbCA9IGNzdGF0ZS0+c2J1Zl9w cmVmaWxsX2xpbmU7Cj4gLQkJcGFyYW1zLmFmZmVjdGVkX2Rpc3BsYXlzID0gX2RwdV9jcnRjX2dl dF9kaXNwbGF5c19hZmZlY3RlZChjcnRjLAo+IC0JCQkJY3J0Yy0+c3RhdGUpOwo+ICAJCWRwdV9l bmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoZW5jb2RlciwgJnBhcmFtcyk7Cj4gIAo+ICAJCS8q Cj4gQEAgLTM5MzEsMTIgKzM0MDYsNiBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19jaGVj ayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAkJfQo+ICAJfQo+ICAKPiAtCXJjID0gX2RwdV9j cnRjX2NoZWNrX3JvaXMoY3J0Yywgc3RhdGUpOwo+IC0JaWYgKHJjKSB7Cj4gLQkJRFBVX0VSUk9S KCJjcnRjJWQgZmFpbGVkIHJvaSBjaGVjayAlZFxuIiwgY3J0Yy0+YmFzZS5pZCwgcmMpOwo+IC0J CWdvdG8gZW5kOwo+IC0JfQo+IC0KPiAgZW5kOgo+ICAJX2RwdV9jcnRjX3JwX2ZyZWVfdW51c2Vk KCZjc3RhdGUtPnJwKTsKPiAgCXJldHVybiByYzsKPiBAQCAtNDA2Niw5ICszNTM1LDYgQEAgc3Rh dGljIHZvaWQgZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiAgCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZv LCAiY2FwYWJpbGl0aWVzIiwKPiAgCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwgQ1JUQ19QUk9Q X0lORk8pOwo+ICAKPiAtCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0aWxlX3JhbmdlKCZkcHVf Y3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkiZHB1X2RybV9yb2lfdjEiLCAweDAsIDAsIH4wLCAw LCBDUlRDX1BST1BfUk9JX1YxKTsKPiAtCj4gIAlkcHVfa21zX2luZm9fcmVzZXQoaW5mbyk7Cj4g IAo+ICAJaWYgKGNhdGFsb2ctPmhhc19kaW1fbGF5ZXIpIHsKPiBAQCAtNDIxNywxMCArMzY4Myw2 IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCj4gIAkJCQlfZHB1X2NydGNfc2V0X2RpbV9sYXllcl92MShjc3RhdGUsCj4gIAkJ CQkJCQkodm9pZCBfX3VzZXIgKil2YWwpOwo+ICAJCQkJYnJlYWs7Cj4gLQkJCWNhc2UgQ1JUQ19Q Uk9QX1JPSV9WMToKPiAtCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRfcm9pX3YxKHN0YXRlLAo+IC0J CQkJCQkJKHZvaWQgX191c2VyICopdmFsKTsKPiAtCQkJCWJyZWFrOwo+ICAJCQljYXNlIENSVENf UFJPUF9ERVNUX1NDQUxFUjoKPiAgCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRfZGVzdF9zY2FsZXIo ZHB1X2NydGMsCj4gIAkJCQkJCWNzdGF0ZSwgKHZvaWQgX191c2VyICopdmFsKTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiBpbmRleCBiNjNkZjI0Li4xNWUzZWI2 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCj4gQEAgLTM0 NSwxMyArMzQ1LDggQEAgc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgewo+ICAgKiBAaXNfcHBzcGxp dCAgICA6IFdoZXRoZXIgY3VycmVudCB0b3BvbG9neSByZXF1aXJlcyBQUFNwbGl0IHNwZWNpYWwg aGFuZGxpbmcKPiAgICogQGJ3X2NvbnRyb2wgICAgOiB0cnVlIGlmIGJ3L2NsayBjb250cm9sbGVk IGJ5IGNvcmUgYncvY2xrIHByb3BlcnRpZXMKPiAgICogQGJ3X3NwbGl0X3ZvdGUgOiB0cnVlIGlm IGJ3IGNvbnRyb2xsZWQgYnkgbGxjYy9kcmFtIGJ3IHByb3BlcnRpZXMKPiAtICogQGNydGNfcm9p ICAgICAgOiBDdXJyZW50IENSVEMgUk9JLiBQb3NzaWJseSBzdWItcmVjdGFuZ2xlIG9mIG1vZGUu Cj4gLSAqICAgICAgICAgICAgICAgICAgT3JpZ2luIHRvcCBsZWZ0IG9mIENSVEMuCj4gICAqIEBs bV9ib3VuZHMgICAgIDogTE0gYm91bmRhcmllcyBiYXNlZCBvbiBjdXJyZW50IG1vZGUgZnVsbCBy ZXNvbHV0aW9uLCBubyBST0kuCj4gICAqICAgICAgICAgICAgICAgICAgT3JpZ2luIHRvcCBsZWZ0 IG9mIENSVEMuCj4gLSAqIEBsbV9yb2kgICAgICAgIDogQ3VycmVudCBMTSBST0ksIHBvc3NpYmx5 IHN1Yi1yZWN0YW5nbGUgb2YgbW9kZS4KPiAtICogICAgICAgICAgICAgICAgICBPcmlnaW4gdG9w IGxlZnQgb2YgQ1JUQy4KPiAtICogQHVzZXJfcm9pX2xpc3QgOiBMaXN0IG9mIHVzZXIncyByZXF1 ZXN0ZWQgUk9JcyBhcyBmcm9tIHNldCBwcm9wZXJ0eQo+ICAgKiBAcHJvcGVydHlfc3RhdGU6IExv Y2FsIHN0b3JhZ2UgZm9yIG1zbV9wcm9wIHByb3BlcnRpZXMKPiAgICogQHByb3BlcnR5X3ZhbHVl czogQ3VycmVudCBjcnRjIHByb3BlcnR5IHZhbHVlcwo+ICAgKiBAaW5wdXRfZmVuY2VfdGltZW91 dF9ucyA6IENhY2hlZCBpbnB1dCBmZW5jZSB0aW1lb3V0LCBpbiBucwo+IEBAIC0zNzYsMTAgKzM3 MSw3IEBAIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7Cj4gIAlib29sIGJ3X3NwbGl0X3ZvdGU7Cj4g IAo+ICAJYm9vbCBpc19wcHNwbGl0Owo+IC0Jc3RydWN0IGRwdV9yZWN0IGNydGNfcm9pOwo+ICAJ c3RydWN0IGRwdV9yZWN0IGxtX2JvdW5kc1tDUlRDX0RVQUxfTUlYRVJTXTsKPiAtCXN0cnVjdCBk cHVfcmVjdCBsbV9yb2lbQ1JUQ19EVUFMX01JWEVSU107Cj4gLQlzdHJ1Y3QgbXNtX3JvaV9saXN0 IHVzZXJfcm9pX2xpc3Q7Cj4gIAo+ICAJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSBwcm9wZXJ0 eV9zdGF0ZTsKPiAgCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW0NS VENfUFJPUF9DT1VOVF07Cj4gQEAgLTYwNSwxNCArNTk3LDQgQEAgaW50IGRwdV9jcnRjX3Jlc19h ZGQoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwgdTMyIHR5cGUsIHU2NCB0YWcsCj4gICAq Lwo+ICB2b2lkIGRwdV9jcnRjX3Jlc19wdXQoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwg dTMyIHR5cGUsIHU2NCB0YWcpOwo+ICAKPiAtLyoqCj4gLSAqIGRwdV9jcnRjX2dldF9jcnRjX3Jv aSAtIHJldHJpZXZlIHRoZSBjcnRjX3JvaSBmcm9tIHRoZSBnaXZlbiBzdGF0ZSBvYmplY3QKPiAt ICoJdXNlZCB0byBhbGxvdyB0aGUgcGxhbmVzIHRvIGFkanVzdCB0aGVpciBmaW5hbCBsbSBvdXRf eHkgdmFsdWUgaW4gdGhlCj4gLSAqCWNhc2Ugb2YgcGFydGlhbCB1cGRhdGUKPiAtICogQGNydGNf c3RhdGU6IFBvaW50ZXIgdG8gY3J0YyBzdGF0ZQo+IC0gKiBAY3J0Y19yb2k6IE91dHB1dCBwb2lu dGVyIHRvIGNydGMgcm9pIGluIHRoZSBnaXZlbiBzdGF0ZQo+IC0gKi8KPiAtdm9pZCBkcHVfY3J0 Y19nZXRfY3J0Y19yb2koc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPiAtCQljb25zdCBz dHJ1Y3QgZHB1X3JlY3QgKipjcnRjX3JvaSk7Cj4gLQo+ICAjZW5kaWYgLyogX0RQVV9DUlRDX0hf ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCj4gaW5k ZXggM2QxNjhmYTAuLjkxYjllMDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2VuY29kZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyLmMKPiBAQCAtMTk1LDggKzE5NSw2IEBAIGVudW0gZHB1X2VuY19yY19z dGF0ZXMgewo+ICAgKiBAdG9wb2xvZ3k6ICAgICAgICAgICAgICAgICAgIHRvcG9sb2d5IG9mIHRo ZSBkaXNwbGF5Cj4gICAqIEBtb2RlX3NldF9jb21wbGV0ZTogICAgICAgICAgZmxhZyB0byBpbmRp Y2F0ZSBtb2Rlc2V0IGNvbXBsZXRpb24KPiAgICogQHJzY19jb25maWc6CQkJcnNjIGNvbmZpZ3Vy YXRpb24gZm9yIGRpc3BsYXkgdnRvdGFsLCBmcHMsIGV0Yy4KPiAtICogQGN1cl9jb25uX3JvaToJ CWN1cnJlbnQgY29ubmVjdG9yIHJvaQo+IC0gKiBAcHJ2X2Nvbm5fcm9pOgkJcHJldmlvdXMgY29u bmVjdG9yIHJvaSB0byBvcHRpbWl6ZSBpZiB1bmNoYW5nZWQKPiAgICogQGlkbGVfdGltZW91dDoJ CWlkbGUgdGltZW91dCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMKPiAgICovCj4gIHN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0IHsKPiBAQCAtMjQzLDggKzI0MSw2IEBAIHN0cnVjdCBkcHVfZW5jb2Rl cl92aXJ0IHsKPiAgCWJvb2wgbW9kZV9zZXRfY29tcGxldGU7Cj4gIAo+ICAJc3RydWN0IGRwdV9y c2NfY21kX2NvbmZpZyByc2NfY29uZmlnOwo+IC0Jc3RydWN0IGRwdV9yZWN0IGN1cl9jb25uX3Jv aTsKPiAtCXN0cnVjdCBkcHVfcmVjdCBwcnZfY29ubl9yb2k7Cj4gIAo+ICAJdTMyIGlkbGVfdGlt ZW91dDsKPiAgfTsKPiBAQCAtODY4LDE0ICs4NjQsOCBAQCBzdGF0aWMgYm9vbCBfZHB1X2VuY29k ZXJfZHNjX2ljaF9yZXNldF9vdmVycmlkZV9uZWVkZWQoYm9vbCBwdV9lbiwKPiAgCj4gIHN0YXRp YyB2b2lkIF9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmcoc3RydWN0IGRwdV9od19kc2MgKmh3X2Rz YywKPiAgCQlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcCwgc3RydWN0IG1zbV9kaXNwbGF5 X2RzY19pbmZvICpkc2MsCj4gLQkJdTMyIGNvbW1vbl9tb2RlLCBib29sIGljaF9yZXNldCwgYm9v bCBlbmFibGUpCj4gKwkJdTMyIGNvbW1vbl9tb2RlLCBib29sIGljaF9yZXNldCkKPiAgewo+IC0J aWYgKCFlbmFibGUpIHsKPiAtCQlpZiAoaHdfcHAtPm9wcy5kaXNhYmxlX2RzYykKPiAtCQkJaHdf cHAtPm9wcy5kaXNhYmxlX2RzYyhod19wcCk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAgCWlm IChod19kc2MtPm9wcy5kc2NfY29uZmlnKQo+ICAJCWh3X2RzYy0+b3BzLmRzY19jb25maWcoaHdf ZHNjLCBkc2MsIGNvbW1vbl9tb2RlLCBpY2hfcmVzZXQpOwo+ICAKPiBAQCAtODg5LDQ2ICs4Nzks MjcgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhzdHJ1Y3QgZHB1X2h3 X2RzYyAqaHdfZHNjLAo+ICAJCWh3X3BwLT5vcHMuZW5hYmxlX2RzYyhod19wcCk7Cj4gIH0KPiAg Cj4gLXN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9nZXRfY29ubmVjdG9yX3JvaSgKPiAtCQlzdHJ1 Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKPiAtCQlzdHJ1Y3QgZHB1X3JlY3QgKm1lcmdl ZF9jb25uX3JvaSkKPiAtewo+IC0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmRybV9jb25uOwo+IC0J c3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGU7Cj4gLQo+IC0JaWYgKCFkcHVfZW5j IHx8ICFtZXJnZWRfY29ubl9yb2kpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWRybV9jb25uID0gZHB1 X2VuYy0+cGh5c19lbmNzWzBdLT5jb25uZWN0b3I7Cj4gLQo+IC0JaWYgKCFkcm1fY29ubiB8fCAh ZHJtX2Nvbm4tPnN0YXRlKQo+IC0JCXJldHVybjsKPiAtCj4gLQljX3N0YXRlID0gdG9fZHB1X2Nv bm5lY3Rvcl9zdGF0ZShkcm1fY29ubi0+c3RhdGUpOwo+IC0JZHB1X2ttc19yZWN0X21lcmdlX3Jl Y3RhbmdsZXMoJmNfc3RhdGUtPnJvaXMsIG1lcmdlZF9jb25uX3JvaSk7Cj4gLX0KPiAtCj4gIHN0 YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19uX2xtXzFfZW5jXzFfaW50ZihzdHJ1Y3QgZHB1X2Vu Y29kZXJfdmlydCAqZHB1X2VuYykKPiAgewo+ICAJaW50IHRoaXNfZnJhbWVfc2xpY2VzOwo+ICAJ aW50IGludGZfaXBfdywgZW5jX2lwX3c7Cj4gIAlpbnQgaWNoX3JlcywgZHNjX2NvbW1vbl9tb2Rl ID0gMDsKPiArCWludCByYyA9IDA7Cj4gIAo+ICAJc3RydWN0IGRwdV9od19waW5ncG9uZyAqaHdf cHAgPSBkcHVfZW5jLT5od19wcFswXTsKPiAgCXN0cnVjdCBkcHVfaHdfZHNjICpod19kc2MgPSBk cHVfZW5jLT5od19kc2NbMF07Cj4gIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqZW5jX21hc3Rl ciA9IGRwdV9lbmMtPmN1cl9tYXN0ZXI7Cj4gLQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKnJvaSA9 ICZkcHVfZW5jLT5jdXJfY29ubl9yb2k7Cj4gIAlzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8g KmRzYyA9Cj4gIAkJJmRwdV9lbmMtPm1vZGVfaW5mby5jb21wX2luZm8uZHNjX2luZm87Cj4gIAo+ IC0JaWYgKGRzYyA9PSBOVUxMIHx8IGh3X2RzYyA9PSBOVUxMIHx8IGh3X3BwID09IE5VTEwgfHwg IWVuY19tYXN0ZXIpIHsKPiAtCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJpbnZhbGlkIHBhcmFt cyBmb3IgRFNDXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiArCXJjID0gX2RwdV9lbmNvZGVy X2RzY191cGRhdGVfcGljX2RpbShkc2MsIGRzYy0+cGljX3dpZHRoLAo+ICsJCQlkc2MtPnBpY19o ZWlnaHQpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiZmFpbGVk IHRvIHVwZGF0ZSBEU0MgcGljIGRpbVxuIik7Cj4gKwkJcmV0dXJuIHJjOwo+ICAJfQo+ICAKPiAt CV9kcHVfZW5jb2Rlcl9kc2NfdXBkYXRlX3BpY19kaW0oZHNjLCByb2ktPncsIHJvaS0+aCk7Cj4g LQo+IC0JdGhpc19mcmFtZV9zbGljZXMgPSByb2ktPncgLyBkc2MtPnNsaWNlX3dpZHRoOwo+ICsJ dGhpc19mcmFtZV9zbGljZXMgPSBkc2MtPnBpY193aWR0aCAvIGRzYy0+c2xpY2Vfd2lkdGg7Cj4g IAlpbnRmX2lwX3cgPSB0aGlzX2ZyYW1lX3NsaWNlcyAqIGRzYy0+c2xpY2Vfd2lkdGg7Cj4gIAlf ZHB1X2VuY29kZXJfZHNjX3BjbGtfcGFyYW1fY2FsYyhkc2MsIGludGZfaXBfdyk7Cj4gIAo+IEBA IC05NDEsMjA1ICs5MTIsMTI2IEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19uX2xtXzFf ZW5jXzFfaW50ZihzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKPiAgCQlkc2NfY29t bW9uX21vZGUgPSBEU0NfTU9ERV9WSURFTzsKPiAgCj4gIAlEUFVfREVCVUdfRU5DKGRwdV9lbmMs ICJwaWNfdzogJWQgcGljX2g6ICVkIG1vZGU6JWRcbiIsCj4gLQkJcm9pLT53LCByb2ktPmgsIGRz Y19jb21tb25fbW9kZSk7Cj4gLQlEUFVfRVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJhc2UpLCByb2kt PncsIHJvaS0+aCwgZHNjX2NvbW1vbl9tb2RlKTsKPiArCQlkc2MtPnBpY193aWR0aCwgZHNjLT5w aWNfaGVpZ2h0LCBkc2NfY29tbW9uX21vZGUpOwo+ICsJRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5j LT5iYXNlKSwgZHNjLT5waWNfd2lkdGgsIGRzYy0+cGljX2hlaWdodCwKPiArCQkJZHNjX2NvbW1v bl9tb2RlKTsKPiAgCj4gIAlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGh3X2RzYywgaHdfcHAs IGRzYywgZHNjX2NvbW1vbl9tb2RlLAo+IC0JCQlpY2hfcmVzLCB0cnVlKTsKPiArCQkJaWNoX3Jl cyk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAtCj4gLXN0YXRpYyBpbnQgX2RwdV9lbmNvZGVy X2RzY18yX2xtXzJfZW5jXzJfaW50ZihzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywK PiAtCQlzdHJ1Y3QgZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgKnBhcmFtcykKPiArc3RhdGlj IGludCBfZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMl9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rl cl92aXJ0ICpkcHVfZW5jKQo+ICB7Cj4gIAlpbnQgdGhpc19mcmFtZV9zbGljZXM7Cj4gIAlpbnQg aW50Zl9pcF93LCBlbmNfaXBfdzsKPiAgCWludCBpY2hfcmVzLCBkc2NfY29tbW9uX21vZGU7Cj4g KwlpbnQgcmMgPSAwOwo+ICAKPiAgCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICplbmNfbWFzdGVy ID0gZHB1X2VuYy0+Y3VyX21hc3RlcjsKPiAtCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqcm9pID0g JmRwdV9lbmMtPmN1cl9jb25uX3JvaTsKPiAtCXN0cnVjdCBkcHVfaHdfZHNjICpod19kc2NbTUFY X0NIQU5ORUxTX1BFUl9FTkNdOwo+IC0Jc3RydWN0IGRwdV9od19waW5ncG9uZyAqaHdfcHBbTUFY X0NIQU5ORUxTX1BFUl9FTkNdOwo+IC0Jc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvIGRzY1tN QVhfQ0hBTk5FTFNfUEVSX0VOQ107Cj4gLQlib29sIGhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGU7 Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTX1BFUl9FTkM7 IGkrKykgewo+IC0JCWh3X3BwW2ldID0gZHB1X2VuYy0+aHdfcHBbaV07Cj4gLQkJaHdfZHNjW2ld ID0gZHB1X2VuYy0+aHdfZHNjW2ldOwo+ICsJc3RydWN0IGRwdV9od19kc2MgKmxfaHdfZHNjID0g ZHB1X2VuYy0+aHdfZHNjWzBdOwo+ICsJc3RydWN0IGRwdV9od19kc2MgKnJfaHdfZHNjID0gZHB1 X2VuYy0+aHdfZHNjWzFdOwo+ICsJc3RydWN0IGRwdV9od19waW5ncG9uZyAqbF9od19wcCA9IGRw dV9lbmMtPmh3X3BwWzBdOwo+ICsJc3RydWN0IGRwdV9od19waW5ncG9uZyAqcl9od19wcCA9IGRw dV9lbmMtPmh3X3BwWzFdOwo+ICsJc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MgPQo+ ICsJCSZkcHVfZW5jLT5tb2RlX2luZm8uY29tcF9pbmZvLmRzY19pbmZvOwo+ICAKPiAtCQlpZiAo IWh3X3BwW2ldIHx8ICFod19kc2NbaV0pIHsKPiAtCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAi aW52YWxpZCBwYXJhbXMgZm9yIERTQ1xuIik7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0JCX0K PiArCXJjID0gX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbShkc2MsCj4gKwkJCWRzYy0+ cGljX3dpZHRoICogZHB1X2VuYy0+ZGlzcGxheV9udW1fb2ZfaF90aWxlcywKPiArCQkJZHNjLT5w aWNfaGVpZ2h0KTsKPiArCWlmIChyYykgewo+ICsJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImZh aWxlZCB0byB1cGRhdGUgRFNDIHBpYyBkaW1cbiIpOwo+ICsJCXJldHVybiByYzsKPiAgCX0KPiAg Cj4gLQloYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlID0KPiAtCQkJaHdlaWdodF9sb25nKHBhcmFt cy0+YWZmZWN0ZWRfZGlzcGxheXMpID09IDE7Cj4gLQo+IC0JZHNjX2NvbW1vbl9tb2RlID0gMDsK PiAtCWlmICghaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSkKPiAtCQlkc2NfY29tbW9uX21vZGUg fD0gRFNDX01PREVfU1BMSVRfUEFORUw7Cj4gLQlpZiAoZW5jX21hc3Rlci0+aW50Zl9tb2RlID09 IElOVEZfTU9ERV9WSURFTykKPiAtCQlkc2NfY29tbW9uX21vZGUgfD0gRFNDX01PREVfVklERU87 Cj4gLQo+IC0JbWVtY3B5KCZkc2NbMF0sICZkcHVfZW5jLT5tb2RlX2luZm8uY29tcF9pbmZvLmRz Y19pbmZvLCBzaXplb2YoZHNjWzBdKSk7Cj4gLQltZW1jcHkoJmRzY1sxXSwgJmRwdV9lbmMtPm1v ZGVfaW5mby5jb21wX2luZm8uZHNjX2luZm8sIHNpemVvZihkc2NbMV0pKTsKPiAgCj4gLQkvKgo+ IC0JICogU2luY2UgYm90aCBEU0MgdXNlIHNhbWUgcGljIGRpbWVuc2lvbiwgc2V0IHNhbWUgcGlj IGRpbWVuc2lvbgo+IC0JICogdG8gYm90aCBEU0Mgc3RydWN0dXJlcy4KPiAtCSAqLwo+IC0JX2Rw dV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbSgmZHNjWzBdLCByb2ktPncsIHJvaS0+aCk7Cj4g LQlfZHB1X2VuY29kZXJfZHNjX3VwZGF0ZV9waWNfZGltKCZkc2NbMV0sIHJvaS0+dywgcm9pLT5o KTsKPiAtCj4gLQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHJvaS0+dyAvIGRzY1swXS5zbGljZV93aWR0 aDsKPiAtCWludGZfaXBfdyA9IHRoaXNfZnJhbWVfc2xpY2VzICogZHNjWzBdLnNsaWNlX3dpZHRo Owo+IC0KPiAtCWlmICghaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSkKPiAtCQlpbnRmX2lwX3cg Lz0gMjsKPiArCXRoaXNfZnJhbWVfc2xpY2VzID0gZHNjLT5waWNfd2lkdGggLyBkc2MtPnNsaWNl X3dpZHRoOwo+ICsJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGljZXMgKiBkc2MtPnNsaWNlX3dp ZHRoOwo+ICAKPiAtCS8qCj4gLQkgKiBJbiB0aGlzIHRvcG9sb2d5IHdoZW4gYm90aCBpbnRlcmZh Y2VzIGFyZSBhY3RpdmUsIHRoZXkgaGF2ZSBzYW1lCj4gLQkgKiBsb2FkIHNvIGludGZfaXBfdyB3 aWxsIGJlIHNhbWUuCj4gLQkgKi8KPiAtCV9kcHVfZW5jb2Rlcl9kc2NfcGNsa19wYXJhbV9jYWxj KCZkc2NbMF0sIGludGZfaXBfdyk7Cj4gLQlfZHB1X2VuY29kZXJfZHNjX3BjbGtfcGFyYW1fY2Fs YygmZHNjWzFdLCBpbnRmX2lwX3cpOwo+ICsJaW50Zl9pcF93IC89IDI7Cj4gKwlfZHB1X2VuY29k ZXJfZHNjX3BjbGtfcGFyYW1fY2FsYyhkc2MsIGludGZfaXBfdyk7Cj4gIAo+IC0JLyoKPiAtCSAq IEluIHRoaXMgdG9wb2xvZ3ksIHNpbmNlIHRoZXJlIGlzIG5vIGRzY19tZXJnZSwgdW5jb21wcmVz c2VkIGlucHV0Cj4gLQkgKiB0byBlbmNvZGVyIGFuZCBpbnRlcmZhY2UgaXMgc2FtZS4KPiAtCSAq Lwo+ICAJZW5jX2lwX3cgPSBpbnRmX2lwX3c7Cj4gLQlfZHB1X2VuY29kZXJfZHNjX2luaXRpYWxf bGluZV9jYWxjKCZkc2NbMF0sIGVuY19pcF93KTsKPiAtCV9kcHVfZW5jb2Rlcl9kc2NfaW5pdGlh bF9saW5lX2NhbGMoJmRzY1sxXSwgZW5jX2lwX3cpOwo+ICsJX2RwdV9lbmNvZGVyX2RzY19pbml0 aWFsX2xpbmVfY2FsYyhkc2MsIGVuY19pcF93KTsKPiAgCj4gLQkvKgo+IC0JICogX19pc19pY2hf cmVzZXRfb3ZlcnJpZGVfbmVlZGVkIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlcgo+IC0JICog dXBkYXRpbmcgcGljIGRpbWVuc2lvbiwgbWRzc19wYW5lbF9kc2NfdXBkYXRlX3BpY19kaW0uCj4g LQkgKi8KPiAtCWljaF9yZXMgPSBfZHB1X2VuY29kZXJfZHNjX2ljaF9yZXNldF9vdmVycmlkZV9u ZWVkZWQoCj4gLQkJCWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUsICZkc2NbMF0pOwo+ICsJaWNo X3JlcyA9IF9kcHVfZW5jb2Rlcl9kc2NfaWNoX3Jlc2V0X292ZXJyaWRlX25lZWRlZChmYWxzZSwg ZHNjKTsKPiAgCj4gLQlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVk IG1vZGU6JWRcbiIsCj4gLQkJCXJvaS0+dywgcm9pLT5oLCBkc2NfY29tbW9uX21vZGUpOwo+ICsJ ZHNjX2NvbW1vbl9tb2RlID0gRFNDX01PREVfU1BMSVRfUEFORUw7Cj4gKwlpZiAoZW5jX21hc3Rl ci0+aW50Zl9tb2RlID09IElOVEZfTU9ERV9WSURFTykKPiArCQlkc2NfY29tbW9uX21vZGUgfD0g RFNDX01PREVfVklERU87Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlz X2VuY3M7IGkrKykgewo+IC0JCWJvb2wgYWN0aXZlID0gISEoKDEgPDwgaSkgJiBwYXJhbXMtPmFm ZmVjdGVkX2Rpc3BsYXlzKTsKPiArCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInBpY193OiAlZCBw aWNfaDogJWQgbW9kZTolZFxuIiwKPiArCQlkc2MtPnBpY193aWR0aCwgZHNjLT5waWNfaGVpZ2h0 LCBkc2NfY29tbW9uX21vZGUpOwo+ICsJRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5jLT5iYXNlKSwg ZHNjLT5waWNfd2lkdGgsIGRzYy0+cGljX2hlaWdodCwKPiArCQkJZHNjX2NvbW1vbl9tb2RlKTsK PiAgCj4gLQkJRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5jLT5iYXNlKSwgcm9pLT53LCByb2ktPmgs Cj4gLQkJCQlkc2NfY29tbW9uX21vZGUsIGksIGFjdGl2ZSk7Cj4gLQkJX2RwdV9lbmNvZGVyX2Rz Y19waXBlX2NmZyhod19kc2NbaV0sIGh3X3BwW2ldLCAmZHNjW2ldLAo+IC0JCQkJZHNjX2NvbW1v bl9tb2RlLCBpY2hfcmVzLCBhY3RpdmUpOwo+IC0JfQo+ICsJX2RwdV9lbmNvZGVyX2RzY19waXBl X2NmZyhsX2h3X2RzYywgbF9od19wcCwgZHNjLCBkc2NfY29tbW9uX21vZGUsCj4gKwkJCWljaF9y ZXMpOwo+ICsJX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhyX2h3X2RzYywgcl9od19wcCwgZHNj LCBkc2NfY29tbW9uX21vZGUsCj4gKwkJCWljaF9yZXMpOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18xX2ludGYoc3Ry dWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCj4gLQkJc3RydWN0IGRwdV9lbmNvZGVyX2tp Y2tvZmZfcGFyYW1zICpwYXJhbXMpCj4gK3N0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY18yX2xt XzJfZW5jXzFfaW50ZihzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKPiAgewo+ICAJ aW50IHRoaXNfZnJhbWVfc2xpY2VzOwo+ICAJaW50IGludGZfaXBfdywgZW5jX2lwX3c7Cj4gIAlp bnQgaWNoX3JlcywgZHNjX2NvbW1vbl9tb2RlOwo+ICsJaW50IHJjID0gMDsKPiAgCj4gIAlzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5cyAqZW5jX21hc3RlciA9IGRwdV9lbmMtPmN1cl9tYXN0ZXI7Cj4g LQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKnJvaSA9ICZkcHVfZW5jLT5jdXJfY29ubl9yb2k7Cj4g LQlzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjW01BWF9DSEFOTkVMU19QRVJfRU5DXTsKPiAtCXN0 cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmh3X3BwW01BWF9DSEFOTkVMU19QRVJfRU5DXTsKPiArCXN0 cnVjdCBkcHVfaHdfZHNjICpsX2h3X2RzYyA9IGRwdV9lbmMtPmh3X2RzY1swXTsKPiArCXN0cnVj dCBkcHVfaHdfZHNjICpyX2h3X2RzYyA9IGRwdV9lbmMtPmh3X2RzY1sxXTsKPiArCXN0cnVjdCBk cHVfaHdfcGluZ3BvbmcgKmxfaHdfcHAgPSBkcHVfZW5jLT5od19wcFswXTsKPiArCXN0cnVjdCBk cHVfaHdfcGluZ3BvbmcgKnJfaHdfcHAgPSBkcHVfZW5jLT5od19wcFsxXTsKPiAgCXN0cnVjdCBt c21fZGlzcGxheV9kc2NfaW5mbyAqZHNjID0KPiAgCQkmZHB1X2VuYy0+bW9kZV9pbmZvLmNvbXBf aW5mby5kc2NfaW5mbzsKPiAtCWJvb2wgaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZTsKPiAtCWlu dCBpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFNfUEVSX0VOQzsgaSsrKSB7 Cj4gLQkJaHdfcHBbaV0gPSBkcHVfZW5jLT5od19wcFtpXTsKPiAtCQlod19kc2NbaV0gPSBkcHVf ZW5jLT5od19kc2NbaV07Cj4gIAo+IC0JCWlmICghaHdfcHBbaV0gfHwgIWh3X2RzY1tpXSkgewo+ IC0JCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJpbnZhbGlkIHBhcmFtcyBmb3IgRFNDXG4iKTsK PiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJfQo+ICsJcmMgPSBfZHB1X2VuY29kZXJfZHNjX3Vw ZGF0ZV9waWNfZGltKGRzYywgZHNjLT5waWNfd2lkdGgsCj4gKwkJCWRzYy0+cGljX2hlaWdodCk7 Cj4gKwlpZiAocmMpIHsKPiArCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJmYWlsZWQgdG8gdXBk YXRlIERTQyBwaWMgZGltXG4iKTsKPiArCQlyZXR1cm4gcmM7Cj4gIAl9Cj4gIAo+IC0JaGFsZl9w YW5lbF9wYXJ0aWFsX3VwZGF0ZSA9Cj4gLQkJCWh3ZWlnaHRfbG9uZyhwYXJhbXMtPmFmZmVjdGVk X2Rpc3BsYXlzKSA9PSAxOwo+IC0KPiAtCWRzY19jb21tb25fbW9kZSA9IDA7Cj4gLQlpZiAoIWhh bGZfcGFuZWxfcGFydGlhbF91cGRhdGUpCj4gLQkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RF X1NQTElUX1BBTkVMIHwgRFNDX01PREVfTVVMVElQTEVYOwo+IC0JaWYgKGVuY19tYXN0ZXItPmlu dGZfbW9kZSA9PSBJTlRGX01PREVfVklERU8pCj4gLQkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19N T0RFX1ZJREVPOwo+IC0KPiAtCV9kcHVfZW5jb2Rlcl9kc2NfdXBkYXRlX3BpY19kaW0oZHNjLCBy b2ktPncsIHJvaS0+aCk7Cj4gLQo+IC0JdGhpc19mcmFtZV9zbGljZXMgPSByb2ktPncgLyBkc2Mt PnNsaWNlX3dpZHRoOwo+ICsJdGhpc19mcmFtZV9zbGljZXMgPSBkc2MtPnBpY193aWR0aCAvIGRz Yy0+c2xpY2Vfd2lkdGg7Cj4gIAlpbnRmX2lwX3cgPSB0aGlzX2ZyYW1lX3NsaWNlcyAqIGRzYy0+ c2xpY2Vfd2lkdGg7Cj4gIAlfZHB1X2VuY29kZXJfZHNjX3BjbGtfcGFyYW1fY2FsYyhkc2MsIGlu dGZfaXBfdyk7Cj4gIAo+ICAJLyoKPiAtCSAqIGRzYyBtZXJnZSBjYXNlOiB3aGVuIHVzaW5nIDIg ZW5jb2RlcnMgZm9yIHRoZSBzYW1lIHN0cmVhbSwKPiAtCSAqIG5vLiBvZiBzbGljZXMgbmVlZCB0 byBiZSBzYW1lIG9uIGJvdGggdGhlIGVuY29kZXJzLgo+ICsJICogd2hlbiB1c2luZyAyIGVuY29k ZXJzIGZvciB0aGUgc2FtZSBzdHJlYW0sIG5vLiBvZiBzbGljZXMKPiArCSAqIG5lZWQgdG8gYmUg c2FtZSBvbiBib3RoIHRoZSBlbmNvZGVycy4KPiAgCSAqLwo+ICAJZW5jX2lwX3cgPSBpbnRmX2lw X3cgLyAyOwo+ICAJX2RwdV9lbmNvZGVyX2RzY19pbml0aWFsX2xpbmVfY2FsYyhkc2MsIGVuY19p cF93KTsKPiAgCj4gLQlpY2hfcmVzID0gX2RwdV9lbmNvZGVyX2RzY19pY2hfcmVzZXRfb3ZlcnJp ZGVfbmVlZGVkKAo+IC0JCQloYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlLCBkc2MpOwo+IC0KPiAt CURQVV9ERUJVR19FTkMoZHB1X2VuYywgInBpY193OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwK PiAtCQkJcm9pLT53LCByb2ktPmgsIGRzY19jb21tb25fbW9kZSk7Cj4gLQlEUFVfRVZUMzIoRFJN SUQoJmRwdV9lbmMtPmJhc2UpLCByb2ktPncsIHJvaS0+aCwKPiAtCQkJZHNjX2NvbW1vbl9tb2Rl LCBpLCBwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKTsKPiAtCj4gLQlfZHB1X2VuY29kZXJfZHNj X3BpcGVfY2ZnKGh3X2RzY1swXSwgaHdfcHBbMF0sIGRzYywgZHNjX2NvbW1vbl9tb2RlLAo+IC0J CQlpY2hfcmVzLCB0cnVlKTsKPiAtCV9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmcoaHdfZHNjWzFd LCBod19wcFsxXSwgZHNjLCBkc2NfY29tbW9uX21vZGUsCj4gLQkJCWljaF9yZXMsICFoYWxmX3Bh bmVsX3BhcnRpYWxfdXBkYXRlKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGlj IGludCBfZHB1X2VuY29kZXJfdXBkYXRlX3JvaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMp Cj4gLXsKPiAtCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwo+IC0Jc3RydWN0IGRy bV9jb25uZWN0b3IgKmRybV9jb25uOwo+IC0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9t b2RlOwo+IC0Jc3RydWN0IGRwdV9yZWN0IHJvaTsKPiAtCj4gLQlpZiAoIWRybV9lbmMgfHwgIWRy bV9lbmMtPmNydGMgfHwgIWRybV9lbmMtPmNydGMtPnN0YXRlKQo+IC0JCXJldHVybiAtRUlOVkFM Owo+IC0JZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7Cj4gLQo+IC0JaWYg KCFkcHVfZW5jLT5jdXJfbWFzdGVyKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+ICsJaWNoX3JlcyA9 IF9kcHVfZW5jb2Rlcl9kc2NfaWNoX3Jlc2V0X292ZXJyaWRlX25lZWRlZChmYWxzZSwgZHNjKTsK PiAgCj4gLQlhZGpfbW9kZSA9ICZkcHVfZW5jLT5iYXNlLmNydGMtPnN0YXRlLT5hZGp1c3RlZF9t b2RlOwo+IC0JZHJtX2Nvbm4gPSBkcHVfZW5jLT5jdXJfbWFzdGVyLT5jb25uZWN0b3I7Cj4gKwlk c2NfY29tbW9uX21vZGUgPSBEU0NfTU9ERV9NVUxUSVBMRVggfCBEU0NfTU9ERV9TUExJVF9QQU5F TDsKPiArCWlmIChlbmNfbWFzdGVyLT5pbnRmX21vZGUgPT0gSU5URl9NT0RFX1ZJREVPKQo+ICsJ CWRzY19jb21tb25fbW9kZSB8PSBEU0NfTU9ERV9WSURFTzsKPiAgCj4gLQlfZHB1X2VuY29kZXJf Z2V0X2Nvbm5lY3Rvcl9yb2koZHB1X2VuYywgJnJvaSk7Cj4gLQlpZiAoZHB1X2ttc19yZWN0X2lz X251bGwoJnJvaSkpIHsKPiAtCQlyb2kudyA9IGFkal9tb2RlLT5oZGlzcGxheTsKPiAtCQlyb2ku aCA9IGFkal9tb2RlLT52ZGlzcGxheTsKPiAtCX0KPiArCURQVV9ERUJVR19FTkMoZHB1X2VuYywg InBpY193OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwKPiArCQlkc2MtPnBpY193aWR0aCwgZHNj LT5waWNfaGVpZ2h0LCBkc2NfY29tbW9uX21vZGUpOwo+ICsJRFBVX0VWVDMyKERSTUlEKCZkcHVf ZW5jLT5iYXNlKSwgZHNjLT5waWNfd2lkdGgsIGRzYy0+cGljX2hlaWdodCwKPiArCQkJZHNjX2Nv bW1vbl9tb2RlKTsKPiAgCj4gLQltZW1jcHkoJmRwdV9lbmMtPnBydl9jb25uX3JvaSwgJmRwdV9l bmMtPmN1cl9jb25uX3JvaSwKPiAtCQkJc2l6ZW9mKGRwdV9lbmMtPnBydl9jb25uX3JvaSkpOwo+ IC0JbWVtY3B5KCZkcHVfZW5jLT5jdXJfY29ubl9yb2ksICZyb2ksIHNpemVvZihkcHVfZW5jLT5j dXJfY29ubl9yb2kpKTsKPiArCV9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmcobF9od19kc2MsIGxf aHdfcHAsIGRzYywgZHNjX2NvbW1vbl9tb2RlLAo+ICsJCQlpY2hfcmVzKTsKPiArCV9kcHVfZW5j b2Rlcl9kc2NfcGlwZV9jZmcocl9od19kc2MsIHJfaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9tb2Rl LAo+ICsJCQlpY2hfcmVzKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGlu dCBfZHB1X2VuY29kZXJfZHNjX3NldHVwKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5j LAo+IC0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFtcyAqcGFyYW1zKQo+ICtzdGF0 aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2Nfc2V0dXAoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRw dV9lbmMpCj4gIHsKPiAgCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgdG9wb2xvZ3k7Cj4gIAlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHJtX2Nvbm47Cj4gIAlpbnQgcmV0ID0gMDsKPiAgCj4gLQlp ZiAoIWRwdV9lbmMgfHwgIXBhcmFtcyB8fCAhZHB1X2VuYy0+cGh5c19lbmNzWzBdIHx8Cj4gLQkJ CSFkcHVfZW5jLT5waHlzX2VuY3NbMF0tPmNvbm5lY3RvcikKPiArCWlmICghZHB1X2VuYykKPiAg CQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gIAlkcm1fY29ubiA9IGRwdV9lbmMtPnBoeXNfZW5jc1sw XS0+Y29ubmVjdG9yOwo+IEBAIC0xMTUzLDIwICsxMDQ1LDE2IEBAIHN0YXRpYyBpbnQgX2RwdV9l bmNvZGVyX2RzY19zZXR1cChzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKPiAgCURQ VV9ERUJVR19FTkMoZHB1X2VuYywgInRvcG9sb2d5OiVkXG4iLCB0b3BvbG9neSk7Cj4gIAlEUFVf RVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJhc2UpKTsKPiAgCj4gLQlpZiAoZHB1X2ttc19yZWN0X2lz X2VxdWFsKCZkcHVfZW5jLT5jdXJfY29ubl9yb2ksCj4gLQkJCSZkcHVfZW5jLT5wcnZfY29ubl9y b2kpKQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ICAJc3dpdGNoICh0b3BvbG9neSkgewo+ICAJY2Fz ZSBEUFVfUk1fVE9QT0xPR1lfU0lOR0xFUElQRV9EU0M6Cj4gIAljYXNlIERQVV9STV9UT1BPTE9H WV9EVUFMUElQRV8zRE1FUkdFX0RTQzoKPiAgCQlyZXQgPSBfZHB1X2VuY29kZXJfZHNjX25fbG1f MV9lbmNfMV9pbnRmKGRwdV9lbmMpOwo+ICAJCWJyZWFrOwo+ICAJY2FzZSBEUFVfUk1fVE9QT0xP R1lfRFVBTFBJUEVfRFNDTUVSR0U6Cj4gLQkJcmV0ID0gX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJf ZW5jXzFfaW50ZihkcHVfZW5jLCBwYXJhbXMpOwo+ICsJCXJldCA9IF9kcHVfZW5jb2Rlcl9kc2Nf Ml9sbV8yX2VuY18xX2ludGYoZHB1X2VuYyk7Cj4gIAkJYnJlYWs7Cj4gIAljYXNlIERQVV9STV9U T1BPTE9HWV9EVUFMUElQRV9EU0M6Cj4gLQkJcmV0ID0gX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJf ZW5jXzJfaW50ZihkcHVfZW5jLCBwYXJhbXMpOwo+ICsJCXJldCA9IF9kcHVfZW5jb2Rlcl9kc2Nf Ml9sbV8yX2VuY18yX2ludGYoZHB1X2VuYyk7Cj4gIAkJYnJlYWs7Cj4gIAlkZWZhdWx0Ogo+ICAJ CURQVV9FUlJPUl9FTkMoZHB1X2VuYywgIk5vIERTQyBzdXBwb3J0IGZvciB0b3BvbG9neSAlZCIs Cj4gQEAgLTE0MjksNyArMTMxNyw4IEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX3VwZGF0ZV9y c2NfY2xpZW50KAo+ICAJfQo+ICAKPiAgCWlmIChjcnRjLT5iYXNlLmlkICE9IHdhaXRfdmJsYW5r X2NydGNfaWQpIHsKPiAtCQlwcmltYXJ5X2NydGMgPSBkcm1fY3J0Y19maW5kKGRybV9lbmMtPmRl diwgTlVMTCwgd2FpdF92YmxhbmtfY3J0Y19pZCk7Cj4gKwkJcHJpbWFyeV9jcnRjID0gZHJtX2Ny dGNfZmluZChkcm1fZW5jLT5kZXYsIE5VTEwsCj4gKwkJCQl3YWl0X3ZibGFua19jcnRjX2lkKTsK PiAgCQlpZiAoIXByaW1hcnlfY3J0Yykgewo+ICAJCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsCj4g IAkJCQkJImZhaWxlZCB0byBmaW5kIHByaW1hcnkgY3J0YyBpZCAlZFxuIiwKPiBAQCAtMjA3Myw5 ICsxOTYyLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3ZpcnRfZW5hYmxlX2hlbHBlcihz dHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCj4gIAkJCQlkcHVfa21zLT5jYXRhbG9nKTsKPiAg Cj4gIAlfZHB1X2VuY29kZXJfdXBkYXRlX3ZzeW5jX3NvdXJjZShkcHVfZW5jLCAmZHB1X2VuYy0+ ZGlzcF9pbmZvLCBmYWxzZSk7Cj4gLQo+IC0JbWVtc2V0KCZkcHVfZW5jLT5wcnZfY29ubl9yb2ks IDAsIHNpemVvZihkcHVfZW5jLT5wcnZfY29ubl9yb2kpKTsKPiAtCW1lbXNldCgmZHB1X2VuYy0+ Y3VyX2Nvbm5fcm9pLCAwLCBzaXplb2YoZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pKSk7Cj4gIH0KPiAg Cj4gIHZvaWQgZHB1X2VuY29kZXJfdmlydF9yZXN0b3JlKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJt X2VuYykKPiBAQCAtMjk0NSw3ICsyODMxLDggQEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfd2Fr ZXVwX3RpbWUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAo+ICAKPiAgc3RhdGljIHZvaWQg ZHB1X2VuY29kZXJfdnN5bmNfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKPiAg ewo+IC0Jc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBmcm9tX3RpbWVyKGRwdV9l bmMsIHQsIHZzeW5jX2V2ZW50X3RpbWVyKTsKPiArCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpk cHVfZW5jID0gZnJvbV90aW1lcihkcHVfZW5jLCB0LAo+ICsJCQl2c3luY19ldmVudF90aW1lcik7 Cj4gIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMgPSAmZHB1X2VuYy0+YmFzZTsKPiAgCXN0 cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7Cj4gIAlzdHJ1Y3QgbXNtX2RybV90aHJlYWQgKmV2 ZW50X3RocmVhZDsKPiBAQCAtMzA1Myw4ICsyOTQwLDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVw YXJlX2Zvcl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKPiAgCj4gIAlfZHB1 X2VuY29kZXJfdXBkYXRlX21hc3Rlcihkcm1fZW5jLCBwYXJhbXMpOwo+ICAKPiAtCV9kcHVfZW5j b2Rlcl91cGRhdGVfcm9pKGRybV9lbmMpOwo+IC0KPiAgCWlmIChkcHVfZW5jLT5jdXJfbWFzdGVy ICYmIGRwdV9lbmMtPmN1cl9tYXN0ZXItPmNvbm5lY3Rvcikgewo+ICAJCXJjID0gZHB1X2Nvbm5l Y3Rvcl9wcmVfa2lja29mZihkcHVfZW5jLT5jdXJfbWFzdGVyLT5jb25uZWN0b3IpOwo+ICAJCWlm IChyYykKPiBAQCAtMzA2NCw3ICsyOTQ5LDcgQEAgdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJlX2Zv cl9raWNrb2ZmKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKPiAgCX0KPiAgCj4gIAlpZiAo ZHB1X2VuY29kZXJfaXNfZHNjX2VuYWJsZWQoZHJtX2VuYykpIHsKPiAtCQlyYyA9IF9kcHVfZW5j b2Rlcl9kc2Nfc2V0dXAoZHB1X2VuYywgcGFyYW1zKTsKPiArCQlyYyA9IF9kcHVfZW5jb2Rlcl9k c2Nfc2V0dXAoZHB1X2VuYyk7Cj4gIAkJaWYgKHJjKQo+ICAJCQlEUFVfRVJST1JfRU5DKGRwdV9l bmMsICJmYWlsZWQgdG8gc2V0dXAgRFNDOiAlZFxuIiwgcmMpOwo+ICAJfQo+IEBAIC0zNjU0LDcg KzM1MzksOCBAQCBzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3NldHVwX2Rpc3BsYXkoc3RydWN0IGRw dV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCj4gIAo+ICBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9m cmFtZV9kb25lX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCj4gIHsKPiAtCXN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gZnJvbV90aW1lcihkcHVfZW5jLCB0LCBmcmFtZV9k b25lX3RpbWVyKTsKPiArCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gZnJvbV90 aW1lcihkcHVfZW5jLCB0LAo+ICsJCQlmcmFtZV9kb25lX3RpbWVyKTsKPiAgCXN0cnVjdCBkcm1f ZW5jb2RlciAqZHJtX2VuYyA9ICZkcHVfZW5jLT5iYXNlOwo+ICAJc3RydWN0IG1zbV9kcm1fcHJp dmF0ZSAqcHJpdjsKPiAgCXUzMiBldmVudDsKPiBAQCAtMzcyNiw3ICszNjEyLDggQEAgc3RydWN0 IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAo+ICAJZHJtX2VuY29kZXJfaGVscGVyX2Fk ZChkcm1fZW5jLCAmZHB1X2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKPiAgCj4gIAlhdG9taWNfc2V0 KCZkcHVfZW5jLT5mcmFtZV9kb25lX3RpbWVvdXQsIDApOwo+IC0JdGltZXJfc2V0dXAoJmRwdV9l bmMtPmZyYW1lX2RvbmVfdGltZXIsIGRwdV9lbmNvZGVyX2ZyYW1lX2RvbmVfdGltZW91dCwgMCk7 Cj4gKwl0aW1lcl9zZXR1cCgmZHB1X2VuYy0+ZnJhbWVfZG9uZV90aW1lciwKPiArCQkJZHB1X2Vu Y29kZXJfZnJhbWVfZG9uZV90aW1lb3V0LCAwKTsKPiAgCj4gIAlpZiAoKGRpc3BfaW5mby0+aW50 Zl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpICYmCj4gIAkJCWRpc3BfaW5mby0+aXNf cHJpbWFyeSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2ttcy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCj4gaW5kZXgg NjJlN2M1Yy4uZDExZmIxZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfa21zLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf a21zLmgKPiBAQCAtNDU0LDE0ICs0NTQsNiBAQCB2b2lkIGRwdV9rbXNfcmVjdF9pbnRlcnNlY3Qo Y29uc3Qgc3RydWN0IGRwdV9yZWN0ICpyMSwKPiAgCQlzdHJ1Y3QgZHB1X3JlY3QgKnJlc3VsdCk7 Cj4gIAo+ICAvKioKPiAtICogZHB1X2ttc19yZWN0X21lcmdlX3JlY3RhbmdsZXMgLSBtZXJnZSBh IHJlY3RhbmdsZSBsaXN0IGludG8gb25lIHJlY3QKPiAtICogQHJvaXM6IHBvaW50ZXIgdG8gdGhl IGxpc3Qgb2Ygcm9pcwo+IC0gKiBAcmVzdWx0OiBvdXRwdXQgcmVjdGFuZ2xlLCBhbGwgMCBvbiBl cnJvcgo+IC0gKi8KPiAtdm9pZCBkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyhjb25zdCBz dHJ1Y3QgbXNtX3JvaV9saXN0ICpyb2lzLAo+IC0JCXN0cnVjdCBkcHVfcmVjdCAqcmVzdWx0KTsK PiAtCj4gLS8qKgo+ICAgKiBkcHVfa21zX3JlY3RfaXNfZXF1YWwgLSBjb21wYXJlcyB0d28gcmVj dHMKPiAgICogQHIxOiByZWN0IHZhbHVlIHRvIGNvbXBhcmUKPiAgICogQHIyOiByZWN0IHZhbHVl IHRvIGNvbXBhcmUKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2ttc191dGlscy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttc191 dGlscy5jCj4gaW5kZXggMDA2ZDdhZC4uNDBlMDE2MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMKPiBAQCAtMTc2LDQ1ICsxNzYsMyBAQCB2 b2lkIGRwdV9rbXNfcmVjdF9pbnRlcnNlY3QoY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpyMSwKPiAg CX0KPiAgfQo+ICAKPiAtdm9pZCBkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyhjb25zdCBz dHJ1Y3QgbXNtX3JvaV9saXN0ICpyb2lzLAo+IC0JCXN0cnVjdCBkcHVfcmVjdCAqcmVzdWx0KQo+ IC17Cj4gLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOwo+IC0JY29uc3Qgc3RydWN0IGRybV9j bGlwX3JlY3QgKnJvaV9yZWN0Owo+IC0JaW50IGk7Cj4gLQo+IC0JaWYgKCFyb2lzIHx8ICFyZXN1 bHQpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0 KSk7Cj4gLQo+IC0JLyogaW5pdCB0byBpbnZhbGlkIHJhbmdlIG1heGVzICovCj4gLQljbGlwLngx ID0gfjA7Cj4gLQljbGlwLnkxID0gfjA7Cj4gLQljbGlwLngyID0gMDsKPiAtCWNsaXAueTIgPSAw Owo+IC0KPiAtCS8qIGFnZ3JlZ2F0ZSBhbGwgY2xpcHBpbmcgcmVjdGFuZ2xlcyB0b2dldGhlciBm b3Igb3ZlcmFsbCByb2kgKi8KPiAtCWZvciAoaSA9IDA7IGkgPCByb2lzLT5udW1fcmVjdHM7IGkr Kykgewo+IC0JCXJvaV9yZWN0ID0gJnJvaXMtPnJvaVtpXTsKPiAtCj4gLQkJY2xpcC54MSA9IG1p bihjbGlwLngxLCByb2lfcmVjdC0+eDEpOwo+IC0JCWNsaXAueTEgPSBtaW4oY2xpcC55MSwgcm9p X3JlY3QtPnkxKTsKPiAtCQljbGlwLngyID0gbWF4KGNsaXAueDIsIHJvaV9yZWN0LT54Mik7Cj4g LQkJY2xpcC55MiA9IG1heChjbGlwLnkyLCByb2lfcmVjdC0+eTIpOwo+IC0KPiAtCQlEUFVfREVC VUcoInJvaSVkICglZCwlZCksKCVkLCVkKSAtPiBjcnRjICglZCwlZCksKCVkLCVkKVxuIiwgaSwK PiAtCQkJCXJvaV9yZWN0LT54MSwgcm9pX3JlY3QtPnkxLAo+IC0JCQkJcm9pX3JlY3QtPngyLCBy b2lfcmVjdC0+eTIsCj4gLQkJCQljbGlwLngxLCBjbGlwLnkxLAo+IC0JCQkJY2xpcC54MiwgY2xp cC55Mik7Cj4gLQl9Cj4gLQo+IC0JaWYgKGNsaXAueDIgICYmIGNsaXAueTIpIHsKPiAtCQlyZXN1 bHQtPnggPSBjbGlwLngxOwo+IC0JCXJlc3VsdC0+eSA9IGNsaXAueTE7Cj4gLQkJcmVzdWx0LT53 ID0gY2xpcC54MiAtIGNsaXAueDE7Cj4gLQkJcmVzdWx0LT5oID0gY2xpcC55MiAtIGNsaXAueTE7 Cj4gLQl9Cj4gLX0KPiAtCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5l LmMKPiBpbmRleCA4MzRkY2MwLi45ZTljOWQyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3BsYW5lLmMKPiBAQCAtMzI0Myw3ICszMjQzLDYgQEAgc3RhdGljIGludCBk cHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJ c3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4g IAlzdHJ1Y3QgZHB1X3JlY3Qgc3JjLCBkc3Q7Cj4gLQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmNy dGNfcm9pOwo+ICAJYm9vbCBxMTZfZGF0YSA9IHRydWU7Cj4gIAlpbnQgaWR4Owo+ICAKPiBAQCAt MzM1NywxMSArMzM1Niw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0 ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCV9kcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hl Y2tfbW9kZV9jaGFuZ2VkKHBkcHUsIHN0YXRlLAo+ICAJCQkJCQkJCW9sZF9zdGF0ZSk7Cj4gIAo+ IC0JLyogcmUtcHJvZ3JhbSB0aGUgb3V0cHV0IHJlY3RzIGFsd2F5cyBpbiB0aGUgY2FzZSBvZiBw YXJ0aWFsIHVwZGF0ZSAqLwo+IC0JZHB1X2NydGNfZ2V0X2NydGNfcm9pKGNydGMtPnN0YXRlLCAm Y3J0Y19yb2kpOwo+IC0JaWYgKCFkcHVfa21zX3JlY3RfaXNfbnVsbChjcnRjX3JvaSkpCj4gLQkJ cHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7Cj4gLQo+ICAJaWYgKHBzdGF0 ZS0+ZGlydHkgJiBEUFVfUExBTkVfRElSVFlfUkVDVFMpCj4gIAkJbWVtc2V0KCYocGRwdS0+cGlw ZV9jZmcpLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9od19waXBlX2NmZykpOwo+ICAKPiBAQCAtMzM5 OSwxMyArMzM5Myw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkJc3JjLnkgJj0gfjB4MTsKPiAgCQl9Cj4gIAo+ IC0JCS8qCj4gLQkJICogYWRqdXN0IGxheWVyIG1peGVyIHBvc2l0aW9uIG9mIHRoZSBzc3BwIGlu IHRoZSBwcmVzZW5jZQo+IC0JCSAqIG9mIGEgcGFydGlhbCB1cGRhdGUgdG8gdGhlIGFjdGl2ZSBs bSBvcmlnaW4KPiAtCQkgKi8KPiAtCQlkc3QueCAtPSBjcnRjX3JvaS0+eDsKPiAtCQlkc3QueSAt PSBjcnRjX3JvaS0+eTsKPiAtCj4gIAkJcGRwdS0+cGlwZV9jZmcuc3JjX3JlY3QgPSBzcmM7Cj4g IAkJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3QgPSBkc3Q7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5o Cj4gaW5kZXggZDhlMDkwZi4uODU3NGYzMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gQEAg LTE0NCw3ICsxNDQsNiBAQCBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7Cj4gIAlDUlRDX1BS T1BfRFJBTV9JQiwKPiAgCUNSVENfUFJPUF9ST1RfUFJFRklMTF9CVywKPiAgCUNSVENfUFJPUF9S T1RfQ0xLLAo+IC0JQ1JUQ19QUk9QX1JPSV9WMSwKPiAgCUNSVENfUFJPUF9JRExFX1RJTUVPVVQs Cj4gIAlDUlRDX1BST1BfREVTVF9TQ0FMRVIsCj4gIAo+IEBAIC0xNjgsNyArMTY3LDYgQEAgZW51 bSBtc21fbWRwX2Nvbm5fcHJvcGVydHkgewo+ICAJQ09OTkVDVE9SX1BST1BfRFNUX1ksCj4gIAlD T05ORUNUT1JfUFJPUF9EU1RfVywKPiAgCUNPTk5FQ1RPUl9QUk9QX0RTVF9ILAo+IC0JQ09OTkVD VE9SX1BST1BfUk9JX1YxLAo+ICAJQ09OTkVDVE9SX1BST1BfQkxfU0NBTEUsCj4gIAlDT05ORUNU T1JfUFJPUF9BRF9CTF9TQ0FMRSwKPiAgCj4gQEAgLTIyOCwzOCArMjI2LDYgQEAgZW51bSBtc21f ZXZlbnRfd2FpdCB7Cj4gIH07Cj4gIAo+ICAvKioKPiAtICogc3RydWN0IG1zbV9yb2lfYWxpZ25t ZW50IC0gcmVnaW9uIG9mIGludGVyZXN0IGFsaWdubWVudCByZXN0cmljdGlvbnMKPiAtICogQHhz dGFydF9waXhfYWxpZ246IGxlZnQgeCBvZmZzZXQgYWxpZ25tZW50IHJlc3RyaWN0aW9uCj4gLSAq IEB3aWR0aF9waXhfYWxpZ246IHdpZHRoIGFsaWdubWVudCByZXN0cmljdGlvbgo+IC0gKiBAeXN0 YXJ0X3BpeF9hbGlnbjogdG9wIHkgb2Zmc2V0IGFsaWdubWVudCByZXN0cmljdGlvbgo+IC0gKiBA aGVpZ2h0X3BpeF9hbGlnbjogaGVpZ2h0IGFsaWdubWVudCByZXN0cmljdGlvbgo+IC0gKiBAbWlu X3dpZHRoOiBtaW5pbXVtIHdpZHRoIHJlc3RyaWN0aW9uCj4gLSAqIEBtaW5faGVpZ2h0OiBtaW5p bXVtIGhlaWdodCByZXN0cmljdGlvbgo+IC0gKi8KPiAtc3RydWN0IG1zbV9yb2lfYWxpZ25tZW50 IHsKPiAtCXVpbnQzMl90IHhzdGFydF9waXhfYWxpZ247Cj4gLQl1aW50MzJfdCB3aWR0aF9waXhf YWxpZ247Cj4gLQl1aW50MzJfdCB5c3RhcnRfcGl4X2FsaWduOwo+IC0JdWludDMyX3QgaGVpZ2h0 X3BpeF9hbGlnbjsKPiAtCXVpbnQzMl90IG1pbl93aWR0aDsKPiAtCXVpbnQzMl90IG1pbl9oZWln aHQ7Cj4gLX07Cj4gLQo+IC0vKioKPiAtICogc3RydWN0IG1zbV9yb2lfY2FwcyAtIGRpc3BsYXkn cyByZWdpb24gb2YgaW50ZXJlc3QgY2FwYWJpbGl0aWVzCj4gLSAqIEBlbmFibGVkOiB0cnVlIGlm IHNvbWUgcmVnaW9uIG9mIGludGVyZXN0IGlzIHN1cHBvcnRlZAo+IC0gKiBAbWVyZ2Vfcm9pczog bWVyZ2Ugcm9pcyBiZWZvcmUgc2VuZGluZyB0byBkaXNwbGF5Cj4gLSAqIEBudW1fcm9pOiBtYXhp bXVtIG51bWJlciBvZiByb2lzIHN1cHBvcnRlZAo+IC0gKiBAYWxpZ246IHJvaSBhbGlnbm1lbnQg cmVzdHJpY3Rpb25zCj4gLSAqLwo+IC1zdHJ1Y3QgbXNtX3JvaV9jYXBzIHsKPiAtCWJvb2wgZW5h YmxlZDsKPiAtCWJvb2wgbWVyZ2Vfcm9pczsKPiAtCXVpbnQzMl90IG51bV9yb2k7Cj4gLQlzdHJ1 Y3QgbXNtX3JvaV9hbGlnbm1lbnQgYWxpZ247Cj4gLX07Cj4gLQo+IC0vKioKPiAgICogc3RydWN0 IG1zbV9kaXNwbGF5X2RzY19pbmZvIC0gZGVmaW5lcyBkc2MgY29uZmlndXJhdGlvbgo+ICAgKiBA dmVyc2lvbjogICAgICAgICAgICAgICAgIERTQyB2ZXJzaW9uLgo+ICAgKiBAc2NyX3JldjogICAg ICAgICAgICAgICAgIERTQyByZXZpc2lvbi4KPiBAQCAtNDI3LDcgKzM5Myw2IEBAIHN0cnVjdCBt c21fbW9kZV9pbmZvIHsKPiAgICogQGlzX3ByaW1hcnk6ICAgICAgICAgU2V0IHRvIHRydWUgaWYg ZGlzcGxheSBpcyBwcmltYXJ5IGRpc3BsYXkKPiAgICogQGlzX3RlX3VzaW5nX3dhdGNoZG9nX3Rp bWVyOiAgQm9vbGVhbiB0byBpbmRpY2F0ZSB3YXRjaGRvZyBURSBpcwo+ICAgKgkJCQkgdXNlZCBp bnN0ZWFkIG9mIHBhbmVsIFRFIGluIGNtZCBtb2RlIHBhbmVscwo+IC0gKiBAcm9pX2NhcHM6ICAg ICAgICAgICBSZWdpb24gb2YgaW50ZXJlc3QgY2FwYWJpbGl0eSBpbmZvCj4gICAqLwo+ICBzdHJ1 Y3QgbXNtX2Rpc3BsYXlfaW5mbyB7Cj4gIAlpbnQgaW50Zl90eXBlOwo+IEBAIC00NDYsMjcgKzQx MSw2IEBAIHN0cnVjdCBtc21fZGlzcGxheV9pbmZvIHsKPiAgCj4gIAlib29sIGlzX3ByaW1hcnk7 Cj4gIAlib29sIGlzX3RlX3VzaW5nX3dhdGNoZG9nX3RpbWVyOwo+IC0Jc3RydWN0IG1zbV9yb2lf Y2FwcyByb2lfY2FwczsKPiAtfTsKPiAtCj4gLSNkZWZpbmUgTVNNX01BWF9ST0kJNAo+IC0KPiAt LyoqCj4gLSAqIHN0cnVjdCBtc21fcm9pX2xpc3QgLSBsaXN0IG9mIHJlZ2lvbnMgb2YgaW50ZXJl c3QgZm9yIGEgZHJtIG9iamVjdAo+IC0gKiBAbnVtX3JlY3RzOiBudW1iZXIgb2YgdmFsaWQgcmVj dGFuZ2xlcyBpbiB0aGUgcm9pIGFycmF5Cj4gLSAqIEByb2k6IGxpc3Qgb2Ygcm9pIHJlY3Rhbmds ZXMKPiAtICovCj4gLXN0cnVjdCBtc21fcm9pX2xpc3Qgewo+IC0JdWludDMyX3QgbnVtX3JlY3Rz Owo+IC0Jc3RydWN0IGRybV9jbGlwX3JlY3Qgcm9pW01TTV9NQVhfUk9JXTsKPiAtfTsKPiAtCj4g LS8qKgo+IC0gKiBzdHJ1Y3QgLSBtc21fZGlzcGxheV9raWNrb2ZmX3BhcmFtcyAtIGluZm8gZm9y IGRpc3BsYXkgZmVhdHVyZXMgYXQga2lja29mZgo+IC0gKiBAcm9pczogUmVnaW9ucyBvZiBpbnRl cmVzdCBzdHJ1Y3R1cmUgZm9yIG1hcHBpbmcgQ1JUQyB0byBDb25uZWN0b3Igb3V0cHV0Cj4gLSAq Lwo+IC1zdHJ1Y3QgbXNtX2Rpc3BsYXlfa2lja29mZl9wYXJhbXMgewo+IC0Jc3RydWN0IG1zbV9y b2lfbGlzdCAqcm9pczsKPiAgfTsKPiAgCj4gIC8qKgo+IC0tIAo+IFRoZSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0s Cj4gYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAo+IAoKLS0gClNlYW4g UGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9TCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxp c3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=