From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: [PATCH v5 2/8] mm: Extract allocation loop from alloc_heap_pages() Date: Thu, 22 Jun 2017 14:57:04 -0400 Message-ID: <1498157830-21845-3-git-send-email-boris.ostrovsky@oracle.com> References: <1498157830-21845-1-git-send-email-boris.ostrovsky@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1498157830-21845-1-git-send-email-boris.ostrovsky@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, jbeulich@suse.com, Boris Ostrovsky List-Id: xen-devel@lists.xenproject.org VGhpcyB3aWxsIG1ha2UgY29kZSBhIGJpdCBtb3JlIHJlYWRhYmxlLCBlc3BlY2lhbGx5IHdpdGgg Y2hhbmdlcyB0aGF0CndpbGwgYmUgaW50cm9kdWNlZCBpbiBzdWJzZXF1ZW50IHBhdGNoZXMuCgpT aWduZWQtb2ZmLWJ5OiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29t PgotLS0KQ2hhbmdlcyBpbiB2NToKKiBDb25zdGlmaWVkIGdldF9mcmVlX2J1ZGR5KCkncyBzdHJ1 Y3QgZG9tYWluIGFyZ3VtZW50CiogRHJvcHBlZCByZXF1ZXN0IGxvY2FsIHZhcmlhYmxlIGluIGdl dF9mcmVlX2J1ZGR5KCkuCgpCZWNhdXNlIG9mIHJlYmFzaW5nIHRoZXJlIHdlcmUgZmV3IG1vcmUg Y2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNvIEkgZGVjaWRlZCBub3QKdG8ga2VlcCBKYW4ncyBBQ0su CgoKIHhlbi9jb21tb24vcGFnZV9hbGxvYy5jIHwgMTQzICsrKysrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDc5IGluc2VydGlvbnMo KyksIDY0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vcGFnZV9hbGxvYy5j IGIveGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMKaW5kZXggNTcwZDFmNy4uODlmZTNjZSAxMDA2NDQK LS0tIGEveGVuL2NvbW1vbi9wYWdlX2FsbG9jLmMKKysrIGIveGVuL2NvbW1vbi9wYWdlX2FsbG9j LmMKQEAgLTY5NCwyMiArNjk0LDE1IEBAIHN0YXRpYyB2b2lkIHBhZ2VfbGlzdF9hZGRfc2NydWIo c3RydWN0IHBhZ2VfaW5mbyAqcGcsIHVuc2lnbmVkIGludCBub2RlLAogICAgICAgICBwYWdlX2xp c3RfYWRkKHBnLCAmaGVhcChub2RlLCB6b25lLCBvcmRlcikpOwogfQogCi0vKiBBbGxvY2F0ZSAy XkBvcmRlciBjb250aWd1b3VzIHBhZ2VzLiAqLwotc3RhdGljIHN0cnVjdCBwYWdlX2luZm8gKmFs bG9jX2hlYXBfcGFnZXMoCi0gICAgdW5zaWduZWQgaW50IHpvbmVfbG8sIHVuc2lnbmVkIGludCB6 b25lX2hpLAotICAgIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IG1lbWZsYWdzLAot ICAgIHN0cnVjdCBkb21haW4gKmQpCitzdGF0aWMgc3RydWN0IHBhZ2VfaW5mbyAqZ2V0X2ZyZWVf YnVkZHkodW5zaWduZWQgaW50IHpvbmVfbG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHpvbmVfaGksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgbWVtZmxh Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IGRvbWFpbiAqZCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaSwgaiwgem9uZSA9IDAsIG5vZGVtYXNr X3JldHJ5ID0gMDsKICAgICBub2RlaWRfdCBmaXJzdF9ub2RlLCBub2RlID0gTUVNRl9nZXRfbm9k ZShtZW1mbGFncyksIHJlcV9ub2RlID0gbm9kZTsKLSAgICB1bnNpZ25lZCBsb25nIHJlcXVlc3Qg PSAxVUwgPDwgb3JkZXI7Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGcsICpmaXJzdF9kaXJ0eV9w ZyA9IE5VTEw7Ci0gICAgbm9kZW1hc2tfdCBub2RlbWFzayA9IChkICE9IE5VTEwgKSA/IGQtPm5v ZGVfYWZmaW5pdHkgOiBub2RlX29ubGluZV9tYXA7Ci0gICAgYm9vbF90IG5lZWRfdGxiZmx1c2gg PSAwOwotICAgIHVpbnQzMl90IHRsYmZsdXNoX3RpbWVzdGFtcCA9IDA7Ci0KLSAgICAvKiBNYWtl IHN1cmUgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGluIG1lbWZsYWdzIGZvciBub2RlSUQuICovCi0g ICAgQlVJTERfQlVHX09OKChfTUVNRl9iaXRzIC0gX01FTUZfbm9kZSkgPCAoOCAqIHNpemVvZihu b2RlaWRfdCkpKTsKKyAgICBub2RlbWFza190IG5vZGVtYXNrID0gZCA/IGQtPm5vZGVfYWZmaW5p dHkgOiBub2RlX29ubGluZV9tYXA7CisgICAgdW5zaWduZWQgaW50IGosIHpvbmUsIG5vZGVtYXNr X3JldHJ5ID0gMDsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZzsKIAogICAgIGlmICggbm9kZSA9 PSBOVU1BX05PX05PREUgKQogICAgIHsKQEAgLTcyNSwzNCArNzE4LDYgQEAgc3RhdGljIHN0cnVj dCBwYWdlX2luZm8gKmFsbG9jX2hlYXBfcGFnZXMoCiAgICAgZmlyc3Rfbm9kZSA9IG5vZGU7CiAK ICAgICBBU1NFUlQobm9kZSA8IE1BWF9OVU1OT0RFUyk7Ci0gICAgQVNTRVJUKHpvbmVfbG8gPD0g em9uZV9oaSk7Ci0gICAgQVNTRVJUKHpvbmVfaGkgPCBOUl9aT05FUyk7Ci0KLSAgICBpZiAoIHVu bGlrZWx5KG9yZGVyID4gTUFYX09SREVSKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAg c3Bpbl9sb2NrKCZoZWFwX2xvY2spOwotCi0gICAgLyoKLSAgICAgKiBDbGFpbWVkIG1lbW9yeSBp cyBjb25zaWRlcmVkIHVuYXZhaWxhYmxlIHVubGVzcyB0aGUgcmVxdWVzdAotICAgICAqIGlzIG1h ZGUgYnkgYSBkb21haW4gd2l0aCBzdWZmaWNpZW50IHVuY2xhaW1lZCBwYWdlcy4KLSAgICAgKi8K LSAgICBpZiAoIChvdXRzdGFuZGluZ19jbGFpbXMgKyByZXF1ZXN0ID4KLSAgICAgICAgICB0b3Rh bF9hdmFpbF9wYWdlcyArIHRtZW1fZnJlZWFibGVfcGFnZXMoKSkgJiYKLSAgICAgICAgICAoKG1l bWZsYWdzICYgTUVNRl9ub19yZWZjb3VudCkgfHwKLSAgICAgICAgICAgIWQgfHwgZC0+b3V0c3Rh bmRpbmdfcGFnZXMgPCByZXF1ZXN0KSApCi0gICAgICAgIGdvdG8gbm90X2ZvdW5kOwotCi0gICAg LyoKLSAgICAgKiBUTUVNOiBXaGVuIGF2YWlsYWJsZSBtZW1vcnkgaXMgc2NhcmNlIGR1ZSB0byB0 bWVtIGFic29yYmluZyBpdCwgYWxsb3cKLSAgICAgKiBvbmx5IG1pZC1zaXplIGFsbG9jYXRpb25z IHRvIGF2b2lkIHdvcnN0IG9mIGZyYWdtZW50YXRpb24gaXNzdWVzLgotICAgICAqIE90aGVycyB0 cnkgdG1lbSBwb29scyB0aGVuIGZhaWwuICBUaGlzIGlzIGEgd29ya2Fyb3VuZCB1bnRpbCBhbGwK LSAgICAgKiBwb3N0LWRvbTAtY3JlYXRpb24tbXVsdGktcGFnZSBhbGxvY2F0aW9ucyBjYW4gYmUg ZWxpbWluYXRlZC4KLSAgICAgKi8KLSAgICBpZiAoICgob3JkZXIgPT0gMCkgfHwgKG9yZGVyID49 IDkpKSAmJgotICAgICAgICAgKHRvdGFsX2F2YWlsX3BhZ2VzIDw9IG1pZHNpemVfYWxsb2Nfem9u ZV9wYWdlcykgJiYKLSAgICAgICAgIHRtZW1fZnJlZWFibGVfcGFnZXMoKSApCi0gICAgICAgIGdv dG8gdHJ5X3RtZW07CiAKICAgICAvKgogICAgICAqIFN0YXJ0IHdpdGggcmVxdWVzdGVkIG5vZGUs IGJ1dCBleGhhdXN0IGFsbCBub2RlIG1lbW9yeSBpbiByZXF1ZXN0ZWQgCkBAIC03NjQsMTcgKzcy OSwxNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2VfaW5mbyAqYWxsb2NfaGVhcF9wYWdlcygKICAgICAg ICAgem9uZSA9IHpvbmVfaGk7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIC8qIENoZWNrIGlm IHRhcmdldCBub2RlIGNhbiBzdXBwb3J0IHRoZSBhbGxvY2F0aW9uLiAqLwotICAgICAgICAgICAg aWYgKCAhYXZhaWxbbm9kZV0gfHwgKGF2YWlsW25vZGVdW3pvbmVdIDwgcmVxdWVzdCkgKQorICAg ICAgICAgICAgaWYgKCAhYXZhaWxbbm9kZV0gfHwgKGF2YWlsW25vZGVdW3pvbmVdIDwgKDFVTCA8 PCBvcmRlcikpICkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgLyog RmluZCBzbWFsbGVzdCBvcmRlciB3aGljaCBjYW4gc2F0aXNmeSB0aGUgcmVxdWVzdC4gKi8KICAg ICAgICAgICAgIGZvciAoIGogPSBvcmRlcjsgaiA8PSBNQVhfT1JERVI7IGorKyApCiAgICAgICAg ICAgICAgICAgaWYgKCAocGcgPSBwYWdlX2xpc3RfcmVtb3ZlX2hlYWQoJmhlYXAobm9kZSwgem9u ZSwgaikpKSApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmQ7CisgICAgICAgICAgICAg ICAgICAgIHJldHVybiBwZzsKICAgICAgICAgfSB3aGlsZSAoIHpvbmUtLSA+IHpvbmVfbG8gKTsg LyogY2FyZWZ1bDogdW5zaWduZWQgem9uZSBtYXkgd3JhcCAqLwogCiAgICAgICAgIGlmICggKG1l bWZsYWdzICYgTUVNRl9leGFjdF9ub2RlKSAmJiByZXFfbm9kZSAhPSBOVU1BX05PX05PREUgKQot ICAgICAgICAgICAgZ290byBub3RfZm91bmQ7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAog ICAgICAgICAvKiBQaWNrIG5leHQgbm9kZS4gKi8KICAgICAgICAgaWYgKCAhbm9kZV9pc3NldChu b2RlLCBub2RlbWFzaykgKQpAQCAtNzkxLDM5ICs3NTYsODkgQEAgc3RhdGljIHN0cnVjdCBwYWdl X2luZm8gKmFsbG9jX2hlYXBfcGFnZXMoCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIFdoZW4g d2UgaGF2ZSB0cmllZCBhbGwgaW4gbm9kZW1hc2ssIHdlIGZhbGwgYmFjayB0byBvdGhlcnMuICov CiAgICAgICAgICAgICBpZiAoIChtZW1mbGFncyAmIE1FTUZfZXhhY3Rfbm9kZSkgfHwgbm9kZW1h c2tfcmV0cnkrKyApCi0gICAgICAgICAgICAgICAgZ290byBub3RfZm91bmQ7CisgICAgICAgICAg ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBub2Rlc19hbmRub3Qobm9kZW1hc2ssIG5v ZGVfb25saW5lX21hcCwgbm9kZW1hc2spOwogICAgICAgICAgICAgZmlyc3Rfbm9kZSA9IG5vZGUg PSBmaXJzdF9ub2RlKG5vZGVtYXNrKTsKICAgICAgICAgICAgIGlmICggbm9kZSA+PSBNQVhfTlVN Tk9ERVMgKQotICAgICAgICAgICAgICAgIGdvdG8gbm90X2ZvdW5kOworICAgICAgICAgICAgICAg IHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQorfQogCi0gdHJ5X3RtZW06Ci0gICAgLyog VHJ5IHRvIGZyZWUgbWVtb3J5IGZyb20gdG1lbSAqLwotICAgIGlmICggKHBnID0gdG1lbV9yZWxp bnF1aXNoX3BhZ2VzKG9yZGVyLCBtZW1mbGFncykpICE9IE5VTEwgKQorLyogQWxsb2NhdGUgMl5A b3JkZXIgY29udGlndW91cyBwYWdlcy4gKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZV9pbmZvICphbGxv Y19oZWFwX3BhZ2VzKAorICAgIHVuc2lnbmVkIGludCB6b25lX2xvLCB1bnNpZ25lZCBpbnQgem9u ZV9oaSwKKyAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBtZW1mbGFncywKKyAg ICBzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIG5vZGVpZF90IG5vZGU7CisgICAgdW5zaWduZWQg aW50IGksIGJ1ZGR5X29yZGVyLCB6b25lOworICAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCA9IDFV TCA8PCBvcmRlcjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZywgKmZpcnN0X2RpcnR5X3BnID0g TlVMTDsKKyAgICBib29sX3QgbmVlZF90bGJmbHVzaCA9IDA7CisgICAgdWludDMyX3QgdGxiZmx1 c2hfdGltZXN0YW1wID0gMDsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBhcmUgZW5vdWdoIGJp dHMgaW4gbWVtZmxhZ3MgZm9yIG5vZGVJRC4gKi8KKyAgICBCVUlMRF9CVUdfT04oKF9NRU1GX2Jp dHMgLSBfTUVNRl9ub2RlKSA8ICg4ICogc2l6ZW9mKG5vZGVpZF90KSkpOworCisgICAgQVNTRVJU KHpvbmVfbG8gPD0gem9uZV9oaSk7CisgICAgQVNTRVJUKHpvbmVfaGkgPCBOUl9aT05FUyk7CisK KyAgICBpZiAoIHVubGlrZWx5KG9yZGVyID4gTUFYX09SREVSKSApCisgICAgICAgIHJldHVybiBO VUxMOworCisgICAgc3Bpbl9sb2NrKCZoZWFwX2xvY2spOworCisgICAgLyoKKyAgICAgKiBDbGFp bWVkIG1lbW9yeSBpcyBjb25zaWRlcmVkIHVuYXZhaWxhYmxlIHVubGVzcyB0aGUgcmVxdWVzdAor ICAgICAqIGlzIG1hZGUgYnkgYSBkb21haW4gd2l0aCBzdWZmaWNpZW50IHVuY2xhaW1lZCBwYWdl cy4KKyAgICAgKi8KKyAgICBpZiAoIChvdXRzdGFuZGluZ19jbGFpbXMgKyByZXF1ZXN0ID4KKyAg ICAgICAgICB0b3RhbF9hdmFpbF9wYWdlcyArIHRtZW1fZnJlZWFibGVfcGFnZXMoKSkgJiYKKyAg ICAgICAgICAoKG1lbWZsYWdzICYgTUVNRl9ub19yZWZjb3VudCkgfHwKKyAgICAgICAgICAgIWQg fHwgZC0+b3V0c3RhbmRpbmdfcGFnZXMgPCByZXF1ZXN0KSApCiAgICAgewotICAgICAgICAvKiBy ZWFzc2lnbmluZyBhbiBhbHJlYWR5IGFsbG9jYXRlZCBhbm9ueW1vdXMgaGVhcCBwYWdlICovCiAg ICAgICAgIHNwaW5fdW5sb2NrKCZoZWFwX2xvY2spOwotICAgICAgICByZXR1cm4gcGc7CisgICAg ICAgIHJldHVybiBOVUxMOworICAgIH0KKyAKKyAgICAvKgorICAgICAqIFRNRU06IFdoZW4gYXZh aWxhYmxlIG1lbW9yeSBpcyBzY2FyY2UgZHVlIHRvIHRtZW0gYWJzb3JiaW5nIGl0LCBhbGxvdwor ICAgICAqIG9ubHkgbWlkLXNpemUgYWxsb2NhdGlvbnMgdG8gYXZvaWQgd29yc3Qgb2YgZnJhZ21l bnRhdGlvbiBpc3N1ZXMuCisgICAgICogT3RoZXJzIHRyeSB0bWVtIHBvb2xzIHRoZW4gZmFpbC4g IFRoaXMgaXMgYSB3b3JrYXJvdW5kIHVudGlsIGFsbAorICAgICAqIHBvc3QtZG9tMC1jcmVhdGlv bi1tdWx0aS1wYWdlIGFsbG9jYXRpb25zIGNhbiBiZSBlbGltaW5hdGVkLgorICAgICAqLworICAg IGlmICggKChvcmRlciA9PSAwKSB8fCAob3JkZXIgPj0gOSkpICYmCisgICAgICAgICAodG90YWxf YXZhaWxfcGFnZXMgPD0gbWlkc2l6ZV9hbGxvY196b25lX3BhZ2VzKSAmJgorICAgICAgICAgdG1l bV9mcmVlYWJsZV9wYWdlcygpICkKKyAgICAgeworICAgICAgICAvKiBUcnkgdG8gZnJlZSBtZW1v cnkgZnJvbSB0bWVtLiAqLworICAgICAgICAgcGcgPSB0bWVtX3JlbGlucXVpc2hfcGFnZXMob3Jk ZXIsIG1lbWZsYWdzKTsKKyAgICAgICAgIHNwaW5fdW5sb2NrKCZoZWFwX2xvY2spOworICAgICAg ICAgcmV0dXJuIHBnOworICAgICB9CisgCisgICAgcGcgPSBnZXRfZnJlZV9idWRkeSh6b25lX2xv LCB6b25lX2hpLCBvcmRlciwgbWVtZmxhZ3MsIGQpOworICAgIGlmICggIXBnICkKKyAgICB7Cisg ICAgICAgIC8qIE5vIHN1aXRhYmxlIG1lbW9yeSBibG9ja3MuIEZhaWwgdGhlIHJlcXVlc3QuICov CisgICAgICAgIHNwaW5fdW5sb2NrKCZoZWFwX2xvY2spOworICAgICAgICByZXR1cm4gTlVMTDsK ICAgICB9CiAKLSBub3RfZm91bmQ6Ci0gICAgLyogTm8gc3VpdGFibGUgbWVtb3J5IGJsb2Nrcy4g RmFpbCB0aGUgcmVxdWVzdC4gKi8KLSAgICBzcGluX3VubG9jaygmaGVhcF9sb2NrKTsKLSAgICBy ZXR1cm4gTlVMTDsKLQotIGZvdW5kOiAKKyAgICBub2RlID0gcGh5c190b19uaWQocGFnZV90b19t YWRkcihwZykpOworICAgIHpvbmUgPSBwYWdlX3RvX3pvbmUocGcpOworICAgIGJ1ZGR5X29yZGVy ID0gUEZOX09SREVSKHBnKTsKIAogICAgIGlmICggcGctPnUuZnJlZS5maXJzdF9kaXJ0eSAhPSBJ TlZBTElEX0RJUlRZX0lEWCApCiAgICAgICAgIGZpcnN0X2RpcnR5X3BnID0gcGcgKyBwZy0+dS5m cmVlLmZpcnN0X2RpcnR5OwotCi0gICAgLyogV2UgbWF5IGhhdmUgdG8gaGFsdmUgdGhlIGNodW5r IGEgbnVtYmVyIG9mIHRpbWVzLiAqLwotICAgIHdoaWxlICggaiAhPSBvcmRlciApCisgCisgICAg IC8qIFdlIG1heSBoYXZlIHRvIGhhbHZlIHRoZSBjaHVuayBhIG51bWJlciBvZiB0aW1lcy4gKi8K KyAgICB3aGlsZSAoIGJ1ZGR5X29yZGVyICE9IG9yZGVyICkKICAgICB7CiAgICAgICAgIHVuc2ln bmVkIGludCBmaXJzdF9kaXJ0eTsKIAotICAgICAgICBpZiAoIGZpcnN0X2RpcnR5X3BnICYmICgo cGcgKyAoMSA8PCBqKSkgPiBmaXJzdF9kaXJ0eV9wZykgKQorICAgICAgICBpZiAoIGZpcnN0X2Rp cnR5X3BnICYmICgocGcgKyAoMSA8PCBidWRkeV9vcmRlcikpID4gZmlyc3RfZGlydHlfcGcpICkK ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCBwZyA8IGZpcnN0X2RpcnR5X3BnICkKICAgICAg ICAgICAgICAgICBmaXJzdF9kaXJ0eSA9IChmaXJzdF9kaXJ0eV9wZyAtIHBnKSAvIHNpemVvZigq cGcpOwpAQCAtODMzLDggKzg0OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZV9pbmZvICphbGxvY19o ZWFwX3BhZ2VzKAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmaXJzdF9kaXJ0eSA9IElOVkFM SURfRElSVFlfSURYOwogCi0gICAgICAgIHBhZ2VfbGlzdF9hZGRfc2NydWIocGcsIG5vZGUsIHpv bmUsIC0taiwgZmlyc3RfZGlydHkpOwotICAgICAgICBwZyArPSAxIDw8IGo7CisgICAgICAgIHBh Z2VfbGlzdF9hZGRfc2NydWIocGcsIG5vZGUsIHpvbmUsIC0tYnVkZHlfb3JkZXIsIGZpcnN0X2Rp cnR5KTsKKyAgICAgICAgcGcgKz0gMSA8PCBidWRkeV9vcmRlcjsKICAgICB9CiAKICAgICBBU1NF UlQoYXZhaWxbbm9kZV1bem9uZV0gPj0gcmVxdWVzdCk7Ci0tIAoxLjguMy4xCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==