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 1vP66A-004MRb-1L for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Nov 2025 21:33:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vP668-00De3B-28 for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Nov 2025 21:33:48 +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 1vP668-00De33-0M for pgsql-hackers@lists.postgresql.org; Fri, 28 Nov 2025 21:33:48 +0000 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vP665-0020eh-1f for pgsql-hackers@postgresql.org; Fri, 28 Nov 2025 21:33:47 +0000 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-b7355f6ef12so458366666b.3 for ; Fri, 28 Nov 2025 13:33:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764365625; x=1764970425; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=tqd58m4TtKcpoteLmZL0cahNWuspiDHmpFKXvf5jJ6U=; b=IZXrpVvMQnDyvY9A0q2iZU0rwzFbJNOMhr8JEaiXELK+i5I+Xf1WKKK7v8iYcsMsWa +kQuRkFmb9Uk5bHT9QIHpKxycKjIOZ4+PbjQVW9ha3XcAL9OwrFfef/fuwEdNopdoULM NlGy+5+n2oaRF3mCPqsWC0paAbpa1kZ6N6D4bOrlWbgk9Y+8/O3FvTKA2TWoMYhQ5alR bsZIkJd1Tw8dDHVSEcNlQbW5MGWqs1xU7WAbmxi03S4LFgOeEEEdQW1mTuYMF5ol8Uey 3JYWnrVwhWRId8o+FCmo/v0yFe2Bu+YOoKcPFf9aFIZCBSXsis/1c5e9mfTU/vXa/KvK HpyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764365625; x=1764970425; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=tqd58m4TtKcpoteLmZL0cahNWuspiDHmpFKXvf5jJ6U=; b=MbAxMr7ij+1QLpIuW9jmFppgHAEkiW9InnOW1cddtPeSlM+BW7moSEde2CTa0E4I7f nq0NJSJ/WeADxG3Gk/Lvd7qtokuipXnZZB8qfsmYy29P93bB9AaSgvkQyioKKiJHRi/M 1kPJ6KfmMarEpx/Mhi0Zhm4twiMZ1ESA+T9kLQiM/O03N6LXS/JUnAfpSDxT/0KLpJ3I wA3InFAAdUQAizK3o8f5Y1z7DI9H1yeUOA6LoUJjKGRuK5jjdbJkgoZp201Nz/KWatGH LT3LCb/egVU3v7HumCPP/FebkaBhBD3jl55oIWARAHQwcfeJ7VaZ0GMh+nN+ryU7AFK7 ppww== X-Gm-Message-State: AOJu0Yx99gt/qL7xLjg44Sg1jz1cWAEIyh62ylQJLe3xRT7eK2WSOFr9 tiY0wxkerWMOstCIuArbgeaTylGLp2W7D7xdZccFez4g7QkMnXfjgB4L X-Gm-Gg: ASbGncs06B0cFlccK74tcUTSLacvfw3Hm3UOFWvwvmeoV1REE5Wb6GVz3EskK08Lvf7 ox8qF9mBDHSd1ZpSfhv189BJzv47fgSWOrKDA+QrJmaESBb1OgJpnKtSs8wKiGKcLuEOq40cmRc HMHQ7Ay+9Gdte7w6LnpnzYYHQAt90j8W2ESs9PAIBRXMeUr4Yh8UUMXq4EPDdZsbiamob+bbPu2 AcGOu7M2amD6IEBnp0CkS2814F1E91DKfZcHmmPwPohNuTLPR7f4cFtF05MTcDiwCU6v+hA0YNF ZMGWa8serws8eXDNpMx6LWnRrQDW7bOgpgwO+ymNtBnpZoTJE8/35qpZsN7tkhzLHqRG3xTje+U rNfWRxUsczjE8/AyLyI5GrxI7BzViOdw/5zCbrtq54+V04bAblsq3f2aPCfWtzWnW6MY6n2d3rc YANO/5bC7/MOqTSv0= X-Google-Smtp-Source: AGHT+IG17BwWuHXiuf6f/GemY/wcXxJPwLE1/hH7A+GY/QN9ts+y/NwDLnLbcuMGYuGZSTRfxKYAmA== X-Received: by 2002:a17:907:7f1b:b0:b73:7d96:5c97 with SMTP id a640c23a62f3a-b76716db9aemr2947226166b.34.1764365624281; Fri, 28 Nov 2025 13:33:44 -0800 (PST) Received: from [192.168.2.32] ([165.225.27.7]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b76f5a4a652sm542428866b.65.2025.11.28.13.33.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 28 Nov 2025 13:33:43 -0800 (PST) Content-Type: multipart/mixed; boundary="------------lfuu18oJZn0R8XM21SSz5T4f" Message-ID: <2df720fb-664b-480e-96f7-19cc141762d3@gmail.com> Date: Fri, 28 Nov 2025 22:33:42 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Consistently use palloc_object() and palloc_array() To: Michael Paquier Cc: pgsql-hackers References: Content-Language: en-US From: David Geier In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------lfuu18oJZn0R8XM21SSz5T4f Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Michael! On 27.11.2025 01:24, Michael Paquier wrote: > On Wed, Nov 26, 2025 at 11:09:31PM +0100, David Geier wrote: >> I've changed all code to use the "new" palloc_object(), palloc_array(), >> palloc0_object(), palloc0_array, repalloc_array() and repalloc0_array() >> macros. This makes the code more readable and more consistent. >> >> The patch is pretty big but potential merge conflicts should be easy to >> resolve. If preferred, I can also further split up the patch, e.g. >> directory by directory or high impact files first. > > The backpatching extra-pain argument indeed comes into mind first when > it comes to such changes, but perhaps we should just bite the bullet > and encourage the new allocation styles across the tree, as you are > doing here. I'm not completely sure if it would make sense to split > things up, if we do I would do it on a subdirectory basis like to > suggest, perhaps, like contrib/, src/backend/executor/, etc. to > balance the blast damage. Did you use some kind of automation to find > all of these? If yes, what did you use? I thought again about splitting up the patch. I'm not sure how useful this really is. If a single committer takes this on, then it doesn't really matter. He can apply the patch but then commit directory by directory or in any other way he deems best. If we want to divide the work among multiple committers splitting might be more useful. Just tell me what you prefer and I'll provide the patch accordingly. >> The patch is passing "meson test" and I've additionally wrote a script >> that parses the patch file and verifies that every two corresponding + >> and - lines match (e.g. palloc0() replaced by palloc0_array() or >> palloc0_object(), the same for palloc() and repalloc(), additionally >> some checks to make sure the conversion to the _array() variant is >> correct). > > It may be an idea to share that as well, so as your checks could be > replicated rather than partially re-guessed. I've attached the script. You can run it via python3 verify_palloc_pairs.py patch_file Disclaimer: The script is a bit of a mess. It doesn't check repalloc() and it still reports five conversions as erroneous while they're actually correct. I checked them manually. I left it at that because the vast majority of changes it processes correctly and all tests pass. The repalloc() occurrences I also checked manually. -- David Geier --------------lfuu18oJZn0R8XM21SSz5T4f Content-Type: text/x-python; charset=UTF-8; name="verify_palloc_pairs.py" Content-Disposition: attachment; filename="verify_palloc_pairs.py" Content-Transfer-Encoding: base64 IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHN5cwppbXBvcnQgcmUKZnJvbSB0eXBp bmcgaW1wb3J0IExpc3QsIFR1cGxlLCBPcHRpb25hbCwgRGljdApmcm9tIGRhdGFjbGFzc2Vz IGltcG9ydCBkYXRhY2xhc3MKCkBkYXRhY2xhc3MKY2xhc3MgUGFsbG9jTGluZToKICAgIGxp bmVfbnVtOiBpbnQKICAgIGNvbnRlbnQ6IHN0cgogICAgZmlsZV9wYXRoOiBzdHIKICAgIHBh bGxvY190eXBlOiBzdHIgICMgJ3BhbGxvYycsICdwYWxsb2MwJywgJ3BhbGxvY19vYmplY3Qn LCAncGFsbG9jX2FycmF5JywgJ3BhbGxvYzBfb2JqZWN0JywgJ3BhbGxvYzBfYXJyYXknCiAg ICBpc19kZWxldGlvbjogYm9vbAogICAgCiAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAg ICBwcmVmaXggPSAiLSIgaWYgc2VsZi5pc19kZWxldGlvbiBlbHNlICIrIgogICAgICAgIHJl dHVybiBmIntwcmVmaXh9IExpbmUge3NlbGYubGluZV9udW19OiB7c2VsZi5jb250ZW50LnN0 cmlwKCl9IgoKZGVmIGV4dHJhY3RfcGFsbG9jX3R5cGUobGluZTogc3RyKSAtPiBPcHRpb25h bFtzdHJdOgogICAgIyBNYXRjaCBhbGwgcGFsbG9jIHZhcmlhbnRzCiAgICBwYXR0ZXJucyA9 IFsKICAgICAgICByJ1xicGFsbG9jMF9vYmplY3RccypcKCcsCiAgICAgICAgcidcYnBhbGxv YzBfYXJyYXlccypcKCcsCiAgICAgICAgcidcYnBhbGxvY19vYmplY3RccypcKCcsCiAgICAg ICAgcidcYnBhbGxvY19hcnJheVxzKlwoJywKICAgICAgICByJ1xicGFsbG9jMFxzKlwoJywK ICAgICAgICByJ1xicGFsbG9jXHMqXCgnCiAgICBdCiAgICAKICAgIGZvciBwYXR0ZXJuIGlu IHBhdHRlcm5zOgogICAgICAgIGlmIHJlLnNlYXJjaChwYXR0ZXJuLCBsaW5lKToKICAgICAg ICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocidcYihwYWxsb2MwPyg/Ol8oPzpvYmplY3R8YXJy YXkpKT8pXHMqXCgnLCBsaW5lKQogICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAg ICAgIHJldHVybiBtYXRjaC5ncm91cCgxKQogICAgCiAgICByZXR1cm4gTm9uZQoKZGVmIGlz X3plcm9faW5pdGlhbGl6ZWQocGFsbG9jX3R5cGU6IHN0cikgLT4gYm9vbDoKICAgIHJldHVy biBwYWxsb2NfdHlwZSBpbiBbJ3BhbGxvYzAnLCAncGFsbG9jMF9vYmplY3QnLCAncGFsbG9j MF9hcnJheSddCgpkZWYgcGFyc2VfcGF0Y2hfZmlsZShwYXRjaF9maWxlOiBzdHIpIC0+IExp c3RbVHVwbGVbUGFsbG9jTGluZSwgT3B0aW9uYWxbUGFsbG9jTGluZV1dXToKICAgIHRyeToK ICAgICAgICB3aXRoIG9wZW4ocGF0Y2hfZmlsZSwgJ3InLCBlbmNvZGluZz0ndXRmLTgnKSBh cyBmOgogICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKICAgIGV4Y2VwdCBGaWxl Tm90Rm91bmRFcnJvcjoKICAgICAgICBwcmludChmIkVycm9yOiBQYXRjaCBmaWxlICd7cGF0 Y2hfZmlsZX0nIG5vdCBmb3VuZC4iKQogICAgICAgIHN5cy5leGl0KDEpCiAgICBleGNlcHQg RXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcHJpbnQoZiJFcnJvciByZWFkaW5nIHBhdGNoIGZp bGU6IHtlfSIpCiAgICAgICAgc3lzLmV4aXQoMSkKICAgIAogICAgcGFpcnMgPSBbXQogICAg Y3VycmVudF9maWxlID0gIiIKICAgIGRlbGV0aW9uX2xpbmVzID0gW10gICMgVHJhY2sgcGVu ZGluZyBkZWxldGlvbnMKICAgIAogICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVz KToKICAgICAgICBsaW5lX2NvbnRlbnQgPSBsaW5lLnJzdHJpcCgpCiAgICAgICAgCiAgICAg ICAgIyBUcmFjayBjdXJyZW50IGZpbGUgYmVpbmcgcGF0Y2hlZAogICAgICAgIGlmIGxpbmVf Y29udGVudC5zdGFydHN3aXRoKCcrKysnKToKICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFy Y2gocidcK1wrXCsgYi8oLispJywgbGluZV9jb250ZW50KQogICAgICAgICAgICBpZiBtYXRj aDoKICAgICAgICAgICAgICAgIGN1cnJlbnRfZmlsZSA9IG1hdGNoLmdyb3VwKDEpCiAgICAg ICAgCiAgICAgICAgIyBIYW5kbGUgZGVsZXRpb24gbGluZXMKICAgICAgICBlbGlmIGxpbmVf Y29udGVudC5zdGFydHN3aXRoKCctJyk6CiAgICAgICAgICAgIHBhbGxvY190eXBlID0gZXh0 cmFjdF9wYWxsb2NfdHlwZShsaW5lX2NvbnRlbnQpCiAgICAgICAgICAgIGlmIHBhbGxvY190 eXBlOgogICAgICAgICAgICAgICAgZGVsZXRpb25fbGluZSA9IFBhbGxvY0xpbmUoCiAgICAg ICAgICAgICAgICAgICAgbGluZV9udW09aSArIDEsCiAgICAgICAgICAgICAgICAgICAgY29u dGVudD1saW5lX2NvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoPWN1cnJl bnRfZmlsZSwKICAgICAgICAgICAgICAgICAgICBwYWxsb2NfdHlwZT1wYWxsb2NfdHlwZSwK ICAgICAgICAgICAgICAgICAgICBpc19kZWxldGlvbj1UcnVlCiAgICAgICAgICAgICAgICAp CiAgICAgICAgICAgICAgICBkZWxldGlvbl9saW5lcy5hcHBlbmQoZGVsZXRpb25fbGluZSkK ICAgICAgICAKICAgICAgICAjIEhhbmRsZSBpbnNlcnRpb24gbGluZXMKICAgICAgICBlbGlm IGxpbmVfY29udGVudC5zdGFydHN3aXRoKCcrJyk6CiAgICAgICAgICAgIHBhbGxvY190eXBl ID0gZXh0cmFjdF9wYWxsb2NfdHlwZShsaW5lX2NvbnRlbnQpCiAgICAgICAgICAgIGlmIHBh bGxvY190eXBlOgogICAgICAgICAgICAgICAgaW5zZXJ0aW9uX2xpbmUgPSBQYWxsb2NMaW5l KAogICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtPWkgKyAxLAogICAgICAgICAgICAgICAg ICAgIGNvbnRlbnQ9bGluZV9jb250ZW50LAogICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0 aD1jdXJyZW50X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgcGFsbG9jX3R5cGU9cGFsbG9j X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXNfZGVsZXRpb249RmFsc2UKICAgICAgICAg ICAgICAgICkKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIyBUcnkgdG8gbWF0 Y2ggd2l0aCBhIHBlbmRpbmcgZGVsZXRpb24KICAgICAgICAgICAgICAgIG1hdGNoZWRfZGVs ZXRpb24gPSBOb25lCiAgICAgICAgICAgICAgICBmb3IgaiwgZGVsZXRpb24gaW4gZW51bWVy YXRlKGRlbGV0aW9uX2xpbmVzKToKICAgICAgICAgICAgICAgICAgICAjIFNpbXBsZSBoZXVy aXN0aWM6IG1hdGNoIGlmIHRoZXkncmUgY2xvc2UgYW5kIGluIHRoZSBzYW1lIGZpbGUKICAg ICAgICAgICAgICAgICAgICBpZiAoZGVsZXRpb24uZmlsZV9wYXRoID09IGN1cnJlbnRfZmls ZSBhbmQgCiAgICAgICAgICAgICAgICAgICAgICAgIGFicyhkZWxldGlvbi5saW5lX251bSAt IGluc2VydGlvbl9saW5lLmxpbmVfbnVtKSA8IDEwKToKICAgICAgICAgICAgICAgICAgICAg ICAgbWF0Y2hlZF9kZWxldGlvbiA9IGRlbGV0aW9uX2xpbmVzLnBvcChqKQogICAgICAgICAg ICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBw YWlycy5hcHBlbmQoKG1hdGNoZWRfZGVsZXRpb24sIGluc2VydGlvbl9saW5lKSkKICAgICAg ICAKICAgICAgICAjIEhhbmRsZSBjb250ZXh0IGxpbmVzIChyZXNldCBkZWxldGlvbiBidWZm ZXIgaWYgd2UndmUgbW92ZWQgcGFzdCB0aGUgY2hhbmdlKQogICAgICAgIGVsaWYgbGluZV9j b250ZW50LnN0YXJ0c3dpdGgoJyAnKSBvciBsaW5lX2NvbnRlbnQuc3RhcnRzd2l0aCgnQEAn KToKICAgICAgICAgICAgIyBLZWVwIHJlY2VudCBkZWxldGlvbnMsIGNsZWFyIG9sZCBvbmVz CiAgICAgICAgICAgIGRlbGV0aW9uX2xpbmVzID0gW2QgZm9yIGQgaW4gZGVsZXRpb25fbGlu ZXMgaWYgYWJzKGQubGluZV9udW0gLSAoaSArIDEpKSA8IDVdCiAgICAKICAgICMgQWRkIGFu eSB1bm1hdGNoZWQgZGVsZXRpb25zCiAgICBmb3IgZGVsZXRpb24gaW4gZGVsZXRpb25fbGlu ZXM6CiAgICAgICAgcGFpcnMuYXBwZW5kKChkZWxldGlvbiwgTm9uZSkpCiAgICAKICAgIHJl dHVybiBwYWlycwoKZGVmIGlzX2FycmF5X2FsbG9jYXRpb24obGluZTogc3RyKSAtPiBib29s OgogICAgIyBMb29rIGZvciBwYXR0ZXJucyBsaWtlOiBjb3VudCAqIHNpemVvZiwgc2l6ZW9m KC4uLikgKiBjb3VudCwgZXRjLgogICAgcGF0dGVybnMgPSBbCiAgICAgICAgcidcdytccypc KlxzKnNpemVvZlxzKlwoJywgICMgY291bnQgKiBzaXplb2YoCiAgICAgICAgcidzaXplb2Zc cypcKFteKV0rXClccypcKlxzKlx3KycsICAjIHNpemVvZiguLi4pICogY291bnQKICAgICAg ICByJ1woXHMqXHcrW14pXSpcKVxzKlwqXHMqc2l6ZW9mJywgICMgKGNvdW50KSAqIHNpemVv ZgogICAgICAgIHInc2l6ZW9mXHMqXChbXildK1wpXHMqXCpccypcKCcsICAjIHNpemVvZigu Li4pICogKGNvdW50KQogICAgICAgIHInc2l6ZW9mXHMqXChbXildK1wpXHMqXCpccypcZCsn LCAgIyBzaXplb2YoLi4uKSAqIG51bWJlcgogICAgICAgIHInXGQrXHMqXCpccypzaXplb2Zc cypcKCcsICAjIG51bWJlciAqIHNpemVvZigKICAgIF0KICAgIAogICAgZm9yIHBhdHRlcm4g aW4gcGF0dGVybnM6CiAgICAgICAgaWYgcmUuc2VhcmNoKHBhdHRlcm4sIGxpbmUpOgogICAg ICAgICAgICByZXR1cm4gVHJ1ZQogICAgCiAgICAjIENoZWNrIGZvciBtb3JlIGNvbXBsZXgg bXVsdGlwbGljYXRpb24gcGF0dGVybnMKICAgICMgVGhpcyBjYXRjaGVzIGNhc2VzIGxpa2U6 IGxlbnEgKiBzaXplb2YoYm9vbCksIG5wYXJ0cyAqIHNpemVvZihUeXBlKSwgZXRjLgogICAg aWYgcmUuc2VhcmNoKHInXGJcdytccypcKlxzKnNpemVvZlxzKlwoXHMqXHcrXHMqXCknLCBs aW5lKToKICAgICAgICByZXR1cm4gVHJ1ZQogICAgCiAgICAjIENoZWNrIGZvciBwYXJlbnRo ZXNpemVkIGV4cHJlc3Npb25zIHdpdGggc2l6ZW9mCiAgICBpZiByZS5zZWFyY2gocidcKFte KV0qXHcrW14pXSpcKVxzKlwqXHMqc2l6ZW9mJywgbGluZSk6CiAgICAgICAgcmV0dXJuIFRy dWUKICAgICAgICAKICAgIHJldHVybiBGYWxzZQoKZGVmIGlzX3NpbmdsZV9vYmplY3RfYWxs b2NhdGlvbihsaW5lOiBzdHIpIC0+IGJvb2w6CiAgICAjIExvb2sgZm9yIHBhdHRlcm5zIGxp a2U6IHNpemVvZihUeXBlKSB3aXRob3V0IG11bHRpcGxpY2F0aW9uCiAgICBpZiByZS5zZWFy Y2gocidzaXplb2ZccypcKFteKV0rXCkoPyFccypcKiknLCBsaW5lKToKICAgICAgICByZXR1 cm4gVHJ1ZQogICAgaWYgcmUuc2VhcmNoKHInc2l6ZW9mXHMqXChccypcKlxzKlx3K1xzKlwp JywgbGluZSk6ICAjIHNpemVvZigqcHRyKQogICAgICAgIHJldHVybiBUcnVlCiAgICByZXR1 cm4gRmFsc2UKCmRlZiB2ZXJpZnlfcGFpcihkZWxldGlvbjogT3B0aW9uYWxbUGFsbG9jTGlu ZV0sIGluc2VydGlvbjogT3B0aW9uYWxbUGFsbG9jTGluZV0pIC0+IFR1cGxlW2Jvb2wsIHN0 cl06CiAgICBpZiBkZWxldGlvbiBpcyBOb25lIGFuZCBpbnNlcnRpb24gaXMgTm9uZToKICAg ICAgICByZXR1cm4gRmFsc2UsICIgRW1wdHkgcGFpciIKICAgIAogICAgaWYgZGVsZXRpb24g aXMgTm9uZToKICAgICAgICByZXR1cm4gVHJ1ZSwgZiIgIE5ldyBwYWxsb2MgYWRkaXRpb246 IHtpbnNlcnRpb24ucGFsbG9jX3R5cGV9IgogICAgCiAgICBpZiBpbnNlcnRpb24gaXMgTm9u ZToKICAgICAgICByZXR1cm4gRmFsc2UsIGYiIFVubWF0Y2hlZCBkZWxldGlvbjoge2RlbGV0 aW9uLnBhbGxvY190eXBlfSAobm8gY29ycmVzcG9uZGluZyBpbnNlcnRpb24gZm91bmQpIgog ICAgCiAgICAjIENoZWNrIGlmIHplcm8taW5pdGlhbGl6YXRpb24gYmVoYXZpb3IgaXMgcHJl c2VydmVkCiAgICBkZWxldGlvbl9pc196ZXJvID0gaXNfemVyb19pbml0aWFsaXplZChkZWxl dGlvbi5wYWxsb2NfdHlwZSkKICAgIGluc2VydGlvbl9pc196ZXJvID0gaXNfemVyb19pbml0 aWFsaXplZChpbnNlcnRpb24ucGFsbG9jX3R5cGUpCiAgICAKICAgIGlmIGRlbGV0aW9uX2lz X3plcm8gIT0gaW5zZXJ0aW9uX2lzX3plcm86CiAgICAgICAgaWYgZGVsZXRpb25faXNfemVy byBhbmQgbm90IGluc2VydGlvbl9pc196ZXJvOgogICAgICAgICAgICByZXR1cm4gRmFsc2Us IGYiIFpFUk8tSU5JVCBMT1NUOiB7ZGVsZXRpb24ucGFsbG9jX3R5cGV9IC0+IHtpbnNlcnRp b24ucGFsbG9jX3R5cGV9IgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBGYWxz ZSwgZiIgVU5FWFBFQ1RFRCBaRVJPLUlOSVQ6IHtkZWxldGlvbi5wYWxsb2NfdHlwZX0gLT4g e2luc2VydGlvbi5wYWxsb2NfdHlwZX0iCiAgICAKICAgICMgQ2hlY2sgaWYgYXJyYXkgdnMg b2JqZWN0IGNvbnZlcnNpb24gaXMgc2VtYW50aWNhbGx5IGNvcnJlY3QKICAgIGRlbGV0aW9u X2lzX2FycmF5ID0gaXNfYXJyYXlfYWxsb2NhdGlvbihkZWxldGlvbi5jb250ZW50KQogICAg ZGVsZXRpb25faXNfb2JqZWN0ID0gaXNfc2luZ2xlX29iamVjdF9hbGxvY2F0aW9uKGRlbGV0 aW9uLmNvbnRlbnQpCiAgICAKICAgICMgQXJyYXkgZGV0ZWN0aW9uIHRha2VzIHByZWNlZGVu Y2Ugb3ZlciBvYmplY3QgZGV0ZWN0aW9uCiAgICAjIElmIGl0J3MgZGV0ZWN0ZWQgYXMgYm90 aCwgaXQncyBhbiBhcnJheSAoc2luY2UgYXJyYXlzIGNvbnRhaW4gc2l6ZW9mIHRvbykKICAg IGlmIGRlbGV0aW9uX2lzX2FycmF5IGFuZCBkZWxldGlvbl9pc19vYmplY3Q6CiAgICAgICAg ZGVsZXRpb25faXNfb2JqZWN0ID0gRmFsc2UKICAgIAogICAgaW5zZXJ0aW9uX3VzZXNfYXJy YXkgPSBpbnNlcnRpb24ucGFsbG9jX3R5cGUuZW5kc3dpdGgoJ19hcnJheScpCiAgICBpbnNl cnRpb25fdXNlc19vYmplY3QgPSBpbnNlcnRpb24ucGFsbG9jX3R5cGUuZW5kc3dpdGgoJ19v YmplY3QnKQogICAgCiAgICAjIE9ubHkgY2hlY2sgc2VtYW50aWMgY29ycmVjdG5lc3MgaWYg d2UgY2FuIGNsZWFybHkgaWRlbnRpZnkgdGhlIHBhdHRlcm4KICAgIGlmIGRlbGV0aW9uX2lz X2FycmF5IG9yIGRlbGV0aW9uX2lzX29iamVjdDoKICAgICAgICAjIFZlcmlmeSBzZW1hbnRp YyBjb3JyZWN0bmVzcyBvZiBhcnJheSB2cyBvYmplY3QgY2hvaWNlCiAgICAgICAgaWYgZGVs ZXRpb25faXNfYXJyYXkgYW5kIGluc2VydGlvbl91c2VzX29iamVjdDoKICAgICAgICAgICAg cmV0dXJuIEZhbHNlLCBmIiBBUlJBWS0+T0JKRUNUIE1JU01BVENIOiBBcnJheSBhbGxvY2F0 aW9uIGNvbnZlcnRlZCB0byBfb2JqZWN0OiB7ZGVsZXRpb24ucGFsbG9jX3R5cGV9IC0+IHtp bnNlcnRpb24ucGFsbG9jX3R5cGV9IgogICAgICAgIAogICAgICAgIGlmIGRlbGV0aW9uX2lz X29iamVjdCBhbmQgaW5zZXJ0aW9uX3VzZXNfYXJyYXk6CiAgICAgICAgICAgIHJldHVybiBG YWxzZSwgZiIgT0JKRUNULT5BUlJBWSBNSVNNQVRDSDogU2luZ2xlIG9iamVjdCBhbGxvY2F0 aW9uIGNvbnZlcnRlZCB0byBfYXJyYXk6IHtkZWxldGlvbi5wYWxsb2NfdHlwZX0gLT4ge2lu c2VydGlvbi5wYWxsb2NfdHlwZX0iCiAgICAKICAgICMgQWxsIGNoZWNrcyBwYXNzZWQKICAg IGNvbnZlcnNpb25fdHlwZSA9ICIiCiAgICBpZiBkZWxldGlvbl9pc19hcnJheSBhbmQgaW5z ZXJ0aW9uX3VzZXNfYXJyYXk6CiAgICAgICAgY29udmVyc2lvbl90eXBlID0gIiAoQVJSQVkp IgogICAgZWxpZiBkZWxldGlvbl9pc19vYmplY3QgYW5kIGluc2VydGlvbl91c2VzX29iamVj dDoKICAgICAgICBjb252ZXJzaW9uX3R5cGUgPSAiIChPQkpFQ1QpIgogICAgZWxpZiBub3Qg ZGVsZXRpb25faXNfYXJyYXkgYW5kIG5vdCBkZWxldGlvbl9pc19vYmplY3Q6CiAgICAgICAg Y29udmVyc2lvbl90eXBlID0gIiAoQ09NUExFWCkiCiAgICAKICAgIHJldHVybiBUcnVlLCBm IkNPUlJFQ1Q6IHtkZWxldGlvbi5wYWxsb2NfdHlwZX0gLT4ge2luc2VydGlvbi5wYWxsb2Nf dHlwZX17Y29udmVyc2lvbl90eXBlfSIKCmRlZiBtYWluKCk6CiAgICBpZiBsZW4oc3lzLmFy Z3YpICE9IDI6CiAgICAgICAgcHJpbnQoIlVzYWdlOiBweXRob24gdmVyaWZ5X3BhbGxvY19w YWlycy5weSA8cGF0Y2hfZmlsZT4iKQogICAgICAgIHN5cy5leGl0KDEpCiAgICAKICAgIHBh dGNoX2ZpbGUgPSBzeXMuYXJndlsxXQogICAgcHJpbnQoZiJBbmFseXppbmcgcGFsbG9jIHBh aXJzIGluIHBhdGNoIGZpbGU6IHtwYXRjaF9maWxlfSIpCiAgICBwcmludCgiPSIgKiA4MCkK ICAgIAogICAgcGFpcnMgPSBwYXJzZV9wYXRjaF9maWxlKHBhdGNoX2ZpbGUpCiAgICAKICAg IGlmIG5vdCBwYWlyczoKICAgICAgICBwcmludCgiIE5vIHBhbGxvYyBjb252ZXJzaW9ucyBm b3VuZCBpbiB0aGUgcGF0Y2ggZmlsZS4iKQogICAgICAgIHJldHVybgogICAgCiAgICBwcmlu dChmIkZvdW5kIHtsZW4ocGFpcnMpfSBwYWxsb2MgY29udmVyc2lvbiBwYWlycyB0byB2ZXJp Znk6IikKICAgIHByaW50KCkKICAgIAogICAgdmFsaWRfY291bnQgPSAwCiAgICBpbnZhbGlk X2NvdW50ID0gMAogICAgaXNzdWVzID0gW10KICAgIAogICAgZm9yIGksIChkZWxldGlvbiwg aW5zZXJ0aW9uKSBpbiBlbnVtZXJhdGUocGFpcnMsIDEpOgogICAgICAgIGlzX3ZhbGlkLCBt ZXNzYWdlID0gdmVyaWZ5X3BhaXIoZGVsZXRpb24sIGluc2VydGlvbikKICAgICAgICAKICAg ICAgICBwcmludChmIntpOjNkfS4ge21lc3NhZ2V9IikKICAgICAgICAKICAgICAgICBpZiBk ZWxldGlvbjoKICAgICAgICAgICAgcHJpbnQoZiIgICAgIEZpbGU6IHtkZWxldGlvbi5maWxl X3BhdGh9IikKICAgICAgICAgICAgcHJpbnQoZiIgICAgIERlbDogIHtkZWxldGlvbi5jb250 ZW50LnN0cmlwKCl9IikKICAgICAgICBpZiBpbnNlcnRpb246CiAgICAgICAgICAgIGlmIG5v dCBkZWxldGlvbiBvciBkZWxldGlvbi5maWxlX3BhdGggIT0gaW5zZXJ0aW9uLmZpbGVfcGF0 aDoKICAgICAgICAgICAgICAgIHByaW50KGYiICAgICBGaWxlOiB7aW5zZXJ0aW9uLmZpbGVf cGF0aH0iKQogICAgICAgICAgICBwcmludChmIiAgICAgQWRkOiAge2luc2VydGlvbi5jb250 ZW50LnN0cmlwKCl9IikKICAgICAgICAKICAgICAgICBpZiBpc192YWxpZDoKICAgICAgICAg ICAgdmFsaWRfY291bnQgKz0gMQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGludmFsaWRf Y291bnQgKz0gMQogICAgICAgICAgICBpc3N1ZXMuYXBwZW5kKChkZWxldGlvbiwgaW5zZXJ0 aW9uLCBtZXNzYWdlKSkKICAgICAgICAKICAgICAgICBwcmludCgpCiAgICAKICAgIHByaW50 KCI9IiAqIDgwKQogICAgcHJpbnQoZiIgU1VNTUFSWToiKQogICAgcHJpbnQoZiIgICAgVmFs aWQgcGFpcnM6IHt2YWxpZF9jb3VudH0iKQogICAgcHJpbnQoZiIgICAgSW52YWxpZCBwYWly czoge2ludmFsaWRfY291bnR9IikKICAgIHByaW50KGYiICAgIFRvdGFsIHBhaXJzOiB7bGVu KHBhaXJzKX0iKQogICAgCiAgICAjIENvdW50IGNvbnZlcnNpb24gdHlwZXMKICAgIGFycmF5 X2NvbnZlcnNpb25zID0gMAogICAgb2JqZWN0X2NvbnZlcnNpb25zID0gMAogICAgY29tcGxl eF9jb252ZXJzaW9ucyA9IDAKICAgIHplcm9faW5pdF9jb252ZXJzaW9ucyA9IDAKICAgIG5v bl96ZXJvX2NvbnZlcnNpb25zID0gMAogICAgCiAgICBmb3IgaSwgKGRlbGV0aW9uLCBpbnNl cnRpb24pIGluIGVudW1lcmF0ZShwYWlycywgMSk6CiAgICAgICAgaWYgZGVsZXRpb24gYW5k IGluc2VydGlvbjoKICAgICAgICAgICAgaWYgaW5zZXJ0aW9uLnBhbGxvY190eXBlLmVuZHN3 aXRoKCdfYXJyYXknKToKICAgICAgICAgICAgICAgIGFycmF5X2NvbnZlcnNpb25zICs9IDEK ICAgICAgICAgICAgZWxpZiBpbnNlcnRpb24ucGFsbG9jX3R5cGUuZW5kc3dpdGgoJ19vYmpl Y3QnKToKICAgICAgICAgICAgICAgIG9iamVjdF9jb252ZXJzaW9ucyArPSAxCiAgICAgICAg ICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjb21wbGV4X2NvbnZlcnNpb25zICs9IDEKICAg ICAgICAgICAgICAgIAogICAgICAgICAgICBpZiBpc196ZXJvX2luaXRpYWxpemVkKGluc2Vy dGlvbi5wYWxsb2NfdHlwZSk6CiAgICAgICAgICAgICAgICB6ZXJvX2luaXRfY29udmVyc2lv bnMgKz0gMQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbm9uX3plcm9fY29u dmVyc2lvbnMgKz0gMQogICAgCiAgICBwcmludCgpCiAgICBwcmludChmIkNPTlZFUlNJT04g QlJFQUtET1dOOiIpCiAgICBwcmludChmIiAgIEFycmF5IGNvbnZlcnNpb25zIChfYXJyYXkp OiB7YXJyYXlfY29udmVyc2lvbnN9IikKICAgIHByaW50KGYiICAgT2JqZWN0IGNvbnZlcnNp b25zIChfb2JqZWN0KToge29iamVjdF9jb252ZXJzaW9uc30iKQogICAgcHJpbnQoZiIgICBD b21wbGV4IGNvbnZlcnNpb25zOiB7Y29tcGxleF9jb252ZXJzaW9uc30iKQogICAgcHJpbnQo ZiIgICBaZXJvLWluaXRpYWxpemVkOiB7emVyb19pbml0X2NvbnZlcnNpb25zfSIpCiAgICBw cmludChmIiAgIE5vbi16ZXJvOiB7bm9uX3plcm9fY29udmVyc2lvbnN9IikKICAgIAogICAg aWYgaW52YWxpZF9jb3VudCA9PSAwOgogICAgICAgIHByaW50KCkKICAgICAgICBwcmludCgi U1VDQ0VTUzogQWxsIHBhbGxvYyBjb252ZXJzaW9uIHBhaXJzIGFyZSBzZW1hbnRpY2FsbHkg Y29ycmVjdCEiKQogICAgICAgIHByaW50KCIgICBaZXJvLWluaXRpYWxpemF0aW9uIGJlaGF2 aW9yIHByZXNlcnZlZCIpCiAgICAgICAgcHJpbnQoIiAgIEFycmF5IHZzIE9iamVjdCBzZW1h bnRpY3MgY29ycmVjdCIpCiAgICAgICAgc3lzLmV4aXQoMCkKICAgIGVsc2U6CiAgICAgICAg cHJpbnQoKQogICAgICAgIHByaW50KCJJU1NVRVMgRk9VTkQ6IikKICAgICAgICBmb3IgZGVs ZXRpb24sIGluc2VydGlvbiwgbWVzc2FnZSBpbiBpc3N1ZXM6CiAgICAgICAgICAgIHByaW50 KGYiICAg4oCiIHttZXNzYWdlfSIpCiAgICAgICAgICAgIGlmIGRlbGV0aW9uOgogICAgICAg ICAgICAgICAgcHJpbnQoZiIgICAgIEZpbGU6IHtkZWxldGlvbi5maWxlX3BhdGh9IChsaW5l IHtkZWxldGlvbi5saW5lX251bX0pIikKICAgICAgICAgICAgZWxpZiBpbnNlcnRpb246CiAg ICAgICAgICAgICAgICBwcmludChmIiAgICAgRmlsZToge2luc2VydGlvbi5maWxlX3BhdGh9 IChsaW5lIHtpbnNlcnRpb24ubGluZV9udW19KSIpCiAgICAgICAgcHJpbnQoKQogICAgICAg IHByaW50KCIgRkFJTEVEOiBTb21lIGNvbnZlcnNpb24gcGFpcnMgaGF2ZSBzZW1hbnRpYyBp c3N1ZXMuIikKICAgICAgICBzeXMuZXhpdCgxKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9f IjoKICAgIG1haW4oKQo= --------------lfuu18oJZn0R8XM21SSz5T4f--