Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1YQIGH-0003Id-BH for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2015 16:23:05 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1YQIGG-0003gT-Bo for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2015 16:23:04 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1YQIGD-0003gK-RC for pgsql-hackers@postgresql.org; Tue, 24 Feb 2015 16:23:02 +0000 Received: from linode.thelabyrinth.net ([2600:3c00::f03c:91ff:fe69:8d76] helo=mail.thelabyrinth.net) by magus.postgresql.org with esmtps (TLS1.1:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1YQIG4-0008Bl-Qo for pgsql-hackers@postgresql.org; Tue, 24 Feb 2015 16:23:00 +0000 Received: from theseus.local (unknown [73.0.171.94]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dsteele) by mail.thelabyrinth.net (Postfix) with ESMTPSA id 2417012D2D; Tue, 24 Feb 2015 16:22:43 +0000 (UTC) Message-ID: <54ECA551.8060306@pgmasters.net> Date: Tue, 24 Feb 2015 11:22:41 -0500 From: David Steele User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Stephen Frost CC: pgsql-hackers@postgresql.org, Abhijit Menon-Sen Subject: Re: Auditing extension for PostgreSQL (Take 2) References: <54E005CC.1060605@pgmasters.net> <20150217153402.GQ6717@tamriel.snowman.net> <54EB4E56.7050102@pgmasters.net> In-Reply-To: <54EB4E56.7050102@pgmasters.net> OpenPGP: id=A2739CF3 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="ddAqMaG096scLnraxBLcIoMDX0DdtrFD3" X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --ddAqMaG096scLnraxBLcIoMDX0DdtrFD3 Content-Type: multipart/mixed; boundary="------------080700040306030303080308" This is a multi-part message in MIME format. --------------080700040306030303080308 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 2/23/15 10:59 AM, David Steele wrote: > On 2/17/15 10:34 AM, Stephen Frost wrote: >> There seems to be a number of places which are 'pgaudit' and a bunch >> that are 'pg_audit'. I'm guessing you were thinking 'pg_audit', but >> it'd be good to clean up and make them all consistent. >=20 > Fixed, though I still left the file name as pgaudit.sgml since all but > one module follow that convention. It turns out there are a few places where _ is not allowed. I've reverted a few places to fix the doc build while maintaining the name as pg_audit in the visible docs. >> Perhaps I missed it, but it'd be good to point out that GUCs can be se= t >> at various levels. I know we probably say that somewhere else, but it= 's >> particularly relevant for this. I added notes as suggested. Patch v3 is attached. --=20 - David Steele david@pgmasters.net --------------080700040306030303080308 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pg_audit-v3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pg_audit-v3.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4 IDE5NWQ0NDcuLmQ4ZTc1ZjQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9NYWtlZmlsZQpAQCAtMjksNiArMjksNyBAQCBTVUJESVJTID0gXAogCQlwYWdl aW5zcGVjdAlcCiAJCXBhc3N3b3JkY2hlY2sJXAogCQlwZ19hcmNoaXZlY2xlYW51cCBcCisJ CXBnX2F1ZGl0CVwKIAkJcGdfYnVmZmVyY2FjaGUJXAogCQlwZ19mcmVlc3BhY2VtYXAgXAog CQlwZ19wcmV3YXJtCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvTWFrZWZpbGUg Yi9jb250cmliL3BnX2F1ZGl0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjMyYmM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0 L01ha2VmaWxlCkBAIC0wLDAgKzEsMjAgQEAKKyMgcGdfYXVkaXQvTWFrZWZpbGUKKworTU9E VUxFID0gcGdfYXVkaXQKK01PRFVMRV9iaWcgPSBwZ19hdWRpdAorT0JKUyA9IHBnX2F1ZGl0 Lm8KKworRVhURU5TSU9OID0gcGdfYXVkaXQKKworREFUQSA9IHBnX2F1ZGl0LS0xLjAuMC5z cWwKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAk KHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1 YmRpciA9IGNvbnRyaWIvcGdfYXVkaXQKK3RvcF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRl ICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3Ny Y2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQtLTEuMC4wLnNxbCBiL2NvbnRyaWIvcGdfYXVkaXQv cGdfYXVkaXQtLTEuMC4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4yZWVlM2I5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRp dC0tMS4wLjAuc3FsCkBAIC0wLDAgKzEsNCBAQAorLyogcGdfYXVkaXQvcGdfYXVkaXQtLTEu MC4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3Fs LCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUg RVhURU5TSU9OIHBnX2F1ZGl0IiB0byBsb2FkIHRoaXMgZmlsZS5ccXVpdApkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jIGIvY29udHJpYi9wZ19hdWRpdC9wZ19h dWRpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDY1YTgKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmMKQEAgLTAsMCAr MSwxMTAyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcGdfYXVkaXQuYwor ICoKKyAqIEFuIGF1ZGl0aW5nIGV4dGVuc2lvbiBmb3IgUG9zdGdyZVNRTC4gSW1wcm92ZXMg b24gc3RhbmRhcmQgc3RhdGVtZW50IGxvZ2dpbmcKKyAqIGJ5IGFkZGluZyBtb3JlIGxvZ2dp bmcgY2xhc3Nlcywgb2JqZWN0IGxldmVsIGxvZ2dpbmcsIGFuZCBwcm92aWRpbmcKKyAqIGZ1 bGx5LXF1YWxpZmllZCBvYmplY3QgbmFtZXMgZm9yIGFsbCBETUwgYW5kIG1hbnkgRERMIHN0 YXRlbWVudHMgKFNlZQorICogcGdfYXVkaXQuc2dtbCBmb3IgZGV0YWlscykuCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQkgIGNvbnRyaWIvcGdfYXVkaXQv cGdfYXVkaXQuYworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCisjaW5j bHVkZSAiYWNjZXNzL3N5c2F0dHIuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWNj ZXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNhdGFs b2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kcy5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1ZGUgImV4 ZWN1dG9yL3NwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImxpYnBx L2F1dGguaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorI2luY2x1ZGUgInRjb3AvdXRp bGl0eS5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3Rp bWVzdGFtcC5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK3ZvaWQgX1BHX2luaXQodm9pZCk7 CisKKy8qCisgKiBhdWRpdFJvbGUgaXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcGdhdWRp dC5yb2xlIEdVQywgd2hpY2ggY29udGFpbnMgdGhlCisgKiByb2xlIGZvciBncmFudC1iYXNl ZCBhdWRpdGluZy4KKyAqLworY2hhciAqYXVkaXRSb2xlID0gTlVMTDsKKworLyoKKyAqIGF1 ZGl0TG9nIGlzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIHBnYXVkaXQubG9nIEdVQywgZS5n LiAicmVhZCwgd3JpdGUsIGRkbCIKKyAqIChpdCdzIG5vdCB1c2VkIGJ5IHRoZSBtb2R1bGUg YnV0IGlzIHJlcXVpcmVkIGJ5IERlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKS4KKyAqIEVh Y2ggdG9rZW4gY29ycmVzcG9uZHMgdG8gYSBmbGFnIGluIGVudW0gTG9nQ2xhc3MgYmVsb3cu IFdlIGNvbnZlcnQgdGhlIGxpc3QKKyAqIG9mIHRva2VucyBpbnRvIGEgYml0bWFwIGluIGF1 ZGl0TG9nQml0bWFwIGZvciBpbnRlcm5hbCB1c2UuCisgKi8KK2NoYXIgKmF1ZGl0TG9nID0g TlVMTDsKK3N0YXRpYyB1aW50NjQgYXVkaXRMb2dCaXRtYXAgPSAwOworCisvKgorICogU3Ry aW5nIGNvbnN0YW50cyBmb3IgYXVkaXQgdHlwZXMgLSB1c2VkIHdoZW4gbG9nZ2luZyB0byBk aXN0aW5ndWlzaCBzZXNzaW9uCisgKiB2cy4gb2JqZWN0IGF1ZGl0aW5nLgorICovCisjZGVm aW5lIEFVRElUX1RZUEVfT0JKRUNUCSJPQkpFQ1QiCisjZGVmaW5lIEFVRElUX1RZUEVfU0VT U0lPTgkiU0VTU0lPTiIKKworLyoKKyAqIFN0cmluZyBjb25zdGFudHMgZm9yIGxvZyBjbGFz c2VzIC0gdXNlZCB3aGVuIHByb2Nlc3NpbmcgdG9rZW5zIGluIHRoZQorICogcGdhdWRpdC5s b2cgR1VDLgorICovCisjZGVmaW5lIENMQVNTX0RETAkJCSJEREwiCisjZGVmaW5lIENMQVNT X0ZVTkNUSU9OCQkiRlVOQ1RJT04iCisjZGVmaW5lIENMQVNTX01JU0MJCSAgICAiTUlTQyIK KyNkZWZpbmUgQ0xBU1NfUkVBRAkJCSJSRUFEIgorI2RlZmluZSBDTEFTU19XUklURQkJCSJX UklURSIKKworI2RlZmluZSBDTEFTU19BTEwJCQkiQUxMIgorI2RlZmluZSBDTEFTU19OT05F CQkJIk5PTkUiCisKKy8qIExvZyBjbGFzcyBlbnVtIHVzZWQgdG8gcmVwcmVzZW50IGJpdHMg aW4gYXVkaXRMb2dCaXRtYXAgKi8KK2VudW0gTG9nQ2xhc3MKK3sKKwlMT0dfTk9ORSA9IDAs CisKKwkvKiBTRUxFQ1QgKi8KKwlMT0dfUkVBRCA9ICgxIDw8IDApLAorCisJLyogSU5TRVJU LCBVUERBVEUsIERFTEVURSwgVFJVTkNBVEUgKi8KKwlMT0dfV1JJVEUgPSAoMSA8PCAxKSwK KworCS8qIERETDogQ1JFQVRFL0RST1AvQUxURVIgKi8KKwlMT0dfRERMID0gKDEgPDwgMiks CisKKwkvKiBGdW5jdGlvbiBleGVjdXRpb24gKi8KKwlMT0dfRlVOQ1RJT04gPSAoMSA8PCA0 KSwKKworCS8qIEZ1bmN0aW9uIGV4ZWN1dGlvbiAqLworCUxPR19NSVNDID0gKDEgPDwgNSks CisKKwkvKiBBYnNvbHV0ZWx5IGV2ZXJ5dGhpbmcgKi8KKwlMT0dfQUxMID0gfih1aW50NjQp MAorfTsKKworLyogU3RyaW5nIGNvbnN0YW50cyBmb3IgbG9nZ2luZyBjb21tYW5kcyAqLwor I2RlZmluZSBDT01NQU5EX0RFTEVURQkJIkRFTEVURSIKKyNkZWZpbmUgQ09NTUFORF9FWEVD VVRFCQkiRVhFQ1VURSIKKyNkZWZpbmUgQ09NTUFORF9JTlNFUlQJCSJJTlNFUlQiCisjZGVm aW5lIENPTU1BTkRfVVBEQVRFCQkiVVBEQVRFIgorI2RlZmluZSBDT01NQU5EX1NFTEVDVAkJ IlNFTEVDVCIKKworI2RlZmluZSBDT01NQU5EX1VOS05PV04JCSJVTktOT1dOIgorCisvKiBT dHJpbmcgY29uc3RhbnRzIGZvciBsb2dnaW5nIG9iamVjdCB0eXBlcyAqLworI2RlZmluZSBP QkpFQ1RfVFlQRV9DT01QT1NJVEVfVFlQRQkiQ09NUE9TSVRFIFRZUEUiCisjZGVmaW5lIE9C SkVDVF9UWVBFX0ZPUkVJR05fVEFCTEUJIkZPUkVJR04gVEFCTEUiCisjZGVmaW5lIE9CSkVD VF9UWVBFX0ZVTkNUSU9OCQkiRlVOQ1RJT04iCisjZGVmaW5lIE9CSkVDVF9UWVBFX0lOREVY CQkJIklOREVYIgorI2RlZmluZSBPQkpFQ1RfVFlQRV9UQUJMRQkJCSJUQUJMRSIKKyNkZWZp bmUgT0JKRUNUX1RZUEVfVE9BU1RWQUxVRQkJIlRPQVNUVkFMVUUiCisjZGVmaW5lIE9CSkVD VF9UWVBFX01BVFZJRVcJCQkiTUFURVJJQUxJWkVEIFZJRVciCisjZGVmaW5lIE9CSkVDVF9U WVBFX1NFUVVFTkNFCQkiU0VRVUVOQ0UiCisjZGVmaW5lIE9CSkVDVF9UWVBFX1ZJRVcJCQki VklFVyIKKworI2RlZmluZSBPQkpFQ1RfVFlQRV9VTktOT1dOCQkJIlVOS05PV04iCisKKy8q CisgKiBBbiBBdWRpdEV2ZW50IHJlcHJlc2VudHMgYW4gb3BlcmF0aW9uIHRoYXQgcG90ZW50 aWFsbHkgYWZmZWN0cyBhIHNpbmdsZQorICogb2JqZWN0LiBJZiBhbiB1bmRlcmx5aW5nIGNv bW1hbmQgYWZmZWN0cyBtdWx0aXBsZSBvYmplY3RzIG11bHRpcGxlCisgKiBBdWRpdEV2ZW50 cyBtdXN0IGJlIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGl0LgorICovCit0eXBlZGVmIHN0cnVj dAoreworCUxvZ1N0bXRMZXZlbCBsb2dTdG10TGV2ZWw7CisJTm9kZVRhZyBjb21tYW5kVGFn OworCWNvbnN0IGNoYXIgKmNvbW1hbmQ7CisJY29uc3QgY2hhciAqb2JqZWN0VHlwZTsKKwlj aGFyICpvYmplY3ROYW1lOworCWNvbnN0IGNoYXIgKmNvbW1hbmRUZXh0OworCWJvb2wgZ3Jh bnRlZDsKK30gQXVkaXRFdmVudDsKKworLyoKKyAqIFNldCBpZiBhIGZ1bmN0aW9uIGJlbG93 IGxvZ191dGlsaXR5X2NvbW1hbmQoKSBoYXMgbG9nZ2VkIHRoZSBldmVudCAtIHByZXZlbnRz CisgKiBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uIGZyb20gbG9nZ2luZyB3aGVuIHRoZSBldmVu dCBjb3VsZCBiZSBsb2dnZWQgaW4KKyAqIG11bHRpcGxlIHBsYWNlcy4KKyAqLworYm9vbCB1 dGlsaXR5Q29tbWFuZExvZ2dlZCA9IGZhbHNlOworYm9vbCB1dGlsaXR5Q29tbWFuZEluUHJv Z3Jlc3MgPSBmYWxzZTsKK0F1ZGl0RXZlbnQgdXRpbGl0eUF1ZGl0RXZlbnQ7CisKKy8qCisg KiBUYWtlcyBhbiBBdWRpdEV2ZW50IGFuZCByZXR1cm5zIHRydWUgb3IgZmFsc2UgZGVwZW5k aW5nIG9uIHdoZXRoZXIgdGhlIGV2ZW50CisgKiBzaG91bGQgYmUgbG9nZ2VkIGFjY29yZGlu ZyB0byB0aGUgcGdhdWRpdC5yb2xlcy9sb2cgc2V0dGluZ3MuIElmIGl0IHJldHVybnMKKyAq IHRydWUsIGFsc28gZmlsbHMgaW4gdGhlIG5hbWUgb2YgdGhlIExvZ0NsYXNzIHdoaWNoIGl0 IGlzIGxvZ2dlZCB1bmRlci4KKyAqLworc3RhdGljIGJvb2wKK2xvZ19jaGVjayhBdWRpdEV2 ZW50ICplLCBjb25zdCBjaGFyICoqY2xhc3NuYW1lKQoreworCWVudW0gTG9nQ2xhc3MgY2xh c3MgPSBMT0dfTk9ORTsKKworCS8qIEJ5IGRlZmF1bHQgcHV0IGV2ZXJ5dGhpbmcgaW4gdGhl IE1JU0MgY2xhc3MuICovCisJKmNsYXNzbmFtZSA9IENMQVNTX01JU0M7CisJY2xhc3MgPSBM T0dfTUlTQzsKKworCS8qCisJICogTG9vayBhdCB0aGUgdHlwZSBvZiB0aGUgY29tbWFuZCBh bmQgZGVjaWRlIHdoYXQgTG9nQ2xhc3MgbmVlZHMgdG8gYmUKKwkgKiBlbmFibGVkIGZvciB0 aGUgY29tbWFuZCB0byBiZSBsb2dnZWQuCisJICovCisJc3dpdGNoIChlLT5sb2dTdG10TGV2 ZWwpCisJeworCQljYXNlIExPR1NUTVRfTU9EOgorCQkJKmNsYXNzbmFtZSA9IENMQVNTX1dS SVRFOworCQkJY2xhc3MgPSBMT0dfV1JJVEU7CisJCQlicmVhazsKKworCQljYXNlIExPR1NU TVRfRERMOgorCQkJKmNsYXNzbmFtZSA9IENMQVNTX0RETDsKKwkJCWNsYXNzID0gTE9HX0RE TDsKKworCQljYXNlIExPR1NUTVRfQUxMOgorCQkJc3dpdGNoIChlLT5jb21tYW5kVGFnKQor CQkJeworCQkJCWNhc2UgVF9Db3B5U3RtdDoKKwkJCQljYXNlIFRfU2VsZWN0U3RtdDoKKwkJ CQljYXNlIFRfUHJlcGFyZVN0bXQ6CisJCQkJY2FzZSBUX1BsYW5uZWRTdG10OgorCQkJCWNh c2UgVF9FeGVjdXRlU3RtdDoKKwkJCQkJKmNsYXNzbmFtZSA9IENMQVNTX1JFQUQ7CisJCQkJ CWNsYXNzID0gTE9HX1JFQUQ7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBUX1ZhY3V1bVN0 bXQ6CisJCQkJY2FzZSBUX1JlaW5kZXhTdG10OgorCQkJCQkqY2xhc3NuYW1lID0gQ0xBU1Nf RERMOworCQkJCQljbGFzcyA9IExPR19EREw7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBU X0RvU3RtdDoKKwkJCQkJKmNsYXNzbmFtZSA9IENMQVNTX0ZVTkNUSU9OOworCQkJCQljbGFz cyA9IExPR19GVU5DVElPTjsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQli cmVhazsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgTE9HU1RNVF9OT05FOgorCQkJYnJl YWs7CisJfQorCisJLyoKKwkgKiBXZSBsb2cgYXVkaXQgZXZlbnRzIHVuZGVyIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKwkgKgorCSAqIDEuIElmIHRoZSBhdWRpdCByb2xlIGhhcyBi ZWVuIGV4cGxpY2l0bHkgZ3JhbnRlZCBwZXJtaXNzaW9uIGZvcgorCSAqICAgIGFuIG9wZXJh dGlvbi4KKwkgKi8KKwlpZiAoZS0+Z3JhbnRlZCkKKwl7CisJCXJldHVybiB0cnVlOworCX0K KworCS8qIDIuIElmIHRoZSBldmVudCBiZWxvbmdzIHRvIGEgY2xhc3MgY292ZXJlZCBieSBw Z2F1ZGl0LmxvZy4gKi8KKwlpZiAoKGF1ZGl0TG9nQml0bWFwICYgY2xhc3MpID09IGNsYXNz KQorCXsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgor ICogVGFrZXMgYW4gQXVkaXRFdmVudCBhbmQsIGlmIGl0IGxvZ19jaGVjaygpLCB3cml0ZXMg aXQgdG8gdGhlIGF1ZGl0IGxvZy4gVGhlCisgKiBBdWRpdEV2ZW50IGlzIGFzc3VtZWQgdG8g YmUgY29tcGxldGVseSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlciAodW5rbm93bgorICogdmFs dWVzIG11c3QgYmUgc2V0IHRvICIiIHNvIHRoYXQgdGhleSBjYW4gYmUgbG9nZ2VkIHdpdGhv dXQgZXJyb3IgY2hlY2tpbmcpLgorICovCitzdGF0aWMgdm9pZAorbG9nX2F1ZGl0X2V2ZW50 KEF1ZGl0RXZlbnQgKmUpCit7CisJY29uc3QgY2hhciAqY2xhc3NuYW1lOworCisJLyogQ2hl Y2sgdGhhdCB0aGlzIGV2ZW50IHNob3VsZCBiZSBsb2dnZWQuICovCisJaWYgKCFsb2dfY2hl Y2soZSwgJmNsYXNzbmFtZSkpCisJCXJldHVybjsKKworCS8qIExvZyB2aWEgZXJlcG9ydCgp LiAqLworCWVyZXBvcnQoTE9HLAorCQkJKGVycm1zZygiQVVESVQ6ICVzLCVzLCVzLCVzLCVz LCVzIiwKKwkJCQkJZS0+Z3JhbnRlZCA/IEFVRElUX1RZUEVfT0JKRUNUIDogQVVESVRfVFlQ RV9TRVNTSU9OLAorCQkJCQljbGFzc25hbWUsIGUtPmNvbW1hbmQsIGUtPm9iamVjdFR5cGUs IGUtPm9iamVjdE5hbWUsCisJCQkJCWUtPmNvbW1hbmRUZXh0KSwKKwkJCSBlcnJoaWRlc3Rt dCh0cnVlKSkpOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIHJvbGUgb3IgYW55IGluaGVy aXRlZCByb2xlIGhhcyBhbnkgcGVybWlzc2lvbiBpbiB0aGUgbWFzay4gIFRoZQorICogcHVi bGljIHJvbGUgaXMgZXhjbHVkZWQgZnJvbSB0aGlzIGNoZWNrIGFuZCBzdXBlcnVzZXIgcGVy bWlzc2lvbnMgYXJlIG5vdAorICogY29uc2lkZXJlZC4KKyAqLworc3RhdGljIGJvb2wKK2xv Z19hY2xfY2hlY2soRGF0dW0gYWNsRGF0dW0sIE9pZCBhdWRpdE9pZCwgQWNsTW9kZSBtYXNr KQoreworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCUFjbAkJICAgKmFjbDsKKwlBY2xJdGVt ICAgICphY2xJdGVtRGF0YTsKKwlpbnQJCQlhY2xJbmRleDsKKwlpbnQJCQlhY2xUb3RhbDsK KworCS8qIERldG9hc3QgY29sdW1uJ3MgQUNMIGlmIG5lY2Vzc2FyeSAqLworCWFjbCA9IERh dHVtR2V0QWNsUChhY2xEYXR1bSk7CisKKwkvKiBHZXQgdGhlIGFjbCBsaXN0IGFuZCB0b3Rh bCAqLworCWFjbFRvdGFsID0gQUNMX05VTShhY2wpOworCWFjbEl0ZW1EYXRhID0gQUNMX0RB VChhY2wpOworCisJLyogQ2hlY2sgcHJpdmlsZWdlcyBncmFudGVkIGRpcmVjdGx5IHRvIGF1 ZGl0T2lkICovCisJZm9yIChhY2xJbmRleCA9IDA7IGFjbEluZGV4IDwgYWNsVG90YWw7IGFj bEluZGV4KyspCisJeworCQlBY2xJdGVtICphY2xJdGVtID0gJmFjbEl0ZW1EYXRhW2FjbElu ZGV4XTsKKworCQlpZiAoYWNsSXRlbS0+YWlfZ3JhbnRlZSA9PSBhdWRpdE9pZCAmJgorCQkJ YWNsSXRlbS0+YWlfcHJpdnMgJiBtYXNrKQorCQl7CisJCQlyZXN1bHQgPSB0cnVlOworCQkJ YnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIHByaXZpbGVnZXMgZ3JhbnRlZCBp bmRpcmVjdGx5IHZpYSByb2xlIG1lbWJlcnNoaXBzLiBXZSBkbyB0aGlzIGluCisJICogYSBz ZXBhcmF0ZSBwYXNzIHRvIG1pbmltaXplIGV4cGVuc2l2ZSBpbmRpcmVjdCBtZW1iZXJzaGlw IHRlc3RzLiAgSW4KKwkgKiBwYXJ0aWN1bGFyLCBpdCdzIHdvcnRoIHRlc3Rpbmcgd2hldGhl ciBhIGdpdmVuIEFDTCBlbnRyeSBncmFudHMgYW55CisJICogcHJpdmlsZWdlcyBzdGlsbCBv ZiBpbnRlcmVzdCBiZWZvcmUgd2UgcGVyZm9ybSB0aGUgaGFzX3ByaXZzX29mX3JvbGUKKwkg KiB0ZXN0LgorCSAqLworCWlmICghcmVzdWx0KQorCXsKKwkJZm9yIChhY2xJbmRleCA9IDA7 IGFjbEluZGV4IDwgYWNsVG90YWw7IGFjbEluZGV4KyspCisJCXsKKwkJCUFjbEl0ZW0gKmFj bEl0ZW0gPSAmYWNsSXRlbURhdGFbYWNsSW5kZXhdOworCisJCQkvKiBEb24ndCB0ZXN0IHB1 YmxpYyBvciBhdWRpdE9pZCAoaXQgaGFzIGJlZW4gdGVzdGVkIGFscmVhZHkpICovCisJCQlp ZiAoYWNsSXRlbS0+YWlfZ3JhbnRlZSA9PSBBQ0xfSURfUFVCTElDIHx8CisJCQkJYWNsSXRl bS0+YWlfZ3JhbnRlZSA9PSBhdWRpdE9pZCkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJ CSAqIENoZWNrIHRoYXQgdGhlIHJvbGUgaGFzIHRoZSByZXF1aXJlZCBwcml2aWxlZ2VzIGFu ZCB0aGF0IGl0IGlzCisJCQkgKiBpbmhlcml0ZWQgYnkgYXVkaXRPaWQuCisJCQkgKi8KKwkJ CWlmIChhY2xJdGVtLT5haV9wcml2cyAmIG1hc2sgJiYKKwkJCQloYXNfcHJpdnNfb2Zfcm9s ZShhdWRpdE9pZCwgYWNsSXRlbS0+YWlfZ3JhbnRlZSkpCisJCQl7CisJCQkJcmVzdWx0ID0g dHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIGlmIHdlIGhhdmUgYSBk ZXRvYXN0ZWQgY29weSwgZnJlZSBpdCAqLworCWlmIChhY2wgJiYgKFBvaW50ZXIpIGFjbCAh PSBEYXR1bUdldFBvaW50ZXIoYWNsRGF0dW0pKQorCQlwZnJlZShhY2wpOworCisJcmV0dXJu IHJlc3VsdDsKK30KKworLyoKKyAqIENoZWNrIGlmIGEgcm9sZSBoYXMgYW55IG9mIHRoZSBw ZXJtaXNzaW9ucyBpbiB0aGUgbWFzayBvbiBhIHJlbGF0aW9uLgorICovCitzdGF0aWMgYm9v bAorbG9nX3JlbGF0aW9uX2NoZWNrKE9pZCByZWxPaWQsCisJCQkJICAgT2lkIGF1ZGl0T2lk LAorCQkJCSAgIEFjbE1vZGUgbWFzaykKK3sKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKwlI ZWFwVHVwbGUJdHVwbGU7CisJRGF0dW0JCWFjbERhdHVtOworCWJvb2wJCWlzTnVsbDsKKwor CS8qIEdldCByZWxhdGlvbiB0dXBsZSBmcm9tIHBnX2NsYXNzICovCisJdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbE9pZCkpOworCisJLyog UmV0dXJuIGZhbHNlIGlmIHR1cGxlIGlzIG5vdCB2YWxpZCAqLworCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0dXBsZSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEdldCB0aGUgcmVsYXRp b24ncyBBQ0wgKi8KKwlhY2xEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxl LCBBbnVtX3BnX2NsYXNzX3JlbGFjbCwKKwkJCQkJCQkgICAmaXNOdWxsKTsKKworCS8qIElm IG5vdCBudWxsIHRoZW4gdGVzdCAqLworCWlmICghaXNOdWxsKQorCQlyZXN1bHQgPSBsb2df YWNsX2NoZWNrKGFjbERhdHVtLCBhdWRpdE9pZCwgbWFzayk7CisKKwkvKiBGcmVlIHRoZSBy ZWxhdGlvbiB0dXBsZSAqLworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1cm4g cmVzdWx0OworfQorCisvKgorICogQ2hlY2sgaWYgYSByb2xlIGhhcyBhbnkgb2YgdGhlIHBl cm1pc3Npb25zIGluIHRoZSBtYXNrIG9uIGFuIGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIGJv b2wKK2xvZ19hdHRyaWJ1dGVfY2hlY2soT2lkIHJlbE9pZCwKKwkJCQkJQXR0ck51bWJlciBh dHROdW0sCisJCQkJCU9pZCBhdWRpdE9pZCwKKwkJCQkJQWNsTW9kZSBtYXNrKQoreworCWJv b2wJCXJlc3VsdCA9IGZhbHNlOworCUhlYXBUdXBsZQlhdHRUdXBsZTsKKwlEYXR1bQkJYWNs RGF0dW07CisJYm9vbAkJaXNOdWxsOworCisJLyogR2V0IHRoZSBhdHRyaWJ1dGUncyBBQ0wg Ki8KKwlhdHRUdXBsZSA9IFNlYXJjaFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkJICAgT2Jq ZWN0SWRHZXREYXR1bShyZWxPaWQpLAorCQkJCQkJCSAgIEludDE2R2V0RGF0dW0oYXR0TnVt KSk7CisKKwkvKiBSZXR1cm4gZmFsc2UgaWYgYXR0cmlidXRlIGlzIGludmFsaWQgKi8KKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0VHVwbGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkv KiBPbmx5IHByb2Nlc3MgYXR0cmlidXRlIHRoYXQgaGF2ZSBub3QgYmVlbiBkcm9wcGVkICov CisJaWYgKCEoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0VHVwbGUpKS0+YXR0 aXNkcm9wcGVkKQorCXsKKwkJYWNsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQVRUTlVNLCBh dHRUdXBsZSwgQW51bV9wZ19hdHRyaWJ1dGVfYXR0YWNsLAorCQkJCQkJCQkgICAmaXNOdWxs KTsKKworCQlpZiAoIWlzTnVsbCkKKwkJCXJlc3VsdCA9IGxvZ19hY2xfY2hlY2soYWNsRGF0 dW0sIGF1ZGl0T2lkLCBtYXNrKTsKKwl9CisKKwkvKiBGcmVlIGF0dHJpYnV0ZSAqLworCVJl bGVhc2VTeXNDYWNoZShhdHRUdXBsZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgor ICogQ2hlY2sgaWYgYSByb2xlIGhhcyBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIGluIHRoZSBt YXNrIG9uIGFuIGF0dHJpYnV0ZSBpbgorICogdGhlIHByb3ZpZGVkIHNldC4gIElmIHRoZSBz ZXQgaXMgZW1wdHksIHRoZW4gYWxsIHZhbGlkIGF0dHJpYnV0ZXMgaW4gdGhlCisgKiByZWxh dGlvbiB3aWxsIGJlIHRlc3RlZC4KKyAqLworc3RhdGljIGJvb2wKK2xvZ19hdHRyaWJ1dGVf Y2hlY2tfYW55KE9pZCByZWxPaWQsCisJCQkJCQlPaWQgYXVkaXRPaWQsCisJCQkJCQlCaXRt YXBzZXQgKmF0dHJpYnV0ZVNldCwKKwkJCQkJCUFjbE1vZGUgbW9kZSkKK3sKKwlib29sIHJl c3VsdCA9IGZhbHNlOworCUF0dHJOdW1iZXIgY29sOworCUJpdG1hcHNldCAqdG1wU2V0Owor CisJLyogSWYgYm1zIGlzIGVtcHR5IHRoZW4gY2hlY2sgZm9yIGFueSBjb2x1bW4gbWF0Y2gg Ki8KKwlpZiAoYm1zX2lzX2VtcHR5KGF0dHJpYnV0ZVNldCkpCisJeworCQlIZWFwVHVwbGUJ Y2xhc3NUdXBsZTsKKwkJQXR0ck51bWJlcgluYXR0cnM7CisJCUF0dHJOdW1iZXIJY3Vycl9h dHQ7CisKKwkJLyogR2V0IHJlbGF0aW9uIHRvIGRldGVybWluZSB0b3RhbCBhdHRyaWJ1dGUg Ki8KKwkJY2xhc3NUdXBsZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0 RGF0dW0ocmVsT2lkKSk7CisKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNsYXNzVHVwbGUp KQorCQkJcmV0dXJuIGZhbHNlOworCisJCW5hdHRycyA9ICgoRm9ybV9wZ19jbGFzcykgR0VU U1RSVUNUKGNsYXNzVHVwbGUpKS0+cmVsbmF0dHM7CisJCVJlbGVhc2VTeXNDYWNoZShjbGFz c1R1cGxlKTsKKworCQkvKiBDaGVjayBlYWNoIGNvbHVtbiAqLworCQlmb3IgKGN1cnJfYXR0 ID0gMTsgY3Vycl9hdHQgPD0gbmF0dHJzOyBjdXJyX2F0dCsrKQorCQl7CisJCQlpZiAobG9n X2F0dHJpYnV0ZV9jaGVjayhyZWxPaWQsIGN1cnJfYXR0LCBhdWRpdE9pZCwgbW9kZSkpCisJ CQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwkvKiBibXNfZmlyc3RfbWVtYmVyIGlzIGRl c3RydWN0aXZlLCBzbyBtYWtlIGEgY29weSBiZWZvcmUgdXNpbmcgaXQuICovCisJdG1wU2V0 ID0gYm1zX2NvcHkoYXR0cmlidXRlU2V0KTsKKworCS8qIENoZWNrIGVhY2ggY29sdW1uICov CisJd2hpbGUgKChjb2wgPSBibXNfZmlyc3RfbWVtYmVyKHRtcFNldCkpID49IDApCisJewor CQljb2wgKz0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQlpZiAo Y29sICE9IEludmFsaWRBdHRyTnVtYmVyICYmCisJCQlsb2dfYXR0cmlidXRlX2NoZWNrKHJl bE9pZCwgY29sLCBhdWRpdE9pZCwgbW9kZSkpCisJCXsKKwkJCXJlc3VsdCA9IHRydWU7CisJ CQlicmVhazsKKwkJfQorCX0KKworCS8qIEZyZWUgdGhlIGNvbHVtbiBzZXQgKi8KKwlibXNf ZnJlZSh0bXBTZXQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENyZWF0ZSBB dWRpdEV2ZW50cyBmb3IgRE1MIG9wZXJhdGlvbnMgdmlhIGV4ZWN1dG9yIHBlcm1pc3Npb25z IGNoZWNrcy4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19kbWwoT2lkIGF1ZGl0T2lkLCBMaXN0 ICpyYW5nZVRhYmxzKQoreworCUxpc3RDZWxsICpscjsKKwlib29sIGZpcnN0ID0gdHJ1ZTsK KwlBdWRpdEV2ZW50IGF1ZGl0RXZlbnQ7CisKKwlmb3JlYWNoKGxyLCByYW5nZVRhYmxzKQor CXsKKwkJT2lkIHJlbE9pZDsKKwkJUmVsYXRpb24gcmVsOworCQlSYW5nZVRibEVudHJ5ICpy dGUgPSBsZmlyc3QobHIpOworCisJCS8qIFdlIG9ubHkgY2FyZSBhYm91dCB0YWJsZXMsIGFu ZCBjYW4gaWdub3JlIHN1YnF1ZXJpZXMgZXRjLiAqLworCQlpZiAocnRlLT5ydGVraW5kICE9 IFJURV9SRUxBVElPTikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEZpbHRlciBvdXQg YW55IHN5c3RlbSByZWxhdGlvbnMKKwkJICovCisJCXJlbE9pZCA9IHJ0ZS0+cmVsaWQ7CisJ CXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsT2lkLCBOb0xvY2spOworCisJCWlmIChJc1N5c3Rl bU5hbWVzcGFjZShSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpKSkKKwkJeworCQkJcmVsYXRp b25fY2xvc2UocmVsLCBOb0xvY2spOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICog V2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHBhcnNldHJlZSBoZXJlLCBzbyB3ZSBoYXZl IHRvIGdlbmVyYXRlCisJCSAqIHRoZSBub2RlIHR5cGUsIG9iamVjdCB0eXBlLCBhbmQgY29t bWFuZCB0YWcgYnkgZGVjb2RpbmcKKwkJICogcnRlLT5yZXF1aXJlZFBlcm1zIGFuZCBydGUt PnJlbGtpbmQuCisJCSAqLworCQlhdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRf TU9EOworCisJCWlmIChydGUtPnJlcXVpcmVkUGVybXMgJiBBQ0xfSU5TRVJUKQorCQl7CisJ CQlhdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0luc2VydFN0bXQ7CisJCQlhdWRpdEV2ZW50 LmNvbW1hbmQgPSBDT01NQU5EX0lOU0VSVDsKKwkJfQorCQllbHNlIGlmIChydGUtPnJlcXVp cmVkUGVybXMgJiBBQ0xfVVBEQVRFKQorCQl7CisJCQlhdWRpdEV2ZW50LmNvbW1hbmRUYWcg PSBUX1VwZGF0ZVN0bXQ7CisJCQlhdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VQREFU RTsKKwkJfQorCQllbHNlIGlmIChydGUtPnJlcXVpcmVkUGVybXMgJiBBQ0xfREVMRVRFKQor CQl7CisJCQlhdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0RlbGV0ZVN0bXQ7CisJCQlhdWRp dEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX0RFTEVURTsKKwkJfQorCQllbHNlIGlmIChydGUt PnJlcXVpcmVkUGVybXMgJiBBQ0xfU0VMRUNUKQorCQl7CisJCQlhdWRpdEV2ZW50LmxvZ1N0 bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCQkJYXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9T ZWxlY3RTdG10OworCQkJYXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9TRUxFQ1Q7CisJ CX0KKwkJZWxzZQorCQl7CisJCQlhdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0ludmFsaWQ7 CisJCQlhdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VOS05PV047CisJCX0KKworCQkv KgorCQkgKiBGaWxsIHZhbHVlcyBpbiB0aGUgZXZlbnQgc3RydWN0IHRoYXQgYXJlIHJlcXVp cmVkIGZvciBzZXNzaW9uCisJCSAqIGxvZ2dpbmcuCisJCSAqLworCQlhdWRpdEV2ZW50Lmdy YW50ZWQgPSBmYWxzZTsKKwkJYXVkaXRFdmVudC5jb21tYW5kVGV4dCA9IGRlYnVnX3F1ZXJ5 X3N0cmluZzsKKworCQkvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydGUgdGhlbiBzZXNzaW9u IGxvZyAqLworCQlpZiAoZmlyc3QpCisJCXsKKwkJCWF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9 ICIiOworCQkJYXVkaXRFdmVudC5vYmplY3RUeXBlID0gIiI7CisKKwkJCWxvZ19hdWRpdF9l dmVudCgmYXVkaXRFdmVudCk7CisKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKworCQkvKiBH ZXQgdGhlIHJlbGF0aW9uIHR5cGUgKi8KKwkJc3dpdGNoIChydGUtPnJlbGtpbmQpCisJCXsK KwkJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJCQlhdWRpdEV2ZW50Lm9iamVjdFR5cGUg PSBPQkpFQ1RfVFlQRV9UQUJMRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX0lO REVYOgorCQkJCWF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9IE9CSkVDVF9UWVBFX0lOREVYOwor CQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfU0VRVUVOQ0U6CisJCQkJYXVkaXRFdmVu dC5vYmplY3RUeXBlID0gT0JKRUNUX1RZUEVfU0VRVUVOQ0U7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgUkVMS0lORF9UT0FTVFZBTFVFOgorCQkJCWF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9 IE9CSkVDVF9UWVBFX1RPQVNUVkFMVUU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lO RF9WSUVXOgorCQkJCWF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9IE9CSkVDVF9UWVBFX1ZJRVc7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKKwkJCQlh dWRpdEV2ZW50Lm9iamVjdFR5cGUgPSBPQkpFQ1RfVFlQRV9DT01QT1NJVEVfVFlQRTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQkJYXVkaXRF dmVudC5vYmplY3RUeXBlID0gT0JKRUNUX1RZUEVfRk9SRUlHTl9UQUJMRTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBSRUxLSU5EX01BVFZJRVc6CisJCQkJYXVkaXRFdmVudC5vYmplY3RU eXBlID0gT0JKRUNUX1RZUEVfTUFUVklFVzsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoK KwkJCQlhdWRpdEV2ZW50Lm9iamVjdFR5cGUgPSBPQkpFQ1RfVFlQRV9VTktOT1dOOworCQkJ CWJyZWFrOworCQl9CisKKwkJLyogR2V0IHRoZSByZWxhdGlvbiBuYW1lICovCisJCWF1ZGl0 RXZlbnQub2JqZWN0TmFtZSA9CisJCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRf bmFtZXNwYWNlX25hbWUoCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwp KSwKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCQlyZWxh dGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisKKwkJLyogUGVyZm9ybSBvYmplY3QgYXVkaXRp bmcgb25seSBpZiB0aGUgYXVkaXQgcm9sZSBpcyB2YWxpZCAqLworCQlpZiAoYXVkaXRPaWQg IT0gSW52YWxpZE9pZCkKKwkJeworCQkJQWNsTW9kZSBhdWRpdFBlcm1zID0gKEFDTF9TRUxF Q1QgfCBBQ0xfVVBEQVRFIHwgQUNMX0lOU0VSVCkgJgorCQkJCQkJCQkgcnRlLT5yZXF1aXJl ZFBlcm1zOworCisJCQkvKgorCQkJICogSWYgYW55IG9mIHRoZSByZXF1aXJlZCBwZXJtaXNz aW9ucyBmb3IgdGhlIHJlbGF0aW9uIGFyZSBncmFudGVkCisJCQkgKiB0byB0aGUgYXVkaXQg cm9sZSB0aGVuIGF1ZGl0IHRoZSByZWxhdGlvbgorCQkJICovCisJCQlpZiAobG9nX3JlbGF0 aW9uX2NoZWNrKHJlbE9pZCwgYXVkaXRPaWQsIGF1ZGl0UGVybXMpKQorCQkJeworCQkJCWF1 ZGl0RXZlbnQuZ3JhbnRlZCA9IHRydWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBFbHNlIGNo ZWNrIGlmIHRoZSBhdWRpdCByb2xlIGhhcyBjb2x1bW4tbGV2ZWwgcGVybWlzc2lvbnMgZm9y CisJCQkgKiBzZWxlY3QsIGluc2VydCwgb3IgdXBkYXRlLgorCQkJICovCisJCQllbHNlIGlm IChhdWRpdFBlcm1zICE9IDApCisJCQl7CisJCQkJLyoKKwkJCQkgKiBDaGVjayB0aGUgc2Vs ZWN0IGNvbHVtbnMgdG8gc2VlIGlmIHRoZSBhdWRpdCByb2xlIGhhcworCQkJCSAqIHByaXZl bGVnZXMgb24gYW55IG9mIHRoZW0uCisJCQkJICovCisJCQkJaWYgKGF1ZGl0UGVybXMgJiBB Q0xfU0VMRUNUKQorCQkJCXsKKwkJCQkJYXVkaXRFdmVudC5ncmFudGVkID0KKwkJCQkJCWxv Z19hdHRyaWJ1dGVfY2hlY2tfYW55KHJlbE9pZCwgYXVkaXRPaWQsCisJCQkJCQkJCQkJCQly dGUtPnNlbGVjdGVkQ29scywKKwkJCQkJCQkJCQkJCUFDTF9TRUxFQ1QpOworCQkJCX0KKwor CQkJCS8qCisJCQkJICogQ2hlY2sgdGhlIG1vZGlmaWVkIGNvbHVtbnMgdG8gc2VlIGlmIHRo ZSBhdWRpdCByb2xlIGhhcworCQkJCSAqIHByaXZpbGVnZXMgb24gYW55IG9mIHRoZW0uCisJ CQkJICovCisJCQkJaWYgKCFhdWRpdEV2ZW50LmdyYW50ZWQpCisJCQkJeworCQkJCQlhdWRp dFBlcm1zICY9IChBQ0xfSU5TRVJUIHwgQUNMX1VQREFURSk7CisKKwkJCQkJaWYgKGF1ZGl0 UGVybXMpCisJCQkJCXsKKwkJCQkJCWF1ZGl0RXZlbnQuZ3JhbnRlZCA9CisJCQkJCQkJbG9n X2F0dHJpYnV0ZV9jaGVja19hbnkocmVsT2lkLCBhdWRpdE9pZCwKKwkJCQkJCQkJCQkJCQly dGUtPm1vZGlmaWVkQ29scywKKwkJCQkJCQkJCQkJCQlhdWRpdFBlcm1zKTsKKwkJCQkJfQor CQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIE9ubHkgZG8gcmVsYXRpb24gbGV2ZWwgbG9nZ2lu ZyBpZiBhIGdyYW50IHdhcyBmb3VuZC4gKi8KKwkJaWYgKGF1ZGl0RXZlbnQuZ3JhbnRlZCkK KwkJeworCQkJbG9nX2F1ZGl0X2V2ZW50KCZhdWRpdEV2ZW50KTsKKwkJfQorCisJCXBmcmVl KGF1ZGl0RXZlbnQub2JqZWN0TmFtZSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZmlyc3Qg ZmxhZyB3YXMgbmV2ZXIgc2V0IHRvIGZhbHNlLCB0aGVuIHJhbmdlVGFibHMgd2FzIGVtcHR5 LiBJbgorCSAqIHRoaXMgY2FzZSBsb2cgYSBzZXNzaW9uIHNlbGVjdCBzdGF0ZW1lbnQuCisJ ICovCisJaWYgKGZpcnN0ICYmICF1dGlsaXR5Q29tbWFuZEluUHJvZ3Jlc3MpCisJeworCQlh dWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCQlhdWRpdEV2ZW50LmNv bW1hbmRUYWcgPSBUX1NlbGVjdFN0bXQ7CisJCWF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1B TkRfU0VMRUNUOworCQlhdWRpdEV2ZW50LmdyYW50ZWQgPSBmYWxzZTsKKwkJYXVkaXRFdmVu dC5jb21tYW5kVGV4dCA9IGRlYnVnX3F1ZXJ5X3N0cmluZzsKKwkJYXVkaXRFdmVudC5vYmpl Y3ROYW1lID0gIiI7CisJCWF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9ICIiOworCisJCWxvZ19h dWRpdF9ldmVudCgmYXVkaXRFdmVudCk7CisJfQorfQorCisvKgorICogQ3JlYXRlIEF1ZGl0 RXZlbnRzIGZvciBjZXJ0YWluIGtpbmRzIG9mIENSRUFURSwgQUxURVIsIGFuZCBERUxFVEUg c3RhdGVtZW50cworICogd2hlcmUgdGhlIG9iamVjdCBjYW4gYmUgbG9nZ2VkLgorICovCitz dGF0aWMgdm9pZAorbG9nX2NyZWF0ZV9hbHRlcl9kcm9wKE9pZCBjbGFzc0lkLAorCQkJCQkg IE9pZCBvYmplY3RJZCkKK3sKKwkvKiBPbmx5IHBlcmZvcm0gd2hlbiBjbGFzcyBpcyByZWxh dGlvbiAqLworCWlmIChjbGFzc0lkID09IFJlbGF0aW9uUmVsYXRpb25JZCkKKwl7CisJCVJl bGF0aW9uIHJlbDsKKwkJRm9ybV9wZ19jbGFzcyBjbGFzczsKKworCQkvKiBPcGVuIHRoZSBy ZWxhdGlvbiAqLworCQlyZWwgPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBOb0xvY2spOwor CisJCS8qIEZpbHRlciBvdXQgYW55IHN5c3RlbSByZWxhdGlvbnMgKi8KKwkJaWYgKElzVG9h c3ROYW1lc3BhY2UoUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSkpCisJCXsKKwkJCXJlbGF0 aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIEdldCBy ZWwgaW5mb3JtYXRpb24gYW5kIGNsb3NlIGl0ICovCisJCWNsYXNzID0gUmVsYXRpb25HZXRG b3JtKHJlbCk7CisJCXV0aWxpdHlBdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQkJcXVvdGVf cXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKAorCQkJCQkJCQkJICAg UmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSksCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKTsKKwkJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCisJ CS8qIFNldCBvYmplY3QgdHlwZSBiYXNlZCBvbiByZWxraW5kICovCisJCXN3aXRjaCAoY2xh c3MtPnJlbGtpbmQpCisJCXsKKwkJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJCQl1dGls aXR5QXVkaXRFdmVudC5vYmplY3RUeXBlID0gT0JKRUNUX1RZUEVfVEFCTEU7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJCQl1dGlsaXR5QXVkaXRFdmVudC5v YmplY3RUeXBlID0gT0JKRUNUX1RZUEVfSU5ERVg7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug UkVMS0lORF9TRVFVRU5DRToKKwkJCQl1dGlsaXR5QXVkaXRFdmVudC5vYmplY3RUeXBlID0g T0JKRUNUX1RZUEVfU0VRVUVOQ0U7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9W SUVXOgorCQkJCXV0aWxpdHlBdWRpdEV2ZW50Lm9iamVjdFR5cGUgPSBPQkpFQ1RfVFlQRV9W SUVXOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJ CQkJdXRpbGl0eUF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9IE9CSkVDVF9UWVBFX0NPTVBPU0lU RV9UWVBFOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToK KwkJCQl1dGlsaXR5QXVkaXRFdmVudC5vYmplY3RUeXBlID0gT0JKRUNUX1RZUEVfRk9SRUlH Tl9UQUJMRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX01BVFZJRVc6CisJCQkJ dXRpbGl0eUF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9IE9CSkVDVF9UWVBFX01BVFZJRVc7CisJ CQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKiBBbnkgb3RoZXIgY2FzZXMgd2lsbCBiZSBoYW5k bGVkIGJ5IGxvZ191dGlsaXR5X2NvbW1hbmQoKS4KKwkJCSAqLworCQkJZGVmYXVsdDoKKwkJ CQlyZXR1cm47CisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBMb2cgdGhlIGV2ZW50ICovCisJ CWxvZ19hdWRpdF9ldmVudCgmdXRpbGl0eUF1ZGl0RXZlbnQpOworCQl1dGlsaXR5Q29tbWFu ZExvZ2dlZCA9IHRydWU7CisJfQorfQorCisvKgorICogQ3JlYXRlIEF1ZGl0RXZlbnRzIGZv ciBub24tY2F0YWxvZyBmdW5jdGlvbiBleGVjdXRpb24sIGFzIGRldGVjdGVkIGJ5CisgKiBs b2dfb2JqZWN0X2FjY2VzcygpIGJlbG93LgorICovCitzdGF0aWMgdm9pZAorbG9nX2Z1bmN0 aW9uX2V4ZWN1dGUoT2lkIG9iamVjdElkKQoreworCUhlYXBUdXBsZSBwcm9jdHVwOworCUZv cm1fcGdfcHJvYyBwcm9jOworCisJLyogR2V0IGluZm8gYWJvdXQgdGhlIGZ1bmN0aW9uLiAq LworCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCisJaWYgKCFwcm9jdHVwKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gJXUiLCBvYmplY3RJZCk7CisJcHJvYyA9IChG b3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKworCS8qCisJICogTG9nZ2luZyBl eGVjdXRpb24gb2YgYWxsIHBnX2NhdGFsb2cgZnVuY3Rpb25zIHdvdWxkIG1ha2UgdGhlIGxv ZworCSAqIHVudXNhYmx5IG5vaXN5LgorCSAqLworCWlmIChJc1N5c3RlbU5hbWVzcGFjZShw cm9jLT5wcm9uYW1lc3BhY2UpKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOwor CQlyZXR1cm47CisJfQorCisJLyogR2VuZXJhdGUgdGhlIGZ1bGx5LXF1YWxpZmllZCBmdW5j dGlvbiBuYW1lLiAqLworCXV0aWxpdHlBdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQlxdW90 ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUocHJvYy0+cHJvbmFt ZXNwYWNlKSwKKwkJCQkJCQkJICAgTmFtZVN0cihwcm9jLT5wcm9uYW1lKSk7CisJUmVsZWFz ZVN5c0NhY2hlKHByb2N0dXApOworCisJLyogTG9nIHRoZSBldmVudCAqLworCXV0aWxpdHlB dWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCXV0aWxpdHlBdWRpdEV2 ZW50LmNvbW1hbmRUYWcgPSBUX0RvU3RtdDsKKwl1dGlsaXR5QXVkaXRFdmVudC5jb21tYW5k ID0gQ09NTUFORF9FWEVDVVRFOworCXV0aWxpdHlBdWRpdEV2ZW50Lm9iamVjdFR5cGUgPSBP QkpFQ1RfVFlQRV9GVU5DVElPTjsKKwl1dGlsaXR5QXVkaXRFdmVudC5jb21tYW5kVGV4dCA9 IGRlYnVnX3F1ZXJ5X3N0cmluZzsKKworCWxvZ19hdWRpdF9ldmVudCgmdXRpbGl0eUF1ZGl0 RXZlbnQpOworCXV0aWxpdHlDb21tYW5kTG9nZ2VkID0gdHJ1ZTsKK30KKworLyoKKyAqIExv ZyBvYmplY3QgYWNjZXNzZXMgKHdoaWNoIGlzIG1vcmUgYWJvdXQgRERMIHRoYW4gRE1MLCBl dmVuIHRob3VnaCBpdAorICogc291bmRzIGxpa2UgdGhlIGxhdHRlcikuCisgKi8KK3N0YXRp YyB2b2lkCitsb2dfb2JqZWN0X2FjY2VzcyhPYmplY3RBY2Nlc3NUeXBlIGFjY2VzcywKKwkJ CQkgIE9pZCBjbGFzc0lkLAorCQkJCSAgT2lkIG9iamVjdElkLAorCQkJCSAgaW50IHN1Yklk LAorCQkJCSAgdm9pZCAqYXJnKQoreworCXN3aXRjaCAoYWNjZXNzKQorCXsKKwkJLyogTG9n IGV4ZWN1dGUuICovCisJCWNhc2UgT0FUX0ZVTkNUSU9OX0VYRUNVVEU6CisJCQlsb2dfZnVu Y3Rpb25fZXhlY3V0ZShvYmplY3RJZCk7CisJCQlicmVhazsKKworCQkvKiBMb2cgY3JlYXRl LiAqLworCQljYXNlIE9BVF9QT1NUX0NSRUFURToKKwkJCXsKKwkJCQlPYmplY3RBY2Nlc3NQ b3N0Q3JlYXRlICpwYyA9IGFyZzsKKworCQkJCWlmIChwYy0+aXNfaW50ZXJuYWwpCisJCQkJ CXJldHVybjsKKworCQkJCWxvZ19jcmVhdGVfYWx0ZXJfZHJvcChjbGFzc0lkLCBvYmplY3RJ ZCk7CisJCQl9CisJCQlicmVhazsKKworCQkvKiBMb2cgYWx0ZXIuICovCisJCWNhc2UgT0FU X1BPU1RfQUxURVI6CisJCQl7CisJCQkJT2JqZWN0QWNjZXNzUG9zdEFsdGVyICpwYSA9IGFy ZzsKKworCQkJCWlmIChwYS0+aXNfaW50ZXJuYWwpCisJCQkJCXJldHVybjsKKworCQkJCWxv Z19jcmVhdGVfYWx0ZXJfZHJvcChjbGFzc0lkLCBvYmplY3RJZCk7CisJCQl9CisJCQlicmVh azsKKworCQkvKiBMb2cgZHJvcC4gKi8KKwkJY2FzZSBPQVRfRFJPUDoKKwkJeworCQkJT2Jq ZWN0QWNjZXNzRHJvcCAqZHJvcCA9IGFyZzsKKworCQkJaWYgKGRyb3AtPmRyb3BmbGFncyAm IFBFUkZPUk1fREVMRVRJT05fSU5URVJOQUwpCisJCQkJcmV0dXJuOworCisJCQlsb2dfY3Jl YXRlX2FsdGVyX2Ryb3AoY2xhc3NJZCwgb2JqZWN0SWQpOworCQl9CisJCWJyZWFrOworCisJ CS8qIEFsbCBvdGhlcnMgcHJvY2Vzc2VkIGJ5IGxvZ191dGlsaXR5X2NvbW1hbmQoKSAqLwor CQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisvKgorICogSG9vayBmdW5jdGlvbnMK KyAqLworc3RhdGljIEV4ZWN1dG9yQ2hlY2tQZXJtc19ob29rX3R5cGUgbmV4dF9FeGVjdXRv ckNoZWNrUGVybXNfaG9vayA9IE5VTEw7CitzdGF0aWMgUHJvY2Vzc1V0aWxpdHlfaG9va190 eXBlIG5leHRfUHJvY2Vzc1V0aWxpdHlfaG9vayA9IE5VTEw7CitzdGF0aWMgb2JqZWN0X2Fj Y2Vzc19ob29rX3R5cGUgbmV4dF9vYmplY3RfYWNjZXNzX2hvb2sgPSBOVUxMOworCisvKgor ICogSG9vayBFeGVjdXRvckNoZWNrUGVybXMgdG8gZG8gc2Vzc2lvbiBhbmQgb2JqZWN0IGF1 ZGl0aW5nIGZvciBETUwuCisgKi8KK3N0YXRpYyBib29sCitwZ2F1ZGl0X0V4ZWN1dG9yQ2hl Y2tQZXJtc19ob29rKExpc3QgKnJhbmdlVGFibHMsIGJvb2wgYWJvcnQpCit7CisJT2lkIGF1 ZGl0T2lkOworCisJLyogR2V0IHRoZSBhdWRpdCBvaWQgaWYgdGhlIHJvbGUgZXhpc3RzLiAq LworCWF1ZGl0T2lkID0gZ2V0X3JvbGVfb2lkKGF1ZGl0Um9sZSwgdHJ1ZSk7CisKKwkvKiBM b2cgRE1MIGlmIHRoZSBhdWRpdCByb2xlIGlzIHZhbGlkIG9yIHNlc3Npb24gbG9nZ2luZyBp cyBlbmFibGVkLiAqLworCWlmICgoYXVkaXRPaWQgIT0gSW52YWxpZE9pZCB8fCBhdWRpdExv Z0JpdG1hcCAhPSAwKSAmJgorCQkhSXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkp CisJCWxvZ19kbWwoYXVkaXRPaWQsIHJhbmdlVGFibHMpOworCisJLyogQ2FsbCB0aGUgbmV4 dCBob29rIGZ1bmN0aW9uLiAqLworCWlmIChuZXh0X0V4ZWN1dG9yQ2hlY2tQZXJtc19ob29r ICYmCisJCSEoKm5leHRfRXhlY3V0b3JDaGVja1Blcm1zX2hvb2spIChyYW5nZVRhYmxzLCBh Ym9ydCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICog SG9vayBQcm9jZXNzVXRpbGl0eSB0byBkbyBzZXNzaW9uIGF1ZGl0aW5nIGZvciBEREwgYW5k IHV0aWxpdHkgY29tbWFuZHMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ2F1ZGl0X1Byb2Nlc3NV dGlsaXR5X2hvb2soTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCWNvbnN0IGNoYXIgKnF1ZXJ5 U3RyaW5nLAorCQkJCQkJCVByb2Nlc3NVdGlsaXR5Q29udGV4dCBjb250ZXh0LAorCQkJCQkJ CVBhcmFtTGlzdEluZm8gcGFyYW1zLAorCQkJCQkJCURlc3RSZWNlaXZlciAqZGVzdCwKKwkJ CQkJCQljaGFyICpjb21wbGV0aW9uVGFnKQoreworCS8qIENyZWF0ZSB0aGUgdXRpbGl0eSBh dWRpdCBldmVudC4gKi8KKwl1dGlsaXR5Q29tbWFuZExvZ2dlZCA9IGZhbHNlOworCXV0aWxp dHlDb21tYW5kSW5Qcm9ncmVzcyA9IHRydWU7CisKKwl1dGlsaXR5QXVkaXRFdmVudC5sb2dT dG10TGV2ZWwgPSBHZXRDb21tYW5kTG9nTGV2ZWwocGFyc2V0cmVlKTsKKwl1dGlsaXR5QXVk aXRFdmVudC5jb21tYW5kVGFnID0gbm9kZVRhZyhwYXJzZXRyZWUpOworCXV0aWxpdHlBdWRp dEV2ZW50LmNvbW1hbmQgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CisJdXRpbGl0 eUF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9ICIiOworCXV0aWxpdHlBdWRpdEV2ZW50Lm9iamVj dFR5cGUgPSAiIjsKKwl1dGlsaXR5QXVkaXRFdmVudC5jb21tYW5kVGV4dCA9IGRlYnVnX3F1 ZXJ5X3N0cmluZzsKKwl1dGlsaXR5QXVkaXRFdmVudC5ncmFudGVkID0gZmFsc2U7CisKKwkv KiBDYWxsIHRoZSBzdGFuZGFyZCBwcm9jZXNzIHV0aWxpdHkgY2hhaW4uICovCisJaWYgKG5l eHRfUHJvY2Vzc1V0aWxpdHlfaG9vaykKKwkJKCpuZXh0X1Byb2Nlc3NVdGlsaXR5X2hvb2sp IChwYXJzZXRyZWUsIHF1ZXJ5U3RyaW5nLCBjb250ZXh0LAorCQkJCQkJCQkJIHBhcmFtcywg ZGVzdCwgY29tcGxldGlvblRhZyk7CisJZWxzZQorCQlzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0 eShwYXJzZXRyZWUsIHF1ZXJ5U3RyaW5nLCBjb250ZXh0LAorCQkJCQkJCQlwYXJhbXMsIGRl c3QsIGNvbXBsZXRpb25UYWcpOworCisJLyogTG9nIHRoZSB1dGlsaXR5IGNvbW1hbmQgaWYg bG9nZ2luZyBpcyBvbiwgdGhlIGNvbW1hbmQgaGFzIG5vdCBhbHJlYWR5CisJICogYmVlbiBs b2dnZWQgYnkgYW5vdGhlciBob29rLCBhbmQgdGhlIHRyYW5zYWN0aW9uIGlzIG5vdCBhYm9y dGVkICovCisJaWYgKGF1ZGl0TG9nQml0bWFwICE9IDAgJiYgIXV0aWxpdHlDb21tYW5kTG9n Z2VkICYmCisJCSFJc0Fib3J0ZWRUcmFuc2FjdGlvbkJsb2NrU3RhdGUoKSkKKwl7CisJCWxv Z19hdWRpdF9ldmVudCgmdXRpbGl0eUF1ZGl0RXZlbnQpOworCX0KKworCXV0aWxpdHlDb21t YW5kSW5Qcm9ncmVzcyA9IGZhbHNlOworfQorCisvKgorICogSG9vayBvYmplY3RfYWNjZXNz X2hvb2sgdG8gcHJvdmlkZSBmdWxseS1xdWFsaWZpZWQgb2JqZWN0IG5hbWVzIGZvciBleGVj dXRlLAorICogY3JlYXRlLCBkcm9wLCBhbmQgYWx0ZXIgY29tbWFuZHMuICBNb3N0IG9mIHRo ZSBhdWRpdCBpbmZvcm1hdGlvbiBpcyBmaWxsZWQgaW4KKyAqIGJ5IGxvZ191dGlsaXR5X2Nv bW1hbmQoKS4KKyAqLworc3RhdGljIHZvaWQKK3BnYXVkaXRfb2JqZWN0X2FjY2Vzc19ob29r KE9iamVjdEFjY2Vzc1R5cGUgYWNjZXNzLAorCQkJCQkJICAgT2lkIGNsYXNzSWQsCisJCQkJ CQkgICBPaWQgb2JqZWN0SWQsCisJCQkJCQkgICBpbnQgc3ViSWQsCisJCQkJCQkgICB2b2lk ICphcmcpCit7CisJaWYgKGF1ZGl0TG9nQml0bWFwICE9IDAgJiYgIUlzQWJvcnRlZFRyYW5z YWN0aW9uQmxvY2tTdGF0ZSgpKQorCQlsb2dfb2JqZWN0X2FjY2VzcyhhY2Nlc3MsIGNsYXNz SWQsIG9iamVjdElkLCBzdWJJZCwgYXJnKTsKKworCWlmIChuZXh0X29iamVjdF9hY2Nlc3Nf aG9vaykKKwkJKCpuZXh0X29iamVjdF9hY2Nlc3NfaG9vaykgKGFjY2VzcywgY2xhc3NJZCwg b2JqZWN0SWQsIHN1YklkLCBhcmcpOworfQorCisvKgorICogR1VDIGNoZWNrIGFuZCBhc3Np Z24gZnVuY3Rpb25zCisgKi8KKworLyoKKyAqIFRha2UgYSBwZ19hdWRpdC5sb2cgdmFsdWUg c3VjaCBhcyAicmVhZCwgd3JpdGUsIGRtbCIsIHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlCisg KiBjb21tYS1zZXBhcmF0ZWQgdG9rZW5zIGNvcnJlc3BvbmRzIHRvIGEgTG9nQ2xhc3MgdmFs dWUsIGFuZCBjb252ZXJ0IHRoZW0gaW50bworICogYSBiaXRtYXAgdGhhdCBsb2dfYXVkaXRf ZXZlbnQgY2FuIGNoZWNrLgorICovCitzdGF0aWMgYm9vbAorY2hlY2tfcGdhdWRpdF9sb2co Y2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCUxp c3QgKmZsYWdzOworCWNoYXIgKnJhd3ZhbDsKKwlMaXN0Q2VsbCAqbHQ7CisJdWludDY0ICpm OworCisJLyogTWFrZSBzdXJlIG5ld3ZhbCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9m IHRva2Vucy4gKi8KKwlyYXd2YWwgPSBwc3RyZHVwKCpuZXd2YWwpOworCWlmICghU3BsaXRJ ZGVudGlmaWVyU3RyaW5nKHJhd3ZhbCwgJywnLCAmZmxhZ3MpKQorCXsKKwkJR1VDX2NoZWNr X2VycmRldGFpbCgiTGlzdCBzeW50YXggaXMgaW52YWxpZCIpOworCQlsaXN0X2ZyZWUoZmxh Z3MpOworCQlwZnJlZShyYXd2YWwpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkg KiBDaGVjayB0aGF0IHdlIHJlY29nbmlzZSBlYWNoIHRva2VuLCBhbmQgYWRkIGl0IHRvIHRo ZSBiaXRtYXAgd2UncmUKKwkgKiBidWlsZGluZyB1cCBpbiBhIG5ld2x5LWFsbG9jYXRlZCB1 aW50NjQgKmYuCisJICovCisJZiA9ICh1aW50NjQgKikgbWFsbG9jKHNpemVvZih1aW50NjQp KTsKKwlpZiAoIWYpCisJCXJldHVybiBmYWxzZTsKKwkqZiA9IDA7CisKKwlmb3JlYWNoKGx0 LCBmbGFncykKKwl7CisJCWJvb2wgc3VidHJhY3QgPSBmYWxzZTsKKwkJdWludDY0IGNsYXNz OworCisJCS8qIFJldHJpZXZlIGEgdG9rZW4gKi8KKwkJY2hhciAqdG9rZW4gPSAoY2hhciAq KWxmaXJzdChsdCk7CisKKwkJLyogSWYgdG9rZW4gaXMgcHJlY2VkZWQgYnkgLSwgdGhlbiB0 aGVuIHRva2VuIGlzIHN1YnRyYWN0aXZlLiAqLworCQlpZiAoc3Ryc3RyKHRva2VuLCAiLSIp ID09IHRva2VuKQorCQl7CisJCQl0b2tlbiA9IHRva2VuICsgMTsKKwkJCXN1YnRyYWN0ID0g dHJ1ZTsKKwkJfQorCisJCS8qIFRlc3QgZWFjaCB0b2tlbi4gKi8KKwkJaWYgKHBnX3N0cmNh c2VjbXAodG9rZW4sIENMQVNTX05PTkUpID09IDApCisJCQljbGFzcyA9IExPR19OT05FOwor CQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19BTEwpID09IDApCisJCQlj bGFzcyA9IExPR19BTEw7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNT X0RETCkgPT0gMCkKKwkJCWNsYXNzID0gTE9HX0RETDsKKwkJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcCh0b2tlbiwgQ0xBU1NfRlVOQ1RJT04pID09IDApCisJCQljbGFzcyA9IExPR19GVU5D VElPTjsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcCh0b2tlbiwgQ0xBU1NfTUlTQykgPT0g MCkKKwkJCWNsYXNzID0gTE9HX01JU0M7CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9r ZW4sIENMQVNTX1JFQUQpID09IDApCisJCQljbGFzcyA9IExPR19SRUFEOworCQllbHNlIGlm IChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19XUklURSkgPT0gMCkKKwkJCWNsYXNzID0g TE9HX1dSSVRFOworCQllbHNlCisJCXsKKwkJCWZyZWUoZik7CisJCQlwZnJlZShyYXd2YWwp OworCQkJbGlzdF9mcmVlKGZsYWdzKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8q IEFkZCBvciBzdWJ0cmFjdCBjbGFzcyBiaXRzIGZyb20gdGhlIGxvZyBiaXRtYXAuICovCisJ CWlmIChzdWJ0cmFjdCkKKwkJCSpmICY9IH5jbGFzczsKKwkJZWxzZQorCQkJKmYgfD0gY2xh c3M7CisJfQorCisJcGZyZWUocmF3dmFsKTsKKwlsaXN0X2ZyZWUoZmxhZ3MpOworCisJLyoK KwkgKiBTdG9yZSB0aGUgYml0bWFwIGZvciBhc3NpZ25fcGdhdWRpdF9sb2cuCisJICovCisJ KmV4dHJhID0gZjsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2V0IHBnYXVkaXRf bG9nIGZyb20gZXh0cmEgKGlnbm9yaW5nIG5ld3ZhbCwgd2hpY2ggaGFzIGFscmVhZHkgYmVl biBjb252ZXJ0ZWQKKyAqIHRvIGEgYml0bWFwIGFib3ZlKS4gTm90ZSB0aGF0IGV4dHJhIG1h eSBub3QgYmUgc2V0IGlmIHRoZSBhc3NpZ25tZW50IGlzIHRvIGJlCisgKiBzdXBwcmVzc2Vk LgorICovCitzdGF0aWMgdm9pZAorYXNzaWduX3BnYXVkaXRfbG9nKGNvbnN0IGNoYXIgKm5l d3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJaWYgKGV4dHJhKQorCQlhdWRpdExvZ0JpdG1hcCA9 ICoodWludDY0ICopZXh0cmE7Cit9CisKKy8qCisgKiBEZWZpbmUgR1VDIHZhcmlhYmxlcyBh bmQgaW5zdGFsbCBob29rcyB1cG9uIG1vZHVsZSBsb2FkLgorICovCit2b2lkCitfUEdfaW5p dCh2b2lkKQoreworCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKKwkJCQkgZXJybXNnKCJwZ19hdWRpdCBtdXN0IGJlIGxvYWRlZCB2aWEgc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzIikpKTsKKworCS8qCisJICogcGdfYXVkaXQucm9sZSA9ICJhdWRp dCIKKwkgKgorCSAqIFRoaXMgdmFyaWFibGUgZGVmaW5lcyBhIHJvbGUgdG8gYmUgdXNlZCBm b3IgYXVkaXRpbmcuCisJICovCisJRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX2F1 ZGl0LnJvbGUiLAorCQkJCQkJCSAgICJFbmFibGUgYXVkaXRpbmcgZm9yIHJvbGUiLAorCQkJ CQkJCSAgIE5VTEwsCisJCQkJCQkJICAgJmF1ZGl0Um9sZSwKKwkJCQkJCQkgICAiIiwKKwkJ CQkJCQkgICBQR0NfU1VTRVQsCisJCQkJCQkJICAgR1VDX0xJU1RfSU5QVVQgfCBHVUNfTk9U X0lOX1NBTVBMRSwKKwkJCQkJCQkgICBOVUxMLCBOVUxMLCBOVUxMKTsKKworCS8qCisJICog cGdfYXVkaXQubG9nID0gInJlYWQsIHdyaXRlLCBkZGwiCisJICoKKwkgKiBUaGlzIHZhcmlh YmxlcyBjb250cm9scyB3aGF0IGNsYXNzZXMgb2YgY29tbWFuZHMgYXJlIGxvZ2dlZC4KKwkg Ki8KKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgicGdfYXVkaXQubG9nIiwKKwkJCQkJ CQkgICAiRW5hYmxlIGF1ZGl0aW5nIGZvciBjbGFzc2VzIG9mIGNvbW1hbmRzIiwKKwkJCQkJ CQkgICBOVUxMLAorCQkJCQkJCSAgICZhdWRpdExvZywKKwkJCQkJCQkgICAibm9uZSIsCisJ CQkJCQkJICAgUEdDX1NVU0VULAorCQkJCQkJCSAgIEdVQ19MSVNUX0lOUFVUIHwgR1VDX05P VF9JTl9TQU1QTEUsCisJCQkJCQkJICAgY2hlY2tfcGdhdWRpdF9sb2csCisJCQkJCQkJICAg YXNzaWduX3BnYXVkaXRfbG9nLAorCQkJCQkJCSAgIE5VTEwpOworCisJLyoKKwkgKiBJbnN0 YWxsIG91ciBob29rIGZ1bmN0aW9ucyBhZnRlciBzYXZpbmcgdGhlIGV4aXN0aW5nIHBvaW50 ZXJzIHRvIHByZXNlcnZlCisJICogdGhlIGNoYWluLgorCSAqLworCW5leHRfRXhlY3V0b3JD aGVja1Blcm1zX2hvb2sgPSBFeGVjdXRvckNoZWNrUGVybXNfaG9vazsKKwlFeGVjdXRvckNo ZWNrUGVybXNfaG9vayA9IHBnYXVkaXRfRXhlY3V0b3JDaGVja1Blcm1zX2hvb2s7CisKKwlu ZXh0X1Byb2Nlc3NVdGlsaXR5X2hvb2sgPSBQcm9jZXNzVXRpbGl0eV9ob29rOworCVByb2Nl c3NVdGlsaXR5X2hvb2sgPSBwZ2F1ZGl0X1Byb2Nlc3NVdGlsaXR5X2hvb2s7CisKKwluZXh0 X29iamVjdF9hY2Nlc3NfaG9vayA9IG9iamVjdF9hY2Nlc3NfaG9vazsKKwlvYmplY3RfYWNj ZXNzX2hvb2sgPSBwZ2F1ZGl0X29iamVjdF9hY2Nlc3NfaG9vazsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuY29udHJvbCBiL2NvbnRyaWIvcGdfYXVkaXQv cGdfYXVkaXQuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w YjM5MDgyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5j b250cm9sCkBAIC0wLDAgKzEsNSBAQAorIyBwZ19hdWRpdCBleHRlbnNpb24KK2NvbW1lbnQg PSAncHJvdmlkZXMgYXVkaXRpbmcgZnVuY3Rpb25hbGl0eScKK2RlZmF1bHRfdmVyc2lvbiA9 ICcxLjAuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnYXVkaXQnCityZWxvY2F0 YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvdGVzdC90ZXN0LnBs IGIvY29udHJpYi9wZ19hdWRpdC90ZXN0L3Rlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUK aW5kZXggMDAwMDAwMC4uZGNiOWZkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf YXVkaXQvdGVzdC90ZXN0LnBsCkBAIC0wLDAgKzEsMTI0MyBAQAorIyEvdXNyL2Jpbi9wZXJs CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB0ZXN0LnBsIC0gcGdfYXVkaXQgVW5p dCBUZXN0cworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgUGVybCBpbmNsdWRlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgQ2FycDsKKwordXNlIEdldG9w dDo6TG9uZzsKK3VzZSBQb2Q6OlVzYWdlOwordXNlIERCSTsKK3VzZSBDd2QgcXcoYWJzX3Bh dGgpOwordXNlIElQQzo6U3lzdGVtOjpTaW1wbGUgcXcoY2FwdHVyZSk7CisKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbnN0YW50cworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKK3VzZSBjb25zdGFudAoreworCXRydWUgID0+IDEsCisJZmFsc2UgPT4gMAorfTsK KwordXNlIGNvbnN0YW50Cit7CisJQ09OVEVYVF9HTE9CQUwgICA9PiAnR0xPQkFMJywKKwlD T05URVhUX0RBVEFCQVNFID0+ICdEQVRBQkFTRScsCisJQ09OVEVYVF9ST0xFCSA9PiAnUk9M RScKK307CisKK3VzZSBjb25zdGFudAoreworCUNMQVNTCQkJPT4gJ0NMQVNTJywKKworCUNM QVNTX0RETAkJPT4gJ0RETCcsCisJQ0xBU1NfRlVOQ1RJT04JPT4gJ0ZVTkNUSU9OJywKKwlD TEFTU19NSVNDCQk9PiAnTUlTQycsCisJQ0xBU1NfUkVBRAkJPT4gJ1JFQUQnLAorCUNMQVNT X1dSSVRFCQk9PiAnV1JJVEUnLAorCisJQ0xBU1NfQUxMCQk9PiAnQUxMJywKKwlDTEFTU19O T05FCQk9PiAnTk9ORScKK307CisKK3VzZSBjb25zdGFudAoreworCUNPTU1BTkQJCQkJCQk9 PiAnQ09NTUFORCcsCisJQ09NTUFORF9MT0cJCQkJCT0+ICdDT01NQU5EX0xPRycsCisKKwlD T01NQU5EX0FOQUxZWkUJCQkJPT4gJ0FOQUxZWkUnLAorCUNPTU1BTkRfQUxURVJfQUdHUkVH QVRFCQk9PiAnQUxURVIgQUdHUkVHQVRFJywKKwlDT01NQU5EX0FMVEVSX0NPTExBVElPTgkJ PT4gJ0FMVEVSIENPTExBVElPTicsCisJQ09NTUFORF9BTFRFUl9DT05WRVJTSU9OCT0+ICdB TFRFUiBDT05WRVJTSU9OJywKKwlDT01NQU5EX0FMVEVSX0RBVEFCQVNFCQk9PiAnQUxURVIg REFUQUJBU0UnLAorCUNPTU1BTkRfQUxURVJfUk9MRQkJCT0+ICdBTFRFUiBST0xFJywKKwlD T01NQU5EX0FMVEVSX1JPTEVfU0VUCQk9PiAnQUxURVIgUk9MRSBTRVQnLAorCUNPTU1BTkRf QUxURVJfVEFCTEUJCQk9PiAnQUxURVIgVEFCTEUnLAorCUNPTU1BTkRfQUxURVJfVEFCTEVf SU5ERVgJPT4gJ0FMVEVSIFRBQkxFIElOREVYJywKKwlDT01NQU5EX0JFR0lOCQkJCT0+ICdC RUdJTicsCisJQ09NTUFORF9DTE9TRQkJCQk9PiAnQ0xPU0UgQ1VSU09SJywKKwlDT01NQU5E X0NPTU1JVAkJCQk9PiAnQ09NTUlUJywKKwlDT01NQU5EX0NPUFkJCQkJPT4gJ0NPUFknLAor CUNPTU1BTkRfQ09QWV9UTwkJCQk9PiAnQ09QWSBUTycsCisJQ09NTUFORF9DT1BZX0ZST00J CQk9PiAnQ09QWSBGUk9NJywKKwlDT01NQU5EX0NSRUFURV9BR0dSRUdBVEUJPT4gJ0NSRUFU RSBBR0dSRUdBVEUnLAorCUNPTU1BTkRfQ1JFQVRFX0NPTExBVElPTgk9PiAnQ1JFQVRFIENP TExBVElPTicsCisJQ09NTUFORF9DUkVBVEVfQ09OVkVSU0lPTgk9PiAnQ1JFQVRFIENPTlZF UlNJT04nLAorCUNPTU1BTkRfQ1JFQVRFX0RBVEFCQVNFCQk9PiAnQ1JFQVRFIERBVEFCQVNF JywKKwlDT01NQU5EX0NSRUFURV9JTkRFWAkJPT4gJ0NSRUFURSBJTkRFWCcsCisJQ09NTUFO RF9ERUFMTE9DQVRFCQkJPT4gJ0RFQUxMT0NBVEUnLAorCUNPTU1BTkRfREVDTEFSRV9DVVJT T1IJCT0+ICdERUNMQVJFIENVUlNPUicsCisJQ09NTUFORF9ETwkJCQkJPT4gJ0RPJywKKwlD T01NQU5EX0RJU0NBUkRfQUxMCQkJPT4gJ0RJU0NBUkQgQUxMJywKKwlDT01NQU5EX0NSRUFU RV9GVU5DVElPTgkJPT4gJ0NSRUFURSBGVU5DVElPTicsCisJQ09NTUFORF9DUkVBVEVfUk9M RQkJCT0+ICdDUkVBVEUgUk9MRScsCisJQ09NTUFORF9DUkVBVEVfU0NIRU1BCQk9PiAnQ1JF QVRFIFNDSEVNQScsCisJQ09NTUFORF9DUkVBVEVfVEFCTEUJCT0+ICdDUkVBVEUgVEFCTEUn LAorCUNPTU1BTkRfQ1JFQVRFX1RBQkxFX0FTCQk9PiAnQ1JFQVRFIFRBQkxFIEFTJywKKwlD T01NQU5EX0RST1BfREFUQUJBU0UJCT0+ICdEUk9QIERBVEFCQVNFJywKKwlDT01NQU5EX0RS T1BfU0NIRU1BCQkJPT4gJ0RST1AgU0NIRU1BJywKKwlDT01NQU5EX0RST1BfVEFCTEUJCQk9 PiAnRFJPUCBUQUJMRScsCisJQ09NTUFORF9EUk9QX1RBQkxFX0lOREVYCT0+ICdEUk9QIFRB QkxFIElOREVYJywKKwlDT01NQU5EX0RST1BfVEFCTEVfVFlQRQkJPT4gJ0RST1AgVEFCTEUg VFlQRScsCisJQ09NTUFORF9FWEVDVVRFCQkJCT0+ICdFWEVDVVRFJywKKwlDT01NQU5EX0VY RUNVVEVfUkVBRAkJPT4gJ0VYRUNVVEUgUkVBRCcsCisJQ09NTUFORF9FWEVDVVRFX1dSSVRF CQk9PiAnRVhFQ1VURSBXUklURScsCisJQ09NTUFORF9FWEVDVVRFX0ZVTkNUSU9OCT0+ICdF WEVDVVRFIEZVTkNUSU9OJywKKwlDT01NQU5EX0VYUExBSU4JCQkJPT4gJ0VYUExBSU4nLAor CUNPTU1BTkRfRkVUQ0gJCQkJPT4gJ0ZFVENIJywKKwlDT01NQU5EX0dSQU5UCQkJCT0+ICdH UkFOVCcsCisJQ09NTUFORF9JTlNFUlQJCQkJPT4gJ0lOU0VSVCcsCisJQ09NTUFORF9QUkVQ QVJFCQkJCT0+ICdQUkVQQVJFJywKKwlDT01NQU5EX1BSRVBBUkVfUkVBRAkJPT4gJ1BSRVBB UkUgUkVBRCcsCisJQ09NTUFORF9QUkVQQVJFX1dSSVRFCQk9PiAnUFJFUEFSRSBXUklURScs CisJQ09NTUFORF9SRVZPS0UJCQkJPT4gJ1JFVk9LRScsCisJQ09NTUFORF9TRUxFQ1QJCQkJ PT4gJ1NFTEVDVCcsCisJQ09NTUFORF9TRVQJCQkJCT0+ICdTRVQnLAorCUNPTU1BTkRfVVBE QVRFCQkJCT0+ICdVUERBVEUnCit9OworCit1c2UgY29uc3RhbnQKK3sKKwlUWVBFCQkJPT4g J1RZUEUnLAorCVRZUEVfTk9ORQkJPT4gJycsCisKKwlUWVBFX0ZVTkNUSU9OCT0+ICdGVU5D VElPTicsCisJVFlQRV9JTkRFWAkJPT4gJ0lOREVYJywKKwlUWVBFX1RBQkxFCQk9PiAnVEFC TEUnLAorCVRZUEVfVFlQRQkJPT4gJ1RZUEUnCit9OworCit1c2UgY29uc3RhbnQKK3sKKwlO QU1FCQkJPT4gJ05BTUUnCit9OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBD b21tYW5kIGxpbmUgcGFyYW1ldGVycworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215 ICRzdHJQZ1NxbEJpbiA9ICcuLi8uLi8uLi8uLi9iaW4vYmluJzsJIyBQYXRoIG9mIFBHIGJp bmFyaWVzIHRvIHVzZSBmb3IKKwkJCQkJCQkJCQkJIyB0aGlzIHRlc3QKK215ICRzdHJUZXN0 UGF0aCA9ICcuLi8uLi8uLi8uLi9kYXRhJzsJCSMgUGF0aCB3aGVyZSB0ZXN0aW5nIHdpbGwg b2NjdXIKK215ICRpRGVmYXVsdFBvcnQgPSA2MDAwOwkJCQkJIyBEZWZhdWx0IHBvcnQgdG8g cnVuIFBvc3RncmVzIG9uCitteSAkYkhlbHAgPSBmYWxzZTsJCQkJCQkJIyBEaXNwbGF5IGhl bHAKK215ICRiUXVpZXQgPSBmYWxzZTsJCQkJCQkJIyBTdXByZXNzIG91dHB1dCBleGNlcHQg Zm9yIGVycm9ycworbXkgJGJOb0NsZWFudXAgPSBmYWxzZTsJCQkJCQkjIENsZWFudXAgZGF0 YWJhc2Ugb24gZXhpdAorCitHZXRPcHRpb25zICgncXxxdWlldCcgPT4gXCRiUXVpZXQsCisJ CQknbm8tY2xlYW51cCcgPT4gXCRiTm9DbGVhbnVwLAorCQkJJ2hlbHAnID0+IFwkYkhlbHAs CisJCQkncGdzcWwtYmluPXMnID0+IFwkc3RyUGdTcWxCaW4sCisJCQkndGVzdC1wYXRoPXMn ID0+IFwkc3RyVGVzdFBhdGgpCisJb3IgcG9kMnVzYWdlKDIpOworCisjIERpc3BsYXkgdmVy c2lvbiBhbmQgZXhpdCBpZiByZXF1ZXN0ZWQKK2lmICgkYkhlbHApCit7CisJcHJpbnQgJ3Bn X2F1ZGl0IHVuaXQgdGVzdFxuXG4nOworCXBvZDJ1c2FnZSgpOworCisJZXhpdCAwOworfQor CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHbG9iYWwgdmFyaWFibGVzCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJGhEYjsJCQkJCSMgQ29ubmVjdGlvbiB0byBQ b3N0Z3JlcworbXkgJHN0ckxvZ0V4cGVjdGVkID0gJyc7CSMgVGhlIGV4cGVjdGVkIGxvZyBj b21wYXJlZCB3aXRoIGdyZXBwaW5nIEFVRElUCisJCQkJCQkJIyBlbnRyaWVzIGZyb20gdGhl IHBvc3RncmVzIGxvZy4KKworbXkgJHN0ckRhdGFiYXNlID0gJ3Bvc3RncmVzJzsJIyBDb25u ZWN0ZWQgZGF0YWJhc2UgKG1vZGlmaWVkIGJ5IFBnU2V0RGF0YWJhc2UpCitteSAkc3RyVXNl ciA9ICdwb3N0Z3Jlcyc7CQkjIENvbm5lY3RlZCB1c2VyIChtb2RpZmllZCBieSBQZ1NldFVz ZXIpCitteSAkc3RyQXVkaXRSb2xlID0gJ2F1ZGl0JzsJCSMgUm9sZSB0byB1c2UgZm9yIGF1 ZGl0aW5nCisKK215ICVvQXVkaXRMb2dIYXNoOwkJCQkjIEhhc2ggdG8gc3RvcmUgcGdfYXVk aXQubG9nIEdVQ1MKK215ICVvQXVkaXRHcmFudEhhc2g7CQkJIyBIYXNoIHRvIHN0b3JlIHBn X2F1ZGl0IGdyYW50cworCitteSAkc3RyQ3VycmVudEF1ZGl0TG9nOwkJIyBwZ19hdWRpdC5s b2cgc2V0dGluZyB3YXMgUG9zdGdyZXMgd2FzIHN0YXJ0ZWQgd2l0aAorbXkgJHN0clRlbXBv cmFyeUF1ZGl0TG9nOwkjIHBnX2F1ZGl0LmxvZyBzZXR0aW5nIHRoYXQgd2FzIHNldCBob3QK KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3RvcmVzIHRoZSBtYXBwaW5nIGJl dHdlZW4gY29tbWFuZHMsIGNsYXNzZXMsIGFuZCB0eXBlcworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKK215ICVvQ29tbWFuZEhhc2ggPQorKCZDT01NQU5EX0FOQUxZWkUgPT4gewor CSZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFO RF9BTFRFUl9BR0dSRUdBVEUgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAm VFlQRV9OT05FfSwKKwkmQ09NTUFORF9BTFRFUl9EQVRBQkFTRSA9PiB7JkNMQVNTID0+ICZD TEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX0FMVEVSX0NPTExB VElPTiA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAor CSZDT01NQU5EX0FMVEVSX0NPTlZFUlNJT04gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAm VFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9BTFRFUl9ST0xFID0+IHsmQ0xBU1Mg PT4gJkNMQVNTX0RETCwgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfQUxURVJf Uk9MRV9TRVQgPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9OT05F LAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9BTFRFUl9ST0xFfSwKKwkmQ09NTUFORF9BTFRF Ul9UQUJMRSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX1RBQkxF fSwKKwkmQ09NTUFORF9BTFRFUl9UQUJMRV9JTkRFWCA9PiB7JkNMQVNTID0+ICZDTEFTU19E REwsICZUWVBFID0+ICZUWVBFX0lOREVYLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9BTFRF Ul9UQUJMRX0sCisJJkNPTU1BTkRfQkVHSU4gPT4geyZDTEFTUyA9PiAmQ0xBU1NfTUlTQywg JlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfQ0xPU0UgPT4geyZDTEFTUyA9PiAm Q0xBU1NfTUlTQywgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfQ09NTUlUID0+ IHsmQ0xBU1MgPT4gJkNMQVNTX01JU0MsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01N QU5EX0NPUFlfRlJPTSA9PiB7JkNMQVNTID0+ICZDTEFTU19XUklURSwgJlRZUEUgPT4gJlRZ UEVfTk9ORSwKKwkJJkNPTU1BTkQgPT4gJkNPTU1BTkRfQ09QWX0sCisJJkNPTU1BTkRfQ09Q WV9UTyA9PiB7JkNMQVNTID0+ICZDTEFTU19SRUFELCAmVFlQRSA9PiAmVFlQRV9OT05FLAor CQkmQ09NTUFORCA9PiAmQ09NTUFORF9DT1BZfSwKKwkmQ09NTUFORF9DUkVBVEVfQUdHUkVH QVRFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJ JkNPTU1BTkRfQ1JFQVRFX0NPTlZFUlNJT04gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRERMLCAm VFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9DUkVBVEVfQ09MTEFUSU9OID0+IHsm Q0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRf Q1JFQVRFX0RBVEFCQVNFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUgPT4gJlRZ UEVfTk9ORX0sCisJJkNPTU1BTkRfQ1JFQVRFX0lOREVYID0+IHsmQ0xBU1MgPT4gJkNMQVNT X0RETCwgJlRZUEUgPT4gJlRZUEVfSU5ERVh9LAorCSZDT01NQU5EX0RFQUxMT0NBVEUgPT4g eyZDTEFTUyA9PiAmQ0xBU1NfTUlTQywgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1B TkRfREVDTEFSRV9DVVJTT1IgPT4geyZDTEFTUyA9PiAmQ0xBU1NfUkVBRCwgJlRZUEUgPT4g JlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfRE8gPT4geyZDTEFTUyA9PiAmQ0xBU1NfRlVOQ1RJ T04sICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX0RJU0NBUkRfQUxMID0+IHsm Q0xBU1MgPT4gJkNMQVNTX01JU0MsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5E X0NSRUFURV9GVU5DVElPTiA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZU WVBFX05PTkV9LAorCSZDT01NQU5EX0NSRUFURV9ST0xFID0+IHsmQ0xBU1MgPT4gJkNMQVNT X0RETCwgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfQ1JFQVRFX1NDSEVNQSA9 PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01N QU5EX0NSRUFURV9UQUJMRSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZU WVBFX1RBQkxFfSwKKwkmQ09NTUFORF9DUkVBVEVfVEFCTEVfQVMgPT4geyZDTEFTUyA9PiAm Q0xBU1NfRERMLCAmVFlQRSA9PiAmVFlQRV9UQUJMRX0sCisJJkNPTU1BTkRfRFJPUF9EQVRB QkFTRSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAor CSZDT01NQU5EX0RST1BfU0NIRU1BID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUg PT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfRFJPUF9UQUJMRSA9PiB7JkNMQVNTID0+ICZD TEFTU19EREwsICZUWVBFID0+ICZUWVBFX1RBQkxFfSwKKwkmQ09NTUFORF9EUk9QX1RBQkxF X0lOREVYID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0RETCwgJlRZUEUgPT4gJlRZUEVfSU5ERVgs CisJCSZDT01NQU5EID0+ICZDT01NQU5EX0RST1BfVEFCTEV9LAorCSZDT01NQU5EX0RST1Bf VEFCTEVfVFlQRSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX1RZ UEUsCisJCSZDT01NQU5EID0+ICZDT01NQU5EX0RST1BfVEFCTEV9LAorCSZDT01NQU5EX0VY RUNVVEVfUkVBRCA9PiB7JkNMQVNTID0+ICZDTEFTU19SRUFELCAmVFlQRSA9PiAmVFlQRV9O T05FLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9FWEVDVVRFfSwKKwkmQ09NTUFORF9FWEVD VVRFX1dSSVRFID0+IHsmQ0xBU1MgPT4gJkNMQVNTX1dSSVRFLCAmVFlQRSA9PiAmVFlQRV9O T05FLAorCQkmQ09NTUFORCA9PiAmQ09NTUFORF9FWEVDVVRFfSwKKwkmQ09NTUFORF9FWEVD VVRFX0ZVTkNUSU9OID0+IHsmQ0xBU1MgPT4gJkNMQVNTX0ZVTkNUSU9OLAorCQkmVFlQRSA9 PiAmVFlQRV9GVU5DVElPTiwgJkNPTU1BTkQgPT4gJkNPTU1BTkRfRVhFQ1VURX0sCisJJkNP TU1BTkRfRVhQTEFJTiA9PiB7JkNMQVNTID0+ICZDTEFTU19NSVNDLCAmVFlQRSA9PiAmVFlQ RV9OT05FfSwKKwkmQ09NTUFORF9GRVRDSCA9PiB7JkNMQVNTID0+ICZDTEFTU19NSVNDLCAm VFlQRSA9PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9HUkFOVCA9PiB7JkNMQVNTID0+ICZD TEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5EX1BSRVBBUkVfUkVB RCA9PiB7JkNMQVNTID0+ICZDTEFTU19SRUFELCAmVFlQRSA9PiAmVFlQRV9OT05FLAorCQkm Q09NTUFORCA9PiAmQ09NTUFORF9QUkVQQVJFfSwKKwkmQ09NTUFORF9QUkVQQVJFX1dSSVRF ID0+IHsmQ0xBU1MgPT4gJkNMQVNTX1dSSVRFLCAmVFlQRSA9PiAmVFlQRV9OT05FLAorCQkm Q09NTUFORCA9PiAmQ09NTUFORF9QUkVQQVJFfSwKKwkmQ09NTUFORF9JTlNFUlQgPT4geyZD TEFTUyA9PiAmQ0xBU1NfV1JJVEUsICZUWVBFID0+ICZUWVBFX05PTkV9LAorCSZDT01NQU5E X1JFVk9LRSA9PiB7JkNMQVNTID0+ICZDTEFTU19EREwsICZUWVBFID0+ICZUWVBFX05PTkV9 LAorCSZDT01NQU5EX1NFTEVDVCA9PiB7JkNMQVNTID0+ICZDTEFTU19SRUFELCAmVFlQRSA9 PiAmVFlQRV9OT05FfSwKKwkmQ09NTUFORF9TRVQgPT4geyZDTEFTUyA9PiAmQ0xBU1NfTUlT QywgJlRZUEUgPT4gJlRZUEVfTk9ORX0sCisJJkNPTU1BTkRfVVBEQVRFID0+IHsmQ0xBU1Mg PT4gJkNMQVNTX1dSSVRFLCAmVFlQRSA9PiAmVFlQRV9OT05FfQorKTsKKworIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29tbWFuZEV4ZWN1dGUKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCitzdWIgQ29tbWFuZEV4ZWN1dGUKK3sKKwlteSAkc3RyQ29tbWFuZCA9IHNo aWZ0OworCW15ICRiU3VwcHJlc3NFcnJvciA9IHNoaWZ0OworCisJIyBTZXQgZGVmYXVsdAor CSRiU3VwcHJlc3NFcnJvciA9IGRlZmluZWQoJGJTdXBwcmVzc0Vycm9yKSA/ICRiU3VwcHJl c3NFcnJvciA6IGZhbHNlOworCisJIyBSdW4gdGhlIGNvbW1hbmQKKwlteSAkaVJlc3VsdCA9 IHN5c3RlbSgkc3RyQ29tbWFuZCk7CisKKwlpZiAoJGlSZXN1bHQgIT0gMCAmJiAhJGJTdXBw cmVzc0Vycm9yKQorCXsKKwkJY29uZmVzcyAiY29tbWFuZCAnJHtzdHJDb21tYW5kfScgZmFp bGVkIHdpdGggZXJyb3IgJHtpUmVzdWx0fSI7CisJfQorfQorCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworIyBsb2cKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgbG9n Cit7CisJbXkgJHN0ck1lc3NhZ2UgPSBzaGlmdDsKKwlteSAkYkVycm9yID0gc2hpZnQ7CisK KwkjIFNldCBkZWZhdWx0CisJJGJFcnJvciA9IGRlZmluZWQoJGJFcnJvcikgPyAkYkVycm9y IDogZmFsc2U7CisKKwlpZiAoISRiUXVpZXQpCisJeworCQlwcmludCAiJHtzdHJNZXNzYWdl fVxuIjsKKwl9CisKKwlpZiAoJGJFcnJvcikKKwl7CisJCWV4aXQgMTsKKwl9Cit9CisKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFycmF5VG9TdHJpbmcKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCitzdWIgQXJyYXlUb1N0cmluZworeworCW15IEBzdHJ5QXJyYXkg PSBAXzsKKworCW15ICRzdHJSZXN1bHQgPSAnJzsKKworCWZvciAobXkgJGlJbmRleCA9IDA7 ICRpSW5kZXggPCBAc3RyeUFycmF5OyAkaUluZGV4KyspCisJeworCQlpZiAoJGlJbmRleCAh PSAwKQorCQl7CisJCQkkc3RyUmVzdWx0IC49ICcsICc7CisJCX0KKworCQkkc3RyUmVzdWx0 IC49ICRzdHJ5QXJyYXlbJGlJbmRleF07CisJfQorCisJcmV0dXJuICRzdHJSZXN1bHQ7Cit9 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkTW9kdWxlCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIEJ1aWxkTW9kdWxlCit7CisJY2FwdHVyZSgnY2Qg Li47bWFrZScpOworCUNvbW1hbmRFeGVjdXRlKCJjcCAuLi9wZ19hdWRpdC5zbyIgLgorCSAg ICAgICAgICAgICAgICIgJHtzdHJQZ1NxbEJpbn0vLi4vbGliL3Bvc3RncmVzcWwiKTsKKwlD b21tYW5kRXhlY3V0ZSgiY3AgLi4vcGdfYXVkaXQuY29udHJvbCIgLgorCSAgICAgICAgICAg ICAgICIgJHtzdHJQZ1NxbEJpbn0vLi4vc2hhcmUvcG9zdGdyZXNxbC9leHRlbnNpb24iKTsK KwlDb21tYW5kRXhlY3V0ZSgiY3AgLi4vcGdfYXVkaXQtLTEuMC4wLnNxbCIgLgorCSAgICAg ICAgICAgICAgICIgJHtzdHJQZ1NxbEJpbn0vLi4vc2hhcmUvcG9zdGdyZXNxbC9leHRlbnNp b24iKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdDb25uZWN0Cisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnQ29ubmVjdAoreworCW15ICRpUG9y dCA9IHNoaWZ0OworCisJIyBTZXQgZGVmYXVsdAorCSRpUG9ydCA9IGRlZmluZWQoJGlQb3J0 KSA/ICRpUG9ydCA6ICRpRGVmYXVsdFBvcnQ7CisKKwkjIExvZyBDb25uZWN0aW9uCisJJmxv ZygiICAgREI6IGNvbm5lY3QgdXNlciAke3N0clVzZXJ9LCBkYXRhYmFzZSAke3N0ckRhdGFi YXNlfSIpOworCisJIyBEaXNjb25uZWN0IHVzZXIgc2Vzc2lvbgorCVBnRGlzY29ubmVjdCgp OworCisJIyBDb25uZWN0IHRvIHRoZSBkYgorCSRoRGIgPSBEQkktPmNvbm5lY3QoImRiaTpQ ZzpkYm5hbWU9JHtzdHJEYXRhYmFzZX07cG9ydD0ke2lQb3J0fTtob3N0PS90bXAiLAorCQkJ CQkJJHN0clVzZXIsIHVuZGVmLAorCQkJCQkJe0F1dG9Db21taXQgPT4gMSwgUmFpc2VFcnJv ciA9PiAxfSk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBnRGlzY29u bmVjdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBQZ0Rpc2Nvbm5lY3QKK3sK KwkjIENvbm5lY3QgdG8gdGhlIGRiICh3aGV0aGVyIGl0IGlzIGxvY2FsIG9yIHJlbW90ZSkK KwlpZiAoZGVmaW5lZCgkaERiKSkKKwl7CisJCSRoRGItPmRpc2Nvbm5lY3Q7CisJCXVuZGVm KCRoRGIpOworCX0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdFeGVj dXRlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnRXhlY3V0ZQoreworCW15 ICRzdHJTcWwgPSBzaGlmdDsKKworCSMgTG9nIHRoZSBzdGF0ZW1lbnQKKwkmbG9nKCIgIFNR TDogJHtzdHJTcWx9Iik7CisKKwkjIEV4ZWN1dGUgdGhlIHN0YXRlbWVudAorCW15ICRoU3Rh dGVtZW50ID0gJGhEYi0+cHJlcGFyZSgkc3RyU3FsKTsKKworCSRoU3RhdGVtZW50LT5leGVj dXRlKCk7CisJJGhTdGF0ZW1lbnQtPmZpbmlzaCgpOworfQorCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworIyBQZ0V4ZWN1dGVPbmx5CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Iworc3ViIFBnRXhlY3V0ZU9ubHkKK3sKKwlteSAkc3RyU3FsID0gc2hpZnQ7CisKKwkjIExv ZyB0aGUgc3RhdGVtZW50CisJJmxvZygiICBTUUw6ICR7c3RyU3FsfSIpOworCisJIyBFeGVj dXRlIHRoZSBzdGF0ZW1lbnQKKwkkaERiLT5kbygkc3RyU3FsKTsKK30KKworIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdTZXREYXRhYmFzZQorIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKK3N1YiBQZ1NldERhdGFiYXNlCit7CisJbXkgJHN0ckRhdGFiYXNlUGFyYW0g PSBzaGlmdDsKKworCSMgU3RvcCBhbmQgc3RhcnQgdGhlIGRhdGFiYXNlIHRvIHJlc2V0IHBn Y29uZiBlbnRyaWVzCisJUGdTdG9wKCk7CisJUGdTdGFydCgpOworCisJIyBFeGVjdXRlIHRo ZSBzdGF0ZW1lbnQKKwkkc3RyRGF0YWJhc2UgPSAkc3RyRGF0YWJhc2VQYXJhbTsKKwlQZ0Nv bm5lY3QoKTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdTZXRVc2Vy CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnU2V0VXNlcgoreworCW15ICRz dHJVc2VyUGFyYW0gPSBzaGlmdDsKKworCSRzdHJVc2VyID0gJHN0clVzZXJQYXJhbTsKKwor CSMgU3RvcCBhbmQgc3RhcnQgdGhlIGRhdGFiYXNlIHRvIHJlc2V0IHBnY29uZiBlbnRyaWVz CisJaWYgKChkZWZpbmVkKCRzdHJUZW1wb3JhcnlBdWRpdExvZykgJiYgIWRlZmluZWQoJHN0 ckN1cnJlbnRBdWRpdExvZykpIHx8CisJCShkZWZpbmVkKCRzdHJDdXJyZW50QXVkaXRMb2cp ICYmICFkZWZpbmVkKCRzdHJUZW1wb3JhcnlBdWRpdExvZykpIHx8CisJCSRzdHJDdXJyZW50 QXVkaXRMb2cgbmUgJHN0clRlbXBvcmFyeUF1ZGl0TG9nKQorCXsKKwkJJHN0ckN1cnJlbnRB dWRpdExvZyA9ICRzdHJUZW1wb3JhcnlBdWRpdExvZzsKKworCQlQZ1N0b3AoKTsKKwkJUGdT dGFydCgpOworCX0KKwllbHNlCisJeworCQkjIEV4ZWN1dGUgdGhlIHN0YXRlbWVudAorCQlQ Z0Nvbm5lY3QoKTsKKwl9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNh dmVTdHJpbmcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgU2F2ZVN0cmluZwor eworCW15ICRzdHJGaWxlID0gc2hpZnQ7CisJbXkgJHN0clN0cmluZyA9IHNoaWZ0OworCisJ IyBPcGVuIHRoZSBmaWxlIGZvciB3cml0aW5nCisJbXkgJGhGaWxlOworCisJb3BlbigkaEZp bGUsICc+JywgJHN0ckZpbGUpCisJCW9yIGNvbmZlc3MgInVuYWJsZSB0byBvcGVuICR7c3Ry RmlsZX0iOworCisJaWYgKCRzdHJTdHJpbmcgbmUgJycpCisJeworCQlzeXN3cml0ZSgkaEZp bGUsICRzdHJTdHJpbmcpCisJCQlvciBjb25mZXNzICJ1bmFibGUgdG8gd3JpdGUgdG8gJHtz dHJGaWxlfTogJCEiOworCX0KKworCWNsb3NlKCRoRmlsZSk7Cit9CisKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIFBnTG9nRXhlY3V0ZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKK3N1YiBQZ0xvZ0V4ZWN1dGUKK3sKKwlteSAkc3RyQ29tbWFuZCA9IHNoaWZ0Owor CW15ICRzdHJTcWwgPSBzaGlmdDsKKwlteSAkb0RhdGEgPSBzaGlmdDsKKwlteSAkYkV4ZWN1 dGUgPSBzaGlmdDsKKwlteSAkYldhaXQgPSBzaGlmdDsKKwlteSAkYkxvZ1NxbCA9IHNoaWZ0 OworCisJIyBTZXQgZGVmYXVsdHMKKwkkYkV4ZWN1dGUgPSBkZWZpbmVkKCRiRXhlY3V0ZSkg PyAkYkV4ZWN1dGUgOiB0cnVlOworCSRiV2FpdCA9IGRlZmluZWQoJGJXYWl0KSA/ICRiV2Fp dCA6IHRydWU7CisJJGJMb2dTcWwgPSBkZWZpbmVkKCRiTG9nU3FsKSA/ICRiTG9nU3FsIDog dHJ1ZTsKKworCWlmICgkYkV4ZWN1dGUpCisJeworCQlQZ0V4ZWN1dGVPbmx5KCRzdHJTcWwp OworCX0KKworCVBnTG9nRXhwZWN0KCRzdHJDb21tYW5kLCAkYkxvZ1NxbCA/ICRzdHJTcWwg OiAnJywgJG9EYXRhKTsKKworCWlmICgkYldhaXQpCisJeworCQlQZ0xvZ1dhaXQoKTsKKwl9 Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBnTG9nRXhwZWN0CisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnTG9nRXhwZWN0Cit7CisJbXkgJHN0ckNv bW1hbmQgPSBzaGlmdDsKKwlteSAkc3RyU3FsID0gc2hpZnQ7CisJbXkgJG9EYXRhID0gc2hp ZnQ7CisKKwkjIElmIG9EYXRhIGlzIGZhbHNlIHRoZW4gbm8gbG9nZ2luZworCWlmIChkZWZp bmVkKCRvRGF0YSkgJiYgcmVmKCRvRGF0YSkgZXEgJycgJiYgISRvRGF0YSkKKwl7CisJCXJl dHVybjsKKwl9CisKKwkjIExvZyBiYXNlZCBvbiBzZXNzaW9uCisJaWYgKFBnU2hvdWxkTG9n KCRzdHJDb21tYW5kKSkKKwl7CisJCSMgTWFrZSBzdXJlIGNsYXNzIGlzIGRlZmluZWQKKwkJ bXkgJHN0ckNsYXNzID0gJG9Db21tYW5kSGFzaHskc3RyQ29tbWFuZH17JkNMQVNTfTsKKwor CQlpZiAoIWRlZmluZWQoJHN0ckNsYXNzKSkKKwkJeworCQkJY29uZmVzcyAiY2xhc3MgaXMg bm90IGRlZmluZWQgZm9yIGNvbW1hbmQgJHtzdHJDb21tYW5kfSI7CisJCX0KKworCQkjIE1h a2Ugc3VyZSBvYmplY3QgdHlwZSBpcyBkZWZpbmVkCisJCW15ICRzdHJPYmplY3RUeXBlID0g JG9Db21tYW5kSGFzaHskc3RyQ29tbWFuZH17JlRZUEV9OworCisJCWlmICghZGVmaW5lZCgk c3RyT2JqZWN0VHlwZSkpCisJCXsKKwkJCWNvbmZlc3MgIm9iamVjdCB0eXBlIGlzIG5vdCBk ZWZpbmVkIGZvciBjb21tYW5kICR7c3RyQ29tbWFuZH0iOworCQl9CisKKwkJIyBDaGVjayBm b3IgY29tbWFuZCBvdmVycmlkZQorCQlteSAkc3RyQ29tbWFuZExvZyA9ICRzdHJDb21tYW5k OworCisJCWlmICgkb0NvbW1hbmRIYXNoeyRzdHJDb21tYW5kfXsmQ09NTUFORH0pCisJCXsK KwkJCSRzdHJDb21tYW5kTG9nID0gJG9Db21tYW5kSGFzaHskc3RyQ29tbWFuZH17JkNPTU1B TkR9OworCQl9CisKKwkJbXkgJHN0ck9iamVjdE5hbWUgPSAnJzsKKworCQlpZiAoZGVmaW5l ZCgkb0RhdGEpICYmIHJlZigkb0RhdGEpIG5lICdBUlJBWScpCisJCXsKKwkJCSRzdHJPYmpl Y3ROYW1lID0gJG9EYXRhOworCQl9CisKKwkJbXkgJHN0ckxvZyAuPSAiU0VTU0lPTiwke3N0 ckNsYXNzfSwke3N0ckNvbW1hbmRMb2d9LCIgLgorCQkJCQkgICIke3N0ck9iamVjdFR5cGV9 LCR7c3RyT2JqZWN0TmFtZX0sJHtzdHJTcWx9IjsKKwkJJmxvZygiQVVESVQ6ICR7c3RyTG9n fSIpOworCisJCSRzdHJMb2dFeHBlY3RlZCAuPSAiJHtzdHJMb2d9XG4iOworCX0KKworCSMg TG9nIGJhc2VkIG9uIGdyYW50cworCWlmIChyZWYoJG9EYXRhKSBlcSAnQVJSQVknICYmICgk c3RyQ29tbWFuZCBlcSBDT01NQU5EX1NFTEVDVCB8fAorCQkkb0NvbW1hbmRIYXNoeyRzdHJD b21tYW5kfXsmQ0xBU1N9IGVxIENMQVNTX1dSSVRFKSkKKwl7CisJCWZvcmVhY2ggbXkgJG9U YWJsZUhhc2ggKEB7JG9EYXRhfSkKKwkJeworCQkJbXkgJHN0ck9iamVjdE5hbWUgPSAkeyRv VGFibGVIYXNofXsmTkFNRX07CisJCQlteSAkc3RyQ29tbWFuZExvZyA9ICR7JG9UYWJsZUhh c2h9eyZDT01NQU5EfTsKKworCQkJaWYgKGRlZmluZWQoJG9BdWRpdEdyYW50SGFzaHskc3Ry QXVkaXRSb2xlfQorCQkJCQkJCQkJCXskc3RyT2JqZWN0TmFtZX17JHN0ckNvbW1hbmRMb2d9 KSkKKwkJCXsKKwkJCQlteSAkc3RyQ29tbWFuZExvZyA9IGRlZmluZWQoJHskb1RhYmxlSGFz aH17JkNPTU1BTkRfTE9HfSkgPworCQkJCQkkeyRvVGFibGVIYXNofXsmQ09NTUFORF9MT0d9 IDogJHN0ckNvbW1hbmRMb2c7CisJCQkJbXkgJHN0ckNsYXNzID0gJG9Db21tYW5kSGFzaHsk c3RyQ29tbWFuZExvZ317JkNMQVNTfTsKKwkJCQlteSAkc3RyT2JqZWN0VHlwZSA9ICR7JG9U YWJsZUhhc2h9eyZUWVBFfTsKKworCQkJCW15ICRzdHJMb2cgLj0gIk9CSkVDVCwke3N0ckNs YXNzfSwke3N0ckNvbW1hbmRMb2d9LCIgLgorCQkJCQkJCSAgIiR7c3RyT2JqZWN0VHlwZX0s JHtzdHJPYmplY3ROYW1lfSwke3N0clNxbH0iOworCQkJCSZsb2coIkFVRElUOiAke3N0ckxv Z30iKTsKKworCQkJCSRzdHJMb2dFeHBlY3RlZCAuPSAiJHtzdHJMb2d9XG4iOworCQkJfQor CQl9CisKKwkJJG9EYXRhID0gdW5kZWY7CisJfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworIyBQZ1Nob3VsZExvZworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1 YiBQZ1Nob3VsZExvZworeworCW15ICRzdHJDb21tYW5kID0gc2hpZnQ7CisKKwkjIE1ha2Ug c3VyZSBjbGFzcyBpcyBkZWZpbmVkCisJbXkgJHN0ckNsYXNzID0gJG9Db21tYW5kSGFzaHsk c3RyQ29tbWFuZH17JkNMQVNTfTsKKworCWlmICghZGVmaW5lZCgkc3RyQ2xhc3MpKQorCXsK KwkJY29uZmVzcyAiY2xhc3MgaXMgbm90IGRlZmluZWQgZm9yIGNvbW1hbmQgJHtzdHJDb21t YW5kfSI7CisJfQorCisJIyBDaGVjayBsb2dnaW5nIGZvciB0aGUgcm9sZQorCW15ICRiTG9n ID0gdW5kZWY7CisKKwlpZiAoZGVmaW5lZCgkb0F1ZGl0TG9nSGFzaHsmQ09OVEVYVF9ST0xF fXskc3RyVXNlcn0pKQorCXsKKwkJJGJMb2cgPSAkb0F1ZGl0TG9nSGFzaHsmQ09OVEVYVF9S T0xFfXskc3RyVXNlcn17JHN0ckNsYXNzfTsKKwl9CisKKwkjIEVsc2UgY2hlY2sgbG9nZ2lu ZyBmb3IgdGhlIGRiCisJZWxzaWYgKGRlZmluZWQoJG9BdWRpdExvZ0hhc2h7JkNPTlRFWFRf REFUQUJBU0V9eyRzdHJEYXRhYmFzZX0pKQorCXsKKwkJJGJMb2cgPSAkb0F1ZGl0TG9nSGFz aHsmQ09OVEVYVF9EQVRBQkFTRX17JHN0ckRhdGFiYXNlfXskc3RyQ2xhc3N9OworCX0KKwor CSMgRWxzZSBjaGVjayBsb2dnaW5nIGZvciBnbG9iYWwKKwllbHNpZiAoZGVmaW5lZCgkb0F1 ZGl0TG9nSGFzaHsmQ09OVEVYVF9HTE9CQUx9eyZDT05URVhUX0dMT0JBTH0pKQorCXsKKwkJ JGJMb2cgPSAkb0F1ZGl0TG9nSGFzaHsmQ09OVEVYVF9HTE9CQUx9eyZDT05URVhUX0dMT0JB TH17JHN0ckNsYXNzfTsKKwl9CisKKwlyZXR1cm4gZGVmaW5lZCgkYkxvZykgPyB0cnVlIDog ZmFsc2U7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBnTG9nV2FpdAor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBQZ0xvZ1dhaXQKK3sKKwlteSAkc3Ry TG9nQWN0dWFsOworCisJIyBSdW4gaW4gYW4gZXZhbCBibG9jayBzaW5jZSBncmVwIHJldHVy bnMgMSB3aGVuIG5vdGhpbmcgd2FzIGZvdW5kCisJZXZhbAorCXsKKwkJJHN0ckxvZ0FjdHVh bCA9IGNhcHR1cmUoImdyZXAgJ0xPRzogIEFVRElUOiAnIiAuCisJCQkJCQkJCSIgJHtzdHJU ZXN0UGF0aH0vcG9zdGdyZXNxbC5sb2ciKTsKKwl9OworCisJIyBJZiBhbiBlcnJvciB3YXMg cmV0dXJuZWQsIGNvbnRpbnVlIGlmIGl0IHdhcyAxLCBvdGhlcndpc2UgY29uZmVzcworCWlm ICgkQCkKKwl7CisJCW15ICRpRXhpdFN0YXR1cyA9ICQ/ID4+IDg7CisKKwkJaWYgKCRpRXhp dFN0YXR1cyAhPSAxKQorCQl7CisJCQljb25mZXNzICJncmVwIHJldHVybmVkICR7aUV4aXRT dGF0dXN9IjsKKwkJfQorCisJCSRzdHJMb2dBY3R1YWwgPSAnJzsKKwl9CisKKwkjIFN0cmlw IHRoZSBBVURJVCBhbmQgdGltZXN0YW1wIGZyb20gdGhlIGFjdHVhbCBsb2cKKwkkc3RyTG9n QWN0dWFsID1+IHMvcHJlZml4IExPRzogIEFVRElUXDogLy9nOworCisJIyBTYXZlIHRoZSBs b2dzCisJU2F2ZVN0cmluZygiJHtzdHJUZXN0UGF0aH0vYXVkaXQuYWN0dWFsIiwgJHN0ckxv Z0FjdHVhbCk7CisJU2F2ZVN0cmluZygiJHtzdHJUZXN0UGF0aH0vYXVkaXQuZXhwZWN0ZWQi LCAkc3RyTG9nRXhwZWN0ZWQpOworCisJQ29tbWFuZEV4ZWN1dGUoImRpZmYgJHtzdHJUZXN0 UGF0aH0vYXVkaXQuZXhwZWN0ZWQiIC4KKwkJCQkgICAiICR7c3RyVGVzdFBhdGh9L2F1ZGl0 LmFjdHVhbCIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQZ0Ryb3AK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdEcm9wCit7CisJbXkgJHN0clBh dGggPSBzaGlmdDsKKworCSMgU2V0IGRlZmF1bHQKKwkkc3RyUGF0aCA9IGRlZmluZWQoJHN0 clBhdGgpID8gJHN0clBhdGggOiAkc3RyVGVzdFBhdGg7CisKKwkjIFN0b3AgdGhlIGNsdXN0 ZXIKKwlQZ1N0b3AodHJ1ZSwgJHN0clBhdGgpOworCisJIyBSZW1vdmUgdGhlIGRpcmVjdG9y eQorCUNvbW1hbmRFeGVjdXRlKCJybSAtcmYgJHtzdHJUZXN0UGF0aH0iKTsKK30KKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGdDcmVhdGUKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCitzdWIgUGdDcmVhdGUKK3sKKwlteSAkc3RyUGF0aCA9IHNoaWZ0OworCisJ IyBTZXQgZGVmYXVsdAorCSRzdHJQYXRoID0gZGVmaW5lZCgkc3RyUGF0aCkgPyAkc3RyUGF0 aCA6ICRzdHJUZXN0UGF0aDsKKworCUNvbW1hbmRFeGVjdXRlKCIke3N0clBnU3FsQmlufS9p bml0ZGIgLUQgJHtzdHJQYXRofSAtVSAke3N0clVzZXJ9IiAuCisJCQkJICAgJyAtQSB0cnVz dCA+IC9kZXYvbnVsbCcpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQ Z1N0b3AKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgUGdTdG9wCit7CisJbXkg JGJJbW1lZGlhdGUgPSBzaGlmdDsKKwlteSAkc3RyUGF0aCA9IHNoaWZ0OworCisJIyBTZXQg ZGVmYXVsdAorCSRzdHJQYXRoID0gZGVmaW5lZCgkc3RyUGF0aCkgPyAkc3RyUGF0aCA6ICRz dHJUZXN0UGF0aDsKKwkkYkltbWVkaWF0ZSA9IGRlZmluZWQoJGJJbW1lZGlhdGUpID8gJGJJ bW1lZGlhdGUgOiBmYWxzZTsKKworCSMgRGlzY29ubmVjdCB1c2VyIHNlc3Npb24KKwlQZ0Rp c2Nvbm5lY3QoKTsKKworCSMgSWYgcG9zdG1hc3RlciBwcm9jZXNzIGlzIHJ1bm5pbmcgdGhl biBzdG9wIHRoZSBjbHVzdGVyCisJaWYgKC1lICRzdHJQYXRoIC4gJy9wb3N0bWFzdGVyLnBp ZCcpCisJeworCQlDb21tYW5kRXhlY3V0ZSgiJHtzdHJQZ1NxbEJpbn0vcGdfY3RsIHN0b3Ag LUQgJHtzdHJQYXRofSAtdyAtcyAtbSAiIC4KKwkJCQkJICAoJGJJbW1lZGlhdGUgPyAnaW1t ZWRpYXRlJyA6ICdmYXN0JykpOworCX0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKyMgUGdTdGFydAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBQZ1N0YXJ0 Cit7CisJbXkgJGlQb3J0ID0gc2hpZnQ7CisJbXkgJHN0clBhdGggPSBzaGlmdDsKKworCSMg U2V0IGRlZmF1bHQKKwkkaVBvcnQgPSBkZWZpbmVkKCRpUG9ydCkgPyAkaVBvcnQgOiAkaURl ZmF1bHRQb3J0OworCSRzdHJQYXRoID0gZGVmaW5lZCgkc3RyUGF0aCkgPyAkc3RyUGF0aCA6 ICRzdHJUZXN0UGF0aDsKKworCSMgTWFrZSBzdXJlIHBvc3RncmVzIGlzIG5vdCBydW5uaW5n CisJaWYgKC1lICRzdHJQYXRoIC4gJy9wb3N0bWFzdGVyLnBpZCcpCisJeworCQljb25mZXNz ICIke3N0clBhdGh9L3Bvc3RtYXN0ZXIucGlkIGV4aXN0cywgY2Fubm90IHN0YXJ0IjsKKwl9 CisKKwkjIFN0YXJ0IHRoZSBjbHVzdGVyCisJQ29tbWFuZEV4ZWN1dGUoIiR7c3RyUGdTcWxC aW59L3BnX2N0bCBzdGFydCAtbyBcIiIgLgorCQkJCSAgICItYyBwb3J0PSR7aVBvcnR9IiAu CisJCQkJICAgIiAtYyB1bml4X3NvY2tldF9kaXJlY3Rvcmllcz0nL3RtcCciIC4KKwkJCQkg ICAiIC1jIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz0ncGdfYXVkaXQnIiAuCisJCQkJICAg IiAtYyBsb2dfbWluX21lc3NhZ2VzPWRlYnVnMSIgLgorCQkJCSAgICIgLWMgbG9nX2xpbmVf cHJlZml4PSdwcmVmaXggJyIgLgorCQkJCSAgICMgIiAtYyBsb2dfZGVzdGluYXRpb249J3N0 ZGVycixjc3Zsb2cnIiAuCisJCQkJICAgIyAiIC1jIGxvZ2dpbmdfY29sbGVjdG9yPW9uIiAu CisJCQkJICAgKGRlZmluZWQoJHN0ckN1cnJlbnRBdWRpdExvZykgPworCQkJCQkgICAiIC1j IHBnX2F1ZGl0LmxvZz0nJHtzdHJDdXJyZW50QXVkaXRMb2d9JyIgOiAnJykgLgorCQkJCSAg ICIgLWMgcGdfYXVkaXQucm9sZT0nJHtzdHJBdWRpdFJvbGV9JyIgLgorCQkJCSAgICIgLWMg bG9nX2Nvbm5lY3Rpb25zPW9uIiAuCisJCQkJICAgIlwiIC1EICR7c3RyUGF0aH0gLWwgJHtz dHJQYXRofS9wb3N0Z3Jlc3FsLmxvZyAtdyAtcyIpOworCisJIyBDb25uZWN0IHVzZXIgc2Vz c2lvbgorCVBnQ29ubmVjdCgpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IyBQZ0F1ZGl0TG9nU2V0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3ViIFBnQXVk aXRMb2dTZXQKK3sKKwlteSAkc3RyQ29udGV4dCA9IHNoaWZ0OworCW15ICRzdHJOYW1lID0g c2hpZnQ7CisJbXkgQHN0cnlDbGFzcyA9IEBfOworCisJIyBDcmVhdGUgU1FMIHRvIHNldCB0 aGUgR1VDCisJbXkgJHN0ckNvbW1hbmQ7CisJbXkgJHN0clNxbDsKKworCWlmICgkc3RyQ29u dGV4dCBlcSBDT05URVhUX0dMT0JBTCkKKwl7CisJCSRzdHJDb21tYW5kID0gQ09NTUFORF9T RVQ7CisJCSRzdHJTcWwgPSAic2V0IHBnX2F1ZGl0LmxvZyA9ICciIC4KKwkJCQkgIEFycmF5 VG9TdHJpbmcoQHN0cnlDbGFzcykgLiAiJyI7CisJCSRzdHJUZW1wb3JhcnlBdWRpdExvZyA9 IEFycmF5VG9TdHJpbmcoQHN0cnlDbGFzcyk7CisJfQorCWVsc2lmICgkc3RyQ29udGV4dCBl cSBDT05URVhUX1JPTEUpCisJeworCQkkc3RyQ29tbWFuZCA9IENPTU1BTkRfQUxURVJfUk9M RV9TRVQ7CisJCSRzdHJTcWwgPSAiYWx0ZXIgcm9sZSAke3N0ck5hbWV9IHNldCBwZ19hdWRp dC5sb2cgPSAnIiAuCisJCQkJICBBcnJheVRvU3RyaW5nKEBzdHJ5Q2xhc3MpIC4gIiciOwor CX0KKwllbHNlCisJeworCQljb25mZXNzICJ1bmFibGUgdG8gc2V0IHBnX2F1ZGl0LmxvZyBm b3IgY29udGV4dCAke3N0ckNvbnRleHR9IjsKKwl9CisKKwkjIFJlc2V0IHRoZSBhdWRpdCBs b2cKKwlpZiAoJHN0ckNvbnRleHQgZXEgQ09OVEVYVF9HTE9CQUwpCisJeworCQlkZWxldGUo JG9BdWRpdExvZ0hhc2h7JHN0ckNvbnRleHR9KTsKKwkJJHN0ck5hbWUgPSBDT05URVhUX0dM T0JBTDsKKwl9CisJZWxzZQorCXsKKwkJZGVsZXRlKCRvQXVkaXRMb2dIYXNoeyRzdHJDb250 ZXh0fXskc3RyTmFtZX0pOworCX0KKworCSMgU3RvcmUgYWxsIHRoZSBjbGFzc2VzIGluIHRo ZSBoYXNoIGFuZCBidWlsZCB0aGUgR1VDCisJZm9yZWFjaCBteSAkc3RyQ2xhc3MgKEBzdHJ5 Q2xhc3MpCisJeworCQlpZiAoJHN0ckNsYXNzIGVxIENMQVNTX0FMTCkKKwkJeworCQkJJG9B dWRpdExvZ0hhc2h7JHN0ckNvbnRleHR9eyRzdHJOYW1lfXsmQ0xBU1NfRERMfSA9IHRydWU7 CisJCQkkb0F1ZGl0TG9nSGFzaHskc3RyQ29udGV4dH17JHN0ck5hbWV9eyZDTEFTU19GVU5D VElPTn0gPSB0cnVlOworCQkJJG9BdWRpdExvZ0hhc2h7JHN0ckNvbnRleHR9eyRzdHJOYW1l fXsmQ0xBU1NfTUlTQ30gPSB0cnVlOworCQkJJG9BdWRpdExvZ0hhc2h7JHN0ckNvbnRleHR9 eyRzdHJOYW1lfXsmQ0xBU1NfUkVBRH0gPSB0cnVlOworCQkJJG9BdWRpdExvZ0hhc2h7JHN0 ckNvbnRleHR9eyRzdHJOYW1lfXsmQ0xBU1NfV1JJVEV9ID0gdHJ1ZTsKKwkJfQorCisJCWlm IChpbmRleCgkc3RyQ2xhc3MsICctJykgPT0gMCkKKwkJeworCQkJJHN0ckNsYXNzID0gc3Vi c3RyKCRzdHJDbGFzcywgMSk7CisKKwkJCWRlbGV0ZSgkb0F1ZGl0TG9nSGFzaHskc3RyQ29u dGV4dH17JHN0ck5hbWV9eyRzdHJDbGFzc30pOworCQl9CisJCWVsc2UKKwkJeworCQkJJG9B dWRpdExvZ0hhc2h7JHN0ckNvbnRleHR9eyRzdHJOYW1lfXskc3RyQ2xhc3N9ID0gdHJ1ZTsK KwkJfQorCX0KKworCVBnTG9nRXhlY3V0ZSgkc3RyQ29tbWFuZCwgJHN0clNxbCk7Cit9CisK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBnQXVkaXRHcmFudFNldAorIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiBQZ0F1ZGl0R3JhbnRTZXQKK3sKKwlteSAkc3Ry Um9sZSA9IHNoaWZ0OworCW15ICRzdHJQcml2aWxlZ2UgPSBzaGlmdDsKKwlteSAkc3RyT2Jq ZWN0ID0gc2hpZnQ7CisJbXkgJHN0ckNvbHVtbiA9IHNoaWZ0OworCisJIyBDcmVhdGUgU1FM IHRvIHNldCB0aGUgZ3JhbnQKKwlQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9HUkFOVCwgImdyYW50 ICIgLiBsYygke3N0clByaXZpbGVnZX0pIC4KKwkJCQkJCQkJKGRlZmluZWQoJHN0ckNvbHVt bikgPyAiICgke3N0ckNvbHVtbn0pIiA6ICcnKSAuCisJCQkJCQkJCSIgb24gJHtzdHJPYmpl Y3R9IHRvICR7c3RyUm9sZX0iKTsKKworCSRvQXVkaXRHcmFudEhhc2h7JHN0clJvbGV9eyRz dHJPYmplY3R9eyRzdHJQcml2aWxlZ2V9ID0gdHJ1ZTsKK30KKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgUGdBdWRpdEdyYW50UmVzZXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCitzdWIgUGdBdWRpdEdyYW50UmVzZXQKK3sKKwlteSAkc3RyUm9sZSA9IHNoaWZ0 OworCW15ICRzdHJQcml2aWxlZ2UgPSBzaGlmdDsKKwlteSAkc3RyT2JqZWN0ID0gc2hpZnQ7 CisJbXkgJHN0ckNvbHVtbiA9IHNoaWZ0OworCisJIyBDcmVhdGUgU1FMIHRvIHNldCB0aGUg Z3JhbnQKKwlQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9SRVZPS0UsICJyZXZva2UgIiAuIGxjKCR7 c3RyUHJpdmlsZWdlfSkgLgorCQkJCSAoZGVmaW5lZCgkc3RyQ29sdW1uKSA/ICIgKCR7c3Ry Q29sdW1ufSkiIDogJycpIC4KKwkJCQkgIiBvbiAke3N0ck9iamVjdH0gZnJvbSAke3N0clJv bGV9Iik7CisKKwlkZWxldGUoJG9BdWRpdEdyYW50SGFzaHskc3RyUm9sZX17JHN0ck9iamVj dH17JHN0clByaXZpbGVnZX0pOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IyBNYWluCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgQG95VGFibGU7ICMgU3Rv cmUgdGFibGUgaW5mbyBmb3Igc2VsZWN0LCBpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlCisKKyMg RHJvcCB0aGUgb2xkIGNsdXN0ZXIsIGJ1aWxkIHRoZSBjb2RlLCBhbmQgY3JlYXRlIGEgbmV3 IGNsdXN0ZXIKK1BnRHJvcCgpOworQnVpbGRNb2R1bGUoKTsKK1BnQ3JlYXRlKCk7CitQZ1N0 YXJ0KCk7CisKK1BnRXhlY3V0ZSgiY3JlYXRlIGV4dGVuc2lvbiBwZ19hdWRpdCIpOworCisj IENyZWF0ZSB0ZXN0IHVzZXJzIGFuZCB0aGUgYXVkaXQgcm9sZQorUGdFeGVjdXRlKCJjcmVh dGUgdXNlciB1c2VyMSIpOworUGdFeGVjdXRlKCJjcmVhdGUgdXNlciB1c2VyMiIpOworUGdF eGVjdXRlKCJjcmVhdGUgcm9sZSAke3N0ckF1ZGl0Um9sZX0iKTsKKworUGdBdWRpdExvZ1Nl dChDT05URVhUX0dMT0JBTCwgdW5kZWYsIChDTEFTU19EREwpKTsKKworUGdBdWRpdExvZ1Nl dChDT05URVhUX1JPTEUsICd1c2VyMicsIChDTEFTU19SRUFELCBDTEFTU19XUklURSkpOwor CisjIFVzZXIxIGZvbGxvd3MgdGhlIGdsb2JhbCBsb2cgc2V0dGluZ3MKK1BnU2V0VXNlcign dXNlcjEnKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwgJ2NyZWF0ZSB0 YWJsZSB0ZXN0IChpZCBpbnQpJywgJ3B1YmxpYy50ZXN0Jyk7CitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9TRUxFQ1QsICdzZWxlY3QgKiBmcm9tIHRlc3QnKTsKKworUGdMb2dFeGVjdXRlKENP TU1BTkRfRFJPUF9UQUJMRSwgJ2Ryb3AgdGFibGUgdGVzdCcsICdwdWJsaWMudGVzdCcpOwor CitQZ1NldFVzZXIoJ3VzZXIyJyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DUkVBVEVfVEFC TEUsCisgICAgICAgICAgICAgJ2NyZWF0ZSB0YWJsZSB0ZXN0MiAoaWQgaW50KScsICdwdWJs aWMudGVzdDInKTsKK1BnQXVkaXRHcmFudFNldCgkc3RyQXVkaXRSb2xlLCAmQ09NTUFORF9T RUxFQ1QsICdwdWJsaWMudGVzdDInKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9U QUJMRSwKKyAgICAgICAgICAgICAnY3JlYXRlIHRhYmxlIHRlc3QzIChpZCBpbnQpJywgJ3B1 YmxpYy50ZXN0MicpOworCisjIENhdGFsb2cgc2VsZWN0IHNob3VsZCBub3QgbG9nCitQZ0xv Z0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3QgKiBmcm9tIHBnX2NsYXNzIGxpbWl0 IDEnLAorCQkJCQkJCSAgIGZhbHNlKTsKKworIyBNdWx0aS10YWJsZSBzZWxlY3QKK0BveVRh YmxlID0gKHsmTkFNRSA9PiAncHVibGljLnRlc3QzJywgJlRZUEUgPT4gJlRZUEVfVEFCTEUs CisJCQkgJkNPTU1BTkQgPT4gJkNPTU1BTkRfU0VMRUNUfSwKKwkJCXsmTkFNRSA9PiAncHVi bGljLnRlc3QyJywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisJCQkgJkNPTU1BTkQgPT4gJkNP TU1BTkRfU0VMRUNUfSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3Qg KiBmcm9tIHRlc3QzLCB0ZXN0MicsCisJCQkJCQkJICAgXEBveVRhYmxlKTsKKworIyBWYXJp b3VzIENURSBjb21iaW5hdGlvbnMKK1BnQXVkaXRHcmFudFNldCgkc3RyQXVkaXRSb2xlLCAm Q09NTUFORF9JTlNFUlQsICdwdWJsaWMudGVzdDMnKTsKKworQG95VGFibGUgPSAoeyZOQU1F ID0+ICdwdWJsaWMudGVzdDMnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFO RCA9PiAmQ09NTUFORF9JTlNFUlR9LAorCQkJeyZOQU1FID0+ICdwdWJsaWMudGVzdDInLCAm VFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9 KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0lOU0VSVCwKKwkJCSAnd2l0aCBjdGUgYXMgKHNl bGVjdCBpZCBmcm9tIHRlc3QyKScgLgorCQkJICcgaW5zZXJ0IGludG8gdGVzdDMgc2VsZWN0 IGlkIGZyb20gY3RlJywKKwkJCSBcQG95VGFibGUpOworCitAb3lUYWJsZSA9ICh7Jk5BTUUg PT4gJ3B1YmxpYy50ZXN0MicsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorICAgICAgICAgICAg ICZDT01NQU5EID0+ICZDT01NQU5EX0lOU0VSVH0sCisJCQl7Jk5BTUUgPT4gJ3B1YmxpYy50 ZXN0MycsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5E X0lOU0VSVH0pOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULAorCQkJICd3aXRoIGN0 ZSBhcyAoaW5zZXJ0IGludG8gdGVzdDMgdmFsdWVzICgxKSByZXR1cm5pbmcgaWQpJyAuCisJ CQkgJyBpbnNlcnQgaW50byB0ZXN0MiBzZWxlY3QgaWQgZnJvbSBjdGUnLAorCQkJIFxAb3lU YWJsZSk7CisKK1BnQXVkaXRHcmFudFNldCgkc3RyQXVkaXRSb2xlLCAmQ09NTUFORF9VUERB VEUsICdwdWJsaWMudGVzdDInKTsKKworQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJsaWMu dGVzdDMnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFO RF9JTlNFUlR9LAorCQkJeyZOQU1FID0+ICdwdWJsaWMudGVzdDInLCAmVFlQRSA9PiAmVFlQ RV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9VUERBVEV9KTsKK1BnTG9nRXhl Y3V0ZShDT01NQU5EX0lOU0VSVCwKKyAgICAgICAgICAgICAnd2l0aCBjdGUgYXMgKHVwZGF0 ZSB0ZXN0MiBzZXQgaWQgPSAxIHJldHVybmluZyBpZCknIC4KKwkJCSAnIGluc2VydCBpbnRv IHRlc3QzIHNlbGVjdCBpZCBmcm9tIGN0ZScsCisJCQkgXEBveVRhYmxlKTsKKworQG95VGFi bGUgPSAoeyZOQU1FID0+ICdwdWJsaWMudGVzdDMnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwK KwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9VUERBVEV9LAorCQkJeyZOQU1FID0+ICdwdWJs aWMudGVzdDInLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09N TUFORF9JTlNFUlR9LAorCQkJeyZOQU1FID0+ICdwdWJsaWMudGVzdDInLCAmVFlQRSA9PiAm VFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9TRUxFQ1QsICZDT01NQU5E X0xPRyA9PiAmQ09NTUFORF9JTlNFUlR9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1VQREFU RSwKKwkJCSAnd2l0aCBjdGUgYXMgKGluc2VydCBpbnRvIHRlc3QyIHZhbHVlcyAoMSkgcmV0 dXJuaW5nIGlkKScgLgorCQkJICcgdXBkYXRlIHRlc3QzIHNldCBpZCA9IGN0ZS5pZCcgLgor CQkJICcgZnJvbSBjdGUgd2hlcmUgdGVzdDMuaWQgPD4gY3RlLmlkJywKKwkJCSBcQG95VGFi bGUpOworCitQZ1NldFVzZXIoJ3Bvc3RncmVzJyk7CitQZ0F1ZGl0TG9nU2V0KENPTlRFWFRf Uk9MRSwgJ3VzZXIyJywgKENMQVNTX05PTkUpKTsKK1BnU2V0VXNlcigndXNlcjInKTsKKwor IyBDb2x1bW4tYmFzZWQgYXVkaXRzCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DUkVBVEVfVEFC TEUsCisJCQkgJ2NyZWF0ZSB0YWJsZSB0ZXN0NCAoaWQgaW50LCBuYW1lIHRleHQpJywgJ3B1 YmxpYy50ZXN0NCcpOworUGdBdWRpdEdyYW50U2V0KCRzdHJBdWRpdFJvbGUsIENPTU1BTkRf U0VMRUNULCAncHVibGljLnRlc3Q0JywgJ25hbWUnKTsKK1BnQXVkaXRHcmFudFNldCgkc3Ry QXVkaXRSb2xlLCBDT01NQU5EX1VQREFURSwgJ3B1YmxpYy50ZXN0NCcsICdpZCcpOworUGdB dWRpdEdyYW50U2V0KCRzdHJBdWRpdFJvbGUsIENPTU1BTkRfSU5TRVJULCAncHVibGljLnRl c3Q0JywgJ25hbWUnKTsKKworIyBTZWxlY3QKK0BveVRhYmxlID0gKCk7CitQZ0xvZ0V4ZWN1 dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxlY3QgaWQgZnJvbSBwdWJsaWMudGVzdDQnLAorCQkJ CQkJCSAgXEBveVRhYmxlKTsKKworQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJsaWMudGVz dDQnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9T RUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCBuYW1lIGZy b20gcHVibGljLnRlc3Q0JywKKwkJCQkJCQkgIFxAb3lUYWJsZSk7CisKKyMgSW5zZXJ0CitA b3lUYWJsZSA9ICgpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULCAnaW5zZXJ0IGlu dG8gcHVibGljLnRlc3Q0IChpZCkgdmFsdWVzICgxKScsCisJCQkJCQkJICAgXEBveVRhYmxl KTsKKworQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJsaWMudGVzdDQnLCAmVFlQRSA9PiAm VFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9JTlNFUlR9KTsKK1BnTG9n RXhlY3V0ZShDT01NQU5EX0lOU0VSVCwgImluc2VydCBpbnRvIHB1YmxpYy50ZXN0NCAobmFt ZSkgdmFsdWVzICgndGVzdCcpIiwKKwkJCQkJCQkgIFxAb3lUYWJsZSk7CisKKyMgVXBkYXRl CitAb3lUYWJsZSA9ICgpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfVVBEQVRFLCAidXBkYXRl IHB1YmxpYy50ZXN0NCBzZXQgbmFtZSA9ICdmb28nIiwKKwkJCQkJCQkgICBcQG95VGFibGUp OworCitAb3lUYWJsZSA9ICh7Jk5BTUUgPT4gJ3B1YmxpYy50ZXN0NCcsICZUWVBFID0+ICZU WVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1VQREFURX0pOworUGdMb2dF eGVjdXRlKENPTU1BTkRfVVBEQVRFLCAidXBkYXRlIHB1YmxpYy50ZXN0NCBzZXQgaWQgPSAx IiwKKwkJCQkJCQkgIFxAb3lUYWJsZSk7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVi bGljLnRlc3Q0JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisgICAgICAgICAgICAmQ09NTUFO RCA9PiAmQ09NTUFORF9TRUxFQ1QsICZDT01NQU5EX0xPRyA9PiAmQ09NTUFORF9VUERBVEV9 KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1VQREFURSwKKwkJCSAidXBkYXRlIHB1YmxpYy50 ZXN0NCBzZXQgbmFtZSA9ICdmb28nIHdoZXJlIG5hbWUgPSAnYmFyJyIsCisJCQkgXEBveVRh YmxlKTsKKworIyBEcm9wIHRlc3QgdGFibGVzCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9EUk9Q X1RBQkxFLCAiZHJvcCB0YWJsZSB0ZXN0MiIsICdwdWJsaWMudGVzdDInKTsKK1BnTG9nRXhl Y3V0ZShDT01NQU5EX0RST1BfVEFCTEUsICJkcm9wIHRhYmxlIHRlc3QzIiwgJ3B1YmxpYy50 ZXN0MycpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRFJPUF9UQUJMRSwgImRyb3AgdGFibGUg dGVzdDQiLCAncHVibGljLnRlc3Q0Jyk7CisKKworIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5v IG1vcmUgYXVkaXQgZXZlbnRzIHBlbmRpbmcgaW4gdGhlIHBvc3RncmVzIGxvZworUGdMb2dX YWl0KCk7CisKKyMgTm93IGNyZWF0ZSBzb21lIGVtYWlsIGZyaWVuZGx5IHRlc3RzLiAgVGhl c2UgZmlyc3QgdGVzdHMgYXJlIHNlc3Npb24gbG9nZ2luZworIyBvbmx5LgorUGdTZXRVc2Vy KCdwb3N0Z3JlcycpOworCismbG9nKCJcbkV4YW1wbGVzOiIpOworCismbG9nKCJcblNlc3Np b24gQXVkaXQ6XG4iKTsKKworUGdBdWRpdExvZ1NldChDT05URVhUX0dMT0JBTCwgdW5kZWYs IChDTEFTU19EREwsIENMQVNTX1JFQUQpKTsKKworIyAhISEgVHJ5aW5nIHRvIGJ1aWxkIHRl c3QgdG8gZXhjbHVkZSBmdW5jdGlvbiBjYWxscyAoZGlkIG5vdCB3b3JrKQorIyBQZ0xvZ0V4 ZWN1dGUoQ09NTUFORF9DUkVBVEVfUk9MRSwgJ2NyZWF0ZSByb2xlIGZ1bmNfb3duZXInKTsK KyMgUGdBdWRpdExvZ1NldChDT05URVhUX1JPTEUsICdmdW5jX293bmVyJyk7CisjIFBnTG9n RXhlY3V0ZShDT01NQU5EX1NFVCwgJ3NldCByb2xlIGZ1bmNfb3duZXInKTsKKyMgUGdMb2dF eGVjdXRlKENPTU1BTkRfQ1JFQVRFX0ZVTkNUSU9OLCAnQ1JFQVRFIEZVTkNUSU9OIGZ1bmNf dGVzdChhIGludCknIC4KKyMgCQkJCQkJCQkJICAnIHJldHVybnMgaW50IGFzICQkIGJlZ2lu IHJldHVybiBhICsgMTsnIC4KKyMgCQkJCQkJCQkJICAnIGVuZCAkJGxhbmd1YWdlIHBscGdz cWwgc2VjdXJpdHkgZGVmaW5lcicpOworIyBQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9HUkFOVCwg J2dyYW50IGV4ZWN1dGUgb24gZnVuY3Rpb24gZnVuY190ZXN0KGludCkgdG8gdXNlcjEnKTsK KworUGdTZXRVc2VyKCd1c2VyMScpOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DUkVBVEVf VEFCTEUsCisJCQkgJ2NyZWF0ZSB0YWJsZSBhY2NvdW50IChpZCBpbnQsIG5hbWUgdGV4dCwg cGFzc3dvcmQgdGV4dCwnIC4KKwkJCSAnIGRlc2NyaXB0aW9uIHRleHQpJywgJ3B1YmxpYy5h Y2NvdW50Jyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsCisJCQkgJ3NlbGVjdCAq IGZyb20gYWNjb3VudCcpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULAorCQkJICJp bnNlcnQgaW50byBhY2NvdW50IChpZCwgbmFtZSwgcGFzc3dvcmQsIGRlc2NyaXB0aW9uKSIg LgorCQkJICIgdmFsdWVzICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxhaCcpIik7 CismbG9nKCJBVURJVDogPG5vdGhpbmcgbG9nZ2VkPiIpOworCisjIFRlc3QgZnVuY3Rpb24g d2l0aG91dCBhdWRpdGluZyAoZGlkIG5vdCB3b3JrKQorIyBQZ0xvZ0V4ZWN1dGUoQ09NTUFO RF9TRUxFQ1QsICdzZWxlY3QgZnVuY190ZXN0KDEpJyk7CisKKyMgTm93IHRlc3RzIGZvciBv YmplY3QgbG9nZ2luZworJmxvZygiXG5PYmplY3QgQXVkaXQ6XG4iKTsKKworUGdTZXRVc2Vy KCdwb3N0Z3JlcycpOworUGdBdWRpdExvZ1NldChDT05URVhUX0dMT0JBTCwgdW5kZWYsIChD TEFTU19OT05FKSk7CitQZ0V4ZWN1dGUoInNldCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0JyIp OworUGdTZXRVc2VyKCd1c2VyMScpOworCitQZ0F1ZGl0R3JhbnRTZXQoJHN0ckF1ZGl0Um9s ZSwgJkNPTU1BTkRfU0VMRUNULCAncHVibGljLmFjY291bnQnLCAncGFzc3dvcmQnKTsKKwor QG95VGFibGUgPSAoKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCBp ZCwgbmFtZSBmcm9tIGFjY291bnQnLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKyZsb2coIkFV RElUOiA8bm90aGluZyBsb2dnZWQ+Iik7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVi bGljLmFjY291bnQnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKyAgICAgICAgICAgICAmQ09N TUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVD VCwgJ3NlbGVjdCBwYXNzd29yZCBmcm9tIGFjY291bnQnLAorCQkJCQkJCSAgXEBveVRhYmxl KTsKKworUGdBdWRpdEdyYW50U2V0KCRzdHJBdWRpdFJvbGUsICZDT01NQU5EX1VQREFURSwK KyAgICAgICAgICAgICAgICAncHVibGljLmFjY291bnQnLCAnbmFtZSwgcGFzc3dvcmQnKTsK KworQG95VGFibGUgPSAoKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1VQREFURSwgInVwZGF0 ZSBhY2NvdW50IHNldCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJyIsCisJCQkJCQkJICBc QG95VGFibGUpOworJmxvZygiQVVESVQ6IDxub3RoaW5nIGxvZ2dlZD4iKTsKKworQG95VGFi bGUgPSAoeyZOQU1FID0+ICdwdWJsaWMuYWNjb3VudCcsICZUWVBFID0+ICZUWVBFX1RBQkxF LAorICAgICAgICAgICAgICZDT01NQU5EID0+ICZDT01NQU5EX1VQREFURX0pOworUGdMb2dF eGVjdXRlKENPTU1BTkRfVVBEQVRFLCAidXBkYXRlIGFjY291bnQgc2V0IHBhc3N3b3JkID0g J0hBU0gyJyIsCisJCQkJCQkJICBcQG95VGFibGUpOworCisjIE5vdyB0ZXN0cyBmb3Igc2Vz c2lvbi9vYmplY3QgbG9nZ2luZworJmxvZygiXG5TZXNzaW9uL09iamVjdCBBdWRpdDpcbiIp OworCitQZ1NldFVzZXIoJ3Bvc3RncmVzJyk7CitQZ0F1ZGl0TG9nU2V0KENPTlRFWFRfUk9M RSwgJ3VzZXIxJywgKENMQVNTX1JFQUQsIENMQVNTX1dSSVRFKSk7CitQZ1NldFVzZXIoJ3Vz ZXIxJyk7CisKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9UQUJMRSwKKwkJCSAnY3Jl YXRlIHRhYmxlIGFjY291bnRfcm9sZV9tYXAgKGFjY291bnRfaWQgaW50LCByb2xlX2lkIGlu dCknLAorCQkJICdwdWJsaWMuYWNjb3VudF9yb2xlX21hcCcpOworUGdBdWRpdEdyYW50U2V0 KCRzdHJBdWRpdFJvbGUsICZDT01NQU5EX1NFTEVDVCwgJ3B1YmxpYy5hY2NvdW50X3JvbGVf bWFwJyk7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGljLmFjY291bnQnLCAmVFlQ RSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9LAor CQkJeyZOQU1FID0+ICdwdWJsaWMuYWNjb3VudF9yb2xlX21hcCcsICZUWVBFID0+ICZUWVBF X1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01NQU5EX1NFTEVDVH0pOworUGdMb2dFeGVj dXRlKENPTU1BTkRfU0VMRUNULAorCQkJICdzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwgYWNj b3VudF9yb2xlX21hcC5yb2xlX2lkIGZyb20gYWNjb3VudCcgLgorCQkJICcgaW5uZXIgam9p biBhY2NvdW50X3JvbGVfbWFwJyAuCisJCQkgJyBvbiBhY2NvdW50LmlkID0gYWNjb3VudF9y b2xlX21hcC5hY2NvdW50X2lkJywKKwkJCSBcQG95VGFibGUpOworCitAb3lUYWJsZSA9ICh7 Jk5BTUUgPT4gJ3B1YmxpYy5hY2NvdW50JywgJlRZUEUgPT4gJlRZUEVfVEFCTEUsCisgICAg ICAgICAgICAgJkNPTU1BTkQgPT4gJkNPTU1BTkRfU0VMRUNUfSk7CitQZ0xvZ0V4ZWN1dGUo Q09NTUFORF9TRUxFQ1QsICdzZWxlY3QgcGFzc3dvcmQgZnJvbSBhY2NvdW50JywKKwkJCQkJ CQkgIFxAb3lUYWJsZSk7CisKK0BveVRhYmxlID0gKCk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFO RF9VUERBVEUsICJ1cGRhdGUgYWNjb3VudCBzZXQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFk YSciLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKyZsb2coIkFVRElUOiA8bm90aGluZyBsb2dn ZWQ+Iik7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGljLmFjY291bnQnLCAmVFlQ RSA9PiAmVFlQRV9UQUJMRSwKKyAgICAgICAgICAgICAmQ09NTUFORCA9PiAmQ09NTUFORF9T RUxFQ1QsICZDT01NQU5EX0xPRyA9PiAmQ09NTUFORF9VUERBVEV9KTsKK1BnTG9nRXhlY3V0 ZShDT01NQU5EX1VQREFURSwKKwkJCSAidXBkYXRlIGFjY291bnQgc2V0IGRlc2NyaXB0aW9u ID0gJ3lhZGEsIHlhZGEnIiAuCisJCQkgIiB3aGVyZSBwYXNzd29yZCA9ICdIQVNIMiciLAor CQkJIFxAb3lUYWJsZSk7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGljLmFjY291 bnQnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9V UERBVEV9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1VQREFURSwgInVwZGF0ZSBhY2NvdW50 IHNldCBwYXNzd29yZCA9ICdIQVNIMiciLAorCQkJCQkJCSAgXEBveVRhYmxlKTsKKworIyBU ZXN0IGFsbCBzcWwgY29tbWFuZHMKKyZsb2coIlxuRXhoYXVzdGl2ZSBDb21tYW5kIFRlc3Rz OlxuIik7CisKK1BnU2V0VXNlcigncG9zdGdyZXMnKTsKKworUGdBdWRpdExvZ1NldChDT05U RVhUX0dMT0JBTCwgdW5kZWYsIChDTEFTU19BTEwpKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5E X1NFVCwgInNldCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0JyIpOworCitQZ0xvZ0V4ZWN1dGUo Q09NTUFORF9ETywgImRvIFwkXCRcIGJlZ2luIHJhaXNlIG5vdGljZSAndGVzdCc7IGVuZDsg XCRcJDsiKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9TQ0hFTUEsICJjcmVhdGUg c2NoZW1hIHRlc3QiKTsKKworIyBUZXN0IENPUFkKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NP UFlfVE8sCisJCQkgIkNPUFkgcGdfY2xhc3MgdG8gJyIgLiBhYnNfcGF0aCgkc3RyVGVzdFBh dGgpIC4gIi9jbGFzcy5vdXQnIik7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DUkVBVEVfVEFC TEVfQVMsCisJCQkgIkNSRUFURSBUQUJMRSB0ZXN0LnBnX2NsYXNzIGFzIHNlbGVjdCAqIGZy b20gcGdfY2xhc3MiLAorCQkJICd0ZXN0LnBnX2NsYXNzJywgdHJ1ZSwgZmFsc2UpOworUGdM b2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULAorCQkJICJDUkVBVEUgVEFCTEUgdGVzdC5wZ19j bGFzcyBhcyBzZWxlY3QgKiBmcm9tIHBnX2NsYXNzIiwKKwkJCSB1bmRlZiwgZmFsc2UsIHRy dWUpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULAorCQkJICJDT1BZIHRlc3QucGdf Y2xhc3MgZnJvbSAnIiAuIGFic19wYXRoKCRzdHJUZXN0UGF0aCkgLgorCQkJICIvY2xhc3Mu b3V0JyIsIHVuZGVmLCB0cnVlLCBmYWxzZSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DT1BZ X0ZST00sCisJCQkgIkNPUFkgdGVzdC5wZ19jbGFzcyBmcm9tICciIC4gYWJzX3BhdGgoJHN0 clRlc3RQYXRoKSAuCisJCQkgIi9jbGFzcy5vdXQnIiwgdW5kZWYsIGZhbHNlLCB0cnVlKTsK KworIyBUZXN0IHByZXBhcmVkIFNFTEVDVAorUGdMb2dFeGVjdXRlKENPTU1BTkRfUFJFUEFS RV9SRUFELAorCQkJICdQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIGFzIHNlbGVjdCAqJyAu CisJCQkgJyBmcm9tIHBnX2NsYXNzIHdoZXJlIG9pZCA9ICQxJyk7CitQZ0xvZ0V4ZWN1dGUo Q09NTUFORF9FWEVDVVRFX1JFQUQsCisJCQkgJ0VYRUNVVEUgcGdjbGFzc3N0bXQgKDEpJyk7 CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9ERUFMTE9DQVRFLAorCQkJICdERUFMTE9DQVRFIHBn Y2xhc3NzdG10Jyk7CisKKyMgVGVzdCBjdXJzb3IKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0JF R0lOLAorCQkJICdCRUdJTicpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfREVDTEFSRV9DVVJT T1IsCisJCSAgICAgJ0RFQ0xBUkUgY3Rlc3QgU0NST0xMIENVUlNPUiBGT1IgU0VMRUNUICog RlJPTSBwZ19jbGFzcycpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfRkVUQ0gsCisJCQkgJ0ZF VENIIE5FWFQgRlJPTSBjdGVzdCcpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQ0xPU0UsCisJ CQkgJ0NMT1NFIGN0ZXN0Jyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9DT01NSVQsCisJCQkg J0NPTU1JVCcpOworCisjIFRlc3QgcHJlcGFyZWQgSU5TRVJUCitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9DUkVBVEVfVEFCTEUsCisJCQkgJ2NyZWF0ZSB0YWJsZSB0ZXN0LnRlc3RfaW5zZXJ0 IChpZCBpbnQpJywgJ3Rlc3QudGVzdF9pbnNlcnQnKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5E X1BSRVBBUkVfV1JJVEUsCisJCQkgJ1BSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgYXMgaW5z ZXJ0JyAuCisJCQkgJyBpbnRvIHRlc3QudGVzdF9pbnNlcnQgKGlkKSB2YWx1ZXMgKCQxKScp OworUGdMb2dFeGVjdXRlKENPTU1BTkRfSU5TRVJULAorCQkJICdFWEVDVVRFIHBnY2xhc3Nz dG10ICgxKScsIHVuZGVmLCB0cnVlLCBmYWxzZSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9F WEVDVVRFX1dSSVRFLAorCQkJICdFWEVDVVRFIHBnY2xhc3NzdG10ICgxKScsIHVuZGVmLCBm YWxzZSwgdHJ1ZSk7CisKKyMgQ3JlYXRlIGEgdGFibGUgd2l0aCBhIHByaW1hcnkga2V5CitQ Z0xvZ0V4ZWN1dGUoQ09NTUFORF9DUkVBVEVfVEFCTEUsCisJCQkgJ2NyZWF0ZSB0YWJsZSB0 ZXN0IChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUgdGV4dCwnIC4KKwkJCSAnZGVzY3JpcHRp b24gdGV4dCknLAorCQkJICdwdWJsaWMudGVzdCcsIHRydWUsIGZhbHNlKTsKK1BnTG9nRXhl Y3V0ZShDT01NQU5EX0NSRUFURV9JTkRFWCwKKwkJCSAnY3JlYXRlIHRhYmxlIHRlc3QgKGlk IGludCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0LCcgLgorCQkJICdkZXNjcmlwdGlvbiB0ZXh0 KScsCisJCQkgJ3B1YmxpYy50ZXN0X3BrZXknLCBmYWxzZSwgdHJ1ZSk7CitQZ0xvZ0V4ZWN1 dGUoQ09NTUFORF9BTkFMWVpFLCAnYW5hbHl6ZSB0ZXN0Jyk7CisKKyMgR3JhbnQgc2VsZWN0 IHRvIHB1YmxpYyAtIHRoaXMgc2hvdWxkIGhhdmUgbm8gYWZmZWN0IG9uIGF1ZGl0aW5nCitQ Z0xvZ0V4ZWN1dGUoQ09NTUFORF9HUkFOVCwgJ2dyYW50IHNlbGVjdCBvbiBwdWJsaWMudGVz dCB0byBwdWJsaWMnKTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCAq IGZyb20gdGVzdCcpOworCisjIE5vdyBncmFudCBzZWxlY3QgdG8gYXVkaXQgYW5kIGl0IHNo b3VsZCBiZSBsb2dnZWQKK1BnQXVkaXRHcmFudFNldCgkc3RyQXVkaXRSb2xlLCAmQ09NTUFO RF9TRUxFQ1QsICdwdWJsaWMudGVzdCcpOworQG95VGFibGUgPSAoeyZOQU1FID0+ICdwdWJs aWMudGVzdCcsICZUWVBFID0+ICZUWVBFX1RBQkxFLAorCQkJICZDT01NQU5EID0+ICZDT01N QU5EX1NFTEVDVH0pOworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2VsZWN0ICog ZnJvbSB0ZXN0JywgXEBveVRhYmxlKTsKKworIyBDaGVjayBjb2x1bW5zIGdyYW50ZWQgdG8g cHVibGljIGFuZCBtYWtlIHN1cmUgdGhleSBkbyBub3QgbG9nCitQZ0F1ZGl0R3JhbnRSZXNl dCgkc3RyQXVkaXRSb2xlLCAmQ09NTUFORF9TRUxFQ1QsICdwdWJsaWMudGVzdCcpOworUGdM b2dFeGVjdXRlKENPTU1BTkRfR1JBTlQsICdncmFudCBzZWxlY3QgKG5hbWUpIG9uIHB1Ymxp Yy50ZXN0IHRvIHB1YmxpYycpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAnc2Vs ZWN0ICogZnJvbSB0ZXN0Jyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdzZWxl Y3QgZnJvbSB0ZXN0Jyk7CisKKyMgVHJ5IGEgc2VsZWN0IHRoYXQgZG9lcyBub3QgcmVmZXJl bmNlIGFueSB0YWJsZXMKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCAx LCBjdXJyZW50X3RpbWVzdGFtcCcpOworCisjIFRyeSBleHBsYWluCitQZ0xvZ0V4ZWN1dGUo Q09NTUFORF9FWFBMQUlOLCAnZXhwbGFpbiBzZWxlY3QgMScpOworCisjIE5vdyBzZXQgZ3Jh bnQgdG8gYSBzcGVjaWZpYyBjb2x1bW4gdG8gYXVkaXQgYW5kIG1ha2Ugc3VyZSBpdCBsb2dz CisjIE1ha2Ugc3VyZSB0aGUgdGhlIGNvbnZlcnNlIGlzIHRydWUKK1BnQXVkaXRHcmFudFNl dCgkc3RyQXVkaXRSb2xlLCAmQ09NTUFORF9TRUxFQ1QsICdwdWJsaWMudGVzdCcsCisJCQkJ J25hbWUsIGRlc2NyaXB0aW9uJyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9TRUxFQ1QsICdz ZWxlY3QgaWQgZnJvbSB0ZXN0Jyk7CisKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGlj LnRlc3QnLCAmVFlQRSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFO RF9TRUxFQ1R9KTsKK1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCBuYW1l IGZyb20gdGVzdCcsIFxAb3lUYWJsZSk7CisKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0FMVEVS X1RBQkxFLAorCQkJICdhbHRlciB0YWJsZSB0ZXN0IGRyb3AgZGVzY3JpcHRpb24nLCAncHVi bGljLnRlc3QnKTsKK0BveVRhYmxlID0gKHsmTkFNRSA9PiAncHVibGljLnRlc3QnLCAmVFlQ RSA9PiAmVFlQRV9UQUJMRSwKKwkJCSAmQ09NTUFORCA9PiAmQ09NTUFORF9TRUxFQ1R9KTsK K1BnTG9nRXhlY3V0ZShDT01NQU5EX1NFTEVDVCwgJ3NlbGVjdCBmcm9tIHRlc3QnLCBcQG95 VGFibGUpOworCitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9BTFRFUl9UQUJMRSwKKwkJCSAnYWx0 ZXIgdGFibGUgdGVzdCByZW5hbWUgdG8gdGVzdDInLCAncHVibGljLnRlc3QnKTsKK1BnTG9n RXhlY3V0ZShDT01NQU5EX0FMVEVSX1RBQkxFLAorCQkJICdhbHRlciB0YWJsZSB0ZXN0MiBz ZXQgc2NoZW1hIHRlc3QnLCAncHVibGljLnRlc3QyJywgdHJ1ZSwgZmFsc2UpOworUGdMb2dF eGVjdXRlKENPTU1BTkRfQUxURVJfVEFCTEVfSU5ERVgsICdhbHRlciB0YWJsZSB0ZXN0MiBz ZXQgc2NoZW1hIHRlc3QnLAorCQkJCQkJCQkJCSdwdWJsaWMudGVzdF9wa2V5JywgZmFsc2Us IHRydWUpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJfVEFCTEUsICdhbHRlciB0YWJs ZSB0ZXN0LnRlc3QyIGFkZCBkZXNjcmlwdGlvbiB0ZXh0JywKKwkJCQkJCQkJICAndGVzdC50 ZXN0MicpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJfVEFCTEUsICdhbHRlciB0YWJs ZSB0ZXN0LnRlc3QyIGRyb3AgZGVzY3JpcHRpb24nLAorCQkJCQkJCQkgICd0ZXN0LnRlc3Qy Jyk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9EUk9QX1RBQkxFX0lOREVYLCAnZHJvcCB0YWJs ZSB0ZXN0LnRlc3QyJywKKwkJCQkJCQkJCSAgICd0ZXN0LnRlc3RfcGtleScsIGZhbHNlLCBm YWxzZSk7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9EUk9QX1RBQkxFLCAnZHJvcCB0YWJsZSB0 ZXN0LnRlc3QyJywKKwkJCQkJCQkJICd0ZXN0LnRlc3QyJywgdHJ1ZSwgdHJ1ZSk7CisKK1Bn TG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9GVU5DVElPTiwgJ0NSRUFURSBGVU5DVElPTiBp bnRfYWRkKGEgaW50LCBiIGludCknIC4KKwkJCQkJCQkJCSAgJyByZXR1cm5zIGludCBhcyAk JCBiZWdpbiByZXR1cm4gYSArIGI7JyAuCisJCQkJCQkJCQkgICcgZW5kICQkbGFuZ3VhZ2Ug cGxwZ3NxbCcpOworUGdMb2dFeGVjdXRlKENPTU1BTkRfU0VMRUNULCAic2VsZWN0IGludF9h ZGQoMSwgMSkiLAorCQkJCQkJCSB1bmRlZiwgdHJ1ZSwgZmFsc2UpOworUGdMb2dFeGVjdXRl KENPTU1BTkRfRVhFQ1VURV9GVU5DVElPTiwgInNlbGVjdCBpbnRfYWRkKDEsIDEpIiwKKwkJ CQkJCQkJCSAgICdwdWJsaWMuaW50X2FkZCcsIGZhbHNlLCB0cnVlKTsKKworUGdMb2dFeGVj dXRlKENPTU1BTkRfQ1JFQVRFX0FHR1JFR0FURSwgIkNSRUFURSBBR0dSRUdBVEUgc3VtX3Rl c3QgKGludCkiIC4KKwkJCQkJCQkiIChzZnVuYyA9IGludF9hZGQsIHN0eXBlID0gaW50LCBp bml0Y29uZCA9IDApIik7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFORF9BTFRFUl9BR0dSRUdBVEUs CisJCQkgIkFMVEVSIEFHR1JFR0FURSBzdW1fdGVzdCAoaW50KSByZW5hbWUgdG8gc3VtX3Rl c3QyIik7CisKK1BnTG9nRXhlY3V0ZShDT01NQU5EX0NSRUFURV9DT0xMQVRJT04sCisJCQkg IkNSRUFURSBDT0xMQVRJT04gY29sbGF0aW9uX3Rlc3QgRlJPTSBcImRlX0RFXCIiKTsKK1Bn TG9nRXhlY3V0ZShDT01NQU5EX0FMVEVSX0NPTExBVElPTiwKKwkJCSAiQUxURVIgQ09MTEFU SU9OIGNvbGxhdGlvbl90ZXN0IHJlbmFtZSB0byBjb2xsYXRpb25fdGVzdDIiKTsKKworUGdM b2dFeGVjdXRlKENPTU1BTkRfQ1JFQVRFX0NPTlZFUlNJT04sCisJCQkgIkNSRUFURSBDT05W RVJTSU9OIGNvbnZlcnNpb25fdGVzdCBGT1IgJ1NRTF9BU0NJSScgVE8iLgorCQkJICIgJ01V TEVfSU5URVJOQUwnIEZST00gYXNjaWlfdG9fbWljIik7CitQZ0xvZ0V4ZWN1dGUoQ09NTUFO RF9BTFRFUl9DT05WRVJTSU9OLAorCQkJICJBTFRFUiBDT05WRVJTSU9OIGNvbnZlcnNpb25f dGVzdCByZW5hbWUgdG8gY29udmVyc2lvbl90ZXN0MiIpOworCitQZ0xvZ0V4ZWN1dGUoQ09N TUFORF9DUkVBVEVfREFUQUJBU0UsICJDUkVBVEUgREFUQUJBU0UgZGF0YWJhc2VfdGVzdCIp OworUGdMb2dFeGVjdXRlKENPTU1BTkRfQUxURVJfREFUQUJBU0UsCisJCQkgIkFMVEVSIERB VEFCQVNFIGRhdGFiYXNlX3Rlc3QgcmVuYW1lIHRvIGRhdGFiYXNlX3Rlc3QyIik7CitQZ0xv Z0V4ZWN1dGUoQ09NTUFORF9EUk9QX0RBVEFCQVNFLCAiRFJPUCBEQVRBQkFTRSBkYXRhYmFz ZV90ZXN0MiIpOworCisjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhdWRpdCBldmVu dHMgcGVuZGluZyBpbiB0aGUgcG9zdGdyZXMgbG9nCitQZ0xvZ1dhaXQoKTsKKworIyBTdG9w IHRoZSBkYXRhYmFzZQoraWYgKCEkYk5vQ2xlYW51cCkKK3sKKwlQZ0Ryb3AoKTsKK30KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29u dHJpYi5zZ21sCmluZGV4IGE2OThkMGYuLjViMjQ3YTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAt MTI0LDYgKzEyNCw3IEBAIENSRUFURSBFWFRFTlNJT04gPHJlcGxhY2VhYmxlPm1vZHVsZV9u YW1lPC8+IEZST00gdW5wYWNrYWdlZDsKICAmbHRyZWU7CiAgJnBhZ2VpbnNwZWN0OwogICZw YXNzd29yZGNoZWNrOworICZwZ2F1ZGl0OwogICZwZ2J1ZmZlcmNhY2hlOwogICZwZ2NyeXB0 bzsKICAmcGdmcmVlc3BhY2VtYXA7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZmlsZWxp c3Quc2dtbCBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCmluZGV4IGYwM2I3MmEuLmU0 ZjBiZGMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xMjQsNiArMTI0LDcgQEAKIDwhRU5USVRZ IG9pZDJuYW1lICAgICAgICBTWVNURU0gIm9pZDJuYW1lLnNnbWwiPgogPCFFTlRJVFkgcGFn ZWluc3BlY3QgICAgIFNZU1RFTSAicGFnZWluc3BlY3Quc2dtbCI+CiA8IUVOVElUWSBwYXNz d29yZGNoZWNrICAgU1lTVEVNICJwYXNzd29yZGNoZWNrLnNnbWwiPgorPCFFTlRJVFkgcGdh dWRpdCAgICAgICAgIFNZU1RFTSAicGdhdWRpdC5zZ21sIj4KIDwhRU5USVRZIHBnYmVuY2gg ICAgICAgICBTWVNURU0gInBnYmVuY2guc2dtbCI+CiA8IUVOVElUWSBwZ2FyY2hpdmVjbGVh bnVwIFNZU1RFTSAicGdhcmNoaXZlY2xlYW51cC5zZ21sIj4KIDwhRU5USVRZIHBnYnVmZmVy Y2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcGdhdWRpdC5zZ21sIGIvZG9jL3NyYy9zZ21sL3BnYXVkaXQuc2dtbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjJkNDVmCi0tLSAvZGV2L251bGwK KysrIGIvZG9jL3NyYy9zZ21sL3BnYXVkaXQuc2dtbApAQCAtMCwwICsxLDMzMCBAQAorPCEt LSBkb2Mvc3JjL3NnbWwvcGdhdWRpdC5zZ21sIC0tPgorCis8c2VjdDEgaWQ9InBnYXVkaXQi IHhyZWZsYWJlbD0icGdhdWRpdCI+CisgIDx0aXRsZT5wZ19hdWRpdDwvdGl0bGU+CisKKyAg PGluZGV4dGVybSB6b25lPSJwZ2F1ZGl0Ij4KKyAgICA8cHJpbWFyeT5wZ19hdWRpdDwvcHJp bWFyeT4KKyAgPC9pbmRleHRlcm0+CisKKyAgPHBhcmE+CisgICAgVGhlIDxmaWxlbmFtZT5w Z19hdWRpdDwvZmlsZW5hbWU+IG1vZHVsZSBwcm92aWRlcyBzZXNzaW9uIGFuZCBvYmplY3QK KyAgICBhdWRpdGluZyB2aWEgdGhlIHN0YW5kYXJkIGxvZ2dpbmcgZmFjaWxpdHkuICBTZXNz aW9uIGFuZCBvYmplY3QgYXVkaXRpbmcgYXJlCisgICAgY29tcGxldGVseSBpbmRlcGVuZGVu dCBhbmQgY2FuIGJlIGNvbWJpbmVkLgorICA8L3BhcmE+CisKKyAgPHNlY3QyPgorICAgIDx0 aXRsZT5TZXNzaW9uIEF1ZGl0aW5nPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgU2Vz c2lvbiBhdWRpdGluZyBhbGxvd3MgdGhlIGxvZ2dpbmcgb2YgYWxsIGNvbW1hbmRzIHRoYXQg YXJlIGV4ZWN1dGVkIGJ5CisgICAgICBhIHVzZXIgaW4gdGhlIGJhY2tlbmQuICBFYWNoIGNv bW1hbmQgaXMgbG9nZ2VkIHdpdGggYSBzaW5nbGUgZW50cnkgYW5kCisgICAgICBpbmNsdWRl cyB0aGUgYXVkaXQgdHlwZSAoZS5nLiA8bGl0ZXJhbD5TRVNTSU9OPC9saXRlcmFsPiksIGNv bW1hbmQgdHlwZQorICAgICAgKGUuZy4gPGxpdGVyYWw+Q1JFQVRFIFRBQkxFPC9saXRlcmFs PiwgPGxpdGVyYWw+U0VMRUNUPC9saXRlcmFsPikgYW5kCisgICAgICBzdGF0ZW1lbnQgKGUu Zy4gPGxpdGVyYWw+InNlbGVjdCAqIGZyb20gdGVzdCI8L2xpdGVyYWw+KS4KKworICAgICAg RnVsbHktcXVhbGlmaWVkIG5hbWVzIGFuZCBvYmplY3QgdHlwZXMgd2lsbCBiZSBsb2dnZWQg Zm9yCisgICAgICA8bGl0ZXJhbD5DUkVBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5VUERBVEU8 L2xpdGVyYWw+LCBhbmQKKyAgICAgIDxsaXRlcmFsPkRST1A8L2xpdGVyYWw+IGNvbW1hbmRz IG9uIDxsaXRlcmFsPlRBQkxFPC9saXRlcmFsPiwKKyAgICAgIDxsaXRlcmFsPk1BVFZJRVc8 L2xpdGVyYWw+LCA8bGl0ZXJhbD5WSUVXPC9saXRlcmFsPiwKKyAgICAgIDxsaXRlcmFsPklO REVYPC9saXRlcmFsPiwgPGxpdGVyYWw+Rk9SRUlHTiBUQUJMRTwvbGl0ZXJhbD4sCisgICAg ICA8bGl0ZXJhbD5DT01QT1NJVEUgVFlQRTwvbGl0ZXJhbD4sIDxsaXRlcmFsPklOREVYPC9s aXRlcmFsPiwgYW5kCisgICAgICA8bGl0ZXJhbD5TRVFVRU5DRTwvbGl0ZXJhbD4gb2JqZWN0 cyBhcyB3ZWxsIGFzIGZ1bmN0aW9uIGNhbGxzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0 Mz4KKyAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgPHBhcmE+ CisgICAgICAgIFNlc3Npb24gbG9nZ2luZyBpcyBjb250cm9sbGVkIGJ5IHRoZSA8bGl0ZXJh bD5wZ19hdWRpdC5sb2c8L2xpdGVyYWw+CisgICAgICAgIEdVQy4gVGhlcmUgYXJlIGZpdmUg Y2xhc3NlcyBvZiBjb21tYW5kcyB0aGF0IGFyZSByZWNvZ25pemVkOgorCisgICAgICAgIDxp dGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgICAgIDxsaXRlcmFsPlJFQUQ8L2xpdGVyYWw+IC0gPGxpdGVyYWw+U0VM RUNUPC9saXRlcmFsPiBhbmQKKyAgICAgICAgICAgICAgPGxpdGVyYWw+Q09QWTwvbGl0ZXJh bD4gd2hlbiB0aGUgc291cmNlIGlzIGEgdGFibGUgb3IgcXVlcnkuCisgICAgICAgICAgICA8 L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgPGxpdGVyYWw+V1JJVEU8L2xpdGVy YWw+IC0gPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiwKKyAgICAgICAgICAgICAgPGxpdGVy YWw+VVBEQVRFPC9saXRlcmFsPiwgPGxpdGVyYWw+REVMRVRFPC9saXRlcmFsPiwKKyAgICAg ICAgICAgICAgPGxpdGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+Q09Q WTwvbGl0ZXJhbD4gd2hlbiB0aGUKKyAgICAgICAgICAgICAgZGVzdGluYXRpb24gaXMgYSB0 YWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICA8 bGl0ZXJhbD5GVU5DVElPTjwvbGl0ZXJhbD4gLSBGdW5jdGlvbiBjYWxscyBhbmQKKyAgICAg ICAgICAgICAgPGxpdGVyYWw+RE88L2xpdGVyYWw+IGJsb2Nrcy4KKyAgICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICA8bGl0ZXJhbD5EREw8L2xpdGVyYWw+ IC0gRERMLCBwbHVzIDxsaXRlcmFsPlZBQ1VVTTwvbGl0ZXJhbD4sCisgICAgICAgICAgICAg IDxsaXRlcmFsPlJFSU5ERVg8L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+QU5BTFlaRTwvbGl0 ZXJhbD4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAg PGxpdGVyYWw+TUlTQzwvbGl0ZXJhbD4gLSBNaXNjZWxsYW5lb3VzIGNvbW1hbmRzLCBlLmcu CisgICAgICAgICAgICAgIDxsaXRlcmFsPkRJU0NBUkQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5G RVRDSDwvbGl0ZXJhbD4sCisgICAgICAgICAgICAgIDxsaXRlcmFsPkNIRUNLUE9JTlQ8L2xp dGVyYWw+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4K KyAgICAgICAgRW5hYmxlIHNlc3Npb24gbG9nZ2luZyBmb3IgYWxsIHdyaXRlcyBhbmQgRERM OgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3BnX2F1ZGl0LmxvZyA9ICd3cml0ZSwg ZGRsJworICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L3BhcmE+CisKKyAg ICAgIDxwYXJhPgorICAgICAgICBFbmFibGUgc2Vzc2lvbiBsb2dnaW5nIGZvciBhbGwgY29t bWFuZHMgZXhjZXB0IG1pc2NlbGxhbmVvdXM6CisgICAgICAgICAgPHByb2dyYW1saXN0aW5n PgorcGdfYXVkaXQubG9nID0gJ2FsbCwgLW1pc2MnCisgICAgICAgICAgPC9wcm9ncmFtbGlz dGluZz4KKyAgICAgIDwvcGFyYT4KKyAgICAgIAorICAgICAgPHBhcmE+CisgICAgICBOb3Rl IHRoYXQgPGxpdGVyYWw+cGdfYXVkaXQubG9nPC9saXRlcmFsPiBjYW4gYmUgc2V0IGdsb2Jh bGx5IChpbiAKKyAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiks IGF0IHRoZSBkYXRhYmFzZSBsZXZlbCAodXNpbmcKKyAgICAgIDxsaXRlcmFsPmFsdGVyIGRh dGFiYXNlIC4uLiBzZXQ8L2xpdGVyYWw+KSwgb3IgYXQgdGhlIHJvbGUgbGV2ZWwgKHVzaW5n CisgICAgICA8bGl0ZXJhbD5hbHRlciByb2xlIC4uLiBzZXQ8L2xpdGVyYWw+KS4KKyAgICAg IDwvcGFyYT4KKyAgICA8L3NlY3QzPgorCisgICAgPHNlY3QzPgorICAgICAgPHRpdGxlPkV4 YW1wbGVzPC90aXRsZT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNldCA8bGl0ZXJhbD5w Z19hdWRpdC5sb2cgPSAncmVhZCwgZGRsJzwvbGl0ZXJhbD4gaW4KKyAgICAgICAgPGxpdGVy YWw+cG9zdGdyZXNxbC5jb25mPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAg PHBhcmE+CisgICAgICAgIFNRTDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1s aXN0aW5nPgorY3JlYXRlIHRhYmxlIGFjY291bnQKKygKKyAgICBpZCBpbnQsCisgICAgbmFt ZSB0ZXh0LAorICAgIHBhc3N3b3JkIHRleHQsCisgICAgZGVzY3JpcHRpb24gdGV4dAorKTsK Kworc2VsZWN0ICoKKyAgICBmcm9tIGFjY291bnQ7CisKK2luc2VydCBpbnRvIGFjY291bnQg KGlkLCBuYW1lLCBwYXNzd29yZCwgZGVzY3JpcHRpb24pCisgICAgICAgICAgICAgdmFsdWVz ICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxhaCcpOworICAgICAgPC9wcm9ncmFt bGlzdGluZz4KKworICAgICAgPHBhcmE+CisgICAgICAgIExvZyBPdXRwdXQ6CisgICAgICA8 L3BhcmE+CisKKyAgICAgIDxwcm9ncmFtbGlzdGluZz4KK0FVRElUOiBTRVNTSU9OLERETCxD UkVBVEUgVEFCTEUsVEFCTEUscHVibGljLmFjY291bnQsY3JlYXRlIHRhYmxlIGFjY291bnQK KygKKyAgICBpZCBpbnQsCisgICAgbmFtZSB0ZXh0LAorICAgIHBhc3N3b3JkIHRleHQsCisg ICAgZGVzY3JpcHRpb24gdGV4dAorKTsKK0FVRElUOiBTRVNTSU9OLFJFQUQsU0VMRUNULCws c2VsZWN0ICoKKyAgICBmcm9tIGFjY291bnQKKyAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Cisg ICAgPC9zZWN0Mz4KKyAgPC9zZWN0Mj4KKworICA8c2VjdDI+CisgICAgPHRpdGxlPk9iamVj dCBBdWRpdGluZzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIE9iamVjdCBhdWRpdGlu ZyBsb2dzIGNvbW1hbmRzIHRoYXQgYWZmZWN0IGEgcGFydGljdWxhciBvYmplY3QuICBPbmx5 CisgICAgICA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVyYWw+LCA8bGl0ZXJhbD5JTlNFUlQ8L2xp dGVyYWw+LAorICAgICAgPGxpdGVyYWw+VVBEQVRFPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ REVMRVRFPC9saXRlcmFsPiBjb21tYW5kcyBhcmUKKyAgICAgIHN1cHBvcnRlZC4KKyAgICA8 L3BhcmE+CisKKyAgICA8c2VjdDM+CisgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbjwvdGl0 bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBPYmplY3QtbGV2ZWwgYXVkaXRpbmcgaXMg aW1wbGVtZW50ZWQgdmlhIHRoZSByb2xlcyBzeXN0ZW0uICBUaGUKKyAgICAgICAgPGxpdGVy YWw+cGdfYXVkaXQucm9sZTwvbGl0ZXJhbD4gR1VDIGRlZmluZXMgdGhlIHJvbGUgdGhhdCB3 aWxsIGJlIHVzZWQKKyAgICAgICAgZm9yIGF1ZGl0aW5nLiAgQW4gb2JqZWN0IHdpbGwgYmUg YXVkaXRlZCB3aGVuIHRoZSBhdWRpdCByb2xlIGhhcworICAgICAgICBwZXJtaXNzaW9ucyBm b3IgdGhlIGNvbW1hbmQgZXhlY3V0ZWQgb3IgaW5oZXJpdHMgdGhlIHBlcm1pc3Npb25zIGZy b20KKyAgICAgICAgYW5vdGhlciByb2xlLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cHJv Z3JhbWxpc3Rpbmc+Citwb3N0cmVzcWwuY29uZjogcGdfYXVkaXQucm9sZSA9ICdhdWRpdCcK KworZ3JhbnQgc2VsZWN0LCBkZWxldGUKKyAgIG9uIHB1YmxpYy5hY2NvdW50OworICAgICAg PC9wcm9ncmFtbGlzdGluZz4KKworICAgICAgPHBhcmE+CisgICAgICBOb3RlIHRoYXQgPGxp dGVyYWw+cGdfYXVkaXQucm9sZTwvbGl0ZXJhbD4gY2FuIGJlIHNldCBnbG9iYWxseSAoaW4g CisgICAgICA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4pLCBhdCB0aGUg ZGF0YWJhc2UgbGV2ZWwgKHVzaW5nCisgICAgICA8bGl0ZXJhbD5hbHRlciBkYXRhYmFzZSAu Li4gc2V0PC9saXRlcmFsPiksIG9yIGF0IHRoZSByb2xlIGxldmVsICh1c2luZworICAgICAg PGxpdGVyYWw+YWx0ZXIgcm9sZSAuLi4gc2V0PC9saXRlcmFsPikuCisgICAgICA8L3BhcmE+ CisgICAgPC9zZWN0Mz4KKworICAgIDxzZWN0Mz4KKyAgICAgIDx0aXRsZT5FeGFtcGxlczwv dGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBTZXQgPGxpdGVyYWw+cGdfYXVkaXQu cm9sZSA9ICdhdWRpdCc8L2xpdGVyYWw+IGluCisgICAgICAgIDxsaXRlcmFsPnBvc3RncmVz cWwuY29uZjwvbGl0ZXJhbD4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAg ICAgICBTUUw6CisgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgor Y3JlYXRlIHRhYmxlIGFjY291bnQKKygKKyAgICBpZCBpbnQsCisgICAgbmFtZSB0ZXh0LAor ICAgIHBhc3N3b3JkIHRleHQsCisgICAgZGVzY3JpcHRpb24gdGV4dAorKTsKKworZ3JhbnQg c2VsZWN0IChwYXNzd29yZCkKKyAgIG9uIHB1YmxpYy5hY2NvdW50CisgICB0byBhdWRpdDsK Kworc2VsZWN0IGlkLCBuYW1lCisgIGZyb20gYWNjb3VudDsKKworc2VsZWN0IHBhc3N3b3Jk CisgIGZyb20gYWNjb3VudDsKKworZ3JhbnQgdXBkYXRlIChuYW1lLCBwYXNzd29yZCkKKyAg IG9uIHB1YmxpYy5hY2NvdW50CisgICB0byBhdWRpdDsKKwordXBkYXRlIGFjY291bnQKKyAg IHNldCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJzsKKwordXBkYXRlIGFjY291bnQKKyAg IHNldCBwYXNzd29yZCA9ICdIQVNIMic7CisKK2NyZWF0ZSB0YWJsZSBhY2NvdW50X3JvbGVf bWFwCisoCisgICAgYWNjb3VudF9pZCBpbnQsCisgICAgcm9sZV9pZCBpbnQKKyk7CisKK2dy YW50IHNlbGVjdAorICAgb24gcHVibGljLmFjY291bnRfcm9sZV9tYXAKKyAgIHRvIGF1ZGl0 OworCitzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwKKyAgICAgICBhY2NvdW50X3JvbGVfbWFw LnJvbGVfaWQKKyAgZnJvbSBhY2NvdW50CisgICAgICAgaW5uZXIgam9pbiBhY2NvdW50X3Jv bGVfbWFwCisgICAgICAgICAgICBvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5h Y2NvdW50X2lkCisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICAgIDxwYXJhPgor ICAgICAgICBMb2cgT3V0cHV0OgorICAgICAgPC9wYXJhPgorCisgICAgICA8cHJvZ3JhbWxp c3Rpbmc+CitBVURJVDogT0JKRUNULFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50 LHNlbGVjdCBwYXNzd29yZAorICBmcm9tIGFjY291bnQKK0FVRElUOiBPQkpFQ1QsV1JJVEUs VVBEQVRFLFRBQkxFLHB1YmxpYy5hY2NvdW50LHVwZGF0ZSBhY2NvdW50CisgICBzZXQgcGFz c3dvcmQgPSAnSEFTSDInCitBVURJVDogT0JKRUNULFJFQUQsU0VMRUNULFRBQkxFLHB1Ymxp Yy5hY2NvdW50LHNlbGVjdCBhY2NvdW50LnBhc3N3b3JkLAorICAgICAgIGFjY291bnRfcm9s ZV9tYXAucm9sZV9pZAorICBmcm9tIGFjY291bnQKKyAgICAgICBpbm5lciBqb2luIGFjY291 bnRfcm9sZV9tYXAKKyAgICAgICAgICAgIG9uIGFjY291bnQuaWQgPSBhY2NvdW50X3JvbGVf bWFwLmFjY291bnRfaWQKK0FVRElUOiBPQkpFQ1QsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGlj LmFjY291bnRfcm9sZV9tYXAsc2VsZWN0IGFjY291bnQucGFzc3dvcmQsCisgICAgICAgYWNj b3VudF9yb2xlX21hcC5yb2xlX2lkCisgIGZyb20gYWNjb3VudAorICAgICAgIGlubmVyIGpv aW4gYWNjb3VudF9yb2xlX21hcAorICAgICAgICAgICAgb24gYWNjb3VudC5pZCA9IGFjY291 bnRfcm9sZV9tYXAuYWNjb3VudF9pZAorICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8 L3NlY3QzPgorICA8L3NlY3QyPgorCisgIDxzZWN0Mj4KKyAgICA8dGl0bGU+Rm9ybWF0PC90 aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgQXVkaXQgZW50cmllcyBhcmUgd3JpdHRlbiB0 byB0aGUgc3RhbmRhcmQgbG9nZ2luZyBmYWNpbGl0eSBhbmQgY29udGFpbgorICAgICAgdGhl IGZvbGxvd2luZyBjb2x1bW5zIGluIGNvbW1hLXNlcGFyYXRlZCBmb3JtYXQ6CisKKyAgICAg IDxub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBPdXRwdXQgaXMgbm90IGluIGNv bXBsaWFudCBDU1YgZm9ybWF0LiAgSWYgbWFjaGluZS1yZWFkYWJpbGl0eSBpcworICAgICAg ICAgIHJlcXVpcmVkIHRoZW4gY29uc2lkZXIgc2V0dGluZworICAgICAgICAgIDxsaXRlcmFs PmxvZ19kZXN0aW5hdGlvbiA9ICdjc3Zsb2cnPC9saXRlcmFsPi4KKyAgICAgICAgPC9wYXJh PgorICAgICAgPC9ub3RlPgorCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8bGl0ZXJhbD5BVURJVF9U WVBFPC9saXRlcmFsPiAtIDxsaXRlcmFsPlNFU1NJT048L2xpdGVyYWw+IG9yCisgICAgICAg ICAgICA8bGl0ZXJhbD5PQkpFQ1Q8L2xpdGVyYWw+LgorICAgICAgICAgIDwvcGFyYT4KKyAg ICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJh PgorICAgICAgICAgICAgPGxpdGVyYWw+Q0xBU1M8L2xpdGVyYWw+IC0gPGxpdGVyYWw+UkVB RDwvbGl0ZXJhbD4sCisgICAgICAgICAgICA8bGl0ZXJhbD5XUklURTwvbGl0ZXJhbD4sIDxs aXRlcmFsPkZVTkNUSU9OPC9saXRlcmFsPiwKKyAgICAgICAgICAgIDxsaXRlcmFsPkRETDwv bGl0ZXJhbD4sIG9yIDxsaXRlcmFsPk1JU0M8L2xpdGVyYWw+LgorICAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+Q09NTUFORDwvbGl0ZXJhbD4gLSA8bGl0 ZXJhbD5BTFRFUiBUQUJMRTwvbGl0ZXJhbD4sCisgICAgICAgICAgICA8bGl0ZXJhbD5TRUxF Q1Q8L2xpdGVyYWw+LCA8bGl0ZXJhbD5DUkVBVEUgSU5ERVg8L2xpdGVyYWw+LAorICAgICAg ICAgICAgPGxpdGVyYWw+VVBEQVRFPC9saXRlcmFsPiwgZXRjLgorICAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+T0JKRUNUX1RZUEU8L2xpdGVyYWw+IC0g PGxpdGVyYWw+VEFCTEU8L2xpdGVyYWw+LAorICAgICAgICAgICAgPGxpdGVyYWw+SU5ERVg8 L2xpdGVyYWw+LCA8bGl0ZXJhbD5WSUVXPC9saXRlcmFsPiwgZXRjLiAgT25seQorICAgICAg ICAgICAgYXZhaWxhYmxlIGZvciBETUwgYW5kIGNlcnRhaW4gRERMIGNvbW1hbmRzLgorICAg ICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+T0JKRUNUX05BTUU8 L2xpdGVyYWw+IC0gVGhlIGZ1bGx5LXF1YWxpZmllZCBvYmplY3QgbmFtZQorICAgICAgICAg ICAgKGUuZy4gcHVibGljLmFjY291bnQpLiAgT25seSBhdmFpbGFibGUgZm9yIERNTCBhbmQg Y2VydGFpbiBEREwKKyAgICAgICAgICAgIGNvbW1hbmRzLgorICAgICAgICAgIDwvcGFyYT4K KyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxw YXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+U1RBVEVNRU5UPC9saXRlcmFsPiAtIFN0YXRl bWVudCBleGVjdXRlIG9uIHRoZSBiYWNrZW5kLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAg ICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKyAg PC9zZWN0Mj4KKworICA8c2VjdDI+CisgICAgPHRpdGxlPkF1dGhvcnM8L3RpdGxlPgorCisg ICAgPHBhcmE+CisgICAgICBBYmhpaml0IE1lbm9uLVNlbiA8ZW1haWw+YW1zQDJuZFF1YWRy YW50LmNvbTwvZW1haWw+LCBJYW4gQmFyd2ljayA8ZW1haWw+aWFuQDJuZFF1YWRyYW50LmNv bTwvZW1haWw+LCBhbmQgRGF2aWQgU3RlZWxlIDxlbWFpbD5kYXZpZEBwZ21hc3RlcnMubmV0 PC9lbWFpbD4uCisgICAgPC9wYXJhPgorICA8L3NlY3QyPgorPC9zZWN0MT4K --------------080700040306030303080308-- --ddAqMaG096scLnraxBLcIoMDX0DdtrFD3 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJU7KVRAAoJEIA2uIJQ5SFAmiUP/3X7dQNyl2o2xh8M8Rknk/65 FxRe9XgJZz4Ph4MVxREh4Ifc59zmN3WINTisagfaXTQSml+w8flZfB3eZZgFOr85 0YNRodWEEcHqbs+Y1yOm+gvJfruFmSjILfNeT8pJq9I5g+2KRz2plzykl4Rf7H28 UBswgvD48Ik9Qq1CatyuaMHvw1YFbbmAee8alkZXgQbkQLDkiI55Zz3LPn9envpV PXeCjvuM0loAf/mGp/wOzyj8gz69/8wHht3/C/ds4NKzuVdv59w5vZoDhcopNPOU JkByUOk0MtPW9UErFWCtaLRb36oIcaU95SwJZ8s5RIWVNRigf4CC4qi7d28MGR0l Y4//QoL4vB6jIum2CoekrRol1ZLjHijiwLzmKfqETg0/sT9aplnziXpfSeogwe/i 3EcvXH0YiLGqby0UHWzMWuL2eRk32OJjq+xTgW6PGqFGBxRJhXkHoCJO2vCiMNFV tqljKR+LLi3yB47FexkKMRjTOqUCPSfhifJNvv8eP9Vxt1VNATaB0C/tg2FmFJKo VVPuEfb24qljAbkC7svfDP7sArgrWgT1kSxs3VFGVSbEPdVqdXeyTkPyLJZZoWhr VUqs8rFrJB2qZrWc/jabtCy2oTCM64v1UmxSSe+oDD81Jy8eRRx5QCaZ1AD30Uvz 1IgbXMYxA9BtjFxy9WSs =isrl -----END PGP SIGNATURE----- --ddAqMaG096scLnraxBLcIoMDX0DdtrFD3--