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 1vuRy1-005lKp-38 for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 09:11:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vuRy0-00CUTl-1V for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 09:11:00 +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.96) (envelope-from ) id 1vuRxz-00CUTd-3A for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 09:11:00 +0000 Received: from mail-dy1-x1329.google.com ([2607:f8b0:4864:20::1329]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vuRxw-00000000m0Y-37cJ for pgsql-hackers@postgresql.org; Mon, 23 Feb 2026 09:10:59 +0000 Received: by mail-dy1-x1329.google.com with SMTP id 5a478bee46e88-2b82c605dbdso3038663eec.0 for ; Mon, 23 Feb 2026 01:10:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771837857; cv=none; d=google.com; s=arc-20240605; b=fsCZ4uBHwddY5uoH4qDO1yt4+8BLWyYte47YNe9hZAVLC1lof2Nf9K0AsaCRBK0HCu N9nUjDc1qvVw06eP9Osj1p3yemcz5goSqmHRDhtZzdzHxrJg6ZXwlm616D/m5fdjgfhD llCEhcI/5SC42ffVa7A7g9wy6vOC07iIm3aRT9W/EcDIFG/fEYU35jlW1Op3NsZH1T3J rLabDO3jt/N6R4/RsaXrm3qFrz2cYknZ8Yxc9FcFei69tMmhMmLP+c1R1yW8Qp/LxeX7 RTV9wdO9deGx/+x2FFxGRQEnvCI0BJjIdXyxVEft9smV7LomRcu+6w/N161s+dbPed8r VSGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=uBDikRJC1Efgp2OtP4qlzfA3PAPkW5Wwc+CeVqdyL70=; fh=2fEczcurQwka00JFZQcMVIaogaTd5JW+XzEIdItiqiI=; b=ZO3KlaVoSIQbX/LTakO9T956cujRvLVLnsOyYtlNo+D3RBzO77eNJicr2mEESm9gSh KOpDXmHqT2Won3+iSmNFytY4FImXL/UD1oMfofRWEYZKtV0dBXbPfun3+DTYSTzhd4np iPCD/8im+EI9NEnmhZsNt3FNISNl1LapfkdzMZiImCTRmnO1vjoX+i+spIja9vl5dKMX hspZvnV3xtrL+I98rOnCJBMG9nssImLYeX5jYUDCu8kGcboJ6cvK7+R8VZOdUGcfr06X 6Ii3vJ2wv0cR6hNehzy9KxIw62yF6RLpPqHqfisRjyh21kuxdOok5lHCLtognYAzDTbw 7UPg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771837857; x=1772442657; 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=uBDikRJC1Efgp2OtP4qlzfA3PAPkW5Wwc+CeVqdyL70=; b=IMnXsqhB31rlueZhpqDj0kS/2cz0uU9qSmuElnCnOtfTZiKeyYaJGQuvOHqbvXVWft OP/FmrXOPK5ZE7PbFctKx/CVjT9Caexo8qaypJUbfXxBtnyqe8mdwoiKO4PLoHxotfqV Xy7KuWMIcF/07ViJLy9IgKPwFlIu54z+UHLbcXzbILv4JPBL1UpmLDMyvlyfdRhs6SLD or1J1F2+VLUWlwk1t1lgnzw589bWcA3kDxPhI014ycjtmMO+bLtuCPuYkJ8xw8TbMIDU Tk0/gdP7wRv0dIroqQ/SRL8qdJvcCQt2bumq0YaTde42HaKuB12jBbSmAWCbpVt8IcFL Kh0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771837857; x=1772442657; 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=uBDikRJC1Efgp2OtP4qlzfA3PAPkW5Wwc+CeVqdyL70=; b=pvpEv2ucgFrpsTME9MDkktpGIZrukBVTn0GY2QMtJDd6nJARgiuIkb4K0y0NsaeVR3 QPSGlFQIOJp31zwncinvEzVE1iZYLqWSlh+UILOva3kgJvjDk38PVl+zyysuMHqmLTql h4RLMztSrrWS6D6GJx8oOgl79TaOHXxVDg8HdZ0DorN4KH/3e7Uz/7Dnfqsa7Co3q+Pa D61SsSOyJOhIiJvpJZFyU1CybafuOGKxxos3o+ONNNPTa1rmEvrbT42EVYqSzlcPvhg5 9pFKly+B9hAqnlnDbdH0xuuI4Hx8QhqVuEZcCfiOgRt66WYxyUnyvxnMtNy1iNCViFhv WZPQ== X-Forwarded-Encrypted: i=1; AJvYcCVgeaRx93Hn/WoDg6JuCzHZ0B1Nl8aCiVRaGn5bQSp5pLvruHDl1RtF2KiA2HRtC4ufemN6qfsWGCQc8hdt@postgresql.org X-Gm-Message-State: AOJu0YxYmk5v0IKPDuHPgybHF/IdGiHjGoMfiJezlgx2BYSOm48TwjUv 67rPaCH7ye3iYEp9mq9kdLtYNM0qKAOu3FfiUmkOOJ8NR/22Wn9qsgewzY06NG5256ObceM7wr9 di59eMgXk0FCTIqiFgXBq+6CqMWB6mCg= X-Gm-Gg: ATEYQzxgw8letk4OTrfCFz8uHRN//liMfE2kaRqR3T89e4K/8pVuxC+jzwYO41k9s6M Pmw2EC27mbet4aW9P/PNZtoyZFggRve3c6NNdhJTUEOtspXkpPw48VPm9A2xxDLY6+z84TDt0SH 9BFR2OxcVcG11ThwzZqL4gEnhiRJza9g/+ZN9zC8vIH6BAGk/QAXhTRwfUnfLCj6x4gk22qjagy Z3z1TiCOiXBSJAeVdDWP7XUKYC6vSuQQOTzg7g/n5+uOkNrrQIjhRM0E4xD/wMhZlY73DDh0EY9 ii4GP88= X-Received: by 2002:a05:7300:4313:b0:2b8:4a90:651c with SMTP id 5a478bee46e88-2bd7bd32f6fmr3607045eec.31.1771837856907; Mon, 23 Feb 2026 01:10:56 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Nazir Bilal Yavuz Date: Mon, 23 Feb 2026 12:10:44 +0300 X-Gm-Features: AaiRm52Bm57XPTr3gP33477J2gDzHxULfK_BqaS8Cp_E1QZEsTneiidXz4QkdMM Message-ID: Subject: Re: Speed up COPY FROM text/CSV parsing using SIMD To: Nathan Bossart Cc: Manni Wood , KAZAR Ayoub , Neil Conway , Andrew Dunstan , Shinya Kato , PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000000ff51f064b7a261d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000ff51f064b7a261d Content-Type: text/plain; charset="UTF-8" Hi, On Fri, 20 Feb 2026 at 21:15, Nathan Bossart wrote: > > Yeah, the couple of small regressions seem close to (or below) the noise > level, and IIUC yours were the only benchmarks that showed them, anyway. > Plus, I think we'll need this change regardless as a prerequisite for the > SIMD work. > > > Thank you both for the benchmarks. Results look good to me! > > Committed that part. Thank you! Attaching the SIMD patch only. -- Regards, Nazir Bilal Yavuz Microsoft --0000000000000ff51f064b7a261d Content-Type: text/x-patch; charset="US-ASCII"; name="v10-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Disposition: attachment; filename="v10-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlyyfcb70 RnJvbSA5ZWY0ZTEzNzY2NTdiNTc3Y2Q0YjRjNDJmYjZhNTkyZWJkNWZhZTI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXppciBCaWxhbCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29t PgpEYXRlOiBGcmksIDEzIEZlYiAyMDI2IDEzOjI4OjU1ICswMzAwClN1YmplY3Q6IFtQQVRDSCB2 MTBdIFNwZWVkIHVwIENPUFkgRlJPTSB0ZXh0L0NTViBwYXJzaW5nIHVzaW5nIFNJTUQKClRoaXMg cGF0Y2ggZGlzYWJsZXMgU0lNRCB3aGVuIFNJTUQgZW5jb3VudGVycyBhIHNwZWNpYWwgY2hhcmFj dGVyIHdoaWNoCmlzIG5laXRoZXIgRU9GIG5vciBFT0wuCgpBdXRob3I6IFNoaW55YSBLYXRvIDxz aGlueWExMS5rYXRvQGdtYWlsLmNvbT4KQXV0aG9yOiBOYXppciBCaWxhbCBZYXZ1eiA8YnlhdnV6 ODFAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogS2F6YXIgQXlvdWIgPG1hX2themFyQGVzaS5kej4K UmV2aWV3ZWQtYnk6IE5hdGhhbiBCb3NzYXJ0IDxuYXRoYW5kYm9zc2FydEBnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBOZWlsIENvbndheSA8bmVpbC5jb253YXlAZ21haWwuY29tPgpSZXZpZXdlZC1i eTogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+ClJldmlld2VkLWJ5OiBNYW5u aSBXb29kIDxtYW5uaS53b29kQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBNYXJrIFdv bmcgPG1hcmt3a21AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NB T3pFdXJTVzhjTnI2VFBLc2pyc3RuUGZoZjRReVFxQjR0blBYR0dlOE40ZV92N0ppZyU0MG1haWwu Z21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAgICAgICB8 ICAgMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgICAgIHwgMTM1ICsr KysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRl cm5hbC5oIHwgICAzICsKIDMgZmlsZXMgY2hhbmdlZCwgMTM3IGluc2VydGlvbnMoKyksIDQgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKaW5kZXggMmI3NTU2YjI4N2MuLjNkZDE1 OWYxNWIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTE3MTcsNiArMTcxNyw5IEBAIEJl Z2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCWNzdGF0ZS0+Y3VyX2F0dHZhbCA9IE5V TEw7CiAJY3N0YXRlLT5yZWxuYW1lX29ubHkgPSBmYWxzZTsKIAorCS8qIEluaXRpYWxpemUgU0lN RCAqLworCWNzdGF0ZS0+c2ltZF9lbmFibGVkID0gdHJ1ZTsKKwogCS8qCiAJICogQWxsb2NhdGUg YnVmZmVycyBmb3IgdGhlIGlucHV0IHBpcGVsaW5lLgogCSAqCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 ZnJvbXBhcnNlLmMKaW5kZXggNmIwMGQ0OWM1MGYuLjdiZGY1NjgxNjI4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19ic3dhcC5oIgor I2luY2x1ZGUgInBvcnQvc2ltZC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5j bHVkZSAidXRpbHMvcmVsLmgiCiAKQEAgLTE0Miw3ICsxNDMsOCBAQCBzdGF0aWMgY29uc3QgY2hh ciBCaW5hcnlTaWduYXR1cmVbMTFdID0gIlBHQ09QWVxuXDM3N1xyXG5cMCI7CiAvKiBub24tZXhw b3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBib29sIENvcHlSZWFkTGluZShDb3B5 RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YpOwogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdh eXNfaW5saW5lIGJvb2wgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNzdGF0ZSwKLQkJ CQkJCQkJCQkJCQkJYm9vbCBpc19jc3YpOworCQkJCQkJCQkJCQkJCQlib29sIGlzX2NzdiwKKwkJ CQkJCQkJCQkJCQkJYm9vbCBzaW1kX2VuYWJsZWQpOwogc3RhdGljIGludAlDb3B5UmVhZEF0dHJp YnV0ZXNUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlKTsKIHN0YXRpYyBpbnQJQ29weVJlYWRBdHRy aWJ1dGVzQ1NWKENvcHlGcm9tU3RhdGUgY3N0YXRlKTsKIHN0YXRpYyBEYXR1bSBDb3B5UmVhZEJp bmFyeUF0dHJpYnV0ZShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRm1nckluZm8gKmZsaW5mbywKQEAg LTExODIsOSArMTE4NCwxOSBAQCBDb3B5UmVhZExpbmUoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJv b2wgaXNfY3N2KQogCSAqIHNwZWNpYWxpemVkIGNvZGUgd2l0aCBmZXdlciBicmFuY2hlcy4KIAkg Ki8KIAlpZiAoaXNfY3N2KQotCQlyZXN1bHQgPSBDb3B5UmVhZExpbmVUZXh0KGNzdGF0ZSwgdHJ1 ZSk7CisJeworCQlpZiAoY3N0YXRlLT5zaW1kX2VuYWJsZWQpCisJCQlyZXN1bHQgPSBDb3B5UmVh ZExpbmVUZXh0KGNzdGF0ZSwgdHJ1ZSwgdHJ1ZSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9IENvcHlS ZWFkTGluZVRleHQoY3N0YXRlLCB0cnVlLCBmYWxzZSk7CisJfQogCWVsc2UKLQkJcmVzdWx0ID0g Q29weVJlYWRMaW5lVGV4dChjc3RhdGUsIGZhbHNlKTsKKwl7CisJCWlmIChjc3RhdGUtPnNpbWRf ZW5hYmxlZCkKKwkJCXJlc3VsdCA9IENvcHlSZWFkTGluZVRleHQoY3N0YXRlLCBmYWxzZSwgdHJ1 ZSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9IENvcHlSZWFkTGluZVRleHQoY3N0YXRlLCBmYWxzZSwg ZmFsc2UpOworCX0KIAogCWlmIChyZXN1bHQpCiAJewpAQCAtMTI1Miw3ICsxMjY0LDcgQEAgQ29w eVJlYWRMaW5lKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKICAqIENvcHlSZWFk TGluZVRleHQgLSBpbm5lciBsb29wIG9mIENvcHlSZWFkTGluZSBmb3IgdGV4dCBtb2RlCiAgKi8K IHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sCi1Db3B5UmVhZExpbmVUZXh0 KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKK0NvcHlSZWFkTGluZVRleHQoQ29w eUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2LCBib29sIHNpbWRfZW5hYmxlZCkKIHsKIAlj aGFyCSAgICpjb3B5X2lucHV0X2J1ZjsKIAlpbnQJCQlpbnB1dF9idWZfcHRyOwpAQCAtMTI2Nyw2 ICsxMjc5LDE0IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wg aXNfY3N2KQogCWNoYXIJCXF1b3RlYyA9ICdcMCc7CiAJY2hhcgkJZXNjYXBlYyA9ICdcMCc7CiAK KyNpZm5kZWYgVVNFX05PX1NJTUQKKwlWZWN0b3I4CQlubCA9IHZlY3RvcjhfYnJvYWRjYXN0KCdc bicpOworCVZlY3RvcjgJCWNyID0gdmVjdG9yOF9icm9hZGNhc3QoJ1xyJyk7CisJVmVjdG9yOAkJ YnMgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgnXFwnKTsKKwlWZWN0b3I4CQlxdW90ZSA9IHZlY3Rvcjhf YnJvYWRjYXN0KDApOworCVZlY3RvcjgJCWVzY2FwZSA9IHZlY3RvcjhfYnJvYWRjYXN0KDApOwor I2VuZGlmCisKIAlpZiAoaXNfY3N2KQogCXsKIAkJcXVvdGVjID0gY3N0YXRlLT5vcHRzLnF1b3Rl WzBdOwpAQCAtMTI3NCw2ICsxMjk0LDEyIEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0 ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCQkvKiBpZ25vcmUgc3BlY2lhbCBlc2NhcGUgcHJvY2Vz c2luZyBpZiBpdCdzIHRoZSBzYW1lIGFzIHF1b3RlYyAqLwogCQlpZiAocXVvdGVjID09IGVzY2Fw ZWMpCiAJCQllc2NhcGVjID0gJ1wwJzsKKworI2lmbmRlZiBVU0VfTk9fU0lNRAorCQlxdW90ZSA9 IHZlY3RvcjhfYnJvYWRjYXN0KHF1b3RlYyk7CisJCWlmIChxdW90ZWMgIT0gZXNjYXBlYykKKwkJ CWVzY2FwZSA9IHZlY3RvcjhfYnJvYWRjYXN0KGVzY2FwZWMpOworI2VuZGlmCiAJfQogCiAJLyoK QEAgLTEzNDAsNiArMTM2NiwxMDcgQEAgQ29weVJlYWRMaW5lVGV4dChDb3B5RnJvbVN0YXRlIGNz dGF0ZSwgYm9vbCBpc19jc3YpCiAJCQluZWVkX2RhdGEgPSBmYWxzZTsKIAkJfQogCisjaWZuZGVm IFVTRV9OT19TSU1ECisKKwkJLyoKKwkJICogVXNlIFNJTUQgaW5zdHJ1Y3Rpb25zIHRvIGVmZmlj aWVudGx5IHNjYW4gdGhlIGlucHV0IGJ1ZmZlciBmb3IKKwkJICogc3BlY2lhbCBjaGFyYWN0ZXJz IChlLmcuLCBuZXdsaW5lLCBjYXJyaWFnZSByZXR1cm4sIHF1b3RlLCBhbmQKKwkJICogZXNjYXBl KS4gVGhpcyBpcyBmYXN0ZXIgdGhhbiBieXRlLWJ5LWJ5dGUgaXRlcmF0aW9uLCBlc3BlY2lhbGx5 IG9uCisJCSAqIGxhcmdlIGJ1ZmZlcnMuCisJCSAqCisJCSAqIFdlIGRvIG5vdCBhcHBseSB0aGUg U0lNRCBmYXN0IHBhdGggaW4gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcKKwkJICogY2FzZXM6IC0g V2hlbiB0aGUgcHJldmlvdXNseSBwcm9jZXNzZWQgY2hhcmFjdGVyIHdhcyBhbiBlc2NhcGUKKwkJ ICogY2hhcmFjdGVyIChsYXN0X3dhc19lc2MpLCBzaW5jZSB0aGUgbmV4dCBieXRlIG11c3QgYmUg ZXhhbWluZWQKKwkJICogc2VxdWVudGlhbGx5LiAtIFdoZW4gdGhlIHJlbWFpbmluZyBidWZmZXIg aXMgc21hbGxlciB0aGFuIG9uZQorCQkgKiB2ZWN0b3Igd2lkdGggKHNpemVvZihWZWN0b3I4KSks IHNpbmNlIFNJTUQgb3BlcmF0ZXMgb24gZml4ZWQtc2l6ZQorCQkgKiBjaHVua3MuCisJCSAqCisJ CSAqIE5vdGUgdGhhdCwgU0lNRCBtYXkgYmVjb21lIHNsb3dlciB3aGVuIHRoZSBpbnB1dCBjb250 YWlucyBtYW55CisJCSAqIHNwZWNpYWwgY2hhcmFjdGVycy4gVG8gYXZvaWQgdGhpcyByZWdyZXNz aW9uLCB3ZSBkaXNhYmxlIFNJTUQgZm9yCisJCSAqIHRoZSByZXN0IG9mIHRoZSBpbnB1dCBvbmNl IHdlIGVuY291bnRlciBhIHNwZWNpYWwgY2hhcmFjdGVyIHdoaWNoCisJCSAqIGlzIG5laXRoZXIg RU9GIG5vciBFT0wuCisJCSAqLworCQlpZiAoc2ltZF9lbmFibGVkICYmICFsYXN0X3dhc19lc2Mg JiYgY29weV9idWZfbGVuIC0gaW5wdXRfYnVmX3B0ciA+IHNpemVvZihWZWN0b3I4KSkKKwkJewor CQkJVmVjdG9yOAkJY2h1bms7CisJCQlWZWN0b3I4CQltYXRjaCA9IHZlY3RvcjhfYnJvYWRjYXN0 KDApOworCisJCQkvKiBMb2FkIGEgY2h1bmsgb2YgZGF0YSBpbnRvIGEgdmVjdG9yIHJlZ2lzdGVy ICovCisJCQl2ZWN0b3I4X2xvYWQoJmNodW5rLCAoY29uc3QgdWludDggKikgJmNvcHlfaW5wdXRf YnVmW2lucHV0X2J1Zl9wdHJdKTsKKworCQkJaWYgKGlzX2NzdikKKwkJCXsKKwkJCQkvKiBcbiBh bmQgXHIgYXJlIG5vdCBzcGVjaWFsIGluc2lkZSBxdW90ZXMgKi8KKwkJCQlpZiAoIWluX3F1b3Rl KQorCQkJCQltYXRjaCA9IHZlY3Rvcjhfb3IodmVjdG9yOF9lcShjaHVuaywgbmwpLCB2ZWN0b3I4 X2VxKGNodW5rLCBjcikpOworCisJCQkJbWF0Y2ggPSB2ZWN0b3I4X29yKG1hdGNoLCB2ZWN0b3I4 X2VxKGNodW5rLCBxdW90ZSkpOworCQkJCWlmIChlc2NhcGVjICE9ICdcMCcpCisJCQkJCW1hdGNo ID0gdmVjdG9yOF9vcihtYXRjaCwgdmVjdG9yOF9lcShjaHVuaywgZXNjYXBlKSk7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJbWF0Y2ggPSB2ZWN0b3I4X29yKHZlY3RvcjhfZXEoY2h1bmssIG5s KSwgdmVjdG9yOF9lcShjaHVuaywgY3IpKTsKKwkJCQltYXRjaCA9IHZlY3Rvcjhfb3IobWF0Y2gs IHZlY3RvcjhfZXEoY2h1bmssIGJzKSk7CisJCQl9CisKKwkJCS8qIENoZWNrIGlmIHdlIGZvdW5k IGFueSBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKwkJCWlmICh2ZWN0b3I4X2lzX2hpZ2hiaXRfc2V0 KG1hdGNoKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEZvdW5kIGEgc3BlY2lhbCBjaGFyYWN0ZXIu IEFkdmFuY2UgdXAgdG8gdGhhdCBwb2ludCBhbmQgbGV0CisJCQkJICogdGhlIHNjYWxhciBjb2Rl IGhhbmRsZSBpdC4KKwkJCQkgKi8KKwkJCQl1aW50MzIJCW1hc2s7CisJCQkJaW50CQkJYWR2YW5j ZTsKKwkJCQljaGFyCQljMSwKKwkJCQkJCQljMjsKKwkJCQlib29sCQlzaW1kX2hpdF9lb2wsCisJ CQkJCQkJc2ltZF9oaXRfZW9mOworCisJCQkJbWFzayA9IHZlY3RvcjhfaGlnaGJpdF9tYXNrKG1h dGNoKTsKKwkJCQlhZHZhbmNlID0gcGdfcmlnaHRtb3N0X29uZV9wb3MzMihtYXNrKTsKKworCQkJ CWlucHV0X2J1Zl9wdHIgKz0gYWR2YW5jZTsKKwkJCQljMSA9IGNvcHlfaW5wdXRfYnVmW2lucHV0 X2J1Zl9wdHJdOworCisJCQkJLyoKKwkJCQkgKiBTaW5jZSB3ZSBzdG9wcGVkIHdpdGhpbiB0aGUg Y2h1bmsgYW5kICgoY29weV9idWZfbGVuIC0KKwkJCQkgKiBpbnB1dF9idWZfcHRyKSA+IHNpemVv ZihWZWN0b3I4KSkgaXMgdHJ1ZSwKKwkJCQkgKiBjb3B5X2lucHV0X2J1ZltpbnB1dF9idWZfcHRy ICsgMV0gaXMgZ3VhcmFudGVlZCB0byBiZQorCQkJCSAqIHJlYWRhYmxlLgorCQkJCSAqLworCQkJ CWMyID0gY29weV9pbnB1dF9idWZbaW5wdXRfYnVmX3B0ciArIDFdOworCisJCQkJc2ltZF9oaXRf ZW9mID0gKGMxID09ICdcXCcgJiYgYzIgPT0gJy4nICYmICFpc19jc3YpOworCQkJCXNpbWRfaGl0 X2VvbCA9IChjMSA9PSAnXHInIHx8IGMxID09ICdcbicpOworCisJCQkJLyoKKwkJCQkgKiBJZiAo aXNfY3N2ICYmIGluX3F1b3RlKSwgd2Ugc2hvdWxkbid0IGhhdmUgcGlja2VkIHVwICdccicKKwkJ CQkgKiBvciAnXG4nIGluIHRoZSBmaXJzdCBwbGFjZS4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoIXNp bWRfaGl0X2VvbCB8fCAhKGlzX2NzdiAmJiBpbl9xdW90ZSkpOworCisJCQkJLyoKKwkJCQkgKiBE byBub3QgZGlzYWJsZSBTSU1EIHdoZW4gd2UgaGl0IEVPTCBvciBFT0YgY2hhcmFjdGVycy4gSW4K KwkJCQkgKiBwcmFjdGljZSwgaXQgZG9lcyBub3QgbWF0dGVyIGZvciBFT0YgYmVjYXVzZSBwYXJz aW5nIGVuZHMKKwkJCQkgKiB0aGVyZSwgYnV0IHdlIGtlZXAgdGhlIGJlaGF2aW9yIGNvbnNpc3Rl bnQuCisJCQkJICovCisJCQkJaWYgKCEoc2ltZF9oaXRfZW9mIHx8IHNpbWRfaGl0X2VvbCkpCisJ CQkJeworCQkJCQlzaW1kX2VuYWJsZWQgPSBmYWxzZTsKKwkJCQkJY3N0YXRlLT5zaW1kX2VuYWJs ZWQgPSBmYWxzZTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogTm8gc3BlY2lh bCBjaGFyYWN0ZXJzIGZvdW5kLCBzbyBza2lwIHRoZSBlbnRpcmUgY2h1bmsgKi8KKwkJCQlpbnB1 dF9idWZfcHRyICs9IHNpemVvZihWZWN0b3I4KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQor I2VuZGlmCisKIAkJLyogT0sgdG8gZmV0Y2ggYSBjaGFyYWN0ZXIgKi8KIAkJcHJldl9yYXdfcHRy ID0gaW5wdXRfYnVmX3B0cjsKIAkJYyA9IGNvcHlfaW5wdXRfYnVmW2lucHV0X2J1Zl9wdHIrK107 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaAppbmRleCA4MjJlZjMzY2Y2 OS4uNzNjZTc3N2M1MmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9t X2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwu aApAQCAtODksNiArODksOSBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5RnJvbVN0YXRlRGF0YQogCWNv bnN0IGNoYXIgKmN1cl9hdHR2YWw7CQkvKiBjdXJyZW50IGF0dCB2YWx1ZSBmb3IgZXJyb3IgbWVz c2FnZXMgKi8KIAlib29sCQlyZWxuYW1lX29ubHk7CS8qIGRvbid0IG91dHB1dCBsaW5lIG51bWJl ciwgYXR0LCBldGMuICovCiAKKwkvKiBTSU1EIHZhcmlhYmxlcyAqLworCWJvb2wJCXNpbWRfZW5h YmxlZDsKKwogCS8qCiAJICogV29ya2luZyBzdGF0ZQogCSAqLwotLSAKMi40Ny4zCgo= --0000000000000ff51f064b7a261d--