From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vijay Kilari Subject: Re: [RFC PATCH v2 04/25] x86: NUMA: Add accessors for acpi_numa, numa_off and numa_fake variables Date: Tue, 25 Apr 2017 12:24:57 +0530 Message-ID: References: <1490716413-19796-1-git-send-email-vijay.kilari@gmail.com> <1490716413-19796-5-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall Cc: Tim Deegan , Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , "xen-devel@lists.xen.org" , Jan Beulich , Vijaya Kumar K List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBBcHIgMjAsIDIwMTcgYXQgOToyOSBQTSwgSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3Jh bGxAYXJtLmNvbT4gd3JvdGU6Cj4gSGkgVmlqYXksCj4KPiBPbiAyOC8wMy8xNyAxNjo1Mywgdmlq YXkua2lsYXJpQGdtYWlsLmNvbSB3cm90ZToKPj4KPj4gRnJvbTogVmlqYXlhIEt1bWFyIEsgPFZp amF5YS5LdW1hckBjYXZpdW0uY29tPgo+Pgo+PiBBZGQgYWNjZXNzb3IgZnVuY3Rpb25zIGZvciBh Y3BpX251bWEgYW5kIG51bWFfb2ZmIHN0YXRpYwo+PiB2YXJpYWJsZXMuIEluaXQgdmFsdWUgb2Yg YWNwaV9udW1hIGlzIHNldCAxIGluc3RlYWQgb2YgMC4KPgo+Cj4gUGxlYXNlIGV4cGxhaW4gd2h5 IHlvdSBjaGFuZ2UgdGhlIGFjcGlfbnVtYSB2YWx1ZSBmcm9tIDAgdG8gMS4KCnByZXZpb3VzbHkg YWNwaV9udW1hIHdhcyBzOCBhbmQgYXJlIHVzaW5nIDAgYW5kIC0xIHZhbHVlcy4gSSBoYXZlIG1h ZGUKaXQgYm9vbCBhbmQgc2V0CnRoZSBpbml0aWFsIHZhbHVlIHRvIDEuCgpCeSBzZXR0aW5nIDEs IHdlIGFyZSBlbmFibGluZyBhY3BpX251bWEgYnkgZGVmYXVsdC4gSWYgbm90IGVuYWJsZWQsIHRo ZSBiZWxvdwpjYWxsIGhhcyBjaGVjayBzcmF0X2Rpc2FibGVkKCkgYmVmb3JlIHByb2NlZWRpbmcg ZmFpbHMuCgphY3BpX251bWFfbWVtb3J5X2FmZmluaXR5X2luaXQoY29uc3Qgc3RydWN0IGFjcGlf c3JhdF9tZW1fYWZmaW5pdHkgKm1hKQp7Ci4uLi4KCiAgICBpZiAoIHNyYXRfZGlzYWJsZWQoKSAp CiAgICAgICAgcmV0dXJuOwoKfQoKPgo+IEFsc28sIEkgYW0gbm90IHN1cmUgdG8gdW5kZXJzdGFu ZCB0aGUgYmVuZWZpdHMgb2YgdGhvc2UgaGVscGVycy4gV2h5IGRvIHlvdQo+IG5lZWQgdGhlbT8g V2h5IG5vdCB1c2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlIGRpcmVjdGx5LCB0aGlzIHdpbGwgYXZv aWQgdG8KPiBjYWxsIGEgZnVuY3Rpb24ganVzdCBmb3IgcmV0dXJuaW5nIGEgdmFsdWUuLi4KClRo ZXNlIGhlbHBlcnMgYXJlIHVzZWQgYnkgYm90aCBjb21tb24gY29kZSBhbmQgYXJjaCBzcGVjaWZp YyBjb2RlIGxhdGVyLgpIZW5jZSBtYWRlIHRoZXNlIGdsb2JhbCB2YXJpYWJsZXMgYXMgc3RhdGlj IGFuZCBhZGRlZCBoZWxwZXJzCgo+Cj4+IEFsc28gcmV0dXJuIHZhbHVlIG9mIHNyYXRfZGlzYWJs ZWQgaXMgY2hhbmdlZCB0byBib29sLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBWaWpheWEgS3VtYXIg SyA8VmlqYXlhLkt1bWFyQGNhdml1bS5jb20+Cj4+IC0tLQo+PiAgeGVuL2FyY2gveDg2L251bWEu YyAgICAgICAgfCA0Mwo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tCj4+ICB4ZW4vYXJjaC94ODYvc2V0dXAuYyAgICAgICB8ICAyICstCj4+ICB4ZW4vYXJjaC94 ODYvc3JhdC5jICAgICAgICB8IDEyICsrKysrKy0tLS0tLQo+PiAgeGVuL2luY2x1ZGUvYXNtLXg4 Ni9hY3BpLmggfCAgMSAtCj4+ICB4ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaCB8ICA1ICstLS0t Cj4+ICB4ZW4vaW5jbHVkZS94ZW4vbnVtYS5oICAgICB8ICAzICsrKwo+PiAgNiBmaWxlcyBjaGFu Z2VkLCA0MiBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9udW1hLmMgYi94ZW4vYXJjaC94ODYvbnVtYS5jCj4+IGluZGV4IDk2NGZj NWEuLjZiNzk0YTcgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9hcmNoL3g4Ni9udW1hLmMKPj4gKysrIGIv eGVuL2FyY2gveDg2L251bWEuYwo+PiBAQCAtNDIsMTIgKzQyLDI3IEBAIGNwdW1hc2tfdCBfX3Jl YWRfbW9zdGx5IG5vZGVfdG9fY3B1bWFza1tNQVhfTlVNTk9ERVNdOwo+Pgo+PiAgbm9kZW1hc2tf dCBfX3JlYWRfbW9zdGx5IG5vZGVfb25saW5lX21hcCA9IHsgeyBbMF0gPSAxVUwgfSB9Owo+Pgo+ PiAtYm9vbCBudW1hX29mZiA9IDA7Cj4+IC1zOCBhY3BpX251bWEgPSAwOwo+PiArc3RhdGljIGJv b2wgbnVtYV9vZmYgPSAwOwo+PiArc3RhdGljIGJvb2wgYWNwaV9udW1hID0gMTsKPgo+Cj4gUGxl YXNlIGRvbid0IG1peCAwLzEgYW5kIGJvb2wuIEluc3RlYWQgdXNlIGZhbHNlL3RydWUuCgpPSy4K Pgo+Cj4+Cj4+IC1pbnQgc3JhdF9kaXNhYmxlZCh2b2lkKQo+PiArYm9vbCBpc19udW1hX29mZih2 b2lkKQo+PiAgewo+PiAtICAgIHJldHVybiBudW1hX29mZiB8fCBhY3BpX251bWEgPCAwOwo+PiAr ICAgIHJldHVybiBudW1hX29mZjsKPj4gK30KPj4gKwo+PiArYm9vbCBnZXRfYWNwaV9udW1hKHZv aWQpCj4+ICt7Cj4+ICsgICAgcmV0dXJuIGFjcGlfbnVtYTsKPj4gK30KPj4gKwo+PiArdm9pZCBz ZXRfYWNwaV9udW1hKGJvb2xfdCB2YWwpCj4+ICt7Cj4+ICsgICAgYWNwaV9udW1hID0gdmFsOwo+ PiArfQo+PiArCj4+ICtib29sIHNyYXRfZGlzYWJsZWQodm9pZCkKPj4gK3sKPj4gKyAgICByZXR1 cm4gbnVtYV9vZmYgfHwgYWNwaV9udW1hID09IDA7Cj4+ICB9Cj4+Cj4+ICAvKgo+PiBAQCAtMjAy LDEzICsyMTcsMTcgQEAgdm9pZCBfX2luaXQgbnVtYV9pbml0X2FycmF5KHZvaWQpCj4+Cj4+ICAj aWZkZWYgQ09ORklHX05VTUFfRU1VCj4+ICBzdGF0aWMgaW50IF9faW5pdGRhdGEgbnVtYV9mYWtl ID0gMDsKPj4gK3N0YXRpYyBpbnQgZ2V0X251bWFfZmFrZSh2b2lkKQo+PiArewo+PiArICAgIHJl dHVybiBudW1hX2Zha2U7Cj4+ICt9Cj4+Cj4+ICAvKiBOdW1hIGVtdWxhdGlvbiAqLwo+PiAgc3Rh dGljIGludCBfX2luaXQgbnVtYV9lbXVsYXRpb24odWludDY0X3Qgc3RhcnRfcGZuLCB1aW50NjRf dCBlbmRfcGZuKQo+PiAgewo+PiAgICAgIGludCBpOwo+PiAgICAgIHN0cnVjdCBub2RlIG5vZGVz W01BWF9OVU1OT0RFU107Cj4+IC0gICAgdWludDY0X3Qgc3ogPSAoKGVuZF9wZm4gLSBzdGFydF9w Zm4pIDw8IFBBR0VfU0hJRlQpIC8gbnVtYV9mYWtlOwo+PiArICAgIHVpbnQ2NF90IHN6ID0gKChl bmRfcGZuIC0gc3RhcnRfcGZuKSA8PCBQQUdFX1NISUZUKSAvCj4+IGdldF9udW1hX2Zha2UoKTsK Pj4KPj4gICAgICAvKiBLbHVkZ2UgbmVlZGVkIGZvciB0aGUgaGFzaCBmdW5jdGlvbiAqLwo+PiAg ICAgIGlmICggaHdlaWdodDY0KHN6KSA+IDEgKQo+PiBAQCAtMjIzLDEwICsyNDIsMTAgQEAgc3Rh dGljIGludCBfX2luaXQgbnVtYV9lbXVsYXRpb24odWludDY0X3Qgc3RhcnRfcGZuLAo+PiB1aW50 NjRfdCBlbmRfcGZuKQo+PiAgICAgIH0KPj4KPj4gICAgICBtZW1zZXQoJm5vZGVzLDAsc2l6ZW9m KG5vZGVzKSk7Cj4+IC0gICAgZm9yICggaSA9IDA7IGkgPCBudW1hX2Zha2U7IGkrKyApCj4+ICsg ICAgZm9yICggaSA9IDA7IGkgPCBnZXRfbnVtYV9mYWtlKCk7IGkrKyApCj4+ICAgICAgewo+PiAg ICAgICAgICBub2Rlc1tpXS5zdGFydCA9IChzdGFydF9wZm4gPDwgUEFHRV9TSElGVCkgKyBpICog c3o7Cj4+IC0gICAgICAgIGlmICggaSA9PSBudW1hX2Zha2UgLSAxICkKPj4gKyAgICAgICAgaWYg KCBpID09IGdldF9udW1hX2Zha2UoKSAtIDEgKQo+PiAgICAgICAgICAgICAgc3ogPSAoZW5kX3Bm biA8PCBQQUdFX1NISUZUKSAtIG5vZGVzW2ldLnN0YXJ0Owo+PiAgICAgICAgICBub2Rlc1tpXS5l bmQgPSBub2Rlc1tpXS5zdGFydCArIHN6Owo+PiAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCj4+ IEBAIC0yMzUsNyArMjU0LDcgQEAgc3RhdGljIGludCBfX2luaXQgbnVtYV9lbXVsYXRpb24odWlu dDY0X3Qgc3RhcnRfcGZuLAo+PiB1aW50NjRfdCBlbmRfcGZuKQo+PiAgICAgICAgICAgICAgICAg KG5vZGVzW2ldLmVuZCAtIG5vZGVzW2ldLnN0YXJ0KSA+PiAyMCk7Cj4+ICAgICAgICAgIG5vZGVf c2V0X29ubGluZShpKTsKPj4gICAgICB9Cj4+IC0gICAgaWYgKCBjb21wdXRlX21lbW5vZGVfc2hp ZnQobm9kZXMsIG51bWFfZmFrZSwgTlVMTCwgJm1lbW5vZGVfc2hpZnQpICkKPj4gKyAgICBpZiAo IGNvbXB1dGVfbWVtbm9kZV9zaGlmdChub2RlcywgZ2V0X251bWFfZmFrZSgpLCBOVUxMLAo+PiAm bWVtbm9kZV9zaGlmdCkgKQo+PiAgICAgIHsKPj4gICAgICAgICAgbWVtbm9kZV9zaGlmdCA9IDA7 Cj4+ICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiTm8gTlVNQSBoYXNoIGZ1bmN0aW9uIGZvdW5k LiBFbXVsYXRpb24KPj4gZGlzYWJsZWQuXG4iKTsKPj4gQEAgLTI1NCwxOCArMjczLDE4IEBAIHZv aWQgX19pbml0IG51bWFfaW5pdG1lbV9pbml0KHVuc2lnbmVkIGxvbmcKPj4gc3RhcnRfcGZuLCB1 bnNpZ25lZCBsb25nIGVuZF9wZm4pCj4+ICAgICAgaW50IGk7Cj4+Cj4+ICAjaWZkZWYgQ09ORklH X05VTUFfRU1VCj4+IC0gICAgaWYgKCBudW1hX2Zha2UgJiYgIW51bWFfZW11bGF0aW9uKHN0YXJ0 X3BmbiwgZW5kX3BmbikgKQo+PiArICAgIGlmICggZ2V0X251bWFfZmFrZSgpICYmICFudW1hX2Vt dWxhdGlvbihzdGFydF9wZm4sIGVuZF9wZm4pICkKPj4gICAgICAgICAgcmV0dXJuOwo+PiAgI2Vu ZGlmCj4+Cj4+ICAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQo+PiAtICAgIGlmICggIW51bWFfb2Zm ICYmICFhY3BpX3NjYW5fbm9kZXMoKHVpbnQ2NF90KXN0YXJ0X3BmbiA8PCBQQUdFX1NISUZULAo+ PiArICAgIGlmICggIWlzX251bWFfb2ZmKCkgJiYgIWFjcGlfc2Nhbl9ub2RlcygodWludDY0X3Qp c3RhcnRfcGZuIDw8Cj4+IFBBR0VfU0hJRlQsCj4+ICAgICAgICAgICAodWludDY0X3QpZW5kX3Bm biA8PCBQQUdFX1NISUZUKSApCj4+ICAgICAgICAgIHJldHVybjsKPj4gICNlbmRpZgo+Pgo+PiAg ICAgIHByaW50ayhLRVJOX0lORk8gIiVzXG4iLAo+PiAtICAgICAgICAgICBudW1hX29mZiA/ICJO VU1BIHR1cm5lZCBvZmYiIDogIk5vIE5VTUEgY29uZmlndXJhdGlvbiBmb3VuZCIpOwo+PiArICAg ICAgICAgICBpc19udW1hX29mZigpID8gIk5VTUEgdHVybmVkIG9mZiIgOiAiTm8gTlVNQSBjb25m aWd1cmF0aW9uCj4+IGZvdW5kIik7Cj4+Cj4+ICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiRmFraW5n IGEgbm9kZSBhdCAlMDE2IlBSSXg2NCItJTAxNiJQUkl4NjQiXG4iLAo+PiAgICAgICAgICAgICAo dWludDY0X3Qpc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQsCj4+IEBAIC0zMTIsNyArMzMxLDcgQEAg c3RhdGljIGludCBfX2luaXQgbnVtYV9zZXR1cChjaGFyICpvcHQpCj4+ICAgICAgaWYgKCAhc3Ry bmNtcChvcHQsIm5vYWNwaSIsNikgKQo+PiAgICAgIHsKPj4gICAgICAgICAgbnVtYV9vZmYgPSAw Owo+PiAtICAgICAgICBhY3BpX251bWEgPSAtMTsKPj4gKyAgICAgICAgYWNwaV9udW1hID0gMDsK Pj4gICAgICB9Cj4+ICAjZW5kaWYKPj4KPj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9zZXR1 cC5jIGIveGVuL2FyY2gveDg2L3NldHVwLmMKPj4gaW5kZXggMWNkMjkwZS4uNDQxMGU1MyAxMDA2 NDQKPj4gLS0tIGEveGVuL2FyY2gveDg2L3NldHVwLmMKPj4gKysrIGIveGVuL2FyY2gveDg2L3Nl dHVwLmMKPj4gQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIHNyYXRfZGV0ZWN0X25vZGUoaW50IGNw dSkKPj4gICAgICBub2RlX3NldF9vbmxpbmUobm9kZSk7Cj4+ICAgICAgbnVtYV9zZXRfbm9kZShj cHUsIG5vZGUpOwo+Pgo+PiAtICAgIGlmICggb3B0X2NwdV9pbmZvICYmIGFjcGlfbnVtYSA+IDAg KQo+PiArICAgIGlmICggb3B0X2NwdV9pbmZvICYmIGdldF9hY3BpX251bWEoKSApCj4+ICAgICAg ICAgIHByaW50aygiQ1BVICVkIEFQSUMgJWQgLT4gTm9kZSAlZFxuIiwgY3B1LCBhcGljaWQsIG5v ZGUpOwo+PiAgfQo+Pgo+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3NyYXQuYyBiL3hlbi9h cmNoL3g4Ni9zcmF0LmMKPj4gaW5kZXggMmQwYzA0Ny4uY2NhY2JjZCAxMDA2NDQKPj4gLS0tIGEv eGVuL2FyY2gveDg2L3NyYXQuYwo+PiArKysgYi94ZW4vYXJjaC94ODYvc3JhdC5jCj4+IEBAIC0x NTMsNyArMTUzLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGJhZF9zcmF0KHZvaWQpCj4+ICB7Cj4+ ICAgICAgICAgaW50IGk7Cj4+ICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBTUkFUIG5v dCB1c2VkLlxuIik7Cj4+IC0gICAgICAgYWNwaV9udW1hID0gLTE7Cj4+ICsgICAgICAgc2V0X2Fj cGlfbnVtYSgwKTsKPj4gICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0xPQ0FMX0FQSUM7IGkr KykKPj4gICAgICAgICAgICAgICAgIGFwaWNpZF90b19ub2RlW2ldID0gTlVNQV9OT19OT0RFOwo+ PiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4bTJub2RlKTsgaSsrKQo+PiBA QCAtMjMyLDcgKzIzMiw3IEBAIGFjcGlfbnVtYV94MmFwaWNfYWZmaW5pdHlfaW5pdChjb25zdCBz dHJ1Y3QKPj4gYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgKnBhKQo+Pgo+PiAgICAgICAg IGFwaWNpZF90b19ub2RlW3BhLT5hcGljX2lkXSA9IG5vZGU7Cj4+ICAgICAgICAgbm9kZV9zZXQo bm9kZSwgcHJvY2Vzc29yX25vZGVzX3BhcnNlZCk7Cj4+IC0gICAgICAgYWNwaV9udW1hID0gMTsK Pj4gKyAgICAgICBzZXRfYWNwaV9udW1hKDEpOwo+PiAgICAgICAgIHByaW50ayhLRVJOX0lORk8g IlNSQVQ6IFBYTSAldSAtPiBBUElDICUwOHggLT4gTm9kZSAldVxuIiwKPj4gICAgICAgICAgICAg ICAgcHhtLCBwYS0+YXBpY19pZCwgbm9kZSk7Cj4+ICB9Cj4+IEBAIC0yNjUsNyArMjY1LDcgQEAg YWNwaV9udW1hX3Byb2Nlc3Nvcl9hZmZpbml0eV9pbml0KGNvbnN0IHN0cnVjdAo+PiBhY3BpX3Ny YXRfY3B1X2FmZmluaXR5ICpwYSkKPj4gICAgICAgICB9Cj4+ICAgICAgICAgYXBpY2lkX3RvX25v ZGVbcGEtPmFwaWNfaWRdID0gbm9kZTsKPj4gICAgICAgICBub2RlX3NldChub2RlLCBwcm9jZXNz b3Jfbm9kZXNfcGFyc2VkKTsKPj4gLSAgICAgICBhY3BpX251bWEgPSAxOwo+PiArICAgICAgIHNl dF9hY3BpX251bWEoMSk7Cj4+ICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDogUFhNICV1 IC0+IEFQSUMgJTAyeCAtPiBOb2RlICV1XG4iLAo+PiAgICAgICAgICAgICAgICBweG0sIHBhLT5h cGljX2lkLCBub2RlKTsKPj4gIH0KPj4gQEAgLTQxOCw3ICs0MTgsNyBAQCBzdGF0aWMgaW50IF9f aW5pdCBzcmF0X3BhcnNlX3JlZ2lvbihzdHJ1Y3QKPj4gYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhl YWRlciwKPj4gICAgICAgICAgICAgKG1hLT5mbGFncyAmIEFDUElfU1JBVF9NRU1fTk9OX1ZPTEFU SUxFKSkKPj4gICAgICAgICAgICAgICAgIHJldHVybiAwOwo+Pgo+PiAtICAgICAgIGlmIChudW1h X29mZikKPj4gKyAgICAgICBpZiAoaXNfbnVtYV9vZmYoKSkKPj4gICAgICAgICAgICAgICAgIHBy aW50ayhLRVJOX0lORk8gIlNSQVQ6ICUwMTMiUFJJeDY0Ii0lMDEzIlBSSXg2NCJcbiIsCj4+ICAg ICAgICAgICAgICAgICAgICAgICAgbWEtPmJhc2VfYWRkcmVzcywgbWEtPmJhc2VfYWRkcmVzcyAr IG1hLT5sZW5ndGggLQo+PiAxKTsKPj4KPj4gQEAgLTQzMyw3ICs0MzMsNyBAQCB2b2lkIF9faW5p dCBzcmF0X3BhcnNlX3JlZ2lvbnModWludDY0X3QgYWRkcikKPj4gICAgICAgICB1aW50NjRfdCBt YXNrOwo+PiAgICAgICAgIHVuc2lnbmVkIGludCBpOwo+Pgo+PiAtICAgICAgIGlmIChhY3BpX2Rp c2FibGVkIHx8IGFjcGlfbnVtYSA8IDAgfHwKPj4gKyAgICAgICBpZiAoYWNwaV9kaXNhYmxlZCB8 fCAoZ2V0X2FjcGlfbnVtYSgpID09IDApIHx8Cj4+ICAgICAgICAgICAgIGFjcGlfdGFibGVfcGFy c2UoQUNQSV9TSUdfU1JBVCwgYWNwaV9wYXJzZV9zcmF0KSkKPj4gICAgICAgICAgICAgICAgIHJl dHVybjsKPj4KPj4gQEAgLTQ2Miw3ICs0NjIsNyBAQCBpbnQgX19pbml0IGFjcGlfc2Nhbl9ub2Rl cyh1aW50NjRfdCBzdGFydCwgdWludDY0X3QKPj4gZW5kKQo+PiAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykKPj4gICAgICAgICAgICAgICAgIGN1dG9mZl9ub2RlKGks IHN0YXJ0LCBlbmQpOwo+Pgo+PiAtICAgICAgIGlmIChhY3BpX251bWEgPD0gMCkKPj4gKyAgICAg ICBpZiAoZ2V0X2FjcGlfbnVtYSgpID09IDApCj4+ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7 Cj4+Cj4+ICAgICAgICAgaWYgKCFub2Rlc19jb3Zlcl9tZW1vcnkoKSkgewo+PiBkaWZmIC0tZ2l0 IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9hY3BpLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2FjcGku aAo+PiBpbmRleCBhNzY2Njg4Li45Mjk4ZDQyIDEwMDY0NAo+PiAtLS0gYS94ZW4vaW5jbHVkZS9h c20teDg2L2FjcGkuaAo+PiArKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2FjcGkuaAo+PiBAQCAt MTAzLDcgKzEwMyw2IEBAIGV4dGVybiB2b2lkIGFjcGlfcmVzZXJ2ZV9ib290bWVtKHZvaWQpOwo+ Pgo+PiAgI2RlZmluZSBBUkNIX0hBU19QT1dFUl9JTklUICAgIDEKPj4KPj4gLWV4dGVybiBzOCBh Y3BpX251bWE7Cj4+ICBleHRlcm4gaW50IGFjcGlfc2Nhbl9ub2Rlcyh1NjQgc3RhcnQsIHU2NCBl bmQpOwo+PiAgI2RlZmluZSBOUl9OT0RFX01FTUJMS1MgKE1BWF9OVU1OT0RFUyoyKQo+Pgo+PiBk aWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9udW1hLmggYi94ZW4vaW5jbHVkZS9hc20t eDg2L251bWEuaAo+PiBpbmRleCBiYjIyYmZmLi5hZTU3NjhiIDEwMDY0NAo+PiAtLS0gYS94ZW4v aW5jbHVkZS9hc20teDg2L251bWEuaAo+PiArKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L251bWEu aAo+PiBAQCAtMzAsMTAgKzMwLDcgQEAgZXh0ZXJuIG5vZGVpZF90IHB4bV90b19ub2RlKHVuc2ln bmVkIGludCBweG0pOwo+Pgo+PiAgZXh0ZXJuIHZvaWQgbnVtYV9hZGRfY3B1KGludCBjcHUpOwo+ PiAgZXh0ZXJuIHZvaWQgbnVtYV9pbml0X2FycmF5KHZvaWQpOwo+PiAtZXh0ZXJuIGJvb2xfdCBu dW1hX29mZjsKPj4gLQo+PiAtCj4+IC1leHRlcm4gaW50IHNyYXRfZGlzYWJsZWQodm9pZCk7Cj4+ ICtleHRlcm4gYm9vbCBzcmF0X2Rpc2FibGVkKHZvaWQpOwo+PiAgZXh0ZXJuIHZvaWQgbnVtYV9z ZXRfbm9kZShpbnQgY3B1LCBub2RlaWRfdCBub2RlKTsKPj4gIGV4dGVybiBub2RlaWRfdCBzZXR1 cF9ub2RlKHVuc2lnbmVkIGludCBweG0pOwo+PiAgZXh0ZXJuIHZvaWQgc3JhdF9kZXRlY3Rfbm9k ZShpbnQgY3B1KTsKPj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9udW1hLmggYi94ZW4v aW5jbHVkZS94ZW4vbnVtYS5oCj4+IGluZGV4IDdhZWYxYTguLjdmNmQwOTAgMTAwNjQ0Cj4+IC0t LSBhL3hlbi9pbmNsdWRlL3hlbi9udW1hLmgKPj4gKysrIGIveGVuL2luY2x1ZGUveGVuL251bWEu aAo+PiBAQCAtMTgsNCArMTgsNyBAQAo+PiAgICAoKChkKS0+dmNwdSAhPSBOVUxMICYmIChkKS0+ dmNwdVswXSAhPSBOVUxMKSBcCj4+ICAgICA/IHZjcHVfdG9fbm9kZSgoZCktPnZjcHVbMF0pIDog TlVNQV9OT19OT0RFKQo+Pgo+PiArYm9vbCBpc19udW1hX29mZih2b2lkKTsKPj4gK2Jvb2wgZ2V0 X2FjcGlfbnVtYSh2b2lkKTsKPj4gK3ZvaWQgc2V0X2FjcGlfbnVtYShib29sIHZhbCk7Cj4KPgo+ IEkgYW0gbm90IHN1cmUgdG8gdW5kZXJzdGFuZCB3aHkgeW91IGFkZCB0aG9zZSBoZWxwZXJzIGRp cmVjdGx5IGhlcmUgaW4KPiB4ZW4vbnVtYS5oLiBJSE1PLCBUaGlzIHNob3VsZCBiZWxvbmcgdG8g dGhlIG1vdmluZyBjb2RlIHBhdGNoZXMuCgpUbyBoYXZlIGNvZGUgbW92aW5nIHBhdGNoZXMgZG9p bmcgb25seSBjb2RlIG1vdmVtZW50LCBJIGhhdmUgZXhwb3J0ZWQKaW4gdGhlIHBhdGNoIGl0IGlz IGRlZmluZWQuCgo+Cj4KPj4gICNlbmRpZiAvKiBfWEVOX05VTUFfSCAqLwo+Pgo+Cj4gLS0KPiBK dWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6 Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=