From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH v2 1/3] x86/ioreq server: Add new functions to get/set memory types. Date: Tue, 5 Apr 2016 14:57:38 +0100 Message-ID: References: <1459421618-5991-1-git-send-email-yu.c.zhang@linux.intel.com> <1459421618-5991-2-git-send-email-yu.c.zhang@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1459421618-5991-2-git-send-email-yu.c.zhang@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Yu Zhang Cc: Keir Fraser , Andrew Cooper , "xen-devel@lists.xen.org" , Paul Durrant , "Lv, Zhiyuan" , Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBNYXIgMzEsIDIwMTYgYXQgMTE6NTMgQU0sIFl1IFpoYW5nIDx5dS5jLnpoYW5nQGxp bnV4LmludGVsLmNvbT4gd3JvdGU6Cj4gRm9yIGNsYXJpdHkgdGhpcyBwYXRjaCBicmVha3MgdGhl IGNvZGUgdG8gc2V0L2dldCBtZW1vcnkgdHlwZXMgb3V0Cj4gb2YgZG9faHZtX29wKCkgaW50byBk ZWRpY2F0ZWQgZnVuY3Rpb25zOiBodm1vcF9zZXQvZ2V0X21lbV90eXBlKCkuCj4gQWxzbywgZm9y IGNsYXJpdHksIGNoZWNrcyBmb3Igd2hldGhlciBhIG1lbW9yeSB0eXBlIGNoYW5nZSBpcyBhbGxv d2VkCj4gYXJlIGJyb2tlbiBvdXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIGNhbGxlZCBieSBo dm1vcF9zZXRfbWVtX3R5cGUoKS4KPgo+IFRoZXJlIGlzIG5vIGludGVudGlvbmFsIGZ1bmN0aW9u YWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guCj4KPiBTaWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJhbnQg PHBhdWwuZHVycmFudEBjaXRyaXguY29tPgo+IFNpZ25lZC1vZmYtYnk6IFl1IFpoYW5nIDx5dS5j LnpoYW5nQGxpbnV4LmludGVsLmNvbT4KPiBDYzogS2VpciBGcmFzZXIgPGtlaXJAeGVuLm9yZz4K PiBDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgo+IENjOiBBbmRyZXcgQ29vcGVy IDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgoKUmV2aWV3ZWQtYnk6IEdlb3JnZSBEdW5sYXAg PGdlb3JnZS5kdW5sYXBAY2l0cml4LmNvbT4KCj4gLS0tCj4gIHhlbi9hcmNoL3g4Ni9odm0vaHZt LmMgfCAyODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+ICAxIGZpbGUgY2hhbmdlZCwgMTU5IGluc2VydGlvbnMoKyksIDEyNSBkZWxldGlvbnMoLSkK Pgo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVuL2FyY2gveDg2L2h2 bS9odm0uYwo+IGluZGV4IDgwZDU5ZmYuLmY3MDA5MjMgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gv eDg2L2h2bS9odm0uYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKPiBAQCAtNjU0Nyw2 ICs2NTQ3LDYxIEBAIHN0YXRpYyBpbnQgZG9fYWx0cDJtX29wKAo+ICAgICAgcmV0dXJuIHJjOwo+ ICB9Cj4KPiArc3RhdGljIGludCBodm1vcF9nZXRfbWVtX3R5cGUoCj4gKyAgICBYRU5fR1VFU1Rf SEFORExFX1BBUkFNKHhlbl9odm1fZ2V0X21lbV90eXBlX3QpIGFyZykKPiArewo+ICsgICAgc3Ry dWN0IHhlbl9odm1fZ2V0X21lbV90eXBlIGE7Cj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkOwo+ICsg ICAgcDJtX3R5cGVfdCB0Owo+ICsgICAgaW50IHJjOwo+ICsKPiArICAgIGlmICggY29weV9mcm9t X2d1ZXN0KCZhLCBhcmcsIDEpICkKPiArICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArCj4gKyAg ICBkID0gcmN1X2xvY2tfZG9tYWluX2J5X2FueV9pZChhLmRvbWlkKTsKPiArICAgIGlmICggZCA9 PSBOVUxMICkKPiArICAgICAgICByZXR1cm4gLUVTUkNIOwo+ICsKPiArICAgIHJjID0geHNtX2h2 bV9wYXJhbShYU01fVEFSR0VULCBkLCBIVk1PUF9nZXRfbWVtX3R5cGUpOwo+ICsgICAgaWYgKCBy YyApCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgcmMgPSAtRUlOVkFMOwo+ICsgICAg aWYgKCAhaXNfaHZtX2RvbWFpbihkKSApCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAg LyoKPiArICAgICAqIFVzZSBnZXRfZ2ZuIHF1ZXJ5IGFzIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRo ZSBjdXJyZW50Cj4gKyAgICAgKiB0eXBlLCBub3QgaW4gYWxsb2NhdGluZyBvciB1bnNoYXJpbmcu IFRoYXQnbGwgaGFwcGVuCj4gKyAgICAgKiBvbiBhY2Nlc3MuCj4gKyAgICAgKi8KPiArICAgIGdl dF9nZm5fcXVlcnlfdW5sb2NrZWQoZCwgYS5wZm4sICZ0KTsKPiArICAgIGlmICggcDJtX2lzX21t aW8odCkgKQo+ICsgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX21taW9fZG07Cj4gKyAgICBl bHNlIGlmICggdCA9PSBwMm1fbW1pb193cml0ZV9kbSApCj4gKyAgICAgICAgYS5tZW1fdHlwZSA9 IEhWTU1FTV9tbWlvX3dyaXRlX2RtOwo+ICsgICAgZWxzZSBpZiAoIHAybV9pc19yZWFkb25seSh0 KSApCj4gKyAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFtX3JvOwo+ICsgICAgZWxzZSBp ZiAoIHAybV9pc19yYW0odCkgKQo+ICsgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9y dzsKPiArICAgIGVsc2UgaWYgKCBwMm1faXNfcG9kKHQpICkKPiArICAgICAgICBhLm1lbV90eXBl ID0gIEhWTU1FTV9yYW1fcnc7Cj4gKyAgICBlbHNlIGlmICggcDJtX2lzX2dyYW50KHQpICkKPiAr ICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1fcnc7Cj4gKyAgICBlbHNlCj4gKyAgICAg ICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fbW1pb19kbTsKPiArCj4gKyAgICByYyA9IC1FRkFVTFQ7 Cj4gKyAgICBpZiAoIF9fY29weV90b19ndWVzdChhcmcsICZhLCAxKSApCj4gKyAgICAgICAgZ290 byBvdXQ7Cj4gKyAgICByYyA9IDA7Cj4gKwo+ICsgb3V0Ogo+ICsgICAgcmN1X3VubG9ja19kb21h aW4oZCk7Cj4gKwo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICAvKgo+ICAgKiBOb3RlIHRo YXQgdGhpcyB2YWx1ZSBpcyBlZmZlY3RpdmVseSBwYXJ0IG9mIHRoZSBBQkksIGV2ZW4gaWYgd2Ug ZG9uJ3QgbmVlZAo+ICAgKiB0byBtYWtlIGl0IGEgZm9ybWFsIHBhcnQgb2YgaXQ6IEEgZ3Vlc3Qg c3VzcGVuZGVkIGZvciBtaWdyYXRpb24gaW4gdGhlCj4gQEAgLTY1NTUsNiArNjYxMCwxMDUgQEAg c3RhdGljIGludCBkb19hbHRwMm1fb3AoCj4gICAqLwo+ICAjZGVmaW5lIEhWTU9QX29wX21hc2sg MHhmZgo+Cj4gK3N0YXRpYyBib29sX3QgaHZtX2FsbG93X3AybV90eXBlX2NoYW5nZShwMm1fdHlw ZV90IG9sZCwgcDJtX3R5cGVfdCBuZXcpCj4gK3sKPiArICAgIGlmICggcDJtX2lzX3JhbShvbGQp IHx8Cj4gKyAgICAgICAgIChwMm1faXNfaG9sZShvbGQpICYmIG5ldyA9PSBwMm1fbW1pb19kbSkg fHwKPiArICAgICAgICAgKG9sZCA9PSBwMm1fbW1pb193cml0ZV9kbSAmJiBuZXcgPT0gcDJtX3Jh bV9ydykgKQo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGh2bW9wX3NldF9tZW1fdHlwZSgKPiArICAgIFhFTl9HVUVTVF9IQU5E TEVfUEFSQU0oeGVuX2h2bV9zZXRfbWVtX3R5cGVfdCkgYXJnLAo+ICsgICAgdW5zaWduZWQgbG9u ZyAqaXRlcikKPiArewo+ICsgICAgdW5zaWduZWQgbG9uZyBzdGFydF9pdGVyID0gKml0ZXI7Cj4g KyAgICBzdHJ1Y3QgeGVuX2h2bV9zZXRfbWVtX3R5cGUgYTsKPiArICAgIHN0cnVjdCBkb21haW4g KmQ7Cj4gKyAgICBpbnQgcmM7Cj4gKwo+ICsgICAgLyogSW50ZXJmYWNlIHR5cGVzIHRvIGludGVy bmFsIHAybSB0eXBlcyAqLwo+ICsgICAgc3RhdGljIGNvbnN0IHAybV90eXBlX3QgbWVtdHlwZVtd ID0gewo+ICsgICAgICAgIFtIVk1NRU1fcmFtX3J3XSAgPSBwMm1fcmFtX3J3LAo+ICsgICAgICAg IFtIVk1NRU1fcmFtX3JvXSAgPSBwMm1fcmFtX3JvLAo+ICsgICAgICAgIFtIVk1NRU1fbW1pb19k bV0gPSBwMm1fbW1pb19kbSwKPiArICAgICAgICBbSFZNTUVNX21taW9fd3JpdGVfZG1dID0gcDJt X21taW9fd3JpdGVfZG0KPiArICAgIH07Cj4gKwo+ICsgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3Qo JmEsIGFyZywgMSkgKQo+ICsgICAgICAgIHJldHVybiAtRUZBVUxUOwo+ICsKPiArICAgIHJjID0g cmN1X2xvY2tfcmVtb3RlX2RvbWFpbl9ieV9pZChhLmRvbWlkLCAmZCk7Cj4gKyAgICBpZiAoIHJj ICE9IDAgKQo+ICsgICAgICAgIHJldHVybiByYzsKPiArCj4gKyAgICByYyA9IC1FSU5WQUw7Cj4g KyAgICBpZiAoICFpc19odm1fZG9tYWluKGQpICkKPiArICAgICAgICBnb3RvIG91dDsKPiArCj4g KyAgICByYyA9IHhzbV9odm1fY29udHJvbChYU01fRE1fUFJJViwgZCwgSFZNT1Bfc2V0X21lbV90 eXBlKTsKPiArICAgIGlmICggcmMgKQo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsKPiArICAgIHJj ID0gLUVJTlZBTDsKPiArICAgIGlmICggYS5uciA8IHN0YXJ0X2l0ZXIgfHwKPiArICAgICAgICAg KChhLmZpcnN0X3BmbiArIGEubnIgLSAxKSA8IGEuZmlyc3RfcGZuKSB8fAo+ICsgICAgICAgICAo KGEuZmlyc3RfcGZuICsgYS5uciAtIDEpID4gZG9tYWluX2dldF9tYXhpbXVtX2dwZm4oZCkpICkK PiArICAgICAgICBnb3RvIG91dDsKPiArCj4gKyAgICBpZiAoIGEuaHZtbWVtX3R5cGUgPj0gQVJS QVlfU0laRShtZW10eXBlKSApCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgd2hpbGUg KCBhLm5yID4gc3RhcnRfaXRlciApCj4gKyAgICB7Cj4gKyAgICAgICAgdW5zaWduZWQgbG9uZyBw Zm4gPSBhLmZpcnN0X3BmbiArIHN0YXJ0X2l0ZXI7Cj4gKyAgICAgICAgcDJtX3R5cGVfdCB0Owo+ ICsKPiArICAgICAgICBnZXRfZ2ZuX3Vuc2hhcmUoZCwgcGZuLCAmdCk7Cj4gKyAgICAgICAgaWYg KCBwMm1faXNfcGFnaW5nKHQpICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHB1dF9nZm4o ZCwgcGZuKTsKPiArICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUoZCwgcGZuKTsK PiArICAgICAgICAgICAgcmMgPSAtRUFHQUlOOwo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgaWYgKCBwMm1faXNfc2hhcmVkKHQpICkKPiArICAgICAgICB7 Cj4gKyAgICAgICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKPiArICAgICAgICAgICAgcmMgPSAtRUFH QUlOOwo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYg KCAhaHZtX2FsbG93X3AybV90eXBlX2NoYW5nZSh0LCBtZW10eXBlW2EuaHZtbWVtX3R5cGVdKSAp Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBwdXRfZ2ZuKGQsIHBmbik7Cj4gKyAgICAgICAg ICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmMgPSBwMm1fY2hhbmdl X3R5cGVfb25lKGQsIHBmbiwgdCwgbWVtdHlwZVthLmh2bW1lbV90eXBlXSk7Cj4gKyAgICAgICAg cHV0X2dmbihkLCBwZm4pOwo+ICsKPiArICAgICAgICBpZiAoIHJjICkKPiArICAgICAgICAgICAg Z290byBvdXQ7Cj4gKwo+ICsgICAgICAgIC8qIENoZWNrIGZvciBjb250aW51YXRpb24gaWYgaXQn cyBub3QgdGhlIGxhc3QgaW50ZXJhdGlvbiAqLwo+ICsgICAgICAgIGlmICggYS5uciA+ICsrc3Rh cnRfaXRlciAmJiAhKHN0YXJ0X2l0ZXIgJiBIVk1PUF9vcF9tYXNrKSAmJgo+ICsgICAgICAgICAg ICAgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAg ICByYyA9IC1FUkVTVEFSVDsKPiArICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgfQo+ ICsgICAgfQo+ICsgICAgcmMgPSAwOwo+ICsKPiArIG91dDoKPiArICAgIHJjdV91bmxvY2tfZG9t YWluKGQpOwo+ICsgICAgKml0ZXIgPSBzdGFydF9pdGVyOwo+ICsKPiArICAgIHJldHVybiByYzsK PiArfQo+ICsKPiAgbG9uZyBkb19odm1fb3AodW5zaWduZWQgbG9uZyBvcCwgWEVOX0dVRVNUX0hB TkRMRV9QQVJBTSh2b2lkKSBhcmcpCj4gIHsKPiAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfaXRl ciwgbWFzazsKPiBAQCAtNjc0NCwxMzUgKzY4OTgsMTUgQEAgbG9uZyBkb19odm1fb3AodW5zaWdu ZWQgbG9uZyBvcCwgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lkKSBhcmcpCj4gICAgICB9Cj4K PiAgICAgIGNhc2UgSFZNT1BfZ2V0X21lbV90eXBlOgo+IC0gICAgewo+IC0gICAgICAgIHN0cnVj dCB4ZW5faHZtX2dldF9tZW1fdHlwZSBhOwo+IC0gICAgICAgIHN0cnVjdCBkb21haW4gKmQ7Cj4g LSAgICAgICAgcDJtX3R5cGVfdCB0Owo+IC0KPiAtICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVz dCgmYSwgYXJnLCAxKSApCj4gLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwo+IC0KPiAtICAg ICAgICBkID0gcmN1X2xvY2tfZG9tYWluX2J5X2FueV9pZChhLmRvbWlkKTsKPiAtICAgICAgICBp ZiAoIGQgPT0gTlVMTCApCj4gLSAgICAgICAgICAgIHJldHVybiAtRVNSQ0g7Cj4gLQo+IC0gICAg ICAgIHJjID0geHNtX2h2bV9wYXJhbShYU01fVEFSR0VULCBkLCBvcCk7Cj4gLSAgICAgICAgaWYg KCB1bmxpa2VseShyYykgKQo+IC0gICAgICAgICAgICAvKiBub3RoaW5nICovOwo+IC0gICAgICAg IGVsc2UgaWYgKCBsaWtlbHkoaXNfaHZtX2RvbWFpbihkKSkgKQo+IC0gICAgICAgIHsKPiAtICAg ICAgICAgICAgLyogVXNlIGdldF9nZm4gcXVlcnkgYXMgd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhl IGN1cnJlbnQKPiAtICAgICAgICAgICAgICogdHlwZSwgbm90IGluIGFsbG9jYXRpbmcgb3IgdW5z aGFyaW5nLiBUaGF0J2xsIGhhcHBlbgo+IC0gICAgICAgICAgICAgKiBvbiBhY2Nlc3MuICovCj4g LSAgICAgICAgICAgIGdldF9nZm5fcXVlcnlfdW5sb2NrZWQoZCwgYS5wZm4sICZ0KTsKPiAtICAg ICAgICAgICAgaWYgKCBwMm1faXNfbW1pbyh0KSApCj4gLSAgICAgICAgICAgICAgICBhLm1lbV90 eXBlID0gIEhWTU1FTV9tbWlvX2RtOwo+IC0gICAgICAgICAgICBlbHNlIGlmICggdCA9PSBwMm1f bW1pb193cml0ZV9kbSApCj4gLSAgICAgICAgICAgICAgICBhLm1lbV90eXBlID0gSFZNTUVNX21t aW9fd3JpdGVfZG07Cj4gLSAgICAgICAgICAgIGVsc2UgaWYgKCBwMm1faXNfcmVhZG9ubHkodCkg KQo+IC0gICAgICAgICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFtX3JvOwo+IC0gICAg ICAgICAgICBlbHNlIGlmICggcDJtX2lzX3JhbSh0KSApCj4gLSAgICAgICAgICAgICAgICBhLm1l bV90eXBlID0gIEhWTU1FTV9yYW1fcnc7Cj4gLSAgICAgICAgICAgIGVsc2UgaWYgKCBwMm1faXNf cG9kKHQpICkKPiAtICAgICAgICAgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9ydzsK PiAtICAgICAgICAgICAgZWxzZSBpZiAoIHAybV9pc19ncmFudCh0KSApCj4gLSAgICAgICAgICAg ICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1fcnc7Cj4gLSAgICAgICAgICAgIGVsc2UKPiAt ICAgICAgICAgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX21taW9fZG07Cj4gLSAgICAgICAg ICAgIGlmICggX19jb3B5X3RvX2d1ZXN0KGFyZywgJmEsIDEpICkKPiAtICAgICAgICAgICAgICAg IHJjID0gLUVGQVVMVDsKPiAtICAgICAgICB9Cj4gLSAgICAgICAgZWxzZQo+IC0gICAgICAgICAg ICByYyA9IC1FSU5WQUw7Cj4gLQo+IC0gICAgICAgIHJjdV91bmxvY2tfZG9tYWluKGQpOwo+ICsg ICAgICAgIHJjID0gaHZtb3BfZ2V0X21lbV90eXBlKAo+ICsgICAgICAgICAgICBndWVzdF9oYW5k bGVfY2FzdChhcmcsIHhlbl9odm1fZ2V0X21lbV90eXBlX3QpKTsKPiAgICAgICAgICBicmVhazsK PiAtICAgIH0KPgo+ICAgICAgY2FzZSBIVk1PUF9zZXRfbWVtX3R5cGU6Cj4gLSAgICB7Cj4gLSAg ICAgICAgc3RydWN0IHhlbl9odm1fc2V0X21lbV90eXBlIGE7Cj4gLSAgICAgICAgc3RydWN0IGRv bWFpbiAqZDsKPiAtCj4gLSAgICAgICAgLyogSW50ZXJmYWNlIHR5cGVzIHRvIGludGVybmFsIHAy bSB0eXBlcyAqLwo+IC0gICAgICAgIHN0YXRpYyBjb25zdCBwMm1fdHlwZV90IG1lbXR5cGVbXSA9 IHsKPiAtICAgICAgICAgICAgW0hWTU1FTV9yYW1fcnddICA9IHAybV9yYW1fcncsCj4gLSAgICAg ICAgICAgIFtIVk1NRU1fcmFtX3JvXSAgPSBwMm1fcmFtX3JvLAo+IC0gICAgICAgICAgICBbSFZN TUVNX21taW9fZG1dID0gcDJtX21taW9fZG0sCj4gLSAgICAgICAgICAgIFtIVk1NRU1fbW1pb193 cml0ZV9kbV0gPSBwMm1fbW1pb193cml0ZV9kbQo+IC0gICAgICAgIH07Cj4gLQo+IC0gICAgICAg IGlmICggY29weV9mcm9tX2d1ZXN0KCZhLCBhcmcsIDEpICkKPiAtICAgICAgICAgICAgcmV0dXJu IC1FRkFVTFQ7Cj4gLQo+IC0gICAgICAgIHJjID0gcmN1X2xvY2tfcmVtb3RlX2RvbWFpbl9ieV9p ZChhLmRvbWlkLCAmZCk7Cj4gLSAgICAgICAgaWYgKCByYyAhPSAwICkKPiAtICAgICAgICAgICAg cmV0dXJuIHJjOwo+IC0KPiAtICAgICAgICByYyA9IC1FSU5WQUw7Cj4gLSAgICAgICAgaWYgKCAh aXNfaHZtX2RvbWFpbihkKSApCj4gLSAgICAgICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwo+ IC0KPiAtICAgICAgICByYyA9IHhzbV9odm1fY29udHJvbChYU01fRE1fUFJJViwgZCwgb3ApOwo+ IC0gICAgICAgIGlmICggcmMgKQo+IC0gICAgICAgICAgICBnb3RvIHNldG1lbXR5cGVfZmFpbDsK PiAtCj4gLSAgICAgICAgcmMgPSAtRUlOVkFMOwo+IC0gICAgICAgIGlmICggYS5uciA8IHN0YXJ0 X2l0ZXIgfHwKPiAtICAgICAgICAgICAgICgoYS5maXJzdF9wZm4gKyBhLm5yIC0gMSkgPCBhLmZp cnN0X3BmbikgfHwKPiAtICAgICAgICAgICAgICgoYS5maXJzdF9wZm4gKyBhLm5yIC0gMSkgPiBk b21haW5fZ2V0X21heGltdW1fZ3BmbihkKSkgKQo+IC0gICAgICAgICAgICBnb3RvIHNldG1lbXR5 cGVfZmFpbDsKPiAtCj4gLSAgICAgICAgaWYgKCBhLmh2bW1lbV90eXBlID49IEFSUkFZX1NJWkUo bWVtdHlwZSkgKQo+IC0gICAgICAgICAgICBnb3RvIHNldG1lbXR5cGVfZmFpbDsKPiAtCj4gLSAg ICAgICAgd2hpbGUgKCBhLm5yID4gc3RhcnRfaXRlciApCj4gLSAgICAgICAgewo+IC0gICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHBmbiA9IGEuZmlyc3RfcGZuICsgc3RhcnRfaXRlcjsKPiAtICAg ICAgICAgICAgcDJtX3R5cGVfdCB0Owo+IC0KPiAtICAgICAgICAgICAgZ2V0X2dmbl91bnNoYXJl KGQsIHBmbiwgJnQpOwo+IC0gICAgICAgICAgICBpZiAoIHAybV9pc19wYWdpbmcodCkgKQo+IC0g ICAgICAgICAgICB7Cj4gLSAgICAgICAgICAgICAgICBwdXRfZ2ZuKGQsIHBmbik7Cj4gLSAgICAg ICAgICAgICAgICBwMm1fbWVtX3BhZ2luZ19wb3B1bGF0ZShkLCBwZm4pOwo+IC0gICAgICAgICAg ICAgICAgcmMgPSAtRUFHQUlOOwo+IC0gICAgICAgICAgICAgICAgZ290byBzZXRtZW10eXBlX2Zh aWw7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgaWYgKCBwMm1faXNfc2hhcmVkKHQp ICkKPiAtICAgICAgICAgICAgewo+IC0gICAgICAgICAgICAgICAgcHV0X2dmbihkLCBwZm4pOwo+ IC0gICAgICAgICAgICAgICAgcmMgPSAtRUFHQUlOOwo+IC0gICAgICAgICAgICAgICAgZ290byBz ZXRtZW10eXBlX2ZhaWw7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgaWYgKCAhcDJt X2lzX3JhbSh0KSAmJgo+IC0gICAgICAgICAgICAgICAgICghcDJtX2lzX2hvbGUodCkgfHwgYS5o dm1tZW1fdHlwZSAhPSBIVk1NRU1fbW1pb19kbSkgJiYKPiAtICAgICAgICAgICAgICAgICAodCAh PSBwMm1fbW1pb193cml0ZV9kbSB8fCBhLmh2bW1lbV90eXBlICE9IEhWTU1FTV9yYW1fcncpICkK PiAtICAgICAgICAgICAgewo+IC0gICAgICAgICAgICAgICAgcHV0X2dmbihkLCBwZm4pOwo+IC0g ICAgICAgICAgICAgICAgZ290byBzZXRtZW10eXBlX2ZhaWw7Cj4gLSAgICAgICAgICAgIH0KPiAt Cj4gLSAgICAgICAgICAgIHJjID0gcDJtX2NoYW5nZV90eXBlX29uZShkLCBwZm4sIHQsIG1lbXR5 cGVbYS5odm1tZW1fdHlwZV0pOwo+IC0gICAgICAgICAgICBwdXRfZ2ZuKGQsIHBmbik7Cj4gLSAg ICAgICAgICAgIGlmICggcmMgKQo+IC0gICAgICAgICAgICAgICAgZ290byBzZXRtZW10eXBlX2Zh aWw7Cj4gLQo+IC0gICAgICAgICAgICAvKiBDaGVjayBmb3IgY29udGludWF0aW9uIGlmIGl0J3Mg bm90IHRoZSBsYXN0IGludGVyYXRpb24gKi8KPiAtICAgICAgICAgICAgaWYgKCBhLm5yID4gKytz dGFydF9pdGVyICYmICEoc3RhcnRfaXRlciAmIEhWTU9QX29wX21hc2spICYmCj4gLSAgICAgICAg ICAgICAgICAgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCj4gLSAgICAgICAgICAgIHsKPiAt ICAgICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOwo+IC0gICAgICAgICAgICAgICAgZ290byBz ZXRtZW10eXBlX2ZhaWw7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICB9Cj4gLQo+IC0gICAg ICAgIHJjID0gMDsKPiAtCj4gLSAgICBzZXRtZW10eXBlX2ZhaWw6Cj4gLSAgICAgICAgcmN1X3Vu bG9ja19kb21haW4oZCk7Cj4gKyAgICAgICAgcmMgPSBodm1vcF9zZXRfbWVtX3R5cGUoCj4gKyAg ICAgICAgICAgIGd1ZXN0X2hhbmRsZV9jYXN0KGFyZywgeGVuX2h2bV9zZXRfbWVtX3R5cGVfdCks Cj4gKyAgICAgICAgICAgICZzdGFydF9pdGVyKTsKPiAgICAgICAgICBicmVhazsKPiAtICAgIH0K Pgo+ICAgICAgY2FzZSBIVk1PUF9wYWdldGFibGVfZHlpbmc6Cj4gICAgICB7Cj4gLS0KPiAxLjku MQo+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ IFhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKPiBYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwo+IGh0dHA6 Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK