From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 01/19] drm: Add |struct drm_gem_vram_object| and helpers Date: Tue, 30 Apr 2019 16:40:20 +0200 Message-ID: <20190430144020.GX3271@phenom.ffwll.local> References: <20190429144341.12615-1-tzimmermann@suse.de> <20190429144341.12615-2-tzimmermann@suse.de> <20190429195855.GA6610@ravnborg.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3976088F3A for ; Tue, 30 Apr 2019 14:40:27 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id j20so12516131edq.10 for ; Tue, 30 Apr 2019 07:40:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190429195855.GA6610@ravnborg.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sam Ravnborg Cc: Thomas Zimmermann , airlied@linux.ie, puck.chen@hisilicon.com, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, z.liuxinliang@hisilicon.com, hdegoede@redhat.com, kong.kongxinwei@hisilicon.com, ray.huang@amd.com, kraxel@redhat.com, zourongrong@gmail.com, Jerry.Zhang@amd.com, christian.koenig@amd.com List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBBcHIgMjksIDIwMTkgYXQgMDk6NTg6NTVQTSArMDIwMCwgU2FtIFJhdm5ib3JnIHdy b3RlOgo+IEhpIFRob21hcy4KPiAKPiBTb21lIG1pbm9yIHRoaW5ncyBhbmQgc29tZSBiaWtlc2hl ZGRpbmcgdG9vLgo+IAo+IE9uZSBnZW5lcmFsXldiaWtlc2hlZGRpbmcgdGhpbmcgLSB1bmludDMy X3QgaXMgdXNlZCBpbiBtYW55IHBsYWNlcy4KPiBBbmQgdGhlbiBzNjQgaW4gb25lIHBsYWNlLgo+ IFNlZW1zIGxpa2UgdHdvIGNvbmNlcHRzIGFyZSBtaXhlZC4KPiBNYXliZSBiZSBjb25zaXN0ZW50 IGFuZCB1c2UgdTMyLCBzMzIgZXZlcnl3aGVyZT8KPiAKPiBJIGRpZCBub3QgcmVhZCB0aGUgY29k ZSBjYXJlZnVsbHkgZW5vdWdoIHRvIHVuZGVyc3RhbmQgaXQuCj4gSSBjYW5ub3QgZ2l2ZSBhIHIt YiBvciBhLWIgLSBhcyBJIGZlZWwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdG8gZG8KPiBzby4K PiAKPiAJU2FtCj4gCj4gT24gTW9uLCBBcHIgMjksIDIwMTkgYXQgMDQ6NDM6MjNQTSArMDIwMCwg VGhvbWFzIFppbW1lcm1hbm4gd3JvdGU6Cj4gPiBUaGUgdHlwZSB8c3RydWN0IGRybV9nZW1fdnJh bV9vYmplY3R8IGltcGxlbWVudHMgYSBHRU0gb2JqZWN0IGZvciBzaW1wbGUKPiA+IGZyYW1lYnVm ZmVyIGRldmljZXMgd2l0aCBkZWRpY2F0ZWQgdmlkZW8gbWVtb3J5LiBUaGUgQk8gaXMgZWl0aGVy IGxvY2F0ZWQKPiA+IGluIFZSQU0gb3Igc3lzdGVtIG1lbW9yeS4KPiA+IAo+ID4gVGhlIGltcGxl bWVudGF0aW9uIGhhcyBiZWVuIGNyZWF0ZWQgZnJvbSB0aGUgcmVzcGVjdGl2ZSBjb2RlIGluIGFz dCwKPiA+IGJvY2hzIGFuZCBtZ2FnMjAwLiBUaGVzZSBkcml2ZXJzIGNvcHkgdGhlaXIgaW1wbGVt ZW50YXRpb24gZnJvbSBlYWNoCj4gPiBvdGhlcjsgZXhjZXB0IGZvciB0aGUgbmFtZXMgb2Ygc2V2 ZXJhbCBkYXRhIHR5cGVzLiBUaGUgaGVscGVycyBhcmUKPiA+IGN1cnJlbnRseSBidWlsZCB3aXRo IFRUTSwgYnV0IHRoaXMgaXMgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbgo+ID4gZGV0YWls IGFuZCBtYXkgY2hhbmdlIGluIGZ1dHVyZSB1cGRhdGVzLgo+ID4gCj4gPiB2MjoKPiA+IAkqIHJl bmFtZSB0byB8c3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3R8Cj4gPiAJKiBtb3ZlIGRybV9pc19n ZW1fdHRtKCkgdG8gYSBsYXRlciBwYXRjaCBpbiB0aGUgc2VyaWVzCj4gPiAJKiBhZGQgZHJtX2dl bV92cmFtX2ttYXBfYXQoKQo+ID4gCSogcmV0dXJuIGlzX2lvbWVtIGZyb20ga21hcCBmdW5jdGlv bnMKPiA+IAkqIHJlZGVmaW5lIFRUTSBwbGFjZW1lbnQgZmxhZ3MgZm9yIHB1YmxpYyBpbnRlcmZh Y2UKPiA+IAkqIGRvY3VtZW50YXRpb24gZml4ZXMKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogVGhv bWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Cj4gPiAtLS0KPiA+ICBEb2N1bWVu dGF0aW9uL2dwdS9kcm0tbW0ucnN0ICAgICAgICAgICAgIHwgIDEyICsKPiA+ICBkcml2ZXJzL2dw dS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgIDEzICsKPiA+ICBkcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICA0ICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0v ZHJtX2dlbV92cmFtX2hlbHBlci5jICAgIHwgNDEwICsrKysrKysrKysrKysrKysrKysrKysrCj4g PiAgZHJpdmVycy9ncHUvZHJtL2RybV92cmFtX2hlbHBlcl9jb21tb24uYyB8ICAgNiArCj4gPiAg aW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5oICAgICAgICB8ICA5MiArKysrKwo+ID4g IDYgZmlsZXMgY2hhbmdlZCwgNTM3IGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuYwo+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1faGVscGVyX2NvbW1vbi5jCj4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaAo+ID4gCj4g PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdCBiL0RvY3VtZW50YXRp b24vZ3B1L2RybS1tbS5yc3QKPiA+IGluZGV4IDU0YTY5NmQ5NjFhNy4uZDUzMjdlZDYwOGQ3IDEw MDY0NAo+ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdAo+ID4gKysrIGIvRG9j dW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdAo+ID4gQEAgLTM4MCw2ICszODAsMTggQEAgR0VNIENN QSBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQo+ID4gIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJz L2dwdS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmMKPiA+ICAgICA6ZXhwb3J0Ogo+ID4gIAo+ID4g K0dFTSBWUkFNIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gPiArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gKwo+ID4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dw dS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gPiArICAgOmRvYzogb3ZlcnZpZXcKPiA+ICsK PiA+ICsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5oCj4g PiArICAgOmludGVybmFsOgo+ID4gKwo+ID4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCj4gPiArICAgOmV4cG9ydDoKPiA+ICsKPiA+ICBWTUEg T2Zmc2V0IE1hbmFnZXIKPiA+ICA9PT09PT09PT09PT09PT09PT0KPiA+ICAKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4g PiBpbmRleCAyMjY3ZTg0ZDVjYjQuLmMwZDQ5YTZjMDlkMiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4g QEAgLTE2MCw2ICsxNjAsMTIgQEAgY29uZmlnIERSTV9UVE0KPiA+ICAJICBHUFUgbWVtb3J5IHR5 cGVzLiBXaWxsIGJlIGVuYWJsZWQgYXV0b21hdGljYWxseSBpZiBhIGRldmljZSBkcml2ZXIKPiA+ ICAJICB1c2VzIGl0Lgo+ID4gIAo+ID4gK2NvbmZpZyBEUk1fVlJBTV9IRUxQRVIKPiA+ICsJdHJp c3RhdGUKPiA+ICsJZGVwZW5kcyBvbiBEUk0gJiYgRFJNX1RUTQo+ID4gKwloZWxwCj4gPiArCSAg SGVscGVycyBmb3IgVlJBTSBtZW1vcnkgbWFuYWdlbWVudAo+ID4gKwo+ID4gIGNvbmZpZyBEUk1f R0VNX0NNQV9IRUxQRVIKPiA+ICAJYm9vbAo+ID4gIAlkZXBlbmRzIG9uIERSTQo+ID4gQEAgLTE3 OSw2ICsxODUsMTMgQEAgY29uZmlnIERSTV9HRU1fU0hNRU1fSEVMUEVSCj4gPiAgCWhlbHAKPiA+ ICAJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVlZCB0aGUgR0VNIHNobWVtIGhlbHBlciBmdW5jdGlv bnMKPiA+ICAKPiA+ICtjb25maWcgRFJNX0dFTV9WUkFNX0hFTFBFUgo+ID4gKwlib29sCj4gPiAr CWRlcGVuZHMgb24gRFJNCj4gPiArCXNlbGVjdCBEUk1fVlJBTV9IRUxQRVIKPiA+ICsJaGVscAo+ ID4gKwkgIENob29zZSB0aGlzIGlmIHlvdSBuZWVkIHRoZSBHRU0gVlJBTSBoZWxwZXIgZnVuY3Rp b25zCj4gPiArCj4gSSBjYW5ub3QgcmVtZW1iZXIgaG93IHNlbGVjdCB3aWxsIGRlYWwgd2l0aCBz eW1ib2xzIHdob3MgaGFzCj4gYSAgImRlcGVuZHMgb24iLgo+IEJ1dCBpZiBJIHJlY2FsbCBjb3Jy ZWN0IHRoZW4gdGhlICJkZXBlbmRzIG9uIiB3aWxsIGJlIGlnbm9yZWQKPiBvciBpbiBiZXN0IGNh c2UgdHJpZ2dlciBhIHdhcm5pbmcuCj4gSW4gb3RoZXIgd29yZHMgLSB3aGVuIHdlIGhhdmUgc3lt Ym9scyB3ZSBzZWxlY3QgdGhleSBzaG91bGQgbm90Cj4gaGF2ZSBhIGRlcGVuZHMgb24uCj4gCj4g V2hhdCBjYW4gYmUgZG9uZSBpcyBzb21ldGhpbmcgbGlrZToKPiAKPiBzeW1ib2wgZm9vCj4gCWJv b2wKPiAKPiBzeW1ib2wgYmFyCj4gCWRlcGVuZHMgb24gZm9vCj4gCj4gCj4gc3ltYm9sIGZvb2Jh cgo+IAlib29sICJUaGlzIGlzIHdoYXQgeW91IG5lZWQgLSBzZWxlY3QgbWUiCj4gCXNlbGVjdCBm b28KPiAKPiBTbyB3aGVuIG9uZSBjaG9vc2VzICJmb29iYXIiIHRoZW4gd2Ugd2lsbCBzZWxlY3Qg ImZvbyIgYW5kIHRoaXMgd2lsbAo+IHNhdGlzZnkgYmFyLgo+IAo+IEJ1dCBtYXliZSB0aGlzIHJh bWJsaW5nIGlzIGlycmVsZXZhbnQgLSBtYXliZSBjaGVjayB3aGF0IHdlIGRvIHdpdGgKPiBvdGhl ciBzZWxlY3RhYmxlIHN5bWJvbHMgaW4gRFJNLgo+IAo+IAo+ID4gKy8qKgo+ID4gKyAqIERPQzog b3ZlcnZpZXcKPiA+ICsgKgo+ID4gKyAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBhIEdFTSBvYmpl Y3QgdGhhdCBpcyBiYWNrZWQgYnkgVlJBTS4gSXQKPiA+ICsgKiBjYW4gYmUgdXNlZCBmb3Igc2lt cGxlIGZyYW1lYnVmZmVyIGRldmljZXMgd2l0aCBkZWRpY2F0ZWQgbWVtb3J5Lgo+ID4gKyAqLwo+ IEl0IGlzIGxpa2VseSBvbmx5IG1lLCBidXQuLi4KPiBJIGNvdWxkIHVzZSBhIHNob3J0IGV4cGxh bmF0aW9uIHdoYXQgaXMgR0VNIGFuZCBtYXliZSBhbHNvIFZSQU0uCgpJdCBleGlzdHM6CgpodHRw czovL2RyaS5mcmVlZGVza3RvcC5vcmcvZG9jcy9kcm0vZ3B1L2RybS1tbS5odG1sI3RoZS1ncmFw aGljcy1leGVjdXRpb24tbWFuYWdlci1nZW0KCkluIHRoZSBzYW1lIGNoYXB0ZXIgZXZlbiB3aGVy ZSB0aGlzIHdpbGwgYmUgYWRkZWQuIEkgZG8gYWdyZWUgdGhhdApleHBsYWluaW5nIGEgYml0IG1v cmUgd2hhdCdzIG1lYW50IHdpdGggVlJBTSB3b3VsZCBiZSBnb29kIHRob3VnaC4KLURhbmllbAoK PiBWUkFNIGFzIHZpZGVvIFJBTSwgYnV0IG1heWJlIHRoZXJlIGlzIG1vcmUgY29uc3RyYWludHM/ Cj4gKFdoZW4gSSBmaXJzdCBsb29rZWQgYXQgRFJNIEkgd29uZGVyZWQgd2hhdCB5b3UgdXNlZCBW aXJ0dWFsIFJBTSBmb3IuCj4gQnV0IHRoYXRzIGEgbG9uZyB0aW1lIGFnbyBzbyBpdCBjb3VudHMg b25seSBhcyBhIGZ1bm55IHN0b3J5LgoKPiAKPiA+ICsgKiBCdWZmZXItb2JqZWN0cyBoZWxwZXJz Cj4gPiArICovCj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHJtX2dlbV92cmFtX2NsZWFudXAoc3Ry dWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiA+ICt7Cj4gPiArCS8qIFdlIGdvdCBoZXJl IHZpYSB0dG1fYm9fcHV0KCksIHdoaWNoIG1lYW5zIHRoYXQgdGhlCj4gPiArCSAqIFRUTSBidWZm ZXIgb2JqZWN0IGluICdibycgaGFzIGFscmVhZHkgYmVlbiBjbGVhbmVkCj4gPiArCSAqIHVwOyBv bmx5IHJlbGVhc2UgdGhlIEdFTSBvYmplY3QuICovCj4gPiArCWRybV9nZW1fb2JqZWN0X3JlbGVh c2UoJmdiby0+Z2VtKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHJtX2dlbV92cmFt X2Rlc3Ryb3koc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiA+ICt7Cj4gPiArCWRy bV9nZW1fdnJhbV9jbGVhbnVwKGdibyk7Cj4gPiArCWtmcmVlKGdibyk7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIHR0bV9idWZmZXJfb2JqZWN0X2Rlc3Ryb3koc3RydWN0IHR0bV9idWZm ZXJfb2JqZWN0ICpibykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpn Ym8gPSBkcm1fZ2VtX3ZyYW1fb2ZfYm8oYm8pOwo+ID4gKwlkcm1fZ2VtX3ZyYW1fZGVzdHJveShn Ym8pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fcGxhY2VtZW50 KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIGludCBwbF9mbGFnKQo+ID4gK3sKPiA+ ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCXVuc2lnbmVkIGludCBjID0gMDsKPiA+ICsKPiA+ICsJ Z2JvLT5wbGFjZW1lbnQucGxhY2VtZW50ID0gZ2JvLT5wbGFjZW1lbnRzOwo+ID4gKwlnYm8tPnBs YWNlbWVudC5idXN5X3BsYWNlbWVudCA9IGdiby0+cGxhY2VtZW50czsKPiA+ICsKPiA+ICsJaWYg KHBsX2ZsYWcgJiBUVE1fUExfRkxBR19WUkFNKQo+ID4gKwkJZ2JvLT5wbGFjZW1lbnRzW2MrK10u ZmxhZ3MgPSBUVE1fUExfRkxBR19XQyB8Cj4gPiArCQkJCQkgICAgIFRUTV9QTF9GTEFHX1VOQ0FD SEVEIHwKPiA+ICsJCQkJCSAgICAgVFRNX1BMX0ZMQUdfVlJBTTsKPiA+ICsKPiA+ICsJaWYgKHBs X2ZsYWcgJiBUVE1fUExfRkxBR19TWVNURU0pCj4gPiArCQlnYm8tPnBsYWNlbWVudHNbYysrXS5m bGFncyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcgfAo+ID4gKwkJCQkJICAgICBUVE1fUExfRkxBR19T WVNURU07Cj4gPiArCj4gPiArCWlmICghYykKPiA+ICsJCWdiby0+cGxhY2VtZW50c1tjKytdLmZs YWdzID0gVFRNX1BMX01BU0tfQ0FDSElORyB8Cj4gPiArCQkJCQkgICAgIFRUTV9QTF9GTEFHX1NZ U1RFTTsKPiA+ICsKPiA+ICsJZ2JvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IGM7Cj4gPiAr CWdiby0+cGxhY2VtZW50Lm51bV9idXN5X3BsYWNlbWVudCA9IGM7Cj4gPiArCj4gPiArCWZvciAo aSA9IDA7IGkgPCBjOyArK2kpIHsKPiA+ICsJCWdiby0+cGxhY2VtZW50c1tpXS5mcGZuID0gMDsK PiA+ICsJCWdiby0+cGxhY2VtZW50c1tpXS5scGZuID0gMDsKPiA+ICsJfQo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50IGRybV9nZW1fdnJhbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gPiArCQkJICAgICBzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKPiA+ICsJCQkgICAgIHN0 cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCj4gPiArCQkJICAgICB1bnNpZ25lZCBsb25n IHNpemUsIHVpbnQzMl90IHBnX2FsaWduLAo+ID4gKwkJCSAgICAgYm9vbCBpbnRlcnJ1cHRpYmxl KQo+ID4gK3sKPiA+ICsJaW50IHJldDsKPiA+ICsJc2l6ZV90IGFjY19zaXplOwo+ID4gKwo+ID4g KwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJmdiby0+Z2VtLCBzaXplKTsKPiA+ICsJ aWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCWFjY19zaXplID0gdHRtX2Jv X2RtYV9hY2Nfc2l6ZShiZGV2LCBzaXplLCBzaXplb2YoKmdibykpOwo+ID4gKwo+ID4gKwlnYm8t PmJvLmJkZXYgPSBiZGV2Owo+ID4gKwlkcm1fZ2VtX3ZyYW1fcGxhY2VtZW50KGdibywgVFRNX1BM X0ZMQUdfVlJBTSB8IFRUTV9QTF9GTEFHX1NZU1RFTSk7Cj4gPiArCj4gPiArCXJldCA9IHR0bV9i b19pbml0KGJkZXYsICZnYm8tPmJvLCBzaXplLCB0dG1fYm9fdHlwZV9kZXZpY2UsCj4gPiArCQkJ ICAmZ2JvLT5wbGFjZW1lbnQsIHBnX2FsaWduLCBpbnRlcnJ1cHRpYmxlLCBhY2Nfc2l6ZSwKPiA+ ICsJCQkgIE5VTEwsIE5VTEwsIHR0bV9idWZmZXJfb2JqZWN0X2Rlc3Ryb3kpOwo+ID4gKwlpZiAo cmV0KQo+ID4gKwkJZ290byBlcnJfZHJtX2dlbV9vYmplY3RfcmVsZWFzZTsKPiA+ICsKPiA+ICsJ cmV0dXJuIDA7Cj4gPiArCj4gPiArZXJyX2RybV9nZW1fb2JqZWN0X3JlbGVhc2U6Cj4gPiArCWRy bV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Z2VtKTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9 Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV92cmFtX2NyZWF0ZSgpIC0gQ3JlYXRlcyBh IFZSQU0tYmFja2VkIEdFTSBvYmplY3QKPiA+ICsgKiBAZGV2OgkJdGhlIERSTSBkZXZpY2UKPiA+ ICsgKiBAYmRldjoJCXRoZSBUVE0gQk8gZGV2aWNlIGJhY2tpbmcgdGhlIG9iamVjdAo+ID4gKyAq IEBzaXplOgkJdGhlIGJ1ZmZlciBzaXplIGluIGJ5dGVzCj4gPiArICogQHBnX2FsaWduOgkJdGhl IGJ1ZmZlcidzIGFsaWdubWVudCBpbiBtdWx0aXBsZXMgb2YgdGhlIHBhZ2Ugc2l6ZQo+ID4gKyAq IEBpbnRlcnJ1cHRpYmxlOglzbGVlcCBpbnRlcnJ1cHRpYmxlIGlmIHdhaXRpbmcgZm9yIG1lbW9y eQo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBBIG5ldyBpbnN0YW5jZSBvZiAmc3Ry dWN0IGRybV9nZW1fdnJhbV9vYmplY3Qgb24gc3VjY2Vzcywgb3IKPiA+ICsgKiBhbiBFUlJfUFRS KCktZW5jb2RlZCBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCogZHJtX2dlbV92cmFtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+ID4gKwkJCQkJCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAo+ID4gKwkJCQkJCXVu c2lnbmVkIGxvbmcgc2l6ZSwKPiA+ICsJCQkJCQl1aW50MzJfdCBwZ19hbGlnbiwKPiA+ICsJCQkJ CQlib29sIGludGVycnVwdGlibGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2dlbV92cmFtX29i amVjdCAqZ2JvOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlnYm8gPSBremFsbG9jKHNpemVv ZigqZ2JvKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghZ2JvKQo+ID4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Cj4gPiArCj4gPiArCXJldCA9IGRybV9nZW1fdnJhbV9pbml0KGRldiwgYmRl diwgZ2JvLCBzaXplLCBwZ19hbGlnbiwgaW50ZXJydXB0aWJsZSk7Cj4gPiArCWlmIChyZXQgPCAw KQo+ID4gKwkJZ290byBlcnJfa2ZyZWU7Cj4gPiArCj4gPiArCXJldHVybiBnYm87Cj4gPiArCj4g PiArZXJyX2tmcmVlOgo+ID4gKwlrZnJlZShnYm8pOwo+ID4gKwlyZXR1cm4gRVJSX1BUUihyZXQp Owo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9jcmVhdGUpOwo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIGRybV9nZW1fdnJhbV9wdXQoKSAtIFJlbGVhc2VzIGEgcmVmZXJlbmNl IHRvIGEgVlJBTS1iYWNrZWQgR0VNIG9iamVjdAo+ID4gKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBv YmplY3QKPiA+ICsgKgo+ID4gKyAqIFNlZSB0dG1fYm9fcHV0KCkgZm9yIG1vcmUgaW5mb3JtYXRp b24uCj4gPiArICovCj4gPiArdm9pZCBkcm1fZ2VtX3ZyYW1fcHV0KHN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8pCj4gPiArewo+ID4gKwl0dG1fYm9fcHV0KCZnYm8tPmJvKTsKPiA+ICt9 Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fcHV0KTsKPiA+ICsKPiA+ICsvKioKPiA+ ICsgKiBkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZSgpIC0gUmVzZXJ2ZXMgYSBWUkFNLWJhY2tlZCBHRU0g b2JqZWN0Cj4gPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAo+ID4gKyAqIEBub193YWl0 Oglkb24ndCB3YWl0IGZvciBidWZmZXIgb2JqZWN0IHRvIGJlY29tZSBhdmFpbGFibGUKPiA+ICsg Kgo+ID4gKyAqIFNlZSB0dG1fYm9fcmVzZXJ2ZSgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgo+ID4g KyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiAwIG9uIHN1Y2Nlc3MsIG9yCj4gPiArICogYSBu ZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQo+ID4gKyAqLwo+ID4gK2ludCBkcm1fZ2VtX3Zy YW1fcmVzZXJ2ZShzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLCBib29sIG5vX3dhaXQp Cj4gPiArewo+ID4gKwlyZXR1cm4gdHRtX2JvX3Jlc2VydmUoJmdiby0+Ym8sIHRydWUsIG5vX3dh aXQsIE5VTEwpOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9yZXNlcnZl KTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX3ZyYW1fdW5yZXNlcnZlKCkgLSBcCj4g PiArCVJlbGVhc2UgYSByZXNlcnZhdGlvbiBhY3F1aXJlZCBieSBkcm1fZ2VtX3ZyYW1fcmVzZXJ2 ZSgpCj4gPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAo+ID4gKyAqCj4gPiArICogU2Vl IHR0bV9ib191bnJlc2VydmUoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KPiA+ICsgKi8KPiA+ICt2 b2lkIGRybV9nZW1fdnJhbV91bnJlc2VydmUoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bykKPiA+ICt7Cj4gPiArCXR0bV9ib191bnJlc2VydmUoJmdiby0+Ym8pOwo+ID4gK30KPiA+ICtF WFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV91bnJlc2VydmUpOwo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIGRybV9nZW1fdnJhbV9tbWFwX29mZnNldCgpIC0gUmV0dXJucyBhIEdFTSBWUkFNIG9iamVj dCdzIG1tYXAgb2Zmc2V0Cj4gPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAo+ID4gKyAq Cj4gPiArICogU2VlIGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigpIGZvciBtb3JlIGluZm9ybWF0 aW9uLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBUaGUgYnVmZmVyIG9iamVjdCdz IG9mZnNldCBmb3IgdXNlcnNwYWNlIG1hcHBpbmdzIG9uIHN1Y2Nlc3MsIG9yCj4gPiArICogMCBp ZiBubyBvZmZzZXQgaXMgYWxsb2NhdGVkLgo+ID4gKyAqLwo+ID4gK3U2NCBkcm1fZ2VtX3ZyYW1f bW1hcF9vZmZzZXQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKPiA+ICt7Cj4gPiAr CXJldHVybiBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJmdiby0+Ym8udm1hX25vZGUpOwo+ID4g K30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9tbWFwX29mZnNldCk7Cj4gPiArCj4g PiArLyoqCj4gPiArICogZHJtX2dlbV92cmFtX29mZnNldCgpIC0gXAo+ID4gKwlSZXR1cm5zIGEg R0VNIFZSQU0gb2JqZWN0J3Mgb2Zmc2V0IGluIHZpZGVvIG1lbW9yeQo+ID4gKyAqIEBnYm86CXRo ZSBHRU0gVlJBTSBvYmplY3QKPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0 aGUgYnVmZmVyIG9iamVjdCdzIG9mZnNldCBpbiB0aGUgZGV2aWNlJ3MgdmlkZW8KPiA+ICsgKiBt ZW1vcnkuIFRoZSBidWZmZXIgb2JqZWN0IGhhcyB0byBiZSBwaW5uZWQgdG8gJVRUTV9QTF9WUkFN Lgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBUaGUgYnVmZmVyIG9iamVjdCdzIG9m ZnNldCBpbiB2aWRlbyBtZW1vcnkgb24gc3VjY2Vzcywgb3IKPiA+ICsgKiBhIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb3RoZXJ3aXNlLgo+ID4gKyAqLwo+ID4gK3M2NCBkcm1fZ2VtX3ZyYW1fb2Zmc2V0 KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pCj4gPiArewo+ID4gKwlpZiAoIWdiby0+ cGluX2NvdW50KQo+ID4gKwkJcmV0dXJuIChzNjQpLUVOT0RFVjsKPiA+ICsJcmV0dXJuIGdiby0+ Ym8ub2Zmc2V0Owo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9vZmZzZXQp Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9nZW1fdnJhbV9waW4oKSAtIFBpbnMgYSBHRU0g VlJBTSBvYmplY3QgaW4gYSByZWdpb24uCj4gPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVj dAo+ID4gKyAqIEBwbF9mbGFnOglhIGJpdG1hc2sgb2YgcG9zc2libGUgbWVtb3J5IHJlZ2lvbnMK PiA+ICsgKgo+ID4gKyAqIFBpbm5pbmcgYSBidWZmZXIgb2JqZWN0IGVuc3VyZXMgdGhhdCBpdCBp cyBub3QgZXZpY3RlZCBmcm9tCj4gPiArICogYSBtZW1vcnkgcmVnaW9uLiBBIHBpbm5lZCBidWZm ZXIgb2JqZWN0IGhhcyB0byBiZSB1bnBpbm5lZCBiZWZvcmUKPiA+ICsgKiBpdCBjYW4gYmUgcGlu bmVkIHRvIGFub3RoZXIgcmVnaW9uLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiAw IG9uIHN1Y2Nlc3MsIG9yCj4gPiArICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4K PiA+ICsgKi8KPiA+ICtpbnQgZHJtX2dlbV92cmFtX3BpbihzdHJ1Y3QgZHJtX2dlbV92cmFtX29i amVjdCAqZ2JvLCB1MzIgcGxfZmxhZykKPiA+ICt7Cj4gPiArCWludCBpLCByZXQ7Cj4gPiArCXN0 cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9Owo+ID4gKwo+ID4g KwlpZiAoZ2JvLT5waW5fY291bnQpIHsKPiA+ICsJCSsrZ2JvLT5waW5fY291bnQ7Cj4gPiArCQly ZXR1cm4gMDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1fZ2VtX3ZyYW1fcGxhY2VtZW50KGdibywg cGxfZmxhZyk7Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBnYm8tPnBsYWNlbWVudC5udW1fcGxhY2Vt ZW50OyArK2kpCj4gPiArCQlnYm8tPnBsYWNlbWVudHNbaV0uZmxhZ3MgfD0gVFRNX1BMX0ZMQUdf Tk9fRVZJQ1Q7Cj4gPiArCj4gPiArCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmZ2JvLT5ibywgJmdi by0+cGxhY2VtZW50LCAmY3R4KTsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlyZXR1cm4gcmV0 Owo+ID4gKwo+ID4gKwlnYm8tPnBpbl9jb3VudCA9IDE7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9waW4pOwo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIGRybV9nZW1fdnJhbV91bnBpbigpIC0gVW5waW5zIGEgR0VNIFZSQU0gb2JqZWN0 Cj4gPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAo+ID4gKyAqCj4gPiArICogUmV0dXJu czoKPiA+ICsgKiAwIG9uIHN1Y2Nlc3MsIG9yCj4gPiArICogYSBuZWdhdGl2ZSBlcnJvciBjb2Rl IG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ICtpbnQgZHJtX2dlbV92cmFtX3VucGluKHN0cnVjdCBk cm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pCj4gPiArewo+ID4gKwlpbnQgaSwgcmV0Owo+ID4gKwlz dHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKPiA+ICsKPiA+ ICsJaWYgKCFnYm8tPnBpbl9jb3VudCkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwktLWdi by0+cGluX2NvdW50Owo+ID4gKwlpZiAoZ2JvLT5waW5fY291bnQpCj4gPiArCQlyZXR1cm4gMDsK PiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IGdiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQg OyArK2kpCj4gPiArCQlnYm8tPnBsYWNlbWVudHNbaV0uZmxhZ3MgJj0gflRUTV9QTF9GTEFHX05P X0VWSUNUOwo+ID4gKwo+ID4gKwlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmdiby0+Ym8sICZnYm8t PnBsYWNlbWVudCwgJmN0eCk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJcmV0dXJuIHJldDsK PiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92 cmFtX3VucGluKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX3ZyYW1fcHVzaF90b19z eXN0ZW0oKSAtIFwKPiA+ICsJVW5waW5zIGEgR0VNIFZSQU0gb2JqZWN0IGFuZCBtb3ZlcyBpdCB0 byBzeXN0ZW0gbWVtb3J5Cj4gPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAo+ID4gKyAq Cj4gPiArICogVGhpcyBvcGVyYXRpb24gb25seSB3b3JrcyBpZiB0aGUgY2FsbGVyIGhvbGRzIHRo ZSBmaW5hbCBwaW4gb24gdGhlCj4gPiArICogYnVmZmVyIG9iamVjdC4KPiA+ICsgKgo+ID4gKyAq IFJldHVybnM6Cj4gPiArICogMCBvbiBzdWNjZXNzLCBvcgo+ID4gKyAqIGEgbmVnYXRpdmUgZXJy b3IgY29kZSBvdGhlcndpc2UuCj4gPiArICovCj4gPiAraW50IGRybV9nZW1fdnJhbV9wdXNoX3Rv X3N5c3RlbShzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ID4gK3sKPiA+ICsJaW50 IGksIHJldDsKPiA+ICsJc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4IGN0eCA9IHsgZmFsc2UsIGZh bHNlIH07Cj4gPiArCj4gPiArCWlmICghZ2JvLT5waW5fY291bnQpCj4gPiArCQlyZXR1cm4gMDsK PiA+ICsKPiA+ICsJLS1nYm8tPnBpbl9jb3VudDsKPiA+ICsJaWYgKGdiby0+cGluX2NvdW50KQo+ ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCWlmIChnYm8tPmttYXAudmlydHVhbCkKPiA+ICsJ CXR0bV9ib19rdW5tYXAoJmdiby0+a21hcCk7Cj4gPiArCj4gPiArCWRybV9nZW1fdnJhbV9wbGFj ZW1lbnQoZ2JvLCBUVE1fUExfRkxBR19TWVNURU0pOwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgZ2Jv LT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA7ICsraSkKPiA+ICsJCWdiby0+cGxhY2VtZW50c1tp XS5mbGFncyB8PSBUVE1fUExfRkxBR19OT19FVklDVDsKPiA+ICsKPiA+ICsJcmV0ID0gdHRtX2Jv X3ZhbGlkYXRlKCZnYm8tPmJvLCAmZ2JvLT5wbGFjZW1lbnQsICZjdHgpOwo+ID4gKwlpZiAocmV0 KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK0VY UE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3B1c2hfdG9fc3lzdGVtKTsKPiA+ICsKPiA+ICsvKioK PiA+ICsgKiBkcm1fZ2VtX3ZyYW1fa21hcF9hdCgpIC0gTWFwcyBhIEdFTSBWUkFNIG9iamVjdCBp bnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlCj4gPiArICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVj dAo+ID4gKyAqIEBtYXA6CWVzdGFibGlzaCBhIG1hcHBpbmcgaWYgbmVjZXNzYXJ5Cj4gPiArICog QGlzX2lvbWVtOglyZXR1cm5zIHRydWUgaWYgdGhlIG1hcHBlZCBtZW1vcnkgaXMgSS9PIG1lbW9y eSwgb3IgZmFsc2UgXAo+ID4gKwlvdGhlcndpc2U7IGNhbiBiZSBOVUxMCj4gPiArICogQGttYXA6 CXRoZSBtYXBwaW5nJ3Mga21hcCBvYmplY3QKPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24g bWFwcyB0aGUgYnVmZmVyIG9iamVjdCBpbnRvIHRoZSBrZXJuZWwncyBhZGRyZXNzIHNwYWNlCj4g PiArICogb3IgcmV0dXJucyB0aGUgY3VycmVudCBtYXBwaW5nLiBJZiB0aGUgcGFyYW1ldGVyIG1h cCBpcyBmYWxzZSwgdGhlCj4gPiArICogZnVuY3Rpb24gb25seSBxdWVyaWVzIHRoZSBjdXJyZW50 IG1hcHBpbmcsIGJ1dCBkb2VzIG5vdCBlc3RhYmxpc2ggYQo+ID4gKyAqIG5ldyBvbmUuCj4gPiAr ICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqIFRoZSBidWZmZXJzIHZpcnR1YWwgYWRkcmVzcyBp ZiBtYXBwZWQsIG9yCj4gPiArICogTlVMTCBpZiBub3QgbWFwcGVkLCBvcgo+ID4gKyAqIGFuIEVS Ul9QVFIoKS1lbmNvZGVkIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgo+ID4gKyAqLwo+ID4gK3ZvaWQq IGRybV9nZW1fdnJhbV9rbWFwX2F0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIGJv b2wgbWFwLAo+ID4gKwkJCSAgIGJvb2wgKmlzX2lvbWVtLCBzdHJ1Y3QgdHRtX2JvX2ttYXBfb2Jq ICprbWFwKQo+ID4gK3sKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJaWYgKGttYXAtPnZpcnR1 YWwgfHwgIW1hcCkKPiA+ICsJCWdvdG8gb3V0Owo+ID4gKwo+ID4gKwlyZXQgPSB0dG1fYm9fa21h cCgmZ2JvLT5ibywgMCwgZ2JvLT5iby5udW1fcGFnZXMsIGttYXApOwo+ID4gKwlpZiAocmV0KQo+ ID4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ICsKPiA+ICtvdXQ6Cj4gPiArCWlmICghaXNf aW9tZW0pIHsKPiA+ICsJCXJldHVybiBrbWFwLT52aXJ0dWFsOwo+ID4gKwl9Cj4gPiArCWlmICgh a21hcC0+dmlydHVhbCkgewo+ID4gKwkJKmlzX2lvbWVtID0gZmFsc2U7Cj4gPiArCQlyZXR1cm4g TlVMTDsKPiA+ICsJfQo+ID4gKwlyZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoa21hcCwgaXNf aW9tZW0pOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9rbWFwX2F0KTsK PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX3ZyYW1fa21hcCgpIC0gTWFwcyBhIEdFTSBW UkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlCj4gPiArICogQGdibzoJdGhlIEdF TSBWUkFNIG9iamVjdAo+ID4gKyAqIEBtYXA6CWVzdGFibGlzaCBhIG1hcHBpbmcgaWYgbmVjZXNz YXJ5Cj4gPiArICogQGlzX2lvbWVtOglyZXR1cm5zIHRydWUgaWYgdGhlIG1hcHBlZCBtZW1vcnkg aXMgSS9PIG1lbW9yeSwgb3IgZmFsc2UgXAo+ID4gKwlvdGhlcndpc2U7IGNhbiBiZSBOVUxMCj4g PiArICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGJ1ZmZlciBvYmplY3QgaW50byB0 aGUga2VybmVsJ3MgYWRkcmVzcyBzcGFjZQo+ID4gKyAqIG9yIHJldHVybnMgdGhlIGN1cnJlbnQg bWFwcGluZy4gSWYgdGhlIHBhcmFtZXRlciBtYXAgaXMgZmFsc2UsIHRoZQo+ID4gKyAqIGZ1bmN0 aW9uIG9ubHkgcXVlcmllcyB0aGUgY3VycmVudCBtYXBwaW5nLCBidXQgZG9lcyBub3QgZXN0YWJs aXNoIGEKPiA+ICsgKiBuZXcgb25lLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBU aGUgYnVmZmVycyB2aXJ0dWFsIGFkZHJlc3MgaWYgbWFwcGVkLCBvcgo+ID4gKyAqIE5VTEwgaWYg bm90IG1hcHBlZCwgb3IKPiA+ICsgKiBhbiBFUlJfUFRSKCktZW5jb2RlZCBlcnJvciBjb2RlIG90 aGVyd2lzZS4KPiA+ICsgKi8KPiA+ICt2b2lkKiBkcm1fZ2VtX3ZyYW1fa21hcChzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCAqZ2JvLCBib29sIG1hcCwKPiA+ICsJCQlib29sICppc19pb21lbSkK PiA+ICt7Cj4gPiArCXJldHVybiBkcm1fZ2VtX3ZyYW1fa21hcF9hdChnYm8sIG1hcCwgaXNfaW9t ZW0sICZnYm8tPmttYXApOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9r bWFwKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX3ZyYW1fa3VubWFwX2F0KCkgLSBV bm1hcHMgYSBHRU0gVlJBTSBvYmplY3QKPiA+ICsgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0 Cj4gPiArICogQGttYXA6CXRoZSBtYXBwaW5nJ3Mga21hcCBvYmplY3QKPiA+ICsgKi8KPiA+ICt2 b2lkIGRybV9nZW1fdnJhbV9rdW5tYXBfYXQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bywKPiA+ICsJCQkgICAgc3RydWN0IHR0bV9ib19rbWFwX29iaiAqa21hcCkKPiA+ICt7Cj4gPiAr CWlmICgha21hcC0+dmlydHVhbCkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJdHRtX2JvX2t1 bm1hcChrbWFwKTsKPiA+ICsJa21hcC0+dmlydHVhbCA9IE5VTEw7Cj4gPiArfQo+ID4gK0VYUE9S VF9TWU1CT0woZHJtX2dlbV92cmFtX2t1bm1hcF9hdCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICog ZHJtX2dlbV92cmFtX2t1bm1hcCgpIC0gVW5tYXBzIGEgR0VNIFZSQU0gb2JqZWN0Cj4gPiArICog QGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAo+ID4gKyAqLwo+ID4gK3ZvaWQgZHJtX2dlbV92cmFt X2t1bm1hcChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQo+ID4gK3sKPiA+ICsJZHJt X2dlbV92cmFtX2t1bm1hcF9hdChnYm8sICZnYm8tPmttYXApOwo+ID4gK30KPiA+ICtFWFBPUlRf U1lNQk9MKGRybV9nZW1fdnJhbV9rdW5tYXApOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fdnJhbV9oZWxwZXJfY29tbW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1f aGVscGVyX2NvbW1vbi5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAw MDAwMDAwLi43NmI2NTY5YzlhYWQKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fdnJhbV9oZWxwZXJfY29tbW9uLmMKPiA+IEBAIC0wLDAgKzEsNiBAQAo+ID4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCj4gPiArCj4g PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKwo+ID4gK01PRFVMRV9ERVNDUklQVElP TigiRFJNIFZSQU0gbWVtb3J5LW1hbmFnZW1lbnQgaGVscGVycyIpOwo+ID4gK01PRFVMRV9MSUNF TlNFKCJHUEwiKTsKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVs cGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmgKPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjE2NzYxNmY1NTJlNQo+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5oCj4gPiBA QCAtMCwwICsxLDkyIEBACj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIERSTV9HRU1fVlJBTV9IRUxQRVJfSAo+ID4g KyNkZWZpbmUgRFJNX0dFTV9WUkFNX0hFTFBFUl9ICj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9k cm1fZ2VtLmg+Cj4gPiArI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2FwaS5oPgo+ID4gKyNpbmNs dWRlIDxkcm0vdHRtL3R0bV9wbGFjZW1lbnQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+IC8qIGZvciBjb250YWluZXJfb2YoKSAqLwo+ID4gKwo+ID4gK3N0cnVjdCBmaWxwOwo+ID4g Kwo+ID4gKyNkZWZpbmUgRFJNX0dFTV9WUkFNX1BMX0ZMQUdfVlJBTQlUVE1fUExfRkxBR19WUkFN Cj4gPiArI2RlZmluZSBEUk1fR0VNX1ZSQU1fUExfRkxBR19TWVNURU0JVFRNX1BMX0ZMQUdfU1lT VEVNCj4gPiArCj4gPiArLyoKPiA+ICsgKiBCdWZmZXItb2JqZWN0IGhlbHBlcnMKPiA+ICsgKi8K PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAtIEdFTSBv YmplY3QgYmFja2VkIGJ5IFZSQU0KPiA+ICsgKiBAZ2VtOglHRU0gb2JqZWN0Cj4gPiArICogQGJv OgkJVFRNIGJ1ZmZlciBvYmplY3QKPiA+ICsgKiBAa21hcDoJTWFwcGluZyBpbmZvcm1hdGlvbiBm b3IgQGJvCj4gPiArICogQHBsYWNlbWVudDoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlvbi4gU3Vw cG9ydGVkIHBsYWNlbWVudHMgYXJlIFwKPiA+ICsJJVRUTV9QTF9WUkFNIGFuZCAlVFRNX1BMX1NZ U1RFTQo+ID4gKyAqIEBwbGFjZW1lbnRzOglUVE0gcGxhY2VtZW50IGluZm9ybWF0aW9uLgo+ID4g KyAqIEBwaW5fY291bnQ6CVBpbiBjb3VudGVyCj4gPiArICoKPiA+ICsgKiBUaGUgdHlwZSBzdHJ1 Y3QgZHJtX2dlbV92cmFtX29iamVjdCByZXByZXNlbnRzIGEgR0VNIG9iamVjdCB0aGF0IGlzCj4g PiArICogYmFja2VkIGJ5IFZSQU0uIEl0IGNhbiBiZSB1c2VkIGZvciBzaW1wbGUgZnJhbWJ1ZmZl ciBkZXZpY2VzIHdpdGgKPiA+ICsgKiBkZWRpY2F0ZWQgbWVtb3J5LiBUaGUgYnVmZmVyIG9iamVj dCBjYW4gYmUgZXZpY3RlZCB0byBzeXN0ZW0gbWVtb3J5IGlmCj4gPiArICogdmlkZW8gbWVtb3J5 IGJlY29tZXMgc2NhcmNlLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 IHsKPiA+ICsgICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCBnZW07Cj4gPiArICAgICAgICBz dHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgYm87Cj4gPiArICAgICAgICBzdHJ1Y3QgdHRtX2JvX2tt YXBfb2JqIGttYXA7Cj4gPiArCj4gPiArCS8qIFN1cHBvcnRlZCBwbGFjZW1lbnRzIGFyZSAlVFRN X1BMX1ZSQU0gYW5kICVUVE1fUExfU1lTVEVNICovCj4gPiArICAgICAgICBzdHJ1Y3QgdHRtX3Bs YWNlbWVudCBwbGFjZW1lbnQ7Cj4gPiArICAgICAgICBzdHJ1Y3QgdHRtX3BsYWNlIHBsYWNlbWVu dHNbM107Cj4gPiArCj4gPiArICAgICAgICBpbnQgcGluX2NvdW50Owo+ID4gK307Cj4gVXNlIHRh YnMgZm9yIGluZGVudCAtIG5vdCBzcGFjZXMuCj4gQXNrIGNoZWNrcGF0Y2ggaWYgYW55dGhpbmcg c2ltaWxhciBuZWVkcyB0byBiZSBhZGp1c3RlZC4KPiAKPiAKPiA+ICsKPiA+ICsvKioKPiA+ICsg KiBSZXR1cm5zIHRoZSBjb250YWluZXIgb2YgdHlwZSAmc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QKPiA+ICsgKiBmb3IgZmllbGQgYm8uCj4gPiArICogQGJvOgkJdGhlIFZSQU0gYnVmZmVyIG9i amVjdAo+ID4gKyAqIFJldHVybnM6CVRoZSBjb250YWluaW5nIEdFTSBWUkFNIG9iamVjdAo+ID4g KyAqLwo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QqIGRybV9n ZW1fdnJhbV9vZl9ibygKPiA+ICsJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKPiA+ICt7 Cj4gPiArCXJldHVybiBjb250YWluZXJfb2YoYm8sIHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 LCBibyk7Cj4gPiArfQo+IEluZGVudCBmdW5ueS4gVVNlIHNhbWUgaW5kZW50IGFzIHVzZWQgaW4g b3RoZXIgcGFydHMgb2YgZmlsZSBmb3IKPiBmdW5jdGlvbiBhcmd1bWVudHMuCj4gCj4gPiArCj4g PiArLyoqCj4gPiArICogUmV0dXJucyB0aGUgY29udGFpbmVyIG9mIHR5cGUgJnN0cnVjdCBkcm1f Z2VtX3ZyYW1fb2JqZWN0Cj4gPiArICogZm9yIGZpZWxkIGdlbS4KPiA+ICsgKiBAZ2VtOgl0aGUg R0VNIG9iamVjdAo+ID4gKyAqIFJldHVybnM6CVRoZSBjb250YWluaW5nIEdFTSBWUkFNIG9iamVj dAo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qq IGRybV9nZW1fdnJhbV9vZl9nZW0oCj4gPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKQo+ ID4gK3sKPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihnZW0sIHN0cnVjdCBkcm1fZ2VtX3ZyYW1f b2JqZWN0LCBnZW0pOwo+ID4gK30KPiBkaXR0bwo+IAo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0KiBkcm1fZ2VtX3ZyYW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gPiArCQkJCQkJc3RydWN0IHR0bV9ib19kZXZpY2UqIGJkZXYsCj4gPiArCQkJCQkJdW5zaWdu ZWQgbG9uZyBzaXplLAo+ID4gKwkJCQkJCXVpbnQzMl90IHBnX2FsaWduLAo+ID4gKwkJCQkJCWJv b2wgaW50ZXJydXB0aWJsZSk7Cj4gCj4gSGVyZSBpcyBpcyAibm9ybWFsIgo+IAoKLS0gCkRhbmll bCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9n LmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==