From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH 1/2] x86/hvm: Don't raise #GP behind the emulators back for CR accesses Date: Thu, 2 Mar 2017 15:58:56 +0000 Message-ID: <01c7a4d2edc34a5dbe3ab31823e5f01b@AMSPEX02CL03.citrite.net> References: <1488466778-10163-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1488466778-10163-1-git-send-email-andrew.cooper3@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Kevin Tian , Jan Beulich , Andrew Cooper , Jun Nakajima , Boris Ostrovsky , Suravee Suthikulpanit List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IEFuZHJldyBDb29wZXIgW21haWx0 bzphbmRyZXcuY29vcGVyM0BjaXRyaXguY29tXQo+IFNlbnQ6IDAyIE1hcmNoIDIwMTcgMTU6MDAK PiBUbzogWGVuLWRldmVsIDx4ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZz4KPiBDYzogQW5kcmV3IENv b3BlciA8QW5kcmV3LkNvb3BlcjNAY2l0cml4LmNvbT47IEphbiBCZXVsaWNoCj4gPEpCZXVsaWNo QHN1c2UuY29tPjsgUGF1bCBEdXJyYW50IDxQYXVsLkR1cnJhbnRAY2l0cml4LmNvbT47IEp1bgo+ IE5ha2FqaW1hIDxqdW4ubmFrYWppbWFAaW50ZWwuY29tPjsgS2V2aW4gVGlhbiA8a2V2aW4udGlh bkBpbnRlbC5jb20+Owo+IEJvcmlzIE9zdHJvdnNreSA8Ym9yaXMub3N0cm92c2t5QG9yYWNsZS5j b20+OyBTdXJhdmVlIFN1dGhpa3VscGFuaXQKPiA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5j b20+Cj4gU3ViamVjdDogW1BBVENIIDEvMl0geDg2L2h2bTogRG9uJ3QgcmFpc2UgI0dQIGJlaGlu ZCB0aGUgZW11bGF0b3JzIGJhY2sKPiBmb3IgQ1IgYWNjZXNzZXMKPiAKPiBodm1fc2V0X2NyezAs NH0oKSBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIGVtdWxhdG9yLCBidXQgdXNlCj4gaHZtX2luamVj dF9od19leGNlcHRpb24oKSBkaXJlY3RseS4KPiAKPiBBbHRlciB0aGUgQVBJIHRvIG1ha2UgdGhl IGNhbGxlcnMgb2YgaHZtX3NldF9jcnswLDMsNH0oKSByZXNwb25zaWJsZSBmb3IKPiByYWlzaW5n ICNHUCwgYW5kIGFwcGx5IHRoaXMgY2hhbmdlIHRvIGFsbCBleGlzdGluZyBjYWxsZXJzLgo+IAo+ IFNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+ CgplbXVsYXRlIGNvZGUuLi4KClJldmlld2VkLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFu dEBjaXRyaXguY29tPgoKPiAtLS0KPiBDQzogSmFuIEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29t Pgo+IENDOiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgo+IENDOiBKdW4g TmFrYWppbWEgPGp1bi5uYWthamltYUBpbnRlbC5jb20+Cj4gQ0M6IEtldmluIFRpYW4gPGtldmlu LnRpYW5AaW50ZWwuY29tPgo+IENDOiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9zdHJvdnNreUBv cmFjbGUuY29tPgo+IENDOiBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxw YW5pdEBhbWQuY29tPgo+IAo+IElzc3VlcyBpZGVudGlmaWVkIHdoaWNoIEkgYW0gcHVycG9zZWZ1 bGx5IG5vdCBmaXhpbmcgaW4gdGhpcyBwYXRjaDoKPiAKPiAoSSB3aWxsIHRyeSB0byBnZXQgYXJv dW5kIHRvIHRoZW0sIGJ1dCBwcm9iYWJseSBub3QgaW4gdGhlIDQuOSB0aW1lZnJhbWUsIGF0Cj4g dGhpcyBwb2ludC4pCj4gCj4gICogaHZtX3NldF9jcjMoKSBkb2Vzbid0IGhhbmRsZSBiYWQgMzJi aXQgUEFFIFBEUFRScyBwcm9wZXJseSwgYXMgaXQgZG9lc24ndAo+ICAgIGFjdHVhbGx5IGhhdmUg YSBwYXRoIHdoaWNoIHJhaXNlcyAjR1AuCj4gICogVGhlcmUgaXMgYSBsb3Qgb2YgcmVkdW5kYW5j eSBpbiBvdXIgSFZNIENSIHNldHRpbmcgcm91dGluZXMsIGJ1dCBub3QKPiBlbm91Z2gKPiAgICB0 byB0cml2aWFsbHkgZGVkdXAgYXQgdGhpcyBwb2ludC4KPiAgKiBCb3RoIG5lc3RlZCBWVC14IGFu ZCBTVk0gYXJlIGxpYWJsZSByYWlzZSAjR1Agd2l0aCBMMSwgcmF0aGVyIHRoYW4gZmFpbGluZwo+ ICAgIHRoZSB2aXJ0dWFsIHZtZW50cnkvdm1leGl0LiAgVGhpcyBpcyBub3QgYSBjaGFuZ2UgaW4g YmVoYXZpb3VyLCBidXQgaXMgZmFyCj4gICAgbW9yZSBvYnZpb3VzIG5vdy4KPiAgKiBUaGUgaHZt X2RvX3Jlc3VtZSgpIHBhdGggZm9yIHZtX2V2ZW50IHByb2Nlc3NpbmcgaGFzIHRoZSBzYW1lIGJ1 ZyBhcwo+IHRoZQo+ICAgIE1TUiBzaWRlLCB3aGVyZSBleGNlcHRpb25zIGFyZSByYWlzZWQgYWZ0 ZXIgJXJpcCBoYXMgbW92ZWQgZm9yd2FyZHMuICBUaGlzCj4gICAgaXMgYWxzbyBub3QgYSBjaGFu Z2UgaW4gYmVoYXZpb3VyLgo+IC0tLQo+ICB4ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYyAgICAg ICAgfCAyNCArKysrKysrKysrKystLS0tCj4gIHhlbi9hcmNoL3g4Ni9odm0vaHZtLmMgICAgICAg ICAgICB8IDU5ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQo+IC0tLQo+ICB4 ZW4vYXJjaC94ODYvaHZtL3N2bS9uZXN0ZWRzdm0uYyAgfCAxNCArKysrKysrKysrCj4gIHhlbi9h cmNoL3g4Ni9odm0vdm14L3ZteC5jICAgICAgICB8ICA3ICsrKystCj4gIHhlbi9hcmNoL3g4Ni9o dm0vdm14L3Z2bXguYyAgICAgICB8IDI5ICsrKysrKysrKysrKysrKy0tLS0KPiAgeGVuL2luY2x1 ZGUvYXNtLXg4Ni9odm0vc3VwcG9ydC5oIHwgIDYgKysrLQo+ICA2IGZpbGVzIGNoYW5nZWQsIDEw MSBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gveDg2L2h2bS9lbXVsYXRlLmMgYi94ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYwo+IGluZGV4 IDkzNzgyZDAuLjFjNjYwMTAgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRl LmMKPiArKysgYi94ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYwo+IEBAIC0xNTIwLDIzICsxNTIw LDM3IEBAIHN0YXRpYyBpbnQgaHZtZW11bF93cml0ZV9jcigKPiAgICAgIHVuc2lnbmVkIGxvbmcg dmFsLAo+ICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCj4gIHsKPiArICAgIGlu dCByYzsKPiArCj4gICAgICBIVk1UUkFDRV9MT05HXzJEKENSX1dSSVRFLCByZWcsIFRSQ19QQVJf TE9ORyh2YWwpKTsKPiAgICAgIHN3aXRjaCAoIHJlZyApCj4gICAgICB7Cj4gICAgICBjYXNlIDA6 Cj4gLSAgICAgICAgcmV0dXJuIGh2bV9zZXRfY3IwKHZhbCwgMSk7Cj4gKyAgICAgICAgcmMgPSBo dm1fc2V0X2NyMCh2YWwsIDEpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsKPiAgICAgIGNhc2UgMjoK PiAgICAgICAgICBjdXJyZW50LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzJdID0gdmFsOwo+IC0g ICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Cj4gKyAgICAgICAgcmMgPSBYODZFTVVMX09LQVk7 Cj4gKyAgICAgICAgYnJlYWs7Cj4gKwo+ICAgICAgY2FzZSAzOgo+IC0gICAgICAgIHJldHVybiBo dm1fc2V0X2NyMyh2YWwsIDEpOwo+ICsgICAgICAgIHJjID0gaHZtX3NldF9jcjModmFsLCAxKTsK PiArICAgICAgICBicmVhazsKPiArCj4gICAgICBjYXNlIDQ6Cj4gLSAgICAgICAgcmV0dXJuIGh2 bV9zZXRfY3I0KHZhbCwgMSk7Cj4gKyAgICAgICAgcmMgPSBodm1fc2V0X2NyNCh2YWwsIDEpOwo+ ICsgICAgICAgIGJyZWFrOwo+ICsKPiAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgcmMgPSBYODZF TVVMX1VOSEFORExFQUJMRTsKPiAgICAgICAgICBicmVhazsKPiAgICAgIH0KPiAKPiAtICAgIHJl dHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKPiArICAgIGlmICggcmMgPT0gWDg2RU1VTF9FWENF UFRJT04gKQo+ICsgICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAw LCBjdHh0KTsKPiArCj4gKyAgICByZXR1cm4gcmM7Cj4gIH0KPiAKPiAgc3RhdGljIGludCBodm1l bXVsX3JlYWRfbXNyKAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVu L2FyY2gveDg2L2h2bS9odm0uYwo+IGluZGV4IDc0MzJjNzAuLmNjZmFlNGYgMTAwNjQ0Cj4gLS0t IGEveGVuL2FyY2gveDg2L2h2bS9odm0uYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMK PiBAQCAtNTI3LDE5ICs1MjcsMjUgQEAgdm9pZCBodm1fZG9fcmVzdW1lKHN0cnVjdCB2Y3B1ICp2 KQo+IAo+ICAgICAgICAgIGlmICggdy0+ZG9fd3JpdGUuY3IwICkKPiAgICAgICAgICB7Cj4gLSAg ICAgICAgICAgIGh2bV9zZXRfY3IwKHctPmNyMCwgMCk7Cj4gKyAgICAgICAgICAgIGlmICggaHZt X3NldF9jcjAody0+Y3IwLCAwKSA9PSBYODZFTVVMX0VYQ0VQVElPTiApCj4gKyAgICAgICAgICAg ICAgICBodm1faW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAwKTsKPiArCj4gICAg ICAgICAgICAgIHctPmRvX3dyaXRlLmNyMCA9IDA7Cj4gICAgICAgICAgfQo+IAo+ICAgICAgICAg IGlmICggdy0+ZG9fd3JpdGUuY3I0ICkKPiAgICAgICAgICB7Cj4gLSAgICAgICAgICAgIGh2bV9z ZXRfY3I0KHctPmNyNCwgMCk7Cj4gKyAgICAgICAgICAgIGlmICggaHZtX3NldF9jcjQody0+Y3I0 LCAwKSA9PSBYODZFTVVMX0VYQ0VQVElPTiApCj4gKyAgICAgICAgICAgICAgICBodm1faW5qZWN0 X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAwKTsKPiArCj4gICAgICAgICAgICAgIHctPmRv X3dyaXRlLmNyNCA9IDA7Cj4gICAgICAgICAgfQo+IAo+ICAgICAgICAgIGlmICggdy0+ZG9fd3Jp dGUuY3IzICkKPiAgICAgICAgICB7Cj4gLSAgICAgICAgICAgIGh2bV9zZXRfY3IzKHctPmNyMywg MCk7Cj4gKyAgICAgICAgICAgIGlmICggaHZtX3NldF9jcjMody0+Y3IzLCAwKSA9PSBYODZFTVVM X0VYQ0VQVElPTiApCj4gKyAgICAgICAgICAgICAgICBodm1faW5qZWN0X2h3X2V4Y2VwdGlvbihU UkFQX2dwX2ZhdWx0LCAwKTsKPiArCj4gICAgICAgICAgICAgIHctPmRvX3dyaXRlLmNyMyA9IDA7 Cj4gICAgICAgICAgfQo+ICAgICAgfQo+IEBAIC0yMDY4LDYgKzIwNzQsNyBAQCBpbnQgaHZtX21v dl90b19jcih1bnNpZ25lZCBpbnQgY3IsIHVuc2lnbmVkIGludAo+IGdwcikKPiAgewo+ICAgICAg c3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Owo+ICAgICAgdW5zaWduZWQgbG9uZyB2YWwsICpy ZWc7Cj4gKyAgICBpbnQgcmM7Cj4gCj4gICAgICBpZiAoIChyZWcgPSBkZWNvZGVfcmVnaXN0ZXIo Z3ByLCBndWVzdF9jcHVfdXNlcl9yZWdzKCksIDApKSA9PSBOVUxMICkKPiAgICAgIHsKPiBAQCAt MjA4MiwxNiArMjA4OSwyMCBAQCBpbnQgaHZtX21vdl90b19jcih1bnNpZ25lZCBpbnQgY3IsIHVu c2lnbmVkIGludAo+IGdwcikKPiAgICAgIHN3aXRjaCAoIGNyICkKPiAgICAgIHsKPiAgICAgIGNh c2UgMDoKPiAtICAgICAgICByZXR1cm4gaHZtX3NldF9jcjAodmFsLCAxKTsKPiArICAgICAgICBy YyA9IGh2bV9zZXRfY3IwKHZhbCwgMSk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gCj4gICAgICBjYXNl IDM6Cj4gLSAgICAgICAgcmV0dXJuIGh2bV9zZXRfY3IzKHZhbCwgMSk7Cj4gKyAgICAgICAgcmMg PSBodm1fc2V0X2NyMyh2YWwsIDEpOwo+ICsgICAgICAgIGJyZWFrOwo+IAo+ICAgICAgY2FzZSA0 Ogo+IC0gICAgICAgIHJldHVybiBodm1fc2V0X2NyNCh2YWwsIDEpOwo+ICsgICAgICAgIHJjID0g aHZtX3NldF9jcjQodmFsLCAxKTsKPiArICAgICAgICBicmVhazsKPiAKPiAgICAgIGNhc2UgODoK PiAgICAgICAgICB2bGFwaWNfc2V0X3JlZyh2Y3B1X3ZsYXBpYyhjdXJyKSwgQVBJQ19UQVNLUFJJ LCAoKHZhbCAmIDB4MGYpIDw8IDQpKTsKPiArICAgICAgICByYyA9IFg4NkVNVUxfT0tBWTsKPiAg ICAgICAgICBicmVhazsKPiAKPiAgICAgIGRlZmF1bHQ6Cj4gQEAgLTIwOTksNyArMjExMCwxMCBA QCBpbnQgaHZtX21vdl90b19jcih1bnNpZ25lZCBpbnQgY3IsIHVuc2lnbmVkIGludAo+IGdwcikK PiAgICAgICAgICBnb3RvIGV4aXRfYW5kX2NyYXNoOwo+ICAgICAgfQo+IAo+IC0gICAgcmV0dXJu IFg4NkVNVUxfT0tBWTsKPiArICAgIGlmICggcmMgPT0gWDg2RU1VTF9FWENFUFRJT04gKQo+ICsg ICAgICAgIGh2bV9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQsIDApOwo+ICsKPiAr ICAgIHJldHVybiByYzsKPiAKPiAgIGV4aXRfYW5kX2NyYXNoOgo+ICAgICAgZG9tYWluX2NyYXNo KGN1cnItPmRvbWFpbik7Cj4gQEAgLTIxOTksNyArMjIxMyw3IEBAIGludCBodm1fc2V0X2NyMCh1 bnNpZ25lZCBsb25nIHZhbHVlLCBib29sX3QKPiBtYXlfZGVmZXIpCj4gICAgICAgICAgSFZNX0RC R19MT0coREJHX0xFVkVMXzEsCj4gICAgICAgICAgICAgICAgICAgICAgIkd1ZXN0IGF0dGVtcHRz IHRvIHNldCB1cHBlciAzMiBiaXRzIGluIENSMDogJWx4IiwKPiAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZSk7Cj4gLSAgICAgICAgZ290byBncGY7Cj4gKyAgICAgICAgcmV0dXJuIFg4NkVNVUxf RVhDRVBUSU9OOwo+ICAgICAgfQo+IAo+ICAgICAgdmFsdWUgJj0gfkhWTV9DUjBfR1VFU1RfUkVT RVJWRURfQklUUzsKPiBAQCAtMjIwOSw3ICsyMjIzLDcgQEAgaW50IGh2bV9zZXRfY3IwKHVuc2ln bmVkIGxvbmcgdmFsdWUsIGJvb2xfdAo+IG1heV9kZWZlcikKPiAKPiAgICAgIGlmICggIW5lc3Rl ZGh2bV92bXN3aXRjaF9pbl9wcm9ncmVzcyh2KSAmJgo+ICAgICAgICAgICAodmFsdWUgJiAoWDg2 X0NSMF9QRSB8IFg4Nl9DUjBfUEcpKSA9PSBYODZfQ1IwX1BHICkKPiAtICAgICAgICBnb3RvIGdw ZjsKPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Cj4gCj4gICAgICAvKiBBIHB2 aCBpcyBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlIHRvIHJlYWwgbW9kZS4gKi8KPiAgICAgIGlmICgg aXNfcHZoX2RvbWFpbihkKSAmJgo+IEBAIC0yMjE3LDcgKzIyMzEsNyBAQCBpbnQgaHZtX3NldF9j cjAodW5zaWduZWQgbG9uZyB2YWx1ZSwgYm9vbF90Cj4gbWF5X2RlZmVyKQo+ICAgICAgewo+ICAg ICAgICAgIHByaW50ayhYRU5MT0dfR19XQVJOSU5HCj4gICAgICAgICAgICAgICAgICJQVkggYXR0 ZW1wdGluZyB0byB0dXJuIG9mZiBQRS9QRy4gQ1IwOiVseFxuIiwgdmFsdWUpOwo+IC0gICAgICAg IGdvdG8gZ3BmOwo+ICsgICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKPiAgICAgIH0K PiAKPiAgICAgIGlmICggbWF5X2RlZmVyICYmIHVubGlrZWx5KHYtPmRvbWFpbi0KPiA+YXJjaC5t b25pdG9yLndyaXRlX2N0cmxyZWdfZW5hYmxlZCAmCj4gQEAgLTIyNDMsNyArMjI1Nyw3IEBAIGlu dCBodm1fc2V0X2NyMCh1bnNpZ25lZCBsb25nIHZhbHVlLCBib29sX3QKPiBtYXlfZGVmZXIpCj4g ICAgICAgICAgICAgICAgICAgIW5lc3RlZGh2bV92bXN3aXRjaF9pbl9wcm9ncmVzcyh2KSApCj4g ICAgICAgICAgICAgIHsKPiAgICAgICAgICAgICAgICAgIEhWTV9EQkdfTE9HKERCR19MRVZFTF8x LCAiRW5hYmxlIHBhZ2luZyBiZWZvcmUgUEFFIGVuYWJsZSIpOwo+IC0gICAgICAgICAgICAgICAg Z290byBncGY7Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Cj4g ICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgSFZNX0RCR19MT0coREJHX0xFVkVMXzEsICJF bmFibGluZyBsb25nIG1vZGUiKTsKPiAgICAgICAgICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVz dF9lZmVyIHw9IEVGRVJfTE1BOwo+IEBAIC0yMjc2LDcgKzIyOTAsNyBAQCBpbnQgaHZtX3NldF9j cjAodW5zaWduZWQgbG9uZyB2YWx1ZSwgYm9vbF90Cj4gbWF5X2RlZmVyKQo+ICAgICAgICAgIHsK PiAgICAgICAgICAgICAgSFZNX0RCR19MT0coREJHX0xFVkVMXzEsICJHdWVzdCBhdHRlbXB0cyB0 byBjbGVhciBDUjAuUEcgIgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUgQ1I0LlBD SURFPTEiKTsKPiAtICAgICAgICAgICAgZ290byBncGY7Cj4gKyAgICAgICAgICAgIHJldHVybiBY ODZFTVVMX0VYQ0VQVElPTjsKPiAgICAgICAgICB9Cj4gCj4gICAgICAgICAgLyogV2hlbiBDUjAu UEcgaXMgY2xlYXJlZCwgTE1BIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkuICovCj4gQEAgLTIzMTAs MTAgKzIzMjQsNiBAQCBpbnQgaHZtX3NldF9jcjAodW5zaWduZWQgbG9uZyB2YWx1ZSwgYm9vbF90 Cj4gbWF5X2RlZmVyKQo+ICAgICAgfQo+IAo+ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKPiAt Cj4gLSBncGY6Cj4gLSAgICBodm1faW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAw KTsKPiAtICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKPiAgfQo+IAo+ICBpbnQgaHZtX3Nl dF9jcjModW5zaWduZWQgbG9uZyB2YWx1ZSwgYm9vbF90IG1heV9kZWZlcikKPiBAQCAtMjM3Myw3 ICsyMzgzLDcgQEAgaW50IGh2bV9zZXRfY3I0KHVuc2lnbmVkIGxvbmcgdmFsdWUsIGJvb2xfdAo+ IG1heV9kZWZlcikKPiAgICAgICAgICBIVk1fREJHX0xPRyhEQkdfTEVWRUxfMSwKPiAgICAgICAg ICAgICAgICAgICAgICAiR3Vlc3QgYXR0ZW1wdHMgdG8gc2V0IHJlc2VydmVkIGJpdCBpbiBDUjQ6 ICVseCIsCj4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOwo+IC0gICAgICAgIGdvdG8gZ3Bm Owo+ICsgICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKPiAgICAgIH0KPiAKPiAgICAg IGlmICggISh2YWx1ZSAmIFg4Nl9DUjRfUEFFKSApCj4gQEAgLTIzODIsMTIgKzIzOTIsMTIgQEAg aW50IGh2bV9zZXRfY3I0KHVuc2lnbmVkIGxvbmcgdmFsdWUsIGJvb2xfdAo+IG1heV9kZWZlcikK PiAgICAgICAgICB7Cj4gICAgICAgICAgICAgIEhWTV9EQkdfTE9HKERCR19MRVZFTF8xLCAiR3Vl c3QgY2xlYXJlZCBDUjQuUEFFIHdoaWxlICIKPiAgICAgICAgICAgICAgICAgICAgICAgICAgIkVG RVIuTE1BIGlzIHNldCIpOwo+IC0gICAgICAgICAgICBnb3RvIGdwZjsKPiArICAgICAgICAgICAg cmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwo+ICAgICAgICAgIH0KPiAgICAgICAgICBpZiAoIGlz X3B2aF92Y3B1KHYpICkKPiAgICAgICAgICB7Cj4gICAgICAgICAgICAgIEhWTV9EQkdfTE9HKERC R19MRVZFTF8xLCAiMzItYml0IFBWSCBndWVzdCBjbGVhcmVkIENSNC5QQUUiKTsKPiAtICAgICAg ICAgICAgZ290byBncGY7Cj4gKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsK PiAgICAgICAgICB9Cj4gICAgICB9Cj4gCj4gQEAgLTIzOTksNyArMjQwOSw3IEBAIGludCBodm1f c2V0X2NyNCh1bnNpZ25lZCBsb25nIHZhbHVlLCBib29sX3QKPiBtYXlfZGVmZXIpCj4gICAgICB7 Cj4gICAgICAgICAgSFZNX0RCR19MT0coREJHX0xFVkVMXzEsICJHdWVzdCBhdHRlbXB0cyB0byBj aGFuZ2UgQ1I0LlBDSURFCj4gZnJvbSAiCj4gICAgICAgICAgICAgICAgICAgICAgIjAgdG8gMSB3 aGlsZSBlaXRoZXIgRUZFUi5MTUE9MCBvciBDUjNbMTE6MF0hPTAwMEgiKTsKPiAtICAgICAgICBn b3RvIGdwZjsKPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Cj4gICAgICB9Cj4g Cj4gICAgICBpZiAoIG1heV9kZWZlciAmJiB1bmxpa2VseSh2LT5kb21haW4tCj4gPmFyY2gubW9u aXRvci53cml0ZV9jdHJscmVnX2VuYWJsZWQgJgo+IEBAIC0yNDM0LDEwICsyNDQ0LDYgQEAgaW50 IGh2bV9zZXRfY3I0KHVuc2lnbmVkIGxvbmcgdmFsdWUsIGJvb2xfdAo+IG1heV9kZWZlcikKPiAg ICAgIH0KPiAKPiAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Cj4gLQo+IC0gZ3BmOgo+IC0gICAg aHZtX2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9mYXVsdCwgMCk7Cj4gLSAgICByZXR1cm4g WDg2RU1VTF9FWENFUFRJT047Cj4gIH0KPiAKPiAgYm9vbF90IGh2bV92aXJ0dWFsX3RvX2xpbmVh cl9hZGRyKAo+IEBAIC0zMDIwLDcgKzMwMjYsMTAgQEAgdm9pZCBodm1fdGFza19zd2l0Y2goCj4g ICAgICBpZiAoIGh2bV9sb2FkX3NlZ21lbnRfc2VsZWN0b3IoeDg2X3NlZ19sZHRyLCB0c3MubGR0 LCAwKSApCj4gICAgICAgICAgZ290byBvdXQ7Cj4gCj4gLSAgICBpZiAoIGh2bV9zZXRfY3IzKHRz cy5jcjMsIDEpICkKPiArICAgIHJjID0gaHZtX3NldF9jcjModHNzLmNyMywgMSk7Cj4gKyAgICBp ZiAoIHJjID09IFg4NkVNVUxfRVhDRVBUSU9OICkKPiArICAgICAgICBodm1faW5qZWN0X2h3X2V4 Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAwKTsKPiArICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZ ICkKPiAgICAgICAgICBnb3RvIG91dDsKPiAKPiAgICAgIHJlZ3MtPnJpcCAgICA9IHRzcy5laXA7 Cj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL25lc3RlZHN2bS5jCj4gYi94ZW4v YXJjaC94ODYvaHZtL3N2bS9uZXN0ZWRzdm0uYwo+IGluZGV4IGY3YjdhZGEuLmQ0ZmM4MWYgMTAw NjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9zdm0vbmVzdGVkc3ZtLmMKPiArKysgYi94ZW4v YXJjaC94ODYvaHZtL3N2bS9uZXN0ZWRzdm0uYwo+IEBAIC0yODYsNiArMjg2LDggQEAgc3RhdGlj IGludCBuc3ZtX3ZjcHVfaG9zdHJlc3RvcmUoc3RydWN0IHZjcHUgKnYsCj4gc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MpCj4gICAgICAvKiBDUjQgKi8KPiAgICAgIHYtPmFyY2guaHZtX3ZjcHUu Z3Vlc3RfY3JbNF0gPSBuMXZtY2ItPl9jcjQ7Cj4gICAgICByYyA9IGh2bV9zZXRfY3I0KG4xdm1j Yi0+X2NyNCwgMSk7Cj4gKyAgICBpZiAoIHJjID09IFg4NkVNVUxfRVhDRVBUSU9OICkKPiArICAg ICAgICBodm1faW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAwKTsKPiAgICAgIGlm IChyYyAhPSBYODZFTVVMX09LQVkpCj4gICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgImh2 bV9zZXRfY3I0IGZhaWxlZCwgcmM6ICV1XG4iLCByYyk7Cj4gCj4gQEAgLTI5NSw2ICsyOTcsOCBA QCBzdGF0aWMgaW50IG5zdm1fdmNwdV9ob3N0cmVzdG9yZShzdHJ1Y3QgdmNwdSAqdiwKPiBzdHJ1 Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPiAgICAgIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3Jb MF0gPSBuMXZtY2ItPl9jcjAgfCBYODZfQ1IwX1BFOwo+ICAgICAgbjF2bWNiLT5yZmxhZ3MgJj0g flg4Nl9FRkxBR1NfVk07Cj4gICAgICByYyA9IGh2bV9zZXRfY3IwKG4xdm1jYi0+X2NyMCB8IFg4 Nl9DUjBfUEUsIDEpOwo+ICsgICAgaWYgKCByYyA9PSBYODZFTVVMX0VYQ0VQVElPTiApCj4gKyAg ICAgICAgaHZtX2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9mYXVsdCwgMCk7Cj4gICAgICBp ZiAocmMgIT0gWDg2RU1VTF9PS0FZKQo+ICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJo dm1fc2V0X2NyMCBmYWlsZWQsIHJjOiAldVxuIiwgcmMpOwo+ICAgICAgc3ZtLT5uc19jcjAgPSB2 LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdOwo+IEBAIC0zMjEsNiArMzI1LDggQEAgc3RhdGlj IGludCBuc3ZtX3ZjcHVfaG9zdHJlc3RvcmUoc3RydWN0IHZjcHUgKnYsCj4gc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MpCj4gICAgICAgICAgLyogaHZtX3NldF9jcjMoKSBiZWxvdyBzZXRzIHYt PmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbM10gZm9yIHVzLiAqLwo+ICAgICAgfQo+ICAgICAgcmMg PSBodm1fc2V0X2NyMyhuMXZtY2ItPl9jcjMsIDEpOwo+ICsgICAgaWYgKCByYyA9PSBYODZFTVVM X0VYQ0VQVElPTiApCj4gKyAgICAgICAgaHZtX2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9m YXVsdCwgMCk7Cj4gICAgICBpZiAocmMgIT0gWDg2RU1VTF9PS0FZKQo+ICAgICAgICAgIGdkcHJp bnRrKFhFTkxPR19FUlIsICJodm1fc2V0X2NyMyBmYWlsZWQsIHJjOiAldVxuIiwgcmMpOwo+IAo+ IEBAIC01NDgsNiArNTU0LDggQEAgc3RhdGljIGludCBuc3ZtX3ZtY2JfcHJlcGFyZTR2bXJ1bihz dHJ1Y3QgdmNwdSAqdiwKPiBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPiAgICAgIC8qIENS NCAqLwo+ICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0XSA9IG5zX3ZtY2ItPl9jcjQ7 Cj4gICAgICByYyA9IGh2bV9zZXRfY3I0KG5zX3ZtY2ItPl9jcjQsIDEpOwo+ICsgICAgaWYgKCBy YyA9PSBYODZFTVVMX0VYQ0VQVElPTiApCj4gKyAgICAgICAgaHZtX2luamVjdF9od19leGNlcHRp b24oVFJBUF9ncF9mYXVsdCwgMCk7Cj4gICAgICBpZiAocmMgIT0gWDg2RU1VTF9PS0FZKQo+ICAg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsICJodm1fc2V0X2NyNCBmYWlsZWQsIHJjOiAldVxu IiwgcmMpOwo+IAo+IEBAIC01NTYsNiArNTY0LDggQEAgc3RhdGljIGludCBuc3ZtX3ZtY2JfcHJl cGFyZTR2bXJ1bihzdHJ1Y3QgdmNwdSAqdiwKPiBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK PiAgICAgIGNyMCA9IG5lc3RlZHN2bV9mcHVfdm1lbnRyeShzdm0tPm5zX2NyMCwgbnNfdm1jYiwg bjF2bWNiLCBuMnZtY2IpOwo+ICAgICAgdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jclswXSA9IG5z X3ZtY2ItPl9jcjA7Cj4gICAgICByYyA9IGh2bV9zZXRfY3IwKGNyMCwgMSk7Cj4gKyAgICBpZiAo IHJjID09IFg4NkVNVUxfRVhDRVBUSU9OICkKPiArICAgICAgICBodm1faW5qZWN0X2h3X2V4Y2Vw dGlvbihUUkFQX2dwX2ZhdWx0LCAwKTsKPiAgICAgIGlmIChyYyAhPSBYODZFTVVMX09LQVkpCj4g ICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwgImh2bV9zZXRfY3IwIGZhaWxlZCwgcmM6ICV1 XG4iLCByYyk7Cj4gCj4gQEAgLTU3Miw2ICs1ODIsOCBAQCBzdGF0aWMgaW50IG5zdm1fdm1jYl9w cmVwYXJlNHZtcnVuKHN0cnVjdCB2Y3B1ICp2LAo+IHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz KQo+IAo+ICAgICAgICAgIC8qIGh2bV9zZXRfY3IzKCkgYmVsb3cgc2V0cyB2LT5hcmNoLmh2bV92 Y3B1Lmd1ZXN0X2NyWzNdIGZvciB1cy4gKi8KPiAgICAgICAgICByYyA9IGh2bV9zZXRfY3IzKG5z X3ZtY2ItPl9jcjMsIDEpOwo+ICsgICAgICAgIGlmICggcmMgPT0gWDg2RU1VTF9FWENFUFRJT04g KQo+ICsgICAgICAgICAgICBodm1faW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAw KTsKPiAgICAgICAgICBpZiAocmMgIT0gWDg2RU1VTF9PS0FZKQo+ICAgICAgICAgICAgICBnZHBy aW50ayhYRU5MT0dfRVJSLCAiaHZtX3NldF9jcjMgZmFpbGVkLCByYzogJXVcbiIsIHJjKTsKPiAg ICAgIH0gZWxzZSBpZiAocGFnaW5nX21vZGVfaGFwKHYtPmRvbWFpbikpIHsKPiBAQCAtNTg0LDYg KzU5Niw4IEBAIHN0YXRpYyBpbnQgbnN2bV92bWNiX3ByZXBhcmU0dm1ydW4oc3RydWN0IHZjcHUg KnYsCj4gc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4gICAgICAgICAgICovCj4gICAgICAg ICAgLyogaHZtX3NldF9jcjMoKSBiZWxvdyBzZXRzIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3Jb M10gZm9yIHVzLiAqLwo+ICAgICAgICAgIHJjID0gaHZtX3NldF9jcjMobnNfdm1jYi0+X2NyMywg MSk7Cj4gKyAgICAgICAgaWYgKCByYyA9PSBYODZFTVVMX0VYQ0VQVElPTiApCj4gKyAgICAgICAg ICAgIGh2bV9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3BfZmF1bHQsIDApOwo+ICAgICAgICAg IGlmIChyYyAhPSBYODZFTVVMX09LQVkpCj4gICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19F UlIsICJodm1fc2V0X2NyMyBmYWlsZWQsIHJjOiAldVxuIiwgcmMpOwo+ICAgICAgfSBlbHNlIHsK PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMgYi94ZW4vYXJjaC94ODYv aHZtL3ZteC92bXguYwo+IGluZGV4IDViMTcxN2QuLmMyY2QxMmQgMTAwNjQ0Cj4gLS0tIGEveGVu L2FyY2gveDg2L2h2bS92bXgvdm14LmMKPiArKysgYi94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXgu Ywo+IEBAIC0yNDU5LDEzICsyNDU5LDE4IEBAIHN0YXRpYyBpbnQgdm14X2NyX2FjY2Vzcyh1bnNp Z25lZCBsb25nCj4gZXhpdF9xdWFsaWZpY2F0aW9uKQo+ICAgICAgfQo+ICAgICAgY2FzZSBWTVhf Q09OVFJPTF9SRUdfQUNDRVNTX1RZUEVfTE1TVzogewo+ICAgICAgICAgIHVuc2lnbmVkIGxvbmcg dmFsdWUgPSBjdXJyLT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzBdOwo+ICsgICAgICAgIGludCBy YzsKPiAKPiAgICAgICAgICAvKiBMTVNXIGNhbiAoMSkgc2V0IFBFOyAoMikgc2V0IG9yIGNsZWFy IE1QLCBFTSwgYW5kIFRTLiAqLwo+ICAgICAgICAgIHZhbHVlID0gKHZhbHVlICYgfihYODZfQ1Iw X01QfFg4Nl9DUjBfRU18WDg2X0NSMF9UUykpIHwKPiAgICAgICAgICAgICAgICAgIChWTVhfQ09O VFJPTF9SRUdfQUNDRVNTX0RBVEEoZXhpdF9xdWFsaWZpY2F0aW9uKSAmCj4gICAgICAgICAgICAg ICAgICAgKFg4Nl9DUjBfUEV8WDg2X0NSMF9NUHxYODZfQ1IwX0VNfFg4Nl9DUjBfVFMpKTsKPiAg ICAgICAgICBIVk1UUkFDRV9MT05HXzFEKExNU1csIHZhbHVlKTsKPiAtICAgICAgICByZXR1cm4g aHZtX3NldF9jcjAodmFsdWUsIDEpOwo+ICsKPiArICAgICAgICBpZiAoIChyYyA9IGh2bV9zZXRf Y3IwKHZhbHVlLCAxKSkgPT0gWDg2RU1VTF9FWENFUFRJT04gKQo+ICsgICAgICAgICAgICBodm1f aW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAwKTsKPiArCj4gKyAgICAgICAgcmV0 dXJuIHJjOwo+ICAgICAgfQo+ICAgICAgZGVmYXVsdDoKPiAgICAgICAgICBCVUcoKTsKPiBkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS92bXgvdnZteC5jCj4gYi94ZW4vYXJjaC94ODYvaHZt L3ZteC92dm14LmMKPiBpbmRleCAwYWVmN2E3Li44YTQ4NmY1IDEwMDY0NAo+IC0tLSBhL3hlbi9h cmNoL3g4Ni9odm0vdm14L3Z2bXguYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vdm14L3Z2bXgu Ywo+IEBAIC0xMDQ2LDkgKzEwNDYsMTggQEAgc3RhdGljIHZvaWQgbG9hZF9zaGFkb3dfZ3Vlc3Rf c3RhdGUoc3RydWN0IHZjcHUKPiAqdikKPiAKPiAgICAgIG52Y3B1LT5ndWVzdF9jclswXSA9IGdl dF92dm1jcyh2LCBDUjBfUkVBRF9TSEFET1cpOwo+ICAgICAgbnZjcHUtPmd1ZXN0X2NyWzRdID0g Z2V0X3Z2bWNzKHYsIENSNF9SRUFEX1NIQURPVyk7Cj4gLSAgICBodm1fc2V0X2NyMChnZXRfdnZt Y3ModiwgR1VFU1RfQ1IwKSwgMSk7Cj4gLSAgICBodm1fc2V0X2NyNChnZXRfdnZtY3ModiwgR1VF U1RfQ1I0KSwgMSk7Cj4gLSAgICBodm1fc2V0X2NyMyhnZXRfdnZtY3ModiwgR1VFU1RfQ1IzKSwg MSk7Cj4gKwo+ICsgICAgcmMgPSBodm1fc2V0X2NyMChnZXRfdnZtY3ModiwgR1VFU1RfQ1IwKSwg MSk7Cj4gKyAgICBpZiAoIHJjID09IFg4NkVNVUxfRVhDRVBUSU9OICkKPiArICAgICAgICBodm1f aW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAwKTsKPiArCj4gKyAgICByYyA9IGh2 bV9zZXRfY3I0KGdldF92dm1jcyh2LCBHVUVTVF9DUjQpLCAxKTsKPiArICAgIGlmICggcmMgPT0g WDg2RU1VTF9FWENFUFRJT04gKQo+ICsgICAgICAgIGh2bV9pbmplY3RfaHdfZXhjZXB0aW9uKFRS QVBfZ3BfZmF1bHQsIDApOwo+ICsKPiArICAgIHJjID0gaHZtX3NldF9jcjMoZ2V0X3Z2bWNzKHYs IEdVRVNUX0NSMyksIDEpOwo+ICsgICAgaWYgKCByYyA9PSBYODZFTVVMX0VYQ0VQVElPTiApCj4g KyAgICAgICAgaHZtX2luamVjdF9od19leGNlcHRpb24oVFJBUF9ncF9mYXVsdCwgMCk7Cj4gCj4g ICAgICBjb250cm9sID0gZ2V0X3Z2bWNzKHYsIFZNX0VOVFJZX0NPTlRST0xTKTsKPiAgICAgIGlm ICggY29udHJvbCAmIFZNX0VOVFJZX0xPQURfR1VFU1RfUEFUICkKPiBAQCAtMTIzNyw5ICsxMjQ2 LDE3IEBAIHN0YXRpYyB2b2lkIGxvYWRfdnZtY3NfaG9zdF9zdGF0ZShzdHJ1Y3QgdmNwdSAqdikK PiAgICAgICAgICBfX3Ztd3JpdGUodm1jc19oMmdfZmllbGRbaV0uZ3Vlc3RfZmllbGQsIHIpOwo+ ICAgICAgfQo+IAo+IC0gICAgaHZtX3NldF9jcjAoZ2V0X3Z2bWNzKHYsIEhPU1RfQ1IwKSwgMSk7 Cj4gLSAgICBodm1fc2V0X2NyNChnZXRfdnZtY3ModiwgSE9TVF9DUjQpLCAxKTsKPiAtICAgIGh2 bV9zZXRfY3IzKGdldF92dm1jcyh2LCBIT1NUX0NSMyksIDEpOwo+ICsgICAgcmMgPSBodm1fc2V0 X2NyMChnZXRfdnZtY3ModiwgSE9TVF9DUjApLCAxKTsKPiArICAgIGlmICggcmMgPT0gWDg2RU1V TF9FWENFUFRJT04gKQo+ICsgICAgICAgIGh2bV9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZ3Bf ZmF1bHQsIDApOwo+ICsKPiArICAgIHJjID0gaHZtX3NldF9jcjQoZ2V0X3Z2bWNzKHYsIEhPU1Rf Q1I0KSwgMSk7Cj4gKyAgICBpZiAoIHJjID09IFg4NkVNVUxfRVhDRVBUSU9OICkKPiArICAgICAg ICBodm1faW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2dwX2ZhdWx0LCAwKTsKPiArCj4gKyAgICBy YyA9IGh2bV9zZXRfY3IzKGdldF92dm1jcyh2LCBIT1NUX0NSMyksIDEpOwo+ICsgICAgaWYgKCBy YyA9PSBYODZFTVVMX0VYQ0VQVElPTiApCj4gKyAgICAgICAgaHZtX2luamVjdF9od19leGNlcHRp b24oVFJBUF9ncF9mYXVsdCwgMCk7Cj4gCj4gICAgICBjb250cm9sID0gZ2V0X3Z2bWNzKHYsIFZN X0VYSVRfQ09OVFJPTFMpOwo+ICAgICAgaWYgKCBjb250cm9sICYgVk1fRVhJVF9MT0FEX0hPU1Rf UEFUICkKPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3VwcG9ydC5oIGIv eGVuL2luY2x1ZGUvYXNtLQo+IHg4Ni9odm0vc3VwcG9ydC5oCj4gaW5kZXggY2I0MTM2NC4uNjMy ZWI5MCAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdXBwb3J0LmgKPiAr KysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdXBwb3J0LmgKPiBAQCAtMTE5LDcgKzExOSwx MSBAQCBpbnQgX19tdXN0X2NoZWNrIGh2bV9oYW5kbGVfeHNldGJ2KHUzMiBpbmRleCwKPiB1NjQg bmV3X2J2KTsKPiAKPiAgdm9pZCBodm1fc2hhZG93X2hhbmRsZV9jZChzdHJ1Y3QgdmNwdSAqdiwg dW5zaWduZWQgbG9uZyB2YWx1ZSk7Cj4gCj4gLS8qIFRoZXNlIGZ1bmN0aW9ucyBhbGwgcmV0dXJu IFg4NkVNVUwgcmV0dXJuIGNvZGVzLiAqLwo+ICsvKgo+ICsgKiBUaGVzZSBmdW5jdGlvbnMgYWxs IHJldHVybiBYODZFTVVMIHJldHVybiBjb2Rlcy4gIEZvciBodm1fc2V0XyooKSwgdGhlCj4gKyAq IGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaW5qZWN0aW5nICNHUFswXSBpZiBYODZFTVVMX0VY Q0VQVElPTiBpcwo+ICsgKiByZXR1cm5lZC4KPiArICovCj4gIGludCBodm1fc2V0X2VmZXIodWlu dDY0X3QgdmFsdWUpOwo+ICBpbnQgaHZtX3NldF9jcjAodW5zaWduZWQgbG9uZyB2YWx1ZSwgYm9v bF90IG1heV9kZWZlcik7Cj4gIGludCBodm1fc2V0X2NyMyh1bnNpZ25lZCBsb25nIHZhbHVlLCBi b29sX3QgbWF5X2RlZmVyKTsKPiAtLQo+IDIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==