[bug#81040] [PATCH] dist: introduce AM_OPTIONAL_AUTOMAKE for best-effort dist-XXX archives.

Kamila Szewczyk <[email protected]> Thu, 14 May 2026 16:17:52 +0200
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------JSC2zLJKSzcg65q0sh72GU00
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

Some projects want to offer a recently-added archive format (such as
dist-bzip3, which entered Automake in 1.18 - bug#73795, or dist-lzip)
while remaining portable to systems whose installed Automake predates
the option, or whose maintainer host lacks the matching compressor or
archiver.  Listing dist-bzip3 or dist-lzip in AM_INIT_AUTOMAKE on such a
system either fails at automake-time because the option is not
recognized, or at make-dist-time because the tool is not on PATH.

The new AM_OPTIONAL_AUTOMAKE macro covers exactly this case.  It
sidesteps the default machinery offering more fault tolerance: at
configure time it AC_CHECK_PROGs each requested tool; at config.status
time it appends a guarded 'am--optional-dist-TOOL' rule to the generated
top-level Makefile and pushes that rule onto DIST_TARGETS.  The recipe
re-probes the tool with 'command -v' before running it, deletes any
partial output on failure, and always exits 0 so the rest of 'make dist'
is never disturbed. Unknown OPTIONS entries trigger an m4_warn(syntax)
at autoreconf time and are otherwise ignored.

The macro relies only on Automake's 'distdir' target and on
$(am__tar), both present since Automake 1.10, so it works with any
reasonably recent automake; there is no need to teach automake
itself about the option.

It is concieveable that this will be used in future for more than just
codecs to make the adoption process of new features seamless in light of
Automake's long release cycle and mild unhappiness of distro maintainers
to ship new versions.

* m4/optional.m4: New file.  Define AM_OPTIONAL_AUTOMAKE and its
internal helpers _AM_OPTIONAL_AUTOMAKE_ONE, _AM_OPTIONAL_TAR, and
_AM_OPTIONAL_ZIP.
* m4/local.mk (dist_automake_ac_DATA): Distribute optional.m4.
* t/am-optional-automake.sh: New test exercising the four
documented scenarios (tool present; unknown option; tool absent at
configure; tool present at configure but absent at 'make dist').
* t/list-of-tests.mk (handwritten_TESTS): Add it.
* doc/automake.texi (Public Macros): Document AM_OPTIONAL_AUTOMAKE.
(The 'dist' rules): Cross-reference it from the dist-bzip3,
dist-lzip, and dist-zstd descriptions.
* NEWS: Mention the new macro under 1.18.2, not released yet.
---
 NEWS                      |  14 ++++
 doc/automake.texi         |  75 ++++++++++++++++-
 m4/local.mk               |   1 +
 m4/optional.m4            | 161 ++++++++++++++++++++++++++++++++++++
 t/am-optional-automake.sh | 169 ++++++++++++++++++++++++++++++++++++++
 t/list-of-tests.mk        |   1 +
 6 files changed, 418 insertions(+), 3 deletions(-)
 create mode 100644 m4/optional.m4
 create mode 100644 t/am-optional-automake.sh

--
With Valediction,
Kamila Szewczyk (https://iczelia.net)

--------------JSC2zLJKSzcg65q0sh72GU00
Content-Type: text/x-patch; charset=UTF-8;
 name="0001-dist-introduce-AM_OPTIONAL_AUTOMAKE-for-best-effort-.patch"
Content-Disposition: attachment;
 filename*0="0001-dist-introduce-AM_OPTIONAL_AUTOMAKE-for-best-effort-.pa";
 filename*1="tch"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IDc4NjI1NTkuLmIwMGUyOTAgMTAwNjQ0
Ci0tLSBhL05FV1MKKysrIGIvTkVXUwpAQCAtMSw2ICsxLDIwIEBACiBGb3IgcGxhbm5lZCBp
bmNvbXBhdGliaWxpdGllcyBpbiBhIHBvc3NpYmxlIGZ1dHVyZSBBdXRvbWFrZSAyLjAgcmVs
ZWFzZSwKIHBsZWFzZSBzZWUgTkVXUy1mdXR1cmUgYW5kIHN0YXJ0IGZvbGxvd2luZyB0aGUg
YWR2aWNlIHRoZXJlIG5vdy4KIAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTmV3IGluIDEu
MTguMiAoPz8/Py0/Py0/Pyk6CisKKyogTmV3IGZlYXR1cmVzIGFkZGVkCisKKyAgLSBOZXcg
YXV0b2NvbmYgbWFjcm8gQU1fT1BUSU9OQUxfQVVUT01BS0UsIGEgbmV2ZXItZmFpbCBjb21w
YW5pb24gdG8KKyAgICBBTV9JTklUX0FVVE9NQUtFIGZvciBvcHBvcnR1bmlzdGljIGBkaXN0
LVhYWCcgYXJjaGl2ZXMuICBUaGUKKyAgICBsaXN0ZWQgYXJjaGl2ZSBmb3JtYXRzIGFyZSBw
cm9kdWNlZCBieSBgbWFrZSBkaXN0JyBvbmx5IHdoZW4gdGhlCisgICAgbWF0Y2hpbmcgdG9v
bCBpcyBmb3VuZCBhdCBjb25maWd1cmUgdGltZSBhbmQgaXMgc3RpbGwgYXZhaWxhYmxlCisg
ICAgYXQgYG1ha2UgZGlzdCcgdGltZTsgb3RoZXJ3aXNlIHRoZSBhcmNoaXZlIGlzIHNpbGVu
dGx5IG9taXR0ZWQKKyAgICBhbmQgdGhlIHJlc3Qgb2YgYG1ha2UgZGlzdCcgaXMgdW5hZmZl
Y3RlZC4gIFVzZWZ1bCBmb3Igb2ZmZXJpbmcKKyAgICBuZXdlciBmb3JtYXRzIGxpa2UgYGRp
c3QtYnppcDMnIHdpdGhvdXQgYnJlYWtpbmcgb24gaG9zdHMgd2hlcmUKKyAgICBiemlwMyBp
cyBub3QgaW5zdGFsbGVkLgorCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiBOZXcgaW4gMS4x
OC4xICgyMDI1LTA2LTI1KToKIApkaWZmIC0tZ2l0IGEvZG9jL2F1dG9tYWtlLnRleGkgYi9k
b2MvYXV0b21ha2UudGV4aQppbmRleCBlZWFjZWU3Li5lZTgyYzI3IDEwMDY0NAotLS0gYS9k
b2MvYXV0b21ha2UudGV4aQorKysgYi9kb2MvYXV0b21ha2UudGV4aQpAQCAtNDEzNyw2ICs0
MTM3LDY2IEBAIG9wdGlvbiAoQHB4cmVme0xpc3Qgb2YgQXV0b21ha2Ugb3B0aW9uc30pOgog
QU1fSU5JVF9BVVRPTUFLRShbbm8tZGVmaW5lIC4uLl0pCiBAZW5kIGV4YW1wbGUKIAorQGl0
ZW0gQU1fT1BUSU9OQUxfQVVUT01BS0UoW0B2YXJ7b3B0aW9uc31dKQorQGFjaW5kZXggQU1f
T1BUSU9OQUxfQVVUT01BS0UKK0BjaW5kZXggT3B0aW9uYWwgQGNvZGV7ZGlzdC19IGFyY2hp
dmVzCitAY2luZGV4IEJlc3QtZWZmb3J0IGRpc3RyaWJ1dGlvbiBhcmNoaXZlcworQSBuZXZl
ci1mYWlsIGNvbXBhbmlvbiB0byBAY29kZXtBTV9JTklUX0FVVE9NQUtFfSBmb3Igb3Bwb3J0
dW5pc3RpYworQGNvZGV7ZGlzdC19IGFyY2hpdmVzLiAgVGhlIGFyZ3VtZW50IEB2YXJ7b3B0
aW9uc30gaXMgYQord2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBAY29kZXtkaXN0LX0g
b3B0aW9uIG5hbWVzIGFjY2VwdGVkIGJ5CitAY29kZXtBTV9JTklUX0FVVE9NQUtFfTogQG9w
dGlvbntkaXN0LWJ6aXAyfSwgQG9wdGlvbntkaXN0LWJ6aXAzfSwKK0BvcHRpb257ZGlzdC14
en0sIEBvcHRpb257ZGlzdC1semlwfSwgQG9wdGlvbntkaXN0LXpzdGR9LCBhbmQKK0BvcHRp
b257ZGlzdC16aXB9LiAgRm9yIGVhY2ggb25lLCBAc2FtcHttYWtlIGRpc3R9IHByb2R1Y2Vz
IHRoZQorbWF0Y2hpbmcgYXJjaGl2ZSBAZW1waHtvbmx5IHdoZW4gdGhlIGNvbXByZXNzb3Ig
b3IgYXJjaGl2ZXIgdG9vbCBpcworYXZhaWxhYmxlfTsgb3RoZXJ3aXNlIHRoZSBhcmNoaXZl
IGlzIHNpbGVudGx5IG9taXR0ZWQuCisKK1VubGlrZSBwYXNzaW5nIHRoZSBzYW1lIG9wdGlv
bnMgdG8gQGNvZGV7QU1fSU5JVF9BVVRPTUFLRX0sCitAY29kZXtBTV9PUFRJT05BTF9BVVRP
TUFLRX0gZ3VhcmFudGVlcyB0aGF0IG5vdGhpbmcgaXQgZG9lcyB3aWxsIGZhaWwKK3RoZSBi
dWlsZDoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK0FuIHVua25vd24gb3IgbWlzc3Bl
bGxlZCBAdmFye29wdGlvbn0gcHJvZHVjZXMgYSBAY29kZXtzeW50YXh9CitkaWFnbm9zdGlj
IGF0IGF1dG9yZWNvbmYgdGltZSBhbmQgaXMgdGhlbiBpZ25vcmVkLiAgQ29uZmlndXJhdGlv
bgorYW5kIHRoZSBidWlsZCBrZWVwIHdvcmtpbmcuCisKK0BpdGVtCitUaGUgdG9vbCB3YXMg
bm90IGZvdW5kIGJ5IEBjb21tYW5key4vY29uZmlndXJlfTogbm8gZXh0cmEgcnVsZSBpcwor
YXBwZW5kZWQgdG8gdGhlIGdlbmVyYXRlZCBAZmlsZXtNYWtlZmlsZX0sIHNvIEBzYW1we21h
a2UgZGlzdH0KK3NpbXBseSBkb2VzIG5vdCBwcm9kdWNlIHRoYXQgYXJjaGl2ZS4KKworQGl0
ZW0KK1RoZSB0b29sIHdhcyBwcmVzZW50IGF0IGNvbmZpZ3VyZSB0aW1lIGJ1dCBkaXNhcHBl
YXJlZCBieSB0aGUgdGltZQorQHNhbXB7bWFrZSBkaXN0fSBydW5zOiB0aGUgcmVjaXBlIHJl
LWNoZWNrcyB0aGUgdG9vbCB3aXRoCitAY29tbWFuZHtjb21tYW5kIC12fSwgcHJpbnRzIGEg
d2FybmluZyB0byBzdGFuZGFyZCBlcnJvciwgcmVtb3ZlcyBhbnkKK3BhcnRpYWwgb3V0cHV0
LCBhbmQgc3RpbGwgZXhpdHMgc3VjY2Vzc2Z1bGx5LiAgVGhlIHJlc3Qgb2YKK0BzYW1we21h
a2UgZGlzdH0gaXMgdW5hZmZlY3RlZC4KKworQGl0ZW0KK1RoZSB1c2VyJ3MgQGNvbW1hbmR7
YXV0b21ha2V9IGlzIHRvbyBvbGQgdG8ga25vdyBhYm91dCB0aGUgb3B0aW9uCisoQG9wdGlv
bntkaXN0LWJ6aXAzfSB3YXMgb25seSBhZGRlZCBpbiBBdXRvbWFrZSAxLjE4LCBmb3IgZXhh
bXBsZSk6CitpcnJlbGV2YW50LCBzaW5jZSBAY29kZXtBTV9PUFRJT05BTF9BVVRPTUFLRX0g
bmV2ZXIgcGFzc2VzIHRoZSBvcHRpb24KK3RvIEBjb21tYW5ke2F1dG9tYWtlfS4gIEl0IHNo
aXBzIGl0cyBvd24gb3Bwb3J0dW5pc3RpYyBydWxlIGFuZCBvbmx5CityZWxpZXMgb24gdGhl
IEBjb2Rle2Rpc3RkaXJ9IHRhcmdldCBhbmQgQGNvZGV7JChhbV9fdGFyKX0gc2hlbGwKK2Zy
YWdtZW50LCBib3RoIHByZXNlbnQgc2luY2UgQXV0b21ha2UgMS4xMC4KK0BlbmQgaXRlbWl6
ZQorCitBIHR5cGljYWwgdXNlIG1peGVzIGBgcmVxdWlyZWQnJyBmb3JtYXRzIGluIEBjb2Rl
e0FNX0lOSVRfQVVUT01BS0V9Cit3aXRoIGBgb3Bwb3J0dW5pc3RpYycnIG9uZXMgaW4gQGNv
ZGV7QU1fT1BUSU9OQUxfQVVUT01BS0V9OgorCitAZXhhbXBsZQorQU1fSU5JVF9BVVRPTUFL
RShbLVdhbGwgZm9yZWlnbiBkaXN0LWJ6aXAyIGRpc3QteHogZGlzdC16aXBdKQorQU1fT1BU
SU9OQUxfQVVUT01BS0UoW2Rpc3QtYnppcDNdKQorQGVuZCBleGFtcGxlCisKK0hlcmUgdGhl
IEBmaWxley50YXIuZ3p9LCBAZmlsZXsudGFyLmJ6Mn0sIEBmaWxley50YXIueHp9LCBhbmQK
K0BmaWxley56aXB9IGFyY2hpdmVzIGFyZSBhbHdheXMgYnVpbHQgKGFuZCBAc2FtcHttYWtl
IGRpc3R9IGZhaWxzIGlmCit0aGVpciB0b29scyBhcmUgbWlzc2luZyksIHdoaWxlIEBmaWxl
ey50YXIuYnozfSBpcyBidWlsdCBvbmx5IG9uCitob3N0cyB3aGVyZSBAY29tbWFuZHtiemlw
M30gaXMgaW5zdGFsbGVkLgorCitUaGUgbWFjcm8gbWF5IGJlIGNhbGxlZCBhbnkgbnVtYmVy
IG9mIHRpbWVzIHdpdGggYW55IG51bWJlciBvZgorb3B0aW9ucy4gIFJlcXVlc3RpbmcgdGhl
IHNhbWUgb3B0aW9uIHR3aWNlIGlzIGEgaGFybWxlc3Mgbm8tb3AuCisKIEBpdGVtIEFNX1BB
VEhfTElTUERJUgogQGFjaW5kZXggQU1fUEFUSF9MSVNQRElSCiBAdmluZGV4IEVNQUNTCkBA
IC05NDY4LDcgKzk1MjgsMTAgQEAgbWFrZSBpdCB1c2UgYSBkaWZmZXJlbnQgb25lLCBzZXQg
dGhlIEBlbnZ7QlpJUDJ9IGVudmlyb25tZW50IHZhcmlhYmxlLgogQHZpbmRleCBCWklQMwog
R2VuZXJhdGUgYSBAc2FtcHtiemlwM30gdGFyIGFyY2hpdmUgb2YgdGhlIGRpc3RyaWJ1dGlv
bi4gIFVubGlrZSB0aGUKIG90aGVyIGNvbXByZXNzaW9uIHByb2dyYW1zIGhlcmUsIEBjb21t
YW5ke2J6aXAzfSBkb2VzIG5vdCByZWFkIGFueQotZW52aXJvbm1lbnQgdmFyaWFibGVzLgor
ZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgSWYgeW91IHdvdWxkIGxpa2UgQHNhbXB7bWFrZSBk
aXN0fSB0byBwcm9kdWNlCitAZmlsZXsudGFyLmJ6M30gd2hlbiBAY29tbWFuZHtiemlwM30g
aXMgYXZhaWxhYmxlIGFuZCB0byBzaWxlbnRseQorc2tpcCBpdCB3aGVuIGl0IGlzIG5vdCwg
c2VlIEBjb2Rle0FNX09QVElPTkFMX0FVVE9NQUtFfQorKEBweHJlZntQdWJsaWMgTWFjcm9z
fSkuCiAKIEBpdGVtIEBjb2Rle2Rpc3QtbHppcH0KIEB0cmluZGV4IGRpc3QtbHppcApAQCAt
OTQ3OCw3ICs5NTQxLDEwIEBAIEdlbmVyYXRlIGFuIEBzYW1we2x6aXB9IHRhciBhcmNoaXZl
IG9mIHRoZSBkaXN0cmlidXRpb24uCiBAY29tbWFuZHtsemlwfSBhcmNoaXZlcyBhcmUgdXN1
YWxseSBzbWFsbGVyIHRoYW4KIEBjb21tYW5ke2J6aXAyfS1jb21wcmVzc2VkIGFyY2hpdmVz
LiAgQnkgZGVmYXVsdCwgdGhpcyBydWxlIG1ha2VzCiBAc2FtcHtsemlwfSB1c2UgYSBjb21w
cmVzc2lvbiBvcHRpb24gb2YgQG9wdGlvbnstOX0uICBUbyBtYWtlIGl0IHVzZSBhCi1kaWZm
ZXJlbnQgb25lLCBzZXQgdGhlIEBlbnZ7TFpJUF9PUFR9IGVudmlyb25tZW50IHZhcmlhYmxl
LgorZGlmZmVyZW50IG9uZSwgc2V0IHRoZSBAZW52e0xaSVBfT1BUfSBlbnZpcm9ubWVudCB2
YXJpYWJsZS4gIElmIHlvdQord291bGQgbGlrZSBAc2FtcHttYWtlIGRpc3R9IHRvIHByb2R1
Y2UgQGZpbGV7LnRhci5sen0gd2hlbgorQGNvbW1hbmR7bHppcH0gaXMgYXZhaWxhYmxlIGFu
ZCB0byBzaWxlbnRseSBza2lwIGl0IHdoZW4gaXQgaXMgbm90LAorc2VlIEBjb2Rle0FNX09Q
VElPTkFMX0FVVE9NQUtFfSAoQHB4cmVme1B1YmxpYyBNYWNyb3N9KS4KIAogQGl0ZW0gQGNv
ZGV7ZGlzdC14en0KIEB0cmluZGV4IGRpc3QteHoKQEAgLTk1MTAsNyArOTU3NiwxMCBAQCBk
ZWZhdWx0IGNvbXByZXNzaW9uIHJhdGlvLCBidXQgd2l0aCBhIHByb2dyZXNzIGluZGljYXRv
cjogQHNhbXB7bWFrZQogZGlzdC16c3RkIFpTVERfT1BUPS0xOXZ9LiAgSG93ZXZlciwgbm90
ZSB0aGF0IGZvciBjb21wYXRpYmlsaXR5IHdpdGgKIEBjb21tYW5ke3pzdGR9IGl0c2VsZiwg
eW91IG1heSBpbnN0ZWFkIHNldCB0aGUgQGVudntaU1REX0NMRVZFTH0KIGVudmlyb25tZW50
IHZhcmlhYmxlLCBpbiB3aGljaCBjYXNlLCBhbnkgQGVudntaU1REX09QVH0gc2V0dGluZyBp
cwotaWdub3JlZC4KK2lnbm9yZWQuICBJZiB5b3Ugd291bGQgbGlrZSBAc2FtcHttYWtlIGRp
c3R9IHRvIHByb2R1Y2UKK0BmaWxley50YXIuenN0fSB3aGVuIEBjb21tYW5ke3pzdGR9IGlz
IGF2YWlsYWJsZSBhbmQgdG8gc2lsZW50bHkgc2tpcAoraXQgd2hlbiBpdCBpcyBub3QsIHNl
ZSBAY29kZXtBTV9PUFRJT05BTF9BVVRPTUFLRX0KKyhAcHhyZWZ7UHVibGljIE1hY3Jvc30p
LgogCiBAaXRlbSBAY29kZXtkaXN0LXNoYXJ9CiBAdHJpbmRleCBkaXN0LXNoYXIKZGlmZiAt
LWdpdCBhL200L2xvY2FsLm1rIGIvbTQvbG9jYWwubWsKaW5kZXggNWU5ODMwYS4uNmI3NmZk
MiAxMDA2NDQKLS0tIGEvbTQvbG9jYWwubWsKKysrIGIvbTQvbG9jYWwubWsKQEAgLTQzLDYg
KzQzLDcgQEAgZGlzdF9hdXRvbWFrZV9hY19EQVRBID0gXAogICAlRCUvbWlzc2luZy5tNCBc
CiAgICVEJS9ta2RpcnAubTQgXAogICAlRCUvb2Jzb2xldGUubTQgXAorICAlRCUvb3B0aW9u
YWwubTQgXAogICAlRCUvb3B0aW9ucy5tNCBcCiAgICVEJS9weXRob24ubTQgXAogICAlRCUv
cHJvZy1jYy1jLW8ubTQgXApkaWZmIC0tZ2l0IGEvbTQvb3B0aW9uYWwubTQgYi9tNC9vcHRp
b25hbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE5OTE4Ci0t
LSAvZGV2L251bGwKKysrIGIvbTQvb3B0aW9uYWwubTQKQEAgLTAsMCArMSwxNjEgQEAKKyMj
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0qLSBBdXRvY29uZiAtKi0KKyMjIEJlc3QtZWZmb3J0IGBkaXN0LVhYWCcgYXJjaGl2ZXMg
LS0gQU1fT1BUSU9OQUxfQVVUT01BS0UuCisKKyMgQ29weXJpZ2h0IChDKSAyMDI2IEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0
d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQg
cGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdp
dGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2
ZWQuCisKKworIyBBTV9PUFRJT05BTF9BVVRPTUFLRShPUFRJT05TKQorIyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT05TIGlzIGEgd2hpdGVzcGFjZS1zZXBhcmF0
ZWQgbGlzdCBvZiBgZGlzdC1YWFgnIG9wdGlvbiBuYW1lcworIyAodGhlIHNhbWUgc3BlbGxp
bmdzIGFjY2VwdGVkIGJ5IEFNX0lOSVRfQVVUT01BS0U6IGRpc3QtYnppcDIsCisjIGRpc3Qt
YnppcDMsIGRpc3QteHosIGRpc3QtbHppcCwgZGlzdC16c3RkLCBkaXN0LXppcCkuICBGb3Ig
ZWFjaAorIyBlbnRyeSwgYXJyYW5nZSBmb3IgYG1ha2UgZGlzdCcgdG8gYWxzbyBwcm9kdWNl
IHRoZSBtYXRjaGluZyBhcmNoaXZlLAorIyBidXQgKm9ubHkgd2hlbiB0aGUgY29tcHJlc3Nv
ci9hcmNoaXZlciB0b29sIGlzIGF2YWlsYWJsZSosIHdpdGgKKyMgc3RyaWN0bHkgbmV2ZXIt
ZmFpbCBzZW1hbnRpY3M6CisjCisjICAgLSBVbmtub3duIC8gbWlzc3BlbGxlZCBlbnRyeTog
YSBgc3ludGF4JyB3YXJuaW5nIGlzIGVtaXR0ZWQgYXQKKyMgICAgIGF1dG9yZWNvbmYgdGlt
ZSBhbmQgdGhlIGVudHJ5IGlzIGlnbm9yZWQuICBjb25maWd1cmUgYW5kIG1ha2UKKyMgICAg
IGtlZXAgd29ya2luZy4KKyMKKyMgICAtIFRoZSB0b29sIHdhcyBub3QgZm91bmQgYnkgYC4v
Y29uZmlndXJlJzogbm8gZXh0cmEgcnVsZSBpcworIyAgICAgYXBwZW5kZWQgdG8gdGhlIGdl
bmVyYXRlZCBNYWtlZmlsZSwgc28gYG1ha2UgZGlzdCcgc2ltcGx5CisjICAgICBkb2Vzbid0
IHByb2R1Y2UgdGhhdCBhcmNoaXZlLgorIworIyAgIC0gVGhlIHRvb2wgd2FzIHByZXNlbnQg
YXQgY29uZmlndXJlIHRpbWUgYnV0IGRpc2FwcGVhcmVkIGJ5IGBtYWtlCisjICAgICBkaXN0
JyB0aW1lOiB0aGUgcmVjaXBlIHJlLWNoZWNrcyB0aGUgdG9vbCB3aXRoIGBjb21tYW5kIC12
JywKKyMgICAgIHByaW50cyBhIHdhcm5pbmcgdG8gc3RkZXJyLCBkZWxldGVzIGFueSBwYXJ0
aWFsIGFyY2hpdmUsIGFuZAorIyAgICAgc3RpbGwgZXhpdHMgMC4gIE5vdGhpbmcgZWxzZSBp
biBgbWFrZSBkaXN0JyBpcyBhZmZlY3RlZC4KKyMKKyMgICAtIFRoZSB1c2VyJ3MgYXV0b21h
a2UgaXMgdG9vIG9sZCB0byBrbm93IGFib3V0IHRoZSBvcHRpb24gKG9yCisjICAgICBhYm91
dCBgZGlzdC1iemlwMycgYXQgYWxsKTogaXJyZWxldmFudDsgdGhpcyBtYWNybyBuZXZlciBh
c2tzCisjICAgICBhdXRvbWFrZSB0byBoYW5kbGUgdGhlIG9wdGlvbiwgaXQgc2hpcHMgaXRz
IG93biBydWxlLiAgV2UgcmVseQorIyAgICAgb25seSBvbiBhdXRvbWFrZSdzIGBkaXN0ZGly
JyB0YXJnZXQgYW5kIHRoZSBgJChhbV9fdGFyKScgc2hlbGwKKyMgICAgIGZyYWdtZW50LCBi
b3RoIG9mIHdoaWNoIGhhdmUgYmVlbiBwcmVzZW50IHNpbmNlIGF1dG9tYWtlIDEuMTAuCisj
CisjIEltcGxlbWVudGF0aW9uIG5vdGU6IHRoZSBydWxlIGlzIGFwcGVuZGVkIHRvIHRoZSBn
ZW5lcmF0ZWQKKyMgTWFrZWZpbGUgYnkgYW4gQUNfQ09ORklHX0NPTU1BTkRTIGhvb2ssIHNv
IGl0IHN1cnZpdmVzIGV2ZXJ5CisjIGBjb25maWcuc3RhdHVzJyByZXJ1biAoYW5kIHRoZXJl
Zm9yZSBldmVyeSBhdXRvbWF0aWMgcmVnZW5lcmF0aW9uCisjIG9mIE1ha2VmaWxlIGZyb20g
TWFrZWZpbGUuaW4pLiAgRWFjaCBkaXN0aW5jdCBPUFRJT04gcHJvZHVjZXMgb25lCisjIHN1
Y2ggaG9vaywgdGFnZ2VkIHVuaXF1ZWx5IGJ5IHRoZSBvcHRpb24gbmFtZTsgQU1fT1BUSU9O
QUxfQVVUT01BS0UKKyMgbWF5IGJlIGNhbGxlZCBhbnkgbnVtYmVyIG9mIHRpbWVzIHdpdGgg
YW55IG51bWJlciBvZiBvcHRpb25zLCBhbmQKKyMgcmVxdWVzdGluZyB0aGUgc2FtZSBvcHRp
b24gdHdpY2UgaXMgYSBoYXJtbGVzcyBuby1vcC4KK0FDX0RFRlVOKFtBTV9PUFRJT05BTF9B
VVRPTUFLRV0sCitbbTRfZm9yZWFjaF93KFtfYW1fb3B0X29dLCBbJDFdLAorICAgW19BTV9P
UFRJT05BTF9BVVRPTUFLRV9PTkUoX200X2RlZm4oW19hbV9vcHRfb10pKV0pZG5sCitdKQor
CisKKyMgX0FNX09QVElPTkFMX0FVVE9NQUtFX09ORShPUFQpCisjIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorIyBEaXNwYXRjaCBvbiB0aGUgc3BlbGxpbmcgb2YgT1BULiAg
QW4gdW5yZWNvZ25pc2VkIE9QVCBwcm9kdWNlcyBhbgorIyBgbTRfd2FybihzeW50YXgpJyBk
aWFnbm9zdGljIGF0IGF1dG9yZWNvbmYgdGltZSBhbmQgaXMgb3RoZXJ3aXNlCisjIGlnbm9y
ZWQsIHBlciB0aGUgbmV2ZXItZmFpbCBjb250cmFjdC4KK0FDX0RFRlVOKFtfQU1fT1BUSU9O
QUxfQVVUT01BS0VfT05FXSwKK1ttNF9jYXNlKFskMV0sCisgIFtkaXN0LWJ6aXAyXSwgW19B
TV9PUFRJT05BTF9UQVIoW2J6aXAyXSwgW2J6aXAyXSwgW2J6Ml0sIFstY10pXSwKKyAgW2Rp
c3QtYnppcDNdLCBbX0FNX09QVElPTkFMX1RBUihbYnppcDNdLCBbYnppcDNdLCBbYnozXSwg
Wy1jXSldLAorICBbZGlzdC14el0sICAgIFtfQU1fT1BUSU9OQUxfVEFSKFt4el0sICAgIFt4
el0sICAgIFt4el0sICBbLWNdKV0sCisgIFtkaXN0LWx6aXBdLCAgW19BTV9PUFRJT05BTF9U
QVIoW2x6aXBdLCAgW2x6aXBdLCAgW2x6XSwgIFstY10pXSwKKyAgW2Rpc3QtenN0ZF0sICBb
X0FNX09QVElPTkFMX1RBUihbenN0ZF0sICBbenN0ZF0sICBbenN0XSwgWy1jIC1xXSldLAor
ICBbZGlzdC16aXBdLCAgIFtfQU1fT1BUSU9OQUxfWklQXSwKKyAgW200X3dhcm4oW3N5bnRh
eF0sCisgICAgIFthbS1vcHRpb25hbDogdW5rbm93biBvcHRpb24gYCQxJywgaWdub3Jpbmcg
aXRdKV0pZG5sCitdKQorCisKKyMgX0FNX09QVElPTkFMX1RBUihUT09MLCBWQVItVEFHLCBF
WFQsIEZMQUdTKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisjIFdpcmUgdXAgYW4gb3Bwb3J0dW5pc3RpYyBgYW0tLW9wdGlvbmFsLWRpc3QtVE9P
TCcgdGFyZ2V0IHdob3NlCisjIHJlY2lwZSBwaXBlcyAkKGFtX190YXIpIHRocm91Z2ggVE9P
TCB3aXRoIEZMQUdTIGFuZCB3cml0ZXMgdGhlCisjIHJlc3VsdCB0byAkKGRpc3RkaXIpLnRh
ci5FWFQuICBWQVItVEFHIGlzIHRoZSBsb3dlcmNhc2UgdG9vbCBuYW1lCisjIHVzZWQgdG8g
ZGVyaXZlIHRoZSBpbnRlcm5hbCBzaGVsbCAvIG1ha2UgdmFyaWFibGUgbmFtZQorIyBgYW1f
X29wdGlvbmFsX1ZBUl9UQUcnIChpbiBsaW5lIHdpdGggSEFDS0lORydzIGNvbnZlbnRpb24g
dGhhdAorIyBhdXRvbWFrZS1pbnRlcm5hbCBzdWJzdGl0dXRpb25zIHVzZSBhIGxlYWRpbmcg
YGFtX18nKS4KK0FDX0RFRlVOKFtfQU1fT1BUSU9OQUxfVEFSXSwKK1ttNF9pZmRlZihbX0FN
X09QVElPTkFMX0RPTkVfJDFdLCBbXSwKKyBbbTRfZGVmaW5lKFtfQU1fT1BUSU9OQUxfRE9O
RV8kMV0pZG5sCitBQ19DSEVDS19QUk9HKFthbV9fb3B0aW9uYWxfJDJdLCBbJDFdLCBbJDFd
KQorQUNfU1VCU1QoW2FtX19vcHRpb25hbF8kMl0pZG5sCitBQ19DT05GSUdfQ09NTUFORFMo
W2FtLS1vcHRpb25hbC1ydWxlLSQxXSwKK1sjIEFwcGVuZCB0aGUgZGlzdC0kMSBydWxlIHRv
IHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUsIGJ1dCBvbmx5IHdoZW4KKyMgdGhlIHRvb2wgd2Fz
IGZvdW5kIGJ5IGAuL2NvbmZpZ3VyZScgQU5EIHdlIGhhdmUgc29tZXRoaW5nIHRoYXQKKyMg
bG9va3MgbGlrZSBhIHRvcC1sZXZlbCBNYWtlZmlsZSB0byBlZGl0LiAgVGhpcyBzdGVwIG5l
dmVyIGZhaWxzLgorYW1fX29wdGlvbmFsX21mPQorZm9yIGFtX19vcHRpb25hbF9jYW5kIGlu
IE1ha2VmaWxlIEdOVW1ha2VmaWxlIG1ha2VmaWxlOyBkbworICBpZiB0ZXN0IC1mICIkYW1f
X29wdGlvbmFsX2NhbmQiOyB0aGVuCisgICAgYW1fX29wdGlvbmFsX21mPSRhbV9fb3B0aW9u
YWxfY2FuZAorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC1uICIkYW1fX29wdGlv
bmFsX21mIiAmJiB0ZXN0IC1uICIkYW1fX29wdGlvbmFsXyQyIjsgdGhlbgorICBjYXQgPj4i
JGFtX19vcHRpb25hbF9tZiIgPDwnX2FtX29wdF9ydWxlX2VvZl8nCisKKyMgQXBwZW5kZWQg
YnkgYW0tb3B0aW9uYWwgZm9yIGRpc3QtJDEuCitESVNUX1RBUkdFVFMgKz0gYW0tLW9wdGlv
bmFsLWRpc3QtJDEKKworLlBIT05ZOiBhbS0tb3B0aW9uYWwtZGlzdC0kMQorYW0tLW9wdGlv
bmFsLWRpc3QtJDE6IGRpc3RkaXIKKwlAaWYgdGVzdCAtbiAiJChhbV9fb3B0aW9uYWxfJDIp
IiBcCisJICAgICYmIChjb21tYW5kIC12ICIkKGFtX19vcHRpb25hbF8kMikiID4vZGV2L251
bGwgMj4mMSk7IHRoZW4gXAorCSAgeyB0YXJkaXI9JChkaXN0ZGlyKSBcCisJICAgICYmICQo
YW1fX3RhcikgfCAiJChhbV9fb3B0aW9uYWxfJDIpIiAkNCA+ICQoZGlzdGRpcikudGFyLiQz
OyB9IFwKKwkgIHx8IHsgcm0gLWYgJChkaXN0ZGlyKS50YXIuJDM7IFwKKwkgICAgICAgZWNo
byAiYW0tb3B0aW9uYWw6IGRpc3QtJDEgZmFpbGVkOyBhcmNoaXZlIG5vdCBidWlsdCIgPiYy
OyBcCisJICAgICAgIDo7IH07IFwKKwllbHNlIFwKKwkgIGVjaG8gImFtLW9wdGlvbmFsOiAk
MSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgJChkaXN0ZGlyKS50YXIuJDMiID4mMjsgXAorCWZp
OyBcCisJOgorX2FtX29wdF9ydWxlX2VvZl8KK2ZpCitdLAorW2FtX19vcHRpb25hbF8kMj0i
JGFtX19vcHRpb25hbF8kMiIKK10pXSlkbmwKK10pCisKKworIyBfQU1fT1BUSU9OQUxfWklQ
CisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgVmFyaWFudCBmb3IgYGRpc3QtemlwJywgd2hpY2gg
ZG9lc24ndCBmb2xsb3cgdGhlIHRhci1waXBlIHBhdHRlcm4uCitBQ19ERUZVTihbX0FNX09Q
VElPTkFMX1pJUF0sCitbbTRfaWZkZWYoW19BTV9PUFRJT05BTF9ET05FX3ppcF0sIFtdLAor
IFttNF9kZWZpbmUoW19BTV9PUFRJT05BTF9ET05FX3ppcF0pZG5sCitBQ19DSEVDS19QUk9H
KFthbV9fb3B0aW9uYWxfemlwXSwgW3ppcF0sIFt6aXBdKQorQUNfU1VCU1QoW2FtX19vcHRp
b25hbF96aXBdKWRubAorQUNfQ09ORklHX0NPTU1BTkRTKFthbS0tb3B0aW9uYWwtcnVsZS16
aXBdLAorW2FtX19vcHRpb25hbF9tZj0KK2ZvciBhbV9fb3B0aW9uYWxfY2FuZCBpbiBNYWtl
ZmlsZSBHTlVtYWtlZmlsZSBtYWtlZmlsZTsgZG8KKyAgaWYgdGVzdCAtZiAiJGFtX19vcHRp
b25hbF9jYW5kIjsgdGhlbgorICAgIGFtX19vcHRpb25hbF9tZj0kYW1fX29wdGlvbmFsX2Nh
bmQKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAtbiAiJGFtX19vcHRpb25hbF9t
ZiIgJiYgdGVzdCAtbiAiJGFtX19vcHRpb25hbF96aXAiOyB0aGVuCisgIGNhdCA+PiIkYW1f
X29wdGlvbmFsX21mIiA8PCdfYW1fb3B0X3J1bGVfZW9mXycKKworIyBBcHBlbmRlZCBieSBh
bS1vcHRpb25hbCBmb3IgZGlzdC16aXAuCitESVNUX1RBUkdFVFMgKz0gYW0tLW9wdGlvbmFs
LWRpc3QtemlwCisKKy5QSE9OWTogYW0tLW9wdGlvbmFsLWRpc3QtemlwCithbS0tb3B0aW9u
YWwtZGlzdC16aXA6IGRpc3RkaXIKKwlAaWYgdGVzdCAtbiAiJChhbV9fb3B0aW9uYWxfemlw
KSIgXAorCSAgICAmJiAoY29tbWFuZCAtdiAiJChhbV9fb3B0aW9uYWxfemlwKSIgPi9kZXYv
bnVsbCAyPiYxKTsgdGhlbiBcCisJICBybSAtZiAkKGRpc3RkaXIpLnppcDsgXAorCSAgeyAi
JChhbV9fb3B0aW9uYWxfemlwKSIgLXJxICQoZGlzdGRpcikuemlwICQoZGlzdGRpcik7IH0g
XAorCSAgfHwgeyBybSAtZiAkKGRpc3RkaXIpLnppcDsgXAorCSAgICAgICBlY2hvICJhbS1v
cHRpb25hbDogZGlzdC16aXAgZmFpbGVkOyBhcmNoaXZlIG5vdCBidWlsdCIgPiYyOyBcCisJ
ICAgICAgIDo7IH07IFwKKwllbHNlIFwKKwkgIGVjaG8gImFtLW9wdGlvbmFsOiB6aXAgdW5h
dmFpbGFibGUsIHNraXBwaW5nICQoZGlzdGRpcikuemlwIiA+JjI7IFwKKwlmaTsgXAorCToK
K19hbV9vcHRfcnVsZV9lb2ZfCitmaQorXSwKK1thbV9fb3B0aW9uYWxfemlwPSIkYW1fX29w
dGlvbmFsX3ppcCIKK10pXSlkbmwKK10pCmRpZmYgLS1naXQgYS90L2FtLW9wdGlvbmFsLWF1
dG9tYWtlLnNoIGIvdC9hbS1vcHRpb25hbC1hdXRvbWFrZS5zaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hZmU4YjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9hbS1v
cHRpb25hbC1hdXRvbWFrZS5zaApAQCAtMCwwICsxLDE2OSBAQAorIyEgL2Jpbi9zaAorIyBD
b3B5cmlnaHQgKEMpIDIwMjYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisj
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMg
YW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj
CisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz
ZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBDaGVjayBBTV9PUFRJ
T05BTF9BVVRPTUFLRS4gIEZvdXIgc2NlbmFyaW9zOgorIyAgKDEpIFRoZSB0b29sIGlzIG9u
IFBBVEggYXQgY29uZmlndXJlIHRpbWUgLT4gZGlzdC1iemlwMyBwcm9kdWNlcworIyAgICAg
ICRkaXN0ZGlyLnRhci5iejMgYWxvbmdzaWRlIHRoZSBhbHdheXMtYnVpbHQgJGRpc3RkaXIu
dGFyLmd6LgorIyAgKDIpIEFuIHVua25vd24gb3B0aW9uIHByb2R1Y2VzIGFuIGF1dG9yZWNv
bmYtdGltZSBgc3ludGF4JyB3YXJuaW5nCisjICAgICAgYnV0IGRvZXMgbm90IGJyZWFrIGNv
bmZpZ3VyZSBvciBtYWtlIGRpc3QuCisjICAoMykgVGhlIHRvb2wgaXMgbWlzc2luZyBhdCBj
b25maWd1cmUgdGltZSAtPiBubyBleHRyYSBydWxlIGlzCisjICAgICAgYXBwZW5kZWQ7IGBt
YWtlIGRpc3QnIHJ1bnMgY2xlYW5seSBhbmQgZG9lcyBub3QgcHJvZHVjZQorIyAgICAgICRk
aXN0ZGlyLnRhci5iejMuCisjICAoNCkgVGhlIHRvb2wgaXMgcHJlc2VudCBhdCBjb25maWd1
cmUgdGltZSBidXQgYWJzZW50IHdoZW4KKyMgICAgICBgbWFrZSBkaXN0JyBydW5zIC0+IHRo
ZSByZWNpcGUgcHJpbnRzIGEgd2FybmluZyB0byBzdGRlcnIsCisjICAgICAgYG1ha2UgZGlz
dCcgc3RpbGwgc3VjY2VlZHMsIGFuZCBubyAkZGlzdGRpci50YXIuYnozIGFwcGVhcnMuCisK
K3JlcXVpcmVkPSdiemlwMycKKy4gdGVzdC1pbml0LnNoCisKKyMgLS0tLSAoMSkgYnppcDMg
b24gUEFUSCBhdCBjb25maWd1cmUgdGltZS4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK2NhdCA+IGNvbmZpZ3VyZS5hYyA8PCdFTkQnCitBQ19JTklUKFthbS1vcHRpb25hbC1h
dXRvbWFrZV0sIFsxLjBdKQorQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCitBTV9PUFRJ
T05BTF9BVVRPTUFLRShbZGlzdC1iemlwM10pCitBQ19DT05GSUdfRklMRVMoW01ha2VmaWxl
XSkKK0FDX09VVFBVVAorRU5ECis6ID4gTWFrZWZpbGUuYW0KKworJEFDTE9DQUwKKyRBVVRP
Q09ORgorJEFVVE9NQUtFIC0tYWRkLW1pc3NpbmcKKy4vY29uZmlndXJlCiskTUFLRSBkaXN0
Cit0ZXN0IC1zIGFtLW9wdGlvbmFsLWF1dG9tYWtlLTEuMC50YXIuZ3oKK3Rlc3QgLXMgYW0t
b3B0aW9uYWwtYXV0b21ha2UtMS4wLnRhci5iejMKKworcm0gLXJmIGF1dG9tNHRlKi5jYWNo
ZSBhY2xvY2FsLm00IGNvbmZpZ3VyZSBNYWtlZmlsZS5pbiBpbnN0YWxsLXNoIFwKKyAgICAg
ICBtaXNzaW5nIGNvbmZpZy5zdGF0dXMgY29uZmlnLmxvZyBNYWtlZmlsZSBcCisgICAgICAg
YW0tb3B0aW9uYWwtYXV0b21ha2UtMS4wIGFtLW9wdGlvbmFsLWF1dG9tYWtlLTEuMC50YXIu
KgorCisjIC0tLS0gKDIpIFVua25vd24gb3B0aW9uIGlzIGEgd2FybmluZywgbm90IGFuIGVy
cm9yLiAtLS0tLS0tLS0tLS0tLS0tLQorCitjYXQgPiBjb25maWd1cmUuYWMgPDwnRU5EJwor
QUNfSU5JVChbYW0tb3B0aW9uYWwtYXV0b21ha2VdLCBbMS4wXSkKK0FNX0lOSVRfQVVUT01B
S0UoW2ZvcmVpZ25dKQorQU1fT1BUSU9OQUxfQVVUT01BS0UoW2Rpc3QtYmFuYW5hIGRpc3Qt
YnppcDNdKQorQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZV0pCitBQ19PVVRQVVQKK0VORAor
OiA+IE1ha2VmaWxlLmFtCisKKyMgYWNsb2NhbC9hdXRvY29uZiBtdXN0IHN1Y2NlZWQuICBU
aGUgYHN5bnRheCcgd2FybmluZyBpcyBlbWl0dGVkIGJ5CisjIG00X3dhcm4oKSBkdXJpbmcg
bWFjcm8gZXhwYW5zaW9uLCB3aGljaCBoYXBwZW5zIHdoZW4gYXV0b2NvbmYgcnVucworIyAo
YWNsb2NhbCBvbmx5IHNjYW5zKS4gIFdlIGRvbid0IHByb21vdGUgaXQgdG8gZXJyb3IgaGVy
ZTogQU1fSU5JVCdzCisjIGRlZmF1bHQgd2FybmluZyBzZXQgaXMgcGxlbnR5LiAgQ2FwdHVy
ZSBhdXRvY29uZidzIHN0ZGVyciBhbmQKKyMgYXNzZXJ0IHRoZSB3YXJuaW5nIG1lbnRpb25z
IHRoZSBvZmZlbmRpbmcgdG9rZW4uCiskQUNMT0NBTAorJEFVVE9DT05GIC1Xbm8tZXJyb3Ig
Mj5zdGRlcnIKK2dyZXAgImRpc3QtYmFuYW5hIiBzdGRlcnIKKworJEFVVE9NQUtFIC0tYWRk
LW1pc3NpbmcKKy4vY29uZmlndXJlCiskTUFLRSBkaXN0Cit0ZXN0IC1zIGFtLW9wdGlvbmFs
LWF1dG9tYWtlLTEuMC50YXIuYnozCisKK3JtIC1yZiBhdXRvbTR0ZSouY2FjaGUgYWNsb2Nh
bC5tNCBjb25maWd1cmUgTWFrZWZpbGUuaW4gaW5zdGFsbC1zaCBcCisgICAgICAgbWlzc2lu
ZyBjb25maWcuc3RhdHVzIGNvbmZpZy5sb2cgTWFrZWZpbGUgc3RkZXJyIFwKKyAgICAgICBh
bS1vcHRpb25hbC1hdXRvbWFrZS0xLjAgYW0tb3B0aW9uYWwtYXV0b21ha2UtMS4wLnRhci4q
CisKKyMgLS0tLSAoMykgYnppcDMgbWlzc2luZyBhdCBjb25maWd1cmUgdGltZS4gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NhdCA+IGNvbmZpZ3VyZS5hYyA8PCdFTkQnCitB
Q19JTklUKFthbS1vcHRpb25hbC1hdXRvbWFrZV0sIFsxLjBdKQorQU1fSU5JVF9BVVRPTUFL
RShbZm9yZWlnbl0pCitBTV9PUFRJT05BTF9BVVRPTUFLRShbZGlzdC1iemlwM10pCitBQ19D
T05GSUdfRklMRVMoW01ha2VmaWxlXSkKK0FDX09VVFBVVAorRU5ECis6ID4gTWFrZWZpbGUu
YW0KKworIyBIaWRlIGJ6aXAzIGZyb20gUEFUSCBieSB3YWxraW5nICRQQVRIIGFuZCBjcmVh
dGluZyBhIGZyZXNoIHNhbmRib3gKKyMgZGlyZWN0b3J5IG9mIHN5bWxpbmtzIHRvIGV2ZXJ5
IGV4ZWN1dGFibGUgZXhjZXB0IGJ6aXAzLiAgT3RoZXIgdG9vbHMKKyMgdGhlIHRlc3QgaGFy
bmVzcyBuZWVkcyAoJGFtX2JpbmRpciAvIHQvYXgpIGNvbWUgZnJvbSBhdXRvbWFrZSdzCisj
IGJ1aWxkIHRyZWUgYW5kIGFyZSBub3QgYWZmZWN0ZWQuCitta2RpciBzYW5kYm94LWJpbgor
KCBJRlM9OgorICBmb3IgZCBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC1kICIkZCIgfHwgY29u
dGludWUKKyAgICBmb3IgZiBpbiAiJGQiLyo7IGRvCisgICAgICB0ZXN0IC1mICIkZiIgfHwg
Y29udGludWUKKyAgICAgIG49YGJhc2VuYW1lICIkZiJgCisgICAgICB0ZXN0ICIkbiIgPSBi
emlwMyAmJiBjb250aW51ZQorICAgICAgdGVzdCAteCAiJGYiICYmIGxuIC1zZiAiJGYiICJz
YW5kYm94LWJpbi8kbiIgMj4vZGV2L251bGwKKyAgICBkb25lCisgIGRvbmUgKQordGVzdCAh
IC1lIHNhbmRib3gtYmluL2J6aXAzCisKK3NhdmVkX1BBVEg9JFBBVEgKK1BBVEg9YHB3ZGAv
c2FuZGJveC1iaW46JGFtX2JpbmRpcjokYW1fdG9wX3NyY2Rpci90L2F4CisKKyRBQ0xPQ0FM
CiskQVVUT0NPTkYKKyRBVVRPTUFLRSAtLWFkZC1taXNzaW5nCisuL2NvbmZpZ3VyZQorJE1B
S0UgZGlzdAordGVzdCAtcyBhbS1vcHRpb25hbC1hdXRvbWFrZS0xLjAudGFyLmd6Cit0ZXN0
ICEgLWUgYW0tb3B0aW9uYWwtYXV0b21ha2UtMS4wLnRhci5iejMKKworUEFUSD0kc2F2ZWRf
UEFUSAorcm0gLXJmIHNhbmRib3gtYmluIGF1dG9tNHRlKi5jYWNoZSBhY2xvY2FsLm00IGNv
bmZpZ3VyZSBNYWtlZmlsZS5pbiBcCisgICAgICAgaW5zdGFsbC1zaCBtaXNzaW5nIGNvbmZp
Zy5zdGF0dXMgY29uZmlnLmxvZyBNYWtlZmlsZSBcCisgICAgICAgYW0tb3B0aW9uYWwtYXV0
b21ha2UtMS4wIGFtLW9wdGlvbmFsLWF1dG9tYWtlLTEuMC50YXIuKgorCisjIC0tLS0gKDQp
IGJ6aXAzIHByZXNlbnQgYXQgY29uZmlndXJlLCB2YW5pc2hlZCBhdCBgbWFrZSBkaXN0Jy4g
LS0tLS0tCisKK2NhdCA+IGNvbmZpZ3VyZS5hYyA8PCdFTkQnCitBQ19JTklUKFthbS1vcHRp
b25hbC1hdXRvbWFrZV0sIFsxLjBdKQorQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCitB
TV9PUFRJT05BTF9BVVRPTUFLRShbZGlzdC1iemlwM10pCitBQ19DT05GSUdfRklMRVMoW01h
a2VmaWxlXSkKK0FDX09VVFBVVAorRU5ECis6ID4gTWFrZWZpbGUuYW0KKworJEFDTE9DQUwK
KyRBVVRPQ09ORgorJEFVVE9NQUtFIC0tYWRkLW1pc3NpbmcKKy4vY29uZmlndXJlICAjIGJ6
aXAzIElTIG9uIFBBVEggaGVyZSwgc28gdGhlIHJ1bGUgaXMgYXBwZW5kZWQKKworIyBOb3cg
cmUtcnVuIGBtYWtlIGRpc3QnIHdpdGggYnppcDMgaGlkZGVuLiAgVGhlIGFwcGVuZGVkIHJl
Y2lwZQorIyBtdXN0IHJlLXByb2JlIHdpdGggYGNvbW1hbmQgLXYnLCBwcmludCBhIHdhcm5p
bmcsIGxlYXZlIHRoZQorIyByZXN0IG9mIGBtYWtlIGRpc3QnIHJ1bm5pbmcsIGFuZCBleGl0
IDAuCitta2RpciBzYW5kYm94LWJpbgorKCBJRlM9OgorICBmb3IgZCBpbiAkUEFUSDsgZG8K
KyAgICB0ZXN0IC1kICIkZCIgfHwgY29udGludWUKKyAgICBmb3IgZiBpbiAiJGQiLyo7IGRv
CisgICAgICB0ZXN0IC1mICIkZiIgfHwgY29udGludWUKKyAgICAgIG49YGJhc2VuYW1lICIk
ZiJgCisgICAgICB0ZXN0ICIkbiIgPSBiemlwMyAmJiBjb250aW51ZQorICAgICAgdGVzdCAt
eCAiJGYiICYmIGxuIC1zZiAiJGYiICJzYW5kYm94LWJpbi8kbiIgMj4vZGV2L251bGwKKyAg
ICBkb25lCisgIGRvbmUgKQordGVzdCAhIC1lIHNhbmRib3gtYmluL2J6aXAzCisKK3NhdmVk
X1BBVEg9JFBBVEgKK1BBVEg9YHB3ZGAvc2FuZGJveC1iaW46JGFtX2JpbmRpcjokYW1fdG9w
X3NyY2Rpci90L2F4CiskTUFLRSBkaXN0IDI+c3RkZXJyCitQQVRIPSRzYXZlZF9QQVRICisK
K3Rlc3QgLXMgYW0tb3B0aW9uYWwtYXV0b21ha2UtMS4wLnRhci5negordGVzdCAhIC1lIGFt
LW9wdGlvbmFsLWF1dG9tYWtlLTEuMC50YXIuYnozCitncmVwICdhbS1vcHRpb25hbDouKmJ6
aXAzIHVuYXZhaWxhYmxlJyBzdGRlcnIKKworOgpkaWZmIC0tZ2l0IGEvdC9saXN0LW9mLXRl
c3RzLm1rIGIvdC9saXN0LW9mLXRlc3RzLm1rCmluZGV4IDY3YmY3YjUuLmUwNDQ2OTggMTAw
NjQ0Ci0tLSBhL3QvbGlzdC1vZi10ZXN0cy5taworKysgYi90L2xpc3Qtb2YtdGVzdHMubWsK
QEAgLTEzNyw2ICsxMzcsNyBAQCB0L2FscGhhMi5zaCBcCiB0L2FtaGVsbG8tY2ZsYWdzLnNo
IFwKIHQvYW1oZWxsby1jcm9zcy1jb21waWxlLnNoIFwKIHQvYW1oZWxsby1iaW5wa2cuc2gg
XAordC9hbS1vcHRpb25hbC1hdXRvbWFrZS5zaCBcCiB0L2FtaW5pdC1tb3JlYXJncy1kZXBy
ZWNhdGlvbi5zaCBcCiB0L2FtaW5pdC10cmFpbGluZy1kbmwtY29tbWVudC1wcjE2ODQxLnNo
IFwKIHQvYW1hc3NpZ24uc2ggXAotLSAKMi41My4wCgo=

--------------JSC2zLJKSzcg65q0sh72GU00--