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 1vn7PA-002ZA9-24 for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Feb 2026 03:48:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vn7P9-002yGR-22 for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Feb 2026 03:48:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vn7P8-002yGD-36 for pgsql-hackers@lists.postgresql.org; Tue, 03 Feb 2026 03:48:43 +0000 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vn7P6-00000000I0g-306G for pgsql-hackers@lists.postgresql.org; Tue, 03 Feb 2026 03:48:41 +0000 Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-59b672f8ec4so5729478e87.1 for ; Mon, 02 Feb 2026 19:48:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770090517; cv=none; d=google.com; s=arc-20240605; b=BqnCC/eHjal8X5FyUKrFIp9zmXYKXLjFN569tayWw7++NvCbOB7iT9/NAQ4T+lKYL/ tYPry1ZO75cXXs96NeGXhes51dPlwElrcVDw/9I0oHGeD26MbNFtBZsciURwWUv0B+mt JtIq6ESBQ1fydSOtfQ3NVHnLntDDKUD7+W9P9Mj+7evFSKYbEY/R2oFOQIiJLwZ8yOZ3 ho4esGFx2x0HyN+3WeBlXXQMHR5As6w2IbVbDj1HUFR4HXkjSTOeBQt0d4qZfXQCq+jU V9yscf3ybX8X2e9aqlTqaALi30lrFNmNr0Ow6v2cZuODRPUUXk+qRZE/ZyF/8TRcVYqO w+oA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=4hAXx7+sqT/zk4yVyGvi99RrlYalXW1gZB4oOSl4zMo=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=k7nPWva2b6T7IAO+98nlOVy4c/MA0mTIqVoQnA13AvLuOOIWAr9G+nydyetEJ8SKRH unTdXCR9OYvEOaEImffXtUYR0mMSWrn9NK3zbjzkmm2ZwHtUtN66/ZcMi+1Nihy7W+/S pNHkgQzn7rTitnI3gXckUETiAov23hFr6T4FHNT4u+MQ0a+aLRUY6tzhnju9zsvmkTTU M5IVLq6FItuQW5OBdz0UedM+3O5NjdLbOPZg5qOfRAYIe3x+suLwIo7Pn39v26f4LDDy y9yBbv5mp7RT3k4ZdxbIBn9McgaEhQZzVi7sHF6FVUH5VucS0xAvjQ0xRecYM4ERoAPl UIfg==; darn=lists.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=20230601; t=1770090517; x=1770695317; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=4hAXx7+sqT/zk4yVyGvi99RrlYalXW1gZB4oOSl4zMo=; b=Onu5jezp/phCPd1piHM+zxjYxs3F08l962vdNGU3FivxeciA9EfKIrfFsxEFxlQIsl GEHiij0ZladWw6+I8GAjZ3umqsDbE4G66EKd00jWY38xJ20/M1NEc1PB5LiwPoz+RTcA s6F5DoikK6BlszhNFs14Y6GlOoLjIJYJ7bjxorbyGrbaYY/tA1XJLW6LIUlX91X25oIV +m4jaiVuT7LNAu2zhKXp1rgSDFLyUpLNOIwAceuutfNEUKpjjzBdXP3ymiWtTC6mzHNb hYoM5N+WFCrTYfXwN9wEHgPo5wT5uW++Q2xEAysQDJObHCrswDqpbK4px4CCGh4yhVm6 2Q+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770090517; x=1770695317; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4hAXx7+sqT/zk4yVyGvi99RrlYalXW1gZB4oOSl4zMo=; b=N3wmQVu6ZL0x/cHC+/DFPyId5ZjxgsG2gBrXl0wMoZ+kUQLk7N+GRKQpG6vZUHuUUM JgoNLVDqF/klG2QHq8QQElV7DQ/IcTA2M3hiE1p8KT+9LUBvR/Vn3NUmHbM056VKxnPI s3Y8MfhHMme46/NY6NwMC0ZpxTWUGOBo53Gb8sYEaWsOOTetyr/+mv3Rg6aH2ppvfcb6 Qp5b50vTb68r4xTOfjwlId7x9lORVKgpgp32EZYubRPnUe5gha3gW6QzU9wdfbhId9Q0 e7mk9lMfLtiw2IMwXzKzpIXPgx1YHS5YNCIMf1up30YmKkjrOwai6GYy4Ajzj1/IXk9o J31Q== X-Gm-Message-State: AOJu0YynNgMeEmMN+dsCjqgtH/qmJICYeOYVzqAUOZfRtCA2dB1s21dP NHT36F1LZNT7a+dfCc54tyPKk0Q+q3GPpd3GW8OvwgUZ88e2xChA8nS2Drmxep4QXwfKvQuigD1 t3pq5Vf+yMYTX/S+681ZafLOO69gqtoFIt3/m X-Gm-Gg: AZuq6aIdpryOOxSkT1B4cZ+TcWahCachaa1TfQsa5l5PBTjik2WQnhsjvD9wxhr7hOX 4J0UC5ibRQI/7QK4cRSP+fB+cxHIxV2JRiPWtSe2ZOV9ChYAi7Tj8ny1r6kpQi+sV4IMt2gtWEU bPt1I6lazYOBopxMZ4W9Xmo8VuGFsvcS2TWrzls2fU9a/CbB7a0UxtXu60RObcpz4tqBLLQXXIN oYE3yfaaqifV9H3/tL7im3Gdxyn0F27nrOWTGlGtezDbwt85IyWSrjEtsGVpKQYZ/XwBwPLt/az Z/ux6rWx X-Received: by 2002:a05:6512:10d4:b0:59d:e306:c621 with SMTP id 2adb3069b0e04-59e16430ea0mr5371025e87.48.1770090517349; Mon, 02 Feb 2026 19:48:37 -0800 (PST) MIME-Version: 1.0 From: Ajin Cherian Date: Tue, 3 Feb 2026 14:48:25 +1100 X-Gm-Features: AZwV_QiWBaGgB8UBw6bSoWFcLg8qdk6_5jSM8wC13254wKjBF6mLpK-9ALFHPiY Message-ID: Subject: [PATCH] Support automatic sequence replication To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000081de370649e35086" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000081de370649e35086 Content-Type: text/plain; charset="UTF-8" Hello hackers, I'd like to propose an improvement to the sequence replication feature that was committed in [1]. The current implementation synchronizes sequences during initial subscription setup, but the sequence sync worker exits after this initial sync. This means that as sequences advance on the publisher, they drift from the subscriber values over time. Users must manually run ALTER SUBSCRIPTION ... REFRESH SEQUENCES to resynchronize, which requires monitoring and intervention. Proposed Enhancement: This patch changes the sequence sync worker to run continuously throughout the subscription lifetime, automatically detecting and correcting sequence drift. The key changes are: 1. The sequence sync worker remains running instead of exiting after initial sync, periodically checking for and synchronizing drifted sequences. 2. The worker uses an exponential backoff strategy - starting at 2 seconds, doubling up to a maximum of 30 seconds when sequences are in sync, and resetting to the minimum interval when drift is detected. 3. Since synchronization is now automatic, ALTER SUBSCRIPTION ... REFRESH SEQUENCES is no longer needed and has been removed. The patch modifies documentation to reflect the new behavior, removes the REFRESH SEQUENCES command from the grammar and subscription commands, and implements the continuous monitoring loop in sequencesync.c. Tap tests have been updated to verify automatic synchronization rather than manual refresh. The attached v2 patch is attached and ready for review. Thoughts and feedback are welcome! [1] - https://github.com/postgres/postgres/commit/5509055d6956745532e65ab218e15b99d87d66ce Best regards, Ajin Cherian Fujitsu Australia --00000000000081de370649e35086 Content-Type: application/octet-stream; name="v2-0001-Support-automatic-sequence-replication.patch" Content-Disposition: attachment; filename="v2-0001-Support-automatic-sequence-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml623ydu0 RnJvbSBmZmQ4ZjZhZGJjZjE2ZGVkMmFhZjliMDMzMDBhMGJhNTc3ZGNiOTBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGl0c2FqaW5AZ21haWwuY29tPgpEYXRl OiBNb24sIDIgRmViIDIwMjYgMjE6NDE6NTQgKzExMDAKU3ViamVjdDogW1BBVENIIHYyXSBTdXBw b3J0IGF1dG9tYXRpYyBzZXF1ZW5jZSByZXBsaWNhdGlvbgoKTG9naWNhbCByZXBsaWNhdGlvbiBz ZXF1ZW5jZXMgY2FuIGRyaWZ0IGJldHdlZW4gcHVibGlzaGVyIGFuZApzdWJzY3JpYmVyIGFzIHZh bHVlcyBhcmUgY29uc3VtZWQgaW5kZXBlbmRlbnRseSBvbiBlYWNoIG5vZGUuClByZXZpb3VzbHks IHRoZSBzZXF1ZW5jZSBzeW5jIHdvcmtlciBleGl0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwKc3luY2hy b25pemF0aW9uLCBhbGxvd2luZyBzZXF1ZW5jZXMgdG8gZGl2ZXJnZSBvdmVyIHRpbWUuCgpUaGlz IGNoYW5nZSBrZWVwcyB0aGUgc2VxdWVuY2Ugc3luYyB3b3JrZXIgcnVubmluZyBjb250aW51b3Vz bHkKc28gaXQgY2FuIG1vbml0b3Igc2VxdWVuY2VzIGFuZCByZXN5bmNocm9uaXplIHRoZW0gd2hl biBkcmlmdAppcyBkZXRlY3RlZC4gVGhlIHdvcmtlciB1c2VzIGFuIGFkYXB0aXZlIHNsZWVwIGlu dGVydmFsOgppdCBzdGFydHMgYXQgMiBzZWNvbmRzLCBkb3VibGVzIHVwIHRvIGEgbWF4aW11bSBv ZiAzMCBzZWNvbmRzCndoZW4gbm8gZHJpZnQgaXMgb2JzZXJ2ZWQsIGFuZCByZXNldHMgdG8gdGhl IG1pbmltdW0gaW50ZXJ2YWwKb25jZSBkcmlmdCBpcyBmb3VuZC4KClNpbmNlIHN5bmNocm9uaXph dGlvbiBpcyBub3cgY29udGludW91cywKQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNF UVVFTkNFUyBpcyBubyBsb25nZXIgbmVlZGVkCmFuZCBoYXMgYmVlbiByZW1vdmVkLgoKU2VxdWVu Y2VzIHJlbWFpbiBpbiB0aGUgUkVBRFkgc3RhdGUgZHVyaW5nIGNvbnRpbnVvdXMKc3luY2hyb25p emF0aW9uLgoKQXV0aG9yOiBBamluIENoZXJpYW4gaXRzYWppbkBnbWFpbC5jb20KLS0tCiBkb2Mv c3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRvYy9z cmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICB8ICA1NiArLS0tLQogZG9j L3NyYy9zZ21sL3JlZi9hbHRlcl9zdWJzY3JpcHRpb24uc2dtbCAgICAgIHwgIDMwIC0tLQogc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgIHwgIDM2ICsrKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgICAgIHwgIDY1IC0tLS0tCiBz cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgIDkgLQogLi4u L3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMgICAgICAgIHwgMjI3ICsrKysrKysr KysrKysrLS0tLQogc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jICAgICAgICAgICAgICAg IHwgICA0ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwg ICAxIC0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyNl9zdGF0cy5wbCAgICAgICAgICB8ICAg MiArCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzZfc2VxdWVuY2VzLnBsICAgICAgfCAgNzEg KystLS0tCiAxMiBmaWxlcyBjaGFuZ2VkLCAyMzUgaW5zZXJ0aW9ucygrKSwgMjczIGRlbGV0aW9u cygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3NlcXVlbmNlc3luYy5jCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NhdGFs b2dzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAppbmRleCAzMzIxOTM1NjVlMi4u ZWM1MWE4N2MyNTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC04MjYxLDExICs4MjYxLDkgQEAgU0NSQU0t U0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxl Pjo8cmVwbGFjZWFibGU+JmwKICAgPHBhcmE+CiAgICBUaGlzIGNhdGFsb2cgY29udGFpbnMgdGFi bGVzIGFuZCBzZXF1ZW5jZXMga25vd24gdG8gdGhlIHN1YnNjcmlwdGlvbgogICAgYWZ0ZXIgcnVu bmluZzoKLSAgIDxsaW5rIGxpbmtlbmQ9InNxbC1jcmVhdGVzdWJzY3JpcHRpb24iPjxjb21tYW5k PkNSRUFURSBTVUJTQ1JJUFRJT048L2NvbW1hbmQ+PC9saW5rPiwKKyAgIDxsaW5rIGxpbmtlbmQ9 InNxbC1jcmVhdGVzdWJzY3JpcHRpb24iPjxjb21tYW5kPkNSRUFURSBTVUJTQ1JJUFRJT048L2Nv bW1hbmQ+PC9saW5rPiwgb3IKICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlv bi1wYXJhbXMtcmVmcmVzaC1wdWJsaWNhdGlvbiI+Ci0gICA8Y29tbWFuZD5BTFRFUiBTVUJTQ1JJ UFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT048L2NvbW1hbmQ+PC9saW5rPiwgb3IKLSAgIDxs aW5rIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtcmVmcmVzaC1zZXF1ZW5j ZXMiPgotICAgPGNvbW1hbmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNF UzwvY29tbWFuZD48L2xpbms+LgorICAgPGNvbW1hbmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBS RUZSRVNIIFBVQkxJQ0FUSU9OPC9jb21tYW5kPjwvbGluaz4uCiAgIDwvcGFyYT4KIAogICA8dGFi bGU+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIv ZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCA1MDI4ZmU5YWYwOS4u YzFlZDk2MGNlYTggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9u LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTc3 NSwyMCArMTc3NSwxNCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgICB0byBzeW5jaHJvbml6ZSBvbmx5 IG5ld2x5IGFkZGVkIHNlcXVlbmNlcy4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+Ci0g ICAgPGxpc3RpdGVtPgotICAgICA8cGFyYT4KLSAgICAgIHVzZSA8bGluayBsaW5rZW5kPSJzcWwt YWx0ZXJzdWJzY3JpcHRpb24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICAgIDxjb21t YW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVM8L2NvbW1hbmQ+PC9s aW5rPgotICAgICAgdG8gcmUtc3luY2hyb25pemUgYWxsIHNlcXVlbmNlcyBjdXJyZW50bHkga25v d24gdG8gdGhlIHN1YnNjcmlwdGlvbi4KLSAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+CiAg ICA8L2l0ZW1pemVkbGlzdD4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgogICAgQSA8Zmlyc3R0ZXJt PnNlcXVlbmNlIHN5bmNocm9uaXphdGlvbiB3b3JrZXI8L2ZpcnN0dGVybT4gd2lsbCBiZSBzdGFy dGVkCi0gICBhZnRlciBleGVjdXRpbmcgYW55IG9mIHRoZSBhYm92ZSBzdWJzY3JpYmVyIGNvbW1h bmRzLCBhbmQgd2lsbCBleGl0IG9uY2UgdGhlCi0gICBzZXF1ZW5jZXMgYXJlIHN5bmNocm9uaXpl ZC4KKyAgIGFmdGVyIGV4ZWN1dGluZyBhbnkgb2YgdGhlIGFib3ZlIHN1YnNjcmliZXIgY29tbWFu ZHMsIHRoaXMgd29ya2VyIHdpbGwKKyAgIHJlbWFpbiBydW5uaW5nIGZvciB0aGUgbGlmZSBvZiB0 aGUgc3Vic2NyaXB0aW9uLCBhbmQgd2lsbCBwZXJpb2RpY2FsbHkKKyAgIHN5bmNocm9uaXplIGFs bCBwdWJsaXNoZWQgc2VxdWVuY2VzLgogICA8L3BhcmE+CiAgIDxwYXJhPgogICAgVGhlIGFiaWxp dHkgdG8gbGF1bmNoIGEgc2VxdWVuY2Ugc3luY2hyb25pemF0aW9uIHdvcmtlciBpcyBsaW1pdGVk IGJ5IHRoZQpAQCAtMTgxNSwyMSArMTgwOSw3IEBAIFB1YmxpY2F0aW9uczoKICAgPC9zZWN0Mj4K IAogICA8c2VjdDIgaWQ9InNlcXVlbmNlcy1vdXQtb2Ytc3luYyI+Ci0gICA8dGl0bGU+UmVmcmVz aGluZyBPdXQtb2YtU3luYyBTZXF1ZW5jZXM8L3RpdGxlPgotICAgPHBhcmE+Ci0gICAgU3Vic2Ny aWJlciBzZXF1ZW5jZSB2YWx1ZXMgd2lsbCBiZWNvbWUgb3V0IG9mIHN5bmMgYXMgdGhlIHB1Ymxp c2hlcgotICAgIGFkdmFuY2VzIHRoZW0uCi0gICA8L3BhcmE+Ci0gICA8cGFyYT4KLSAgICBUbyBk ZXRlY3QgdGhpcywgY29tcGFyZSB0aGUKLSAgICA8bGluayBsaW5rZW5kPSJjYXRhbG9nLXBnLXN1 YnNjcmlwdGlvbi1yZWwiPnBnX3N1YnNjcmlwdGlvbl9yZWw8L2xpbms+LjxzdHJ1Y3RmaWVsZD5z cnN1Ymxzbjwvc3RydWN0ZmllbGQ+Ci0gICAgb24gdGhlIHN1YnNjcmliZXIgd2l0aCB0aGUgPHN0 cnVjdGZpZWxkPnBhZ2VfbHNuPC9zdHJ1Y3RmaWVsZD4gb2J0YWluZWQKLSAgICBmcm9tIHRoZSA8 bGluayBsaW5rZW5kPSJmdW5jLXBnLWdldC1zZXF1ZW5jZS1kYXRhIj48ZnVuY3Rpb24+cGdfZ2V0 X3NlcXVlbmNlX2RhdGE8L2Z1bmN0aW9uPjwvbGluaz4KLSAgICBmdW5jdGlvbiBmb3IgdGhlIHNl cXVlbmNlIG9uIHRoZSBwdWJsaXNoZXIuIFRoZW4gcnVuCi0gICAgPGxpbmsgbGlua2VuZD0ic3Fs LWFsdGVyc3Vic2NyaXB0aW9uLXBhcmFtcy1yZWZyZXNoLXNlcXVlbmNlcyI+Ci0gICAgPGNvbW1h bmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNFUzwvY29tbWFuZD48L2xp bms+IHRvCi0gICAgcmUtc3luY2hyb25pemUgaWYgbmVjZXNzYXJ5LgotICAgPC9wYXJhPgorICAg PHRpdGxlPk91dC1vZi1TeW5jIFNlcXVlbmNlczwvdGl0bGU+CiAgICA8d2FybmluZz4KICAgICA8 cGFyYT4KICAgICAgRWFjaCBzZXF1ZW5jZSBjYWNoZXMgYSBibG9jayBvZiB2YWx1ZXMgKHR5cGlj YWxseSAzMikgaW4gbWVtb3J5IGJlZm9yZQpAQCAtMTk2MSwxNiArMTk0MSw2IEBAIFB1YmxpY2F0 aW9uczoKIC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KICAgICAgICAgNjEw IHwgdCAgICAgICAgIHwgMC8wMTdDRURGOAogKDEgcm93KQotPC9wcm9ncmFtbGlzdGluZz48L3Bh cmE+Ci0KLSAgIDxwYXJhPgotICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHNlcXVlbmNl IHBhZ2UgTFNOcyBvbiB0aGUgcHVibGlzaGVyIGFuZCB0aGUKLSAgICBzZXF1ZW5jZSBwYWdlIExT TnMgb24gdGhlIHN1YnNjcmliZXIgaW5kaWNhdGVzIHRoYXQgdGhlIHNlcXVlbmNlcyBhcmUgb3V0 Ci0gICAgb2Ygc3luYy4gUmUtc3luY2hyb25pemUgYWxsIHNlcXVlbmNlcyBrbm93biB0byB0aGUg c3Vic2NyaWJlciB1c2luZwotICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlv bi1wYXJhbXMtcmVmcmVzaC1zZXF1ZW5jZXMiPgotICAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQ VElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVM8L2NvbW1hbmQ+PC9saW5rPi4KLTxwcm9ncmFtbGlz dGluZz4KLS8qIHN1YiAjICovIEFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFJFRlJFU0ggU0VRVUVO Q0VTOwogPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CiAKICAgIDxwYXJhPgpAQCAtMjMzMywyNCAr MjMwMyw2IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlv biBvcmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICAgPC9wYXJhPgogICAgPC9saXN0 aXRlbT4KIAotICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgICBJbmNyZW1lbnRhbCBzZXF1 ZW5jZSBjaGFuZ2VzIGFyZSBub3QgcmVwbGljYXRlZC4gIEFsdGhvdWdoIHRoZSBkYXRhIGluCi0g ICAgIHNlcmlhbCBvciBpZGVudGl0eSBjb2x1bW5zIGJhY2tlZCBieSBzZXF1ZW5jZXMgd2lsbCBi ZSByZXBsaWNhdGVkIGFzIHBhcnQKLSAgICAgb2YgdGhlIHRhYmxlLCB0aGUgc2VxdWVuY2VzIHRo ZW1zZWx2ZXMgZG8gbm90IHJlcGxpY2F0ZSBvbmdvaW5nIGNoYW5nZXMuCi0gICAgIE9uIHRoZSBz dWJzY3JpYmVyLCBhIHNlcXVlbmNlIHdpbGwgcmV0YWluIHRoZSBsYXN0IHZhbHVlIGl0IHN5bmNo cm9uaXplZAotICAgICBmcm9tIHRoZSBwdWJsaXNoZXIuIElmIHRoZSBzdWJzY3JpYmVyIGlzIHVz ZWQgYXMgYSByZWFkLW9ubHkgZGF0YWJhc2UsCi0gICAgIHRoZW4gdGhpcyBzaG91bGQgdHlwaWNh bGx5IG5vdCBiZSBhIHByb2JsZW0uICBJZiwgaG93ZXZlciwgc29tZSBraW5kIG9mCi0gICAgIHN3 aXRjaG92ZXIgb3IgZmFpbG92ZXIgdG8gdGhlIHN1YnNjcmliZXIgZGF0YWJhc2UgaXMgaW50ZW5k ZWQsIHRoZW4gdGhlCi0gICAgIHNlcXVlbmNlcyB3b3VsZCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8g dGhlIGxhdGVzdCB2YWx1ZXMsIGVpdGhlciBieQotICAgICBleGVjdXRpbmcgPGxpbmsgbGlua2Vu ZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uLXBhcmFtcy1yZWZyZXNoLXNlcXVlbmNlcyI+Ci0gICAg IDxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVM8L2NvbW1h bmQ+PC9saW5rPgotICAgICBvciBieSBjb3B5aW5nIHRoZSBjdXJyZW50IGRhdGEgZnJvbSB0aGUg cHVibGlzaGVyIChwZXJoYXBzIHVzaW5nCi0gICAgIDxjb21tYW5kPnBnX2R1bXA8L2NvbW1hbmQ+ KSBvciBieSBkZXRlcm1pbmluZyBhIHN1ZmZpY2llbnRseSBoaWdoIHZhbHVlCi0gICAgIGZyb20g dGhlIHRhYmxlcyB0aGVtc2VsdmVzLgotICAgIDwvcGFyYT4KLSAgIDwvbGlzdGl0ZW0+Ci0KICAg IDxsaXN0aXRlbT4KICAgICA8cGFyYT4KICAgICAgUmVwbGljYXRpb24gb2YgPGNvbW1hbmQ+VFJV TkNBVEU8L2NvbW1hbmQ+IGNvbW1hbmRzIGlzIHN1cHBvcnRlZCwgYnV0CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3N1YnNjcmlwdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3Jl Zi9hbHRlcl9zdWJzY3JpcHRpb24uc2dtbAppbmRleCAyN2MwNjQzOWY0Zi4uYzBmZDQyNmQ3MTIg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfc3Vic2NyaXB0aW9uLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9zdWJzY3JpcHRpb24uc2dtbApAQCAtMjYsNyArMjYs NiBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5h bWU8L3JlcGxhY2VhYmxlPiBTRVQgUFVCTElDQQogQUxURVIgU1VCU0NSSVBUSU9OIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gQUREIFBVQkxJQ0FUSU9O IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9uYW1lPC9yZXBsYWNl YWJsZT4gWywgLi4uXSBbIFdJVEggKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVi bGljYXRpb25fb3B0aW9uPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICkgXQogQUxURVIgU1VCU0NSSVBU SU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gRFJP UCBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25f bmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gWyBXSVRIICggPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnB1YmxpY2F0aW9uX29wdGlvbjwvcmVwbGFjZWFibGU+IFs9IDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj52YWx1ZTwvcmVwbGFjZWFibGU+XSBbLCAuLi4gXSApIF0KIEFM VEVSIFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVw bGFjZWFibGU+IFJFRlJFU0ggUFVCTElDQVRJT04gWyBXSVRIICggPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPnJlZnJlc2hfb3B0aW9uPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICkgXQotQUxU RVIgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBs YWNlYWJsZT4gUkVGUkVTSCBTRVFVRU5DRVMKIEFMVEVSIFNVQlNDUklQVElPTiA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IEVOQUJMRQogQUxURVIgU1VC U0NSSVBUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJs ZT4gRElTQUJMRQogQUxURVIgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gU0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnN1YnNjcmlwdGlvbl9wYXJhbWV0ZXI8L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKQpAQCAtMTkw LDExICsxODksNiBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPAogICAgICAgICAgIFByZXZpb3Vz bHkgc3Vic2NyaWJlZCB0YWJsZXMgYXJlIG5vdCBjb3BpZWQsIGV2ZW4gaWYgYSB0YWJsZSdzIHJv dwogICAgICAgICAgIGZpbHRlciA8bGl0ZXJhbD5XSEVSRTwvbGl0ZXJhbD4gY2xhdXNlIGhhcyBz aW5jZSBiZWVuIG1vZGlmaWVkLgogICAgICAgICAgPC9wYXJhPgotICAgICAgICAgPHBhcmE+Ci0g ICAgICAgICAgUHJldmlvdXNseSBzdWJzY3JpYmVkIHNlcXVlbmNlcyBhcmUgbm90IHJlLXN5bmNo cm9uaXplZC4gVG8gZG8gdGhhdCwKLSAgICAgICAgICB1c2UgPGxpbmsgbGlua2VuZD0ic3FsLWFs dGVyc3Vic2NyaXB0aW9uLXBhcmFtcy1yZWZyZXNoLXNlcXVlbmNlcyI+Ci0gICAgICAgICAgPGNv bW1hbmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNFUzwvY29tbWFuZD48 L2xpbms+LgotICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgU2Vl IDx4cmVmIGxpbmtlbmQ9InNlcXVlbmNlLWRlZmluaXRpb24tbWlzbWF0Y2hlcyIvPiBmb3IgcmVj b21tZW5kYXRpb25zIG9uIGhvdwogICAgICAgICAgIHRvIGhhbmRsZSBhbnkgd2FybmluZ3MgYWJv dXQgc2VxdWVuY2UgZGVmaW5pdGlvbiBkaWZmZXJlbmNlcyBiZXR3ZWVuCkBAIC0yMTksMzAgKzIx Myw2IEBAIEFMVEVSIFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFNRSBUTyA8CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFy bGlzdGVudHJ5PgogCi0gICA8dmFybGlzdGVudHJ5IGlkPSJzcWwtYWx0ZXJzdWJzY3JpcHRpb24t cGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICA8dGVybT48bGl0ZXJhbD5SRUZSRVNIIFNF UVVFTkNFUzwvbGl0ZXJhbD48L3Rlcm0+Ci0gICAgPGxpc3RpdGVtPgotICAgICA8cGFyYT4KLSAg ICAgIFJlLXN5bmNocm9uaXplIHNlcXVlbmNlIGRhdGEgd2l0aCB0aGUgcHVibGlzaGVyLiBVbmxp a2UKLSAgICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtcmVm cmVzaC1wdWJsaWNhdGlvbiI+Ci0gICAgICA8Y29tbWFuZD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4u IFJFRlJFU0ggUFVCTElDQVRJT048L2NvbW1hbmQ+PC9saW5rPiB3aGljaAotICAgICAgb25seSBo YXMgdGhlIGFiaWxpdHkgdG8gc3luY2hyb25pemUgbmV3bHkgYWRkZWQgc2VxdWVuY2VzLAotICAg ICAgPGxpdGVyYWw+UkVGUkVTSCBTRVFVRU5DRVM8L2xpdGVyYWw+IHdpbGwgcmUtc3luY2hyb25p emUgdGhlIHNlcXVlbmNlCi0gICAgICBkYXRhIGZvciBhbGwgY3VycmVudGx5IHN1YnNjcmliZWQg c2VxdWVuY2VzLiBJdCBkb2VzIG5vdCBhZGQgb3IgcmVtb3ZlCi0gICAgICBzZXF1ZW5jZXMgZnJv bSB0aGUgc3Vic2NyaXB0aW9uIHRvIG1hdGNoIHRoZSBwdWJsaWNhdGlvbi4KLSAgICAgPC9wYXJh PgotICAgICA8cGFyYT4KLSAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJzZXF1ZW5jZS1kZWZpbml0 aW9uLW1pc21hdGNoZXMiLz4gZm9yCi0gICAgICByZWNvbW1lbmRhdGlvbnMgb24gaG93IHRvIGhh bmRsZSBhbnkgd2FybmluZ3MgYWJvdXQgc2VxdWVuY2UgZGVmaW5pdGlvbgotICAgICAgZGlmZmVy ZW5jZXMgYmV0d2VlbiB0aGUgcHVibGlzaGVyIGFuZCB0aGUgc3Vic2NyaWJlci4KLSAgICAgPC9w YXJhPgotICAgICA8cGFyYT4KLSAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJzZXF1ZW5jZXMtb3V0 LW9mLXN5bmMiLz4gZm9yIHJlY29tbWVuZGF0aW9ucyBvbiBob3cgdG8KLSAgICAgIGlkZW50aWZ5 IGFuZCBoYW5kbGUgb3V0LW9mLXN5bmMgc2VxdWVuY2VzLgotICAgICA8L3BhcmE+Ci0gICAgPC9s aXN0aXRlbT4KLSAgIDwvdmFybGlzdGVudHJ5PgotCiAgICA8dmFybGlzdGVudHJ5IGlkPSJzcWwt YWx0ZXJzdWJzY3JpcHRpb24tcGFyYW1zLWVuYWJsZSI+CiAgICAgPHRlcm0+PGxpdGVyYWw+RU5B QkxFPC9saXRlcmFsPjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2Uu YwppbmRleCBlMWI4MDhiYmI2MC4uZDZmOTA4NWUyM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2Uu YwpAQCAtOTI5LDYgKzkyOSw0MiBAQCBsYXN0dmFsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVU VVJOX0lOVDY0KHJlc3VsdCk7CiB9CiAKKy8qCisgKiBSZWFkIHRoZSBjdXJyZW50IHNlcXVlbmNl IHZhbHVlcyAobGFzdF92YWx1ZSBhbmQgaXNfY2FsbGVkKQorICoKKyAqIFRoaXMgaXMgYSByZWFk LW9ubHkgb3BlcmF0aW9uIHRoYXQgYWNxdWlyZXMgQWNjZXNzU2hhcmVMb2NrIG9uIHRoZSBzZXF1 ZW5jZS4KKyAqIFVzZWQgYnkgbG9naWNhbCByZXBsaWNhdGlvbiBzZXF1ZW5jZSBzeW5jaHJvbml6 YXRpb24gdG8gZGV0ZWN0IGRyaWZ0LgorICovCit2b2lkCitHZXRTZXF1ZW5jZShPaWQgcmVsaWQs IGludDY0ICpsYXN0X3ZhbHVlLCBib29sICppc19jYWxsZWQpCit7CisJUmVsYXRpb24Jc2VxcmVs OworCUJ1ZmZlcgkJYnVmOworCUhlYXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1 ZW5jZV9kYXRhIHNlcTsKKworCS8qIE9wZW4gYW5kIGxvY2sgdGhlIHNlcXVlbmNlIHJlbGF0aW9u ICovCisJc2VxcmVsID0gdGFibGVfb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8q IFZlcmlmeSBpdCdzIGFjdHVhbGx5IGEgc2VxdWVuY2UgKi8KKwlpZiAoc2VxcmVsLT5yZF9yZWwt PnJlbGtpbmQgIT0gUkVMS0lORF9TRVFVRU5DRSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkgZXJybXNnKCJcIiVzXCIgaXMg bm90IGEgc2VxdWVuY2UiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkp KTsKKworCS8qIFJlYWQgdGhlIHNlcXVlbmNlIHR1cGxlICovCisJc2VxID0gcmVhZF9zZXFfdHVw bGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCisJLyogRXh0cmFjdCB0aGUgdmFsdWVzICov CisJKmxhc3RfdmFsdWUgPSBzZXEtPmxhc3RfdmFsdWU7CisJKmlzX2NhbGxlZCA9IHNlcS0+aXNf Y2FsbGVkOworCisJLyogUmVsZWFzZSBidWZmZXIgYW5kIGNsb3NlIHJlbGF0aW9uICovCisJVW5s b2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXRhYmxlX2Nsb3NlKHNlcXJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKK30KKwogLyoKICAqIE1haW4gaW50ZXJuYWwgcHJvY2VkdXJlIHRoYXQgaGFuZGxlcyAy ICYgMyBhcmcgZm9ybXMgb2YgU0VUVkFMLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlw dGlvbmNtZHMuYwppbmRleCAwYjNjODQ5OWI0OS4uYzFiOTAzYzU5MDggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKQEAgLTExODMsNTggKzExODMsNiBAQCBBbHRlclN1 YnNjcmlwdGlvbl9yZWZyZXNoKFN1YnNjcmlwdGlvbiAqc3ViLCBib29sIGNvcHlfZGF0YSwKIAkJ dGFibGVfY2xvc2UocmVsLCBOb0xvY2spOwogfQogCi0vKgotICogTWFya3MgYWxsIHNlcXVlbmNl cyB3aXRoIElOSVQgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkCi1BbHRlclN1YnNjcmlwdGlvbl9y ZWZyZXNoX3NlcShTdWJzY3JpcHRpb24gKnN1YikKLXsKLQljaGFyCSAgICplcnIgPSBOVUxMOwot CVdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uOwotCWJvb2wJCW11c3RfdXNlX3Bhc3N3b3JkOwotCi0J LyogTG9hZCB0aGUgbGlicmFyeSBwcm92aWRpbmcgdXMgbGlicHEgY2FsbHMuICovCi0JbG9hZF9m aWxlKCJsaWJwcXdhbHJlY2VpdmVyIiwgZmFsc2UpOwotCi0JLyogVHJ5IHRvIGNvbm5lY3QgdG8g dGhlIHB1Ymxpc2hlci4gKi8KLQltdXN0X3VzZV9wYXNzd29yZCA9IHN1Yi0+cGFzc3dvcmRyZXF1 aXJlZCAmJiAhc3ViLT5vd25lcnN1cGVydXNlcjsKLQl3cmNvbm4gPSB3YWxyY3ZfY29ubmVjdChz dWItPmNvbm5pbmZvLCB0cnVlLCB0cnVlLCBtdXN0X3VzZV9wYXNzd29yZCwKLQkJCQkJCQlzdWIt Pm5hbWUsICZlcnIpOwotCWlmICghd3Jjb25uKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCWVycmNv ZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAotCQkJCWVycm1zZygic3Vic2NyaXB0aW9u IFwiJXNcIiBjb3VsZCBub3QgY29ubmVjdCB0byB0aGUgcHVibGlzaGVyOiAlcyIsCi0JCQkJCSAg IHN1Yi0+bmFtZSwgZXJyKSk7Ci0KLQlQR19UUlkoKTsKLQl7Ci0JCUxpc3QJICAgKnN1YnJlbF9z dGF0ZXM7Ci0KLQkJY2hlY2tfcHVibGljYXRpb25zX29yaWdpbl9zZXF1ZW5jZXMod3Jjb25uLCBz dWItPnB1YmxpY2F0aW9ucywgdHJ1ZSwKLQkJCQkJCQkJCQkJc3ViLT5vcmlnaW4sIE5VTEwsIDAs IHN1Yi0+bmFtZSk7Ci0KLQkJLyogR2V0IGxvY2FsIHNlcXVlbmNlIGxpc3QuICovCi0JCXN1YnJl bF9zdGF0ZXMgPSBHZXRTdWJzY3JpcHRpb25SZWxhdGlvbnMoc3ViLT5vaWQsIGZhbHNlLCB0cnVl LCBmYWxzZSk7Ci0JCWZvcmVhY2hfcHRyKFN1YnNjcmlwdGlvblJlbFN0YXRlLCBzdWJyZWwsIHN1 YnJlbF9zdGF0ZXMpCi0JCXsKLQkJCU9pZAkJCXJlbGlkID0gc3VicmVsLT5yZWxpZDsKLQotCQkJ VXBkYXRlU3Vic2NyaXB0aW9uUmVsU3RhdGUoc3ViLT5vaWQsIHJlbGlkLCBTVUJSRUxfU1RBVEVf SU5JVCwKLQkJCQkJCQkJCSAgIEludmFsaWRYTG9nUmVjUHRyLCBmYWxzZSk7Ci0JCQllcmVwb3J0 KERFQlVHMSwKLQkJCQkJZXJybXNnX2ludGVybmFsKCJzZXF1ZW5jZSBcIiVzLiVzXCIgb2Ygc3Vi c2NyaXB0aW9uIFwiJXNcIiBzZXQgdG8gSU5JVCBzdGF0ZSIsCi0JCQkJCQkJCQlnZXRfbmFtZXNw YWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpKSwKLQkJCQkJCQkJCWdldF9yZWxfbmFt ZShyZWxpZCksCi0JCQkJCQkJCQlzdWItPm5hbWUpKTsKLQkJfQotCX0KLQlQR19GSU5BTExZKCk7 Ci0JewotCQl3YWxyY3ZfZGlzY29ubmVjdCh3cmNvbm4pOwotCX0KLQlQR19FTkRfVFJZKCk7Ci19 Ci0KIC8qCiAgKiBDb21tb24gY2hlY2tzIGZvciBhbHRlcmluZyBmYWlsb3ZlciwgdHdvX3BoYXNl LCBhbmQgcmV0YWluX2RlYWRfdHVwbGVzCiAgKiBvcHRpb25zLgpAQCAtMTg3MSwxOSArMTgxOSw2 IEBAIEFsdGVyU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTdWJzY3JpcHRp b25TdG10ICpzdG10LAogCQkJCWJyZWFrOwogCQkJfQogCi0JCWNhc2UgQUxURVJfU1VCU0NSSVBU SU9OX1JFRlJFU0hfU0VRVUVOQ0VTOgotCQkJewotCQkJCWlmICghc3ViLT5lbmFibGVkKQotCQkJ CQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BS RVJFUVVJU0lURV9TVEFURSksCi0JCQkJCQkJZXJybXNnKCIlcyBpcyBub3QgYWxsb3dlZCBmb3Ig ZGlzYWJsZWQgc3Vic2NyaXB0aW9ucyIsCi0JCQkJCQkJCSAgICJBTFRFUiBTVUJTQ1JJUFRJT04g Li4uIFJFRlJFU0ggU0VRVUVOQ0VTIikpOwotCi0JCQkJQWx0ZXJTdWJzY3JpcHRpb25fcmVmcmVz aF9zZXEoc3ViKTsKLQotCQkJCWJyZWFrOwotCQkJfQotCiAJCWNhc2UgQUxURVJfU1VCU0NSSVBU SU9OX1NLSVA6CiAJCQl7CiAJCQkJcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMocHN0YXRlLCBz dG10LT5vcHRpb25zLCBTVUJPUFRfTFNOLCAmb3B0cyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCA3MTNlZTVj MTBhMi4uOWQzNjIxMjc2MzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkK KysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMTEwNjksMTUgKzExMDY5LDYgQEAg QWx0ZXJTdWJzY3JpcHRpb25TdG10OgogCQkJCQluLT5vcHRpb25zID0gJDY7CiAJCQkJCSQkID0g KE5vZGUgKikgbjsKIAkJCQl9Ci0JCQl8IEFMVEVSIFNVQlNDUklQVElPTiBuYW1lIFJFRlJFU0gg U0VRVUVOQ0VTCi0JCQkJewotCQkJCQlBbHRlclN1YnNjcmlwdGlvblN0bXQgKm4gPQotCQkJCQkJ bWFrZU5vZGUoQWx0ZXJTdWJzY3JpcHRpb25TdG10KTsKLQotCQkJCQluLT5raW5kID0gQUxURVJf U1VCU0NSSVBUSU9OX1JFRlJFU0hfU0VRVUVOQ0VTOwotCQkJCQluLT5zdWJuYW1lID0gJDM7Ci0J CQkJCSQkID0gKE5vZGUgKikgbjsKLQkJCQl9CiAJCQl8IEFMVEVSIFNVQlNDUklQVElPTiBuYW1l IEFERF9QIFBVQkxJQ0FUSU9OIG5hbWVfbGlzdCBvcHRfZGVmaW5pdGlvbgogCQkJCXsKIAkJCQkJ QWx0ZXJTdWJzY3JpcHRpb25TdG10ICpuID0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3NlcXVlbmNlc3luYy5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5k ZXggMTY1ZjkwOWIzYmEuLjM2ZThjZjI0MmQwCi0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9zZXF1ZW5jZXN5bmMuYwpAQCAtMTksMTAgKzE5LDYgQEAKICAqIENSRUFURSBTVUJTQ1JJ UFRJT04KICAqIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTgogICoK LSAqIEV4ZWN1dGluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgcmVzZXRzIGFsbCBzZXF1ZW5jZXMg aW4gdGhlIHN1YnNjcmlwdGlvbiB0bwotICogc3RhdGUgSU5JVCwgdHJpZ2dlcmluZyByZS1zeW5j aHJvbml6YXRpb246Ci0gKiBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VT Ci0gKgogICogVGhlIGFwcGx5IHdvcmtlciBwZXJpb2RpY2FsbHkgc2NhbnMgcGdfc3Vic2NyaXB0 aW9uX3JlbCBmb3Igc2VxdWVuY2VzIGluCiAgKiBJTklUIHN0YXRlLiBXaGVuIHN1Y2ggc2VxdWVu Y2VzIGFyZSBmb3VuZCwgaXQgc3Bhd25zIGEgc2VxdWVuY2VzeW5jIHdvcmtlcgogICogdG8gaGFu ZGxlIHN5bmNocm9uaXphdGlvbi4KQEAgLTM2LDggKzMyLDI0IEBACiAgKiBsb2NhbCBzdWJzY3Jp YmVyLCBhbmQgZmluYWxseSBtYXJrcyBlYWNoIHNlcXVlbmNlIGFzIFJFQURZIHVwb24gc3VjY2Vz c2Z1bAogICogc3luY2hyb25pemF0aW9uLgogICoKKyAqIFRoZSBzZXF1ZW5jZXN5bmMgd29ya2Vy IHRoZW4gZmV0Y2hlcyBhbGwgc2VxdWVuY2VzIHRoYXQgYXJlCisgKiBpbiB0aGUgUkVBRFkgc3Rh dGUsIHF1ZXJpZXMgdGhlIHB1Ymxpc2hlciBmb3IgY3VycmVudCBzZXF1ZW5jZSB2YWx1ZXMsIGFu ZAorICogdXBkYXRlcyBhbnkgc2VxdWVuY2VzIHRoYXQgaGF2ZSBkcmlmdGVkIGFuZCB0aGVuIGdv ZXMgdG8gc2xlZXAuIFRoZSBzbGVlcAorICogaW50ZXJ2YWwgc3RhcnRzIGF0IFNFUVNZTkNfTUlO X1NMRUVQX01TIGFuZCBkb3VibGVzIGFmdGVyIGVhY2ggd2FrZSBjeWNsZQorICogKHVwIHRvIFNF UVNZTkNfTUFYX1NMRUVQX01TKS4gV2hlbiBkcmlmdCBpcyBkZXRlY3RlZCwgdGhlIGludGVydmFs IHJlc2V0cyB0bworICogdGhlIG1pbmltdW0gdG8gZW5zdXJlIHRpbWVseSB1cGRhdGVzLgorICoK KyAqIEFmdGVyIENSRUFURSBTVUJTQ1JJUFRJT04sIHNlcXVlbmNlcyBiZWdpbiBpbiB0aGUgSU5J VCBzdGF0ZS4gU2VxdWVuY2VzCisgKiBhZGRlZCB0aHJvdWdoIEFMVEVSIFNVQlNDUklQVElPTi4u IFJFRlJFU0ggUFVCTElDQVRJT04gYWxzbyBzdGFydCBpbiB0aGUgSU5JVAorICogc3RhdGUuIEFs bCBJTklUIHNlcXVlbmNlcyBhcmUgc3luY2hyb25pemVkIHVuY29uZGl0aW9uYWxseSwgdGhlbiB0 cmFuc2l0aW9uCisgKiB0byB0aGUgUkVBRFkgc3RhdGUuIE9uY2UgaW4gdGhlIFJFQURZIHN0YXRl LCBzZXF1ZW5jZXMgYXJlIGNoZWNrZWQgZm9yIGRyaWZ0CisgKiBmcm9tIHRoZSBwdWJsaXNoZXIg YW5kIHN5bmNocm9uaXplZCBvbmx5IHdoZW4gZHJpZnQgaXMgZGV0ZWN0ZWQuCisgKgogICogU2Vx dWVuY2Ugc3RhdGUgdHJhbnNpdGlvbnMgZm9sbG93IHRoaXMgcGF0dGVybjoKLSAqICAgSU5JVCAt PiBSRUFEWQorICogIElOSVQgLS0+IFJFQURZIC0+LSsKKyAqICAgICAgICAgICAgIF4gICAgICB8 IChjaGVjay9zeW5jaHJvbnppemUpCisgKiAgICAgICAgICAgICB8ICAgICAgfAorICogICAgICAg ICAgICAgKy0tPC0tLSsKICAqCiAgKiBUbyBhdm9pZCBjcmVhdGluZyB0b28gbWFueSB0cmFuc2Fj dGlvbnMsIHVwIHRvIE1BWF9TRVFVRU5DRVNfU1lOQ19QRVJfQkFUQ0gKICAqIHNlcXVlbmNlcyBh cmUgc3luY2hyb25pemVkIHBlciB0cmFuc2FjdGlvbi4gVGhlIGxvY2tzIG9uIHRoZSBzZXF1ZW5j ZQpAQCAtNzgsMTEgKzkwLDE5IEBAIHR5cGVkZWYgZW51bSBDb3B5U2VxUmVzdWx0CiAJQ09QWVNF UV9TVUNDRVNTLAogCUNPUFlTRVFfTUlTTUFUQ0gsCiAJQ09QWVNFUV9JTlNVRkZJQ0lFTlRfUEVS TSwKLQlDT1BZU0VRX1NLSVBQRUQKKwlDT1BZU0VRX1NLSVBQRUQsCisJQ09QWVNFUV9OT1dPUkss CiB9IENvcHlTZXFSZXN1bHQ7CiAKKy8qIExpc3Qgb2Ygc2VxdWVuY2VzIHRoYXQgaXMgY3VycmVu dGx5IGJlaW5nIHN5bmNlZCAqLwogc3RhdGljIExpc3QgKnNlcWluZm9zID0gTklMOwogCisvKiBT bGVlcCBpbnRlcnZhbHMgZm9yIHN5bmMgKi8KKyNkZWZpbmUgU0VRU1lOQ19NSU5fU0xFRVBfTVMg MjAwMAkJLyogMiBzZWNvbmRzICovCisjZGVmaW5lIFNFUVNZTkNfTUFYX1NMRUVQX01TIDMwMDAw CQkvKiAzMCBzZWNvbmRzICovCisKK3N0YXRpYyBsb25nIHNsZWVwX21zID0gU0VRU1lOQ19NSU5f U0xFRVBfTVM7CisKIC8qCiAgKiBBcHBseSB3b3JrZXIgZGV0ZXJtaW5lcyBpZiBzZXF1ZW5jZSBz eW5jaHJvbml6YXRpb24gaXMgbmVlZGVkLgogICoKQEAgLTMyNSwxMSArMzQ1LDEyIEBAIGdldF9h bmRfdmFsaWRhdGVfc2VxX2luZm8oVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFJlbGF0aW9uICpzZXF1 ZW5jZV9yZWwsCiB9CiAKIC8qCi0gKiBBcHBseSByZW1vdGUgc2VxdWVuY2Ugc3RhdGUgdG8gbG9j YWwgc2VxdWVuY2UgYW5kIG1hcmsgaXQgYXMKLSAqIHN5bmNocm9uaXplZCAoUkVBRFkpLgorICog QXBwbHkgcmVtb3RlIHNlcXVlbmNlIHN0YXRlIHRvIGxvY2FsIHNlcXVlbmNlLiBJZiB3ZSBhcmUg ZG9pbmcgdGhpcworICogZm9yIHNlcXVlbmNlcyBpbiB0aGUgSU5JVCBzdGF0ZSwgbW92ZSB0aGVt IHRvIHRoZSBSRUFEWSBzdGF0ZSBvbmNlCisgKiBzeW5jaHJvbml6ZWQuCiAgKi8KIHN0YXRpYyBD b3B5U2VxUmVzdWx0Ci1jb3B5X3NlcXVlbmNlKExvZ2ljYWxSZXBTZXF1ZW5jZUluZm8gKnNlcWlu Zm8sIE9pZCBzZXFvd25lcikKK2NvcHlfc2VxdWVuY2UoTG9naWNhbFJlcFNlcXVlbmNlSW5mbyAq c2VxaW5mbywgT2lkIHNlcW93bmVyLCBjaGFyIHJlbHN0YXRlKQogewogCVVzZXJDb250ZXh0IHVj eHQ7CiAJQWNsUmVzdWx0CWFjbHJlc3VsdDsKQEAgLTM2OCwxOSArMzg5LDQ3IEBAIGNvcHlfc2Vx dWVuY2UoTG9naWNhbFJlcFNlcXVlbmNlSW5mbyAqc2VxaW5mbywgT2lkIHNlcW93bmVyKQogCiAJ LyoKIAkgKiBSZWNvcmQgdGhlIHJlbW90ZSBzZXF1ZW5jZSdzIExTTiBpbiBwZ19zdWJzY3JpcHRp b25fcmVsIGFuZCBtYXJrIHRoZQotCSAqIHNlcXVlbmNlIGFzIFJFQURZLgorCSAqIHNlcXVlbmNl IGFzIFJFQURZIGlmIHVwZGF0aW5nIGEgc2VxdWVuY2UgdGhhdCBpcyBpbiBJTklUIHN0YXRlLgog CSAqLwotCVVwZGF0ZVN1YnNjcmlwdGlvblJlbFN0YXRlKE15U3Vic2NyaXB0aW9uLT5vaWQsIHNl cW9pZCwgU1VCUkVMX1NUQVRFX1JFQURZLAotCQkJCQkJCSAgIHNlcWluZm8tPnBhZ2VfbHNuLCBm YWxzZSk7CisJaWYgKHJlbHN0YXRlID09IFNVQlJFTF9TVEFURV9JTklUKQorCQlVcGRhdGVTdWJz Y3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCBzZXFvaWQsIFNVQlJFTF9TVEFU RV9SRUFEWSwKKwkJCQkJCQkJICAgc2VxaW5mby0+cGFnZV9sc24sIGZhbHNlKTsKIAogCXJldHVy biBDT1BZU0VRX1NVQ0NFU1M7CiB9CiAKKy8qCisgKiBjaGVja19zZXF1ZW5jZV9kcmlmdAorICoK KyAqIENoZWNrIGlmIHRoZSByZW1vdGUgc2VxdWVuY2UgdmFsdWVzIGRpZmZlciBmcm9tIHRoZSBs b2NhbCBzZXF1ZW5jZS4KKyAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiBhbnkgc2VxdWVuY2VzIGRy aWZ0ZWQuCisgKi8KK3N0YXRpYyBib29sCitjaGVja19zZXF1ZW5jZV9kcmlmdChMb2dpY2FsUmVw U2VxdWVuY2VJbmZvICpzZXFpbmZvKQoreworCWludDY0CQlsb2NhbF9sYXN0X3ZhbHVlOworCWJv b2wJCWxvY2FsX2lzX2NhbGxlZDsKKworCS8qIEdldCBjdXJyZW50IGxvY2FsIHNlcXVlbmNlIHN0 YXRlICovCisJR2V0U2VxdWVuY2Uoc2VxaW5mby0+bG9jYWxyZWxpZCwgJmxvY2FsX2xhc3RfdmFs dWUsICZsb2NhbF9pc19jYWxsZWQpOworCisJLyogQ2hlY2sgaWYgdmFsdWVzIGhhdmUgZHJpZnRl ZCBhbmQgcmV0dXJuIGFjY29yZGluZ2x5ICovCisJcmV0dXJuIChsb2NhbF9sYXN0X3ZhbHVlICE9 IHNlcWluZm8tPmxhc3RfdmFsdWUgfHwKKwkJbG9jYWxfaXNfY2FsbGVkICE9IHNlcWluZm8tPmlz X2NhbGxlZCk7CisKK30KKwogLyoKICAqIENvcHkgZXhpc3RpbmcgZGF0YSBvZiBzZXF1ZW5jZXMg ZnJvbSB0aGUgcHVibGlzaGVyLgorICoKKyAqIElmIHJlbHN0YXRlIGlzIFNVQlJFTF9TVEFURV9S RUFEWSwgb25seSBzeW5jaHJvbml6ZSBzZXF1ZW5jZXMgdGhhdAorICogaGF2ZSBkcmlmdGVkIGZy b20gdGhlaXIgcHVibGlzaGVyIHZhbHVlcy4gT3RoZXJ3aXNlLCBzeW5jaHJvbml6ZQorICogYWxs IHNlcXVlbmNlcy4KKyAqCisgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgYW55IHNlcXVlbmNlcyB3 ZXJlIGFjdHVhbGx5IGNvcGllZC4KICAqLwotc3RhdGljIHZvaWQKLWNvcHlfc2VxdWVuY2VzKFdh bFJlY2VpdmVyQ29ubiAqY29ubikKK3N0YXRpYyBib29sCitjb3B5X3NlcXVlbmNlcyhXYWxSZWNl aXZlckNvbm4gKmNvbm4sIGNoYXIgcmVsc3RhdGUpCiB7CiAJaW50CQkJY3VyX2JhdGNoX2Jhc2Vf aW5kZXggPSAwOwogCWludAkJCW5fc2VxaW5mb3MgPSBsaXN0X2xlbmd0aChzZXFpbmZvcyk7CkBA IC0zOTAsNiArNDM5LDcgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25uKQog CVN0cmluZ0luZm8Jc2Vxc3RyID0gbWFrZVN0cmluZ0luZm8oKTsKIAlTdHJpbmdJbmZvCWNtZCA9 IG1ha2VTdHJpbmdJbmZvKCk7CiAJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJYm9vbAkJZHJpZnRf ZGV0ZWN0ZWQgPSBmYWxzZTsKIAogI2RlZmluZSBNQVhfU0VRVUVOQ0VTX1NZTkNfUEVSX0JBVENI IDEwMAogCkBAIC00OTEsNiArNTQxLDcgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25u ICpjb25uKQogCQkJQ29weVNlcVJlc3VsdCBzeW5jX3N0YXR1czsKIAkJCUxvZ2ljYWxSZXBTZXF1 ZW5jZUluZm8gKnNlcWluZm87CiAJCQlpbnQJCQlzZXFpZHg7CisJCQlib29sCQlzaG91bGRfc3lu YyA9IHRydWU7CiAKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTUwMiwxOSArNTUz LDM0IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAogCQkJc3luY19z dGF0dXMgPSBnZXRfYW5kX3ZhbGlkYXRlX3NlcV9pbmZvKHNsb3QsICZzZXF1ZW5jZV9yZWwsCiAJ CQkJCQkJCQkJCQkJJnNlcWluZm8sICZzZXFpZHgpOwotCQkJaWYgKHN5bmNfc3RhdHVzID09IENP UFlTRVFfU1VDQ0VTUykKKworCQkJLyoKKwkJCSAqIEZvciBzZXF1ZW5jZXMgaW4gUkVBRFkgc3Rh dGUsIG9ubHkgc3luYyBpZiB0aGVyZSdzIGRyaWZ0CisJCQkgKi8KKwkJCWlmIChyZWxzdGF0ZSA9 PSBTVUJSRUxfU1RBVEVfUkVBRFkgJiYgc3luY19zdGF0dXMgPT0gQ09QWVNFUV9TVUNDRVNTKQor CQkJeworCQkJCXNob3VsZF9zeW5jID0gY2hlY2tfc2VxdWVuY2VfZHJpZnQoc2VxaW5mbyk7CisJ CQkJaWYgKHNob3VsZF9zeW5jKQorCQkJCQlkcmlmdF9kZXRlY3RlZCA9IHRydWU7CisJCQl9CisK KwkJCWlmIChzeW5jX3N0YXR1cyA9PSBDT1BZU0VRX1NVQ0NFU1MgJiYgc2hvdWxkX3N5bmMpCiAJ CQkJc3luY19zdGF0dXMgPSBjb3B5X3NlcXVlbmNlKHNlcWluZm8sCi0JCQkJCQkJCQkJCXNlcXVl bmNlX3JlbC0+cmRfcmVsLT5yZWxvd25lcik7CisJCQkJCQkJCQkJCXNlcXVlbmNlX3JlbC0+cmRf cmVsLT5yZWxvd25lciwKKwkJCQkJCQkJCQkJcmVsc3RhdGUpOworCQkJZWxzZSBpZiAoc3luY19z dGF0dXMgPT0gQ09QWVNFUV9TVUNDRVNTICYmICFzaG91bGRfc3luYykKKwkJCQlzeW5jX3N0YXR1 cyA9IENPUFlTRVFfTk9XT1JLOwogCiAJCQlzd2l0Y2ggKHN5bmNfc3RhdHVzKQogCQkJewogCQkJ CWNhc2UgQ09QWVNFUV9TVUNDRVNTOgogCQkJCQllbG9nKERFQlVHMSwKLQkJCQkJCSAibG9naWNh bCByZXBsaWNhdGlvbiBzeW5jaHJvbml6YXRpb24gZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIsIHNl cXVlbmNlIFwiJXMuJXNcIiBoYXMgZmluaXNoZWQiLAorCQkJCQkJICJsb2dpY2FsIHJlcGxpY2F0 aW9uIHN5bmMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIsIHNlcXVlbmNlIFwiJXMuJXNcIiBoYXMg YmVlbiB1cGRhdGVkIiwKIAkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwgc2VxaW5mby0+bnNw bmFtZSwKIAkJCQkJCSBzZXFpbmZvLT5zZXFuYW1lKTsKIAkJCQkJYmF0Y2hfc3VjY2VlZGVkX2Nv dW50Kys7CiAJCQkJCWJyZWFrOworCiAJCQkJY2FzZSBDT1BZU0VRX01JU01BVENIOgogCiAJCQkJ CS8qCkBAIC01MjgsNiArNTk0LDcgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpj b25uKQogCQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIAkJCQkJYmF0Y2hfbWlz bWF0Y2hlZF9jb3VudCsrOwogCQkJCQlicmVhazsKKwogCQkJCWNhc2UgQ09QWVNFUV9JTlNVRkZJ Q0lFTlRfUEVSTToKIAogCQkJCQkvKgpAQCAtNTQxLDYgKzYwOCw3IEBAIGNvcHlfc2VxdWVuY2Vz KFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0 eCk7CiAJCQkJCWJhdGNoX2luc3VmZnBlcm1fY291bnQrKzsKIAkJCQkJYnJlYWs7CisKIAkJCQlj YXNlIENPUFlTRVFfU0tJUFBFRDoKIAogCQkJCQkvKgpAQCAtNTU4LDYgKzYyNiwxNCBAQCBjb3B5 X3NlcXVlbmNlcyhXYWxSZWNlaXZlckNvbm4gKmNvbm4pCiAJCQkJCQliYXRjaF9za2lwcGVkX2Nv dW50Kys7CiAJCQkJCX0KIAkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBDT1BZU0VRX05PV09SSzoK KwkJCQkJCS8qIE5vdGhpbmcgdG8gZG8gKi8KKwkJCQkJCWJyZWFrOworCisJCQkJCWRlZmF1bHQ6 CisJCQkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNlcXVlbmNlIHJlcGxpY2F0aW9uIHJl c3VsdDogJWQiLCAoaW50KSBzeW5jX3N0YXR1cyk7CisKIAkJCX0KIAogCQkJaWYgKHNlcXVlbmNl X3JlbCkKQEAgLTU3NCwxMiArNjUwLDE1IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29u biAqY29ubikKIAkJCQkJCQkJCQkJYmF0Y2hfaW5zdWZmcGVybV9jb3VudCArCiAJCQkJCQkJCQkJ CWJhdGNoX3NraXBwZWRfY291bnQpOwogCi0JCWVsb2coREVCVUcxLAorCQlpZiAocmVsc3RhdGUg PT0gU1VCUkVMX1NUQVRFX0lOSVQgfHwgZHJpZnRfZGV0ZWN0ZWQpCisJCXsKKwkJCWVsb2coREVC VUcxLAogCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHNlcXVlbmNlIHN5bmNocm9uaXphdGlvbiBm b3Igc3Vic2NyaXB0aW9uIFwiJXNcIiAtIGJhdGNoICMlZCA9ICVkIGF0dGVtcHRlZCwgJWQgc3Vj Y2VlZGVkLCAlZCBtaXNtYXRjaGVkLCAlZCBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiwgJWQgbWlz c2luZyBmcm9tIHB1Ymxpc2hlciwgJWQgc2tpcHBlZCIsCiAJCQkgTXlTdWJzY3JpcHRpb24tPm5h bWUsCiAJCQkgKGN1cl9iYXRjaF9iYXNlX2luZGV4IC8gTUFYX1NFUVVFTkNFU19TWU5DX1BFUl9C QVRDSCkgKyAxLAogCQkJIGJhdGNoX3NpemUsIGJhdGNoX3N1Y2NlZWRlZF9jb3VudCwgYmF0Y2hf bWlzbWF0Y2hlZF9jb3VudCwKIAkJCSBiYXRjaF9pbnN1ZmZwZXJtX2NvdW50LCBiYXRjaF9taXNz aW5nX2NvdW50LCBiYXRjaF9za2lwcGVkX2NvdW50KTsKKwkJfQogCiAJCS8qIENvbW1pdCB0aGlz IGJhdGNoLCBhbmQgcHJlcGFyZSBmb3IgbmV4dCBiYXRjaCAqLwogCQlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKQEAgLTYwOCwyMyArNjg3LDI4IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2Vp dmVyQ29ubiAqY29ubikKIAkvKiBSZXBvcnQgbWlzbWF0Y2hlcywgcGVybWlzc2lvbiBpc3N1ZXMs IG9yIG1pc3Npbmcgc2VxdWVuY2VzICovCiAJcmVwb3J0X3NlcXVlbmNlX2Vycm9ycyhtaXNtYXRj aGVkX3NlcXNfaWR4LCBpbnN1ZmZwZXJtX3NlcXNfaWR4LAogCQkJCQkJICAgbWlzc2luZ19zZXFz X2lkeCk7CisKKwlsaXN0X2ZyZWUoc2VxaW5mb3MpOworCXNlcWluZm9zID0gTklMOworCisJcmV0 dXJuIGRyaWZ0X2RldGVjdGVkOwogfQogCiAvKgogICogSWRlbnRpZmllcyBzZXF1ZW5jZXMgdGhh dCByZXF1aXJlIHN5bmNocm9uaXphdGlvbiBhbmQgaW5pdGlhdGVzIHRoZQogICogc3luY2hyb25p emF0aW9uIHByb2Nlc3MuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHNlcXVlbmNlcyBoYXZlIGJl ZW4gdXBkYXRlZC4KICAqLwotc3RhdGljIHZvaWQKLUxvZ2ljYWxSZXBTeW5jU2VxdWVuY2VzKHZv aWQpCitzdGF0aWMgYm9vbAorTG9naWNhbFJlcFN5bmNTZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25u ICpjb25uLCBjaGFyIHJlbHN0YXRlKQogewotCWNoYXIJICAgKmVycjsKLQlib29sCQltdXN0X3Vz ZV9wYXNzd29yZDsKIAlSZWxhdGlvbglyZWw7CiAJSGVhcFR1cGxlCXR1cDsKIAlTY2FuS2V5RGF0 YSBza2V5WzJdOwogCVN5c1NjYW5EZXNjIHNjYW47CiAJT2lkCQkJc3ViaWQgPSBNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkOwotCVN0cmluZ0luZm9EYXRhIGFwcF9uYW1lOworCWJvb2wJCXNlcXVl bmNlX2NvcGllZCA9IGZhbHNlOwogCiAJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIApAQCAt NjM2LDkgKzcyMCw5IEBAIExvZ2ljYWxSZXBTeW5jU2VxdWVuY2VzKHZvaWQpCiAJCQkJT2JqZWN0 SWRHZXREYXR1bShzdWJpZCkpOwogCiAJU2NhbktleUluaXQoJnNrZXlbMV0sCi0JCQkJQW51bV9w Z19zdWJzY3JpcHRpb25fcmVsX3Nyc3Vic3RhdGUsCi0JCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX0NIQVJFUSwKLQkJCQlDaGFyR2V0RGF0dW0oU1VCUkVMX1NUQVRFX0lOSVQpKTsKKwkJCUFu dW1fcGdfc3Vic2NyaXB0aW9uX3JlbF9zcnN1YnN0YXRlLAorCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX0NIQVJFUSwKKwkJCUNoYXJHZXREYXR1bShyZWxzdGF0ZSkpOwogCiAJc2NhbiA9IHN5 c3RhYmxlX2JlZ2luc2NhbihyZWwsIEludmFsaWRPaWQsIGZhbHNlLAogCQkJCQkJCSAgTlVMTCwg Miwgc2tleSk7CkBAIC02OTMsMzYgKzc3NywxNiBAQCBMb2dpY2FsUmVwU3luY1NlcXVlbmNlcyh2 b2lkKQogCSAqIEV4aXQgZWFybHkgaWYgbm8gY2F0YWxvZyBlbnRyaWVzIGZvdW5kLCBsaWtlbHkg ZHVlIHRvIGNvbmN1cnJlbnQgZHJvcHMuCiAJICovCiAJaWYgKCFzZXFpbmZvcykKLQkJcmV0dXJu OwotCi0JLyogSXMgdGhlIHVzZSBvZiBhIHBhc3N3b3JkIG1hbmRhdG9yeT8gKi8KLQltdXN0X3Vz ZV9wYXNzd29yZCA9IE15U3Vic2NyaXB0aW9uLT5wYXNzd29yZHJlcXVpcmVkICYmCi0JCSFNeVN1 YnNjcmlwdGlvbi0+b3duZXJzdXBlcnVzZXI7CisJCXJldHVybiBmYWxzZTsKIAotCWluaXRTdHJp bmdJbmZvKCZhcHBfbmFtZSk7Ci0JYXBwZW5kU3RyaW5nSW5mbygmYXBwX25hbWUsICJwZ18ldV9z ZXF1ZW5jZV9zeW5jXyIgVUlOVDY0X0ZPUk1BVCwKLQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQs IEdldFN5c3RlbUlkZW50aWZpZXIoKSk7CisJLyogUGVyZm9ybSBzeW5jaHJvbml6YXRpb24gKi8K KwlzZXF1ZW5jZV9jb3BpZWQgPSBjb3B5X3NlcXVlbmNlcyhjb25uLCByZWxzdGF0ZSk7CiAKLQkv KgotCSAqIEVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiB0byB0aGUgcHVibGlzaGVyIGZvciBzZXF1 ZW5jZSBzeW5jaHJvbml6YXRpb24uCi0JICovCi0JTG9nUmVwV29ya2VyV2FsUmN2Q29ubiA9Ci0J CXdhbHJjdl9jb25uZWN0KE15U3Vic2NyaXB0aW9uLT5jb25uaW5mbywgdHJ1ZSwgdHJ1ZSwKLQkJ CQkJICAgbXVzdF91c2VfcGFzc3dvcmQsCi0JCQkJCSAgIGFwcF9uYW1lLmRhdGEsICZlcnIpOwot CWlmIChMb2dSZXBXb3JrZXJXYWxSY3ZDb25uID09IE5VTEwpCi0JCWVyZXBvcnQoRVJST1IsCi0J CQkJZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCi0JCQkJZXJybXNnKCJzZXF1 ZW5jZXN5bmMgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIGNvdWxkIG5vdCBjb25uZWN0 IHRvIHRoZSBwdWJsaXNoZXI6ICVzIiwKLQkJCQkJICAgTXlTdWJzY3JpcHRpb24tPm5hbWUsIGVy cikpOwotCi0JcGZyZWUoYXBwX25hbWUuZGF0YSk7Ci0KLQljb3B5X3NlcXVlbmNlcyhMb2dSZXBX b3JrZXJXYWxSY3ZDb25uKTsKKwlyZXR1cm4gc2VxdWVuY2VfY29waWVkOwogfQogCiAvKgotICog RXhlY3V0ZSB0aGUgaW5pdGlhbCBzeW5jIHdpdGggZXJyb3IgaGFuZGxpbmcuIERpc2FibGUgdGhl IHN1YnNjcmlwdGlvbiwKKyAqIEV4ZWN1dGUgdGhlIHNlcXVlbmNlIHN5bmMgd2l0aCBlcnJvciBo YW5kbGluZy4gRGlzYWJsZSB0aGUgc3Vic2NyaXB0aW9uLAogICogaWYgcmVxdWlyZWQuCiAgKgog ICogTm90ZSB0aGF0IHdlIGRvbid0IGhhbmRsZSBGQVRBTCBlcnJvcnMgd2hpY2ggYXJlIHByb2Jh Ymx5IGJlY2F1c2Ugb2Ygc3lzdGVtCkBAIC03MzUsOCArNzk5LDY1IEBAIHN0YXJ0X3NlcXVlbmNl X3N5bmModm9pZCkKIAogCVBHX1RSWSgpOwogCXsKLQkJLyogQ2FsbCBpbml0aWFsIHN5bmMuICov Ci0JCUxvZ2ljYWxSZXBTeW5jU2VxdWVuY2VzKCk7CisJCWNoYXIgICAgICAgKmVycjsKKwkJYm9v bAkJbXVzdF91c2VfcGFzc3dvcmQ7CisJCVN0cmluZ0luZm9EYXRhIGFwcF9uYW1lOworCisJCS8q IElzIHRoZSB1c2Ugb2YgYSBwYXNzd29yZCBtYW5kYXRvcnk/ICovCisJCW11c3RfdXNlX3Bhc3N3 b3JkID0gTXlTdWJzY3JpcHRpb24tPnBhc3N3b3JkcmVxdWlyZWQgJiYKKwkJCSFNeVN1YnNjcmlw dGlvbi0+b3duZXJzdXBlcnVzZXI7CisKKwkJaW5pdFN0cmluZ0luZm8oJmFwcF9uYW1lKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbygmYXBwX25hbWUsICJwZ18ldV9zZXF1ZW5jZV9zeW5jXyIgVUlOVDY0 X0ZPUk1BVCwKKwkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+b2lkLCBHZXRTeXN0ZW1JZGVudGlmaWVy KCkpOworCisJCS8qCisJCSAqIEVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiB0byB0aGUgcHVibGlz aGVyIGZvciBzZXF1ZW5jZSBzeW5jaHJvbml6YXRpb24uCisJCSAqLworCQlMb2dSZXBXb3JrZXJX YWxSY3ZDb25uID0KKwkJCXdhbHJjdl9jb25uZWN0KE15U3Vic2NyaXB0aW9uLT5jb25uaW5mbywg dHJ1ZSwgdHJ1ZSwKKwkJCQkJCSAgIG11c3RfdXNlX3Bhc3N3b3JkLAorCQkJCQkJICAgYXBwX25h bWUuZGF0YSwgJmVycik7CisJCWlmIChMb2dSZXBXb3JrZXJXYWxSY3ZDb25uID09IE5VTEwpCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJF KSwKKwkJCQkJZXJybXNnKCJzZXF1ZW5jZXN5bmMgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIl c1wiIGNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJCSAgIE15 U3Vic2NyaXB0aW9uLT5uYW1lLCBlcnIpKTsKKworCQlwZnJlZShhcHBfbmFtZS5kYXRhKTsKKwor CQlmb3IgKDs7KQorCQl7CisJCQlib29sIHNlcXVlbmNlX2NvcGllZCA9IGZhbHNlOworCisJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCQkvKiBSdW4gc3luYyBmb3Igc2VxdWVuY2VzIGlu IFJFQURZIHN0YXRlICovCisJCQlzZXF1ZW5jZV9jb3BpZWQgfD0gTG9naWNhbFJlcFN5bmNTZXF1 ZW5jZXMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgU1VCUkVMX1NUQVRFX1JFQURZKTsKKworCQkJ LyogQ2FsbCBpbml0aWFsIHN5bmMgZm9yIHNlcXVlbmNlcyBpbiBJTklUIHN0YXRlICovCisJCQlz ZXF1ZW5jZV9jb3BpZWQgfD0gTG9naWNhbFJlcFN5bmNTZXF1ZW5jZXMoTG9nUmVwV29ya2VyV2Fs UmN2Q29ubiwgU1VCUkVMX1NUQVRFX0lOSVQpOworCisJCQkvKiBBZGp1c3Qgc2xlZXAgaW50ZXJ2 YWwgYmFzZWQgb24gZHJpZnQgZGV0ZWN0aW9uOiAqLworCQkJaWYgKHNlcXVlbmNlX2NvcGllZCkK KwkJCXsKKwkJCQlzbGVlcF9tcyA9IFNFUVNZTkNfTUlOX1NMRUVQX01TOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJLyogTm8gZHJpZnQgZGV0ZWN0ZWQsIHNvIGRvdWJsZSB0aGUgc2xlZXAgdGlt ZSwgYnV0IG5vdCBiZXlvbmQKKwkJCSAqIHRoZSBtYXhpbXVtIGFsbG93YWJsZSB2YWx1ZS4KKwkJ CSAqLworCQkJCXNsZWVwX21zID0gTWluKHNsZWVwX21zICogMiwgU0VRU1lOQ19NQVhfU0xFRVBf TVMpOworCQkJfQorCisJCQkvKiBTbGVlcCBmb3IgdGhlIGNvbmZpZ3VyZWQgaW50ZXJ2YWwgKi8K KwkJCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xf VElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkJIHNsZWVwX21zLAorCQkJCQkJ CSBXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0UpOworCQkJUmVzZXRMYXRjaChN eUxhdGNoKTsKKwkJfQogCX0KIAlQR19DQVRDSCgpOwogCXsKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYwpp bmRleCA4YjkxYmMwMDA2Mi4uYjhiZGZlYmIxNWEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90 YWItY29tcGxldGUuaW4uYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKQEAg LTIzMzEsOCArMjMzMSw4IEBAIG1hdGNoX3ByZXZpb3VzX3dvcmRzKGludCBwYXR0ZXJuX2lkLAog CS8qIEFMVEVSIFNVQlNDUklQVElPTiA8bmFtZT4gKi8KIAllbHNlIGlmIChNYXRjaGVzKCJBTFRF UiIsICJTVUJTQ1JJUFRJT04iLCBNYXRjaEFueSkpCiAJCUNPTVBMRVRFX1dJVEgoIkNPTk5FQ1RJ T04iLCAiRU5BQkxFIiwgIkRJU0FCTEUiLCAiT1dORVIgVE8iLAotCQkJCQkgICJSRU5BTUUgVE8i LCAiUkVGUkVTSCBQVUJMSUNBVElPTiIsICJSRUZSRVNIIFNFUVVFTkNFUyIsCi0JCQkJCSAgIlNF VCIsICJTS0lQICgiLCAiQUREIFBVQkxJQ0FUSU9OIiwgIkRST1AgUFVCTElDQVRJT04iKTsKKwkJ CQkJICAiUkVOQU1FIFRPIiwgIlJFRlJFU0ggUFVCTElDQVRJT04iLCAiU0VUIiwgIlNLSVAgKCIs CisJCQkJCSAgIkFERCBQVUJMSUNBVElPTiIsICJEUk9QIFBVQkxJQ0FUSU9OIik7CiAJLyogQUxU RVIgU1VCU0NSSVBUSU9OIDxuYW1lPiBSRUZSRVNIICovCiAJZWxzZSBpZiAoTWF0Y2hlcygiQUxU RVIiLCAiU1VCU0NSSVBUSU9OIiwgTWF0Y2hBbnksIE1hdGNoQW55TiwgIlJFRlJFU0giKSkKIAkJ Q09NUExFVEVfV0lUSCgiUFVCTElDQVRJT04iLCAiU0VRVUVOQ0VTIik7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2Vx dWVuY2UuaAppbmRleCAyYzNjNGEzZjA3NC4uOTg1NTkyMDllNzAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2Vx dWVuY2UuaApAQCAtNDcsNiArNDcsNyBAQCBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVl bmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTZXFTdG10ICpzdG10KTsKIGV4dGVybiB2b2lk IFNlcXVlbmNlQ2hhbmdlUGVyc2lzdGVuY2UoT2lkIHJlbGlkLCBjaGFyIG5ld3JlbHBlcnNpc3Rl bmNlKTsKIGV4dGVybiB2b2lkIERlbGV0ZVNlcXVlbmNlVHVwbGUoT2lkIHJlbGlkKTsKIGV4dGVy biB2b2lkIFJlc2V0U2VxdWVuY2UoT2lkIHNlcV9yZWxpZCk7CitleHRlcm4gdm9pZCBHZXRTZXF1 ZW5jZShPaWQgcmVsaWQsIGludDY0ICpsYXN0X3ZhbHVlLCBib29sICppc19jYWxsZWQpOwogZXh0 ZXJuIHZvaWQgU2V0U2VxdWVuY2UoT2lkIHJlbGlkLCBpbnQ2NCBuZXh0LCBib29sIGlzY2FsbGVk KTsKIGV4dGVybiB2b2lkIFJlc2V0U2VxdWVuY2VDYWNoZXModm9pZCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaAppbmRleCA2NDZkNmNlZDc2My4uNDNiMzI5MmZkMmMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmgKQEAgLTQzOTEsNyArNDM5MSw2IEBAIHR5cGVkZWYgZW51bSBBbHRlclN1YnNjcmlwdGlv blR5cGUKIAlBTFRFUl9TVUJTQ1JJUFRJT05fQUREX1BVQkxJQ0FUSU9OLAogCUFMVEVSX1NVQlND UklQVElPTl9EUk9QX1BVQkxJQ0FUSU9OLAogCUFMVEVSX1NVQlNDUklQVElPTl9SRUZSRVNIX1BV QkxJQ0FUSU9OLAotCUFMVEVSX1NVQlNDUklQVElPTl9SRUZSRVNIX1NFUVVFTkNFUywKIAlBTFRF Ul9TVUJTQ1JJUFRJT05fRU5BQkxFRCwKIAlBTFRFUl9TVUJTQ1JJUFRJT05fU0tJUCwKIH0gQWx0 ZXJTdWJzY3JpcHRpb25UeXBlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDI2X3N0YXRzLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI2X3N0YXRzLnBsCmluZGV4 IDVkNDU3MDYwYTAyLi4yZmUyMDlmNDYxZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDI2X3N0YXRzLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyNl9zdGF0 cy5wbApAQCAtMTYsNiArMTYsOCBAQCAkbm9kZV9wdWJsaXNoZXItPnN0YXJ0OwogIyBDcmVhdGUg c3Vic2NyaWJlciBub2RlLgogbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOwogJG5vZGVfc3Vic2NyaWJlci0+aW5pdDsKKyRu b2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCSJtYXhfbG9n aWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzID0gMTAiKTsKICRub2RlX3N1YnNjcmliZXItPnN0YXJ0 OwogCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNl9zZXF1ZW5jZXMu cGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzZfc2VxdWVuY2VzLnBsCmluZGV4IDQ3MTc4 MGEzNTg1Li5mYWMxNmQ2ZTk2NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDM2X3NlcXVlbmNlcy5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzZfc2VxdWVu Y2VzLnBsCkBAIC03NSw4ICs3NSw3IEBAIGlzKCRyZXN1bHQsICcxMDB8dCcsCiAKICMjIyMjIyMj IyMKICMjIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiBzaG91bGQg Y2F1c2Ugc3luYyBvZiBuZXcKLSMgc2VxdWVuY2VzIG9mIHRoZSBwdWJsaXNoZXIsIGJ1dCBjaGFu Z2VzIHRvIGV4aXN0aW5nIHNlcXVlbmNlcyBzaG91bGQKLSMgbm90IGJlIHN5bmNlZC4KKyMgc2Vx dWVuY2VzIG9mIHRoZSBwdWJsaXNoZXIuCiAjIyMjIyMjIyMjCiAKICMgQ3JlYXRlIGEgbmV3IHNl cXVlbmNlICdyZWdyZXNzX3MyJywgYW5kIHVwZGF0ZSBleGlzdGluZyBzZXF1ZW5jZSAncmVncmVz c19zMScKQEAgLTk3LDE5ICs5Niw2IEBAICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoCiAkbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRz eW5jZWRfcXVlcnkpCiAgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN1YnNj cmliZXIgdG8gc3luY2hyb25pemUgZGF0YSI7CiAKLSRyZXN1bHQgPSAkbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcSgKLQlTRUxFQ1QgbGFzdF92YWx1ZSwgaXNfY2Fs bGVkIEZST00gcmVncmVzc19zMTsKLSkpOwotaXMoJHJlc3VsdCwgJzIwMHx0JywgJ0NoZWNrIHNl cXVlbmNlIHZhbHVlIGluIHRoZSBwdWJsaXNoZXInKTsKLQotIyBDaGVjayAtIGV4aXN0aW5nIHNl cXVlbmNlICgncmVncmVzc19zMScpIGlzIG5vdCBzeW5jZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JU0VMRUNUIGxhc3RfdmFsdWUs IGlzX2NhbGxlZCBGUk9NIHJlZ3Jlc3NfczE7Ci0pKTsKLWlzKCRyZXN1bHQsICcxMDB8dCcsICdS RUZSRVNIIFBVQkxJQ0FUSU9OIHdpbGwgbm90IHN5bmMgZXhpc3Rpbmcgc2VxdWVuY2UnKTsKLQog IyBDaGVjayAtIG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZSAoJ3JlZ3Jlc3NfczInKSBpcyBzeW5j ZWQKICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCiAJJ3Bvc3RncmVzJywg cXEoCkBAIC0xMTksMTIgKzEwNSw5IEBAIGlzKCRyZXN1bHQsICcxMDB8dCcsCiAJJ1JFRlJFU0gg UFVCTElDQVRJT04gd2lsbCBzeW5jIG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZScpOwogCiAjIyMj IyMjIyMjCi0jIFRlc3Q6IFJFRlJFU0ggU0VRVUVOQ0VTIGFuZCBSRUZSRVNIIFBVQkxJQ0FUSU9O IChjb3B5X2RhdGEgPSBmYWxzZSkKLSMKLSMgMS4gQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZS RVNIIFNFUVVFTkNFUyBzaG91bGQgcmUtc3luY2hyb25pemUgYWxsCi0jICAgIGV4aXN0aW5nIHNl cXVlbmNlcywgYnV0IG5vdCBzeW5jaHJvbml6ZSBuZXdseSBhZGRlZCBvbmVzLgotIyAyLiBBTFRF UiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04gd2l0aCAoY29weV9kYXRhID0g ZmFsc2UpIHNob3VsZAotIyAgICBhbHNvIG5vdCB1cGRhdGUgc2VxdWVuY2UgdmFsdWVzIGZvciBu ZXdseSBhZGRlZCBzZXF1ZW5jZXMuCisjIFRlc3Q6CisjIDEuIEF1dG9tYXRpYyB1cGRhdGUgb2Yg ZXhpc3Rpbmcgc2VxdWVuY2UgdmFsdWVzCisjIDIuIE5ld2x5IGFkZGVkIHNlcXVlbmNlcyBhcmUg bm90IGF1dG9tYXRpY2FsbHkgdXBkYXRlZC4KICMjIyMjIyMjIyMKIAogIyBDcmVhdGUgYSBuZXcg c2VxdWVuY2UgJ3JlZ3Jlc3NfczMnLCBhbmQgdXBkYXRlIHRoZSBleGlzdGluZyBzZXF1ZW5jZQpA QCAtMTM4LDUxICsxMjEsMjUgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCiAJSU5TRVJU IElOVE8gcmVncmVzc19zZXFfdGVzdCBTRUxFQ1QgbmV4dHZhbCgncmVncmVzc19zMicpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwKTsKICkpOwogCi0jIDEuIERvIEFMVEVSIFNVQlNDUklQVElP TiAuLi4gUkVGUkVTSCBTRVFVRU5DRVMKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nfc2Vx X3N1YiBSRUZSRVNIIFNFUVVFTkNFUzsKLSkpOwotJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVy eV91bnRpbCgncG9zdGdyZXMnLCAkc3luY2VkX3F1ZXJ5KQotICBvciBkaWUgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRvIHN5bmNocm9uaXplIGRhdGEiOwotCiAjIENo ZWNrIC0gZXhpc3Rpbmcgc2VxdWVuY2VzICgncmVncmVzc19zMScgYW5kICdyZWdyZXNzX3MyJykg YXJlIHN5bmNlZAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKLQkncG9z dGdyZXMnLCBxcSgKLQlTRUxFQ1QgbGFzdF92YWx1ZSwgaXNfY2FsbGVkIEZST00gcmVncmVzc19z MTsKLSkpOwotaXMoJHJlc3VsdCwgJzIwMHx0JywgJ1JFRlJFU0ggU0VRVUVOQ0VTIHdpbGwgc3lu YyBleGlzdGluZyBzZXF1ZW5jZXMnKTsKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JU0VMRUNUIGxhc3RfdmFsdWUsIGlzX2NhbGxlZCBG Uk9NIHJlZ3Jlc3NfczI7Ci0pKTsKLWlzKCRyZXN1bHQsICcyMDB8dCcsICdSRUZSRVNIIFNFUVVF TkNFUyB3aWxsIHN5bmMgZXhpc3Rpbmcgc2VxdWVuY2VzJyk7CiAKLSMgQ2hlY2sgLSBuZXdseSBw dWJsaXNoZWQgc2VxdWVuY2UgKCdyZWdyZXNzX3MzJykgaXMgbm90IHN5bmNlZAotJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcSgKLQlTRUxFQ1Qg bGFzdF92YWx1ZSwgaXNfY2FsbGVkIEZST00gcmVncmVzc19zMzsKLSkpOwotaXMoJHJlc3VsdCwg JzF8ZicsCi0JJ1JFRlJFU0ggU0VRVUVOQ0VTIHdpbGwgbm90IHN5bmMgbmV3bHkgcHVibGlzaGVk IHNlcXVlbmNlJyk7CisjIFBvbGwgdW50aWwgcmVncmVzc19zMSByZWZsZWN0cyB0aGUgdXBkYXRl ZCBzZXF1ZW5jZSB2YWx1ZQorJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9z dGdyZXMnLAorICAgIHFxKFNFTEVDVCBsYXN0X3ZhbHVlID0gMjAwIEFORCBpc19jYWxsZWQgPSAn dCcgRlJPTSByZWdyZXNzX3MxOykpCisgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIHJlZ3Jlc3NfczEgc2VxdWVuY2UgdG8gc3luYyI7CiAKLSMgMi4gRG8gQUxURVIgU1VCU0NS SVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9OIHdpdGggY29weV9kYXRhIGFzIGZhbHNlCi0k cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHFxKAot CUFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3NlcV9zdWIgUkVGUkVTSCBQVUJMSUNBVElPTiBX SVRIIChjb3B5X2RhdGEgPSBmYWxzZSk7Ci0pKTsKLSRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVl cnlfdW50aWwoJ3Bvc3RncmVzJywgJHN5bmNlZF9xdWVyeSkKLSAgb3IgZGllICJUaW1lZCBvdXQg d2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJlciB0byBzeW5jaHJvbml6ZSBkYXRhIjsKKyMgUG9s bCB1bnRpbCByZWdyZXNzX3MyIHJlZmxlY3RzIHRoZSB1cGRhdGVkIHNlcXVlbmNlIHZhbHVlCisk bm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAgcXEoU0VM RUNUIGxhc3RfdmFsdWUgPSAyMDAgQU5EIGlzX2NhbGxlZCA9ICd0JyBGUk9NIHJlZ3Jlc3NfczI7 KSkKKyAgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgcmVncmVzc19zMiBzZXF1 ZW5jZSB0byBzeW5jIjsKIAotIyBDaGVjayAtIG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZSAoJ3Jl Z3Jlc3NfczMnKSBpcyBub3Qgc3luY2VkIHdpdGggY29weV9kYXRhCi0jIGFzIGZhbHNlLgorIyBD aGVjayAtIG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZSAoJ3JlZ3Jlc3NfczMnKSBpcyBub3Qgc3lu Y2VkCiAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAogCSdwb3N0Z3Jlcycs IHFxKAogCVNFTEVDVCBsYXN0X3ZhbHVlLCBpc19jYWxsZWQgRlJPTSByZWdyZXNzX3MzOwogKSk7 CiBpcygkcmVzdWx0LCAnMXxmJywKLQknUkVGUkVTSCBQVUJMSUNBVElPTiB3aWxsIG5vdCBzeW5j IG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZSB3aXRoIGNvcHlfZGF0YSBhcyBmYWxzZScKLSk7CisJ J05ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZSBhcmUgbm90IHN5bmNlZCBhdXRvbWF0aWNhbGx5Jyk7 CiAKICMjIyMjIyMjIyMKICMgQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FU SU9OIHNob3VsZCByZXBvcnQgYW4gZXJyb3Igd2hlbjoKLS0gCjIuNDcuMwoK --00000000000081de370649e35086--