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 1w2ojn-000dLX-1d for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 11:06:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2ojm-009nUo-19 for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 11:06:54 +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 1w2ojl-009nUT-1v for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 11:06:53 +0000 Received: from mail-vs1-xe2a.google.com ([2607:f8b0:4864:20::e2a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2ojh-00000000LPK-32yB for pgsql-hackers@postgresql.org; Wed, 18 Mar 2026 11:06:52 +0000 Received: by mail-vs1-xe2a.google.com with SMTP id ada2fe7eead31-6027ef7e068so575240137.1 for ; Wed, 18 Mar 2026 04:06:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773832010; cv=none; d=google.com; s=arc-20240605; b=Yz8Qf2DxdDKqfpdi6uOoaMh5zliQaYMrouthB6ImGwaFRNeFIep+PEGlPG594t2pWp HI6gxpk7YsJ2bEObp/CNdaHoBj6QJ+f/dKimchnMhsOGPSVaXoja1Rv8uGM32djmpkof kU3CurZjeLq69NdXeqLYm0mGEkaXyl1MN860fG/BW8UHj89vkg722joJdReoD1iBeLCh 86ICbVaep/fkgKGuOmI5yXfY1pCk9rwcO5i/U8gSgyi+jqByiikOb12d3HRnDDNkmOb/ CgCq01oO+/5Ej8CqIzcWi3Ur9Kq5noeCItmmM8qKCSpOgyVtZypsu6unxgTOhBCZCzxL Tszg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=ma9SozMpg+9JrErh1kzdX9tjaDLjlF2mZ47P1VUohGU=; fh=FIa6CnAOcDlblDMIqVQXhn30ONA1aoHzZ0tfczHgg8I=; b=SoX0nmGiOyQdTxVq6MoAFrP1rgraizn+G7wFJi4wAqWmQx06SJ40BawAURDZ2EdcWs P6CfJWoVJVmWT5qyIn1VM8blkUE2bz+5I70rgrKVgQOQCOjSi5gGgm08XoNmQs34GZaH uUQNNYGw70RNN+fBRLJf1P4Kpfmj8hVa0hDBgWzfJLKN1FAGiX8/IEOokcRqH3KdU381 IB4RNYo6059UkYznWFL5OxtsObpbWjJe5pxe62KMdnrxdP6DyaT6d/Nh2QkPrRvcvX0R w4AGXjhGgAnJObxkhWr1Uf6qljqApFlTFvejyGiq1wGAs9D3BzF53I6pix+pqhKV4GKB Xk6Q==; 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=1773832010; x=1774436810; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ma9SozMpg+9JrErh1kzdX9tjaDLjlF2mZ47P1VUohGU=; b=msRAvcoV6VqL1E4INM1CAu44Pq7eWmwyPY3nj8sSZvbZtr7hCk8rzt7ZaQLRMtlGAy 9w1OCbsQdYk9y9bnwF9L+ZzZrFuFcBtqnMKMkHNImEv9fdeQCCtZx8gKm/1QXi02o35P eMw+EKD7LjrDfAvSpfH5u1hxidMwC00wrd6Kaeb/+AYIdUI5nCHc0lw9zf1ubvWGwwIN WQQRmGLt5VJGLHYly5dLvdScZMuqlHOqP+9CFSJy55nYF/HN8foPp2JY3uUe1cK2LGtJ iEnocpV7CT1rBvdoJosS7RauXUXGwBQIXYEjqjnQxS4zxXP9G3tyTikQh66Ab64OuNgJ Maog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773832010; x=1774436810; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ma9SozMpg+9JrErh1kzdX9tjaDLjlF2mZ47P1VUohGU=; b=g0Rgjl3qM/Y1p+Fowb/zJQAvja5hdRrboOKoPNV2ez0VPL55xGzG7MbCr0hVqpTtPE o8BcjRx0yv+2haOmXTeLYoA4fZENcgwT5ohaw/5sewXS6lQzglCkgki6gew7wP/KEljF JDR0U/cHy8bFDDl9mBjT/sXnVl2uAR4oYUII7xYzzT1bTHcZuz2P2dlY+PFLoaK4sYyL +OhbLdoyVFi3VRFvY+flampzEJu33DrZXIzIjVtFtQl8L8+18IBtUmsc1MXJcVTjAuSU FEWXUg4ZZdVJkjl73Rj/2mRsuas0vrk+uSZVmz1HF1xDuk3oGyPTnx/w2dFrp3J7/nfg WbXA== X-Gm-Message-State: AOJu0Yy3DcmIkMBw5hxjL00Kvp8oxhBkwEiTOZpuWX+pqFMDKrNTPmKE +NA6LX/A5dAYI0ypcXgrSpp+Y5E33IHeKPW2pTdZdLG8LAOpKRfJkDY+QoVDRGmn3oY7gRZFcJd WeNEZhF39A2XauhqkpiJx40cXP6+z0En9uIgrcJRnTA== X-Gm-Gg: ATEYQzzY0CTVlyuopCZn0PJJH96oL+VJds45XZk+iQ1KTrQFTkqkleYRgiKkR5iU0ol bjU6PUWmD2Pp66vaaAG1gOVL0oqVNjLZarpuYRFuOXJbBf9T35SZGv9uWxttSceWB3w9w3DijCj RzedVssaG1GlkA8dV0YjGV+V9wIs0kpTh18qQ4Nd5EswvAFo2MEsmUO/w0PIGUVXJbEW/8DZk8z WfWt368mZ+gS1AhDt422IZIyk69JJIEQmnNh54kADcmp88MI1/dp/hxrh+u046vS99xwaoPqSOO 7ux1sEy6ZXav2My9Ch+YUWp2cxuUNAWhKZndvOtpt0ZRjTNn8fgaQmAqfFod5Af8B+yOFsdOZxX +LcEXgfRt9rqlgZopUQ8hBlTtNz5/UJm656sykE8MdHua5EhuMQyar+S/b+QNnLHjpQGIyPNYzo nnzfNtKH5fcLX1HqnqStndtxi989lJkick X-Received: by 2002:a05:6102:6d0:b0:5fe:f4b9:fe44 with SMTP id ada2fe7eead31-6027d12f892mr1605233137.14.1773832010379; Wed, 18 Mar 2026 04:06:50 -0700 (PDT) MIME-Version: 1.0 From: jian he Date: Wed, 18 Mar 2026 19:06:14 +0800 X-Gm-Features: AaiRm52H9GR1ReMh_KXdQ-Sw3gUqNVHCMvH-6Es9btJqpFFU0tJ1xSphga7LO_4 Message-ID: Subject: Avoid some table rewrites for ALTER TABLE .. SET DATA TYPE array coerce To: PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000decaad064d4a7258" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000decaad064d4a7258 Content-Type: text/plain; charset="UTF-8" Hi. Context: https://git.postgresql.org/cgit/postgresql.git/commit/?id=3c5926301aea476025f118159688a6a88b2738bc Also see build_coercion_expression, COERCION_PATH_ARRAYCOERCE handling. It's doable to skip a table rewrite when changing a column's data type from one array type to another. We just need some logic to handle ArrayCoerceExpr within ATColumnChangeRequiresRewrite. ArrayCoerceExpr have two node expression, ``arg`` and ``elemexpr``, therefore ATColumnChangeRequiresRewrite, the old single ``FOR(;;)`` loop is not enough, we need recursive walking through ArrayCoerceExpr->arg and ArrayCoerceExpr->elemexpr. Please see the attached POC. DEMO: create table rewriteme (id serial primary key, foo float, bar timestamptz); begin; alter table rewriteme add column ttz_arr timestamptz[]; set timezone to 'UTC'; alter table rewriteme alter column bar type timestamp; ---- no table rewrite with PATCH, require table rewrite in HEAD alter table rewriteme alter column ttz_arr type timestamp[]; rollback; CREATE DOMAIN domain1 as INT; CREATE TABLE test_set_col_type(a INT[]); ---- no table rewrite with PATCH, require table rewrite in HEAD ALTER TABLE test_set_col_type ALTER COLUMN a SET DATA TYPE domain1[]; ---- no table rewrite with PATCH, require table rewrite in HEAD ALTER TABLE test_set_col_type ALTER COLUMN a SET DATA TYPE INT[]; -- jian https://www.enterprisedb.com/ --000000000000decaad064d4a7258 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Avoid-some-table-rewrites-for-ALTER-TABLE-.-SET-DATA-TYPE-array-c.patch" Content-Disposition: attachment; filename="v1-0001-Avoid-some-table-rewrites-for-ALTER-TABLE-.-SET-DATA-TYPE-array-c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvxnegq0 RnJvbSAwNzdiM2NiMjkwZjcxNjFmNjY2MjFhYWE3NTZmMmVkYzg4ZDdhOThhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTggTWFyIDIwMjYgMTk6MDM6MDEgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx IDEvMV0gQXZvaWQgc29tZSB0YWJsZSByZXdyaXRlcyBmb3IgQUxURVIgVEFCTEUgLi4gU0VUIERB VEEKIFRZUEUgYXJyYXkgY29lcmNlCgpDb250ZXh0OiBodHRwczovL2dpdC5wb3N0Z3Jlc3FsLm9y Zy9jZ2l0L3Bvc3RncmVzcWwuZ2l0L2NvbW1pdC8/aWQ9M2M1OTI2MzAxYWVhNDc2MDI1ZjExODE1 OTY4OGE2YTg4YjI3MzhiYwpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpDb21taXRm ZXN0OiBodHRwczovL2NvbW1pdGZlc3QucG9zdGdyZXNxbC5vcmcvcGF0Y2gKLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgIHwgMTI2ICsrKysrKysrKysrKysr Ky0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V2ZW50X3RyaWdnZXIub3V0IHwgICA1 ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZmFzdF9kZWZhdWx0Lm91dCAgfCAgMTMgKysK IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V2ZW50X3RyaWdnZXIuc3FsICAgICAgfCAgIDQgKwogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZmFzdF9kZWZhdWx0LnNxbCAgICAgICB8ICAxMyArKwogNSBmaWxl cyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYwppbmRleCA2N2U0MmU1ZGYyOS4uM2QwZjViNWVlMzkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCkBAIC02NTksNiArNjU5LDggQEAgc3RhdGljIHZvaWQgQVRQcmVwQWx0 ZXJDb2x1bW5UeXBlKExpc3QgKip3cXVldWUsCiAJCQkJCQkJCSAgQWx0ZXJUYWJsZUNtZCAqY21k LCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCQkJCQkJICBBbHRlclRhYmxlVXRpbGl0eUNvbnRleHQg KmNvbnRleHQpOwogc3RhdGljIGJvb2wgQVRDb2x1bW5DaGFuZ2VSZXF1aXJlc1Jld3JpdGUoTm9k ZSAqZXhwciwgQXR0ck51bWJlciB2YXJhdHRubyk7CitzdGF0aWMgdm9pZCBBVENvbHVtbkNoYW5n ZVJlcXVpcmVzUmV3cml0ZVdhbGtlcihOb2RlICpleHByLCBBdHRyTnVtYmVyIHZhcmF0dG5vLAor CQkJCQkJCQkJCQkJYm9vbCAqbmVlZF9yZXdyaXRlKTsKIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFU RXhlY0FsdGVyQ29sdW1uVHlwZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwK IAkJCQkJCQkJCQkgICBBbHRlclRhYmxlQ21kICpjbWQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIHN0 YXRpYyB2b2lkIFJlbWVtYmVyQWxsRGVwZW5kZW50Rm9yUmVidWlsZGluZyhBbHRlcmVkVGFibGVJ bmZvICp0YWIsIEFsdGVyVGFibGVUeXBlIHN1YnR5cGUsCkBAIC0xNDkxMSw4ICsxNDkxMyw5IEBA IEFUUHJlcEFsdGVyQ29sdW1uVHlwZShMaXN0ICoqd3F1ZXVlLAogICoKICAqIC0gdGhlIG9sZCB0 eXBlIGlzIGJpbmFyeSBjb2VyY2libGUgdG8gdGhlIG5ldyB0eXBlCiAgKiAtIHRoZSBuZXcgdHlw ZSBpcyBhbiB1bmNvbnN0cmFpbmVkIGRvbWFpbiBvdmVyIHRoZSBvbGQgdHlwZQorICogKiAtIHRo ZSBuZXcgdHlwZSBpcyBhbiB1bmNvbnN0cmFpbmVkIGRvbWFpbiBhcnJheSBvdmVyIHRoZSBvbGQg dHlwZQogICogLSB7TkVXLE9MRH0gb3Ige09MRCxORVd9IGlzIHt0aW1lc3RhbXB0eix0aW1lc3Rh bXB9IGFuZCB0aGUgdGltZXpvbmUgaXMgVVRDCi0gKgorICogLSB7TkVXLE9MRH0gb3Ige09MRCxO RVd9IGlzIHt0aW1lc3RhbXB0eltdLHRpbWVzdGFtcFtdfSBhbmQgdGhlIHRpbWV6b25lIGlzIFVU QwogICogSW4gdGhlIGNhc2Ugb2YgYSBjb25zdHJhaW5lZCBkb21haW4sIHdlIGNvdWxkIGdldCBi eSB3aXRoIHNjYW5uaW5nIHRoZQogICogdGFibGUgYW5kIGNoZWNraW5nIHRoZSBjb25zdHJhaW50 IHJhdGhlciB0aGFuIGFjdHVhbGx5IHJld3JpdGluZyBpdCwgYnV0IHdlCiAgKiBkb24ndCBjdXJy ZW50bHkgdHJ5IHRvIGRvIHRoYXQuCkBAIC0xNDkyMCw0MiArMTQ5MjMsMTA3IEBAIEFUUHJlcEFs dGVyQ29sdW1uVHlwZShMaXN0ICoqd3F1ZXVlLAogc3RhdGljIGJvb2wKIEFUQ29sdW1uQ2hhbmdl UmVxdWlyZXNSZXdyaXRlKE5vZGUgKmV4cHIsIEF0dHJOdW1iZXIgdmFyYXR0bm8pCiB7CisJYm9v bAkJbmVlZF9yZXdyaXRlID0gZmFsc2U7CisKIAlBc3NlcnQoZXhwciAhPSBOVUxMKTsKIAotCWZv ciAoOzspCisJQVRDb2x1bW5DaGFuZ2VSZXF1aXJlc1Jld3JpdGVXYWxrZXIoZXhwciwKKwkJCQkJ CQkJCQl2YXJhdHRubywKKwkJCQkJCQkJCQkmbmVlZF9yZXdyaXRlKTsKKworCXJldHVybiBuZWVk X3Jld3JpdGU7Cit9CisKK3N0YXRpYyB2b2lkCitBVENvbHVtbkNoYW5nZVJlcXVpcmVzUmV3cml0 ZVdhbGtlcihOb2RlICpleHByLCBBdHRyTnVtYmVyIHZhcmF0dG5vLAorCQkJCQkJCQkJYm9vbCAq bmVlZF9yZXdyaXRlKQoreworCWlmICgqbmVlZF9yZXdyaXRlKQorCQlyZXR1cm47CisKKwlpZiAo SXNBKGV4cHIsIFZhcikpCiAJewotCQkvKiBvbmx5IG9uZSB2YXJubywgc28gbm8gbmVlZCB0byBj aGVjayB0aGF0ICovCi0JCWlmIChJc0EoZXhwciwgVmFyKSAmJiAoKFZhciAqKSBleHByKS0+dmFy YXR0bm8gPT0gdmFyYXR0bm8pCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWVsc2UgaWYgKElzQShleHBy LCBSZWxhYmVsVHlwZSkpCi0JCQlleHByID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAqKSBleHBy KS0+YXJnOwotCQllbHNlIGlmIChJc0EoZXhwciwgQ29lcmNlVG9Eb21haW4pKQorCQlWYXIJCSAg ICp2YXIgPSAoVmFyICopIGV4cHI7CisKKwkJaWYgKHZhci0+dmFyYXR0bm8gIT0gdmFyYXR0bm8p CiAJCXsKLQkJCUNvZXJjZVRvRG9tYWluICpkID0gKENvZXJjZVRvRG9tYWluICopIGV4cHI7CisJ CQkqbmVlZF9yZXdyaXRlID0gdHJ1ZTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwllbHNlIGlmIChJ c0EoZXhwciwgUmVsYWJlbFR5cGUpKQorCXsKKwkJUmVsYWJlbFR5cGUgKnIgPSAoUmVsYWJlbFR5 cGUgKikgZXhwcjsKKworCQlBVENvbHVtbkNoYW5nZVJlcXVpcmVzUmV3cml0ZVdhbGtlcigoTm9k ZSAqKSByLT5hcmcsCisJCQkJCQkJCQkJCXZhcmF0dG5vLAorCQkJCQkJCQkJCQluZWVkX3Jld3Jp dGUpOworCisJCXJldHVybjsKKwl9CisJZWxzZSBpZiAoSXNBKGV4cHIsIEFycmF5Q29lcmNlRXhw cikpCisJeworCQlBcnJheUNvZXJjZUV4cHIgKmFjb2VyY2UgPSAoQXJyYXlDb2VyY2VFeHByICop IGV4cHI7CisKKwkJQVRDb2x1bW5DaGFuZ2VSZXF1aXJlc1Jld3JpdGVXYWxrZXIoKE5vZGUgKikg YWNvZXJjZS0+YXJnLAorCQkJCQkJCQkJCQl2YXJhdHRubywKKwkJCQkJCQkJCQkJbmVlZF9yZXdy aXRlKTsKIAotCQkJaWYgKERvbWFpbkhhc0NvbnN0cmFpbnRzKGQtPnJlc3VsdHR5cGUsIE5VTEwp KQotCQkJCXJldHVybiB0cnVlOwotCQkJZXhwciA9IChOb2RlICopIGQtPmFyZzsKKwkJQVRDb2x1 bW5DaGFuZ2VSZXF1aXJlc1Jld3JpdGVXYWxrZXIoKE5vZGUgKikgYWNvZXJjZS0+ZWxlbWV4cHIs CisJCQkJCQkJCQkJCXZhcmF0dG5vLAorCQkJCQkJCQkJCQluZWVkX3Jld3JpdGUpOworCisJCXJl dHVybjsKKwl9CisJZWxzZSBpZiAoSXNBKGV4cHIsIENvZXJjZVRvRG9tYWluKSkKKwl7CisJCUNv ZXJjZVRvRG9tYWluICpkID0gKENvZXJjZVRvRG9tYWluICopIGV4cHI7CisKKwkJaWYgKERvbWFp bkhhc0NvbnN0cmFpbnRzKGQtPnJlc3VsdHR5cGUsIE5VTEwpKQorCQl7CisJCQkqbmVlZF9yZXdy aXRlID0gdHJ1ZTsKKwkJCXJldHVybjsKIAkJfQotCQllbHNlIGlmIChJc0EoZXhwciwgRnVuY0V4 cHIpKQorCisJCUFUQ29sdW1uQ2hhbmdlUmVxdWlyZXNSZXdyaXRlV2Fsa2VyKChOb2RlICopIGQt PmFyZywKKwkJCQkJCQkJCQkJdmFyYXR0bm8sCisJCQkJCQkJCQkJCW5lZWRfcmV3cml0ZSk7CisK KwkJcmV0dXJuOworCX0KKwllbHNlIGlmIChJc0EoZXhwciwgRnVuY0V4cHIpKQorCXsKKwkJRnVu Y0V4cHIgICAqZiA9IChGdW5jRXhwciAqKSBleHByOworCisJCXN3aXRjaCAoZi0+ZnVuY2lkKQog CQl7Ci0JCQlGdW5jRXhwciAgICpmID0gKEZ1bmNFeHByICopIGV4cHI7Ci0KLQkJCXN3aXRjaCAo Zi0+ZnVuY2lkKQotCQkJewotCQkJCWNhc2UgRl9USU1FU1RBTVBUWl9USU1FU1RBTVA6Ci0JCQkJ Y2FzZSBGX1RJTUVTVEFNUF9USU1FU1RBTVBUWjoKLQkJCQkJaWYgKFRpbWVzdGFtcFRpbWVzdGFt cFR6UmVxdWlyZXNSZXdyaXRlKCkpCi0JCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQkJZWxzZQotCQkJ CQkJZXhwciA9IGxpbml0aWFsKGYtPmFyZ3MpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0Ogot CQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KKwkJCWNhc2UgRl9USU1FU1RBTVBUWl9USU1FU1RBTVA6 CisJCQljYXNlIEZfVElNRVNUQU1QX1RJTUVTVEFNUFRaOgorCQkJCWlmIChUaW1lc3RhbXBUaW1l c3RhbXBUelJlcXVpcmVzUmV3cml0ZSgpKQorCQkJCXsKKwkJCQkJKm5lZWRfcmV3cml0ZSA9IHRy dWU7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJZXhwciA9IGxp bml0aWFsKGYtPmFyZ3MpOworCQkJCQlBVENvbHVtbkNoYW5nZVJlcXVpcmVzUmV3cml0ZVdhbGtl cihleHByLAorCQkJCQkJCQkJCQkJCQl2YXJhdHRubywKKwkJCQkJCQkJCQkJCQkJbmVlZF9yZXdy aXRlKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ eworCQkJCQkqbmVlZF9yZXdyaXRlID0gdHJ1ZTsKKwkJCQkJcmV0dXJuOworCQkJCX0KIAkJfQot CQllbHNlCi0JCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoIUlzQShleHByLCBDYXNlVGVz dEV4cHIpKQorCXsKKwkJKm5lZWRfcmV3cml0ZSA9IHRydWU7CisJCXJldHVybjsKIAl9CiB9CiAK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXZlbnRfdHJpZ2dlci5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V2ZW50X3RyaWdnZXIub3V0CmluZGV4IGY4OTdi MDc5ZTY3Li45MmY2MjM4MzMzYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ldmVudF90cmlnZ2VyLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V2ZW50 X3RyaWdnZXIub3V0CkBAIC02MDksMTMgKzYwOSwxOCBAQCBEUk9QIE1BVEVSSUFMSVpFRCBWSUVX IGhlYXBtdjsKIC0tIHNob3VsZG4ndCB0cmlnZ2VyIGEgdGFibGVfcmV3cml0ZSBldmVudAogYWx0 ZXIgdGFibGUgcmV3cml0ZW1lIGFsdGVyIGNvbHVtbiBmb28gdHlwZSBudW1lcmljKDEyLDQpOwog YmVnaW47CithbHRlciB0YWJsZSByZXdyaXRlbWUgYWRkIGNvbHVtbiB6b28gdGltZXN0YW1wdHpb XTsKIHNldCB0aW1lem9uZSB0byAnVVRDJzsKIGFsdGVyIHRhYmxlIHJld3JpdGVtZSBhbHRlciBj b2x1bW4gYmFyIHR5cGUgdGltZXN0YW1wOworYWx0ZXIgdGFibGUgcmV3cml0ZW1lIGFsdGVyIGNv bHVtbiB6b28gdHlwZSB0aW1lc3RhbXBbXTsKIHNldCB0aW1lem9uZSB0byAnMCc7CiBhbHRlciB0 YWJsZSByZXdyaXRlbWUgYWx0ZXIgY29sdW1uIGJhciB0eXBlIHRpbWVzdGFtcHR6OworYWx0ZXIg dGFibGUgcmV3cml0ZW1lIGFsdGVyIGNvbHVtbiB6b28gdHlwZSB0aW1lc3RhbXB0eltdOwogc2V0 IHRpbWV6b25lIHRvICdFdXJvcGUvTG9uZG9uJzsKIGFsdGVyIHRhYmxlIHJld3JpdGVtZSBhbHRl ciBjb2x1bW4gYmFyIHR5cGUgdGltZXN0YW1wOyAtLSBkb2VzIHJld3JpdGUKIE5PVElDRTogIFRh YmxlICdyZXdyaXRlbWUnIGlzIGJlaW5nIHJld3JpdHRlbiAocmVhc29uID0gNCkKK2FsdGVyIHRh YmxlIHJld3JpdGVtZSBhbHRlciBjb2x1bW4gem9vIHR5cGUgdGltZXN0YW1wW107IC0tIGRvZXMg cmV3cml0ZQorTk9USUNFOiAgVGFibGUgJ3Jld3JpdGVtZScgaXMgYmVpbmcgcmV3cml0dGVuIChy ZWFzb24gPSA0KQogcm9sbGJhY2s7CiAtLSB0eXBlZCB0YWJsZXMgYXJlIHJld3JpdHRlbiB3aGVu IHRoZWlyIHR5cGUgY2hhbmdlcy4gIERvbid0IGVtaXQgdGFibGUKIC0tIG5hbWUsIGJlY2F1c2Ug ZmlyaW5nIG9yZGVyIGlzIG5vdCBzdGFibGUuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2Zhc3RfZGVmYXVsdC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zh c3RfZGVmYXVsdC5vdXQKaW5kZXggZmZiYzQ3MDg5YjEuLjczMjFlOTc1YzU1IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Zhc3RfZGVmYXVsdC5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9mYXN0X2RlZmF1bHQub3V0CkBAIC0zODQsNiArMzg0LDE5IEBA IERST1AgRE9NQUlOIGRvbWFpbjc7CiBEUk9QIERPTUFJTiBkb21haW44OwogRFJPUCBET01BSU4g ZG9tYWluOTsKIERST1AgRlVOQ1RJT04gZm9vKElOVCk7CitDUkVBVEUgRE9NQUlOIGRvbWFpbjEg YXMgSU5UOworQ1JFQVRFIERPTUFJTiBkb21haW4yIGFzIElOVFtdOworQ1JFQVRFIERPTUFJTiBk b21haW4zIEFTIGRvbWFpbjFbXTsKK0NSRUFURSBUQUJMRSB0ZXN0X3NldF9jb2xfdHlwZShhIElO VFtdLCBiIElOVFtdKTsKK0FMVEVSIFRBQkxFIHRlc3Rfc2V0X2NvbF90eXBlIEFMVEVSIENPTFVN TiBhIFNFVCBEQVRBIFRZUEUgZG9tYWluMVtdOyAtLSBubyB0YWJsZSByZXdyaXRlCitBTFRFUiBU QUJMRSB0ZXN0X3NldF9jb2xfdHlwZSBBTFRFUiBDT0xVTU4gYSBTRVQgREFUQSBUWVBFIElOVFtd OyAtLSBubyB0YWJsZSByZXdyaXRlCitBTFRFUiBUQUJMRSB0ZXN0X3NldF9jb2xfdHlwZSBBTFRF UiBDT0xVTU4gYSBTRVQgREFUQSBUWVBFIGRvbWFpbjIgVVNJTkcgYTsgLS0gbm8gdGFibGUgcmV3 cml0ZQorQUxURVIgVEFCTEUgdGVzdF9zZXRfY29sX3R5cGUgQUxURVIgQ09MVU1OIGEgU0VUIERB VEEgVFlQRSBkb21haW4zOyAtLSBubyB0YWJsZSByZXdyaXRlCitBTFRFUiBUQUJMRSB0ZXN0X3Nl dF9jb2xfdHlwZSBBTFRFUiBDT0xVTU4gYSBTRVQgREFUQSBUWVBFIElOVFtdOyAtLSBubyB0YWJs ZSByZXdyaXRlCitBTFRFUiBUQUJMRSB0ZXN0X3NldF9jb2xfdHlwZSBBTFRFUiBDT0xVTU4gYSBT RVQgREFUQSBUWVBFIGRvbWFpbjMgdXNpbmcgYjsgLS0gdGFibGUgcmV3cml0ZQorTk9USUNFOiAg cmV3cml0aW5nIHRhYmxlIHRlc3Rfc2V0X2NvbF90eXBlIGZvciByZWFzb24gNAorRFJPUCBUQUJM RSB0ZXN0X3NldF9jb2xfdHlwZTsKK0RST1AgRE9NQUlOIGRvbWFpbjEsIGRvbWFpbjIsIGRvbWFp bjM7CiAtLSBGYWxsIGJhY2sgdG8gZnVsbCByZXdyaXRlIGZvciB2b2xhdGlsZSBleHByZXNzaW9u cwogQ1JFQVRFIFRBQkxFIFQocGsgSU5UIE5PVCBOVUxMIFBSSU1BUlkgS0VZKTsKIElOU0VSVCBJ TlRPIFQgVkFMVUVTICgxKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V2ZW50 X3RyaWdnZXIuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXZlbnRfdHJpZ2dlci5zcWwKaW5k ZXggMzJlOWJiNThjNWUuLjNkOWIxZjRmNjIzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9ldmVudF90cmlnZ2VyLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ldmVudF90 cmlnZ2VyLnNxbApAQCAtNDQ1LDEyICs0NDUsMTYgQEAgRFJPUCBNQVRFUklBTElaRUQgVklFVyBo ZWFwbXY7CiAtLSBzaG91bGRuJ3QgdHJpZ2dlciBhIHRhYmxlX3Jld3JpdGUgZXZlbnQKIGFsdGVy IHRhYmxlIHJld3JpdGVtZSBhbHRlciBjb2x1bW4gZm9vIHR5cGUgbnVtZXJpYygxMiw0KTsKIGJl Z2luOworYWx0ZXIgdGFibGUgcmV3cml0ZW1lIGFkZCBjb2x1bW4gem9vIHRpbWVzdGFtcHR6W107 CiBzZXQgdGltZXpvbmUgdG8gJ1VUQyc7CiBhbHRlciB0YWJsZSByZXdyaXRlbWUgYWx0ZXIgY29s dW1uIGJhciB0eXBlIHRpbWVzdGFtcDsKK2FsdGVyIHRhYmxlIHJld3JpdGVtZSBhbHRlciBjb2x1 bW4gem9vIHR5cGUgdGltZXN0YW1wW107CiBzZXQgdGltZXpvbmUgdG8gJzAnOwogYWx0ZXIgdGFi bGUgcmV3cml0ZW1lIGFsdGVyIGNvbHVtbiBiYXIgdHlwZSB0aW1lc3RhbXB0ejsKK2FsdGVyIHRh YmxlIHJld3JpdGVtZSBhbHRlciBjb2x1bW4gem9vIHR5cGUgdGltZXN0YW1wdHpbXTsKIHNldCB0 aW1lem9uZSB0byAnRXVyb3BlL0xvbmRvbic7CiBhbHRlciB0YWJsZSByZXdyaXRlbWUgYWx0ZXIg Y29sdW1uIGJhciB0eXBlIHRpbWVzdGFtcDsgLS0gZG9lcyByZXdyaXRlCithbHRlciB0YWJsZSBy ZXdyaXRlbWUgYWx0ZXIgY29sdW1uIHpvbyB0eXBlIHRpbWVzdGFtcFtdOyAtLSBkb2VzIHJld3Jp dGUKIHJvbGxiYWNrOwogCiAtLSB0eXBlZCB0YWJsZXMgYXJlIHJld3JpdHRlbiB3aGVuIHRoZWly IHR5cGUgY2hhbmdlcy4gIERvbid0IGVtaXQgdGFibGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2Zhc3RfZGVmYXVsdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mYXN0X2Rl ZmF1bHQuc3FsCmluZGV4IDhmZjI5Y2YyNjk3Li43ZjFmYjIzYzRlNSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZmFzdF9kZWZhdWx0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9mYXN0X2RlZmF1bHQuc3FsCkBAIC0zNDUsNiArMzQ1LDE5IEBAIERST1AgRE9NQUlOIGRv bWFpbjg7CiBEUk9QIERPTUFJTiBkb21haW45OwogRFJPUCBGVU5DVElPTiBmb28oSU5UKTsKIAor Q1JFQVRFIERPTUFJTiBkb21haW4xIGFzIElOVDsKK0NSRUFURSBET01BSU4gZG9tYWluMiBhcyBJ TlRbXTsKK0NSRUFURSBET01BSU4gZG9tYWluMyBBUyBkb21haW4xW107CitDUkVBVEUgVEFCTEUg dGVzdF9zZXRfY29sX3R5cGUoYSBJTlRbXSwgYiBJTlRbXSk7CitBTFRFUiBUQUJMRSB0ZXN0X3Nl dF9jb2xfdHlwZSBBTFRFUiBDT0xVTU4gYSBTRVQgREFUQSBUWVBFIGRvbWFpbjFbXTsgLS0gbm8g dGFibGUgcmV3cml0ZQorQUxURVIgVEFCTEUgdGVzdF9zZXRfY29sX3R5cGUgQUxURVIgQ09MVU1O IGEgU0VUIERBVEEgVFlQRSBJTlRbXTsgLS0gbm8gdGFibGUgcmV3cml0ZQorQUxURVIgVEFCTEUg dGVzdF9zZXRfY29sX3R5cGUgQUxURVIgQ09MVU1OIGEgU0VUIERBVEEgVFlQRSBkb21haW4yIFVT SU5HIGE7IC0tIG5vIHRhYmxlIHJld3JpdGUKK0FMVEVSIFRBQkxFIHRlc3Rfc2V0X2NvbF90eXBl IEFMVEVSIENPTFVNTiBhIFNFVCBEQVRBIFRZUEUgZG9tYWluMzsgLS0gbm8gdGFibGUgcmV3cml0 ZQorQUxURVIgVEFCTEUgdGVzdF9zZXRfY29sX3R5cGUgQUxURVIgQ09MVU1OIGEgU0VUIERBVEEg VFlQRSBJTlRbXTsgLS0gbm8gdGFibGUgcmV3cml0ZQorQUxURVIgVEFCTEUgdGVzdF9zZXRfY29s X3R5cGUgQUxURVIgQ09MVU1OIGEgU0VUIERBVEEgVFlQRSBkb21haW4zIHVzaW5nIGI7IC0tIHRh YmxlIHJld3JpdGUKK0RST1AgVEFCTEUgdGVzdF9zZXRfY29sX3R5cGU7CitEUk9QIERPTUFJTiBk b21haW4xLCBkb21haW4yLCBkb21haW4zOworCiAtLSBGYWxsIGJhY2sgdG8gZnVsbCByZXdyaXRl IGZvciB2b2xhdGlsZSBleHByZXNzaW9ucwogQ1JFQVRFIFRBQkxFIFQocGsgSU5UIE5PVCBOVUxM IFBSSU1BUlkgS0VZKTsKIAotLSAKMi4zNC4xCgo= --000000000000decaad064d4a7258--