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.96) (envelope-from ) id 1w5TjU-003I3L-3B for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 19:17:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5TjR-00G6H1-1v for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 19:17:34 +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.96) (envelope-from ) id 1w5TjR-00G6Gb-0c for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 19:17:33 +0000 Received: from mail-ot1-x334.google.com ([2607:f8b0:4864:20::334]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5TjO-000000017fK-32gZ for pgsql-hackers@postgresql.org; Wed, 25 Mar 2026 19:17:33 +0000 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7d7e9b97a73so791178a34.0 for ; Wed, 25 Mar 2026 12:17:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774466249; cv=none; d=google.com; s=arc-20240605; b=MEvTHNcZ1MdKeLWo5rEN5Cc9TpF0FK+2Id3rwCIfi4W8xfJMdwr8fI3K3BlwQ5GJFS LssYdX15rwbCnM17bgaWc6Lr2j0oRpGr2Yc/UkVhn3os6qKO7RuTswIBv+idbNRqg08/ 9NOs3v0fI6eGESsqfboq5kxtu9cuN5SyZWGvAvliFaicr3GLm752Hw7sVVYHXX+HR1Me rh0uvthrGtxI+WbqsogVXTBRJ1gOM+G8oaMwd5g0itsYqTVp9XKB+RQN5TlvxWY9fqeM rH5OucW0SCuuqbWbyVR+snsauZ/wNVYuuJGqG9WdW0F9LBDojZSTroT/I8KJHV8GPIzv lm7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=7Q6l9eTIKffqjlasgrFiVd4aKS4YayGzW4/w5XEQvEc=; fh=W+jg8xZnio16CWE6j9rNDmJSx6gmRZ9qbec3t5TZlAo=; b=THiC2rPwMamVj+uIUDRIs6PjzpAFVv/PtVgyBnY048/UFWc7iBO2ko5byMLNn6DzQ8 pc0S20q2CIoa8uG541fVsFE0hl5dj33Abu3gNQpPSxy/SNW+tpfncTMB6biTTE0QePIL 69nBKj9ol+5eLst8SlPN/PGp1lRHeH1ROb1w2S5bfIDdGgru0KcvEaonfpkpBV0QYVJL J7YTnMQt9iK5uilh8wohF/22v6MHVqGYvLrK008LurHijoIf5maBdM0nSCblZj23tdON M6PLSlUhAxi52Nxfy7a8BY6QYhkmv1E49qBwbH6yiT9YskfWtNFDVu+ErLP9WFMvonz7 1dqg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774466249; x=1775071049; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=7Q6l9eTIKffqjlasgrFiVd4aKS4YayGzW4/w5XEQvEc=; b=cb/R1vat/cCXiE5PUg/wbVX94ycDis50yMIad0q/j9ONIKzux1/EtPaOPwFhedajlZ USRVRqJGD9AA9dMSWLBLdF84Y3AZqY+gA3nRK3M3xsn1kIzvZi2XBy4q7OD/1dX3bOeG rEcm74Hp4ORP7WE6+UXT7LZJ4+VedDRBREDRWoKXtjLwWdyy1lzFoIb8lE+jIASBMAg8 MWhzmZPrbOvHCNf17nCdEx0qSpVm1of5vntkiqd+OD3o32lTOUKjb9ZzAQAUtxKAh5KE gktVMNAJMqzx9NCcPsxnpG/TOHTqdT27Gz/E5YXjKm1YKICk2vpYMvTwWxn4v0lYd918 Dhzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774466249; x=1775071049; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=7Q6l9eTIKffqjlasgrFiVd4aKS4YayGzW4/w5XEQvEc=; b=LozTFkdqxm/tJc1yfMuAEE0UIZv7k49ryBKCghd8ZcdNaR/5UJjKOFBRl/V56S6i9t AyZOl48Jr4qjM4Rj3GtnoWI5w9eH9ohRltwmTm/+YL29/9ZXyR7F6S4jowxXxFMQkxHS jW59LQwrne456040AGQo4zOrs8s+H+YsURBg0frgEF3xjxuraKOcjS+/y9j580iSlH+/ p8lwjp7MtBvHPehjcW2IGRWDBt92l+So4sbQr8yJzQQPXoshqYTVDAOwveGszuaHGBJz W1ytPx5Arbh0BizFCGChL6KiGAaLFb2LUx2yDGEKPTYZri9NrnB0jIMrltI/AjaSOu06 BJ3Q== X-Forwarded-Encrypted: i=1; AJvYcCX3ipBrocPpVKHQfWOX5sUTbirrzG66U0oN+XnkW/UO56UMiVp8kT/qHUku1A0SLCDMDXo+BxPilri3jqhm@postgresql.org X-Gm-Message-State: AOJu0Yz1zf0RsRf4XdExZ4XFuZHIWdeQ5hK9PhBeAF7keWkXMT6bL5qM +xRH/szmE1b5pVMwDHrQCCIwheOo+weKp6IEJwqijUO+PA/3KEhbw6+rx7/21ln05UVQOtUnoqq Qza0vXWpx4hBlucGY6vMTk/XLiIOnwa8= X-Gm-Gg: ATEYQzydm4mYgcyejOiWO+Hk3PxIkLsTsOWw7PzJU3q4glB45w7ps9h4jx8/uDYwRtA b12aWMIF4KNk0vrC3ND4zOsmwOvPVSDPeFtH54uwSB/AJZagDUs+tfwdFlhiE7olZEjJauBLxSv +wfKRMmJ0cEZVv/Pm1o7xBUO9zgZdxVyXZmWBr65BQGU0/uzVEVcMlxSEqzgq6VQuNhiBhKAHox VdvDbeeETb+HHgA6XmT/aqG2ims6klMcaAGWh4MQYAA7i0JJYxSZ5HI64swSrclMlOwOxfQdGV3 VZhyOg== X-Received: by 2002:a4a:d671:0:b0:67d:7055:3800 with SMTP id 006d021491bc7-67df5d8bf30mr3741859eaf.23.1774466248984; Wed, 25 Mar 2026 12:17:28 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Wed, 25 Mar 2026 12:17:17 -0700 X-Gm-Features: AQROBzBulK_S4v1lfWmdxweDxGWWvt30ufsRLe2yD3AZCLGfTFuaO9ayCT833L8 Message-ID: Subject: Re: Introduce XID age based replication slot invalidation To: Masahiko Sawada Cc: SATYANARAYANA NARLAPURAM , "Hayato Kuroda (Fujitsu)" , John H , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000007016ad064dde1e01" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007016ad064dde1e01 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Tue, Mar 24, 2026 at 11:50=E2=80=AFPM Masahiko Sawada wrote: > > > Please find the v3 patch for further review. > > Thank you for updating the patch. I think the patch is reasonably > simple and can avoid unnecessary overheads well due to XID-based > checks. Here are some comments: Thank you for reviewing the patch. > vacuum_get_cutoff() is also called by VACUUM FULL, CLUSTER, and > REPACK. I'm not sure that users would expect the slot invalidation > also in these commands. I think it's better to leave > vacuum_get_cutoff() a pure cutoff computation function and we can try > to invalidate slots in heap_vacuum_rel(). It requires additional > ReadNextTransactionId() but we can live with it, or we can make > vacuum_get_cutoffs() return the nextXID as well (stored in *cutoffs). +1. I chose to perform the slot invalidation in heap_vacuum_rel by getting the next txn ID and calling vacuum_get_cutoffs again when a slot gets invalidated. IMHO, this is simple than adding a flag and do the invalidation selectively in vacuum_get_cutoffs. > if (TransactionIdPrecedes(oldestXmin, cutoffXID)) > + { > + invalidated =3D InvalidateObsoleteReplicationSlots(RS_INVAL_XID_A= GE, > + 0, > + InvalidOid, > + InvalidTransacti= onId, > + nextXID); > + } > > I think it's better to check the procArray->replication_slot_xmin and > procArray->replication_slot_catalog_xmin before iterating over each > slot. Otherwise, we would end up checking every slot even when a long > running transaction holds the oldestxmin back. +1. Changed. > + if (!TransactionIdIsNormal(cutoffXID)) > + cutoffXID =3D FirstNormalTransactionId; > > These codes have the same comment but are doing a slightly different > thing. I guess the latter is missing '-'? Fixed the typo. I fixed a test error being reported in CI. Please find the attached v4 patch for further review. I've also attached the 0002 patch that adds a test case to demo a production-like scenario by pushing the database to XID wraparound limits and checking if the XID-age based invalidation with the GUC setting at the default vacuum_failsafe_age of 1.6B works correctly, and whether autovacuum can successfully remove this replication slot blocker to proceed with freezing and bring the database back to normal. I don't intend to get this committed unless others think otherwise, but I wanted to have this as a reference. -- Bharath Rupireddy Amazon Web Services: https://aws.amazon.com --0000000000007016ad064dde1e01 Content-Type: application/x-patch; name="v4-0002-Add-more-tests-for-XID-age-slot-invalidation.patch" Content-Disposition: attachment; filename="v4-0002-Add-more-tests-for-XID-age-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn6elehz1 RnJvbSA3NWE5YzQ1NjJhMDE2NmYwZDYxMmEwMGE1MDU5N2E0MDE3MmFkZWM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMTg6NDQ6MTcgKzAw MDAKU3ViamVjdDogW1BBVENIIHY0IDIvMl0gQWRkIG1vcmUgdGVzdHMgZm9yIFhJRCBhZ2Ugc2xv dCBpbnZhbGlkYXRpb24KCkNvbnN1bWUgWElEcyB1cCB0byB3cmFwYXJvdW5kIFdBUk5JTkcgbGlt aXRzIHdpdGgKbWF4X3Nsb3RfeGlkX2FnZSBtYXRjaGluZyB2YWN1dW1fZmFpbHNhZmVfYWdlICgx LjZCKS4gVmVyaWZ5IHRoYXQKYXV0b3ZhY3V1bSBpbnZhbGlkYXRlcyB0aGUgaW5hY3RpdmUgcmVw bGljYXRpb24gc2xvdAooWElELWFnZS1iYXNlZCBpbnZhbGlkYXRpb24pLCB1bmJsb2NrcyBkYXRm cm96ZW54aWQgYWR2YW5jZW1lbnQsCmFuZCBwcmV2ZW50cyB3cmFwYXJvdW5kIHdpdGhvdXQgYW55 IGludGVydmVudGlvbi4KLS0tCiBzcmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZSAgICAgICAgICAg ICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwg fCAxNjIgKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNjQgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L01h a2VmaWxlIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvTWFrZWZpbGUKaW5kZXggZDQxYWFhZjhhZTEuLjVj M2QyYzg5OTQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZQorKysgYi9z cmMvdGVzdC9yZWNvdmVyeS9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOCBAQAogRVhUUkFfSU5TVEFM TD1jb250cmliL3BnX3ByZXdhcm0gXAogCWNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzIFwKIAlj b250cmliL3Rlc3RfZGVjb2RpbmcgXAotCXNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50 cworCXNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cyBcCisJc3JjL3Rlc3QvbW9kdWxl cy94aWRfd3JhcGFyb3VuZAogCiBzdWJkaXIgPSBzcmMvdGVzdC9yZWNvdmVyeQogdG9wX2J1aWxk ZGlyID0gLi4vLi4vLi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxz bG90X2xpbWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwK aW5kZXggYzg3NjU3NDUxYmQuLjIyMGJjZmFlM2VlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNv dmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAx OV9yZXBsc2xvdF9saW1pdC5wbApAQCAtNzAzLDQgKzcwMywxNjYgQEAgJHByaW1hcnk1LT5zdG9w OwogIyBHVUMuCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKyMgPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKyMgVGVzdGNhc2U6IFhJRC1hZ2UtYmFzZWQgc2xvdCBpbnZhbGlkYXRpb24gaW4gYSBwcm9k dWN0aW9uLWxpa2Ugc2NlbmFyaW8uCisjIFN0YW5kYnkgc2V0cyBzbG90IHhtaW4gdmlhIEhTIGZl ZWRiYWNrLCBkaXNjb25uZWN0cywgWElEcyBjb25zdW1lZC4KKyMgQXV0b3ZhY3V1bSBhdXRvbWF0 aWNhbGx5IGludmFsaWRhdGVzIHRoZSBzbG90IG9uY2UgaXRzIHhtaW4gYWdlIGV4Y2VlZHMKKyMg bWF4X3Nsb3RfeGlkX2FnZSwgYWR2YW5jZXMgZGF0ZnJvemVueGlkIGluIGFsbCBkYXRhYmFzZXMs IGFuZCBrZWVwcyB0aGUKKyMgc3lzdGVtIGhlYWx0aHkg4oCUIG5vIG1hbnVhbCBWQUNVVU0sIHZh Y3V1bWRiLCBvciBkb3dudGltZSBuZWVkZWQuCisKKyMgQ2hlY2sgaWYgYXV0b3ZhY3V1bSBoYXMg aW52YWxpZGF0ZWQgdGhlIHNsb3QgZHVlIHRvIHhpZF9hZ2VkLgorIyBSZXR1cm5zIDEgaWYgaW52 YWxpZGF0ZWQsIDAgb3RoZXJ3aXNlLiAgRWFybHkgZXhpdCB3aGVuIG1heF9zbG90X3hpZF9hZ2Ug PSAwLgorc3ViIGNoZWNrX3Nsb3RfaW52YWxpZGF0ZWQKK3sKKwlteSAoJG5vZGUsICRzbG90X25h bWUsICRtYXhfYWdlLCAkY29uc3VtZWRfeGlkcykgPSBAXzsKKworCXJldHVybiAwIGlmICRtYXhf YWdlID09IDA7CisKKwlteSAkcmVhc29uID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGludmFsaWRhdGlvbl9yZWFzb24gRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyBX SEVSRSBzbG90X25hbWUgPSAnJHNsb3RfbmFtZSciKTsKKwlpZiAoJHJlYXNvbiBlcSAneGlkX2Fn ZWQnKQorCXsKKwkJZGlhZyAiU2xvdCBpbnZhbGlkYXRlZCBieSBhdXRvdmFjdXVtIGFmdGVyIGNv bnN1bWluZyAkY29uc3VtZWRfeGlkcyBYSURzIjsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAw OworfQorCisjIFZlcmlmeSBzZXJ2ZXIgbG9nIHNob3dzIHNsb3QgaW52YWxpZGF0aW9uIGJ5IGF1 dG92YWN1dW0gd29ya2VyIHdpdGgKKyMgY29ycmVjdCB4bWluLCBhZ2UsIGFuZCBuZXh0IHR4aWQg dmFsdWVzLgorc3ViIHZlcmlmeV9zbG90X3hpZF9hZ2VkX2ludmFsaWRhdGlvbgoreworCW15ICgk bm9kZSwgJHNsb3RfbmFtZSwgJHNsb3RfeG1pbiwgJG1heF9hZ2UsICRjb25zdW1lZF94aWRzKSA9 IEBfOworCisJbXkgJGxvZyA9IHNsdXJwX2ZpbGUoJG5vZGUtPmxvZ2ZpbGUpOworCisJIyBWZXJp ZnkgdGhlIGludmFsaWRhdGlvbiB3YXMgcGVyZm9ybWVkIGJ5IGFuIGF1dG92YWN1dW0gd29ya2Vy LgorCWxpa2UoJGxvZywKKwkJcXIvYXV0b3ZhY3V1bSB3b3JrZXJcW1xkK1xdIExPRzpccytpbnZh bGlkYXRpbmcgb2Jzb2xldGUgcmVwbGljYXRpb24gc2xvdCAiJHNsb3RfbmFtZSIvLAorCQkic2Vy dmVyIGxvZzogJHNsb3RfbmFtZSBpbnZhbGlkYXRlZCBieSBhdXRvdmFjdXVtIHdvcmtlciIpOwor CisJIyBWZXJpZnkgREVUQUlMIHNob3dzIHRoZSBjb3JyZWN0IHhtaW4gYW5kIG1heF9zbG90X3hp ZF9hZ2UuCisJbGlrZSgkbG9nLAorCQlxci9hdXRvdmFjdXVtIHdvcmtlclxbXGQrXF0gREVUQUlM OlxzK1RoZSBzbG90J3MgeG1pbiAkc2xvdF94bWluIGF0IG5leHQgdHJhbnNhY3Rpb24gSUQgKFxk KykgZXhjZWVkcyB0aGUgYWdlICRtYXhfYWdlIHNwZWNpZmllZCBieSAibWF4X3Nsb3RfeGlkX2Fn ZSIvLAorCQkic2VydmVyIGxvZzogREVUQUlMIHNob3dzIHhtaW4gJHNsb3RfeG1pbiBhbmQgYWdl ICRtYXhfYWdlIik7CisKKwkjIEV4dHJhY3QgbmV4dCB0eGlkIGZyb20gdGhlIGxvZyBhbmQgcmVw b3J0IGZvciBkaWFnbm9zdGljcy4KKwkkbG9nID1+CisJICAvVGhlIHNsb3QncyB4bWluICRzbG90 X3htaW4gYXQgbmV4dCB0cmFuc2FjdGlvbiBJRCAoXGQrKSBleGNlZWRzLzsKKwlteSAkbG9nX25l eHRfdHhpZCA9ICQxIC8vICdOL0EnOworCWRpYWcgIm5leHRfdHhpZCBmcm9tIHNlcnZlciBsb2c9 JGxvZ19uZXh0X3R4aWQsIG1heF9zbG90X3hpZF9hZ2U9JG1heF9hZ2UsIGNvbnN1bWVkPSRjb25z dW1lZF94aWRzIFhJRHMiOworfQorCisjIFZlcmlmeSBzbG90IHdhcyBpbnZhbGlkYXRlZCBhbmQg d2FpdCBmb3IgYXV0b3ZhY3V1bSB0byBhZHZhbmNlIGRhdGZyb3plbnhpZAorIyBpbiBhbGwgZGF0 YWJhc2VzLiAgRWFybHkgZXhpdCB3aGVuIG1heF9zbG90X3hpZF9hZ2UgPSAwLgorc3ViIHZlcmlm eV9pbnZhbGlkYXRpb25fYW5kX3JlY292ZXJ5Cit7CisJbXkgKCRub2RlLCAkc2xvdF9uYW1lLCAk c2xvdF94bWluLCAkbWF4X2FnZSwgJGNvbnN1bWVkX3hpZHMsICRzbG90X2dvbmUpID0gQF87CisK KwlyZXR1cm4gaWYgJG1heF9hZ2UgPT0gMDsKKworCW9rKCRzbG90X2dvbmUsICdhdXRvdmFjdXVt IGludmFsaWRhdGVkIHNsb3QgZHVlIHRvIHhpZF9hZ2VkJyk7CisKKwl2ZXJpZnlfc2xvdF94aWRf YWdlZF9pbnZhbGlkYXRpb24oJG5vZGUsICRzbG90X25hbWUsCisJCSRzbG90X3htaW4sICRtYXhf YWdlLCAkY29uc3VtZWRfeGlkcyk7CisKKwkjIFdhaXQgZm9yIGF1dG92YWN1dW0gdG8gYWR2YW5j ZSBkYXRmcm96ZW54aWQgaW4gYWxsIGRhdGFiYXNlcyBwYXN0IHRoZQorCSMgd3JhcGFyb3VuZCBk YW5nZXIgem9uZSDigJQgbm8gbWFudWFsIGludGVydmVudGlvbiByZXF1aXJlZC4KKwkkbm9kZS0+ cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgcXFbCisJCVNFTEVDVCBOT1QgRVhJU1RT ICgKKwkJCVNFTEVDVCAxIEZST00gcGdfZGF0YWJhc2UKKwkJCVdIRVJFIGFnZShkYXRmcm96ZW54 aWQpID4gMjAwMDAwMDAwMAorCQkpOworCV0pIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgZm9y IGF1dG92YWN1dW0gdG8gYWR2YW5jZSBkYXRmcm96ZW54aWQgaW4gYWxsIGRhdGFiYXNlcyI7Cit9 CisKK215ICRwcmltYXJ5NiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFy eTYnKTsKKyRwcmltYXJ5Ni0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CisK KyRtYXhfc2xvdF94aWRfYWdlID0gMTYwMDAwMDAwMDsgICAgIyBtYXRjaGVzIHZhY3V1bV9mYWls c2FmZV9hZ2UgZGVmYXVsdAorJHByaW1hcnk2LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5j b25mJywgcXF7CittYXhfc2xvdF94aWRfYWdlID0gJG1heF9zbG90X3hpZF9hZ2UKK2F1dG92YWN1 dW1fbmFwdGltZSA9IDFzCit9KTsKKworJHByaW1hcnk2LT5zdGFydDsKKyRwcmltYXJ5Ni0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgRVhURU5TSU9OIHhpZF93cmFwYXJvdW5kIik7CisK KyRiYWNrdXBfbmFtZSA9ICdiYWNrdXA2JzsKKyRwcmltYXJ5Ni0+YmFja3VwKCRiYWNrdXBfbmFt ZSk7CisKK215ICRzdGFuZGJ5NiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Rh bmRieTYnKTsKKyRzdGFuZGJ5Ni0+aW5pdF9mcm9tX2JhY2t1cCgkcHJpbWFyeTYsICRiYWNrdXBf bmFtZSwgaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRzdGFuZGJ5Ni0+YXBwZW5kX2NvbmYoCisJJ3Bv c3RncmVzcWwuY29uZicsIHF7CitwcmltYXJ5X3Nsb3RfbmFtZSA9ICdzYjZfc2xvdCcKK2hvdF9z dGFuZGJ5X2ZlZWRiYWNrID0gb24KK3dhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgPSAxCit9 KTsKKworJHByaW1hcnk2LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2NyZWF0 ZV9waHlzaWNhbF9yZXBsaWNhdGlvbl9zbG90KCdzYjZfc2xvdCcsIHRydWUpIik7CisKKyRzdGFu ZGJ5Ni0+c3RhcnQ7CisKKyRwcmltYXJ5Ni0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFU RSBUQUJMRSB0YWJfaW50NiBBUyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMTApIEFTIGEiKTsK KyRwcmltYXJ5Ni0+d2FpdF9mb3JfY2F0Y2h1cCgkc3RhbmRieTYpOworCiskcHJpbWFyeTYtPnBv bGxfcXVlcnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUIHhtaW4gSVMgTk9UIE5V TEwgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cworCQlXSEVSRSBzbG90X25hbWUgPSAnc2I2X3Ns b3QnOworXSkgb3IgZGllICJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc2I2X3Nsb3QgeG1pbiBmcm9t IEhTIGZlZWRiYWNrIjsKKworJHJlc3VsdCA9ICRwcmltYXJ5Ni0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIlNFTEVDVCB4bWluIElTIE5PVCBOVUxMIEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMg V0hFUkUgc2xvdF9uYW1lID0gJ3NiNl9zbG90JyIpOworaXMoJHJlc3VsdCwgJ3QnLCAnc2xvdCBo YXMgeG1pbiBmcm9tIGhvdF9zdGFuZGJ5X2ZlZWRiYWNrJyk7CisKKyMgQ2FwdHVyZSB0aGUgc2xv dCdzIHhtaW4gZm9yIGxhdGVyIGxvZyB2ZXJpZmljYXRpb24uCitteSAkc2xvdF94bWluID0gJHBy aW1hcnk2LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHhtaW4gRlJPTSBwZ19yZXBs aWNhdGlvbl9zbG90cyBXSEVSRSBzbG90X25hbWUgPSAnc2I2X3Nsb3QnIik7CisKKyMgU3RvcCBz dGFuZGJ5OyBzbG90IHhtaW4gcGVyc2lzdHMgYW5kIGhvbGRzIGJhY2sgZGF0ZnJvemVueGlkLgor JHN0YW5kYnk2LT5zdG9wOworCisjIENvbnN1bWUgWElEcyBpbiA1ME0gY2h1bmtzLiAgT25jZSB3 ZSBleGNlZWQgbWF4X3Nsb3RfeGlkX2FnZSwgYXV0b3ZhY3V1bQorIyAobmFwdGltZT0xcykgc2hv dWxkIGF1dG9tYXRpY2FsbHkgaW52YWxpZGF0ZSB0aGUgc2xvdC4gIEtlZXAgY29uc3VtaW5nCisj IHVudGlsIHdlIHNlZSB0aGF0IGhhcHBlbiDigJQgbm8gbWFudWFsIFZBQ1VVTSBvciBkb3dudGlt ZSBuZWVkZWQuCitteSAkbG9nc3RhcnQ2ID0gLXMgJHByaW1hcnk2LT5sb2dmaWxlOworbXkgJGNo dW5rID0gNTBfMDAwXzAwMDsKK215ICRtYXhfeGlkcyA9IDJfMjAwXzAwMF8wMDA7CitteSAkY29u c3VtZWQgPSAwOworbXkgJHNsb3RfZ29uZSA9IDA7CisKK3doaWxlICgkY29uc3VtZWQgPCAkbWF4 X3hpZHMpCit7CisJJHByaW1hcnk2LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb25z dW1lX3hpZHMoJGNodW5rKSIpOworCSRjb25zdW1lZCArPSAkY2h1bms7CisJbXkgJHJlbWFpbmlu ZyA9ICRtYXhfeGlkcyAtICRjb25zdW1lZDsKKwlkaWFnICJDb25zdW1lZCAkY29uc3VtZWQgLyAk bWF4X3hpZHMgWElEcyAoJHJlbWFpbmluZyByZW1haW5pbmcpIjsKKworCWlmICghJHNsb3RfZ29u ZSAmJiBjaGVja19zbG90X2ludmFsaWRhdGVkKCRwcmltYXJ5NiwgJ3NiNl9zbG90JywKKwkJCSRt YXhfc2xvdF94aWRfYWdlLCAkY29uc3VtZWQpKQorCXsKKwkJJHNsb3RfZ29uZSA9IDE7CisJfQor fQorCit2ZXJpZnlfaW52YWxpZGF0aW9uX2FuZF9yZWNvdmVyeSgkcHJpbWFyeTYsICdzYjZfc2xv dCcsCisJJHNsb3RfeG1pbiwgJG1heF9zbG90X3hpZF9hZ2UsICRjb25zdW1lZCwgJHNsb3RfZ29u ZSk7CisKKyMgQ29uc3VtZSAxQiBtb3JlIFhJRHMg4oCUIGNvbWJpbmluZyB3aXRoIHRoZSAyLjJC IGNvbnN1bWVkIGFib3ZlLCB0aGUgdG90YWwKKyMgb2YgMy4yQiBleGNlZWRzIHRoZSAyXjMxICh+ Mi4xQikgdXNhYmxlIFhJRCBzcGFjZSAoeGlkU3RvcExpbWl0KSwgaS5lLgorIyBtb3JlIHRoYW4g b25lIGZ1bGwgd3JhcGFyb3VuZCBjeWNsZSwgcHJvdmluZyB0aGUgc3lzdGVtIGlzIGhlYWx0aHku CiskcHJpbWFyeTYtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvbnN1bWVfeGlkcygx MDAwMDAwMDAwKSIpOworb2soMSwgJ3dyaXRlcyBzdWNjZWVkIGFmdGVyIGF1dG92YWN1dW0gaW52 YWxpZGF0ZWQgdGhlIHNsb3QnKTsKKworJHByaW1hcnk2LT5zdG9wOworCisjIFRlc3RjYXNlIGVu ZDogWElELWFnZS1iYXNlZCBzbG90IGludmFsaWRhdGlvbiBpbiBhIHByb2R1Y3Rpb24tbGlrZSBz Y2VuYXJpby4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogZG9uZV90ZXN0aW5nKCk7Ci0tIAoy LjQ3LjMKCg== --0000000000007016ad064dde1e01 Content-Type: application/x-patch; name="v4-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Disposition: attachment; filename="v4-0001-Add-XID-age-based-replication-slot-invalidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn6elehs0 RnJvbSA4NGZhMzgxNjE4MWE1ODE3MjI4YjhkNDY5MGM0ODRlYjhmMTY1MGJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMTg6NDE6NTggKzAw MDAKU3ViamVjdDogW1BBVENIIHY0IDEvMl0gQWRkIFhJRCBhZ2UgYmFzZWQgcmVwbGljYXRpb24g c2xvdCBpbnZhbGlkYXRpb24KCkludHJvZHVjZSBtYXhfc2xvdF94aWRfYWdlLCBhIEdVQyB0aGF0 IGludmFsaWRhdGVzIHJlcGxpY2F0aW9uCnNsb3RzIHdob3NlIHhtaW4gb3IgY2F0YWxvZ194bWlu IGV4Y2VlZHMgdGhlIHNwZWNpZmllZCBhZ2UuCkRpc2FibGVkIGJ5IGRlZmF1bHQuCgpJZGxlIG9y IGZvcmdvdHRlbiByZXBsaWNhdGlvbiBzbG90cyBjYW4gaG9sZCBiYWNrIHZhY3V1bSwgbGVhZGlu Zwp0byBibG9hdCBhbmQgZXZlbnR1YWxseSBYSUQgd3JhcGFyb3VuZC4gSW4gdGhlIHdvcnN0IGNh c2UgdGhpcwpyZXF1aXJlcyBkcm9wcGluZyB0aGUgc2xvdCBhbmQgc2luZ2xlLXVzZXIgbW9kZSB2 YWN1dW1pbmcuIFRoaXMKc2V0dGluZyBhdm9pZHMgdGhhdCBieSBwcm9hY3RpdmVseSBpbnZhbGlk YXRpbmcgc2xvdHMgdGhhdCBoYXZlCmZhbGxlbiB0b28gZmFyIGJlaGluZC4KCkludmFsaWRhdGlv biBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbmNlIHBlciByZWxhdGlvbiBkdXJpbmcgdmFjdXVtCihi b3RoIHZhY3V1bSBjb21tYW5kIGFuZCBhdXRvdmFjdXVtKS4KLS0tCiBkb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMjkgKysrCiBkb2Mvc3JjL3NnbWwvc3lz dGVtLXZpZXdzLnNnbWwgICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvdmFjdXVtbGF6eS5jICAgICAgICAgIHwgIDE4ICsrCiBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Nsb3QuYyAgICAgICAgICAgICAgICB8IDE2NiArKysrKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA4ICsKIHNyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMiArCiBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9zbG90LmggICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy90ZXN0L3Jl Y292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsICAgICB8IDE2MyArKysrKysrKysrKysrKysr KwogMTAgZmlsZXMgY2hhbmdlZCwgNDAyIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAppbmRleCA4Y2RkODI2ZmJkMy4uZTA0YjEzODQ3MDMgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTQ3 NjQsNiArNDc2NCwzNSBAQCByZXN0b3JlX2NvbW1hbmQgPSAnY29weSAiQzpcXHNlcnZlclxcYXJj aGl2ZWRpclxcJWYiICIlcCInICAjIFdpbmRvd3MKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwv dmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtc2xvdC14aWQt YWdlIiB4cmVmbGFiZWw9Im1heF9zbG90X3hpZF9hZ2UiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ bWF4X3Nsb3RfeGlkX2FnZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICAg PGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5tYXhfc2xvdF94aWRfYWdlPC92 YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0 ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAg ICAgICBJbnZhbGlkYXRlIHJlcGxpY2F0aW9uIHNsb3RzIHdob3NlIDxsaXRlcmFsPnhtaW48L2xp dGVyYWw+ICh0aGUgb2xkZXN0CisgICAgICAgIHRyYW5zYWN0aW9uIHRoYXQgdGhpcyBzbG90IG5l ZWRzIHRoZSBkYXRhYmFzZSB0byByZXRhaW4pIG9yCisgICAgICAgIDxsaXRlcmFsPmNhdGFsb2df eG1pbjwvbGl0ZXJhbD4gKHRoZSBvbGRlc3QgdHJhbnNhY3Rpb24gYWZmZWN0aW5nIHRoZQorICAg ICAgICBzeXN0ZW0gY2F0YWxvZ3MgdGhhdCB0aGlzIHNsb3QgbmVlZHMgdGhlIGRhdGFiYXNlIHRv IHJldGFpbikgaGFzIHJlYWNoZWQKKyAgICAgICAgdGhlIGFnZSBzcGVjaWZpZWQgYnkgdGhpcyBz ZXR0aW5nLiBUaGlzIGludmFsaWRhdGlvbiBjaGVjayBoYXBwZW5zCisgICAgICAgIGR1cmluZyB2 YWN1dW0gKGJvdGggPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjb21tYW5kIGFuZCBhdXRvdmFj dXVtKS4KKyAgICAgICAgQSB2YWx1ZSBvZiB6ZXJvICh3aGljaCBpcyBkZWZhdWx0KSBkaXNhYmxl cyB0aGlzIGZlYXR1cmUuIFVzZXJzIGNhbiBzZXQKKyAgICAgICAgdGhpcyB2YWx1ZSBhbnl3aGVy ZSBmcm9tIHplcm8gdG8gdHdvIGJpbGxpb24uIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlCisg ICAgICAgIHNldCBpbiB0aGUgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZp bGUgb3Igb24gdGhlIHNlcnZlcgorICAgICAgICBjb21tYW5kIGxpbmUuCisgICAgICAgPC9wYXJh PgorCisgICAgICAgPHBhcmE+CisgICAgICAgIElkbGUgb3IgZm9yZ290dGVuIHJlcGxpY2F0aW9u IHNsb3RzIGNhbiBob2xkIGJhY2sgdmFjdXVtLCBsZWFkaW5nIHRvCisgICAgICAgIGJsb2F0IGFu ZCBldmVudHVhbGx5IHRyYW5zYWN0aW9uIElEIHdyYXBhcm91bmQuIFRoaXMgc2V0dGluZyBhdm9p ZHMKKyAgICAgICAgdGhhdCBieSBpbnZhbGlkYXRpbmcgc2xvdHMgdGhhdCBoYXZlIGZhbGxlbiB0 b28gZmFyIGJlaGluZC4KKyAgICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InJvdXRpbmUtdmFjdXVt aW5nIi8+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXdh bC1zZW5kZXItdGltZW91dCIgeHJlZmxhYmVsPSJ3YWxfc2VuZGVyX3RpbWVvdXQiPgogICAgICAg PHRlcm0+PHZhcm5hbWU+d2FsX3NlbmRlcl90aW1lb3V0PC92YXJuYW1lPiAoPHR5cGU+aW50ZWdl cjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5 c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDll ZTFhMmJmYzZhLi4xYTUwN2I0MzBmOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12 aWV3cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApAQCAtMzEwMiw2 ICszMTAyLDE0IEBAIFNFTEVDVCAqIEZST00gcGdfbG9ja3MgcGwgTEVGVCBKT0lOIHBnX3ByZXBh cmVkX3hhY3RzIHBweAogICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1pZGxlLXJlcGxpY2F0 aW9uLXNsb3QtdGltZW91dCIvPiBkdXJhdGlvbi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAg PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgPGxpdGVyYWw+eGlkX2FnZWQ8L2xpdGVyYWw+IG1lYW5zIHRoYXQgdGhlIHNsb3QncworICAg ICAgICAgIDxsaXRlcmFsPnhtaW48L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmNhdGFsb2dfeG1pbjwv bGl0ZXJhbD4KKyAgICAgICAgICBoYXMgcmVhY2hlZCB0aGUgYWdlIHNwZWNpZmllZCBieQorICAg ICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1tYXgtc2xvdC14aWQtYWdlIi8+IHBhcmFtZXRlci4K KyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L2l0ZW1pemVk bGlzdD4KICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL3ZhY3V1bWxhenkuYwppbmRleCBmNjk4YzJkODk5Yi4uMDdjODk3ZDViMjcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogI2luY2x1ZGUg InBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnRhYmlsaXR5L2luc3RyX3RpbWUuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFj ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKQEAgLTc5OSw2ICs4MDAsMjMgQEAgaGVh cF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkg KiB0byBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGRlYWQgdHVwbGVzIGl0IGNhbiBwcnVuZSBhd2F5 LikKIAkgKi8KIAl2YWNyZWwtPmFnZ3Jlc3NpdmUgPSB2YWN1dW1fZ2V0X2N1dG9mZnMocmVsLCBw YXJhbXMsICZ2YWNyZWwtPmN1dG9mZnMpOworCisJLyoKKwkgKiBUcnkgdG8gaW52YWxpZGF0ZSBY SUQtYWdlZCByZXBsaWNhdGlvbiBzbG90cyB0aGF0IG1heSBpbnRlcmZlcmUgd2l0aAorCSAqIHZh Y3V1bSdzIGFiaWxpdHkgdG8gZnJlZXplIGFuZCByZW1vdmUgZGVhZCB0dXBsZXMuIFNpbmNlIE9s ZGVzdFhtaW4KKwkgKiBhbHJlYWR5IGNvdmVycyB0aGUgc2xvdCB4bWluL2NhdGFsb2dfeG1pbiB2 YWx1ZXMsIHBhc3MgaXQgYXMgYQorCSAqIHByZWxpbWluYXJ5IGNoZWNrIHRvIGF2b2lkIGFkZGl0 aW9uYWwgaXRlcmF0aW9uIG92ZXIgYWxsIHRoZSBzbG90cy4KKwkgKgorCSAqIElmIGF0IGxlYXN0 IG9uZSBzbG90IHdhcyBpbnZhbGlkYXRlZCwgcmVjb21wdXRlIGN1dG9mZnMgc28gdGhhdCB0aGlz CisJICogdmFjdXVtIGJlbmVmaXRzIGZyb20gdGhlIGFkdmFuY2VkIGhvcml6b24gaW1tZWRpYXRl bHkuCisJICoKKwkgKiBYWFg6IE5leHQgWElEIGNvdWxkIGJlIHJldHVybmVkIGFzIG91dHB1dCBm cm9tIHZhY3V1bV9nZXRfY3V0b2ZmcygpIGJ1dAorCSAqIGZvciBub3cgd2UgbGl2ZSB3aXRoIGFu IGFkZGl0aW9uYWwgUmVhZE5leHRUcmFuc2FjdGlvbklkKCkgY2FsbC4KKwkgKi8KKwlpZiAoSW52 YWxpZGF0ZVhJREFnZWRSZXBsaWNhdGlvblNsb3RzKHZhY3JlbC0+Y3V0b2Zmcy5PbGRlc3RYbWlu LAorCQkJCQkJCQkJCSAgUmVhZE5leHRUcmFuc2FjdGlvbklkKCkpKQorCQl2YWNyZWwtPmFnZ3Jl c3NpdmUgPSB2YWN1dW1fZ2V0X2N1dG9mZnMocmVsLCBwYXJhbXMsICZ2YWNyZWwtPmN1dG9mZnMp OworCiAJdmFjcmVsLT5yZWxfcGFnZXMgPSBvcmlnX3JlbF9wYWdlcyA9IFJlbGF0aW9uR2V0TnVt YmVyT2ZCbG9ja3MocmVsKTsKIAl2YWNyZWwtPnZpc3Rlc3QgPSBHbG9iYWxWaXNUZXN0Rm9yKHJl bCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBmNWM5YTM0Mzc0ZC4uZDVkNDM2 MjBhYWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTc0NDMsNyArNzQ0Myw3IEBA IENyZWF0ZUNoZWNrUG9pbnQoaW50IGZsYWdzKQogCUtlZXBMb2dTZWcocmVjcHRyLCAmX2xvZ1Nl Z05vKTsKIAlpZiAoSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSU19JTlZBTF9X QUxfUkVNT1ZFRCB8IFJTX0lOVkFMX0lETEVfVElNRU9VVCwKIAkJCQkJCQkJCQkgICBfbG9nU2Vn Tm8sIEludmFsaWRPaWQsCi0JCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpKQorCQkJ CQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCkpCiAJ ewogCQkvKgogCQkgKiBTb21lIHNsb3RzIGhhdmUgYmVlbiBpbnZhbGlkYXRlZDsgcmVjYWxjdWxh dGUgdGhlIG9sZC1zZWdtZW50CkBAIC03OTAwLDcgKzc5MDAsNyBAQCBDcmVhdGVSZXN0YXJ0UG9p bnQoaW50IGZsYWdzKQogCiAJaWYgKEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMo UlNfSU5WQUxfV0FMX1JFTU9WRUQgfCBSU19JTlZBTF9JRExFX1RJTUVPVVQsCiAJCQkJCQkJCQkJ ICAgX2xvZ1NlZ05vLCBJbnZhbGlkT2lkLAotCQkJCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlv bklkKSkKKwkJCQkJCQkJCQkgICBJbnZhbGlkVHJhbnNhY3Rpb25JZCwgSW52YWxpZFRyYW5zYWN0 aW9uSWQpKQogCXsKIAkJLyoKIAkJICogU29tZSBzbG90cyBoYXZlIGJlZW4gaW52YWxpZGF0ZWQ7 IHJlY2FsY3VsYXRlIHRoZSBvbGQtc2VnbWVudApAQCAtODc2NCw2ICs4NzY0LDcgQEAgeGxvZ19y ZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkJCSAqLwogCQkJCUludmFsaWRhdGVPYnNv bGV0ZVJlcGxpY2F0aW9uU2xvdHMoUlNfSU5WQUxfV0FMX0xFVkVMLAogCQkJCQkJCQkJCQkJICAg MCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkLAogCQkJ CQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOwogCQkJfQogCQkJZWxzZSBpZiAoc3lu Y19yZXBsaWNhdGlvbl9zbG90cykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Nsb3QuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCBhOTA5MmZjMjM4 Mi4uOGNhNWQ4NmZlMGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3Qu YworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKQEAgLTExNyw2ICsxMTcsNyBA QCBzdGF0aWMgY29uc3QgU2xvdEludmFsaWRhdGlvbkNhdXNlTWFwIFNsb3RJbnZhbGlkYXRpb25D YXVzZXNbXSA9IHsKIAl7UlNfSU5WQUxfSE9SSVpPTiwgInJvd3NfcmVtb3ZlZCJ9LAogCXtSU19J TlZBTF9XQUxfTEVWRUwsICJ3YWxfbGV2ZWxfaW5zdWZmaWNpZW50In0sCiAJe1JTX0lOVkFMX0lE TEVfVElNRU9VVCwgImlkbGVfdGltZW91dCJ9LAorCXtSU19JTlZBTF9YSURfQUdFLCAieGlkX2Fn ZWQifSwKIH07CiAKIC8qCkBAIC0xNTgsNiArMTU5LDEyIEBAIGludAkJCW1heF9yZXBsaWNhdGlv bl9zbG90cyA9IDEwOyAvKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVwbGljYXRpb24KICAqLwog aW50CQkJaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXRfc2VjcyA9IDA7CiAKKy8qCisgKiBJ bnZhbGlkYXRlIHJlcGxpY2F0aW9uIHNsb3RzIHRoYXQgaGF2ZSB4bWluIG9yIGNhdGFsb2dfeG1p biBncmVhdGVyCisgKiB0aGFuIHRoZSBzcGVjaWZpZWQgYWdlOyAnMCcgZGlzYWJsZXMgaXQuCisg Ki8KK2ludAkJCW1heF9zbG90X3hpZF9hZ2UgPSAwOworCiAvKgogICogVGhpcyBHVUMgbGlzdHMg c3RyZWFtaW5nIHJlcGxpY2F0aW9uIHN0YW5kYnkgc2VydmVyIHNsb3QgbmFtZXMgdGhhdAogICog bG9naWNhbCBXQUwgc2VuZGVyIHByb2Nlc3NlcyB3aWxsIHdhaXQgZm9yLgpAQCAtMTc2LDYgKzE4 Myw4IEBAIHN0YXRpYyBYTG9nUmVjUHRyIHNzX29sZGVzdF9mbHVzaF9sc24gPSBJbnZhbGlkWExv Z1JlY1B0cjsKIHN0YXRpYyB2b2lkIFJlcGxpY2F0aW9uU2xvdFNobWVtRXhpdChpbnQgY29kZSwg RGF0dW0gYXJnKTsKIHN0YXRpYyBib29sIElzU2xvdEZvckNvbmZsaWN0Q2hlY2soY29uc3QgY2hh ciAqbmFtZSk7CiBzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3REcm9wUHRyKFJlcGxpY2F0aW9u U2xvdCAqc2xvdCk7CitzdGF0aWMgYm9vbCBJc1JlcGxpY2F0aW9uU2xvdFhJREFnZWQoVHJhbnNh Y3Rpb25JZCB4bWluLCBUcmFuc2FjdGlvbklkIGNhdGFsb2dfeG1pbiwKKwkJCQkJCQkJCSBUcmFu c2FjdGlvbklkIG5leHRYSUQpOwogCiAvKiBpbnRlcm5hbCBwZXJzaXN0ZW5jeSBmdW5jdGlvbnMg Ki8KIHN0YXRpYyB2b2lkIFJlc3RvcmVTbG90RnJvbURpc2soY29uc3QgY2hhciAqbmFtZSk7CkBA IC0xNzgwLDcgKzE3ODksMTAgQEAgUmVwb3J0U2xvdEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNs b3RJbnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJCQkJICAgWExvZ1JlY1B0ciByZXN0YXJ0X2xz biwKIAkJCQkJICAgWExvZ1JlY1B0ciBvbGRlc3RMU04sCiAJCQkJCSAgIFRyYW5zYWN0aW9uSWQg c25hcHNob3RDb25mbGljdEhvcml6b24sCi0JCQkJCSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMp CisJCQkJCSAgIGxvbmcgc2xvdF9pZGxlX3NlY29uZHMsCisJCQkJCSAgIFRyYW5zYWN0aW9uSWQg eG1pbiwKKwkJCQkJICAgVHJhbnNhY3Rpb25JZCBjYXRhbG9nX3htaW4sCisJCQkJCSAgIFRyYW5z YWN0aW9uSWQgbmV4dFhJRCkKIHsKIAlTdHJpbmdJbmZvRGF0YSBlcnJfZGV0YWlsOwogCVN0cmlu Z0luZm9EYXRhIGVycl9oaW50OwpAQCAtMTgyNSw2ICsxODM3LDM2IEBAIFJlcG9ydFNsb3RJbnZh bGlkYXRpb24oUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgY2F1c2UsCiAJCQkJCQkJ CSAiaWRsZV9yZXBsaWNhdGlvbl9zbG90X3RpbWVvdXQiKTsKIAkJCQlicmVhazsKIAkJCX0KKwor CQljYXNlIFJTX0lOVkFMX1hJRF9BR0U6CisJCQl7CisJCQkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJ c1ZhbGlkKHhtaW4pIHx8IFRyYW5zYWN0aW9uSWRJc1ZhbGlkKGNhdGFsb2dfeG1pbikpOworCisJ CQkJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtaW4pKQorCQkJCXsKKwkJCQkJLyogdHJhbnNs YXRvcjogJXMgaXMgYSBHVUMgdmFyaWFibGUgbmFtZSAqLworCQkJCQlhcHBlbmRTdHJpbmdJbmZv KCZlcnJfZGV0YWlsLCBfKCJUaGUgc2xvdCdzIHhtaW4gJXUgYXQgbmV4dCB0cmFuc2FjdGlvbiBJ RCAldSBleGNlZWRzIHRoZSBhZ2UgJWQgc3BlY2lmaWVkIGJ5IFwiJXNcIi4iKSwKKwkJCQkJCQkJ CSB4bWluLAorCQkJCQkJCQkJIG5leHRYSUQsCisJCQkJCQkJCQkgbWF4X3Nsb3RfeGlkX2FnZSwK KwkJCQkJCQkJCSAibWF4X3Nsb3RfeGlkX2FnZSIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJewor CQkJCQkvKiB0cmFuc2xhdG9yOiAlcyBpcyBhIEdVQyB2YXJpYWJsZSBuYW1lICovCisJCQkJCWFw cGVuZFN0cmluZ0luZm8oJmVycl9kZXRhaWwsIF8oIlRoZSBzbG90J3MgY2F0YWxvZyB4bWluICV1 IGF0IG5leHQgdHJhbnNhY3Rpb24gSUQgJXUgZXhjZWVkcyB0aGUgYWdlICVkIHNwZWNpZmllZCBi eSBcIiVzXCIuIiksCisJCQkJCQkJCQkgY2F0YWxvZ194bWluLAorCQkJCQkJCQkJIG5leHRYSUQs CisJCQkJCQkJCQkgbWF4X3Nsb3RfeGlkX2FnZSwKKwkJCQkJCQkJCSAibWF4X3Nsb3RfeGlkX2Fn ZSIpOworCQkJCX0KKworCQkJCS8qIHRyYW5zbGF0b3I6ICVzIGlzIGEgR1VDIHZhcmlhYmxlIG5h bWUgKi8KKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJfaGludCwgXygiWW91IG1pZ2h0IG5lZWQg dG8gaW5jcmVhc2UgXCIlc1wiLiIpLAorCQkJCQkJCQkgIm1heF9zbG90X3hpZF9hZ2UiKTsKKwkJ CQlicmVhazsKKwkJCX0KKwogCQljYXNlIFJTX0lOVkFMX05PTkU6CiAJCQlwZ191bnJlYWNoYWJs ZSgpOwogCX0KQEAgLTE4NzQsNiArMTkxNiw3IEBAIHN0YXRpYyBSZXBsaWNhdGlvblNsb3RJbnZh bGlkYXRpb25DYXVzZQogRGV0ZXJtaW5lU2xvdEludmFsaWRhdGlvbkNhdXNlKHVpbnQzMiBwb3Nz aWJsZV9jYXVzZXMsIFJlcGxpY2F0aW9uU2xvdCAqcywKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG9s ZGVzdExTTiwgT2lkIGRib2lkLAogCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25m bGljdEhvcml6b24sCisJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBuZXh0WElELAogCQkJCQkJCSAg IFRpbWVzdGFtcFR6ICppbmFjdGl2ZV9zaW5jZSwgVGltZXN0YW1wVHogbm93KQogewogCUFzc2Vy dChwb3NzaWJsZV9jYXVzZXMgIT0gUlNfSU5WQUxfTk9ORSk7CkBAIC0xOTQ1LDYgKzE5ODgsMTEg QEAgRGV0ZXJtaW5lU2xvdEludmFsaWRhdGlvbkNhdXNlKHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMs IFJlcGxpY2F0aW9uU2xvdCAqcywKIAkJfQogCX0KIAorCS8qIENoZWNrIGlmIHRoZSBzbG90IG5l ZWRzIHRvIGJlIGludmFsaWRhdGVkIGR1ZSB0byBtYXhfc2xvdF94aWRfYWdlIEdVQyAqLworCWlm ICgocG9zc2libGVfY2F1c2VzICYgUlNfSU5WQUxfWElEX0FHRSkgJiYKKwkJSXNSZXBsaWNhdGlv blNsb3RYSURBZ2VkKHMtPmRhdGEueG1pbiwgcy0+ZGF0YS5jYXRhbG9nX3htaW4sIG5leHRYSUQp KQorCQlyZXR1cm4gUlNfSU5WQUxfWElEX0FHRTsKKwogCXJldHVybiBSU19JTlZBTF9OT05FOwog fQogCkBAIC0xOTY3LDYgKzIwMTUsNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3Qo dWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCQkJCQkgICBSZXBsaWNhdGlvblNsb3QgKnMsCiAJ CQkJCQkJICAgWExvZ1JlY1B0ciBvbGRlc3RMU04sCiAJCQkJCQkJICAgT2lkIGRib2lkLCBUcmFu c2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAorCQkJCQkJCSAgIFRyYW5zYWN0aW9u SWQgbmV4dFhJRCwKIAkJCQkJCQkgICBib29sICpyZWxlYXNlZF9sb2NrX291dCkKIHsKIAlpbnQJ CQlsYXN0X3NpZ25hbGVkX3BpZCA9IDA7CkBAIC0yMDE5LDYgKzIwNjgsNyBAQCBJbnZhbGlkYXRl UG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCQkJCQkJCQkJ CQkJCQlzLCBvbGRlc3RMU04sCiAJCQkJCQkJCQkJCQkJCQkJZGJvaWQsCiAJCQkJCQkJCQkJCQkJ CQkJc25hcHNob3RDb25mbGljdEhvcml6b24sCisJCQkJCQkJCQkJCQkJCQkJbmV4dFhJRCwKIAkJ CQkJCQkJCQkJCQkJCQkmaW5hY3RpdmVfc2luY2UsCiAJCQkJCQkJCQkJCQkJCQkJbm93KTsKIApA QCAtMjExMiw3ICsyMTYyLDggQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQz MiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJUmVwb3J0U2xvdEludmFsaWRhdGlvbihpbnZhbGlkYXRp b25fY2F1c2UsIHRydWUsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCQkgICBzbG90bmFtZSwgcmVzdGFy dF9sc24sCiAJCQkJCQkJCQkgICBvbGRlc3RMU04sIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAot CQkJCQkJCQkJICAgc2xvdF9pZGxlX3NlY3MpOworCQkJCQkJCQkJICAgc2xvdF9pZGxlX3NlY3Ms IHMtPmRhdGEueG1pbiwKKwkJCQkJCQkJCSAgIHMtPmRhdGEuY2F0YWxvZ194bWluLCBuZXh0WElE KTsKIAogCQkJCWlmIChNeUJhY2tlbmRUeXBlID09IEJfU1RBUlRVUCkKIAkJCQkJKHZvaWQpIFNp Z25hbFJlY292ZXJ5Q29uZmxpY3QoR2V0UEdQcm9jQnlOdW1iZXIoYWN0aXZlX3Byb2MpLApAQCAt MjE2NSw3ICsyMjE2LDggQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQzMiBw b3NzaWJsZV9jYXVzZXMsCiAJCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9j YXVzZSwgZmFsc2UsIGFjdGl2ZV9waWQsCiAJCQkJCQkJCSAgIHNsb3RuYW1lLCByZXN0YXJ0X2xz biwKIAkJCQkJCQkJICAgb2xkZXN0TFNOLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKLQkJCQkJ CQkJICAgc2xvdF9pZGxlX3NlY3MpOworCQkJCQkJCQkgICBzbG90X2lkbGVfc2Vjcywgcy0+ZGF0 YS54bWluLAorCQkJCQkJCQkgICBzLT5kYXRhLmNhdGFsb2dfeG1pbiwgbmV4dFhJRCk7CiAKIAkJ CS8qIGRvbmUgd2l0aCB0aGlzIHNsb3QgZm9yIG5vdyAqLwogCQkJYnJlYWs7CkBAIC0yMTkyLDYg KzIyNDQsOCBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBvc3NpYmxl X2NhdXNlcywKICAqICAgbG9naWNhbC4KICAqIC0gUlNfSU5WQUxfSURMRV9USU1FT1VUOiBoYXMg YmVlbiBpZGxlIGxvbmdlciB0aGFuIHRoZSBjb25maWd1cmVkCiAgKiAgICJpZGxlX3JlcGxpY2F0 aW9uX3Nsb3RfdGltZW91dCIgZHVyYXRpb24uCisgKiAtIFJTX0lOVkFMX1hJRF9BR0U6IHNsb3Qg eGlkIGFnZSBpcyBvbGRlciB0aGFuIHRoZSBjb25maWd1cmVkCisgKiAgICJtYXhfc2xvdF94aWRf YWdlIiBhZ2UuCiAgKgogICogTm90ZTogVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBpbnZhbGlk YXRlIHRoZSBzbG90IGZvciBtdWx0aXBsZSBwb3NzaWJsZQogICogY2F1c2VzIGluIGEgc2luZ2xl IHBhc3MsIG1pbmltaXppbmcgcmVkdW5kYW50IGl0ZXJhdGlvbnMuIFRoZSAiY2F1c2UiCkBAIC0y MjA1LDcgKzIyNTksNyBAQCBJbnZhbGlkYXRlUG9zc2libHlPYnNvbGV0ZVNsb3QodWludDMyIHBv c3NpYmxlX2NhdXNlcywKIGJvb2wKIEludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMo dWludDMyIHBvc3NpYmxlX2NhdXNlcywKIAkJCQkJCQkJICAgWExvZ1NlZ05vIG9sZGVzdFNlZ25v LCBPaWQgZGJvaWQsCi0JCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhv cml6b24pCisJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgc25hcHNob3RDb25mbGljdEhvcml6b24s IFRyYW5zYWN0aW9uSWQgbmV4dFhJRCkKIHsKIAlYTG9nUmVjUHRyCW9sZGVzdExTTjsKIAlib29s CQlpbnZhbGlkYXRlZCA9IGZhbHNlOwpAQCAtMjI0NCw3ICsyMjk4LDcgQEAgcmVzdGFydDoKIAog CQlpZiAoSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHBvc3NpYmxlX2NhdXNlcywgcywg b2xkZXN0TFNOLAogCQkJCQkJCQkJCSAgIGRib2lkLCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwK LQkJCQkJCQkJCQkgICAmcmVsZWFzZWRfbG9jaykpCisJCQkJCQkJCQkJICAgbmV4dFhJRCwgJnJl bGVhc2VkX2xvY2spKQogCQl7CiAJCQlBc3NlcnQocmVsZWFzZWRfbG9jayk7CiAKQEAgLTMyNzUs MyArMzMyOSwxMDUgQEAgV2FpdEZvclN0YW5kYnlDb25maXJtYXRpb24oWExvZ1JlY1B0ciB3YWl0 X2Zvcl9sc24pCiAKIAlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CiB9CisKKy8qCisg KiBDaGVjayBpZiB0aGUgcGFzc2VkLWluIHhtaW4gb3IgY2F0YWxvZ194bWluIGhhdmUgYWdlZCBi ZXlvbmQgdGhlCisgKiBtYXhfc2xvdF94aWRfYWdlIEdVQyBsaW1pdCByZWxhdGl2ZSB0byBuZXh0 WElELgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBlaXRoZXIgdmFsdWUgZXhjZWVkcyB0aGUgY29u ZmlndXJlZCBhZ2UuCisgKi8KK3N0YXRpYyBib29sCitJc1JlcGxpY2F0aW9uU2xvdFhJREFnZWQo VHJhbnNhY3Rpb25JZCB4bWluLCBUcmFuc2FjdGlvbklkIGNhdGFsb2dfeG1pbiwKKwkJCQkJCSBU cmFuc2FjdGlvbklkIG5leHRYSUQpCit7CisJVHJhbnNhY3Rpb25JZCBjdXRvZmZYSUQ7CisJYm9v bAkJYWdlZCA9IGZhbHNlOworCisJaWYgKG1heF9zbG90X3hpZF9hZ2UgPT0gMCkKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKCFUcmFuc2FjdGlvbklkSXNOb3JtYWwobmV4dFhJRCkpCisJCXJldHVy biBmYWxzZTsKKworCWN1dG9mZlhJRCA9IG5leHRYSUQgLSBtYXhfc2xvdF94aWRfYWdlOworCisJ LyogZW5zdXJlIGl0J3MgYSAibm9ybWFsIiBYSUQsIGVsc2UgVHJhbnNhY3Rpb25JZFByZWNlZGVz IG1pc2JlaGF2ZXMgKi8KKwkvKiB0aGlzIGNhbiBjYXVzZSB0aGUgbGltaXQgdG8gZ28gYmFja3dh cmRzIGJ5IDMsIGJ1dCB0aGF0J3MgT0sgKi8KKwlpZiAoY3V0b2ZmWElEIDwgRmlyc3ROb3JtYWxU cmFuc2FjdGlvbklkKQorCQljdXRvZmZYSUQgLT0gRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkOwor CisJaWYgKFRyYW5zYWN0aW9uSWRJc05vcm1hbCh4bWluKSAmJgorCQlUcmFuc2FjdGlvbklkUHJl Y2VkZXMoeG1pbiwgY3V0b2ZmWElEKSkKKwkJYWdlZCA9IHRydWU7CisKKwlpZiAoVHJhbnNhY3Rp b25JZElzTm9ybWFsKGNhdGFsb2dfeG1pbikgJiYKKwkJVHJhbnNhY3Rpb25JZFByZWNlZGVzKGNh dGFsb2dfeG1pbiwgY3V0b2ZmWElEKSkKKwkJYWdlZCA9IHRydWU7CisKKwlyZXR1cm4gYWdlZDsK K30KKworLyoKKyAqIEludmFsaWRhdGUgcmVwbGljYXRpb24gc2xvdHMgd2hvc2UgWElEIGFnZSBl eGNlZWRzIHRoZSBtYXhfc2xvdF94aWRfYWdlCisgKiBHVUMuCisgKgorICogVGhlIGNhbGxlciBz dXBwbGllcyBvbGRlc3RYbWluLCBlaXRoZXIgY29tcHV0ZWQgdmlhCisgKiBHZXRPbGRlc3ROb25S ZW1vdmFibGVUcmFuc2FjdGlvbklkIGR1cmluZyB2YWN1dW0sIG9yIGNvbXB1dGVkIHZpYSB0aGUK KyAqIG1pbmltdW0gb2Ygc2xvdCB4bWluIHZhbHVlcyBvYnRhaW5lZCBmcm9tIFByb2NBcnJheUdl dFJlcGxpY2F0aW9uU2xvdFhtaW4sCisgKiBhbmQgbmV4dFhJRCwgdGhlIG5leHQgWElEIHRvIGJl IGFzc2lnbmVkIHVzZWQgdG8gY29tcHV0ZSB0aGUgYWdlLgorICoKKyAqIFByZWxpbWluYXJ5IGNo ZWNrcyBiYXNlZCBvbiB0aGUgcGFzc2VkLWluIG9sZGVzdFhtaW4gYW5kIHRoZSBvbGRlc3Qgc2xv dAorICogeG1pbiBhbmQgY2F0YWxvZ194bWluIGFyZSBkb25lIHRvIGF2b2lkIHVubmVjZXNzYXJp bHkgaXRlcmF0aW5nIG92ZXIgYWxsCisgKiB0aGUgc2xvdHMuICBJZiB0aGUgb2xkZXN0WG1pbiBh Z2UgZG9lcyBub3QgZXhjZWVkIHRoZSBHVUMgdGhlbiBubworICogaW5kaXZpZHVhbCBzbG90IGNh biBlaXRoZXIsIHNvIHRoZSBwZXItc2xvdCBzY2FuIGlzIHNraXBwZWQuICBGb3IgZXhhbXBsZSwK KyAqIGlmIG9sZGVzdFhtaW4gaXMgMTAwIGFuZCB0aGUgR1VDIGlzIDUwMCwgZXZlcnkgc2xvdCdz IHhtaW4gbXVzdCBiZSA+PSAxMDAsCisgKiBzbyBub25lIGNhbiBiZSBvbGRlciB0aGFuIHRoZSBH VUMuICBTaW1pbGFybHksIGlmIHRoZSBvbGRlc3Qgc2xvdCB4bWluIGFuZAorICogY2F0YWxvZ194 bWluIGZyb20gUHJvY0FycmF5IGFyZSBub3QgYWdlZCwgdGhlIHBlci1zbG90IHNjYW4gaXMgc2tp cHBlZDsKKyAqIHRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgbG9uZy1ydW5uaW5nIHRyYW5zYWN0aW9u IGhvbGRzIHRoZSBvbGRlc3RYbWluIGJhY2suCisgKgorICogRXZlbiBpZiB0aGUgY2FsbGVyIHBh c3NlcyBhbiBvbGRlc3RYbWluIHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2xvdAorICogeG1p bi9jYXRhbG9nX3htaW4gcmFuZ2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgaW5jb3JyZWN0IGludmFs aWRhdGlvbjogZWFjaAorICogc2xvdCdzIG93biB4bWluIGFuZCBjYXRhbG9nX3htaW4gYXJlIGlu ZGl2aWR1YWxseSB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBHVUMKKyAqIGluc2lkZSBJc1JlcGxpY2F0 aW9uU2xvdFhJREFnZWQoKS4gVGhlIG9ubHkgZG93bnNpZGUgaXMgYW4gYWRkaXRpb25hbAorICog aXRlcmF0aW9uIG92ZXIgYWxsIHRoZSBzbG90cy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYXQg bGVhc3Qgb25lIHNsb3Qgd2FzIGludmFsaWRhdGVkLgorICovCitib29sCitJbnZhbGlkYXRlWElE QWdlZFJlcGxpY2F0aW9uU2xvdHMoVHJhbnNhY3Rpb25JZCBvbGRlc3RYbWluLCBUcmFuc2FjdGlv bklkIG5leHRYSUQpCit7CisJVHJhbnNhY3Rpb25JZCBjdXRvZmZYSUQ7CisJYm9vbAkJaW52YWxp ZGF0ZWQgPSBmYWxzZTsKKworCWlmIChtYXhfc2xvdF94aWRfYWdlID09IDApCisJCXJldHVybiBm YWxzZTsKKworCWlmICghVHJhbnNhY3Rpb25JZElzTm9ybWFsKG9sZGVzdFhtaW4pIHx8ICFUcmFu c2FjdGlvbklkSXNOb3JtYWwobmV4dFhJRCkpCisJCXJldHVybiBmYWxzZTsKKworCWN1dG9mZlhJ RCA9IG5leHRYSUQgLSBtYXhfc2xvdF94aWRfYWdlOworCisJLyogZW5zdXJlIGl0J3MgYSAibm9y bWFsIiBYSUQsIGVsc2UgVHJhbnNhY3Rpb25JZFByZWNlZGVzIG1pc2JlaGF2ZXMgKi8KKwkvKiB0 aGlzIGNhbiBjYXVzZSB0aGUgbGltaXQgdG8gZ28gYmFja3dhcmRzIGJ5IDMsIGJ1dCB0aGF0J3Mg T0sgKi8KKwlpZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1hbChjdXRvZmZYSUQpKQorCQljdXRvZmZY SUQgLT0gRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkOworCisJaWYgKFRyYW5zYWN0aW9uSWRQcmVj ZWRlcyhvbGRlc3RYbWluLCBjdXRvZmZYSUQpKQorCXsKKwkJVHJhbnNhY3Rpb25JZCBzbG90X3ht aW47CisJCVRyYW5zYWN0aW9uSWQgc2xvdF9jYXRhbG9nX3htaW47CisKKwkJUHJvY0FycmF5R2V0 UmVwbGljYXRpb25TbG90WG1pbigmc2xvdF94bWluLCAmc2xvdF9jYXRhbG9nX3htaW4pOworCisJ CWlmIChJc1JlcGxpY2F0aW9uU2xvdFhJREFnZWQoc2xvdF94bWluLCBzbG90X2NhdGFsb2dfeG1p biwgbmV4dFhJRCkpCisJCXsKKwkJCWludmFsaWRhdGVkID0gSW52YWxpZGF0ZU9ic29sZXRlUmVw bGljYXRpb25TbG90cyhSU19JTlZBTF9YSURfQUdFLAorCQkJCQkJCQkJCQkJCQkJIDAsCisJCQkJ CQkJCQkJCQkJCQkgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJCQkJCSBJbnZhbGlkVHJhbnNhY3Rp b25JZCwKKwkJCQkJCQkJCQkJCQkJCSBuZXh0WElEKTsKKwkJfQorCX0KKworCXJldHVybiBpbnZh bGlkYXRlZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnku YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYwppbmRleCBkZTkwOTJmZGY1Yi4u ZDYwZjM5ZWMwOGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnku YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKQEAgLTUwNCw3ICs1MDQs OCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdChUcmFuc2FjdGlvbklkIHNu YXBzaG90Q29uZmxpY3RIb3Jpem9uLAogCSAqLwogCWlmIChJc0xvZ2ljYWxEZWNvZGluZ0VuYWJs ZWQoKSAmJiBpc0NhdGFsb2dSZWwpCiAJCUludmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xv dHMoUlNfSU5WQUxfSE9SSVpPTiwgMCwgbG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkgICBzbmFw c2hvdENvbmZsaWN0SG9yaXpvbik7CisJCQkJCQkJCQkJICAgc25hcHNob3RDb25mbGljdEhvcml6 b24sCisJCQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAwYzk4NTRhZDhmYy4uN2Zh YjAyZjFlZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRl cnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBA IC0yMDQ5LDYgKzIwNDksMTQgQEAKICAgbWF4ID0+ICdNQVhfS0lMT0JZVEVTJywKIH0sCiAKK3sg bmFtZSA9PiAnbWF4X3Nsb3RfeGlkX2FnZScsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BH Q19TSUdIVVAnLCBncm91cCA9PiAnUkVQTElDQVRJT05fU0VORElORycsCisgIHNob3J0X2Rlc2Mg PT4gJ0FnZSBvZiB0aGUgdHJhbnNhY3Rpb24gSUQgYXQgd2hpY2ggYSByZXBsaWNhdGlvbiBzbG90 IGdldHMgaW52YWxpZGF0ZWQuJywKKyAgdmFyaWFibGUgPT4gJ21heF9zbG90X3hpZF9hZ2UnLAor ICBib290X3ZhbCA9PiAnMCcsCisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAnMjAwMDAwMDAwMCcs Cit9LAorCiAjIFdlIHVzZSB0aGUgaG9wZWZ1bGx5LXNhZmVseS1zbWFsbCB2YWx1ZSBvZiAxMDBr QiBhcyB0aGUgY29tcGlsZWQtaW4KICMgZGVmYXVsdCBmb3IgbWF4X3N0YWNrX2RlcHRoLiAgSW5p dGlhbGl6ZUdVQ09wdGlvbnMgd2lsbCBpbmNyZWFzZSBpdAogIyBpZiBwb3NzaWJsZSwgZGVwZW5k aW5nIG9uIHRoZSBhY3R1YWwgcGxhdGZvcm0tc3BlY2lmaWMgc3RhY2sgbGltaXQuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZTRhYmU2YzAw NzcuLjBmNzI4ZDg3YjZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlCkBAIC0zNTEsNiArMzUxLDggQEAKICN3YWxfa2VlcF9zaXplID0gMCAgICAg ICAgICAgICAgIyBpbiBtZWdhYnl0ZXM7IDAgZGlzYWJsZXMKICNtYXhfc2xvdF93YWxfa2VlcF9z aXplID0gLTEgICAgIyBpbiBtZWdhYnl0ZXM7IC0xIGRpc2FibGVzCiAjaWRsZV9yZXBsaWNhdGlv bl9zbG90X3RpbWVvdXQgPSAwICAgICAgIyBpbiBzZWNvbmRzOyAwIGRpc2FibGVzCisjbWF4X3Ns b3RfeGlkX2FnZSA9IDAgICAgICAgICAgICMgbWF4aW11bSBYSUQgYWdlIGJlZm9yZSBhIHJlcGxp Y2F0aW9uIHNsb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXRzIGludmFs aWRhdGVkOyAwIGRpc2FibGVzCiAjd2FsX3NlbmRlcl90aW1lb3V0ID0gNjBzICAgICAgICMgaW4g bWlsbGlzZWNvbmRzOyAwIGRpc2FibGVzCiAjdHJhY2tfY29tbWl0X3RpbWVzdGFtcCA9IG9mZiAg ICMgY29sbGVjdCB0aW1lc3RhbXAgb2YgdHJhbnNhY3Rpb24gY29tbWl0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vc2xvdC5oCmluZGV4IDRiNDcwOWY2ZTJjLi44M2NmODQzODcyNCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Nsb3QuaApAQCAtNjYsMTAgKzY2LDEyIEBAIHR5cGVkZWYgZW51bSBSZXBsaWNhdGlvblNsb3RJ bnZhbGlkYXRpb25DYXVzZQogCVJTX0lOVkFMX1dBTF9MRVZFTCA9ICgxIDw8IDIpLAogCS8qIGlk bGUgc2xvdCB0aW1lb3V0IGhhcyBvY2N1cnJlZCAqLwogCVJTX0lOVkFMX0lETEVfVElNRU9VVCA9 ICgxIDw8IDMpLAorCS8qIHNsb3QncyB4bWluIG9yIGNhdGFsb2dfeG1pbiBoYXMgcmVhY2hlZCBt YXggeGlkIGFnZSAqLworCVJTX0lOVkFMX1hJRF9BR0UgPSAoMSA8PCA0KSwKIH0gUmVwbGljYXRp b25TbG90SW52YWxpZGF0aW9uQ2F1c2U7CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGludmFsaWRh dGlvbiBjYXVzZXMgKi8KLSNkZWZpbmUJUlNfSU5WQUxfTUFYX0NBVVNFUyA0CisjZGVmaW5lCVJT X0lOVkFMX01BWF9DQVVTRVMgNQogCiAvKgogICogV2hlbiB0aGUgc2xvdCBzeW5jaHJvbml6YXRp b24gd29ya2VyIGlzIHJ1bm5pbmcsIG9yIHdoZW4KQEAgLTMyNiw2ICszMjgsNyBAQCBleHRlcm4g UEdETExJTVBPUlQgUmVwbGljYXRpb25TbG90ICpNeVJlcGxpY2F0aW9uU2xvdDsKIGV4dGVybiBQ R0RMTElNUE9SVCBpbnQgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JU IGNoYXIgKnN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBpZGxlX3JlcGxpY2F0aW9uX3Nsb3RfdGltZW91dF9zZWNzOworZXh0ZXJuIFBHRExMSU1QT1JU IGludCBtYXhfc2xvdF94aWRfYWdlOwogCiAvKiBzaG1lbSBpbml0aWFsaXphdGlvbiBmdW5jdGlv bnMgKi8KIGV4dGVybiBTaXplIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUodm9pZCk7CkBAIC0z NjcsNyArMzcwLDggQEAgZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90c0Ryb3BEQlNsb3RzKE9p ZCBkYm9pZCk7CiBleHRlcm4gYm9vbCBJbnZhbGlkYXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3Rz KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJCQkJCQkJCSAgIFhMb2dTZWdObyBvbGRlc3RT ZWdubywKIAkJCQkJCQkJCQkJICAgT2lkIGRib2lkLAotCQkJCQkJCQkJCQkgICBUcmFuc2FjdGlv bklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uKTsKKwkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25J ZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbiwKKwkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCBu ZXh0WElEKTsKIGV4dGVybiBSZXBsaWNhdGlvblNsb3QgKlNlYXJjaE5hbWVkUmVwbGljYXRpb25T bG90KGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbmVlZF9sb2NrKTsKIGV4dGVybiBpbnQJUmVwbGlj YXRpb25TbG90SW5kZXgoUmVwbGljYXRpb25TbG90ICpzbG90KTsKIGV4dGVybiBib29sIFJlcGxp Y2F0aW9uU2xvdE5hbWUoaW50IGluZGV4LCBOYW1lIG5hbWUpOwpAQCAtMzg3LDQgKzM5MSw2IEBA IGV4dGVybiBib29sIFNsb3RFeGlzdHNJblN5bmNTdGFuZGJ5U2xvdHMoY29uc3QgY2hhciAqc2xv dF9uYW1lKTsKIGV4dGVybiBib29sIFN0YW5kYnlTbG90c0hhdmVDYXVnaHR1cChYTG9nUmVjUHRy IHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCk7CiBleHRlcm4gdm9pZCBXYWl0Rm9yU3RhbmRieUNv bmZpcm1hdGlvbihYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbik7CiAKK2V4dGVybiBib29sIEludmFs aWRhdGVYSURBZ2VkUmVwbGljYXRpb25TbG90cyhUcmFuc2FjdGlvbklkIG9sZGVzdFhtaW4sIFRy YW5zYWN0aW9uSWQgbmV4dFhJRCk7CisKICNlbmRpZgkJCQkJCQkvKiBTTE9UX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsIGIvc3JjL3Rl c3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwKaW5kZXggN2IyNTNlNjRkOWMuLmM4 NzY1NzQ1MWJkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9s aW1pdC5wbAorKysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOV9yZXBsc2xvdF9saW1pdC5wbApA QCAtNTQwLDQgKzU0MCwxNjcgQEAgaXMoICRwdWJsaXNoZXI0LT5zYWZlX3BzcWwoCiAkcHVibGlz aGVyNC0+c3RvcDsKICRzdWJzY3JpYmVyNC0+c3RvcDsKIAorIyBBZHZhbmNlIFhJRHMsIHJ1biBW QUNVVU0sIGFuZCB3YWl0IGZvciBhIHNsb3QgdG8gYmUgaW52YWxpZGF0ZWQgZHVlIHRvIFhJRCBh Z2UuCitzdWIgaW52YWxpZGF0ZV9zbG90X2J5X3hpZF9hZ2UKK3sKKwlteSAoJG5vZGUsICR0YWJs ZV9uYW1lLCAkc2xvdF9uYW1lLCAkc2xvdF90eXBlLCAkbnhpZHMpID0gQF87CisKKwkjIERvIHNv bWUgd29yayB0byBhZHZhbmNlIHhpZHMKKwkkbm9kZS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMn LCBxcVsKKwkJZG8gXCRcJAorCQliZWdpbgorCQlmb3IgaSBpbiAxLi4kbnhpZHMgbG9vcAorCQkJ LS0gdXNlIGFuIGV4Y2VwdGlvbiBibG9jayBzbyB0aGF0IGVhY2ggaXRlcmF0aW9uIGVhdHMgYW4g WElECisJCQliZWdpbgorCQkJaW5zZXJ0IGludG8gJHRhYmxlX25hbWUgdmFsdWVzIChpKTsKKwkJ CWV4Y2VwdGlvbgorCQkJd2hlbiBkaXZpc2lvbl9ieV96ZXJvIHRoZW4gbnVsbDsKKwkJCWVuZDsK KwkJZW5kIGxvb3A7CisJCWVuZFwkXCQ7CisJXSk7CisKKwkjIFRyaWdnZXIgc2xvdCBpbnZhbGlk YXRpb24gdmlhIFZBQ1VVTQorCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlZBQ1VVTSIp OworCisJIyBXYWl0IGZvciB0aGUgcmVwbGljYXRpb24gc2xvdCB0byBiZSBpbnZhbGlkYXRlZCBk dWUgdG8gWElEIGFnZS4KKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywg cXFbCisJCVNFTEVDVCBDT1VOVChzbG90X25hbWUpID0gMSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Ns b3RzCisJCQlXSEVSRSBzbG90X25hbWUgPSAnJHNsb3RfbmFtZScgQU5ECisJCQlhY3RpdmUgPSBm YWxzZSBBTkQKKwkJCWludmFsaWRhdGlvbl9yZWFzb24gPSAneGlkX2FnZWQnOworCV0pCisJICBv ciBkaWUKKwkgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc2xvdCAkc2xvdF9uYW1lIHRv IGJlIGludmFsaWRhdGVkIjsKKworCW9rKDEsICIkc2xvdF90eXBlIHJlcGxpY2F0aW9uIHNsb3Qg aW52YWxpZGF0ZWQgZHVlIHRvIFhJRCBhZ2UiKTsKK30KKworIyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorIyBUZXN0Y2FzZSBzdGFydDogSW52YWxpZGF0ZSBzdHJlYW1pbmcgc3RhbmRieSdzIHNsb3Qg ZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VDLgorCisjIEluaXRpYWxpemUgcHJpbWFyeSBu b2RlIGZvciBYSUQgYWdlIHRlc3RzCitteSAkcHJpbWFyeTUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoJ3ByaW1hcnk1Jyk7CiskcHJpbWFyeTUtPmluaXQoYWxsb3dzX3N0cmVhbWlu ZyA9PiAnbG9naWNhbCcpOworCisjIENvbmZpZ3VyZSBwcmltYXJ5IHdpdGggWElEIGFnZSBzZXR0 aW5ncworbXkgJG1heF9zbG90X3hpZF9hZ2UgPSA1MDA7CiskcHJpbWFyeTUtPmFwcGVuZF9jb25m KAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKK21heF9zbG90X3hpZF9hZ2UgPSAkbWF4X3Nsb3Rf eGlkX2FnZQorfSk7CisKKyRwcmltYXJ5NS0+c3RhcnQ7CisKKyMgVGFrZSBhIGJhY2t1cCBmb3Ig Y3JlYXRpbmcgc3RhbmRieQorJGJhY2t1cF9uYW1lID0gJ2JhY2t1cDUnOworJHByaW1hcnk1LT5i YWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBDcmVhdGUgYSBzdGFuZGJ5IGxpbmtpbmcgdG8gdGhl IHByaW1hcnkgdXNpbmcgdGhlIHJlcGxpY2F0aW9uIHNsb3QKK215ICRzdGFuZGJ5NSA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3RhbmRieTUnKTsKKyRzdGFuZGJ5NS0+aW5pdF9m cm9tX2JhY2t1cCgkcHJpbWFyeTUsICRiYWNrdXBfbmFtZSwgaGFzX3N0cmVhbWluZyA9PiAxKTsK KworIyBFbmFibGUgSFMgZmVlZGJhY2suIFRoZSBzbG90IHNob3VsZCBnYWluIGFuIHhtaW4uIFdl IHNldCB0aGUgc3RhdHVzIGludGVydmFsCisjIHNvIHdlJ2xsIHNlZSB0aGUgcmVzdWx0cyBwcm9t cHRseS4KKyRzdGFuZGJ5NS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHF7Citw cmltYXJ5X3Nsb3RfbmFtZSA9ICdzYjVfc2xvdCcKK2hvdF9zdGFuZGJ5X2ZlZWRiYWNrID0gb24K K3dhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgPSAxCit9KTsKKworJHByaW1hcnk1LT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAgU0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9y ZXBsaWNhdGlvbl9zbG90KHNsb3RfbmFtZSA6PSAnc2I1X3Nsb3QnLCBpbW1lZGlhdGVseV9yZXNl cnZlIDo9IHRydWUpOworXSk7CisKKyRzdGFuZGJ5NS0+c3RhcnQ7CisKKyMgQ3JlYXRlIHNvbWUg Y29udGVudCBvbiBwcmltYXJ5IHRvIG1vdmUgeG1pbgorJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9pbnQ1IEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgQVMgYSIpOworCisjIFdhaXQgdW50aWwgc3RhbmRieSBoYXMgcmVwbGF5ZWQgZW5v dWdoIGRhdGEKKyRwcmltYXJ5NS0+d2FpdF9mb3JfY2F0Y2h1cCgkc3RhbmRieTUpOworCisjIFdh aXQgZm9yIHRoZSBzbG90IHRvIGdldCB4bWluIGZyb20gaG90X3N0YW5kYnlfZmVlZGJhY2sKKyRw cmltYXJ5NS0+cG9sbF9xdWVyeV91bnRpbCgKKwkncG9zdGdyZXMnLCBxcVsKKwlTRUxFQ1QgeG1p biBJUyBOT1QgTlVMTAorCQlGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fc2xvdHMKKwkJ V0hFUkUgc2xvdF9uYW1lID0gJ3NiNV9zbG90JzsKK10pIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRp bmcgZm9yIHNsb3Qgc2I1X3Nsb3QgeG1pbiBmcm9tIEhTIGZlZWRiYWNrIjsKKworIyBTdG9wIHN0 YW5kYnkgdG8gbWFrZSB0aGUgcmVwbGljYXRpb24gc2xvdCBvbiBwcmltYXJ5IGluYWN0aXZlLgor IyBUaGUgc2xvdCdzIHhtaW4gcGVyc2lzdHMgYW5kIGhvbGRzIGJhY2sgZGF0ZnJvemVueGlkLgor JHN0YW5kYnk1LT5zdG9wOworCisjIEFkdmFuY2UgWElEcyBhbmQgd2FpdCBmb3IgdGhlIHNsb3Qg dG8gYmUgaW52YWxpZGF0ZWQgZHVlIHRvIFhJRCBhZ2UuCisjIFVzZSAyeCB0aGUgbWF4X3Nsb3Rf eGlkX2FnZSB0byBlbnN1cmUgdGhlIHNsb3QncyB4bWluIGFnZSBjb21mb3J0YWJseQorIyBleGNl ZWRzIHRoZSBjb25maWd1cmVkIGxpbWl0LgoraW52YWxpZGF0ZV9zbG90X2J5X3hpZF9hZ2UoJHBy aW1hcnk1LCAndGFiX2ludDUnLCAnc2I1X3Nsb3QnLCAncGh5c2ljYWwnLAorCTIgKiAkbWF4X3Ns b3RfeGlkX2FnZSk7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIHN0cmVhbWluZyBzdGFu ZGJ5J3Mgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2FnZQorIyBHVUMuCisjID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdGNhc2Ugc3RhcnQ6IElu dmFsaWRhdGUgbG9naWNhbCBzdWJzY3JpYmVyJ3Mgc2xvdCBkdWUgdG8gbWF4X3Nsb3RfeGlkX2Fn ZQorIyBHVUMuCisKKyMgQ3JlYXRlIGEgc3Vic2NyaWJlciBub2RlCitteSAkc3Vic2NyaWJlcjUg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXI1Jyk7Ciskc3Vic2Ny aWJlcjUtPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJHN1YnNjcmliZXI1 LT5zdGFydDsKKworIyBDcmVhdGUgdGFibGVzIG9uIGJvdGggcHJpbWFyeSBhbmQgc3Vic2NyaWJl cgorJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0ZXN0X3Ri bDUgKGlkIGludCkiKTsKKyRzdWJzY3JpYmVyNS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdGVzdF90Ymw1IChpZCBpbnQpIik7CisKKyMgSW5zZXJ0IHNvbWUgaW5pdGlhbCBk YXRhCiskcHJpbWFyeTUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0 X3RibDUgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMoMSwgNSkpOyIpOworCisjIFNldHVwIGxvZ2lj YWwgcmVwbGljYXRpb24KK215ICRwcmltYXJ5NV9jb25uc3RyID0gJHByaW1hcnk1LT5jb25uc3Ry IC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJHByaW1hcnk1LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjUgRk9SIFRBQkxFIHRlc3RfdGJsNSIpOworCiskc3Vi c2NyaWJlcjUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1 YjUgQ09OTkVDVElPTiAnJHByaW1hcnk1X2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1YjUgV0lUSCAo c2xvdF9uYW1lID0gJ2xzdWI1X3Nsb3QnKSIKKyk7CisKKyMgV2FpdCBmb3IgaW5pdGlhbCBzeW5j IHRvIGNvbXBsZXRlCiskc3Vic2NyaWJlcjUtPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRw cmltYXJ5NSwgJ3N1YjUnKTsKKworJHJlc3VsdCA9ICRzdWJzY3JpYmVyNS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RibDUiKTsKK2lzKCRyZXN1bHQs IHFxKDUpLCAiY2hlY2sgaW5pdGlhbCBjb3B5IHdhcyBkb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0 aW9uIChYSUQgYWdlIHRlc3QpIik7CisKKyMgV2FpdCBmb3IgdGhlIGxvZ2ljYWwgc2xvdCB0byBn ZXQgY2F0YWxvZ194bWluIChsb2dpY2FsIHNsb3RzIHVzZSBjYXRhbG9nX3htaW4sIG5vdCB4bWlu KQorJHByaW1hcnk1LT5wb2xsX3F1ZXJ5X3VudGlsKAorCSdwb3N0Z3JlcycsIHFxWworCVNFTEVD VCB4bWluIElTIE5VTEwgQU5EIGNhdGFsb2dfeG1pbiBJUyBOT1QgTlVMTAorCUZST00gcGdfY2F0 YWxvZy5wZ19yZXBsaWNhdGlvbl9zbG90cworCVdIRVJFIHNsb3RfbmFtZSA9ICdsc3ViNV9zbG90 JzsKK10pIG9yIGRpZSAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHNsb3QgbHN1YjVfc2xvdCBjYXRh bG9nX3htaW4gdG8gYWR2YW5jZSI7CisKKyMgU3RvcCBzdWJzY3JpYmVyIHRvIG1ha2UgdGhlIHJl cGxpY2F0aW9uIHNsb3Qgb24gcHJpbWFyeSBpbmFjdGl2ZQorJHN1YnNjcmliZXI1LT5zdG9wOwor CisjIEFkdmFuY2UgWElEcyBhbmQgd2FpdCBmb3IgdGhlIHNsb3QgdG8gYmUgaW52YWxpZGF0ZWQg ZHVlIHRvIFhJRCBhZ2UuCisjIFVzZSAyeCB0aGUgbWF4X3Nsb3RfeGlkX2FnZSB0byBlbnN1cmUg dGhlIHNsb3QncyBjYXRhbG9nX3htaW4gYWdlCisjIGNvbWZvcnRhYmx5IGV4Y2VlZHMgdGhlIGNv bmZpZ3VyZWQgbGltaXQuCitpbnZhbGlkYXRlX3Nsb3RfYnlfeGlkX2FnZSgkcHJpbWFyeTUsICd0 ZXN0X3RibDUnLCAnbHN1YjVfc2xvdCcsICdsb2dpY2FsJywKKwkyICogJG1heF9zbG90X3hpZF9h Z2UpOworCiskcHJpbWFyeTUtPnN0b3A7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIGxv Z2ljYWwgc3Vic2NyaWJlcidzIHNsb3QgZHVlIHRvIG1heF9zbG90X3hpZF9hZ2UKKyMgR1VDLgor IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorCiBkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --0000000000007016ad064dde1e01--