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.96) (envelope-from ) id 1wJtAP-000OCH-1I for pgsql-hackers@arkaria.postgresql.org; Mon, 04 May 2026 13:16:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wJtAO-007Es0-0d for pgsql-hackers@arkaria.postgresql.org; Mon, 04 May 2026 13:16:56 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wJtAN-007Erp-0z for pgsql-hackers@lists.postgresql.org; Mon, 04 May 2026 13:16:55 +0000 Received: from relay6-d.mail.gandi.net ([2001:4b98:dc4:8::226]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wJtAD-000000009Bq-2XCV for pgsql-hackers@lists.postgresql.org; Mon, 04 May 2026 13:16:54 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 836DC3ED0C; Mon, 4 May 2026 13:16:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1777900597; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=MpuuDlNPNeeByPahSTfthRB0KI0lzJNm9HWq4bdViSo=; b=Rgdgik9SrwIqgCqoI5oRL2AUqp/Od5YXx3OPzjSnP9GL1mo15cBYcTuYBfT6Sijwj1LXCQ 40ztR1RyQfOiyZNo+/u+EcKwR3XwFwoojaQik9MZz3lRtJhCQTbGHVftf6NJiidmjx+EbF 5WsoO4jjIs5CPCEoPFTjzSwOVEaDGyg2eirHqeSMTJE+V5fw6wjyTjmvC6zgsWBI7iaOkQ MPNMDQdfTXBtwKIYuBBHDo7DgPvSnWOEOWZu9uP4Q5eMQrEFnBinT+R9dKXf0iEhsCcH1f Cs+8DEFHe61vpJbbdkTX/oy/6i7BKmfy1b7Ff86UwuMcYPSlFvtp7WSnRLK7UA== Content-Type: multipart/mixed; boundary="------------A1XhfcKQavF09SLS0JT4gnVi" Message-ID: <9e1331e1-93a0-4e27-934a-17b89342be4d@vondra.me> Date: Mon, 4 May 2026 15:16:34 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Changing the state of data checksums in a running cluster To: Daniel Gustafsson , SATYANARAYANA NARLAPURAM Cc: Ayush Tiwari , PostgreSQL Hackers , Heikki Linnakangas , Andres Freund , Bernd Helmle , Michael Paquier , Michael Banck References: <7357A519-3391-4F07-BC69-5C9C2B120792@yesql.se> <452D5390-4F89-4DED-9835-8E9EA2A01E19@yesql.se> <4020B0AE-6286-462F-BD50-3AAD170F08C9@yesql.se> <30E2C103-2F50-4F9D-8868-E057250F55CA@yesql.se> <17BD06EB-3741-4921-AF60-6575FB4784ED@yesql.se> <9197F930-DDEB-4CAC-82A2-16FEC715CCE8@yesql.se> <6011EEE0-2D34-4A63-8B88-2437173486FE@yesql.se> <525E0691-FDAD-4194-9228-592A2DB96749@yesql.se> Content-Language: en-US From: Tomas Vondra In-Reply-To: <525E0691-FDAD-4194-9228-592A2DB96749@yesql.se> X-GND-Sasl: tomas@vondra.me X-GND-State: clean X-GND-Score: -100 X-GND-Cause: dmFkZTE0kxljNWAuAEw0Dk51i6y3JE7f+40/ljCoATQ09CX3nt5MSXRmsaOtdvqXJXin4wRQWV+e3XIS1lDiYwU3inU8rbAl6094PBtZ+ObQprF2SpsvWEmJG9bA952LlgWPutwWs+UEDn062XGc5XK0lz6pIBbrB6tIiVDQjyexlxXc+wq7PR482ULyXfRuiWtMdSeMa4eCpnm/+q1kcPIB2oP0vWrx1FOIuPLc0fRLSLuHdIRvuUPqitDufHceLGbnWvmttLiHcG22I89xg97EYNNoGcAh55swfSLzTTqirD9qppVsMHXtZaWfJ0lJEW4GNcQ7pCl8O0qr1OpHX/tr8BpfCPOtpLYnggW2+FMD2l24KgGE5+Ftef1uVcOuA/Cdb6bkg3PuA+GqNs52uhNyh3D5cJ3bDhOZfoQmEKOR+Co3/Eryux2gHOHue/axPC4drgtfyn6RuU8Rw2CVPk4Yn9RLm1/hzBizHA9vmFmGuM5T0pA9JfaoUHSjbFTNLzBilpwUxoUff4g1a3Ky4fTyVDdbeojB1ZktA+dpatuSClB8caYB4nj2nhPNbmUvkwBlJ04ELuKCvRld3doOEziwMCVFy8jQIciKYyNUoL3X6DQuEsmHhroZcbS1CExPacUrHg/T+GnaqkDEC8hL9WXTNDOLIEC9TVW4CbSei4lSTUfajQ List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Thanks for getting this feature pushed, and for resolving the failures reported since the feature freeze. I consider this to be an important improvement, not just for the feature itself, but also because of all the useful infrastructure it added. Attached is a refined version of the TAP tests already posted by Daniel some time ago [1]. Unfortunately, that .txt did not apply cleanly for some reason, so here's a better version. I found these tests quite useful when reasoning about how the patch behaves in concurrent environment (e.g. with multiple sessions triggering checksum enable/disable, or with a checkpoint, crashes, etc). At this point all the tests pass, but there are a couple cases with correct but slightly surprising behavior, worth discussing. Which is what this e-mail is going to be about. I'll explain what the TAP tests aim to do first, and then discuss the slightly surprising behavior. It's not meant for inclusion into PG19, at least not in this shape - I wrote those TAP tests while investigating some of the earlier failures and/or when wondering about behavior in various situations (sequence of concurrent steps, race conditions, ...). So it's more of an exhaustive, and the tests are somewhat redundant (N+1 is often just (N + some small tweak)). I can imagine distilling it into a tiny subset, and adding that. But that's up to discussion. But that's for later. Let me briefly explain what the various TAP tests aim to do. From the very beginning, my main concern regarding this patch was race conditions when updating the shared state about effective data_checksum_version. Because the state is effectively split into about three or four places: * LocalDataChecksumVersion (local cache) * XLogCtl->data_checksum_version (XLogCtl->info_lck) * ControlFile->data_checksum_version (ControlFileLock) * state in control file on disk These pieces are protected by different locks, the protocol for updating and/or reading the various flags is not trivial (and some of the fixed issues were due to ControlFile->data_checksum_version being updated from a place that shouldn't have). So the primary goal of the TAP tests was to check for race conditions by leveraging injection points to step through concurrent processes in a deterministic way. The first couple patches (0001-0004) add debug logging and injection points into a lot of places. And by "a lot" I mean ~80 new injection points, which is about the number of injection points we have in master now. Anyway, this allows stepping through concurrent checksum changes, and also checksum change vs. checkpointer. Then come the actual TAP tests: 1) 0005-TAP-10-concurrent-checksum-changes.patch Two concurrent checksum changes. The first one gets paused at an injection point, then the second one gets initiated. 2) 0006-TAP-11-concurrency-with-checkpoints.patch A checksum change + checkpoint. The change gets paused at an injection point, a synchronous checkpoint is performed. 3) 0007-TAP-12-crashes-at-injection-points.patch Similar to 0006, but with a crash + recovery. A checksum change gets paused at an injection point, a synchronous checkpoint is performed. The changes gets wpken up and either completes, or pauses on a different injection point. A restart/crash happens. 4) 0008-TAP-13-concurrency-with-checkpoint-REDO.patch Similar to 0007, but the checkpoint is not synchronous - happens in the background, so that the TAP can step through both sides and interleave them in an arbitrary way. This matters because the checksum change updates the different state pieces (XlogCtl/ControlFile), while the checkpointer reads them to record initial state for REDO etc. 5) 0009-TAP-14-checkpoints-with-crashes.patch Similar to 0008, except that the steps are more fine grained, and focused on two particular cases with surprisingly different final state. AFAIK everything works as expected, except for two cases in the "TAP 012" test. One for the "enabling" direction, one for the "disabling" direction. I'm going to discuss the "enabling" direction, I believe the other case is just a mirror with the same root cause. The TAP 012 tests checksum change with a concurrent checkpoint, followed by a crash, and tests the final state. It pauses the change at an injection point, does a checkpoint, proceeds to the next injection point, crashes and does recovery. The expectation is that the final state "flips" at some injection point, once it gets further enough, and stays there. But what actually happens is this: a) test_checksum_transition( 'disabled', 'enable', undef, 'datachecksums-enable-inprogress-checksums-end', 'datachecksums-enable-checksums-start', 'off'); b) test_checksum_transition( 'disabled', 'enable', undef, 'datachecksums-enable-checksums-start', 'datachecksums-enable-checksums-after-xlog', 'on'); c) test_checksum_transition( 'disabled', 'enable', 'datachecksums-enable-checksums-start', 'datachecksums-enable-checksums-after-xlogs', 'datachecksums-enable-checksums-after-xlogctl', 'off'); This says that if the checkpoint happens after 'datachecksums-enable-inprogress-checksums-end' or after 'datachecksums-enable-checksums-after-xlog', we end up with 'off' (i.e. enabling checksums fails). But if the checkpoint happens after 'datachecksums-enable-checksums-start', we end up with "on" (after recovery). This is a bit surprising, because that injection point is before 'datachecksums-enable-checksums-after-xlog'. So the enabling process gets further and further, but the final state flips off -> on -> off, contradicting the expectation that it changes once. I haven't quite wrapped my head around it yet, but my understanding is this is due to a race condition between the checksum launcher (writing XLOG2_CHECKSUMS and updating the shmem state), and the checkpointer (reading the shmem state and generating REDO). The launcher does this sequence of steps: 1) write XLOG2_CHECKSUMS with new state 2) update XLogCtl->data_checksum_version 3) update ControlFile->data_checksum_version 4) UpdateControlFile() 5) emits barrier while the checkpointer (CreateCheckPoint) does this: A) read XLogCtl->data_checksum_version (while holding insert locks) B) insert XLOG_CHECKPOINT_REDO (reads XLogCtl->data_checksum_version) C) UpdateControlFile() The outcome depends on how exactly these two sequences interleave. For example, this can happen: 1) write XLOG2_CHECKSUMS with new state A) read XLogCtl->data_checksum_version (while holding insert locks) B) insert XLOG_CHECKPOINT_REDO (reads XLogCtl->data_checksum_version) C) UpdateControlFile() 2) update XLogCtl->data_checksum_version 3) update ControlFile->data_checksum_version 4) UpdateControlFile() 5) emits barrier Which means the XLOG_CHECKPOINT_REDO will be after XLOG2_CHECKSUMS (and so redo won't see it), but the checkpoint will still get the old checksum state from XLogCtl. And so the outcome is "off", per case (c). But it can also happen what case (b) does: A) read XLogCtl->data_checksum_version (while holding insert locks) B) insert XLOG_CHECKPOINT_REDO (reads XLogCtl->data_checksum_version) C) UpdateControlFile() 1) write XLOG2_CHECKSUMS with new state 2) update XLogCtl->data_checksum_version 3) update ControlFile->data_checksum_version 4) UpdateControlFile() 5) emits barrier In which case the REDO will have the old state, but the recovery will read the XLOG2_CHECKSUMS, and so end up with "on". This is the root cause of the surprising behavior in TAP 012, I think. I attempted to trigger these race conditions in TAP 013, but without much success. In the end I realized it probably needs more control, waiting for the other process to hit the next injection point before unpausing the current one. TAP 014 does that, and it shows that with the right interleaving of steps the (c) case can end up with both "on" and "off" final state. As I said, I don't claim I fully understand this yet. But I wouldn't call this "bug" - AFAICS it won't produce an incorrect final state (I haven't seen any such cases). Still, I wonder if there's a potential issue I failed to notice. The other question I had when looking at this (concurrency with checkpoints) is what we get by doing MyProc->delayChkptFlags |= DELAY_CHKPT_START; whenever updating the state in SetDataChecksums... functions. Because the only thing that guarantees is the updates happen on one side of the checkpoint record. What does that give us, actually? It does not seem to prevent this surprising behavior, and it does not say the XLOG2_CHECKSUMS happens before/after the XLOG_CHECKPOINT_REDO. regards [1] https://www.postgresql.org/message-id/9197F930-DDEB-4CAC-82A2-16FEC715CCE8%40yesql.se -- Tomas Vondra --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0001-debug-checkpoint-logging.patch" Content-Disposition: attachment; filename="0001-debug-checkpoint-logging.patch" Content-Transfer-Encoding: base64 RnJvbSA2OTYwNzdhY2Y4NDJjZTFkZTBiYmEzMjBiMTBjMThlNWMyMjg3MGUxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogTW9uLCAxMyBBcHIgMjAyNiAxNDozNjo0MyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg MDEvMTNdIGRlYnVnOiBjaGVja3BvaW50IGxvZ2dpbmcKCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jIHwgNyArKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNyBpbnNl cnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Zy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDE4ZDVkZWUw NmUwLi45NGI3YWZlYjZjNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAt NzU2OCw2ICs3NTY4LDkgQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJICovCiAJ V0FMSW5zZXJ0TG9ja1JlbGVhc2UoKTsKIAorCWVsb2coTE9HLCAiQ3JlYXRlQ2hlY2tQb2lu dCBzdGFydCByZWRvICVYLyVYIGNoZWNrc3VtcyAlZCIsCisJCSBMU05fRk9STUFUX0FSR1Mo UmVkb1JlY1B0ciksIGNoZWNrUG9pbnQuZGF0YUNoZWNrc3VtU3RhdGUpOworCiAJLyoKIAkg KiBJZiB0aGlzIGlzIGFuIG9ubGluZSBjaGVja3BvaW50LCB3ZSBoYXZlIG5vdCB5ZXQgZGV0 ZXJtaW5lZCB0aGUgcmVkbwogCSAqIHBvaW50LiBXZSBkbyBzbyBub3cgYnkgaW5zZXJ0aW5n IHRoZSBzcGVjaWFsIFhMT0dfQ0hFQ0tQT0lOVF9SRURPCkBAIC03ODExLDYgKzc4MTQsMTAg QEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJICovCiAJRU5EX0NSSVRfU0VDVElP TigpOwogCisJZWxvZyhMT0csICJDcmVhdGVDaGVja1BvaW50IGVuZCBsc24gJVgvJVggcmVk byAlWC8lWCBjaGVja3N1bXMgJWQiLAorCQkgTFNOX0ZPUk1BVF9BUkdTKHJlY3B0ciksIExT Tl9GT1JNQVRfQVJHUyhSZWRvUmVjUHRyKSwKKwkJIGNoZWNrUG9pbnQuZGF0YUNoZWNrc3Vt U3RhdGUpOworCiAJLyoKIAkgKiBXQUwgc3VtbWFyaWVzIGVuZCB3aGVuIHRoZSBuZXh0IFhM T0dfQ0hFQ0tQT0lOVF9SRURPIG9yCiAJICogWExPR19DSEVDS1BPSU5UX1NIVVRET1dOIHJl Y29yZCBpcyByZWFjaGVkLiBUaGlzIGlzIHRoZSBmaXJzdCBwb2ludAotLSAKMi41NC4wCgo= --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0002-debug-state-transitions.patch" Content-Disposition: attachment; filename="0002-debug-state-transitions.patch" Content-Transfer-Encoding: base64 RnJvbSAxNWMyMjM3YjAyY2JmOTM1NThmNmY4MTEwZjA0NmFjY2U5NzZlMGU0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCA4IEFwciAyMDI2IDIyOjA3OjIxICswMjAwClN1YmplY3Q6IFtQQVRDSCAw Mi8xM10gZGVidWc6IHN0YXRlIHRyYW5zaXRpb25zCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2cuYyB8IDEyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDEgZmlsZSBjaGFuZ2VkLCAxMjUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYwppbmRleCA5NGI3YWZlYjZjNy4uNzIxMTBkOTJjOGIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTQyODgsMTIgKzQyODgsMTQgQEAgSW5pdENvbnRy b2xGaWxlKHVpbnQ2NCBzeXNpZGVudGlmaWVyLCB1aW50MzIgZGF0YV9jaGVja3N1bV92ZXJz aW9uKQogCUNvbnRyb2xGaWxlLT53YWxfbG9nX2hpbnRzID0gd2FsX2xvZ19oaW50czsKIAlD b250cm9sRmlsZS0+dHJhY2tfY29tbWl0X3RpbWVzdGFtcCA9IHRyYWNrX2NvbW1pdF90aW1l c3RhbXA7CiAJQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IGRhdGFfY2hl Y2tzdW1fdmVyc2lvbjsKKwllbG9nKExPRywgIkluaXRDb250cm9sRmlsZSBDb250cm9sRmls ZS0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gJXUiLCBkYXRhX2NoZWNrc3VtX3ZlcnNpb24p OwogCiAJLyoKIAkgKiBTZXQgdGhlIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiB2YWx1ZSBpbnRv IFhMb2dDdGwsIHdoaWNoIGlzIHdoZXJlIGFsbAogCSAqIHByb2Nlc3NlcyBnZXQgdGhlIGN1 cnJlbnQgdmFsdWUgZnJvbS4KIAkgKi8KIAlYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNp b24gPSBkYXRhX2NoZWNrc3VtX3ZlcnNpb247CisJZWxvZyhMT0csICJJbml0Q29udHJvbEZp bGUgWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gJXUiLCBkYXRhX2NoZWNrc3Vt X3ZlcnNpb24pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDc1Myw2ICs0NzU1LDkgQEAgdm9p ZAogU2V0RGF0YUNoZWNrc3Vtc09uSW5Qcm9ncmVzcyh2b2lkKQogewogCXVpbnQ2NAkJYmFy cmllcjsKKwl1aW50MzIJZGF0YV9jaGVja3N1bV92ZXJzaW9uOworCisJZWxvZyhMT0csICJT ZXREYXRhQ2hlY2tzdW1zT25JblByb2dyZXNzIC8gc3RhcnQiKTsKIAogCS8qCiAJICogVGhl IHN0YXRlIHRyYW5zaXRpb24gaXMgcGVyZm9ybWVkIGluIGEgY3JpdGljYWwgc2VjdGlvbiB3 aXRoCkBAIC00NzY0LDIwICs0NzY5LDMyIEBAIFNldERhdGFDaGVja3N1bXNPbkluUHJvZ3Jl c3Modm9pZCkKIAlYTG9nQ2hlY2tzdW1zKFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19P Tik7CiAKIAlTcGluTG9ja0FjcXVpcmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKKwlkYXRhX2No ZWNrc3VtX3ZlcnNpb24gPSBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb247CiAJWExv Z0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gUEdfREFUQV9DSEVDS1NVTV9JTlBST0dS RVNTX09OOwogCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCisJZWxv ZyhMT0csICJTZXREYXRhQ2hlY2tzdW1zT25JblByb2dyZXNzIFhMb2dDdGwtPmRhdGFfY2hl Y2tzdW1fdmVyc2lvbiAldSA9PiAldSIsCisJCSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24sIFBH X0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTik7CisKIAlMV0xvY2tBY3F1aXJlKENvbnRy b2xGaWxlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWVsb2coTE9HLCAiU2V0RGF0YUNoZWNr c3Vtc09uSW5Qcm9ncmVzcyBDb250cm9sRmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uICAl dSA9PiAldSIsCisJCSBDb250cm9sRmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uLCBQR19E QVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT04pOworCiAJQ29udHJvbEZpbGUtPmRhdGFfY2hl Y2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTjsKIAlVcGRh dGVDb250cm9sRmlsZSgpOwogCUxXTG9ja1JlbGVhc2UoQ29udHJvbEZpbGVMb2NrKTsKIAor CWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09uSW5Qcm9ncmVzcyAvIEVtaXRQcm9jU2ln bmFsQmFycmllcihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTiki KTsKIAliYXJyaWVyID0gRW1pdFByb2NTaWduYWxCYXJyaWVyKFBST0NTSUdOQUxfQkFSUklF Ul9DSEVDS1NVTV9JTlBST0dSRVNTX09OKTsKIAogCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdz ICY9IH5ERUxBWV9DSEtQVF9TVEFSVDsKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKKwllbG9n KExPRywgIlNldERhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3MgLyBXYWl0Rm9yUHJvY1NpZ25h bEJhcnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX0lOUFJPR1JFU1NfT04pIik7 CiAJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIpOworCisJZWxvZyhMT0csICJT ZXREYXRhQ2hlY2tzdW1zT25JblByb2dyZXNzIC8gZW5kIik7CiB9CiAKIC8qCkBAIC00ODA2 LDYgKzQ4MjMsOSBAQCB2b2lkCiBTZXREYXRhQ2hlY2tzdW1zT24odm9pZCkKIHsKIAl1aW50 NjQJCWJhcnJpZXI7CisJdWludDMyCWRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKKworCWVsb2co TE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09uIC8gc3RhcnQiKTsKIAogCVNwaW5Mb2NrQWNxdWly ZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCkBAIC00ODMzLDI1ICs0ODUzLDM5IEBAIFNldERh dGFDaGVja3N1bXNPbih2b2lkKQogCVhMb2dDaGVja3N1bXMoUEdfREFUQV9DSEVDS1NVTV9W RVJTSU9OKTsKIAogCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2spOworCWRh dGFfY2hlY2tzdW1fdmVyc2lvbiA9IFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbjsK IAlYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBQR19EQVRBX0NIRUNLU1VNX1ZF UlNJT047CiAJU3BpbkxvY2tSZWxlYXNlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAKKwllbG9n KExPRywgIlNldERhdGFDaGVja3N1bXNPbiAvIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVy c2lvbiAldSA9PiAldSIsCisJCSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24sIFBHX0RBVEFfQ0hF Q0tTVU1fVkVSU0lPTik7CisKIAkvKgogCSAqIFVwZGF0ZSB0aGUgY29udHJvbGZpbGUgYmVm b3JlIHdhaXRpbmcgc2luY2UgaWYgd2UgaGF2ZSBhbiBpbW1lZGlhdGUKIAkgKiBzaHV0ZG93 biB3aGlsZSB3YWl0aW5nIHdlIHdhbnQgdG8gY29tZSBiYWNrIHVwIHdpdGggY2hlY2tzdW1z IGVuYWJsZWQuCiAJICovCiAJTFdMb2NrQWNxdWlyZShDb250cm9sRmlsZUxvY2ssIExXX0VY Q0xVU0lWRSk7CisKKwllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPbiAvIENvbnRyb2xG aWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gJXUgPT4gJXUiLAorCQkgQ29udHJvbEZpbGUt PmRhdGFfY2hlY2tzdW1fdmVyc2lvbiwgUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OKTsKKwog CUNvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBQR19EQVRBX0NIRUNLU1VN X1ZFUlNJT047CiAJVXBkYXRlQ29udHJvbEZpbGUoKTsKIAlMV0xvY2tSZWxlYXNlKENvbnRy b2xGaWxlTG9jayk7CiAKKwllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPbiAvIEVtaXRQ cm9jU2lnbmFsQmFycmllcihQR19EQVRBX0NIRUNLU1VNX1ZFUlNJT04pIik7CiAJYmFycmll ciA9IEVtaXRQcm9jU2lnbmFsQmFycmllcihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1f T04pOwogCiAJTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJj0gfkRFTEFZX0NIS1BUX1NUQVJU OwogCUVORF9DUklUX1NFQ1RJT04oKTsKIAorCWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vt c09uIC8gUmVxdWVzdENoZWNrcG9pbnQoQ0hFQ0tQT0lOVF9GT1JDRSB8IENIRUNLUE9JTlRf V0FJVCB8IENIRUNLUE9JTlRfRkFTVCkiKTsKIAlSZXF1ZXN0Q2hlY2twb2ludChDSEVDS1BP SU5UX0ZPUkNFIHwgQ0hFQ0tQT0lOVF9XQUlUIHwgQ0hFQ0tQT0lOVF9GQVNUKTsKKworCWVs b2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09uIC8gV2FpdEZvclByb2NTaWduYWxCYXJyaWVy KFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTikiKTsKIAlXYWl0Rm9yUHJvY1NpZ25hbEJhcnJp ZXIoYmFycmllcik7CisKKwllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPbiAvIGVuZCIp OwogfQogCiAvKgpAQCAtNDg3MSw2ICs0OTA1LDkgQEAgdm9pZAogU2V0RGF0YUNoZWNrc3Vt c09mZih2b2lkKQogewogCXVpbnQ2NAkJYmFycmllcjsKKwl1aW50MzIJZGF0YV9jaGVja3N1 bV92ZXJzaW9uOworCisJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1zT2ZmIC8gc3RhcnQi KTsKIAogCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCkBAIC00ODk5 LDIwICs0OTM2LDMyIEBAIFNldERhdGFDaGVja3N1bXNPZmYodm9pZCkKIAkJWExvZ0NoZWNr c3VtcyhQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGKTsKIAogCQlTcGluTG9ja0Fj cXVpcmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKKwkJZGF0YV9jaGVja3N1bV92ZXJzaW9uID0g WExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uOwogCQlYTG9nQ3RsLT5kYXRhX2NoZWNr c3VtX3ZlcnNpb24gPSBQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGOwogCQlTcGlu TG9ja1JlbGVhc2UoJlhMb2dDdGwtPmluZm9fbGNrKTsKIAorCQllbG9nKExPRywgIlNldERh dGFDaGVja3N1bXNPZmYgLyBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gJXUgPT4g JXUiLAorCQkJIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiwgUEdfREFUQV9DSEVDS1NVTV9JTlBS T0dSRVNTX09GRik7CisKIAkJTFdMb2NrQWNxdWlyZShDb250cm9sRmlsZUxvY2ssIExXX0VY Q0xVU0lWRSk7CisKKwkJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1zT2ZmIC8gQ29udHJv bEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiAldSA9PiAldSIsCisJCQkgQ29udHJvbEZp bGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiwgUEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNT X09GRik7CisKIAkJQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RB VEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkY7CiAJCVVwZGF0ZUNvbnRyb2xGaWxlKCk7CiAJ CUxXTG9ja1JlbGVhc2UoQ29udHJvbEZpbGVMb2NrKTsKIAorCQllbG9nKExPRywgIlNldERh dGFDaGVja3N1bXNPZmYgLyBFbWl0UHJvY1NpZ25hbEJhcnJpZXIoUEdfREFUQV9DSEVDS1NV TV9JTlBST0dSRVNTX09GRikiKTsKIAkJYmFycmllciA9IEVtaXRQcm9jU2lnbmFsQmFycmll cihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkYpOwogCiAJCU15 UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICY9IH5ERUxBWV9DSEtQVF9TVEFSVDsKIAkJRU5EX0NS SVRfU0VDVElPTigpOwogCisJCWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIFJl cXVlc3RDaGVja3BvaW50KENIRUNLUE9JTlRfRk9SQ0UgfCBDSEVDS1BPSU5UX1dBSVQgfCBD SEVDS1BPSU5UX0ZBU1QpIik7CiAJCVJlcXVlc3RDaGVja3BvaW50KENIRUNLUE9JTlRfRk9S Q0UgfCBDSEVDS1BPSU5UX1dBSVQgfCBDSEVDS1BPSU5UX0ZBU1QpOworCisJCWVsb2coTE9H LCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIFdhaXRGb3JQcm9jU2lnbmFsQmFycmllcihQR19E QVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGKSIpOwogCQlXYWl0Rm9yUHJvY1NpZ25hbEJh cnJpZXIoYmFycmllcik7CiAKIAkJLyoKQEAgLTQ5MzcsMjEgKzQ5ODYsMzUgQEAgU2V0RGF0 YUNoZWNrc3Vtc09mZih2b2lkKQogCVhMb2dDaGVja3N1bXMoUEdfREFUQV9DSEVDS1NVTV9P RkYpOwogCiAJU3BpbkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CisJZGF0YV9j aGVja3N1bV92ZXJzaW9uID0gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uOwogCVhM b2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hFQ0tTVU1fT0ZGOwog CVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCisJZWxvZyhMT0csICJT ZXREYXRhQ2hlY2tzdW1zT2ZmIC8gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uICV1 ID0+ICV1IiwKKwkJIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiwgUEdfREFUQV9DSEVDS1NVTV9P RkYpOworCiAJTFdMb2NrQWNxdWlyZShDb250cm9sRmlsZUxvY2ssIExXX0VYQ0xVU0lWRSk7 CisKKwllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPZmYgLyBDb250cm9sRmlsZS0+ZGF0 YV9jaGVja3N1bV92ZXJzaW9uICV1ID0+ICV1IiwKKwkJIENvbnRyb2xGaWxlLT5kYXRhX2No ZWNrc3VtX3ZlcnNpb24sIFBHX0RBVEFfQ0hFQ0tTVU1fT0ZGKTsKKwogCUNvbnRyb2xGaWxl LT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBQR19EQVRBX0NIRUNLU1VNX09GRjsKIAlVcGRh dGVDb250cm9sRmlsZSgpOwogCUxXTG9ja1JlbGVhc2UoQ29udHJvbEZpbGVMb2NrKTsKIAor CWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIEVtaXRQcm9jU2lnbmFsQmFycmll cihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fT0ZGKSIpOwogCWJhcnJpZXIgPSBFbWl0 UHJvY1NpZ25hbEJhcnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX09GRik7CiAK IAlNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmPSB+REVMQVlfQ0hLUFRfU1RBUlQ7CiAJRU5E X0NSSVRfU0VDVElPTigpOwogCisJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1zT2ZmIC8g UmVxdWVzdENoZWNrcG9pbnQoQ0hFQ0tQT0lOVF9GT1JDRSB8IENIRUNLUE9JTlRfV0FJVCB8 IENIRUNLUE9JTlRfRkFTVCkiKTsKIAlSZXF1ZXN0Q2hlY2twb2ludChDSEVDS1BPSU5UX0ZP UkNFIHwgQ0hFQ0tQT0lOVF9XQUlUIHwgQ0hFQ0tQT0lOVF9GQVNUKTsKKworCWVsb2coTE9H LCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIFdhaXRGb3JQcm9jU2lnbmFsQmFycmllcihQUk9D U0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fT0ZGKSIpOwogCVdhaXRGb3JQcm9jU2lnbmFsQmFy cmllcihiYXJyaWVyKTsKKworCWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIGVu ZCIpOwogfQogCiAvKgpAQCAtNDk2Niw5ICs1MDI5LDE0IEBAIHZvaWQKIEluaXRMb2NhbERh dGFDaGVja3N1bVN0YXRlKHZvaWQpCiB7CiAJQXNzZXJ0KEludGVycnVwdEhvbGRvZmZDb3Vu dCA+IDApOworCisJZWxvZyhMT0csICJJbml0TG9jYWxEYXRhQ2hlY2tzdW1TdGF0ZSBzdGFy dCAlZCIsIExvY2FsRGF0YUNoZWNrc3VtU3RhdGUpOworCiAJU3BpbkxvY2tBY3F1aXJlKCZY TG9nQ3RsLT5pbmZvX2xjayk7CiAJU2V0TG9jYWxEYXRhQ2hlY2tzdW1TdGF0ZShYTG9nQ3Rs LT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+ aW5mb19sY2spOworCisJZWxvZyhMT0csICJJbml0TG9jYWxEYXRhQ2hlY2tzdW1TdGF0ZSBl bmQgJWQiLCBMb2NhbERhdGFDaGVja3N1bVN0YXRlKTsKIH0KIAogdm9pZApAQCAtNTI3OCw3 ICs1MzQ2LDkgQEAgTG9jYWxQcm9jZXNzQ29udHJvbEZpbGUoYm9vbCByZXNldCkKIAlMb2Nh bENvbnRyb2xGaWxlID0gcGFsbG9jX29iamVjdChDb250cm9sRmlsZURhdGEpOwogCUNvbnRy b2xGaWxlID0gTG9jYWxDb250cm9sRmlsZTsKIAlSZWFkQ29udHJvbEZpbGUoKTsKKwllbG9n KExPRywgIkxvY2FsUHJvY2Vzc0NvbnRyb2xGaWxlIHN0YXJ0ICVkIiwgTG9jYWxEYXRhQ2hl Y2tzdW1TdGF0ZSk7CiAJU2V0TG9jYWxEYXRhQ2hlY2tzdW1TdGF0ZShDb250cm9sRmlsZS0+ ZGF0YV9jaGVja3N1bV92ZXJzaW9uKTsKKwllbG9nKExPRywgIkxvY2FsUHJvY2Vzc0NvbnRy b2xGaWxlIGVuZCAlZCIsIExvY2FsRGF0YUNoZWNrc3VtU3RhdGUpOwogfQogCiAvKgpAQCAt NTQzMCw5ICs1NTAwLDE1IEBAIFhMT0dTaG1lbUluaXQodm9pZCAqYXJnKQogCVhMb2dDdGwt Pkluc3RhbGxYTG9nRmlsZVNlZ21lbnRBY3RpdmUgPSBmYWxzZTsKIAlYTG9nQ3RsLT5XYWxX cml0ZXJTbGVlcGluZyA9IGZhbHNlOwogCisJZWxvZyhMT0csICJYTE9HU2htZW1Jbml0IC8g WExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uICV1ID0+ICV1IiwKKwkJIFhMb2dDdGwt PmRhdGFfY2hlY2tzdW1fdmVyc2lvbiwgQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVy c2lvbik7CisKIAkvKiBVc2UgdGhlIGNoZWNrc3VtIGluZm8gZnJvbSBjb250cm9sIGZpbGUg Ki8KIAlYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBDb250cm9sRmlsZS0+ZGF0 YV9jaGVja3N1bV92ZXJzaW9uOworCisJZWxvZyhMT0csICJYTE9HU2htZW1Jbml0IHN0YXJ0 ICVkIiwgTG9jYWxEYXRhQ2hlY2tzdW1TdGF0ZSk7CiAJU2V0TG9jYWxEYXRhQ2hlY2tzdW1T dGF0ZShYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24pOworCWVsb2coTE9HLCAiWExP R1NobWVtSW5pdCBlbmQgJWQiLCBMb2NhbERhdGFDaGVja3N1bVN0YXRlKTsKIAogCVNwaW5M b2NrSW5pdCgmWExvZ0N0bC0+SW5zZXJ0Lmluc2VydHBvc19sY2spOwogCVNwaW5Mb2NrSW5p dCgmWExvZ0N0bC0+aW5mb19sY2spOwpAQCAtNjYwNywxMyArNjY4MywyMiBAQCBTdGFydHVw WExPRyh2b2lkKQogCSAqLwogCWlmIChYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24g PT0gUEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNTX09OKQogCXsKKwkJdWludDMyCWRhdGFf Y2hlY2tzdW1fdmVyc2lvbjsKIAkJWExvZ0NoZWNrc3VtcyhQR19EQVRBX0NIRUNLU1VNX09G Rik7CiAKKwkJZWxvZyhMT0csICJTdGFydHVwWExPRyBzdGFydCAlZCIsIExvY2FsRGF0YUNo ZWNrc3VtU3RhdGUpOworCiAJCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2sp OworCQlkYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3Zl cnNpb247CiAJCVhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hF Q0tTVU1fT0ZGOwogCQlTZXRMb2NhbERhdGFDaGVja3N1bVN0YXRlKFhMb2dDdGwtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbik7CiAJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19s Y2spOwogCisJCWVsb2coTE9HLCAiU3RhcnR1cFhMT0cgWExvZ0N0bC0+ZGF0YV9jaGVja3N1 bV92ZXJzaW9uICV1ID0+ICV1IiwKKwkJCSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24sIFBHX0RB VEFfQ0hFQ0tTVU1fT0ZGKTsKKworCQllbG9nKExPRywgIlN0YXJ0dXBYTE9HIGVuZCAlZCIs IExvY2FsRGF0YUNoZWNrc3VtU3RhdGUpOworCiAJCWVyZXBvcnQoV0FSTklORywKIAkJCQll cnJtc2coImVuYWJsaW5nIGRhdGEgY2hlY2tzdW1zIHdhcyBpbnRlcnJ1cHRlZCIpLAogCQkJ CWVycmhpbnQoIkRhdGEgY2hlY2tzdW0gcHJvY2Vzc2luZyBtdXN0IGJlIG1hbnVhbGx5IHJl c3RhcnRlZCBmb3IgY2hlY2tzdW1zIHRvIGJlIGVuYWJsZWQiKSk7CkBAIC02NjI3LDEyICs2 NzEyLDIxIEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJICovCiAJaWYgKFhMb2dDdGwtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGKQog CXsKKwkJdWludDMyCQlkYXRhX2NoZWNrc3VtX3ZlcnNpb247CiAJCVhMb2dDaGVja3N1bXMo UEdfREFUQV9DSEVDS1NVTV9PRkYpOwogCisJCWVsb2coTE9HLCAiU3RhcnR1cFhMT0cgc3Rh cnQgJWQiLCBMb2NhbERhdGFDaGVja3N1bVN0YXRlKTsKKwogCQlTcGluTG9ja0FjcXVpcmUo JlhMb2dDdGwtPmluZm9fbGNrKTsKKwkJZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gWExvZ0N0 bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uOwogCQlYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3Zl cnNpb24gPSBQR19EQVRBX0NIRUNLU1VNX09GRjsKIAkJU2V0TG9jYWxEYXRhQ2hlY2tzdW1T dGF0ZShYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogCQlTcGluTG9ja1JlbGVh c2UoJlhMb2dDdGwtPmluZm9fbGNrKTsKKworCQllbG9nKExPRywgIlN0YXJ0dXBYTE9HIFhM b2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiAldSA9PiAldSIsCisJCQkgZGF0YV9jaGVj a3N1bV92ZXJzaW9uLCBQR19EQVRBX0NIRUNLU1VNX09GRik7CisKKwkJZWxvZyhMT0csICJT dGFydHVwWExPRyBlbmQgJWQiLCBMb2NhbERhdGFDaGVja3N1bVN0YXRlKTsKIAl9CiAKIAkv KgpAQCAtNzkxNyw2ICs4MDExLDggQEAgQ3JlYXRlRW5kT2ZSZWNvdmVyeVJlY29yZCh2b2lk KQogewogCXhsX2VuZF9vZl9yZWNvdmVyeSB4bHJlYzsKIAlYTG9nUmVjUHRyCXJlY3B0cjsK Kwl1aW50MzIJCW9sZF9kYXRhX2NoZWNrc3VtX3ZlcnNpb247CisJdWludDMyCQluZXdfZGF0 YV9jaGVja3N1bV92ZXJzaW9uOwogCiAJLyogc2FuaXR5IGNoZWNrICovCiAJaWYgKCFSZWNv dmVyeUluUHJvZ3Jlc3MoKSkKQEAgLTc5NDgsOSArODA0NCwxNCBAQCBDcmVhdGVFbmRPZlJl Y292ZXJ5UmVjb3JkKHZvaWQpCiAKIAkvKiBzdGFydCB3aXRoIHRoZSBsYXRlc3QgY2hlY2tz dW0gdmVyc2lvbiAoYXMgb2YgdGhlIGVuZCBvZiByZWNvdmVyeSkgKi8KIAlTcGluTG9ja0Fj cXVpcmUoJlhMb2dDdGwtPmluZm9fbGNrKTsKKwlvbGRfZGF0YV9jaGVja3N1bV92ZXJzaW9u ID0gQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKKwluZXdfZGF0YV9jaGVj a3N1bV92ZXJzaW9uID0gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uOwogCUNvbnRy b2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBYTG9nQ3RsLT5kYXRhX2NoZWNrc3Vt X3ZlcnNpb247CiAJU3BpbkxvY2tSZWxlYXNlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAKKwll bG9nKExPRywgIkNyZWF0ZUVuZE9mUmVjb3ZlcnlSZWNvcmQgQ29udHJvbEZpbGUtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbiAldSA9PiAldSIsCisJCSBvbGRfZGF0YV9jaGVja3N1bV92ZXJz aW9uLCBuZXdfZGF0YV9jaGVja3N1bV92ZXJzaW9uKTsKKwogCVVwZGF0ZUNvbnRyb2xGaWxl KCk7CiAJTFdMb2NrUmVsZWFzZShDb250cm9sRmlsZUxvY2spOwogCkBAIC04MjkzLDYgKzgz OTQsOSBAQCBDcmVhdGVSZXN0YXJ0UG9pbnQoaW50IGZsYWdzKQogCQkJCUNvbnRyb2xGaWxl LT5zdGF0ZSA9IERCX1NIVVRET1dORURfSU5fUkVDT1ZFUlk7CiAJCX0KIAorCQllbG9nKExP RywgIkNyZWF0ZVJlc3RhcnRQb2ludCBDb250cm9sRmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJz aW9uICV1ID0+ICV1IiwKKwkJCSBDb250cm9sRmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJzaW9u LCBsYXN0Q2hlY2tQb2ludC5kYXRhQ2hlY2tzdW1TdGF0ZSk7CisKIAkJLyogd2Ugc2hhbGwg c3RhcnQgd2l0aCB0aGUgbGF0ZXN0IGNoZWNrc3VtIHZlcnNpb24gKi8KIAkJQ29udHJvbEZp bGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IGxhc3RDaGVja1BvaW50LmRhdGFDaGVja3N1 bVN0YXRlOwogCkBAIC04NzUwLDYgKzg4NTQsOCBAQCBYTG9nQ2hlY2tzdW1zKHVpbnQzMiBu ZXdfdHlwZSkKIAogCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fWExPRzJfSUQsIFhMT0cyX0NI RUNLU1VNUyk7CiAJWExvZ0ZsdXNoKHJlY3B0cik7CisKKwllbG9nKExPRywgIlhMb2dDaGVj a3N1bXMgJWQgJVgvJVgiLCBuZXdfdHlwZSwgTFNOX0ZPUk1BVF9BUkdTKHJlY3B0cikpOwog fQogCiAvKgpAQCAtODg2Miw2ICs4OTY4LDcgQEAgeGxvZ19yZWRvKFhMb2dSZWFkZXJTdGF0 ZSAqcmVjb3JkKQogCXsKIAkJQ2hlY2tQb2ludAljaGVja1BvaW50OwogCQlUaW1lTGluZUlE CXJlcGxheVRMSTsKKwkJdWludDMyCQlkYXRhX2NoZWNrc3VtX3ZlcnNpb247CiAKIAkJbWVt Y3B5KCZjaGVja1BvaW50LCBYTG9nUmVjR2V0RGF0YShyZWNvcmQpLCBzaXplb2YoQ2hlY2tQ b2ludCkpOwogCQkvKiBJbiBhIFNIVVRET1dOIGNoZWNrcG9pbnQsIGJlbGlldmUgdGhlIGNv dW50ZXJzIGV4YWN0bHkgKi8KQEAgLTg5MzYsNiArOTA0MywxMCBAQCB4bG9nX3JlZG8oWExv Z1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJLyogQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRD b3B5IGFsd2F5cyB0cmFja3MgdGhlIGxhdGVzdCBja3B0IFhJRCAqLwogCQlMV0xvY2tBY3F1 aXJlKENvbnRyb2xGaWxlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCQllbG9nKExPRywgInhs b2dfcmVkbyAvIENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gJXUgPT4gJXUi LAorCQkJIENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24sIGNoZWNrUG9pbnQu ZGF0YUNoZWNrc3VtU3RhdGUpOworCiAJCUNvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5u ZXh0WGlkID0gY2hlY2tQb2ludC5uZXh0WGlkOwogCQlDb250cm9sRmlsZS0+ZGF0YV9jaGVj a3N1bV92ZXJzaW9uID0gY2hlY2tQb2ludC5kYXRhQ2hlY2tzdW1TdGF0ZTsKIApAQCAtOTE3 OCwxNiArOTI4OSwyMSBAQCB4bG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ ewogCQl4bF9jaGVja3BvaW50X3JlZG8gcmVkb19yZWM7CiAJCWJvb2wJCW5ld19zdGF0ZSA9 IGZhbHNlOworCQl1aW50MzIJCWRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKIAogCQltZW1jcHko JnJlZG9fcmVjLCBYTG9nUmVjR2V0RGF0YShyZWNvcmQpLCBzaXplb2YoeGxfY2hlY2twb2lu dF9yZWRvKSk7CiAKIAkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CisJ CWRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lv bjsKIAkJWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gcmVkb19yZWMuZGF0YV9j aGVja3N1bV92ZXJzaW9uOwogCQlTZXRMb2NhbERhdGFDaGVja3N1bVN0YXRlKHJlZG9fcmVj LmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CiAJCWlmIChyZWRvX3JlYy5kYXRhX2NoZWNrc3Vt X3ZlcnNpb24gIT0gQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbikKIAkJCW5l d19zdGF0ZSA9IHRydWU7CiAJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2sp OwogCisJCWVsb2coTE9HLCAieGxvZ19yZWRvIC8gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92 ZXJzaW9uICV1ID0+ICV1IiwKKwkJCSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24sIHJlZG9fcmVj LmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CisKIAkJaWYgKG5ld19zdGF0ZSkKIAkJCUVtaXRB bmRXYWl0RGF0YUNoZWNrc3Vtc0JhcnJpZXIocmVkb19yZWMuZGF0YV9jaGVja3N1bV92ZXJz aW9uKTsKIAl9CkBAIC05MjUwLDE4ICs5MzY2LDI3IEBAIHhsb2cyX3JlZG8oWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCiAJaWYgKGluZm8gPT0gWExPRzJfQ0hFQ0tTVU1TKQogCXsKIAkJ eGxfY2hlY2tzdW1fc3RhdGUgc3RhdGU7CisJCXVpbnQzMglkYXRhX2NoZWNrc3VtX3ZlcnNp b247CiAKIAkJbWVtY3B5KCZzdGF0ZSwgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9m KHhsX2NoZWNrc3VtX3N0YXRlKSk7CiAKIAkJU3BpbkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5p bmZvX2xjayk7CisJCWRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFhMb2dDdGwtPmRhdGFfY2hl Y2tzdW1fdmVyc2lvbjsKIAkJWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gc3Rh dGUubmV3X2NoZWNrc3VtX3N0YXRlOwogCQlTcGluTG9ja1JlbGVhc2UoJlhMb2dDdGwtPmlu Zm9fbGNrKTsKIAorCQllbG9nKExPRywgInhsb2cyX3JlZG8gLyBYTG9nQ3RsLT5kYXRhX2No ZWNrc3VtX3ZlcnNpb24gJXUgPT4gJXUiLAorCQkJIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiwg c3RhdGUubmV3X2NoZWNrc3VtX3N0YXRlKTsKKwogCQlMV0xvY2tBY3F1aXJlKENvbnRyb2xG aWxlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gQ29u dHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbjsKIAkJQ29udHJvbEZpbGUtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbiA9IHN0YXRlLm5ld19jaGVja3N1bV9zdGF0ZTsKIAkJVXBkYXRl Q29udHJvbEZpbGUoKTsKIAkJTFdMb2NrUmVsZWFzZShDb250cm9sRmlsZUxvY2spOwogCisJ CWVsb2coTE9HLCAieGxvZzJfcmVkbyAvIENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3Zl cnNpb24gJXUgPT4gJXUiLAorCQkJIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiwgc3RhdGUubmV3 X2NoZWNrc3VtX3N0YXRlKTsKKwogCQkvKgogCQkgKiBCbG9jayBvbiBhIHByb2NzaWduYWxi YXJyaWVyIHRvIGF3YWl0IGFsbCBwcm9jZXNzZXMgaGF2aW5nIHNlZW4gdGhlCiAJCSAqIGNo YW5nZSB0byBjaGVja3N1bSBzdGF0dXMuIE9uY2UgdGhlIGJhcnJpZXIgaGFzIGJlZW4gcGFz c2VkIHdlIGNhbgotLSAKMi41NC4wCgo= --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0003-debug-checksums-injection-points.patch" Content-Disposition: attachment; filename="0003-debug-checksums-injection-points.patch" Content-Transfer-Encoding: base64 RnJvbSAxZTU4YjE4YTcwNTAyMzM5YzU2MDhiYTM1MmY2ZTM1MWY2MTE0MzU5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB0ZXN0IDx0ZXN0PgpEYXRlOiBGcmksIDEgTWF5IDIw MjYgMjI6MTQ6MTggKzAyMDAKU3ViamVjdDogW1BBVENIIDAzLzEzXSBkZWJ1ZzogY2hlY2tz dW1zIGluamVjdGlvbiBwb2ludHMKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jIHwgNzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNo YW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCmluZGV4IDcyMTEwZDkyYzhiLi44ZGQwMDNkMjVlMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNDc1OSw2ICs0NzU5LDEzIEBAIFNldERh dGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9pZCkKIAogCWVsb2coTE9HLCAiU2V0RGF0YUNo ZWNrc3Vtc09uSW5Qcm9ncmVzcyAvIHN0YXJ0Iik7CiAKKwlJTkpFQ1RJT05fUE9JTlQoImRh dGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0IiwgTlVMTCk7 CisKKwkvKiBsb2FkIGJlZm9yZSBjcml0aWNhbCBzZWN0aW9uICovCisJSU5KRUNUSU9OX1BP SU5UX0xPQUQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFm dGVyLXhsb2ciKTsKKwlJTkpFQ1RJT05fUE9JTlRfTE9BRCgiZGF0YWNoZWNrc3Vtcy1lbmFi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCIpOworCUlOSkVDVElPTl9Q T0lOVF9MT0FEKCJkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1h ZnRlci1jb250cm9sZmlsZSIpOworCiAJLyoKIAkgKiBUaGUgc3RhdGUgdHJhbnNpdGlvbiBp cyBwZXJmb3JtZWQgaW4gYSBjcml0aWNhbCBzZWN0aW9uIHdpdGgKIAkgKiBjaGVja3BvaW50 cyBoZWxkIG9mZiB0byBwcm92aWRlIGNyYXNoIHNhZmV0eS4KQEAgLTQ3NjgsNiArNDc3NSw4 IEBAIFNldERhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9pZCkKIAogCVhMb2dDaGVja3N1 bXMoUEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNTX09OKTsKIAorCUlOSkVDVElPTl9QT0lO VF9DQUNIRUQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFm dGVyLXhsb2ciLCBOVUxMKTsKKwogCVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19s Y2spOwogCWRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1f dmVyc2lvbjsKIAlYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBQR19EQVRBX0NI RUNLU1VNX0lOUFJPR1JFU1NfT047CkBAIC00Nzc2LDYgKzQ3ODUsOCBAQCBTZXREYXRhQ2hl Y2tzdW1zT25JblByb2dyZXNzKHZvaWQpCiAJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1z T25JblByb2dyZXNzIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiAldSA9PiAldSIs CiAJCSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24sIFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVT U19PTik7CiAKKwlJTkpFQ1RJT05fUE9JTlRfQ0FDSEVEKCJkYXRhY2hlY2tzdW1zLWVuYWJs ZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsIiwgTlVMTCk7CisKIAlMV0xv Y2tBY3F1aXJlKENvbnRyb2xGaWxlTG9jaywgTFdfRVhDTFVTSVZFKTsKIAogCWVsb2coTE9H LCAiU2V0RGF0YUNoZWNrc3Vtc09uSW5Qcm9ncmVzcyBDb250cm9sRmlsZS0+ZGF0YV9jaGVj a3N1bV92ZXJzaW9uICAldSA9PiAldSIsCkBAIC00Nzg1LDE1ICs0Nzk2LDIxIEBAIFNldERh dGFDaGVja3N1bXNPbkluUHJvZ3Jlc3Modm9pZCkKIAlVcGRhdGVDb250cm9sRmlsZSgpOwog CUxXTG9ja1JlbGVhc2UoQ29udHJvbEZpbGVMb2NrKTsKIAorCUlOSkVDVElPTl9QT0lOVF9D QUNIRUQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVy LWNvbnRyb2xmaWxlIiwgTlVMTCk7CisKIAllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNP bkluUHJvZ3Jlc3MgLyBFbWl0UHJvY1NpZ25hbEJhcnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVS X0NIRUNLU1VNX0lOUFJPR1JFU1NfT04pIik7CiAJYmFycmllciA9IEVtaXRQcm9jU2lnbmFs QmFycmllcihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PTik7CiAK IAlNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmPSB+REVMQVlfQ0hLUFRfU1RBUlQ7CiAJRU5E X0NSSVRfU0VDVElPTigpOwogCisJSU5KRUNUSU9OX1BPSU5UKCJkYXRhY2hlY2tzdW1zLWVu YWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0IiwgTlVMTCk7 CisKIAllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPbkluUHJvZ3Jlc3MgLyBXYWl0Rm9y UHJvY1NpZ25hbEJhcnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX0lOUFJPR1JF U1NfT04pIik7CiAJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIpOwogCisJSU5K RUNUSU9OX1BPSU5UKCJkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vt cy1lbmQiLCBOVUxMKTsKKwogCWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09uSW5Qcm9n cmVzcyAvIGVuZCIpOwogfQogCkBAIC00ODQ2LDEyICs0ODYzLDIwIEBAIFNldERhdGFDaGVj a3N1bXNPbih2b2lkKQogCiAJU3BpbkxvY2tSZWxlYXNlKCZYTG9nQ3RsLT5pbmZvX2xjayk7 CiAKLQlJTkpFQ1RJT05fUE9JTlQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1k ZWxheSIsIE5VTEwpOworCUlOSkVDVElPTl9QT0lOVCgiZGF0YWNoZWNrc3Vtcy1lbmFibGUt Y2hlY2tzdW1zLXN0YXJ0IiwgTlVMTCk7CisKKwkvKiBsb2FkIGJlZm9yZSBjcml0aWNhbCBz ZWN0aW9uICovCisJSU5KRUNUSU9OX1BPSU5UX0xPQUQoImRhdGFjaGVja3N1bXMtZW5hYmxl LWNoZWNrc3Vtcy1hZnRlci14bG9nIik7CisJSU5KRUNUSU9OX1BPSU5UX0xPQUQoImRhdGFj aGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsIik7CisJSU5KRUNUSU9O X1BPSU5UX0xPQUQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250 cm9sZmlsZSIpOworCiAJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CiAJTXlQcm9jLT5kZWxheUNo a3B0RmxhZ3MgfD0gREVMQVlfQ0hLUFRfU1RBUlQ7CiAKIAlYTG9nQ2hlY2tzdW1zKFBHX0RB VEFfQ0hFQ0tTVU1fVkVSU0lPTik7CiAKKwlJTkpFQ1RJT05fUE9JTlRfQ0FDSEVEKCJkYXRh Y2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZyIsIE5VTEwpOworCiAJU3Bp bkxvY2tBY3F1aXJlKCZYTG9nQ3RsLT5pbmZvX2xjayk7CiAJZGF0YV9jaGVja3N1bV92ZXJz aW9uID0gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uOwogCVhMb2dDdGwtPmRhdGFf Y2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTjsKQEAgLTQ4NjAs NiArNDg4NSw4IEBAIFNldERhdGFDaGVja3N1bXNPbih2b2lkKQogCWVsb2coTE9HLCAiU2V0 RGF0YUNoZWNrc3Vtc09uIC8gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uICV1ID0+ ICV1IiwKIAkJIGRhdGFfY2hlY2tzdW1fdmVyc2lvbiwgUEdfREFUQV9DSEVDS1NVTV9WRVJT SU9OKTsKIAorCUlOSkVDVElPTl9QT0lOVF9DQUNIRUQoImRhdGFjaGVja3N1bXMtZW5hYmxl LWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsIiwgTlVMTCk7CisKIAkvKgogCSAqIFVwZGF0ZSB0 aGUgY29udHJvbGZpbGUgYmVmb3JlIHdhaXRpbmcgc2luY2UgaWYgd2UgaGF2ZSBhbiBpbW1l ZGlhdGUKIAkgKiBzaHV0ZG93biB3aGlsZSB3YWl0aW5nIHdlIHdhbnQgdG8gY29tZSBiYWNr IHVwIHdpdGggY2hlY2tzdW1zIGVuYWJsZWQuCkBAIC00ODczLDE4ICs0OTAwLDI2IEBAIFNl dERhdGFDaGVja3N1bXNPbih2b2lkKQogCVVwZGF0ZUNvbnRyb2xGaWxlKCk7CiAJTFdMb2Nr UmVsZWFzZShDb250cm9sRmlsZUxvY2spOwogCisJSU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgi ZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlIiwgTlVM TCk7CisKIAllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPbiAvIEVtaXRQcm9jU2lnbmFs QmFycmllcihQR19EQVRBX0NIRUNLU1VNX1ZFUlNJT04pIik7CiAJYmFycmllciA9IEVtaXRQ cm9jU2lnbmFsQmFycmllcihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fT04pOwogCiAJ TXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJj0gfkRFTEFZX0NIS1BUX1NUQVJUOwogCUVORF9D UklUX1NFQ1RJT04oKTsKIAorCUlOSkVDVElPTl9QT0lOVCgiZGF0YWNoZWNrc3Vtcy1lbmFi bGUtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50IiwgTlVMTCk7CisKIAllbG9nKExPRywg IlNldERhdGFDaGVja3N1bXNPbiAvIFJlcXVlc3RDaGVja3BvaW50KENIRUNLUE9JTlRfRk9S Q0UgfCBDSEVDS1BPSU5UX1dBSVQgfCBDSEVDS1BPSU5UX0ZBU1QpIik7CiAJUmVxdWVzdENo ZWNrcG9pbnQoQ0hFQ0tQT0lOVF9GT1JDRSB8IENIRUNLUE9JTlRfV0FJVCB8IENIRUNLUE9J TlRfRkFTVCk7CiAKKwlJTkpFQ1RJT05fUE9JTlQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWNo ZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0IiwgTlVMTCk7CisKIAllbG9nKExPRywgIlNl dERhdGFDaGVja3N1bXNPbiAvIFdhaXRGb3JQcm9jU2lnbmFsQmFycmllcihQR19EQVRBX0NI RUNLU1VNX1ZFUlNJT04pIik7CiAJV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKGJhcnJpZXIp OwogCisJSU5KRUNUSU9OX1BPSU5UKCJkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMt ZW5kIiwgTlVMTCk7CisKIAllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPbiAvIGVuZCIp OwogfQogCkBAIC00OTMwLDExICs0OTY1LDIwIEBAIFNldERhdGFDaGVja3N1bXNPZmYodm9p ZCkKIAl7CiAJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCisJCUlO SkVDVElPTl9QT0lOVCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tz dW1zLXN0YXJ0IiwgTlVMTCk7CisKKwkJLyogbG9hZCBiZWZvcmUgY3JpdGljYWwgc2VjdGlv biAqLworCQlJTkpFQ1RJT05fUE9JTlRfTE9BRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlu cHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhsb2ciKTsKKwkJSU5KRUNUSU9OX1BPSU5UX0xP QUQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14 bG9nY3RsIik7CisJCUlOSkVDVElPTl9QT0lOVF9MT0FEKCJkYXRhY2hlY2tzdW1zLWRpc2Fi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUiKTsKKwogCQlTVEFS VF9DUklUX1NFQ1RJT04oKTsKIAkJTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgfD0gREVMQVlf Q0hLUFRfU1RBUlQ7CiAKIAkJWExvZ0NoZWNrc3VtcyhQR19EQVRBX0NIRUNLU1VNX0lOUFJP R1JFU1NfT0ZGKTsKIAorCQlJTkpFQ1RJT05fUE9JTlRfQ0FDSEVEKCJkYXRhY2hlY2tzdW1z LWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZyIsIE5VTEwpOworCiAJ CVNwaW5Mb2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCQlkYXRhX2NoZWNrc3Vt X3ZlcnNpb24gPSBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb247CiAJCVhMb2dDdGwt PmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IFBHX0RBVEFfQ0hFQ0tTVU1fSU5QUk9HUkVTU19P RkY7CkBAIC00OTQzLDYgKzQ5ODcsOCBAQCBTZXREYXRhQ2hlY2tzdW1zT2ZmKHZvaWQpCiAJ CWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIFhMb2dDdGwtPmRhdGFfY2hlY2tz dW1fdmVyc2lvbiAldSA9PiAldSIsCiAJCQkgZGF0YV9jaGVja3N1bV92ZXJzaW9uLCBQR19E QVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZGKTsKIAorCQlJTkpFQ1RJT05fUE9JTlRfQ0FD SEVEKCJkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIt eGxvZ2N0bCIsIE5VTEwpOworCiAJCUxXTG9ja0FjcXVpcmUoQ29udHJvbEZpbGVMb2NrLCBM V19FWENMVVNJVkUpOwogCiAJCWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIENv bnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gJXUgPT4gJXUiLApAQCAtNDk1Miwx NSArNDk5OCwyMSBAQCBTZXREYXRhQ2hlY2tzdW1zT2ZmKHZvaWQpCiAJCVVwZGF0ZUNvbnRy b2xGaWxlKCk7CiAJCUxXTG9ja1JlbGVhc2UoQ29udHJvbEZpbGVMb2NrKTsKIAorCQlJTkpF Q1RJT05fUE9JTlRfQ0FDSEVEKCJkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1j aGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUiLCBOVUxMKTsKKwogCQllbG9nKExPRywgIlNl dERhdGFDaGVja3N1bXNPZmYgLyBFbWl0UHJvY1NpZ25hbEJhcnJpZXIoUEdfREFUQV9DSEVD S1NVTV9JTlBST0dSRVNTX09GRikiKTsKIAkJYmFycmllciA9IEVtaXRQcm9jU2lnbmFsQmFy cmllcihQUk9DU0lHTkFMX0JBUlJJRVJfQ0hFQ0tTVU1fSU5QUk9HUkVTU19PRkYpOwogCiAJ CU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICY9IH5ERUxBWV9DSEtQVF9TVEFSVDsKIAkJRU5E X0NSSVRfU0VDVElPTigpOwogCisJCUlOSkVDVElPTl9QT0lOVCgiZGF0YWNoZWNrc3Vtcy1k aXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50IiwgTlVMTCk7 CisKIAkJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1zT2ZmIC8gUmVxdWVzdENoZWNrcG9p bnQoQ0hFQ0tQT0lOVF9GT1JDRSB8IENIRUNLUE9JTlRfV0FJVCB8IENIRUNLUE9JTlRfRkFT VCkiKTsKIAkJUmVxdWVzdENoZWNrcG9pbnQoQ0hFQ0tQT0lOVF9GT1JDRSB8IENIRUNLUE9J TlRfV0FJVCB8IENIRUNLUE9JTlRfRkFTVCk7CiAKKwkJSU5KRUNUSU9OX1BPSU5UKCJkYXRh Y2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXIt d2FpdCIsIE5VTEwpOworCiAJCWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIFdh aXRGb3JQcm9jU2lnbmFsQmFycmllcihQR19EQVRBX0NIRUNLU1VNX0lOUFJPR1JFU1NfT0ZG KSIpOwogCQlXYWl0Rm9yUHJvY1NpZ25hbEJhcnJpZXIoYmFycmllcik7CiAKQEAgLTQ5Nzks MTIgKzUwMzEsMjEgQEAgU2V0RGF0YUNoZWNrc3Vtc09mZih2b2lkKQogCQlTcGluTG9ja1Jl bGVhc2UoJlhMb2dDdGwtPmluZm9fbGNrKTsKIAl9CiAKKwlJTkpFQ1RJT05fUE9JTlQoImRh dGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtc3RhcnQiLCBOVUxMKTsKKworCS8qIGxv YWQgYmVmb3JlIGNyaXRpY2FsIHNlY3Rpb24gKi8KKwlJTkpFQ1RJT05fUE9JTlRfTE9BRCgi ZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nIik7CisJSU5KRUNU SU9OX1BPSU5UX0xPQUQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXIt eGxvZ2N0bCIpOworCUlOSkVDVElPTl9QT0lOVF9MT0FEKCJkYXRhY2hlY2tzdW1zLWRpc2Fi bGUtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlIik7CisKIAlTVEFSVF9DUklUX1NFQ1RJ T04oKTsKIAkvKiBFbnN1cmUgdGhhdCB3ZSBkb24ndCBpbmN1ciBhIGNoZWNrcG9pbnQgZHVy aW5nIGRpc2FibGluZyBjaGVja3N1bXMgKi8KIAlNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyB8 PSBERUxBWV9DSEtQVF9TVEFSVDsKIAogCVhMb2dDaGVja3N1bXMoUEdfREFUQV9DSEVDS1NV TV9PRkYpOwogCisJSU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgiZGF0YWNoZWNrc3Vtcy1kaXNh YmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nIiwgTlVMTCk7CisKIAlTcGluTG9ja0FjcXVpcmUo JlhMb2dDdGwtPmluZm9fbGNrKTsKIAlkYXRhX2NoZWNrc3VtX3ZlcnNpb24gPSBYTG9nQ3Rs LT5kYXRhX2NoZWNrc3VtX3ZlcnNpb247CiAJWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJz aW9uID0gUEdfREFUQV9DSEVDS1NVTV9PRkY7CkBAIC00OTkzLDYgKzUwNTQsOCBAQCBTZXRE YXRhQ2hlY2tzdW1zT2ZmKHZvaWQpCiAJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1zT2Zm IC8gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uICV1ID0+ICV1IiwKIAkJIGRhdGFf Y2hlY2tzdW1fdmVyc2lvbiwgUEdfREFUQV9DSEVDS1NVTV9PRkYpOwogCisJSU5KRUNUSU9O X1BPSU5UX0NBQ0hFRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci14 bG9nY3RsIiwgTlVMTCk7CisKIAlMV0xvY2tBY3F1aXJlKENvbnRyb2xGaWxlTG9jaywgTFdf RVhDTFVTSVZFKTsKIAogCWVsb2coTE9HLCAiU2V0RGF0YUNoZWNrc3Vtc09mZiAvIENvbnRy b2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gJXUgPT4gJXUiLApAQCAtNTAwMiwxOCAr NTA2NSwyNiBAQCBTZXREYXRhQ2hlY2tzdW1zT2ZmKHZvaWQpCiAJVXBkYXRlQ29udHJvbEZp bGUoKTsKIAlMV0xvY2tSZWxlYXNlKENvbnRyb2xGaWxlTG9jayk7CiAKKwlJTkpFQ1RJT05f UE9JTlRfQ0FDSEVEKCJkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLWNv bnRyb2xmaWxlIiwgTlVMTCk7CisKIAllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPZmYg LyBFbWl0UHJvY1NpZ25hbEJhcnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX09G RikiKTsKIAliYXJyaWVyID0gRW1pdFByb2NTaWduYWxCYXJyaWVyKFBST0NTSUdOQUxfQkFS UklFUl9DSEVDS1NVTV9PRkYpOwogCiAJTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJj0gfkRF TEFZX0NIS1BUX1NUQVJUOwogCUVORF9DUklUX1NFQ1RJT04oKTsKIAorCUlOSkVDVElPTl9Q T0lOVCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2lu dCIsIE5VTEwpOworCiAJZWxvZyhMT0csICJTZXREYXRhQ2hlY2tzdW1zT2ZmIC8gUmVxdWVz dENoZWNrcG9pbnQoQ0hFQ0tQT0lOVF9GT1JDRSB8IENIRUNLUE9JTlRfV0FJVCB8IENIRUNL UE9JTlRfRkFTVCkiKTsKIAlSZXF1ZXN0Q2hlY2twb2ludChDSEVDS1BPSU5UX0ZPUkNFIHwg Q0hFQ0tQT0lOVF9XQUlUIHwgQ0hFQ0tQT0lOVF9GQVNUKTsKIAorCUlOSkVDVElPTl9QT0lO VCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0 IiwgTlVMTCk7CisKIAllbG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPZmYgLyBXYWl0Rm9y UHJvY1NpZ25hbEJhcnJpZXIoUFJPQ1NJR05BTF9CQVJSSUVSX0NIRUNLU1VNX09GRikiKTsK IAlXYWl0Rm9yUHJvY1NpZ25hbEJhcnJpZXIoYmFycmllcik7CiAKKwlJTkpFQ1RJT05fUE9J TlQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtZW5kIiwgTlVMTCk7CisKIAll bG9nKExPRywgIlNldERhdGFDaGVja3N1bXNPZmYgLyBlbmQiKTsKIH0KIApAQCAtODk2OCw3 ICs5MDM5LDYgQEAgeGxvZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCXsKIAkJ Q2hlY2tQb2ludAljaGVja1BvaW50OwogCQlUaW1lTGluZUlECXJlcGxheVRMSTsKLQkJdWlu dDMyCQlkYXRhX2NoZWNrc3VtX3ZlcnNpb247CiAKIAkJbWVtY3B5KCZjaGVja1BvaW50LCBY TG9nUmVjR2V0RGF0YShyZWNvcmQpLCBzaXplb2YoQ2hlY2tQb2ludCkpOwogCQkvKiBJbiBh IFNIVVRET1dOIGNoZWNrcG9pbnQsIGJlbGlldmUgdGhlIGNvdW50ZXJzIGV4YWN0bHkgKi8K LS0gCjIuNTQuMAoK --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0004-debug-checkpointer-injection-points.patch" Content-Disposition: attachment; filename="0004-debug-checkpointer-injection-points.patch" Content-Transfer-Encoding: base64 RnJvbSAwYzNkZDhhYzFkZjdmZDE2ODYzNzQ1NTVlYjc2NmU0NTE3YzRjMWE4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB0ZXN0IDx0ZXN0PgpEYXRlOiBGcmksIDEgTWF5IDIw MjYgMjI6MTU6NTIgKzAyMDAKU3ViamVjdDogW1BBVENIIDA0LzEzXSBkZWJ1ZzogY2hlY2tw b2ludGVyIGluamVjdGlvbiBwb2ludHMKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUg Y2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YwppbmRleCA4ZGQwMDNkMjVlMi4uN2M0ZTQxMjA5M2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMKQEAgLTQ3NjIsNiArNDc2Miw3IEBAIFNldERhdGFDaGVja3N1bXNPbklu UHJvZ3Jlc3Modm9pZCkKIAlJTkpFQ1RJT05fUE9JTlQoImRhdGFjaGVja3N1bXMtZW5hYmxl LWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0IiwgTlVMTCk7CiAKIAkvKiBsb2FkIGJlZm9y ZSBjcml0aWNhbCBzZWN0aW9uICovCisJSU5KRUNUSU9OX1BPSU5UX0xPQUQoImRhdGFjaGVj a3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS14bG9nIik7CiAJSU5K RUNUSU9OX1BPSU5UX0xPQUQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLWFmdGVyLXhsb2ciKTsKIAlJTkpFQ1RJT05fUE9JTlRfTE9BRCgiZGF0YWNoZWNr c3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCIpOwogCUlO SkVDVElPTl9QT0lOVF9MT0FEKCJkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNo ZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZSIpOwpAQCAtNDc3Myw2ICs0Nzc0LDggQEAgU2V0 RGF0YUNoZWNrc3Vtc09uSW5Qcm9ncmVzcyh2b2lkKQogCVNUQVJUX0NSSVRfU0VDVElPTigp OwogCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzIHw9IERFTEFZX0NIS1BUX1NUQVJUOwogCisJ SU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgiZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVz cy1jaGVja3N1bXMtYmVmb3JlLXhsb2ciLCBOVUxMKTsKKwogCVhMb2dDaGVja3N1bXMoUEdf REFUQV9DSEVDS1NVTV9JTlBST0dSRVNTX09OKTsKIAogCUlOSkVDVElPTl9QT0lOVF9DQUNI RUQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhs b2ciLCBOVUxMKTsKQEAgLTQ4NjYsNiArNDg2OSw3IEBAIFNldERhdGFDaGVja3N1bXNPbih2 b2lkKQogCUlOSkVDVElPTl9QT0lOVCgiZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1z LXN0YXJ0IiwgTlVMTCk7CiAKIAkvKiBsb2FkIGJlZm9yZSBjcml0aWNhbCBzZWN0aW9uICov CisJSU5KRUNUSU9OX1BPSU5UX0xPQUQoImRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vt cy1iZWZvcmUteGxvZyIpOwogCUlOSkVDVElPTl9QT0lOVF9MT0FEKCJkYXRhY2hlY2tzdW1z LWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZyIpOwogCUlOSkVDVElPTl9QT0lOVF9MT0FE KCJkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCIpOwogCUlO SkVDVElPTl9QT0lOVF9MT0FEKCJkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0 ZXItY29udHJvbGZpbGUiKTsKQEAgLTQ4NzMsNiArNDg3Nyw4IEBAIFNldERhdGFDaGVja3N1 bXNPbih2b2lkKQogCVNUQVJUX0NSSVRfU0VDVElPTigpOwogCU15UHJvYy0+ZGVsYXlDaGtw dEZsYWdzIHw9IERFTEFZX0NIS1BUX1NUQVJUOwogCisJSU5KRUNUSU9OX1BPSU5UX0NBQ0hF RCgiZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWJlZm9yZS14bG9nIiwgTlVMTCk7 CisKIAlYTG9nQ2hlY2tzdW1zKFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTik7CiAKIAlJTkpF Q1RJT05fUE9JTlRfQ0FDSEVEKCJkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0 ZXIteGxvZyIsIE5VTEwpOwpAQCAtNDk2OCw2ICs0OTc0LDcgQEAgU2V0RGF0YUNoZWNrc3Vt c09mZih2b2lkKQogCQlJTkpFQ1RJT05fUE9JTlQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1p bnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCIsIE5VTEwpOwogCiAJCS8qIGxvYWQgYmVmb3Jl IGNyaXRpY2FsIHNlY3Rpb24gKi8KKwkJSU5KRUNUSU9OX1BPSU5UX0xPQUQoImRhdGFjaGVj a3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUteGxvZyIpOwogCQlJ TkpFQ1RJT05fUE9JTlRfTE9BRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3Mt Y2hlY2tzdW1zLWFmdGVyLXhsb2ciKTsKIAkJSU5KRUNUSU9OX1BPSU5UX0xPQUQoImRhdGFj aGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsIik7 CiAJCUlOSkVDVElPTl9QT0lOVF9MT0FEKCJkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9n cmVzcy1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUiKTsKQEAgLTQ5NzUsNiArNDk4Miw4 IEBAIFNldERhdGFDaGVja3N1bXNPZmYodm9pZCkKIAkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7 CiAJCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzIHw9IERFTEFZX0NIS1BUX1NUQVJUOwogCisJ CUlOSkVDVElPTl9QT0lOVF9DQUNIRUQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dy ZXNzLWNoZWNrc3Vtcy1iZWZvcmUteGxvZyIsIE5VTEwpOworCiAJCVhMb2dDaGVja3N1bXMo UEdfREFUQV9DSEVDS1NVTV9JTlBST0dSRVNTX09GRik7CiAKIAkJSU5KRUNUSU9OX1BPSU5U X0NBQ0hFRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFm dGVyLXhsb2ciLCBOVUxMKTsKQEAgLTUwMzQsNiArNTA0Myw3IEBAIFNldERhdGFDaGVja3N1 bXNPZmYodm9pZCkKIAlJTkpFQ1RJT05fUE9JTlQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1j aGVja3N1bXMtc3RhcnQiLCBOVUxMKTsKIAogCS8qIGxvYWQgYmVmb3JlIGNyaXRpY2FsIHNl Y3Rpb24gKi8KKwlJTkpFQ1RJT05fUE9JTlRfTE9BRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWNoZWNrc3Vtcy1iZWZvcmUteGxvZyIpOwogCUlOSkVDVElPTl9QT0lOVF9MT0FEKCJkYXRh Y2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2ciKTsKIAlJTkpFQ1RJT05f UE9JTlRfTE9BRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9n Y3RsIik7CiAJSU5KRUNUSU9OX1BPSU5UX0xPQUQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1j aGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUiKTsKQEAgLTUwNDIsNiArNTA1Miw4IEBAIFNl dERhdGFDaGVja3N1bXNPZmYodm9pZCkKIAkvKiBFbnN1cmUgdGhhdCB3ZSBkb24ndCBpbmN1 ciBhIGNoZWNrcG9pbnQgZHVyaW5nIGRpc2FibGluZyBjaGVja3N1bXMgKi8KIAlNeVByb2Mt PmRlbGF5Q2hrcHRGbGFncyB8PSBERUxBWV9DSEtQVF9TVEFSVDsKIAorCUlOSkVDVElPTl9Q T0lOVF9DQUNIRUQoImRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYmVmb3JlLXhs b2ciLCBOVUxMKTsKKwogCVhMb2dDaGVja3N1bXMoUEdfREFUQV9DSEVDS1NVTV9PRkYpOwog CiAJSU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgiZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNr c3Vtcy1hZnRlci14bG9nIiwgTlVMTCk7CkBAIC03NjExLDYgKzc2MjMsMTIgQEAgQ3JlYXRl Q2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJLyogUnVuIHRoZXNlIHBvaW50cyBvdXRzaWRlIHRo ZSBjcml0aWNhbCBzZWN0aW9uLiAqLwogCUlOSkVDVElPTl9QT0lOVCgiY3JlYXRlLWNoZWNr cG9pbnQtaW5pdGlhbCIsIE5VTEwpOwogCUlOSkVDVElPTl9QT0lOVF9MT0FEKCJjcmVhdGUt Y2hlY2twb2ludC1ydW4iKTsKKwlJTkpFQ1RJT05fUE9JTlRfTE9BRCgiY2hlY2twb2ludC1i ZWZvcmUtcmVkbyIpOworCUlOSkVDVElPTl9QT0lOVF9MT0FEKCJjaGVja3BvaW50LWJlZm9y ZS14bG9nY3RsLWNoZWNrc3VtcyIpOworCUlOSkVDVElPTl9QT0lOVF9MT0FEKCJjaGVja3Bv aW50LWFmdGVyLXhsb2djdGwtY2hlY2tzdW1zIik7CisJSU5KRUNUSU9OX1BPSU5UX0xPQUQo ImNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tzdW1zIik7CisJSU5KRUNUSU9OX1BPSU5U X0xPQUQoImNoZWNrcG9pbnQtYmVmb3JlLXJlZG8td2FsIik7CisJSU5KRUNUSU9OX1BPSU5U X0xPQUQoImNoZWNrcG9pbnQtYWZ0ZXItcmVkby13YWwiKTsKIAogCS8qCiAJICogVXNlIGEg Y3JpdGljYWwgc2VjdGlvbiB0byBmb3JjZSBzeXN0ZW0gcGFuaWMgaWYgd2UgaGF2ZSB0cm91 YmxlLgpAQCAtNzY3Niw2ICs3Njk0LDggQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3Mp CiAJZWxzZQogCQljaGVja1BvaW50LlByZXZUaW1lTGluZUlEID0gY2hlY2tQb2ludC5UaGlz VGltZUxpbmVJRDsKIAorCUlOSkVDVElPTl9QT0lOVF9DQUNIRUQoImNoZWNrcG9pbnQtYmVm b3JlLXJlZG8iLCBOVUxMKTsKKwogCS8qCiAJICogV2UgbXVzdCBibG9jayBjb25jdXJyZW50 IGluc2VydGlvbnMgd2hpbGUgZXhhbWluaW5nIGluc2VydCBzdGF0ZS4KIAkgKi8KQEAgLTc2 ODQsNiArNzcwNCw4IEBAIENyZWF0ZUNoZWNrUG9pbnQoaW50IGZsYWdzKQogCWNoZWNrUG9p bnQuZnVsbFBhZ2VXcml0ZXMgPSBJbnNlcnQtPmZ1bGxQYWdlV3JpdGVzOwogCWNoZWNrUG9p bnQud2FsX2xldmVsID0gd2FsX2xldmVsOwogCisJSU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgi Y2hlY2twb2ludC1iZWZvcmUteGxvZ2N0bC1jaGVja3N1bXMiLCBOVUxMKTsKKwogCS8qCiAJ ICogR2V0IHRoZSBjdXJyZW50IGRhdGFfY2hlY2tzdW1fdmVyc2lvbiB2YWx1ZSBmcm9tIHhs b2djdGwsIHZhbGlkIGF0IHRoZQogCSAqIHRpbWUgb2YgdGhlIGNoZWNrcG9pbnQuCkBAIC03 NjkyLDYgKzc3MTQsOCBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAljaGVja1Bv aW50LmRhdGFDaGVja3N1bVN0YXRlID0gWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9u OwogCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwogCisJSU5KRUNUSU9O X1BPSU5UX0NBQ0hFRCgiY2hlY2twb2ludC1hZnRlci14bG9nY3RsLWNoZWNrc3VtcyIsIE5V TEwpOworCiAJaWYgKHNodXRkb3duKQogCXsKIAkJWExvZ1JlY1B0cgljdXJJbnNlcnQgPSBY TG9nQnl0ZVBvc1RvUmVjUHRyKEluc2VydC0+Q3VyckJ5dGVQb3MpOwpAQCAtNzc0OSw2ICs3 NzczLDggQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJewogCQl4bF9jaGVja3Bv aW50X3JlZG8gcmVkb19yZWM7CiAKKwkJSU5KRUNUSU9OX1BPSU5UX0NBQ0hFRCgiY2hlY2tw b2ludC1iZWZvcmUtcmVkby1jaGVja3N1bXMiLCBOVUxMKTsKKwogCQlXQUxJbnNlcnRMb2Nr QWNxdWlyZSgpOwogCQlyZWRvX3JlYy53YWxfbGV2ZWwgPSB3YWxfbGV2ZWw7CiAJCVNwaW5M b2NrQWNxdWlyZSgmWExvZ0N0bC0+aW5mb19sY2spOwpAQCAtNzc1Niw2ICs3NzgyLDggQEAg Q3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJCVNwaW5Mb2NrUmVsZWFzZSgmWExvZ0N0 bC0+aW5mb19sY2spOwogCQlXQUxJbnNlcnRMb2NrUmVsZWFzZSgpOwogCisJCUlOSkVDVElP Tl9QT0lOVF9DQUNIRUQoImNoZWNrcG9pbnQtYmVmb3JlLXJlZG8td2FsIiwgTlVMTCk7CisK IAkJLyogSW5jbHVkZSBXQUwgbGV2ZWwgaW4gcmVjb3JkIGZvciBXQUwgc3VtbWFyaXplcidz IGJlbmVmaXQuICovCiAJCVhMb2dCZWdpbkluc2VydCgpOwogCQlYTG9nUmVnaXN0ZXJEYXRh KCZyZWRvX3JlYywgc2l6ZW9mKHhsX2NoZWNrcG9pbnRfcmVkbykpOwpAQCAtNzc2OCw2ICs3 Nzk2LDggQEAgQ3JlYXRlQ2hlY2tQb2ludChpbnQgZmxhZ3MpCiAJCSAqIGNoZWNrcG9pbnQg aXMgY29tcGxldGUuCiAJCSAqLwogCQljaGVja1BvaW50LnJlZG8gPSBSZWRvUmVjUHRyOwor CisJCUlOSkVDVElPTl9QT0lOVF9DQUNIRUQoImNoZWNrcG9pbnQtYWZ0ZXItcmVkby13YWwi LCBOVUxMKTsKIAl9CiAKIAkvKiBVcGRhdGUgdGhlIGluZm9fbGNrLXByb3RlY3RlZCBjb3B5 IG9mIFJlZG9SZWNQdHIgYXMgd2VsbCAqLwotLSAKMi41NC4wCgo= --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0005-TAP-10-concurrent-checksum-changes.patch" Content-Disposition: attachment; filename="0005-TAP-10-concurrent-checksum-changes.patch" Content-Transfer-Encoding: base64 RnJvbSAyNGFiODFhZTY2NmVkOWRlNjgzMDkxZDZmZWVjYmY4MGIyZGQ1YmIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB0ZXN0IDx0ZXN0PgpEYXRlOiBGcmksIDEgTWF5IDIw MjYgMjI6MTQ6NDkgKzAyMDAKU3ViamVjdDogW1BBVENIIDA1LzEzXSBUQVAgMTA6IGNvbmN1 cnJlbnQgY2hlY2tzdW0gY2hhbmdlcwoKLS0tCiAuLi4vdC8wMTBfY29uY3VycmVudF9jaGFu Z2VzLnBsICAgICAgICAgICAgICAgfCAyOTYgKysrKysrKysrKysrKysrKysrCiAxIGZpbGUg Y2hhbmdlZCwgMjk2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY2hlY2tzdW1zL3QvMDEwX2NvbmN1cnJlbnRfY2hhbmdlcy5wbAoK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMvdC8wMTBfY29u Y3VycmVudF9jaGFuZ2VzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NoZWNrc3Vtcy90 LzAxMF9jb25jdXJyZW50X2NoYW5nZXMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjFiMTdiNDk2MDMzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2NoZWNrc3Vtcy90LzAxMF9jb25jdXJyZW50X2NoYW5nZXMucGwKQEAg LTAsMCArMSwyOTYgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBzdWl0ZSBmb3IgdGVzdGluZyBlbmFi bGluZyBkYXRhIGNoZWNrc3VtcyBpbiBhbiBvbmxpbmUgY2x1c3RlciB3aXRoCisjIGluamVj dGlvbiBwb2ludCB0ZXN0cyBpbmplY3RpbmcgZmFpbHVyZXMgaW50byB0aGUgcHJvY2Vzc2lu ZworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czsKK3VzZSBUZXN0OjpNb3JlOworCit1c2UgRmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46 OlJlYWxCaW47CisKK3VzZSBEYXRhQ2hlY2tzdW1zOjpVdGlsczsKKworIyBUaGlzIHRlc3Qg c3VpdGUgaXMgZXhwZW5zaXZlLCBvciB2ZXJ5IGV4cGVuc2l2ZSwgdG8gZXhlY3V0ZS4gIFRo ZXJlIGFyZSB0d28KKyMgUEdfVEVTVF9FWFRSQSBvcHRpb25zIGZvciBydW5uaW5nIGl0LCAi Y2hlY2tzdW0iIGZvciBhIHBhcmVkLWRvd24gdGVzdCBzdWl0ZQorIyBhbiAiY2hlY2tzdW1f ZXh0ZW5kZWQiIGZvciB0aGUgZnVsbCBzdWl0ZS4gIFRoZSBmdWxsIHN1aXRlIGNhbiBydW4g Zm9yIGhvdXJzCisjIG9uIHNsb3cgb3IgY29uc3RyYWluZWQgc3lzdGVtcy4KK215ICRleHRl bmRlZCA9IHVuZGVmOworaWYgKCRFTlZ7UEdfVEVTVF9FWFRSQX0pCit7CisJJGV4dGVuZGVk ID0gMSBpZiAoJEVOVntQR19URVNUX0VYVFJBfSA9fiAvXGJjaGVja3N1bV9leHRlbmRlZFxi Lyk7CisJcGxhbiBza2lwX2FsbCA9PiAnRXhwZW5zaXZlIGRhdGEgY2hlY2tzdW1zIHRlc3Qg ZGlzYWJsZWQnCisJICB1bmxlc3MgKCRFTlZ7UEdfVEVTVF9FWFRSQX0gPX4gL1xiY2hlY2tz dW0oX2V4dGVuZGVkKT9cYi8pOworfQorCitpZiAoJEVOVntlbmFibGVfaW5qZWN0aW9uX3Bv aW50c30gbmUgJ3llcycpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnSW5qZWN0aW9uIHBvaW50 cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnOworfQorCisjIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIyBUZXN0IGNsdXN0ZXIgc2V0dXAKKyMKKworIyBJbml0aWF0ZSB0ZXN0Y2x1 c3RlcgorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ2luamVj dGlvbl9ub2RlJyk7Ciskbm9kZS0+aW5pdChub19kYXRhX2NoZWNrc3VtcyA9PiAxKTsKKyRu b2RlLT5zdGFydDsKKworIyBTZXQgdXAgdGVzdCBlbnZpcm9ubWVudAorJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2NoZWNrc3VtczsnKTsK KyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gaW5qZWN0 aW9uX3BvaW50czsnKTsKKworbXkgJHBnYmVuY2ggPSB1bmRlZjsKK215ICRzY2FsZWZhY3Rv ciA9ICgkZXh0ZW5kZWQgPyAxMCA6IDEpOworbXkgJG5vZGVfbG9nbG9jYXRpb24gPSAwOwor Ciskbm9kZS0+Y29tbWFuZF9vaygKKwlbCisJCSdwZ2JlbmNoJywgJy1wJywgJG5vZGUtPnBv cnQsICctaScsCisJCSctcycsICRzY2FsZWZhY3RvciwgJy1xJywgJ3Bvc3RncmVzJworCV0p OworCisjIFN0YXJ0IGEgcGdiZW5jaCBydW4gaW4gdGhlIGJhY2tncm91bmQgYWdhaW5zdCB0 aGUgc2VydmVyIHNwZWNpZmllZCB2aWEgdGhlCisjIHBvcnQgcGFzc2VkIGFzIHBhcmFtZXRl ci4KK3N1YiBiYWNrZ3JvdW5kX3J3X3BnYmVuY2gKK3sKKwlteSAkcG9ydCA9IHNoaWZ0Owor CisJIyBJZiBhIHByZXZpb3VzIHBnYmVuY2ggaXMgc3RpbGwgcnVubmluZywgc3RhcnQgYnkg c2h1dHRpbmcgaXQgZG93bi4KKwkkcGdiZW5jaC0+ZmluaXNoIGlmICRwZ2JlbmNoOworCisJ bXkgJGNsaWVudHMgPSAxOworCW15ICRydW50aW1lID0gMjsKKworCWlmICgkZXh0ZW5kZWQp CisJeworCQkjIFJhbmRvbWl6ZSB0aGUgbnVtYmVyIG9mIHBnYmVuY2ggY2xpZW50cyBhIGJp dCAocmFuZ2UgMS0xNikKKwkJJGNsaWVudHMgPSAxICsgaW50KHJhbmQoMTUpKTsKKwkJJHJ1 bnRpbWUgPSA2MDA7CisJfQorCW15IEBjbWQgPSAoJ3BnYmVuY2gnLCAnLXAnLCAkcG9ydCwg Jy1UJywgJHJ1bnRpbWUsICctYycsICRjbGllbnRzKTsKKworCSMgUmFuZG9taXplIHdoZXRo ZXIgd2Ugc3Bhd24gY29ubmVjdGlvbnMgb3Igbm90CisJcHVzaChAY21kLCAnLUMnKSBpZiAo JGV4dGVuZGVkICYmIGNvaW50b3NzKTsKKwkjIEZpbmFsbHkgYWRkIHRoZSBkYXRhYmFzZSBu YW1lIHRvIHVzZQorCXB1c2goQGNtZCwgJ3Bvc3RncmVzJyk7CisKKwkkcGdiZW5jaCA9IElQ Qzo6UnVuOjpzdGFydCgKKwkJXEBjbWQsCisJCSc8JyA9PiAnL2Rldi9udWxsJywKKwkJJz4n ID0+ICcvZGV2L251bGwnLAorCQknMj4nID0+ICcvZGV2L251bGwnLAorCQlJUEM6OlJ1bjo6 dGltZXIoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpKTsKK30K Kworc3ViIGF0dGFjaF9pbmplY3Rpb25fcG9pbnQKK3sKKwlteSAoJG5vZGUsICRwb2ludCkg PSBAXzsKKwlub3RlKCdhdHRhY2hpbmcgaW5qZWN0aW9uIHBvaW50OiAnIC4gJHBvaW50KTsK Kwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgaW5qZWN0aW9uX3Bv aW50c19hdHRhY2goJyIgLiAkcG9pbnQgLiAiJywnd2FpdCcpOyIKKwkpOworfQorCitzdWIg d2FpdF9pbmplY3Rpb25fcG9pbnQKK3sKKwlteSAoJG5vZGUsICRwb2ludCkgPSBAXzsKKwor CW5vdGUoIndhaXRpbmcgZm9yIHRoZSBpbmplY3Rpb24gcG9pbnQgdG8gYmUgaGl0Iik7CisJ JG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgQ09V TlQoKikgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVu dCA9ICciIC4gJHBvaW50IC4gIiciLAorCQknMScpOworfQorCitzdWIgd2FrZXVwX2luamVj dGlvbl9wb2ludAoreworCW15ICgkbm9kZSwgJHBvaW50KSA9IEBfOworCisJbm90ZSgnd2Fr aW5nIHRoZSBpbml0IGluamVjdGlvbiBwb2ludDogJyAuICRwb2ludCk7CisJJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVw KCciIC4gJHBvaW50IC4gIicpOyIKKwkpOworCisJbm90ZSgiZGV0YWNoaW5nIHRoZSBpbml0 IGluamVjdGlvbiBwb2ludCIpOworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgnIiAuICRwb2ludCAuICInKTsiKTsK K30KKworIyBUZXN0IGJlaGF2aW9yIHdpdGggdHdvIGNvbmN1cnJlbnQgY2hlY2tzdW0gdHJh bnNpdGlvbnMuCisjCisjIFRoZSBjbHVzdGVyIGlzIGluaXRpYWxpemVkIGludG8gY2hlY2tz dW0gc3RhdGUgJHN0YXJ0IChlbmFibGVkL2Rpc2FibGVkKSwKKyMgYW5kIHR3byBjaGFuZ2Vz IGFyZSBpbml0aWF0ZWQgaW4gYSBjb250cm9sZWQgd2F5LiBUaGUgJGZpcnN0IGNoYW5nZSBn ZXRzCisjIHBhdXNlZCBhdCBhIHNlbGVjdGVkIGluamVjdGlvbiBwb2ludCAkcG9pbnQsIGF0 IHdoaWNoIHBvaW50ICRzZWNvbmQgY2hhbmdlCisjIGdldHMgaW5pdGlhdGVkLiBPbmNlIHRo ZSBjaGVja3N1bSByZXNvbHZlcyB0aGUgY2x1c3RlciBzdGF0ZSwgdGhlIHN0YXRlCisjIGlz IGNvbXBhcmVkIHRvIHRoZSBleHBlY3RlZCAkZmluYWwgc3RhdGUuCisjCisjIGFyZ3VtZW50 czoKKyMKKyMgLSBzdGFydCAgLSBzdGFydGluZyBjaGVja3N1bSBzdGF0ZSAoZW5hYmxlZC9k aXNhYmxlZCkKKyMgLSBmaXJzdCAgLSBmaXJzdCBjaGVja3N1bSBjaGFuZ2UKKyMgLSBzZWNv bmQgLSBzZWNvbmQgY2hlY2tzdW0gY2hhbmdlCisjIC0gaW5pdCAgIC0gaW5pdGlhbCBpbmpl Y3Rpb24gcG9pbnQgKHNlZSBjb21tZW50IGxhdGVyKQorIyAtIHBvaW50ICAtIGluamVjdGlv biBwb2ludCB0aGUgZmlyc3QgY2hhbmdlIHNob3VsZCB3YWl0IG9uCisjIC0gZmluYWwgIC0g ZXhwZWN0ZWQgY2hlY2tzdW0gc3RhdGUgYXQgdGhlIGVuZAorIworIyBUaGUgaW5qZWN0aW9u IHBvaW50IGlzIHRyaWdnZXJlZCBvbmx5IGJ5IHRoZSBkYXRhY2hlY2tzdW0gbGF1bmNoZXIs IGFuZAorIyB0aGVyZSBjYW4gYmUgb25seSBvbmUgc3VjaCBwcm9jZXNzLiBTbyB0aGVyZSdz IG5vIHJpc2sgb2YgaGl0dGluZyB0aGUKKyMgaW5qZWN0aW9uIHBvaW50IGJ5IGJvdGggY2hh bmdlcy4KKyMKKyMgWFhYIFNvbWUgb2YgdGhlIGluamVjdGlvbiBwb2ludHMgYXJlIGluIGEg Y3JpdGljYWwgc2VjdGlvbiwgd2hpY2ggZG9lcworIyBub3QgYWxsb3cgbWVtb3J5IGFsbG9j YXRpb25zIGV0Yy4gSU5KRUNUSU9OX1BPSU5UX0xPQUQvX0NBQ0hFRCBoYW5kbGVzCisjIGp1 c3QgcHJpdmF0ZSBtZW1vcnkgYWxsb2NhdGlvbiwgYnV0ICd3YWl0JyByZXF1aXJlcyBhIHNo bWVtIGFsbG9jYXRpb24uCisjIFRvIGRlYWwgd2l0aCB0aGF0LCB3ZSBzZXR1cCBhbiBpbmpl Y3Rpb24gcG9pbnQgJGluaXQgb3V0c2lkZSBhIGNyaXRpY2FsCisjIHNlY3Rpb24gdG8gaW5p dGlhbGl6ZSB0aGUgc2htZW0gc3R1ZmYgbmVlZGVkIGJ5ICd3YWl0Jy4KKyMKKyMgWFhYIFRo ZSBmaXJzdCBjaGFuZ2UgZ2V0cyAidW5wYXVzZWQiIGFmdGVyIHRoZSBzZWNvbmQgY2hlY2tz dW0gY2hhbmdlCisjIGdldHMgaW5pdGlhdGVkLCBidXQgbWF5YmUgdGhhdCdzIG5vdCBhIHN1 ZmZpY2llbnRseSBkZXRlcm1pbmlzdGljPworIworIyBYWFggU2hvdWxkIHdlIGRldGFjaCB0 aGUgaW5qZWN0aW9uIHBvaW50ICRwb2ludCBiZWZvcmUgaW5pdGlhdGluZyB0aGUKKyMgc2Vj b25kIGNoYW5nZT8gSSdtIG5vdCBzdXJlIGlmIHRoZXJlJ3MgYSBzbWFsbCByYWNlIGNvbmRp dGlvbiBiZWNhdXNlCisjIG9mIHdha2luZyB1cCBhbmQgZGV0YWNoaW5nIHRoZSBpbmplY3Rp b24gcG9pbnQuCitzdWIgdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uCit7CisJbXkgKCRzdGFy dCwgJGZpcnN0LCAkc2Vjb25kLCAkaW5pdCwgJHBvaW50LCAkZmluYWwpID0gQF87CisKKwkj IHByaW50IHRoZSBjdXJyZW50IHRlc3QgaW5zdHJ1Y3Rpb25zLCBib3RoIGludG8gVEFQIG91 dHB1dCBhbmQgaW50bworCSMgdGhlIHNlcnZlciBsb2csIHRvIG1ha2UgY29ycmVsYXRpb24g ZWFzaWVyCisKKwlteSAkaW5pdHN0ciA9ICd1bmRlZic7CisJJGluaXRzdHIgPSAkaW5pdCBp ZiBkZWZpbmVkKCRpbml0KTsKKworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCAnPT09PT09PT09PSAiIC4gJHN0YXJ0IC4gIiAvICIgLiAkZmlyc3QgLiAiIC8g IiAuICRzZWNvbmQgLiAiIC8gIiAuICRpbml0c3RyIC4gIiAvICIgLiAkcG9pbnQgLiAiIC8g IiAuICRmaW5hbCAuICIgPT09PT09PT09PSciKTsKKworCW5vdGUoJHN0YXJ0IC4gIiAvICIg LiAkZmlyc3QgLiAiIC8gIiAuICRzZWNvbmQgLiAiIC8gIiAuICRpbml0c3RyIC4gIiAvICIg LiAkcG9pbnQgLiAiIC8gIiAuICRmaW5hbCk7CisKKwkjIHB1dCB0aGUgY2x1c3RlciBpbnRv IHRoZSBpbml0aWFsIGNoZWNrc3VtIHN0YXRlLCBzeW5jaHJvbm91c2x5CisJbm90ZSgnY2hh bmdpbmcgY2hlY2tzdW1zIGludG8gaW5pdGlhbCBzdGF0ZTogJyAuICRzdGFydCk7CisJZW5h YmxlX2RhdGFfY2hlY2tzdW1zKCRub2RlLCB3YWl0ID0+ICdvbicpIGlmICgkc3RhcnQgZXEg J2VuYWJsZWQnKTsKKwlkaXNhYmxlX2RhdGFfY2hlY2tzdW1zKCRub2RlLCB3YWl0ID0+ICdv ZmYnKSBpZiAoJHN0YXJ0IGVxICdkaXNhYmxlZCcpOworCisJICMgV2FpdCBvbiBhbiBpbmpl Y3Rpb24gcG9pbnQgb3V0c2lkZSBhIGNyaXRpY2FsIHNlY3Rpb24sIHRvIGluaXRpYWxpemUK KwkgIyB0aGUgc2htZW0gKHdoaWNoIGNhbid0IGJlIGRvbmUgaW4gY3JpdGljYWwgc2VjdGlv bikuCisJYXR0YWNoX2luamVjdGlvbl9wb2ludCgkbm9kZSwgJGluaXQpIGlmIGRlZmluZWQo JGluaXQpOworCisJIyBXYWl0IG9uIHRoZSBpbmplY3Rpb24gcG9pbnQsIHRvIHBhdXNlIHRo ZSBmaXJzdCBjaGVja3N1bSBjaGFuZ2UuCisJbm90ZSgnYXR0YWNoaW5nIGluamVjdGlvbiBw b2ludDogJyAuICRwb2ludCk7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQki U0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCciIC4gJHBvaW50IC4gIicsJ3dhaXQn KTsiCisJKTsKKworCSMgVHJpZ2dlciB0aGUgY2hlY2tzdW0gY2hhbmdlLCBhc3luY2hyb25v dXNseQorCW5vdGUoInRyaWdnZXJpbmcgZmlyc3QgY2hlY2tzdW0gY2hhbmdlOiAiIC4gJGZp cnN0KTsKKwllbmFibGVfZGF0YV9jaGVja3N1bXMoJG5vZGUpIGlmICgkZmlyc3QgZXEgJ2Vu YWJsZScpOworCWRpc2FibGVfZGF0YV9jaGVja3N1bXMoJG5vZGUpIGlmICgkZmlyc3QgZXEg J2Rpc2FibGUnKTsKKworCSMgSGFuZGxlIHRoZSBpbml0aWFsIGluamVjdGlvbiBwb2ludCAt IHdhaXQsIHdha2V1cCBhbmQgZGV0YXRjaC4gVGhpcworCSMgaW5pdGlhbGl6ZXMgdGhlIHNo bWVtIGZvciB0aGUgJ3dhaXQnIGFjdGlvbi4KKwl3YWl0X2luamVjdGlvbl9wb2ludCgkbm9k ZSwgJGluaXQpIGlmIGRlZmluZWQoJGluaXQpOworCXdha2V1cF9pbmplY3Rpb25fcG9pbnQo JG5vZGUsICRpbml0KSBpZiBkZWZpbmVkKCRpbml0KTsKKworCSMgV2FpdCBmb3IgdGhlIGFj dHVhbCBpbmplY3Rpb24gcG9pbnQgdG8gYmUgaGl0IGJ5IHRoZSBzdGF0ZSBjaGFuZ2UuCisJ d2FpdF9pbmplY3Rpb25fcG9pbnQoJG5vZGUsICRwb2ludCk7CisKKwkjIFRoZSBmaXJzdCBj aGVja3N1bSBzdGF0ZSBjaGFuZ2UgaXMgd2FpdGluaWcgb24gdGhlIGluamVjdGlvbiBwb2lu dC4KKwkjIFRyaWdnZXIgdGhlIGNvbmN1cnJlbnQgY2hhbmdlIChhbHNvIGFzeW5jaHJvbm91 c2x5KS4KKwlub3RlKCJ0cmlnZ2VyaW5nIHNlY29uZCBjaGVja3N1bSBjaGFuZ2U6ICIgLiAk c2Vjb25kKTsKKwllbmFibGVfZGF0YV9jaGVja3N1bXMoJG5vZGUpIGlmICgkc2Vjb25kIGVx ICdlbmFibGUnKTsKKwlkaXNhYmxlX2RhdGFfY2hlY2tzdW1zKCRub2RlKSBpZiAoJHNlY29u ZCBlcSAnZGlzYWJsZScpOworCisJIyBXYWtlIHRoZSBpbmplY3Rpb24gcG9pbnQsIHNvIHRo YXQgdGhlIGZpcnN0IGNoYW5nZSBjYW4gcHJvY2VlZC4KKwl3YWtldXBfaW5qZWN0aW9uX3Bv aW50KCRub2RlLCAkcG9pbnQpOworCisJIyBXYWl0IHVudGlsIHRoZXJlIGFyZSBubyBvbmdv aW5nIGNoZWNrc3VtIGNoYW5nZXMsIHdoaWNoIHdlIGRldGVybWluZQorCSMgYnkgbG9va2lu ZyBmb3IgYSBjaGVja3N1bSBsYXVuY2hlciBwcm9jZXNzLgorCW5vdGUoJ3dhaXQgZm9yIHRo ZSBjaGVja3N1bSBsYXVuY2hlciB0byBleGl0Jyk7CisJJG5vZGUtPnBvbGxfcXVlcnlfdW50 aWwoJ3Bvc3RncmVzJywKKwkJCSJTRUxFQ1QgY291bnQoKikgPSAwICIKKwkJICAuICJGUk9N IHBnX2NhdGFsb2cucGdfc3RhdF9hY3Rpdml0eSAiCisJCSAgLiAiV0hFUkUgYmFja2VuZF90 eXBlID0gJ2RhdGFjaGVja3N1bSBsYXVuY2hlcic7Iik7CisKKwkjIERvZXMgdGhlIGZpbmFs IGNoZWNrc3VtIHN0YXRlIG1hdGNoIHRoZSBleHBlY3RlZCBzdGF0ZT8KKwl0ZXN0X2NoZWNr c3VtX3N0YXRlKCRub2RlLCAkZmluYWwpOworCisJIyBTaW5jZSB0aGUgbG9nIGlzbid0IGJl aW5nIHdyaXR0ZW4gdG8gbm93LCBwYXJzZSB0aGUgbG9nIGFuZCBjaGVjaworCSMgZm9yIGlu c3RhbmNlcyBvZiBjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFpbHVyZXMuCisJbXkgJGxvZyA9 IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjpzbHVycF9maWxlKCRub2RlLT5sb2dmaWxlLAor CQkkbm9kZV9sb2dsb2NhdGlvbik7CisJdW5saWtlKAorCQkkbG9nLAorCQlxci9wYWdlIHZl cmlmaWNhdGlvbiBmYWlsZWQsLitcZCQvLAorCQkibm8gY2hlY2tzdW0gdmFsaWRhdGlvbiBl cnJvcnMgaW4gcHJpbWFyeSBsb2cgKGR1cmluZyBXQUwgcmVjb3ZlcnkpIgorCSk7CisJJG5v ZGVfbG9nbG9jYXRpb24gPSAtcyAkbm9kZS0+bG9nZmlsZTsKK30KKworIyBTdGFydCB0aGUg dGVzdCBzdWl0ZSB3aXRoIHBnYmVuY2ggcnVubmluZy4KK2JhY2tncm91bmRfcndfcGdiZW5j aCgkbm9kZS0+cG9ydCk7CisKKyMgY29uY3VycmVudCBlbmFibGUgKyBkaXNhYmxlLCBkaWZm ZXJlbnQgaW5qZWN0aW9uIHBvaW50cyBpbiB0aGUgImVuYWJsZSIgcHJvY2VzcwordGVzdF9j aGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGlzYWJsZScsIHVu ZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQn LCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJs ZScsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tz dW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1z LWFmdGVyLXhsb2cnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2Fi bGVkJywgJ2VuYWJsZScsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJv Z3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jl c3MtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3Ry YW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1 bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMt ZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlJywgJ29mZicp OwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGlz YWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1 bXMtYmVmb3JlLWJhcnJpZXItd2FpdCcsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNp dGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2Rpc2FibGUnLCB1bmRlZiwgJ2RhdGFjaGVj a3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWVuZCcsICdvZmYnKTsKK3Rlc3Rf Y2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2Rpc2FibGUnLCB1 bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdvZmYnKTsK K3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2Rpc2Fi bGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVj a3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nJywgJ29mZicpOwordGVzdF9jaGVj a3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGlzYWJsZScsICdkYXRh Y2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFi bGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3Ry YW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1 bXMtZW5hYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVj a3N1bXMtYWZ0ZXItY29udHJvbGZpbGUnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5z aXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hl Y2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYmVmb3JlLWNoZWNrcG9pbnQnLCAnb2ZmJyk7Cit0 ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkaXNhYmxl JywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYmVmb3JlLWJhcnJp ZXItd2FpdCcsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQn LCAnZW5hYmxlJywgJ2Rpc2FibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNo ZWNrc3Vtcy1lbmQnLCAnb2ZmJyk7CisKKyMgY29uY3VycmVudCBlbmFibGUgKyBlbmFibGUs IGRpZmZlcmVudCBpbmplY3Rpb24gcG9pbnRzIGluIHRoZSAiZW5hYmxlIiBwcm9jZXNzCit0 ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdlbmFibGUn LCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0 YXJ0JywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2Vu YWJsZScsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVj a3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1 bXMtYWZ0ZXIteGxvZycsICdvbicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNh YmxlZCcsICdlbmFibGUnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJv Z3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jl c3MtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb24nKTsKK3Rlc3RfY2hlY2tzdW1fdHJh bnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1z LWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVu YWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZScsICdvbicpOwor dGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZW5hYmxl JywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1i ZWZvcmUtYmFycmllci13YWl0JywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24o J2Rpc2FibGVkJywgJ2VuYWJsZScsICdlbmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMt ZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWVuZCcsICdvbicpOwordGVzdF9jaGVja3N1 bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZW5hYmxlJywgdW5kZWYsICdk YXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnb24nKTsKK3Rlc3RfY2hl Y2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2VuYWJsZScsICdkYXRh Y2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFi bGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnb24nKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNp dGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVu YWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1z LWFmdGVyLXhsb2djdGwnLCAnb24nKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlz YWJsZWQnLCAnZW5hYmxlJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVj a3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLWNv bnRyb2xmaWxlJywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVk JywgJ2VuYWJsZScsICdlbmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNo ZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2ludCcsICdvbicpOwordGVzdF9jaGVja3N1bV90cmFu c2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZW5hYmxlJywgdW5kZWYsICdkYXRhY2hl Y2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCcsICdvbicpOwor dGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZW5hYmxl JywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtZW5kJywgJ29uJyk7 CisKKyMgY29uY3VycmVudCBkaXNhYmxlICsgZGlzYWJsZSwgZGlmZmVyZW50IGluamVjdGlv biBwb2ludHMgaW4gdGhlICJkaXNhYmxlIiBwcm9jZXNzCit0ZXN0X2NoZWNrc3VtX3RyYW5z aXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hl Y2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnb2ZmJyk7Cit0 ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkaXNhYmxl JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcs ICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxv ZycsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNh YmxlJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNr c3Vtcy1hZnRlci14bG9nY3RsJywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9u KCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2Fi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlJywgJ29mZicpOwordGVz dF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGlzYWJsZScs IHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJl Zm9yZS1iYXJyaWVyLXdhaXQnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24o J2VuYWJsZWQnLCAnZGlzYWJsZScsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1z LWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFu c2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1z LWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVj a3N1bXMtYWZ0ZXIteGxvZycsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbign ZW5hYmxlZCcsICdkaXNhYmxlJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFm dGVyLXhsb2djdGwnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJs ZWQnLCAnZGlzYWJsZScsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVj a3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci1j b250cm9sZmlsZScsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxl ZCcsICdkaXNhYmxlJywgJ2Rpc2FibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJs ZS1jaGVja3N1bXMtYmVmb3JlLWNoZWNrcG9pbnQnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3Vt X3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkaXNhYmxlJywgdW5kZWYsICdk YXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdhaXQnLCAn b2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScs ICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWVu ZCcsICdvZmYnKTsKKworIyBjb25jdXJyZW50IGRpc2FibGUgKyBlbmFibGUsIGRpZmZlcmVu dCBpbmplY3Rpb24gcG9pbnRzIGluIHRoZSAiZGlzYWJsZSIgcHJvY2VzcwordGVzdF9jaGVj a3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZW5hYmxlJywgdW5kZWYs ICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAn b24nKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywg J2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMt c3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFm dGVyLXhsb2cnLCAnb24nKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcs ICdkaXNhYmxlJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVz cy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3Mt Y2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb24nKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNp dGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWRp c2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNh YmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlJywgJ29uJyk7Cit0 ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdlbmFibGUn LCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1i ZWZvcmUtYmFycmllci13YWl0JywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24o J2VuYWJsZWQnLCAnZGlzYWJsZScsICdlbmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMt ZGlzYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnb24nKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNp dGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWRp c2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1 bXMtYWZ0ZXIteGxvZycsICdvbicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFi bGVkJywgJ2Rpc2FibGUnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVj a3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci14 bG9nY3RsJywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAn ZGlzYWJsZScsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1z dGFydCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xm aWxlJywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlz YWJsZScsICdlbmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1 bXMtYmVmb3JlLWNoZWNrcG9pbnQnLCAnb24nKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlv bignZW5hYmxlZCcsICdkaXNhYmxlJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vt cy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0JywgJ29uJyk7Cit0ZXN0 X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdlbmFibGUnLCB1 bmRlZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtZW5kJywgJ29uJyk7CisK KyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjU0LjAKCg== --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0006-TAP-11-concurrency-with-checkpoints.patch" Content-Disposition: attachment; filename="0006-TAP-11-concurrency-with-checkpoints.patch" Content-Transfer-Encoding: base64 RnJvbSBhZTFlZjZjZDBhMmM0ZDJmY2RkYjM0ZGIyODJjNTVhN2YyZmU1MDljIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxNSBBcHIgMjAyNiAyMjoyMjo0OCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg MDYvMTNdIFRBUCAxMTogY29uY3VycmVuY3kgd2l0aCBjaGVja3BvaW50cwoKLS0tCiAuLi4v dC8wMTFfY29uY3VycmVudF9jaGVja3BvaW50LnBsICAgICAgICAgICAgfCAyNzYgKysrKysr KysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMjc2IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2hlY2tzdW1zL3QvMDExX2Nv bmN1cnJlbnRfY2hlY2twb2ludC5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9jaGVja3N1bXMvdC8wMTFfY29uY3VycmVudF9jaGVja3BvaW50LnBsIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2NoZWNrc3Vtcy90LzAxMV9jb25jdXJyZW50X2NoZWNrcG9pbnQu cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRjZWE3NDkxNGQ0 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NoZWNrc3Vtcy90 LzAxMV9jb25jdXJyZW50X2NoZWNrcG9pbnQucGwKQEAgLTAsMCArMSwyNzYgQEAKKworIyBD b3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisKKyMgVGVzdCBzdWl0ZSBmb3IgdGVzdGluZyBlbmFibGluZyBkYXRhIGNoZWNrc3VtcyBp biBhbiBvbmxpbmUgY2x1c3RlciB3aXRoCisjIGluamVjdGlvbiBwb2ludCB0ZXN0cyBpbmpl Y3RpbmcgZmFpbHVyZXMgaW50byB0aGUgcHJvY2Vzc2luZworCit1c2Ugc3RyaWN0OwordXNl IHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwor Cit1c2UgRmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OlJlYWxCaW47CisKK3VzZSBEYXRh Q2hlY2tzdW1zOjpVdGlsczsKKworIyBUaGlzIHRlc3Qgc3VpdGUgaXMgZXhwZW5zaXZlLCBv ciB2ZXJ5IGV4cGVuc2l2ZSwgdG8gZXhlY3V0ZS4gIFRoZXJlIGFyZSB0d28KKyMgUEdfVEVT VF9FWFRSQSBvcHRpb25zIGZvciBydW5uaW5nIGl0LCAiY2hlY2tzdW0iIGZvciBhIHBhcmVk LWRvd24gdGVzdCBzdWl0ZQorIyBhbiAiY2hlY2tzdW1fZXh0ZW5kZWQiIGZvciB0aGUgZnVs bCBzdWl0ZS4gIFRoZSBmdWxsIHN1aXRlIGNhbiBydW4gZm9yIGhvdXJzCisjIG9uIHNsb3cg b3IgY29uc3RyYWluZWQgc3lzdGVtcy4KK215ICRleHRlbmRlZCA9IHVuZGVmOworaWYgKCRF TlZ7UEdfVEVTVF9FWFRSQX0pCit7CisJJGV4dGVuZGVkID0gMSBpZiAoJEVOVntQR19URVNU X0VYVFJBfSA9fiAvXGJjaGVja3N1bV9leHRlbmRlZFxiLyk7CisJcGxhbiBza2lwX2FsbCA9 PiAnRXhwZW5zaXZlIGRhdGEgY2hlY2tzdW1zIHRlc3QgZGlzYWJsZWQnCisJICB1bmxlc3Mg KCRFTlZ7UEdfVEVTVF9FWFRSQX0gPX4gL1xiY2hlY2tzdW0oX2V4dGVuZGVkKT9cYi8pOwor fQorCitpZiAoJEVOVntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gbmUgJ3llcycpCit7CisJ cGxhbiBza2lwX2FsbCA9PiAnSW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRo aXMgYnVpbGQnOworfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGNsdXN0 ZXIgc2V0dXAKKyMKKworIyBJbml0aWF0ZSB0ZXN0Y2x1c3RlcgorbXkgJG5vZGUgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ2luamVjdGlvbl9ub2RlJyk7Ciskbm9kZS0+ aW5pdChub19kYXRhX2NoZWNrc3VtcyA9PiAxKTsKKyRub2RlLT5zdGFydDsKKworIyBTZXQg dXAgdGVzdCBlbnZpcm9ubWVudAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JF QVRFIEVYVEVOU0lPTiB0ZXN0X2NoZWNrc3VtczsnKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsnKTsKKworbXkg JHBnYmVuY2ggPSB1bmRlZjsKK215ICRzY2FsZWZhY3RvciA9ICgkZXh0ZW5kZWQgPyAxMCA6 IDEpOworbXkgJG5vZGVfbG9nbG9jYXRpb24gPSAwOworCiskbm9kZS0+Y29tbWFuZF9vaygK KwlbCisJCSdwZ2JlbmNoJywgJy1wJywgJG5vZGUtPnBvcnQsICctaScsCisJCSctcycsICRz Y2FsZWZhY3RvciwgJy1xJywgJ3Bvc3RncmVzJworCV0pOworCisjIFN0YXJ0IGEgcGdiZW5j aCBydW4gaW4gdGhlIGJhY2tncm91bmQgYWdhaW5zdCB0aGUgc2VydmVyIHNwZWNpZmllZCB2 aWEgdGhlCisjIHBvcnQgcGFzc2VkIGFzIHBhcmFtZXRlci4KK3N1YiBiYWNrZ3JvdW5kX3J3 X3BnYmVuY2gKK3sKKwlteSAkcG9ydCA9IHNoaWZ0OworCisJIyBJZiBhIHByZXZpb3VzIHBn YmVuY2ggaXMgc3RpbGwgcnVubmluZywgc3RhcnQgYnkgc2h1dHRpbmcgaXQgZG93bi4KKwkk cGdiZW5jaC0+ZmluaXNoIGlmICRwZ2JlbmNoOworCisJbXkgJGNsaWVudHMgPSAxOworCW15 ICRydW50aW1lID0gMjsKKworCWlmICgkZXh0ZW5kZWQpCisJeworCQkjIFJhbmRvbWl6ZSB0 aGUgbnVtYmVyIG9mIHBnYmVuY2ggY2xpZW50cyBhIGJpdCAocmFuZ2UgMS0xNikKKwkJJGNs aWVudHMgPSAxICsgaW50KHJhbmQoMTUpKTsKKwkJJHJ1bnRpbWUgPSA2MDA7CisJfQorCW15 IEBjbWQgPSAoJ3BnYmVuY2gnLCAnLXAnLCAkcG9ydCwgJy1UJywgJHJ1bnRpbWUsICctYycs ICRjbGllbnRzKTsKKworCSMgUmFuZG9taXplIHdoZXRoZXIgd2Ugc3Bhd24gY29ubmVjdGlv bnMgb3Igbm90CisJcHVzaChAY21kLCAnLUMnKSBpZiAoJGV4dGVuZGVkICYmIGNvaW50b3Nz KTsKKwkjIEZpbmFsbHkgYWRkIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHVzZQorCXB1c2goQGNt ZCwgJ3Bvc3RncmVzJyk7CisKKwkkcGdiZW5jaCA9IElQQzo6UnVuOjpzdGFydCgKKwkJXEBj bWQsCisJCSc8JyA9PiAnL2Rldi9udWxsJywKKwkJJz4nID0+ICcvZGV2L251bGwnLAorCQkn Mj4nID0+ICcvZGV2L251bGwnLAorCQlJUEM6OlJ1bjo6dGltZXIoJFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpKTsKK30KKworc3ViIGF0dGFjaF9pbmplY3Rp b25fcG9pbnQKK3sKKwlteSAoJG5vZGUsICRwb2ludCkgPSBAXzsKKwlub3RlKCdhdHRhY2hp bmcgaW5qZWN0aW9uIHBvaW50OiAnIC4gJHBvaW50KTsKKwkkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJyIgLiAkcG9p bnQgLiAiJywnd2FpdCcpOyIKKwkpOworfQorCitzdWIgd2FpdF9pbmplY3Rpb25fcG9pbnQK K3sKKwlteSAoJG5vZGUsICRwb2ludCkgPSBAXzsKKworCW5vdGUoIndhaXRpbmcgZm9yIHRo ZSBpbmplY3Rpb24gcG9pbnQgdG8gYmUgaGl0Iik7CisJJG5vZGUtPnBvbGxfcXVlcnlfdW50 aWwoCisJCSdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19jYXRhbG9n LnBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCA9ICciIC4gJHBvaW50IC4gIici LAorCQknMScpOworfQorCitzdWIgd2FrZXVwX2luamVjdGlvbl9wb2ludAoreworCW15ICgk bm9kZSwgJHBvaW50KSA9IEBfOworCisJbm90ZSgnd2FraW5nIHRoZSBpbml0IGluamVjdGlv biBwb2ludDogJyAuICRwb2ludCk7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCciIC4gJHBvaW50IC4gIicpOyIK KwkpOworCisJbm90ZSgiZGV0YWNoaW5nIHRoZSBpbml0IGluamVjdGlvbiBwb2ludCIpOwor CSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBpbmplY3Rpb25fcG9p bnRzX2RldGFjaCgnIiAuICRwb2ludCAuICInKTsiKTsKK30KKworIyBUZXN0IGJlaGF2aW9y IHdpdGggYSBjaGVja3N1bSB0cmFuc2l0aW9ucyBhbmQgYSBjb25jdXJyZW50IGNoZWNrcG9p bnQuCisjCisjIFRoZSBjbHVzdGVyIGlzIGluaXRpYWxpemVkIGludG8gY2hlY2tzdW0gc3Rh dGUgJHN0YXJ0IChlbmFibGVkL2Rpc2FibGVkKSwKKyMgYW5kIGEgY2hlY2tzdW0gY2hhbmdl IGlzIGluaXRpYXRlZCBpbiBhIGNvbnRyb2xlZCB3YXkuIEl0IGdldHMgcGF1c2VkIGF0Cisj IGEgc2VsZWN0ZWQgaW5qZWN0aW9uIHBvaW50ICRwb2ludCwgYW5kIGEgY2hlY2twb2ludCBp cyBwZXJmb3JtZWQuIFRoZW4KKyMgdGhlIGluamVjdGlvbiBwb2ludCBpcyB3YWtlbiB1cC4g T25jZSB0aGUgY2hlY2tzdW0gY2hhbmdlIGNvbXBsZXRlcywgdGhlCisjIGNoZWNrc3VtIHN0 YXRlIGlzIGNvbXBhcmVkIHRvIHRoZSBleHBlY3RlZCAkZmluYWwgc3RhdGUuCisjCisjIFRo ZSBjaGVja3BvaW50IGlzIHBlcmZvcm1lZCBzeW5jaHJvbm91c2x5LCB3aGlsZSB0aGUgY2hl Y2tzdW0gd29ya2VyCisjIGlzIHBhdXNlZCBvbiB0aGUgaW5qZWN0aW9uIHBvaW50LgorIwor IyBGaW5hbGx5LCBhZnRlciB0aGUgY2hlY2tzdW0gY2hhbmdlIGNvbXBsZXRlcywgdGhlIGlu c3RhbmNlIGlzIHJlc3RhcnRlZAorIyAoaW4gZWl0aGVyIGZhc3Qgb3QgaW1tZWRpYXRlIG1v ZGUsIHBpY2tlZCByYW5kb21seSksIGFuZCB0aGUgZmluYWwKKyMgY2hlY2tzdW0gc3RhdGUg aXMgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGV4cGVjdGVkIHZhbHVlLiBUaGUgc2VydmVyIGxv ZworIyBpcyBjaGVja2VkIGZvciBjaGVja3N1bSBmYWlsdXJlcy4KKyMKKyMgV2hpbGUgdGhl IGNoZWNrc3VtIGNoYW5nZSBpcyBoYXBwZW5pbmcsIHRoZXJlJ3MgYSByL3cgcGdiZW5jaCBy dW5uaW5nIGluCisjIHRoZSBiYWNrZ3JvdW5kLCB0byBnZW5lcmF0ZSB3cml0ZXMuCisjCisj IGFyZ3VtZW50czoKKyMKKyMgLSBzdGFydCAtIHN0YXJ0aW5nIGNoZWNrc3VtIHN0YXRlIChl bmFibGVkL2Rpc2FibGVkKQorIyAtIGNoYW5nZSAtIGNoZWNrc3VtIGNoYW5nZQorIyAtIGlu aXQgLSBpbml0aWFsIGluamVjdGlvbiBwb2ludCAoc2VlIGNvbW1lbnQgbGF0ZXIpCisjIC0g cG9pbnQgLSBpbmplY3Rpb24gcG9pbnQgdGhlIGZpcnN0IGNoYW5nZSBzaG91bGQgd2FpdCBv bgorIyAtIGZpbmFsIC0gZXhwZWN0ZWQgY2hlY2tzdW0gc3RhdGUgYXQgdGhlIGVuZAorIwor IyBYWFggU29tZSBvZiB0aGUgaW5qZWN0aW9uIHBvaW50cyBhcmUgaW4gYSBjcml0aWNhbCBz ZWN0aW9uLCB3aGljaCBkb2VzCisjIG5vdCBhbGxvdyBtZW1vcnkgYWxsb2NhdGlvbnMgZXRj LiBJTkpFQ1RJT05fUE9JTlRfTE9BRC9fQ0FDSEVEIGhhbmRsZXMKKyMganVzdCBwcml2YXRl IG1lbW9yeSBhbGxvY2F0aW9uLCBidXQgJ3dhaXQnIHJlcXVpcmVzIGEgc2htZW0gYWxsb2Nh dGlvbi4KKyMgVG8gZGVhbCB3aXRoIHRoYXQsIHdlIHNldHVwIGFuIGluamVjdGlvbiBwb2lu dCAkaW5pdCBvdXRzaWRlIGEgY3JpdGljYWwKKyMgc2VjdGlvbiB0byBpbml0aWFsaXplIHRo ZSBzaG1lbSBzdHVmZiBuZWVkZWQgYnkgJ3dhaXQnLgorIworIyBYWFggV2UgY291bGQgYWxz byB2YWxpZGF0ZSB0aGUgY2hlY2tzdW1zIHVzaW5nIHBnX2NoZWNrc3VtcywgaWYgdGhlCisj IHN0YXRlIGlzICdvbicuCitzdWIgdGVzdF9jaGVja3N1bV90cmFuc2l0aW9uCit7CisJbXkg KCRzdGFydCwgJGNoYW5nZSwgJGluaXQsICRwb2ludCwgJGZpbmFsKSA9IEBfOworCisJIyBw cmludCB0aGUgY3VycmVudCB0ZXN0IGluc3RydWN0aW9ucywgYm90aCBpbnRvIFRBUCBvdXRw dXQgYW5kIGludG8KKwkjIHRoZSBzZXJ2ZXIgbG9nLCB0byBtYWtlIGNvcnJlbGF0aW9uIGVh c2llcgorCisJbXkgJGluaXRzdHIgPSAndW5kZWYnOworCSRpbml0c3RyID0gJGluaXQgaWYg ZGVmaW5lZCgkaW5pdCk7CisKKwkjIFN0YXJ0IHRoZSB0ZXN0IHN1aXRlIHdpdGggcGdiZW5j aCBydW5uaW5nLgorCWJhY2tncm91bmRfcndfcGdiZW5jaCgkbm9kZS0+cG9ydCk7CisKKwkk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgJz09PT09PT09PT0gIiAu ICRzdGFydCAuICIgLyAiIC4gJGNoYW5nZSAuICIgLyAiIC4gJGluaXRzdHIgLiAiIC8gIiAu ICRwb2ludCAuICIgLyAiIC4gJGZpbmFsIC4gIiA9PT09PT09PT09JyIpOworCisJbm90ZSgk c3RhcnQgLiAiIC8gIiAuICRjaGFuZ2UgLiAiIC8gIiAuICRpbml0c3RyIC4gIiAvICIgLiAk cG9pbnQgLiAiIC8gIiAuICRmaW5hbCk7CisKKwkjIHB1dCB0aGUgY2x1c3RlciBpbnRvIHRo ZSBpbml0aWFsIGNoZWNrc3VtIHN0YXRlLCBzeW5jaHJvbm91c2x5CisJbm90ZSgnY2hhbmdp bmcgY2hlY2tzdW1zIGludG8gaW5pdGlhbCBzdGF0ZTogJyAuICRzdGFydCk7CisJZW5hYmxl X2RhdGFfY2hlY2tzdW1zKCRub2RlLCB3YWl0ID0+ICdvbicpIGlmICgkc3RhcnQgZXEgJ2Vu YWJsZWQnKTsKKwlkaXNhYmxlX2RhdGFfY2hlY2tzdW1zKCRub2RlLCB3YWl0ID0+ICdvZmYn KSBpZiAoJHN0YXJ0IGVxICdkaXNhYmxlZCcpOworCisJIyBXYWl0IG9uIGFuIGluamVjdGlv biBwb2ludCBvdXRzaWRlIGEgY3JpdGljYWwgc2VjdGlvbiwgdG8gaW5pdGlhbGl6ZQorCSMg dGhlIHNobWVtICh3aGljaCBjYW4ndCBiZSBkb25lIGluIGNyaXRpY2FsIHNlY3Rpb24pLgor CWF0dGFjaF9pbmplY3Rpb25fcG9pbnQoJG5vZGUsICRpbml0KSBpZiBkZWZpbmVkKCRpbml0 KTsKKworCSMgV2FpdCBvbiB0aGUgaW5qZWN0aW9uIHBvaW50LCB0byBwYXVzZSB0aGUgY2hl Y2tzdW0gY2hhbmdlLgorCWF0dGFjaF9pbmplY3Rpb25fcG9pbnQoJG5vZGUsICRwb2ludCk7 CisKKwkjIFRyaWdnZXIgdGhlIGNoZWNrc3VtIGNoYW5nZSwgYXN5bmNocm9ub3VzbHkKKwlu b3RlKCJ0cmlnZ2VyaW5nIGNoZWNrc3VtIGNoYW5nZTogIiAuICRjaGFuZ2UpOworCWVuYWJs ZV9kYXRhX2NoZWNrc3Vtcygkbm9kZSkgaWYgKCRjaGFuZ2UgZXEgJ2VuYWJsZScpOworCWRp c2FibGVfZGF0YV9jaGVja3N1bXMoJG5vZGUpIGlmICgkY2hhbmdlIGVxICdkaXNhYmxlJyk7 CisKKwkjIEhhbmRsZSB0aGUgaW5pdGlhbCBpbmplY3Rpb24gcG9pbnQgLSB3YWl0LCB3YWtl dXAgYW5kIGRldGF0Y2guIFRoaXMKKwkjIGluaXRpYWxpemVzIHRoZSBzaG1lbSBmb3IgdGhl ICd3YWl0JyBhY3Rpb24uCisJd2FpdF9pbmplY3Rpb25fcG9pbnQoJG5vZGUsICRpbml0KSBp ZiBkZWZpbmVkKCRpbml0KTsKKwl3YWtldXBfaW5qZWN0aW9uX3BvaW50KCRub2RlLCAkaW5p dCkgaWYgZGVmaW5lZCgkaW5pdCk7CisKKwkjIFdhaXQgZm9yIHRoZSBpbmplY3Rpb24gcG9p bnQgdG8gYmUgaGl0IGJ5IHRoZSBzdGF0ZSBjaGFuZ2UuCisJd2FpdF9pbmplY3Rpb25fcG9p bnQoJG5vZGUsICRwb2ludCk7CisKKwkjIFRoZSBjaGVja3N1bSBzdGF0ZSBjaGFuZ2UgaXMg cGF1c2VkIG9uIHRoZSBpbmplY3Rpb24gcG9pbnQuIFBlcmZvcm0KKwkjIHRoZSBjaGVja3Bv aW50IChzeW5jaHJvbm91c2x5KS4KKwlub3RlKCdjaGVja3BvaW50Jyk7CisJJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ0hFQ0tQT0lOVCIpOworCisJIyBXYWtlIHRoZSBpbmpl Y3Rpb24gcG9pbnQsIHNvIHRoYXQgdGhlIGZpcnN0IGNoYW5nZSBjYW4gcHJvY2VlZC4KKwl3 YWtldXBfaW5qZWN0aW9uX3BvaW50KCRub2RlLCAkcG9pbnQpOworCisJIyBXYWl0IHVudGls IHRoZXJlIGFyZSBubyBvbmdvaW5nIGNoZWNrc3VtIGNoYW5nZXMsIHdoaWNoIHdlIGRldGVy bWluZQorCSMgYnkgbG9va2luZyBmb3IgYSBjaGVja3N1bSBsYXVuY2hlciBwcm9jZXNzLgor CW5vdGUoJ3dhaXQgZm9yIHRoZSBjaGVja3N1bSBsYXVuY2hlciB0byBleGl0Jyk7CisJJG5v ZGUtPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkJCSJTRUxFQ1QgY291bnQoKikg PSAwICIKKwkJICAuICJGUk9NIHBnX2NhdGFsb2cucGdfc3RhdF9hY3Rpdml0eSAiCisJCSAg LiAiV0hFUkUgYmFja2VuZF90eXBlID0gJ2RhdGFjaGVja3N1bSBsYXVuY2hlcic7Iik7CisK KwkjIERvZXMgdGhlIGZpbmFsIGNoZWNrc3VtIHN0YXRlIG1hdGNoIHRoZSBleHBlY3RlZCBz dGF0ZT8KKwl0ZXN0X2NoZWNrc3VtX3N0YXRlKCRub2RlLCAkZmluYWwpOworCisJIyByZXN0 YXJ0IHRoZSBjbHVzdGVyLCBwb3NzaWJseSBpbiBpbW1lZGlhdGUgbW9kZSwgdG8gc2ltdWxh dGUgYSBjcmFzaAorCSMKKwkjIFhYWCBtYXliZSB3ZSBzaG91bGQgZG8ganVzdCBpbW1lZGlh dGUgc2h1dGRvd25zLCBiZWNhdXNlIHRoZSBzaHV0ZG93bgorCSMgY2hlY2twb2ludCB3aWxs IG92ZXJ3cml0ZSB0aGUgc3RhdGUgc3RhdGUgd2l0aCAiY3VycmVudCIgb25lLCBub3QgdGhl CisJIyBzdGF0ZSBwcm9kdWNlZCBieSB0aGUgY29uY3VycmVudCBjaGFuZ2UgKyBjaGVja3Bv aW50LgorCSRub2RlLT5zdG9wKHN0b3Btb2RlKCkpOworCSRub2RlLT5zdGFydDsKKworCSMg RG9lcyB0aGUgZmluYWwgY2hlY2tzdW0gc3RhdGUgbWF0Y2ggdGhlIGV4cGVjdGVkIHN0YXRl PworCXRlc3RfY2hlY2tzdW1fc3RhdGUoJG5vZGUsICRmaW5hbCk7CisKKwkjIFNpbmNlIHRo ZSBsb2cgaXNuJ3QgYmVpbmcgd3JpdHRlbiB0byBub3csIHBhcnNlIHRoZSBsb2cgYW5kIGNo ZWNrCisJIyBmb3IgaW5zdGFuY2VzIG9mIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsdXJl cy4KKwlteSAkbG9nID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnNsdXJwX2ZpbGUoJG5v ZGUtPmxvZ2ZpbGUsCisJCSRub2RlX2xvZ2xvY2F0aW9uKTsKKwl1bmxpa2UoCisJCSRsb2cs CisJCXFyL3BhZ2UgdmVyaWZpY2F0aW9uIGZhaWxlZCwuK1xkJC8sCisJCSJubyBjaGVja3N1 bSB2YWxpZGF0aW9uIGVycm9ycyBpbiBwcmltYXJ5IGxvZyAoZHVyaW5nIFdBTCByZWNvdmVy eSkiCisJKTsKKwkkbm9kZV9sb2dsb2NhdGlvbiA9IC1zICRub2RlLT5sb2dmaWxlOworfQor CisjIGNvbmN1cnJlbnQgZW5hYmxlICsgY2hlY2twb2ludCwgZGlmZmVyZW50IGluamVjdGlv biBwb2ludHMgaW4gdGhlICJlbmFibGUiIHByb2Nlc3MKK3Rlc3RfY2hlY2tzdW1fdHJhbnNp dGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWVuYWJs ZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdvbicpOwordGVzdF9jaGVja3N1bV90 cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUt aW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5w cm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZycsICdvbicpOwordGVzdF9jaGVja3N1bV90 cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUt aW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5w cm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcsICdvbicpOwordGVzdF9jaGVja3N1 bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUt aW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUnLCAnb24nKTsKK3Rlc3Rf Y2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgdW5kZWYsICdkYXRh Y2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13 YWl0JywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2Vu YWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1 bXMtZW5kJywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywg J2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0 JywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJs ZScsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNr c3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnb24nKTsKK3Rlc3RfY2hlY2tz dW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5h YmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMt YWZ0ZXIteGxvZ2N0bCcsICdvbicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNh YmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0 JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZScs ICdvbicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUn LCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2tw b2ludCcsICdvbicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdl bmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1iZWZvcmUt YmFycmllci13YWl0JywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2Fi bGVkJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1z LWVuZCcsICdvbicpOworCisjIGNvbmN1cnJlbnQgZGlzYWJsZSArIGNoZWNrcG9pbnQsIGRp ZmZlcmVudCBpbmplY3Rpb24gcG9pbnRzIGluIHRoZSAiZGlzYWJsZSIgcHJvY2VzcwordGVz dF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCB1bmRlZiwgJ2Rh dGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdvZmYn KTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgJ2Rh dGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRh Y2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZycsICdv ZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywg J2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdk YXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0 bCcsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNh YmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFy dCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIt Y29udHJvbGZpbGUnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJs ZWQnLCAnZGlzYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jl c3MtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdhaXQnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNr c3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1f dHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJs ZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1h ZnRlci14bG9nJywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVk JywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcs ICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnb2Zm Jyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdk YXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMt ZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUnLCAnb2ZmJyk7Cit0ZXN0X2No ZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsIHVuZGVmLCAnZGF0YWNo ZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2ludCcsICdvZmYnKTsK K3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxlZCcsICdkaXNhYmxlJywgdW5kZWYs ICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdhaXQn LCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJs ZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1lbmQnLCAnb2Zm Jyk7CisKKyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjU0LjAKCg== --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0007-TAP-12-crashes-at-injection-points.patch" Content-Disposition: attachment; filename="0007-TAP-12-crashes-at-injection-points.patch" Content-Transfer-Encoding: base64 RnJvbSA1N2E1ZTM1M2RiZmNhYWFjMWZhN2NkMjVkYzM4ZjNlMTgwN2NjYWZhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogV2VkLCAxNSBBcHIgMjAyNiAyMzowNjoxNCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg MDcvMTNdIFRBUCAxMjogY3Jhc2hlcyBhdCBpbmplY3Rpb24gcG9pbnRzCgotLS0KIC4uLi90 LzAxMl9jb25jdXJyZW50X2NoZWNrcG9pbnRfY3Jhc2gucGwgICAgICB8IDI4MiArKysrKysr KysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyODIgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMvdC8wMTJfY29u Y3VycmVudF9jaGVja3BvaW50X2NyYXNoLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2NoZWNrc3Vtcy90LzAxMl9jb25jdXJyZW50X2NoZWNrcG9pbnRfY3Jhc2gu cGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2hlY2tzdW1zL3QvMDEyX2NvbmN1cnJlbnRf Y2hlY2twb2ludF9jcmFzaC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uZGUxNjlmNDcwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY2hlY2tzdW1zL3QvMDEyX2NvbmN1cnJlbnRfY2hlY2twb2ludF9jcmFzaC5wbApA QCAtMCwwICsxLDI4MiBAQAorCisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0IHN1aXRlIGZvciB0ZXN0aW5nIGVu YWJsaW5nIGRhdGEgY2hlY2tzdW1zIGluIGFuIG9ubGluZSBjbHVzdGVyIHdpdGgKKyMgaW5q ZWN0aW9uIHBvaW50IHRlc3RzIGluamVjdGluZyBmYWlsdXJlcyBpbnRvIHRoZSBwcm9jZXNz aW5nCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK3VzZSBGaW5kQmluOwordXNlIGxpYiAkRmluZEJp bjo6UmVhbEJpbjsKKwordXNlIERhdGFDaGVja3N1bXM6OlV0aWxzOworCisjIFRoaXMgdGVz dCBzdWl0ZSBpcyBleHBlbnNpdmUsIG9yIHZlcnkgZXhwZW5zaXZlLCB0byBleGVjdXRlLiAg VGhlcmUgYXJlIHR3bworIyBQR19URVNUX0VYVFJBIG9wdGlvbnMgZm9yIHJ1bm5pbmcgaXQs ICJjaGVja3N1bSIgZm9yIGEgcGFyZWQtZG93biB0ZXN0IHN1aXRlCisjIGFuICJjaGVja3N1 bV9leHRlbmRlZCIgZm9yIHRoZSBmdWxsIHN1aXRlLiAgVGhlIGZ1bGwgc3VpdGUgY2FuIHJ1 biBmb3IgaG91cnMKKyMgb24gc2xvdyBvciBjb25zdHJhaW5lZCBzeXN0ZW1zLgorbXkgJGV4 dGVuZGVkID0gdW5kZWY7CitpZiAoJEVOVntQR19URVNUX0VYVFJBfSkKK3sKKwkkZXh0ZW5k ZWQgPSAxIGlmICgkRU5We1BHX1RFU1RfRVhUUkF9ID1+IC9cYmNoZWNrc3VtX2V4dGVuZGVk XGIvKTsKKwlwbGFuIHNraXBfYWxsID0+ICdFeHBlbnNpdmUgZGF0YSBjaGVja3N1bXMgdGVz dCBkaXNhYmxlZCcKKwkgIHVubGVzcyAoJEVOVntQR19URVNUX0VYVFJBfSA9fiAvXGJjaGVj a3N1bShfZXh0ZW5kZWQpP1xiLyk7Cit9CisKK2lmICgkRU5We2VuYWJsZV9pbmplY3Rpb25f cG9pbnRzfSBuZSAneWVzJykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdJbmplY3Rpb24gcG9p bnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCc7Cit9CisKKyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisjIFRlc3QgY2x1c3RlciBzZXR1cAorIworCisjIEluaXRpYXRlIHRlc3Rj bHVzdGVyCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnaW5q ZWN0aW9uX25vZGUnKTsKKyRub2RlLT5pbml0KG5vX2RhdGFfY2hlY2tzdW1zID0+IDEpOwor JG5vZGUtPnN0YXJ0OworCisjIFNldCB1cCB0ZXN0IGVudmlyb25tZW50Ciskbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhURU5TSU9OIHRlc3RfY2hlY2tzdW1zOycp OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBpbmpl Y3Rpb25fcG9pbnRzOycpOworCitteSAkcGdiZW5jaCA9IHVuZGVmOworbXkgJHNjYWxlZmFj dG9yID0gKCRleHRlbmRlZCA/IDEwIDogMSk7CitteSAkbm9kZV9sb2dsb2NhdGlvbiA9IDA7 CisKKyRub2RlLT5jb21tYW5kX29rKAorCVsKKwkJJ3BnYmVuY2gnLCAnLXAnLCAkbm9kZS0+ cG9ydCwgJy1pJywKKwkJJy1zJywgJHNjYWxlZmFjdG9yLCAnLXEnLCAncG9zdGdyZXMnCisJ XSk7CisKKyMgU3RhcnQgYSBwZ2JlbmNoIHJ1biBpbiB0aGUgYmFja2dyb3VuZCBhZ2FpbnN0 IHRoZSBzZXJ2ZXIgc3BlY2lmaWVkIHZpYSB0aGUKKyMgcG9ydCBwYXNzZWQgYXMgcGFyYW1l dGVyLgorc3ViIGJhY2tncm91bmRfcndfcGdiZW5jaAoreworCW15ICRwb3J0ID0gc2hpZnQ7 CisKKwkjIElmIGEgcHJldmlvdXMgcGdiZW5jaCBpcyBzdGlsbCBydW5uaW5nLCBzdGFydCBi eSBzaHV0dGluZyBpdCBkb3duLgorCSRwZ2JlbmNoLT5maW5pc2ggaWYgJHBnYmVuY2g7CisK KwlteSAkY2xpZW50cyA9IDE7CisJbXkgJHJ1bnRpbWUgPSAyOworCisJaWYgKCRleHRlbmRl ZCkKKwl7CisJCSMgUmFuZG9taXplIHRoZSBudW1iZXIgb2YgcGdiZW5jaCBjbGllbnRzIGEg Yml0IChyYW5nZSAxLTE2KQorCQkkY2xpZW50cyA9IDEgKyBpbnQocmFuZCgxNSkpOworCQkk cnVudGltZSA9IDYwMDsKKwl9CisJbXkgQGNtZCA9ICgncGdiZW5jaCcsICctcCcsICRwb3J0 LCAnLVQnLCAkcnVudGltZSwgJy1jJywgJGNsaWVudHMpOworCisJIyBSYW5kb21pemUgd2hl dGhlciB3ZSBzcGF3biBjb25uZWN0aW9ucyBvciBub3QKKwlwdXNoKEBjbWQsICctQycpIGlm ICgkZXh0ZW5kZWQgJiYgY29pbnRvc3MpOworCSMgRmluYWxseSBhZGQgdGhlIGRhdGFiYXNl IG5hbWUgdG8gdXNlCisJcHVzaChAY21kLCAncG9zdGdyZXMnKTsKKworCSRwZ2JlbmNoID0g SVBDOjpSdW46OnN0YXJ0KAorCQlcQGNtZCwKKwkJJzwnID0+ICcvZGV2L251bGwnLAorCQkn PicgPT4gJy9kZXYvbnVsbCcsCisJCScyPicgPT4gJy9kZXYvbnVsbCcsCisJCUlQQzo6UnVu Ojp0aW1lcigkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCkpOwor fQorCitzdWIgYXR0YWNoX2luamVjdGlvbl9wb2ludAoreworCW15ICgkbm9kZSwgJHBvaW50 KSA9IEBfOworCW5vdGUoJ2F0dGFjaGluZyBpbmplY3Rpb24gcG9pbnQ6ICcgLiAkcG9pbnQp OworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBpbmplY3Rpb25f cG9pbnRzX2F0dGFjaCgnIiAuICRwb2ludCAuICInLCd3YWl0Jyk7IgorCSk7Cit9CisKK3N1 YiB3YWl0X2luamVjdGlvbl9wb2ludAoreworCW15ICgkbm9kZSwgJHBvaW50KSA9IEBfOwor CisJbm90ZSgid2FpdGluZyBmb3IgdGhlIGluamVjdGlvbiBwb2ludCB0byBiZSBoaXQiKTsK Kwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBD T1VOVCgqKSBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdF9hY3Rpdml0eSBXSEVSRSB3YWl0X2V2 ZW50ID0gJyIgLiAkcG9pbnQgLiAiJyIsCisJCScxJyk7Cit9CisKK3N1YiB3YWtldXBfaW5q ZWN0aW9uX3BvaW50Cit7CisJbXkgKCRub2RlLCAkcG9pbnQpID0gQF87CisKKwlub3RlKCd3 YWtpbmcgdGhlIGluaXQgaW5qZWN0aW9uIHBvaW50OiAnIC4gJHBvaW50KTsKKwkkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtl dXAoJyIgLiAkcG9pbnQgLiAiJyk7IgorCSk7CisKKwlub3RlKCJkZXRhY2hpbmcgdGhlIGlu aXQgaW5qZWN0aW9uIHBvaW50Iik7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCciIC4gJHBvaW50IC4gIicpOyIp OworfQorCisjIFRlc3QgYmVoYXZpb3Igd2l0aCBhIGNoZWNrc3VtIHRyYW5zaXRpb25zIGFu ZCBhIGNvbmN1cnJlbnQgY2hlY2twb2ludCwKKyMgZm9sbG93ZWQgYnkgYSBjcmFzaC4KKyMK KyMgVGhlIHRlc3QgcHV0cyB0aGUgaW5zdGFuY2UgaW50byB0aGUgaW5pdGlhbCBjaGVja3N1 bSBzdGF0ZSAkc3RhcnQsCisjIHRyaWdnZXJzIGEgY2hlY2tzdW0gY2hhbmdlIHRoYXQgcGF1 c2VzIG9uIGEgZmlyc3QgaW5qZWN0aW9uIHBvaW50LiBUaGVuCisjIGEgY2hlY2twb2ludCBp cyBwZXJmb3JtZWQsIGFuZCB0aGUgY2hlY2tzdW0gY2hhbmdlIHByb2NlZWRzIGVpdGhlciB0 bworIyBhIHNlY29uZCBpbmplY3Rpb24gcG9pbnQgb3IgZmluaXNoZXMuCisjCisjIFRoZW4g dGhlIGluc3RhbmNlIGdldCByZXN0YXJ0ZWQgaW4gaW1tZWRpYXRlIG1vZGUgdG8gc2ltdWxh dGUgZmFpbHVyZSwKKyMgYW5kIHRoZSBmaW5hbCBjaGVja3N1bSBzdGF0ZSAoYWZ0ZXIgcmVj b3ZlcnkpIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZQorIyBleHBlY3RlZCB2YWx1ZS4gVGhl IHNlcnZlciBsb2cgaXMgY2hlY2tlZCBmb3IgY2hlY2tzdW0gZmFpbHVyZXMuCisjCisjIFdo aWxlIHRoZSBjaGVja3N1bSBjaGFuZ2UgaXMgaGFwcGVuaW5nLCB0aGVyZSdzIGEgci93IHBn YmVuY2ggcnVubmluZyBpbgorIyB0aGUgYmFja2dyb3VuZCwgdG8gZ2VuZXJhdGUgd3JpdGVz LgorIworIyBhcmd1bWVudHM6CisjCisjIC0gc3RhcnQgIC0gc3RhcnQgY2hlY2tzdW0gc3Rh dGUgKGVuYWJsZWQvZGlzYWJsZWQpCisjIC0gY2hhbmdlIC0gY2hlY2tzdW0gY2hhbmdlIHRv IGluaXRpYXRlCisjIC0gcG9pbnQxIC0gaW5qZWN0aW9uIHBvaW50IGJlZm9yZSBjaGVja3Bv aW50CisjIC0gcG9pbnQyIC0gaW5qZWN0aW9uIHBvaW50IGFmdGVyIGNoZWNrcG9pbnQKKyMg LSBmaW5hbCAgLSBleHBlY3RlZCBjaGVja3N1bSBzdGF0ZSBhdCB0aGUgZW5kCisjCisjIFhY WCBTb21lIG9mIHRoZSBpbmplY3Rpb24gcG9pbnRzIGFyZSBpbiBhIGNyaXRpY2FsIHNlY3Rp b24sIHdoaWNoIGRvZXMKKyMgbm90IGFsbG93IG1lbW9yeSBhbGxvY2F0aW9ucyBldGMuIElO SkVDVElPTl9QT0lOVF9MT0FEL19DQUNIRUQgaGFuZGxlcworIyBqdXN0IHByaXZhdGUgbWVt b3J5IGFsbG9jYXRpb24sIGJ1dCAnd2FpdCcgcmVxdWlyZXMgYSBzaG1lbSBhbGxvY2F0aW9u LgorIyBUbyBkZWFsIHdpdGggdGhhdCwgd2Ugc2V0dXAgYW4gaW5qZWN0aW9uIHBvaW50ICRp bml0IG91dHNpZGUgYSBjcml0aWNhbAorIyBzZWN0aW9uIHRvIGluaXRpYWxpemUgdGhlIHNo bWVtIHN0dWZmIG5lZWRlZCBieSAnd2FpdCcuCisjCisjIFhYWCBXZSBjb3VsZCBhbHNvIHZh bGlkYXRlIHRoZSBjaGVja3N1bXMgdXNpbmcgcGdfY2hlY2tzdW1zLCBpZiB0aGUKKyMgc3Rh dGUgaXMgJ29uJy4KK3N1YiB0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24KK3sKKwlteSAoJHN0 YXJ0LCAkY2hhbmdlLCAkaW5pdCwgJHBvaW50MSwgJHBvaW50MiwgJGZpbmFsKSA9IEBfOwor CisJbXkgJGluaXRzdHIgPSAndW5kZWYnOworCW15ICRwb2ludDJzdHIgPSAndW5kZWYnOwor CisJIyBwcmludCB0aGUgY3VycmVudCB0ZXN0IGluc3RydWN0aW9ucywgYm90aCBpbnRvIFRB UCBvdXRwdXQgYW5kIGludG8KKwkjIHRoZSBzZXJ2ZXIgbG9nLCB0byBtYWtlIGNvcnJlbGF0 aW9uIGVhc2llcgorCisJJGluaXRzdHIgPSAkaW5pdCBpZiBkZWZpbmVkKCRpbml0KTsKKwkk cG9pbnQyc3RyID0gJHBvaW50MiBpZiBkZWZpbmVkKCRwb2ludDIpOworCisJJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUICc9PT09PT09PT09ICIgLiAkc3RhcnQg LiAiIC8gIiAuICRjaGFuZ2UgLiAiIC8gIiAuICRpbml0c3RyIC4gIiAvICIgLiAkcG9pbnQx IC4gIiAvICIgLiAkcG9pbnQyc3RyIC4gIiAvICIgLiAkZmluYWwgLiAiID09PT09PT09PT0n Iik7CisKKwlub3RlKCRzdGFydCAuICIgLyAiIC4gJGNoYW5nZSAuICIgLyAiIC4gJGluaXRz dHIgLiAiIC8gIiAuICRwb2ludDEgLiAiIC8gIiAuICRwb2ludDJzdHIgLiAiIC8gIiAuICRm aW5hbCk7CisKKwkjIFN0YXJ0IHRoZSB0ZXN0IHN1aXRlIHdpdGggcGdiZW5jaCBydW5uaW5n LgorCWJhY2tncm91bmRfcndfcGdiZW5jaCgkbm9kZS0+cG9ydCk7CisKKwkjIHB1dCB0aGUg Y2x1c3RlciBpbnRvIHRoZSBpbml0aWFsIGNoZWNrc3VtIHN0YXRlLCBzeW5jaHJvbm91c2x5 CisJbm90ZSgnY2hhbmdpbmcgY2hlY2tzdW1zIGludG8gaW5pdGlhbCBzdGF0ZTogJyAuICRz dGFydCk7CisJZW5hYmxlX2RhdGFfY2hlY2tzdW1zKCRub2RlLCB3YWl0ID0+ICdvbicpIGlm ICgkc3RhcnQgZXEgJ2VuYWJsZWQnKTsKKwlkaXNhYmxlX2RhdGFfY2hlY2tzdW1zKCRub2Rl LCB3YWl0ID0+ICdvZmYnKSBpZiAoJHN0YXJ0IGVxICdkaXNhYmxlZCcpOworCisJICMgV2Fp dCBvbiBhbiBpbmplY3Rpb24gcG9pbnQgb3V0c2lkZSBhIGNyaXRpY2FsIHNlY3Rpb24sIHRv IGluaXRpYWxpemUKKwkgIyB0aGUgc2htZW0gKHdoaWNoIGNhbid0IGJlIGRvbmUgaW4gY3Jp dGljYWwgc2VjdGlvbikuCisJYXR0YWNoX2luamVjdGlvbl9wb2ludCgkbm9kZSwgJGluaXQp IGlmIGRlZmluZWQoJGluaXQpOworCisJIyBXYWl0IG9uIHRoZSB0d28gaW5qZWN0aW9uIHBv aW50cywgdG8gcGF1c2UgdGhlIGNoZWNrc3VtIGNoYW5nZS4KKwlhdHRhY2hfaW5qZWN0aW9u X3BvaW50KCRub2RlLCAkcG9pbnQxKTsKKworCSMgVGhlIHNlY29uZCBpbmplY3Rpb24gcG9p bnQgaXMgb3B0aW9uYWwsIHNvIG9ubHkgYXR0YWNoIGl0IHRoZW4uCisJYXR0YWNoX2luamVj dGlvbl9wb2ludCgkbm9kZSwgJHBvaW50MikgaWYgZGVmaW5lZCgkcG9pbnQyKTsKKworCSMg VHJpZ2dlciB0aGUgY2hlY2tzdW0gY2hhbmdlLCBhc3luY2hyb25vdXNseQorCW5vdGUoInRy aWdnZXJpbmcgY2hlY2tzdW0gY2hhbmdlOiAiIC4gJGNoYW5nZSk7CisJZW5hYmxlX2RhdGFf Y2hlY2tzdW1zKCRub2RlKSBpZiAoJGNoYW5nZSBlcSAnZW5hYmxlJyk7CisJZGlzYWJsZV9k YXRhX2NoZWNrc3Vtcygkbm9kZSkgaWYgKCRjaGFuZ2UgZXEgJ2Rpc2FibGUnKTsKKworCSMg SGFuZGxlIHRoZSBpbml0aWFsIGluamVjdGlvbiBwb2ludCAtIHdhaXQsIHdha2V1cCBhbmQg ZGV0YXRjaC4gVGhpcworCSMgaW5pdGlhbGl6ZXMgdGhlIHNobWVtIGZvciB0aGUgJ3dhaXQn IGFjdGlvbi4KKwl3YWl0X2luamVjdGlvbl9wb2ludCgkbm9kZSwgJGluaXQpIGlmIGRlZmlu ZWQoJGluaXQpOworCXdha2V1cF9pbmplY3Rpb25fcG9pbnQoJG5vZGUsICRpbml0KSBpZiBk ZWZpbmVkKCRpbml0KTsKKworCSMgV2FpdCBmb3IgdGhlIGZpcnN0IGluamVjdGlvbiBwb2lu dCB0byBiZSBoaXQgYnkgdGhlIHN0YXRlIGNoYW5nZS4KKwl3YWl0X2luamVjdGlvbl9wb2lu dCgkbm9kZSwgJHBvaW50MSk7CisKKwkjIFRoZSBjaGVja3N1bSBzdGF0ZSBjaGFuZ2UgaXMg cGF1c2VkIG9uIHRoZSBmaXJzdCBpbmplY3Rpb24gcG9pbnQuCisJIyBQZXJmb3JtIHRoZSBj aGVja3BvaW50IChzeW5jaHJvbm91c2x5KS4KKwlub3RlKCdjaGVja3BvaW50Jyk7CisJJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ0hFQ0tQT0lOVCIpOworCisJIyBXYWtlIHRo ZSBpbmplY3Rpb24gcG9pbnQsIHNvIHRoYXQgdGhlIGZpcnN0IGNoYW5nZSBjYW4gcHJvY2Vl ZC4KKwl3YWtldXBfaW5qZWN0aW9uX3BvaW50KCRub2RlLCAkcG9pbnQxKTsKKworCSMgRWl0 aGVyIHdhaXQgZm9yIHRoZSBzZWNvbmQgaW5qZWN0aW9uIHBvaW50IC0gaWYgZGVmaW5lZCwg b3IgZm9yIHRoZQorCSMgY2hlY2tzdW0gY2hhbmdlIHRvIGNvbXBsZXRlLgorCisJaWYgKGRl ZmluZWQoJHBvaW50MikpCisJeworCQl3YWl0X2luamVjdGlvbl9wb2ludCgkbm9kZSwgJHBv aW50Mik7CisJfQorCWVsc2UKKwl7CisJCSMgV2FpdCB1bnRpbCB0aGVyZSBhcmUgbm8gb25n b2luZyBjaGVja3N1bSBjaGFuZ2VzLCB3aGljaCB3ZSBkZXRlcm1pbmUKKwkJIyBieSBsb29r aW5nIGZvciBhIGNoZWNrc3VtIGxhdW5jaGVyIHByb2Nlc3MuCisJCW5vdGUoJ3dhaXQgZm9y IHRoZSBjaGVja3N1bSBsYXVuY2hlciB0byBleGl0Jyk7CisJCSRub2RlLT5wb2xsX3F1ZXJ5 X3VudGlsKCdwb3N0Z3JlcycsCisJCQkJIlNFTEVDVCBjb3VudCgqKSA9IDAgIgorCQkJICAu ICJGUk9NIHBnX2NhdGFsb2cucGdfc3RhdF9hY3Rpdml0eSAiCisJCQkgIC4gIldIRVJFIGJh Y2tlbmRfdHlwZSA9ICdkYXRhY2hlY2tzdW0gbGF1bmNoZXInOyIpOworCQlub3RlKCdjaGVj a3N1bSBsYXVuY2hlciBleGl0ZWQnKTsKKwl9CisKKwkjIHJlc3RhcnQgdGhlIGNsdXN0ZXIs IGluIGltbWVkaWF0ZSBtb2RlLCB0byBzaW11bGF0ZSBhIGNyYXNoCisJJG5vZGUtPnN0b3Ao J2ltbWVkaWF0ZScpOworCSRub2RlLT5zdGFydDsKKworCSMgRG9lcyB0aGUgZmluYWwgY2hl Y2tzdW0gc3RhdGUgbWF0Y2ggdGhlIGV4cGVjdGVkIHN0YXRlPworCXRlc3RfY2hlY2tzdW1f c3RhdGUoJG5vZGUsICRmaW5hbCk7CisKKwkjIFNpbmNlIHRoZSBsb2cgaXNuJ3QgYmVpbmcg d3JpdHRlbiB0byBub3csIHBhcnNlIHRoZSBsb2cgYW5kIGNoZWNrCisJIyBmb3IgaW5zdGFu Y2VzIG9mIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsdXJlcy4KKwlteSAkbG9nID0gUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM6OnNsdXJwX2ZpbGUoJG5vZGUtPmxvZ2ZpbGUsCisJCSRu b2RlX2xvZ2xvY2F0aW9uKTsKKwl1bmxpa2UoCisJCSRsb2csCisJCXFyL3BhZ2UgdmVyaWZp Y2F0aW9uIGZhaWxlZCwuK1xkJC8sCisJCSJubyBjaGVja3N1bSB2YWxpZGF0aW9uIGVycm9y cyBpbiBwcmltYXJ5IGxvZyAoZHVyaW5nIFdBTCByZWNvdmVyeSkiCisJKTsKKwkkbm9kZV9s b2dsb2NhdGlvbiA9IC1zICRub2RlLT5sb2dmaWxlOworfQorCisjIGNvbmN1cnJlbnQgZW5h YmxlICsgY2hlY2twb2ludCwgZGlmZmVyZW50IGluamVjdGlvbiBwb2ludHMgaW4gdGhlICJl bmFibGUiIHByb2Nlc3MKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAn ZW5hYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNr c3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vt cy1hZnRlci14bG9nJywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdkaXNh YmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVj a3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1 bXMtYWZ0ZXIteGxvZycsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNr c3Vtcy1hZnRlci14bG9nY3RsJywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9u KCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVz cy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1j aGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dy ZXNzLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZScsICdvZmYnKTsKK3Rlc3RfY2hlY2tz dW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5h YmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxl LWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlJywgJ2RhdGFjaGVja3N1 bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdhaXQnLCAn b2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScs IHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVm b3JlLWJhcnJpZXItd2FpdCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNo ZWNrc3Vtcy1lbmQnLCAnb2ZmJyk7Cit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2Fi bGVkJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVz cy1jaGVja3N1bXMtZW5kJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1zdGFy dCcsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5h YmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAn ZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnb24nKTsKK3Rl c3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVj a3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1j aGVja3N1bXMtYWZ0ZXIteGxvZycsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMt YWZ0ZXIteGxvZ2N0bCcsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlz YWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1zdGFy dCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcsICdk YXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUnLCAnb24n KTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2Rh dGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVu YWJsZS1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFi bGUtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50JywgJ29uJyk7Cit0ZXN0X2NoZWNrc3Vt X3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vt cy1lbmFibGUtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50JywgJ2RhdGFjaGVja3N1bXMt ZW5hYmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0JywgJ29uJyk7Cit0ZXN0X2No ZWNrc3VtX3RyYW5zaXRpb24oJ2Rpc2FibGVkJywgJ2VuYWJsZScsIHVuZGVmLCAnZGF0YWNo ZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdhaXQnLCAnZGF0YWNo ZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWVuZCcsICdvbicpOwordGVzdF9jaGVja3N1bV90 cmFuc2l0aW9uKCdkaXNhYmxlZCcsICdlbmFibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMt ZW5hYmxlLWNoZWNrc3Vtcy1lbmQnLCB1bmRlZiwgJ29uJyk7CisKKyMgY29uY3VycmVudCBk aXNhYmxlICsgY2hlY2twb2ludCwgZGlmZmVyZW50IGluamVjdGlvbiBwb2ludHMgaW4gdGhl ICJkaXNhYmxlIiBwcm9jZXNzCit0ZXN0X2NoZWNrc3VtX3RyYW5zaXRpb24oJ2VuYWJsZWQn LCAnZGlzYWJsZScsIHVuZGVmLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3Mt Y2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNo ZWNrc3Vtcy1hZnRlci14bG9nJywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9u KCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jl c3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNz LWNoZWNrc3Vtcy1hZnRlci14bG9nJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dy ZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsJywgJ29uJyk7Cit0ZXN0X2NoZWNrc3VtX3Ry YW5zaXRpb24oJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUt aW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlu cHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnZGF0YWNoZWNrc3Vtcy1kaXNh YmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlJywgJ29mZicpOwor dGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0YWNo ZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVj a3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZScs ICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWJh cnJpZXItd2FpdCcsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxl ZCcsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVz cy1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCcsICdkYXRhY2hlY2tzdW1zLWRpc2Fi bGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9u KCdlbmFibGVkJywgJ2Rpc2FibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1j aGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRl ci14bG9nJywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywg J2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdk YXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cnLCAnZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsJywgJ29mZicpOwordGVzdF9j aGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vt cy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hl Y2tzdW1zLWFmdGVyLXhsb2djdGwnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vt cy1hZnRlci1jb250cm9sZmlsZScsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlv bignZW5hYmxlZCcsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1 bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250 cm9sZmlsZScsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1jaGVj a3BvaW50JywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdlbmFibGVkJywg J2Rpc2FibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYmVm b3JlLWNoZWNrcG9pbnQnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZv cmUtYmFycmllci13YWl0JywgJ29mZicpOwordGVzdF9jaGVja3N1bV90cmFuc2l0aW9uKCdl bmFibGVkJywgJ2Rpc2FibGUnLCB1bmRlZiwgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVj a3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hl Y2tzdW1zLWVuZCcsICdvZmYnKTsKK3Rlc3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZW5hYmxl ZCcsICdkaXNhYmxlJywgdW5kZWYsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1z LWVuZCcsIHVuZGVmLCAnb2ZmJyk7CisKKyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7 Ci0tIAoyLjU0LjAKCg== --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0008-TAP-13-concurrency-with-checkpoint-REDO.patch" Content-Disposition: attachment; filename="0008-TAP-13-concurrency-with-checkpoint-REDO.patch" Content-Transfer-Encoding: base64 RnJvbSBkZGFjYTgxZjUzMGEzNzFhMmRmYWI2N2FkOWRhNDllZjFmOGFhNjllIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB0ZXN0IDx0ZXN0PgpEYXRlOiBGcmksIDEgTWF5IDIw MjYgMjI6MTY6MDAgKzAyMDAKU3ViamVjdDogW1BBVENIIDA4LzEzXSBUQVAgMTM6IGNvbmN1 cnJlbmN5IHdpdGggY2hlY2twb2ludCBSRURPCgotLS0KIC4uLi90LzAxM19hc3luY19jaGVj a3BvaW50X2NyYXNoLnBsICAgICAgICAgICB8IDYwNCArKysrKysrKysrKysrKysrKysKIDEg ZmlsZSBjaGFuZ2VkLCA2MDQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMvdC8wMTNfYXN5bmNfY2hlY2twb2ludF9j cmFzaC5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMv dC8wMTNfYXN5bmNfY2hlY2twb2ludF9jcmFzaC5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9jaGVja3N1bXMvdC8wMTNfYXN5bmNfY2hlY2twb2ludF9jcmFzaC5wbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGEzMTA1MDY0ODIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2hlY2tzdW1zL3QvMDEzX2FzeW5jX2No ZWNrcG9pbnRfY3Jhc2gucGwKQEAgLTAsMCArMSw2MDQgQEAKKworIyBDb3B5cmlnaHQgKGMp IDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBz dWl0ZSBmb3IgdGVzdGluZyBlbmFibGluZyBkYXRhIGNoZWNrc3VtcyBpbiBhbiBvbmxpbmUg Y2x1c3RlciB3aXRoCisjIGluamVjdGlvbiBwb2ludCB0ZXN0cyBpbmplY3RpbmcgZmFpbHVy ZXMgaW50byB0aGUgcHJvY2Vzc2luZworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZB VEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCit1c2UgRmluZEJp bjsKK3VzZSBsaWIgJEZpbmRCaW46OlJlYWxCaW47CisKK3VzZSBEYXRhQ2hlY2tzdW1zOjpV dGlsczsKKworIyBUaGlzIHRlc3Qgc3VpdGUgaXMgZXhwZW5zaXZlLCBvciB2ZXJ5IGV4cGVu c2l2ZSwgdG8gZXhlY3V0ZS4gIFRoZXJlIGFyZSB0d28KKyMgUEdfVEVTVF9FWFRSQSBvcHRp b25zIGZvciBydW5uaW5nIGl0LCAiY2hlY2tzdW0iIGZvciBhIHBhcmVkLWRvd24gdGVzdCBz dWl0ZQorIyBhbiAiY2hlY2tzdW1fZXh0ZW5kZWQiIGZvciB0aGUgZnVsbCBzdWl0ZS4gIFRo ZSBmdWxsIHN1aXRlIGNhbiBydW4gZm9yIGhvdXJzCisjIG9uIHNsb3cgb3IgY29uc3RyYWlu ZWQgc3lzdGVtcy4KK215ICRleHRlbmRlZCA9IHVuZGVmOworaWYgKCRFTlZ7UEdfVEVTVF9F WFRSQX0pCit7CisJJGV4dGVuZGVkID0gMSBpZiAoJEVOVntQR19URVNUX0VYVFJBfSA9fiAv XGJjaGVja3N1bV9leHRlbmRlZFxiLyk7CisJcGxhbiBza2lwX2FsbCA9PiAnRXhwZW5zaXZl IGRhdGEgY2hlY2tzdW1zIHRlc3QgZGlzYWJsZWQnCisJICB1bmxlc3MgKCRFTlZ7UEdfVEVT VF9FWFRSQX0gPX4gL1xiY2hlY2tzdW0oX2V4dGVuZGVkKT9cYi8pOworfQorCitpZiAoJEVO VntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gbmUgJ3llcycpCit7CisJcGxhbiBza2lwX2Fs bCA9PiAnSW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQnOwor fQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGNsdXN0ZXIgc2V0dXAKKyMK KworIyBJbml0aWF0ZSB0ZXN0Y2x1c3RlcgorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ2luamVjdGlvbl9ub2RlJyk7Ciskbm9kZS0+aW5pdChub19kYXRh X2NoZWNrc3VtcyA9PiAxKTsKKworIyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGl0IGNoZWNrcG9p bnRzIHVubGVzcyBkZXNpcmVkCiskbm9kZS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwu Y29uZicsCisJcXFbCitjaGVja3BvaW50X3RpbWVvdXQgPSAxaAorbWF4X3dhbF9zaXplID0g MzJHQgorXSk7Ciskbm9kZS0+c3RhcnQ7CisKKyMgU2V0IHVwIHRlc3QgZW52aXJvbm1lbnQK KyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gdGVzdF9j aGVja3N1bXM7Jyk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgRVhU RU5TSU9OIGluamVjdGlvbl9wb2ludHM7Jyk7CisKK215ICRwZ2JlbmNoID0gdW5kZWY7Citt eSAkc2NhbGVmYWN0b3IgPSAoJGV4dGVuZGVkID8gMTAgOiAxKTsKK215ICRub2RlX2xvZ2xv Y2F0aW9uID0gMDsKKworJG5vZGUtPmNvbW1hbmRfb2soCisJWworCQkncGdiZW5jaCcsICct cCcsICRub2RlLT5wb3J0LCAnLWknLAorCQknLXMnLCAkc2NhbGVmYWN0b3IsICctcScsICdw b3N0Z3JlcycKKwldKTsKKworIyBTdGFydCBhIHBnYmVuY2ggcnVuIGluIHRoZSBiYWNrZ3Jv dW5kIGFnYWluc3QgdGhlIHNlcnZlciBzcGVjaWZpZWQgdmlhIHRoZQorIyBwb3J0IHBhc3Nl ZCBhcyBwYXJhbWV0ZXIuCitzdWIgYmFja2dyb3VuZF9yd19wZ2JlbmNoCit7CisJbXkgJHBv cnQgPSBzaGlmdDsKKworCSMgSWYgYSBwcmV2aW91cyBwZ2JlbmNoIGlzIHN0aWxsIHJ1bm5p bmcsIHN0YXJ0IGJ5IHNodXR0aW5nIGl0IGRvd24uCisJJHBnYmVuY2gtPmZpbmlzaCBpZiAk cGdiZW5jaDsKKworCW15ICRjbGllbnRzID0gMTsKKwlteSAkcnVudGltZSA9IDI7CisKKwlp ZiAoJGV4dGVuZGVkKQorCXsKKwkJIyBSYW5kb21pemUgdGhlIG51bWJlciBvZiBwZ2JlbmNo IGNsaWVudHMgYSBiaXQgKHJhbmdlIDEtMTYpCisJCSRjbGllbnRzID0gMSArIGludChyYW5k KDE1KSk7CisJCSRydW50aW1lID0gNjAwOworCX0KKwlteSBAY21kID0gKCdwZ2JlbmNoJywg Jy1wJywgJHBvcnQsICctVCcsICRydW50aW1lLCAnLWMnLCAkY2xpZW50cyk7CisKKwkjIFJh bmRvbWl6ZSB3aGV0aGVyIHdlIHNwYXduIGNvbm5lY3Rpb25zIG9yIG5vdAorCXB1c2goQGNt ZCwgJy1DJykgaWYgKCRleHRlbmRlZCAmJiBjb2ludG9zcyk7CisJIyBGaW5hbGx5IGFkZCB0 aGUgZGF0YWJhc2UgbmFtZSB0byB1c2UKKwlwdXNoKEBjbWQsICdwb3N0Z3JlcycpOworCisJ JHBnYmVuY2ggPSBJUEM6OlJ1bjo6c3RhcnQoCisJCVxAY21kLAorCQknPCcgPT4gJy9kZXYv bnVsbCcsCisJCSc+JyA9PiAnL2Rldi9udWxsJywKKwkJJzI+JyA9PiAnL2Rldi9udWxsJywK KwkJSVBDOjpSdW46OnRpbWVyKCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9k ZWZhdWx0KSk7Cit9CisKKyMgU3RhcnQgYSBjaGVja3BvaW50IGluIHRoZSBiYWNrZ3JvdW5k IGFnYWluc3QgdGhlIHNlcnZlciBzcGVjaWZpZWQgdmlhIHRoZQorIyBwb3J0IHBhc3NlZCBh cyBwYXJhbWV0ZXIuCitzdWIgYmFja2dyb3VuZF9jaGVja3BvaW50Cit7CisJbXkgJHBvcnQg PSBzaGlmdDsKKworCW15IEBjbWQgPSAoJ3BzcWwnLCAnLXAnLCAkcG9ydCwgJy1jJywgJ2No ZWNrcG9pbnQnLCAncG9zdGdyZXMnKTsKKworCSRwZ2JlbmNoID0gSVBDOjpSdW46OnN0YXJ0 KAorCQlcQGNtZCwKKwkJJzwnID0+ICcvZGV2L251bGwnLAorCQknPicgPT4gJy9kZXYvbnVs bCcsCisJCScyPicgPT4gJy9kZXYvbnVsbCcsCisJCUlQQzo6UnVuOjp0aW1lcigkUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCkpOworfQorCitzdWIgYXR0YWNo X2luamVjdGlvbl9wb2ludAoreworCW15ICgkbm9kZSwgJHBvaW50KSA9IEBfOworCW5vdGUo J2F0dGFjaGluZyBpbmplY3Rpb24gcG9pbnQ6ICcgLiAkcG9pbnQpOworCSRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCgn IiAuICRwb2ludCAuICInLCd3YWl0Jyk7IgorCSk7Cit9CisKK3N1YiB3YWl0X2luamVjdGlv bl9wb2ludAoreworCW15ICgkbm9kZSwgJHBvaW50KSA9IEBfOworCisJbm90ZSgid2FpdGlu ZyBmb3IgdGhlIGluamVjdGlvbiBwb2ludCB0byBiZSBoaXQiKTsKKwkkbm9kZS0+cG9sbF9x dWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHBn X2NhdGFsb2cucGdfc3RhdF9hY3Rpdml0eSBXSEVSRSB3YWl0X2V2ZW50ID0gJyIgLiAkcG9p bnQgLiAiJyIsCisJCScxJyk7Cit9CisKK3N1YiB3YWtldXBfaW5qZWN0aW9uX3BvaW50Cit7 CisJbXkgKCRub2RlLCAkcG9pbnQpID0gQF87CisKKwkjIGRldGFjaCBiZWZvcmUgd2FrZXVw LCBzbyB0aGF0IHdlIGNhbid0IGhpdCBpdCByaWdodCBhd2F5CisJbm90ZSgiZGV0YWNoaW5n IHRoZSBpbml0IGluamVjdGlvbiBwb2ludCIpOworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkJIlNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgnIiAuICRwb2ludCAu ICInKTsiKTsKKworCW5vdGUoJ3dha2luZyB0aGUgaW5pdCBpbmplY3Rpb24gcG9pbnQ6ICcg LiAkcG9pbnQpOworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBp bmplY3Rpb25fcG9pbnRzX3dha2V1cCgnIiAuICRwb2ludCAuICInKTsiCisJKTsKK30KKwor IyBUZXN0IGJlaGF2aW9yIHdpdGggYSBjaGVja3N1bSB0cmFuc2l0aW9ucyBhbmQgYSBjb25j dXJyZW50IGNoZWNrcG9pbnQsCisjIGZvbGxvd2VkIGJ5IGEgY3Jhc2guCisjCisjIFRoZSB0 ZXN0IHB1dHMgdGhlIGluc3RhbmNlIGludG8gdGhlIGluaXRpYWwgY2hlY2tzdW0gc3RhdGUg JHN0YXJ0LAorIyBpbml0aWF0ZXMgYSBjaGVja3N1bSBjaGFuZ2UgYW5kIHdhaXRzIGZvciBp dCB0byBwYXVzZSBvbiB0aGUgJGluaXQKKyMgaW5qZWN0aW9uIHBvaW50LiBUaGVuIGEgY2hl Y2twb2ludCBpcyBzdGFydGVkIChpbiB0aGUgYmFja2dyb3VuZCksIGFuZAorIyB0aGUgdHdv IHByb2Nlc3NlcyBnbyB0aHJvdWdoIGEgbGlzdCBvZiBpbmplY3Rpb24gcG9pbnRzIHRvIGlu dGVybGVhdmUKKyMgdGhlbSBpbiBhIHBhcnRpY3VsYXIgd2F5LgorIworIyBBZnRlciByZWFj aGluZyBhICRzdG9wIGluamVjdGlvbiBwb2ludCwgdGhlIGNsdXN0ZXIgZ2V0IHJlc3RhcnRl ZCBpbiBhbgorIyBpbW1lZGlhdGUgbW9kZSB0byBzaW11bGF0ZSBmYWlsdXJlLiBUaGUgY2hl Y2tzdW0gc3RhdGUgKGFmdGVyIHJlY292ZXJ5KQorIyBpcyB2YWxpZGF0ZWQgYWdhaW5zdCB0 aGUgZXhwZWN0ZWQgdmFsdWUuIFRoZSBzZXJ2ZXIgbG9nIGlzIGNoZWNrZWQgZm9yCisjIGNo ZWNrc3VtIGZhaWx1cmVzLgorIworIyBXaGlsZSB0aGUgY2hlY2tzdW0gY2hhbmdlIGlzIGhh cHBlbmluZywgdGhlcmUncyBhIHIvdyBwZ2JlbmNoIHJ1bm5pbmcgaW4KKyMgdGhlIGJhY2tn cm91bmQsIHRvIGdlbmVyYXRlIHdyaXRlcy4KKyMKKyMgYXJndW1lbnRzOgorIworIyAtIHN0 YXJ0ICAtIHN0YXJ0IGNoZWNrc3VtIHN0YXRlIChlbmFibGVkL2Rpc2FibGVkKQorIyAtIGNo YW5nZSAtIGNoZWNrc3VtIGNoYW5nZSB0byBpbml0aWF0ZQorIyAtIGluaXQgICAtIGluaXRp YWwgaW5qZWN0aW9uIHBvaW50IHRvIHdhaXQgb24KKyMgLSBzdG9wICAgLSBpbmplY3Rpb24g cG9pbnQgdG8gd2FpdCBvbiBiZWZvcmUgcmVzdGFydGluZworIyAtIGZpbmFsICAtIGV4cGVj dGVkIGNoZWNrc3VtIHN0YXRlIGF0IHRoZSBlbmQKKyMgLSBzdGVwcyAgLSBhIGxpc3Qgb2Yg aW5qZWN0aW9uIHBvaW50cyB0byB3YWl0IG9uIC8gdW5wYXVzZQorIworIyBYWFggU29tZSBv ZiB0aGUgaW5qZWN0aW9uIHBvaW50cyBhcmUgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCB3aGlj aCBkb2VzCisjIG5vdCBhbGxvdyBtZW1vcnkgYWxsb2NhdGlvbnMgZXRjLiBJTkpFQ1RJT05f UE9JTlRfTE9BRC9fQ0FDSEVEIGhhbmRsZXMKKyMganVzdCBwcml2YXRlIG1lbW9yeSBhbGxv Y2F0aW9uLCBidXQgJ3dhaXQnIHJlcXVpcmVzIGEgc2htZW0gYWxsb2NhdGlvbi4KKyMgVG8g ZGVhbCB3aXRoIHRoYXQsIHdlIGZpcnN0IG5lZWQgdG8gcGF1c2Ugb24gYW4gaW5qZWN0aW9u IHBvaW50IG91dHNpZGUKKyMgYSBjcml0aWNhbCBzZWN0aW9uIHRvIGluaXRpYWxpemUgdGhl IHNobWVtIHN0dWZmIG5lZWRlZCBieSAnd2FpdCcuCisjCisjIFhYWCBXZSBjb3VsZCBhbHNv IHZhbGlkYXRlIHRoZSBjaGVja3N1bXMgdXNpbmcgcGdfY2hlY2tzdW1zLCBpZiB0aGUKKyMg c3RhdGUgaXMgJ29uJy4KKyMKKyMgWFhYIFRoZSBzdGVwcyBhcmUgbm90IGVudGlyZWx5IGRl dGVybWluaXN0aWMsIGJlY2F1c2Ugd2hlbiB1bnBhdXNpbmcKKyMgYW4gaW5qZWN0aW9uIHBv aW50LCB3ZSBkb24ndCBrbm93IGlmIHRoZSBvdGhlciBwcm9jZXNzIGlzIGFscmVhZHkKKyMg cGF1c2VkIG9uIHRoZSBmb2xsb3dpbmcgcG9pbnQuCisjCitzdWIgdGVzdF9jaGVja3N1bV9z ZXF1ZW5jZQoreworCW15ICgkc3RhcnQsICRjaGFuZ2UsICRpbml0LCAkc3RvcCwgJGZpbmFs LCBAc3RlcHMpID0gQF87CisKKwkjIHByaW50IHRoZSBjdXJyZW50IHRlc3QgaW5zdHJ1Y3Rp b25zLCBib3RoIGludG8gVEFQIG91dHB1dCBhbmQgaW50bworCSMgdGhlIHNlcnZlciBsb2cs IHRvIG1ha2UgY29ycmVsYXRpb24gZWFzaWVyCisKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJCSJTRUxFQ1QgJz09PT09PT09PT0gIiAuICRzdGFydCAuICIgLyAiIC4gJGNo YW5nZSAuICIgLyAoIiAuIEBzdGVwcyAuICIpIC8gIiAuICRpbml0IC4gIiAvICIgLiAkc3Rv cCAuICIgLyAiIC4gJGZpbmFsIC4gIiA9PT09PT09PT09JyIpOworCisJbm90ZSgkc3RhcnQg LiAiIC8gIiAuICRjaGFuZ2UgLiAiIC8gKCIgLiBAc3RlcHMgLiAiKSAvICIgLiAkaW5pdCAu ICIgLyAiIC4gJHN0b3AgLiAiIC8gIiAuICRmaW5hbCk7CisKKwkjIFN0YXJ0IHRoZSB0ZXN0 IHN1aXRlIHdpdGggcGdiZW5jaCBydW5uaW5nLgorCWJhY2tncm91bmRfcndfcGdiZW5jaCgk bm9kZS0+cG9ydCk7CisKKwkjIHB1dCB0aGUgY2x1c3RlciBpbnRvIHRoZSBpbml0aWFsIGNo ZWNrc3VtIHN0YXRlLCBzeW5jaHJvbm91c2x5CisJbm90ZSgnY2hhbmdpbmcgY2hlY2tzdW1z IGludG8gaW5pdGlhbCBzdGF0ZTogJyAuICRzdGFydCk7CisJZW5hYmxlX2RhdGFfY2hlY2tz dW1zKCRub2RlLCB3YWl0ID0+ICdvbicpIGlmICgkc3RhcnQgZXEgJ2VuYWJsZWQnKTsKKwlk aXNhYmxlX2RhdGFfY2hlY2tzdW1zKCRub2RlLCB3YWl0ID0+ICdvZmYnKSBpZiAoJHN0YXJ0 IGVxICdkaXNhYmxlZCcpOworCisJIyBhdHRhY2ggdGhlIGluaXRpYWwgaW5qZWN0aW9uIHBv aW50CisJYXR0YWNoX2luamVjdGlvbl9wb2ludCgkbm9kZSwgJGluaXQpOworCisJIyB3aGVu IHdlJ3JlIGF0IGl0LCBhdHRhY2ggdGhlIHN0b3AgaW5qZWN0aW9uIHBvaW50CisJYXR0YWNo X2luamVjdGlvbl9wb2ludCgkbm9kZSwgJHN0b3ApOworCisJIyBEbyBhIGNoZWNrcG9pbnQg Zmlyc3QsIHNvIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRhbHkgc3RhcnQgdGhlIG5leHQKKwkj IGNoZWNrcG9pbnQgYXQgYW4gdW5lY3BlY3RlZCB0aW1lLiBXZSB3YW50IHRoZSBuZXh0IGNo ZWNrcG9pbnQgdG8gYmUKKwkjIHRoZSBiYWNrZ3JvdW5kIG9uZS4KKwkkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDSEVDS1BPSU5UIik7CisKKwkjIFRyaWdnZXIgdGhlIGNoZWNr c3VtIGNoYW5nZSwgYXN5bmNocm9ub3VzbHkKKwlub3RlKCJ0cmlnZ2VyaW5nIGNoZWNrc3Vt IGNoYW5nZTogIiAuICRjaGFuZ2UpOworCWVuYWJsZV9kYXRhX2NoZWNrc3Vtcygkbm9kZSkg aWYgKCRjaGFuZ2UgZXEgJ2VuYWJsZScpOworCWRpc2FibGVfZGF0YV9jaGVja3N1bXMoJG5v ZGUpIGlmICgkY2hhbmdlIGVxICdkaXNhYmxlJyk7CisKKwkjIHdhaXQgZm9yIHRoZSBpbml0 aWFsIGluamVjdGlvbiBwb2ludAorCXdhaXRfaW5qZWN0aW9uX3BvaW50KCRub2RlLCAkaW5p dCk7CisKKwkjIG5vdyBhdHRhY2ggYWxsIHRoZSByZWd1bGFyIGluamVjdGlvbiBwb2ludHMK KwlteSAkbiA9IEBzdGVwczsKKwlmb3IgKCRhID0gMDsgJGEgPCAkbjsgJGErKykKKwl7CisJ CW15ICRwb2ludCA9ICRzdGVwc1skYV07CisJCWF0dGFjaF9pbmplY3Rpb25fcG9pbnQoJG5v ZGUsICRwb2ludCk7CisJfQorCisJIyBpbml0aWF0ZSBhIGJhY2tncm91bmQgY2hlY2twb2lu dAorCWJhY2tncm91bmRfY2hlY2twb2ludCgkbm9kZS0+cG9ydCk7CisKKwkjIHdha2V1cCB0 aGUgaW5pdGlhbCBpbmplY3Rpb24gcG9pbnQsIHRvIHN0YXJ0IHRoZSBtYWluIHBhcnQKKwl3 YWtldXBfaW5qZWN0aW9uX3BvaW50KCRub2RlLCAkaW5pdCk7CisKKwkjIHdhaXQgZm9yIHJl Z3VsYXIgaW5qZWN0aW9uIHBvaW50cyBpbiBzZXF1ZW5jZSwgd2FrZSBhbmQgZGV0YWNoIHRo ZW0KKwlmb3IgKCRhID0gMDsgJGEgPCAkbjsgJGErKykKKwl7CisJCW15ICRwb2ludCA9ICRz dGVwc1skYV07CisKKwkJd2FpdF9pbmplY3Rpb25fcG9pbnQoJG5vZGUsICRwb2ludCk7CisJ CXdha2V1cF9pbmplY3Rpb25fcG9pbnQoJG5vZGUsICRwb2ludCk7CisJfQorCisJIyB3YWl0 IGZvciB0aGUgc3RvcCBpbmplY3Rpb24gcG9pbnQKKwl3YWl0X2luamVjdGlvbl9wb2ludCgk bm9kZSwgJHN0b3ApOworCisJIyByZXN0YXJ0IHRoZSBjbHVzdGVyLCBpbiBpbW1lZGlhdGUg bW9kZSwgdG8gc2ltdWxhdGUgYSBjcmFzaAorCSRub2RlLT5zdG9wKCdpbW1lZGlhdGUnKTsK Kwkkbm9kZS0+c3RhcnQ7CisKKwkjIERvZXMgdGhlIGZpbmFsIGNoZWNrc3VtIHN0YXRlIG1h dGNoIHRoZSBleHBlY3RlZCBzdGF0ZT8KKwl0ZXN0X2NoZWNrc3VtX3N0YXRlKCRub2RlLCAk ZmluYWwpOworCisJIyBTaW5jZSB0aGUgbG9nIGlzbid0IGJlaW5nIHdyaXR0ZW4gdG8gbm93 LCBwYXJzZSB0aGUgbG9nIGFuZCBjaGVjaworCSMgZm9yIGluc3RhbmNlcyBvZiBjaGVja3N1 bSB2ZXJpZmljYXRpb24gZmFpbHVyZXMuCisJbXkgJGxvZyA9IFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOjpzbHVycF9maWxlKCRub2RlLT5sb2dmaWxlLAorCQkkbm9kZV9sb2dsb2NhdGlv bik7CisJdW5saWtlKAorCQkkbG9nLAorCQlxci9wYWdlIHZlcmlmaWNhdGlvbiBmYWlsZWQs LitcZCQvLAorCQkibm8gY2hlY2tzdW0gdmFsaWRhdGlvbiBlcnJvcnMgaW4gcHJpbWFyeSBs b2cgKGR1cmluZyBXQUwgcmVjb3ZlcnkpIgorCSk7CisJJG5vZGVfbG9nbG9jYXRpb24gPSAt cyAkbm9kZS0+bG9nZmlsZTsKK30KKworbXkgQHN0ZXBzID0gdW5kZWY7CisKKyMjIGNoZWNr c3VtcyBJTlBST0dSRVNTIE9OCisKK25vdGUoJ1RFU1QgSU5QUk9HUkVTUy1PTi8xJyk7CitA c3RlcHMgPSBxdyhkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1i ZWZvcmUteGxvZworCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tz dW1zLWFmdGVyLXhsb2cKKwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNo ZWNrc3Vtcy1hZnRlci14bG9nY3RsCisJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9n cmVzcy1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUKKwkJCSBjcmVhdGUtY2hlY2twb2lu dC1pbml0aWFsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbworCQkJIGNoZWNrcG9pbnQt YmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1hZnRlci14bG9nY3Rs LWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tzdW1zCisJCQkg Y2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWFmdGVyLXJlZG8t d2FsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsKTsKK3Rlc3RfY2hl Y2tzdW1fc2VxdWVuY2UoJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVu YWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJs ZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1lbmQnLCAnb2ZmJywgQHN0ZXBzKTsKKworbm90ZSgn VEVTVCBJTlBST0dSRVNTLU9OLzInKTsKK0BzdGVwcyA9IHF3KGNyZWF0ZS1jaGVja3BvaW50 LWluaXRpYWwKKwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vt cy1iZWZvcmUteGxvZworCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLWFmdGVyLXhsb2cKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvCisJCQkgY2hl Y2twb2ludC1iZWZvcmUteGxvZ2N0bC1jaGVja3N1bXMKKwkJCSBkYXRhY2hlY2tzdW1zLWVu YWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsCisJCQkgZGF0YWNoZWNr c3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUKKwkJ CSBjaGVja3BvaW50LWFmdGVyLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1i ZWZvcmUtcmVkby1jaGVja3N1bXMKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLXdhbAor CQkJIGNoZWNrcG9pbnQtYWZ0ZXItcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1v bGQtd2FsLXJlbW92YWwpOwordGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgnZGlzYWJsZWQnLCAn ZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0 YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWVuZCcs ICdvZmYnLCBAc3RlcHMpOworCitub3RlKCdURVNUIElOUFJPR1JFU1MtT04vMycpOworQHN0 ZXBzID0gcXcoY3JlYXRlLWNoZWNrcG9pbnQtaW5pdGlhbAorCQkJIGRhdGFjaGVja3N1bXMt ZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS14bG9nCisJCQkgZGF0YWNoZWNr c3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxvZworCQkJIGNoZWNr cG9pbnQtYmVmb3JlLXJlZG8KKwkJCSBjaGVja3BvaW50LWJlZm9yZS14bG9nY3RsLWNoZWNr c3VtcworCQkJIGNoZWNrcG9pbnQtYWZ0ZXIteGxvZ2N0bC1jaGVja3N1bXMKKwkJCSBjaGVj a3BvaW50LWJlZm9yZS1yZWRvLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJl ZG8td2FsCisJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMt YWZ0ZXIteGxvZ2N0bAorCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlCisJCQkgY2hlY2twb2ludC1hZnRlci1yZWRvLXdh bAorCQkJIGNoZWNrcG9pbnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbCk7Cit0ZXN0X2NoZWNr c3VtX3NlcXVlbmNlKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUt aW5wcm9ncmVzcy1jaGVja3N1bXMtZW5kJywgJ29mZicsIEBzdGVwcyk7CisKK25vdGUoJ1RF U1QgSU5QUk9HUkVTUy1PTi80Jyk7CitAc3RlcHMgPSBxdyhjcmVhdGUtY2hlY2twb2ludC1p bml0aWFsCisJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMt YmVmb3JlLXhsb2cKKwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNr c3Vtcy1hZnRlci14bG9nCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbworCQkJIGNoZWNr cG9pbnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1iZWZvcmUt cmVkby1jaGVja3N1bXMKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLXdhbAorCQkJIGNo ZWNrcG9pbnQtYWZ0ZXItcmVkby13YWwKKwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnBy b2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsCisJCQkgZGF0YWNoZWNrc3Vtcy1lbmFi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUKKwkJCSBjaGVja3Bv aW50LWJlZm9yZS1vbGQtd2FsLXJlbW92YWwpOwordGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgn ZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3Mt Y2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hl Y2tzdW1zLWVuZCcsICdvZmYnLCBAc3RlcHMpOworCitub3RlKCdURVNUIElOUFJPR1JFU1Mt T04vNScpOworQHN0ZXBzID0gcXcoY3JlYXRlLWNoZWNrcG9pbnQtaW5pdGlhbAorCQkJIGRh dGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS14bG9nCisJ CQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0ZXIteGxv ZworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KKwkJCSBjaGVja3BvaW50LWJlZm9yZS14 bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYWZ0ZXIteGxvZ2N0bC1jaGVja3N1 bXMKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNoZWNrc3VtcworCQkJIGNoZWNrcG9p bnQtYmVmb3JlLXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1hZnRlci1yZWRvLXdhbAorCQkJ IGNoZWNrcG9pbnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbAorCQkJIGRhdGFjaGVja3N1bXMt ZW5hYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwKKwkJCSBkYXRhY2hl Y2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZSk7 Cit0ZXN0X2NoZWNrc3VtX3NlcXVlbmNlKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNo ZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNr c3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtZW5kJywgJ29mZicsIEBzdGVwcyk7 CisKK25vdGUoJ1RFU1QgSU5QUk9HUkVTUy1PTi82Jyk7CitAc3RlcHMgPSBxdyhjcmVhdGUt Y2hlY2twb2ludC1pbml0aWFsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbworCQkJIGNo ZWNrcG9pbnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1hZnRl ci14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tz dW1zCisJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVm b3JlLXhsb2cKKwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vt cy1hZnRlci14bG9nCisJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtaW5wcm9ncmVzcy1jaGVj a3N1bXMtYWZ0ZXIteGxvZ2N0bAorCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWlucHJvZ3Jl c3MtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlCisJCQkgY2hlY2twb2ludC1iZWZvcmUt cmVkby13YWwKKwkJCSBjaGVja3BvaW50LWFmdGVyLXJlZG8td2FsCisJCQkgY2hlY2twb2lu dC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsKTsKK3Rlc3RfY2hlY2tzdW1fc2VxdWVuY2UoJ2Rp c2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNo ZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1pbnByb2dyZXNzLWNoZWNr c3Vtcy1lbmQnLCAnb2ZmJywgQHN0ZXBzKTsKKworIyMgY2hlY2tzdW1zIE9OCisKK25vdGUo J1RFU1QgT04vMScpOworQHN0ZXBzID0gcXcoZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tz dW1zLWJlZm9yZS14bG9nCisJCQkgZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFm dGVyLXhsb2cKKwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxv Z2N0bAorCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250cm9s ZmlsZQorCQkJIGNyZWF0ZS1jaGVja3BvaW50LWluaXRpYWwKKwkJCSBjaGVja3BvaW50LWJl Zm9yZS14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYWZ0ZXIteGxvZ2N0bC1j aGVja3N1bXMKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNoZWNrc3VtcworCQkJIGNo ZWNrcG9pbnQtYmVmb3JlLXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1hZnRlci1yZWRvLXdh bAorCQkJIGNoZWNrcG9pbnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbCk7Cit0ZXN0X2NoZWNr c3VtX3NlcXVlbmNlKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vtcy1lbmFi bGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1l bmQnLCAnb24nLCBAc3RlcHMpOworCitub3RlKCdURVNUIE9OLzInKTsKK0BzdGVwcyA9IHF3 KGNyZWF0ZS1jaGVja3BvaW50LWluaXRpYWwKKwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1j aGVja3N1bXMtYmVmb3JlLXhsb2cKKwkJCSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1 bXMtYWZ0ZXIteGxvZworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KKwkJCSBjaGVja3Bv aW50LWJlZm9yZS14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYWZ0ZXIteGxv Z2N0bC1jaGVja3N1bXMKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNoZWNrc3Vtcwor CQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1hZnRlci1y ZWRvLXdhbAorCQkJIGNoZWNrcG9pbnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbAorCQkJIGRh dGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsCisJCQkgZGF0YWNo ZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlKTsKK3Rlc3RfY2hl Y2tzdW1fc2VxdWVuY2UoJ2Rpc2FibGVkJywgJ2VuYWJsZScsICdkYXRhY2hlY2tzdW1zLWVu YWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1z LWVuZCcsICdvbicsIEBzdGVwcyk7CisKK25vdGUoJ1RFU1QgT04vMycpOworQHN0ZXBzID0g cXcoY3JlYXRlLWNoZWNrcG9pbnQtaW5pdGlhbAorCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJl ZG8KKwkJCSBjaGVja3BvaW50LWJlZm9yZS14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNr cG9pbnQtYWZ0ZXIteGxvZ2N0bC1jaGVja3N1bXMKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1y ZWRvLWNoZWNrc3VtcworCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1iZWZv cmUteGxvZworCQkJIGRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9n CisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWFmdGVy LXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsCisJCQkg ZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwKKwkJCSBkYXRh Y2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUpOwordGVzdF9j aGVja3N1bV9zZXF1ZW5jZSgnZGlzYWJsZWQnLCAnZW5hYmxlJywgJ2RhdGFjaGVja3N1bXMt ZW5hYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1 bXMtZW5kJywgJ29uJywgQHN0ZXBzKTsKKworbm90ZSgnVEVTVCBPTi80Jyk7CitAc3RlcHMg PSBxdyhjcmVhdGUtY2hlY2twb2ludC1pbml0aWFsCisJCQkgY2hlY2twb2ludC1iZWZvcmUt cmVkbworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hl Y2twb2ludC1hZnRlci14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYmVmb3Jl LXJlZG8tY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKwkJCSBk YXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYmVmb3JlLXhsb2cKKwkJCSBkYXRhY2hl Y2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZworCQkJIGNoZWNrcG9pbnQtYWZ0 ZXItcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1vbGQtd2FsLXJlbW92YWwKKwkJ CSBkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bAorCQkJIGRh dGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZSk7Cit0ZXN0 X2NoZWNrc3VtX3NlcXVlbmNlKCdkaXNhYmxlZCcsICdlbmFibGUnLCAnZGF0YWNoZWNrc3Vt cy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNr c3Vtcy1lbmQnLCAnb24nLCBAc3RlcHMpOworCisKKyMjIGNoZWNrc3VtcyBJTlBST0dSRVNT IE9GRgorCitub3RlKCdURVNUIElOUFJPR1JFU1MtT0ZGLzEnKTsKK0BzdGVwcyA9IHF3KGRh dGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUteGxvZwor CQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14 bG9nCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWFm dGVyLXhsb2djdGwKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVj a3N1bXMtYWZ0ZXItY29udHJvbGZpbGUKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5w cm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWNoZWNrcG9pbnQKKwkJCSBjcmVhdGUtY2hlY2tw b2ludC1pbml0aWFsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbworCQkJIGNoZWNrcG9p bnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1hZnRlci14bG9n Y3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tzdW1zCisJ CQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWFmdGVyLXJl ZG8td2FsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsCisJCQkgZGF0 YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVy LXdhaXQpOwordGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgnZW5hYmxlZCcsICdkaXNhYmxlJywg J2RhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdk YXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29mZicsIEBzdGVwcyk7 CisKK25vdGUoJ1RFU1QgSU5QUk9HUkVTUy1PRkYvMicpOworQHN0ZXBzID0gcXcoY3JlYXRl LWNoZWNrcG9pbnQtaW5pdGlhbAorCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dy ZXNzLWNoZWNrc3Vtcy1iZWZvcmUteGxvZworCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1p bnByb2dyZXNzLWNoZWNrc3Vtcy1hZnRlci14bG9nCisJCQkgY2hlY2twb2ludC1iZWZvcmUt cmVkbworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hl Y2twb2ludC1hZnRlci14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYmVmb3Jl LXJlZG8tY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKwkJCSBj aGVja3BvaW50LWFmdGVyLXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtb2xkLXdh bC1yZW1vdmFsCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tz dW1zLWFmdGVyLXhsb2djdGwKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVz cy1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2Fi bGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWNoZWNrcG9pbnQKKwkJCSBkYXRhY2hl Y2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2Fp dCk7Cit0ZXN0X2NoZWNrc3VtX3NlcXVlbmNlKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0 YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFj aGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnb2ZmJywgQHN0ZXBzKTsKKwor bm90ZSgnVEVTVCBJTlBST0dSRVNTLU9GRi8zJyk7CitAc3RlcHMgPSBxdyhjcmVhdGUtY2hl Y2twb2ludC1pbml0aWFsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbworCQkJIGNoZWNr cG9pbnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1hZnRlci14 bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tzdW1z CisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9y ZS14bG9nCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1z LWFmdGVyLXhsb2cKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLXdhbAorCQkJIGNoZWNr cG9pbnQtYWZ0ZXItcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1vbGQtd2FsLXJl bW92YWwKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMt YWZ0ZXIteGxvZ2N0bAorCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNo ZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZQorCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1p bnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2ludAorCQkJIGRhdGFjaGVja3N1 bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0KTsK K3Rlc3RfY2hlY2tzdW1fc2VxdWVuY2UoJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hl Y2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1zdGFydCcsICdvZmYnLCBAc3RlcHMpOworCitub3Rl KCdURVNUIElOUFJPR1JFU1MtT0ZGLzQnKTsKK0BzdGVwcyA9IHF3KGNyZWF0ZS1jaGVja3Bv aW50LWluaXRpYWwKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvCisJCQkgY2hlY2twb2lu dC1iZWZvcmUteGxvZ2N0bC1jaGVja3N1bXMKKwkJCSBjaGVja3BvaW50LWFmdGVyLXhsb2dj dGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby1jaGVja3N1bXMKKwkJ CSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYmVmb3JlLXhs b2cKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtaW5wcm9ncmVzcy1jaGVja3N1bXMtYWZ0 ZXIteGxvZworCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vt cy1hZnRlci14bG9nY3RsCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWlucHJvZ3Jlc3Mt Y2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50CisJCQkgY2hlY2twb2lu dC1iZWZvcmUtcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWFmdGVyLXJlZG8td2FsCisJCQkg Y2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsCisJCQkgZGF0YWNoZWNrc3Vtcy1k aXNhYmxlLWlucHJvZ3Jlc3MtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdhaXQpOwordGVz dF9jaGVja3N1bV9zZXF1ZW5jZSgnZW5hYmxlZCcsICdkaXNhYmxlJywgJ2RhdGFjaGVja3N1 bXMtZGlzYWJsZS1pbnByb2dyZXNzLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1z LWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ29mZicsIEBzdGVwcyk7CisKKyMjIGNoZWNr c3VtcyBPRkYKKworbm90ZSgnVEVTVCBPRkYvMScpOworQHN0ZXBzID0gcXcoZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUteGxvZworCQkJIGRhdGFjaGVja3N1bXMt ZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZworCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJs ZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bAorCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1j aGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUt Y2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50CisJCQkgY3JlYXRlLWNoZWNrcG9pbnQtaW5p dGlhbAorCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KKwkJCSBjaGVja3BvaW50LWJlZm9y ZS14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYWZ0ZXIteGxvZ2N0bC1jaGVj a3N1bXMKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNoZWNrc3VtcworCQkJIGNoZWNr cG9pbnQtYmVmb3JlLXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1hZnRlci1yZWRvLXdhbAor CQkJIGNoZWNrcG9pbnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbAorCQkJIGRhdGFjaGVja3N1 bXMtZGlzYWJsZS1jaGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCk7Cit0ZXN0X2NoZWNr c3VtX3NlcXVlbmNlKCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNh YmxlLWNoZWNrc3Vtcy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1z LWVuZCcsICdvZmYnLCBAc3RlcHMpOworCitub3RlKCdURVNUIE9GRi8yJyk7CitAc3RlcHMg PSBxdyhjcmVhdGUtY2hlY2twb2ludC1pbml0aWFsCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNh YmxlLWNoZWNrc3Vtcy1iZWZvcmUteGxvZworCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1j aGVja3N1bXMtYWZ0ZXIteGxvZworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KKwkJCSBj aGVja3BvaW50LWJlZm9yZS14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYWZ0 ZXIteGxvZ2N0bC1jaGVja3N1bXMKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tz dW1zLWFmdGVyLXhsb2djdGwKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1z LWFmdGVyLWNvbnRyb2xmaWxlCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vt cy1iZWZvcmUtY2hlY2twb2ludAorCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tz dW1zCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWFm dGVyLXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsCisJ CQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0 KTsKK3Rlc3RfY2hlY2tzdW1fc2VxdWVuY2UoJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRh Y2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlz YWJsZS1jaGVja3N1bXMtZW5kJywgJ29mZicsIEBzdGVwcyk7CisKK25vdGUoJ1RFU1QgT0ZG LzMnKTsKK0BzdGVwcyA9IHF3KGNyZWF0ZS1jaGVja3BvaW50LWluaXRpYWwKKwkJCSBjaGVj a3BvaW50LWJlZm9yZS1yZWRvCisJCQkgY2hlY2twb2ludC1iZWZvcmUteGxvZ2N0bC1jaGVj a3N1bXMKKwkJCSBjaGVja3BvaW50LWFmdGVyLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hl Y2twb2ludC1iZWZvcmUtcmVkby1jaGVja3N1bXMKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2Fi bGUtY2hlY2tzdW1zLWJlZm9yZS14bG9nCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNo ZWNrc3Vtcy1hZnRlci14bG9nCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKwkJ CSBjaGVja3BvaW50LWFmdGVyLXJlZG8td2FsCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWNoZWNrc3Vtcy1hZnRlci14bG9nY3RsCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNo ZWNrc3Vtcy1hZnRlci1jb250cm9sZmlsZQorCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1j aGVja3N1bXMtYmVmb3JlLWNoZWNrcG9pbnQKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1vbGQt d2FsLXJlbW92YWwKKwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9y ZS1iYXJyaWVyLXdhaXQpOwordGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgnZW5hYmxlZCcsICdk aXNhYmxlJywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0 YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1lbmQnLCAnb2ZmJywgQHN0ZXBzKTsKKwor bm90ZSgnVEVTVCBPRkYvNCcpOworQHN0ZXBzID0gcXcoY3JlYXRlLWNoZWNrcG9pbnQtaW5p dGlhbAorCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8KKwkJCSBjaGVja3BvaW50LWJlZm9y ZS14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYWZ0ZXIteGxvZ2N0bC1jaGVj a3N1bXMKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1yZWRvLWNoZWNrc3VtcworCQkJIGNoZWNr cG9pbnQtYmVmb3JlLXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1hZnRlci1yZWRvLXdhbAor CQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYmVmb3JlLXhsb2cKKwkJCSBk YXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2cKKwkJCSBkYXRhY2hl Y2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwKKwkJCSBkYXRhY2hlY2tz dW1zLWRpc2FibGUtY2hlY2tzdW1zLWFmdGVyLWNvbnRyb2xmaWxlCisJCQkgZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtY2hlY2twb2ludAorCQkJIGNoZWNrcG9p bnQtYmVmb3JlLW9sZC13YWwtcmVtb3ZhbAorCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1j aGVja3N1bXMtYmVmb3JlLWJhcnJpZXItd2FpdCk7Cit0ZXN0X2NoZWNrc3VtX3NlcXVlbmNl KCdlbmFibGVkJywgJ2Rpc2FibGUnLCAnZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vt cy1zdGFydCcsICdkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWVuZCcsICdvZmYn LCBAc3RlcHMpOworCitub3RlKCdURVNUIE9GRi81Jyk7CitAc3RlcHMgPSBxdyhjcmVhdGUt Y2hlY2twb2ludC1pbml0aWFsCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbworCQkJIGNo ZWNrcG9pbnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1hZnRl ci14bG9nY3RsLWNoZWNrc3VtcworCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tz dW1zCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUteGxvZwor CQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZworCQkJIGNo ZWNrcG9pbnQtYmVmb3JlLXJlZG8td2FsCisJCQkgY2hlY2twb2ludC1hZnRlci1yZWRvLXdh bAorCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bAor CQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYWZ0ZXItY29udHJvbGZpbGUK KwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1jaGVja3BvaW50 CisJCQkgY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsCisJCQkgZGF0YWNoZWNr c3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1iZWZvcmUtYmFycmllci13YWl0KTsKK3Rlc3RfY2hl Y2tzdW1fc2VxdWVuY2UoJ2VuYWJsZWQnLCAnZGlzYWJsZScsICdkYXRhY2hlY2tzdW1zLWRp c2FibGUtY2hlY2tzdW1zLXN0YXJ0JywgJ2RhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1 bXMtZW5kJywgJ29mZicsIEBzdGVwcyk7CisKK25vdGUoJ1RFU1QgT0ZGLzYnKTsKK0BzdGVw cyA9IHF3KGNyZWF0ZS1jaGVja3BvaW50LWluaXRpYWwKKwkJCSBkYXRhY2hlY2tzdW1zLWRp c2FibGUtY2hlY2tzdW1zLWJlZm9yZS14bG9nCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxl LWNoZWNrc3Vtcy1hZnRlci14bG9nCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkbworCQkJ IGNoZWNrcG9pbnQtYmVmb3JlLXhsb2djdGwtY2hlY2tzdW1zCisJCQkgY2hlY2twb2ludC1h ZnRlci14bG9nY3RsLWNoZWNrc3VtcworCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVj a3N1bXMtYWZ0ZXIteGxvZ2N0bAorCQkJIGNoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tz dW1zCisJCQkgY2hlY2twb2ludC1iZWZvcmUtcmVkby13YWwKKwkJCSBjaGVja3BvaW50LWFm dGVyLXJlZG8td2FsCisJCQkgZGF0YWNoZWNrc3Vtcy1kaXNhYmxlLWNoZWNrc3Vtcy1hZnRl ci1jb250cm9sZmlsZQorCQkJIGRhdGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtYmVm b3JlLWNoZWNrcG9pbnQKKwkJCSBjaGVja3BvaW50LWJlZm9yZS1vbGQtd2FsLXJlbW92YWwK KwkJCSBkYXRhY2hlY2tzdW1zLWRpc2FibGUtY2hlY2tzdW1zLWJlZm9yZS1iYXJyaWVyLXdh aXQpOwordGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgnZW5hYmxlZCcsICdkaXNhYmxlJywgJ2Rh dGFjaGVja3N1bXMtZGlzYWJsZS1jaGVja3N1bXMtc3RhcnQnLCAnZGF0YWNoZWNrc3Vtcy1k aXNhYmxlLWNoZWNrc3Vtcy1lbmQnLCAnb2ZmJywgQHN0ZXBzKTsKKworJG5vZGUtPnN0b3A7 Citkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNTQuMAoK --------------A1XhfcKQavF09SLS0JT4gnVi Content-Type: text/x-patch; charset=UTF-8; name="0009-TAP-14-checkpoints-with-crashes.patch" Content-Disposition: attachment; filename="0009-TAP-14-checkpoints-with-crashes.patch" Content-Transfer-Encoding: base64 RnJvbSBmZjNjZDNlNjYxZDUwOGRiMTAyZTE4NzUyZmVlMzMzNWZiNGNlYWNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB0ZXN0IDx0ZXN0PgpEYXRlOiBGcmksIDEgTWF5IDIw MjYgMTM6MzU6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIIDA5LzEzXSBUQVAgMTQ6IGNoZWNr cG9pbnRzIHdpdGggY3Jhc2hlcwoKVGhpcyBzaG93cyB0aGUgbm9uLWRldGVybWluaXNtIC8g cmFjZSBjb25kaXRpb24gd2l0aCB0aGUgc3RlcCBpbiB0ZXN0CjAxMl9jcmFzaGVzLCB0aGFu a3MgdG8gYmV0dGVyIHNlcXVlbmNpbmcgb2YgdGhlIHR3byBzaWRlcyAoY2hlY2tzdW0Kd29y a2VyICsgY2hlY2twb2ludGVyKS4gVGhlIHJlbGF0ZWQgMDEyIHRlc3QgaXMgdGhpczoKCnRl c3RfY2hlY2tzdW1fdHJhbnNpdGlvbignZGlzYWJsZWQnLCAnZW5hYmxlJywKICAgICAgICAg ICAgICAgICAgICAgICAgICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3RhcnQn LAogICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNr c3Vtcy1hZnRlci14bG9nJywKICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhY2hlY2tz dW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAnb2ZmJyk7Ci0tLQogLi4ubmN1cnJlbnRfY2hlY2twb2ludF9jcmFzaF9kZXRl cm1pbmlzdGljLnBsIHwgMzU5ICsrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQs IDM1OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2NoZWNrc3Vtcy90LzAxNF9jb25jdXJyZW50X2NoZWNrcG9pbnRfY3Jhc2hfZGV0 ZXJtaW5pc3RpYy5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jaGVj a3N1bXMvdC8wMTRfY29uY3VycmVudF9jaGVja3BvaW50X2NyYXNoX2RldGVybWluaXN0aWMu cGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2hlY2tzdW1zL3QvMDE0X2NvbmN1cnJlbnRf Y2hlY2twb2ludF9jcmFzaF9kZXRlcm1pbmlzdGljLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5iZmNhMzk4Mzk2NQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9jaGVja3N1bXMvdC8wMTRfY29uY3VycmVudF9jaGVja3Bv aW50X2NyYXNoX2RldGVybWluaXN0aWMucGwKQEAgLTAsMCArMSwzNTkgQEAKKworIyBDb3B5 cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisK KyMgVGVzdCBzdWl0ZSBmb3IgdGVzdGluZyBlbmFibGluZyBkYXRhIGNoZWNrc3VtcyBpbiBh biBvbmxpbmUgY2x1c3RlciB3aXRoCisjIGluamVjdGlvbiBwb2ludCB0ZXN0cyBpbmplY3Rp bmcgZmFpbHVyZXMgaW50byB0aGUgcHJvY2Vzc2luZworCit1c2Ugc3RyaWN0OwordXNlIHdh cm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl cjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCit1 c2UgRmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OlJlYWxCaW47CisKK3VzZSBEYXRhQ2hl Y2tzdW1zOjpVdGlsczsKKworIyBUaGlzIHRlc3Qgc3VpdGUgaXMgZXhwZW5zaXZlLCBvciB2 ZXJ5IGV4cGVuc2l2ZSwgdG8gZXhlY3V0ZS4gIFRoZXJlIGFyZSB0d28KKyMgUEdfVEVTVF9F WFRSQSBvcHRpb25zIGZvciBydW5uaW5nIGl0LCAiY2hlY2tzdW0iIGZvciBhIHBhcmVkLWRv d24gdGVzdCBzdWl0ZQorIyBhbiAiY2hlY2tzdW1fZXh0ZW5kZWQiIGZvciB0aGUgZnVsbCBz dWl0ZS4gIFRoZSBmdWxsIHN1aXRlIGNhbiBydW4gZm9yIGhvdXJzCisjIG9uIHNsb3cgb3Ig Y29uc3RyYWluZWQgc3lzdGVtcy4KK215ICRleHRlbmRlZCA9IHVuZGVmOworaWYgKCRFTlZ7 UEdfVEVTVF9FWFRSQX0pCit7CisJJGV4dGVuZGVkID0gMSBpZiAoJEVOVntQR19URVNUX0VY VFJBfSA9fiAvXGJjaGVja3N1bV9leHRlbmRlZFxiLyk7CisJcGxhbiBza2lwX2FsbCA9PiAn RXhwZW5zaXZlIGRhdGEgY2hlY2tzdW1zIHRlc3QgZGlzYWJsZWQnCisJICB1bmxlc3MgKCRF TlZ7UEdfVEVTVF9FWFRSQX0gPX4gL1xiY2hlY2tzdW0oX2V4dGVuZGVkKT9cYi8pOworfQor CitpZiAoJEVOVntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gbmUgJ3llcycpCit7CisJcGxh biBza2lwX2FsbCA9PiAnSW5qZWN0aW9uIHBvaW50cyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMg YnVpbGQnOworfQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGNsdXN0ZXIg c2V0dXAKKyMKKworIyBJbml0aWF0ZSB0ZXN0Y2x1c3RlcgorbXkgJG5vZGUgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ2luamVjdGlvbl9ub2RlJyk7Ciskbm9kZS0+aW5p dChub19kYXRhX2NoZWNrc3VtcyA9PiAxKTsKKyRub2RlLT5zdGFydDsKKworIyBTZXQgdXAg dGVzdCBlbnZpcm9ubWVudAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRF IEVYVEVOU0lPTiB0ZXN0X2NoZWNrc3VtczsnKTsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgJ0NSRUFURSBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsnKTsKKworbXkgJHBn YmVuY2ggPSB1bmRlZjsKK215ICRzY2FsZWZhY3RvciA9ICgkZXh0ZW5kZWQgPyAxMCA6IDEp OworbXkgJG5vZGVfbG9nbG9jYXRpb24gPSAwOworCiskbm9kZS0+Y29tbWFuZF9vaygKKwlb CisJCSdwZ2JlbmNoJywgJy1wJywgJG5vZGUtPnBvcnQsICctaScsCisJCSctcycsICRzY2Fs ZWZhY3RvciwgJy1xJywgJ3Bvc3RncmVzJworCV0pOworCisjIFN0YXJ0IGEgcGdiZW5jaCBy dW4gaW4gdGhlIGJhY2tncm91bmQgYWdhaW5zdCB0aGUgc2VydmVyIHNwZWNpZmllZCB2aWEg dGhlCisjIHBvcnQgcGFzc2VkIGFzIHBhcmFtZXRlci4KK3N1YiBiYWNrZ3JvdW5kX3J3X3Bn YmVuY2gKK3sKKwlteSAkcG9ydCA9IHNoaWZ0OworCisJIyBJZiBhIHByZXZpb3VzIHBnYmVu Y2ggaXMgc3RpbGwgcnVubmluZywgc3RhcnQgYnkgc2h1dHRpbmcgaXQgZG93bi4KKwkkcGdi ZW5jaC0+ZmluaXNoIGlmICRwZ2JlbmNoOworCisJbXkgJGNsaWVudHMgPSAxOworCW15ICRy dW50aW1lID0gMjsKKworCWlmICgkZXh0ZW5kZWQpCisJeworCQkjIFJhbmRvbWl6ZSB0aGUg bnVtYmVyIG9mIHBnYmVuY2ggY2xpZW50cyBhIGJpdCAocmFuZ2UgMS0xNikKKwkJJGNsaWVu dHMgPSAxICsgaW50KHJhbmQoMTUpKTsKKwkJJHJ1bnRpbWUgPSA2MDA7CisJfQorCW15IEBj bWQgPSAoJ3BnYmVuY2gnLCAnLXAnLCAkcG9ydCwgJy1UJywgJHJ1bnRpbWUsICctYycsICRj bGllbnRzKTsKKworCSMgUmFuZG9taXplIHdoZXRoZXIgd2Ugc3Bhd24gY29ubmVjdGlvbnMg b3Igbm90CisJcHVzaChAY21kLCAnLUMnKSBpZiAoJGV4dGVuZGVkICYmIGNvaW50b3NzKTsK KwkjIEZpbmFsbHkgYWRkIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHVzZQorCXB1c2goQGNtZCwg J3Bvc3RncmVzJyk7CisKKwkkcGdiZW5jaCA9IElQQzo6UnVuOjpzdGFydCgKKwkJXEBjbWQs CisJCSc8JyA9PiAnL2Rldi9udWxsJywKKwkJJz4nID0+ICcvZGV2L251bGwnLAorCQknMj4n ID0+ICcvZGV2L251bGwnLAorCQlJUEM6OlJ1bjo6dGltZXIoJFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpKTsKK30KKworIyBSdW4gYSBTUUwgaW4gdGhlIGJh Y2tncm91bmQgYWdhaW5zdCB0aGUgc2VydmVyIHNwZWNpZmllZCB2aWEgdGhlCisjIHBvcnQg cGFzc2VkIGFzIHBhcmFtZXRlci4KK3N1YiBiYWNrZ3JvdW5kX3NxbAoreworCW15ICgkcG9y dCwgJHNxbCkgPSBAXzsKKworCW15IEBjbWQgPSAoJ3BzcWwnLCAnLXAnLCAkcG9ydCwgJy1j JywgJHNxbCwgJ3Bvc3RncmVzJyk7CisKKwkkcGdiZW5jaCA9IElQQzo6UnVuOjpzdGFydCgK KwkJXEBjbWQsCisJCSc8JyA9PiAnL2Rldi9udWxsJywKKwkJJz4nID0+ICcvZGV2L251bGwn LAorCQknMj4nID0+ICcvZGV2L251bGwnLAorCQlJUEM6OlJ1bjo6dGltZXIoJFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpKTsKK30KKworc3ViIGF0dGFjaF9p bmplY3Rpb25fcG9pbnQKK3sKKwlteSAoJG5vZGUsICRwb2ludCkgPSBAXzsKKwlub3RlKCdh dHRhY2hpbmcgaW5qZWN0aW9uIHBvaW50OiAnIC4gJHBvaW50KTsKKwkkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJyIg LiAkcG9pbnQgLiAiJywnd2FpdCcpOyIKKwkpOworfQorCitzdWIgd2FpdF9pbmplY3Rpb25f cG9pbnQKK3sKKwlteSAoJG5vZGUsICRwb2ludCkgPSBAXzsKKworCW5vdGUoIndhaXRpbmcg Zm9yIHRoZSBpbmplY3Rpb24gcG9pbnQgdG8gYmUgaGl0Iik7CisJJG5vZGUtPnBvbGxfcXVl cnlfdW50aWwoCisJCSdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19j YXRhbG9nLnBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgd2FpdF9ldmVudCA9ICciIC4gJHBvaW50 IC4gIiciLAorCQknMScpOworfQorCitzdWIgd2FrZXVwX2luamVjdGlvbl9wb2ludAorewor CW15ICgkbm9kZSwgJHBvaW50KSA9IEBfOworCisJIyBkZXRhY2ggYmVmb3JlIHdha2V1cCwg c28gdGhhdCB3ZSBjYW4ndCBoaXQgaXQgcmlnaHQgYXdheQorCW5vdGUoImRldGFjaGluZyB0 aGUgaW5pdCBpbmplY3Rpb24gcG9pbnQiKTsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJyIgLiAkcG9pbnQgLiAi Jyk7Iik7CisKKwlub3RlKCd3YWtpbmcgdGhlIGluaXQgaW5qZWN0aW9uIHBvaW50OiAnIC4g JHBvaW50KTsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgaW5q ZWN0aW9uX3BvaW50c193YWtldXAoJyIgLiAkcG9pbnQgLiAiJyk7IgorCSk7Cit9CisKKyMg VGVzdCBiZWhhdmlvciB3aXRoIGEgY2hlY2tzdW0gdHJhbnNpdGlvbnMgYW5kIGEgY29uY3Vy cmVudCBjaGVja3BvaW50LAorIyBmb2xsb3dlZCBieSBhIGNyYXNoLgorIworIyBUaGUgdGVz dCBwdXRzIHRoZSBpbnN0YW5jZSBpbnRvIHRoZSBpbml0aWFsIGNoZWNrc3VtIHN0YXRlICRz dGFydCwKKyMgdHJpZ2dlcnMgYSBjaGVja3N1bSBjaGFuZ2UuIEEgY29uY3VycmVudCBjaGVj a3BvaW50IGlzIHBlcmZvcm1lZCwgYW5kCisjIGFuZCB0aGUgdGVzdCBzdGVwcyB0aHJvdWdo IHRoZSBjaGVja3N1bSBjaGFuZ2UgYW5kIHRoZSBjaGVja3BvaW50IGluCisjIGEgZGV0ZXJt aW5pc3RpYyB3YXkuCisjCisjIFRoZW4gdGhlIGluc3RhbmNlIGdldCByZXN0YXJ0ZWQgaW4g aW1tZWRpYXRlIG1vZGUgdG8gc2ltdWxhdGUgZmFpbHVyZSwKKyMgYW5kIHRoZSBmaW5hbCBj aGVja3N1bSBzdGF0ZSAoYWZ0ZXIgcmVjb3ZlcnkpIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IHRo ZQorIyBleHBlY3RlZCB2YWx1ZS4gVGhlIHNlcnZlciBsb2cgaXMgY2hlY2tlZCBmb3IgY2hl Y2tzdW0gZmFpbHVyZXMuCisjCisjIFdoaWxlIHRoZSBjaGVja3N1bSBjaGFuZ2UgaXMgaGFw cGVuaW5nLCB0aGVyZSdzIGEgci93IHBnYmVuY2ggcnVubmluZyBpbgorIyB0aGUgYmFja2dy b3VuZCwgdG8gZ2VuZXJhdGUgd3JpdGVzLgorIworIyBhcmd1bWVudHM6CisjCisjIC0gbmFt ZSAgIC0gbmFtZSBvZiB0aGUgdGVzdCBzZXF1ZW5jZSAoZm9yIGVhc3kgaWRlbnRpZmljYXRp b24pCisjIC0gc3RhcnQgIC0gc3RhcnQgY2hlY2tzdW0gc3RhdGUgKGVuYWJsZWQvZGlzYWJs ZWQpCisjIC0gY2hhbmdlIC0gY2hlY2tzdW0gY2hhbmdlIHRvIGluaXRpYXRlCisjIC0gZmlu YWwgIC0gZXhwZWN0ZWQgY2hlY2tzdW0gc3RhdGUgYXQgdGhlIGVuZAorIyAtIHN0ZXBzICAt IHN0ZXBzIHRvIGdvIHRocm91Z2ggKHdhaXQsIHdha2V1cCwgc3FsKQorIworIyBYWFggVGhp cyBpcyBzaW1pbGFyIHRvIDAxMl9jb25jdXJyZW50X2NoZWNrcG9pbnRfY3Jhc2gsIGV4Y2Vw dCB0aGF0IHRoZQorIyBjaGVja3BvaW50IGhhcHBlbnMgYXN5bmNocm9ub3VzbHkgKGluIHRo ZSBiYWNrZ3JvdW5kKSwgYW5kIHRoZSBzdGVwcworIyBzdGVwIHRocm91Z2ggdGhlIGluamVj dGlvbiBwb2ludHMgaW4gYSBkZXRlcm1pbmlzdGljIHdheS4KKyMKKyMgWFhYIFNvbWUgb2Yg dGhlIGluamVjdGlvbiBwb2ludHMgYXJlIGluIGEgY3JpdGljYWwgc2VjdGlvbiwgd2hpY2gg ZG9lcworIyBub3QgYWxsb3cgbWVtb3J5IGFsbG9jYXRpb25zIGV0Yy4gSU5KRUNUSU9OX1BP SU5UX0xPQUQvX0NBQ0hFRCBoYW5kbGVzCisjIGp1c3QgcHJpdmF0ZSBtZW1vcnkgYWxsb2Nh dGlvbiwgYnV0ICd3YWl0JyByZXF1aXJlcyBhIHNobWVtIGFsbG9jYXRpb24uCisjIFRvIGRl YWwgd2l0aCB0aGF0LCB3ZSBzZXR1cCBhbiBpbmplY3Rpb24gcG9pbnQgJGluaXQgb3V0c2lk ZSBhIGNyaXRpY2FsCisjIHNlY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgc2htZW0gc3R1ZmYg bmVlZGVkIGJ5ICd3YWl0Jy4gVGhpcyBuZWVkcyB0bworIyBiZSBkb25lIGZvciBpbmRpdmlk dWFsIHByb2Nlc3NlcyAoZS5nLiB0aGUgY2hlY2twb2ludGVyIG5lZWRzIHRvIGluaXQgYQor IyAnd2FpdCcgcG9pbnQgdG9vLCBpdCdzIG5vdCBlbm91Z2ggdG8gaW5pdCBvbmUgaW4gdGhl IGNoZWNrc3VtIHdvcmtlcikuCisjCisjIFhYWCBXZSBjb3VsZCBhbHNvIHZhbGlkYXRlIHRo ZSBjaGVja3N1bXMgdXNpbmcgcGdfY2hlY2tzdW1zLCBpZiB0aGUKKyMgc3RhdGUgaXMgJ29u Jy4KK3N1YiB0ZXN0X2NoZWNrc3VtX3NlcXVlbmNlCit7CisJbXkgKCRuYW1lLCAkc3RhcnQs ICRjaGFuZ2UsICRmaW5hbCwgQHN0ZXBzKSA9IEBfOworCisJIyBTdGFydCB0aGUgdGVzdCBz dWl0ZSB3aXRoIHBnYmVuY2ggcnVubmluZy4KKwliYWNrZ3JvdW5kX3J3X3BnYmVuY2goJG5v ZGUtPnBvcnQpOworCisJIyBwcmludCB0aGUgY3VycmVudCB0ZXN0IGluc3RydWN0aW9ucywg Ym90aCBpbnRvIFRBUCBvdXRwdXQgYW5kIGludG8KKwkjIHRoZSBzZXJ2ZXIgbG9nLCB0byBt YWtlIGNvcnJlbGF0aW9uIGVhc2llcgorCisJbm90ZSgkbmFtZSk7CisJJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUICc9PT09PT09PT09ICIgLiAkbmFtZSAuICIg PT09PT09PT09PSciKTsKKworCSMgcHV0IHRoZSBjbHVzdGVyIGludG8gdGhlIGluaXRpYWwg Y2hlY2tzdW0gc3RhdGUsIHN5bmNocm9ub3VzbHkKKwlub3RlKCdjaGFuZ2luZyBjaGVja3N1 bXMgaW50byBpbml0aWFsIHN0YXRlOiAnIC4gJHN0YXJ0KTsKKwllbmFibGVfZGF0YV9jaGVj a3N1bXMoJG5vZGUsIHdhaXQgPT4gJ29uJykgaWYgKCRzdGFydCBlcSAnZW5hYmxlZCcpOwor CWRpc2FibGVfZGF0YV9jaGVja3N1bXMoJG5vZGUsIHdhaXQgPT4gJ29mZicpIGlmICgkc3Rh cnQgZXEgJ2Rpc2FibGVkJyk7CisKKwkjIGF0dGFjaCBhbGwgdGhlIGluamVjdGlvbiBwb2lu dHMgbWVudGlvbmVkIGluICd3YWl0JyBzdGVwcworCW15ICRuID0gQHN0ZXBzOworCW15ICRz OworCW5vdGUoJ3Byb2Nlc3NpbmcgJyAuICRuIC4gJyBzdGVwcycpOworCWZvciAoJHMgPSAw OyAkcyA8ICRuOyAkcysrKQorCXsKKwkJbXkgQHN0ZXAgPSAkc3RlcHNbJHNdOworCQlteSAk YWN0aW9uID0gJHN0ZXBzWyRzXVswXTsKKwkJbXkgJHZhbHVlID0gJHN0ZXBzWyRzXVsxXTsK KworCQlub3RlKCdzdGVwICcgLiAkcyAuICcgYWN0aW9uICcgLiAkYWN0aW9uIC4gJyAvICcg LiAkdmFsdWUpOworCQlpZiAoJGFjdGlvbiBlcSAnd2FpdCcpCisJCXsKKwkJCWF0dGFjaF9p bmplY3Rpb25fcG9pbnQoJG5vZGUsICR2YWx1ZSk7CisJCX0KKwl9CisKKwkjIFRyaWdnZXIg dGhlIGNoZWNrc3VtIGNoYW5nZSwgYXN5bmNocm9ub3VzbHkKKwlub3RlKCJ0cmlnZ2VyaW5n IGNoZWNrc3VtIGNoYW5nZTogIiAuICRjaGFuZ2UpOworCWVuYWJsZV9kYXRhX2NoZWNrc3Vt cygkbm9kZSkgaWYgKCRjaGFuZ2UgZXEgJ2VuYWJsZScpOworCWRpc2FibGVfZGF0YV9jaGVj a3N1bXMoJG5vZGUpIGlmICgkY2hhbmdlIGVxICdkaXNhYmxlJyk7CisKKwkjIG5vdyBwcm9j ZXNzIGFsbCB0aGUgc3RlcHMgLSB3YWl0LCB3YWtldXAsIHNxbCwgZXRjLgorCSRuID0gQHN0 ZXBzOworCW5vdGUoJ3Byb2Nlc3NpbmcgJyAuICRuIC4gJyBzdGVwcycpOworCWZvciAoJHMg PSAwOyAkcyA8ICRuOyAkcysrKQorCXsKKwkJbXkgQHN0ZXAgPSAkc3RlcHNbJHNdOworCQlt eSAkYWN0aW9uID0gJHN0ZXBzWyRzXVswXTsKKwkJbXkgJHZhbHVlID0gJHN0ZXBzWyRzXVsx XTsKKworCQlub3RlKCdzdGVwICcgLiAkcyAuICcgYWN0aW9uICcgLiAkYWN0aW9uIC4gJyAv ICcgLiAkdmFsdWUpOworCQlpZiAoJGFjdGlvbiBlcSAnd2FpdCcpCisJCXsKKwkJCXdhaXRf aW5qZWN0aW9uX3BvaW50KCRub2RlLCAkdmFsdWUpOworCQl9CisJCWVsc2lmICgkYWN0aW9u IGVxICd3YWtldXAnKQorCQl7CisJCQl3YWtldXBfaW5qZWN0aW9uX3BvaW50KCRub2RlLCAk dmFsdWUpOworCQl9CisJCWVsc2lmICgkYWN0aW9uIGVxICdzcWwnKQorCQl7CisJCQlub3Rl KCdzcWw6ICcgLiAkdmFsdWUpOworCisJCQkjIGluaXRpYXRlIGEgYmFja2dyb3VuZCBzcWwK KwkJCWJhY2tncm91bmRfc3FsKCRub2RlLT5wb3J0LCAkdmFsdWUpOworCQl9CisJfQorCisJ IyByZXN0YXJ0IHRoZSBjbHVzdGVyLCBpbiBpbW1lZGlhdGUgbW9kZSwgdG8gc2ltdWxhdGUg YSBjcmFzaAorCSRub2RlLT5zdG9wKCdpbW1lZGlhdGUnKTsKKwkkbm9kZS0+c3RhcnQ7CisK KwkjIERvZXMgdGhlIGZpbmFsIGNoZWNrc3VtIHN0YXRlIG1hdGNoIHRoZSBleHBlY3RlZCBz dGF0ZT8KKwl0ZXN0X2NoZWNrc3VtX3N0YXRlKCRub2RlLCAkZmluYWwpOworCisJIyBTaW5j ZSB0aGUgbG9nIGlzbid0IGJlaW5nIHdyaXR0ZW4gdG8gbm93LCBwYXJzZSB0aGUgbG9nIGFu ZCBjaGVjaworCSMgZm9yIGluc3RhbmNlcyBvZiBjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFp bHVyZXMuCisJbXkgJGxvZyA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjpzbHVycF9maWxl KCRub2RlLT5sb2dmaWxlLAorCQkkbm9kZV9sb2dsb2NhdGlvbik7CisJdW5saWtlKAorCQkk bG9nLAorCQlxci9wYWdlIHZlcmlmaWNhdGlvbiBmYWlsZWQsLitcZCQvLAorCQkibm8gY2hl Y2tzdW0gdmFsaWRhdGlvbiBlcnJvcnMgaW4gcHJpbWFyeSBsb2cgKGR1cmluZyBXQUwgcmVj b3ZlcnkpIgorCSk7CisJJG5vZGVfbG9nbG9jYXRpb24gPSAtcyAkbm9kZS0+bG9nZmlsZTsK K30KKworIyBzZXF1ZW5jZSBvZiBzdGVwcyB0byBwZXJmb3JtLCBlYWNoIHN0ZXAgaXMgZGVm aW5lZCBhcyBhbiBhcnJheSBvZiBhY3Rpb25zCisjCisjIC0gdHlwZSBvZiBhbiBhY3Rpb24g KHdhaXQsIHdha2V1cCwgc3FsKQorIyAtIGluamVjdGlvbiBwb2ludCBvciBTUUwgY29tbWFu ZAorIworIyBhZnRlciBwcm9jZXNzaW5nIGFsbCBjb21tYW5kcywgdGhlIGluc3RhbmNlIGdl dHMga2lsbGVkIC8gc2h1dCBkb3duIHdpdGgKKyMgaW1tZWRpYXRlIG1vZGUKK215IEBzdGVw cyA9IHVuZGVmOworCisjIENIRUNLU1VNUy1PTi0xCisjCisjIGNoZWNrcG9pbnQgYWZ0ZXI6 IGRhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nCisjIGNyYXNoIGFm dGVyOiBkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZ2N0bAorIyBj aGVja3BvaW50IGNvbXBsZXRlcworIworIyBzdGVwczoKKyMgMSkgY2hlY2tzdW1zOiAgICB3 cml0ZSBYTE9HMl9DSEVDS1NVTVMgdG8gV0FMCisjIDIpIHN0YXJ0IGNoZWNrcG9pbnQKKyMg MykgY2hlY2twb2ludGVyOiByZWFkIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbgor IyA0KSBjaGVja3N1bXM6ICAgIHVwZGF0ZSBYTG9nQ3RsLT5kYXRhX2NoZWNrc3VtX3ZlcnNp b24KKyMgNSkgY2hlY2twb2ludGVyOiB3cml0ZSBDSEVDS1BPSU5UX1JFRE8KKyMgNikgY2hl Y2twb2ludGVyOiBjb21wbGV0ZSB0aGUgY2hlY2twb2ludAorIyA3KSBjcmFzaAorQHN0ZXBz ID0gKAorICAgIFsnd2FpdCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMtc3Rh cnQnXSwJIyBpbml0aWFsaXplIHRoZSB3YWl0CisgICAgWyd3YWtldXAnLCAnZGF0YWNoZWNr c3Vtcy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0J10sCisgICAgWyd3YWl0JywgJ2RhdGFjaGVj a3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1hZnRlci14bG9nJ10sCisgICAgWydzcWwnLCAnY2hl Y2twb2ludCddLAorICAgIFsnd2FpdCcsICdjcmVhdGUtY2hlY2twb2ludC1pbml0aWFsJ10s CQkJCSMgaW5pdGlhbGl6ZSB0aGUgd2FpdAorICAgIFsnd2FrZXVwJywgJ2NyZWF0ZS1jaGVj a3BvaW50LWluaXRpYWwnXSwKKyAgICBbJ3dhaXQnLCAnY2hlY2twb2ludC1iZWZvcmUtcmVk by13YWwnXSwKKyAgICBbJ3dha2V1cCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1 bXMtYWZ0ZXIteGxvZyddLAorICAgIFsnd2FpdCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1j aGVja3N1bXMtYWZ0ZXIteGxvZ2N0bCddLAorICAgIFsnd2FrZXVwJywgJ2NoZWNrcG9pbnQt YmVmb3JlLXJlZG8td2FsJ10sCisgICAgWyd3YWl0JywgJ2NoZWNrcG9pbnQtYmVmb3JlLW9s ZC13YWwtcmVtb3ZhbCddLAorICAgIFsnd2FrZXVwJywgJ2NoZWNrcG9pbnQtYmVmb3JlLW9s ZC13YWwtcmVtb3ZhbCddCispOworCit0ZXN0X2NoZWNrc3VtX3NlcXVlbmNlKCdDSEVDS1NV TVMtT04tMScsICdkaXNhYmxlZCcsICdlbmFibGUnLCAnb2ZmJywgQHN0ZXBzKTsKKworIyBD SEVDS1NVTVMtT04tMgorIworIyBjaGVja3BvaW50IGFmdGVyOiBkYXRhY2hlY2tzdW1zLWVu YWJsZS1jaGVja3N1bXMtYWZ0ZXIteGxvZworIyBjcmFzaCBhZnRlcjogZGF0YWNoZWNrc3Vt cy1lbmFibGUtY2hlY2tzdW1zLWFmdGVyLXhsb2djdGwKKyMgY2hlY2twb2ludCBjb21wbGV0 ZXMKKyMKKyMgc3RlcHM6CisjIDEpIGNoZWNrc3VtczogICAgd3JpdGUgWExPRzJfQ0hFQ0tT VU1TIHRvIFdBTAorIyAyKSBzdGFydCBjaGVja3BvaW50CisjIDMpIGNoZWNrc3VtczogICAg dXBkYXRlIFhMb2dDdGwtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbgorIyA0KSBjaGVja3BvaW50 ZXI6IHJlYWQgWExvZ0N0bC0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uCisjIDUpIGNoZWNrcG9p bnRlcjogd3JpdGUgQ0hFQ0tQT0lOVF9SRURPCisjIDYpIGNoZWNrcG9pbnRlcjogY29tcGxl dGUgdGhlIGNoZWNrcG9pbnQKKyMgNykgY3Jhc2gKK0BzdGVwcyA9ICgKKyAgICBbJ3dhaXQn LCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0J10sCSMgaW5pdGlhbGl6 ZSB0aGUgd2FpdAorICAgIFsnd2FrZXVwJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNr c3Vtcy1zdGFydCddLAorICAgIFsnd2FpdCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVj a3N1bXMtYWZ0ZXIteGxvZyddLAorICAgIFsnc3FsJywgJ2NoZWNrcG9pbnQnXSwKKyAgICBb J3dhaXQnLCAnY3JlYXRlLWNoZWNrcG9pbnQtaW5pdGlhbCddLAkJCQkjIGluaXRpYWxpemUg dGhlIHdhaXQKKyAgICBbJ3dha2V1cCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1 bXMtYWZ0ZXIteGxvZyddLAorICAgIFsnd2FrZXVwJywgJ2NyZWF0ZS1jaGVja3BvaW50LWlu aXRpYWwnXSwKKyAgICBbJ3dhaXQnLCAnY2hlY2twb2ludC1iZWZvcmUteGxvZ2N0bC1jaGVj a3N1bXMnXSwKKyAgICBbJ3dhaXQnLCAnZGF0YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1z LWFmdGVyLXhsb2djdGwnXSwKKyAgICBbJ3dha2V1cCcsICdjaGVja3BvaW50LWJlZm9yZS14 bG9nY3RsLWNoZWNrc3VtcyddLAorICAgIFsnd2FpdCcsICdjaGVja3BvaW50LWJlZm9yZS1v bGQtd2FsLXJlbW92YWwnXSwKKyAgICBbJ3dha2V1cCcsICdjaGVja3BvaW50LWJlZm9yZS1v bGQtd2FsLXJlbW92YWwnXQorKTsKKwordGVzdF9jaGVja3N1bV9zZXF1ZW5jZSgnQ0hFQ0tT VU1TLU9OLTInLCAnZGlzYWJsZWQnLCAnZW5hYmxlJywgJ29mZicsIEBzdGVwcyk7CisKKyMg Q0hFQ0tTVU1TLU9OLTMKKyMKKyMgY2hlY2twb2ludCBoYXBwZW5zIGFmdGVyIGNoZWNrc3Vt IHdvcmtlciB1cGRhdGVzIFhMb2dDdGwKK0BzdGVwcyA9ICgKKyAgICBbJ3dhaXQnLCAnZGF0 YWNoZWNrc3Vtcy1lbmFibGUtY2hlY2tzdW1zLXN0YXJ0J10sCSMgaW5pdGlhbGl6ZSB0aGUg d2FpdAorICAgIFsnd2FrZXVwJywgJ2RhdGFjaGVja3N1bXMtZW5hYmxlLWNoZWNrc3Vtcy1z dGFydCddLAorICAgIFsnd2FpdCcsICdkYXRhY2hlY2tzdW1zLWVuYWJsZS1jaGVja3N1bXMt YWZ0ZXIteGxvZ2N0bCddLAorICAgIFsnc3FsJywgJ2NoZWNrcG9pbnQnXSwKKyAgICBbJ3dh aXQnLCAnY3JlYXRlLWNoZWNrcG9pbnQtaW5pdGlhbCddLAkJCQkjIGluaXRpYWxpemUgdGhl IHdhaXQKKyAgICBbJ3dha2V1cCcsICdjcmVhdGUtY2hlY2twb2ludC1pbml0aWFsJ10sCisg ICAgWyd3YWl0JywgJ2NoZWNrcG9pbnQtYmVmb3JlLXJlZG8tY2hlY2tzdW1zJ10sCisgICAg Wyd3YWtldXAnLCAnY2hlY2twb2ludC1iZWZvcmUtcmVkby1jaGVja3N1bXMnXSwKKyAgICBb J3dhaXQnLCAnY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsJ10sCisgICAgWyd3 YWtldXAnLCAnY2hlY2twb2ludC1iZWZvcmUtb2xkLXdhbC1yZW1vdmFsJ10KKyk7CisKK3Rl c3RfY2hlY2tzdW1fc2VxdWVuY2UoJ0NIRUNLU1VNUy1PTi0zJywgJ2Rpc2FibGVkJywgJ2Vu YWJsZScsICdvZmYnLCBAc3RlcHMpOworCisjIyBGSVhNRSBkbyBzaW1pbGFyIHNlcXVlbmNl cyBmb3IgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiAoZW5hYmxlZCAtPiBkaXNhYmxlZCkKKwor JG5vZGUtPnN0b3A7Citkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNTQuMAoK --------------A1XhfcKQavF09SLS0JT4gnVi--