From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau =?iso-8859-1?Q?Monn=E9?= Subject: Re: [PATCH v4 14/28] x86/vvtd: Handle interrupt translation faults Date: Mon, 12 Feb 2018 12:55:06 +0000 Message-ID: <20180212125506.52ojn4dlr5s2xsnl@MacBook-Pro-de-Roger.local> References: <1510899755-40237-1-git-send-email-chao.gao@intel.com> <1510899755-40237-15-git-send-email-chao.gao@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1510899755-40237-15-git-send-email-chao.gao@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Chao Gao Cc: Lan Tianyu , Kevin Tian , Stefano Stabellini , Wei Liu , George Dunlap , Ian Jackson , Tim Deegan , xen-devel@lists.xen.org, Jan Beulich , Andrew Cooper List-Id: xen-devel@lists.xenproject.org T24gRnJpLCBOb3YgMTcsIDIwMTcgYXQgMDI6MjI6MjFQTSArMDgwMCwgQ2hhbyBHYW8gd3JvdGU6 Cj4gSW50ZXJydXB0IHRyYW5zbGF0aW9uIGZhdWx0cyBhcmUgbm9uLXJlY292ZXJhYmxlIGZhdWx0 LiBXaGVuIGZhdWx0cwo+IGFyZSB0cmlnZ2VyZWQsIGl0IG5lZWRzIHRvIHBvcHVsYXRlIGZhdWx0 IGluZm8gdG8gRmF1bHQgUmVjb3JkaW5nCj4gUmVnaXN0ZXJzIGFuZCBpbmplY3QgbXNpIGludGVy cnVwdCB0byBub3RpZnkgZ3Vlc3QgSU9NTVUgZHJpdmVyCj4gdG8gZGVhbCB3aXRoIGZhdWx0cy4K PiAKPiBUaGlzIHBhdGNoIGVtdWxhdGVzIGhhcmR3YXJlJ3MgaGFuZGxpbmcgaW50ZXJydXB0IHRy YW5zbGF0aW9uCj4gZmF1bHRzIChtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9jZXNzIGNh biBiZSBmb3VuZCBpbiBWVC1kIHNwZWMsCj4gY2hpcHRlciAiVHJhbnNsYXRpb24gRmF1bHRzIiwg c2VjdGlvbiAiTm9uLVJlY292ZXJhYmxlIEZhdWx0Cj4gUmVwb3J0aW5nIiBhbmQgc2VjdGlvbiAi Tm9uLVJlY292ZXJhYmxlIExvZ2dpbmciKS4KPiBTcGVjaWZpY2FsbHksIHZpb21tdV9yZWNvcmRf ZmF1bHQoKSByZWNvcmRzIHRoZSBmYXVsdCBpbmZvcm1hdGlvbiBhbmQKPiB2aW9tbXVfcmVwb3J0 X25vbl9yZWNvdmVyYWJsZV9mYXVsdCgpIHJlcG9ydHMgZmF1bHRzIHRvIHNvZnR3YXJlLgo+IEN1 cnJlbnRseSwgb25seSBQcmltYXJ5IEZhdWx0IExvZ2dpbmcgaXMgc3VwcG9ydGVkIGFuZCB0aGUg TnVtYmVyIG9mCj4gRmF1bHQtcmVjb3JkaW5nIFJlZ2lzdGVycyBpcyAxLgo+IAo+IFNpZ25lZC1v ZmYtYnk6IENoYW8gR2FvIDxjaGFvLmdhb0BpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTGFu IFRpYW55dSA8dGlhbnl1LmxhbkBpbnRlbC5jb20+Cj4gCj4gLS0tCj4gdjQ6Cj4gIC0gaW50cm9k dWNlIGEgbG9jayB0byBwcm90ZWN0IGZhdWx0LWV2ZW50IHJlbGF0ZWQgcmVncwo+IC0tLQo+ICB4 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuaCB8ICA1MSArKysrKystCj4gIHhlbi9k cml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMgIHwgMjg4ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLQo+ICAyIGZpbGVzIGNoYW5nZWQsIDMzMyBpbnNlcnRpb25zKCspLCA2 IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92 dGQvaW9tbXUuaCBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5oCj4gaW5kZXgg ODJlZGQyYS4uZGMyZGY3NSAxMDA2NDQKPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92 dGQvaW9tbXUuaAo+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5oCj4g QEAgLTE5NiwyNiArMTk2LDY3IEBACj4gICNkZWZpbmUgRE1BX0NDTURfQ0FJR19NQVNLKHgpICgo KHU2NCl4KSAmICgodTY0KSAweDMgPDwgNTkpKQo+ICAKPiAgLyogRkVDVExfUkVHICovCj4gLSNk ZWZpbmUgRE1BX0ZFQ1RMX0lNICAgICAgICAoKHVpbnQzMl90KTEgPDwgMzEpCj4gKyNkZWZpbmUg RE1BX0ZFQ1RMX0lNX1NISUZUICAzMQo+ICsjZGVmaW5lIERNQV9GRUNUTF9JUF9TSElGVCAgMzAK PiArI2RlZmluZSBETUFfRkVDVExfSU0gICAgICAgICgodWludDMyX3QpMSA8PCBETUFfRkVDVExf SU1fU0hJRlQpCj4gKyNkZWZpbmUgRE1BX0ZFQ1RMX0lQICAgICAgICAoKHVpbnQzMl90KTEgPDwg RE1BX0ZFQ1RMX0lQX1NISUZUKQo+ICAKPiAgLyogRlNUU19SRUcgKi8KPiAtI2RlZmluZSBETUFf RlNUU19QRk8gICAgICAgICgodWludDMyX3QpMSA8PCAwKQo+IC0jZGVmaW5lIERNQV9GU1RTX1BQ RiAgICAgICAgKCh1aW50MzJfdCkxIDw8IDEpCj4gKyNkZWZpbmUgRE1BX0ZTVFNfUEZPX1NISUZU ICAwCj4gKyNkZWZpbmUgRE1BX0ZTVFNfUFBGX1NISUZUICAxCj4gKyNkZWZpbmUgRE1BX0ZTVFNf UFJPX1NISUZUICA3Cj4gKwo+ICsjZGVmaW5lIERNQV9GU1RTX1BGTyAgICAgICAgKCh1aW50MzJf dCkxIDw8IERNQV9GU1RTX1BGT19TSElGVCkKPiArI2RlZmluZSBETUFfRlNUU19QUEYgICAgICAg ICgodWludDMyX3QpMSA8PCBETUFfRlNUU19QUEZfU0hJRlQpCj4gICNkZWZpbmUgRE1BX0ZTVFNf QUZPICAgICAgICAoKHVpbnQzMl90KTEgPDwgMikKPiAgI2RlZmluZSBETUFfRlNUU19BUEYgICAg ICAgICgodWludDMyX3QpMSA8PCAzKQo+ICAjZGVmaW5lIERNQV9GU1RTX0lRRSAgICAgICAgKCh1 aW50MzJfdCkxIDw8IDQpCj4gICNkZWZpbmUgRE1BX0ZTVFNfSUNFICAgICAgICAoKHVpbnQzMl90 KTEgPDwgNSkKPiAgI2RlZmluZSBETUFfRlNUU19JVEUgICAgICAgICgodWludDMyX3QpMSA8PCA2 KQo+IC0jZGVmaW5lIERNQV9GU1RTX0ZBVUxUUyAgICBETUFfRlNUU19QRk8gfCBETUFfRlNUU19Q UEYgfCBETUFfRlNUU19BRk8gfCBETUFfRlNUU19BUEYgfCBETUFfRlNUU19JUUUgfCBETUFfRlNU U19JQ0UgfCBETUFfRlNUU19JVEUKPiArI2RlZmluZSBETUFfRlNUU19QUk8gICAgICAgICgodWlu dDMyX3QpMSA8PCBETUFfRlNUU19QUk9fU0hJRlQpCj4gKyNkZWZpbmUgRE1BX0ZTVFNfRkFVTFRT ICAgICAoRE1BX0ZTVFNfUEZPIHwgRE1BX0ZTVFNfUFBGIHwgRE1BX0ZTVFNfQUZPIHwgXAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9GU1RTX0FQRiB8IERNQV9GU1RTX0lRRSB8 IERNQV9GU1RTX0lDRSB8IFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfRlNU U19JVEUgfCBETUFfRlNUU19QUk8pCj4gKyNkZWZpbmUgRE1BX0ZTVFNfUlcxQ1MgICAgICAoRE1B X0ZTVFNfUEZPIHwgRE1BX0ZTVFNfQUZPIHwgRE1BX0ZTVFNfQVBGIHwgXAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERNQV9GU1RTX0lRRSB8IERNQV9GU1RTX0lDRSB8IERNQV9GU1RT X0lURSB8IFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfRlNUU19QUk8pCj4g ICNkZWZpbmUgZG1hX2ZzdHNfZmF1bHRfcmVjb3JkX2luZGV4KHMpICgoKHMpID4+IDgpICYgMHhm ZikKPiAgCj4gIC8qIEZSQ0RfUkVHLCAzMiBiaXRzIGFjY2VzcyAqLwo+IC0jZGVmaW5lIERNQV9G UkNEX0YgKCgodTY0KTEpIDw8IDMxKQo+ICsjZGVmaW5lIERNQV9GUkNEX0xFTiAgICAgICAgICAg IDB4MTAKPiArI2RlZmluZSBETUFfRlJDRDJfT0ZGU0VUICAgICAgICAweDgKPiArI2RlZmluZSBE TUFfRlJDRDNfT0ZGU0VUICAgICAgICAweGMKPiArI2RlZmluZSBETUFfRlJDRF9GX1NISUZUICAg ICAgICAzMQo+ICsjZGVmaW5lIERNQV9GUkNEX0YgKCh1NjQpMSA8PCBETUFfRlJDRF9GX1NISUZU KQo+ICAjZGVmaW5lIGRtYV9mcmNkX3R5cGUoZCkgKChkID4+IDMwKSAmIDEpCj4gICNkZWZpbmUg ZG1hX2ZyY2RfZmF1bHRfcmVhc29uKGMpIChjICYgMHhmZikKPiAgI2RlZmluZSBkbWFfZnJjZF9z b3VyY2VfaWQoYykgKGMgJiAweGZmZmYpCj4gICNkZWZpbmUgZG1hX2ZyY2RfcGFnZV9hZGRyKGQp IChkICYgKCgodTY0KS0xKSA8PCAxMikpIC8qIGxvdyA2NCBiaXQgKi8KPiAgCj4gK3N0cnVjdCB2 dGRfZmF1bHRfcmVjb3JkX3JlZ2lzdGVyCj4gK3sKPiArICAgIHVuaW9uIHsKPiArICAgICAgICBz dHJ1Y3Qgewo+ICsgICAgICAgICAgICB1aW50NjRfdCBsbzsKPiArICAgICAgICAgICAgdWludDY0 X3QgaGk7Cj4gKyAgICAgICAgfSBiaXRzOwo+ICsgICAgICAgIHN0cnVjdCB7Cj4gKyAgICAgICAg ICAgIHVpbnQ2NF90IHJzdmQwICAgICAgICAgIDoxMiwKPiArICAgICAgICAgICAgICAgICAgICAg ZmF1bHRfaW5mbyAgICAgOjUyOwo+ICsgICAgICAgICAgICB1aW50NjRfdCBzb3VyY2VfaWQgICAg ICA6MTYsCj4gKyAgICAgICAgICAgICAgICAgICAgIHJzdmQxICAgICAgICAgIDo5LAo+ICsgICAg ICAgICAgICAgICAgICAgICBwbXIgICAgICAgICAgICA6MSwgIC8qIFByaXZpbGVnZSBNb2RlIFJl cXVlc3RlZCAqLwo+ICsgICAgICAgICAgICAgICAgICAgICBleGUgICAgICAgICAgICA6MSwgIC8q IEV4ZWN1dGUgUGVybWlzc2lvbiBSZXF1ZXN0ZWQgKi8KPiArICAgICAgICAgICAgICAgICAgICAg cGFzaWRfcCAgICAgICAgOjEsICAvKiBQQVNJRCBQcmVzZW50ICovCj4gKyAgICAgICAgICAgICAg ICAgICAgIGZhdWx0X3JlYXNvbiAgIDo4LCAgLyogRmF1bHQgUmVhc29uICovCj4gKyAgICAgICAg ICAgICAgICAgICAgIHBhc2lkX3ZhbCAgICAgIDoyMCwgLyogUEFTSUQgVmFsdWUgKi8KPiArICAg ICAgICAgICAgICAgICAgICAgYWRkcl90eXBlICAgICAgOjIsICAvKiBBZGRyZXNzIFR5cGUgKi8K PiArICAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgICAgOjEsICAvKiBUeXBlLiAoMCkg V3JpdGUgKDEpIFJlYWQvQXRvbWljT3AgKi8KPiArICAgICAgICAgICAgICAgICAgICAgZmF1bHQg ICAgICAgICAgOjE7ICAvKiBGYXVsdCAqLwo+ICsgICAgICAgIH0gZmllbGRzOwo+ICsgICAgfTsK PiArfTsKPiArCj4gIC8qIEludGVycnVwdCByZW1hcHBpbmcgdHJhbnNpdGlvbiBmYXVsdHMgKi8K PiAgI2RlZmluZSBWVERfRlJfSVJfUkVRX1JTVkQgICAgICAweDIwCj4gICNkZWZpbmUgVlREX0ZS X0lSX0lOREVYX09WRVIgICAgMHgyMQo+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhy b3VnaC92dGQvdnZ0ZC5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYwo+IGlu ZGV4IGQzZGVjMDEuLjgzODA1ZDEgMTAwNjQ0Cj4gLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvdnRkL3Z2dGQuYwo+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMK PiBAQCAtNDMsNiArNDMsNyBAQAo+ICBzdHJ1Y3QgaHZtX2h3X3Z2dGQgewo+ICAgICAgYm9vbCBl aW1fZW5hYmxlZDsKPiAgICAgIGJvb2wgaW50cmVtYXBfZW5hYmxlZDsKPiArICAgIHVpbnQzMl90 IGZhdWx0X2luZGV4Owo+ICAKPiAgICAgIC8qIEludGVycnVwdCByZW1hcHBpbmcgdGFibGUgYmFz ZSBnZm4gYW5kIHRoZSBtYXggb2YgZW50cmllcyAqLwo+ICAgICAgdWludDE2X3QgaXJ0X21heF9l bnRyeTsKPiBAQCAtNTgsNiArNTksMTIgQEAgc3RydWN0IHZ2dGQgewo+ICAgICAgc3RydWN0IGRv bWFpbiAqZG9tYWluOwo+ICAgICAgLyogIyBvZiBpbi1mbGlnaHQgaW50ZXJydXB0cyAqLwo+ICAg ICAgYXRvbWljX3QgaW5mbGlnaHRfaW50cjsKPiArICAgIC8qCj4gKyAgICAgKiBUaGlzIGxvY2sg cHJvdGVjdHMgZmF1bHQtZXZlbnQgcmVsYXRlZCByZWdpc3RlcnMgKERNQVJfRkVYWFhfUkVHKS4K PiArICAgICAqIEl0J3MgdXNlZCBmb3IgZHJhaW5pbmcgaW4tZmxpZ2h0IGZhdWx0IGV2ZW50cyBi ZWZvcmUgcmVzcG9uZGluZwo+ICsgICAgICogZ3Vlc3QncyBwcm9ncmFtbWluZyB0byB0aG9zZSBy ZWdpc3RlcnMuCj4gKyAgICAgKi8KPiArICAgIHNwaW5sb2NrX3QgZmVfbG9jazsKCkkgc3RpbGwg dGhpbmsgYWxtb3N0IGlmIG5vdCBhbGwgb2YgdGhlIHZ2dGQgaGVscGVyIGZ1bmN0aW9ucyBzaG91 bGQgYmUKbXV0dWFsbHkgZXhjbHVzaXZlIChpZTogbG9ja2VkKSwgbm90IG9ubHkgdGhlIGZhdWx0 LWV2ZW50IHJlbGF0ZWQKcmVnaXN0ZXJzLiBJIGd1ZXNzIExpbnV4IG9yIG90aGVyIE9TZXMgYWxy ZWFkeSBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZQp2SU9NTVUgc29tZWhvdywgc28geW91ciBub3Qg c2VlaW5nIGFueSBlcnJvcnMuIEJ1dCBJJ20gcXVpdGUgc3VyZQp0aGluZ3Mgd2lsbCBmYWlsIGlu IHdlaXJkIHdheXMgaWYgYSBtYWxpY2lvdXMgZ3Vlc3RzIHN0YXJ0cyB0bwpjb25jdXJyZW50bHkg d3JpdGUgdG8gZGlmZmVyZW50IHZJT01NVSByZWdpc3RlcnMuCgo+ICAKPiAgICAgIHN0cnVjdCBo dm1faHdfdnZ0ZCBodzsKPiAgICAgIHZvaWQgKmlydF9iYXNlOwo+IEBAIC04Nyw2ICs5NCwyMSBA QCBib29sZWFuX3J1bnRpbWVfcGFyYW0oInZpb21tdV92ZXJib3NlIiwgdmlvbW11X3ZlcmJvc2Up Owo+ICAjZW5kaWYKPiAgCj4gICNkZWZpbmUgVlZURF9SRUdfUE9TKHZ2dGQsIG9mZnNldCkgJih2 dnRkLT5ody5yZWdzW29mZnNldC9zaXplb2YodWludDMyX3QpXSkKPiArc3RhdGljIGlubGluZSBp bnQgdnZ0ZF90ZXN0X2FuZF9zZXRfYml0KHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCByZWcs IGludCBucikKPiArewo+ICsgICAgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQobnIsIFZWVERfUkVH X1BPUyh2dnRkLCByZWcpKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgdnZ0ZF90ZXN0 X2FuZF9jbGVhcl9iaXQoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHJlZywKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5yKQo+ICt7Cj4gKyAgICBy ZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KG5yLCBWVlREX1JFR19QT1ModnZ0ZCwgcmVnKSk7Cj4g K30KClNvIGZvciBzZXQgYW5kIGNsZWFyIGJpdCB5b3UgdXNlIHRoZSBub24gbG9ja2VkIHZhcmlh bnRzIChwcmVmaXhlZCBieQpfXyksIGFuZCBoZXJlIHlvdSB1c2UgdGhlIGxvY2tlZCB2YXJpYW50 cyBvZiB0ZXN0IGFuZCBzZXQvY2xlYXIuIElzCnRoZXJlIGFueSByZWFzb24gZm9yIHRoaXM/IEkg d291bGQgZXhwZWN0IGxvY2tlZC91bmxvY2tlZCBiaXRvcHMgdG8gYmUKdXNlZCBjb25zaXN0ZW50 bHkgZm9yIGRlYWxpbmcgd2l0aCB0aGUgcmVnaXN0ZXJzIHVubGVzcyB0aGVyZSdzIGEKc3BlY2lm aWMgcmVhc29uIG5vdCB0byBkbyBzby4KCj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCB2dnRkX3Rl c3RfYml0KHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCByZWcsIGludCBucikKPiArewo+ICsg ICAgcmV0dXJuIHRlc3RfYml0KG5yLCBWVlREX1JFR19QT1ModnZ0ZCwgcmVnKSk7Cj4gK30KPiAg Cj4gIHN0YXRpYyBpbmxpbmUgdm9pZCB2dnRkX3NldF9iaXQoc3RydWN0IHZ2dGQgKnZ2dGQsIHVp bnQzMl90IHJlZywgaW50IG5yKQo+ICB7Cj4gQEAgLTIzOCw2ICsyNjAsMzAgQEAgc3RhdGljIGlu dCB2dnRkX2RlbGl2ZXJ5KHN0cnVjdCBkb21haW4gKmQsIHVpbnQ4X3QgdmVjdG9yLAo+ICAgICAg cmV0dXJuIDA7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIHZ2dGRfZ2VuZXJhdGVfaW50ZXJydXB0 KGNvbnN0IHN0cnVjdCB2dnRkICp2dnRkLCB1aW50NjRfdCBhZGRyLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkYXRhKQo+ICt7Cj4gKyAgICBib29sIGRt ID0gYWRkciAmIE1TSV9BRERSX0RFU1RNT0RFX01BU0s7CgpQbGVhc2UgdXNlIE1BU0tfRVhUUiBo ZXJlLiBBbHNvIGRlc3Rtb2RlIGlzIHVzdWFsbHkgdHJlYXRlZCBhcyBhbgp1aW50OF90IGluIHRo ZSByZXN0IG9mIHRoZSBYZW4gY29kZSAoc2VlIHZtc2lfZGVsaXZlcikuIEkgd291bGQKcHJvYmFi bHkga2VlcCB1c2luZyB1aW50OF90IGp1c3QgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIHJlc3Qg b2YgdGhlCmNvZGUuCgo+ICsgICAgdWludDMyX3QgZGVzdCA9IE1BU0tfRVhUUihhZGRyLCBNU0lf QUREUl9ERVNUX0lEX01BU0spOwo+ICsgICAgdWludDhfdCBkbG0gPSBNQVNLX0VYVFIoZGF0YSwg TVNJX0RBVEFfREVMSVZFUllfTU9ERV9NQVNLKTsKPiArICAgIHVpbnQ4X3QgdG0gPSBNQVNLX0VY VFIoZGF0YSwgTVNJX0RBVEFfVFJJR0dFUl9NQVNLKTsKPiArICAgIHVpbnQ4X3QgdmVjdG9yID0g ZGF0YSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwoKTUFTS19FWFRSIHBsZWFzZS4KCj4gKwo+ICsg ICAgdnZ0ZF9kZWJ1ZygiZCVkOiBnZW5lcmF0aW5nIG1zaSAlbHggJXhcbiIsIHZ2dGQtPmRvbWFp bi0+ZG9tYWluX2lkLCBhZGRyLAo+ICsgICAgICAgICAgICAgICBkYXRhKTsKPiArCj4gKyAgICBp ZiAoIHZ2dGQtPmh3LmVpbV9lbmFibGVkICkKPiArICAgICAgICBkZXN0IHw9IChhZGRyID4+IDQw KSA8PCA4OwoKVGhpcyA0MCBhbmQgOCBsb29rIGxpa2UgbWFnaWMgbnVtYmVycyB0byBtZSwgYnV0 IGl0J3MgbGlla2x5IG1lCm1pc3Npbmcgc29tZXRoaW5nLiBBbnkgcmVhc29uIG5vdCB0byB1c2Ug YWRkciA+PiAzMiBkaXJlY3RseT8gSW4gYW55CmNhc2UgSSB3b3VsZCByZWFsbHkgYXBwcmVjaWF0 ZSBpZiB5b3UgY291bGQgYWRkIGRlZmluZXMgZm9yIHRob3NlCmFuZC9vciBjb21tZW50cy4KCj4g Kwo+ICsgICAgdnZ0ZF9kZWxpdmVyeSh2dnRkLT5kb21haW4sIHZlY3RvciwgZGVzdCwgZG0sIGRs bSwgdG0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2dnRkX25vdGlmeV9mYXVsdChjb25zdCBz dHJ1Y3QgdnZ0ZCAqdnZ0ZCkKPiArewo+ICsgICAgdnZ0ZF9nZW5lcmF0ZV9pbnRlcnJ1cHQodnZ0 ZCwgdnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9GRUFERFJfUkVHKSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0ZFREFUQV9SRUcpKTsK PiArfQo+ICsKPiAgLyogQ29tcHV0aW5nIHRoZSBJUlRFIGluZGV4IGZvciBhIGdpdmVuIGludGVy cnVwdCByZXF1ZXN0LiBXaGVuIHN1Y2Nlc3MsIHJldHVybgo+ICAgKiAwIGFuZCBzZXQgaW5kZXgg dG8gcmVmZXJlbmNlIHRoZSBjb3JyZXNwb25kaW5nIElSVEUuIE90aGVyd2lzZSwgcmV0dXJuIDwg MCwKPiAgICogaS5lLiAtMSB3aGVuIHRoZSBpcnEgcmVxdWVzdCBpc24ndCBhbiByZW1hcHBpbmcg Zm9ybWF0Lgo+IEBAIC0yOTAsNiArMzM2LDE5OCBAQCBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGly dGVfZGVzdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgZGVzdCkKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IE1BU0tfRVhUUihkZXN0LCBJUlRFX3hBUElDX0RFU1RfTUFT Syk7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIHZ2dGRfcmVwb3J0X25vbl9yZWNvdmVyYWJsZV9m YXVsdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgaW50IHJlYXNvbikKPiArewo+ICsgICAgdWludDMyX3Qg ZnN0cyA9IHZ2dGRfZ2V0X3JlZyh2dnRkLCBETUFSX0ZTVFNfUkVHKTsKPiArCj4gKyAgICB2dnRk X3NldF9iaXQodnZ0ZCwgRE1BUl9GU1RTX1JFRywgcmVhc29uKTsKCnRlc3RfYW5kX3NldD8KCj4g Kwo+ICsgICAgLyoKPiArICAgICAqIEFjY29yb2RpbmcgdG8gVlQtZCBzcGVjICJOb24tUmVjb3Zl cmFibGUgRmF1bHQgRXZlbnQiIGNoYXB0ZXIsIGlmCj4gKyAgICAgKiB0aGVyZSBhcmUgYW55IHBy ZXZpb3VzbHkgcmVwb3J0ZWQgaW50ZXJydXB0IGNvbmRpdGlvbnMgdGhhdCBhcmUgeWV0IHRvCj4g KyAgICAgKiBiZSBzZXZpY2VzIGJ5IHNvZnR3YXJlLCB0aGUgRmF1bHQgRXZlbnQgaW50ZXJycnVw dCBpcyBub3QgZ2VuZXJhdGVkLgo+ICsgICAgICovCj4gKyAgICBpZiAoIGZzdHMgJiBETUFfRlNU U19GQVVMVFMgKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICB2dnRkX3NldF9iaXQodnZ0 ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNUTF9JUF9TSElGVCk7Cj4gKyAgICBpZiAoICF2dnRk X3Rlc3RfYml0KHZ2dGQsIERNQVJfRkVDVExfUkVHLCBETUFfRkVDVExfSU1fU0hJRlQpICkKPiAr ICAgIHsKPiArICAgICAgICB2dnRkX25vdGlmeV9mYXVsdCh2dnRkKTsKPiArICAgICAgICB2dnRk X2NsZWFyX2JpdCh2dnRkLCBETUFSX0ZFQ1RMX1JFRywgRE1BX0ZFQ1RMX0lQX1NISUZUKTsKPiAr ICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnZ0ZF91cGRhdGVfcHBmKHN0cnVjdCB2dnRk ICp2dnRkKQo+ICt7Cj4gKyAgICBpbnQgaTsKCnVuc2lnbmVkIGludC4KCj4gKyAgICB1aW50NjRf dCBjYXAgPSB2dnRkX2dldF9yZWdfcXVhZCh2dnRkLCBETUFSX0NBUF9SRUcpOwo+ICsgICAgdW5z aWduZWQgaW50IGJhc2UgPSBjYXBfZmF1bHRfcmVnX29mZnNldChjYXApOwo+ICsKPiArICAgIGZv ciAoIGkgPSAwOyBpIDwgY2FwX251bV9mYXVsdF9yZWdzKGNhcCk7IGkrKyApCj4gKyAgICB7Cj4g KyAgICAgICAgaWYgKCB2dnRkX3Rlc3RfYml0KHZ2dGQsIGJhc2UgKyBpICogRE1BX0ZSQ0RfTEVO ICsgRE1BX0ZSQ0QzX09GRlNFVCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0ZS Q0RfRl9TSElGVCkgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgdnZ0ZF9yZXBvcnRfbm9u X3JlY292ZXJhYmxlX2ZhdWx0KHZ2dGQsIERNQV9GU1RTX1BQRl9TSElGVCk7Cj4gKyAgICAgICAg ICAgIHJldHVybjsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICAvKgo+ICsgICAgICogTm8g UHJpbWFyeSBGYXVsdCBpcyBpbiBGYXVsdCBSZWNvcmQgUmVnaXN0ZXJzLCB0aHVzIGNsZWFyIFBQ RiBiaXQgaW4KPiArICAgICAqIEZTVFMuCj4gKyAgICAgKi8KPiArICAgIHZ2dGRfY2xlYXJfYml0 KHZ2dGQsIERNQVJfRlNUU19SRUcsIERNQV9GU1RTX1BQRl9TSElGVCk7Cj4gKwo+ICsgICAgLyog SWYgbm8gZmF1bHQgaXMgaW4gRlNUUywgY2xlYXIgcGVuZGluZyBiaXQgaW4gRkVDVEwuICovCj4g KyAgICBpZiAoICEodnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfRlNUU19SRUcpICYgRE1BX0ZTVFNf RkFVTFRTKSApCj4gKyAgICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9GRUNUTF9SRUcs IERNQV9GRUNUTF9JUF9TSElGVCk7Cj4gK30KPiArCj4gKy8qCj4gKyAqIENvbW1pdCBhIGZhdWx0 IHRvIGVtdWxhdGVkIEZhdWx0IFJlY29yZCBSZWdpc3RlcnMuCj4gKyAqLwo+ICtzdGF0aWMgdm9p ZCB2dnRkX2NvbW1pdF9mcmNkKHN0cnVjdCB2dnRkICp2dnRkLCBpbnQgaWR4LAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2dGRfZmF1bHRfcmVjb3JkX3JlZ2lz dGVyICpmcmNkKQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQgYmFzZSA9IGNhcF9mYXVsdF9yZWdf b2Zmc2V0KAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZ0ZF9nZXRfcmVnX3F1YWQo dnZ0ZCwgRE1BUl9DQVBfUkVHKSk7Cj4gKwo+ICsgICAgdnZ0ZF9zZXRfcmVnX3F1YWQodnZ0ZCwg YmFzZSArIGlkeCAqIERNQV9GUkNEX0xFTiwgZnJjZC0+Yml0cy5sbyk7Cj4gKyAgICB2dnRkX3Nl dF9yZWdfcXVhZCh2dnRkLCBiYXNlICsgaWR4ICogRE1BX0ZSQ0RfTEVOICsgOCwgZnJjZC0+Yml0 cy5oaSk7Cj4gKyAgICB2dnRkX3VwZGF0ZV9wcGYodnZ0ZCk7Cj4gK30KPiArCj4gKy8qCj4gKyAq IEFsbG9jYXRlIGEgRlJDRCBmb3IgdGhlIGNhbGxlci4gSWYgc3VjY2VzcywgcmV0dXJuIHRoZSBG UkkuIE9yLCByZXR1cm4gLTEKPiArICogd2hlbiBmYWlsdXJlLgo+ICsgKi8KPiArc3RhdGljIGlu dCB2dnRkX2FsbG9jX2ZyY2Qoc3RydWN0IHZ2dGQgKnZ2dGQpCgpXaGF0J3MgdGhlIG1heGltdW0g dmFsdWUgb2YgRlJDRCBhY2NvcmRpbmcgdG8gdGhlIHNwZWM/IFdpbGwgaXQgZml0IGluCmFuIGlu dD8KCj4gK3sKPiArICAgIGludCBwcmV2Owo+ICsgICAgdWludDY0X3QgY2FwID0gdnZ0ZF9nZXRf cmVnX3F1YWQodnZ0ZCwgRE1BUl9DQVBfUkVHKTsKPiArICAgIHVuc2lnbmVkIGludCBiYXNlID0g Y2FwX2ZhdWx0X3JlZ19vZmZzZXQoY2FwKTsKPiArCj4gKyAgICAvKiBTZXQgdGhlIEYgYml0IHRv IGluZGljYXRlIHRoZSBGUkNEIGlzIGluIHVzZS4gKi8KPiArICAgIGlmICggIXZ2dGRfdGVzdF9h bmRfc2V0X2JpdCh2dnRkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Ug KyB2dnRkLT5ody5mYXVsdF9pbmRleCAqIERNQV9GUkNEX0xFTiArCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRE1BX0ZSQ0QzX09GRlNFVCwgRE1BX0ZSQ0RfRl9TSElGVCkgKQo+ ICsgICAgewo+ICsgICAgICAgIHByZXYgPSB2dnRkLT5ody5mYXVsdF9pbmRleDsKCnByZXYgY2Fu IGJlIGRlY2xhcmVkIGluc2lkZSB0aGUgaWY6CgogICAgdW5zaWduZWQgaW50IHByZXYgPSB2dnRk LT5ody5mYXVsdF9pbmRleDsKCkFsc28gcHJldiBpcyB1c2VkIG9ubHkgb25jZSwgc28gSSB0aGlu ayB5b3UgY2FuIGp1c3QgZ2V0IHJpZCBvZiBpdC4KCj4gKyAgICAgICAgdnZ0ZC0+aHcuZmF1bHRf aW5kZXggPSAocHJldiArIDEpICUgY2FwX251bV9mYXVsdF9yZWdzKGNhcCk7Cj4gKyAgICAgICAg cmV0dXJuIHZ2dGQtPmh3LmZhdWx0X2luZGV4Owo+ICsgICAgfQoKTmV3bGluZS4KCj4gKyAgICBy ZXR1cm4gLUVOT01FTTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdnZ0ZF9mcmVlX2ZyY2Qoc3Ry dWN0IHZ2dGQgKnZ2dGQsIGludCBpKQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQgYmFzZSA9IGNh cF9mYXVsdF9yZWdfb2Zmc2V0KAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZ0ZF9n ZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9DQVBfUkVHKSk7Cj4gKwo+ICsgICAgdnZ0ZF9jbGVhcl9i aXQodnZ0ZCwgYmFzZSArIGkgKiBETUFfRlJDRF9MRU4gKyBETUFfRlJDRDNfT0ZGU0VULAo+ICsg ICAgICAgICAgICAgICAgICAgRE1BX0ZSQ0RfRl9TSElGVCk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgdnZ0ZF9yZWNvcmRfZmF1bHQoc3RydWN0IHZ2dGQgKnZ2dGQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyY2hfaXJxX3JlbWFwcGluZ19yZXF1ZXN0ICpy ZXF1ZXN0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWFzb24pCj4gK3sK PiArICAgIHN0cnVjdCB2dGRfZmF1bHRfcmVjb3JkX3JlZ2lzdGVyIGZyY2Q7Cj4gKyAgICBpbnQg ZmF1bHRfaW5kZXg7Cgp1bnNpZ25lZCBpbnQgbWF5YmUsIHNlZSBjb21tZW50cyBhYm92ZS4KCj4g KyAgICB1aW50MzJfdCBpcnRfaW5kZXg7Cj4gKwo+ICsgICAgc3Bpbl9sb2NrKCZ2dnRkLT5mZV9s b2NrKTsKPiArICAgIHN3aXRjaChyZWFzb24pCj4gKyAgICB7Cj4gKyAgICBjYXNlIFZURF9GUl9J Ul9SRVFfUlNWRDoKPiArICAgIGNhc2UgVlREX0ZSX0lSX0lOREVYX09WRVI6Cj4gKyAgICBjYXNl IFZURF9GUl9JUl9FTlRSWV9QOgo+ICsgICAgY2FzZSBWVERfRlJfSVJfUk9PVF9JTlZBTDoKPiAr ICAgIGNhc2UgVlREX0ZSX0lSX0lSVEVfUlNWRDoKPiArICAgIGNhc2UgVlREX0ZSX0lSX1JFUV9D T01QQVQ6Cj4gKyAgICBjYXNlIFZURF9GUl9JUl9TSURfRVJSOgo+ICsgICAgICAgIGlmICggdnZ0 ZF90ZXN0X2JpdCh2dnRkLCBETUFSX0ZTVFNfUkVHLCBETUFfRlNUU19QRk9fU0hJRlQpICkKPiAr ICAgICAgICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgICAgIC8qIE5vIGF2YWlsYWJsZSBGYXVs dCBSZWNvcmQgbWVhbnMgRmF1bHQgb3ZlcmZsb3dlZCAqLwo+ICsgICAgICAgIGZhdWx0X2luZGV4 ID0gdnZ0ZF9hbGxvY19mcmNkKHZ2dGQpOwo+ICsgICAgICAgIGlmICggZmF1bHRfaW5kZXggPCAw ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHZ2dGRfcmVwb3J0X25vbl9yZWNvdmVyYWJs ZV9mYXVsdCh2dnRkLCBETUFfRlNUU19QRk9fU0hJRlQpOwo+ICsgICAgICAgICAgICBnb3RvIG91 dDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgbWVtc2V0KCZmcmNkLCAwLCBzaXplb2YoZnJjZCkp OwoKR2l2ZW4gdGhlIGZhY3QgdGhhdCBmcmNkIGhhcyBub3QgcGFkZGluZyB5b3UgY2FuIGluaXRp YWxpemUgaXQgYXQKZGVjbGFyYXRpb24gdXNpbmc6CgpzdHJ1Y3QgdnRkX2ZhdWx0X3JlY29yZF9y ZWdpc3RlciBmcmNkID0ge8KgfTsKCj4gKyAgICAgICAgZnJjZC5maWVsZHMuZmF1bHRfcmVhc29u ID0gcmVhc29uOwo+ICsgICAgICAgIGlmICggaXJxX3JlbWFwcGluZ19yZXF1ZXN0X2luZGV4KHJl cXVlc3QsICZpcnRfaW5kZXgpICkKPiArICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAg ZnJjZC5maWVsZHMuZmF1bHRfaW5mbyA9IGlydF9pbmRleDsKPiArICAgICAgICBmcmNkLmZpZWxk cy5zb3VyY2VfaWQgPSByZXF1ZXN0LT5zb3VyY2VfaWQ7Cj4gKyAgICAgICAgZnJjZC5maWVsZHMu ZmF1bHQgPSAxOwo+ICsgICAgICAgIHZ2dGRfY29tbWl0X2ZyY2QodnZ0ZCwgZmF1bHRfaW5kZXgs ICZmcmNkKTsKPiArICAgICAgICBicmVhazsKPiArCj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAg IHZ2dGRfZGVidWcoImQlZDogY2FuJ3QgaGFuZGxlIHZ2dGQgZmF1bHQgKHJlYXNvbiAweCV4KSIs Cj4gKyAgICAgICAgICAgICAgICAgICB2dnRkLT5kb21haW4tPmRvbWFpbl9pZCwgcmVhc29uKTsK PiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyBvdXQ6Cj4gKyAgICBzcGluX3VubG9j aygmdnZ0ZC0+ZmVfbG9jayk7Cj4gKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwoKSSdtIG5vdCBz dXJlIHdoeSB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbnkgdmFsdWUgZ2l2ZW4gaXQn cwpjdXJyZW50IHVzYWdlLCBhbmQgaW4gYW55IGNhc2Ugc2luY2UgaXQncyBub3QgYW4gZW11bGF0 aW9uIGhhbmRsZXIgaXQKc2hvdWxkbid0IHVzZSBYODZFTVVMXyogdmFsdWVzIGF0IGFsbC4KCj4g K30KPiArCj4gK3N0YXRpYyBpbnQgdnZ0ZF93cml0ZV9mcmNkMyhzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwg dWludDMyX3QgdmFsKQo+ICt7Cj4gKyAgICAvKiBXcml0aW5nIGEgMSBtZWFucyBjbGVhciBmYXVs dCAqLwo+ICsgICAgaWYgKCB2YWwgJiBETUFfRlJDRF9GICkKPiArICAgIHsKPiArICAgICAgICB2 dnRkX2ZyZWVfZnJjZCh2dnRkLCAwKTsKPiArICAgICAgICB2dnRkX3VwZGF0ZV9wcGYodnZ0ZCk7 Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwoKU2FtZSBoZXJlLCBJIGRvbid0 IHNlZSB0aGUgcG9pbnQgaW4gcmV0dXJuaW5nIGEgdmFsdWUsIGFuZCBjZXJ0YWlubHkKaXQgc2hv dWxkbid0IGJlIFg4NkVNVUxfKiBpbiBhbnkgY2FzZS4KCj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZ2dGRfd3JpdGVfZmVjdGwoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKPiArewo+ ICsgICAgLyoKPiArICAgICAqIE9ubHkgRE1BX0ZFQ1RMX0lNIGJpdCBpcyB3cml0YWJsZS4gR2Vu ZXJhdGUgcGVuZGluZyBldmVudCB3aGVuIHVubWFzay4KPiArICAgICAqLwo+ICsgICAgaWYgKCAh KHZhbCAmIERNQV9GRUNUTF9JTSkgKQo+ICsgICAgewo+ICsgICAgICAgIC8qIENsZWFyIElNICov Cj4gKyAgICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9GRUNUTF9SRUcsIERNQV9GRUNU TF9JTV9TSElGVCk7Cj4gKyAgICAgICAgaWYgKCB2dnRkX3Rlc3RfYW5kX2NsZWFyX2JpdCh2dnRk LCBETUFSX0ZFQ1RMX1JFRywgRE1BX0ZFQ1RMX0lQX1NISUZUKSApCj4gKyAgICAgICAgICAgIHZ2 dGRfbm90aWZ5X2ZhdWx0KHZ2dGQpOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgICAgIHZ2 dGRfc2V0X2JpdCh2dnRkLCBETUFSX0ZFQ1RMX1JFRywgRE1BX0ZFQ1RMX0lNX1NISUZUKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdnZ0ZF93cml0ZV9mc3RzKHN0cnVjdCB2dnRkICp2dnRkLCB1 aW50MzJfdCB2YWwpCj4gK3sKPiArICAgIGludCBpLCBtYXhfZmF1bHRfaW5kZXggPSBETUFfRlNU U19QUk9fU0hJRlQ7Cj4gKyAgICB1aW50NjRfdCBiaXRzX3RvX2NsZWFyID0gdmFsICYgRE1BX0ZT VFNfUlcxQ1M7Cj4gKwo+ICsgICAgaWYgKCBiaXRzX3RvX2NsZWFyICkKPiArICAgIHsKPiArICAg ICAgICBpID0gZmluZF9maXJzdF9iaXQoJmJpdHNfdG9fY2xlYXIsIG1heF9mYXVsdF9pbmRleCAv IDggKyAxKTsKPiArICAgICAgICB3aGlsZSAoIGkgPD0gbWF4X2ZhdWx0X2luZGV4ICkKPiArICAg ICAgICB7Cj4gKyAgICAgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJfRlNUU19SRUcs IGkpOwo+ICsgICAgICAgICAgICBpID0gZmluZF9uZXh0X2JpdCgmYml0c190b19jbGVhciwgbWF4 X2ZhdWx0X2luZGV4IC8gOCArIDEsIGkgKyAxKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ ICsgICAgLyoKPiArICAgICAqIENsZWFyIElQIGZpZWxkIHdoZW4gYWxsIHN0YXR1cyBmaWVsZHMg aW4gdGhlIEZhdWx0IFN0YXR1cyBSZWdpc3Rlcgo+ICsgICAgICogYmVpbmcgY2xlYXIuCj4gKyAg ICAgKi8KPiArICAgIGlmICggISgodnZ0ZF9nZXRfcmVnKHZ2dGQsIERNQVJfRlNUU19SRUcpICYg RE1BX0ZTVFNfRkFVTFRTKSkgKQo+ICsgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERNQVJf RkVDVExfUkVHLCBETUFfRkVDVExfSVBfU0hJRlQpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCB3 cml0ZV9nY21kX2lyZShzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQo+ICB7Cj4gICAg ICBib29sIHNldCA9IHZhbCAmIERNQV9HQ01EX0lSRTsKPiBAQCAtMzkxLDExICs2MjksNDcgQEAg c3RhdGljIGludCB2dnRkX3JlYWQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwK PiAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIHZ2dGRf d3JpdGVfZmF1bHRfcmVncyhzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdW5zaWduZWQgbG9uZyB2YWwsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1 bnNpZ25lZCBpbnQgbGVuKQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQgZmF1bHRfb2Zmc2V0ID0g Y2FwX2ZhdWx0X3JlZ19vZmZzZXQoCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfQ0FQX1JFRykpOwo+ICsKPiArICAgIHNw aW5fbG9jaygmdnZ0ZC0+ZmVfbG9jayk7Cj4gKyAgICBmb3IgKCA7IGxlbiA7IGxlbiAtPSA0LCBv ZmZzZXQgKz0gNCwgdmFsID0gdmFsID4+IDMyKQoKSXQgc2VlbXMgb3ZlcmtpbGwgdG8gdXNlIGEg Zm9yIGxvb3AgaGVyZSB3aGVuIGxlbiBjYW4gb25seSBiZSA0IG9yIDgKQUZBSUNUIChtYXliZSBJ J20gd3JvbmcpLiBJcyA2NGJpdCBhY2Nlc3MgcmVhbGx5IGFsbG93ZWQgdG8gdGhvc2UKcmVnaXN0 ZXJzPyBZb3Ugc2VlbSB0byB0cmVhdCBhbGwgb2YgdGhlbSBhcyAzMmJpdCByZWdpc3RlcnMgd2hp Y2gKbWFrZXMgbWUgd29uZGVyIGlmIDY0Yml0IGFjY2Vzc2VzIGFyZSByZWFsbHkgYWxsb3dlZC4K ClRoYW5rcywgUm9nZXIuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0 Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRl dmVs