From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 03/59] drm/prime: Update docs Date: Mon, 17 Jun 2019 18:38:11 +0200 Message-ID: <20190617163811.GK12905@phenom.ffwll.local> References: <20190614203615.12639-1-daniel.vetter@ffwll.ch> <20190614203615.12639-4-daniel.vetter@ffwll.ch> <20190615114153.GA20240@ravnborg.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190615114153.GA20240@ravnborg.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Sam Ravnborg Cc: Daniel Vetter , Intel Graphics Development , DRI Development , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gU2F0LCBKdW4gMTUsIDIwMTkgYXQgMDE6NDE6NTNQTSArMDIwMCwgU2FtIFJhdm5ib3JnIHdy b3RlOgo+IEhpIERhbmllbAo+IAo+IEJldHRlciBhbmQgbW9yZSBjb25zaXN0ZW50IGRvY3MgLSBn b29kIQo+IFdpdGggcmVsZXZhbnQgY29tbWVudHMgYWRkcmVzc2VkOgo+IFJldmlld2VkLWJ5OiBT YW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+Cj4gCj4gPiArLyoqCj4gPiArICogRE9DOiBv dmVydmlldyBhbmQgbGlmZXRpbWUgcnVsZXMKPiA+ICsgKgo+ID4gKyAqIFNpbWlsYXIgdG8gR0VN IGdsb2JhbCBuYW1lcywgUFJJTUUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgYWxzbyB1c2VkIHRvIHNo YXJlCj4gPiArICogYnVmZmVyIG9iamVjdHMgYWNyb3NzIHByb2Nlc3Nlcy4gVGhleSBvZmZlciBh ZGRpdGlvbmFsIHNlY3VyaXR5OiBhcyBmaWxlCj4gPiArICogZGVzY3JpcHRvcnMgbXVzdCBiZSBl eHBsaWNpdGx5IHNlbnQgb3ZlciBVTklYIGRvbWFpbiBzb2NrZXRzIHRvIGJlIHNoYXJlZAo+ID4g KyAqIGJldHdlZW4gYXBwbGljYXRpb25zLCB0aGV5IGNhbid0IGJlIGd1ZXNzZWQgbGlrZSB0aGUg Z2xvYmFsbHkgdW5pcXVlIEdFTQo+ID4gKyAqIG5hbWVzLgo+IEZvciBhIG5ld2JpZSBsaWtlIG1l IHRoZSBhYm92ZSBkb2VzIG5vdCByZWFsbHkgaGVscCB0byB1bmRlcnN0YW5kIHdoYXQKPiBQUklN RSBpcy4KPiBZZXMsIGl0IGlzIGZpbGUgZGVzY3JpcHRvcnMgdXNlZCB0byBzaGFyZSBidWZmZXIg b2JqZWN0cyBhY3Jvc3MKPiBwcm9jZXNzZXMuCj4gQnV0IHRoZSB0ZXh0IHNheSAiYWxzbyB1c2Vk IC4uIiwgc28gdGhlIG1haW4gdXNhZ2Ugb2YgUFJJTUUgaXMgc29tZXRoaW5nCj4gZWxzZS4KCk5v LCB3aGF0J3MgbWVhbiBoZXJlIGlzIHRoYXQgcHJpbWUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgdXNl ZCBsaWtlIGdlbQpnbG9iYWwgbmFtZXMsIGZvciBidWZmZXIgc2hhcmluZy4gVGhhdCdzIHdoYXQg dGhlICJhbHNvIiBtZWFucyBoZXJlLgpUaGVyZSdzIG5vIG90aGVyIHVzZSBmb3IgcHJpbWUgZmQg dGhhbiBzaGFyaW5nIGJ1ZmZlcnMuCgpOb3QgcmVhbGx5IGNsZWFyIHdoeSB0aGlzIGlzIHVuY2xl YXIgLi4uCgo+IEJ1dCBhcyBzYWlkLCBuZXdiaWUgc28gaXQgbWF5IGJlIGZpbmUgZm9yIG1vc3Qg cmVhZGVycy4KPiAKPiA+ICsgKgo+ID4gKyAqIERyaXZlcnMgdGhhdCBzdXBwb3J0IHRoZSBQUklN RSBBUEkgbXVzdCBzZXQgdGhlIERSSVZFUl9QUklNRSBiaXQgaW4gdGhlCj4gPiArICogJmRybV9k cml2ZXIuZHJpdmVyX2ZlYXR1cmVzIGZpZWxkLCBhbmQgaW1wbGVtZW50IHRoZQo+ID4gKyAqICZk cm1fZHJpdmVyLnByaW1lX2hhbmRsZV90b19mZCBhbmQgJmRybV9kcml2ZXIucHJpbWVfZmRfdG9f aGFuZGxlIG9wZXJhdGlvbnMuCj4gCj4gPiArICogR0VNIGJhc2VkIGRyaXZlcnMgbXVzdCB1c2Ug ZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQoKSBhbgo+ID4gKyAqIGRybV9nZW1fcHJpbWVfZmRf dG9faGFuZGxlKCkgdG8gaW1wbGVtZW50IHRoZXNlLgo+IGFuID0+IGFuZCBpbiB0aGUgYWJvdmUu Cj4gCj4gPiArICogZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUgLSBQUklNRSBpbXBvcnQgZnVu Y3Rpb24gZm9yIEdFTSBkcml2ZXJzCj4gPiArICogQGRldjogZGV2IHRvIGV4cG9ydCB0aGUgYnVm ZmVyIGZyb20KPiA+ICsgKiBAZmlsZV9wcml2OiBkcm0gZmlsZS1wcml2YXRlIHN0cnVjdHVyZQo+ ID4gKyAqIEBwcmltZV9mZDogZmQgaWQgb2YgdGhlIGRtYS1idWYgd2hpY2ggc2hvdWxkIGJlIGlt cG9ydGVkCj4gPiArICogQGhhbmRsZTogcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgaGFuZGxl IG9mIHRoZSBpbXBvcnRlZCBidWZmZXIgb2JqZWN0Cj4gPiAgICoKPiA+ICsgKiBUaGlzIGlzIHRo ZSBQUklNRSBpbXBvcnQgZnVuY3Rpb24gd2hpY2ggbXVzdCBiZSB1c2VkIG1hbmRhdG9yaWx5IGJ5 IEdFTQo+ID4gKyAqIGRyaXZlcnMgdG8gZW5zdXJlIGNvcnJlY3QgbGlmZXRpbWUgbWFuYWdlbWVu dCBvZiB0aGUgdW5kZXJseWluZyBHRU0gb2JqZWN0Lgo+ID4gKyAqIFRoZSBhY3R1YWwgaW1wb3J0 aW5nIG9mIEdFTSBvYmplY3QgZnJvbSB0aGUgZG1hLWJ1ZiBpcyBkb25lIHRocm91Z2ggdGhlCj4g PiArICogJmRybV9kcml2ZXIuZ2VtX2ltcG9ydF9leHBvcnQgZHJpdmVyIGNhbGxiYWNrLgo+IEhl cmUgbWF5YmUgYWRkIGEgZGVzY3JpcHRpb24gb2YgdGhlIHJldHVybiByZXN1bHQuCj4gSWYgSSBy ZWFkIHRoZSBjb2RlIGNvcnJlY3Q6Cj4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUg ZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+IAo+ID4gICAqLwo+ID4gLXZvaWQgKmRybV9nZW1fZG1h YnVmX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCj4gPiAraW50IGRybV9nZW1fcHJpbWVf ZmRfdG9faGFuZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiArCQkJICAgICAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2LCBpbnQgcHJpbWVfZmQsCj4gPiArCQkJICAgICAgIHVpbnQz Ml90ICpoYW5kbGUpCj4gPiAgewo+ID4gLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IGRt YV9idWYtPnByaXY7Cj4gPiAtCXZvaWQgKnZhZGRyOwo+ID4gKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1h X2J1ZjsKPiA+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gPiArCWludCByZXQ7Cj4g PiAgCj4gPiAtCXZhZGRyID0gZHJtX2dlbV92bWFwKG9iaik7Cj4gPiAtCWlmIChJU19FUlIodmFk ZHIpKQo+ID4gLQkJdmFkZHIgPSBOVUxMOwo+ID4gKwlkbWFfYnVmID0gZG1hX2J1Zl9nZXQocHJp bWVfZmQpOwo+ID4gKwlpZiAoSVNfRVJSKGRtYV9idWYpKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIo ZG1hX2J1Zik7Cj4gPiAgCj4gPiArCW11dGV4X2xvY2soJmZpbGVfcHJpdi0+cHJpbWUubG9jayk7 Cj4gPiAgCj4gPiArCXJldCA9IGRybV9wcmltZV9sb29rdXBfYnVmX2hhbmRsZSgmZmlsZV9wcml2 LT5wcmltZSwKPiA+ICsJCQlkbWFfYnVmLCBoYW5kbGUpOwo+ID4gKwlpZiAocmV0ID09IDApCj4g PiArCQlnb3RvIG91dF9wdXQ7Cj4gPiAgCj4gPiArCS8qIG5ldmVyIHNlZW4gdGhpcyBvbmUsIG5l ZWQgdG8gaW1wb3J0ICovCj4gPiArCW11dGV4X2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7 Cj4gPiArCWlmIChkZXYtPmRyaXZlci0+Z2VtX3ByaW1lX2ltcG9ydCkKPiA+ICsJCW9iaiA9IGRl di0+ZHJpdmVyLT5nZW1fcHJpbWVfaW1wb3J0KGRldiwgZG1hX2J1Zik7Cj4gPiArCWVsc2UKPiA+ ICsJCW9iaiA9IGRybV9nZW1fcHJpbWVfaW1wb3J0KGRldiwgZG1hX2J1Zik7Cj4gPiArCWlmIChJ U19FUlIob2JqKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihvYmopOwo+ID4gKwkJZ290byBvdXRf dW5sb2NrOwo+ID4gKwl9Cj4gPiArCWlmIChvYmotPmRtYV9idWYpIHsKPiA+ICsJCVdBUk5fT04o b2JqLT5kbWFfYnVmICE9IGRtYV9idWYpOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJb2JqLT5kbWFf YnVmID0gZG1hX2J1ZjsKPiA+ICsJCWdldF9kbWFfYnVmKGRtYV9idWYpOwo+ID4gKwl9Cj4gPiAg Cj4gPiArCS8qIF9oYW5kbGVfY3JlYXRlX3RhaWwgdW5jb25kaXRpb25hbGx5IHVubG9ja3MgZGV2 LT5vYmplY3RfbmFtZV9sb2NrLiAqLwo+ID4gKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGVf dGFpbChmaWxlX3ByaXYsIG9iaiwgaGFuZGxlKTsKPiA+ICsJZHJtX2dlbV9vYmplY3RfcHV0X3Vu bG9ja2VkKG9iaik7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIG91dF9wdXQ7Cj4gPiAgCj4g PiArCXJldCA9IGRybV9wcmltZV9hZGRfYnVmX2hhbmRsZSgmZmlsZV9wcml2LT5wcmltZSwKPiA+ ICsJCQlkbWFfYnVmLCAqaGFuZGxlKTsKPiA+ICsJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnBy aW1lLmxvY2spOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBmYWlsOwo+ID4gKwlkbWFfYnVm X3B1dChkbWFfYnVmKTsKPiA+ICAKPiA+ICsJcmV0dXJuIDA7Cj4gPiAgCj4gPiArZmFpbDoKPiA+ ICsJLyogaG1tLCBpZiBkcml2ZXIgYXR0YWNoZWQsIHdlIGFyZSByZWx5aW5nIG9uIHRoZSBmcmVl LW9iamVjdCBwYXRoCj4gPiArCSAqIHRvIGRldGFjaC4uIHdoaWNoIHNlZW1zIG9rLi4KPiA+ICsJ ICovCj4gPiArCWRybV9nZW1faGFuZGxlX2RlbGV0ZShmaWxlX3ByaXYsICpoYW5kbGUpOwo+ID4g KwlkbWFfYnVmX3B1dChkbWFfYnVmKTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICtvdXRf dW5sb2NrOgo+ID4gKwltdXRleF91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7Cj4gPiAr b3V0X3B1dDoKPiA+ICsJbXV0ZXhfdW5sb2NrKCZmaWxlX3ByaXYtPnByaW1lLmxvY2spOwo+ID4g KwlkbWFfYnVmX3B1dChkbWFfYnVmKTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArRVhQ T1JUX1NZTUJPTChkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSk7Cj4gPiArCj4gPiArCj4gPiAr LyoqCj4gPiArICogRE9DOiBQUklNRSBIZWxwZXJzCj4gPiArICoKPiA+ICsgKiBEcml2ZXJzIGNh biBpbXBsZW1lbnQgJmRybV9nZW1fb2JqZWN0X2Z1bmNzLmV4cG9ydCBhbmQKPiA+ICsgKiAmZHJt X2RyaXZlci5nZW1fcHJpbWVfaW1wb3J0IGluIHRlcm1zIG9mIHNpbXBsZXIgQVBJcyBieSB1c2lu ZyB0aGUgaGVscGVyCj4gPiArICogZnVuY3Rpb25zIGRybV9nZW1fcHJpbWVfZXhwb3J0KCkgYW5k IGRybV9nZW1fcHJpbWVfaW1wb3J0KCkuICBUaGVzZSBmdW5jdGlvbnMKPiA+ICsgKiBpbXBsZW1l bnQgZG1hLWJ1ZiBzdXBwb3J0IGluIHRlcm1zIG9mIHNvbWUgbG93ZXItbGV2ZWwgaGVscGVycywg d2hpY2ggYXJlCj4gPiArICogYWdhaW4gZXhwb3J0ZWQgZm9yIGRyaXZlcnMgdG8gdXNlIGluZGl2 aWR1YWxseToKPiA+ICsgKgo+ID4gKyAqIEV4cG9ydGluZyBidWZmZXJzCj4gPiArICogfn5+fn5+ fn5+fn5+fn5+fn4KPiA+ICsgKgo+ID4gKyAqIE9wdGlvbmFsIHBpbm5pbmcgb2YgYnVmZmVycyBp cyBoYW5kbGVkIGF0IGRtYS1idWYgYXR0YWNoIGFuZCBkZXRhY2ggdGltZSBpbgo+ID4gKyAqIGRy bV9nZW1fbWFwX2F0dGFjaCgpIGFuZCBkcm1fZ2VtX21hcF9kZXRhY2goKS4gQmFja2luZyBzdG9y YWdlIGl0c2VsZiBpcwo+ID4gKyAqIGhhbmRsZWQgYnkgZHJtX2dlbV9tYXBfZG1hX2J1ZigpIGFu ZCBkcm1fZ2VtX3VubWFwX2RtYV9idWYoKSwgd2hpY2ggcmVsaWVzIG9uCj4gPiArICogJmRybV9n ZW1fb2JqZWN0X2Z1bmNzLmdldF9zZ190YWJsZS4KPiA+ICsgKgo+ID4gKyAqIEZvciBrZXJuZWwt aW50ZXJuYWwgYWNjZXNzIHRoZXJlJ3MgZHJtX2dlbV9kbWFidWZfdm1hcCgpIGFuZAo+ID4gKyAq IGRybV9nZW1fZG1hYnVmX3Z1bm1hcCgpLiBVc2Vyc3BhY2UgbW1hcCBzdXBwb3J0IGlzIHByb3Zp ZGVkIGJ5Cj4gPiArICogZHJtX2dlbV9kbWFidWZfbW1hcCgpLgo+ID4gKyAqCj4gPiArICogTm90 ZSB0aGF0IHRoZXNlIGV4cG9ydCBoZWxwZXJzIGNhbiBvbmx5IGJlIHVzZWQgaWYgdGhlIHVuZGVy bHlpbmcgYmFja2luZwo+ID4gKyAqIHN0b3JhZ2UgaXMgZnVsbHkgY29oZXJlbnQgYW5kIGVpdGhl ciBwZXJtYW5lbnRseSBwaW5uZWQsIG9yIGl0IGlzIHNhZmUgdG8gcGluCj4gPiArICogaXQgaW5k ZWZpbml0ZWx5Lgo+ID4gKyAqCj4gPiArICogRklYTUU6IFRoZSB1bmRlcmx5aW5nIGhlbHBlciBm dW5jdGlvbnMgYXJlIG5hbWVkIHJhdGhlciBpbmNvbnNpc3RlbnRseS4KPiA+ICsgKgo+ID4gKyAq IEV4cG9ydGluZyBidWZmZXJzCj4gPiArICogfn5+fn5+fn5+fn5+fn5+fn4KPiA+ICsgKgo+ID4g KyAqIEltcG9ydGluZyBkbWEtYnVmcyB1c2luZyBkcm1fZ2VtX3ByaW1lX2ltcG9ydCgpIHJlbGll cyBvbgo+ID4gKyAqICZkcm1fZHJpdmVyLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUuCj4gPiAr ICoKPiA+ICsgKiBOb3RlIHRoYXQgc2ltaWxhcmx5IHRvIHRoZSBleHBvcnQgaGVscGVycyB0aGlz IHBlcm1hbmVudGx5IHBpbnMgdGhlCj4gPiArICogdW5kZXJseWluZyBiYWNraW5nIHN0b3JhZ2Uu IFdoaWNoIGlzIG9rIGZvciBzY2Fub3V0LCBidXQgaXMgbm90IHRoZSBiZXN0Cj4gPiArICogb3B0 aW9uIGZvciBzaGFyaW5nIGxvdHMgb2YgYnVmZmVycyBmb3IgcmVuZGVyaW5nLgo+ID4gKyAqLwo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9nZW1fbWFwX2F0dGFjaCAtIGRtYV9idWYgYXR0YWNo IGltcGxlbWVudGF0aW9uIGZvciBHRU0KPiA+ICsgKiBAZG1hX2J1ZjogYnVmZmVyIHRvIGF0dGFj aCBkZXZpY2UgdG8KPiA+ICsgKiBAYXR0YWNoOiBidWZmZXIgYXR0YWNobWVudCBkYXRhCj4gPiAr ICoKPiA+ICsgKiBDYWxscyAmZHJtX2dlbV9vYmplY3RfZnVuY3MucGluIGZvciBkZXZpY2Ugc3Bl Y2lmaWMgaGFuZGxpbmcuIFRoaXMgY2FuIGJlCj4gPiArICogdXNlZCBhcyB0aGUgJmRtYV9idWZf b3BzLmF0dGFjaCBjYWxsYmFjay4gTXVzdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKPiA+ICsgKiBk cm1fZ2VtX21hcF9kZXRhY2goKS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiArICovCj4gPiAraW50IGRybV9n ZW1fbWFwX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKPiA+ICsJCSAgICAgICBzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iaiA9IGRtYV9idWYtPnByaXY7Cj4gPiArCj4gPiArCXJldHVybiBkcm1fZ2Vt X3BpbihvYmopOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9nZW1fbWFwX2F0dGFjaCk7 Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV9tYXBfZGV0YWNoIC0gZG1hX2J1ZiBkZXRh Y2ggaW1wbGVtZW50YXRpb24gZm9yIEdFTQo+ID4gKyAqIEBkbWFfYnVmOiBidWZmZXIgdG8gZGV0 YWNoIGZyb20KPiA+ICsgKiBAYXR0YWNoOiBhdHRhY2htZW50IHRvIGJlIGRldGFjaGVkCj4gPiAr ICoKPiA+ICsgKiBDYWxscyAmZHJtX2dlbV9vYmplY3RfZnVuY3MucGluIGZvciBkZXZpY2Ugc3Bl Y2lmaWMgaGFuZGxpbmcuICBDbGVhbnMgdXAKPiA+ICsgKiAmZG1hX2J1Zl9hdHRhY2htZW50IGZy b20gZHJtX2dlbV9tYXBfYXR0YWNoKCkuIFRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlCj4gPiArICog JmRtYV9idWZfb3BzLmRldGFjaCBjYWxsYmFjay4KPiA+ICsgKi8KPiA+ICt2b2lkIGRybV9nZW1f bWFwX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKPiA+ICsJCQlzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2gpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiA9IGRtYV9idWYtPnByaXY7Cj4gPiArCj4gPiArCWRybV9nZW1fdW5waW4ob2JqKTsKPiA+ ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2VtX21hcF9kZXRhY2gpOwo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIGRybV9nZW1fbWFwX2RtYV9idWYgLSBtYXBfZG1hX2J1ZiBpbXBsZW1lbnRhdGlv biBmb3IgR0VNCj4gPiArICogQGF0dGFjaDogYXR0YWNobWVudCB3aG9zZSBzY2F0dGVybGlzdCBp cyB0byBiZSByZXR1cm5lZAo+ID4gKyAqIEBkaXI6IGRpcmVjdGlvbiBvZiBETUEgdHJhbnNmZXIK PiA+ICsgKgo+ID4gKyAqIENhbGxzICZkcm1fZ2VtX29iamVjdF9mdW5jcy5nZXRfc2dfdGFibGUg YW5kIHRoZW4gbWFwcyB0aGUgc2NhdHRlcmxpc3QuIFRoaXMKPiA+ICsgKiBjYW4gYmUgdXNlZCBh cyB0aGUgJmRtYV9idWZfb3BzLm1hcF9kbWFfYnVmIGNhbGxiYWNrLiBTaG91bGQgYmUgdXNlZCB0 b2dldGhlcgo+ID4gKyAqIHdpdGggZHJtX2dlbV91bm1hcF9kbWFfYnVmKCkuCj4gPiArICoKPiA+ ICsgKiBSZXR1cm5zOnNnX3RhYmxlIGNvbnRhaW5pbmcgdGhlIHNjYXR0ZXJsaXN0IHRvIGJlIHJl dHVybmVkOyByZXR1cm5zIEVSUl9QVFIKPiA+ICsgKiBvbiBlcnJvci4gTWF5IHJldHVybiAtRUlO VFIgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCj4gPiArICovCj4gTml0IC0gYWRk IHNwYWNlIGFmdGVyICc6Jwo+IAo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9nZW1fZG1hYnVm X3ZtYXAgLSBkbWFfYnVmIHZtYXAgaW1wbGVtZW50YXRpb24gZm9yIEdFTQo+ID4gKyAqIEBkbWFf YnVmOiBidWZmZXIgdG8gYmUgbWFwcGVkCj4gPiArICoKPiA+ICsgKiBTZXRzIHVwIGEga2VybmVs IHZpcnR1YWwgbWFwcGluZy4gVGhpcyBjYW4gYmUgdXNlZCBhcyB0aGUgJmRtYV9idWZfb3BzLnZt YXAKPiA+ICsgKiBjYWxsYmFjay4gQ2FsbHMgaW50byAmZHJtX2dlbV9vYmplY3RfZnVuY3Mudm1h cCBmb3IgZGV2aWNlIHNwZWNpZmljIGhhbmRsaW5nLgo+ID4gKyAqCj4gPiArICogUmV0dXJucyB0 aGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcy4KPiBvciBOVUxMIGlmIGZhaWxlZCB0byBzZXR1cCB2 aXJ0dWFsIG1hcHBpbmcuCj4gCj4gPiArICovCj4gPiArdm9pZCAqZHJtX2dlbV9kbWFidWZfdm1h cChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZikKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqID0gZG1hX2J1Zi0+cHJpdjsKPiA+ICsJdm9pZCAqdmFkZHI7Cj4gPiArCj4gPiAr CXZhZGRyID0gZHJtX2dlbV92bWFwKG9iaik7Cj4gPiArCWlmIChJU19FUlIodmFkZHIpKQo+ID4g KwkJdmFkZHIgPSBOVUxMOwo+ID4gKwo+ID4gKwlyZXR1cm4gdmFkZHI7Cj4gPiArfQo+ID4gK0VY UE9SVF9TWU1CT0woZHJtX2dlbV9kbWFidWZfdm1hcCk7Cj4gCj4gCj4gPiAgLyoqCj4gPiAgICog ZHJtX2dlbV9wcmltZV9pbXBvcnRfZGV2IC0gY29yZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW1w b3J0IGNhbGxiYWNrCj4gPiAgICogQGRldjogZHJtX2RldmljZSB0byBpbXBvcnQgaW50bwo+ID4g ICAqIEBkbWFfYnVmOiBkbWEtYnVmIG9iamVjdCB0byBpbXBvcnQKPiA+ICAgKiBAYXR0YWNoX2Rl djogc3RydWN0IGRldmljZSB0byBkbWFfYnVmIGF0dGFjaAo+ID4gICAqCj4gPiAtICogVGhpcyBp cyB0aGUgY29yZSBvZiBkcm1fZ2VtX3ByaW1lX2ltcG9ydC4gSXQncyBkZXNpZ25lZCB0byBiZSBj YWxsZWQgYnkKPiA+IC0gKiBkcml2ZXJzIHdobyB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBkZXZp Y2Ugc3RydWN0dXJlIHRoYW4gZGV2LT5kZXYgZm9yCj4gPiAtICogYXR0YWNoaW5nIHZpYSBkbWFf YnVmLgo+ID4gKyAqIFRoaXMgaXMgdGhlIGNvcmUgb2YgZHJtX2dlbV9wcmltZV9pbXBvcnQoKS4g SXQncyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgYnkKPiA+ICsgKiBkcml2ZXJzIHdobyB3YW50IHRv IHVzZSBhIGRpZmZlcmVudCBkZXZpY2Ugc3RydWN0dXJlIHRoYW4gJmRybV9kZXZpY2UuZGV2IGZv cgo+ID4gKyAqIGF0dGFjaGluZyB2aWEgZG1hX2J1Zi4gVGhpcyBmdW5jdGlvbiBjYWxscwo+ID4g KyAqICZkcm1fZHJpdmVyLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgaW50ZXJuYWxseS4KPiA+ ICsgKgo+ID4gKyAqIERyaXZlcnMgbXVzdCBhcnJhbmdlIHRvIGNhbGwgZHJtX3ByaW1lX2dlbV9k ZXN0cm95KCkgZnJvbSB0aGVpcgo+ID4gKyAqICZkcm1fZ2VtX29iamVjdF9mdW5jcy5mcmVlIGhv b2sgd2hlbiB1c2luZyB0aGlzIGZ1bmN0aW9uLgo+ID4gICAqLwo+ID4gIHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZHJtX2dlbV9wcmltZV9pbXBvcnRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gPiAgCQkJCQkgICAgc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCj4gPiBAQCAtNzI4LDcgKzky MywxMSBAQCBFWFBPUlRfU1lNQk9MKGRybV9nZW1fcHJpbWVfaW1wb3J0X2Rldik7Cj4gPiAgICog QGRtYV9idWY6IGRtYS1idWYgb2JqZWN0IHRvIGltcG9ydAo+ID4gICAqCj4gPiAgICogVGhpcyBp cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGdlbV9wcmltZV9pbXBvcnQgZnVuY3Rpb25zIGZv ciBHRU0gZHJpdmVycwo+ID4gLSAqIHVzaW5nIHRoZSBQUklNRSBoZWxwZXJzLgo+ID4gKyAqIHVz aW5nIHRoZSBQUklNRSBoZWxwZXJzLiBEcml2ZXJzIGNhbiB1c2UgdGhpcyBhcyB0aGVpcgo+ID4g KyAqICZkcm1fZHJpdmVyLmdlbV9wcmltZV9pbXBvcnQgaW1wbGVtZW50YXRpb24uCj4gPiArICoK PiA+ICsgKiBEcml2ZXJzIG11c3QgYXJyYW5nZSB0byBjYWxsIGRybV9wcmltZV9nZW1fZGVzdHJv eSgpIGZyb20gdGhlaXIKPiA+ICsgKiAmZHJtX2dlbV9vYmplY3RfZnVuY3MuZnJlZSBob29rIHdo ZW4gdXNpbmcgdGhpcyBmdW5jdGlvbi4KPiAKPiBDb3VsZCB3ZSBoZXJlIGRvY3VtZW50IHdoYXQg ZnVuY3Rpb24gd2UgcHJvdmlkZSBhcyB0aGUgZGVmYXVsdAo+ICZkcm1fZ2VtX29iamVjdF9mdW5j cy5mcmVlIGhvb2ssIHdoaWNoIGRvIHRoZSBkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3koKQo+IGNhbGwu Cj4gSSByZWFkIHRoZSBhYm92ZSB0aGF0IGRyaXZlcnMgaGF2ZSB0byBwcm92aWRlIHRoZWlyIG93 biBpbXBsZW1lbnRhdGlvbgo+IG9mIGEgLmZyZWUgaG9vaywgYW5kIEkgZG8gbm90IHRoaW5rIHRo aXMgaXMgcmlnaHQuCgpUaGVyZSdzIG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZy ZWUgaG9vayBhdCBhbGwsIHNvIG5vdCBzdXJlCndoYXQgeW91IG1lYW4uIFlvdSBkbyBraW5kYSBo YXZlIHRvIHByb3ZpZGUgYSBmcmVlIGhvb2ssIG90aGVyd2lzZSB5b3VyCmRyaXZlciB3aWxsIGxl YWsgYmFkbHkuCgo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Rydi5oCj4gPiBAQCAtNTA1LDIx ICs1MDUsMjUgQEAgc3RydWN0IGRybV9kcml2ZXIgewo+ID4gIAkgKiBAZ2VtX2ZyZWVfb2JqZWN0 OiBkZWNvbnN0cnVjdG9yIGZvciBkcm1fZ2VtX29iamVjdHMKPiA+ICAJICoKPiA+ICAJICogVGhp cyBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgbmV3IGRyaXZlcnMuIFVz ZQo+ID4gLQkgKiBAZ2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkIGluc3RlYWQuCj4gPiArCSAqICZk cm1fZ2VtX29iamVjdF9mdW5jcy5mcmVlIGluc3RlYWQuCj4gPiAgCSAqLwo+ID4gIAl2b2lkICgq Z2VtX2ZyZWVfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ID4gIAo+ID4g IAkvKioKPiA+ICAJICogQGdlbV9mcmVlX29iamVjdF91bmxvY2tlZDogZGVjb25zdHJ1Y3RvciBm b3IgZHJtX2dlbV9vYmplY3RzCj4gPiAgCSAqCj4gPiAtCSAqIFRoaXMgaXMgZm9yIGRyaXZlcnMg d2hpY2ggYXJlIG5vdCBlbmN1bWJlcmVkIHdpdGggJmRybV9kZXZpY2Uuc3RydWN0X211dGV4Cj4g PiAtCSAqIGxlZ2FjeSBsb2NraW5nIHNjaGVtZXMuIFVzZSB0aGlzIGhvb2sgaW5zdGVhZCBvZiBA Z2VtX2ZyZWVfb2JqZWN0Lgo+ID4gKwkgKiBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBu b3QgYmUgdXNlZCBieSBuZXcgZHJpdmVycy4gVXNlCj4gPiArCSAqICZkcm1fZ2VtX29iamVjdF9m dW5jcy5mcmVlIGluc3RlYWQuCj4gPiArCSAqIENvbXBhcmVkIHRvIEBnZW1fZnJlZV9vYmplY3Qg dGhpcyBpcyBub3QgZW5jdW1iZXJlZCB3aXRoCj4gPiArCSAqICZkcm1fZGV2aWNlLnN0cnVjdF9t dXRleCBsZWdhY3kgbG9ja2luZyBzY2hlbWVzLgo+ID4gIAkgKi8KPiBJdCBpcyBjb25mdXNpbmcg d2h5IHRoZSBhYm92ZSBjb21tZW50IHJlZmVyIHRvIGFub3RoZXIgY2FsbGJhY2suCj4gSXMgdGhp cyB0aGUgcmlnaHQgd29yZGluZz8KPiAJKiBDb21wYXJlZCB0byBAZ2VtX2ZyZWVfb2JqZWN0X3Vu bG9ja2VkIHRoaXMgaXMgbm90IGVuY3VtYmVyZWQgd2l0aAo+IAkqICZkcm1fZGV2aWNlLnN0cnVj dF9tdXRleCBsZWdhY3kgbG9ja2luZyBzY2hlbWVzLgo+IAo+IERvIGdlbV9mcmVlX29iamVjdCgp IHdhcnJhbnQgYSBzaW1pbGFyIGNvbW1lbnQ/CgpJJ20gY29uZnVzZWQgLi4uIEBnZW1fZnJlZV9v YmplY3QgaXMgZXhhY3RseSB0aGUgY2FsbGJhY2sgSSB3YW50IHRvIHJlZmVyCnRvLiBCZWNhdXNl IHRoYXQgb25lIF9pc18gZW5jdW1iZXJlZCB3aXRoIHRoZSBsZWdhY3kgc3RydWN0X211dGV4IGxv Y2tpbmcKc2NoZW1lLiBVbmxpa2UgdGhlIC5mcmVlIGNhbGxiYWNrLCBvciB0aGUgZ2VtX2ZyZWVf b2JqZWN0X3VubG9ja2VkCmNhbGxiYWNrLgoKPiA+IEBAIC01NDgsNTYgKzU1NywxMjAgQEAgc3Ry dWN0IGRybV9kcml2ZXIgewo+ID4gIAkvKioKPiA+ICAJICogQGdlbV9jcmVhdGVfb2JqZWN0OiBj b25zdHJ1Y3RvciBmb3IgZ2VtIG9iamVjdHMKPiA+ICAJICoKPiA+IC0JICogSG9vayBmb3IgYWxs b2NhdGluZyB0aGUgR0VNIG9iamVjdCBzdHJ1Y3QsIGZvciB1c2UgYnkgY29yZQo+ID4gLQkgKiBo ZWxwZXJzLgo+ID4gKwkgKiBIb29rIGZvciBhbGxvY2F0aW5nIHRoZSBHRU0gb2JqZWN0IHN0cnVj dCwgZm9yIHVzZSBieSB0aGUgQ01BIGFuZAo+ID4gKwkgKiBTSE1FTSBHRU0gaGVscGVycy4KPiA+ ICAJICovCj4gPiAgCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKCpnZW1fY3JlYXRlX29iamVjdCko c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAJCQkJCQkgICAgc2l6ZV90IHNpemUpOwo+IE5p dDogSW4gc29tZSBwbGFjZXMgd2UgZG86Cj4gCWludCAoZm9vKSAoaW50IGJhcik7Cj4gb3RoZXI6 Cj4gCWludCAoZm9vKShpbnQgYmFyKTsKPiAKPiBObyBwcmVmZXJlbmNlIGhlcmUsIGJ1dCBpdCBo dXJ0cyBteSBPQ0QgYSBsaXR0bGUgdGhhdCBpdCBpcwo+IGluY29uc2lzdGVudC4KCkkgZ3Vlc3Mg d2UgY291bGQgdHJ5IHRvIG9jZCBmaXggdGhhdCwgYnV0IHNlcGFyYXRlIHBhdGNoLgoKPiAKPiA+ IC0KPiA+IC0JLyogcHJpbWU6ICovCj4gPiAgCS8qKgo+ID4gIAkgKiBAcHJpbWVfaGFuZGxlX3Rv X2ZkOgo+ID4gIAkgKgo+ID4gLQkgKiBleHBvcnQgaGFuZGxlIC0+IGZkIChzZWUgZHJtX2dlbV9w cmltZV9oYW5kbGVfdG9fZmQoKSBoZWxwZXIpCj4gPiArCSAqIE1haW4gUFJJTUUgZXhwb3J0IGZ1 bmN0aW9uLiBTaG91bGQgYmUgaW1wbGVudGVkIHdpdGgKPiBzL2ltcGxlbnRlZC9pbXBsZW1lbnRl ZC8KPiAKPiA+ICsJICogZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQoKSBmb3IgR0VNIGJhc2Vk IGRyaXZlcnMuCj4gPiArCSAqCj4gPiArCSAqIEZvciBhbiBpbi1kZXB0aCBkaXNjdXNzaW9uIHNl ZSA6cmVmOmBQUklNRSBidWZmZXIgc2hhcmluZwo+ID4gKwkgKiBkb2N1bWVudGF0aW9uIDxwcmlt ZV9idWZmZXJfc2hhcmluZz5gLgo+ID4gIAkgKi8KPiA+ICAJaW50ICgqcHJpbWVfaGFuZGxlX3Rv X2ZkKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwK PiA+ICAJCQkJdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCBmbGFncywgaW50ICpwcmltZV9mZCk7 Cj4gPiAgCS8qKgo+ID4gIAkgKiBAcHJpbWVfZmRfdG9faGFuZGxlOgo+ID4gIAkgKgo+ID4gLQkg KiBpbXBvcnQgZmQgLT4gaGFuZGxlIChzZWUgZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUoKSBo ZWxwZXIpCj4gPiArCSAqIE1haW4gUFJJTUUgaW1wb3J0IGZ1bmN0aW9uLiBTaG91bGQgYmUgaW1w bGVudGVkIHdpdGgKPiBzL2ltcGxlbnRlZC9pbXBsZW1lbnRlZC8KPiAKPiA+ICsJICogZHJtX2dl bV9wcmltZV9mZF90b19oYW5kbGUoKSBmb3IgR0VNIGJhc2VkIGRyaXZlcnMuCj4gPiArCSAqCj4g PiArCSAqIEZvciBhbiBpbi1kZXB0aCBkaXNjdXNzaW9uIHNlZSA6cmVmOmBQUklNRSBidWZmZXIg c2hhcmluZwo+ID4gKwkgKiBkb2N1bWVudGF0aW9uIDxwcmltZV9idWZmZXJfc2hhcmluZz5gLgo+ ID4gIAkgKi8KPiA+ICAJaW50ICgqcHJpbWVfZmRfdG9faGFuZGxlKShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiA+ICAJCQkJaW50IHByaW1lX2Zk LCB1aW50MzJfdCAqaGFuZGxlKTsKPiA+ICAJLyoqCj4gPiAgCSAqIEBnZW1fcHJpbWVfZXhwb3J0 Ogo+ID4gIAkgKgo+ID4gLQkgKiBleHBvcnQgR0VNIC0+IGRtYWJ1Zgo+ID4gLQkgKgo+ID4gLQkg KiBUaGlzIGRlZmF1bHRzIHRvIGRybV9nZW1fcHJpbWVfZXhwb3J0KCkgaWYgbm90IHNldC4KPiA+ ICsJICogRXhwb3J0IGhvb2sgZm9yIEdFTSBkcml2ZXJzLiBEZXByZWNhdGVkIGluIGZhdm91ciBv Zgo+ID4gKwkgKiAmZHJtX2dlbV9vYmplY3RfZnVuY3MuZXhwb3J0Lgo+ID4gIAkgKi8KPiA+ICAJ c3RydWN0IGRtYV9idWYgKiAoKmdlbV9wcmltZV9leHBvcnQpKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gPiAgCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgZmxhZ3MpOwo+ID4g IAkvKioKPiA+ICAJICogQGdlbV9wcmltZV9pbXBvcnQ6Cj4gPiAgCSAqCj4gPiAtCSAqIGltcG9y dCBkbWFidWYgLT4gR0VNCj4gPiArCSAqIEltcG9ydCBob29rIGZvciBHRU0gZHJpdmVycy4KPiA+ ICAJICoKPiA+ICAJICogVGhpcyBkZWZhdWx0cyB0byBkcm1fZ2VtX3ByaW1lX2ltcG9ydCgpIGlm IG5vdCBzZXQuCj4gPiAgCSAqLwo+ID4gIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKiAoKmdlbV9w cmltZV9pbXBvcnQpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCQkJCXN0cnVjdCBkbWFf YnVmICpkbWFfYnVmKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiArCSAqIEBnZW1fcHJpbWVfcGluOgo+ ID4gKwkgKgo+ID4gKwkgKiBEZXByZWNhdGVkIGhvb2sgaW4gZmF2b3VyIG9mICZkcm1fZ2VtX29i amVjdF9mdW5jcy5waW4uCj4gPiArCSAqLwo+ID4gIAlpbnQgKCpnZW1fcHJpbWVfcGluKShzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gPiArCj4gPiArCS8qKgo+ID4gKwkgKiBAZ2VtX3By aW1lX3VucGluOgo+ID4gKwkgKgo+ID4gKwkgKiBEZXByZWNhdGVkIGhvb2sgaW4gZmF2b3VyIG9m ICZkcm1fZ2VtX29iamVjdF9mdW5jcy51bnBpbi4KPiA+ICsJICovCj4gPiAgCXZvaWQgKCpnZW1f cHJpbWVfdW5waW4pKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ICsKPiA+ICsKPiA+ ICsJLyoqCj4gPiArCSAqIEBnZW1fcHJpbWVfZ2V0X3NnX3RhYmxlOgo+ID4gKwkgKgo+ID4gKwkg KiBEZXByZWNhdGVkIGhvb2sgaW4gZmF2b3VyIG9mICZkcm1fZ2VtX29iamVjdF9mdW5jcy5nZXRf c2dfdGFibGUuCj4gPiArCSAqLwo+ID4gKwlzdHJ1Y3Qgc2dfdGFibGUgKigqZ2VtX3ByaW1lX2dl dF9zZ190YWJsZSkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ID4gKwo+ID4gKwkvKioK PiA+ICsJICogQGdlbV9wcmltZV9yZXNfb2JqOgo+ID4gKwkgKgo+ID4gKwkgKiBPcHRpb25hbCBo b29rIHRvIGxvb2sgdXAgdGhlICZyZXNlcnZhdGlvbl9vYmplY3QgZm9yIGFuIGJ1ZmZlciB3aGVu Cj4gPiArCSAqIGV4cG9ydGluZyBpdC4KPiA+ICsJICoKPiA+ICsJICogRklYTUU6IFRoaXMgaG9v ayBpcyBkZXByZWNhdGVkLiBVc2VyIG9mIHRoaXMgaG9vayBzaG91bGQgYmUgcmVwbGFjZWQKPiBV c2VyID0+IFVzZXJzPwo+IAo+ID4gKwkgKiBieSBzZXR0aW5nICZkcm1fZ2VtX29iamVjdC5yZXN2 IGluc3RlYWQuCj4gPiArCSAqLwo+ID4gIAlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICogKCpn ZW1fcHJpbWVfcmVzX29iaikoCj4gPiAgCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsK PiA+IC0Jc3RydWN0IHNnX3RhYmxlICooKmdlbV9wcmltZV9nZXRfc2dfdGFibGUpKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiArCSAqIEBnZW1fcHJpbWVf aW1wb3J0X3NnX3RhYmxlOgo+ID4gKwkgKgo+ID4gKwkgKiBPcHRpb25hbCBob29rIHVzZWQgYnkg dGhlIFBSSU1FIGhlbHBlciBmdW5jdGlvbnMKPiA+ICsJICogZHJtX2dlbV9wcmltZV9pbXBvcnQo KSByZXNwZWN0aXZlbHkgZHJtX2dlbV9wcmltZV9pbXBvcnRfZGV2KCkuCj4gPiArCSAqLwo+ID4g IAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKigqZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSkoCj4g PiAgCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgCQkJCXN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCwKPiA+ICAJCQkJc3RydWN0IHNnX3RhYmxlICpzZ3QpOwo+ID4gKwkv KioKPiA+ICsJICogQGdlbV9wcmltZV92bWFwOgo+ID4gKwkgKgo+ID4gKwkgKiBEZXByZWNhdGVk IHZtYXAgaG9vayBmb3IgR0VNIGRyaXZlcnMuIFBsZWFzZSB1c2UKPiA+ICsJICogJmRybV9nZW1f b2JqZWN0X2Z1bmNzLnZtYXAgaW5zdGVhZC4KPiBPcj8KPiAJICogRGVwcmVjYXRlZCBob29rIGlu IGZhdm91ciBvZiAmZHJtX2dlbV9vYmplY3RfZnVuY3Mudm1hcC4KPiAKPiAoU2FtZSB3b3JkaW5n IGFzIGEgZmV3IGZ1bmN0aW9ucyB1cCkKCkhtIHdlJ3JlIG5vdCBzdXBlciBjb25zaXN0ZW50IHdp dGggdGhlc2UgZGVwcmVjYXRpb24gbm90aWNlcyBldmVuIGluCmV4aXN0aW5nIGtlcm5lbGRvYy4g TWF5YmUgc29tZXRoaW5nIGZvciBhIHNlcGFyYXRlIHBhdGNoLgoKPiAKPiA+ICsJICovCj4gPiAg CXZvaWQgKigqZ2VtX3ByaW1lX3ZtYXApKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ ICsKPiA+ICsJLyoqCj4gPiArCSAqIEBnZW1fcHJpbWVfdnVubWFwOgo+ID4gKwkgKgo+ID4gKwkg KiBEZXByZWNhdGVkIHZ1bm1hcCBob29rIGZvciBHRU0gZHJpdmVycy4gUGxlYXNlIHVzZQo+ID4g KwkgKiAmZHJtX2dlbV9vYmplY3RfZnVuY3MudnVubWFwIGluc3RlYWQuCj4gT3I/Cj4gWQkgKiBE ZXByZWNhdGVkIGhvb2sgaW4gZmF2b3VyIG9mICZkcm1fZ2VtX29iamVjdF9mdW5jcy52dW5tYXAu Cj4gCj4gPiArCSAqLwo+ID4gIAl2b2lkICgqZ2VtX3ByaW1lX3Z1bm1hcCkoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKPiA+ICsKPiA+ICsJLyoqCj4gPiArCSAqIEBn ZW1fcHJpbWVfbW1hcDoKPiA+ICsJICoKPiA+ICsJICogbW1hcCBob29rIGZvciBHRU0gZHJpdmVy cywgdXNlZCB0byBpbXBsZW1lbnQgZG1hLWJ1ZiBtbWFwIGluIHRoZQo+ID4gKwkgKiBQUklNRSBo ZWxwZXJzLgo+ID4gKwkgKgo+ID4gKwkgKiBGSVhNRTogVGhlcmUncyB3YXkgdG9vIG11Y2ggZHVw bGljYXRpb24gZ29pbmcgb24gaGVyZSwgYW5kIGFsc28gbW92ZWQKPiA+ICsJICogdG8gJmRybV9n ZW1fb2JqZWN0X2Z1bmNzLgo+ID4gKwkgKi8KPiA+ICAJaW50ICgqZ2VtX3ByaW1lX21tYXApKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAo+ID4gIAkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSk7Cj4gPiAgCj4gPiBAQCAtNjY1LDYgKzczOCw5IEBAIHN0cnVjdCBkcm1fZHJpdmVyIHsK PiA+ICAKPiA+ICAJLyoqCj4gPiAgCSAqIEBnZW1fdm1fb3BzOiBEcml2ZXIgcHJpdmF0ZSBvcHMg Zm9yIHRoaXMgb2JqZWN0Cj4gPiArCSAqCj4gPiArCSAqIEZvciBHRU0gZHJpdmVyIHRoaXMgaXMg ZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YKPiA+ICsJICogJmRybV9nZW1fb2JqZWN0X2Z1bmNzLnZt X29wcy4KPiBPcj8KPiAJICogRGVwcmVjYXRlZCBob29rIGluIGZhdm91ciBvZiAmZHJtX2dlbV9v YmplY3RfZnVuY3Mudm1fb3BzLgo+ID4gIAkgKi8KPiA+ICAJY29uc3Qgc3RydWN0IHZtX29wZXJh dGlvbnNfc3RydWN0ICpnZW1fdm1fb3BzOwo+ID4gIAoKSSd2ZSB0YWtlbiBpbiBhbGwgeW91ciBv dGhlciBzdWdnZXN0aW9ucywgdGhhbmtzIGZvciB0YWtpbmcgYSBsb29rLgotRGFuaWVsCi0tIApE YW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8v YmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n Zng=