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 1w8hAb-000n2f-2f for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2026 16:14:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w8hAa-00CXYL-2C for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Apr 2026 16:14:53 +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 1w8hAa-00CXYD-14 for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2026 16:14:52 +0000 Received: from mail-yx1-xb12b.google.com ([2607:f8b0:4864:20::b12b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w8hAY-00000000OtI-0vUK for pgsql-hackers@lists.postgresql.org; Fri, 03 Apr 2026 16:14:52 +0000 Received: by mail-yx1-xb12b.google.com with SMTP id 956f58d0204a3-6501d242e2fso1941921d50.3 for ; Fri, 03 Apr 2026 09:14:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775232889; cv=none; d=google.com; s=arc-20240605; b=V4cJQIKw1/9wFFsx51wBoW2BuoE9Xc11h6AZwDnL+wR+Php0LmkDJIvZJfgshLNK+B waHm2+XJrbGEGwle/L1nKXr4Wt8BWYbileFTsQX588kU9DXDWsGPdai94Rt4Z5JwYDOU S3qqXH98jZhOjxqbm+h54PyrJmxdS++MV6uNA12+5lJ4H+NTNmZq9jvqNMec8DBmM+II YsCRjGB6Aw721JGldcboSspsnswPtDstxvVEcAfBRWU9wD/zVuJJjugr3k2LxHAN1d4v /0LYaDUvLty0pE/t+MY2gekwxGXtV0sTW2I0sLih/Y84VUZSmyLHV40nCeqE1b6nP0jM E/gw== 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=HHeu1S5gJgoeOmaLYUf10KeJYcxnL7r+BBrbgrKA9y0=; fh=cgNctwBsGJP3co2uUttFIvGjmfvJJweuEt+A/31y1C0=; b=D8/uVqhScynIB+8e7Kx+11bFoIHBu7RNrqXXrvDgesODo3SP4fK7PNa29OvATSmqly svg43bIS49j7D2lRJYpZxMYsMBnOr2k+dr+FAG/vh0tHNc85Jcjdh4dqDbqTpAoMnLpA N2y2dWW/tFNMo+UwuwtjIH+zZoKVGcxupXLdIud0IIpCuGlZPn1XsR/iI+/Q/K1E1acE BIl3BGNFdZerVHz5NjGTQlElffpZ81AEJIzu4BLRoxFD4eP1ZbLuCGf/2FGIrK8F1eB0 Gl9k+wmKd6ARP7jotbclc/R7DfV0FgYVlYvPgjuLUdXYLFTMuL3GojY4lmuqsDO51vun u3ow==; 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=20251104; t=1775232889; x=1775837689; darn=lists.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=HHeu1S5gJgoeOmaLYUf10KeJYcxnL7r+BBrbgrKA9y0=; b=rSfsEG4MBTb8QwlbbhUjE25+64u5H+GGG1o1oT7XmTLEG48CF8GdBm4wl6QL9OgI8k xQ1LWZMFIxcAZdyPb/Czi1pHOhpkXiq+uHDbnLkuf/5y6XSvU3zmih38mo6DuBa7EIgU pk9qmafvRQU61vtgjs44MXbSMcbDm/09Rdo8plJTysH0WjCBDuspvWfqJ7xT5I2oiAOY nBMkkY2juaxMuC+bB3JqifacJCZO8GLaawg29GSCWyqKFrmmUQpJfiNOq32+B/bZC4ZR xpIkztjru9TyUSGicbC9JA6rVUK7ibi/0Chylfn1EPWbGz0mzmBeFggYXiccxmSmVVqD UVMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775232889; x=1775837689; 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=HHeu1S5gJgoeOmaLYUf10KeJYcxnL7r+BBrbgrKA9y0=; b=De3ZEpWnEzLoWzGY7bPBGC5dJlntwkRWibEysazJvCElADcVLeEBrmJ3Iru3mp0v2R 8JHHzb+oHhe+8kdECgX25bPrij326s86dF2RykkI7QsS3xJP4zC+88ow+M3jnM5uFyW0 uQJsIW+Hfrrbf7avy5kKdW/oo/ZxMEOOydjkkbFxtZLTLCwobcj9Kr3lha4Mh2DSzwSF F6OZ0E2c2IjgDlMRzvRjhVTagkJWKcezWjlhcytUbmp5/PUt1xr5yFhmsqdAlmzy7PVk 97RE0Twx9QM8z5mwA3EGlweP5SfTuBfnISSuwQVAkLeWxsm8AeuW5zs/wIIXJqORj0K9 UDQA== X-Gm-Message-State: AOJu0Yy+C+lfnObp0u8LUahWva1giCiMKtFXkdPYB8mmLatpQBwk68Ge YgbGdXlEYgoBFWS2HyHfv2T/i60bm2NQoy0y25bvajguVwLHPzrMbS/6NkyodtjaCHIiWFVIGLv QQHvAbsic36E653AEgnHSyhK/42v68bw= X-Gm-Gg: AeBDietD0tJ2NyV2NqVu/7KM4vhdG4a9cZHK8G1kQY15mfYJhlmuLcFPYpB+258EDxg 7F9FZOWDWvaenjL7KCmKehwIV5HuvGfDr64oYDNuF9hJfag9tsm5CawlRJ919Bjcd9eTXjZMeUA ExCCQpFDKqybsHGHICTWCPdcMVwFo82Xbc0LKfEc8ATwuFaSmjKGUXGXAErtFIKZb9s1iim5FZ5 WrGL/U7fN0OgPHRn66K/NN6/Uj0weZPPNk+l2a03Hz/qH7e8KFUHYMJpBsfrbP7uS/Gp4gfvcpk HEAvIzLM58fEQF0XbA== X-Received: by 2002:a05:690e:154f:10b0:64c:b395:17a6 with SMTP id 956f58d0204a3-650486b6bd3mr2669061d50.9.1775232888753; Fri, 03 Apr 2026 09:14:48 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: shawn wang Date: Sat, 4 Apr 2026 00:14:34 +0800 X-Gm-Features: AQROBzCKkt4jb1wsQwWmrFOMamvHT68qrhkvfwe5yEotPwcAm-K82HTN_BeV8Ok Message-ID: Subject: Re: Add logical_decoding_spill_limit to cap spill file disk usage per slot To: Bharath Rupireddy Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000ba7f92064e909d2f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ba7f92064e909d2f Content-Type: multipart/alternative; boundary="000000000000ba7f92064e909d2b" --000000000000ba7f92064e909d2b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Bharath, Thank you for the thorough and thoughtful review! > Having a lot of spill files also increases crash/recovery times. > However, files spilling to disk causing no-space-left-on-disk issues > leading to downtime applies to WAL files, historical catalog snapshot > files, subtransaction overflow files, CLOG (and all the subsystems > backed by SLRU data structure), etc. - basically any Postgres > subsystem writing files to disk. I'm a bit worried that we may end up > solving disk space issues, which IMHO are outside of the database > scope, in the database. Others may have different opinions though. That's a fair philosophical point. However, I'd argue that spill files are uniquely unprotected compared to the other subsystems you mentioned: - WAL files =E2=86=92 max_slot_wal_keep_size - Temp files =E2=86=92 temp_file_limit - SLRU/CLOG =E2=86=92 bounded by design (sized proportionally to active X= IDs) Spill files are the gap: they can grow proportionally to the *data volume* of in-progress transactions, not to the number of transactions, and there is no existing upper bound. A single bulk-load transaction replicated via logical decoding can generate tens of GBs of spill files with no way for the DBA to cap it. So this is not about solving a general OS-level disk problem in the database; it is about providing the same kind of safety net that already exists for WAL (max_slot_wal_keep_size) and temp files (temp_file_limit) =E2=80=94 a per-subsystem guardrail that the DBA can configure. > How common is this issue? Could you please add a test case to the > proposed patch that without this feature would otherwise hit the issue > described? Typically triggered by bulk data migrations or long-running DDL on large tables, combined with a subscriber that fell behind. Each incident caused the instance to go read-only, affecting all workloads =E2=80=94 not just replication. We have also seen reports of this in pgsql-general and on community forums, though the root cause is not always identified as spill files. Absolutely. I will add a TAP test that: 1. Creates 10 logical replication slots with test_decoding. 2. Starts a large transaction that generates spill files exceeding the configured logical_decoding_spill_limit. 3. Verifies that the walsender ERRORs out with the expected ERRCODE_CONFIGURATION_LIMIT_EXCEEDED. 4. Verifies that spill files are cleaned up after the error. I will include the 4 in v2. Test case: 1. build a table: psql -p 5432 -d postgres -c " CREATE TABLE spill_load ( id bigint, payload text ); " 2. build some slots: #base for i in $(seq 1 10); do psql -p 5432 -d postgres -c \ "SELECT pg_create_logical_replication_slot('spill_slot_${i}', 'test_decoding');" done psql -p 5432 -d postgres -c \ "SELECT slot_name, plugin, active FROM pg_replication_slots ORDER BY slot_name;" 3. start pg_recvlogical: #bash mkdir -p /tmp/spill_test/pids for i in $(seq 1 10); do pg_recvlogical \ --dbname=3D"port=3D5432 dbname=3Dpostgres" \ --slot=3D"spill_slot_${i}" \ --start \ --no-loop \ --status-interval=3D0 \ --file=3D/dev/null & echo $! > /tmp/spill_test/pids/recv_${i}.pid echo "Started pg_recvlogical for spill_slot_${i}, PID=3D$!" done sleep 2 psql -p 5432 -d postgres -c \ "SELECT slot_name, active, active_pid FROM pg_replication_slots WHERE slot_name LIKE 'spill_slot_%' ORDER BY slot_name;" 4. make a big transaction: psql -p 5432 -d postgres -c " BEGIN; INSERT INTO spill_load SELECT i, repeat('X', 100000) FROM generate_series(1, 10000000) i; COMMIT; " > Having said that, were alternatives like disabling subscriptions when > seen occupying the disk space considered? Yes, we considered monitoring-based approaches, but they have inherent limitations: 1. Reaction latency: Even with 1-second polling, a high-throughput bulk load can spill gigabytes between two polls. The spill rate can easily exceed 100 MB/s, so a 5-second monitoring gap means 500 MB of uncontrolled growth. 2. External dependency: Relying on an external tool means the protection is not available by default. Every deployment must set up and maintain the monitoring =E2=80=94 and if it fails or is misconfigured, the disk-full scenario still occurs. 3. No subscriber-side control: pg_recvlogical users and third-party CDC tools (Debezium, etc.) that consume directly from the publisher have no "subscription" to disable. 4. Disabling a subscription does not immediately stop spilling: the walsender continues processing WAL records already in flight. The proposed GUC acts as a synchronous, in-process safety valve =E2=80=94 i= t checks the limit at the exact point where the next spill write would occur, with zero latency. Monitoring and the GUC are complementary: monitoring for alerting, the GUC as a hard backstop. > When the logical_decoding_spill_limit is exceeded, ERRORing out in the > walsender is even more problematic, right? The replication slot would > be inactive, causing bloat and preventing tuple freezing, WAL files > growth and eventually the system may hit disk-space issues - it is > like "we avoided disk space issues for one subsystem, but introduced > it for another". This looks a bit problematic IMHO. Others may have > different opinions though. This is a great point and deserves a careful answer. First, the "inactive slot causes WAL growth" problem already has a well-established solution: max_slot_wal_keep_size. When this is configured (which is recommended practice), an inactive slot will be invalidated once WAL retention exceeds the limit, releasing both WAL files and catalog bloat. So the combination of: logical_decoding_spill_limit + max_slot_wal_keep_size provides defense in depth: the spill limit prevents the data disk from filling up with spill files, while max_slot_wal_keep_size prevents WAL disk from growing unboundedly due to an inactive slot. Second, compare the two failure modes: (a) WITHOUT spill limit: disk fills up =E2=86=92 the ENTIRE instance goes read-only or shutdown. All workloads stop. Recovery requires manual intervention (rm spill files, restart). Data loss is possible if WAL writes also fail. (b) WITH spill limit: walsender ERRORs =E2=86=92 only replication is interrupted. The primary continues serving all read/write workloads normally. The DBA receives a clear error message and can act: increase the limit, increase work_mem, enable streaming, or investigate the large transaction. cenario (b) is strictly better than (a): it converts an instance-wide outage into a replication-only interruption with a clear, actionable error message. Additionally, in the updated patch (v2), I have ensured that spill files are properly cleaned up in the error path (via WalSndErrorCleanup), so exceeding the limit does not leave orphaned files on disk. Best regards, Shawn --000000000000ba7f92064e909d2b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Bharath,

Thank you for the thorough and thoughtful review!


> Having a lot of spill files also increases crash/recovery times.
> However, files spilling to disk causing no-space-left-on-disk issues > leading to downtime applies to WAL files, historical catalog snapshot<= br> > files, subtransaction overflow files, CLOG (and all the subsystems
> backed by SLRU data structure), etc. - basically any Postgres
> subsystem writing files to disk. I'm a bit worried that we may end= up
> solving disk space issues, which IMHO are outside of the database
> scope, in the database. Others may have different opinions though.

That's a fair philosophical point.=C2=A0 However, I'd argue that sp= ill files
are uniquely unprotected compared to the other subsystems you mentioned:
=C2=A0 - WAL files =E2=86=92 max_slot_wal_keep_size
=C2=A0 - Temp files =E2=86=92 temp_file_limit
=C2=A0 - SLRU/CLOG =E2=86=92 bounded by design (sized proportionally to act= ive XIDs)

Spill files are the gap: they can grow proportionally to the *data
volume* of in-progress transactions, not to the number of transactions,
and there is no existing upper bound.=C2=A0 A single bulk-load transaction<= br> replicated via logical decoding can generate tens of GBs of spill files
with no way for the DBA to cap it.

So this is not about solving a general OS-level disk problem in the
database; it is about providing the same kind of safety net that already exists for WAL (max_slot_wal_keep_size) and temp files (temp_file_limit) =E2=80=94 a per-subsystem guardrail that the DBA can configure.
=



> How common is this issue? Could you please add a test case to the
> proposed patch that without this feature would otherwise hit the issue=
> described?

Typically triggered by bulk data migrations or long-running DDL on large ta= bles,
combined with a subscriber that fell behind.=C2=A0 Each incident caused the= instance
to go read-only, affecting all workloads =E2=80=94 not just replication.
We have also seen reports of this in pgsql-general and on community
forums, though the root cause is not always identified as spill files.

Absolutely.=C2=A0 I will add a TAP test that:
=C2=A0 1. Creates 10 logical replication slots with test_decoding.
=C2=A0 2. Starts a large transaction that generates spill files exceeding =C2=A0 =C2=A0 =C2=A0the configured logical_decoding_spill_limit.
=C2=A0 3. Verifies that the walsender ERRORs out with the expected
=C2=A0 =C2=A0 =C2=A0ERRCODE_CONFIGURATION_LIMIT_EXCEEDED.
=C2=A0 4. Verifies that spill files are cleaned up after the error.

I will include the 4 in v2.

Test case:
1. build a table:

psql -p 5432 -d postgres -c "
CREATE TABLE spill_load (
=C2=A0 =C2=A0 id=C2=A0 =C2=A0 =C2=A0 bigint,
=C2=A0 =C2=A0 payload text
);
"

2. build some slots:
#base

for i in $(seq 1 10); do
=C2=A0 =C2=A0 psql -p 5432 -d postgres -c \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 "SELECT pg_create_logical_replication_slot= ('spill_slot_${i}', 'test_decoding');"
done

psql -p 5432 -d postgres -c \
=C2=A0 =C2=A0 "SELECT slot_name, plugin, active FROM pg_replication_sl= ots ORDER BY slot_name;"

3. start pg_recvlogical:
#bash
mkdir -p /tmp/spill_test/pids

for i in $(seq 1 10); do
=C2=A0 =C2=A0 pg_recvlogical \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --dbname=3D"port=3D5432 dbname=3Dpostgres&= quot; \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --slot=3D"spill_slot_${i}" \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --start \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --no-loop \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --status-interval=3D0 \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --file=3D/dev/null &
=C2=A0 =C2=A0 echo $! > /tmp/spill_test/pids/recv_${i}.pid
=C2=A0 =C2=A0 echo "Started pg_recvlogical for spill_slot_${i}, PID=3D= $!"
done

sleep 2

psql -p 5432 -d postgres -c \
=C2=A0 =C2=A0 "SELECT slot_name, active, active_pid
=C2=A0 =C2=A0 =C2=A0FROM pg_replication_slots
=C2=A0 =C2=A0 =C2=A0WHERE slot_name LIKE 'spill_slot_%'
=C2=A0 =C2=A0 =C2=A0ORDER BY slot_name;"

4. make a big transaction:

psql -p 5432 -d postgres -c "
BEGIN;
INSERT INTO spill_load
=C2=A0 =C2=A0 SELECT i, repeat('X', 100000)
=C2=A0 =C2=A0 FROM generate_series(1, 10000000) i;
COMMIT;

"

> Having said that, were alternatives like disabling subscriptions when<= br> > seen occupying the disk space considered?

Yes, we considered monitoring-based approaches, but they have inherent
limitations:

=C2=A0 1. Reaction latency: Even with 1-second polling, a high-throughput =C2=A0 =C2=A0 =C2=A0bulk load can spill gigabytes between two polls.=C2=A0 = The spill rate
=C2=A0 =C2=A0 =C2=A0can easily exceed 100 MB/s, so a 5-second monitoring ga= p means
=C2=A0 =C2=A0 =C2=A0500 MB of uncontrolled growth.

=C2=A0 2. External dependency: Relying on an external tool means the
=C2=A0 =C2=A0 =C2=A0protection is not available by default.=C2=A0 Every dep= loyment must
=C2=A0 =C2=A0 =C2=A0set up and maintain the monitoring =E2=80=94 and if it = fails or is
=C2=A0 =C2=A0 =C2=A0misconfigured, the disk-full scenario still occurs.

=C2=A0 3. No subscriber-side control: pg_recvlogical users and third-party<= br> =C2=A0 =C2=A0 =C2=A0CDC tools (Debezium, etc.) that consume directly from t= he
=C2=A0 =C2=A0 =C2=A0publisher have no "subscription" to disable.<= br>
=C2=A0 4. Disabling a subscription does not immediately stop spilling:
=C2=A0 =C2=A0 =C2=A0the walsender continues processing WAL records already = in flight.

The proposed GUC acts as a synchronous, in-process safety valve =E2=80=94 i= t
checks the limit at the exact point where the next spill write would
occur, with zero latency.=C2=A0 Monitoring and the GUC are complementary: monitoring for alerting, the GUC as a hard backstop.
=


> When the logical_decoding_spill_limit is exceeded, ERRORing out in the=
> walsender is even more problematic, right? The replication slot would<= br> > be inactive, causing bloat and preventing tuple freezing, WAL files > growth and eventually the system may hit disk-space issues - it is
> like "we avoided disk space issues for one subsystem, but introdu= ced
> it for another". This looks a bit problematic IMHO. Others may ha= ve
> different opinions though.

This is a great point and deserves a careful answer.

First, the "inactive slot causes WAL growth" problem already has = a
well-established solution: max_slot_wal_keep_size.=C2=A0 When this is
configured (which is recommended practice), an inactive slot will be
invalidated once WAL retention exceeds the limit, releasing both WAL
files and catalog bloat.=C2=A0 So the combination of:

logical_decoding_spill_limit + max_slot_wal_keep_size

provides defense in depth: the spill limit prevents the data disk from
filling up with spill files, while max_slot_wal_keep_size prevents WAL
disk from growing unboundedly due to an inactive slot.

Second, compare the two failure modes:

=C2=A0 (a) WITHOUT spill limit: disk fills up =E2=86=92 the ENTIRE instance= goes
=C2=A0 =C2=A0 =C2=A0 read-only or shutdown.=C2=A0 All workloads stop.=C2=A0= Recovery requires manual
=C2=A0 =C2=A0 =C2=A0 intervention (rm spill files, restart).=C2=A0 Data los= s is possible
=C2=A0 =C2=A0 =C2=A0 if WAL writes also fail.

=C2=A0 (b) WITH spill limit: walsender ERRORs =E2=86=92 only replication is=
=C2=A0 =C2=A0 =C2=A0 interrupted.=C2=A0 The primary continues serving all r= ead/write
=C2=A0 =C2=A0 =C2=A0 workloads normally.=C2=A0 The DBA receives a clear err= or message
=C2=A0 =C2=A0 =C2=A0 and can act: increase the limit, increase work_mem, en= able
=C2=A0 =C2=A0 =C2=A0 streaming, or investigate the large transaction.

cenario (b) is strictly better than (a): it converts an
instance-wide outage into a replication-only interruption with a
clear, actionable error message.

Additionally, in the updated patch (v2), I have ensured that spill

files are properly cleaned up in the error path (via
WalSndErrorCleanup), so exceeding the limit does not leave orphaned
files on disk.

Best regards,
Shawn
--000000000000ba7f92064e909d2b-- --000000000000ba7f92064e909d2f Content-Type: application/x-patch; name="v2-0001-Add-logical_decoding_spill_limit-GUC-to-cap-spill-file-limit.patch" Content-Disposition: attachment; filename="v2-0001-Add-logical_decoding_spill_limit-GUC-to-cap-spill-file-limit.patch" Content-Transfer-Encoding: base64 Content-ID: <19d52c369fdc77ccce01> X-Attachment-Id: 19d52c369fdc77ccce01 RnJvbSAzNjkzMDYyYjYzYWNiMTg5ZjY1N2M4MTljMWRmMGY1NWZkZmZhMTE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGF3biBXYW5nIDxzaGF3bi53YW5nLnBnQGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAyMyBNYXIgMjAyNiAyMDo0NjowOCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IEFkZCBsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0IEdVQyB0byBjYXAgc3BpbGwgZmlsZQog ZGlzayB1c2FnZS4KCldoZW4gbG9naWNhbCBkZWNvZGluZyBleGNlZWRzIGxvZ2ljYWxfZGVjb2Rp bmdfd29ya19tZW0sIGNoYW5nZXMgYXJlCnNwaWxsZWQgdG8gZGlzayB1bmRlciBwZ19yZXBsc2xv dC88c2xvdD4vLiAgQ3VycmVudGx5IHRoZXJlIGlzIG5vCmxpbWl0IG9uIHRoZSB0b3RhbCBzaXpl IG9mIHRoZXNlIHNwaWxsIGZpbGVzLCB3aGljaCBjYW4gbGVhZCB0bwp1bmNvbnRyb2xsZWQgZGlz ayBzcGFjZSBjb25zdW1wdGlvbiBmb3IgbGFyZ2Ugb3IgbnVtZXJvdXMgY29uY3VycmVudAp0cmFu c2FjdGlvbnMuCgpBZGQgYSBuZXcgR1VDIGxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQgKGlu dGVnZXIsIHVuaXQga0IsCmRlZmF1bHQgMCBtZWFuaW5nIHVubGltaXRlZCkgdGhhdCBsaW1pdHMg dGhlIHRvdGFsIG9uLWRpc2sgc3BpbGwgZmlsZQpzaXplIHBlciByZXBsaWNhdGlvbiBzbG90LiAg VGhlIGltcGxlbWVudGF0aW9uIHRyYWNrcyB0aGUgY3VycmVudApvbi1kaXNrIGZvb3RwcmludCBp biBSZW9yZGVyQnVmZmVyLnNwaWxsQnl0ZXNPbkRpc2sgKGluY3JlbWVudGVkCmFmdGVyIGVhY2gg c3VjY2Vzc2Z1bCB3cml0ZSBpbiBSZW9yZGVyQnVmZmVyU2VyaWFsaXplQ2hhbmdlLApkZWNyZW1l bnRlZCB3aGVuIHNwaWxsIGZpbGVzIGFyZSByZW1vdmVkIGluClJlb3JkZXJCdWZmZXJSZXN0b3Jl Q2xlYW51cCkgYW5kIHBlci10cmFuc2FjdGlvbiBpbgpSZW9yZGVyQnVmZmVyVFhOLnNlcmlhbGl6 ZWRfc2l6ZS4KCkJlZm9yZSBzZXJpYWxpemluZyBhIHRyYW5zYWN0aW9uIHRvIGRpc2ssIFJlb3Jk ZXJCdWZmZXJDaGVja01lbW9yeUxpbWl0CmNoZWNrcyB3aGV0aGVyIHRoZSBwcm9qZWN0ZWQgd3Jp dGUgd291bGQgZXhjZWVkIHRoZSBjb25maWd1cmVkIGxpbWl0LgpJZiBzbywgaXQgcmFpc2VzIGFu IEVSUk9SLiAgVGhlIHJlcGxpY2F0aW9uIHNsb3Qgc3RhdGUgKHJlc3RhcnRfbHNuLApjb25maXJt ZWRfZmx1c2gpIGlzIHByZXNlcnZlZCwgc28gdGhlIHN1YnNjcmliZXIgY2FuIHJlY29ubmVjdCBh ZnRlcgp0aGUgYWRtaW5pc3RyYXRvciBpbmNyZWFzZXMgdGhlIGxpbWl0LCByYWlzZXMgbG9naWNh bF9kZWNvZGluZ193b3JrX21lbSwKb3Igc3dpdGNoZXMgdG8gYSBzdHJlYW1pbmctY2FwYWJsZSBv dXRwdXQgcGx1Z2luLgoKVGhlIGNoZWNrIGlzIG9ubHkgb24gdGhlIHNwaWxsLXRvLWRpc2sgcGF0 aCAobm90IHRoZSBzdHJlYW1pbmcgcGF0aCwKd2hpY2ggaW52b2x2ZXMgbm8gZGlzayBJL08pIGFu ZCBvbmx5IHdoZW4gdGhlIGxpbWl0IGlzIHNldCAoPiAwKSwgc28KdGhlcmUgaXMgemVybyBvdmVy aGVhZCBvbiB0aGUgbm9ybWFsIGhvdCBwYXRoIGFuZCBmdWxsIGJhY2t3YXJkCmNvbXBhdGliaWxp dHkgd2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4KCkFkZGl0aW9uYWxseSwgZW5zdXJlIHNw aWxsIGZpbGVzIGFyZSBjbGVhbmVkIHVwIGR1cmluZyBlcnJvciByZWNvdmVyeS4KRXhwb3J0IFJl b3JkZXJCdWZmZXJDbGVhbnVwU2VyaWFsaXplZFRYTnMoKSBhbmQgY2FsbCBpdCBpbgpXYWxTbmRF cnJvckNsZWFudXAoKSBiZWZvcmUgcmVsZWFzaW5nIHRoZSByZXBsaWNhdGlvbiBzbG90LCBzbyB0 aGF0CnNwaWxsIGZpbGVzIGxlZnQgYmVoaW5kIGJ5IHRoZSBFUlJPUiBhcmUgcHJvcGVybHkgcmVt b3ZlZC4gIFdpdGhvdXQKdGhpcywgdGhlIGVycm9yIHBhdGggd291bGQgcmVsZWFzZSB0aGUgc2xv dCAoc2V0dGluZyBNeVJlcGxpY2F0aW9uU2xvdAp0byBOVUxMKSBiZWZvcmUgYW55IGNoYW5jZSB0 byBjbGVhbiB1cCwgbGVhdmluZyBvcnBoYW5lZCBzcGlsbCBmaWxlcwpvbiBkaXNrIHVudGlsIHRo ZSBuZXh0IHdhbHNlbmRlciBjb25uZWN0cyB0byB0aGUgc2FtZSBzbG90IG9yIHRoZQpzZXJ2ZXIg cmVzdGFydHMuCi0tLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAg ICAgIHwgMjQgKysrKysrKysKIC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIu YyAgICAgICB8IDYwICsrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3dhbHNlbmRlci5jICAgICAgICAgICB8IDEyICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8IDEwICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAyICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaCAgICAgICB8IDE4ICsrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggOGNkZDgyNmZiZDMuLmU2 ZmM5NjUzZmVmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC0yMTIwLDYgKzIxMjAsMzAgQEAgaW5jbHVkZV9kaXIg J2NvbmYuZCcKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1sb2dpY2FsLWRlY29kaW5nLXNwaWxsLWxpbWl0IiB4cmVm bGFiZWw9ImxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQiPgorICAgICAgPHRlcm0+PHZhcm5h bWU+bG9naWNhbF9kZWNvZGluZ19zcGlsbF9saW1pdDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8 L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5sb2dp Y2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRl cjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZpZXMgdGhlIG1heGltdW0gdG90 YWwgc2l6ZSBvZiBvbi1kaXNrIHNwaWxsIGZpbGVzIHRoYXQgbG9naWNhbAorICAgICAgICBkZWNv ZGluZyBtYXkgdXNlIHBlciByZXBsaWNhdGlvbiBzbG90LiBXaGVuIGNoYW5nZXMgZXhjZWVkIHRo ZSBtZW1vcnkKKyAgICAgICAgbGltaXQgc2V0IGJ5IDx2YXJuYW1lPmxvZ2ljYWxfZGVjb2Rpbmdf d29ya19tZW08L3Zhcm5hbWU+LCB0aGV5IGFyZQorICAgICAgICBzcGlsbGVkIHRvIGRpc2suIFRo aXMgcGFyYW1ldGVyIGxpbWl0cyB0aGUgdG90YWwgYW1vdW50IG9mIGRpc2sgc3BhY2UKKyAgICAg ICAgdXNlZCBieSB0aG9zZSBzcGlsbCBmaWxlcy4gSWYgdGhlIGxpbWl0IHdvdWxkIGJlIGV4Y2Vl ZGVkLCB0aGUKKyAgICAgICAgd2Fsc2VuZGVyIHByb2Nlc3MgcmFpc2VzIGFuIGVycm9yIGFuZCBk aXNjb25uZWN0cy4gVGhlIHJlcGxpY2F0aW9uCisgICAgICAgIHNsb3QncyBzdGF0ZSBpcyBwcmVz ZXJ2ZWQsIHNvIHRoZSBzdWJzY3JpYmVyIGNhbiByZWNvbm5lY3QgYWZ0ZXIgdGhlCisgICAgICAg IGFkbWluaXN0cmF0b3IgaW5jcmVhc2VzIHRoaXMgbGltaXQgb3Igc3dpdGNoZXMgdG8gYSBzdHJl YW1pbmctY2FwYWJsZQorICAgICAgICBvdXRwdXQgcGx1Z2luLgorICAgICAgICBJZiB0aGlzIHZh bHVlIGlzIHNwZWNpZmllZCB3aXRob3V0IHVuaXRzLCBpdCBpcyB0YWtlbiBhcyBraWxvYnl0ZXMu CisgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPjA8L2xpdGVyYWw+LCB3aGlj aCBtZWFucyB0aGVyZSBpcyBubworICAgICAgICBsaW1pdCBvbiBzcGlsbCBmaWxlIGRpc2sgdXNh Z2UuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50 cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWNvbW1pdC10aW1lc3RhbXAtYnVmZmVy cyIgeHJlZmxhYmVsPSJjb21taXRfdGltZXN0YW1wX2J1ZmZlcnMiPgogICAgICAgPHRlcm0+PHZh cm5hbWU+Y29tbWl0X3RpbWVzdGFtcF9idWZmZXJzPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwv dHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA2ODJkMTNjOWYyMi4uOTVlNWIwZjA1MDcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBA IC03Miw2ICs3MiwxNSBAQAogICoJICBjb3VudGVyIGlzIHVwZGF0ZWQ7IGhvd2V2ZXIgdHJhbnNh Y3Rpb25zIHdpdGggc2l6ZSAwIGFyZSBub3Qgc3RvcmVkIGluCiAgKgkgIHRoZSBoZWFwLCBiZWNh dXNlIHRoZXkgaGF2ZSBubyBjaGFuZ2VzIHRvIGV2aWN0LgogICoKKyAqCSAgVG8gcHJldmVudCBz cGlsbCBmaWxlcyBmcm9tIGNvbnN1bWluZyB1bmJvdW5kZWQgZGlzayBzcGFjZSwgdGhlCisgKgkg IGxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQgR1VDIGNhbiBiZSBzZXQgdG8gbGltaXQgdGhl IHRvdGFsIHNpemUKKyAqCSAgb2Ygc3BpbGwgZmlsZXMgcGVyIHJlcGxpY2F0aW9uIHNsb3QuICBX ZSB0cmFjayB0aGUgY3VycmVudCBvbi1kaXNrCisgKgkgIGZvb3RwcmludCBpbiBSZW9yZGVyQnVm ZmVyLnNwaWxsQnl0ZXNPbkRpc2sgKGluY3JlbWVudGVkIG9uIGVhY2gKKyAqCSAgc3VjY2Vzc2Z1 bCB3cml0ZSwgZGVjcmVtZW50ZWQgd2hlbiBzcGlsbCBmaWxlcyBhcmUgY2xlYW5lZCB1cCkgYW5k CisgKgkgIHBlci10cmFuc2FjdGlvbiBpbiBSZW9yZGVyQnVmZmVyVFhOLnNlcmlhbGl6ZWRfc2l6 ZS4gIEJlZm9yZQorICoJICBzZXJpYWxpemluZyBhIHRyYW5zYWN0aW9uLCB3ZSBjaGVjayB3aGV0 aGVyIHRoZSBwcm9qZWN0ZWQgd3JpdGUgd291bGQKKyAqCSAgZXhjZWVkIHRoZSBjb25maWd1cmVk IGxpbWl0IGFuZCByYWlzZSBhbiBFUlJPUiBpZiBzby4KKyAqCiAgKgkgIFdlIHN0aWxsIHJlbHkg b24gbWF4X2NoYW5nZXNfaW5fbWVtb3J5IHdoZW4gbG9hZGluZyBzZXJpYWxpemVkIGNoYW5nZXMK ICAqCSAgYmFjayBpbnRvIG1lbW9yeS4gQXQgdGhhdCBwb2ludCB3ZSBjYW4ndCB1c2UgdGhlIG1l bW9yeSBsaW1pdCBkaXJlY3RseQogICoJICBhcyB3ZSBsb2FkIHRoZSBzdWJ4YWN0cyBpbmRlcGVu ZGVudGx5LiBPbmUgb3B0aW9uIHRvIGRlYWwgd2l0aCB0aGlzCkBAIC0yMjQsNiArMjMzLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UKICAqIGxpa2UuCiAgKi8KIGlu dAkJCWxvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW07CitpbnQJCQlsb2dpY2FsX2RlY29kaW5nX3Nw aWxsX2xpbWl0Owogc3RhdGljIGNvbnN0IFNpemUgbWF4X2NoYW5nZXNfaW5fbWVtb3J5ID0gNDA5 NjsgLyogWFhYIGZvciByZXN0b3JlIG9ubHkgKi8KIAogLyogR1VDIHZhcmlhYmxlICovCkBAIC0y NzYsNyArMjg2LDcgQEAgc3RhdGljIHZvaWQgUmVvcmRlckJ1ZmZlclRydW5jYXRlVFhOKFJlb3Jk ZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgYm9vbCB0eG5f cHJlcGFyZWQpOwogc3RhdGljIHZvaWQgUmVvcmRlckJ1ZmZlck1heWJlTWFya1RYTlN0cmVhbWVk KFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwogc3RhdGljIGJvb2wg UmVvcmRlckJ1ZmZlckNoZWNrQW5kVHJ1bmNhdGVBYm9ydGVkVFhOKFJlb3JkZXJCdWZmZXIgKnJi LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwotc3RhdGljIHZvaWQgUmVvcmRlckJ1ZmZlckNsZWFu dXBTZXJpYWxpemVkVFhOcyhjb25zdCBjaGFyICpzbG90bmFtZSk7CisvKiBSZW9yZGVyQnVmZmVy Q2xlYW51cFNlcmlhbGl6ZWRUWE5zIGlzIGRlY2xhcmVkIGluIHJlb3JkZXJidWZmZXIuaCAqLwog c3RhdGljIHZvaWQgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZWRQYXRoKGNoYXIgKnBhdGgsIFJlcGxp Y2F0aW9uU2xvdCAqc2xvdCwKIAkJCQkJCQkJCQlUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1NlZ05v IHNlZ25vKTsKIHN0YXRpYyBpbnQJUmVvcmRlckJ1ZmZlclRYTlNpemVDb21wYXJlKGNvbnN0IHBh aXJpbmdoZWFwX25vZGUgKmEsIGNvbnN0IHBhaXJpbmdoZWFwX25vZGUgKmIsIHZvaWQgKmFyZyk7 CkBAIC0zODg1LDYgKzM4OTUsMTAgQEAgUmVvcmRlckJ1ZmZlckxhcmdlc3RTdHJlYW1hYmxlVG9w VFhOKFJlb3JkZXJCdWZmZXIgKnJiKQogICogSWYgZGVidWdfbG9naWNhbF9yZXBsaWNhdGlvbl9z dHJlYW1pbmcgaXMgc2V0IHRvICJpbW1lZGlhdGUiLCBzdHJlYW0gb3IKICAqIHNlcmlhbGl6ZSB0 aGUgY2hhbmdlcyBpbW1lZGlhdGVseS4KICAqCisgKiBXaGVuIHNwaWxsaW5nIHRvIGRpc2ssIGlm IGxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQgaXMgc2V0ICg+IDApLAorICogd2UgY2hlY2sg d2hldGhlciB0aGUgcHJvamVjdGVkIHdyaXRlIHdvdWxkIGV4Y2VlZCB0aGUgY29uZmlndXJlZCBs aW1pdAorICogYW5kIHJhaXNlIGFuIEVSUk9SIGlmIHNvLCB0byBwcmV2ZW50IHVuYm91bmRlZCBk aXNrIHVzYWdlLgorICoKICAqIFhYWCBBdCB0aGlzIHBvaW50IHdlIHNlbGVjdCB0aGUgdHJhbnNh Y3Rpb25zIHVudGlsIHdlIHJlYWNoIHVuZGVyIHRoZSBtZW1vcnkKICAqIGxpbWl0LCBidXQgd2Ug bWlnaHQgYWxzbyBhZGFwdCBhIG1vcmUgZWxhYm9yYXRlIGV2aWN0aW9uIHN0cmF0ZWd5IC0gZm9y IGV4YW1wbGUKICAqIGV2aWN0aW5nIGVub3VnaCB0cmFuc2FjdGlvbnMgdG8gZnJlZSBjZXJ0YWlu IGZyYWN0aW9uIChlLmcuIDUwJSkgb2YgdGhlIG1lbW9yeQpAQCAtMzk2NCw2ICszOTc4LDM2IEBA IFJlb3JkZXJCdWZmZXJDaGVja01lbW9yeUxpbWl0KFJlb3JkZXJCdWZmZXIgKnJiKQogCQkJaWYg KFJlb3JkZXJCdWZmZXJDaGVja0FuZFRydW5jYXRlQWJvcnRlZFRYTihyYiwgdHhuKSkKIAkJCQlj b250aW51ZTsKIAorCQkJLyoKKwkJCSAqIENoZWNrIHRoZSBzcGlsbC10by1kaXNrIHNpemUgbGlt aXQgYmVmb3JlIGFjdHVhbGx5IHNlcmlhbGl6aW5nLgorCQkJICogV2UgdXNlIHRoZSB0cmFuc2Fj dGlvbidzIGluLW1lbW9yeSBzaXplIGFzIGFuIGVzdGltYXRlIG9mIGhvdworCQkJICogbXVjaCB3 aWxsIGJlIHdyaXR0ZW4sIHdoaWNoIGlzIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uLgorCQkJ ICoKKwkJCSAqIFdlIG9ubHkgY2hlY2sgd2hlbiBsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0 IGlzIHNldCAoPiAwKS4KKwkJCSAqIFdoZW4gdGhlIGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLCBy YWlzZSBhbiBFUlJPUi4gIFRoZQorCQkJICogd2Fsc2VuZGVyIHdpbGwgZXhpdCwgYnV0IHRoZSBy ZXBsaWNhdGlvbiBzbG90J3MgcmVzdGFydF9sc24gaXMKKwkJCSAqIHByZXNlcnZlZCBzbyB0aGUg c3Vic2NyaWJlciBjYW4gcmVjb25uZWN0IGFmdGVyIHRoZSBEQkEKKwkJCSAqIGluY3JlYXNlcyB0 aGUgbGltaXQgb3Igc3dpdGNoZXMgdG8gYSBzdHJlYW1pbmctY2FwYWJsZSBvdXRwdXQKKwkJCSAq IHBsdWdpbi4KKwkJCSAqLworCQkJaWYgKGxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQgPiAw ICYmCisJCQkJcmItPnNwaWxsQnl0ZXNPbkRpc2sgKyB0eG4tPnNpemUgPgorCQkJCShTaXplKSBs b2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0ICogMTAyNCkKKwkJCXsKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVE KSwKKwkJCQkJCSBlcnJtc2coImxvZ2ljYWwgZGVjb2Rpbmcgc3BpbGwgZmlsZSBzaXplIGxpbWl0 IGV4Y2VlZGVkIiksCisJCQkJCQkgZXJyZGV0YWlsKCJDdXJyZW50IG9uLWRpc2sgc3BpbGwgc2l6 ZSBpcyAlenUgYnl0ZXMsICIKKwkJCQkJCQkJICAgInRyYW5zYWN0aW9uIHRvIHNwaWxsIGlzICV6 dSBieXRlcywgIgorCQkJCQkJCQkgICAibGltaXQgaXMgJWQga0IuIiwKKwkJCQkJCQkJICAgcmIt PnNwaWxsQnl0ZXNPbkRpc2ssIHR4bi0+c2l6ZSwKKwkJCQkJCQkJICAgbG9naWNhbF9kZWNvZGlu Z19zcGlsbF9saW1pdCksCisJCQkJCQkgZXJyaGludCgiQ29uc2lkZXIgaW5jcmVhc2luZyAlcywg JXMsICIKKwkJCQkJCQkJICJvciB1c2luZyBhIHN0cmVhbWluZy1jYXBhYmxlIG91dHB1dCBwbHVn aW4uIiwKKwkJCQkJCQkJICJsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0IiwKKwkJCQkJCQkJ ICJsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtIikpKTsKKwkJCX0KKwogCQkJUmVvcmRlckJ1ZmZl clNlcmlhbGl6ZVRYTihyYiwgdHhuKTsKIAkJfQogCkBAIC00Mjg2LDYgKzQzMzAsMTMgQEAgUmVv cmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCX0KIAlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7CiAKKwkvKgorCSAqIFVw ZGF0ZSB0aGUgb24tZGlzayBzcGlsbCBzaXplIGFjY291bnRpbmcgZm9yIGJvdGggdGhlIHRyYW5z YWN0aW9uIGFuZAorCSAqIHRoZSByZW9yZGVyIGJ1ZmZlci4gIFRoaXMgaXMgdXNlZCB0byBlbmZv cmNlIGxvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQuCisJICovCisJdHhuLT5zZXJpYWxpemVk X3NpemUgKz0gb25kaXNrLT5zaXplOworCXJiLT5zcGlsbEJ5dGVzT25EaXNrICs9IG9uZGlzay0+ c2l6ZTsKKwogCS8qCiAJICogS2VlcCB0aGUgdHJhbnNhY3Rpb24ncyBmaW5hbF9sc24gdXAgdG8g ZGF0ZSB3aXRoIGVhY2ggY2hhbmdlIHdlIHNlbmQgdG8KIAkgKiBkaXNrLCBzbyB0aGF0IFJlb3Jk ZXJCdWZmZXJSZXN0b3JlQ2xlYW51cCB3b3JrcyBjb3JyZWN0bHkuICAoV2UgdXNlZCB0bwpAQCAt NDg3MiwxMyArNDkyMywxOCBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNsZWFudXAoUmVvcmRlckJ1 ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bikKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZW1vdmUgZmlsZSBcIiVzXCI6ICVt IiwgcGF0aCkpKTsKIAl9CisKKwkvKiBVcGRhdGUgdGhlIG9uLWRpc2sgc3BpbGwgc2l6ZSBhY2Nv dW50aW5nLiAqLworCUFzc2VydChyYi0+c3BpbGxCeXRlc09uRGlzayA+PSB0eG4tPnNlcmlhbGl6 ZWRfc2l6ZSk7CisJcmItPnNwaWxsQnl0ZXNPbkRpc2sgLT0gdHhuLT5zZXJpYWxpemVkX3NpemU7 CisJdHhuLT5zZXJpYWxpemVkX3NpemUgPSAwOwogfQogCiAvKgogICogUmVtb3ZlIGFueSBsZWZ0 b3ZlciBzZXJpYWxpemVkIHJlb3JkZXIgYnVmZmVycyBmcm9tIGEgc2xvdCBkaXJlY3RvcnkgYWZ0 ZXIgYQogICogcHJpb3IgY3Jhc2ggb3IgZGVjb2Rpbmcgc2Vzc2lvbiBleGl0LgogICovCi1zdGF0 aWMgdm9pZAordm9pZAogUmVvcmRlckJ1ZmZlckNsZWFudXBTZXJpYWxpemVkVFhOcyhjb25zdCBj aGFyICpzbG90bmFtZSkKIHsKIAlESVIJCSAgICpzcGlsbF9kaXI7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3dhbHNlbmRlci5jCmluZGV4IDA4MjUzMTAzY2IzLi4yY2E5OWIzMWM1YiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vd2Fsc2VuZGVyLmMKQEAgLTM1Niw2ICszNTYsMTggQEAgV2FsU25kRXJyb3JDbGVh bnVwKHZvaWQpCiAJaWYgKHhsb2dyZWFkZXIgIT0gTlVMTCAmJiB4bG9ncmVhZGVyLT5zZWcud3Nf ZmlsZSA+PSAwKQogCQl3YWxfc2VnbWVudF9jbG9zZSh4bG9ncmVhZGVyKTsKIAorCS8qCisJICog Q2xlYW4gdXAgc3BpbGwgZmlsZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgc2xvdCwgYmVjYXVzZQor CSAqIFJlb3JkZXJCdWZmZXJDbGVhbnVwU2VyaWFsaXplZFRYTnMoKSBuZWVkcyB0aGUgc2xvdCBu YW1lIHRvIGxvY2F0ZSB0aGUKKwkgKiBkaXJlY3RvcnkuICBXZSB1c2UgdGhlIHN0YXRpYyBsb2dp Y2FsX2RlY29kaW5nX2N0eCB0byBkZXRlcm1pbmUgd2hldGhlcgorCSAqIHdlIGFyZSBpbiBhIGxv Z2ljYWwgZGVjb2Rpbmcgc2Vzc2lvbi4KKwkgKi8KKwlpZiAobG9naWNhbF9kZWNvZGluZ19jdHgg IT0gTlVMTCAmJiBNeVJlcGxpY2F0aW9uU2xvdCAhPSBOVUxMKQorCXsKKwkJUmVvcmRlckJ1ZmZl ckNsZWFudXBTZXJpYWxpemVkVFhOcyhOYW1lU3RyKE15UmVwbGljYXRpb25TbG90LT5kYXRhLm5h bWUpKTsKKwkJbG9naWNhbF9kZWNvZGluZ19jdHggPSBOVUxMOworCX0KKwogCWlmIChNeVJlcGxp Y2F0aW9uU2xvdCAhPSBOVUxMKQogCQlSZXBsaWNhdGlvblNsb3RSZWxlYXNlKCk7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXggMGM5ODU0YWQ4ZmMuLjMx NjhkMjNmMzg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApA QCAtMTg0OSw2ICsxODQ5LDE2IEBACiAgIGJvb3RfdmFsID0+ICdmYWxzZScsCiB9LAogCit7IG5h bWUgPT4gJ2xvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQnLCB0eXBlID0+ICdpbnQnLCBjb250 ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdSRVNPVVJDRVNfTUVNJywKKyAgc2hvcnRf ZGVzYyA9PiAnU2V0cyB0aGUgbWF4aW11bSB0b3RhbCBzaXplIG9mIHNwaWxsIGZpbGVzIGZvciBs b2dpY2FsIGRlY29kaW5nLicsCisgIGxvbmdfZGVzYyA9PiAnTGltaXRzIHRoZSB0b3RhbCBkaXNr IHNwYWNlIHVzZWQgYnkgc3BpbGwgZmlsZXMgcGVyIHJlcGxpY2F0aW9uIHNsb3QgZHVyaW5nIGxv Z2ljYWwgZGVjb2RpbmcuIDAgbWVhbnMgbm8gbGltaXQuJywKKyAgZmxhZ3MgPT4gJ0dVQ19VTklU X0tCJywKKyAgdmFyaWFibGUgPT4gJ2xvZ2ljYWxfZGVjb2Rpbmdfc3BpbGxfbGltaXQnLAorICBi b290X3ZhbCA9PiAnMCcsCisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAnTUFYX0tJTE9CWVRFUycs Cit9LAorCiB7IG5hbWUgPT4gJ2xvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0nLCB0eXBlID0+ICdp bnQnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdSRVNPVVJDRVNfTUVNJywK ICAgc2hvcnRfZGVzYyA9PiAnU2V0cyB0aGUgbWF4aW11bSBtZW1vcnkgdG8gYmUgdXNlZCBmb3Ig bG9naWNhbCBkZWNvZGluZy4nLAogICBsb25nX2Rlc2MgPT4gJ1RoaXMgbXVjaCBtZW1vcnkgY2Fu IGJlIHVzZWQgYnkgZWFjaCBpbnRlcm5hbCByZW9yZGVyIGJ1ZmZlciBiZWZvcmUgc3BpbGxpbmcg dG8gZGlzay4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2Ft cGxlCmluZGV4IGU0YWJlNmMwMDc3Li4wNGI0ZmI3MzczNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtMTQ5LDYgKzE0OSw4IEBACiAjbWFp bnRlbmFuY2Vfd29ya19tZW0gPSA2NE1CICAgICAgICAgICAgIyBtaW4gNjRrQgogI2F1dG92YWN1 dW1fd29ya19tZW0gPSAtMSAgICAgICAgICAgICAgICMgbWluIDY0a0IsIG9yIC0xIHRvIHVzZSBt YWludGVuYW5jZV93b3JrX21lbQogI2xvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0gPSA2NE1CICAg ICAgICMgbWluIDY0a0IKKyNsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0ID0gMCAgICAgICAj IGxpbWl0cyBzcGlsbCBmaWxlIGRpc2sgdXNhZ2UgcGVyIHNsb3Q7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyAwIG1lYW5zIG5vIGxpbWl0CiAjbWF4X3N0YWNrX2Rl cHRoID0gMk1CICAgICAgICAgICAgICAgICAgIyBtaW4gMTAwa0IKICNzaGFyZWRfbWVtb3J5X3R5 cGUgPSBtbWFwICAgICAgICAgICAgICAjIHRoZSBkZWZhdWx0IGlzIHRoZSBmaXJzdCBvcHRpb24K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1cHBvcnRlZCBieSB0 aGUgb3BlcmF0aW5nIHN5c3RlbToKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIu aAppbmRleCAyZDcxN2E5ZTE1Mi4uNjE1ODY0MzU3MWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogLyogR1VDIHZhcmlhYmxlcyAq LwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtOworZXh0 ZXJuIFBHRExMSU1QT1JUIGludCBsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0OwogZXh0ZXJu IFBHRExMSU1QT1JUIGludCBkZWJ1Z19sb2dpY2FsX3JlcGxpY2F0aW9uX3N0cmVhbWluZzsKIAog LyogcG9zc2libGUgdmFsdWVzIGZvciBkZWJ1Z19sb2dpY2FsX3JlcGxpY2F0aW9uX3N0cmVhbWlu ZyAqLwpAQCAtNDYxLDYgKzQ2MiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVyVFhO CiAJLyogU2l6ZSBvZiB0b3AtdHJhbnNhY3Rpb24gaW5jbHVkaW5nIHN1Yi10cmFuc2FjdGlvbnMu ICovCiAJU2l6ZQkJdG90YWxfc2l6ZTsKIAorCS8qCisJICogU2l6ZSBvZiB0aGlzIHRyYW5zYWN0 aW9uJ3MgY2hhbmdlcyBjdXJyZW50bHkgc2VyaWFsaXplZCB0byBkaXNrIChpbgorCSAqIGJ5dGVz KS4gIFRyYWNrZWQgcGVyLXRyYW5zYWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFjY3VyYXRlbHkgdXBk YXRlIHRoZQorCSAqIFJlb3JkZXJCdWZmZXItbGV2ZWwgc3BpbGxCeXRlc09uRGlzayBjb3VudGVy IHdoZW4gc3BpbGwgZmlsZXMgYXJlCisJICogY2xlYW5lZCB1cC4KKwkgKi8KKwlTaXplCQlzZXJp YWxpemVkX3NpemU7CisKIAkvKgogCSAqIFByaXZhdGUgZGF0YSBwb2ludGVyIG9mIHRoZSBvdXRw dXQgcGx1Z2luLgogCSAqLwpAQCAtNjg1LDYgKzY5NCwxNCBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZl cgogCWludDY0CQlzcGlsbENvdW50OwkJLyogc3BpbGwtdG8tZGlzayBpbnZvY2F0aW9uIGNvdW50 ZXIgKi8KIAlpbnQ2NAkJc3BpbGxCeXRlczsJCS8qIGFtb3VudCBvZiBkYXRhIHNwaWxsZWQgdG8g ZGlzayAqLwogCisJLyoKKwkgKiBDdXJyZW50IHRvdGFsIHNpemUgb2Ygc3BpbGwgZmlsZXMgb24g ZGlzayBmb3IgdGhpcyByZW9yZGVyIGJ1ZmZlciAoaW4KKwkgKiBieXRlcykuICBVbmxpa2Ugc3Bp bGxCeXRlcyB3aGljaCBpcyBhIGN1bXVsYXRpdmUgc3RhdGlzdGljIGNvdW50ZXIsIHRoaXMKKwkg KiB0cmFja3MgdGhlIGFjdHVhbCBvbi1kaXNrIGZvb3RwcmludCByaWdodCBub3cgYW5kIGlzIGRl Y3JlbWVudGVkIHdoZW4KKwkgKiBzcGlsbCBmaWxlcyBhcmUgY2xlYW5lZCB1cC4gIFVzZWQgdG8g ZW5mb3JjZSBsb2dpY2FsX2RlY29kaW5nX3NwaWxsX2xpbWl0LgorCSAqLworCVNpemUJCXNwaWxs Qnl0ZXNPbkRpc2s7CisKIAkvKiBTdGF0aXN0aWNzIGFib3V0IHRyYW5zYWN0aW9ucyBzdHJlYW1l ZCB0byB0aGUgZGVjb2Rpbmcgb3V0cHV0IHBsdWdpbiAqLwogCWludDY0CQlzdHJlYW1UeG5zOwkJ LyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBzdHJlYW1lZCAqLwogCWludDY0CQlzdHJlYW1Db3Vu dDsJLyogc3RyZWFtaW5nIGludm9jYXRpb24gY291bnRlciAqLwpAQCAtNzgyLDUgKzc5OSw2IEBA IGV4dGVybiB1aW50MzIgUmVvcmRlckJ1ZmZlckdldEludmFsaWRhdGlvbnMoUmVvcmRlckJ1ZmZl ciAqcmIsCiAJCQkJCQkJCQkJCVNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgKiptc2dzKTsKIAog ZXh0ZXJuIHZvaWQgU3RhcnR1cFJlb3JkZXJCdWZmZXIodm9pZCk7CitleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyQ2xlYW51cFNlcmlhbGl6ZWRUWE5zKGNvbnN0IGNoYXIgKnNsb3RuYW1lKTsKIAog I2VuZGlmCi0tIAoyLjQzLjcKCg== --000000000000ba7f92064e909d2f--