From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id B3FEC3857B9F; Sun, 26 Jun 2022 20:06:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B3FEC3857B9F Received: by mail-wm1-x32e.google.com with SMTP id m184so4208829wme.1; Sun, 26 Jun 2022 13:06:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=C6tripSWqAT66RTa2/oiwtW6z4fwwUkXDj0ObiJS6hc=; b=gzEr7MUCch98QVcqecI2mOdBMzA3XpL37TlX/Qi8DcjCW8kqorOpnr8g85rLPZtFFU 9UgY4G3bpvkYCIA/NvQdzffBUUz/bKF2gELnF3NKKyuvMnyTQIZj+EyKbryDk8Mo0oln +jJpj3QXxeVFfIaEBqoEAnv2xzQ8NFKpY1PVEwGbVM7umMk+uEZSZhq3wHBqUj68T1jh VNICfknGXwpHLGU/JX9zXnIkaSAbv93IrQCRB8UyNzaC+D0wXgOz1MC37cFjZspSHgxm KQtLVLUOgBHs3U4UzFv/Oe96BchVI9qxKNMz0BNv7TcSJRqcxSQ1rZhohABzqwvlUndG woog== X-Gm-Message-State: AJIora8c+B1e2zQ8M5g/tKwrnNGw9MBKXAEdjwvB2097je+6fUr9rD/X nD/1X5Ysxb4qMqeUsnbfbFc= X-Google-Smtp-Source: AGRyM1sqbcED0mTRFEv6TTayOJsQ8FdQK+Api+GkJ3WChEnEDu/p4DsEPPk9VZWnUe6c/0yErdjEXA== X-Received: by 2002:a05:600c:2055:b0:3a0:4605:df1a with SMTP id p21-20020a05600c205500b003a04605df1amr6603225wmg.75.1656274010483; Sun, 26 Jun 2022 13:06:50 -0700 (PDT) Received: from ?IPV6:2a01:e0a:1dc:b1c0:dc8b:5cbd:58f3:df96? ([2a01:e0a:1dc:b1c0:dc8b:5cbd:58f3:df96]) by smtp.googlemail.com with ESMTPSA id r4-20020a05600c158400b0039c457cea21sm10174347wmf.34.2022.06.26.13.06.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 26 Jun 2022 13:06:49 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------OeaiISq6lukqKHGphA4IQXUc" Message-ID: <3984eef3-6508-9a2c-4118-73f4786f6810@gmail.com> Date: Sun, 26 Jun 2022 22:06:48 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH] Enhance _Hashtable for range insertion 0/5 Content-Language: en-US To: Jonathan Wakely Cc: "libstdc++@gcc.gnu.org" , gcc-patches References: <8df25ff1-5b70-4030-768b-965f92870eb9@gmail.com> From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= In-Reply-To: X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 26 Jun 2022 20:06:54 -0000 This is a multi-part message in MIME format. --------------OeaiISq6lukqKHGphA4IQXUc Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit I knew you were going to ask for it but was to impatient to propose those patches to wait anymore. Attached you'll find what I start to work on. But I am quite disappointed by the results. At least it's showing  that results are not worst. To be honest I was also hoping some feedback from potential users interesting in testing those patches. And maybe there are some well known (and free) benches that I could challenge ? François On 21/06/22 19:12, Jonathan Wakely wrote: > On Mon, 20 Jun 2022 at 17:58, François Dumont via Libstdc++ > wrote: >> Hi >> >> Here is a series of patch to enhance _Hashtable behavior mostly in the >> context of range insertion. I also start considering the problem of >> memory fragmentation in this container with 2 objectives: >> >> - It is easier to find out when you're done with the elements of a >> bucket if the last node of the bucket N is the before-begin node of >> bucket N + 1. >> >> - It is faster to loop through nodes of a bucket if those node are close >> in memory, ultimately we should have addressof(Node + 1) == >> addressof(Node) + 1 > Have these changes been profiled or benchmarked? Is it measurably > faster? By how much? > > >> [1/5] Make more use of user hints as both insertion and allocation hints. >> >> [2/5] Introduce a new method to check if we are still looping through >> the same bucket's nodes >> >> [3/5] Consider that all initializer_list elements are going to be inserted >> >> [4/5] Introduce a before-begin cache policy to remember which bucket is >> currently pointing on it >> >> [5/5] Prealloc nodes on _Hashtable copy and introduce a new assignment >> method which replicate buckets data structure >> >> François >> --------------OeaiISq6lukqKHGphA4IQXUc Content-Type: text/x-patch; charset=UTF-8; name="bench.patch" Content-Disposition: attachment; filename="bench.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvcGVyZm9ybWFuY2UvMjNfY29u dGFpbmVycy9pbnNlcnQvNTQwNzUuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL3BlcmZv cm1hbmNlLzIzX2NvbnRhaW5lcnMvaW5zZXJ0LzU0MDc1LmNjCmluZGV4IDhhYTBjZDIwMTkz Li5iYjU3NzhhMjU3YyAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9wZXJm b3JtYW5jZS8yM19jb250YWluZXJzL2luc2VydC81NDA3NS5jYworKysgYi9saWJzdGRjKyst djMvdGVzdHN1aXRlL3BlcmZvcm1hbmNlLzIzX2NvbnRhaW5lcnMvaW5zZXJ0LzU0MDc1LmNj CkBAIC0xNywxMiArMTcsMTQgQEAKIAogLy8geyBkZy1kbyBydW4geyB0YXJnZXQgYysrMTEg fSB9CiAKLSNpbmNsdWRlIDx0ZXN0c3VpdGVfcGVyZm9ybWFuY2UuaD4KKyNpbmNsdWRlIDxz dHJpbmc+CiAjaW5jbHVkZSA8cmFuZG9tPgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVk ZSA8dHIxL3Vub3JkZXJlZF9zZXQ+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KIAorI2lu Y2x1ZGUgPHRlc3RzdWl0ZV9wZXJmb3JtYW5jZS5oPgorCiAjZGVmaW5lIFVTRV9NWV9GT08g MQogCiBzdHJ1Y3QgRm9vCkBAIC03MSwxMCArNzMsMTMgQEAgc3RydWN0IEhhc2hGdW5jdGlv bgogfTsKIAogY29uc3QgaW50IHN6ID0gMzAwMDAwOworY29uc3QgaW50IHVzeiA9IHN6IC8g MjsKIAogdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRUeXBlPgogICB2b2lkCi0gIGJlbmNoKGNv bnN0IGNoYXIqIGNvbnRhaW5lcl9kZXNjLCBjb25zdCB0eXBlbmFtZSBfQ29udFR5cGU6OnZh bHVlX3R5cGUqIGZvb3MpCisgIGJlbmNoKGNvbnN0IGNoYXIqIGNvbnRhaW5lcl9kZXNjLAor CWNvbnN0IHR5cGVuYW1lIF9Db250VHlwZTo6dmFsdWVfdHlwZSogZm9vcywKKwljb25zdCB0 eXBlbmFtZSBfQ29udFR5cGU6OnZhbHVlX3R5cGUqIHVmb29zKQogICB7CiAgICAgdXNpbmcg bmFtZXNwYWNlIF9fZ251X3Rlc3Q7CiAKQEAgLTEwNiw2ICsxMTEsNTEgQEAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NvbnRUeXBlPgogICAgIG9zdHIgPDwgY29udGFpbmVyX2Rlc2MgPDwgbmJf bG9vcCA8PCAiIHRpbWVzIGluc2VydGlvbiBvZiAiCiAJIDw8IHN6IDw8ICIgZWxlbWVudHMi OwogICAgIHJlcG9ydF9wZXJmb3JtYW5jZShfX0ZJTEVfXywgb3N0ci5zdHIoKS5jX3N0cigp LCB0aW1lLCByZXNvdXJjZSk7CisKKyAgICAvLyBUcnkgdG8gbG9va3VwIGZvciBtb3N0bHkg dW5rbm93biBlbnRyaWVzLgorICAgIHN0YXJ0X2NvdW50ZXJzKHRpbWUsIHJlc291cmNlKTsK KworICAgIGludCBmY291bnQgPSAwOworICAgIGZvciAoaW50IGogPSAwOyBqICE9IG5iX2xv b3A7ICsraikKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpICE9IHVzejsgKytpKQorCWZjb3Vu dCArPSBzLmZpbmQodWZvb3NbaV0pICE9IHMuZW5kKCkgPyAxIDogMDsKKworICAgIHN0b3Bf Y291bnRlcnModGltZSwgcmVzb3VyY2UpOworICAgIG9zdHIuc3RyKCIiKTsKKyAgICBvc3Ry IDw8IGNvbnRhaW5lcl9kZXNjIDw8IG5iX2xvb3AgPDwgIiB0aW1lcyBsb29rdXAgb2YgIgor CSA8PCB1c3ogPDwgIiBlbGVtZW50cyAiIDw8IGZjb3VudCAvIG5iX2xvb3AgPDwgIiBmb3Vu ZCI7CisgICAgcmVwb3J0X3BlcmZvcm1hbmNlKF9fRklMRV9fLCBvc3RyLnN0cigpLmNfc3Ry KCksIHRpbWUsIHJlc291cmNlKTsKKworICAgIC8vIFRyeSBhZ2FpbiB0aGUgcHJldmlvdXMg b3BlcmF0aW9ucyBidXQgb24gYSBjb3B5IHdpdGggcG90ZW50aWFsbHkKKyAgICAvLyBsZXNz IG1lbW9yeSBmcmFnbWVudGF0aW9uLgorICAgIF9Db250VHlwZSBzY29weShzKTsKKworICAg IC8vIFRyeSB0byBpbnNlcnQgYWdhaW4gdG8gY2hlY2sgcGVyZm9ybWFuY2Ugb2YgY29sbGlz aW9uIGRldGVjdGlvbgorICAgIHN0YXJ0X2NvdW50ZXJzKHRpbWUsIHJlc291cmNlKTsKKwor ICAgIGZvciAoaW50IGogPSAwOyBqICE9IG5iX2xvb3A7ICsraikKKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpICE9IHN6OyArK2kpCisJc2NvcHkuaW5zZXJ0KGZvb3NbaV0pOworCisgICAg c3RvcF9jb3VudGVycyh0aW1lLCByZXNvdXJjZSk7CisgICAgb3N0ci5zdHIoIiIpOworICAg IG9zdHIgPDwgY29udGFpbmVyX2Rlc2MgPDwgbmJfbG9vcCA8PCAiIHRpbWVzIGluc2VydGlv biBvZiAiCisJIDw8IHN6IDw8ICIgZWxlbWVudHMgaW4gY29weSI7CisgICAgcmVwb3J0X3Bl cmZvcm1hbmNlKF9fRklMRV9fLCBvc3RyLnN0cigpLmNfc3RyKCksIHRpbWUsIHJlc291cmNl KTsKKworICAgIC8vIFRyeSB0byBsb29rdXAgZm9yIG1vc3RseSB1bmtub3duIGVudHJpZXMu CisgICAgc3RhcnRfY291bnRlcnModGltZSwgcmVzb3VyY2UpOworCisgICAgZmNvdW50ID0g MDsKKyAgICBmb3IgKGludCBqID0gMDsgaiAhPSBuYl9sb29wOyArK2opCisgICAgICBmb3Ig KGludCBpID0gMDsgaSAhPSB1c3o7ICsraSkKKwlmY291bnQgKz0gc2NvcHkuZmluZCh1Zm9v c1tpXSkgIT0gc2NvcHkuZW5kKCkgPyAxIDogMDsKKworICAgIHN0b3BfY291bnRlcnModGlt ZSwgcmVzb3VyY2UpOworICAgIG9zdHIuc3RyKCIiKTsKKyAgICBvc3RyIDw8IGNvbnRhaW5l cl9kZXNjIDw8IG5iX2xvb3AgPDwgIiB0aW1lcyBsb29rdXAgb2YgIgorCSA8PCB1c3ogPDwg IiBlbGVtZW50cyAiIDw8IGZjb3VudCAvIG5iX2xvb3AgPDwgIiBmb3VuZCI7CisgICAgcmVw b3J0X3BlcmZvcm1hbmNlKF9fRklMRV9fLCBvc3RyLnN0cigpLmNfc3RyKCksIHRpbWUsIHJl c291cmNlKTsKICAgfQogCiB0ZW1wbGF0ZTxib29sIGNhY2hlPgpAQCAtMTU1LDY3ICsyMDUs NzggQEAgaW50IG1haW4oKQogCiAgIHsKICAgICBpbnQgYmFyc1tzel07CisgICAgaW50IHVi YXJzW3Vzel07CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gc3o7ICsraSkKICAgICAgIGJh cnNbaV0gPSBpOworICAgIGZvciAoaW50IGkgPSAwOyBpICE9IHVzejsgKytpKQorICAgICAg dWJhcnNbaV0gPSBzeiArIGk7CiAgICAgYmVuY2g8c3RkOjp0cjE6OnVub3JkZXJlZF9zZXQ8 aW50Pj4oCi0JInN0ZDo6dHIxOjp1bm9yZGVyZWRfc2V0PGludD4gIiwgYmFycyk7CisgICAg ICAic3RkOjp0cjE6OnVub3JkZXJlZF9zZXQ8aW50PiAiLCBiYXJzLCB1YmFycyk7CiAgICAg YmVuY2g8c3RkOjp1bm9yZGVyZWRfc2V0PGludD4+KAotCSJzdGQ6OnVub3JkZXJlZF9zZXQ8 aW50PiAiLCBiYXJzKTsKKyAgICAgICJzdGQ6OnVub3JkZXJlZF9zZXQ8aW50PiAiLCBiYXJz LCB1YmFycyk7CiAgIH0KIAotICBGb28gZm9vc1tzel07Ci0jaWYgVVNFX01ZX0ZPTwogICB7 Ci0gICAgc3RkOjpyYW5kb21fZGV2aWNlIHJhbmRldjsKLSAgICBmb3IgKGludCBpID0gMDsg aSAhPSBzejsgKytpKQotICAgICAgZm9vc1tpXS5pbml0KHJhbmRldik7Ci0gIH0KKyAgICBG b28gZm9vc1tzel07CisgICAgRm9vIHVmb29zW3Vzel07CisjaWYgVVNFX01ZX0ZPTworICAg IHsKKyAgICAgIHN0ZDo6cmFuZG9tX2RldmljZSByYW5kZXY7CisgICAgICBmb3IgKGludCBp ID0gMDsgaSAhPSBzejsgKytpKQorCWZvb3NbaV0uaW5pdChyYW5kZXYpOworICAgICAgZm9y IChpbnQgaSA9IDA7IGkgIT0gdXN6OyArK2kpCisJdWZvb3NbaV0uaW5pdChyYW5kZXYpOwor ICAgIH0KICNlbmRpZgogCi0gIHRpbWVfY291bnRlciB0aW1lOwotICByZXNvdXJjZV9jb3Vu dGVyIHJlc291cmNlOwotICBzdGFydF9jb3VudGVycyh0aW1lLCByZXNvdXJjZSk7Ci0KLSAg YmVuY2g8X190cjFfdXNldDxmYWxzZT4+KAotCSJzdGQ6OnRyMTo6dW5vcmRlcmVkX3NldCB3 aXRob3V0IGhhc2ggY29kZSBjYWNoZWQgIiwgZm9vcyk7Ci0gIGJlbmNoPF9fdHIxX3VzZXQ8 dHJ1ZT4+KAotCSJzdGQ6OnRyMTo6dW5vcmRlcmVkX3NldCB3aXRoIGhhc2ggY29kZSBjYWNo ZWQgIiwgZm9vcyk7Ci0gIGJlbmNoPF9fdHIxX3Vtc2V0PGZhbHNlPj4oCi0JInN0ZDo6dHIx Ojp1bm9yZGVyZWRfbXVsdGlzZXQgd2l0aG91dCBoYXNoIGNvZGUgY2FjaGVkICIsIGZvb3Mp OwotICBiZW5jaDxfX3RyMV91bXNldDx0cnVlPj4oCi0JInN0ZDo6dHIxOjp1bm9yZGVyZWRf bXVsdGlzZXQgd2l0aCBoYXNoIGNvZGUgY2FjaGVkICIsIGZvb3MpOwotCi0gIHN0b3BfY291 bnRlcnModGltZSwgcmVzb3VyY2UpOwotICByZXBvcnRfcGVyZm9ybWFuY2UoX19GSUxFX18s ICJ0cjEgYmVuY2hlcyIsIHRpbWUsIHJlc291cmNlKTsKLQotICBzdGFydF9jb3VudGVycyh0 aW1lLCByZXNvdXJjZSk7Ci0gIGJlbmNoPF9fdXNldDxmYWxzZT4+KAotCSJzdGQ6OnVub3Jk ZXJlZF9zZXQgd2l0aG91dCBoYXNoIGNvZGUgY2FjaGVkICIsIGZvb3MpOwotICBiZW5jaDxf X3VzZXQ8dHJ1ZT4+KAotCSJzdGQ6OnVub3JkZXJlZF9zZXQgd2l0aCBoYXNoIGNvZGUgY2Fj aGVkICIsIGZvb3MpOwotICBiZW5jaDxfX3Vtc2V0PGZhbHNlPj4oCi0JInN0ZDo6dW5vcmRl cmVkX211bHRpc2V0IHdpdGhvdXQgaGFzaCBjb2RlIGNhY2hlZCAiLCBmb29zKTsKLSAgYmVu Y2g8X191bXNldDx0cnVlPj4oCi0JInN0ZDo6dW5vcmRlcmVkX211bHRpc2V0IHdpdGggaGFz aCBjb2RlIGNhY2hlZCAiLCBmb29zKTsKLQotICBzdG9wX2NvdW50ZXJzKHRpbWUsIHJlc291 cmNlKTsKLSAgcmVwb3J0X3BlcmZvcm1hbmNlKF9fRklMRV9fLCAic3RkIGJlbmNoZXMiLCB0 aW1lLCByZXNvdXJjZSk7Ci0KLSAgc3RhcnRfY291bnRlcnModGltZSwgcmVzb3VyY2UpOwot ICBiZW5jaDxfX3VzZXQyPGZhbHNlPj4oCi0JInN0ZDo6dW5vcmRlcmVkX3NldDIgd2l0aG91 dCBoYXNoIGNvZGUgY2FjaGVkICIsIGZvb3MpOwotICBiZW5jaDxfX3VzZXQyPHRydWU+PigK LQkic3RkOjp1bm9yZGVyZWRfc2V0MiB3aXRoIGhhc2ggY29kZSBjYWNoZWQgIiwgZm9vcyk7 Ci0gIGJlbmNoPF9fdW1zZXQyPGZhbHNlPj4oCi0JInN0ZDo6dW5vcmRlcmVkX211bHRpc2V0 MiB3aXRob3V0IGhhc2ggY29kZSBjYWNoZWQgIiwgZm9vcyk7Ci0gIGJlbmNoPF9fdW1zZXQy PHRydWU+PigKLQkic3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQyIHdpdGggaGFzaCBjb2RlIGNh Y2hlZCAiLCBmb29zKTsKLQotICBzdG9wX2NvdW50ZXJzKHRpbWUsIHJlc291cmNlKTsKLSAg cmVwb3J0X3BlcmZvcm1hbmNlKF9fRklMRV9fLCAic3RkMiBiZW5jaGVzIiwgdGltZSwgcmVz b3VyY2UpOwotCi0gIGJlbmNoPHN0ZDo6dW5vcmRlcmVkX3NldDxGb28sIEhhc2hGdW5jdGlv bj4+KAotCSJzdGQ6OnVub3JkZXJlZF9zZXQgZGVmYXVsdCBjYWNoZSAiLCBmb29zKTsKLSAg YmVuY2g8c3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQ8Rm9vLCBIYXNoRnVuY3Rpb24+PigKLQki c3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQgZGVmYXVsdCBjYWNoZSAiLCBmb29zKTsKKyAgICB0 aW1lX2NvdW50ZXIgdGltZTsKKyAgICByZXNvdXJjZV9jb3VudGVyIHJlc291cmNlOworICAg IHN0YXJ0X2NvdW50ZXJzKHRpbWUsIHJlc291cmNlKTsKKworICAgIGJlbmNoPF9fdHIxX3Vz ZXQ8ZmFsc2U+PigKKyAgICAgICJzdGQ6OnRyMTo6dW5vcmRlcmVkX3NldCB3aXRob3V0IGhh c2ggY29kZSBjYWNoZWQgIiwgZm9vcywgdWZvb3MpOworICAgIGJlbmNoPF9fdHIxX3VzZXQ8 dHJ1ZT4+KAorICAgICAgInN0ZDo6dHIxOjp1bm9yZGVyZWRfc2V0IHdpdGggaGFzaCBjb2Rl IGNhY2hlZCAiLCBmb29zLCB1Zm9vcyk7CisgICAgYmVuY2g8X190cjFfdW1zZXQ8ZmFsc2U+ PigKKyAgICAgICJzdGQ6OnRyMTo6dW5vcmRlcmVkX211bHRpc2V0IHdpdGhvdXQgaGFzaCBj b2RlIGNhY2hlZCAiLCBmb29zLCB1Zm9vcyk7CisgICAgYmVuY2g8X190cjFfdW1zZXQ8dHJ1 ZT4+KAorICAgICAgInN0ZDo6dHIxOjp1bm9yZGVyZWRfbXVsdGlzZXQgd2l0aCBoYXNoIGNv ZGUgY2FjaGVkICIsIGZvb3MsIHVmb29zKTsKKworICAgIHN0b3BfY291bnRlcnModGltZSwg cmVzb3VyY2UpOworICAgIHJlcG9ydF9wZXJmb3JtYW5jZShfX0ZJTEVfXywgInRyMSBiZW5j aGVzIiwgdGltZSwgcmVzb3VyY2UpOworCisgICAgc3RhcnRfY291bnRlcnModGltZSwgcmVz b3VyY2UpOworICAgIGJlbmNoPF9fdXNldDxmYWxzZT4+KAorICAgICAgInN0ZDo6dW5vcmRl cmVkX3NldCB3aXRob3V0IGhhc2ggY29kZSBjYWNoZWQgIiwgZm9vcywgdWZvb3MpOworICAg IGJlbmNoPF9fdXNldDx0cnVlPj4oCisgICAgICAic3RkOjp1bm9yZGVyZWRfc2V0IHdpdGgg aGFzaCBjb2RlIGNhY2hlZCAiLCBmb29zLCB1Zm9vcyk7CisgICAgYmVuY2g8X191bXNldDxm YWxzZT4+KAorICAgICAgInN0ZDo6dW5vcmRlcmVkX211bHRpc2V0IHdpdGhvdXQgaGFzaCBj b2RlIGNhY2hlZCAiLCBmb29zLCB1Zm9vcyk7CisgICAgYmVuY2g8X191bXNldDx0cnVlPj4o CisgICAgICAic3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQgd2l0aCBoYXNoIGNvZGUgY2FjaGVk ICIsIGZvb3MsIHVmb29zKTsKKworICAgIHN0b3BfY291bnRlcnModGltZSwgcmVzb3VyY2Up OworICAgIHJlcG9ydF9wZXJmb3JtYW5jZShfX0ZJTEVfXywgInN0ZCBiZW5jaGVzIiwgdGlt ZSwgcmVzb3VyY2UpOworCisgICAgc3RhcnRfY291bnRlcnModGltZSwgcmVzb3VyY2UpOwor ICAgIGJlbmNoPF9fdXNldDI8ZmFsc2U+PigKKyAgICAgICJzdGQ6OnVub3JkZXJlZF9zZXQy IHdpdGhvdXQgaGFzaCBjb2RlIGNhY2hlZCAiLCBmb29zLCB1Zm9vcyk7CisgICAgYmVuY2g8 X191c2V0Mjx0cnVlPj4oCisgICAgICAic3RkOjp1bm9yZGVyZWRfc2V0MiB3aXRoIGhhc2gg Y29kZSBjYWNoZWQgIiwgZm9vcywgdWZvb3MpOworICAgIGJlbmNoPF9fdW1zZXQyPGZhbHNl Pj4oCisgICAgICAic3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQyIHdpdGhvdXQgaGFzaCBjb2Rl IGNhY2hlZCAiLCBmb29zLCB1Zm9vcyk7CisgICAgYmVuY2g8X191bXNldDI8dHJ1ZT4+KAor ICAgICAgInN0ZDo6dW5vcmRlcmVkX211bHRpc2V0MiB3aXRoIGhhc2ggY29kZSBjYWNoZWQg IiwgZm9vcywgdWZvb3MpOworCisgICAgc3RvcF9jb3VudGVycyh0aW1lLCByZXNvdXJjZSk7 CisgICAgcmVwb3J0X3BlcmZvcm1hbmNlKF9fRklMRV9fLCAic3RkMiBiZW5jaGVzIiwgdGlt ZSwgcmVzb3VyY2UpOworCisgICAgYmVuY2g8c3RkOjp1bm9yZGVyZWRfc2V0PEZvbywgSGFz aEZ1bmN0aW9uPj4oCisgICAgICAic3RkOjp1bm9yZGVyZWRfc2V0IGRlZmF1bHQgY2FjaGUg IiwgZm9vcywgdWZvb3MpOworICAgIGJlbmNoPHN0ZDo6dW5vcmRlcmVkX211bHRpc2V0PEZv bywgSGFzaEZ1bmN0aW9uPj4oCisgICAgICAic3RkOjp1bm9yZGVyZWRfbXVsdGlzZXQgZGVm YXVsdCBjYWNoZSAiLCBmb29zLCB1Zm9vcyk7CisgIH0KKworICB7CisgIH0KIH0KZGlmZiAt LWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvcGVyZm9ybWFuY2UvMjNfY29udGFpbmVy cy9pbnNlcnRfZXJhc2UvdW5vcmRlcmVkX3NtYWxsX3NpemUuY2MgYi9saWJzdGRjKystdjMv dGVzdHN1aXRlL3BlcmZvcm1hbmNlLzIzX2NvbnRhaW5lcnMvaW5zZXJ0X2VyYXNlL3Vub3Jk ZXJlZF9zbWFsbF9zaXplLmNjCmluZGV4IGFlNjNjMTViNWRhLi5hMjNiMjBiZjY5ZCAxMDA2 NDQKLS0tIGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9wZXJmb3JtYW5jZS8yM19jb250YWlu ZXJzL2luc2VydF9lcmFzZS91bm9yZGVyZWRfc21hbGxfc2l6ZS5jYworKysgYi9saWJzdGRj KystdjMvdGVzdHN1aXRlL3BlcmZvcm1hbmNlLzIzX2NvbnRhaW5lcnMvaW5zZXJ0X2VyYXNl L3Vub3JkZXJlZF9zbWFsbF9zaXplLmNjCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZQog ICBjb25zdCBpbnQgbmJfaW5zdHMgPSAxNTAwMDA7CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUg X0VsZW1UeXBlPgotICAgIHZvaWQgYmVuY2goY29uc3QgY2hhciogZGVzYywgY29uc3Qgc3Rk Ojp2ZWN0b3I8X0VsZW1UeXBlPiYgZWxlbXMpCisgICAgdm9pZCBiZW5jaChjb25zdCBjaGFy KiBkZXNjLCBjb25zdCBzdGQ6OnZlY3RvcjxfRWxlbVR5cGU+JiBlbGVtcywgYm9vbCB3aXRo X2NvcHkpCiAgICAgewogICAgICAgdXNpbmcgbmFtZXNwYWNlIF9fZ251X3Rlc3Q7CiAKQEAg LTUyLDYgKzUyLDE5IEBAIG5hbWVzcGFjZQogICAgICAgb3N0ciA8PCBkZXNjIDw8ICIgMXN0 IGluc2VydCI7CiAgICAgICByZXBvcnRfcGVyZm9ybWFuY2UoX19GSUxFX18sIG9zdHIuc3Ry KCkuY19zdHIoKSwgdGltZSwgcmVzb3VyY2UpOwogCisgICAgICBpZiAod2l0aF9jb3B5KQor CXsKKwkgIHN0YXJ0X2NvdW50ZXJzKHRpbWUsIHJlc291cmNlKTsKKworCSAgc3RkOjp2ZWN0 b3I8c3RkOjp1bm9yZGVyZWRfc2V0PF9FbGVtVHlwZT4+KGluc3RzKS5zd2FwKGluc3RzKTsK KworCSAgc3RvcF9jb3VudGVycyh0aW1lLCByZXNvdXJjZSk7CisKKwkgIG9zdHIuc3RyKCIi KTsKKwkgIG9zdHIgPDwgZGVzYyA8PCAiIGNvcHkiOworCSAgcmVwb3J0X3BlcmZvcm1hbmNl KF9fRklMRV9fLCBvc3RyLnN0cigpLmNfc3RyKCksIHRpbWUsIHJlc291cmNlKTsKKwl9CisK ICAgICAgIHN0YXJ0X2NvdW50ZXJzKHRpbWUsIHJlc291cmNlKTsKIAogICAgICAgZm9yIChh dXRvJiB1cyA6IGluc3RzKQpAQCAtMTAzLDcgKzExNiw4IEBAIGludCBtYWluKCkKICAgICBm b3IgKGludCBpID0gMDsgaSAhPSBuYl9lbGVtZW50czsgKytpKQogICAgICAgZWxlbXMucHVz aF9iYWNrKGkpOwogCi0gICAgYmVuY2goInN0ZDo6dW5vcmRlcmVkX3NldDxpbnQ+OiAgICAi LCBlbGVtcyk7CisgICAgYmVuY2goInN0ZDo6dW5vcmRlcmVkX3NldDxpbnQ+OiAgICAiLCBl bGVtcywgZmFsc2UpOworICAgIGJlbmNoKCJzdGQ6OnVub3JkZXJlZF9zZXQ8aW50PjogICAg IiwgZWxlbXMsIHRydWUpOwogICB9CiAKICAgewpAQCAtMTE4LDcgKzEzMiw4IEBAIGludCBt YWluKCkKIAl9CiAgICAgfQogCi0gICAgYmVuY2goInN0ZDo6dW5vcmRlcmVkX3NldDxzdHJp bmc+OiAiLCBlbGVtcyk7CisgICAgYmVuY2goInN0ZDo6dW5vcmRlcmVkX3NldDxzdHJpbmc+ OiAiLCBlbGVtcywgZmFsc2UpOworICAgIGJlbmNoKCJzdGQ6OnVub3JkZXJlZF9zZXQ8c3Ry aW5nPjogIiwgZWxlbXMsIHRydWUpOwogICB9CiAKICAgcmV0dXJuIDA7Cg== --------------OeaiISq6lukqKHGphA4IQXUc--