Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uys3E-00DvIR-M2 for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Sep 2025 13:18:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uys3C-007NNX-00 for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Sep 2025 13:18:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uys3B-007NNE-2g for pgsql-hackers@lists.postgresql.org; Wed, 17 Sep 2025 13:18:22 +0000 Received: from fout-a8-smtp.messagingengine.com ([103.168.172.151]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uys36-001K0q-2B for pgsql-hackers@lists.postgresql.org; Wed, 17 Sep 2025 13:18:21 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.phl.internal (Postfix) with ESMTP id EBCE8EC0188; Wed, 17 Sep 2025 09:18:15 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Wed, 17 Sep 2025 09:18:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1758115095; x=1758201495; bh=KWLPFLFuxI pdWtYqC+fSYJ+sTdOdLgG1g9/AIIxg/6w=; b=iCotr0os0qUe+KwrtOXp969KAu rrP4vfvqZw7nG6Cb7i5GzIqC6ACAXY8Yh3YqE9aX3h7NSj4RNzKYV+rBO4kaMgc1 ZtEDL3r3U1tHafi7hmak5qgPJOG57NZMxYP0RT6kI15tk2N2RTPECwboml4LTN2o 075CD0vK6qCauAX0hD+JqDKwjJRk2ekN+98KIAFkA5+MyGLBrUA4Di1Op+24e2Us kJkH54GT/kL1wkzYA+fffHbwDlSkecHa4yWqNedw3HL6NTRfKtV8zso5LEit1A8x MBMnx4xV5vmGSKBl0O2Z8Ha0UBNGx50x26YfKal0JYXL7i2CjpO4nXrfiUkQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1758115095; x=1758201495; bh=KWLPFLFuxIpdWtYqC+fSYJ+sTdOdLgG1g9/ AIIxg/6w=; b=beEuAmB+C82e2khU7wFYLKTLuNVlke2pwOHd4DezoPpZoRj88M+ b4KoRLSug+UyC1ZzmL3m64dmh/ohTJ1QNdqe5F8JC78Aj6wGT4f+Y80rPOGe5dV0 0vCP3FtLp4b00Tven525dL9y9kEzO0xlfYsWFhak3UHqVPsX+Sf2KiDtWBfsk/Pj 1Rk53baZMlrOCJNbHV6TVrRx325ebiJJVPbN0+GcsSz1yCI9Rk4BEVmrC48mX3TE XZehMsS61ArBgvOD0HVDHddaf619YpJQiWHFTf5gH1b6e/Qq7o8iee2l3V6qYavv AsCvqa2fBqrrs/EI2AiQa+DL3rUXF5rKZAg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdegfeehhecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjug hrpeffhffvvefkjghfuffogggtsehmtdhmreertdejnecuhfhrohhmpefirhgvghcuuehu rhguuceoghhrvghgsegsuhhrugdrmhgvqeenucggtffrrghtthgvrhhnpeefvdfhudelud evveegheeuhfdtuedvueeiveegieejkefggfevhfekkefhtdekheenucevlhhushhtvghr ufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehgrhgvghessghurhgurdhmvg dpnhgspghrtghpthhtohephedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepmhhi tghhrggvlhesphgrqhhuihgvrhdrgiihiidprhgtphhtthhopehpghhsqhhlqdhhrggtkh gvrhhssehlihhsthhsrdhpohhsthhgrhgvshhqlhdrohhrghdprhgtphhtthhopehnrght hhgrnhgusghoshhsrghrthesghhmrghilhdrtghomhdprhgtphhtthhopehsrgifrggurg drmhhshhhksehgmhgrihhlrdgtohhmpdhrtghpthhtoheprhhosggvrhhtmhhhrggrshes ghhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 17 Sep 2025 09:18:15 -0400 (EDT) Date: Wed, 17 Sep 2025 09:17:59 -0400 From: Greg Burd To: Michael Paquier Cc: PostgreSQL Hackers , Nathan Bossart , Masahiko Sawada , Robert Haas Message-ID: <4792B7EE-F449-47AD-9078-C827D43F1EEE@greg.burd.me> In-Reply-To: References: Subject: Re: [PATCH] Add tests for Bitmapset X-Mailer: Mailspring MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="68cab507_7668d726_6415" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --68cab507_7668d726_6415 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Sep 16 2025, at 11:25 pm, Michael Paquier wrote: > On Tue, Sep 16, 2025 at 03:04:39PM -0400, Greg Burd wrote: >> I've re-written the set of tests as suggested (I hope!). I've not >> re-run the coverage report (yet) to ensure we're at least as well >> covered as v3, but attached is v4 for your inspection (amusement?). >> I've tried to author the SQL tests such that failures clearly indicate >> what's at gone wrong. > > Thanks for the update, that's easier to follow, even if it's more > code overall. It looks like all the 29 APIs are present, plus the > extras for the array mapping routines required for the tests with the > list APIs. Thank you for the continued detailed feedback, I think we're zeroing in on a solid patch. > +static void > +elog_bitmapset(int elevel, const char *label, const Bitmapset *bms) > > This routine, that's able to translate a bytea into a readable form, > is also something that I would have added as an extra function, then > used it in some of the tests where I would care about the bitmap in > output generated after a given operation, removing the DEBUG parts > that I guess have also a risk of rotting over time. That would make > the tests for simple operations that generate a bms as a result in > easier to read, because we would call less SQL calls. For example, > take the "add_member idempotent" case, that calls twice > test_bms_make_singleton() to compare the output byteas, we could just > do a test_bms_add_member(test_bms_make_singleton(10), 10) and show the > output? I added a function bms_values() that prints out the values contained in a bitmapset and changed a few tests to use it. I removed the elog_bitmapset() as it isn't being used and now that it's easy to output the set in SQL why keep it for debugging? > We could perhaps use the CTE style for the basic calls, to reduce the > test_bms_make_singleton() calls. What you are doing feels OK as well, > just a thought in passing. I changed a few tests I saw with the pattern you mentioned. If you identify additional tests you feel should be re-written please let me know. > FWIW, I tend to write the regression test queries so as these are > limited to 72-80 characters per line, to fit even in a small > terminals. That's just an old-school take, even if it means more > lines in the SQL input file. I have a vt-100 sitting behind me, I get it. I tend to try to line-wrap at 78. I tried a few times to re-format the SQL accordingly and I found that it became harder to understand and less readable IMO. I'd prefer to keep it as is, unless there is a hard requirement in which case I'll reformat it. > Perhaps it would be worth documenting what's the value of > test_random_operations? It is a mean of testing add, del and > is_member with a modulo 1000 of the member number. With the other > functions that offer deterministic tests, I am not sure what's the > extra value gained in it. That was my thinking and why I didn't have a test that used random data to start with (v1). I'd rather just remove it, but I'm open to ideas. I could replace it with the earlier version of the function. > + bms1_data = PG_GETARG_BYTEA_PP(0); > + if (VARSIZE_ANY_EXHDR(bms1_data) > 0) > + { > + bms1 = (Bitmapset *) palloc(VARSIZE_ANY_EXHDR(bms1_data)); > + memcpy(bms1, VARDATA_ANY(bms1_data), VARSIZE_ANY_EXHDR(bms1_data)); > + } > > This pattern is repeated 9 times, if my fingers got it right. Perhaps > hide it in a macro, or invent an extra static inline routine that does > the translation? That was an oversight on my part, all of those have been reduced to use the same pattern with encode/decode bms() functions. > +DO $$ > +BEGIN > + BEGIN > + PERFORM test_bms_singleton_member(test_bms_from_array(ARRAY[1,2])); > + RAISE NOTICE 'ERROR: singleton_member([1,2]) should have failed!'; > > Do we need all these DO blocks to catch failures? These cases bump on > elog(ERROR) in the internals of bitmapset.c, which are not something > the end-users would expect, but in a test module that's fine to > trigger. The function call would just fail, which is fine. Sure, that's easy enough. > The queries with CTEs and UNION ALL are elegant, nice. Thanks. >> This exercise turned into a lot more LOC than I'd expected, I hope it >> provides some value to the community for testing this important data >> structure and helps to codify the API clearly. > > It does, at least that's my opinion. So thanks for caring about this > level of testing. Again, thank YOU(!) for caring enough to review the work. > -- > Michael Don't forget, we expect the cfbot/CI to fail on 32bit systems and tell us the hash value we need to record in the next version of the patch. Or, if we don't think testing the hash functions is worth it (and I'm on the fence on this one) then I can just remove it. best. -greg --68cab507_7668d726_6415 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v5-0001-Add-a-module-that-tests-Bitmapset.patch" RnJvbSA5ZTkyY2RmMjFmY2MzZmYzYjc5YzJiOGNlM2IxYzY1YTc5MzgzNzk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTogV2VkLCAx MyBBdWcgMjAyNSAxNTo0MDozMSAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjVdIEFkZCBhIG1vZHVs ZSB0aGF0IHRlc3RzIEJpdG1hcHNldAoKQmFzaWMgdGVzdHMgZm9yIEJpdG1hcHNldCB0byBlbnN1 cmUgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBwcmV2ZW50CnVuaW50ZW50aW9uYWwgYnJlYWtpbmcg Y2hhbmdlcyBpbiB0aGUgZnV0dXJlLgotLS0KIHNyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUgICAg ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0 Ly5naXRpZ25vcmUgICAgfCAgICA0ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv TWFrZWZpbGUgICAgICB8ICAgMjMgKwogLi4uL2V4cGVjdGVkL3Rlc3RfYml0bWFwc2V0Lm91dCAg ICAgICAgICAgICAgIHwgIDYzNCArKysrKysrKysrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0 bWFwc2V0L21lc29uLmJ1aWxkICAgfCAgIDMzICsKIC4uLi90ZXN0X2JpdG1hcHNldC9zcWwvdGVz dF9iaXRtYXBzZXQuc3FsICAgICB8ICAzNzIgKysrKysrCiAuLi4vdGVzdF9iaXRtYXBzZXQvdGVz dF9iaXRtYXBzZXQtLTEuMC5zcWwgICAgfCAgMTU1ICsrKwogLi4uL21vZHVsZXMvdGVzdF9iaXRt YXBzZXQvdGVzdF9iaXRtYXBzZXQuYyAgIHwgMTEwMiArKysrKysrKysrKysrKysrKwogLi4uL3Rl c3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wgICAgIHwgICAgNCArCiAxMCBmaWxl cyBjaGFuZ2VkLCAyMzI5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0Ly5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3RlZC90ZXN0X2JpdG1hcHNl dC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0 L21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Jp dG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC0tMS4wLnNxbAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBz ZXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv dGVzdF9iaXRtYXBzZXQuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFr ZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IDkwM2E4YWMxNTFhLi45NDA3 MWVjMGUxNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMv dGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIFNVQkRJUlMgPSBcCiAJCSAg c3BnaXN0X25hbWVfb3BzIFwKIAkJICB0ZXN0X2FpbyBcCiAJCSAgdGVzdF9iaW5hcnloZWFwIFwK KwkJICB0ZXN0X2JpdG1hcHNldCBcCiAJCSAgdGVzdF9ibG9vbWZpbHRlciBcCiAJCSAgdGVzdF9j b3B5X2NhbGxiYWNrcyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQK aW5kZXggOTNiZTBmNTcyODkuLmQ4ZjVjOWM3NDk0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1 bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKQEAgLTE1 LDYgKzE1LDcgQEAgc3ViZGlyKCdzcGdpc3RfbmFtZV9vcHMnKQogc3ViZGlyKCdzc2xfcGFzc3Bo cmFzZV9jYWxsYmFjaycpCiBzdWJkaXIoJ3Rlc3RfYWlvJykKIHN1YmRpcigndGVzdF9iaW5hcnlo ZWFwJykKK3N1YmRpcigndGVzdF9iaXRtYXBzZXQnKQogc3ViZGlyKCd0ZXN0X2Jsb29tZmlsdGVy JykKIHN1YmRpcigndGVzdF9jb3B5X2NhbGxiYWNrcycpCiBzdWJkaXIoJ3Rlc3RfY3VzdG9tX3Jt Z3JzJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvLmdpdGln bm9yZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvLmdpdGlnbm9yZQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWRjYjNmZjk3MjMKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0Ly5naXRpZ25vcmUKQEAgLTAs MCArMSw0IEBACisjIEdlbmVyYXRlZCBzdWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1bHRzLwor L3RtcF9jaGVjay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQv TWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L01ha2VmaWxlCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NzE5OWQ0MGQ3MwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvTWFrZWZpbGUKQEAgLTAs MCArMSwyMyBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L01ha2VmaWxlCisK K01PRFVMRV9iaWcgPSB0ZXN0X2JpdG1hcHNldAorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJ dGVzdF9iaXRtYXBzZXQubworUEdGSUxFREVTQyA9ICJ0ZXN0X2JpdG1hcHNldCAtIHRlc3QgY29k ZSBmb3Igc3JjL2luY2x1ZGUvbm9kZXMvYml0bWFwc2V0LmgiCisKK0VYVEVOU0lPTiA9IHRlc3Rf Yml0bWFwc2V0CitEQVRBID0gdGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwKKworUkVHUkVTUyA9IHRl c3RfYml0bWFwc2V0CisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BH WFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNl CitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0Cit0b3BfYnVpbGRkaXIg PSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2Jh bAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlm CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVkL3Rl c3RfYml0bWFwc2V0Lm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvZXhwZWN0 ZWQvdGVzdF9iaXRtYXBzZXQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi40N2Y3NGNiNzUyMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9iaXRtYXBzZXQvZXhwZWN0ZWQvdGVzdF9iaXRtYXBzZXQub3V0CkBAIC0wLDAgKzEsNjM0IEBA CitDUkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElTVFMgdGVzdF9iaXRtYXBzZXQ7CistLSBCQVNJ QyBGVU5DVElPTkFMSVRZIFRFU1RTCistLSBUZXN0IGJtc192YWx1ZXMgZnVuY3Rpb24KK1NFTEVD VCAndmFsdWVzIE5VTEwnIGFzIHRlc3QsIGJtc192YWx1ZXMoTlVMTCkgYXMgcmVzdWx0OworICAg IHRlc3QgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIHZhbHVlcyBOVUxM IHwge30KKygxIHJvdykKKworU0VMRUNUICd2YWx1ZXMgZW1wdHknIGFzIHRlc3QsIGJtc192YWx1 ZXModGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVtdOjppbnRlZ2VyW10pKSBhcyByZXN1bHQ7Cisg ICAgIHRlc3QgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyB2YWx1ZXMg ZW1wdHkgfCB7fQorKDEgcm93KQorCitTRUxFQ1QgJ3ZhbHVlcyBzaW5nbGV0b24nIGFzIHRlc3Qs IGJtc192YWx1ZXModGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oNDIpKSBhcyByZXN1bHQ7CisgICAg ICAgdGVzdCAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIHZh bHVlcyBzaW5nbGV0b24gfCB7NDJ9CisoMSByb3cpCisKK1NFTEVDVCAndmFsdWVzIHNtYWxsIHNl dCcgYXMgdGVzdCwgYm1zX3ZhbHVlcyh0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkp IGFzIHJlc3VsdDsKKyAgICAgICB0ZXN0ICAgICAgIHwgcmVzdWx0ICAKKy0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0KKyB2YWx1ZXMgc21hbGwgc2V0IHwgezEsMyw1fQorKDEgcm93KQorCitT RUxFQ1QgJ3ZhbHVlcyBsYXJnZXIgc2V0JyBhcyB0ZXN0LCBibXNfdmFsdWVzKHRlc3RfYm1zX2Zy b21fYXJyYXkoQVJSQVlbMCw1LDEwLDE1LDIwXSkpIGFzIHJlc3VsdDsKKyAgICAgICB0ZXN0ICAg ICAgICB8ICAgICByZXN1bHQgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tCisgdmFsdWVzIGxhcmdlciBzZXQgfCB7MCw1LDEwLDE1LDIwfQorKDEgcm93KQorCitTRUxF Q1QgJ3ZhbHVlcyB1bnNvcnRlZCBpbnB1dCcgYXMgdGVzdCwgYm1zX3ZhbHVlcyh0ZXN0X2Jtc19m cm9tX2FycmF5KEFSUkFZWzIwLDUsMTUsMCwxMF0pKSBhcyByZXN1bHQ7CisgICAgICAgICB0ZXN0 ICAgICAgICAgIHwgICAgIHJlc3VsdCAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tCisgdmFsdWVzIHVuc29ydGVkIGlucHV0IHwgezAsNSwxMCwxNSwyMH0KKygx IHJvdykKKworLS0gVGVzdCAxOiBCYXNpYyB1dGlsaXR5IGZ1bmN0aW9ucworU0VMRUNUICdOVUxM IGlucHV0IHRvIGZyb21fYXJyYXknIGFzIHRlc3QsIHRlc3RfYm1zX2Zyb21fYXJyYXkoTlVMTCkg SVMgTlVMTCBhcyByZXN1bHQ7CisgICAgICAgICAgIHRlc3QgICAgICAgICAgIHwgcmVzdWx0IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBOVUxMIGlucHV0IHRvIGZyb21f YXJyYXkgfCB0CisoMSByb3cpCisKK1NFTEVDVCAnRW1wdHkgYXJyYXkgdG8gZnJvbV9hcnJheScg YXMgdGVzdCwgdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVtdOjppbnRlZ2VyW10pIElTIE5VTEwg YXMgcmVzdWx0OworICAgICAgICAgICB0ZXN0ICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBFbXB0eSBhcnJheSB0byBmcm9tX2FycmF5 IHwgdAorKDEgcm93KQorCitTRUxFQ1QgJ05VTEwgaW5wdXQgdG8gdG9fYXJyYXknIGFzIHRlc3Qs IHRlc3RfYm1zX3RvX2FycmF5KE5VTEwpIElTIE5VTEwgYXMgcmVzdWx0OworICAgICAgICAgIHRl c3QgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0K KyBOVUxMIGlucHV0IHRvIHRvX2FycmF5IHwgdAorKDEgcm93KQorCistLSBUZXN0IDI6IFNpbmds ZXRvbiBvcGVyYXRpb25zCitTRUxFQ1QgJ21ha2Vfc2luZ2xldG9uKDQyKScgYXMgdGVzdCwgdGVz dF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oNDIpKSA9IEFSUkFZWzQyXSBh cyByZXN1bHQ7CisgICAgICAgIHRlc3QgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0KKyBtYWtlX3NpbmdsZXRvbig0MikgfCB0CisoMSByb3cpCisKK1NFTEVD VCAnbWFrZV9zaW5nbGV0b24oMCknIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1z X21ha2Vfc2luZ2xldG9uKDApKSA9IEFSUkFZWzBdIGFzIHJlc3VsdDsKKyAgICAgICB0ZXN0ICAg ICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBtYWtlX3Npbmds ZXRvbigwKSB8IHQKKygxIHJvdykKKworU0VMRUNUICdtYWtlX3NpbmdsZXRvbigxMDAwKScgYXMg dGVzdCwgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oMTAwMCkpID0g QVJSQVlbMTAwMF0gYXMgcmVzdWx0OworICAgICAgICAgdGVzdCAgICAgICAgIHwgcmVzdWx0IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIG1ha2Vfc2luZ2xldG9uKDEwMDApIHwg dAorKDEgcm93KQorCistLSBUZXN0IDM6IEFkZCBtZW1iZXIgb3BlcmF0aW9ucworU0VMRUNUICdh ZGRfbWVtYmVyKE5VTEwsIDEwKScgYXMgdGVzdCwgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNf YWRkX21lbWJlcihOVUxMLCAxMCkpID0gQVJSQVlbMTBdIGFzIHJlc3VsdDsKKyAgICAgICAgIHRl c3QgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBh ZGRfbWVtYmVyKE5VTEwsIDEwKSB8IHQKKygxIHJvdykKKworU0VMRUNUICdhZGRfbWVtYmVyIGNv bnNpc3RlbmN5JyBhcyB0ZXN0LCBibXNfdmFsdWVzKHRlc3RfYm1zX2FkZF9tZW1iZXIoTlVMTCwg MTApKSBhcyB2YWx1ZXM7CisgICAgICAgICAgdGVzdCAgICAgICAgICB8IHZhbHVlcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGFkZF9tZW1iZXIgY29uc2lzdGVuY3kgfCB7 MTB9CisoMSByb3cpCisKK1NFTEVDVCAnYWRkX21lbWJlciB0byBleGlzdGluZycgYXMgdGVzdCwg dGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfYWRkX21lbWJlcih0ZXN0X2Jtc19tYWtlX3Npbmds ZXRvbig1KSwgMTApKSA9IEFSUkFZWzUsMTBdIGFzIHJlc3VsdDsKKyAgICAgICAgICB0ZXN0ICAg ICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgYWRk X21lbWJlciB0byBleGlzdGluZyB8IHQKKygxIHJvdykKKworU0VMRUNUICdhZGRfbWVtYmVyIHNv cnRlZCcgYXMgdGVzdCwgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfYWRkX21lbWJlcih0ZXN0 X2Jtc19tYWtlX3NpbmdsZXRvbigxMCksIDUpKSA9IEFSUkFZWzUsMTBdIGFzIHJlc3VsdDsKKyAg ICAgICB0ZXN0ICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0K KyBhZGRfbWVtYmVyIHNvcnRlZCB8IHQKKygxIHJvdykKKworU0VMRUNUICdhZGRfbWVtYmVyIGlk ZW1wb3RlbnQnIGFzIHRlc3QsIGJtc192YWx1ZXModGVzdF9ibXNfYWRkX21lbWJlcih0ZXN0X2Jt c19tYWtlX3NpbmdsZXRvbigxMCksIDEwKSkgYXMgdmFsdWVzOworICAgICAgICAgdGVzdCAgICAg ICAgICB8IHZhbHVlcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgYWRkX21l bWJlciBpZGVtcG90ZW50IHwgezEwfQorKDEgcm93KQorCistLSBUZXN0IDQ6IERlbGV0ZSBtZW1i ZXIgb3BlcmF0aW9ucworU0VMRUNUICdkZWxfbWVtYmVyIGZyb20gTlVMTCcgYXMgdGVzdCwgdGVz dF9ibXNfZGVsX21lbWJlcihOVUxMLCAxMCkgSVMgTlVMTCBhcyByZXN1bHQ7CisgICAgICAgICB0 ZXN0ICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisg ZGVsX21lbWJlciBmcm9tIE5VTEwgfCB0CisoMSByb3cpCisKK1NFTEVDVCAnZGVsX21lbWJlciBz aW5nbGV0b24gYmVjb21lcyBlbXB0eScgYXMgdGVzdCwgdGVzdF9ibXNfZGVsX21lbWJlcih0ZXN0 X2Jtc19tYWtlX3NpbmdsZXRvbigxMCksIDEwKSBJUyBOVUxMIGFzIHJlc3VsdDsKKyAgICAgICAg ICAgICAgICB0ZXN0ICAgICAgICAgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgZGVsX21lbWJlciBzaW5nbGV0b24gYmVjb21l cyBlbXB0eSB8IHQKKygxIHJvdykKKworU0VMRUNUICdkZWxfbWVtYmVyIG5vIGNoYW5nZScgYXMg dGVzdCwgYm1zX3ZhbHVlcyh0ZXN0X2Jtc19kZWxfbWVtYmVyKHRlc3RfYm1zX21ha2Vfc2luZ2xl dG9uKDEwKSwgNSkpIGFzIHZhbHVlczsKKyAgICAgICAgIHRlc3QgICAgICAgICB8IHZhbHVlcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBkZWxfbWVtYmVyIG5vIGNoYW5nZSB8 IHsxMH0KKygxIHJvdykKKworU0VMRUNUICdkZWxfbWVtYmVyIGZyb20gbWlkZGxlJyBhcyB0ZXN0 LCB0ZXN0X2Jtc190b19hcnJheSh0ZXN0X2Jtc19kZWxfbWVtYmVyKHRlc3RfYm1zX2Zyb21fYXJy YXkoQVJSQVlbMSwyLDNdKSwgMikpID0gQVJSQVlbMSwzXSBhcyByZXN1bHQ7CisgICAgICAgICAg dGVzdCAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LQorIGRlbF9tZW1iZXIgZnJvbSBtaWRkbGUgfCB0CisoMSByb3cpCisKKy0tIFNFVCBPUEVSQVRJ T05TIFRFU1RTCistLSBUZXN0IDU6IFVuaW9uIG9wZXJhdGlvbnMKK1dJVEggdGVzdF9zZXRzIEFT ICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0 XzEzNSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzMsNSw3XSkgQVMgc2V0XzM1NywKKwl0 ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQorU0VMRUNUICd1 bmlvbiBvdmVybGFwcGluZyBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX3RvX2FycmF5 KHRlc3RfYm1zX3VuaW9uKHNldF8xMzUsIHNldF8zNTcpKSA9IEFSUkFZWzEsMyw1LDddIGFzIHJl c3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICd1bmlvbiB3aXRoIE5VTEwn IGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfdW5pb24oc2V0XzEz NSwgTlVMTCkpID0gQVJSQVlbMSwzLDVdIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9O IEFMTAorU0VMRUNUICd1bmlvbiBOVUxMIHdpdGggTlVMTCcgYXMgdGVzdCwKKyAgICAgICB0ZXN0 X2Jtc191bmlvbihOVUxMLCBOVUxMKSBJUyBOVUxMIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHM7 CisgICAgICAgICAgdGVzdCAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLQorIHVuaW9uIG92ZXJsYXBwaW5nIHNldHMgfCB0CisgdW5pb24gd2l0aCBO VUxMICAgICAgICB8IHQKKyB1bmlvbiBOVUxMIHdpdGggTlVMTCAgIHwgdAorKDMgcm93cykKKwor LS0gVGVzdCA2OiBJbnRlcnNlY3Rpb24gb3BlcmF0aW9ucworV0lUSCB0ZXN0X3NldHMgQVMgKAor ICAgIFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1 LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMyw1LDddKSBBUyBzZXRfMzU3LAorCXRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDZdKSBBUyBzZXRfMjQ2CispCitTRUxFQ1QgJ2ludGVy c2VjdCBvdmVybGFwcGluZyBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX3RvX2FycmF5 KHRlc3RfYm1zX2ludGVyc2VjdChzZXRfMTM1LCBzZXRfMzU3KSkgPSBBUlJBWVszLDVdIGFzIHJl c3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdpbnRlcnNlY3QgZGlzam9p bnQgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19pbnRlcnNlY3Qoc2V0XzEzNSwgc2V0 XzI0NikgSVMgTlVMTCBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVD VCAnaW50ZXJzZWN0IHdpdGggTlVMTCcgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc19pbnRlcnNl Y3Qoc2V0XzEzNSwgTlVMTCkgSVMgTlVMTCBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzOworICAg ICAgICAgICAgdGVzdCAgICAgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLQorIGludGVyc2VjdCBvdmVybGFwcGluZyBzZXRzIHwgdAorIGludGVy c2VjdCBkaXNqb2ludCBzZXRzICAgIHwgdAorIGludGVyc2VjdCB3aXRoIE5VTEwgICAgICAgIHwg dAorKDMgcm93cykKKworLS0gVGVzdCA3OiBEaWZmZXJlbmNlIG9wZXJhdGlvbnMKK1dJVEggdGVz dF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1 XSkgQVMgc2V0XzEzNSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzMsNSw3XSkgQVMgc2V0 XzM1NywKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQor U0VMRUNUICdkaWZmZXJlbmNlIG92ZXJsYXBwaW5nIHNldHMnIGFzIHRlc3QsCisgICAgICAgdGVz dF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfZGlmZmVyZW5jZShzZXRfMTM1LCBzZXRfMzU3KSkgPSBB UlJBWVsxXSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnZGlm ZmVyZW5jZSBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX3RvX2FycmF5 KHRlc3RfYm1zX2RpZmZlcmVuY2Uoc2V0XzEzNSwgc2V0XzI0NikpID0gQVJSQVlbMSwzLDVdIGFz IHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdkaWZmZXJlbmNlIGlk ZW50aWNhbCBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX2RpZmZlcmVuY2Uoc2V0XzEz NSwgc2V0XzEzNSkgSVMgTlVMTCBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzOworICAgICAgICAg ICAgdGVzdCAgICAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tCisgZGlmZmVyZW5jZSBvdmVybGFwcGluZyBzZXRzIHwgdAorIGRpZmZlcmVu Y2UgZGlzam9pbnQgc2V0cyAgICB8IHQKKyBkaWZmZXJlbmNlIGlkZW50aWNhbCBzZXRzICAgfCB0 CisoMyByb3dzKQorCistLSBNRU1CRVJTSElQIEFORCBDT01QQVJJU09OIFRFU1RTCistLSBUZXN0 IDg6IE1lbWJlcnNoaXAgdGVzdHMKK1dJVEggdGVzdF9zZXQgQVMgKFNFTEVDVCB0ZXN0X2Jtc19m cm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNSkKK1NFTEVDVCAnaXNfbWVtYmVyIGV4 aXN0aW5nJyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19tZW1iZXIoc2V0XzEzNSwgMSkgPSB0cnVlIGFz IHJlc3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAnaXNfbWVtYmVyIG1pc3Np bmcnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX21lbWJlcihzZXRfMTM1LCAyKSA9IGZhbHNlIGFzIHJl c3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAnaXNfbWVtYmVyIGV4aXN0aW5n IG1pZGRsZScgYXMgdGVzdCwgdGVzdF9ibXNfaXNfbWVtYmVyKHNldF8xMzUsIDMpID0gdHJ1ZSBh cyByZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ2lzX21lbWJlciBOVUxM IHNldCcgYXMgdGVzdCwgdGVzdF9ibXNfaXNfbWVtYmVyKE5VTEwsIDEpID0gZmFsc2UgYXMgcmVz dWx0IEZST00gdGVzdF9zZXQ7CisgICAgICAgICAgIHRlc3QgICAgICAgICAgICB8IHJlc3VsdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGlzX21lbWJlciBleGlzdGlu ZyAgICAgICAgfCB0CisgaXNfbWVtYmVyIG1pc3NpbmcgICAgICAgICB8IHQKKyBpc19tZW1iZXIg ZXhpc3RpbmcgbWlkZGxlIHwgdAorIGlzX21lbWJlciBOVUxMIHNldCAgICAgICAgfCB0CisoNCBy b3dzKQorCistLSBUZXN0IDk6IFNldCBjYXJkaW5hbGl0eQorU0VMRUNUICdudW1fbWVtYmVycyBO VUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19udW1fbWVtYmVycyhOVUxMKSA9IDAgYXMgcmVzdWx0Owor ICAgICAgIHRlc3QgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0K KyBudW1fbWVtYmVycyBOVUxMIHwgdAorKDEgcm93KQorCitTRUxFQ1QgJ251bV9tZW1iZXJzIHNt YWxsIHNldCcgYXMgdGVzdCwgdGVzdF9ibXNfbnVtX21lbWJlcnModGVzdF9ibXNfZnJvbV9hcnJh eShBUlJBWVsxLDMsNV0pKSA9IDMgYXMgcmVzdWx0OworICAgICAgICAgdGVzdCAgICAgICAgICB8 IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgbnVtX21lbWJlcnMg c21hbGwgc2V0IHwgdAorKDEgcm93KQorCitTRUxFQ1QgJ251bV9tZW1iZXJzIGxhcmdlciBzZXQn IGFzIHRlc3QsIHRlc3RfYm1zX251bV9tZW1iZXJzKHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlb Miw0LDYsOCwxMF0pKSA9IDUgYXMgcmVzdWx0OworICAgICAgICAgIHRlc3QgICAgICAgICAgfCBy ZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBudW1fbWVtYmVycyBs YXJnZXIgc2V0IHwgdAorKDEgcm93KQorCistLSBUZXN0IDEwOiBTZXQgZXF1YWxpdHkgYW5kIGNv bXBhcmlzb24KK1dJVEggdGVzdF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9t X2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9hLAorCXRlc3RfYm1zX2Zyb21fYXJyYXko QVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2IsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsy LDQsNl0pIEFTIHNldF8yNDYsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDNdKSBBUyBz ZXRfMTMKKykKK1NFTEVDVCAnZXF1YWwgTlVMTCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVh bChOVUxMLCBOVUxMKSA9IHRydWUgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwK K1NFTEVDVCAnZXF1YWwgTlVMTCBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2VxdWFsKE5VTEwsIHNl dF8xMzVfYSkgPSBmYWxzZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VM RUNUICdlcXVhbCBzZXQgTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfZXF1YWwoc2V0XzEzNV9hLCBO VUxMKSA9IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1Qg J2VxdWFsIGlkZW50aWNhbCBzZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChzZXRfMTM1X2Es IHNldF8xMzVfYikgPSB0cnVlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitT RUxFQ1QgJ2VxdWFsIGRpZmZlcmVudCBzZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChzZXRf MTM1X2EsIHNldF8yNDYpID0gZmFsc2UgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBB TEwKK1NFTEVDVCAnY29tcGFyZSBOVUxMIE5VTEwnIGFzIHRlc3QsIHRlc3RfYm1zX2NvbXBhcmUo TlVMTCwgTlVMTCkgPSAwIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxF Q1QgJ2NvbXBhcmUgTlVMTCBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2NvbXBhcmUoTlVMTCwgc2V0 XzEzKSA9IC0xIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2Nv bXBhcmUgc2V0IE5VTEwnIGFzIHRlc3QsIHRlc3RfYm1zX2NvbXBhcmUoc2V0XzEzLCBOVUxMKSA9 IDEgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBl cXVhbCBzZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19jb21wYXJlKHNldF8xMywgc2V0XzEzKSA9IDAg YXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBzdWJz ZXQgc3VwZXJzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2NvbXBhcmUoc2V0XzEzLCBzZXRfMTM1X2Ep ID0gLTEgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFy ZSBzdXBlcnNldCBzdWJzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2NvbXBhcmUoc2V0XzEzNV9hLCBz ZXRfMTMpID0gMSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHM7CisgICAgICAgICAgdGVzdCAgICAg ICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgZXF1 YWwgTlVMTCBOVUxMICAgICAgICAgfCB0CisgZXF1YWwgTlVMTCBzZXQgICAgICAgICAgfCB0Cisg ZXF1YWwgc2V0IE5VTEwgICAgICAgICAgfCB0CisgZXF1YWwgaWRlbnRpY2FsIHNldHMgICAgfCB0 CisgZXF1YWwgZGlmZmVyZW50IHNldHMgICAgfCB0CisgY29tcGFyZSBOVUxMIE5VTEwgICAgICAg fCB0CisgY29tcGFyZSBOVUxMIHNldCAgICAgICAgfCB0CisgY29tcGFyZSBzZXQgTlVMTCAgICAg ICAgfCB0CisgY29tcGFyZSBlcXVhbCBzZXRzICAgICAgfCB0CisgY29tcGFyZSBzdWJzZXQgc3Vw ZXJzZXQgfCB0CisgY29tcGFyZSBzdXBlcnNldCBzdWJzZXQgfCB0CisoMTEgcm93cykKKworLS0g QURWQU5DRUQgT1BFUkFUSU9OUyBURVNUUworLS0gVGVzdCAxMTogUmFuZ2Ugb3BlcmF0aW9ucwor U0VMRUNUICdhZGRfcmFuZ2UgYmFzaWMnIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3Rf Ym1zX2FkZF9yYW5nZShOVUxMLCA1LCA3KSkgPSBBUlJBWVs1LDYsN10gYXMgcmVzdWx0OworICAg ICAgdGVzdCAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgYWRk X3JhbmdlIGJhc2ljIHwgdAorKDEgcm93KQorCitTRUxFQ1QgJ2FkZF9yYW5nZSBzaW5nbGUgZWxl bWVudCcgYXMgdGVzdCwgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfYWRkX3JhbmdlKE5VTEws IDUsIDUpKSA9IEFSUkFZWzVdIGFzIHJlc3VsdDsKKyAgICAgICAgICAgdGVzdCAgICAgICAgICAg fCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGFkZF9yYW5n ZSBzaW5nbGUgZWxlbWVudCB8IHQKKygxIHJvdykKKworU0VMRUNUICdhZGRfcmFuZ2UgdG8gZXhp c3RpbmcnIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2FkZF9yYW5nZSh0ZXN0 X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMTBdKSwgNSwgNykpID0gQVJSQVlbMSw1LDYsNywxMF0g YXMgcmVzdWx0OworICAgICAgICAgdGVzdCAgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgYWRkX3JhbmdlIHRvIGV4aXN0aW5nIHwgdAorKDEgcm93 KQorCistLSBUZXN0IDEyOiBNZW1iZXJzaGlwIHR5cGVzCitTRUxFQ1QgJ21lbWJlcnNoaXAgZW1w dHknIGFzIHRlc3QsIHRlc3RfYm1zX21lbWJlcnNoaXAoTlVMTCkgPSAwIGFzIHJlc3VsdDsKKyAg ICAgICB0ZXN0ICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisg bWVtYmVyc2hpcCBlbXB0eSB8IHQKKygxIHJvdykKKworU0VMRUNUICdtZW1iZXJzaGlwIHNpbmds ZXRvbicgYXMgdGVzdCwgdGVzdF9ibXNfbWVtYmVyc2hpcCh0ZXN0X2Jtc19mcm9tX2FycmF5KEFS UkFZWzQyXSkpID0gMSBhcyByZXN1bHQ7CisgICAgICAgICB0ZXN0ICAgICAgICAgfCByZXN1bHQg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgbWVtYmVyc2hpcCBzaW5nbGV0b24g fCB0CisoMSByb3cpCisKK1NFTEVDVCAnbWVtYmVyc2hpcCBtdWx0aXBsZScgYXMgdGVzdCwgdGVz dF9ibXNfbWVtYmVyc2hpcCh0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMiwzXSkpID0gMiBh cyByZXN1bHQ7CisgICAgICAgIHRlc3QgICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLQorIG1lbWJlcnNoaXAgbXVsdGlwbGUgfCB0CisoMSByb3cpCisKKy0t IFRlc3QgMTM6IFNpbmdsZXRvbiBtZW1iZXIgZXh0cmFjdGlvbgorU0VMRUNUICdzaW5nbGV0b25f bWVtYmVyIHZhbGlkJyBhcyB0ZXN0LCB0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKHRlc3RfYm1z X2Zyb21fYXJyYXkoQVJSQVlbNDJdKSkgPSA0MiBhcyByZXN1bHQ7CisgICAgICAgICAgdGVzdCAg ICAgICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIHNp bmdsZXRvbl9tZW1iZXIgdmFsaWQgfCB0CisoMSByb3cpCisKKy0tIFRlc3QgMTQ6IFNldCBpdGVy YXRpb24KK1dJVEggdGVzdF9zZXQgQVMgKFNFTEVDVCB0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZ WzUsMTAsMTUsMjBdKSBBUyBzZXRfbnVtYmVycykKK1NFTEVDVCAnbmV4dF9tZW1iZXIgZmlyc3Qn IGFzIHRlc3QsIHRlc3RfYm1zX25leHRfbWVtYmVyKHNldF9udW1iZXJzLCAtMSkgPSA1IGFzIHJl c3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAnbmV4dF9tZW1iZXIgc2Vjb25k JyBhcyB0ZXN0LCB0ZXN0X2Jtc19uZXh0X21lbWJlcihzZXRfbnVtYmVycywgNSkgPSAxMCBhcyBy ZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ25leHRfbWVtYmVyIHBhc3Qg ZW5kJyBhcyB0ZXN0LCB0ZXN0X2Jtc19uZXh0X21lbWJlcihzZXRfbnVtYmVycywgMjApID0gLTIg YXMgcmVzdWx0IEZST00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICduZXh0X21lbWJlciBl bXB0eSBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX25leHRfbWVtYmVyKE5VTEwsIC0xKSA9IC0yIGFz IHJlc3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAncHJldl9tZW1iZXIgbGFz dCcgYXMgdGVzdCwgdGVzdF9ibXNfcHJldl9tZW1iZXIoc2V0X251bWJlcnMsIDIxKSA9IDIwIGFz IHJlc3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAncHJldl9tZW1iZXIgcGVu dWx0aW1hdGUnIGFzIHRlc3QsIHRlc3RfYm1zX3ByZXZfbWVtYmVyKHNldF9udW1iZXJzLCAyMCkg PSAxNSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ3ByZXZfbWVt YmVyIHBhc3QgYmVnaW5uaW5nJyBhcyB0ZXN0LCB0ZXN0X2Jtc19wcmV2X21lbWJlcihzZXRfbnVt YmVycywgNSkgPSAtMiBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1Qg J3ByZXZfbWVtYmVyIGVtcHR5IHNldCcgYXMgdGVzdCwgdGVzdF9ibXNfcHJldl9tZW1iZXIoTlVM TCwgMTAwKSA9IC0yIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0OworICAgICAgICAgICAgdGVzdCAg ICAgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LQorIG5leHRfbWVtYmVyIGZpcnN0ICAgICAgICAgIHwgdAorIG5leHRfbWVtYmVyIHNlY29uZCAg ICAgICAgIHwgdAorIG5leHRfbWVtYmVyIHBhc3QgZW5kICAgICAgIHwgdAorIG5leHRfbWVtYmVy IGVtcHR5IHNldCAgICAgIHwgdAorIHByZXZfbWVtYmVyIGxhc3QgICAgICAgICAgIHwgdAorIHBy ZXZfbWVtYmVyIHBlbnVsdGltYXRlICAgIHwgdAorIHByZXZfbWVtYmVyIHBhc3QgYmVnaW5uaW5n IHwgdAorIHByZXZfbWVtYmVyIGVtcHR5IHNldCAgICAgIHwgdAorKDggcm93cykKKworLS0gVGVz dCAxNTogSGFzaCBmdW5jdGlvbnMKK1dJVEggdGVzdF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0 ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNWEsCisJdGVzdF9ibXNf ZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNldF8xMzViLAorCXRlc3RfYm1zX2Zyb21fYXJy YXkoQVJSQVlbMiw0LDZdKSBBUyBzZXRfMjQ2CispCitTRUxFQ1QgJ2hhc2ggTlVMTCcgYXMgdGVz dCwgdGVzdF9ibXNfaGFzaF92YWx1ZShOVUxMKSA9IDAgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRz CitVTklPTiBBTEwKK1NFTEVDVCAnaGFzaCBjb25zaXN0ZW5jeScgYXMgdGVzdCwgdGVzdF9ibXNf aGFzaF92YWx1ZShzZXRfMTM1YSkgPSB0ZXN0X2Jtc19oYXNoX3ZhbHVlKHNldF8xMzViKSBhcyBy ZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdoYXNoIGRpZmZlcmVudCBz ZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19oYXNoX3ZhbHVlKHNldF8xMzVhKSAhPSB0ZXN0X2Jtc19o YXNoX3ZhbHVlKHNldF8yNDYpIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0czsKKyAgICAgICAgdGVz dCAgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgaGFz aCBOVUxMICAgICAgICAgICB8IHQKKyBoYXNoIGNvbnNpc3RlbmN5ICAgIHwgdAorIGhhc2ggZGlm ZmVyZW50IHNldHMgfCB0CisoMyByb3dzKQorCistLSBUZXN0IDE2OiBTZXQgb3ZlcmxhcAorV0lU SCB0ZXN0X3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlb MSwzLDVdKSBBUyBzZXRfMTM1LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMyw1LDddKSBB UyBzZXRfMzU3LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDZdKSBBUyBzZXRfMjQ2 CispCitTRUxFQ1QgJ292ZXJsYXAgZXhpc3RpbmcnIGFzIHRlc3QsIHRlc3RfYm1zX292ZXJsYXAo c2V0XzEzNSwgc2V0XzM1NykgPSB0cnVlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04g QUxMCitTRUxFQ1QgJ292ZXJsYXAgbm9uZScgYXMgdGVzdCwgdGVzdF9ibXNfb3ZlcmxhcChzZXRf MTM1LCBzZXRfMjQ2KSA9IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxM CitTRUxFQ1QgJ292ZXJsYXAgd2l0aCBOVUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19vdmVybGFwKE5V TEwsIHNldF8xMzUpID0gZmFsc2UgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzOworICAgICAgIHRl c3QgICAgICAgIHwgcmVzdWx0IAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIG92ZXJs YXAgZXhpc3RpbmcgIHwgdAorIG92ZXJsYXAgbm9uZSAgICAgIHwgdAorIG92ZXJsYXAgd2l0aCBO VUxMIHwgdAorKDMgcm93cykKKworLS0gVGVzdCAxNzogU3Vic2V0IHJlbGF0aW9ucworV0lUSCB0 ZXN0X3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwz XSkgQVMgc2V0XzEzLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRf MTM1LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0XSkgQVMgc2V0XzI0CispCitTRUxF Q1QgJ3N1YnNldCBOVUxMIGlzIHN1YnNldCBvZiBhbGwnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX3N1 YnNldChOVUxMLCBzZXRfMTM1KSA9IHRydWUgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklP TiBBTEwKK1NFTEVDVCAnc3Vic2V0IHByb3BlciBzdWJzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2lz X3N1YnNldChzZXRfMTMsIHNldF8xMzUpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMK K1VOSU9OIEFMTAorU0VMRUNUICdzdWJzZXQgaW1wcm9wZXIgc3Vic2V0JyBhcyB0ZXN0LCB0ZXN0 X2Jtc19pc19zdWJzZXQoc2V0XzEzNSwgc2V0XzEzKSA9IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRl c3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ3N1YnNldCBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0 LCB0ZXN0X2Jtc19pc19zdWJzZXQoc2V0XzEzLCBzZXRfMjQpID0gZmFsc2UgYXMgcmVzdWx0IEZS T00gdGVzdF9zZXRzOworICAgICAgICAgICAgIHRlc3QgICAgICAgICAgICAgfCByZXN1bHQgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBzdWJzZXQgTlVMTCBpcyBz dWJzZXQgb2YgYWxsIHwgdAorIHN1YnNldCBwcm9wZXIgc3Vic2V0ICAgICAgICAgfCB0Cisgc3Vi c2V0IGltcHJvcGVyIHN1YnNldCAgICAgICB8IHQKKyBzdWJzZXQgZGlzam9pbnQgc2V0cyAgICAg ICAgIHwgdAorKDQgcm93cykKKworLS0gVGVzdCAxODogQ29weSBvcGVyYXRpb25zCitXSVRIIHRl c3Rfc2V0IEFTIChTRUxFQ1QgdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNSw3XSkgQVMg b3JpZ2luYWwpCitTRUxFQ1QgJ2NvcHkgTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfY29weShOVUxM KSBJUyBOVUxMIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAnY29w eSBlcXVhbGl0eScgYXMgdGVzdCwgdGVzdF9ibXNfZXF1YWwob3JpZ2luYWwsIHRlc3RfYm1zX2Nv cHkob3JpZ2luYWwpKSA9IHRydWUgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQ7CisgICAgIHRlc3Qg ICAgICB8IHJlc3VsdCAKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGNvcHkgTlVMTCAgICAg fCB0CisgY29weSBlcXVhbGl0eSB8IHQKKygyIHJvd3MpCisKKy0tIFRlc3QgMTk6IEFkZCBtZW1i ZXJzIG9wZXJhdGlvbgorV0lUSCBiYXNlX3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3RfYm1z X2Zyb21fYXJyYXkoQVJSQVlbMSwzXSkgQVMgc2V0XzEzLAorCXRlc3RfYm1zX2Zyb21fYXJyYXko QVJSQVlbNSw3XSkgQVMgc2V0XzU3CispCitTRUxFQ1QgJ2FkZF9tZW1iZXJzIG9wZXJhdGlvbicg YXMgdGVzdCwKKyAgICAgICB0ZXN0X2Jtc190b19hcnJheSh0ZXN0X2Jtc19hZGRfbWVtYmVycyhz ZXRfMTMsIHNldF81NykpID0gQVJSQVlbMSwzLDUsN10gYXMgcmVzdWx0CitGUk9NIGJhc2Vfc2V0 czsKKyAgICAgICAgIHRlc3QgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLQorIGFkZF9tZW1iZXJzIG9wZXJhdGlvbiB8IHQKKygxIHJvdykKKworLS0g VGVzdCAyMDogVGVzdCBoYXNoIGNvbnNpc3RlbmN5CitXSVRIIHRlc3Rfc2V0cyBBUyAoCisgICAg U0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNldF8xMzVfYSwK Kwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9iLAorCXRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDZdKSBBUyBzZXRfMjQ2CispCitTRUxFQ1QgJ2JpdG1h cF9oYXNoIE5VTEwnIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaChOVUxMKSA9IDAg YXMgcmVzdWx0CitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX2hhc2ggY29uc2lzdGVuY3knIGFz IHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaChzZXRfMTM1X2EpID0gdGVzdF9iaXRtYXBf aGFzaChzZXRfMTM1X2IpIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VM RUNUICdiaXRtYXBfaGFzaCB2cyBibXNfaGFzaF92YWx1ZScgYXMgdGVzdCwKKyAgICAgICB0ZXN0 X2JpdG1hcF9oYXNoKHNldF8xMzVfYSkgPSB0ZXN0X2Jtc19oYXNoX3ZhbHVlKHNldF8xMzVfYSkg YXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9oYXNo IGRpZmZlcmVudCBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX2hhc2goc2V0XzEz NV9hKSAhPSB0ZXN0X2JpdG1hcF9oYXNoKHNldF8yNDYpIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3Nl dHM7CisgICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tCisgYml0bWFwX2hhc2ggTlVMTCAgICAgICAg ICAgICAgfCB0CisgYml0bWFwX2hhc2ggY29uc2lzdGVuY3kgICAgICAgfCB0CisgYml0bWFwX2hh c2ggdnMgYm1zX2hhc2hfdmFsdWUgfCB0CisgYml0bWFwX2hhc2ggZGlmZmVyZW50IHNldHMgICAg fCB0CisoNCByb3dzKQorCistLSBBcmNoaXRlY3R1cmUtYXdhcmUgaGFzaCB0ZXN0aW5nCitXSVRI IGFyY2hfaW5mbyBBUyAoCisgICAgU0VMRUNUCisgICAgICAgIENBU0UKKyAgICAgICAgICAgIFdI RU4gcGdfY29sdW1uX3NpemUoMTo6YmlnaW50KSA9IDggVEhFTiAnNjRiaXQnCisgICAgICAgICAg ICBFTFNFICczMmJpdCcKKyAgICAgICAgRU5EIGFzIGFyY2hpdGVjdHVyZQorKSwKK2V4cGVjdGVk X3ZhbHVlcyBBUyAoCisgICAgU0VMRUNUCisgICAgICAgIGFyY2hpdGVjdHVyZSwKKyAgICAgICAg Q0FTRSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIFdIRU4gJzY0Yml0JyBUSEVOIDAKKyAgICAg ICAgICAgIFdIRU4gJzMyYml0JyBUSEVOIDAKKyAgICAgICAgRU5EIGFzIGhhc2hfbnVsbCwKKyAg ICAgICAgQ0FTRSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIFdIRU4gJzY0Yml0JyBUSEVOIDQ5 ODcwNzc4CisgICAgICAgICAgICBXSEVOICczMmJpdCcgVEhFTiAxNTA5NzUyNTIwCisgICAgICAg IEVORCBhcyBoYXNoXzEzNSwKKyAgICAgICAgQ0FTRSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAg IFdIRU4gJzY0Yml0JyBUSEVOIC0zMDM5MjE2MDYKKyAgICAgICAgICAgIFdIRU4gJzMyYml0JyBU SEVOIDAgIC0tIFRCRAorICAgICAgICBFTkQgYXMgaGFzaF8yNDYKKyAgICBGUk9NIGFyY2hfaW5m bworKQorU0VMRUNUICdleHBlY3RlZCBoYXNoIE5VTEwnIGFzIHRlc3QsCisgICAgICAgdGVzdF9i aXRtYXBfaGFzaChOVUxMKSA9IGhhc2hfbnVsbCBhcyByZXN1bHQKK0ZST00gZXhwZWN0ZWRfdmFs dWVzCitVTklPTiBBTEwKK1NFTEVDVCAnZXhwZWN0ZWQgaGFzaCBbMSwzLDVdJyBhcyB0ZXN0LAor ICAgICAgIHRlc3RfYml0bWFwX2hhc2godGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0p KSA9IGhhc2hfMTM1IGFzIHJlc3VsdAorRlJPTSBleHBlY3RlZF92YWx1ZXMKK1VOSU9OIEFMTAor U0VMRUNUICdleHBlY3RlZCBoYXNoIFsyLDQsNl0nIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRt YXBfaGFzaCh0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkpID0gaGFzaF8yNDYgYXMg cmVzdWx0CitGUk9NIGV4cGVjdGVkX3ZhbHVlczsKKyAgICAgICAgIHRlc3QgICAgICAgICAgfCBy ZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGV4cGVjdGVkIGhhc2gg TlVMTCAgICB8IHQKKyBleHBlY3RlZCBoYXNoIFsxLDMsNV0gfCB0CisgZXhwZWN0ZWQgaGFzaCBb Miw0LDZdIHwgdAorKDMgcm93cykKKworLS0gVGVzdCAyMTogYml0bWFwX21hdGNoIGZ1bmN0aW9u CitXSVRIIHRlc3Rfc2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShB UlJBWVsxLDMsNV0pIEFTIHNldF8xMzVfYSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEs Myw1XSkgQVMgc2V0XzEzNV9iLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDZdKSBB UyBzZXRfMjQ2LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzXSkgQVMgc2V0XzEzCisp CitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBOVUxMIE5VTEwgKHNob3VsZCBiZSAwKScgYXMgdGVzdCwK KyAgICAgICB0ZXN0X2JpdG1hcF9tYXRjaChOVUxMLCBOVUxMKSA9IDAgYXMgcmVzdWx0CitVTklP TiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIE5VTEwgc2V0IChzaG91bGQgYmUgMSknIGFzIHRl c3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2goTlVMTCwgc2V0XzEzNV9hKSA9IDEgYXMgcmVz dWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBzZXQg TlVMTCAoc2hvdWxkIGJlIDEpJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKHNl dF8xMzVfYSwgTlVMTCkgPSAxIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAor U0VMRUNUICdiaXRtYXBfbWF0Y2ggaWRlbnRpY2FsIHNldHMgKHNob3VsZCBiZSAwKScgYXMgdGVz dCwKKyAgICAgICB0ZXN0X2JpdG1hcF9tYXRjaChzZXRfMTM1X2EsIHNldF8xMzVfYikgPSAwIGFz IHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdiaXRtYXBfbWF0Y2gg ZGlmZmVyZW50IHNldHMgKHNob3VsZCBiZSAxKScgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1h cF9tYXRjaChzZXRfMTM1X2EsIHNldF8yNDYpID0gMSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRz CitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIHN1YnNldC9zdXBlcnNldCAoc2hvdWxk IGJlIDEpJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKHNldF8xMywgc2V0XzEz NV9hKSA9IDEgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0czsKKyAgICAgICAgICAgICAgICAgICAg dGVzdCAgICAgICAgICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLQorIGJpdG1hcF9tYXRjaCBOVUxMIE5VTEwg KHNob3VsZCBiZSAwKSAgICAgICB8IHQKKyBiaXRtYXBfbWF0Y2ggTlVMTCBzZXQgKHNob3VsZCBi ZSAxKSAgICAgICAgfCB0CisgYml0bWFwX21hdGNoIHNldCBOVUxMIChzaG91bGQgYmUgMSkgICAg ICAgIHwgdAorIGJpdG1hcF9tYXRjaCBpZGVudGljYWwgc2V0cyAoc2hvdWxkIGJlIDApICB8IHQK KyBiaXRtYXBfbWF0Y2ggZGlmZmVyZW50IHNldHMgKHNob3VsZCBiZSAxKSAgfCB0CisgYml0bWFw X21hdGNoIHN1YnNldC9zdXBlcnNldCAoc2hvdWxkIGJlIDEpIHwgdAorKDYgcm93cykKKworLS0g VGVzdCByZWxhdGlvbnNoaXAgd2l0aCBibXNfZXF1YWwKK1dJVEggdGVzdF9zZXRzIEFTICgKKyAg ICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEzNV9h LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2IsCisJdGVz dF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYKKykKK1NFTEVDVCAnYml0 bWFwX21hdGNoIHZzIGJtc19lcXVhbCAoZXF1YWwgc2V0cyknIGFzIHRlc3QsCisgICAgICAgKHRl c3RfYml0bWFwX21hdGNoKHNldF8xMzVfYSwgc2V0XzEzNV9iKSA9IDApID0gdGVzdF9ibXNfZXF1 YWwoc2V0XzEzNV9hLCBzZXRfMTM1X2IpIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9O IEFMTAorU0VMRUNUICdiaXRtYXBfbWF0Y2ggdnMgYm1zX2VxdWFsIChkaWZmZXJlbnQgc2V0cykn IGFzIHRlc3QsCisgICAgICAgKHRlc3RfYml0bWFwX21hdGNoKHNldF8xMzVfYSwgc2V0XzI0Nikg PSAwKSA9IHRlc3RfYm1zX2VxdWFsKHNldF8xMzVfYSwgc2V0XzI0NikgYXMgcmVzdWx0CitGUk9N IHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCB2cyBibXNfZXF1YWwg KE5VTEwgY2FzZXMpJyBhcyB0ZXN0LAorICAgICAgICh0ZXN0X2JpdG1hcF9tYXRjaChOVUxMLCBO VUxMKSA9IDApID0gdGVzdF9ibXNfZXF1YWwoTlVMTCwgTlVMTCkgYXMgcmVzdWx0CitGUk9NIHRl c3Rfc2V0czsKKyAgICAgICAgICAgICAgICAgICAgdGVzdCAgICAgICAgICAgICAgICAgICAgfCBy ZXN1bHQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLQorIGJpdG1hcF9tYXRjaCB2cyBibXNfZXF1YWwgKGVxdWFsIHNldHMpICAgICB8IHQKKyBi aXRtYXBfbWF0Y2ggdnMgYm1zX2VxdWFsIChkaWZmZXJlbnQgc2V0cykgfCB0CisgYml0bWFwX21h dGNoIHZzIGJtc19lcXVhbCAoTlVMTCBjYXNlcykgICAgIHwgdAorKDMgcm93cykKKworLS0gVGVz dCBzcGVjaWZpYyBtYXRjaCB2YWx1ZXMgZm9yIGRlYnVnZ2luZworU0VMRUNUICdiaXRtYXBfbWF0 Y2ggWzEsMyw1XSB2cyBbMSwzLDVdJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNo KHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSwgdGVzdF9ibXNfZnJvbV9hcnJheShB UlJBWVsxLDMsNV0pKSBhcyBtYXRjaF92YWx1ZTsKKyAgICAgICAgICAgICAgdGVzdCAgICAgICAg ICAgICAgIHwgbWF0Y2hfdmFsdWUgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLQorIGJpdG1hcF9tYXRjaCBbMSwzLDVdIHZzIFsxLDMsNV0gfCAgICAgICAg ICAgMAorKDEgcm93KQorCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBbMSwzLDVdIHZzIFsyLDQsNl0n IGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2godGVzdF9ibXNfZnJvbV9hcnJheShB UlJBWVsxLDMsNV0pLCB0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkpIGFzIG1hdGNo X3ZhbHVlOworICAgICAgICAgICAgICB0ZXN0ICAgICAgICAgICAgICAgfCBtYXRjaF92YWx1ZSAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYml0bWFw X21hdGNoIFsxLDMsNV0gdnMgWzIsNCw2XSB8ICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIFRl c3QgZWRnZSBjYXNlcworU0VMRUNUICdiaXRtYXBfbWF0Y2ggZW1wdHkgYXJyYXlzJyBhcyB0ZXN0 LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbXTo6 aW50ZWdlcltdKSwgdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVtdOjppbnRlZ2VyW10pKSA9IDAg YXMgcmVzdWx0OworICAgICAgICAgICB0ZXN0ICAgICAgICAgICAgfCByZXN1bHQgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyBiaXRtYXBfbWF0Y2ggZW1wdHkgYXJyYXlz IHwgdAorKDEgcm93KQorCistLSBUZXN0IDIyOiBSYW5kb20gb3BlcmF0aW9ucyBzdHJlc3MgdGVz dAorU0VMRUNUICdyYW5kb20gb3BlcmF0aW9ucycgYXMgdGVzdCwgdGVzdF9yYW5kb21fb3BlcmF0 aW9ucygxMjM0NSwgMTAwMCkgPiAwIGFzIHJlc3VsdDsKKyAgICAgICB0ZXN0ICAgICAgICB8IHJl c3VsdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyByYW5kb20gb3BlcmF0aW9ucyB8 IHQKKygxIHJvdykKKworLS0gRVJST1IgQ09ORElUSU9OIFRFU1RTCistLSBUZXN0IDIzOiBFcnJv ciBjb25kaXRpb25zICh0aGVzZSBzaG91bGQgcHJvZHVjZSBFUlJPUnMpCistLSBOZWdhdGl2ZSBt ZW1iZXIgdGVzdHMKK1NFTEVDVCB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigtMSk7CitFUlJPUjog IG5lZ2F0aXZlIGJpdG1hcHNldCBtZW1iZXIgbm90IGFsbG93ZWQKK1NFTEVDVCB0ZXN0X2Jtc19p c19tZW1iZXIoTlVMTCwgLTUpOworRVJST1I6ICBuZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVyIG5v dCBhbGxvd2VkCitTRUxFQ1QgdGVzdF9ibXNfYWRkX21lbWJlcihOVUxMLCAtMTApOworRVJST1I6 ICBuZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVyIG5vdCBhbGxvd2VkCitTRUxFQ1QgdGVzdF9ibXNf ZGVsX21lbWJlcihOVUxMLCAtMjApOworRVJST1I6ICBuZWdhdGl2ZSBiaXRtYXBzZXQgbWVtYmVy IG5vdCBhbGxvd2VkCitTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKE5VTEwsIC01LCAxMCk7CitF UlJPUjogIG5lZ2F0aXZlIGJpdG1hcHNldCBtZW1iZXIgbm90IGFsbG93ZWQKKy0tIFNpbmdsZXRv biBtZW1iZXIgZXJyb3JzCitTRUxFQ1QgdGVzdF9ibXNfc2luZ2xldG9uX21lbWJlcih0ZXN0X2Jt c19mcm9tX2FycmF5KEFSUkFZWzEsMl0pKTsKK0VSUk9SOiAgYml0bWFwc2V0IGhhcyBtdWx0aXBs ZSBtZW1iZXJzCitEUk9QIEVYVEVOU0lPTiB0ZXN0X2JpdG1hcHNldDsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYml0bWFwc2V0L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi44NDhmN2E0NGViOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9iaXRtYXBzZXQvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KwordGVzdF9iaXRtYXBzZXRfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9iaXRtYXBzZXQuYycs CispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2JpdG1hcHNldF9zb3Vy Y2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAg ICctLU5BTUUnLCAndGVzdF9iaXRtYXBzZXQnLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfYml0 bWFwc2V0IC0gdGVzdCBjb2RlIGZvciBzcmMvaW5jbHVkZS9ub2Rlcy9iaXRtYXBzZXQuaCcsXSkK K2VuZGlmCisKK3Rlc3RfYml0bWFwc2V0ID0gc2hhcmVkX21vZHVsZSgndGVzdF9iaXRtYXBzZXQn LAorICB0ZXN0X2JpdG1hcHNldF9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rlc3RfbW9kX2FyZ3Ms CispCit0ZXN0X2luc3RhbGxfbGlicyArPSB0ZXN0X2JpdG1hcHNldAorCit0ZXN0X2luc3RhbGxf ZGF0YSArPSBmaWxlcygKKyAgJ3Rlc3RfYml0bWFwc2V0LmNvbnRyb2wnLAorICAndGVzdF9iaXRt YXBzZXQtLTEuMC5zcWwnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3Rlc3RfYml0bWFw c2V0JywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29u LmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAg ICAndGVzdF9iaXRtYXBzZXQnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5zcWwgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3NxbC90ZXN0X2JpdG1hcHNldC5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYwM2VmYjBlMjU1Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQu c3FsCkBAIC0wLDAgKzEsMzcyIEBACitDUkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElTVFMgdGVz dF9iaXRtYXBzZXQ7CisKKy0tIEJBU0lDIEZVTkNUSU9OQUxJVFkgVEVTVFMKKworLS0gVGVzdCBi bXNfdmFsdWVzIGZ1bmN0aW9uCisKK1NFTEVDVCAndmFsdWVzIE5VTEwnIGFzIHRlc3QsIGJtc192 YWx1ZXMoTlVMTCkgYXMgcmVzdWx0OworU0VMRUNUICd2YWx1ZXMgZW1wdHknIGFzIHRlc3QsIGJt c192YWx1ZXModGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVtdOjppbnRlZ2VyW10pKSBhcyByZXN1 bHQ7CitTRUxFQ1QgJ3ZhbHVlcyBzaW5nbGV0b24nIGFzIHRlc3QsIGJtc192YWx1ZXModGVzdF9i bXNfbWFrZV9zaW5nbGV0b24oNDIpKSBhcyByZXN1bHQ7CitTRUxFQ1QgJ3ZhbHVlcyBzbWFsbCBz ZXQnIGFzIHRlc3QsIGJtc192YWx1ZXModGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0p KSBhcyByZXN1bHQ7CitTRUxFQ1QgJ3ZhbHVlcyBsYXJnZXIgc2V0JyBhcyB0ZXN0LCBibXNfdmFs dWVzKHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMCw1LDEwLDE1LDIwXSkpIGFzIHJlc3VsdDsK K1NFTEVDVCAndmFsdWVzIHVuc29ydGVkIGlucHV0JyBhcyB0ZXN0LCBibXNfdmFsdWVzKHRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMjAsNSwxNSwwLDEwXSkpIGFzIHJlc3VsdDsKKworLS0gVGVz dCAxOiBCYXNpYyB1dGlsaXR5IGZ1bmN0aW9ucworU0VMRUNUICdOVUxMIGlucHV0IHRvIGZyb21f YXJyYXknIGFzIHRlc3QsIHRlc3RfYm1zX2Zyb21fYXJyYXkoTlVMTCkgSVMgTlVMTCBhcyByZXN1 bHQ7CitTRUxFQ1QgJ0VtcHR5IGFycmF5IHRvIGZyb21fYXJyYXknIGFzIHRlc3QsIHRlc3RfYm1z X2Zyb21fYXJyYXkoQVJSQVlbXTo6aW50ZWdlcltdKSBJUyBOVUxMIGFzIHJlc3VsdDsKK1NFTEVD VCAnTlVMTCBpbnB1dCB0byB0b19hcnJheScgYXMgdGVzdCwgdGVzdF9ibXNfdG9fYXJyYXkoTlVM TCkgSVMgTlVMTCBhcyByZXN1bHQ7CisKKy0tIFRlc3QgMjogU2luZ2xldG9uIG9wZXJhdGlvbnMK K1NFTEVDVCAnbWFrZV9zaW5nbGV0b24oNDIpJyBhcyB0ZXN0LCB0ZXN0X2Jtc190b19hcnJheSh0 ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbig0MikpID0gQVJSQVlbNDJdIGFzIHJlc3VsdDsKK1NFTEVD VCAnbWFrZV9zaW5nbGV0b24oMCknIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1z X21ha2Vfc2luZ2xldG9uKDApKSA9IEFSUkFZWzBdIGFzIHJlc3VsdDsKK1NFTEVDVCAnbWFrZV9z aW5nbGV0b24oMTAwMCknIGFzIHRlc3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX21ha2Vf c2luZ2xldG9uKDEwMDApKSA9IEFSUkFZWzEwMDBdIGFzIHJlc3VsdDsKKworLS0gVGVzdCAzOiBB ZGQgbWVtYmVyIG9wZXJhdGlvbnMKK1NFTEVDVCAnYWRkX21lbWJlcihOVUxMLCAxMCknIGFzIHRl c3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2FkZF9tZW1iZXIoTlVMTCwgMTApKSA9IEFS UkFZWzEwXSBhcyByZXN1bHQ7CitTRUxFQ1QgJ2FkZF9tZW1iZXIgY29uc2lzdGVuY3knIGFzIHRl c3QsIGJtc192YWx1ZXModGVzdF9ibXNfYWRkX21lbWJlcihOVUxMLCAxMCkpIGFzIHZhbHVlczsK K1NFTEVDVCAnYWRkX21lbWJlciB0byBleGlzdGluZycgYXMgdGVzdCwgdGVzdF9ibXNfdG9fYXJy YXkodGVzdF9ibXNfYWRkX21lbWJlcih0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbig1KSwgMTApKSA9 IEFSUkFZWzUsMTBdIGFzIHJlc3VsdDsKK1NFTEVDVCAnYWRkX21lbWJlciBzb3J0ZWQnIGFzIHRl c3QsIHRlc3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2FkZF9tZW1iZXIodGVzdF9ibXNfbWFrZV9z aW5nbGV0b24oMTApLCA1KSkgPSBBUlJBWVs1LDEwXSBhcyByZXN1bHQ7CitTRUxFQ1QgJ2FkZF9t ZW1iZXIgaWRlbXBvdGVudCcgYXMgdGVzdCwgYm1zX3ZhbHVlcyh0ZXN0X2Jtc19hZGRfbWVtYmVy KHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKDEwKSwgMTApKSBhcyB2YWx1ZXM7CisKKworLS0gVGVz dCA0OiBEZWxldGUgbWVtYmVyIG9wZXJhdGlvbnMKK1NFTEVDVCAnZGVsX21lbWJlciBmcm9tIE5V TEwnIGFzIHRlc3QsIHRlc3RfYm1zX2RlbF9tZW1iZXIoTlVMTCwgMTApIElTIE5VTEwgYXMgcmVz dWx0OworU0VMRUNUICdkZWxfbWVtYmVyIHNpbmdsZXRvbiBiZWNvbWVzIGVtcHR5JyBhcyB0ZXN0 LCB0ZXN0X2Jtc19kZWxfbWVtYmVyKHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKDEwKSwgMTApIElT IE5VTEwgYXMgcmVzdWx0OworU0VMRUNUICdkZWxfbWVtYmVyIG5vIGNoYW5nZScgYXMgdGVzdCwg Ym1zX3ZhbHVlcyh0ZXN0X2Jtc19kZWxfbWVtYmVyKHRlc3RfYm1zX21ha2Vfc2luZ2xldG9uKDEw KSwgNSkpIGFzIHZhbHVlczsKK1NFTEVDVCAnZGVsX21lbWJlciBmcm9tIG1pZGRsZScgYXMgdGVz dCwgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfZGVsX21lbWJlcih0ZXN0X2Jtc19mcm9tX2Fy cmF5KEFSUkFZWzEsMiwzXSksIDIpKSA9IEFSUkFZWzEsM10gYXMgcmVzdWx0OworCistLSBTRVQg T1BFUkFUSU9OUyBURVNUUworCistLSBUZXN0IDU6IFVuaW9uIG9wZXJhdGlvbnMKK1dJVEggdGVz dF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1 XSkgQVMgc2V0XzEzNSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzMsNSw3XSkgQVMgc2V0 XzM1NywKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQor U0VMRUNUICd1bmlvbiBvdmVybGFwcGluZyBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1z X3RvX2FycmF5KHRlc3RfYm1zX3VuaW9uKHNldF8xMzUsIHNldF8zNTcpKSA9IEFSUkFZWzEsMyw1 LDddIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICd1bmlvbiB3 aXRoIE5VTEwnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfdW5p b24oc2V0XzEzNSwgTlVMTCkpID0gQVJSQVlbMSwzLDVdIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3Nl dHMKK1VOSU9OIEFMTAorU0VMRUNUICd1bmlvbiBOVUxMIHdpdGggTlVMTCcgYXMgdGVzdCwKKyAg ICAgICB0ZXN0X2Jtc191bmlvbihOVUxMLCBOVUxMKSBJUyBOVUxMIGFzIHJlc3VsdAorRlJPTSB0 ZXN0X3NldHM7CisKKy0tIFRlc3QgNjogSW50ZXJzZWN0aW9uIG9wZXJhdGlvbnMKK1dJVEggdGVz dF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1 XSkgQVMgc2V0XzEzNSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzMsNSw3XSkgQVMgc2V0 XzM1NywKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQor U0VMRUNUICdpbnRlcnNlY3Qgb3ZlcmxhcHBpbmcgc2V0cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0 X2Jtc190b19hcnJheSh0ZXN0X2Jtc19pbnRlcnNlY3Qoc2V0XzEzNSwgc2V0XzM1NykpID0gQVJS QVlbMyw1XSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnaW50 ZXJzZWN0IGRpc2pvaW50IHNldHMnIGFzIHRlc3QsCisgICAgICAgdGVzdF9ibXNfaW50ZXJzZWN0 KHNldF8xMzUsIHNldF8yNDYpIElTIE5VTEwgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5J T04gQUxMCitTRUxFQ1QgJ2ludGVyc2VjdCB3aXRoIE5VTEwnIGFzIHRlc3QsCisgICAgICAgdGVz dF9ibXNfaW50ZXJzZWN0KHNldF8xMzUsIE5VTEwpIElTIE5VTEwgYXMgcmVzdWx0CitGUk9NIHRl c3Rfc2V0czsKKworLS0gVGVzdCA3OiBEaWZmZXJlbmNlIG9wZXJhdGlvbnMKK1dJVEggdGVzdF9z ZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkg QVMgc2V0XzEzNSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzMsNSw3XSkgQVMgc2V0XzM1 NywKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQorU0VM RUNUICdkaWZmZXJlbmNlIG92ZXJsYXBwaW5nIHNldHMnIGFzIHRlc3QsCisgICAgICAgdGVzdF9i bXNfdG9fYXJyYXkodGVzdF9ibXNfZGlmZmVyZW5jZShzZXRfMTM1LCBzZXRfMzU3KSkgPSBBUlJB WVsxXSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnZGlmZmVy ZW5jZSBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX3RvX2FycmF5KHRl c3RfYm1zX2RpZmZlcmVuY2Uoc2V0XzEzNSwgc2V0XzI0NikpID0gQVJSQVlbMSwzLDVdIGFzIHJl c3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdkaWZmZXJlbmNlIGlkZW50 aWNhbCBzZXRzJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1zX2RpZmZlcmVuY2Uoc2V0XzEzNSwg c2V0XzEzNSkgSVMgTlVMTCBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzOworCistLSBNRU1CRVJT SElQIEFORCBDT01QQVJJU09OIFRFU1RTCisKKy0tIFRlc3QgODogTWVtYmVyc2hpcCB0ZXN0cwor V0lUSCB0ZXN0X3NldCBBUyAoU0VMRUNUIHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVd KSBBUyBzZXRfMTM1KQorU0VMRUNUICdpc19tZW1iZXIgZXhpc3RpbmcnIGFzIHRlc3QsIHRlc3Rf Ym1zX2lzX21lbWJlcihzZXRfMTM1LCAxKSA9IHRydWUgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQK K1VOSU9OIEFMTAorU0VMRUNUICdpc19tZW1iZXIgbWlzc2luZycgYXMgdGVzdCwgdGVzdF9ibXNf aXNfbWVtYmVyKHNldF8xMzUsIDIpID0gZmFsc2UgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQKK1VO SU9OIEFMTAorU0VMRUNUICdpc19tZW1iZXIgZXhpc3RpbmcgbWlkZGxlJyBhcyB0ZXN0LCB0ZXN0 X2Jtc19pc19tZW1iZXIoc2V0XzEzNSwgMykgPSB0cnVlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0 CitVTklPTiBBTEwKK1NFTEVDVCAnaXNfbWVtYmVyIE5VTEwgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jt c19pc19tZW1iZXIoTlVMTCwgMSkgPSBmYWxzZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldDsKKwor LS0gVGVzdCA5OiBTZXQgY2FyZGluYWxpdHkKK1NFTEVDVCAnbnVtX21lbWJlcnMgTlVMTCcgYXMg dGVzdCwgdGVzdF9ibXNfbnVtX21lbWJlcnMoTlVMTCkgPSAwIGFzIHJlc3VsdDsKK1NFTEVDVCAn bnVtX21lbWJlcnMgc21hbGwgc2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19udW1fbWVtYmVycyh0ZXN0 X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkpID0gMyBhcyByZXN1bHQ7CitTRUxFQ1QgJ251 bV9tZW1iZXJzIGxhcmdlciBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX251bV9tZW1iZXJzKHRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDYsOCwxMF0pKSA9IDUgYXMgcmVzdWx0OworCistLSBU ZXN0IDEwOiBTZXQgZXF1YWxpdHkgYW5kIGNvbXBhcmlzb24KK1dJVEggdGVzdF9zZXRzIEFTICgK KyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkgQVMgc2V0XzEz NV9hLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2IsCisJ dGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYsCisJdGVzdF9ibXNf ZnJvbV9hcnJheShBUlJBWVsxLDNdKSBBUyBzZXRfMTMKKykKK1NFTEVDVCAnZXF1YWwgTlVMTCBO VUxMJyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChOVUxMLCBOVUxMKSA9IHRydWUgYXMgcmVzdWx0 IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnZXF1YWwgTlVMTCBzZXQnIGFzIHRl c3QsIHRlc3RfYm1zX2VxdWFsKE5VTEwsIHNldF8xMzVfYSkgPSBmYWxzZSBhcyByZXN1bHQgRlJP TSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdlcXVhbCBzZXQgTlVMTCcgYXMgdGVzdCwg dGVzdF9ibXNfZXF1YWwoc2V0XzEzNV9hLCBOVUxMKSA9IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRl c3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2VxdWFsIGlkZW50aWNhbCBzZXRzJyBhcyB0ZXN0 LCB0ZXN0X2Jtc19lcXVhbChzZXRfMTM1X2EsIHNldF8xMzVfYikgPSB0cnVlIGFzIHJlc3VsdCBG Uk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2VxdWFsIGRpZmZlcmVudCBzZXRzJyBh cyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChzZXRfMTM1X2EsIHNldF8yNDYpID0gZmFsc2UgYXMgcmVz dWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBOVUxMIE5VTEwn IGFzIHRlc3QsIHRlc3RfYm1zX2NvbXBhcmUoTlVMTCwgTlVMTCkgPSAwIGFzIHJlc3VsdCBGUk9N IHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgTlVMTCBzZXQnIGFzIHRlc3Qs IHRlc3RfYm1zX2NvbXBhcmUoTlVMTCwgc2V0XzEzKSA9IC0xIGFzIHJlc3VsdCBGUk9NIHRlc3Rf c2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2NvbXBhcmUgc2V0IE5VTEwnIGFzIHRlc3QsIHRlc3Rf Ym1zX2NvbXBhcmUoc2V0XzEzLCBOVUxMKSA9IDEgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitV TklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBlcXVhbCBzZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19j b21wYXJlKHNldF8xMywgc2V0XzEzKSA9IDAgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklP TiBBTEwKK1NFTEVDVCAnY29tcGFyZSBzdWJzZXQgc3VwZXJzZXQnIGFzIHRlc3QsIHRlc3RfYm1z X2NvbXBhcmUoc2V0XzEzLCBzZXRfMTM1X2EpID0gLTEgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRz CitVTklPTiBBTEwKK1NFTEVDVCAnY29tcGFyZSBzdXBlcnNldCBzdWJzZXQnIGFzIHRlc3QsIHRl c3RfYm1zX2NvbXBhcmUoc2V0XzEzNV9hLCBzZXRfMTMpID0gMSBhcyByZXN1bHQgRlJPTSB0ZXN0 X3NldHM7CisKKy0tIEFEVkFOQ0VEIE9QRVJBVElPTlMgVEVTVFMKKworLS0gVGVzdCAxMTogUmFu Z2Ugb3BlcmF0aW9ucworU0VMRUNUICdhZGRfcmFuZ2UgYmFzaWMnIGFzIHRlc3QsIHRlc3RfYm1z X3RvX2FycmF5KHRlc3RfYm1zX2FkZF9yYW5nZShOVUxMLCA1LCA3KSkgPSBBUlJBWVs1LDYsN10g YXMgcmVzdWx0OworU0VMRUNUICdhZGRfcmFuZ2Ugc2luZ2xlIGVsZW1lbnQnIGFzIHRlc3QsIHRl c3RfYm1zX3RvX2FycmF5KHRlc3RfYm1zX2FkZF9yYW5nZShOVUxMLCA1LCA1KSkgPSBBUlJBWVs1 XSBhcyByZXN1bHQ7CitTRUxFQ1QgJ2FkZF9yYW5nZSB0byBleGlzdGluZycgYXMgdGVzdCwgdGVz dF9ibXNfdG9fYXJyYXkodGVzdF9ibXNfYWRkX3JhbmdlKHRlc3RfYm1zX2Zyb21fYXJyYXkoQVJS QVlbMSwxMF0pLCA1LCA3KSkgPSBBUlJBWVsxLDUsNiw3LDEwXSBhcyByZXN1bHQ7CisKKy0tIFRl c3QgMTI6IE1lbWJlcnNoaXAgdHlwZXMKK1NFTEVDVCAnbWVtYmVyc2hpcCBlbXB0eScgYXMgdGVz dCwgdGVzdF9ibXNfbWVtYmVyc2hpcChOVUxMKSA9IDAgYXMgcmVzdWx0OworU0VMRUNUICdtZW1i ZXJzaGlwIHNpbmdsZXRvbicgYXMgdGVzdCwgdGVzdF9ibXNfbWVtYmVyc2hpcCh0ZXN0X2Jtc19m cm9tX2FycmF5KEFSUkFZWzQyXSkpID0gMSBhcyByZXN1bHQ7CitTRUxFQ1QgJ21lbWJlcnNoaXAg bXVsdGlwbGUnIGFzIHRlc3QsIHRlc3RfYm1zX21lbWJlcnNoaXAodGVzdF9ibXNfZnJvbV9hcnJh eShBUlJBWVsxLDIsM10pKSA9IDIgYXMgcmVzdWx0OworCistLSBUZXN0IDEzOiBTaW5nbGV0b24g bWVtYmVyIGV4dHJhY3Rpb24KK1NFTEVDVCAnc2luZ2xldG9uX21lbWJlciB2YWxpZCcgYXMgdGVz dCwgdGVzdF9ibXNfc2luZ2xldG9uX21lbWJlcih0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzQy XSkpID0gNDIgYXMgcmVzdWx0OworCistLSBUZXN0IDE0OiBTZXQgaXRlcmF0aW9uCitXSVRIIHRl c3Rfc2V0IEFTIChTRUxFQ1QgdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVs1LDEwLDE1LDIwXSkg QVMgc2V0X251bWJlcnMpCitTRUxFQ1QgJ25leHRfbWVtYmVyIGZpcnN0JyBhcyB0ZXN0LCB0ZXN0 X2Jtc19uZXh0X21lbWJlcihzZXRfbnVtYmVycywgLTEpID0gNSBhcyByZXN1bHQgRlJPTSB0ZXN0 X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ25leHRfbWVtYmVyIHNlY29uZCcgYXMgdGVzdCwgdGVz dF9ibXNfbmV4dF9tZW1iZXIoc2V0X251bWJlcnMsIDUpID0gMTAgYXMgcmVzdWx0IEZST00gdGVz dF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICduZXh0X21lbWJlciBwYXN0IGVuZCcgYXMgdGVzdCwg dGVzdF9ibXNfbmV4dF9tZW1iZXIoc2V0X251bWJlcnMsIDIwKSA9IC0yIGFzIHJlc3VsdCBGUk9N IHRlc3Rfc2V0CitVTklPTiBBTEwKK1NFTEVDVCAnbmV4dF9tZW1iZXIgZW1wdHkgc2V0JyBhcyB0 ZXN0LCB0ZXN0X2Jtc19uZXh0X21lbWJlcihOVUxMLCAtMSkgPSAtMiBhcyByZXN1bHQgRlJPTSB0 ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ3ByZXZfbWVtYmVyIGxhc3QnIGFzIHRlc3QsIHRl c3RfYm1zX3ByZXZfbWVtYmVyKHNldF9udW1iZXJzLCAyMSkgPSAyMCBhcyByZXN1bHQgRlJPTSB0 ZXN0X3NldAorVU5JT04gQUxMCitTRUxFQ1QgJ3ByZXZfbWVtYmVyIHBlbnVsdGltYXRlJyBhcyB0 ZXN0LCB0ZXN0X2Jtc19wcmV2X21lbWJlcihzZXRfbnVtYmVycywgMjApID0gMTUgYXMgcmVzdWx0 IEZST00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICdwcmV2X21lbWJlciBwYXN0IGJlZ2lu bmluZycgYXMgdGVzdCwgdGVzdF9ibXNfcHJldl9tZW1iZXIoc2V0X251bWJlcnMsIDUpID0gLTIg YXMgcmVzdWx0IEZST00gdGVzdF9zZXQKK1VOSU9OIEFMTAorU0VMRUNUICdwcmV2X21lbWJlciBl bXB0eSBzZXQnIGFzIHRlc3QsIHRlc3RfYm1zX3ByZXZfbWVtYmVyKE5VTEwsIDEwMCkgPSAtMiBh cyByZXN1bHQgRlJPTSB0ZXN0X3NldDsKKworLS0gVGVzdCAxNTogSGFzaCBmdW5jdGlvbnMKK1dJ VEggdGVzdF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZ WzEsMyw1XSkgQVMgc2V0XzEzNWEsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0p IEFTIHNldF8xMzViLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMiw0LDZdKSBBUyBzZXRf MjQ2CispCitTRUxFQ1QgJ2hhc2ggTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfaGFzaF92YWx1ZShO VUxMKSA9IDAgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnaGFz aCBjb25zaXN0ZW5jeScgYXMgdGVzdCwgdGVzdF9ibXNfaGFzaF92YWx1ZShzZXRfMTM1YSkgPSB0 ZXN0X2Jtc19oYXNoX3ZhbHVlKHNldF8xMzViKSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VO SU9OIEFMTAorU0VMRUNUICdoYXNoIGRpZmZlcmVudCBzZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19o YXNoX3ZhbHVlKHNldF8xMzVhKSAhPSB0ZXN0X2Jtc19oYXNoX3ZhbHVlKHNldF8yNDYpIGFzIHJl c3VsdCBGUk9NIHRlc3Rfc2V0czsKKworLS0gVGVzdCAxNjogU2V0IG92ZXJsYXAKK1dJVEggdGVz dF9zZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1 XSkgQVMgc2V0XzEzNSwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzMsNSw3XSkgQVMgc2V0 XzM1NywKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQor U0VMRUNUICdvdmVybGFwIGV4aXN0aW5nJyBhcyB0ZXN0LCB0ZXN0X2Jtc19vdmVybGFwKHNldF8x MzUsIHNldF8zNTcpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAor U0VMRUNUICdvdmVybGFwIG5vbmUnIGFzIHRlc3QsIHRlc3RfYm1zX292ZXJsYXAoc2V0XzEzNSwg c2V0XzI0NikgPSBmYWxzZSBhcyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VM RUNUICdvdmVybGFwIHdpdGggTlVMTCcgYXMgdGVzdCwgdGVzdF9ibXNfb3ZlcmxhcChOVUxMLCBz ZXRfMTM1KSA9IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0czsKKworLS0gVGVzdCAxNzog U3Vic2V0IHJlbGF0aW9ucworV0lUSCB0ZXN0X3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzXSkgQVMgc2V0XzEzLAorCXRlc3RfYm1zX2Zyb21fYXJy YXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1LAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlb Miw0XSkgQVMgc2V0XzI0CispCitTRUxFQ1QgJ3N1YnNldCBOVUxMIGlzIHN1YnNldCBvZiBhbGwn IGFzIHRlc3QsIHRlc3RfYm1zX2lzX3N1YnNldChOVUxMLCBzZXRfMTM1KSA9IHRydWUgYXMgcmVz dWx0IEZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnc3Vic2V0IHByb3BlciBzdWJz ZXQnIGFzIHRlc3QsIHRlc3RfYm1zX2lzX3N1YnNldChzZXRfMTMsIHNldF8xMzUpID0gdHJ1ZSBh cyByZXN1bHQgRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdzdWJzZXQgaW1wcm9w ZXIgc3Vic2V0JyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19zdWJzZXQoc2V0XzEzNSwgc2V0XzEzKSA9 IGZhbHNlIGFzIHJlc3VsdCBGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ3N1YnNl dCBkaXNqb2ludCBzZXRzJyBhcyB0ZXN0LCB0ZXN0X2Jtc19pc19zdWJzZXQoc2V0XzEzLCBzZXRf MjQpID0gZmFsc2UgYXMgcmVzdWx0IEZST00gdGVzdF9zZXRzOworCistLSBUZXN0IDE4OiBDb3B5 IG9wZXJhdGlvbnMKK1dJVEggdGVzdF9zZXQgQVMgKFNFTEVDVCB0ZXN0X2Jtc19mcm9tX2FycmF5 KEFSUkFZWzEsMyw1LDddKSBBUyBvcmlnaW5hbCkKK1NFTEVDVCAnY29weSBOVUxMJyBhcyB0ZXN0 LCB0ZXN0X2Jtc19jb3B5KE5VTEwpIElTIE5VTEwgYXMgcmVzdWx0IEZST00gdGVzdF9zZXQKK1VO SU9OIEFMTAorU0VMRUNUICdjb3B5IGVxdWFsaXR5JyBhcyB0ZXN0LCB0ZXN0X2Jtc19lcXVhbChv cmlnaW5hbCwgdGVzdF9ibXNfY29weShvcmlnaW5hbCkpID0gdHJ1ZSBhcyByZXN1bHQgRlJPTSB0 ZXN0X3NldDsKKworLS0gVGVzdCAxOTogQWRkIG1lbWJlcnMgb3BlcmF0aW9uCitXSVRIIGJhc2Vf c2V0cyBBUyAoCisgICAgU0VMRUNUCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDNdKSBB UyBzZXRfMTMsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVs1LDddKSBBUyBzZXRfNTcKKykK K1NFTEVDVCAnYWRkX21lbWJlcnMgb3BlcmF0aW9uJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYm1z X3RvX2FycmF5KHRlc3RfYm1zX2FkZF9tZW1iZXJzKHNldF8xMywgc2V0XzU3KSkgPSBBUlJBWVsx LDMsNSw3XSBhcyByZXN1bHQKK0ZST00gYmFzZV9zZXRzOworCistLSBUZXN0IDIwOiBUZXN0IGhh c2ggY29uc2lzdGVuY3kKKworV0lUSCB0ZXN0X3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3Rf Ym1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2EsCisJdGVzdF9ibXNfZnJv bV9hcnJheShBUlJBWVsxLDMsNV0pIEFTIHNldF8xMzVfYiwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5 KEFSUkFZWzIsNCw2XSkgQVMgc2V0XzI0NgorKQorU0VMRUNUICdiaXRtYXBfaGFzaCBOVUxMJyBh cyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX2hhc2goTlVMTCkgPSAwIGFzIHJlc3VsdAorVU5J T04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9oYXNoIGNvbnNpc3RlbmN5JyBhcyB0ZXN0LAorICAgICAg IHRlc3RfYml0bWFwX2hhc2goc2V0XzEzNV9hKSA9IHRlc3RfYml0bWFwX2hhc2goc2V0XzEzNV9i KSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX2hh c2ggdnMgYm1zX2hhc2hfdmFsdWUnIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaChz ZXRfMTM1X2EpID0gdGVzdF9ibXNfaGFzaF92YWx1ZShzZXRfMTM1X2EpIGFzIHJlc3VsdAorRlJP TSB0ZXN0X3NldHMKK1VOSU9OIEFMTAorU0VMRUNUICdiaXRtYXBfaGFzaCBkaWZmZXJlbnQgc2V0 cycgYXMgdGVzdCwKKyAgICAgICB0ZXN0X2JpdG1hcF9oYXNoKHNldF8xMzVfYSkgIT0gdGVzdF9i aXRtYXBfaGFzaChzZXRfMjQ2KSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzOworCistLSBBcmNo aXRlY3R1cmUtYXdhcmUgaGFzaCB0ZXN0aW5nCitXSVRIIGFyY2hfaW5mbyBBUyAoCisgICAgU0VM RUNUCisgICAgICAgIENBU0UKKyAgICAgICAgICAgIFdIRU4gcGdfY29sdW1uX3NpemUoMTo6Ymln aW50KSA9IDggVEhFTiAnNjRiaXQnCisgICAgICAgICAgICBFTFNFICczMmJpdCcKKyAgICAgICAg RU5EIGFzIGFyY2hpdGVjdHVyZQorKSwKK2V4cGVjdGVkX3ZhbHVlcyBBUyAoCisgICAgU0VMRUNU CisgICAgICAgIGFyY2hpdGVjdHVyZSwKKyAgICAgICAgQ0FTRSBhcmNoaXRlY3R1cmUKKyAgICAg ICAgICAgIFdIRU4gJzY0Yml0JyBUSEVOIDAKKyAgICAgICAgICAgIFdIRU4gJzMyYml0JyBUSEVO IDAKKyAgICAgICAgRU5EIGFzIGhhc2hfbnVsbCwKKyAgICAgICAgQ0FTRSBhcmNoaXRlY3R1cmUK KyAgICAgICAgICAgIFdIRU4gJzY0Yml0JyBUSEVOIDQ5ODcwNzc4CisgICAgICAgICAgICBXSEVO ICczMmJpdCcgVEhFTiAxNTA5NzUyNTIwCisgICAgICAgIEVORCBhcyBoYXNoXzEzNSwKKyAgICAg ICAgQ0FTRSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIFdIRU4gJzY0Yml0JyBUSEVOIC0zMDM5 MjE2MDYKKyAgICAgICAgICAgIFdIRU4gJzMyYml0JyBUSEVOIDAgIC0tIFRCRAorICAgICAgICBF TkQgYXMgaGFzaF8yNDYKKyAgICBGUk9NIGFyY2hfaW5mbworKQorU0VMRUNUICdleHBlY3RlZCBo YXNoIE5VTEwnIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaChOVUxMKSA9IGhhc2hf bnVsbCBhcyByZXN1bHQKK0ZST00gZXhwZWN0ZWRfdmFsdWVzCitVTklPTiBBTEwKK1NFTEVDVCAn ZXhwZWN0ZWQgaGFzaCBbMSwzLDVdJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX2hhc2go dGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pKSA9IGhhc2hfMTM1IGFzIHJlc3VsdAor RlJPTSBleHBlY3RlZF92YWx1ZXMKK1VOSU9OIEFMTAorU0VMRUNUICdleHBlY3RlZCBoYXNoIFsy LDQsNl0nIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfaGFzaCh0ZXN0X2Jtc19mcm9tX2Fy cmF5KEFSUkFZWzIsNCw2XSkpID0gaGFzaF8yNDYgYXMgcmVzdWx0CitGUk9NIGV4cGVjdGVkX3Zh bHVlczsKKworLS0gVGVzdCAyMTogYml0bWFwX21hdGNoIGZ1bmN0aW9uCisKK1dJVEggdGVzdF9z ZXRzIEFTICgKKyAgICBTRUxFQ1QKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1XSkg QVMgc2V0XzEzNV9hLAorCXRlc3RfYm1zX2Zyb21fYXJyYXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRf MTM1X2IsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pIEFTIHNldF8yNDYsCisJ dGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsxLDNdKSBBUyBzZXRfMTMKKykKK1NFTEVDVCAnYml0 bWFwX21hdGNoIE5VTEwgTlVMTCAoc2hvdWxkIGJlIDApJyBhcyB0ZXN0LAorICAgICAgIHRlc3Rf Yml0bWFwX21hdGNoKE5VTEwsIE5VTEwpID0gMCBhcyByZXN1bHQKK1VOSU9OIEFMTAorU0VMRUNU ICdiaXRtYXBfbWF0Y2ggTlVMTCBzZXQgKHNob3VsZCBiZSAxKScgYXMgdGVzdCwKKyAgICAgICB0 ZXN0X2JpdG1hcF9tYXRjaChOVUxMLCBzZXRfMTM1X2EpID0gMSBhcyByZXN1bHQKK0ZST00gdGVz dF9zZXRzCitVTklPTiBBTEwKK1NFTEVDVCAnYml0bWFwX21hdGNoIHNldCBOVUxMIChzaG91bGQg YmUgMSknIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2goc2V0XzEzNV9hLCBOVUxM KSA9IDEgYXMgcmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1h cF9tYXRjaCBpZGVudGljYWwgc2V0cyAoc2hvdWxkIGJlIDApJyBhcyB0ZXN0LAorICAgICAgIHRl c3RfYml0bWFwX21hdGNoKHNldF8xMzVfYSwgc2V0XzEzNV9iKSA9IDAgYXMgcmVzdWx0CitGUk9N IHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBkaWZmZXJlbnQgc2V0 cyAoc2hvdWxkIGJlIDEpJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKHNldF8x MzVfYSwgc2V0XzI0NikgPSAxIGFzIHJlc3VsdAorRlJPTSB0ZXN0X3NldHMKK1VOSU9OIEFMTAor U0VMRUNUICdiaXRtYXBfbWF0Y2ggc3Vic2V0L3N1cGVyc2V0IChzaG91bGQgYmUgMSknIGFzIHRl c3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2goc2V0XzEzLCBzZXRfMTM1X2EpID0gMSBhcyBy ZXN1bHQKK0ZST00gdGVzdF9zZXRzOworCistLSBUZXN0IHJlbGF0aW9uc2hpcCB3aXRoIGJtc19l cXVhbAorV0lUSCB0ZXN0X3NldHMgQVMgKAorICAgIFNFTEVDVAorCXRlc3RfYm1zX2Zyb21fYXJy YXkoQVJSQVlbMSwzLDVdKSBBUyBzZXRfMTM1X2EsCisJdGVzdF9ibXNfZnJvbV9hcnJheShBUlJB WVsxLDMsNV0pIEFTIHNldF8xMzVfYiwKKwl0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzIsNCw2 XSkgQVMgc2V0XzI0NgorKQorU0VMRUNUICdiaXRtYXBfbWF0Y2ggdnMgYm1zX2VxdWFsIChlcXVh bCBzZXRzKScgYXMgdGVzdCwKKyAgICAgICAodGVzdF9iaXRtYXBfbWF0Y2goc2V0XzEzNV9hLCBz ZXRfMTM1X2IpID0gMCkgPSB0ZXN0X2Jtc19lcXVhbChzZXRfMTM1X2EsIHNldF8xMzVfYikgYXMg cmVzdWx0CitGUk9NIHRlc3Rfc2V0cworVU5JT04gQUxMCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCB2 cyBibXNfZXF1YWwgKGRpZmZlcmVudCBzZXRzKScgYXMgdGVzdCwKKyAgICAgICAodGVzdF9iaXRt YXBfbWF0Y2goc2V0XzEzNV9hLCBzZXRfMjQ2KSA9IDApID0gdGVzdF9ibXNfZXF1YWwoc2V0XzEz NV9hLCBzZXRfMjQ2KSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzCitVTklPTiBBTEwKK1NFTEVD VCAnYml0bWFwX21hdGNoIHZzIGJtc19lcXVhbCAoTlVMTCBjYXNlcyknIGFzIHRlc3QsCisgICAg ICAgKHRlc3RfYml0bWFwX21hdGNoKE5VTEwsIE5VTEwpID0gMCkgPSB0ZXN0X2Jtc19lcXVhbChO VUxMLCBOVUxMKSBhcyByZXN1bHQKK0ZST00gdGVzdF9zZXRzOworCistLSBUZXN0IHNwZWNpZmlj IG1hdGNoIHZhbHVlcyBmb3IgZGVidWdnaW5nCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBbMSwzLDVd IHZzIFsxLDMsNV0nIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2godGVzdF9ibXNf ZnJvbV9hcnJheShBUlJBWVsxLDMsNV0pLCB0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZWzEsMyw1 XSkpIGFzIG1hdGNoX3ZhbHVlOworU0VMRUNUICdiaXRtYXBfbWF0Y2ggWzEsMyw1XSB2cyBbMiw0 LDZdJyBhcyB0ZXN0LAorICAgICAgIHRlc3RfYml0bWFwX21hdGNoKHRlc3RfYm1zX2Zyb21fYXJy YXkoQVJSQVlbMSwzLDVdKSwgdGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsyLDQsNl0pKSBhcyBt YXRjaF92YWx1ZTsKKworLS0gVGVzdCBlZGdlIGNhc2VzCitTRUxFQ1QgJ2JpdG1hcF9tYXRjaCBl bXB0eSBhcnJheXMnIGFzIHRlc3QsCisgICAgICAgdGVzdF9iaXRtYXBfbWF0Y2godGVzdF9ibXNf ZnJvbV9hcnJheShBUlJBWVtdOjppbnRlZ2VyW10pLCB0ZXN0X2Jtc19mcm9tX2FycmF5KEFSUkFZ W106OmludGVnZXJbXSkpID0gMCBhcyByZXN1bHQ7CisKKy0tIFRlc3QgMjI6IFJhbmRvbSBvcGVy YXRpb25zIHN0cmVzcyB0ZXN0CitTRUxFQ1QgJ3JhbmRvbSBvcGVyYXRpb25zJyBhcyB0ZXN0LCB0 ZXN0X3JhbmRvbV9vcGVyYXRpb25zKDEyMzQ1LCAxMDAwKSA+IDAgYXMgcmVzdWx0OworCistLSBF UlJPUiBDT05ESVRJT04gVEVTVFMKKworLS0gVGVzdCAyMzogRXJyb3IgY29uZGl0aW9ucyAodGhl c2Ugc2hvdWxkIHByb2R1Y2UgRVJST1JzKQorCistLSBOZWdhdGl2ZSBtZW1iZXIgdGVzdHMKK1NF TEVDVCB0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbigtMSk7CitTRUxFQ1QgdGVzdF9ibXNfaXNfbWVt YmVyKE5VTEwsIC01KTsKK1NFTEVDVCB0ZXN0X2Jtc19hZGRfbWVtYmVyKE5VTEwsIC0xMCk7CitT RUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcihOVUxMLCAtMjApOworU0VMRUNUIHRlc3RfYm1zX2Fk ZF9yYW5nZShOVUxMLCAtNSwgMTApOworCistLSBTaW5nbGV0b24gbWVtYmVyIGVycm9ycworU0VM RUNUIHRlc3RfYm1zX3NpbmdsZXRvbl9tZW1iZXIodGVzdF9ibXNfZnJvbV9hcnJheShBUlJBWVsx LDJdKSk7CisKK0RST1AgRVhURU5TSU9OIHRlc3RfYml0bWFwc2V0OwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC0tMS4wLnNxbCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJjYWM5OGUyZDg1Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNl dC0tMS4wLnNxbApAQCAtMCwwICsxLDE1NSBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Jp dG1hcHNldC90ZXN0X2JpdG1hcHNldC0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3Jp cHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgor XGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHRlc3RfYml0bWFwc2V0IiB0byBsb2FkIHRoaXMg ZmlsZS4gXHF1aXQKKworLS0gVXRpbGl0eSBmdW5jdGlvbnMKK0NSRUFURSBGVU5DVElPTiB0ZXN0 X2Jtc19mcm9tX2FycmF5KGludGVnZXJbXSkKK1JFVFVSTlMgYnl0ZWEKK0FTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc190b19hcnJheShi eXRlYSkKK1JFVFVSTlMgaW50ZWdlcltdCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBD OworCitDUkVBVEUgRlVOQ1RJT04gYm1zX3ZhbHVlcyhieXRlYSkKK1JFVFVSTlMgdGV4dAorQVMg J01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQyBTVEFCTEU7CisKKy0tIEJpdG1hcHNldCBBUEkg ZnVuY3Rpb25zCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfbWFrZV9zaW5nbGV0b24oaW50ZWdl cikKK1JFVFVSTlMgYnl0ZWEgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBD OworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfYWRkX21lbWJlcihieXRlYSwgaW50ZWdlcikK K1JFVFVSTlMgYnl0ZWEKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFU RSBGVU5DVElPTiB0ZXN0X2Jtc19kZWxfbWVtYmVyKGJ5dGVhLCBpbnRlZ2VyKQorUkVUVVJOUyBi eXRlYQorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9O IHRlc3RfYm1zX2lzX21lbWJlcihieXRlYSwgaW50ZWdlcikKK1JFVFVSTlMgYm9vbGVhbgorQVMg J01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1z X251bV9tZW1iZXJzKGJ5dGVhKQorUkVUVVJOUyBpbnRlZ2VyCitBUyAnTU9EVUxFX1BBVEhOQU1F JyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNfY29weShieXRlYSkKK1JF VFVSTlMgYnl0ZWEKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBG VU5DVElPTiB0ZXN0X2Jtc19lcXVhbChieXRlYSwgYnl0ZWEpCitSRVRVUk5TIGJvb2xlYW4KK0FT ICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jt c19jb21wYXJlKGJ5dGVhLCBieXRlYSkKK1JFVFVSTlMgaW50ZWdlcgorQVMgJ01PRFVMRV9QQVRI TkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2lzX3N1YnNldChi eXRlYSwgYnl0ZWEpCitSRVRVUk5TIGJvb2xlYW4KK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdV QUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19zdWJzZXRfY29tcGFyZShieXRlYSwg Ynl0ZWEpCitSRVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7 CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc191bmlvbihieXRlYSwgYnl0ZWEpCitSRVRVUk5T IGJ5dGVhCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJ T04gdGVzdF9ibXNfaW50ZXJzZWN0KGJ5dGVhLCBieXRlYSkKK1JFVFVSTlMgYnl0ZWEKK0FTICdN T0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19k aWZmZXJlbmNlKGJ5dGVhLCBieXRlYSkKK1JFVFVSTlMgYnl0ZWEKK0FTICdNT0RVTEVfUEFUSE5B TUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19pc19lbXB0eShieXRl YSkKK1JFVFVSTlMgYm9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwor Q1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX21lbWJlcnNoaXAoYnl0ZWEpCitSRVRVUk5TIGludGVn ZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0 ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKGJ5dGVhKQorUkVUVVJOUyBpbnRlZ2VyIFNUUklDVAor QVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf Ym1zX2dldF9zaW5nbGV0b25fbWVtYmVyKGJ5dGVhLCBpbnRlZ2VyKQorUkVUVVJOUyBpbnRlZ2Vy CitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVz dF9ibXNfbmV4dF9tZW1iZXIoYnl0ZWEsIGludGVnZXIpCitSRVRVUk5TIGludGVnZXIKK0FTICdN T0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19w cmV2X21lbWJlcihieXRlYSwgaW50ZWdlcikKK1JFVFVSTlMgaW50ZWdlcgorQVMgJ01PRFVMRV9Q QVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2hhc2hfdmFs dWUoYnl0ZWEpCitSRVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdF IEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19vdmVybGFwKGJ5dGVhLCBieXRlYSkKK1JF VFVSTlMgYm9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRF IEZVTkNUSU9OIHRlc3RfYm1zX292ZXJsYXBfbGlzdChieXRlYSwgYnl0ZWFbXSkKK1JFVFVSTlMg Ym9vbGVhbgorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNU SU9OIHRlc3RfYm1zX25vbmVtcHR5X2RpZmZlcmVuY2UoYnl0ZWEsIGJ5dGVhKQorUkVUVVJOUyBi b29sZWFuCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJ T04gdGVzdF9ibXNfbWVtYmVyX2luZGV4KGJ5dGVhLCBpbnRlZ2VyKQorUkVUVVJOUyBpbnRlZ2Vy CitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gdGVz dF9ibXNfYWRkX3JhbmdlKGJ5dGVhLCBpbnRlZ2VyLCBpbnRlZ2VyKQorUkVUVVJOUyBieXRlYQor QVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3Rf Ym1zX2FkZF9tZW1iZXJzKGJ5dGVhLCBieXRlYSkKK1JFVFVSTlMgYnl0ZWEKK0FTICdNT0RVTEVf UEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0X2Jtc19yZXBsYWNl X21lbWJlcnMoYnl0ZWEsIGJ5dGVhKQorUkVUVVJOUyBieXRlYQorQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfYm1zX2pvaW4oYnl0ZWEsIGJ5 dGVhKQorUkVUVVJOUyBieXRlYQorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwor Q1JFQVRFIEZVTkNUSU9OIHRlc3RfYml0bWFwX2hhc2goYnl0ZWEpCitSRVRVUk5TIGludGVnZXIK K0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiB0ZXN0 X2JpdG1hcF9tYXRjaChieXRlYSwgYnl0ZWEpCitSRVRVUk5TIGludAorQVMgJ01PRFVMRV9QQVRI TkFNRScgTEFOR1VBR0UgQzsKKworLS0gVGVzdCB1dGlsaXR5IGZ1bmN0aW9ucworQ1JFQVRFIEZV TkNUSU9OIHRlc3RfcmFuZG9tX29wZXJhdGlvbnMoaW50ZWdlciwgaW50ZWdlcikKK1JFVFVSTlMg aW50ZWdlciBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NSRUFU RSBGVU5DVElPTiBjcmVhdGVfdGVzdF9iaXRtYXBzZXQobWVtYmVycyBpbnRlZ2VyW10pCitSRVRV Uk5TIGJ5dGVhCitMQU5HVUFHRSBTUUwKK0FTICQkCisgICAgU0VMRUNUIENBU0UgV0hFTiAkMSBJ UyBOVUxMIE9SIGFycmF5X2xlbmd0aCgkMSwgMSkgPSAwCisJICAgVEhFTiBOVUxMOjpieXRlYQor CSAgIEVMU0UgYml0bWFwc2V0X3RvX2J5dGVhKCQxKQorCSAgIEVORDsKKyQkOworCitDT01NRU5U IE9OIEVYVEVOU0lPTiB0ZXN0X2JpdG1hcHNldCBJUyAnVGVzdCBjb2RlIGZvciBCaXRtYXBzZXQn OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1h cHNldC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNldC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZjNhZjQ3MDM0OAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRt YXBzZXQuYwpAQCAtMCwwICsxLDExMDIgQEAKKy8qCisgKiB0ZXN0X2JpdG1hcHNldC5jCisgKiAg ICAgIFRlc3QgbW9kdWxlIGZvciBiaXRtYXBzZXQgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlz IG1vZHVsZSB0ZXN0cyB0aGUgYml0bWFwc2V0IGltcGxlbWVudGF0aW9uIGluIFBvc3RncmVTUUws CisgKiBjb3ZlcmluZyBhbGwgcHVibGljIEFQSSBmdW5jdGlvbnMsIGVkZ2UgY2FzZXMsIGFuZCBt ZW1vcnkgdXNhZ2UuCisgKgorICogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0 X2JpdG1hcHNldC5jCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDxz dGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlw ZS5oIgorI2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCisjaW5jbHVkZSAibGliL3N0cmluZ2lu Zm8uaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNs dWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCisjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ2YXJhdHQuaCIKKworUEdfTU9EVUxF X01BR0lDOworCisvKiBVdGlsaXR5IGZ1bmN0aW9ucyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShi bXNfdmFsdWVzKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfZnJvbV9hcnJheSk7CitQ R19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX3RvX2FycmF5KTsKKworLyogQml0bWFwc2V0IEFQ SSBmdW5jdGlvbnMgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiBiaXRtYXBzZXQuYyAqLworUEdf RlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19tYWtlX3NpbmdsZXRvbik7CitQR19GVU5DVElPTl9J TkZPX1YxKHRlc3RfYm1zX2FkZF9tZW1iZXIpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jt c19kZWxfbWVtYmVyKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfaXNfbWVtYmVyKTsK K1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfbnVtX21lbWJlcnMpOworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X2Jtc19jb3B5KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfZXF1 YWwpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19jb21wYXJlKTsKK1BHX0ZVTkNUSU9O X0lORk9fVjEodGVzdF9ibXNfaXNfc3Vic2V0KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9i bXNfc3Vic2V0X2NvbXBhcmUpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc191bmlvbik7 CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX2ludGVyc2VjdCk7CitQR19GVU5DVElPTl9J TkZPX1YxKHRlc3RfYm1zX2RpZmZlcmVuY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jt c19pc19lbXB0eSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX21lbWJlcnNoaXApOwor UEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKTsKK1BHX0ZVTkNU SU9OX0lORk9fVjEodGVzdF9ibXNfZ2V0X3NpbmdsZXRvbl9tZW1iZXIpOworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X2Jtc19uZXh0X21lbWJlcik7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3Rf Ym1zX3ByZXZfbWVtYmVyKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfaGFzaF92YWx1 ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYm1zX292ZXJsYXApOworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X2Jtc19vdmVybGFwX2xpc3QpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0 X2Jtc19ub25lbXB0eV9kaWZmZXJlbmNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNf bWVtYmVyX2luZGV4KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfYWRkX3JhbmdlKTsK K1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9ibXNfYWRkX21lbWJlcnMpOworUEdfRlVOQ1RJT05f SU5GT19WMSh0ZXN0X2Jtc19yZXBsYWNlX21lbWJlcnMpOworUEdfRlVOQ1RJT05fSU5GT19WMSh0 ZXN0X2Jtc19qb2luKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9iaXRtYXBfaGFzaCk7CitQ R19GVU5DVElPTl9JTkZPX1YxKHRlc3RfYml0bWFwX21hdGNoKTsKKworLyogVGVzdCB1dGlsaXR5 IGZ1bmN0aW9ucyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3JhbmRvbV9vcGVyYXRpb25z KTsKKworLyoKKyAqIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGNvbnZlcnQgYmV0d2VlbiBCaXRtYXBz ZXQgYW5kIGJ5dGVhCisgKiBmb3IgcGFzc2luZyBkYXRhIGJldHdlZW4gU1FMIGFuZCBDIGZ1bmN0 aW9ucworICovCisKK3N0YXRpYyBieXRlYSAqCitlbmNvZGVfYm1zX3RvX2J5dGVhKEJpdG1hcHNl dCAqYm1zKQoreworCWJ5dGVhCSAgICpyZXN1bHQ7CisJaW50CQkJYm1zX3NpemU7CisKKwlpZiAo Ym1zID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJYm1zX3NpemUgPSBvZmZzZXRvZihCaXRt YXBzZXQsIHdvcmRzKSArIGJtcy0+bndvcmRzICogc2l6ZW9mKGJpdG1hcHdvcmQpOworCXJlc3Vs dCA9IChieXRlYSAqKSBwYWxsb2MwKFZBUkhEUlNaICsgYm1zX3NpemUpOworCW1lbWNweShWQVJE QVRBKHJlc3VsdCksIGJtcywgYm1zX3NpemUpOworCVNFVF9WQVJTSVpFKHJlc3VsdCwgVkFSSERS U1ogKyBibXNfc2l6ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgQml0bWFwc2V0 ICoKK2RlY29kZV9ieXRlYV90b19ibXMoYnl0ZWEgKmRhdGEpCit7CisJQml0bWFwc2V0ICAqYm1z OworCWludAkJCWJtc19zaXplOworCisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7 CisKKwlibXNfc2l6ZSA9IFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpOworCisJaWYgKGJtc19zaXpl IDwgb2Zmc2V0b2YoQml0bWFwc2V0LCB3b3JkcykpCisJCXJldHVybiBOVUxMOworCisJYm1zID0g KEJpdG1hcHNldCAqKSBwYWxsb2MoYm1zX3NpemUpOworCW1lbWNweShibXMsIFZBUkRBVEFfQU5Z KGRhdGEpLCBibXNfc2l6ZSk7CisKKwlpZiAoYm1zLT5ud29yZHMgPCAwIHx8CisJCWJtcy0+bndv cmRzID4gKGJtc19zaXplIC0gb2Zmc2V0b2YoQml0bWFwc2V0LCB3b3JkcykpIC8gc2l6ZW9mKGJp dG1hcHdvcmQpKQorCXsKKwkJcGZyZWUoYm1zKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0 dXJuIGJtczsKK30KKworRGF0dW0KK2Jtc192YWx1ZXMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlC aXRtYXBzZXQgICpibXM7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWludAkJCW1lbWJlcjsKKwli b29sCQlmaXJzdCA9IHRydWU7CisJdGV4dAkgICAqcmVzdWx0OworCisJaWYgKFBHX0FSR0lTTlVM TCgwKSkKKwl7CisJCXJlc3VsdCA9IGNzdHJpbmdfdG9fdGV4dCgie30iKTsKKwkJUEdfUkVUVVJO X1RFWFRfUChyZXN1bHQpOworCX0KKworCWJtcyA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VU QVJHX0JZVEVBX1BQKDApKTsKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCWlmIChibXMgPT0g TlVMTCB8fCBibXNfaXNfZW1wdHkoYm1zKSkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmJ1ZiwgInt9Iik7CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYs ICd7Jyk7CisKKwkJbWVtYmVyID0gLTE7CisJCXdoaWxlICgobWVtYmVyID0gYm1zX25leHRfbWVt YmVyKGJtcywgbWVtYmVyKSkgPj0gMCkKKwkJeworCQkJaWYgKCFmaXJzdCkKKwkJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmYnVmLCAnLCcpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQi LCBtZW1iZXIpOworCQkJZmlyc3QgPSBmYWxzZTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZidWYsICd9Jyk7CisJfQorCisJaWYgKGJtcykKKwkJYm1zX2ZyZWUoYm1zKTsKKworCXJl c3VsdCA9IGNzdHJpbmdfdG9fdGV4dChidWYuZGF0YSk7CisJcGZyZWUoYnVmLmRhdGEpOworCisJ UEdfUkVUVVJOX1RFWFRfUChyZXN1bHQpOworfQorCisvKgorICogSW5kaXZpZHVhbCB0ZXN0IGZ1 bmN0aW9ucyBmb3IgZWFjaCBiaXRtYXBzZXQgQVBJIGZ1bmN0aW9uCisgKi8KKworRGF0dW0KK3Rl c3RfYm1zX2FkZF9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQJCQltZW1iZXI7CisJ Qml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlCaXRtYXBzZXQgICpyZXN1bHRfYm1zOworCWJ5dGVh CSAgICpyZXN1bHQ7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDEpKQorCQlQR19SRVRVUk5fTlVMTCgp OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtcyA9IGRlY29kZV9ieXRlYV90b19ibXMo UEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKworCW1lbWJlciA9IFBHX0dFVEFSR19JTlQzMigxKTsK KwlyZXN1bHRfYm1zID0gYm1zX2FkZF9tZW1iZXIoYm1zLCBtZW1iZXIpOworCXJlc3VsdCA9IGVu Y29kZV9ibXNfdG9fYnl0ZWEocmVzdWx0X2Jtcyk7CisKKwlpZiAoYm1zICYmIGJtcyAhPSByZXN1 bHRfYm1zKQorCQlibXNfZnJlZShibXMpOworCWlmIChyZXN1bHRfYm1zKQorCQlibXNfZnJlZShy ZXN1bHRfYm1zKTsKKworCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJUEdfUkVUVVJOX05VTEwoKTsK KworCVBHX1JFVFVSTl9CWVRFQV9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19hZGRf bWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAor CQkJICAgKmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAgKnJlc3VsdF9ibXM7CisJYnl0ZWEJICAg KnJlc3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMxID0gZGVjb2RlX2J5dGVh X3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMCkpOworCisJaWYgKCFQR19BUkdJU05VTEwoMSkp CisJCWJtczIgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgxKSk7CisK KwkvKiBJTVBPUlRBTlQ6IGJtc19hZGRfbWVtYmVycyBtb2RpZmllcy9mcmVlcyB0aGUgZmlyc3Qg YXJndW1lbnQgKi8KKwlyZXN1bHRfYm1zID0gYm1zX2FkZF9tZW1iZXJzKGJtczEsIGJtczIpOwor CS8qIGJtczEgaXMgbm93IGludmFsaWQsIGRvbid0IGZyZWUgaXQgKi8KKworCWlmIChibXMyKQor CQlibXNfZnJlZShibXMyKTsKKworCWlmIChyZXN1bHRfYm1zID09IE5VTEwpCisJCVBHX1JFVFVS Tl9OVUxMKCk7CisKKwlyZXN1bHQgPSBlbmNvZGVfYm1zX3RvX2J5dGVhKHJlc3VsdF9ibXMpOwor CWJtc19mcmVlKHJlc3VsdF9ibXMpOworCisJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0KTsKK30K KworRGF0dW0KK3Rlc3RfYm1zX2RlbF9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRt YXBzZXQgICpibXMgPSBOVUxMOworCWludDMyCQltZW1iZXI7CisJYnl0ZWEJICAgKnJlc3VsdDsK KworCWlmIChQR19BUkdJU05VTEwoMSkpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlpZiAoIVBH X0FSR0lTTlVMTCgwKSkKKwkJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllU RUFfUFAoMCkpOworCisJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCWJtcyA9IGJtc19k ZWxfbWVtYmVyKGJtcywgbWVtYmVyKTsKKworCWlmIChibXMgPT0gTlVMTCB8fCBibXNfaXNfZW1w dHkoYm1zKSkKKwl7CisJCWlmIChibXMpCisJCQlibXNfZnJlZShibXMpOworCQlQR19SRVRVUk5f TlVMTCgpOworCX0KKworCXJlc3VsdCA9IGVuY29kZV9ibXNfdG9fYnl0ZWEoYm1zKTsKKwlibXNf ZnJlZShibXMpOworCisJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0KTsKK30KKworRGF0dW0KK3Rl c3RfYm1zX2lzX21lbWJlcihQR19GVU5DVElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtcyA9 IE5VTEw7CisJaW50MzIJCW1lbWJlcjsKKwlib29sCQlyZXN1bHQ7CisKKwlpZiAoUEdfQVJHSVNO VUxMKDEpKQorCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgw KSkKKwkJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMCkpOwor CisJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOworCXJlc3VsdCA9IGJtc19pc19tZW1iZXIo bWVtYmVyLCBibXMpOworCisJaWYgKGJtcykKKwkJYm1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVS Tl9CT09MKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19udW1fbWVtYmVycyhQR19GVU5D VElPTl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJaW50CQkJcmVzdWx0ID0g MDsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMgPSBkZWNvZGVfYnl0ZWFfdG9fYm1z KFBHX0dFVEFSR19CWVRFQV9QUCgwKSk7CisKKwlyZXN1bHQgPSBibXNfbnVtX21lbWJlcnMoYm1z KTsKKworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7CisKKwlQR19SRVRVUk5fSU5UMzIocmVz dWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX21ha2Vfc2luZ2xldG9uKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJaW50MzIJCW1lbWJlcjsKKwlCaXRtYXBzZXQgICpibXM7CisJYnl0ZWEJICAgKnJl c3VsdDsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlt ZW1iZXIgPSBQR19HRVRBUkdfSU5UMzIoMCk7CisJYm1zID0gYm1zX21ha2Vfc2luZ2xldG9uKG1l bWJlcik7CisKKwlyZXN1bHQgPSBlbmNvZGVfYm1zX3RvX2J5dGVhKGJtcyk7CisJYm1zX2ZyZWUo Ym1zKTsKKworCVBHX1JFVFVSTl9CWVRFQV9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jt c19jb3B5KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJYnl0ZWEJICAgKmJtc19kYXRhOworCUJpdG1h cHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqY29weV9ibXM7CisJYnl0ZWEJICAgKnJl c3VsdDsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwli bXNfZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QUCgwKTsKKwlibXMgPSBkZWNvZGVfYnl0ZWFfdG9f Ym1zKGJtc19kYXRhKTsKKwljb3B5X2JtcyA9IGJtc19jb3B5KGJtcyk7CisJcmVzdWx0ID0gZW5j b2RlX2Jtc190b19ieXRlYShjb3B5X2Jtcyk7CisKKwlpZiAoYm1zKQorCQlibXNfZnJlZShibXMp OworCWlmIChjb3B5X2JtcykKKwkJYm1zX2ZyZWUoY29weV9ibXMpOworCisJUEdfUkVUVVJOX0JZ VEVBX1AocmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX2VxdWFsKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJ Ym9vbAkJcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtczEgPSBkZWNvZGVf Ynl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVM TCgxKSkKKwkJYm1zMiA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDEp KTsKKworCXJlc3VsdCA9IGJtc19lcXVhbChibXMxLCBibXMyKTsKKworCWlmIChibXMxKQorCQli bXNfZnJlZShibXMxKTsKKwlpZiAoYm1zMikKKwkJYm1zX2ZyZWUoYm1zMik7CisKKwlQR19SRVRV Uk5fQk9PTChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfdW5pb24oUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAgICpibXMyID0gTlVMTDsK KwlCaXRtYXBzZXQgICpyZXN1bHRfYm1zOworCWJ5dGVhCSAgICpyZXN1bHQ7CisKKwlpZiAoIVBH X0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZ VEVBX1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMyID0gZGVjb2RlX2J5 dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMSkpOworCisJcmVzdWx0X2JtcyA9IGJtc191 bmlvbihibXMxLCBibXMyKTsKKworCWlmIChibXMxKQorCQlibXNfZnJlZShibXMxKTsKKwlpZiAo Ym1zMikKKwkJYm1zX2ZyZWUoYm1zMik7CisKKwlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQorCQlQ R19SRVRVUk5fTlVMTCgpOworCisJcmVzdWx0ID0gZW5jb2RlX2Jtc190b19ieXRlYShyZXN1bHRf Ym1zKTsKKwlibXNfZnJlZShyZXN1bHRfYm1zKTsKKworCVBHX1JFVFVSTl9CWVRFQV9QKHJlc3Vs dCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19tZW1iZXJzaGlwKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlCTVNfTWVtYmVyc2hpcCByZXN1bHQ7CisKKwlp ZiAoUEdfQVJHSVNOVUxMKDApKQorCQlQR19SRVRVUk5fSU5UMzIoQk1TX0VNUFRZX1NFVCk7CisK KwlibXMgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgwKSk7CisJcmVz dWx0ID0gYm1zX21lbWJlcnNoaXAoYm1zKTsKKworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7 CisKKwlQR19SRVRVUk5fSU5UMzIoKGludDMyKSByZXN1bHQpOworfQorCitEYXR1bQordGVzdF9i bXNfbmV4dF9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMgPSBO VUxMOworCWludDMyCQlwcmV2bWVtYmVyOworCWludAkJCXJlc3VsdDsKKworCWlmIChQR19BUkdJ U05VTEwoMCkgfHwgUEdfQVJHSVNOVUxMKDEpKQorCQlQR19SRVRVUk5fSU5UMzIoLTIpOworCisJ Ym1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMCkpOworCXByZXZt ZW1iZXIgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisJcmVzdWx0ID0gYm1zX25leHRfbWVtYmVyKGJt cywgcHJldm1lbWJlcik7CisKKwlpZiAoYm1zKQorCQlibXNfZnJlZShibXMpOworCisJUEdfUkVU VVJOX0lOVDMyKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19mcm9tX2FycmF5KFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJQXJyYXlUeXBlICAqYXJyYXk7CisJaW50CQkgICAqbWVtYmVyczsK KwlpbnQJCQlubWVtYmVyczsKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCWJ5dGVhCSAgICpy ZXN1bHQ7CisJaW50CQkJaTsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJCVBHX1JFVFVSTl9O VUxMKCk7CisKKwlhcnJheSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgwKTsKKworCS8qIENoZWNr IGVsZW1lbnQgdHlwZSBmaXJzdCAqLworCWlmIChBUlJfRUxFTVRZUEUoYXJyYXkpICE9IElOVDRP SUQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9BUlJBWV9TVUJTQ1JJ UFRfRVJST1IpLAorCQkJCSBlcnJtc2coImludGVnZXIgYXJyYXkgZXhwZWN0ZWQiKSkpOworCisJ LyogSGFuZGxlIGVtcHR5IGFycmF5cyAtIEFSUl9ORElNIGNhbiBiZSAwIGZvciBlbXB0eSBhcnJh eXMgKi8KKwlpZiAoQVJSX05ESU0oYXJyYXkpID09IDApCisJCVBHX1JFVFVSTl9OVUxMKCk7CisK KwkvKiBOb3cgY2hlY2sgZGltZW5zaW9ucyAqLworCWlmIChBUlJfTkRJTShhcnJheSkgIT0gMSkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0FSUkFZX1NVQlNDUklQVF9F UlJPUiksCisJCQkJIGVycm1zZygiaW50ZWdlciBhcnJheSBleHBlY3RlZCIpKSk7CisKKwlubWVt YmVycyA9IEFSUl9ESU1TKGFycmF5KVswXTsKKworCS8qIERvdWJsZS1jaGVjayBmb3IgZW1wdHkg Ki8KKwlpZiAobm1lbWJlcnMgPT0gMCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCWlmIChBUlJf SEFTTlVMTChhcnJheSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9B UlJBWV9TVUJTQ1JJUFRfRVJST1IpLAorCQkJCSBlcnJtc2coImludGVnZXIgYXJyYXkgZXhwZWN0 ZWQiKSkpOworCisJbWVtYmVycyA9IChpbnQgKikgQVJSX0RBVEFfUFRSKGFycmF5KTsKKworCWZv ciAoaSA9IDA7IGkgPCBubWVtYmVyczsgaSsrKQorCQlibXMgPSBibXNfYWRkX21lbWJlcihibXMs IG1lbWJlcnNbaV0pOworCisJcmVzdWx0ID0gZW5jb2RlX2Jtc190b19ieXRlYShibXMpOworCWJt c19mcmVlKGJtcyk7CisKKwlQR19SRVRVUk5fQllURUFfUChyZXN1bHQpOworfQorCitEYXR1bQor dGVzdF9ibXNfdG9fYXJyYXkoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlieXRlYQkgICAqYm1zX2Rh dGE7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlBcnJheVR5cGUgICpyZXN1bHQ7CisJRGF0 dW0JICAgKmRhdHVtczsKKwlpbnQJCQlubWVtYmVyczsKKwlpbnQJCQltZW1iZXIgPSAtMTsKKwlp bnQJCQlpID0gMDsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJCVBHX1JFVFVSTl9OVUxMKCk7 CisKKwlibXNfZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QUCgwKTsKKwlibXMgPSBkZWNvZGVfYnl0 ZWFfdG9fYm1zKGJtc19kYXRhKTsKKworCWlmIChibXMgPT0gTlVMTCB8fCBibXNfaXNfZW1wdHko Ym1zKSkKKwl7CisJCWlmIChibXMpCisJCQlibXNfZnJlZShibXMpOworCQlQR19SRVRVUk5fTlVM TCgpOworCX0KKworCW5tZW1iZXJzID0gYm1zX251bV9tZW1iZXJzKGJtcyk7CisJZGF0dW1zID0g KERhdHVtICopIHBhbGxvYyhubWVtYmVycyAqIHNpemVvZihEYXR1bSkpOworCisJd2hpbGUgKCht ZW1iZXIgPSBibXNfbmV4dF9tZW1iZXIoYm1zLCBtZW1iZXIpKSA+PSAwKQorCQlkYXR1bXNbaSsr XSA9IEludDMyR2V0RGF0dW0obWVtYmVyKTsKKworCWJtc19mcmVlKGJtcyk7CisKKwlyZXN1bHQg PSBjb25zdHJ1Y3RfYXJyYXkoZGF0dW1zLCBubWVtYmVycywKKwkJCQkJCQkgSU5UNE9JRCwgc2l6 ZW9mKGludDMyKSwgdHJ1ZSwgJ2knKTsKKworCXBmcmVlKGRhdHVtcyk7CisJUEdfUkVUVVJOX0FS UkFZVFlQRV9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19pbnRlcnNlY3QoUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAgICpibXMyID0g TlVMTDsKKwlCaXRtYXBzZXQgICpyZXN1bHRfYm1zOworCWJ5dGVhCSAgICpyZXN1bHQ7CisKKwlp ZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VU QVJHX0JZVEVBX1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMyID0gZGVj b2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMSkpOworCisJcmVzdWx0X2JtcyA9 IGJtc19pbnRlcnNlY3QoYm1zMSwgYm1zMik7CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1z MSk7CisJaWYgKGJtczIpCisJCWJtc19mcmVlKGJtczIpOworCisJaWYgKHJlc3VsdF9ibXMgPT0g TlVMTCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCXJlc3VsdCA9IGVuY29kZV9ibXNfdG9fYnl0 ZWEocmVzdWx0X2Jtcyk7CisJYm1zX2ZyZWUocmVzdWx0X2Jtcyk7CisKKwlQR19SRVRVUk5fQllU RUFfUChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfZGlmZmVyZW5jZShQR19GVU5DVElP Tl9BUkdTKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJtczIgPSBOVUxM OworCUJpdG1hcHNldCAgKnJlc3VsdF9ibXM7CisJYnl0ZWEJICAgKnJlc3VsdDsKKworCWlmICgh UEdfQVJHSVNOVUxMKDApKQorCQlibXMxID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdf QllURUFfUFAoMCkpOworCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCWJtczIgPSBkZWNvZGVf Ynl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgxKSk7CisKKwlyZXN1bHRfYm1zID0gYm1z X2RpZmZlcmVuY2UoYm1zMSwgYm1zMik7CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1zMSk7 CisJaWYgKGJtczIpCisJCWJtc19mcmVlKGJtczIpOworCisJaWYgKHJlc3VsdF9ibXMgPT0gTlVM TCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCXJlc3VsdCA9IGVuY29kZV9ibXNfdG9fYnl0ZWEo cmVzdWx0X2Jtcyk7CisJYm1zX2ZyZWUocmVzdWx0X2Jtcyk7CisKKwlQR19SRVRVUk5fQllURUFf UChyZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfY29tcGFyZShQR19GVU5DVElPTl9BUkdT KQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJtczIgPSBOVUxMOworCWlu dAkJCXJlc3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMxID0gZGVjb2RlX2J5 dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMCkpOworCisJaWYgKCFQR19BUkdJU05VTEwo MSkpCisJCWJtczIgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgxKSk7 CisKKwlyZXN1bHQgPSBibXNfY29tcGFyZShibXMxLCBibXMyKTsKKworCWlmIChibXMxKQorCQli bXNfZnJlZShibXMxKTsKKwlpZiAoYm1zMikKKwkJYm1zX2ZyZWUoYm1zMik7CisKKwlQR19SRVRV Uk5fSU5UMzIocmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX2lzX2VtcHR5KFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKKwlib29sCQlyZXN1bHQ7CisK KwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19H RVRBUkdfQllURUFfUFAoMCkpOworCisJcmVzdWx0ID0gYm1zX2lzX2VtcHR5KGJtcyk7CisKKwlp ZiAoYm1zKQorCQlibXNfZnJlZShibXMpOworCisJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKK30K KworRGF0dW0KK3Rlc3RfYm1zX2lzX3N1YnNldChQR19GVU5DVElPTl9BUkdTKQoreworCUJpdG1h cHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJtczIgPSBOVUxMOworCWJvb2wJCXJlc3VsdDsK KworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMxID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQ R19HRVRBUkdfQllURUFfUFAoMCkpOworCisJaWYgKCFQR19BUkdJU05VTEwoMSkpCisJCWJtczIg PSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgxKSk7CisKKwlyZXN1bHQg PSBibXNfaXNfc3Vic2V0KGJtczEsIGJtczIpOworCisJaWYgKGJtczEpCisJCWJtc19mcmVlKGJt czEpOworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMyKTsKKworCVBHX1JFVFVSTl9CT09MKHJl c3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19zdWJzZXRfY29tcGFyZShQR19GVU5DVElPTl9B UkdTKQoreworCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAorCQkJICAgKmJtczIgPSBOVUxMOwor CUJNU19Db21wYXJpc29uIHJlc3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDApKQorCQlibXMx ID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMCkpOworCisJaWYgKCFQ R19BUkdJU05VTEwoMSkpCisJCWJtczIgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19C WVRFQV9QUCgxKSk7CisKKwlyZXN1bHQgPSBibXNfc3Vic2V0X2NvbXBhcmUoYm1zMSwgYm1zMik7 CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1zMSk7CisJaWYgKGJtczIpCisJCWJtc19mcmVl KGJtczIpOworCisJUEdfUkVUVVJOX0lOVDMyKChpbnQzMikgcmVzdWx0KTsKK30KKworRGF0dW0K K3Rlc3RfYm1zX3NpbmdsZXRvbl9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBz ZXQgICpibXMgPSBOVUxMOworCWludAkJCXJlc3VsdDsKKworCWlmICghUEdfQVJHSVNOVUxMKDAp KQorCQlibXMgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgwKSk7CisK KwlyZXN1bHQgPSBibXNfc2luZ2xldG9uX21lbWJlcihibXMpOworCisJaWYgKGJtcykKKwkJYm1z X2ZyZWUoYm1zKTsKKworCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOworfQorCitEYXR1bQordGVz dF9ibXNfZ2V0X3NpbmdsZXRvbl9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBz ZXQgICpibXMgPSBOVUxMOworCWludDMyCQlkZWZhdWx0X21lbWJlciA9IFBHX0dFVEFSR19JTlQz MigxKTsKKwlpbnQJCQltZW1iZXI7CisJYm9vbAkJc3VjY2VzczsKKworCWlmIChQR19BUkdJU05V TEwoMCkpCisJCVBHX1JFVFVSTl9JTlQzMihkZWZhdWx0X21lbWJlcik7CisKKwlibXMgPSBkZWNv ZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgwKSk7CisKKwkvKgorCSAqIGJtc19n ZXRfc2luZ2xldG9uX21lbWJlciByZXR1cm5zIGJvb2wgYW5kIHN0b3JlcyByZXN1bHQgaW4gbWVt YmVyCisJICogcG9pbnRlcgorCSAqLworCXN1Y2Nlc3MgPSBibXNfZ2V0X3NpbmdsZXRvbl9tZW1i ZXIoYm1zLCAmbWVtYmVyKTsKKwlibXNfZnJlZShibXMpOworCisJaWYgKHN1Y2Nlc3MpCisJCVBH X1JFVFVSTl9JTlQzMihtZW1iZXIpOworCWVsc2UKKwkJUEdfUkVUVVJOX0lOVDMyKGRlZmF1bHRf bWVtYmVyKTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX3ByZXZfbWVtYmVyKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJYnl0ZWEJICAgKmJtc19kYXRhOworCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJ aW50MzIJCXByZXZtZW1iZXI7CisJaW50CQkJcmVzdWx0OworCisJaWYgKFBHX0FSR0lTTlVMTCgw KSkKKwkJUEdfUkVUVVJOX0lOVDMyKC0yKTsKKworCWJtc19kYXRhID0gUEdfR0VUQVJHX0JZVEVB X1BQKDApOworCXByZXZtZW1iZXIgPSBQR19HRVRBUkdfSU5UMzIoMSk7CisKKwlpZiAoVkFSU0la RV9BTllfRVhIRFIoYm1zX2RhdGEpID09IDApCisJCVBHX1JFVFVSTl9JTlQzMigtMik7CisKKwli bXMgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKGJtc19kYXRhKTsKKwlyZXN1bHQgPSBibXNfcHJldl9t ZW1iZXIoYm1zLCBwcmV2bWVtYmVyKTsKKwlibXNfZnJlZShibXMpOworCisJUEdfUkVUVVJOX0lO VDMyKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19vdmVybGFwKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJ Ym9vbAkJcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtczEgPSBkZWNvZGVf Ynl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVM TCgxKSkKKwkJYm1zMiA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDEp KTsKKworCXJlc3VsdCA9IGJtc19vdmVybGFwKGJtczEsIGJtczIpOworCisJaWYgKGJtczEpCisJ CWJtc19mcmVlKGJtczEpOworCWlmIChibXMyKQorCQlibXNfZnJlZShibXMyKTsKKworCVBHX1JF VFVSTl9CT09MKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0ZXN0X2Jtc19vdmVybGFwX2xpc3QoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCUFycmF5VHlwZSAg KmFycmF5OworCUxpc3QJICAgKmJpdG1hcHNldF9saXN0ID0gTklMOworCUxpc3RDZWxsICAgKmxj OworCWJvb2wJCXJlc3VsdDsKKwlEYXR1bQkgICAqZWxlbV9kYXR1bXM7CisJYm9vbAkgICAqZWxl bV9udWxsczsKKwlpbnQJCQllbGVtX2NvdW50OworCWludAkJCWk7CisKKwkvKiBIYW5kbGUgZmly c3QgYXJndW1lbnQgKHRoZSBiaXRtYXBzZXQpICovCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJ UEdfUkVUVVJOX0JPT0woZmFsc2UpOworCisJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19H RVRBUkdfQllURUFfUFAoMCkpOworCisJLyogSGFuZGxlIHNlY29uZCBhcmd1bWVudCAoYXJyYXkg b2YgYml0bWFwc2V0cykgKi8KKwlpZiAoUEdfQVJHSVNOVUxMKDEpKQorCXsKKwkJaWYgKGJtcykK KwkJCWJtc19mcmVlKGJtcyk7CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwlhcnJh eSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKworCS8qIFZhbGlkYXRlIGFycmF5ICovCisJ aWYgKEFSUl9ORElNKGFycmF5KSAhPSAxKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfQVJSQVlfU1VCU0NSSVBUX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJvbmUtZGltZW5z aW9uYWwgYXJyYXkgZXhwZWN0ZWQiKSkpOworCisJaWYgKEFSUl9FTEVNVFlQRShhcnJheSkgIT0g QllURUFPSUQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQ RV9NSVNNQVRDSCksCisJCQkJIGVycm1zZygiYnl0ZWEgYXJyYXkgZXhwZWN0ZWQiKSkpOworCisJ LyogRGVjb25zdHJ1Y3QgdGhlIGFycmF5ICovCisJZGVjb25zdHJ1Y3RfYXJyYXkoYXJyYXksCisJ CQkJCSAgQllURUFPSUQsIC0xLCBmYWxzZSwgJ2knLAorCQkJCQkgICZlbGVtX2RhdHVtcywgJmVs ZW1fbnVsbHMsICZlbGVtX2NvdW50KTsKKworCS8qIENvbnZlcnQgZWFjaCBieXRlYSBlbGVtZW50 IHRvIGEgQml0bWFwc2V0IGFuZCBhZGQgdG8gbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBlbGVt X2NvdW50OyBpKyspCisJeworCQlCaXRtYXBzZXQgICpsaXN0X2JtcyA9IE5VTEw7CisKKwkJaWYg KCFlbGVtX251bGxzW2ldKQorCQl7CisJCQlieXRlYQkgICAqZWxlbV9ieXRlYSA9IERhdHVtR2V0 Qnl0ZWFQKGVsZW1fZGF0dW1zW2ldKTsKKworCQkJbGlzdF9ibXMgPSBkZWNvZGVfYnl0ZWFfdG9f Ym1zKGVsZW1fYnl0ZWEpOworCQl9CisKKwkJLyogQWRkIHRvIGxpc3QgKGV2ZW4gaWYgTlVMTCkg Ki8KKwkJYml0bWFwc2V0X2xpc3QgPSBsYXBwZW5kKGJpdG1hcHNldF9saXN0LCBsaXN0X2Jtcyk7 CisJfQorCisJLyogQ2FsbCB0aGUgYWN0dWFsIGJtc19vdmVybGFwX2xpc3QgZnVuY3Rpb24gKi8K KwlyZXN1bHQgPSBibXNfb3ZlcmxhcF9saXN0KGJtcywgYml0bWFwc2V0X2xpc3QpOworCisJLyog Q2xlYW4gdXAgKi8KKwlpZiAoYm1zKQorCQlibXNfZnJlZShibXMpOworCisJLyogRnJlZSBhbGwg Yml0bWFwc2V0cyBpbiB0aGUgbGlzdCAqLworCWZvcmVhY2gobGMsIGJpdG1hcHNldF9saXN0KQor CXsKKwkJQml0bWFwc2V0ICAqbGlzdF9ibXMgPSAoQml0bWFwc2V0ICopIGxmaXJzdChsYyk7CisK KwkJaWYgKGxpc3RfYm1zKQorCQkJYm1zX2ZyZWUobGlzdF9ibXMpOworCX0KKwlsaXN0X2ZyZWUo Yml0bWFwc2V0X2xpc3QpOworCisJLyogRnJlZSBhcnJheSBkZWNvbnN0cnVjdGlvbiByZXN1bHRz ICovCisJcGZyZWUoZWxlbV9kYXR1bXMpOworCXBmcmVlKGVsZW1fbnVsbHMpOworCisJUEdfUkVU VVJOX0JPT0wocmVzdWx0KTsKK30KKworRGF0dW0KK3Rlc3RfYm1zX25vbmVtcHR5X2RpZmZlcmVu Y2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAg ICpibXMyID0gTlVMTDsKKwlib29sCQlyZXN1bHQ7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkK KwkJYm1zMSA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKwor CWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMyID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19H RVRBUkdfQllURUFfUFAoMSkpOworCisJcmVzdWx0ID0gYm1zX25vbmVtcHR5X2RpZmZlcmVuY2Uo Ym1zMSwgYm1zMik7CisKKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1zMSk7CisJaWYgKGJtczIp CisJCWJtc19mcmVlKGJtczIpOworCisJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKK30KKworRGF0 dW0KK3Rlc3RfYm1zX21lbWJlcl9pbmRleChQR19GVU5DVElPTl9BUkdTKQoreworCWJ5dGVhCSAg ICpibXNfZGF0YTsKKwlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCWludDMyCQltZW1iZXI7CisJ aW50CQkJcmVzdWx0OworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSkKKwkJUEdfUkVUVVJOX0lOVDMy KC0xKTsKKworCWJtc19kYXRhID0gUEdfR0VUQVJHX0JZVEVBX1BQKDApOworCW1lbWJlciA9IFBH X0dFVEFSR19JTlQzMigxKTsKKworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkgPT0g MCkKKwkJUEdfUkVUVVJOX0lOVDMyKC0xKTsKKworCWJtcyA9IGRlY29kZV9ieXRlYV90b19ibXMo Ym1zX2RhdGEpOworCisJcmVzdWx0ID0gYm1zX21lbWJlcl9pbmRleChibXMsIG1lbWJlcik7CisJ Ym1zX2ZyZWUoYm1zKTsKKworCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOworfQorCitEYXR1bQor dGVzdF9ibXNfYWRkX3JhbmdlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1z ID0gTlVMTDsKKwlpbnQzMgkJbG93ZXIsCisJCQkJdXBwZXI7CisJYnl0ZWEJICAgKnJlc3VsdDsK KworCWlmIChQR19BUkdJU05VTEwoMSkgfHwgUEdfQVJHSVNOVUxMKDIpKQorCQlQR19SRVRVUk5f TlVMTCgpOworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtcyA9IGRlY29kZV9ieXRlYV90 b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKworCWxvd2VyID0gUEdfR0VUQVJHX0lOVDMy KDEpOworCXVwcGVyID0gUEdfR0VUQVJHX0lOVDMyKDIpOworCisJLyogQ2hlY2sgZm9yIGludmFs aWQgcmFuZ2UgKi8KKwlpZiAodXBwZXIgPCBsb3dlcikKKwl7CisJCWlmIChibXMpCisJCQlibXNf ZnJlZShibXMpOworCQlQR19SRVRVUk5fTlVMTCgpOworCX0KKworCWJtcyA9IGJtc19hZGRfcmFu Z2UoYm1zLCBsb3dlciwgdXBwZXIpOworCisJcmVzdWx0ID0gZW5jb2RlX2Jtc190b19ieXRlYShi bXMpOworCWlmIChibXMpCisJCWJtc19mcmVlKGJtcyk7CisKKwlQR19SRVRVUk5fQllURUFfUChy ZXN1bHQpOworfQorCitEYXR1bQordGVzdF9ibXNfcmVwbGFjZV9tZW1iZXJzKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5VTEwsCisJCQkgICAqYm1zMiA9IE5VTEw7 CisJQml0bWFwc2V0ICAqcmVzdWx0X2JtczsKKwlieXRlYQkgICAqcmVzdWx0OworCisJaWYgKCFQ R19BUkdJU05VTEwoMCkpCisJCWJtczEgPSBkZWNvZGVfYnl0ZWFfdG9fYm1zKFBHX0dFVEFSR19C WVRFQV9QUCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKKwkJYm1zMiA9IGRlY29kZV9i eXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDEpKTsKKworCS8qIElNUE9SVEFOVDogYm1z X3JlcGxhY2VfbWVtYmVycyBtb2RpZmllcy9mcmVlcyB0aGUgZmlyc3QgYXJndW1lbnQgKi8KKwly ZXN1bHRfYm1zID0gYm1zX3JlcGxhY2VfbWVtYmVycyhibXMxLCBibXMyKTsKKwkvKiBibXMxIGlz IG5vdyBpbnZhbGlkLCBkb24ndCBmcmVlIGl0ICovCisKKwlpZiAoYm1zMikKKwkJYm1zX2ZyZWUo Ym1zMik7CisKKwlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOwor CisJcmVzdWx0ID0gZW5jb2RlX2Jtc190b19ieXRlYShyZXN1bHRfYm1zKTsKKwlibXNfZnJlZShy ZXN1bHRfYm1zKTsKKworCVBHX1JFVFVSTl9CWVRFQV9QKHJlc3VsdCk7Cit9CisKK0RhdHVtCit0 ZXN0X2Jtc19qb2luKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1zMSA9IE5V TEwsCisJCQkgICAqYm1zMiA9IE5VTEw7CisJQml0bWFwc2V0ICAqcmVzdWx0X2JtczsKKwlieXRl YQkgICAqcmVzdWx0OworCisJaWYgKCFQR19BUkdJU05VTEwoMCkpCisJCWJtczEgPSBkZWNvZGVf Ynl0ZWFfdG9fYm1zKFBHX0dFVEFSR19CWVRFQV9QUCgwKSk7CisKKwlpZiAoIVBHX0FSR0lTTlVM TCgxKSkKKwkJYm1zMiA9IGRlY29kZV9ieXRlYV90b19ibXMoUEdfR0VUQVJHX0JZVEVBX1BQKDEp KTsKKworCS8qIElNUE9SVEFOVDogYm1zX2pvaW4gbW9kaWZpZXMvZnJlZXMgdGhlIGZpcnN0IGFy Z3VtZW50ICovCisJcmVzdWx0X2JtcyA9IGJtc19qb2luKGJtczEsIGJtczIpOworCS8qIGJtczEg aXMgbm93IGludmFsaWQhIERvbid0IGZyZWUgaXQgKi8KKworCWlmIChibXMyKQorCQlibXNfZnJl ZShibXMyKTsKKworCWlmIChyZXN1bHRfYm1zID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7 CisKKwlyZXN1bHQgPSBlbmNvZGVfYm1zX3RvX2J5dGVhKHJlc3VsdF9ibXMpOworCWJtc19mcmVl KHJlc3VsdF9ibXMpOworCisJUEdfUkVUVVJOX0JZVEVBX1AocmVzdWx0KTsKK30KKworRGF0dW0K K3Rlc3RfYm1zX2hhc2hfdmFsdWUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlCaXRtYXBzZXQgICpi bXMgPSBOVUxMOworCXVpbnQzMgkJaGFzaF9yZXN1bHQ7CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgw KSkKKwkJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMCkpOwor CisJaGFzaF9yZXN1bHQgPSBibXNfaGFzaF92YWx1ZShibXMpOworCisJaWYgKGJtcykKKwkJYm1z X2ZyZWUoYm1zKTsKKworCVBHX1JFVFVSTl9JTlQzMihoYXNoX3Jlc3VsdCk7Cit9CisKK0RhdHVt Cit0ZXN0X2JpdG1hcF9oYXNoKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQml0bWFwc2V0ICAqYm1z ID0gTlVMTDsKKwlCaXRtYXBzZXQgICpibXNfcHRyOworCXVpbnQzMgkJaGFzaF9yZXN1bHQ7CisK KwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19H RVRBUkdfQllURUFfUFAoMCkpOworCisJYm1zX3B0ciA9IGJtczsKKworCS8qIENhbGwgYml0bWFw X2hhc2ggKi8KKwloYXNoX3Jlc3VsdCA9IGJpdG1hcF9oYXNoKCZibXNfcHRyLCBzaXplb2YoQml0 bWFwc2V0ICopKTsKKworCS8qIENsZWFuIHVwICovCisJaWYgKCFQR19BUkdJU05VTEwoMCkgJiYg Ym1zX3B0cikKKwkJYm1zX2ZyZWUoYm1zX3B0cik7CisKKwlQR19SRVRVUk5fSU5UMzIoaGFzaF9y ZXN1bHQpOworfQorCitEYXR1bQordGVzdF9iaXRtYXBfbWF0Y2goUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKKwkJCSAgICpibXMyID0gTlVMTDsKKwlCaXRt YXBzZXQgICpibXNfcHRyMSwKKwkJCSAgICpibXNfcHRyMjsKKwlpbnQJCQltYXRjaF9yZXN1bHQ7 CisKKwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwkJYm1zMSA9IGRlY29kZV9ieXRlYV90b19ibXMo UEdfR0VUQVJHX0JZVEVBX1BQKDApKTsKKworCWlmICghUEdfQVJHSVNOVUxMKDEpKQorCQlibXMy ID0gZGVjb2RlX2J5dGVhX3RvX2JtcyhQR19HRVRBUkdfQllURUFfUFAoMSkpOworCisJLyogU2V0 IHVwIHBvaW50ZXJzIHRvIHRoZSBCaXRtYXBzZXRzICovCisJYm1zX3B0cjEgPSBibXMxOworCWJt c19wdHIyID0gYm1zMjsKKworCS8qIENhbGwgYml0bWFwX21hdGNoIHdpdGggYWRkcmVzc2VzIG9m IHRoZSBCaXRtYXBzZXQgcG9pbnRlcnMgKi8KKwltYXRjaF9yZXN1bHQgPSBiaXRtYXBfbWF0Y2go JmJtc19wdHIxLCAmYm1zX3B0cjIsIHNpemVvZihCaXRtYXBzZXQgKikpOworCisJLyogQ2xlYW4g dXAgKi8KKwlpZiAoYm1zMSkKKwkJYm1zX2ZyZWUoYm1zMSk7CisJaWYgKGJtczIpCisJCWJtc19m cmVlKGJtczIpOworCisJUEdfUkVUVVJOX0lOVDMyKG1hdGNoX3Jlc3VsdCk7Cit9CisKK0RhdHVt Cit0ZXN0X3JhbmRvbV9vcGVyYXRpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcGdfcHJuZ19z dGF0ZSBzdGF0ZTsKKwlpbnQzMgkJc2VlZDsKKwlpbnQzMgkJbnVtX29wczsKKwlCaXRtYXBzZXQg ICpibXMgPSBOVUxMOworCWludAkJCW9wLAorCQkJCW1lbWJlcjsKKwlpbnQJCQl0b3RhbF9vcHMg PSAwOworCisJc2VlZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwludW1fb3BzID0gUEdfR0VUQVJH X0lOVDMyKDEpOworCisJcGdfcHJuZ19zZWVkKCZzdGF0ZSwgKHVpbnQ2NCkgc2VlZCk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IG51bV9vcHM7IGkrKykKKwl7CisJCW9wID0gcGdfcHJuZ191aW50 MzIoJnN0YXRlKSAlIDM7CS8qIDA9YWRkLCAxPWRlbGV0ZSwgMj10ZXN0ICovCisJCW1lbWJlciA9 IHBnX3BybmdfdWludDMyKCZzdGF0ZSkgJSAxMDAwOworCisJCXN3aXRjaCAob3ApCisJCXsKKwkJ CWNhc2UgMDoJCQkJLyogYWRkICovCisJCQkJYm1zID0gYm1zX2FkZF9tZW1iZXIoYm1zLCBtZW1i ZXIpOworCQkJCXRvdGFsX29wcysrOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgkJCQkvKiBkZWxl dGUgKi8KKwkJCQlpZiAoYm1zICE9IE5VTEwpCisJCQkJeworCQkJCQlibXMgPSBibXNfZGVsX21l bWJlcihibXMsIG1lbWJlcik7CisJCQkJCXRvdGFsX29wcysrOworCQkJCX0KKwkJCQlicmVhazsK KwkJCWNhc2UgMjoJCQkJLyogdGVzdCBtZW1iZXJzaGlwICovCisJCQkJaWYgKGJtcyAhPSBOVUxM KQorCQkJCXsKKwkJCQkJYm1zX2lzX21lbWJlcihtZW1iZXIsIGJtcyk7CisJCQkJCXRvdGFsX29w cysrOworCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChibXMpCisJCWJtc19mcmVl KGJtcyk7CisKKwlQR19SRVRVUk5fSU5UMzIodG90YWxfb3BzKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuY29udHJvbCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvdGVzdF9iaXRtYXBzZXQuY29udHJvbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGQwMmVjOGJmMGEKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0 LmNvbnRyb2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgQml0bWFw c2V0JworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGly L3Rlc3RfYml0bWFwc2V0JworcmVsb2NhdGFibGUgPSB0cnVlCi0tIAoyLjQ5LjAKCg== --68cab507_7668d726_6415--