Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1usrve-00CBqY-Sw for pgsql-hackers@arkaria.postgresql.org; Sun, 31 Aug 2025 23:57:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1usrvd-0039GB-2q for pgsql-hackers@arkaria.postgresql.org; Sun, 31 Aug 2025 23:57:45 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1usrvc-0039Dr-Jg for pgsql-hackers@lists.postgresql.org; Sun, 31 Aug 2025 23:57:45 +0000 Received: from mail-qt1-x834.google.com ([2607:f8b0:4864:20::834]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1usrvY-002twj-1C for pgsql-hackers@lists.postgresql.org; Sun, 31 Aug 2025 23:57:42 +0000 Received: by mail-qt1-x834.google.com with SMTP id d75a77b69052e-4b32ce93e30so5129951cf.2 for ; Sun, 31 Aug 2025 16:57:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fittl.com; s=google; t=1756684658; x=1757289458; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=h2hMtJORF2rbDjGhbt4rKKBEp0mnzPjIMOomGw6ByDk=; b=DAZFTqH6/zKiBzqIpHmiCmjbNn/A3YumHs/xpnJkioOpE3AY+EUGTdtYtIbuR+O51g lRWdysBO+tbG9LS+xHjkqv+z5S5M2m4uE+gPVnc/8meOHB0p56JKGZ7YIYGB2YnGm1ie 55O8qm+YzUCdqP3Z31Ot+ziyNFBX6Mh2KltNk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756684658; x=1757289458; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=h2hMtJORF2rbDjGhbt4rKKBEp0mnzPjIMOomGw6ByDk=; b=U06Qv6yGAugny0WuKAe4gcpTbtPz20xWUTf6zOfWj50rq3yA7we7VzzJycijxClBUS n+PfBb8T7l/Yo11AEKzUEOTMNiAI5lEy3mOng07F26NUEDx3CoPiZhisHX0NesgOenz3 r+VIYAF5GZjkLH9ZjFJAmZwuSkEU956/3I5IrMe71+B7Stp62HicZkOsGGevfPtDNdNG vuyhOff7zdbjacUmFqYRF5CBzwBW7q4N2GSFAQPFoeDnqfw6QAanN8PSQRBhqJlqer2N HVn5+cY4ElzP/Z3YOqbytn0nfDl0fOZlq/JeF9YEgTrHrexpeKm2VX7AiIAF1b+zrpwc BvJA== X-Gm-Message-State: AOJu0Yz/pmcDbQUSWqNcyNIDDYpSAqYm4LAq+rkLQtYmj/OZ7WiFXrRi 6DWCxTPcOhktYBXc69vEFSF0rhznzIHV05qJd1mexY/BuqdLmbV4AQjd6j8v8Y649PnSp69oUFx NEjUhIdB8g9Ir9jAgu2DZrHSLijV0XM32TX03FnqsAyp5NjPhmLH+d62I X-Gm-Gg: ASbGncvh4uo6no0C6qkxlIw/Kkzv+JOLaX3AhouQxCqP5kAjYCNDUq6xcUgTmc0AAAw 9mC2xD5103aiayxrzxjacEKbDPxS5smAJ4yyM2YrQGcC5pVpTRzYs1nF9guHYmZftvyxJxrOykp I3+HfCfwL+wF34mmtrvs9roB9908Rbf4UFQi4WaFb39NLyPuyYfsRzRO9YizPlCB/ElTonzEBUH /Kl9y39vX1amDZbmJTBy6DSNeIVsRzbhJ6+hmEC X-Google-Smtp-Source: AGHT+IHhAeduB2LtowqZgOoiBzewLa1UMkpu5uK7NmE/fHNo6sTay811grUBvmZTN1Ug1aVDI8iEIcJaMz5bsRb6uvg= X-Received: by 2002:a05:622a:5a89:b0:4b3:9c3:fcd0 with SMTP id d75a77b69052e-4b31d845da5mr68603711cf.6.1756684658016; Sun, 31 Aug 2025 16:57:38 -0700 (PDT) MIME-Version: 1.0 From: Lukas Fittl Date: Sun, 31 Aug 2025 16:57:01 -0700 X-Gm-Features: Ac12FXxgJA-LBZ7YGCm7ieeyuUc25m2wUD4Z72gedC4u8iFecS85XthKNmU75l0 Message-ID: Subject: Stack-based tracking of per-node WAL/buffer usage To: PostgreSQL Hackers Cc: Andres Freund Content-Type: multipart/mixed; boundary="000000000000064ba9063db2054e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000064ba9063db2054e Content-Type: multipart/alternative; boundary="000000000000064ba7063db2054c" --000000000000064ba7063db2054c Content-Type: text/plain; charset="UTF-8" Hi, Please find attached a patch series that introduces a new paradigm for how per-node WAL/buffer usage is tracked, with two primary goals: (1) reduce overhead of EXPLAIN ANALYZE, (2) enable future work like tracking estimated distinct buffer hits [0]. Currently we utilize pgWalUsage/pgBufferUsage as global counters, and in InstrStopNode we call the rather expensive BufferUsageAccumDiff/WalUsageAccumDiff to know how much activity happened within a given node cycle. This proposal instead uses a stack, where each time we enter a node (InstrStartNode) we point a new global (pgInstrStack) to the current stack entry. Whilst we're in that node we increment buffer/WAL usage statistics to the stack entry. On exit (InstrStopNode) we restore the previous entry. This change provides about a 10% performance benefit for EXPLAIN ANALYZE on paths that repeatedly enter InstrStopNode, e.g. SELECT COUNT(*): CREATE TABLE test(id int); INSERT INTO test SELECT * FROM generate_series(0, 1000000); master (124ms, best out of 3): postgres=# EXPLAIN (ANALYZE) SELECT COUNT(*) FROM test; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ Aggregate (cost=16925.01..16925.02 rows=1 width=8) (actual time=124.910..124.910 rows=1.00 loops=1) Buffers: shared hit=752 read=3673 -> Seq Scan on test (cost=0.00..14425.01 rows=1000001 width=0) (actual time=0.201..62.228 rows=1000001.00 loops=1) Buffers: shared hit=752 read=3673 Planning Time: 0.116 ms Execution Time: 124.961 ms patched (109ms, best out of 3): postgres=# EXPLAIN (ANALYZE) SELECT COUNT(*) FROM test; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ Aggregate (cost=16925.01..16925.02 rows=1 width=8) (actual time=109.788..109.788 rows=1.00 loops=1) Buffers: shared hit=940 read=3485 -> Seq Scan on test (cost=0.00..14425.01 rows=1000001 width=0) (actual time=0.153..69.368 rows=1000001.00 loops=1) Buffers: shared hit=940 read=3485 Planning Time: 0.134 ms Execution Time: 109.837 ms (6 rows) I have also prototyped a more ambitious approach that completely removes pgWalUsage/pgBufferUsage (utilizing the stack-collected data for e.g. pg_stat_statements), but for now this patch set does not include that change, but instead keeps adding to these legacy globals as well. Patches attached: 0001: Separate node instrumentation from other use of Instrumentation struct Previously different places (e.g. query "total time") were repurposing the per-node Instrumentation struct. Instead, simplify the Instrumentation struct to only track time, WAL/buffer usage, and tuple counts. Similarly, drop the use of InstrEndLoop outside of per-node instrumentation. Introduce the NodeInstrumentation struct to carry forward the per-node instrumentation information. 0002: Replace direct changes of pgBufferUsage/pgWalUsage with INSTR_* macros 0003: Introduce stack for tracking per-node WAL/buffer usage Feedback/thoughts welcome! CCing Andres since he had expressed interest in this off-list. [0]: See lightning talk slides from PGConf.Dev discussing an HLL-based EXPLAIN (BUFFERS DISTINCT): https://resources.pganalyze.com/pganalyze_PGConf.dev_2025_shared_blks_hit_distinct.pdf Thanks, Lukas -- Lukas Fittl --000000000000064ba7063db2054c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

Please find attached a p= atch series that introduces a new paradigm for how per-node WAL/buffer usag= e is tracked, with two primary goals: (1) reduce overhead of EXPLAIN ANALYZ= E, (2) enable future work like tracking estimated distinct buffer hits [0].=

Currently we utilize pgWalUsage/pgBufferUsage as = global counters, and in InstrStopNode we call the rather expensive=C2=A0Buf= ferUsageAccumDiff/WalUsageAccumDiff to know how much activity happened with= in a given node cycle.

This proposal instead uses = a stack, where each time we enter a node (InstrStartNode) we point a new gl= obal (pgInstrStack) to the current stack entry. Whilst we're in that no= de we increment buffer/WAL usage statistics to the stack entry. On exit=C2= =A0(InstrStopNode) we restore the previous entry.

= This change provides about a 10% performance benefit for EXPLAIN ANALYZE on= paths that repeatedly enter InstrStopNode, e.g. SELECT COUNT(*):

CREATE TABLE test(id int);
INSERT INTO test SELECT * FRO= M generate_series(0, 1000000);

master (124ms, best= out of 3):

postgres=3D# EXPLAIN (ANALYZE) SELECT = COUNT(*) FROM test;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0QUERY = PLAN =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
-------------------------= ---------------------------------------------------------------------------= --------------------
=C2=A0Aggregate =C2=A0(cost=3D16925.01..16925.02 ro= ws=3D1 width=3D8) (actual time=3D124.910..124.910 rows=3D1.00 loops=3D1)=C2=A0 =C2=A0Buffers: shared hit=3D752 read=3D3673
=C2=A0 =C2=A0-> = =C2=A0Seq Scan on test =C2=A0(cost=3D0.00..14425.01 rows=3D1000001 width=3D= 0) (actual time=3D0.201..62.228 rows=3D1000001.00 loops=3D1)
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0Buffers: shared hit=3D752 read=3D3673
=C2=A0Plan= ning Time: 0.116 ms
=C2=A0Execution Time: 124.961 ms

patched (109ms, best out of 3):

postgres=3D# EXPLAIN (ANALYZE)= SELECT COUNT(*) FROM test;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0QUERY PLAN =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
-----------= ---------------------------------------------------------------------------= ----------------------------------
=C2=A0Aggregate =C2=A0(cost=3D16925.0= 1..16925.02 rows=3D1 width=3D8) (actual time=3D109.788..109.788 rows=3D1.00= loops=3D1)
=C2=A0 =C2=A0Buffers: shared hit=3D940 read=3D3485
=C2=A0= =C2=A0-> =C2=A0Seq Scan on test =C2=A0(cost=3D0.00..14425.01 rows=3D100= 0001 width=3D0) (actual time=3D0.153..69.368 rows=3D1000001.00 loops=3D1)=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Buffers: shared hit=3D940 read=3D3485=C2=A0Planning Time: 0.134 ms
=C2=A0Execution Time: 109.837 ms
(6 r= ows)

I have also prototyped a more ambitious appro= ach that completely removes pgWalUsage/pgBufferUsage (utilizing the stack-c= ollected data for e.g. pg_stat_statements), but for now this patch set does= not include that change, but instead keeps adding to these legacy globals = as well.

Patches attached:

0001:=C2=A0Separate node instrumentation from other use of Instrumentatio= n struct
=C2=A0 =C2=A0
=C2=A0 =C2=A0 Previously different places (e.= g. query "total time") were repurposing the per-node Instrumentat= ion struct. Instead, simplify the Instrumentation struct to only track time= , WAL/buffer usage, and tuple counts. Similarly, drop the use of InstrEndLo= op outside of per-node instrumentation. Introduce the NodeInstrumentation s= truct to carry forward the per-node instrumentation information.
<= div>
0002:=C2=A0Replace direct changes of pgBufferUsage/pgWal= Usage with INSTR_* macros

0003: Introduce stack fo= r tracking per-node WAL/buffer usage

Feedback/thou= ghts welcome!

CCing Andres since he had expressed = interest in this off-list.

[0]: See lightning talk slides fro= m PGConf.Dev discussing an HLL-based EXPLAIN (BUFFERS DISTINCT):=C2=A0https://resources.pganalyze.com/pganalyze_PGConf.dev_202= 5_shared_blks_hit_distinct.pdf

Thanks,
Lukas

--
Luka= s Fittl
--000000000000064ba7063db2054c-- --000000000000064ba9063db2054e Content-Type: application/octet-stream; name="v1-0002-Replace-direct-changes-of-pgBufferUsage-pgWalUsag.patch" Content-Disposition: attachment; filename="v1-0002-Replace-direct-changes-of-pgBufferUsage-pgWalUsag.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf0cefmy2 RnJvbSA5NDJkOGViOWIwZjZhOGQ5NWM3Y2ZkNmE5OTVkOTNlYTljNjY3MTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBT dW4sIDMxIEF1ZyAyMDI1IDE2OjM0OjQyIC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2MSAyLzNdIFJl cGxhY2UgZGlyZWN0IGNoYW5nZXMgb2YgcGdCdWZmZXJVc2FnZS9wZ1dhbFVzYWdlCiB3aXRoIElO U1RSXyogbWFjcm9zCgpUaGlzIGVuY2Fwc3VsYXRlcyB0aGUgb3duZXJzaGlwIG9mIHRoZXNlIGds b2JhbHMgYmV0dGVyLCBhbmQgd2lsbCBhbGxvdwphIHN1YnNlcXVlbnQgcmVmYWN0b3JpbmcuCi0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgfCAgOCArKysrLS0tLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICAgfCAyNCArKysrKysrKysrKyst LS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMgIHwgIDYg KysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2ZpbGUvYnVmZmlsZS5jICAgICB8ICA4ICsrKyst LS0tCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfaW8uYyB8ICA4ICsrKystLS0t CiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmggICAgICB8IDE5ICsrKysrKysrKysr KysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNDYgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDdmZmIyMTc5MTUxLi42MTUxNmYz NTY3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtMTA3OCw5ICsxMDc4LDkgQEAg WExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJLyogUmVwb3J0IFdBTCB0cmFm ZmljIHRvIHRoZSBpbnN0cnVtZW50YXRpb24uICovCiAJaWYgKGluc2VydGVkKQogCXsKLQkJcGdX YWxVc2FnZS53YWxfYnl0ZXMgKz0gcmVjaGRyLT54bF90b3RfbGVuOwotCQlwZ1dhbFVzYWdlLndh bF9yZWNvcmRzKys7Ci0JCXBnV2FsVXNhZ2Uud2FsX2ZwaSArPSBudW1fZnBpOworCQlJTlNUUl9X QUxVU0FHRV9BREQod2FsX2J5dGVzLCByZWNoZHItPnhsX3RvdF9sZW4pOworCQlJTlNUUl9XQUxV U0FHRV9JTkNSKHdhbF9yZWNvcmRzKTsKKwkJSU5TVFJfV0FMVVNBR0VfQUREKHdhbF9mcGksIG51 bV9mcGkpOwogCiAJCS8qIFJlcXVpcmVkIGZvciB0aGUgZmx1c2ggb2YgcGVuZGluZyBzdGF0cyBX QUwgZGF0YSAqLwogCQlwZ3N0YXRfcmVwb3J0X2ZpeGVkID0gdHJ1ZTsKQEAgLTIwNjAsNyArMjA2 MCw3IEBAIEFkdmFuY2VYTEluc2VydEJ1ZmZlcihYTG9nUmVjUHRyIHVwdG8sIFRpbWVMaW5lSUQg dGxpLCBib29sIG9wcG9ydHVuaXN0aWMpCiAJCQkJCVdyaXRlUnFzdC5GbHVzaCA9IDA7CiAJCQkJ CVhMb2dXcml0ZShXcml0ZVJxc3QsIHRsaSwgZmFsc2UpOwogCQkJCQlMV0xvY2tSZWxlYXNlKFdB TFdyaXRlTG9jayk7Ci0JCQkJCXBnV2FsVXNhZ2Uud2FsX2J1ZmZlcnNfZnVsbCsrOworCQkJCQlJ TlNUUl9XQUxVU0FHRV9JTkNSKHdhbF9idWZmZXJzX2Z1bGwpOwogCQkJCQlUUkFDRV9QT1NUR1JF U1FMX1dBTF9CVUZGRVJfV1JJVEVfRElSVFlfRE9ORSgpOwogCiAJCQkJCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IDM1MGNjMDQwMmFhLi40MWY3YzcyOWMxZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTcwNSw3ICs3MDUsNyBAQCBSZWFkUmVjZW50 QnVmZmVyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2Nr TnVtYmVyIGJsb2NrTgogCQl7CiAJCQlQaW5Mb2NhbEJ1ZmZlcihidWZIZHIsIHRydWUpOwogCi0J CQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0Kys7CisJCQlJTlNUUl9CVUZVU0FHRV9JTkNS KGxvY2FsX2Jsa3NfaGl0KTsKIAogCQkJcmV0dXJuIHRydWU7CiAJCX0KQEAgLTczNyw3ICs3Mzcs NyBAQCBSZWFkUmVjZW50QnVmZmVyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVy IGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTgogCQkJZWxzZQogCQkJCVBpbkJ1ZmZlcl9Mb2Nr ZWQoYnVmSGRyKTsJLyogcGluIGZvciBmaXJzdCB0aW1lICovCiAKLQkJCXBnQnVmZmVyVXNhZ2Uu c2hhcmVkX2Jsa3NfaGl0Kys7CisJCQlJTlNUUl9CVUZVU0FHRV9JTkNSKHNoYXJlZF9ibGtzX2hp dCk7CiAKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0xMTQ3LDE0ICsxMTQ3LDE0IEBAIFBpbkJ1 ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwKIAl7CiAJCWJ1ZkhkciA9IExvY2FsQnVmZmVyQWxs b2Moc21nciwgZm9ya051bSwgYmxvY2tOdW0sIGZvdW5kUHRyKTsKIAkJaWYgKCpmb3VuZFB0cikK LQkJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQrKzsKKwkJCUlOU1RSX0JVRlVTQUdFX0lO Q1IobG9jYWxfYmxrc19oaXQpOwogCX0KIAllbHNlCiAJewogCQlidWZIZHIgPSBCdWZmZXJBbGxv YyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCiAJCQkJCQkJIHN0cmF0ZWd5 LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7CiAJCWlmICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZlclVz YWdlLnNoYXJlZF9ibGtzX2hpdCsrOworCQkJSU5TVFJfQlVGVVNBR0VfSU5DUihzaGFyZWRfYmxr c19oaXQpOwogCX0KIAlpZiAocmVsKQogCXsKQEAgLTE4ODgsOSArMTg4OCw5IEBAIEFzeW5jUmVh ZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3By b2dyZXNzKQogCQkJCQkJCQkJCSAgdHJ1ZSk7CiAKIAkJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBF UlNJU1RFTkNFX1RFTVApCi0JCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJ CQlJTlNUUl9CVUZVU0FHRV9JTkNSKGxvY2FsX2Jsa3NfaGl0KTsKIAkJZWxzZQotCQkJcGdCdWZm ZXJVc2FnZS5zaGFyZWRfYmxrc19oaXQgKz0gMTsKKwkJCUlOU1RSX0JVRlVTQUdFX0lOQ1Ioc2hh cmVkX2Jsa3NfaGl0KTsKIAogCQlpZiAob3BlcmF0aW9uLT5yZWwpCiAJCQlwZ3N0YXRfY291bnRf YnVmZmVyX2hpdChvcGVyYXRpb24tPnJlbCk7CkBAIC0xOTU4LDkgKzE5NTgsOSBAQCBBc3luY1Jl YWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19w cm9ncmVzcykKIAkJCQkJCQkJaW9fc3RhcnQsIDEsIGlvX2J1ZmZlcnNfbGVuICogQkxDS1NaKTsK IAogCQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQkJCXBnQnVmZmVy VXNhZ2UubG9jYWxfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOworCQkJSU5TVFJfQlVGVVNB R0VfQUREKGxvY2FsX2Jsa3NfcmVhZCwgaW9fYnVmZmVyc19sZW4pOwogCQllbHNlCi0JCQlwZ0J1 ZmZlclVzYWdlLnNoYXJlZF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47CisJCQlJTlNUUl9C VUZVU0FHRV9BREQoc2hhcmVkX2Jsa3NfcmVhZCwgaW9fYnVmZmVyc19sZW4pOwogCiAJCS8qCiAJ CSAqIFRyYWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcg Zm9yIGl0LgpAQCAtMjg2NSw3ICsyODY1LDcgQEAgRXh0ZW5kQnVmZmVyZWRSZWxTaGFyZWQoQnVm ZmVyTWFuYWdlclJlbGF0aW9uIGJtciwKIAkJVGVybWluYXRlQnVmZmVySU8oYnVmX2hkciwgZmFs c2UsIEJNX1ZBTElELCB0cnVlLCBmYWxzZSk7CiAJfQogCi0JcGdCdWZmZXJVc2FnZS5zaGFyZWRf Ymxrc193cml0dGVuICs9IGV4dGVuZF9ieTsKKwlJTlNUUl9CVUZVU0FHRV9BREQoc2hhcmVkX2Js a3Nfd3JpdHRlbiwgZXh0ZW5kX2J5KTsKIAogCSpleHRlbmRlZF9ieSA9IGV4dGVuZF9ieTsKIApA QCAtMjk4Myw3ICsyOTgzLDcgQEAgTWFya0J1ZmZlckRpcnR5KEJ1ZmZlciBidWZmZXIpCiAJICov CiAJaWYgKCEob2xkX2J1Zl9zdGF0ZSAmIEJNX0RJUlRZKSkKIAl7Ci0JCXBnQnVmZmVyVXNhZ2Uu c2hhcmVkX2Jsa3NfZGlydGllZCsrOworCQlJTlNUUl9CVUZVU0FHRV9JTkNSKHNoYXJlZF9ibGtz X2RpcnRpZWQpOwogCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKIAkJCVZhY3V1bUNvc3RCYWxhbmNl ICs9IFZhY3V1bUNvc3RQYWdlRGlydHk7CiAJfQpAQCAtNDM5MSw3ICs0MzkxLDcgQEAgRmx1c2hC dWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbiwgSU9PYmplY3QgaW9fb2Jq ZWN0LAogCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKElPT0JKRUNUX1JFTEFUSU9OLCBpb19jb250 ZXh0LAogCQkJCQkJCUlPT1BfV1JJVEUsIGlvX3N0YXJ0LCAxLCBCTENLU1opOwogCi0JcGdCdWZm ZXJVc2FnZS5zaGFyZWRfYmxrc193cml0dGVuKys7CisJSU5TVFJfQlVGVVNBR0VfSU5DUihzaGFy ZWRfYmxrc193cml0dGVuKTsKIAogCS8qCiAJICogTWFyayB0aGUgYnVmZmVyIGFzIGNsZWFuICh1 bmxlc3MgQk1fSlVTVF9ESVJUSUVEIGhhcyBiZWNvbWUgc2V0KSBhbmQKQEAgLTU1NDcsNyArNTU0 Nyw3IEBAIE1hcmtCdWZmZXJEaXJ0eUhpbnQoQnVmZmVyIGJ1ZmZlciwgYm9vbCBidWZmZXJfc3Rk KQogCiAJCWlmIChkaXJ0aWVkKQogCQl7Ci0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2Rp cnRpZWQrKzsKKwkJCUlOU1RSX0JVRlVTQUdFX0lOQ1Ioc2hhcmVkX2Jsa3NfZGlydGllZCk7CiAJ CQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKIAkJCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1D b3N0UGFnZURpcnR5OwogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9sb2NhbGJ1Zi5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYwppbmRl eCAzYzBkMjBmNDY1OS4uNDZiYzU3ODEyZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2xvY2FsYnVmLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9j YWxidWYuYwpAQCAtMjE2LDcgKzIxNiw3IEBAIEZsdXNoTG9jYWxCdWZmZXIoQnVmZmVyRGVzYyAq YnVmSGRyLCBTTWdyUmVsYXRpb24gcmVsbikKIAkvKiBNYXJrIG5vdC1kaXJ0eSAqLwogCVRlcm1p bmF0ZUxvY2FsQnVmZmVySU8oYnVmSGRyLCB0cnVlLCAwLCBmYWxzZSk7CiAKLQlwZ0J1ZmZlclVz YWdlLmxvY2FsX2Jsa3Nfd3JpdHRlbisrOworCUlOU1RSX0JVRlVTQUdFX0lOQ1IobG9jYWxfYmxr c193cml0dGVuKTsKIH0KIAogc3RhdGljIEJ1ZmZlcgpAQCAtNDc2LDcgKzQ3Niw3IEBAIEV4dGVu ZEJ1ZmZlcmVkUmVsTG9jYWwoQnVmZmVyTWFuYWdlclJlbGF0aW9uIGJtciwKIAogCSpleHRlbmRl ZF9ieSA9IGV4dGVuZF9ieTsKIAotCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc193cml0dGVuICs9 IGV4dGVuZF9ieTsKKwlJTlNUUl9CVUZVU0FHRV9BREQobG9jYWxfYmxrc193cml0dGVuLCBleHRl bmRfYnkpOwogCiAJcmV0dXJuIGZpcnN0X2Jsb2NrOwogfQpAQCAtNTA3LDcgKzUwNyw3IEBAIE1h cmtMb2NhbEJ1ZmZlckRpcnR5KEJ1ZmZlciBidWZmZXIpCiAJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTMyKCZidWZIZHItPnN0YXRlKTsKIAogCWlmICghKGJ1Zl9zdGF0ZSAmIEJNX0RJUlRZ KSkKLQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2RpcnRpZWQrKzsKKwkJSU5TVFJfQlVGVVNB R0VfSU5DUihsb2NhbF9ibGtzX2RpcnRpZWQpOwogCiAJYnVmX3N0YXRlIHw9IEJNX0RJUlRZOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2ZpbGUvYnVmZmlsZS5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9maWxlL2J1ZmZpbGUuYwppbmRleCAzNjZkNzBkMzhhMS4uOWQzOWRmOTk4 Y2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9idWZmaWxlLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9maWxlL2J1ZmZpbGUuYwpAQCAtNDc0LDEzICs0NzQsMTMgQEAg QnVmRmlsZUxvYWRCdWZmZXIoQnVmRmlsZSAqZmlsZSkKIAlpZiAodHJhY2tfaW9fdGltaW5nKQog CXsKIAkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChpb190aW1lKTsKLQkJSU5TVFJfVElNRV9BQ0NV TV9ESUZGKHBnQnVmZmVyVXNhZ2UudGVtcF9ibGtfcmVhZF90aW1lLCBpb190aW1lLCBpb19zdGFy dCk7CisJCUlOU1RSX0JVRlVTQUdFX1RJTUVfQUNDVU1fRElGRih0ZW1wX2Jsa19yZWFkX3RpbWUs IGlvX3RpbWUsIGlvX3N0YXJ0KTsKIAl9CiAKIAkvKiB3ZSBjaG9vc2Ugbm90IHRvIGFkdmFuY2Ug Y3VyT2Zmc2V0IGhlcmUgKi8KIAogCWlmIChmaWxlLT5uYnl0ZXMgPiAwKQotCQlwZ0J1ZmZlclVz YWdlLnRlbXBfYmxrc19yZWFkKys7CisJCUlOU1RSX0JVRlVTQUdFX0lOQ1IodGVtcF9ibGtzX3Jl YWQpOwogfQogCiAvKgpAQCAtNTQ4LDEzICs1NDgsMTMgQEAgQnVmRmlsZUR1bXBCdWZmZXIoQnVm RmlsZSAqZmlsZSkKIAkJaWYgKHRyYWNrX2lvX3RpbWluZykKIAkJewogCQkJSU5TVFJfVElNRV9T RVRfQ1VSUkVOVChpb190aW1lKTsKLQkJCUlOU1RSX1RJTUVfQUNDVU1fRElGRihwZ0J1ZmZlclVz YWdlLnRlbXBfYmxrX3dyaXRlX3RpbWUsIGlvX3RpbWUsIGlvX3N0YXJ0KTsKKwkJCUlOU1RSX0JV RlVTQUdFX1RJTUVfQUNDVU1fRElGRih0ZW1wX2Jsa193cml0ZV90aW1lLCBpb190aW1lLCBpb19z dGFydCk7CiAJCX0KIAogCQlmaWxlLT5jdXJPZmZzZXQgKz0gYnl0ZXN0b3dyaXRlOwogCQl3cG9z ICs9IGJ5dGVzdG93cml0ZTsKIAotCQlwZ0J1ZmZlclVzYWdlLnRlbXBfYmxrc193cml0dGVuKys7 CisJCUlOU1RSX0JVRlVTQUdFX0lOQ1IodGVtcF9ibGtzX3dyaXR0ZW4pOwogCX0KIAlmaWxlLT5k aXJ0eSA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9w Z3N0YXRfaW8uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9pby5jCmluZGV4 IDEzYWU1N2VkNjQ5Li40ZjYyNzRlYjU3MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvcGdzdGF0X2lvLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdz dGF0X2lvLmMKQEAgLTEzNSwxNyArMTM1LDE3IEBAIHBnc3RhdF9jb3VudF9pb19vcF90aW1lKElP T2JqZWN0IGlvX29iamVjdCwgSU9Db250ZXh0IGlvX2NvbnRleHQsIElPT3AgaW9fb3AsCiAJCQl7 CiAJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl93cml0ZV90aW1lKElOU1RSX1RJTUVfR0VUX01JQ1JP U0VDKGlvX3RpbWUpKTsKIAkJCQlpZiAoaW9fb2JqZWN0ID09IElPT0JKRUNUX1JFTEFUSU9OKQot CQkJCQlJTlNUUl9USU1FX0FERChwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtfd3JpdGVfdGltZSwg aW9fdGltZSk7CisJCQkJCUlOU1RSX0JVRlVTQUdFX1RJTUVfQUREKHNoYXJlZF9ibGtfd3JpdGVf dGltZSwgaW9fdGltZSk7CiAJCQkJZWxzZSBpZiAoaW9fb2JqZWN0ID09IElPT0JKRUNUX1RFTVBf UkVMQVRJT04pCi0JCQkJCUlOU1RSX1RJTUVfQUREKHBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrX3dy aXRlX3RpbWUsIGlvX3RpbWUpOworCQkJCQlJTlNUUl9CVUZVU0FHRV9USU1FX0FERChsb2NhbF9i bGtfd3JpdGVfdGltZSwgaW9fdGltZSk7CiAJCQl9CiAJCQllbHNlIGlmIChpb19vcCA9PSBJT09Q X1JFQUQpCiAJCQl7CiAJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkX3RpbWUoSU5TVFJfVElN RV9HRVRfTUlDUk9TRUMoaW9fdGltZSkpOwogCQkJCWlmIChpb19vYmplY3QgPT0gSU9PQkpFQ1Rf UkVMQVRJT04pCi0JCQkJCUlOU1RSX1RJTUVfQUREKHBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa19y ZWFkX3RpbWUsIGlvX3RpbWUpOworCQkJCQlJTlNUUl9CVUZVU0FHRV9USU1FX0FERChzaGFyZWRf YmxrX3JlYWRfdGltZSwgaW9fdGltZSk7CiAJCQkJZWxzZSBpZiAoaW9fb2JqZWN0ID09IElPT0JK RUNUX1RFTVBfUkVMQVRJT04pCi0JCQkJCUlOU1RSX1RJTUVfQUREKHBnQnVmZmVyVXNhZ2UubG9j YWxfYmxrX3JlYWRfdGltZSwgaW9fdGltZSk7CisJCQkJCUlOU1RSX0JVRlVTQUdFX1RJTUVfQURE KGxvY2FsX2Jsa19yZWFkX3RpbWUsIGlvX3RpbWUpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2luc3RydW1lbnQuaAppbmRleCA4YzU2MzUxMGY0Yy4uM2EyODBmNGNhYWUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaAorKysgYi9zcmMvaW5jbHVkZS9leGVj dXRvci9pbnN0cnVtZW50LmgKQEAgLTE0OSw0ICsxNDksMjMgQEAgZXh0ZXJuIHZvaWQgQnVmZmVy VXNhZ2VBY2N1bURpZmYoQnVmZmVyVXNhZ2UgKmRzdCwKIGV4dGVybiB2b2lkIFdhbFVzYWdlQWNj dW1EaWZmKFdhbFVzYWdlICpkc3QsIGNvbnN0IFdhbFVzYWdlICphZGQsCiAJCQkJCQkJICBjb25z dCBXYWxVc2FnZSAqc3ViKTsKIAorI2RlZmluZSBJTlNUUl9CVUZVU0FHRV9JTkNSKGZsZCkgZG8g eyBcCisJCXBnQnVmZmVyVXNhZ2UuZmxkKys7IFwKKwl9IHdoaWxlKDApCisjZGVmaW5lIElOU1RS X0JVRlVTQUdFX0FERChmbGQsdmFsKSBkbyB7IFwKKwkJcGdCdWZmZXJVc2FnZS5mbGQgKz0gdmFs OyBcCisJfSB3aGlsZSgwKQorI2RlZmluZSBJTlNUUl9CVUZVU0FHRV9USU1FX0FERChmbGQsdmFs KSBkbyB7IFwKKwlJTlNUUl9USU1FX0FERChwZ0J1ZmZlclVzYWdlLmZsZCwgdmFsKTsgXAorCX0g d2hpbGUgKDApCisjZGVmaW5lIElOU1RSX0JVRlVTQUdFX1RJTUVfQUNDVU1fRElGRihmbGQsZW5k dmFsLHN0YXJ0dmFsKSBkbyB7IFwKKwlJTlNUUl9USU1FX0FDQ1VNX0RJRkYocGdCdWZmZXJVc2Fn ZS5mbGQsIGVuZHZhbCwgc3RhcnR2YWwpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgSU5TVFJf V0FMVVNBR0VfSU5DUihmbGQpIGRvIHsgXAorCQlwZ1dhbFVzYWdlLmZsZCsrOyBcCisJfSB3aGls ZSgwKQorI2RlZmluZSBJTlNUUl9XQUxVU0FHRV9BREQoZmxkLHZhbCkgZG8geyBcCisJCXBnV2Fs VXNhZ2UuZmxkICs9IHZhbDsgXAorCX0gd2hpbGUoMCkKKwogI2VuZGlmCQkJCQkJCS8qIElOU1RS VU1FTlRfSCAqLwotLSAKMi40Ny4xCgo= --000000000000064ba9063db2054e Content-Type: application/octet-stream; name="v1-0001-Separate-node-instrumentation-from-other-use-of-I.patch" Content-Disposition: attachment; filename="v1-0001-Separate-node-instrumentation-from-other-use-of-I.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf0cefmo0 RnJvbSAzZTM1NTQ3NzEyZjFmYjEwYmNlNGZiMzkwODkxMmEyODIxOTZiMTk4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBT YXQsIDEgTWFyIDIwMjUgMTk6MzE6MzAgLTA4MDAKU3ViamVjdDogW1BBVENIIHYxIDEvM10gU2Vw YXJhdGUgbm9kZSBpbnN0cnVtZW50YXRpb24gZnJvbSBvdGhlciB1c2Ugb2YKIEluc3RydW1lbnRh dGlvbiBzdHJ1Y3QKClByZXZpb3VzbHkgZGlmZmVyZW50IHBsYWNlcyAoZS5nLiBxdWVyeSAidG90 YWwgdGltZSIpIHdlcmUgcmVwdXJwb3NpbmcKdGhlIEluc3RydW1lbnRhdGlvbiBzdHJ1Y3QgaW5p dGlhbGx5IGludHJvZHVjZWQgZm9yIGNhcHR1cmluZyBwZXItbm9kZQpzdGF0aXN0aWNzIGR1cmlu ZyBleGVjdXRpb24uIFRoaXMgZHVhbCB1c2Ugb2YgdGhlIHN0cnVjdCBpcyBjb25mdXNpbmcsCmUu Zy4gYnkgY2x1dHRlcmluZyBjYWxscyBvZiBJbnN0clN0YXJ0Tm9kZS9JbnN0clN0b3BOb2RlIGlu IHVucmVsYXRlZApjb2RlIHBhdGhzLCBhbmQgcHJldmVudHMgZnV0dXJlIHJlZmFjdG9yaW5ncy4K Ckluc3RlYWQsIHNpbXBsaWZ5IHRoZSBJbnN0cnVtZW50YXRpb24gc3RydWN0IHRvIG9ubHkgdHJh Y2sgdGltZSwKV0FML2J1ZmZlciB1c2FnZSwgYW5kIHR1cGxlIGNvdW50cy4gU2ltaWxhcmx5LCBk cm9wIHRoZSB1c2Ugb2YgSW5zdHJFbmRMb29wCm91dHNpZGUgb2YgcGVyLW5vZGUgaW5zdHJ1bWVu dGF0aW9uLiBJbnRyb2R1Y2UgdGhlIE5vZGVJbnN0cnVtZW50YXRpb24Kc3RydWN0IHRvIGNhcnJ5 IGZvcndhcmQgdGhlIHBlci1ub2RlIGluc3RydW1lbnRhdGlvbiBpbmZvcm1hdGlvbi4KLS0tCiBj b250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYyAgICAgICAgICAgfCAxMCArLS0KIC4u Li9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMgICB8IDEwICstLQogY29u dHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgICAgICAgIHwgIDIgKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICAgICB8IDExICstLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jICAgICAgICAgICAgICAgIHwgIDggKy0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgICAgICAgICAgICAgICB8IDEwICstLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgICAgICAgICAgIHwgMjIgKysrLS0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAgICAgICB8ICA0ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9pbnN0cnVtZW50LmMgICAgICAgICAgICAgfCA4NiArKysrKysrKysrKysrKysr Ky0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmggICAgICAgICAgICAgfCA1MSAr KysrKysrKy0tLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAg IHwgIDMgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDE1MyBpbnNlcnRpb25zKCspLCA2NCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYyBi L2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCmluZGV4IDFmNGJhZGI0OTI4Li5i ZDA1OWYxMjIyNCAxMDA2NDQKLS0tIGEvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBsYWlu LmMKKysrIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBsYWluLmMKQEAgLTMxNSw3ICsz MTUsNyBAQCBleHBsYWluX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBl ZmxhZ3MpCiAJCQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAogCQkJb2xkY3h0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19xdWVyeV9jeHQpOwotCQkJcXVlcnlE ZXNjLT50b3RhbHRpbWUgPSBJbnN0ckFsbG9jKDEsIElOU1RSVU1FTlRfQUxMLCBmYWxzZSk7CisJ CQlxdWVyeURlc2MtPnRvdGFsdGltZSA9IEluc3RyQWxsb2MoMSwgSU5TVFJVTUVOVF9BTEwpOwog CQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAJCX0KIAl9CkBAIC0zODEsMTQgKzM4 MSw4IEBAIGV4cGxhaW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJCSAqLwog CQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocXVlcnlEZXNjLT5lc3RhdGUtPmVzX3F1 ZXJ5X2N4dCk7CiAKLQkJLyoKLQkJICogTWFrZSBzdXJlIHN0YXRzIGFjY3VtdWxhdGlvbiBpcyBk b25lLiAgKE5vdGU6IGl0J3Mgb2theSBpZiBzZXZlcmFsCi0JCSAqIGxldmVscyBvZiBob29rIGFs bCBkbyB0aGlzLikKLQkJICovCi0JCUluc3RyRW5kTG9vcChxdWVyeURlc2MtPnRvdGFsdGltZSk7 Ci0KIAkJLyogTG9nIHBsYW4gaWYgZHVyYXRpb24gaXMgZXhjZWVkZWQuICovCi0JCW1zZWMgPSBx dWVyeURlc2MtPnRvdGFsdGltZS0+dG90YWwgKiAxMDAwLjA7CisJCW1zZWMgPSBJTlNUUl9USU1F X0dFVF9ET1VCTEUocXVlcnlEZXNjLT50b3RhbHRpbWUtPnRvdGFsKSAqIDEwMDAuMDsKIAkJaWYg KG1zZWMgPj0gYXV0b19leHBsYWluX2xvZ19taW5fZHVyYXRpb24pCiAJCXsKIAkJCUV4cGxhaW5T dGF0ZSAqZXMgPSBOZXdFeHBsYWluU3RhdGUoKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rh dF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jIGIvY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKaW5kZXggMWNiMzY4Yzg1OTAuLmExZTY5Nzg5Yzcz IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVu dHMuYworKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMu YwpAQCAtMTAyMSw3ICsxMDIxLDcgQEAgcGdzc19FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVl cnlEZXNjLCBpbnQgZWZsYWdzKQogCQkJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAKIAkJCW9sZGN4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcXVlcnlfY3h0 KTsKLQkJCXF1ZXJ5RGVzYy0+dG90YWx0aW1lID0gSW5zdHJBbGxvYygxLCBJTlNUUlVNRU5UX0FM TCwgZmFsc2UpOworCQkJcXVlcnlEZXNjLT50b3RhbHRpbWUgPSBJbnN0ckFsbG9jKDEsIElOU1RS VU1FTlRfQUxMKTsKIAkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCQl9CiAJfQpA QCAtMTA4MCwxOCArMTA4MCwxMiBAQCBwZ3NzX0V4ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlE ZXNjKQogCWlmIChxdWVyeUlkICE9IElOVDY0Q09OU1QoMCkgJiYgcXVlcnlEZXNjLT50b3RhbHRp bWUgJiYKIAkJcGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwpKQogCXsKLQkJLyoKLQkJICogTWFr ZSBzdXJlIHN0YXRzIGFjY3VtdWxhdGlvbiBpcyBkb25lLiAgKE5vdGU6IGl0J3Mgb2theSBpZiBz ZXZlcmFsCi0JCSAqIGxldmVscyBvZiBob29rIGFsbCBkbyB0aGlzLikKLQkJICovCi0JCUluc3Ry RW5kTG9vcChxdWVyeURlc2MtPnRvdGFsdGltZSk7Ci0KIAkJcGdzc19zdG9yZShxdWVyeURlc2Mt PnNvdXJjZVRleHQsCiAJCQkJICAgcXVlcnlJZCwKIAkJCQkgICBxdWVyeURlc2MtPnBsYW5uZWRz dG10LT5zdG10X2xvY2F0aW9uLAogCQkJCSAgIHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnN0bXRf bGVuLAogCQkJCSAgIFBHU1NfRVhFQywKLQkJCQkgICBxdWVyeURlc2MtPnRvdGFsdGltZS0+dG90 YWwgKiAxMDAwLjAsCS8qIGNvbnZlcnQgdG8gbXNlYyAqLworCQkJCSAgIElOU1RSX1RJTUVfR0VU X0RPVUJMRShxdWVyeURlc2MtPnRvdGFsdGltZS0+dG90YWwpICogMTAwMC4wLCAvKiBjb252ZXJ0 IHRvIG1zZWMgKi8KIAkJCQkgICBxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfdG90YWxfcHJvY2Vzc2Vk LAogCQkJCSAgICZxdWVyeURlc2MtPnRvdGFsdGltZS0+YnVmdXNhZ2UsCiAJCQkJICAgJnF1ZXJ5 RGVzYy0+dG90YWx0aW1lLT53YWx1c2FnZSwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMK aW5kZXggNDU2YjI2N2Y3MGIuLjc2MTlhYzQ4NmMwIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYwpAQCAtMjc3OCw3ICsyNzc4LDcgQEAgcG9zdGdyZXNJdGVyYXRlRGlyZWN0TW9kaWZ5 KEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUpCiAJaWYgKCFyZXN1bHRSZWxJbmZvLT5yaV9wcm9qZWN0 UmV0dXJuaW5nKQogCXsKIAkJVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBub2RlLT5zcy5zc19TY2Fu VHVwbGVTbG90OwotCQlJbnN0cnVtZW50YXRpb24gKmluc3RyID0gbm9kZS0+c3MucHMuaW5zdHJ1 bWVudDsKKwkJTm9kZUluc3RydW1lbnRhdGlvbiAqaW5zdHIgPSBub2RlLT5zcy5wcy5pbnN0cnVt ZW50OwogCiAJCUFzc2VydCghZG1zdGF0ZS0+aGFzX3JldHVybmluZyk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 cGxhaW4uYwppbmRleCA4MzQ1YmMwMjY0Yi4uNmExMzVlNTE5OTYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBs YWluLmMKQEAgLTExMDIsOSArMTEwMiw2IEBAIHJlcG9ydF90cmlnZ2VycyhSZXN1bHRSZWxJbmZv ICpySW5mbywgYm9vbCBzaG93X3JlbG5hbWUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCWNoYXIJICAg KnJlbG5hbWU7CiAJCWNoYXIJICAgKmNvbm5hbWUgPSBOVUxMOwogCi0JCS8qIE11c3QgY2xlYW4g dXAgaW5zdHJ1bWVudGF0aW9uIHN0YXRlICovCi0JCUluc3RyRW5kTG9vcChpbnN0cik7Ci0KIAkJ LyoKIAkJICogV2UgaWdub3JlIHRyaWdnZXJzIHRoYXQgd2VyZSBuZXZlciBpbnZva2VkOyB0aGV5 IGxpa2VseSBhcmVuJ3QKIAkJICogcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgcXVlcnkgdHlwZS4K QEAgLTExMzUsNyArMTEzMiw3IEBAIHJlcG9ydF90cmlnZ2VycyhSZXN1bHRSZWxJbmZvICpySW5m bywgYm9vbCBzaG93X3JlbG5hbWUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQkJYXBwZW5kU3RyaW5n SW5mbyhlcy0+c3RyLCAiIG9uICVzIiwgcmVsbmFtZSk7CiAJCQlpZiAoZXMtPnRpbWluZykKIAkJ CQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICI6IHRpbWU9JS4zZiBjYWxscz0lLjBmXG4iLAot CQkJCQkJCQkgMTAwMC4wICogaW5zdHItPnRvdGFsLCBpbnN0ci0+bnR1cGxlcyk7CisJCQkJCQkJ CSAxMDAwLjAgKiBJTlNUUl9USU1FX0dFVF9ET1VCTEUoaW5zdHItPnRvdGFsKSwgaW5zdHItPm50 dXBsZXMpOwogCQkJZWxzZQogCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIjogY2FsbHM9 JS4wZlxuIiwgaW5zdHItPm50dXBsZXMpOwogCQl9CkBAIC0xMTQ2LDcgKzExNDMsNyBAQCByZXBv cnRfdHJpZ2dlcnMoUmVzdWx0UmVsSW5mbyAqckluZm8sIGJvb2wgc2hvd19yZWxuYW1lLCBFeHBs YWluU3RhdGUgKmVzKQogCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIkNvbnN0cmFpbnQgTmFtZSIs IGNvbm5hbWUsIGVzKTsKIAkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIlJlbGF0aW9uIiwgcmVsbmFt ZSwgZXMpOwogCQkJaWYgKGVzLT50aW1pbmcpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIlRp bWUiLCAibXMiLCAxMDAwLjAgKiBpbnN0ci0+dG90YWwsIDMsCisJCQkJRXhwbGFpblByb3BlcnR5 RmxvYXQoIlRpbWUiLCAibXMiLCAxMDAwLjAgKiBJTlNUUl9USU1FX0dFVF9ET1VCTEUoaW5zdHIt PnRvdGFsKSwgMywKIAkJCQkJCQkJCSBlcyk7CiAJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQ2Fs bHMiLCBOVUxMLCBpbnN0ci0+bnR1cGxlcywgMCwgZXMpOwogCQl9CkBAIC0xODg4LDcgKzE4ODUs NyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAog CiAJCWZvciAoaW50IG4gPSAwOyBuIDwgdy0+bnVtX3dvcmtlcnM7IG4rKykKIAkJewotCQkJSW5z dHJ1bWVudGF0aW9uICppbnN0cnVtZW50ID0gJnctPmluc3RydW1lbnRbbl07CisJCQlOb2RlSW5z dHJ1bWVudGF0aW9uICppbnN0cnVtZW50ID0gJnctPmluc3RydW1lbnRbbl07CiAJCQlkb3VibGUJ CW5sb29wcyA9IGluc3RydW1lbnQtPm5sb29wczsKIAkJCWRvdWJsZQkJc3RhcnR1cF9tczsKIAkJ CWRvdWJsZQkJdG90YWxfbXM7CkBAIC0yMjk0LDcgKzIyOTEsNyBAQCBFeHBsYWluTm9kZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCiAJCWZvciAoaW50IG4gPSAwOyBu IDwgdy0+bnVtX3dvcmtlcnM7IG4rKykKIAkJewotCQkJSW5zdHJ1bWVudGF0aW9uICppbnN0cnVt ZW50ID0gJnctPmluc3RydW1lbnRbbl07CisJCQlOb2RlSW5zdHJ1bWVudGF0aW9uICppbnN0cnVt ZW50ID0gJnctPmluc3RydW1lbnRbbl07CiAJCQlkb3VibGUJCW5sb29wcyA9IGluc3RydW1lbnQt Pm5sb29wczsKIAogCQkJaWYgKG5sb29wcyA8PSAwKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCmluZGV4 IDU3OWFjOGQ3NmFlLi45YjUzZGQ5OWU5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYwpAQCAtMjM0 NCw3ICsyMzQ0LDcgQEAgRXhlY0NhbGxUcmlnZ2VyRnVuYyhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEs CiAJICogSWYgZG9pbmcgRVhQTEFJTiBBTkFMWVpFLCBzdGFydCBjaGFyZ2luZyB0aW1lIHRvIHRo aXMgdHJpZ2dlci4KIAkgKi8KIAlpZiAoaW5zdHIpCi0JCUluc3RyU3RhcnROb2RlKGluc3RyICsg dGdpbmR4KTsKKwkJSW5zdHJTdGFydChpbnN0ciArIHRnaW5keCk7CiAKIAkvKgogCSAqIERvIHRo ZSBmdW5jdGlvbiBldmFsdWF0aW9uIGluIHRoZSBwZXItdHVwbGUgbWVtb3J5IGNvbnRleHQsIHNv IHRoYXQKQEAgLTIzOTIsNyArMjM5Miw3IEBAIEV4ZWNDYWxsVHJpZ2dlckZ1bmMoVHJpZ2dlckRh dGEgKnRyaWdkYXRhLAogCSAqIG9uZSAidHVwbGUgcmV0dXJuZWQiIChyZWFsbHkgdGhlIG51bWJl ciBvZiBmaXJpbmdzKS4KIAkgKi8KIAlpZiAoaW5zdHIpCi0JCUluc3RyU3RvcE5vZGUoaW5zdHIg KyB0Z2luZHgsIDEpOworCQlJbnN0clN0b3AoaW5zdHIgKyB0Z2luZHgsIDEpOwogCiAJcmV0dXJu IChIZWFwVHVwbGUpIERhdHVtR2V0UG9pbnRlcihyZXN1bHQpOwogfQpAQCAtNDM4MSw3ICs0Mzgx LDcgQEAgQWZ0ZXJUcmlnZ2VyRXhlY3V0ZShFU3RhdGUgKmVzdGF0ZSwKIAkgKiB0byBpbmNsdWRl IHRpbWUgc3BlbnQgcmUtZmV0Y2hpbmcgdHVwbGVzIGluIHRoZSB0cmlnZ2VyIGNvc3QuCiAJICov CiAJaWYgKGluc3RyKQotCQlJbnN0clN0YXJ0Tm9kZShpbnN0ciArIHRnaW5keCk7CisJCUluc3Ry U3RhcnQoaW5zdHIgKyB0Z2luZHgpOwogCiAJLyoKIAkgKiBGZXRjaCB0aGUgcmVxdWlyZWQgdHVw bGUocykuCkBAIC00NjA3LDcgKzQ2MDcsNyBAQCBBZnRlclRyaWdnZXJFeGVjdXRlKEVTdGF0ZSAq ZXN0YXRlLAogCSAqIG9uZSAidHVwbGUgcmV0dXJuZWQiIChyZWFsbHkgdGhlIG51bWJlciBvZiBm aXJpbmdzKS4KIAkgKi8KIAlpZiAoaW5zdHIpCi0JCUluc3RyU3RvcE5vZGUoaW5zdHIgKyB0Z2lu ZHgsIDEpOworCQlJbnN0clN0b3AoaW5zdHIgKyB0Z2luZHgsIDEpOwogfQogCiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjTWFpbi5jCmluZGV4IGI4YjlkMmE4NWY3Li5iODNjZWQ5YTU3YSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjTWFpbi5jCkBAIC0zMzEsNyArMzMxLDcgQEAgc3RhbmRhcmRfRXhlY3V0b3JSdW4oUXVl cnlEZXNjICpxdWVyeURlc2MsCiAKIAkvKiBBbGxvdyBpbnN0cnVtZW50YXRpb24gb2YgRXhlY3V0 b3Igb3ZlcmFsbCBydW50aW1lICovCiAJaWYgKHF1ZXJ5RGVzYy0+dG90YWx0aW1lKQotCQlJbnN0 clN0YXJ0Tm9kZShxdWVyeURlc2MtPnRvdGFsdGltZSk7CisJCUluc3RyU3RhcnQocXVlcnlEZXNj LT50b3RhbHRpbWUpOwogCiAJLyoKIAkgKiBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20gdGhlIHF1 ZXJ5IGRlc2NyaXB0b3IgYW5kIHRoZSBxdWVyeSBmZWF0dXJlLgpAQCAtMzgzLDcgKzM4Myw3IEBA IHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCQlkZXN0LT5yU2h1 dGRvd24oZGVzdCk7CiAKIAlpZiAocXVlcnlEZXNjLT50b3RhbHRpbWUpCi0JCUluc3RyU3RvcE5v ZGUocXVlcnlEZXNjLT50b3RhbHRpbWUsIGVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKKwkJSW5zdHJT dG9wKHF1ZXJ5RGVzYy0+dG90YWx0aW1lLCBlc3RhdGUtPmVzX3Byb2Nlc3NlZCk7CiAKIAlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiB9CkBAIC00MzMsNyArNDMzLDcgQEAgc3Rh bmRhcmRfRXhlY3V0b3JGaW5pc2goUXVlcnlEZXNjICpxdWVyeURlc2MpCiAKIAkvKiBBbGxvdyBp bnN0cnVtZW50YXRpb24gb2YgRXhlY3V0b3Igb3ZlcmFsbCBydW50aW1lICovCiAJaWYgKHF1ZXJ5 RGVzYy0+dG90YWx0aW1lKQotCQlJbnN0clN0YXJ0Tm9kZShxdWVyeURlc2MtPnRvdGFsdGltZSk7 CisJCUluc3RyU3RhcnQocXVlcnlEZXNjLT50b3RhbHRpbWUpOwogCiAJLyogUnVuIE1vZGlmeVRh YmxlIG5vZGVzIHRvIGNvbXBsZXRpb24gKi8KIAlFeGVjUG9zdHByb2Nlc3NQbGFuKGVzdGF0ZSk7 CkBAIC00NDMsNyArNDQzLDcgQEAgc3RhbmRhcmRfRXhlY3V0b3JGaW5pc2goUXVlcnlEZXNjICpx dWVyeURlc2MpCiAJCUFmdGVyVHJpZ2dlckVuZFF1ZXJ5KGVzdGF0ZSk7CiAKIAlpZiAocXVlcnlE ZXNjLT50b3RhbHRpbWUpCi0JCUluc3RyU3RvcE5vZGUocXVlcnlEZXNjLT50b3RhbHRpbWUsIDAp OworCQlJbnN0clN0b3AocXVlcnlEZXNjLT50b3RhbHRpbWUsIDApOwogCiAJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQCBJbml0UmVzdWx0 UmVsSW5mbyhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQlyZXN1bHRSZWxJbmZvLT5y aV9UcmlnV2hlbkV4cHJzID0gKEV4cHJTdGF0ZSAqKikKIAkJCXBhbGxvYzAobiAqIHNpemVvZihF eHByU3RhdGUgKikpOwogCQlpZiAoaW5zdHJ1bWVudF9vcHRpb25zKQotCQkJcmVzdWx0UmVsSW5m by0+cmlfVHJpZ0luc3RydW1lbnQgPSBJbnN0ckFsbG9jKG4sIGluc3RydW1lbnRfb3B0aW9ucywg ZmFsc2UpOworCQkJcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0luc3RydW1lbnQgPSBJbnN0ckFsbG9j KG4sIGluc3RydW1lbnRfb3B0aW9ucyk7CiAJfQogCWVsc2UKIAl7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNQYXJhbGxlbC5jCmluZGV4IGYwOThhNTU1N2NmLi5lODc4MTBkMjkyZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcmFsbGVsLmMKQEAgLTg1LDcgKzg1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRml4 ZWRQYXJhbGxlbEV4ZWN1dG9yU3RhdGUKICAqIGluc3RydW1lbnRfb3B0aW9uczogU2FtZSBtZWFu aW5nIGhlcmUgYXMgaW4gaW5zdHJ1bWVudC5jLgogICoKICAqIGluc3RydW1lbnRfb2Zmc2V0OiBP ZmZzZXQsIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGlzIHN0cnVjdHVyZSwKLSAqIG9mIHRo ZSBmaXJzdCBJbnN0cnVtZW50YXRpb24gb2JqZWN0LiAgVGhpcyB3aWxsIGRlcGVuZCBvbiB0aGUg bGVuZ3RoIG9mCisgKiBvZiB0aGUgZmlyc3QgTm9kZUluc3RydW1lbnRhdGlvbiBvYmplY3QuICBU aGlzIHdpbGwgZGVwZW5kIG9uIHRoZSBsZW5ndGggb2YKICAqIHRoZSBwbGFuX25vZGVfaWQgYXJy YXkuCiAgKgogICogbnVtX3dvcmtlcnM6IE51bWJlciBvZiB3b3JrZXJzLgpAQCAtMTAyLDExICsx MDIsMTUgQEAgc3RydWN0IFNoYXJlZEV4ZWN1dG9ySW5zdHJ1bWVudGF0aW9uCiAJaW50CQkJbnVt X3dvcmtlcnM7CiAJaW50CQkJbnVtX3BsYW5fbm9kZXM7CiAJaW50CQkJcGxhbl9ub2RlX2lkW0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07Ci0JLyogYXJyYXkgb2YgbnVtX3BsYW5fbm9kZXMgKiBudW1f d29ya2VycyBJbnN0cnVtZW50YXRpb24gb2JqZWN0cyBmb2xsb3dzICovCisKKwkvKgorCSAqIGFy cmF5IG9mIG51bV9wbGFuX25vZGVzICogbnVtX3dvcmtlcnMgTm9kZUluc3RydW1lbnRhdGlvbiBv YmplY3RzCisJICogZm9sbG93cworCSAqLwogfTsKICNkZWZpbmUgR2V0SW5zdHJ1bWVudGF0aW9u QXJyYXkoc2VpKSBcCiAJKEFzc2VydFZhcmlhYmxlSXNPZlR5cGVNYWNybyhzZWksIFNoYXJlZEV4 ZWN1dG9ySW5zdHJ1bWVudGF0aW9uICopLCBcCi0JIChJbnN0cnVtZW50YXRpb24gKikgKCgoY2hh ciAqKSBzZWkpICsgc2VpLT5pbnN0cnVtZW50X29mZnNldCkpCisJIChOb2RlSW5zdHJ1bWVudGF0 aW9uICopICgoKGNoYXIgKikgc2VpKSArIHNlaS0+aW5zdHJ1bWVudF9vZmZzZXQpKQogCiAvKiBD b250ZXh0IG9iamVjdCBmb3IgRXhlY1BhcmFsbGVsRXN0aW1hdGUuICovCiB0eXBlZGVmIHN0cnVj dCBFeGVjUGFyYWxsZWxFc3RpbWF0ZUNvbnRleHQKQEAgLTcxMyw3ICs3MTcsNyBAQCBFeGVjSW5p dFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJCWlu c3RydW1lbnRhdGlvbl9sZW4gPSBNQVhBTElHTihpbnN0cnVtZW50YXRpb25fbGVuKTsKIAkJaW5z dHJ1bWVudF9vZmZzZXQgPSBpbnN0cnVtZW50YXRpb25fbGVuOwogCQlpbnN0cnVtZW50YXRpb25f bGVuICs9Ci0JCQltdWxfc2l6ZShzaXplb2YoSW5zdHJ1bWVudGF0aW9uKSwKKwkJCW11bF9zaXpl KHNpemVvZihOb2RlSW5zdHJ1bWVudGF0aW9uKSwKIAkJCQkJIG11bF9zaXplKGUubm5vZGVzLCBu d29ya2VycykpOwogCQlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIGlu c3RydW1lbnRhdGlvbl9sZW4pOwogCQlzaG1fdG9jX2VzdGltYXRlX2tleXMoJnBjeHQtPmVzdGlt YXRvciwgMSk7CkBAIC03OTksNyArODAzLDcgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0 YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAogCSAqLwogCWlmIChlc3RhdGUtPmVzX2lu c3RydW1lbnQpCiAJewotCQlJbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQ7CisJCU5vZGVJbnN0 cnVtZW50YXRpb24gKmluc3RydW1lbnQ7CiAJCWludAkJCWk7CiAKIAkJaW5zdHJ1bWVudGF0aW9u ID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIGluc3RydW1lbnRhdGlvbl9sZW4pOwpAQCAt ODA5LDcgKzgxMyw3IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBFU3RhdGUgKmVzdGF0ZSwKIAkJaW5zdHJ1bWVudGF0aW9uLT5udW1fcGxhbl9ub2RlcyA9IGUu bm5vZGVzOwogCQlpbnN0cnVtZW50ID0gR2V0SW5zdHJ1bWVudGF0aW9uQXJyYXkoaW5zdHJ1bWVu dGF0aW9uKTsKIAkJZm9yIChpID0gMDsgaSA8IG53b3JrZXJzICogZS5ubm9kZXM7ICsraSkKLQkJ CUluc3RySW5pdCgmaW5zdHJ1bWVudFtpXSwgZXN0YXRlLT5lc19pbnN0cnVtZW50KTsKKwkJCUlu c3RySW5pdE5vZGUoJmluc3RydW1lbnRbaV0sIGVzdGF0ZS0+ZXNfaW5zdHJ1bWVudCk7CiAJCXNo bV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX0lOU1RSVU1FTlRBVElPTiwKIAkJ CQkJICAgaW5zdHJ1bWVudGF0aW9uKTsKIAkJcGVpLT5pbnN0cnVtZW50YXRpb24gPSBpbnN0cnVt ZW50YXRpb247CkBAIC0xMDM2LDcgKzEwNDAsNyBAQCBzdGF0aWMgYm9vbAogRXhlY1BhcmFsbGVs UmV0cmlldmVJbnN0cnVtZW50YXRpb24oUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCQlT aGFyZWRFeGVjdXRvckluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudGF0aW9uKQogewotCUluc3Ry dW1lbnRhdGlvbiAqaW5zdHJ1bWVudDsKKwlOb2RlSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 OwogCWludAkJCWk7CiAJaW50CQkJbjsKIAlpbnQJCQlpYnl0ZXM7CkBAIC0xMDY0LDcgKzEwNjgs NyBAQCBFeGVjUGFyYWxsZWxSZXRyaWV2ZUluc3RydW1lbnRhdGlvbihQbGFuU3RhdGUgKnBsYW5z dGF0ZSwKIAkgKiBTd2l0Y2ggaW50byBwZXItcXVlcnkgbWVtb3J5IGNvbnRleHQuCiAJICovCiAJ b2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwbGFuc3RhdGUtPnN0YXRlLT5lc19x dWVyeV9jeHQpOwotCWlieXRlcyA9IG11bF9zaXplKGluc3RydW1lbnRhdGlvbi0+bnVtX3dvcmtl cnMsIHNpemVvZihJbnN0cnVtZW50YXRpb24pKTsKKwlpYnl0ZXMgPSBtdWxfc2l6ZShpbnN0cnVt ZW50YXRpb24tPm51bV93b3JrZXJzLCBzaXplb2YoTm9kZUluc3RydW1lbnRhdGlvbikpOwogCXBs YW5zdGF0ZS0+d29ya2VyX2luc3RydW1lbnQgPQogCQlwYWxsb2MoaWJ5dGVzICsgb2Zmc2V0b2Yo V29ya2VySW5zdHJ1bWVudGF0aW9uLCBpbnN0cnVtZW50KSk7CiAJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOwpAQCAtMTI5Niw3ICsxMzAwLDcgQEAgRXhlY1BhcmFsbGVsUmVwb3J0 SW5zdHJ1bWVudGF0aW9uKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogewogCWludAkJCWk7CiAJaW50 CQkJcGxhbl9ub2RlX2lkID0gcGxhbnN0YXRlLT5wbGFuLT5wbGFuX25vZGVfaWQ7Ci0JSW5zdHJ1 bWVudGF0aW9uICppbnN0cnVtZW50OworCU5vZGVJbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQ7 CiAKIAlJbnN0ckVuZExvb3AocGxhbnN0YXRlLT5pbnN0cnVtZW50KTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUHJvY25vZGUuYwppbmRleCBmNWY5Y2ZiZWVhZC4uZDI4NjQ3MTI1NGIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCkBAIC00MTMsOCArNDEzLDggQEAgRXhlY0luaXROb2Rl KFBsYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCiAJLyogU2V0IHVwIGlu c3RydW1lbnRhdGlvbiBmb3IgdGhpcyBub2RlIGlmIHJlcXVlc3RlZCAqLwogCWlmIChlc3RhdGUt PmVzX2luc3RydW1lbnQpCi0JCXJlc3VsdC0+aW5zdHJ1bWVudCA9IEluc3RyQWxsb2MoMSwgZXN0 YXRlLT5lc19pbnN0cnVtZW50LAotCQkJCQkJCQkJCXJlc3VsdC0+YXN5bmNfY2FwYWJsZSk7CisJ CXJlc3VsdC0+aW5zdHJ1bWVudCA9IEluc3RyQWxsb2NOb2RlKDEsIGVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCwKKwkJCQkJCQkJCQkJcmVzdWx0LT5hc3luY19jYXBhYmxlKTsKIAogCXJldHVybiByZXN1 bHQ7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMKaW5kZXggNTZlNjM1ZjQ3MDAuLmM1MzQ4 MGQ4MDMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvaW5zdHJ1bWVudC5jCkBAIC0yNiw5ICsyNiw5IEBAIHN0 YXRpYyB2b2lkIEJ1ZmZlclVzYWdlQWRkKEJ1ZmZlclVzYWdlICpkc3QsIGNvbnN0IEJ1ZmZlclVz YWdlICphZGQpOwogc3RhdGljIHZvaWQgV2FsVXNhZ2VBZGQoV2FsVXNhZ2UgKmRzdCwgV2FsVXNh Z2UgKmFkZCk7CiAKIAotLyogQWxsb2NhdGUgbmV3IGluc3RydW1lbnRhdGlvbiBzdHJ1Y3R1cmUo cykgKi8KKy8qIEdlbmVyYWwgcHVycG9zZSBpbnN0cnVtZW50YXRpb24gaGFuZGxpbmcgKi8KIElu c3RydW1lbnRhdGlvbiAqCi1JbnN0ckFsbG9jKGludCBuLCBpbnQgaW5zdHJ1bWVudF9vcHRpb25z LCBib29sIGFzeW5jX21vZGUpCitJbnN0ckFsbG9jKGludCBuLCBpbnQgaW5zdHJ1bWVudF9vcHRp b25zKQogewogCUluc3RydW1lbnRhdGlvbiAqaW5zdHI7CiAKQEAgLTQxLDYgKzQxLDc0IEBAIElu c3RyQWxsb2MoaW50IG4sIGludCBpbnN0cnVtZW50X29wdGlvbnMsIGJvb2wgYXN5bmNfbW9kZSkK IAkJYm9vbAkJbmVlZF90aW1lciA9IChpbnN0cnVtZW50X29wdGlvbnMgJiBJTlNUUlVNRU5UX1RJ TUVSKSAhPSAwOwogCQlpbnQJCQlpOwogCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXsK KwkJCWluc3RyW2ldLm5lZWRfYnVmdXNhZ2UgPSBuZWVkX2J1ZmZlcnM7CisJCQlpbnN0cltpXS5u ZWVkX3dhbHVzYWdlID0gbmVlZF93YWw7CisJCQlpbnN0cltpXS5uZWVkX3RpbWVyID0gbmVlZF90 aW1lcjsKKwkJfQorCX0KKworCXJldHVybiBpbnN0cjsKK30KK3ZvaWQKK0luc3RyU3RhcnQoSW5z dHJ1bWVudGF0aW9uICppbnN0cikKK3sKKwlpZiAoaW5zdHItPm5lZWRfdGltZXIgJiYKKwkJIUlO U1RSX1RJTUVfU0VUX0NVUlJFTlRfTEFaWShpbnN0ci0+c3RhcnR0aW1lKSkKKwkJZWxvZyhFUlJP UiwgIkluc3RyU3RhcnQgY2FsbGVkIHR3aWNlIGluIGEgcm93Iik7CisKKwlpZiAoaW5zdHItPm5l ZWRfYnVmdXNhZ2UpCisJCWluc3RyLT5idWZ1c2FnZV9zdGFydCA9IHBnQnVmZmVyVXNhZ2U7CisK KwlpZiAoaW5zdHItPm5lZWRfd2FsdXNhZ2UpCisJCWluc3RyLT53YWx1c2FnZV9zdGFydCA9IHBn V2FsVXNhZ2U7Cit9Cit2b2lkCitJbnN0clN0b3AoSW5zdHJ1bWVudGF0aW9uICppbnN0ciwgZG91 YmxlIG5UdXBsZXMpCit7CisJaW5zdHJfdGltZQllbmR0aW1lOworCisJLyogY291bnQgdGhlIHNw ZWNpZmllZCB0dXBsZXMgKi8KKwlpbnN0ci0+bnR1cGxlcyArPSBuVHVwbGVzOworCisJLyogbGV0 J3MgdXBkYXRlIHRoZSB0aW1lIG9ubHkgaWYgdGhlIHRpbWVyIHdhcyByZXF1ZXN0ZWQgKi8KKwlp ZiAoaW5zdHItPm5lZWRfdGltZXIpCisJeworCQlpZiAoSU5TVFJfVElNRV9JU19aRVJPKGluc3Ry LT5zdGFydHRpbWUpKQorCQkJZWxvZyhFUlJPUiwgIkluc3RyU3RvcCBjYWxsZWQgd2l0aG91dCBz dGFydCIpOworCisJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoZW5kdGltZSk7CisJCUlOU1RSX1RJ TUVfQUNDVU1fRElGRihpbnN0ci0+dG90YWwsIGVuZHRpbWUsIGluc3RyLT5zdGFydHRpbWUpOwor CisJCUlOU1RSX1RJTUVfU0VUX1pFUk8oaW5zdHItPnN0YXJ0dGltZSk7CisJfQorCisJLyogQWRk IGRlbHRhIG9mIGJ1ZmZlciB1c2FnZSBzaW5jZSBlbnRyeSB0byBub2RlJ3MgdG90YWxzICovCisJ aWYgKGluc3RyLT5uZWVkX2J1ZnVzYWdlKQorCQlCdWZmZXJVc2FnZUFjY3VtRGlmZigmaW5zdHIt PmJ1ZnVzYWdlLAorCQkJCQkJCSAmcGdCdWZmZXJVc2FnZSwgJmluc3RyLT5idWZ1c2FnZV9zdGFy dCk7CisKKwlpZiAoaW5zdHItPm5lZWRfd2FsdXNhZ2UpCisJCVdhbFVzYWdlQWNjdW1EaWZmKCZp bnN0ci0+d2FsdXNhZ2UsCisJCQkJCQkgICZwZ1dhbFVzYWdlLCAmaW5zdHItPndhbHVzYWdlX3N0 YXJ0KTsKK30KKworLyogQWxsb2NhdGUgbmV3IG5vZGUgaW5zdHJ1bWVudGF0aW9uIHN0cnVjdHVy ZShzKSAqLworTm9kZUluc3RydW1lbnRhdGlvbiAqCitJbnN0ckFsbG9jTm9kZShpbnQgbiwgaW50 IGluc3RydW1lbnRfb3B0aW9ucywgYm9vbCBhc3luY19tb2RlKQoreworCU5vZGVJbnN0cnVtZW50 YXRpb24gKmluc3RyOworCisJLyogaW5pdGlhbGl6ZSBhbGwgZmllbGRzIHRvIHplcm9lcywgdGhl biBtb2RpZnkgYXMgbmVlZGVkICovCisJaW5zdHIgPSBwYWxsb2MwKG4gKiBzaXplb2YoTm9kZUlu c3RydW1lbnRhdGlvbikpOworCWlmIChpbnN0cnVtZW50X29wdGlvbnMgJiAoSU5TVFJVTUVOVF9C VUZGRVJTIHwgSU5TVFJVTUVOVF9USU1FUiB8IElOU1RSVU1FTlRfV0FMKSkKKwl7CisJCWJvb2wJ CW5lZWRfYnVmZmVycyA9IChpbnN0cnVtZW50X29wdGlvbnMgJiBJTlNUUlVNRU5UX0JVRkZFUlMp ICE9IDA7CisJCWJvb2wJCW5lZWRfd2FsID0gKGluc3RydW1lbnRfb3B0aW9ucyAmIElOU1RSVU1F TlRfV0FMKSAhPSAwOworCQlib29sCQluZWVkX3RpbWVyID0gKGluc3RydW1lbnRfb3B0aW9ucyAm IElOU1RSVU1FTlRfVElNRVIpICE9IDA7CisJCWludAkJCWk7CisKIAkJZm9yIChpID0gMDsgaSA8 IG47IGkrKykKIAkJewogCQkJaW5zdHJbaV0ubmVlZF9idWZ1c2FnZSA9IG5lZWRfYnVmZmVyczsK QEAgLTU1LDkgKzEyMyw5IEBAIEluc3RyQWxsb2MoaW50IG4sIGludCBpbnN0cnVtZW50X29wdGlv bnMsIGJvb2wgYXN5bmNfbW9kZSkKIAogLyogSW5pdGlhbGl6ZSBhIHByZS1hbGxvY2F0ZWQgaW5z dHJ1bWVudGF0aW9uIHN0cnVjdHVyZS4gKi8KIHZvaWQKLUluc3RySW5pdChJbnN0cnVtZW50YXRp b24gKmluc3RyLCBpbnQgaW5zdHJ1bWVudF9vcHRpb25zKQorSW5zdHJJbml0Tm9kZShOb2RlSW5z dHJ1bWVudGF0aW9uICogaW5zdHIsIGludCBpbnN0cnVtZW50X29wdGlvbnMpCiB7Ci0JbWVtc2V0 KGluc3RyLCAwLCBzaXplb2YoSW5zdHJ1bWVudGF0aW9uKSk7CisJbWVtc2V0KGluc3RyLCAwLCBz aXplb2YoTm9kZUluc3RydW1lbnRhdGlvbikpOwogCWluc3RyLT5uZWVkX2J1ZnVzYWdlID0gKGlu c3RydW1lbnRfb3B0aW9ucyAmIElOU1RSVU1FTlRfQlVGRkVSUykgIT0gMDsKIAlpbnN0ci0+bmVl ZF93YWx1c2FnZSA9IChpbnN0cnVtZW50X29wdGlvbnMgJiBJTlNUUlVNRU5UX1dBTCkgIT0gMDsK IAlpbnN0ci0+bmVlZF90aW1lciA9IChpbnN0cnVtZW50X29wdGlvbnMgJiBJTlNUUlVNRU5UX1RJ TUVSKSAhPSAwOwpAQCAtNjUsNyArMTMzLDcgQEAgSW5zdHJJbml0KEluc3RydW1lbnRhdGlvbiAq aW5zdHIsIGludCBpbnN0cnVtZW50X29wdGlvbnMpCiAKIC8qIEVudHJ5IHRvIGEgcGxhbiBub2Rl ICovCiB2b2lkCi1JbnN0clN0YXJ0Tm9kZShJbnN0cnVtZW50YXRpb24gKmluc3RyKQorSW5zdHJT dGFydE5vZGUoTm9kZUluc3RydW1lbnRhdGlvbiAqIGluc3RyKQogewogCWlmIChpbnN0ci0+bmVl ZF90aW1lciAmJgogCQkhSU5TVFJfVElNRV9TRVRfQ1VSUkVOVF9MQVpZKGluc3RyLT5zdGFydHRp bWUpKQpAQCAtODEsNyArMTQ5LDcgQEAgSW5zdHJTdGFydE5vZGUoSW5zdHJ1bWVudGF0aW9uICpp bnN0cikKIAogLyogRXhpdCBmcm9tIGEgcGxhbiBub2RlICovCiB2b2lkCi1JbnN0clN0b3BOb2Rl KEluc3RydW1lbnRhdGlvbiAqaW5zdHIsIGRvdWJsZSBuVHVwbGVzKQorSW5zdHJTdG9wTm9kZShO b2RlSW5zdHJ1bWVudGF0aW9uICogaW5zdHIsIGRvdWJsZSBuVHVwbGVzKQogewogCWRvdWJsZQkJ c2F2ZV90dXBsZWNvdW50ID0gaW5zdHItPnR1cGxlY291bnQ7CiAJaW5zdHJfdGltZQllbmR0aW1l OwpAQCAtMTI5LDcgKzE5Nyw3IEBAIEluc3RyU3RvcE5vZGUoSW5zdHJ1bWVudGF0aW9uICppbnN0 ciwgZG91YmxlIG5UdXBsZXMpCiAKIC8qIFVwZGF0ZSB0dXBsZSBjb3VudCAqLwogdm9pZAotSW5z dHJVcGRhdGVUdXBsZUNvdW50KEluc3RydW1lbnRhdGlvbiAqaW5zdHIsIGRvdWJsZSBuVHVwbGVz KQorSW5zdHJVcGRhdGVUdXBsZUNvdW50KE5vZGVJbnN0cnVtZW50YXRpb24gKiBpbnN0ciwgZG91 YmxlIG5UdXBsZXMpCiB7CiAJLyogY291bnQgdGhlIHJldHVybmVkIHR1cGxlcyAqLwogCWluc3Ry LT50dXBsZWNvdW50ICs9IG5UdXBsZXM7CkBAIC0xMzcsNyArMjA1LDcgQEAgSW5zdHJVcGRhdGVU dXBsZUNvdW50KEluc3RydW1lbnRhdGlvbiAqaW5zdHIsIGRvdWJsZSBuVHVwbGVzKQogCiAvKiBG aW5pc2ggYSBydW4gY3ljbGUgZm9yIGEgcGxhbiBub2RlICovCiB2b2lkCi1JbnN0ckVuZExvb3Ao SW5zdHJ1bWVudGF0aW9uICppbnN0cikKK0luc3RyRW5kTG9vcChOb2RlSW5zdHJ1bWVudGF0aW9u ICogaW5zdHIpCiB7CiAJZG91YmxlCQl0b3RhbHRpbWU7CiAKQEAgLTE2Niw3ICsyMzQsNyBAQCBJ bnN0ckVuZExvb3AoSW5zdHJ1bWVudGF0aW9uICppbnN0cikKIAogLyogYWdncmVnYXRlIGluc3Ry dW1lbnRhdGlvbiBpbmZvcm1hdGlvbiAqLwogdm9pZAotSW5zdHJBZ2dOb2RlKEluc3RydW1lbnRh dGlvbiAqZHN0LCBJbnN0cnVtZW50YXRpb24gKmFkZCkKK0luc3RyQWdnTm9kZShOb2RlSW5zdHJ1 bWVudGF0aW9uICogZHN0LCBOb2RlSW5zdHJ1bWVudGF0aW9uICogYWRkKQogewogCWlmICghZHN0 LT5ydW5uaW5nICYmIGFkZC0+cnVubmluZykKIAl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9pbnN0cnVtZW50LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmgK aW5kZXggMDM2NTNhYjZjNmMuLjhjNTYzNTEwZjRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9pbnN0cnVtZW50LmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVu dC5oCkBAIC02Niw3ICs2NiwzMyBAQCB0eXBlZGVmIGVudW0gSW5zdHJ1bWVudE9wdGlvbgogCUlO U1RSVU1FTlRfQUxMID0gUEdfSU5UMzJfTUFYCiB9IEluc3RydW1lbnRPcHRpb247CiAKKy8qCisg KiBHZW5lcmFsIHB1cnBvc2UgaW5zdHJ1bWVudGF0aW9uIHRoYXQgY2FuIGNhcHR1cmUgdGltZSwg V0FML2J1ZmZlciB1c2FnZSBhbmQgdHVwbGVzCisgKgorICogSW5pdGlhbGl6ZWQgdGhyb3VnaCBJ bnN0ckFsbG9jLCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBjYWxscyB0byBhIHBhaXIgb2YKKyAq IEluc3RyU3RhcnQvSW5zdHJTdG9wIChhY3Rpdml0eSBpcyBtZWFzdXJlZCBpbmJldHdlZW4pLgor ICovCiB0eXBlZGVmIHN0cnVjdCBJbnN0cnVtZW50YXRpb24KK3sKKwkvKiBQYXJhbWV0ZXJzIHNl dCBhdCBjcmVhdGlvbjogKi8KKwlib29sCQluZWVkX3RpbWVyOwkJLyogdHJ1ZSBpZiB3ZSBuZWVk IHRpbWVyIGRhdGEgKi8KKwlib29sCQluZWVkX2J1ZnVzYWdlOwkvKiB0cnVlIGlmIHdlIG5lZWQg YnVmZmVyIHVzYWdlIGRhdGEgKi8KKwlib29sCQluZWVkX3dhbHVzYWdlOwkvKiB0cnVlIGlmIHdl IG5lZWQgV0FMIHVzYWdlIGRhdGEgKi8KKwkvKiBJbnRlcm5hbCBzdGF0ZSBrZWVwaW5nOiAqLwor CWluc3RyX3RpbWUJc3RhcnR0aW1lOwkJLyogc3RhcnQgdGltZSBvZiBjdXJyZW50IGl0ZXJhdGlv biBvZiBub2RlICovCisJQnVmZmVyVXNhZ2UgYnVmdXNhZ2Vfc3RhcnQ7IC8qIGJ1ZmZlciB1c2Fn ZSBhdCBzdGFydCAqLworCVdhbFVzYWdlCXdhbHVzYWdlX3N0YXJ0OyAvKiBXQUwgdXNhZ2UgYXQg c3RhcnQgKi8KKwkvKiBBY2N1bXVsYXRlZCBzdGF0aXN0aWNzOiAqLworCWluc3RyX3RpbWUJdG90 YWw7CQkJLyogdG90YWwgcnVudGltZSAqLworCWRvdWJsZQkJbnR1cGxlczsJCS8qIHRvdGFsIHR1 cGxlcyBjb3VudGVkIGluIEluc3RyU3RvcCAqLworCUJ1ZmZlclVzYWdlIGJ1ZnVzYWdlOwkJLyog dG90YWwgYnVmZmVyIHVzYWdlICovCisJV2FsVXNhZ2UJd2FsdXNhZ2U7CQkvKiB0b3RhbCBXQUwg dXNhZ2UgKi8KK30gSW5zdHJ1bWVudGF0aW9uOworCisvKgorICogU3BlY2lhbGl6ZWQgaW5zdHJ1 bWVudGF0aW9uIGZvciBwZXItbm9kZSBleGVjdXRpb24gc3RhdGlzdGljcworICovCit0eXBlZGVm IHN0cnVjdCBOb2RlSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogUGFyYW1ldGVycyBzZXQgYXQgbm9k ZSBjcmVhdGlvbjogKi8KIAlib29sCQluZWVkX3RpbWVyOwkJLyogdHJ1ZSBpZiB3ZSBuZWVkIHRp bWVyIGRhdGEgKi8KQEAgLTkxLDI1ICsxMTcsMzAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5zdHJ1bWVu dGF0aW9uCiAJZG91YmxlCQluZmlsdGVyZWQyOwkJLyogIyBvZiB0dXBsZXMgcmVtb3ZlZCBieSAi b3RoZXIiIHF1YWxzICovCiAJQnVmZmVyVXNhZ2UgYnVmdXNhZ2U7CQkvKiB0b3RhbCBidWZmZXIg dXNhZ2UgKi8KIAlXYWxVc2FnZQl3YWx1c2FnZTsJCS8qIHRvdGFsIFdBTCB1c2FnZSAqLwotfSBJ bnN0cnVtZW50YXRpb247Cit9CQkJTm9kZUluc3RydW1lbnRhdGlvbjsKIAogdHlwZWRlZiBzdHJ1 Y3QgV29ya2VySW5zdHJ1bWVudGF0aW9uCiB7CiAJaW50CQkJbnVtX3dvcmtlcnM7CS8qICMgb2Yg c3RydWN0dXJlcyB0aGF0IGZvbGxvdyAqLwotCUluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50W0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07CisJTm9kZUluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50W0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IFdvcmtlckluc3RydW1lbnRhdGlvbjsKIAogZXh0ZXJu IFBHRExMSU1QT1JUIEJ1ZmZlclVzYWdlIHBnQnVmZmVyVXNhZ2U7CiBleHRlcm4gUEdETExJTVBP UlQgV2FsVXNhZ2UgcGdXYWxVc2FnZTsKIAotZXh0ZXJuIEluc3RydW1lbnRhdGlvbiAqSW5zdHJB bGxvYyhpbnQgbiwgaW50IGluc3RydW1lbnRfb3B0aW9ucywKLQkJCQkJCQkJICAgYm9vbCBhc3lu Y19tb2RlKTsKLWV4dGVybiB2b2lkIEluc3RySW5pdChJbnN0cnVtZW50YXRpb24gKmluc3RyLCBp bnQgaW5zdHJ1bWVudF9vcHRpb25zKTsKLWV4dGVybiB2b2lkIEluc3RyU3RhcnROb2RlKEluc3Ry dW1lbnRhdGlvbiAqaW5zdHIpOwotZXh0ZXJuIHZvaWQgSW5zdHJTdG9wTm9kZShJbnN0cnVtZW50 YXRpb24gKmluc3RyLCBkb3VibGUgblR1cGxlcyk7Ci1leHRlcm4gdm9pZCBJbnN0clVwZGF0ZVR1 cGxlQ291bnQoSW5zdHJ1bWVudGF0aW9uICppbnN0ciwgZG91YmxlIG5UdXBsZXMpOwotZXh0ZXJu IHZvaWQgSW5zdHJFbmRMb29wKEluc3RydW1lbnRhdGlvbiAqaW5zdHIpOwotZXh0ZXJuIHZvaWQg SW5zdHJBZ2dOb2RlKEluc3RydW1lbnRhdGlvbiAqZHN0LCBJbnN0cnVtZW50YXRpb24gKmFkZCk7 CitleHRlcm4gSW5zdHJ1bWVudGF0aW9uICpJbnN0ckFsbG9jKGludCBuLCBpbnQgaW5zdHJ1bWVu dF9vcHRpb25zKTsKK2V4dGVybiB2b2lkIEluc3RyU3RhcnQoSW5zdHJ1bWVudGF0aW9uICppbnN0 cik7CitleHRlcm4gdm9pZCBJbnN0clN0b3AoSW5zdHJ1bWVudGF0aW9uICppbnN0ciwgZG91Ymxl IG5UdXBsZXMpOworCitleHRlcm4gTm9kZUluc3RydW1lbnRhdGlvbiAqIEluc3RyQWxsb2NOb2Rl KGludCBuLCBpbnQgaW5zdHJ1bWVudF9vcHRpb25zLAorCQkJCQkJCQkJCQlib29sIGFzeW5jX21v ZGUpOworZXh0ZXJuIHZvaWQgSW5zdHJJbml0Tm9kZShOb2RlSW5zdHJ1bWVudGF0aW9uICogaW5z dHIsIGludCBpbnN0cnVtZW50X29wdGlvbnMpOworZXh0ZXJuIHZvaWQgSW5zdHJTdGFydE5vZGUo Tm9kZUluc3RydW1lbnRhdGlvbiAqIGluc3RyKTsKK2V4dGVybiB2b2lkIEluc3RyU3RvcE5vZGUo Tm9kZUluc3RydW1lbnRhdGlvbiAqIGluc3RyLCBkb3VibGUgblR1cGxlcyk7CitleHRlcm4gdm9p ZCBJbnN0clVwZGF0ZVR1cGxlQ291bnQoTm9kZUluc3RydW1lbnRhdGlvbiAqIGluc3RyLCBkb3Vi bGUgblR1cGxlcyk7CitleHRlcm4gdm9pZCBJbnN0ckVuZExvb3AoTm9kZUluc3RydW1lbnRhdGlv biAqIGluc3RyKTsKK2V4dGVybiB2b2lkIEluc3RyQWdnTm9kZShOb2RlSW5zdHJ1bWVudGF0aW9u ICogZHN0LCBOb2RlSW5zdHJ1bWVudGF0aW9uICogYWRkKTsKKwogZXh0ZXJuIHZvaWQgSW5zdHJT dGFydFBhcmFsbGVsUXVlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBJbnN0ckVuZFBhcmFsbGVsUXVl cnkoQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLCBXYWxVc2FnZSAqd2FsdXNhZ2UpOwogZXh0ZXJuIHZv aWQgSW5zdHJBY2N1bVBhcmFsbGVsUXVlcnkoQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLCBXYWxVc2Fn ZSAqd2FsdXNhZ2UpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCBkZTc4MjAxNGIyZC4uOWIzYmQ2 NmQ0MDEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xMTY5LDcgKzExNjksOCBAQCB0eXBlZGVm IHN0cnVjdCBQbGFuU3RhdGUKIAlFeGVjUHJvY05vZGVNdGQgRXhlY1Byb2NOb2RlUmVhbDsJLyog YWN0dWFsIGZ1bmN0aW9uLCBpZiBhYm92ZSBpcyBhCiAJCQkJCQkJCQkJICogd3JhcHBlciAqLwog Ci0JSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50OwkvKiBPcHRpb25hbCBydW50aW1lIHN0YXRz IGZvciB0aGlzIG5vZGUgKi8KKwlOb2RlSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50OwkvKiBP cHRpb25hbCBydW50aW1lIHN0YXRzIGZvciB0aGlzCisJCQkJCQkJCQkJICogbm9kZSAqLwogCVdv cmtlckluc3RydW1lbnRhdGlvbiAqd29ya2VyX2luc3RydW1lbnQ7CS8qIHBlci13b3JrZXIgaW5z dHJ1bWVudGF0aW9uICovCiAKIAkvKiBQZXItd29ya2VyIEpJVCBpbnN0cnVtZW50YXRpb24gKi8K LS0gCjIuNDcuMQoK --000000000000064ba9063db2054e Content-Type: application/octet-stream; name="v1-0003-Introduce-stack-for-tracking-per-node-WAL-buffer-.patch" Content-Disposition: attachment; filename="v1-0003-Introduce-stack-for-tracking-per-node-WAL-buffer-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf0cefmu1 RnJvbSA0Mzc1ZmNiNDE0MWYxOGQ2Y2Q5Mjc2NTk5NzA1MTg1NTNhYTNmZTk0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBT dW4sIDMxIEF1ZyAyMDI1IDE2OjM3OjA1IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2MSAzLzNdIElu dHJvZHVjZSBzdGFjayBmb3IgdHJhY2tpbmcgcGVyLW5vZGUgV0FML2J1ZmZlciB1c2FnZQoKLS0t CiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICB8ICAgOCArLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgfCAgIDcgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQcm9jbm9kZS5jIHwgICA5ICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvaW5zdHJ1bWVu dC5jICAgfCAxMTEgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvZXhl Y3V0b3IvaW5zdHJ1bWVudC5oICAgfCAgNDIgKysrKysrKysrKy0KIDUgZmlsZXMgY2hhbmdlZCwg MTU1IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpp bmRleCA2YTEzNWU1MTk5Ni4uNTg0ZjBhZGJjYzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAg LTIyODAsOSArMjI4MCw5IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0 ICphbmNlc3RvcnMsCiAKIAkvKiBTaG93IGJ1ZmZlci9XQUwgdXNhZ2UgKi8KIAlpZiAoZXMtPmJ1 ZmZlcnMgJiYgcGxhbnN0YXRlLT5pbnN0cnVtZW50KQotCQlzaG93X2J1ZmZlcl91c2FnZShlcywg JnBsYW5zdGF0ZS0+aW5zdHJ1bWVudC0+YnVmdXNhZ2UpOworCQlzaG93X2J1ZmZlcl91c2FnZShl cywgJnBsYW5zdGF0ZS0+aW5zdHJ1bWVudC0+c3RhY2suYnVmdXNhZ2UpOwogCWlmIChlcy0+d2Fs ICYmIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCkKLQkJc2hvd193YWxfdXNhZ2UoZXMsICZwbGFuc3Rh dGUtPmluc3RydW1lbnQtPndhbHVzYWdlKTsKKwkJc2hvd193YWxfdXNhZ2UoZXMsICZwbGFuc3Rh dGUtPmluc3RydW1lbnQtPnN0YWNrLndhbHVzYWdlKTsKIAogCS8qIFByZXBhcmUgcGVyLXdvcmtl ciBidWZmZXIvV0FMIHVzYWdlICovCiAJaWYgKGVzLT53b3JrZXJzX3N0YXRlICYmIChlcy0+YnVm ZmVycyB8fCBlcy0+d2FsKSAmJiBlcy0+dmVyYm9zZSkKQEAgLTIyOTksOSArMjI5OSw5IEBAIEV4 cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAKIAkJCUV4 cGxhaW5PcGVuV29ya2VyKG4sIGVzKTsKIAkJCWlmIChlcy0+YnVmZmVycykKLQkJCQlzaG93X2J1 ZmZlcl91c2FnZShlcywgJmluc3RydW1lbnQtPmJ1ZnVzYWdlKTsKKwkJCQlzaG93X2J1ZmZlcl91 c2FnZShlcywgJmluc3RydW1lbnQtPnN0YWNrLmJ1ZnVzYWdlKTsKIAkJCWlmIChlcy0+d2FsKQot CQkJCXNob3dfd2FsX3VzYWdlKGVzLCAmaW5zdHJ1bWVudC0+d2FsdXNhZ2UpOworCQkJCXNob3df d2FsX3VzYWdlKGVzLCAmaW5zdHJ1bWVudC0+c3RhY2sud2FsdXNhZ2UpOwogCQkJRXhwbGFpbkNs b3NlV29ya2VyKG4sIGVzKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IGI4 M2NlZDlhNTdhLi4xYzIyNjhiYzYwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0zMTIs NiArMzEyLDcgQEAgc3RhbmRhcmRfRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJ RGVzdFJlY2VpdmVyICpkZXN0OwogCWJvb2wJCXNlbmRUdXBsZXM7CiAJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OworCUluc3RyU3RhY2tSZXNvdXJjZSAqcmVzOwogCiAJLyogc2FuaXR5IGNoZWNr cyAqLwogCUFzc2VydChxdWVyeURlc2MgIT0gTlVMTCk7CkBAIC0zMzMsNiArMzM0LDkgQEAgc3Rh bmRhcmRfRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJaWYgKHF1ZXJ5RGVzYy0+ dG90YWx0aW1lKQogCQlJbnN0clN0YXJ0KHF1ZXJ5RGVzYy0+dG90YWx0aW1lKTsKIAorCS8qIFN0 YXJ0IHVwIHBlci1xdWVyeSBub2RlIGxldmVsIGluc3RydW1lbnRhdGlvbiAqLworCXJlcyA9IElu c3RyU3RhcnRRdWVyeSgpOworCiAJLyoKIAkgKiBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20gdGhl IHF1ZXJ5IGRlc2NyaXB0b3IgYW5kIHRoZSBxdWVyeSBmZWF0dXJlLgogCSAqLwpAQCAtMzgyLDYg KzM4Niw5IEBAIHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCWlm IChzZW5kVHVwbGVzKQogCQlkZXN0LT5yU2h1dGRvd24oZGVzdCk7CiAKKwkvKiBTaHV0IGRvd24g cGVyLXF1ZXJ5IG5vZGUgbGV2ZWwgaW5zdHJ1bWVudGF0aW9uICovCisJSW5zdHJTaHV0ZG93blF1 ZXJ5KHJlcyk7CisKIAlpZiAocXVlcnlEZXNjLT50b3RhbHRpbWUpCiAJCUluc3RyU3RvcChxdWVy eURlc2MtPnRvdGFsdGltZSwgZXN0YXRlLT5lc19wcm9jZXNzZWQpOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQcm9jbm9kZS5jCmluZGV4IGQyODY0NzEyNTRiLi43NDM2ZjMwNzk5NCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKQEAgLTgyMyw4ICs4MjMsMTcgQEAgRXhlY1NodXRkb3du Tm9kZV93YWxrZXIoUGxhblN0YXRlICpub2RlLCB2b2lkICpjb250ZXh0KQogCiAJLyogU3RvcCB0 aGUgbm9kZSBpZiB3ZSBzdGFydGVkIGl0IGFib3ZlLCByZXBvcnRpbmcgMCB0dXBsZXMuICovCiAJ aWYgKG5vZGUtPmluc3RydW1lbnQgJiYgbm9kZS0+aW5zdHJ1bWVudC0+cnVubmluZykKKwl7CiAJ CUluc3RyU3RvcE5vZGUobm9kZS0+aW5zdHJ1bWVudCwgMCk7CiAKKwkJLyoKKwkJICogUHJvcGFn YXRlIFdBTC9idWZmZXIgc3RhdHMgdG8gdGhlIHBhcmVudCBub2RlIG9uIHRoZQorCQkgKiBpbnN0 cnVtZW50YXRpb24gc3RhY2sgKHdoaWNoIGlzIHdoZXJlIEluc3RyU3RvcE5vZGUgcmV0dXJuZWQg dXMKKwkJICogdG8pLgorCQkgKi8KKwkJSW5zdHJOb2RlQWRkVG9DdXJyZW50KCZub2RlLT5pbnN0 cnVtZW50LT5zdGFjayk7CisJfQorCiAJcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9p bnN0cnVtZW50LmMKaW5kZXggYzUzNDgwZDgwMzAuLjA0MGQxZmRlY2JkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9pbnN0cnVtZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvaW5zdHJ1bWVudC5jCkBAIC0xNiwxNSArMTYsNDAgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4K IAogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11 dGlscy5oIgogCiBCdWZmZXJVc2FnZSBwZ0J1ZmZlclVzYWdlOwogc3RhdGljIEJ1ZmZlclVzYWdl IHNhdmVfcGdCdWZmZXJVc2FnZTsKIFdhbFVzYWdlCXBnV2FsVXNhZ2U7CiBzdGF0aWMgV2FsVXNh Z2Ugc2F2ZV9wZ1dhbFVzYWdlOworSW5zdHJTdGFjayAqcGdJbnN0clN0YWNrID0gTlVMTDsKIAog c3RhdGljIHZvaWQgQnVmZmVyVXNhZ2VBZGQoQnVmZmVyVXNhZ2UgKmRzdCwgY29uc3QgQnVmZmVy VXNhZ2UgKmFkZCk7CiBzdGF0aWMgdm9pZCBXYWxVc2FnZUFkZChXYWxVc2FnZSAqZHN0LCBXYWxV c2FnZSAqYWRkKTsKIAorLyoKKyAqIE5vZGUtc3BlY2lmaWMgaW5zdHJ1bWVudGF0aW9uIGhhbmRs aW5nIHVzZXMgUmVzb3VyY2VPd25lciBtZWNoYW5pc20gdG8KKyAqIHJlc2V0IHBnSW5zdHJTdGFj ayBvbiBhYm9ydC4KKyAqLworc3RhdGljIHZvaWQgUmVzT3duZXJSZWxlYXNlSW5zdHJTdGFjayhE YXR1bSByZXMpOworc3RhdGljIGNvbnN0IFJlc291cmNlT3duZXJEZXNjIGluc3RyX3N0YWNrX3Jl c293bmVyX2Rlc2MgPQoreworCS5uYW1lID0gImluc3RydW1lbnRhdGlvbiBzdGFjayBzY29wZSIs CisJLnJlbGVhc2VfcGhhc2UgPSBSRVNPVVJDRV9SRUxFQVNFX0JFRk9SRV9MT0NLUywKKwkucmVs ZWFzZV9wcmlvcml0eSA9IFJFTEVBU0VfUFJJT19GSVJTVCwKKwkuUmVsZWFzZVJlc291cmNlID0g UmVzT3duZXJSZWxlYXNlSW5zdHJTdGFjaywKKwkuRGVidWdQcmludCA9IE5VTEwsCQkJLyogZGVm YXVsdCBtZXNzYWdlIGlzIGZpbmUgKi8KK307CitzdGF0aWMgaW5saW5lIHZvaWQKK1Jlc291cmNl T3duZXJSZW1lbWJlckluc3RyU3RhY2soUmVzb3VyY2VPd25lciBvd25lciwgSW5zdHJTdGFja1Jl c291cmNlICogc2NvcGUpCit7CisJUmVzb3VyY2VPd25lclJlbWVtYmVyKG93bmVyLCBQb2ludGVy R2V0RGF0dW0oc2NvcGUpLCAmaW5zdHJfc3RhY2tfcmVzb3duZXJfZGVzYyk7Cit9CitzdGF0aWMg aW5saW5lIHZvaWQKK1Jlc291cmNlT3duZXJGb3JnZXRJbnN0clN0YWNrKFJlc291cmNlT3duZXIg b3duZXIsIEluc3RyU3RhY2tSZXNvdXJjZSAqIHNjb3BlKQoreworCVJlc291cmNlT3duZXJGb3Jn ZXQob3duZXIsIFBvaW50ZXJHZXREYXR1bShzY29wZSksICZpbnN0cl9zdGFja19yZXNvd25lcl9k ZXNjKTsKK30KIAogLyogR2VuZXJhbCBwdXJwb3NlIGluc3RydW1lbnRhdGlvbiBoYW5kbGluZyAq LwogSW5zdHJ1bWVudGF0aW9uICoKQEAgLTEzOSwxMiArMTY0LDE3IEBAIEluc3RyU3RhcnROb2Rl KE5vZGVJbnN0cnVtZW50YXRpb24gKiBpbnN0cikKIAkJIUlOU1RSX1RJTUVfU0VUX0NVUlJFTlRf TEFaWShpbnN0ci0+c3RhcnR0aW1lKSkKIAkJZWxvZyhFUlJPUiwgIkluc3RyU3RhcnROb2RlIGNh bGxlZCB0d2ljZSBpbiBhIHJvdyIpOwogCi0JLyogc2F2ZSBidWZmZXIgdXNhZ2UgdG90YWxzIGF0 IG5vZGUgZW50cnksIGlmIG5lZWRlZCAqLwotCWlmIChpbnN0ci0+bmVlZF9idWZ1c2FnZSkKLQkJ aW5zdHItPmJ1ZnVzYWdlX3N0YXJ0ID0gcGdCdWZmZXJVc2FnZTsKKwlpZiAoaW5zdHItPm5lZWRf YnVmdXNhZ2UgfHwgaW5zdHItPm5lZWRfd2FsdXNhZ2UpCisJeworCQkvKgorCQkgKiBFbnN1cmUg dGhhdCB3ZSBoYXZlIGFuIGFjdGl2ZSBwZ0luc3RyU3RhY2sgKEluc3RyU3RhcnRRdWVyeSBtdXN0 CisJCSAqIGhhdmUgYmVlbiBjYWxsZWQpCisJCSAqLworCQlBc3NlcnQocGdJbnN0clN0YWNrICE9 IE5VTEwpOwogCi0JaWYgKGluc3RyLT5uZWVkX3dhbHVzYWdlKQotCQlpbnN0ci0+d2FsdXNhZ2Vf c3RhcnQgPSBwZ1dhbFVzYWdlOworCQlpbnN0ci0+c3RhY2sucHJldmlvdXMgPSBwZ0luc3RyU3Rh Y2s7CisJCXBnSW5zdHJTdGFjayA9ICZpbnN0ci0+c3RhY2s7CisJfQogfQogCiAvKiBFeGl0IGZy b20gYSBwbGFuIG5vZGUgKi8KQEAgLTE2OSwxNCArMTk5LDEyIEBAIEluc3RyU3RvcE5vZGUoTm9k ZUluc3RydW1lbnRhdGlvbiAqIGluc3RyLCBkb3VibGUgblR1cGxlcykKIAkJSU5TVFJfVElNRV9T RVRfWkVSTyhpbnN0ci0+c3RhcnR0aW1lKTsKIAl9CiAKLQkvKiBBZGQgZGVsdGEgb2YgYnVmZmVy IHVzYWdlIHNpbmNlIGVudHJ5IHRvIG5vZGUncyB0b3RhbHMgKi8KLQlpZiAoaW5zdHItPm5lZWRf YnVmdXNhZ2UpCi0JCUJ1ZmZlclVzYWdlQWNjdW1EaWZmKCZpbnN0ci0+YnVmdXNhZ2UsCi0JCQkJ CQkJICZwZ0J1ZmZlclVzYWdlLCAmaW5zdHItPmJ1ZnVzYWdlX3N0YXJ0KTsKLQotCWlmIChpbnN0 ci0+bmVlZF93YWx1c2FnZSkKLQkJV2FsVXNhZ2VBY2N1bURpZmYoJmluc3RyLT53YWx1c2FnZSwK LQkJCQkJCSAgJnBnV2FsVXNhZ2UsICZpbnN0ci0+d2FsdXNhZ2Vfc3RhcnQpOworCWlmIChpbnN0 ci0+bmVlZF9idWZ1c2FnZSB8fCBpbnN0ci0+bmVlZF93YWx1c2FnZSkKKwl7CisJCS8qIEVuc3Vy ZSB0aGF0IHRoZXJlIGlzIGEgc3RhY2sgZW50cnkgYWJvdmUgdGhlIHRvcC1tb3N0IG5vZGUgKi8K KwkJQXNzZXJ0KGluc3RyLT5zdGFjay5wcmV2aW91cyAhPSBOVUxMKTsKKwkJcGdJbnN0clN0YWNr ID0gaW5zdHItPnN0YWNrLnByZXZpb3VzOworCX0KIAogCS8qIElzIHRoaXMgdGhlIGZpcnN0IHR1 cGxlIG9mIHRoaXMgY3ljbGU/ICovCiAJaWYgKCFpbnN0ci0+cnVubmluZykKQEAgLTI1NywxMCAr Mjg1LDY1IEBAIEluc3RyQWdnTm9kZShOb2RlSW5zdHJ1bWVudGF0aW9uICogZHN0LCBOb2RlSW5z dHJ1bWVudGF0aW9uICogYWRkKQogCiAJLyogQWRkIGRlbHRhIG9mIGJ1ZmZlciB1c2FnZSBzaW5j ZSBlbnRyeSB0byBub2RlJ3MgdG90YWxzICovCiAJaWYgKGRzdC0+bmVlZF9idWZ1c2FnZSkKLQkJ QnVmZmVyVXNhZ2VBZGQoJmRzdC0+YnVmdXNhZ2UsICZhZGQtPmJ1ZnVzYWdlKTsKKwkJQnVmZmVy VXNhZ2VBZGQoJmRzdC0+c3RhY2suYnVmdXNhZ2UsICZhZGQtPnN0YWNrLmJ1ZnVzYWdlKTsKIAog CWlmIChkc3QtPm5lZWRfd2FsdXNhZ2UpCisJCVdhbFVzYWdlQWRkKCZkc3QtPnN0YWNrLndhbHVz YWdlLCAmYWRkLT5zdGFjay53YWx1c2FnZSk7Cit9CisKK0luc3RyU3RhY2tSZXNvdXJjZSAqCitJ bnN0clN0YXJ0UXVlcnkoKQoreworCUluc3RyU3RhY2sgKnVzYWdlID0gTWVtb3J5Q29udGV4dEFs bG9jWmVybyhDdXJUcmFuc2FjdGlvbkNvbnRleHQsIHNpemVvZihJbnN0clN0YWNrKSk7CisJSW5z dHJTdGFja1Jlc291cmNlICp1c2FnZVJlcyA9IE1lbW9yeUNvbnRleHRBbGxvY1plcm8oQ3VyVHJh bnNhY3Rpb25Db250ZXh0LCBzaXplb2YoSW5zdHJTdGFja1Jlc291cmNlKSk7CisJUmVzb3VyY2VP d25lciBvd25lciA9IEN1cnJlbnRSZXNvdXJjZU93bmVyOworCisJQXNzZXJ0KG93bmVyICE9IE5V TEwpOworCisJdXNhZ2VSZXMtPm93bmVyID0gb3duZXI7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJn ZShvd25lcik7CisJUmVzb3VyY2VPd25lclJlbWVtYmVySW5zdHJTdGFjayhvd25lciwgdXNhZ2VS ZXMpOworCisJdXNhZ2UtPnByZXZpb3VzID0gcGdJbnN0clN0YWNrOworCXBnSW5zdHJTdGFjayA9 IHVzYWdlOworCisJcmV0dXJuIHVzYWdlUmVzOworfQorCit2b2lkCitJbnN0clNodXRkb3duUXVl cnkoSW5zdHJTdGFja1Jlc291cmNlICogcmVzKQoreworCUFzc2VydChyZXMgIT0gTlVMTCk7CisJ QXNzZXJ0KHJlcy0+b3duZXIgIT0gTlVMTCk7CisKKwlwZ0luc3RyU3RhY2sgPSByZXMtPnByZXZp b3VzOworCisJUmVzb3VyY2VPd25lckZvcmdldEluc3RyU3RhY2socmVzLT5vd25lciwgcmVzKTsK K30KKworc3RhdGljIHZvaWQKK1Jlc093bmVyUmVsZWFzZUluc3RyU3RhY2soRGF0dW0gcmVzKQor eworCS8qCisJICogWFhYOiBSZWdpc3RlcmVkIHJlc291cmNlcyBhcmUgKm5vdCogY2FsbGVkIGlu IHJldmVyc2Ugb3JkZXIsIGkuZS4gd2UnbGwKKwkgKiBnZXQgd2hhdCB3YXMgZmlyc3QgcmVnaXN0 ZXJlZCBmaXJzdCBhdCBzaHV0ZG93bi4gVG8gYXZvaWQgaGFuZGxpbmcKKwkgKiB0aGF0LCB3ZSBh cmUgcmVzZXR0aW5nIHRoZSBzdGFjayBoZXJlIG9uIGFib3J0IChpbnN0ZWFkIG9mIHJlY292ZXJp bmcKKwkgKiB0byBwcmV2aW91cykuCisJICovCisJcGdJbnN0clN0YWNrID0gTlVMTDsKK30KKwor dm9pZAorSW5zdHJOb2RlQWRkVG9DdXJyZW50KEluc3RyU3RhY2sgKiBhZGQpCit7CisJaWYgKHBn SW5zdHJTdGFjayAhPSBOVUxMKQorCXsKKwkJSW5zdHJTdGFjayAqZHN0ID0gcGdJbnN0clN0YWNr OworCisJCUJ1ZmZlclVzYWdlQWRkKCZkc3QtPmJ1ZnVzYWdlLCAmYWRkLT5idWZ1c2FnZSk7CiAJ CVdhbFVzYWdlQWRkKCZkc3QtPndhbHVzYWdlLCAmYWRkLT53YWx1c2FnZSk7CisJfQogfQogCiAv KiBub3RlIGN1cnJlbnQgdmFsdWVzIGR1cmluZyBwYXJhbGxlbCBleGVjdXRvciBzdGFydHVwICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmgKaW5kZXggM2EyODBmNGNhYWUuLmE5OGVmYWI1Zjkz IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmgKKysrIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oCkBAIC0xNCw2ICsxNCw3IEBACiAjZGVmaW5l IElOU1RSVU1FTlRfSAogCiAjaW5jbHVkZSAicG9ydGFiaWxpdHkvaW5zdHJfdGltZS5oIgorI2lu Y2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCiAKIAogLyoKQEAgLTY2LDYgKzY3LDIxIEBAIHR5cGVk ZWYgZW51bSBJbnN0cnVtZW50T3B0aW9uCiAJSU5TVFJVTUVOVF9BTEwgPSBQR19JTlQzMl9NQVgK IH0gSW5zdHJ1bWVudE9wdGlvbjsKIAorLyogU3RhY2sgb2YgV0FML2J1ZmZlciB1c2FnZSB1c2Vk IGZvciBwZXItbm9kZSBpbnN0cnVtZW50YXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IEluc3RyU3Rh Y2sKK3sKKwlzdHJ1Y3QgSW5zdHJTdGFjayAqcHJldmlvdXM7CisJQnVmZmVyVXNhZ2UgYnVmdXNh Z2U7CisJV2FsVXNhZ2UJd2FsdXNhZ2U7Cit9CQkJSW5zdHJTdGFjazsKKworLyogVXNlZCB0byBt YW5hZ2UgcmVzZXR0aW5nIG9mIGluc3RydW1lbnRhdGlvbiBzdGFjayBvbiBhYm9ydC4gKi8KK3R5 cGVkZWYgc3RydWN0IEluc3RyU3RhY2tSZXNvdXJjZQoreworCUluc3RyU3RhY2sgKnByZXZpb3Vz OworCVJlc291cmNlT3duZXIgb3duZXI7Cit9CQkJSW5zdHJTdGFja1Jlc291cmNlOworCiAvKgog ICogR2VuZXJhbCBwdXJwb3NlIGluc3RydW1lbnRhdGlvbiB0aGF0IGNhbiBjYXB0dXJlIHRpbWUs IFdBTC9idWZmZXIgdXNhZ2UgYW5kIHR1cGxlcwogICoKQEAgLTkxLDYgKzEwNywxMCBAQCB0eXBl ZGVmIHN0cnVjdCBJbnN0cnVtZW50YXRpb24KIAogLyoKICAqIFNwZWNpYWxpemVkIGluc3RydW1l bnRhdGlvbiBmb3IgcGVyLW5vZGUgZXhlY3V0aW9uIHN0YXRpc3RpY3MKKyAqCisgKiBSZXF1aXJl cyB1c2Ugb2YgSW5zdHJTdGFydFF1ZXJ5IHRvIGluaXRpYWxpemUgdGhlIHN0YWNrIHVzZWQgZm9y IFdBTC9idWZmZXIKKyAqIHVzYWdlIHN0YXRpc3RpY3MsIGFuZCBjbGVhbnVwIHRocm91Z2ggSW5z dHJTaHV0ZG93blF1ZXJ5LiBTb2xlbHkgaW50ZW5kZWQgZm9yCisgKiB0aGUgZXhlY3V0b3IgYW5k IGFueW9uZSByZXBvcnRpbmcgYWJvdXQgaXRzIGFjdGl2aXRpZXMgKGUuZy4gRVhQTEFJTiBBTkFM WVpFKS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgTm9kZUluc3RydW1lbnRhdGlvbgogewpAQCAtMTA1 LDggKzEyNSw2IEBAIHR5cGVkZWYgc3RydWN0IE5vZGVJbnN0cnVtZW50YXRpb24KIAlpbnN0cl90 aW1lCWNvdW50ZXI7CQkvKiBhY2N1bXVsYXRlZCBydW50aW1lIGZvciB0aGlzIG5vZGUgKi8KIAlk b3VibGUJCWZpcnN0dHVwbGU7CQkvKiB0aW1lIGZvciBmaXJzdCB0dXBsZSBvZiB0aGlzIGN5Y2xl ICovCiAJZG91YmxlCQl0dXBsZWNvdW50OwkJLyogIyBvZiB0dXBsZXMgZW1pdHRlZCBzbyBmYXIg dGhpcyBjeWNsZSAqLwotCUJ1ZmZlclVzYWdlIGJ1ZnVzYWdlX3N0YXJ0OyAvKiBidWZmZXIgdXNh Z2UgYXQgc3RhcnQgKi8KLQlXYWxVc2FnZQl3YWx1c2FnZV9zdGFydDsgLyogV0FMIHVzYWdlIGF0 IHN0YXJ0ICovCiAJLyogQWNjdW11bGF0ZWQgc3RhdGlzdGljcyBhY3Jvc3MgYWxsIGNvbXBsZXRl ZCBjeWNsZXM6ICovCiAJZG91YmxlCQlzdGFydHVwOwkJLyogdG90YWwgc3RhcnR1cCB0aW1lIChp biBzZWNvbmRzKSAqLwogCWRvdWJsZQkJdG90YWw7CQkJLyogdG90YWwgdGltZSAoaW4gc2Vjb25k cykgKi8KQEAgLTExNSw4ICsxMzMsNyBAQCB0eXBlZGVmIHN0cnVjdCBOb2RlSW5zdHJ1bWVudGF0 aW9uCiAJZG91YmxlCQlubG9vcHM7CQkJLyogIyBvZiBydW4gY3ljbGVzIGZvciB0aGlzIG5vZGUg Ki8KIAlkb3VibGUJCW5maWx0ZXJlZDE7CQkvKiAjIG9mIHR1cGxlcyByZW1vdmVkIGJ5IHNjYW5x dWFsIG9yIGpvaW5xdWFsICovCiAJZG91YmxlCQluZmlsdGVyZWQyOwkJLyogIyBvZiB0dXBsZXMg cmVtb3ZlZCBieSAib3RoZXIiIHF1YWxzICovCi0JQnVmZmVyVXNhZ2UgYnVmdXNhZ2U7CQkvKiB0 b3RhbCBidWZmZXIgdXNhZ2UgKi8KLQlXYWxVc2FnZQl3YWx1c2FnZTsJCS8qIHRvdGFsIFdBTCB1 c2FnZSAqLworCUluc3RyU3RhY2sJc3RhY2s7CQkJLyogc3RhY2sgdHJhY2tpbmcgYnVmZmVyL1dB TCB1c2FnZSAqLwogfQkJCU5vZGVJbnN0cnVtZW50YXRpb247CiAKIHR5cGVkZWYgc3RydWN0IFdv cmtlckluc3RydW1lbnRhdGlvbgpAQCAtMTI3LDYgKzE0NCw3IEBAIHR5cGVkZWYgc3RydWN0IFdv cmtlckluc3RydW1lbnRhdGlvbgogCiBleHRlcm4gUEdETExJTVBPUlQgQnVmZmVyVXNhZ2UgcGdC dWZmZXJVc2FnZTsKIGV4dGVybiBQR0RMTElNUE9SVCBXYWxVc2FnZSBwZ1dhbFVzYWdlOworZXh0 ZXJuIFBHRExMSU1QT1JUIEluc3RyU3RhY2sgKiBwZ0luc3RyU3RhY2s7CiAKIGV4dGVybiBJbnN0 cnVtZW50YXRpb24gKkluc3RyQWxsb2MoaW50IG4sIGludCBpbnN0cnVtZW50X29wdGlvbnMpOwog ZXh0ZXJuIHZvaWQgSW5zdHJTdGFydChJbnN0cnVtZW50YXRpb24gKmluc3RyKTsKQEAgLTEzNSwx MSArMTUzLDE0IEBAIGV4dGVybiB2b2lkIEluc3RyU3RvcChJbnN0cnVtZW50YXRpb24gKmluc3Ry LCBkb3VibGUgblR1cGxlcyk7CiBleHRlcm4gTm9kZUluc3RydW1lbnRhdGlvbiAqIEluc3RyQWxs b2NOb2RlKGludCBuLCBpbnQgaW5zdHJ1bWVudF9vcHRpb25zLAogCQkJCQkJCQkJCQlib29sIGFz eW5jX21vZGUpOwogZXh0ZXJuIHZvaWQgSW5zdHJJbml0Tm9kZShOb2RlSW5zdHJ1bWVudGF0aW9u ICogaW5zdHIsIGludCBpbnN0cnVtZW50X29wdGlvbnMpOworZXh0ZXJuIEluc3RyU3RhY2tSZXNv dXJjZSAqIEluc3RyU3RhcnRRdWVyeSh2b2lkKTsKK2V4dGVybiB2b2lkIEluc3RyU2h1dGRvd25R dWVyeShJbnN0clN0YWNrUmVzb3VyY2UgKiByZXMpOwogZXh0ZXJuIHZvaWQgSW5zdHJTdGFydE5v ZGUoTm9kZUluc3RydW1lbnRhdGlvbiAqIGluc3RyKTsKIGV4dGVybiB2b2lkIEluc3RyU3RvcE5v ZGUoTm9kZUluc3RydW1lbnRhdGlvbiAqIGluc3RyLCBkb3VibGUgblR1cGxlcyk7CiBleHRlcm4g dm9pZCBJbnN0clVwZGF0ZVR1cGxlQ291bnQoTm9kZUluc3RydW1lbnRhdGlvbiAqIGluc3RyLCBk b3VibGUgblR1cGxlcyk7CiBleHRlcm4gdm9pZCBJbnN0ckVuZExvb3AoTm9kZUluc3RydW1lbnRh dGlvbiAqIGluc3RyKTsKIGV4dGVybiB2b2lkIEluc3RyQWdnTm9kZShOb2RlSW5zdHJ1bWVudGF0 aW9uICogZHN0LCBOb2RlSW5zdHJ1bWVudGF0aW9uICogYWRkKTsKK2V4dGVybiB2b2lkIEluc3Ry Tm9kZUFkZFRvQ3VycmVudChJbnN0clN0YWNrICogc3RhY2spOwogCiBleHRlcm4gdm9pZCBJbnN0 clN0YXJ0UGFyYWxsZWxRdWVyeSh2b2lkKTsKIGV4dGVybiB2b2lkIEluc3RyRW5kUGFyYWxsZWxR dWVyeShCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsIFdhbFVzYWdlICp3YWx1c2FnZSk7CkBAIC0xNTEs MjEgKzE3MiwzNCBAQCBleHRlcm4gdm9pZCBXYWxVc2FnZUFjY3VtRGlmZihXYWxVc2FnZSAqZHN0 LCBjb25zdCBXYWxVc2FnZSAqYWRkLAogCiAjZGVmaW5lIElOU1RSX0JVRlVTQUdFX0lOQ1IoZmxk KSBkbyB7IFwKIAkJcGdCdWZmZXJVc2FnZS5mbGQrKzsgXAorCQlpZiAocGdJbnN0clN0YWNrKSBc CisJCQlwZ0luc3RyU3RhY2stPmJ1ZnVzYWdlLmZsZCsrOyBcCiAJfSB3aGlsZSgwKQogI2RlZmlu ZSBJTlNUUl9CVUZVU0FHRV9BREQoZmxkLHZhbCkgZG8geyBcCiAJCXBnQnVmZmVyVXNhZ2UuZmxk ICs9IHZhbDsgXAorCQlpZiAocGdJbnN0clN0YWNrKSBcCisJCQlwZ0luc3RyU3RhY2stPmJ1ZnVz YWdlLmZsZCArPSB2YWw7IFwKIAl9IHdoaWxlKDApCiAjZGVmaW5lIElOU1RSX0JVRlVTQUdFX1RJ TUVfQUREKGZsZCx2YWwpIGRvIHsgXAogCUlOU1RSX1RJTUVfQUREKHBnQnVmZmVyVXNhZ2UuZmxk LCB2YWwpOyBcCisJaWYgKHBnSW5zdHJTdGFjaykgXAorCQlJTlNUUl9USU1FX0FERChwZ0luc3Ry U3RhY2stPmJ1ZnVzYWdlLmZsZCwgdmFsKTsgXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIElOU1RS X0JVRlVTQUdFX1RJTUVfQUNDVU1fRElGRihmbGQsZW5kdmFsLHN0YXJ0dmFsKSBkbyB7IFwKIAlJ TlNUUl9USU1FX0FDQ1VNX0RJRkYocGdCdWZmZXJVc2FnZS5mbGQsIGVuZHZhbCwgc3RhcnR2YWwp OyBcCisJaWYgKHBnSW5zdHJTdGFjaykgXAorCQlJTlNUUl9USU1FX0FDQ1VNX0RJRkYocGdJbnN0 clN0YWNrLT5idWZ1c2FnZS5mbGQsIGVuZHZhbCwgc3RhcnR2YWwpOyBcCiAJfSB3aGlsZSAoMCkK KwogI2RlZmluZSBJTlNUUl9XQUxVU0FHRV9JTkNSKGZsZCkgZG8geyBcCiAJCXBnV2FsVXNhZ2Uu ZmxkKys7IFwKKwkJaWYgKHBnSW5zdHJTdGFjaykgXAorCQkJcGdJbnN0clN0YWNrLT53YWx1c2Fn ZS5mbGQrKzsgXAogCX0gd2hpbGUoMCkKICNkZWZpbmUgSU5TVFJfV0FMVVNBR0VfQUREKGZsZCx2 YWwpIGRvIHsgXAogCQlwZ1dhbFVzYWdlLmZsZCArPSB2YWw7IFwKKwkJaWYgKHBnSW5zdHJTdGFj aykgXAorCQkJcGdJbnN0clN0YWNrLT53YWx1c2FnZS5mbGQgKz0gdmFsOyBcCiAJfSB3aGlsZSgw KQogCiAjZW5kaWYJCQkJCQkJLyogSU5TVFJVTUVOVF9IICovCi0tIAoyLjQ3LjEKCg== --000000000000064ba9063db2054e--