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 1rnD2R-00C6n0-W9 for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Mar 2024 07:40:36 +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 1rnD2P-00BHcl-NQ for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Mar 2024 07:40:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rnD2P-00BHcd-9H for pgsql-hackers@lists.postgresql.org; Thu, 21 Mar 2024 07:40:33 +0000 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rnD2M-005ga8-DV for pgsql-hackers@postgresql.org; Thu, 21 Mar 2024 07:40:32 +0000 Received: by mail-lj1-x231.google.com with SMTP id 38308e7fff4ca-2d687da75c4so8178811fa.0 for ; Thu, 21 Mar 2024 00:40:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711006830; x=1711611630; 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=IdkrnT/PADLJTQrfz5R8YrFN2OLqheUNXzlXeoKsF0o=; b=RbEfAAHzATVQA9vcr2bn+/J4iC8+BWoj3jYMxVYk/iMH9B9SbzkLfbTufikF4n6NGE HLZZqemH/2uS4HZnGHKL5U357I2hhFP9xnlJuRsxdhQPEQR+XiRox35BQLhu6ZMPl2m2 Okvuisj0KMQq1xaZxYV7JdhbaVDJFX2P70zs3+JmpijUoLajc3Ee5UC4KJ2NRuH6jpsT O7yH/XzFXk4+fjHDxkcRK1NaCgglOUSKw2p6+QKogAdEaifl8/4BqYS5CvstlSEH0OT0 o12dei79t5BnmSReKAZFB0n1HGqtEIKZ2hRsZ2gH+kDIL0PTe53ERKwYt5s/I0jFu/Nz dL5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711006830; x=1711611630; 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=IdkrnT/PADLJTQrfz5R8YrFN2OLqheUNXzlXeoKsF0o=; b=pxslkkauDE6vTa4y/Qm7YzzjjRZYAcYLQvG3Vk7JQOddhtOgcKPvtjdF67AmJ/Sdji NyqWythyYEaA3I8qhH0TWk8aTogzl/BgDPEAL6dFdxG/nQB6RxU5AkQcyR0xL+W1P9PJ F5arpR6Ig30FR3G1bHAheXAMZTTl5d+Nuf92Gk/AOLEBg2yqT1ZFLUNrUaHo0WM7ZAyq cA5Z8nVS2nEuX3FRCIGS0i/WmrLtJYRydPkXFo/+2qQnWPPucdbJw7lDo/OEYOzpwMqB RezntPss83QbcQpxwBUJeYU1c5jvusixl29yvLwzMxEPSzhaFBmXZNTQmH0Y+VUlCZGh rQnw== X-Gm-Message-State: AOJu0YxbbisJ9ZEfSaWScm9xGbHTRN+SVgm5S62jm8QUgDVzRjFUZNUK d85T+LJB9WEYl3cznSqEiw+8oQmh20h7tdJinyAuAnU98ESWHKwlbljaw69AXI6lqxkqyXWc0Cp +eq2bLFaiw439F0FmesrJwS7mzh4= X-Google-Smtp-Source: AGHT+IF1F3uW3IXxZHHYmw2gK7SOiUm2YKVqn/NlHSOBsSQRjUov0x9qSyx0qk1e/FtrDCNoaX0GKTZAZytFlSgao/0= X-Received: by 2002:a2e:93c2:0:b0:2d2:4637:63f with SMTP id p2-20020a2e93c2000000b002d24637063fmr11273107ljh.45.1711006829442; Thu, 21 Mar 2024 00:40:29 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> In-Reply-To: From: Bharath Rupireddy Date: Thu, 21 Mar 2024 13:10:16 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Masahiko Sawada Cc: PostgreSQL-development , Andres Freund , Dilip Kumar , Luc Vlaming , Justin Pryzby , Jeff Davis , Michael Paquier , Matthias van de Meent Content-Type: multipart/mixed; boundary="000000000000471468061426d234" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000471468061426d234 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 21, 2024 at 9:44=E2=80=AFAM Bharath Rupireddy wrote: > > Yes, usingVirtualTupleTableSlot helps improve the performance a lot. > Below are results from my testing. Note that CMV, RMV, CTAS stand for > CREATE MATERIALIZED VIEW, REFRESH MATERIALIZED VIEW, CREATE TABLE AS > respectively. These commands got faster by 62.54%, 68.87%, 74.31% or > 2.67, 3.21, 3.89 times respectively. I've used the test case specified > at [1]. > > HEAD: > CMV: > Time: 6276.468 ms (00:06.276) > CTAS: > Time: 8141.632 ms (00:08.142) > RMV: > Time: 14747.139 ms (00:14.747) > > PATCHED: > CMV: > Time: 2350.282 ms (00:02.350) > CTAS: > Time: 2091.427 ms (00:02.091) > RMV: > Time: 4590.180 ms (00:04.590) > > I quickly looked at the description of what a "virtual" tuple is from > src/include/executor/tuptable.h [2]. IIUC, it is invented for > minimizing data copying, but it also says that it's the responsibility > of the generating plan node to be sure these resources are not > released for as long as the virtual tuple needs to be valid or is > materialized. While it says this, as far as this patch is concerned, > the virtual slot gets materialized when we copy the tuples from source > slot (can be any type of slot) to destination slot (which is virtual > slot). See ExecCopySlot-> > tts_virtual_copyslot->tts_virtual_materialize. This way, > tts_virtual_copyslot ensures the tuples storage doesn't depend on > external memory because all the datums that aren't passed by value are > copied into the slot's memory context. > > With the above understanding, it looks safe to use virtual slots for > the multi insert buffered slots. I'm not so sure if I'm missing > anything here. I'm attaching the v13 patches using virtual tuple slots for buffered tuples for multi inserts. --=20 Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --000000000000471468061426d234 Content-Type: application/octet-stream; name="v13-0001-New-table-AMs-for-single-and-multi-inserts.patch" Content-Disposition: attachment; filename="v13-0001-New-table-AMs-for-single-and-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu0wecl90 RnJvbSBkNjllN2YwODEwZDc4YjgwYTYzYTVkZmY2NTQyNWRhYTVlMDczMWM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjEgTWFyIDIwMjQgMDc6MDI6NDMgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxMyAxLzRdIE5ldyB0YWJsZSBBTXMgZm9yIHNpbmdsZSBhbmQg bXVsdGkgaW5zZXJ0cwoKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAg ICAgIHwgMjM1ICsrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jIHwgICA5ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAg ICAgICAgICAgICAgfCAgNDkgKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAg ICAgICAgICAgfCAxMzggKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA0MzEgaW5zZXJ0 aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggMzRiYzYwZjYyNS4uZmQyYjM4 MTRkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNs dWRlICJzdG9yYWdlL3N0YW5kYnkuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1 ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRl ICJ1dGlscy9zcGNjYWNoZS5oIgpAQCAtMjQ0Miw2ICsyNDQzLDI0MCBAQCBoZWFwX211bHRpX2lu c2VydChSZWxhdGlvbiByZWxhdGlvbiwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG50dXBs ZXMsCiAJcGdzdGF0X2NvdW50X2hlYXBfaW5zZXJ0KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAor LyoKKyAqIEluaXRpYWxpemUgc3RhdGUgcmVxdWlyZWQgZm9yIGFuIGluc2VydCBhIHNpbmdsZSB0 dXBsZSBvciBtdWx0aXBsZSB0dXBsZXMKKyAqIGludG8gYSBoZWFwLgorICovCitUYWJsZUluc2Vy dFN0YXRlICoKK2hlYXBfaW5zZXJ0X2JlZ2luKFJlbGF0aW9uIHJlbCwgQ29tbWFuZElkIGNpZCwg aW50IGFtX2ZsYWdzLCBpbnQgaW5zZXJ0X2ZsYWdzKQoreworCVRhYmxlSW5zZXJ0U3RhdGUgKnRp c3RhdGU7CisKKwl0aXN0YXRlID0gcGFsbG9jMChzaXplb2YoVGFibGVJbnNlcnRTdGF0ZSkpOwor CXRpc3RhdGUtPnJlbCA9IHJlbDsKKwl0aXN0YXRlLT5jaWQgPSBjaWQ7CisJdGlzdGF0ZS0+YW1f ZmxhZ3MgPSBhbV9mbGFnczsKKwl0aXN0YXRlLT5pbnNlcnRfZmxhZ3MgPSBpbnNlcnRfZmxhZ3M7 CisKKwlpZiAoKGFtX2ZsYWdzICYgVEFCTEVBTV9NVUxUSV9JTlNFUlRTKSAhPSAwIHx8CisJCShh bV9mbGFncyAmIFRBQkxFQU1fQlVMS1dSSVRFX0JVRkZFUl9BQ0NFU1NfU1RSQVRFR1kpKQorCQl0 aXN0YXRlLT5hbV9kYXRhID0gcGFsbG9jMChzaXplb2YoSGVhcEluc2VydFN0YXRlKSk7CisKKwlp ZiAoKGFtX2ZsYWdzICYgVEFCTEVBTV9NVUxUSV9JTlNFUlRTKSAhPSAwKQorCXsKKwkJSGVhcE11 bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisKKwkJbWlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEhl YXBNdWx0aUluc2VydFN0YXRlKSk7CisJCW1pc3RhdGUtPnNsb3RzID0gcGFsbG9jMChzaXplb2Yo VHVwbGVUYWJsZVNsb3QgKikgKiBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUyk7CisKKwkJbWlzdGF0 ZS0+Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJCQkJCSAiaGVhcF9tdWx0aV9pbnNlcnRfdjIgbWVtb3J5IGNvbnRleHQiLAorCQkJ CQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJCSgoSGVhcEluc2VydFN0YXRl ICopIHRpc3RhdGUtPmFtX2RhdGEpLT5taXN0YXRlID0gbWlzdGF0ZTsKKwl9CisKKwlpZiAoKGFt X2ZsYWdzICYgVEFCTEVBTV9CVUxLV1JJVEVfQlVGRkVSX0FDQ0VTU19TVFJBVEVHWSkgIT0gMCkK KwkJKChIZWFwSW5zZXJ0U3RhdGUgKikgdGlzdGF0ZS0+YW1fZGF0YSktPmJpc3RhdGUgPSBHZXRC dWxrSW5zZXJ0U3RhdGUoKTsKKworCXJldHVybiB0aXN0YXRlOworfQorCisvKgorICogSW5zZXJ0 IGEgc2luZ2xlIHR1cGxlIGludG8gYSBoZWFwLgorICovCit2b2lkCitoZWFwX2luc2VydF92MihU YWJsZUluc2VydFN0YXRlICogc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCWJvb2wJ CXNob3VsZEZyZWUgPSB0cnVlOworCUhlYXBUdXBsZQl0dXBsZSA9IEV4ZWNGZXRjaFNsb3RIZWFw VHVwbGUoc2xvdCwgdHJ1ZSwgJnNob3VsZEZyZWUpOworCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRl ID0gTlVMTDsKKworCUFzc2VydChzdGF0ZS0+YW1fZGF0YSAhPSBOVUxMICYmCisJCSAgICgoSGVh cEluc2VydFN0YXRlICopIHN0YXRlLT5hbV9kYXRhKS0+bWlzdGF0ZSA9PSBOVUxMKTsKKworCS8q IFVwZGF0ZSB0dXBsZSB3aXRoIHRhYmxlIG9pZCAqLworCXNsb3QtPnR0c190YWJsZU9pZCA9IFJl bGF0aW9uR2V0UmVsaWQoc3RhdGUtPnJlbCk7CisJdHVwbGUtPnRfdGFibGVPaWQgPSBzbG90LT50 dHNfdGFibGVPaWQ7CisKKwlpZiAoc3RhdGUtPmFtX2RhdGEgIT0gTlVMTCAmJgorCQkoKEhlYXBJ bnNlcnRTdGF0ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPmJpc3RhdGUgIT0gTlVMTCkKKwkJYmlzdGF0 ZSA9ICgoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5hbV9kYXRhKS0+YmlzdGF0ZTsKKworCS8q IFBlcmZvcm0gaW5zZXJ0aW9uLCBhbmQgY29weSB0aGUgcmVzdWx0aW5nIEl0ZW1Qb2ludGVyICov CisJaGVhcF9pbnNlcnQoc3RhdGUtPnJlbCwgdHVwbGUsIHN0YXRlLT5jaWQsIHN0YXRlLT5pbnNl cnRfZmxhZ3MsCisJCQkJYmlzdGF0ZSk7CisJSXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxm LCAmc2xvdC0+dHRzX3RpZCk7CisKKwlpZiAoc2hvdWxkRnJlZSkKKwkJcGZyZWUodHVwbGUpOwor fQorCisvKgorICogQ3JlYXRlL3JldHVybiBuZXh0IGZyZWUgc2xvdCBmcm9tIG11bHRpLWluc2Vy dCBidWZmZXJlZCBzbG90cyBhcnJheS4KKyAqLworVHVwbGVUYWJsZVNsb3QgKgoraGVhcF9tdWx0 aV9pbnNlcnRfbmV4dF9mcmVlX3Nsb3QoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKQoreworCVR1 cGxlVGFibGVTbG90ICpzbG90OworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCisJ QXNzZXJ0KHN0YXRlLT5hbV9kYXRhICE9IE5VTEwgJiYKKwkJICAgKChIZWFwSW5zZXJ0U3RhdGUg Kikgc3RhdGUtPmFtX2RhdGEpLT5taXN0YXRlICE9IE5VTEwpOworCisJbWlzdGF0ZSA9ICgoSGVh cEluc2VydFN0YXRlICopIHN0YXRlLT5hbV9kYXRhKS0+bWlzdGF0ZTsKKwlzbG90ID0gbWlzdGF0 ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXTsKKworCWlmIChzbG90ID09IE5VTEwpCisJewor CQlzbG90ID0gTWFrZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3Ioc3RhdGUtPnJlbCks CisJCQkJCQkJCSAgJlRUU09wc1ZpcnR1YWwpOworCQltaXN0YXRlLT5zbG90c1ttaXN0YXRlLT5j dXJfc2xvdHNdID0gc2xvdDsKKwl9CisJZWxzZQorCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwor CXJldHVybiBzbG90OworfQorCisvKgorICogU3RvcmUgcGFzc2VkLWluIHR1cGxlIGludG8gaW4t bWVtb3J5IGJ1ZmZlcmVkIHNsb3RzLiBXaGVuIGZ1bGwsIGluc2VydAorICogbXVsdGlwbGUgdHVw bGVzIGZyb20gdGhlIGJ1ZmZlcnMgaW50byBoZWFwLgorICovCit2b2lkCitoZWFwX211bHRpX2lu c2VydF92MihUYWJsZUluc2VydFN0YXRlICogc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQor eworCVR1cGxlVGFibGVTbG90ICpkc3RzbG90OworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0 YXRlOworCisJQXNzZXJ0KHN0YXRlLT5hbV9kYXRhICE9IE5VTEwgJiYKKwkJICAgKChIZWFwSW5z ZXJ0U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5taXN0YXRlICE9IE5VTEwpOworCisJbWlzdGF0 ZSA9ICgoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5hbV9kYXRhKS0+bWlzdGF0ZTsKKwlkc3Rz bG90ID0gbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXTsKKworCWlmIChkc3RzbG90 ID09IE5VTEwpCisJeworCQkvKgorCQkgKiBXZSB1c2UgdmlydHVhbCB0dXBsZSBzbG90cyBidWZm ZXJlZCBzbG90cyBmb3IgbGV2ZXJhZ2luZyB0aGUKKwkJICogb3B0aW1pemF0aW9uIGl0IHByb3Zp ZGVzIHRvIG1pbmltaXplIHBoeXNpY2FsIGRhdGEgY29weWluZy4gVGhlCisJCSAqIHZpcnR1YWwg c2xvdCBnZXRzIG1hdGVyaWFsaXplZCB3aGVuIHdlIGNvcHkgKHZpYSBiZWxvdworCQkgKiBFeGVj Q29weVNsb3QpIHRoZSB0dXBsZXMgZnJvbSB0aGUgc291cmNlIHNsb3Qgd2hpY2ggY2FuIGJlIG9m IGFueQorCQkgKiB0eXBlLiBUaGlzIHdheSwgaXQgaXMgZW5zdXJlZCB0aGF0IHRoZSB0dXBsZSBz dG9yYWdlIGRvZXNuJ3QgZGVwZW5kCisJCSAqIG9uIGV4dGVybmFsIG1lbW9yeSwgYmVjYXVzZSBh bGwgdGhlIGRhdHVtcyB0aGF0IGFyZW4ndCBwYXNzZWQgYnkKKwkJICogdmFsdWUgYXJlIGNvcGll ZCBpbnRvIHRoZSBzbG90J3MgbWVtb3J5IGNvbnRleHQuCisJCSAqLworCQlkc3RzbG90ID0gTWFr ZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3Ioc3RhdGUtPnJlbCksCisJCQkJCQkJCQkg JlRUU09wc1ZpcnR1YWwpOworCQltaXN0YXRlLT5zbG90c1ttaXN0YXRlLT5jdXJfc2xvdHNdID0g ZHN0c2xvdDsKKwl9CisKKwkvKgorCSAqIENhbGxlciBtYXkgaGF2ZSBnb3QgdGhlIHNsb3QgdXNp bmcgaGVhcF9tdWx0aV9pbnNlcnRfbmV4dF9mcmVlX3Nsb3QsCisJICogZmlsbGVkIGl0IGFuZCBw YXNzZWQuIFNvLCBza2lwIGNvcHlpbmcgaW4gc3VjaCBhIGNhc2UuCisJICovCisJaWYgKChzdGF0 ZS0+YW1fZmxhZ3MgJiBUQUJMRUFNX1NLSVBfTVVMVElfSU5TRVJUU19GTFVTSCkgPT0gMCkKKwl7 CisJCUV4ZWNDbGVhclR1cGxlKGRzdHNsb3QpOworCQlFeGVjQ29weVNsb3QoZHN0c2xvdCwgc2xv dCk7CisJfQorCWVsc2UKKwkJQXNzZXJ0KGRzdHNsb3QgPT0gc2xvdCk7CisKKwltaXN0YXRlLT5j dXJfc2xvdHMrKzsKKworCS8qCisJICogV2hlbiBwYXNzZWQtaW4gc2xvdCBpcyBhbHJlYWR5IG1h dGVyaWFsaXplZCwgbWVtb3J5IGFsbG9jYXRlZCBpbiBzbG90J3MKKwkgKiBtZW1vcnkgY29udGV4 dCBpcyBhIGNsb3NlIGFwcHJveGltYXRpb24gZm9yIHVzIHRvIHRyYWNrIHRoZSByZXF1aXJlZAor CSAqIHNwYWNlIGZvciB0aGUgdHVwbGUgaW4gc2xvdC4KKwkgKgorCSAqIEZvciBub24tbWF0ZXJp YWxpemVkIHNsb3RzLCB0aGUgZmx1c2hpbmcgZGVjaXNpb24gaGFwcGVucyBzb2xlbHkgb24gdGhl CisJICogbnVtYmVyIG9mIHR1cGxlcyBzdG9yZWQgaW4gdGhlIGJ1ZmZlci4KKwkgKi8KKwlpZiAo VFRTX1NIT1VMREZSRUUoc2xvdCkpCisJCW1pc3RhdGUtPmN1cl9zaXplICs9IE1lbW9yeUNvbnRl eHRNZW1BbGxvY2F0ZWQoc2xvdC0+dHRzX21jeHQsIGZhbHNlKTsKKworCWlmICgoc3RhdGUtPmFt X2ZsYWdzICYgVEFCTEVBTV9TS0lQX01VTFRJX0lOU0VSVFNfRkxVU0gpID09IDAgJiYKKwkJKG1p c3RhdGUtPmN1cl9zbG90cyA+PSBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUyB8fAorCQkgbWlzdGF0 ZS0+Y3VyX3NpemUgPj0gSEVBUF9NQVhfQlVGRkVSRURfQllURVMpKQorCQloZWFwX211bHRpX2lu c2VydF9mbHVzaChzdGF0ZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gcG9pbnRlciB0byBtdWx0aS1p bnNlcnQgYnVmZmVyZWQgc2xvdHMgYXJyYXkgYW5kIG51bWJlciBvZiBjdXJyZW50bHkKKyAqIG9j Y3VwaWVkIHNsb3RzLgorICovCitUdXBsZVRhYmxlU2xvdCAqKgoraGVhcF9tdWx0aV9pbnNlcnRf c2xvdHMoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlLCBpbnQgKm51bV9zbG90cykKK3sKKwlIZWFw TXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsKKworCW1pc3RhdGUgPSAoKEhlYXBJbnNlcnRTdGF0 ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPm1pc3RhdGU7CisJKm51bV9zbG90cyA9IG1pc3RhdGUtPmN1 cl9zbG90czsKKworCXJldHVybiBtaXN0YXRlLT5zbG90czsKK30KKworLyoKKyAqIEluc2VydCBt dWx0aXBsZSB0dXBsZXMgZnJvbSBpbi1tZW1vcnkgYnVmZmVyZWQgc2xvdHMgaW50byBoZWFwLgor ICovCit2b2lkCitoZWFwX211bHRpX2luc2VydF9mbHVzaChUYWJsZUluc2VydFN0YXRlICogc3Rh dGUpCit7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisJQnVsa0luc2VydFN0YXRl IGJpc3RhdGUgPSBOVUxMOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCW1pc3RhdGUg PSAoKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPm1pc3RhdGU7CisKKwlpZiAo c3RhdGUtPmFtX2RhdGEgIT0gTlVMTCAmJgorCQkoKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ YW1fZGF0YSktPmJpc3RhdGUgIT0gTlVMTCkKKwkJYmlzdGF0ZSA9ICgoSGVhcEluc2VydFN0YXRl ICopIHN0YXRlLT5hbV9kYXRhKS0+YmlzdGF0ZTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8obWlzdGF0ZS0+Y29udGV4dCk7CisJaGVhcF9tdWx0aV9pbnNlcnQoc3RhdGUt PnJlbCwgbWlzdGF0ZS0+c2xvdHMsIG1pc3RhdGUtPmN1cl9zbG90cywKKwkJCQkJICBzdGF0ZS0+ Y2lkLCBzdGF0ZS0+aW5zZXJ0X2ZsYWdzLCBiaXN0YXRlKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dFJlc2V0KG1pc3RhdGUtPmNvbnRleHQpOwor CisJbWlzdGF0ZS0+Y3VyX3Nsb3RzID0gMDsKKwltaXN0YXRlLT5jdXJfc2l6ZSA9IDA7Cit9CisK Ky8qCisgKiBDbGVhbiB1cCBzdGF0ZSB1c2VkIHRvIGluc2VydCBhIHNpbmdsZSBvciBtdWx0aXBs ZSB0dXBsZXMgaW50byBhIGhlYXAuCisgKi8KK3ZvaWQKK2hlYXBfaW5zZXJ0X2VuZChUYWJsZUlu c2VydFN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT5hbV9kYXRhICE9IE5VTEwgJiYKKwkJ KChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5taXN0YXRlICE9IE5VTEwpCisJ eworCQlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZSA9CisJCQkoKEhlYXBJbnNlcnRTdGF0 ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPm1pc3RhdGU7CisKKwkJLyogSW5zZXJ0IHJlbWFpbmluZyB0 dXBsZXMgZnJvbSBtdWx0aS1pbnNlcnQgYnVmZmVycyAqLworCQlpZiAobWlzdGF0ZS0+Y3VyX3Ns b3RzID4gMCB8fCBtaXN0YXRlLT5jdXJfc2l6ZSA+IDApCisJCQloZWFwX211bHRpX2luc2VydF9m bHVzaChzdGF0ZSk7CisKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShtaXN0YXRlLT5jb250ZXh0KTsK KworCQlmb3IgKGludCBpID0gMDsgaSA8IEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTICYmIG1pc3Rh dGUtPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNs b3QobWlzdGF0ZS0+c2xvdHNbaV0pOworCisJCXBmcmVlKG1pc3RhdGUpOworCQkoKEhlYXBJbnNl cnRTdGF0ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPm1pc3RhdGUgPSBOVUxMOworCX0KKworCWlmIChz dGF0ZS0+YW1fZGF0YSAhPSBOVUxMICYmCisJCSgoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5h bV9kYXRhKS0+YmlzdGF0ZSAhPSBOVUxMKQorCQlGcmVlQnVsa0luc2VydFN0YXRlKCgoSGVhcElu c2VydFN0YXRlICopIHN0YXRlLT5hbV9kYXRhKS0+YmlzdGF0ZSk7CisKKwlwZnJlZShzdGF0ZS0+ YW1fZGF0YSk7CisJc3RhdGUtPmFtX2RhdGEgPSBOVUxMOworCXBmcmVlKHN0YXRlKTsKK30KKwog LyoKICAqCXNpbXBsZV9oZWFwX2luc2VydCAtIGluc2VydCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggNjgwYTUwYmY4Yi4uODQ3OTNmMzI0 ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0yNTYyLDYg KzI1NjIsMTUgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0g ewogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1 bGF0aXZlLAogCS50dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSA9IGhlYXBhbV90dXBsZV9jb21w bGV0ZV9zcGVjdWxhdGl2ZSwKIAkubXVsdGlfaW5zZXJ0ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisK KwkudHVwbGVfaW5zZXJ0X2JlZ2luID0gaGVhcF9pbnNlcnRfYmVnaW4sCisJLnR1cGxlX2luc2Vy dF92MiA9IGhlYXBfaW5zZXJ0X3YyLAorCS50dXBsZV9tdWx0aV9pbnNlcnRfbmV4dF9mcmVlX3Ns b3QgPSBoZWFwX211bHRpX2luc2VydF9uZXh0X2ZyZWVfc2xvdCwKKwkudHVwbGVfbXVsdGlfaW5z ZXJ0X3YyID0gaGVhcF9tdWx0aV9pbnNlcnRfdjIsCisJLnR1cGxlX211bHRpX2luc2VydF9zbG90 cyA9IGhlYXBfbXVsdGlfaW5zZXJ0X3Nsb3RzLAorCS50dXBsZV9tdWx0aV9pbnNlcnRfZmx1c2gg PSBoZWFwX211bHRpX2luc2VydF9mbHVzaCwKKwkudHVwbGVfaW5zZXJ0X2VuZCA9IGhlYXBfaW5z ZXJ0X2VuZCwKKwogCS50dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVsZXRlLAogCS50dXBs ZV91cGRhdGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1 cGxlX2xvY2ssCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNGIxMzNmNjg1OS4uMDUzYmUxODExMCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaApAQCAtMjI1LDYgKzIyNSw0MCBAQCBodHN2X2dldF92YWxpZF9zdGF0dXMo aW50IHN0YXR1cykKIAlyZXR1cm4gKEhUU1ZfUmVzdWx0KSBzdGF0dXM7CiB9CiAKKy8qCisgKiBN YXhpbXVtIG51bWJlciBvZiBzbG90cyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBob2xk LgorICoKKyAqIENhdXRpb246IERvbid0IG1ha2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBjb3VsZCBl bmQgdXAgd2l0aCB0aGlzIG1hbnkgdHVwbGVzCisgKiBzdG9yZWQgaW4gbXVsdGkgaW5zZXJ0IGJ1 ZmZlci4gRm9yIGluc3RhbmNlLCBpbmNyZWFzaW5nIHRoaXMgY2FuIGNhdXNlCisgKiBxdWFkcmF0 aWMgZ3Jvd3RoIGluIG1lbW9yeSByZXF1aXJlbWVudHMgZHVyaW5nIGNvcGllcyBpbnRvIHBhcnRp dGlvbmVkCisgKiB0YWJsZXMgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBwYXJ0aXRpb25zLgorICov CisjZGVmaW5lIEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTCQkxMDAwCisKKy8qIE1heGltdW0gc2l6 ZSBvZiBhbGwgdHVwbGVzIHRoYXQgbXVsdGktaW5zZXJ0IGJ1ZmZlcnMgY2FuIGhvbGQgKi8KKyNk ZWZpbmUgSEVBUF9NQVhfQlVGRkVSRURfQllURVMJCTY1NTM1CisKK3R5cGVkZWYgc3RydWN0IEhl YXBNdWx0aUluc2VydFN0YXRlCit7CisJLyogTWVtb3J5IGNvbnRleHQgdG8gdXNlIGZvciBmbHVz aGluZyBtdWx0aS1pbnNlcnQgYnVmZmVycyAqLworCU1lbW9yeUNvbnRleHQgY29udGV4dDsKKwor CS8qIEFycmF5IG9mIGJ1ZmZlcmVkIHNsb3RzICovCisJVHVwbGVUYWJsZVNsb3QgKipzbG90czsK KworCS8qIE51bWJlciBvZiBzbG90cyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGN1cnJlbnRs eSBob2xkICovCisJaW50CQkJY3VyX3Nsb3RzOworCisJLyogU2l6ZSBvZiBhbGwgdHVwbGVzIHRo YXQgbXVsdGktaW5zZXJ0IGJ1ZmZlcnMgY3VycmVudGx5IGhvbGQgKi8KKwlTaXplCQljdXJfc2l6 ZTsKK30JCQlIZWFwTXVsdGlJbnNlcnRTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgSGVhcEluc2Vy dFN0YXRlCit7CisJc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKmJpc3RhdGU7CisJSGVhcE11 bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7Cit9CQkJSGVhcEluc2VydFN0YXRlOworCiAvKiAtLS0t LS0tLS0tLS0tLS0tCiAgKgkJZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgaGVhcCBhY2Nlc3MgbWV0 aG9kCiAgKgpAQCAtMjc1LDYgKzMwOSwyMSBAQCBleHRlcm4gdm9pZCBoZWFwX2luc2VydChSZWxh dGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29tbWFuZElkIGNpZCwKIGV4dGVybiB2b2lk IGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBzdHJ1Y3QgVHVwbGVUYWJsZVNs b3QgKipzbG90cywKIAkJCQkJCQkgIGludCBudHVwbGVzLCBDb21tYW5kSWQgY2lkLCBpbnQgb3B0 aW9ucywKIAkJCQkJCQkgIEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKKworZXh0ZXJuIFRhYmxl SW5zZXJ0U3RhdGUgKiBoZWFwX2luc2VydF9iZWdpbihSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJ CUNvbW1hbmRJZCBjaWQsCisJCQkJCQkJCQkJCWludCBhbV9mbGFncywKKwkJCQkJCQkJCQkJaW50 IGluc2VydF9mbGFncyk7CitleHRlcm4gdm9pZCBoZWFwX2luc2VydF92MihUYWJsZUluc2VydFN0 YXRlICogc3RhdGUsCisJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CitleHRlcm4gVHVw bGVUYWJsZVNsb3QgKmhlYXBfbXVsdGlfaW5zZXJ0X25leHRfZnJlZV9zbG90KFRhYmxlSW5zZXJ0 U3RhdGUgKiBzdGF0ZSk7CitleHRlcm4gdm9pZCBoZWFwX211bHRpX2luc2VydF92MihUYWJsZUlu c2VydFN0YXRlICogc3RhdGUsCisJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CitleHRl cm4gVHVwbGVUYWJsZVNsb3QgKipoZWFwX211bHRpX2luc2VydF9zbG90cyhUYWJsZUluc2VydFN0 YXRlICogc3RhdGUsCisJCQkJCQkJCQkJCQlpbnQgKm51bV9zbG90cyk7CitleHRlcm4gdm9pZCBo ZWFwX211bHRpX2luc2VydF9mbHVzaChUYWJsZUluc2VydFN0YXRlICogc3RhdGUpOworZXh0ZXJu IHZvaWQgaGVhcF9pbnNlcnRfZW5kKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSk7CisKIGV4dGVy biBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRp ZCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0 LAogCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0 KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDgyNDliMzdiYmYuLjg0MmNiZGQxNmUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaApAQCAtMjQ3LDYgKzI0Nyw0MyBAQCB0eXBlZGVmIHN0cnVjdCBUTV9JbmRleERl bGV0ZU9wCiAJVE1fSW5kZXhTdGF0dXMgKnN0YXR1czsKIH0gVE1fSW5kZXhEZWxldGVPcDsKIAor LyogVXNlIG11bHRpIGluc2VydHMsIGkuZS4gYnVmZmVyIG11bHRpcGxlIHR1cGxlcyBhbmQgaW5z ZXJ0IHRoZW0gYXQgb25jZSAqLworI2RlZmluZSBUQUJMRUFNX01VTFRJX0lOU0VSVFMgMHgwMDAw MDEKKworLyogVXNlIEJBU19CVUxLV1JJVEUgYnVmZmVyIGFjY2VzcyBzdHJhdGVneSAqLworI2Rl ZmluZSBUQUJMRUFNX0JVTEtXUklURV9CVUZGRVJfQUNDRVNTX1NUUkFURUdZIDB4MDAwMDAyCisK Ky8qCisgKiBTa2lwIGZsdXNoaW5nIGJ1ZmZlcmVkIHR1cGxlcyBhdXRvbWF0aWNhbGx5LiBSZXNw b25zaWJpbGl0eSBsaWVzIHdpdGggdGhlCisgKiBjYWxsZXIgdG8gZmx1c2ggdGhlIGJ1ZmZlcmVk IHR1cGxlcy4KKyAqLworI2RlZmluZSBUQUJMRUFNX1NLSVBfTVVMVElfSU5TRVJUU19GTFVTSCAw eDAwMDAwNAorCisKKy8qIEhvbGRzIHRhYmxlIGluc2VydCBzdGF0ZS4gKi8KK3R5cGVkZWYgc3Ry dWN0IFRhYmxlSW5zZXJ0U3RhdGUKK3sKKwkvKiBUYWJsZSBBTS1hZ25vc3RpYyBkYXRhIHN0YXJ0 cyBoZXJlICovCisKKwlSZWxhdGlvbglyZWw7CQkJLyogVGFyZ2V0IHJlbGF0aW9uICovCisKKwkv KgorCSAqIENvbW1hbmQgSUQgZm9yIHRoaXMgaW5zZXJ0aW9uLiBJZiByZXF1aXJlZCwgY2hhbmdl IHRoaXMgZm9yIGVhY2ggcGFzcworCSAqIG9mIGluc2VydCBmdW5jdGlvbnMuCisJICovCisJQ29t bWFuZElkCWNpZDsKKworCS8qIFRhYmxlIEFNIG9wdGlvbnMgKFRBQkxFQU1fWFhYIG1hY3Jvcykg Ki8KKwlpbnQJCQlhbV9mbGFnczsKKworCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5j ZSBvcHRpb25zIChUQUJMRV9JTlNFUlRfWFhYIG1hY3JvcykgKi8KKwlpbnQJCQlpbnNlcnRfZmxh Z3M7CisKKwkvKiBUYWJsZSBBTSBzcGVjaWZpYyBkYXRhIHN0YXJ0cyBoZXJlICovCisKKwl2b2lk CSAgICphbV9kYXRhOworfQkJCVRhYmxlSW5zZXJ0U3RhdGU7CisKIC8qICJvcHRpb25zIiBmbGFn IGJpdHMgZm9yIHRhYmxlX3R1cGxlX2luc2VydCAqLwogLyogVEFCTEVfSU5TRVJUX1NLSVBfV0FM IHdhcyAweDAwMDE7IFJlbGF0aW9uTmVlZHNXQUwoKSBub3cgZ292ZXJucyAqLwogI2RlZmluZSBU QUJMRV9JTlNFUlRfU0tJUF9GU00JCTB4MDAwMgpAQCAtNTIyLDYgKzU1OSwyMCBAQCB0eXBlZGVm IHN0cnVjdCBUYWJsZUFtUm91dGluZQogCXZvaWQJCSgqbXVsdGlfaW5zZXJ0KSAoUmVsYXRpb24g cmVsLCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbnNsb3RzLAogCQkJCQkJCQkgQ29tbWFu ZElkIGNpZCwgaW50IG9wdGlvbnMsIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpiaXN0YXRl KTsKIAorCVRhYmxlSW5zZXJ0U3RhdGUgKigqdHVwbGVfaW5zZXJ0X2JlZ2luKSAoUmVsYXRpb24g cmVsLAorCQkJCQkJCQkJCQkgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkJIGludCBhbV9mbGFn cywKKwkJCQkJCQkJCQkJIGludCBpbnNlcnRfZmxhZ3MpOworCXZvaWQJCSgqdHVwbGVfaW5zZXJ0 X3YyKSAoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlLAorCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3Qg KnNsb3QpOworCXZvaWQJCSgqdHVwbGVfbXVsdGlfaW5zZXJ0X3YyKSAoVGFibGVJbnNlcnRTdGF0 ZSAqIHN0YXRlLAorCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCVR1cGxlVGFi bGVTbG90ICooKnR1cGxlX211bHRpX2luc2VydF9uZXh0X2ZyZWVfc2xvdCkgKFRhYmxlSW5zZXJ0 U3RhdGUgKiBzdGF0ZSk7CisJVHVwbGVUYWJsZVNsb3QgKiooKnR1cGxlX211bHRpX2luc2VydF9z bG90cykgKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgaW50ICpudW1f c2xvdHMpOworCXZvaWQJCSgqdHVwbGVfbXVsdGlfaW5zZXJ0X2ZsdXNoKSAoVGFibGVJbnNlcnRT dGF0ZSAqIHN0YXRlKTsKKwl2b2lkCQkoKnR1cGxlX2luc2VydF9lbmQpIChUYWJsZUluc2VydFN0 YXRlICogc3RhdGUpOworCiAJLyogc2VlIHRhYmxlX3R1cGxlX2RlbGV0ZSgpIGZvciByZWZlcmVu Y2UgYWJvdXQgcGFyYW1ldGVycyAqLwogCVRNX1Jlc3VsdAkoKnR1cGxlX2RlbGV0ZSkgKFJlbGF0 aW9uIHJlbCwKIAkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTE0NTEsNiArMTUwMiw5MyBA QCB0YWJsZV9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqKnNsb3Rz LCBpbnQgbnNsb3RzLAogCQkJCQkJCQkgIGNpZCwgb3B0aW9ucywgYmlzdGF0ZSk7CiB9CiAKK3N0 YXRpYyBpbmxpbmUgVGFibGVJbnNlcnRTdGF0ZSAqCit0YWJsZV9pbnNlcnRfYmVnaW4oUmVsYXRp b24gcmVsLCBDb21tYW5kSWQgY2lkLCBpbnQgYW1fZmxhZ3MsCisJCQkJICAgaW50IGluc2VydF9m bGFncykKK3sKKwlpZiAocmVsLT5yZF90YWJsZWFtICYmIHJlbC0+cmRfdGFibGVhbS0+dHVwbGVf aW5zZXJ0X2JlZ2luKQorCQlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfYmVn aW4ocmVsLCBjaWQsIGFtX2ZsYWdzLAorCQkJCQkJCQkJCQkJICAgaW5zZXJ0X2ZsYWdzKTsKKwll bHNlCisJeworCQllbG9nKEVSUk9SLCAidGFibGVfaW5zZXJ0X2JlZ2luIGFjY2VzcyBtZXRob2Qg aXMgbm90IGltcGxlbWVudGVkIGZvciByZWxhdGlvbiBcIiVzXCIiLAorCQkJIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpOworCQlyZXR1cm4gTlVMTDsJCQkvKiBrZWVwIGNvbXBpbGVyIHF1 aWV0ICovCisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX3R1cGxlX2luc2VydF92 MihUYWJsZUluc2VydFN0YXRlICogc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCWlm IChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1 cGxlX2luc2VydF92MikKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfaW5zZXJ0X3Yy KHN0YXRlLCBzbG90KTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ0YWJsZV90dXBsZV9pbnNlcnRf djIgYWNjZXNzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlbGF0aW9uIFwiJXNcIiIs CisJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUtPnJlbCkpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK3RhYmxlX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICogc3Rh dGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCWlmIChzdGF0ZS0+cmVsLT5yZF90YWJsZWFt ICYmCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF92MikKKwkJ c3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbXVsdGlfaW5zZXJ0X3YyKHN0YXRlLCBzbG90 KTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ0YWJsZV9tdWx0aV9pbnNlcnRfdjIgYWNjZXNzIG1l dGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkgUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUoc3RhdGUtPnJlbCkpOworfQorCitzdGF0aWMgaW5saW5lIFR1cGxl VGFibGVTbG90ICoKK3RhYmxlX211bHRpX2luc2VydF9uZXh0X2ZyZWVfc2xvdChUYWJsZUluc2Vy dFN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJc3Rh dGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbXVsdGlfaW5zZXJ0X25leHRfZnJlZV9zbG90KQor CQlyZXR1cm4gc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbXVsdGlfaW5zZXJ0X25leHRf ZnJlZV9zbG90KHN0YXRlKTsKKwllbHNlCisJeworCQllbG9nKEVSUk9SLCAidGFibGVfbXVsdGlf aW5zZXJ0X25leHRfZnJlZV9zbG90IGFjY2VzcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZv ciByZWxhdGlvbiBcIiVzXCIiLAorCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5y ZWwpKTsKKwkJcmV0dXJuIE5VTEw7CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KK30K Kworc3RhdGljIGlubGluZSBUdXBsZVRhYmxlU2xvdCAqKgordGFibGVfbXVsdGlfaW5zZXJ0X3Ns b3RzKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSwgaW50ICpudW1fc2xvdHMpCit7CisJaWYgKHN0 YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVf bXVsdGlfaW5zZXJ0X3Nsb3RzKQorCQlyZXR1cm4gc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVw bGVfbXVsdGlfaW5zZXJ0X3Nsb3RzKHN0YXRlLCBudW1fc2xvdHMpOworCWVsc2UKKwl7CisJCWVs b2coRVJST1IsICJ0YWJsZV9tdWx0aV9pbnNlcnRfc2xvdHMgYWNjZXNzIG1ldGhvZCBpcyBub3Qg aW1wbGVtZW50ZWQgZm9yIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUoc3RhdGUtPnJlbCkpOworCQlyZXR1cm4gTlVMTDsJCQkvKiBrZWVwIGNvbXBpbGVyIHF1 aWV0ICovCisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX211bHRpX2luc2VydF9m bHVzaChUYWJsZUluc2VydFN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT5yZWwtPnJkX3Rh YmxlYW0gJiYKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbXVsdGlfaW5zZXJ0X2Zs dXNoKQorCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tdWx0aV9pbnNlcnRfZmx1c2go c3RhdGUpOworCWVsc2UKKwkJZWxvZyhFUlJPUiwgInRhYmxlX211bHRpX2luc2VydF9mbHVzaCBh Y2Nlc3MgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgcmVsYXRpb24gXCIlc1wiIiwKKwkJ CSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+cmVsKSk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZAordGFibGVfaW5zZXJ0X2VuZChUYWJsZUluc2VydFN0YXRlICogc3RhdGUpCit7CisJ aWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+ dHVwbGVfaW5zZXJ0X2VuZCkKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfaW5zZXJ0 X2VuZChzdGF0ZSk7CisJZWxzZQorCQllbG9nKEVSUk9SLCAidGFibGVfaW5zZXJ0X2VuZCBhY2Nl c3MgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgcmVsYXRpb24gXCIlc1wiIiwKKwkJCSBS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+cmVsKSk7Cit9CisKIC8qCiAgKiBEZWxldGUg YSB0dXBsZS4KICAqCi0tIAoyLjM0LjEKCg== --000000000000471468061426d234 Content-Type: application/octet-stream; name="v13-0002-Optimize-CREATE-TABLE-AS-with-multi-inserts.patch" Content-Disposition: attachment; filename="v13-0002-Optimize-CREATE-TABLE-AS-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu0wefnj1 RnJvbSBjNzYwYWMxOTM5N2QwMjJiODk4MzA1ZjI2MWMwM2EyOTI0YTRjZGE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjEgTWFyIDIwMjQgMDc6MDM6MjIgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxMyAyLzRdIE9wdGltaXplIENSRUFURSBUQUJMRSBBUyB3aXRo IG11bHRpIGluc2VydHMKCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyB8IDI1 ICsrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMo KyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IDYyMDUwZjRk YzUuLjdhNDQxNWM2MmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFz LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtNTMsOSArNTMsNyBA QCB0eXBlZGVmIHN0cnVjdAogCS8qIFRoZXNlIGZpZWxkcyBhcmUgZmlsbGVkIGJ5IGludG9yZWxf c3RhcnR1cDogKi8KIAlSZWxhdGlvbglyZWw7CQkJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8K IAlPYmplY3RBZGRyZXNzIHJlbGFkZHI7CQkvKiBhZGRyZXNzIG9mIHJlbCwgZm9yIEV4ZWNDcmVh dGVUYWJsZUFzICovCi0JQ29tbWFuZElkCW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBp biBvdXRwdXQgdHVwbGVzICovCi0JaW50CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2lu c2VydCBwZXJmb3JtYW5jZSBvcHRpb25zICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8q IGJ1bGsgaW5zZXJ0IHN0YXRlICovCisJVGFibGVJbnNlcnRTdGF0ZSAqdGlfc3RhdGU7IC8qIHRh YmxlIGluc2VydCBzdGF0ZSAqLwogfSBEUl9pbnRvcmVsOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9u cyBmb3IgQ1RBUyBkZWZpbml0aW9uIGNyZWF0aW9uICovCkBAIC01NTIsMTcgKzU1MCwxOSBAQCBp bnRvcmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURl c2MgdHlwZWluZm8pCiAJICovCiAJbXlTdGF0ZS0+cmVsID0gaW50b1JlbGF0aW9uRGVzYzsKIAlt eVN0YXRlLT5yZWxhZGRyID0gaW50b1JlbGF0aW9uQWRkcjsKLQlteVN0YXRlLT5vdXRwdXRfY2lk ID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFC TEVfSU5TRVJUX1NLSVBfRlNNOwogCiAJLyoKIAkgKiBJZiBXSVRIIE5PIERBVEEgaXMgc3BlY2lm aWVkLCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCB1cCB0aGUgc3RhdGUgZm9yCiAJICogYnVsayBp bnNlcnRzIGFzIHRoZXJlIGFyZSBubyB0dXBsZXMgdG8gaW5zZXJ0LgogCSAqLwogCWlmICghaW50 by0+c2tpcERhdGEpCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsK KwkJbXlTdGF0ZS0+dGlfc3RhdGUgPSB0YWJsZV9pbnNlcnRfYmVnaW4oaW50b1JlbGF0aW9uRGVz YywKKwkJCQkJCQkJCQkJICAgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCQkJ ICAgVEFCTEVBTV9NVUxUSV9JTlNFUlRTIHwKKwkJCQkJCQkJCQkJICAgVEFCTEVBTV9CVUxLV1JJ VEVfQlVGRkVSX0FDQ0VTU19TVFJBVEVHWSwKKwkJCQkJCQkJCQkJICAgVEFCTEVfSU5TRVJUX1NL SVBfRlNNKTsKIAllbHNlCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT50 aV9zdGF0ZSA9IE5VTEw7CiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMg c29tZXRoaW5nIGFscmVhZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNTkwLDExICs1OTAs NyBAQCBpbnRvcmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAq c2VsZikKIAkJICogd291bGQgbm90IGJlIGNoZWFwIGVpdGhlci4gVGhpcyBhbHNvIGRvZXNuJ3Qg YWxsb3cgYWNjZXNzaW5nIHBlci1BTQogCQkgKiBkYXRhIChzYXkgYSB0dXBsZSdzIHhtaW4pLCBi dXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4uCiAJCSAqLwotCQl0YWJsZV90dXBsZV9p bnNlcnQobXlTdGF0ZS0+cmVsLAotCQkJCQkJICAgc2xvdCwKLQkJCQkJCSAgIG15U3RhdGUtPm91 dHB1dF9jaWQsCi0JCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkJICAgbXlTdGF0 ZS0+YmlzdGF0ZSk7CisJCXRhYmxlX211bHRpX2luc2VydF92MihteVN0YXRlLT50aV9zdGF0ZSwg c2xvdCk7CiAJfQogCiAJLyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlv biwgc28gdGhlcmUgYXJlIG5vIGluZGV4ZXMgKi8KQEAgLTYxMiwxMCArNjA4LDcgQEAgaW50b3Jl bF9zaHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNlbGYpCiAJSW50b0NsYXVzZSAqaW50byA9IG15U3Rh dGUtPmludG87CiAKIAlpZiAoIWludG8tPnNraXBEYXRhKQotCXsKLQkJRnJlZUJ1bGtJbnNlcnRT dGF0ZShteVN0YXRlLT5iaXN0YXRlKTsKLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3Rh dGUtPnJlbCwgbXlTdGF0ZS0+dGlfb3B0aW9ucyk7Ci0JfQorCQl0YWJsZV9pbnNlcnRfZW5kKG15 U3RhdGUtPnRpX3N0YXRlKTsKIAogCS8qIGNsb3NlIHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBj b21taXQgKi8KIAl0YWJsZV9jbG9zZShteVN0YXRlLT5yZWwsIE5vTG9jayk7Ci0tIAoyLjM0LjEK Cg== --000000000000471468061426d234 Content-Type: application/octet-stream; name="v13-0003-Optimize-REFRESH-MATERIALIZED-VIEW-with-multi-in.patch" Content-Disposition: attachment; filename="v13-0003-Optimize-REFRESH-MATERIALIZED-VIEW-with-multi-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu0weigr2 RnJvbSA5NTFiNjU1YmQ3NGVjZjIxNmQ1M2NlYThiMDUzNDNmYzY3MjlmNmNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjEgTWFyIDIwMjQgMDc6MDM6NTggKzAw MDAKU3ViamVjdDogW1BBVENIIHYxMyAzLzRdIE9wdGltaXplIFJFRlJFU0ggTUFURVJJQUxJWkVE IFZJRVcgd2l0aCBtdWx0aSBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYyB8IDM0ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCAxMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3 LmMKaW5kZXggNmQwOWI3NTU1Ni4uY2M5ZjhhZDYyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpA QCAtNDcsMTAgKzQ3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlEZXN0UmVjZWl2ZXIgcHViOwkJCS8q IHB1YmxpY2x5LWtub3duIGZ1bmN0aW9uIHBvaW50ZXJzICovCiAJT2lkCQkJdHJhbnNpZW50b2lk OwkvKiBPSUQgb2YgbmV3IGhlYXAgaW50byB3aGljaCB0byBzdG9yZSAqLwogCS8qIFRoZXNlIGZp ZWxkcyBhcmUgZmlsbGVkIGJ5IHRyYW5zaWVudHJlbF9zdGFydHVwOiAqLwotCVJlbGF0aW9uCXRy YW5zaWVudHJlbDsJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KLQlDb21tYW5kSWQJb3V0cHV0 X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KLQlpbnQJCQl0aV9v cHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlC dWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJsZUlu c2VydFN0YXRlICp0aV9zdGF0ZTsgLyogdGFibGUgaW5zZXJ0IHN0YXRlICovCiB9IERSX3RyYW5z aWVudHJlbDsKIAogc3RhdGljIGludAltYXR2aWV3X21haW50ZW5hbmNlX2RlcHRoID0gMDsKQEAg LTQ1NCwxMyArNDUxLDEzIEBAIHRyYW5zaWVudHJlbF9zdGFydHVwKERlc3RSZWNlaXZlciAqc2Vs ZiwgaW50IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCiAJdHJhbnNpZW50cmVsID0g dGFibGVfb3BlbihteVN0YXRlLT50cmFuc2llbnRvaWQsIE5vTG9jayk7CiAKLQkvKgotCSAqIEZp bGwgcHJpdmF0ZSBmaWVsZHMgb2YgbXlTdGF0ZSBmb3IgdXNlIGJ5IGxhdGVyIHJvdXRpbmVzCi0J ICovCi0JbXlTdGF0ZS0+dHJhbnNpZW50cmVsID0gdHJhbnNpZW50cmVsOwotCW15U3RhdGUtPm91 dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlv bnMgPSBUQUJMRV9JTlNFUlRfU0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOOwotCW15U3Rh dGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwkvKiBGaWxsIHByaXZhdGUgZmll bGRzIG9mIG15U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcyAqLworCW15U3RhdGUtPnRp X3N0YXRlID0gdGFibGVfaW5zZXJ0X2JlZ2luKHRyYW5zaWVudHJlbCwKKwkJCQkJCQkJCQkgICBH ZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJCSAgIFRBQkxFQU1fTVVMVElfSU5T RVJUUyB8CisJCQkJCQkJCQkJICAgVEFCTEVBTV9CVUxLV1JJVEVfQlVGRkVSX0FDQ0VTU19TVFJB VEVHWSwKKwkJCQkJCQkJCQkgICBUQUJMRV9JTlNFUlRfU0tJUF9GU00gfAorCQkJCQkJCQkJCSAg IFRBQkxFX0lOU0VSVF9GUk9aRU4pOwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBp bXBsaWVzIHNvbWV0aGluZyBhbHJlYWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTQ4NSwx MiArNDgyLDcgQEAgdHJhbnNpZW50cmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERl c3RSZWNlaXZlciAqc2VsZikKIAkgKiBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFs bG93IGFjY2Vzc2luZyBwZXItQU0gZGF0YSAoc2F5IGEKIAkgKiB0dXBsZSdzIHhtaW4pLCBidXQg c2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4uCiAJICovCi0KLQl0YWJsZV90dXBsZV9pbnNl cnQobXlTdGF0ZS0+dHJhbnNpZW50cmVsLAotCQkJCQkgICBzbG90LAotCQkJCQkgICBteVN0YXRl LT5vdXRwdXRfY2lkLAotCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkgICBteVN0 YXRlLT5iaXN0YXRlKTsKKwl0YWJsZV9tdWx0aV9pbnNlcnRfdjIobXlTdGF0ZS0+dGlfc3RhdGUs IHNsb3QpOwogCiAJLyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlvbiwg c28gdGhlcmUgYXJlIG5vIGluZGV4ZXMgKi8KIApAQCAtNTA0LDE0ICs0OTYsMTIgQEAgc3RhdGlj IHZvaWQKIHRyYW5zaWVudHJlbF9zaHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJRFJf dHJhbnNpZW50cmVsICpteVN0YXRlID0gKERSX3RyYW5zaWVudHJlbCAqKSBzZWxmOworCVJlbGF0 aW9uCXRyYW5zaWVudHJlbCA9IG15U3RhdGUtPnRpX3N0YXRlLT5yZWw7CiAKLQlGcmVlQnVsa0lu c2VydFN0YXRlKG15U3RhdGUtPmJpc3RhdGUpOwotCi0JdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0 KG15U3RhdGUtPnRyYW5zaWVudHJlbCwgbXlTdGF0ZS0+dGlfb3B0aW9ucyk7CisJdGFibGVfaW5z ZXJ0X2VuZChteVN0YXRlLT50aV9zdGF0ZSk7CiAKIAkvKiBjbG9zZSB0cmFuc2llbnRyZWwsIGJ1 dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCi0JdGFibGVfY2xvc2UobXlTdGF0ZS0+dHJhbnNp ZW50cmVsLCBOb0xvY2spOwotCW15U3RhdGUtPnRyYW5zaWVudHJlbCA9IE5VTEw7CisJdGFibGVf Y2xvc2UodHJhbnNpZW50cmVsLCBOb0xvY2spOwogfQogCiAvKgotLSAKMi4zNC4xCgo= --000000000000471468061426d234 Content-Type: application/octet-stream; name="v13-0004-Use-new-multi-insert-table-AM-for-COPY-FROM.patch" Content-Disposition: attachment; filename="v13-0004-Use-new-multi-insert-table-AM-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu0weme03 RnJvbSBjMWM2MmFmYmJlZWI3ZjNmOWIzODZhMjZkZmJiNjE3OWM4ZGU0YTgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjEgTWFyIDIwMjQgMDc6MDQ6MzEgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxMyA0LzRdIFVzZSBuZXcgbXVsdGkgaW5zZXJ0IHRhYmxlIEFN IGZvciBDT1BZIEZST00KCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyB8IDky ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUwIGlu c2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4 IDg5MDhhNDQwZTEuLmMyYTgxZDRkZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpAQCAtNzQs MTAgKzc0LDkgQEAKIC8qIFN0b3JlcyBtdWx0aS1pbnNlcnQgZGF0YSByZWxhdGVkIHRvIGEgc2lu Z2xlIHJlbGF0aW9uIGluIENvcHlGcm9tLiAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29weU11bHRpSW5z ZXJ0QnVmZmVyCiB7Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3RzW01BWF9CVUZGRVJFRF9UVVBMRVNd OyAvKiBBcnJheSB0byBzdG9yZSB0dXBsZXMgKi8KKwlUYWJsZUluc2VydFN0YXRlICp0aV9zdGF0 ZTsgLyogVGFibGUgaW5zZXJ0IHN0YXRlOyBOVUxMIGlmIGZvcmVpZ24gdGFibGUgKi8KKwlUdXBs ZVRhYmxlU2xvdCAqKnNsb3RzOwkJLyogQXJyYXkgdG8gc3RvcmUgdHVwbGVzICovCiAJUmVzdWx0 UmVsSW5mbyAqcmVzdWx0UmVsSW5mbzsJLyogUmVzdWx0UmVsSW5mbyBmb3IgJ3JlbGlkJyAqLwot CUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlOwkvKiBCdWxrSW5zZXJ0U3RhdGUgZm9yIHRoaXMgcmVs IGlmIHBsYWluCi0JCQkJCQkJCSAqIHRhYmxlOyBOVUxMIGlmIGZvcmVpZ24gdGFibGUgKi8KIAlp bnQJCQludXNlZDsJCQkvKiBudW1iZXIgb2YgJ3Nsb3RzJyBjb250YWluaW5nIHR1cGxlcyAqLwog CXVpbnQ2NAkJbGluZW5vc1tNQVhfQlVGRkVSRURfVFVQTEVTXTsJLyogTGluZSAjIG9mIHR1cGxl IGluIGNvcHkKIAkJCQkJCQkJCQkJCSAqIHN0cmVhbSAqLwpAQCAtMjIwLDE0ICsyMTksMzEgQEAg bGltaXRfcHJpbnRvdXRfbGVuZ3RoKGNvbnN0IGNoYXIgKnN0cikKICAqIFJlc3VsdFJlbEluZm8u CiAgKi8KIHN0YXRpYyBDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKgotQ29weU11bHRpSW5zZXJ0QnVm ZmVySW5pdChSZXN1bHRSZWxJbmZvICpycmkpCitDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KENv cHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAqcnJpKQogewogCUNvcHlN dWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyOwogCiAJYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1 ZmZlciAqKSBwYWxsb2Moc2l6ZW9mKENvcHlNdWx0aUluc2VydEJ1ZmZlcikpOwotCW1lbXNldChi dWZmZXItPnNsb3RzLCAwLCBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBNQVhfQlVGRkVSRURf VFVQTEVTKTsKKworCWlmIChycmktPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkKKwl7CisJCWludAkJ CW51bV9zbG90czsKKworCQlidWZmZXItPnRpX3N0YXRlID0gdGFibGVfaW5zZXJ0X2JlZ2luKHJy aS0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkJCQkgIG1paW5mby0+bXljaWQsCisJCQkJCQkJ CQkJCSAgVEFCTEVBTV9NVUxUSV9JTlNFUlRTIHwKKwkJCQkJCQkJCQkJICBUQUJMRUFNX0JVTEtX UklURV9CVUZGRVJfQUNDRVNTX1NUUkFURUdZIHwKKwkJCQkJCQkJCQkJICBUQUJMRUFNX1NLSVBf TVVMVElfSU5TRVJUU19GTFVTSCwKKwkJCQkJCQkJCQkJICBtaWluZm8tPnRpX29wdGlvbnMpOwor CQlidWZmZXItPnNsb3RzID0gdGFibGVfbXVsdGlfaW5zZXJ0X3Nsb3RzKGJ1ZmZlci0+dGlfc3Rh dGUsICZudW1fc2xvdHMpOworCX0KKwllbHNlCisJeworCQlidWZmZXItPnNsb3RzID0gcGFsbG9j MChzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBNQVhfQlVGRkVSRURfVFVQTEVTKTsKKwkJYnVm ZmVyLT50aV9zdGF0ZSA9IE5VTEw7CisJfQorCiAJYnVmZmVyLT5yZXN1bHRSZWxJbmZvID0gcnJp OwotCWJ1ZmZlci0+YmlzdGF0ZSA9IChycmktPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkgPyBHZXRC dWxrSW5zZXJ0U3RhdGUoKSA6IE5VTEw7CiAJYnVmZmVyLT5udXNlZCA9IDA7CiAKIAlyZXR1cm4g YnVmZmVyOwpAQCAtMjQyLDcgKzI1OCw3IEBAIENvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZl cihDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVy ICpidWZmZXI7CiAKLQlidWZmZXIgPSBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KHJyaSk7CisJ YnVmZmVyID0gQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChtaWluZm8sIHJyaSk7CiAKIAkvKiBT ZXR1cCBiYWNrLWxpbmsgc28gd2UgY2FuIGVhc2lseSBmaW5kIHRoaXMgYnVmZmVyIGFnYWluICov CiAJcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIgPSBidWZmZXI7CkBAIC0zMTksOCArMzM1 LDYgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlp bmZvLAogCQlpbnQJCQliYXRjaF9zaXplID0gcmVzdWx0UmVsSW5mby0+cmlfQmF0Y2hTaXplOwog CQlpbnQJCQlzZW50ID0gMDsKIAotCQlBc3NlcnQoYnVmZmVyLT5iaXN0YXRlID09IE5VTEwpOwot CiAJCS8qIEVuc3VyZSB0aGF0IHRoZSBGRFcgc3VwcG9ydHMgYmF0Y2hpbmcgYW5kIGl0J3MgZW5h YmxlZCAqLwogCQlBc3NlcnQocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+RXhlY0ZvcmVp Z25CYXRjaEluc2VydCk7CiAJCUFzc2VydChiYXRjaF9zaXplID4gMSk7CkBAIC0zOTIsMTMgKzQw Niw4IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1p aW5mbywKIAl9CiAJZWxzZQogCXsKLQkJQ29tbWFuZElkCW15Y2lkID0gbWlpbmZvLT5teWNpZDsK LQkJaW50CQkJdGlfb3B0aW9ucyA9IG1paW5mby0+dGlfb3B0aW9uczsKIAkJYm9vbAkJbGluZV9i dWZfdmFsaWQgPSBjc3RhdGUtPmxpbmVfYnVmX3ZhbGlkOwogCQl1aW50NjQJCXNhdmVfY3VyX2xp bmVubyA9IGNzdGF0ZS0+Y3VyX2xpbmVubzsKLQkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0Owot Ci0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgIT0gTlVMTCk7CiAKIAkJLyoKIAkJICogUHJpbnQg ZXJyb3IgY29udGV4dCBpbmZvcm1hdGlvbiBjb3JyZWN0bHksIGlmIG9uZSBvZiB0aGUgb3BlcmF0 aW9ucwpAQCAtNDA2LDE4ICs0MTUsNyBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5 TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJCSAqLwogCQljc3RhdGUtPmxpbmVfYnVmX3ZhbGlk ID0gZmFsc2U7CiAKLQkJLyoKLQkJICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9y eSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQotCQkgKiBjb250ZXh0IGJlZm9yZSBj YWxsaW5nIGl0LgotCQkgKi8KLQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhH ZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7Ci0JCXRhYmxlX211bHRpX2luc2VydChy ZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkgICBzbG90cywKLQkJCQkJCSAg IG51c2VkLAotCQkJCQkJICAgbXljaWQsCi0JCQkJCQkgICB0aV9vcHRpb25zLAotCQkJCQkJICAg YnVmZmVyLT5iaXN0YXRlKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwor CQl0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2goYnVmZmVyLT50aV9zdGF0ZSk7CiAKIAkJZm9yIChp ID0gMDsgaSA8IG51c2VkOyBpKyspCiAJCXsKQEAgLTQzMiw3ICs0MzAsNyBAQCBDb3B5TXVsdGlJ bnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJCQkJY3N0YXRl LT5jdXJfbGluZW5vID0gYnVmZmVyLT5saW5lbm9zW2ldOwogCQkJCXJlY2hlY2tJbmRleGVzID0K IAkJCQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkJICBi dWZmZXItPnNsb3RzW2ldLCBlc3RhdGUsIGZhbHNlLAorCQkJCQkJCQkJCSAgc2xvdHNbaV0sIGVz dGF0ZSwgZmFsc2UsCiAJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgTklMLCBmYWxzZSk7CiAJCQkJ RXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkJIHNs b3RzW2ldLCByZWNoZWNrSW5kZXhlcywKQEAgLTQ5MCwyMCArNDg4LDE1IEBAIENvcHlNdWx0aUlu c2VydEJ1ZmZlckNsZWFudXAoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogCXJlc3VsdFJl bEluZm8tPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9IE5VTEw7CiAKIAlpZiAocmVzdWx0UmVs SW5mby0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQotCXsKLQkJQXNzZXJ0KGJ1ZmZlci0+YmlzdGF0 ZSAhPSBOVUxMKTsKLQkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShidWZmZXItPmJpc3RhdGUpOwotCX0K KwkJdGFibGVfaW5zZXJ0X2VuZChidWZmZXItPnRpX3N0YXRlKTsKIAllbHNlCi0JCUFzc2VydChi dWZmZXItPmJpc3RhdGUgPT0gTlVMTCk7Ci0KLQkvKiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90 cyBvbiBkZW1hbmQsIGp1c3QgZHJvcCB0aGUgbm9uLW51bGwgb25lcy4gKi8KLQlmb3IgKGkgPSAw OyBpIDwgTUFYX0JVRkZFUkVEX1RVUExFUyAmJiBidWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkr KykKLQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChidWZmZXItPnNsb3RzW2ldKTsKKwl7 CisJCS8qIFNpbmNlIHdlIG9ubHkgY3JlYXRlIHNsb3RzIG9uIGRlbWFuZCwganVzdCBkcm9wIHRo ZSBub24tbnVsbCBvbmVzLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZFUkVEX1RVUExF UyAmJiBidWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVw bGVUYWJsZVNsb3QoYnVmZmVyLT5zbG90c1tpXSk7CiAKLQlpZiAocmVzdWx0UmVsSW5mby0+cmlf RmR3Um91dGluZSA9PSBOVUxMKQotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQocmVzdWx0UmVs SW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgbWlpbmZvLT50aV9vcHRpb25zKTsKKwkJ cGZyZWUoYnVmZmVyLT5zbG90cyk7CisJfQogCiAJcGZyZWUoYnVmZmVyKTsKIH0KQEAgLTU5MCwx MyArNTgzLDI1IEBAIENvcHlNdWx0aUluc2VydEluZm9OZXh0RnJlZVNsb3QoQ29weU11bHRpSW5z ZXJ0SW5mbyAqbWlpbmZvLAogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJp LT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CiAJaW50CQkJbnVzZWQgPSBidWZmZXItPm51c2Vk OworCVR1cGxlVGFibGVTbG90ICpzbG90OwogCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKIAlB c3NlcnQobnVzZWQgPCBNQVhfQlVGRkVSRURfVFVQTEVTKTsKIAotCWlmIChidWZmZXItPnNsb3Rz W251c2VkXSA9PSBOVUxMKQotCQlidWZmZXItPnNsb3RzW251c2VkXSA9IHRhYmxlX3Nsb3RfY3Jl YXRlKHJyaS0+cmlfUmVsYXRpb25EZXNjLCBOVUxMKTsKLQlyZXR1cm4gYnVmZmVyLT5zbG90c1tu dXNlZF07CisJaWYgKHJyaS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQorCQlzbG90ID0gdGFibGVf bXVsdGlfaW5zZXJ0X25leHRfZnJlZV9zbG90KGJ1ZmZlci0+dGlfc3RhdGUpOworCWVsc2UKKwl7 CisJCWlmIChidWZmZXItPnNsb3RzW251c2VkXSA9PSBOVUxMKQorCQl7CisJCQlzbG90ID0gdGFi bGVfc2xvdF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOworCQkJYnVmZmVyLT5z bG90c1tudXNlZF0gPSBzbG90OworCQl9CisJCWVsc2UKKwkJCXNsb3QgPSBidWZmZXItPnNsb3Rz W251c2VkXTsKKwl9CisKKwlyZXR1cm4gc2xvdDsKIH0KIAogLyoKQEAgLTYxMiw2ICs2MTcsOSBA QCBDb3B5TXVsdGlJbnNlcnRJbmZvU3RvcmUoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBS ZXN1bHRSZWxJbmZvICpycmksCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKIAlBc3NlcnQoc2xv dCA9PSBidWZmZXItPnNsb3RzW2J1ZmZlci0+bnVzZWRdKTsKIAorCWlmIChycmktPnJpX0Zkd1Jv dXRpbmUgPT0gTlVMTCkKKwkJdGFibGVfbXVsdGlfaW5zZXJ0X3YyKGJ1ZmZlci0+dGlfc3RhdGUs IHNsb3QpOworCiAJLyogU3RvcmUgdGhlIGxpbmUgbnVtYmVyIHNvIHdlIGNhbiBwcm9wZXJseSBy ZXBvcnQgYW55IGVycm9ycyBsYXRlciAqLwogCWJ1ZmZlci0+bGluZW5vc1tidWZmZXItPm51c2Vk XSA9IGxpbmVubzsKIAotLSAKMi4zNC4xCgo= --000000000000471468061426d234--