From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v3 3/3] x86/HVM: split page straddling emulated accesses in more cases Date: Thu, 6 Sep 2018 13:14:30 +0000 Message-ID: References: <5B87CF6302000078001E37A6@prv1-mh.provo.novell.com> <5B91249102000078001E5F08@prv1-mh.provo.novell.com> <5B9125D102000078001E5F1D@prv1-mh.provo.novell.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]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fxu7U-0007vS-Ln for xen-devel@lists.xenproject.org; Thu, 06 Sep 2018 13:14:48 +0000 In-Reply-To: <5B9125D102000078001E5F1D@prv1-mh.provo.novell.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: 'Jan Beulich' , xen-devel Cc: Andrew Cooper , Olaf Hering List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IEphbiBCZXVsaWNoIFttYWlsdG86 SkJldWxpY2hAc3VzZS5jb21dCj4gU2VudDogMDYgU2VwdGVtYmVyIDIwMTggMTQ6MDQKPiBUbzog eGVuLWRldmVsIDx4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc+Cj4gQ2M6IE9sYWYgSGVy aW5nIDxvbGFmQGFlcGZsZS5kZT47IEFuZHJldyBDb29wZXIKPiA8QW5kcmV3LkNvb3BlcjNAY2l0 cml4LmNvbT47IFBhdWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+Cj4gU3ViamVj dDogW1BBVENIIHYzIDMvM10geDg2L0hWTTogc3BsaXQgcGFnZSBzdHJhZGRsaW5nIGVtdWxhdGVk IGFjY2Vzc2VzIGluCj4gbW9yZSBjYXNlcwo+IAo+IEFzc3VtaW5nIGNvbnNlY3V0aXZlIGxpbmVh ciBhZGRyZXNzZXMgbWFwIHRvIGFsbCBSQU0gb3IgYWxsIE1NSU8gaXMgbm90Cj4gY29ycmVjdC4g Tm9yIGlzIGFzc3VtaW5nIHRoYXQgYSBwYWdlIHN0cmFkZGxpbmcgTU1JTyBhY2Nlc3Mgd2lsbCBh Y2Nlc3MKPiB0aGUgc2FtZSBlbXVsYXRpbmcgY29tcG9uZW50IGZvciBib3RoIHBhcnRzIG9mIHRo ZSBhY2Nlc3MuIElmIGEgZ3Vlc3QKPiBSQU0gcmVhZCBmYWlscyB3aXRoIEhWTVRSQU5TX2JhZF9n Zm5fdG9fbWZuIGFuZCBpZiB0aGUgYWNjZXNzIHN0cmFkZGxlcwo+IGEgcGFnZSBib3VuZGFyeSwg aXNzdWUgYWNjZXNzZXMgc2VwYXJhdGVseSBmb3IgYm90aCBwYXJ0cy4KPiAKPiBUaGUgZXh0cmEg Y2FsbCB0byBrbm93bl9nbGEoKSBmcm9tIGh2bWVtdWxfd3JpdGUoKSBpcyBqdXN0IHRvIHByZXNl cnZlCj4gb3JpZ2luYWwgYmVoYXZpb3I7IGZvciBjb25zaXN0ZW5jeSB0aGUgY2hlY2sgYWxzbyBn ZXRzIGFkZGVkIHRvCj4gaHZtZW11bF9ybXcoKSAoYWxiZWl0IEkgY29udGludWUgdG8gYmUgdW5z dXJlIHdoZXRoZXIgd2Ugd291bGRuJ3QgYmV0dGVyCj4gZHJvcCBib3RoKS4KPiAKPiBOb3RlIHRo YXQgdGhlIGNvcnJlY3RuZXNzIG9mIHRoaXMgZGVwZW5kcyBvbiB0aGUgTU1JTyBjYWNoaW5nIHVz ZWQKPiBlbHNld2hlcmUgaW4gdGhlIGVtdWxhdGlvbiBjb2RlLgo+IAo+IFNpZ25lZC1vZmYtYnk6 IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KPiBUZXN0ZWQtYnk6IE9sYWYgSGVyaW5n IDxvbGFmQGFlcGZsZS5kZT4KClJldmlld2VkLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFu dEBjaXRyaXguY29tPgoKPiAtLS0KPiB2MzogTW92ZSBpbnRyb2R1Y3Rpb24gb2Yga25vd25fZ2xh KCkgdG8gYSBwcmVyZXEgcGF0Y2guIE1pcnJvciBjaGVjawo+ICAgICB1c2luZyB0aGUgZnVuY3Rp b24gaW50byBodm1lbXVsX3JtdygpLgo+IHYyOiBBbHNvIGhhbmRsZSBodm1lbXVsX3t3cml0ZSxy bXd9KCkuCj4gCj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMKPiArKysgYi94ZW4v YXJjaC94ODYvaHZtL2VtdWxhdGUuYwo+IEBAIC0xMDU4LDcgKzEwNTgsOTEgQEAgc3RhdGljIGJv b2wga25vd25fZ2xhKHVuc2lnbmVkIGxvbmcgYWRkcgo+ICAgICAgZWxzZSBpZiAoICF2aW8tPm1t aW9fYWNjZXNzLnJlYWRfYWNjZXNzICkKPiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+IAo+ IC0gICAgcmV0dXJuIHZpby0+bW1pb19nbGEgPT0gKGFkZHIgJiBQQUdFX01BU0spOwo+ICsgICAg cmV0dXJuICh2aW8tPm1taW9fZ2xhID09IChhZGRyICYgUEFHRV9NQVNLKSAmJgo+ICsgICAgICAg ICAgICAoYWRkciAmIH5QQUdFX01BU0spICsgYnl0ZXMgPD0gUEFHRV9TSVpFKTsKPiArfQo+ICsK PiArc3RhdGljIGludCBsaW5lYXJfcmVhZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGlu dCBieXRlcywgdm9pZCAqcF9kYXRhLAo+ICsgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IHBmZWMsIHN0cnVjdCBodm1fZW11bGF0ZV9jdHh0ICpodm1lbXVsX2N0eHQpCj4gK3sKPiArICAg IHBhZ2VmYXVsdF9pbmZvX3QgcGZpbmZvOwo+ICsgICAgaW50IHJjID0gaHZtX2NvcHlfZnJvbV9n dWVzdF9saW5lYXIocF9kYXRhLCBhZGRyLCBieXRlcywgcGZlYywKPiAmcGZpbmZvKTsKPiArCj4g KyAgICBzd2l0Y2ggKCByYyApCj4gKyAgICB7Cj4gKyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNl dCwgcGFydDE7Cj4gKwo+ICsgICAgY2FzZSBIVk1UUkFOU19va2F5Ogo+ICsgICAgICAgIHJldHVy biBYODZFTVVMX09LQVk7Cj4gKwo+ICsgICAgY2FzZSBIVk1UUkFOU19iYWRfbGluZWFyX3RvX2dm bjoKPiArICAgICAgICB4ODZfZW11bF9wYWdlZmF1bHQocGZpbmZvLmVjLCBwZmluZm8ubGluZWFy LCAmaHZtZW11bF9jdHh0LT5jdHh0KTsKPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJ T047Cj4gKwo+ICsgICAgY2FzZSBIVk1UUkFOU19iYWRfZ2ZuX3RvX21mbjoKPiArICAgICAgICBp ZiAoIHBmZWMgJiBQRkVDX2luc25fZmV0Y2ggKQo+ICsgICAgICAgICAgICByZXR1cm4gWDg2RU1V TF9VTkhBTkRMRUFCTEU7Cj4gKwo+ICsgICAgICAgIG9mZnNldCA9IGFkZHIgJiB+UEFHRV9NQVNL Owo+ICsgICAgICAgIGlmICggb2Zmc2V0ICsgYnl0ZXMgPD0gUEFHRV9TSVpFICkKPiArICAgICAg ICAgICAgcmV0dXJuIGh2bWVtdWxfbGluZWFyX21taW9fcmVhZChhZGRyLCBieXRlcywgcF9kYXRh LCBwZmVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh2 bWVtdWxfY3R4dCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBrbm93bl9nbGEoYWRkciwgYnl0ZXMsIHBmZWMpKTsKPiArCj4gKyAgICAgICAgLyogU3BsaXQg dGhlIGFjY2VzcyBhdCB0aGUgcGFnZSBib3VuZGFyeS4gKi8KPiArICAgICAgICBwYXJ0MSA9IFBB R0VfU0laRSAtIG9mZnNldDsKPiArICAgICAgICByYyA9IGxpbmVhcl9yZWFkKGFkZHIsIHBhcnQx LCBwX2RhdGEsIHBmZWMsIGh2bWVtdWxfY3R4dCk7Cj4gKyAgICAgICAgaWYgKCByYyA9PSBYODZF TVVMX09LQVkgKQo+ICsgICAgICAgICAgICByYyA9IGxpbmVhcl9yZWFkKGFkZHIgKyBwYXJ0MSwg Ynl0ZXMgLSBwYXJ0MSwgcF9kYXRhICsgcGFydDEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGZlYywgaHZtZW11bF9jdHh0KTsKPiArICAgICAgICByZXR1cm4gcmM7Cj4gKwo+ICsg ICAgY2FzZSBIVk1UUkFOU19nZm5fcGFnZWRfb3V0Ogo+ICsgICAgY2FzZSBIVk1UUkFOU19nZm5f c2hhcmVkOgo+ICsgICAgICAgIHJldHVybiBYODZFTVVMX1JFVFJZOwo+ICsgICAgfQo+ICsKPiAr ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKPiArfQo+ICsKPiArc3RhdGljIGludCBs aW5lYXJfd3JpdGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHZvaWQg KnBfZGF0YSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcGZlYywgc3RydWN0 IGh2bV9lbXVsYXRlX2N0eHQgKmh2bWVtdWxfY3R4dCkKPiArewo+ICsgICAgcGFnZWZhdWx0X2lu Zm9fdCBwZmluZm87Cj4gKyAgICBpbnQgcmMgPSBodm1fY29weV90b19ndWVzdF9saW5lYXIoYWRk ciwgcF9kYXRhLCBieXRlcywgcGZlYywgJnBmaW5mbyk7Cj4gKwo+ICsgICAgc3dpdGNoICggcmMg KQo+ICsgICAgewo+ICsgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHBhcnQxOwo+ICsKPiAr ICAgIGNhc2UgSFZNVFJBTlNfb2theToKPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwo+ ICsKPiArICAgIGNhc2UgSFZNVFJBTlNfYmFkX2xpbmVhcl90b19nZm46Cj4gKyAgICAgICAgeDg2 X2VtdWxfcGFnZWZhdWx0KHBmaW5mby5lYywgcGZpbmZvLmxpbmVhciwgJmh2bWVtdWxfY3R4dC0+ Y3R4dCk7Cj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwo+ICsKPiArICAgIGNh c2UgSFZNVFJBTlNfYmFkX2dmbl90b19tZm46Cj4gKyAgICAgICAgb2Zmc2V0ID0gYWRkciAmIH5Q QUdFX01BU0s7Cj4gKyAgICAgICAgaWYgKCBvZmZzZXQgKyBieXRlcyA8PSBQQUdFX1NJWkUgKQo+ ICsgICAgICAgICAgICByZXR1cm4gaHZtZW11bF9saW5lYXJfbW1pb193cml0ZShhZGRyLCBieXRl cywgcF9kYXRhLCBwZmVjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBodm1lbXVsX2N0eHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGtub3duX2dsYShhZGRyLCBieXRlcywgcGZlYykpOwo+ICsKPiArICAgICAg ICAvKiBTcGxpdCB0aGUgYWNjZXNzIGF0IHRoZSBwYWdlIGJvdW5kYXJ5LiAqLwo+ICsgICAgICAg IHBhcnQxID0gUEFHRV9TSVpFIC0gb2Zmc2V0Owo+ICsgICAgICAgIHJjID0gbGluZWFyX3dyaXRl KGFkZHIsIHBhcnQxLCBwX2RhdGEsIHBmZWMsIGh2bWVtdWxfY3R4dCk7Cj4gKyAgICAgICAgaWYg KCByYyA9PSBYODZFTVVMX09LQVkgKQo+ICsgICAgICAgICAgICByYyA9IGxpbmVhcl93cml0ZShh ZGRyICsgcGFydDEsIGJ5dGVzIC0gcGFydDEsIHBfZGF0YSArIHBhcnQxLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZmVjLCBodm1lbXVsX2N0eHQpOwo+ICsgICAgICAgIHJldHVy biByYzsKPiArCj4gKyAgICBjYXNlIEhWTVRSQU5TX2dmbl9wYWdlZF9vdXQ6Cj4gKyAgICBjYXNl IEhWTVRSQU5TX2dmbl9zaGFyZWQ6Cj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfUkVUUlk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwo+ICB9Cj4gCj4g IHN0YXRpYyBpbnQgX19odm1lbXVsX3JlYWQoCj4gQEAgLTEwNjksNyArMTE1Myw2IEBAIHN0YXRp YyBpbnQgX19odm1lbXVsX3JlYWQoCj4gICAgICBlbnVtIGh2bV9hY2Nlc3NfdHlwZSBhY2Nlc3Nf dHlwZSwKPiAgICAgIHN0cnVjdCBodm1fZW11bGF0ZV9jdHh0ICpodm1lbXVsX2N0eHQpCj4gIHsK PiAtICAgIHBhZ2VmYXVsdF9pbmZvX3QgcGZpbmZvOwo+ICAgICAgdW5zaWduZWQgbG9uZyBhZGRy LCByZXBzID0gMTsKPiAgICAgIHVpbnQzMl90IHBmZWMgPSBQRkVDX3BhZ2VfcHJlc2VudDsKPiAg ICAgIGludCByYzsKPiBAQCAtMTA4NSwzMSArMTE2OCw4IEBAIHN0YXRpYyBpbnQgX19odm1lbXVs X3JlYWQoCj4gICAgICAgICAgc2VnLCBvZmZzZXQsIGJ5dGVzLCAmcmVwcywgYWNjZXNzX3R5cGUs IGh2bWVtdWxfY3R4dCwgJmFkZHIpOwo+ICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgfHwg IWJ5dGVzICkKPiAgICAgICAgICByZXR1cm4gcmM7Cj4gLSAgICBpZiAoIGtub3duX2dsYShhZGRy LCBieXRlcywgcGZlYykgKQo+IC0gICAgICAgIHJldHVybiBodm1lbXVsX2xpbmVhcl9tbWlvX3Jl YWQoYWRkciwgYnl0ZXMsIHBfZGF0YSwgcGZlYywKPiBodm1lbXVsX2N0eHQsIDEpOwo+IAo+IC0g ICAgcmMgPSBodm1fY29weV9mcm9tX2d1ZXN0X2xpbmVhcihwX2RhdGEsIGFkZHIsIGJ5dGVzLCBw ZmVjLCAmcGZpbmZvKTsKPiAtCj4gLSAgICBzd2l0Y2ggKCByYyApCj4gLSAgICB7Cj4gLSAgICBj YXNlIEhWTVRSQU5TX29rYXk6Cj4gLSAgICAgICAgYnJlYWs7Cj4gLSAgICBjYXNlIEhWTVRSQU5T X2JhZF9saW5lYXJfdG9fZ2ZuOgo+IC0gICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdChwZmluZm8u ZWMsIHBmaW5mby5saW5lYXIsICZodm1lbXVsX2N0eHQtPmN0eHQpOwo+IC0gICAgICAgIHJldHVy biBYODZFTVVMX0VYQ0VQVElPTjsKPiAtICAgIGNhc2UgSFZNVFJBTlNfYmFkX2dmbl90b19tZm46 Cj4gLSAgICAgICAgaWYgKCBhY2Nlc3NfdHlwZSA9PSBodm1fYWNjZXNzX2luc25fZmV0Y2ggKQo+ IC0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cj4gLQo+IC0gICAgICAg IHJldHVybiBodm1lbXVsX2xpbmVhcl9tbWlvX3JlYWQoYWRkciwgYnl0ZXMsIHBfZGF0YSwgcGZl YywKPiBodm1lbXVsX2N0eHQsIDApOwo+IC0gICAgY2FzZSBIVk1UUkFOU19nZm5fcGFnZWRfb3V0 Ogo+IC0gICAgY2FzZSBIVk1UUkFOU19nZm5fc2hhcmVkOgo+IC0gICAgICAgIHJldHVybiBYODZF TVVMX1JFVFJZOwo+IC0gICAgZGVmYXVsdDoKPiAtICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhB TkRMRUFCTEU7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKPiArICAg IHJldHVybiBsaW5lYXJfcmVhZChhZGRyLCBieXRlcywgcF9kYXRhLCBwZmVjLCBodm1lbXVsX2N0 eHQpOwo+ICB9Cj4gCj4gIHN0YXRpYyBpbnQgaHZtZW11bF9yZWFkKAo+IEBAIC0xMTg5LDcgKzEy NDksNyBAQCBzdGF0aWMgaW50IGh2bWVtdWxfd3JpdGUoCj4gICAgICB1bnNpZ25lZCBsb25nIGFk ZHIsIHJlcHMgPSAxOwo+ICAgICAgdWludDMyX3QgcGZlYyA9IFBGRUNfcGFnZV9wcmVzZW50IHwg UEZFQ193cml0ZV9hY2Nlc3M7Cj4gICAgICBpbnQgcmM7Cj4gLSAgICB2b2lkICptYXBwaW5nOwo+ ICsgICAgdm9pZCAqbWFwcGluZyA9IE5VTEw7Cj4gCj4gICAgICBpZiAoIGlzX3g4Nl9zeXN0ZW1f c2VnbWVudChzZWcpICkKPiAgICAgICAgICBwZmVjIHw9IFBGRUNfaW1wbGljaXQ7Cj4gQEAgLTEy MDEsMTUgKzEyNjEsMTUgQEAgc3RhdGljIGludCBodm1lbXVsX3dyaXRlKAo+ICAgICAgaWYgKCBy YyAhPSBYODZFTVVMX09LQVkgfHwgIWJ5dGVzICkKPiAgICAgICAgICByZXR1cm4gcmM7Cj4gCj4g LSAgICBpZiAoIGtub3duX2dsYShhZGRyLCBieXRlcywgcGZlYykgKQo+IC0gICAgICAgIHJldHVy biBodm1lbXVsX2xpbmVhcl9tbWlvX3dyaXRlKGFkZHIsIGJ5dGVzLCBwX2RhdGEsIHBmZWMsCj4g aHZtZW11bF9jdHh0LCAxKTsKPiAtCj4gLSAgICBtYXBwaW5nID0gaHZtZW11bF9tYXBfbGluZWFy X2FkZHIoYWRkciwgYnl0ZXMsIHBmZWMsIGh2bWVtdWxfY3R4dCk7Cj4gLSAgICBpZiAoIElTX0VS UihtYXBwaW5nKSApCj4gLSAgICAgICAgcmV0dXJuIH5QVFJfRVJSKG1hcHBpbmcpOwo+ICsgICAg aWYgKCAha25vd25fZ2xhKGFkZHIsIGJ5dGVzLCBwZmVjKSApCj4gKyAgICB7Cj4gKyAgICAgICAg bWFwcGluZyA9IGh2bWVtdWxfbWFwX2xpbmVhcl9hZGRyKGFkZHIsIGJ5dGVzLCBwZmVjLAo+IGh2 bWVtdWxfY3R4dCk7Cj4gKyAgICAgICAgaWYgKCBJU19FUlIobWFwcGluZykgKQo+ICsgICAgICAg ICAgICAgcmV0dXJuIH5QVFJfRVJSKG1hcHBpbmcpOwo+ICsgICAgfQo+IAo+ICAgICAgaWYgKCAh bWFwcGluZyApCj4gLSAgICAgICAgcmV0dXJuIGh2bWVtdWxfbGluZWFyX21taW9fd3JpdGUoYWRk ciwgYnl0ZXMsIHBfZGF0YSwgcGZlYywKPiBodm1lbXVsX2N0eHQsIDApOwo+ICsgICAgICAgIHJl dHVybiBsaW5lYXJfd3JpdGUoYWRkciwgYnl0ZXMsIHBfZGF0YSwgcGZlYywgaHZtZW11bF9jdHh0 KTsKPiAKPiAgICAgIG1lbWNweShtYXBwaW5nLCBwX2RhdGEsIGJ5dGVzKTsKPiAKPiBAQCAtMTIz MSw3ICsxMjkxLDcgQEAgc3RhdGljIGludCBodm1lbXVsX3JtdygKPiAgICAgIHVuc2lnbmVkIGxv bmcgYWRkciwgcmVwcyA9IDE7Cj4gICAgICB1aW50MzJfdCBwZmVjID0gUEZFQ19wYWdlX3ByZXNl bnQgfCBQRkVDX3dyaXRlX2FjY2VzczsKPiAgICAgIGludCByYzsKPiAtICAgIHZvaWQgKm1hcHBp bmc7Cj4gKyAgICB2b2lkICptYXBwaW5nID0gTlVMTDsKPiAKPiAgICAgIHJjID0gaHZtZW11bF92 aXJ0dWFsX3RvX2xpbmVhcigKPiAgICAgICAgICBzZWcsIG9mZnNldCwgYnl0ZXMsICZyZXBzLCBo dm1fYWNjZXNzX3dyaXRlLCBodm1lbXVsX2N0eHQsICZhZGRyKTsKPiBAQCAtMTI0Myw5ICsxMzAz LDEyIEBAIHN0YXRpYyBpbnQgaHZtZW11bF9ybXcoCj4gICAgICBlbHNlIGlmICggaHZtZW11bF9j dHh0LT5zZWdfcmVnW3g4Nl9zZWdfc3NdLmRwbCA9PSAzICkKPiAgICAgICAgICBwZmVjIHw9IFBG RUNfdXNlcl9tb2RlOwo+IAo+IC0gICAgbWFwcGluZyA9IGh2bWVtdWxfbWFwX2xpbmVhcl9hZGRy KGFkZHIsIGJ5dGVzLCBwZmVjLCBodm1lbXVsX2N0eHQpOwo+IC0gICAgaWYgKCBJU19FUlIobWFw cGluZykgKQo+IC0gICAgICAgIHJldHVybiB+UFRSX0VSUihtYXBwaW5nKTsKPiArICAgIGlmICgg IWtub3duX2dsYShhZGRyLCBieXRlcywgcGZlYykgKQo+ICsgICAgewo+ICsgICAgICAgIG1hcHBp bmcgPSBodm1lbXVsX21hcF9saW5lYXJfYWRkcihhZGRyLCBieXRlcywgcGZlYywKPiBodm1lbXVs X2N0eHQpOwo+ICsgICAgICAgIGlmICggSVNfRVJSKG1hcHBpbmcpICkKPiArICAgICAgICAgICAg cmV0dXJuIH5QVFJfRVJSKG1hcHBpbmcpOwo+ICsgICAgfQo+IAo+ICAgICAgaWYgKCBtYXBwaW5n ICkKPiAgICAgIHsKPiBAQCAtMTI1NSwxNyArMTMxOCwxNCBAQCBzdGF0aWMgaW50IGh2bWVtdWxf cm13KAo+ICAgICAgZWxzZQo+ICAgICAgewo+ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSA9 IDA7Cj4gLSAgICAgICAgYm9vbCBrbm93bl9ncGZuID0ga25vd25fZ2xhKGFkZHIsIGJ5dGVzLCBw ZmVjKTsKPiAKPiAgICAgICAgICBpZiAoIGJ5dGVzID4gc2l6ZW9mKGRhdGEpICkKPiAgICAgICAg ICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwo+IC0gICAgICAgIHJjID0gaHZtZW11 bF9saW5lYXJfbW1pb19yZWFkKGFkZHIsIGJ5dGVzLCAmZGF0YSwgcGZlYywKPiBodm1lbXVsX2N0 eHQsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga25vd25fZ3Bmbik7 Cj4gKyAgICAgICAgcmMgPSBsaW5lYXJfcmVhZChhZGRyLCBieXRlcywgJmRhdGEsIHBmZWMsIGh2 bWVtdWxfY3R4dCk7Cj4gICAgICAgICAgaWYgKCByYyA9PSBYODZFTVVMX09LQVkgKQo+ICAgICAg ICAgICAgICByYyA9IHg4Nl9lbXVsX3JtdygmZGF0YSwgYnl0ZXMsIGVmbGFncywgc3RhdGUsIGN0 eHQpOwo+ICAgICAgICAgIGlmICggcmMgPT0gWDg2RU1VTF9PS0FZICkKPiAtICAgICAgICAgICAg cmMgPSBodm1lbXVsX2xpbmVhcl9tbWlvX3dyaXRlKGFkZHIsIGJ5dGVzLCAmZGF0YSwgcGZlYywK PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh2bWVtdWxfY3R4 dCwga25vd25fZ3Bmbik7Cj4gKyAgICAgICAgICAgIHJjID0gbGluZWFyX3dyaXRlKGFkZHIsIGJ5 dGVzLCAmZGF0YSwgcGZlYywgaHZtZW11bF9jdHh0KTsKPiAgICAgIH0KPiAKPiAgICAgIHJldHVy biByYzsKPiAKPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs