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 1trlEk-009AQl-7M for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Mar 2025 22:04:38 +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 1trlEi-001DL2-Ql for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Mar 2025 22:04:36 +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 1trlEi-001DKn-CN for pgsql-hackers@lists.postgresql.org; Mon, 10 Mar 2025 22:04:36 +0000 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1trlEd-0027Gu-2V for pgsql-hackers@postgresql.org; Mon, 10 Mar 2025 22:04:35 +0000 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-5499bd3084aso2356900e87.0 for ; Mon, 10 Mar 2025 15:04:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=percona.com; s=google; t=1741644272; x=1742249072; 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=osVL/D0Wc4jYNFf9IKq5HFo5cTJGrfxBC+F1PECfeao=; b=HpNyGXx+v5rULXDryD1xBoxfP9VAN90ab7v93RiquQXDVGjgorsqiGciKYc3Ufn+LX tqY+c4lw62+RdQxvnaA8AUXD1xyFF7grQtNRxXvkh2N4d01vKVODIDzWpsgqDxHmWkC8 Axbgvof6BkwI0S/LbEPX1YZmnMJfKNWMCBbF4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741644272; x=1742249072; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=osVL/D0Wc4jYNFf9IKq5HFo5cTJGrfxBC+F1PECfeao=; b=JgMiXYcwXGGujonTQeOSh6mjfTwb2liJ2SBXIh4jfJlw8f/3SKX+ltLqhPQCgcy3nb nlA8DxIwHWx1PLfHwSHADT50E/2uQQfkziQA4R03C+Ll4g3Ts+HuN+fgeXfUXkIpAWwV ol+JaL/lZBt+kws7pzO7LQUP1Pd5vPY6UTLUby1zivtenkTjofGQ7sz+yOk75vbbQoDm tyP5aha8Vlxo2AXhuGw9dAlfiqehW63yXjsvmsdaK922TqaEKzLDhcyaWXMNi4K0hpXr mRZuEhyW8q/DCloRiHrBVlTJtlIhXZHFYMWGJhOijW/bfhlKk0UY/gkX1l0tOxYFX5xD d2PQ== X-Forwarded-Encrypted: i=1; AJvYcCUBcD8oBQdmRgFZHXaOzAw7s7QDbctZIkoNrthOIZmbmBJ2ueJhdg+h7xBLB+k8Zz3BLW/mO0fhh9Kl83S5@postgresql.org X-Gm-Message-State: AOJu0YxjgrSjeT04bHhKXvq07nY1X37PTLu35Lbr/chn5ZVcacBncb28 FNYKK+AyXvAYWF9oOqYIPIFPpTAPFmkwAffOEFr1ym6u8qOcg5L2wdmZtuIedEfC5bH3YSClGLI nQO3gzYpL08COPG7pzIglwP3tdgh/CWJBxhPyABgTD7I/fyVaeO+7oVVsbdABS9AcezkG6a/Zpn oU97P7Q5xemKPSm5GBHQYNSuUEm2g/0tEM2c/iYi4+rW2TPu0Gzxu4mP1wrOe7n14mOUwa80oLh VoBeDnrU4q5FOguQX+KMdnHo/a8nIg0xaEyq/ySl5dzDcM= X-Gm-Gg: ASbGncvAl3cF/HCfX0LBBwPykRmF8OB03cP5aavfJrLmJxs8U8WQi66anWklBo9rHJm 6irogz9m5JByyAh7rcTURHFLdnvtVK6aoAPq3IBZ6j+N82ZJYG5hazCNkt4ztu9FYCsZSc2IvOo 9oIzk8FK5Zk0Fj09g/N4tSJQeBRek= X-Google-Smtp-Source: AGHT+IHtrheKc8HuLyUdxjvkkBg0zuISVnbLXtaKN1cCH8K7X7z3Lr16cKJaG0shO6Fx42vBHDB9xdSf5bDJvhFS1Ng= X-Received: by 2002:a05:6512:3ba5:b0:545:2d80:a47d with SMTP id 2adb3069b0e04-54990ebb0c9mr4999210e87.44.1741644271401; Mon, 10 Mar 2025 15:04:31 -0700 (PDT) MIME-Version: 1.0 References: <206b001d-1884-4081-bd02-bed5c92f02ba@eisentraut.org> In-Reply-To: From: Diego Fronza Date: Mon, 10 Mar 2025 19:04:19 -0300 X-Gm-Features: AQ5f1JpwbkEWAkRgAwYTP8CHdawJD7XTUEDvG4i1u9VB0uSIWdMCylzGogt38CA Message-ID: Subject: Re: meson vs. llvm bitcode files To: Nazir Bilal Yavuz Cc: Peter Eisentraut , pgsql-hackers , Andres Freund Content-Type: multipart/mixed; boundary="0000000000001f6fb1063004289d" X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: percona,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001f6fb1063004289d Content-Type: multipart/alternative; boundary="0000000000001f6faf063004289b" --0000000000001f6faf063004289b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, I did a full review on the provided patches plus some tests, I was able to validate that the loading of bitcode modules is working also JIT works for both backend and contrib modules. To test JIT on contrib modules I just lowered the costs for all jit settings and used the intarray extension, using the data/test__int.data: CREATE EXTENSION intarray; CREATE TABLE test__int( a int[] );1 \copy test__int from 'data/test__int.data' For queries any from line 98+ on contrib/intarray/sql/_int.sql will work. Then I added extra debug messages to llvmjit_inline.cpp on add_module_to_inline_search_path() function, also on llvm_build_inline_plan(), I was able to see many functions in this module being successfully inlined. I'm attaching a new patch based on your original work which add further support for generating bitcode from: - Generated backend sources: processed by flex, bison, etc. - Generated contrib module sources, On this patch I just included fmgrtab.c and src/backend/parser for the backend generated code. For contrib generated sources I added contrib/cube as an example. All relevant details about the changes are included in the patch itself. As you may know already I also created a PR focused on llvm bitcode emission on meson, it generates bitcode for all backend and contribution modules, currently under review by some colleagues at Percona: https://github.com/percona/postgres/pull/103 I'm curious if we should get all or some of the generated backend sources compiled to bitcode, similar to contrib modules. Please let me know your thoughts and how we can proceed to get this feature included, thank you. Regards, Diego Fronza Percona On Fri, Mar 7, 2025 at 7:52=E2=80=AFAM Nazir Bilal Yavuz wrote: > Hi, > > On Thu, 5 Sept 2024 at 12:24, Nazir Bilal Yavuz > wrote: > > > > I found that Andres shared a patch > > (v17-0021-meson-Add-LLVM-bitcode-emission.patch) a while ago [1]. > > Andres and I continued to work on that. I think the patches are in > sharable state now and I wanted to hear opinions before proceeding > further. After applying the patches, bitcode files should be installed > into $pkglibdir/bitcode/ directory if the llvm is found. > > There are 6 patches attached: > > v1-0001-meson-Add-generated-header-stamps: > > This patch is trivial. Instead of having targets depending directly on > the generated headers, have them depend on a stamp file. The benefit > of using a stamp file is that it makes ninja.build smaller and meson > setup faster. > ---------- > > v1-0002-meson-Add-postgresql-extension.pc-for-building-extension-librarie= s: > > This patch is for generating postgresql-extension.pc file which can be > used for building extensions libraries. > > Normally, there is no need to use this .pc file for generating bitcode > files. However, since there is no clear way to get all include paths > for building bitcode files, this .pc file is later used for this > purpose (by running pkg-config --cflags-only-I > postgresql-extension-uninstalled.pc) [1]. > ---------- > > v1-0003-meson-Test-building-extensions-by-using-postgresql-extension.pc: > [Not needed for generating bitcode files] > > This is a patch for testing if extensions can be built by using > postgresql-extension.pc. I added that commit as an example of using > postgresql-extension.pc to build extensions. > ---------- > > v1-0004-meson-WIP-Add-docs-for-postgresql-extension.pc: [Not needed > for generating bitcode files] > > I added this patch in case we recommend people to use > postgresql-extension.pc to build extension libraries. I am not sure if > we want to do that because there are still TODOs about > postgresql-extension.pc like running test suites. I just wanted to > show my plan, dividing 'Extension Building Infrastructure' into two, > 'PGXS' and 'postgresql-extension.pc'. > ---------- > > v1-0005-meson-Add-LLVM-bitcode-emission: > > This patch adds required infrastructure to generate bitcode files and > uses postgresql-extension-uninstalled.pc to get include paths for > generating bitcode files [1]. > ---------- > > v1-0006-meson-Generate-bitcode-files-of-contrib-extension.patch: > > This patch adds manually selected contrib libraries to generate their > bitcode files. These libraries are selected manually, depending on > - If they have SQL callable functions > - If the library functions are short enough (the performance gain from > bitcode files is too minimal compared to the function's run time, so > this type of libraries are omitted). > > Any kind of feedback would be appreciated. > > -- > Regards, > Nazir Bilal Yavuz > Microsoft > --0000000000001f6faf063004289b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello,

I did a full review on the provi= ded patches plus some tests, I was able to validate that the loading of bit= code modules is working also JIT works for both backend and contrib modules= .

To test JIT on contrib modules I just lowered th= e costs for all jit settings and used the intarray extension, using the dat= a/test__int.data:
CREATE EXTENSION intarray;
CREATE TAB= LE test__int( a int[] );1
\copy test__int from 'data/test__int.data&= #39;

For queries any from line 98+ on contrib/inta= rray/sql/_int.sql will work.

Then I added extra de= bug messages to llvmjit_inline.cpp on=C2=A0add_module_to_inline_search_path= () function, also on=C2=A0llvm_build_inline_plan(), I was able to see many = functions in this module being successfully inlined.

I'm attaching a new patch based on your original work which add furt= her support for generating bitcode from:
=C2=A0- Generated backen= d sources: processed by flex, bison, etc.
=C2=A0- Generated contr= ib module sources,=C2=A0

On this patch I just= included fmgrtab.c and src/backend/parser for the backend generated code.<= /div>
For contrib generated sources I added contrib/cube as an example.=

All relevant details about the changes are = included in the patch itself.

As you may know alre= ady I also created a PR focused on llvm bitcode emission on meson, it gener= ates bitcode for all backend and contribution modules, currently under revi= ew by some colleagues at Percona:=C2=A0https://github.com/percona/postgres/pull/103
=
I'm curious if we should get all or some of the generated backend = sources compiled to bitcode, similar to contrib modules.
Please l= et me know your thoughts and how we can proceed to get this feature include= d, thank you.

Regards,
Diego Fronza
Percona

On Fri, Mar 7, 2025 at 7:52=E2=80= =AFAM Nazir Bilal Yavuz <byavuz81@= gmail.com> wrote:
Hi,

On Thu, 5 Sept 2024 at 12:24, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:
>
> I found that Andres shared a patch
> (v17-0021-meson-Add-LLVM-bitcode-emission.patch) a while ago [1].

Andres and I continued to work on that. I think the patches are in
sharable state now and I wanted to hear opinions before proceeding
further. After applying the patches, bitcode files should be installed
into $pkglibdir/bitcode/ directory if the llvm is found.

There are 6 patches attached:

v1-0001-meson-Add-generated-header-stamps:

This patch is trivial. Instead of having targets depending directly on
the generated headers, have them depend on a stamp file. The benefit
of using a stamp file is that it makes ninja.build smaller and meson
setup faster.
----------

v1-0002-meson-Add-postgresql-extension.pc-for-building-extension-libraries:=

This patch is for generating postgresql-extension.pc file which can be
used for building extensions libraries.

Normally, there is no need to use this .pc file for generating bitcode
files. However, since there is no clear way to get all include paths
for building bitcode files, this .pc file is later used for this
purpose (by running pkg-config --cflags-only-I
postgresql-extension-uninstalled.pc) [1].
----------

v1-0003-meson-Test-building-extensions-by-using-postgresql-extension.pc: [Not needed for generating bitcode files]

This is a patch for testing if extensions can be built by using
postgresql-extension.pc. I added that commit as an example of using
postgresql-extension.pc to build extensions.
----------

v1-0004-meson-WIP-Add-docs-for-postgresql-extension.pc: [Not needed
for generating bitcode files]

I added this patch in case we recommend people to use
postgresql-extension.pc to build extension libraries. I am not sure if
we want to do that because there are still TODOs about
postgresql-extension.pc like running test suites. I just wanted to
show my plan, dividing 'Extension Building Infrastructure' into two= ,
'PGXS' and 'postgresql-extension.pc'.
----------

v1-0005-meson-Add-LLVM-bitcode-emission:

This patch adds required infrastructure to generate bitcode files and
uses postgresql-extension-uninstalled.pc to get include paths for
generating bitcode files [1].
----------

v1-0006-meson-Generate-bitcode-files-of-contrib-extension.patch:

This patch adds manually selected contrib libraries to generate their
bitcode files. These libraries are selected manually, depending on
- If they have SQL callable functions
- If the library functions are short enough (the performance gain from
bitcode files is too minimal compared to the function's run time, so this type of libraries are omitted).

Any kind of feedback would be appreciated.

--
Regards,
Nazir Bilal Yavuz
Microsoft
--0000000000001f6faf063004289b-- --0000000000001f6fb1063004289d Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-meson-Add-LLVM-bitcode-emission-for-generated-source.patch" Content-Disposition: attachment; filename="v2-0001-meson-Add-LLVM-bitcode-emission-for-generated-source.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m83lwnxv0 RnJvbSBiZTA5YjFmMzhkMTA3Nzg5ZmM5ZmZlMWNkMmIyNDcwNTUyNjg5YTIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEaWVnbyBGcm9uemEgPGRpZWdvLmZyb256YUBwZXJjb25hLmNv bT4KRGF0ZTogTW9uLCAxMCBNYXIgMjAyNSAxODoxOTo0OSAtMDMwMApTdWJqZWN0OiBbUEFUQ0hd IG1lc29uOiBBZGQgTExWTSBiaXRjb2RlIGVtaXNzaW9uIGZvciBnZW5lcmF0ZWQgc291cmNlcwoK VGhpcyBjb21taXQgYWRkcyBzdXBvcnQgZm9yIGJpdGNvZGUgZW1pc3Npb24gZm9yIGdlbmVyYXRl ZCBzb3VyY2UgZmlsZXMKKHByb2Nlc3NlZCBieSBiaXNvbiwgZmxleCwgZXRjKS4KClNpbmNlIGdl bmVyYXRlZCBzb3VyY2VzIGFyZSBjcmVhdGVkIHdpdGggY3VzdG9tX3RhcmdldCwgd2UgbXVzdCBo YW5kbGUKdGhlIHNvdXJjZSBmaWxlcyBkaWZmZXJlbnRseSB3aGVuIGl0ZXJhdGluZyBvdmVyIHRo ZSBsaXN0LCBhcyBmcy5wYXJlbnQKZXhwZWN0cyBzdHIgb3IgZmlsZSBvYmplY3QuIFRoZSB3YXkg dG8gaGFuZGxlIGl0IGlzIGNhc3QgdGhlIG9iamVjdCBhcwpzdHJpbmcgYEAwQC5mb3JtYXQoc3Jj KWAgdGhlbiBjaGVjayBpZiBpdCdzIGEgY3VzdG9tIHRhcmdldCAoYSBzdHJpbmcKc3RhcnRpbmcg d2l0aCBgPEN1c3RvbVRhcmdldGApLCBpZiB0aGF0J3MgdGhlIGNhc2Ugd2UgY2FuIHNhZmVseSBj YWxsCmZ1bGxfcGF0aCgpIG9uIGl0LgoKQnV0IHdlIGFsc28gd2FudCB0byBnZW5lcmF0ZSBiaXRj b2RlIGZpbGVzIHdpdGggcGF0aCBzZXBhcmF0b3JzIHJlcGxhY2VkCmJ5IHVuZGVyc2NvcmUsIHJl bGF0aXZlIHRvIHRoZWlyIHNvdXJjZSBsb2NhdGlvbiwgZm9yIHRoYXQgd2Ugc3RyaXAKbWVzb24u YnVpbGRfcm9vdCgpIGZyb20gaXQuCgpTaW5jZSBnZW5lcmF0ZWQgYmFja2VuZCBzb3VyY2VzIG1h eSBoYXZlIHRoZWlyIG93biBjb21waWxhdGlvbiBmbGFncyBhbmQKbXVzdCBhbHNvIGJlIGluY2x1 ZGVkIGluIHRoZSBwb3N0Z3Jlcy5pbmRleC5iYywgdGhlIHdheSB0byBtYWtlIGl0IHdvcmsKd2l0 aCBjdXJyZW50IGNvZGUgd2FzIHRvIGNyZWF0ZSBhIG5ldyB2YXJpYWJsZSwgY2FsbGVkCmBiY19n ZW5lcmF0ZWRfYmFja2VuZF9zb3VyY2VzYCwgd2hpY2ggaXMgYSBsaXN0IG9mIGRpY3Rpb25hcmll cywgZWFjaApvbmUgaGF2aW5nIGFuIG9wdGlvbmFsICdhZGRpdGlvbmFsX2ZsYWdzJyBhbmQgYSBg c3JjbGlzdGAgcG9pbnRpbmcgdG8KdGhlIGxpc3Qgb2YgY3VzdG9tX3RhcmdldCBnZW5lcmF0ZWQg c291cmNlcy4KClRoaXMgbGlzdCB0aGVuIGhhcyBvbmUgZGljdGlvbmFyeSBlbnRyeSBmb3IgZWFj aCBnZW5lcmF0ZWQgYmFja2VuZApzb3VyY2VzIHdoaWNoIHNoYXJlIGEgc2VwYXJhdGUgY29tcGls YXRpb24gZmxhZy4KCkFuIGV4YW1wbGUgb2YgYSBwb3NzaWJsZSBzdHJ1Y3R1cmUgb2YgYml0Y29k ZV9tb2R1bGVzIHdoaWNoIGlzIHByb2Nlc3NlZApieSB0aGUgbWFpbiBtZXNvbiBsbHZtIGJpdGNv ZGUgZW1pc3Npb24gZmlsZQpzcmMvYmFja2VuZC9qaXQvbGx2bS9iaXRjb2RlL21lc29uLmJ1aWxk OgpgYGAKYml0Y29kZV9tb2R1bGVzID0gWwogIHsKICAgICduYW1lJzogJ3Bvc3RncmVzJywKICAg ICd0YXJnZXQnOiBwb3N0Z3Jlc19saWIsCiAgICAnc3JjX2ZpbGUnOiBiYWNrZW5kX3NvdXJjZXMs CiAgICAnZ2VuX3NyY2ZpbGVzJzogWwogICAgICB7CiAgICAgICAgJ2FkZGl0aW9uYWxfZmxhZ3Mn OiBbCiAgICAgICAgICAnLUkvcGF0aC9wb3N0Z3Jlc2wvc3JjL2JhY2tlbmQvcGFyc2VyJywKICAg ICAgICAgICctSS9wYXRoL3Bvc3RncmVzbC9idWlsZC9zcmMvYmFja2VuZC9wYXJzZXInLAogICAg ICAgIF0sCiAgICAgICAgJ3NyY2ZpbGVzJzogWwogICAgICAgICAgICAgICAgPGN1c3RvbV90YXJn ZXQgZm9yIHNjYW4uYz4sCiAgICAgICAgICAgICAgICA8Y3VzdG9tX3RhcmdldCBmb3IgZ3JhbS5j PgogICAgICAgIF0KICAgICAgfQogICAgXQogIH0KXQpgYGAKLS0tCiBjb250cmliL2N1YmUvbWVz b24uYnVpbGQgICAgICAgICAgICAgICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL2ppdC9sbHZtL2Jp dGNvZGUvbWVzb24uYnVpbGQgfCAzNyArKysrKysrKysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNr ZW5kL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgMiArKwogc3JjL2JhY2tlbmQvcGFy c2VyL21lc29uLmJ1aWxkICAgICAgICAgICB8ICA4ICsrKysrCiBzcmMvYmFja2VuZC91dGlscy9m bWdyL21lc29uLmJ1aWxkICAgICAgIHwgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCA0NCBpbnNlcnRp b25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3ViZS9tZXNvbi5i dWlsZCBiL2NvbnRyaWIvY3ViZS9tZXNvbi5idWlsZAppbmRleCA1MmJkNmE5ZmI4Li5iYmMwM2Rk MzE5IDEwMDY0NAotLS0gYS9jb250cmliL2N1YmUvbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9j dWJlL21lc29uLmJ1aWxkCkBAIC0xMiw2ICsxMiw3IEBAIGN1YmVfc2NhbiA9IGN1c3RvbV90YXJn ZXQoJ2N1YmVzY2FuJywKICkKIGdlbmVyYXRlZF9zb3VyY2VzICs9IGN1YmVfc2NhbgogY3ViZV9z b3VyY2VzICs9IGN1YmVfc2NhbgorYmNfY3ViZV9zb3VyY2VzICs9IFtjdWJlX3NjYW5dCiAKIGN1 YmVfcGFyc2UgPSBjdXN0b21fdGFyZ2V0KCdjdWJlcGFyc2UnLAogICBpbnB1dDogJ2N1YmVwYXJz ZS55JywKQEAgLTE5LDYgKzIwLDcgQEAgY3ViZV9wYXJzZSA9IGN1c3RvbV90YXJnZXQoJ2N1YmVw YXJzZScsCiApCiBnZW5lcmF0ZWRfc291cmNlcyArPSBjdWJlX3BhcnNlLnRvX2xpc3QoKQogY3Vi ZV9zb3VyY2VzICs9IGN1YmVfcGFyc2UKK2JjX2N1YmVfc291cmNlcyArPSBjdWJlX3BhcnNlWzBd CiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwogICBjdWJlX3NvdXJjZXMgKz0gcmNfbGli X2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9qaXQvbGx2bS9iaXRjb2RlL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvaml0L2xs dm0vYml0Y29kZS9tZXNvbi5idWlsZAppbmRleCA1NzdiNGRkYjIxLi5hY2MxM2ExZDE2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9iaXRjb2RlL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9iYWNrZW5kL2ppdC9sbHZtL2JpdGNvZGUvbWVzb24uYnVpbGQKQEAgLTksMTggKzksMTggQEAg Zm9yZWFjaCBiaXRjb2RlX21vZHVsZSA6IGJpdGNvZGVfbW9kdWxlcwogICBiaXRjb2RlX29iaiA9 IGJpdGNvZGVfbW9kdWxlWyd0YXJnZXQnXQogICBiaXRjb2RlX2NmbGFnc19sb2NhbCA9IGJpdGNv ZGVfY2ZsYWdzICsgYml0Y29kZV9tb2R1bGUuZ2V0KCdhZGRpdGlvbmFsX2ZsYWdzJywgW10pCiAK LSAgaWYgJ25hbWUnIG5vdCBpbiBiaXRjb2RlX21vZHVsZQotICAgIGJpdGNvZGVfbmFtZSA9IGJp dGNvZGVfb2JqLm5hbWUoKQotICBlbHNlCi0gICAgYml0Y29kZV9uYW1lID0gYml0Y29kZV9tb2R1 bGVbJ25hbWUnXQotICBlbmRpZgorICBiaXRjb2RlX25hbWUgPSBiaXRjb2RlX21vZHVsZS5nZXQo J25hbWUnLCBiaXRjb2RlX29iai5uYW1lKCkpCiAKICAgZm9yZWFjaCBzcmNmaWxlIDogYml0Y29k ZV9tb2R1bGVbJ3NyY2ZpbGVzJ10KLSAgICBpZiBtZXNvbi52ZXJzaW9uKCkudmVyc2lvbl9jb21w YXJlKCc+PTAuNTknKQorICAgIHNyY2ZpbGVuYW1lID0gJ0AwQCcuZm9ybWF0KHNyY2ZpbGUpCisg ICAgaWYgc3JjZmlsZW5hbWUuc3RhcnRzd2l0aCgnPEN1c3RvbVRhcmdldCcpCisgICAgICBzcmNm aWxlbmFtZSA9IHNyY2ZpbGUuZnVsbF9wYXRoKCkuc3BsaXQobWVzb24uYnVpbGRfcm9vdCgpICsg Jy8nKVsxXQorICAgIGVsaWYgbWVzb24udmVyc2lvbigpLnZlcnNpb25fY29tcGFyZSgnPj0wLjU5 JykKICAgICAgIHNyY2ZpbGVuYW1lID0gZnMucGFyZW50KHNyY2ZpbGUpIC8gZnMubmFtZShzcmNm aWxlKQogICAgIGVsc2UKICAgICAgIHNyY2ZpbGVuYW1lID0gJ0AwQCcuZm9ybWF0KHNyY2ZpbGUp CiAgICAgZW5kaWYKKwogICAgIHRhcmdldG5hbWUgPSAnQDBAX0AxQC5iYycuZm9ybWF0KAogICAg ICAgYml0Y29kZV9uYW1lLAogICAgICAgc3JjZmlsZW5hbWUudW5kZXJzY29yaWZ5KCksCkBAIC0z Niw2ICszNiwzMSBAQCBmb3JlYWNoIGJpdGNvZGVfbW9kdWxlIDogYml0Y29kZV9tb2R1bGVzCiAg ICAgKQogICBlbmRmb3JlYWNoCiAKKyAgIyBwcm9jZXNzIGdlbmVyYXRlZCBzb3VyY2VzLCB3aGlj aCBtYXkgaW5jbHVkZSBjdXN0b20gY29tcGlsYXRpb24gZmxhZ3MuCisgIGZvcmVhY2ggZ2VuX3Ny Y2ZpbGVzOiBiaXRjb2RlX21vZHVsZS5nZXQoJ2dlbl9zcmNmaWxlcycsIFtdKQorICAgIGJpdGNv ZGVfY2ZsYWdzX2dlbl9sb2NhbCA9IGJpdGNvZGVfY2ZsYWdzX2xvY2FsICsgZ2VuX3NyY2ZpbGVz LmdldCgnYWRkaXRpb25hbF9mbGFncycsIFtdKQorCisgICAgZm9yZWFjaCBzcmNmaWxlOiBnZW5f c3JjZmlsZXNbJ3NyY2ZpbGVzJ10KKyAgICAgICMgZ2VuZXJhdGVkIHNvdXJjZXMgYXJlIHN0b3Jl ZCBpbiBzb21lIGZvbGRlciB1bmRlciBtZXNvbi5idWlsZF9yb290KCkvKioKKyAgICAgICMgcmVt b3ZlIHRoZSBidWlsZCBwcmVmaXggZnJvbSB0aGUgc3RyaW5nLgorICAgICAgc3JjZmlsZW5hbWUg PSBzcmNmaWxlLmZ1bGxfcGF0aCgpLnNwbGl0KG1lc29uLmJ1aWxkX3Jvb3QoKSArICcvJylbMV0K KworICAgICAgdGFyZ2V0bmFtZSA9ICdAMEBfQDFALmJjJy5mb3JtYXQoCisgICAgICAgIGJpdGNv ZGVfbmFtZSwKKyAgICAgICAgc3JjZmlsZW5hbWUudW5kZXJzY29yaWZ5KCksCisgICAgICApCisg ICAgICBiaXRjb2RlX3RhcmdldHMgKz0gY3VzdG9tX3RhcmdldCgKKyAgICAgICAgdGFyZ2V0bmFt ZSwKKyAgICAgICAgZGVwZW5kczogW2JpdGNvZGVfbW9kdWxlWyd0YXJnZXQnXV0sCisgICAgICAg IGlucHV0OiBbc3JjZmlsZV0sCisgICAgICAgIG91dHB1dDogdGFyZ2V0bmFtZSwKKyAgICAgICAg Y29tbWFuZDogW2xsdm1faXJnZW5fY29tbWFuZCwgYml0Y29kZV9jZmxhZ3NfZ2VuX2xvY2FsXSwK KyAgICAgICAgaW5zdGFsbDogdHJ1ZSwKKyAgICAgICAgaW5zdGFsbF9kaXI6IGRpcl9iaXRjb2Rl LAorICAgICAgKQorICAgIGVuZGZvcmVhY2gKKyAgZW5kZm9yZWFjaAorCiAgIGluZGV4X25hbWUg PSAnQDBALmluZGV4LmJjJy5mb3JtYXQoYml0Y29kZV9uYW1lKQogICBiaXRjb2RlX2luZGV4ID0g Y3VzdG9tX3RhcmdldCgnQDBAJy5mb3JtYXQoYml0Y29kZV9uYW1lKSwKICAgICBvdXRwdXQ6IGlu ZGV4X25hbWUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9tZXNvbi5idWlsZCBiL3NyYy9iYWNr ZW5kL21lc29uLmJ1aWxkCmluZGV4IDVmYjMzNjYwZDMuLjc2ZTU5MzlmZWMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL21lc29uLmJ1aWxkCkBA IC01LDYgKzUsNyBAQCBiYWNrZW5kX3NvdXJjZXMgPSBbXQogYmFja2VuZF9saW5rX3dpdGggPSBb cGdwb3J0X3NydiwgY29tbW9uX3Nydl0KIAogZ2VuZXJhdGVkX2JhY2tlbmRfc291cmNlcyA9IFtd CitiY19nZW5lcmF0ZWRfYmFja2VuZF9zb3VyY2VzID0gW10KIHBvc3RfZXhwb3J0X2JhY2tlbmRf c291cmNlcyA9IFtdCiAKIHN1YmRpcignYWNjZXNzJykKQEAgLTE0NCw2ICsxNDUsNyBAQCBiaXRj b2RlX21vZHVsZXMgKz0gewogICAnbmFtZSc6ICdwb3N0Z3JlcycsCiAgICd0YXJnZXQnOiBwb3N0 Z3Jlc19saWIsCiAgICdzcmNmaWxlcyc6IGJhY2tlbmRfc291cmNlcywKKyAgJ2dlbl9zcmNmaWxl cyc6IGJjX2dlbmVyYXRlZF9iYWNrZW5kX3NvdXJjZXMsCiB9CiAKIHBnX21vZF9jX2FyZ3MgPSBj ZmxhZ3NfbW9kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQgYi9z cmMvYmFja2VuZC9wYXJzZXIvbWVzb24uYnVpbGQKaW5kZXggODc0YWE3NDlhYS4uYWRkNDcyYTBj ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL21lc29uLmJ1aWxkCisrKyBiL3NyYy9i YWNrZW5kL3BhcnNlci9tZXNvbi5idWlsZApAQCAtNDIsNiArNDIsMTQgQEAgYmFja2VuZF9wYXJz ZXIgPSBjdXN0b21fdGFyZ2V0KCdncmFtJywKIGdlbmVyYXRlZF9zb3VyY2VzICs9IGJhY2tlbmRf cGFyc2VyLnRvX2xpc3QoKQogcGFyc2VyX3NvdXJjZXMgKz0gYmFja2VuZF9wYXJzZXIKIAorYmNf Z2VuZXJhdGVkX2JhY2tlbmRfc291cmNlcyArPSB7CisgICdhZGRpdGlvbmFsX2ZsYWdzJzogWwor ICAgICctSUAwQCcuZm9ybWF0KG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCkpLAorICAgICctSUAw QCcuZm9ybWF0KG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpKSwKKyAgXSwKKyAgJ3NyY2ZpbGVz JzogW2JhY2tlbmRfc2Nhbm5lciwgYmFja2VuZF9wYXJzZXJbMF1dLAorfQorCiBwYXJzZXIgPSBz dGF0aWNfbGlicmFyeSgncGFyc2VyJywKICAgcGFyc2VyX3NvdXJjZXMsCiAgIGRlcGVuZGVuY2ll czogW2JhY2tlbmRfY29kZV0sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9mbWdyL21l c29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9tZXNvbi5idWlsZAppbmRleCBiMWRj YWI5M2U3Li4wMTE5YmM0MGNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9mbWdyL21l c29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvbWVzb24uYnVpbGQKQEAgLTgs MyArOCw0IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKIAogIyBmbWdydGFiLmMKIGdlbmVy YXRlZF9iYWNrZW5kX3NvdXJjZXMgKz0gZm1ncnRhYl90YXJnZXRbMl0KK2JjX2dlbmVyYXRlZF9i YWNrZW5kX3NvdXJjZXMgKz0geydzcmNmaWxlcyc6IFtmbWdydGFiX3RhcmdldFsyXV19ClwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLSAKMi40My4wCgo= --0000000000001f6fb1063004289d--