From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id CF8866E862 for ; Tue, 3 Dec 2019 17:06:02 +0000 (UTC) Date: Tue, 3 Dec 2019 18:05:58 +0100 From: Zbigniew =?utf-8?Q?Kempczy=C5=84ski?= Message-ID: <20191203170558.GA4807@zkempczy-mobl2> References: <20191201190942.6077-1-zbigniew.kempczynski@intel.com> <20191203092529.GG5980@kdec5-desk.ger.corp.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191203092529.GG5980@kdec5-desk.ger.corp.intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v2 1/2] lib/intel_bufops: Introduce buffer operations List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Katarzyna Dec Cc: igt-dev@lists.freedesktop.org List-ID: T24gVHVlLCBEZWMgMDMsIDIwMTkgYXQgMTA6MjU6MjlBTSArMDEwMCwgS2F0YXJ6eW5hIERlYyB3 cm90ZToKCjxjdXQ+Cj4gPiArc3RhdGljIHZvaWQgKnhfcHRyKHZvaWQgKnB0ciwKPiA+ICsJCSAg IHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwKPiA+ICsJCSAgIHVuc2lnbmVkIGludCBz dHJpZGUsIHVuc2lnbmVkIGludCBjcHApCj4gPiArewo+ID4gKwljb25zdCBpbnQgdGlsZV93aWR0 aCA9IDUxMjsKPiA+ICsJY29uc3QgaW50IHRpbGVfaGVpZ2h0ID0gODsKPiBJdCBjYW4gYmUgcmVh bGx5IHNpbGx5IHF1ZXN0aW9uIC0gYXJlIHRoZXNlIF4gdmFsdWVzIGFsd2F5cyB0aGUgc2FtZT8K Clllcy4KCj4gPiArCWNvbnN0IGludCB0aWxlX3NpemUgPSB0aWxlX3dpZHRoICogdGlsZV9oZWln aHQ7Cj4gPiArCWludCB0aWxlX3gsIHRpbGVfeTsKPiA+ICsJaW50IG9mZnNldF94LCBvZmZzZXRf eSwgcG9zOwo+ID4gKwo+ID4gKwl4ICo9IGNwcDsKPiA+ICsJdGlsZV94ID0geCAvIHRpbGVfd2lk dGg7Cj4gPiArCXRpbGVfeSA9IHkgLyB0aWxlX2hlaWdodDsKPiA+ICsJb2Zmc2V0X3ggPSAodGls ZV94ICogdGlsZV9zaXplKTsKPiA+ICsJb2Zmc2V0X3kgPSAodGlsZV95ICogc3RyaWRlICogdGls ZV9oZWlnaHQpOwo+ID4gKwo+ID4gKwlwb3MgPSBvZmZzZXRfeSArIG9mZnNldF94ICsKPiA+ICsJ CQkoeSAlIHRpbGVfaGVpZ2h0ICogdGlsZV93aWR0aCkgKyAoeCAlIHRpbGVfd2lkdGgpOwo+ID4g Kwo+ID4gKwlyZXR1cm4gcHRyICsgcG9zOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCAq eV9wdHIodm9pZCAqcHRyLAo+ID4gKwkJICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5 LAo+ID4gKwkJICAgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNwcCkKPiA+ICt7 Cj4gPiArCWNvbnN0IGludCB0aWxlX3dpZHRoID0gMTI4Owo+ID4gKwljb25zdCBpbnQgdGlsZV9o ZWlnaHQgPSAzMjsKPiA+ICsJY29uc3QgaW50IG93b3JkcyA9IDE2Owo+IFNpbWlsYXIgcXVlc3Rp b24uIEkgZ3Vlc3MgdGhpcyBpcyBzb21ldGhpbmcgc3BlY2lmaWMgZWl0aGVyIHRvIEludGVsIEdl biBvciB0bwo+IHRlc3RjYXNlcy4KClRpbGUtbiB3aGVyZSBuIGlzIFgvWS9ZZi9Zcy8uLi4gZGVz Y3JpYmUgZGF0YSBwbGFjZW1lbnQgYWxnb3JpdGhtcwp0byBiZSBDUFUvR1BVIGNhY2hlLWZyaWVu ZGx5LiAKCj4gPiArCWNvbnN0IGludCB0aWxlX3NpemUgPSB0aWxlX3dpZHRoICogdGlsZV9oZWln aHQ7Cj4gPiArCWludCB0aWxlX3gsIHRpbGVfeTsKPiA+ICsJaW50IG9mZnNldF94LCBvZmZzZXRf eSwgcG9zOwo+ID4gKwlpbnQgc2hpZnRfeCwgc2hpZnRfeTsKPiA+ICsKPiA+ICsJeCAqPSBjcHA7 Cj4gPiArCXRpbGVfeCA9IHggLyB0aWxlX3dpZHRoOwo+ID4gKwl0aWxlX3kgPSB5IC8gdGlsZV9o ZWlnaHQ7Cj4gPiArCW9mZnNldF94ID0gdGlsZV94ICogdGlsZV9zaXplOwo+ID4gKwlvZmZzZXRf eSA9IHRpbGVfeSAqIHN0cmlkZSAqIHRpbGVfaGVpZ2h0Owo+ID4gKwlzaGlmdF94ID0geCAlIG93 b3JkcyArICh4ICUgdGlsZV93aWR0aCkgLyBvd29yZHMgKiB0aWxlX3dpZHRoICogY3BwOwo+ID4g KwlzaGlmdF95ID0geSAlIHRpbGVfaGVpZ2h0ICogb3dvcmRzOwo+ID4gKwo+ID4gKwlwb3MgPSBv ZmZzZXRfeSArIG9mZnNldF94ICsgc2hpZnRfeCArIHNoaWZ0X3k7Cj4gPiArCj4gPiArCXJldHVy biBwdHIgKyBwb3M7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkICp5Zl9wdHIodm9pZCAq cHRyLAo+ID4gKwkJICAgIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwKPiA+ICsJCSAg ICB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY3BwKQo+ID4gK3sKPiA+ICsJY29u c3QgaW50IHRpbGVfc2l6ZSA9IDQgKiAxMDI0Owo+ID4gKwljb25zdCBpbnQgdGlsZV93aWR0aCA9 IDEyODsKPiA+ICsJaW50IHJvd19zaXplID0gKHN0cmlkZSAvIHRpbGVfd2lkdGgpICogdGlsZV9z aXplOwo+ID4gKwo+ID4gKwl4ICo9IGNwcDsgLyogY29udmVydCB0byBCeXRlIG9mZnNldCAqLwo+ ID4gKwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBXaXRoaW4gYSA0ayBZZiB0aWxlLCB0aGUgYnl0 ZSBzd2l6emxpbmcgcGF0dGVybiBpcwo+ID4gKwkgKiBtc2IuLi4uLi5sc2IKPiA+ICsJICogeHl4 eXh5eXl4eHh4Cj4gPiArCSAqIFRoZSB0aWxlcyB0aGVtc2VsdmVzIGFyZSBsYWlkIG91dCBpbiBy b3cgbWFqb3Igb3JkZXIuCj4gPiArCSAqLwo+ID4gKwlyZXR1cm4gcHRyICsKPiA+ICsJCQkoKHgg JiAweGYpICogMSkgKyAvKiA0eDEgcGl4ZWxzKDMyYnBwKSA9IDE2QiAqLwo+ID4gKwkJCSgoeSAm IDB4MykgKiAxNikgKyAvKiA0eDQgcGl4ZWxzID0gNjRCICovCj4gPiArCQkJKCgoeSAmIDB4NCkg Pj4gMikgKiA2NCkgKyAvKiAxeDIgNjRCIGJsb2NrcyAqLwo+ID4gKwkJCSgoKHggJiAweDEwKSA+ PiA0KSAqIDEyOCkgKyAvKiAyeDIgNjRCIGJsb2NrcyA9IDI1NkIgYmxvY2sgKi8KPiA+ICsJCQko KCh5ICYgMHg4KSA+PiAzKSAqIDI1NikgKyAvKiAyeDEgMjU2QiBibG9ja3MgKi8KPiA+ICsJCQko KCh4ICYgMHgyMCkgPj4gNSkgKiA1MTIpICsgLyogMngyIDI1NkIgYmxvY2tzICovCj4gPiArCQkJ KCgoeSAmIDB4MTApID4+IDQpICogMTAyNCkgKyAvKiA0eDIgMjU2IGJsb2NrcyAqLwo+ID4gKwkJ CSgoKHggJiAweDQwKSA+PiA2KSAqIDIwNDgpICsgLyogNHg0IDI1NkIgYmxvY2tzID0gNGsgdGls ZSAqLwo+ID4gKwkJCSgoKHggJiB+MHg3ZikgPj4gNykgKiB0aWxlX3NpemUpICsgLyogcm93IG9m IHRpbGVzICovCj4gPiArCQkJKCgoeSAmIH4weDFmKSA+PiA1KSAqIHJvd19zaXplKTsKPiA+ICt9 Cj4gPiArCj4gPiArdHlwZWRlZiB2b2lkICooKmZuX3B0cikodm9pZCAqLCB1bnNpZ25lZCBpbnQs IHVuc2lnbmVkIGludCwKPiA+ICsJCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cj4gPiAr c3RhdGljIGZuX3B0ciBfX2dldF90aWxlX2ZuX3B0cihpbnQgdGlsaW5nKQo+ID4gK3sKPiA+ICsJ Zm5fcHRyIGZuID0gTlVMTDsKPiA+ICsKPiA+ICsJc3dpdGNoICh0aWxpbmcpIHsKPiA+ICsJY2Fz ZSBJOTE1X1RJTElOR19YOgo+ID4gKwkJZm4gPSB4X3B0cjsKPiA+ICsJCWJyZWFrOwo+ID4gKwlj YXNlIEk5MTVfVElMSU5HX1k6Cj4gPiArCQlmbiA9IHlfcHRyOwo+ID4gKwkJYnJlYWs7Cj4gPiAr CWNhc2UgSTkxNV9USUxJTkdfWWY6Cj4gPiArCQlmbiA9IHlmX3B0cjsKPiA+ICsJCWJyZWFrOwo+ ID4gKwljYXNlIEk5MTVfVElMSU5HX1lzOgo+ID4gKwkJLyogVG8gYmUgaW1wbGVtZW50ZWQgKi8K PiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlndF9hc3NlcnRfZihmbiwgIkNhbid0 IGZpbmQgdGlsZSBmdW5jdGlvbiBmb3IgdGlsaW5nOiAlZFxuIiwgdGlsaW5nKTsKPiA+ICsKPiA+ ICsJcmV0dXJuIGZuOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBfX2NvcHlfbGluZWFy X3RvKGludCBmZCwgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiA+ICsJCQkgICAgIGNvbnN0IHVpbnQz Ml90ICpsaW5lYXIsIGludCB0aWxpbmcpCj4gPiArewo+ID4gKwlpbnQgaGVpZ2h0ID0gaWd0X2J1 Zl9oZWlnaHQoYnVmKTsKPiA+ICsJaW50IHdpZHRoID0gaWd0X2J1Zl93aWR0aChidWYpOwo+ID4g Kwlmbl9wdHIgZm4gPSBfX2dldF90aWxlX2ZuX3B0cih0aWxpbmcpOwo+ID4gKwl2b2lkICptYXA7 Cj4gPiArCj4gPiArCWdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmJvLT5oYW5kbGUsCj4gPiArCQkg ICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gPiArCW1h cCA9IGdlbV9tbWFwX19jcHUoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKPiA+ICsJCQkgICAgYnVm LT5iby0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gPiArCj4gPiArCWZvciAoaW50 IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKPiA+ICsJCWZvciAoaW50IHggPSAwOyB4IDwgd2lk dGg7IHgrKykgewo+ID4gKwkJCXVpbnQzMl90ICpwdHIgPSBmbihtYXAsIHgsIHksCj4gPiArCQkJ CQkgICBidWYtPnN0cmlkZSwgYnVmLT5icHAgLyA4KTsKPiA+ICsKPiA+ICsJCQkqcHRyID0gbGlu ZWFyW3kgKiB3aWR0aCArIHhdOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCW11bm1hcCht YXAsIGJ1Zi0+Ym8tPnNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBjb3B5X2xp bmVhcl90b194KGludCBmZCwgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiA+ICsJCQkgICAgIHVpbnQz Ml90ICpsaW5lYXIpCj4gPiArewo+ID4gKwlfX2NvcHlfbGluZWFyX3RvKGZkLCBidWYsIGxpbmVh ciwgSTkxNV9USUxJTkdfWCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGNvcHlfbGlu ZWFyX3RvX3koaW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ID4gKwkJCSAgICAgdWludDMy X3QgKmxpbmVhcikKPiA+ICt7Cj4gPiArCV9fY29weV9saW5lYXJfdG8oZmQsIGJ1ZiwgbGluZWFy LCBJOTE1X1RJTElOR19ZKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgY29weV9saW5l YXJfdG9feWYoaW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ID4gKwkJCSAgICAgIHVpbnQz Ml90ICpsaW5lYXIpCj4gPiArewo+ID4gKwlfX2NvcHlfbGluZWFyX3RvKGZkLCBidWYsIGxpbmVh ciwgSTkxNV9USUxJTkdfWWYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBfX2NvcHlf dG9fbGluZWFyKGludCBmZCwgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiA+ICsJCQkgICAgIHVpbnQz Ml90ICpsaW5lYXIsIGludCB0aWxpbmcpCj4gPiArewo+ID4gKwlpbnQgaGVpZ2h0ID0gaWd0X2J1 Zl9oZWlnaHQoYnVmKTsKPiA+ICsJaW50IHdpZHRoID0gaWd0X2J1Zl93aWR0aChidWYpOwo+ID4g Kwlmbl9wdHIgZm4gPSBfX2dldF90aWxlX2ZuX3B0cih0aWxpbmcpOwo+ID4gKwl2b2lkICptYXA7 Cj4gPiArCj4gPiArCWdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmJvLT5oYW5kbGUsCj4gPiArCQkg ICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7Cj4gPiArCW1hcCA9IGdlbV9tbWFwX19jcHUo ZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKPiA+ICsJCQkgICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9S RUFEKTsKPiA+ICsKPiA+ICsJZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewo+ID4g KwkJZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Cj4gPiArCQkJdWludDMyX3QgKnB0 ciA9IGZuKG1hcCwgeCwgeSwKPiA+ICsJCQkJCSAgIGJ1Zi0+c3RyaWRlLCBidWYtPmJwcCAvIDgp Owo+ID4gKwo+ID4gKwkJCWxpbmVhclt5ICogd2lkdGggKyB4XSA9ICpwdHI7Cj4gPiArCQl9Cj4g PiArCX0KPiA+ICsKPiA+ICsJbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIGNvcHlfeWZfdG9fbGluZWFyKGludCBmZCwgc3RydWN0IGlndF9i dWYgKmJ1ZiwKPiA+ICsJCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQo+ID4gK3sKPiA+ICsJX19j b3B5X3RvX2xpbmVhcihmZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1lmKTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgY29weV94X3RvX2xpbmVhcihpbnQgZmQsIHN0cnVjdCBpZ3Rf YnVmICpidWYsCj4gPiArCQkJICAgICB1aW50MzJfdCAqbGluZWFyKQo+ID4gK3sKPiA+ICsJX19j b3B5X3RvX2xpbmVhcihmZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1gpOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBjb3B5X3lfdG9fbGluZWFyKGludCBmZCwgc3RydWN0IGlndF9i dWYgKmJ1ZiwKPiA+ICsJCQkgICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gPiArewo+ID4gKwlfX2Nv cHlfdG9fbGluZWFyKGZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWSk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX2d0dChpbnQgZmQsIHN0cnVjdCBpZ3Rf YnVmICpidWYsCj4gPiArCQkJICAgICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gPiArewo+ID4gKwl2 b2lkICptYXA7Cj4gPiArCj4gPiArCWdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmJvLT5oYW5kbGUs Cj4gPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7 Cj4gPiArCj4gPiArCW1hcCA9IGdlbV9tbWFwX19ndHQoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKPiA+ ICsJCQkgICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gPiArCj4g PiArCW1lbWNweShtYXAsIGxpbmVhciwgYnVmLT5iby0+c2l6ZSk7Cj4gPiArCj4gPiArCW11bm1h cChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBjb3B5 X2d0dF90b19saW5lYXIoaW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ID4gKwkJCSAgICAg ICB1aW50MzJfdCAqbGluZWFyKQo+ID4gK3sKPiA+ICsJdm9pZCAqbWFwOwo+ID4gKwo+ID4gKwln ZW1fc2V0X2RvbWFpbihmZCwgYnVmLT5iby0+aGFuZGxlLAo+ID4gKwkJICAgICAgIEk5MTVfR0VN X0RPTUFJTl9HVFQsIDApOwo+ID4gKwo+ID4gKwltYXAgPSBnZW1fbW1hcF9fZ3R0KGZkLCBidWYt PmJvLT5oYW5kbGUsCj4gPiArCQkJICAgIGJ1Zi0+Ym8tPnNpemUsIFBST1RfUkVBRCk7Cj4gPiAr Cj4gPiArCWlndF9tZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1hcCwgYnVmLT5iby0+c2l6ZSk7Cj4g PiArCj4gPiArCW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90b193YyhpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYs Cj4gPiArCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKPiA+ICt7Cj4gPiArCXZvaWQgKm1hcDsK PiA+ICsKPiA+ICsJZ2VtX3NldF9kb21haW4oZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKPiA+ICsJCSAg ICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKPiA+ICsKPiA+ ICsJbWFwID0gZ2VtX21tYXBfX3djKGZkLCBidWYtPmJvLT5oYW5kbGUsIDAsCj4gPiArCQkJICAg YnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gPiArCj4gPiArCW1lbWNw eShtYXAsIGxpbmVhciwgYnVmLT5iby0+c2l6ZSk7Cj4gPiArCj4gPiArCW11bm1hcChtYXAsIGJ1 Zi0+Ym8tPnNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBjb3B5X3djX3RvX2xp bmVhcihpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4gPiArCQkJICAgICAgdWludDMyX3Qg KmxpbmVhcikKPiA+ICt7Cj4gPiArCXZvaWQgKm1hcDsKPiA+ICsKPiA+ICsJZ2VtX3NldF9kb21h aW4oZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKPiA+ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RU LCAwKTsKPiA+ICsKPiA+ICsJbWFwID0gZ2VtX21tYXBfX3djKGZkLCBidWYtPmJvLT5oYW5kbGUs IDAsCj4gPiArCQkJICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFEKTsKPiA+ICsKPiA+ICsJaWd0 X21lbWNweV9mcm9tX3djKGxpbmVhciwgbWFwLCBidWYtPmJvLT5zaXplKTsKPiA+ICsKPiA+ICsJ bXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGNvcHlfbGluZWFyX3RvX2NwdShpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4gPiArCQkJ ICAgICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gPiArewo+ID4gKwl2b2lkICptYXA7Cj4gPiArCj4g PiArCWdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmJvLT5oYW5kbGUsCj4gPiArCQkgICAgICAgSTkx NV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gPiArCj4gPiArCW1hcCA9 IGdlbV9tbWFwX19jcHUoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKPiA+ICsJCQkgICAgYnVmLT5i by0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gPiArCj4gPiArCW1lbWNweShtYXAs IGxpbmVhciwgYnVmLT5iby0+c2l6ZSk7Cj4gPiArCj4gPiArCW11bm1hcChtYXAsIGJ1Zi0+Ym8t PnNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBjb3B5X2NwdV90b19saW5lYXIo aW50IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ID4gKwkJCSAgICAgICB1aW50MzJfdCAqbGlu ZWFyKQo+ID4gK3sKPiA+ICsJdm9pZCAqbWFwOwo+ID4gKwo+ID4gKwlnZW1fc2V0X2RvbWFpbihm ZCwgYnVmLT5iby0+aGFuZGxlLAo+ID4gKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDAp Owo+ID4gKwo+ID4gKwltYXAgPSBnZW1fbW1hcF9fY3B1KGZkLCBidWYtPmJvLT5oYW5kbGUsIDAs Cj4gPiArCQkJICAgIGJ1Zi0+Ym8tPnNpemUsIFBST1RfUkVBRCk7Cj4gPiArCj4gPiArCW1lbWNw eShsaW5lYXIsIG1hcCwgYnVmLT5iby0+c2l6ZSk7Cj4gPiArCj4gPiArCW11bm1hcChtYXAsIGJ1 Zi0+Ym8tPnNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGNvcHlfYnVmX3RvX2xpbmVhcihz dHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiA+ICsJCQl1aW50MzJf dCAqbGluZWFyKQo+ID4gK3sKPiA+ICsJaWd0X2Fzc2VydChib3BzKTsKPiA+ICsKPiA+ICsJc3dp dGNoIChidWYtPnRpbGluZykgewo+ID4gKwljYXNlIEk5MTVfVElMSU5HX05PTkU6Cj4gPiArCQlp Z3RfYXNzZXJ0KGJvcHMtPnRvX2xpbmVhcik7Cj4gPiArCQlib3BzLT50b19saW5lYXIoYm9wcy0+ ZmQsIGJ1ZiwgbGluZWFyKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIEk5MTVfVElMSU5HX1g6 Cj4gPiArCQlpZ3RfYXNzZXJ0KGJvcHMtPnhfdG9fbGluZWFyKTsKPiA+ICsJCWJvcHMtPnhfdG9f bGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBJ OTE1X1RJTElOR19ZOgo+ID4gKwkJaWd0X2Fzc2VydChib3BzLT55X3RvX2xpbmVhcik7Cj4gPiAr CQlib3BzLT55X3RvX2xpbmVhcihib3BzLT5mZCwgYnVmLCBsaW5lYXIpOwo+ID4gKwkJYnJlYWs7 Cj4gPiArCWNhc2UgSTkxNV9USUxJTkdfWWY6Cj4gPiArCQlpZ3RfYXNzZXJ0KGJvcHMtPnlmX3Rv X2xpbmVhcik7Cj4gPiArCQlib3BzLT55Zl90b19saW5lYXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFy KTsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIEk5MTVfVElMSU5HX1lzOgo+ID4gKwkJaWd0X2Fz c2VydChib3BzLT55c190b19saW5lYXIpOwo+ID4gKwkJYm9wcy0+eXNfdG9fbGluZWFyKGJvcHMt PmZkLCBidWYsIGxpbmVhcik7Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ ICt2b2lkIGNvcHlfbGluZWFyX3RvX2J1ZihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGln dF9idWYgKmJ1ZiwKPiA+ICsJCQl1aW50MzJfdCAqbGluZWFyKQo+ID4gK3sKPiA+ICsJaWd0X2Fz c2VydChib3BzKTsKPiA+ICsKPiA+ICsJc3dpdGNoIChidWYtPnRpbGluZykgewo+ID4gKwljYXNl IEk5MTVfVElMSU5HX05PTkU6Cj4gPiArCQlpZ3RfYXNzZXJ0KGJvcHMtPmxpbmVhcl90byk7Cj4g PiArCQlib3BzLT5saW5lYXJfdG8oYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyKTsKPiA+ICsJCWJyZWFr Owo+ID4gKwljYXNlIEk5MTVfVElMSU5HX1g6Cj4gPiArCQlpZ3RfYXNzZXJ0KGJvcHMtPmxpbmVh cl90b194KTsKPiA+ICsJCWJvcHMtPmxpbmVhcl90b194KGJvcHMtPmZkLCBidWYsIGxpbmVhcik7 Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSBJOTE1X1RJTElOR19ZOgo+ID4gKwkJaWd0X2Fzc2Vy dChib3BzLT5saW5lYXJfdG9feSk7Cj4gPiArCQlib3BzLT5saW5lYXJfdG9feShib3BzLT5mZCwg YnVmLCBsaW5lYXIpOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgSTkxNV9USUxJTkdfWWY6Cj4g PiArCQlpZ3RfYXNzZXJ0KGJvcHMtPmxpbmVhcl90b195Zik7Cj4gPiArCQlib3BzLT5saW5lYXJf dG9feWYoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwljYXNlIEk5 MTVfVElMSU5HX1lzOgo+ID4gKwkJaWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG9feXMpOwo+ID4g KwkJYm9wcy0+bGluZWFyX3RvX3lzKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7Cj4gPiArCQlicmVh azsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdHJ1Y3QgYnVmX29wcyBidWZfb3BzX2Fycltd ID0gewo+ID4gKwkvKiBHZW5lcmF0aW9ucyAwIC0gOCAqLwo+ID4gK3sKPiA+ICsJLmdlbl9zdGFy dCAgICAgICAgID0gMCwKPiA+ICsJLmdlbl9lbmQgICAgICAgICAgID0gOCwKPiA+ICsJLnN1cHBv cnRlZF90aWxlcyAgID0gVElMRV9OT05FIHwgVElMRV9YIHwgVElMRV9ZLAo+ID4gKwkuaHdfdGls ZXMgICAgICAgICAgPSBUSUxFX1ggfCBUSUxFX1ksCj4gPiArCS5saW5lYXJfdG8gICAgICAgICA9 IGNvcHlfbGluZWFyX3RvX2NwdSwKPiA+ICsJLmxpbmVhcl90b194ICAgICAgID0gY29weV9saW5l YXJfdG9fZ3R0LAo+ID4gKwkubGluZWFyX3RvX3kgICAgICAgPSBjb3B5X2xpbmVhcl90b19ndHQs Cj4gPiArCS50b19saW5lYXIgICAgICAgICA9IGNvcHlfY3B1X3RvX2xpbmVhciwKPiA+ICsJLnhf dG9fbGluZWFyICAgICAgID0gY29weV9ndHRfdG9fbGluZWFyLAo+ID4gKwkueV90b19saW5lYXIg ICAgICAgPSBjb3B5X2d0dF90b19saW5lYXIsCj4gPiArfSwKPiA+ICsvKiBHZW5lcmF0aW9ucyA5 IC0gMTEgKi8KPiA+ICt7Cj4gPiArCS5nZW5fc3RhcnQgICAgICAgICA9IDksCj4gPiArCS5nZW5f ZW5kICAgICAgICAgICA9IDExLAo+ID4gKwkuc3VwcG9ydGVkX3RpbGVzICAgPSBUSUxFX05PTkUg fCBUSUxFX1ggfCBUSUxFX1kgfCBUSUxFX1lmLAo+ID4gKwkuaHdfdGlsZXMgICAgICAgICAgPSBU SUxFX1ggfCBUSUxFX1ksCj4gPiArCS5saW5lYXJfdG8gICAgICAgICA9IGNvcHlfbGluZWFyX3Rv X2NwdSwKPiA+ICsJLmxpbmVhcl90b194ICAgICAgID0gY29weV9saW5lYXJfdG9fZ3R0LAo+ID4g KwkubGluZWFyX3RvX3kgICAgICAgPSBjb3B5X2xpbmVhcl90b19ndHQsCj4gPiArCS5saW5lYXJf dG9feWYgICAgICA9IGNvcHlfbGluZWFyX3RvX3lmLAo+ID4gKwkudG9fbGluZWFyICAgICAgICAg PSBjb3B5X2NwdV90b19saW5lYXIsCj4gPiArCS54X3RvX2xpbmVhciAgICAgICA9IGNvcHlfZ3R0 X3RvX2xpbmVhciwKPiA+ICsJLnlfdG9fbGluZWFyICAgICAgID0gY29weV9ndHRfdG9fbGluZWFy LAo+ID4gKwkueWZfdG9fbGluZWFyICAgICAgPSBjb3B5X3lmX3RvX2xpbmVhciwKPiA+ICt9LAo+ ID4gKy8qIEdlbmVyYXRpb24gMTIgKi8KPiA+ICt7Cj4gPiArCS5nZW5fc3RhcnQgICAgICAgICA9 IDEyLAo+ID4gKwkuZ2VuX2VuZCAgICAgICAgICAgPSAxMiwKPiA+ICsJLnN1cHBvcnRlZF90aWxl cyAgID0gVElMRV9OT05FIHwgVElMRV9YIHwgVElMRV9ZIHwgVElMRV9ZZiB8IFRJTEVfWXMsCj4g PiArCS5saW5lYXJfdG8gICAgICAgICA9IGNvcHlfbGluZWFyX3RvX3djLAo+ID4gKwkubGluZWFy X3RvX3ggICAgICAgPSBjb3B5X2xpbmVhcl90b194LAo+ID4gKwkubGluZWFyX3RvX3kgICAgICAg PSBjb3B5X2xpbmVhcl90b195LAo+ID4gKwkubGluZWFyX3RvX3lmICAgICAgPSBjb3B5X2xpbmVh cl90b195ZiwKPiA+ICsJLmxpbmVhcl90b195cyAgICAgID0gTlVMTCwgICAgICAgICAgICAgICAv KiB0byBiZSBpbXBsZW1lbnRlZCAqLwo+ID4gKwkudG9fbGluZWFyICAgICAgICAgPSBjb3B5X3dj X3RvX2xpbmVhciwKPiA+ICsJLnhfdG9fbGluZWFyICAgICAgID0gY29weV94X3RvX2xpbmVhciwK PiA+ICsJLnlfdG9fbGluZWFyICAgICAgID0gY29weV95X3RvX2xpbmVhciwKPiA+ICsJLnlmX3Rv X2xpbmVhciAgICAgID0gY29weV95Zl90b19saW5lYXIsCj4gPiArCS55c190b19saW5lYXIgICAg ICA9IE5VTEwsICAgICAgICAgICAgICAgLyogdG8gYmUgaW1wbGVtZW50ZWQgKi8KPiA+ICt9LAo+ ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludCBfX2dlbV9nZXRfdGlsaW5nKGludCBmZCwgc3Ry dWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nICphcmcpCj4gPiArewo+ID4gKwlpbnQgZXJyOwo+ ID4gKwo+ID4gKwllcnIgPSAwOwo+ID4gKwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9HRU1fR0VUX1RJTElORywgYXJnKSkKPiA+ICsJCWVyciA9IC1lcnJubzsKPiA+ICsJZXJybm8g PSAwOwo+ID4gKwo+ID4gKwlyZXR1cm4gZXJyOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9v bCBfX2dldF90aWxpbmcoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90ICp0aWxpbmcs Cj4gPiArCQkJIHVpbnQzMl90ICpzd2l6emxlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9nZXRfdGlsaW5nIGdldF90aWxpbmc7Cj4gPiArCj4gPiArCW1lbXNldCgmZ2V0X3RpbGlu ZywgMCwgc2l6ZW9mKGdldF90aWxpbmcpKTsKPiA+ICsJZ2V0X3RpbGluZy5oYW5kbGUgPSBoYW5k bGU7Cj4gPiArCj4gPiArCWlmIChfX2dlbV9nZXRfdGlsaW5nKGZkLCAmZ2V0X3RpbGluZykgIT0g MCkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJKnRpbGluZyA9IGdldF90aWxpbmcu dGlsaW5nX21vZGU7Cj4gPiArCSpzd2l6emxlID0gZ2V0X3RpbGluZy5zd2l6emxlX21vZGU7Cj4g PiArCj4gPiArCXJldHVybiBnZXRfdGlsaW5nLnBoeXNfc3dpenpsZV9tb2RlID09IGdldF90aWxp bmcuc3dpenpsZV9tb2RlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCBwcm9iZV9od190 aWxpbmcoaW50IGZkLCB1aW50MzJfdCB0aWxpbmcpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3NldF90aWxpbmcgc3Q7Cj4gPiArCXVpbnQ2NF90IHNpemUgPSAxMDI0ICogMTAyNDsK PiA+ICsJdWludDMyX3QgaGFuZGxlLCBidWZfdGlsaW5nLCBidWZfc3dpenpsZTsKPiA+ICsJdWlu dDMyX3Qgc3RyaWRlOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwlib29sIGlzX3NldDsKPiA+ICsKPiA+ ICsJaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19YKQo+ID4gKwkJc3RyaWRlID0gNTEyOwo+ID4g KwllbHNlIGlmICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKPiA+ICsJCXN0cmlkZSA9IDEyODsK PiA+ICsJZWxzZQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwloYW5kbGUgPSBnZW1f Y3JlYXRlKGZkLCBzaXplKTsKPiA+ICsKPiA+ICsJLyogU2luZ2xlIHNob3QsIGlmIG5vIGZlbmNl cyBhcmUgYXZhaWxhYmxlIHdlIGZhaWwgaW1tZWRpYXRlbHkgKi8KPiA+ICsJc3QuaGFuZGxlID0g aGFuZGxlOwo+ID4gKwlzdC50aWxpbmdfbW9kZSA9IHRpbGluZzsKPiA+ICsJc3Quc3RyaWRlID0g dGlsaW5nID8gc3RyaWRlIDogMDsKPiA+ICsJcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1 X0dFTV9TRVRfVElMSU5HLCAmc3QpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlbmQ7Cj4g PiArCj4gPiArCWlzX3NldCA9IF9fZ2V0X3RpbGluZyhmZCwgaGFuZGxlLCAmYnVmX3RpbGluZywg JmJ1Zl9zd2l6emxlKTsKPiA+ICsKPiA+ICtlbmQ6Cj4gPiArCWdlbV9jbG9zZShmZCwgaGFuZGxl KTsKPiA+ICsKPiA+ICsJcmV0dXJuIGlzX3NldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RydWN0IGJ1 Zl9vcHMgKmJ1Zl9vcHNfZ2V0KGludCBmZCwgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyKQo+ID4g K3sKPiA+ICsJc3RydWN0IGJ1Zl9vcHMgKmJvcHMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpib3BzKSk7 Cj4gPiArCXVpbnQzMl90IGRldmlkOwo+ID4gKwlpbnQgZ2VuZXJhdGlvbjsKPiA+ICsKPiA+ICsJ aWd0X2Fzc2VydChidWZtZ3IpOwo+ID4gKwlpZ3RfYXNzZXJ0KGJvcHMpOwo+ID4gKwo+ID4gKwlk ZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOwo+ID4gKwlnZW5lcmF0aW9uID0gaW50ZWxf Z2VuKGRldmlkKTsKPiA+ICsKPiA+ICsJLyogUHJlZGVmaW5lZCBzZXR0aW5ncyAqLwo+ID4gKwlm b3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVmX29wc19hcnIpOyBpKyspIHsKPiA+ICsJ CWlmIChnZW5lcmF0aW9uID49IGJ1Zl9vcHNfYXJyW2ldLmdlbl9zdGFydCAmJgo+ID4gKwkJCQln ZW5lcmF0aW9uIDw9IGJ1Zl9vcHNfYXJyW2ldLmdlbl9lbmQpIHsKPiA+ICsJCQltZW1jcHkoYm9w cywgJmJ1Zl9vcHNfYXJyW2ldLCBzaXplb2YoKmJvcHMpKTsKPiA+ICsJCQlib3BzLT5mZCA9IGZk Owo+ID4gKwkJCWJvcHMtPmJ1Zm1nciA9IGJ1Zm1ncjsKPiA+ICsJCQlib3BzLT5pbnRlbF9nZW4g PSBnZW5lcmF0aW9uOwo+ID4gKwkJCWlndF9kZWJ1ZygiZ2VuZXJhdGlvbjogJWQsIHN1cHBvcnRl ZCB0aWxlczogMHglMDJ4XG4iLAo+ID4gKwkJCQkgIGdlbmVyYXRpb24sIGJvcHMtPnN1cHBvcnRl ZF90aWxlcyk7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyog TGV0J3MgcHJvYmUgWCBhbmQgWSBodyB0aWxpbmcgc3VwcG9ydCAqLwo+ID4gKwlpZiAoYm9wcy0+ aHdfdGlsZXMgJiBUSUxFX1gpIHsKPiA+ICsJCWJvb2wgc3VwcG9ydGVkID0gcHJvYmVfaHdfdGls aW5nKGZkLCBJOTE1X1RJTElOR19YKTsKPiA+ICsKPiA+ICsJCWlndF9kZWJ1ZygiWCBmZW5jZSBz dXBwb3J0OiAlc1xuIiwgc3VwcG9ydGVkID8gInllcyIgOiAibm8iKTsKPiA+ICsJCWlmICghc3Vw cG9ydGVkKSB7Cj4gPiArCQkJYm9wcy0+aHdfdGlsZXMgJj0gflRJTEVfWDsKPiA+ICsJCQlib3Bz LT5saW5lYXJfdG9feCA9IGNvcHlfbGluZWFyX3RvX3g7Cj4gPiArCQkJYm9wcy0+eF90b19saW5l YXIgPSBjb3B5X3hfdG9fbGluZWFyOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChi b3BzLT5od190aWxlcyAmIFRJTEVfWSkgewo+ID4gKwkJYm9vbCBzdXBwb3J0ZWQgPSBwcm9iZV9o d190aWxpbmcoZmQsIEk5MTVfVElMSU5HX1kpOwo+ID4gKwo+ID4gKwkJaWd0X2RlYnVnKCJZIGZl bmNlIHN1cHBvcnQ6ICVzXG4iLCBzdXBwb3J0ZWQgPyAieWVzIiA6ICJubyIpOwo+ID4gKwkJaWYg KCFzdXBwb3J0ZWQpIHsKPiA+ICsJCQlib3BzLT5od190aWxlcyAmPSB+VElMRV9ZOwo+ID4gKwkJ CWJvcHMtPmxpbmVhcl90b195ID0gY29weV9saW5lYXJfdG9feTsKPiA+ICsJCQlib3BzLT55X3Rv X2xpbmVhciA9IGNvcHlfeV90b19saW5lYXI7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJ aWd0X2Fzc2VydChib3BzLT5pbnRlbF9nZW4pOwo+ID4gKwo+ID4gKwlyZXR1cm4gYm9wczsKPiA+ ICt9Cj4gPiArCj4gPiArdm9pZCBidWZfb3BzX3N3aXRjaF90b19zb2Z3YXJlX3RpbGluZyhzdHJ1 Y3QgYnVmX29wcyAqYm9wcykKPiBzbyBmYXIgc28gZ29vZCA6KSBmaXJzdCB0eXBvIF4gcy9zb2Z3 YXJlL3NvZnR3YXJlLwo+IENoZWNrIGRlY2xhcmF0aW9uIHRvbyA6KQoKU3VyZSwgSSdsbCBmaXgg dGhpcy4KCj4gPiArewo+ID4gKwlpZ3RfZGVidWcoIlN3aXRjaCB0byBzb2Z0d2FyZSB0aWxpbmcv ZGV0aWxpbmcgb2YgWC9ZIHN1cmZhY2VzXG4iKTsKPiA+ICsKPiA+ICsJaWd0X2Fzc2VydChib3Bz KTsKPiA+ICsKPiA+ICsJYm9wcy0+aHdfdGlsZXMgPSAwOwo+ID4gKwlib3BzLT5saW5lYXJfdG9f eCA9IGNvcHlfbGluZWFyX3RvX3g7Cj4gPiArCWJvcHMtPmxpbmVhcl90b195ID0gY29weV9saW5l YXJfdG9feTsKPiA+ICsJYm9wcy0+eF90b19saW5lYXIgPSBjb3B5X3hfdG9fbGluZWFyOwo+ID4g Kwlib3BzLT55X3RvX2xpbmVhciA9IGNvcHlfeV90b19saW5lYXI7Cj4gPiArfQo+ID4gKwo+ID4g K2Jvb2wgYnVmX29wc19oYXNfaHdfZmVuY2Uoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90 IHRpbGluZykKPiA+ICt7Cj4gPiArCXVpbnQzMl90IHRpbGVfbWFzayA9ICgxIDw8IHRpbGluZyk7 Cj4gPiArCj4gPiArCWlndF9hc3NlcnQoYm9wcyk7Cj4gPiArCj4gPiArCWlmICh0aWxlX21hc2sg JiBib3BzLT5od190aWxlcykKPiA+ICsJCXJldHVybiB0cnVlOwo+ID4gKwo+ID4gKwlyZXR1cm4g ZmFsc2U7Cj4gPiArfQo+ID4gKwo+ID4gK2Jvb2wgYnVmX29wc19oYXNfdGlsaW5nX3N1cHBvcnQo c3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGluZykKPiA+ICt7Cj4gPiArCXVpbnQz Ml90IHRpbGVfbWFzayA9ICgxIDw8IHRpbGluZyk7Cj4gPiArCj4gPiArCWlndF9hc3NlcnQoYm9w cyk7Cj4gPiArCj4gPiArCWlmICh0aWxlX21hc2sgJiBib3BzLT5zdXBwb3J0ZWRfdGlsZXMpCj4g PiArCQlyZXR1cm4gdHJ1ZTsKPiA+ICsKPiA+ICsJcmV0dXJuIGZhbHNlOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50IGJ1Zl9hdXhfd2lkdGgoaW50IGdlbiwgY29uc3Qgc3RydWN0IGlndF9i dWYgKmJ1ZikKPiA+ICt7Cj4gPiArCS8qCj4gPiArCSAqIEdFTjEyKzogVGhlIEFVWCBDQ1MgdW5p dCBzaXplIGlzIDY0IGJ5dGVzIG1hcHBpbmcgNCBtYWluIHN1cmZhY2UKPiA+ICsJICogdGlsZXMu IFRodXMgdGhlIHdpZHRoIG9mIHRoZSBDQ1MgdW5pdCBpcyA0KjMyPTEyOCBwaXhlbHMgb24gdGhl Cj4gPiArCSAqIG1haW4gc3VyZmFjZS4KPiA+ICsJICovCj4gPiArCWlmIChnZW4gPj0gMTIpCj4g PiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfd2lkdGgoYnVmKSwgMTI4KSAqIDY0Owo+ ID4gKwo+ID4gKwlyZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfd2lkdGgoYnVmKSwgMTAyNCkg KiAxMjg7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgYnVmX2F1eF9oZWlnaHQoaW50IGdl biwgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZikKPiA+ICt7Cj4gPiArCS8qCj4gPiArCSAqIEdF TjEyKzogVGhlIEFVWCBDQ1MgdW5pdCBzaXplIGlzIDY0IGJ5dGVzIG1hcHBpbmcgNCBtYWluIHN1 cmZhY2UKPiA+ICsJICogdGlsZXMuIFRodXMgdGhlIGhlaWdodCBvZiB0aGUgQ0NTIHVuaXQgaXMg MzIgcGl4ZWwgcm93cyBvbiB0aGUgbWFpbgo+ID4gKwkgKiBzdXJmYWNlLgo+ID4gKwkgKi8KPiA+ ICsJaWYgKGdlbiA+PSAxMikKPiA+ICsJCXJldHVybiBESVZfUk9VTkRfVVAoaWd0X2J1Zl9oZWln aHQoYnVmKSwgMzIpOwo+ID4gKwo+ID4gKwlyZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfaGVp Z2h0KGJ1ZiksIDUxMikgKiAzMjsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBpZ3RfYnVmX2luaXQo c3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4gPiArCQkgIGludCB3 aWR0aCwgaW50IGhlaWdodCwgaW50IGJwcCwKPiA+ICsJCSAgdWludDMyX3QgcmVxX3RpbGluZywg Ym9vbCBjY3MpCj4gPiArewo+ID4gKwl1aW50MzJfdCB0aWxpbmcgPSByZXFfdGlsaW5nOwo+ID4g Kwlib29sIHN1cHBvcnRzX2h3X2ZlbmNlczsKPiA+ICsKPiA+ICsJaWd0X2Fzc2VydChib3BzKTsK PiA+ICsKPiA+ICsJc3VwcG9ydHNfaHdfZmVuY2VzID0gYnVmX29wc19oYXNfaHdfZmVuY2UoYm9w cywgcmVxX3RpbGluZyk7Cj4gPiArCj4gPiArCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7 Cj4gPiArCj4gPiArCWlmIChjY3MpIHsKPiA+ICsJCWludCBhdXhfd2lkdGgsIGF1eF9oZWlnaHQ7 Cj4gPiArCQlpbnQgc2l6ZTsKPiA+ICsKPiA+ICsJCWlndF9yZXF1aXJlKGJvcHMtPmludGVsX2dl biA+PSA5KTsKPiA+ICsJCWlndF9hc3NlcnQocmVxX3RpbGluZyA9PSBJOTE1X1RJTElOR19ZIHx8 Cj4gPiArCQkJICAgcmVxX3RpbGluZyA9PSBJOTE1X1RJTElOR19ZZik7Cj4gPiArCj4gPiArCQkv Kgo+ID4gKwkJICogT24gR0VOMTIrIHdlIGFsaWduIHRoZSBtYWluIHN1cmZhY2UgdG8gNCAqIDQg bWFpbiBzdXJmYWNlCj4gPiArCQkgKiB0aWxlcywgd2hpY2ggaXMgNjRrQi4gVGhlc2UgMTYgdGls ZXMgYXJlIG1hcHBlZCBieSA0IEFVWAo+ID4gKwkJICogQ0NTIHVuaXRzLCB0aGF0IGlzIDQgKiA2 NCBieXRlcy4gVGhlc2UgNCBDQ1MgdW5pdHMgYXJlIGluCj4gPiArCQkgKiB0dXJuIG1hcHBlZCBi eSBvbmUgTDEgQVVYIHBhZ2UgdGFibGUgZW50cnkuCj4gPiArCQkgKi8KPiA+ICsJCWlmIChib3Bz LT5pbnRlbF9nZW4gPj0gMTIpCj4gPiArCQkJYnVmLT5zdHJpZGUgPSBBTElHTih3aWR0aCAqIChi cHAgLyA4KSwgMTI4ICogNCk7Cj4gPiArCQllbHNlCj4gPiArCQkJYnVmLT5zdHJpZGUgPSBBTElH Tih3aWR0aCAqIChicHAgLyA4KSwgMTI4KTsKPiA+ICsKPiA+ICsJCWlmIChib3BzLT5pbnRlbF9n ZW4gPj0gMTIpCj4gPiArCQkJaGVpZ2h0ID0gQUxJR04oaGVpZ2h0LCA0ICogMzIpOwo+ID4gKwo+ ID4gKwkJYnVmLT5zaXplID0gYnVmLT5zdHJpZGUgKiBoZWlnaHQ7Cj4gPiArCQlidWYtPnRpbGlu ZyA9IHRpbGluZzsKPiA+ICsJCWJ1Zi0+YnBwID0gYnBwOwo+ID4gKwo+ID4gKwkJYXV4X3dpZHRo ID0gYnVmX2F1eF93aWR0aChib3BzLT5pbnRlbF9nZW4sIGJ1Zik7Cj4gPiArCQlhdXhfaGVpZ2h0 ID0gYnVmX2F1eF9oZWlnaHQoYm9wcy0+aW50ZWxfZ2VuLCBidWYpOwo+ID4gKwo+ID4gKwkJYnVm LT5hdXgub2Zmc2V0ID0gYnVmLT5zdHJpZGUgKiBBTElHTihoZWlnaHQsIDMyKTsKPiA+ICsJCWJ1 Zi0+YXV4LnN0cmlkZSA9IGF1eF93aWR0aDsKPiA+ICsKPiA+ICsJCXNpemUgPSBidWYtPmF1eC5v ZmZzZXQgKyBhdXhfd2lkdGggKiBhdXhfaGVpZ2h0Owo+ID4gKwo+ID4gKwkJYnVmLT5ibyA9IGRy bV9pbnRlbF9ib19hbGxvYyhib3BzLT5idWZtZ3IsICIiLCBzaXplLCA0MDk2KTsKPiA+ICsKPiA+ ICsJCWlmICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWSAmJiBzdXBwb3J0c19od19mZW5jZXMpIHsK PiA+ICsJCQlkcm1faW50ZWxfYm9fc2V0X3RpbGluZyhidWYtPmJvLCAmdGlsaW5nLCBidWYtPnN0 cmlkZSk7Cj4gPiArCQkJaWd0X2Fzc2VydF9lcSh0aWxpbmcsIHJlcV90aWxpbmcpOwo+ID4gKwkJ fQo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJLyogUmVxdWVzdGVkIGJvIG11c3QgYmUgaHcgdGlsZWQg Ki8KPiA+ICsJCWlmIChzdXBwb3J0c19od19mZW5jZXMpIHsKPiA+ICsJCQl1bnNpZ25lZCBsb25n IHBpdGNoOwo+ID4gKwo+ID4gKwkJCWJ1Zi0+Ym8gPSBkcm1faW50ZWxfYm9fYWxsb2NfdGlsZWQo Ym9wcy0+YnVmbWdyLCAiIiwKPiA+ICsJCQkJCQkJICAgd2lkdGgsIGhlaWdodCwKPiA+ICsJCQkJ CQkJICAgYnBwIC8gOCwKPiA+ICsJCQkJCQkJICAgJnRpbGluZywgJnBpdGNoLCAwKTsKPiA+ICsJ CQlpZ3RfYXNzZXJ0X2VxKHRpbGluZywgcmVxX3RpbGluZyk7Cj4gPiArCQkJaWd0X2Fzc2VydChi dWYtPmJvKTsKPiA+ICsKPiA+ICsJCQlidWYtPnN0cmlkZSA9IHBpdGNoOwo+ID4gKwkJCWJ1Zi0+ dGlsaW5nID0gdGlsaW5nOwo+ID4gKwkJCWJ1Zi0+c2l6ZSA9IHBpdGNoICogaGVpZ2h0Owo+ID4g KwkJCWJ1Zi0+YnBwID0gYnBwOwo+ID4gKwkJfSBlbHNlIHsKPiA+ICsJCQkvKiBVc2UgYm8gYWxs b2MgYW5kIHNvZnR3YXJlIHRpbGluZy9kZXRpbGluZyAqLwo+ID4gKwkJCWludCBzaXplOwo+ID4g Kwo+ID4gKwkJCWJ1Zi0+c3RyaWRlID0gQUxJR04od2lkdGggKiAoYnBwIC8gOCksIDEyOCk7Cj4g PiArCQkJYnVmLT5zaXplID0gYnVmLT5zdHJpZGUgKiBoZWlnaHQ7Cj4gPiArCQkJYnVmLT50aWxp bmcgPSB0aWxpbmc7Cj4gPiArCQkJYnVmLT5icHAgPSBicHA7Cj4gPiArCj4gPiArCQkJc2l6ZSA9 IGJ1Zi0+c3RyaWRlICogQUxJR04oaGVpZ2h0LCAzMik7Cj4gPiArCj4gPiArCQkJYnVmLT5ibyA9 IGRybV9pbnRlbF9ib19hbGxvYyhib3BzLT5idWZtZ3IsICIiLCBzaXplLAo+ID4gKwkJCQkJCSAg ICAgNDA5Nik7Cj4gPiArCQkJaWd0X2Fzc2VydChidWYtPmJvKTsKPiA+ICsJCX0KPiA+ICsJfQo+ ID4gK30KPiA+IGRpZmYgLS1naXQgYS9saWIvaW50ZWxfYnVmb3BzLmggYi9saWIvaW50ZWxfYnVm b3BzLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMC4uZTUzYzZl YmMKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xpYi9pbnRlbF9idWZvcHMuaAo+ID4gQEAg LTAsMCArMSwyNCBAQAo+ID4gKyNpZm5kZWYgX19JTlRFTF9CVUZPUFNfSF9fCj4gPiArI2RlZmlu ZSBfX0lOVEVMX0JVRk9QU19IX18KPiA+ICsKPiA+ICsjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZm ZXIuaCIKPiA+ICsKPiA+ICtzdHJ1Y3QgYnVmX29wczsKPiA+ICsKPiA+ICtzdHJ1Y3QgYnVmX29w cyAqYnVmX29wc19nZXQoaW50IGZkLCBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IpOwo+ID4gK3Zv aWQgYnVmX29wc19zd2l0Y2hfdG9fc29md2FyZV90aWxpbmcoc3RydWN0IGJ1Zl9vcHMgKmJvcHMp Owo+ID4gKwo+ID4gK3ZvaWQgY29weV9idWZfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3Bz LCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+ID4gKwkJCXVpbnQzMl90ICpsaW5lYXIpOwo+ID4gKwo+ ID4gK3ZvaWQgY29weV9saW5lYXJfdG9fYnVmKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3Qg aWd0X2J1ZiAqYnVmLAo+ID4gKwkJCXVpbnQzMl90ICpsaW5lYXIpOwo+ID4gKwo+ID4gK2Jvb2wg YnVmX29wc19oYXNfaHdfZmVuY2Uoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGlu Zyk7Cj4gPiArYm9vbCBidWZfb3BzX2hhc190aWxpbmdfc3VwcG9ydChzdHJ1Y3QgYnVmX29wcyAq Ym9wcywgdWludDMyX3QgdGlsaW5nKTsKPiA+ICsKPiA+ICt2b2lkIGlndF9idWZfaW5pdChzdHJ1 Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGlndF9idWYgKmJ1ZiwKPiA+ICsJCSAgaW50IHdpZHRo LCBpbnQgaGVpZ2h0LCBpbnQgYnBwLAo+ID4gKwkJICB1aW50MzJfdCByZXFfdGlsaW5nLCBib29s IGNjcyk7Cj4gPiArCj4gPiArI2VuZGlmCj4gPiBkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxk IGIvbGliL21lc29uLmJ1aWxkCj4gPiBpbmRleCAzZjkwODkxMi4uYTg4YzNlODkgMTAwNjQ0Cj4g PiAtLS0gYS9saWIvbWVzb24uYnVpbGQKPiA+ICsrKyBiL2xpYi9tZXNvbi5idWlsZAo+ID4gQEAg LTI2LDYgKzI2LDcgQEAgbGliX3NvdXJjZXMgPSBbCj4gPiAgCSdpZ3RfeDg2LmMnLAo+ID4gIAkn aW5zdGRvbmUuYycsCj4gPiAgCSdpbnRlbF9iYXRjaGJ1ZmZlci5jJywKPiA+ICsJJ2ludGVsX2J1 Zm9wcy5jJywKPiA+ICAJJ2ludGVsX2NoaXBzZXQuYycsCj4gPiAgCSdpbnRlbF9kZXZpY2VfaW5m by5jJywKPiA+ICAJJ2ludGVsX29zLmMnLAo+ID4gLS0gCj4gPiAyLjIzLjAKPiA+Cj4gSHVnZSBh bmQgcXVpdGUgaW1wb3J0YW50IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIQo+IEthc2lhCgpJZiBJIGdv b2QgdW5kZXJzdGFuZCBDaHJpcyBpbnRlbnRpb24gSSBzaG91bGQgYWxzbyBwcm92aWRlIGZ1bmN0 aW9uCnRvIGdldCB0aWxlZCBidWZmZXIgZm9yIGttcy4KClpiaWduaWV3Cl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0Cmln dC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==