Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rnkSG-00Et3n-Fc for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Mar 2024 19:21:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rnkSE-006qOM-TH for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Mar 2024 19:21:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rnkSE-006qOD-BA for pgsql-hackers@lists.postgresql.org; Fri, 22 Mar 2024 19:21:27 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rnkSB-005xWe-0s for pgsql-hackers@lists.postgresql.org; Fri, 22 Mar 2024 19:21:26 +0000 Received: from mail.postgrespro.ru (unknown [192.168.2.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: i.kartyshov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 04FB6E20EE5 for ; Fri, 22 Mar 2024 22:21:21 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1711135281; bh=DtFgFiHadIPovhK6n88A9E95ZdKZgqkZEwZv5aVt9BE=; h=Date:From:To:Subject:In-Reply-To:References:User-Agent:Message-ID: From; b=vZXMHfCxBhF1A0AMqTiOq0SPlZNv3kxrWE6+UOhmPaeSYR8auW2wpnpfLkLtKxsXF qp1bfNmDcuhyuTKvTo0QTAINEMYLKt8bFZz1xglsZKY9fKoplpdv9wp89F9mdmUE5Y aDALo//bT2waGDI/AB0uY/pMP7D4WEO9I562FUxXCIRcOR6gK7P+NpwFogxuNAwXc1 EhE76oyVf8h7WZKd2tEobPMmV71x60Ti9R7JA7VWbRXy2EdsU89wkO2js0t/Z/cmiV EzOPgnDFotfNvVSEqBPXUSrWopWwTe+3iQtq2PQp2r+u6NfEbmLASCPZUkzuMMY54l tF3Ko+wj+mMWQ== MIME-Version: 1.0 Date: Fri, 22 Mar 2024 22:21:20 +0300 From: Kartyshov Ivan To: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: References: User-Agent: Roundcube Webmail/1.6.5 Message-ID: <8b67e6514c9ac3562ed675393208506a@postgrespro.ru> X-Sender: i.kartyshov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_79d2b0ff3ac3b14e26c240cd5b2efc7f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_79d2b0ff3ac3b14e26c240cd5b2efc7f Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Thank you for your feedback. On 2024-03-20 12:11, Alexander Korotkov wrote: > On Wed, Mar 20, 2024 at 12:34 AM Kartyshov Ivan > wrote: >> > 4.2 With an unreasonably high future LSN, BEGIN command waits >> > unboundedly, shouldn't we check if the specified LSN is more than >> > pg_last_wal_receive_lsn() error out? > > I think limiting wait lsn by current received lsn would destroy the > whole value of this feature. The value is to wait till given LSN is > replayed, whether it's already received or not. Ok sounds reasonable, I`ll rollback the changes. > But I don't see a problem here. On the replica, it's out of our > control to check which lsn is good and which is not. We can't check > whether the lsn, which is in future for the replica, is already issued > by primary. > > For the case of wrong lsn, which could cause potentially infinite > wait, there is the timeout and the manual query cancel. Fully agree with this take. >> > 4.3 With an unreasonably high wait time, BEGIN command waits >> > unboundedly, shouldn't we restrict the wait time to some max > value, >> > say a day or so? >> > SELECT pg_last_wal_receive_lsn() + 1 AS future_receive_lsn \gset >> > BEGIN AFTER :'future_receive_lsn' WITHIN 100000; >> >> Good idea, I put it 1 day. But this limit we should to discuss. > > Do you think that specifying timeout in milliseconds is suitable? I > would prefer to switch to seconds (with ability to specify fraction of > second). This was expressed before by Alexander Lakhin. It sounds like an interesting idea. Please review the result. >> > https://github.com/macdice/redo-bench or similar tools? > > Ivan, could you do this? Yes, test redo-bench/crash-recovery.sh This patch on master 91.327, 1.973 105.907, 3.338 98.412, 4.579 95.818, 4.19 REL_13-STABLE 116.645, 3.005 113.212, 2.568 117.644, 3.183 111.411, 2.782 master 124.712, 2.047 117.012, 1.736 116.328, 2.035 115.662, 1.797 Strange behavior, patched version is faster then REL_13-STABLE and master. > I don't see this change in the patch. Normally if a process gets a > signal, that causes WaitLatch() to exit immediately. It also exists > immediately on query cancel. IIRC, this 1 minute timeout is needed to > handle some extreme cases when an interrupt is missing. Other places > have it equal to 1 minute. I don't see why we should have it > different. Ok, I`ll rollback my changes. >> 4) added and expanded sections in the documentation > > I don't see this in the patch. I see only a short description in > func.sgml, which is definitely not sufficient. We need at least > everything we have in the docs before to be adjusted with the current > approach of procedure. I didn't find another section where to add the description of pg_wait_lsn(). So I extend description on the bottom of the table. >> 5) add default variant of timeout >> pg_wait_lsn(trg_lsn pg_lsn, delay int8 DEFAULT 0) >> example: pg_wait_lsn('0/31B1B60') equal pg_wait_lsn('0/31B1B60', 0) > > Does zero here mean no timeout? I think this should be documented. > Also, I would prefer to see the timeout by default. Probably one > minute would be good for default. Lets discuss this point. Loop in function WaitForLSN is made that way, if we choose delay=0, only then we can wait infinitely to wait LSN without timeout. So default must be 0. Please take one more look on the patch. -- Ivan Kartyshov Postgres Professional: www.postgrespro.com --=_79d2b0ff3ac3b14e26c240cd5b2efc7f Content-Transfer-Encoding: base64 Content-Type: text/x-diff; charset=us-ascii; name=v14_0001-Procedure-wait-lsn.patch Content-Disposition: attachment; filename=v14_0001-Procedure-wait-lsn.patch; size=18826 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sCmluZGV4IDViMjI1Y2NmNGYuLjZlMWY2OTk2MmQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjc4NjEsMTAgKzI3 ODYxLDU0IEBAIHBvc3RncmVzPSMgU0VMRUNUICcwLzAnOjpwZ19sc24gKyBwZC5zZWdtZW50X251 bWJlciAqIHBzLnNldHRpbmc6OmludCArIDpvZmZzZXQKICAgICAgICAgZXh0ZW5zaW9uLgogICAg ICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+CisKKyAgICAgIDxyb3c+CisgICAgICAg PGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJl Ij4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX3dhaXRfbHNuPC9w cmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX3dhaXRf bHNuPC9mdW5jdGlvbj4gKHRyZ19sc24gcGdfbHNuLCBkZWxheSBpbnQ4IERFRkFVTFQgMCkKKyAg ICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJldHVybnMgRVJST1IgaWYgdGFy Z2V0IExTTiB3YXMgbm90IHJlcGxheWVkIG9uIHN0YW5kYnkuCisgICAgICAgIFBhcmFtZXRlciA8 cGFyYW1ldGVyPmRlbGF5PC9wYXJhbWV0ZXI+IHNldHMgc2Vjb25kcywgdGhlIHRpbWUgdG8gd2Fp dCB0byB0aGUgTFNOLgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CiAgICAg IDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgogCisgICA8cGFyYT4KKyAgICA8 ZnVuY3Rpb24+cGdfd2FpdF9sc248L2Z1bmN0aW9uPiB3YWl0cyB0aWxsIDxwYXJhbWV0ZXI+d2Fp dF9sc248L3BhcmFtZXRlcj4KKyAgICB0byBiZSByZXBsYXllZCBvbiBzdGFuZGJ5IHRvIGFjaGll dmUgcmVhZC15b3VyLXdyaXRlcy1jb25zaXN0ZW5jeSwgd2hpbGUKKyAgICB1c2luZyBhc3luYyBy ZXBsaWNhIGZvciByZWFkcyBhbmQgcHJpbWFyeSBmb3Igd3JpdGVzLiBJbiB0aGF0IGNhc2UgbHNu IG9mCisgICAgbGFzdCBtb2RpZmljYXRpb24gaXMgc3RvcmVkIGluc2lkZSBhcHBsaWNhdGlvbi4K KyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgWW91IGNhbiB1c2UgPGZ1bmN0aW9uPnBnX3dh aXRfbHNuPC9mdW5jdGlvbj4gdG8gd2FpdCB0aGUgPHR5cGU+cGdfbHNuPC90eXBlPgorICAgIHZh bHVlLiBGb3IgZXhhbXBsZToKKyAgIDxwcm9ncmFtbGlzdGluZz4KKyAgIFJlcGxpY2E6CisgICBw b3N0Z3Jlc3FsLmNvbmYKKyAgICAgcmVjb3ZlcnlfbWluX2FwcGx5X2RlbGF5ID0gMTBzOworCisg ICBQcmltYXJ5OiBBcHBsaWNhdGlvbiB1cGRhdGUgdGFibGUgYW5kIGdldCBsc24gb2YgY2hhbmdl cworICAgcG9zdGdyZXM9IyBVUERBVEUgZmlsbXMgU0VUIGtpbmQgPSAnRHJhbWF0aWMnIFdIRVJF IGtpbmQgPSAnRHJhbWEnOworICAgcG9zdGdyZXM9IyBTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNu KCk7CisgICBwZ19jdXJyZW50X3dhbF9sc24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAw LzMwNkVFMjAKKyAgICgxIHJvdykKKworICAgUmVwbGljYTogV2FpdCBhbmQgcmVhZCB1cGRhdGVk IGRhdGEKKyAgIHBvc3RncmVzPSMgQ0FMTCBwZ193YWl0X2xzbignMC8zMDZFRTIwJywgMTAwKTsg Ly8gVGltZW91dCAxMDBtcyBpcyBpbnN1ZmZpY2VudAorICAgRVJST1I6ICBjYW5jZWxpbmcgd2Fp dGluZyBmb3IgTFNOIGR1ZSB0byB0aW1lb3V0CisgICBwb3N0Z3Jlcz0jIENBTEwgcGdfd2FpdF9s c24oJzAvMzA2RUUyMCcpOworICAgcG9zdGdyZXM9IyBTRUxFQ1QgKiBGUk9NIGZpbG1zIFdIRVJF IGtpbmQgPSAnRHJhbWEnOworICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgIDwvcGFyYT4KKwogICAg PHBhcmE+CiAgICAgVGhlIGZ1bmN0aW9ucyBzaG93biBpbiA8eHJlZgogICAgIGxpbmtlbmQ9ImZ1 bmN0aW9ucy1yZWNvdmVyeS1jb250cm9sLXRhYmxlIi8+IGNvbnRyb2wgdGhlIHByb2dyZXNzIG9m IHJlY292ZXJ5LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3Jl Y292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRl eCAyOWM1YmVjMDg0Li4wYjc4M2RjNzMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9ncmVjb3ZlcnkuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImJhY2t1cC9iYXNlYmFj a3VwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXRsc24uaCIKICNpbmNsdWRl ICJjb21tb24vZmlsZV91dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg InBnc3RhdC5oIgpAQCAtMTgyOCw2ICsxODI5LDE0IEBAIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lk KQogCQkJCWJyZWFrOwogCQkJfQogCisJCQkvKgorCQkJICogSWYgd2UgcmVwbGF5ZWQgYW4gTFNO IHRoYXQgc29tZW9uZSB3YXMgd2FpdGluZyBmb3IsIHNldCBsYXRjaGVzCisJCQkgKiBpbiBzaGFy ZWQgbWVtb3J5IGFycmF5IHRvIG5vdGlmeSB0aGUgd2FpdGVyLgorCQkJICovCisJCQlpZiAod2Fp dExTTiAmJgorCQkJCShYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0ciA+PSBw Z19hdG9taWNfcmVhZF91NjQoJndhaXRMU04tPm1pbkxTTikpKQorCQkJCVdhaXRMU05TZXRMYXRj aGVzKFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyKTsKKwogCQkJLyogRWxz ZSwgdHJ5IHRvIGZldGNoIHRoZSBuZXh0IFdBTCByZWNvcmQgKi8KIAkJCXJlY29yZCA9IFJlYWRS ZWNvcmQoeGxvZ3ByZWZldGNoZXIsIExPRywgZmFsc2UsIHJlcGxheVRMSSk7CiAJCX0gd2hpbGUg KHJlY29yZCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVt X2Z1bmN0aW9ucy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3Fs CmluZGV4IGZlMmJiNTBmNDYuLjVjNGY5Yzc4YTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fZnVuY3Rpb25zLnNxbApAQCAtNDE0LDYgKzQxNCw5IEBAIENSRUFURSBPUiBSRVBMQUNFIEZV TkNUSU9OCiAgIGpzb25fcG9wdWxhdGVfcmVjb3Jkc2V0KGJhc2UgYW55ZWxlbWVudCwgZnJvbV9q c29uIGpzb24sIHVzZV9qc29uX2FzX3RleHQgYm9vbGVhbiBERUZBVUxUIGZhbHNlKQogICBSRVRV Uk5TIFNFVE9GIGFueWVsZW1lbnQgTEFOR1VBR0UgaW50ZXJuYWwgU1RBQkxFIFJPV1MgMTAwICBB UyAnanNvbl9wb3B1bGF0ZV9yZWNvcmRzZXQnIFBBUkFMTEVMIFNBRkU7CiAKK0NSRUFURSBPUiBS RVBMQUNFIFBST0NFRFVSRSBwZ193YWl0X2xzbih0cmdfbHNuIHBnX2xzbiwgZGVsYXkgZmxvYXQ4 IERFRkFVTFQgMCkKKyAgTEFOR1VBR0UgaW50ZXJuYWwgQVMgJ3BnX3dhaXRfbHNuJzsKKwogQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKAogICAg IElOIHNsb3RfbmFtZSBuYW1lLCBJTiB1cHRvX2xzbiBwZ19sc24sIElOIHVwdG9fbmNoYW5nZXMg aW50LCBWQVJJQURJQyBvcHRpb25zIHRleHRbXSBERUZBVUxUICd7fScsCiAgICAgT1VUIGxzbiBw Z19sc24sIE9VVCB4aWQgeGlkLCBPVVQgZGF0YSB0ZXh0KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRl eCA0OGY3MzQ4ZjkxLi5jZWRlOTBjM2I5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtNjEsNiAr NjEsNyBAQCBPQkpTID0gXAogCXZhY3V1bS5vIFwKIAl2YWN1dW1wYXJhbGxlbC5vIFwKIAl2YXJp YWJsZS5vIFwKLQl2aWV3Lm8KKwl2aWV3Lm8gXAorCXdhaXRsc24ubwogCiBpbmNsdWRlICQodG9w X3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCmlu ZGV4IDZkZDAwYTRhYmQuLjc1NDliZTVkYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCkBA IC01MCw0ICs1MCw1IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ3ZhY3V1bXBhcmFs bGVsLmMnLAogICAndmFyaWFibGUuYycsCiAgICd2aWV3LmMnLAorICAnd2FpdGxzbi5jJywKICkK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXRsc24uYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3dhaXRsc24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5iZDllYTZiN2RiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2Fp dGxzbi5jCkBAIC0wLDAgKzEsMzAzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWl0 bHNuLmMKKyAqCSAgSW1wbGVtZW50cyB3YWl0aW5nIGZvciB0aGUgZ2l2ZW4gTFNOLCB3aGljaCBp cyB1c2VkIGluCisgKgkgIENBTEwgcGdfd2FpdF9sc24od2FpdF9sc24gcGdfbHNuLCB0aW1lb3V0 IGludCkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3dhaXRsc24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisK KyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNz L3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94 bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hs b2dyZWNvdmVyeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNv bW1hbmRzL3dhaXRsc24uaCIKKyNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKKyNpbmNsdWRlICJm dW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25h bC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0u aCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCisjaW5jbHVkZSAidXRpbHMvc25hcG1n ci5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jw cm90b3MuaCIKKworLyogQWRkIHRvIC8gZGVsZXRlIGZyb20gc2hhcmVkIG1lbW9yeSBhcnJheSAq Lworc3RhdGljIHZvaWQgYWRkTFNOV2FpdGVyKFhMb2dSZWNQdHIgbHNuKTsKK3N0YXRpYyB2b2lk IGRlbGV0ZUxTTldhaXRlcih2b2lkKTsKKworc3RydWN0IFdhaXRMU05TdGF0ZSAqd2FpdExTTiA9 IE5VTEw7CitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGhhdmVTaG1lbUl0ZW0gPSBmYWxz ZTsKKworLyoKKyAqIFJlcG9ydCB0aGUgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVl ZGVkIGZvciBXYWl0TFNOU3RhdGUKKyAqLworU2l6ZQorV2FpdExTTlNobWVtU2l6ZSh2b2lkKQor eworCVNpemUJCXNpemU7CisKKwlzaXplID0gb2Zmc2V0b2YoV2FpdExTTlN0YXRlLCBwcm9jSW5m b3MpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNYXhCYWNrZW5kcywgc2l6ZW9m KFdhaXRMU05Qcm9jSW5mbykpKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyogSW5pdGlhbGl6ZSB0 aGUgV2FpdExTTlN0YXRlIGluIHRoZSBzaGFyZWQgbWVtb3J5ICovCit2b2lkCitXYWl0TFNOU2ht ZW1Jbml0KHZvaWQpCit7CisJYm9vbAkJZm91bmQ7CisKKwl3YWl0TFNOID0gKFdhaXRMU05TdGF0 ZSAqKSBTaG1lbUluaXRTdHJ1Y3QoIldhaXRMU05TdGF0ZSIsCisJCQkJCQkJCQkJCSAgIFdhaXRM U05TaG1lbVNpemUoKSwKKwkJCQkJCQkJCQkJICAgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCXsK KwkJU3BpbkxvY2tJbml0KCZ3YWl0TFNOLT5tdXRleCk7CisJCXdhaXRMU04tPm51bVdhaXRlZFBy b2NzID0gMDsKKwkJcGdfYXRvbWljX2luaXRfdTY0KCZ3YWl0TFNOLT5taW5MU04sIFBHX1VJTlQ2 NF9NQVgpOworCX0KK30KKworLyoKKyAqIEFkZCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIExT TiB3YWl0ZXIgYmFja2VuZCB0byB0aGUgc2hhcmVkIG1lbW9yeQorICogYXJyYXkuCisgKi8KK3N0 YXRpYyB2b2lkCithZGRMU05XYWl0ZXIoWExvZ1JlY1B0ciBsc24pCit7CisJV2FpdExTTlByb2NJ bmZvIGN1cjsKKwlpbnQJCQlpOworCisJU3BpbkxvY2tBY3F1aXJlKCZ3YWl0TFNOLT5tdXRleCk7 CisKKwljdXIucHJvY251bSA9IE15UHJvY051bWJlcjsKKwljdXIud2FpdExTTiA9IGxzbjsKKwor CWZvciAoaSA9IDA7IGkgPCB3YWl0TFNOLT5udW1XYWl0ZWRQcm9jczsgaSsrKQorCXsKKwkJaWYg KHdhaXRMU04tPnByb2NJbmZvc1tpXS53YWl0TFNOID49IGN1ci53YWl0TFNOKQorCQl7CisJCQlX YWl0TFNOUHJvY0luZm8gdG1wOworCisJCQl0bXAgPSB3YWl0TFNOLT5wcm9jSW5mb3NbaV07CisJ CQl3YWl0TFNOLT5wcm9jSW5mb3NbaV0gPSBjdXI7CisJCQljdXIgPSB0bXA7CisJCX0KKwl9CisJ d2FpdExTTi0+cHJvY0luZm9zW2ldID0gY3VyOworCXdhaXRMU04tPm51bVdhaXRlZFByb2NzKys7 CisKKwlwZ19hdG9taWNfd3JpdGVfdTY0KCZ3YWl0TFNOLT5taW5MU04sIHdhaXRMU04tPnByb2NJ bmZvc1tpXS53YWl0TFNOKTsKKwlTcGluTG9ja1JlbGVhc2UoJndhaXRMU04tPm11dGV4KTsKK30K KworLyoKKyAqIERlbGV0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIExTTiB3YWl0ZXIgYmFj a2VuZCBmcm9tIHRoZSBzaGFyZWQgbWVtb3J5CisgKiBhcnJheS4KKyAqLworc3RhdGljIHZvaWQK K2RlbGV0ZUxTTldhaXRlcih2b2lkKQoreworCWludAkJCWk7CisJYm9vbAkJZm91bmQgPSBmYWxz ZTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmd2FpdExTTi0+bXV0ZXgpOworCisJZm9yIChpID0gMDsg aSA8IHdhaXRMU04tPm51bVdhaXRlZFByb2NzOyBpKyspCisJeworCQlpZiAod2FpdExTTi0+cHJv Y0luZm9zW2ldLnByb2NudW0gPT0gTXlQcm9jTnVtYmVyKQorCQkJZm91bmQgPSB0cnVlOworCisJ CWlmIChmb3VuZCAmJiBpIDwgd2FpdExTTi0+bnVtV2FpdGVkUHJvY3MgLSAxKQorCQl7CisJCQl3 YWl0TFNOLT5wcm9jSW5mb3NbaV0gPSB3YWl0TFNOLT5wcm9jSW5mb3NbaSArIDFdOworCQl9CisJ fQorCisJaWYgKCFmb3VuZCkKKwl7CisJCVNwaW5Mb2NrUmVsZWFzZSgmd2FpdExTTi0+bXV0ZXgp OworCQlyZXR1cm47CisJfQorCXdhaXRMU04tPm51bVdhaXRlZFByb2NzLS07CisKKwlpZiAod2Fp dExTTi0+bnVtV2FpdGVkUHJvY3MgIT0gMCkKKwkJcGdfYXRvbWljX3dyaXRlX3U2NCgmd2FpdExT Ti0+bWluTFNOLCB3YWl0TFNOLT5wcm9jSW5mb3NbaV0ud2FpdExTTik7CisJZWxzZQorCQlwZ19h dG9taWNfd3JpdGVfdTY0KCZ3YWl0TFNOLT5taW5MU04sIFBHX1VJTlQ2NF9NQVgpOworCisJU3Bp bkxvY2tSZWxlYXNlKCZ3YWl0TFNOLT5tdXRleCk7Cit9CisKKy8qCisgKiBTZXQgYWxsIGxhdGNo ZXMgaW4gc2hhcmVkIG1lbW9yeSB0byBzaWduYWwgdGhhdCBuZXcgTFNOIGhhcyBiZWVuIHJlcGxh eWVkCisqLwordm9pZAorV2FpdExTTlNldExhdGNoZXMoWExvZ1JlY1B0ciBjdXJMU04pCit7CisJ dWludDMyCQlpLAorCQkJCW51bVdha2VVcFByb2NzOworCisJU3BpbkxvY2tBY3F1aXJlKCZ3YWl0 TFNOLT5tdXRleCk7CisKKwkvKgorCSAqIFNldCBsYXRjaGVzIGZvciBwcm9jZXNzLCB3aG9zZSB3 YWl0ZWQgTFNOcyBhcmUgYWxyZWFkeSByZXBsYXllZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwg d2FpdExTTi0+bnVtV2FpdGVkUHJvY3M7IGkrKykKKwl7CisJCVBHUFJPQwkgICAqYmFja2VuZDsK KworCQlpZiAod2FpdExTTi0+cHJvY0luZm9zW2ldLndhaXRMU04gPiBjdXJMU04pCisJCQlicmVh azsKKworCQliYWNrZW5kID0gR2V0UEdQcm9jQnlOdW1iZXIod2FpdExTTi0+cHJvY0luZm9zW2ld LnByb2NudW0pOworCQlTZXRMYXRjaCgmYmFja2VuZC0+cHJvY0xhdGNoKTsKKwl9CisKKwkvKgor CSAqIEltbWVkaWF0ZWx5IHJlbW92ZSB0aG9zZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2htZW0gYXJy YXkuICBPdGhlcndpc2UsCisJICogc2htZW0gYXJyYXkgaXRlbXMgd2lsbCBiZSBoZXJlIHRpbGwg Y29ycmVzcG9uZGluZyBwcm9jZXNzZXMgd2FrZSB1cCBhbmQKKwkgKiBkZWxldGUgdGhlbXNlbHZl cy4KKwkgKi8KKwludW1XYWtlVXBQcm9jcyA9IGk7CisJZm9yIChpID0gMDsgaSA8IHdhaXRMU04t Pm51bVdhaXRlZFByb2NzIC0gbnVtV2FrZVVwUHJvY3M7IGkrKykKKwkJd2FpdExTTi0+cHJvY0lu Zm9zW2ldID0gd2FpdExTTi0+cHJvY0luZm9zW2kgKyBudW1XYWtlVXBQcm9jc107CisJd2FpdExT Ti0+bnVtV2FpdGVkUHJvY3MgLT0gbnVtV2FrZVVwUHJvY3M7CisKKwlpZiAod2FpdExTTi0+bnVt V2FpdGVkUHJvY3MgIT0gMCkKKwkJcGdfYXRvbWljX3dyaXRlX3U2NCgmd2FpdExTTi0+bWluTFNO LCB3YWl0TFNOLT5wcm9jSW5mb3NbaV0ud2FpdExTTik7CisJZWxzZQorCQlwZ19hdG9taWNfd3Jp dGVfdTY0KCZ3YWl0TFNOLT5taW5MU04sIFBHX1VJTlQ2NF9NQVgpOworCisJU3BpbkxvY2tSZWxl YXNlKCZ3YWl0TFNOLT5tdXRleCk7Cit9CisKKy8qCisgKiBEZWxldGUgb3VyIGl0ZW0gZnJvbSBz aG1lbSBhcnJheSBpZiBhbnkuCisgKi8KK3ZvaWQKK1dhaXRMU05DbGVhbnVwKHZvaWQpCit7CisJ aWYgKGhhdmVTaG1lbUl0ZW0pCisJCWRlbGV0ZUxTTldhaXRlcigpOworfQorCisvKgorICogV2Fp dCB1c2luZyBNeUxhdGNoIHRvIHdhaXQgdGlsbCB0aGUgZ2l2ZW4gTFNOIGlzIHJlcGxheWVkLCB0 aGUgcG9zdG1hc3RlciBkaWVzIG9yCisgKiB0aW1lb3V0IGhhcHBlbnMuCisgKi8KK3ZvaWQKK1dh aXRGb3JMU04oWExvZ1JlY1B0ciBsc24sIGZsb2F0OCBzZWMpCit7CisJWExvZ1JlY1B0cgljdXJM U047CisJaW50CQkJbGF0Y2hfZXZlbnRzOworCVRpbWVzdGFtcFR6IGVuZHRpbWU7CisKKwkvKiBT aG91bGRuJ3QgYmUgY2FsbGVkIHdoZW4gc2htZW0gaXNuJ3QgaW5pdGlhbGl6ZWQgKi8KKwlBc3Nl cnQod2FpdExTTik7CisKKwkvKiBTaG91bGQgYmUgb25seSBjYWxsZWQgYnkgYSBiYWNrZW5kICov CisJQXNzZXJ0KE15QmFja2VuZFR5cGUgPT0gQl9CQUNLRU5EKTsKKworCWlmICghUmVjb3ZlcnlJ blByb2dyZXNzKCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpF Q1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygicmVjb3ZlcnkgaXMg bm90IGluIHByb2dyZXNzIiksCisJCQkJIGVycmhpbnQoIldhaXRpbmcgZm9yIExTTiBjYW4gb25s eSBiZSBleGVjdXRlZCBkdXJpbmcgcmVjb3ZlcnkuIikpKTsKKworCWVuZHRpbWUgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCkgKyAoaW50NjQpKHNlYyAqIDEwMDAgKiAxMDAwKTsKKworCWxhdGNoX2V2 ZW50cyA9IFdMX1RJTUVPVVQgfCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRIOwor CWFkZExTTldhaXRlcihsc24pOworCWhhdmVTaG1lbUl0ZW0gPSB0cnVlOworCisJZm9yICg7OykK Kwl7CisJCWludAkJCXJjOworCQlsb25nCQlkZWxheV9tczsKKworCQkvKiBDaGVjayBpZiB0aGUg d2FpdGVkIExTTiBoYXMgYmVlbiByZXBsYXllZCAqLworCQljdXJMU04gPSBHZXRYTG9nUmVwbGF5 UmVjUHRyKE5VTEwpOworCQlpZiAobHNuIDw9IGN1ckxTTikKKwkJCWJyZWFrOworCisJCWlmIChz ZWMgPj0gMSkKKwkJCWRlbGF5X21zID0gKGVuZHRpbWUgLSBHZXRDdXJyZW50VGltZXN0YW1wKCkp IC8gMTAwMDsKKwkJZWxzZQorCQkJLyogSWYgbm8gdGltZW91dCBpcyBzZXQgdGhlbiB3YWtlIHVw IGluIDEgbWludXRlIGZvciBpbnRlcnJ1cHRzICovCisJCQlkZWxheV9tcyA9IDYwMDAwOworCisJ CWlmIChkZWxheV9tcyA8PSAwKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgcmVjZWl2ZWQg YW4gaW50ZXJydXB0aW9uIGZyb20gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMsIHRoZW4gZGVsZXRlCisJ CSAqIHRoZSBjdXJyZW50IGV2ZW50IGZyb20gYXJyYXkuCisJCSAqLworCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOworCisJCS8qIElmIHBvc3RtYXN0ZXIgZGllcywgZmluaXNoIGltbWVkaWF0ZWx5 ICovCisJCWlmICghUG9zdG1hc3RlcklzQWxpdmUoKSkKKwkJCWJyZWFrOworCisJCXJjID0gV2Fp dExhdGNoKE15TGF0Y2gsIGxhdGNoX2V2ZW50cywgZGVsYXlfbXMsCisJCQkJCSAgIFdBSVRfRVZF TlRfV0FJVF9GT1JfU1RBTkRCWV9DT05GSVJNQVRJT04pOworCisJCWlmIChyYyAmIFdMX0xBVENI X1NFVCkKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJfQorCisJaWYgKGxzbiA+IGN1ckxTTikK Kwl7CisJCWRlbGV0ZUxTTldhaXRlcigpOworCQloYXZlU2htZW1JdGVtID0gZmFsc2U7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9RVUVSWV9DQU5DRUxFRCksCisJCQkJ IGVycm1zZygiY2FuY2VsaW5nIHdhaXRpbmcgZm9yIExTTiBkdWUgdG8gdGltZW91dCIpKSk7CisJ fQorCWVsc2UKKwl7CisJCWhhdmVTaG1lbUl0ZW0gPSBmYWxzZTsKKwl9Cit9CisKK0RhdHVtCitw Z193YWl0X2xzbihQR19GVU5DVElPTl9BUkdTKQoreworCVhMb2dSZWNQdHIJdHJnX2xzbiA9IFBH X0dFVEFSR19MU04oMCk7CisJZmxvYXQ4CQlkZWxheSA9IFBHX0dFVEFSR19GTE9BVDgoMSk7CisJ Q2FsbENvbnRleHQgKmNvbnRleHQgPSAoQ2FsbENvbnRleHQgKikgZmNpbmZvLT5jb250ZXh0Owor CisJaWYgKGNvbnRleHQtPmF0b21pYykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJw Z193YWl0X2xzbigpIG11c3QgYmUgb25seSBjYWxsZWQgaW4gbm9uLWF0b21pYyBjb250ZXh0Iikp KTsKKworCWlmIChBY3RpdmVTbmFwc2hvdFNldCgpKQorCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwor CUFzc2VydCghQWN0aXZlU25hcHNob3RTZXQoKSk7CisKKwkodm9pZCkgV2FpdEZvckxTTih0cmdf bHNuLCBkZWxheSk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j CmluZGV4IDUyMWVkNTQxOGMuLjVhZWQ5MGM5MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAg LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3ByZWZldGNoZXIuaCIKICNpbmNs dWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIK KyNpbmNsdWRlICJjb21tYW5kcy93YWl0bHNuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCkBA IC0xNTIsNiArMTUzLDcgQEAgQ2FsY3VsYXRlU2htZW1TaXplKGludCAqbnVtX3NlbWFwaG9yZXMp CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFdhaXRFdmVudEV4dGVuc2lvblNobWVtU2l6ZSgpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgSW5qZWN0aW9uUG9pbnRTaG1lbVNpemUoKSk7CiAJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFNsb3RTeW5jU2htZW1TaXplKCkpOworCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBXYWl0TFNOU2htZW1TaXplKCkpOwogI2lmZGVmIEVYRUNfQkFDS0VORAogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBTaG1lbUJhY2tlbmRBcnJheVNpemUoKSk7CiAjZW5kaWYKQEAgLTI0 NCw2ICsyNDYsMTEgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCS8q IEluaXRpYWxpemUgc3Vic3lzdGVtcyAqLwogCUNyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKCk7 CiAKKwkvKgorCSAqIEluaXQgYXJyYXkgb2YgTGF0Y2hlcyBpbiBzaGFyZWQgbWVtb3J5IGZvciB3 YWl0IGxzbgorCSAqLworCVdhaXRMU05TaG1lbUluaXQoKTsKKwogI2lmZGVmIEVYRUNfQkFDS0VO RAogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IDE2MmIxZjkxOWQuLjRiODMwZGMz YzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg ImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3hsb2d1dGlscy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXRsc24uaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0 bWFzdGVyL2F1dG92YWN1dW0uaCIKQEAgLTg2Miw2ICs4NjMsMTEgQEAgUHJvY0tpbGwoaW50IGNv ZGUsIERhdHVtIGFyZykKIAkgKi8KIAlMV0xvY2tSZWxlYXNlQWxsKCk7CiAKKwkvKgorCSAqIENs ZWFudXAgd2FpdGluZyBmb3IgTFNOIGlmIGFueS4KKwkgKi8KKwlXYWl0TFNOQ2xlYW51cCgpOwor CiAJLyogQ2FuY2VsIGFueSBwZW5kaW5nIGNvbmRpdGlvbiB2YXJpYWJsZSBzbGVlcCwgdG9vICov CiAJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAppbmRleCAxNzdkODFhODkxLi4wZDljMDEyZTUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK QEAgLTEyMTM1LDYgKzEyMTM1LDExIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJn dHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2Jy aW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzE2Mzg3JywgZGVz Y3IgPT4gJ3dhaXQgZm9yIExTTiB1bnRpbCB0aW1lb3V0JywKKyAgcHJvbmFtZSA9PiAncGdfd2Fp dF9sc24nLCBwcm9raW5kID0+ICdwJywgcHJvcmV0dHlwZSA9PiAndm9pZCcsCisgIHByb2FyZ3R5 cGVzID0+ICdwZ19sc24gZmxvYXQ4JywgcHJvYXJnbmFtZXMgPT4gJ3t0cmdfbHNuLGRlbGF5fScs CisgIHByb3NyYyA9PiAncGdfd2FpdF9sc24nIH0sCisKIHsgb2lkID0+ICc2MjkxJywgZGVzY3Ig PT4gJ2FyYml0cmFyeSB2YWx1ZSBmcm9tIGFtb25nIGlucHV0IHZhbHVlcycsCiAgIHByb25hbWUg PT4gJ2FueV92YWx1ZScsIHByb2tpbmQgPT4gJ2EnLCBwcm9pc3N0cmljdCA9PiAnZicsCiAgIHBy b3JldHR5cGUgPT4gJ2FueWVsZW1lbnQnLCBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCcsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0bHNuLmggYi9zcmMvaW5jbHVkZS9j b21tYW5kcy93YWl0bHNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u NTNhYjliN2I2YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXRs c24uaApAQCAtMCwwICsxLDQzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWl0bHNu LmgKKyAqCSAgRGVjbGFyYXRpb25zIGZvciBMU04gd2FpdGluZyByb3V0aW5lcy4KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdGxzbi5oCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgV0FJVF9MU05fSAorI2RlZmluZSBXQUlUX0xTTl9ICisKKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgorI2luY2x1ZGUgInN0 b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInRjb3AvZGVzdC5oIgorCisvKiBTaGFyZWQgbWVtb3J5 IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgV2FpdExTTlByb2NJbmZvCit7CisJaW50CQkJ cHJvY251bTsKKwlYTG9nUmVjUHRyCXdhaXRMU047Cit9CQkJV2FpdExTTlByb2NJbmZvOworCit0 eXBlZGVmIHN0cnVjdCBXYWl0TFNOU3RhdGUKK3sKKwlwZ19hdG9taWNfdWludDY0IG1pbkxTTjsK KwlzbG9ja190CQltdXRleDsKKwlpbnQJCQludW1XYWl0ZWRQcm9jczsKKwlXYWl0TFNOUHJvY0lu Zm8gcHJvY0luZm9zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9CQkJV2FpdExTTlN0YXRlOwor CitleHRlcm4gUEdETExJTVBPUlQgc3RydWN0IFdhaXRMU05TdGF0ZSAqd2FpdExTTjsKKworZXh0 ZXJuIHZvaWQgV2FpdEZvckxTTihYTG9nUmVjUHRyIGxzbiwgZmxvYXQ4IHNlYyk7CitleHRlcm4g U2l6ZSBXYWl0TFNOU2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgV2FpdExTTlNobWVtSW5p dCh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRMU05TZXRMYXRjaGVzKFhMb2dSZWNQdHIgY3VyTFNO KTsKK2V4dGVybiB2b2lkIFdhaXRMU05DbGVhbnVwKHZvaWQpOworCisjZW5kaWYJCQkJCQkJLyog V0FJVF9MU05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAppbmRleCBiMWViNzdiMWVjLi5iYzQ3Yzkz OTAyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZApAQCAtNTEsNiArNTEsNyBAQCB0ZXN0cyArPSB7CiAg ICAgICAndC8wNDBfc3RhbmRieV9mYWlsb3Zlcl9zbG90c19zeW5jLnBsJywKICAgICAgICd0LzA0 MV9jaGVja3BvaW50X2F0X3Byb21vdGUucGwnLAogICAgICAgJ3QvMDQyX2xvd19sZXZlbF9iYWNr dXAucGwnLAorICAgICAgJ3QvMDQzX3dhaXRfbHNuLnBsJywKICAgICBdLAogICB9LAogfQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDNfd2FpdF9sc24ucGwgYi9zcmMvdGVzdC9y ZWNvdmVyeS90LzA0M193YWl0X2xzbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4xODc1NzAyYzkzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3Zlcnkv dC8wNDNfd2FpdF9sc24ucGwKQEAgLTAsMCArMSw3NyBAQAorIyBDaGVja3Mgd2FpdGluZyBmb3Ig bHNuIG9uIHN0YW5kYnkgcGdfd2FpdF9sc24oKQordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK KwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZQorbXkg JG5vZGVfcHJpbWFyeSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScp OworJG5vZGVfcHJpbWFyeS0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfcHJp bWFyeS0+c3RhcnQ7CisKKyMgQW5kIHNvbWUgY29udGVudCBhbmQgdGFrZSBhIGJhY2t1cAorJG5v ZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB3YWl0X3Rl c3QgQVMgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDEwKSBBUyBhIik7CitteSAkYmFja3VwX25h bWUgPSAnbXlfYmFja3VwJzsKKyRub2RlX3ByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOwor CisjIENyZWF0ZSBhIHN0cmVhbWluZyBzdGFuZGJ5IHdpdGggYSAxIHNlY29uZCBkZWxheSBmcm9t IHRoZSBiYWNrdXAKK215ICRub2RlX3N0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N0YW5kYnknKTsKK215ICRkZWxheSA9IDM7Ciskbm9kZV9zdGFuZGJ5LT5pbml0X2Zy b21fYmFja3VwKCRub2RlX3ByaW1hcnksICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+ IDEpOworJG5vZGVfc3RhbmRieS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFx WworCXJlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9ICcke2RlbGF5fXMnCitdKTsKKyRub2RlX3N0 YW5kYnktPnN0YXJ0OworCisKKyMgTWFrZSBzdXJlIHRoYXQgcGdfd2FpdF9sc24oKSB3b3Jrczog YWRkIG5ldyBjb250ZW50IHRvIHByaW1hcnkgYW5kIG1lbW9yaXplCisjIHByaW1hcnkncyBuZXcg TFNOLCB0aGVuIHdhaXQgZm9yIHByaW1hcnkncyBMU04gb24gc3RhbmRieS4gUHJvdmUgdGhhdCBw Z193YWl0X2xzbigpIGlzCisjIGFibGUgdG8gc2V0dXAgYW4gaW5maW5pdGUgd2FpdGluZyBsb29w IGFuZCBleGl0IGl0IGlmIGdpdmVuIG5vIHdhaXQgdGltZW91dC4KKyRub2RlX3ByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5l cmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0KKyAgJG5vZGVfcHJpbWFyeS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKK215ICRv dXRwdXQgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisJQ0FM TCBwZ193YWl0X2xzbignJHtsc24xfScsIDEwMDAwMDApOworCVNFTEVDVCBwZ19sc25fY21wKHBn X2xhc3Rfd2FsX3JlcGxheV9sc24oKSwgJyR7bHNuMX0nOjpwZ19sc24pOworXSk7CisKKyMgR2V0 IHRoZSBjdXJyZW50IExTTiBvbiBzdGFuZGJ5IGFuZCBtYWtlIHN1cmUgaXQncyB0aGUgc2FtZSBh cyBwcmltYXJ5J3MgTFNOCitvaygkb3V0cHV0IGVxIDAsICJzdGFuZGJ5IHJlYWNoZWQgdGhlIHNh bWUgTFNOIGFzIHByaW1hcnkgcGdfd2FpdF9sc24oKSIpOworCitteSAkbHNuMiA9CisgICRub2Rl X3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xz bigpICsgMSIpOworbXkgJHN0ZGVycjsKKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ0FMTCBwZ193YWl0X2xzbignJHtsc24xfScsIDEpOyIpOworJG5vZGVfc3RhbmRieS0+ cHNxbCgKKwkncG9zdGdyZXMnLAorCSJDQUxMIHBnX3dhaXRfbHNuKCcke2xzbjJ9JywgMSk7IiwK KwlzdGRlcnIgPT4gXCRzdGRlcnIpOworb2soICRzdGRlcnIgPX4gL2NhbmNlbGluZyB3YWl0aW5n IGZvciBMU04gZHVlIHRvIHRpbWVvdXQvLAorCSJnZXQgdGltZW91dCBvbiB3YWl0aW5nIGZvciB1 bnJlYWNoYWJsZSBMU04iKTsKKworIyBNYWtlIHN1cmUgdGhhdCBwZ193YWl0X2xzbigpIHdvcmtz OiBhZGQgbmV3IGNvbnRlbnQgdG8gcHJpbWFyeSBhbmQgbWVtb3JpemUKKyMgcHJpbWFyeSdzIG5l dyBMU04sIHRoZW4gd2FpdCBmb3IgcHJpbWFyeSdzIExTTiBvbiBzdGFuZGJ5LiBQcm92ZSB0aGF0 IHBnX3dhaXRfbHNuKCkgaXMKKyMgYWJsZSB0byBzZXR1cCBhbiBpbmZpbml0ZSB3YWl0aW5nIGxv b3AgYW5kIGV4aXQgaXQgaWYgY3VycmVudCBMU04gcmVwbGF5ZWQuCiskbm9kZV9wcmltYXJ5LT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2Vu ZXJhdGVfc2VyaWVzKDIxLCAzMCkpIik7CitteSAkbHNuMyA9CisgICRub2RlX3ByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIik7Ciskb3V0 cHV0ID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworCUNBTEwg cGdfd2FpdF9sc24oJyR7bHNuM30nKTsKKwlTRUxFQ1QgcGdfbHNuX2NtcChwZ19sYXN0X3dhbF9y ZXBsYXlfbHNuKCksICcke2xzbjN9Jzo6cGdfbHNuKTsKK10pOworCisjIEdldCB0aGUgY3VycmVu dCBMU04gb24gc3RhbmRieSBhbmQgbWFrZSBzdXJlIGl0J3MgdGhlIHNhbWUgYXMgcHJpbWFyeSdz IExTTgorb2soJG91dHB1dCBlcSAwLCAic3RhbmRieSByZWFjaGVkIHRoZSBzYW1lIExTTiBhcyBw cmltYXJ5Iik7CisKKyRub2RlX3N0YW5kYnktPnN0b3A7Ciskbm9kZV9wcmltYXJ5LT5zdG9wOwor ZG9uZV90ZXN0aW5nKCk7Cg== --=_79d2b0ff3ac3b14e26c240cd5b2efc7f--