From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [RFC XTF PATCH] Pagetable Emulation testing Date: Mon, 13 Mar 2017 17:48:07 +0000 Message-ID: <6b332f0a-04ae-4b37-07d8-201285aa8063@citrix.com> References: <1488204198-23948-1-git-send-email-andrew.cooper3@citrix.com> <1488818540-7075-1-git-send-email-andrew.cooper3@citrix.com> <58C6CCBD0200007800142967@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <58C6CCBD0200007800142967@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: George Dunlap , Tim Deegan , Xen-devel List-Id: xen-devel@lists.xenproject.org T24gMTMvMDMvMTcgMTU6NDUsIEphbiBCZXVsaWNoIHdyb3RlOgo+Pj4+IE9uIDA2LjAzLjE3IGF0 IDE3OjQyLCA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4gd3JvdGU6Cj4+ICtzdHJ1Y3QgbWFw cGluZ19pbmZvCj4+ICt7Cj4+ICsgICAgdW5zaWduZWQgaW50IGxldmVsLCBvcmRlcjsKPj4gKyAg ICB2b2lkICp2YTsKPj4gKyAgICBpbnRwdGVfdCAqcHRlLCAqZmVfcHRlOwo+IEhhdmluZyBnb3Qg cXVpdGUgYSBiaXQgaW50byB0aGUgcGF0Y2gsIEkgdGhpbmsgSSd2ZSBmaW5hbGx5IHVuZGVyc3Rv b2QgdGhhdAo+ICJmZSIgaGVyZSBpcyBtZWFudCB0byBtYXRjaCB1cCB3aXRoICJmZXAiIC0gYSBj b21tZW50IG1pZ2h0IGJlIGhlbHBmdWwuCgpBaCB5ZXMuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUg UFRFIHdoaWNoIG1hcHMgdGhlIGZvcmNlIGVtdWxhdGlvbiBwcmVmaXguCgpJbiBwYXJ0aWN1bGFy LCBpdHMgX1BBR0VfVVNFUiBzZXR0aW5nIG5lZWRzIHRvIG1hdGNoIGNwbCBzbyB3ZSBkb24ndAp0 YWtlIHVucmVsYXRlZCBpbnN0cnVjdGlvbiBmZXRjaCBmYXVsdHMgd2hpbGUgc2V0dGluZyB1cCBh biBlbXVsYXRlZAppbnN0cnVjdGlvbiBmZXRjaC4KCj4KPj4gK2Jvb2wgZXhfY2hlY2tfcGYoc3Ry dWN0IGNwdV9yZWdzICpyZWdzLAo+PiArICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZXh0 YWJsZV9lbnRyeSAqZXgpCj4+ICt7Cj4+ICsgICAgaWYgKCByZWdzLT5lbnRyeV92ZWN0b3IgPT0g WDg2X0VYQ19QRiApCj4+ICsgICAgewo+PiArICAgICAgICB1bnNpZ25lZCBsb25nIGNyMiA9IHJl YWRfY3IyKCk7Cj4+ICsKPj4gKyAgICAgICAgaWYgKCAoY3IyICE9IHVuZGVyX3Rlc3QudmEpICYm Cj4+ICsgICAgICAgICAgICAgKGNyMiAhPSB1bmRlcl90ZXN0LnZhICsgKExEVF9TRUwgJiB+Nykp ICkKPj4gKyAgICAgICAgICAgIHh0Zl9mYWlsdXJlKCJCYWQgJSVjcjI6IGV4cGVjdGVkICVwLCBn b3QgJXBcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBfcCh1bmRlcl90ZXN0LnZhKSwg X3AoY3IyKSk7Cj4+ICsKPj4gKyAgICAgICAgcmVncy0+YXggPSBFWElORk9fU1lNKFBGLCByZWdz LT5lcnJvcl9jb2RlKTsKPj4gKwo+PiArICAgICAgICBpZiAoIGV4LT5maXh1cCApCj4+ICsgICAg ICAgICAgICByZWdzLT5pcCA9IGV4LT5maXh1cDsKPj4gKyAgICAgICAgZWxzZQo+PiArICAgICAg ICAgICAgcmVncy0+aXAgPSAqKHVuc2lnbmVkIGxvbmcgKiljcHVfcmVnc19zcChyZWdzKTsKPiBX aGF0IGRvZXMgdGhpcyBtYXRjaCB1cCB3aXRoPyBUaGUgc2luZ2xlIFJFVCB5b3UgcGxhY2UgYXQg dGhlIGZpcnN0Cj4gYnl0ZSBvZiB0aGUgcGFnZSBzdWJqZWN0IHRvIHRlc3Rpbmc/IFN1cmVseSB0 aGlzIGlzIHJhdGhlciBmcmFnaWxlIHdydAo+ICNQRiBoYXBwZW5pbmcgYW55d2hlcmUgdW5leHBl Y3RlZD8KCnN0dWIgZXhlYyBhbmQgdXNlciBleGVjIHRha2UgI1BGIGF0IHRoZSB0YXJnZXQgb2Yg dGhlIGNhbGwgaW5zdHJ1Y3Rpb24sCnJhdGhlciB0aGFuIG9uIHRoZSBjYWxsIGluc3RydWN0aW9u IGl0c2VsZi4KClRoZSBleHRhYmxlIGVudHJ5IGlzIGFuY2hvcmVkIGF0IHRoZSB0YXJnZXQgb2Yg dGhlIGNhbGwgKHNldCB1cCBieSB0aGUKYXNtKCkgc3RhdGVtZW50cyBpbiBwcmVwYXJlX21hcHBp bmdzKCkpLCBidXQgdGhlIGZpeHVwIG5lZWRzIHRvIGZvbGxvdwp0aGUgcmV0dXJuIGFkZHJlc3Mg b24gdGhlIHN0YWNrIHRvIHJlY292ZXIuCgo+Cj4+ICtzdGF0aWMgdm9pZCBwcmVwYXJlX21hcHBp bmdzKHN0cnVjdCBtYXBwaW5nX2luZm8gKm0sIHVuc2lnbmVkIGludCBsZXZlbCwgYm9vbCBzdXBl ciwgcGFkZHJfdCBwYWRkcikKPj4gK3sKPj4gKyAgICBib29sIHBzZTM2ID0gQ09ORklHX1BBR0lO R19MRVZFTFMgPT0gMiAmJiBwYWRkciAhPSAodWludDMyX3QpcGFkZHI7Cj4+ICsKPj4gKyAgICBt ZW1zZXQobSwgMCwgc2l6ZW9mKCptKSk7Cj4+ICsKPj4gKyNkZWZpbmUgUEFHRV9DT01NT04gUEZf U1lNKEFELCBVLCBSVywgUCkKPj4gKyAgICAvKgo+PiArICAgICAqIEZvciA0LWxldmVsIHBhZ2lu Zywgd2UgdXNlIGw0WzEvMl0uCj4+ICsgICAgICovCj4+ICsgICAgaWYgKCBDT05GSUdfUEFHSU5H X0xFVkVMUyA9PSA0ICkKPj4gKyAgICB7Cj4+ICsKPj4gKyAgICAgICAgcGFlX2w0X2lkZW50bWFw WzFdID0gKHVuc2lnbmVkIGxvbmcpbDN0IHwgUEFHRV9DT01NT047Cj4+ICsgICAgICAgIHBhZV9s NF9pZGVudG1hcFsyXSA9ICh1bnNpZ25lZCBsb25nKWwzdCB8IFBBR0VfQ09NTU9OOwo+PiArCj4+ ICsgICAgICAgIGwzdFswXSAgID0gKHVuc2lnbmVkIGxvbmcpbDJ0IHwgUEFHRV9DT01NT047Cj4+ ICsgICAgICAgIGwzdFs1MTFdID0gKHVuc2lnbmVkIGxvbmcpbDJ0IHwgUEFHRV9DT01NT047Cj4+ ICsKPj4gKyAgICAgICAgbDJ0WzBdICAgPSAodW5zaWduZWQgbG9uZylsMXQgfCBQQUdFX0NPTU1P TjsKPj4gKyAgICAgICAgbDJ0WzUxMV0gPSAodW5zaWduZWQgbG9uZylsMXQgfCBQQUdFX0NPTU1P TjsKPj4gKwo+PiArICAgICAgICBsMXRbMF0gICA9IHBhZGRyIHwgUEFHRV9DT01NT047Cj4+ICsg ICAgICAgIGwxdFs1MTFdID0gKChwYWRkciAtIDEpICYgfjB4ZmZmKSB8IFBBR0VfQ09NTU9OOwo+ PiArCj4+ICsgICAgICAgIG0tPnZhICAgICA9IF9wKDJVTEwgPDwgUEFFX0w0X1BUX1NISUZUKTsK Pj4gKyAgICAgICAgbS0+bDFlICAgID0gJmwxdFswXTsKPj4gKyAgICAgICAgbS0+bDJlICAgID0g JmwydFswXTsKPj4gKyAgICAgICAgbS0+bDNlICAgID0gJmwzdFswXTsKPj4gKyAgICAgICAgbS0+ bDRlICAgID0gX3AoJnBhZV9sNF9pZGVudG1hcFsyXSk7Cj4+ICsgICAgICAgIG0tPmZlX3B0ZSA9 ICZsMXRbNTExXTsKPj4gKwo+PiArICAgICAgICBhc20oX0FTTV9FWFRBQkxFX0hBTkRMRVIoMiA8 PCBQQUVfTDRfUFRfU0hJRlQsIDAsIGV4X2NoZWNrX3BmKSk7Cj4+ICsgICAgICAgIHVuZGVyX3Rl c3QudmEgPSAodW5zaWduZWQgbG9uZyltLT52YTsKPj4gKyAgICB9Cj4+ICsgICAgZWxzZSBpZiAo IENPTkZJR19QQUdJTkdfTEVWRUxTID09IDMgKQo+PiArICAgIHsKPj4gKyAgICAgICAgcGFlMzJf bDNfaWRlbnRtYXBbMV0gPSAodW5zaWduZWQgbG9uZylsMnQgfCBfUEFHRV9QUkVTRU5UOwo+PiAr ICAgICAgICBwYWUzMl9sM19pZGVudG1hcFsyXSA9ICh1bnNpZ25lZCBsb25nKWwydCB8IF9QQUdF X1BSRVNFTlQ7Cj4+ICsKPj4gKyAgICAgICAgbDJ0WzBdICAgPSAodW5zaWduZWQgbG9uZylsMXQg fCBQQUdFX0NPTU1PTjsKPj4gKyAgICAgICAgbDJ0WzUxMV0gPSAodW5zaWduZWQgbG9uZylsMXQg fCBQQUdFX0NPTU1PTjsKPj4gKwo+PiArICAgICAgICBsMXRbMF0gICA9IHBhZGRyIHwgUEFHRV9D T01NT047Cj4+ICsgICAgICAgIGwxdFs1MTFdID0gKChwYWRkciAtIDEpICYgfjB4ZmZmKSB8IFBB R0VfQ09NTU9OOwo+PiArCj4+ICsgICAgICAgIG0tPnZhICAgICA9IF9wKDJVTEwgPDwgUEFFX0wz X1BUX1NISUZUKTsKPj4gKyAgICAgICAgbS0+bDFlICAgID0gJmwxdFswXTsKPj4gKyAgICAgICAg bS0+bDJlICAgID0gJmwydFswXTsKPj4gKyAgICAgICAgbS0+bDNlICAgID0gX3AoJnBhZTMyX2wz X2lkZW50bWFwWzJdKTsKPj4gKyAgICAgICAgbS0+bDRlICAgID0gTlVMTDsKPj4gKyAgICAgICAg bS0+ZmVfcHRlID0gJmwxdFs1MTFdOwo+PiArCj4+ICsgICAgICAgIGFzbShfQVNNX0VYVEFCTEVf SEFORExFUigyIDw8IFBBRV9MM19QVF9TSElGVCwgMCwgZXhfY2hlY2tfcGYpKTsKPj4gKyAgICAg ICAgdW5kZXJfdGVzdC52YSA9ICh1bnNpZ25lZCBsb25nKW0tPnZhOwo+PiArICAgIH0KPj4gKyAg ICBlbHNlIGlmICggQ09ORklHX1BBR0lOR19MRVZFTFMgPT0gMiApCj4+ICsgICAgewo+PiArICAg ICAgICBpZiAoIHBzZTM2ICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgQVNTRVJUKHN1 cGVyKTsKPj4gKyAgICAgICAgICAgIEFTU0VSVChJU19BTElHTkVEKHBhZGRyLCBNQig0KSkpOwo+ PiArCj4+ICsgICAgICAgICAgICBwc2VfbDJfaWRlbnRtYXBbNTExXSA9IGZvbGRfcHNlMzYoKHBh ZGRyIC0gTUIoNCkpIHwgUEFHRV9DT01NT04gfCBfUEFHRV9QU0UpOwo+PiArICAgICAgICAgICAg cHNlX2wyX2lkZW50bWFwWzUxMl0gPSBmb2xkX3BzZTM2KHBhZGRyIHwgUEFHRV9DT01NT04gfCBf UEFHRV9QU0UpOwo+PiArICAgICAgICB9Cj4+ICsgICAgICAgIGVsc2UKPj4gKyAgICAgICAgewo+ PiArICAgICAgICAgICAgcHNlX2wyX2lkZW50bWFwWzUxMV0gPSAodW5zaWduZWQgbG9uZylsMXQg fCBQQUdFX0NPTU1PTjsKPj4gKyAgICAgICAgICAgIHBzZV9sMl9pZGVudG1hcFs1MTJdID0gKHVu c2lnbmVkIGxvbmcpbDF0IHwgUEFHRV9DT01NT047Cj4+ICsKPj4gKyAgICAgICAgICAgIGwxdFsw XSAgICA9IHBhZGRyIHwgUEFHRV9DT01NT047Cj4+ICsgICAgICAgICAgICBsMXRbMTAyM10gPSAo KHBhZGRyIC0gMSkgJiB+MHhmZmYpIHwgUEFHRV9DT01NT047Cj4+ICsgICAgICAgIH0KPj4gKwo+ PiArICAgICAgICBtLT52YSAgICAgPSBfcCgyVUxMIDw8IFBBRV9MM19QVF9TSElGVCk7Cj4+ICsg ICAgICAgIG0tPmwxZSAgICA9IHBzZTM2ID8gTlVMTCA6ICZsMXRbMF07Cj4+ICsgICAgICAgIG0t PmwyZSAgICA9IF9wKCZwc2VfbDJfaWRlbnRtYXBbNTEyXSk7Cj4+ICsgICAgICAgIG0tPmwzZSAg ICA9IE5VTEw7Cj4+ICsgICAgICAgIG0tPmw0ZSAgICA9IE5VTEw7Cj4+ICsgICAgICAgIG0tPmZl X3B0ZSA9IHBzZTM2ID8gX3AoJnBzZV9sMl9pZGVudG1hcFs1MTFdKSA6ICZsMXRbMTAyM107Cj4g VGhlIHVzZSBvZiBQQUUgY29uc3RhbnRzIGhlcmUgKGluY2x1ZGluZyB0aGUgbGl0ZXJhbCA1MTEg LyA1MTIpIGlzCj4gbWlsZGx5IGNvbmZ1c2luZyBoZXJlIHdpdGhvdXQgYW55IGNvbW1lbnRzLgoK VGhhdCBsb29rcyBsaWtlIGEgY29weS9wYXN0ZSBtaXN0YWtlLiAgSXQgc2hvdWxkIGJlIDUxMiA8 PApQU0VfTDJfUFRfU0hJRlQsIHdoaWNoIHNob3VsZCBiZSB0aGUgc2FtZSB2YWx1ZS4KCkkgd2ls bCBleHRlbmQgdGhlIGw0IGNvbW1lbnRzIHRvIHRoZSBsMyBhbmQgbDIgY2FzZXMuCgo+Cj4+ICsg ICAgICAgIGFzbShfQVNNX0VYVEFCTEVfSEFORExFUigyIDw8IFBBRV9MM19QVF9TSElGVCwgMCwg ZXhfY2hlY2tfcGYpKTsKPj4gKyAgICAgICAgdW5kZXJfdGVzdC52YSA9ICh1bnNpZ25lZCBsb25n KW0tPnZhOwo+PiArICAgIH0KPj4gKyAgICBlbHNlCj4+ICsgICAgICAgIHBhbmljKCIlcygpIFBB R0lOR19MRVZFTFMgJXUgbm90IGltcGxlbWVudGVkIHlldFxuIiwKPj4gKyAgICAgICAgICAgICAg X19mdW5jX18sIENPTkZJR19QQUdJTkdfTEVWRUxTKTsKPj4gKwo+PiArI3VuZGVmIFBBR0VfQ09N TU9OCj4+ICsKPj4gKyAgICAvKiBGbHVzaCB0aGUgVExCIGJlZm9yZSB0cnlpbmcgdG8gdXNlIHRo ZSBuZXcgbWFwcGluZ3MuICovCj4+ICsgICAgZmx1c2hfdGxiKGZhbHNlKTsKPj4gKwo+PiArICAg IC8qIFB1dCBGRVAgaW1tZWRpYXRlbHkgYmVmb3JlIHZhLCBhbmQgYSByZXQgaW5zdHJ1Y3Rpb24g YXQgdmEuICovCj4+ICsgICAgbWVtY3B5KG0tPnZhIC0gNSwgIlx4MGZceDBieGVuXHhjMyIsIDYp Owo+PiArICAgIGJhcnJpZXIoKTsKPj4gKwo+PiArICAgIC8qIFJlYWQgdGhlbSBiYWNrLCB0byBj b25maXJtIHRoYXQgUkFNIGlzIHByb3Blcmx5IGluIHBsYWNlLiAqLwo+PiArICAgIGlmICggbWVt Y21wKG0tPnZhIC0gNSwgIlx4MGZceDBieGVuXHhjMyIsIDYpICkKPj4gKyAgICAgICAgcGFuaWMo IkJhZCBwaHlzIG9yIHZpcnR1YWwgc2V0dXBcbiIpOwo+PiArCj4+ICsgICAgLyogQ29uc3RydWN0 IHRoZSBMRFQgYXQgdmEuICovCj4+ICsgICAgdXNlcl9kZXNjICpsZHQgPSBtLT52YTsKPj4gKwo+ PiArICAgIGxkdFtMRFRfU0VMID4+IDNdID0gKHR5cGVvZigqbGR0KSlJTklUX0dEVEVfU1lNKDAs IDB4ZmZmZmYsIENPTU1PTiwgREFUQSwgRFBMMywgQiwgVyk7Cj4gVGhpcyBkdWFsIHVzZSBvZiBt LT52YSBjbGVhcmx5IG5lZWRzIGEgY29tbWVudCwgcGVyaGFwcyBuZXh0IHRvCj4gdGhlIGRlZmlu aXRpb24gb2YgTERUX1NFTCAod2hpY2ggY2FuJ3QgYmUgZnJlZWx5IHNldCB0byB3aGF0ZXZlciBv bmUKPiBtYXkgbGlrZSAtIGl0IG5hbWVseSBjYW4ndCBiZSB1c2luZyBMRFQgc2xvdCAwKS4KCnZh IGlzIGp1c3QgdGhlIHZpcnR1YWwgYWRkcmVzcyB1bmRlciB0ZXN0LgoKSXQgZ2V0cyByZWFkL3dy aXRlIHRlc3Rpbmcgbm9ybWFsbHksIGV4ZWMgdGVzdGluZyBieSBjYWxsaW5nIGF0IGl0LCBhbmQK aW1wbGljaXQgYWNjZXNzIHRlc3RpbmcgYnkgbGF5ZXJpbmcgYW4gTERUIG92ZXIgdGhlIHRvcCBh bmQgbG9hZGluZyBhCnNlbGVjdG9yLgoKVGhlIGNob2ljZSBvZiBMRFQgc2VsZWN0b3IgdG8gdXNl IG9ubHkgbWF0dGVycyBpZiBpdCBmaXRzIHdpdGhpbiB0aGUKbWFwcGluZywgaXMgb3RoZXJ3aXNl IHZhbGlkLCBhbmQgaXMgYWxyZWFkeSBhY2Nlc3NlZC4gIEluIHBhcnRpY3VsYXIsCnRoZSB0ZXN0 IGxvZ2ljIGRvZXNuJ3QgY29wZSB3aXRoIGhhcmR3YXJlIHNldHRpbmcgdGhlIGFjY2Vzc2VkIGJp dCBvdmVyCmEgcmVhZC1vbmx5IG1hcHBpbmcsIGJlY2F1c2UgaXQgY2FuJ3QgZGlzdGluZ3Vpc2gg dGhlIHR3byBkaWZmZXJlbnQKbWVtb3J5IGFjY2Vzc2VzLgoKPgo+PiArICAgIGdkdFtHRFRFX0FW QUlMMF0gID0gKHR5cGVvZigqZ2R0KSlJTklUX0dEVEUoKHVuc2lnbmVkIGxvbmcpbS0+dmEsIFBB R0VfU0laRSwgMHg4Mik7Cj4+ICsjaWYgX194ODZfNjRfXwo+ICNpZmRlZiA/CgpZZXMsIGFsdGhv dWdoIHRoaXMgdmFyaWFudCBkZWZpbml0ZWx5IHdvcmtzLgoKPgo+PiArdm9pZCBjaGVjayhzdHJ1 Y3QgbWFwcGluZ19pbmZvICptLCBleGluZm9fdCBhY3R1YWwsIGV4aW5mb190IGV4cGVjdGVkLCBl bnVtIG1vZGlmaWVyIG1vZCkKPj4gK3sKPj4gKyAgICAvKiBDaGVjayB0aGF0IHRoZSBhY3R1YWwg cGFnZWZhdWx0IG1hdGNoZWQgb3VyIGV4cGVjdGF0aW9uLiAqLwo+PiArICAgIGlmICggYWN0dWFs ICE9IGV4cGVjdGVkICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJfc3Vw ID0gdW5kZXJfdGVzdC51c2VyID8gIlVzZXIiIDogIlN1cGVydmlzb3IiOwo+PiArICAgICAgICBi b29sIGFjX2ZhdWx0ID0gISFhY3R1YWwsIGV4X2ZhdWx0ID0gISFleHBlY3RlZDsKPiBTdHJheSAh ISA/CgpZZXMuICBUaGlzIGNvZGUgcHJlZGF0ZXMgbWUgc29ydGluZyBvdXQgdGhlIGJvb2xfdC9i b29sIGNvbmZ1c2lvbi4KCj4KPj4gKyAgICAgICAgY2hhciBhY19lY1sxNl0sIGV4X2VjWzE2XTsK Pj4gKwo+PiArICAgICAgICBpZiAoIGFjX2ZhdWx0ICkKPj4gKyAgICAgICAgICAgIHg4Nl9leGNf ZGVjb2RlX2VjKGFjX2VjLCBBUlJBWV9TSVpFKGFjX2VjKSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFg4Nl9FWENfUEYsICh1aW50MTZfdClhY3R1YWwpOwo+PiArICAgICAgICBp ZiAoIGV4X2ZhdWx0ICkKPj4gKyAgICAgICAgICAgIHg4Nl9leGNfZGVjb2RlX2VjKGV4X2VjLCBB UlJBWV9TSVpFKGV4X2VjKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg4Nl9F WENfUEYsICh1aW50MTZfdClleHBlY3RlZCk7Cj4gV2h5IHRoZSBjYXN0cyBvbiB0aGUgbGFzdCBm dW5jdGlvbiBhcmd1bWVudHM/CgpSZWJhc2luZyBtaXN0YWtlLiAgVXAgdW50aWwgSSByZS1mYWN0 b3JlZCB0aGUgZXhlY191c2VyKCkgaW5mcmFzdHJ1Y3R1cmUKKHZlcnkgcmVjZW50bHkpIHRvIGJl IFNNRVAvU01BUCBzYWZlLCBJIGhhZCBhIGxvY2FsIGNvcHkgaGVyZSB3aGljaCB0b29rCnZvaWQg KiByYXRoZXIgdGhhbiB1bnNpZ25lZCBsb25nLgoKPgo+PiArICAgICAgICBpZiAoIGFjX2ZhdWx0 ICYmICFleF9mYXVsdCApCj4+ICsgICAgICAgICAgICBmYWlsKCIgICAgRmFpbDogZXhwZWN0ZWQg bm8gZmF1bHQsIGdvdCAjUEZbJXNdIGZvciAlcyAlc1xuIiwKPj4gKyAgICAgICAgICAgICAgICAg YWNfZWMsIHVzZXJfc3VwLCB1bmRlcl90ZXN0LmRlc2MpOwo+PiArICAgICAgICBlbHNlIGlmICgg IWFjX2ZhdWx0ICYmIGV4X2ZhdWx0ICkKPj4gKyAgICAgICAgICAgIGZhaWwoIiAgICBGYWlsOiBl eHBlY3RlZCAjUEZbJXNdLCBnb3Qgbm8gZmF1bHQgZm9yICVzICVzXG4iLAo+PiArICAgICAgICAg ICAgICAgICBleF9lYywgdXNlcl9zdXAsIHVuZGVyX3Rlc3QuZGVzYyk7Cj4+ICsgICAgICAgIGVs c2UKPj4gKyAgICAgICAgICAgIGZhaWwoIiAgICBGYWlsOiBleHBlY3RlZCAjUEZbJXNdLCBnb3Qg I1BGWyVzXSBmb3IgJXMgJXNcbiIsCj4+ICsgICAgICAgICAgICAgICAgIGV4X2VjLCBhY19lYywg IHVzZXJfc3VwLCB1bmRlcl90ZXN0LmRlc2MpOwo+IEZyb20gbG9va2luZyBqdXN0IGF0IHRoaXMg ZnVuY3Rpb24gZXhfZWNbXSBhbmQgYWNfZWNbXSBtYXkgYmUKPiB1c2VkIHVuaW5pdGlhbGl6ZWQg aGVyZSAod2hlbiAhYWNfZmF1bHQgJiYgIWV4X2ZhdWx0KS4gV2l0aCB0aGUKPiBmdW5jdGlvbiBu b3QgYmVpbmcgc3RhdGljLCBJJ2QgYWN0dWFsbHkgZXhwZWN0IGNvbXBpbGVycyB0byBiZQo+IGFi bGUgdG8gc3BvdCBhbmQgd2FybiBhYm91dCB0aGlzLgoKSW4gdGhhdCBjYXNlLCB3ZSBmYWlsIHRo ZSAiaWYgKCBhY3R1YWwgIT0gZXhwZWN0ZWQgKSIgcHJlY29uZGl0aW9uLCBhbmQKZG9uJ3QgZW5k IHVwIGhlcmUuCgpJIGFtIHRoaW5rIGl0IHdvdWxkIHByb2JhYmx5IGJlIGJldHRlciB0byBhZGQg JXAgcHJpbnRrKCkgc3VwcG9ydCBhbmQKaGF2ZSBhIGZvcm1hdHRlciBmb3IgZXhpbmZvX3QsIHdo aWNoIHdvdWxkIHNpbXBseSBhIHdob2xlIGxvdCBvZiBjb2RlCmxvb2tpbmcgbGlrZSB0aGlzLgoK Pgo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qIENoZWNrIHRoYXQgQS9EIGJpdHMgZ290IHVwZGF0 ZWQgYXMgZXhwZWN0ZWQuICovCj4+ICsgICAgdW5zaWduZWQgaW50IGxlYWZfbGV2ZWwgPQo+PiAr ICAgICAgICBtLT5vcmRlciA/ICgobS0+b3JkZXIgLSBQQUdFX1NISUZUKSAvIFBUX09SREVSKSA6 IDA7Cj4+ICsgICAgdW5zaWduZWQgaW50IGk7IC8qIE5CIC0gTGV2ZWxzIGFyZSAwLWluZGV4ZWQu ICovCj4gRG8geW91IGVuYWJsZSBDOTkgbW9kZSBzb21ld2hlcmU/IE90aGVyd2lzZSBJJ2QgZXhw ZWN0IHRoZQo+IGNvbXBpbGVyIHRvIHdhcm4gYWJvdXQgbWl4aW5nIGRlY2xhcmF0aW9ucyBhbmQg Y29kZS4KClRoZSBzdGQgaW4gdXNlIGlzIGdudTk5LgoKPgo+PiArICAgIGlmICggYW1kX2ZhbTEw X2VycmF0dW0gKQo+PiArICAgIHsKPj4gKyAgICAgICAgLyoKPj4gKyAgICAgICAgICogQU1EIEZh bTEwIGFwcGVhcnMgdG8gZGVmZXIgdGhlIHNldHRpbmcgb2YgYWNjZXNzIGJpdHMgZm9yIGltcGxp Y2l0Cj4+ICsgICAgICAgICAqIGxvYWRzLiAgQXMgYSByZXN1bHQsIHRoZSBpbXBsaWNpdCB0ZXN0 cyAod2hpY2ggbG9hZCAlZnMpIGRvbid0Cj4+ICsgICAgICAgICAqIG5lY2Vzc2FyaWx5IG9ic2Vy dmUgdGhlIGFjY2VzcyBiaXRzIGJlaW5nIHNldCBvbiB0aGUgcGFnZXdhbGsgdG8KPj4gKyAgICAg ICAgICogdGhlIExEVC4KPj4gKyAgICAgICAgICoKPj4gKyAgICAgICAgICogRXhwZXJpbWVudGFs bHksIGEgc2VyaWFsaXNpbmcgaW5zdHJ1Y3Rpb24gZml4ZXMgdGhpbmdzLCBvciBhIGxvb3AKPj4g KyAgICAgICAgICogb2YgMTAwMCBub3BzLCBidXQgc28gZG9lcyBmb3JjaW5nIHRoZSB1c2Ugb2Yg dGhlIGxvYWRlZCBzZWdtZW50Lgo+PiArICAgICAgICAgKgo+PiArICAgICAgICAgKiBJZiB0aGlz IGlzIGFuIGltcGxpY2l0IGxvYWQgd2hpY2ggZGlkbid0IGZhdWx0LCByZWFkIHRocm91Z2ggJWZz IHRvCj4+ICsgICAgICAgICAqIGZvcmNlIGl0IHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBzZWdtZW50 IGNhY2hlLgo+IFRoZSBsb2FkIGludG8gdGhlIHNlZ21lbnQgY2FjaGUgY2VydGFpbmx5IGhhcyBh dCBsZWFzdCBzdGFydGVkLCBzbwo+IG1heWJlIHRoZSBiZXR0ZXIgKG1vcmUgcHJlY2lzZSkgd29y ZGluZyB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZQo+ICIuLi4gZm9yY2UgdGhlIGxvYWQgaW50byB0 aGUgc2VnbWVudCBjYWNoZSB0byBjb21wbGV0ZSI/CgpUaGUgZmFjdCB0aGF0ICNHUCBmYXVsdHMg Zm9yIGJhZCBlbnRyaWVzIHdvcmsgYXBwZWFyIHRvIHdvcmsgcHJvcGVybHkKd291bGQgc3VnZ2Vz dCB0aGF0IHRoZSBhY2Nlc3MgaGFzIGhhcHBlbmVkLgoKSSBjYW4ndCBmYXRob20gd2hhdCBhcmNo aXRlY3R1cmFsIHF1aXJrcyB3b3VsZCBsZWFkIHRvIG9ic2VydmFibGUKYmVoYXZpb3VyIGxpa2Ug dGhpcy4KCj4KPj4gK2V4aW5mb190IGNhbGMoc3RydWN0IG1hcHBpbmdfaW5mbyAqbSwgdWludDY0 X3QgbmV3LCB1bnNpZ25lZCBpbnQgd2FsaywgZW51bSBtb2RpZmllciBtb2QpCj4gVG8gb3RoZXIg dGhhbiB5b3UgYXMgdGhlIGF1dGhvciBvZiB0aGUgY29kZSwgaXQgd291bGQgaGVscCBpZiB0aGUK PiBuYW1lIG9mIHRoZSBmdW5jdGlvbiBpbmRpY2F0ZWQgd2hhdCBpdCB3YW50cyB0byBjYWxjdWxh dGUuCgpGYWlyIGVub3VnaC4gIEkgbmVlZCB0byBkbyBhIGdlbmVyYWwgZG9jdW1lbnRhdGlvbiBz d2VlcCBhY3Jvc3MgdGhpcwpwYXRjaCBhbnl3YXkuCgo+Cj4+ICt7Cj4+ICsgICAgYm9vbCBueF92 YWxpZCAgID0gQ09ORklHX1BBR0lOR19MRVZFTFMgPj0gMyAmJiAoaG9zdF9ueF9sZWFrZWQgfHwg KG1vZCAmIE5YKSk7Cj4+ICsgICAgYm9vbCBpbnNuX3ZhbGlkID0gbnhfdmFsaWQgfHwgKG1vZCAm IFNNRVApOwo+PiArICAgIHVpbnQ2NF90IHJzdmQgPSAoKDFVTEwgPDwgNTIpIC0gMSkgJiB+KCgx VUxMIDw8IG1heHBoeXNhZGRyKSAtIDEpOwo+PiArCj4+ICsgICAgLyogQWNjdW11bGF0ZSBhZGRp dGlvbmFsIGJpdHMgd2hpY2ggYXJlIHJlc2VydmVkLiAqLwo+PiArICAgIGlmICggIW54X3ZhbGlk ICkKPj4gKyAgICAgICAgcnN2ZCB8PSBfUEFHRV9OWDsKPj4gKwo+PiArICAgIGlmICggbS0+bGV2 ZWwgPT0gNCApCj4+ICsgICAgICAgIHJzdmQgfD0gX1BBR0VfUFNFIHwgKHZlbmRvcl9pc19hbWQg PyBfUEFHRV9HTE9CQUwgOiAwKTsKPj4gKyAgICBlbHNlIGlmICggbS0+bGV2ZWwgPT0gMyAmJiAh Y3B1X2hhc19wYWdlMWdiICkKPj4gKyAgICAgICAgcnN2ZCB8PSBfUEFHRV9QU0U7Cj4gU2hvdWxk bid0IHRoaXMgc2Vjb25kIGNvbmRpdGlvbmFsIGluY2x1ZGUgQ09ORklHX1BBR0lOR19MRVZFTFMg PiAzPwo+IENlcnRhaW5seSB0aGF0IGJpdCBpcyByZXNlcnZlZCB0aGVyZSB0b28sIGJ1dCB0aGVy ZSBhcmUgcXVpdGUgYSBmZXcKPiBtb3JlLgoKSSBkb24ndCB0ZXN0IDMtbGV2ZWwgTDMgZW50cmll cy4gIFRoZXkgZG9uJ3QgYmVoYXZlIGxpa2Ugb3RoZXIgYml0cyBvZgpwYWdldGFibGUgaW5mcmFz dHJ1Y3R1cmUsIGFzIHRoZXkgdGFrZSBlZmZlY3QgYXQgdGhlIHBvaW50IG9mIG1vdiB0bwolY3Iz LCBhbmQgZ2V0IHJlLXJlYWQgdW5kZXIgYSBudW1iZXIgb2YgVExCIGZsdXNoIGNvbmRpdGlvbnMu CgpUaGV5IGFyZSBhbHNvIGJyb2tlbiBhbmQgY2F1c2Ugdm1lbnRyeSBmYWlsdXJlcywgYXMgWGVu IGlzIGxlZnQgdG8KbWFuYWdlIHRoZSBQRFBUUnMgaXRzZWxmLCBhbmQgZG9lcyBhIHJhdGhlciBw b29yIGpvYi4KCj4KPj4gK3ZvaWQgdGVzdF9wdGUoY29uc3Qgc3RydWN0IHN0dWJzICpzdHVicywg c3RydWN0IG1hcHBpbmdfaW5mbyAqbSwgdWludDY0X3QgIG92ZXJsYXkpCj4+ICt7Cj4+ICsgICAg dWludDY0X3QgbmV3ID0gbS0+cGFkZHIgfCBvdmVybGF5Owo+PiArICAgIGJvb2wgdXNlciA9IGZh bHNlOwo+PiArCj4+ICsgICAgdW5kZXJfdGVzdC5wdGV2YWwgPSAqbS0+cHRlID0gbmV3Owo+PiAr ICAgIHVuZGVyX3Rlc3QucHRlX3ByaW50ZWQgPSBmYWxzZTsKPj4gKyAgICBjbGVhcl9hZChtKTsK Pj4gKwo+PiArICAgIHVuZGVyX3Rlc3QuYWN0aXZlID0gdHJ1ZTsKPj4gKwo+PiArICAgIGZvciAo IDsgOyB1c2VyID0gdHJ1ZSApCj4+ICsgICAgewo+PiArICAgICAgICB1bnNpZ25lZCBpbnQgYmFz ZSA9IHVzZXIgPyBQRkVDKFUpIDogMDsKPj4gKwo+PiArI2RlZmluZSBDQUxMKGZuLCB2YSkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAg ICAgICAodXNlciA/IGV4ZWNfdXNlcl9wYXJhbShmbiAjIyBfdXNlciwgKHVuc2lnbmVkIGxvbmcp KHZhKSkgICAgICAgXAo+PiArICAgICAgICAgICAgICA6IGZuKCh1bnNpZ25lZCBsb25nKSh2YSkp KQo+PiArCj4+ICsgICAgICAgIHVuZGVyX3Rlc3QudXNlciA9IHVzZXI7Cj4+ICsKPj4gKyAgICAg ICAgLyogTWFwIHRoZSBleGVjIEZFUCBzdHViIHdpdGggc3VpdGFibGUgcGVybWlzc2lvbnMuICov Cj4+ICsgICAgICAgIGlmICggc3R1YnMgPT0gJmZvcmNlX3N0dWJzICkKPj4gKyAgICAgICAgewo+ PiArICAgICAgICAgICAgKm0tPmZlX3B0ZSAmPSB+X1BBR0VfVVNFUjsKPj4gKyAgICAgICAgICAg IGlmICggdXNlciApCj4+ICsgICAgICAgICAgICAgICAgKm0tPmZlX3B0ZSB8PSBfUEFHRV9VU0VS Owo+PiArICAgICAgICAgICAgaW52bHBnKG0tPnZhIC0gNSk7Cj4gV2h5IGRvIHlvdSBuZWVkIHRv IGRvIHRoZSBmb3IgdGhlIEZFUCBwcmVmaXgsIGJ1dCBub3QgZm9yIHRoZQo+IHJlc3Qgb2YgdGhl IHN0dWI/CgpUaGUgRkVQIGlzIGFsd2F5cyBtYXBwZWQgYnkgYSBkaWZmZXJlbnQgUFRFIHRvIG0t PnZhLiAgVGhpcyB3YXMgcXVpdGUKYXdrd2FyZCB0byBzZXQgdXAgcHJvcGVybHksIHRvIHRlc3Qg aW5zdHJ1Y3Rpb24gZmV0Y2hlcy4KCkZFUCBuZWVkcyB0byBzdGFydCA1IGJlZm9yZSB0aGUgbGlu ZWFyIGFkZHJlc3MgdW5kZXIgdGVzdCwgYXMgaXQgZG9lc24ndApyZWRpcmVjdCBjb250cm9sIGZs b3cuICBUaGUgbGluZWFyIGFkZHJlc3MgdW5kZXIgdGVzdCBuZWVkcyB0byBiZSBhYmxlCnRvIGhh dmUgX1BBR0VfVVNFUiBtaXNtYXRjaGVkIGFnYWluc3QgY3BsLiAgVGhlIGluc24gZmV0Y2ggZm9y IEZFUCBjYW4ndApiZSBtaXNtYXRjaGVkIGFnYWluc3QgX1BBR0VfVVNFUiwgc28gdGhlIGxpbmVh ciBhZGRyZXNzIG5lZWRzIHRvIGJlCnNlcGFyYXRlbHkgY29udHJvbGxhYmxlLiAgVGhlcmVmb3Jl LCB0aGV5IG5lZWQgdG8gYmUgbWFwcGVkIGJ5IGRpZmZlcmVudApQVEVzLgoKQSBzaWRlIGVmZmVj dCBvZiBuZWVkaW5nIGRpZmZlcmVudCBQVEVzLCBidXQgYWRqYWNlbnQgbGluZWFyIGFkZHJlc3Nl cwppcyB0aGF0IHRoZSBsaW5lYXIgYWRkcmVzc2VzIG11c3QgYmUgYWxpZ25lZCBvbiB0aGUgbGFy Z2VzdCBzdXBlcnBhZ2UKZXhwcmVzc2libGUgaW4gdGhlIGN1cnJlbnQgcGFnaW5nIG1vZGUuCgo+ Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvdGVzdHMvcGFnZXRhYmxlLWVtdWxhdGlvbi9zdHVi cy5oCj4+IEBAIC0wLDAgKzEsMjUgQEAKPj4gKyNpZm5kZWYgX0xPV0xFVkVMX0hfCj4+ICsjZGVm aW5lIF9MT1dMRVZFTF9IXwo+PiArCj4+ICt1bnNpZ25lZCBsb25nIHN0dWJfcmVhZCh1bnNpZ25l ZCBsb25nIHZhKTsKPj4gK3Vuc2lnbmVkIGxvbmcgc3R1Yl9pbXBsaWNpdCh1bnNpZ25lZCBsb25n IHNlbCk7IC8qIHVuc2lnbmVkIGxvbmcgc2VsICovCj4gV2hhdCBhcmUgdGhlc2UgY29tbWVudHMg aW50ZW5kZWQgdG8gdGVsbCB0aGUgcmVhZGVyPwoKU3RhbGUuICBUaGVzZSBwcm90b3R5cGVzIHVz ZWQgdG8gYmUgdm9pZCAqIHZhLgoKfkFuZHJldwoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==