From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cody P Schafer Subject: [PATCH v4 1/4] mem: add mem helper functions Date: Sat, 5 Sep 2015 21:21:03 -0400 Message-ID: <1441502466-4754-2-git-send-email-dev@codyps.com> References: <1441502466-4754-1-git-send-email-dev@codyps.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-x22f.google.com (mail-qk0-x22f.google.com [IPv6:2607:f8b0:400d:c09::22f]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 784E11A0138 for ; Sun, 6 Sep 2015 11:21:12 +1000 (AEST) Received: by qkfq186 with SMTP id q186so22428110qkf.1 for ; Sat, 05 Sep 2015 18:21:10 -0700 (PDT) In-Reply-To: <1441502466-4754-1-git-send-email-dev@codyps.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ccan-bounces+gclcc-ccan=m.gmane.org@lists.ozlabs.org Sender: "ccan" To: ccan@lists.ozlabs.org Cc: Cody P Schafer List-Id: ccan@lists.ozlabs.org U2lnbmVkLW9mZi1ieTogQ29keSBQIFNjaGFmZXIgPGRldkBjb2R5cHMuY29tPgotLS0KIGNjYW4v bWVtL21lbS5jICAgICAgfCAgMjQgKysrKysrKysKIGNjYW4vbWVtL21lbS5oICAgICAgfCAxNTcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogY2Nh bi9tZW0vdGVzdC9hcGkuYyB8ICAzNyArKysrKysrKysrKystCiAzIGZpbGVzIGNoYW5nZWQsIDIx NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvY2Nhbi9tZW0vbWVt LmMgYi9jY2FuL21lbS9tZW0uYwppbmRleCA4NTNmOTc1Li45MWM5OTYxIDEwMDY0NAotLS0gYS9j Y2FuL21lbS9tZW0uYworKysgYi9jY2FuL21lbS9tZW0uYwpAQCAtNDAsMyArNDAsMjcgQEAgdm9p ZCAqbWVtcmNocihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCiAJcmV0dXJuIE5VTEw7 CiB9CiAjZW5kaWYKKwordm9pZCAqbWVtcGJya20oY29uc3Qgdm9pZCAqZGF0YV8sIHNpemVfdCBs ZW4sIGNvbnN0IHZvaWQgKmFjY2VwdF8sIHNpemVfdCBhY2NlcHRfbGVuKQoreworCWNvbnN0IGNo YXIgKmRhdGEgPSBkYXRhXywgKmFjY2VwdCA9IGFjY2VwdF87CisJc2l6ZV90IGksIGo7CisKKwlm b3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBhY2NlcHRfbGVuOyBq KyspCisJCQlpZiAoYWNjZXB0W2pdID09IGRhdGFbaV0pCisJCQkJcmV0dXJuICh2b2lkICopJmRh dGFbaV07CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgKm1lbWNjaHIodm9pZCBjb25zdCAqZGF0 YSwgaW50IGMsIHNpemVfdCBkYXRhX2xlbikKK3sKKwljaGFyIGNvbnN0ICpwID0gZGF0YTsKKwlz aXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbjsgaSsrKQorCQlpZiAocFtpXSAh PSBjKQorCQkJcmV0dXJuICh2b2lkICopJnBbaV07CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAt LWdpdCBhL2NjYW4vbWVtL21lbS5oIGIvY2Nhbi9tZW0vbWVtLmgKaW5kZXggZGNiNDRiOC4uODli MTZkNCAxMDA2NDQKLS0tIGEvY2Nhbi9tZW0vbWVtLmgKKysrIGIvY2Nhbi9tZW0vbWVtLmgKQEAg LTUsNiArNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4K KyNpbmNsdWRlIDxzdGRib29sLmg+CiAKICNpZiAhSEFWRV9NRU1NRU0KIHZvaWQgKm1lbW1lbShj b25zdCB2b2lkICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrbGVuLApAQCAtMTUsNCArMTYsMTYw IEBAIHZvaWQgKm1lbW1lbShjb25zdCB2b2lkICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrbGVu LAogdm9pZCAqbWVtcmNocihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pOwogI2VuZGlm CiAKKy8qKgorICogbWVtcGJya20gLSBsb2NhdGVzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIEBk YXRhIG9mIGFueSBieXRlcyBpbiBAYWNjZXB0CisgKiBAZGF0YTogd2hlcmUgd2Ugc2VhcmNoCisg KiBAbGVuOiBsZW5ndGggb2YgZGF0YSBpbiBieXRlcworICogQGFjY2VwdDogYXJyYXkgb2YgYnl0 ZXMgd2Ugc2VhcmNoIGZvcgorICogQGFjY2VwdF9sZW46ICMgb2YgYnl0ZXMgaW4gYWNjZXB0Cisg KgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJ5dGUgaW4gQGRhdGEgdGhhdCBtYXRjaGVz IG9uZSBvZiB0aGUgYnl0ZXMgaW4KKyAqIEBhY2NlcHQsIG9yIE5VTEwgaWYgbm8gc3VjaCBieXRl IGlzIGZvdW5kLgorICoKKyAqIEV4YW1wbGU6CisgKgljaGFyIG90aGVyYnl0ZXNbXSA9ICJIZWxs byBcMHdvcmxkIjsKKyAqCXNpemVfdCBvdGhlcmJ5dGVzX2xlbiA9IHNpemVvZihvdGhlcmJ5dGVz KSAtIDE7CisgKgljaGFyICpyID0gbWVtcGJya20ob3RoZXJieXRlcywgb3RoZXJieXRlc19sZW4s ICJcMGIiLCAyKTsKKyAqCWlmIChyKSB7CisgKgkJcHJpbnRmKCJGb3VuZCAlY1xuIiwgKnIpOwor ICoJfSBlbHNlIHsKKyAqCQlwcmludGYoIk5hZGFcbiIpOworICoJfQorICoKKyAqLwordm9pZCAq bWVtcGJya20oY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqYWNjZXB0 LCBzaXplX3QgYWNjZXB0X2xlbik7CisKKy8qKgorICogbWVtcGJyayAtIGxvY2F0ZXMgdGhlIGZp cnN0IG9jY3VycmVuY2UgaW4gQGRhdGEgb2YgYW55IGJ5dGVzIGluIEBhY2NlcHQKKyAqIEBkYXRh OiB3aGVyZSB3ZSBzZWFyY2gKKyAqIEBsZW46IGxlbmd0aCBvZiBkYXRhIGluIGJ5dGVzCisgKiBA YWNjZXB0OiBOVUwgdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgYnl0ZXMgd2Ugc2Vh cmNoIGZvcgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBieXRlIGluIEBkYXRhIHRo YXQgbWF0Y2hlcyBvbmUgb2YgdGhlIGJ5dGVzIGluCisgKiBAYWNjZXB0LCBvciBOVUxMIGlmIG5v IHN1Y2ggYnl0ZSBpcyBmb3VuZC4KKyAqCisgKiBFeGFtcGxlOgorICoKKyAqCXIgPSBtZW1wYnJr KG90aGVyYnl0ZXMsIG90aGVyYnl0ZXNfbGVuLCAiYWJjZGUiKTsKKyAqCWlmIChyKSB7CisgKgkJ cHJpbnRmKCJGb3VuZCAlY1xuIiwgKnIpOworICoJfSBlbHNlIHsKKyAqCQlwcmludGYoIk5hZGFc biIpOworICoJfQorICovCitzdGF0aWMgaW5saW5lIGNoYXIgKm1lbXBicmsoY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqYWNjZXB0KQoreworCXJldHVybiBtZW1wYnJr bShkYXRhLCBsZW4sIGFjY2VwdCwgc3RybGVuKGFjY2VwdCkpOworfQorCisvKioKKyAqIG1lbWNj aHIgLSBzY2FuIG1lbW9yeSB1bnRpbCBhIGNoYXJhY3RlciBkb2VzIF9ub3RfIG1hdGNoIEBjCisg KiBAZGF0YTogcG9pbnRlciB0byBtZW1vcnkgdG8gc2NhbgorICogQGRhdGFfbGVuOiBsZW5ndGgg b2YgZGF0YQorICogQGM6IGNoYXJhY3RlciB0byBzY2FuIGZvcgorICoKKyAqIFRoZSBjb21wbGVt ZW50IG9mIG1lbWNocigpLgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBj aGFyYWN0ZXIgd2hpY2ggaXMgX25vdF8gQGMuIElmIGFsbCBtZW1vcnkgaW4KKyAqIEBkYXRhIGlz IEBjLCByZXR1cm5zIE5VTEwuCisgKgorICogRXhhbXBsZToKKyAqCWNoYXIgc29tZWJ5dGVzW10g PSAiSEkgQnlcMGUiOworICoJc2l6ZV90IGJ5dGVzX2xlbiA9IHNpemVvZihzb21lYnl0ZXMpIC0g MTsKKyAqCXIgPSBtZW1jY2hyKHNvbWVieXRlcywgJyAnLCBieXRlc19sZW4pOworICoJaWYgKHIp IHsKKyAqCQlwcmludGYoIkZvdW5kICVjIGFmdGVyIHRyaW1taW5nIHNwYWNlc1xuIiwgKnIpOwor ICoJfQorICovCit2b2lkICptZW1jY2hyKHZvaWQgY29uc3QgKmRhdGEsIGludCBjLCBzaXplX3Qg ZGF0YV9sZW4pOworCisvKioKKyAqIG1lbWVxIC0gQXJlIHR3byBieXRlIGFycmF5cyBlcXVhbD8K KyAqIEBhOiBmaXJzdCBhcnJheQorICogQGFsOiBieXRlcyBpbiBmaXJzdCBhcnJheQorICogQGI6 IHNlY29uZCBhcnJheQorICogQGJsOiBieXRlcyBpbiBzZWNvbmQgYXJyYXkKKyAqCisgKiBFeGFt cGxlOgorICoJaWYgKG1lbWVxKHNvbWVieXRlcywgYnl0ZXNfbGVuLCBvdGhlcmJ5dGVzLCBvdGhl cmJ5dGVzX2xlbikpIHsKKyAqCQlwcmludGYoIm1lbW9yeSBibG9ja3MgYXJlIHRoZSBzYW1lIVxu Iik7CisgKgl9CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1lcShjb25zdCB2b2lkICphLCBz aXplX3QgYWwsIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBibCkKK3sKKwlyZXR1cm4gYWwgPT0gYmwg JiYgIW1lbWNtcChhLCBiLCBibCk7Cit9CisKKy8qKgorICogbWVtc3RhcnRzIC0gZGV0ZXJtaW5l IGlmIEBkYXRhIHN0YXJ0cyB3aXRoIEBwcmVmaXgKKyAqIEBkYXRhOiBkb2VzIHRoaXMgYmVnaW4g d2l0aCBAcHJlZml4PworICogQGRhdGFfbGVuOiBieXRlcyBpbiBAZGF0YQorICogQHByZWZpeDog ZG9lcyBAZGF0YSBiZWdpbiB3aXRoIHRoZXNlIGJ5dGVzPworICogQHByZWZpeF9sZW46IGJ5dGVz IGluIEBwcmVmaXgKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGRhdGEgc3RhcnRzIHdpdGggQHBy ZWZpeCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4KKyAqCisgKiBFeGFtcGxlOgorICoJaWYgKG1l bXN0YXJ0cyhzb21lYnl0ZXMsIGJ5dGVzX2xlbiwgb3RoZXJieXRlcywgb3RoZXJieXRlc19sZW4p KSB7CisgKgkJcHJpbnRmKCJzb21lYnl0ZXMgc3RhcnRzIHdpdGggb3RoZXJieXRlcyFcbiIpOwor ICoJfQorICovCitzdGF0aWMgaW5saW5lIGJvb2wgbWVtc3RhcnRzKHZvaWQgY29uc3QgKmRhdGEs IHNpemVfdCBkYXRhX2xlbiwKKwkJdm9pZCBjb25zdCAqcHJlZml4LCBzaXplX3QgcHJlZml4X2xl bikKK3sKKwlpZiAocHJlZml4X2xlbiA+IGRhdGFfbGVuKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0 dXJuIG1lbWVxKGRhdGEsIHByZWZpeF9sZW4sIHByZWZpeCwgcHJlZml4X2xlbik7Cit9CisKKy8q KgorICogbWVtZXFzdHIgLSBJcyBhIGJ5dGUgYXJyYXkgZXF1YWwgdG8gYSBOVUwgdGVybWluYXRl ZCBzdHJpbmc/CisgKiBAZGF0YTogYnl0ZSBhcnJheQorICogQGxlbmd0aDogbGVuZ3RoIG9mIEBk YXRhIGluIGJ5dGVzCisgKiBAc3RyaW5nOiBOVUwgdGVybWluYXRlZCBzdHJpbmcKKyAqCisgKiBU aGUgJ1wwJyBieXRlIGlzIGlnbm9yZWQgd2hlbiBjaGVja2luZyBpZiBAYnl0ZXMgPT0gQHN0cmlu Zy4KKyAqCisgKiBFeGFtcGxlOgorICoJaWYgKG1lbWVxc3RyKHNvbWVieXRlcywgYnl0ZXNfbGVu LCAiZm9vIikpIHsKKyAqCQlwcmludGYoInNvbWVieXRlcyA9PSAnZm9vJyFcbiIpOworICoJfQor ICovCitzdGF0aWMgaW5saW5lIGJvb2wgbWVtZXFzdHIoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IGxlbmd0aCwgY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiBtZW1lcShkYXRhLCBsZW5n dGgsIHN0cmluZywgc3RybGVuKHN0cmluZykpOworfQorCisvKioKKyAqIG1lbXN0YXJ0c19zdHIg LSBEb2VzIHRoaXMgYnl0ZSBhcnJheSBzdGFydCB3aXRoIGEgc3RyaW5nIHByZWZpeD8KKyAqIEBh OiBieXRlIGFycmF5CisgKiBAYWw6IGxlbmd0aCBpbiBieXRlcworICogQHM6IHN0cmluZyBwcmVm aXgKKyAqCisgKiBFeGFtcGxlOgorICoJaWYgKG1lbXN0YXJ0c19zdHIoc29tZWJ5dGVzLCBieXRl c19sZW4sICJJdCIpKSB7CisgKgkJcHJpbnRmKCJzb21lYnl0ZXMgc3RhcnRzIHdpdGggJ0l0J1xu Iik7CisgKgl9CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1zdGFydHNfc3RyKGNvbnN0IHZv aWQgKmEsIHNpemVfdCBhbCwgY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gbWVtc3RhcnRzKGEs IGFsLCBzLCBzdHJsZW4ocykpOworfQorCisvKioKKyAqIG1lbWVuZHMgLSBEb2VzIHRoaXMgYnl0 ZSBhcnJheSBlbmQgd2l0aCBhIGdpdmVuIGJ5dGUtYXJyYXkgc3VmZml4PworICogQHM6IGJ5dGUg YXJyYXkKKyAqIEBzX2xlbjogbGVuZ3RoIGluIGJ5dGVzCisgKiBAc3VmZml4OiBieXRlIGFycmF5 IHN1ZmZpeAorICogQHN1ZmZpeF9sZW46IGxlbmd0aCBvZiBzdWZmaXggaW4gYnl0ZXMKKyAqCisg KiBSZXR1cm5zIHRydWUgaWYgQHN1ZmZpeCBhcHBlYXJzIGFzIGEgc3Vic3RyaW5nIGF0IHRoZSBl bmQgb2YgQHMsCisgKiBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBt ZW1lbmRzKGNvbnN0IHZvaWQgKnMsIHNpemVfdCBzX2xlbiwgY29uc3Qgdm9pZCAqc3VmZml4LCBz aXplX3Qgc3VmZml4X2xlbikKK3sKKwlyZXR1cm4gKHNfbGVuID49IHN1ZmZpeF9sZW4pICYmICht ZW1jbXAoKGNvbnN0IGNoYXIgKilzICsgc19sZW4gLSBzdWZmaXhfbGVuLAorCQkJCQkJc3VmZml4 LCBzdWZmaXhfbGVuKSA9PSAwKTsKK30KKwogI2VuZGlmIC8qIENDQU5fTUVNX0ggKi8KZGlmZiAt LWdpdCBhL2NjYW4vbWVtL3Rlc3QvYXBpLmMgYi9jY2FuL21lbS90ZXN0L2FwaS5jCmluZGV4IDJl ZTE1YzUuLjg5YjZhY2IgMTAwNjQ0Ci0tLSBhL2NjYW4vbWVtL3Rlc3QvYXBpLmMKKysrIGIvY2Nh bi9tZW0vdGVzdC9hcGkuYwpAQCAtOCw5ICs4LDExIEBAIGludCBtYWluKHZvaWQpCiAJY2hhciBo YXlzdGFjazJbXSA9ICJhYlwwYWJcMGFiXDBhYiI7CiAJY2hhciBuZWVkbGUxW10gPSAiYWIiOwog CWNoYXIgbmVlZGxlMltdID0gImRcMGUiOworCWNoYXIgc2NhbjFbXSA9ICJhYWFhYiI7CisJY2hh ciBzY2FuMltdID0gIlwwXDBcMGIiOwogCiAJLyogVGhpcyBpcyBob3cgbWFueSB0ZXN0cyB5b3Ug cGxhbiB0byBydW4gKi8KLQlwbGFuX3Rlc3RzKDE5KTsKKwlwbGFuX3Rlc3RzKDQyKTsKIAogCW9r MShtZW1tZW0oaGF5c3RhY2sxLCBzaXplb2YoaGF5c3RhY2sxKSwgbmVlZGxlMSwgMikgPT0gaGF5 c3RhY2sxKTsKIAlvazEobWVtbWVtKGhheXN0YWNrMSwgc2l6ZW9mKGhheXN0YWNrMSksIG5lZWRs ZTEsIDMpID09IE5VTEwpOwpAQCAtMzcsNiArMzksMzkgQEAgaW50IG1haW4odm9pZCkKIAogCW9r MShtZW1yY2hyKG5lZWRsZTEsICdcMCcsIDIpID09IE5VTEwpOwogCisjZGVmaW5lIFMoeCkgKHgp LCBzaXplb2YoeCkgLSAxCisJb2sxKG1lbXBicmttKFMoaGF5c3RhY2sxKSwgUygiXDBlZmdoIikp ID09IGhheXN0YWNrMSArIDQpOworCW9rMShtZW1wYnJrbShTKGhheXN0YWNrMSksIFMoImprbG1u IikpID09IE5VTEwpOworCW9rMShtZW1wYnJrbShTKGhheXN0YWNrMSksIFMoInNkXDBhIikpID09 IGhheXN0YWNrMSArIDApOworCisJb2sxKG1lbXBicmsoaGF5c3RhY2sxLCBzaXplb2YoaGF5c3Rh Y2sxKSwgImJjZFwwYSIpID09IGhheXN0YWNrMSArIDEpOworCW9rMShtZW1wYnJrKGhheXN0YWNr MSwgc2l6ZW9mKGhheXN0YWNrMSksICJcMCIpID09IE5VTEwpOworCisJb2sxKG1lbWNjaHIoc2Nh bjEsICdhJywgc2l6ZW9mKHNjYW4xKSkgPT0gc2NhbjEgKyA0KTsKKwlvazEobWVtY2NocihzY2Fu MSwgJ2InLCBzaXplb2Yoc2NhbjEpKSA9PSBzY2FuMSk7CisJb2sxKG1lbWNjaHIoc2NhbjIsICdc MCcsIHNpemVvZihzY2FuMikpID09IHNjYW4yICsgMyk7CisJb2sxKG1lbWNjaHIoc2NhbjIsICdc MCcsIHNpemVvZihzY2FuMikgLSAyKSA9PSBOVUxMKTsKKworCW9rMShtZW1lcShoYXlzdGFjazEs IHNpemVvZihoYXlzdGFjazEpLCBoYXlzdGFjazEsIHNpemVvZihoYXlzdGFjazEpKSk7CisJb2sx KCFtZW1lcShoYXlzdGFjazEsIHNpemVvZihoYXlzdGFjazEpLCBoYXlzdGFjazIsIHNpemVvZiho YXlzdGFjazIpKSk7CisKKwlvazEobWVtZXFzdHIoc2NhbjEsIHNpemVvZihzY2FuMSkgLSAxLCBz Y2FuMSkpOworCW9rMSghbWVtZXFzdHIoc2NhbjEsIHNpemVvZihzY2FuMSksIHNjYW4xKSk7CisJ b2sxKCFtZW1lcXN0cihzY2FuMSwgc2l6ZW9mKHNjYW4xKSwgImFhYWEiKSk7CisKKwlvazEobWVt c3RhcnRzKFMoImFcMGJjZGVmIiksIFMoImFcMGJjIikpKTsKKwlvazEoIW1lbXN0YXJ0cyhTKCJh XDBiY2RlZiIpLCBTKCJhXDBiY0ciKSkpOworCW9rMSghbWVtc3RhcnRzKFMoImFcMGJjZGVmIiks IFMoImFcMGJjZGVmZyIpKSk7CisKKwlvazEobWVtc3RhcnRzX3N0cihzY2FuMSwgc2l6ZW9mKHNj YW4xKSwgc2NhbjEpKTsKKwlvazEoIW1lbXN0YXJ0c19zdHIoc2NhbjEsIHNpemVvZihzY2FuMSks ICJhYiIpKTsKKworCW9rMShtZW1lbmRzKFMoImFiY2RlZiIpLCBTKCJhYmNkZWYiKSkpOworCW9r MSghbWVtZW5kcyhTKCJhYmNkZWYiKSwgUygiYWJjZGVmZyIpKSk7CisJb2sxKCFtZW1lbmRzKFMo ImFcMGJjZGVmIiksIFMoImFcMGIiKSkpOworCW9rMShtZW1lbmRzKFMoImFcMGJjZGVmIiksIFMo ImVmIikpKTsKKworCiAJLyogVGhpcyBleGl0cyBkZXBlbmRpbmcgb24gd2hldGhlciBhbGwgdGVz dHMgcGFzc2VkICovCiAJcmV0dXJuIGV4aXRfc3RhdHVzKCk7CiB9Ci0tIAoyLjUuMQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KY2NhbiBtYWlsaW5nIGxp c3QKY2NhbkBsaXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9yZy9saXN0aW5m by9jY2FuCg==