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.96) (envelope-from ) id 1vRhHV-002nqW-2A for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Dec 2025 01:40:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vRhHU-00AgbM-09 for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Dec 2025 01:40:16 +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.96) (envelope-from ) id 1vRhHT-00AgbE-26 for pgsql-hackers@lists.postgresql.org; Sat, 06 Dec 2025 01:40:16 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vRhHQ-003NOu-11 for pgsql-hackers@postgresql.org; Sat, 06 Dec 2025 01:40:14 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-29844c68068so36519875ad.2 for ; Fri, 05 Dec 2025 17:40:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1764985209; x=1765590009; 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=BuhBp14oo9ZJVqFCgEo/fLOhN0qfUSylKJzU1TmFv54=; b=DI1X5u2RfVlfgE+DwCeAeWv0TFHzQKDYaBxJtYulrYwuWB+HV7c9t+DAX1u0ONPcVj lnMM7XPfYu5I8xUcC3stSNCq5EOaNb54+56D83XD27/cbic0S0Tugc/Dm+Xwbdmd3I6u Cn5jGAIsz+a/KQSUP8LhKSo9Mkvzr3HZ9W093zWWSjBOO4/awFjVs+l8+PcIHDKb/05b lwKEFhB9AxsyCMMRn0t2mWUFLHeq0BxvMdixY4z1oR6IJazEWz1WZkRM3nefoSx+JT9i 2V7b50hWksU86BFUnC7G+JuqurHWKnHAXE57WBtaMIOHJm31a61DxpfDeJmarkZJqHxB OD6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764985209; x=1765590009; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BuhBp14oo9ZJVqFCgEo/fLOhN0qfUSylKJzU1TmFv54=; b=FL8LZh8hCtE57vCBXsiFa/0um179Q9Cu8Tdz+ispHuGmCXSlix7pXD9ezaNh1u9W/E pp9lk5jWC3LKIGwAOOuBjlJcOvFmr7eTFhv3hD2Fy00EaFK3L10c8ArTrID61wsyD2Jq eN6ccb7r3GHmxivx5XsuSvjULY8a628NSAw6HTF+ZdKkQ0J2fOHht90J5w/7h8Yh6wvA HspwgUWouWbcK9Gg8yOsoVoQUBbPClSDDqCuz26IsCXtPDe6SqePhCiU5TTlac38+S7T mLyBbIwWCDm4Wv7+4Yed6e1JdELqXM+tIxkCBUWqzLSgjdmtMZvLCFjXTguP6sBSVvR3 LNhw== X-Forwarded-Encrypted: i=1; AJvYcCVhIPQBP/ZGJ0N1EstewBNR/k/A9HK9iTRuEUk+BWDrVTPPws7jlICXIUdTIe6xbYRuwANSJPtsd31a89pA@postgresql.org X-Gm-Message-State: AOJu0YyTC4FJ2wpspXlZ2u4ENQLX1zWwUas7d054gRq8aeKPXT+50Bw/ NUx7P5KKuGCUCbSJIhXy/0RQSzZxaD5gtDYwPAe1p/V3Up62K+Fw2cc/to6+q3+jZtuhClwzJyT poWm+U+ncCjYQ4M5tI6tKYeJrwQepZhTRaGwdfA0E X-Gm-Gg: ASbGncs5f2OuGnspujb1uA+NaxuN93s+rnuylen4JvRmXpwm/CleREw2B2BU2Yej7Bz T/5+XfgTiVAEB1JqL01xRRvqkK+aRmzSKxlOyS8y9JD7jyfxAdxquXRzHgHZo/q1KA3RHxBnuyc EBZuqUuEt13RrGrP91Sl1h+k5EHh3BoA9HJE70e6ZYC2J6WrvuKNHPkzKGp84QUtQW38S1INH6U z4X1vBbxAbAGC+/DFfhCD1nTbcjrhnAQrkCA4HxJD3sIeP4UiCD/GMQxy4a/m6jm4UaBphNmg== X-Google-Smtp-Source: AGHT+IEJ/QyvWps/0pBYORpEU7pxqTj8gxtG3PohBy1c5EBAc0JBvhThWl6XrbvQEcSkCVzbEcAvFctJTOWv2B7CoMw= X-Received: by 2002:a05:7300:f78c:b0:2a4:3593:6464 with SMTP id 5a478bee46e88-2abc71dc4b2mr722516eec.20.1764985209111; Fri, 05 Dec 2025 17:40:09 -0800 (PST) MIME-Version: 1.0 References: <5d81fbbb-7609-4445-9bc4-8af211fb7674@dunslane.net> <8e226753-57af-489a-bfbe-caa23dd71286@dunslane.net> In-Reply-To: From: Manni Wood Date: Fri, 5 Dec 2025 19:39:56 -0600 X-Gm-Features: AQt7F2q0y2iNnf7rSUi9YCFFLB0qQT9z6ZJM35sAB4RybxpcC-qCcvS6bxFiahk Message-ID: Subject: Re: Speed up COPY FROM text/CSV parsing using SIMD To: KAZAR Ayoub Cc: Nathan Bossart , Nazir Bilal Yavuz , Andrew Dunstan , Shinya Kato , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000006cd4e006453ea479" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006cd4e006453ea479 Content-Type: multipart/alternative; boundary="0000000000006cd4de06453ea477" --0000000000006cd4de06453ea477 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Nov 26, 2025 at 8:21=E2=80=AFAM Manni Wood wrote: > > > On Wed, Nov 26, 2025 at 5:51=E2=80=AFAM KAZAR Ayoub wro= te: > >> Hello, >> On Wed, Nov 19, 2025 at 10:01=E2=80=AFPM Nathan Bossart >> wrote: >> >>> On Tue, Nov 18, 2025 at 05:20:05PM +0300, Nazir Bilal Yavuz wrote: >>> > Thanks, done. >>> >>> I took a look at the v3 patches. Here are my high-level thoughts: >>> >>> + /* >>> + * Parse data and transfer into line_buf. To get benefit from >>> inlining, >>> + * call CopyReadLineText() with the constant boolean variables. >>> + */ >>> + if (cstate->simd_continue) >>> + result =3D CopyReadLineText(cstate, is_csv, true); >>> + else >>> + result =3D CopyReadLineText(cstate, is_csv, false); >>> >>> I'm curious whether this actually generates different code, and if it >>> does, >>> if it's actually faster. We're already branching on >>> cstate->simd_continue >>> here. >> >> I've compiled both versions with -O2 and confirmed they generate >> different code. When simd_continue is passed as a constant to >> CopyReadLineText, the compiler optimizes out the condition checks from t= he >> SIMD path. >> A small benchmark on a 1GB+ file shows the expected benefit which is >> around 6% performance improvement. >> I've attached the assembly outputs in case someone wants to check >> something else. >> >> >> Regards, >> Ayoub Kazar >> > > Correction to my last post: > > I also tried files that alternated lines with no special characters and > lines with 1/3rd special characters, thinking I could force the algorithm > to continually check whether or not it should use simd and therefore forc= e > more overhead in the try-simd/don't-try-simd housekeeping code. The text > file was still 20% faster (not 50% faster as I originally stated --- that > was a typo). The CSV file was still 13% faster. > > Also, apologies for posting at the top in my last e-mail. > -- > -- Manni Wood EDB: https://www.enterprisedb.com > Hello, all. Andrew, I tried your suggestion of just reading the first chunk of the copy file to determine if SIMD is worth using. Attached are v4 versions of the patches showing a first attempt at doing that. I attached test.sh.txt to show how I've been testing, with 5 million lines of the various copy file variations introduced by Ayub Kazar. The text copy with no special chars is 30% faster. The CSV copy with no special chars is 48% faster. The text with 1/3rd escapes is 3% slower. The CSV with 1/3rd quotes is 0.27% slower. This set of patches follows the simplest suggestion of just testing the first N lines (actually first N bytes) of the file and then deciding whether or not to enable SIMD. This set of patches does not follow Andrew's later suggestion of maybe checking again every million lines or so. --=20 -- Manni Wood EDB: https://www.enterprisedb.com --0000000000006cd4de06453ea477 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Wed, Nov 26,= 2025 at 8:21=E2=80=AFAM Manni Wood <manni.wood@enterprisedb.com> wrote:

On Wed, Nov 26, 2025 at 5:51=E2=80=AFAM KAZAR Ayoub <ma_kazar@esi.dz> wrote:
Hello,
On Wed, Nov 19, 2025 at 10:01=E2=80=AFPM Nathan Bossart= <nathandb= ossart@gmail.com> wrote:
On Tue, Nov 18, 2025 at 05:20:05= PM +0300, Nazir Bilal Yavuz wrote:
> Thanks, done.

I took a look at the v3 patches.=C2=A0 Here are my high-level thoughts:

+=C2=A0 =C2=A0 /*
+=C2=A0 =C2=A0 =C2=A0* Parse data and transfer into line_buf. To get benefi= t from inlining,
+=C2=A0 =C2=A0 =C2=A0* call CopyReadLineText() with the constant boolean va= riables.
+=C2=A0 =C2=A0 =C2=A0*/
+=C2=A0 =C2=A0 if (cstate->simd_continue)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 result =3D CopyReadLineText(cstate, is_csv, tr= ue);
+=C2=A0 =C2=A0 else
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 result =3D CopyReadLineText(cstate, is_csv, fa= lse);

I'm curious whether this actually generates different code, and if it d= oes,
if it's actually faster.=C2=A0 We're already branching on cstate-&g= t;simd_continue
here.
I've compiled both versions = with -O2 and confirmed they generate different code. When=C2= =A0simd_continue is passed as a constant to CopyReadLineText, = the compiler optimizes out the condition checks from the=20 SIMD path.=C2=A0
A small benchmark on a 1GB+ file shows the expected ben= efit which is around 6%=20 performance improvement.
I've attached the assembly outputs=C2=A0in case someone wants to check something else.


Regards,
Ayoub Kaza= r

Correction to my last = post:

I also tried files that alternated lines wit= h no special characters and lines with 1/3rd special characters, thinking I= could force the algorithm to continually check whether or not it should us= e simd and therefore force more overhead in the try-simd/don't-try-simd= housekeeping code. The text file was still 20% faster (not 50% faster as I= originally stated --- that was a typo). The CSV file was still 13% faster.=

Also, apologies for posting at the top in my last= e-mail.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Hello, all.
=
Andrew, I tried your suggestion of just reading the first ch= unk of the copy file to determine if SIMD is worth using. Attached are v4 v= ersions of the patches showing a first attempt at doing that.
I attached test.sh.txt to show how I've been testing, with = 5 million lines of the various copy file variations introduced by Ayub Kaza= r.

The text copy with no special chars is 30% fast= er. The CSV copy with no special chars is 48% faster. The text with 1/3rd e= scapes is 3% slower. The CSV with 1/3rd quotes is 0.27% slower.
<= br>
This set of patches follows the simplest suggestion of just t= esting the first N lines (actually first N bytes) of the file and then deci= ding whether or not to enable SIMD. This set of patches does not follow And= rew's later suggestion of maybe checking again every million lines or s= o.
--
-- Manni Wood EDB: https://www.enterprisedb.com
--0000000000006cd4de06453ea477-- --0000000000006cd4e006453ea479 Content-Type: text/plain; charset="US-ASCII"; name="test.sh.txt" Content-Disposition: attachment; filename="test.sh.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitm9lkc0 IyEvYmluL2Jhc2gKCnNldCAtZQpzZXQgLW8gcGlwZWZhaWwKc2V0IC11CgpQRz0icHNxbCAtWCAt VSBwb3N0Z3JlcyAtaCBsb2NhbGhvc3QgLWQgcG9zdGdyZXMiCgplY2hvICIgPT09PT09PSBDcmVh dGUgdGFibGUgdCIKCiR7UEd9IDw8RU9GCkRST1AgVEFCTEUgSUYgRVhJU1RTIHQ7CkNSRUFURSBV TkxPR0dFRCBUQUJMRSB0IChpZCBJTlQgUFJJTUFSWSBLRVksIGZpbGxlciBURVhUKTsKRU9GCgoK ZWNobyAiID09PT09PT0gVGV4dCwgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzOyBjcmVhdGUgL3RtcC90 X25vbmUudHh0IgoKJHtQR30gPDxFT0YKdHJ1bmNhdGUgdDsKSU5TRVJUIElOVE8gdApTRUxFQ1Qg cywgcmVwZWF0KCdBJywgNDA5NikKRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMDAwMCkgQVMg czsKQ09QWSB0IFRPICcvdG1wL3Rfbm9uZS50eHQnIChGT1JNQVQgdGV4dCk7CkVPRgoKZWNobyAi ID09PT09PT0gVGV4dCwgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzOyBsb2FkIHRpbWVzIgoKJHtQR30g PDwnRU9GJwpcdGltaW5nCnRydW5jYXRlIHRhYmxlIHQ7Clxjb3B5IHQgZnJvbSAvdG1wL3Rfbm9u ZS50eHQKdHJ1bmNhdGUgdGFibGUgdDsKXGNvcHkgdCBmcm9tIC90bXAvdF9ub25lLnR4dAp0cnVu Y2F0ZSB0YWJsZSB0OwpcY29weSB0IGZyb20gL3RtcC90X25vbmUudHh0CnRydW5jYXRlIHRhYmxl IHQ7Clxjb3B5IHQgZnJvbSAvdG1wL3Rfbm9uZS50eHQKdHJ1bmNhdGUgdGFibGUgdDsKXGNvcHkg dCBmcm9tIC90bXAvdF9ub25lLnR4dApFT0YKCnJtIC90bXAvdF9ub25lLnR4dAoKCmVjaG8gIiA9 PT09PT09IENTViwgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzOyBjcmVhdGUgL3RtcC90X25vbmUuY3N2 IgoKJHtQR30gPDxFT0YKdHJ1bmNhdGUgdDsKSU5TRVJUIElOVE8gdApTRUxFQ1QgcywgcmVwZWF0 KCdBJywgNDA5NikKRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMDAwMCkgQVMgczsKQ09QWSB0 IFRPICcvdG1wL3Rfbm9uZS5jc3YnIChGT1JNQVQgY3N2LCBRVU9URSAnIicpOwpFT0YKCmVjaG8g IiA9PT09PT09IENTViwgbm8gc3BlY2lhbCBjaGFyYWN0ZXJzOyBsb2FkIHRpbWVzIgoKJHtQR30g PDwnRU9GJwpcdGltaW5nCnRydW5jYXRlIHRhYmxlIHQ7Clxjb3B5IHQgZnJvbSAvdG1wL3Rfbm9u ZS5jc3YgKGZvcm1hdCBjc3YpCnRydW5jYXRlIHRhYmxlIHQ7Clxjb3B5IHQgZnJvbSAvdG1wL3Rf bm9uZS5jc3YgKGZvcm1hdCBjc3YpCnRydW5jYXRlIHRhYmxlIHQ7Clxjb3B5IHQgZnJvbSAvdG1w L3Rfbm9uZS5jc3YgKGZvcm1hdCBjc3YpCnRydW5jYXRlIHRhYmxlIHQ7Clxjb3B5IHQgZnJvbSAv dG1wL3Rfbm9uZS5jc3YgKGZvcm1hdCBjc3YpCnRydW5jYXRlIHRhYmxlIHQ7Clxjb3B5IHQgZnJv bSAvdG1wL3Rfbm9uZS5jc3YgKGZvcm1hdCBjc3YpCkVPRgoKcm0gL3RtcC90X25vbmUuY3N2CgoK ZWNobyAiID09PT09PT0gVGV4dCwgd2l0aCAxLzMgZXNjYXBlczsgY3JlYXRlIC90bXAvdF9lc2Nh cGUudHh0IgoKJHtQR30gPDwnRU9GJwp0cnVuY2F0ZSB0OwpJTlNFUlQgSU5UTyB0ClNFTEVDVCBz LCByZXBlYXQoJ0FcQScsIDEzNjUpCkZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDAwMDApIEFT IHM7CkNPUFkgdCBUTyAnL3RtcC90X2VzY2FwZS50eHQnIChGT1JNQVQgdGV4dCk7CkVPRgoKZWNo byAiID09PT09PT0gVGV4dCwgd2l0aCAxLzMgZXNjYXBlczsgbG9hZCB0aW1lcyIKCiR7UEd9IDw8 J0VPRicKXHRpbWluZwp0cnVuY2F0ZSB0YWJsZSB0OwpcY29weSB0IGZyb20gL3RtcC90X2VzY2Fw ZS50eHQKdHJ1bmNhdGUgdGFibGUgdDsKXGNvcHkgdCBmcm9tIC90bXAvdF9lc2NhcGUudHh0CnRy dW5jYXRlIHRhYmxlIHQ7Clxjb3B5IHQgZnJvbSAvdG1wL3RfZXNjYXBlLnR4dAp0cnVuY2F0ZSB0 YWJsZSB0OwpcY29weSB0IGZyb20gL3RtcC90X2VzY2FwZS50eHQKdHJ1bmNhdGUgdGFibGUgdDsK XGNvcHkgdCBmcm9tIC90bXAvdF9lc2NhcGUudHh0CkVPRgoKcm0gL3RtcC90X2VzY2FwZS50eHQK CgplY2hvICIgPT09PT09PSBDU1YsIHdpdGggMS8zIHF1b3RlczsgY3JlYXRlIC90bXAvdF9xdW90 ZS5jc3YiCgoke1BHfSA8PEVPRgp0cnVuY2F0ZSB0OwpJTlNFUlQgSU5UTyB0ClNFTEVDVCBzLCBy ZXBlYXQoJ0EiQScsIDEzNjUpCkZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDAwMDApIEFTIHM7 CkNPUFkgdCBUTyAnL3RtcC90X3F1b3RlLmNzdicgKEZPUk1BVCBjc3YsIFFVT1RFICciJyk7CkVP RgoKZWNobyAiID09PT09PT0gQ1NWLCB3aXRoIDEvMyBxdW90ZXM7IGxvYWQgdGltZXMiCgoke1BH fSA8PCdFT0YnClx0aW1pbmcKdHJ1bmNhdGUgdGFibGUgdDsKXGNvcHkgdCBmcm9tIC90bXAvdF9x dW90ZS5jc3YgKGZvcm1hdCBjc3YpCnRydW5jYXRlIHRhYmxlIHQ7Clxjb3B5IHQgZnJvbSAvdG1w L3RfcXVvdGUuY3N2IChmb3JtYXQgY3N2KQp0cnVuY2F0ZSB0YWJsZSB0OwpcY29weSB0IGZyb20g L3RtcC90X3F1b3RlLmNzdiAoZm9ybWF0IGNzdikKdHJ1bmNhdGUgdGFibGUgdDsKXGNvcHkgdCBm cm9tIC90bXAvdF9xdW90ZS5jc3YgKGZvcm1hdCBjc3YpCnRydW5jYXRlIHRhYmxlIHQ7Clxjb3B5 IHQgZnJvbSAvdG1wL3RfcXVvdGUuY3N2IChmb3JtYXQgY3N2KQpFT0YKCnJtIC90bXAvdF9xdW90 ZS5jc3YKCmVjaG8gIiA9PT09PT09IERyb3AgdGFibGUgdCIKCiR7UEd9IDw8RU9GCkRST1AgVEFC TEUgSUYgRVhJU1RTIHQ7CkVPRgoK --0000000000006cd4e006453ea479 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Disposition: attachment; filename="v4-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitm9lky2 RnJvbSAzOGI1ODdkZGE0NGNiNzE2MGVlNzM0Y2RlYTU1YTU3M2YzMDJjM2E5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYW5uaSBXb29kIDxtYW5uaS53b29kQGVudGVycHJpc2VkYi5j b20+CkRhdGU6IEZyaSwgNSBEZWMgMjAyNSAxODozMzo0NiAtMDYwMApTdWJqZWN0OiBbUEFUQ0gg djQgMi8yXSBTcGVlZCB1cCBDT1BZIEZST00gdGV4dC9DU1YgcGFyc2luZyB1c2luZyBTSU1ECgpB dXRob3JzOiBTaGlueWEgS2F0byA8c2hpbnlhMTEua2F0b0BnbWFpbC5jb20+LApOYXppciBCaWxh bCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29tPiwKQXlvdWIgS2F6YXIgPG1hX2themFyQGVzaS5k ej4KUmV2aWV3ZXJzOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KRGVzY3Vz c2lvbjoKaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBT3pFdXJT VzhjTnI2VFBLc2pyc3RuUGZoZjRReVFxQjR0blBYR0dlOE40ZV92N0ppZ0BtYWlsLmdtYWlsLmNv bQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgICAgICAgICAgfCAgMyArKysK IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyAgICAgfCAyOSArKysrKysrKysr KysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgg fCAxMSArKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IDEyNzgxOTYzYjRmLi5lNjM4NjIz ZTViNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCkBAIC0xNzIwLDYgKzE3MjAsOSBAQCBCZWdp bkNvcHlGcm9tKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAljc3RhdGUtPmN1cl9hdHRuYW1lID0gTlVM TDsKIAljc3RhdGUtPmN1cl9hdHR2YWwgPSBOVUxMOwogCWNzdGF0ZS0+cmVsbmFtZV9vbmx5ID0g ZmFsc2U7CisJY3N0YXRlLT5zcGVjaWFsX2NoYXJzX2VuY291bnRlcmVkID0gMDsKKwljc3RhdGUt PmNoZWNrZWRfc2ltZCA9IGZhbHNlOworCWNzdGF0ZS0+dXNlX3NpbWQgPSBmYWxzZTsKCiAJLyoK IAkgKiBBbGxvY2F0ZSBidWZmZXJzIGZvciB0aGUgaW5wdXQgcGlwZWxpbmUuCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggMWVkYjUyNWYwNzIuLjhjZmRmY2Q0Y2Q4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC0xMzQ2LDYgKzEzNDYsMjggQEAgQ29w eVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YpCgogI2lmbmRl ZiBVU0VfTk9fU0lNRAoKKwkJLyoKKwkJICogV2FpdCB1bnRpbCB3ZSBoYXZlIHJlYWQgbW9yZSB0 aGFuIEJZVEVTX1BST0NFU1NFRF9VTlRJTF9TSU1EX0NIRUNLLgorCQkgKiBjc3RhdGUtPmJ5dGVz X3Byb2Nlc3NlZCB3aWxsIGdyb3cgYW4gdW5wcmVkaWN0YWJsZSBhbW91bnQgd2l0aCBlYWNoCisJ CSAqIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiwgc28ganVzdCB3YWl0IHVudGlsIHdlIGhhdmUgY3Jv c3NlZCB0aGUKKwkJICogdGhyZXNob2xkLgorCQkgKi8KKwkJaWYgKCFjc3RhdGUtPmNoZWNrZWRf c2ltZCAmJiBjc3RhdGUtPmJ5dGVzX3Byb2Nlc3NlZCA+IEJZVEVTX1BST0NFU1NFRF9VTlRJTF9T SU1EX0NIRUNLKQorCQl7CisJCQljc3RhdGUtPmNoZWNrZWRfc2ltZCA9IHRydWU7CisKKwkJCS8q CisJCQkgKiBJZiB3ZSBoYXZlIG5vdCByZWFkIHRvbyBtYW55IHNwZWNpYWwgY2hhcmFjdGVycwor CQkJICogKFNQRUNJQUxfQ0hBUl9TSU1EX1RIUkVTSE9MRCkgdGhlbiBzdGFydCB1c2luZyBTSU1E IHRvIHNwZWVkIHVwCisJCQkgKiBwcm9jZXNzaW5nLiBUaGlzIGhldXJpc3RpYyBhc3N1bWVzIHRo YXQgaW5wdXQgZG9lcyBub3QgdmFyeSB0b28KKwkJCSAqIG11Y2ggZnJvbSBsaW5lIHRvIGxpbmUg YW5kIHRoYXQgbnVtYmVyIG9mIHNwZWNpYWwgY2hhcmFjdGVycworCQkJICogZW5jb3VudGVyZWQg aW4gdGhlIGZpcnN0IEJZVEVTX1BST0NFU1NFRF9VTlRJTF9TSU1EX0NIRUNLIGFyZQorCQkJICog aW5kaWNpdGl2ZSBvZiB0aGUgd2hvbGUgZmlsZS4KKwkJCSAqLworCQkJaWYgKGNzdGF0ZS0+c3Bl Y2lhbF9jaGFyc19lbmNvdW50ZXJlZCA8IFNQRUNJQUxfQ0hBUl9TSU1EX1RIUkVTSE9MRCkKKwkJ CQljc3RhdGUtPnVzZV9zaW1kID0gdHJ1ZTsKKwkJfQorCiAJCS8qCiAJCSAqIFVzZSBTSU1EIGlu c3RydWN0aW9ucyB0byBlZmZpY2llbnRseSBzY2FuIHRoZSBpbnB1dCBidWZmZXIgZm9yCiAJCSAq IHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgbmV3bGluZSwgY2FycmlhZ2UgcmV0dXJuLCBxdW90 ZSwgYW5kCkBAIC0xMzU4LDcgKzEzODAsNyBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3Rh dGUgY3N0YXRlLCBib29sIGlzX2NzdikKIAkJICogc2VxdWVudGlhbGx5LiAtIFRoZSByZW1haW5p bmcgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiBvbmUgdmVjdG9yCiAJCSAqIHdpZHRoIChzaXplb2Yo VmVjdG9yOCkpOyBTSU1EIG9wZXJhdGVzIG9uIGZpeGVkLXNpemUgY2h1bmtzLgogCQkgKi8KLQkJ aWYgKCFsYXN0X3dhc19lc2MgJiYgY29weV9idWZfbGVuIC0gaW5wdXRfYnVmX3B0ciA+PSBzaXpl b2YoVmVjdG9yOCkpCisJCWlmIChjc3RhdGUtPnVzZV9zaW1kICYmICFsYXN0X3dhc19lc2MgJiYg Y29weV9idWZfbGVuIC0gaW5wdXRfYnVmX3B0ciA+PSBzaXplb2YoVmVjdG9yOCkpCiAJCXsKIAkJ CVZlY3RvcjgJCWNodW5rOwogCQkJVmVjdG9yOAkJbWF0Y2ggPSB2ZWN0b3I4X2Jyb2FkY2FzdCgw KTsKQEAgLTE0MTUsNiArMTQzNyw3IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBj c3RhdGUsIGJvb2wgaXNfY3N2KQogCQkJICovCiAJCQlpZiAoYyA9PSAnXHInKQogCQkJeworCQkJ CWNzdGF0ZS0+c3BlY2lhbF9jaGFyc19lbmNvdW50ZXJlZCsrOwogCQkJCUlGX05FRURfUkVGSUxM X0FORF9OT1RfRU9GX0NPTlRJTlVFKDApOwogCQkJfQoKQEAgLTE0NDYsNiArMTQ2OSw3IEBAIENv cHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCQkvKiBQ cm9jZXNzIFxyICovCiAJCWlmIChjID09ICdccicgJiYgKCFpc19jc3YgfHwgIWluX3F1b3RlKSkK IAkJeworCQkJY3N0YXRlLT5zcGVjaWFsX2NoYXJzX2VuY291bnRlcmVkKys7CiAJCQkvKiBDaGVj ayBmb3IgXHJcbiBvbiBmaXJzdCBsaW5lLCBfYW5kXyBoYW5kbGUgXHJcbi4gKi8KIAkJCWlmIChj c3RhdGUtPmVvbF90eXBlID09IEVPTF9VTktOT1dOIHx8CiAJCQkJY3N0YXRlLT5lb2xfdHlwZSA9 PSBFT0xfQ1JOTCkKQEAgLTE1MDIsNiArMTUyNiw3IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZy b21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCQkvKiBQcm9jZXNzIFxuICovCiAJCWlmIChj ID09ICdcbicgJiYgKCFpc19jc3YgfHwgIWluX3F1b3RlKSkKIAkJeworCQkJY3N0YXRlLT5zcGVj aWFsX2NoYXJzX2VuY291bnRlcmVkKys7CiAJCQlpZiAoY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xf Q1IgfHwgY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfQ1JOTCkKIAkJCQllcmVwb3J0KEVSUk9SLAog CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9GSUxFX0ZPUk1BVCksCkBAIC0xNTI0LDYg KzE1NDksOCBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlz X2NzdikKIAkJewogCQkJY2hhcgkJYzI7CgorCQkJY3N0YXRlLT5zcGVjaWFsX2NoYXJzX2VuY291 bnRlcmVkKys7CisKIAkJCUlGX05FRURfUkVGSUxMX0FORF9OT1RfRU9GX0NPTlRJTlVFKDApOwog CQkJSUZfTkVFRF9SRUZJTExfQU5EX0VPRl9CUkVBSygwKTsKCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv Y29weWZyb21faW50ZXJuYWwuaAppbmRleCBjOGIyMmFmMjJkOC4uMjE1MjE1ZjkwOWYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaApAQCAtMTgxLDYgKzE4MSwxNyBA QCB0eXBlZGVmIHN0cnVjdCBDb3B5RnJvbVN0YXRlRGF0YQogI2RlZmluZSBSQVdfQlVGX0JZVEVT KGNzdGF0ZSkgKChjc3RhdGUpLT5yYXdfYnVmX2xlbiAtIChjc3RhdGUpLT5yYXdfYnVmX2luZGV4 KQoKIAl1aW50NjQJCWJ5dGVzX3Byb2Nlc3NlZDsJLyogbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3Nl ZCBzbyBmYXIgKi8KKworCS8qIHRoZSBhbW91bnQgb2YgYnl0ZXMgdG8gcmVhZCB1bnRpbCBjaGVj a2luZyBpZiB3ZSBzaG91bGQgdHJ5IHNpbWQgKi8KKyNkZWZpbmUgQllURVNfUFJPQ0VTU0VEX1VO VElMX1NJTURfQ0hFQ0sgMTAwMDAwCisJLyogdGhlIG51bWJlciBvZiBzcGVjaWFsIGNoYXJzIHJl YWQgYmVsb3cgd2hpY2ggd2UgdXNlIHNpbWQgKi8KKyNkZWZpbmUgU1BFQ0lBTF9DSEFSX1NJTURf VEhSRVNIT0xEIDIwMDAwCisJdWludDY0CQlzcGVjaWFsX2NoYXJzX2VuY291bnRlcmVkOwkvKiBu dW1iZXIgb2Ygc3BlY2lhbCBjaGFycworCQkJCQkJCQkJCQkgKiBlbmNvdW50ZXJlZCBzbyBmYXIg Ki8KKwlib29sCQljaGVja2VkX3NpbWQ7CS8qIHdlIHJlYWQgQllURVNfUFJPQ0VTU0VEX1VOVElM X1NJTURfQ0hFQ0sKKwkJCQkJCQkJICogYW5kIGNoZWNrZWQgaWYgd2Ugc2hvdWxkIHVzZSBTSU1E IG9uIHRoZQorCQkJCQkJCQkgKiByZXN0IG9mIHRoZSBmaWxlICovCisJYm9vbAkJdXNlX3NpbWQ7 CQkvKiB1c2Ugc2ltZCB0byBzcGVlZCB1cCBjb3B5aW5nICovCiB9IENvcHlGcm9tU3RhdGVEYXRh OwoKIGV4dGVybiB2b2lkIFJlY2VpdmVDb3B5QmVnaW4oQ29weUZyb21TdGF0ZSBjc3RhdGUpOwot LQoyLjUyLjAKCg== --0000000000006cd4e006453ea479 Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Disposition: attachment; filename="v4-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitm9lkp1 RnJvbSAwYjFmNzg2YmY1OGMzZDkwZTA3OGQ0YWZhODNiN2Q0M2RkYTA4NDkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYW5uaSBXb29kIDxtYW5uaS53b29kQGVudGVycHJpc2VkYi5j b20+CkRhdGU6IEZyaSwgNSBEZWMgMjAyNSAxODozMDowMCAtMDYwMApTdWJqZWN0OiBbUEFUQ0gg djQgMS8yXSBTcGVlZCB1cCBDT1BZIEZST00gdGV4dC9DU1YgcGFyc2luZyB1c2luZyBTSU1ECgpB dXRob3JzOiBTaGlueWEgS2F0byA8c2hpbnlhMTEua2F0b0BnbWFpbC5jb20+LApOYXppciBCaWxh bCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29tPiwKQXlvdWIgS2F6YXIgPG1hX2themFyQGVzaS5k ej4KUmV2aWV3ZXJzOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5lLm5ldD4KRGVzY3Vz c2lvbjoKaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBT3pFdXJT VzhjTnI2VFBLc2pyc3RuUGZoZjRReVFxQjR0blBYR0dlOE40ZV92N0ppZ0BtYWlsLmdtYWlsLmNv bQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYyB8IDczICsrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA3MyBpbnNlcnRpb25zKCspCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCmluZGV4IGEwOWU3ZmJhY2UzLi4xZWRiNTI1 ZjA3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYwpAQCAtNzEsNyArNzEsOSBA QAogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgogI2luY2x1ZGUg InBvcnQvcGdfYnN3YXAuaCIKKyNpbmNsdWRlICJwb3J0L3NpbWQuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCkBAIC0xMjU1LDYgKzEyNTcs MTQgQEAgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3Yp CiAJY2hhcgkJcXVvdGVjID0gJ1wwJzsKIAljaGFyCQllc2NhcGVjID0gJ1wwJzsKIAorI2lmbmRl ZiBVU0VfTk9fU0lNRAorCVZlY3RvcjgJCW5sID0gdmVjdG9yOF9icm9hZGNhc3QoJ1xuJyk7CisJ VmVjdG9yOAkJY3IgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgnXHInKTsKKwlWZWN0b3I4CQlicyA9IHZl Y3RvcjhfYnJvYWRjYXN0KCdcXCcpOworCVZlY3RvcjgJCXF1b3RlID0gdmVjdG9yOF9icm9hZGNh c3QoMCk7CisJVmVjdG9yOAkJZXNjYXBlID0gdmVjdG9yOF9icm9hZGNhc3QoMCk7CisjZW5kaWYK KwogCWlmIChpc19jc3YpCiAJewogCQlxdW90ZWMgPSBjc3RhdGUtPm9wdHMucXVvdGVbMF07CkBA IC0xMjYyLDYgKzEyNzIsMTIgQEAgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0 ZSwgYm9vbCBpc19jc3YpCiAJCS8qIGlnbm9yZSBzcGVjaWFsIGVzY2FwZSBwcm9jZXNzaW5nIGlm IGl0J3MgdGhlIHNhbWUgYXMgcXVvdGVjICovCiAJCWlmIChxdW90ZWMgPT0gZXNjYXBlYykKIAkJ CWVzY2FwZWMgPSAnXDAnOworCisjaWZuZGVmIFVTRV9OT19TSU1ECisJCXF1b3RlID0gdmVjdG9y OF9icm9hZGNhc3QocXVvdGVjKTsKKwkJaWYgKHF1b3RlYyAhPSBlc2NhcGVjKQorCQkJZXNjYXBl ID0gdmVjdG9yOF9icm9hZGNhc3QoZXNjYXBlYyk7CisjZW5kaWYKIAl9CiAKIAkvKgpAQCAtMTMy OCw2ICsxMzQ0LDYzIEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJv b2wgaXNfY3N2KQogCQkJbmVlZF9kYXRhID0gZmFsc2U7CiAJCX0KIAorI2lmbmRlZiBVU0VfTk9f U0lNRAorCisJCS8qCisJCSAqIFVzZSBTSU1EIGluc3RydWN0aW9ucyB0byBlZmZpY2llbnRseSBz Y2FuIHRoZSBpbnB1dCBidWZmZXIgZm9yCisJCSAqIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwg bmV3bGluZSwgY2FycmlhZ2UgcmV0dXJuLCBxdW90ZSwgYW5kCisJCSAqIGVzY2FwZSkuIFRoaXMg aXMgZmFzdGVyIHRoYW4gYnl0ZS1ieS1ieXRlIGl0ZXJhdGlvbiwgZXNwZWNpYWxseSBvbgorCQkg KiBsYXJnZSBidWZmZXJzLgorCQkgKgorCQkgKiBXZSBkbyBub3QgYXBwbHkgdGhlIFNJTUQgZmFz dCBwYXRoIGluIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nCisJCSAqIGNhc2VzOiAtIFdoZW4gdGhl IHByZXZpb3VzbHkgcHJvY2Vzc2VkIGNoYXJhY3RlciB3YXMgYW4gZXNjYXBlCisJCSAqIGNoYXJh Y3RlciAobGFzdF93YXNfZXNjKSwgc2luY2UgdGhlIG5leHQgYnl0ZSBtdXN0IGJlIGV4YW1pbmVk CisJCSAqIHNlcXVlbnRpYWxseS4gLSBUaGUgcmVtYWluaW5nIGJ1ZmZlciBpcyBzbWFsbGVyIHRo YW4gb25lIHZlY3RvcgorCQkgKiB3aWR0aCAoc2l6ZW9mKFZlY3RvcjgpKTsgU0lNRCBvcGVyYXRl cyBvbiBmaXhlZC1zaXplIGNodW5rcy4KKwkJICovCisJCWlmICghbGFzdF93YXNfZXNjICYmIGNv cHlfYnVmX2xlbiAtIGlucHV0X2J1Zl9wdHIgPj0gc2l6ZW9mKFZlY3RvcjgpKQorCQl7CisJCQlW ZWN0b3I4CQljaHVuazsKKwkJCVZlY3RvcjgJCW1hdGNoID0gdmVjdG9yOF9icm9hZGNhc3QoMCk7 CisJCQl1aW50MzIJCW1hc2s7CisKKwkJCS8qIExvYWQgYSBjaHVuayBvZiBkYXRhIGludG8gYSB2 ZWN0b3IgcmVnaXN0ZXIgKi8KKwkJCXZlY3RvcjhfbG9hZCgmY2h1bmssIChjb25zdCB1aW50OCAq KSAmY29weV9pbnB1dF9idWZbaW5wdXRfYnVmX3B0cl0pOworCisJCQkvKiBcbiBhbmQgXHIgYXJl IG5vdCBzcGVjaWFsIGluc2lkZSBxdW90ZXMgKi8KKwkJCWlmICghaW5fcXVvdGUpCisJCQkJbWF0 Y2ggPSB2ZWN0b3I4X29yKHZlY3RvcjhfZXEoY2h1bmssIG5sKSwgdmVjdG9yOF9lcShjaHVuaywg Y3IpKTsKKworCQkJaWYgKGlzX2NzdikKKwkJCXsKKwkJCQltYXRjaCA9IHZlY3Rvcjhfb3IobWF0 Y2gsIHZlY3RvcjhfZXEoY2h1bmssIHF1b3RlKSk7CisJCQkJaWYgKGVzY2FwZWMgIT0gJ1wwJykK KwkJCQkJbWF0Y2ggPSB2ZWN0b3I4X29yKG1hdGNoLCB2ZWN0b3I4X2VxKGNodW5rLCBlc2NhcGUp KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQltYXRjaCA9IHZlY3Rvcjhfb3IobWF0Y2gsIHZlY3Rvcjhf ZXEoY2h1bmssIGJzKSk7CisKKwkJCS8qIENoZWNrIGlmIHdlIGZvdW5kIGFueSBzcGVjaWFsIGNo YXJhY3RlcnMgKi8KKwkJCW1hc2sgPSB2ZWN0b3I4X2hpZ2hiaXRfbWFzayhtYXRjaCk7CisJCQlp ZiAobWFzayAhPSAwKQorCQkJeworCQkJCS8qCisJCQkJICogRm91bmQgYSBzcGVjaWFsIGNoYXJh Y3Rlci4gQWR2YW5jZSB1cCB0byB0aGF0IHBvaW50IGFuZCBsZXQKKwkJCQkgKiB0aGUgc2NhbGFy IGNvZGUgaGFuZGxlIGl0LgorCQkJCSAqLworCQkJCWludAkJCWFkdmFuY2UgPSBwZ19yaWdodG1v c3Rfb25lX3BvczMyKG1hc2spOworCisJCQkJaW5wdXRfYnVmX3B0ciArPSBhZHZhbmNlOworCQkJ fQorCQkJZWxzZQorCQkJeworCQkJCS8qIE5vIHNwZWNpYWwgY2hhcmFjdGVycyBmb3VuZCwgc28g c2tpcCB0aGUgZW50aXJlIGNodW5rICovCisJCQkJaW5wdXRfYnVmX3B0ciArPSBzaXplb2YoVmVj dG9yOCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKyNlbmRpZgorCiAJCS8qIE9LIHRvIGZl dGNoIGEgY2hhcmFjdGVyICovCiAJCXByZXZfcmF3X3B0ciA9IGlucHV0X2J1Zl9wdHI7CiAJCWMg PSBjb3B5X2lucHV0X2J1ZltpbnB1dF9idWZfcHRyKytdOwotLSAKMi41Mi4wCgo= --0000000000006cd4e006453ea479--