From unknown Tue Jun 17 01:44:33 2025 X-Loop: help-debbugs@gnu.org Subject: bug#56749: modernize bootstrap.conf Resent-From: Bruno Haible Original-Sender: "Debbugs-submit" Resent-CC: bug-gzip@gnu.org Resent-Date: Sun, 24 Jul 2022 19:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 56749 X-GNU-PR-Package: gzip X-GNU-PR-Keywords: To: 56749@debbugs.gnu.org X-Debbugs-Original-To: bug-gzip@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.165869222029222 (code B ref -1); Sun, 24 Jul 2022 19:51:01 +0000 Received: (at submit) by debbugs.gnu.org; 24 Jul 2022 19:50:20 +0000 Received: from localhost ([127.0.0.1]:48717 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oFhcK-0007bG-6p for submit@debbugs.gnu.org; Sun, 24 Jul 2022 15:50:20 -0400 Received: from lists.gnu.org ([209.51.188.17]:46620) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oFhcG-0007b2-MZ for submit@debbugs.gnu.org; Sun, 24 Jul 2022 15:50:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49572) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oFhcG-00021h-Gn for bug-gzip@gnu.org; Sun, 24 Jul 2022 15:50:16 -0400 Received: from mo4-p00-ob.smtp.rzone.de ([85.215.255.21]:35477) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oFhcE-0001Zi-B4 for bug-gzip@gnu.org; Sun, 24 Jul 2022 15:50:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1658692211; s=strato-dkim-0002; d=clisp.org; h=Message-ID:Date:Subject:To:From:Cc:Date:From:Subject:Sender; bh=N76SS+q0Zmbf5FsO0WdJFLcRRavQKxHZmNHi9AFCQQY=; b=HTrtJw3zInmHIBSv3FL/iDVXz7GmIcqnVbq7c8k6v1VCjht7nBOMYesFc6PhIyKarS u8dbqe/oFXMMwSwK8WYn/ZFAKVLAiyNPjwVE1kUCA2Lv74JVvIGpt3PqsjQDdGcEpV6+ ebQLDYv7/1vdiFROVbHkWNe1Ke73tk5TUpSLmg9cJcmTStgo4JAgP0rTLWedVEFkvv2Y DDpjQWtsRmC0AxnMULDDS7yV6NK26qU+HfG4BV2XDgJLILXcQgtOW588mI0TgodLvoGP 4UKu96lOt70vooZK2IlYLQ0uXU5YHId12ukPPfNVB4DgBXd8MSiZNxo0eUrIL5G+2SCw nXhA== Authentication-Results: strato.com; dkim=none X-RZG-AUTH: ":Ln4Re0+Ic/6oZXR1YgKryK8brlshOcZlIWs+iCP5vnk6shH0WWb0LN8XZoH94zG6tLj91pCRiuTfIiVnxpzfvNS26Ye+6yfl" X-RZG-CLASS-ID: mo00 Received: from nimes.localnet by smtp.strato.de (RZmta 47.47.0 AUTH) with ESMTPSA id v673d9y6OJoAHzO (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Sun, 24 Jul 2022 21:50:10 +0200 (CEST) From: Bruno Haible Date: Sun, 24 Jul 2022 21:50:10 +0200 Message-ID: <9016636.rMLUfLXkoz@nimes> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Received-SPF: none client-ip=85.215.255.21; envelope-from=bruno@clisp.org; helo=mo4-p00-ob.smtp.rzone.de X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hi, The 'bootstrap' script from Gnulib has been reorganized to work in two phases: (1) Fetch auxiliary files that are not in the git checkout. This is the part that requires network access and that has supply-chain concerns. (2) Generate files such as configure, config.h, Makefile.in etc. This includes running gnulib-tool. See for details. For GNU gzip some adjustment of the bootstrap.conf is needed. The bootstrap.conf is meant to contain configuration settings, that is, define variables and functions (hooks with special meanings). Instead, gzip/bootstrap.conf does some actions directly. This will not work satisfactorily with the new two-phase bootstrap. What is needed, is to move these actions into hooks: - Actions that may require network access belong in the bootstrap_post_pull_hook function. - Actions that merely regenerate files (without network access) usually belong in the bootstrap_post_import_hook. The 'mkdir -p build-aux' is not needed any more. I verified that. The lines # Automake requires that ChangeLog exist. touch ChangeLog || exit 1 can be moved into the bootstrap_post_import_hook function. Bruno From unknown Tue Jun 17 01:44:33 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Bruno Haible Subject: bug#56749: closed (Re: bug#56749: modernize bootstrap.conf) Message-ID: References: <05242ce1-499d-d419-45d6-60823085db26@cs.ucla.edu> <9016636.rMLUfLXkoz@nimes> X-Gnu-PR-Message: they-closed 56749 X-Gnu-PR-Package: gzip Reply-To: 56749@debbugs.gnu.org Date: Mon, 26 Dec 2022 04:37:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1672029422-15216-1" This is a multi-part message in MIME format... ------------=_1672029422-15216-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #56749: modernize bootstrap.conf which was filed against the gzip package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 56749@debbugs.gnu.org. --=20 56749: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D56749 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1672029422-15216-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 56749-done) by debbugs.gnu.org; 26 Dec 2022 04:36:14 +0000 Received: from localhost ([127.0.0.1]:50482 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p9fDh-0003wF-Aa for submit@debbugs.gnu.org; Sun, 25 Dec 2022 23:36:14 -0500 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:49012) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p9fDe-0003vz-6c for 56749-done@debbugs.gnu.org; Sun, 25 Dec 2022 23:36:12 -0500 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id E2427160043; Sun, 25 Dec 2022 20:36:03 -0800 (PST) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Cd0Vt1_DMRP0; Sun, 25 Dec 2022 20:36:02 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id B569F160044; Sun, 25 Dec 2022 20:36:02 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.9.2 zimbra.cs.ucla.edu B569F160044 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=78364E5A-2AF3-11ED-87FA-8298ECA2D365; t=1672029362; bh=fruzqsQO43VRluP72q47n+K4/kxUjNhA5zKWVE+q34o=; h=Content-Type:Message-ID:Date:MIME-Version:Subject:To:From; b=YLJAULCDDGrtirOcek7OfDCoVBAuabzqhv1ONLyYDeGwtA2tGZJcWzWDVPk9mOqcP vqOQx2YyXBxDS9mv+qfX11ZXGXT9m/PoyAVCTGxSacLWuI6CNDtrqfCWoEGSIiE85H RO+3deSR3zc/BWAAiHaHGc6Ut9K0J3XgHqVMimAQ= X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id thptwjV77whQ; Sun, 25 Dec 2022 20:36:02 -0800 (PST) Received: from [192.168.86.236] (cpe-172-91-119-151.socal.res.rr.com [172.91.119.151]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 8B563160043; Sun, 25 Dec 2022 20:36:02 -0800 (PST) Content-Type: multipart/mixed; boundary="------------Wrkh3YqeCDbUlXg43T7F0Fi7" Message-ID: <05242ce1-499d-d419-45d6-60823085db26@cs.ucla.edu> Date: Sun, 25 Dec 2022 20:36:02 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: bug#56749: modernize bootstrap.conf Content-Language: en-US To: Bruno Haible References: <9016636.rMLUfLXkoz@nimes> From: Paul Eggert In-Reply-To: <9016636.rMLUfLXkoz@nimes> X-Spam-Score: -3.4 (---) X-Debbugs-Envelope-To: 56749-done Cc: 56749-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.4 (----) This is a multi-part message in MIME format. --------------Wrkh3YqeCDbUlXg43T7F0Fi7 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Thanks for the heads-up. I installed the attached patch to gzip and updated the bootstrap script to current Gnulib. --------------Wrkh3YqeCDbUlXg43T7F0Fi7 Content-Type: text/x-patch; charset=UTF-8; name="bootstrap.patch" Content-Disposition: attachment; filename="bootstrap.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL1JFQURNRS1oYWNraW5nIGIvUkVBRE1FLWhhY2tpbmcKaW5kZXggNjBl NDBjYS4uNGFmNjdmNCAxMDA2NDQKLS0tIGEvUkVBRE1FLWhhY2tpbmcKKysrIGIvUkVBRE1F LWhhY2tpbmcKQEAgLTYzLDYgKzYzLDE3IEBAIGFuZCB0aGUgR2l0IG1hc3RlciBjb3B5Ogog CiBzaG91bGQgb3V0cHV0IG5vIGRpZmZlcmVuY2UuCiAKK0lmIHlvdSBoYXZlIGFscmVhZHkg Ym9vdHN0cmFwcGVkLCB5b3UgY2FuIHJlZG8gaXQgaW4gdHdvIHBoYXNlczoKKworICAgICAg ICAkICMgMS4gRmV0Y2ggYXV4aWxpYXJ5IGZpbGVzIGZyb20gdGhlIG5ldHdvcmsuCisgICAg ICAgICQgLi9hdXRvcHVsbC5zaAorICAgICAgICAkCisgICAgICAgICQgIyAyLiBHZW5lcmF0 ZSBmaWxlcyBsb2NhbGx5LgorICAgICAgICAkIC4vYXV0b2dlbi5zaAorCitTZXBhcmF0aW5n IHRoZSBwaGFzZXMgY2FuIGJlIHVzZWZ1bCBmb3IgcmVwcm9kdWNpYmxlIGJ1aWxkcywgYW5k IGZvcgorYXBwbHlpbmcgbG9jYWwgbW9kaWZpY2F0aW9ucyBiZXR3ZWVuIHRoZSB0d28gcGhh c2VzLgorCiBFbmpveSEKIAogWypdIEJ5IGRlZmF1bHQgR0NDIHdhcm5pbmdzIGFyZSBlbmFi bGVkIHdoZW4gYnVpbGRpbmcgZnJvbSBHaXQuCmRpZmYgLS1naXQgYS9ib290c3RyYXAuY29u ZiBiL2Jvb3RzdHJhcC5jb25mCmluZGV4IGQyMzYzZGMuLjlhNjdiYzIgMTAwNjQ0Ci0tLSBh L2Jvb3RzdHJhcC5jb25mCisrKyBiL2Jvb3RzdHJhcC5jb25mCkBAIC03Niw5ICs3Niw2IEBA IGdudWxpYl90b29sX29wdGlvbl9leHRyYXM9IlwKICIKIAogCi0jIENyZWF0ZSBidWlsZC1h dXgsIHNpbmNlICdib290c3RyYXAnIHdvbid0IGRvIHRoYXQgZm9yIHVzLgotbWtkaXIgLXAg YnVpbGQtYXV4Ci0KICMgQnVpbGQgcHJlcmVxdWlzaXRlcwogYnVpbGRyZXE9IlwKIGF1dG9j b25mICAgMi42MQpAQCAtOTgsNCArOTUsNiBAQCBib290c3RyYXBfZXBpbG9ndWUoKQogfQog CiAjIEF1dG9tYWtlIHJlcXVpcmVzIHRoYXQgQ2hhbmdlTG9nIGV4aXN0LgotdG91Y2ggQ2hh bmdlTG9nIHx8IGV4aXQgMQorYm9vdHN0cmFwX3Bvc3RfaW1wb3J0X2hvb2soKSB7CisgIHRv dWNoIENoYW5nZUxvZyB8fCBleGl0Cit9Cg== --------------Wrkh3YqeCDbUlXg43T7F0Fi7-- ------------=_1672029422-15216-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 24 Jul 2022 19:50:20 +0000 Received: from localhost ([127.0.0.1]:48717 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oFhcK-0007bG-6p for submit@debbugs.gnu.org; Sun, 24 Jul 2022 15:50:20 -0400 Received: from lists.gnu.org ([209.51.188.17]:46620) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oFhcG-0007b2-MZ for submit@debbugs.gnu.org; Sun, 24 Jul 2022 15:50:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49572) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oFhcG-00021h-Gn for bug-gzip@gnu.org; Sun, 24 Jul 2022 15:50:16 -0400 Received: from mo4-p00-ob.smtp.rzone.de ([85.215.255.21]:35477) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oFhcE-0001Zi-B4 for bug-gzip@gnu.org; Sun, 24 Jul 2022 15:50:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1658692211; s=strato-dkim-0002; d=clisp.org; h=Message-ID:Date:Subject:To:From:Cc:Date:From:Subject:Sender; bh=N76SS+q0Zmbf5FsO0WdJFLcRRavQKxHZmNHi9AFCQQY=; b=HTrtJw3zInmHIBSv3FL/iDVXz7GmIcqnVbq7c8k6v1VCjht7nBOMYesFc6PhIyKarS u8dbqe/oFXMMwSwK8WYn/ZFAKVLAiyNPjwVE1kUCA2Lv74JVvIGpt3PqsjQDdGcEpV6+ ebQLDYv7/1vdiFROVbHkWNe1Ke73tk5TUpSLmg9cJcmTStgo4JAgP0rTLWedVEFkvv2Y DDpjQWtsRmC0AxnMULDDS7yV6NK26qU+HfG4BV2XDgJLILXcQgtOW588mI0TgodLvoGP 4UKu96lOt70vooZK2IlYLQ0uXU5YHId12ukPPfNVB4DgBXd8MSiZNxo0eUrIL5G+2SCw nXhA== Authentication-Results: strato.com; dkim=none X-RZG-AUTH: ":Ln4Re0+Ic/6oZXR1YgKryK8brlshOcZlIWs+iCP5vnk6shH0WWb0LN8XZoH94zG6tLj91pCRiuTfIiVnxpzfvNS26Ye+6yfl" X-RZG-CLASS-ID: mo00 Received: from nimes.localnet by smtp.strato.de (RZmta 47.47.0 AUTH) with ESMTPSA id v673d9y6OJoAHzO (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Sun, 24 Jul 2022 21:50:10 +0200 (CEST) From: Bruno Haible To: bug-gzip@gnu.org Subject: modernize bootstrap.conf Date: Sun, 24 Jul 2022 21:50:10 +0200 Message-ID: <9016636.rMLUfLXkoz@nimes> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Received-SPF: none client-ip=85.215.255.21; envelope-from=bruno@clisp.org; helo=mo4-p00-ob.smtp.rzone.de X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hi, The 'bootstrap' script from Gnulib has been reorganized to work in two phases: (1) Fetch auxiliary files that are not in the git checkout. This is the part that requires network access and that has supply-chain concerns. (2) Generate files such as configure, config.h, Makefile.in etc. This includes running gnulib-tool. See for details. For GNU gzip some adjustment of the bootstrap.conf is needed. The bootstrap.conf is meant to contain configuration settings, that is, define variables and functions (hooks with special meanings). Instead, gzip/bootstrap.conf does some actions directly. This will not work satisfactorily with the new two-phase bootstrap. What is needed, is to move these actions into hooks: - Actions that may require network access belong in the bootstrap_post_pull_hook function. - Actions that merely regenerate files (without network access) usually belong in the bootstrap_post_import_hook. The 'mkdir -p build-aux' is not needed any more. I verified that. The lines # Automake requires that ChangeLog exist. touch ChangeLog || exit 1 can be moved into the bootstrap_post_import_hook function. Bruno ------------=_1672029422-15216-1-- From unknown Tue Jun 17 01:44:33 2025 X-Loop: help-debbugs@gnu.org Subject: bug#56749: modernize bootstrap.conf Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-gzip@gnu.org Resent-Date: Tue, 27 Dec 2022 19:15:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 56749 X-GNU-PR-Package: gzip X-GNU-PR-Keywords: To: Bruno Haible Cc: 56749@debbugs.gnu.org Received: via spool by 56749-submit@debbugs.gnu.org id=B56749.167216846817464 (code B ref 56749); Tue, 27 Dec 2022 19:15:01 +0000 Received: (at 56749) by debbugs.gnu.org; 27 Dec 2022 19:14:28 +0000 Received: from localhost ([127.0.0.1]:56525 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pAFPA-0004Xc-Qh for submit@debbugs.gnu.org; Tue, 27 Dec 2022 14:14:28 -0500 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:49602) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pAFP8-0004XM-HF for 56749@debbugs.gnu.org; Tue, 27 Dec 2022 14:14:27 -0500 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 8359F160048; Tue, 27 Dec 2022 11:14:20 -0800 (PST) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id RrnCjWgLgqE7; Tue, 27 Dec 2022 11:14:12 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 64062160045; Tue, 27 Dec 2022 11:14:12 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.9.2 zimbra.cs.ucla.edu 64062160045 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=78364E5A-2AF3-11ED-87FA-8298ECA2D365; t=1672168452; bh=ds3ZH3YcFYc/rhOTK6OBR7j+sOCkYYvz7YpmT18Y61g=; h=Content-Type:Message-ID:Date:MIME-Version:Subject:From:To; b=nq89adxKuq4/e5BZn1d3mzv2I5w5Yt0oCvz32x0xhnqkl0lMs714PRtQGvEgHWXTZ kdobiNA3QaWTJNzrWJtVdZxdUQ1GT/VUVgsirvMKSJCyq5hzcx7DbJUkjVEyDlObL5 erdhUxrS3xyqcenpDzTagypyroYGb8bZYO/aL3qg= X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id psdVHpIr5iQv; Tue, 27 Dec 2022 11:14:12 -0800 (PST) Received: from [192.168.86.236] (cpe-172-91-119-151.socal.res.rr.com [172.91.119.151]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 035A0160048; Tue, 27 Dec 2022 11:14:11 -0800 (PST) Content-Type: multipart/mixed; boundary="------------qDD2y7EqdJ3kO3p8bPIWPeoy" Message-ID: Date: Tue, 27 Dec 2022 11:14:11 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 From: Paul Eggert References: <9016636.rMLUfLXkoz@nimes> <05242ce1-499d-d419-45d6-60823085db26@cs.ucla.edu> Content-Language: en-US In-Reply-To: <05242ce1-499d-d419-45d6-60823085db26@cs.ucla.edu> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" This is a multi-part message in MIME format. --------------qDD2y7EqdJ3kO3p8bPIWPeoy Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 12/25/22 20:36, Paul Eggert wrote: > I installed the attached patch to gzip and updated the bootstrap > script to current Gnulib. Unfortunately that didn't work because the new bootstrap script comes in two flavors: a standalone gnulib/build-aux/bootstrap that automatically replaces itself, and a librarified gnulib/top/bootstrap that needs three auxiliary files in the repository. I put the latter script into the gzip repository but did not put the auxiliary files there. I did not notice the error in my testing, since the three auxiliary files were there in my working copy. Although eventually I found this problem, and fixed it by committing the three auxiliary files into the gzip repository, it strikes me that the process would be simpler and less error-prone if 'bootstrap' stayed a single script in gzip. gnulib/build-aux/bootstrap attempted to do that, but operated by replacing itself, which led to confusion when one did a 'git diff' later on. To make this easier I changed gnulib/build-aux/bootstrap so that it doesn't need to replace itself. Instead, it has options --pull and --gen, so that './bootstrap --pull' is equivalent to librarified ./autopull.sh and './bootstrap --gen' is equivalent to librarified ./autogen.sh. These new options work regardless of whether one uses the standalone or the librarified bootstrap, and the standalone bootstrap need not replace itself when it runs. I propagated this into gzip by installing the attached patch, the only creative part of which is its README-hacking change. The rest simply syncs from Gnulib, using the standalone bootstrap instead of the librarified one. Assuming this sort of thing works out, I'd like to do something similar with grep, diffutils, etc. Emacs will be a different matter as it does not use 'bootstrap' anyway. --------------qDD2y7EqdJ3kO3p8bPIWPeoy Content-Type: text/x-patch; charset=UTF-8; name="0001-maint-go-back-to-single-file-bootstrap.patch" Content-Disposition: attachment; filename="0001-maint-go-back-to-single-file-bootstrap.patch" Content-Transfer-Encoding: base64 RnJvbSBiOWI1N2ZlYjlmNmMwYjRiNmViMDJiM2ZlNTYxMmE0NTBjNGQ2YWQxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUdWUsIDI3IERlYyAyMDIyIDEwOjIwOjAzIC0wODAwClN1YmplY3Q6IFtQQVRD SF0gbWFpbnQ6IGdvIGJhY2sgdG8gc2luZ2xlLWZpbGUgYm9vdHN0cmFwCgpJIHJlY2VudGx5 IGFkZGVkIHRoaXMgb3B0aW9uIHRvIEdudWxpYiwgYW5kIGl0IHNlZW1zIGEgYmV0dGVyCm1h dGNoIGZvciBnemlwIGFzIGl0IG1lYW5zIGp1c3Qgb25lIGJvb3RzdHJhcC1yZWxhdGVkIGZp bGUuCiogUkVBRE1FLWhhY2tpbmc6IERvY3VtZW50IHRoaXMuCiogYm9vdHN0cmFwOiBTeW5j IGZyb20gZ251bGliL2J1aWxkLWF1eC9ib290c3RyYXAsIG5vdApmcm9tIGdudWxpYi90b3Av Ym9vdHN0cmFwLgoqIGF1dG9nZW4uc2gsIGF1dG9wdWxsLnNoLCBib290c3RyYXAtZnVuY2xp Yi5zaDogUmVtb3ZlLgotLS0KIFJFQURNRS1oYWNraW5nICAgICAgIHwgICAgOSArLQogYXV0 b2dlbi5zaCAgICAgICAgICAgfCAgNDg2IC0tLS0tLS0tLS0tLS0tLQogYXV0b3B1bGwuc2gg ICAgICAgICAgfCAgMjczIC0tLS0tLS0tLQogYm9vdHN0cmFwICAgICAgICAgICAgfCAxMzM1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogYm9vdHN0cmFw LWZ1bmNsaWIuc2ggfCAgNTk0IC0tLS0tLS0tLS0tLS0tLS0tLS0KIDUgZmlsZXMgY2hhbmdl ZCwgMTMyMCBpbnNlcnRpb25zKCspLCAxMzc3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUg MTAwNzU1IGF1dG9nZW4uc2gKIGRlbGV0ZSBtb2RlIDEwMDc1NSBhdXRvcHVsbC5zaAogZGVs ZXRlIG1vZGUgMTAwNjQ0IGJvb3RzdHJhcC1mdW5jbGliLnNoCgpkaWZmIC0tZ2l0IGEvUkVB RE1FLWhhY2tpbmcgYi9SRUFETUUtaGFja2luZwppbmRleCA3NDNkZDAzLi4wNzQ0YTI2IDEw MDY0NAotLS0gYS9SRUFETUUtaGFja2luZworKysgYi9SRUFETUUtaGFja2luZwpAQCAtNjMs MTMgKzYzLDEwIEBAIGFuZCB0aGUgR2l0IG1hc3RlciBjb3B5OgogCiBzaG91bGQgb3V0cHV0 IG5vIGRpZmZlcmVuY2UuCiAKLUluc3RlYWQgb2YgcnVubmluZyAuL2Jvb3RzdHJhcCB5b3Ug Y2FuIHJ1biBpdHMgdHdvIHBoYXNlczoKK0luc3RlYWQgb2YgcnVubmluZyBwbGFpbiAuL2Jv b3RzdHJhcCB5b3UgY2FuIHJ1biBpdHMgdHdvIHBoYXNlczoKIAotICAgICAgICAkICMgMS4g RmV0Y2ggYXV4aWxpYXJ5IGZpbGVzIGZyb20gdGhlIG5ldHdvcmsuCi0gICAgICAgICQgLi9h dXRvcHVsbC5zaAotICAgICAgICAkCi0gICAgICAgICQgIyAyLiBHZW5lcmF0ZSBmaWxlcyBs b2NhbGx5LgotICAgICAgICAkIC4vYXV0b2dlbi5zaAorICAgICAgICAkIC4vYm9vdHN0cmFw IC0tcHVsbCAgIyAxLiBGZXRjaCBzb21lIGZpbGVzIGZyb20gdGhlIG5ldHdvcmsuCisgICAg ICAgICQgLi9ib290c3RyYXAgLS1nZW4gICAjIDIuIEdlbmVyYXRlIG90aGVyIGZpbGVzIGxv Y2FsbHkuCiAKIFNlcGFyYXRpbmcgdGhlIHBoYXNlcyBjYW4gYmUgdXNlZnVsIGZvciByZXBy b2R1Y2libGUgYnVpbGRzLAogYW5kIGZvciBhcHBseWluZyBsb2NhbCBtb2RpZmljYXRpb25z IGJldHdlZW4gdGhlIHR3byBwaGFzZXMuCmRpZmYgLS1naXQgYS9hdXRvZ2VuLnNoIGIvYXV0 b2dlbi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODFkYjNmZS4uMDAwMDAw MAotLS0gYS9hdXRvZ2VuLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNDg2ICswLDAgQEAKLSMh L2Jpbi9zaAotIyBDb252ZW5pZW5jZSBzY3JpcHQgZm9yIHJlZ2VuZXJhdGluZyBhbGwgYXV0 b2dlbmVyYXRhYmxlIGZpbGVzIHRoYXQgYXJlCi0jIG9taXR0ZWQgZnJvbSB0aGUgdmVyc2lv biBjb250cm9sIHJlcG9zaXRvcnkuIEluIHBhcnRpY3VsYXIsIHRoaXMgc2NyaXB0Ci0jIGFs c28gcmVnZW5lcmF0ZXMgYWxsIGFjbG9jYWwubTQsIGNvbmZpZy5oLmluLCBNYWtlZmlsZS5p biwgY29uZmlndXJlIGZpbGVzCi0jIHdpdGggbmV3IHZlcnNpb25zIG9mIGF1dG9jb25mIG9y IGF1dG9tYWtlLgotCi0jIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTog eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot IyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCi0KLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBhdWwgRWdn ZXJ0LiAgVGhlIGNhbm9uaWNhbCB2ZXJzaW9uIG9mIHRoaXMKLSMgc2NyaXB0IGlzIG1haW50 YWluZWQgYXMgdG9wL2F1dG9nZW4uc2ggaW4gZ251bGliLiAgSG93ZXZlciwgdG8gYmUKLSMg dXNlZnVsIHRvIHlvdXIgcGFja2FnZSwgeW91IHNob3VsZCBwbGFjZSBhIGNvcHkgb2YgaXQg dW5kZXIgdmVyc2lvbgotIyBjb250cm9sIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9m IHlvdXIgcGFja2FnZS4gIFRoZSBpbnRlbnQgaXMKLSMgdGhhdCBhbGwgY3VzdG9taXphdGlv biBjYW4gYmUgZG9uZSB3aXRoIGEgYm9vdHN0cmFwLmNvbmYgZmlsZSBhbHNvCi0jIG1haW50 YWluZWQgaW4geW91ciB2ZXJzaW9uIGNvbnRyb2w7IGdudWxpYiBjb21lcyB3aXRoIGEgdGVt cGxhdGUKLSMgYnVpbGQtYXV4L2Jvb3RzdHJhcC5jb25mIHRvIGdldCB5b3Ugc3RhcnRlZC4K LSMKLSMgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYW4gYXV0b2dlbi5zaCBzY3JpcHQg dGhhdCBpcyBzcGVjaWZpYwotIyB0byB5b3VyIHBhY2thZ2UuCi0KLXNjcmlwdHZlcnNpb249 MjAyMi0wNy0yNC4xNTsgIyBVVEMKLQotbWU9IiQwIgotbWVkaXI9YGRpcm5hbWUgIiRtZSJg Ci0KLSMgUmVhZCB0aGUgZnVuY3Rpb24gbGlicmFyeSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24u Ci0uICIkbWVkaXIiL2Jvb3RzdHJhcC1mdW5jbGliLnNoCi0KLSMgRW5zdXJlIHRoYXQgQ0RQ QVRIIGlzIG5vdCBzZXQuICBPdGhlcndpc2UsIHRoZSBvdXRwdXQgZnJvbSBjZAotIyB3b3Vs ZCBjYXVzZSB0cm91YmxlIGluIGF0IGxlYXN0IG9uZSB1c2UgYmVsb3cuCi0odW5zZXQgQ0RQ QVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLSMgRW52aXJvbm1lbnQg dmFyaWFibGVzIHRoYXQgbWF5IGJlIHNldCBieSB0aGUgdXNlci4KLTogIiR7QVVUT1BPSU5U PWF1dG9wb2ludH0iCi06ICIke0FVVE9SRUNPTkY9YXV0b3JlY29uZn0iCi0KLWlmIHRlc3Qg IiR2Y19pZ25vcmUiID0gYXV0bzsgdGhlbgotICB2Y19pZ25vcmU9Ci0gIHRlc3QgLWQgLmdp dCAmJiB2Y19pZ25vcmU9LmdpdGlnbm9yZQotICB0ZXN0IC1kIENWUyAmJiB2Y19pZ25vcmU9 IiR2Y19pZ25vcmUgLmN2c2lnbm9yZSIKLWZpCi0KLXVzYWdlKCkgewotICBjYXQgPDxFT0YK LVVzYWdlOiAkbWUgW09QVElPTl0uLi4KLUJvb3RzdHJhcCB0aGlzIHBhY2thZ2UgZnJvbSB0 aGUgY2hlY2tlZC1vdXQgc291cmNlcy4KLQotT3B0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFi bGVzOgotICBHTlVMSUJfU1JDRElSICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsb2NhbCBk aXJlY3Rvcnkgd2hlcmUgZ251bGliCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzb3Vy Y2VzIHJlc2lkZS4gIFVzZSB0aGlzIGlmIHlvdSBhbHJlYWR5Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICBoYXZlIGdudWxpYiBzb3VyY2VzIG9uIHlvdXIgbWFjaGluZSwgYW5kCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byB1c2UgdGhlc2Ugc291cmNl cy4KLQotT3B0aW9uczoKLSAgLS1jb3B5ICAgICAgICAgICAgICAgICAgIGNvcHkgZmlsZXMg aW5zdGVhZCBvZiBjcmVhdGluZyBzeW1ib2xpYyBsaW5rcwotICAtLWZvcmNlICAgICAgICAg ICAgICAgICAgYXR0ZW1wdCB0byBib290c3RyYXAgZXZlbiBpZiB0aGUgc291cmNlcyBzZWVt Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgdG8gaGF2ZSBiZWVuIGNoZWNrZWQg b3V0Ci1FT0YKLSAgYm9vdHN0cmFwX3ByaW50X29wdGlvbl91c2FnZV9ob29rCi0gIGNhdCA8 PEVPRgotSWYgdGhlIGZpbGUgYm9vdHN0cmFwLmNvbmYgZXhpc3RzIGluIHRoZSBzYW1lIGRp cmVjdG9yeSBhcyB0aGlzIHNjcmlwdCwgaXRzCi1jb250ZW50cyBhcmUgcmVhZCBhcyBzaGVs bCB2YXJpYWJsZXMgdG8gY29uZmlndXJlIHRoZSBib290c3RyYXAuCi0KLUZvciBidWlsZCBw cmVyZXF1aXNpdGVzLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbGlrZSBcJEFVVE9DT05GIGFu ZCBcJEFNVEFSCi1hcmUgaG9ub3JlZC4KLQotR251bGliIHNvdXJjZXMgYXJlIGFzc3VtZWQg dG8gYmUgcHJlc2VudDoKLSAgKiBpbiBcJEdOVUxJQl9TUkNESVIsIGlmIHRoYXQgZW52aXJv bm1lbnQgdmFyaWFibGUgaXMgc2V0LAotICAqIG90aGVyd2lzZSwgaW4gdGhlICdnbnVsaWIn IHN1Ym1vZHVsZSwgaWYgc3VjaCBhIHN1Ym1vZHVsZSBpcyBjb25maWd1cmVkLAotICAqIG90 aGVyd2lzZSwgaW4gdGhlICdnbnVsaWInIHN1YmRpcmVjdG9yeS4KLQotUnVubmluZyB3aXRo b3V0IGFyZ3VtZW50cyB3aWxsIHN1ZmZpY2UgaW4gbW9zdCBjYXNlcy4KLUVPRgotfQotCi0j IFBhcnNlIG9wdGlvbnMuCi0KLSMgV2hldGhlciB0byB1c2UgY29waWVzIGluc3RlYWQgb2Yg c3ltbGlua3MuCi1jb3B5PWZhbHNlCi0KLWZvciBvcHRpb24KLWRvCi0gIGNhc2UgJG9wdGlv biBpbgotICAtLWhlbHApCi0gICAgdXNhZ2UKLSAgICBleGl0OzsKLSAgLS12ZXJzaW9uKQot ICAgIHNldCAtZQotICAgIGVjaG8gImF1dG9nZW4uc2ggJHNjcmlwdHZlcnNpb24iCi0gICAg ZWNobyAiJGNvcHlyaWdodCIKLSAgICBleGl0IDAKLSAgICA7OwotICAtLWZvcmNlKQotICAg IGNoZWNrb3V0X29ubHlfZmlsZT07OwotICAtLWNvcHkpCi0gICAgY29weT10cnVlOzsKLSAg KikKLSAgICBib290c3RyYXBfb3B0aW9uX2hvb2sgJG9wdGlvbiB8fCBkaWUgIiRvcHRpb246 IHVua25vd24gb3B0aW9uIjs7Ci0gIGVzYWMKLWRvbmUKLQotdGVzdCAteiAiJEdOVUxJQl9T UkNESVIiIHx8IHRlc3QgLWQgIiRHTlVMSUJfU1JDRElSIiBcCi0gIHx8IGRpZSAiRXJyb3I6 IFwkR05VTElCX1NSQ0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciAtLWdudWxpYi1zcmNk aXIgb3B0aW9uIGlzIHNwZWNpZmllZCwgYnV0IGRvZXMgbm90IGRlbm90ZSBhIGRpcmVjdG9y eSIKLQotaWYgdGVzdCAtbiAiJGNoZWNrb3V0X29ubHlfZmlsZSIgJiYgdGVzdCAhIC1yICIk Y2hlY2tvdXRfb25seV9maWxlIjsgdGhlbgotICBkaWUgIlJ1bm5pbmcgdGhpcyBzY3JpcHQg ZnJvbSBhIG5vbi1jaGVja2VkLW91dCBkaXN0cmlidXRpb24gaXMgcmlza3kuIgotZmkKLQot aWYgJHVzZV9nbnVsaWI7IHRoZW4KLSAgaWYgdGVzdCAteiAiJEdOVUxJQl9TUkNESVIiOyB0 aGVuCi0gICAgZ251bGliX3BhdGg9JCh0ZXN0IC1mIC5naXRtb2R1bGVzICYmIGdpdCBjb25m aWcgLS1maWxlIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5nbnVsaWIucGF0aCkKLSAgICB0ZXN0 IC16ICIkZ251bGliX3BhdGgiICYmIGdudWxpYl9wYXRoPWdudWxpYgotICAgIEdOVUxJQl9T UkNESVI9JGdudWxpYl9wYXRoCi0gIGZpCi1maQotCi12ZXJzaW9uX2NvbnRyb2xsZWRfZmls ZSgpIHsKLSAgcGFyZW50PSQxCi0gIGZpbGU9JDIKLSAgaWYgdGVzdCAtZCAuZ2l0OyB0aGVu Ci0gICAgZ2l0IHJtIC1uICIkZmlsZSIgPiAvZGV2L251bGwgMj4mMQotICBlbGlmIHRlc3Qg LWQgLnN2bjsgdGhlbgotICAgIHN2biBsb2cgLXIgSEVBRCAiJGZpbGUiID4gL2Rldi9udWxs IDI+JjEKLSAgZWxpZiB0ZXN0IC1kIENWUzsgdGhlbgotICAgIGdyZXAgLUYgIi8ke2ZpbGUj IyovfS8iICIkcGFyZW50L0NWUy9FbnRyaWVzIiAyPi9kZXYvbnVsbCB8Ci0gICAgICAgICAg ICAgZ3JlcCAnXi9bXi9dKi9bMC05XScgPiAvZGV2L251bGwKLSAgZWxzZQotICAgIHdhcm5f ICJubyB2ZXJzaW9uIGNvbnRyb2wgZm9yICRmaWxlPyIKLSAgICBmYWxzZQotICBmaQotfQot Ci0jIFN0cmlwIGJsYW5rIGFuZCBjb21tZW50IGxpbmVzIHRvIGxlYXZlIHNpZ25pZmljYW50 IGVudHJpZXMuCi1naXRpZ25vcmVfZW50cmllcygpIHsKLSAgc2VkICcvXiMvZDsgL14kL2Qn ICIkQCIKLX0KLQotIyBJZiAkU1RSIGlzIG5vdCBhbHJlYWR5IG9uIGEgbGluZSBieSBpdHNl bGYgaW4gJEZJTEUsIGluc2VydCBpdCBhdCB0aGUgc3RhcnQuCi0jIEVudHJpZXMgYXJlIGlu c2VydGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgaWdub3JlIGxpc3QgdG8gZW5zdXJlIGV4aXN0 aW5nCi0jIGVudHJpZXMgc3RhcnRpbmcgd2l0aCAhIGFyZSBub3Qgb3ZlcnJpZGRlbi4gIFN1 Y2ggZW50cmllcyBzdXBwb3J0Ci0jIHdoaXRlbGlzdGluZyBleGNlcHRpb25zIGFmdGVyIGEg bW9yZSBnZW5lcmljIGJsYWNrbGlzdCBwYXR0ZXJuLgotaW5zZXJ0X2lmX2Fic2VudCgpIHsK LSAgZmlsZT0kMQotICBzdHI9JDIKLSAgdGVzdCAtZiAkZmlsZSB8fCB0b3VjaCAkZmlsZQot ICB0ZXN0IC1yICRmaWxlIHx8IGRpZSAiRXJyb3I6IGZhaWxlZCB0byByZWFkIGlnbm9yZSBm aWxlOiAkZmlsZSIKLSAgZHVwbGljYXRlX2VudHJpZXM9JChnaXRpZ25vcmVfZW50cmllcyAk ZmlsZSB8IHNvcnQgfCB1bmlxIC1kKQotICBpZiBbICIkZHVwbGljYXRlX2VudHJpZXMiIF0g OyB0aGVuCi0gICAgZGllICJFcnJvcjogRHVwbGljYXRlIGVudHJpZXMgaW4gJGZpbGU6ICIg JGR1cGxpY2F0ZV9lbnRyaWVzCi0gIGZpCi0gIGxpbmVzb2xkPSQoZ2l0aWdub3JlX2VudHJp ZXMgJGZpbGUgfCB3YyAtbCkKLSAgbGluZXNuZXc9JCggeyBlY2hvICIkc3RyIjsgY2F0ICRm aWxlOyB9IHwgZ2l0aWdub3JlX2VudHJpZXMgfCBzb3J0IC11IHwgd2MgLWwpCi0gIGlmIFsg JGxpbmVzb2xkICE9ICRsaW5lc25ldyBdIDsgdGhlbgotICAgIHsgZWNobyAiJHN0ciIgfCBj YXQgLSAkZmlsZSA+ICRmaWxlLmJhayAmJiBtdiAkZmlsZS5iYWsgJGZpbGU7IH0gXAotICAg ICAgfHwgZGllICJpbnNlcnRfaWZfYWJzZW50ICRmaWxlICRzdHI6IGZhaWxlZCIKLSAgZmkK LX0KLQotIyBBZGp1c3QgJFBBVFRFUk4gZm9yICRWQ19JR05PUkVfRklMRSBhbmQgaW5zZXJ0 IGl0IHdpdGgKLSMgaW5zZXJ0X2lmX2Fic2VudC4KLWluc2VydF92Y19pZ25vcmUoKSB7Ci0g IHZjX2lnbm9yZV9maWxlPSIkMSIKLSAgcGF0dGVybj0iJDIiCi0gIGNhc2UgJHZjX2lnbm9y ZV9maWxlIGluCi0gICouZ2l0aWdub3JlKQotICAgICMgQSAuZ2l0aWdub3JlIGVudHJ5IHRo YXQgZG9lcyBub3Qgc3RhcnQgd2l0aCAnLycgYXBwbGllcwotICAgICMgcmVjdXJzaXZlbHkg dG8gc3ViZGlyZWN0b3JpZXMsIHNvIHByZXBlbmQgJy8nIHRvIGV2ZXJ5Ci0gICAgIyAuZ2l0 aWdub3JlIGVudHJ5LgotICAgIHBhdHRlcm49JChlY2hvICIkcGF0dGVybiIgfCBzZWQgcyxe LC8sKTs7Ci0gIGVzYWMKLSAgaW5zZXJ0X2lmX2Fic2VudCAiJHZjX2lnbm9yZV9maWxlIiAi JHBhdHRlcm4iCi19Ci0KLXN5bWxpbmtfdG9fZGlyKCkKLXsKLSAgc3JjPSQxLyQyCi0gIGRz dD0kezMtJDJ9Ci0KLSAgdGVzdCAtZiAiJHNyYyIgJiYgewotCi0gICAgIyBJZiB0aGUgZGVz dGluYXRpb24gZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdC4KLSAgICAjIFRo aXMgaXMgcmVxdWlyZWQgYXQgbGVhc3QgZm9yICJsaWIvdW5pd2lkdGgvY2prLmgiLgotICAg IGRzdF9kaXI9JChkaXJuYW1lICIkZHN0IikKLSAgICBpZiAhIHRlc3QgLWQgIiRkc3RfZGly IjsgdGhlbgotICAgICAgbWtkaXIgLXAgIiRkc3RfZGlyIgotCi0gICAgICAjIElmIHdlJ3Zl IGp1c3QgY3JlYXRlZCBhIGRpcmVjdG9yeSBsaWtlIGxpYi91bml3aWR0aCwKLSAgICAgICMg dGVsbCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtKHMpIGl0J3MgaWdub3JhYmxlLgotICAgICAg IyBGSVhNRTogZm9yIG5vdywgdGhpcyBkb2VzIG9ubHkgb25lIGxldmVsCi0gICAgICBwYXJl bnQ9JChkaXJuYW1lICIkZHN0X2RpciIpCi0gICAgICBmb3IgZG90X2lnIGluIHggJHZjX2ln bm9yZTsgZG8KLSAgICAgICAgdGVzdCAkZG90X2lnID0geCAmJiBjb250aW51ZQotICAgICAg ICBpZz0kcGFyZW50LyRkb3RfaWcKLSAgICAgICAgaW5zZXJ0X3ZjX2lnbm9yZSAkaWcgIiR7 ZHN0X2RpciMjKi99IgotICAgICAgZG9uZQotICAgIGZpCi0KLSAgICBpZiAkY29weTsgdGhl bgotICAgICAgewotICAgICAgICB0ZXN0ICEgLWggIiRkc3QiIHx8IHsKLSAgICAgICAgICBl Y2hvICIkbWU6IHJtIC1mICRkc3QiICYmCi0gICAgICAgICAgcm0gLWYgIiRkc3QiCi0gICAg ICAgIH0KLSAgICAgIH0gJiYKLSAgICAgIHRlc3QgLWYgIiRkc3QiICYmCi0gICAgICBjbXAg LXMgIiRzcmMiICIkZHN0IiB8fCB7Ci0gICAgICAgIGVjaG8gIiRtZTogY3AgLWZwICRzcmMg JGRzdCIgJiYKLSAgICAgICAgY3AgLWZwICIkc3JjIiAiJGRzdCIKLSAgICAgIH0KLSAgICBl bHNlCi0gICAgICAjIExlYXZlIGFueSBleGlzdGluZyBzeW1saW5rIGFsb25lLCBpZiBpdCBh bHJlYWR5IHBvaW50cyB0byB0aGUgc291cmNlLAotICAgICAgIyBzbyB0aGF0IGJyb2tlbiBi dWlsZCB0b29scyB0aGF0IGNhcmUgYWJvdXQgc3ltbGluayB0aW1lcwotICAgICAgIyBhcmVu J3QgY29uZnVzZWQgaW50byBkb2luZyB1bm5lY2Vzc2FyeSBidWlsZHMuICBDb252ZXJzZWx5 LCBpZiB0aGUKLSAgICAgICMgZXhpc3Rpbmcgc3ltbGluaydzIHRpbWVzdGFtcCBpcyBvbGRl ciB0aGFuIHRoZSBzb3VyY2UsIG1ha2UgaXQgYWZyZXNoLAotICAgICAgIyBzbyB0aGF0IGJy b2tlbiB0b29scyBhcmVuJ3QgY29uZnVzZWQgaW50byBza2lwcGluZyBuZWVkZWQgYnVpbGRz LiAgU2VlCi0gICAgICAjIDxodHRwczovL2xpc3RzLmdudS5vcmcvci9idWctZ251bGliLzIw MTEtMDUvbXNnMDAzMjYuaHRtbD4uCi0gICAgICB0ZXN0IC1oICIkZHN0IiAmJgotICAgICAg c3JjX2xzPSQobHMgLWRpTCAiJHNyYyIgMj4vZGV2L251bGwpICYmIHNldCAkc3JjX2xzICYm IHNyY19pPSQxICYmCi0gICAgICBkc3RfbHM9JChscyAtZGlMICIkZHN0IiAyPi9kZXYvbnVs bCkgJiYgc2V0ICRkc3RfbHMgJiYgZHN0X2k9JDEgJiYKLSAgICAgIHRlc3QgIiRzcmNfaSIg PSAiJGRzdF9pIiAmJgotICAgICAgYm90aF9scz0kKGxzIC1kdCAiJHNyYyIgIiRkc3QiKSAm JgotICAgICAgdGVzdCAiWCRib3RoX2xzIiA9ICJYJGRzdCRubCRzcmMiIHx8IHsKLSAgICAg ICAgZG90X2RvdHM9Ci0gICAgICAgIGNhc2UgJHNyYyBpbgotICAgICAgICAvKikgOzsKLSAg ICAgICAgKikKLSAgICAgICAgICBjYXNlIC8kZHN0LyBpbgotICAgICAgICAgICovLyogfCAq Ly4uLyogfCAqLy4vKiB8IC8qLyovKi8qLyovKQotICAgICAgICAgICAgIGRpZSAiaW52YWxp ZCBzeW1saW5rIGNhbGN1bGF0aW9uOiAkc3JjIC0+ICRkc3QiOzsKLSAgICAgICAgICAvKi8q LyovKi8pICAgIGRvdF9kb3RzPS4uLy4uLy4uLzs7Ci0gICAgICAgICAgLyovKi8qLykgICAg ICBkb3RfZG90cz0uLi8uLi87OwotICAgICAgICAgIC8qLyovKSAgICAgICAgZG90X2RvdHM9 Li4vOzsKLSAgICAgICAgICBlc2FjOzsKLSAgICAgICAgZXNhYwotCi0gICAgICAgIGVjaG8g IiRtZTogbG4gLWZzICRkb3RfZG90cyRzcmMgJGRzdCIgJiYKLSAgICAgICAgbG4gLWZzICIk ZG90X2RvdHMkc3JjIiAiJGRzdCIKLSAgICAgIH0KLSAgICBmaQotICB9Ci19Ci0KLSMgRGll IGlmIHRoZXJlIGlzIG5vIEFDX0NPTkZJR19BVVhfRElSKCRidWlsZF9hdXgpIGxpbmUgaW4g Y29uZmlndXJlLmFjLgotZm91bmRfYXV4X2Rpcj1ubwotZ3JlcCAnXlsJIF0qQUNfQ09ORklH X0FVWF9ESVIoXFsnIiRidWlsZF9hdXgiJ10pJyBjb25maWd1cmUuYWMgXAotICAgID4vZGV2 L251bGwgJiYgZm91bmRfYXV4X2Rpcj15ZXMKLWdyZXAgJ15bCSBdKkFDX0NPTkZJR19BVVhf RElSKCciJGJ1aWxkX2F1eCInKScgY29uZmlndXJlLmFjIFwKLSAgICA+L2Rldi9udWxsICYm IGZvdW5kX2F1eF9kaXI9eWVzCi10ZXN0ICRmb3VuZF9hdXhfZGlyID0geWVzIFwKLSAgfHwg ZGllICJjb25maWd1cmUuYWMgbGFja3MgJ0FDX0NPTkZJR19BVVhfRElSKFskYnVpbGRfYXV4 XSknOyBhZGQgaXQiCi0KLSMgSWYgJGJ1aWxkX2F1eCBkb2Vzbid0IGV4aXN0LCBjcmVhdGUg aXQgbm93LCBvdGhlcndpc2Ugc29tZSBiaXRzCi0jIGJlbG93IHdpbGwgbWFsZnVuY3Rpb24u ICBJZiBjcmVhdGluZyBpdCwgYWxzbyBtYXJrIGl0IGFzIGlnbm9yZWQuCi1pZiB0ZXN0ICEg LWQgJGJ1aWxkX2F1eDsgdGhlbgotICBta2RpciAkYnVpbGRfYXV4Ci0gIGZvciBkb3RfaWcg aW4geCAkdmNfaWdub3JlOyBkbwotICAgIHRlc3QgJGRvdF9pZyA9IHggJiYgY29udGludWUK LSAgICBpbnNlcnRfdmNfaWdub3JlICRkb3RfaWcgJGJ1aWxkX2F1eAotICBkb25lCi1maQot Ci1jaGVja19idWlsZF9wcmVyZXF1aXNpdGVzIGZhbHNlCi0KLXVzZV9saWJ0b29sPTAKLSMg V2UnZCBsaWtlIHRvIHVzZSBncmVwIC1FLCB0byBzZWUgaWYgYW55IG9mIExUX0lOSVQsCi0j IEFDX1BST0dfTElCVE9PTCwgQU1fUFJPR19MSUJUT09MIGlzIHVzZWQgaW4gY29uZmlndXJl LmFjLAotIyBidXQgdGhhdCdzIG5vdCBwb3J0YWJsZSBlbm91Z2ggKGUuZy4sIGZvciBTb2xh cmlzKS4KLWdyZXAgJ15bCSBdKkFbQ01dX1BST0dfTElCVE9PTCcgY29uZmlndXJlLmFjID4v ZGV2L251bGwgXAotICAmJiB1c2VfbGlidG9vbD0xCi1ncmVwICdeWwkgXSpMVF9JTklUJyBj b25maWd1cmUuYWMgPi9kZXYvbnVsbCBcCi0gICYmIHVzZV9saWJ0b29sPTEKLWlmIHRlc3Qg JHVzZV9saWJ0b29sID0gMTsgdGhlbgotICBmaW5kX3Rvb2wgTElCVE9PTElaRSBnbGlidG9v bGl6ZSBsaWJ0b29saXplCi1maQotCi1pZiAkdXNlX2dudWxpYjsgdGhlbgotICBnbnVsaWJf dG9vbD0kR05VTElCX1NSQ0RJUi9nbnVsaWItdG9vbAotICA8JGdudWxpYl90b29sIHx8IGV4 aXQgJD8KLWZpCi0KLSMgTk9URTogd2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIHJ1biBib3Ro IGF1dG9wb2ludCBhbmQgbGlidG9vbGl6ZQotIyBiZWZvcmUgZ251bGliLXRvb2wsIHNpbmNl IGdudWxpYi10b29sIGlzIGxpa2VseSB0byBwcm92aWRlIG5ld2VyCi0jIHZlcnNpb25zIG9m IGZpbGVzICJpbnN0YWxsZWQiIGJ5IHRoZXNlIHR3byBwcm9ncmFtcy4KLSMgVGhlbiwgKmFm dGVyKiBnbnVsaWItdG9vbCAoc2VlIGJlbG93KSwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRv Ci0jIHJ1biBhdXRvcmVjb25mIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCBkb2VzIG5vdCBydW4g ZWl0aGVyIG9mIHRoZXNlCi0jIHR3byBqdXN0LXByZS1ydW4gcHJvZ3JhbXMuCi0KLSMgSW1w b3J0IGZyb20gZ2V0dGV4dC4KLXdpdGhfZ2V0dGV4dD15ZXMKLWdyZXAgJ15bCSBdKkFNX0dO VV9HRVRURVhUX1ZFUlNJT04oJyBjb25maWd1cmUuYWMgPi9kZXYvbnVsbCB8fCBcCi0gICAg d2l0aF9nZXR0ZXh0PW5vCi0KLWlmIHRlc3QgJHdpdGhfZ2V0dGV4dCA9IHllcyB8fCB0ZXN0 ICR1c2VfbGlidG9vbCA9IDE7IHRoZW4KLQotICB0ZW1wYmFzZT0uYm9vdHN0cmFwJCQKLSAg dHJhcCAicm0gLWYgJHRlbXBiYXNlLjAgJHRlbXBiYXNlLjEiIEhVUCBJTlQgUElQRSBURVJN Ci0KLSAgPiAkdGVtcGJhc2UuMCA+ICR0ZW1wYmFzZS4xICYmCi0gIGZpbmQgLiAhIC10eXBl IGQgLXByaW50IHwgc29ydCA+ICR0ZW1wYmFzZS4wIHx8IGV4aXQKLQotICBpZiB0ZXN0ICR3 aXRoX2dldHRleHQgPSB5ZXM7IHRoZW4KLSAgICAjIFJlbGVhc2VkIGF1dG9wb2ludCBoYXMg dGhlIHRlbmRlbmN5IHRvIGluc3RhbGwgbWFjcm9zIHRoYXQgaGF2ZSBiZWVuCi0gICAgIyBv YnNvbGV0ZWQgaW4gY3VycmVudCBnbnVsaWIsIHNvIHJ1biB0aGlzIGJlZm9yZSBnbnVsaWIt dG9vbC4KLSAgICBlY2hvICIkMDogJEFVVE9QT0lOVCAtLWZvcmNlIgotICAgICRBVVRPUE9J TlQgLS1mb3JjZSB8fCBleGl0Ci0gIGZpCi0KLSAgIyBBdXRvcmVjb25mIHJ1bnMgYWNsb2Nh bCBiZWZvcmUgbGlidG9vbGl6ZSwgd2hpY2ggY2F1c2VzIHNwdXJpb3VzCi0gICMgd2Fybmlu Z3MgaWYgdGhlIGluaXRpYWwgYWNsb2NhbCBpcyBjb25mdXNlZCBieSB0aGUgbGlidG9vbGl6 ZWQKLSAgIyAob3Igd29yc2Ugb3V0LW9mLWRhdGUpIG1hY3JvIGRpcmVjdG9yeS4KLSAgIyBs aWJ0b29saXplIDEuOWIgYWRkZWQgdGhlIC0taW5zdGFsbCBvcHRpb247IGJ1dCB3ZSBzdXBw b3J0IGJhY2sKLSAgIyB0byBsaWJ0b29saXplIDEuNS4yMiwgd2hlcmUgdGhlIGluc3RhbGwg YWN0aW9uIHdhcyBkZWZhdWx0LgotICBpZiB0ZXN0ICR1c2VfbGlidG9vbCA9IDE7IHRoZW4K LSAgICBpbnN0YWxsPQotICAgIGNhc2UgJCgkTElCVE9PTElaRSAtLWhlbHApIGluCi0gICAg ICAqLS1pbnN0YWxsKikgaW5zdGFsbD0tLWluc3RhbGwgOzsKLSAgICBlc2FjCi0gICAgZWNo byAicnVubmluZzogJExJQlRPT0xJWkUgJGluc3RhbGwgLS1jb3B5IgotICAgICRMSUJUT09M SVpFICRpbnN0YWxsIC0tY29weQotICBmaQotCi0gIGZpbmQgLiAhIC10eXBlIGQgLXByaW50 IHwgc29ydCA+JHRlbXBiYXNlLjEKLSAgb2xkX0lGUz0kSUZTCi0gIElGUz0kbmwKLSAgZm9y IGZpbGUgaW4gJChjb21tIC0xMyAkdGVtcGJhc2UuMCAkdGVtcGJhc2UuMSk7IGRvCi0gICAg SUZTPSRvbGRfSUZTCi0gICAgcGFyZW50PSR7ZmlsZSUvKn0KLSAgICB2ZXJzaW9uX2NvbnRy b2xsZWRfZmlsZSAiJHBhcmVudCIgIiRmaWxlIiB8fCB7Ci0gICAgICBmb3IgZG90X2lnIGlu IHggJHZjX2lnbm9yZTsgZG8KLSAgICAgICAgdGVzdCAkZG90X2lnID0geCAmJiBjb250aW51 ZQotICAgICAgICBpZz0kcGFyZW50LyRkb3RfaWcKLSAgICAgICAgaW5zZXJ0X3ZjX2lnbm9y ZSAiJGlnIiAiJHtmaWxlIyMqL30iCi0gICAgICBkb25lCi0gICAgfQotICBkb25lCi0gIElG Uz0kb2xkX0lGUwotCi0gIHJtIC1mICR0ZW1wYmFzZS4wICR0ZW1wYmFzZS4xCi0gIHRyYXAg LSBIVVAgSU5UIFBJUEUgVEVSTQotZmkKLQotIyBJbXBvcnQgZnJvbSBnbnVsaWIuCi0KLWlm ICR1c2VfZ251bGliOyB0aGVuCi0gIGdudWxpYl90b29sX29wdGlvbnM9IlwKLSAgIC0tbm8t Y2hhbmdlbG9nXAotICAgLS1hdXgtZGlyPSRidWlsZF9hdXhcCi0gICAtLWRvYy1iYXNlPSRk b2NfYmFzZVwKLSAgIC0tbGliPSRnbnVsaWJfbmFtZVwKLSAgIC0tbTQtYmFzZT0kbTRfYmFz ZS9cCi0gICAtLXNvdXJjZS1iYXNlPSRzb3VyY2VfYmFzZS9cCi0gICAtLXRlc3RzLWJhc2U9 JHRlc3RzX2Jhc2VcCi0gICAtLWxvY2FsLWRpcj0kbG9jYWxfZ2xfZGlyXAotICAgJGdudWxp Yl90b29sX29wdGlvbl9leHRyYXNcCi0gICIKLSAgaWYgdGVzdCAkdXNlX2xpYnRvb2wgPSAx OyB0aGVuCi0gICAgY2FzZSAiJGdudWxpYl90b29sX29wdGlvbnMgIiBpbgotICAgICAgKicg LS1saWJ0b29sICcqKSA7OwotICAgICAgKikgZ251bGliX3Rvb2xfb3B0aW9ucz0iJGdudWxp Yl90b29sX29wdGlvbnMgLS1saWJ0b29sIiA7OwotICAgIGVzYWMKLSAgZmkKLSAgZWNobyAi JDA6ICRnbnVsaWJfdG9vbCAkZ251bGliX3Rvb2xfb3B0aW9ucyAtLWltcG9ydCAuLi4iCi0g ICRnbnVsaWJfdG9vbCAkZ251bGliX3Rvb2xfb3B0aW9ucyAtLWltcG9ydCAkZ251bGliX21v ZHVsZXMgXAotICAgIHx8IGRpZSAiZ251bGliLXRvb2wgZmFpbGVkIgotCi0gIGZvciBmaWxl IGluICRnbnVsaWJfZmlsZXM7IGRvCi0gICAgc3ltbGlua190b19kaXIgIiRHTlVMSUJfU1JD RElSIiAkZmlsZSBcCi0gICAgICB8fCBkaWUgImZhaWxlZCB0byBzeW1saW5rICRmaWxlIgot ICBkb25lCi1maQotCi1ib290c3RyYXBfcG9zdF9pbXBvcnRfaG9vayBcCi0gIHx8IGRpZSAi Ym9vdHN0cmFwX3Bvc3RfaW1wb3J0X2hvb2sgZmFpbGVkIgotCi0jIFJlbW92ZSBhbnkgZGFu Z2xpbmcgc3ltbGluayBtYXRjaGluZyAiKi5tNCIgb3IgIiouW2NoXSIgaW4gc29tZQotIyBn bnVsaWItcG9wdWxhdGVkIGRpcmVjdG9yaWVzLiAgU3VjaCAubTQgZmlsZXMgd291bGQgY2F1 c2UgYWNsb2NhbCB0byBmYWlsLgotIyBUaGUgZm9sbG93aW5nIHJlcXVpcmVzIEdOVSBmaW5k IDQuMi4zIG9yIG5ld2VyLiAgQ29uc2lkZXJpbmcgdGhlIHVzdWFsCi0jIHBvcnRhYmlsaXR5 IGNvbnN0cmFpbnRzIG9mIHRoaXMgc2NyaXB0LCB0aGF0IG1heSBzZWVtIGEgdmVyeSBkZW1h bmRpbmcKLSMgcmVxdWlyZW1lbnQsIGJ1dCBpdCBzaG91bGQgYmUgb2suICBJZ25vcmUgYW55 IGZhaWx1cmUsIHdoaWNoIGlzIGZpbmUsCi0jIHNpbmNlIHRoaXMgaXMgb25seSBhIGNvbnZl bmllbmNlIHRvIGhlbHAgZGV2ZWxvcGVycyBhdm9pZCB0aGUgcmVsYXRpdmVseQotIyB1bnVz dWFsIGNhc2UgaW4gd2hpY2ggYSBzeW1saW5rZWQtdG8gLm00IGZpbGUgaXMgZ2l0LXJlbW92 ZWQgZnJvbSBnbnVsaWIKLSMgYmV0d2VlbiBzdWNjZXNzaXZlIHJ1bnMgb2YgdGhpcyBzY3Jp cHQuCi1maW5kICIkbTRfYmFzZSIgIiRzb3VyY2VfYmFzZSIgXAotICAtZGVwdGggXCggLW5h bWUgJyoubTQnIC1vIC1uYW1lICcqLltjaF0nIFwpIFwKLSAgLXR5cGUgbCAteHR5cGUgbCAt ZGVsZXRlID4gL2Rldi9udWxsIDI+JjEKLQotIyBJbnZva2UgYXV0b3JlY29uZiB3aXRoIC0t Zm9yY2UgLS1pbnN0YWxsIHRvIGVuc3VyZSB1cGdyYWRlcyBvZiB0b29scwotIyBzdWNoIGFz IHlsd3JhcC4KLUFVVE9SRUNPTkZGTEFHUz0iLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNl IC1JICRtNF9iYXNlICRBQ0xPQ0FMX0ZMQUdTIgotCi0jIFNvbWUgc3lzdGVtcyAoUkhFTCA1 KSBhcmUgdXNpbmcgYW5jaWVudCBhdXRvdG9vbHMsIGZvciB3aGljaCB0aGUKLSMgLS1uby1y ZWN1cnNpdmUgb3B0aW9uIGhhZCBub3QgYmVlbiBpbnZlbnRlZC4gIERldGVjdCB0aGF0IGxh Y2sgYW5kCi0jIG9taXQgdGhlIG9wdGlvbiB3aGVuIGl0J3Mgbm90IHN1cHBvcnRlZC4gIEZJ WE1FIGluIDIwMTc6IHJlbW92ZSB0aGlzCi0jIGhhY2sgd2hlbiBSSEVMIDUgYXV0b3Rvb2xz IGFyZSB1cGRhdGVkLCBvciB3aGVuIHRoZXkgYmVjb21lIGlycmVsZXZhbnQuCi1jYXNlICQo JEFVVE9SRUNPTkYgLS1oZWxwKSBpbgotICAqLS1uby1yZWN1cnNpdmUqKSBBVVRPUkVDT05G RkxBR1M9IiRBVVRPUkVDT05GRkxBR1MgLS1uby1yZWN1cnNpdmUiOzsKLWVzYWMKLQotIyBU ZWxsIGF1dG9yZWNvbmYgbm90IHRvIGludm9rZSBhdXRvcG9pbnQgb3IgbGlidG9vbGl6ZTsg dGhleSB3ZXJlIHJ1biBhYm92ZS4KLWVjaG8gInJ1bm5pbmc6IEFVVE9QT0lOVD10cnVlIExJ QlRPT0xJWkU9dHJ1ZSAkQVVUT1JFQ09ORiAkQVVUT1JFQ09ORkZMQUdTIgotQVVUT1BPSU5U PXRydWUgTElCVE9PTElaRT10cnVlICRBVVRPUkVDT05GICRBVVRPUkVDT05GRkxBR1MgXAot ICB8fCBkaWUgImF1dG9yZWNvbmYgZmFpbGVkIgotCi0jIEdldCBzb21lIGV4dHJhIGZpbGVz IGZyb20gZ251bGliLCBvdmVycmlkaW5nIGV4aXN0aW5nIGZpbGVzLgotZm9yIGZpbGUgaW4g JGdudWxpYl9leHRyYV9maWxlczsgZG8KLSAgY2FzZSAkZmlsZSBpbgotICAgICovSU5TVEFM TCkgZHN0PUlOU1RBTEw7OwotICAgIGJ1aWxkLWF1eC8qKSBkc3Q9JGJ1aWxkX2F1eC8ke2Zp bGUjYnVpbGQtYXV4L307OwotICAgICopIGRzdD0kZmlsZTs7Ci0gIGVzYWMKLSAgc3ltbGlu a190b19kaXIgIiRHTlVMSUJfU1JDRElSIiAkZmlsZSAkZHN0IFwKLSAgICB8fCBkaWUgImZh aWxlZCB0byBzeW1saW5rICRmaWxlIgotZG9uZQotCi1pZiB0ZXN0ICR3aXRoX2dldHRleHQg PSB5ZXM7IHRoZW4KLSAgIyBDcmVhdGUgZ2V0dGV4dCBjb25maWd1cmF0aW9uLgotICBlY2hv ICIkMDogQ3JlYXRpbmcgcG8vTWFrZXZhcnMgZnJvbSBwby9NYWtldmFycy50ZW1wbGF0ZSAu Li4iCi0gIHJtIC1mIHBvL01ha2V2YXJzCi0gIHNlZCAnCi0gICAgL15FWFRSQV9MT0NBTEVf Q0FURUdPUklFUyAqPS9zLz0uKi89ICciJEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTIicvCi0g ICAgL15DT1BZUklHSFRfSE9MREVSICo9L3MvPS4qLz0gJyIkQ09QWVJJR0hUX0hPTERFUiIn LwotICAgIC9eTVNHSURfQlVHU19BRERSRVNTICo9L3N8PS4qfD0gJyIkTVNHSURfQlVHU19B RERSRVNTIid8Ci0gICAgL15YR0VUVEVYVF9PUFRJT05TICo9L3sKLSAgICAgIHMvJC8gXFwv Ci0gICAgICBhXAotICAgICAgICAgICciJFhHRVRURVhUX09QVElPTlMiJyAkJHtlbmRfb2Zf eGdldHRleHRfb3B0aW9ucyt9Ci0gICAgfQotICAnIHBvL01ha2V2YXJzLnRlbXBsYXRlID5w by9NYWtldmFycyBcCi0gICAgfHwgZGllICdjYW5ub3QgZ2VuZXJhdGUgcG8vTWFrZXZhcnMn Ci0KLSAgIyBJZiB0aGUgJ2dldHRleHQnIG1vZHVsZSBpcyBpbiB1c2UsIGdyYWIgdGhlIGxh dGVzdCBNYWtlZmlsZS5pbi5pbi4KLSAgIyBJZiBvbmx5IHRoZSAnZ2V0dGV4dC1oJyBtb2R1 bGUgaXMgaW4gdXNlLCBhc3N1bWUgYXV0b3BvaW50IGFscmVhZHkKLSAgIyBwdXQgdGhlIGNv cnJlY3QgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaW50byBwbGFjZS4KLSAgY2FzZSAkZ251bGli X21vZHVsZXMgaW4KLSAgICAqZ2V0dGV4dC1oKikgOzsKLSAgICAqZ2V0dGV4dCopCi0gICAg ICBjcCAkR05VTElCX1NSQ0RJUi9idWlsZC1hdXgvcG8vTWFrZWZpbGUuaW4uaW4gcG8vTWFr ZWZpbGUuaW4uaW4gXAotICAgICAgICB8fCBkaWUgImNhbm5vdCBjcmVhdGUgcG8vTWFrZWZp bGUuaW4uaW4iCi0gICAgICA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCAtZCBydW50aW1lLXBv OyB0aGVuCi0gICAgIyBTaW1pbGFybHkgZm9yIHJ1bnRpbWUtcG8vTWFrZXZhcnMsIGJ1dCBu b3QgcXVpdGUgdGhlIHNhbWUuCi0gICAgcm0gLWYgcnVudGltZS1wby9NYWtldmFycwotICAg IHNlZCAnCi0gICAgICAvXkRPTUFJTiAqPS4qL3MvPS4qLz0gJyIkcGFja2FnZSInLXJ1bnRp bWUvCi0gICAgICAvXnN1YmRpciAqPS4qL3MvPS4qLz0gcnVudGltZS1wby8KLSAgICAgIC9e TVNHSURfQlVHU19BRERSRVNTICo9L3MvPS4qLz0gYnVnLSciJHBhY2thZ2UiJ0BnbnUub3Jn LwotICAgICAgL15YR0VUVEVYVF9PUFRJT05TICo9L3sKLSAgICAgICAgcy8kLyBcXC8KLSAg ICAgICAgYVwKLSAgICAgICAgICAgICciJFhHRVRURVhUX09QVElPTlNfUlVOVElNRSInICQk e2VuZF9vZl94Z2V0dGV4dF9vcHRpb25zK30KLSAgICAgIH0KLSAgICAnIHBvL01ha2V2YXJz LnRlbXBsYXRlID5ydW50aW1lLXBvL01ha2V2YXJzIFwKLSAgICB8fCBkaWUgJ2Nhbm5vdCBn ZW5lcmF0ZSBydW50aW1lLXBvL01ha2V2YXJzJwotCi0gICAgIyBDb3B5IGlkZW50aWNhbCBm aWxlcyBmcm9tIHBvIHRvIHJ1bnRpbWUtcG8uCi0gICAgKGNkIHBvICYmIGNwIC1wIE1ha2Vm aWxlLmluLmluICotcXVvdCAqLmhlYWRlciAqLnNlZCAqLnNpbiAuLi9ydW50aW1lLXBvKQot ICBmaQotZmkKLQotYm9vdHN0cmFwX2VwaWxvZ3VlCi0KLWVjaG8gIiQwOiBkb25lLiAgTm93 IHlvdSBjYW4gcnVuICcuL2NvbmZpZ3VyZScuIgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNh dmUtaG9vayAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNp b249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGlt ZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMwIgotIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMi Ci0jIEVuZDoKZGlmZiAtLWdpdCBhL2F1dG9wdWxsLnNoIGIvYXV0b3B1bGwuc2gKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGZmYjRiYTcuLjAwMDAwMDAKLS0tIGEvYXV0b3B1 bGwuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotIyEvYmluL3NoCi0jIENv bnZlbmllbmNlIHNjcmlwdCBmb3IgZmV0Y2hpbmcgYXV4aWxpYXJ5IGZpbGVzIHRoYXQgYXJl IG9taXR0ZWQgZnJvbQotIyB0aGUgdmVyc2lvbiBjb250cm9sIHJlcG9zaXRvcnkgb2YgdGhp cyBwYWNrYWdlLgotCi0jIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTog eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot IyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCi0KLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBhdWwgRWdn ZXJ0LiAgVGhlIGNhbm9uaWNhbCB2ZXJzaW9uIG9mIHRoaXMKLSMgc2NyaXB0IGlzIG1haW50 YWluZWQgYXMgdG9wL2F1dG9wdWxsLnNoIGluIGdudWxpYi4gIEhvd2V2ZXIsIHRvIGJlCi0j IHVzZWZ1bCB0byB5b3VyIHBhY2thZ2UsIHlvdSBzaG91bGQgcGxhY2UgYSBjb3B5IG9mIGl0 IHVuZGVyIHZlcnNpb24KLSMgY29udHJvbCBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBv ZiB5b3VyIHBhY2thZ2UuICBUaGUgaW50ZW50IGlzCi0jIHRoYXQgYWxsIGN1c3RvbWl6YXRp b24gY2FuIGJlIGRvbmUgd2l0aCBhIGJvb3RzdHJhcC5jb25mIGZpbGUgYWxzbwotIyBtYWlu dGFpbmVkIGluIHlvdXIgdmVyc2lvbiBjb250cm9sOyBnbnVsaWIgY29tZXMgd2l0aCBhIHRl bXBsYXRlCi0jIGJ1aWxkLWF1eC9ib290c3RyYXAuY29uZiB0byBnZXQgeW91IHN0YXJ0ZWQu Ci0jCi0jIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGFuIGF1dG9wdWxsLnNoIHNjcmlw dCB0aGF0IGlzIHNwZWNpZmljCi0jIHRvIHlvdXIgcGFja2FnZS4KLQotc2NyaXB0dmVyc2lv bj0yMDIyLTA3LTI0LjE1OyAjIFVUQwotCi1tZT0iJDAiCi1tZWRpcj1gZGlybmFtZSAiJG1l ImAKLQotIyBSZWFkIHRoZSBmdW5jdGlvbiBsaWJyYXJ5IGFuZCB0aGUgY29uZmlndXJhdGlv bi4KLS4gIiRtZWRpciIvYm9vdHN0cmFwLWZ1bmNsaWIuc2gKLQotIyBFbnN1cmUgdGhhdCBD RFBBVEggaXMgbm90IHNldC4gIE90aGVyd2lzZSwgdGhlIG91dHB1dCBmcm9tIGNkCi0jIHdv dWxkIGNhdXNlIHRyb3VibGUgaW4gYXQgbGVhc3Qgb25lIHVzZSBiZWxvdy4KLSh1bnNldCBD RFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotdXNhZ2UoKSB7Ci0g IGNhdCA8PEVPRgotVXNhZ2U6ICRtZSBbT1BUSU9OXS4uLgotQm9vdHN0cmFwIHRoaXMgcGFj a2FnZSBmcm9tIHRoZSBjaGVja2VkLW91dCBzb3VyY2VzLgotCi1PcHRpb25hbCBlbnZpcm9u bWVudCB2YXJpYWJsZXM6Ci0gIEdOVUxJQl9TUkNESVIgICAgICAgICAgICBTcGVjaWZpZXMg dGhlIGxvY2FsIGRpcmVjdG9yeSB3aGVyZSBnbnVsaWIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNvdXJjZXMgcmVzaWRlLiAgVXNlIHRoaXMgaWYgeW91IGFscmVhZHkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhhdmUgZ251bGliIHNvdXJjZXMgb24geW91ciBtYWNo aW5lLCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZSB0 aGVzZSBzb3VyY2VzLgotICBHTlVMSUJfUkVGRElSICAgICAgICAgICAgU3BlY2lmaWVzIHRo ZSBsb2NhbCBkaXJlY3Rvcnkgd2hlcmUgYSBnbnVsaWIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlcG9zaXRvcnkgKHdpdGggYSAuZ2l0IHN1YmRpcmVjdG9yeSkgcmVzaWRlcy4K LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIGlmIHlvdSBhbHJlYWR5IGhh dmUgZ251bGliIHNvdXJjZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoaXN0 b3J5IG9uIHlvdXIgbWFjaGluZSwgYW5kIGRvIG5vdCB3YW50Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICB0byB3YXN0ZSB5b3VyIGJhbmR3aWR0aCBkb3dubG9hZGluZyB0aGVtIGFn YWluLgotICBHTlVMSUJfVVJMICAgICAgICAgICAgICAgQ2xvbmVhYmxlIFVSTCBvZiB0aGUg Z251bGliIHJlcG9zaXRvcnkuCi0KLU9wdGlvbnM6Ci0gIC0tYm9vdHN0cmFwLXN5bmMgICAg ICAgICBpZiB0aGlzIGJvb3RzdHJhcCBzY3JpcHQgaXMgbm90IGlkZW50aWNhbCB0bwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZlcnNpb24gaW4gdGhlIGxvY2FsIGdudWxp YiBzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRoaXMgc2Ny aXB0LCBhbmQgdGhlbiByZXN0YXJ0IGl0IHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIC9iaW4vc2ggb3IgdGhlIHNoZWxsIFwkQ09ORklHX1NIRUxMCi0gIC0tbm8tYm9vdHN0 cmFwLXN5bmMgICAgICBkbyBub3QgY2hlY2sgd2hldGhlciBib290c3RyYXAgaXMgb3V0IG9m IHN5bmMKLSAgLS1mb3JjZSAgICAgICAgICAgICAgICAgIGF0dGVtcHQgdG8gYm9vdHN0cmFw IGV2ZW4gaWYgdGhlIHNvdXJjZXMgc2VlbQotICAgICAgICAgICAgICAgICAgICAgICAgICAg bm90IHRvIGhhdmUgYmVlbiBjaGVja2VkIG91dAotICAtLW5vLWdpdCAgICAgICAgICAgICAg ICAgZG8gbm90IHVzZSBnaXQgdG8gdXBkYXRlIGdudWxpYi4gIFJlcXVpcmVzIHRoYXQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwkR05VTElCX1NSQ0RJUiBvciB0aGUgLS1nbnVs aWItc3JjZGlyIG9wdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzIHRv IGEgZ251bGliIHJlcG9zaXRvcnkgd2l0aCB0aGUgY29ycmVjdAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV2aXNpb24KLSAgLS1za2lwLXBvICAgICAgICAgICAgICAgIGRvIG5v dCBkb3dubG9hZCBwbyBmaWxlcwotRU9GCi0gIGJvb3RzdHJhcF9wcmludF9vcHRpb25fdXNh Z2VfaG9vawotICBjYXQgPDxFT0YKLUlmIHRoZSBmaWxlIGJvb3RzdHJhcC5jb25mIGV4aXN0 cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBzY3JpcHQsIGl0cwotY29udGVudHMg YXJlIHJlYWQgYXMgc2hlbGwgdmFyaWFibGVzIHRvIGNvbmZpZ3VyZSB0aGUgYm9vdHN0cmFw LgotCi1Gb3IgYnVpbGQgcHJlcmVxdWlzaXRlcywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxp a2UgXCRBVVRPQ09ORiBhbmQgXCRBTVRBUgotYXJlIGhvbm9yZWQuCi0KLUdudWxpYiBzb3Vy Y2VzIGNhbiBiZSBmZXRjaGVkIGluIHZhcmlvdXMgd2F5czoKLQotICogSWYgdGhlIGVudmly b25tZW50IHZhcmlhYmxlIEdOVUxJQl9TUkNESVIgaXMgc2V0IChlaXRoZXIgYXMgYW4KLSAg IGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHZpYSB0aGUgLS1nbnVsaWItc3JjZGlyIG9wdGlv biksIHRoZW4gc291cmNlcwotICAgYXJlIGZldGNoZWQgZnJvbSB0aGF0IGxvY2FsIGRpcmVj dG9yeS4gIElmIGl0IGlzIGEgZ2l0IHJlcG9zaXRvcnkgYW5kCi0gICB0aGUgY29uZmlndXJh dGlvbiB2YXJpYWJsZSBHTlVMSUJfUkVWSVNJT04gaXMgc2V0IGluIGJvb3RzdHJhcC5jb25m LAotICAgdGhlbiB0aGF0IHJldmlzaW9uIGlzIGNoZWNrZWQgb3V0LgotCi0gKiBPdGhlcndp c2UsIGlmIHRoaXMgcGFja2FnZSBpcyBpbiBhIGdpdCByZXBvc2l0b3J5IHdpdGggYSAnZ251 bGliJwotICAgc3VibW9kdWxlIGNvbmZpZ3VyZWQsIHRoZW4gdGhhdCBzdWJtb2R1bGUgaXMg aW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQKLSAgIGFuZCBzb3VyY2VzIGFyZSBmZXRjaGVkIGZy b20gdGhlcmUuICBJZiBHTlVMSUJfUkVGRElSIGlzIHNldCAoZWl0aGVyCi0gICBhcyBhbiBl bnZpcm9ubWVudCB2YXJpYWJsZSBvciB2aWEgdGhlIC0tZ251bGliLXJlZmRpciBvcHRpb24p IGFuZCBpcwotICAgYSBnaXQgcmVwb3NpdG9yeSwgdGhlbiBpdCBpcyB1c2VkIGFzIGEgcmVm ZXJlbmNlLgotCi0gKiBPdGhlcndpc2UsIGlmIHRoZSAnZ251bGliJyBkaXJlY3RvcnkgZG9l cyBub3QgZXhpc3QsIEdudWxpYiBzb3VyY2VzCi0gICBhcmUgY2xvbmVkIGludG8gdGhhdCBk aXJlY3RvcnkgdXNpbmcgZ2l0IGZyb20gXCRHTlVMSUJfVVJMLCBkZWZhdWx0aW5nCi0gICB0 byAkZGVmYXVsdF9nbnVsaWJfdXJsLgotICAgSWYgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFi bGUgR05VTElCX1JFVklTSU9OIGlzIHNldCBpbiBib290c3RyYXAuY29uZiwKLSAgIHRoZW4g dGhhdCByZXZpc2lvbiBpcyBjaGVja2VkIG91dC4KLQotICogT3RoZXJ3aXNlLCB0aGUgZXhp c3RpbmcgR251bGliIHNvdXJjZXMgaW4gdGhlICdnbnVsaWInIGRpcmVjdG9yeSBhcmUKLSAg IHVzZWQuICBJZiBpdCBpcyBhIGdpdCByZXBvc2l0b3J5IGFuZCB0aGUgY29uZmlndXJhdGlv biB2YXJpYWJsZQotICAgR05VTElCX1JFVklTSU9OIGlzIHNldCBpbiBib290c3RyYXAuY29u ZiwgdGhlbiB0aGF0IHJldmlzaW9uIGlzCi0gICBjaGVja2VkIG91dC4KLQotSWYgeW91IG1h aW50YWluIGEgcGFja2FnZSBhbmQgd2FudCB0byBwaW4gYSBwYXJ0aWN1bGFyIHJldmlzaW9u IG9mIHRoZQotR251bGliIHNvdXJjZXMgdGhhdCBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB5b3Vy IHBhY2thZ2UsIHRoZW4gdGhlcmUgYXJlCi10d28gcG9zc2libGUgYXBwcm9hY2hlczogZWl0 aGVyIGNvbmZpZ3VyZSBhICdnbnVsaWInIHN1Ym1vZHVsZSB3aXRoIHRoZQotYXBwcm9wcmlh dGUgcmV2aXNpb24sIG9yIHNldCBHTlVMSUJfUkVWSVNJT04gKGFuZCBpZiBuZWNlc3NhcnkK LUdOVUxJQl9VUkwpIGluIGJvb3RzdHJhcC5jb25mLgotCi1SdW5uaW5nIHdpdGhvdXQgYXJn dW1lbnRzIHdpbGwgc3VmZmljZSBpbiBtb3N0IGNhc2VzLgotRU9GCi19Ci0KLSMgUGFyc2Ug b3B0aW9ucy4KLQotIyBVc2UgZ2l0IHRvIHVwZGF0ZSBnbnVsaWIgc291cmNlcwotdXNlX2dp dD10cnVlCi0KLWZvciBvcHRpb24KLWRvCi0gIGNhc2UgJG9wdGlvbiBpbgotICAtLWhlbHAp Ci0gICAgdXNhZ2UKLSAgICBleGl0OzsKLSAgLS12ZXJzaW9uKQotICAgIHNldCAtZQotICAg IGVjaG8gImF1dG9wdWxsLnNoICRzY3JpcHR2ZXJzaW9uIgotICAgIGVjaG8gIiRjb3B5cmln aHQiCi0gICAgZXhpdCAwCi0gICAgOzsKLSAgLS1za2lwLXBvKQotICAgIFNLSVBfUE89dDs7 Ci0gIC0tZm9yY2UpCi0gICAgY2hlY2tvdXRfb25seV9maWxlPTs7Ci0gIC0tYm9vdHN0cmFw LXN5bmMpCi0gICAgYm9vdHN0cmFwX3N5bmM9dHJ1ZTs7Ci0gIC0tbm8tYm9vdHN0cmFwLXN5 bmMpCi0gICAgYm9vdHN0cmFwX3N5bmM9ZmFsc2U7OwotICAtLW5vLWdpdCkKLSAgICB1c2Vf Z2l0PWZhbHNlOzsKLSAgKikKLSAgICBib290c3RyYXBfb3B0aW9uX2hvb2sgJG9wdGlvbiB8 fCBkaWUgIiRvcHRpb246IHVua25vd24gb3B0aW9uIjs7Ci0gIGVzYWMKLWRvbmUKLQotJHVz ZV9naXQgfHwgdGVzdCAtbiAiJEdOVUxJQl9TUkNESVIiIFwKLSAgfHwgZGllICJFcnJvcjog LS1uby1naXQgcmVxdWlyZXMgXCRHTlVMSUJfU1JDRElSIGVudmlyb25tZW50IHZhcmlhYmxl IG9yIC0tZ251bGliLXNyY2RpciBvcHRpb24iCi10ZXN0IC16ICIkR05VTElCX1NSQ0RJUiIg fHwgdGVzdCAtZCAiJEdOVUxJQl9TUkNESVIiIFwKLSAgfHwgZGllICJFcnJvcjogXCRHTlVM SUJfU1JDRElSIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIC0tZ251bGliLXNyY2RpciBvcHRp b24gaXMgc3BlY2lmaWVkLCBidXQgZG9lcyBub3QgZGVub3RlIGEgZGlyZWN0b3J5IgotCi1p ZiB0ZXN0IC1uICIkY2hlY2tvdXRfb25seV9maWxlIiAmJiB0ZXN0ICEgLXIgIiRjaGVja291 dF9vbmx5X2ZpbGUiOyB0aGVuCi0gIGRpZSAiUnVubmluZyB0aGlzIHNjcmlwdCBmcm9tIGEg bm9uLWNoZWNrZWQtb3V0IGRpc3RyaWJ1dGlvbiBpcyByaXNreS4iCi1maQotCi1jaGVja19i dWlsZF9wcmVyZXF1aXNpdGVzICR1c2VfZ2l0Ci0KLWlmICR1c2VfZ251bGliIHx8ICRib290 c3RyYXBfc3luYzsgdGhlbgotICBwcmVwYXJlX0dOVUxJQl9TUkNESVIKLSAgaWYgJGJvb3Rz dHJhcF9zeW5jOyB0aGVuCi0gICAgdXBncmFkZV9ib290c3RyYXAKLSAgZmkKLWZpCi0KLSMg RmluZCBzaGExc3VtLCBuYW1lZCBnc2hhMXN1bSBvbiBNYWNQb3J0cywgc2hhc3VtIG9uIE1h YyBPUyBYIDEwLjYuCi0jIEFsc28gZmluZCB0aGUgY29tcGF0aWJsZSBzaGExIHV0aWxpdHkg b24gdGhlIEJTRHMKLWlmIHRlc3QgeCIkU0tJUF9QTyIgPSB4OyB0aGVuCi0gIGZpbmRfdG9v bCBTSEExU1VNIHNoYTFzdW0gZ3NoYTFzdW0gc2hhc3VtIHNoYTEKLWZpCi0KLSMgU2VlIGlm IHdlIGNhbiB1c2UgZ251bGliJ3MgZ2l0LW1lcmdlLWNoYW5nZWxvZyBtZXJnZSBkcml2ZXIu Ci1pZiAkdXNlX2dpdCAmJiB0ZXN0IC1kIC5naXQgJiYgY2hlY2tfZXhpc3RzIGdpdDsgdGhl bgotICBpZiBnaXQgY29uZmlnIG1lcmdlLm1lcmdlLWNoYW5nZWxvZy5kcml2ZXIgPi9kZXYv bnVsbCA7IHRoZW4KLSAgICA6Ci0gIGVsaWYgY2hlY2tfZXhpc3RzIGdpdC1tZXJnZS1jaGFu Z2Vsb2c7IHRoZW4KLSAgICBlY2hvICIkMDogaW5pdGlhbGl6aW5nIGdpdC1tZXJnZS1jaGFu Z2Vsb2cgZHJpdmVyIgotICAgIGdpdCBjb25maWcgbWVyZ2UubWVyZ2UtY2hhbmdlbG9nLm5h bWUgJ0dOVS1zdHlsZSBDaGFuZ2VMb2cgbWVyZ2UgZHJpdmVyJwotICAgIGdpdCBjb25maWcg bWVyZ2UubWVyZ2UtY2hhbmdlbG9nLmRyaXZlciAnZ2l0LW1lcmdlLWNoYW5nZWxvZyAlTyAl QSAlQicKLSAgZWxzZQotICAgIGVjaG8gIiQwOiBjb25zaWRlciBpbnN0YWxsaW5nIGdpdC1t ZXJnZS1jaGFuZ2Vsb2cgZnJvbSBnbnVsaWIiCi0gIGZpCi1maQotCi0jIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tIEdldCB0cmFuc2xhdGlvbnMuIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0KLWRvd25sb2FkX3BvX2ZpbGVzKCkgewotICBzdWJkaXI9JDEKLSAg ZG9tYWluPSQyCi0gIGVjaG8gIiRtZTogZ2V0dGluZyB0cmFuc2xhdGlvbnMgaW50byAkc3Vi ZGlyIGZvciAkZG9tYWluLi4uIgotICBjbWQ9JChwcmludGYgIiRwb19kb3dubG9hZF9jb21t YW5kX2Zvcm1hdCIgIiRzdWJkaXIiICIkZG9tYWluIikKLSAgZXZhbCAiJGNtZCIKLX0KLQot IyBNaXJyb3IgLnBvIGZpbGVzIHRvICRwb19kaXIvLnJlZmVyZW5jZSBhbmQgY29weSBvbmx5 IHRoZSBuZXcKLSMgb3IgbW9kaWZpZWQgb25lcyBpbnRvICRwb19kaXIuICBBbHNvIHVwZGF0 ZSAkcG9fZGlyL0xJTkdVQVMuCi0jIE5vdGUgcG8gZmlsZXMgdGhhdCBleGlzdCBsb2NhbGx5 IG9ubHkgYXJlIGxlZnQgaW4gJHBvX2RpciBidXQgd2lsbAotIyBub3QgYmUgaW5jbHVkZWQg aW4gTElOR1VBUyBhbmQgaGVuY2Ugd2lsbCBub3QgYmUgZGlzdHJpYnV0ZWQuCi11cGRhdGVf cG9fZmlsZXMoKSB7Ci0gICMgRGlyZWN0b3J5IGNvbnRhaW5pbmcgcHJpbWFyeSAucG8gZmls ZXMuCi0gICMgT3ZlcndyaXRlIHRoZW0gb25seSB3aGVuIHdlJ3JlIHN1cmUgYSAucG8gZmls ZSBpcyBuZXcuCi0gIHBvX2Rpcj0kMQotICBkb21haW49JDIKLQotICAjIE1pcnJvciAqLnBv IGZpbGVzIGludG8gdGhpcyBkaXIuCi0gICMgVXN1YWxseSBjb250YWlucyAqLnMxIGNoZWNr c3VtIGZpbGVzLgotICByZWZfcG9fZGlyPSIkcG9fZGlyLy5yZWZlcmVuY2UiCi0KLSAgdGVz dCAtZCAkcmVmX3BvX2RpciB8fCBta2RpciAkcmVmX3BvX2RpciB8fCByZXR1cm4KLSAgZG93 bmxvYWRfcG9fZmlsZXMgJHJlZl9wb19kaXIgJGRvbWFpbiBcCi0gICAgJiYgbHMgIiRyZWZf cG9fZGlyIi8qLnBvIDI+L2Rldi9udWxsIHwKLSAgICAgIHNlZCAnc3wuKi98fDsgc3xcLnBv JHx8JyA+ICIkcG9fZGlyL0xJTkdVQVMiIHx8IHJldHVybgotCi0gIGxhbmdzPSQoY2QgJHJl Zl9wb19kaXIgJiYgZWNobyAqLnBvIHwgc2VkICdzL1wucG8vL2cnKQotICB0ZXN0ICIkbGFu Z3MiID0gJyonICYmIGxhbmdzPXgKLSAgZm9yIHBvIGluICRsYW5nczsgZG8KLSAgICBjYXNl ICRwbyBpbiB4KSBjb250aW51ZTs7IGVzYWMKLSAgICBuZXdfcG89IiRyZWZfcG9fZGlyLyRw by5wbyIKLSAgICBja3N1bV9maWxlPSIkcmVmX3BvX2Rpci8kcG8uczEiCi0gICAgaWYgISB0 ZXN0IC1mICIkY2tzdW1fZmlsZSIgfHwKLSAgICAgICAgISB0ZXN0IC1mICIkcG9fZGlyLyRw by5wbyIgfHwKLSAgICAgICAgISAkU0hBMVNVTSAtYyAiJGNrc3VtX2ZpbGUiIDwgIiRuZXdf cG8iID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgIGVjaG8gIiRtZTogdXBkYXRlZCAk cG9fZGlyLyRwby5wby4uLiIKLSAgICAgIGNwICIkbmV3X3BvIiAiJHBvX2Rpci8kcG8ucG8i IFwKLSAgICAgICAgICAmJiAkU0hBMVNVTSA8ICIkbmV3X3BvIiA+ICIkY2tzdW1fZmlsZSIg fHwgcmV0dXJuCi0gICAgZmkKLSAgZG9uZQotfQotCi1jYXNlICRTS0lQX1BPIGluCi0nJykK LSAgaWYgdGVzdCAtZCBwbzsgdGhlbgotICAgIHVwZGF0ZV9wb19maWxlcyBwbyAkcGFja2Fn ZSB8fCBleGl0Ci0gIGZpCi0KLSAgaWYgdGVzdCAtZCBydW50aW1lLXBvOyB0aGVuCi0gICAg dXBkYXRlX3BvX2ZpbGVzIHJ1bnRpbWUtcG8gJHBhY2thZ2UtcnVudGltZSB8fCBleGl0Ci0g IGZpOzsKLWVzYWMKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib290c3RyYXBf cG9zdF9wdWxsX2hvb2sgXAotICB8fCBkaWUgImJvb3RzdHJhcF9wb3N0X3B1bGxfaG9vayBm YWlsZWQiCi0KLSMgRG9uJ3QgcHJvY2VlZCBpZiB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBz dWJtb2R1bGVzLiAgSW4gcGFydGljdWxhciwKLSMgYXV0b2dlbi5zaCB3aWxsIHJlbW92ZSBk YW5nbGluZyBsaW5rcywgd2hpY2ggbWlnaHQgYmUgbGlua3MgaW50bwotIyB1bmluaXRpYWxp emVkIHN1Ym1vZHVsZXMuCi0jIEJ1dCBpdCdzIE9LIGlmIHRoZSAnZ251bGliJyBzdWJtb2R1 bGUgaXMgdW5pbml0aWFsaXplZCwgYXMgbG9uZyBhcwotIyBHTlVMSUJfU1JDRElSIGlzIHNl dC4KLWlmICR1c2VfZ2l0OyB0aGVuCi0gICMgVW5pbml0aWFsaXplZCBzdWJtb2R1bGVzIGFy ZSBsaXN0ZWQgd2l0aCBhbiBpbml0aWFsIGRhc2guCi0gIHVuaW5pdGlhbGl6ZWQ9YGdpdCBz dWJtb2R1bGUgfCBncmVwICdeLScgfCBhd2sgJ3sgcHJpbnQgJDIgfSdgCi0gIGlmIHRlc3Qg LW4gIiRHTlVMSUJfU1JDRElSIjsgdGhlbgotICAgIHVuaW5pdGlhbGl6ZWQ9YGVjaG8gIiR1 bmluaXRpYWxpemVkIiB8IGdyZXAgLXYgJ15nbnVsaWIkJ2AKLSAgZmkKLSAgaWYgdGVzdCAt biAiJHVuaW5pdGlhbGl6ZWQiOyB0aGVuCi0gICAgZGllICJTb21lIGdpdCBzdWJtb2R1bGVz IGFyZSBub3QgaW5pdGlhbGl6ZWQ6ICJgZWNobyAiJHVuaW5pdGlhbGl6ZWQiIHwgdHIgJ1xu JyAnLCcgfCBzZWQgLWUgJ3N8LCR8LnwnYCIgRWl0aGVyIHVzZSBvcHRpb24gJy0tbm8tZ2l0 Jywgb3IgcnVuICdnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQnIGFuZCBib290c3RyYXAg YWdhaW4uIgotICBmaQotZmkKLQotZWNobyAiJDA6IGRvbmUuICBOb3cgeW91IGNhbiBydW4g Jy4vYXV0b2dlbi5zaCcuIgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBMb2Nh bCBWYXJpYWJsZXM6Ci0jIGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGlt ZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1l LXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC10aW1l LXpvbmU6ICJVVEMwIgotIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCi0jIEVuZDoKZGlm ZiAtLWdpdCBhL2Jvb3RzdHJhcCBiL2Jvb3RzdHJhcAppbmRleCBjZjhkMDA3Li5iMWE0Y2Mx IDEwMDc1NQotLS0gYS9ib290c3RyYXAKKysrIGIvYm9vdHN0cmFwCkBAIC0xLDYgKzEsMTAg QEAKICMhIC9iaW4vc2gKKyMgRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZ IQorCiAjIEJvb3RzdHJhcCB0aGlzIHBhY2thZ2UgZnJvbSBjaGVja2VkLW91dCBzb3VyY2Vz LgogCitzY3JpcHR2ZXJzaW9uPTIwMjItMTItMjcuMDc7ICMgVVRDCisKICMgQ29weXJpZ2h0 IChDKSAyMDAzLTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CkBAIC0yNiwxMyArMzAsMTI5NiBAQAogCiAjIFBsZWFzZSByZXBvcnQg YnVncyBvciBwcm9wb3NlIHBhdGNoZXMgdG8gYnVnLWdudWxpYkBnbnUub3JnLgogCi1zY3Jp cHR2ZXJzaW9uPTIwMjItMDctMjkuMjM7ICMgVVRDCi0KIG1lPSIkMCIKIG1lZGlyPWBkaXJu YW1lICIkbWUiYAogCiAjIFJlYWQgdGhlIGZ1bmN0aW9uIGxpYnJhcnkgYW5kIHRoZSBjb25m aWd1cmF0aW9uLgotLiAiJG1lZGlyIi9ib290c3RyYXAtZnVuY2xpYi5zaAorCisjIEEgbGli cmFyeSBvZiBzaGVsbCBmdW5jdGlvbnMgZm9yIGF1dG9wdWxsLnNoLCBhdXRvZ2VuLnNoLCBh bmQgYm9vdHN0cmFwLgorCitzY3JpcHRsaWJ2ZXJzaW9uPTIwMjItMTItMjcuMTY7ICMgVVRD CisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICBUaGUg Y2Fub25pY2FsIHZlcnNpb24gb2YgdGhpcworIyBzY3JpcHQgaXMgbWFpbnRhaW5lZCBhcyB0 b3AvYm9vdHN0cmFwLWZ1bmNsaWIuc2ggaW4gZ251bGliLiAgSG93ZXZlciwKKyMgdG8gYmUg dXNlZnVsIHRvIHlvdXIgcGFja2FnZSwgeW91IHNob3VsZCBwbGFjZSBhIGNvcHkgb2YgaXQg dW5kZXIKKyMgdmVyc2lvbiBjb250cm9sIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9m IHlvdXIgcGFja2FnZS4gIFRoZQorIyBpbnRlbnQgaXMgdGhhdCBhbGwgY3VzdG9taXphdGlv biBjYW4gYmUgZG9uZSB3aXRoIGEgYm9vdHN0cmFwLmNvbmYKKyMgZmlsZSBhbHNvIG1haW50 YWluZWQgaW4geW91ciB2ZXJzaW9uIGNvbnRyb2w7IGdudWxpYiBjb21lcyB3aXRoIGEKKyMg dGVtcGxhdGUgYnVpbGQtYXV4L2Jvb3RzdHJhcC5jb25mIHRvIGdldCB5b3Ugc3RhcnRlZC4K Kworbmw9JworJworCisjIEVuc3VyZSBmaWxlIG5hbWVzIGFyZSBzb3J0ZWQgY29uc2lzdGVu dGx5IGFjcm9zcyBwbGF0Zm9ybXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorCisjIEhv bm9yICRQRVJMLCBidXQgd29yayBldmVuIGlmIHRoZXJlIGlzIG5vbmUuCitQRVJMPSIke1BF UkwtcGVybH0iCisKK2RlZmF1bHRfZ251bGliX3VybD1odHRwczovL2dpdC5zYXZhbm5haC5n bnUub3JnL2dpdC9nbnVsaWIuZ2l0CisKKyMgQ29weXJpZ2h0IHllYXIsIGZvciB0aGUgLS12 ZXJzaW9uIG91dHB1dC4KK2NvcHlyaWdodF95ZWFyPWBlY2hvICIkc2NyaXB0bGlidmVyc2lv biIgfCBzZWQgLWUgJ3MvW14wLTldLiovLydgCitjb3B5cmlnaHQ9IkNvcHlyaWdodCAoQykg JHtjb3B5cmlnaHRfeWVhcn0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitMaWNl bnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHBzOi8vZ251Lm9y Zy9saWNlbnNlcy9ncGwuaHRtbD4uCitUaGlzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBhcmUg ZnJlZSB0byBjaGFuZ2UgYW5kIHJlZGlzdHJpYnV0ZSBpdC4KK1RoZXJlIGlzIE5PIFdBUlJB TlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIgorCisjIHdhcm5mXyBGT1JN QVQtU1RSSU5HIEFSRzEuLi4KK3dhcm5mXyAoKQoreworICB3YXJuZl9mb3JtYXRfPSQxCisg IHNoaWZ0CisgIG5sPScKKycKKyAgY2FzZSAkKiBpbgorICAgICokbmwqKSBtZV89JChwcmlu dGYgIiRtZSJ8dHIgIiRubHwiICc/PycpCisgICAgICAgcHJpbnRmICIkd2FybmZfZm9ybWF0 XyIgIiRAIiB8IHNlZCAic3xefCRtZV86IHwiIDs7CisgICAgKikgcHJpbnRmICIkbWU6ICR3 YXJuZl9mb3JtYXRfIiAiJEAiIDs7CisgIGVzYWMgPiYyCit9CisKKyMgd2Fybl8gV09SRDEu Li4KK3dhcm5fICgpCit7CisgICMgSWYgSUZTIGRvZXMgbm90IHN0YXJ0IHdpdGggJyAnLCBz ZXQgaXQgYW5kIGVtaXQgdGhlIHdhcm5pbmcgaW4gYSBzdWJzaGVsbC4KKyAgY2FzZSAkSUZT IGluCisgICAgJyAnKikgd2FybmZfICclc1xuJyAiJCoiOzsKKyAgICAqKSAgICAoSUZTPScg Jzsgd2Fybl8gIiRAIik7OworICBlc2FjCit9CisKKyMgZGllIFdPUkQxLi4uCitkaWUoKSB7 IHdhcm5fICIkQCI7IGV4aXQgMTsgfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSBDb25maWd1cmF0aW9uLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor IyBEaXJlY3RvcnkgdGhhdCBjb250YWlucyBwYWNrYWdlLXNwZWNpZmljIGdudWxpYiBtb2R1 bGVzIGFuZC9vciBvdmVycmlkZXMuCitsb2NhbF9nbF9kaXI9Z2wKKworIyBOYW1lIG9mIHRo ZSBNYWtlZmlsZS5hbQorIyBYWFggTm90IHVzZWQuCitnbnVsaWJfbWs9Z251bGliLm1rCisK KyMgTGlzdCBvZiBnbnVsaWIgbW9kdWxlcyBuZWVkZWQuCitnbnVsaWJfbW9kdWxlcz0KKwor IyBBbnkgZ251bGliIGZpbGVzIG5lZWRlZCB0aGF0IGFyZSBub3QgaW4gbW9kdWxlcy4KK2du dWxpYl9maWxlcz0KKworIyBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCB1bnJl Y29nbml6ZWQgb3B0aW9uLiAgUmV0dXJucyAwIGlmCisjIHRoZSBvcHRpb24gaW4gJDEgaGFz IGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbi4gIFJldHVybnMgMSBpZgorIyB0aGUg b3B0aW9uIGhhcyBub3QgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGZ1bmN0aW9uLiAgT3ZlcnJp ZGUgaXQgdmlhCisjIHlvdXIgb3duIGRlZmluaXRpb24gaW4gYm9vdHN0cmFwLmNvbmYKK2Jv b3RzdHJhcF9vcHRpb25faG9vaygpIHsgcmV0dXJuIDE7IH0KKworIyBBIGZ1bmN0aW9uIHRv IGJlIGNhbGxlZCBpbiBvcmRlciB0byBwcmludCB0aGUgLS1oZWxwIGluZm9ybWF0aW9uCisj IGNvcnJlc3BvbmRpbmcgdG8gdXNlci1kZWZpbmVkIGNvbW1hbmQtbGluZSBvcHRpb25zLgor Ym9vdHN0cmFwX3ByaW50X29wdGlvbl91c2FnZV9ob29rKCkgeyA6OyB9CisKKyMgQSBmdW5j dGlvbiB0byBiZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBhdXRvcHVsbC5zaC4KKyMgT3ZlcnJp ZGUgaXQgdmlhIHlvdXIgb3duIGRlZmluaXRpb24gaW4gYm9vdHN0cmFwLmNvbmYuCitib290 c3RyYXBfcG9zdF9wdWxsX2hvb2soKSB7IDo7IH0KKworIyBBIGZ1bmN0aW9uIHRvIGJlIGNh bGxlZCByaWdodCBhZnRlciBnbnVsaWItdG9vbCBpcyBydW4uCisjIE92ZXJyaWRlIGl0IHZp YSB5b3VyIG93biBkZWZpbml0aW9uIGluIGJvb3RzdHJhcC5jb25mLgorYm9vdHN0cmFwX3Bv c3RfaW1wb3J0X2hvb2soKSB7IDo7IH0KKworIyBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBh ZnRlciBldmVyeXRoaW5nIGVsc2UgaW4gdGhpcyBzY3JpcHQuCisjIE92ZXJyaWRlIGl0IHZp YSB5b3VyIG93biBkZWZpbml0aW9uIGluIGJvb3RzdHJhcC5jb25mLgorYm9vdHN0cmFwX2Vw aWxvZ3VlKCkgeyA6OyB9CisKKyMgVGhlIGNvbW1hbmQgdG8gZG93bmxvYWQgYWxsIC5wbyBm aWxlcyBmb3IgYSBzcGVjaWZpZWQgZG9tYWluIGludG8gYQorIyBzcGVjaWZpZWQgZGlyZWN0 b3J5LiAgRmlsbCBpbiB0aGUgZmlyc3QgJXMgd2l0aCB0aGUgZGVzdGluYXRpb24KKyMgZGly ZWN0b3J5IGFuZCB0aGUgc2Vjb25kIHdpdGggdGhlIGRvbWFpbiBuYW1lLgorcG9fZG93bmxv YWRfY29tbWFuZF9mb3JtYXQ9XAorIndnZXQgLS1taXJyb3IgLS1sZXZlbD0xIC1uZCAtbnYg LUEucG8gLVAgJyVzJyBcCisgaHR0cHM6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL2xhdGVz dC8lcy8iCisKKyMgUHJlZmVyIGEgbm9uLWVtcHR5IHRhcm5hbWUgKDR0aCBhcmd1bWVudCBv ZiBBQ19JTklUIGlmIGdpdmVuKSwgZWxzZQorIyBmYWxsIGJhY2sgdG8gdGhlIHBhY2thZ2Ug bmFtZSAoMXN0IGFyZ3VtZW50IHdpdGggbXVuZ2luZykuCitleHRyYWN0X3BhY2thZ2VfbmFt ZT0nCisgIC9eQUNfSU5JVChcWyoveworICAgICBzLy8vCisgICAgIC9eW14sXSosW14sXSos W14sXSosWyBbXSpcKFteXVsgLCldXCkveworICAgICAgIHMvL1wxLworICAgICAgIHMvW10s KV0uKi8vCisgICAgICAgcAorICAgICAgIHEKKyAgICAgfQorICAgICBzL1tdLCldLiovLwor ICAgICBzL15HTlUgLy8KKyAgICAgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNk ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8KKyAgICAgcy9bXmFiY2RlZmdoaWprbG1ub3BxcnN0 dXZ3eHl6MDEyMzQ1Njc4OV9dLy0vZworICAgICBwCisgIH0KKycKK3BhY2thZ2U9JCgke0FV VE9DT05GOi1hdXRvY29uZn0gLS10cmFjZSBBQ19JTklUOlwkNCBjb25maWd1cmUuYWMgMj4v ZGV2L251bGwpCitpZiB0ZXN0IC16ICIkcGFja2FnZSI7IHRoZW4KKyAgcGFja2FnZT0kKHNl ZCAtbiAiJGV4dHJhY3RfcGFja2FnZV9uYW1lIiBjb25maWd1cmUuYWMpIFwKKyAgICAgIHx8 IGRpZSAnY2Fubm90IGZpbmQgcGFja2FnZSBuYW1lIGluIGNvbmZpZ3VyZS5hYycKK2ZpCitn bnVsaWJfbmFtZT1saWIkcGFja2FnZQorCitidWlsZF9hdXg9YnVpbGQtYXV4Citzb3VyY2Vf YmFzZT1saWIKK200X2Jhc2U9bTQKK2RvY19iYXNlPWRvYwordGVzdHNfYmFzZT10ZXN0cwor Z251bGliX2V4dHJhX2ZpbGVzPSIKKyAgICAgICAgYnVpbGQtYXV4L2luc3RhbGwtc2gKKyAg ICAgICAgYnVpbGQtYXV4L21kYXRlLXNoCisgICAgICAgIGJ1aWxkLWF1eC90ZXhpbmZvLnRl eAorICAgICAgICBidWlsZC1hdXgvZGVwY29tcAorICAgICAgICBidWlsZC1hdXgvY29uZmln Lmd1ZXNzCisgICAgICAgIGJ1aWxkLWF1eC9jb25maWcuc3ViCisgICAgICAgIGRvYy9JTlNU QUxMCisiCisKKyMgQWRkaXRpb25hbCBnbnVsaWItdG9vbCBvcHRpb25zIHRvIHVzZS4gIFVz ZSAiXG5ld2xpbmUiIHRvIGJyZWFrIGxpbmVzLgorZ251bGliX3Rvb2xfb3B0aW9uX2V4dHJh cz0KKworIyBPdGhlciBsb2NhbGUgY2F0ZWdvcmllcyB0aGF0IG5lZWQgbWVzc2FnZSBjYXRh bG9ncy4KK0VYVFJBX0xPQ0FMRV9DQVRFR09SSUVTPQorCisjIEFkZGl0aW9uYWwgeGdldHRl eHQgb3B0aW9ucyB0byB1c2UuICBVc2UgIlxcXG5ld2xpbmUiIHRvIGJyZWFrIGxpbmVzLgor WEdFVFRFWFRfT1BUSU9OUz0nXFxcCisgLS1mbGFnPV86MTpwYXNzLWMtZm9ybWF0XFxcCisg LS1mbGFnPU5fOjE6cGFzcy1jLWZvcm1hdFxcXAorIC0tZmxhZz1lcnJvcjozOmMtZm9ybWF0 IC0tZmxhZz1lcnJvcl9hdF9saW5lOjU6Yy1mb3JtYXRcXFwKKycKKworIyBQYWNrYWdlIGJ1 ZyByZXBvcnQgYWRkcmVzcyBhbmQgY29weXJpZ2h0IGhvbGRlciBmb3IgZ2V0dGV4dCBmaWxl cworQ09QWVJJR0hUX0hPTERFUj0nRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuJwor TVNHSURfQlVHU19BRERSRVNTPWJ1Zy0kcGFja2FnZUBnbnUub3JnCisKKyMgRmlsZXMgd2Ug ZG9uJ3Qgd2FudCB0byBpbXBvcnQuCisjIFhYWCBOb3QgdXNlZC4KK2V4Y2x1ZGVkX2ZpbGVz PQorCisjIEZpbGUgdGhhdCBzaG91bGQgZXhpc3QgaW4gdGhlIHRvcCBkaXJlY3Rvcnkgb2Yg YSBjaGVja2VkIG91dCBoaWVyYXJjaHksCisjIGJ1dCBub3QgaW4gYSBkaXN0cmlidXRpb24g dGFyYmFsbC4KK2NoZWNrb3V0X29ubHlfZmlsZT1SRUFETUUtaGFja2luZworCisjIFNldCB0 aGlzIHRvICcuY3ZzaWdub3JlIC5naXRpZ25vcmUnIGluIGJvb3RzdHJhcC5jb25mIGlmIHlv dSB3YW50CisjIHRob3NlIGZpbGVzIHRvIGJlIGdlbmVyYXRlZCBpbiBkaXJlY3RvcmllcyBs aWtlIGxpYi8sIG00LywgYW5kIHBvLy4KKyMgT3Igc2V0IGl0IHRvICdhdXRvJyB0byBtYWtl IHRoaXMgc2NyaXB0IHNlbGVjdCB3aGljaCB0byB1c2UgYmFzZWQKKyMgb24gd2hpY2ggdmVy c2lvbiBjb250cm9sIHN5c3RlbSAoaWYgYW55KSBpcyB1c2VkIGluIHRoZSBzb3VyY2UgZGly ZWN0b3J5LgordmNfaWdub3JlPWF1dG8KKworIyBTZXQgdGhpcyB0byB0cnVlIGluIGJvb3Rz dHJhcC5jb25mIHRvIGVuYWJsZSAtLWJvb3RzdHJhcC1zeW5jIGJ5CisjIGRlZmF1bHQuCiti b290c3RyYXBfc3luYz1mYWxzZQorCisjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbmZpZ3Vy YXRpb24sIGlmIG5lY2Vzc2FyeS4KKyMgTWFrZSBzdXJlIHRoYXQgYm9vdHN0cmFwLmNvbmYg aXMgc291cmNlZCBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorIyBpZiB3ZSB3ZXJlIGlu dm9rZWQgYXMgInNoIGJvb3RzdHJhcCIuCitjb25mZmlsZT1gZGlybmFtZSAiJG1lImAvYm9v dHN0cmFwLmNvbmYKK3Rlc3QgLXIgIiRjb25mZmlsZSIgJiYgLiAiJGNvbmZmaWxlIgorCisj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnVpbGQtdGltZSBwcmVyZXF1aXNpdGVzIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2hlY2tfZXhpc3RzKCkgeworICBpZiB0ZXN0 ICIkMSIgPSAiLS12ZXJib3NlIjsgdGhlbgorICAgICgkMiAtLXZlcnNpb24gPC9kZXYvbnVs bCkgPi9kZXYvbnVsbCAyPiYxCisgICAgaWYgdGVzdCAkPyAtZ2UgMTI2OyB0aGVuCisgICAg ICAjIElmIG5vdCBmb3VuZCwgcnVuIHdpdGggZGlhZ25vc3RpY3MgYXMgb25lIG1heSBiZQor ICAgICAgIyBwcmVzZW50ZWQgd2l0aCBlbnYgdmFyaWFibGVzIHRvIHNldCB0byBmaW5kIHRo ZSByaWdodCB2ZXJzaW9uCisgICAgICAoJDIgLS12ZXJzaW9uIDwvZGV2L251bGwpCisgICAg ZmkKKyAgZWxzZQorICAgICgkMSAtLXZlcnNpb24gPC9kZXYvbnVsbCkgPi9kZXYvbnVsbCAy PiYxCisgIGZpCisKKyAgdGVzdCAkPyAtbHQgMTI2Cit9CisKKyMgTm90ZSB0aGlzIGRldmlh dGVzIGZyb20gdGhlIHZlcnNpb24gY29tcGFyaXNvbiBpbiBhdXRvbWFrZQorIyBpbiB0aGF0 IGl0IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5kIHRyZWF0cyAxLjQuNGEgPCAxLjQtcDNhCisj IGJ1dCB0aGlzIHNob3VsZCBzdWZmaWNlIGFzIHdlIHdvbid0IGJlIHNwZWNpZnlpbmcgb2xk CisjIHZlcnNpb24gZm9ybWF0cyBvciByZWR1bmRhbnQgdHJhaWxpbmcgLjAgaW4gYm9vdHN0 cmFwLmNvbmYuCisjIElmIHdlIGRpZCB3YW50IGZ1bGwgY29tcGF0aWJpbGl0eSB0aGVuIHdl IHNob3VsZCBwcm9iYWJseQorIyB1c2UgbTRfdmVyc2lvbl9jb21wYXJlIGZyb20gYXV0b2Nv bmYuCitzb3J0X3ZlcigpIHsgIyBzb3J0IC1WIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxl CisgIHZlcjE9IiQxIgorICB2ZXIyPSIkMiIKKworICAjIHNwbGl0IG9uICcuJyBhbmQgY29t cGFyZSBlYWNoIGNvbXBvbmVudAorICBpPTEKKyAgd2hpbGUgOiA7IGRvCisgICAgcDE9JChl Y2hvICIkdmVyMSIgfCBjdXQgLWQuIC1mJGkpCisgICAgcDI9JChlY2hvICIkdmVyMiIgfCBj dXQgLWQuIC1mJGkpCisgICAgaWYgWyAhICIkcDEiIF07IHRoZW4KKyAgICAgIGVjaG8gIiQx ICQyIgorICAgICAgYnJlYWsKKyAgICBlbGlmIFsgISAiJHAyIiBdOyB0aGVuCisgICAgICBl Y2hvICIkMiAkMSIKKyAgICAgIGJyZWFrCisgICAgZWxpZiBbICEgIiRwMSIgPSAiJHAyIiBd OyB0aGVuCisgICAgICBpZiBbICIkcDEiIC1ndCAiJHAyIiBdIDI+L2Rldi9udWxsOyB0aGVu ICMgbnVtZXJpYyBjb21wYXJpc29uCisgICAgICAgIGVjaG8gIiQyICQxIgorICAgICAgZWxp ZiBbICIkcDIiIC1ndCAiJHAxIiBdIDI+L2Rldi9udWxsOyB0aGVuICMgbnVtZXJpYyBjb21w YXJpc29uCisgICAgICAgIGVjaG8gIiQxICQyIgorICAgICAgZWxzZSAjIG51bWVyaWMsIHRo ZW4gbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uCisgICAgICAgIGxwPSQocHJpbnRmICIlc1xu JXNcbiIgIiRwMSIgIiRwMiIgfCBMQU5HPUMgc29ydCAtbiB8IHRhaWwgLW4xKQorICAgICAg ICBpZiBbICIkbHAiID0gIiRwMiIgXTsgdGhlbgorICAgICAgICAgIGVjaG8gIiQxICQyIgor ICAgICAgICBlbHNlCisgICAgICAgICAgZWNobyAiJDIgJDEiCisgICAgICAgIGZpCisgICAg ICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICAgIGk9JCgoJGkrMSkpCisgIGRvbmUKK30K KworZ2V0X3ZlcnNpb25fc2VkPScKKyMgTW92ZSB2ZXJzaW9uIHRvIHN0YXJ0IG9mIGxpbmUu CitzLy4qW3YgXVwoWzAtOV1cKS9cMS8KKworIyBTa2lwIGxpbmVzIHRoYXQgZG8gbm90IHN0 YXJ0IHdpdGggdmVyc2lvbi4KKy9eWzAtOV0vIWQKKworIyBSZW1vdmUgY2hhcmFjdGVycyBh ZnRlciB0aGUgdmVyc2lvbi4KK3MvW14uYS16MC05LV0uKi8vCisKKyMgVGhlIGZpcnN0IGNv bXBvbmVudCBtdXN0IGJlIGRpZ2l0cyBvbmx5Lgorcy9eXChbMC05XSpcKVthLXotXS4qL1wx LworCisjdGhlIGZvbGxvd2luZyBlc3NlbnRpYWxseSBkb2VzIHMvNS4wMDUvNS41Lworcy9c LjAqXChbMS05XVwpLy5cMS9nCitwCitxJworCitnZXRfdmVyc2lvbigpIHsKKyAgYXBwPSQx CisKKyAgJGFwcCAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxIHx8IHsgJGFwcCAtLXZlcnNp b247IHJldHVybiAxOyB9CisKKyAgJGFwcCAtLXZlcnNpb24gMj4mMSB8IHNlZCAtbiAiJGdl dF92ZXJzaW9uX3NlZCIKK30KKworY2hlY2tfdmVyc2lvbnMoKSB7CisgIHJldD0wCisKKyAg d2hpbGUgcmVhZCBhcHAgcmVxX3ZlcjsgZG8KKyAgICAjIFdlIG9ubHkgbmVlZCBsaWJ0b29s aXplIGZyb20gdGhlIGxpYnRvb2wgcGFja2FnZS4KKyAgICBpZiB0ZXN0ICIkYXBwIiA9IGxp YnRvb2w7IHRoZW4KKyAgICAgIGFwcD1saWJ0b29saXplCisgICAgZmkKKyAgICAjIEV4ZW1w dCBnaXQgaWYgZ2l0IGlzIG5vdCBuZWVkZWQuCisgICAgaWYgdGVzdCAiJGFwcCIgPSBnaXQ7 IHRoZW4KKyAgICAgICRjaGVja19naXQgfHwgY29udGludWUKKyAgICBmaQorICAgICMgSG9u b3IgJEFQUCB2YXJpYWJsZXMgKCRUQVIsICRBVVRPQ09ORiwgZXRjLikKKyAgICBhcHB2YXI9 JChlY2hvICRhcHAgfCBMQ19BTEw9QyB0ciAnW2Etel0tJyAnW0EtWl1fJykKKyAgICB0ZXN0 ICIkYXBwdmFyIiA9IFRBUiAmJiBhcHB2YXI9QU1UQVIKKyAgICBjYXNlICRhcHB2YXIgaW4K KyAgICAgICAgR1pJUCkgOzsgIyBEbyBub3QgdXNlICRHWklQOiAgaXQgY29udGFpbnMgZ3pp cCBvcHRpb25zLgorICAgICAgICBQRVJMOjoqKSA7OyAjIEtlZXAgcGVybCBtb2R1bGVzIGFz LWlzCisgICAgICAgICopIGV2YWwgImFwcD1cJHskYXBwdmFyLSRhcHB9IiA7OworICAgIGVz YWMKKworICAgICMgSGFuZGxlIHRoZSBzdGlsbC1leHBlcmltZW50YWwgQXV0b21ha2UtTkcg cHJvZ3JhbXMgc3BlY2lhbGx5LgorICAgICMgVGhleSByZW1haW4gbmFtZWQgYXMgdGhlIG1h aW5zdHJlYW0gQXV0b21ha2UgcHJvZ3JhbXMgKCJhdXRvbWFrZSIsCisgICAgIyBhbmQgImFj bG9jYWwiKSB0byBhdm9pZCBncmF0dWl0b3VzIGluY29tcGF0aWJpbGl0aWVzIHdpdGgKKyAg ICAjIHByZS1leGlzdGluZyB1c2FnZXMgKGJ5LCBzYXksIGF1dG9yZWNvbmYsIG9yIGN1c3Rv bSBhdXRvZ2VuLnNoCisgICAgIyBzY3JpcHRzKSwgYnV0IGNvcnJlY3RseSBpZGVudGlmeSB0 aGVtc2VsdmVzIChhcyBiZWluZyBwYXJ0IG9mCisgICAgIyAiR05VIGF1dG9tYWtlLW5nIikg d2hlbiBhc2tlZCB0aGVpciB2ZXJzaW9uLgorICAgIGNhc2UgJGFwcCBpbgorICAgICAgYXV0 b21ha2Utbmd8YWNsb2NhbC1uZykKKyAgICAgICAgYXBwPSR7YXBwJS1uZ30KKyAgICAgICAg KCRhcHAgLS12ZXJzaW9uIHwgZ3JlcCAnKEdOVSBhdXRvbWFrZS1uZyknKSA+L2Rldi9udWxs IDI+JjEgfHwgeworICAgICAgICAgIHdhcm5fICJFcnJvcjogJyRhcHAnIG5vdCBmb3VuZCBv ciBub3QgZnJvbSBBdXRvbWFrZS1ORyIKKyAgICAgICAgICByZXQ9MQorICAgICAgICAgIGNv bnRpbnVlCisgICAgICAgIH0gOzsKKyAgICAgICMgQW5vdGhlciBjaGVjayBpcyBmb3IgcGVy bCBtb2R1bGVzLiAgVGhlc2UgY2FuIGJlIHdyaXR0ZW4gYXMKKyAgICAgICMgZS5nLiBwZXJs OjpYTUw6OlhQYXRoIGluIGNhc2Ugb2YgWE1MOjpYUGF0aCBtb2R1bGUsIGV0Yy4KKyAgICAg IHBlcmw6OiopCisgICAgICAgICMgRXh0cmFjdCBtb2R1bGUgbmFtZQorICAgICAgICBhcHA9 IiR7YXBwI3Blcmw6On0iCisgICAgICAgIGlmICEgJFBFUkwgLW0iJGFwcCIgLWUgJ2V4aXQg MCcgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgd2Fybl8gIkVycm9yOiBwZXJs IG1vZHVsZSAnJGFwcCcgbm90IGZvdW5kIgorICAgICAgICAgIHJldD0xCisgICAgICAgIGZp CisgICAgICAgIGNvbnRpbnVlCisgICAgICAgIDs7CisgICAgZXNhYworICAgIGlmIFsgIiRy ZXFfdmVyIiA9ICItIiBdOyB0aGVuCisgICAgICAjIE1lcmVseSByZXF1aXJlIGFwcCB0byBl eGlzdDsgbm90IGFsbCBwcmVyZXEgYXBwcyBhcmUgd2VsbC1iZWhhdmVkCisgICAgICAjIHNv IHdlIGhhdmUgdG8gcmVseSBvbiAkPyByYXRoZXIgdGhhbiBnZXRfdmVyc2lvbi4KKyAgICAg IGlmICEgY2hlY2tfZXhpc3RzIC0tdmVyYm9zZSAkYXBwOyB0aGVuCisgICAgICAgIHdhcm5f ICJFcnJvcjogJyRhcHAnIG5vdCBmb3VuZCIKKyAgICAgICAgcmV0PTEKKyAgICAgIGZpCisg ICAgZWxzZQorICAgICAgIyBSZXF1aXJlIGFwcCB0byBwcm9kdWNlIGEgbmV3IGVub3VnaCB2 ZXJzaW9uIHN0cmluZy4KKyAgICAgIGluc3RfdmVyPSQoZ2V0X3ZlcnNpb24gJGFwcCkKKyAg ICAgIGlmIFsgISAiJGluc3RfdmVyIiBdOyB0aGVuCisgICAgICAgIHdhcm5fICJFcnJvcjog JyRhcHAnIG5vdCBmb3VuZCIKKyAgICAgICAgcmV0PTEKKyAgICAgIGVsc2UKKyAgICAgICAg bGF0ZXN0X3Zlcj0kKHNvcnRfdmVyICRyZXFfdmVyICRpbnN0X3ZlciB8IGN1dCAtZCcgJyAt ZjIpCisgICAgICAgIGlmIFsgISAiJGxhdGVzdF92ZXIiID0gIiRpbnN0X3ZlciIgXTsgdGhl bgorICAgICAgICAgIHdhcm5mXyAnJXNcbicgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAiRXJyb3I6ICckYXBwJyB2ZXJzaW9uID09 ICRpbnN0X3ZlciBpcyB0b28gb2xkIiAgXAorICAgICAgICAgICAgICAiICAgICAgICckYXBw JyB2ZXJzaW9uID49ICRyZXFfdmVyIGlzIHJlcXVpcmVkIgorICAgICAgICAgIHJldD0xCisg ICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICByZXR1cm4gJHJldAor fQorCitwcmludF92ZXJzaW9ucygpIHsKKyAgZWNobyAiUHJvZ3JhbSAgICBNaW5fdmVyc2lv biIKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgcHJpbnRmICVzICIkYnVp bGRyZXEiCisgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICMgY2FuJ3QgZGVw ZW5kIG9uIGNvbHVtbiAtdAorfQorCisjIGNoZWNrX2J1aWxkX3ByZXJlcXVpc2l0ZXMgY2hl Y2tfZ2l0CitjaGVja19idWlsZF9wcmVyZXF1aXNpdGVzKCkKK3sKKyAgY2hlY2tfZ2l0PSIk MSIKKworICAjIGdudWxpYi10b29sIHJlcXVpcmVzIGF0IGxlYXN0IGF1dG9tYWtlIGFuZCBh dXRvY29uZi4KKyAgIyBJZiBlaXRoZXIgaXMgbm90IGxpc3RlZCwgYWRkIGl0ICh3aXRoIG1p bmltdW0gdmVyc2lvbikgYXMgYSBwcmVyZXF1aXNpdGUuCisgIGNhc2UgJGJ1aWxkcmVxIGlu CisgICAgKmF1dG9tYWtlKikgOzsKKyAgICAqKSBidWlsZHJlcT0iYXV0b21ha2UgMS45Cisk YnVpbGRyZXEiIDs7CisgIGVzYWMKKyAgY2FzZSAkYnVpbGRyZXEgaW4KKyAgICAqYXV0b2Nv bmYqKSA7OworICAgICopIGJ1aWxkcmVxPSJhdXRvY29uZiAyLjU5CiskYnVpbGRyZXEiIDs7 CisgIGVzYWMKKworICAjIFdoZW4gd2UgY2FuIGRlZHVjZSB0aGF0IGdudWxpYi10b29sIHdp bGwgcmVxdWlyZSBwYXRjaCwKKyAgIyBhbmQgd2hlbiBwYXRjaCBpcyBub3QgYWxyZWFkeSBs aXN0ZWQgYXMgYSBwcmVyZXF1aXNpdGUsIGFkZCBpdCwgdG9vLgorICBpZiB0ZXN0IC1kICIk bG9jYWxfZ2xfZGlyIiBcCisgICAgICYmICEgZmluZCAiJGxvY2FsX2dsX2RpciIgLW5hbWUg JyouZGlmZicgLWV4ZWMgZmFsc2Uge30gKzsgdGhlbgorICAgIGNhc2UgJGJ1aWxkcmVxIGlu CisgICAgICAqcGF0Y2gqKSA7OworICAgICAgKikgYnVpbGRyZXE9InBhdGNoIC0KKyRidWls ZHJlcSIgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgISBwcmludGYgJyVzJyAiJGJ1aWxk cmVxIiB8IGNoZWNrX3ZlcnNpb25zOyB0aGVuCisgICAgZWNobyA+JjIKKyAgICBpZiB0ZXN0 IC1mIFJFQURNRS1wcmVyZXE7IHRoZW4KKyAgICAgIGRpZSAiU2VlIFJFQURNRS1wcmVyZXEg Zm9yIGhvdyB0byBnZXQgdGhlIHByZXJlcXVpc2l0ZSBwcm9ncmFtcyIKKyAgICBlbHNlCisg ICAgICBkaWUgIlBsZWFzZSBpbnN0YWxsIHRoZSBwcmVyZXF1aXNpdGUgcHJvZ3JhbXMiCisg ICAgZmkKKyAgZmkKKworICAjIFdhcm4gdGhlIHVzZXIgaWYgYXV0b200dGUgYXBwZWFycyB0 byBiZSBicm9rZW47IHRoaXMgY2F1c2VzIGtub3duCisgICMgaXNzdWVzIHdpdGggYXQgbGVh c3QgZ2V0dGV4dCAwLjE4LjMuCisgIHByb2JlPSQoZWNobyAnbTRfcXVvdGUoW2hpXSknIHwg YXV0b200dGUgLWwgTTRzdWdhciAtdCAnbTRfcXVvdGU6JCUnIC0pCisgIGlmIHRlc3QgIngk cHJvYmUiICE9IHhoaTsgdGhlbgorICAgIHdhcm5fICJXQVJOSU5HOiB5b3VyIGF1dG9tNHRl IHdyYXBwZXIgZWF0cyBzdGRpbjsiCisgICAgd2Fybl8gImlmIGJvb3RzdHJhcCBmYWlscywg Y29uc2lkZXIgdXBncmFkaW5nIHlvdXIgYXV0b3Rvb2xzIgorICBmaQorfQorCisjIGZpbmRf dG9vbCBFTlZWQVIgTkFNRVMuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBT ZWFyY2ggZm9yIGEgcmVxdWlyZWQgcHJvZ3JhbS4gIFVzZSB0aGUgdmFsdWUgb2YgRU5WVkFS LCBpZiBzZXQsCisjIG90aGVyd2lzZSBmaW5kIHRoZSBmaXJzdCBvZiB0aGUgTkFNRVMgdGhh dCBjYW4gYmUgcnVuLgorIyBJZiBmb3VuZCwgc2V0IEVOVlZBUiB0byB0aGUgcHJvZ3JhbSBu YW1lLCBkaWUgb3RoZXJ3aXNlLgorIworIyBGSVhNRTogY29kZSBkdXBsaWNhdGlvbiwgc2Vl IGFsc28gZ251LXdlYi1kb2MtdXBkYXRlLgorZmluZF90b29sICgpCit7CisgIGZpbmRfdG9v bF9lbnZ2YXI9JDEKKyAgc2hpZnQKKyAgZmluZF90b29sX25hbWVzPSRACisgIGV2YWwgImZp bmRfdG9vbF9yZXM9XCQkZmluZF90b29sX2VudnZhciIKKyAgaWYgdGVzdCB4IiRmaW5kX3Rv b2xfcmVzIiA9IHg7IHRoZW4KKyAgICBmb3IgaTsgZG8KKyAgICAgIGlmIGNoZWNrX2V4aXN0 cyAkaTsgdGhlbgorICAgICAgICBmaW5kX3Rvb2xfcmVzPSRpCisgICAgICAgIGJyZWFrCisg ICAgICBmaQorICAgIGRvbmUKKyAgZmkKKyAgaWYgdGVzdCB4IiRmaW5kX3Rvb2xfcmVzIiA9 IHg7IHRoZW4KKyAgICB3YXJuXyAib25lIG9mIHRoZXNlIGlzIHJlcXVpcmVkOiAkZmluZF90 b29sX25hbWVzOyIKKyAgICBkaWUgICAiYWx0ZXJuYXRpdmVseSBzZXQgJGZpbmRfdG9vbF9l bnZ2YXIgdG8gYSBjb21wYXRpYmxlIHRvb2wiCisgIGZpCisgIGV2YWwgIiRmaW5kX3Rvb2xf ZW52dmFyPVwkZmluZF90b29sX3JlcyIKKyAgZXZhbCAiZXhwb3J0ICRmaW5kX3Rvb2xfZW52 dmFyIgorfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVwYXJpbmcgR05VTElCX1NS Q0RJUiBmb3IgdXNlLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBpcyBwYXJ0IG9m IGF1dG9wdWxsLnNoLCBidXQgYm9vdHN0cmFwIG5lZWRzIGl0IHRvbywgZm9yIHNlbGYtdXBn cmFkaW5nLgorCitjbGVhbnVwX2dudWxpYigpIHsKKyAgc3RhdHVzPSQ/CisgICMgWFhYIEl0 J3MgYSBiYWQgaWRlYSB0byBlcmFzZSB0aGUgc3VibW9kdWxlIGRpcmVjdG9yeSBpZiBpdCBj b250YWlucyBsb2NhbAorICAjICAgICBtb2RpZmljYXRpb25zLgorICBybSAtZnIgIiRnbnVs aWJfcGF0aCIKKyAgZXhpdCAkc3RhdHVzCit9CisKK2dpdF9tb2R1bGVzX2NvbmZpZyAoKSB7 CisgIHRlc3QgLWYgLmdpdG1vZHVsZXMgJiYgZ2l0IGNvbmZpZyAtLWZpbGUgLmdpdG1vZHVs ZXMgIiRAIgorfQorCitwcmVwYXJlX0dOVUxJQl9TUkNESVIgKCkKK3sKKyAgaWYgdGVzdCAt biAiJEdOVUxJQl9TUkNESVIiOyB0aGVuCisgICAgIyBVc2UgR05VTElCX1NSQ0RJUiBkaXJl Y3RseS4KKyAgICAjIFdlIGFscmVhZHkgY2hlY2tlZCB0aGF0ICRHTlVMSUJfU1JDRElSIHJl ZmVyZW5jZXMgYSBkaXJlY3RvcnkuCisgICAgIyBWZXJpZnkgdGhhdCBpdCBjb250YWlucyBh IGdudWxpYiBjaGVja291dC4KKyAgICB0ZXN0IC1mICIkR05VTElCX1NSQ0RJUi9nbnVsaWIt dG9vbCIgXAorICAgICAgfHwgZGllICJFcnJvcjogLS1nbnVsaWItc3JjZGlyIG9yIFwkR05V TElCX1NSQ0RJUiBpcyBzcGVjaWZpZWQsIGJ1dCBkb2VzIG5vdCBjb250YWluIGdudWxpYi10 b29sIgorICBlbGlmICR1c2VfZ2l0OyB0aGVuCisgICAgZ251bGliX3BhdGg9JChnaXRfbW9k dWxlc19jb25maWcgc3VibW9kdWxlLmdudWxpYi5wYXRoKQorICAgIHRlc3QgLXogIiRnbnVs aWJfcGF0aCIgJiYgZ251bGliX3BhdGg9Z251bGliCisKKyAgICAjIEdldCBnbnVsaWIgZmls ZXMuICBQb3B1bGF0ZSAkZ251bGliX3BhdGgsIHBvc3NpYmx5IHVwZGF0aW5nIGEKKyAgICAj IHN1Ym1vZHVsZSwgZm9yIHVzZSBpbiB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0LgorCisgICAg aWYgdGVzdCAtbiAiJEdOVUxJQl9SRUZESVIiICYmIHRlc3QgLWQgIiRHTlVMSUJfUkVGRElS Ii8uZ2l0IFwKKyAgICAgICAmJiBnaXRfbW9kdWxlc19jb25maWcgc3VibW9kdWxlLmdudWxp Yi51cmwgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBVc2UgR05VTElCX1JFRkRJUiBhcyBh IHJlZmVyZW5jZS4KKyAgICAgIGVjaG8gIiQwOiBnZXR0aW5nIGdudWxpYiBmaWxlcy4uLiIK KyAgICAgIGlmIGdpdCBzdWJtb2R1bGUgLWh8Z3JlcCAtLSAtLXJlZmVyZW5jZSA+IC9kZXYv bnVsbDsgdGhlbgorICAgICAgICAjIFByZWZlciB0aGUgb25lLWxpbmVyIGF2YWlsYWJsZSBp biBnaXQgMS42LjQgb3IgbmV3ZXIuCisgICAgICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0t aW5pdCAtLXJlZmVyZW5jZSAiJEdOVUxJQl9SRUZESVIiIFwKKyAgICAgICAgICAiJGdudWxp Yl9wYXRoIiB8fCBleGl0ICQ/CisgICAgICBlbHNlCisgICAgICAgICMgVGhpcyBmYWxsYmFj ayBhbGxvd3MgYXQgbGVhc3QgZ2l0IDEuNS41LgorICAgICAgICBpZiB0ZXN0IC1mICIkZ251 bGliX3BhdGgiL2dudWxpYi10b29sOyB0aGVuCisgICAgICAgICAgIyBTaW5jZSBmaWxlIGFs cmVhZHkgZXhpc3RzLCBhc3N1bWUgc3VibW9kdWxlIGluaXQgYWxyZWFkeSBjb21wbGV0ZS4K KyAgICAgICAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLSAiJGdudWxpYl9wYXRoIiB8fCBl eGl0ICQ/CisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIE9sZGVyIGdpdCBjYW4ndCBjbG9u ZSBpbnRvIGFuIGVtcHR5IGRpcmVjdG9yeS4KKyAgICAgICAgICBybWRpciAiJGdudWxpYl9w YXRoIiAyPi9kZXYvbnVsbAorICAgICAgICAgIGdpdCBjbG9uZSAtLXJlZmVyZW5jZSAiJEdO VUxJQl9SRUZESVIiIFwKKyAgICAgICAgICAgICIkKGdpdF9tb2R1bGVzX2NvbmZpZyBzdWJt b2R1bGUuZ251bGliLnVybCkiICIkZ251bGliX3BhdGgiIFwKKyAgICAgICAgICAgICYmIGdp dCBzdWJtb2R1bGUgaW5pdCAtLSAiJGdudWxpYl9wYXRoIiBcCisgICAgICAgICAgICAmJiBn aXQgc3VibW9kdWxlIHVwZGF0ZSAtLSAiJGdudWxpYl9wYXRoIiBcCisgICAgICAgICAgICB8 fCBleGl0ICQ/CisgICAgICAgIGZpCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICMgR05V TElCX1JFRkRJUiBpcyBub3Qgc2V0IG9yIG5vdCB1c2FibGUuIElnbm9yZSBpdC4KKyAgICAg IGlmIGdpdF9tb2R1bGVzX2NvbmZpZyBzdWJtb2R1bGUuZ251bGliLnVybCA+L2Rldi9udWxs OyB0aGVuCisgICAgICAgIGVjaG8gIiQwOiBnZXR0aW5nIGdudWxpYiBmaWxlcy4uLiIKKyAg ICAgICAgZ2l0IHN1Ym1vZHVsZSBpbml0IC0tICIkZ251bGliX3BhdGgiIHx8IGV4aXQgJD8K KyAgICAgICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS0gIiRnbnVsaWJfcGF0aCIgfHwgZXhp dCAkPworCisgICAgICBlbGlmIFsgISAtZCAiJGdudWxpYl9wYXRoIiBdOyB0aGVuCisgICAg ICAgIGVjaG8gIiQwOiBnZXR0aW5nIGdudWxpYiBmaWxlcy4uLiIKKworICAgICAgICB0cmFw IGNsZWFudXBfZ251bGliIEhVUCBJTlQgUElQRSBURVJNCisKKyAgICAgICAgc2hhbGxvdz0K KyAgICAgICAgaWYgdGVzdCAteiAiJEdOVUxJQl9SRVZJU0lPTiI7IHRoZW4KKyAgICAgICAg ICBpZiBnaXQgY2xvbmUgLWggMj4mMSB8IGdyZXAgLS0gLS1kZXB0aCA+IC9kZXYvbnVsbDsg dGhlbgorICAgICAgICAgICAgc2hhbGxvdz0nLS1kZXB0aCAyJworICAgICAgICAgIGZpCisg ICAgICAgICAgZ2l0IGNsb25lICRzaGFsbG93ICR7R05VTElCX1VSTDotJGRlZmF1bHRfZ251 bGliX3VybH0gIiRnbnVsaWJfcGF0aCIgXAorICAgICAgICAgICAgfHwgY2xlYW51cF9nbnVs aWIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIGdpdCBmZXRjaCAtaCAyPiYxIHwgZ3Jl cCAtLSAtLWRlcHRoID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBzaGFsbG93PSct LWRlcHRoIDInCisgICAgICAgICAgZmkKKyAgICAgICAgICBta2RpciAtcCAiJGdudWxpYl9w YXRoIgorICAgICAgICAgICMgT25seSB3YW50IGEgc2hhbGxvdyBjaGVja291dCBvZiAkR05V TElCX1JFVklTSU9OLCBidXQgZ2l0IGRvZXMgbm90CisgICAgICAgICAgIyBzdXBwb3J0IGNs b25pbmcgYnkgY29tbWl0IGhhc2guIFNvIGF0dGVtcHQgYSBzaGFsbG93IGZldGNoIGJ5IGNv bW1pdAorICAgICAgICAgICMgaGFzaCB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGRhdGEg ZG93bmxvYWRlZCBhbmQgY2hhbmdlcyBuZWVkZWQgdG8KKyAgICAgICAgICAjIGJlIHByb2Nl c3NlZCwgd2hpY2ggY2FuIGRyYXN0aWNhbGx5IHJlZHVjZSBkb3dubG9hZCBhbmQgcHJvY2Vz c2luZworICAgICAgICAgICMgdGltZSBmb3IgY2hlY2tvdXQuIElmIHRoZSBmZXRjaCBieSBj b21taXQgZmFpbHMsIGEgc2hhbGxvdyBmZXRjaCBjYW4KKyAgICAgICAgICAjIG5vdCBiZSBw ZXJmb3JtZWQgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyB3aGF0IHRoZSBkZXB0aCBvZiB0aGUg Y29tbWl0CisgICAgICAgICAgIyBpcyB3aXRob3V0IGZldGNoaW5nIGFsbCBjb21taXRzLiBT byBmYWxsYmFjayB0byBmZXRjaGluZyBhbGwgY29tbWl0cy4KKyAgICAgICAgICBnaXQgLUMg IiRnbnVsaWJfcGF0aCIgaW5pdAorICAgICAgICAgIGdpdCAtQyAiJGdudWxpYl9wYXRoIiBy ZW1vdGUgYWRkIG9yaWdpbiBcCisgICAgICAgICAgICAgICR7R05VTElCX1VSTDotJGRlZmF1 bHRfZ251bGliX3VybH0KKyAgICAgICAgICBnaXQgLUMgIiRnbnVsaWJfcGF0aCIgZmV0Y2gg JHNoYWxsb3cgb3JpZ2luICIkR05VTElCX1JFVklTSU9OIiBcCisgICAgICAgICAgICB8fCBn aXQgLUMgIiRnbnVsaWJfcGF0aCIgZmV0Y2ggb3JpZ2luIFwKKyAgICAgICAgICAgIHx8IGNs ZWFudXBfZ251bGliCisgICAgICAgICAgZ2l0IC1DICIkZ251bGliX3BhdGgiIHJlc2V0IC0t aGFyZCBGRVRDSF9IRUFECisgICAgICAgIGZpCisKKyAgICAgICAgdHJhcCAtIEhVUCBJTlQg UElQRSBURVJNCisgICAgICBmaQorICAgIGZpCisgICAgR05VTElCX1NSQ0RJUj0kZ251bGli X3BhdGgKKyAgICAjIFZlcmlmeSB0aGF0IHRoZSBzdWJtb2R1bGUgY29udGFpbnMgYSBnbnVs aWIgY2hlY2tvdXQuCisgICAgdGVzdCAtZiAiJGdudWxpYl9wYXRoL2dudWxpYi10b29sIiBc CisgICAgICB8fCBkaWUgIkVycm9yOiAkZ251bGliX3BhdGggaXMgc3VwcG9zZWQgdG8gY29u dGFpbiBhIGdudWxpYiBjaGVja291dCwgYnV0IGRvZXMgbm90IGNvbnRhaW4gZ251bGliLXRv b2wiCisgIGZpCisKKyAgIyBYWFggU2hvdWxkIHRoaXMgYmUgZG9uZSBpZiAkdXNlX2dpdCBp cyBmYWxzZT8KKyAgaWYgdGVzdCAtZCAiJEdOVUxJQl9TUkNESVIiLy5naXQgJiYgdGVzdCAt biAiJEdOVUxJQl9SRVZJU0lPTiIgXAorICAgICAmJiAhIGdpdF9tb2R1bGVzX2NvbmZpZyBz dWJtb2R1bGUuZ251bGliLnVybCA+L2Rldi9udWxsOyB0aGVuCisgICAgKGNkICIkR05VTElC X1NSQ0RJUiIgJiYgZ2l0IGNoZWNrb3V0ICIkR05VTElCX1JFVklTSU9OIikgfHwgY2xlYW51 cF9nbnVsaWIKKyAgZmkKKworICAjICRHTlVMSUJfU1JDRElSIG5vdyBwb2ludHMgdG8gdGhl IHZlcnNpb24gb2YgZ251bGliIHRvIHVzZSwgYW5kCisgICMgd2Ugbm8gbG9uZ2VyIG5lZWQg dG8gdXNlIGdpdCBvciAkZ251bGliX3BhdGggYmVsb3cgaGVyZS4KK30KKworIyAtLS0tLS0t LSBVcGdyYWRpbmcgYm9vdHN0cmFwIHRvIHRoZSB2ZXJzaW9uIGZvdW5kIGluIEdOVUxJQl9T UkNESVIuIC0tLS0tLS0tCisKK3VwZ3JhZGVfYm9vdHN0cmFwICgpCit7CisgIGlmIHRlc3Qg LWYgIiRtZWRpciIvYm9vdHN0cmFwLWZ1bmNsaWIuc2g7IHRoZW4KKyAgICB1cGRhdGVfbGli PXRydWUKKyAgICB7IGNtcCAtcyAiJG1lZGlyIi9ib290c3RyYXAgIiRHTlVMSUJfU1JDRElS L3RvcC9ib290c3RyYXAiIFwKKyAgICAgICYmIGNtcCAtcyAiJG1lZGlyIi9ib290c3RyYXAt ZnVuY2xpYi5zaCAiJEdOVUxJQl9TUkNESVIvdG9wL2Jvb3RzdHJhcC1mdW5jbGliLnNoIiBc CisgICAgICAmJiBjbXAgLXMgIiRtZWRpciIvYXV0b3B1bGwuc2ggIiRHTlVMSUJfU1JDRElS L3RvcC9hdXRvcHVsbC5zaCIgXAorICAgICAgJiYgY21wIC1zICIkbWVkaXIiL2F1dG9nZW4u c2ggIiRHTlVMSUJfU1JDRElSL3RvcC9hdXRvZ2VuLnNoIjsgXAorICAgIH0KKyAgZWxzZQor ICAgIHVwZGF0ZV9saWI9ZmFsc2UKKyAgICBjbXAgLXMgIiRtZWRpciIvYm9vdHN0cmFwICIk R05VTElCX1NSQ0RJUi9idWlsZC1hdXgvYm9vdHN0cmFwIgorICBmaSB8fCB7CisgICAgaWYg JHVwZGF0ZV9saWI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiB1cGRhdGluZyBib290c3RyYXAg JiBjb21wYW5pb25zIGFuZCByZXN0YXJ0aW5nLi4uIgorICAgIGVsc2UKKyAgICAgIGVjaG8g IiQwOiB1cGRhdGluZyBib290c3RyYXAgYW5kIHJlc3RhcnRpbmcuLi4iCisgICAgZmkKKyAg ICBjYXNlICQoc2ggLWMgJ2VjaG8gIiQxIicgLS0gYSkgaW4KKyAgICAgIGEpIGlnbm9yZWQ9 LS07OworICAgICAgKikgaWdub3JlZD1pZ25vcmVkOzsKKyAgICBlc2FjCisgICAgZXhlYyBz aCAtYyBcCisgICAgICAneyBpZiAnJHVwZGF0ZV9saWInICYmIHRlc3QgLWYgIiQxIjsgdGhl biBjcCAiJDEiICIkMyI7IGVsc2UgY3AgIiQyIiAiJDMiOyBmaTsgfSAmJiB7IGlmICckdXBk YXRlX2xpYicgJiYgdGVzdCAtZiAiJDQiOyB0aGVuIGNwICIkNCIgIiQ1IjsgZWxzZSBybSAt ZiAiJDUiOyBmaTsgfSAmJiB7IGlmICckdXBkYXRlX2xpYicgJiYgdGVzdCAtZiAiJDYiOyB0 aGVuIGNwICIkNiIgIiQ3IjsgZWxzZSBybSAtZiAiJDciOyBmaTsgfSAmJiB7IGlmICckdXBk YXRlX2xpYicgJiYgdGVzdCAtZiAiJDgiOyB0aGVuIGNwICIkOCIgIiQ5IjsgZWxzZSBybSAt ZiAiJDkiOyBmaTsgfSAmJiBzaGlmdCAmJiBzaGlmdCAmJiBzaGlmdCAmJiBzaGlmdCAmJiBz aGlmdCAmJiBzaGlmdCAmJiBzaGlmdCAmJiBzaGlmdCAmJiBzaGlmdCAmJiBleGVjICIke0NP TkZJR19TSEVMTC0vYmluL3NofSIgIiRAIicgXAorICAgICAgJGlnbm9yZWQgXAorICAgICAg IiRHTlVMSUJfU1JDRElSL3RvcC9ib290c3RyYXAiICIkR05VTElCX1NSQ0RJUi9idWlsZC1h dXgvYm9vdHN0cmFwIiAiJG1lZGlyL2Jvb3RzdHJhcCIgXAorICAgICAgIiRHTlVMSUJfU1JD RElSL3RvcC9ib290c3RyYXAtZnVuY2xpYi5zaCIgIiRtZWRpci9ib290c3RyYXAtZnVuY2xp Yi5zaCIgXAorICAgICAgIiRHTlVMSUJfU1JDRElSL3RvcC9hdXRvcHVsbC5zaCIgIiRtZWRp ci9hdXRvcHVsbC5zaCIgXAorICAgICAgIiRHTlVMSUJfU1JDRElSL3RvcC9hdXRvZ2VuLnNo IiAiJG1lZGlyL2F1dG9nZW4uc2giIFwKKyAgICAgICIkMCIgIiRAIiAtLW5vLWJvb3RzdHJh cC1zeW5jCisgIH0KK30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lmIHRlc3Qg eCIkZ251bGliX21vZHVsZXMkZ251bGliX2ZpbGVzJGdudWxpYl9leHRyYV9maWxlcyIgPSB4 OyB0aGVuCisgIHVzZV9nbnVsaWI9ZmFsc2UKK2Vsc2UKKyAgdXNlX2dudWxpYj10cnVlCitm aQorCisjIC0tLS0tLS0tIEZldGNoIGF1eGlsaWFyeSBmaWxlcyBmcm9tIHRoZSBuZXR3b3Jr LiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXV0b3B1bGxfdXNhZ2UoKSB7Cisg IGNhdCA8PEVPRgorVXNhZ2U6ICRtZSBbT1BUSU9OXS4uLgorQm9vdHN0cmFwIHRoaXMgcGFj a2FnZSBmcm9tIHRoZSBjaGVja2VkLW91dCBzb3VyY2VzLgorCitPcHRpb25hbCBlbnZpcm9u bWVudCB2YXJpYWJsZXM6CisgIEdOVUxJQl9TUkNESVIgICAgICAgICAgICBTcGVjaWZpZXMg dGhlIGxvY2FsIGRpcmVjdG9yeSB3aGVyZSBnbnVsaWIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNvdXJjZXMgcmVzaWRlLiAgVXNlIHRoaXMgaWYgeW91IGFscmVhZHkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhhdmUgZ251bGliIHNvdXJjZXMgb24geW91ciBtYWNo aW5lLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZSB0 aGVzZSBzb3VyY2VzLgorICBHTlVMSUJfUkVGRElSICAgICAgICAgICAgU3BlY2lmaWVzIHRo ZSBsb2NhbCBkaXJlY3Rvcnkgd2hlcmUgYSBnbnVsaWIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlcG9zaXRvcnkgKHdpdGggYSAuZ2l0IHN1YmRpcmVjdG9yeSkgcmVzaWRlcy4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIGlmIHlvdSBhbHJlYWR5IGhh dmUgZ251bGliIHNvdXJjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBoaXN0 b3J5IG9uIHlvdXIgbWFjaGluZSwgYW5kIGRvIG5vdCB3YW50CisgICAgICAgICAgICAgICAg ICAgICAgICAgICB0byB3YXN0ZSB5b3VyIGJhbmR3aWR0aCBkb3dubG9hZGluZyB0aGVtIGFn YWluLgorICBHTlVMSUJfVVJMICAgICAgICAgICAgICAgQ2xvbmVhYmxlIFVSTCBvZiB0aGUg Z251bGliIHJlcG9zaXRvcnkuCisKK09wdGlvbnM6CisgIC0tYm9vdHN0cmFwLXN5bmMgICAg ICAgICBpZiB0aGlzIGJvb3RzdHJhcCBzY3JpcHQgaXMgbm90IGlkZW50aWNhbCB0bworICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZlcnNpb24gaW4gdGhlIGxvY2FsIGdudWxp YiBzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRoaXMgc2Ny aXB0LCBhbmQgdGhlbiByZXN0YXJ0IGl0IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC9iaW4vc2ggb3IgdGhlIHNoZWxsIFwkQ09ORklHX1NIRUxMCisgIC0tbm8tYm9vdHN0 cmFwLXN5bmMgICAgICBkbyBub3QgY2hlY2sgd2hldGhlciBib290c3RyYXAgaXMgb3V0IG9m IHN5bmMKKyAgLS1mb3JjZSAgICAgICAgICAgICAgICAgIGF0dGVtcHQgdG8gYm9vdHN0cmFw IGV2ZW4gaWYgdGhlIHNvdXJjZXMgc2VlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAg bm90IHRvIGhhdmUgYmVlbiBjaGVja2VkIG91dAorICAtLW5vLWdpdCAgICAgICAgICAgICAg ICAgZG8gbm90IHVzZSBnaXQgdG8gdXBkYXRlIGdudWxpYi4gIFJlcXVpcmVzIHRoYXQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwkR05VTElCX1NSQ0RJUiBvciB0aGUgLS1nbnVs aWItc3JjZGlyIG9wdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzIHRv IGEgZ251bGliIHJlcG9zaXRvcnkgd2l0aCB0aGUgY29ycmVjdAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV2aXNpb24KKyAgLS1za2lwLXBvICAgICAgICAgICAgICAgIGRvIG5v dCBkb3dubG9hZCBwbyBmaWxlcworRU9GCisgIGJvb3RzdHJhcF9wcmludF9vcHRpb25fdXNh Z2VfaG9vaworICBjYXQgPDxFT0YKK0lmIHRoZSBmaWxlIGJvb3RzdHJhcC5jb25mIGV4aXN0 cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBzY3JpcHQsIGl0cworY29udGVudHMg YXJlIHJlYWQgYXMgc2hlbGwgdmFyaWFibGVzIHRvIGNvbmZpZ3VyZSB0aGUgYm9vdHN0cmFw LgorCitGb3IgYnVpbGQgcHJlcmVxdWlzaXRlcywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxp a2UgXCRBVVRPQ09ORiBhbmQgXCRBTVRBUgorYXJlIGhvbm9yZWQuCisKK0dudWxpYiBzb3Vy Y2VzIGNhbiBiZSBmZXRjaGVkIGluIHZhcmlvdXMgd2F5czoKKworICogSWYgdGhlIGVudmly b25tZW50IHZhcmlhYmxlIEdOVUxJQl9TUkNESVIgaXMgc2V0IChlaXRoZXIgYXMgYW4KKyAg IGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHZpYSB0aGUgLS1nbnVsaWItc3JjZGlyIG9wdGlv biksIHRoZW4gc291cmNlcworICAgYXJlIGZldGNoZWQgZnJvbSB0aGF0IGxvY2FsIGRpcmVj dG9yeS4gIElmIGl0IGlzIGEgZ2l0IHJlcG9zaXRvcnkgYW5kCisgICB0aGUgY29uZmlndXJh dGlvbiB2YXJpYWJsZSBHTlVMSUJfUkVWSVNJT04gaXMgc2V0IGluIGJvb3RzdHJhcC5jb25m LAorICAgdGhlbiB0aGF0IHJldmlzaW9uIGlzIGNoZWNrZWQgb3V0LgorCisgKiBPdGhlcndp c2UsIGlmIHRoaXMgcGFja2FnZSBpcyBpbiBhIGdpdCByZXBvc2l0b3J5IHdpdGggYSAnZ251 bGliJworICAgc3VibW9kdWxlIGNvbmZpZ3VyZWQsIHRoZW4gdGhhdCBzdWJtb2R1bGUgaXMg aW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQKKyAgIGFuZCBzb3VyY2VzIGFyZSBmZXRjaGVkIGZy b20gdGhlcmUuICBJZiBHTlVMSUJfUkVGRElSIGlzIHNldCAoZWl0aGVyCisgICBhcyBhbiBl bnZpcm9ubWVudCB2YXJpYWJsZSBvciB2aWEgdGhlIC0tZ251bGliLXJlZmRpciBvcHRpb24p IGFuZCBpcworICAgYSBnaXQgcmVwb3NpdG9yeSwgdGhlbiBpdCBpcyB1c2VkIGFzIGEgcmVm ZXJlbmNlLgorCisgKiBPdGhlcndpc2UsIGlmIHRoZSAnZ251bGliJyBkaXJlY3RvcnkgZG9l cyBub3QgZXhpc3QsIEdudWxpYiBzb3VyY2VzCisgICBhcmUgY2xvbmVkIGludG8gdGhhdCBk aXJlY3RvcnkgdXNpbmcgZ2l0IGZyb20gXCRHTlVMSUJfVVJMLCBkZWZhdWx0aW5nCisgICB0 byAkZGVmYXVsdF9nbnVsaWJfdXJsLgorICAgSWYgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFi bGUgR05VTElCX1JFVklTSU9OIGlzIHNldCBpbiBib290c3RyYXAuY29uZiwKKyAgIHRoZW4g dGhhdCByZXZpc2lvbiBpcyBjaGVja2VkIG91dC4KKworICogT3RoZXJ3aXNlLCB0aGUgZXhp c3RpbmcgR251bGliIHNvdXJjZXMgaW4gdGhlICdnbnVsaWInIGRpcmVjdG9yeSBhcmUKKyAg IHVzZWQuICBJZiBpdCBpcyBhIGdpdCByZXBvc2l0b3J5IGFuZCB0aGUgY29uZmlndXJhdGlv biB2YXJpYWJsZQorICAgR05VTElCX1JFVklTSU9OIGlzIHNldCBpbiBib290c3RyYXAuY29u ZiwgdGhlbiB0aGF0IHJldmlzaW9uIGlzCisgICBjaGVja2VkIG91dC4KKworSWYgeW91IG1h aW50YWluIGEgcGFja2FnZSBhbmQgd2FudCB0byBwaW4gYSBwYXJ0aWN1bGFyIHJldmlzaW9u IG9mIHRoZQorR251bGliIHNvdXJjZXMgdGhhdCBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB5b3Vy IHBhY2thZ2UsIHRoZW4gdGhlcmUgYXJlCit0d28gcG9zc2libGUgYXBwcm9hY2hlczogZWl0 aGVyIGNvbmZpZ3VyZSBhICdnbnVsaWInIHN1Ym1vZHVsZSB3aXRoIHRoZQorYXBwcm9wcmlh dGUgcmV2aXNpb24sIG9yIHNldCBHTlVMSUJfUkVWSVNJT04gKGFuZCBpZiBuZWNlc3NhcnkK K0dOVUxJQl9VUkwpIGluIGJvb3RzdHJhcC5jb25mLgorCitSdW5uaW5nIHdpdGhvdXQgYXJn dW1lbnRzIHdpbGwgc3VmZmljZSBpbiBtb3N0IGNhc2VzLgorRU9GCit9CisKKyMgRmV0Y2gg YXV4aWxpYXJ5IGZpbGVzIHRoYXQgYXJlIG9taXR0ZWQgZnJvbSB0aGUgdmVyc2lvbiBjb250 cm9sCisjIHJlcG9zaXRvcnkgb2YgdGhpcyBwYWNrYWdlLgorYXV0b3B1bGwoKQoreworICAj IEVuc3VyZSB0aGF0IENEUEFUSCBpcyBub3Qgc2V0LiAgT3RoZXJ3aXNlLCB0aGUgb3V0cHV0 IGZyb20gY2QKKyAgIyB3b3VsZCBjYXVzZSB0cm91YmxlIGluIGF0IGxlYXN0IG9uZSB1c2Ug YmVsb3cuCisgICh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBB VEgKKworICAjIFBhcnNlIG9wdGlvbnMuCisKKyAgIyBVc2UgZ2l0IHRvIHVwZGF0ZSBnbnVs aWIgc291cmNlcworICB1c2VfZ2l0PXRydWUKKworICBmb3Igb3B0aW9uCisgIGRvCisgICAg Y2FzZSAkb3B0aW9uIGluCisgICAgLS1oZWxwKQorICAgICAgYXV0b3B1bGxfdXNhZ2UKKyAg ICAgIHJldHVybjs7CisgICAgLS12ZXJzaW9uKQorICAgICAgc2V0IC1lCisgICAgICBlY2hv ICJhdXRvcHVsbC5zaCAkc2NyaXB0bGlidmVyc2lvbiIKKyAgICAgIGVjaG8gIiRjb3B5cmln aHQiCisgICAgICByZXR1cm4gMAorICAgICAgOzsKKyAgICAtLXNraXAtcG8pCisgICAgICBT S0lQX1BPPXQ7OworICAgIC0tZm9yY2UpCisgICAgICBjaGVja291dF9vbmx5X2ZpbGU9OzsK KyAgICAtLWJvb3RzdHJhcC1zeW5jKQorICAgICAgYm9vdHN0cmFwX3N5bmM9dHJ1ZTs7Cisg ICAgLS1uby1ib290c3RyYXAtc3luYykKKyAgICAgIGJvb3RzdHJhcF9zeW5jPWZhbHNlOzsK KyAgICAtLW5vLWdpdCkKKyAgICAgIHVzZV9naXQ9ZmFsc2U7OworICAgICopCisgICAgICBi b290c3RyYXBfb3B0aW9uX2hvb2sgJG9wdGlvbiB8fCBkaWUgIiRvcHRpb246IHVua25vd24g b3B0aW9uIjs7CisgICAgZXNhYworICBkb25lCisKKyAgJHVzZV9naXQgfHwgdGVzdCAtbiAi JEdOVUxJQl9TUkNESVIiIFwKKyAgICB8fCBkaWUgIkVycm9yOiAtLW5vLWdpdCByZXF1aXJl cyBcJEdOVUxJQl9TUkNESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgLS1nbnVsaWItc3Jj ZGlyIG9wdGlvbiIKKyAgdGVzdCAteiAiJEdOVUxJQl9TUkNESVIiIHx8IHRlc3QgLWQgIiRH TlVMSUJfU1JDRElSIiBcCisgICAgfHwgZGllICJFcnJvcjogXCRHTlVMSUJfU1JDRElSIGVu dmlyb25tZW50IHZhcmlhYmxlIG9yIC0tZ251bGliLXNyY2RpciBvcHRpb24gaXMgc3BlY2lm aWVkLCBidXQgZG9lcyBub3QgZGVub3RlIGEgZGlyZWN0b3J5IgorCisgIGlmIHRlc3QgLW4g IiRjaGVja291dF9vbmx5X2ZpbGUiICYmIHRlc3QgISAtciAiJGNoZWNrb3V0X29ubHlfZmls ZSI7IHRoZW4KKyAgICBkaWUgIlJ1bm5pbmcgdGhpcyBzY3JpcHQgZnJvbSBhIG5vbi1jaGVj a2VkLW91dCBkaXN0cmlidXRpb24gaXMgcmlza3kuIgorICBmaQorCisgIGNoZWNrX2J1aWxk X3ByZXJlcXVpc2l0ZXMgJHVzZV9naXQKKworICBpZiAkdXNlX2dudWxpYiB8fCAkYm9vdHN0 cmFwX3N5bmM7IHRoZW4KKyAgICBwcmVwYXJlX0dOVUxJQl9TUkNESVIKKyAgICBpZiAkYm9v dHN0cmFwX3N5bmM7IHRoZW4KKyAgICAgIHVwZ3JhZGVfYm9vdHN0cmFwCisgICAgZmkKKyAg ZmkKKworICAjIEZpbmQgc2hhMXN1bSwgbmFtZWQgZ3NoYTFzdW0gb24gTWFjUG9ydHMsIHNo YXN1bSBvbiBNYWMgT1MgWCAxMC42LgorICAjIEFsc28gZmluZCB0aGUgY29tcGF0aWJsZSBz aGExIHV0aWxpdHkgb24gdGhlIEJTRHMKKyAgaWYgdGVzdCB4IiRTS0lQX1BPIiA9IHg7IHRo ZW4KKyAgICBmaW5kX3Rvb2wgU0hBMVNVTSBzaGExc3VtIGdzaGExc3VtIHNoYXN1bSBzaGEx CisgIGZpCisKKyAgIyBTZWUgaWYgd2UgY2FuIHVzZSBnbnVsaWIncyBnaXQtbWVyZ2UtY2hh bmdlbG9nIG1lcmdlIGRyaXZlci4KKyAgaWYgJHVzZV9naXQgJiYgdGVzdCAtZCAuZ2l0ICYm IGNoZWNrX2V4aXN0cyBnaXQ7IHRoZW4KKyAgICBpZiBnaXQgY29uZmlnIG1lcmdlLm1lcmdl LWNoYW5nZWxvZy5kcml2ZXIgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIDoKKyAgICBlbGlm IGNoZWNrX2V4aXN0cyBnaXQtbWVyZ2UtY2hhbmdlbG9nOyB0aGVuCisgICAgICBlY2hvICIk MDogaW5pdGlhbGl6aW5nIGdpdC1tZXJnZS1jaGFuZ2Vsb2cgZHJpdmVyIgorICAgICAgZ2l0 IGNvbmZpZyBtZXJnZS5tZXJnZS1jaGFuZ2Vsb2cubmFtZSAnR05VLXN0eWxlIENoYW5nZUxv ZyBtZXJnZSBkcml2ZXInCisgICAgICBnaXQgY29uZmlnIG1lcmdlLm1lcmdlLWNoYW5nZWxv Zy5kcml2ZXIgJ2dpdC1tZXJnZS1jaGFuZ2Vsb2cgJU8gJUEgJUInCisgICAgZWxzZQorICAg ICAgZWNobyAiJDA6IGNvbnNpZGVyIGluc3RhbGxpbmcgZ2l0LW1lcmdlLWNoYW5nZWxvZyBm cm9tIGdudWxpYiIKKyAgICBmaQorICBmaQorCisgIGNhc2UgJFNLSVBfUE8gaW4KKyAgJycp CisgICAgaWYgdGVzdCAtZCBwbzsgdGhlbgorICAgICAgdXBkYXRlX3BvX2ZpbGVzIHBvICRw YWNrYWdlIHx8IHJldHVybgorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1kIHJ1bnRpbWUtcG87 IHRoZW4KKyAgICAgIHVwZGF0ZV9wb19maWxlcyBydW50aW1lLXBvICRwYWNrYWdlLXJ1bnRp bWUgfHwgcmV0dXJuCisgICAgZmk7OworICBlc2FjCisKKyAgIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKworICBib290c3RyYXBfcG9zdF9wdWxsX2hvb2sgXAorICAgIHx8IGRpZSAiYm9v dHN0cmFwX3Bvc3RfcHVsbF9ob29rIGZhaWxlZCIKKworICAjIERvbid0IHByb2NlZWQgaWYg dGhlcmUgYXJlIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcy4gIEluIHBhcnRpY3VsYXIsCisg ICMgYXV0b2dlbi5zaCB3aWxsIHJlbW92ZSBkYW5nbGluZyBsaW5rcywgd2hpY2ggbWlnaHQg YmUgbGlua3MgaW50bworICAjIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcy4KKyAgIyBCdXQg aXQncyBPSyBpZiB0aGUgJ2dudWxpYicgc3VibW9kdWxlIGlzIHVuaW5pdGlhbGl6ZWQsIGFz IGxvbmcgYXMKKyAgIyBHTlVMSUJfU1JDRElSIGlzIHNldC4KKyAgaWYgJHVzZV9naXQ7IHRo ZW4KKyAgICAjIFVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcyBhcmUgbGlzdGVkIHdpdGggYW4g aW5pdGlhbCBkYXNoLgorICAgIHVuaW5pdGlhbGl6ZWQ9YGdpdCBzdWJtb2R1bGUgfCBncmVw ICdeLScgfCBhd2sgJ3sgcHJpbnQgJDIgfSdgCisgICAgaWYgdGVzdCAtbiAiJEdOVUxJQl9T UkNESVIiOyB0aGVuCisgICAgICB1bmluaXRpYWxpemVkPWBlY2hvICIkdW5pbml0aWFsaXpl ZCIgfCBncmVwIC12ICdeZ251bGliJCdgCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkdW5p bml0aWFsaXplZCI7IHRoZW4KKyAgICAgIGRpZSAiU29tZSBnaXQgc3VibW9kdWxlcyBhcmUg bm90IGluaXRpYWxpemVkOiAiYGVjaG8gIiR1bmluaXRpYWxpemVkIiB8IHRyICdcbicgJywn IHwgc2VkIC1lICdzfCwkfC58J2AiIEVpdGhlciB1c2Ugb3B0aW9uICctLW5vLWdpdCcsIG9y IHJ1biAnZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0JyBhbmQgYm9vdHN0cmFwIGFnYWlu LiIKKyAgICBmaQorICBmaQorCisgIGVjaG8gIiQwOiBkb25lLiAgTm93IHlvdSBjYW4gcnVu ICcuL2F1dG9nZW4uc2gnLiIKK30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSBHZXQgdHJhbnNsYXRpb25zLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitk b3dubG9hZF9wb19maWxlcygpIHsKKyAgc3ViZGlyPSQxCisgIGRvbWFpbj0kMgorICBlY2hv ICIkbWU6IGdldHRpbmcgdHJhbnNsYXRpb25zIGludG8gJHN1YmRpciBmb3IgJGRvbWFpbi4u LiIKKyAgY21kPSQocHJpbnRmICIkcG9fZG93bmxvYWRfY29tbWFuZF9mb3JtYXQiICIkc3Vi ZGlyIiAiJGRvbWFpbiIpCisgIGV2YWwgIiRjbWQiCit9CisKKyMgTWlycm9yIC5wbyBmaWxl cyB0byAkcG9fZGlyLy5yZWZlcmVuY2UgYW5kIGNvcHkgb25seSB0aGUgbmV3CisjIG9yIG1v ZGlmaWVkIG9uZXMgaW50byAkcG9fZGlyLiAgQWxzbyB1cGRhdGUgJHBvX2Rpci9MSU5HVUFT LgorIyBOb3RlIHBvIGZpbGVzIHRoYXQgZXhpc3QgbG9jYWxseSBvbmx5IGFyZSBsZWZ0IGlu ICRwb19kaXIgYnV0IHdpbGwKKyMgbm90IGJlIGluY2x1ZGVkIGluIExJTkdVQVMgYW5kIGhl bmNlIHdpbGwgbm90IGJlIGRpc3RyaWJ1dGVkLgordXBkYXRlX3BvX2ZpbGVzKCkgeworICAj IERpcmVjdG9yeSBjb250YWluaW5nIHByaW1hcnkgLnBvIGZpbGVzLgorICAjIE92ZXJ3cml0 ZSB0aGVtIG9ubHkgd2hlbiB3ZSdyZSBzdXJlIGEgLnBvIGZpbGUgaXMgbmV3LgorICBwb19k aXI9JDEKKyAgZG9tYWluPSQyCisKKyAgIyBNaXJyb3IgKi5wbyBmaWxlcyBpbnRvIHRoaXMg ZGlyLgorICAjIFVzdWFsbHkgY29udGFpbnMgKi5zMSBjaGVja3N1bSBmaWxlcy4KKyAgcmVm X3BvX2Rpcj0iJHBvX2Rpci8ucmVmZXJlbmNlIgorCisgIHRlc3QgLWQgJHJlZl9wb19kaXIg fHwgbWtkaXIgJHJlZl9wb19kaXIgfHwgcmV0dXJuCisgIGRvd25sb2FkX3BvX2ZpbGVzICRy ZWZfcG9fZGlyICRkb21haW4gXAorICAgICYmIGxzICIkcmVmX3BvX2RpciIvKi5wbyAyPi9k ZXYvbnVsbCB8CisgICAgICBzZWQgJ3N8LiovfHw7IHN8XC5wbyR8fCcgPiAiJHBvX2Rpci9M SU5HVUFTIiB8fCByZXR1cm4KKworICBsYW5ncz0kKGNkICRyZWZfcG9fZGlyICYmIGVjaG8g Ki5wbyB8IHNlZCAncy9cLnBvLy9nJykKKyAgdGVzdCAiJGxhbmdzIiA9ICcqJyAmJiBsYW5n cz14CisgIGZvciBwbyBpbiAkbGFuZ3M7IGRvCisgICAgY2FzZSAkcG8gaW4geCkgY29udGlu dWU7OyBlc2FjCisgICAgbmV3X3BvPSIkcmVmX3BvX2Rpci8kcG8ucG8iCisgICAgY2tzdW1f ZmlsZT0iJHJlZl9wb19kaXIvJHBvLnMxIgorICAgIGlmICEgdGVzdCAtZiAiJGNrc3VtX2Zp bGUiIHx8CisgICAgICAgICEgdGVzdCAtZiAiJHBvX2Rpci8kcG8ucG8iIHx8CisgICAgICAg ICEgJFNIQTFTVU0gLWMgIiRja3N1bV9maWxlIiA8ICIkbmV3X3BvIiA+IC9kZXYvbnVsbCAy PiYxOyB0aGVuCisgICAgICBlY2hvICIkbWU6IHVwZGF0ZWQgJHBvX2Rpci8kcG8ucG8uLi4i CisgICAgICBjcCAiJG5ld19wbyIgIiRwb19kaXIvJHBvLnBvIiBcCisgICAgICAgICAgJiYg JFNIQTFTVU0gPCAiJG5ld19wbyIgPiAiJGNrc3VtX2ZpbGUiIHx8IHJldHVybgorICAgIGZp CisgIGRvbmUKK30KKworIyAtLS0tLS0tLSBHZW5lcmF0ZSBmaWxlcyBhdXRvbWF0aWNhbGx5 IGZyb20gZXhpc3Rpbmcgc291cmNlcy4gIC0tLS0tLS0tLS0tLS0tCisKK2F1dG9nZW5fdXNh Z2UoKSB7CisgIGNhdCA8PEVPRgorVXNhZ2U6ICRtZSBbT1BUSU9OXS4uLgorQm9vdHN0cmFw IHRoaXMgcGFja2FnZSBmcm9tIHRoZSBjaGVja2VkLW91dCBzb3VyY2VzLgorCitPcHRpb25h bCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIEdOVUxJQl9TUkNESVIgICAgICAgICAgICBT cGVjaWZpZXMgdGhlIGxvY2FsIGRpcmVjdG9yeSB3aGVyZSBnbnVsaWIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNvdXJjZXMgcmVzaWRlLiAgVXNlIHRoaXMgaWYgeW91IGFscmVh ZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgZ251bGliIHNvdXJjZXMgb24g eW91ciBtYWNoaW5lLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50 IHRvIHVzZSB0aGVzZSBzb3VyY2VzLgorCitPcHRpb25zOgorICAtLWNvcHkgICAgICAgICAg ICAgICAgICAgY29weSBmaWxlcyBpbnN0ZWFkIG9mIGNyZWF0aW5nIHN5bWJvbGljIGxpbmtz CisgIC0tZm9yY2UgICAgICAgICAgICAgICAgICBhdHRlbXB0IHRvIGJvb3RzdHJhcCBldmVu IGlmIHRoZSBzb3VyY2VzIHNlZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCB0 byBoYXZlIGJlZW4gY2hlY2tlZCBvdXQKK0VPRgorICBib290c3RyYXBfcHJpbnRfb3B0aW9u X3VzYWdlX2hvb2sKKyAgY2F0IDw8RU9GCitJZiB0aGUgZmlsZSBib290c3RyYXAuY29uZiBl eGlzdHMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMgc2NyaXB0LCBpdHMKK2NvbnRl bnRzIGFyZSByZWFkIGFzIHNoZWxsIHZhcmlhYmxlcyB0byBjb25maWd1cmUgdGhlIGJvb3Rz dHJhcC4KKworRm9yIGJ1aWxkIHByZXJlcXVpc2l0ZXMsIGVudmlyb25tZW50IHZhcmlhYmxl cyBsaWtlIFwkQVVUT0NPTkYgYW5kIFwkQU1UQVIKK2FyZSBob25vcmVkLgorCitHbnVsaWIg c291cmNlcyBhcmUgYXNzdW1lZCB0byBiZSBwcmVzZW50OgorICAqIGluIFwkR05VTElCX1NS Q0RJUiwgaWYgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsCisgICogb3RoZXJ3 aXNlLCBpbiB0aGUgJ2dudWxpYicgc3VibW9kdWxlLCBpZiBzdWNoIGEgc3VibW9kdWxlIGlz IGNvbmZpZ3VyZWQsCisgICogb3RoZXJ3aXNlLCBpbiB0aGUgJ2dudWxpYicgc3ViZGlyZWN0 b3J5LgorCitSdW5uaW5nIHdpdGhvdXQgYXJndW1lbnRzIHdpbGwgc3VmZmljZSBpbiBtb3N0 IGNhc2VzLgorRU9GCit9CisKKwordmVyc2lvbl9jb250cm9sbGVkX2ZpbGUoKSB7CisgIHBh cmVudD0kMQorICBmaWxlPSQyCisgIGlmIHRlc3QgLWQgLmdpdDsgdGhlbgorICAgIGdpdCBy bSAtbiAiJGZpbGUiID4gL2Rldi9udWxsIDI+JjEKKyAgZWxpZiB0ZXN0IC1kIC5zdm47IHRo ZW4KKyAgICBzdm4gbG9nIC1yIEhFQUQgIiRmaWxlIiA+IC9kZXYvbnVsbCAyPiYxCisgIGVs aWYgdGVzdCAtZCBDVlM7IHRoZW4KKyAgICBncmVwIC1GICIvJHtmaWxlIyMqL30vIiAiJHBh cmVudC9DVlMvRW50cmllcyIgMj4vZGV2L251bGwgfAorICAgICAgICAgICAgIGdyZXAgJ14v W14vXSovWzAtOV0nID4gL2Rldi9udWxsCisgIGVsc2UKKyAgICB3YXJuXyAibm8gdmVyc2lv biBjb250cm9sIGZvciAkZmlsZT8iCisgICAgZmFsc2UKKyAgZmkKK30KKworIyBTdHJpcCBi bGFuayBhbmQgY29tbWVudCBsaW5lcyB0byBsZWF2ZSBzaWduaWZpY2FudCBlbnRyaWVzLgor Z2l0aWdub3JlX2VudHJpZXMoKSB7CisgIHNlZCAnL14jL2Q7IC9eJC9kJyAiJEAiCit9CisK KyMgSWYgJFNUUiBpcyBub3QgYWxyZWFkeSBvbiBhIGxpbmUgYnkgaXRzZWxmIGluICRGSUxF LCBpbnNlcnQgaXQgYXQgdGhlIHN0YXJ0LgorIyBFbnRyaWVzIGFyZSBpbnNlcnRlZCBhdCB0 aGUgc3RhcnQgb2YgdGhlIGlnbm9yZSBsaXN0IHRvIGVuc3VyZSBleGlzdGluZworIyBlbnRy aWVzIHN0YXJ0aW5nIHdpdGggISBhcmUgbm90IG92ZXJyaWRkZW4uICBTdWNoIGVudHJpZXMg c3VwcG9ydAorIyB3aGl0ZWxpc3RpbmcgZXhjZXB0aW9ucyBhZnRlciBhIG1vcmUgZ2VuZXJp YyBibGFja2xpc3QgcGF0dGVybi4KK2luc2VydF9pZl9hYnNlbnQoKSB7CisgIGZpbGU9JDEK KyAgc3RyPSQyCisgIHRlc3QgLWYgJGZpbGUgfHwgdG91Y2ggJGZpbGUKKyAgdGVzdCAtciAk ZmlsZSB8fCBkaWUgIkVycm9yOiBmYWlsZWQgdG8gcmVhZCBpZ25vcmUgZmlsZTogJGZpbGUi CisgIGR1cGxpY2F0ZV9lbnRyaWVzPSQoZ2l0aWdub3JlX2VudHJpZXMgJGZpbGUgfCBzb3J0 IHwgdW5pcSAtZCkKKyAgaWYgWyAiJGR1cGxpY2F0ZV9lbnRyaWVzIiBdIDsgdGhlbgorICAg IGRpZSAiRXJyb3I6IER1cGxpY2F0ZSBlbnRyaWVzIGluICRmaWxlOiAiICRkdXBsaWNhdGVf ZW50cmllcworICBmaQorICBsaW5lc29sZD0kKGdpdGlnbm9yZV9lbnRyaWVzICRmaWxlIHwg d2MgLWwpCisgIGxpbmVzbmV3PSQoIHsgZWNobyAiJHN0ciI7IGNhdCAkZmlsZTsgfSB8IGdp dGlnbm9yZV9lbnRyaWVzIHwgc29ydCAtdSB8IHdjIC1sKQorICBpZiBbICRsaW5lc29sZCAh PSAkbGluZXNuZXcgXSA7IHRoZW4KKyAgICB7IGVjaG8gIiRzdHIiIHwgY2F0IC0gJGZpbGUg PiAkZmlsZS5iYWsgJiYgbXYgJGZpbGUuYmFrICRmaWxlOyB9IFwKKyAgICAgIHx8IGRpZSAi aW5zZXJ0X2lmX2Fic2VudCAkZmlsZSAkc3RyOiBmYWlsZWQiCisgIGZpCit9CisKKyMgQWRq dXN0ICRQQVRURVJOIGZvciAkVkNfSUdOT1JFX0ZJTEUgYW5kIGluc2VydCBpdCB3aXRoCisj IGluc2VydF9pZl9hYnNlbnQuCitpbnNlcnRfdmNfaWdub3JlKCkgeworICB2Y19pZ25vcmVf ZmlsZT0iJDEiCisgIHBhdHRlcm49IiQyIgorICBjYXNlICR2Y19pZ25vcmVfZmlsZSBpbgor ICAqLmdpdGlnbm9yZSkKKyAgICAjIEEgLmdpdGlnbm9yZSBlbnRyeSB0aGF0IGRvZXMgbm90 IHN0YXJ0IHdpdGggJy8nIGFwcGxpZXMKKyAgICAjIHJlY3Vyc2l2ZWx5IHRvIHN1YmRpcmVj dG9yaWVzLCBzbyBwcmVwZW5kICcvJyB0byBldmVyeQorICAgICMgLmdpdGlnbm9yZSBlbnRy eS4KKyAgICBwYXR0ZXJuPSQoZWNobyAiJHBhdHRlcm4iIHwgc2VkIHMsXiwvLCk7OworICBl c2FjCisgIGluc2VydF9pZl9hYnNlbnQgIiR2Y19pZ25vcmVfZmlsZSIgIiRwYXR0ZXJuIgor fQorCitzeW1saW5rX3RvX2RpcigpCit7CisgIHNyYz0kMS8kMgorICBkc3Q9JHszLSQyfQor CisgIHRlc3QgLWYgIiRzcmMiICYmIHsKKworICAgICMgSWYgdGhlIGRlc3RpbmF0aW9uIGRp cmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQuCisgICAgIyBUaGlzIGlzIHJlcXVp cmVkIGF0IGxlYXN0IGZvciAibGliL3VuaXdpZHRoL2Nqay5oIi4KKyAgICBkc3RfZGlyPSQo ZGlybmFtZSAiJGRzdCIpCisgICAgaWYgISB0ZXN0IC1kICIkZHN0X2RpciI7IHRoZW4KKyAg ICAgIG1rZGlyIC1wICIkZHN0X2RpciIKKworICAgICAgIyBJZiB3ZSd2ZSBqdXN0IGNyZWF0 ZWQgYSBkaXJlY3RvcnkgbGlrZSBsaWIvdW5pd2lkdGgsCisgICAgICAjIHRlbGwgdmVyc2lv biBjb250cm9sIHN5c3RlbShzKSBpdCdzIGlnbm9yYWJsZS4KKyAgICAgICMgRklYTUU6IGZv ciBub3csIHRoaXMgZG9lcyBvbmx5IG9uZSBsZXZlbAorICAgICAgcGFyZW50PSQoZGlybmFt ZSAiJGRzdF9kaXIiKQorICAgICAgZm9yIGRvdF9pZyBpbiB4ICR2Y19pZ25vcmU7IGRvCisg ICAgICAgIHRlc3QgJGRvdF9pZyA9IHggJiYgY29udGludWUKKyAgICAgICAgaWc9JHBhcmVu dC8kZG90X2lnCisgICAgICAgIGluc2VydF92Y19pZ25vcmUgJGlnICIke2RzdF9kaXIjIyov fSIKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgaWYgJGNvcHk7IHRoZW4KKyAgICAgIHsK KyAgICAgICAgdGVzdCAhIC1oICIkZHN0IiB8fCB7CisgICAgICAgICAgZWNobyAiJG1lOiBy bSAtZiAkZHN0IiAmJgorICAgICAgICAgIHJtIC1mICIkZHN0IgorICAgICAgICB9CisgICAg ICB9ICYmCisgICAgICB0ZXN0IC1mICIkZHN0IiAmJgorICAgICAgY21wIC1zICIkc3JjIiAi JGRzdCIgfHwgeworICAgICAgICBlY2hvICIkbWU6IGNwIC1mcCAkc3JjICRkc3QiICYmCisg ICAgICAgIGNwIC1mcCAiJHNyYyIgIiRkc3QiCisgICAgICB9CisgICAgZWxzZQorICAgICAg IyBMZWF2ZSBhbnkgZXhpc3Rpbmcgc3ltbGluayBhbG9uZSwgaWYgaXQgYWxyZWFkeSBwb2lu dHMgdG8gdGhlIHNvdXJjZSwKKyAgICAgICMgc28gdGhhdCBicm9rZW4gYnVpbGQgdG9vbHMg dGhhdCBjYXJlIGFib3V0IHN5bWxpbmsgdGltZXMKKyAgICAgICMgYXJlbid0IGNvbmZ1c2Vk IGludG8gZG9pbmcgdW5uZWNlc3NhcnkgYnVpbGRzLiAgQ29udmVyc2VseSwgaWYgdGhlCisg ICAgICAjIGV4aXN0aW5nIHN5bWxpbmsncyB0aW1lc3RhbXAgaXMgb2xkZXIgdGhhbiB0aGUg c291cmNlLCBtYWtlIGl0IGFmcmVzaCwKKyAgICAgICMgc28gdGhhdCBicm9rZW4gdG9vbHMg YXJlbid0IGNvbmZ1c2VkIGludG8gc2tpcHBpbmcgbmVlZGVkIGJ1aWxkcy4gIFNlZQorICAg ICAgIyA8aHR0cHM6Ly9saXN0cy5nbnUub3JnL3IvYnVnLWdudWxpYi8yMDExLTA1L21zZzAw MzI2Lmh0bWw+LgorICAgICAgdGVzdCAtaCAiJGRzdCIgJiYKKyAgICAgIHNyY19scz0kKGxz IC1kaUwgIiRzcmMiIDI+L2Rldi9udWxsKSAmJiBzZXQgJHNyY19scyAmJiBzcmNfaT0kMSAm JgorICAgICAgZHN0X2xzPSQobHMgLWRpTCAiJGRzdCIgMj4vZGV2L251bGwpICYmIHNldCAk ZHN0X2xzICYmIGRzdF9pPSQxICYmCisgICAgICB0ZXN0ICIkc3JjX2kiID0gIiRkc3RfaSIg JiYKKyAgICAgIGJvdGhfbHM9JChscyAtZHQgIiRzcmMiICIkZHN0IikgJiYKKyAgICAgIHRl c3QgIlgkYm90aF9scyIgPSAiWCRkc3Qkbmwkc3JjIiB8fCB7CisgICAgICAgIGRvdF9kb3Rz PQorICAgICAgICBjYXNlICRzcmMgaW4KKyAgICAgICAgLyopIDs7CisgICAgICAgICopCisg ICAgICAgICAgY2FzZSAvJGRzdC8gaW4KKyAgICAgICAgICAqLy8qIHwgKi8uLi8qIHwgKi8u LyogfCAvKi8qLyovKi8qLykKKyAgICAgICAgICAgICBkaWUgImludmFsaWQgc3ltbGluayBj YWxjdWxhdGlvbjogJHNyYyAtPiAkZHN0Ijs7CisgICAgICAgICAgLyovKi8qLyovKSAgICBk b3RfZG90cz0uLi8uLi8uLi87OworICAgICAgICAgIC8qLyovKi8pICAgICAgZG90X2RvdHM9 Li4vLi4vOzsKKyAgICAgICAgICAvKi8qLykgICAgICAgIGRvdF9kb3RzPS4uLzs7CisgICAg ICAgICAgZXNhYzs7CisgICAgICAgIGVzYWMKKworICAgICAgICBlY2hvICIkbWU6IGxuIC1m cyAkZG90X2RvdHMkc3JjICRkc3QiICYmCisgICAgICAgIGxuIC1mcyAiJGRvdF9kb3RzJHNy YyIgIiRkc3QiCisgICAgICB9CisgICAgZmkKKyAgfQorfQorCisjIFJlZ2VuZXJhdGUgYWxs IGF1dG9nZW5lcmF0YWJsZSBmaWxlcyB0aGF0IGFyZSBvbWl0dGVkIGZyb20gdGhlCisjIHZl cnNpb24gY29udHJvbCByZXBvc2l0b3J5LiAgSW4gcGFydGljdWxhciwgcmVnZW5lcmF0ZSBh bGwKKyMgYWNsb2NhbC5tNCwgY29uZmlnLmguaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUg ZmlsZXMgd2l0aCBuZXcKKyMgdmVyc2lvbnMgb2YgYXV0b2NvbmYgb3IgYXV0b21ha2UuCith dXRvZ2VuKCkKK3sKKyAgIyBFbnN1cmUgdGhhdCBDRFBBVEggaXMgbm90IHNldC4gIE90aGVy d2lzZSwgdGhlIG91dHB1dCBmcm9tIGNkCisgICMgd291bGQgY2F1c2UgdHJvdWJsZSBpbiBh dCBsZWFzdCBvbmUgdXNlIGJlbG93LgorICAodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+ JjEgJiYgdW5zZXQgQ0RQQVRICisKKyAgIyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBt YXkgYmUgc2V0IGJ5IHRoZSB1c2VyLgorICA6ICIke0FVVE9QT0lOVD1hdXRvcG9pbnR9Igor ICA6ICIke0FVVE9SRUNPTkY9YXV0b3JlY29uZn0iCisKKyAgaWYgdGVzdCAiJHZjX2lnbm9y ZSIgPSBhdXRvOyB0aGVuCisgICAgdmNfaWdub3JlPQorICAgIHRlc3QgLWQgLmdpdCAmJiB2 Y19pZ25vcmU9LmdpdGlnbm9yZQorICAgIHRlc3QgLWQgQ1ZTICYmIHZjX2lnbm9yZT0iJHZj X2lnbm9yZSAuY3ZzaWdub3JlIgorICBmaQorCisKKyAgIyBQYXJzZSBvcHRpb25zLgorCisg ICMgV2hldGhlciB0byB1c2UgY29waWVzIGluc3RlYWQgb2Ygc3ltbGlua3MuCisgIGNvcHk9 ZmFsc2UKKworICBmb3Igb3B0aW9uCisgIGRvCisgICAgY2FzZSAkb3B0aW9uIGluCisgICAg LS1oZWxwKQorICAgICAgYXV0b2dlbl91c2FnZQorICAgICAgcmV0dXJuOzsKKyAgICAtLXZl cnNpb24pCisgICAgICBzZXQgLWUKKyAgICAgIGVjaG8gImF1dG9nZW4uc2ggJHNjcmlwdGxp YnZlcnNpb24iCisgICAgICBlY2hvICIkY29weXJpZ2h0IgorICAgICAgcmV0dXJuIDAKKyAg ICAgIDs7CisgICAgLS1mb3JjZSkKKyAgICAgIGNoZWNrb3V0X29ubHlfZmlsZT07OworICAg IC0tY29weSkKKyAgICAgIGNvcHk9dHJ1ZTs7CisgICAgKikKKyAgICAgIGJvb3RzdHJhcF9v cHRpb25faG9vayAkb3B0aW9uIHx8IGRpZSAiJG9wdGlvbjogdW5rbm93biBvcHRpb24iOzsK KyAgICBlc2FjCisgIGRvbmUKKworICB0ZXN0IC16ICIkR05VTElCX1NSQ0RJUiIgfHwgdGVz dCAtZCAiJEdOVUxJQl9TUkNESVIiIFwKKyAgICB8fCBkaWUgIkVycm9yOiBcJEdOVUxJQl9T UkNESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgLS1nbnVsaWItc3JjZGlyIG9wdGlvbiBp cyBzcGVjaWZpZWQsIGJ1dCBkb2VzIG5vdCBkZW5vdGUgYSBkaXJlY3RvcnkiCisKKyAgaWYg dGVzdCAtbiAiJGNoZWNrb3V0X29ubHlfZmlsZSIgJiYgdGVzdCAhIC1yICIkY2hlY2tvdXRf b25seV9maWxlIjsgdGhlbgorICAgIGRpZSAiUnVubmluZyB0aGlzIHNjcmlwdCBmcm9tIGEg bm9uLWNoZWNrZWQtb3V0IGRpc3RyaWJ1dGlvbiBpcyByaXNreS4iCisgIGZpCisKKyAgaWYg JHVzZV9nbnVsaWI7IHRoZW4KKyAgICBpZiB0ZXN0IC16ICIkR05VTElCX1NSQ0RJUiI7IHRo ZW4KKyAgICAgIGdudWxpYl9wYXRoPSQodGVzdCAtZiAuZ2l0bW9kdWxlcyAmJiBnaXQgY29u ZmlnIC0tZmlsZSAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZ251bGliLnBhdGgpCisgICAgICB0 ZXN0IC16ICIkZ251bGliX3BhdGgiICYmIGdudWxpYl9wYXRoPWdudWxpYgorICAgICAgR05V TElCX1NSQ0RJUj0kZ251bGliX3BhdGgKKyAgICBmaQorICBmaQorCisgICMgRGllIGlmIHRo ZXJlIGlzIG5vIEFDX0NPTkZJR19BVVhfRElSKCRidWlsZF9hdXgpIGxpbmUgaW4gY29uZmln dXJlLmFjLgorICBmb3VuZF9hdXhfZGlyPW5vCisgIGdyZXAgJ15bCSBdKkFDX0NPTkZJR19B VVhfRElSKFxbJyIkYnVpbGRfYXV4IiddKScgY29uZmlndXJlLmFjIFwKKyAgICAgID4vZGV2 L251bGwgJiYgZm91bmRfYXV4X2Rpcj15ZXMKKyAgZ3JlcCAnXlsJIF0qQUNfQ09ORklHX0FV WF9ESVIoJyIkYnVpbGRfYXV4IicpJyBjb25maWd1cmUuYWMgXAorICAgICAgPi9kZXYvbnVs bCAmJiBmb3VuZF9hdXhfZGlyPXllcworICB0ZXN0ICRmb3VuZF9hdXhfZGlyID0geWVzIFwK KyAgICB8fCBkaWUgImNvbmZpZ3VyZS5hYyBsYWNrcyAnQUNfQ09ORklHX0FVWF9ESVIoWyRi dWlsZF9hdXhdKSc7IGFkZCBpdCIKKworICAjIElmICRidWlsZF9hdXggZG9lc24ndCBleGlz dCwgY3JlYXRlIGl0IG5vdywgb3RoZXJ3aXNlIHNvbWUgYml0cworICAjIGJlbG93IHdpbGwg bWFsZnVuY3Rpb24uICBJZiBjcmVhdGluZyBpdCwgYWxzbyBtYXJrIGl0IGFzIGlnbm9yZWQu CisgIGlmIHRlc3QgISAtZCAkYnVpbGRfYXV4OyB0aGVuCisgICAgbWtkaXIgJGJ1aWxkX2F1 eAorICAgIGZvciBkb3RfaWcgaW4geCAkdmNfaWdub3JlOyBkbworICAgICAgdGVzdCAkZG90 X2lnID0geCAmJiBjb250aW51ZQorICAgICAgaW5zZXJ0X3ZjX2lnbm9yZSAkZG90X2lnICRi dWlsZF9hdXgKKyAgICBkb25lCisgIGZpCisKKyAgY2hlY2tfYnVpbGRfcHJlcmVxdWlzaXRl cyBmYWxzZQorCisgIHVzZV9saWJ0b29sPTAKKyAgIyBXZSdkIGxpa2UgdG8gdXNlIGdyZXAg LUUsIHRvIHNlZSBpZiBhbnkgb2YgTFRfSU5JVCwKKyAgIyBBQ19QUk9HX0xJQlRPT0wsIEFN X1BST0dfTElCVE9PTCBpcyB1c2VkIGluIGNvbmZpZ3VyZS5hYywKKyAgIyBidXQgdGhhdCdz IG5vdCBwb3J0YWJsZSBlbm91Z2ggKGUuZy4sIGZvciBTb2xhcmlzKS4KKyAgZ3JlcCAnXlsJ IF0qQVtDTV1fUFJPR19MSUJUT09MJyBjb25maWd1cmUuYWMgPi9kZXYvbnVsbCBcCisgICAg JiYgdXNlX2xpYnRvb2w9MQorICBncmVwICdeWwkgXSpMVF9JTklUJyBjb25maWd1cmUuYWMg Pi9kZXYvbnVsbCBcCisgICAgJiYgdXNlX2xpYnRvb2w9MQorICBpZiB0ZXN0ICR1c2VfbGli dG9vbCA9IDE7IHRoZW4KKyAgICBmaW5kX3Rvb2wgTElCVE9PTElaRSBnbGlidG9vbGl6ZSBs aWJ0b29saXplCisgIGZpCisKKyAgaWYgJHVzZV9nbnVsaWI7IHRoZW4KKyAgICBnbnVsaWJf dG9vbD0kR05VTElCX1NSQ0RJUi9nbnVsaWItdG9vbAorICAgIDwkZ251bGliX3Rvb2wgfHwg cmV0dXJuCisgIGZpCisKKyAgIyBOT1RFOiB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgdG8gcnVu IGJvdGggYXV0b3BvaW50IGFuZCBsaWJ0b29saXplCisgICMgYmVmb3JlIGdudWxpYi10b29s LCBzaW5jZSBnbnVsaWItdG9vbCBpcyBsaWtlbHkgdG8gcHJvdmlkZSBuZXdlcgorICAjIHZl cnNpb25zIG9mIGZpbGVzICJpbnN0YWxsZWQiIGJ5IHRoZXNlIHR3byBwcm9ncmFtcy4KKyAg IyBUaGVuLCAqYWZ0ZXIqIGdudWxpYi10b29sIChzZWUgYmVsb3cpLCB3ZSBoYXZlIHRvIGJl IGNhcmVmdWwgdG8KKyAgIyBydW4gYXV0b3JlY29uZiBpbiBzdWNoIGEgd2F5IHRoYXQgaXQg ZG9lcyBub3QgcnVuIGVpdGhlciBvZiB0aGVzZQorICAjIHR3byBqdXN0LXByZS1ydW4gcHJv Z3JhbXMuCisKKyAgIyBJbXBvcnQgZnJvbSBnZXR0ZXh0LgorICB3aXRoX2dldHRleHQ9eWVz CisgIGdyZXAgJ15bCSBdKkFNX0dOVV9HRVRURVhUX1ZFUlNJT04oJyBjb25maWd1cmUuYWMg Pi9kZXYvbnVsbCB8fCBcCisgICAgICB3aXRoX2dldHRleHQ9bm8KKworICBpZiB0ZXN0ICR3 aXRoX2dldHRleHQgPSB5ZXMgfHwgdGVzdCAkdXNlX2xpYnRvb2wgPSAxOyB0aGVuCisKKyAg ICB0ZW1wYmFzZT0uYm9vdHN0cmFwJCQKKyAgICB0cmFwICJybSAtZiAkdGVtcGJhc2UuMCAk dGVtcGJhc2UuMSIgSFVQIElOVCBQSVBFIFRFUk0KKworICAgID4gJHRlbXBiYXNlLjAgPiAk dGVtcGJhc2UuMSAmJgorICAgIGZpbmQgLiAhIC10eXBlIGQgLXByaW50IHwgc29ydCA+ICR0 ZW1wYmFzZS4wIHx8IHJldHVybgorCisgICAgaWYgdGVzdCAkd2l0aF9nZXR0ZXh0ID0geWVz OyB0aGVuCisgICAgICAjIFJlbGVhc2VkIGF1dG9wb2ludCBoYXMgdGhlIHRlbmRlbmN5IHRv IGluc3RhbGwgbWFjcm9zIHRoYXQgaGF2ZSBiZWVuCisgICAgICAjIG9ic29sZXRlZCBpbiBj dXJyZW50IGdudWxpYiwgc28gcnVuIHRoaXMgYmVmb3JlIGdudWxpYi10b29sLgorICAgICAg ZWNobyAiJDA6ICRBVVRPUE9JTlQgLS1mb3JjZSIKKyAgICAgICRBVVRPUE9JTlQgLS1mb3Jj ZSB8fCByZXR1cm4KKyAgICBmaQorCisgICAgIyBBdXRvcmVjb25mIHJ1bnMgYWNsb2NhbCBi ZWZvcmUgbGlidG9vbGl6ZSwgd2hpY2ggY2F1c2VzIHNwdXJpb3VzCisgICAgIyB3YXJuaW5n cyBpZiB0aGUgaW5pdGlhbCBhY2xvY2FsIGlzIGNvbmZ1c2VkIGJ5IHRoZSBsaWJ0b29saXpl ZAorICAgICMgKG9yIHdvcnNlIG91dC1vZi1kYXRlKSBtYWNybyBkaXJlY3RvcnkuCisgICAg IyBsaWJ0b29saXplIDEuOWIgYWRkZWQgdGhlIC0taW5zdGFsbCBvcHRpb247IGJ1dCB3ZSBz dXBwb3J0IGJhY2sKKyAgICAjIHRvIGxpYnRvb2xpemUgMS41LjIyLCB3aGVyZSB0aGUgaW5z dGFsbCBhY3Rpb24gd2FzIGRlZmF1bHQuCisgICAgaWYgdGVzdCAkdXNlX2xpYnRvb2wgPSAx OyB0aGVuCisgICAgICBpbnN0YWxsPQorICAgICAgY2FzZSAkKCRMSUJUT09MSVpFIC0taGVs cCkgaW4KKyAgICAgICAgKi0taW5zdGFsbCopIGluc3RhbGw9LS1pbnN0YWxsIDs7CisgICAg ICBlc2FjCisgICAgICBlY2hvICJydW5uaW5nOiAkTElCVE9PTElaRSAkaW5zdGFsbCAtLWNv cHkiCisgICAgICAkTElCVE9PTElaRSAkaW5zdGFsbCAtLWNvcHkKKyAgICBmaQorCisgICAg ZmluZCAuICEgLXR5cGUgZCAtcHJpbnQgfCBzb3J0ID4kdGVtcGJhc2UuMQorICAgIG9sZF9J RlM9JElGUworICAgIElGUz0kbmwKKyAgICBmb3IgZmlsZSBpbiAkKGNvbW0gLTEzICR0ZW1w YmFzZS4wICR0ZW1wYmFzZS4xKTsgZG8KKyAgICAgIElGUz0kb2xkX0lGUworICAgICAgcGFy ZW50PSR7ZmlsZSUvKn0KKyAgICAgIHZlcnNpb25fY29udHJvbGxlZF9maWxlICIkcGFyZW50 IiAiJGZpbGUiIHx8IHsKKyAgICAgICAgZm9yIGRvdF9pZyBpbiB4ICR2Y19pZ25vcmU7IGRv CisgICAgICAgICAgdGVzdCAkZG90X2lnID0geCAmJiBjb250aW51ZQorICAgICAgICAgIGln PSRwYXJlbnQvJGRvdF9pZworICAgICAgICAgIGluc2VydF92Y19pZ25vcmUgIiRpZyIgIiR7 ZmlsZSMjKi99IgorICAgICAgICBkb25lCisgICAgICB9CisgICAgZG9uZQorICAgIElGUz0k b2xkX0lGUworCisgICAgcm0gLWYgJHRlbXBiYXNlLjAgJHRlbXBiYXNlLjEKKyAgICB0cmFw IC0gSFVQIElOVCBQSVBFIFRFUk0KKyAgZmkKKworICAjIEltcG9ydCBmcm9tIGdudWxpYi4K KworICBpZiAkdXNlX2dudWxpYjsgdGhlbgorICAgIGdudWxpYl90b29sX29wdGlvbnM9IlwK KyAgICAgLS1uby1jaGFuZ2Vsb2dcCisgICAgIC0tYXV4LWRpcj0kYnVpbGRfYXV4XAorICAg ICAtLWRvYy1iYXNlPSRkb2NfYmFzZVwKKyAgICAgLS1saWI9JGdudWxpYl9uYW1lXAorICAg ICAtLW00LWJhc2U9JG00X2Jhc2UvXAorICAgICAtLXNvdXJjZS1iYXNlPSRzb3VyY2VfYmFz ZS9cCisgICAgIC0tdGVzdHMtYmFzZT0kdGVzdHNfYmFzZVwKKyAgICAgLS1sb2NhbC1kaXI9 JGxvY2FsX2dsX2RpclwKKyAgICAgJGdudWxpYl90b29sX29wdGlvbl9leHRyYXNcCisgICAg IgorICAgIGlmIHRlc3QgJHVzZV9saWJ0b29sID0gMTsgdGhlbgorICAgICAgY2FzZSAiJGdu dWxpYl90b29sX29wdGlvbnMgIiBpbgorICAgICAgICAqJyAtLWxpYnRvb2wgJyopIDs7Cisg ICAgICAgICopIGdudWxpYl90b29sX29wdGlvbnM9IiRnbnVsaWJfdG9vbF9vcHRpb25zIC0t bGlidG9vbCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIGVjaG8gIiQwOiAkZ251bGli X3Rvb2wgJGdudWxpYl90b29sX29wdGlvbnMgLS1pbXBvcnQgLi4uIgorICAgICRnbnVsaWJf dG9vbCAkZ251bGliX3Rvb2xfb3B0aW9ucyAtLWltcG9ydCAkZ251bGliX21vZHVsZXMgXAor ICAgICAgfHwgZGllICJnbnVsaWItdG9vbCBmYWlsZWQiCisKKyAgICBmb3IgZmlsZSBpbiAk Z251bGliX2ZpbGVzOyBkbworICAgICAgc3ltbGlua190b19kaXIgIiRHTlVMSUJfU1JDRElS IiAkZmlsZSBcCisgICAgICAgIHx8IGRpZSAiZmFpbGVkIHRvIHN5bWxpbmsgJGZpbGUiCisg ICAgZG9uZQorICBmaQorCisgIGJvb3RzdHJhcF9wb3N0X2ltcG9ydF9ob29rIFwKKyAgICB8 fCBkaWUgImJvb3RzdHJhcF9wb3N0X2ltcG9ydF9ob29rIGZhaWxlZCIKKworICAjIFJlbW92 ZSBhbnkgZGFuZ2xpbmcgc3ltbGluayBtYXRjaGluZyAiKi5tNCIgb3IgIiouW2NoXSIgaW4g c29tZQorICAjIGdudWxpYi1wb3B1bGF0ZWQgZGlyZWN0b3JpZXMuICBTdWNoIC5tNCBmaWxl cyB3b3VsZCBjYXVzZSBhY2xvY2FsIHRvIGZhaWwuCisgICMgVGhlIGZvbGxvd2luZyByZXF1 aXJlcyBHTlUgZmluZCA0LjIuMyBvciBuZXdlci4gIENvbnNpZGVyaW5nIHRoZSB1c3VhbAor ICAjIHBvcnRhYmlsaXR5IGNvbnN0cmFpbnRzIG9mIHRoaXMgc2NyaXB0LCB0aGF0IG1heSBz ZWVtIGEgdmVyeSBkZW1hbmRpbmcKKyAgIyByZXF1aXJlbWVudCwgYnV0IGl0IHNob3VsZCBi ZSBvay4gIElnbm9yZSBhbnkgZmFpbHVyZSwgd2hpY2ggaXMgZmluZSwKKyAgIyBzaW5jZSB0 aGlzIGlzIG9ubHkgYSBjb252ZW5pZW5jZSB0byBoZWxwIGRldmVsb3BlcnMgYXZvaWQgdGhl IHJlbGF0aXZlbHkKKyAgIyB1bnVzdWFsIGNhc2UgaW4gd2hpY2ggYSBzeW1saW5rZWQtdG8g Lm00IGZpbGUgaXMgZ2l0LXJlbW92ZWQgZnJvbSBnbnVsaWIKKyAgIyBiZXR3ZWVuIHN1Y2Nl c3NpdmUgcnVucyBvZiB0aGlzIHNjcmlwdC4KKyAgZmluZCAiJG00X2Jhc2UiICIkc291cmNl X2Jhc2UiIFwKKyAgICAtZGVwdGggXCggLW5hbWUgJyoubTQnIC1vIC1uYW1lICcqLltjaF0n IFwpIFwKKyAgICAtdHlwZSBsIC14dHlwZSBsIC1kZWxldGUgPiAvZGV2L251bGwgMj4mMQor CisgICMgSW52b2tlIGF1dG9yZWNvbmYgd2l0aCAtLWZvcmNlIC0taW5zdGFsbCB0byBlbnN1 cmUgdXBncmFkZXMgb2YgdG9vbHMKKyAgIyBzdWNoIGFzIHlsd3JhcC4KKyAgQVVUT1JFQ09O RkZMQUdTPSItLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLUkgJG00X2Jhc2UgJEFDTE9D QUxfRkxBR1MiCisKKyAgIyBTb21lIHN5c3RlbXMgKFJIRUwgNSkgYXJlIHVzaW5nIGFuY2ll bnQgYXV0b3Rvb2xzLCBmb3Igd2hpY2ggdGhlCisgICMgLS1uby1yZWN1cnNpdmUgb3B0aW9u IGhhZCBub3QgYmVlbiBpbnZlbnRlZC4gIERldGVjdCB0aGF0IGxhY2sgYW5kCisgICMgb21p dCB0aGUgb3B0aW9uIHdoZW4gaXQncyBub3Qgc3VwcG9ydGVkLiAgRklYTUUgaW4gMjAxNzog cmVtb3ZlIHRoaXMKKyAgIyBoYWNrIHdoZW4gUkhFTCA1IGF1dG90b29scyBhcmUgdXBkYXRl ZCwgb3Igd2hlbiB0aGV5IGJlY29tZSBpcnJlbGV2YW50LgorICBjYXNlICQoJEFVVE9SRUNP TkYgLS1oZWxwKSBpbgorICAgICotLW5vLXJlY3Vyc2l2ZSopIEFVVE9SRUNPTkZGTEFHUz0i JEFVVE9SRUNPTkZGTEFHUyAtLW5vLXJlY3Vyc2l2ZSI7OworICBlc2FjCisKKyAgIyBUZWxs IGF1dG9yZWNvbmYgbm90IHRvIGludm9rZSBhdXRvcG9pbnQgb3IgbGlidG9vbGl6ZTsgdGhl eSB3ZXJlIHJ1biBhYm92ZS4KKyAgZWNobyAicnVubmluZzogQVVUT1BPSU5UPXRydWUgTElC VE9PTElaRT10cnVlICRBVVRPUkVDT05GICRBVVRPUkVDT05GRkxBR1MiCisgIEFVVE9QT0lO VD10cnVlIExJQlRPT0xJWkU9dHJ1ZSAkQVVUT1JFQ09ORiAkQVVUT1JFQ09ORkZMQUdTIFwK KyAgICB8fCBkaWUgImF1dG9yZWNvbmYgZmFpbGVkIgorCisgICMgR2V0IHNvbWUgZXh0cmEg ZmlsZXMgZnJvbSBnbnVsaWIsIG92ZXJyaWRpbmcgZXhpc3RpbmcgZmlsZXMuCisgIGZvciBm aWxlIGluICRnbnVsaWJfZXh0cmFfZmlsZXM7IGRvCisgICAgY2FzZSAkZmlsZSBpbgorICAg ICAgKi9JTlNUQUxMKSBkc3Q9SU5TVEFMTDs7CisgICAgICBidWlsZC1hdXgvKikgZHN0PSRi dWlsZF9hdXgvJHtmaWxlI2J1aWxkLWF1eC99OzsKKyAgICAgICopIGRzdD0kZmlsZTs7Cisg ICAgZXNhYworICAgIHN5bWxpbmtfdG9fZGlyICIkR05VTElCX1NSQ0RJUiIgJGZpbGUgJGRz dCBcCisgICAgICB8fCBkaWUgImZhaWxlZCB0byBzeW1saW5rICRmaWxlIgorICBkb25lCisK KyAgaWYgdGVzdCAkd2l0aF9nZXR0ZXh0ID0geWVzOyB0aGVuCisgICAgIyBDcmVhdGUgZ2V0 dGV4dCBjb25maWd1cmF0aW9uLgorICAgIGVjaG8gIiQwOiBDcmVhdGluZyBwby9NYWtldmFy cyBmcm9tIHBvL01ha2V2YXJzLnRlbXBsYXRlIC4uLiIKKyAgICBybSAtZiBwby9NYWtldmFy cworICAgIHNlZCAnCisgICAgICAvXkVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTICo9L3MvPS4q Lz0gJyIkRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMiJy8KKyAgICAgIC9eQ09QWVJJR0hUX0hP TERFUiAqPS9zLz0uKi89ICciJENPUFlSSUdIVF9IT0xERVIiJy8KKyAgICAgIC9eTVNHSURf QlVHU19BRERSRVNTICo9L3N8PS4qfD0gJyIkTVNHSURfQlVHU19BRERSRVNTIid8CisgICAg ICAvXlhHRVRURVhUX09QVElPTlMgKj0veworICAgICAgICBzLyQvIFxcLworICAgICAgICBh XAorICAgICAgICAgICAgJyIkWEdFVFRFWFRfT1BUSU9OUyInICQke2VuZF9vZl94Z2V0dGV4 dF9vcHRpb25zK30KKyAgICAgIH0KKyAgICAnIHBvL01ha2V2YXJzLnRlbXBsYXRlID5wby9N YWtldmFycyBcCisgICAgICB8fCBkaWUgJ2Nhbm5vdCBnZW5lcmF0ZSBwby9NYWtldmFycycK KworICAgICMgSWYgdGhlICdnZXR0ZXh0JyBtb2R1bGUgaXMgaW4gdXNlLCBncmFiIHRoZSBs YXRlc3QgTWFrZWZpbGUuaW4uaW4uCisgICAgIyBJZiBvbmx5IHRoZSAnZ2V0dGV4dC1oJyBt b2R1bGUgaXMgaW4gdXNlLCBhc3N1bWUgYXV0b3BvaW50IGFscmVhZHkKKyAgICAjIHB1dCB0 aGUgY29ycmVjdCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpbnRvIHBsYWNlLgorICAgIGNhc2Ug JGdudWxpYl9tb2R1bGVzIGluCisgICAgICAqZ2V0dGV4dC1oKikgOzsKKyAgICAgICpnZXR0 ZXh0KikKKyAgICAgICAgY3AgJEdOVUxJQl9TUkNESVIvYnVpbGQtYXV4L3BvL01ha2VmaWxl LmluLmluIHBvL01ha2VmaWxlLmluLmluIFwKKyAgICAgICAgICB8fCBkaWUgImNhbm5vdCBj cmVhdGUgcG8vTWFrZWZpbGUuaW4uaW4iCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAg aWYgdGVzdCAtZCBydW50aW1lLXBvOyB0aGVuCisgICAgICAjIFNpbWlsYXJseSBmb3IgcnVu dGltZS1wby9NYWtldmFycywgYnV0IG5vdCBxdWl0ZSB0aGUgc2FtZS4KKyAgICAgIHJtIC1m IHJ1bnRpbWUtcG8vTWFrZXZhcnMKKyAgICAgIHNlZCAnCisgICAgICAgIC9eRE9NQUlOICo9 Liovcy89LiovPSAnIiRwYWNrYWdlIictcnVudGltZS8KKyAgICAgICAgL15zdWJkaXIgKj0u Ki9zLz0uKi89IHJ1bnRpbWUtcG8vCisgICAgICAgIC9eTVNHSURfQlVHU19BRERSRVNTICo9 L3MvPS4qLz0gYnVnLSciJHBhY2thZ2UiJ0BnbnUub3JnLworICAgICAgICAvXlhHRVRURVhU X09QVElPTlMgKj0veworICAgICAgICAgIHMvJC8gXFwvCisgICAgICAgICAgYVwKKyAgICAg ICAgICAgICAgJyIkWEdFVFRFWFRfT1BUSU9OU19SVU5USU1FIicgJCR7ZW5kX29mX3hnZXR0 ZXh0X29wdGlvbnMrfQorICAgICAgICB9CisgICAgICAnIHBvL01ha2V2YXJzLnRlbXBsYXRl ID5ydW50aW1lLXBvL01ha2V2YXJzIFwKKyAgICAgIHx8IGRpZSAnY2Fubm90IGdlbmVyYXRl IHJ1bnRpbWUtcG8vTWFrZXZhcnMnCisKKyAgICAgICMgQ29weSBpZGVudGljYWwgZmlsZXMg ZnJvbSBwbyB0byBydW50aW1lLXBvLgorICAgICAgKGNkIHBvICYmIGNwIC1wIE1ha2VmaWxl LmluLmluICotcXVvdCAqLmhlYWRlciAqLnNlZCAqLnNpbiAuLi9ydW50aW1lLXBvKQorICAg IGZpCisgIGZpCisKKyAgYm9vdHN0cmFwX2VwaWxvZ3VlCisKKyAgZWNobyAiJDA6IGRvbmUu ICBOb3cgeW91IGNhbiBydW4gJy4vY29uZmlndXJlJy4iCit9CisKKyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICdi ZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2Ny aXB0bGlidmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4l MDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQzAiCisjIHRpbWUtc3RhbXAtZW5k OiAiOyAjIFVUQyIKKyMgRW5kOgogCiB1c2FnZSgpIHsKICAgY2F0IDw8RU9GCkBAIC00OCw2 ICsxMzM1LDExIEBAIE9wdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgR05VTElC X1VSTCAgICAgICAgICAgICAgIENsb25lYWJsZSBVUkwgb2YgdGhlIGdudWxpYiByZXBvc2l0 b3J5LgogCiBPcHRpb25zOgorCisgIC0tcHVsbCAgICAgICAgICAgICAgICAgICBEbyBwaGFz ZSAxOiBwdWxsIGZpbGVzIGZyb20gbmV0d29yaworICAtLWdlbiAgICAgICAgICAgICAgICAg ICAgRG8gcGhhc2UgMjogZ2VuZXJhdGUgZnJvbSBsb2NhbCBmaWxlcy4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIChUaGUgZGVmYXVsdCBpcyB0byBkbyBib3RoIHBoYXNlcy4pCisK ICAgLS1nbnVsaWItc3JjZGlyPURJUk5BTUUgIHNwZWNpZnkgdGhlIGxvY2FsIGRpcmVjdG9y eSB3aGVyZSBnbnVsaWIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMgcmVz aWRlLiAgVXNlIHRoaXMgaWYgeW91IGFscmVhZHkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhhdmUgZ251bGliIHNvdXJjZXMgb24geW91ciBtYWNoaW5lLCBhbmQKQEAgLTU5LDEx ICsxMzUxLDEzIEBAIE9wdGlvbnM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQg aGlzdG9yeSBvbiB5b3VyIG1hY2hpbmUsIGFuZCBkbyBub3Qgd2FudAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG8gd2FzdGUgeW91ciBiYW5kd2lkdGggZG93bmxvYWRpbmcgdGhl bSBhZ2Fpbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIFwkR05V TElCX1JFRkRJUgorCiAgIC0tYm9vdHN0cmFwLXN5bmMgICAgICAgICBpZiB0aGlzIGJvb3Rz dHJhcCBzY3JpcHQgaXMgbm90IGlkZW50aWNhbCB0bwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIHZlcnNpb24gaW4gdGhlIGxvY2FsIGdudWxpYiBzb3VyY2VzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRoaXMgc2NyaXB0LCBhbmQgdGhlbiByZXN0 YXJ0IGl0IHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9iaW4vc2ggb3IgdGhl IHNoZWxsIFwkQ09ORklHX1NIRUxMCiAgIC0tbm8tYm9vdHN0cmFwLXN5bmMgICAgICBkbyBu b3QgY2hlY2sgd2hldGhlciBib290c3RyYXAgaXMgb3V0IG9mIHN5bmMKKwogICAtLWNvcHkg ICAgICAgICAgICAgICAgICAgY29weSBmaWxlcyBpbnN0ZWFkIG9mIGNyZWF0aW5nIHN5bWJv bGljIGxpbmtzCiAgIC0tZm9yY2UgICAgICAgICAgICAgICAgICBhdHRlbXB0IHRvIGJvb3Rz dHJhcCBldmVuIGlmIHRoZSBzb3VyY2VzIHNlZW0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5vdCB0byBoYXZlIGJlZW4gY2hlY2tlZCBvdXQKQEAgLTExOCw2ICsxNDEyLDEwIEBA IEVPRgogCiAjIFBhcnNlIG9wdGlvbnMuCiAKKyMgV2hldGhlciB0byBwdWxsIGFuZCBnZW5l cmF0ZS4KK3B1bGw9ZmFsc2UKK2dlbj1mYWxzZQorCiAjIFdoZXRoZXIgdG8gdXNlIGNvcGll cyBpbnN0ZWFkIG9mIHN5bWxpbmtzLgogY29weT1mYWxzZQogCkBAIC0xMzIsMTAgKzE0MzAs MTQgQEAgZG8KICAgICBleGl0OzsKICAgLS12ZXJzaW9uKQogICAgIHNldCAtZQotICAgIGVj aG8gImJvb3RzdHJhcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBlY2hvICJib290c3RyYXAgJHNj cmlwdHZlcnNpb24gbGliICRzY3JpcHRsaWJ2ZXJzaW9uIgogICAgIGVjaG8gIiRjb3B5cmln aHQiCiAgICAgZXhpdCAwCiAgICAgOzsKKyAgLS1wdWxsKQorICAgIHB1bGw9dHJ1ZTs7Cisg IC0tZ2VuKQorICAgIGdlbj10cnVlOzsKICAgLS1nbnVsaWItc3JjZGlyPSopCiAgICAgR05V TElCX1NSQ0RJUj0ke29wdGlvbiMtLWdudWxpYi1zcmNkaXI9fTs7CiAgIC0tZ251bGliLXJl ZmRpcj0qKQpAQCAtMTU3LDYgKzE0NTksOSBAQCBkbwogICBlc2FjCiBkb25lCiAKKyMgRGVm YXVsdCBpcyB0byBkbyBib3RoLgorJHB1bGwgfHwgJGdlbiB8fCBwdWxsPXRydWUgZ2VuPXRy dWUKKwogJHVzZV9naXQgfHwgdGVzdCAtbiAiJEdOVUxJQl9TUkNESVIiIFwKICAgfHwgZGll ICJFcnJvcjogLS1uby1naXQgcmVxdWlyZXMgXCRHTlVMSUJfU1JDRElSIGVudmlyb25tZW50 IHZhcmlhYmxlIG9yIC0tZ251bGliLXNyY2RpciBvcHRpb24iCiB0ZXN0IC16ICIkR05VTElC X1NSQ0RJUiIgfHwgdGVzdCAtZCAiJEdOVUxJQl9TUkNESVIiIFwKQEAgLTE2OCwxMiArMTQ3 Myw2IEBAIGZpCiAKIGNoZWNrX2J1aWxkX3ByZXJlcXVpc2l0ZXMgJHVzZV9naXQKIAotaWYg ISB0ZXN0IC1mICIkbWVkaXIiL2Jvb3RzdHJhcC1mdW5jbGliLnNoOyB0aGVuCi0gICMgV2Ug aGF2ZSBvbmx5IGNvbXBsZXRlZCB0aGUgZmlyc3QgcGhhc2Ugb2YgYW4gdXBncmFkZSBmcm9t IGEgYm9vdHN0cmFwCi0gICMgdmVyc2lvbiA8IDIwMjItMDctMjQuIE5lZWQgdG8gZG8gdGhl IHNlY29uZCBwaGFzZSBub3cuCi0gIGJvb3RzdHJhcF9zeW5jPXRydWUKLWZpCi0KIGlmICRi b290c3RyYXBfc3luYzsgdGhlbgogICBwcmVwYXJlX0dOVUxJQl9TUkNESVIKICAgdXBncmFk ZV9ib290c3RyYXAKQEAgLTE4MywyNSArMTQ4MiwyNSBAQCBmaQogCiBlY2hvICIkMDogQm9v dHN0cmFwcGluZyBmcm9tIGNoZWNrZWQtb3V0ICRwYWNrYWdlIHNvdXJjZXMuLi4iCiAKLSMg UGFzcyBHTlVMSUJfU1JDRElSIHRvIGF1dG9wdWxsLnNoIGFuZCBhdXRvZ2VuLnNoLgorIyBQ YXNzIEdOVUxJQl9TUkNESVIgYW5kIEdOVUxJQl9SRUZESVIgdG8gYW55IHN1YnNpZGlhcnkg Y29tbWFuZHMgdGhhdCBjYXJlLgogZXhwb3J0IEdOVUxJQl9TUkNESVIKLQotIyBQYXNzIEdO VUxJQl9SRUZESVIgdG8gYXV0b3B1bGwuc2guCiBleHBvcnQgR05VTElCX1JFRkRJUgogCi1p ZiAkdXNlX2dpdCB8fCB0ZXN0IC16ICIkU0tJUF9QTyI7IHRoZW4KLSAgIiRtZWRpciIvYXV0 b3B1bGwuc2ggXAoraWYgJHB1bGwgJiYgeyAkdXNlX2dpdCB8fCB0ZXN0IC16ICIkU0tJUF9Q TyI7IH07IHRoZW4KKyAgYXV0b3B1bGwgXAogICAgICAgYGlmICRib290c3RyYXBfc3luYzsg dGhlbiBlY2hvICcgLS1ib290c3RyYXAtc3luYyc7IGVsc2UgZWNobyAnIC0tbm8tYm9vdHN0 cmFwLXN5bmMnOyBmaWAgXAogICAgICAgYGlmIHRlc3QgLXogIiRjaGVja291dF9vbmx5X2Zp bGUiOyB0aGVuIGVjaG8gJyAtLWZvcmNlJzsgZmlgIFwKICAgICAgIGBpZiAhICR1c2VfZ2l0 OyB0aGVuIGVjaG8gJyAtLW5vLWdpdCc7IGZpYCBcCiAgICAgICBgaWYgdGVzdCAtbiAiJFNL SVBfUE8iOyB0aGVuIGVjaG8gJyAtLXNraXAtcG8nOyBmaWAgXAotICAgIHx8IGRpZSAiYXV0 b3B1bGwuc2ggZmFpbGVkLiIKKyAgICB8fCBkaWUgImNvdWxkIG5vdCBmZXRjaCBhdXhpbGlh cnkgZmlsZXMiCiBmaQogCi0iJG1lZGlyIi9hdXRvZ2VuLnNoIFwKK2lmICRnZW47IHRoZW4K KyBhdXRvZ2VuIFwKICAgICBgaWYgJGNvcHk7IHRoZW4gZWNobyAnIC0tY29weSc7IGZpYCBc CiAgICAgYGlmIHRlc3QgLXogIiRjaGVja291dF9vbmx5X2ZpbGUiOyB0aGVuIGVjaG8gJyAt LWZvcmNlJzsgZmlgIFwKLSAgfHwgZGllICJhdXRvZ2VuLnNoIGZhaWxlZC4iCisgIHx8IGRp ZSAiY291bGQgbm90IGdlbmVyYXRlIGF1eGlsaWFyeSBmaWxlcyIKK2ZpCiAKICMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9ib290c3RyYXAtZnVuY2xpYi5zaCBi L2Jvb3RzdHJhcC1mdW5jbGliLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj ZmFkODVhLi4wMDAwMDAwCi0tLSBhL2Jvb3RzdHJhcC1mdW5jbGliLnNoCisrKyAvZGV2L251 bGwKQEAgLTEsNTk0ICswLDAgQEAKLSMgQSBsaWJyYXJ5IG9mIHNoZWxsIGZ1bmN0aW9ucyBm b3IgYXV0b3B1bGwuc2gsIGF1dG9nZW4uc2gsIGFuZCBib290c3RyYXAuCi0KLSMgQ29weXJp Z2h0IChDKSAyMDAzLTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0j IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQot IyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICBUaGUgY2Fub25pY2FsIHZl cnNpb24gb2YgdGhpcwotIyBzY3JpcHQgaXMgbWFpbnRhaW5lZCBhcyB0b3AvYm9vdHN0cmFw LWZ1bmNsaWIuc2ggaW4gZ251bGliLiAgSG93ZXZlciwKLSMgdG8gYmUgdXNlZnVsIHRvIHlv dXIgcGFja2FnZSwgeW91IHNob3VsZCBwbGFjZSBhIGNvcHkgb2YgaXQgdW5kZXIKLSMgdmVy c2lvbiBjb250cm9sIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHlvdXIgcGFja2Fn ZS4gIFRoZQotIyBpbnRlbnQgaXMgdGhhdCBhbGwgY3VzdG9taXphdGlvbiBjYW4gYmUgZG9u ZSB3aXRoIGEgYm9vdHN0cmFwLmNvbmYKLSMgZmlsZSBhbHNvIG1haW50YWluZWQgaW4geW91 ciB2ZXJzaW9uIGNvbnRyb2w7IGdudWxpYiBjb21lcyB3aXRoIGEKLSMgdGVtcGxhdGUgYnVp bGQtYXV4L2Jvb3RzdHJhcC5jb25mIHRvIGdldCB5b3Ugc3RhcnRlZC4KLQotc2NyaXB0dmVy c2lvbj0yMDIyLTA3LTI0LjE1OyAjIFVUQwotCi1ubD0nCi0nCi0KLSMgRW5zdXJlIGZpbGUg bmFtZXMgYXJlIHNvcnRlZCBjb25zaXN0ZW50bHkgYWNyb3NzIHBsYXRmb3Jtcy4KLUxDX0FM TD1DCi1leHBvcnQgTENfQUxMCi0KLSMgSG9ub3IgJFBFUkwsIGJ1dCB3b3JrIGV2ZW4gaWYg dGhlcmUgaXMgbm9uZS4KLVBFUkw9IiR7UEVSTC1wZXJsfSIKLQotZGVmYXVsdF9nbnVsaWJf dXJsPWh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0L2dudWxpYi5naXQKLQotIyBD b3B5cmlnaHQgeWVhciwgZm9yIHRoZSAtLXZlcnNpb24gb3V0cHV0LgotY29weXJpZ2h0X3ll YXI9YGVjaG8gIiRzY3JpcHR2ZXJzaW9uIiB8IHNlZCAtZSAncy9bXjAtOV0uKi8vJ2AKLWNv cHlyaWdodD0iQ29weXJpZ2h0IChDKSAke2NvcHlyaWdodF95ZWFyfSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KLUxpY2Vuc2UgR1BMdjMrOiBHTlUgR1BMIHZlcnNpb24gMyBv ciBsYXRlciA8aHR0cHM6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPi4KLVRoaXMgaXMg ZnJlZSBzb2Z0d2FyZTogeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRl IGl0LgotVGhlcmUgaXMgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5 IGxhdy4iCi0KLSMgd2FybmZfIEZPUk1BVC1TVFJJTkcgQVJHMS4uLgotd2FybmZfICgpCi17 Ci0gIHdhcm5mX2Zvcm1hdF89JDEKLSAgc2hpZnQKLSAgbmw9JwotJwotICBjYXNlICQqIGlu Ci0gICAgKiRubCopIG1lXz0kKHByaW50ZiAiJG1lInx0ciAiJG5sfCIgJz8/JykKLSAgICAg ICBwcmludGYgIiR3YXJuZl9mb3JtYXRfIiAiJEAiIHwgc2VkICJzfF58JG1lXzogfCIgOzsK LSAgICAqKSBwcmludGYgIiRtZTogJHdhcm5mX2Zvcm1hdF8iICIkQCIgOzsKLSAgZXNhYyA+ JjIKLX0KLQotIyB3YXJuXyBXT1JEMS4uLgotd2Fybl8gKCkKLXsKLSAgIyBJZiBJRlMgZG9l cyBub3Qgc3RhcnQgd2l0aCAnICcsIHNldCBpdCBhbmQgZW1pdCB0aGUgd2FybmluZyBpbiBh IHN1YnNoZWxsLgotICBjYXNlICRJRlMgaW4KLSAgICAnICcqKSB3YXJuZl8gJyVzXG4nICIk KiI7OwotICAgICopICAgIChJRlM9JyAnOyB3YXJuXyAiJEAiKTs7Ci0gIGVzYWMKLX0KLQot IyBkaWUgV09SRDEuLi4KLWRpZSgpIHsgd2Fybl8gIiRAIjsgZXhpdCAxOyB9Ci0KLSMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbmZpZ3VyYXRpb24uIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIERpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHBhY2th Z2Utc3BlY2lmaWMgZ251bGliIG1vZHVsZXMgYW5kL29yIG92ZXJyaWRlcy4KLWxvY2FsX2ds X2Rpcj1nbAotCi0jIE5hbWUgb2YgdGhlIE1ha2VmaWxlLmFtCi0jIFhYWCBOb3QgdXNlZC4K LWdudWxpYl9taz1nbnVsaWIubWsKLQotIyBMaXN0IG9mIGdudWxpYiBtb2R1bGVzIG5lZWRl ZC4KLWdudWxpYl9tb2R1bGVzPQotCi0jIEFueSBnbnVsaWIgZmlsZXMgbmVlZGVkIHRoYXQg YXJlIG5vdCBpbiBtb2R1bGVzLgotZ251bGliX2ZpbGVzPQotCi0jIEEgZnVuY3Rpb24gdG8g YmUgY2FsbGVkIGZvciBlYWNoIHVucmVjb2duaXplZCBvcHRpb24uICBSZXR1cm5zIDAgaWYK LSMgdGhlIG9wdGlvbiBpbiAkMSBoYXMgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGZ1bmN0aW9u LiAgUmV0dXJucyAxIGlmCi0jIHRoZSBvcHRpb24gaGFzIG5vdCBiZWVuIHByb2Nlc3NlZCBi eSB0aGUgZnVuY3Rpb24uICBPdmVycmlkZSBpdCB2aWEKLSMgeW91ciBvd24gZGVmaW5pdGlv biBpbiBib290c3RyYXAuY29uZgotYm9vdHN0cmFwX29wdGlvbl9ob29rKCkgeyByZXR1cm4g MTsgfQotCi0jIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGluIG9yZGVyIHRvIHByaW50IHRo ZSAtLWhlbHAgaW5mb3JtYXRpb24KLSMgY29ycmVzcG9uZGluZyB0byB1c2VyLWRlZmluZWQg Y29tbWFuZC1saW5lIG9wdGlvbnMuCi1ib290c3RyYXBfcHJpbnRfb3B0aW9uX3VzYWdlX2hv b2soKSB7IDo7IH0KLQotIyBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgZW5kIG9m IGF1dG9wdWxsLnNoLgotIyBPdmVycmlkZSBpdCB2aWEgeW91ciBvd24gZGVmaW5pdGlvbiBp biBib290c3RyYXAuY29uZi4KLWJvb3RzdHJhcF9wb3N0X3B1bGxfaG9vaygpIHsgOjsgfQot Ci0jIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHJpZ2h0IGFmdGVyIGdudWxpYi10b29sIGlz IHJ1bi4KLSMgT3ZlcnJpZGUgaXQgdmlhIHlvdXIgb3duIGRlZmluaXRpb24gaW4gYm9vdHN0 cmFwLmNvbmYuCi1ib290c3RyYXBfcG9zdF9pbXBvcnRfaG9vaygpIHsgOjsgfQotCi0jIEEg ZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGlzIHNj cmlwdC4KLSMgT3ZlcnJpZGUgaXQgdmlhIHlvdXIgb3duIGRlZmluaXRpb24gaW4gYm9vdHN0 cmFwLmNvbmYuCi1ib290c3RyYXBfZXBpbG9ndWUoKSB7IDo7IH0KLQotIyBUaGUgY29tbWFu ZCB0byBkb3dubG9hZCBhbGwgLnBvIGZpbGVzIGZvciBhIHNwZWNpZmllZCBkb21haW4gaW50 byBhCi0jIHNwZWNpZmllZCBkaXJlY3RvcnkuICBGaWxsIGluIHRoZSBmaXJzdCAlcyB3aXRo IHRoZSBkZXN0aW5hdGlvbgotIyBkaXJlY3RvcnkgYW5kIHRoZSBzZWNvbmQgd2l0aCB0aGUg ZG9tYWluIG5hbWUuCi1wb19kb3dubG9hZF9jb21tYW5kX2Zvcm1hdD1cCi0id2dldCAtLW1p cnJvciAtLWxldmVsPTEgLW5kIC1udiAtQS5wbyAtUCAnJXMnIFwKLSBodHRwczovL3RyYW5z bGF0aW9ucHJvamVjdC5vcmcvbGF0ZXN0LyVzLyIKLQotIyBQcmVmZXIgYSBub24tZW1wdHkg dGFybmFtZSAoNHRoIGFyZ3VtZW50IG9mIEFDX0lOSVQgaWYgZ2l2ZW4pLCBlbHNlCi0jIGZh bGwgYmFjayB0byB0aGUgcGFja2FnZSBuYW1lICgxc3QgYXJndW1lbnQgd2l0aCBtdW5naW5n KS4KLWV4dHJhY3RfcGFja2FnZV9uYW1lPScKLSAgL15BQ19JTklUKFxbKi97Ci0gICAgIHMv Ly8KLSAgICAgL15bXixdKixbXixdKixbXixdKixbIFtdKlwoW15dWyAsKV1cKS97Ci0gICAg ICAgcy8vXDEvCi0gICAgICAgcy9bXSwpXS4qLy8KLSAgICAgICBwCi0gICAgICAgcQotICAg ICB9Ci0gICAgIHMvW10sKV0uKi8vCi0gICAgIHMvXkdOVSAvLwotICAgICB5L0FCQ0RFRkdI SUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LwotICAgICBz L1teYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5X10vLS9nCi0gICAgIHAK LSAgfQotJwotcGFja2FnZT0kKCR7QVVUT0NPTkY6LWF1dG9jb25mfSAtLXRyYWNlIEFDX0lO SVQ6XCQ0IGNvbmZpZ3VyZS5hYyAyPi9kZXYvbnVsbCkKLWlmIHRlc3QgLXogIiRwYWNrYWdl IjsgdGhlbgotICBwYWNrYWdlPSQoc2VkIC1uICIkZXh0cmFjdF9wYWNrYWdlX25hbWUiIGNv bmZpZ3VyZS5hYykgXAotICAgICAgfHwgZGllICdjYW5ub3QgZmluZCBwYWNrYWdlIG5hbWUg aW4gY29uZmlndXJlLmFjJwotZmkKLWdudWxpYl9uYW1lPWxpYiRwYWNrYWdlCi0KLWJ1aWxk X2F1eD1idWlsZC1hdXgKLXNvdXJjZV9iYXNlPWxpYgotbTRfYmFzZT1tNAotZG9jX2Jhc2U9 ZG9jCi10ZXN0c19iYXNlPXRlc3RzCi1nbnVsaWJfZXh0cmFfZmlsZXM9IgotICAgICAgICBi dWlsZC1hdXgvaW5zdGFsbC1zaAotICAgICAgICBidWlsZC1hdXgvbWRhdGUtc2gKLSAgICAg ICAgYnVpbGQtYXV4L3RleGluZm8udGV4Ci0gICAgICAgIGJ1aWxkLWF1eC9kZXBjb21wCi0g ICAgICAgIGJ1aWxkLWF1eC9jb25maWcuZ3Vlc3MKLSAgICAgICAgYnVpbGQtYXV4L2NvbmZp Zy5zdWIKLSAgICAgICAgZG9jL0lOU1RBTEwKLSIKLQotIyBBZGRpdGlvbmFsIGdudWxpYi10 b29sIG9wdGlvbnMgdG8gdXNlLiAgVXNlICJcbmV3bGluZSIgdG8gYnJlYWsgbGluZXMuCi1n bnVsaWJfdG9vbF9vcHRpb25fZXh0cmFzPQotCi0jIE90aGVyIGxvY2FsZSBjYXRlZ29yaWVz IHRoYXQgbmVlZCBtZXNzYWdlIGNhdGFsb2dzLgotRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVM9 Ci0KLSMgQWRkaXRpb25hbCB4Z2V0dGV4dCBvcHRpb25zIHRvIHVzZS4gIFVzZSAiXFxcbmV3 bGluZSIgdG8gYnJlYWsgbGluZXMuCi1YR0VUVEVYVF9PUFRJT05TPSdcXFwKLSAtLWZsYWc9 XzoxOnBhc3MtYy1mb3JtYXRcXFwKLSAtLWZsYWc9Tl86MTpwYXNzLWMtZm9ybWF0XFxcCi0g LS1mbGFnPWVycm9yOjM6Yy1mb3JtYXQgLS1mbGFnPWVycm9yX2F0X2xpbmU6NTpjLWZvcm1h dFxcXAotJwotCi0jIFBhY2thZ2UgYnVnIHJlcG9ydCBhZGRyZXNzIGFuZCBjb3B5cmlnaHQg aG9sZGVyIGZvciBnZXR0ZXh0IGZpbGVzCi1DT1BZUklHSFRfSE9MREVSPSdGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4nCi1NU0dJRF9CVUdTX0FERFJFU1M9YnVnLSRwYWNrYWdl QGdudS5vcmcKLQotIyBGaWxlcyB3ZSBkb24ndCB3YW50IHRvIGltcG9ydC4KLSMgWFhYIE5v dCB1c2VkLgotZXhjbHVkZWRfZmlsZXM9Ci0KLSMgRmlsZSB0aGF0IHNob3VsZCBleGlzdCBp biB0aGUgdG9wIGRpcmVjdG9yeSBvZiBhIGNoZWNrZWQgb3V0IGhpZXJhcmNoeSwKLSMgYnV0 IG5vdCBpbiBhIGRpc3RyaWJ1dGlvbiB0YXJiYWxsLgotY2hlY2tvdXRfb25seV9maWxlPVJF QURNRS1oYWNraW5nCi0KLSMgU2V0IHRoaXMgdG8gJy5jdnNpZ25vcmUgLmdpdGlnbm9yZScg aW4gYm9vdHN0cmFwLmNvbmYgaWYgeW91IHdhbnQKLSMgdGhvc2UgZmlsZXMgdG8gYmUgZ2Vu ZXJhdGVkIGluIGRpcmVjdG9yaWVzIGxpa2UgbGliLywgbTQvLCBhbmQgcG8vLgotIyBPciBz ZXQgaXQgdG8gJ2F1dG8nIHRvIG1ha2UgdGhpcyBzY3JpcHQgc2VsZWN0IHdoaWNoIHRvIHVz ZSBiYXNlZAotIyBvbiB3aGljaCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIChpZiBhbnkpIGlz IHVzZWQgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCi12Y19pZ25vcmU9YXV0bwotCi0jIFNl dCB0aGlzIHRvIHRydWUgaW4gYm9vdHN0cmFwLmNvbmYgdG8gZW5hYmxlIC0tYm9vdHN0cmFw LXN5bmMgYnkKLSMgZGVmYXVsdC4KLWJvb3RzdHJhcF9zeW5jPWZhbHNlCi0KLSMgT3ZlcnJp ZGUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgaWYgbmVjZXNzYXJ5LgotIyBNYWtlIHN1 cmUgdGhhdCBib290c3RyYXAuY29uZiBpcyBzb3VyY2VkIGZyb20gdGhlIGN1cnJlbnQgZGly ZWN0b3J5Ci0jIGlmIHdlIHdlcmUgaW52b2tlZCBhcyAic2ggYm9vdHN0cmFwIi4KLWNvbmZm aWxlPWBkaXJuYW1lICIkbWUiYC9ib290c3RyYXAuY29uZgotdGVzdCAtciAiJGNvbmZmaWxl IiAmJiAuICIkY29uZmZpbGUiCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCdWls ZC10aW1lIHByZXJlcXVpc2l0ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jaGVj a19leGlzdHMoKSB7Ci0gIGlmIHRlc3QgIiQxIiA9ICItLXZlcmJvc2UiOyB0aGVuCi0gICAg KCQyIC0tdmVyc2lvbiA8L2Rldi9udWxsKSA+L2Rldi9udWxsIDI+JjEKLSAgICBpZiB0ZXN0 ICQ/IC1nZSAxMjY7IHRoZW4KLSAgICAgICMgSWYgbm90IGZvdW5kLCBydW4gd2l0aCBkaWFn bm9zdGljcyBhcyBvbmUgbWF5IGJlCi0gICAgICAjIHByZXNlbnRlZCB3aXRoIGVudiB2YXJp YWJsZXMgdG8gc2V0IHRvIGZpbmQgdGhlIHJpZ2h0IHZlcnNpb24KLSAgICAgICgkMiAtLXZl cnNpb24gPC9kZXYvbnVsbCkKLSAgICBmaQotICBlbHNlCi0gICAgKCQxIC0tdmVyc2lvbiA8 L2Rldi9udWxsKSA+L2Rldi9udWxsIDI+JjEKLSAgZmkKLQotICB0ZXN0ICQ/IC1sdCAxMjYK LX0KLQotIyBOb3RlIHRoaXMgZGV2aWF0ZXMgZnJvbSB0aGUgdmVyc2lvbiBjb21wYXJpc29u IGluIGF1dG9tYWtlCi0jIGluIHRoYXQgaXQgdHJlYXRzIDEuNSA8IDEuNS4wLCBhbmQgdHJl YXRzIDEuNC40YSA8IDEuNC1wM2EKLSMgYnV0IHRoaXMgc2hvdWxkIHN1ZmZpY2UgYXMgd2Ug d29uJ3QgYmUgc3BlY2lmeWluZyBvbGQKLSMgdmVyc2lvbiBmb3JtYXRzIG9yIHJlZHVuZGFu dCB0cmFpbGluZyAuMCBpbiBib290c3RyYXAuY29uZi4KLSMgSWYgd2UgZGlkIHdhbnQgZnVs bCBjb21wYXRpYmlsaXR5IHRoZW4gd2Ugc2hvdWxkIHByb2JhYmx5Ci0jIHVzZSBtNF92ZXJz aW9uX2NvbXBhcmUgZnJvbSBhdXRvY29uZi4KLXNvcnRfdmVyKCkgeyAjIHNvcnQgLVYgaXMg bm90IGdlbmVyYWxseSBhdmFpbGFibGUKLSAgdmVyMT0iJDEiCi0gIHZlcjI9IiQyIgotCi0g ICMgc3BsaXQgb24gJy4nIGFuZCBjb21wYXJlIGVhY2ggY29tcG9uZW50Ci0gIGk9MQotICB3 aGlsZSA6IDsgZG8KLSAgICBwMT0kKGVjaG8gIiR2ZXIxIiB8IGN1dCAtZC4gLWYkaSkKLSAg ICBwMj0kKGVjaG8gIiR2ZXIyIiB8IGN1dCAtZC4gLWYkaSkKLSAgICBpZiBbICEgIiRwMSIg XTsgdGhlbgotICAgICAgZWNobyAiJDEgJDIiCi0gICAgICBicmVhawotICAgIGVsaWYgWyAh ICIkcDIiIF07IHRoZW4KLSAgICAgIGVjaG8gIiQyICQxIgotICAgICAgYnJlYWsKLSAgICBl bGlmIFsgISAiJHAxIiA9ICIkcDIiIF07IHRoZW4KLSAgICAgIGlmIFsgIiRwMSIgLWd0ICIk cDIiIF0gMj4vZGV2L251bGw7IHRoZW4gIyBudW1lcmljIGNvbXBhcmlzb24KLSAgICAgICAg ZWNobyAiJDIgJDEiCi0gICAgICBlbGlmIFsgIiRwMiIgLWd0ICIkcDEiIF0gMj4vZGV2L251 bGw7IHRoZW4gIyBudW1lcmljIGNvbXBhcmlzb24KLSAgICAgICAgZWNobyAiJDEgJDIiCi0g ICAgICBlbHNlICMgbnVtZXJpYywgdGhlbiBsZXhpY29ncmFwaGljIGNvbXBhcmlzb24KLSAg ICAgICAgbHA9JChwcmludGYgIiVzXG4lc1xuIiAiJHAxIiAiJHAyIiB8IExBTkc9QyBzb3J0 IC1uIHwgdGFpbCAtbjEpCi0gICAgICAgIGlmIFsgIiRscCIgPSAiJHAyIiBdOyB0aGVuCi0g ICAgICAgICAgZWNobyAiJDEgJDIiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBlY2hvICIk MiAkMSIKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgICBicmVhawotICAgIGZpCi0gICAg aT0kKCgkaSsxKSkKLSAgZG9uZQotfQotCi1nZXRfdmVyc2lvbl9zZWQ9JwotIyBNb3ZlIHZl cnNpb24gdG8gc3RhcnQgb2YgbGluZS4KLXMvLipbdiBdXChbMC05XVwpL1wxLwotCi0jIFNr aXAgbGluZXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCB2ZXJzaW9uLgotL15bMC05XS8hZAot Ci0jIFJlbW92ZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSB2ZXJzaW9uLgotcy9bXi5hLXowLTkt XS4qLy8KLQotIyBUaGUgZmlyc3QgY29tcG9uZW50IG11c3QgYmUgZGlnaXRzIG9ubHkuCi1z L15cKFswLTldKlwpW2Etei1dLiovXDEvCi0KLSN0aGUgZm9sbG93aW5nIGVzc2VudGlhbGx5 IGRvZXMgcy81LjAwNS81LjUvCi1zL1wuMCpcKFsxLTldXCkvLlwxL2cKLXAKLXEnCi0KLWdl dF92ZXJzaW9uKCkgewotICBhcHA9JDEKLQotICAkYXBwIC0tdmVyc2lvbiA+L2Rldi9udWxs IDI+JjEgfHwgeyAkYXBwIC0tdmVyc2lvbjsgcmV0dXJuIDE7IH0KLQotICAkYXBwIC0tdmVy c2lvbiAyPiYxIHwgc2VkIC1uICIkZ2V0X3ZlcnNpb25fc2VkIgotfQotCi1jaGVja192ZXJz aW9ucygpIHsKLSAgcmV0PTAKLQotICB3aGlsZSByZWFkIGFwcCByZXFfdmVyOyBkbwotICAg ICMgV2Ugb25seSBuZWVkIGxpYnRvb2xpemUgZnJvbSB0aGUgbGlidG9vbCBwYWNrYWdlLgot ICAgIGlmIHRlc3QgIiRhcHAiID0gbGlidG9vbDsgdGhlbgotICAgICAgYXBwPWxpYnRvb2xp emUKLSAgICBmaQotICAgICMgRXhlbXB0IGdpdCBpZiBnaXQgaXMgbm90IG5lZWRlZC4KLSAg ICBpZiB0ZXN0ICIkYXBwIiA9IGdpdDsgdGhlbgotICAgICAgJGNoZWNrX2dpdCB8fCBjb250 aW51ZQotICAgIGZpCi0gICAgIyBIb25vciAkQVBQIHZhcmlhYmxlcyAoJFRBUiwgJEFVVE9D T05GLCBldGMuKQotICAgIGFwcHZhcj0kKGVjaG8gJGFwcCB8IExDX0FMTD1DIHRyICdbYS16 XS0nICdbQS1aXV8nKQotICAgIHRlc3QgIiRhcHB2YXIiID0gVEFSICYmIGFwcHZhcj1BTVRB UgotICAgIGNhc2UgJGFwcHZhciBpbgotICAgICAgICBHWklQKSA7OyAjIERvIG5vdCB1c2Ug JEdaSVA6ICBpdCBjb250YWlucyBnemlwIG9wdGlvbnMuCi0gICAgICAgIFBFUkw6OiopIDs7 ICMgS2VlcCBwZXJsIG1vZHVsZXMgYXMtaXMKLSAgICAgICAgKikgZXZhbCAiYXBwPVwkeyRh cHB2YXItJGFwcH0iIDs7Ci0gICAgZXNhYwotCi0gICAgIyBIYW5kbGUgdGhlIHN0aWxsLWV4 cGVyaW1lbnRhbCBBdXRvbWFrZS1ORyBwcm9ncmFtcyBzcGVjaWFsbHkuCi0gICAgIyBUaGV5 IHJlbWFpbiBuYW1lZCBhcyB0aGUgbWFpbnN0cmVhbSBBdXRvbWFrZSBwcm9ncmFtcyAoImF1 dG9tYWtlIiwKLSAgICAjIGFuZCAiYWNsb2NhbCIpIHRvIGF2b2lkIGdyYXR1aXRvdXMgaW5j b21wYXRpYmlsaXRpZXMgd2l0aAotICAgICMgcHJlLWV4aXN0aW5nIHVzYWdlcyAoYnksIHNh eSwgYXV0b3JlY29uZiwgb3IgY3VzdG9tIGF1dG9nZW4uc2gKLSAgICAjIHNjcmlwdHMpLCBi dXQgY29ycmVjdGx5IGlkZW50aWZ5IHRoZW1zZWx2ZXMgKGFzIGJlaW5nIHBhcnQgb2YKLSAg ICAjICJHTlUgYXV0b21ha2UtbmciKSB3aGVuIGFza2VkIHRoZWlyIHZlcnNpb24uCi0gICAg Y2FzZSAkYXBwIGluCi0gICAgICBhdXRvbWFrZS1uZ3xhY2xvY2FsLW5nKQotICAgICAgICBh cHA9JHthcHAlLW5nfQotICAgICAgICAoJGFwcCAtLXZlcnNpb24gfCBncmVwICcoR05VIGF1 dG9tYWtlLW5nKScpID4vZGV2L251bGwgMj4mMSB8fCB7Ci0gICAgICAgICAgd2Fybl8gIkVy cm9yOiAnJGFwcCcgbm90IGZvdW5kIG9yIG5vdCBmcm9tIEF1dG9tYWtlLU5HIgotICAgICAg ICAgIHJldD0xCi0gICAgICAgICAgY29udGludWUKLSAgICAgICAgfSA7OwotICAgICAgIyBB bm90aGVyIGNoZWNrIGlzIGZvciBwZXJsIG1vZHVsZXMuICBUaGVzZSBjYW4gYmUgd3JpdHRl biBhcwotICAgICAgIyBlLmcuIHBlcmw6OlhNTDo6WFBhdGggaW4gY2FzZSBvZiBYTUw6OlhQ YXRoIG1vZHVsZSwgZXRjLgotICAgICAgcGVybDo6KikKLSAgICAgICAgIyBFeHRyYWN0IG1v ZHVsZSBuYW1lCi0gICAgICAgIGFwcD0iJHthcHAjcGVybDo6fSIKLSAgICAgICAgaWYgISAk UEVSTCAtbSIkYXBwIiAtZSAnZXhpdCAwJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAg ICAgICB3YXJuXyAiRXJyb3I6IHBlcmwgbW9kdWxlICckYXBwJyBub3QgZm91bmQiCi0gICAg ICAgICAgcmV0PTEKLSAgICAgICAgZmkKLSAgICAgICAgY29udGludWUKLSAgICAgICAgOzsK LSAgICBlc2FjCi0gICAgaWYgWyAiJHJlcV92ZXIiID0gIi0iIF07IHRoZW4KLSAgICAgICMg TWVyZWx5IHJlcXVpcmUgYXBwIHRvIGV4aXN0OyBub3QgYWxsIHByZXJlcSBhcHBzIGFyZSB3 ZWxsLWJlaGF2ZWQKLSAgICAgICMgc28gd2UgaGF2ZSB0byByZWx5IG9uICQ/IHJhdGhlciB0 aGFuIGdldF92ZXJzaW9uLgotICAgICAgaWYgISBjaGVja19leGlzdHMgLS12ZXJib3NlICRh cHA7IHRoZW4KLSAgICAgICAgd2Fybl8gIkVycm9yOiAnJGFwcCcgbm90IGZvdW5kIgotICAg ICAgICByZXQ9MQotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICAjIFJlcXVpcmUgYXBwIHRv IHByb2R1Y2UgYSBuZXcgZW5vdWdoIHZlcnNpb24gc3RyaW5nLgotICAgICAgaW5zdF92ZXI9 JChnZXRfdmVyc2lvbiAkYXBwKQotICAgICAgaWYgWyAhICIkaW5zdF92ZXIiIF07IHRoZW4K LSAgICAgICAgd2Fybl8gIkVycm9yOiAnJGFwcCcgbm90IGZvdW5kIgotICAgICAgICByZXQ9 MQotICAgICAgZWxzZQotICAgICAgICBsYXRlc3RfdmVyPSQoc29ydF92ZXIgJHJlcV92ZXIg JGluc3RfdmVyIHwgY3V0IC1kJyAnIC1mMikKLSAgICAgICAgaWYgWyAhICIkbGF0ZXN0X3Zl ciIgPSAiJGluc3RfdmVyIiBdOyB0aGVuCi0gICAgICAgICAgd2FybmZfICclc1xuJyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICJF cnJvcjogJyRhcHAnIHZlcnNpb24gPT0gJGluc3RfdmVyIGlzIHRvbyBvbGQiICBcCi0gICAg ICAgICAgICAgICIgICAgICAgJyRhcHAnIHZlcnNpb24gPj0gJHJlcV92ZXIgaXMgcmVxdWly ZWQiCi0gICAgICAgICAgcmV0PTEKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZmkKLSAg ZG9uZQotCi0gIHJldHVybiAkcmV0Ci19Ci0KLXByaW50X3ZlcnNpb25zKCkgewotICBlY2hv ICJQcm9ncmFtICAgIE1pbl92ZXJzaW9uIgotICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0t LS0tIgotICBwcmludGYgJXMgIiRidWlsZHJlcSIKLSAgZWNobyAiLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSIKLSAgIyBjYW4ndCBkZXBlbmQgb24gY29sdW1uIC10Ci19Ci0KLSMgY2hlY2tf YnVpbGRfcHJlcmVxdWlzaXRlcyBjaGVja19naXQKLWNoZWNrX2J1aWxkX3ByZXJlcXVpc2l0 ZXMoKQotewotICBjaGVja19naXQ9IiQxIgotCi0gICMgZ251bGliLXRvb2wgcmVxdWlyZXMg YXQgbGVhc3QgYXV0b21ha2UgYW5kIGF1dG9jb25mLgotICAjIElmIGVpdGhlciBpcyBub3Qg bGlzdGVkLCBhZGQgaXQgKHdpdGggbWluaW11bSB2ZXJzaW9uKSBhcyBhIHByZXJlcXVpc2l0 ZS4KLSAgY2FzZSAkYnVpbGRyZXEgaW4KLSAgICAqYXV0b21ha2UqKSA7OwotICAgICopIGJ1 aWxkcmVxPSJhdXRvbWFrZSAxLjkKLSRidWlsZHJlcSIgOzsKLSAgZXNhYwotICBjYXNlICRi dWlsZHJlcSBpbgotICAgICphdXRvY29uZiopIDs7Ci0gICAgKikgYnVpbGRyZXE9ImF1dG9j b25mIDIuNTkKLSRidWlsZHJlcSIgOzsKLSAgZXNhYwotCi0gICMgV2hlbiB3ZSBjYW4gZGVk dWNlIHRoYXQgZ251bGliLXRvb2wgd2lsbCByZXF1aXJlIHBhdGNoLAotICAjIGFuZCB3aGVu IHBhdGNoIGlzIG5vdCBhbHJlYWR5IGxpc3RlZCBhcyBhIHByZXJlcXVpc2l0ZSwgYWRkIGl0 LCB0b28uCi0gIGlmIHRlc3QgLWQgIiRsb2NhbF9nbF9kaXIiIFwKLSAgICAgJiYgISBmaW5k ICIkbG9jYWxfZ2xfZGlyIiAtbmFtZSAnKi5kaWZmJyAtZXhlYyBmYWxzZSB7fSArOyB0aGVu Ci0gICAgY2FzZSAkYnVpbGRyZXEgaW4KLSAgICAgICpwYXRjaCopIDs7Ci0gICAgICAqKSBi dWlsZHJlcT0icGF0Y2ggLQotJGJ1aWxkcmVxIiA7OwotICAgIGVzYWMKLSAgZmkKLQotICBp ZiAhIHByaW50ZiAnJXMnICIkYnVpbGRyZXEiIHwgY2hlY2tfdmVyc2lvbnM7IHRoZW4KLSAg ICBlY2hvID4mMgotICAgIGlmIHRlc3QgLWYgUkVBRE1FLXByZXJlcTsgdGhlbgotICAgICAg ZGllICJTZWUgUkVBRE1FLXByZXJlcSBmb3IgaG93IHRvIGdldCB0aGUgcHJlcmVxdWlzaXRl IHByb2dyYW1zIgotICAgIGVsc2UKLSAgICAgIGRpZSAiUGxlYXNlIGluc3RhbGwgdGhlIHBy ZXJlcXVpc2l0ZSBwcm9ncmFtcyIKLSAgICBmaQotICBmaQotCi0gICMgV2FybiB0aGUgdXNl ciBpZiBhdXRvbTR0ZSBhcHBlYXJzIHRvIGJlIGJyb2tlbjsgdGhpcyBjYXVzZXMga25vd24K LSAgIyBpc3N1ZXMgd2l0aCBhdCBsZWFzdCBnZXR0ZXh0IDAuMTguMy4KLSAgcHJvYmU9JChl Y2hvICdtNF9xdW90ZShbaGldKScgfCBhdXRvbTR0ZSAtbCBNNHN1Z2FyIC10ICdtNF9xdW90 ZTokJScgLSkKLSAgaWYgdGVzdCAieCRwcm9iZSIgIT0geGhpOyB0aGVuCi0gICAgd2Fybl8g IldBUk5JTkc6IHlvdXIgYXV0b200dGUgd3JhcHBlciBlYXRzIHN0ZGluOyIKLSAgICB3YXJu XyAiaWYgYm9vdHN0cmFwIGZhaWxzLCBjb25zaWRlciB1cGdyYWRpbmcgeW91ciBhdXRvdG9v bHMiCi0gIGZpCi19Ci0KLSMgZmluZF90b29sIEVOVlZBUiBOQU1FUy4uLgotIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlYXJjaCBmb3IgYSByZXF1aXJlZCBwcm9ncmFtLiAg VXNlIHRoZSB2YWx1ZSBvZiBFTlZWQVIsIGlmIHNldCwKLSMgb3RoZXJ3aXNlIGZpbmQgdGhl IGZpcnN0IG9mIHRoZSBOQU1FUyB0aGF0IGNhbiBiZSBydW4uCi0jIElmIGZvdW5kLCBzZXQg RU5WVkFSIHRvIHRoZSBwcm9ncmFtIG5hbWUsIGRpZSBvdGhlcndpc2UuCi0jCi0jIEZJWE1F OiBjb2RlIGR1cGxpY2F0aW9uLCBzZWUgYWxzbyBnbnUtd2ViLWRvYy11cGRhdGUuCi1maW5k X3Rvb2wgKCkKLXsKLSAgZmluZF90b29sX2VudnZhcj0kMQotICBzaGlmdAotICBmaW5kX3Rv b2xfbmFtZXM9JEAKLSAgZXZhbCAiZmluZF90b29sX3Jlcz1cJCRmaW5kX3Rvb2xfZW52dmFy IgotICBpZiB0ZXN0IHgiJGZpbmRfdG9vbF9yZXMiID0geDsgdGhlbgotICAgIGZvciBpOyBk bwotICAgICAgaWYgY2hlY2tfZXhpc3RzICRpOyB0aGVuCi0gICAgICAgIGZpbmRfdG9vbF9y ZXM9JGkKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZG9uZQotICBmaQotICBpZiB0 ZXN0IHgiJGZpbmRfdG9vbF9yZXMiID0geDsgdGhlbgotICAgIHdhcm5fICJvbmUgb2YgdGhl c2UgaXMgcmVxdWlyZWQ6ICRmaW5kX3Rvb2xfbmFtZXM7IgotICAgIGRpZSAgICJhbHRlcm5h dGl2ZWx5IHNldCAkZmluZF90b29sX2VudnZhciB0byBhIGNvbXBhdGlibGUgdG9vbCIKLSAg ZmkKLSAgZXZhbCAiJGZpbmRfdG9vbF9lbnZ2YXI9XCRmaW5kX3Rvb2xfcmVzIgotICBldmFs ICJleHBvcnQgJGZpbmRfdG9vbF9lbnZ2YXIiCi19Ci0KLSMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tIFByZXBhcmluZyBHTlVMSUJfU1JDRElSIGZvciB1c2UuIC0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIyBUaGlzIGlzIHBhcnQgb2YgYXV0b3B1bGwuc2gsIGJ1dCBib290c3RyYXAgbmVl ZHMgaXQgdG9vLCBmb3Igc2VsZi11cGdyYWRpbmcuCi0KLWNsZWFudXBfZ251bGliKCkgewot ICBzdGF0dXM9JD8KLSAgIyBYWFggSXQncyBhIGJhZCBpZGVhIHRvIGVyYXNlIHRoZSBzdWJt b2R1bGUgZGlyZWN0b3J5IGlmIGl0IGNvbnRhaW5zIGxvY2FsCi0gICMgICAgIG1vZGlmaWNh dGlvbnMuCi0gIHJtIC1mciAiJGdudWxpYl9wYXRoIgotICBleGl0ICRzdGF0dXMKLX0KLQot Z2l0X21vZHVsZXNfY29uZmlnICgpIHsKLSAgdGVzdCAtZiAuZ2l0bW9kdWxlcyAmJiBnaXQg Y29uZmlnIC0tZmlsZSAuZ2l0bW9kdWxlcyAiJEAiCi19Ci0KLXByZXBhcmVfR05VTElCX1NS Q0RJUiAoKQotewotICBpZiB0ZXN0IC1uICIkR05VTElCX1NSQ0RJUiI7IHRoZW4KLSAgICAj IFVzZSBHTlVMSUJfU1JDRElSIGRpcmVjdGx5LgotICAgICMgV2UgYWxyZWFkeSBjaGVja2Vk IHRoYXQgJEdOVUxJQl9TUkNESVIgcmVmZXJlbmNlcyBhIGRpcmVjdG9yeS4KLSAgICAjIFZl cmlmeSB0aGF0IGl0IGNvbnRhaW5zIGEgZ251bGliIGNoZWNrb3V0LgotICAgIHRlc3QgLWYg IiRHTlVMSUJfU1JDRElSL2dudWxpYi10b29sIiBcCi0gICAgICB8fCBkaWUgIkVycm9yOiAt LWdudWxpYi1zcmNkaXIgb3IgXCRHTlVMSUJfU1JDRElSIGlzIHNwZWNpZmllZCwgYnV0IGRv ZXMgbm90IGNvbnRhaW4gZ251bGliLXRvb2wiCi0gIGVsaWYgJHVzZV9naXQ7IHRoZW4KLSAg ICBnbnVsaWJfcGF0aD0kKGdpdF9tb2R1bGVzX2NvbmZpZyBzdWJtb2R1bGUuZ251bGliLnBh dGgpCi0gICAgdGVzdCAteiAiJGdudWxpYl9wYXRoIiAmJiBnbnVsaWJfcGF0aD1nbnVsaWIK LQotICAgICMgR2V0IGdudWxpYiBmaWxlcy4gIFBvcHVsYXRlICRnbnVsaWJfcGF0aCwgcG9z c2libHkgdXBkYXRpbmcgYQotICAgICMgc3VibW9kdWxlLCBmb3IgdXNlIGluIHRoZSByZXN0 IG9mIHRoZSBzY3JpcHQuCi0KLSAgICBpZiB0ZXN0IC1uICIkR05VTElCX1JFRkRJUiIgJiYg dGVzdCAtZCAiJEdOVUxJQl9SRUZESVIiLy5naXQgXAotICAgICAgICYmIGdpdF9tb2R1bGVz X2NvbmZpZyBzdWJtb2R1bGUuZ251bGliLnVybCA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAj IFVzZSBHTlVMSUJfUkVGRElSIGFzIGEgcmVmZXJlbmNlLgotICAgICAgZWNobyAiJDA6IGdl dHRpbmcgZ251bGliIGZpbGVzLi4uIgotICAgICAgaWYgZ2l0IHN1Ym1vZHVsZSAtaHxncmVw IC0tIC0tcmVmZXJlbmNlID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgUHJlZmVyIHRo ZSBvbmUtbGluZXIgYXZhaWxhYmxlIGluIGdpdCAxLjYuNCBvciBuZXdlci4KLSAgICAgICAg Z2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVmZXJlbmNlICIkR05VTElCX1JFRkRJ UiIgXAotICAgICAgICAgICIkZ251bGliX3BhdGgiIHx8IGV4aXQgJD8KLSAgICAgIGVsc2UK LSAgICAgICAgIyBUaGlzIGZhbGxiYWNrIGFsbG93cyBhdCBsZWFzdCBnaXQgMS41LjUuCi0g ICAgICAgIGlmIHRlc3QgLWYgIiRnbnVsaWJfcGF0aCIvZ251bGliLXRvb2w7IHRoZW4KLSAg ICAgICAgICAjIFNpbmNlIGZpbGUgYWxyZWFkeSBleGlzdHMsIGFzc3VtZSBzdWJtb2R1bGUg aW5pdCBhbHJlYWR5IGNvbXBsZXRlLgotICAgICAgICAgIGdpdCBzdWJtb2R1bGUgdXBkYXRl IC0tICIkZ251bGliX3BhdGgiIHx8IGV4aXQgJD8KLSAgICAgICAgZWxzZQotICAgICAgICAg ICMgT2xkZXIgZ2l0IGNhbid0IGNsb25lIGludG8gYW4gZW1wdHkgZGlyZWN0b3J5LgotICAg ICAgICAgIHJtZGlyICIkZ251bGliX3BhdGgiIDI+L2Rldi9udWxsCi0gICAgICAgICAgZ2l0 IGNsb25lIC0tcmVmZXJlbmNlICIkR05VTElCX1JFRkRJUiIgXAotICAgICAgICAgICAgIiQo Z2l0X21vZHVsZXNfY29uZmlnIHN1Ym1vZHVsZS5nbnVsaWIudXJsKSIgIiRnbnVsaWJfcGF0 aCIgXAotICAgICAgICAgICAgJiYgZ2l0IHN1Ym1vZHVsZSBpbml0IC0tICIkZ251bGliX3Bh dGgiIFwKLSAgICAgICAgICAgICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tICIkZ251bGli X3BhdGgiIFwKLSAgICAgICAgICAgIHx8IGV4aXQgJD8KLSAgICAgICAgZmkKLSAgICAgIGZp Ci0gICAgZWxzZQotICAgICAgIyBHTlVMSUJfUkVGRElSIGlzIG5vdCBzZXQgb3Igbm90IHVz YWJsZS4gSWdub3JlIGl0LgotICAgICAgaWYgZ2l0X21vZHVsZXNfY29uZmlnIHN1Ym1vZHVs ZS5nbnVsaWIudXJsID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgZWNobyAiJDA6IGdldHRp bmcgZ251bGliIGZpbGVzLi4uIgotICAgICAgICBnaXQgc3VibW9kdWxlIGluaXQgLS0gIiRn bnVsaWJfcGF0aCIgfHwgZXhpdCAkPwotICAgICAgICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAt LSAiJGdudWxpYl9wYXRoIiB8fCBleGl0ICQ/Ci0KLSAgICAgIGVsaWYgWyAhIC1kICIkZ251 bGliX3BhdGgiIF07IHRoZW4KLSAgICAgICAgZWNobyAiJDA6IGdldHRpbmcgZ251bGliIGZp bGVzLi4uIgotCi0gICAgICAgIHRyYXAgY2xlYW51cF9nbnVsaWIgSFVQIElOVCBQSVBFIFRF Uk0KLQotICAgICAgICBzaGFsbG93PQotICAgICAgICBpZiB0ZXN0IC16ICIkR05VTElCX1JF VklTSU9OIjsgdGhlbgotICAgICAgICAgIGlmIGdpdCBjbG9uZSAtaCAyPiYxIHwgZ3JlcCAt LSAtLWRlcHRoID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgICBzaGFsbG93PSctLWRl cHRoIDInCi0gICAgICAgICAgZmkKLSAgICAgICAgICBnaXQgY2xvbmUgJHNoYWxsb3cgJHtH TlVMSUJfVVJMOi0kZGVmYXVsdF9nbnVsaWJfdXJsfSAiJGdudWxpYl9wYXRoIiBcCi0gICAg ICAgICAgICB8fCBjbGVhbnVwX2dudWxpYgotICAgICAgICBlbHNlCi0gICAgICAgICAgaWYg Z2l0IGZldGNoIC1oIDI+JjEgfCBncmVwIC0tIC0tZGVwdGggPiAvZGV2L251bGw7IHRoZW4K LSAgICAgICAgICAgIHNoYWxsb3c9Jy0tZGVwdGggMicKLSAgICAgICAgICBmaQotICAgICAg ICAgIG1rZGlyIC1wICIkZ251bGliX3BhdGgiCi0gICAgICAgICAgIyBPbmx5IHdhbnQgYSBz aGFsbG93IGNoZWNrb3V0IG9mICRHTlVMSUJfUkVWSVNJT04sIGJ1dCBnaXQgZG9lcyBub3QK LSAgICAgICAgICAjIHN1cHBvcnQgY2xvbmluZyBieSBjb21taXQgaGFzaC4gU28gYXR0ZW1w dCBhIHNoYWxsb3cgZmV0Y2ggYnkgY29tbWl0Ci0gICAgICAgICAgIyBoYXNoIHRvIG1pbmlt aXplIHRoZSBhbW91bnQgb2YgZGF0YSBkb3dubG9hZGVkIGFuZCBjaGFuZ2VzIG5lZWRlZCB0 bwotICAgICAgICAgICMgYmUgcHJvY2Vzc2VkLCB3aGljaCBjYW4gZHJhc3RpY2FsbHkgcmVk dWNlIGRvd25sb2FkIGFuZCBwcm9jZXNzaW5nCi0gICAgICAgICAgIyB0aW1lIGZvciBjaGVj a291dC4gSWYgdGhlIGZldGNoIGJ5IGNvbW1pdCBmYWlscywgYSBzaGFsbG93IGZldGNoIGNh bgotICAgICAgICAgICMgbm90IGJlIHBlcmZvcm1lZCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93 IHdoYXQgdGhlIGRlcHRoIG9mIHRoZSBjb21taXQKLSAgICAgICAgICAjIGlzIHdpdGhvdXQg ZmV0Y2hpbmcgYWxsIGNvbW1pdHMuIFNvIGZhbGxiYWNrIHRvIGZldGNoaW5nIGFsbCBjb21t aXRzLgotICAgICAgICAgIGdpdCAtQyAiJGdudWxpYl9wYXRoIiBpbml0Ci0gICAgICAgICAg Z2l0IC1DICIkZ251bGliX3BhdGgiIHJlbW90ZSBhZGQgb3JpZ2luIFwKLSAgICAgICAgICAg ICAgJHtHTlVMSUJfVVJMOi0kZGVmYXVsdF9nbnVsaWJfdXJsfQotICAgICAgICAgIGdpdCAt QyAiJGdudWxpYl9wYXRoIiBmZXRjaCAkc2hhbGxvdyBvcmlnaW4gIiRHTlVMSUJfUkVWSVNJ T04iIFwKLSAgICAgICAgICAgIHx8IGdpdCAtQyAiJGdudWxpYl9wYXRoIiBmZXRjaCBvcmln aW4gXAotICAgICAgICAgICAgfHwgY2xlYW51cF9nbnVsaWIKLSAgICAgICAgICBnaXQgLUMg IiRnbnVsaWJfcGF0aCIgcmVzZXQgLS1oYXJkIEZFVENIX0hFQUQKLSAgICAgICAgZmkKLQot ICAgICAgICB0cmFwIC0gSFVQIElOVCBQSVBFIFRFUk0KLSAgICAgIGZpCi0gICAgZmkKLSAg ICBHTlVMSUJfU1JDRElSPSRnbnVsaWJfcGF0aAotICAgICMgVmVyaWZ5IHRoYXQgdGhlIHN1 Ym1vZHVsZSBjb250YWlucyBhIGdudWxpYiBjaGVja291dC4KLSAgICB0ZXN0IC1mICIkZ251 bGliX3BhdGgvZ251bGliLXRvb2wiIFwKLSAgICAgIHx8IGRpZSAiRXJyb3I6ICRnbnVsaWJf cGF0aCBpcyBzdXBwb3NlZCB0byBjb250YWluIGEgZ251bGliIGNoZWNrb3V0LCBidXQgZG9l cyBub3QgY29udGFpbiBnbnVsaWItdG9vbCIKLSAgZmkKLQotICAjIFhYWCBTaG91bGQgdGhp cyBiZSBkb25lIGlmICR1c2VfZ2l0IGlzIGZhbHNlPwotICBpZiB0ZXN0IC1kICIkR05VTElC X1NSQ0RJUiIvLmdpdCAmJiB0ZXN0IC1uICIkR05VTElCX1JFVklTSU9OIiBcCi0gICAgICYm ICEgZ2l0X21vZHVsZXNfY29uZmlnIHN1Ym1vZHVsZS5nbnVsaWIudXJsID4vZGV2L251bGw7 IHRoZW4KLSAgICAoY2QgIiRHTlVMSUJfU1JDRElSIiAmJiBnaXQgY2hlY2tvdXQgIiRHTlVM SUJfUkVWSVNJT04iKSB8fCBjbGVhbnVwX2dudWxpYgotICBmaQotCi0gICMgJEdOVUxJQl9T UkNESVIgbm93IHBvaW50cyB0byB0aGUgdmVyc2lvbiBvZiBnbnVsaWIgdG8gdXNlLCBhbmQK LSAgIyB3ZSBubyBsb25nZXIgbmVlZCB0byB1c2UgZ2l0IG9yICRnbnVsaWJfcGF0aCBiZWxv dyBoZXJlLgotfQotCi0jIC0tLS0tLS0tIFVwZ3JhZGluZyBib290c3RyYXAgdG8gdGhlIHZl cnNpb24gZm91bmQgaW4gR05VTElCX1NSQ0RJUi4gLS0tLS0tLS0KLQotdXBncmFkZV9ib290 c3RyYXAgKCkKLXsKLSAgeyBjbXAgLXMgIiRtZWRpciIvYm9vdHN0cmFwICIkR05VTElCX1NS Q0RJUi90b3AvYm9vdHN0cmFwIiBcCi0gICAgJiYgY21wIC1zICIkbWVkaXIiL2Jvb3RzdHJh cC1mdW5jbGliLnNoICIkR05VTElCX1NSQ0RJUi90b3AvYm9vdHN0cmFwLWZ1bmNsaWIuc2gi IFwKLSAgICAmJiBjbXAgLXMgIiRtZWRpciIvYXV0b3B1bGwuc2ggIiRHTlVMSUJfU1JDRElS L3RvcC9hdXRvcHVsbC5zaCIgXAotICAgICYmIGNtcCAtcyAiJG1lZGlyIi9hdXRvZ2VuLnNo ICIkR05VTElCX1NSQ0RJUi90b3AvYXV0b2dlbi5zaCI7IFwKLSAgfSB8fCB7Ci0gICAgZWNo byAiJDA6IHVwZGF0aW5nIGJvb3RzdHJhcCAmIGNvbXBhbmlvbnMgYW5kIHJlc3RhcnRpbmcu Li4iCi0gICAgY2FzZSAkKHNoIC1jICdlY2hvICIkMSInIC0tIGEpIGluCi0gICAgICBhKSBp Z25vcmVkPS0tOzsKLSAgICAgICopIGlnbm9yZWQ9aWdub3JlZDs7Ci0gICAgZXNhYwotICAg IGV4ZWMgc2ggLWMgXAotICAgICAgJ3sgaWYgdGVzdCAtZiAiJDEiOyB0aGVuIGNwICIkMSIg IiQzIjsgZWxzZSBjcCAiJDIiICIkMyI7IGZpOyB9ICYmIHsgaWYgdGVzdCAtZiAiJDQiOyB0 aGVuIGNwICIkNCIgIiQ1IjsgZWxzZSBybSAtZiAiJDUiOyBmaTsgfSAmJiB7IGlmIHRlc3Qg LWYgIiQ2IjsgdGhlbiBjcCAiJDYiICIkNyI7IGVsc2Ugcm0gLWYgIiQ3IjsgZmk7IH0gJiYg eyBpZiB0ZXN0IC1mICIkOCI7IHRoZW4gY3AgIiQ4IiAiJDkiOyBlbHNlIHJtIC1mICIkOSI7 IGZpOyB9ICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIHNoaWZ0ICYm IHNoaWZ0ICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIGV4ZWMgIiR7Q09ORklHX1NI RUxMLS9iaW4vc2h9IiAiJEAiJyBcCi0gICAgICAkaWdub3JlZCBcCi0gICAgICAiJEdOVUxJ Ql9TUkNESVIvdG9wL2Jvb3RzdHJhcCIgIiRHTlVMSUJfU1JDRElSL2J1aWxkLWF1eC9ib290 c3RyYXAiICIkbWVkaXIvYm9vdHN0cmFwIiBcCi0gICAgICAiJEdOVUxJQl9TUkNESVIvdG9w L2Jvb3RzdHJhcC1mdW5jbGliLnNoIiAiJG1lZGlyL2Jvb3RzdHJhcC1mdW5jbGliLnNoIiBc Ci0gICAgICAiJEdOVUxJQl9TUkNESVIvdG9wL2F1dG9wdWxsLnNoIiAiJG1lZGlyL2F1dG9w dWxsLnNoIiBcCi0gICAgICAiJEdOVUxJQl9TUkNESVIvdG9wL2F1dG9nZW4uc2giICIkbWVk aXIvYXV0b2dlbi5zaCIgXAotICAgICAgIiQwIiAiJEAiIC0tbm8tYm9vdHN0cmFwLXN5bmMK LSAgfQotfQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaWYgdGVzdCB4IiRnbnVs aWJfbW9kdWxlcyRnbnVsaWJfZmlsZXMkZ251bGliX2V4dHJhX2ZpbGVzIiA9IHg7IHRoZW4K LSAgdXNlX2dudWxpYj1mYWxzZQotZWxzZQotICB1c2VfZ251bGliPXRydWUKLWZpCi0KLSMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIExvY2FsIFZhcmlhYmxlczoKLSMgZXZhbDog KGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1w LXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUw Mm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQzAiCi0jIHRpbWUt c3RhbXAtZW5kOiAiOyAjIFVUQyIKLSMgRW5kOgotLSAKMi4yNS4xCgo= --------------qDD2y7EqdJ3kO3p8bPIWPeoy-- From unknown Tue Jun 17 01:44:33 2025 X-Loop: help-debbugs@gnu.org Subject: bug#56749: modernize bootstrap.conf Resent-From: Jim Meyering Original-Sender: "Debbugs-submit" Resent-CC: bug-gzip@gnu.org Resent-Date: Tue, 27 Dec 2022 19:31:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 56749 X-GNU-PR-Package: gzip X-GNU-PR-Keywords: To: Paul Eggert Cc: Bruno Haible , 56749@debbugs.gnu.org Received: via spool by 56749-submit@debbugs.gnu.org id=B56749.167216941919077 (code B ref 56749); Tue, 27 Dec 2022 19:31:02 +0000 Received: (at 56749) by debbugs.gnu.org; 27 Dec 2022 19:30:19 +0000 Received: from localhost ([127.0.0.1]:56531 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pAFeU-0004xb-7j for submit@debbugs.gnu.org; Tue, 27 Dec 2022 14:30:19 -0500 Received: from mail-lf1-f43.google.com ([209.85.167.43]:40757) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pAFeR-0004xG-EX for 56749@debbugs.gnu.org; Tue, 27 Dec 2022 14:30:17 -0500 Received: by mail-lf1-f43.google.com with SMTP id g13so20842756lfv.7 for <56749@debbugs.gnu.org>; Tue, 27 Dec 2022 11:30:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=E79Aoxui21VAEDQN2oDQAAfpOs0MsenbuPGrutxZAkQ=; b=U09ftGZ8jq3TbS0FqZ/LXeqR2ZT9Jiuk+SFVym/5Yq2f3GZnrvhxSidCR5XyRVgrZI RUskY2h2iG7RGNeUs4g/h2HyvklWcmx9cmBPWXepcFGSDEPCRzuGV7qCepfTiLKSzRYH dK7dKfvFUPXO+Jyx14ELPqiOKjjHWycaO/Q89rO0yNvcHopoXH6CZzH4vDA/lSiowsel 4uC/1+IhrtP89wPBg726MINOqrGl+anfNSDXWgGX3mCyeGkfDDjCwHdfHBFPdZlM8lwu X5VB+6/wEZ8JBkAcrkipvuGi6n7JqKiXx5RVAIg3kTP5Im2dV7W7vRhsz/EcFsHSIQ/C KcvQ== X-Gm-Message-State: AFqh2ko72pWctCXG4B+tGfXoCAi1czf1FwlmNJr6FpVsutTSPwZJZqYE wOrRfdsIHKObo/YKN3z4DBmQnNrYHj68pOd4MFI= X-Google-Smtp-Source: AMrXdXu/R0ZZ741jnhkrmKSmYWCSKmXDEtUDkQ6ZbvUlzhFcgBZl9FGVD41RwerIIIBoC9lCvN479ila/MX68pYLfkc= X-Received: by 2002:ac2:42d3:0:b0:4a2:4b43:9aad with SMTP id n19-20020ac242d3000000b004a24b439aadmr1727370lfl.213.1672169409394; Tue, 27 Dec 2022 11:30:09 -0800 (PST) MIME-Version: 1.0 References: <9016636.rMLUfLXkoz@nimes> <05242ce1-499d-d419-45d6-60823085db26@cs.ucla.edu> In-Reply-To: From: Jim Meyering Date: Tue, 27 Dec 2022 11:29:57 -0800 Message-ID: Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.2 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.8 (/) On Tue, Dec 27, 2022 at 11:15 AM Paul Eggert wrote: ... > To make this easier I changed gnulib/build-aux/bootstrap so that it > doesn't need to replace itself. Instead, it has options --pull and > --gen, so that './bootstrap --pull' is equivalent to librarified > ./autopull.sh and './bootstrap --gen' is equivalent to librarified > ./autogen.sh. These new options work regardless of whether one uses the > standalone or the librarified bootstrap, and the standalone bootstrap > need not replace itself when it runs. > > I propagated this into gzip by installing the attached patch, the only > creative part of which is its README-hacking change. The rest simply > syncs from Gnulib, using the standalone bootstrap instead of the > librarified one. > > Assuming this sort of thing works out, I'd like to do something similar > with grep, diffutils, etc. Thank you for making it easier to integrate Bruno's improved bootstrap functionality.