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 1sEkp2-003PhJ-FY for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Jun 2024 07:12:38 +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 1sEkp2-005zrC-HK for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Jun 2024 07:12:36 +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 1sEkp1-005zr3-LW for pgsql-hackers@lists.postgresql.org; Wed, 05 Jun 2024 07:12:36 +0000 Received: from mail-lj1-x22d.google.com ([2a00:1450:4864:20::22d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sEkoy-003Xjl-Hr for pgsql-hackers@postgresql.org; Wed, 05 Jun 2024 07:12:34 +0000 Received: by mail-lj1-x22d.google.com with SMTP id 38308e7fff4ca-2ea8fff1486so5625661fa.1 for ; Wed, 05 Jun 2024 00:12:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717571551; x=1718176351; 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=L72qiXjLbcu5pyD1sJSMPu+4OELCyU7yy2osET11AjQ=; b=WV4io091gcBsHi978Zh1skjDOcViwrvUxIKLDTaQFZjxrnPL4X7AY2fPE35yZiGztg pJZcmMN+BN7QQR9ZIQjAzKxlzHsD7n9uOSKGvuC4a/5bwfjnH8+dGSqdi98+X84kYb30 IVWyYwaQS4Re5hxhCq1W54knUsNLN0ehWbP91+fkXXbThDZaKuY5nIBMygZMRvnDxXMI dM8xpdEREgMk8FWqHZewJu9AdUMp5Nd7WM6e2W1nGW/mlrYz4oYkDhrtuXZG5/VFyxFF RnNoQo1CMXOJI6vKHrgfvnNBus1336Y+wjRLCQuhzdU6zy2wkMxY/J/5xREG4Rsmzpo4 zDRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717571551; x=1718176351; 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=L72qiXjLbcu5pyD1sJSMPu+4OELCyU7yy2osET11AjQ=; b=oN/zfQ8x1R+EWZICfR8iaKK7GpenG7nrhfm2vPKapEDPRejllKpLU4KmxLx14gd+lX eYiP/oJf8OuloXwgP7xFaKo834LNLdS9wy5dPtAWj66JuoKgn9QGb1K8sgixvYNmRZ/+ PKWw+/uC+gZxixNxXnOgxDn2XShwG2PAF66mZ9v7X3vpeaetuMOWidzoRJP7n19yri6V hrztEIGrNDJjNDZ03eja754xv0WB1K/cQjR+66DnuPoMNutsJielgODL5KULIJtIEAta GI3CKRVcFgg8xi8fJGTHssR9WIg2Nm5c3FlR3QbP5IGLzaN5YoUxon8PXf3DtYUsjl0t ZQ2g== X-Forwarded-Encrypted: i=1; AJvYcCXYO9Db1X2Yk12PyoQuE10YS9H5g/la3NgcOtIr9X4j2J/PEMuiEe163vRf93hNv2qn6Vm4mCYMkfAphJAqOU3Z2M9XCn/jSAuItwrt X-Gm-Message-State: AOJu0YxrIieq9CgjM5g41bm/0HgxiWsu7ECKwwxur/eR6Kyzbr/5TDAd WWLRs+SqGKjxEMVtIj+oxcxidTk55wLQQyCVB8PEZtrdR8lgdlfQC3L7WFVV7IKOOWNEzhwgS3T Reqk+2QIeVeAQhgGRbHJSxYnBcow= X-Google-Smtp-Source: AGHT+IGLX6Q7yoRV4Tt/EfJ/52TN6Y3bX/vTefrsJzux09cssQ8ndwDEP7J0fp32cV/i2kkuV6QjL5FRUnZGees35Wc= X-Received: by 2002:a2e:7816:0:b0:2ea:ab3b:fd89 with SMTP id 38308e7fff4ca-2eabb777ca2mr13120491fa.10.1717571550617; Wed, 05 Jun 2024 00:12:30 -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> <229c4f7219ed164088dadc935df21e1cf125e191.camel@j-davis.com> In-Reply-To: <229c4f7219ed164088dadc935df21e1cf125e191.camel@j-davis.com> From: Bharath Rupireddy Date: Wed, 5 Jun 2024 12:42:17 +0530 Message-ID: Subject: Re: 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="00000000000026c178061a1f4a58" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000026c178061a1f4a58 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Thu, May 16, 2024 at 5:01=E2=80=AFAM Jeff Davis wrot= e: > > The flushing behavior is entirely controlled by the table AM. The heap > can use the same flushing logic that it did before, which is to hold > 1000 tuples. > > I like that it's accounting for memory, too, but it doesn't need to be > overly restrictive. Why not just use work_mem? That should hold 1000 > reasonably-sized tuples, plus overhead. > > Even better would be if we could take into account partitioning. That > might be out of scope for your current work, but it would be very > useful. We could have a couple new GUCs like modify_table_buffer and > modify_table_buffer_per_partition or something like that. I disagree with inventing more GUCs. Instead, I'd vote for just holding 1000 tuples in buffers for heap AM. This not only keeps the code and new table AM simple, but also does not cause regression for COPY. In my testing, 1000 tuples with 1 int and 1 float columns took 40000 bytes of memory (40 bytes each tuple), whereas with 1 int, 1 float and 1 text columns took 172000 bytes of memory (172 bytes each tuple) bytes which IMO mustn't be a big problem. Thoughts? > > 1. Try to get the actual tuple sizes excluding header sizes for each > > column in the new TAM. > > I don't see the point in arbitrarily excluding the header. > > > v21 also adds code to maintain tuple size for virtual tuple slots. > > This helps make better memory-based flushing decisions in the new > > TAM. > > That seems wrong. We shouldn't need to change the TupleTableSlot > structure for this patch. I dropped these ideas as I went ahead with the above idea of just holding 1000 tuples in buffers for heap AM. > Comments on v21: > > * All callers specify TM_FLAG_MULTI_INSERTS. What's the purpose? Previously, the multi insert state was initialized in modify_begin, so it was then required to differentiate the code path. But, it's not needed anymore with the lazy initialization of the multi insert state moved to modify_buffer_insert. I removed it. > * The only caller that doesn't use TM_FLAG_BAS_BULKWRITE is > ExecInsert(). What's the disadvantage to using a bulk insert state > there? The subsequent read queries will not find the just-now-inserted tuples in shared buffers as a separate ring buffer is used with bulk insert access strategy. The multi inserts is nothing but buffering multiple tuples plus inserting in bulk. So using the bulk insert strategy might be worth it for INSERT INTO SELECTs too. Thoughts? > * I'm a bit confused by TableModifyState->modify_end_callback. The AM > both sets the callback and calls the callback -- why can't the code > just go into the table_modify_end method? I came up with modify_end_callback as per the discussion upthread to use modify_begin, modify_end in future for UPDATE, DELETE and MERGE, and not use any operation specific flags to clean the state appropriately. The operation specific state cleaning logic can go to the modify_end_callback implementation defined by the AM. > * The code structure in table_modify_begin() (and related) is strange. > Can it be simplified or am I missing something? I previously defined these new table AMs as optional, check GetTableAmRoutine(). And, there was a point upthread to provide default/fallback implementation to help not fail insert operations on tables without the new table AMs implemented. FWIW, the default implementation was just doing the single inserts. The table_modify_begin and friends need the logic to fallback making the code there look different than other AMs. However, I now have a feeling to drop the idea of having fallback implementation and let the AMs deal with it. Although it might create some friction with various non-core AM implementations, it keeps this patch simple which I would vote for. Thoughts? > * Why are table_modify_state and insert_modify_buffer_flush_context > globals? What if there are multiple modify nodes in a plan? Can you please provide the case that can generate multiple "modify nodes" in a single plan? AFAICS, multiple "modify nodes" in a plan can exist for both partitioned tables and tables that get created as part of CTEs. I disabled multi inserts for both of these cases. The way I disabled for CTEs looks pretty naive - I just did the following. Any better suggestions here to deal with all such cases? + if (operation =3D=3D CMD_INSERT && + nodeTag(subplanstate) =3D=3D T_SeqScanState) + canMultiInsert =3D true; > * Can you explain the design in logical rep? Multi inserts for logical replication work at the table level. In other words, all tuple inserts related to a single table within a transaction are buffered and written to the corresponding table when necessary. Whenever inserts pertaining to another table arrive, the buffered tuples related to the previous table are written to the table before starting the buffering for the new table. Also, the tuples are written to the table from the buffer when there arrives a non-INSERT operation, for example, UPDATE/DELETE/TRUNCATE/COMMIT etc. FWIW, pglogical has the similar multi inserts logic - https://github.com/2ndQuadrant/pglogical/blob/REL2_x_STABLE/pglogical_apply= _heap.c#L879. Please find the v22 patches with the above changes. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --00000000000026c178061a1f4a58 Content-Type: application/x-patch; name="v22-0001-Introduce-new-Table-AM-for-multi-inserts.patch" Content-Disposition: attachment; filename="v22-0001-Introduce-new-Table-AM-for-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx0z1kz00 RnJvbSBlZTY3MTRlNzliZGNmZTNkMGUxMDRmODRjYWVlOGJkNGJlNzMwZGRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgNCBKdW4gMjAyNCAyMDowMjo1MiArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjIyIDEvNV0gSW50cm9kdWNlIG5ldyBUYWJsZSBBTSBmb3IgbXVs dGkgaW5zZXJ0cwoKVW50aWwgbm93LCBpdCdzIHRoZSBDT1BZIC4uLiBGUk9NIGNvbW1hbmQgdXNp bmcgbXVsdGkgaW5zZXJ0cwooaS5lLiBidWZmZXIgc29tZSB0dXBsZXMgYW5kIGluc2VydHMgdGhl bSB0byB0YWJsZSBhdCBvbmNlKS4KVmFyaW91cyBvdGhlciBjb21tYW5kcyBjYW4gYmVuZWZpdCBm cm9tIHRoaXMgbXVsdGkgaW5zZXJ0CmxvZ2ljIFtSZXVzYWJsZV0uCgpBbHNvLCB0aGVyZSdzIGEg bmVlZCB0byBoYXZlIHRoZXNlIG11bHRpIGluc2VydCBBTXMKKEFjY2VzcyBNZXRob2RzKSBhcyBz Y2FuLWxpa2UgQVBJIFtVc2FiaWxpdHldLgoKQWxzbywgdGhlcmUncyBhIG5lZWQgYWxsb3cgdmFy aW91cyB0YWJsZSBBTXMgZGVmaW5lIHRoZWlyIG93bgpidWZmZXJpbmcgYW5kIGZsdXNoaW5nIHN0 cmF0ZWd5IFtGbGV4aWJpbGl0eV0uCgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzLCBuZXcgdGFibGUg QU1zIGZvciBtdWx0aSBpbnNlcnRzIHRvIGhlbHAKYWNoaWV2ZSBhbGwgb2YgdGhlIGFib3ZlLgoK VXBjb21pbmcgY29tbWl0cyB3aWxsIGhhdmUgdGhlc2UgbmV3IHRhYmxlIEFNcyBiZWluZyB1c2Vk IGZvcgp2YXJpb3VzIG90aGVyIGNvbW1hbmRzLgoKQXV0aG9yOiBCaGFyYXRoIFJ1cGlyZWRkeQpS ZXZpZXdlZC1ieTogSmVmZiBEYXZpcwpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3Fs Lm9yZy9tZXNzYWdlLWlkLzIwMjAwOTI0MDI0MTI4Lmt5azNyNWc3ZG51M2Z4eHhAYWxhcDMuYW5h cmF6ZWwuZGUKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1p ZC9DQUxqMkFDVmk5ZVRSWVIlM0RnZGNhNXd4dGozS2tfOXE5cVZjY3hzUzFobmdUR09DalB3USU0 MG1haWwuZ21haWwuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvODYzMzE3MWNiMDM0YWFmYzI2MGZkZjM3ZGYwNGI2Yzc3OWFhMWUyZi5jYW1lbCU0 MGotZGF2aXMuY29tCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAg ICB8IDE5NyArKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyB8ICAgNiArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bWFwaS5jICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAg ICAgfCAgMzggKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAg fCAgODAgKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAg IHwgICAzICsKIDYgZmlsZXMgY2hhbmdlZCwgMzI4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IDgyYmI5Y2IzM2IuLmFhZjdhMjYzODkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAi c3RvcmFnZS9zdGFuZGJ5LmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1 dGlscy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRp bHMvc3BjY2FjaGUuaCIKQEAgLTExMiw3ICsxMTMsNyBAQCBzdGF0aWMgaW50CWJvdHRvbXVwX3Nv cnRfYW5kX3NocmluayhUTV9JbmRleERlbGV0ZU9wICpkZWxzdGF0ZSk7CiBzdGF0aWMgWExvZ1Jl Y1B0ciBsb2dfaGVhcF9uZXdfY2lkKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwKTsK IHN0YXRpYyBIZWFwVHVwbGUgRXh0cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlv biwgSGVhcFR1cGxlIHRwLCBib29sIGtleV9yZXF1aXJlZCwKIAkJCQkJCQkJCQlib29sICpjb3B5 KTsKLQorc3RhdGljIHZvaWQgaGVhcF9tb2RpZnlfaW5zZXJ0X2VuZF9jYWxsYmFjayhUYWJsZU1v ZGlmeVN0YXRlICpzdGF0ZSk7CiAKIC8qCiAgKiBFYWNoIHR1cGxlIGxvY2sgbW9kZSBoYXMgYSBj b3JyZXNwb25kaW5nIGhlYXZ5d2VpZ2h0IGxvY2ssIGFuZCBvbmUgb3IgdHdvCkBAIC0yNjExLDYg KzI2MTIsMjAwIEBAIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRh YmxlU2xvdCAqKnNsb3RzLCBpbnQgbnR1cGxlcywKIAlwZ3N0YXRfY291bnRfaGVhcF9pbnNlcnQo cmVsYXRpb24sIG50dXBsZXMpOwogfQogCisvKgorICogSW5pdGlhbGl6ZSBoZWFwIG1vZGlmeSBz dGF0ZS4KKyAqLworVGFibGVNb2RpZnlTdGF0ZSAqCitoZWFwX21vZGlmeV9iZWdpbihSZWxhdGlv biByZWwsIGludCBtb2RpZnlfZmxhZ3MsCisJCQkJICBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9u cywKKwkJCQkgIFRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjayBtb2RpZnlfYnVmZmVyX2Zs dXNoX2NhbGxiYWNrLAorCQkJCSAgdm9pZCAqbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0KQor eworCVRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlOworCU1lbW9yeUNvbnRleHQgY29udGV4dDsKKwlN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwljb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3Jl YXRlKFRvcFRyYW5zYWN0aW9uQ29udGV4dCwKKwkJCQkJCQkJCSJoZWFwX21vZGlmeSBtZW1vcnkg Y29udGV4dCIsCisJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dCk7CisJc3RhdGUgPSBwYWxsb2MwKHNp emVvZihUYWJsZU1vZGlmeVN0YXRlKSk7CisJc3RhdGUtPnJlbCA9IHJlbDsKKwlzdGF0ZS0+bW9k aWZ5X2ZsYWdzID0gbW9kaWZ5X2ZsYWdzOworCXN0YXRlLT5tZW1fY3h0ID0gY29udGV4dDsKKwlz dGF0ZS0+Y2lkID0gY2lkOworCXN0YXRlLT5vcHRpb25zID0gb3B0aW9uczsKKwlzdGF0ZS0+bW9k aWZ5X2J1ZmZlcl9mbHVzaF9jYWxsYmFjayA9IG1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2s7 CisJc3RhdGUtPm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCA9IG1vZGlmeV9idWZmZXJfZmx1 c2hfY29udGV4dDsKKwlzdGF0ZS0+bW9kaWZ5X2VuZF9jYWxsYmFjayA9IE5VTEw7CS8qIFRvIGJl IGluc3RhbGxlZCBsYXppbHkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBTdG9yZSBwYXNzZWQtaW4gdHVwbGUgaW50 byBpbi1tZW1vcnkgYnVmZmVyZWQgc2xvdHMuIFdoZW4gZnVsbCwgaW5zZXJ0CisgKiBtdWx0aXBs ZSB0dXBsZXMgZnJvbSB0aGUgYnVmZmVycyBpbnRvIGhlYXAuCisgKi8KK3ZvaWQKK2hlYXBfbW9k aWZ5X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkgIFR1cGxl VGFibGVTbG90ICpzbG90KQoreworCVR1cGxlVGFibGVTbG90ICpkc3RzbG90OworCUhlYXBJbnNl cnRTdGF0ZSAqaXN0YXRlOworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oc3RhdGUtPm1lbV9jeHQpOworCisJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXpl IGhlYXAgaW5zZXJ0IHN0YXRlICovCisJaWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJeworCQlp c3RhdGUgPSAoSGVhcEluc2VydFN0YXRlICopIHBhbGxvYzAoc2l6ZW9mKEhlYXBJbnNlcnRTdGF0 ZSkpOworCQlpc3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCQlpc3RhdGUtPm1pc3RhdGUgPSBOVUxM OworCQlzdGF0ZS0+ZGF0YSA9IGlzdGF0ZTsKKwkJbWlzdGF0ZSA9IChIZWFwTXVsdGlJbnNlcnRT dGF0ZSAqKSBwYWxsb2MwKHNpemVvZihIZWFwTXVsdGlJbnNlcnRTdGF0ZSkpOworCQltaXN0YXRl LT5zbG90cyA9IChUdXBsZVRhYmxlU2xvdCAqKikgcGFsbG9jMChzaXplb2YoVHVwbGVUYWJsZVNs b3QgKikgKiBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUyk7CisJCWlzdGF0ZS0+bWlzdGF0ZSA9IG1p c3RhdGU7CisJCW1pc3RhdGUtPm1lbV9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVu dE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkgImhlYXBfbXVsdGlfaW5zZXJ0IG1lbW9yeSBj b250ZXh0IiwKKwkJCQkJCQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCQlpZiAo KHN0YXRlLT5tb2RpZnlfZmxhZ3MgJiBUTV9GTEFHX0JBU19CVUxLV1JJVEUpICE9IDApCisJCQlp c3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKworCQlzdGF0ZS0+bW9kaWZ5 X2VuZF9jYWxsYmFjayA9IGhlYXBfbW9kaWZ5X2luc2VydF9lbmRfY2FsbGJhY2s7CisJfQorCisJ aXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0YTsKKwlBc3NlcnQoaXN0YXRl LT5taXN0YXRlICE9IE5VTEwpOworCW1pc3RhdGUgPSBpc3RhdGUtPm1pc3RhdGU7CisKKwlkc3Rz bG90ID0gbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXTsKKwlpZiAoZHN0c2xvdCA9 PSBOVUxMKQorCXsKKwkJLyoKKwkJICogV2UgdXNlIHZpcnR1YWwgdHVwbGUgc2xvdHMgYnVmZmVy ZWQgc2xvdHMgZm9yIGxldmVyYWdpbmcgdGhlCisJCSAqIG9wdGltaXphdGlvbiBpdCBwcm92aWRl cyB0byBtaW5pbWl6ZSBwaHlzaWNhbCBkYXRhIGNvcHlpbmcuIFRoZQorCQkgKiB2aXJ0dWFsIHNs b3QgZ2V0cyBtYXRlcmlhbGl6ZWQgd2hlbiB3ZSBjb3B5ICh2aWEgYmVsb3cKKwkJICogRXhlY0Nv cHlTbG90KSB0aGUgdHVwbGVzIGZyb20gdGhlIHNvdXJjZSBzbG90IHdoaWNoIGNhbiBiZSBvZiBh bnkKKwkJICogdHlwZS4gVGhpcyB3YXksIGl0IGlzIGVuc3VyZWQgdGhhdCB0aGUgdHVwbGUgc3Rv cmFnZSBkb2Vzbid0IGRlcGVuZAorCQkgKiBvbiBleHRlcm5hbCBtZW1vcnksIGJlY2F1c2UgYWxs IHRoZSBkYXR1bXMgdGhhdCBhcmVuJ3QgcGFzc2VkIGJ5CisJCSAqIHZhbHVlIGFyZSBjb3BpZWQg aW50byB0aGUgc2xvdCdzIG1lbW9yeSBjb250ZXh0LgorCQkgKi8KKwkJZHN0c2xvdCA9IE1ha2VU dXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKHN0YXRlLT5yZWwpLAorCQkJCQkJCQkJICZU VFNPcHNWaXJ0dWFsKTsKKwkJbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXSA9IGRz dHNsb3Q7CisJfQorCisJQXNzZXJ0KFRUU19JU19WSVJUVUFMKGRzdHNsb3QpKTsKKworCS8qCisJ ICogTm90ZSB0aGF0IHRoZSBjb3B5IGNsZWFycyB0aGUgcHJldmlvdXMgZGVzdGluYXRpb24gc2xv dCBjb250ZW50cywgc28KKwkgKiB0aGVyZSdzIG5vIG5lZWQgb2YgZXhwbGljaXQgRXhlY0NsZWFy VHVwbGUgaGVyZS4KKwkgKi8KKwlFeGVjQ29weVNsb3QoZHN0c2xvdCwgc2xvdCk7CisKKwltaXN0 YXRlLT5jdXJfc2xvdHMrKzsKKworCWlmIChtaXN0YXRlLT5jdXJfc2xvdHMgPj0gSEVBUF9NQVhf QlVGRkVSRURfU0xPVFMpCisJCWhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaChzdGF0ZSk7CisKKwlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBJbnNlcnQgbXVs dGlwbGUgdHVwbGVzIGZyb20gaW4tbWVtb3J5IGJ1ZmZlcmVkIHNsb3RzIGludG8gaGVhcC4KKyAq Lwordm9pZAoraGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRl KQoreworCUhlYXBJbnNlcnRTdGF0ZSAqaXN0YXRlOworCUhlYXBNdWx0aUluc2VydFN0YXRlICpt aXN0YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qIFF1aWNrIGV4aXQgaWYg d2UgaGF2ZW4ndCBpbnNlcnRlZCBhbnl0aGluZyB5ZXQgKi8KKwlpZiAoc3RhdGUtPmRhdGEgPT0g TlVMTCkKKwkJcmV0dXJuOworCisJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ ZGF0YTsKKwlBc3NlcnQoaXN0YXRlLT5taXN0YXRlICE9IE5VTEwpOworCW1pc3RhdGUgPSBpc3Rh dGUtPm1pc3RhdGU7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGhhdmUgZmx1c2hlZCBhbHJlYWR5 ICovCisJaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA9PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAq IGhlYXBfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9yeSwgc28gc3dpdGNoIHRvIHNob3J0LWxp dmVkIG1lbW9yeQorCSAqIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcgaXQuCisJICovCisJb2xkY29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhtaXN0YXRlLT5tZW1fY3h0KTsKKworCWhlYXBf bXVsdGlfaW5zZXJ0KHN0YXRlLT5yZWwsIG1pc3RhdGUtPnNsb3RzLCBtaXN0YXRlLT5jdXJfc2xv dHMsCisJCQkJCSAgc3RhdGUtPmNpZCwgc3RhdGUtPm9wdGlvbnMsIGlzdGF0ZS0+YmlzdGF0ZSk7 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dFJl c2V0KG1pc3RhdGUtPm1lbV9jeHQpOworCisJaWYgKHN0YXRlLT5tb2RpZnlfYnVmZmVyX2ZsdXNo X2NhbGxiYWNrICE9IE5VTEwpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IG1pc3RhdGUtPmN1 cl9zbG90czsgaSsrKQorCQkJc3RhdGUtPm1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2soc3Rh dGUtPm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCwKKwkJCQkJCQkJCQkJCW1pc3RhdGUtPnNs b3RzW2ldKTsKKwl9CisKKwltaXN0YXRlLT5jdXJfc2xvdHMgPSAwOworfQorCisvKgorICogSGVh cCBpbnNlcnQgc3BlY2lmaWMgY2FsbGJhY2sgdXNlZCBmb3IgcGVyZm9ybWluZyB3b3JrIGF0IHRo ZSBlbmQgbGlrZQorICogZmx1c2hpbmcgYnVmZmVyZWQgdHVwbGVzIGlmIGFueSwgY2xlYW5pbmcg dXAgdGhlIGluc2VydCBzdGF0ZSBhbmQgYnVmZmVyZWQKKyAqIHNsb3RzLgorICovCitzdGF0aWMg dm9pZAoraGVhcF9tb2RpZnlfaW5zZXJ0X2VuZF9jYWxsYmFjayhUYWJsZU1vZGlmeVN0YXRlICpz dGF0ZSkKK3sKKwlIZWFwSW5zZXJ0U3RhdGUgKmlzdGF0ZTsKKworCS8qIFF1aWNrIGV4aXQgaWYg d2UgaGF2ZW4ndCBpbnNlcnRlZCBhbnl0aGluZyB5ZXQgKi8KKwlpZiAoc3RhdGUtPmRhdGEgPT0g TlVMTCkKKwkJcmV0dXJuOworCisJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ ZGF0YTsKKworCWlmIChpc3RhdGUtPm1pc3RhdGUgIT0gTlVMTCkKKwl7CisJCUhlYXBNdWx0aUlu c2VydFN0YXRlICptaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCisJCWhlYXBfbW9kaWZ5X2J1 ZmZlcl9mbHVzaChzdGF0ZSk7CisKKwkJQXNzZXJ0KG1pc3RhdGUtPmN1cl9zbG90cyA9PSAwKTsK KworCQlmb3IgKGludCBpID0gMDsgaSA8IEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTICYmIG1pc3Rh dGUtPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNs b3QobWlzdGF0ZS0+c2xvdHNbaV0pOworCisJCU1lbW9yeUNvbnRleHREZWxldGUobWlzdGF0ZS0+ bWVtX2N4dCk7CisJfQorCisJaWYgKGlzdGF0ZS0+YmlzdGF0ZSAhPSBOVUxMKQorCQlGcmVlQnVs a0luc2VydFN0YXRlKGlzdGF0ZS0+YmlzdGF0ZSk7Cit9CisKKy8qCisgKiBDbGVhbiBoZWFwIG1v ZGlmeSBzdGF0ZS4KKyAqLwordm9pZAoraGVhcF9tb2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUg KnN0YXRlKQoreworCWlmIChzdGF0ZS0+bW9kaWZ5X2VuZF9jYWxsYmFjayAhPSBOVUxMKQorCQlz dGF0ZS0+bW9kaWZ5X2VuZF9jYWxsYmFjayhzdGF0ZSk7CisKKwlNZW1vcnlDb250ZXh0RGVsZXRl KHN0YXRlLT5tZW1fY3h0KTsKK30KKwogLyoKICAqCXNpbXBsZV9oZWFwX2luc2VydCAtIGluc2Vy dCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5k ZXggNmY4YjFiNzkyOS4uZWRhMGM3M2ExNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCkBAIC0yNjE1LDYgKzI2MTUsMTIgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1S b3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBo ZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLAogCS50dXBsZV9jb21wbGV0ZV9zcGVjdWxh dGl2ZSA9IGhlYXBhbV90dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSwKIAkubXVsdGlfaW5zZXJ0 ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisKKwkudHVwbGVfbW9kaWZ5X2JlZ2luID0gaGVhcF9tb2Rp ZnlfYmVnaW4sCisJLnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0ID0gaGVhcF9tb2RpZnlfYnVm ZmVyX2luc2VydCwKKwkudHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaCA9IGhlYXBfbW9kaWZ5X2J1 ZmZlcl9mbHVzaCwKKwkudHVwbGVfbW9kaWZ5X2VuZCA9IGhlYXBfbW9kaWZ5X2VuZCwKKwogCS50 dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVsZXRlLAogCS50dXBsZV91cGRhdGUgPSBoZWFw YW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1cGxlX2xvY2ssCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCBlOWI1OTgyNTZmLi43NzJmMjliMWI1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTk3LDYgKzk3LDExIEBA IEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPnNjYW5f c2FtcGxlX25leHRfYmxvY2sgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnNjYW5fc2FtcGxl X25leHRfdHVwbGUgIT0gTlVMTCk7CiAKKwlBc3NlcnQocm91dGluZS0+dHVwbGVfbW9kaWZ5X2Jl Z2luICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9tb2RpZnlfYnVmZmVyX2luc2Vy dCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaCAh PSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+dHVwbGVfbW9kaWZ5X2VuZCAhPSBOVUxMKTsKKwog CXJldHVybiByb3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggYzQ3YTUwNDVjZS4uMzZl YTNkNWQyYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMjcxLDYgKzI3MSwzMiBAQCB0eXBlZGVmIGVu dW0KIAlQUlVORV9WQUNVVU1fQ0xFQU5VUCwJCS8qIFZBQ1VVTSAybmQgaGVhcCBwYXNzICovCiB9 IFBydW5lUmVhc29uOwogCisvKgorICogTWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtdWx0 aS1pbnNlcnQgYnVmZmVycyBjYW4gaG9sZC4KKyAqCisgKiBDYXV0aW9uOiBEb24ndCBtYWtlIHRo aXMgdG9vIGJpZywgYXMgd2UgY291bGQgZW5kIHVwIHdpdGggdGhpcyBtYW55IHR1cGxlcworICog c3RvcmVkIGluIG11bHRpIGluc2VydCBidWZmZXIuCisgKi8KKyNkZWZpbmUgSEVBUF9NQVhfQlVG RkVSRURfU0xPVFMJCTEwMDAKKwordHlwZWRlZiBzdHJ1Y3QgSGVhcE11bHRpSW5zZXJ0U3RhdGUK K3sKKwkvKiBBcnJheSBvZiBidWZmZXJlZCBzbG90cyAqLworCVR1cGxlVGFibGVTbG90ICoqc2xv dHM7CisKKwkvKiBOdW1iZXIgb2YgYnVmZmVyZWQgc2xvdHMgY3VycmVudGx5IGhlbGQgKi8KKwlp bnQJCQljdXJfc2xvdHM7CisKKwlNZW1vcnlDb250ZXh0IG1lbV9jeHQ7Cit9IEhlYXBNdWx0aUlu c2VydFN0YXRlOworCit0eXBlZGVmIHN0cnVjdCBIZWFwSW5zZXJ0U3RhdGUKK3sKKwlzdHJ1Y3Qg QnVsa0luc2VydFN0YXRlRGF0YSAqYmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlz dGF0ZTsKK30gSGVhcEluc2VydFN0YXRlOworCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlm dW5jdGlvbiBwcm90b3R5cGVzIGZvciBoZWFwIGFjY2VzcyBtZXRob2QKICAqCkBAIC0zMjEsNiAr MzQ3LDE4IEBAIGV4dGVybiB2b2lkIGhlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFw VHVwbGUgdHVwLCBDb21tYW5kSWQgY2lkLAogZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNlcnQo UmVsYXRpb24gcmVsYXRpb24sIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLAogCQkJCQkJ CSAgaW50IG50dXBsZXMsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAogCQkJCQkJCSAgQnVs a0luc2VydFN0YXRlIGJpc3RhdGUpOworCitleHRlcm4gVGFibGVNb2RpZnlTdGF0ZSAqaGVhcF9t b2RpZnlfYmVnaW4oUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCSAgIGludCBtb2RpZnlfZmxhZ3Ms CisJCQkJCQkJCQkJICAgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkgICBpbnQgb3B0aW9ucywK KwkJCQkJCQkJCQkgICBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5X2J1ZmZl cl9mbHVzaF9jYWxsYmFjaywKKwkJCQkJCQkJCQkgICB2b2lkICptb2RpZnlfYnVmZmVyX2ZsdXNo X2NvbnRleHQpOworZXh0ZXJuIHZvaWQgaGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1v ZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0 ZXJuIHZvaWQgaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRl KTsKK2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7 CisKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Q b2ludGVyIHRpZCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywg Ym9vbCB3YWl0LAogCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hh bmdpbmdQYXJ0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDhlNTgzYjQ1Y2QuLjllOWI5NzcxZGUg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMjU1LDYgKzI1NSwzOSBAQCB0eXBlZGVmIHN0cnVjdCBU TV9JbmRleERlbGV0ZU9wCiAJVE1fSW5kZXhTdGF0dXMgKnN0YXR1czsKIH0gVE1fSW5kZXhEZWxl dGVPcDsKIAorLyogVGFibGUgbW9kaWZ5IGZsYWdzICovCisKKy8qIFVzZSBCQVNfQlVMS1dSSVRF IGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kgKi8KKyNkZWZpbmUgVE1fRkxBR19CQVNfQlVMS1dSSVRF CTB4MDAwMDAxCisKK3N0cnVjdCBUYWJsZU1vZGlmeVN0YXRlOworCisvKiBDYWxsYmFjayBpbnZv a2VkIGZvciBlYWNoIHR1cGxlIHRoYXQgZ2V0cyBmbHVzaGVkIHRvIGRpc2sgZnJvbSBidWZmZXIg Ki8KK3R5cGVkZWYgdm9pZCAoKlRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjaykgKHZvaWQg KmNvbnRleHQsCisJCQkJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKKy8qIFRhYmxl IEFNIHNwZWNpZmljIGNhbGxiYWNrIHRoYXQgZ2V0cyBjYWxsZWQgaW4gdGFibGVfbW9kaWZ5X2Vu ZCgpICovCit0eXBlZGVmIHZvaWQgKCpUYWJsZU1vZGlmeUVuZENhbGxiYWNrKSAoc3RydWN0IFRh YmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKKworLyogSG9sZHMgdGFibGUgbW9kaWZ5IHN0YXRlICov Cit0eXBlZGVmIHN0cnVjdCBUYWJsZU1vZGlmeVN0YXRlCit7CisJUmVsYXRpb24JcmVsOworCWlu dAkJCW1vZGlmeV9mbGFnczsKKwlNZW1vcnlDb250ZXh0IG1lbV9jeHQ7CisJQ29tbWFuZElkCWNp ZDsKKwlpbnQJCQlvcHRpb25zOworCisJLyogRmx1c2ggY2FsbGJhY2sgYW5kIGl0cyBjb250ZXh0 ICovCisJVGFibGVNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrIG1vZGlmeV9idWZmZXJfZmx1c2hf Y2FsbGJhY2s7CisJdm9pZAkgICAqbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0OworCisJLyog VGFibGUgQU0gc3BlY2lmaWMgZGF0YSAqLworCXZvaWQJICAgKmRhdGE7CisKKwlUYWJsZU1vZGlm eUVuZENhbGxiYWNrIG1vZGlmeV9lbmRfY2FsbGJhY2s7Cit9IFRhYmxlTW9kaWZ5U3RhdGU7CisK IC8qICJvcHRpb25zIiBmbGFnIGJpdHMgZm9yIHRhYmxlX3R1cGxlX2luc2VydCAqLwogLyogVEFC TEVfSU5TRVJUX1NLSVBfV0FMIHdhcyAweDAwMDE7IFJlbGF0aW9uTmVlZHNXQUwoKSBub3cgZ292 ZXJucyAqLwogI2RlZmluZSBUQUJMRV9JTlNFUlRfU0tJUF9GU00JCTB4MDAwMgpAQCAtNTc4LDYg KzYxMSwyMSBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCXZvaWQJCSgqZmluaXNo X2J1bGtfaW5zZXJ0KSAoUmVsYXRpb24gcmVsLCBpbnQgb3B0aW9ucyk7CiAKIAorCS8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCSAqIFRhYmxlIE1vZGlmeSByZWxhdGVkIGZ1bmN0aW9ucy4KKwkgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKwkgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICooKnR1cGxlX21vZGlmeV9iZWdp bikgKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJIGludCBtb2RpZnlfZmxhZ3MsCisJCQkJCQkJ CQkJCSBDb21tYW5kSWQgY2lkLAorCQkJCQkJCQkJCQkgaW50IG9wdGlvbnMsCisJCQkJCQkJCQkJ CSBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jYWxs YmFjaywKKwkJCQkJCQkJCQkJIHZvaWQgKm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCk7CisJ dm9pZAkJKCp0dXBsZV9tb2RpZnlfYnVmZmVyX2luc2VydCkgKFRhYmxlTW9kaWZ5U3RhdGUgKnN0 YXRlLAorCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisJdm9pZAkJKCp0dXBs ZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKSAoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOworCXZvaWQJ CSgqdHVwbGVfbW9kaWZ5X2VuZCkgKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKKwogCS8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogCSAqIERETCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCiAJICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkBAIC0xNjA5LDYgKzE2NTcsMzggQEAgdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0 KFJlbGF0aW9uIHJlbCwgaW50IG9wdGlvbnMpCiAJCXJlbC0+cmRfdGFibGVhbS0+ZmluaXNoX2J1 bGtfaW5zZXJ0KHJlbCwgb3B0aW9ucyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGFi bGUgTW9kaWZ5IHJlbGF0ZWQgZnVuY3Rpb25zLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0 YXRpYyBpbmxpbmUgVGFibGVNb2RpZnlTdGF0ZSAqCit0YWJsZV9tb2RpZnlfYmVnaW4oUmVsYXRp b24gcmVsLCBpbnQgbW9kaWZ5X2ZsYWdzLCBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywKKwkJ CQkgICBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5X2J1ZmZlcl9mbHVzaF9j YWxsYmFjaywKKwkJCQkgICB2b2lkICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpCit7CisJ cmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2JlZ2luKHJlbCwgbW9kaWZ5X2Zs YWdzLAorCQkJCQkJCQkJCQkgICBjaWQsIG9wdGlvbnMsCisJCQkJCQkJCQkJCSAgIG1vZGlmeV9i dWZmZXJfZmx1c2hfY2FsbGJhY2ssCisJCQkJCQkJCQkJCSAgIG1vZGlmeV9idWZmZXJfZmx1c2hf Y29udGV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbW9kaWZ5X2J1ZmZlcl9p bnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQorewor CXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KHN0YXRl LCBzbG90KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tb2RpZnlfYnVmZmVyX2Zs dXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0t PnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2goc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQKK3RhYmxlX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJc3RhdGUt PnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2VuZChzdGF0ZSk7Cit9CiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICogRERMIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggZDQyN2ExYzE2YS4uODRiYWY5Yjc4ZCAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTExNDEsNiArMTE0MSw4IEBAIEhlYWRsaW5lSnNvblN0YXRlCiBIZWFkbGlu ZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CiBIZWFwQ2hlY2tDb250ZXh0CitIZWFwSW5z ZXJ0U3RhdGUKK0hlYXBNdWx0aUluc2VydFN0YXRlCiBIZWFwUGFnZUZyZWV6ZQogSGVhcFNjYW5E ZXNjCiBIZWFwVHVwbGUKQEAgLTI4NTksNiArMjg2MSw3IEBAIFRhYmxlRnVuY1NjYW5TdGF0ZQog VGFibGVGdW5jVHlwZQogVGFibGVJbmZvCiBUYWJsZUxpa2VDbGF1c2UKK1RhYmxlTW9kaWZ5U3Rh dGUKIFRhYmxlU2FtcGxlQ2xhdXNlCiBUYWJsZVNjYW5EZXNjCiBUYWJsZVNjYW5EZXNjRGF0YQot LSAKMi4zNC4xCgo= --00000000000026c178061a1f4a58 Content-Type: application/x-patch; name="v22-0002-Optimize-various-SQL-commands-with-new-multi-ins.patch" Content-Disposition: attachment; filename="v22-0002-Optimize-various-SQL-commands-with-new-multi-ins.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx0z1neu1 RnJvbSBlMDI5YTE2NmQ2YmM3NTUwZDU0NGY5MzgxN2M5YzFiNmQ0YWEzNjhlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgNCBKdW4gMjAyNCAyMDoxNzo0NSArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjIyIDIvNV0gT3B0aW1pemUgdmFyaW91cyBTUUwgY29tbWFuZHMg d2l0aCBuZXcgbXVsdGkgaW5zZXJ0CiB0YWJsZSBBTQoKVGhpcyBjb21taXQgb3B0aW1pemVzIHRo ZSBmb2xsb3dpbmcgY29tbWFuZHMgZm9yIGhlYXAgQU0gdXNpbmcgbmV3Cm11bHRpIGluc2VydCB0 YWJsZSBBTSBhZGRlZCBieSBjb21taXQgPDxDSEFOR0VfTUU+PjoKLSBDUkVBVEUgVEFCTEUgQVMK LSBDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcKLSBSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXCi0g VGFibGUgUmV3cml0ZXMKCkF1dGhvcjogQmhhcmF0aCBSdXBpcmVkZHkKUmV2aWV3ZWQtYnk6IEpl ZmYgRGF2aXMKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1p ZC9DQUxqMkFDVmk5ZVRSWVIlM0RnZGNhNXd4dGozS2tfOXE5cVZjY3hzUzFobmdUR09DalB3USU0 MG1haWwuZ21haWwuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvODYzMzE3MWNiMDM0YWFmYzI2MGZkZjM3ZGYwNGI2Yzc3OWFhMWUyZi5jYW1lbCU0 MGotZGF2aXMuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgfCAyNiAr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5j ICAgfCAyNSArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYyB8IDMwICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBj aGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3Jl YXRlYXMuYwppbmRleCA2MjA1MGY0ZGM1Li43OTRjNzM1Yjc4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0 ZWFzLmMKQEAgLTUzLDkgKzUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAkvKiBUaGVzZSBmaWVsZHMg YXJlIGZpbGxlZCBieSBpbnRvcmVsX3N0YXJ0dXA6ICovCiAJUmVsYXRpb24JcmVsOwkJCS8qIHJl bGF0aW9uIHRvIHdyaXRlIHRvICovCiAJT2JqZWN0QWRkcmVzcyByZWxhZGRyOwkJLyogYWRkcmVz cyBvZiByZWwsIGZvciBFeGVjQ3JlYXRlVGFibGVBcyAqLwotCUNvbW1hbmRJZAlvdXRwdXRfY2lk OwkJLyogY21pbiB0byBpbnNlcnQgaW4gb3V0cHV0IHR1cGxlcyAqLwotCWludAkJCXRpX29wdGlv bnM7CQkvKiB0YWJsZV90dXBsZV9pbnNlcnQgcGVyZm9ybWFuY2Ugb3B0aW9ucyAqLwotCUJ1bGtJ bnNlcnRTdGF0ZSBiaXN0YXRlOwkvKiBidWxrIGluc2VydCBzdGF0ZSAqLworCVRhYmxlTW9kaWZ5 U3RhdGUgKm1zdGF0ZTsJLyogdGFibGUgaW5zZXJ0IHN0YXRlICovCiB9IERSX2ludG9yZWw7CiAK IC8qIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBDVEFTIGRlZmluaXRpb24gY3JlYXRpb24gKi8KQEAg LTU1MiwxNyArNTUwLDIwIEBAIGludG9yZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGlu dCBvcGVyYXRpb24sIFR1cGxlRGVzYyB0eXBlaW5mbykKIAkgKi8KIAlteVN0YXRlLT5yZWwgPSBp bnRvUmVsYXRpb25EZXNjOwogCW15U3RhdGUtPnJlbGFkZHIgPSBpbnRvUmVsYXRpb25BZGRyOwot CW15U3RhdGUtPm91dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwotCW15U3Rh dGUtPnRpX29wdGlvbnMgPSBUQUJMRV9JTlNFUlRfU0tJUF9GU007CiAKIAkvKgogCSAqIElmIFdJ VEggTk8gREFUQSBpcyBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHVwIHRoZSBz dGF0ZSBmb3IKIAkgKiBidWxrIGluc2VydHMgYXMgdGhlcmUgYXJlIG5vIHR1cGxlcyB0byBpbnNl cnQuCiAJICovCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQkJbXlTdGF0ZS0+YmlzdGF0ZSA9IEdl dEJ1bGtJbnNlcnRTdGF0ZSgpOworCQlteVN0YXRlLT5tc3RhdGUgPSB0YWJsZV9tb2RpZnlfYmVn aW4oaW50b1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJIFRNX0ZMQUdfQkFTX0JVTEtXUklURSwK KwkJCQkJCQkJCQkJIEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCisJCQkJCQkJCQkJCSBUQUJM RV9JTlNFUlRfU0tJUF9GU00sCisJCQkJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkJCQkgTlVMTCk7 CiAJZWxzZQotCQlteVN0YXRlLT5iaXN0YXRlID0gTlVMTDsKKwkJbXlTdGF0ZS0+bXN0YXRlID0g TlVMTDsKIAogCS8qCiAJICogVmFsaWQgc21ncl90YXJnYmxvY2sgaW1wbGllcyBzb21ldGhpbmcg YWxyZWFkeSB3cm90ZSB0byB0aGUgcmVsYXRpb24uCkBAIC01OTAsMTEgKzU5MSw3IEBAIGludG9y ZWxfcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpzZWxmKQogCQkg KiB3b3VsZCBub3QgYmUgY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24ndCBhbGxvdyBhY2Nl c3NpbmcgcGVyLUFNCiAJCSAqIGRhdGEgKHNheSBhIHR1cGxlJ3MgeG1pbiksIGJ1dCBzaW5jZSB3 ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KIAkJICovCi0JCXRhYmxlX3R1cGxlX2luc2VydChteVN0 YXRlLT5yZWwsCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgbXlTdGF0ZS0+b3V0cHV0X2NpZCwK LQkJCQkJCSAgIG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCQkgICBteVN0YXRlLT5iaXN0YXRl KTsKKwkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQobXlTdGF0ZS0+bXN0YXRlLCBzbG90KTsK IAl9CiAKIAkvKiBXZSBrbm93IHRoaXMgaXMgYSBuZXdseSBjcmVhdGVkIHJlbGF0aW9uLCBzbyB0 aGVyZSBhcmUgbm8gaW5kZXhlcyAqLwpAQCAtNjEyLDEwICs2MDksNyBAQCBpbnRvcmVsX3NodXRk b3duKERlc3RSZWNlaXZlciAqc2VsZikKIAlJbnRvQ2xhdXNlICppbnRvID0gbXlTdGF0ZS0+aW50 bzsKIAogCWlmICghaW50by0+c2tpcERhdGEpCi0JewotCQlGcmVlQnVsa0luc2VydFN0YXRlKG15 U3RhdGUtPmJpc3RhdGUpOwotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+cmVs LCBteVN0YXRlLT50aV9vcHRpb25zKTsKLQl9CisJCXRhYmxlX21vZGlmeV9lbmQobXlTdGF0ZS0+ bXN0YXRlKTsKIAogCS8qIGNsb3NlIHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQgKi8K IAl0YWJsZV9jbG9zZShteVN0YXRlLT5yZWwsIE5vTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMK aW5kZXggNmQwOWI3NTU1Ni4uYzIzODYxYzUwNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpAQCAt NDgsOSArNDgsNyBAQCB0eXBlZGVmIHN0cnVjdAogCU9pZAkJCXRyYW5zaWVudG9pZDsJLyogT0lE IG9mIG5ldyBoZWFwIGludG8gd2hpY2ggdG8gc3RvcmUgKi8KIAkvKiBUaGVzZSBmaWVsZHMgYXJl IGZpbGxlZCBieSB0cmFuc2llbnRyZWxfc3RhcnR1cDogKi8KIAlSZWxhdGlvbgl0cmFuc2llbnRy ZWw7CS8qIHJlbGF0aW9uIHRvIHdyaXRlIHRvICovCi0JQ29tbWFuZElkCW91dHB1dF9jaWQ7CQkv KiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICovCi0JaW50CQkJdGlfb3B0aW9uczsJ CS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBvcHRpb25zICovCi0JQnVsa0luc2Vy dFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRlICovCisJVGFibGVNb2RpZnlTdGF0 ZSAqbXN0YXRlOwkvKiB0YWJsZSBpbnNlcnQgc3RhdGUgKi8KIH0gRFJfdHJhbnNpZW50cmVsOwog CiBzdGF0aWMgaW50CW1hdHZpZXdfbWFpbnRlbmFuY2VfZGVwdGggPSAwOwpAQCAtNDU4LDkgKzQ1 NiwxMyBAQCB0cmFuc2llbnRyZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGludCBvcGVy YXRpb24sIFR1cGxlRGVzYyB0eXBlaW5mbykKIAkgKiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15 U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwogCSAqLwogCW15U3RhdGUtPnRyYW5zaWVu dHJlbCA9IHRyYW5zaWVudHJlbDsKLQlteVN0YXRlLT5vdXRwdXRfY2lkID0gR2V0Q3VycmVudENv bW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NLSVBf RlNNIHwgVEFCTEVfSU5TRVJUX0ZST1pFTjsKLQlteVN0YXRlLT5iaXN0YXRlID0gR2V0QnVsa0lu c2VydFN0YXRlKCk7CisJbXlTdGF0ZS0+bXN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKHRyYW5z aWVudHJlbCwKKwkJCQkJCQkJCQkgVE1fRkxBR19CQVNfQlVMS1dSSVRFLAorCQkJCQkJCQkJCSBH ZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJCSBUQUJMRV9JTlNFUlRfU0tJUF9G U00gfAorCQkJCQkJCQkJCSBUQUJMRV9JTlNFUlRfRlJPWkVOLAorCQkJCQkJCQkJCSBOVUxMLAor CQkJCQkJCQkJCSBOVUxMKTsKIAogCS8qCiAJICogVmFsaWQgc21ncl90YXJnYmxvY2sgaW1wbGll cyBzb21ldGhpbmcgYWxyZWFkeSB3cm90ZSB0byB0aGUgcmVsYXRpb24uCkBAIC00ODUsMTIgKzQ4 Nyw3IEBAIHRyYW5zaWVudHJlbF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVj ZWl2ZXIgKnNlbGYpCiAJICogY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24ndCBhbGxvdyBh Y2Nlc3NpbmcgcGVyLUFNIGRhdGEgKHNheSBhCiAJICogdHVwbGUncyB4bWluKSwgYnV0IHNpbmNl IHdlIGRvbid0IGRvIHRoYXQgaGVyZS4uLgogCSAqLwotCi0JdGFibGVfdHVwbGVfaW5zZXJ0KG15 U3RhdGUtPnRyYW5zaWVudHJlbCwKLQkJCQkJICAgc2xvdCwKLQkJCQkJICAgbXlTdGF0ZS0+b3V0 cHV0X2NpZCwKLQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJICAgbXlTdGF0ZS0+ YmlzdGF0ZSk7CisJdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQobXlTdGF0ZS0+bXN0YXRlLCBz bG90KTsKIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24sIHNv IHRoZXJlIGFyZSBubyBpbmRleGVzICovCiAKQEAgLTUwNSw5ICs1MDIsNyBAQCB0cmFuc2llbnRy ZWxfc2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogewogCURSX3RyYW5zaWVudHJlbCAqbXlT dGF0ZSA9IChEUl90cmFuc2llbnRyZWwgKikgc2VsZjsKIAotCUZyZWVCdWxrSW5zZXJ0U3RhdGUo bXlTdGF0ZS0+YmlzdGF0ZSk7Ci0KLQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+ dHJhbnNpZW50cmVsLCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwl0YWJsZV9tb2RpZnlfZW5kKG15 U3RhdGUtPm1zdGF0ZSk7CiAKIAkvKiBjbG9zZSB0cmFuc2llbnRyZWwsIGJ1dCBrZWVwIGxvY2sg dW50aWwgY29tbWl0ICovCiAJdGFibGVfY2xvc2UobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBOb0xv Y2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA3YjZjNjliN2E1Li45Yjc5ZjQ2ZDdh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNTk2NiwxMCArNTk2Niw4IEBAIEFUUmV3 cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgT2lkIE9JRE5ld0hlYXAsIExPQ0tNT0RF IGxvY2ttb2RlKQogCWludAkJCWk7CiAJTGlzdENlbGwgICAqbDsKIAlFU3RhdGUJICAgKmVzdGF0 ZTsKLQlDb21tYW5kSWQJbXljaWQ7Ci0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7Ci0JaW50CQkJ dGlfb3B0aW9uczsKIAlFeHByU3RhdGUgICpwYXJ0cXVhbHN0YXRlID0gTlVMTDsKKwlUYWJsZU1v ZGlmeVN0YXRlICptc3RhdGUgPSBOVUxMOwogCiAJLyoKIAkgKiBPcGVuIHRoZSByZWxhdGlvbihz KS4gIFdlIGhhdmUgc3VyZWx5IGFscmVhZHkgbG9ja2VkIHRoZSBleGlzdGluZwpAQCAtNTk4OCwx OCArNTk4NiwxNCBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIE9pZCBP SUROZXdIZWFwLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAkgKiBQcmVwYXJlIGEgQnVsa0luc2VydFN0 YXRlIGFuZCBvcHRpb25zIGZvciB0YWJsZV90dXBsZV9pbnNlcnQuICBUaGUgRlNNCiAJICogaXMg ZW1wdHksIHNvIGRvbid0IGJvdGhlciB1c2luZyBpdC4KIAkgKi8KLQlpZiAobmV3cmVsKQorCWlm IChuZXdyZWwgJiYgbXN0YXRlID09IE5VTEwpCiAJewotCQlteWNpZCA9IEdldEN1cnJlbnRDb21t YW5kSWQodHJ1ZSk7Ci0JCWJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKLQkJdGlfb3B0 aW9ucyA9IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTTsKLQl9Ci0JZWxzZQotCXsKLQkJLyoga2VlcCBj b21waWxlciBxdWlldCBhYm91dCB1c2luZyB0aGVzZSB1bmluaXRpYWxpemVkICovCi0JCW15Y2lk ID0gMDsKLQkJYmlzdGF0ZSA9IE5VTEw7Ci0JCXRpX29wdGlvbnMgPSAwOworCQltc3RhdGUgPSB0 YWJsZV9tb2RpZnlfYmVnaW4obmV3cmVsLAorCQkJCQkJCQkJVE1fRkxBR19CQVNfQlVMS1dSSVRF LAorCQkJCQkJCQkJR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCVRBQkxFX0lO U0VSVF9TS0lQX0ZTTSwKKwkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQlOVUxMKTsKIAl9CiAKIAkv KgpAQCAtNjI5Nyw4ICs2MjkxLDcgQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJlZFRhYmxlSW5mbyAq dGFiLCBPaWQgT0lETmV3SGVhcCwgTE9DS01PREUgbG9ja21vZGUpCiAKIAkJCS8qIFdyaXRlIHRo ZSB0dXBsZSBvdXQgdG8gdGhlIG5ldyByZWxhdGlvbiAqLwogCQkJaWYgKG5ld3JlbCkKLQkJCQl0 YWJsZV90dXBsZV9pbnNlcnQobmV3cmVsLCBpbnNlcnRzbG90LCBteWNpZCwKLQkJCQkJCQkJICAg dGlfb3B0aW9ucywgYmlzdGF0ZSk7CisJCQkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQobXN0 YXRlLCBpbnNlcnRzbG90KTsKIAogCQkJUmVzZXRFeHByQ29udGV4dChlY29udGV4dCk7CiAKQEAg LTYzMTksMTAgKzYzMTIsNyBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0YWIs IE9pZCBPSUROZXdIZWFwLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAl0YWJsZV9jbG9zZShvbGRyZWws IE5vTG9jayk7CiAJaWYgKG5ld3JlbCkKIAl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUoYmlzdGF0 ZSk7Ci0KLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG5ld3JlbCwgdGlfb3B0aW9ucyk7Ci0K KwkJdGFibGVfbW9kaWZ5X2VuZChtc3RhdGUpOwogCQl0YWJsZV9jbG9zZShuZXdyZWwsIE5vTG9j ayk7CiAJfQogfQotLSAKMi4zNC4xCgo= --00000000000026c178061a1f4a58 Content-Type: application/x-patch; name="v22-0003-Optimize-INSERT-INTO-SELECT-with-new-multi-inser.patch" Content-Disposition: attachment; filename="v22-0003-Optimize-INSERT-INTO-SELECT-with-new-multi-inser.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx0z1p7q2 RnJvbSBkMzBkMGMzMWNlZWNhYzVhMGY3ZDYxYjdlMDk2MjI1ZGNmZGJhM2M5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgNCBKdW4gMjAyNCAyMDoyMzowMyArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjIyIDMvNV0gT3B0aW1pemUgSU5TRVJUIElOVE8gU0VMRUNUIHdp dGggbmV3IG11bHRpIGluc2VydAogdGFibGUgQU0KClRoaXMgY29tbWl0IG9wdGltaXplcyB0aGUg SU5TRVJUIElOVE8gU0VMRUNUIHF1ZXJ5IGZvciBoZWFwIEFNCnVzaW5nIG5ldyBtdWx0aSBpbnNl cnQgdGFibGUgQU0gYWRkZWQgYnkgY29tbWl0IDw8Q0hBTkdFX01FPj4uCgpBdXRob3I6IEJoYXJh dGggUnVwaXJlZGR5ClJldmlld2VkLWJ5OiBKZWZmIERhdmlzCkRpc2N1c3Npb246IGh0dHBzOi8v d3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FMajJBQ1ZpOWVUUllSJTNEZ2RjYTV3eHRq M0trXzlxOXFWY2N4c1MxaG5nVEdPQ2pQd1ElNDBtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzg2MzMxNzFjYjAzNGFhZmMyNjBm ZGYzN2RmMDRiNmM3NzlhYTFlMmYuY2FtZWwlNDBqLWRhdmlzLmNvbQotLS0KIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKyst LS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgIHwgICAxICsKIDIgZmls ZXMgY2hhbmdlZCwgMTUzIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKaW5kZXggY2VlNjBkMzY1OS4uNTgyYzRhOTg0MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTExNCw2ICsxMTQsMTgg QEAgdHlwZWRlZiBzdHJ1Y3QgVXBkYXRlQ29udGV4dAogCUxvY2tUdXBsZU1vZGUgbG9ja21vZGU7 CiB9IFVwZGF0ZUNvbnRleHQ7CiAKK3R5cGVkZWYgc3RydWN0IEluc2VydE1vZGlmeUJ1ZmZlckZs dXNoQ29udGV4dAoreworCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAg ICplc3RhdGU7CisJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZTsKK30gSW5zZXJ0TW9kaWZ5QnVm ZmVyRmx1c2hDb250ZXh0OworCitzdGF0aWMgSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0 ICppbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0gTlVMTDsKK3N0YXRpYyBUYWJs ZU1vZGlmeVN0YXRlICp0YWJsZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCitzdGF0aWMgdm9pZCBJ bnNlcnRNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrKHZvaWQgKmNvbnRleHQsCisJCQkJCQkJCQkJ CVR1cGxlVGFibGVTbG90ICpzbG90KTsKIAogc3RhdGljIHZvaWQgRXhlY0JhdGNoSW5zZXJ0KE1v ZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJCQkJCQkJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVs SW5mbywKQEAgLTcyNiw2ICs3MzgsNTUgQEAgRXhlY0dldFVwZGF0ZU5ld1R1cGxlKFJlc3VsdFJl bEluZm8gKnJlbGluZm8sCiAJcmV0dXJuIEV4ZWNQcm9qZWN0KG5ld1Byb2opOwogfQogCitzdGF0 aWMgdm9pZAorSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjayh2b2lkICpjb250ZXh0LCBU dXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQg KmN0eCA9IChJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKikgY29udGV4dDsKKwlSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvID0gY3R4LT5yZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkg ICAqZXN0YXRlID0gY3R4LT5lc3RhdGU7CisJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGN0 eC0+bXRzdGF0ZTsKKworCS8qIFF1aWNrIGV4aXQgaWYgbm8gaW5kZXhlcyBvciBubyB0cmlnZ2Vy cyAqLworCWlmICghKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwIHx8CisJCSAgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKKwkJICAgKHJlc3VsdFJlbEluZm8t PnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKKwkJCXJlc3VsdFJlbEluZm8t PnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9uZXdfdGFibGUpKSkpCisJCXJldHVybjsKKworCS8q IENhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSBpbmRpY2Vz ICovCisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9y IGFsbCB0aGUgaW5zZXJ0ZWQgdHVwbGVzLCBhbmQKKwkgKiBydW4gQUZURVIgUk9XIElOU0VSVCB0 cmlnZ2Vycy4KKwkgKi8KKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJ eworCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKKworCQlyZWNoZWNrSW5kZXhlcyA9CisJCQlF eGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJICBzbG90LCBlc3Rh dGUsIGZhbHNlLAorCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwkJRXhlY0FS SW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLAorCQkJCQkJCSBzbG90LCByZWNo ZWNrSW5kZXhlcywKKwkJCQkJCQkgbXRzdGF0ZS0+bXRfdHJhbnNpdGlvbl9jYXB0dXJlKTsKKwkJ bGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKKwl9CisKKwkvKgorCSAqIFRoZXJlJ3Mgbm8gaW5k ZXhlcywgYnV0IHNlZSBpZiB3ZSBuZWVkIHRvIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJz CisJICogYW55d2F5LgorCSAqLworCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNj ICE9IE5VTEwgJiYKKwkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0 X2FmdGVyX3JvdyB8fAorCQkJICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNl cnRfbmV3X3RhYmxlKSkKKwl7CisJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0 UmVsSW5mbywKKwkJCQkJCQkgc2xvdCwgTklMLAorCQkJCQkJCSBtdHN0YXRlLT5tdF90cmFuc2l0 aW9uX2NhcHR1cmUpOworCX0KK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNJbnNlcnQKICAqCkBA IC03NTEsNyArODEyLDggQEAgRXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQs CiAJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkgICBib29sIGNhblNldFRhZywKIAkJICAg VHVwbGVUYWJsZVNsb3QgKippbnNlcnRlZF90dXBsZSwKLQkJICAgUmVzdWx0UmVsSW5mbyAqKmlu c2VydF9kZXN0cmVsKQorCQkgICBSZXN1bHRSZWxJbmZvICoqaW5zZXJ0X2Rlc3RyZWwsCisJCSAg IGJvb2wgY2FuTXVsdGlJbnNlcnQpCiB7CiAJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGNv bnRleHQtPm10c3RhdGU7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBjb250ZXh0LT5lc3RhdGU7CkBA IC03NjQsNiArODI2LDcgQEAgRXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQs CiAJT25Db25mbGljdEFjdGlvbiBvbmNvbmZsaWN0ID0gbm9kZS0+b25Db25mbGljdEFjdGlvbjsK IAlQYXJ0aXRpb25UdXBsZVJvdXRpbmcgKnByb3V0ZSA9IG10c3RhdGUtPm10X3BhcnRpdGlvbl90 dXBsZV9yb3V0aW5nOwogCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsKKwlib29sCQlhcl9pbnNl cnRfdHJpZ2dlcnNfZXhlY3V0ZWQgPSBmYWxzZTsKIAogCS8qCiAJICogSWYgdGhlIGlucHV0IHJl c3VsdCByZWxhdGlvbiBpcyBhIHBhcnRpdGlvbmVkIHRhYmxlLCBmaW5kIHRoZSBsZWFmCkBAIC0x MTI2LDE3ICsxMTg5LDUzIEBAIEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0 LAogCQl9CiAJCWVsc2UKIAkJewotCQkJLyogaW5zZXJ0IHRoZSB0dXBsZSBub3JtYWxseSAqLwot CQkJdGFibGVfdHVwbGVfaW5zZXJ0KHJlc3VsdFJlbGF0aW9uRGVzYywgc2xvdCwKLQkJCQkJCQkg ICBlc3RhdGUtPmVzX291dHB1dF9jaWQsCi0JCQkJCQkJICAgMCwgTlVMTCk7CisJCQlpZiAoY2Fu TXVsdGlJbnNlcnQgJiYKKwkJCQlwcm91dGUgPT0gTlVMTCAmJgorCQkJCXJlc3VsdFJlbEluZm8t PnJpX1dpdGhDaGVja09wdGlvbnMgPT0gTklMICYmCisJCQkJcmVzdWx0UmVsSW5mby0+cmlfcHJv amVjdFJldHVybmluZyA9PSBOVUxMKQorCQkJeworCQkJCWlmIChpbnNlcnRfbW9kaWZ5X2J1ZmZl cl9mbHVzaF9jb250ZXh0ID09IE5VTEwpCisJCQkJeworCQkJCQlpbnNlcnRfbW9kaWZ5X2J1ZmZl cl9mbHVzaF9jb250ZXh0ID0KKwkJCQkJCShJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQg KikgcGFsbG9jMChzaXplb2YoSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0KSk7CisJCQkJ CWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPnJlc3VsdFJlbEluZm8gPSByZXN1 bHRSZWxJbmZvOworCQkJCQlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5lc3Rh dGUgPSBlc3RhdGU7CisJCQkJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPm10 c3RhdGUgPSBtdHN0YXRlOworCQkJCX0KIAotCQkJLyogaW5zZXJ0IGluZGV4IGVudHJpZXMgZm9y IHR1cGxlICovCi0JCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCi0JCQkJ cmVjaGVja0luZGV4ZXMgPSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKLQkJ CQkJCQkJCQkJCQkgICBzbG90LCBlc3RhdGUsIGZhbHNlLAotCQkJCQkJCQkJCQkJCSAgIGZhbHNl LCBOVUxMLCBOSUwsCi0JCQkJCQkJCQkJCQkJICAgZmFsc2UpOworCQkJCWlmICh0YWJsZV9tb2Rp Znlfc3RhdGUgPT0gTlVMTCkKKwkJCQl7CisJCQkJCXRhYmxlX21vZGlmeV9zdGF0ZSA9IHRhYmxl X21vZGlmeV9iZWdpbihyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJ CQkJCQkwLAorCQkJCQkJCQkJCQkJCQkJZXN0YXRlLT5lc19vdXRwdXRfY2lkLAorCQkJCQkJCQkJ CQkJCQkJMCwKKwkJCQkJCQkJCQkJCQkJCUluc2VydE1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2ss CisJCQkJCQkJCQkJCQkJCQlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0KTsKKwkJ CQl9CisKKwkJCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydCh0YWJsZV9tb2RpZnlfc3RhdGUs IHNsb3QpOworCQkJCWFyX2luc2VydF90cmlnZ2Vyc19leGVjdXRlZCA9IHRydWU7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJLyogaW5zZXJ0IHRoZSB0dXBsZSBub3JtYWxseSAqLworCQkJCXRh YmxlX3R1cGxlX2luc2VydChyZXN1bHRSZWxhdGlvbkRlc2MsIHNsb3QsCisJCQkJCQkJCSAgIGVz dGF0ZS0+ZXNfb3V0cHV0X2NpZCwKKwkJCQkJCQkJICAgMCwgTlVMTCk7CisKKwkJCQkvKiBpbnNl cnQgaW5kZXggZW50cmllcyBmb3IgdHVwbGUgKi8KKwkJCQlpZiAocmVzdWx0UmVsSW5mby0+cmlf TnVtSW5kaWNlcyA+IDApCisJCQkJCXJlY2hlY2tJbmRleGVzID0gRXhlY0luc2VydEluZGV4VHVw bGVzKHJlc3VsdFJlbEluZm8sCisJCQkJCQkJCQkJCQkJCSAgIHNsb3QsIGVzdGF0ZSwgZmFsc2Us CisJCQkJCQkJCQkJCQkJCSAgIGZhbHNlLCBOVUxMLCBOSUwsCisJCQkJCQkJCQkJCQkJCSAgIGZh bHNlKTsKKworCQkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywg c2xvdCwgcmVjaGVja0luZGV4ZXMsCisJCQkJCQkJCQkgbXRzdGF0ZS0+bXRfdHJhbnNpdGlvbl9j YXB0dXJlKTsKKworCQkJCWxpc3RfZnJlZShyZWNoZWNrSW5kZXhlcyk7CisJCQkJYXJfaW5zZXJ0 X3RyaWdnZXJzX2V4ZWN1dGVkID0gdHJ1ZTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMTE3MCwxMCAr MTI2OSwxMiBAQCBFeGVjSW5zZXJ0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAl9CiAK IAkvKiBBRlRFUiBST1cgSU5TRVJUIFRyaWdnZXJzICovCi0JRXhlY0FSSW5zZXJ0VHJpZ2dlcnMo ZXN0YXRlLCByZXN1bHRSZWxJbmZvLCBzbG90LCByZWNoZWNrSW5kZXhlcywKLQkJCQkJCSBhcl9p bnNlcnRfdHJpZ190Y3MpOwotCi0JbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKKwlpZiAoIWFy X2luc2VydF90cmlnZ2Vyc19leGVjdXRlZCkKKwl7CisJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVz dGF0ZSwgcmVzdWx0UmVsSW5mbywgc2xvdCwgcmVjaGVja0luZGV4ZXMsCisJCQkJCQkJIGFyX2lu c2VydF90cmlnX3Rjcyk7CisJCWxpc3RfZnJlZShyZWNoZWNrSW5kZXhlcyk7CisJfQogCiAJLyoK IAkgKiBDaGVjayBhbnkgV0lUSCBDSEVDSyBPUFRJT04gY29uc3RyYWludHMgZnJvbSBwYXJlbnQg dmlld3MuICBXZSBhcmUKQEAgLTE4NjksNyArMTk3MCw3IEBAIEV4ZWNDcm9zc1BhcnRpdGlvblVw ZGF0ZShNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJLyogVHVwbGUgcm91dGluZyBzdGFy dHMgZnJvbSB0aGUgcm9vdCB0YWJsZS4gKi8KIAljb250ZXh0LT5jcFVwZGF0ZVJldHVybmluZ1Ns b3QgPQogCQlFeGVjSW5zZXJ0KGNvbnRleHQsIG10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvLCBz bG90LCBjYW5TZXRUYWcsCi0JCQkJICAgaW5zZXJ0ZWRfdHVwbGUsIGluc2VydF9kZXN0cmVsKTsK KwkJCQkgICBpbnNlcnRlZF90dXBsZSwgaW5zZXJ0X2Rlc3RyZWwsIGZhbHNlKTsKIAogCS8qCiAJ ICogUmVzZXQgdGhlIHRyYW5zaXRpb24gc3RhdGUgdGhhdCBtYXkgcG9zc2libHkgaGF2ZSBiZWVu IHdyaXR0ZW4gYnkKQEAgLTMzNjQsNyArMzQ2NSw3IEBAIEV4ZWNNZXJnZU5vdE1hdGNoZWQoTW9k aWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAog CQkJCW10c3RhdGUtPm10X21lcmdlX2FjdGlvbiA9IGFjdGlvbjsKIAogCQkJCXJzbG90ID0gRXhl Y0luc2VydChjb250ZXh0LCBtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJICAg bmV3c2xvdCwgY2FuU2V0VGFnLCBOVUxMLCBOVUxMKTsKKwkJCQkJCQkJICAgbmV3c2xvdCwgY2Fu U2V0VGFnLCBOVUxMLCBOVUxMLCBmYWxzZSk7CiAJCQkJbXRzdGF0ZS0+bXRfbWVyZ2VfaW5zZXJ0 ZWQgKz0gMTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ01EX05PVEhJTkc6CkBAIC0zNzQ5LDYgKzM4 NTAsMTAgQEAgRXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCUhlYXBUdXBsZURh dGEgb2xkdHVwZGF0YTsKIAlIZWFwVHVwbGUJb2xkdHVwbGU7CiAJSXRlbVBvaW50ZXIgdHVwbGVp ZDsKKwlib29sCQljYW5NdWx0aUluc2VydCA9IGZhbHNlOworCisJdGFibGVfbW9kaWZ5X3N0YXRl ID0gTlVMTDsKKwlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0gTlVMTDsKIAog CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTM4NDQsNiArMzk0OSwxMCBAQCBFeGVjTW9k aWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCWlmIChUdXBJc051bGwoY29udGV4dC5wbGFu U2xvdCkpCiAJCQlicmVhazsKIAorCQlpZiAob3BlcmF0aW9uID09IENNRF9JTlNFUlQgJiYKKwkJ CW5vZGVUYWcoc3VicGxhbnN0YXRlKSA9PSBUX1NlcVNjYW5TdGF0ZSkKKwkJCWNhbk11bHRpSW5z ZXJ0ID0gdHJ1ZTsKKwogCQkvKgogCQkgKiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSByZXN1bHQg cmVsYXRpb25zLCBlYWNoIHR1cGxlIGNvbnRhaW5zIGEKIAkJICoganVuayBjb2x1bW4gdGhhdCBn aXZlcyB0aGUgT0lEIG9mIHRoZSByZWwgZnJvbSB3aGljaCBpdCBjYW1lLgpAQCAtNDA1Nyw3ICs0 MTY2LDcgQEAgRXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkJCQlFeGVjSW5p dEluc2VydFByb2plY3Rpb24obm9kZSwgcmVzdWx0UmVsSW5mbyk7CiAJCQkJc2xvdCA9IEV4ZWNH ZXRJbnNlcnROZXdUdXBsZShyZXN1bHRSZWxJbmZvLCBjb250ZXh0LnBsYW5TbG90KTsKIAkJCQlz bG90ID0gRXhlY0luc2VydCgmY29udGV4dCwgcmVzdWx0UmVsSW5mbywgc2xvdCwKLQkJCQkJCQkJ ICBub2RlLT5jYW5TZXRUYWcsIE5VTEwsIE5VTEwpOworCQkJCQkJCQkgIG5vZGUtPmNhblNldFRh ZywgTlVMTCwgTlVMTCwgY2FuTXVsdGlJbnNlcnQpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIENN RF9VUERBVEU6CkBAIC00MTE2LDYgKzQyMjUsMTcgQEAgRXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0 ZSAqcHN0YXRlKQogCQkJcmV0dXJuIHNsb3Q7CiAJfQogCisJaWYgKHRhYmxlX21vZGlmeV9zdGF0 ZSAhPSBOVUxMKQorCXsKKwkJQXNzZXJ0KG9wZXJhdGlvbiA9PSBDTURfSU5TRVJUKTsKKworCQl0 YWJsZV9tb2RpZnlfZW5kKHRhYmxlX21vZGlmeV9zdGF0ZSk7CisJCXRhYmxlX21vZGlmeV9zdGF0 ZSA9IE5VTEw7CisKKwkJcGZyZWUoaW5zZXJ0X21vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCk7 CisJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxMOworCX0KKwogCS8q CiAJICogSW5zZXJ0IHJlbWFpbmluZyB0dXBsZXMgZm9yIGJhdGNoIGluc2VydC4KIAkgKi8KQEAg LTQyMjgsNiArNDM0OCw5IEBAIEV4ZWNJbml0TW9kaWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUs IEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCW10c3RhdGUtPm10X21lcmdlX3VwZGF0ZWQg PSAwOwogCW10c3RhdGUtPm10X21lcmdlX2RlbGV0ZWQgPSAwOwogCisJdGFibGVfbW9kaWZ5X3N0 YXRlID0gTlVMTDsKKwlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0gTlVMTDsK KwogCS8qLS0tLS0tLS0tLQogCSAqIFJlc29sdmUgdGhlIHRhcmdldCByZWxhdGlvbi4gVGhpcyBp cyB0aGUgc2FtZSBhczoKIAkgKgpAQCAtNDY4MSw2ICs0ODA0LDE3IEBAIEV4ZWNFbmRNb2RpZnlU YWJsZShNb2RpZnlUYWJsZVN0YXRlICpub2RlKQogewogCWludAkJCWk7CiAKKwlpZiAodGFibGVf bW9kaWZ5X3N0YXRlICE9IE5VTEwpCisJeworCQlBc3NlcnQobm9kZS0+b3BlcmF0aW9uID09IENN RF9JTlNFUlQpOworCisJCXRhYmxlX21vZGlmeV9lbmQodGFibGVfbW9kaWZ5X3N0YXRlKTsKKwkJ dGFibGVfbW9kaWZ5X3N0YXRlID0gTlVMTDsKKworCQlwZnJlZShpbnNlcnRfbW9kaWZ5X2J1ZmZl cl9mbHVzaF9jb250ZXh0KTsKKwkJaW5zZXJ0X21vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCA9 IE5VTEw7CisJfQorCiAJLyoKIAkgKiBBbGxvdyBhbnkgRkRXcyB0byBzaHV0IGRvd24KIAkgKi8K ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggODRiYWY5Yjc4ZC4uMzM1M2ZhYTZjZCAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTExODAsNiArMTE4MCw3IEBAIEltcG9ydEZvcmVp Z25TY2hlbWFfZnVuY3Rpb24KIEltcG9ydFF1YWwKIEluUHJvZ3Jlc3NFbnQKIEluUHJvZ3Jlc3NJ TworSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0CiBJbmNsdWRlV2FsCiBJbmNsdXNpb25P cGFxdWUKIEluY3JlbWVudFZhclN1YmxldmVsc1VwX2NvbnRleHQKLS0gCjIuMzQuMQoK --00000000000026c178061a1f4a58 Content-Type: application/x-patch; name="v22-0004-Optimize-Logical-Replication-Apply-with-new-mult.patch" Content-Disposition: attachment; filename="v22-0004-Optimize-Logical-Replication-Apply-with-new-mult.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx0z1r393 RnJvbSBjN2MyZThlYmZmMDYwY2JkMzZlNTA4YzdhMGMyOGJhNjY5NmM0MjdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgNCBKdW4gMjAyNCAyMDoyNDoyMSArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjIyIDQvNV0gT3B0aW1pemUgTG9naWNhbCBSZXBsaWNhdGlvbiBB cHBseSB3aXRoIG5ldyBtdWx0aQogaW5zZXJ0IHRhYmxlIEFNCgpUaGlzIGNvbW1pdCBvcHRpbWl6 ZXMgdGhlIExvZ2ljYWwgUmVwbGljYXRpb24gQXBwbHkgZm9yIGhlYXAgQU0KdXNpbmcgbmV3IG11 bHRpIGluc2VydCB0YWJsZSBBTSBhZGRlZCBieSBjb21taXQgPDxDSEFOR0VfTUU+Pi4KCkF1dGhv cjogQmhhcmF0aCBSdXBpcmVkZHkKUmV2aWV3ZWQtYnk6IEplZmYgRGF2aXMKRGlzY3Vzc2lvbjog aHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUxqMkFDVmk5ZVRSWVIlM0Rn ZGNhNXd4dGozS2tfOXE5cVZjY3hzUzFobmdUR09DalB3USU0MG1haWwuZ21haWwuY29tCkRpc2N1 c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvODYzMzE3MWNiMDM0 YWFmYzI2MGZkZjM3ZGYwNGI2Yzc3OWFhMWUyZi5jYW1lbCU0MGotZGF2aXMuY29tCi0tLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICB8ICAzOSArKysKIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgfCAgMjQgKysKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgfCAzNTAgKysrKysrKysrKysrKysrKysrKysrKy0K IHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgfCAgIDQgKwogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICB8ICAgMiArCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgIHwgICAyICsKIDYgZmlsZXMgY2hhbmdlZCwgNDA4 IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jl cGxpY2F0aW9uLmMKaW5kZXggZDBhODljZDU3Ny4uZmFlMTM3NTUzNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTU0NCw2ICs1NDQsNDUgQEAgRXhlY1NpbXBsZVJl bGF0aW9uSW5zZXJ0KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJfQogfQogCit2b2lk CitFeGVjUmVsYXRpb25NdWx0aUluc2VydChUYWJsZU1vZGlmeVN0YXRlICpNdWx0aUluc2VydFN0 YXRlLAorCQkJCQkJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJCQkJCUVTdGF0ZSAq ZXN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlib29sCQlza2lwX3R1cGxlID0gZmFs c2U7CisJUmVsYXRpb24JcmVsID0gcmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjOworCisJ LyogRm9yIG5vdyB3ZSBzdXBwb3J0IG9ubHkgdGFibGVzLiAqLworCUFzc2VydChyZWwtPnJkX3Jl bC0+cmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OKTsKKworCUNoZWNrQ21kUmVwbGljYUlkZW50 aXR5KHJlbCwgQ01EX0lOU0VSVCk7CisKKwkvKiBCRUZPUkUgUk9XIElOU0VSVCBUcmlnZ2VycyAq LworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAmJgorCQlyZXN1bHRSZWxJbmZvLT5y aV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYmVmb3JlX3JvdykKKwl7CisJCWlmICghRXhlY0JSSW5z ZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLCBzbG90KSkKKwkJCXNraXBfdHVwbGUg PSB0cnVlOwkvKiAiZG8gbm90aGluZyIgKi8KKwl9CisKKwlpZiAoIXNraXBfdHVwbGUpCisJewor CQkvKiBDb21wdXRlIHN0b3JlZCBnZW5lcmF0ZWQgY29sdW1ucyAqLworCQlpZiAocmVsLT5yZF9h dHQtPmNvbnN0ciAmJgorCQkJcmVsLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF9zdG9y ZWQpCisJCQlFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUs IHNsb3QsCisJCQkJCQkJCQkgICBDTURfSU5TRVJUKTsKKworCQkvKiBDaGVjayB0aGUgY29uc3Ry YWludHMgb2YgdGhlIHR1cGxlICovCisJCWlmIChyZWwtPnJkX2F0dC0+Y29uc3RyKQorCQkJRXhl Y0NvbnN0cmFpbnRzKHJlc3VsdFJlbEluZm8sIHNsb3QsIGVzdGF0ZSk7CisJCWlmIChyZWwtPnJk X3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJCQlFeGVjUGFydGl0aW9uQ2hlY2socmVzdWx0UmVsSW5m bywgc2xvdCwgZXN0YXRlLCB0cnVlKTsKKworCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChN dWx0aUluc2VydFN0YXRlLCBzbG90KTsKKwl9Cit9CisKIC8qCiAgKiBGaW5kIHRoZSBzZWFyY2hz bG90IHR1cGxlIGFuZCB1cGRhdGUgaXQgd2l0aCBkYXRhIGluIHRoZSBzbG90LAogICogdXBkYXRl IHRoZSBpbmRleGVzLCBhbmQgZXhlY3V0ZSBhbnkgY29uc3RyYWludHMgYW5kIHBlci1yb3cgdHJp Z2dlcnMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3Rv LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggOTVjMDlj OTUxNi4uNDZkMzhhZWJkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8u YwpAQCAtNDI3LDYgKzQyNywzMCBAQCBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZv IG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAlsb2dpY2FscmVwX3dyaXRl X3R1cGxlKG91dCwgcmVsLCBuZXdzbG90LCBiaW5hcnksIGNvbHVtbnMpOwogfQogCitMb2dpY2Fs UmVwUmVsSWQKK2xvZ2ljYWxyZXBfcmVhZF9yZWxpZChTdHJpbmdJbmZvIGluKQoreworCUxvZ2lj YWxSZXBSZWxJZCByZWxpZDsKKworCS8qIHJlYWQgdGhlIHJlbGF0aW9uIGlkICovCisJcmVsaWQg PSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCisJcmV0dXJuIHJlbGlkOworfQorCit2b2lkCitsb2dp Y2FscmVwX3JlYWRfaW5zZXJ0X3YyKFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBUdXBsZURhdGEg Km5ld3R1cCkKK3sKKwljaGFyCQlhY3Rpb247CisKKwlhY3Rpb24gPSBwcV9nZXRtc2dieXRlKGlu KTsKKwlpZiAoYWN0aW9uICE9ICdOJykKKwkJZWxvZyhFUlJPUiwgImV4cGVjdGVkIG5ldyB0dXBs ZSBidXQgZ290ICVkIiwKKwkJCSBhY3Rpb24pOworCisJbG9naWNhbHJlcF9yZWFkX3R1cGxlKGlu LCBuZXd0dXApOworfQorCiAvKgogICogUmVhZCBJTlNFUlQgZnJvbSBzdHJlYW0uCiAgKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggYjVhODBmZTNlOC4uNmQ4 MGY2NTBjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3Jr ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0x NDgsNyArMTQ4LDYgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUgImFjY2Vzcy90 YWJsZS5oIgotI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3 b3BoYXNlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL2lu ZGV4aW5nLmgiCkBAIC00MTYsNiArNDE1LDMwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9h cHBseV9lcnJvcl9jb250ZXh0X2luZm8odm9pZCk7CiBzdGF0aWMgVHJhbnNBcHBseUFjdGlvbiBn ZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJ CQkJCSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKTsKIAordHlwZWRlZiBlbnVtIExS TXVsdGlJbnNlcnRSZXR1cm5TdGF0dXMKK3sKKwlMUl9NVUxUSV9JTlNFUlRfTk9ORSA9IDAsCisJ TFJfTVVMVElfSU5TRVJUX1JFTF9TS0lQUEVELAorCUxSX01VTFRJX0lOU0VSVF9ESVNBTExPV0VE LAorCUxSX01VTFRJX0lOU0VSVF9ET05FLAorfSBMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVzOwor CitzdGF0aWMgVGFibGVNb2RpZnlTdGF0ZSAqTXVsdGlJbnNlcnRTdGF0ZSA9IE5VTEw7CitzdGF0 aWMgTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpMYXN0UmVsID0gTlVMTDsKK3N0YXRpYyBMb2dpY2Fs UmVwUmVsSWQgTGFzdE11bHRpSW5zZXJ0UmVsSWQgPSBJbnZhbGlkT2lkOworc3RhdGljIEFwcGx5 RXhlY3V0aW9uRGF0YSAqTGFzdEVEYXRhID0gTlVMTDsKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAq TGFzdFJlbW90ZVNsb3QgPSBOVUxMOworCit0eXBlZGVmIHN0cnVjdCBMUk1vZGlmeUJ1ZmZlckZs dXNoQ29udGV4dAoreworCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAg ICplc3RhdGU7Cit9IExSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0OworCitzdGF0aWMgTFJNb2Rp ZnlCdWZmZXJGbHVzaENvbnRleHQgKm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCA9IE5VTEw7 CitzdGF0aWMgdm9pZCBMUk1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4dCwg VHVwbGVUYWJsZVNsb3QgKnNsb3QpOworc3RhdGljIHZvaWQgRmluaXNoTXVsdGlJbnNlcnRzKHZv aWQpOworCiAvKgogICogRm9ybSB0aGUgb3JpZ2luIG5hbWUgZm9yIHRoZSBzdWJzY3JpcHRpb24u CiAgKgpAQCAtMTAxNyw2ICsxMDQwLDggQEAgYXBwbHlfaGFuZGxlX2NvbW1pdChTdHJpbmdJbmZv IHMpCiB7CiAJTG9naWNhbFJlcENvbW1pdERhdGEgY29tbWl0X2RhdGE7CiAKKwlGaW5pc2hNdWx0 aUluc2VydHMoKTsKKwogCWxvZ2ljYWxyZXBfcmVhZF9jb21taXQocywgJmNvbW1pdF9kYXRhKTsK IAogCWlmIChjb21taXRfZGF0YS5jb21taXRfbHNuICE9IHJlbW90ZV9maW5hbF9sc24pCkBAIC0x MDQzLDYgKzEwNjgsOCBAQCBhcHBseV9oYW5kbGVfYmVnaW5fcHJlcGFyZShTdHJpbmdJbmZvIHMp CiB7CiAJTG9naWNhbFJlcFByZXBhcmVkVHhuRGF0YSBiZWdpbl9kYXRhOwogCisJRmluaXNoTXVs dGlJbnNlcnRzKCk7CisKIAkvKiBUYWJsZXN5bmMgc2hvdWxkIG5ldmVyIHJlY2VpdmUgcHJlcGFy ZS4gKi8KIAlpZiAoYW1fdGFibGVzeW5jX3dvcmtlcigpKQogCQllcmVwb3J0KEVSUk9SLApAQCAt MTEwOSw2ICsxMTM2LDggQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewog CUxvZ2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOwogCisJRmluaXNoTXVsdGlJ bnNlcnRzKCk7CisKIAlsb2dpY2FscmVwX3JlYWRfcHJlcGFyZShzLCAmcHJlcGFyZV9kYXRhKTsK IAogCWlmIChwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24gIT0gcmVtb3RlX2ZpbmFsX2xzbikKQEAg LTExNzEsNiArMTIwMCw4IEBAIGFwcGx5X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5m byBzKQogCUxvZ2ljYWxSZXBDb21taXRQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOwogCWNo YXIJCWdpZFtHSURTSVpFXTsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJbG9naWNhbHJl cF9yZWFkX2NvbW1pdF9wcmVwYXJlZChzLCAmcHJlcGFyZV9kYXRhKTsKIAlzZXRfYXBwbHlfZXJy b3JfY29udGV4dF94YWN0KHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5jb21taXRfbHNu KTsKIApAQCAtMTIyMCw2ICsxMjUxLDggQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVk KFN0cmluZ0luZm8gcykKIAlMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGEgcm9sbGJh Y2tfZGF0YTsKIAljaGFyCQlnaWRbR0lEU0laRV07CiAKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsK KwogCWxvZ2ljYWxyZXBfcmVhZF9yb2xsYmFja19wcmVwYXJlZChzLCAmcm9sbGJhY2tfZGF0YSk7 CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChyb2xsYmFja19kYXRhLnhpZCwgcm9sbGJh Y2tfZGF0YS5yb2xsYmFja19lbmRfbHNuKTsKIApAQCAtMTI3Nyw2ICsxMzEwLDggQEAgYXBwbHlf aGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAkvKiBTYXZlIHRoZSBtZXNzYWdl IGJlZm9yZSBpdCBpcyBjb25zdW1lZC4gKi8KIAlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cg PSAqczsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJaWYgKGluX3N0cmVhbWVkX3RyYW5z YWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xf VklPTEFUSU9OKSwKQEAgLTEzMDQsNiArMTMzOSw4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJl cGFyZShTdHJpbmdJbmZvIHMpCiAJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJl cFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQsCiAJCQkJCQkJCSAgIHByZXBhcmVfZGF0YS54aWQsIHBy ZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CiAKKwkJCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJ CQkvKiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KIAkJCWFwcGx5X2hhbmRs ZV9wcmVwYXJlX2ludGVybmFsKCZwcmVwYXJlX2RhdGEpOwogCkBAIC0xNDA3LDYgKzE0NDQsOCBA QCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogc3RhdGljIHZvaWQK IGFwcGx5X2hhbmRsZV9vcmlnaW4oU3RyaW5nSW5mbyBzKQogeworCUZpbmlzaE11bHRpSW5zZXJ0 cygpOworCiAJLyoKIAkgKiBPUklHSU4gbWVzc2FnZSBjYW4gb25seSBjb21lIGluc2lkZSBzdHJl YW1pbmcgdHJhbnNhY3Rpb24gb3IgaW5zaWRlCiAJICogcmVtb3RlIHRyYW5zYWN0aW9uIGFuZCBi ZWZvcmUgYW55IGFjdHVhbCB3cml0ZXMuCkBAIC0xNDczLDYgKzE1MTIsOCBAQCBhcHBseV9oYW5k bGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIAkvKiBTYXZlIHRoZSBtZXNzYWdlIGJlZm9y ZSBpdCBpcyBjb25zdW1lZC4gKi8KIAlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsK IAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9u KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFU SU9OKSwKQEAgLTE2MjgsNiArMTY2OSw4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJp bmdJbmZvIHMpCiAJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOwogCVRyYW5zQXBwbHlB Y3Rpb24gYXBwbHlfYWN0aW9uOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoIWlu X3N0cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVS UkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKQEAgLTE4MjEsNiArMTg2NCw4IEBAIGFwcGx5X2hh bmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFs X21zZyA9ICpzOwogCWJvb2wJCXRvcGxldmVsX3hhY3Q7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMo KTsKKwogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCkBAIC0yMTM4LDYgKzIxODMs OCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJLyogU2F2ZSB0 aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCiAJU3RyaW5nSW5mb0RhdGEgb3Jp Z2luYWxfbXNnID0gKnM7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCWlmIChpbl9zdHJl YW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RF X1BST1RPQ09MX1ZJT0xBVElPTiksCkBAIC0yMTU5LDYgKzIyMDYsOCBAQCBhcHBseV9oYW5kbGVf c3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15 TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQsIHhpZCwKIAkJCQkJCQkJICAgY29tbWl0 X2RhdGEuY29tbWl0X2xzbik7CiAKKwkJCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJCQlhcHBs eV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CiAKIAkJCS8qIFVubGluayB0 aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KQEAg LTIzMDIsNiArMjM1MSw4IEBAIGFwcGx5X2hhbmRsZV9yZWxhdGlvbihTdHJpbmdJbmZvIHMpCiB7 CiAJTG9naWNhbFJlcFJlbGF0aW9uICpyZWw7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwog CWlmIChoYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9O LCBzKSkKIAkJcmV0dXJuOwogCkBAIC0yMzI1LDYgKzIzNzYsOCBAQCBhcHBseV9oYW5kbGVfdHlw ZShTdHJpbmdJbmZvIHMpCiB7CiAJTG9naWNhbFJlcFR5cCB0eXA7CiAKKwlGaW5pc2hNdWx0aUlu c2VydHMoKTsKKwogCWlmIChoYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTE9HSUNBTF9SRVBf TVNHX1RZUEUsIHMpKQogCQlyZXR1cm47CiAKQEAgLTIzNjMsMTYgKzI0MTYsMTI2IEBAIFRhcmdl dFByaXZpbGVnZXNDaGVjayhSZWxhdGlvbiByZWwsIEFjbE1vZGUgbW9kZSkKIAkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CiB9CiAKLS8qCi0gKiBIYW5kbGUgSU5TRVJUIG1l c3NhZ2UuCi0gKi8KK3N0YXRpYyB2b2lkCitGaW5pc2hNdWx0aUluc2VydHModm9pZCkKK3sKKwlM b2dpY2FsUmVwTXNnVHlwZSBzYXZlZF9jb21tYW5kOworCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUg PT0gTlVMTCkKKwkJcmV0dXJuOworCisJQXNzZXJ0KE9pZElzVmFsaWQoTGFzdE11bHRpSW5zZXJ0 UmVsSWQpKTsKKwlBc3NlcnQoTGFzdEVEYXRhICE9IE5VTEwpOworCisJLyogU2V0IHJlbGF0aW9u IGZvciBlcnJvciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZWwgPSBM YXN0UmVsOworCisJLyogU2V0IGN1cnJlbnQgY29tbWFuZCBmb3IgZXJyb3IgY2FsbGJhY2sgKi8K KwlzYXZlZF9jb21tYW5kID0gYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQ7CisJYXBw bHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQgPSBMT0dJQ0FMX1JFUF9NU0dfSU5TRVJUOwor CisJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChMYXN0UmVtb3RlU2xvdCk7CisJTGFzdFJl bW90ZVNsb3QgPSBOVUxMOworCisJdGFibGVfbW9kaWZ5X2VuZChNdWx0aUluc2VydFN0YXRlKTsK KwlNdWx0aUluc2VydFN0YXRlID0gTlVMTDsKKwlMYXN0TXVsdGlJbnNlcnRSZWxJZCA9IEludmFs aWRPaWQ7CisKKwlwZnJlZShtb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOworCW1vZGlmeV9i dWZmZXJfZmx1c2hfY29udGV4dCA9IE5VTEw7CisKKwlFeGVjQ2xvc2VJbmRpY2VzKExhc3RFRGF0 YS0+dGFyZ2V0UmVsSW5mbyk7CisKKwlmaW5pc2hfZWRhdGEoTGFzdEVEYXRhKTsKKwlMYXN0RURh dGEgPSBOVUxMOworCisJLyogUmVzZXQgcmVsYXRpb24gZm9yIGVycm9yIGNhbGxiYWNrICovCisJ YXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLnJlbCA9IE5VTEw7CisKKwkvKiBSZXNldCB0aGUgY3Vy cmVudCBjb21tYW5kICovCisJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQgPSBzYXZl ZF9jb21tYW5kOworCisJbG9naWNhbHJlcF9yZWxfY2xvc2UoTGFzdFJlbCwgTm9Mb2NrKTsKKwlM YXN0UmVsID0gTlVMTDsKKworCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Cit9CiAKIHN0YXRpYyB2 b2lkCi1hcHBseV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKK0xSTW9kaWZ5QnVmZmVyRmx1 c2hDYWxsYmFjayh2b2lkICpjb250ZXh0LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlMUk1v ZGlmeUJ1ZmZlckZsdXNoQ29udGV4dCAqY3R4ID0gKExSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0 ICopIGNvbnRleHQ7CisJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbyA9IGN0eC0+cmVzdWx0 UmVsSW5mbzsKKwlFU3RhdGUJICAgKmVzdGF0ZSA9IGN0eC0+ZXN0YXRlOworCUxvZ2ljYWxSZXBN c2dUeXBlIHNhdmVkX2NvbW1hbmQ7CisKKwkvKiBRdWljayBleGl0IGlmIG5vIGluZGV4ZXMgb3Ig bm8gdHJpZ2dlcnMgKi8KKwlpZiAoIShyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCB8 fAorCQkgIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCSAgIChyZXN1 bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8CisJCQlyZXN1 bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkpKQorCQlyZXR1 cm47CisKKwkvKiBTZXQgcmVsYXRpb24gZm9yIGVycm9yIGNhbGxiYWNrICovCisJYXBwbHlfZXJy b3JfY2FsbGJhY2tfYXJnLnJlbCA9IExhc3RSZWw7CisKKwkvKiBTZXQgY3VycmVudCBjb21tYW5k IGZvciBlcnJvciBjYWxsYmFjayAqLworCXNhdmVkX2NvbW1hbmQgPSBhcHBseV9lcnJvcl9jYWxs YmFja19hcmcuY29tbWFuZDsKKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcuY29tbWFuZCA9IExP R0lDQUxfUkVQX01TR19JTlNFUlQ7CisKKwkvKiBDYWxsZXIgbXVzdCB0YWtlIGNhcmUgb2Ygb3Bl bmluZyBhbmQgY2xvc2luZyB0aGUgaW5kaWNlcyAqLworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUg YW55IGluZGV4ZXMsIHVwZGF0ZSB0aGVtIGZvciBhbGwgdGhlIGluc2VydGVkIHR1cGxlcywgYW5k CisJICogcnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMuCisJICovCisJaWYgKHJlc3VsdFJl bEluZm8tPnJpX051bUluZGljZXMgPiAwKQorCXsKKwkJTGlzdAkgICAqcmVjaGVja0luZGV4ZXM7 CisKKwkJcmVjaGVja0luZGV4ZXMgPQorCQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJl bEluZm8sCisJCQkJCQkJCSAgc2xvdCwgZXN0YXRlLCBmYWxzZSwKKwkJCQkJCQkJICBmYWxzZSwg TlVMTCwgTklMLCBmYWxzZSk7CisKKwkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1 bHRSZWxJbmZvLAorCQkJCQkJCSBzbG90LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJCQkgTlVMTCk7 CisKKwkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKKwl9CisKKwkvKgorCSAqIFRoZXJlJ3Mg bm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3ZSBuZWVkIHRvIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRy aWdnZXJzCisJICogYW55d2F5LgorCSAqLworCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1Ry aWdEZXNjICE9IE5VTEwgJiYKKwkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdf aW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJp Z19pbnNlcnRfbmV3X3RhYmxlKSkKKwl7CisJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwg cmVzdWx0UmVsSW5mbywKKwkJCQkJCQkgc2xvdCwgTklMLAorCQkJCQkJCSBOVUxMKTsKKwl9CisK KwkvKgorCSAqIFhYWCB3ZSBzaG91bGQgaW4gdGhlb3J5IHBhc3MgYSBUcmFuc2l0aW9uQ2FwdHVy ZVN0YXRlIG9iamVjdCB0byB0aGUKKwkgKiBhYm92ZSB0byBjYXB0dXJlIHRyYW5zaXRpb24gdHVw bGVzLCBidXQgYWZ0ZXIgc3RhdGVtZW50IHRyaWdnZXJzIGRvbid0CisJICogYWN0dWFsbHkgZ2V0 IGZpcmVkIGJ5IHJlcGxpY2F0aW9uIHlldCBhbnl3YXkKKwkgKi8KKworCS8qIFJlc2V0IHJlbGF0 aW9uIGZvciBlcnJvciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZWwg PSBOVUxMOworCisJLyogUmVzZXQgdGhlIGN1cnJlbnQgY29tbWFuZCAqLworCWFwcGx5X2Vycm9y X2NhbGxiYWNrX2FyZy5jb21tYW5kID0gc2F2ZWRfY29tbWFuZDsKK30KKworc3RhdGljIExSTXVs dGlJbnNlcnRSZXR1cm5TdGF0dXMKK2RvX211bHRpX2luc2VydHMoU3RyaW5nSW5mbyBzLCBMb2dp Y2FsUmVwUmVsSWQgKnJlbGlkKQogewogCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsOwogCUxv Z2ljYWxSZXBUdXBsZURhdGEgbmV3dHVwOwotCUxvZ2ljYWxSZXBSZWxJZCByZWxpZDsKIAlVc2Vy Q29udGV4dCB1Y3h0OwogCUFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGE7CiAJRVN0YXRlCSAgICpl c3RhdGU7CkBAIC0yMzgwLDE3ICsyNTQzLDE0MiBAQCBhcHBseV9oYW5kbGVfaW5zZXJ0KFN0cmlu Z0luZm8gcykKIAlNZW1vcnlDb250ZXh0IG9sZGN0eDsKIAlib29sCQlydW5fYXNfb3duZXI7CiAK KwlpZiAoTXVsdGlJbnNlcnRTdGF0ZSA9PSBOVUxMKQorCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVw KCk7CisKKwkqcmVsaWQgPSBsb2dpY2FscmVwX3JlYWRfcmVsaWQocyk7CisKKwlpZiAoTXVsdGlJ bnNlcnRTdGF0ZSAhPSBOVUxMICYmCisJCShMYXN0TXVsdGlJbnNlcnRSZWxJZCAhPSBJbnZhbGlk T2lkICYmCisJCSAqcmVsaWQgIT0gSW52YWxpZE9pZCAmJgorCQkgTGFzdE11bHRpSW5zZXJ0UmVs SWQgIT0gKnJlbGlkKSkKKwkJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKKwlpZiAoTXVsdGlJbnNl cnRTdGF0ZSA9PSBOVUxMKQorCQlyZWwgPSBsb2dpY2FscmVwX3JlbF9vcGVuKCpyZWxpZCwgUm93 RXhjbHVzaXZlTG9jayk7CisJZWxzZQorCQlyZWwgPSBMYXN0UmVsOworCisJaWYgKCFzaG91bGRf YXBwbHlfY2hhbmdlc19mb3JfcmVsKHJlbCkpCisJeworCQlBc3NlcnQoTXVsdGlJbnNlcnRTdGF0 ZSA9PSBOVUxMKTsKKworCQkvKgorCQkgKiBUaGUgcmVsYXRpb24gY2FuJ3QgYmVjb21lIGludGVy ZXN0aW5nIGluIHRoZSBtaWRkbGUgb2YgdGhlCisJCSAqIHRyYW5zYWN0aW9uIHNvIGl0J3Mgc2Fm ZSB0byB1bmxvY2sgaXQuCisJCSAqLworCQlsb2dpY2FscmVwX3JlbF9jbG9zZShyZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCQlyZXR1cm4gTFJfTVVM VElfSU5TRVJUX1JFTF9TS0lQUEVEOworCX0KKworCS8qIEZvciBhIHBhcnRpdGlvbmVkIHRhYmxl LCBsZXQncyBub3QgZG8gbXVsdGkgaW5zZXJ0cy4gKi8KKwlpZiAocmVsLT5sb2NhbHJlbC0+cmRf cmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlBc3NlcnQo TXVsdGlJbnNlcnRTdGF0ZSA9PSBOVUxMKTsKKworCQkvKgorCQkgKiBUaGUgcmVsYXRpb24gY2Fu J3QgYmVjb21lIGludGVyZXN0aW5nIGluIHRoZSBtaWRkbGUgb2YgdGhlCisJCSAqIHRyYW5zYWN0 aW9uIHNvIGl0J3Mgc2FmZSB0byB1bmxvY2sgaXQuCisJCSAqLworCQlsb2dpY2FscmVwX3JlbF9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwor CQlyZXR1cm4gTFJfTVVMVElfSU5TRVJUX0RJU0FMTE9XRUQ7CisJfQorCiAJLyoKLQkgKiBRdWlj ayByZXR1cm4gaWYgd2UgYXJlIHNraXBwaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgb3Ig aGFuZGxpbmcKLQkgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbnMuCisJICogTWFrZSBzdXJlIHRoYXQg YW55IHVzZXItc3VwcGxpZWQgY29kZSBydW5zIGFzIHRoZSB0YWJsZSBvd25lciwgdW5sZXNzCisJ ICogdGhlIHVzZXIgaGFzIG9wdGVkIG91dCBvZiB0aGF0IGJlaGF2aW9yLgogCSAqLwotCWlmIChp c19za2lwcGluZ19jaGFuZ2VzKCkgfHwKLQkJaGFuZGxlX3N0cmVhbWVkX3RyYW5zYWN0aW9uKExP R0lDQUxfUkVQX01TR19JTlNFUlQsIHMpKQotCQlyZXR1cm47CisJcnVuX2FzX293bmVyID0gTXlT dWJzY3JpcHRpb24tPnJ1bmFzb3duZXI7CisJaWYgKCFydW5fYXNfb3duZXIpCisJCVN3aXRjaFRv VW50cnVzdGVkVXNlcihyZWwtPmxvY2FscmVsLT5yZF9yZWwtPnJlbG93bmVyLCAmdWN4dCk7CisK KwkvKiBTZXQgcmVsYXRpb24gZm9yIGVycm9yIGNhbGxiYWNrICovCisJYXBwbHlfZXJyb3JfY2Fs bGJhY2tfYXJnLnJlbCA9IHJlbDsKKworCWlmIChNdWx0aUluc2VydFN0YXRlID09IE5VTEwpCisJ eworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wVHJhbnNhY3Rpb25Db250ZXh0 KTsKKworCQkvKiBJbml0aWFsaXplIHRoZSBleGVjdXRvciBzdGF0ZS4gKi8KKwkJTGFzdEVEYXRh ID0gZWRhdGEgPSBjcmVhdGVfZWRhdGFfZm9yX3JlbGF0aW9uKHJlbCk7CisJCWVzdGF0ZSA9IGVk YXRhLT5lc3RhdGU7CisKKwkJTGFzdFJlbW90ZVNsb3QgPSByZW1vdGVzbG90ID0gTWFrZVR1cGxl VGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3IocmVsLT5sb2NhbHJlbCksCisJCQkJCQkJCQkJCQkJ CSAmVFRTT3BzVmlydHVhbCk7CisKKwkJbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0gKExS TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICopIHBhbGxvYyhzaXplb2YoTFJNb2RpZnlCdWZmZXJG bHVzaENvbnRleHQpKTsKKwkJbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5yZXN1bHRSZWxJ bmZvID0gZWRhdGEtPnRhcmdldFJlbEluZm87CisJCW1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4 dC0+ZXN0YXRlID0gZXN0YXRlOworCisJCU11bHRpSW5zZXJ0U3RhdGUgPSB0YWJsZV9tb2RpZnlf YmVnaW4oZWRhdGEtPnRhcmdldFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJ ICBUTV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJCSAgR2V0Q3VycmVudENvbW1hbmRJ ZCh0cnVlKSwKKwkJCQkJCQkJCQkJICAwLAorCQkJCQkJCQkJCQkgIExSTW9kaWZ5QnVmZmVyRmx1 c2hDYWxsYmFjaywKKwkJCQkJCQkJCQkJICBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOwor CQlMYXN0UmVsID0gcmVsOworCQlMYXN0TXVsdGlJbnNlcnRSZWxJZCA9ICpyZWxpZDsKKworCQkv KiBXZSBtdXN0IG9wZW4gaW5kZXhlcyBoZXJlLiAqLworCQlFeGVjT3BlbkluZGljZXMoZWRhdGEt PnRhcmdldFJlbEluZm8sIGZhbHNlKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4 KTsKKwl9CisJZWxzZQorCXsKKwkJQ29tbWFuZElkCWNpZDsKKworCQllZGF0YSA9IExhc3RFRGF0 YTsKKwkJZXN0YXRlID0gZWRhdGEtPmVzdGF0ZTsKKwkJUmVzZXRFeHByQ29udGV4dChHZXRQZXJU dXBsZUV4cHJDb250ZXh0KGVzdGF0ZSkpOworCQlFeGVjQ2xlYXJUdXBsZShMYXN0UmVtb3RlU2xv dCk7CisJCXJlbW90ZXNsb3QgPSBMYXN0UmVtb3RlU2xvdDsKKwkJY2lkID0gR2V0Q3VycmVudENv bW1hbmRJZCh0cnVlKTsKKwkJTXVsdGlJbnNlcnRTdGF0ZS0+Y2lkID0gY2lkOworCQllc3RhdGUt PmVzX291dHB1dF9jaWQgPSBjaWQ7CisJfQorCisJLyogUHJvY2VzcyBhbmQgc3RvcmUgcmVtb3Rl IHR1cGxlIGluIHRoZSBzbG90ICovCisJbG9naWNhbHJlcF9yZWFkX2luc2VydF92MihzLCAmbmV3 dHVwKTsKKwlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlD b250ZXh0KGVzdGF0ZSkpOworCXNsb3Rfc3RvcmVfZGF0YShyZW1vdGVzbG90LCByZWwsICZuZXd0 dXApOworCXNsb3RfZmlsbF9kZWZhdWx0cyhyZWwsIGVzdGF0ZSwgcmVtb3Rlc2xvdCk7CisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisKKwlUYXJnZXRQcml2aWxlZ2VzQ2hlY2soZWRh dGEtPnRhcmdldFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywgQUNMX0lOU0VSVCk7CisJRXhlY1Jl bGF0aW9uTXVsdGlJbnNlcnQoTXVsdGlJbnNlcnRTdGF0ZSwgZWRhdGEtPnRhcmdldFJlbEluZm8s IGVzdGF0ZSwgcmVtb3Rlc2xvdCk7CisKKwkvKiBSZXNldCByZWxhdGlvbiBmb3IgZXJyb3IgY2Fs bGJhY2sgKi8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0gTlVMTDsKKworCWlmICgh cnVuX2FzX293bmVyKQorCQlSZXN0b3JlVXNlckNvbnRleHQoJnVjeHQpOworCisJQXNzZXJ0KE11 bHRpSW5zZXJ0U3RhdGUgIT0gTlVMTCk7CisKKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwor CisJcmV0dXJuIExSX01VTFRJX0lOU0VSVF9ET05FOworfQorCitzdGF0aWMgYm9vbAorZG9fc2lu Z2xlX2luc2VydHMoU3RyaW5nSW5mbyBzLCBMb2dpY2FsUmVwUmVsSWQgcmVsaWQpCit7CisJTG9n aWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7CisJTG9naWNhbFJlcFR1cGxlRGF0YSBuZXd0dXA7CisJ VXNlckNvbnRleHQgdWN4dDsKKwlBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhOworCUVTdGF0ZQkg ICAqZXN0YXRlOworCVR1cGxlVGFibGVTbG90ICpyZW1vdGVzbG90OworCU1lbW9yeUNvbnRleHQg b2xkY3R4OworCWJvb2wJCXJ1bl9hc19vd25lcjsKKworCUFzc2VydChyZWxpZCAhPSBJbnZhbGlk T2lkKTsKIAogCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAotCXJlbGlkID0gbG9naWNhbHJl cF9yZWFkX2luc2VydChzLCAmbmV3dHVwKTsKIAlyZWwgPSBsb2dpY2FscmVwX3JlbF9vcGVuKHJl bGlkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAlpZiAoIXNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9y ZWwocmVsKSkKIAl7CkBAIC0yNDAwLDcgKzI2ODgsNyBAQCBhcHBseV9oYW5kbGVfaW5zZXJ0KFN0 cmluZ0luZm8gcykKIAkJICovCiAJCWxvZ2ljYWxyZXBfcmVsX2Nsb3NlKHJlbCwgUm93RXhjbHVz aXZlTG9jayk7CiAJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0JCXJldHVybjsKKwkJcmV0dXJu IGZhbHNlOwogCX0KIAogCS8qCkBAIC0yNDIyLDYgKzI3MTAsNyBAQCBhcHBseV9oYW5kbGVfaW5z ZXJ0KFN0cmluZ0luZm8gcykKIAkJCQkJCQkJCQkmVFRTT3BzVmlydHVhbCk7CiAKIAkvKiBQcm9j ZXNzIGFuZCBzdG9yZSByZW1vdGUgdHVwbGUgaW4gdGhlIHNsb3QgKi8KKwlsb2dpY2FscmVwX3Jl YWRfaW5zZXJ0X3YyKHMsICZuZXd0dXApOwogCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhHZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7CiAJc2xvdF9zdG9yZV9kYXRhKHJl bW90ZXNsb3QsIHJlbCwgJm5ld3R1cCk7CiAJc2xvdF9maWxsX2RlZmF1bHRzKHJlbCwgZXN0YXRl LCByZW1vdGVzbG90KTsKQEAgLTI0NDYsNiArMjczNSwzNSBAQCBhcHBseV9oYW5kbGVfaW5zZXJ0 KFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlbF9jbG9zZShyZWwsIE5vTG9jayk7CiAKIAll bmRfcmVwbGljYXRpb25fc3RlcCgpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBIYW5k bGUgSU5TRVJUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfaW5zZXJ0 KFN0cmluZ0luZm8gcykKK3sKKwlMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVzIG1pX3N0YXR1czsK KwlMb2dpY2FsUmVwUmVsSWQgcmVsaWQ7CisKKwkvKgorCSAqIFF1aWNrIHJldHVybiBpZiB3ZSBh cmUgc2tpcHBpbmcgZGF0YSBtb2RpZmljYXRpb24gY2hhbmdlcyBvciBoYW5kbGluZworCSAqIHN0 cmVhbWVkIHRyYW5zYWN0aW9ucy4KKwkgKi8KKwlpZiAoaXNfc2tpcHBpbmdfY2hhbmdlcygpIHx8 CisJCWhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9NU0dfSU5TRVJULCBz KSkKKwkJcmV0dXJuOworCisJbWlfc3RhdHVzID0gZG9fbXVsdGlfaW5zZXJ0cyhzLCAmcmVsaWQp OworCWlmIChtaV9zdGF0dXMgPT0gTFJfTVVMVElfSU5TRVJUX1JFTF9TS0lQUEVEIHx8CisJCW1p X3N0YXR1cyA9PSBMUl9NVUxUSV9JTlNFUlRfRE9ORSkKKwkJcmV0dXJuOworCisJZG9fc2luZ2xl X2luc2VydHMocywgcmVsaWQpOworCisJcmV0dXJuOwogfQogCiAvKgpAQCAtMjUzMiw2ICsyODUw LDggQEAgYXBwbHlfaGFuZGxlX3VwZGF0ZShTdHJpbmdJbmZvIHMpCiAJTWVtb3J5Q29udGV4dCBv bGRjdHg7CiAJYm9vbAkJcnVuX2FzX293bmVyOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisK IAkvKgogCSAqIFF1aWNrIHJldHVybiBpZiB3ZSBhcmUgc2tpcHBpbmcgZGF0YSBtb2RpZmljYXRp b24gY2hhbmdlcyBvciBoYW5kbGluZwogCSAqIHN0cmVhbWVkIHRyYW5zYWN0aW9ucy4KQEAgLTI3 MTMsNiArMzAzMyw4IEBAIGFwcGx5X2hhbmRsZV9kZWxldGUoU3RyaW5nSW5mbyBzKQogCU1lbW9y eUNvbnRleHQgb2xkY3R4OwogCWJvb2wJCXJ1bl9hc19vd25lcjsKIAorCUZpbmlzaE11bHRpSW5z ZXJ0cygpOworCiAJLyoKIAkgKiBRdWljayByZXR1cm4gaWYgd2UgYXJlIHNraXBwaW5nIGRhdGEg bW9kaWZpY2F0aW9uIGNoYW5nZXMgb3IgaGFuZGxpbmcKIAkgKiBzdHJlYW1lZCB0cmFuc2FjdGlv bnMuCkBAIC0zMTU0LDYgKzM0NzYsOCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5m byBzKQogCUxpc3RDZWxsICAgKmxjOwogCUxPQ0tNT0RFCWxvY2ttb2RlID0gQWNjZXNzRXhjbHVz aXZlTG9jazsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJLyoKIAkgKiBRdWljayByZXR1 cm4gaWYgd2UgYXJlIHNraXBwaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgb3IgaGFuZGxp bmcKIAkgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbnMuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRl eCA5NzcwNzUyZWEzLi44ZjEwZWE5NzdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTE0 LDYgKzE0LDcgQEAKICNpZm5kZWYgRVhFQ1VUT1JfSAogI2RlZmluZSBFWEVDVVRPUl9ICiAKKyNp bmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNkZXNjLmgi CiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL2xvY2tvcHRpb25zLmgiCkBAIC02 NTYsNiArNjU3LDkgQEAgZXh0ZXJuIGJvb2wgUmVsYXRpb25GaW5kUmVwbFR1cGxlU2VxKFJlbGF0 aW9uIHJlbCwgTG9ja1R1cGxlTW9kZSBsb2NrbW9kZSwKIAogZXh0ZXJuIHZvaWQgRXhlY1NpbXBs ZVJlbGF0aW9uSW5zZXJ0KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJCQkJCQkg RVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIEV4ZWNS ZWxhdGlvbk11bHRpSW5zZXJ0KFRhYmxlTW9kaWZ5U3RhdGUgKk11bHRpSW5zZXJ0U3RhdGUsCisJ CQkJCQkJCQlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJRVN0YXRlICpl c3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiB2b2lkIEV4ZWNTaW1wbGVSZWxh dGlvblVwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkJIEVTdGF0 ZSAqZXN0YXRlLCBFUFFTdGF0ZSAqZXBxc3RhdGUsCiAJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3Qg KnNlYXJjaHNsb3QsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmgKaW5kZXggYzQwOTYzOGEyZS4uM2YzYTdmMGEzMSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTIyNiw2ICsyMjYsOCBAQCBleHRlcm4gdm9p ZCBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4 aWQsCiAJCQkJCQkJCQlSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqbmV3 c2xvdCwKIAkJCQkJCQkJCWJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpOworZXh0ZXJu IExvZ2ljYWxSZXBSZWxJZCBsb2dpY2FscmVwX3JlYWRfcmVsaWQoU3RyaW5nSW5mbyBpbik7Citl eHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfaW5zZXJ0X3YyKFN0cmluZ0luZm8gaW4sIExvZ2lj YWxSZXBUdXBsZURhdGEgKm5ld3R1cCk7CiBleHRlcm4gTG9naWNhbFJlcFJlbElkIGxvZ2ljYWxy ZXBfcmVhZF9pbnNlcnQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFR1cGxlRGF0YSAqbmV3dHVw KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKFN0cmluZ0luZm8gb3V0LCBU cmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJlbGF0aW9uIHJlbCwKZGlmZiAtLWdpdCBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggMzM1M2ZhYTZjZC4uNDJmMjdkZGE3MCAxMDA2NDQKLS0tIGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTE0NzAsNiArMTQ3MCw4IEBAIExQVEhSRUFEX1NUQVJUX1JPVVRJTkUKIExQ VFNUUgogTFBWT0lECiBMUFdTVFIKK0xSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0CitMUk11bHRp SW5zZXJ0UmV0dXJuU3RhdHVzCiBMU0VHCiBMVUlECiBMVlJlbFN0YXRlCi0tIAoyLjM0LjEKCg== --00000000000026c178061a1f4a58 Content-Type: application/x-patch; name="v22-0005-Use-new-multi-insert-table-AM-for-COPY.patch" Content-Disposition: attachment; filename="v22-0005-Use-new-multi-insert-table-AM-for-COPY.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx0z1t7a4 RnJvbSA0NjQ2MjUzOTc0OWIwMDY5NWVkNTRhNTdiZTg5ZWRhOGMyNzhmYmVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgNCBKdW4gMjAyNCAyMDoyNzoxMiArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjIyIDUvNV0gVXNlIG5ldyBtdWx0aSBpbnNlcnQgdGFibGUgQU0g Zm9yIENPUFkKClRoaXMgY29tbWl0IHVzZXMgdGhlIG5ldyBtdWx0aSBpbnNlcnQgdGFibGUgQU0g YWRkZWQgYnkgY29tbWl0Cjw8Q0hBTkdFX01FPj4gZm9yIENPUFkgLi4uIEZST00gY29tbWFuZC4K CkF1dGhvcjogQmhhcmF0aCBSdXBpcmVkZHkKUmV2aWV3ZWQtYnk6IEplZmYgRGF2aXMKRGlzY3Vz c2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUxqMkFDVmk5ZVRS WVIlM0RnZGNhNXd4dGozS2tfOXE5cVZjY3hzUzFobmdUR09DalB3USU0MG1haWwuZ21haWwuY29t CkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvODYzMzE3 MWNiMDM0YWFmYzI2MGZkZjM3ZGYwNGI2Yzc3OWFhMWUyZi5jYW1lbCU0MGotZGF2aXMuY29tCi0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAgICAgICB8IDIzNCArKysrKysr KysrKysrKystLS0tLS0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwu aCB8ICAgNCArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICB8ICAg MSArCiAzIGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA4MSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weWZyb20uYwppbmRleCBjZTRkNjJlNzA3Li44MmI2ZjdmYWExIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTcxLDE0ICs3MSwyNSBAQAogLyogVHJpbSB0aGUgbGlz dCBvZiBidWZmZXJzIGJhY2sgZG93biB0byB0aGlzIG51bWJlciBhZnRlciBmbHVzaGluZyAqLwog I2RlZmluZSBNQVhfUEFSVElUSU9OX0JVRkZFUlMJMzIKIAordHlwZWRlZiBzdHJ1Y3QgQ29weU1v ZGlmeUJ1ZmZlckZsdXNoQ29udGV4dAoreworCUNvcHlGcm9tU3RhdGUgY3N0YXRlOworCVJlc3Vs dFJlbEluZm8gKnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICplc3RhdGU7Cit9IENvcHlNb2Rp ZnlCdWZmZXJGbHVzaENvbnRleHQ7CisKIC8qIFN0b3JlcyBtdWx0aS1pbnNlcnQgZGF0YSByZWxh dGVkIHRvIGEgc2luZ2xlIHJlbGF0aW9uIGluIENvcHlGcm9tLiAqLwogdHlwZWRlZiBzdHJ1Y3Qg Q29weU11bHRpSW5zZXJ0QnVmZmVyCiB7Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3RzW01BWF9CVUZG RVJFRF9UVVBMRVNdOyAvKiBBcnJheSB0byBzdG9yZSB0dXBsZXMgKi8KKwlUYWJsZU1vZGlmeVN0 YXRlICptc3RhdGU7CS8qIFRhYmxlIGluc2VydCBzdGF0ZTsgTlVMTCBpZiBmb3JlaWduIHRhYmxl ICovCisJVHVwbGVUYWJsZVNsb3QgKipzbG90czsJCS8qIEFycmF5IHRvIHN0b3JlIHR1cGxlcyAq LwogCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CS8qIFJlc3VsdFJlbEluZm8gZm9yICdy ZWxpZCcgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogQnVsa0luc2VydFN0YXRlIGZv ciB0aGlzIHJlbCBpZiBwbGFpbgotCQkJCQkJCQkgKiB0YWJsZTsgTlVMTCBpZiBmb3JlaWduIHRh YmxlICovCisJVHVwbGVUYWJsZVNsb3QgKm11bHRpc2xvdDsKKwlDb3B5TW9kaWZ5QnVmZmVyRmx1 c2hDb250ZXh0ICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQ7CiAJaW50CQkJbnVzZWQ7CQkJ LyogbnVtYmVyIG9mICdzbG90cycgY29udGFpbmluZyB0dXBsZXMgKi8KKwlpbnQJCQljdXJyc2xv dG5vOwkJLyogQ3VycmVudCBidWZmZXJlZCBzbG90IG51bWJlciB0aGF0J3MgYmVpbmcKKwkJCQkJ CQkJICogZmx1c2hlZDsgVXNlZCB0byBnZXQgY29ycmVjdCBjdXJfbGluZW5vIGZvcgorCQkJCQkJ CQkgKiBlcnJvcnMgd2hpbGUgaW4gZmx1c2ggY2FsbGJhY2suICovCiAJdWludDY0CQlsaW5lbm9z W01BWF9CVUZGRVJFRF9UVVBMRVNdOwkvKiBMaW5lICMgb2YgdHVwbGUgaW4gY29weQogCQkJCQkJ CQkJCQkJICogc3RyZWFtICovCiB9IENvcHlNdWx0aUluc2VydEJ1ZmZlcjsKQEAgLTk5LDYgKzEx MCw3IEBAIHR5cGVkZWYgc3RydWN0IENvcHlNdWx0aUluc2VydEluZm8KIAlpbnQJCQl0aV9vcHRp b25zOwkJLyogdGFibGUgaW5zZXJ0IG9wdGlvbnMgKi8KIH0gQ29weU11bHRpSW5zZXJ0SW5mbzsK IAorc3RhdGljIHZvaWQgQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4 dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCiAvKiBub24tZXhwb3J0IGZ1bmN0aW9uIHByb3Rv dHlwZXMgKi8KIHN0YXRpYyB2b2lkIENsb3NlUGlwZUZyb21Qcm9ncmFtKENvcHlGcm9tU3RhdGUg Y3N0YXRlKTsKQEAgLTIxOCwxNCArMjMwLDM3IEBAIENvcHlMaW1pdFByaW50b3V0TGVuZ3RoKGNv bnN0IGNoYXIgKnN0cikKICAqIFJlc3VsdFJlbEluZm8uCiAgKi8KIHN0YXRpYyBDb3B5TXVsdGlJ bnNlcnRCdWZmZXIgKgotQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChSZXN1bHRSZWxJbmZvICpy cmkpCitDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KENvcHlNdWx0aUluc2VydEluZm8gKm1paW5m bywgUmVzdWx0UmVsSW5mbyAqcnJpLAorCQkJCQkJICBDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRVN0 YXRlICplc3RhdGUpCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXI7CiAKIAlidWZm ZXIgPSAoQ29weU11bHRpSW5zZXJ0QnVmZmVyICopIHBhbGxvYyhzaXplb2YoQ29weU11bHRpSW5z ZXJ0QnVmZmVyKSk7Ci0JbWVtc2V0KGJ1ZmZlci0+c2xvdHMsIDAsIHNpemVvZihUdXBsZVRhYmxl U2xvdCAqKSAqIE1BWF9CVUZGRVJFRF9UVVBMRVMpOworCisJaWYgKHJyaS0+cmlfRmR3Um91dGlu ZSA9PSBOVUxMKQorCXsKKwkJYnVmZmVyLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSAo Q29weU1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dCAqKSBwYWxsb2Moc2l6ZW9mKENvcHlNb2RpZnlC dWZmZXJGbHVzaENvbnRleHQpKTsKKwkJYnVmZmVyLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRl eHQtPmNzdGF0ZSA9IGNzdGF0ZTsKKwkJYnVmZmVyLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRl eHQtPnJlc3VsdFJlbEluZm8gPSBycmk7CisJCWJ1ZmZlci0+bW9kaWZ5X2J1ZmZlcl9mbHVzaF9j b250ZXh0LT5lc3RhdGUgPSBlc3RhdGU7CisKKwkJYnVmZmVyLT5tc3RhdGUgPSB0YWJsZV9tb2Rp ZnlfYmVnaW4ocnJpLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCVRNX0ZMQUdfQkFTX0JV TEtXUklURSwKKwkJCQkJCQkJCQkJbWlpbmZvLT5teWNpZCwKKwkJCQkJCQkJCQkJbWlpbmZvLT50 aV9vcHRpb25zLAorCQkJCQkJCQkJCQlDb3B5TW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjaywKKwkJ CQkJCQkJCQkJYnVmZmVyLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOworCQlidWZmZXIt PnNsb3RzID0gTlVMTDsKKwkJYnVmZmVyLT5tdWx0aXNsb3QgPSBOVUxMOworCX0KKwllbHNlCisJ eworCQlidWZmZXItPm1zdGF0ZSA9IE5VTEw7CisJCWJ1ZmZlci0+c2xvdHMgPSBwYWxsb2MwKHNp emVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIE1BWF9CVUZGRVJFRF9UVVBMRVMpOworCQlidWZmZXIt Pm11bHRpc2xvdCA9IE5VTEw7CisJfQorCiAJYnVmZmVyLT5yZXN1bHRSZWxJbmZvID0gcnJpOwot CWJ1ZmZlci0+YmlzdGF0ZSA9IChycmktPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkgPyBHZXRCdWxr SW5zZXJ0U3RhdGUoKSA6IE5VTEw7CiAJYnVmZmVyLT5udXNlZCA9IDA7CiAKIAlyZXR1cm4gYnVm ZmVyOwpAQCAtMjM2LDExICsyNzEsMTIgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChSZXN1 bHRSZWxJbmZvICpycmkpCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogQ29weU11bHRpSW5zZXJ0 SW5mb1NldHVwQnVmZmVyKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKLQkJCQkJCQkgICBS ZXN1bHRSZWxJbmZvICpycmkpCisJCQkJCQkJICAgUmVzdWx0UmVsSW5mbyAqcnJpLCBDb3B5RnJv bVN0YXRlIGNzdGF0ZSwKKwkJCQkJCQkgICBFU3RhdGUgKmVzdGF0ZSkKIHsKIAlDb3B5TXVsdGlJ bnNlcnRCdWZmZXIgKmJ1ZmZlcjsKIAotCWJ1ZmZlciA9IENvcHlNdWx0aUluc2VydEJ1ZmZlcklu aXQocnJpKTsKKwlidWZmZXIgPSBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KG1paW5mbywgcnJp LCBjc3RhdGUsIGVzdGF0ZSk7CiAKIAkvKiBTZXR1cCBiYWNrLWxpbmsgc28gd2UgY2FuIGVhc2ls eSBmaW5kIHRoaXMgYnVmZmVyIGFnYWluICovCiAJcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZm ZXIgPSBidWZmZXI7CkBAIC0yNzMsNyArMzA5LDcgQEAgQ29weU11bHRpSW5zZXJ0SW5mb0luaXQo Q29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCiAJICogdHVw bGVzIHRoZWlyIHdheSBmb3IgdGhlIGZpcnN0IHRpbWUuCiAJICovCiAJaWYgKHJyaS0+cmlfUmVs YXRpb25EZXNjLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkK LQkJQ29weU11bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVyKG1paW5mbywgcnJpKTsKKwkJQ29weU11 bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVyKG1paW5mbywgcnJpLCBjc3RhdGUsIGVzdGF0ZSk7CiB9 CiAKIC8qCkBAIC0zMTcsOCArMzUzLDYgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29w eU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogCQlpbnQJCQliYXRjaF9zaXplID0gcmVzdWx0UmVs SW5mby0+cmlfQmF0Y2hTaXplOwogCQlpbnQJCQlzZW50ID0gMDsKIAotCQlBc3NlcnQoYnVmZmVy LT5iaXN0YXRlID09IE5VTEwpOwotCiAJCS8qIEVuc3VyZSB0aGF0IHRoZSBGRFcgc3VwcG9ydHMg YmF0Y2hpbmcgYW5kIGl0J3MgZW5hYmxlZCAqLwogCQlBc3NlcnQocmVzdWx0UmVsSW5mby0+cmlf RmR3Um91dGluZS0+RXhlY0ZvcmVpZ25CYXRjaEluc2VydCk7CiAJCUFzc2VydChiYXRjaF9zaXpl ID4gMSk7CkBAIC0zOTAsMTMgKzQyNCw4IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENv cHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIAl9CiAJZWxzZQogCXsKLQkJQ29tbWFuZElkCW15 Y2lkID0gbWlpbmZvLT5teWNpZDsKLQkJaW50CQkJdGlfb3B0aW9ucyA9IG1paW5mby0+dGlfb3B0 aW9uczsKIAkJYm9vbAkJbGluZV9idWZfdmFsaWQgPSBjc3RhdGUtPmxpbmVfYnVmX3ZhbGlkOwog CQl1aW50NjQJCXNhdmVfY3VyX2xpbmVubyA9IGNzdGF0ZS0+Y3VyX2xpbmVubzsKLQkJTWVtb3J5 Q29udGV4dCBvbGRjb250ZXh0OwotCi0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgIT0gTlVMTCk7 CiAKIAkJLyoKIAkJICogUHJpbnQgZXJyb3IgY29udGV4dCBpbmZvcm1hdGlvbiBjb3JyZWN0bHks IGlmIG9uZSBvZiB0aGUgb3BlcmF0aW9ucwpAQCAtNDA0LDU2ICs0MzMsMTggQEAgQ29weU11bHRp SW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogCQkgKi8KIAkJ Y3N0YXRlLT5saW5lX2J1Zl92YWxpZCA9IGZhbHNlOwogCi0JCS8qCi0JCSAqIHRhYmxlX211bHRp X2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNvIHN3aXRjaCB0byBzaG9ydC1saXZlZCBtZW1vcnkK LQkJICogY29udGV4dCBiZWZvcmUgY2FsbGluZyBpdC4KLQkJICovCi0JCW9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOwot CQl0YWJsZV9tdWx0aV9pbnNlcnQocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJ CQkJICAgc2xvdHMsCi0JCQkJCQkgICBudXNlZCwKLQkJCQkJCSAgIG15Y2lkLAotCQkJCQkJICAg dGlfb3B0aW9ucywKLQkJCQkJCSAgIGJ1ZmZlci0+YmlzdGF0ZSk7Ci0JCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJQXNzZXJ0KGJ1ZmZlci0+Y3VycnNsb3RubyA8PSBidWZm ZXItPm51c2VkKTsKKwkJYnVmZmVyLT5jdXJyc2xvdG5vID0gMDsKIAotCQlmb3IgKGkgPSAwOyBp IDwgbnVzZWQ7IGkrKykKLQkJewotCQkJLyoKLQkJCSAqIElmIHRoZXJlIGFyZSBhbnkgaW5kZXhl cywgdXBkYXRlIHRoZW0gZm9yIGFsbCB0aGUgaW5zZXJ0ZWQKLQkJCSAqIHR1cGxlcywgYW5kIHJ1 biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzLgotCQkJICovCi0JCQlpZiAocmVzdWx0UmVsSW5m by0+cmlfTnVtSW5kaWNlcyA+IDApCi0JCQl7Ci0JCQkJTGlzdAkgICAqcmVjaGVja0luZGV4ZXM7 Ci0KLQkJCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxpbmVub3NbaV07Ci0JCQkJcmVj aGVja0luZGV4ZXMgPQotCQkJCQlFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywK LQkJCQkJCQkJCQkgIGJ1ZmZlci0+c2xvdHNbaV0sIGVzdGF0ZSwgZmFsc2UsCi0JCQkJCQkJCQkJ ICBmYWxzZSwgTlVMTCwgTklMLCBmYWxzZSk7Ci0JCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0 YXRlLCByZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJIHNsb3RzW2ldLCByZWNoZWNrSW5kZXhlcywK LQkJCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7Ci0JCQkJbGlzdF9mcmVlKHJl Y2hlY2tJbmRleGVzKTsKLQkJCX0KKwkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaChidWZmZXIt Pm1zdGF0ZSk7CiAKLQkJCS8qCi0JCQkgKiBUaGVyZSdzIG5vIGluZGV4ZXMsIGJ1dCBzZWUgaWYg d2UgbmVlZCB0byBydW4gQUZURVIgUk9XIElOU0VSVAotCQkJICogdHJpZ2dlcnMgYW55d2F5Lgot CQkJICovCi0JCQllbHNlIGlmIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYm Ci0JCQkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVyX3Jv dyB8fAotCQkJCQkgIHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9uZXdf dGFibGUpKQotCQkJewotCQkJCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tp XTsKLQkJCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCi0JCQkJ CQkJCQkgc2xvdHNbaV0sIE5JTCwKLQkJCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVy ZSk7Ci0JCQl9CisJCUFzc2VydChidWZmZXItPmN1cnJzbG90bm8gPD0gYnVmZmVyLT5udXNlZCk7 CisJCWJ1ZmZlci0+Y3VycnNsb3RubyA9IDA7CiAKLQkJCUV4ZWNDbGVhclR1cGxlKHNsb3RzW2ld KTsKLQkJfQorCQkvKgorCQkgKiBJbmRleGVzIGFyZSB1cGRhdGVkIGFuZCBBRlRFUiBST1cgSU5T RVJUIHRyaWdnZXJzIChpZiBhbnkpIGFyZSBydW4KKwkJICogaW4gdGhlIGZsdXNoIGNhbGxiYWNr IENvcHlNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrLgorCQkgKi8KIAogCQkvKiBVcGRhdGUgdGhl IHJvdyBjb3VudGVyIGFuZCBwcm9ncmVzcyBvZiB0aGUgQ09QWSBjb21tYW5kICovCiAJCSpwcm9j ZXNzZWQgKz0gbnVzZWQ7CkBAIC00NjksNiArNDYwLDYwIEBAIENvcHlNdWx0aUluc2VydEJ1ZmZl ckZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIAlidWZmZXItPm51c2VkID0gMDsK IH0KIAorc3RhdGljIHZvaWQKK0NvcHlNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrKHZvaWQgKmNv bnRleHQsIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUNvcHlNb2RpZnlCdWZmZXJGbHVzaENv bnRleHQgKmN0eCA9IChDb3B5TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICopIGNvbnRleHQ7CisJ Q29weUZyb21TdGF0ZSBjc3RhdGUgPSBjdHgtPmNzdGF0ZTsKKwlSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvID0gY3R4LT5yZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0YXRlID0gY3R4 LT5lc3RhdGU7CisJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIgPSByZXN1bHRSZWxJbmZv LT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CisKKwkvKiBRdWljayBleGl0IGlmIG5vIGluZGV4 ZXMgb3Igbm8gdHJpZ2dlcnMgKi8KKwlpZiAoIShyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2Vz ID4gMCB8fAorCQkgIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCSAg IChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8CisJ CQlyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkpKQor CQlyZXR1cm47CisKKwkvKiBDYWxsZXIgbXVzdCB0YWtlIGNhcmUgb2Ygb3BlbmluZyBhbmQgY2xv c2luZyB0aGUgaW5kaWNlcyAqLworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGluZGV4ZXMs IHVwZGF0ZSB0aGVtIGZvciBhbGwgdGhlIGluc2VydGVkIHR1cGxlcywgYW5kCisJICogcnVuIEFG VEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMuCisJICovCisJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051 bUluZGljZXMgPiAwKQorCXsKKwkJTGlzdAkgICAqcmVjaGVja0luZGV4ZXM7CisKKwkJY3N0YXRl LT5jdXJfbGluZW5vID0gYnVmZmVyLT5saW5lbm9zW2J1ZmZlci0+Y3VycnNsb3RubysrXTsKKwkJ cmVjaGVja0luZGV4ZXMgPQorCQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8s CisJCQkJCQkJCSAgc2xvdCwgZXN0YXRlLCBmYWxzZSwKKwkJCQkJCQkJICBmYWxzZSwgTlVMTCwg TklMLCBmYWxzZSk7CisJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5m bywKKwkJCQkJCQkgc2xvdCwgcmVjaGVja0luZGV4ZXMsCisJCQkJCQkJIGNzdGF0ZS0+dHJhbnNp dGlvbl9jYXB0dXJlKTsKKwkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKKwl9CisKKwkvKgor CSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3ZSBuZWVkIHRvIHJ1biBBRlRFUiBS T1cgSU5TRVJUIHRyaWdnZXJzCisJICogYW55d2F5LgorCSAqLworCWVsc2UgaWYgKHJlc3VsdFJl bEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKKwkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJp Z0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJICByZXN1bHRSZWxJbmZvLT5yaV9U cmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkKKwl7CisJCWNzdGF0ZS0+Y3VyX2xpbmVu byA9IGJ1ZmZlci0+bGluZW5vc1tidWZmZXItPmN1cnJzbG90bm8rK107CisJCUV4ZWNBUkluc2Vy dFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkgc2xvdCwgTklMLAorCQkJ CQkJCSBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CisJfQorCisJQXNzZXJ0KGJ1ZmZlci0+ Y3VycnNsb3RubyA8PSBidWZmZXItPm51c2VkKTsKK30KKwogLyoKICAqIERyb3AgdXNlZCBzbG90 cyBhbmQgZnJlZSBtZW1iZXIgZm9yIHRoaXMgYnVmZmVyLgogICoKQEAgLTQ4OSwxOSArNTM0LDE4 IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlp bmZvLAogCiAJaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkKIAl7Ci0J CUFzc2VydChidWZmZXItPmJpc3RhdGUgIT0gTlVMTCk7Ci0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUo YnVmZmVyLT5iaXN0YXRlKTsKKwkJdGFibGVfbW9kaWZ5X2VuZChidWZmZXItPm1zdGF0ZSk7CisJ CUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5tdWx0aXNsb3QpOworCQlwZnJl ZShidWZmZXItPm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCk7CiAJfQogCWVsc2UKLQkJQXNz ZXJ0KGJ1ZmZlci0+YmlzdGF0ZSA9PSBOVUxMKTsKLQotCS8qIFNpbmNlIHdlIG9ubHkgY3JlYXRl IHNsb3RzIG9uIGRlbWFuZCwganVzdCBkcm9wIHRoZSBub24tbnVsbCBvbmVzLiAqLwotCWZvciAo aSA9IDA7IGkgPCBNQVhfQlVGRkVSRURfVFVQTEVTICYmIGJ1ZmZlci0+c2xvdHNbaV0gIT0gTlVM TDsgaSsrKQotCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KGJ1ZmZlci0+c2xvdHNbaV0p OworCXsKKwkJLyogU2luY2Ugd2Ugb25seSBjcmVhdGUgc2xvdHMgb24gZGVtYW5kLCBqdXN0IGRy b3AgdGhlIG5vbi1udWxsIG9uZXMuICovCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVGRkVSRURf VFVQTEVTICYmIGJ1ZmZlci0+c2xvdHNbaV0gIT0gTlVMTDsgaSsrKQorCQkJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChidWZmZXItPnNsb3RzW2ldKTsKIAotCWlmIChyZXN1bHRSZWxJbmZv LT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCi0JCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChyZXN1 bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkJCSBtaWluZm8tPnRpX29wdGlvbnMp OworCQlwZnJlZShidWZmZXItPnNsb3RzKTsKKwl9CiAKIAlwZnJlZShidWZmZXIpOwogfQpAQCAt NTg4LDEzICs2MzIsMzIgQEAgQ29weU11bHRpSW5zZXJ0SW5mb05leHRGcmVlU2xvdChDb3B5TXVs dGlJbnNlcnRJbmZvICptaWluZm8sCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIg PSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKIAlpbnQJCQludXNlZCA9IGJ1ZmZlci0+ bnVzZWQ7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiAKIAlBc3NlcnQoYnVmZmVyICE9IE5VTEwp OwogCUFzc2VydChudXNlZCA8IE1BWF9CVUZGRVJFRF9UVVBMRVMpOwogCi0JaWYgKGJ1ZmZlci0+ c2xvdHNbbnVzZWRdID09IE5VTEwpCi0JCWJ1ZmZlci0+c2xvdHNbbnVzZWRdID0gdGFibGVfc2xv dF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOwotCXJldHVybiBidWZmZXItPnNs b3RzW251c2VkXTsKKwlpZiAocnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCisJeworCQlpZiAo YnVmZmVyLT5tdWx0aXNsb3QgPT0gTlVMTCkKKwkJCWJ1ZmZlci0+bXVsdGlzbG90ID0gTWFrZVR1 cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3IocnJpLT5yaV9SZWxhdGlvbkRlc2MpLAorCQkJ CQkJCQkJCQkJICAgJlRUU09wc1ZpcnR1YWwpOworCisJCS8qIENhbGxlciBtdXN0IGNsZWFyIHRo ZSBzbG90ICovCisJCXNsb3QgPSBidWZmZXItPm11bHRpc2xvdDsKKwl9CisJZWxzZQorCXsKKwkJ aWYgKGJ1ZmZlci0+c2xvdHNbbnVzZWRdID09IE5VTEwpCisJCXsKKwkJCXNsb3QgPSB0YWJsZV9z bG90X2NyZWF0ZShycmktPnJpX1JlbGF0aW9uRGVzYywgTlVMTCk7CisJCQlidWZmZXItPnNsb3Rz W251c2VkXSA9IHNsb3Q7CisJCX0KKwkJZWxzZQorCQkJc2xvdCA9IGJ1ZmZlci0+c2xvdHNbbnVz ZWRdOworCX0KKworCXJldHVybiBzbG90OwogfQogCiAvKgpAQCAtNjA4LDcgKzY3MSwxMSBAQCBD b3B5TXVsdGlJbnNlcnRJbmZvU3RvcmUoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1 bHRSZWxJbmZvICpycmksCiAJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIgPSBycmktPnJp X0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKIAogCUFzc2VydChidWZmZXIgIT0gTlVMTCk7Ci0JQXNz ZXJ0KHNsb3QgPT0gYnVmZmVyLT5zbG90c1tidWZmZXItPm51c2VkXSk7CisKKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCisJaWYgKHJyaS0+cmlfRmR3Um91dGluZSAhPSBOVUxMKQorCQlBc3Nl cnQoc2xvdCA9PSBidWZmZXItPnNsb3RzW2J1ZmZlci0+bnVzZWRdKTsKKyNlbmRpZgogCiAJLyog U3RvcmUgdGhlIGxpbmUgbnVtYmVyIHNvIHdlIGNhbiBwcm9wZXJseSByZXBvcnQgYW55IGVycm9y cyBsYXRlciAqLwogCWJ1ZmZlci0+bGluZW5vc1tidWZmZXItPm51c2VkXSA9IGxpbmVubzsKQEAg LTYxNiw2ICs2ODMsMTQgQEAgQ29weU11bHRpSW5zZXJ0SW5mb1N0b3JlKENvcHlNdWx0aUluc2Vy dEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAqcnJpLAogCS8qIFJlY29yZCB0aGlzIHNsb3Qg YXMgYmVpbmcgdXNlZCAqLwogCWJ1ZmZlci0+bnVzZWQrKzsKIAorCWlmIChycmktPnJpX0Zkd1Jv dXRpbmUgPT0gTlVMTCkKKwl7CisJCUFzc2VydChzbG90ID09IGJ1ZmZlci0+bXVsdGlzbG90KTsK KwkJYnVmZmVyLT5jdXJyc2xvdG5vID0gMDsKKworCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2Vy dChidWZmZXItPm1zdGF0ZSwgc2xvdCk7CisJfQorCiAJLyogVXBkYXRlIGhvdyBtYW55IHR1cGxl cyBhcmUgc3RvcmVkIGFuZCB0aGVpciBzaXplICovCiAJbWlpbmZvLT5idWZmZXJlZFR1cGxlcysr OwogCW1paW5mby0+YnVmZmVyZWRCeXRlcyArPSB0dXBsZW47CkBAIC04MzAsNyArOTA1LDcgQEAg Q29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJLyoKIAkgKiBJdCdzIGdlbmVyYWxseSBt b3JlIGVmZmljaWVudCB0byBwcmVwYXJlIGEgYnVuY2ggb2YgdHVwbGVzIGZvcgogCSAqIGluc2Vy dGlvbiwgYW5kIGluc2VydCB0aGVtIGluIG9uZQotCSAqIHRhYmxlX211bHRpX2luc2VydCgpL0V4 ZWNGb3JlaWduQmF0Y2hJbnNlcnQoKSBjYWxsLCB0aGFuIGNhbGwKKwkgKiB0YWJsZV9tb2RpZnlf YnVmZmVyX2luc2VydCgpL0V4ZWNGb3JlaWduQmF0Y2hJbnNlcnQoKSBjYWxsLCB0aGFuIGNhbGwK IAkgKiB0YWJsZV90dXBsZV9pbnNlcnQoKS9FeGVjRm9yZWlnbkluc2VydCgpIHNlcGFyYXRlbHkg Zm9yIGV2ZXJ5IHR1cGxlLgogCSAqIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZWFz b25zIHdoeSB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBkbwogCSAqIHRoaXMuICBUaGVzZSBhcmUg ZXhwbGFpbmVkIGJlbG93LgpAQCAtMTA4MCw3ICsxMTU1LDggQEAgQ29weUZyb20oQ29weUZyb21T dGF0ZSBjc3RhdGUpCiAJCQkJewogCQkJCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfQ29weU11bHRp SW5zZXJ0QnVmZmVyID09IE5VTEwpCiAJCQkJCQlDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZm ZXIoJm11bHRpSW5zZXJ0SW5mbywKLQkJCQkJCQkJCQkJCQkgICByZXN1bHRSZWxJbmZvKTsKKwkJ CQkJCQkJCQkJCQkgICByZXN1bHRSZWxJbmZvLCBjc3RhdGUsCisJCQkJCQkJCQkJCQkJICAgZXN0 YXRlKTsKIAkJCQl9CiAJCQkJZWxzZSBpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05E SVRJT05BTCAmJgogCQkJCQkJICFDb3B5TXVsdGlJbnNlcnRJbmZvSXNFbXB0eSgmbXVsdGlJbnNl cnRJbmZvKSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVy bmFsLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCmluZGV4IGNh ZDUyZmNjNzguLjE0YWRkYmM2ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2Nv cHlmcm9tX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50 ZXJuYWwuaApAQCAtNDYsOSArNDYsOSBAQCB0eXBlZGVmIGVudW0gRW9sVHlwZQogdHlwZWRlZiBl bnVtIENvcHlJbnNlcnRNZXRob2QKIHsKIAlDSU1fU0lOR0xFLAkJCQkJLyogdXNlIHRhYmxlX3R1 cGxlX2luc2VydCBvciBFeGVjRm9yZWlnbkluc2VydCAqLwotCUNJTV9NVUxUSSwJCQkJCS8qIGFs d2F5cyB1c2UgdGFibGVfbXVsdGlfaW5zZXJ0IG9yCisJQ0lNX01VTFRJLAkJCQkJLyogYWx3YXlz IHVzZSB0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydCBvcgogCQkJCQkJCQkgKiBFeGVjRm9yZWln bkJhdGNoSW5zZXJ0ICovCi0JQ0lNX01VTFRJX0NPTkRJVElPTkFMLAkJLyogdXNlIHRhYmxlX211 bHRpX2luc2VydCBvcgorCUNJTV9NVUxUSV9DT05ESVRJT05BTCwJCS8qIHVzZSB0YWJsZV9tb2Rp ZnlfYnVmZmVyX2luc2VydCBvcgogCQkJCQkJCQkgKiBFeGVjRm9yZWlnbkJhdGNoSW5zZXJ0IG9u bHkgaWYgdmFsaWQgKi8KIH0gQ29weUluc2VydE1ldGhvZDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA0MmYyN2RkYTcwLi40NzQwYzY5NDZlIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtNDk0LDYgKzQ5NCw3IEBAIENvcHlIZWFkZXJDaG9pY2UKIENvcHlJbnNlcnRNZXRo b2QKIENvcHlMb2dWZXJib3NpdHlDaG9pY2UKIENvcHlNZXRob2QKK0NvcHlNb2RpZnlCdWZmZXJG bHVzaENvbnRleHQKIENvcHlNdWx0aUluc2VydEJ1ZmZlcgogQ29weU11bHRpSW5zZXJ0SW5mbwog Q29weU9uRXJyb3JDaG9pY2UKLS0gCjIuMzQuMQoK --00000000000026c178061a1f4a58--