From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4BBF7C04AB4 for ; Tue, 14 May 2019 12:32:01 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2641A20850 for ; Tue, 14 May 2019 12:32:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2641A20850 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hQWar-0005N5-V0; Tue, 14 May 2019 12:31:41 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hQWar-0005Mx-8b for xen-devel@lists.xenproject.org; Tue, 14 May 2019 12:31:41 +0000 X-Inumbo-ID: 39653716-7644-11e9-99f3-63d46a5efb4e Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id 39653716-7644-11e9-99f3-63d46a5efb4e; Tue, 14 May 2019 12:31:40 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0ED03341; Tue, 14 May 2019 05:31:40 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.cambridge.arm.com [10.1.196.50]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id CF54E3F71E; Tue, 14 May 2019 05:31:38 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 14 May 2019 13:31:19 +0100 Message-Id: <20190514123125.29086-7-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190514123125.29086-1-julien.grall@arm.com> References: <20190514123125.29086-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH MM-PART3 v2 06/12] xen/arm: mm: Sanity check any update of Xen page tables X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Oleksandr_Tyshchenko@epam.com, Julien Grall , Stefano Stabellini , Andrii Anisov MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Message-ID: <20190514123119.KKMYJwGrSdsnOb1cMo1Da5wzTGwvSgxjaWw2E1WJA58@z> VGhlIGNvZGUgaGFuZGxpbmcgWGVuIFBUIHVwZGF0ZSBoYXMgcXVpdGUgYSBmZXcgcmVzdHJpY3Rp b25zIG9uIHdoYXQgaXQKY2FuIGRvLiBUaGlzIGlzIG5vdCBhIGJhZCB0aGluZyBhcyBpdCBrZWVw cyB0aGUgY29kZSBzaW1wbGUuCgpUaGVyZSBhcmUgYWxyZWFkeSBhIGZldyBjaGVja3Mgc2NhdHRl cmVkIGluIGN1cnJlbnQgcGFnZSB0YWJsZSBoYW5kbGluZy4KSG93ZXZlciB0aGV5IGFyZSBub3Qg c3VmZmljaWVudCBhcyB0aGV5IGNvdWxkIHN0aWxsIGFsbG93IHRvCm1vZGlmeS9yZW1vdmUgZW50 cnkgd2l0aCBjb250aWd1b3VzIGJpdCBzZXQuCgpUaGUgY2hlY2tzIGFyZSBkaXZpZGVkIGluIHR3 byBzZXRzOgogICAgLSBwZXIgZW50cnkgY2hlY2s6IFRoZXkgYXJlIGdhdGhlcmVkIGluIGEgbmV3 IGZ1bmN0aW9uIHRoYXQgd2lsbAogICAgY2hlY2sgd2hldGhlciBhbiB1cGRhdGUgaXMgdmFsaWQg YmFzZWQgb24gdGhlIGZsYWdzIHBhc3NlZCBhbmQgdGhlCiAgICBjdXJyZW50IHZhbHVlIG9mIGFu IGVudHJ5LgogICAgLSBnbG9iYWwgY2hlY2s6IFRoZXkgYXJlIHNhbml0eSBjaGVjayBvbiB4ZW5f cHRfdXBkYXRlKCkgcGFyYW1ldGVycy4KCkFkZGl0aW9uYWxseSB0byBjb250aWd1b3VzIGNoZWNr LCB3ZSBhbHNvIG5vdyBjaGVjayB0aGF0IHRoZSBjYWxsZXIgaXMKbm90IHRyeWluZyB0byBtb2Rp ZnkgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIG9mIGFuIGVudHJ5LgoKTGFzdGx5LCBpdCB3YXMgcHJv YmFibHkgYSBiaXQgb3ZlciB0aGUgdG9wIHRvIGZvcmJpZCByZW1vdmluZyBhbgppbnZhbGlkIG1h cHBpbmcuIFRoaXMgY291bGQganVzdCBiZSBpZ25vcmVkLiBUaGUgbmV3IGJlaGF2aW9yIHdpbGwg YmUKaGVscGZ1bCBpbiBmdXR1cmUgY2hhbmdlcy4KClNpZ25lZC1vZmYtYnk6IEp1bGllbiBHcmFs bCA8anVsaWVuLmdyYWxsQGFybS5jb20+ClJldmlld2VkLWJ5OiBBbmRyaWkgQW5pc292IDxhbmRy aWlfYW5pc292QGVwYW0uY29tPgoKLS0tCiAgICBDaGFuZ2VzIGluIHYyOgogICAgICAgIC0gQ29y cmVjdGx5IGRldGVjdCB0aGUgcmVtb3ZhbCBvZiBhIHBhZ2UKICAgICAgICAtIEZpeCBBU1NFUlQg b24gZmxhZ3MgaW4gdGhlIGVsc2UgY2FzZQogICAgICAgIC0gQWRkIEFuZHJpaSdzIHJldmlld2Vk LWJ5Ci0tLQogeGVuL2FyY2gvYXJtL21tLmMgfCAxMTUgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOTcgaW5zZXJ0 aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL21tLmMg Yi94ZW4vYXJjaC9hcm0vbW0uYwppbmRleCAyMTkyZGVkZTU1Li40NWE2ZjkyODdmIDEwMDY0NAot LS0gYS94ZW4vYXJjaC9hcm0vbW0uYworKysgYi94ZW4vYXJjaC9hcm0vbW0uYwpAQCAtNTAsNiAr NTAsMTkgQEAgc3RydWN0IGRvbWFpbiAqZG9tX3hlbiwgKmRvbV9pbywgKmRvbV9jb3c7CiAjdW5k ZWYgbWZuX3RvX3ZpcnQKICNkZWZpbmUgbWZuX3RvX3ZpcnQobWZuKSBfX21mbl90b192aXJ0KG1m bl94KG1mbikpCiAKKyNpZmRlZiBOREVCVUcKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDEsIDIpKSkKK21tX3ByaW50ayhjb25zdCBj aGFyICpmbXQsIC4uLikge30KKyNlbHNlCisjZGVmaW5lIG1tX3ByaW50ayhmbXQsIGFyZ3MuLi4p ICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgIGRwcmludGsoWEVOTE9HX0VSUiwgZm10LCAjIyBhcmdzKTsgIFwKKyAgICAgICAgV0FSTigp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApOworI2VuZGlm CisKICNkZWZpbmUgREVGSU5FX1BBR0VfVEFCTEVTKG5hbWUsIG5yKSAgICAgICAgICAgICAgICAg ICAgXAogbHBhZV90IF9fYWxpZ25lZChQQUdFX1NJWkUpIG5hbWVbTFBBRV9FTlRSSUVTICogKG5y KV0KIApAQCAtOTY4LDEyICs5ODEsNzQgQEAgZW51bSB4ZW5tYXBfb3BlcmF0aW9uIHsKICAgICBS RVNFUlZFCiB9OwogCisvKiBTYW5pdHkgY2hlY2sgb2YgdGhlIGVudHJ5ICovCitzdGF0aWMgYm9v bCB4ZW5fcHRfY2hlY2tfZW50cnkobHBhZV90IGVudHJ5LCBtZm5fdCBtZm4sIHVuc2lnbmVkIGlu dCBmbGFncykKK3sKKyAgICAvKiBTYW5pdHkgY2hlY2sgd2hlbiBtb2RpZnlpbmcgYSBwYWdlLiAq LworICAgIGlmICggKGZsYWdzICYgX1BBR0VfUFJFU0VOVCkgJiYgbWZuX2VxKG1mbiwgSU5WQUxJ RF9NRk4pICkKKyAgICB7CisgICAgICAgIC8qIFdlIGRvbid0IGFsbG93IGNoYW5naW5nIG1lbW9y eSBhdHRyaWJ1dGVzLiAqLworICAgICAgICBpZiAoIGVudHJ5LnB0LmFpICE9IFBBR0VfQUlfTUFT SyhmbGFncykgKQorICAgICAgICB7CisgICAgICAgICAgICBtbV9wcmludGsoIk1vZGlmeWluZyBt ZW1vcnkgYXR0cmlidXRlcyBpcyBub3QgYWxsb3dlZCAoMHgleCAtPiAweCV4KS5cbiIsCisgICAg ICAgICAgICAgICAgICAgICAgZW50cnkucHQuYWksIFBBR0VfQUlfTUFTSyhmbGFncykpOworICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLyogV2UgZG9uJ3Qg YWxsb3cgbW9kaWZ5aW5nIGVudHJ5IHdpdGggY29udGlndW91cyBiaXQgc2V0LiAqLworICAgICAg ICBpZiAoIGVudHJ5LnB0LmNvbnRpZyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1tX3ByaW50 aygiTW9kaWZ5aW5nIGVudHJ5IHdpdGggY29udGlndW91cyBiaXQgc2V0IGlzIG5vdCBhbGxvd2Vk LlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg LyogU2FuaXR5IGNoZWNrIHdoZW4gaW5zZXJ0aW5nIGEgcGFnZSAqLworICAgIGVsc2UgaWYgKCBm bGFncyAmIF9QQUdFX1BSRVNFTlQgKQorICAgIHsKKyAgICAgICAgLyogV2Ugc2hvdWxkIGJlIGhl cmUgd2l0aCBhIHZhbGlkIE1GTi4gKi8KKyAgICAgICAgQVNTRVJUKCFtZm5fZXEobWZuLCBJTlZB TElEX01GTikpOworCisgICAgICAgIC8qIFdlIGRvbid0IGFsbG93IHJlcGxhY2luZyBhbnkgdmFs aWQgZW50cnkuICovCisgICAgICAgIGlmICggbHBhZV9pc192YWxpZChlbnRyeSkgKQorICAgICAg ICB7CisgICAgICAgICAgICBtbV9wcmludGsoIkNoYW5naW5nIE1GTiBmb3IgYSB2YWxpZCBlbnRy eSBpcyBub3QgYWxsb3dlZCAoJSMiUFJJX21mbiIgLT4gJSMiUFJJX21mbiIpLlxuIiwKKyAgICAg ICAgICAgICAgICAgICAgICBtZm5feChscGFlX2dldF9tZm4oZW50cnkpKSwgbWZuX3gobWZuKSk7 CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogU2Fu aXR5IGNoZWNrIHdoZW4gcmVtb3ZpbmcgYSBwYWdlLiAqLworICAgIGVsc2UgaWYgKCAoZmxhZ3Mg JiAoX1BBR0VfUFJFU0VOVHxfUEFHRV9QT1BVTEFURSkpID09IDAgKQorICAgIHsKKyAgICAgICAg LyogV2Ugc2hvdWxkIGJlIGhlcmUgd2l0aCBhbiBpbnZhbGlkIE1GTi4gKi8KKyAgICAgICAgQVNT RVJUKG1mbl9lcShtZm4sIElOVkFMSURfTUZOKSk7CisKKyAgICAgICAgLyogV2UgZG9uJ3QgYWxs b3cgcmVtb3ZpbmcgcGFnZSB3aXRoIGNvbnRpZ3VvdXMgYml0IHNldC4gKi8KKyAgICAgICAgaWYg KCBlbnRyeS5wdC5jb250aWcgKQorICAgICAgICB7CisgICAgICAgICAgICBtbV9wcmludGsoIlJl bW92aW5nIGVudHJ5IHdpdGggY29udGlndW91cyBiaXQgc2V0IGlzIG5vdCBhbGxvd2VkLlxuIik7 CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogU2Fu aXR5IGNoZWNrIHdoZW4gcG9wdWxhdGluZyB0aGUgcGFnZS10YWJsZS4gTm8gY2hlY2sgc28gZmFy LiAqLworICAgIGVsc2UKKyAgICB7CisgICAgICAgIEFTU0VSVChmbGFncyAmIF9QQUdFX1BPUFVM QVRFKTsKKyAgICAgICAgLyogV2Ugc2hvdWxkIGJlIGhlcmUgd2l0aCBhbiBpbnZhbGlkIE1GTiAq LworICAgICAgICBBU1NFUlQobWZuX2VxKG1mbiwgSU5WQUxJRF9NRk4pKTsKKyAgICB9CisKKyAg ICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGludCB4ZW5fcHRfdXBkYXRlX2VudHJ5KGVudW0g eGVubWFwX29wZXJhdGlvbiBvcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1mbl90IG1mbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewogICAgIGxw YWVfdCBwdGUsICplbnRyeTsKICAgICBscGFlX3QgKnRoaXJkID0gTlVMTDsKIAorICAgIC8qIF9Q QUdFX1BPUFVMQVRFIGFuZCBfUEFHRV9QUkVTRU5UIHNob3VsZCBuZXZlciBiZSBzZXQgdG9nZXRo ZXIuICovCisgICAgQVNTRVJUKChmbGFncyAmIChfUEFHRV9QT1BVTEFURXxfUEFHRV9QUkVTRU5U KSkgIT0gKF9QQUdFX1BPUFVMQVRFfF9QQUdFX1BSRVNFTlQpKTsKKwogICAgIGVudHJ5ID0gJnhl bl9zZWNvbmRbc2Vjb25kX2xpbmVhcl9vZmZzZXQoYWRkcildOwogICAgIGlmICggIWxwYWVfaXNf dmFsaWQoKmVudHJ5KSB8fCAhbHBhZV9pc190YWJsZSgqZW50cnksIDIpICkKICAgICB7CkBAIC05 ODksMTUgKzEwNjQsMTIgQEAgc3RhdGljIGludCB4ZW5fcHRfdXBkYXRlX2VudHJ5KGVudW0geGVu bWFwX29wZXJhdGlvbiBvcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgIHRoaXJkID0gbWZuX3Rv X3ZpcnQobHBhZV9nZXRfbWZuKCplbnRyeSkpOwogICAgIGVudHJ5ID0gJnRoaXJkW3RoaXJkX3Rh YmxlX29mZnNldChhZGRyKV07CiAKKyAgICBpZiAoICF4ZW5fcHRfY2hlY2tfZW50cnkoKmVudHJ5 LCBtZm4sIGZsYWdzKSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCiAgICAgc3dpdGNoICgg b3AgKSB7CiAgICAgICAgIGNhc2UgSU5TRVJUOgogICAgICAgICBjYXNlIFJFU0VSVkU6Ci0gICAg ICAgICAgICBpZiAoIGxwYWVfaXNfdmFsaWQoKmVudHJ5KSApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgcHJpbnRrKCIlczogdHJ5aW5nIHRvIHJlcGxhY2UgYW4gZXhpc3RpbmcgbWFw cGluZyBhZGRyPSVseCBtZm49JSJQUklfbWZuIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAg X19mdW5jX18sIGFkZHIsIG1mbl94KG1mbikpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCBvcCA9PSBSRVNFUlZFICkKICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHB0ZSA9IG1mbl90b194ZW5fZW50cnko bWZuLCBQQUdFX0FJX01BU0soZmxhZ3MpKTsKQEAgLTEwMDksMTIgKzEwODEsNiBAQCBzdGF0aWMg aW50IHhlbl9wdF91cGRhdGVfZW50cnkoZW51bSB4ZW5tYXBfb3BlcmF0aW9uIG9wLCB1bnNpZ25l ZCBsb25nIGFkZHIsCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNT0RJRlk6CiAg ICAgICAgIGNhc2UgUkVNT1ZFOgotICAgICAgICAgICAgaWYgKCAhbHBhZV9pc192YWxpZCgqZW50 cnkpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoIiVzOiB0cnlpbmcg dG8gJXMgYSBub24tZXhpc3RpbmcgbWFwcGluZyBhZGRyPSVseFxuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgX19mdW5jX18sIG9wID09IFJFTU9WRSA/ICJyZW1vdmUiIDogIm1vZGlmeSIsIGFk ZHIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgfQogICAg ICAgICAgICAgaWYgKCBvcCA9PSBSRU1PVkUgKQogICAgICAgICAgICAgICAgIHB0ZS5iaXRzID0g MDsKICAgICAgICAgICAgIGVsc2UKQEAgLTEwMjIsMTIgKzEwODgsNiBAQCBzdGF0aWMgaW50IHhl bl9wdF91cGRhdGVfZW50cnkoZW51bSB4ZW5tYXBfb3BlcmF0aW9uIG9wLCB1bnNpZ25lZCBsb25n IGFkZHIsCiAgICAgICAgICAgICAgICAgcHRlID0gKmVudHJ5OwogICAgICAgICAgICAgICAgIHB0 ZS5wdC5ybyA9IFBBR0VfUk9fTUFTSyhmbGFncyk7CiAgICAgICAgICAgICAgICAgcHRlLnB0Lnhu ID0gUEFHRV9YTl9NQVNLKGZsYWdzKTsKLSAgICAgICAgICAgICAgICBpZiAoICFwdGUucHQucm8g JiYgIXB0ZS5wdC54biApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBw cmludGsoIiVzOiBJbmNvcnJlY3QgY29tYmluYXRpb24gZm9yIGFkZHI9JWx4XG4iLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGFkZHIpOwotICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg ICAgICAgICB3cml0ZV9wdGUoZW50cnksIHB0ZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEw NDksNiArMTEwOSwyNSBAQCBzdGF0aWMgaW50IHhlbl9wdF91cGRhdGUoZW51bSB4ZW5tYXBfb3Bl cmF0aW9uIG9wLAogICAgIGludCByYyA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyBhZGRyID0gdmly dCwgYWRkcl9lbmQgPSBhZGRyICsgbnJfbWZucyAqIFBBR0VfU0laRTsKIAorICAgIC8qCisgICAg ICogVGhlIGhhcmR3YXJlIHdhcyBjb25maWd1cmVkIHRvIGZvcmJpZCBtYXBwaW5nIGJvdGggd3Jp dGVhYmxlIGFuZAorICAgICAqIGV4ZWN1dGFibGUuCisgICAgICogV2hlbiBtb2RpZnlpbmcvY3Jl YXRpbmcgbWFwcGluZyAoaS5lIF9QQUdFX1BSRVNFTlQgaXMgc2V0KSwKKyAgICAgKiBwcmV2ZW50 IGFueSB1cGRhdGUgaWYgdGhpcyBoYXBwZW4uCisgICAgICovCisgICAgaWYgKCAoZmxhZ3MgJiBf UEFHRV9QUkVTRU5UKSAmJiAhUEFHRV9ST19NQVNLKGZsYWdzKSAmJgorICAgICAgICAgIVBBR0Vf WE5fTUFTSyhmbGFncykgKQorICAgIHsKKyAgICAgICAgbW1fcHJpbnRrKCJNYXBwaW5ncyBzaG91 bGQgbm90IGJlIGJvdGggV3JpdGVhYmxlIGFuZCBFeGVjdXRhYmxlLlxuIik7CisgICAgICAgIHJl dHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGlmICggIUlTX0FMSUdORUQodmlydCwgUEFHRV9T SVpFKSApCisgICAgeworICAgICAgICBtbV9wcmludGsoIlRoZSB2aXJ0dWFsIGFkZHJlc3MgaXMg bm90IGFsaWduZWQgdG8gdGhlIHBhZ2Utc2l6ZS5cbiIpOworICAgICAgICByZXR1cm4gLUVJTlZB TDsKKyAgICB9CisKICAgICBzcGluX2xvY2soJnhlbl9wdF9sb2NrKTsKIAogICAgIGZvciggOyBh ZGRyIDwgYWRkcl9lbmQ7IGFkZHIgKz0gUEFHRV9TSVpFICkKLS0gCjIuMTEuMAoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=