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 1rzc4Z-005JTU-RR for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Apr 2024 12:50:04 +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 1rzc4Y-00F2VI-HT for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Apr 2024 12:50:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rzc4X-00F2VA-K2 for pgsql-hackers@lists.postgresql.org; Wed, 24 Apr 2024 12:50:02 +0000 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rzc4T-004Po4-6D for pgsql-hackers@postgresql.org; Wed, 24 Apr 2024 12:50:00 +0000 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-2dd64d6fe94so43334681fa.0 for ; Wed, 24 Apr 2024 05:49:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713962995; x=1714567795; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MD08icgMTnEQK5sx2oAQzz8EcdkerJ0Gm9En8RxpnAQ=; b=FtF+aJYgbAv154ve2PcYBDEiOrNG23yjkfP1KfkhYDdJKaAvlPC1JdHHcVrKuCL2lO ieg3p6CTS9c4Ng3ipKsVATziMtyQrCZt/VZAQm2L8CA02+1l+97ZHOEqiL+N+cTBazxT LxA9cyySZSQktRtO0tTuWFCTm7glJTBKq3eJluGQp+PT37qrGrfOAwdTUZoqnm1cIRWd WkkZ8lzC03F9+BzO5v1xN5eqW6+CRjKMlZI9zH9pS58P3O9Th6gVFqijTv6+WVO7+Ucw IywH7ya3VyHnzNOTKM9K7b0qYYiwx6oI2yEMf4quXPoJN5bXzYuiRgFvGuhAwm4g5IaZ 56KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713962995; x=1714567795; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MD08icgMTnEQK5sx2oAQzz8EcdkerJ0Gm9En8RxpnAQ=; b=KdJV6WBISThllL2Is7X4As5n/YunsTHoSaxdAyOBIc+2zdn6ziaXClM3A06DryVLmD o8stdIG8a1Gb3hXr4TUev9UY1wXk8b4d/PQAPxW2o9hi8N8YqEfIuWCwCN9ffhwG6TD4 VeOTZf+38rPDJSdJ+Iqvad5D4MysNRxXeEqiDHJ9FHmvirUi8Isd8PdVrDiKKuWlZD9L k0mkKhuvhz5B+XLfy3ekT8SWr2ZftJuIgJFHS+ykXXKjl2kkwybAULhmMuXwPmoQzluu LGnEczW8tDyROrXpz0DYn1JLRqcAywfQPGxkQGVEZPqs/yDVQYxYkqzkPhyDS3kLXb4X acKA== X-Forwarded-Encrypted: i=1; AJvYcCV63cuIdS9dYDsuFMAQNtr9OcmeK2dTfww6tniP/atGWbH9S2C8R+ZK8jF3GPH+l4hRIO/pOe67AEJe7kUkiiibaGq5lYtBhoSM7Qgy X-Gm-Message-State: AOJu0YwkX/FCpX/83r815n/LrkmJkvi35xCUoJADgUkG9MkyFAAfnInw DtafUFYM+71I04PWKVyfksB+a101jZRnRT+SE60/VzdoL5DJ7Q3FxRQHrVFJqDpz0KamC/3LHiy jTsEvzvHMTDWzyVS8Kat0pEBSzmU= X-Google-Smtp-Source: AGHT+IEimx40Cny4n36gRP2vEOfc64X7ylonoGnJ7hEKoHcDrltp5XHoar/ar/BRH+8BeVvu1S8dHFbnrMTyitJzm78= X-Received: by 2002:a2e:a710:0:b0:2d6:c29c:a4e9 with SMTP id s16-20020a2ea710000000b002d6c29ca4e9mr1200311lje.22.1713962994130; Wed, 24 Apr 2024 05:49:54 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> <6be6f58815dc0844fbe058edf56b4e735a6efc1c.camel@j-davis.com> <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> <12f1a2d8dd3b6305c0354f1c701f44b7be5e54eb.camel@j-davis.com> <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> In-Reply-To: <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> From: Bharath Rupireddy Date: Wed, 24 Apr 2024 18:19:40 +0530 Message-ID: Subject: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM To: Jeff Davis Cc: Masahiko Sawada , PostgreSQL-development , Andres Freund , Dilip Kumar , Luc Vlaming , Justin Pryzby , Michael Paquier , Matthias van de Meent , Alexander Korotkov Content-Type: multipart/mixed; boundary="0000000000006c82be0616d71b4b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006c82be0616d71b4b Content-Type: multipart/alternative; boundary="0000000000006c82bc0616d71b49" --0000000000006c82bc0616d71b49 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 3, 2024 at 1:10=E2=80=AFAM Jeff Davis wrote= : > > Here's where I think this API should go: > > 1. Have table_modify_begin/end and table_modify_buffer_insert, like > those that are implemented in your patch. I added table_modify_begin, table_modify_buffer_insert, table_modify_buffer_flush and table_modify_end. Table Access Method (AM) authors now can define their own buffering strategy and flushing decisions based on their tuple storage kinds and various other AM specific factors. I also added a default implementation that falls back to single inserts when no implementation is provided for these AM by AM authors. See the attached v19-0001 patch. > 2. Add some kind of flush callback that will be called either while the > tuples are being flushed or after the tuples are flushed (but before > they are freed by the AM). (Aside: do we need to call it while the > tuples are being flushed to get the right visibility semantics for > after-row triggers?) I added a flush callback named TableModifyBufferFlushCallback; when provided by callers invoked after tuples are flushed to disk from the buffers but before the AM frees them up. Index insertions and AFTER ROW INSERT triggers can be executed in this callback. See the v19-0001 patch for how AM invokes the flush callback, and see either v19-0003 or v19-0004 or v19-0005 for how a caller can supply the callback and required context to execute index insertions and AR triggers. > 3. Add table_modify_buffer_{update|delete} APIs. > > 9. Use these new methods for DELETE, UPDATE, and MERGE. MERGE can use > the buffer_insert/update/delete APIs; we don't need a separate merge > method. This probably requires that the AM maintain 3 separate buffers > to distinguish different kinds of changes at flush time (obviously > these can be initialized lazily to avoid overhead when not being used). I haven't thought about these things yet. I can only focus on them after seeing how the attached patches go from here. > 4. Some kind of API tweaks to help manage memory when modifying > pertitioned tables, so that the buffering doesn't get out of control. > Perhaps just reporting memory usage and allowing the caller to force > flushes would be enough. Heap implementation for thes new Table AMs uses a separate memory context for all of the operations. Please have a look and let me know if we need anything more. > 5. Use these new methods for CREATE/REFRESH MATERIALIZED VIEW. This is > fairly straightforward, I believe, and handled by your patch. Indexes > are (re)built afterward, and no triggers are possible. > > 6. Use these new methods for CREATE TABLE ... AS. This is fairly > straightforward, I believe, and handled by your patch. No indexes or > triggers are possible. I used multi inserts for all of these including TABLE REWRITE commands such as ALTER TABLE. See the attached v19-0002 patch. Check the testing section below for benefits. FWIW, following are some of the TABLE REWRITE commands that can get benefitted: ALTER TABLE tbl ALTER c1 TYPE bigint; ALTER TABLE itest13 ADD COLUMN c int GENERATED BY DEFAULT AS IDENTITY; ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap2; ALTER TABLE itest3 ALTER COLUMN a TYPE int; ALTER TABLE gtest20 ALTER COLUMN b SET EXPRESSION AS (a * 3); ALTER TABLE has_volatile ADD col4 int DEFAULT (random() * 10000)::int; and so on. > 7. Use these new methods for COPY. We have to be careful to avoid > regressions for the heap method, because it's already managing its own > buffers. If the AM manages the buffering, then it may require > additional copying of slots, which could be a disadvantage. To solve > this, we may need some minor API tweaks to avoid copying when the > caller guarantees that the memory will not be freed to early, or > perhaps expose the AM's memory context to copyfrom.c. Another thing to > consider is that the buffering in copyfrom.c is also used for FDWs, so > that buffering code path needs to be preserved in copyfrom.c even if > not used for AMs. I modified the COPY FROM code to use the new Table AMs, and performed some tests which show no signs of regression. Check the testing section below for more details. See the attached v19-0005 patch. With this, table_multi_insert can be deprecated. > 8. Use these new methods for INSERT INTO ... SELECT. One potential > challenge here is that execution nodes are not always run to > completion, so we need to be sure that the flush isn't forgotten in > that case. I did that in v19-0003. I did place the table_modify_end call in multiple places including ExecEndModifyTable. I didn't find any issues with it. Please have a look and let me know if we need the end call in more places. Check the testing section below for benefits. > 10. Use these new methods for logical apply. I used multi inserts for Logical Replication apply. in v19-0004. Check the testing section below for benefits. FWIW, open-source pglogical does have multi insert support, check code around https://github.com/2ndQuadrant/pglogical/blob/REL2_x_STABLE/pglogical_apply= _heap.c#L960 . > 11. Deprecate the multi_insert API. I did remove both table_multi_insert and table_finish_bulk_insert in v19-0006. Perhaps, removing them isn't a great idea, but adding a deprecation WARNING/ERROR until some more PG releases might be worth looking at. > Thoughts on this plan? Does your patch make sense in v17 as a stepping > stone, or should we try to make all of these API changes together in > v18? If the design, code and benefits that these new Table AMs bring to the table look good, I hope to see it for PG 18. > Also, a sample AM code would be a huge benefit here. Writing a real AM > is hard, but perhaps we can at least have an example one to demonstrate > how to use these APIs? The attached patches already have implemented these new Table AMs for Heap. I don't think we need a separate implementation to demonstrate. If others feel so, I'm open to thoughts here. Having said above, I'd like to reiterate the motivation behind the new Table AMs for multi and single inserts. 1. A scan-like API with state being carried across is thought to be better as suggested by Andres Freund - https://www.postgresql.org/message-id/20200924024128.kyk3r5g7dnu3fxxx@alap3= .anarazel.de . 2. Allowing a Table AM to optimize operations across multiple inserts, define its own buffering strategy and take its own flushing decisions based on their tuple storage kinds and various other AM specific factors. 3. Improve performance of various SQL commands with multi inserts for Heap AM. The attached v19 patches might need some more detailed comments, some documentation and some specific tests ensuring the multi inserts for Heap are kicked-in for various commands. I'm open to thoughts here. I did some testing to see how various commands benefit with multi inserts using these new Table AM for heap. It's not only the improvement in performance these commands see, but also the amount of WAL that gets generated reduces greatly. After all, multi inserts optimize the insertions by writing less WAL. IOW, writing WAL record per page if multiple rows fit into a single data page as opposed to WAL record per row. Test case 1: 100 million rows, 2 columns (int and float) Command | HEAD (sec) | PATCHED (sec) | Faster by % | Faster by X ------------------------------ | ---------- | ------------- | ----------- | ----------- CREATE TABLE AS | 121 | 77 | 36.3 | 1.57 CREATE MATERIALIZED VIEW | 101 | 49 | 51.4 | 2.06 REFRESH MATERIALIZED VIEW | 113 | 54 | 52.2 | 2.09 ALTER TABLE (TABLE REWRITE) | 124 | 81 | 34.6 | 1.53 COPY FROM | 71 | 72 | 0 | 1 INSERT INTO ... SELECT | 117 | 62 | 47 | 1.88 LOGICAL REPLICATION APPLY | 393 | 306 | 22.1 | 1.28 Command | HEAD (WAL in GB) | PATCHED (WAL in GB) | Reduced by % | Reduced by X ------------------------------ | ---------------- | ------------------- | ------------ | ----------- CREATE TABLE AS | 6.8 | 2.4 | 64.7 | 2.83 CREATE MATERIALIZED VIEW | 7.2 | 2.3 | 68 | 3.13 REFRESH MATERIALIZED VIEW | 10 | 5.1 | 49 | 1.96 ALTER TABLE (TABLE REWRITE) | 8 | 3.2 | 60 | 2.5 COPY FROM | 2.9 | 3 | 0 | 1 INSERT INTO ... SELECT | 8 | 3 | 62.5 | 2.66 LOGICAL REPLICATION APPLY | 7.5 | 2.3 | 69.3 | 3.26 Test case 2: 1 billion rows, 1 column (int) Command | HEAD (sec) | PATCHED (sec) | Faster by % | Faster by X ------------------------------ | ---------- | ------------- | ----------- | ----------- CREATE TABLE AS | 794 | 386 | 51.38 | 2.05 CREATE MATERIALIZED VIEW | 1006 | 563 | 44.03 | 1.78 REFRESH MATERIALIZED VIEW | 977 | 603 | 38.28 | 1.62 ALTER TABLE (TABLE REWRITE) | 1189 | 714 | 39.94 | 1.66 COPY FROM | 321 | 330 | -0.02 | 0.97 INSERT INTO ... SELECT | 1084 | 586 | 45.94 | 1.84 LOGICAL REPLICATION APPLY | 3530 | 2982 | 15.52 | 1.18 Command | HEAD (WAL in GB) | PATCHED (WAL in GB) | Reduced by % | Reduced by X ------------------------------ | ---------------- | ------------------- | ------------ | ----------- CREATE TABLE AS | 60 | 12 | 80 | 5 CREATE MATERIALIZED VIEW | 60 | 12 | 80 | 5 REFRESH MATERIALIZED VIEW | 60 | 12 | 80 | 5 ALTER TABLE (TABLE REWRITE) | 123 | 31 | 60 | 2.5 COPY FROM | 12 | 12 | 0 | 1 INSERT INTO ... SELECT | 120 | 24 | 80 | 5 LOGICAL REPLICATION APPLY | 61 | 12 | 80.32 | 5 Test setup: ./configure --prefix=3D$PWD/pg17/ --enable-tap-tests CFLAGS=3D"-ggdb3 -O2" = > install.log && make -j 8 install > install.log 2>&1 & wal_level=3Dlogical max_wal_size =3D 256GB checkpoint_timeout =3D 1h Test system is EC2 instance of type c5.4xlarge: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 46 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 16 On-line CPU(s) list: 0-15 Vendor ID: GenuineIntel Model name: Intel(R) Xeon(R) Platinum 8275CL CPU @ 3.00GHz CPU family: 6 Model: 85 Thread(s) per core: 2 Core(s) per socket: 8 Socket(s): 1 Stepping: 7 BogoMIPS: 5999.99 Caches (sum of all): L1d: 256 KiB (8 instances) L1i: 256 KiB (8 instances) L2: 8 MiB (8 instances) L3: 35.8 MiB (1 instance) NUMA: NUMA node(s): 1 NUMA node0 CPU(s): 0-15 RAM: MemTotal: 32036536 kB -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --0000000000006c82bc0616d71b49 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Wed, Apr 3, 2024 at 1:10=E2=80=AFAM Jeff Davis <= ;pgsql@j-davis.com> wrote:
>
> Here's where I think this API should go:<= br>>
> 1. Have table_modify_begin/end and table_modify_buffer_inse= rt, like
> those that are implemented in your patch.

I added t= able_modify_begin, table_modify_buffer_insert, table_modify_buffer_flush an= d table_modify_end. Table Access Method (AM) authors now can define their o= wn buffering strategy and flushing decisions based on their tuple storage k= inds and various other AM specific factors. I also added a default implemen= tation that falls back to single inserts when no implementation is provided= for these AM by AM authors. See the attached v19-0001 patch.

> 2= . Add some kind of flush callback that will be called either while the
&= gt; tuples are being flushed or after the tuples are flushed (but before> they are freed by the AM). (Aside: do we need to call it while the> tuples are being flushed to get the right visibility semantics for> after-row triggers?)

I added a flush callback named TableModif= yBufferFlushCallback; when provided by callers invoked after tuples are flu= shed to disk from the buffers but before the AM frees them up. Index insert= ions and AFTER ROW INSERT triggers can be executed in this callback. See th= e v19-0001 patch for how AM invokes the flush callback, and see either v19-= 0003 or v19-0004 or v19-0005 for how a caller can supply the callback and r= equired context to execute index insertions and AR triggers.

> 3.= Add table_modify_buffer_{update|delete} APIs.
>
> 9. Use these= new methods for DELETE, UPDATE, and MERGE. MERGE can use
> the buffe= r_insert/update/delete APIs; we don't need a separate merge
> met= hod. This probably requires that the AM maintain 3 separate buffers
>= to distinguish different kinds of changes at flush time (obviously
>= these can be initialized lazily to avoid overhead when not being used).
I haven't thought about these things yet. I can only focus on them= after seeing how the attached patches go from here.

> 4. Some ki= nd of API tweaks to help manage memory when modifying
> pertitioned t= ables, so that the buffering doesn't get out of control.
> Perhap= s just reporting memory usage and allowing the caller to force
> flus= hes would be enough.

Heap implementation for thes new Table AMs uses= a separate memory context for all of the operations. Please have a look an= d let me know if we need anything more.

> 5. Use these new method= s for CREATE/REFRESH MATERIALIZED VIEW. This is
> fairly straightforw= ard, I believe, and handled by your patch. Indexes
> are (re)built af= terward, and no triggers are possible.
>
> 6. Use these new met= hods for CREATE TABLE ... AS. This is fairly
> straightforward, I bel= ieve, and handled by your patch. No indexes or
> triggers are possibl= e.

I used multi inserts for all of these including TABLE REWRITE com= mands such as ALTER TABLE. See the attached v19-0002 patch. Check the testi= ng section below for benefits.

FWIW, following are some of the TABLE= REWRITE commands that can get benefitted:

ALTER TABLE tbl ALTER c1 = TYPE bigint;
ALTER TABLE itest13 ADD COLUMN c int GENERATED BY DEFAULT A= S IDENTITY;
ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap2;
A= LTER TABLE itest3 ALTER COLUMN a TYPE int;
ALTER TABLE gtest20 ALTER COL= UMN b SET EXPRESSION AS (a * 3);
ALTER TABLE has_volatile ADD col4 int D= EFAULT (random() * 10000)::int;
and so on.

> 7. Use these new = methods for COPY. We have to be careful to avoid
> regressions for th= e heap method, because it's already managing its own
> buffers. I= f the AM manages the buffering, then it may require
> additional copy= ing of slots, which could be a disadvantage. To solve
> this, we may = need some minor API tweaks to avoid copying when the
> caller guarant= ees that the memory will not be freed to early, or
> perhaps expose t= he AM's memory context to copyfrom.c. Another thing to
> consider= is that the buffering in copyfrom.c is also used for FDWs, so
> that= buffering code path needs to be preserved in copyfrom.c even if
> no= t used for AMs.

I modified the COPY FROM code to use the new Table A= Ms, and performed some tests which show no signs of regression. Check the t= esting section below for more details. See the attached v19-0005 patch. Wit= h this, table_multi_insert can be deprecated.

> 8. Use these new = methods for INSERT INTO ... SELECT. One potential
> challenge here is= that execution nodes are not always run to
> completion, so we need = to be sure that the flush isn't forgotten in
> that case.

= I did that in v19-0003. I did place the table_modify_end call in multiple p= laces including ExecEndModifyTable. I didn't find any issues with it. P= lease have a look and let me know if we need the end call in more places. C= heck the testing section below for benefits.

> 10. Use these new = methods for logical apply.

I used multi inserts for Logical Replicat= ion apply. in v19-0004. Check the testing section below for benefits.

&g= t; 11. Deprecate the multi_insert API.

I did remove both table_multi= _insert and table_finish_bulk_insert in v19-0006. Perhaps, removing them is= n't a great idea, but adding a deprecation WARNING/ERROR until some mor= e PG releases might be worth looking at.

> Thoughts on this plan?= Does your patch make sense in v17 as a stepping
> stone, or should w= e try to make all of these API changes together in
> v18?

If t= he design, code and benefits that these new Table AMs bring to the table lo= ok good, I hope to see it for PG 18.

> Also, a sample AM code wou= ld be a huge benefit here. Writing a real AM
> is hard, but perhaps w= e can at least have an example one to demonstrate
> how to use these = APIs?

The attached patches already have implemented these new Table = AMs for Heap. I don't think we need a separate implementation to demons= trate. If others feel so, I'm open to thoughts here.

Having said= above, I'd like to reiterate the motivation behind the new Table AMs f= or multi and single inserts.

1. A scan-like API with state being car= ried across is thought to be better as suggested by Andres Freund - https://www.postgresql.org/message-id/2= 0200924024128.kyk3r5g7dnu3fxxx@alap3.anarazel.de.
2. Allowing a Tabl= e AM to optimize operations across multiple inserts, define its own bufferi= ng strategy and take its own flushing decisions based on their tuple storag= e kinds and various other AM specific factors.
3. Improve performance of= various SQL commands with multi inserts for Heap AM.

The attached v= 19 patches might need some more detailed comments, some documentation and s= ome specific tests ensuring the multi inserts for Heap are kicked-in for va= rious commands. I'm open to thoughts here.

I did some testing to= see how various commands benefit with multi inserts using these new Table = AM for heap. It's not only the improvement in performance these command= s see, but also the amount of WAL that gets generated reduces greatly. Afte= r all, multi inserts optimize the insertions by writing less WAL. IOW, writ= ing WAL record per page if multiple rows fit into a single data page as opp= osed to WAL record per row.

Test case 1: 100 million rows, 2 columns= (int and float)

Command =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0| HEAD (sec) | PATCHED (sec) | Faster by % | Faster by X
---------= --------------------- | ---------- | ------------- | ----------- | --------= ---
CREATE TABLE AS =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0| 121 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 77 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0| 36.3 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 1.57
CREATE MATERIALIZED VIEW= =C2=A0 =C2=A0 =C2=A0 | 101 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 49 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0| 51.4 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 2.06
REFR= ESH MATERIALIZED VIEW =C2=A0 =C2=A0 =C2=A0| 113 =C2=A0 =C2=A0 =C2=A0 =C2=A0= | 54 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 52.2 =C2=A0 =C2=A0 =C2=A0 = =C2=A0| 2.09
ALTER TABLE (TABLE REWRITE) =C2=A0 =C2=A0| 124 =C2=A0 =C2= =A0 =C2=A0 =C2=A0| 81 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 34.6 =C2= =A0 =C2=A0 =C2=A0 =C2=A0| 1.53
COPY FROM =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 71 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 | 72 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 | 1
INSERT INTO ... SELECT =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 1= 17 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 62 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0| 47 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 1.88
LOGICAL REPLICATION APP= LY =C2=A0 =C2=A0 =C2=A0| 393 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 306 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 | 22.1 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 1.28

Comma= nd =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0| HEAD (WAL in GB) | PATCHED (WAL in GB) | Reduced by % | Redu= ced by X
------------------------------ | ---------------- | -----------= -------- | ------------ | -----------
CREATE TABLE AS =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 6.8 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0| 2.4 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 | 64.7 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 2.83
CREATE MATERIALIZED VIEW = =C2=A0 =C2=A0 =C2=A0 | 7.2 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= | 2.3 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 68 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 3.13
REFRESH MATERIALIZED VIEW =C2=A0 =C2= =A0 =C2=A0| 10 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 5.1 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 49 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 | 1.96
ALTER TABLE (TABLE REWRITE) =C2=A0 =C2=A0| 8 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 3.2 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 60 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 | 2.5
COPY FROM =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0| 2.9 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0| 3 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | = 0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 1
INSERT INTO ... SELECT = =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 8 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0| 3 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 | 62.5 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 2.66
LOGICAL REPLICATION APP= LY =C2=A0 =C2=A0 =C2=A0| 7.5 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0| 2.3 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 69.3 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 | 3.26

Test case 2: 1 billion rows, = 1 column (int)

Command =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0| HEAD (sec) | PATCHED (sec) | Faster by % | Faster by X
------------= ------------------ | ---------- | ------------- | ----------- | -----------=
CREATE TABLE AS =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= | 794 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 386 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |= 51.38 =C2=A0 =C2=A0 =C2=A0 | 2.05
CREATE MATERIALIZED VIEW =C2=A0 =C2= =A0 =C2=A0 | 1006 =C2=A0 =C2=A0 =C2=A0 | 563 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 | 44.03 =C2=A0 =C2=A0 =C2=A0 | 1.78
REFRESH MATERIALIZED VIEW =C2= =A0 =C2=A0 =C2=A0| 977 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 603 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 | 38.28 =C2=A0 =C2=A0 =C2=A0 | 1.62
ALTER TABLE (TABLE= REWRITE) =C2=A0 =C2=A0| 1189 =C2=A0 =C2=A0 =C2=A0 | 714 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 | 39.94 =C2=A0 =C2=A0 =C2=A0 | 1.66
COPY FROM =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 321 = =C2=A0 =C2=A0 =C2=A0 =C2=A0| 330 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | -0.02= =C2=A0 =C2=A0 =C2=A0 | 0.97
INSERT INTO ... SELECT =C2=A0 =C2=A0 =C2=A0= =C2=A0 | 1084 =C2=A0 =C2=A0 =C2=A0 | 586 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 | 45.94 =C2=A0 =C2=A0 =C2=A0 | 1.84
LOGICAL REPLICATION APPLY =C2=A0= =C2=A0 =C2=A0| 3530 =C2=A0 =C2=A0 =C2=A0 | 2982 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0| 15.52 =C2=A0 =C2=A0 =C2=A0 | 1.18

Command =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| HEAD= (WAL in GB) | PATCHED (WAL in GB) | Reduced by % | Reduced by X
-------= ----------------------- | ---------------- | ------------------- | --------= ---- | -----------
CREATE TABLE AS =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0| 60 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |= 12 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 80 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 5
CREATE MATERIALIZED VIEW =C2=A0 =C2= =A0 =C2=A0 | 60 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 12 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 80 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 | 5
REFRESH MATERIALIZED VIEW =C2=A0 =C2=A0 =C2= =A0| 60 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 12 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 80 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 | 5
ALTER TABLE (TABLE REWRITE) =C2=A0 =C2=A0| 123 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 31 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 60 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |= 2.5
COPY FROM =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0| 12 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |= 12 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 1
INSERT INTO ... SELECT =C2=A0 = =C2=A0 =C2=A0 =C2=A0 | 120 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= | 24 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 80 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 5
LOGICAL REPLICATION APPLY =C2=A0 =C2= =A0 =C2=A0| 61 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 12 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| 80.32 =C2=A0 =C2= =A0 =C2=A0 =C2=A0| 5

Test setup:
./configure --prefix=3D$PWD/pg17/ --enable-tap-tests CF= LAGS=3D"-ggdb3 -O2" > install.log && make -j 8 install= > install.log 2>&1 &

wal_level=3Dlogical
max_wal_s= ize =3D 256GB
checkpoint_timeout =3D 1h


Test system is EC2 instance of type c5.4xlarge:
Architecture: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0x86_64=
=C2=A0 CPU op-mode(s): =C2=A0 =C2=A0 =C2=A0 =C2=A032-bit, 64-bit
=C2= =A0 Address sizes: =C2=A0 =C2=A0 =C2=A0 =C2=A0 46 bits physical, 48 bits vi= rtual
=C2=A0 Byte Order: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Little= Endian
CPU(s): =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A016
=C2=A0 On-line CPU(s) list: =C2=A0 0-15
Vendor ID: =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 GenuineIntel
=C2=A0 Model name= : =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Intel(R) Xeon(R) Platinum 8275CL= CPU @ 3.00GHz
=C2=A0 =C2=A0 CPU family: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A06
=C2=A0 =C2=A0 Model: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 85
=C2=A0 =C2=A0 Thread(s) per core: =C2=A02
=C2=A0 =C2=A0 Core(s= ) per socket: =C2=A08
=C2=A0 =C2=A0 Socket(s): =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 1
=C2=A0 =C2=A0 Stepping: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A07
=C2=A0 =C2=A0 BogoMIPS: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A05999.99

Caches (sum of a= ll): =C2=A0 =C2=A0
=C2=A0 L1d: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 256 KiB (8 instances)
=C2=A0 L1i: =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 256 KiB (8 instances)
= =C2=A0 L2: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A08 MiB (8 instances)
=C2=A0 L3: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A035.8 MiB (1 instance)
NUMA: =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
=C2=A0 NUMA = node(s): =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A01
=C2=A0 NUMA node0 CPU(s): = =C2=A0 =C2=A0 0-15

RAM:
=C2=A0 MemTo= tal: =C2=A0 =C2=A0 =C2=A0 32036536 kB

--
Bharat= h Rupireddy
PostgreSQL Contributors Team
RDS Open Source DatabasesAmazon Web Services: = https://aws.amazon.com
--0000000000006c82bc0616d71b49-- --0000000000006c82be0616d71b4b Content-Type: application/x-patch; name="v19-0001-Introduce-new-Table-Access-Methods-for-single-an.patch" Content-Disposition: attachment; filename="v19-0001-Introduce-new-Table-Access-Methods-for-single-an.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvdriqfi0 RnJvbSA3NTY2NmRhOTk4YWFhOGZiYzYwZDYyYWQ4YzE2MGE1YzIyNzA2NWU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjMgQXByIDIwMjQgMDQ6MTI6MjkgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxOSAxLzZdIEludHJvZHVjZSBuZXcgVGFibGUgQWNjZXNzIE1l dGhvZHMgZm9yIHNpbmdsZSBhbmQKIG11bHRpIGluc2VydHMKCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8IDIwMiArKysrKysrKysrKysrKysrKysrKysrLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8ICAgNiArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgIHwgIDk1ICsrKysrKysrKysrCiBzcmMv YmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jICAgIHwgIDEwICsrCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDQ0ICsrKysrCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgIHwgMTQ2ICsrKysrKysrKysrKysrKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgfCAgIDMgKwogNyBmaWxlcyBjaGFu Z2VkLCA1MDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtLmMKaW5kZXggNGE0Y2Y3NjI2OS4uMzdjNmVkMjMyYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnkuaCIKICNp bmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1 ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgpAQCAtMTEy LDcgKzExMyw3IEBAIHN0YXRpYyBpbnQJYm90dG9tdXBfc29ydF9hbmRfc2hyaW5rKFRNX0luZGV4 RGVsZXRlT3AgKmRlbHN0YXRlKTsKIHN0YXRpYyBYTG9nUmVjUHRyIGxvZ19oZWFwX25ld19jaWQo UmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXApOwogc3RhdGljIEhlYXBUdXBsZSBFeHRy YWN0UmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHAsIGJvb2wg a2V5X3JlcXVpcmVkLAogCQkJCQkJCQkJCWJvb2wgKmNvcHkpOwotCitzdGF0aWMgdm9pZCBoZWFw X21vZGlmeV9pbnNlcnRfZW5kX2NhbGxiYWNrKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKIAog LyoKICAqIEVhY2ggdHVwbGUgbG9jayBtb2RlIGhhcyBhIGNvcnJlc3BvbmRpbmcgaGVhdnl3ZWln aHQgbG9jaywgYW5kIG9uZSBvciB0d28KQEAgLTI2MDgsNiArMjYwOSwyMDUgQEAgaGVhcF9tdWx0 aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIFR1cGxlVGFibGVTbG90ICoqc2xvdHMsIGludCBu dHVwbGVzLAogCXBnc3RhdF9jb3VudF9oZWFwX2luc2VydChyZWxhdGlvbiwgbnR1cGxlcyk7CiB9 CiAKKy8qCisgKiBJbml0aWFsaXplIGhlYXAgbW9kaWZ5IHN0YXRlLgorICovCitUYWJsZU1vZGlm eVN0YXRlICoKK2hlYXBfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwgaW50IG1vZGlmeV9mbGFn cywKKwkJCQkgIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAorCQkJCSAgVGFibGVNb2RpZnlC dWZmZXJGbHVzaENhbGxiYWNrIG1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2ssCisJCQkJICB2 b2lkICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpCit7CisJVGFibGVNb2RpZnlTdGF0ZSAq c3RhdGU7CisJTWVtb3J5Q29udGV4dCBjb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKKworCWNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wVHJhbnNhY3Rpb25Db250 ZXh0LAorCQkJCQkJCQkJImhlYXBfbW9kaWZ5IG1lbW9yeSBjb250ZXh0IiwKKwkJCQkJCQkJCUFM TE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhjb250ZXh0KTsKKwlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKFRhYmxlTW9kaWZ5U3RhdGUp KTsKKwlzdGF0ZS0+cmVsID0gcmVsOworCXN0YXRlLT5tb2RpZnlfZmxhZ3MgPSBtb2RpZnlfZmxh Z3M7CisJc3RhdGUtPm1lbV9jeHQgPSBjb250ZXh0OworCXN0YXRlLT5jaWQgPSBjaWQ7CisJc3Rh dGUtPm9wdGlvbnMgPSBvcHRpb25zOworCXN0YXRlLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxi YWNrID0gbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jYWxsYmFjazsKKwlzdGF0ZS0+bW9kaWZ5X2J1ZmZl cl9mbHVzaF9jb250ZXh0ID0gbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0OworCXN0YXRlLT5t b2RpZnlfZW5kX2NhbGxiYWNrID0gTlVMTDsJLyogVG8gYmUgaW5zdGFsbGVkIGxhemlseSAqLwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiBzdGF0ZTsKK30K KworLyoKKyAqIFN0b3JlIHBhc3NlZC1pbiB0dXBsZSBpbnRvIGluLW1lbW9yeSBidWZmZXJlZCBz bG90cy4gV2hlbiBmdWxsLCBpbnNlcnQKKyAqIG11bHRpcGxlIHR1cGxlcyBmcm9tIHRoZSBidWZm ZXJzIGludG8gaGVhcC4KKyAqLwordm9pZAoraGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJs ZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJ VHVwbGVUYWJsZVNsb3QgKmRzdHNsb3Q7CisJSGVhcEluc2VydFN0YXRlICppc3RhdGU7CisJSGVh cE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0Owor CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+bWVtX2N4dCk7CisK KwkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgaGVhcCBpbnNlcnQgc3RhdGUgKi8K KwlpZiAoc3RhdGUtPmRhdGEgPT0gTlVMTCkKKwl7CisJCWlzdGF0ZSA9IChIZWFwSW5zZXJ0U3Rh dGUgKikgcGFsbG9jMChzaXplb2YoSGVhcEluc2VydFN0YXRlKSk7CisJCWlzdGF0ZS0+YmlzdGF0 ZSA9IE5VTEw7CisJCWlzdGF0ZS0+bWlzdGF0ZSA9IE5VTEw7CisJCXN0YXRlLT5kYXRhID0gaXN0 YXRlOworCisJCWlmICgoc3RhdGUtPm1vZGlmeV9mbGFncyAmIFRNX0ZMQUdfTVVMVElfSU5TRVJU UykgIT0gMCkKKwkJeworCQkJbWlzdGF0ZSA9IChIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqKSBwYWxs b2MwKHNpemVvZihIZWFwTXVsdGlJbnNlcnRTdGF0ZSkpOworCQkJbWlzdGF0ZS0+c2xvdHMgPSAo VHVwbGVUYWJsZVNsb3QgKiopIHBhbGxvYzAoc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopICogSEVB UF9NQVhfQlVGRkVSRURfU0xPVFMpOworCQkJaXN0YXRlLT5taXN0YXRlID0gbWlzdGF0ZTsKKwkJ CW1pc3RhdGUtPm1lbV9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsCisJCQkJCQkJCQkJCQkJICJoZWFwX211bHRpX2luc2VydCBtZW1vcnkgY29udGV4dCIs CisJCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQl9CisKKwkJaWYgKChz dGF0ZS0+bW9kaWZ5X2ZsYWdzICYgVE1fRkxBR19CQVNfQlVMS1dSSVRFKSAhPSAwKQorCQkJaXN0 YXRlLT5iaXN0YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisKKwkJc3RhdGUtPm1vZGlmeV9l bmRfY2FsbGJhY2sgPSBoZWFwX21vZGlmeV9pbnNlcnRfZW5kX2NhbGxiYWNrOworCX0KKworCWlz dGF0ZSA9IChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisJQXNzZXJ0KGlzdGF0ZS0+ bWlzdGF0ZSAhPSBOVUxMKTsKKwltaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCisJZHN0c2xv dCA9IG1pc3RhdGUtPnNsb3RzW21pc3RhdGUtPmN1cl9zbG90c107CisJaWYgKGRzdHNsb3QgPT0g TlVMTCkKKwl7CisJCS8qCisJCSAqIFdlIHVzZSB2aXJ0dWFsIHR1cGxlIHNsb3RzIGJ1ZmZlcmVk IHNsb3RzIGZvciBsZXZlcmFnaW5nIHRoZQorCQkgKiBvcHRpbWl6YXRpb24gaXQgcHJvdmlkZXMg dG8gbWluaW1pemUgcGh5c2ljYWwgZGF0YSBjb3B5aW5nLiBUaGUKKwkJICogdmlydHVhbCBzbG90 IGdldHMgbWF0ZXJpYWxpemVkIHdoZW4gd2UgY29weSAodmlhIGJlbG93CisJCSAqIEV4ZWNDb3B5 U2xvdCkgdGhlIHR1cGxlcyBmcm9tIHRoZSBzb3VyY2Ugc2xvdCB3aGljaCBjYW4gYmUgb2YgYW55 CisJCSAqIHR5cGUuIFRoaXMgd2F5LCBpdCBpcyBlbnN1cmVkIHRoYXQgdGhlIHR1cGxlIHN0b3Jh Z2UgZG9lc24ndCBkZXBlbmQKKwkJICogb24gZXh0ZXJuYWwgbWVtb3J5LCBiZWNhdXNlIGFsbCB0 aGUgZGF0dW1zIHRoYXQgYXJlbid0IHBhc3NlZCBieQorCQkgKiB2YWx1ZSBhcmUgY29waWVkIGlu dG8gdGhlIHNsb3QncyBtZW1vcnkgY29udGV4dC4KKwkJICovCisJCWRzdHNsb3QgPSBNYWtlVHVw bGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihzdGF0ZS0+cmVsKSwKKwkJCQkJCQkJCSAmVFRT T3BzVmlydHVhbCk7CisJCW1pc3RhdGUtPnNsb3RzW21pc3RhdGUtPmN1cl9zbG90c10gPSBkc3Rz bG90OworCX0KKworCUV4ZWNDbGVhclR1cGxlKGRzdHNsb3QpOworCUV4ZWNDb3B5U2xvdChkc3Rz bG90LCBzbG90KTsKKworCW1pc3RhdGUtPmN1cl9zbG90cysrOworCisJLyoKKwkgKiBNZW1vcnkg YWxsb2NhdGVkIGZvciB0aGUgd2hvbGUgdHVwbGUgaXMgaW4gc2xvdCdzIG1lbW9yeSBjb250ZXh0 LCBzbworCSAqIHVzZSBpdCBrZWVwIHRyYWNrIG9mIHRoZSB0b3RhbCBzcGFjZSBvY2N1cGllZCBi eSBhbGwgYnVmZmVyZWQgdHVwbGVzLgorCSAqLworCWlmIChUVFNfU0hPVUxERlJFRShkc3RzbG90 KSkKKwkJbWlzdGF0ZS0+Y3VyX3NpemUgKz0gTWVtb3J5Q29udGV4dE1lbUFsbG9jYXRlZChkc3Rz bG90LT50dHNfbWN4dCwgZmFsc2UpOworCisJaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA+PSBIRUFQ X01BWF9CVUZGRVJFRF9TTE9UUyB8fAorCQltaXN0YXRlLT5jdXJfc2l6ZSA+PSBIRUFQX01BWF9C VUZGRVJFRF9CWVRFUykKKwkJaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsKKworCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKKyAqIEluc2VydCBtdWx0 aXBsZSB0dXBsZXMgZnJvbSBpbi1tZW1vcnkgYnVmZmVyZWQgc2xvdHMgaW50byBoZWFwLgorICov Cit2b2lkCitoZWFwX21vZGlmeV9idWZmZXJfZmx1c2goVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUp Cit7CisJSGVhcEluc2VydFN0YXRlICppc3RhdGU7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1p c3RhdGU7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyogUXVpY2sgZXhpdCBpZiB3 ZSBoYXZlbid0IGluc2VydGVkIGFueXRoaW5nIHlldCAqLworCWlmIChzdGF0ZS0+ZGF0YSA9PSBO VUxMKQorCQlyZXR1cm47CisKKwlpc3RhdGUgPSAoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5k YXRhOworCUFzc2VydChpc3RhdGUtPm1pc3RhdGUgIT0gTlVMTCk7CisJbWlzdGF0ZSA9IGlzdGF0 ZS0+bWlzdGF0ZTsKKworCWlmIChtaXN0YXRlLT5jdXJfc2xvdHMgPT0gMCkKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBoZWFwX211bHRpX2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNvIHN3aXRjaCB0 byBzaG9ydC1saXZlZCBtZW1vcnkKKwkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5nIGl0LgorCSAq LworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8obWlzdGF0ZS0+bWVtX2N4dCk7 CisKKwloZWFwX211bHRpX2luc2VydChzdGF0ZS0+cmVsLCBtaXN0YXRlLT5zbG90cywgbWlzdGF0 ZS0+Y3VyX3Nsb3RzLAorCQkJCQkgIHN0YXRlLT5jaWQsIHN0YXRlLT5vcHRpb25zLCBpc3RhdGUt PmJpc3RhdGUpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCU1lbW9y eUNvbnRleHRSZXNldChtaXN0YXRlLT5tZW1fY3h0KTsKKworCWlmIChzdGF0ZS0+bW9kaWZ5X2J1 ZmZlcl9mbHVzaF9jYWxsYmFjayAhPSBOVUxMKQorCQlzdGF0ZS0+bW9kaWZ5X2J1ZmZlcl9mbHVz aF9jYWxsYmFjayhzdGF0ZS0+bW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LAorCQkJCQkJCQkJ CQltaXN0YXRlLT5zbG90cywgbWlzdGF0ZS0+Y3VyX3Nsb3RzKTsKKworCW1pc3RhdGUtPmN1cl9z bG90cyA9IDA7CisJbWlzdGF0ZS0+Y3VyX3NpemUgPSAwOworfQorCisvKgorICogSGVhcCBpbnNl cnQgc3BlY2lmaWMgY2FsbGJhY2sgdXNlZCBmb3IgcGVyZm9ybWluZyB3b3JrIGF0IHRoZSBlbmQg bGlrZQorICogZmx1c2hpbmcgYnVmZmVyZWQgdHVwbGVzIGlmIGFueSwgY2xlYW5pbmcgdXAgdGhl IGluc2VydCBzdGF0ZSBhbmQgYnVmZmVyZWQKKyAqIHNsb3RzLgorICovCitzdGF0aWMgdm9pZAor aGVhcF9tb2RpZnlfaW5zZXJ0X2VuZF9jYWxsYmFjayhUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkK K3sKKwlIZWFwSW5zZXJ0U3RhdGUgKmlzdGF0ZTsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2UgaGF2 ZW4ndCBpbnNlcnRlZCBhbnl0aGluZyB5ZXQgKi8KKwlpZiAoc3RhdGUtPmRhdGEgPT0gTlVMTCkK KwkJcmV0dXJuOworCisJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0YTsK KworCWlmIChpc3RhdGUtPm1pc3RhdGUgIT0gTlVMTCkKKwl7CisJCUhlYXBNdWx0aUluc2VydFN0 YXRlICptaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCisJCWhlYXBfbW9kaWZ5X2J1ZmZlcl9m bHVzaChzdGF0ZSk7CisKKwkJQXNzZXJ0KG1pc3RhdGUtPmN1cl9zbG90cyA9PSAwICYmCisJCQkg ICBtaXN0YXRlLT5jdXJfc2l6ZSA9PSAwKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IEhFQVBf TUFYX0JVRkZFUkVEX1NMT1RTICYmIG1pc3RhdGUtPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJ CUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QobWlzdGF0ZS0+c2xvdHNbaV0pOworCisJCU1l bW9yeUNvbnRleHREZWxldGUobWlzdGF0ZS0+bWVtX2N4dCk7CisJfQorCisJaWYgKGlzdGF0ZS0+ YmlzdGF0ZSAhPSBOVUxMKQorCQlGcmVlQnVsa0luc2VydFN0YXRlKGlzdGF0ZS0+YmlzdGF0ZSk7 Cit9CisKKy8qCisgKiBDbGVhbiBoZWFwIG1vZGlmeSBzdGF0ZS4KKyAqLwordm9pZAoraGVhcF9t b2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCWlmIChzdGF0ZS0+bW9kaWZ5 X2VuZF9jYWxsYmFjayAhPSBOVUxMKQorCQlzdGF0ZS0+bW9kaWZ5X2VuZF9jYWxsYmFjayhzdGF0 ZSk7CisKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHN0YXRlLT5tZW1fY3h0KTsKK30KKwogLyoKICAq CXNpbXBsZV9oZWFwX2luc2VydCAtIGluc2VydCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggNmY4YjFiNzkyOS4uZWRhMGM3M2ExNiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0yNjE1LDYgKzI2MTUs MTIgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50 dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZl LAogCS50dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSA9IGhlYXBhbV90dXBsZV9jb21wbGV0ZV9z cGVjdWxhdGl2ZSwKIAkubXVsdGlfaW5zZXJ0ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisKKwkudHVw bGVfbW9kaWZ5X2JlZ2luID0gaGVhcF9tb2RpZnlfYmVnaW4sCisJLnR1cGxlX21vZGlmeV9idWZm ZXJfaW5zZXJ0ID0gaGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydCwKKwkudHVwbGVfbW9kaWZ5X2J1 ZmZlcl9mbHVzaCA9IGhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaCwKKwkudHVwbGVfbW9kaWZ5X2Vu ZCA9IGhlYXBfbW9kaWZ5X2VuZCwKKwogCS50dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVs ZXRlLAogCS50dXBsZV91cGRhdGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2Nr ID0gaGVhcGFtX3R1cGxlX2xvY2ssCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCBl NTdhMGI3ZWEzLi4wZTRjZTFhY2E2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAg LTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPG1hdGguaD4KIAorI2luY2x1ZGUgImFjY2Vzcy9o ZWFwYW0uaCIJCS8qIGp1c3QgZm9yIEJ1bGtJbnNlcnRTdGF0ZSAqLwogI2luY2x1ZGUgImFjY2Vz cy9zeW5jc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3hhY3QuaCIKQEAgLTI5LDYgKzMwLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5o IgogI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIK KyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCiAvKgogICogQ29uc3RhbnRzIHRvIGNvbnRy b2wgdGhlIGJlaGF2aW9yIG9mIGJsb2NrIGFsbG9jYXRpb24gdG8gcGFyYWxsZWwgd29ya2VycwpA QCAtNDgsNiArNTAsNyBAQAogY2hhcgkgICAqZGVmYXVsdF90YWJsZV9hY2Nlc3NfbWV0aG9kID0g REVGQVVMVF9UQUJMRV9BQ0NFU1NfTUVUSE9EOwogYm9vbAkJc3luY2hyb25pemVfc2Vxc2NhbnMg PSB0cnVlOwogCitzdGF0aWMgdm9pZCBkZWZhdWx0X3RhYmxlX21vZGlmeV9pbnNlcnRfZW5kX2Nh bGxiYWNrKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICogU2xvdCBmdW5jdGlvbnMuCkBAIC03NTYsMyArNzU5LDk1IEBAIHRhYmxlX2Jsb2NrX3Jl bGF0aW9uX2VzdGltYXRlX3NpemUoUmVsYXRpb24gcmVsLCBpbnQzMiAqYXR0cl93aWR0aHMsCiAJ ZWxzZQogCQkqYWxsdmlzZnJhYyA9IChkb3VibGUpIHJlbGFsbHZpc2libGUgLyBjdXJwYWdlczsK IH0KKworLyoKKyAqIEluaXRpYWxpemUgZGVmYXVsdCB0YWJsZSBtb2RpZnkgc3RhdGUuCisgKi8K K1RhYmxlTW9kaWZ5U3RhdGUgKgorZGVmYXVsdF90YWJsZV9tb2RpZnlfYmVnaW4oUmVsYXRpb24g cmVsLCBpbnQgbW9kaWZ5X2ZsYWdzLAorCQkJCQkJICAgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlv bnMsCisJCQkJCQkgICBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5X2J1ZmZl cl9mbHVzaF9jYWxsYmFjaywKKwkJCQkJCSAgIHZvaWQgKm1vZGlmeV9idWZmZXJfZmx1c2hfY29u dGV4dCkKK3sKKwlUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZTsKKwlNZW1vcnlDb250ZXh0IGNvbnRl eHQ7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJY29udGV4dCA9IEFsbG9jU2V0Q29u dGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSJkZWZhdWx0X3RhYmxl X21vZGlmeSBtZW1vcnkgY29udGV4dCIsCisJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVT KTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dCk7CisJc3Rh dGUgPSBwYWxsb2MwKHNpemVvZihUYWJsZU1vZGlmeVN0YXRlKSk7CisJc3RhdGUtPnJlbCA9IHJl bDsKKwlzdGF0ZS0+bW9kaWZ5X2ZsYWdzID0gbW9kaWZ5X2ZsYWdzOworCXN0YXRlLT5tZW1fY3h0 ID0gY29udGV4dDsKKwlzdGF0ZS0+Y2lkID0gY2lkOworCXN0YXRlLT5vcHRpb25zID0gb3B0aW9u czsKKwlzdGF0ZS0+bW9kaWZ5X2VuZF9jYWxsYmFjayA9IE5VTEw7CS8qIFRvIGJlIGluc3RhbGxl ZCBsYXppbHkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlyZXR1 cm4gc3RhdGU7Cit9CisKKy8qCisgKiBEZWZhdWx0IHRhYmxlIG1vZGlmeSBpbXBsZW1lbnRhdGlv biBmb3IgaW5zZXJ0cy4KKyAqLwordm9pZAorZGVmYXVsdF90YWJsZV9tb2RpZnlfYnVmZmVyX2lu c2VydChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+bWVtX2N4dCk7CisKKwkvKiBGaXJzdCB0aW1lIHRo cm91Z2gsIGluaXRpYWxpemUgZGVmYXVsdCB0YWJsZSBtb2RpZnkgc3RhdGUgKi8KKwlpZiAoc3Rh dGUtPmRhdGEgPT0gTlVMTCkKKwl7CisJCWlmICgoc3RhdGUtPm1vZGlmeV9mbGFncyAmIFRNX0ZM QUdfQkFTX0JVTEtXUklURSkgIT0gMCkKKwkJCXN0YXRlLT5kYXRhID0gKEJ1bGtJbnNlcnRTdGF0 ZSkgR2V0QnVsa0luc2VydFN0YXRlKCk7CisKKwkJc3RhdGUtPm1vZGlmeV9lbmRfY2FsbGJhY2sg PSBkZWZhdWx0X3RhYmxlX21vZGlmeV9pbnNlcnRfZW5kX2NhbGxiYWNrOworCX0KKworCS8qIEZh bGxiYWNrIHRvIHRhYmxlIEFNIHNpbmdsZSBpbnNlcnQgcm91dGluZSAqLworCXRhYmxlX3R1cGxl X2luc2VydChzdGF0ZS0+cmVsLAorCQkJCQkgICBzbG90LAorCQkJCQkgICBzdGF0ZS0+Y2lkLAor CQkJCQkgICBzdGF0ZS0+b3B0aW9ucywKKwkJCQkJICAgKEJ1bGtJbnNlcnRTdGF0ZSkgc3RhdGUt PmRhdGEpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCisvKgor ICogRGVmYXVsdCB0YWJsZSBtb2RpZnkgaW1wbGVtZW50YXRpb24gZm9yIGZsdXNoLgorICovCit2 b2lkCitkZWZhdWx0X3RhYmxlX21vZGlmeV9idWZmZXJfZmx1c2goVGFibGVNb2RpZnlTdGF0ZSAq c3RhdGUpCit7CisJLyogbm8tb3AgKi8KK30KKworLyoKKyAqIERlZmF1bHQgdGFibGUgbW9kaWZ5 IGluc2VydCBzcGVjaWZpYyBjYWxsYmFjayB1c2VkIGZvciBwZXJmb3JtaW5nIHdvcmsgYXQKKyAq IHRoZSBlbmQgbGlrZSBjbGVhbmluZyB1cCB0aGUgYnVsayBpbnNlcnQgc3RhdGUuCisgKi8KK3N0 YXRpYyB2b2lkCitkZWZhdWx0X3RhYmxlX21vZGlmeV9pbnNlcnRfZW5kX2NhbGxiYWNrKFRhYmxl TW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCWlmIChzdGF0ZS0+ZGF0YSAhPSBOVUxMKQorCQlGcmVl QnVsa0luc2VydFN0YXRlKChCdWxrSW5zZXJ0U3RhdGUpIHN0YXRlLT5kYXRhKTsKK30KKworLyoK KyAqIENsZWFuIGRlZmF1bHQgdGFibGUgbW9kaWZ5IHN0YXRlLgorICovCit2b2lkCitkZWZhdWx0 X3RhYmxlX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRl LT5tb2RpZnlfZW5kX2NhbGxiYWNrICE9IE5VTEwpCisJCXN0YXRlLT5tb2RpZnlfZW5kX2NhbGxi YWNrKHN0YXRlKTsKKworCU1lbW9yeUNvbnRleHREZWxldGUoc3RhdGUtPm1lbV9jeHQpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKaW5kZXggY2U2MzdhNWE1ZC4uOTZhYzk1 MWFmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCkBAIC05Nyw2ICs5Nywx NiBAQCBHZXRUYWJsZUFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5z Y2FuX3NhbXBsZV9uZXh0X2Jsb2NrICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5zY2FuX3Nh bXBsZV9uZXh0X3R1cGxlICE9IE5VTEwpOwogCisJLyogb3B0aW9uYWwsIGJ1dCBlaXRoZXIgYWxs IG9mIHRoZW0gYXJlIGRlZmluZWQgb3Igbm9uZS4gKi8KKwlBc3NlcnQoKHJvdXRpbmUtPnR1cGxl X21vZGlmeV9iZWdpbiA9PSBOVUxMICYmCisJCQlyb3V0aW5lLT50dXBsZV9tb2RpZnlfYnVmZmVy X2luc2VydCA9PSBOVUxMICYmCisJCQlyb3V0aW5lLT50dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNo ID09IE5VTEwgJiYKKwkJCXJvdXRpbmUtPnR1cGxlX21vZGlmeV9lbmQgPT0gTlVMTCkgfHwKKwkJ ICAgKHJvdXRpbmUtPnR1cGxlX21vZGlmeV9iZWdpbiAhPSBOVUxMICYmCisJCQlyb3V0aW5lLT50 dXBsZV9tb2RpZnlfYnVmZmVyX2luc2VydCAhPSBOVUxMICYmCisJCQlyb3V0aW5lLT50dXBsZV9t b2RpZnlfYnVmZmVyX2ZsdXNoICE9IE5VTEwgJiYKKwkJCXJvdXRpbmUtPnR1cGxlX21vZGlmeV9l bmQgIT0gTlVMTCkpOworCiAJcmV0dXJuIHJvdXRpbmU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRl eCBjNDdhNTA0NWNlLi5jMTBlYmJiNWVhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0yNzEsNiArMjcx LDM4IEBAIHR5cGVkZWYgZW51bQogCVBSVU5FX1ZBQ1VVTV9DTEVBTlVQLAkJLyogVkFDVVVNIDJu ZCBoZWFwIHBhc3MgKi8KIH0gUHJ1bmVSZWFzb247CiAKKy8qCisgKiBNYXhpbXVtIG51bWJlciBv ZiBzbG90cyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBob2xkLgorICoKKyAqIENhdXRp b246IERvbid0IG1ha2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGlz IG1hbnkgdHVwbGVzCisgKiBzdG9yZWQgaW4gbXVsdGkgaW5zZXJ0IGJ1ZmZlci4KKyAqLworI2Rl ZmluZSBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUwkJMTAwMAorCisvKiBNYXhpbXVtIHNpemUgb2Yg YWxsIHR1cGxlcyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBob2xkICovCisjZGVmaW5l IEhFQVBfTUFYX0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCit0eXBlZGVmIHN0cnVjdCBIZWFwTXVs dGlJbnNlcnRTdGF0ZQoreworCS8qIEFycmF5IG9mIGJ1ZmZlcmVkIHNsb3RzICovCisJVHVwbGVU YWJsZVNsb3QgKipzbG90czsKKworCS8qIE51bWJlciBvZiBidWZmZXJlZCBzbG90cyBjdXJyZW50 bHkgaGVsZCAqLworCWludAkJCWN1cl9zbG90czsKKworCS8qIEFwcHJveGltYXRlIHNpemUgb2Yg YWxsIHR1cGxlcyBjdXJyZW50bHkgaGVsZCBpbiBidWZmZXJlZCBzbG90cyAqLworCVNpemUJCWN1 cl9zaXplOworCisJTWVtb3J5Q29udGV4dCBtZW1fY3h0OworfSBIZWFwTXVsdGlJbnNlcnRTdGF0 ZTsKKwordHlwZWRlZiBzdHJ1Y3QgSGVhcEluc2VydFN0YXRlCit7CisJc3RydWN0IEJ1bGtJbnNl cnRTdGF0ZURhdGEgKmJpc3RhdGU7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7Cit9 IEhlYXBJbnNlcnRTdGF0ZTsKKworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJZnVuY3Rpb24g cHJvdG90eXBlcyBmb3IgaGVhcCBhY2Nlc3MgbWV0aG9kCiAgKgpAQCAtMzIxLDYgKzM1MywxOCBA QCBleHRlcm4gdm9pZCBoZWFwX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1 cCwgQ29tbWFuZElkIGNpZCwKIGV4dGVybiB2b2lkIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9u IHJlbGF0aW9uLCBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKipzbG90cywKIAkJCQkJCQkgIGludCBu dHVwbGVzLCBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywKIAkJCQkJCQkgIEJ1bGtJbnNlcnRT dGF0ZSBiaXN0YXRlKTsKKworZXh0ZXJuIFRhYmxlTW9kaWZ5U3RhdGUgKmhlYXBfbW9kaWZ5X2Jl Z2luKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkgICBpbnQgbW9kaWZ5X2ZsYWdzLAorCQkJCQkJ CQkJCSAgIENvbW1hbmRJZCBjaWQsCisJCQkJCQkJCQkJICAgaW50IG9wdGlvbnMsCisJCQkJCQkJ CQkJICAgVGFibGVNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrIG1vZGlmeV9idWZmZXJfZmx1c2hf Y2FsbGJhY2ssCisJCQkJCQkJCQkJICAgdm9pZCAqbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0 KTsKK2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0 ZSAqc3RhdGUsCisJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiB2b2lk IGhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7CitleHRl cm4gdm9pZCBoZWFwX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOworCiBleHRl cm4gVE1fUmVzdWx0IGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0 aWQsCiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2Fp dCwKIAkJCQkJCQkgc3RydWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFy dCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCA4ZTU4M2I0NWNkLi5kZGI2ZTZmM2E1IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmgKQEAgLTI1NSw2ICsyNTUsNDMgQEAgdHlwZWRlZiBzdHJ1Y3QgVE1fSW5kZXhE ZWxldGVPcAogCVRNX0luZGV4U3RhdHVzICpzdGF0dXM7CiB9IFRNX0luZGV4RGVsZXRlT3A7CiAK Ky8qIFRhYmxlIG1vZGlmeSBmbGFncyAqLworCisvKiBVc2UgbXVsdGkgaW5zZXJ0cywgaS5lLiBi dWZmZXIgbXVsdGlwbGUgdHVwbGVzIGFuZCBpbnNlcnQgdGhlbSBhdCBvbmNlICovCisjZGVmaW5l IFRNX0ZMQUdfTVVMVElfSU5TRVJUUwkweDAwMDAwMQorCisvKiBVc2UgQkFTX0JVTEtXUklURSBi dWZmZXIgYWNjZXNzIHN0cmF0ZWd5ICovCisjZGVmaW5lIFRNX0ZMQUdfQkFTX0JVTEtXUklURQkw eDAwMDAwMgorCitzdHJ1Y3QgVGFibGVNb2RpZnlTdGF0ZTsKKworLyogQ2FsbGJhY2sgaW52b2tl ZCBmb3IgZWFjaCB0dXBsZSB0aGF0IGdldHMgZmx1c2hlZCB0byBkaXNrIGZyb20gYnVmZmVyICov Cit0eXBlZGVmIHZvaWQgKCpUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2spICh2b2lkICpj b250ZXh0LAorCQkJCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKipzbG90cywKKwkJCQkJCQkJCQkJ CWludCBuc2xvdHMpOworCisvKiBUYWJsZSBBTSBzcGVjaWZpYyBjYWxsYmFjayB0aGF0IGdldHMg Y2FsbGVkIGluIHRhYmxlX21vZGlmeV9lbmQoKSAqLwordHlwZWRlZiB2b2lkICgqVGFibGVNb2Rp ZnlFbmRDYWxsYmFjaykgKHN0cnVjdCBUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7CisKKy8qIEhv bGRzIHRhYmxlIG1vZGlmeSBzdGF0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVNb2RpZnlTdGF0 ZQoreworCVJlbGF0aW9uCXJlbDsKKwlpbnQJCQltb2RpZnlfZmxhZ3M7CisJTWVtb3J5Q29udGV4 dCBtZW1fY3h0OworCUNvbW1hbmRJZAljaWQ7CisJaW50CQkJb3B0aW9uczsKKworCS8qIEZsdXNo IGNhbGxiYWNrIGFuZCBpdHMgY29udGV4dCAqLworCVRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYWxs YmFjayBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxiYWNrOworCXZvaWQJICAgKm1vZGlmeV9idWZm ZXJfZmx1c2hfY29udGV4dDsKKworCS8qIFRhYmxlIEFNIHNwZWNpZmljIGRhdGEgKi8KKwl2b2lk CSAgICpkYXRhOworCisJVGFibGVNb2RpZnlFbmRDYWxsYmFjayBtb2RpZnlfZW5kX2NhbGxiYWNr OworfSBUYWJsZU1vZGlmeVN0YXRlOworCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0YWJs ZV90dXBsZV9pbnNlcnQgKi8KIC8qIFRBQkxFX0lOU0VSVF9TS0lQX1dBTCB3YXMgMHgwMDAxOyBS ZWxhdGlvbk5lZWRzV0FMKCkgbm93IGdvdmVybnMgKi8KICNkZWZpbmUgVEFCTEVfSU5TRVJUX1NL SVBfRlNNCQkweDAwMDIKQEAgLTU3OCw2ICs2MTUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVB bVJvdXRpbmUKIAl2b2lkCQkoKmZpbmlzaF9idWxrX2luc2VydCkgKFJlbGF0aW9uIHJlbCwgaW50 IG9wdGlvbnMpOwogCiAKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBUYWJsZSBNb2RpZnkgcmVs YXRlZCBmdW5jdGlvbnMuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisJVGFibGVNb2RpZnlT dGF0ZSAqKCp0dXBsZV9tb2RpZnlfYmVnaW4pIChSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCSBp bnQgbW9kaWZ5X2ZsYWdzLAorCQkJCQkJCQkJCQkgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkJ IGludCBvcHRpb25zLAorCQkJCQkJCQkJCQkgVGFibGVNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNr IG1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2ssCisJCQkJCQkJCQkJCSB2b2lkICptb2RpZnlf YnVmZmVyX2ZsdXNoX2NvbnRleHQpOworCXZvaWQJCSgqdHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNl cnQpIChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNs b3QgKnNsb3QpOworCXZvaWQJCSgqdHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaCkgKFRhYmxlTW9k aWZ5U3RhdGUgKnN0YXRlKTsKKwl2b2lkCQkoKnR1cGxlX21vZGlmeV9lbmQpIChUYWJsZU1vZGlm eVN0YXRlICpzdGF0ZSk7CisKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBEREwgcmVsYXRlZCBm dW5jdGlvbmFsaXR5LgogCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTYwOSw2ICsxNjYxLDEwMCBA QCB0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQoUmVsYXRpb24gcmVsLCBpbnQgb3B0aW9ucykKIAkJ cmVsLT5yZF90YWJsZWFtLT5maW5pc2hfYnVsa19pbnNlcnQocmVsLCBvcHRpb25zKTsKIH0KIAor LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUYWJsZSBNb2RpZnkgcmVsYXRlZCBmdW5jdGlvbnMuCisg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworZXh0ZXJuIFRhYmxlTW9kaWZ5U3RhdGUgKmRlZmF1bHRf dGFibGVfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwgaW50IG1vZGlmeV9mbGFncywKKwkJCQkJ CQkJCQkJCQlDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywKKwkJCQkJCQkJCQkJCQlUYWJsZU1v ZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jYWxsYmFjaywKKwkJ CQkJCQkJCQkJCQl2b2lkICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOworZXh0ZXJuIHZv aWQgZGVmYXVsdF90YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1vZGlmeVN0YXRlICpz dGF0ZSwKKwkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIHZvaWQg ZGVmYXVsdF90YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRl KTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfdGFibGVfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRl ICpzdGF0ZSk7CisKK3N0YXRpYyBpbmxpbmUgVGFibGVNb2RpZnlTdGF0ZSAqCit0YWJsZV9tb2Rp ZnlfYmVnaW4oUmVsYXRpb24gcmVsLCBpbnQgbW9kaWZ5X2ZsYWdzLCBDb21tYW5kSWQgY2lkLCBp bnQgb3B0aW9ucywKKwkJCQkgICBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5 X2J1ZmZlcl9mbHVzaF9jYWxsYmFjaywKKwkJCQkgICB2b2lkICptb2RpZnlfYnVmZmVyX2ZsdXNo X2NvbnRleHQpCit7CisJaWYgKHJlbC0+cmRfdGFibGVhbSAmJgorCQlyZWwtPnJkX3RhYmxlYW0t PnR1cGxlX21vZGlmeV9iZWdpbiAhPSBOVUxMKQorCXsKKwkJcmV0dXJuIHJlbC0+cmRfdGFibGVh bS0+dHVwbGVfbW9kaWZ5X2JlZ2luKHJlbCwgbW9kaWZ5X2ZsYWdzLAorCQkJCQkJCQkJCQkJICAg Y2lkLCBvcHRpb25zLAorCQkJCQkJCQkJCQkJICAgbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jYWxsYmFj aywKKwkJCQkJCQkJCQkJCSAgIG1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCk7CisJfQorCWVs c2UgaWYgKHJlbC0+cmRfdGFibGVhbSAmJgorCQkJIHJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9k aWZ5X2JlZ2luID09IE5VTEwpCisJeworCQkvKiBGYWxsYmFjayB0byBhIGRlZmF1bHQgaW1wbGVt ZW50YXRpb24gKi8KKwkJcmV0dXJuIGRlZmF1bHRfdGFibGVfbW9kaWZ5X2JlZ2luKHJlbCwgbW9k aWZ5X2ZsYWdzLAorCQkJCQkJCQkJCSAgY2lkLCBvcHRpb25zLAorCQkJCQkJCQkJCSAgbW9kaWZ5 X2J1ZmZlcl9mbHVzaF9jYWxsYmFjaywKKwkJCQkJCQkJCQkgIG1vZGlmeV9idWZmZXJfZmx1c2hf Y29udGV4dCk7CisJfQorCWVsc2UKKwkJQXNzZXJ0KGZhbHNlKTsKKworCXJldHVybiBOVUxMOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KFRhYmxl TW9kaWZ5U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlpZiAoc3RhdGUt PnJlbC0+cmRfdGFibGVhbSAmJgorCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2Rp ZnlfYnVmZmVyX2luc2VydCAhPSBOVUxMKQorCXsKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+ dHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoc3RhdGUsIHNsb3QpOworCX0KKwllbHNlIGlmIChz dGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCQkgc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVw bGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQgPT0gTlVMTCkKKwl7CisJCS8qIEZhbGxiYWNrIHRvIGEg ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLworCQlkZWZhdWx0X3RhYmxlX21vZGlmeV9idWZmZXJf aW5zZXJ0KHN0YXRlLCBzbG90KTsKKwl9CisJZWxzZQorCQlBc3NlcnQoZmFsc2UpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9idWZmZXJfZmx1c2goVGFibGVNb2RpZnlT dGF0ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJc3RhdGUt PnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaCAhPSBOVUxMKQorCXsK KwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaChzdGF0 ZSk7CisJfQorCWVsc2UgaWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJCSBzdGF0ZS0+ cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoID09IE5VTEwpCisJewor CQkvKiBGYWxsYmFjayB0byBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gKi8KKwkJZGVmYXVsdF90 YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsKKwl9CisJZWxzZQorCQlBc3NlcnQoZmFs c2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9lbmQoVGFibGVNb2Rp ZnlTdGF0ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJc3Rh dGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2VuZCAhPSBOVUxMKQorCXsKKwkJc3Rh dGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2VuZChzdGF0ZSk7CisJfQorCWVsc2Ug aWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJCSBzdGF0ZS0+cmVsLT5yZF90YWJsZWFt LT50dXBsZV9tb2RpZnlfZW5kID09IE5VTEwpCisJeworCQkvKiBGYWxsYmFjayB0byBhIGRlZmF1 bHQgaW1wbGVtZW50YXRpb24gKi8KKwkJZGVmYXVsdF90YWJsZV9tb2RpZnlfZW5kKHN0YXRlKTsK Kwl9CisJZWxzZQorCQlBc3NlcnQoZmFsc2UpOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq IERETCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IGQ1NTFhZGEzMjUuLmViZGUwN2JjZGUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0x MTMwLDYgKzExMzAsOCBAQCBIZWFkbGluZUpzb25TdGF0ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBI ZWFkbGluZVdvcmRFbnRyeQogSGVhcENoZWNrQ29udGV4dAorSGVhcEluc2VydFN0YXRlCitIZWFw TXVsdGlJbnNlcnRTdGF0ZQogSGVhcFBhZ2VGcmVlemUKIEhlYXBTY2FuRGVzYwogSGVhcFR1cGxl CkBAIC0yODQ0LDYgKzI4NDYsNyBAQCBUYWJsZUZ1bmNTY2FuU3RhdGUKIFRhYmxlRnVuY1R5cGUK IFRhYmxlSW5mbwogVGFibGVMaWtlQ2xhdXNlCitUYWJsZU1vZGlmeVN0YXRlCiBUYWJsZVNhbXBs ZUNsYXVzZQogVGFibGVTY2FuRGVzYwogVGFibGVTY2FuRGVzY0RhdGEKLS0gCjIuMzQuMQoK --0000000000006c82be0616d71b4b Content-Type: application/x-patch; name="v19-0002-Optimize-CTAS-CMV-RMV-and-TABLE-REWRITES-with-mu.patch" Content-Disposition: attachment; filename="v19-0002-Optimize-CTAS-CMV-RMV-and-TABLE-REWRITES-with-mu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvdriuip1 RnJvbSA1YTZkZDdhYzBjYWU4MzFmYmQ4Mjk0NzEwOTk3ZGQ0ODRjMDg5ZmNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjMgQXByIDIwMjQgMDQ6MTI6NTggKzAw MDAKU3ViamVjdDogW1BBVENIIHYxOSAyLzZdIE9wdGltaXplIENUQVMsIENNViwgUk1WIGFuZCBU QUJMRSBSRVdSSVRFUyB3aXRoIG11bHRpCiBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NyZWF0ZWFzLmMgIHwgMjcgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgICB8IDI2ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t CiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyB8IDMxICsrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNTEgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggNjIwNTBmNGRjNS4uMmQ2ZmZm YmYwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC01Myw5ICs1Myw3IEBAIHR5cGVkZWYg c3RydWN0CiAJLyogVGhlc2UgZmllbGRzIGFyZSBmaWxsZWQgYnkgaW50b3JlbF9zdGFydHVwOiAq LwogCVJlbGF0aW9uCXJlbDsJCQkvKiByZWxhdGlvbiB0byB3cml0ZSB0byAqLwogCU9iamVjdEFk ZHJlc3MgcmVsYWRkcjsJCS8qIGFkZHJlc3Mgb2YgcmVsLCBmb3IgRXhlY0NyZWF0ZVRhYmxlQXMg Ki8KLQlDb21tYW5kSWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0 dXBsZXMgKi8KLQlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZv cm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNl cnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICptc3RhdGU7CS8qIHRhYmxlIGluc2VydCBz dGF0ZSAqLwogfSBEUl9pbnRvcmVsOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgQ1RBUyBk ZWZpbml0aW9uIGNyZWF0aW9uICovCkBAIC01NTIsMTcgKzU1MCwyMSBAQCBpbnRvcmVsX3N0YXJ0 dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8p CiAJICovCiAJbXlTdGF0ZS0+cmVsID0gaW50b1JlbGF0aW9uRGVzYzsKIAlteVN0YXRlLT5yZWxh ZGRyID0gaW50b1JlbGF0aW9uQWRkcjsKLQlteVN0YXRlLT5vdXRwdXRfY2lkID0gR2V0Q3VycmVu dENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NL SVBfRlNNOwogCiAJLyoKIAkgKiBJZiBXSVRIIE5PIERBVEEgaXMgc3BlY2lmaWVkLCB0aGVyZSBp cyBubyBuZWVkIHRvIHNldCB1cCB0aGUgc3RhdGUgZm9yCiAJICogYnVsayBpbnNlcnRzIGFzIHRo ZXJlIGFyZSBubyB0dXBsZXMgdG8gaW5zZXJ0LgogCSAqLwogCWlmICghaW50by0+c2tpcERhdGEp Ci0JCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwkJbXlTdGF0ZS0+ bXN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKGludG9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJ CSBUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJCQkgVE1fRkxBR19CQVNfQlVMS1dS SVRFLAorCQkJCQkJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCQkJ IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSwKKwkJCQkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCQkJCSBO VUxMKTsKIAllbHNlCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT5tc3Rh dGUgPSBOVUxMOwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0 aGluZyBhbHJlYWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTU5MCwxMSArNTkyLDcgQEAg aW50b3JlbF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIgKnNlbGYp CiAJCSAqIHdvdWxkIG5vdCBiZSBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFsbG93 IGFjY2Vzc2luZyBwZXItQU0KIAkJICogZGF0YSAoc2F5IGEgdHVwbGUncyB4bWluKSwgYnV0IHNp bmNlIHdlIGRvbid0IGRvIHRoYXQgaGVyZS4uLgogCQkgKi8KLQkJdGFibGVfdHVwbGVfaW5zZXJ0 KG15U3RhdGUtPnJlbCwKLQkJCQkJCSAgIHNsb3QsCi0JCQkJCQkgICBteVN0YXRlLT5vdXRwdXRf Y2lkLAotCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJCSAgIG15U3RhdGUtPmJp c3RhdGUpOworCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChteVN0YXRlLT5tc3RhdGUsIHNs b3QpOwogCX0KIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24s IHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCkBAIC02MTIsMTAgKzYxMCw3IEBAIGludG9yZWxf c2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogCUludG9DbGF1c2UgKmludG8gPSBteVN0YXRl LT5pbnRvOwogCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3Rh dGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0JCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRl LT5yZWwsIG15U3RhdGUtPnRpX29wdGlvbnMpOwotCX0KKwkJdGFibGVfbW9kaWZ5X2VuZChteVN0 YXRlLT5tc3RhdGUpOwogCiAJLyogY2xvc2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1p dCAqLwogCXRhYmxlX2Nsb3NlKG15U3RhdGUtPnJlbCwgTm9Mb2NrKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYwppbmRleCA2ZDA5Yjc1NTU2Li5iYjk3ZTJmYTVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9tYXR2aWV3LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5j CkBAIC00OCw5ICs0OCw3IEBAIHR5cGVkZWYgc3RydWN0CiAJT2lkCQkJdHJhbnNpZW50b2lkOwkv KiBPSUQgb2YgbmV3IGhlYXAgaW50byB3aGljaCB0byBzdG9yZSAqLwogCS8qIFRoZXNlIGZpZWxk cyBhcmUgZmlsbGVkIGJ5IHRyYW5zaWVudHJlbF9zdGFydHVwOiAqLwogCVJlbGF0aW9uCXRyYW5z aWVudHJlbDsJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KLQlDb21tYW5kSWQJb3V0cHV0X2Np ZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KLQlpbnQJCQl0aV9vcHRp b25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxr SW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlm eVN0YXRlICptc3RhdGU7CS8qIHRhYmxlIGluc2VydCBzdGF0ZSAqLwogfSBEUl90cmFuc2llbnRy ZWw7CiAKIHN0YXRpYyBpbnQJbWF0dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00NTgs OSArNDU2LDE0IEBAIHRyYW5zaWVudHJlbF9zdGFydHVwKERlc3RSZWNlaXZlciAqc2VsZiwgaW50 IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCSAqIEZpbGwgcHJpdmF0ZSBmaWVsZHMg b2YgbXlTdGF0ZSBmb3IgdXNlIGJ5IGxhdGVyIHJvdXRpbmVzCiAJICovCiAJbXlTdGF0ZS0+dHJh bnNpZW50cmVsID0gdHJhbnNpZW50cmVsOwotCW15U3RhdGUtPm91dHB1dF9jaWQgPSBHZXRDdXJy ZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJMRV9JTlNFUlRf U0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOOwotCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRC dWxrSW5zZXJ0U3RhdGUoKTsKKwlteVN0YXRlLT5tc3RhdGUgPSB0YWJsZV9tb2RpZnlfYmVnaW4o dHJhbnNpZW50cmVsLAorCQkJCQkJCQkJCSBUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJ CQkJCSBUTV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJIEdldEN1cnJlbnRDb21tYW5k SWQodHJ1ZSksCisJCQkJCQkJCQkJIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSB8CisJCQkJCQkJCQkJ IFRBQkxFX0lOU0VSVF9GUk9aRU4sCisJCQkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCQkJIE5VTEwp OwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0aGluZyBhbHJl YWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTQ4NSwxMiArNDg4LDcgQEAgdHJhbnNpZW50 cmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKIAkg KiBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFsbG93IGFjY2Vzc2luZyBwZXItQU0g ZGF0YSAoc2F5IGEKIAkgKiB0dXBsZSdzIHhtaW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhh dCBoZXJlLi4uCiAJICovCi0KLQl0YWJsZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50 cmVsLAotCQkJCQkgICBzbG90LAotCQkJCQkgICBteVN0YXRlLT5vdXRwdXRfY2lkLAotCQkJCQkg ICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkgICBteVN0YXRlLT5iaXN0YXRlKTsKKwl0YWJs ZV9tb2RpZnlfYnVmZmVyX2luc2VydChteVN0YXRlLT5tc3RhdGUsIHNsb3QpOwogCiAJLyogV2Ug a25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlvbiwgc28gdGhlcmUgYXJlIG5vIGlu ZGV4ZXMgKi8KIApAQCAtNTA1LDkgKzUwMyw3IEBAIHRyYW5zaWVudHJlbF9zaHV0ZG93bihEZXN0 UmVjZWl2ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNpZW50cmVsICpteVN0YXRlID0gKERSX3RyYW5z aWVudHJlbCAqKSBzZWxmOwogCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0YXRlLT5iaXN0YXRl KTsKLQotCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT50cmFuc2llbnRyZWwsIG15 U3RhdGUtPnRpX29wdGlvbnMpOworCXRhYmxlX21vZGlmeV9lbmQobXlTdGF0ZS0+bXN0YXRlKTsK IAogCS8qIGNsb3NlIHRyYW5zaWVudHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQgKi8K IAl0YWJsZV9jbG9zZShteVN0YXRlLT50cmFuc2llbnRyZWwsIE5vTG9jayk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCmluZGV4IDM1NTYyNDBjOGUuLjBjOTg0YWE2NTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCkBAIC02MDYwLDEwICs2MDYwLDggQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJl ZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCwgTE9DS01PREUgbG9ja21vZGUpCiAJaW50 CQkJaTsKIAlMaXN0Q2VsbCAgICpsOwogCUVTdGF0ZQkgICAqZXN0YXRlOwotCUNvbW1hbmRJZAlt eWNpZDsKLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsKLQlpbnQJCQl0aV9vcHRpb25zOwogCUV4 cHJTdGF0ZSAgKnBhcnRxdWFsc3RhdGUgPSBOVUxMOworCVRhYmxlTW9kaWZ5U3RhdGUgKm1zdGF0 ZSA9IE5VTEw7CiAKIAkvKgogCSAqIE9wZW4gdGhlIHJlbGF0aW9uKHMpLiAgV2UgaGF2ZSBzdXJl bHkgYWxyZWFkeSBsb2NrZWQgdGhlIGV4aXN0aW5nCkBAIC02MDgyLDE4ICs2MDgwLDE1IEBAIEFU UmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgT2lkIE9JRE5ld0hlYXAsIExPQ0tN T0RFIGxvY2ttb2RlKQogCSAqIFByZXBhcmUgYSBCdWxrSW5zZXJ0U3RhdGUgYW5kIG9wdGlvbnMg Zm9yIHRhYmxlX3R1cGxlX2luc2VydC4gIFRoZSBGU00KIAkgKiBpcyBlbXB0eSwgc28gZG9uJ3Qg Ym90aGVyIHVzaW5nIGl0LgogCSAqLwotCWlmIChuZXdyZWwpCisJaWYgKG5ld3JlbCAmJiBtc3Rh dGUgPT0gTlVMTCkKIAl7Ci0JCW15Y2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQkJ YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOwotCQl0aV9vcHRpb25zID0gVEFCTEVfSU5T RVJUX1NLSVBfRlNNOwotCX0KLQllbHNlCi0JewotCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0IGFi b3V0IHVzaW5nIHRoZXNlIHVuaW5pdGlhbGl6ZWQgKi8KLQkJbXljaWQgPSAwOwotCQliaXN0YXRl ID0gTlVMTDsKLQkJdGlfb3B0aW9ucyA9IDA7CisJCW1zdGF0ZSA9IHRhYmxlX21vZGlmeV9iZWdp bihuZXdyZWwsCisJCQkJCQkJCQlUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJVE1f RkxBR19CQVNfQlVMS1dSSVRFLAorCQkJCQkJCQkJR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwK KwkJCQkJCQkJCVRBQkxFX0lOU0VSVF9TS0lQX0ZTTSwKKwkJCQkJCQkJCU5VTEwsCisJCQkJCQkJ CQlOVUxMKTsKIAl9CiAKIAkvKgpAQCAtNjM5Miw4ICs2Mzg3LDcgQEAgQVRSZXdyaXRlVGFibGUo QWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCwgTE9DS01PREUgbG9ja21vZGUp CiAKIAkJCS8qIFdyaXRlIHRoZSB0dXBsZSBvdXQgdG8gdGhlIG5ldyByZWxhdGlvbiAqLwogCQkJ aWYgKG5ld3JlbCkKLQkJCQl0YWJsZV90dXBsZV9pbnNlcnQobmV3cmVsLCBpbnNlcnRzbG90LCBt eWNpZCwKLQkJCQkJCQkJICAgdGlfb3B0aW9ucywgYmlzdGF0ZSk7CisJCQkJdGFibGVfbW9kaWZ5 X2J1ZmZlcl9pbnNlcnQobXN0YXRlLCBpbnNlcnRzbG90KTsKIAogCQkJUmVzZXRFeHByQ29udGV4 dChlY29udGV4dCk7CiAKQEAgLTY0MTQsMTAgKzY0MDgsNyBAQCBBVFJld3JpdGVUYWJsZShBbHRl cmVkVGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAl0 YWJsZV9jbG9zZShvbGRyZWwsIE5vTG9jayk7CiAJaWYgKG5ld3JlbCkKIAl7Ci0JCUZyZWVCdWxr SW5zZXJ0U3RhdGUoYmlzdGF0ZSk7Ci0KLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG5ld3Jl bCwgdGlfb3B0aW9ucyk7Ci0KKwkJdGFibGVfbW9kaWZ5X2VuZChtc3RhdGUpOwogCQl0YWJsZV9j bG9zZShuZXdyZWwsIE5vTG9jayk7CiAJfQogfQotLSAKMi4zNC4xCgo= --0000000000006c82be0616d71b4b Content-Type: application/x-patch; name="v19-0003-Optimize-INSERT-INTO-.-SELECT-with-multi-inserts.patch" Content-Disposition: attachment; filename="v19-0003-Optimize-INSERT-INTO-.-SELECT-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvdrix672 RnJvbSBkM2YwYzY0ZTg1NDE3ZTZmY2YxNjQ2NTY0ODFlYTgwNzMyYjliZDg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjMgQXByIDIwMjQgMDQ6MTU6NDkgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxOSAzLzZdIE9wdGltaXplIElOU0VSVCBJTlRPIC4uLiBTRUxF Q1Qgd2l0aCBtdWx0aSBpbnNlcnRzCgotLS0KIGNvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3Rl ZC9zdHJlYW0ub3V0IHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFi bGUuYyAgICB8IDE3NyArKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCAgICAgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDE2MSBpbnNl cnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVj b2RpbmcvZXhwZWN0ZWQvc3RyZWFtLm91dCBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3Rl ZC9zdHJlYW0ub3V0CmluZGV4IDRhYjJkNDdiZjguLmMxOWZhY2IzYzkgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9zdHJlYW0ub3V0CisrKyBiL2NvbnRyaWIvdGVz dF9kZWNvZGluZy9leHBlY3RlZC9zdHJlYW0ub3V0CkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBTRUxF Q1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVzc2lvbl9zbG90 JywgTlVMTCxOVUxMLCAnaW5jbAogIHN0cmVhbWluZyBjaGFuZ2UgZm9yIHRyYW5zYWN0aW9uCiAg c3RyZWFtaW5nIGNoYW5nZSBmb3IgdHJhbnNhY3Rpb24KICBzdHJlYW1pbmcgY2hhbmdlIGZvciB0 cmFuc2FjdGlvbgotIHN0cmVhbWluZyBjaGFuZ2UgZm9yIHRyYW5zYWN0aW9uCiAgY2xvc2luZyBh IHN0cmVhbWVkIGJsb2NrIGZvciB0cmFuc2FjdGlvbgogIG9wZW5pbmcgYSBzdHJlYW1lZCBibG9j ayBmb3IgdHJhbnNhY3Rpb24KICBzdHJlYW1pbmcgY2hhbmdlIGZvciB0cmFuc2FjdGlvbgorIHN0 cmVhbWluZyBjaGFuZ2UgZm9yIHRyYW5zYWN0aW9uCiAgY2xvc2luZyBhIHN0cmVhbWVkIGJsb2Nr IGZvciB0cmFuc2FjdGlvbgogIGNvbW1pdHRpbmcgc3RyZWFtZWQgdHJhbnNhY3Rpb24KICgxNyBy b3dzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCBjZWU2MGQzNjU5 Li40MzRlM2Y4NDExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5 VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAt MTE0LDYgKzExNCwxOSBAQCB0eXBlZGVmIHN0cnVjdCBVcGRhdGVDb250ZXh0CiAJTG9ja1R1cGxl TW9kZSBsb2NrbW9kZTsKIH0gVXBkYXRlQ29udGV4dDsKIAordHlwZWRlZiBzdHJ1Y3QgSW5zZXJ0 TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0Cit7CisJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bzsKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlOworfSBJ bnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQ7CisKK3N0YXRpYyBJbnNlcnRNb2RpZnlCdWZm ZXJGbHVzaENvbnRleHQgKmluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxM Oworc3RhdGljIFRhYmxlTW9kaWZ5U3RhdGUgKnRhYmxlX21vZGlmeV9zdGF0ZSA9IE5VTEw7CisK K3N0YXRpYyB2b2lkIEluc2VydE1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4 dCwKKwkJCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKipzbG90cywKKwkJCQkJCQkJCQkJaW50IG5z bG90cyk7CiAKIHN0YXRpYyB2b2lkIEV4ZWNCYXRjaEluc2VydChNb2RpZnlUYWJsZVN0YXRlICpt dHN0YXRlLAogCQkJCQkJCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCkBAIC03MjYsNiAr NzM5LDYxIEBAIEV4ZWNHZXRVcGRhdGVOZXdUdXBsZShSZXN1bHRSZWxJbmZvICpyZWxpbmZvLAog CXJldHVybiBFeGVjUHJvamVjdChuZXdQcm9qKTsKIH0KIAorc3RhdGljIHZvaWQKK0luc2VydE1v ZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4dCwgVHVwbGVUYWJsZVNsb3QgKipz bG90cywgaW50IG5zbG90cykKK3sKKwlJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKmN0 eCA9IChJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKikgY29udGV4dDsKKwlSZXN1bHRS ZWxJbmZvICpyZXN1bHRSZWxJbmZvID0gY3R4LT5yZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAq ZXN0YXRlID0gY3R4LT5lc3RhdGU7CisJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGN0eC0+ bXRzdGF0ZTsKKwlpbnQJCQlpOworCisJaWYgKG5zbG90cyA8PSAwKQorCQlyZXR1cm47CisKKwkv KiBRdWljayBleGl0IGlmIG5vIGluZGV4ZXMgb3Igbm8gdHJpZ2dlcnMgKi8KKwlpZiAoIShyZXN1 bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCB8fAorCQkgIChyZXN1bHRSZWxJbmZvLT5yaV9U cmlnRGVzYyAhPSBOVUxMICYmCisJCSAgIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJp Z19pbnNlcnRfYWZ0ZXJfcm93IHx8CisJCQlyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJp Z19pbnNlcnRfbmV3X3RhYmxlKSkpKQorCQlyZXR1cm47CisKKwkvKiBDYWxsZXIgbXVzdCB0YWtl IGNhcmUgb2Ygb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgaW5kaWNlcyAqLworCWZvciAoaSA9IDA7 IGkgPCBuc2xvdHM7IGkrKykKKwl7CisJCS8qCisJCSAqIElmIHRoZXJlIGFyZSBhbnkgaW5kZXhl cywgdXBkYXRlIHRoZW0gZm9yIGFsbCB0aGUgaW5zZXJ0ZWQgdHVwbGVzLAorCQkgKiBhbmQgcnVu IEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMuCisJCSAqLworCQlpZiAocmVzdWx0UmVsSW5mby0+ cmlfTnVtSW5kaWNlcyA+IDApCisJCXsKKwkJCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzOworCisJ CQlyZWNoZWNrSW5kZXhlcyA9CisJCQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbElu Zm8sCisJCQkJCQkJCQkgIHNsb3RzW2ldLCBlc3RhdGUsIGZhbHNlLAorCQkJCQkJCQkJICBmYWxz ZSwgTlVMTCwgTklMLCBmYWxzZSk7CisJCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJl c3VsdFJlbEluZm8sCisJCQkJCQkJCSBzbG90c1tpXSwgcmVjaGVja0luZGV4ZXMsCisJCQkJCQkJ CSBtdHN0YXRlLT5tdF90cmFuc2l0aW9uX2NhcHR1cmUpOworCQkJbGlzdF9mcmVlKHJlY2hlY2tJ bmRleGVzKTsKKwkJfQorCisJCS8qCisJCSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBp ZiB3ZSBuZWVkIHRvIHJ1biBBRlRFUiBST1cgSU5TRVJUCisJCSAqIHRyaWdnZXJzIGFueXdheS4K KwkJICovCisJCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYK KwkJCQkgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cg fHwKKwkJCQkgIHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9uZXdfdGFi bGUpKQorCQl7CisJCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8s CisJCQkJCQkJCSBzbG90c1tpXSwgTklMLAorCQkJCQkJCQkgbXRzdGF0ZS0+bXRfdHJhbnNpdGlv bl9jYXB0dXJlKTsKKwkJfQorCX0KK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNJbnNlcnQKICAq CkBAIC03NTEsNyArODE5LDggQEAgRXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRl eHQsCiAJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkgICBib29sIGNhblNldFRhZywKIAkJ ICAgVHVwbGVUYWJsZVNsb3QgKippbnNlcnRlZF90dXBsZSwKLQkJICAgUmVzdWx0UmVsSW5mbyAq Kmluc2VydF9kZXN0cmVsKQorCQkgICBSZXN1bHRSZWxJbmZvICoqaW5zZXJ0X2Rlc3RyZWwsCisJ CSAgIGJvb2wgY2FuTXVsdGlJbnNlcnQpCiB7CiAJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9 IGNvbnRleHQtPm10c3RhdGU7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBjb250ZXh0LT5lc3RhdGU7 CkBAIC03NjQsNiArODMzLDcgQEAgRXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRl eHQsCiAJT25Db25mbGljdEFjdGlvbiBvbmNvbmZsaWN0ID0gbm9kZS0+b25Db25mbGljdEFjdGlv bjsKIAlQYXJ0aXRpb25UdXBsZVJvdXRpbmcgKnByb3V0ZSA9IG10c3RhdGUtPm10X3BhcnRpdGlv bl90dXBsZV9yb3V0aW5nOwogCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsKKwlib29sCQlhcl9p bnNlcnRfdHJpZ2dlcnNfZXhlY3V0ZWQgPSBmYWxzZTsKIAogCS8qCiAJICogSWYgdGhlIGlucHV0 IHJlc3VsdCByZWxhdGlvbiBpcyBhIHBhcnRpdGlvbmVkIHRhYmxlLCBmaW5kIHRoZSBsZWFmCkBA IC0xMTI2LDE3ICsxMTk2LDUzIEBAIEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250 ZXh0LAogCQl9CiAJCWVsc2UKIAkJewotCQkJLyogaW5zZXJ0IHRoZSB0dXBsZSBub3JtYWxseSAq LwotCQkJdGFibGVfdHVwbGVfaW5zZXJ0KHJlc3VsdFJlbGF0aW9uRGVzYywgc2xvdCwKLQkJCQkJ CQkgICBlc3RhdGUtPmVzX291dHB1dF9jaWQsCi0JCQkJCQkJICAgMCwgTlVMTCk7CisJCQlpZiAo Y2FuTXVsdGlJbnNlcnQgJiYKKwkJCQlwcm91dGUgPT0gTlVMTCAmJgorCQkJCXJlc3VsdFJlbElu Zm8tPnJpX1dpdGhDaGVja09wdGlvbnMgPT0gTklMICYmCisJCQkJcmVzdWx0UmVsSW5mby0+cmlf cHJvamVjdFJldHVybmluZyA9PSBOVUxMKQorCQkJeworCQkJCWlmIChpbnNlcnRfbW9kaWZ5X2J1 ZmZlcl9mbHVzaF9jb250ZXh0ID09IE5VTEwpCisJCQkJeworCQkJCQlpbnNlcnRfbW9kaWZ5X2J1 ZmZlcl9mbHVzaF9jb250ZXh0ID0KKwkJCQkJCShJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRl eHQgKikgcGFsbG9jMChzaXplb2YoSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0KSk7CisJ CQkJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPnJlc3VsdFJlbEluZm8gPSBy ZXN1bHRSZWxJbmZvOworCQkJCQlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5l c3RhdGUgPSBlc3RhdGU7CisJCQkJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQt Pm10c3RhdGUgPSBtdHN0YXRlOworCQkJCX0KIAotCQkJLyogaW5zZXJ0IGluZGV4IGVudHJpZXMg Zm9yIHR1cGxlICovCi0JCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCi0J CQkJcmVjaGVja0luZGV4ZXMgPSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywK LQkJCQkJCQkJCQkJCQkgICBzbG90LCBlc3RhdGUsIGZhbHNlLAotCQkJCQkJCQkJCQkJCSAgIGZh bHNlLCBOVUxMLCBOSUwsCi0JCQkJCQkJCQkJCQkJICAgZmFsc2UpOworCQkJCWlmICh0YWJsZV9t b2RpZnlfc3RhdGUgPT0gTlVMTCkKKwkJCQl7CisJCQkJCXRhYmxlX21vZGlmeV9zdGF0ZSA9IHRh YmxlX21vZGlmeV9iZWdpbihyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CQkJCQkJCQlUTV9GTEFHX01VTFRJX0lOU0VSVFMsCisJCQkJCQkJCQkJCQkJCQllc3RhdGUtPmVz X291dHB1dF9jaWQsCisJCQkJCQkJCQkJCQkJCQkwLAorCQkJCQkJCQkJCQkJCQkJSW5zZXJ0TW9k aWZ5QnVmZmVyRmx1c2hDYWxsYmFjaywKKwkJCQkJCQkJCQkJCQkJCWluc2VydF9tb2RpZnlfYnVm ZmVyX2ZsdXNoX2NvbnRleHQpOworCQkJCX0KKworCQkJCXRhYmxlX21vZGlmeV9idWZmZXJfaW5z ZXJ0KHRhYmxlX21vZGlmeV9zdGF0ZSwgc2xvdCk7CisJCQkJYXJfaW5zZXJ0X3RyaWdnZXJzX2V4 ZWN1dGVkID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBpbnNlcnQgdGhlIHR1 cGxlIG5vcm1hbGx5ICovCisJCQkJdGFibGVfdHVwbGVfaW5zZXJ0KHJlc3VsdFJlbGF0aW9uRGVz Yywgc2xvdCwKKwkJCQkJCQkJICAgZXN0YXRlLT5lc19vdXRwdXRfY2lkLAorCQkJCQkJCQkgICAw LCBOVUxMKTsKKworCQkJCS8qIGluc2VydCBpbmRleCBlbnRyaWVzIGZvciB0dXBsZSAqLworCQkJ CWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCkKKwkJCQkJcmVjaGVja0luZGV4 ZXMgPSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkJCQkJ ICAgc2xvdCwgZXN0YXRlLCBmYWxzZSwKKwkJCQkJCQkJCQkJCQkJICAgZmFsc2UsIE5VTEwsIE5J TCwKKwkJCQkJCQkJCQkJCQkJICAgZmFsc2UpOworCisJCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMo ZXN0YXRlLCByZXN1bHRSZWxJbmZvLCBzbG90LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJCQkJCSBt dHN0YXRlLT5tdF90cmFuc2l0aW9uX2NhcHR1cmUpOworCisJCQkJbGlzdF9mcmVlKHJlY2hlY2tJ bmRleGVzKTsKKwkJCQlhcl9pbnNlcnRfdHJpZ2dlcnNfZXhlY3V0ZWQgPSB0cnVlOworCQkJfQog CQl9CiAJfQogCkBAIC0xMTcwLDEwICsxMjc2LDEyIEBAIEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVD b250ZXh0ICpjb250ZXh0LAogCX0KIAogCS8qIEFGVEVSIFJPVyBJTlNFUlQgVHJpZ2dlcnMgKi8K LQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sIHNsb3QsIHJlY2hl Y2tJbmRleGVzLAotCQkJCQkJIGFyX2luc2VydF90cmlnX3Rjcyk7Ci0KLQlsaXN0X2ZyZWUocmVj aGVja0luZGV4ZXMpOworCWlmICghYXJfaW5zZXJ0X3RyaWdnZXJzX2V4ZWN1dGVkKQorCXsKKwkJ RXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLCBzbG90LCByZWNoZWNr SW5kZXhlcywKKwkJCQkJCQkgYXJfaW5zZXJ0X3RyaWdfdGNzKTsKKwkJbGlzdF9mcmVlKHJlY2hl Y2tJbmRleGVzKTsKKwl9CiAKIAkvKgogCSAqIENoZWNrIGFueSBXSVRIIENIRUNLIE9QVElPTiBj b25zdHJhaW50cyBmcm9tIHBhcmVudCB2aWV3cy4gIFdlIGFyZQpAQCAtMTg2OSw3ICsxOTc3LDcg QEAgRXhlY0Nyb3NzUGFydGl0aW9uVXBkYXRlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwK IAkvKiBUdXBsZSByb3V0aW5nIHN0YXJ0cyBmcm9tIHRoZSByb290IHRhYmxlLiAqLwogCWNvbnRl eHQtPmNwVXBkYXRlUmV0dXJuaW5nU2xvdCA9CiAJCUV4ZWNJbnNlcnQoY29udGV4dCwgbXRzdGF0 ZS0+cm9vdFJlc3VsdFJlbEluZm8sIHNsb3QsIGNhblNldFRhZywKLQkJCQkgICBpbnNlcnRlZF90 dXBsZSwgaW5zZXJ0X2Rlc3RyZWwpOworCQkJCSAgIGluc2VydGVkX3R1cGxlLCBpbnNlcnRfZGVz dHJlbCwgZmFsc2UpOwogCiAJLyoKIAkgKiBSZXNldCB0aGUgdHJhbnNpdGlvbiBzdGF0ZSB0aGF0 IG1heSBwb3NzaWJseSBoYXZlIGJlZW4gd3JpdHRlbiBieQpAQCAtMzM2NCw3ICszNDcyLDcgQEAg RXhlY01lcmdlTm90TWF0Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJl bEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJbXRzdGF0ZS0+bXRfbWVyZ2VfYWN0aW9uID0gYWN0 aW9uOwogCiAJCQkJcnNsb3QgPSBFeGVjSW5zZXJ0KGNvbnRleHQsIG10c3RhdGUtPnJvb3RSZXN1 bHRSZWxJbmZvLAotCQkJCQkJCQkgICBuZXdzbG90LCBjYW5TZXRUYWcsIE5VTEwsIE5VTEwpOwor CQkJCQkJCQkgICBuZXdzbG90LCBjYW5TZXRUYWcsIE5VTEwsIE5VTEwsIGZhbHNlKTsKIAkJCQlt dHN0YXRlLT5tdF9tZXJnZV9pbnNlcnRlZCArPSAxOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDTURf Tk9USElORzoKQEAgLTM3NDksNiArMzg1NywxMCBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRl ICpwc3RhdGUpCiAJSGVhcFR1cGxlRGF0YSBvbGR0dXBkYXRhOwogCUhlYXBUdXBsZQlvbGR0dXBs ZTsKIAlJdGVtUG9pbnRlciB0dXBsZWlkOworCWJvb2wJCWNhbk11bHRpSW5zZXJ0ID0gZmFsc2U7 CisKKwl0YWJsZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCWluc2VydF9tb2RpZnlfYnVmZmVyX2Zs dXNoX2NvbnRleHQgPSBOVUxMOwogCiAJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMzg0 NCw2ICszOTU2LDEwIEBAIEV4ZWNNb2RpZnlUYWJsZShQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJaWYg KFR1cElzTnVsbChjb250ZXh0LnBsYW5TbG90KSkKIAkJCWJyZWFrOwogCisJCWlmIChvcGVyYXRp b24gPT0gQ01EX0lOU0VSVCAmJgorCQkJbm9kZVRhZyhzdWJwbGFuc3RhdGUpID09IFRfU2VxU2Nh blN0YXRlKQorCQkJY2FuTXVsdGlJbnNlcnQgPSB0cnVlOworCiAJCS8qCiAJCSAqIFdoZW4gdGhl cmUgYXJlIG11bHRpcGxlIHJlc3VsdCByZWxhdGlvbnMsIGVhY2ggdHVwbGUgY29udGFpbnMgYQog CQkgKiBqdW5rIGNvbHVtbiB0aGF0IGdpdmVzIHRoZSBPSUQgb2YgdGhlIHJlbCBmcm9tIHdoaWNo IGl0IGNhbWUuCkBAIC00MDU3LDcgKzQxNzMsNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRl ICpwc3RhdGUpCiAJCQkJCUV4ZWNJbml0SW5zZXJ0UHJvamVjdGlvbihub2RlLCByZXN1bHRSZWxJ bmZvKTsKIAkJCQlzbG90ID0gRXhlY0dldEluc2VydE5ld1R1cGxlKHJlc3VsdFJlbEluZm8sIGNv bnRleHQucGxhblNsb3QpOwogCQkJCXNsb3QgPSBFeGVjSW5zZXJ0KCZjb250ZXh0LCByZXN1bHRS ZWxJbmZvLCBzbG90LAotCQkJCQkJCQkgIG5vZGUtPmNhblNldFRhZywgTlVMTCwgTlVMTCk7CisJ CQkJCQkJCSAgbm9kZS0+Y2FuU2V0VGFnLCBOVUxMLCBOVUxMLCBjYW5NdWx0aUluc2VydCk7CiAJ CQkJYnJlYWs7CiAKIAkJCWNhc2UgQ01EX1VQREFURToKQEAgLTQxMTYsNiArNDIzMiwxNyBAQCBF eGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCQlyZXR1cm4gc2xvdDsKIAl9CiAK KwlpZiAodGFibGVfbW9kaWZ5X3N0YXRlICE9IE5VTEwpCisJeworCQlBc3NlcnQob3BlcmF0aW9u ID09IENNRF9JTlNFUlQpOworCisJCXRhYmxlX21vZGlmeV9lbmQodGFibGVfbW9kaWZ5X3N0YXRl KTsKKwkJdGFibGVfbW9kaWZ5X3N0YXRlID0gTlVMTDsKKworCQlwZnJlZShpbnNlcnRfbW9kaWZ5 X2J1ZmZlcl9mbHVzaF9jb250ZXh0KTsKKwkJaW5zZXJ0X21vZGlmeV9idWZmZXJfZmx1c2hfY29u dGV4dCA9IE5VTEw7CisJfQorCiAJLyoKIAkgKiBJbnNlcnQgcmVtYWluaW5nIHR1cGxlcyBmb3Ig YmF0Y2ggaW5zZXJ0LgogCSAqLwpAQCAtNDIyOCw2ICs0MzU1LDkgQEAgRXhlY0luaXRNb2RpZnlU YWJsZShNb2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJbXRz dGF0ZS0+bXRfbWVyZ2VfdXBkYXRlZCA9IDA7CiAJbXRzdGF0ZS0+bXRfbWVyZ2VfZGVsZXRlZCA9 IDA7CiAKKwl0YWJsZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCWluc2VydF9tb2RpZnlfYnVmZmVy X2ZsdXNoX2NvbnRleHQgPSBOVUxMOworCiAJLyotLS0tLS0tLS0tCiAJICogUmVzb2x2ZSB0aGUg dGFyZ2V0IHJlbGF0aW9uLiBUaGlzIGlzIHRoZSBzYW1lIGFzOgogCSAqCkBAIC00NjgxLDYgKzQ4 MTEsMTcgQEAgRXhlY0VuZE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpCiB7CiAJ aW50CQkJaTsKIAorCWlmICh0YWJsZV9tb2RpZnlfc3RhdGUgIT0gTlVMTCkKKwl7CisJCUFzc2Vy dChub2RlLT5vcGVyYXRpb24gPT0gQ01EX0lOU0VSVCk7CisKKwkJdGFibGVfbW9kaWZ5X2VuZCh0 YWJsZV9tb2RpZnlfc3RhdGUpOworCQl0YWJsZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCisJCXBm cmVlKGluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOworCQlpbnNlcnRfbW9kaWZ5 X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0gTlVMTDsKKwl9CisKIAkvKgogCSAqIEFsbG93IGFueSBG RFdzIHRvIHNodXQgZG93bgogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBlYmRl MDdiY2RlLi4xMWM0ZDk5NDMwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTIyNiw2 ICsxMjI2LDcgQEAgSW5qZWN0aW9uUG9pbnRFbnRyeQogSW5qZWN0aW9uUG9pbnRTaGFyZWRTdGF0 ZQogSW5saW5lQ29kZUJsb2NrCiBJblByb2dyZXNzSU8KK0luc2VydE1vZGlmeUJ1ZmZlckZsdXNo Q29udGV4dAogSW5zZXJ0U3RtdAogSW5zdHJ1bWVudGF0aW9uCiBJbnQxMjhBZ2dTdGF0ZQotLSAK Mi4zNC4xCgo= --0000000000006c82be0616d71b4b Content-Type: application/x-patch; name="v19-0004-Optimize-Logical-Replication-apply-with-multi-in.patch" Content-Disposition: attachment; filename="v19-0004-Optimize-Logical-Replication-apply-with-multi-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvdrizrq3 RnJvbSA0ZjRjZjJmMzgwYTE4YzdhNzU0YjJmY2Q5NzlhZjQ2MTdjNmFmZjUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjMgQXByIDIwMjQgMDQ6MTY6MDcgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxOSA0LzZdIE9wdGltaXplIExvZ2ljYWwgUmVwbGljYXRpb24g YXBwbHkgd2l0aCBtdWx0aSBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jICAgfCAgMzkgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Byb3RvLmMgIHwgIDI0ICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jIHwgMzU3ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oICAgfCAgIDIgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAg ICAgICB8ICAgMiArCiA2IGZpbGVzIGNoYW5nZWQsIDQxNSBpbnNlcnRpb25zKCspLCAxMyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IGQwYTg5 Y2Q1NzcuLmZhZTEzNzU1MzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5j CkBAIC01NDQsNiArNTQ0LDQ1IEBAIEV4ZWNTaW1wbGVSZWxhdGlvbkluc2VydChSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvLAogCX0KIH0KIAordm9pZAorRXhlY1JlbGF0aW9uTXVsdGlJbnNl cnQoVGFibGVNb2RpZnlTdGF0ZSAqTXVsdGlJbnNlcnRTdGF0ZSwKKwkJCQkJCVJlc3VsdFJlbElu Zm8gKnJlc3VsdFJlbEluZm8sCisJCQkJCQlFU3RhdGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCit7CisJYm9vbAkJc2tpcF90dXBsZSA9IGZhbHNlOworCVJlbGF0aW9uCXJlbCA9IHJl c3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKKworCS8qIEZvciBub3cgd2Ugc3VwcG9ydCBv bmx5IHRhYmxlcy4gKi8KKwlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9S RUxBVElPTik7CisKKwlDaGVja0NtZFJlcGxpY2FJZGVudGl0eShyZWwsIENNRF9JTlNFUlQpOwor CisJLyogQkVGT1JFIFJPVyBJTlNFUlQgVHJpZ2dlcnMgKi8KKwlpZiAocmVzdWx0UmVsSW5mby0+ cmlfVHJpZ0Rlc2MgJiYKKwkJcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0 X2JlZm9yZV9yb3cpCisJeworCQlpZiAoIUV4ZWNCUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVz dWx0UmVsSW5mbywgc2xvdCkpCisJCQlza2lwX3R1cGxlID0gdHJ1ZTsJLyogImRvIG5vdGhpbmci ICovCisJfQorCisJaWYgKCFza2lwX3R1cGxlKQorCXsKKwkJLyogQ29tcHV0ZSBzdG9yZWQgZ2Vu ZXJhdGVkIGNvbHVtbnMgKi8KKwkJaWYgKHJlbC0+cmRfYXR0LT5jb25zdHIgJiYKKwkJCXJlbC0+ cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVkKQorCQkJRXhlY0NvbXB1dGVTdG9y ZWRHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBzbG90LAorCQkJCQkJCQkJICAgQ01E X0lOU0VSVCk7CisKKwkJLyogQ2hlY2sgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSB0dXBsZSAqLwor CQlpZiAocmVsLT5yZF9hdHQtPmNvbnN0cikKKwkJCUV4ZWNDb25zdHJhaW50cyhyZXN1bHRSZWxJ bmZvLCBzbG90LCBlc3RhdGUpOworCQlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQor CQkJRXhlY1BhcnRpdGlvbkNoZWNrKHJlc3VsdFJlbEluZm8sIHNsb3QsIGVzdGF0ZSwgdHJ1ZSk7 CisKKwkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoTXVsdGlJbnNlcnRTdGF0ZSwgc2xvdCk7 CisJfQorfQorCiAvKgogICogRmluZCB0aGUgc2VhcmNoc2xvdCB0dXBsZSBhbmQgdXBkYXRlIGl0 IHdpdGggZGF0YSBpbiB0aGUgc2xvdCwKICAqIHVwZGF0ZSB0aGUgaW5kZXhlcywgYW5kIGV4ZWN1 dGUgYW55IGNvbnN0cmFpbnRzIGFuZCBwZXItcm93IHRyaWdnZXJzLgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IDk1YzA5Yzk1MTYuLjQ2ZDM4YWViZDIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTQyNyw2ICs0MjcsMzAgQEAg bG9naWNhbHJlcF93cml0ZV9pbnNlcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBSZWxhdGlvbiByZWwsCiAJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgbmV3c2xv dCwgYmluYXJ5LCBjb2x1bW5zKTsKIH0KIAorTG9naWNhbFJlcFJlbElkCitsb2dpY2FscmVwX3Jl YWRfcmVsaWQoU3RyaW5nSW5mbyBpbikKK3sKKwlMb2dpY2FsUmVwUmVsSWQgcmVsaWQ7CisKKwkv KiByZWFkIHRoZSByZWxhdGlvbiBpZCAqLworCXJlbGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsK KworCXJldHVybiByZWxpZDsKK30KKwordm9pZAorbG9naWNhbHJlcF9yZWFkX2luc2VydF92MihT dHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICpuZXd0dXApCit7CisJY2hhcgkJYWN0 aW9uOworCisJYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZShpbik7CisJaWYgKGFjdGlvbiAhPSAnTicp CisJCWVsb2coRVJST1IsICJleHBlY3RlZCBuZXcgdHVwbGUgYnV0IGdvdCAlZCIsCisJCQkgYWN0 aW9uKTsKKworCWxvZ2ljYWxyZXBfcmVhZF90dXBsZShpbiwgbmV3dHVwKTsKK30KKwogLyoKICAq IFJlYWQgSU5TRVJUIGZyb20gc3RyZWFtLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCmluZGV4IGI1YTgwZmUzZTguLjM0NDA4ODM4NDcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMTQ4LDcgKzE0OCw2IEBACiAjaW5jbHVk ZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKLSNpbmNsdWRlICJhY2Nl c3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFj Y2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleGluZy5oIgpAQCAtNDE2LDYgKzQx NSwzMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZv KHZvaWQpOwogc3RhdGljIFRyYW5zQXBwbHlBY3Rpb24gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2Fj dGlvbihUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCQkJCQkgUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKip3aW5mbyk7CiAKK3R5cGVkZWYgZW51bSBMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVz Cit7CisJTFJfTVVMVElfSU5TRVJUX05PTkUgPSAwLAorCUxSX01VTFRJX0lOU0VSVF9SRUxfU0tJ UFBFRCwKKwlMUl9NVUxUSV9JTlNFUlRfRElTQUxMT1dFRCwKKwlMUl9NVUxUSV9JTlNFUlRfRE9O RSwKK30gTFJNdWx0aUluc2VydFJldHVyblN0YXR1czsKKworc3RhdGljIFRhYmxlTW9kaWZ5U3Rh dGUgKk11bHRpSW5zZXJ0U3RhdGUgPSBOVUxMOworc3RhdGljIExvZ2ljYWxSZXBSZWxNYXBFbnRy eSAqTGFzdFJlbCA9IE5VTEw7CitzdGF0aWMgTG9naWNhbFJlcFJlbElkIExhc3RNdWx0aUluc2Vy dFJlbElkID0gSW52YWxpZE9pZDsKK3N0YXRpYyBBcHBseUV4ZWN1dGlvbkRhdGEgKkxhc3RFRGF0 YSA9IE5VTEw7CitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkxhc3RSZW1vdGVTbG90ID0gTlVMTDsK KwordHlwZWRlZiBzdHJ1Y3QgTFJNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQKK3sKKwlSZXN1bHRS ZWxJbmZvICpyZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0YXRlOworfSBMUk1vZGlmeUJ1 ZmZlckZsdXNoQ29udGV4dDsKKworc3RhdGljIExSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICpt b2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxMOworc3RhdGljIHZvaWQgTFJNb2RpZnlC dWZmZXJGbHVzaENhbGxiYWNrKHZvaWQgKmNvbnRleHQsIFR1cGxlVGFibGVTbG90ICoqc2xvdHMs IGludCBuc2xvdHMpOworc3RhdGljIHZvaWQgRmluaXNoTXVsdGlJbnNlcnRzKHZvaWQpOworCiAv KgogICogRm9ybSB0aGUgb3JpZ2luIG5hbWUgZm9yIHRoZSBzdWJzY3JpcHRpb24uCiAgKgpAQCAt MTAxNyw2ICsxMDQwLDggQEAgYXBwbHlfaGFuZGxlX2NvbW1pdChTdHJpbmdJbmZvIHMpCiB7CiAJ TG9naWNhbFJlcENvbW1pdERhdGEgY29tbWl0X2RhdGE7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMo KTsKKwogCWxvZ2ljYWxyZXBfcmVhZF9jb21taXQocywgJmNvbW1pdF9kYXRhKTsKIAogCWlmIChj b21taXRfZGF0YS5jb21taXRfbHNuICE9IHJlbW90ZV9maW5hbF9sc24pCkBAIC0xMDQzLDYgKzEw NjgsOCBAQCBhcHBseV9oYW5kbGVfYmVnaW5fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiB7CiAJTG9n aWNhbFJlcFByZXBhcmVkVHhuRGF0YSBiZWdpbl9kYXRhOwogCisJRmluaXNoTXVsdGlJbnNlcnRz KCk7CisKIAkvKiBUYWJsZXN5bmMgc2hvdWxkIG5ldmVyIHJlY2VpdmUgcHJlcGFyZS4gKi8KIAlp ZiAoYW1fdGFibGVzeW5jX3dvcmtlcigpKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTEwOSw2ICsx MTM2LDggQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxS ZXBQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7 CisKIAlsb2dpY2FscmVwX3JlYWRfcHJlcGFyZShzLCAmcHJlcGFyZV9kYXRhKTsKIAogCWlmIChw cmVwYXJlX2RhdGEucHJlcGFyZV9sc24gIT0gcmVtb3RlX2ZpbmFsX2xzbikKQEAgLTExNzEsNiAr MTIwMCw4IEBAIGFwcGx5X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCUxv Z2ljYWxSZXBDb21taXRQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOwogCWNoYXIJCWdpZFtH SURTSVpFXTsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJbG9naWNhbHJlcF9yZWFkX2Nv bW1pdF9wcmVwYXJlZChzLCAmcHJlcGFyZV9kYXRhKTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4 dF94YWN0KHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5jb21taXRfbHNuKTsKIApAQCAt MTIyMCw2ICsxMjUxLDggQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0lu Zm8gcykKIAlMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGEgcm9sbGJhY2tfZGF0YTsK IAljaGFyCQlnaWRbR0lEU0laRV07CiAKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCWxvZ2lj YWxyZXBfcmVhZF9yb2xsYmFja19wcmVwYXJlZChzLCAmcm9sbGJhY2tfZGF0YSk7CiAJc2V0X2Fw cGx5X2Vycm9yX2NvbnRleHRfeGFjdChyb2xsYmFja19kYXRhLnhpZCwgcm9sbGJhY2tfZGF0YS5y b2xsYmFja19lbmRfbHNuKTsKIApAQCAtMTI3Nyw2ICsxMzEwLDggQEAgYXBwbHlfaGFuZGxlX3N0 cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAkvKiBTYXZlIHRoZSBtZXNzYWdlIGJlZm9yZSBp dCBpcyBjb25zdW1lZC4gKi8KIAlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAor CUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9O KSwKQEAgLTEzMDQsNiArMTMzOSw4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJp bmdJbmZvIHMpCiAJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQsCiAJCQkJCQkJCSAgIHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0 YS5wcmVwYXJlX2xzbik7CiAKKwkJCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJCQkvKiBNYXJr IHRoZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KIAkJCWFwcGx5X2hhbmRsZV9wcmVwYXJl X2ludGVybmFsKCZwcmVwYXJlX2RhdGEpOwogCkBAIC0xNDA3LDYgKzE0NDQsOCBAQCBhcHBseV9o YW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogc3RhdGljIHZvaWQKIGFwcGx5X2hh bmRsZV9vcmlnaW4oU3RyaW5nSW5mbyBzKQogeworCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJ LyoKIAkgKiBPUklHSU4gbWVzc2FnZSBjYW4gb25seSBjb21lIGluc2lkZSBzdHJlYW1pbmcgdHJh bnNhY3Rpb24gb3IgaW5zaWRlCiAJICogcmVtb3RlIHRyYW5zYWN0aW9uIGFuZCBiZWZvcmUgYW55 IGFjdHVhbCB3cml0ZXMuCkBAIC0xNDczLDYgKzE1MTIsOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFt X3N0YXJ0KFN0cmluZ0luZm8gcykKIAkvKiBTYXZlIHRoZSBtZXNzYWdlIGJlZm9yZSBpdCBpcyBj b25zdW1lZC4gKi8KIAlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAorCUZpbmlz aE11bHRpSW5zZXJ0cygpOworCiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKQEAg LTE2MjgsNiArMTY2OSw4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMp CiAJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOwogCVRyYW5zQXBwbHlBY3Rpb24gYXBw bHlfYWN0aW9uOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoIWluX3N0cmVhbWVk X3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJP VE9DT0xfVklPTEFUSU9OKSwKQEAgLTE4MjEsNiArMTg2NCw4IEBAIGFwcGx5X2hhbmRsZV9zdHJl YW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpz OwogCWJvb2wJCXRvcGxldmVsX3hhY3Q7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCWlm IChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29k ZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCkBAIC0yMTM4LDYgKzIxODMsOCBAQCBhcHBs eV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJLyogU2F2ZSB0aGUgbWVzc2Fn ZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCiAJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNn ID0gKnM7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCWlmIChpbl9zdHJlYW1lZF90cmFu c2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09M X1ZJT0xBVElPTiksCkBAIC0yMTU5LDYgKzIyMDYsOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Nv bW1pdChTdHJpbmdJbmZvIHMpCiAJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJl cFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQsIHhpZCwKIAkJCQkJCQkJICAgY29tbWl0X2RhdGEuY29t bWl0X2xzbik7CiAKKwkJCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJCQlhcHBseV9oYW5kbGVf Y29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CiAKIAkJCS8qIFVubGluayB0aGUgZmlsZXMg d2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KQEAgLTIzMDIsNiAr MjM1MSw4IEBAIGFwcGx5X2hhbmRsZV9yZWxhdGlvbihTdHJpbmdJbmZvIHMpCiB7CiAJTG9naWNh bFJlcFJlbGF0aW9uICpyZWw7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCWlmIChoYW5k bGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OLCBzKSkKIAkJ cmV0dXJuOwogCkBAIC0yMzI1LDYgKzIzNzYsOCBAQCBhcHBseV9oYW5kbGVfdHlwZShTdHJpbmdJ bmZvIHMpCiB7CiAJTG9naWNhbFJlcFR5cCB0eXA7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsK KwogCWlmIChoYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBfTVNHX1RZUEUs IHMpKQogCQlyZXR1cm47CiAKQEAgLTIzNjMsMTYgKzI0MTYsMTMyIEBAIFRhcmdldFByaXZpbGVn ZXNDaGVjayhSZWxhdGlvbiByZWwsIEFjbE1vZGUgbW9kZSkKIAkJCQkJCVJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCkpKSk7CiB9CiAKLS8qCi0gKiBIYW5kbGUgSU5TRVJUIG1lc3NhZ2UuCi0g Ki8KK3N0YXRpYyB2b2lkCitGaW5pc2hNdWx0aUluc2VydHModm9pZCkKK3sKKwlMb2dpY2FsUmVw TXNnVHlwZSBzYXZlZF9jb21tYW5kOworCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCkK KwkJcmV0dXJuOworCisJQXNzZXJ0KE9pZElzVmFsaWQoTGFzdE11bHRpSW5zZXJ0UmVsSWQpKTsK KwlBc3NlcnQoTGFzdEVEYXRhICE9IE5VTEwpOworCisJLyogU2V0IHJlbGF0aW9uIGZvciBlcnJv ciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZWwgPSBMYXN0UmVsOwor CisJLyogU2V0IGN1cnJlbnQgY29tbWFuZCBmb3IgZXJyb3IgY2FsbGJhY2sgKi8KKwlzYXZlZF9j b21tYW5kID0gYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQ7CisJYXBwbHlfZXJyb3Jf Y2FsbGJhY2tfYXJnLmNvbW1hbmQgPSBMT0dJQ0FMX1JFUF9NU0dfSU5TRVJUOworCisJRXhlY0Ry b3BTaW5nbGVUdXBsZVRhYmxlU2xvdChMYXN0UmVtb3RlU2xvdCk7CisJTGFzdFJlbW90ZVNsb3Qg PSBOVUxMOworCisJdGFibGVfbW9kaWZ5X2VuZChNdWx0aUluc2VydFN0YXRlKTsKKwlNdWx0aUlu c2VydFN0YXRlID0gTlVMTDsKKwlMYXN0TXVsdGlJbnNlcnRSZWxJZCA9IEludmFsaWRPaWQ7CisK KwlwZnJlZShtb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOworCW1vZGlmeV9idWZmZXJfZmx1 c2hfY29udGV4dCA9IE5VTEw7CisKKwlFeGVjQ2xvc2VJbmRpY2VzKExhc3RFRGF0YS0+dGFyZ2V0 UmVsSW5mbyk7CisKKwlmaW5pc2hfZWRhdGEoTGFzdEVEYXRhKTsKKwlMYXN0RURhdGEgPSBOVUxM OworCisJLyogUmVzZXQgcmVsYXRpb24gZm9yIGVycm9yIGNhbGxiYWNrICovCisJYXBwbHlfZXJy b3JfY2FsbGJhY2tfYXJnLnJlbCA9IE5VTEw7CisKKwkvKiBSZXNldCB0aGUgY3VycmVudCBjb21t YW5kICovCisJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQgPSBzYXZlZF9jb21tYW5k OworCisJbG9naWNhbHJlcF9yZWxfY2xvc2UoTGFzdFJlbCwgTm9Mb2NrKTsKKwlMYXN0UmVsID0g TlVMTDsKKworCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Cit9CiAKIHN0YXRpYyB2b2lkCi1hcHBs eV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKK0xSTW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFj ayh2b2lkICpjb250ZXh0LCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbnNsb3RzKQorewor CUxSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICpjdHggPSAoTFJNb2RpZnlCdWZmZXJGbHVzaENv bnRleHQgKikgY29udGV4dDsKKwlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvID0gY3R4LT5y ZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0YXRlID0gY3R4LT5lc3RhdGU7CisJaW50CQkJ aTsKKwlMb2dpY2FsUmVwTXNnVHlwZSBzYXZlZF9jb21tYW5kOworCisJaWYgKG5zbG90cyA8PSAw KQorCQlyZXR1cm47CisKKwkvKiBRdWljayBleGl0IGlmIG5vIGluZGV4ZXMgb3Igbm8gdHJpZ2dl cnMgKi8KKwlpZiAoIShyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCB8fAorCQkgIChy ZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCSAgIChyZXN1bHRSZWxJbmZv LT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8CisJCQlyZXN1bHRSZWxJbmZv LT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkpKQorCQlyZXR1cm47CisKKwkv KiBTZXQgcmVsYXRpb24gZm9yIGVycm9yIGNhbGxiYWNrICovCisJYXBwbHlfZXJyb3JfY2FsbGJh Y2tfYXJnLnJlbCA9IExhc3RSZWw7CisKKwkvKiBTZXQgY3VycmVudCBjb21tYW5kIGZvciBlcnJv ciBjYWxsYmFjayAqLworCXNhdmVkX2NvbW1hbmQgPSBhcHBseV9lcnJvcl9jYWxsYmFja19hcmcu Y29tbWFuZDsKKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcuY29tbWFuZCA9IExPR0lDQUxfUkVQ X01TR19JTlNFUlQ7CisKKwkvKiBDYWxsZXIgbXVzdCB0YWtlIGNhcmUgb2Ygb3BlbmluZyBhbmQg Y2xvc2luZyB0aGUgaW5kaWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBuc2xvdHM7IGkrKykKKwl7 CisJCS8qCisJCSAqIElmIHRoZXJlIGFyZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9yIGFs bCB0aGUgaW5zZXJ0ZWQgdHVwbGVzLAorCQkgKiBhbmQgcnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJp Z2dlcnMuCisJCSAqLworCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJ CXsKKwkJCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzOworCisJCQlyZWNoZWNrSW5kZXhlcyA9CisJ CQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCisJCQkJCQkJCQkgIHNsb3Rz W2ldLCBlc3RhdGUsIGZhbHNlLAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgTklMLCBmYWxzZSk7 CisKKwkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKKwkJCQkJ CQkJIHNsb3RzW2ldLCByZWNoZWNrSW5kZXhlcywKKwkJCQkJCQkJIE5VTEwpOworCisJCQlsaXN0 X2ZyZWUocmVjaGVja0luZGV4ZXMpOworCQl9CisKKwkJLyoKKwkJICogVGhlcmUncyBubyBpbmRl eGVzLCBidXQgc2VlIGlmIHdlIG5lZWQgdG8gcnVuIEFGVEVSIFJPVyBJTlNFUlQKKwkJICogdHJp Z2dlcnMgYW55d2F5LgorCQkgKi8KKwkJZWxzZSBpZiAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rl c2MgIT0gTlVMTCAmJgorCQkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5z ZXJ0X2FmdGVyX3JvdyB8fAorCQkJCSAgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdf aW5zZXJ0X25ld190YWJsZSkpCisJCXsKKwkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwg cmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJIHNsb3RzW2ldLCBOSUwsCisJCQkJCQkJCSBOVUxMKTsK KwkJfQorCisJCS8qCisJCSAqIFhYWCB3ZSBzaG91bGQgaW4gdGhlb3J5IHBhc3MgYSBUcmFuc2l0 aW9uQ2FwdHVyZVN0YXRlIG9iamVjdCB0byB0aGUKKwkJICogYWJvdmUgdG8gY2FwdHVyZSB0cmFu c2l0aW9uIHR1cGxlcywgYnV0IGFmdGVyIHN0YXRlbWVudCB0cmlnZ2VycworCQkgKiBkb24ndCBh Y3R1YWxseSBnZXQgZmlyZWQgYnkgcmVwbGljYXRpb24geWV0IGFueXdheQorCQkgKi8KKwl9CisK KwkvKiBSZXNldCByZWxhdGlvbiBmb3IgZXJyb3IgY2FsbGJhY2sgKi8KKwlhcHBseV9lcnJvcl9j YWxsYmFja19hcmcucmVsID0gTlVMTDsKKworCS8qIFJlc2V0IHRoZSBjdXJyZW50IGNvbW1hbmQg Ki8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcuY29tbWFuZCA9IHNhdmVkX2NvbW1hbmQ7Cit9 CisKK3N0YXRpYyBMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVzCitkb19tdWx0aV9pbnNlcnRzKFN0 cmluZ0luZm8gcywgTG9naWNhbFJlcFJlbElkICpyZWxpZCkKIHsKIAlMb2dpY2FsUmVwUmVsTWFw RW50cnkgKnJlbDsKIAlMb2dpY2FsUmVwVHVwbGVEYXRhIG5ld3R1cDsKLQlMb2dpY2FsUmVwUmVs SWQgcmVsaWQ7CiAJVXNlckNvbnRleHQgdWN4dDsKIAlBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRh OwogCUVTdGF0ZQkgICAqZXN0YXRlOwpAQCAtMjM4MCwxNyArMjU0OSwxNDMgQEAgYXBwbHlfaGFu ZGxlX2luc2VydChTdHJpbmdJbmZvIHMpCiAJTWVtb3J5Q29udGV4dCBvbGRjdHg7CiAJYm9vbAkJ cnVuX2FzX293bmVyOwogCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCkKKwkJYmVnaW5f cmVwbGljYXRpb25fc3RlcCgpOworCisJKnJlbGlkID0gbG9naWNhbHJlcF9yZWFkX3JlbGlkKHMp OworCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUgIT0gTlVMTCAmJgorCQkoTGFzdE11bHRpSW5zZXJ0 UmVsSWQgIT0gSW52YWxpZE9pZCAmJgorCQkgKnJlbGlkICE9IEludmFsaWRPaWQgJiYKKwkJIExh c3RNdWx0aUluc2VydFJlbElkICE9ICpyZWxpZCkpCisJCUZpbmlzaE11bHRpSW5zZXJ0cygpOwor CisJaWYgKE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCkKKwkJcmVsID0gbG9naWNhbHJlcF9yZWxf b3BlbigqcmVsaWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCWVsc2UKKwkJcmVsID0gTGFzdFJlbDsK KworCWlmICghc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbChyZWwpKQorCXsKKwkJQXNzZXJ0 KE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCk7CisKKwkJLyoKKwkJICogVGhlIHJlbGF0aW9uIGNh bid0IGJlY29tZSBpbnRlcmVzdGluZyBpbiB0aGUgbWlkZGxlIG9mIHRoZQorCQkgKiB0cmFuc2Fj dGlvbiBzbyBpdCdzIHNhZmUgdG8gdW5sb2NrIGl0LgorCQkgKi8KKwkJbG9naWNhbHJlcF9yZWxf Y2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsK KwkJcmV0dXJuIExSX01VTFRJX0lOU0VSVF9SRUxfU0tJUFBFRDsKKwl9CisKKwkvKiBGb3IgYSBw YXJ0aXRpb25lZCB0YWJsZSwgbGV0J3Mgbm90IGRvIG11bHRpIGluc2VydHMuICovCisJaWYgKHJl bC0+bG9jYWxyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxF KQorCXsKKwkJQXNzZXJ0KE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCk7CisKKwkJLyoKKwkJICog VGhlIHJlbGF0aW9uIGNhbid0IGJlY29tZSBpbnRlcmVzdGluZyBpbiB0aGUgbWlkZGxlIG9mIHRo ZQorCQkgKiB0cmFuc2FjdGlvbiBzbyBpdCdzIHNhZmUgdG8gdW5sb2NrIGl0LgorCQkgKi8KKwkJ bG9naWNhbHJlcF9yZWxfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJZW5kX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKKwkJcmV0dXJuIExSX01VTFRJX0lOU0VSVF9ESVNBTExPV0VEOworCX0K KwogCS8qCi0JICogUXVpY2sgcmV0dXJuIGlmIHdlIGFyZSBza2lwcGluZyBkYXRhIG1vZGlmaWNh dGlvbiBjaGFuZ2VzIG9yIGhhbmRsaW5nCi0JICogc3RyZWFtZWQgdHJhbnNhY3Rpb25zLgorCSAq IE1ha2Ugc3VyZSB0aGF0IGFueSB1c2VyLXN1cHBsaWVkIGNvZGUgcnVucyBhcyB0aGUgdGFibGUg b3duZXIsIHVubGVzcworCSAqIHRoZSB1c2VyIGhhcyBvcHRlZCBvdXQgb2YgdGhhdCBiZWhhdmlv ci4KIAkgKi8KLQlpZiAoaXNfc2tpcHBpbmdfY2hhbmdlcygpIHx8Ci0JCWhhbmRsZV9zdHJlYW1l ZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9NU0dfSU5TRVJULCBzKSkKLQkJcmV0dXJuOworCXJ1 bl9hc19vd25lciA9IE15U3Vic2NyaXB0aW9uLT5ydW5hc293bmVyOworCWlmICghcnVuX2FzX293 bmVyKQorCQlTd2l0Y2hUb1VudHJ1c3RlZFVzZXIocmVsLT5sb2NhbHJlbC0+cmRfcmVsLT5yZWxv d25lciwgJnVjeHQpOworCisJLyogU2V0IHJlbGF0aW9uIGZvciBlcnJvciBjYWxsYmFjayAqLwor CWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZWwgPSByZWw7CisKKwlpZiAoTXVsdGlJbnNlcnRT dGF0ZSA9PSBOVUxMKQorCXsKKwkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRy YW5zYWN0aW9uQ29udGV4dCk7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgZXhlY3V0b3Igc3RhdGUu ICovCisJCUxhc3RFRGF0YSA9IGVkYXRhID0gY3JlYXRlX2VkYXRhX2Zvcl9yZWxhdGlvbihyZWwp OworCQllc3RhdGUgPSBlZGF0YS0+ZXN0YXRlOworCisJCUxhc3RSZW1vdGVTbG90ID0gcmVtb3Rl c2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKHJlbC0+bG9jYWxyZWwp LAorCQkJCQkJCQkJCQkJCQkgJlRUU09wc1ZpcnR1YWwpOworCisJCW1vZGlmeV9idWZmZXJfZmx1 c2hfY29udGV4dCA9IChMUk1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dCAqKSBwYWxsb2Moc2l6ZW9m KExSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0KSk7CisJCW1vZGlmeV9idWZmZXJfZmx1c2hfY29u dGV4dC0+cmVzdWx0UmVsSW5mbyA9IGVkYXRhLT50YXJnZXRSZWxJbmZvOworCQltb2RpZnlfYnVm ZmVyX2ZsdXNoX2NvbnRleHQtPmVzdGF0ZSA9IGVzdGF0ZTsKKworCQlNdWx0aUluc2VydFN0YXRl ID0gdGFibGVfbW9kaWZ5X2JlZ2luKGVkYXRhLT50YXJnZXRSZWxJbmZvLT5yaV9SZWxhdGlvbkRl c2MsCisJCQkJCQkJCQkJCSAgVE1fRkxBR19NVUxUSV9JTlNFUlRTIHwKKwkJCQkJCQkJCQkJICBU TV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJCSAgR2V0Q3VycmVudENvbW1hbmRJZCh0 cnVlKSwKKwkJCQkJCQkJCQkJICAwLAorCQkJCQkJCQkJCQkgIExSTW9kaWZ5QnVmZmVyRmx1c2hD YWxsYmFjaywKKwkJCQkJCQkJCQkJICBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOworCQlM YXN0UmVsID0gcmVsOworCQlMYXN0TXVsdGlJbnNlcnRSZWxJZCA9ICpyZWxpZDsKKworCQkvKiBX ZSBtdXN0IG9wZW4gaW5kZXhlcyBoZXJlLiAqLworCQlFeGVjT3BlbkluZGljZXMoZWRhdGEtPnRh cmdldFJlbEluZm8sIGZhbHNlKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsK Kwl9CisJZWxzZQorCXsKKwkJQ29tbWFuZElkCWNpZDsKKworCQllZGF0YSA9IExhc3RFRGF0YTsK KwkJZXN0YXRlID0gZWRhdGEtPmVzdGF0ZTsKKwkJUmVzZXRFeHByQ29udGV4dChHZXRQZXJUdXBs ZUV4cHJDb250ZXh0KGVzdGF0ZSkpOworCQlFeGVjQ2xlYXJUdXBsZShMYXN0UmVtb3RlU2xvdCk7 CisJCXJlbW90ZXNsb3QgPSBMYXN0UmVtb3RlU2xvdDsKKwkJY2lkID0gR2V0Q3VycmVudENvbW1h bmRJZCh0cnVlKTsKKwkJTXVsdGlJbnNlcnRTdGF0ZS0+Y2lkID0gY2lkOworCQllc3RhdGUtPmVz X291dHB1dF9jaWQgPSBjaWQ7CisJfQorCisJLyogUHJvY2VzcyBhbmQgc3RvcmUgcmVtb3RlIHR1 cGxlIGluIHRoZSBzbG90ICovCisJbG9naWNhbHJlcF9yZWFkX2luc2VydF92MihzLCAmbmV3dHVw KTsKKwlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlDb250 ZXh0KGVzdGF0ZSkpOworCXNsb3Rfc3RvcmVfZGF0YShyZW1vdGVzbG90LCByZWwsICZuZXd0dXAp OworCXNsb3RfZmlsbF9kZWZhdWx0cyhyZWwsIGVzdGF0ZSwgcmVtb3Rlc2xvdCk7CisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisKKwlUYXJnZXRQcml2aWxlZ2VzQ2hlY2soZWRhdGEt PnRhcmdldFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywgQUNMX0lOU0VSVCk7CisJRXhlY1JlbGF0 aW9uTXVsdGlJbnNlcnQoTXVsdGlJbnNlcnRTdGF0ZSwgZWRhdGEtPnRhcmdldFJlbEluZm8sIGVz dGF0ZSwgcmVtb3Rlc2xvdCk7CisKKwkvKiBSZXNldCByZWxhdGlvbiBmb3IgZXJyb3IgY2FsbGJh Y2sgKi8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0gTlVMTDsKKworCWlmICghcnVu X2FzX293bmVyKQorCQlSZXN0b3JlVXNlckNvbnRleHQoJnVjeHQpOworCisJQXNzZXJ0KE11bHRp SW5zZXJ0U3RhdGUgIT0gTlVMTCk7CisKKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJ cmV0dXJuIExSX01VTFRJX0lOU0VSVF9ET05FOworfQorCitzdGF0aWMgYm9vbAorZG9fc2luZ2xl X2luc2VydHMoU3RyaW5nSW5mbyBzLCBMb2dpY2FsUmVwUmVsSWQgcmVsaWQpCit7CisJTG9naWNh bFJlcFJlbE1hcEVudHJ5ICpyZWw7CisJTG9naWNhbFJlcFR1cGxlRGF0YSBuZXd0dXA7CisJVXNl ckNvbnRleHQgdWN4dDsKKwlBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhOworCUVTdGF0ZQkgICAq ZXN0YXRlOworCVR1cGxlVGFibGVTbG90ICpyZW1vdGVzbG90OworCU1lbW9yeUNvbnRleHQgb2xk Y3R4OworCWJvb2wJCXJ1bl9hc19vd25lcjsKKworCUFzc2VydChyZWxpZCAhPSBJbnZhbGlkT2lk KTsKIAogCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAotCXJlbGlkID0gbG9naWNhbHJlcF9y ZWFkX2luc2VydChzLCAmbmV3dHVwKTsKIAlyZWwgPSBsb2dpY2FscmVwX3JlbF9vcGVuKHJlbGlk LCBSb3dFeGNsdXNpdmVMb2NrKTsKIAlpZiAoIXNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwo cmVsKSkKIAl7CkBAIC0yNDAwLDcgKzI2OTUsNyBAQCBhcHBseV9oYW5kbGVfaW5zZXJ0KFN0cmlu Z0luZm8gcykKIAkJICovCiAJCWxvZ2ljYWxyZXBfcmVsX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZl TG9jayk7CiAJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZh bHNlOwogCX0KIAogCS8qCkBAIC0yNDIyLDYgKzI3MTcsNyBAQCBhcHBseV9oYW5kbGVfaW5zZXJ0 KFN0cmluZ0luZm8gcykKIAkJCQkJCQkJCQkmVFRTT3BzVmlydHVhbCk7CiAKIAkvKiBQcm9jZXNz IGFuZCBzdG9yZSByZW1vdGUgdHVwbGUgaW4gdGhlIHNsb3QgKi8KKwlsb2dpY2FscmVwX3JlYWRf aW5zZXJ0X3YyKHMsICZuZXd0dXApOwogCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhH ZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7CiAJc2xvdF9zdG9yZV9kYXRhKHJlbW90 ZXNsb3QsIHJlbCwgJm5ld3R1cCk7CiAJc2xvdF9maWxsX2RlZmF1bHRzKHJlbCwgZXN0YXRlLCBy ZW1vdGVzbG90KTsKQEAgLTI0NDYsNiArMjc0MiwzNSBAQCBhcHBseV9oYW5kbGVfaW5zZXJ0KFN0 cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlbF9jbG9zZShyZWwsIE5vTG9jayk7CiAKIAllbmRf cmVwbGljYXRpb25fc3RlcCgpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBIYW5kbGUg SU5TRVJUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfaW5zZXJ0KFN0 cmluZ0luZm8gcykKK3sKKwlMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVzIG1pX3N0YXR1czsKKwlM b2dpY2FsUmVwUmVsSWQgcmVsaWQ7CisKKwkvKgorCSAqIFF1aWNrIHJldHVybiBpZiB3ZSBhcmUg c2tpcHBpbmcgZGF0YSBtb2RpZmljYXRpb24gY2hhbmdlcyBvciBoYW5kbGluZworCSAqIHN0cmVh bWVkIHRyYW5zYWN0aW9ucy4KKwkgKi8KKwlpZiAoaXNfc2tpcHBpbmdfY2hhbmdlcygpIHx8CisJ CWhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9NU0dfSU5TRVJULCBzKSkK KwkJcmV0dXJuOworCisJbWlfc3RhdHVzID0gZG9fbXVsdGlfaW5zZXJ0cyhzLCAmcmVsaWQpOwor CWlmIChtaV9zdGF0dXMgPT0gTFJfTVVMVElfSU5TRVJUX1JFTF9TS0lQUEVEIHx8CisJCW1pX3N0 YXR1cyA9PSBMUl9NVUxUSV9JTlNFUlRfRE9ORSkKKwkJcmV0dXJuOworCisJZG9fc2luZ2xlX2lu c2VydHMocywgcmVsaWQpOworCisJcmV0dXJuOwogfQogCiAvKgpAQCAtMjUzMiw2ICsyODU3LDgg QEAgYXBwbHlfaGFuZGxlX3VwZGF0ZShTdHJpbmdJbmZvIHMpCiAJTWVtb3J5Q29udGV4dCBvbGRj dHg7CiAJYm9vbAkJcnVuX2FzX293bmVyOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAkv KgogCSAqIFF1aWNrIHJldHVybiBpZiB3ZSBhcmUgc2tpcHBpbmcgZGF0YSBtb2RpZmljYXRpb24g Y2hhbmdlcyBvciBoYW5kbGluZwogCSAqIHN0cmVhbWVkIHRyYW5zYWN0aW9ucy4KQEAgLTI3MTMs NiArMzA0MCw4IEBAIGFwcGx5X2hhbmRsZV9kZWxldGUoU3RyaW5nSW5mbyBzKQogCU1lbW9yeUNv bnRleHQgb2xkY3R4OwogCWJvb2wJCXJ1bl9hc19vd25lcjsKIAorCUZpbmlzaE11bHRpSW5zZXJ0 cygpOworCiAJLyoKIAkgKiBRdWljayByZXR1cm4gaWYgd2UgYXJlIHNraXBwaW5nIGRhdGEgbW9k aWZpY2F0aW9uIGNoYW5nZXMgb3IgaGFuZGxpbmcKIAkgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbnMu CkBAIC0zMTU0LDYgKzM0ODMsOCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBz KQogCUxpc3RDZWxsICAgKmxjOwogCUxPQ0tNT0RFCWxvY2ttb2RlID0gQWNjZXNzRXhjbHVzaXZl TG9jazsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJLyoKIAkgKiBRdWljayByZXR1cm4g aWYgd2UgYXJlIHNraXBwaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgb3IgaGFuZGxpbmcK IAkgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbnMuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA5 NzcwNzUyZWEzLi44ZjEwZWE5NzdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTE0LDYg KzE0LDcgQEAKICNpZm5kZWYgRVhFQ1VUT1JfSAogI2RlZmluZSBFWEVDVVRPUl9ICiAKKyNpbmNs dWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNkZXNjLmgiCiAj aW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL2xvY2tvcHRpb25zLmgiCkBAIC02NTYs NiArNjU3LDkgQEAgZXh0ZXJuIGJvb2wgUmVsYXRpb25GaW5kUmVwbFR1cGxlU2VxKFJlbGF0aW9u IHJlbCwgTG9ja1R1cGxlTW9kZSBsb2NrbW9kZSwKIAogZXh0ZXJuIHZvaWQgRXhlY1NpbXBsZVJl bGF0aW9uSW5zZXJ0KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJCQkJCQkgRVN0 YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIEV4ZWNSZWxh dGlvbk11bHRpSW5zZXJ0KFRhYmxlTW9kaWZ5U3RhdGUgKk11bHRpSW5zZXJ0U3RhdGUsCisJCQkJ CQkJCQlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJRVN0YXRlICplc3Rh dGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiB2b2lkIEV4ZWNTaW1wbGVSZWxhdGlv blVwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkJIEVTdGF0ZSAq ZXN0YXRlLCBFUFFTdGF0ZSAqZXBxc3RhdGUsCiAJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNl YXJjaHNsb3QsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHByb3RvLmgKaW5kZXggYzQwOTYzOGEyZS4uM2YzYTdmMGEzMSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTIyNiw2ICsyMjYsOCBAQCBleHRlcm4gdm9pZCBs b2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs CiAJCQkJCQkJCQlSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqbmV3c2xv dCwKIAkJCQkJCQkJCWJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpOworZXh0ZXJuIExv Z2ljYWxSZXBSZWxJZCBsb2dpY2FscmVwX3JlYWRfcmVsaWQoU3RyaW5nSW5mbyBpbik7CitleHRl cm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfaW5zZXJ0X3YyKFN0cmluZ0luZm8gaW4sIExvZ2ljYWxS ZXBUdXBsZURhdGEgKm5ld3R1cCk7CiBleHRlcm4gTG9naWNhbFJlcFJlbElkIGxvZ2ljYWxyZXBf cmVhZF9pbnNlcnQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFR1cGxlRGF0YSAqbmV3dHVwKTsK IGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJlbGF0aW9uIHJlbCwKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKaW5kZXggMTFjNGQ5OTQzMC4uNzBmMjM4MDhlMiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTE0NTYsNiArMTQ1Niw4IEBAIExQVEhSRUFEX1NUQVJUX1JPVVRJTkUKIExQVFNU UgogTFBWT0lECiBMUFdTVFIKK0xSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0CitMUk11bHRpSW5z ZXJ0UmV0dXJuU3RhdHVzCiBMU0VHCiBMVUlECiBMVlJlbFN0YXRlCi0tIAoyLjM0LjEKCg== --0000000000006c82be0616d71b4b Content-Type: application/x-patch; name="v19-0005-Use-new-multi-insert-Table-AM-for-COPY-FROM.patch" Content-Disposition: attachment; filename="v19-0005-Use-new-multi-insert-Table-AM-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvdrj2fc4 RnJvbSBkODNiZjViYzBiZmM1ZjQ1ZDg1ZTM4YTg3NmE3ZGI5NGYxMjgwM2RhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjMgQXByIDIwMjQgMDU6MTg6NTggKzAw MDAKU3ViamVjdDogW1BBVENIIHYxOSA1LzZdIFVzZSBuZXcgbXVsdGkgaW5zZXJ0IFRhYmxlIEFN IGZvciBDT1BZIEZST00KCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAg ICAgICB8IDIzMCArKysrKysrKysrKysrKystLS0tLS0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMv Y29weWZyb21faW50ZXJuYWwuaCB8ICAgNCArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDE1MyBpbnNlcnRpb25zKCsp LCA4MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 ZnJvbS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwppbmRleCBjZTRkNjJlNzA3 Li44NTcyYzViNzMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTcxLDEzICs3MSwyMSBA QAogLyogVHJpbSB0aGUgbGlzdCBvZiBidWZmZXJzIGJhY2sgZG93biB0byB0aGlzIG51bWJlciBh ZnRlciBmbHVzaGluZyAqLwogI2RlZmluZSBNQVhfUEFSVElUSU9OX0JVRkZFUlMJMzIKIAordHlw ZWRlZiBzdHJ1Y3QgQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dAoreworCUNvcHlGcm9tU3Rh dGUgY3N0YXRlOworCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICpl c3RhdGU7Cit9IENvcHlNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQ7CisKIC8qIFN0b3JlcyBtdWx0 aS1pbnNlcnQgZGF0YSByZWxhdGVkIHRvIGEgc2luZ2xlIHJlbGF0aW9uIGluIENvcHlGcm9tLiAq LwogdHlwZWRlZiBzdHJ1Y3QgQ29weU11bHRpSW5zZXJ0QnVmZmVyCiB7Ci0JVHVwbGVUYWJsZVNs b3QgKnNsb3RzW01BWF9CVUZGRVJFRF9UVVBMRVNdOyAvKiBBcnJheSB0byBzdG9yZSB0dXBsZXMg Ki8KKwlUYWJsZU1vZGlmeVN0YXRlICptc3RhdGU7CS8qIFRhYmxlIGluc2VydCBzdGF0ZTsgTlVM TCBpZiBmb3JlaWduIHRhYmxlICovCisJVHVwbGVUYWJsZVNsb3QgKipzbG90czsJCS8qIEFycmF5 IHRvIHN0b3JlIHR1cGxlcyAqLwogCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CS8qIFJl c3VsdFJlbEluZm8gZm9yICdyZWxpZCcgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyog QnVsa0luc2VydFN0YXRlIGZvciB0aGlzIHJlbCBpZiBwbGFpbgotCQkJCQkJCQkgKiB0YWJsZTsg TlVMTCBpZiBmb3JlaWduIHRhYmxlICovCisJVHVwbGVUYWJsZVNsb3QgKm11bHRpc2xvdDsKKwlD b3B5TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQ7 CiAJaW50CQkJbnVzZWQ7CQkJLyogbnVtYmVyIG9mICdzbG90cycgY29udGFpbmluZyB0dXBsZXMg Ki8KIAl1aW50NjQJCWxpbmVub3NbTUFYX0JVRkZFUkVEX1RVUExFU107CS8qIExpbmUgIyBvZiB0 dXBsZSBpbiBjb3B5CiAJCQkJCQkJCQkJCQkgKiBzdHJlYW0gKi8KQEAgLTk5LDYgKzEwNyw3IEBA IHR5cGVkZWYgc3RydWN0IENvcHlNdWx0aUluc2VydEluZm8KIAlpbnQJCQl0aV9vcHRpb25zOwkJ LyogdGFibGUgaW5zZXJ0IG9wdGlvbnMgKi8KIH0gQ29weU11bHRpSW5zZXJ0SW5mbzsKIAorc3Rh dGljIHZvaWQgQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4dCwgVHVw bGVUYWJsZVNsb3QgKipzbG90cywgaW50IG5zbG90cyk7CiAKIC8qIG5vbi1leHBvcnQgZnVuY3Rp b24gcHJvdG90eXBlcyAqLwogc3RhdGljIHZvaWQgQ2xvc2VQaXBlRnJvbVByb2dyYW0oQ29weUZy b21TdGF0ZSBjc3RhdGUpOwpAQCAtMjE4LDE0ICsyMjcsMzggQEAgQ29weUxpbWl0UHJpbnRvdXRM ZW5ndGgoY29uc3QgY2hhciAqc3RyKQogICogUmVzdWx0UmVsSW5mby4KICAqLwogc3RhdGljIENv cHlNdWx0aUluc2VydEJ1ZmZlciAqCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KFJlc3VsdFJl bEluZm8gKnJyaSkKK0NvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQoQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCisJCQkJCQkgIENvcHlGcm9tU3RhdGUgY3N0 YXRlLCBFU3RhdGUgKmVzdGF0ZSkKIHsKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlcjsK IAogCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgcGFsbG9jKHNpemVvZihDb3B5 TXVsdGlJbnNlcnRCdWZmZXIpKTsKLQltZW1zZXQoYnVmZmVyLT5zbG90cywgMCwgc2l6ZW9mKFR1 cGxlVGFibGVTbG90ICopICogTUFYX0JVRkZFUkVEX1RVUExFUyk7CisKKwlpZiAocnJpLT5yaV9G ZHdSb3V0aW5lID09IE5VTEwpCisJeworCQlidWZmZXItPm1vZGlmeV9idWZmZXJfZmx1c2hfY29u dGV4dCA9IChDb3B5TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICopIHBhbGxvYyhzaXplb2YoQ29w eU1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dCkpOworCQlidWZmZXItPm1vZGlmeV9idWZmZXJfZmx1 c2hfY29udGV4dC0+Y3N0YXRlID0gY3N0YXRlOworCQlidWZmZXItPm1vZGlmeV9idWZmZXJfZmx1 c2hfY29udGV4dC0+cmVzdWx0UmVsSW5mbyA9IHJyaTsKKwkJYnVmZmVyLT5tb2RpZnlfYnVmZmVy X2ZsdXNoX2NvbnRleHQtPmVzdGF0ZSA9IGVzdGF0ZTsKKworCQlidWZmZXItPm1zdGF0ZSA9IHRh YmxlX21vZGlmeV9iZWdpbihycmktPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJVE1fRkxB R19NVUxUSV9JTlNFUlRTIHwKKwkJCQkJCQkJCQkJVE1fRkxBR19CQVNfQlVMS1dSSVRFLAorCQkJ CQkJCQkJCQltaWluZm8tPm15Y2lkLAorCQkJCQkJCQkJCQltaWluZm8tPnRpX29wdGlvbnMsCisJ CQkJCQkJCQkJCUNvcHlNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrLAorCQkJCQkJCQkJCQlidWZm ZXItPm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCk7CisJCWJ1ZmZlci0+c2xvdHMgPSBOVUxM OworCQlidWZmZXItPm11bHRpc2xvdCA9IE5VTEw7CisJfQorCWVsc2UKKwl7CisJCWJ1ZmZlci0+ bXN0YXRlID0gTlVMTDsKKwkJYnVmZmVyLT5zbG90cyA9IHBhbGxvYzAoc2l6ZW9mKFR1cGxlVGFi bGVTbG90ICopICogTUFYX0JVRkZFUkVEX1RVUExFUyk7CisJCWJ1ZmZlci0+bXVsdGlzbG90ID0g TlVMTDsKKwl9CisKIAlidWZmZXItPnJlc3VsdFJlbEluZm8gPSBycmk7Ci0JYnVmZmVyLT5iaXN0 YXRlID0gKHJyaS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKSA/IEdldEJ1bGtJbnNlcnRTdGF0ZSgp IDogTlVMTDsKIAlidWZmZXItPm51c2VkID0gMDsKIAogCXJldHVybiBidWZmZXI7CkBAIC0yMzYs MTEgKzI2OSwxMiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KFJlc3VsdFJlbEluZm8gKnJy aSkKICAqLwogc3RhdGljIGlubGluZSB2b2lkCiBDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZm ZXIoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJCSAgIFJlc3VsdFJlbEluZm8g KnJyaSkKKwkJCQkJCQkgICBSZXN1bHRSZWxJbmZvICpycmksIENvcHlGcm9tU3RhdGUgY3N0YXRl LAorCQkJCQkJCSAgIEVTdGF0ZSAqZXN0YXRlKQogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAq YnVmZmVyOwogCi0JYnVmZmVyID0gQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChycmkpOworCWJ1 ZmZlciA9IENvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQobWlpbmZvLCBycmksIGNzdGF0ZSwgZXN0 YXRlKTsKIAogCS8qIFNldHVwIGJhY2stbGluayBzbyB3ZSBjYW4gZWFzaWx5IGZpbmQgdGhpcyBi dWZmZXIgYWdhaW4gKi8KIAlycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9IGJ1ZmZlcjsK QEAgLTI3Myw3ICszMDcsNyBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvSW5pdChDb3B5TXVsdGlJbnNl cnRJbmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKIAkgKiB0dXBsZXMgdGhlaXIgd2F5 IGZvciB0aGUgZmlyc3QgdGltZS4KIAkgKi8KIAlpZiAocnJpLT5yaV9SZWxhdGlvbkRlc2MtPnJk X3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQlDb3B5TXVsdGlJ bnNlcnRJbmZvU2V0dXBCdWZmZXIobWlpbmZvLCBycmkpOworCQlDb3B5TXVsdGlJbnNlcnRJbmZv U2V0dXBCdWZmZXIobWlpbmZvLCBycmksIGNzdGF0ZSwgZXN0YXRlKTsKIH0KIAogLyoKQEAgLTMx Nyw4ICszNTEsNiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJ bmZvICptaWluZm8sCiAJCWludAkJCWJhdGNoX3NpemUgPSByZXN1bHRSZWxJbmZvLT5yaV9CYXRj aFNpemU7CiAJCWludAkJCXNlbnQgPSAwOwogCi0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgPT0g TlVMTCk7Ci0KIAkJLyogRW5zdXJlIHRoYXQgdGhlIEZEVyBzdXBwb3J0cyBiYXRjaGluZyBhbmQg aXQncyBlbmFibGVkICovCiAJCUFzc2VydChyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5F eGVjRm9yZWlnbkJhdGNoSW5zZXJ0KTsKIAkJQXNzZXJ0KGJhdGNoX3NpemUgPiAxKTsKQEAgLTM5 MCwxMyArNDIyLDggQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0 SW5mbyAqbWlpbmZvLAogCX0KIAllbHNlCiAJewotCQlDb21tYW5kSWQJbXljaWQgPSBtaWluZm8t Pm15Y2lkOwotCQlpbnQJCQl0aV9vcHRpb25zID0gbWlpbmZvLT50aV9vcHRpb25zOwogCQlib29s CQlsaW5lX2J1Zl92YWxpZCA9IGNzdGF0ZS0+bGluZV9idWZfdmFsaWQ7CiAJCXVpbnQ2NAkJc2F2 ZV9jdXJfbGluZW5vID0gY3N0YXRlLT5jdXJfbGluZW5vOwotCQlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7Ci0KLQkJQXNzZXJ0KGJ1ZmZlci0+YmlzdGF0ZSAhPSBOVUxMKTsKIAogCQkvKgogCQkg KiBQcmludCBlcnJvciBjb250ZXh0IGluZm9ybWF0aW9uIGNvcnJlY3RseSwgaWYgb25lIG9mIHRo ZSBvcGVyYXRpb25zCkBAIC00MDQsNTYgKzQzMSwxMiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJG bHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJCSAqLwogCQljc3RhdGUtPmxpbmVf YnVmX3ZhbGlkID0gZmFsc2U7CiAKKwkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaChidWZmZXIt Pm1zdGF0ZSk7CisKIAkJLyoKLQkJICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9y eSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQotCQkgKiBjb250ZXh0IGJlZm9yZSBj YWxsaW5nIGl0LgorCQkgKiBJbmRleGVzIGFyZSB1cGRhdGVkIGFuZCBBRlRFUiBST1cgSU5TRVJU IHRyaWdnZXJzIChpZiBhbnkpIGFyZSBydW4KKwkJICogaW4gdGhlIGZsdXNoIGNhbGxiYWNrIENv cHlNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrLgogCQkgKi8KLQkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7Ci0JCXRh YmxlX211bHRpX2luc2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkg ICBzbG90cywKLQkJCQkJCSAgIG51c2VkLAotCQkJCQkJICAgbXljaWQsCi0JCQkJCQkgICB0aV9v cHRpb25zLAotCQkJCQkJICAgYnVmZmVyLT5iaXN0YXRlKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBudXNlZDsgaSsrKQotCQl7Ci0J CQkvKgotCQkJICogSWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhlbSBmb3IgYWxs IHRoZSBpbnNlcnRlZAotCQkJICogdHVwbGVzLCBhbmQgcnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJp Z2dlcnMuCi0JCQkgKi8KLQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCkK LQkJCXsKLQkJCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKLQotCQkJCWNzdGF0ZS0+Y3VyX2xp bmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKLQkJCQlyZWNoZWNrSW5kZXhlcyA9Ci0JCQkJCUV4 ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJCSAgYnVmZmVyLT5z bG90c1tpXSwgZXN0YXRlLCBmYWxzZSwKLQkJCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZh bHNlKTsKLQkJCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCi0J CQkJCQkJCQkgc2xvdHNbaV0sIHJlY2hlY2tJbmRleGVzLAotCQkJCQkJCQkJIGNzdGF0ZS0+dHJh bnNpdGlvbl9jYXB0dXJlKTsKLQkJCQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOwotCQkJfQot Ci0JCQkvKgotCQkJICogVGhlcmUncyBubyBpbmRleGVzLCBidXQgc2VlIGlmIHdlIG5lZWQgdG8g cnVuIEFGVEVSIFJPVyBJTlNFUlQKLQkJCSAqIHRyaWdnZXJzIGFueXdheS4KLQkJCSAqLwotCQkJ ZWxzZSBpZiAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgotCQkJCQkgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKLQkJCQkJ ICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkKLQkJ CXsKLQkJCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxpbmVub3NbaV07Ci0JCQkJRXhl Y0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJIHNsb3Rz W2ldLCBOSUwsCi0JCQkJCQkJCQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1cmUpOwotCQkJfQot Ci0JCQlFeGVjQ2xlYXJUdXBsZShzbG90c1tpXSk7Ci0JCX0KIAogCQkvKiBVcGRhdGUgdGhlIHJv dyBjb3VudGVyIGFuZCBwcm9ncmVzcyBvZiB0aGUgQ09QWSBjb21tYW5kICovCiAJCSpwcm9jZXNz ZWQgKz0gbnVzZWQ7CkBAIC00NjksNiArNDUyLDY0IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckZs dXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIAlidWZmZXItPm51c2VkID0gMDsKIH0K IAorc3RhdGljIHZvaWQKK0NvcHlNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrKHZvaWQgKmNvbnRl eHQsIFR1cGxlVGFibGVTbG90ICoqc2xvdHMsIGludCBuc2xvdHMpCit7CisJQ29weU1vZGlmeUJ1 ZmZlckZsdXNoQ29udGV4dCAqY3R4ID0gKENvcHlNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKikg Y29udGV4dDsKKwlDb3B5RnJvbVN0YXRlIGNzdGF0ZSA9IGN0eC0+Y3N0YXRlOworCVJlc3VsdFJl bEluZm8gKnJlc3VsdFJlbEluZm8gPSBjdHgtPnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICpl c3RhdGUgPSBjdHgtPmVzdGF0ZTsKKwlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJl c3VsdFJlbEluZm8tPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKKwlpbnQJCQlpOworCisJaWYg KG5zbG90cyA8PSAwKQorCQlyZXR1cm47CisKKwkvKiBRdWljayBleGl0IGlmIG5vIGluZGV4ZXMg b3Igbm8gdHJpZ2dlcnMgKi8KKwlpZiAoIShyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4g MCB8fAorCQkgIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCSAgIChy ZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8CisJCQly ZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkpKQorCQly ZXR1cm47CisKKwkvKiBDYWxsZXIgbXVzdCB0YWtlIGNhcmUgb2Ygb3BlbmluZyBhbmQgY2xvc2lu ZyB0aGUgaW5kaWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBuc2xvdHM7IGkrKykKKwl7CisJCS8q CisJCSAqIElmIHRoZXJlIGFyZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9yIGFsbCB0aGUg aW5zZXJ0ZWQgdHVwbGVzLAorCQkgKiBhbmQgcnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMu CisJCSAqLworCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJCXsKKwkJ CUxpc3QJICAgKnJlY2hlY2tJbmRleGVzOworCisJCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZm ZXItPmxpbmVub3NbaV07CisJCQlyZWNoZWNrSW5kZXhlcyA9CisJCQkJRXhlY0luc2VydEluZGV4 VHVwbGVzKHJlc3VsdFJlbEluZm8sCisJCQkJCQkJCQkgIHNsb3RzW2ldLCBlc3RhdGUsIGZhbHNl LAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgTklMLCBmYWxzZSk7CisJCQlFeGVjQVJJbnNlcnRU cmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJCSBzbG90c1tpXSwgcmVjaGVj a0luZGV4ZXMsCisJCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CisJCQlsaXN0 X2ZyZWUocmVjaGVja0luZGV4ZXMpOworCQl9CisKKwkJLyoKKwkJICogVGhlcmUncyBubyBpbmRl eGVzLCBidXQgc2VlIGlmIHdlIG5lZWQgdG8gcnVuIEFGVEVSIFJPVyBJTlNFUlQKKwkJICogdHJp Z2dlcnMgYW55d2F5LgorCQkgKi8KKwkJZWxzZSBpZiAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rl c2MgIT0gTlVMTCAmJgorCQkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5z ZXJ0X2FmdGVyX3JvdyB8fAorCQkJCSAgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdf aW5zZXJ0X25ld190YWJsZSkpCisJCXsKKwkJCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IGJ1ZmZlci0+ bGluZW5vc1tpXTsKKwkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5m bywKKwkJCQkJCQkJIHNsb3RzW2ldLCBOSUwsCisJCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25f Y2FwdHVyZSk7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBEcm9wIHVzZWQgc2xvdHMgYW5kIGZyZWUg bWVtYmVyIGZvciB0aGlzIGJ1ZmZlci4KICAqCkBAIC00ODksMTkgKzUzMCwxOCBAQCBDb3B5TXVs dGlJbnNlcnRCdWZmZXJDbGVhbnVwKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIAogCWlm IChyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCiAJewotCQlBc3NlcnQoYnVm ZmVyLT5iaXN0YXRlICE9IE5VTEwpOwotCQlGcmVlQnVsa0luc2VydFN0YXRlKGJ1ZmZlci0+Ymlz dGF0ZSk7CisJCXRhYmxlX21vZGlmeV9lbmQoYnVmZmVyLT5tc3RhdGUpOworCQlFeGVjRHJvcFNp bmdsZVR1cGxlVGFibGVTbG90KGJ1ZmZlci0+bXVsdGlzbG90KTsKKwkJcGZyZWUoYnVmZmVyLT5t b2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOwogCX0KIAllbHNlCi0JCUFzc2VydChidWZmZXIt PmJpc3RhdGUgPT0gTlVMTCk7Ci0KLQkvKiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBk ZW1hbmQsIGp1c3QgZHJvcCB0aGUgbm9uLW51bGwgb25lcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwg TUFYX0JVRkZFUkVEX1RVUExFUyAmJiBidWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKLQkJ RXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChidWZmZXItPnNsb3RzW2ldKTsKKwl7CisJCS8q IFNpbmNlIHdlIG9ubHkgY3JlYXRlIHNsb3RzIG9uIGRlbWFuZCwganVzdCBkcm9wIHRoZSBub24t bnVsbCBvbmVzLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZFUkVEX1RVUExFUyAmJiBi dWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJs ZVNsb3QoYnVmZmVyLT5zbG90c1tpXSk7CiAKLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91 dGluZSA9PSBOVUxMKQotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQocmVzdWx0UmVsSW5mby0+ cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgbWlpbmZvLT50aV9vcHRpb25zKTsKKwkJcGZyZWUo YnVmZmVyLT5zbG90cyk7CisJfQogCiAJcGZyZWUoYnVmZmVyKTsKIH0KQEAgLTU4OCwxMyArNjI4 LDMyIEBAIENvcHlNdWx0aUluc2VydEluZm9OZXh0RnJlZVNsb3QoQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvLAogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9D b3B5TXVsdGlJbnNlcnRCdWZmZXI7CiAJaW50CQkJbnVzZWQgPSBidWZmZXItPm51c2VkOworCVR1 cGxlVGFibGVTbG90ICpzbG90OwogCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKIAlBc3NlcnQo bnVzZWQgPCBNQVhfQlVGRkVSRURfVFVQTEVTKTsKIAotCWlmIChidWZmZXItPnNsb3RzW251c2Vk XSA9PSBOVUxMKQotCQlidWZmZXItPnNsb3RzW251c2VkXSA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJy aS0+cmlfUmVsYXRpb25EZXNjLCBOVUxMKTsKLQlyZXR1cm4gYnVmZmVyLT5zbG90c1tudXNlZF07 CisJaWYgKHJyaS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQorCXsKKwkJaWYgKGJ1ZmZlci0+bXVs dGlzbG90ID09IE5VTEwpCisJCQlidWZmZXItPm11bHRpc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xv dChSZWxhdGlvbkdldERlc2NyKHJyaS0+cmlfUmVsYXRpb25EZXNjKSwKKwkJCQkJCQkJCQkJCSAg ICZUVFNPcHNWaXJ0dWFsKTsKKworCQkvKiBDYWxsZXIgbXVzdCBjbGVhciB0aGUgc2xvdCAqLwor CQlzbG90ID0gYnVmZmVyLT5tdWx0aXNsb3Q7CisJfQorCWVsc2UKKwl7CisJCWlmIChidWZmZXIt PnNsb3RzW251c2VkXSA9PSBOVUxMKQorCQl7CisJCQlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUo cnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOworCQkJYnVmZmVyLT5zbG90c1tudXNlZF0gPSBz bG90OworCQl9CisJCWVsc2UKKwkJCXNsb3QgPSBidWZmZXItPnNsb3RzW251c2VkXTsKKwl9CisK KwlyZXR1cm4gc2xvdDsKIH0KIAogLyoKQEAgLTYwOCw3ICs2NjcsMTcgQEAgQ29weU11bHRpSW5z ZXJ0SW5mb1N0b3JlKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAq cnJpLAogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJ bnNlcnRCdWZmZXI7CiAKIAlBc3NlcnQoYnVmZmVyICE9IE5VTEwpOwotCUFzc2VydChzbG90ID09 IGJ1ZmZlci0+c2xvdHNbYnVmZmVyLT5udXNlZF0pOworCisJaWYgKHJyaS0+cmlfRmR3Um91dGlu ZSA9PSBOVUxMKQorCXsKKwkJQXNzZXJ0KHNsb3QgPT0gYnVmZmVyLT5tdWx0aXNsb3QpOworCQl0 YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChidWZmZXItPm1zdGF0ZSwgc2xvdCk7CisJfQorCisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWlmIChycmktPnJpX0Zkd1JvdXRpbmUgIT0gTlVM TCkKKwkJQXNzZXJ0KHNsb3QgPT0gYnVmZmVyLT5zbG90c1tidWZmZXItPm51c2VkXSk7CisjZW5k aWYKIAogCS8qIFN0b3JlIHRoZSBsaW5lIG51bWJlciBzbyB3ZSBjYW4gcHJvcGVybHkgcmVwb3J0 IGFueSBlcnJvcnMgbGF0ZXIgKi8KIAlidWZmZXItPmxpbmVub3NbYnVmZmVyLT5udXNlZF0gPSBs aW5lbm87CkBAIC04MzAsNyArODk5LDcgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUp CiAJLyoKIAkgKiBJdCdzIGdlbmVyYWxseSBtb3JlIGVmZmljaWVudCB0byBwcmVwYXJlIGEgYnVu Y2ggb2YgdHVwbGVzIGZvcgogCSAqIGluc2VydGlvbiwgYW5kIGluc2VydCB0aGVtIGluIG9uZQot CSAqIHRhYmxlX211bHRpX2luc2VydCgpL0V4ZWNGb3JlaWduQmF0Y2hJbnNlcnQoKSBjYWxsLCB0 aGFuIGNhbGwKKwkgKiB0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydCgpL0V4ZWNGb3JlaWduQmF0 Y2hJbnNlcnQoKSBjYWxsLCB0aGFuIGNhbGwKIAkgKiB0YWJsZV90dXBsZV9pbnNlcnQoKS9FeGVj Rm9yZWlnbkluc2VydCgpIHNlcGFyYXRlbHkgZm9yIGV2ZXJ5IHR1cGxlLgogCSAqIEhvd2V2ZXIs IHRoZXJlIGFyZSBhIG51bWJlciBvZiByZWFzb25zIHdoeSB3ZSBtaWdodCBub3QgYmUgYWJsZSB0 byBkbwogCSAqIHRoaXMuICBUaGVzZSBhcmUgZXhwbGFpbmVkIGJlbG93LgpAQCAtMTA4MCw3ICsx MTQ5LDggQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJewogCQkJCQlpZiAo cmVzdWx0UmVsSW5mby0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyID09IE5VTEwpCiAJCQkJCQlD b3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoJm11bHRpSW5zZXJ0SW5mbywKLQkJCQkJCQkJ CQkJCQkgICByZXN1bHRSZWxJbmZvKTsKKwkJCQkJCQkJCQkJCQkgICByZXN1bHRSZWxJbmZvLCBj c3RhdGUsCisJCQkJCQkJCQkJCQkJICAgZXN0YXRlKTsKIAkJCQl9CiAJCQkJZWxzZSBpZiAoaW5z ZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05BTCAmJgogCQkJCQkJICFDb3B5TXVsdGlJ bnNlcnRJbmZvSXNFbXB0eSgmbXVsdGlJbnNlcnRJbmZvKSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9j b3B5ZnJvbV9pbnRlcm5hbC5oCmluZGV4IGNhZDUyZmNjNzguLjE0YWRkYmM2ZjYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaApAQCAtNDYsOSArNDYsOSBAQCB0eXBl ZGVmIGVudW0gRW9sVHlwZQogdHlwZWRlZiBlbnVtIENvcHlJbnNlcnRNZXRob2QKIHsKIAlDSU1f U0lOR0xFLAkJCQkJLyogdXNlIHRhYmxlX3R1cGxlX2luc2VydCBvciBFeGVjRm9yZWlnbkluc2Vy dCAqLwotCUNJTV9NVUxUSSwJCQkJCS8qIGFsd2F5cyB1c2UgdGFibGVfbXVsdGlfaW5zZXJ0IG9y CisJQ0lNX01VTFRJLAkJCQkJLyogYWx3YXlzIHVzZSB0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2Vy dCBvcgogCQkJCQkJCQkgKiBFeGVjRm9yZWlnbkJhdGNoSW5zZXJ0ICovCi0JQ0lNX01VTFRJX0NP TkRJVElPTkFMLAkJLyogdXNlIHRhYmxlX211bHRpX2luc2VydCBvcgorCUNJTV9NVUxUSV9DT05E SVRJT05BTCwJCS8qIHVzZSB0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydCBvcgogCQkJCQkJCQkg KiBFeGVjRm9yZWlnbkJhdGNoSW5zZXJ0IG9ubHkgaWYgdmFsaWQgKi8KIH0gQ29weUluc2VydE1l dGhvZDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA3MGYyMzgwOGUyLi5iZDhjODdi ZTMzIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDg2LDYgKzQ4Niw3IEBAIENvcHlI ZWFkZXJDaG9pY2UKIENvcHlJbnNlcnRNZXRob2QKIENvcHlNZXRob2QKIENvcHlMb2dWZXJib3Np dHlDaG9pY2UKK0NvcHlNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQKIENvcHlNdWx0aUluc2VydEJ1 ZmZlcgogQ29weU11bHRpSW5zZXJ0SW5mbwogQ29weU9uRXJyb3JDaG9pY2UKLS0gCjIuMzQuMQoK --0000000000006c82be0616d71b4b Content-Type: application/x-patch; name="v19-0006-Remove-table_multi_insert-and-table_finish_bulk_.patch" Content-Disposition: attachment; filename="v19-0006-Remove-table_multi_insert-and-table_finish_bulk_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvdrj55p5 RnJvbSAxYjVkM2MwNGYyMWU3NjQ3NTZmODlmMDQ1NmQwZjk2ZTJiMjM1MGRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjMgQXByIDIwMjQgMDU6MjU6MjEgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxOSA2LzZdIFJlbW92ZSB0YWJsZV9tdWx0aV9pbnNlcnQgYW5k CiB0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyB8ICAxIC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFt YXBpLmMgICAgfCAgMSAtCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAg IHwgIDQgLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgfCA1NiAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyks IDYxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CmluZGV4IGVkYTBjNzNhMTYuLmZlOTcwMTc3M2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYwpAQCAtMjYxNCw3ICsyNjE0LDYgQEAgc3RhdGljIGNvbnN0IFRhYmxl QW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVw bGVfaW5zZXJ0LAogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5z ZXJ0X3NwZWN1bGF0aXZlLAogCS50dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSA9IGhlYXBhbV90 dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSwKLQkubXVsdGlfaW5zZXJ0ID0gaGVhcF9tdWx0aV9p bnNlcnQsCiAKIAkudHVwbGVfbW9kaWZ5X2JlZ2luID0gaGVhcF9tb2RpZnlfYmVnaW4sCiAJLnR1 cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0ID0gaGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydCwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4IDk2YWM5NTFhZjYuLjBhZjhmMWFj MWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpAQCAtNzEsNyArNzEsNiBA QCBHZXRUYWJsZUFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT50dXBs ZV9pbnNlcnRfc3BlY3VsYXRpdmUgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2Nv bXBsZXRlX3NwZWN1bGF0aXZlICE9IE5VTEwpOwogCi0JQXNzZXJ0KHJvdXRpbmUtPm11bHRpX2lu c2VydCAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+dHVwbGVfZGVsZXRlICE9IE5VTEwpOwog CUFzc2VydChyb3V0aW5lLT50dXBsZV91cGRhdGUgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUt PnR1cGxlX2xvY2sgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDBjOTg0 YWE2NTYuLjIyYmNiMTJhYmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0yMDk2OSw4 ICsyMDk2OSw2IEBAIGRlbGV0ZVNwbGl0UGFydGl0aW9uQ29udGV4dChTcGxpdFBhcnRpdGlvbkNv bnRleHQgKnBjLCBpbnQgdGlfb3B0aW9ucykKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90 KHBjLT5kc3RzbG90KTsKIAlGcmVlQnVsa0luc2VydFN0YXRlKHBjLT5iaXN0YXRlKTsKIAotCXRh YmxlX2ZpbmlzaF9idWxrX2luc2VydChwYy0+cGFydFJlbCwgdGlfb3B0aW9ucyk7Ci0KIAlwZnJl ZShwYyk7CiB9CiAKQEAgLTIxNDUzLDggKzIxNDUxLDYgQEAgbW92ZU1lcmdlZFRhYmxlc1Jvd3Mo UmVsYXRpb24gcmVsLCBMaXN0ICptZXJnaW5nUGFydGl0aW9uc0xpc3QsCiAKIAlFeGVjRHJvcFNp bmdsZVR1cGxlVGFibGVTbG90KGRzdHNsb3QpOwogCUZyZWVCdWxrSW5zZXJ0U3RhdGUoYmlzdGF0 ZSk7Ci0KLQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQobmV3UGFydFJlbCwgdGlfb3B0aW9ucyk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBkZGI2ZTZmM2E1Li44Mjc5OGZkNjQxIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy90YWJsZWFtLmgKQEAgLTU2MywxMCArNTYzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFi bGVBbVJvdXRpbmUKIAkJCQkJCQkJCQkJICAgdWludDMyIHNwZWNUb2tlbiwKIAkJCQkJCQkJCQkJ ICAgYm9vbCBzdWNjZWVkZWQpOwogCi0JLyogc2VlIHRhYmxlX211bHRpX2luc2VydCgpIGZvciBy ZWZlcmVuY2UgYWJvdXQgcGFyYW1ldGVycyAqLwotCXZvaWQJCSgqbXVsdGlfaW5zZXJ0KSAoUmVs YXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbnNsb3RzLAotCQkJCQkJCQkg Q29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpi aXN0YXRlKTsKLQogCS8qIHNlZSB0YWJsZV90dXBsZV9kZWxldGUoKSBmb3IgcmVmZXJlbmNlIGFi b3V0IHBhcmFtZXRlcnMgKi8KIAlUTV9SZXN1bHQJKCp0dXBsZV9kZWxldGUpIChSZWxhdGlvbiBy ZWwsCiAJCQkJCQkJCSBJdGVtUG9pbnRlciB0aWQsCkBAIC02MDAsMjEgKzU5Niw2IEBAIHR5cGVk ZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJICAgdWludDggZmxhZ3MsCiAJCQkJCQkJ ICAgVE1fRmFpbHVyZURhdGEgKnRtZmQpOwogCi0JLyoKLQkgKiBQZXJmb3JtIG9wZXJhdGlvbnMg bmVjZXNzYXJ5IHRvIGNvbXBsZXRlIGluc2VydGlvbnMgbWFkZSB2aWEKLQkgKiB0dXBsZV9pbnNl cnQgYW5kIG11bHRpX2luc2VydCB3aXRoIGEgQnVsa0luc2VydFN0YXRlIHNwZWNpZmllZC4gSW4t dHJlZQotCSAqIGFjY2VzcyBtZXRob2RzIGNlYXNlZCB0byB1c2UgdGhpcy4KLQkgKgotCSAqIFR5 cGljYWxseSBjYWxsZXJzIG9mIHR1cGxlX2luc2VydCBhbmQgbXVsdGlfaW5zZXJ0IHdpbGwganVz dCBwYXNzIGFsbAotCSAqIHRoZSBmbGFncyB0aGF0IGFwcGx5IHRvIHRoZW0sIGFuZCBlYWNoIEFN IGhhcyB0byBkZWNpZGUgd2hpY2ggb2YgdGhlbQotCSAqIG1ha2Ugc2Vuc2UgZm9yIGl0LCBhbmQg dGhlbiBvbmx5IHRha2UgYWN0aW9ucyBpbiBmaW5pc2hfYnVsa19pbnNlcnQgZm9yCi0JICogdGhv c2UgZmxhZ3MsIGFuZCBpZ25vcmUgb3RoZXJzLgotCSAqCi0JICogT3B0aW9uYWwgY2FsbGJhY2su Ci0JICovCi0Jdm9pZAkJKCpmaW5pc2hfYnVsa19pbnNlcnQpIChSZWxhdGlvbiByZWwsIGludCBv cHRpb25zKTsKLQotCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogVGFibGUgTW9kaWZ5IHJlbGF0 ZWQgZnVuY3Rpb25zLgogCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQ1Myw4ICsxNDM0LDcgQEAg dGFibGVfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsIFRNX0luZGV4RGVsZXRlT3Ag KmRlbHN0YXRlKQogICogaGVhcCdzIFRPQVNUIHRhYmxlLCB0b28sIGlmIHRoZSB0dXBsZSByZXF1 aXJlcyBhbnkgb3V0LW9mLWxpbmUgZGF0YS4KICAqCiAgKiBUaGUgQnVsa0luc2VydFN0YXRlIG9i amVjdCAoaWYgYW55OyBiaXN0YXRlIGNhbiBiZSBOVUxMIGZvciBkZWZhdWx0Ci0gKiBiZWhhdmlv cikgaXMgYWxzbyBqdXN0IHBhc3NlZCB0aHJvdWdoIHRvIFJlbGF0aW9uR2V0QnVmZmVyRm9yVHVw bGUuIElmCi0gKiBgYmlzdGF0ZWAgaXMgcHJvdmlkZWQsIHRhYmxlX2ZpbmlzaF9idWxrX2luc2Vy dCgpIG5lZWRzIHRvIGJlIGNhbGxlZC4KKyAqIGJlaGF2aW9yKSBpcyBhbHNvIGp1c3QgcGFzc2Vk IHRocm91Z2ggdG8gUmVsYXRpb25HZXRCdWZmZXJGb3JUdXBsZS4KICAqCiAgKiBPbiByZXR1cm4g dGhlIHNsb3QncyB0dHNfdGlkIGFuZCB0dHNfdGFibGVPaWQgYXJlIHVwZGF0ZWQgdG8gcmVmbGVj dCB0aGUKICAqIGluc2VydGlvbi4gQnV0IG5vdGUgdGhhdCBhbnkgdG9hc3Rpbmcgb2YgZmllbGRz IHdpdGhpbiB0aGUgc2xvdCBpcyBOT1QKQEAgLTE1MDEsMjggKzE0ODEsNiBAQCB0YWJsZV90dXBs ZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZShSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICpzbG90 LAogCQkJCQkJCQkJCQkJc3VjY2VlZGVkKTsKIH0KIAotLyoKLSAqIEluc2VydCBtdWx0aXBsZSB0 dXBsZXMgaW50byBhIHRhYmxlLgotICoKLSAqIFRoaXMgaXMgbGlrZSB0YWJsZV90dXBsZV9pbnNl cnQoKSwgYnV0IGluc2VydHMgbXVsdGlwbGUgdHVwbGVzIGluIG9uZQotICogb3BlcmF0aW9uLiBU aGF0J3Mgb2Z0ZW4gZmFzdGVyIHRoYW4gY2FsbGluZyB0YWJsZV90dXBsZV9pbnNlcnQoKSBpbiBh IGxvb3AsCi0gKiBiZWNhdXNlIGUuZy4gdGhlIEFNIGNhbiByZWR1Y2UgV0FMIGxvZ2dpbmcgYW5k IHBhZ2UgbG9ja2luZyBvdmVyaGVhZC4KLSAqCi0gKiBFeGNlcHQgZm9yIHRha2luZyBgbnNsb3Rz YCB0dXBsZXMgYXMgaW5wdXQsIGFuZCBhbiBhcnJheSBvZiBUdXBsZVRhYmxlU2xvdHMKLSAqIGlu IGBzbG90c2AsIHRoZSBwYXJhbWV0ZXJzIGZvciB0YWJsZV9tdWx0aV9pbnNlcnQoKSBhcmUgdGhl IHNhbWUgYXMgZm9yCi0gKiB0YWJsZV90dXBsZV9pbnNlcnQoKS4KLSAqCi0gKiBOb3RlOiB0aGlz IGxlYWtzIG1lbW9yeSBpbnRvIHRoZSBjdXJyZW50IG1lbW9yeSBjb250ZXh0LiBZb3UgY2FuIGNy ZWF0ZSBhCi0gKiB0ZW1wb3JhcnkgY29udGV4dCBiZWZvcmUgY2FsbGluZyB0aGlzLCBpZiB0aGF0 J3MgYSBwcm9ibGVtLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLXRhYmxlX211bHRpX2luc2Vy dChSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICoqc2xvdHMsIGludCBuc2xvdHMsCi0JCQkJ ICAgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRh ICpiaXN0YXRlKQotewotCXJlbC0+cmRfdGFibGVhbS0+bXVsdGlfaW5zZXJ0KHJlbCwgc2xvdHMs IG5zbG90cywKLQkJCQkJCQkJICBjaWQsIG9wdGlvbnMsIGJpc3RhdGUpOwotfQotCiAvKgogICog RGVsZXRlIGEgdHVwbGUuCiAgKgpAQCAtMTY0OSwxOCArMTYwNyw2IEBAIHRhYmxlX3R1cGxlX2xv Y2soUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsIFNuYXBzaG90IHNuYXBzaG90LAogCQkJ CQkJCQkJICAgZmxhZ3MsIHRtZmQpOwogfQogCi0vKgotICogUGVyZm9ybSBvcGVyYXRpb25zIG5l Y2Vzc2FyeSB0byBjb21wbGV0ZSBpbnNlcnRpb25zIG1hZGUgdmlhCi0gKiB0dXBsZV9pbnNlcnQg YW5kIG11bHRpX2luc2VydCB3aXRoIGEgQnVsa0luc2VydFN0YXRlIHNwZWNpZmllZC4KLSAqLwot c3RhdGljIGlubGluZSB2b2lkCi10YWJsZV9maW5pc2hfYnVsa19pbnNlcnQoUmVsYXRpb24gcmVs LCBpbnQgb3B0aW9ucykKLXsKLQkvKiBvcHRpb25hbCBjYWxsYmFjayAqLwotCWlmIChyZWwtPnJk X3RhYmxlYW0gJiYgcmVsLT5yZF90YWJsZWFtLT5maW5pc2hfYnVsa19pbnNlcnQpCi0JCXJlbC0+ cmRfdGFibGVhbS0+ZmluaXNoX2J1bGtfaW5zZXJ0KHJlbCwgb3B0aW9ucyk7Ci19Ci0KIC8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICogVGFibGUgTW9kaWZ5IHJlbGF0ZWQgZnVuY3Rpb25zLgogICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0tIAoyLjM0LjEKCg== --0000000000006c82be0616d71b4b--