[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--