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 1tVugz-00CaIj-Av for pgsql-pkg-debian@arkaria.postgresql.org; Thu, 09 Jan 2025 15:43:29 +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 1tVugy-003S02-7F for pgsql-pkg-debian@arkaria.postgresql.org; Thu, 09 Jan 2025 15:43:27 +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 1tVugx-003Rzu-Vf for pgsql-pkg-debian@lists.postgresql.org; Thu, 09 Jan 2025 15:43:27 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tVugt-000koZ-2g for pgsql-pkg-debian@lists.postgresql.org; Thu, 09 Jan 2025 15:43:27 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-386329da1d9so627112f8f.1 for ; Thu, 09 Jan 2025 07:43:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ongres.com; s=gsuite; t=1736437403; x=1737042203; darn=lists.postgresql.org; h=in-reply-to:autocrypt:from:content-language:references:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=Sr84+RwLiLnuqAPaEOANPDte4xAJGqli1LJmkUp7E0U=; b=BOf3Gapbej4z8ud7APLdcWSih+3M82+4Wryz7JbBOJfPucHHEbvxdaYIPdTtPPqDOI KC0C7eI5VV4CaJ5pw0cNZ1HvU0S5dHP9yTT3h1pX8hPZwf0d3H33G1jlSzGpkOiPuPVB wzT3RgZiRQ0IXq0R77rfVGsFlkGl6ceFpwEoA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736437403; x=1737042203; h=in-reply-to:autocrypt:from:content-language:references:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Sr84+RwLiLnuqAPaEOANPDte4xAJGqli1LJmkUp7E0U=; b=Ki8nuhempvkcR7PUJK5Ois0zSZNjzEE+k8qRai+uMT7xgHsCT2vLBMKLLj+I7I5ZA0 AQSXUVNqRwi80RgSjmBtYBPCun+l4tkjsQSChVlRA3TaIzIyBQSSZzZKYnrM1Nz4WzUB IK2UPHyphgu4d/qhZxgpk6DMRXoCNXAxhMXvMOUmSHaCJqNwWeU/5wa70mwTcgNZRhrH tnb4Jz9Kt3fJutWojXG0kN74CGAqhzg4t2AzSOyiN4Plp+tlpRV7EWEZRUIOPA8wIeNu Qx0Af3ItJU0HWQt0qF2x0euxeKCD7pCrTxBbnBMaGZVK+FrPKgpMUUBvH79WprFM80dH VxhQ== X-Forwarded-Encrypted: i=1; AJvYcCX5SmESowFw1Y2ATCzLqRhZ991fF94ZUQqk6yxvXXEkPVThRN5Qe/mtCtDZNGnFGmzN1hjIvDwUI3oZrRceS0/t@lists.postgresql.org X-Gm-Message-State: AOJu0Yw+V6+RZlGNVFl0zgoFKDO4TYsSHJETznkFH6dIEonMxQg/o4Kr tNA7vwh8Td2a5D/lx+TwA3QNMLKZIhwDc3Vndz4Kd49/Zeb+2TK10GRISXhgoh+LDO1adr8kW5P 8mvw= X-Gm-Gg: ASbGncuz2JT/sowzvh8yrBf4R7COmo8TvT4XUYlHaj/w9nYVaOUel+mHcbx3y2K0sD6 HiC2/RscSAR4mtax78miFPmn9jUV7RJS1EhFCHErsM9sjjTRSnTc/QGFDvfcjq+qP+LRvHIxItx ixa9E2Et7X4twec471YKUqSzchJ5yqwlHmXYdzvtN1vl6aEfG1Mejo+ZlaVK4nJFvdaC9TVzrmJ RLbfODgsCaqxnyzGiyIVZ12PHye/NQWBd52pMNSaaHiVhOaUJPY087w2v2Tp68rk7842ymP3CDI jLvAbwH6xYWXC0PZav8e7w== X-Google-Smtp-Source: AGHT+IGo0YePPrsRhnPgXTrsI7Rr4C77ctAc4UFQ8iogoN/5hCQRP7oFxd0ggU8F+y5Vvayhv0zELQ== X-Received: by 2002:a05:6000:712:b0:385:f3fb:46aa with SMTP id ffacd0b85a97d-38a87308c15mr7506252f8f.43.1736437402851; Thu, 09 Jan 2025 07:43:22 -0800 (PST) Received: from [192.168.10.107] (204.red-81-34-31.dynamicip.rima-tde.net. [81.34.31.204]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38a8e38c1d6sm2174705f8f.50.2025.01.09.07.43.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 09 Jan 2025 07:43:21 -0800 (PST) Content-Type: multipart/mixed; boundary="------------FE0oxTI00XFZi0X04IWaHKe8" Message-ID: <2b9ca3eb-e61e-456e-aed3-9e335d555acf@ongres.com> Date: Thu, 9 Jan 2025 16:43:16 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: deb package sizes To: Jeremy Schneider , pgsql-pkg-debian@lists.postgresql.org References: <20250109005301.3b145092@jeremy-ThinkPad-T430s> Content-Language: en-US From: =?UTF-8?B?w4FsdmFybyBIZXJuw6FuZGV6?= Autocrypt: addr=aht@ongres.com; keydata= xsFNBF8HXQQBEACnRGsBas+BUNQkdN0O0qqfjL/G78gxAI2/6pTLsvXOmA0a6A+o16HynaBc PYgWeMrPj3fAlHQ4dyw2CF++LKRmr0xx04GaSi3bijCutRiyFFpdvl2VVRWlYmQhrfS4dVRl 2cHn+umoj9DOf0DpPYLyB/tHZIaBz1TU/69/7qD3G4NaAI2uGCji2pBNI1TEhOGXPE7HHGxJ k4Paf4Dby3VVeufcsTPa006kXj/aEObinpE41Yl/UgeQbnnPazHPXrFyfWpPqw6+kz7Tb+19 sOGJJAJplVmyqZ2Mewf1RtGOsBD8JABpdzLtv+FxKumnMcEYHLFgD6EQQQZiygg/wUQdXZll mvvxlI5VKjxHPnfPvqM44vhWSVPZicH4lWHHXPipesan+7Qg5lVjTnJZHpA6qJtddlNESFKf XHm7hzRgOyFuFwU2MABVjQv1noMJqOtM+SaSprEOwt4azanK/CUYQtjNKvAqxOv+YDQ6mWnF +Ly97BqSu/xufPzriEL7Qz/tY4Hj4nZAxtud+txhO8LCvu4NsXZUbiuMYgKzxmG9fUFkEAyL btBvveH0vzH0wO10lVq0MNeVWTREfRQ8bLjxj5h0pCz65x6+bdtpO0pQXmV1w0hFvwxobRHt JubEKLiDPktJ5jHVsa+JqP34SxHm6e9TKG2EQJVlz03RU7g4tQARAQABzTZBbHZhcm8gSGVy bmFuZGV6IChPbkdyZXMgR1BHIGFjY291bnQpIDxhaHRAb25ncmVzLmNvbT7CwY4EEwEKADgW IQTZ+rL52ABbxJPBTt4qF9KKhgviwwUCXwddBAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIX gAAKCRAqF9KKhgviw7WED/44JVShqBCxbSRceu6TOR/H391tAvfyHsAV9vplA7qaqabppqC8 rWL7t6Ngs53473TgPD+fUDo2gS/8c+TKmJGaGVnbXmFBrEB941nJ2r9Y97NtDXs3j7N7Ed4o nr7p01S8Q3BTIWb5tUYa+EkUFOMozPfN3OKStWPhonXADuDv6lZhmw6XkaZ5UHaf4Oj3HGeM 0KyKWzcVzs47d3Gvi6xjeKOK3VjGNrLKeqO/Ebs8m/WpFSc73s4EbiX9141rcTpHBKzETToE wC85hXYNcVF+Is9SFBAbiC05gA4f+4IZK9W+C4o4cRWOlSCE2imgD375JKStaFi158HGL/uG 8sH1ttnG1vjLUQFE694qHOUXTMUjpyiJPsZLf98LTXSawI35tFV0JwBnwPCYvIn7Bavame17 fpszGQraXKqQKhBB+rAaHkiDTeYnFlR5St13yhbwwR7JfuHZJ4LvKbCbTxgWhNHH97k+6p9v cYo4cvcqgbzWG8TPDCZVR4syqfdDlpYS0YCjv2p/JkJ/rjMoopqroGYHOsNa4bltGri0e2Ms L72DQ4qDDqat9QQlgUIUeHB7wYlVTqy1s3z0etAHNCfV86LjcBIbx9ZIx4ztQsCkVCaKFAcX HZqBlo/3O4Xo9ULWYT5SCH7XXfXADxblsSRqTDAACWf/86EpwDMVHMOl6M7BTQRfB10EARAA uWfs9X2szukOUjFRCuwJgkVKByY8j2i4C4b4/aQF1dJqjo5Ucf16HzDv7LJJgVIEA0XTjuon 1EelvdIcFR1cjO2b1j8k/tUc8eG0SCr/DfhbYBHllFLTT3CMNuwqqxPJ1/8HlNWrrZreloli /wKu5Mq2XKYkvGj/jWnUpW/nzRQJK+uQYNgNsSdcEeQUFcj0NCs3nRNsz/Av9lfMbcKL3ndE vYIid9KL3cT65tuwO6/x6dgTsT84tdDqqOCCuu2bfltXP4wFtXVGvTC43UpMhEO2VDNCiM19 iihwsXJoG6dHgbh8ozINbMrmZyS68h+ITuiaFc1a7JrlXdxnMedGoIsQX0jKbYuNQEP66ovg 3gGq5TGJ+/2TvytcVHqu0mHV382z5/2duaYyTzlvTaMu9snBW5ACBn1WVguzSn1RiTBvvbd2 kKTKtFXMkwK8EGp/0OEXAoBbSIiIeAUjAFs038YxRj24IIEI4TGNXfZwCLVDS+51EnNwI9YJ fOW5F5l1KiKbHDPsLDj1XytHWaX2jGcNYnFIPVbH1ctj9us7uhttlvJ+F3hBsr1+BfFsCZeu +UbpTF67QUxXlbo8FJbDxYQ/WPG5tClBNAXYkaUsrcR3Oe/DYLrdvWbx2P3FKVZZUit+BAxs +JhhgPaaMA9GOnagyPSteX5nvEfu0hPmtgMAEQEAAcLBdgQYAQoAIBYhBNn6svnYAFvEk8FO 3ioX0oqGC+LDBQJfB10EAhsMAAoJECoX0oqGC+LDiBYP/ivrzautlV1odKBYmhWC5uRPazp5 7Q+Z5q8ak6UkSes9+P8laJRyEcxlGm95BJKiYNq8V9L2HTiLJ1OS+QpDW+xDBVpPoQ6S8Scs Tp3YDIze4MPEk22gaWvXAmfr8KACFlDO4GPKTNarN2CL9zoVL8A16O8vIUoPnaH+Qaq3mgy9 y0HlSPO+Vyy0W1zaxhLg9iG+c0jXNe+NrIZMzgZ6xMlxhUdIRFdsS9somXQbidlu53hSqf1/ oGv53Xcv0N1O/2rxgXm6eMypl9MzSEVo62VEphxH2rGKzT7/xKB8HgxIwb9P4Zc9N2JI0GOk vSliuLlmZplSJoqLl2uXsbz+uo5FLkMGrzHH3gNxjHYDX42rbRx1dkcXNfSMizKXY+N9ICy5 +6cx/z4Dj6gSucmVYKySRNdlXQ11/mklV/DoJ1bED6nKyqGBbCDuVGpjvaaBpVJutnPtN6M1 PHSlduJgSI1xQvOc5OiwME2gxiVnXRNYXjdh4DXMjagg1W9GvJnbgSxsKmmEPL2/XaFJRnKK NvktDmXISoacIVqyx4nu+X33e212iAltBrZbSGN1Ehx81FP7LmNuV0H/SYAEyogGS5RFlfAn zrHPa5TQtrzsrc3UuCmxy7/lPImx1n4bdpD/mTZUWmYHrtmRHpl/VFCi1jrOTpr6f1SAusdA ycqrESCJ In-Reply-To: <20250109005301.3b145092@jeremy-ThinkPad-T430s> 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. --------------FE0oxTI00XFZi0X04IWaHKe8 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 9/1/25 9:53, Jeremy Schneider wrote: > Hello, I hope I found a good mailing list for this topic? > > Recently, I've been spending some time looking at the official Postgres > docker images. https://hub.docker.com/_/postgres/     Hi Jeremy.     Nitpicking a bit, but I'd call these the "Official Docker Postgres images". They are official from Docker's perspective. I say this for general awareness, not everybody understand it's like this. > With docker images, we like to get the container images to be as > minimal and small as possible.     Agreed. > I have spent a little time looking at the > make-up of the official docker images from a size perspective, which is > driven by debian package sizes.     In my opinion, "system packages" (deb, rpm, etc) are not necessarily the best way to compose container images. They are designed for "systems", and usually contain many files that may not be needed on a container. > Before adding any PGDG postgres packages or dependencies, our base OS > container image is 74MB and includes about 88 debian packages.     Something to consider here is using Distroless (https://github.com/GoogleContainerTools/distroless) which is a bit of a misnomer as it really it's based on Debian too. > We install only 5 PGDG postgres packages: postgresql, > postgresql-client, postgresql-client-common, postgresql-common and > libpq5. The "common" packages are tiny, libpq is 1MB, client is 10MB > and the postgresql package itself is 60MB. > > What's more interesting is all of the additional dependencies that the > postgresql package pulls in: an extra 53 debian packages that are over > 250MB in total size. > > The biggest size contributors are libllvm & libz3 (143MB), libperl & > perl-modules (45MB total) and libicu (36MB). These three things alone > make up 64% of the total postgres-specific bytes.     While the results are not too different from your analysis, I'd do it from the layers that compose the image itself. Here's a simple way to do it: $ docker history --no-trunc --format '{{ .Size }} {{ .CreatedBy }}' postgres  |egrep '^[0-9]+(\.[0-9]+)?MB'  | cut -b 1-72 330MB RUN /bin/sh -c set -ex;   export PYTHONDONTWRITEBYTECODE=1; dpkg 3.61MB RUN /bin/sh -c set -eux;  apt-get update;  apt-get install -y --n 26.9MB RUN /bin/sh -c set -eux;  if [ -f /etc/dpkg/dpkg.cfg.d/docker ]; 4.27MB RUN /bin/sh -c set -eux;  savedAptMark="$(apt-mark showmanual)"; 10.8MB RUN /bin/sh -c set -ex;  apt-get update;  apt-get install -y --no 85.2MB # debian.sh --arch 'amd64' out/ 'bookworm' '@1734912000' (see attached a non-truncated version for completeness)     "Base" image is 85MB, Postgres plus dependencies is 330MB (which you distilled in more detail) and then there's some other 27MB in locales and 11MB in additional tools.     Also to note is that Docker's official Postgres image compiles from source packages, not just installs from PGDG (e.g. see https://github.com/docker-library/postgres/blob/cb049360d9a316e429740d47431e0d6fa129d11a/17/bookworm/Dockerfile#L137). > I'm wondering if there might be any support for providing a > "postgresql-slim" package on PGDG which excludes llvm and python? I > think this might almost cut the total install size in half, and I think > there might be many users who would value having the option. > > Even though ICU is a larger package, I would argue for still > including it in a "slim" build. Because of the drama around glibc > collation I view ICU as especially important to make available. > > Interested to know others' thoughts about having a slimmer package.     +1     I believe there should be place for slimmer, or even better, user-configurable Postgres images. Different use cases need different containers. Postgres on testcontainers use case needs little to no additional features, while a production setup may require different additional tools. Similarly, different environments (ICU / not ICU, sets of locales, parallel query or not) may require different images. Having choice here would be of great benefit.     Álvaro -- Alvaro Hernandez ----------- OnGres --------------FE0oxTI00XFZi0X04IWaHKe8 Content-Type: text/plain; charset=UTF-8; name="postgres-image.layers.size.txt" Content-Disposition: attachment; filename="postgres-image.layers.size.txt" Content-Transfer-Encoding: base64 MzMwTUIgUlVOIC9iaW4vc2ggLWMgc2V0IC1leDsgICBleHBvcnQgUFlUSE9ORE9OVFdSSVRF QllURUNPREU9MTsgICBkcGtnQXJjaD0iJChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKSI7 ICBhcHRSZXBvPSJbIHNpZ25lZC1ieT0vdXNyL2xvY2FsL3NoYXJlL2tleXJpbmdzL3Bvc3Rn cmVzLmdwZy5hc2MgXSBodHRwOi8vYXB0LnBvc3RncmVzcWwub3JnL3B1Yi9yZXBvcy9hcHQv IGJvb2t3b3JtLXBnZGcgbWFpbiAkUEdfTUFKT1IiOyAgY2FzZSAiJGRwa2dBcmNoIiBpbiAg IGFtZDY0IHwgYXJtNjQgfCBwcGM2NGVsIHwgczM5MHgpICAgIGVjaG8gImRlYiAkYXB0UmVw byIgPiAvZXRjL2FwdC9zb3VyY2VzLmxpc3QuZC9wZ2RnLmxpc3Q7ICAgIGFwdC1nZXQgdXBk YXRlOyAgICA7OyAgICopICAgIGVjaG8gImRlYi1zcmMgJGFwdFJlcG8iID4gL2V0Yy9hcHQv c291cmNlcy5saXN0LmQvcGdkZy5saXN0OyAgICAgICBzYXZlZEFwdE1hcms9IiQoYXB0LW1h cmsgc2hvd21hbnVhbCkiOyAgICAgICB0ZW1wRGlyPSIkKG1rdGVtcCAtZCkiOyAgICBjZCAi JHRlbXBEaXIiOyAgICAgICBhcHQtZ2V0IHVwZGF0ZTsgICAgYXB0LWdldCBpbnN0YWxsIC15 IC0tbm8taW5zdGFsbC1yZWNvbW1lbmRzIGRwa2ctZGV2OyAgICBlY2hvICJkZWIgWyB0cnVz dGVkPXllcyBdIGZpbGU6Ly8kdGVtcERpciAuLyIgPiAvZXRjL2FwdC9zb3VyY2VzLmxpc3Qu ZC90ZW1wLmxpc3Q7ICAgIF91cGRhdGVfcmVwbygpIHsgICAgIGRwa2ctc2NhbnBhY2thZ2Vz IC4gPiBQYWNrYWdlczsgICAgIGFwdC1nZXQgLW8gQWNxdWlyZTo6R3ppcEluZGV4ZXM9ZmFs c2UgdXBkYXRlOyAgICB9OyAgICBfdXBkYXRlX3JlcG87ICAgICAgIG5wcm9jPSIkKG5wcm9j KSI7ICAgIGV4cG9ydCBERUJfQlVJTERfT1BUSU9OUz0ibm9jaGVjayBwYXJhbGxlbD0kbnBy b2MiOyAgICBhcHQtZ2V0IGJ1aWxkLWRlcCAteSBwb3N0Z3Jlc3FsLWNvbW1vbiBwZ2RnLWtl eXJpbmc7ICAgIGFwdC1nZXQgc291cmNlIC0tY29tcGlsZSBwb3N0Z3Jlc3FsLWNvbW1vbiBw Z2RnLWtleXJpbmc7ICAgIF91cGRhdGVfcmVwbzsgICAgYXB0LWdldCBidWlsZC1kZXAgLXkg InBvc3RncmVzcWwtJFBHX01BSk9SPSRQR19WRVJTSU9OIjsgICAgYXB0LWdldCBzb3VyY2Ug LS1jb21waWxlICJwb3N0Z3Jlc3FsLSRQR19NQUpPUj0kUEdfVkVSU0lPTiI7ICAgICAgICAg IGFwdC1tYXJrIHNob3dtYW51YWwgfCB4YXJncyBhcHQtbWFyayBhdXRvID4gL2Rldi9udWxs OyAgICBhcHQtbWFyayBtYW51YWwgJHNhdmVkQXB0TWFyazsgICAgICAgbHMgLWxBRmg7ICAg IF91cGRhdGVfcmVwbzsgICAgZ3JlcCAnXlBhY2thZ2U6ICcgUGFja2FnZXM7ICAgIGNkIC87 ICAgIDs7ICBlc2FjOyAgIGFwdC1nZXQgaW5zdGFsbCAteSAtLW5vLWluc3RhbGwtcmVjb21t ZW5kcyBwb3N0Z3Jlc3FsLWNvbW1vbjsgIHNlZCAtcmkgJ3MvIyhjcmVhdGVfbWFpbl9jbHVz dGVyKSAuKiQvXDEgPSBmYWxzZS8nIC9ldGMvcG9zdGdyZXNxbC1jb21tb24vY3JlYXRlY2x1 c3Rlci5jb25mOyAgYXB0LWdldCBpbnN0YWxsIC15IC0tbm8taW5zdGFsbC1yZWNvbW1lbmRz ICAgInBvc3RncmVzcWwtJFBHX01BSk9SPSRQR19WRVJTSU9OIiAgOyAgIHJtIC1yZiAvdmFy L2xpYi9hcHQvbGlzdHMvKjsgICBpZiBbIC1uICIkdGVtcERpciIgXTsgdGhlbiAgIGFwdC1n ZXQgcHVyZ2UgLXkgLS1hdXRvLXJlbW92ZTsgICBybSAtcmYgIiR0ZW1wRGlyIiAvZXRjL2Fw dC9zb3VyY2VzLmxpc3QuZC90ZW1wLmxpc3Q7ICBmaTsgICBmaW5kIC91c3IgLW5hbWUgJyou cHljJyAtdHlwZSBmIC1leGVjIGJhc2ggLWMgJ2ZvciBweWM7IGRvIGRwa2cgLVMgIiRweWMi ICY+IC9kZXYvbnVsbCB8fCBybSAtdmYgIiRweWMiOyBkb25lJyAtLSAne30nICs7ICAgcG9z dGdyZXMgLS12ZXJzaW9uICMgYnVpbGRraXQKMy42MU1CIFJVTiAvYmluL3NoIC1jIHNldCAt ZXV4OyAgYXB0LWdldCB1cGRhdGU7ICBhcHQtZ2V0IGluc3RhbGwgLXkgLS1uby1pbnN0YWxs LXJlY29tbWVuZHMgICBsaWJuc3Mtd3JhcHBlciAgIHh6LXV0aWxzICAgenN0ZCAgOyAgcm0g LXJmIC92YXIvbGliL2FwdC9saXN0cy8qICMgYnVpbGRraXQKMjYuOU1CIFJVTiAvYmluL3No IC1jIHNldCAtZXV4OyAgaWYgWyAtZiAvZXRjL2Rwa2cvZHBrZy5jZmcuZC9kb2NrZXIgXTsg dGhlbiAgIGdyZXAgLXEgJy91c3Ivc2hhcmUvbG9jYWxlJyAvZXRjL2Rwa2cvZHBrZy5jZmcu ZC9kb2NrZXI7ICAgc2VkIC1yaSAnL1wvdXNyXC9zaGFyZVwvbG9jYWxlL2QnIC9ldGMvZHBr Zy9kcGtnLmNmZy5kL2RvY2tlcjsgICAhIGdyZXAgLXEgJy91c3Ivc2hhcmUvbG9jYWxlJyAv ZXRjL2Rwa2cvZHBrZy5jZmcuZC9kb2NrZXI7ICBmaTsgIGFwdC1nZXQgdXBkYXRlOyBhcHQt Z2V0IGluc3RhbGwgLXkgLS1uby1pbnN0YWxsLXJlY29tbWVuZHMgbG9jYWxlczsgcm0gLXJm IC92YXIvbGliL2FwdC9saXN0cy8qOyAgZWNobyAnZW5fVVMuVVRGLTggVVRGLTgnID4+IC9l dGMvbG9jYWxlLmdlbjsgIGxvY2FsZS1nZW47ICBsb2NhbGUgLWEgfCBncmVwICdlbl9VUy51 dGY4JyAjIGJ1aWxka2l0CjQuMjdNQiBSVU4gL2Jpbi9zaCAtYyBzZXQgLWV1eDsgIHNhdmVk QXB0TWFyaz0iJChhcHQtbWFyayBzaG93bWFudWFsKSI7ICBhcHQtZ2V0IHVwZGF0ZTsgIGFw dC1nZXQgaW5zdGFsbCAteSAtLW5vLWluc3RhbGwtcmVjb21tZW5kcyBjYS1jZXJ0aWZpY2F0 ZXMgd2dldDsgIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKjsgIGRwa2dBcmNoPSIkKGRw a2cgLS1wcmludC1hcmNoaXRlY3R1cmUgfCBhd2sgLUYtICd7IHByaW50ICRORiB9JykiOyAg d2dldCAtTyAvdXNyL2xvY2FsL2Jpbi9nb3N1ICJodHRwczovL2dpdGh1Yi5jb20vdGlhbm9u L2dvc3UvcmVsZWFzZXMvZG93bmxvYWQvJEdPU1VfVkVSU0lPTi9nb3N1LSRkcGtnQXJjaCI7 ICB3Z2V0IC1PIC91c3IvbG9jYWwvYmluL2dvc3UuYXNjICJodHRwczovL2dpdGh1Yi5jb20v dGlhbm9uL2dvc3UvcmVsZWFzZXMvZG93bmxvYWQvJEdPU1VfVkVSU0lPTi9nb3N1LSRkcGtn QXJjaC5hc2MiOyAgZXhwb3J0IEdOVVBHSE9NRT0iJChta3RlbXAgLWQpIjsgIGdwZyAtLWJh dGNoIC0ta2V5c2VydmVyIGhrcHM6Ly9rZXlzLm9wZW5wZ3Aub3JnIC0tcmVjdi1rZXlzIEI0 MkY2ODE5MDA3RjAwRjg4RTM2NEZENDAzNkE5QzI1QkYzNTdERDQ7ICBncGcgLS1iYXRjaCAt LXZlcmlmeSAvdXNyL2xvY2FsL2Jpbi9nb3N1LmFzYyAvdXNyL2xvY2FsL2Jpbi9nb3N1OyAg Z3BnY29uZiAtLWtpbGwgYWxsOyAgcm0gLXJmICIkR05VUEdIT01FIiAvdXNyL2xvY2FsL2Jp bi9nb3N1LmFzYzsgIGFwdC1tYXJrIGF1dG8gJy4qJyA+IC9kZXYvbnVsbDsgIFsgLXogIiRz YXZlZEFwdE1hcmsiIF0gfHwgYXB0LW1hcmsgbWFudWFsICRzYXZlZEFwdE1hcmsgPiAvZGV2 L251bGw7ICBhcHQtZ2V0IHB1cmdlIC15IC0tYXV0by1yZW1vdmUgLW8gQVBUOjpBdXRvUmVt b3ZlOjpSZWNvbW1lbmRzSW1wb3J0YW50PWZhbHNlOyAgY2htb2QgK3ggL3Vzci9sb2NhbC9i aW4vZ29zdTsgIGdvc3UgLS12ZXJzaW9uOyAgZ29zdSBub2JvZHkgdHJ1ZSAjIGJ1aWxka2l0 CjEwLjhNQiBSVU4gL2Jpbi9zaCAtYyBzZXQgLWV4OyAgYXB0LWdldCB1cGRhdGU7ICBhcHQt Z2V0IGluc3RhbGwgLXkgLS1uby1pbnN0YWxsLXJlY29tbWVuZHMgICBnbnVwZyAgIGxlc3Mg IDsgIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKiAjIGJ1aWxka2l0Cjg1LjJNQiAjIGRl Ymlhbi5zaCAtLWFyY2ggJ2FtZDY0JyBvdXQvICdib29rd29ybScgJ0AxNzM0OTEyMDAwJwo= --------------FE0oxTI00XFZi0X04IWaHKe8--