From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 951826E1C0 for ; Wed, 8 Jan 2020 11:58:31 +0000 (UTC) Date: Wed, 8 Jan 2020 12:58:28 +0100 From: Katarzyna Dec Message-ID: <20200108115828.GA22921@kdec5-desk.ger.corp.intel.com> References: <20200108075411.8943-1-zbigniew.kempczynski@intel.com> <20200108075411.8943-2-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200108075411.8943-2-zbigniew.kempczynski@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v5 1/3] 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: Zbigniew =?utf-8?Q?Kempczy=C5=84ski?= , igt-dev@lists.freedesktop.org List-ID: T24gV2VkLCBKYW4gMDgsIDIwMjAgYXQgMDg6NTQ6MDlBTSArMDEwMCwgWmJpZ25pZXcgS2VtcGN6 ecWEc2tpIHdyb3RlOgo+IERpZmZlcmVudCBHRU5zIHN1cHBvcnRzIGRpZmZlcmVudCB0aWxlIHN1 cmZhY2VzLiBPbGRlciBHRU5zCj4gaGF2ZSBIVyBmZW5jZXMgdG8gYWxsb3cgWCAvIFkgc3VyZmFj ZSB0aWxpbmcgLyBkZXRpbGluZy4KPiBOZXdlciBHRU5zIGhhdmUgdG8gdGlsZSAvIGRldGlsZSBz dWNoIHN1cmZhY2UgaW4gc29mdHdhcmUuCj4gCj4gVG8gbWFrZSB0ZXN0IGRldmVsb3BlciBsaWZl IGVhc2llciB0aGlzIGNvZGUgYWRkcyBidWZmZXIKPiBvcGVyYXRpb25zIChzaG9ydCBidWZfb3Bz KSB0byB1c2UgYXBwcm9wcmlhdGUgZnVuY3Rpb25zIGFsbG93aW5nCj4gY29weWluZyBsaW5lYXIg YnVmZmVyIHRvIEJPIGFuZCBmcm9tIEJPIHRvIGxpbmVhciBidWZmZXIKPiByZWdhcmRsZXNzIEdQ VSBnZW5lcmF0aW9uIGFuZCB0aWxpbmcvc3dpenpsaW5nIHdpdGhpbiBCTy4gRm9yIEdFTnMKPiBo YXZpbmcgZmVuY2VzIHN1cHBvcnQgcHJlZmVyZW5jZSBpcyB0byB1c2UgdGhlbSBpZiB0aGV5IGFy ZSBhdmFpbGFibGUKPiAoWCAvIFkgdGlsaW5nIGlzIHByb2JlZCBvbiBidWZfb3BzIGluaXRpYWxp emF0aW9uKS4KPiAKPiBOb3RlOiBvbiBHZW4yIGNvZGUgc3VwcG9ydHMgb25seSBIVyB0aWxpbmcg YXQgdGhlIG1vbWVudC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1wY3p5xYRza2kg PHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KPiBDYzogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IEthdGFyenluYSBEZWMgPGthdGFyenluYS5kZWNA aW50ZWwuY29tPgo+IC0tLQo+ICAuLi4vaWd0LWdwdS10b29scy9pZ3QtZ3B1LXRvb2xzLWRvY3Mu eG1sICAgICAgfCAgICAxICsKPiAgbGliL01ha2VmaWxlLnNvdXJjZXMgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgMiArCj4gIGxpYi9pbnRlbF9idWZvcHMuYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDExMjAgKysrKysrKysrKysrKysrKysKPiAgbGliL2ludGVsX2J1Zm9wcy5o ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4NCArKwo+ICBsaWIvbWVzb24uYnVpbGQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKPiAgNSBmaWxlcyBjaGFuZ2Vk LCAxMjA4IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9idWZv cHMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2ludGVsX2J1Zm9wcy5oCj4gCj4gZGlmZiAt LWdpdCBhL2RvY3MvcmVmZXJlbmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnht bCBiL2RvY3MvcmVmZXJlbmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbAo+ IGluZGV4IDQ1NGQ2NGU1Li5hYTlmZWYyMCAxMDA2NDQKPiAtLS0gYS9kb2NzL3JlZmVyZW5jZS9p Z3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKPiArKysgYi9kb2NzL3JlZmVyZW5j ZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKPiBAQCAtNDIsNiArNDIsNyBA QAo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF92Z2VtLnhtbCIvPgo+ICAgICAgPHhp OmluY2x1ZGUgaHJlZj0ieG1sL2lndF94ODYueG1sIi8+Cj4gICAgICA8eGk6aW5jbHVkZSBocmVm PSJ4bWwvaW50ZWxfYmF0Y2hidWZmZXIueG1sIi8+Cj4gKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4 bWwvaW50ZWxfYnVmb3BzLnhtbCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2ludGVs X2NoaXBzZXQueG1sIi8+Cj4gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaW50ZWxfaW8ueG1s Ii8+Cj4gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaW9jdGxfd3JhcHBlcnMueG1sIi8+Cj4g ZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMK PiBpbmRleCA1ZGQzOTYyZS4uZGEzNGVhZTcgMTAwNjQ0Cj4gLS0tIGEvbGliL01ha2VmaWxlLnNv dXJjZXMKPiArKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IEBAIC02Nyw2ICs2Nyw4IEBAIGxp Yl9zb3VyY2VfbGlzdCA9CSAJXAo+ICAJaW50ZWxfYXViLmgJCVwKPiAgCWludGVsX2JhdGNoYnVm ZmVyLmMJXAo+ICAJaW50ZWxfYmF0Y2hidWZmZXIuaAlcCj4gKwlpbnRlbF9idWZvcHMuYwkJXAo+ ICsJaW50ZWxfYnVmb3BzLmgJCVwKPiAgCWludGVsX2NoaXBzZXQuYwkJXAo+ICAJaW50ZWxfY2hp cHNldC5oCQlcCj4gIAlpbnRlbF9kZXZpY2VfaW5mby5jCVwKPiBkaWZmIC0tZ2l0IGEvbGliL2lu dGVsX2J1Zm9wcy5jIGIvbGliL2ludGVsX2J1Zm9wcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMC4uZmZkMzQ5NGEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL2lu dGVsX2J1Zm9wcy5jCj4gQEAgLTAsMCArMSwxMTIwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDC qSAyMDIwIEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4g KyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAq Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSAiaWd0Lmgi Cj4gKyNpbmNsdWRlICJpZ3RfeDg2LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKPiAr Cj4gKy8qKgo+ICsgKiBTRUNUSU9OOmludGVsX2J1Zm9wcwo+ICsgKiBAc2hvcnRfZGVzY3JpcHRp b246IEJ1ZmZlciBvcGVyYXRpb24gb24gdGlsZWQgc3VyZmFjZXMKPiArICogQHRpdGxlOiBCdWZm ZXIgb3BlcmF0aW9ucwo+ICsgKiBAaW5jbHVkZTogaWd0LmgKPiArICoKPiArICogIyBCdWZmZXIg b3BlcmF0aW9ucwo+ICsgKgo+ICsgKiBJbnRlbCBHUFUgZGV2aWNlcyBzdXBwb3J0cyBkaWZmZXJl bnQgc2V0IG9mIHRpbGVkIHN1cmZhY2VzLgo+ICsgKiBDaGVja2luZyBlYWNoIHRpbWUgd2hhdCB0 aWxlIGZvcm1hdHMgYXJlIHN1cHBvcnRzIGlzIGN1bWJlcnNvbWUgYW5kCj4gKyAqIGVycm9yIHBy b25lLgo+ICsgKgo+ICsgKiBCdWZmZXIgb3BlcmF0aW9uIChidWZfb3BzKSBwcm92aWRlIGEgd3Jh cHBlciB0byBjb25kaXRpb25hbCBjb2RlIHdoaWNoCj4gKyAqIGNhbiBiZSB1c2VkIHdpdGhvdXQg d29ycnlpbmcgb2YgaW1wbGVtZW50YXRpb24gZGV0YWlscyBnaXZpbmc6Cj4gKyAqIC0gY29weSBs aW5lYXIgdG8gdGlsZWQgYnVmZmVyCj4gKyAqIC0gY29weSB0aWxlZCBidWZmZXIgdG8gbGluZWFy Cj4gKyAqCj4gKyAqIEZvbGxvd2luZyBjb2RlIG9yZGVyIHNob3VsZCBiZSB1c2VkIChsaW5lYXIg aXMgcGxhaW4gbWVtb3J5IHdpdGggc29tZQo+ICsgKiBpbWFnZSBkYXRhKToKPiArICoKPiArICog fFs8IS0tIGxhbmd1YWdlPSJjIiAtLT4KPiArICogc3RydWN0IGJ1Zl9vcHMgKmJvcHM7Cj4gKyAq IHN0cnVjdCBpbnRlbF9idWYgaWJ1ZjsKPiArICogLi4uCj4gKyAqIGJvcHMgPSBidWZfb3BzX2Ny ZWF0ZShmZCk7Cj4gKyAqIGludGVsX2J1Zl9pbml0KGJvcHMsICZpYnVmLCA1MTIsIDUxMiwgMzIs IEk5MTVfVElMSU5HX1gsIGZhbHNlKTsKPiArICogLi4uCj4gKyAqIGxpbmVhcl90b19pbnRlbF9i dWYoYm9wcywgJmlidWYsIGxpbmVhcik7Cj4gKyAqIC4uLgo+ICsgKiBpbnRlbF9idWZfdG9fbGlu ZWFyKGJvcHMsICZpYnVmLCBsaW5lYXIpOwo+ICsgKiAuLi4KPiArICogaW50ZWxfYnVmX2Nsb3Nl KGJvcHMsICZpYnVmKTsKPiArICogLi4uCj4gKyAqIGJ1Zl9vcHNfZGVzdHJveShib3BzKTsKPiAr ICogXXwKPiArICoKPiArICogQ2FsbGluZyBidWZfb3BzX2NyZWF0ZShmZCkgcHJvYmVzIGhhcmR3 YXJlIGNhcGFiaWxpdGllcyAoc3VwcG9ydGVkIGZlbmNlcywKPiArICogc3dpenpsaW5nKSBhbmQg cmV0dXJucyBvcGFxdWUgcG9pbnRlciB0byBidWZfb3BzLiBGcm9tIG5vdyBvbgo+ICsgKiBpbnRl bF9idWZfdG9fbGluZWFyKCkgYW5kIGxpbmVhcl90b19pbnRlbF9idWYoKSB3aWxsIGNob29zZSBh cHByb3ByaWF0ZQo+ICsgKiBmdW5jdGlvbiB0byBkbyB0aGUgam9iLgo+ICsgKgo+ICsgKiBOb3Rl OiBidWZvcHMgZG9lc24ndCBzdXBwb3J0IFNXIHRpbGluZyBjb2RlIHlldC4KPiArICovCj4gKwo+ ICsvLyNkZWZpbmUgQlVGT1BTX0RFQlVHR0lORwo+ICsjaWZkZWYgQlVGT1BTX0RFQlVHR0lORwo+ ICsjZGVmaW5lIERFQlVHKC4uLikgcHJpbnRmKF9fVkFfQVJHU19fKQo+ICsjZGVmaW5lIERFQlVH Rk4oKSBERUJVRygiXHQgLT4gJXMoKVxuIiwgX19GVU5DVElPTl9fKQo+ICsjZWxzZQo+ICsjZGVm aW5lIERFQlVHKC4uLikKPiArI2RlZmluZSBERUJVR0ZOKCkKPiArI2VuZGlmCj4gKwo+ICsjZGVm aW5lIFRJTEVfREVGKHgpICgxIDw8ICh4KSkKPiArI2RlZmluZSBUSUxFX05PTkUgICBUSUxFX0RF RihJOTE1X1RJTElOR19OT05FKQo+ICsjZGVmaW5lIFRJTEVfWCAgICAgIFRJTEVfREVGKEk5MTVf VElMSU5HX1gpCj4gKyNkZWZpbmUgVElMRV9ZICAgICAgVElMRV9ERUYoSTkxNV9USUxJTkdfWSkK PiArI2RlZmluZSBUSUxFX1lmICAgICBUSUxFX0RFRihJOTE1X1RJTElOR19ZZikKPiArI2RlZmlu ZSBUSUxFX1lzICAgICBUSUxFX0RFRihJOTE1X1RJTElOR19ZcykKPiArCj4gK3R5cGVkZWYgdm9p ZCAoKmJvX2NvcHkpKHN0cnVjdCBidWZfb3BzICosIHN0cnVjdCBpbnRlbF9idWYgKiwgdWludDMy X3QgKik7Cj4gKwo+ICtzdHJ1Y3QgYnVmX29wcyB7Cj4gKwlpbnQgZmQ7Cj4gKwlpbnQgZ2VuX3N0 YXJ0Owo+ICsJaW50IGdlbl9lbmQ7Cj4gKwlpbnQgaW50ZWxfZ2VuOwo+ICsJdWludDMyX3Qgc3Vw cG9ydGVkX3RpbGVzOwo+ICsJdWludDMyX3Qgc3VwcG9ydGVkX2h3X3RpbGVzOwo+ICsJdWludDMy X3Qgc3dpenpsZV94Owo+ICsJdWludDMyX3Qgc3dpenpsZV95Owo+ICsJYm9fY29weSBsaW5lYXJf dG87Cj4gKwlib19jb3B5IGxpbmVhcl90b194Owo+ICsJYm9fY29weSBsaW5lYXJfdG9feTsKPiAr CWJvX2NvcHkgbGluZWFyX3RvX3lmOwo+ICsJYm9fY29weSBsaW5lYXJfdG9feXM7Cj4gKwlib19j b3B5IHRvX2xpbmVhcjsKPiArCWJvX2NvcHkgeF90b19saW5lYXI7Cj4gKwlib19jb3B5IHlfdG9f bGluZWFyOwo+ICsJYm9fY29weSB5Zl90b19saW5lYXI7Cj4gKwlib19jb3B5IHlzX3RvX2xpbmVh cjsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICp0aWxpbmdfc3RyKHVpbnQzMl90IHRp bGluZykKPiArewo+ICsJc3dpdGNoICh0aWxpbmcpIHsKPiArCWNhc2UgSTkxNV9USUxJTkdfTk9O RTogcmV0dXJuICJOT05FIjsKPiArCWNhc2UgSTkxNV9USUxJTkdfWDogICAgcmV0dXJuICJYIjsK PiArCWNhc2UgSTkxNV9USUxJTkdfWTogICAgcmV0dXJuICJZIjsKPiArCWNhc2UgSTkxNV9USUxJ TkdfWWY6ICAgcmV0dXJuICJZZiI7Cj4gKwljYXNlIEk5MTVfVElMSU5HX1lzOiAgIHJldHVybiAi WXMiOwo+ICsJZGVmYXVsdDogICAgICAgICAgICAgICByZXR1cm4gIlVOS05PV04iOwo+ICsJfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqYm9vbF9zdHIoYm9vbCB2KQo+ICt7Cj4gKwly ZXR1cm4gdiA/ICJ5ZXMiIDogIm5vIjsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29sIGlz X2h3X3RpbGluZ19zdXBwb3J0ZWQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGlu ZykKPiArewo+ICsJcmV0dXJuIGJvcHMtPnN1cHBvcnRlZF9od190aWxlcyAmIFRJTEVfREVGKHRp bGluZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc190aWxpbmdfc3VwcG9ydGVk KHN0cnVjdCBidWZfb3BzICpib3BzLCB1aW50MzJfdCB0aWxpbmcpCj4gK3sKPiArCXJldHVybiBi b3BzLT5zdXBwb3J0ZWRfdGlsZXMgJiBUSUxFX0RFRih0aWxpbmcpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IF9fZ2VtX2dldF90aWxpbmcoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90 aWxpbmcgKmFyZykKPiArewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSAwOwo+ICsJaWYgKGln dF9pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0dFVF9USUxJTkcsIGFyZykpCj4gKwkJZXJy ID0gLWVycm5vOwo+ICsJZXJybm8gPSAwOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4g K3N0YXRpYyBib29sIF9fZ2V0X3RpbGluZyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMy X3QgKnRpbGluZywKPiArCQkJIHVpbnQzMl90ICpzd2l6emxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2dldF90aWxpbmcgZ2V0X3RpbGluZzsKPiArCj4gKwltZW1zZXQoJmdldF90aWxp bmcsIDAsIHNpemVvZihnZXRfdGlsaW5nKSk7Cj4gKwlnZXRfdGlsaW5nLmhhbmRsZSA9IGhhbmRs ZTsKPiArCj4gKwlpZiAoX19nZW1fZ2V0X3RpbGluZyhmZCwgJmdldF90aWxpbmcpICE9IDApCj4g KwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCSp0aWxpbmcgPSBnZXRfdGlsaW5nLnRpbGluZ19tb2Rl Owo+ICsJKnN3aXp6bGUgPSBnZXRfdGlsaW5nLnN3aXp6bGVfbW9kZTsKPiArCWlndF9kZWJ1Zygi YnVmIHRpbGluZzogJXMsIHN3aXp6bGU6ICV4LCBwaHlzX3N3aXp6bGU6ICV4XG4iLAo+ICsJCSAg dGlsaW5nX3N0cihnZXRfdGlsaW5nLnRpbGluZ19tb2RlKSwKPiArCQkgIGdldF90aWxpbmcuc3dp enpsZV9tb2RlLAo+ICsJCSAgZ2V0X3RpbGluZy5waHlzX3N3aXp6bGVfbW9kZSk7Cj4gKwo+ICsJ cmV0dXJuIGdldF90aWxpbmcucGh5c19zd2l6emxlX21vZGUgPT0gZ2V0X3RpbGluZy5zd2l6emxl X21vZGU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19zZXRfdGlsaW5nKGludCBmZCwgdWludDMy X3QgaGFuZGxlLCB1aW50MzJfdCB0aWxpbmcsCj4gKwkJCXVpbnQzMl90IHN0cmlkZSkKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nIHN0Owo+ICsKPiArCXN0LmhhbmRsZSA9 IGhhbmRsZTsKPiArCXN0LnRpbGluZ19tb2RlID0gdGlsaW5nOwo+ICsJc3Quc3RyaWRlID0gdGls aW5nID8gc3RyaWRlIDogMDsKPiArCj4gKwlyZXR1cm4gaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1 X0dFTV9TRVRfVElMSU5HLCAmc3QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXRfaHdfdGls ZWQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZikKPiArewo+ICsJ aW50IHJldDsKPiArCj4gKwlpZiAoYnVmLT50aWxpbmcgIT0gSTkxNV9USUxJTkdfWCAmJiBidWYt PnRpbGluZyAhPSBJOTE1X1RJTElOR19ZKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoIWJ1Zl9v cHNfaGFzX2h3X2ZlbmNlKGJvcHMsIGJ1Zi0+dGlsaW5nKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ cmV0ID0gX19zZXRfdGlsaW5nKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgYnVmLT50aWxpbmcsIGJ1 Zi0+c3RyaWRlKTsKPiArCWlndF9hc3NlcnQocmV0ID09IDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dW5zaWduZWQgbG9uZyBzd2l6emxlX2JpdCh1bnNpZ25lZCBpbnQgYml0LCB1bnNpZ25lZCBsb25n IG9mZnNldCkKPiArewo+ICsJcmV0dXJuIChvZmZzZXQgJiAoMXVsIDw8IGJpdCkpID4+IChiaXQg LSA2KTsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgc3dpenpsZV9hZGRyKHZvaWQg KnB0ciwgdWludDMyX3Qgc3dpenpsZSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBhZGRyID0gdG9f dXNlcl9wb2ludGVyKHB0cik7Cj4gKwo+ICsJc3dpdGNoIChzd2l6emxlKSB7Cj4gKwljYXNlIEk5 MTVfQklUXzZfU1dJWlpMRV9OT05FOgo+ICsJCXJldHVybiBhZGRyOwo+ICsJY2FzZSBJOTE1X0JJ VF82X1NXSVpaTEVfOToKPiArCQlyZXR1cm4gYWRkciBeIHN3aXp6bGVfYml0KDksIGFkZHIpOwo+ ICsJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMDoKPiArCQlyZXR1cm4gYWRkciBeIHN3aXp6 bGVfYml0KDksIGFkZHIpIF4gc3dpenpsZV9iaXQoMTAsIGFkZHIpOwo+ICsJY2FzZSBJOTE1X0JJ VF82X1NXSVpaTEVfOV8xMToKPiArCQlyZXR1cm4gYWRkciBeIHN3aXp6bGVfYml0KDksIGFkZHIp IF4gc3dpenpsZV9iaXQoMTEsIGFkZHIpOwo+ICsJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfOV8x MF8xMToKPiArCQlyZXR1cm4gKGFkZHIgXgo+ICsJCQlzd2l6emxlX2JpdCg5LCBhZGRyKSBeCj4g KwkJCXN3aXp6bGVfYml0KDEwLCBhZGRyKSBeCj4gKwkJCXN3aXp6bGVfYml0KDExLCBhZGRyKSk7 Cj4gKwo+ICsJY2FzZSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjoKPiArCWNhc2UgSTkxNV9C SVRfNl9TV0laWkxFXzlfMTc6Cj4gKwljYXNlIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzE3Ogo+ ICsJZGVmYXVsdDoKPiArCQkvKiBJZiB3ZSBoaXQgdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGltcGxl bWVudCBzdXBwb3J0IGZvciB0aGUKPiArCQkgKiBhcHByb3ByaWF0ZSBzd2l6emxpbmcgbWV0aG9k LiAqLwo+ICsJCWlndF9yZXF1aXJlKGZhbHNlKTsKPiArCQlyZXR1cm4gYWRkcjsKPiArCX0KPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgKnhfcHRyKHZvaWQgKnB0ciwKPiArCQkgICB1bnNpZ25lZCBp bnQgeCwgdW5zaWduZWQgaW50IHksCj4gKwkJICAgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWdu ZWQgaW50IGNwcCkKPiArewo+ICsJY29uc3QgaW50IHRpbGVfd2lkdGggPSA1MTI7Cj4gKwljb25z dCBpbnQgdGlsZV9oZWlnaHQgPSA4Owo+ICsJY29uc3QgaW50IHRpbGVfc2l6ZSA9IHRpbGVfd2lk dGggKiB0aWxlX2hlaWdodDsKPiArCWludCB0aWxlX3gsIHRpbGVfeTsKPiArCWludCBvZmZzZXRf eCwgb2Zmc2V0X3ksIHBvczsKPiArCj4gKwl4ICo9IGNwcDsKPiArCXRpbGVfeCA9IHggLyB0aWxl X3dpZHRoOwo+ICsJdGlsZV95ID0geSAvIHRpbGVfaGVpZ2h0Owo+ICsJb2Zmc2V0X3ggPSAodGls ZV94ICogdGlsZV9zaXplKTsKPiArCW9mZnNldF95ID0gKHRpbGVfeSAqIHN0cmlkZSAqIHRpbGVf aGVpZ2h0KTsKPiArCj4gKwlwb3MgPSBvZmZzZXRfeSArIG9mZnNldF94ICsKPiArCQkJKHkgJSB0 aWxlX2hlaWdodCAqIHRpbGVfd2lkdGgpICsgKHggJSB0aWxlX3dpZHRoKTsKPiArCj4gKwlyZXR1 cm4gcHRyICsgcG9zOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqeV9wdHIodm9pZCAqcHRyLAo+ ICsJCSAgIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwKPiArCQkgICB1bnNpZ25lZCBp bnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY3BwKQo+ICt7Cj4gKwljb25zdCBpbnQgdGlsZV93aWR0 aCA9IDEyODsKPiArCWNvbnN0IGludCB0aWxlX2hlaWdodCA9IDMyOwo+ICsJY29uc3QgaW50IG93 b3JkcyA9IDE2Owo+ICsJY29uc3QgaW50IHRpbGVfc2l6ZSA9IHRpbGVfd2lkdGggKiB0aWxlX2hl aWdodDsKPiArCWludCB0aWxlX3gsIHRpbGVfeTsKPiArCWludCBvZmZzZXRfeCwgb2Zmc2V0X3ks IHBvczsKPiArCWludCBzaGlmdF94LCBzaGlmdF95Owo+ICsKPiArCXggKj0gY3BwOwo+ICsJdGls ZV94ID0geCAvIHRpbGVfd2lkdGg7Cj4gKwl0aWxlX3kgPSB5IC8gdGlsZV9oZWlnaHQ7Cj4gKwlv ZmZzZXRfeCA9IHRpbGVfeCAqIHRpbGVfc2l6ZTsKPiArCW9mZnNldF95ID0gdGlsZV95ICogc3Ry aWRlICogdGlsZV9oZWlnaHQ7Cj4gKwlzaGlmdF94ID0geCAlIG93b3JkcyArICh4ICUgdGlsZV93 aWR0aCkgLyBvd29yZHMgKiB0aWxlX3dpZHRoICogY3BwOwo+ICsJc2hpZnRfeSA9IHkgJSB0aWxl X2hlaWdodCAqIG93b3JkczsKPiArCj4gKwlwb3MgPSBvZmZzZXRfeSArIG9mZnNldF94ICsgc2hp ZnRfeCArIHNoaWZ0X3k7Cj4gKwo+ICsJcmV0dXJuIHB0ciArIHBvczsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgKnlmX3B0cih2b2lkICpwdHIsCj4gKwkJICAgIHVuc2lnbmVkIGludCB4LCB1bnNp Z25lZCBpbnQgeSwKPiArCQkgICAgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNw cCkKPiArewo+ICsJY29uc3QgaW50IHRpbGVfc2l6ZSA9IDQgKiAxMDI0Owo+ICsJY29uc3QgaW50 IHRpbGVfd2lkdGggPSAxMjg7Cj4gKwlpbnQgcm93X3NpemUgPSAoc3RyaWRlIC8gdGlsZV93aWR0 aCkgKiB0aWxlX3NpemU7Cj4gKwo+ICsJeCAqPSBjcHA7IC8qIGNvbnZlcnQgdG8gQnl0ZSBvZmZz ZXQgKi8KPiArCj4gKwo+ICsJLyoKPiArCSAqIFdpdGhpbiBhIDRrIFlmIHRpbGUsIHRoZSBieXRl IHN3aXp6bGluZyBwYXR0ZXJuIGlzCj4gKwkgKiBtc2IuLi4uLi5sc2IKPiArCSAqIHh5eHl4eXl5 eHh4eAo+ICsJICogVGhlIHRpbGVzIHRoZW1zZWx2ZXMgYXJlIGxhaWQgb3V0IGluIHJvdyBtYWpv ciBvcmRlci4KPiArCSAqLwo+ICsJcmV0dXJuIHB0ciArCj4gKwkJCSgoeCAmIDB4ZikgKiAxKSAr IC8qIDR4MSBwaXhlbHMoMzJicHApID0gMTZCICovCj4gKwkJCSgoeSAmIDB4MykgKiAxNikgKyAv KiA0eDQgcGl4ZWxzID0gNjRCICovCj4gKwkJCSgoKHkgJiAweDQpID4+IDIpICogNjQpICsgLyog MXgyIDY0QiBibG9ja3MgKi8KPiArCQkJKCgoeCAmIDB4MTApID4+IDQpICogMTI4KSArIC8qIDJ4 MiA2NEIgYmxvY2tzID0gMjU2QiBibG9jayAqLwo+ICsJCQkoKCh5ICYgMHg4KSA+PiAzKSAqIDI1 NikgKyAvKiAyeDEgMjU2QiBibG9ja3MgKi8KPiArCQkJKCgoeCAmIDB4MjApID4+IDUpICogNTEy KSArIC8qIDJ4MiAyNTZCIGJsb2NrcyAqLwo+ICsJCQkoKCh5ICYgMHgxMCkgPj4gNCkgKiAxMDI0 KSArIC8qIDR4MiAyNTYgYmxvY2tzICovCj4gKwkJCSgoKHggJiAweDQwKSA+PiA2KSAqIDIwNDgp ICsgLyogNHg0IDI1NkIgYmxvY2tzID0gNGsgdGlsZSAqLwo+ICsJCQkoKCh4ICYgfjB4N2YpID4+ IDcpICogdGlsZV9zaXplKSArIC8qIHJvdyBvZiB0aWxlcyAqLwo+ICsJCQkoKCh5ICYgfjB4MWYp ID4+IDUpICogcm93X3NpemUpOwo+ICt9Cj4gKwo+ICt0eXBlZGVmIHZvaWQgKigqZm5fcHRyKSh2 b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAo+ICsJCQl1bnNpZ25lZCBpbnQsIHVu c2lnbmVkIGludCk7Cj4gK3N0YXRpYyBmbl9wdHIgX19nZXRfdGlsZV9mbl9wdHIoaW50IHRpbGlu ZykKPiArewo+ICsJZm5fcHRyIGZuID0gTlVMTDsKPiArCj4gKwlzd2l0Y2ggKHRpbGluZykgewo+ ICsJY2FzZSBJOTE1X1RJTElOR19YOgo+ICsJCWZuID0geF9wdHI7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIEk5MTVfVElMSU5HX1k6Cj4gKwkJZm4gPSB5X3B0cjsKPiArCQlicmVhazsKPiArCWNhc2Ug STkxNV9USUxJTkdfWWY6Cj4gKwkJZm4gPSB5Zl9wdHI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5 MTVfVElMSU5HX1lzOgo+ICsJCS8qIFRvIGJlIGltcGxlbWVudGVkICovCj4gKwkJYnJlYWs7Cj4g Kwl9Cj4gKwo+ICsJaWd0X2Fzc2VydF9mKGZuLCAiQ2FuJ3QgZmluZCB0aWxlIGZ1bmN0aW9uIGZv ciB0aWxpbmc6ICVkXG4iLCB0aWxpbmcpOwo+ICsKPiArCXJldHVybiBmbjsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgX19jb3B5X2xpbmVhcl90byhpbnQgZmQsIHN0cnVjdCBpbnRlbF9idWYgKmJ1 ZiwKPiArCQkJICAgICBjb25zdCB1aW50MzJfdCAqbGluZWFyLAo+ICsJCQkgICAgIGludCB0aWxp bmcsIHVpbnQzMl90IHN3aXp6bGUpCj4gK3sKPiArCWludCBoZWlnaHQgPSBpbnRlbF9idWZfaGVp Z2h0KGJ1Zik7Cj4gKwlpbnQgd2lkdGggPSBpbnRlbF9idWZfd2lkdGgoYnVmKTsKPiArCWZuX3B0 ciBmbiA9IF9fZ2V0X3RpbGVfZm5fcHRyKHRpbGluZyk7Cj4gKwl2b2lkICptYXA7Cj4gKwo+ICsJ Z2VtX3NldF9kb21haW4oZmQsIGJ1Zi0+aGFuZGxlLAo+ICsJCSAgICAgICBJOTE1X0dFTV9ET01B SU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKPiArCj4gKwltYXAgPSBfX2dlbV9tbWFwX29m ZnNldF9fY3B1KGZkLCBidWYtPmhhbmRsZSwgMCwKPiArCQkJCSAgICAgYnVmLT5zaXplLCBQUk9U X1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCWlmICghbWFwKQo+ICsJCW1hcCA9IGdlbV9tbWFwX19j cHUoZmQsIGJ1Zi0+aGFuZGxlLCAwLAo+ICsJCQkJICAgIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEIHwg UFJPVF9XUklURSk7Cj4gKwo+ICsJZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewo+ ICsJCWZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewo+ICsJCQl1aW50MzJfdCAqcHRy ID0gZm4obWFwLCB4LCB5LCBidWYtPnN0cmlkZSwgYnVmLT5icHAvOCk7Cj4gKwo+ICsJCQlpZiAo c3dpenpsZSkKPiArCQkJCXB0ciA9IGZyb21fdXNlcl9wb2ludGVyKHN3aXp6bGVfYWRkcihwdHIs Cj4gKwkJCQkJCQkJICAgICBzd2l6emxlKSk7Cj4gKwkJCSpwdHIgPSBsaW5lYXJbeSAqIHdpZHRo ICsgeF07Cj4gKwkJfQo+ICsJfQo+ICsKPiArCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX3goc3RydWN0IGJ1Zl9vcHMgKmJvcHMs IHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKPiArCQkJICAgICB1aW50MzJfdCAqbGluZWFyKQo+ICt7 Cj4gKwlERUJVR0ZOKCk7Cj4gKwlfX2NvcHlfbGluZWFyX3RvKGJvcHMtPmZkLCBidWYsIGxpbmVh ciwgSTkxNV9USUxJTkdfWCwgYm9wcy0+c3dpenpsZV94KTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgY29weV9saW5lYXJfdG9feShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1 ZiAqYnVmLAo+ICsJCQkgICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gK3sKPiArCURFQlVHRk4oKTsK PiArCV9fY29weV9saW5lYXJfdG8oYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJOTE1X1RJTElOR19Z LCBib3BzLT5zd2l6emxlX3kpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90 b195ZihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAo+ICsJCQkg ICAgICB1aW50MzJfdCAqbGluZWFyKQo+ICt7Cj4gKwlERUJVR0ZOKCk7Cj4gKwlfX2NvcHlfbGlu ZWFyX3RvKGJvcHMtPmZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWWYsIDApOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90b195cyhzdHJ1Y3QgYnVmX29wcyAqYm9wcywg c3RydWN0IGludGVsX2J1ZiAqYnVmLAo+ICsJCQkgICAgICB1aW50MzJfdCAqbGluZWFyKQo+ICt7 Cj4gKwlERUJVR0ZOKCk7Cj4gKwlfX2NvcHlfbGluZWFyX3RvKGJvcHMtPmZkLCBidWYsIGxpbmVh ciwgSTkxNV9USUxJTkdfWXMsIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2NvcHlfdG9f bGluZWFyKGludCBmZCwgc3RydWN0IGludGVsX2J1ZiAqYnVmLAo+ICsJCQkgICAgIHVpbnQzMl90 ICpsaW5lYXIsIGludCB0aWxpbmcsIHVpbnQzMl90IHN3aXp6bGUpCj4gK3sKPiArCWludCBoZWln aHQgPSBpbnRlbF9idWZfaGVpZ2h0KGJ1Zik7Cj4gKwlpbnQgd2lkdGggPSBpbnRlbF9idWZfd2lk dGgoYnVmKTsKPiArCWZuX3B0ciBmbiA9IF9fZ2V0X3RpbGVfZm5fcHRyKHRpbGluZyk7Cj4gKwl2 b2lkICptYXA7Cj4gKwo+ICsJZ2VtX3NldF9kb21haW4oZmQsIGJ1Zi0+aGFuZGxlLCBJOTE1X0dF TV9ET01BSU5fQ1BVLCAwKTsKPiArCj4gKwltYXAgPSBfX2dlbV9tbWFwX29mZnNldF9fY3B1KGZk LCBidWYtPmhhbmRsZSwgMCwgYnVmLT5zaXplLCBQUk9UX1JFQUQpOwo+ICsJaWYgKCFtYXApCj4g KwkJbWFwID0gZ2VtX21tYXBfX2NwdShmZCwgYnVmLT5oYW5kbGUsIDAsIGJ1Zi0+c2l6ZSwgUFJP VF9SRUFEKTsKPiArCj4gKwlmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Cj4gKwkJ Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Cj4gKwkJCXVpbnQzMl90ICpwdHIgPSBm bihtYXAsIHgsIHksIGJ1Zi0+c3RyaWRlLCBidWYtPmJwcC84KTsKPiArCj4gKwkJCWlmIChzd2l6 emxlKQo+ICsJCQkJcHRyID0gZnJvbV91c2VyX3BvaW50ZXIoc3dpenpsZV9hZGRyKHB0ciwKPiAr CQkJCQkJCQkgICAgIHN3aXp6bGUpKTsKPiArCQkJbGluZWFyW3kgKiB3aWR0aCArIHhdID0gKnB0 cjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgY29weV94X3RvX2xpbmVhcihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3Ry dWN0IGludGVsX2J1ZiAqYnVmLAo+ICsJCQkgICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gK3sKPiAr CURFQlVHRk4oKTsKPiArCV9fY29weV90b19saW5lYXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJ OTE1X1RJTElOR19YLCBib3BzLT5zd2l6emxlX3gpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBj b3B5X3lfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpi dWYsCj4gKwkJCSAgICAgdWludDMyX3QgKmxpbmVhcikKPiArewo+ICsJREVCVUdGTigpOwo+ICsJ X19jb3B5X3RvX2xpbmVhcihib3BzLT5mZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1ksIGJv cHMtPnN3aXp6bGVfeSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfeWZfdG9fbGluZWFy KHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCj4gKwkJCSAgICAg IHVpbnQzMl90ICpsaW5lYXIpCj4gK3sKPiArCURFQlVHRk4oKTsKPiArCV9fY29weV90b19saW5l YXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJOTE1X1RJTElOR19ZZiwgMCk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGNvcHlfeXNfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1 Y3QgaW50ZWxfYnVmICpidWYsCj4gKwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gK3sKPiAr CURFQlVHRk4oKTsKPiArCV9fY29weV90b19saW5lYXIoYm9wcy0+ZmQsIGJ1ZiwgbGluZWFyLCBJ OTE1X1RJTElOR19ZcywgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3Rv X2d0dChzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAo+ICsJCQkg ICAgICAgdWludDMyX3QgKmxpbmVhcikKPiArewo+ICsJdm9pZCAqbWFwOwo+ICsKPiArCURFQlVH Rk4oKTsKPiArCj4gKwlnZW1fc2V0X2RvbWFpbihib3BzLT5mZCwgYnVmLT5oYW5kbGUsCj4gKwkJ ICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOwo+ICsKPiAr CW1hcCA9IGdlbV9tbWFwX19ndHQoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLAo+ICsJCQkgICAgYnVm LT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCj4gKwltZW1jcHkobWFwLCBsaW5l YXIsIGJ1Zi0+c2l6ZSk7Cj4gKwo+ICsJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgY29weV9ndHRfdG9fbGluZWFyKHN0cnVjdCBidWZfb3BzICpib3BzLCBz dHJ1Y3QgaW50ZWxfYnVmICpidWYsCj4gKwkJCSAgICAgICB1aW50MzJfdCAqbGluZWFyKQo+ICt7 Cj4gKwl2b2lkICptYXA7Cj4gKwo+ICsJREVCVUdGTigpOwo+ICsKPiArCWdlbV9zZXRfZG9tYWlu KGJvcHMtPmZkLCBidWYtPmhhbmRsZSwKPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwg MCk7Cj4gKwo+ICsJbWFwID0gZ2VtX21tYXBfX2d0dChib3BzLT5mZCwgYnVmLT5oYW5kbGUsCj4g KwkJCSAgICBidWYtPnNpemUsIFBST1RfUkVBRCk7Cj4gKwo+ICsJaWd0X21lbWNweV9mcm9tX3dj KGxpbmVhciwgbWFwLCBidWYtPnNpemUpOwo+ICsKPiArCW11bm1hcChtYXAsIGJ1Zi0+c2l6ZSk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX3djKHN0cnVjdCBidWZfb3Bz ICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCj4gKwkJCSAgICAgIHVpbnQzMl90ICpsaW5l YXIpCj4gK3sKPiArCXZvaWQgKm1hcDsKPiArCj4gKwlERUJVR0ZOKCk7Cj4gKwo+ICsJZ2VtX3Nl dF9kb21haW4oYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLAo+ICsJCSAgICAgICBJOTE1X0dFTV9ET01B SU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKPiArCj4gKwltYXAgPSBfX2dlbV9tbWFwX29m ZnNldF9fd2MoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCAwLAo+ICsJCQkJICAgIGJ1Zi0+c2l6ZSwg UFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gKwlpZiAoIW1hcCkKPiArCQltYXAgPSBnZW1fbW1h cF9fd2MoYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLCAwLAo+ICsJCQkJICAgYnVmLT5zaXplLCBQUk9U X1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCj4gKwltZW1jcHkobWFwLCBsaW5lYXIsIGJ1Zi0+c2l6 ZSk7Cj4gKwo+ICsJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgY29weV93Y190b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9i dWYgKmJ1ZiwKPiArCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKPiArewo+ICsJdm9pZCAqbWFw Owo+ICsKPiArCURFQlVHRk4oKTsKPiArCj4gKwlnZW1fc2V0X2RvbWFpbihib3BzLT5mZCwgYnVm LT5oYW5kbGUsCj4gKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOwo+ICsKPiArCW1h cCA9IF9fZ2VtX21tYXBfb2Zmc2V0X193Yyhib3BzLT5mZCwgYnVmLT5oYW5kbGUsIDAsCj4gKwkJ CQkgICAgYnVmLT5zaXplLCBQUk9UX1JFQUQpOwo+ICsJaWYgKCFtYXApCj4gKwkJbWFwID0gZ2Vt X21tYXBfX3djKGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKPiArCQkJCSAgIGJ1Zi0+c2l6ZSwg UFJPVF9SRUFEKTsKPiArCj4gKwlpZ3RfbWVtY3B5X2Zyb21fd2MobGluZWFyLCBtYXAsIGJ1Zi0+ c2l6ZSk7Cj4gKwo+ICsJbXVubWFwKG1hcCwgYnVmLT5zaXplKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgY29weV9saW5lYXJfdG9fY3B1KHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50 ZWxfYnVmICpidWYsCj4gKwkJCSAgICAgICB1aW50MzJfdCAqbGluZWFyKQo+ICt7Cj4gKwl2b2lk ICptYXA7Cj4gKwo+ICsJREVCVUdGTigpOwo+ICsKPiArCWdlbV9zZXRfZG9tYWluKGJvcHMtPmZk LCBidWYtPmhhbmRsZSwKPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1f RE9NQUlOX0NQVSk7Cj4gKwo+ICsJbWFwID0gX19nZW1fbW1hcF9vZmZzZXRfX2NwdShib3BzLT5m ZCwgYnVmLT5oYW5kbGUsIDAsCj4gKwkJCQkgICAgIGJ1Zi0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJP VF9XUklURSk7Cj4gKwlpZiAoIW1hcCkKPiArCQltYXAgPSBnZW1fbW1hcF9fY3B1KGJvcHMtPmZk LCBidWYtPmhhbmRsZSwgMCwKPiArCQkJCSAgICBidWYtPnNpemUsIFBST1RfUkVBRCB8IFBST1Rf V1JJVEUpOwo+ICsKPiArCW1lbWNweShtYXAsIGxpbmVhciwgYnVmLT5zaXplKTsKPiArCj4gKwlt dW5tYXAobWFwLCBidWYtPnNpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb3B5X2NwdV90 b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKPiAr CQkJICAgICAgIHVpbnQzMl90ICpsaW5lYXIpCj4gK3sKPiArCXZvaWQgKm1hcDsKPiArCj4gKwlE RUJVR0ZOKCk7Cj4gKwo+ICsJZ2VtX3NldF9kb21haW4oYm9wcy0+ZmQsIGJ1Zi0+aGFuZGxlLAo+ ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKPiArCj4gKwltYXAgPSBfX2dlbV9t bWFwX29mZnNldF9fY3B1KGJvcHMtPmZkLCBidWYtPmhhbmRsZSwgMCwKPiArCQkJCSAgICAgYnVm LT5zaXplLCBQUk9UX1JFQUQpOwo+ICsJaWYgKCFtYXApCj4gKwkJbWFwID0gZ2VtX21tYXBfX2Nw dShib3BzLT5mZCwgYnVmLT5oYW5kbGUsIDAsCj4gKwkJCQkgICAgYnVmLT5zaXplLCBQUk9UX1JF QUQpOwo+ICsKPiArCW1lbWNweShsaW5lYXIsIG1hcCwgYnVmLT5zaXplKTsKPiArCj4gKwltdW5t YXAobWFwLCBidWYtPnNpemUpOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2J1Zl90b19saW5lYXIo c3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKPiArCQkJIHVpbnQz Ml90ICpsaW5lYXIpCj4gK3sKPiArCWlndF9hc3NlcnQoYm9wcyk7Cj4gKwo+ICsJc3dpdGNoIChi dWYtPnRpbGluZykgewo+ICsJY2FzZSBJOTE1X1RJTElOR19OT05FOgo+ICsJCWlndF9hc3NlcnQo Ym9wcy0+dG9fbGluZWFyKTsKPiArCQlib3BzLT50b19saW5lYXIoYm9wcywgYnVmLCBsaW5lYXIp Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1RJTElOR19YOgo+ICsJCWlndF9hc3NlcnQoYm9w cy0+eF90b19saW5lYXIpOwo+ICsJCWJvcHMtPnhfdG9fbGluZWFyKGJvcHMsIGJ1ZiwgbGluZWFy KTsKPiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9USUxJTkdfWToKPiArCQlpZ3RfYXNzZXJ0KGJv cHMtPnlfdG9fbGluZWFyKTsKPiArCQlib3BzLT55X3RvX2xpbmVhcihib3BzLCBidWYsIGxpbmVh cik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfVElMSU5HX1lmOgo+ICsJCWlndF9hc3NlcnQo Ym9wcy0+eWZfdG9fbGluZWFyKTsKPiArCQlib3BzLT55Zl90b19saW5lYXIoYm9wcywgYnVmLCBs aW5lYXIpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1RJTElOR19ZczoKPiArCQlpZ3RfYXNz ZXJ0KGJvcHMtPnlzX3RvX2xpbmVhcik7Cj4gKwkJYm9wcy0+eXNfdG9fbGluZWFyKGJvcHMsIGJ1 ZiwgbGluZWFyKTsKPiArCQlicmVhazsKPiArCX0KPiArfQo+ICsKPiArdm9pZCBsaW5lYXJfdG9f aW50ZWxfYnVmKHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCj4g KwkJCSB1aW50MzJfdCAqbGluZWFyKQo+ICt7Cj4gKwlpZ3RfYXNzZXJ0KGJvcHMpOwo+ICsKPiAr CXN3aXRjaCAoYnVmLT50aWxpbmcpIHsKPiArCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKPiArCQlp Z3RfYXNzZXJ0KGJvcHMtPmxpbmVhcl90byk7Cj4gKwkJYm9wcy0+bGluZWFyX3RvKGJvcHMsIGJ1 ZiwgbGluZWFyKTsKPiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9USUxJTkdfWDoKPiArCQlpZ3Rf YXNzZXJ0KGJvcHMtPmxpbmVhcl90b194KTsKPiArCQlib3BzLT5saW5lYXJfdG9feChib3BzLCBi dWYsIGxpbmVhcik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfVElMSU5HX1k6Cj4gKwkJaWd0 X2Fzc2VydChib3BzLT5saW5lYXJfdG9feSk7Cj4gKwkJYm9wcy0+bGluZWFyX3RvX3koYm9wcywg YnVmLCBsaW5lYXIpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJOTE1X1RJTElOR19ZZjoKPiArCQlp Z3RfYXNzZXJ0KGJvcHMtPmxpbmVhcl90b195Zik7Cj4gKwkJYm9wcy0+bGluZWFyX3RvX3lmKGJv cHMsIGJ1ZiwgbGluZWFyKTsKPiArCQlicmVhazsKPiArCWNhc2UgSTkxNV9USUxJTkdfWXM6Cj4g KwkJaWd0X2Fzc2VydChib3BzLT5saW5lYXJfdG9feXMpOwo+ICsJCWJvcHMtPmxpbmVhcl90b195 cyhib3BzLCBidWYsIGxpbmVhcik7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIF9faW50ZWxfYnVmX2luaXQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsCj4gKwkJCSAgICAg dWludDMyX3QgaGFuZGxlLAo+ICsJCQkgICAgIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKPiArCQkJ ICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsCj4gKwkJCSAgICAgdWludDMyX3Qg cmVxX3RpbGluZywgYm9vbCBjb21wcmVzc2lvbikKPiArewo+ICsJdWludDMyX3QgdGlsaW5nID0g cmVxX3RpbGluZzsKPiArCXVpbnQzMl90IHNpemU7Cj4gKwo+ICsJaWd0X2Fzc2VydChib3BzKTsK PiArCWlndF9hc3NlcnQoYnVmKTsKPiArCWlndF9hc3NlcnQod2lkdGggPiAwICYmIGhlaWdodCA+ IDApOwo+ICsJaWd0X2Fzc2VydChicHAgPT0gOCB8fCBicHAgPT0gMTYgfHwgYnBwID09IDMyKTsK PiArCj4gKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOwo+ICsKPiArCWlmIChjb21wcmVz c2lvbikgewo+ICsJCWludCBhdXhfd2lkdGgsIGF1eF9oZWlnaHQ7Cj4gKwo+ICsJCWlndF9yZXF1 aXJlKGJvcHMtPmludGVsX2dlbiA+PSA5KTsKPiArCQlpZ3RfYXNzZXJ0KHJlcV90aWxpbmcgPT0g STkxNV9USUxJTkdfWSB8fAo+ICsJCQkgICByZXFfdGlsaW5nID09IEk5MTVfVElMSU5HX1lmKTsK PiArCj4gKwkJLyoKPiArCQkgKiBPbiBHRU4xMisgd2UgYWxpZ24gdGhlIG1haW4gc3VyZmFjZSB0 byA0ICogNCBtYWluIHN1cmZhY2UKPiArCQkgKiB0aWxlcywgd2hpY2ggaXMgNjRrQi4gVGhlc2Ug MTYgdGlsZXMgYXJlIG1hcHBlZCBieSA0IEFVWAo+ICsJCSAqIENDUyB1bml0cywgdGhhdCBpcyA0 ICogNjQgYnl0ZXMuIFRoZXNlIDQgQ0NTIHVuaXRzIGFyZSBpbgo+ICsJCSAqIHR1cm4gbWFwcGVk IGJ5IG9uZSBMMSBBVVggcGFnZSB0YWJsZSBlbnRyeS4KPiArCQkgKi8KPiArCQlpZiAoYm9wcy0+ aW50ZWxfZ2VuID49IDEyKQo+ICsJCQlidWYtPnN0cmlkZSA9IEFMSUdOKHdpZHRoICogKGJwcCAv IDgpLCAxMjggKiA0KTsKPiArCQllbHNlCj4gKwkJCWJ1Zi0+c3RyaWRlID0gQUxJR04od2lkdGgg KiAoYnBwIC8gOCksIDEyOCk7Cj4gKwo+ICsJCWlmIChib3BzLT5pbnRlbF9nZW4gPj0gMTIpCj4g KwkJCWhlaWdodCA9IEFMSUdOKGhlaWdodCwgNCAqIDMyKTsKPiArCj4gKwkJYnVmLT5zaXplID0g YnVmLT5zdHJpZGUgKiBoZWlnaHQ7Cj4gKwkJYnVmLT50aWxpbmcgPSB0aWxpbmc7Cj4gKwkJYnVm LT5icHAgPSBicHA7Cj4gKwkJYnVmLT5jb21wcmVzc2lvbiA9IGNvbXByZXNzaW9uOwo+ICsKPiAr CQlhdXhfd2lkdGggPSBpbnRlbF9idWZfYXV4X3dpZHRoKGJvcHMtPmludGVsX2dlbiwgYnVmKTsK PiArCQlhdXhfaGVpZ2h0ID0gaW50ZWxfYnVmX2F1eF9oZWlnaHQoYm9wcy0+aW50ZWxfZ2VuLCBi dWYpOwo+ICsKPiArCQlidWYtPmF1eC5vZmZzZXQgPSBidWYtPnN0cmlkZSAqIEFMSUdOKGhlaWdo dCwgMzIpOwo+ICsJCWJ1Zi0+YXV4LnN0cmlkZSA9IGF1eF93aWR0aDsKPiArCj4gKwkJc2l6ZSA9 IGJ1Zi0+YXV4Lm9mZnNldCArIGF1eF93aWR0aCAqIGF1eF9oZWlnaHQ7Cj4gKwo+ICsJfSBlbHNl IHsKPiArCQlidWYtPnN0cmlkZSA9IEFMSUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjgpOwo+ICsJ CWJ1Zi0+c2l6ZSA9IGJ1Zi0+c3RyaWRlICogaGVpZ2h0Owo+ICsJCWJ1Zi0+dGlsaW5nID0gdGls aW5nOwo+ICsJCWJ1Zi0+YnBwID0gYnBwOwo+ICsKPiArCQlzaXplID0gYnVmLT5zdHJpZGUgKiBB TElHTihoZWlnaHQsIDMyKTsKPiArCX0KPiArCj4gKwlpZiAoaGFuZGxlKQo+ICsJCWJ1Zi0+aGFu ZGxlID0gaGFuZGxlOwo+ICsJZWxzZQo+ICsJCWJ1Zi0+aGFuZGxlID0gZ2VtX2NyZWF0ZShib3Bz LT5mZCwgc2l6ZSk7Cj4gKwo+ICsJc2V0X2h3X3RpbGVkKGJvcHMsIGJ1Zik7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBpbnRlbF9idWZfaW5pdAo+ICsgKiBAYm9wczogcG9pbnRlciB0byBidWZfb3Bz Cj4gKyAqIEBidWY6IHBvaW50ZXIgdG8gaW50ZWxfYnVmIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQK PiArICogQHdpZHRoOiBzdXJmYWNlIHdpZHRoCj4gKyAqIEBoZWlnaHQ6IHN1cmZhY2UgaGVpZ2h0 Cj4gKyAqIEBicHA6IGJpdHMtcGVyLXBpeGVsICg4IC8gMTYgLyAzMikKPiArICogQHRpbGluZzog c3VyZmFjZSB0aWxpbmcKPiArICogQGNvbXByZXNzaW9uOiBzdXJmYWNlIGNvbXByZXNzaW9uIGZs YWcgb24gLyBvZmYKPiArICoKPiArICogRnVuY3Rpb24gY3JlYXRlcyBuZXcgQk8gd2l0aGluIGlu dGVsX2J1ZiBzdHJ1Y3R1cmUgYW5kIGZpbGxzIGFsbAo+ICsgKiBzdHJ1Y3R1cmUgZmllbGRzLgo+ ICsgKgo+ICsgKiBOb3RlLiBGb3IgWCAvIFkgaWYgR1BVIHN1cHBvcnRzIGZlbmNlcyBIVyB0aWxp bmcgaXMgY29uZmlndXJlZC4KPiArICovCj4gK3ZvaWQgaW50ZWxfYnVmX2luaXQoc3RydWN0IGJ1 Zl9vcHMgKmJvcHMsCj4gKwkJICAgIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKPiArCQkgICAgaW50 IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYnBwLAo+ICsJCSAgICB1aW50MzJfdCB0aWxpbmcsIGJv b2wgY29tcHJlc3Npb24pCj4gK3sKPiArCV9faW50ZWxfYnVmX2luaXQoYm9wcywgMCwgYnVmLCB3 aWR0aCwgaGVpZ2h0LCBicHAsIHRpbGluZywKPiArCQkJIGNvbXByZXNzaW9uKTsKPiArfQo+ICsK PiArLyoqCj4gKyAqIGludGVsX2J1Zl9jbG9zZQo+ICsgKiBAYm9wczogcG9pbnRlciB0byBidWZf b3BzCj4gKyAqIEBidWY6IHBvaW50ZXIgdG8gaW50ZWxfYnVmIHN0cnVjdHVyZQo+ICsgKgo+ICsg KiBGdW5jdGlvbiBjbG9zZXMgZ2VtIEJPIGluc2lkZSBpbnRlbF9idWYuCj4gKyAqLwo+ICt2b2lk IGludGVsX2J1Zl9jbG9zZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAq YnVmKQo+ICt7Cj4gKwlpZ3RfYXNzZXJ0KGJvcHMpOwo+ICsJaWd0X2Fzc2VydChidWYpOwo+ICsK PiArCWdlbV9jbG9zZShib3BzLT5mZCwgYnVmLT5oYW5kbGUpOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogaW50ZWxfYnVmX2luaXRfdXNpbmdfaGFuZGxlCj4gKyAqIEBib3BzOiBwb2ludGVyIHRvIGJ1 Zl9vcHMKPiArICogQGhhbmRsZTogQk8gaGFuZGxlIGNyZWF0ZWQgYnkgdGhlIGNhbGxlcgo+ICsg KiBAYnVmOiBwb2ludGVyIHRvIGludGVsX2J1ZiBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkCj4gKyAq IEB3aWR0aDogc3VyZmFjZSB3aWR0aAo+ICsgKiBAaGVpZ2h0OiBzdXJmYWNlIGhlaWdodAo+ICsg KiBAYnBwOiBiaXRzLXBlci1waXhlbCAoOCAvIDE2IC8gMzIpCj4gKyAqIEB0aWxpbmc6IHN1cmZh Y2UgdGlsaW5nCj4gKyAqIEBjb21wcmVzc2lvbjogc3VyZmFjZSBjb21wcmVzc2lvbiBmbGFnIG9u IC8gb2ZmCj4gKyAqCj4gKyAqIEZ1bmN0aW9uIGNvbmZpZ3VyZXMgQk8gaGFuZGxlIHdpdGhpbiBp bnRlbF9idWYgc3RydWN0dXJlIHBhc3NlZCBieSB0aGUgY2FsbGVyCj4gKyAqICh3aXRoIGFsbCBp dHMgbWV0YWRhdGEgLSB3aWR0aCwgaGVpZ2h0LCAuLi4pLiBVc2VmdWwgaWYgQk8gd2FzIGNyZWF0 ZWQKPiArICogb3V0c2lkZS4KPiArICoKPiArICogTm90ZTogaW50ZWxfYnVmX2Nsb3NlKCkgY2Fu IGJlIHVzZWQgdG8gY2xvc2UgdGhlIEJPIGhhbmRsZSwgYnV0IGNhbGxlcgo+ICsgKiBtdXN0IGJl IGF3YXJlIHRvIG5vdCBjbG9zZSB0aGUgQk8gdHdpY2UuCj4gKyAqLwo+ICt2b2lkIGludGVsX2J1 Zl9pbml0X3VzaW5nX2hhbmRsZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywKPiArCQkJCSB1aW50MzJf dCBoYW5kbGUsCj4gKwkJCQkgc3RydWN0IGludGVsX2J1ZiAqYnVmLAo+ICsJCQkJIGludCB3aWR0 aCwgaW50IGhlaWdodCwgaW50IGJwcCwKPiArCQkJCSB1aW50MzJfdCByZXFfdGlsaW5nLCBib29s IGNvbXByZXNzaW9uKQo+ICt7Cj4gKwlfX2ludGVsX2J1Zl9pbml0KGJvcHMsIGhhbmRsZSwgYnVm LCB3aWR0aCwgaGVpZ2h0LCBicHAsIHJlcV90aWxpbmcsCj4gKwkJCSBjb21wcmVzc2lvbik7Cj4g K30KPiArCj4gKyNkZWZpbmUgREVGQVVMVF9CVUZPUFMoX19nZW5fc3RhcnQsIF9fZ2VuX2VuZCkg XAo+ICsJLmdlbl9zdGFydCAgICAgICAgICA9IF9fZ2VuX3N0YXJ0LCBcCj4gKwkuZ2VuX2VuZCAg ICAgICAgICAgID0gX19nZW5fZW5kLCBcCj4gKwkuc3VwcG9ydGVkX2h3X3RpbGVzID0gVElMRV9Y IHwgVElMRV9ZLCBcCj4gKwkubGluZWFyX3RvX3ggICAgICAgID0gY29weV9saW5lYXJfdG9fZ3R0 LCBcCj4gKwkubGluZWFyX3RvX3kgICAgICAgID0gY29weV9saW5lYXJfdG9fZ3R0LCBcCj4gKwku bGluZWFyX3RvX3lmICAgICAgID0gY29weV9saW5lYXJfdG9feWYsIFwKPiArCS5saW5lYXJfdG9f eXMgICAgICAgPSBjb3B5X2xpbmVhcl90b195cywgXAo+ICsJLnhfdG9fbGluZWFyICAgICAgICA9 IGNvcHlfZ3R0X3RvX2xpbmVhciwgXAo+ICsJLnlfdG9fbGluZWFyICAgICAgICA9IGNvcHlfZ3R0 X3RvX2xpbmVhciwgXAo+ICsJLnlmX3RvX2xpbmVhciAgICAgICA9IGNvcHlfeWZfdG9fbGluZWFy LCBcCj4gKwkueXNfdG9fbGluZWFyICAgICAgID0gY29weV95c190b19saW5lYXIKPiArCj4gK3N0 cnVjdCBidWZfb3BzIGJ1Zl9vcHNfYXJyW10gPSB7Cj4gKwkvKiBHZW5lcmF0aW9ucyAyIC0gOCAq Lwo+ICt7Cj4gKwlERUZBVUxUX0JVRk9QUygyLCA4KSwKPiArCS5zdXBwb3J0ZWRfdGlsZXMgICAg PSBUSUxFX05PTkUgfCBUSUxFX1ggfCBUSUxFX1ksCj4gKwkubGluZWFyX3RvICAgICAgICAgID0g Y29weV9saW5lYXJfdG9fY3B1LAo+ICsJLnRvX2xpbmVhciAgICAgICAgICA9IGNvcHlfY3B1X3Rv X2xpbmVhciwKPiArfSwKPiArLyogR2VuZXJhdGlvbnMgOSAtIDExICovCj4gK3sKPiArCURFRkFV TFRfQlVGT1BTKDksIDExKSwKPiArCS5zdXBwb3J0ZWRfdGlsZXMgICAgPSBUSUxFX05PTkUgfCBU SUxFX1ggfCBUSUxFX1kgfCBUSUxFX1lmLAo+ICsJLmxpbmVhcl90byAgICAgICAgICA9IGNvcHlf bGluZWFyX3RvX2NwdSwKPiArCS50b19saW5lYXIgICAgICAgICAgPSBjb3B5X2NwdV90b19saW5l YXIsCj4gK30sCj4gKy8qIEdlbmVyYXRpb24gMTIgKi8KPiArewo+ICsJREVGQVVMVF9CVUZPUFMo MTIsIDEyKSwKPiArCS5zdXBwb3J0ZWRfdGlsZXMgICA9IFRJTEVfTk9ORSB8IFRJTEVfWCB8IFRJ TEVfWSB8IFRJTEVfWWYgfCBUSUxFX1lzLAo+ICsJLmxpbmVhcl90byAgICAgICAgID0gY29weV9s aW5lYXJfdG9fd2MsCj4gKwkudG9fbGluZWFyICAgICAgICAgPSBjb3B5X3djX3RvX2xpbmVhciwK PiArfSwKPiArfTsKPiArCj4gK3N0YXRpYyBib29sIHByb2JlX2h3X3RpbGluZyhzdHJ1Y3QgYnVm X29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKQo+ICt7Cj4gKwl1aW50NjRfdCBzaXplID0gMjU2 ICogMjU2Owo+ICsJdWludDMyX3QgaGFuZGxlLCBidWZfdGlsaW5nLCBidWZfc3dpenpsZTsKPiAr CXVpbnQzMl90IHN0cmlkZTsKPiArCWludCByZXQ7Cj4gKwlib29sIGlzX3NldCA9IGZhbHNlOwo+ ICsKPiArCWlmICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWCkKPiArCQlzdHJpZGUgPSA1MTI7Cj4g KwllbHNlIGlmICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKPiArCQlzdHJpZGUgPSAxMjg7Cj4g KwllbHNlCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGUoYm9w cy0+ZmQsIHNpemUpOwo+ICsKPiArCS8qIFNpbmdsZSBzaG90LCBpZiBubyBmZW5jZXMgYXJlIGF2 YWlsYWJsZSB3ZSBmYWlsIGltbWVkaWF0ZWx5ICovCj4gKwlyZXQgPSBfX3NldF90aWxpbmcoYm9w cy0+ZmQsIGhhbmRsZSwgdGlsaW5nLCBzdHJpZGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVu ZDsKPiArCj4gKwlpc19zZXQgPSBfX2dldF90aWxpbmcoYm9wcy0+ZmQsIGhhbmRsZSwgJmJ1Zl90 aWxpbmcsICZidWZfc3dpenpsZSk7Cj4gKwlpZiAoaXNfc2V0KSB7Cj4gKwkJaWYgKHRpbGluZyA9 PSBJOTE1X1RJTElOR19YKQo+ICsJCQlib3BzLT5zd2l6emxlX3ggPSBidWZfc3dpenpsZTsKPiAr CQllbHNlIGlmICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKPiArCQkJYm9wcy0+c3dpenpsZV95 ID0gYnVmX3N3aXp6bGU7Cj4gKwl9Cj4gK2VuZDoKPiArCWdlbV9jbG9zZShib3BzLT5mZCwgaGFu ZGxlKTsKPiArCj4gKwlyZXR1cm4gaXNfc2V0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqYWxs b2NfYWxpZ25lZCh1aW50NjRfdCBzaXplKQo+ICt7Cj4gKwl2b2lkICpwOwo+ICsKPiArCWlndF9h c3NlcnRfZXEocG9zaXhfbWVtYWxpZ24oJnAsIDE2LCBzaXplKSwgMCk7Cj4gKwo+ICsJcmV0dXJu IHA7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFNpbXBsZSBpZGVtcG90ZW5jeSB0ZXN0IGJldHdlZW4g SFcgLT4gU1cgYW5kIFNXIC0+IEhXIEJPLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgaWRlbXBvdGVu Y3lfc2VsZnRlc3Qoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGluZykKPiArewo+ ICsJc3RydWN0IGludGVsX2J1ZiBidWY7Cj4gKwl1aW50OF90ICpsaW5lYXJfaW4sICpsaW5lYXJf b3V0LCAqbWFwOwo+ICsJaW50IGk7Cj4gKwljb25zdCBpbnQgd2lkdGggPSA1MTI7Cj4gKwljb25z dCBpbnQgaGVpZ2h0ID0gNTEyOwo+ICsJY29uc3QgaW50IGJwcCA9IDMyOwo+ICsJY29uc3QgaW50 IHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIGJwcCAvIDg7Cj4gKwlib29sIHNvZnR3YXJlX3RpbGlu ZyA9IGZhbHNlOwo+ICsKPiArCWlmICghaXNfaHdfdGlsaW5nX3N1cHBvcnRlZChib3BzLCB0aWxp bmcpKQo+ICsJCXJldHVybjsKPiArCj4gKwlsaW5lYXJfaW4gPSBhbGxvY19hbGlnbmVkKHNpemUp Owo+ICsJbGluZWFyX291dCA9IGFsbG9jX2FsaWduZWQoc2l6ZSk7Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykKPiArCQlsaW5lYXJfaW5baV0gPSBpICUgMjUzOyAvKiBwcmltZSBj aG9zZW4gaW50ZW50aW9uYWxseSAqLwo+ICsKPiArCWRvIHsKPiArCQlpZ3RfZGVidWcoIkNoZWNr aW5nIGlkZW1wb3RlbmN5LCBTVzogJXMsIEhXOiAlcywgdGlsaW5nOiAlc1xuIiwKPiArCQkJICBi b29sX3N0cihzb2Z0d2FyZV90aWxpbmcpLAo+ICsJCQkgIGJvb2xfc3RyKCFzb2Z0d2FyZV90aWxp bmcpLAo+ICsJCQkgIHRpbGluZ19zdHIodGlsaW5nKSk7Cj4gKwkJaW50ZWxfYnVmX2luaXQoYm9w cywgJmJ1Ziwgd2lkdGgsIGhlaWdodCwgYnBwLCB0aWxpbmcsIGZhbHNlKTsKPiArCQlidWZfb3Bz X3NldF9zb2Z0d2FyZV90aWxpbmcoYm9wcywgdGlsaW5nLCBzb2Z0d2FyZV90aWxpbmcpOwo+ICsK PiArCQlsaW5lYXJfdG9faW50ZWxfYnVmKGJvcHMsICZidWYsICh1aW50MzJfdCAqKSBsaW5lYXJf aW4pOwo+ICsJCW1hcCA9IF9fZ2VtX21tYXBfb2Zmc2V0X19jcHUoYm9wcy0+ZmQsIGJ1Zi5oYW5k bGUsIDAsCj4gKwkJCQkJICAgYnVmLnNpemUsIFBST1RfUkVBRCk7Cj4gKwkJaWYgKCFtYXApCj4g KwkJCW1hcCA9IGdlbV9tbWFwX19jcHUoYm9wcy0+ZmQsIGJ1Zi5oYW5kbGUsIDAsCj4gKwkJCQkJ ICAgIGJ1Zi5zaXplLCBQUk9UX1JFQUQpOwo+ICsJCWlndF9hc3NlcnQobWFwKTsKPiArCQlpZ3Rf YXNzZXJ0KG1lbWNtcChsaW5lYXJfaW4sIG1hcCwgc2l6ZSkpOwo+ICsKPiArCQlidWZfb3BzX3Nl dF9zb2Z0d2FyZV90aWxpbmcoYm9wcywgdGlsaW5nLCAhc29mdHdhcmVfdGlsaW5nKTsKPiArCQlp bnRlbF9idWZfdG9fbGluZWFyKGJvcHMsICZidWYsICh1aW50MzJfdCAqKSBsaW5lYXJfb3V0KTsK PiArCQlpZ3RfYXNzZXJ0KCFtZW1jbXAobGluZWFyX2luLCBsaW5lYXJfb3V0LCBzaXplKSk7Cj4g Kwo+ICsJCW11bm1hcChtYXAsIHNpemUpOwo+ICsJCWludGVsX2J1Zl9jbG9zZShib3BzLCAmYnVm KTsKPiArCj4gKwkJc29mdHdhcmVfdGlsaW5nID0gIXNvZnR3YXJlX3RpbGluZzsKPiArCX0gd2hp bGUgKHNvZnR3YXJlX3RpbGluZyk7Cj4gKwo+ICsJaWd0X2RlYnVnKCJJZGVtcG90ZW5jeSBmb3Ig JXMgdGlsaW5nIE9LXG4iLCB0aWxpbmdfc3RyKHRpbGluZykpOwo+ICsJYnVmX29wc19zZXRfc29m dHdhcmVfdGlsaW5nKGJvcHMsIHRpbGluZywgZmFsc2UpOwo+ICt9Cj4gKwo+ICsvKioKPiArICog YnVmX29wc19jcmVhdGUKPiArICogQGZkOiBkZXZpY2UgZmlsZWRlc2NyaXB0b3IKPiArICoKPiAr ICogQ3JlYXRlIGJ1Zl9vcHMgc3RydWN0dXJlIGRlcGVuZGluZyBvbiBmZC1kZXZpY2UgY2FwYWJp bGl0aWVzLgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBvcGFxdWUgcG9pbnRlciB0byBidWZfb3BzLgo+ ICsgKgo+ICsgKi8KPiArc3RydWN0IGJ1Zl9vcHMgKmJ1Zl9vcHNfY3JlYXRlKGludCBmZCkKPiAr ewo+ICsJc3RydWN0IGJ1Zl9vcHMgKmJvcHMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpib3BzKSk7Cj4g Kwl1aW50MzJfdCBkZXZpZDsKPiArCWludCBnZW5lcmF0aW9uOwo+ICsKPiArCWlndF9hc3NlcnQo Ym9wcyk7Cj4gKwo+ICsJZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGZkKTsKPiArCWdlbmVy YXRpb24gPSBpbnRlbF9nZW4oZGV2aWQpOwo+ICsKPiArCS8qIFByZWRlZmluZWQgc2V0dGluZ3Mg Ki8KPiArCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZfb3BzX2Fycik7IGkrKykg ewo+ICsJCWlmIChnZW5lcmF0aW9uID49IGJ1Zl9vcHNfYXJyW2ldLmdlbl9zdGFydCAmJgo+ICsJ CQkJZ2VuZXJhdGlvbiA8PSBidWZfb3BzX2FycltpXS5nZW5fZW5kKSB7Cj4gKwkJCW1lbWNweShi b3BzLCAmYnVmX29wc19hcnJbaV0sIHNpemVvZigqYm9wcykpOwo+ICsJCQlib3BzLT5mZCA9IGZk Owo+ICsJCQlib3BzLT5pbnRlbF9nZW4gPSBnZW5lcmF0aW9uOwo+ICsJCQlpZ3RfZGVidWcoImdl bmVyYXRpb246ICVkLCBzdXBwb3J0ZWQgdGlsZXM6IDB4JTAyeFxuIiwKPiArCQkJCSAgZ2VuZXJh dGlvbiwgYm9wcy0+c3VwcG9ydGVkX3RpbGVzKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArCWlndF9hc3NlcnQoYm9wcy0+aW50ZWxfZ2VuKTsKPiArCj4gKwkvKgo+ICsJICogV2Fy bmluZyEKPiArCSAqCj4gKwkgKiBHZW4yIHNvZnR3YXJlIHRpbGluZy9kZXRpbGluZyBpcyBub3Qg c3VwcG9ydGVkISAoeWV0KS4KPiArCSAqCj4gKwkgKiBJZiB5b3UgYXJlIGJyYXZlIGhlcm8gd2l0 aCBhbiBhY2Nlc3MgdG8gR2VuMiB5b3UgY2FuIHNhdmUgdGhlIHdvcmxkLgo+ICsJICogVW50aWwg dGhlbiB3ZSdyZSBkb29tZWQgdG8gdXNlIG9ubHkgaGFyZHdhcmUgKGRlKXRpbGluZy4KPiArCSAq Cj4gKwkgKiBPaywgeW91IGhhdmUgYmVlbiB3YXJuZWQuCj4gKwkgKi8KPiArCWlmIChib3BzLT5p bnRlbF9nZW4gPT0gMikgewo+ICsJCWlndF93YXJuKCJHZW4yIGRldGVjdGVkLiBIVyAoZGUpdGls aW5nIHN1cHBvcnQgb25seS4iKTsKPiArCQlyZXR1cm4gYm9wczsKPiArCX0KPiArCj4gKwkvKiBM ZXQncyBwcm9iZSBYIGFuZCBZIGh3IHRpbGluZyBzdXBwb3J0ICovCj4gKwlpZiAoaXNfaHdfdGls aW5nX3N1cHBvcnRlZChib3BzLCBJOTE1X1RJTElOR19YKSkgewo+ICsJCWJvb2wgc3VwcG9ydGVk ID0gcHJvYmVfaHdfdGlsaW5nKGJvcHMsIEk5MTVfVElMSU5HX1gpOwo+ICsKPiArCQlpZ3RfZGVi dWcoIlggZmVuY2Ugc3VwcG9ydDogJXNcbiIsIGJvb2xfc3RyKHN1cHBvcnRlZCkpOwo+ICsJCWlm ICghc3VwcG9ydGVkKSB7Cj4gKwkJCWJvcHMtPnN1cHBvcnRlZF9od190aWxlcyAmPSB+VElMRV9Y Owo+ICsJCQlib3BzLT5saW5lYXJfdG9feCA9IGNvcHlfbGluZWFyX3RvX3g7Cj4gKwkJCWJvcHMt PnhfdG9fbGluZWFyID0gY29weV94X3RvX2xpbmVhcjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYg KGlzX2h3X3RpbGluZ19zdXBwb3J0ZWQoYm9wcywgSTkxNV9USUxJTkdfWSkpIHsKPiArCQlib29s IHN1cHBvcnRlZCA9IHByb2JlX2h3X3RpbGluZyhib3BzLCBJOTE1X1RJTElOR19ZKTsKPiArCj4g KwkJaWd0X2RlYnVnKCJZIGZlbmNlIHN1cHBvcnQ6ICVzXG4iLCBib29sX3N0cihzdXBwb3J0ZWQp KTsKPiArCQlpZiAoIXN1cHBvcnRlZCkgewo+ICsJCQlib3BzLT5zdXBwb3J0ZWRfaHdfdGlsZXMg Jj0gflRJTEVfWTsKPiArCQkJYm9wcy0+bGluZWFyX3RvX3kgPSBjb3B5X2xpbmVhcl90b195Owo+ ICsJCQlib3BzLT55X3RvX2xpbmVhciA9IGNvcHlfeV90b19saW5lYXI7Cj4gKwkJfQo+ICsJfQo+ ICsKPiArCS8qIERpc2FibGUgb3RoZXIgdGlsaW5nIGZvcm1hdCBmdW5jdGlvbnMgaWYgbm90IHN1 cHBvcnRlZCAqLwo+ICsJaWYgKCFpc190aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5MTVfVElMSU5H X1lmKSkgewo+ICsJCWlndF9kZWJ1ZygiWWYgZm9ybWF0IG5vdCBzdXBwb3J0ZWRcbiIpOwo+ICsJ CWJvcHMtPmxpbmVhcl90b195ZiA9IE5VTEw7Cj4gKwkJYm9wcy0+eWZfdG9fbGluZWFyID0gTlVM TDsKPiArCX0KPiArCj4gKwlpZiAoIWlzX3RpbGluZ19zdXBwb3J0ZWQoYm9wcywgSTkxNV9USUxJ TkdfWXMpKSB7Cj4gKwkJaWd0X2RlYnVnKCJZcyBmb3JtYXQgbm90IHN1cHBvcnRlZFxuIik7Cj4g KwkJYm9wcy0+bGluZWFyX3RvX3lzID0gTlVMTDsKPiArCQlib3BzLT55c190b19saW5lYXIgPSBO VUxMOwo+ICsJfQo+ICsKPiArCWlkZW1wb3RlbmN5X3NlbGZ0ZXN0KGJvcHMsIEk5MTVfVElMSU5H X1gpOwo+ICsJaWRlbXBvdGVuY3lfc2VsZnRlc3QoYm9wcywgSTkxNV9USUxJTkdfWSk7Cj4gKwo+ ICsJcmV0dXJuIGJvcHM7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBidWZfb3BzX2Rlc3Ryb3kKPiAr ICogQGJvcHM6IHBvaW50ZXIgdG8gYnVmX29wcwo+ICsgKgo+ICsgKiBGdW5jdGlvbiBmcmVlcyBi dWZfb3BzIHN0cnVjdHVyZS4KPiArICovCj4gK3ZvaWQgYnVmX29wc19kZXN0cm95KHN0cnVjdCBi dWZfb3BzICpib3BzKQo+ICt7Cj4gKwlpZ3RfYXNzZXJ0KGJvcHMpOwo+ICsJZnJlZShib3BzKTsK PiArfQo+ICsKPiArLyoqCj4gKyAqIGJ1Zl9vcHNfc2V0X3NvZnR3YXJlX3RpbGluZwo+ICsgKiBA Ym9wczogcG9pbnRlciB0byBidWZfb3BzCj4gKyAqIEB0aWxpbmc6IHN1cmZhY2UgdGlsaW5nCj4g KyAqIEB1c2Vfc29mdHdhcmVfdGlsaW5nOiBpZiB0cnVlIHVzZSBzb2Z0d2FyZSBjb3B5aW5nIG1l dGhvZHMsIG90aGVyd2lzZQo+ICsgKiB1c2UgaGFyZHdhcmUgKHZpYSBndHQpCj4gKyAqCj4gKyAq IEZ1bmN0aW9uIGFsbG93cyBzd2l0Y2ggWCAvIFkgc3VyZmFjZXMgdG8gc29mdHdhcmUgLyBoYXJk d2FyZSBjb3B5aW5nIG1ldGhvZHMKPiArICogd2hpY2ggaG9ub3JzIHRpbGluZyBhbmQgc3dpenps aW5nLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBmYWxzZSAtIHN3aXRjaCB3YXNuJ3QgcG9z c2libGUuCj4gKyAqIHRydWUgLSBzd2l0Y2ggdG8gc29mdHdhcmUgLyBoYXJkd2FyZSBtZXRob2Qg c3VjY2VlZC4KPiArICovCj4gK2Jvb2wgYnVmX29wc19zZXRfc29mdHdhcmVfdGlsaW5nKHN0cnVj dCBidWZfb3BzICpib3BzLAo+ICsJCQkJIHVpbnQzMl90IHRpbGluZywKPiArCQkJCSBib29sIHVz ZV9zb2Z0d2FyZV90aWxpbmcpCj4gK3sKPiArCWJvb2wgd2FzX2NoYW5nZWQgPSB0cnVlOwo+ICsK PiArCWlndF9hc3NlcnQoYm9wcyk7Cj4gKwo+ICsJLyogVW50aWwgYXBwcm9wcmlhdGUgY29kZSBp cyBhZGRlZCB3ZSBkb24ndCBzdXBwb3J0IFNXIHRpbGluZyBvbiBHZW4yICovCj4gKwlpZiAoYm9w cy0+aW50ZWxfZ2VuID09IDIpIHsKPiArCQlpZ3Rfd2FybigiQ2hhbmdlIHRvIHNvZnR3YXJlIHRp bGluZyBvbiBHZW4yIGlzIG5vdCBzdXBwb3J0ZWQhIik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJ fQo+ICsKPiArCXN3aXRjaCAodGlsaW5nKSB7Cj4gKwljYXNlIEk5MTVfVElMSU5HX1g6Cj4gKwkJ aWYgKHVzZV9zb2Z0d2FyZV90aWxpbmcpIHsKPiArCQkJaWd0X2RlYnVnKCItPiBjaGFuZ2UgWCB0 byBTV1xuIik7Cj4gKwkJCWJvcHMtPmxpbmVhcl90b194ID0gY29weV9saW5lYXJfdG9feDsKPiAr CQkJYm9wcy0+eF90b19saW5lYXIgPSBjb3B5X3hfdG9fbGluZWFyOwo+ICsJCX0gZWxzZSB7Cj4g KwkJCWlmIChpc19od190aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5MTVfVElMSU5HX1gpKSB7Cj4g KwkJCQlpZ3RfZGVidWcoIi0+IGNoYW5nZSBYIHRvIEhXXG4iKTsKPiArCQkJCWJvcHMtPmxpbmVh cl90b194ID0gY29weV9saW5lYXJfdG9fZ3R0Owo+ICsJCQkJYm9wcy0+eF90b19saW5lYXIgPSBj b3B5X2d0dF90b19saW5lYXI7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZ3RfZGVidWcoIi0+IFgg Y2Fubm90IGJlIGNoYW5nZWQgdG8gSFdcbiIpOwo+ICsJCQkJd2FzX2NoYW5nZWQgPSBmYWxzZTsK PiArCQkJfQo+ICsJCX0KPiArCQlicmVhazsKPiArCj4gKwljYXNlIEk5MTVfVElMSU5HX1k6Cj4g KwkJaWYgKHVzZV9zb2Z0d2FyZV90aWxpbmcpIHsKPiArCQkJaWd0X2RlYnVnKCItPiBjaGFuZ2Ug WSB0byBTV1xuIik7Cj4gKwkJCWJvcHMtPmxpbmVhcl90b195ID0gY29weV9saW5lYXJfdG9feTsK PiArCQkJYm9wcy0+eV90b19saW5lYXIgPSBjb3B5X3lfdG9fbGluZWFyOwo+ICsJCX0gZWxzZSB7 Cj4gKwkJCWlmIChpc19od190aWxpbmdfc3VwcG9ydGVkKGJvcHMsIEk5MTVfVElMSU5HX1kpKSB7 Cj4gKwkJCQlpZ3RfZGVidWcoIi0+IGNoYW5nZSBZIHRvIEhXXG4iKTsKPiArCQkJCWJvcHMtPmxp bmVhcl90b195ID0gY29weV9saW5lYXJfdG9fZ3R0Owo+ICsJCQkJYm9wcy0+eV90b19saW5lYXIg PSBjb3B5X2d0dF90b19saW5lYXI7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZ3RfZGVidWcoIi0+ IFkgY2Fubm90IGJlIGNoYW5nZWQgdG8gSFdcbiIpOwo+ICsJCQkJd2FzX2NoYW5nZWQgPSBmYWxz ZTsKPiArCQkJfQo+ICsJCX0KPiArCQlicmVhazsKPiArCj4gKwlkZWZhdWx0Ogo+ICsJCWlndF93 YXJuKCJJbnZhbGlkIHRpbGluZzogJWRcbiIsIHRpbGluZyk7Cj4gKwkJd2FzX2NoYW5nZWQgPSBm YWxzZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gd2FzX2NoYW5nZWQ7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiBidWZfb3BzX2hhc19od19mZW5jZQo+ICsgKiBAYm9wczogcG9pbnRlciB0byBidWZfb3Bz Cj4gKyAqIEB0aWxpbmc6IHN1cmZhY2UgdGlsaW5nCj4gKyAqCj4gKyAqIEZ1bmN0aW9uIGNoZWNr cyBpZiBzdXJmYWNlIHdpdGggdGlsaW5nIGhhcyBIVyBmZW5jZXMgd2hpY2ggY2FuIGJlIHVzZWQK PiArICogdG8gY29weSBpdCB2aWEgZ3R0Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBmYWxz ZSAtIGZlbmNlIGZvciB0aWxpbmcgaXMgbm90IHN1cHBvcnRlZC4KPiArICogdHJ1ZSAtIGZlbmNl IGZvciB0aWxpbmcgaXMgc3VwcG9ydGVkLgo+ICsgKi8KPiArYm9vbCBidWZfb3BzX2hhc19od19m ZW5jZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKQo+ICt7Cj4gKwl1aW50 MzJfdCB0aWxlX21hc2sgPSBUSUxFX0RFRih0aWxpbmcpOwo+ICsKPiArCWlndF9hc3NlcnQoYm9w cyk7Cj4gKwo+ICsJaWYgKHRpbGVfbWFzayAmIGJvcHMtPnN1cHBvcnRlZF9od190aWxlcykKPiAr CQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBidWZfb3BzX2hhc190aWxpbmdfc3VwcG9ydAo+ICsgKiBAYm9wczogcG9pbnRlciB0byBidWZf b3BzCj4gKyAqIEB0aWxpbmc6IHN1cmZhY2UgdGlsaW5nCj4gKyAqCj4gKyAqIEZ1bmN0aW9uIGNo ZWNrcyBjYXBhYmlsaXRpZXMgdG8gaGFuZGxlIHN1cmZhY2VzIHdpdGggdGlsaW5nIGluIEdQVS4K PiArICoKPiArICogUmV0dXJuczoKPiArICogZmFsc2UgLSBHUFUgZG9lcyBub3Qgc3VwcG9ydCB0 aWxpbmcuCj4gKyAqIHRydWUgLSBHUFUgc3VwcG9ydHMgdGlsaW5nLgo+ICsgKi8KPiArYm9vbCBi dWZfb3BzX2hhc190aWxpbmdfc3VwcG9ydChzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3Qg dGlsaW5nKQo+ICt7Cj4gKwl1aW50MzJfdCB0aWxlX21hc2sgPSBUSUxFX0RFRih0aWxpbmcpOwo+ ICsKPiArCWlndF9hc3NlcnQoYm9wcyk7Cj4gKwo+ICsJaWYgKHRpbGVfbWFzayAmIGJvcHMtPnN1 cHBvcnRlZF90aWxlcykKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4g K30KPiBkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2J1Zm9wcy5oIGIvbGliL2ludGVsX2J1Zm9wcy5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uYzFkMWU5MmQKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvbGliL2ludGVsX2J1Zm9wcy5oCj4gQEAgLTAsMCArMSw4NCBAQAo+ ICsjaWZuZGVmIF9fSU5URUxfQlVGT1BTX0hfXwo+ICsjZGVmaW5lIF9fSU5URUxfQlVGT1BTX0hf Xwo+ICsKPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsKPiArc3RydWN0IGJ1Zl9vcHM7Cj4gKwo+ ICtzdHJ1Y3QgaW50ZWxfYnVmIHsKPiArCXVpbnQzMl90IGhhbmRsZTsKPiArCXVpbnQzMl90IHN0 cmlkZTsKPiArCXVpbnQzMl90IHRpbGluZzsKPiArCXVpbnQzMl90IGJwcDsKPiArCXVpbnQzMl90 IHNpemU7Cj4gKwl1aW50MzJfdCBjb21wcmVzc2lvbjsKPiArCXN0cnVjdCB7Cj4gKwkJdWludDMy X3Qgb2Zmc2V0Owo+ICsJCXVpbnQzMl90IHN0cmlkZTsKPiArCX0gYXV4Owo+ICt9Owo+ICsKPiAr aW5saW5lIHVuc2lnbmVkIGludCBpbnRlbF9idWZfd2lkdGgoY29uc3Qgc3RydWN0IGludGVsX2J1 ZiAqYnVmKQo+ICt7Cj4gKwlyZXR1cm4gYnVmLT5zdHJpZGUvKGJ1Zi0+YnBwIC8gOCk7Cj4gK30K PiArCj4gK2lubGluZSB1bnNpZ25lZCBpbnQgaW50ZWxfYnVmX2hlaWdodChjb25zdCBzdHJ1Y3Qg aW50ZWxfYnVmICpidWYpCj4gK3sKPiArCXJldHVybiBidWYtPnNpemUvYnVmLT5zdHJpZGU7Cj4g K30KPiArCj4gK2lubGluZSB1bnNpZ25lZCBpbnQgaW50ZWxfYnVmX2F1eF93aWR0aChpbnQgZ2Vu LCBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCj4gK3sKPiArCS8qCj4gKwkgKiBHRU4xMis6 IFRoZSBBVVggQ0NTIHVuaXQgc2l6ZSBpcyA2NCBieXRlcyBtYXBwaW5nIDQgbWFpbiBzdXJmYWNl Cj4gKwkgKiB0aWxlcy4gVGh1cyB0aGUgd2lkdGggb2YgdGhlIENDUyB1bml0IGlzIDQqMzI9MTI4 IHBpeGVscyBvbiB0aGUKPiArCSAqIG1haW4gc3VyZmFjZS4KPiArCSAqLwo+ICsJaWYgKGdlbiA+ PSAxMikKPiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKGludGVsX2J1Zl93aWR0aChidWYpLCAxMjgp ICogNjQ7Cj4gKwo+ICsJcmV0dXJuIERJVl9ST1VORF9VUChpbnRlbF9idWZfd2lkdGgoYnVmKSwg MTAyNCkgKiAxMjg7Cj4gK30KPiArCj4gK2lubGluZSB1bnNpZ25lZCBpbnQgaW50ZWxfYnVmX2F1 eF9oZWlnaHQoaW50IGdlbiwgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqYnVmKQo+ICt7Cj4gKwkv Kgo+ICsJICogR0VOMTIrOiBUaGUgQVVYIENDUyB1bml0IHNpemUgaXMgNjQgYnl0ZXMgbWFwcGlu ZyA0IG1haW4gc3VyZmFjZQo+ICsJICogdGlsZXMuIFRodXMgdGhlIGhlaWdodCBvZiB0aGUgQ0NT IHVuaXQgaXMgMzIgcGl4ZWwgcm93cyBvbiB0aGUgbWFpbgo+ICsJICogc3VyZmFjZS4KPiArCSAq Lwo+ICsJaWYgKGdlbiA+PSAxMikKPiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKGludGVsX2J1Zl9o ZWlnaHQoYnVmKSwgMzIpOwo+ICsKPiArCXJldHVybiBESVZfUk9VTkRfVVAoaW50ZWxfYnVmX2hl aWdodChidWYpLCA1MTIpICogMzI7Cj4gK30KPiArCj4gK3N0cnVjdCBidWZfb3BzICpidWZfb3Bz X2NyZWF0ZShpbnQgZmQpOwo+ICt2b2lkIGJ1Zl9vcHNfZGVzdHJveShzdHJ1Y3QgYnVmX29wcyAq Ym9wcyk7Cj4gKwo+ICtib29sIGJ1Zl9vcHNfc2V0X3NvZnR3YXJlX3RpbGluZyhzdHJ1Y3QgYnVm X29wcyAqYm9wcywKPiArCQkJCSB1aW50MzJfdCB0aWxpbmcsCj4gKwkJCQkgYm9vbCB1c2Vfc29m dHdhcmVfdGlsaW5nKTsKPiArCj4gK3ZvaWQgaW50ZWxfYnVmX3RvX2xpbmVhcihzdHJ1Y3QgYnVm X29wcyAqYm9wcywgc3RydWN0IGludGVsX2J1ZiAqYnVmLAo+ICsJCQkgdWludDMyX3QgKmxpbmVh cik7Cj4gKwo+ICt2b2lkIGxpbmVhcl90b19pbnRlbF9idWYoc3RydWN0IGJ1Zl9vcHMgKmJvcHMs IHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKPiArCQkJIHVpbnQzMl90ICpsaW5lYXIpOwo+ICsKPiAr Ym9vbCBidWZfb3BzX2hhc19od19mZW5jZShzdHJ1Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3Qg dGlsaW5nKTsKPiArYm9vbCBidWZfb3BzX2hhc190aWxpbmdfc3VwcG9ydChzdHJ1Y3QgYnVmX29w cyAqYm9wcywgdWludDMyX3QgdGlsaW5nKTsKPiArCj4gK3ZvaWQgaW50ZWxfYnVmX2luaXQoc3Ry dWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKPiArCQkgICAgaW50IHdp ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYnBwLAo+ICsJCSAgICB1aW50MzJfdCB0aWxpbmcsIGJvb2wg Y29tcHJlc3Npb24pOwo+ICt2b2lkIGludGVsX2J1Zl9jbG9zZShzdHJ1Y3QgYnVmX29wcyAqYm9w cywgc3RydWN0IGludGVsX2J1ZiAqYnVmKTsKPiArCj4gK3ZvaWQgaW50ZWxfYnVmX2luaXRfdXNp bmdfaGFuZGxlKHN0cnVjdCBidWZfb3BzICpib3BzLAo+ICsJCQkJIHVpbnQzMl90IGhhbmRsZSwK PiArCQkJCSBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCj4gKwkJCQkgaW50IHdpZHRoLCBpbnQgaGVp Z2h0LCBpbnQgYnBwLAo+ICsJCQkJIHVpbnQzMl90IHJlcV90aWxpbmcsIGJvb2wgY29tcHJlc3Np b24pOwpRdWl0ZSBhIGNvZGUhIEkgZGlkbid0IG5vdGljZWQgYW55dGhpbmcgdG8gY2hhbmdlLgpM R1RNOiBBY2stYnk6IEthdGFyenluYSBEZWMgPGthdGFyenluYS5kZWNAaW50ZWwuY29tPgpLYXNp YSA6KQoKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIv bWVzb24uYnVpbGQKPiBpbmRleCA1N2ViN2Q5My4uY2YzZTM1ZGEgMTAwNjQ0Cj4gLS0tIGEvbGli L21lc29uLmJ1aWxkCj4gKysrIGIvbGliL21lc29uLmJ1aWxkCj4gQEAgLTI3LDYgKzI3LDcgQEAg bGliX3NvdXJjZXMgPSBbCj4gIAknaWd0X3g4Ni5jJywKPiAgCSdpbnN0ZG9uZS5jJywKPiAgCSdp bnRlbF9iYXRjaGJ1ZmZlci5jJywKPiArCSdpbnRlbF9idWZvcHMuYycsCj4gIAknaW50ZWxfY2hp cHNldC5jJywKPiAgCSdpbnRlbF9kZXZpY2VfaW5mby5jJywKPiAgCSdpbnRlbF9vcy5jJywKPiAt LSAKPiAyLjIzLjAKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==