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 1vAQ6p-000sgc-U3 for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Oct 2025 09:53:51 +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 1vAQ6n-00AV2u-Bk for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Oct 2025 09:53:48 +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 1vAQ6m-00AV2l-JX for pgsql-hackers@lists.postgresql.org; Sun, 19 Oct 2025 09:53:48 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vAQ6i-00328c-2l for pgsql-hackers@lists.postgresql.org; Sun, 19 Oct 2025 09:53:47 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=5Bl8xjHDsxAPSmfsYLktukzI5VMsvV+Dm2I/oznDoY8=; b=vKoAe9tiQcUr+LCzXy2abKdnng GkaJSWhmPAeJ3ajrwoEVRP5NeoJnTLkPtTS9KkAs2mrdQMkoZKdEUWH4EI3mRX/a9lVWw/1tkw3Ix 2Fv4EXbzq3eC+s9knf3GjIDmDC2QnQhPOTwNfdFmhcGPfBnZuq0oi+8rXVwd20JdPNLqpBUNz6J95 StcaflJp8WOLXp80735GZSgpO0efQe+GxILnXYlE4AWvFJVIEMJQ+zHvp6WWOIUYYv+zdVzckST9Q 5ONuF+ORE3KmMDSSNFvnlkHCVKAj562oYDKlyljZWJYS3I4PRxEgei56rG2/bXC7Y3pqluY3XFxWp vBWUxIXA==; Received: from [2409:11:4120:300:65bd:84f2:f0a7:56a8] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vAQ6g-007T2h-0Z; Sun, 19 Oct 2025 09:53:44 +0000 Date: Sun, 19 Oct 2025 18:53:23 +0900 (JST) Message-Id: <20251019.185323.1616138750375579950.ishii@postgresql.org> To: tgl@sss.pgh.pa.us Cc: pgsql-hackers@lists.postgresql.org, pramsey@cleverelephant.ca, ojford@gmail.com, peter@eisentraut.org, li.evan.chao@gmail.com, krasiyan@gmail.com, vik@postgresfriends.org, andrew@tao11.riddles.org.uk, david@fetter.org Subject: Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options From: Tatsuo Ishii In-Reply-To: <20251013.134332.1917267590891336373.ishii@postgresql.org> References: <2952409.1760023154@sss.pgh.pa.us> <20251011.090731.1451293026979559494.ishii@postgresql.org> <20251013.134332.1917267590891336373.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Sun_Oct_19_18_53_23_2025_274)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:65bd:84f2:f0a7:56a8 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Sun_Oct_19_18_53_23_2025_274)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit >>> 2. AFAICS there is only one notnull_info array, which amounts to >>> assuming that the window function will have only one argument position >>> that it calls WinGetFuncArgInFrame or WinGetFuncArgInPartition for. >>> That may be true for the built-in functions but it seems mighty >>> restrictive for extensions. Worse yet, there's no check, so that >>> you'd just get silently wrong answers if two or more arguments are >>> evaluated. I think there ought to be a separate array for each argno; >>> of course only created if the window function actually asks for >>> evaluations of a particular argno. >> >> I missed that. Thank you for pointed it out. I agree it would be >> better allow to use multiple argument positions that calls >> WinGetFuncArgInFrame or WinGetFuncArgInPartition in >> extensions. Attached is a PoC patch for that. >> >> Currently there's an issue with the patch, however. >> >> SELECT x, y, mywindowfunc2(x, y, 2) IGNORE NULLS OVER w FROM g >> WINDOW w AS (ORDER BY y); >> psql:test2.sql:9: ERROR: cannot fetch row before WindowObject's mark position >> >> mywindowfunc2 is a user defined window function, taking 3 arguments. x >> and y are expected to be evaluated to integer. The third argument is >> relative offset to current row. In the query above x and y are >> retrieved using two WinGetFuncArgInPartition() calls. The data set >> (table "g") looks like below. >> >> x | y >> ----+--- >> | 1 >> | 2 >> 10 | 3 >> 20 | 4 >> (4 rows) >> >> I think the cause of the error is: >> >> (1) WinGetFuncArgInPartition keep on fetching column x until it's >> evalued to not null and placed in the second row (in this case that's >> x==20). In WinGetFuncArgInPartition WinSetMarkPosition is called at >> abs_pos==3. >> >> (2) WinGetFuncArgInPartition tries to fetch column y at row 0. Since >> the mark was set to at row 3, the error occurred. >> >> To avoid the error, we could call WinGetFuncArgInPartition with >> set_mark = false (and call WinSetMarkPosition separately) but I am not >> sure if it's an acceptable solution. > > Attached is a v2 patch to fix the "cannot fetch row before > WindowObject's mark position" error, by tweaking the logic to > calculate the set mark position in WinGetFuncArgInPartition. Attached is a v3 patch which is ready for commit IMO. Major difference from v2 patch is, now the patch satisfies the request below. >>> of course only created if the window function actually asks for >>> evaluations of a particular argno. The NOT NULL information array is allocated only when the window function actually asks for evaluations of a particular argno using WinGetFuncArgInFrame or WinGetFuncArgInPartition. If there's no objection, I am going to commit in a few days. -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Sun_Oct_19_18_53_23_2025_274)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v3-0001-Fix-multi-WinGetFuncArgInFrame-Partition-calls-wi.patch" RnJvbSA4ODhkYzVkYjllOGE4YzBiYjRiOWIxNjAzZTUzMzVmMjA5YzJkOThjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBTdW4sIDE5IE9jdCAyMDI1IDE4OjM3OjA4ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2M10g Rml4IG11bHRpIFdpbkdldEZ1bmNBcmdJbkZyYW1lL1BhcnRpdGlvbiBjYWxscyB3aXRoIElHTk9S RQogTlVMTFMuCgpQcmV2aW91c2x5IGl0IHdhcyBtaXN0YWtlbmx5IGFzc3VtZWQgdGhhdCB0aGVy ZSdzIG9ubHkgb25lIHdpbmRvdwpmdW5jdGlvbiBhcmd1bWVudCB3aGljaCBuZWVkcyB0byBiZSBw cm9jZXNzZWQgYnkgV2luR2V0RnVuY0FyZ0luRnJhbWUKb3IgV2luR2V0RnVuY0FyZ0luUGFydGl0 aW9uIHdoZW4gSUdOT1JFIE5VTExTIG9wdGlvbiBpcyBzcGVjaWZpZWQuIFRvCmVsaW1pbmF0ZSB0 aGUgbGltaXRhdGlvbiwgV2luZG93T2JqZWN0LT5ub3RudWxsX2luZm8gaXMgbW9kaWZpZWQgZnJv bQoidWludDggKiIgdG8gInVpbnQ4ICoqIiBzbyB0aGF0IFdpbmRvd09iamVjdC0+bm90bnVsbF9p bmZvIGNvdWxkIHN0b3JlCnBvaW50ZXJzIHRvICJ1aW50OCAqIiB3aGljaCBob2xkcyBOT1QgTlVM TCBpbmZvIGNvcnJlc3BvbmRpbmcgdG8gZWFjaAp3aW5kb3cgZnVuY3Rpb24gYXJndW1lbnQuIE1v cmVvdmVyLCBXaW5kb3dPYmplY3QtPm51bV9ub3RudWxsX2luZm8gaXMKY2hhbmdlZCBmcm9tICJp bnQiIHRvICJpbnQ2NCAqIiBzbyB0aGF0IFdpbmRvd09iamVjdC0+bnVtX25vdG51bGxfaW5mbwpj b3VsZCBzdG9yZSB0aGUgbnVtYmVyIG9mIE5PVCBOVUxMIGluZm8gY29ycmVzcG9uZGluZyB0byBl YWNoIGZ1bmN0aW9uCmFyZ3VtZW50LiBNZW1vcmllcyBmb3IgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVz IHdpbGwgYmUgYWxsb2NhdGVkIHdoZW4KV2luR2V0RnVuY0FyZ0luRnJhbWUgb3IgV2luR2V0RnVu Y0FyZ0luUGFydGl0aW9uIGlzIGNhbGxlZC4gVGh1cyBubwptZW1vcnkgZXhjZXB0IHRoZSBwb2lu dGVycyBpcyBhbGxvY2F0ZWQgZm9yIGZ1bmN0aW9uIGFyZ3VtZW50cyB3aGljaApkbyBub3QgY2Fs bCB0aGVzZSBmdW5jdGlvbnMKCkFsc28gZml4IHRoZSBzZXQgbWFyayBwb3NpdGlvbiBsb2dpYyBp biBXaW5HZXRGdW5jQXJnSW5QYXJ0aXRpb24gdG8Kbm90IHJhaXNlIGEgImNhbm5vdCBmZXRjaCBy b3cgYmVmb3JlIFdpbmRvd09iamVjdCdzIG1hcmsgcG9zaXRpb24iCmVycm9yIGluIElHTk9SRSBO VUxMUyBjYXNlLgoKUmVwb3J0ZWQtYnk6IFRvbSBMYW5lIDx0Z2xAc3NzLnBnaC5wYS51cz4KQXV0 aG9yOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tLzI5NTI0MDkuMTc2MDAyMzE1NCU0MHNzcy5wZ2gucGEudXMKLS0tCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgfCAxMzYgKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOTggaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCmluZGV4IGFhMTQ1ZDRlMWE5 Li40OTdlYjI1ZWEyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRv d0FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYwpAQCAtNjks OCArNjksMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93T2JqZWN0RGF0YQogCWludAkJCXJlYWRw dHI7CQkvKiB0dXBsZXN0b3JlIHJlYWQgcG9pbnRlciBmb3IgdGhpcyBmbiAqLwogCWludDY0CQlt YXJrcG9zOwkJLyogcm93IHRoYXQgbWFya3B0ciBpcyBwb3NpdGlvbmVkIG9uICovCiAJaW50NjQJ CXNlZWtwb3M7CQkvKiByb3cgdGhhdCByZWFkcHRyIGlzIHBvc2l0aW9uZWQgb24gKi8KLQl1aW50 OAkgICAqbm90bnVsbF9pbmZvOwkvKiBub3QgbnVsbCBpbmZvICovCi0JaW50CQkJbnVtX25vdG51 bGxfaW5mbzsJLyogdHJhY2sgc2l6ZSBvZiB0aGUgbm90bnVsbF9pbmZvIGFycmF5ICovCisJdWlu dDgJICAqKm5vdG51bGxfaW5mbzsJLyogbm90IG51bGwgaW5mbyBmb3IgZWFjaCBmdW5jIGFyZ3Mg Ki8KKwlpbnQ2NAkgICAqbnVtX25vdG51bGxfaW5mbzsJLyogdHJhY2sgc2l6ZSAobnVtYmVyIG9m IHR1cGxlcyBpbgorCQkJCQkJCQkJICogcGFydGl0aW9uKSBvZiB0aGUgbm90bnVsbF9pbmZvIGFy cmF5CisJCQkJCQkJCQkgKiBmb3IgZWFjaCBmdW5jIGFyZ3MgKi8KIAogCS8qCiAJICogTnVsbCB0 cmVhdG1lbnQgb3B0aW9ucy4gT25lIG9mOiBOT19OVUxMVFJFQVRNRU5ULCBQQVJTRVJfSUdOT1JF X05VTExTLApAQCAtMjE0LDEwICsyMTYsMTQgQEAgc3RhdGljIERhdHVtIGlnbm9yZW51bGxzX2dl dGZ1bmNhcmdpbmZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKIHN0YXRpYyBE YXR1bSBnZXR0dXBsZV9ldmFsX3BhcnRpdGlvbihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJn bm8sCiAJCQkJCQkJCQkgaW50NjQgYWJzX3BvcywgYm9vbCAqaXNudWxsLAogCQkJCQkJCQkJIGJv b2wgKmlzb3V0KTsKLXN0YXRpYyB2b2lkIGluaXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3 aW5vYmopOwotc3RhdGljIHZvaWQgZ3Jvd19ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9i aiwgaW50NjQgcG9zKTsKLXN0YXRpYyB1aW50OCBnZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVj dCB3aW5vYmosIGludDY0IHBvcyk7Ci1zdGF0aWMgdm9pZCBwdXRfbm90bnVsbF9pbmZvKFdpbmRv d09iamVjdCB3aW5vYmosIGludDY0IHBvcywgYm9vbCBpc251bGwpOworc3RhdGljIHZvaWQgaW5p dF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwKKwkJCQkJCQkgIFdpbmRvd1N0YXRl UGVyRnVuYyBwZXJmdW5jc3RhdGUpOworc3RhdGljIHZvaWQgZ3Jvd19ub3RudWxsX2luZm8oV2lu ZG93T2JqZWN0IHdpbm9iaiwKKwkJCQkJCQkgIGludDY0IHBvcywgaW50IGFyZ25vKTsKK3N0YXRp YyB1aW50OCBnZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmosCisJCQkJCQkJICBp bnQ2NCBwb3MsIGludCBhcmdubyk7CitzdGF0aWMgdm9pZCBwdXRfbm90bnVsbF9pbmZvKFdpbmRv d09iamVjdCB3aW5vYmosCisJCQkJCQkJIGludDY0IHBvcywgaW50IGFyZ25vLCBib29sIGlzbnVs bCk7CiAKIC8qCiAgKiBOb3QgbnVsbCBpbmZvIGJpdCBhcnJheSBjb25zaXN0cyBvZiAyLWJpdCBp dGVtcwpAQCAtMTMwMywxMCArMTMwOSwyMCBAQCBiZWdpbl9wYXJ0aXRpb24oV2luZG93QWdnU3Rh dGUgKndpbnN0YXRlKQogCQkJd2lub2JqLT5zZWVrcG9zID0gLTE7CiAKIAkJCS8qIHJlc2V0IG51 bGwgbWFwICovCi0JCQlpZiAod2lub2JqLT5pZ25vcmVfbnVsbHMgPT0gSUdOT1JFX05VTExTKQot CQkJCW1lbXNldCh3aW5vYmotPm5vdG51bGxfaW5mbywgMCwKLQkJCQkJICAgTk5fUE9TX1RPX0JZ VEVTKAotCQkJCQkJCQkJICAgcGVyZnVuY3N0YXRlLT53aW5vYmotPm51bV9ub3RudWxsX2luZm8p KTsKKwkJCWlmICh3aW5vYmotPmlnbm9yZV9udWxscyA9PSBJR05PUkVfTlVMTFMgfHwKKwkJCQl3 aW5vYmotPmlnbm9yZV9udWxscyA9PSBQQVJTRVJfSUdOT1JFX05VTExTKQorCQkJeworCQkJCWlu dAkJCW51bWFyZ3MgPSBwZXJmdW5jc3RhdGUtPm51bUFyZ3VtZW50czsKKworCQkJCWZvciAoaW50 IGogPSAwOyBqIDwgbnVtYXJnczsgaisrKQorCQkJCXsKKwkJCQkJaW50CQkJbiA9IHdpbm9iai0+ bnVtX25vdG51bGxfaW5mb1tqXTsKKworCQkJCQlpZiAobiA+IDApCisJCQkJCQltZW1zZXQod2lu b2JqLT5ub3RudWxsX2luZm9bal0sIDAsCisJCQkJCQkJICAgTk5fUE9TX1RPX0JZVEVTKG4pKTsK KwkJCQl9CisJCQl9CiAJCX0KIAl9CiAKQEAgLTI3MzQsNyArMjc1MCw3IEBAIEV4ZWNJbml0V2lu ZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQl3 aW5vYmotPmxvY2FsbWVtID0gTlVMTDsKIAkJCXBlcmZ1bmNzdGF0ZS0+d2lub2JqID0gd2lub2Jq OwogCQkJd2lub2JqLT5pZ25vcmVfbnVsbHMgPSB3ZnVuYy0+aWdub3JlX251bGxzOwotCQkJaW5p dF9ub3RudWxsX2luZm8od2lub2JqKTsKKwkJCWluaXRfbm90bnVsbF9pbmZvKHdpbm9iaiwgcGVy ZnVuY3N0YXRlKTsKIAogCQkJLyogSXQncyBhIHJlYWwgd2luZG93IGZ1bmN0aW9uLCBzbyBzZXQg dXAgdG8gY2FsbCBpdC4gKi8KIAkJCWZtZ3JfaW5mb19jeHQod2Z1bmMtPndpbmZub2lkLCAmcGVy ZnVuY3N0YXRlLT5mbGluZm8sCkBAIC0zMzg3LDcgKzM0MDMsNyBAQCBpZ25vcmVudWxsc19nZXRm dW5jYXJnaW5mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCWlmIChpc291 dCkKIAkJCSppc291dCA9IGZhbHNlOwogCi0JCXYgPSBnZXRfbm90bnVsbF9pbmZvKHdpbm9iaiwg YWJzX3Bvcyk7CisJCXYgPSBnZXRfbm90bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcywgYXJnbm8p OwogCQlpZiAodiA9PSBOTl9OVUxMKQkJLyogdGhpcyByb3cgaXMga25vd24gdG8gYmUgTlVMTCAq LwogCQkJZ290byBhZHZhbmNlOwogCkBAIC0zNDA1LDcgKzM0MjEsNyBAQCBpZ25vcmVudWxsc19n ZXRmdW5jYXJnaW5mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCQkJbm90 bnVsbF9vZmZzZXQrKzsKIAogCQkJLyogcmVjb3JkIHRoZSByb3cgc3RhdHVzICovCi0JCQlwdXRf bm90bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcywgKmlzbnVsbCk7CisJCQlwdXRfbm90bnVsbF9p bmZvKHdpbm9iaiwgYWJzX3BvcywgYXJnbm8sICppc251bGwpOwogCQl9CiAJCWVsc2UJCQkJCS8q IHRoaXMgcm93IGlzIGtub3duIHRvIGJlIE5PVCBOVUxMICovCiAJCXsKQEAgLTM0NDUsMTcgKzM0 NjEsMTQgQEAgb3V0X29mX2ZyYW1lOgogICogSW5pdGlhbGl6ZSBub24gbnVsbCBtYXAuCiAgKi8K IHN0YXRpYyB2b2lkCi1pbml0X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqKQoraW5p dF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwgV2luZG93U3RhdGVQZXJGdW5jIHBl cmZ1bmNzdGF0ZSkKIHsKLS8qIGluaXRpYWwgbnVtYmVyIG9mIG5vdG51bGwgaW5mbyBtZW1iZXJz ICovCi0jZGVmaW5lCUlOSVRfTk9UX05VTExfSU5GT19OVU0JMTI4CisJaW50CQkJbnVtYXJncyA9 IHBlcmZ1bmNzdGF0ZS0+bnVtQXJndW1lbnRzOwogCiAJaWYgKHdpbm9iai0+aWdub3JlX251bGxz ID09IFBBUlNFUl9JR05PUkVfTlVMTFMpCiAJewotCQlTaXplCQlzaXplID0gTk5fUE9TX1RPX0JZ VEVTKElOSVRfTk9UX05VTExfSU5GT19OVU0pOwotCi0JCXdpbm9iai0+bm90bnVsbF9pbmZvID0g cGFsbG9jMChzaXplKTsKLQkJd2lub2JqLT5udW1fbm90bnVsbF9pbmZvID0gSU5JVF9OT1RfTlVM TF9JTkZPX05VTTsKKwkJd2lub2JqLT5ub3RudWxsX2luZm8gPSBwYWxsb2MwKHNpemVvZih1aW50 OCAqKSAqIG51bWFyZ3MpOworCQl3aW5vYmotPm51bV9ub3RudWxsX2luZm8gPSBwYWxsb2MwKHNp emVvZihpbnQ2NCkgKiBudW1hcmdzKTsKIAl9CiB9CiAKQEAgLTM0NjMsMjMgKzM0NzYsNDMgQEAg aW5pdF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaikKICAqIGdyb3dfbm90bnVsbF9p bmZvCiAgKiBleHBhbmQgbm90bnVsbF9pbmZvIGlmIG5lY2Vzc2FyeS4KICAqIHBvczogbm90IG51 bGwgaW5mbyBwb3NpdGlvbgorICogYXJnbm86IGFyZ3VtZW50IG51bWJlcgogKi8KIHN0YXRpYyB2 b2lkCi1ncm93X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCitn cm93X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MsIGludCBhcmdu bykKIHsKLQlpZiAocG9zID49IHdpbm9iai0+bnVtX25vdG51bGxfaW5mbykKKy8qIGluaXRpYWwg bnVtYmVyIG9mIG5vdG51bGwgaW5mbyBtZW1iZXJzICovCisjZGVmaW5lCUlOSVRfTk9UX05VTExf SU5GT19OVU0JMTI4CisKKwlpZiAocG9zID49IHdpbm9iai0+bnVtX25vdG51bGxfaW5mb1thcmdu b10pCiAJeworCQkvKiBXZSBtYXkgYmUgY2FsbGVkIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCAq LworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8KKwkJ CSh3aW5vYmotPndpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dC0+ZWN4dF9wZXJfcXVlcnlf bWVtb3J5KTsKKwogCQlmb3IgKDs7KQogCQl7Ci0JCQlTaXplCQlvbGRzaXplID0gTk5fUE9TX1RP X0JZVEVTKHdpbm9iai0+bnVtX25vdG51bGxfaW5mbyk7Ci0JCQlTaXplCQluZXdzaXplID0gb2xk c2l6ZSAqIDI7CisJCQlTaXplCQlvbGRzaXplID0gTk5fUE9TX1RPX0JZVEVTCisJCQkJKHdpbm9i ai0+bnVtX25vdG51bGxfaW5mb1thcmdub10pOworCQkJU2l6ZQkJbmV3c2l6ZTsKIAotCQkJd2lu b2JqLT5ub3RudWxsX2luZm8gPQotCQkJCXJlcGFsbG9jMCh3aW5vYmotPm5vdG51bGxfaW5mbywg b2xkc2l6ZSwgbmV3c2l6ZSk7Ci0JCQl3aW5vYmotPm51bV9ub3RudWxsX2luZm8gPSBOTl9CWVRF U19UT19QT1MobmV3c2l6ZSk7Ci0JCQlpZiAod2lub2JqLT5udW1fbm90bnVsbF9pbmZvID4gcG9z KQorCQkJaWYgKG9sZHNpemUgPT0gMCkJLyogbWVtb3J5IGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQg eWV0IGZvciB0aGlzCisJCQkJCQkJCSAqIGFyZyAqLworCQkJeworCQkJCW5ld3NpemUgPSBOTl9Q T1NfVE9fQllURVMoSU5JVF9OT1RfTlVMTF9JTkZPX05VTSk7CisJCQkJd2lub2JqLT5ub3RudWxs X2luZm9bYXJnbm9dID0gcGFsbG9jMChuZXdzaXplKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJ CQluZXdzaXplID0gb2xkc2l6ZSAqIDI7CisJCQkJd2lub2JqLT5ub3RudWxsX2luZm9bYXJnbm9d ID0KKwkJCQkJcmVwYWxsb2MwKHdpbm9iai0+bm90bnVsbF9pbmZvW2FyZ25vXSwgb2xkc2l6ZSwg bmV3c2l6ZSk7CisJCQl9CisJCQl3aW5vYmotPm51bV9ub3RudWxsX2luZm9bYXJnbm9dID0gTk5f QllURVNfVE9fUE9TKG5ld3NpemUpOworCQkJaWYgKHdpbm9iai0+bnVtX25vdG51bGxfaW5mb1th cmdub10gPiBwb3MpCiAJCQkJYnJlYWs7CiAJCX0KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOwogCX0KIH0KIApAQCAtMzQ4NywxNiArMzUyMCwxOSBAQCBncm93X25vdG51bGxf aW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCiAgKiBnZXRfbm90bnVsbF9pbmZv CiAgKiByZXRyaWV2ZSBhIG1hcAogICogcG9zOiBtYXAgcG9zaXRpb24KKyAqIGFyZ25vOiBhcmd1 bWVudCBudW1iZXIKICAqLwogc3RhdGljIHVpbnQ4Ci1nZXRfbm90bnVsbF9pbmZvKFdpbmRvd09i amVjdCB3aW5vYmosIGludDY0IHBvcykKK2dldF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdp bm9iaiwgaW50NjQgcG9zLCBpbnQgYXJnbm8pCiB7CisJdWludDgJICAgKm1icDsKIAl1aW50OAkJ bWI7CiAJaW50NjQJCWJwb3M7CiAKLQlncm93X25vdG51bGxfaW5mbyh3aW5vYmosIHBvcyk7CisJ Z3Jvd19ub3RudWxsX2luZm8od2lub2JqLCBwb3MsIGFyZ25vKTsKIAlicG9zID0gTk5fUE9TX1RP X0JZVEVTKHBvcyk7Ci0JbWIgPSB3aW5vYmotPm5vdG51bGxfaW5mb1ticG9zXTsKKwltYnAgPSB3 aW5vYmotPm5vdG51bGxfaW5mb1thcmdub107CisJbWIgPSBtYnBbYnBvc107CiAJcmV0dXJuICht YiA+PiAoTk5fU0hJRlQocG9zKSkpICYgTk5fTUFTSzsKIH0KIApAQCAtMzUwNCwyMiArMzU0MCwy NiBAQCBnZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcykKICAq IHB1dF9ub3RudWxsX2luZm8KICAqIHVwZGF0ZSBtYXAKICAqIHBvczogbWFwIHBvc2l0aW9uCisg KiBhcmdubzogYXJndW1lbnQgbnVtYmVyCisgKiBpc251bGw6IGluZGljYXRlIE5VTEwgb3IgTk9U CiAgKi8KIHN0YXRpYyB2b2lkCi1wdXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmos IGludDY0IHBvcywgYm9vbCBpc251bGwpCitwdXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3 aW5vYmosIGludDY0IHBvcywgaW50IGFyZ25vLCBib29sIGlzbnVsbCkKIHsKKwl1aW50OAkgICAq bWJwOwogCXVpbnQ4CQltYjsKIAlpbnQ2NAkJYnBvczsKIAl1aW50OAkJdmFsID0gaXNudWxsID8g Tk5fTlVMTCA6IE5OX05PVE5VTEw7CiAJaW50CQkJc2hpZnQ7CiAKLQlncm93X25vdG51bGxfaW5m byh3aW5vYmosIHBvcyk7CisJZ3Jvd19ub3RudWxsX2luZm8od2lub2JqLCBwb3MsIGFyZ25vKTsK IAlicG9zID0gTk5fUE9TX1RPX0JZVEVTKHBvcyk7Ci0JbWIgPSB3aW5vYmotPm5vdG51bGxfaW5m b1ticG9zXTsKKwltYnAgPSB3aW5vYmotPm5vdG51bGxfaW5mb1thcmdub107CisJbWIgPSBtYnBb YnBvc107CiAJc2hpZnQgPSBOTl9TSElGVChwb3MpOwogCW1iICY9IH4oTk5fTUFTSyA8PCBzaGlm dCk7CS8qIGNsZWFyIG1hcCAqLwogCW1iIHw9ICh2YWwgPDwgc2hpZnQpOwkJLyogdXBkYXRlIG1h cCAqLwotCXdpbm9iai0+bm90bnVsbF9pbmZvW2Jwb3NdID0gbWI7CisJbWJwW2Jwb3NdID0gbWI7 CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzcxNCw2ICszNzU0LDcgQEAgV2luR2V0RnVuY0Fy Z0luUGFydGl0aW9uKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKIHsKIAlXaW5kb3dB Z2dTdGF0ZSAqd2luc3RhdGU7CiAJaW50NjQJCWFic19wb3M7CisJaW50NjQJCW1hcmtfcG9zOwog CURhdHVtCQlkYXR1bTsKIAlib29sCQludWxsX3RyZWF0bWVudDsKIAlpbnQJCQlub3RudWxsX29m ZnNldDsKQEAgLTM3NzAsNiArMzgxMSwyNSBAQCBXaW5HZXRGdW5jQXJnSW5QYXJ0aXRpb24oV2lu ZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCW15aXNvdXQgPSBmYWxzZTsKIAlkYXR1bSA9 IDA7CiAKKwkvKgorCSAqIElHTk9SRSBOVUxMUyArIFdJTkRPV19TRUVLX0NVUlJFTlQgKyByZWxw b3MgPiAwIGNhc2UsIHdlIHdvdWxkIGZldGNoCisJICogYmV5b25kIHRoZSBjdXJyZW50IHJvdyAr IHJlbHBvcyB0byBmaW5kIG91dCB0aGUgdGFyZ2V0IHJvdy4gSWYgd2UgbWFyaworCSAqIGF0IGFi c19wb3MsIG5leHQgY2FsbCB0byBXaW5HZXRGdW5jQXJnSW5QYXJ0aXRpb24gb3IKKwkgKiBXaW5H ZXRGdW5jQXJnSW5GcmFtZSAoaW4gY2FzZSB3aGVuIGEgd2luZG93IGZ1bmN0aW9uIGhhdmUgbXVs dGlwbGUKKwkgKiBhcmdzKSBjb3VsZCBmYWlsIHdpdGggImNhbm5vdCBmZXRjaCByb3cgYmVmb3Jl IFdpbmRvd09iamVjdCdzIG1hcmsKKwkgKiBwb3NpdGlvbiIuIFNvIGtlZXAgdGhlIG1hcmsgcG9z aXRpb24gYXQgY3VycmVudHBvcy4KKwkgKi8KKwlpZiAoc2Vla3R5cGUgPT0gV0lORE9XX1NFRUtf Q1VSUkVOVCAmJiByZWxwb3MgPiAwKQorCQltYXJrX3BvcyA9IHdpbnN0YXRlLT5jdXJyZW50cG9z OworCWVsc2UKKworCQkvKgorCQkgKiBGb3Igb3RoZXIgY2FzZXMgd2UgaGF2ZSBubyBpZGVhIHdo YXQgcG9zaXRpb24gb2Ygcm93IGNhbGxlcnMgd291bGQKKwkJICogZmV0Y2ggbmV4dCB0aW1lLiBB bHNvIGZvciByZWxwb3MgPCAwIGNhc2UgKHdlIGdvIGJhY2t3YXJkKSwgd2UKKwkJICogY2Fubm90 IHNldCBtYXJrIGVpdGhlci4gRm9yIHRob3NlIGNhc2VzIHdlIGFsd2F5cyBzZXQgbWFyayBhdCAw LgorCQkgKi8KKwkJbWFya19wb3MgPSAwOworCiAJLyoKIAkgKiBHZXQgdGhlIG5leHQgbm9ubnVs bCB2YWx1ZSBpbiB0aGUgcGFydGl0aW9uLCBtb3ZpbmcgZm9yd2FyZCBvciBiYWNrd2FyZAogCSAq IHVudGlsIHdlIGZpbmQgYSB2YWx1ZSBvciByZWFjaCB0aGUgcGFydGl0aW9uJ3MgZW5kLiAgV2Ug Y2FjaGUgdGhlCkBAIC0zNzg0LDcgKzM4NDQsNyBAQCBXaW5HZXRGdW5jQXJnSW5QYXJ0aXRpb24o V2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCQkJYnJlYWs7CiAKIAkJLyogY2hlY2sg Tk9UIE5VTEwgY2FjaGVkIGluZm8gKi8KLQkJbm5faW5mbyA9IGdldF9ub3RudWxsX2luZm8od2lu b2JqLCBhYnNfcG9zKTsKKwkJbm5faW5mbyA9IGdldF9ub3RudWxsX2luZm8od2lub2JqLCBhYnNf cG9zLCBhcmdubyk7CiAJCWlmIChubl9pbmZvID09IE5OX05PVE5VTEwpCS8qIHRoaXMgcm93IGlz IGtub3duIHRvIGJlIE5PVCBOVUxMICovCiAJCQlub3RudWxsX29mZnNldCsrOwogCQllbHNlIGlm IChubl9pbmZvID09IE5OX05VTEwpCS8qIHRoaXMgcm93IGlzIGtub3duIHRvIGJlIE5VTEwgKi8K QEAgLTM4MDUsNyArMzg2NSw3IEBAIFdpbkdldEZ1bmNBcmdJblBhcnRpdGlvbihXaW5kb3dPYmpl Y3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCQlpZiAoISppc251bGwpCiAJCQkJbm90bnVsbF9vZmZz ZXQrKzsKIAkJCS8qIHJlY29yZCB0aGUgcm93IHN0YXR1cyAqLwotCQkJcHV0X25vdG51bGxfaW5m byh3aW5vYmosIGFic19wb3MsICppc251bGwpOworCQkJcHV0X25vdG51bGxfaW5mbyh3aW5vYmos IGFic19wb3MsIGFyZ25vLCAqaXNudWxsKTsKIAkJfQogCX0gd2hpbGUgKG5vdG51bGxfb2Zmc2V0 IDwgbm90bnVsbF9yZWxwb3MpOwogCkBAIC0zODEzLDcgKzM4NzMsNyBAQCBXaW5HZXRGdW5jQXJn SW5QYXJ0aXRpb24oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCWRhdHVtID0gZ2V0 dHVwbGVfZXZhbF9wYXJ0aXRpb24od2lub2JqLCBhcmdubywKIAkJCQkJCQkJCWFic19wb3MsIGlz bnVsbCwgJm15aXNvdXQpOwogCWlmICghbXlpc291dCAmJiBzZXRfbWFyaykKLQkJV2luU2V0TWFy a1Bvc2l0aW9uKHdpbm9iaiwgYWJzX3Bvcyk7CisJCVdpblNldE1hcmtQb3NpdGlvbih3aW5vYmos IG1hcmtfcG9zKTsKIAlpZiAoaXNvdXQpCiAJCSppc291dCA9IG15aXNvdXQ7CiAKLS0gCjIuNDMu MAoK ----Next_Part(Sun_Oct_19_18_53_23_2025_274)----