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 1rUQ6U-00AmMM-0F for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jan 2024 11:47:06 +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 1rUQ6S-00DaK1-Qr for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jan 2024 11:47:04 +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 1rUQ6S-00DaJt-4U for pgsql-hackers@lists.postgresql.org; Mon, 29 Jan 2024 11:47:04 +0000 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rUQ6P-003xez-7f for pgsql-hackers@postgresql.org; Mon, 29 Jan 2024 11:47:02 +0000 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2d04fb2f36bso5804621fa.2 for ; Mon, 29 Jan 2024 03:47:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706528819; x=1707133619; 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=8UQREMabTf7chdd14PnRA2CV25Ug9gEfX9w0jTVV0wM=; b=EGBo+2uzHeu6kmcbslWMovlYE8/cMj8BOr5T1ATMXZVpDENicCsNKviEm0Tn3A8KlY g1efBtwLHHsaCF2Z6WHtszii/ICKFEwBCjKLVW/WZnJT1L5xUxw23Kl+mKwfQQnmioT+ N5WsnHIg1XogaG6ibyxQo+0ZdHAHU8Qj4GQOwZCFEkqFbqDA4McgHBwZcYzlN7WuitRA zOcXTPUwDPFFCCBd/YlyRmC4NQCwd2A87Zk20SaIvdMqbPfu9F4biGw9PQKwHKX7iVri YmqePl/3tt5gNYiXQ7VJUYeMaD32UuHrDqoUHcL8oAG0c8m7SAps3sYPXRZXBGPXPN+C VvZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706528819; x=1707133619; 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=8UQREMabTf7chdd14PnRA2CV25Ug9gEfX9w0jTVV0wM=; b=ddUClqRQ30ZcXZvmiBTj3hDDdnia4R+RpfYZdxmTn0Rsw+flxjIO924XjvsVPvPlCY D9O59mSaCPB0eOnxBlUdCWmzk1Qa8Oawg+3/hwS4ZGoXhStvzzSlNji76ReA43ilAPu3 rfo2fsytqyBCTwsX9ngqckQJafnfRxzG8gRxjj4UToS0WTLb9oVh6bT4QPYCVvfLimZ5 lU0+DcK/7GM1RNjZwRBn3V1/hgbSJyCL84XIDD9MLTijenigagxLQE7TqjbjMbhJPavf fTG5OI/ozeGc/k/pd37c5PnBN2S8PSX+uMdrOAMyn21qvwC0A/ODY6oQ9H74QbzdxzjS P0Yg== X-Gm-Message-State: AOJu0YxeQ5FUtrZaop7WM+0F8v3mWbbTLZTlb7Lzc4dt1YelrqKh/sia Aym5rg3aT4Rmp0tVbUJ/L8EL3Y+VSxXEm8TOwTwF09j0grnlrP8LEFYkIKlOrOUf3EqKQGxJaj9 9Iw2Pmae1cchuFB/uK0V3GmOVvjrS5Xy45uw= X-Google-Smtp-Source: AGHT+IFsMKP3P/Ydk6if3PhU1xHv8k3COtVchEGyHfO8mrcmN1IhWfzlWGsdxaHDsir8Z6U/NczWbdRaAoto7dpGCkA= X-Received: by 2002:a2e:965a:0:b0:2cd:143c:9283 with SMTP id z26-20020a2e965a000000b002cd143c9283mr3872294ljh.27.1706528819047; Mon, 29 Jan 2024 03:46:59 -0800 (PST) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> In-Reply-To: From: Bharath Rupireddy Date: Mon, 29 Jan 2024 17:16:47 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: PostgreSQL-development Cc: Andres Freund , Dilip Kumar , Luc Vlaming , Justin Pryzby , Jeff Davis , Michael Paquier , Matthias van de Meent Content-Type: multipart/mixed; boundary="0000000000000f0b020610143416" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000f0b020610143416 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jan 29, 2024 at 12:57=E2=80=AFPM Bharath Rupireddy wrote: > > On Wed, Jan 17, 2024 at 10:57=E2=80=AFPM Bharath Rupireddy > wrote: > > > > Thank you. I'm attaching v8 patch-set here which includes use of new > > insert TAMs for COPY FROM. With this, postgres not only will have the > > new TAM for inserts, but they also can make the following commands > > faster - CREATE TABLE AS, SELECT INTO, CREATE MATERIALIZED VIEW, > > REFRESH MATERIALIZED VIEW and COPY FROM. I'll perform some testing in > > the coming days and post the results here, until then I appreciate any > > feedback on the patches. > > > > I've also added this proposal to CF - > > https://commitfest.postgresql.org/47/4777/. > > Some of the tests related to Incremental Sort added by a recent commit > 0452b461bc4 in aggregates.sql are failing when the multi inserts > feature is used for CTAS (like done in 0002 patch). I'm not so sure if > it's because of the reduction in the CTAS execution times. Execution > time for table 'btg' created with CREATE TABLE AS added by commit > 0452b461bc4 with single inserts is 25.3 msec, with multi inserts is > 17.7 msec. This means that the multi inserts are about 1.43 times or > 30.04% faster than the single inserts. Couple of ways to make these > tests pick Incremental Sort as expected - 1) CLUSTER btg USING abc; or > 2) increase the number of rows in table btg to 100K from 10K. FWIW, if > I reduce the number of rows in the table from 10K to 1K, the > Incremental Sort won't get picked on HEAD with CTAS using single > inserts. Hence, I chose option (2) to fix the issue. > > Please find the attached v9 patch set. > > [1] > -- Engage incremental sort > explain (COSTS OFF) SELECT x,y FROM btg GROUP BY x,y,z,w; > - QUERY PLAN > -------------------------------------------------- > + QUERY PLAN > +------------------------------ > Group > Group Key: x, y, z, w > - -> Incremental Sort > + -> Sort > Sort Key: x, y, z, w > - Presorted Key: x, y > - -> Index Scan using btg_x_y_idx on btg > -(6 rows) > + -> Seq Scan on btg > +(5 rows) CF bot machine with Windows isn't happy with the compilation [1], so fixed those warnings and attached v10 patch set. [1] [07:35:25.458] [632/2212] Compiling C object src/backend/postgres_lib.a.p/commands_copyfrom.c.obj [07:35:25.458] c:\cirrus\src\include\access\tableam.h(1574) : warning C4715: 'table_multi_insert_slots': not all control paths return a value [07:35:25.458] c:\cirrus\src\include\access\tableam.h(1522) : warning C4715: 'table_insert_begin': not all control paths return a value [07:35:25.680] c:\cirrus\src\include\access\tableam.h(1561) : warning C4715: 'table_multi_insert_next_free_slot': not all control paths return a value [07:35:25.680] [633/2212] Compiling C object src/backend/postgres_lib.a.p/commands_createas.c.obj [07:35:25.680] c:\cirrus\src\include\access\tableam.h(1522) : warning C4715: 'table_insert_begin': not all control paths return a value [07:35:26.310] [646/2212] Compiling C object src/backend/postgres_lib.a.p/commands_matview.c.obj [07:35:26.310] c:\cirrus\src\include\access\tableam.h(1522) : warning C4715: 'table_insert_begin': not all control paths return a value --=20 Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --0000000000000f0b020610143416 Content-Type: application/octet-stream; name="v10-0001-New-TAMs-for-inserts.patch" Content-Disposition: attachment; filename="v10-0001-New-TAMs-for-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrytnn940 RnJvbSAzYzg5MmNmNWMyZGY5NDllZmFjMWVjNWRjOGZjMzkwYjg2OGZlNDAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMTA6NTk6NDEgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxMCAxLzRdIE5ldyBUQU1zIGZvciBpbnNlcnRzCgotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgfCAyMjQgKysrKysrKysrKysr KysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAg IDkgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICB8ICA0OSArKysr Kwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICB8IDEzOCArKysrKysr KysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA0MjAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtLmMKaW5kZXggNzA3NDYwYTUzNi4uN2RmMzA1MzgwZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtLmMKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgog I2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgpA QCAtMjQ0Niw2ICsyNDQ3LDIyOSBAQCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlv biwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCiAJcGdzdGF0X2NvdW50X2hl YXBfaW5zZXJ0KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgc3Rh dGUgcmVxdWlyZWQgZm9yIGFuIGluc2VydCBhIHNpbmdsZSB0dXBsZSBvciBtdWx0aXBsZSB0dXBs ZXMKKyAqIGludG8gYSBoZWFwLgorICovCitUYWJsZUluc2VydFN0YXRlICoKK2hlYXBfaW5zZXJ0 X2JlZ2luKFJlbGF0aW9uIHJlbCwgQ29tbWFuZElkIGNpZCwgaW50IGFtX2ZsYWdzLCBpbnQgaW5z ZXJ0X2ZsYWdzKQoreworCVRhYmxlSW5zZXJ0U3RhdGUgKnRpc3RhdGU7CisKKwl0aXN0YXRlID0g cGFsbG9jMChzaXplb2YoVGFibGVJbnNlcnRTdGF0ZSkpOworCXRpc3RhdGUtPnJlbCA9IHJlbDsK Kwl0aXN0YXRlLT5jaWQgPSBjaWQ7CisJdGlzdGF0ZS0+YW1fZmxhZ3MgPSBhbV9mbGFnczsKKwl0 aXN0YXRlLT5pbnNlcnRfZmxhZ3MgPSBpbnNlcnRfZmxhZ3M7CisKKwlpZiAoKGFtX2ZsYWdzICYg VEFCTEVBTV9NVUxUSV9JTlNFUlRTKSAhPSAwIHx8CisJCShhbV9mbGFncyAmIFRBQkxFQU1fQlVM S1dSSVRFX0JVRkZFUl9BQ0NFU1NfU1RSQVRFR1kpKQorCQl0aXN0YXRlLT5hbV9kYXRhID0gcGFs bG9jMChzaXplb2YoSGVhcEluc2VydFN0YXRlKSk7CisKKwlpZiAoKGFtX2ZsYWdzICYgVEFCTEVB TV9NVUxUSV9JTlNFUlRTKSAhPSAwKQorCXsKKwkJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3Rh dGU7CisKKwkJbWlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEhlYXBNdWx0aUluc2VydFN0YXRlKSk7 CisJCW1pc3RhdGUtPnNsb3RzID0gcGFsbG9jMChzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBI RUFQX01BWF9CVUZGRVJFRF9TTE9UUyk7CisKKwkJbWlzdGF0ZS0+Y29udGV4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSAiaGVhcF9t dWx0aV9pbnNlcnRfdjIgbWVtb3J5IGNvbnRleHQiLAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCisJCSgoSGVhcEluc2VydFN0YXRlICopIHRpc3RhdGUtPmFtX2RhdGEp LT5taXN0YXRlID0gbWlzdGF0ZTsKKwl9CisKKwlpZiAoKGFtX2ZsYWdzICYgVEFCTEVBTV9CVUxL V1JJVEVfQlVGRkVSX0FDQ0VTU19TVFJBVEVHWSkgIT0gMCkKKwkJKChIZWFwSW5zZXJ0U3RhdGUg KikgdGlzdGF0ZS0+YW1fZGF0YSktPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwor CXJldHVybiB0aXN0YXRlOworfQorCisvKgorICogSW5zZXJ0IGEgc2luZ2xlIHR1cGxlIGludG8g YSBoZWFwLgorICovCit2b2lkCitoZWFwX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICogc3Rh dGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCWJvb2wJCXNob3VsZEZyZWUgPSB0cnVlOwor CUhlYXBUdXBsZQl0dXBsZSA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc2xvdCwgdHJ1ZSwgJnNo b3VsZEZyZWUpOworCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlID0gTlVMTDsKKworCUFzc2VydChz dGF0ZS0+YW1fZGF0YSAhPSBOVUxMICYmCisJCSAgICgoSGVhcEluc2VydFN0YXRlICopIHN0YXRl LT5hbV9kYXRhKS0+bWlzdGF0ZSA9PSBOVUxMKTsKKworCS8qIFVwZGF0ZSB0dXBsZSB3aXRoIHRh YmxlIG9pZCAqLworCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQoc3RhdGUt PnJlbCk7CisJdHVwbGUtPnRfdGFibGVPaWQgPSBzbG90LT50dHNfdGFibGVPaWQ7CisKKwlpZiAo c3RhdGUtPmFtX2RhdGEgIT0gTlVMTCAmJgorCQkoKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ YW1fZGF0YSktPmJpc3RhdGUgIT0gTlVMTCkKKwkJYmlzdGF0ZSA9ICgoSGVhcEluc2VydFN0YXRl ICopIHN0YXRlLT5hbV9kYXRhKS0+YmlzdGF0ZTsKKworCS8qIFBlcmZvcm0gaW5zZXJ0aW9uLCBh bmQgY29weSB0aGUgcmVzdWx0aW5nIEl0ZW1Qb2ludGVyICovCisJaGVhcF9pbnNlcnQoc3RhdGUt PnJlbCwgdHVwbGUsIHN0YXRlLT5jaWQsIHN0YXRlLT5pbnNlcnRfZmxhZ3MsCisJCQkJYmlzdGF0 ZSk7CisJSXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7CisK KwlpZiAoc2hvdWxkRnJlZSkKKwkJcGZyZWUodHVwbGUpOworfQorCisvKgorICogQ3JlYXRlL3Jl dHVybiBuZXh0IGZyZWUgc2xvdCBmcm9tIG11bHRpLWluc2VydCBidWZmZXJlZCBzbG90cyBhcnJh eS4KKyAqLworVHVwbGVUYWJsZVNsb3QgKgoraGVhcF9tdWx0aV9pbnNlcnRfbmV4dF9mcmVlX3Ns b3QoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKQoreworCVR1cGxlVGFibGVTbG90ICpzbG90Owor CUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCisJQXNzZXJ0KHN0YXRlLT5hbV9kYXRh ICE9IE5VTEwgJiYKKwkJICAgKChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5t aXN0YXRlICE9IE5VTEwpOworCisJbWlzdGF0ZSA9ICgoSGVhcEluc2VydFN0YXRlICopIHN0YXRl LT5hbV9kYXRhKS0+bWlzdGF0ZTsKKwlzbG90ID0gbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3Vy X3Nsb3RzXTsKKworCWlmIChzbG90ID09IE5VTEwpCisJeworCQlzbG90ID0gdGFibGVfc2xvdF9j cmVhdGUoc3RhdGUtPnJlbCwgTlVMTCk7CisJCW1pc3RhdGUtPnNsb3RzW21pc3RhdGUtPmN1cl9z bG90c10gPSBzbG90OworCX0KKwllbHNlCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCisJcmV0 dXJuIHNsb3Q7Cit9CisKKy8qCisgKiBTdG9yZSBwYXNzZWQtaW4gdHVwbGUgaW50byBpbi1tZW1v cnkgYnVmZmVyZWQgc2xvdHMuIFdoZW4gZnVsbCwgaW5zZXJ0CisgKiBtdWx0aXBsZSB0dXBsZXMg ZnJvbSB0aGUgYnVmZmVycyBpbnRvIGhlYXAuCisgKi8KK3ZvaWQKK2hlYXBfbXVsdGlfaW5zZXJ0 X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJ VHVwbGVUYWJsZVNsb3QgKmRzdHNsb3Q7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7 CisKKwlBc3NlcnQoc3RhdGUtPmFtX2RhdGEgIT0gTlVMTCAmJgorCQkgICAoKEhlYXBJbnNlcnRT dGF0ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPm1pc3RhdGUgIT0gTlVMTCk7CisKKwltaXN0YXRlID0g KChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5taXN0YXRlOworCWRzdHNsb3Qg PSBtaXN0YXRlLT5zbG90c1ttaXN0YXRlLT5jdXJfc2xvdHNdOworCisJaWYgKGRzdHNsb3QgPT0g TlVMTCkKKwl7CisJCWRzdHNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShzdGF0ZS0+cmVsLCBOVUxM KTsKKwkJbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXSA9IGRzdHNsb3Q7CisJfQor CisJLyoKKwkgKiBDYWxsZXIgbWF5IGhhdmUgZ290IHRoZSBzbG90IHVzaW5nIGhlYXBfbXVsdGlf aW5zZXJ0X25leHRfZnJlZV9zbG90LAorCSAqIGZpbGxlZCBpdCBhbmQgcGFzc2VkLiBTbywgc2tp cCBjb3B5aW5nIGluIHN1Y2ggYSBjYXNlLgorCSAqLworCWlmICgoc3RhdGUtPmFtX2ZsYWdzICYg VEFCTEVBTV9TS0lQX01VTFRJX0lOU0VSVFNfRkxVU0gpID09IDApCisJeworCQlFeGVjQ2xlYXJU dXBsZShkc3RzbG90KTsKKwkJRXhlY0NvcHlTbG90KGRzdHNsb3QsIHNsb3QpOworCX0KKwllbHNl CisJCUFzc2VydChkc3RzbG90ID09IHNsb3QpOworCisJbWlzdGF0ZS0+Y3VyX3Nsb3RzKys7CisK KwkvKgorCSAqIFdoZW4gcGFzc2VkLWluIHNsb3QgaXMgYWxyZWFkeSBtYXRlcmlhbGl6ZWQsIG1l bW9yeSBhbGxvY2F0ZWQgaW4gc2xvdCdzCisJICogbWVtb3J5IGNvbnRleHQgaXMgYSBjbG9zZSBh cHByb3hpbWF0aW9uIGZvciB1cyB0byB0cmFjayB0aGUgcmVxdWlyZWQKKwkgKiBzcGFjZSBmb3Ig dGhlIHR1cGxlIGluIHNsb3QuCisJICoKKwkgKiBGb3Igbm9uLW1hdGVyaWFsaXplZCBzbG90cywg dGhlIGZsdXNoaW5nIGRlY2lzaW9uIGhhcHBlbnMgc29sZWx5IG9uIHRoZQorCSAqIG51bWJlciBv ZiB0dXBsZXMgc3RvcmVkIGluIHRoZSBidWZmZXIuCisJICovCisJaWYgKFRUU19TSE9VTERGUkVF KHNsb3QpKQorCQltaXN0YXRlLT5jdXJfc2l6ZSArPSBNZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVk KHNsb3QtPnR0c19tY3h0LCBmYWxzZSk7CisKKwlpZiAoKHN0YXRlLT5hbV9mbGFncyAmIFRBQkxF QU1fU0tJUF9NVUxUSV9JTlNFUlRTX0ZMVVNIKSA9PSAwICYmCisJCShtaXN0YXRlLT5jdXJfc2xv dHMgPj0gSEVBUF9NQVhfQlVGRkVSRURfU0xPVFMgfHwKKwkJIG1pc3RhdGUtPmN1cl9zaXplID49 IEhFQVBfTUFYX0JVRkZFUkVEX0JZVEVTKSkKKwkJaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2goc3Rh dGUpOworfQorCisvKgorICogUmV0dXJuIHBvaW50ZXIgdG8gbXVsdGktaW5zZXJ0IGJ1ZmZlcmVk IHNsb3RzIGFycmF5IGFuZCBudW1iZXIgb2YgY3VycmVudGx5CisgKiBvY2N1cGllZCBzbG90cy4K KyAqLworVHVwbGVUYWJsZVNsb3QgKioKK2hlYXBfbXVsdGlfaW5zZXJ0X3Nsb3RzKFRhYmxlSW5z ZXJ0U3RhdGUgKiBzdGF0ZSwgaW50ICpudW1fc2xvdHMpCit7CisJSGVhcE11bHRpSW5zZXJ0U3Rh dGUgKm1pc3RhdGU7CisKKwltaXN0YXRlID0gKChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFt X2RhdGEpLT5taXN0YXRlOworCSpudW1fc2xvdHMgPSBtaXN0YXRlLT5jdXJfc2xvdHM7CisKKwly ZXR1cm4gbWlzdGF0ZS0+c2xvdHM7Cit9CisKKy8qCisgKiBJbnNlcnQgbXVsdGlwbGUgdHVwbGVz IGZyb20gaW4tbWVtb3J5IGJ1ZmZlcmVkIHNsb3RzIGludG8gaGVhcC4KKyAqLwordm9pZAoraGVh cF9tdWx0aV9pbnNlcnRfZmx1c2goVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKQoreworCUhlYXBN dWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlID0gTlVM TDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwltaXN0YXRlID0gKChIZWFwSW5zZXJ0 U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5taXN0YXRlOworCisJaWYgKHN0YXRlLT5hbV9kYXRh ICE9IE5VTEwgJiYKKwkJKChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5iaXN0 YXRlICE9IE5VTEwpCisJCWJpc3RhdGUgPSAoKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+YW1f ZGF0YSktPmJpc3RhdGU7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG1p c3RhdGUtPmNvbnRleHQpOworCWhlYXBfbXVsdGlfaW5zZXJ0KHN0YXRlLT5yZWwsIG1pc3RhdGUt PnNsb3RzLCBtaXN0YXRlLT5jdXJfc2xvdHMsCisJCQkJCSAgc3RhdGUtPmNpZCwgc3RhdGUtPmlu c2VydF9mbGFncywgYmlzdGF0ZSk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCU1lbW9yeUNvbnRleHRSZXNldChtaXN0YXRlLT5jb250ZXh0KTsKKworCW1pc3RhdGUtPmN1 cl9zbG90cyA9IDA7CisJbWlzdGF0ZS0+Y3VyX3NpemUgPSAwOworfQorCisvKgorICogQ2xlYW4g dXAgc3RhdGUgdXNlZCB0byBpbnNlcnQgYSBzaW5nbGUgb3IgbXVsdGlwbGUgdHVwbGVzIGludG8g YSBoZWFwLgorICovCit2b2lkCitoZWFwX2luc2VydF9lbmQoVGFibGVJbnNlcnRTdGF0ZSAqIHN0 YXRlKQoreworCWlmIChzdGF0ZS0+YW1fZGF0YSAhPSBOVUxMICYmCisJCSgoSGVhcEluc2VydFN0 YXRlICopIHN0YXRlLT5hbV9kYXRhKS0+bWlzdGF0ZSAhPSBOVUxMKQorCXsKKwkJSGVhcE11bHRp SW5zZXJ0U3RhdGUgKm1pc3RhdGUgPQorCQkJKChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFt X2RhdGEpLT5taXN0YXRlOworCisJCS8qIEluc2VydCByZW1haW5pbmcgdHVwbGVzIGZyb20gbXVs dGktaW5zZXJ0IGJ1ZmZlcnMgKi8KKwkJaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA+IDAgfHwgbWlz dGF0ZS0+Y3VyX3NpemUgPiAwKQorCQkJaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2goc3RhdGUpOwor CisJCU1lbW9yeUNvbnRleHREZWxldGUobWlzdGF0ZS0+Y29udGV4dCk7CisKKwkJZm9yIChpbnQg aSA9IDA7IGkgPCBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUyAmJiBtaXN0YXRlLT5zbG90c1tpXSAh PSBOVUxMOyBpKyspCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KG1pc3RhdGUtPnNs b3RzW2ldKTsKKworCQlwZnJlZShtaXN0YXRlKTsKKwkJKChIZWFwSW5zZXJ0U3RhdGUgKikgc3Rh dGUtPmFtX2RhdGEpLT5taXN0YXRlID0gTlVMTDsKKwl9CisKKwlpZiAoc3RhdGUtPmFtX2RhdGEg IT0gTlVMTCAmJgorCQkoKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPmJpc3Rh dGUgIT0gTlVMTCkKKwkJRnJlZUJ1bGtJbnNlcnRTdGF0ZSgoKEhlYXBJbnNlcnRTdGF0ZSAqKSBz dGF0ZS0+YW1fZGF0YSktPmJpc3RhdGUpOworCisJcGZyZWUoc3RhdGUtPmFtX2RhdGEpOworCXN0 YXRlLT5hbV9kYXRhID0gTlVMTDsKKwlwZnJlZShzdGF0ZSk7Cit9CisKIC8qCiAgKglzaW1wbGVf aGVhcF9pbnNlcnQgLSBpbnNlcnQgYSB0dXBsZQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCmluZGV4IGQxNWEwMmIyYmUuLjc5NTE3NzgxMmQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMjU2NCw2ICsyNTY0LDE1IEBAIHN0 YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkudHVwbGVfaW5z ZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKIAkudHVw bGVfY29tcGxldGVfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfY29tcGxldGVfc3BlY3VsYXRp dmUsCiAJLm11bHRpX2luc2VydCA9IGhlYXBfbXVsdGlfaW5zZXJ0LAorCisJLnR1cGxlX2luc2Vy dF9iZWdpbiA9IGhlYXBfaW5zZXJ0X2JlZ2luLAorCS50dXBsZV9pbnNlcnRfdjIgPSBoZWFwX2lu c2VydF92MiwKKwkudHVwbGVfbXVsdGlfaW5zZXJ0X25leHRfZnJlZV9zbG90ID0gaGVhcF9tdWx0 aV9pbnNlcnRfbmV4dF9mcmVlX3Nsb3QsCisJLnR1cGxlX211bHRpX2luc2VydF92MiA9IGhlYXBf bXVsdGlfaW5zZXJ0X3YyLAorCS50dXBsZV9tdWx0aV9pbnNlcnRfc2xvdHMgPSBoZWFwX211bHRp X2luc2VydF9zbG90cywKKwkudHVwbGVfbXVsdGlfaW5zZXJ0X2ZsdXNoID0gaGVhcF9tdWx0aV9p bnNlcnRfZmx1c2gsCisJLnR1cGxlX2luc2VydF9lbmQgPSBoZWFwX2luc2VydF9lbmQsCisKIAku dHVwbGVfZGVsZXRlID0gaGVhcGFtX3R1cGxlX2RlbGV0ZSwKIAkudHVwbGVfdXBkYXRlID0gaGVh cGFtX3R1cGxlX3VwZGF0ZSwKIAkudHVwbGVfbG9jayA9IGhlYXBhbV90dXBsZV9sb2NrLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCmluZGV4IDRiMTMzZjY4NTkuLjA1M2JlMTgxMTAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTIyNSw2ICsyMjUsNDAgQEAgaHRzdl9nZXRfdmFsaWRfc3RhdHVzKGludCBzdGF0dXMpCiAJ cmV0dXJuIChIVFNWX1Jlc3VsdCkgc3RhdHVzOwogfQogCisvKgorICogTWF4aW11bSBudW1iZXIg b2Ygc2xvdHMgdGhhdCBtdWx0aS1pbnNlcnQgYnVmZmVycyBjYW4gaG9sZC4KKyAqCisgKiBDYXV0 aW9uOiBEb24ndCBtYWtlIHRoaXMgdG9vIGJpZywgYXMgd2UgY291bGQgZW5kIHVwIHdpdGggdGhp cyBtYW55IHR1cGxlcworICogc3RvcmVkIGluIG11bHRpIGluc2VydCBidWZmZXIuIEZvciBpbnN0 YW5jZSwgaW5jcmVhc2luZyB0aGlzIGNhbiBjYXVzZQorICogcXVhZHJhdGljIGdyb3d0aCBpbiBt ZW1vcnkgcmVxdWlyZW1lbnRzIGR1cmluZyBjb3BpZXMgaW50byBwYXJ0aXRpb25lZAorICogdGFi bGVzIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgcGFydGl0aW9ucy4KKyAqLworI2RlZmluZSBIRUFQ X01BWF9CVUZGRVJFRF9TTE9UUwkJMTAwMAorCisvKiBNYXhpbXVtIHNpemUgb2YgYWxsIHR1cGxl cyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBob2xkICovCisjZGVmaW5lIEhFQVBfTUFY X0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCit0eXBlZGVmIHN0cnVjdCBIZWFwTXVsdGlJbnNlcnRT dGF0ZQoreworCS8qIE1lbW9yeSBjb250ZXh0IHRvIHVzZSBmb3IgZmx1c2hpbmcgbXVsdGktaW5z ZXJ0IGJ1ZmZlcnMgKi8KKwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7CisKKwkvKiBBcnJheSBvZiBi dWZmZXJlZCBzbG90cyAqLworCVR1cGxlVGFibGVTbG90ICoqc2xvdHM7CisKKwkvKiBOdW1iZXIg b2Ygc2xvdHMgdGhhdCBtdWx0aS1pbnNlcnQgYnVmZmVycyBjdXJyZW50bHkgaG9sZCAqLworCWlu dAkJCWN1cl9zbG90czsKKworCS8qIFNpemUgb2YgYWxsIHR1cGxlcyB0aGF0IG11bHRpLWluc2Vy dCBidWZmZXJzIGN1cnJlbnRseSBob2xkICovCisJU2l6ZQkJY3VyX3NpemU7Cit9CQkJSGVhcE11 bHRpSW5zZXJ0U3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IEhlYXBJbnNlcnRTdGF0ZQoreworCXN0 cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpiaXN0YXRlOworCUhlYXBNdWx0aUluc2VydFN0YXRl ICptaXN0YXRlOworfQkJCUhlYXBJbnNlcnRTdGF0ZTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQog ICoJCWZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGhlYXAgYWNjZXNzIG1ldGhvZAogICoKQEAgLTI3 NSw2ICszMDksMjEgQEAgZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24s IEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiBleHRlcm4gdm9pZCBoZWFwX211bHRpX2lu c2VydChSZWxhdGlvbiByZWxhdGlvbiwgc3RydWN0IFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCiAJ CQkJCQkJICBpbnQgbnR1cGxlcywgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCiAJCQkJCQkJ ICBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CisKK2V4dGVybiBUYWJsZUluc2VydFN0YXRlICog aGVhcF9pbnNlcnRfYmVnaW4oUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQlDb21tYW5kSWQgY2lk LAorCQkJCQkJCQkJCQlpbnQgYW1fZmxhZ3MsCisJCQkJCQkJCQkJCWludCBpbnNlcnRfZmxhZ3Mp OworZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlLAor CQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIFR1cGxlVGFibGVTbG90ICpo ZWFwX211bHRpX2luc2VydF9uZXh0X2ZyZWVfc2xvdChUYWJsZUluc2VydFN0YXRlICogc3RhdGUp OworZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqIHN0 YXRlLAorCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIFR1cGxlVGFibGVT bG90ICoqaGVhcF9tdWx0aV9pbnNlcnRfc2xvdHMoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlLAor CQkJCQkJCQkJCQkJaW50ICpudW1fc2xvdHMpOworZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNl cnRfZmx1c2goVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKTsKK2V4dGVybiB2b2lkIGhlYXBfaW5z ZXJ0X2VuZChUYWJsZUluc2VydFN0YXRlICogc3RhdGUpOworCiBleHRlcm4gVE1fUmVzdWx0IGhl YXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJIENv bW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKIAkJCQkJCQkgc3Ry dWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFydCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaAppbmRleCA1Zjg0NzQ4NzFkLi44MzRkZTE1YjliIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAg LTI0Nyw2ICsyNDcsNDMgQEAgdHlwZWRlZiBzdHJ1Y3QgVE1fSW5kZXhEZWxldGVPcAogCVRNX0lu ZGV4U3RhdHVzICpzdGF0dXM7CiB9IFRNX0luZGV4RGVsZXRlT3A7CiAKKy8qIFVzZSBtdWx0aSBp bnNlcnRzLCBpLmUuIGJ1ZmZlciBtdWx0aXBsZSB0dXBsZXMgYW5kIGluc2VydCB0aGVtIGF0IG9u Y2UgKi8KKyNkZWZpbmUgVEFCTEVBTV9NVUxUSV9JTlNFUlRTIDB4MDAwMDAxCisKKy8qIFVzZSBC QVNfQlVMS1dSSVRFIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kgKi8KKyNkZWZpbmUgVEFCTEVBTV9C VUxLV1JJVEVfQlVGRkVSX0FDQ0VTU19TVFJBVEVHWSAweDAwMDAwMgorCisvKgorICogU2tpcCBm bHVzaGluZyBidWZmZXJlZCB0dXBsZXMgYXV0b21hdGljYWxseS4gUmVzcG9uc2liaWxpdHkgbGll cyB3aXRoIHRoZQorICogY2FsbGVyIHRvIGZsdXNoIHRoZSBidWZmZXJlZCB0dXBsZXMuCisgKi8K KyNkZWZpbmUgVEFCTEVBTV9TS0lQX01VTFRJX0lOU0VSVFNfRkxVU0ggMHgwMDAwMDQKKworCisv KiBIb2xkcyB0YWJsZSBpbnNlcnQgc3RhdGUuICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZUluc2Vy dFN0YXRlCit7CisJLyogVGFibGUgQU0tYWdub3N0aWMgZGF0YSBzdGFydHMgaGVyZSAqLworCisJ UmVsYXRpb24JcmVsOwkJCS8qIFRhcmdldCByZWxhdGlvbiAqLworCisJLyoKKwkgKiBDb21tYW5k IElEIGZvciB0aGlzIGluc2VydGlvbi4gSWYgcmVxdWlyZWQsIGNoYW5nZSB0aGlzIGZvciBlYWNo IHBhc3MKKwkgKiBvZiBpbnNlcnQgZnVuY3Rpb25zLgorCSAqLworCUNvbW1hbmRJZAljaWQ7CisK KwkvKiBUYWJsZSBBTSBvcHRpb25zIChUQUJMRUFNX1hYWCBtYWNyb3MpICovCisJaW50CQkJYW1f ZmxhZ3M7CisKKwkvKiB0YWJsZV90dXBsZV9pbnNlcnQgcGVyZm9ybWFuY2Ugb3B0aW9ucyAoVEFC TEVfSU5TRVJUX1hYWCBtYWNyb3MpICovCisJaW50CQkJaW5zZXJ0X2ZsYWdzOworCisJLyogVGFi bGUgQU0gc3BlY2lmaWMgZGF0YSBzdGFydHMgaGVyZSAqLworCisJdm9pZAkgICAqYW1fZGF0YTsK K30JCQlUYWJsZUluc2VydFN0YXRlOworCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0YWJs ZV90dXBsZV9pbnNlcnQgKi8KIC8qIFRBQkxFX0lOU0VSVF9TS0lQX1dBTCB3YXMgMHgwMDAxOyBS ZWxhdGlvbk5lZWRzV0FMKCkgbm93IGdvdmVybnMgKi8KICNkZWZpbmUgVEFCTEVfSU5TRVJUX1NL SVBfRlNNCQkweDAwMDIKQEAgLTUyMiw2ICs1NTksMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVB bVJvdXRpbmUKIAl2b2lkCQkoKm11bHRpX2luc2VydCkgKFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJs ZVNsb3QgKipzbG90cywgaW50IG5zbG90cywKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIGludCBv cHRpb25zLCBzdHJ1Y3QgQnVsa0luc2VydFN0YXRlRGF0YSAqYmlzdGF0ZSk7CiAKKwlUYWJsZUlu c2VydFN0YXRlICooKnR1cGxlX2luc2VydF9iZWdpbikgKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJ CQkJIENvbW1hbmRJZCBjaWQsCisJCQkJCQkJCQkJCSBpbnQgYW1fZmxhZ3MsCisJCQkJCQkJCQkJ CSBpbnQgaW5zZXJ0X2ZsYWdzKTsKKwl2b2lkCQkoKnR1cGxlX2luc2VydF92MikgKFRhYmxlSW5z ZXJ0U3RhdGUgKiBzdGF0ZSwKKwkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90KTsKKwl2b2lk CQkoKnR1cGxlX211bHRpX2luc2VydF92MikgKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSwKKwkJ CQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwlUdXBsZVRhYmxlU2xvdCAqKCp0dXBs ZV9tdWx0aV9pbnNlcnRfbmV4dF9mcmVlX3Nsb3QpIChUYWJsZUluc2VydFN0YXRlICogc3RhdGUp OworCVR1cGxlVGFibGVTbG90ICoqKCp0dXBsZV9tdWx0aV9pbnNlcnRfc2xvdHMpIChUYWJsZUlu c2VydFN0YXRlICogc3RhdGUsCisJCQkJCQkJCQkJCQkgIGludCAqbnVtX3Nsb3RzKTsKKwl2b2lk CQkoKnR1cGxlX211bHRpX2luc2VydF9mbHVzaCkgKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSk7 CisJdm9pZAkJKCp0dXBsZV9pbnNlcnRfZW5kKSAoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKTsK KwogCS8qIHNlZSB0YWJsZV90dXBsZV9kZWxldGUoKSBmb3IgcmVmZXJlbmNlIGFib3V0IHBhcmFt ZXRlcnMgKi8KIAlUTV9SZXN1bHQJKCp0dXBsZV9kZWxldGUpIChSZWxhdGlvbiByZWwsCiAJCQkJ CQkJCSBJdGVtUG9pbnRlciB0aWQsCkBAIC0xNDU2LDYgKzE1MDcsOTMgQEAgdGFibGVfbXVsdGlf aW5zZXJ0KFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG5zbG90cywK IAkJCQkJCQkJICBjaWQsIG9wdGlvbnMsIGJpc3RhdGUpOwogfQogCitzdGF0aWMgaW5saW5lIFRh YmxlSW5zZXJ0U3RhdGUgKgordGFibGVfaW5zZXJ0X2JlZ2luKFJlbGF0aW9uIHJlbCwgQ29tbWFu ZElkIGNpZCwgaW50IGFtX2ZsYWdzLAorCQkJCSAgIGludCBpbnNlcnRfZmxhZ3MpCit7CisJaWYg KHJlbC0+cmRfdGFibGVhbSAmJiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF9iZWdpbikK KwkJcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+dHVwbGVfaW5zZXJ0X2JlZ2luKHJlbCwgY2lkLCBh bV9mbGFncywKKwkJCQkJCQkJCQkJCSAgIGluc2VydF9mbGFncyk7CisJZWxzZQorCXsKKwkJZWxv ZyhFUlJPUiwgInRhYmxlX2luc2VydF9iZWdpbiBhY2Nlc3MgbWV0aG9kIGlzIG5vdCBpbXBsZW1l bnRlZCBmb3IgcmVsYXRpb24gXCIlc1wiIiwKKwkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKTsKKwkJcmV0dXJuIE5VTEw7CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KK30K Kworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV90dXBsZV9pbnNlcnRfdjIoVGFibGVJbnNlcnRT dGF0ZSAqIHN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlpZiAoc3RhdGUtPnJlbC0+ cmRfdGFibGVhbSAmJgorCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfdjIp CisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF92MihzdGF0ZSwgc2xvdCk7 CisJZWxzZQorCQllbG9nKEVSUk9SLCAidGFibGVfdHVwbGVfaW5zZXJ0X3YyIGFjY2VzcyBtZXRo b2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWxhdGlvbiBcIiVzXCIiLAorCQkJIFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0 YWJsZV9tdWx0aV9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlLCBUdXBsZVRhYmxl U2xvdCAqc2xvdCkKK3sKKwlpZiAoc3RhdGUtPnJlbC0+cmRfdGFibGVhbSAmJgorCQlzdGF0ZS0+ cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tdWx0aV9pbnNlcnRfdjIpCisJCXN0YXRlLT5yZWwtPnJk X3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF92MihzdGF0ZSwgc2xvdCk7CisJZWxzZQorCQll bG9nKEVSUk9SLCAidGFibGVfbXVsdGlfaW5zZXJ0X3YyIGFjY2VzcyBtZXRob2QgaXMgbm90IGlt cGxlbWVudGVkIGZvciByZWxhdGlvbiBcIiVzXCIiLAorCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHN0YXRlLT5yZWwpKTsKK30KKworc3RhdGljIGlubGluZSBUdXBsZVRhYmxlU2xvdCAqCit0 YWJsZV9tdWx0aV9pbnNlcnRfbmV4dF9mcmVlX3Nsb3QoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRl KQoreworCWlmIChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCXN0YXRlLT5yZWwtPnJkX3Rh YmxlYW0tPnR1cGxlX211bHRpX2luc2VydF9uZXh0X2ZyZWVfc2xvdCkKKwkJcmV0dXJuIHN0YXRl LT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF9uZXh0X2ZyZWVfc2xvdChzdGF0 ZSk7CisJZWxzZQorCXsKKwkJZWxvZyhFUlJPUiwgInRhYmxlX211bHRpX2luc2VydF9uZXh0X2Zy ZWVfc2xvdCBhY2Nlc3MgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgcmVsYXRpb24gXCIl c1wiIiwKKwkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+cmVsKSk7CisJCXJldHVy biBOVUxMOwkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9Cit9CisKK3N0YXRpYyBpbmxp bmUgVHVwbGVUYWJsZVNsb3QgKioKK3RhYmxlX211bHRpX2luc2VydF9zbG90cyhUYWJsZUluc2Vy dFN0YXRlICogc3RhdGUsIGludCAqbnVtX3Nsb3RzKQoreworCWlmIChzdGF0ZS0+cmVsLT5yZF90 YWJsZWFtICYmCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF9z bG90cykKKwkJcmV0dXJuIHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2Vy dF9zbG90cyhzdGF0ZSwgbnVtX3Nsb3RzKTsKKwllbHNlCisJeworCQllbG9nKEVSUk9SLCAidGFi bGVfbXVsdGlfaW5zZXJ0X3Nsb3RzIGFjY2VzcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZv ciByZWxhdGlvbiBcIiVzXCIiLAorCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5y ZWwpKTsKKwkJcmV0dXJuIE5VTEw7CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KK30K Kworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2goVGFibGVJbnNl cnRTdGF0ZSAqIHN0YXRlKQoreworCWlmIChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCXN0 YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF9mbHVzaCkKKwkJc3RhdGUt PnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbXVsdGlfaW5zZXJ0X2ZsdXNoKHN0YXRlKTsKKwllbHNl CisJCWVsb2coRVJST1IsICJ0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2ggYWNjZXNzIG1ldGhvZCBp cyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUoc3RhdGUtPnJlbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxl X2luc2VydF9lbmQoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKQoreworCWlmIChzdGF0ZS0+cmVs LT5yZF90YWJsZWFtICYmCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF9l bmQpCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF9lbmQoc3RhdGUpOwor CWVsc2UKKwkJZWxvZyhFUlJPUiwgInRhYmxlX2luc2VydF9lbmQgYWNjZXNzIG1ldGhvZCBpcyBu b3QgaW1wbGVtZW50ZWQgZm9yIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUoc3RhdGUtPnJlbCkpOworfQorCiAvKgogICogRGVsZXRlIGEgdHVwbGUuCiAgKgot LSAKMi4zNC4xCgo= --0000000000000f0b020610143416 Content-Type: application/octet-stream; name="v10-0002-Optimize-CTAS-with-multi-inserts.patch" Content-Disposition: attachment; filename="v10-0002-Optimize-CTAS-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrytnps91 RnJvbSBhYjIxYmM5ZGIwYjZhMDMzZGIzZDZkMDBmNzJjNWIxYWJmNDQ1MjQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMTE6MDE6NTYgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxMCAyLzRdIE9wdGltaXplIENUQVMgd2l0aCBtdWx0aSBpbnNl cnRzCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgICAgfCAyNSAr KysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVn YXRlcy5vdXQgfCAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwgICAg ICB8ICAyICstCiAzIGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IDE2YTJmZTY1ZTYuLjNhMDJlYTk1Nzgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtNTgsOSArNTgsNyBAQCB0eXBlZGVmIHN0cnVj dAogCS8qIFRoZXNlIGZpZWxkcyBhcmUgZmlsbGVkIGJ5IGludG9yZWxfc3RhcnR1cDogKi8KIAlS ZWxhdGlvbglyZWw7CQkJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KIAlPYmplY3RBZGRyZXNz IHJlbGFkZHI7CQkvKiBhZGRyZXNzIG9mIHJlbCwgZm9yIEV4ZWNDcmVhdGVUYWJsZUFzICovCi0J Q29tbWFuZElkCW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVz ICovCi0JaW50CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5j ZSBvcHRpb25zICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0 YXRlICovCisJVGFibGVJbnNlcnRTdGF0ZSAqdGlfc3RhdGU7IC8qIHRhYmxlIGluc2VydCBzdGF0 ZSAqLwogfSBEUl9pbnRvcmVsOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgQ1RBUyBkZWZp bml0aW9uIGNyZWF0aW9uICovCkBAIC01NTcsMTcgKzU1NSwxOSBAQCBpbnRvcmVsX3N0YXJ0dXAo RGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8pCiAJ ICovCiAJbXlTdGF0ZS0+cmVsID0gaW50b1JlbGF0aW9uRGVzYzsKIAlteVN0YXRlLT5yZWxhZGRy ID0gaW50b1JlbGF0aW9uQWRkcjsKLQlteVN0YXRlLT5vdXRwdXRfY2lkID0gR2V0Q3VycmVudENv bW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NLSVBf RlNNOwogCiAJLyoKIAkgKiBJZiBXSVRIIE5PIERBVEEgaXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBu byBuZWVkIHRvIHNldCB1cCB0aGUgc3RhdGUgZm9yCiAJICogYnVsayBpbnNlcnRzIGFzIHRoZXJl IGFyZSBubyB0dXBsZXMgdG8gaW5zZXJ0LgogCSAqLwogCWlmICghaW50by0+c2tpcERhdGEpCi0J CW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwkJbXlTdGF0ZS0+dGlf c3RhdGUgPSB0YWJsZV9pbnNlcnRfYmVnaW4oaW50b1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJ ICAgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCQkJICAgVEFCTEVBTV9NVUxU SV9JTlNFUlRTIHwKKwkJCQkJCQkJCQkJICAgVEFCTEVBTV9CVUxLV1JJVEVfQlVGRkVSX0FDQ0VT U19TVFJBVEVHWSwKKwkJCQkJCQkJCQkJICAgVEFCTEVfSU5TRVJUX1NLSVBfRlNNKTsKIAllbHNl Ci0JCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT50aV9zdGF0ZSA9IE5VTEw7 CiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMgc29tZXRoaW5nIGFscmVh ZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNTk1LDExICs1OTUsNyBAQCBpbnRvcmVsX3Jl Y2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKIAkJICogd291 bGQgbm90IGJlIGNoZWFwIGVpdGhlci4gVGhpcyBhbHNvIGRvZXNuJ3QgYWxsb3cgYWNjZXNzaW5n IHBlci1BTQogCQkgKiBkYXRhIChzYXkgYSB0dXBsZSdzIHhtaW4pLCBidXQgc2luY2Ugd2UgZG9u J3QgZG8gdGhhdCBoZXJlLi4uCiAJCSAqLwotCQl0YWJsZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+ cmVsLAotCQkJCQkJICAgc2xvdCwKLQkJCQkJCSAgIG15U3RhdGUtPm91dHB1dF9jaWQsCi0JCQkJ CQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkJICAgbXlTdGF0ZS0+YmlzdGF0ZSk7CisJ CXRhYmxlX211bHRpX2luc2VydF92MihteVN0YXRlLT50aV9zdGF0ZSwgc2xvdCk7CiAJfQogCiAJ LyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlvbiwgc28gdGhlcmUgYXJl IG5vIGluZGV4ZXMgKi8KQEAgLTYxNywxMCArNjEzLDcgQEAgaW50b3JlbF9zaHV0ZG93bihEZXN0 UmVjZWl2ZXIgKnNlbGYpCiAJSW50b0NsYXVzZSAqaW50byA9IG15U3RhdGUtPmludG87CiAKIAlp ZiAoIWludG8tPnNraXBEYXRhKQotCXsKLQkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0YXRlLT5i aXN0YXRlKTsKLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3RhdGUtPnJlbCwgbXlTdGF0 ZS0+dGlfb3B0aW9ucyk7Ci0JfQorCQl0YWJsZV9pbnNlcnRfZW5kKG15U3RhdGUtPnRpX3N0YXRl KTsKIAogCS8qIGNsb3NlIHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQgKi8KIAl0YWJs ZV9jbG9zZShteVN0YXRlLT5yZWwsIE5vTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9h Z2dyZWdhdGVzLm91dAppbmRleCA3YTczYzE5MzE0Li4yODg5ZmQzMTVkIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKQEAgLTI3MzQsNyArMjczNCw3IEBAIENSRUFU RSBUQUJMRSBidGcgQVMgU0VMRUNUCiAgIGkgJSAxMDAgQVMgeSwKICAgJ2FiYycgfHwgaSAlIDEw IEFTIHosCiAgIGkgQVMgdwotRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgQVMgaTsKK0ZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBBUyBpOwogQ1JFQVRFIElOREVYIGJ0Z194X3lf aWR4IE9OIGJ0Zyh4LHkpOwogQU5BTFlaRSBidGc7CiAtLSBHUk9VUCBCWSBvcHRpbWl6YXRpb24g YnkgcmVvcmRlciBjb2x1bW5zIGJ5IGZyZXF1ZW5jeQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvYWdncmVnYXRlcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVz LnNxbAppbmRleCA5MTZkYmY5MDhmLi45OWY4OTBiYjg1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dy ZWdhdGVzLnNxbApAQCAtMTE4Nyw3ICsxMTg3LDcgQEAgQ1JFQVRFIFRBQkxFIGJ0ZyBBUyBTRUxF Q1QKICAgaSAlIDEwMCBBUyB5LAogICAnYWJjJyB8fCBpICUgMTAgQVMgeiwKICAgaSBBUyB3Ci1G Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBBUyBpOworRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwMDApIEFTIGk7CiBDUkVBVEUgSU5ERVggYnRnX3hfeV9pZHggT04gYnRnKHgseSk7CiBB TkFMWVpFIGJ0ZzsKIAotLSAKMi4zNC4xCgo= --0000000000000f0b020610143416 Content-Type: application/octet-stream; name="v10-0003-Optimize-RMV-with-multi-inserts.patch" Content-Disposition: attachment; filename="v10-0003-Optimize-RMV-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrytns8c2 RnJvbSA2MjFhYTk3YTE3MDhiYTE3OGY1ZWJmNmFjYTg2OTc4OGEyY2YxYjU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMTE6MDI6MTkgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxMCAzLzRdIE9wdGltaXplIFJNViB3aXRoIG11bHRpIGluc2Vy dHMKCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIHwgMzQgKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyks IDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwppbmRleCAxZGNmYmU4NzliLi5m ODRjNzlmNWYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCkBAIC01MiwxMCArNTIsNyBAQCB0eXBl ZGVmIHN0cnVjdAogCURlc3RSZWNlaXZlciBwdWI7CQkJLyogcHVibGljbHkta25vd24gZnVuY3Rp b24gcG9pbnRlcnMgKi8KIAlPaWQJCQl0cmFuc2llbnRvaWQ7CS8qIE9JRCBvZiBuZXcgaGVhcCBp bnRvIHdoaWNoIHRvIHN0b3JlICovCiAJLyogVGhlc2UgZmllbGRzIGFyZSBmaWxsZWQgYnkgdHJh bnNpZW50cmVsX3N0YXJ0dXA6ICovCi0JUmVsYXRpb24JdHJhbnNpZW50cmVsOwkvKiByZWxhdGlv biB0byB3cml0ZSB0byAqLwotCUNvbW1hbmRJZAlvdXRwdXRfY2lkOwkJLyogY21pbiB0byBpbnNl cnQgaW4gb3V0cHV0IHR1cGxlcyAqLwotCWludAkJCXRpX29wdGlvbnM7CQkvKiB0YWJsZV90dXBs ZV9pbnNlcnQgcGVyZm9ybWFuY2Ugb3B0aW9ucyAqLwotCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRl OwkvKiBidWxrIGluc2VydCBzdGF0ZSAqLworCVRhYmxlSW5zZXJ0U3RhdGUgKnRpX3N0YXRlOyAv KiB0YWJsZSBpbnNlcnQgc3RhdGUgKi8KIH0gRFJfdHJhbnNpZW50cmVsOwogCiBzdGF0aWMgaW50 CW1hdHZpZXdfbWFpbnRlbmFuY2VfZGVwdGggPSAwOwpAQCAtNDU3LDEzICs0NTQsMTMgQEAgdHJh bnNpZW50cmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBs ZURlc2MgdHlwZWluZm8pCiAKIAl0cmFuc2llbnRyZWwgPSB0YWJsZV9vcGVuKG15U3RhdGUtPnRy YW5zaWVudG9pZCwgTm9Mb2NrKTsKIAotCS8qCi0JICogRmlsbCBwcml2YXRlIGZpZWxkcyBvZiBt eVN0YXRlIGZvciB1c2UgYnkgbGF0ZXIgcm91dGluZXMKLQkgKi8KLQlteVN0YXRlLT50cmFuc2ll bnRyZWwgPSB0cmFuc2llbnRyZWw7Ci0JbXlTdGF0ZS0+b3V0cHV0X2NpZCA9IEdldEN1cnJlbnRD b21tYW5kSWQodHJ1ZSk7Ci0JbXlTdGF0ZS0+dGlfb3B0aW9ucyA9IFRBQkxFX0lOU0VSVF9TS0lQ X0ZTTSB8IFRBQkxFX0lOU0VSVF9GUk9aRU47Ci0JbXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJ bnNlcnRTdGF0ZSgpOworCS8qIEZpbGwgcHJpdmF0ZSBmaWVsZHMgb2YgbXlTdGF0ZSBmb3IgdXNl IGJ5IGxhdGVyIHJvdXRpbmVzICovCisJbXlTdGF0ZS0+dGlfc3RhdGUgPSB0YWJsZV9pbnNlcnRf YmVnaW4odHJhbnNpZW50cmVsLAorCQkJCQkJCQkJCSAgIEdldEN1cnJlbnRDb21tYW5kSWQodHJ1 ZSksCisJCQkJCQkJCQkJICAgVEFCTEVBTV9NVUxUSV9JTlNFUlRTIHwKKwkJCQkJCQkJCQkgICBU QUJMRUFNX0JVTEtXUklURV9CVUZGRVJfQUNDRVNTX1NUUkFURUdZLAorCQkJCQkJCQkJCSAgIFRB QkxFX0lOU0VSVF9TS0lQX0ZTTSB8CisJCQkJCQkJCQkJICAgVEFCTEVfSU5TRVJUX0ZST1pFTik7 CiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMgc29tZXRoaW5nIGFscmVh ZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNDg4LDEyICs0ODUsNyBAQCB0cmFuc2llbnRy ZWxfcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpzZWxmKQogCSAq IGNoZWFwIGVpdGhlci4gVGhpcyBhbHNvIGRvZXNuJ3QgYWxsb3cgYWNjZXNzaW5nIHBlci1BTSBk YXRhIChzYXkgYQogCSAqIHR1cGxlJ3MgeG1pbiksIGJ1dCBzaW5jZSB3ZSBkb24ndCBkbyB0aGF0 IGhlcmUuLi4KIAkgKi8KLQotCXRhYmxlX3R1cGxlX2luc2VydChteVN0YXRlLT50cmFuc2llbnRy ZWwsCi0JCQkJCSAgIHNsb3QsCi0JCQkJCSAgIG15U3RhdGUtPm91dHB1dF9jaWQsCi0JCQkJCSAg IG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCSAgIG15U3RhdGUtPmJpc3RhdGUpOworCXRhYmxl X211bHRpX2luc2VydF92MihteVN0YXRlLT50aV9zdGF0ZSwgc2xvdCk7CiAKIAkvKiBXZSBrbm93 IHRoaXMgaXMgYSBuZXdseSBjcmVhdGVkIHJlbGF0aW9uLCBzbyB0aGVyZSBhcmUgbm8gaW5kZXhl cyAqLwogCkBAIC01MDcsMTQgKzQ5OSwxMiBAQCBzdGF0aWMgdm9pZAogdHJhbnNpZW50cmVsX3No dXRkb3duKERlc3RSZWNlaXZlciAqc2VsZikKIHsKIAlEUl90cmFuc2llbnRyZWwgKm15U3RhdGUg PSAoRFJfdHJhbnNpZW50cmVsICopIHNlbGY7CisJUmVsYXRpb24JdHJhbnNpZW50cmVsID0gbXlT dGF0ZS0+dGlfc3RhdGUtPnJlbDsKIAotCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+Ymlz dGF0ZSk7Ci0KLQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50cmVs LCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwl0YWJsZV9pbnNlcnRfZW5kKG15U3RhdGUtPnRpX3N0 YXRlKTsKIAogCS8qIGNsb3NlIHRyYW5zaWVudHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21t aXQgKi8KLQl0YWJsZV9jbG9zZShteVN0YXRlLT50cmFuc2llbnRyZWwsIE5vTG9jayk7Ci0JbXlT dGF0ZS0+dHJhbnNpZW50cmVsID0gTlVMTDsKKwl0YWJsZV9jbG9zZSh0cmFuc2llbnRyZWwsIE5v TG9jayk7CiB9CiAKIC8qCi0tIAoyLjM0LjEKCg== --0000000000000f0b020610143416 Content-Type: application/octet-stream; name="v10-0004-Use-new-multi-insert-TAM-for-COPY-FROM.patch" Content-Disposition: attachment; filename="v10-0004-Use-new-multi-insert-TAM-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lrytnuta3 RnJvbSAxNjkxMzFmMjhlMDljNDFiMGIxMDBmOTUzYjU0ZGQxNmIyZTMxODVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMTE6MDI6MzcgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxMCA0LzRdIFVzZSBuZXcgbXVsdGkgaW5zZXJ0IFRBTSBmb3Ig Q09QWSBGUk9NCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgfCA5MiArKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1MCBpbnNlcnRp b25zKCspLCA0MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5ZnJvbS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwppbmRleCAxZmU3 MGI5MTMzLi44YWJmMzNhYTk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 ZnJvbS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTc3LDEwICs3 Nyw5IEBACiAvKiBTdG9yZXMgbXVsdGktaW5zZXJ0IGRhdGEgcmVsYXRlZCB0byBhIHNpbmdsZSBy ZWxhdGlvbiBpbiBDb3B5RnJvbS4gKi8KIHR5cGVkZWYgc3RydWN0IENvcHlNdWx0aUluc2VydEJ1 ZmZlcgogewotCVR1cGxlVGFibGVTbG90ICpzbG90c1tNQVhfQlVGRkVSRURfVFVQTEVTXTsgLyog QXJyYXkgdG8gc3RvcmUgdHVwbGVzICovCisJVGFibGVJbnNlcnRTdGF0ZSAqdGlfc3RhdGU7IC8q IFRhYmxlIGluc2VydCBzdGF0ZTsgTlVMTCBpZiBmb3JlaWduIHRhYmxlICovCisJVHVwbGVUYWJs ZVNsb3QgKipzbG90czsJCS8qIEFycmF5IHRvIHN0b3JlIHR1cGxlcyAqLwogCVJlc3VsdFJlbElu Zm8gKnJlc3VsdFJlbEluZm87CS8qIFJlc3VsdFJlbEluZm8gZm9yICdyZWxpZCcgKi8KLQlCdWxr SW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogQnVsa0luc2VydFN0YXRlIGZvciB0aGlzIHJlbCBpZiBw bGFpbgotCQkJCQkJCQkgKiB0YWJsZTsgTlVMTCBpZiBmb3JlaWduIHRhYmxlICovCiAJaW50CQkJ bnVzZWQ7CQkJLyogbnVtYmVyIG9mICdzbG90cycgY29udGFpbmluZyB0dXBsZXMgKi8KIAl1aW50 NjQJCWxpbmVub3NbTUFYX0JVRkZFUkVEX1RVUExFU107CS8qIExpbmUgIyBvZiB0dXBsZSBpbiBj b3B5CiAJCQkJCQkJCQkJCQkgKiBzdHJlYW0gKi8KQEAgLTIyMywxNCArMjIyLDMxIEBAIGxpbWl0 X3ByaW50b3V0X2xlbmd0aChjb25zdCBjaGFyICpzdHIpCiAgKiBSZXN1bHRSZWxJbmZvLgogICov CiBzdGF0aWMgQ29weU11bHRpSW5zZXJ0QnVmZmVyICoKLUNvcHlNdWx0aUluc2VydEJ1ZmZlcklu aXQoUmVzdWx0UmVsSW5mbyAqcnJpKQorQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChDb3B5TXVs dGlJbnNlcnRJbmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSkKIHsKIAlDb3B5TXVsdGlJ bnNlcnRCdWZmZXIgKmJ1ZmZlcjsKIAogCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIg KikgcGFsbG9jKHNpemVvZihDb3B5TXVsdGlJbnNlcnRCdWZmZXIpKTsKLQltZW1zZXQoYnVmZmVy LT5zbG90cywgMCwgc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopICogTUFYX0JVRkZFUkVEX1RVUExF Uyk7CisKKwlpZiAocnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCisJeworCQlpbnQJCQludW1f c2xvdHM7CisKKwkJYnVmZmVyLT50aV9zdGF0ZSA9IHRhYmxlX2luc2VydF9iZWdpbihycmktPnJp X1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJICBtaWluZm8tPm15Y2lkLAorCQkJCQkJCQkJCQkg IFRBQkxFQU1fTVVMVElfSU5TRVJUUyB8CisJCQkJCQkJCQkJCSAgVEFCTEVBTV9CVUxLV1JJVEVf QlVGRkVSX0FDQ0VTU19TVFJBVEVHWSB8CisJCQkJCQkJCQkJCSAgVEFCTEVBTV9TS0lQX01VTFRJ X0lOU0VSVFNfRkxVU0gsCisJCQkJCQkJCQkJCSAgbWlpbmZvLT50aV9vcHRpb25zKTsKKwkJYnVm ZmVyLT5zbG90cyA9IHRhYmxlX211bHRpX2luc2VydF9zbG90cyhidWZmZXItPnRpX3N0YXRlLCAm bnVtX3Nsb3RzKTsKKwl9CisJZWxzZQorCXsKKwkJYnVmZmVyLT5zbG90cyA9IHBhbGxvYzAoc2l6 ZW9mKFR1cGxlVGFibGVTbG90ICopICogTUFYX0JVRkZFUkVEX1RVUExFUyk7CisJCWJ1ZmZlci0+ dGlfc3RhdGUgPSBOVUxMOworCX0KKwogCWJ1ZmZlci0+cmVzdWx0UmVsSW5mbyA9IHJyaTsKLQli dWZmZXItPmJpc3RhdGUgPSAocnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwpID8gR2V0QnVsa0lu c2VydFN0YXRlKCkgOiBOVUxMOwogCWJ1ZmZlci0+bnVzZWQgPSAwOwogCiAJcmV0dXJuIGJ1ZmZl cjsKQEAgLTI0NSw3ICsyNjEsNyBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoQ29w eU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVm ZmVyOwogCi0JYnVmZmVyID0gQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChycmkpOworCWJ1ZmZl ciA9IENvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQobWlpbmZvLCBycmkpOwogCiAJLyogU2V0dXAg YmFjay1saW5rIHNvIHdlIGNhbiBlYXNpbHkgZmluZCB0aGlzIGJ1ZmZlciBhZ2FpbiAqLwogCXJy aS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyID0gYnVmZmVyOwpAQCAtMzIyLDggKzMzOCw2IEBA IENvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywK IAkJaW50CQkJYmF0Y2hfc2l6ZSA9IHJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZTsKIAkJaW50 CQkJc2VudCA9IDA7CiAKLQkJQXNzZXJ0KGJ1ZmZlci0+YmlzdGF0ZSA9PSBOVUxMKTsKLQogCQkv KiBFbnN1cmUgdGhhdCB0aGUgRkRXIHN1cHBvcnRzIGJhdGNoaW5nIGFuZCBpdCdzIGVuYWJsZWQg Ki8KIAkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkV4ZWNGb3JlaWduQmF0 Y2hJbnNlcnQpOwogCQlBc3NlcnQoYmF0Y2hfc2l6ZSA+IDEpOwpAQCAtMzk1LDEzICs0MDksOCBA QCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8s CiAJfQogCWVsc2UKIAl7Ci0JCUNvbW1hbmRJZAlteWNpZCA9IG1paW5mby0+bXljaWQ7Ci0JCWlu dAkJCXRpX29wdGlvbnMgPSBtaWluZm8tPnRpX29wdGlvbnM7CiAJCWJvb2wJCWxpbmVfYnVmX3Zh bGlkID0gY3N0YXRlLT5saW5lX2J1Zl92YWxpZDsKIAkJdWludDY0CQlzYXZlX2N1cl9saW5lbm8g PSBjc3RhdGUtPmN1cl9saW5lbm87Ci0JCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKLQotCQlB c3NlcnQoYnVmZmVyLT5iaXN0YXRlICE9IE5VTEwpOwogCiAJCS8qCiAJCSAqIFByaW50IGVycm9y IGNvbnRleHQgaW5mb3JtYXRpb24gY29ycmVjdGx5LCBpZiBvbmUgb2YgdGhlIG9wZXJhdGlvbnMK QEAgLTQwOSwxOCArNDE4LDcgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRp SW5zZXJ0SW5mbyAqbWlpbmZvLAogCQkgKi8KIAkJY3N0YXRlLT5saW5lX2J1Zl92YWxpZCA9IGZh bHNlOwogCi0JCS8qCi0JCSAqIHRhYmxlX211bHRpX2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNv IHN3aXRjaCB0byBzaG9ydC1saXZlZCBtZW1vcnkKLQkJICogY29udGV4dCBiZWZvcmUgY2FsbGlu ZyBpdC4KLQkJICovCi0JCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVy VHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOwotCQl0YWJsZV9tdWx0aV9pbnNlcnQocmVzdWx0 UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJICAgc2xvdHMsCi0JCQkJCQkgICBudXNl ZCwKLQkJCQkJCSAgIG15Y2lkLAotCQkJCQkJICAgdGlfb3B0aW9ucywKLQkJCQkJCSAgIGJ1ZmZl ci0+YmlzdGF0ZSk7Ci0JCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJdGFi bGVfbXVsdGlfaW5zZXJ0X2ZsdXNoKGJ1ZmZlci0+dGlfc3RhdGUpOwogCiAJCWZvciAoaSA9IDA7 IGkgPCBudXNlZDsgaSsrKQogCQl7CkBAIC00MzUsNyArNDMzLDcgQEAgQ29weU11bHRpSW5zZXJ0 QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogCQkJCWNzdGF0ZS0+Y3Vy X2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKIAkJCQlyZWNoZWNrSW5kZXhlcyA9CiAJCQkJ CUV4ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJCSAgYnVmZmVy LT5zbG90c1tpXSwgZXN0YXRlLCBmYWxzZSwKKwkJCQkJCQkJCQkgIHNsb3RzW2ldLCBlc3RhdGUs IGZhbHNlLAogCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIE5JTCwgZmFsc2UpOwogCQkJCUV4ZWNB Ukluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJCSBzbG90c1tp XSwgcmVjaGVja0luZGV4ZXMsCkBAIC00OTMsMjAgKzQ5MSwxNSBAQCBDb3B5TXVsdGlJbnNlcnRC dWZmZXJDbGVhbnVwKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIAlyZXN1bHRSZWxJbmZv LT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIgPSBOVUxMOwogCiAJaWYgKHJlc3VsdFJlbEluZm8t PnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkKLQl7Ci0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgIT0g TlVMTCk7Ci0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUoYnVmZmVyLT5iaXN0YXRlKTsKLQl9CisJCXRh YmxlX2luc2VydF9lbmQoYnVmZmVyLT50aV9zdGF0ZSk7CiAJZWxzZQotCQlBc3NlcnQoYnVmZmVy LT5iaXN0YXRlID09IE5VTEwpOwotCi0JLyogU2luY2Ugd2Ugb25seSBjcmVhdGUgc2xvdHMgb24g ZGVtYW5kLCBqdXN0IGRyb3AgdGhlIG5vbi1udWxsIG9uZXMuICovCi0JZm9yIChpID0gMDsgaSA8 IE1BWF9CVUZGRVJFRF9UVVBMRVMgJiYgYnVmZmVyLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCi0J CUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5zbG90c1tpXSk7CisJeworCQkv KiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBkZW1hbmQsIGp1c3QgZHJvcCB0aGUgbm9u LW51bGwgb25lcy4gKi8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJFRF9UVVBMRVMgJiYg YnVmZmVyLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFi bGVTbG90KGJ1ZmZlci0+c2xvdHNbaV0pOwogCi0JaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1Jv dXRpbmUgPT0gTlVMTCkKLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KHJlc3VsdFJlbEluZm8t PnJpX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJIG1paW5mby0+dGlfb3B0aW9ucyk7CisJCXBmcmVl KGJ1ZmZlci0+c2xvdHMpOworCX0KIAogCXBmcmVlKGJ1ZmZlcik7CiB9CkBAIC01OTMsMTMgKzU4 NiwyNSBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90KENvcHlNdWx0aUluc2VydElu Zm8gKm1paW5mbywKIHsKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+cmlf Q29weU11bHRpSW5zZXJ0QnVmZmVyOwogCWludAkJCW51c2VkID0gYnVmZmVyLT5udXNlZDsKKwlU dXBsZVRhYmxlU2xvdCAqc2xvdDsKIAogCUFzc2VydChidWZmZXIgIT0gTlVMTCk7CiAJQXNzZXJ0 KG51c2VkIDwgTUFYX0JVRkZFUkVEX1RVUExFUyk7CiAKLQlpZiAoYnVmZmVyLT5zbG90c1tudXNl ZF0gPT0gTlVMTCkKLQkJYnVmZmVyLT5zbG90c1tudXNlZF0gPSB0YWJsZV9zbG90X2NyZWF0ZShy cmktPnJpX1JlbGF0aW9uRGVzYywgTlVMTCk7Ci0JcmV0dXJuIGJ1ZmZlci0+c2xvdHNbbnVzZWRd OworCWlmIChycmktPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkKKwkJc2xvdCA9IHRhYmxlX211bHRp X2luc2VydF9uZXh0X2ZyZWVfc2xvdChidWZmZXItPnRpX3N0YXRlKTsKKwllbHNlCisJeworCQlp ZiAoYnVmZmVyLT5zbG90c1tudXNlZF0gPT0gTlVMTCkKKwkJeworCQkJc2xvdCA9IHRhYmxlX3Ns b3RfY3JlYXRlKHJyaS0+cmlfUmVsYXRpb25EZXNjLCBOVUxMKTsKKwkJCWJ1ZmZlci0+c2xvdHNb bnVzZWRdID0gc2xvdDsKKwkJfQorCQllbHNlCisJCQlzbG90ID0gYnVmZmVyLT5zbG90c1tudXNl ZF07CisJfQorCisJcmV0dXJuIHNsb3Q7CiB9CiAKIC8qCkBAIC02MTUsNiArNjIwLDkgQEAgQ29w eU11bHRpSW5zZXJ0SW5mb1N0b3JlKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0 UmVsSW5mbyAqcnJpLAogCUFzc2VydChidWZmZXIgIT0gTlVMTCk7CiAJQXNzZXJ0KHNsb3QgPT0g YnVmZmVyLT5zbG90c1tidWZmZXItPm51c2VkXSk7CiAKKwlpZiAocnJpLT5yaV9GZHdSb3V0aW5l ID09IE5VTEwpCisJCXRhYmxlX211bHRpX2luc2VydF92MihidWZmZXItPnRpX3N0YXRlLCBzbG90 KTsKKwogCS8qIFN0b3JlIHRoZSBsaW5lIG51bWJlciBzbyB3ZSBjYW4gcHJvcGVybHkgcmVwb3J0 IGFueSBlcnJvcnMgbGF0ZXIgKi8KIAlidWZmZXItPmxpbmVub3NbYnVmZmVyLT5udXNlZF0gPSBs aW5lbm87CiAKLS0gCjIuMzQuMQoK --0000000000000f0b020610143416--