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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 41EE2C4167B for ; Wed, 29 Nov 2023 14:07:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=5yRnS2ZIvZmzCsO5P2FfKuT9/fsLY8kocIKH2me0eBA=; b=V/r8ZGTBOb4cQF lBEGUqZodHufA9ErM94qgSnz/nLqB/K56uqeMiNGLZU04aIY9KrLCYf6J40Orq5ob/aK9h2Zg5dDh 8rhJs9wTAzvjE33LnK+//dTHm7LEtlvbQ4QTM8S+D1VUe4sTsxSRuB+JDFAb4NzH4ZDNWTqVuae4M 16+JF0bC2yr+e5u5tzsY2RaGBqeCRJqvMd4TWqbmVAV4Q1w+dnsambPaThmfiwp3jeYqUuoNeBgTZ HGjn2h7FbuzfWqPo2IW4wVyJFJUtrDFkQD3MjOzHNbDiCNjNnd5FUSccJXXDpSRLbVkeYpiNNavVe 7xoO3bdGtprqiwu9AIYA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8LDq-008a8B-2w; Wed, 29 Nov 2023 14:07:26 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8LDm-008a73-2E for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 14:07:24 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BC5B32F4; Wed, 29 Nov 2023 06:08:05 -0800 (PST) Received: from [10.57.70.211] (unknown [10.57.70.211]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8585D3F6C4; Wed, 29 Nov 2023 06:07:14 -0800 (PST) Message-ID: Date: Wed, 29 Nov 2023 14:07:12 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 01/14] mm: Batch-copy PTE ranges during fork() Content-Language: en-GB To: Barry Song <21cnbao@gmail.com> Cc: akpm@linux-foundation.org, andreyknvl@gmail.com, anshuman.khandual@arm.com, ardb@kernel.org, catalin.marinas@arm.com, david@redhat.com, dvyukov@google.com, glider@google.com, james.morse@arm.com, jhubbard@nvidia.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mark.rutland@arm.com, maz@kernel.org, oliver.upton@linux.dev, ryabinin.a.a@gmail.com, suzuki.poulose@arm.com, vincenzo.frascino@arm.com, wangkefeng.wang@huawei.com, will@kernel.org, willy@infradead.org, yuzenghui@huawei.com, yuzhao@google.com, ziy@nvidia.com References: <20231115163018.1303287-2-ryan.roberts@arm.com> <20231127055414.9015-1-v-songbaohua@oppo.com> <755343a1-ce94-4d38-8317-0925e2dae3bc@arm.com> <02d85331-eaa0-4d76-a3d6-ea5eb18b683c@arm.com> From: Ryan Roberts In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_060722_824006_43A8E76E X-CRM114-Status: GOOD ( 36.45 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjkvMTEvMjAyMyAxMzowOSwgQmFycnkgU29uZyB3cm90ZToKPiBPbiBUaHUsIE5vdiAzMCwg MjAyMyBhdCAxOjI54oCvQU0gUnlhbiBSb2JlcnRzIDxyeWFuLnJvYmVydHNAYXJtLmNvbT4gd3Jv dGU6Cj4+Cj4+IE9uIDI4LzExLzIwMjMgMTk6MDAsIEJhcnJ5IFNvbmcgd3JvdGU6Cj4+PiBPbiBX ZWQsIE5vdiAyOSwgMjAyMyBhdCAxMjowMOKAr0FNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRz QGFybS5jb20+IHdyb3RlOgo+Pj4+Cj4+Pj4gT24gMjgvMTEvMjAyMyAwMDoxMSwgQmFycnkgU29u ZyB3cm90ZToKPj4+Pj4gT24gTW9uLCBOb3YgMjcsIDIwMjMgYXQgMTA6MjTigK9QTSBSeWFuIFJv YmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPiB3cm90ZToKPj4+Pj4+Cj4+Pj4+PiBPbiAyNy8x MS8yMDIzIDA1OjU0LCBCYXJyeSBTb25nIHdyb3RlOgo+Pj4+Pj4+PiArY29weV9wcmVzZW50X3B0 ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnNyY192bWEsCj4+Pj4+Pj4+ICsgICAgICAgICAgICAgIHB0ZV90ICpkc3RfcHRlLCBwdGVfdCAq c3JjX3B0ZSwKPj4+Pj4+Pj4gKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNp Z25lZCBsb25nIGVuZCwKPj4+Pj4+Pj4gKyAgICAgICAgICAgICAgaW50ICpyc3MsIHN0cnVjdCBm b2xpbyAqKnByZWFsbG9jKQo+Pj4+Pj4+PiAgewo+Pj4+Pj4+PiAgICAgIHN0cnVjdCBtbV9zdHJ1 Y3QgKnNyY19tbSA9IHNyY192bWEtPnZtX21tOwo+Pj4+Pj4+PiAgICAgIHVuc2lnbmVkIGxvbmcg dm1fZmxhZ3MgPSBzcmNfdm1hLT52bV9mbGFnczsKPj4+Pj4+Pj4gICAgICBwdGVfdCBwdGUgPSBw dGVwX2dldChzcmNfcHRlKTsKPj4+Pj4+Pj4gICAgICBzdHJ1Y3QgcGFnZSAqcGFnZTsKPj4+Pj4+ Pj4gICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvOwo+Pj4+Pj4+PiArICAgIGludCBuciA9IDE7Cj4+ Pj4+Pj4+ICsgICAgYm9vbCBhbm9uOwo+Pj4+Pj4+PiArICAgIGJvb2wgYW55X2RpcnR5ID0gcHRl X2RpcnR5KHB0ZSk7Cj4+Pj4+Pj4+ICsgICAgaW50IGk7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgICAg cGFnZSA9IHZtX25vcm1hbF9wYWdlKHNyY192bWEsIGFkZHIsIHB0ZSk7Cj4+Pj4+Pj4+IC0gICAg aWYgKHBhZ2UpCj4+Pj4+Pj4+ICsgICAgaWYgKHBhZ2UpIHsKPj4+Pj4+Pj4gICAgICAgICAgICAg IGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKPj4+Pj4+Pj4gLSAgICBpZiAocGFnZSAmJiBmb2xp b190ZXN0X2Fub24oZm9saW8pKSB7Cj4+Pj4+Pj4+IC0gICAgICAgICAgICAvKgo+Pj4+Pj4+PiAt ICAgICAgICAgICAgICogSWYgdGhpcyBwYWdlIG1heSBoYXZlIGJlZW4gcGlubmVkIGJ5IHRoZSBw YXJlbnQgcHJvY2VzcywKPj4+Pj4+Pj4gLSAgICAgICAgICAgICAqIGNvcHkgdGhlIHBhZ2UgaW1t ZWRpYXRlbHkgZm9yIHRoZSBjaGlsZCBzbyB0aGF0IHdlJ2xsIGFsd2F5cwo+Pj4+Pj4+PiAtICAg ICAgICAgICAgICogZ3VhcmFudGVlIHRoZSBwaW5uZWQgcGFnZSB3b24ndCBiZSByYW5kb21seSBy ZXBsYWNlZCBpbiB0aGUKPj4+Pj4+Pj4gLSAgICAgICAgICAgICAqIGZ1dHVyZS4KPj4+Pj4+Pj4g LSAgICAgICAgICAgICAqLwo+Pj4+Pj4+PiAtICAgICAgICAgICAgZm9saW9fZ2V0KGZvbGlvKTsK Pj4+Pj4+Pj4gLSAgICAgICAgICAgIGlmICh1bmxpa2VseShwYWdlX3RyeV9kdXBfYW5vbl9ybWFw KHBhZ2UsIGZhbHNlLCBzcmNfdm1hKSkpIHsKPj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAg LyogUGFnZSBtYXkgYmUgcGlubmVkLCB3ZSBoYXZlIHRvIGNvcHkuICovCj4+Pj4+Pj4+IC0gICAg ICAgICAgICAgICAgICAgIGZvbGlvX3B1dChmb2xpbyk7Cj4+Pj4+Pj4+IC0gICAgICAgICAgICAg ICAgICAgIHJldHVybiBjb3B5X3ByZXNlbnRfcGFnZShkc3Rfdm1hLCBzcmNfdm1hLCBkc3RfcHRl LCBzcmNfcHRlLAo+Pj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWRkciwgcnNzLCBwcmVhbGxvYywgcGFnZSk7Cj4+Pj4+Pj4+ICsgICAgICAgICAg ICBhbm9uID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKTsKPj4+Pj4+Pj4gKyAgICAgICAgICAgIG5y ID0gZm9saW9fbnJfcGFnZXNfY29udF9tYXBwZWQoZm9saW8sIHBhZ2UsIHNyY19wdGUsIGFkZHIs Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu ZCwgcHRlLCAmYW55X2RpcnR5KTsKPj4+Pj4+Pgo+Pj4+Pj4+IGluIGNhc2Ugd2UgaGF2ZSBhIGxh cmdlIGZvbGlvIHdpdGggMTYgQ09OVFBURSBiYXNlcGFnZXMsIGFuZCB1c2Vyc3BhY2UKPj4+Pj4+ PiBkbyBtYWR2aXNlKGFkZHIgKyA0S0IgKiA1LCBET05UTkVFRCk7Cj4+Pj4+Pgo+Pj4+Pj4gbml0 OiBpZiB5b3UgYXJlIG9mZnNldHRpbmcgYnkgNSBwYWdlcyBmcm9tIGFkZHIsIHRoZW4gYmVsb3cg SSB0aGluayB5b3UgbWVhbgo+Pj4+Pj4gcGFnZTB+cGFnZTQgYW5kIHBhZ2U2fjE1Pwo+Pj4+Pj4K Pj4+Pj4+Pgo+Pj4+Pj4+IHRodXMsIHRoZSA0dGggYmFzZXBhZ2Ugb2YgUFRFIGJlY29tZXMgUFRF X05PTkUgYW5kIGZvbGlvX25yX3BhZ2VzX2NvbnRfbWFwcGVkKCkKPj4+Pj4+PiB3aWxsIHJldHVy biAxNS4gaW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgY29weSBwYWdlMH5wYWdlMyBhbmQgcGFnZTV+ cGFnZTE1Lgo+Pj4+Pj4KPj4+Pj4+IE5vIEkgZG9uJ3QgdGhpbmsgZm9saW9fbnJfcGFnZXNfY29u dF9tYXBwZWQoKSB3aWxsIHJldHVybiAxNTsgdGhhdCdzIGNlcnRhaW5seQo+Pj4+Pj4gbm90IGhv dyBpdHMgaW50ZW5kZWQgdG8gd29yay4gVGhlIGZ1bmN0aW9uIGlzIHNjYW5uaW5nIGZvcndhcmRz IGZyb20gdGhlIGN1cnJlbnQKPj4+Pj4+IHB0ZSB1bnRpbCBpdCBmaW5kcyB0aGUgZmlyc3QgcHRl IHRoYXQgZG9lcyBub3QgZml0IGluIHRoZSBiYXRjaCAtIGVpdGhlciBiZWNhdXNlCj4+Pj4+PiBp dCBtYXBzIGEgUEZOIHRoYXQgaXMgbm90IGNvbnRpZ3VvdXMsIG9yIGJlY2F1c2UgdGhlIHBlcm1p c3Npb25zIGFyZSBkaWZmZXJlbnQKPj4+Pj4+IChhbHRob3VnaCB0aGlzIGlzIGJlaW5nIHJlbGF4 ZWQgYSBiaXQ7IHNlZSBjb252ZXJzYXRpb24gd2l0aCBEYXZpZEggYWdhaW5zdCB0aGlzCj4+Pj4+ PiBzYW1lIHBhdGNoKS4KPj4+Pj4+Cj4+Pj4+PiBTbyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoIHRo aXMgbG9vcCwgZm9saW9fbnJfcGFnZXNfY29udF9tYXBwZWQoKSB3aWxsIHJldHVybiA1LAo+Pj4+ Pj4gKHBhZ2UwfnBhZ2U0KSB0aGVuIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCB3ZSB3 aWxsIGdvIHRocm91Z2ggdGhlCj4+Pj4+PiAhcHJlc2VudCBwYXRoIGFuZCBwcm9jZXNzIHRoZSBz aW5nbGUgc3dhcCBtYXJrZXIuIFRoZW4gdGhlIDNyZCB0aW1lIHRocm91Z2ggdGhlCj4+Pj4+PiBs b29wIGZvbGlvX25yX3BhZ2VzX2NvbnRfbWFwcGVkKCkgd2lsbCByZXR1cm4gMTAuCj4+Pj4+Cj4+ Pj4+IG9uZSBjYXNlIHdlIGhhdmUgbWV0IGJ5IHJ1bm5pbmcgaHVuZHJlZHMgb2YgcmVhbCBwaG9u ZXMgaXMgYXMgYmVsb3csCj4+Pj4+Cj4+Pj4+Cj4+Pj4+IHN0YXRpYyBpbnQKPj4+Pj4gY29weV9w dGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnNyY192bWEsCj4+Pj4+ICAgICAgICAgICAgICAgIHBtZF90ICpkc3RfcG1kLCBwbWRf dCAqc3JjX3BtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAo+Pj4+PiAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIGVuZCkKPj4+Pj4gewo+Pj4+PiAgICAgICAgIC4uLgo+Pj4+PiAgICAgICAgIGRz dF9wdGUgPSBwdGVfYWxsb2NfbWFwX2xvY2soZHN0X21tLCBkc3RfcG1kLCBhZGRyLCAmZHN0X3B0 bCk7Cj4+Pj4+ICAgICAgICAgaWYgKCFkc3RfcHRlKSB7Cj4+Pj4+ICAgICAgICAgICAgICAgICBy ZXQgPSAtRU5PTUVNOwo+Pj4+PiAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4+Pj4+ICAgICAg ICAgfQo+Pj4+PiAgICAgICAgIHNyY19wdGUgPSBwdGVfb2Zmc2V0X21hcF9ub2xvY2soc3JjX21t LCBzcmNfcG1kLCBhZGRyLCAmc3JjX3B0bCk7Cj4+Pj4+ICAgICAgICAgaWYgKCFzcmNfcHRlKSB7 Cj4+Pj4+ICAgICAgICAgICAgICAgICBwdGVfdW5tYXBfdW5sb2NrKGRzdF9wdGUsIGRzdF9wdGwp Owo+Pj4+PiAgICAgICAgICAgICAgICAgLyogcmV0ID09IDAgKi8KPj4+Pj4gICAgICAgICAgICAg ICAgIGdvdG8gb3V0Owo+Pj4+PiAgICAgICAgIH0KPj4+Pj4gICAgICAgICBzcGluX2xvY2tfbmVz dGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKPj4+Pj4gICAgICAgICBvcmlnX3Ny Y19wdGUgPSBzcmNfcHRlOwo+Pj4+PiAgICAgICAgIG9yaWdfZHN0X3B0ZSA9IGRzdF9wdGU7Cj4+ Pj4+ICAgICAgICAgYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7Cj4+Pj4+Cj4+Pj4+ICAgICAg ICAgZG8gewo+Pj4+PiAgICAgICAgICAgICAgICAgLyoKPj4+Pj4gICAgICAgICAgICAgICAgICAq IFdlIGFyZSBob2xkaW5nIHR3byBsb2NrcyBhdCB0aGlzIHBvaW50IC0gZWl0aGVyIG9mIHRoZW0K Pj4+Pj4gICAgICAgICAgICAgICAgICAqIGNvdWxkIGdlbmVyYXRlIGxhdGVuY2llcyBpbiBhbm90 aGVyIHRhc2sgb24gYW5vdGhlciBDUFUuCj4+Pj4+ICAgICAgICAgICAgICAgICAgKi8KPj4+Pj4g ICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA+PSAzMikgewo+Pj4+PiAgICAgICAgICAgICAg ICAgICAgICAgICBwcm9ncmVzcyA9IDA7Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChuZWVkX3Jlc2NoZWQoKSB8fAo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bp bl9uZWVkYnJlYWsoc3JjX3B0bCkgfHwgc3Bpbl9uZWVkYnJlYWsoZHN0X3B0bCkpCj4+Pj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+Pj4+ICAgICAgICAgICAgICAg ICB9Cj4+Pj4+ICAgICAgICAgICAgICAgICBwdGVudCA9IHB0ZXBfZ2V0KHNyY19wdGUpOwo+Pj4+ PiAgICAgICAgICAgICAgICAgaWYgKHB0ZV9ub25lKHB0ZW50KSkgewo+Pj4+PiAgICAgICAgICAg ICAgICAgICAgICAgICBwcm9ncmVzcysrOwo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKPj4+Pj4gICAgICAgICAgICAgICAgIH0KPj4+Pj4KPj4+Pj4gdGhlIGFib3ZlIGl0 ZXJhdGlvbiBjYW4gYnJlYWsgd2hlbiBwcm9ncmVzcyA+ID0zMi4gZm9yIGV4YW1wbGUsIGF0IHRo ZQo+Pj4+PiBiZWdpbm5pbmcsCj4+Pj4+IGlmIGFsbCBQVEVzIGFyZSBub25lLCB3ZSBicmVhayB3 aGVuIHByb2dyZXNzID49MzIsIGFuZCB3ZSBicmVhayB3aGVuIHdlCj4+Pj4+IGFyZSBpbiB0aGUg OHRoIHB0ZSBvZiAxNlBURXMgd2hpY2ggbWlnaHQgYmVjb21lIENPTlRQVEUgYWZ0ZXIgd2UgcmVs ZWFzZQo+Pj4+PiBQVEwuCj4+Pj4+Cj4+Pj4+IHNpbmNlIHdlIGFyZSByZWxlYXNpbmcgUFRMcywg bmV4dCB0aW1lIHdoZW4gd2UgZ2V0IFBUTCwgdGhvc2UgcHRlX25vbmUoKSBtaWdodAo+Pj4+PiBi ZWNvbWUgcHRlX2NvbnQoKSwgdGhlbiBhcmUgeW91IGdvaW5nIHRvIGNvcHkgQ09OVFBURSBmcm9t IDh0aCBwdGUsCj4+Pj4+IHRodXMsIGltbWVkaWF0ZWx5Cj4+Pj4+IGJyZWFrIHRoZSBjb25zaXN0 ZW50IENPTlBURXMgcnVsZSBvZiBoYXJkd2FyZT8KPj4+Pj4KPj4+Pj4gcHRlMCAtIHB0ZV9ub25l Cj4+Pj4+IHB0ZTEgLSBwdGVfbm9uZQo+Pj4+PiAuLi4KPj4+Pj4gcHRlNyAtIHB0ZV9ub25lCj4+ Pj4+Cj4+Pj4+IHB0ZTggLSBwdGVfY29udAo+Pj4+PiAuLi4KPj4+Pj4gcHRlMTUgLSBwdGVfY29u dAo+Pj4+Pgo+Pj4+PiBzbyB3ZSBkaWQgc29tZSBtb2RpZmljYXRpb24gdG8gYXZvaWQgYSBicmVh ayBpbiB0aGUgbWlkZGxlIG9mIFBURXMKPj4+Pj4gd2hpY2ggY2FuIHBvdGVudGlhbGx5Cj4+Pj4+ IGJlY29tZSBDT05UUEUuCj4+Pj4+IGRvIHsKPj4+Pj4gICAgICAgICAgICAgICAgIC8qCj4+Pj4+ ICAgICAgICAgICAgICAgICAqIFdlIGFyZSBob2xkaW5nIHR3byBsb2NrcyBhdCB0aGlzIHBvaW50 IC0gZWl0aGVyIG9mIHRoZW0KPj4+Pj4gICAgICAgICAgICAgICAgICogY291bGQgZ2VuZXJhdGUg bGF0ZW5jaWVzIGluIGFub3RoZXIgdGFzayBvbiBhbm90aGVyIENQVS4KPj4+Pj4gICAgICAgICAg ICAgICAgICovCj4+Pj4+ICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPj0gMzIpIHsKPj4+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDA7Cj4+Pj4+ICNp ZmRlZiBDT05GSUdfQ09OVF9QVEVfSFVHRVBBR0UKPj4+Pj4gICAgICAgICAgICAgICAgIC8qCj4+ Pj4+ICAgICAgICAgICAgICAgICAqIFhYWDogZG9uJ3QgcmVsZWFzZSBwdGwgYXQgYW4gdW5saWdu ZWQgYWRkcmVzcyBhcwo+Pj4+PiBjb250X3B0ZSBtaWdodCBmb3JtIHdoaWxlCj4+Pj4+ICAgICAg ICAgICAgICAgICAqIHB0bCBpcyByZWxlYXNlZCwgdGhpcyBjYXVzZXMgZG91YmxlLW1hcAo+Pj4+ PiAgICAgICAgICAgICAgICAgKi8KPj4+Pj4gICAgICAgICAgICAgICAgIGlmICghdm1hX2lzX2No cF9hbm9ueW1vdXMoc3JjX3ZtYSkgfHwKPj4+Pj4gICAgICAgICAgICAgICAgICAgICh2bWFfaXNf Y2hwX2Fub255bW91cyhzcmNfdm1hKSAmJiBJU19BTElHTkVEKGFkZHIsCj4+Pj4+IEhQQUdFX0NP TlRfUFRFX1NJWkUpKSkKPj4+Pj4gI2VuZGlmCj4+Pj4+ICAgICAgICAgICAgICAgICBpZiAobmVl ZF9yZXNjaGVkKCkgfHwKPj4+Pj4gICAgICAgICAgICAgICAgICAgIHNwaW5fbmVlZGJyZWFrKHNy Y19wdGwpIHx8IHNwaW5fbmVlZGJyZWFrKGRzdF9wdGwpKQo+Pj4+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4+PiB9Cj4+Pj4+Cj4+Pj4+IFdlIGNvdWxkIG9ubHkg cmVwcm9kdWNlIHRoZSBhYm92ZSBpc3N1ZSBieSBydW5uaW5nIHRob3VzYW5kcyBvZiBwaG9uZXMu Cj4+Pj4+Cj4+Pj4+IERvZXMgeW91ciBjb2RlIHN1cnZpdmUgZnJvbSB0aGlzIHByb2JsZW0/Cj4+ Pj4KPj4+PiBZZXMgSSdtIGNvbmZpZGVudCBteSBjb2RlIGlzIHNhZmUgYWdhaW5zdCB0aGlzOyBh cyBJIHNhaWQgYmVmb3JlLCB0aGUgQ09OVF9QVEUKPj4+PiBiaXQgaXMgbm90IGJsaW5kbHkgImNv cGllZCIgZnJvbSBwYXJlbnQgdG8gY2hpbGQgcHRlLiBBcyBmYXIgYXMgdGhlIGNvcmUtbW0gaXMK Pj4+PiBjb25jZXJuZWQsIHRoZXJlIGlzIG5vIENPTlRfUFRFIGJpdDsgdGhleSBhcmUganVzdCBy ZWd1bGFyIFBURXMuIFNvIHRoZSBjb2RlCj4+Pj4gd2lsbCBzZWUgc29tZSBwdGVfbm9uZSgpIGVu dHJpZXMgZm9sbG93ZWQgYnkgc29tZSBwdGVfcHJlc2VudCgpIGVudHJpZXMuIEFuZAo+Pj4+IHdo ZW4gY2FsbGluZyBzZXRfcHRlcygpIG9uIHRoZSBjaGlsZCwgdGhlIGFyY2ggY29kZSB3aWxsIGV2 YWx1YXRlIHRoZSBjdXJyZW50Cj4+Pj4gc3RhdGUgb2YgdGhlIHBndGFibGUgYWxvbmcgd2l0aCB0 aGUgbmV3IHNldF9wdGVzKCkgcmVxdWVzdCBhbmQgZGV0ZXJtaW5lIHdoZXJlCj4+Pj4gaXQgc2hv dWxkIGluc2VydCB0aGUgQ09OVF9QVEUgYml0Lgo+Pj4KPj4+IHllcCwgaSBoYXZlIHJlYWQgdmVy eSBjYXJlZnVsbHkgYW5kIHRoaW5rIHlvdXIgY29kZSBpcyBzYWZlIGhlcmUuIFRoZQo+Pj4gb25s eSBwcm9ibGVtCj4+PiBpcyB0aGF0IHRoZSBjb2RlIGNhbiByYW5kb21seSB1bmZvbGQgcGFyZW50 IHByb2Nlc3NlcycgQ09OUFRFIHdoaWxlIHNldHRpbmcKPj4+IHdycHJvdGVjdCBpbiB0aGUgbWlk ZGxlIG9mIGEgbGFyZ2UgZm9saW8gd2hpbGUgaXQgYWN0dWFsbHkgc2hvdWxkIGtlZXAgQ09OVAo+ Pj4gYml0IGFzIGFsbCBQVEVzIGNhbiBiZSBzdGlsbCBjb25zaXN0ZW50IGlmIHdlIHNldCBwcm90 ZWN0IGZyb20gdGhlIDFzdCBQVEUuCj4+Pgo+Pj4gd2hpbGUgQSBmb3JrcyBCLCAgcHJvZ3Jlc3Mg Pj0gMzIgbWlnaHQgaW50ZXJydXB0IGluIHRoZSBtaWRkbGUgb2YgYQo+Pj4gbmV3IENPTlRQVEUg Zm9saW8gd2hpY2ggaXMgZm9ybWluZywgYXMgd2UgaGF2ZSB0byBzZXQgd3Jwcm90ZWN0IHRvIHBh cmVudCBBLAo+Pj4gdGhpcyBwYXJlbnQgaW1tZWRpYXRlbHkgbG9zZXMgQ09OVCBiaXQuIHRoaXMg aXMgIHNhZC4gYnV0IGkgY2FuJ3QgZmluZCBhCj4+PiBnb29kIHdheSB0byByZXNvbHZlIGl0IHVu bGVzcyBDT05UIGlzIGV4cG9zZWQgdG8gbW0tY29yZS4gYW55IGlkZWEgb24KPj4+IHRoaXM/Cj4+ Cj4+IE5vIHRoaXMgaXMgbm90IHRoZSBjYXNlOyBjb3B5X3ByZXNlbnRfcHRlcygpIHdpbGwgY29w eSBhcyBtYW55IHB0ZXMgYXMgYXJlCj4+IHBoeXNjaWFsbHkgY29udGlndW91cyBhbmQgYmVsb25n IHRvIHRoZSBzYW1lIGZvbGlvICh3aGljaCB1c3VhbGx5IG1lYW5zICJ0aGUKPj4gd2hvbGUgZm9s aW8iIC0gdGhlIG9ubHkgdGltZSBpdCBkb2Vzbid0IGlzIHdoZW4gd2UgaGl0IHRoZSBlbmQgb2Yg dGhlIHZtYSkuIFdlCj4+IHdpbGwgdGhlbiByZXR1cm4gdG8gdGhlIG1haW4gbG9vcCBhbmQgbW92 ZSBmb3J3YXJkcyBieSB0aGUgbnVtYmVyIG9mIHB0ZXMgdGhhdAo+PiB3ZXJlIHNlcnZpY2VkLCBp bmNsdWRpbmc6Cj4gCj4gSSBwcm9iYWJseSBoYXZlIGZhaWxlZCB0byBkZXNjcmliZSBteSBxdWVz dGlvbi4gaSdkIGxpa2UgdG8gZ2l2ZSBhCj4gY29uY3JldGUgZXhhbXBsZQo+IAo+IDEuIHByb2Nl c3MgQSBmb3JrcyBCCj4gMi4gQXQgdGhlIGJlZ2lubmluZywgYWRkcmVzc35hZGRyZXNzICs2NEtC IGhhcyBwdGVfbm9uZSBQVEVzCj4gMy4gd2Ugc2NhbiB0aGUgNXRoIHB0ZSBvZiBhZGRyZXNzICsg NSAqIDRLQiwgcHJvZ3Jlc3MgYmVjb21lcyAzMiwgd2UKPiBicmVhayBhbmQgcmVsZWFzZSBQVExz Cj4gNC4gYW5vdGhlciBwYWdlIGZhdWx0IGluIHByb2Nlc3MgQSBnZXRzIFBUTCBhbmQgc2V0Cj4g YWRkcmVzc35hZGRyZXNzKzY0S0IgdG8gcHRlX2NvbnQKPiA1LiB3ZSBnZXQgdGhlIFBUTCBhZ2Fp biBhbmQgYXJyaXZlIDV0aCBwdGUKPiA2LiB3ZSBzZXQgd3Jwcm90ZWN0cyBvbiA1LDYsNy4uLi4x NSBwdGVzLCBpbiB0aGlzIGNhc2UsIHdlIGhhdmUgdG8KPiB1bmZvbGQgcGFyZW50IEEKPiBhbmQg Y2hpbGQgQiBhbHNvIGdldHMgdW5mb2xkZWQgUFRFcyB1bmxlc3Mgb3VyIGxvb3AgY2FuIGdvIGJh Y2sgdGhlIDB0aCBwdGUuCj4gCj4gdGVjaG5pY2FsbHksIEEgc2hvdWxkIGJlIGFibGUgdG8ga2Vl cCBDT05UUFRFLCBidXQgYmVjYXVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24KPiBvZiB0aGUgY29k ZSwgaXQgY2FuJ3QuIFRoYXQgaXMgdGhlIHNhZG5lc3MuIGJ1dCBpdCBpcyBvYnZpb3VzbHkgbm90 IHlvdXIgZmF1bHQuCj4gCj4gbm8gd29ycmllcy4gVGhpcyBpcyBub3QgaGFwcGVuaW5nIHF1aXRl IG9mdGVuLiBidXQgaSBqdXN0IHdhbnQgdG8gbWFrZSBhIG5vdGUKPiBoZXJlLCBtYXliZSBzb21l ZGF5IHdlIGNhbiBnZXQgYmFjayB0byBhZGRyZXNzIGl0LgoKQWhoLCBJIHVuZGVyc3RhbmQgdGhl IHNpdHVhdGlvbiBub3csIHNvcnJ5IGZvciBiZWluZyBzbG93IQoKSSBleHBlY3QgdGhpcyB0byBi ZSBhIHZlcnkgcmFyZSBzaXR1YXRpb24gYW55d2F5IHNpbmNlICg0KSBzdWdnZXN0cyBwcm9jZXNz IEEKaGFzIGFub3RoZXIgdGhyZWFkLCBhbmQgZm9ya2luZyBpcyBub3QgZW5jb3VyYWdlZCBmb3Ig bXVsdGl0aHJlYWRlZCBwcm9ncmFtcy4gSW4KZmFjdCB0aGUgZm9yayBtYW4gcGFnZSBzYXlzOgoK ICBBZnRlciBhIGZvcmsoKSBpbiBhIG11bHRpdGhyZWFkZWQgcHJvZ3JhbSwgdGhlIGNoaWxkIGNh biBzYWZlbHkgY2FsbCBvbmx5CiAgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rpb25zIChzZWUgc2ln bmFsLXNhZmV0eSg3KSkgdW50aWwgc3VjaCB0aW1lIGFzIGl0IGNhbGxzCiAgZXhlY3ZlKDIpLgoK U28gaW4gdGhpcyBjYXNlLCB3ZSBhcmUgYWJvdXQgdG8gY29tcGxldGVseSByZXBhaW50IHRoZSBj aGlsZCdzIGFkZHJlc3Mgc3BhY2UKd2l0aCBleGVjdmUoKSBhbnl3YXkuCgpTbyBpdHMganVzdCB0 aGUgcmFjaW5nIHBhcmVudCB0aGF0IGxvc2VzIHRoZSBDT05UX1BURSBiaXQuIEkgZXhwZWN0IHRo aXMgdG8gYmUKZXh0cmVtZWx5IHJhcmUuIEknbSBub3Qgc3VyZSB0aGVyZSBpcyBtdWNoIHdlIGNh biBkbyB0byBzb2x2ZSBpdCB0aG91Z2gsIGJlY2F1c2UKdW5saWtlIHdpdGggeW91ciBzb2x1dGlv biwgd2UgaGF2ZSB0byBjYXRlciBmb3IgbXVsdGlwbGUgc2l6ZXMgc28gdGhlcmUgaXMgbm8Kb2J2 aW91cyBib2FyZGVyIHVudGlsIHdlIGdldCB0byBQTUQgc2l6ZSBhbmQgSSdtIGd1ZXNzaW5nIHRo YXQncyBnb2luZyB0byBiZSBhCnByb2JsZW0gZm9yIGxhdGVuY3kgc3Bpa2VzLgoKCj4gCj4+Cj4+ IHByb2dyZXNzICs9IDggKiByZXQ7Cj4+Cj4+IFRoYXQgbWlnaHQgZ28gYWJvdmUgMzIsIHNvIHdl IHdpbGwgZmxhc2ggdGhlIGxvY2suIEJ1dCB3ZSBoYXZlbid0IGRvbmUgdGhhdCBpbgo+PiB0aGUg bWlkZGxlIG9mIGEgbGFyZ2UgZm9saW8uIFNvIHRoZSBjb250cHRlLW5lc3Mgc2hvdWxkIGJlIHBy ZXNlcnZlZC4KPj4KPj4+Cj4+PiBPdXIgY29kZVsxXSByZXNvbHZlcyB0aGlzIGJ5IG9ubHkgYnJl YWtpbmcgYXQgdGhlIGFsaWduZWQgYWRkcmVzcwo+Pj4KPj4+IGlmIChwcm9ncmVzcyA+PSAzMikg ewo+Pj4gICAgICBwcm9ncmVzcyA9IDA7Cj4+PiAgICAgICNpZmRlZiBDT05GSUdfQ09OVF9QVEVf SFVHRVBBR0UKPj4+ICAgICAgLyoKPj4+ICAgICAgICogWFhYOiBkb24ndCByZWxlYXNlIHB0bCBh dCBhbiB1bmxpZ25lZCBhZGRyZXNzIGFzIGNvbnRfcHRlCj4+PiBtaWdodCBmb3JtIHdoaWxlCj4+ PiAgICAgICAqIHB0bCBpcyByZWxlYXNlZCwgdGhpcyBjYXVzZXMgZG91YmxlLW1hcAo+Pj4gICAg ICAqLwo+Pj4gICAgIGlmICghdm1hX2lzX2NocF9hbm9ueW1vdXMoc3JjX3ZtYSkgfHwKPj4+ICAg ICAgICAgKHZtYV9pc19jaHBfYW5vbnltb3VzKHNyY192bWEpICYmIElTX0FMSUdORUQoYWRkciwK Pj4+IEhQQUdFX0NPTlRfUFRFX1NJWkUpKSkKPj4+ICAgICAjZW5kaWYKPj4+ICAgICAgICAgaWYg KG5lZWRfcmVzY2hlZCgpIHx8Cj4+PiAgICAgICAgICAgIHNwaW5fbmVlZGJyZWFrKHNyY19wdGwp IHx8IHNwaW5fbmVlZGJyZWFrKGRzdF9wdGwpKQo+Pj4gICAgICAgICAgICAgIGJyZWFrOwo+Pj4g fQo+Pj4KPj4+IFsxXSBodHRwczovL2dpdGh1Yi5jb20vT25lUGx1c09TUy9hbmRyb2lkX2tlcm5l bF9vbmVwbHVzX3NtODU1MC9ibG9iL29uZXBsdXMvc204NTUwX3VfMTQuMC4wX29uZXBsdXMxMS9t bS9tZW1vcnkuYyNMMTE4MAo+Pj4KPj4+Cj4gVGhhbmtzCj4gQmFycnkKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==