From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v5 18/20] drm/dp_mst: Start tracking per-port VCPI allocations Date: Thu, 10 Jan 2019 10:35:46 +0100 Message-ID: <20190110093546.GH21184@phenom.ffwll.local> References: <20190109003516.14752-1-lyude@redhat.com> <20190109003516.14752-19-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190109003516.14752-19-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Lyude Paul Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Jerry Zuo , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter , David Airlie , Harry Wentland , Juston Li List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBKYW4gMDgsIDIwMTkgYXQgMDc6MzU6MTVQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVpdGUgYSBsb25nIHRpbWUg aW4KPiBkcm1fZHBfbXN0X3RvcG9sb2d5LmM6Cj4gCj4gCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBv cnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+IAkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZiB0aGUgcGFyZW50Cj4gCSAqIGJyYW5j aCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcK PiAJICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgaW5zdGVhZCBvZgo+IAkgKiBkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxsIHVzIGhv dyBtYW55IHNsb3RzIHRvIHJlbGVhc2UuCj4gCSAqLwo+IAo+IFRoYXQncyBub3QgdGhlIG9ubHkg cmVhc29uIHdlIHNob3VsZCBmaXggdGhpczogZm9yY2luZyB0aGUgZHJpdmVyIHRvCj4gdHJhY2sg dGhlIFZDUEkgYWxsb2NhdGlvbnMgdGhyb3VnaG91dCBhIHN0YXRlJ3MgYXRvbWljIGNoZWNrIGlz Cj4gZXJyb3IgcHJvbmUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBleHRyYSBjYXJlIGhhcyB0byBi ZSB0YWtlbiB3aXRoIHRoZQo+IG9yZGVyIHRoYXQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xv dHMoKSBhbmQKPiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGFyZSBjYWxsZWQg aW4gaW4gb3JkZXIgdG8gZW5zdXJlCj4gaWRlbXBvdGVuY3kuIEN1cnJlbnRseSB0aGUgb25seSBk cml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhlc2UgaGVscGVycywKPiBpOTE1LCBkb2Vzbid0IGV2ZW4g ZG8gdGhpcyBjb3JyZWN0bHk6IG11bHRpcGxlIC0+YmVzdF9lbmNvZGVyKCkgY2hlY2tzCj4gd2l0 aCBpOTE1J3MgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBub3QgYmUgaWRlbXBvdGVudCBh bmQgd291bGQKPiBvdmVyLWFsbG9jYXRlIFZDUEkgc2xvdHMsIHNvbWV0aGluZyBJIGxlYXJuZWQg dHJ5aW5nIHRvIGltcGxlbWVudAo+IGZhbGxiYWNrIHJldHJhaW5pbmcgaW4gTVNULgo+IAo+IFNv OiBzaW1wbGlmeSB0aGlzIHdob2xlIG1lc3MsIGFuZCB0ZWFjaCBkcm1fZHBfYXRvbWljX2ZpbmRf dmNwaV9zbG90cygpCj4gYW5kIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgdG8g dHJhY2sgdGhlIFZDUEkgYWxsb2NhdGlvbnMgZm9yCj4gZWFjaCBwb3J0LiBUaGlzIGFsbG93cyB1 cyB0byBlbnN1cmUgaWRlbXBvdGVuY3kgd2l0aG91dCBoYXZpbmcgdG8gcmVseQo+IG9uIHRoZSBk cml2ZXIgYXMgbXVjaC4gQWRkaXRpb25hbGx5OiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBk byBhbnkKPiBraW5kIG9mIFZDUEkgc2xvdCB0cmFja2luZyBhbnltb3JlIGlmIGl0IGRvZXNuJ3Qg bmVlZCBpdCBmb3IgaXQncyBvd24KPiBpbnRlcm5hbCBzdGF0ZS4KPiAKPiBBZGRpdGlvbmFsbHk7 IHRoaXMgYWRkcyBhIG5ldyBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpIGhlbHBlciB3aGljaAo+ IG11c3QgYmUgdXNlZCBieSBhdG9taWMgZHJpdmVycyB0byBwZXJmb3JtIHZhbGlkaXR5IGNoZWNr cyBmb3IgdGhlIG5ldwo+IFZDUEkgYWxsb2NhdGlvbnMgaW5jdXJyZWQgYnkgYSBzdGF0ZS4KPiAK PiBBbHNvOiB1cGRhdGUgdGhlIGRvY3VtZW50YXRpb24gYW5kIG1ha2UgaXQgbW9yZSBvYnZpb3Vz IHRoYXQgdGhlc2UKPiAvbXVzdC8gYmUgY2FsbGVkIGJ5IC9hbGwvIGF0b21pYyBkcml2ZXJzIHN1 cHBvcnRpbmcgTVNULgo+IAo+IENoYW5nZXMgc2luY2Ugdjk6Cj4gKiBBZGQgc29tZSBtaXNzaW5n IGNoYW5nZXMgdGhhdCB3ZXJlIHJlcXVlc3RlZCBieSBkYW52ZXQgdGhhdCBJIGZvcmdvdAo+ICAg YWJvdXQgYWZ0ZXIgSSByZWRpZCBhbGwgb2YgdGhlIGtyZWYgc3R1ZmY6Cj4gICAqIFJlbW92ZSB1 bm5lY2Vzc2FyeSBzdGF0ZSBjaGFuZ2VzIGluIGludGVsX2RwX21zdF9hdG9taWNfY2hlY2sKPiAg ICogQ2xlYW51cCBhdG9taWMgY2hlY2sgbG9naWMgZm9yIFZDUEkgYWxsb2NhdGlvbnMgLSBhbGwg d2UgbmVlZCB0byBjaGVjayBpbgo+ICAgICBjb21wdXRlX2NvbmZpZyBpcyB3aGV0aGVyIG9yIG5v dCB0aGlzIHN0YXRlIGRpc2FibGVzIGEgQ1JUQywgdGhlbiBmcmVlCj4gICAgIFZDUEkgYmFzZWQg b2ZmIHRoYXQKPiAKPiBDaGFuZ2VzIHNpbmNlIHY4Ogo+ICAqIEZpeCBjb21waWxlIGVycm9ycywg d2hvb3BzIQo+IAo+IENoYW5nZXMgc2luY2Ugdjc6Cj4gIC0gRG9uJ3QgY2hlY2sgZm9yIG1peGVk IHN0YWxlL3ZhbGlkIFZDUEkgYWxsb2NhdGlvbnMsIGp1c3QgcmVseSBvbgo+ICBjb25uZWN0b3Ig cmVnaXN0cmF0aW9uIHRvIHN0b3Agc3VjaCBlcnJvbmVvdXMgbW9kZXNldHMKPiAKPiBDaGFuZ2Vz IHNpbmNlIHY2Ogo+ICAtIEtlZXAgYSBrcmVmIHRvIGFsbCBvZiB0aGUgcG9ydHMgd2UgaGF2ZSBh bGxvY2F0aW9ucyBvbi4gVGhpcyByZXF1aXJlZAo+ICAgIGEgZ29vZCBiaXQgb2YgY2hhbmdpbmcg dG8gd2hlbiB3ZSBjYWxsIGRybV9kcF9maW5kX3ZjcGlfc2xvdHMoKSwKPiAgICBtYWlubHkgdGhh dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIG9ubHkgcmVkbyBWQ1BJIGFsbG9jYXRpb25zIG9u Cj4gICAgYWN0dWFsIG1vZGUgb3IgQ1JUQyBjaGFuZ2VzLCBub3QgY3J0Y19zdGF0ZS0+YWN0aXZl IGNoYW5nZXMuCj4gICAgQWRkaXRpb25hbGx5LCB3ZSBubyBsb25nZXIgdGFrZSB0aGUgcmVnaXN0 cmF0aW9uIG9mIHRoZSBEUk0gY29ubmVjdG9yCj4gICAgZm9yIGVhY2ggcG9ydCBpbnRvIGFjY291 bnQgYmVjYXVzZSBzbyBsb25nIGFzIHdlIGhhdmUgYSBrcmVmIHRvIHRoZQo+ICAgIHBvcnQgaW4g dGhlIG5ldyBvciBwcmV2aW91cyBhdG9taWMgc3RhdGUsIHRoZSBjb25uZWN0b3Igd2lsbCBzdGF5 Cj4gICAgcmVnaXN0ZXJlZC4KPiAgLSBVc2UgdGhlIHNtYWxsIGNoYW5nZXMgdG8gZHJtX2RwX3B1 dF9wb3J0KCkgdG8gYWRkIGV2ZW4gbW9yZSBlcnJvcgo+ICAgIGNoZWNraW5nIHRvIG1ha2UgbWlz dXNhZ2Ugb2YgdGhlIGhlbHBlcnMgbW9yZSBvYnZpb3VzLiBJIGFkZGVkIHRoaXMKPiAgICBhZnRl ciBoYXZpbmcgdG8gY2hhc2UgZG93biB2YXJpb3VzIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMg dGhhdAo+ICAgIHN0YXJ0ZWQgcG9wcGluZyB1cCBmcm9tIHRoZSBuZXcgaGVscGVycyBzbyBubyBv bmUgZWxzZSBoYXMgdG8KPiAgICB0cm91Ymxlc2hvb3QgdGhhdC4KPiAgLSBNb3ZlIHNvbWUgYWNj aWRlbnRhbCBEUk1fREVCVUdfS01TKCkgY2FsbHMgdG8gRFJNX0RFQlVHX0FUT01JQygpCj4gIC0g VXBkYXRlIGRvY3VtZW50YXRpb24gYWdhaW4sIG5vdGUgdGhhdCBmaW5kL3JlbGVhc2UoKSBzaG91 bGQgYm90aCBub3QgYmUKPiAgICBjYWxsZWQgb24gdGhlIHNhbWUgcG9ydCBpbiBhIHNpbmdsZSBh dG9taWMgY2hlY2sgcGhhc2UgKGJ1dCBtdWx0aXBsZQo+ICAgIGNhbGxzIHRvIG9uZSBvciB0aGUg b3RoZXIgaXMgT0spCj4gCj4gQ2hhbmdlcyBzaW5jZSB2NDoKPiAgLSBEb24ndCBza2lwIHRoZSBh dG9taWMgY2hlY2tzIGZvciBWQ1BJIGFsbG9jYXRpb25zIGlmIG5vIG5ldyBWQ1BJCj4gICAgYWxs b2NhdGlvbnMgaGFwcGVuIGluIGEgc3RhdGUuIFRoaXMgbWFrZXMgdGhlIG5leHQgY2hhbmdlIEkn bSBhYm91dAo+ICAgIHRvIGxpc3QgaGVyZSBhIGxvdCBlYXNpZXIgdG8gaW1wbGVtZW50Lgo+ICAt IERvbid0IGlnbm9yZSBWQ1BJIGFsbG9jYXRpb25zIG9uIGRlc3Ryb3llZCBwb3J0cywgaW5zdGVh ZCBlbnN1cmUgdGhhdAo+ICAgIHdoZW4gcG9ydHMgYXJlIGRlc3Ryb3llZCBhbmQgc3RpbGwgaGF2 ZSBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZQo+ICAgIHRvcG9sb2d5IHN0YXRlLCB0aGUgb25seSBz dGF0ZSBjaGFuZ2VzIGFsbG93ZWQgYXJlIHJlbGVhc2luZyBzYWlkCj4gICAgcG9ydHMnIFZDUEku IFRoaXMgcHJldmVudHMgYSBzdGF0ZSB3aXRoIGEgbWl4IG9mIFZDUEkgYWxsb2NhdGlvbnMKPiAg ICBmcm9tIGRlc3Ryb3llZCBwb3J0cywgYW5kIGFsbG9jYXRpb25zIGZyb20gdmFsaWQgcG9ydHMu Cj4gCj4gQ2hhbmdlcyBzaW5jZSB2MzoKPiAgLSBEb24ndCByZWxlYXNlIFZDUEkgYWxsb2NhdGlv bnMgaW4gdGhlIHRvcG9sb2d5IHN0YXRlIGltbWVkaWF0ZWx5IGluCj4gICAgZHJtX2RwX2F0b21p Y19yZWxlYXNlX3ZjcGlfc2xvdHMoKSwgaW5zdGVhZCBtYXJrIHRoZW0gYXMgMCBhbmQgc2tpcAo+ ICAgIG92ZXIgdGhlbSBpbiBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZSgpLiBUaGlzIG1ha2Vz IGl0IHNvCj4gICAgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSBpcyBzdGlsbCBp ZGVtcG90ZW50IHdoaWxlIGFsc28KPiAgICB0aHJvd2luZyB3YXJuaW5ncyBpZiB0aGUgZHJpdmVy IG1lc3NlcyB1cCBpdCdzIGJvb2sga2VlcGluZyBhbmQgdHJpZXMKPiAgICB0byByZWxlYXNlIFZD UEkgc2xvdHMgb24gYSBwb3J0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmUtZXhpc3RpbmcKPiAg ICBWQ1BJIGFsbG9jYXRpb24gLSBkYW52ZXQKPiAgLSBDaGFuZ2UgbXN0X3N0YXRlL3N0YXRlIGlu IHNvbWUgZGVidWdnaW5nIG1lc3NhZ2VzIHRvICJtc3Qgc3RhdGUiCj4gCj4gQ2hhbmdlcyBzaW5j ZSB2MjoKPiAgLSBVc2Uga21lbWR1cCgpIGZvciBkdXBsaWNhdGluZyBNU1Qgc3RhdGUgLSBkYW52 ZXQKPiAgLSBNb3ZlIHBvcnQgdmFsaWRhdGlvbiBvdXQgb2YgZHVwbGljYXRlIHN0YXRlIGNhbGxi YWNrIC0gZGFudmV0Cj4gIC0gSGFuZGxlIGxvb3BpbmcgdGhyb3VnaCBNU1QgdG9wb2xvZ3kgc3Rh dGVzIGluCj4gICAgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKSBzbyB0aGUgZHJpdmVyIGRvZXNu J3QgaGF2ZSB0byBkbyBpdAo+ICAtIEZpeCBkb2N1bWVudGF0aW9uIGluIGRybV9kcF9hdG9taWNf ZmluZF92Y3BpX3Nsb3RzKCkKPiAgLSBNb3ZlIHRoZSBhdG9taWMgY2hlY2sgZm9yIGVhY2ggaW5k aXZpZHVhbCB0b3BvbG9neSBzdGF0ZSBpbnRvIGl0J3MKPiAgICBvd24gZnVuY3Rpb24sIHJlZHVj ZXMgaW5kZW50aW5nCj4gIC0gRG9uJ3QgY29uc2lkZXIgInN0YWxlIiBNU1QgcG9ydHMgd2hlbiBj YWxjdWxhdGluZyB0aGUgYmFuZHdpZHRoCj4gICAgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIG5lZWRl ZCBiZWNhdXNlIG9yaWdpbmFsbHkgd2UgcmVsaWVkIG9uIHRoZQo+ICAgIHN0YXRlIGR1cGxpY2F0 aW9uIGZ1bmN0aW9ucyB0byBwcnVuZSBhbnkgc3RhbGUgcG9ydHMgZnJvbSB0aGUgbmV3Cj4gICAg c3RhdGUsIHdoaWNoIHdvdWxkIHByZXZlbnQgdXMgZnJvbSBpbmNvcnJlY3RseSBjb25zaWRlcmlu ZyB0aGVpcgo+ICAgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgYWxvbmdzaWRlIGxlZ2l0aW1hdGUg bmV3IHBheWxvYWRzLgo+ICAtIEFkZCBmdW5jdGlvbiByZWZlcmVuY2VzIGluIGRybV9kcF9hdG9t aWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgLSBkYW52ZXQKPiAgLSBBbm5vdGF0ZSBhdG9taWMgVkNQ SSBhbmQgYXRvbWljIGNoZWNrIGZ1bmN0aW9ucyB3aXRoIF9fbXVzdF9jaGVjawo+ICAgIC0gZGFu dmV0Cj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToKPiAgLSBEb24ndCB1c2UgdGhlIG5vdy1yZW1vdmVk IC0+YXRvbWljX2NoZWNrKCkgZm9yIHByaXZhdGUgb2JqZWN0cyBob29rLAo+ICAgIGp1c3QgZ2l2 ZSBkcml2ZXJzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGVtc2VsdmVzCj4gCj4gU2lnbmVkLW9mZi1i eTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiBDYzogRGFuaWVsIFZldHRlciA8ZGFu aWVsLnZldHRlckBmZndsbC5jaD4KPiBDYzogRGF2aWQgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5j b20+Cj4gQ2M6IEplcnJ5IFp1byA8SmVycnkuWnVvQGFtZC5jb20+Cj4gQ2M6IEhhcnJ5IFdlbnRs YW5kIDxoYXJyeS53ZW50bGFuZEBhbWQuY29tPgo+IENjOiBKdXN0b24gTGkgPGp1c3Rvbi5saUBp bnRlbC5jb20+CgpSZXZpZXdlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZnds bC5jaD4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgfCAy NDcgKysrKysrKysrKysrKysrKysrKysrKy0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jICB8ICAgNCArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21z dC5jICAgfCAgNTQgKysrLS0tCj4gIGluY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmggICAg ICAgfCAgMjMgKystCj4gIDQgZmlsZXMgY2hhbmdlZCwgMjY2IGluc2VydGlvbnMoKyksIDYyIGRl bGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90 b3BvbG9neS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+IGluZGV4 IDM3MDM3MTE0NWNkZC4uZmM3NzhjNmQ0ODdlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21z dF90b3BvbG9neS5jCj4gQEAgLTMwMjAsMjEgKzMwMjAsNDIgQEAgc3RhdGljIGludCBkcm1fZHBf aW5pdF92Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICB9Cj4gIAo+ ICAvKioKPiAtICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFk ZCB2Y3BpIHNsb3RzIHRvIHRoZSBzdGF0ZQo+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9z bG90cygpIC0gRmluZCBhbmQgYWRkIFZDUEkgc2xvdHMgdG8gdGhlIHN0YXRlCj4gICAqIEBzdGF0 ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBm b3IgdGhlIHBvcnQKPiAgICogQHBvcnQ6IHBvcnQgdG8gZmluZCB2Y3BpIHNsb3RzIGZvcgo+ICAg KiBAcGJuOiBiYW5kd2lkdGggcmVxdWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ICAgKgo+IC0g KiBSRVRVUk5TOgo+IC0gKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWljIHN0YXRlIGFzc2lnbmVk IGZvciB0aGlzIHBvcnQgb3IgZXJyb3IKPiArICogQWxsb2NhdGVzIFZDUEkgc2xvdHMgdG8gQHBv cnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgVkNQSSBhbGxvY2F0aW9ucyBpdAo+ICsgKiBtYXkg aGF2ZSBoYWQuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwg dGhpcyBmdW5jdGlvbgo+ICsgKiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0 b21pY19jaGVjaygpIGNhbGxiYWNrIHRvIGNoYW5nZSB0aGUKPiArICogY3VycmVudCBWQ1BJIGFs bG9jYXRpb24gZm9yIHRoZSBuZXcgc3RhdGUsIGJ1dCBvbmx5IHdoZW4KPiArICogJmRybV9jcnRj X3N0YXRlLm1vZGVfY2hhbmdlZCBvciAmZHJtX2NydGNfc3RhdGUuY29ubmVjdG9yc19jaGFuZ2Vk IGlzIHNldAo+ICsgKiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXJzcGFjZSBhcHBs aWNhdGlvbnMgdGhhdCBzdGlsbCB1c2UgdGhlCj4gKyAqIGxlZ2FjeSBtb2Rlc2V0dGluZyBVQVBJ Lgo+ICsgKgo+ICsgKiBBbGxvY2F0aW9ucyBzZXQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgbm90IGNo ZWNrZWQgYWdhaW5zdCB0aGUgYmFuZHdpZHRoCj4gKyAqIHJlc3RyYWludHMgb2YgQG1nciB1bnRp bCB0aGUgZHJpdmVyIGNhbGxzIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkuCj4gKyAqCj4gKyAq IEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRp bWVzIG9uIHRoZSBzYW1lCj4gKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQgaXMgbm90IE9LIGhvd2V2 ZXIsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQKPiArICogZHJtX2RwX2F0b21pY19yZWxlYXNl X3ZjcGlfc2xvdHMoKSBpbiB0aGUgc2FtZSBhdG9taWMgY2hlY2sgcGhhc2UuCj4gKyAqCj4gKyAq IFNlZSBhbHNvOgo+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4gKyAq IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiArICoKPiArICogUmV0dXJuczoKPiArICogVG90 YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0LCBvciBh IG5lZ2F0aXZlIGVycm9yCj4gKyAqIGNvZGUgaWYgdGhlIHBvcnQgbm8gbG9uZ2VyIGV4aXN0cwo+ ICAgKi8KPiAgaW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwKPiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy ICptZ3IsCj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pCj4g IHsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICp0b3BvbG9neV9zdGF0ZTsK PiAtCWludCByZXFfc2xvdHM7Cj4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9z LCAqdmNwaSA9IE5VTEw7Cj4gKwlpbnQgcHJldl9zbG90cywgcmVxX3Nsb3RzLCByZXQ7Cj4gIAo+ ICAJdG9wb2xvZ3lfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3Rh dGUsIG1ncik7Cj4gIAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiBAQCAtMzA0MywyMCAr MzA2NCw1NCBAQCBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJcG9ydCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3Bv cnRfdmFsaWRhdGVkKG1nciwgcG9ydCk7Cj4gIAlpZiAocG9ydCA9PSBOVUxMKQo+ICAJCXJldHVy biAtRUlOVkFMOwo+IC0JcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5fZGl2 KTsKPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgcmVxPSVkLCBhdmFpbD0lZFxuIiwKPiAt CQkJcmVxX3Nsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ICAKPiAtCWlmIChy ZXFfc2xvdHMgPiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpIHsKPiAtCQlkcm1fZHBfbXN0 X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOwo+IC0JCXJldHVybiAtRU5PU1BDOwo+ICsJLyogRmlu ZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uIGZvciB0aGlzIHBvcnQsIGlmIGFueSAqLwo+ICsJbGlz dF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiAr CQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsKPiArCQkJdmNwaSA9IHBvczsKPiArCQkJcHJldl9z bG90cyA9IHZjcGktPnZjcGk7Cj4gKwo+ICsJCQkvKgo+ICsJCQkgKiBUaGlzIHNob3VsZCBuZXZl ciBoYXBwZW4sIHVubGVzcyB0aGUgZHJpdmVyIHRyaWVzCj4gKwkJCSAqIHJlbGVhc2luZyBhbmQg YWxsb2NhdGluZyB0aGUgc2FtZSBWQ1BJIGFsbG9jYXRpb24sCj4gKwkJCSAqIHdoaWNoIGlzIGFu IGVycm9yCj4gKwkJCSAqLwo+ICsJCQlpZiAoV0FSTl9PTighcHJldl9zbG90cykpIHsKPiArCQkJ CURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRlIGFuZCByZWxlYXNlIFZDUEkgb24gW01TVCBQT1JU OiVwXSBpbiB0aGUgc2FtZSBzdGF0ZVxuIiwKPiArCQkJCQkgIHBvcnQpOwo+ICsJCQkJcmV0dXJu IC1FSU5WQUw7Cj4gKwkJCX0KPiArCj4gKwkJCWJyZWFrOwo+ICsJCX0KPiAgCX0KPiArCWlmICgh dmNwaSkKPiArCQlwcmV2X3Nsb3RzID0gMDsKPiArCj4gKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRf VVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ICsKPiArCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNU T1I6JWQ6JXNdIFtNU1QgUE9SVDolcF0gVkNQSSAlZCAtPiAlZFxuIiwKPiArCQkJIHBvcnQtPmNv bm5lY3Rvci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLAo+ICsJCQkgcG9ydCwgcHJl dl9zbG90cywgcmVxX3Nsb3RzKTsKPiArCj4gKwkvKiBBZGQgdGhlIG5ldyBhbGxvY2F0aW9uIHRv IHRoZSBzdGF0ZSAqLwo+ICsJaWYgKCF2Y3BpKSB7Cj4gKwkJdmNwaSA9IGt6YWxsb2Moc2l6ZW9m KCp2Y3BpKSwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCF2Y3BpKSB7Cj4gKwkJCXJldCA9IC1FTk9N RU07Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiAgCj4gLQl0b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMgLT0gcmVxX3Nsb3RzOwo+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyBhdmFpbD0l ZCIsIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyk7Cj4gKwkJZHJtX2RwX21zdF9nZXRfcG9y dF9tYWxsb2MocG9ydCk7Cj4gKwkJdmNwaS0+cG9ydCA9IHBvcnQ7Cj4gKwkJbGlzdF9hZGQoJnZj cGktPm5leHQsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMpOwo+ICsJfQo+ICsJdmNwaS0+dmNwaSA9 IHJlcV9zbG90czsKPiAgCj4gKwlyZXQgPSByZXFfc2xvdHM7Cj4gK291dDoKPiAgCWRybV9kcF9t c3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gLQlyZXR1cm4gcmVxX3Nsb3RzOwo+ICsJcmV0 dXJuIHJldDsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Ns b3RzKTsKPiAgCj4gQEAgLTMwNjQsMzEgKzMxMTksNTcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZHBf YXRvbWljX2ZpbmRfdmNwaV9zbG90cyk7Cj4gICAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3Bp X3Nsb3RzKCkgLSBSZWxlYXNlIGFsbG9jYXRlZCB2Y3BpIHNsb3RzCj4gICAqIEBzdGF0ZTogZ2xv YmFsIGF0b21pYyBzdGF0ZQo+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhl IHBvcnQKPiAtICogQHNsb3RzOiBudW1iZXIgb2YgdmNwaSBzbG90cyB0byByZWxlYXNlCj4gKyAq IEBwb3J0OiBUaGUgcG9ydCB0byByZWxlYXNlIHRoZSBWQ1BJIHNsb3RzIGZyb20KPiAgICoKPiAt ICogUkVUVVJOUzoKPiAtICogMCBpZiBAc2xvdHMgd2VyZSBhZGRlZCBiYWNrIHRvICZkcm1fZHBf bXN0X3RvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBvcgo+IC0gKiBuZWdhdGl2ZSBlcnJvciBj b2RlCj4gKyAqIFJlbGVhc2VzIGFueSBWQ1BJIHNsb3RzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRl ZCB0byBhIHBvcnQgaW4gdGhlIGF0b21pYwo+ICsgKiBzdGF0ZS4gQW55IGF0b21pYyBkcml2ZXJz IHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGluCj4gKyAqIHRoZWly ICZkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKSBjYWxsYmFjayB3aGVu IHRoZQo+ICsgKiBjb25uZWN0b3Igd2lsbCBubyBsb25nZXIgaGF2ZSBWQ1BJIGFsbG9jYXRlZCAo ZS5nLiBiZWNhdXNlIGl0J3MgQ1JUQyB3YXMKPiArICogcmVtb3ZlZCkgd2hlbiBpdCBoYWQgVkNQ SSBhbGxvY2F0ZWQgaW4gdGhlIHByZXZpb3VzIGF0b21pYyBzdGF0ZS4KPiArICoKPiArICogSXQg aXMgT0sgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgQHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRo ZSBzeXN0ZW0uCj4gKyAqIEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1bmN0 aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lCj4gKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQg aXMgbm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQKPiArICogZHJtX2Rw X2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSBvbiB0aGUgc2FtZSBAcG9ydCBpbiBhIHNpbmdsZSBh dG9taWMgY2hlY2sKPiArICogcGhhc2UuCj4gKyAqCj4gKyAqIFNlZSBhbHNvOgo+ICsgKiBkcm1f ZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNr KCkKPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBpZiBhbGwgc2xvdHMgZm9yIHRoaXMgcG9y dCB3ZXJlIGFkZGVkIGJhY2sgdG8KPiArICogJmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUuYXZh aWxfc2xvdHMgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQo+ICAgKi8KPiAgaW50IGRybV9kcF9hdG9t aWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAg CQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gLQkJCQkgICAg IGludCBzbG90cykKPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiAg ewo+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnRvcG9sb2d5X3N0YXRlOwo+ ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvczsKPiArCWJvb2wgZm91bmQgPSBm YWxzZTsKPiAgCj4gIAl0b3BvbG9neV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9n eV9zdGF0ZShzdGF0ZSwgbWdyKTsKPiAgCWlmIChJU19FUlIodG9wb2xvZ3lfc3RhdGUpKQo+ICAJ CXJldHVybiBQVFJfRVJSKHRvcG9sb2d5X3N0YXRlKTsKPiAgCj4gLQkvKiBXZSBjYW5ub3QgcmVs eSBvbiBwb3J0LT52Y3BpLm51bV9zbG90cyB0byB1cGRhdGUKPiAtCSAqIHRvcG9sb2d5X3N0YXRl LT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKPiAt CSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkg dHJhY2tpbmcKPiAtCSAqIHBlci1wb3J0IHNsb3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlIGluc3RlYWQgb2YKPiAtCSAqIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRv IHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVsZWFzZS4KPiAtCSAqLwo+IC0JdG9wb2xvZ3lf c3RhdGUtPmF2YWlsX3Nsb3RzICs9IHNsb3RzOwo+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90 cyByZWxlYXNlZD0lZCwgYXZhaWw9JWRcbiIsCj4gLQkJCXNsb3RzLCB0b3BvbG9neV9zdGF0ZS0+ YXZhaWxfc2xvdHMpOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0b3BvbG9neV9zdGF0 ZS0+dmNwaXMsIG5leHQpIHsKPiArCQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsKPiArCQkJZm91 bmQgPSB0cnVlOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlpZiAoV0FSTl9PTighZm91 bmQpKSB7Cj4gKwkJRFJNX0VSUk9SKCJubyBWQ1BJIGZvciBbTVNUIFBPUlQ6JXBdIGZvdW5kIGlu IG1zdCBzdGF0ZSAlcFxuIiwKPiArCQkJICBwb3J0LCAmdG9wb2xvZ3lfc3RhdGUtPmJhc2UpOwo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19BVE9NSUMoIltNU1Qg UE9SVDolcF0gVkNQSSAlZCAtPiAwXG4iLCBwb3J0LCBwb3MtPnZjcGkpOwo+ICsJaWYgKHBvcy0+ dmNwaSkgewo+ICsJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKHBvcnQpOwo+ICsJCXBvcy0+ dmNwaSA9IDA7Cj4gKwl9Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtMzUxMCwxNSArMzU5 MSw0MSBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCj4gIHN0YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKgo+ ICBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmop Cj4gIHsKPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZTsKPiArCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZSwgKm9sZF9zdGF0ZSA9Cj4gKwkJ dG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG9iai0+c3RhdGUpOwo+ICsJc3RydWN0IGRybV9kcF92 Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZjcGk7Cj4gIAo+IC0Jc3RhdGUgPSBrbWVtZHVwKG9iai0+ c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiArCXN0YXRlID0ga21lbWR1cChv bGRfc3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiAgCWlmICghc3RhdGUpCj4g IAkJcmV0dXJuIE5VTEw7Cj4gIAo+ICAJX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9k dXBsaWNhdGVfc3RhdGUob2JqLCAmc3RhdGUtPmJhc2UpOwo+ICAKPiArCUlOSVRfTElTVF9IRUFE KCZzdGF0ZS0+dmNwaXMpOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmb2xkX3N0 YXRlLT52Y3BpcywgbmV4dCkgewo+ICsJCS8qIFBydW5lIGxlZnRvdmVyIGZyZWVkIFZDUEkgYWxs b2NhdGlvbnMgKi8KPiArCQlpZiAoIXBvcy0+dmNwaSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CXZjcGkgPSBrbWVtZHVwKHBvcywgc2l6ZW9mKCp2Y3BpKSwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYg KCF2Y3BpKQo+ICsJCQlnb3RvIGZhaWw7Cj4gKwo+ICsJCWRybV9kcF9tc3RfZ2V0X3BvcnRfbWFs bG9jKHZjcGktPnBvcnQpOwo+ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmc3RhdGUtPnZjcGlz KTsKPiArCX0KPiArCj4gIAlyZXR1cm4gJnN0YXRlLT5iYXNlOwo+ICsKPiArZmFpbDoKPiArCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHZjcGksICZzdGF0ZS0+dmNwaXMsIG5leHQpIHsK PiArCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3MtPnBvcnQpOwo+ICsJCWtmcmVlKHBv cyk7Cj4gKwl9Cj4gKwlrZnJlZShzdGF0ZSk7Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gIH0KPiAg Cj4gIHN0YXRpYyB2b2lkIGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZh dGVfb2JqICpvYmosCj4gQEAgLTM1MjYsMTAgKzM2MzMsODggQEAgc3RhdGljIHZvaWQgZHJtX2Rw X21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwKPiAgewo+ICAJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSA9Cj4gIAkJdG9fZHBf bXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlKTsKPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0 aW9uICpwb3MsICp0bXA7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1w LCAmbXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ICsJCS8qIFdlIG9ubHkga2VlcCByZWZlcmVu Y2VzIHRvIHBvcnRzIHdpdGggbm9uLXplcm8gVkNQSXMgKi8KPiArCQlpZiAocG9zLT52Y3BpKQo+ ICsJCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3MtPnBvcnQpOwo+ICsJCWtmcmVlKHBv cyk7Cj4gKwl9Cj4gIAo+ICAJa2ZyZWUobXN0X3N0YXRlKTsKPiAgfQo+ICAKPiArc3RhdGljIGlu bGluZSBpbnQKPiArZHJtX2RwX21zdF9hdG9taWNfY2hlY2tfdG9wb2xvZ3lfc3RhdGUoc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9kcF92 Y3BpX2FsbG9jYXRpb24gKnZjcGk7Cj4gKwlpbnQgYXZhaWxfc2xvdHMgPSA2MzsKPiArCj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHZjcGksICZtc3Rfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gKwkJ LyogUmVsZWFzaW5nIFZDUEkgaXMgYWx3YXlzIE9LLWV2ZW4gaWYgdGhlIHBvcnQgaXMgZ29uZSAq Lwo+ICsJCWlmICghdmNwaS0+dmNwaSkgewo+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBP UlQ6JXBdIHJlbGVhc2VzIGFsbCBWQ1BJIHNsb3RzXG4iLAo+ICsJCQkJCSB2Y3BpLT5wb3J0KTsK PiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBP UlQ6JXBdIHJlcXVpcmVzICVkIHZjcGkgc2xvdHNcbiIsCj4gKwkJCQkgdmNwaS0+cG9ydCwgdmNw aS0+dmNwaSk7Cj4gKwo+ICsJCWF2YWlsX3Nsb3RzIC09IHZjcGktPnZjcGk7Cj4gKwkJaWYgKGF2 YWlsX3Nsb3RzIDwgMCkgewo+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIG5v dCBlbm91Z2ggVkNQSSBzbG90cyBpbiBtc3Qgc3RhdGUgJXAgKGF2YWlsPSVkKVxuIiwKPiArCQkJ CQkgdmNwaS0+cG9ydCwgbXN0X3N0YXRlLAo+ICsJCQkJCSBhdmFpbF9zbG90cyArIHZjcGktPnZj cGkpOwo+ICsJCQlyZXR1cm4gLUVOT1NQQzsKPiArCQl9Cj4gKwl9Cj4gKwlEUk1fREVCVUdfQVRP TUlDKCJbTVNUIE1HUjolcF0gbXN0IHN0YXRlICVwIFZDUEkgYXZhaWw9JWQgdXNlZD0lZFxuIiwK PiArCQkJIG1nciwgbXN0X3N0YXRlLCBhdmFpbF9zbG90cywKPiArCQkJIDYzIC0gYXZhaWxfc2xv dHMpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2RwX21zdF9h dG9taWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUgb2YgYW4gTVNUIHRvcG9sb2d5 IGluIGFuCj4gKyAqIGF0b21pYyB1cGRhdGUgaXMgdmFsaWQKPiArICogQHN0YXRlOiBQb2ludGVy IHRvIHRoZSBuZXcgJnN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4gKyAqCj4gKyAq IENoZWNrcyB0aGUgZ2l2ZW4gdG9wb2xvZ3kgc3RhdGUgZm9yIGFuIGF0b21pYyB1cGRhdGUgdG8g ZW5zdXJlIHRoYXQgaXQncwo+ICsgKiB2YWxpZC4gVGhpcyBpbmNsdWRlcyBjaGVja2luZyB3aGV0 aGVyIHRoZXJlJ3MgZW5vdWdoIGJhbmR3aWR0aCB0byBzdXBwb3J0Cj4gKyAqIHRoZSBuZXcgVkNQ SSBhbGxvY2F0aW9ucyBpbiB0aGUgYXRvbWljIHVwZGF0ZS4KPiArICoKPiArICogQW55IGF0b21p YyBkcml2ZXJzIHN1cHBvcnRpbmcgRFAgTVNUIG11c3QgbWFrZSBzdXJlIHRvIGNhbGwgdGhpcyBh ZnRlcgo+ICsgKiBjaGVja2luZyB0aGUgcmVzdCBvZiB0aGVpciBzdGF0ZSBpbiB0aGVpcgo+ICsg KiAmZHJtX21vZGVfY29uZmlnX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNrLgo+ICsgKgo+ ICsgKiBTZWUgYWxzbzoKPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQo+ICsg KiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4gKyAqCj4gKyAqIFJldHVybnM6 Cj4gKyAqCj4gKyAqIDAgaWYgdGhlIG5ldyBzdGF0ZSBpcyB2YWxpZCwgbmVnYXRpdmUgZXJyb3Ig Y29kZSBvdGhlcndpc2UuCj4gKyAqLwo+ICtpbnQgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1ncjsKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpt c3Rfc3RhdGU7Cj4gKwlpbnQgaSwgcmV0ID0gMDsKPiArCj4gKwlmb3JfZWFjaF9uZXdfbXN0X21n cl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKPiArCQlyZXQgPSBkcm1fZHBf bXN0X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShtZ3IsIG1zdF9zdGF0ZSk7Cj4gKwkJaWYg KHJldCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBP UlRfU1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKTsKPiArCj4gIGNvbnN0IHN0cnVjdCBk cm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzID0g ewo+ICAJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0 ZSwKPiAgCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZSwK PiBAQCAtMzYxMiw5ICszNzk3LDcgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2luaXQo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gIAkJcmV0dXJuIC1FTk9NRU07 Cj4gIAo+ICAJbXN0X3N0YXRlLT5tZ3IgPSBtZ3I7Cj4gLQo+IC0JLyogbWF4LiB0aW1lIHNsb3Rz IC0gb25lIHNsb3QgZm9yIE1UUCBoZWFkZXIgKi8KPiAtCW1zdF9zdGF0ZS0+YXZhaWxfc2xvdHMg PSA2MzsKPiArCUlOSVRfTElTVF9IRUFEKCZtc3Rfc3RhdGUtPnZjcGlzKTsKPiAgCj4gIAlkcm1f YXRvbWljX3ByaXZhdGVfb2JqX2luaXQoZGV2LCAmbWdyLT5iYXNlLAo+ICAJCQkJICAgICZtc3Rf c3RhdGUtPmJhc2UsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IDY5 NmU2ZjU2ODBkZi4uZDE1OTViZTRhODgwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwo+IEBAIC0xMjcxMCw2ICsxMjcxMCwxMCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21p Y19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkJICAgICAgICJbbW9kZXNldF0i IDogIltmYXN0c2V0XSIpOwo+ICAJfQo+ICAKPiArCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2No ZWNrKHN0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gIAlpZiAoYW55 X21zKSB7Cj4gIAkJcmV0ID0gaW50ZWxfbW9kZXNldF9jaGVja3Moc3RhdGUpOwo+ICAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+IGluZGV4IDYzMWZkMTUzNzI1Mi4uYzhlMjIxNTYy OGU2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiBAQCAtNDEsOCArNDEs MTIgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyLAo+ICAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9 IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsKPiAgCXZvaWQgKnBvcnQgPSB0b19pbnRlbF9jb25uZWN0 b3IoY29ubmVjdG9yKS0+cG9ydDsKPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9 IHBpcGVfY29uZmlnLT5iYXNlLnN0YXRlOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gcGlw ZV9jb25maWctPmJhc2UuY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNf c3RhdGUgPQo+ICsJCWRybV9hdG9taWNfZ2V0X29sZF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsK PiAgCWludCBicHA7Cj4gLQlpbnQgbGFuZV9jb3VudCwgc2xvdHMgPSAwOwo+ICsJaW50IGxhbmVf Y291bnQsIHNsb3RzID0KPiArCQl0b19pbnRlbF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKS0+ ZHBfbV9uLnR1Owo+ICAJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21v ZGUgPSAmcGlwZV9jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZTsKPiAgCWludCBtc3RfcGJuOwo+ ICAJYm9vbCBjb25zdGFudF9uID0gZHJtX2RwX2hhc19xdWlyaygmaW50ZWxfZHAtPmRlc2MsCj4g QEAgLTEwNywzNSArMTExLDM5IEBAIHN0YXRpYyBib29sIGludGVsX2RwX21zdF9jb21wdXRlX2Nv bmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCXJldHVybiB0cnVlOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgaW50IGludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKPiAtCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3 X2Nvbm5fc3RhdGUpCj4gK3N0YXRpYyBpbnQKPiAraW50ZWxfZHBfbXN0X2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkgIHN0cnVjdCBkcm1fY29ubmVj dG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZSkKPiAgewo+ICAJc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlID0gbmV3X2Nvbm5fc3RhdGUtPnN0YXRlOwo+IC0Jc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwo+IC0Jc3RydWN0IGRybV9jcnRjICpvbGRfY3J0YzsK PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZSA9Cj4gKwkJZHJt X2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKPiArCXN0 cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9Cj4gKwkJdG9faW50ZWxfY29u bmVjdG9yKGNvbm5lY3Rvcik7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKm5ld19jcnRjID0gbmV3X2Nv bm5fc3RhdGUtPmNydGM7Cj4gIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4g LQlpbnQgc2xvdHMsIHJldCA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1ncjsKPiArCWludCByZXQgPSAwOwo+ICAKPiAtCW9sZF9jb25uX3N0YXRlID0gZHJtX2F0b21p Y19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKPiAtCW9sZF9jcnRj ID0gb2xkX2Nvbm5fc3RhdGUtPmNydGM7Cj4gLQlpZiAoIW9sZF9jcnRjKQo+IC0JCXJldHVybiBy ZXQ7Cj4gLQo+IC0JY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0 YXRlLCBvbGRfY3J0Yyk7Cj4gLQlzbG90cyA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0 ZSktPmRwX21fbi50dTsKPiAtCWlmIChkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRj X3N0YXRlKSAmJiBzbG90cyA+IDApIHsKPiAtCQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1ncjsKPiAtCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKm9sZF9lbmNvZGVyOwo+ICsJaWYgKCFv bGRfY29ubl9zdGF0ZS0+Y3J0YykKPiArCQlyZXR1cm4gMDsKPiAgCj4gLQkJb2xkX2VuY29kZXIg PSBvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyOwo+IC0JCW1nciA9ICZlbmNfdG9fbXN0KG9s ZF9lbmNvZGVyKS0+cHJpbWFyeS0+ZHAubXN0X21ncjsKPiArCS8qIFdlIG9ubHkgd2FudCB0byBm cmVlIFZDUEkgaWYgdGhpcyBzdGF0ZSBkaXNhYmxlcyB0aGUgQ1JUQyBvbiB0aGlzCj4gKwkgKiBj b25uZWN0b3IKPiArCSAqLwo+ICsJaWYgKG5ld19jcnRjKSB7Cj4gKwkJY3J0Y19zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBuZXdfY3J0Yyk7Cj4gIAo+IC0JCXJl dCA9IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsIHNsb3RzKTsK PiAtCQlpZiAocmV0KQo+IC0JCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgcmVsZWFzaW5nICVkIHZj cGkgc2xvdHM6JWRcbiIsIHNsb3RzLCByZXQpOwo+IC0JCWVsc2UKPiAtCQkJdG9faW50ZWxfY3J0 Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiArCQlpZiAoIWNydGNfc3RhdGUg fHwKPiArCQkgICAgIWRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpIHx8 Cj4gKwkJICAgIGNydGNfc3RhdGUtPmVuYWJsZSkKPiArCQkJcmV0dXJuIDA7Cj4gIAl9Cj4gKwo+ ICsJbWdyID0gJmVuY190b19tc3Qob2xkX2Nvbm5fc3RhdGUtPmJlc3RfZW5jb2RlciktPnByaW1h cnktPmRwLm1zdF9tZ3I7Cj4gKwlyZXQgPSBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90 cyhzdGF0ZSwgbWdyLAo+ICsJCQkJCSAgICAgICBpbnRlbF9jb25uZWN0b3ItPnBvcnQpOwo+ICsK PiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9k cF9tc3RfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gaW5kZXgg NTgxMTYzYzhkN2Q3Li40NTFkMDIwZjAxMzcgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJt X2RwX21zdF9oZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgK PiBAQCAtNDI1LDkgKzQyNSwxNSBAQCBzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgewo+ICAKPiAgI2Rl ZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLCBiYXNlKQo+ICAKPiArc3RydWN0IGRybV9kcF92Y3Bp X2FsbG9jYXRpb24gewo+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKPiArCWludCB2 Y3BpOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBuZXh0Owo+ICt9Owo+ICsKPiAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUgewo+ICAJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7 Cj4gLQlpbnQgYXZhaWxfc2xvdHM7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHZjcGlzOwo+ICAJc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gIH07Cj4gIAo+IEBAIC02MzgsMTQg KzY0NCwxNyBAQCB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3N1c3BlbmQoc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwo+ICBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9t Z3JfcmVzdW1lKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiAgc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKmRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9z dGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIAkJCQkJCQkJICAgIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiAtaW50IGRybV9kcF9hdG9taWNfZmlu ZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAtCQkJCSAgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gLQkJCQkgIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwo+IC1pbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3Zj cGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+IC0JCQkJICAgICBzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAtCQkJCSAgICAgaW50IHNsb3RzKTsK PiAraW50IF9fbXVzdF9jaGVjawo+ICtkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpw b3J0LCBpbnQgcGJuKTsKPiAraW50IF9fbXVzdF9jaGVjawo+ICtkcm1fZHBfYXRvbWljX3JlbGVh c2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gKwkJCQkgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gKwkJCQkgc3RydWN0IGRybV9kcF9t c3RfcG9ydCAqcG9ydCk7Cj4gIGludCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJCQkJIHN0cnVjdCBkcm1fZHBfbXN0 X3BvcnQgKnBvcnQsIGJvb2wgcG93ZXJfdXApOwo+ICtpbnQgX19tdXN0X2NoZWNrIGRybV9kcF9t c3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gIAo+ICB2 b2lkIGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBv cnQpOwo+ICB2b2lkIGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKHN0cnVjdCBkcm1fZHBfbXN0 X3BvcnQgKnBvcnQpOwo+IC0tIAo+IDIuMjAuMQo+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdh cmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGlu ZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=