From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH 15/25] argo: implement the sendv op Date: Tue, 4 Dec 2018 11:22:50 +0000 Message-ID: <6dcfe12d5c6d4b6ca7f6759b9de5f012@AMSPEX02CL03.citrite.net> References: <1543627984-21394-1-git-send-email-christopher.w.clark@gmail.com> <1543627984-21394-16-git-send-email-christopher.w.clark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gU8n0-0003a7-8V for xen-devel@lists.xenproject.org; Tue, 04 Dec 2018 11:22:54 +0000 In-Reply-To: <1543627984-21394-16-git-send-email-christopher.w.clark@gmail.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: 'Christopher Clark' , "xen-devel@lists.xenproject.org" Cc: Stefano Stabellini , Wei Liu , Ross Philipson , Konrad Rzeszutek Wilk , Daniel Smith , Andrew Cooper , Jason Andryuk , "Tim (Xen.org)" , George Dunlap , Rich Persaud , James McKenzie , Julien Grall , Jan Beulich , Ian Jackson , Eric Chanudet List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IENocmlzdG9waGVyIENsYXJrIFtt YWlsdG86Y2hyaXN0b3BoZXIudy5jbGFya0BnbWFpbC5jb21dCj4gU2VudDogMDEgRGVjZW1iZXIg MjAxOCAwMTozMwo+IFRvOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPiBDYzogQW5k cmV3IENvb3BlciA8QW5kcmV3LkNvb3BlcjNAY2l0cml4LmNvbT47IEdlb3JnZSBEdW5sYXAKPiA8 R2VvcmdlLkR1bmxhcEBjaXRyaXguY29tPjsgSWFuIEphY2tzb24gPElhbi5KYWNrc29uQGNpdHJp eC5jb20+OyBKYW4KPiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT47IEp1bGllbiBHcmFsbCA8 anVsaWVuLmdyYWxsQGFybS5jb20+OyBLb25yYWQKPiBSemVzenV0ZWsgV2lsayA8a29ucmFkLndp bGtAb3JhY2xlLmNvbT47IFN0ZWZhbm8gU3RhYmVsbGluaQo+IDxzc3RhYmVsbGluaUBrZXJuZWwu b3JnPjsgVGltIChYZW4ub3JnKSA8dGltQHhlbi5vcmc+OyBXZWkgTGl1Cj4gPHdlaS5saXUyQGNp dHJpeC5jb20+OyBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPjsgUmljaAo+ IFBlcnNhdWQgPHBlcnNhdXJAZ21haWwuY29tPjsgUm9zcyBQaGlsaXBzb24gPHJvc3MucGhpbGlw c29uQGdtYWlsLmNvbT47Cj4gRXJpYyBDaGFudWRldCA8ZXJpYy5jaGFudWRldEBnbWFpbC5jb20+ OyBKYW1lcyBNY0tlbnppZQo+IDx2b3JlZWtmQG1hZGluZ2xleS5vcmc+OyBKYXNvbiBBbmRyeXVr IDxqYW5kcnl1a0BnbWFpbC5jb20+OyBEYW5pZWwgU21pdGgKPiA8ZHBzbWl0aEBhcGVydHVzc29s dXRpb25zLmNvbT4KPiBTdWJqZWN0OiBbUEFUQ0ggMTUvMjVdIGFyZ286IGltcGxlbWVudCB0aGUg c2VuZHYgb3AKPiAKPiBzZW5kdiBvcGVyYXRpb24gaXMgaW52b2tlZCB0byBwZXJmb3JtIGEgc3lu Y2hyb25vdXMgc2VuZCBvZiBidWZmZXJzCj4gY29udGFpbmVkIGluIGlvdnMgdG8gYSByZW1vdGUg ZG9tYWluJ3MgcmVnaXN0ZXJlZCByaW5nLgo+IAo+IEl0IHRha2VzOgo+ICAqIEEgZGVzdGluYXRp b24gYWRkcmVzcyAoZG9taWQsIHBvcnQpIGZvciB0aGUgcmluZyB0byBzZW5kIHRvLgo+ICAgIEl0 IHBlcmZvcm1zIGEgbW9zdC1zcGVjaWZpYyBtYXRjaCBsb29rdXAsIHRvIGFsbG93IGZvciB3aWxk Y2FyZC4KPiAgKiBBIHNvdXJjZSBhZGRyZXNzLCB1c2VkIHRvIGluZm9ybSB0aGUgZGVzdGluYXRp b24gb2Ygd2hlcmUgdG8gcmVwbHkuCj4gICogVGhlIGFkZHJlc3Mgb2YgYW4gYXJyYXkgb2YgaW92 cyBjb250YWluaW5nIHRoZSBkYXRhIHRvIHNlbmQKPiAgKiAuLiBhbmQgdGhlIGxlbmd0aCBvZiB0 aGF0IGFycmF5IG9mIGlvdnMKPiAgKiBhbmQgYSAzMi1iaXQgbWVzc2FnZSB0eXBlLCBhdmFpbGFi bGUgdG8gY29tbXVuaWNhdGUgbWVzc2FnZSBjb250ZXh0Cj4gICAgZGF0YSAoZWcuIGtlcm5lbC10 by1rZXJuZWwsIHNlcGFyYXRlIGZyb20gdGhlIGFwcGxpY2F0aW9uIGRhdGEpLgo+IAo+IElmIGlu c3VmZmljaWVudCBzcGFjZSBleGlzdHMgaW4gdGhlIGRlc3RpbmF0aW9uIHJpbmcsIGl0IHdpbGwg cmV0dXJuIC0KPiBFQUdBSU4KPiBhbmQgWGVuIHdpbGwgbm90aWZ5IHRoZSBjYWxsZXIgd2hlbiBz dWZmaWNpZW50IHNwYWNlIGJlY29tZXMgYXZhaWxhYmxlLgo+IAo+IEFjY2Vzc2VzIHRvIHRoZSBy aW5nIGluZGljZXMgYXJlIGFwcHJvcHJpYXRlbHkgYXRvbWljLiBUaGUgcmluZ3MgYXJlCj4gbWFw cGVkIGludG8gWGVuJ3MgcHJpdmF0ZSBhZGRyZXNzIHNwYWNlIHRvIHdyaXRlIGFzIG5lZWRlZCBh bmQgdGhlCj4gbWFwcGluZ3MgYXJlIHJldGFpbmVkIGZvciBsYXRlciB1c2UuCj4gCj4gV2hlbiBs b2NhdGluZyB0aGUgZGVzdGluYXRpb24gcmluZywgYSBjaGVjayBpcyBwZXJmb3JtZWQgdmlhIGEg Y29va2llCj4gaW5zdGFsbGVkIGF0IHJpbmcgcmVnaXN0cmF0aW9uIHRpbWUsIHRvIGVuc3VyZSB0 aGF0IHRoZSBzb3VyY2UgZG9tYWluCj4gaXMgdGhlIHNhbWUgYXMgaXQgd2FzIHdoZW4gdGhlIHJp bmcgd2FzIHJlZ2lzdGVyZWQuCj4gCj4gRml4ZWQtc2l6ZSB0eXBlcyBhcmUgdXNlZCBpbiBzb21l IGFyZWFzIHdpdGhpbiB0aGlzIGNvZGUgd2hlcmUgY2F1dGlvbgo+IGFyb3VuZCBhdm9pZGluZyBp bnRlZ2VyIG92ZXJmbG93IGlzIGltcG9ydGFudC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3Rv cGhlciBDbGFyayA8Y2hyaXN0b3BoZXIuY2xhcms2QGJhZXN5c3RlbXMuY29tPgo+IC0tLQo+ICB4 ZW4vY29tbW9uL2FyZ28uYyAgICAgICAgIHwgNTI4Cj4gKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICB4ZW4vaW5jbHVkZS9wdWJsaWMvYXJnby5oIHwgIDU5 ICsrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDU4NyBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAt LWdpdCBhL3hlbi9jb21tb24vYXJnby5jIGIveGVuL2NvbW1vbi9hcmdvLmMKPiBpbmRleCAzODdl NjUwLi4wYzM5NzJjIDEwMDY0NAo+IC0tLSBhL3hlbi9jb21tb24vYXJnby5jCj4gKysrIGIveGVu L2NvbW1vbi9hcmdvLmMKPiBAQCAtMjQsMTAgKzI0LDEzIEBACj4gICNpbmNsdWRlIDx4ZW4vZG9t YWluX3BhZ2UuaD4KPiAgI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KPiAgI2luY2x1ZGUg PHhlbi90aW1lLmg+Cj4gKyNpbmNsdWRlIDx4c20veHNtLmg+Cj4gCj4gIERFRklORV9YRU5fR1VF U1RfSEFORExFKGFyZ29fcGZuX3QpOwo+ICBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRShhcmdvX2Fk ZHJfdCk7Cj4gK0RFRklORV9YRU5fR1VFU1RfSEFORExFKGFyZ29fc2VuZF9hZGRyX3QpOwo+ICBE RUZJTkVfWEVOX0dVRVNUX0hBTkRMRShhcmdvX3JpbmdfdCk7Cj4gK0RFRklORV9YRU5fR1VFU1Rf SEFORExFKHVpbnQ4X3QpOwo+IAo+ICAvKiBYZW4gY29tbWFuZCBsaW5lIG9wdGlvbiB0byBlbmFi bGUgYXJnbyAqLwo+ICBzdGF0aWMgYm9vbCBfX3JlYWRfbW9zdGx5IG9wdF9hcmdvX2VuYWJsZWQg PSAwOwo+IEBAIC0xNjYsNiArMTY5LDIxIEBAIHN0YXRpYyBERUZJTkVfUldMT0NLKGFyZ29fbG9j ayk7IC8qIEwxICovCj4gICNlbmRpZgo+IAo+ICAvKgo+ICsgKiBFdmVudCBjaGFubmVsCj4gKyAq Lwo+ICsKPiArc3RhdGljIHZvaWQKPiArYXJnb19zaWduYWxfZG9tYWluKHN0cnVjdCBkb21haW4g KmQpCj4gK3sKPiArICAgIGFyZ29fZHByaW50aygic2lnbmFsbGluZyBkb21pZDolZFxuIiwgZC0+ ZG9tYWluX2lkKTsKPiArCj4gKyAgICBpZiAoICFkLT5hcmdvICkgLyogVGhpcyBjYW4gaGFwcGVu IGlmIHRoZSBkb21haW4gaXMgYmVpbmcgZGVzdHJveWVkCj4gKi8KPiArICAgICAgICByZXR1cm47 Cj4gKwo+ICsgICAgZXZ0Y2huX3NlbmQoZCwgZC0+YXJnby0+ZXZ0Y2huX3BvcnQpOwo+ICt9Cj4g Kwo+ICsvKgo+ICAgKiByaW5nIGJ1ZmZlcgo+ICAgKi8KPiAKPiBAQCAtMjU5LDYgKzI3NywzMzMg QEAgYXJnb191cGRhdGVfdHhfcHRyKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvLAo+ IHVpbnQzMl90IHR4X3B0cikKPiAgICAgIHJldHVybiAwOwo+ICB9Cj4gCj4gK3N0YXRpYyBpbnQK PiArYXJnb19tZW1jcHlfdG9fZ3Vlc3RfcmluZyhzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdf aW5mbywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqc3JjLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEUodWludDhfdCkgc3JjX2huZCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW4pCj4gK3sKPiArICAgIGludCBwYWdlID0g b2Zmc2V0ID4+IFBBR0VfU0hJRlQ7Cgp1bnNpZ25lZD8KCj4gKyAgICB1aW50OF90ICpkc3Q7Cj4g KyAgICBpbnQgcmV0Owo+ICsgICAgdW5zaWduZWQgaW50IHNyY19vZmZzZXQgPSAwOwo+ICsKPiAr ICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcmluZ19pbmZvLT5sb2NrKSk7Cj4gKwo+ICsgICAg b2Zmc2V0ICY9IH5QQUdFX01BU0s7Cj4gKwo+ICsgICAgaWYgKCAobGVuID4gQVJHT19NQVhfUklO R19TSVpFKSB8fCAob2Zmc2V0ID4gQVJHT19NQVhfUklOR19TSVpFKSApCj4gKyAgICAgICAgcmV0 dXJuIC1FRkFVTFQ7Cj4gKwo+ICsgICAgd2hpbGUgKCAob2Zmc2V0ICsgbGVuKSA+IFBBR0VfU0la RSApCj4gKyAgICB7Cj4gKyAgICAgICAgcmV0ID0gYXJnb19yaW5nX21hcF9wYWdlKHJpbmdfaW5m bywgcGFnZSwgJmRzdCk7Cj4gKyAgICAgICAgaWYgKCByZXQgKQo+ICsgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ICsKPiArICAgICAgICBpZiAoIHNyYyApCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgICBtZW1jcHkoZHN0ICsgb2Zmc2V0LCBzcmMgKyBzcmNfb2Zmc2V0LCBQQUdFX1NJWkUgLSBv ZmZzZXQpOwo+ICsgICAgICAgICAgICBzcmNfb2Zmc2V0ICs9IChQQUdFX1NJWkUgLSBvZmZzZXQp Owo+ICsgICAgICAgIH0KPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgewo+ICsgICAgICAgICAg ICByZXQgPSBjb3B5X2Zyb21fZ3Vlc3RfZXJybm8oZHN0ICsgb2Zmc2V0LCBzcmNfaG5kLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9TSVpFIC0gb2Zmc2V0 KTsKPiArICAgICAgICAgICAgaWYgKCByZXQgKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiArCj4gKyAgICAgICAgICAgIGd1ZXN0X2hhbmRsZV9hZGRfb2Zmc2V0KHNyY19obmQsIFBB R0VfU0laRSAtIG9mZnNldCk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBwYWdlKys7Cj4g KyAgICAgICAgbGVuIC09IFBBR0VfU0laRSAtIG9mZnNldDsKCkEgbG90IG9mICJQQUdFX1NJWkUg LSBvZmZzZXQiIGhlcmUuLi4gbWF5YmUgd29ydGggYSBsb2NhbCB2YXJpYWJsZT8KCj4gKyAgICAg ICAgb2Zmc2V0ID0gMDsKPiArICAgIH0KPiArCj4gKyAgICByZXQgPSBhcmdvX3JpbmdfbWFwX3Bh Z2UocmluZ19pbmZvLCBwYWdlLCAmZHN0KTsKPiArICAgIGlmICggcmV0ICkKPiArICAgIHsKPiAr ICAgICAgICBhcmdvX2RwcmludGsoImFyZ286IHJpbmcgKHZtJXU6JXggdm0lZCkgJXAgYXR0ZW1w dGVkIHRvIG1hcCBwYWdlIgo+ICsgICAgICAgICAgICAgICAiICVkIG9mICVkXG4iLCByaW5nX2lu Zm8tPmlkLmFkZHIuZG9tYWluX2lkLAo+ICsgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLmFk ZHIucG9ydCwgcmluZ19pbmZvLT5pZC5wYXJ0bmVyLCByaW5nX2luZm8sCj4gKyAgICAgICAgICAg ICAgIHBhZ2UsIHJpbmdfaW5mby0+bm1mbnMpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgaWYgKCBzcmMgKQo+ICsgICAgICAgIG1lbWNweShkc3QgKyBvZmZzZXQs IHNyYyArIHNyY19vZmZzZXQsIGxlbik7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcmV0ID0gY29w eV9mcm9tX2d1ZXN0X2Vycm5vKGRzdCArIG9mZnNldCwgc3JjX2huZCwgbGVuKTsKPiArCj4gKyAg ICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2FyZ29fcmluZ2J1Zl9nZXRf cnhfcHRyKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvLCB1aW50MzJfdAo+ICpyeF9w dHIpCj4gK3sKPiArICAgIHVpbnQ4X3QgKnNyYzsKPiArICAgIGFyZ29fcmluZ190ICpyaW5ncDsK PiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZyaW5nX2lu Zm8tPmxvY2spKTsKPiArCj4gKyAgICBpZiAoICFyaW5nX2luZm8tPm5tZm5zIHx8IHJpbmdfaW5m by0+bm1mbnMgPCByaW5nX2luZm8tPm5wYWdlICkKPiArICAgICAgICByZXR1cm4gLUVJTlZBTDsK PiArCj4gKyAgICByZXQgPSBhcmdvX3JpbmdfbWFwX3BhZ2UocmluZ19pbmZvLCAwLCAmc3JjKTsK PiArICAgIGlmICggcmV0ICkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHJpbmdw ID0gKGFyZ29fcmluZ190ICopc3JjOwo+ICsKPiArICAgICpyeF9wdHIgPSByZWFkX2F0b21pYygm cmluZ3AtPnJ4X3B0cik7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qCj4gKyAq IGFyZ29fc2FuaXRpemVfcmluZyBjcmVhdGVzIGEgbW9kaWZpZWQgY29weSBvZiB0aGUgcmluZyBw b2ludGVycwo+ICsgKiB3aGVyZSB0aGUgcnhfcHRyIGlzIHJvdW5kZWQgdXAgdG8gZW5zdXJlIGl0 IGlzIGFsaWduZWQsIGFuZCB0aGVuCj4gKyAqIHJpbmcgd3JhcCBpcyBoYW5kbGVkLiBTaW1wbGlm aWVzIHNhZmUgdXNlIG9mIHRoZSByeF9wdHIgZm9yCj4gKyAqIGF2YWlsYWJsZSBzcGFjZSBjYWxj dWxhdGlvbi4KPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK2FyZ29fc2FuaXRpemVfcmluZyhhcmdv X3JpbmdfdCAqcmluZywgY29uc3Qgc3RydWN0IGFyZ29fcmluZ19pbmZvCj4gKnJpbmdfaW5mbykK PiArewo+ICsgICAgdWludDMyX3QgcnhfcHRyID0gcmluZy0+cnhfcHRyOwo+ICsKPiArICAgIHJp bmctPnR4X3B0ciA9IHJpbmdfaW5mby0+dHhfcHRyOwo+ICsgICAgcmluZy0+bGVuID0gcmluZ19p bmZvLT5sZW47Cj4gKwo+ICsgICAgcnhfcHRyID0gQVJHT19ST1VORFVQKHJ4X3B0cik7Cj4gKyAg ICBpZiAoIHJ4X3B0ciA+PSByaW5nX2luZm8tPmxlbiApCj4gKyAgICAgICAgcnhfcHRyID0gMDsK PiArCj4gKyAgICByaW5nLT5yeF9wdHIgPSByeF9wdHI7Cj4gK30KPiArCj4gKy8qCj4gKyAqIGFy Z29faW92X2NvdW50IHJldHVybnMgaXRzIGNvdW50IG9uIHN1Y2Nlc3MgdmlhIGFuIG91dCB2YXJp YWJsZQo+ICsgKiB0byBhdm9pZCBwb3RlbnRpYWwgZm9yIGEgbmVnYXRpdmUgcmV0dXJuIHZhbHVl IHRvIGJlIHVzZWQgaW5jb3JyZWN0bHkKPiArICogKGVnLiBjb2VyY2VkIGludG8gYW4gdW5zaWdu ZWQgdmFyaWFibGUgcmVzdWx0aW5nIGluIGEgbGFyZ2UgaW5jb3JyZWN0Cj4gdmFsdWUpCj4gKyAq Lwo+ICtzdGF0aWMgaW50Cj4gK2FyZ29faW92X2NvdW50KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0o YXJnb19pb3ZfdCkgaW92cywgdWludDhfdCBuaW92LAo+ICsgICAgICAgICAgICAgICB1aW50MzJf dCAqY291bnQpCj4gK3sKPiArICAgIGFyZ29faW92X3QgaW92Owo+ICsgICAgdWludDMyX3Qgc3Vt X2lvdl9sZW5zID0gMDsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgaWYgKCBuaW92ID4gQVJH T19NQVhJT1YgKQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAgIHdoaWxlICgg bmlvdi0tICkKPiArICAgIHsKPiArICAgICAgICByZXQgPSBjb3B5X2Zyb21fZ3Vlc3RfZXJybm8o JmlvdiwgaW92cywgMSk7Cj4gKyAgICAgICAgaWYgKCByZXQgKQo+ICsgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ICsKPiArICAgICAgICAvKiBjaGVjayBlYWNoIHRvIHByb3RlY3Qgc3VtIGFnYWlu c3QgaW50ZWdlciBvdmVyZmxvdyAqLwo+ICsgICAgICAgIGlmICggaW92Lmlvdl9sZW4gPiBBUkdP X01BWF9SSU5HX1NJWkUgKQo+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAg ICAgICAgc3VtX2lvdl9sZW5zICs9IGlvdi5pb3ZfbGVuOwo+ICsKPiArICAgICAgICAvKgo+ICsg ICAgICAgICAqIEFnYWluIHByb3RlY3Qgc3VtIGZyb20gaW50ZWdlciBvdmVyZmxvdwo+ICsgICAg ICAgICAqIGFuZCBlbnN1cmUgdG90YWwgbXNnIHNpemUgd2lsbCBiZSB3aXRoaW4gYm91bmRzLgo+ ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmICggc3VtX2lvdl9sZW5zID4gQVJHT19NQVhfTVNH X1NJWkUgKQo+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICAgICAgZ3Vl c3RfaGFuZGxlX2FkZF9vZmZzZXQoaW92cywgMSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgKmNvdW50 ID0gc3VtX2lvdl9sZW5zOwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQK PiArYXJnb19yaW5nYnVmX2luc2VydChzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvLAo+ICsgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0cnVjdCBhcmdvX3JpbmdfaWQgKnNyY19pZCwKPiArICAgICAgICAgICAg ICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKGFyZ29faW92X3QpIGlvdnMsIHVpbnQ4X3QK PiBuaW92LAo+ICsgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1lc3NhZ2VfdHlwZSwgdW5z aWduZWQgbG9uZyAqb3V0X2xlbikKPiArewo+ICsgICAgYXJnb19yaW5nX3QgcmluZzsKPiArICAg IHN0cnVjdCBhcmdvX3JpbmdfbWVzc2FnZV9oZWFkZXIgbWggPSB7IDAgfTsKPiArICAgIGludDMy X3Qgc3A7Cj4gKyAgICBpbnQzMl90IHJldCA9IDA7Cj4gKyAgICB1aW50MzJfdCBsZW47Cj4gKyAg ICB1aW50MzJfdCBpb3ZfbGVuOwo+ICsgICAgdWludDMyX3Qgc3VtX2lvdl9sZW4gPSAwOwo+ICsK PiArICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmcmluZ19pbmZvLT5sb2NrKSk7Cj4gKwo+ICsg ICAgaWYgKCAocmV0ID0gYXJnb19pb3ZfY291bnQoaW92cywgbmlvdiwgJmxlbikpICkKPiArICAg ICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIGlmICggKChBUkdPX1JPVU5EVVAobGVuKSArIHNp emVvZiAoc3RydWN0IGFyZ29fcmluZ19tZXNzYWdlX2hlYWRlcikgKQo+ID49Cj4gKyAgICAgICAg ICByaW5nX2luZm8tPmxlbikKPiArICAgICAgICAgfHwgKGxlbiA+IEFSR09fTUFYX01TR19TSVpF KSApCj4gKyAgICAgICAgcmV0dXJuIC1FTVNHU0laRTsKPiArCj4gKyAgICBkbyB7Cj4gKyAgICAg ICAgcmV0ID0gIGFyZ29fcmluZ2J1Zl9nZXRfcnhfcHRyKHJpbmdfaW5mbywgJnJpbmcucnhfcHRy KTsKPiArICAgICAgICBpZiAoIHJldCApCj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsKPiArICAg ICAgICBhcmdvX3Nhbml0aXplX3JpbmcoJnJpbmcsIHJpbmdfaW5mbyk7Cj4gKwo+ICsgICAgICAg IGFyZ29fZHByaW50aygicmluZy50eF9wdHI9JWQgcmluZy5yeF9wdHI9JWQgcmluZy5sZW49JWQi Cj4gKyAgICAgICAgICAgICAgICAgICAgICIgcmluZ19pbmZvLT50eF9wdHI9JWRcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICAgIHJpbmcudHhfcHRyLCByaW5nLnJ4X3B0ciwgcmluZy5sZW4sIHJp bmdfaW5mby0KPiA+dHhfcHRyKTsKPiArCj4gKyAgICAgICAgaWYgKCByaW5nLnJ4X3B0ciA9PSBy aW5nLnR4X3B0ciApCj4gKyAgICAgICAgICAgIHNwID0gcmluZ19pbmZvLT5sZW47Cj4gKyAgICAg ICAgZWxzZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgc3AgPSByaW5nLnJ4X3B0ciAtIHJp bmcudHhfcHRyOwo+ICsgICAgICAgICAgICBpZiAoIHNwIDwgMCApCj4gKyAgICAgICAgICAgICAg ICBzcCArPSByaW5nLmxlbjsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICggKEFSR09f Uk9VTkRVUChsZW4pICsgc2l6ZW9mKHN0cnVjdAo+IGFyZ29fcmluZ19tZXNzYWdlX2hlYWRlcikp ID49IHNwICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGFyZ29fZHByaW50aygiRUFHQUlO XG4iKTsKPiArICAgICAgICAgICAgcmV0ID0gLUVBR0FJTjsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBtaC5sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0 IGFyZ29fcmluZ19tZXNzYWdlX2hlYWRlcik7Cj4gKyAgICAgICAgbWguc291cmNlLnBvcnQgPSBz cmNfaWQtPmFkZHIucG9ydDsKPiArICAgICAgICBtaC5zb3VyY2UuZG9tYWluX2lkID0gc3JjX2lk LT5hZGRyLmRvbWFpbl9pZDsKPiArICAgICAgICBtaC5tZXNzYWdlX3R5cGUgPSBtZXNzYWdlX3R5 cGU7Cj4gKwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogRm9yIHRoaXMgY29weSB0byB0aGUg Z3Vlc3QgcmluZywgdHhfcHRyIGlzIGFsd2F5cyAxNi1ieXRlCj4gYWxpZ25lZAo+ICsgICAgICAg ICAqIGFuZCB0aGUgbWVzc2FnZSBoZWFkZXIgaXMgMTYgYnl0ZXMgbG9uZy4KPiArICAgICAgICAg Ki8KPiArICAgICAgICBCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhcmdvX3JpbmdfbWVzc2Fn ZV9oZWFkZXIpICE9Cj4gQVJHT19ST1VORFVQKDEpKTsKPiArCj4gKyAgICAgICAgaWYgKCAocmV0 ID0gYXJnb19tZW1jcHlfdG9fZ3Vlc3RfcmluZyhyaW5nX2luZm8sCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW5nLnR4X3B0ciArCj4gc2l6ZW9mKGFy Z29fcmluZ190KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZtaCwKPiArCj4gWEVOX0dVRVNUX0hBTkRMRV9OVUxMKHVpbnQ4X3QpLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1oKSkpICkKPiAr ICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIHJpbmcudHhfcHRyICs9IHNpemVvZiht aCk7Cj4gKyAgICAgICAgaWYgKCByaW5nLnR4X3B0ciA9PSByaW5nX2luZm8tPmxlbiApCj4gKyAg ICAgICAgICAgIHJpbmcudHhfcHRyID0gMDsKPiArCj4gKyAgICAgICAgd2hpbGUgKCBuaW92LS0g KQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh1aW50 OF90KSBidWZwX2huZDsKPiArICAgICAgICAgICAgWEVOX0dVRVNUX0hBTkRMRSh1aW50OF90KSBi dWZfaG5kOwo+ICsgICAgICAgICAgICBhcmdvX2lvdl90IGlvdjsKPiArCj4gKyAgICAgICAgICAg IHJldCA9IGNvcHlfZnJvbV9ndWVzdF9lcnJubygmaW92LCBpb3ZzLCAxKTsKPiArICAgICAgICAg ICAgaWYgKCByZXQgKQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgICAg ICBidWZwX2huZCA9IGd1ZXN0X2hhbmRsZV9mcm9tX3B0cigodWludHB0cl90KWlvdi5pb3ZfYmFz ZSwKPiB1aW50OF90KTsKPiArICAgICAgICAgICAgYnVmX2huZCA9IGd1ZXN0X2hhbmRsZV9mcm9t X3BhcmFtKGJ1ZnBfaG5kLCB1aW50OF90KTsKPiArICAgICAgICAgICAgaW92X2xlbiA9IGlvdi5p b3ZfbGVuOwo+ICsKPiArICAgICAgICAgICAgaWYgKCAhaW92X2xlbiApCj4gKyAgICAgICAgICAg IHsKPiArICAgICAgICAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJhcmdvOiBpb3YuaW92X2xl bj0wIGlvdi5pb3ZfYmFzZT0lIgo+ICsgICAgICAgICAgICAgICAgICAgICAgIFBSSXg2NCIgcmlu ZyAodm0ldToleCB2bSVkKVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICBpb3YuaW92X2Jh c2UsIHJpbmdfaW5mby0+aWQuYWRkci5kb21haW5faWQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcmluZ19pbmZvLT5pZC5hZGRyLnBvcnQsIHJpbmdfaW5mby0+aWQucGFydG5lcik7Cj4gKwo+ ICsgICAgICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQoaW92cywgMSk7Cj4gKyAg ICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAg ICAgaWYgKCBpb3ZfbGVuID4gQVJHT19NQVhfTVNHX1NJWkUgKQo+ICsgICAgICAgICAgICB7Cj4g KyAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIHN1bV9pb3ZfbGVuICs9IGlvdl9s ZW47Cj4gKyAgICAgICAgICAgIGlmICggc3VtX2lvdl9sZW4gPiBsZW4gKQo+ICsgICAgICAgICAg ICB7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+ICsgICAgICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIGlmICggdW5saWtlbHko IWd1ZXN0X2hhbmRsZV9va2F5KGJ1Zl9obmQsIGlvdl9sZW4pKSApCj4gKyAgICAgICAgICAgIHsK PiArICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7Cj4gKyAgICAgICAgICAgICAgICBicmVh azsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgc3AgPSByaW5nLmxlbiAtIHJp bmcudHhfcHRyOwo+ICsKPiArICAgICAgICAgICAgaWYgKCBpb3ZfbGVuID4gc3AgKQo+ICsgICAg ICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSBhcmdvX21lbWNweV90b19ndWVzdF9y aW5nKHJpbmdfaW5mbywKPiArICAgICAgICAgICAgICAgICAgICAgICAgcmluZy50eF9wdHIgKyBz aXplb2YoYXJnb19yaW5nX3QpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBidWZf aG5kLCBzcCk7Cj4gKyAgICAgICAgICAgICAgICBpZiAoIHJldCApCj4gKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcmluZy50eF9wdHIgPSAwOwo+ICsg ICAgICAgICAgICAgICAgaW92X2xlbiAtPSBzcDsKPiArICAgICAgICAgICAgICAgIGd1ZXN0X2hh bmRsZV9hZGRfb2Zmc2V0KGJ1Zl9obmQsIHNwKTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAg ICAgICAgICAgcmV0ID0gYXJnb19tZW1jcHlfdG9fZ3Vlc3RfcmluZyhyaW5nX2luZm8sCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIHJpbmcudHhfcHRyICsgc2l6ZW9mKGFyZ29fcmluZ190KSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYnVmX2huZCwgaW92X2xlbik7Cj4gKyAg ICAgICAgICAgIGlmICggcmV0ICkKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsKPiArICAg ICAgICAgICAgcmluZy50eF9wdHIgKz0gaW92X2xlbjsKPiArCj4gKyAgICAgICAgICAgIGlmICgg cmluZy50eF9wdHIgPT0gcmluZ19pbmZvLT5sZW4gKQo+ICsgICAgICAgICAgICAgICAgcmluZy50 eF9wdHIgPSAwOwo+ICsKPiArICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQoaW92 cywgMSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoIHJldCApCj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsKPiArICAgICAgICByaW5nLnR4X3B0ciA9IEFSR09fUk9VTkRVUChyaW5n LnR4X3B0cik7Cj4gKwo+ICsgICAgICAgIGlmICggcmluZy50eF9wdHIgPj0gcmluZ19pbmZvLT5s ZW4gKQo+ICsgICAgICAgICAgICByaW5nLnR4X3B0ciAtPSByaW5nX2luZm8tPmxlbjsKPiArCj4g KyAgICAgICAgbWIoKTsKPiArICAgICAgICByaW5nX2luZm8tPnR4X3B0ciA9IHJpbmcudHhfcHRy Owo+ICsgICAgICAgIGlmICggKHJldCA9IGFyZ29fdXBkYXRlX3R4X3B0cihyaW5nX2luZm8sIHJp bmcudHhfcHRyKSkgKQo+ICsgICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICB9IHdoaWxlICgg MCApOwo+ICsKCkFnYWluLiBPZGQgZG8td2hpbGUtemVybyBzdHlsZS4uLiBJIHdvbid0IG1lbnRp b24gdGhpcyBhZ2Fpbi4KCiAgUGF1bAoKPiArICAgIC8qCj4gKyAgICAgKiBBdCB0aGlzIHBvaW50 IGl0IGlzIHBvc3NpYmxlIHRvIHVubWFwIHRoZSByaW5nX2luZm8sIGllOgo+ICsgICAgICogICBh cmdvX3JpbmdfdW5tYXAocmluZ19pbmZvKTsKPiArICAgICAqIGJ1dCBwZXJmb3JtYW5jZSBzaG91 bGQgYmUgaW1wcm92ZWQgYnkgbm90IGRvaW5nIHNvLCBhbmQgcmV0YWluaW5nCj4gKyAgICAgKiB0 aGUgbWFwcGluZy4KPiArICAgICAqIEFuIFhTTSBwb2xpY3kgY29udHJvbCBvdmVyIGxldmVsIG9m IGNvbmZpZGVudGlhbGl0eSByZXF1aXJlZAo+ICsgICAgICogdmVyc3VzIHBlcmZvcm1hbmNlIGNv c3QgY291bGQgYmUgYWRkZWQgdG8gZGVjaWRlIHRoYXQgaGVyZS4KPiArICAgICAqIFNlZSB0aGUg c2ltaWxhciBjb21tZW50IGluIGFyZ29fcmluZ19tYXBfcGFnZSByZTogd3JpdGUtb25seQo+IG1h cHBpbmdzLgo+ICsgICAgICovCj4gKwo+ICsgICAgaWYgKCAhcmV0ICkKPiArICAgICAgICAqb3V0 X2xlbiA9IGxlbjsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICAvKgo+ICAgKiBw ZW5kaW5nCj4gICAqLwo+IEBAIC0yODIsNiArNjI3LDQ3IEBAIGFyZ29fcGVuZGluZ19yZW1vdmVf YWxsKHN0cnVjdCBhcmdvX3JpbmdfaW5mbwo+ICpyaW5nX2luZm8pCj4gICAgICB9Cj4gIH0KPiAK PiArc3RhdGljIGludAo+ICthcmdvX3BlbmRpbmdfcXVldWUoc3RydWN0IGFyZ29fcmluZ19pbmZv ICpyaW5nX2luZm8sIGRvbWlkX3Qgc3JjX2lkLCBpbnQKPiBsZW4pCj4gK3sKPiArICAgIHN0cnVj dCBhcmdvX3BlbmRpbmdfZW50ICplbnQ7Cj4gKwo+ICsgICAgQVNTRVJUKHNwaW5faXNfbG9ja2Vk KCZyaW5nX2luZm8tPmxvY2spKTsKPiArCj4gKyAgICBlbnQgPSB4bWFsbG9jKHN0cnVjdCBhcmdv X3BlbmRpbmdfZW50KTsKPiArCj4gKyAgICBpZiAoICFlbnQgKQo+ICsgICAgICAgIHJldHVybiAt RU5PTUVNOwo+ICsKPiArICAgIGVudC0+bGVuID0gbGVuOwo+ICsgICAgZW50LT5pZCA9IHNyY19p ZDsKPiArCj4gKyAgICBobGlzdF9hZGRfaGVhZCgmZW50LT5ub2RlLCAmcmluZ19pbmZvLT5wZW5k aW5nKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICthcmdv X3BlbmRpbmdfcmVxdWV1ZShzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbywgZG9taWRf dCBzcmNfaWQsCj4gaW50IGxlbikKPiArewo+ICsgICAgc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7 Cj4gKyAgICBzdHJ1Y3QgYXJnb19wZW5kaW5nX2VudCAqZW50Owo+ICsKPiArICAgIEFTU0VSVChz cGluX2lzX2xvY2tlZCgmcmluZ19pbmZvLT5sb2NrKSk7Cj4gKwo+ICsgICAgaGxpc3RfZm9yX2Vh Y2hfZW50cnkoZW50LCBub2RlLCAmcmluZ19pbmZvLT5wZW5kaW5nLCBub2RlKQo+ICsgICAgewo+ ICsgICAgICAgIGlmICggZW50LT5pZCA9PSBzcmNfaWQgKQo+ICsgICAgICAgIHsKPiArICAgICAg ICAgICAgaWYgKCBlbnQtPmxlbiA8IGxlbiApCj4gKyAgICAgICAgICAgICAgICBlbnQtPmxlbiA9 IGxlbjsKPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsK PiArICAgIHJldHVybiBhcmdvX3BlbmRpbmdfcXVldWUocmluZ19pbmZvLCBzcmNfaWQsIGxlbik7 Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkIGFyZ29fcmluZ19yZW1vdmVfbWZucyhjb25zdCBzdHJ1 Y3QgZG9tYWluICpkLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8pCj4gIHsKPiBAQCAtNTA5LDYgKzg5NSwyOCBAQCBh cmdvX3JpbmdfZmluZF9pbmZvKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsIGNvbnN0Cj4gc3RydWN0 IGFyZ29fcmluZ19pZCAqaWQpCj4gICAgICByZXR1cm4gTlVMTDsKPiAgfQo+IAo+ICtzdGF0aWMg c3RydWN0IGFyZ29fcmluZ19pbmZvICoKPiArYXJnb19yaW5nX2ZpbmRfaW5mb19ieV9tYXRjaChj b25zdCBzdHJ1Y3QgZG9tYWluICpkLCB1aW50MzJfdCBwb3J0LAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRvbWlkX3QgcGFydG5lcl9pZCwgdWludDY0X3QgcGFydG5lcl9jb29raWUp Cj4gK3sKPiArICAgIGFyZ29fcmluZ19pZF90IGlkOwo+ICsgICAgc3RydWN0IGFyZ29fcmluZ19p bmZvICpyaW5nX2luZm87Cj4gKwo+ICsgICAgQVNTRVJUKHJ3X2lzX2xvY2tlZCgmZC0+YXJnby0+ bG9jaykpOwo+ICsKPiArICAgIGlkLmFkZHIucG9ydCA9IHBvcnQ7Cj4gKyAgICBpZC5hZGRyLmRv bWFpbl9pZCA9IGQtPmRvbWFpbl9pZDsKPiArICAgIGlkLnBhcnRuZXIgPSBwYXJ0bmVyX2lkOwo+ ICsKPiArICAgIHJpbmdfaW5mbyA9IGFyZ29fcmluZ19maW5kX2luZm8oZCwgJmlkKTsKPiArICAg IGlmICggcmluZ19pbmZvICYmIChwYXJ0bmVyX2Nvb2tpZSA9PSByaW5nX2luZm8tPnBhcnRuZXJf Y29va2llKSApCj4gKyAgICAgICAgcmV0dXJuIHJpbmdfaW5mbzsKPiArCj4gKyAgICBpZC5wYXJ0 bmVyID0gQVJHT19ET01JRF9BTlk7Cj4gKwo+ICsgICAgcmV0dXJuIGFyZ29fcmluZ19maW5kX2lu Zm8oZCwgJmlkKTsKPiArfQo+ICsKPiAgc3RhdGljIGxvbmcKPiAgYXJnb191bnJlZ2lzdGVyX3Jp bmcoc3RydWN0IGRvbWFpbiAqZCwKPiAgICAgICAgICAgICAgICAgICAgICAgWEVOX0dVRVNUX0hB TkRMRV9QQVJBTShhcmdvX3JpbmdfdCkgcmluZ19obmQpCj4gQEAgLTc1NCw2ICsxMTYyLDEwMyBA QCBhcmdvX3JlZ2lzdGVyX3Jpbmcoc3RydWN0IGRvbWFpbiAqZCwKPiAgICAgIHJldHVybiByZXQ7 Cj4gIH0KPiAKPiArLyoKPiArICogaW8KPiArICovCj4gKwo+ICtzdGF0aWMgbG9uZwo+ICthcmdv X3NlbmR2KHN0cnVjdCBkb21haW4gKnNyY19kLCBjb25zdCBhcmdvX2FkZHJfdCAqc3JjX2FkZHIs Cj4gKyAgICAgICAgICAgY29uc3QgYXJnb19hZGRyX3QgKmRzdF9hZGRyLAo+ICsgICAgICAgICAg IFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oYXJnb19pb3ZfdCkgaW92cywgdWludDMyX3QgbmlvdiwK PiArICAgICAgICAgICB1aW50MzJfdCBtZXNzYWdlX3R5cGUpCj4gK3sKPiArICAgIHN0cnVjdCBk b21haW4gKmRzdF9kID0gTlVMTDsKPiArICAgIHN0cnVjdCBhcmdvX3JpbmdfaWQgc3JjX2lkOwo+ ICsgICAgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm87Cj4gKyAgICBpbnQgcmV0ID0g MDsKPiArICAgIHVuc2lnbmVkIGxvbmcgbGVuID0gMDsKPiArCj4gKyAgICBBU1NFUlQoc3JjX2Qt PmRvbWFpbl9pZCA9PSBzcmNfYWRkci0+ZG9tYWluX2lkKTsKPiArCj4gKyAgICByZWFkX2xvY2so JmFyZ29fbG9jayk7Cj4gKwo+ICsgICAgZG8gewo+ICsgICAgICAgIGlmICggIXNyY19kLT5hcmdv ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHJldCA9IC1FTk9ERVY7Cj4gKyAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgc3JjX2lkLmFkZHIucGFkID0g MDsKPiArICAgICAgICBzcmNfaWQuYWRkci5wb3J0ID0gc3JjX2FkZHItPnBvcnQ7Cj4gKyAgICAg ICAgc3JjX2lkLmFkZHIuZG9tYWluX2lkID0gc3JjX2QtPmRvbWFpbl9pZDsKPiArICAgICAgICBz cmNfaWQucGFydG5lciA9IGRzdF9hZGRyLT5kb21haW5faWQ7Cj4gKwo+ICsgICAgICAgIGRzdF9k ID0gZ2V0X2RvbWFpbl9ieV9pZChkc3RfYWRkci0+ZG9tYWluX2lkKTsKPiArICAgICAgICBpZiAo ICFkc3RfZCB8fCAhZHN0X2QtPmFyZ28gKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgYXJn b19kcHJpbnRrKCIhZHN0X2QsIEVDT05OUkVGVVNFRFxuIik7Cj4gKyAgICAgICAgICAgIHJldCA9 IC1FQ09OTlJFRlVTRUQ7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4g KyAgICAgICAgcmV0ID0geHNtX2FyZ29fc2VuZChzcmNfZCwgZHN0X2QpOwo+ICsgICAgICAgIGlm ICggcmV0ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJh cmdvOiBYU00gUkVKRUNURUQgJWkgLT4gJWlcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBzcmNf YWRkci0+ZG9tYWluX2lkLCBkc3RfYWRkci0+ZG9tYWluX2lkKTsKPiArICAgICAgICAgICAgYnJl YWs7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICByZWFkX2xvY2soJmRzdF9kLT5hcmdvLT5s b2NrKTsKPiArCj4gKyAgICAgICAgZG8gewo+ICsgICAgICAgICAgICByaW5nX2luZm8gPSBhcmdv X3JpbmdfZmluZF9pbmZvX2J5X21hdGNoKGRzdF9kLCBkc3RfYWRkci0KPiA+cG9ydCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hZGRyLT5k b21haW5faWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzcmNfZC0+YXJnby0KPiA+ZG9tYWluX2Nvb2tpZSk7Cj4gKyAgICAgICAgICAgIGlmICgg IXJpbmdfaW5mbyApCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgIHByaW50ayhY RU5MT0dfRVJSICJhcmdvOiB2bSV1IGNvbm5lY3Rpb24gcmVmdXNlZCwgIgo+ICsgICAgICAgICAg ICAgICAgICAgICAgICJzcmMgKHZtJXU6JXgpIGRzdCAodm0ldToleClcbiIsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgY3VycmVudC0+ZG9tYWluLT5kb21haW5faWQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgc3JjX2lkLmFkZHIuZG9tYWluX2lkLCBzcmNfaWQuYWRkci5wb3J0LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGRzdF9hZGRyLT5kb21haW5faWQsIGRzdF9hZGRyLT5wb3J0 KTsKPiArCj4gKyAgICAgICAgICAgICAgICByZXQgPSAtRUNPTk5SRUZVU0VEOwo+ICsgICAgICAg ICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIHNwaW5f bG9jaygmcmluZ19pbmZvLT5sb2NrKTsKPiArCj4gKyAgICAgICAgICAgIHJldCA9IGFyZ29fcmlu Z2J1Zl9pbnNlcnQoZHN0X2QsIHJpbmdfaW5mbywgJnNyY19pZCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpb3ZzLCBuaW92LCBtZXNzYWdlX3R5cGUsICZsZW4pOwo+ ICsgICAgICAgICAgICBpZiAoIHJldCA9PSAtRUFHQUlOICkKPiArICAgICAgICAgICAgewo+ICsg ICAgICAgICAgICAgICAgYXJnb19kcHJpbnRrKCJhcmdvX3JpbmdidWZfc2VuZHYgZmFpbGVkLCBF QUdBSU5cbiIpOwo+ICsgICAgICAgICAgICAgICAgLyogcmVxdWV1ZSB0byBpc3N1ZSBhIG5vdGlm aWNhdGlvbiB3aGVuIHNwYWNlIGlzIHRoZXJlICovCj4gKyAgICAgICAgICAgICAgICBpZiAoIGFy Z29fcGVuZGluZ19yZXF1ZXVlKHJpbmdfaW5mbywgc3JjX2FkZHItPmRvbWFpbl9pZCwKPiBsZW4p ICkKPiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKPiArICAgICAgICAgICAg fQo+ICsKPiArICAgICAgICAgICAgc3Bpbl91bmxvY2soJnJpbmdfaW5mby0+bG9jayk7Cj4gKwo+ ICsgICAgICAgICAgICBpZiAoIHJldCA+PSAwICkKPiArICAgICAgICAgICAgICAgIGFyZ29fc2ln bmFsX2RvbWFpbihkc3RfZCk7Cj4gKwo+ICsgICAgICAgIH0gd2hpbGUgKCAwICk7Cj4gKwo+ICsg ICAgICAgIHJlYWRfdW5sb2NrKCZkc3RfZC0+YXJnby0+bG9jayk7Cj4gKwo+ICsgICAgfSB3aGls ZSAoIDAgKTsKPiArCj4gKyAgICBpZiAoIGRzdF9kICkKPiArICAgICAgICBwdXRfZG9tYWluKGRz dF9kKTsKPiArCj4gKyAgICByZWFkX3VubG9jaygmYXJnb19sb2NrKTsKPiArCj4gKyAgICByZXR1 cm4gKCByZXQgPCAwICkgPyByZXQgOiBsZW47Cj4gK30KPiArCj4gIGxvbmcKPiAgZG9fYXJnb19t ZXNzYWdlX29wKGludCBjbWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnMSwKPiAg ICAgICAgICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnMiwKPiBA QCAtODEzLDYgKzEzMTgsMjkgQEAgZG9fYXJnb19tZXNzYWdlX29wKGludCBjbWQsCj4gWEVOX0dV RVNUX0hBTkRMRV9QQVJBTSh2b2lkKSBhcmcxLAo+ICAgICAgICAgIHJjID0gYXJnb191bnJlZ2lz dGVyX3JpbmcoZCwgcmluZ19obmQpOwo+ICAgICAgICAgIGJyZWFrOwo+ICAgICAgfQo+ICsgICAg Y2FzZSBBUkdPX01FU1NBR0VfT1Bfc2VuZHY6Cj4gKyAgICB7Cj4gKyAgICAgICAgYXJnb19zZW5k X2FkZHJfdCBzZW5kX2FkZHI7Cj4gKyAgICAgICAgdWludDMyX3QgbmlvdiA9IGFyZzM7Cj4gKyAg ICAgICAgdWludDMyX3QgbWVzc2FnZV90eXBlID0gYXJnNDsKPiArCj4gKyAgICAgICAgWEVOX0dV RVNUX0hBTkRMRV9QQVJBTShhcmdvX3NlbmRfYWRkcl90KSBzZW5kX2FkZHJfaG5kID0KPiArICAg ICAgICAgICAgZ3Vlc3RfaGFuZGxlX2Nhc3QoYXJnMSwgYXJnb19zZW5kX2FkZHJfdCk7Cj4gKyAg ICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShhcmdvX2lvdl90KSBpb3ZzID0KPiArICAgICAg ICAgICAgZ3Vlc3RfaGFuZGxlX2Nhc3QoYXJnMiwgYXJnb19pb3ZfdCk7Cj4gKwo+ICsgICAgICAg IGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9va2F5KHNlbmRfYWRkcl9obmQsIDEpKSApCj4g KyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIHJjID0gY29weV9mcm9tX2d1ZXN0X2Vycm5v KCZzZW5kX2FkZHIsIHNlbmRfYWRkcl9obmQsIDEpOwo+ICsgICAgICAgIGlmICggcmMgKQo+ICsg ICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICAgICAgc2VuZF9hZGRyLnNyYy5kb21haW5faWQg PSBkLT5kb21haW5faWQ7Cj4gKwo+ICsgICAgICAgIHJjID0gYXJnb19zZW5kdihkLCAmc2VuZF9h ZGRyLnNyYywgJnNlbmRfYWRkci5kc3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGlvdnMs IG5pb3YsIG1lc3NhZ2VfdHlwZSk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gICAgICBk ZWZhdWx0Ogo+ICAgICAgICAgIHJjID0gLUVOT1NZUzsKPiAgICAgICAgICBicmVhazsKPiBkaWZm IC0tZ2l0IGEveGVuL2luY2x1ZGUvcHVibGljL2FyZ28uaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9h cmdvLmgKPiBpbmRleCA2Y2YxMGE4Li4xMjNlZmM1IDEwMDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRl L3B1YmxpYy9hcmdvLmgKPiArKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJnby5oCj4gQEAgLTMy LDYgKzMyLDI4IEBACj4gICAqLwo+ICAjZGVmaW5lIEFSR09fTUFYX1JJTkdfU0laRSAgKDE2Nzc3 MjE2VUxMKQo+IAo+ICsvKgo+ICsgKiBBUkdPX01BWElPViA6IG1heGltdW0gbnVtYmVyIG9mIGlv dnMgYWNjZXB0ZWQgaW4gYSBzaW5nbGUgc2VuZHYuCj4gKyAqIFJhdGlvbmFsZSBmb3IgdGhlIHZh bHVlOgo+ICsgKiBUaGUgTGludXggYXJnbyBkcml2ZXIgbmV2ZXIgcGFzc2VzIG1vcmUgdGhhbiB0 d28gaW92cy4KPiArICogTGludXggZGVmaW5lcyBVSU9fTUFYSU9WIGFzIDEwMjQuCj4gKyAqIFBP U0lYIG1hbmRhdGVzIGF0IGxlYXN0IDE2IC0tIG5vdCB0aGF0IHRoaXMgaXMgYSBQT1NJWCBBUEkg b2YgY291cnNlLgo+ICsgKgo+ICsgKiBMaW1pdCB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgcG9z dGVkIGluIGEgc2luZ2xlIGFyZ28gb3BlcmF0aW9uIHRvCj4gKyAqIG5vIG1vcmUgdGhhbiAyXjMx IGJ5dGVzIHRvIHJlZHVjZSByaXNrIG9mIGludGVnZXIgb3ZlcmZsb3cgZGVmZWN0cy4KPiArICog RWFjaCBhcmdvIGlvdiBjYW4gaG9sZCB+IDJeMjQgYnl0ZXMsIHNvIHNldCBBUkdPX01BWElPViB0 byAyXigzMS0yNCksCj4gKyAqIG1pbnVzIG9uZSB0byBlbmFibGUgc2ltcGxlIGVmZmljaWVudCBi b3VuZHMgY2hlY2tpbmcgdmlhIG1hc2tpbmc6IDEyNy4KPiArKi8KPiArI2RlZmluZSBBUkdPX01B WElPViAgICAgICAgICAxMjdVCj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBhcmdvX2lvdgo+ICt7Cj4g KyAgICB1aW50NjRfdCBpb3ZfYmFzZTsKPiArICAgIHVpbnQzMl90IGlvdl9sZW47Cj4gKyAgICB1 aW50MzJfdCBwYWQ7Cj4gK30gYXJnb19pb3ZfdDsKPiArREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUo YXJnb19pb3ZfdCk7Cj4gKwo+ICAvKiBwZm4gdHlwZTogNjQtYml0IG9uIGFsbCBhcmNoaXRlY3R1 cmVzIHRvIGFpZCBhdm9pZGluZyBhIGNvbXBhdCBBQkkgKi8KPiAgdHlwZWRlZiB1aW50NjRfdCBh cmdvX3Bmbl90Owo+IAo+IEBAIC00Miw2ICs2NCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBhcmdvX2Fk ZHIKPiAgICAgIHVpbnQxNl90IHBhZDsKPiAgfSBhcmdvX2FkZHJfdDsKPiAKPiArdHlwZWRlZiBz dHJ1Y3QgYXJnb19zZW5kX2FkZHIKPiArewo+ICsgICAgYXJnb19hZGRyX3Qgc3JjOwo+ICsgICAg YXJnb19hZGRyX3QgZHN0Owo+ICt9IGFyZ29fc2VuZF9hZGRyX3Q7Cj4gKwo+ICB0eXBlZGVmIHN0 cnVjdCBhcmdvX3JpbmdfaWQKPiAgewo+ICAgICAgc3RydWN0IGFyZ29fYWRkciBhZGRyOwo+IEBA IC0xMjUsNCArMTUzLDM1IEBAIHN0cnVjdCBhcmdvX3JpbmdfbWVzc2FnZV9oZWFkZXIKPiAgICov Cj4gICNkZWZpbmUgQVJHT19NRVNTQUdFX09QX3VucmVnaXN0ZXJfcmluZyAgICAgMgo+IAo+ICsv Kgo+ICsgKiBBUkdPX01FU1NBR0VfT1Bfc2VuZHYKPiArICoKPiArICogU2VuZCBhIGxpc3Qgb2Yg YnVmZmVycyBjb250YWluZWQgaW4gaW92cy4KPiArICoKPiArICogVGhlIHNlbmQgYWRkcmVzcyBz dHJ1Y3Qgc3BlY2lmaWVzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcwo+ICsg KiBmb3IgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCwgd2hpY2ggYXJlIHVzZWQgdG8gZmluZCB0aGUg ZGVzdGluYXRpb24KPiByaW5nOgo+ICsgKiBYZW4gZmlyc3QgbG9va3MgZm9yIGEgbW9zdC1zcGVj aWZpYyBtYXRjaCB3aXRoIGEgcmVnaXN0ZXJlZCByaW5nIHdpdGgKPiArICogIChpZC5hZGRyID09 IGRzdCkgYW5kIChpZC5wYXJ0bmVyID09IHNlbmRpbmdfZG9tYWluKSA7Cj4gKyAqIGlmIHRoYXQg ZmFpbHMsIGl0IHRoZW4gbG9va3MgZm9yIGEgd2lsZGNhcmQgbWF0Y2ggKGFrYSBtdWx0aWNhc3QK PiByZWNlaXZlcikKPiArICogd2hlcmUgKGlkLmFkZHIgPT0gZHN0KSBhbmQgKGlkLnBhcnRuZXIg PT0gRE9NSURfQU5ZKS4KPiArICoKPiArICogRm9yIGVhY2ggaW92IGVudHJ5LCBzZW5kIGlvdl9s ZW4gYnl0ZXMgZnJvbSBpb3ZfYmFzZSB0byB0aGUKPiBkZXN0aW5hdGlvbiByaW5nLgo+ICsgKiBJ ZiBpbnN1ZmZpY2llbnQgc3BhY2UgZXhpc3RzIGluIHRoZSBkZXN0aW5hdGlvbiByaW5nLCBpdCB3 aWxsIHJldHVybiAtCj4gRUFHQUlOCj4gKyAqIGFuZCBYZW4gd2lsbCBub3RpZnkgdGhlIGNhbGxl ciB3aGVuIHN1ZmZpY2llbnQgc3BhY2UgYmVjb21lcwo+IGF2YWlsYWJsZS4KPiArICoKPiArICog VGhlIG1lc3NhZ2UgdHlwZSBpcyBhIDMyLWJpdCBkYXRhIGZpZWxkIGF2YWlsYWJsZSB0byBjb21t dW5pY2F0ZQo+IG1lc3NhZ2UKPiArICogY29udGV4dCBkYXRhIChlZy4ga2VybmVsLXRvLWtlcm5l bCwgcmF0aGVyIHRoYW4gYXBwbGljYXRpb24gbGF5ZXIpLgo+ICsgKgo+ICsgKiBhcmcxOiBYRU5f R1VFU1RfSEFORExFKGFyZ29fc2VuZF9hZGRyX3QpIHNvdXJjZSBhbmQgZGVzdCBhZGRyZXNzZXMK PiArICogYXJnMjogWEVOX0dVRVNUX0hBTkRMRShhcmdvX2lvdl90KSBpb3ZzCj4gKyAqIGFyZzM6 IHVpbnQzMl90IG5pb3YKPiArICogYXJnNDogdWludDMyX3QgbWVzc2FnZSB0eXBlCj4gKyAqLwo+ ICsjZGVmaW5lIEFSR09fTUVTU0FHRV9PUF9zZW5kdiAgICAgICAgICAgICAgIDUKPiArCj4gKy8q IFRoZSBtYXhpbXVtIHNpemUgb2YgYSBndWVzdCBtZXNzYWdlIHRoYXQgbWF5IGJlIHNlbnQgb24g YW4gQXJnbyByaW5nLgo+ICovCj4gKyNkZWZpbmUgQVJHT19NQVhfTVNHX1NJWkUgKChBUkdPX01B WF9SSU5HX1NJWkUpIC0gXAo+ICsgICAgICAgIChzaXplb2Yoc3RydWN0IGFyZ29fcmluZ19tZXNz YWdlX2hlYWRlcikpIC0gXAo+ICsgICAgICAgIEFSR09fUk9VTkRVUCgxKSkKPiArCj4gICNlbmRp Zgo+IC0tCj4gMi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0 Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRl dmVs