From a4bd0f41751eff648ebf9f0cb683fb63ffdb00e8 Mon Sep 17 00:00:00 2001 From: Lieven Clement Date: Wed, 16 Oct 2024 14:34:47 +0200 Subject: [PATCH] update twosample and wilcoxon with movies --- 05-statisticalInference-twosampleT.Rmd | 2 ++ ...ametericStatistics-WilcoxonMannWithney.Rmd | 1 + docs/05-statisticalInference-twosampleT.html | 4 +++- .../figure-html/unnamed-chunk-2-1.png | Bin 47350 -> 47539 bytes ...metericStatistics-WilcoxonMannWithney.html | 4 +++- 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/05-statisticalInference-twosampleT.Rmd b/05-statisticalInference-twosampleT.Rmd index 622713f2..8c07590d 100644 --- a/05-statisticalInference-twosampleT.Rmd +++ b/05-statisticalInference-twosampleT.Rmd @@ -14,6 +14,8 @@ knitr::opts_chunk$set( library(tidyverse) ``` + + # Smelly armpit example - Smelly armpits are not caused by sweat, itself. The smell is caused by specific micro-organisms belonging to the group of *Corynebacterium spp.* that metabolise sweat. diff --git a/09-NonparametericStatistics-WilcoxonMannWithney.Rmd b/09-NonparametericStatistics-WilcoxonMannWithney.Rmd index fedf6523..e2d4ba2b 100644 --- a/09-NonparametericStatistics-WilcoxonMannWithney.Rmd +++ b/09-NonparametericStatistics-WilcoxonMannWithney.Rmd @@ -16,6 +16,7 @@ library(Rmisc) set.seed(140) ``` + # Introduction diff --git a/docs/05-statisticalInference-twosampleT.html b/docs/05-statisticalInference-twosampleT.html index 38cdb8a9..1cc8cf40 100644 --- a/docs/05-statisticalInference-twosampleT.html +++ b/docs/05-statisticalInference-twosampleT.html @@ -554,6 +554,8 @@

statOmics, Ghent University (Creative Commons License

+

1 Smelly armpit example

    @@ -777,7 +779,7 @@

    4 How to report?

    An effect can be extremely statistically significant, but scientifically irrelevant. With a CI you will spot this.

-
LS0tCnRpdGxlOiAiNS4gU3RhdGlzdGljYWwgSW5mZXJlbmNlOiBUd28tc2FtcGxlIHQtdGVzdCIKYXV0aG9yOiAiTGlldmVuIENsZW1lbnQiCmRhdGU6ICJzdGF0T21pY3MsIEdoZW50IFVuaXZlcnNpdHkgKGh0dHBzOi8vc3RhdG9taWNzLmdpdGh1Yi5pbykiCi0tLQoKPGEgcmVsPSJsaWNlbnNlIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvNC4wIj48aW1nIGFsdD0iQ3JlYXRpdmUgQ29tbW9ucyBMaWNlbnNlIiBzdHlsZT0iYm9yZGVyLXdpZHRoOjAiIHNyYz0iaHR0cHM6Ly9pLmNyZWF0aXZlY29tbW9ucy5vcmcvbC9ieS1uYy1zYS80LjAvODh4MzEucG5nIiAvPjwvYT4KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFLCBjYWNoZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGluY2x1ZGUgPSBUUlVFLCBjb21tZW50ID0gTkEsIGVjaG8gPSBUUlVFLAogIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBjYWNoZSA9IFRSVUUKKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKYGBgCgojIFNtZWxseSBhcm1waXQgZXhhbXBsZQoKLSBTbWVsbHkgYXJtcGl0cyBhcmUgbm90IGNhdXNlZCBieSBzd2VhdCwgaXRzZWxmLiBUaGUgc21lbGwgaXMgY2F1c2VkIGJ5IHNwZWNpZmljIG1pY3JvLW9yZ2FuaXNtcyBiZWxvbmdpbmcgdG8gdGhlIGdyb3VwIG9mICpDb3J5bmViYWN0ZXJpdW0gc3BwLiogdGhhdCBtZXRhYm9saXNlIHN3ZWF0LgpBbm90aGVyIGdyb3VwIG9mIGFidW5kYW50IGJhY3RlcmlhIGFyZSB0aGUgKlN0YXBoeWxvY29jY3VzIHNwcC4qLCB0aGVzZSBiYWN0ZXJpYSBkbyBub3QgbWV0YWJvbGlzZSBzd2VhdCBpbiBzbWVsbHkgY29tcG91bmRzLgoKLSBUaGUgQ01FVC1ncm91cCBhdCBHaGVudCBVbml2ZXJzaXR5IGRvZXMgcmVzZWFyY2ggdG8gb24gdHJhbnNwbGFudGluZyB0aGUgYXJtcGl0IG1pY3JvYmlvbWUgdG8gc2F2ZSBwZW9wbGUgd2l0aCBzbWVsbHkgYXJtcGl0cy4KCi0gUHJvcG9zZWQgVGhlcmFweToKICAJMS4gUmVtb3ZlIGFybXBpdC1taWNyb2Jpb21lIHdpdGggYW50aWJpb3RpY3MKICAgIDIuIEluZmx1ZW5jZSBhcm1waXQgbWljcm9iaW9tZSB3aXRoIG1pY3JvYmlhbCAgdHJhbnNwbGFudCAoaHR0cHM6Ly95b3V0dS5iZS85UklGeXFMWGRWdykKCi0gRXhwZXJpbWVudDoKCiAgICAtIDIwIHN1YmplY3RzIHdpdGggc21lbGx5IGFybXBpdHMgYXJlIGF0dHJpYnV0ZWQgdG8gb25lIG9mIHR3byB0cmVhdG1lbnQgZ3JvdXBzCiAgICAtIHBsYWNlYm8gKG9ubHkgYW50aWJpb3RpY3MpCiAgICAtIHRyYW5zcGxhbnQgKGFudGliaW90aWNhIGZvbGxvd2VkIGJ5IG1pY3JvYmlhbCB0cmFuc3BsYW50KS4KICAgIC0gVGhlIG1pY3JvYmlvbWUgaXMgc2FtcGxlZCA2IHdlZWtzIHVwb24gdGhlIHRyZWF0bWVudAogICAgLSBUaGUgcmVsYXRpdmUgYWJ1bmRhbmNlIG9mICpTdGFwaHlsb2NvY2N1cyBzcHAuKiBvbiAqQ29yeW5lYmFjdGVyaXVtIHNwcC4qICsgKlN0YXBoeWxvY29jY3VzIHNwcC4qIGluIHRoZSBtaWNyb2Jpb21lIGlzIG1lYXN1cmVkIHZpYSBER0dFICgqRGVuYXR1cmluZyBHcmFkaWVudCBHZWwgRWxlY3Ryb3Bob3Jlc2lzKikuCgotLS0KCiMjIEltcG9ydCB0aGUgZGF0YQoKYGBge3J9CmFwIDwtIHJlYWRfY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vR1RQQi9QU0xTMjAvbWFzdGVyL2RhdGEvYXJtcGl0LmNzdiIpCmFwCmBgYAoKIyMgRGF0YSBleHBsb3JhdGlvbgoKV2UgcGxvdCB0aGUgZGlyZWN0IHJlbGF0aXZlIGFidW5kYW5jZXMgaW4gZnVuY3Rpb24gb2YgdGhlIHRyZWF0bWVudCBncm91cC4gV2l0aCB0aGUgZ2dwbG90MiBsaWJyYXJ5IHdlIGNhbiBlYXNpbHkgYnVpbGQgcGxvdHMgYnkgYWRkaW5nIGxheWVycy4KCmBgYHtyfQphcCAlPiUgZ2dwbG90KGFlcyh4ID0gdHJ0LCB5ID0gcmVsKSkgKwogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gImppdHRlciIpCgphcCAlPiUgZ2dwbG90KGFlcyhzYW1wbGUgPSByZWwpKSArCiAgZ2VvbV9xcSgpICsKICBnZW9tX3FxX2xpbmUoKSArCiAgZmFjZXRfd3JhcCh+dHJ0KQpgYGAKCi0tLQoKIyBUd28gc2FtcGxlIFQtdGVzdAojIyBOb3RhdGlvbgoKU3VwcG9zZSB0aGF0ICRZX3tpan0kIGlzIHRoZSByZXNwb25zZSBmb3Igc3ViamVjdHMgJGk9MSxcbGRvdHMsIG5faiQgZnJvbSBwb3B1bGF0aW9uICRqPTEsMiQuCgpVc2Ugb2YgdGhlIHRlcm0gKip0cmVhdG1lbnQqKiBvciAqKmdyb3VwKiogaW5zdGVhZCBvZiBwb3B1bGF0aW9uCgpIZXJlIHRoZSB0cmVhdG1lbnQgaXMgJGo9MSQgbWljcm9iaWFsIHRyYW5zcGxhbnQgdnMgJGo9MiQgcGxhY2Viby4KCldlIGFzc3VtZQoKJCRZX3tpan1cdGV4dHsgaS5pLmQuIH0gTihcbXVfaixcc2lnbWFeMilcO1w7XDtpPTEsXGxkb3RzLG5faVw7aj0xLDIuJCQKCk5vdGUsIHRoYXQgd2UgYXNzdW1lIGVxdWFsIHZhcmlhbmNlcyAqKmhvbW9zY2VkYXN0aWMqKgoKKFVuZXF1YWwgdmFyaWFuY2VzIGFyZSByZWZlcnJlZCB0byBhcyAgKipoZXRlcm9zY2VkYXN0aWMqKikKCi0tLQoKIyMgSHlwb3RoZXNlcwoKVGVzdCAkJCBIXzA6IFxtdV8xID0gXG11XzIgJCQKYWdhaW5zdAokJCAgSF8xOiBcbXVfMSBcbmVxIFxtdV8yIC4kJAoKJEhfMSQgaXMgYWdhaW4gdGhlIHJlc2VhcmNoIGh5cG90aGVzaXM6IHRoZSBhdmVyYWdlIHJlbGF0aXZlIGFidW5kYW5jZSBvZiAqU3RhcGh5bG9jb2NjdXMgc3BwLiogaXMgZGlmZmVyZW50IHVwb24gbWljcm9iaWFsIHRyYW5zcGxhbnQgdGhlbiB1cG9uIHBsYWNlYm8gdHJlYXRtZW50LgoKJEhfMCQgYW5kICRIXzEkIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBpbiB0ZXJtcyBvZiB0aGUgZWZmZWN0IHNpemUgYmV0d2VlbiB0aGUgdHdvIHRyZWF0bWVudHMsICRcbXVfMS1cbXVfMiQKJCRIXzA6IFxtdV8xLVxtdV8yID0gMCwkJAokJEhfMTogXG11XzEtXG11XzIgXG5lcSAwLiQkCgpXZSBjYW4gZXN0aW1hdGUgdGhlIGVmZmVjdCBzaXplIHVzaW5nIHRoZSBkaWZmZXJlbmNlIGluIHNhbXBsZSBtZWFuczoKJCRcaGF0IFxtdV8xLVxoYXQgXG11XzI9XGJhciBZXzEgLVxiYXIgWV8yLiQkCgotLS0KCiMjIFZhcmlhbmNlIGVzdGltYXRvcgoKVGhlIGV4cGVyaW1lbnRhbCB1bml0cyBhcmUgaW5kZXBlbmRlbnQgc28gdGhlIHNhbXBsZSBtZWFucyBhcmUgYWxzbyBpbmRlcGVuZGVudCBhbmQgdGhlIHZhcmlhbmNlIG9uIHRoZSBkaWZmZXJlbmNlIGlzCiQkXHRleHR7VmFyfV97XGJhciBZXzEgLVxiYXIgWV8yfT1cZnJhY3tcc2lnbWFeMn17bl8xfStcZnJhY3tcc2lnbWFeMn17bl8yfT1cc2lnbWFeMiBcbGVmdChcZnJhY3sxfXtuXzF9K1xmcmFjezF9e25fMn1ccmlnaHQpLiQkCgpBbmQgdGhlIHN0YW5kYXJkIGVycm9yIGJlY29tZXMKJCRcc2lnbWFfe1xiYXIgWV8xIC1cYmFyIFlfMn09XHNpZ21hXHNxcnR7XGZyYWN7MX17bl8xfStcZnJhY3sxfXtuXzJ9fS4kJAoKVGhlIHZhcmlhbmNlIGNhbiBiZSBlc3RpbWF0ZWQgd2l0aGluIGVhY2ggZ3JvdXAgdXNpbmcgdGhlIHNhbXBsZSB2YXJpYW5jZToKCiQkU18xXjIgPSBcZnJhY3sxfXtuXzEtMX1cc3VtX3tpPTF9XntuXzF9IChZX3tpMX0tXGJhcntZfV8xKV4yLiQkCgokJFNfMl4yID0gXGZyYWN7MX17bl8yLTF9XHN1bV97aT0xfV57bl8yfSAoWV97aTJ9LVxiYXJ7WX1fMileMi4kJAoKQnV0LCBpZiB3ZSBhc3N1bWUgZXF1YWwgdmFyaWFuY2VzICRcc2lnbWFfMV4yPVxzaWdtYV8yXjI9XHNpZ21hXjIkIHRoYW4gd2UgY2FuIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBtb3JlIHByZWNpc2UgYnkgdXNpbmcgYWxsIG9ic2VydmF0aW9ucyBpbiBib3RoIGdyb3Vwcy4gVGhpcyB2YXJpYW5jZSBlc3RpbWF0b3IgaXMgYWxzbyByZWZlcnJlZCB0byBhcyB0aGUgKnBvb2xlZCB2YXJpYW5jZSBlc3RpbWF0b3I6ICRTXjJfcCQqLgoKU28gJFNfMV4yJCBlbiAkU18yXjIkIGFyZSBlc3RpbWF0b3JzIG9mIHRoZSBzYW1lIHBhcmFtZXRlciAkXHNpZ21hXjIkLgoKQW5kIHdlIGNhbiBjb21iaW5lIHRoZW0gaW50byBvbmUgZXN0aW1hdG9yIGJhc2VkIG9uIGFsbCAkbl8xK25fMiQgb2JzZXJ2YXRpb25zOgoKJCQgIFNfcF4yID0gXGZyYWN7bl8xLTF9e25fMStuXzItMn0gU18xXjIgKyBcZnJhY3tuXzItMX17bl8xK25fMi0yfSBTXzJeMiA9IFxmcmFjezF9e25fMStuXzItMn1cc3VtX3tqPTF9XjJcc3VtX3tpPTF9XntuX2p9IChZX3tpan0gLSBcYmFye1l9X2opXjIuJCQKCiQkIFNfcF4yPSBcc3VtXGxpbWl0c197aj0xfV4yXHN1bVxsaW1pdHNfe2k9MX1ee25fan0gXGZyYWN7KFlfe2lqfS1cYmFye1l9X3suan0pXjJ9e25fMStuXzItMn0kJAoKClRoZSBwb29sZWQgdmFyaWFuY2UgZXN0aW1hdG9yIHVzZXMgdGhlIHNxdWFyZWQgZGV2aWF0aW9ucyBvZiB0aGUgb2JzZXJ2YXRpb25zIGZyb20gdGhlaXIgZ3JvdXAgbWVhbiBhbmQgaGFzICRuXzErbl8yLTIkIGRlZ3JlZXMgb2YgZnJlZWRvbS4KCi0tLQoKIyMgVGVzdCBzdGF0aXN0aWMKVHdvLXNhbXBsZSAkdCQtdGVzdHN0YXRpc3RpZWs6CgokJFQgPSBcZnJhY3tcYmFye1l9XzEtXGJhcntZfV8yfXtcc3FydHtcZnJhY3tTX3BeMn17bl8xfStcZnJhY3tTX3BeMn17bl8yfX19ID0KICBcZnJhY3tcYmFye1l9XzEgLSBcYmFye1l9XzJ9e1NfcFxzcXJ0e1xmcmFjezF9e25fMX0rXGZyYWN7MX17bl8yfX19LiQkCgpUaGUgc3RhdGlzdGljIFQgZm9sbG93cyBhIHQtZGlzdHJpYnV0aW9uIHdpdGggJG5fMStuXzItMiQgdW5kZXIgJEhfMCQgaXMgYWxsIGRhdGEgYXJlIGluZGVwZW5kZW50LCBub3JtYWxseSBkaXN0cmlidXRlZCBhbmQgaGF2ZSBlcXVhbCB2YXJpYW5jZXMuCgotLS0KCiMjIEFybXBpdCBleGFtcGxlCgpXZSBjYW4gaW1wbGVtZW50IHRoZSB0ZXN0IGluIFI6CgpgYGB7cn0KdC50ZXN0KHJlbCB+IHRydCwgZGF0YSA9IGFwLCB2YXIuZXF1YWwgPSBUUlVFKQpgYGAKCk9uIHRoZSAkNVwlJCBzaWduaWZpY2FuY2UgbGV2ZWwgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgaW4gZmF2b3Igb2YgdGhlIGFsdGVybmF0aXZlIGh5cG90aGVzaXMgYW5kIGNvbmNsdWRlIHRoYXQgdGhlIHJlbGF0aXZlIGFidW5kYW5jZSBvZiAgKlN0YXBoeWxvY29jY3VzIHNwcC4qIGlzIG9uIGF2ZXJhZ2UgZXh0cmVtZSBzaWduaWZpY2FudCBsYXJnZXIgaXMgaW4gdHJhbnNwbGFudGF0aW9uIGdyb3VwIHRoYW4gaW4gdGhlIHBsYWNlYm8gZ3JvdXAuCgpJZiB0aGVyZSBpcyBubyBlZmZlY3Qgb2YgdGhlIHRyYW5zcGxhbnQgd2UgaGF2ZSBhIHByb2JhYmlsaXR5IG9mIGxlc3MgdGhlbiA5IGluICQxMDAwMDAkIHRvIG9ic2VydmUgYSB0ZXN0IHN0YXRpc3RpYyBpbiBhIHJhbmRvbSBzYW1wbGUgdGhhdCBpcyBhdCBsZWFzdCBhcyBleHRyZW1lIGFzIHdoYXQgd2Ugb2JzZXJ2ZWQgaW4gdGhlIGFybXBpdCBleHBlcmltZW50LgoKVGhpcyBpcyBleHRyZW1lbHkgcmFyZSB1bmRlciAkSF8wJC4KCklmICRIXzEkIGlzIGNvcnJlY3QsIHdlIGV4cGVjdCB0aGF0IHRoZSB0ZXN0IHN0YXRpc3RpYyBpcyBsYXJnZXIgaW4gYWJzb2x1dGUgdmFsdWUgYW5kIGV4cGVjdCBzbWFsbCBwLXZhbHVlcy4gSGVuY2Ugd2UgZGVjaWRlIHRoYXQgdGhlcmUgaXMgYSBsb3Qgb2YgZXZpZGVuY2UgYWdhaW5zdCAkSF8wJCBpbiBmYXZvdXIgb2YgJEhfMSQuCgoqKkdvb2Qgc3RhdGlzdGljYWwgcHJhY3RpY2UqKiBpcyB0byByZXBvcnQgdGhlICRwJC12YWx1ZSwgYnV0IGFsc28gIGVmZmVjdCBzaXplIGFsb25nIHdpdGggaXRzIGNvbmZpZGVuY2UgaW50ZXJ2YWwuIFNvIHRoYXQgd2UgY2FuIGp1ZGdlIHRoZSBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UgYW5kIHRoZSBiaW9sb2dpY2FsIHJlbGV2YW5jZS4KCiMjIyBDb25jbHVzaW9uCgpPbiBhdmVyYWdlIHRoZSByZWxhdGl2ZSBhYnVuZGFuY2Ugb2YgKlN0YXBoeWxvY29jY3VzIHNwcC4qIGluIHRoZSBtaWNyb2Jpb21lIG9mIHRoZSBhcm1waXQgaW4gdGhlIHRyYW5zcGxhbnQgZ3JvdXAgaXMgZXh0cmVtZWx5IHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGZyb20gdGhhdCBpbiB0aGUgcGxhY2VibyBncm91cCAoJHA8PDAuMDAxJCkuIFRoZSByZWxhdGl2ZSBhYnVuZGFuY2Ugb2YgKlN0YXBoeWxvY29jY3VzIHNwcC4qIGlzIG9uIGF2ZXJhZ2UgYHIgcm91bmQoZGlmZih0LnRlc3QocmVsfnRydCxkYXRhPWFwLHZhci5lcXVhbD1UUlVFKSRlc3RpbWF0ZSksMSlgJSBsYXJnZXIgaW4gdGhlIHRyYW5zcGxhbnQgZ3JvdXAgdGhhbiBpbiB0aGUgcGxhY2VibyBncm91cCAoOTVcJSBDSSBbYHIgcGFzdGUoZm9ybWF0KC10LnRlc3QocmVsfnRydCxkYXRhPWFwLHZhci5lcXVhbD1UUlVFKSRjb25mLmludFsyOjFdLGRpZ2l0cz0yLG5zbWFsbD0xKSxjb2xsYXBzZT0iLCIpYF0lKS4KCi0tLQoKIyBBc3N1bXB0aW9ucwoKVmFsaWRpdHkgb2YgdC10ZXN0IGRlcGVuZHMgb24gZGlzdHJpYnV0aW9uYWwgYXNzdW1wdGlvbnM6CgotIEluZGVwZW5kZW5jZSAoZGVzaWduKQotIE9uZS1zYW1wbGUgdC10ZXN0OiBub3JtYWxpdHkgb2YgdGhlIG9ic2VydmF0aW9ucwotIFBhaXJlZCB0LXRlc3Q6IG5vcm1hbGl0eSBvZiB0aGUgZGlmZmVyZW5jZQotIFR3by1zYW1wbGUgdC10ZXN0OiBOb3JtYWxpdHkgb2YgdGhlIG9ic2VydmF0aW9ucyBpbiBib3RoIGdyb3VwcywgYW5kIGVxdWFsIHZhcmlhbmNlcy4KCklmIHRoZSBhc3N1bXB0aW9ucyBhcmUgbm90IG1ldCwgdGhlIG51bGwgZGlzdHJpYnV0aW9uIGRvZXMgbm90IGZvbGxvdyBhIHQtZGlzdHJpYnV0aW9uLCBhbmQsIHRoZSBwLXZhbHVlcyBhbmQgY3JpdGljYWwgdmFsdWVzIGFyZSBpbmNvcnJlY3QuCgpUbyBjb25zdHJ1Y3QgY29uZmlkZW5jZSBpbnRlcnZhbHMgd2UgYWxzbyByZWx5IG9uIHRoZXNlIGFzc3VtcHRpb25zLgoKLSBXZSB1c2VkIHF1YW50aWxlcyBmcm9tIHRoZSB0LWRpc3RyaWJ1dGlvbiB0byBjYWxjdWxhdGUgdGhlIGxvd2VyIGFuZCB1cHBlciBsaW1pdC4KCi0gVGhlIGNvcnJlY3QgY292ZXJhZ2Ugb2YgdGhlIENJIGRlcGVuZHMgb24gdGhlc2UgYXNzdW1wdGlvbnMKCi0tLQoKIyMgRXZhbHVhdGUgbm9ybWFsaXR5CgogLSBCb3hwbG90cyBhbmQgaGlzdG9ncmFtczogc2hhcGUgb2YgZGlzdHJpYnV0aW9uIGFuZCBvdXRsaWVycwoKIC0gUVEtcGxvdHMKClRoZXJlIGFsc28gZXhpc3QgaHlwb3RoZXNpcyB0ZXN0cyAoZ29vZG5lc3Mtb2YtZml0IHRlc3QpLCBidXQgdGhlaXIgbnVsbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlIGRhdGEgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIHNvIHdlIG1ha2UgYSB3ZWFrIGNvbmNsdXNpb24hCgogIC0gS29sbW9nb3Jvdi1TbWlybm92LCBTaGFwaXJvLVdpbGsgZW4gQW5kZXJzb24tRGFybGluZy4KICAtIEluIHNtYWxsIHNhbXBsZXMgdGhleSBoYXZlIGEgbG93IHBvd2VyCiAgLSBJbiBsYXJnZSBzYW1wbGVzIHRoZXkgb2Z0ZW4gZmxhZyB2ZXJ5IHNtYWxsIGRldmlhdGlvbnMgYXMgc2lnbmlmaWNhbnQKClJlY29tbWVuZGF0aW9uCgotIFN0YXJ0IHdpdGggZ3JhcGhpY2FsIGV4cGxvcmF0aW9uIG9mIHRoZSBkYXRhIGFuZCBrZWVwIHRoZSBzYW1wbGUgc2l6ZSBpbiBtaW5kIHRvIGF2b2lkIG92ZXJpbnRlcnByZXRhdGlvbiBvZiB0aGUgcGxvdHMuCgotIElmIHlvdSBoYXZlIGRvdWJ0cywgdXNlIHNpbXVsYXRpb24gd2hlcmUgeW91IHNpbXVsYXRlIGRhdGEgd2l0aCB0aGUgc2FtZSBzYW1wbGUgc2l6ZSBmcm9tIGEgTm9ybWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBzYW1lIG1lYW4gYW5kIHZhcmlhbmNlIGFzIHRoZSBvbmUgdGhhdCB5b3Ugb2JzZXJ2ZWQgaW4gdGhlIHNhbXBsZQoKLSBJZiB5b3Ugb2JzZXJ2ZWQgZGV2aWF0aW9ucyBvZiBub3JtYWxpdHkgY2hlY2sgaW4gdGhlIGxpdGVyYXR1cmUgaG93IHNlbnNpdGl2ZSB5b3VyIG1ldGhvZCBpcyBzdWNoIGRldmlhdGlvbnMgb2Ygbm9ybWFsaXR5LiAoZS5nLiBULXRlc3RzIGZvciBpbnN0YW5jZSBhcmUgcmF0aGVyIGluc2Vuc2l0aXZlIHRvIGRldmlhdGlvbnMgYXMgbG9uZyBhcyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBkYXRhIGlzIHN5bW1ldHJpYy4pCgotIEluIGxhcmdlIHNhbXBsZXMgeW91IGNhbiByZXNvcnQgdG8gdGhlIGNlbnRyYWwgbGltaXQgdGhlb3JlbS4KCi0gWW91IG1pZ2h0IHJlc29ydCB0byB0cmFuc2Zvcm1hdGlvbnMgb2YgdGhlIHJlc3BvbnNlLgoKLS0tCgojIyBIb21vc2NlZGFzdGljaXR5CgotIEJveHBsb3RzOiBUaGUgYm94IHNpemUgaXMgdGhlIGludGVyIHF1YXJ0aWxlIHJhbmdlIChJUVIpIGEgcm9idXN0IGVzdGltYXRvciBvZiB0aGUgdmFyaWFuY2UuCgotIElmIHRoZSBkaWZmZXJlbmNlcyBhcmUgbm90IGxhcmdlICRccmlnaHRhcnJvdyQgaG9tb3NjZWRhc3RpY2l0ZWl0CgotIEFnYWluIHlvdSBjYW4gdXNlIHNpbXVsYXRpb24gdG8gZ2V0IGluc2lnaHQgaW4gdGhlIGRpZmZlcmVuY2VzIHlvdSBjYW4gZXhwZWN0LgoKLSBGb3JtYWwgRi10ZXN0IGNhbiBiZSB1c2VkIHRvIGNvbXBhcmUgdGhlIHZhcmlhbmNlcywgYnV0IGFnYWluIHVuZGVyIHRoZSBudWxsIHlvdSBhc3N1bWUgZXF1YWwgdmFyaWFuY2VzLCBzbyB0aGUgc2FtZSBjcml0aWNpc20gYXMgZm9yIG5vcm1hbGl0eSB0ZXN0cyBhcHBsaWVzIGhlcmUuCgotLS0KCiMjIFdlbGNoIG1vZGlmaWVkIHQtdGVzdAoKSWYgdGhlIGRhdGEgYXJlIGhldGVyb3NjZWRhc3RpYywgeW91IGNhbiB1c2UgYSBXZWxjaCB0d28tc2FtcGxlIFQtdGVzdCwgd2hpY2ggbm8gbG9uZ2VyIHVzZXMgdGhlIHBvb2xlZCB2YXJpYW5jZSBlc3RpbWF0b3IuCgokJFQgPSAgXGZyYWN7XGJhcntZfV8xIC0gXGJhcntZfV8yfXtcc3FydHtcZnJhY3tTXjJfMX17bl8xfStcZnJhY3tTXjJfMn17bl8yfX19JCQKd2l0aCAkU14yXzEkIGVuICRTXjJfMiQgdGhlIHNhbXBsZSB2YXJpYW5jZXMgaW4gYm90aCBncm91cHMuCgpUaGlzIHN0YXRpc3RpYyBmb2xsb3dzIGFwcHJveGltYXRlbHkgYSB0LWRpc3RyaWJ1dGlvbiB3aXRoIGEgbnVtYmVyIG9mIGRlZ3JlZXMgb2YgZnJlZWRvbSBiZXR3ZWVuICAkXHRleHR7bWlufShuXzEtMSxuXzItMSkkIGFuZCAkbl8xK25fMi0yJC4KCkluIFIgdGhlIGRlZ3JlZXMgb2YgZnJlZWRvbSBhcmUgZXN0aW1hdGVkIHVzaW5nIHRoZSBXZWxjaC0gU2F0dGVydGh3YWl0ZSBhcHByb3hpbWF0aW9uLiBZb3UgY2FuIGRvIHRoaXMgYnkgdXNpbmcgdGhlIGB0LnRlc3RgIGZ1bmN0aW9uIHdpdGggYXJndW1lbnQgYHZhci5lcXVhbD1GQUxTRWAuCgpgYGB7cn0KdC50ZXN0KHJlbCB+IHRydCwgZGF0YSA9IGFwLCB2YXIuZXF1YWwgPSBGQUxTRSkKYGBgCgpOb3RlIHRoYXQgeW91IGNhbiBzZWUgdGhhdCB0aGUgV2VsY2ggVC10ZXN0IGlzIGFkb3B0ZWQgaW4gdGhlIHRpdGxlLiBUaGUgYWRqdXN0ZWQgZGVncmVlcyBvZiBmcmVlZG9tIGFyZSAkZGYgPSAxNy44NzYkICRccG0kIHRvIHRoYXQgb2YgdGhlIGNvbnZlbnRpb25hbCBULXRlc3QsIGJlY2F1c2UgdGhlIHZhcmlhbmNlcyBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KCi0tLQoKIyBIb3cgdG8gcmVwb3J0PwoKLSBJbiB0aGUgc2NpZW50aWZpYyBsaXRlcmF0dXJlIHRoZXJlIGlzIHRvbyBtdWNoIGF0dGVudGlvbiBmb3IgcC12YWx1ZXMKCi0gSXQgaXMgbXVjaCBtb3JlIGluZm9ybWF0aXZlIHRvIGNvbWJpbmUgYW4gZXN0aW1hdGUgd2l0aCBpdHMgY29uZmlkZW5jZSBpbnRlcnZhbC4KCioqUnVsZSBvZiB0aHVtYioqOgoKUmVwb3J0IGFuIGVzdGltYXRlIHRvZ2V0aGVyIHdpdGggaXRzICBjb25maWRlbmNlIGludGVydmFsIChhbmQgaXRzIHAtdmFsdWUpCgoxLiBUaGUgcmVzdWx0IG9mIHRoZSB0ZXN0IGNhbiBiZSBkZXJpdmVkIG9mIHRoZSBjb25maWRlbmNlIGludGVydmFsCjIuIEl0IGFsbG93cyB0aGUgcmVhZGVyIHRvIGp1ZGdlICoqc2NpZW50aWZpYyByZWxldmFuY2UqKi4KCmBgYHtyfQp0LnRlc3QocmVsIH4gdHJ0LCBkYXRhID0gYXApCmBgYAoKVGhlIHJlc3VsdCBvZiBhbiAkXGFscGhhJC1sZXZlbCB0LXRlc3QgaXMgZXF1aXZhbGVudCB3aXRoIGNvbXBhcmluZyB0aGUgZWZmZWN0IHNpemUgdW5kZXIgJEhfMCQgd2l0aCB0aGUgJDEtXGFscGhhJCBDSS4KCkFuIGVmZmVjdCBjYW4gYmUgZXh0cmVtZWx5IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQsIGJ1dCBzY2llbnRpZmljYWxseSBpcnJlbGV2YW50LiBXaXRoIGEgQ0kgeW91IHdpbGwgc3BvdCB0aGlzLgo=
+
LS0tCnRpdGxlOiAiNS4gU3RhdGlzdGljYWwgSW5mZXJlbmNlOiBUd28tc2FtcGxlIHQtdGVzdCIKYXV0aG9yOiAiTGlldmVuIENsZW1lbnQiCmRhdGU6ICJzdGF0T21pY3MsIEdoZW50IFVuaXZlcnNpdHkgKGh0dHBzOi8vc3RhdG9taWNzLmdpdGh1Yi5pbykiCi0tLQoKPGEgcmVsPSJsaWNlbnNlIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvNC4wIj48aW1nIGFsdD0iQ3JlYXRpdmUgQ29tbW9ucyBMaWNlbnNlIiBzdHlsZT0iYm9yZGVyLXdpZHRoOjAiIHNyYz0iaHR0cHM6Ly9pLmNyZWF0aXZlY29tbW9ucy5vcmcvbC9ieS1uYy1zYS80LjAvODh4MzEucG5nIiAvPjwvYT4KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFLCBjYWNoZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGluY2x1ZGUgPSBUUlVFLCBjb21tZW50ID0gTkEsIGVjaG8gPSBUUlVFLAogIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBjYWNoZSA9IFRSVUUKKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKYGBgCgo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2dnaFMwY3pQS0dZP3NpPVZzUGt1ZS1mN0dnVmVJTGMiIHRpdGxlPSJZb3VUdWJlIHZpZGVvIHBsYXllciIgZnJhbWVib3JkZXI9IjAiIGFsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlOyB3ZWItc2hhcmUiIHJlZmVycmVycG9saWN5PSJzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+CgojIFNtZWxseSBhcm1waXQgZXhhbXBsZQoKLSBTbWVsbHkgYXJtcGl0cyBhcmUgbm90IGNhdXNlZCBieSBzd2VhdCwgaXRzZWxmLiBUaGUgc21lbGwgaXMgY2F1c2VkIGJ5IHNwZWNpZmljIG1pY3JvLW9yZ2FuaXNtcyBiZWxvbmdpbmcgdG8gdGhlIGdyb3VwIG9mICpDb3J5bmViYWN0ZXJpdW0gc3BwLiogdGhhdCBtZXRhYm9saXNlIHN3ZWF0LgpBbm90aGVyIGdyb3VwIG9mIGFidW5kYW50IGJhY3RlcmlhIGFyZSB0aGUgKlN0YXBoeWxvY29jY3VzIHNwcC4qLCB0aGVzZSBiYWN0ZXJpYSBkbyBub3QgbWV0YWJvbGlzZSBzd2VhdCBpbiBzbWVsbHkgY29tcG91bmRzLgoKLSBUaGUgQ01FVC1ncm91cCBhdCBHaGVudCBVbml2ZXJzaXR5IGRvZXMgcmVzZWFyY2ggdG8gb24gdHJhbnNwbGFudGluZyB0aGUgYXJtcGl0IG1pY3JvYmlvbWUgdG8gc2F2ZSBwZW9wbGUgd2l0aCBzbWVsbHkgYXJtcGl0cy4KCi0gUHJvcG9zZWQgVGhlcmFweToKICAJMS4gUmVtb3ZlIGFybXBpdC1taWNyb2Jpb21lIHdpdGggYW50aWJpb3RpY3MKICAgIDIuIEluZmx1ZW5jZSBhcm1waXQgbWljcm9iaW9tZSB3aXRoIG1pY3JvYmlhbCAgdHJhbnNwbGFudCAoaHR0cHM6Ly95b3V0dS5iZS85UklGeXFMWGRWdykKCi0gRXhwZXJpbWVudDoKCiAgICAtIDIwIHN1YmplY3RzIHdpdGggc21lbGx5IGFybXBpdHMgYXJlIGF0dHJpYnV0ZWQgdG8gb25lIG9mIHR3byB0cmVhdG1lbnQgZ3JvdXBzCiAgICAtIHBsYWNlYm8gKG9ubHkgYW50aWJpb3RpY3MpCiAgICAtIHRyYW5zcGxhbnQgKGFudGliaW90aWNhIGZvbGxvd2VkIGJ5IG1pY3JvYmlhbCB0cmFuc3BsYW50KS4KICAgIC0gVGhlIG1pY3JvYmlvbWUgaXMgc2FtcGxlZCA2IHdlZWtzIHVwb24gdGhlIHRyZWF0bWVudAogICAgLSBUaGUgcmVsYXRpdmUgYWJ1bmRhbmNlIG9mICpTdGFwaHlsb2NvY2N1cyBzcHAuKiBvbiAqQ29yeW5lYmFjdGVyaXVtIHNwcC4qICsgKlN0YXBoeWxvY29jY3VzIHNwcC4qIGluIHRoZSBtaWNyb2Jpb21lIGlzIG1lYXN1cmVkIHZpYSBER0dFICgqRGVuYXR1cmluZyBHcmFkaWVudCBHZWwgRWxlY3Ryb3Bob3Jlc2lzKikuCgotLS0KCiMjIEltcG9ydCB0aGUgZGF0YQoKYGBge3J9CmFwIDwtIHJlYWRfY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vR1RQQi9QU0xTMjAvbWFzdGVyL2RhdGEvYXJtcGl0LmNzdiIpCmFwCmBgYAoKIyMgRGF0YSBleHBsb3JhdGlvbgoKV2UgcGxvdCB0aGUgZGlyZWN0IHJlbGF0aXZlIGFidW5kYW5jZXMgaW4gZnVuY3Rpb24gb2YgdGhlIHRyZWF0bWVudCBncm91cC4gV2l0aCB0aGUgZ2dwbG90MiBsaWJyYXJ5IHdlIGNhbiBlYXNpbHkgYnVpbGQgcGxvdHMgYnkgYWRkaW5nIGxheWVycy4KCmBgYHtyfQphcCAlPiUgZ2dwbG90KGFlcyh4ID0gdHJ0LCB5ID0gcmVsKSkgKwogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gImppdHRlciIpCgphcCAlPiUgZ2dwbG90KGFlcyhzYW1wbGUgPSByZWwpKSArCiAgZ2VvbV9xcSgpICsKICBnZW9tX3FxX2xpbmUoKSArCiAgZmFjZXRfd3JhcCh+dHJ0KQpgYGAKCi0tLQoKIyBUd28gc2FtcGxlIFQtdGVzdAojIyBOb3RhdGlvbgoKU3VwcG9zZSB0aGF0ICRZX3tpan0kIGlzIHRoZSByZXNwb25zZSBmb3Igc3ViamVjdHMgJGk9MSxcbGRvdHMsIG5faiQgZnJvbSBwb3B1bGF0aW9uICRqPTEsMiQuCgpVc2Ugb2YgdGhlIHRlcm0gKip0cmVhdG1lbnQqKiBvciAqKmdyb3VwKiogaW5zdGVhZCBvZiBwb3B1bGF0aW9uCgpIZXJlIHRoZSB0cmVhdG1lbnQgaXMgJGo9MSQgbWljcm9iaWFsIHRyYW5zcGxhbnQgdnMgJGo9MiQgcGxhY2Viby4KCldlIGFzc3VtZQoKJCRZX3tpan1cdGV4dHsgaS5pLmQuIH0gTihcbXVfaixcc2lnbWFeMilcO1w7XDtpPTEsXGxkb3RzLG5faVw7aj0xLDIuJCQKCk5vdGUsIHRoYXQgd2UgYXNzdW1lIGVxdWFsIHZhcmlhbmNlcyAqKmhvbW9zY2VkYXN0aWMqKgoKKFVuZXF1YWwgdmFyaWFuY2VzIGFyZSByZWZlcnJlZCB0byBhcyAgKipoZXRlcm9zY2VkYXN0aWMqKikKCi0tLQoKIyMgSHlwb3RoZXNlcwoKVGVzdCAkJCBIXzA6IFxtdV8xID0gXG11XzIgJCQKYWdhaW5zdAokJCAgSF8xOiBcbXVfMSBcbmVxIFxtdV8yIC4kJAoKJEhfMSQgaXMgYWdhaW4gdGhlIHJlc2VhcmNoIGh5cG90aGVzaXM6IHRoZSBhdmVyYWdlIHJlbGF0aXZlIGFidW5kYW5jZSBvZiAqU3RhcGh5bG9jb2NjdXMgc3BwLiogaXMgZGlmZmVyZW50IHVwb24gbWljcm9iaWFsIHRyYW5zcGxhbnQgdGhlbiB1cG9uIHBsYWNlYm8gdHJlYXRtZW50LgoKJEhfMCQgYW5kICRIXzEkIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBpbiB0ZXJtcyBvZiB0aGUgZWZmZWN0IHNpemUgYmV0d2VlbiB0aGUgdHdvIHRyZWF0bWVudHMsICRcbXVfMS1cbXVfMiQKJCRIXzA6IFxtdV8xLVxtdV8yID0gMCwkJAokJEhfMTogXG11XzEtXG11XzIgXG5lcSAwLiQkCgpXZSBjYW4gZXN0aW1hdGUgdGhlIGVmZmVjdCBzaXplIHVzaW5nIHRoZSBkaWZmZXJlbmNlIGluIHNhbXBsZSBtZWFuczoKJCRcaGF0IFxtdV8xLVxoYXQgXG11XzI9XGJhciBZXzEgLVxiYXIgWV8yLiQkCgotLS0KCiMjIFZhcmlhbmNlIGVzdGltYXRvcgoKVGhlIGV4cGVyaW1lbnRhbCB1bml0cyBhcmUgaW5kZXBlbmRlbnQgc28gdGhlIHNhbXBsZSBtZWFucyBhcmUgYWxzbyBpbmRlcGVuZGVudCBhbmQgdGhlIHZhcmlhbmNlIG9uIHRoZSBkaWZmZXJlbmNlIGlzCiQkXHRleHR7VmFyfV97XGJhciBZXzEgLVxiYXIgWV8yfT1cZnJhY3tcc2lnbWFeMn17bl8xfStcZnJhY3tcc2lnbWFeMn17bl8yfT1cc2lnbWFeMiBcbGVmdChcZnJhY3sxfXtuXzF9K1xmcmFjezF9e25fMn1ccmlnaHQpLiQkCgpBbmQgdGhlIHN0YW5kYXJkIGVycm9yIGJlY29tZXMKJCRcc2lnbWFfe1xiYXIgWV8xIC1cYmFyIFlfMn09XHNpZ21hXHNxcnR7XGZyYWN7MX17bl8xfStcZnJhY3sxfXtuXzJ9fS4kJAoKVGhlIHZhcmlhbmNlIGNhbiBiZSBlc3RpbWF0ZWQgd2l0aGluIGVhY2ggZ3JvdXAgdXNpbmcgdGhlIHNhbXBsZSB2YXJpYW5jZToKCiQkU18xXjIgPSBcZnJhY3sxfXtuXzEtMX1cc3VtX3tpPTF9XntuXzF9IChZX3tpMX0tXGJhcntZfV8xKV4yLiQkCgokJFNfMl4yID0gXGZyYWN7MX17bl8yLTF9XHN1bV97aT0xfV57bl8yfSAoWV97aTJ9LVxiYXJ7WX1fMileMi4kJAoKQnV0LCBpZiB3ZSBhc3N1bWUgZXF1YWwgdmFyaWFuY2VzICRcc2lnbWFfMV4yPVxzaWdtYV8yXjI9XHNpZ21hXjIkIHRoYW4gd2UgY2FuIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBtb3JlIHByZWNpc2UgYnkgdXNpbmcgYWxsIG9ic2VydmF0aW9ucyBpbiBib3RoIGdyb3Vwcy4gVGhpcyB2YXJpYW5jZSBlc3RpbWF0b3IgaXMgYWxzbyByZWZlcnJlZCB0byBhcyB0aGUgKnBvb2xlZCB2YXJpYW5jZSBlc3RpbWF0b3I6ICRTXjJfcCQqLgoKU28gJFNfMV4yJCBlbiAkU18yXjIkIGFyZSBlc3RpbWF0b3JzIG9mIHRoZSBzYW1lIHBhcmFtZXRlciAkXHNpZ21hXjIkLgoKQW5kIHdlIGNhbiBjb21iaW5lIHRoZW0gaW50byBvbmUgZXN0aW1hdG9yIGJhc2VkIG9uIGFsbCAkbl8xK25fMiQgb2JzZXJ2YXRpb25zOgoKJCQgIFNfcF4yID0gXGZyYWN7bl8xLTF9e25fMStuXzItMn0gU18xXjIgKyBcZnJhY3tuXzItMX17bl8xK25fMi0yfSBTXzJeMiA9IFxmcmFjezF9e25fMStuXzItMn1cc3VtX3tqPTF9XjJcc3VtX3tpPTF9XntuX2p9IChZX3tpan0gLSBcYmFye1l9X2opXjIuJCQKCiQkIFNfcF4yPSBcc3VtXGxpbWl0c197aj0xfV4yXHN1bVxsaW1pdHNfe2k9MX1ee25fan0gXGZyYWN7KFlfe2lqfS1cYmFye1l9X3suan0pXjJ9e25fMStuXzItMn0kJAoKClRoZSBwb29sZWQgdmFyaWFuY2UgZXN0aW1hdG9yIHVzZXMgdGhlIHNxdWFyZWQgZGV2aWF0aW9ucyBvZiB0aGUgb2JzZXJ2YXRpb25zIGZyb20gdGhlaXIgZ3JvdXAgbWVhbiBhbmQgaGFzICRuXzErbl8yLTIkIGRlZ3JlZXMgb2YgZnJlZWRvbS4KCi0tLQoKIyMgVGVzdCBzdGF0aXN0aWMKVHdvLXNhbXBsZSAkdCQtdGVzdHN0YXRpc3RpZWs6CgokJFQgPSBcZnJhY3tcYmFye1l9XzEtXGJhcntZfV8yfXtcc3FydHtcZnJhY3tTX3BeMn17bl8xfStcZnJhY3tTX3BeMn17bl8yfX19ID0KICBcZnJhY3tcYmFye1l9XzEgLSBcYmFye1l9XzJ9e1NfcFxzcXJ0e1xmcmFjezF9e25fMX0rXGZyYWN7MX17bl8yfX19LiQkCgpUaGUgc3RhdGlzdGljIFQgZm9sbG93cyBhIHQtZGlzdHJpYnV0aW9uIHdpdGggJG5fMStuXzItMiQgdW5kZXIgJEhfMCQgaXMgYWxsIGRhdGEgYXJlIGluZGVwZW5kZW50LCBub3JtYWxseSBkaXN0cmlidXRlZCBhbmQgaGF2ZSBlcXVhbCB2YXJpYW5jZXMuCgotLS0KCiMjIEFybXBpdCBleGFtcGxlCgpXZSBjYW4gaW1wbGVtZW50IHRoZSB0ZXN0IGluIFI6CgpgYGB7cn0KdC50ZXN0KHJlbCB+IHRydCwgZGF0YSA9IGFwLCB2YXIuZXF1YWwgPSBUUlVFKQpgYGAKCk9uIHRoZSAkNVwlJCBzaWduaWZpY2FuY2UgbGV2ZWwgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgaW4gZmF2b3Igb2YgdGhlIGFsdGVybmF0aXZlIGh5cG90aGVzaXMgYW5kIGNvbmNsdWRlIHRoYXQgdGhlIHJlbGF0aXZlIGFidW5kYW5jZSBvZiAgKlN0YXBoeWxvY29jY3VzIHNwcC4qIGlzIG9uIGF2ZXJhZ2UgZXh0cmVtZSBzaWduaWZpY2FudCBsYXJnZXIgaXMgaW4gdHJhbnNwbGFudGF0aW9uIGdyb3VwIHRoYW4gaW4gdGhlIHBsYWNlYm8gZ3JvdXAuCgpJZiB0aGVyZSBpcyBubyBlZmZlY3Qgb2YgdGhlIHRyYW5zcGxhbnQgd2UgaGF2ZSBhIHByb2JhYmlsaXR5IG9mIGxlc3MgdGhlbiA5IGluICQxMDAwMDAkIHRvIG9ic2VydmUgYSB0ZXN0IHN0YXRpc3RpYyBpbiBhIHJhbmRvbSBzYW1wbGUgdGhhdCBpcyBhdCBsZWFzdCBhcyBleHRyZW1lIGFzIHdoYXQgd2Ugb2JzZXJ2ZWQgaW4gdGhlIGFybXBpdCBleHBlcmltZW50LgoKVGhpcyBpcyBleHRyZW1lbHkgcmFyZSB1bmRlciAkSF8wJC4KCklmICRIXzEkIGlzIGNvcnJlY3QsIHdlIGV4cGVjdCB0aGF0IHRoZSB0ZXN0IHN0YXRpc3RpYyBpcyBsYXJnZXIgaW4gYWJzb2x1dGUgdmFsdWUgYW5kIGV4cGVjdCBzbWFsbCBwLXZhbHVlcy4gSGVuY2Ugd2UgZGVjaWRlIHRoYXQgdGhlcmUgaXMgYSBsb3Qgb2YgZXZpZGVuY2UgYWdhaW5zdCAkSF8wJCBpbiBmYXZvdXIgb2YgJEhfMSQuCgoqKkdvb2Qgc3RhdGlzdGljYWwgcHJhY3RpY2UqKiBpcyB0byByZXBvcnQgdGhlICRwJC12YWx1ZSwgYnV0IGFsc28gIGVmZmVjdCBzaXplIGFsb25nIHdpdGggaXRzIGNvbmZpZGVuY2UgaW50ZXJ2YWwuIFNvIHRoYXQgd2UgY2FuIGp1ZGdlIHRoZSBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UgYW5kIHRoZSBiaW9sb2dpY2FsIHJlbGV2YW5jZS4KCiMjIyBDb25jbHVzaW9uCgpPbiBhdmVyYWdlIHRoZSByZWxhdGl2ZSBhYnVuZGFuY2Ugb2YgKlN0YXBoeWxvY29jY3VzIHNwcC4qIGluIHRoZSBtaWNyb2Jpb21lIG9mIHRoZSBhcm1waXQgaW4gdGhlIHRyYW5zcGxhbnQgZ3JvdXAgaXMgZXh0cmVtZWx5IHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGZyb20gdGhhdCBpbiB0aGUgcGxhY2VibyBncm91cCAoJHA8PDAuMDAxJCkuIFRoZSByZWxhdGl2ZSBhYnVuZGFuY2Ugb2YgKlN0YXBoeWxvY29jY3VzIHNwcC4qIGlzIG9uIGF2ZXJhZ2UgYHIgcm91bmQoZGlmZih0LnRlc3QocmVsfnRydCxkYXRhPWFwLHZhci5lcXVhbD1UUlVFKSRlc3RpbWF0ZSksMSlgJSBsYXJnZXIgaW4gdGhlIHRyYW5zcGxhbnQgZ3JvdXAgdGhhbiBpbiB0aGUgcGxhY2VibyBncm91cCAoOTVcJSBDSSBbYHIgcGFzdGUoZm9ybWF0KC10LnRlc3QocmVsfnRydCxkYXRhPWFwLHZhci5lcXVhbD1UUlVFKSRjb25mLmludFsyOjFdLGRpZ2l0cz0yLG5zbWFsbD0xKSxjb2xsYXBzZT0iLCIpYF0lKS4KCi0tLQoKIyBBc3N1bXB0aW9ucwoKVmFsaWRpdHkgb2YgdC10ZXN0IGRlcGVuZHMgb24gZGlzdHJpYnV0aW9uYWwgYXNzdW1wdGlvbnM6CgotIEluZGVwZW5kZW5jZSAoZGVzaWduKQotIE9uZS1zYW1wbGUgdC10ZXN0OiBub3JtYWxpdHkgb2YgdGhlIG9ic2VydmF0aW9ucwotIFBhaXJlZCB0LXRlc3Q6IG5vcm1hbGl0eSBvZiB0aGUgZGlmZmVyZW5jZQotIFR3by1zYW1wbGUgdC10ZXN0OiBOb3JtYWxpdHkgb2YgdGhlIG9ic2VydmF0aW9ucyBpbiBib3RoIGdyb3VwcywgYW5kIGVxdWFsIHZhcmlhbmNlcy4KCklmIHRoZSBhc3N1bXB0aW9ucyBhcmUgbm90IG1ldCwgdGhlIG51bGwgZGlzdHJpYnV0aW9uIGRvZXMgbm90IGZvbGxvdyBhIHQtZGlzdHJpYnV0aW9uLCBhbmQsIHRoZSBwLXZhbHVlcyBhbmQgY3JpdGljYWwgdmFsdWVzIGFyZSBpbmNvcnJlY3QuCgpUbyBjb25zdHJ1Y3QgY29uZmlkZW5jZSBpbnRlcnZhbHMgd2UgYWxzbyByZWx5IG9uIHRoZXNlIGFzc3VtcHRpb25zLgoKLSBXZSB1c2VkIHF1YW50aWxlcyBmcm9tIHRoZSB0LWRpc3RyaWJ1dGlvbiB0byBjYWxjdWxhdGUgdGhlIGxvd2VyIGFuZCB1cHBlciBsaW1pdC4KCi0gVGhlIGNvcnJlY3QgY292ZXJhZ2Ugb2YgdGhlIENJIGRlcGVuZHMgb24gdGhlc2UgYXNzdW1wdGlvbnMKCi0tLQoKIyMgRXZhbHVhdGUgbm9ybWFsaXR5CgogLSBCb3hwbG90cyBhbmQgaGlzdG9ncmFtczogc2hhcGUgb2YgZGlzdHJpYnV0aW9uIGFuZCBvdXRsaWVycwoKIC0gUVEtcGxvdHMKClRoZXJlIGFsc28gZXhpc3QgaHlwb3RoZXNpcyB0ZXN0cyAoZ29vZG5lc3Mtb2YtZml0IHRlc3QpLCBidXQgdGhlaXIgbnVsbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlIGRhdGEgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIHNvIHdlIG1ha2UgYSB3ZWFrIGNvbmNsdXNpb24hCgogIC0gS29sbW9nb3Jvdi1TbWlybm92LCBTaGFwaXJvLVdpbGsgZW4gQW5kZXJzb24tRGFybGluZy4KICAtIEluIHNtYWxsIHNhbXBsZXMgdGhleSBoYXZlIGEgbG93IHBvd2VyCiAgLSBJbiBsYXJnZSBzYW1wbGVzIHRoZXkgb2Z0ZW4gZmxhZyB2ZXJ5IHNtYWxsIGRldmlhdGlvbnMgYXMgc2lnbmlmaWNhbnQKClJlY29tbWVuZGF0aW9uCgotIFN0YXJ0IHdpdGggZ3JhcGhpY2FsIGV4cGxvcmF0aW9uIG9mIHRoZSBkYXRhIGFuZCBrZWVwIHRoZSBzYW1wbGUgc2l6ZSBpbiBtaW5kIHRvIGF2b2lkIG92ZXJpbnRlcnByZXRhdGlvbiBvZiB0aGUgcGxvdHMuCgotIElmIHlvdSBoYXZlIGRvdWJ0cywgdXNlIHNpbXVsYXRpb24gd2hlcmUgeW91IHNpbXVsYXRlIGRhdGEgd2l0aCB0aGUgc2FtZSBzYW1wbGUgc2l6ZSBmcm9tIGEgTm9ybWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBzYW1lIG1lYW4gYW5kIHZhcmlhbmNlIGFzIHRoZSBvbmUgdGhhdCB5b3Ugb2JzZXJ2ZWQgaW4gdGhlIHNhbXBsZQoKLSBJZiB5b3Ugb2JzZXJ2ZWQgZGV2aWF0aW9ucyBvZiBub3JtYWxpdHkgY2hlY2sgaW4gdGhlIGxpdGVyYXR1cmUgaG93IHNlbnNpdGl2ZSB5b3VyIG1ldGhvZCBpcyBzdWNoIGRldmlhdGlvbnMgb2Ygbm9ybWFsaXR5LiAoZS5nLiBULXRlc3RzIGZvciBpbnN0YW5jZSBhcmUgcmF0aGVyIGluc2Vuc2l0aXZlIHRvIGRldmlhdGlvbnMgYXMgbG9uZyBhcyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBkYXRhIGlzIHN5bW1ldHJpYy4pCgotIEluIGxhcmdlIHNhbXBsZXMgeW91IGNhbiByZXNvcnQgdG8gdGhlIGNlbnRyYWwgbGltaXQgdGhlb3JlbS4KCi0gWW91IG1pZ2h0IHJlc29ydCB0byB0cmFuc2Zvcm1hdGlvbnMgb2YgdGhlIHJlc3BvbnNlLgoKLS0tCgojIyBIb21vc2NlZGFzdGljaXR5CgotIEJveHBsb3RzOiBUaGUgYm94IHNpemUgaXMgdGhlIGludGVyIHF1YXJ0aWxlIHJhbmdlIChJUVIpIGEgcm9idXN0IGVzdGltYXRvciBvZiB0aGUgdmFyaWFuY2UuCgotIElmIHRoZSBkaWZmZXJlbmNlcyBhcmUgbm90IGxhcmdlICRccmlnaHRhcnJvdyQgaG9tb3NjZWRhc3RpY2l0ZWl0CgotIEFnYWluIHlvdSBjYW4gdXNlIHNpbXVsYXRpb24gdG8gZ2V0IGluc2lnaHQgaW4gdGhlIGRpZmZlcmVuY2VzIHlvdSBjYW4gZXhwZWN0LgoKLSBGb3JtYWwgRi10ZXN0IGNhbiBiZSB1c2VkIHRvIGNvbXBhcmUgdGhlIHZhcmlhbmNlcywgYnV0IGFnYWluIHVuZGVyIHRoZSBudWxsIHlvdSBhc3N1bWUgZXF1YWwgdmFyaWFuY2VzLCBzbyB0aGUgc2FtZSBjcml0aWNpc20gYXMgZm9yIG5vcm1hbGl0eSB0ZXN0cyBhcHBsaWVzIGhlcmUuCgotLS0KCiMjIFdlbGNoIG1vZGlmaWVkIHQtdGVzdAoKSWYgdGhlIGRhdGEgYXJlIGhldGVyb3NjZWRhc3RpYywgeW91IGNhbiB1c2UgYSBXZWxjaCB0d28tc2FtcGxlIFQtdGVzdCwgd2hpY2ggbm8gbG9uZ2VyIHVzZXMgdGhlIHBvb2xlZCB2YXJpYW5jZSBlc3RpbWF0b3IuCgokJFQgPSAgXGZyYWN7XGJhcntZfV8xIC0gXGJhcntZfV8yfXtcc3FydHtcZnJhY3tTXjJfMX17bl8xfStcZnJhY3tTXjJfMn17bl8yfX19JCQKd2l0aCAkU14yXzEkIGVuICRTXjJfMiQgdGhlIHNhbXBsZSB2YXJpYW5jZXMgaW4gYm90aCBncm91cHMuCgpUaGlzIHN0YXRpc3RpYyBmb2xsb3dzIGFwcHJveGltYXRlbHkgYSB0LWRpc3RyaWJ1dGlvbiB3aXRoIGEgbnVtYmVyIG9mIGRlZ3JlZXMgb2YgZnJlZWRvbSBiZXR3ZWVuICAkXHRleHR7bWlufShuXzEtMSxuXzItMSkkIGFuZCAkbl8xK25fMi0yJC4KCkluIFIgdGhlIGRlZ3JlZXMgb2YgZnJlZWRvbSBhcmUgZXN0aW1hdGVkIHVzaW5nIHRoZSBXZWxjaC0gU2F0dGVydGh3YWl0ZSBhcHByb3hpbWF0aW9uLiBZb3UgY2FuIGRvIHRoaXMgYnkgdXNpbmcgdGhlIGB0LnRlc3RgIGZ1bmN0aW9uIHdpdGggYXJndW1lbnQgYHZhci5lcXVhbD1GQUxTRWAuCgpgYGB7cn0KdC50ZXN0KHJlbCB+IHRydCwgZGF0YSA9IGFwLCB2YXIuZXF1YWwgPSBGQUxTRSkKYGBgCgpOb3RlIHRoYXQgeW91IGNhbiBzZWUgdGhhdCB0aGUgV2VsY2ggVC10ZXN0IGlzIGFkb3B0ZWQgaW4gdGhlIHRpdGxlLiBUaGUgYWRqdXN0ZWQgZGVncmVlcyBvZiBmcmVlZG9tIGFyZSAkZGYgPSAxNy44NzYkICRccG0kIHRvIHRoYXQgb2YgdGhlIGNvbnZlbnRpb25hbCBULXRlc3QsIGJlY2F1c2UgdGhlIHZhcmlhbmNlcyBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KCi0tLQoKIyBIb3cgdG8gcmVwb3J0PwoKLSBJbiB0aGUgc2NpZW50aWZpYyBsaXRlcmF0dXJlIHRoZXJlIGlzIHRvbyBtdWNoIGF0dGVudGlvbiBmb3IgcC12YWx1ZXMKCi0gSXQgaXMgbXVjaCBtb3JlIGluZm9ybWF0aXZlIHRvIGNvbWJpbmUgYW4gZXN0aW1hdGUgd2l0aCBpdHMgY29uZmlkZW5jZSBpbnRlcnZhbC4KCioqUnVsZSBvZiB0aHVtYioqOgoKUmVwb3J0IGFuIGVzdGltYXRlIHRvZ2V0aGVyIHdpdGggaXRzICBjb25maWRlbmNlIGludGVydmFsIChhbmQgaXRzIHAtdmFsdWUpCgoxLiBUaGUgcmVzdWx0IG9mIHRoZSB0ZXN0IGNhbiBiZSBkZXJpdmVkIG9mIHRoZSBjb25maWRlbmNlIGludGVydmFsCjIuIEl0IGFsbG93cyB0aGUgcmVhZGVyIHRvIGp1ZGdlICoqc2NpZW50aWZpYyByZWxldmFuY2UqKi4KCmBgYHtyfQp0LnRlc3QocmVsIH4gdHJ0LCBkYXRhID0gYXApCmBgYAoKVGhlIHJlc3VsdCBvZiBhbiAkXGFscGhhJC1sZXZlbCB0LXRlc3QgaXMgZXF1aXZhbGVudCB3aXRoIGNvbXBhcmluZyB0aGUgZWZmZWN0IHNpemUgdW5kZXIgJEhfMCQgd2l0aCB0aGUgJDEtXGFscGhhJCBDSS4KCkFuIGVmZmVjdCBjYW4gYmUgZXh0cmVtZWx5IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQsIGJ1dCBzY2llbnRpZmljYWxseSBpcnJlbGV2YW50LiBXaXRoIGEgQ0kgeW91IHdpbGwgc3BvdCB0aGlzLgo=
-
LS0tCnRpdGxlOiAiOS4gTm9ucGFyYW1ldHJpYyBTdGF0aXN0aWNzIC0gV2lsY294b24tTWFubi1XaXRobmV5IHRlc3QiCmF1dGhvcjogIkxpZXZlbiBDbGVtZW50IgpkYXRlOiAic3RhdE9taWNzLCBHaGVudCBVbml2ZXJzaXR5IChodHRwczovL3N0YXRvbWljcy5naXRodWIuaW8pIgotLS0KCjxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMCI+PGltZyBhbHQ9IkNyZWF0aXZlIENvbW1vbnMgTGljZW5zZSIgc3R5bGU9ImJvcmRlci13aWR0aDowIiBzcmM9Imh0dHBzOi8vaS5jcmVhdGl2ZWNvbW1vbnMub3JnL2wvYnktbmMtc2EvNC4wLzg4eDMxLnBuZyIgLz48L2E+CgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgY2FjaGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBpbmNsdWRlID0gVFJVRSwgY29tbWVudCA9IE5BLCBlY2hvID0gVFJVRSwKICBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgY2FjaGUgPSBUUlVFCikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoUm1pc2MpCnNldC5zZWVkKDE0MCkKYGBgCgoKIyBJbnRyb2R1Y3Rpb24KCkluZmVyZW5jZSB3YXMgb25seSBjb3JyZWN0IGlmIGRpc3RyaWJ1dGlvbmFsIGFzc3VtcHRpb25zIHdlcmUgc2F0aXNmaWVkCgotIGUuZyBOb3JtYWwgZGlzdHJpYnV0aW9uCi0gZXF1YWwgdmFyaWFuY2UKCi0gIFRoZSAkcCQtdmFsdWU6ICRcdGV4dHtQfV8wXGxlZnRbIFx2ZXJ0IFRcdmVydCBcZ2VxIFx2ZXJ0IHQgXHZlcnQgXHJpZ2h0XSQuCgoJLSBDYWxjdWxhdGVkIHVzaW5nIHRoZSBudWxsIGRpc3RyaWJ1dGlvbiBvZiAkVCQgdGhhdCB3ZSBkZXJpdmVkIHVuZGVyIHRoZSBhc3N1bXB0aW9ucwoJLSBJbiBjb3JyZWN0IGlmIGFzc3VtcHRpb25zIGFyZSB2aW9sYXRlZAoKLSAgJDk1XCUkIENJIGFsc28gYnVpbGRzIHVwb24gdGhlc2UgYXNzdW1wdGlvbnMuIElmIHRoZXkgYXJlIGludmFsaWQgdGhlbiB0aGUgaW50ZXJ2YWxzIHdpbGwgbm90IGNvbnRhaW4gdGhlIHBvcHVsYXRpb24gcGFyYW1ldGVyIHdpdGggOTUlIHByb2JhYmlsaXR5LgoKLSBBc3ltcHRvdGljIHRoZW9yeSBpcyBtb3JlIGRpZmZpY3VsdCB0byBwbGFjZTogdGhlICR0JC10ZXN0IGlzIGFzeW1wdG90aWNhbGx5IG5vbi1wYXJhbWV0cmljIGJlY2F1c2UgZm9yIHZlcnkgbGFyZ2Ugc2FtcGxlcyB0aGUgZGlzdHJpYnV0aW9uYWwgYXNzdW1wdGlvbnMgb2Ygbm9ybWFsaXR5IGFyZSBubyBsb25nZXIgaW1wb3J0YW50LgoKLSBJZiBhc3N1bXB0aW9ucyBob2xkIHRoZSBwYXJhbWV0cmljIGFwcHJvYWNoCgoJLSBtb3JlIGVmZmljaWVudDogbGFyZ2VyIHBvd2VyIHdpdGggc2FtZSBzYW1wbGUgc2l6ZSArIHNtYWxsZXIgQ0kuCgktIG1vcmUgZmxleGlibGU6IGVhc2llciB0byBhbmFseXNlIGRhdGEgd2l0aCBjb21wbGV4IGRlc2lnbnMKCi0tLQoKIyMgQ2hvbGVzdGVyb2wgZXhhbXBsZQoKLSBDaG9sZXN0ZXJvbCBjb25jZW50cmF0aW9uIGluIGJsb29kIG1lYXN1cmVkIGZvcgogIC0gNSBwYXRpZW50cyAoZ3JvdXA9MSkgdHdvIGRheXMgdXBvbiBhIHN0cm9rZQogIC0gNSBoZWFsdGh5IHN1YmplY3QgKGdyb2VwPTIpLgoKLSBJcyBjaG9sZXN0ZXJvbCBjb25jZW50cmF0aW9uIG9mIGhhcnQgcGF0aWVudHMgYW5kIGhlYWx0aHkgc3ViamVjdHMgb24gYXZlcmFnZSBkaWZmZXJlbnQ/CgpgYGB7cn0KY2hvbCA8LSByZWFkX3RzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0dUUEIvUFNMUzIwL21hc3Rlci9kYXRhL2Nob2wudHh0IikKY2hvbCRncm91cCA8LSBhcy5mYWN0b3IoY2hvbCRncm91cCkKbkdyb3VwcyA8LSB0YWJsZShjaG9sJGdyb3VwKQpuIDwtIHN1bShuR3JvdXBzKQpjaG9sCmBgYAoKLS0tCgoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy5hbGlnbj0nY2VudGVyJ30KY2hvbCAlPiUgZ2dwbG90KGFlcyh4ID0gZ3JvdXAsIHkgPSBjaG9sZXN0KSkgKwogIGdlb21fYm94cGxvdChvdXRsaWVyLnNoYXBlID0gTkEpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gImppdHRlciIpCgpjaG9sICU+JSBnZ3Bsb3QoYWVzKHNhbXBsZSA9IGNob2xlc3QpKSArCiAgZ2VvbV9xcSgpICsKICBnZW9tX3FxX2xpbmUoKSArCiAgZmFjZXRfd3JhcCh+Z3JvdXApCmBgYAoKLSBQb3NzaWJseSBvdXRsaWVycwotIERpZmZpY3VsdCB0byBhc3Nlc3MgZGlzdHJpYnV0aW9uYWwgYXNzdW1wdGlvbnMgd2hlbiBvbmx5IDUgb2JzZXJ2YXRpb25zIGFyZSBhdmFpbGFibGUuCgoKIyBSYW5rIFRlc3RzCgotIEltcG9ydGFudCBncm91cCBvZiBub24tcGFyYW1ldHJpYyB0ZXN0CiAgLSBOb24tcGFyYW1ldHJpYywKICAtIEV4YWN0ICRwJC12YWx1ZXMgdXNpbmcgYSBwZXJtdXRhdGlvbiBudWxsIGRpc3RyaWJ1dGlvbi4KICAtIE5vIG5lZWQgZm9yIHNlcGFyYXRlIHBlcm11dGF0aW9uIGRpc3RyaWJ1dGlvbiBmb3IgZWFjaCBuZXcgZGF0YXNldC4KICAtIFBlcm11dGF0aW9uIG51bGwgZGlzdHJpYnV0aW9uIG9mIHJhbmsgdGVzdHMgb25seSBkZXBlbmRzIG9uIHNhbXBsZSBzaXplCiAgLSBSb2J1c3QgdG8gb3V0bGllcnMKCi0tLQoKIyBSYW5rcwoKUmFuayB0ZXN0cyBzdGFydCBmcm9tIHJhbmstdHJhbnNmb3JtZWQgZGF0YS4KCi0gTGV0ICRZXzEsIFxsZG90cywgWV9uJC4KLSBJbiB0aGUgYWJzZW5jZSBvZiAqdGllcyoKICAkJFJfaT1SKFlfaSkgPSBcI1x7WV9qOiBZX2pcbGVxIFlfaTsgaj0xLFxsZG90cywgblx9JCQKLSBTbWFsbGVzdCBvYnNlcnZhdGlvbiBoYXMgcmFuayAxLCBzZWNvbmQgc21hbGxlc3QgcmFuayAyLCAuLi4gLCBsYXJnZXN0IG9ic2VydmF0aW9uIGdldHMgcmFuayAkbiQKCmBgYHtyfQpjaG9sJGNob2xlc3QKcmFuayhjaG9sJGNob2xlc3QpCmBgYAoKLS0tCgojIyBUaWVzCgpTb21ldGltZXMgKnRpZXMqIG9jY3VyOiB0d28gb2JzZXJ2YXRpb25zIHdpdGggaWRlbnRpY2FsIHZhbHVlcwoKYGBge3J9CndpdGhUaWVzIDwtIGMoNDAzLCA1MDcsIDUwNywgNjEwLCA2NTEsIDY1MSwgNjUxLCA4MzAsIDkwMCkKcmFuayh3aXRoVGllcykKYGBgCgotIFRpZXM6IDUwNyBvY2N1cnMgdHdpY2UsIDY1MSBvY2N1cnMgMyB0aW1lcwotIElmIHRpZXMgb2NjdXIgKm1pZHJhbmtzKiBhcmUgdXNlZC4KCi0gKiptaWRyYW5rKiogb2Ygb2JzZXJ2YXRpb24gJFlfaSQgYmVjb21lcwogIFxiZWdpbntlcW5hcnJheSp9CiAgIFJfaSAmPSYgXGZyYWN7IFwjXHtZX2o6IFlfalxsZXEgWV9pXH0gKyAoIFwjXHtZX2o6IFlfaiA8IFlfaVx9ICsxKX17Mn0uCiAgIFxlbmR7ZXFuYXJyYXkqfQoKLS0tCgojIyBSYW5rcyBvZiBwb29sZWQgc2FtcGxlCgotIExldCAkWV97aWp9JCwgJGk9MSxcbGRvdHMsIG5faiQgYmUgb2JzZXJ2YXRpb25zIGZyb20gdHdvIHRyZWF0bWVudCBncm91cHMgJGo9MSwyJC4KLSBUaGV5IGNhbiBhbHNvIGJlIHJlcHJlc2VudGVkIGJ5ICRaXzEsXGxkb3RzLCBaX24kICgkbj1uXzErbl8yJCksIHRoZSBvdXRjb21lcyBvZiB0aGUgcG9vbGVkIHNhbXBsZQoKYGBge3J9CnQoY2hvbCkKeiA8LSBjaG9sJGNob2xlc3QKegpyYW5rKHopCmBgYAotLS0KCiMgV2lsY294b24tTWFubi1XaGl0bmV5IFRlc3QKCiBTaW11bHRhbmVvdXNseSBkZXZlbG9wZWQgYnkgV2lsY294b24sIGFuZCwgIE1hbm4gYW5kIFdoaXRuZXk6ICAqKldpbGNveG9uLU1hbm4tV2hpdG5leSoqLCAqKldpbGNveG9uIHJhbmsgc3VtIHRlc3QqKiAgb3IgKipNYW5uLVdoaXRuZXkgVSB0ZXN0KioKCiMjIEh5cG90aGVzZXMKClVuZGVyICRIXzAkIHRoZSBkaXN0cmlidXRpb25zIG9mIHRoZSB0d28gZ3JvdXBzIGFyZSBlcXVhbAokJEhfMDogZl8xPWZfMiQkCgoKVW5kZXIgdGhlIGFsdGVybmF0aXZlICRIXzEkIHRoZSBkaXN0cmlidXRpb25zIGRpZmZlciBpbiBsb2NhdGlvbiAkJEhfMTogXG11XzFcbmVxIFxtdV8yJCQKCiRIXzEkIGFzc3VtZXMgKipsb2NhdGlvbi1zaGlmdCoqLCB3ZSB3aWxsIHJlbGF4IHRoaXMgYXNzdW1wdGlvbiBsYXRlciBvbi4KCiMjIFRlc3Qgc3RhdGlzdGljCgpDbGFzc2ljIFQtdGVzdDogZGlmZmVyZW5jZSBpbiBzYW1wbGUgbWVhbnMgJFxiYXJ7WX1fMS1cYmFye1l9XzIkLgoKSGVyZTogRGlmZmVyZW5jZSBpbiBzYW1wbGUgbWVhbnMgYmFzZWQgb24gcmFuayB0cmFuc2Zvcm1lZCBkYXRhCgpSYW5rcyBiYXNlZCBvbiB0aGUgcG9vbGVkIHNhbXBsZSAodXBvbiBqb2luaW5nIHRoZSBvYnNlcnZhdGlvbnMgZnJvbSB0aGUgdHdvIGdyb3Vwcyk6ICRSX3tpan09UihZX3tpan0pJCBpcyBkZSByYW5rIG9mIG9ic2VydmF0aW9uICRZX3tpan0kIGluIHRoZSBwb29sZWQgc2FtcGxlLgoKXFsKICBUID0gXGZyYWN7MX17bl8xfVxzdW1fe2k9MX1ee25fMX0gUihZX3tpMX0pIC0gXGZyYWN7MX17bl8yfVxzdW1fe2k9MX1ee25fMn0gUihZX3tpMn0pIC4KXF0KCi0gVW5kZXIgJEhfMCQgd2UgZXhwZWN0IHRoZSBhdmVyYWdlIHJhbmsgb2YgdGhlIGZpcnN0IGdyb3VwIHRvIGJlIGNsb3NlIHRvIHRoYXQgb2YgdGhlIHNlY29uZCBncm91cCBzbyAkVCQgaXMgY2xvc2UgdG8gemVyby4KCi0gVW5kZXIgJEhfMSQgd2UgZXhwZWN0IHRoZSBtZWFuIHJhbmtzIHRvIGRpZmZlciBzbyB0aGF0ICRUJCBkZXZpYXRlcyBmcm9tIHplcm8uCgotIEl0IGlzIHN1ZmZpY2llbnQgdG8gb25seSBjYWxjdWxhdGUKICAkJFNfMT1cc3VtX3tpPTF9XntuXzF9IFIoWV97aTF9KSQkLgoKLSAkU18xJCBpcyB0aGUgc3VtIG9mIHRoZSByYW5rcyBvZiB0aGUgZmlyc3QgZ3JvdXA6ICpyYW5rIHN1bSB0ZXN0Ki4KCi0gVGhpcyBob2xkcyBiZWNhdXNlClxbCiAgU18xK1NfMiA9IFx0ZXh0e3N1bSBvZiBhbGwgcmFua3N9ID0gMSsyK1xjZG90cyArIG49XGZyYWN7MX17Mn1uKG4rMSkuClxdCgoKLSAkU18xJCAob3IgJFNfMiQpIGlzIGEgZ29vZCB0ZXN0IHN0YXRpc3RpYwoKLSBVc2UgcGVybXV0YXRpb25zIHRvIGRldGVybWluZSB0aGUgZXhhY3QgcGVybXV0YXRpb24gZGlzdHJpYnV0aW9uLiAoUGVybXV0ZSB0aGUgcmFua3MgYmV0d2VlbiB0aGUgZ3JvdXBzKQoKLSBGb3IgYSBnaXZlbiAkbiQgYW5kIG5vICp0aWVzKiB0aGUgcmFuayB0cmFuc2Zvcm1lZCBkYXRhIGlzIGFsd2F5cwogICQkMSwgMiwgXGxkb3RzLCBuJCQKLSBGb3IgZ2l2ZW4gJG5fMSQgZW4gJG5fMiQgdGhlIHBlcm11dGF0aW9uIGRpc3RyaWJ1dGlvbiBpcyBhbHdheXMgdGhlIHNhbWUhCi0gV2l0aCBjdXJyZW50IGNvbXB1dGluZyBwb3dlciB0aGlzIGlzIG5vdCBzbyBpbXBvcnRhbnQgYW55IG1vcmUuCgotLS0KCiMjIFN0YW5kYXJkaXplZCBzdGF0aXN0aWMKCk9mdGVuIHRoZSBzdGFuZGFyZGl6ZWQgdGVzdCBzdGF0aXN0aWMgaXMgdXNlZApcWwogIFQgPSBcZnJhY3tTXzEtXHRleHR7RX1fezB9XGxlZnRbU18xXHJpZ2h0XX17XHNxcnR7XHRleHR7VmFyfV97MH1cbGVmdFtTXzFccmlnaHRdfX0sClxdCgotIHdpdGggJFx0ZXh0e0V9X3swfVxsZWZ0W1NfMVxyaWdodF0kIGFuZCAkXHRleHR7VmFyfV97MH1cbGVmdFtTXzFccmlnaHRdJCB0aGUgZXhwZWN0IG1lYW4gYW5kIHZhcmlhbmNlIG9mIFMxIHVuZGVyICRIXzAkLgoKLSBVbmRlciAkSF8wJAogXFsKICAgXHRleHR7RX1fezB9XGxlZnRbU18xXHJpZ2h0XT0gXGZyYWN7MX17Mn1uXzEobisxKSBcO1w7XDtcO1x0ZXh0eyBlbiB9XDtcO1w7XDsgXHRleHR7VmFyfV97MH1cbGVmdFtTXzFccmlnaHRdPVxmcmFjezF9ezEyfW5fMW5fMihuKzEpLgogXF0KCi0gVW5kZXIgJEhfMCQgYW5kIHdoZW4gJFxtaW4obl8xLG5fMilccmlnaHRhcnJvdyBcaW5mdHkkCiBcWwogICAgVCA9IFxmcmFje1NfMS1cdGV4dHtFfV97MH1cbGVmdFtTXzFccmlnaHRdfXtcc3FydHtcdGV4dHtWYXJ9X3swfVxsZWZ0W1NfMVxyaWdodF19fSBccmlnaHRhcnJvdyBOKDAsMSkuCiBcXQoKQXN5bXB0b3RpY2FsbHkgdGhlIHN0YW5kYXJkaXNlZCBzdGF0aXN0aWMgZm9sbG93cyBhIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24hCgotLS0KCiMjIENob2xlc3Rlcm9sIGV4YW1wbGUKCldlIGlsbHVzdHJhdGUgdGhlIHJlc3VsdCBmb3IgdGhlIGNob2xlc3Rlcm9sIGV4YW1wbGUgdXNpbmcgdGhlIFIgZnVuY3Rpb24gYHdpbGNveC50ZXN0YC4KYGBge3J9CndpbGNveC50ZXN0KGNob2xlc3QgfiBncm91cCwgZGF0YSA9IGNob2wpCmBgYAoKLSBXZSByZWplY3QgJEhfMCQgKCRwPSQgYHIgZm9ybWF0KHdpbGNveC50ZXN0KGNob2xlc3R+Z3JvdXAsZGF0YT1jaG9sKSRwLnZhbHVlLGRpZ2l0cz0yKWAgJDwwLjA1JCkKCi0gVGhlIG91dHB1dCBzaG93cyAkVz0kIGByIHdpbGNveC50ZXN0KGNob2xlc3R+Z3JvdXAsZGF0YT1jaG9sKSRzdGF0aXN0aWNgPwoKLSBMZXRzIGNhbGN1bGF0ZQpgYGB7cn0KUzEgPC0gc3VtKHJhbmsoY2hvbCRjaG9sZXN0KVtjaG9sJGdyb3VwID09IDFdKQpTMQpTMiA8LSBzdW0ocmFuayhjaG9sJGNob2xlc3QpW2Nob2wkZ3JvdXAgPT0gMl0pClMyCmBgYAoKLSBXaGVyZSBkb2VzICRXPSQgYHIgd2lsY294LnRlc3QoY2hvbGVzdH5ncm91cCxkYXRhPWNob2wpJHN0YXRpc3RpY2AgY29tZXMgZnJvbT8KCi0tLQoKIyMgTWFubiBhbmQgV2hpdG5leSB0ZXN0CgpNYW5uIGFuZCBXaGl0bmV5IHRlc3QgaW4gYWJzZW5jZSBvZiB0aWVzOgpcWwogVV8xID0gXHN1bV97aT0xfV57bl8xfVxzdW1fe2s9MX1ee25fMn0gXHRleHR7SX1cbGVmdFx7WV97aTF9XGdlcSBZX3trMn1ccmlnaHRcfS4KXF0KCi0gd2l0aCAkXHRleHR7SX1cbGVmdFx7LlxyaWdodFx9JCBhbiBpbmRpY2F0b3IgdGhhdCBlcXVhbHMgMSAgaWYgdGhlIGV4cHJlc3Npb24gaXMgdHJ1ZSBhbmQgaXMgemVybyBvdGhlcndpc2UuCgotIFUgY291bnRzIGhvdyBtYW55IHRpbWVzIGFuIG9ic2VydmF0aW9uIG9mIHRoZSBmaXJzdCBncm91cCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8gYW4gb2JzZXJ2YXRpb24gZnJvbSB0aGUgc2Vjb25kIGdyb3VwLgoKYGBge3J9CnkxIDwtIHN1YnNldChjaG9sLCBncm91cCA9PSAxKSRjaG9sZXN0CnkyIDwtIHN1YnNldChjaG9sLCBncm91cCA9PSAyKSRjaG9sZXN0CnUxSGxwIDwtIHNhcHBseSh5MSwgZnVuY3Rpb24oeTFpLCB5MikgewogIHkxaSA+PSB5Mgp9LCB5MiA9IHkyKQpjb2xuYW1lcyh1MUhscCkgPC0geTEKcm93bmFtZXModTFIbHApIDwtIHkyCmBgYAoKYGBge3J9CnUxSGxwClUxIDwtIHN1bSh1MUhscCkKVTEKYGBgCgpJdCBjYW4gYmUgc2hvd24gdGhhdCAkVV8xID0gU18xIC0gXGZyYWN7MX17Mn1uXzEobl8xKzEpLiQKCmBgYHtyfQpTMSAtIG5Hcm91cHNbMV0gKiAobkdyb3Vwc1sxXSArIDEpIC8gMgpgYGAKCjEuICRVXzEkIGVuICRTXzEkIGNvbnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24KMi4gJFVfMSQgaXMgYWxzbyBhIHJhbmsgc3RhdGlzdGljLCBhbmQKMy4gRXhhY3QgdGVzdCBiYXNlZCBvbiAkVV8xJCBhbmQgJFNfMSQgYXJlIGVxdWl2YWxlbnQuCgotLS0KCiMjIFByb2JhYmlsaXN0aWMgaW5kZXgKCi0gJFVfMSQgaGFzIGEgYmV0dGVyIGludGVycHJldGF0aW9uIGZlYXR1cmUKLSBMZXQgJFlfaiQgYSByYW5kb20gb2JzZXJ2YXRpb24gZnJvbSBncm91cCAkaiQgKCRqPTEsMiQpLiBUaGVuClxiZWdpbntlcW5hcnJheSp9CiAgXGZyYWN7MX17bl8xbl8yfVx0ZXh0e0V9XGxlZnRbVV8xXHJpZ2h0XQogICAgICY9JiBcdGV4dHtQfVxsZWZ0W1lfMSBcZ2VxIFlfMlxyaWdodF0uClxlbmR7ZXFuYXJyYXkqfQoKU28gd2UgY2FuIGVzdGltYXRlIHRoZSBwcm9iYWJpbGl0eSBieSBjYWxjdWxhdGluZyB0aGUgbWVhbiBvZiBhbGwgaW5kaWNhdG9yIHZhcmlhYmxlIHZhbHVlcyAkXHRleHR7SX1cbGVmdFx7WV97aTF9XGdlcSBZX3trMn1ccmlnaHRcfSQuIE5vdGUsIHRoYXQgd2UgZGlkICRuXzEgXHRpbWVzIG5fMiQgY29tcGFyaXNvbnMKCmBgYHtyfQptZWFuKHUxSGxwKQpVMSAvIChuR3JvdXBzWzFdICogbkdyb3Vwc1syXSkKYGBgCgotIFByb2JhYmlsaXR5ICRcdGV4dHtQfVxsZWZ0W1lfMSBcZ2VxIFlfMlxyaWdodF0kIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAqcHJvYmFiaWxpc3RpYyBpbmRleCouCi0gSXQgaXMgdGhlIHByb2JhYmlsaXR5IHRoYXQgYSByYW5kb20gb2JzZXJ2YXRpb24gb2YgdGhlIGZpcnN0IGdyb3VwIGlzIGxhcmdlciBvciBlcXVhbCB0aGFuIGEgcmFuZG9tIG9ic2VydmF0aW9uIG9mIHRoZSBzZWNvbmQgZ3JvdXAKLSBJZiAkSF8wJCBob2xkcyAkXHRleHR7UH1cbGVmdFtZXzEgXGdlcSBZXzJccmlnaHRdPVxmcmFjezF9ezJ9JC4KCi0gUiBmdW5jdGlvbiBgd2lsY294LnRlc3RgIGRvZXMgbm90IHJldHVybiB0aGUgV2lsY294b24gcmFuayBzdW0gc3RhdGlzdGljLiBJdCByZXR1cm5zIHRoZSBNYW5uLVdoaXRuZXkgc3RhdGlzdGljICRVXzEkLgotIExldHMgcmV2aXNpdCB0aGUgcmVzdWx0CmBgYHtyfQp3VGVzdCA8LSB3aWxjb3gudGVzdChjaG9sZXN0IH4gZ3JvdXAsIGRhdGEgPSBjaG9sKQp3VGVzdApVMQpwcm9iSW5kIDwtIHdUZXN0JHN0YXRpc3RpYyAvIHByb2Qobkdyb3VwcykKcHJvYkluZApgYGAKCkJlY2F1c2UgJHA9JCBgciBmb3JtYXQod1Rlc3QkcC52YWx1ZSxkaWdpdHM9MylgICQ8MC4wNSQgd2UgY29uY2x1ZGUgYXQgdGhlICQ1XCUkIHNpZ25pZmljYW5jZSBsZXZlbCB0aGF0IHRoZSBtZWFuIGNob2xlc3Rlcm9sIGxldmVsIG9mIGhhcnQgcGF0aWVudHMgaXMgbGFyZ2VyIHRoZW4gdGhhdCBvZiBoZWFsdGh5IHN1YmplY3RzLgoKICAtIE5vdGUgdGhhdCB3ZSBoYXZlIGFzc3VtZWQgdGhhdCB0aGUgbG9jYXRpb24tc2hpZnQgbW9kZWwgaXMgdmFsaWQgaW4gdGhpcyBjb25jbHVzaW9uLgogIC0gV2UgYWxzbyBrbm93IHRoYXQgaGlnaGVyIGNob2xlc3Rlcm9sIGxldmVsIGFyZSBtb3JlIGxpa2VseSBmb3IgaGFydCBwYXRpZW50cyB0aGVuIGZvciBoZWFsdGh5IHN1YmplY3RzIGFuZCB0aGlzIHByb2JhYmlsaXR5IGlzCiRVMS8obl8xXHRpbWVzIG5fMik9JCBgciBwcm9iSW5kKjEwMGAlLgogIC0gV2Ugc2hvdWxkIGFzc2VzcyB0aGUgbG9jYXRpb24gc2hpZnQgYXNzdW1wdGlvbi4gQnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIHdpdGggb25seSA1IG9ic2VydmF0aW9ucy4KCldpdGhvdXQgdGhlIGxvY2F0aW9uLXNoaWZ0IGFzc3VtcHRpb24gdGhlIGNvbmNsdXNpb24gaW4gdGVybXMgb2YgdGhlIHByb2JhYmlsaXN0aWMgaW5kZXggcmVtYWlucyB2YWxpZCEKCiAgLSBTbyB3aGVuIHdlIGRvIG5vdCBhc3N1bWUgbG9jYXRpb24gc2hpZnQgd2UgdGVzdCBmb3IKClxbSF8wOiBGXzE9Rl8yIFx0ZXh0eyB2cyB9IEhfMTogUFtZXzEgXGdlcSBZXzJdIFxuZXEgMC41LlxdCgoKIyMgQ29uY2x1c2lvbgoKVGhlcmUgaXMgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGNob2xlc3Rlcm9sIGNvbmNlbnRyYXRpb24gb2YgaGFydCBwYXRpZW50cyB0d28gZGF5cyB1cG9uIGEgc3Ryb2tlIGFuZCB0aGF0IG9mIGhlYWx0aHkgc3ViamVjdCAoJHA9JCBgciBmb3JtYXQod1Rlc3QkcC52YWx1ZSxkaWdpdHM9MylgKS4gSXQgaXMgbW9yZSBsaWtlbHkgdG8gb2JzZXJ2ZSBoaWdoZXIgY2hvbGVzdGVyb2wgbGV2ZWxzIGZvciBoYXJ0IHBhdGllbnRzIHRoZW4gZm9yIGhlYWx0aHkgc3ViamVjdHMuIFRoZSBwb2ludCBlc3RpbWF0b3IgZm9yIHRoaXMgcHJvYmFiaWxpdHkgaXMgYHIgcHJvYkluZCoxMDBgJS4K
+
LS0tCnRpdGxlOiAiOS4gTm9ucGFyYW1ldHJpYyBTdGF0aXN0aWNzIC0gV2lsY294b24tTWFubi1XaXRobmV5IHRlc3QiCmF1dGhvcjogIkxpZXZlbiBDbGVtZW50IgpkYXRlOiAic3RhdE9taWNzLCBHaGVudCBVbml2ZXJzaXR5IChodHRwczovL3N0YXRvbWljcy5naXRodWIuaW8pIgotLS0KCjxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzQuMCI+PGltZyBhbHQ9IkNyZWF0aXZlIENvbW1vbnMgTGljZW5zZSIgc3R5bGU9ImJvcmRlci13aWR0aDowIiBzcmM9Imh0dHBzOi8vaS5jcmVhdGl2ZWNvbW1vbnMub3JnL2wvYnktbmMtc2EvNC4wLzg4eDMxLnBuZyIgLz48L2E+CgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgY2FjaGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBpbmNsdWRlID0gVFJVRSwgY29tbWVudCA9IE5BLCBlY2hvID0gVFJVRSwKICBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgY2FjaGUgPSBUUlVFCikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoUm1pc2MpCnNldC5zZWVkKDE0MCkKYGBgCgo8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1c3Sm91NFpZOFZnP3NpPVlWR1dFZU03UGFFdFFtY1oiIHRpdGxlPSJZb3VUdWJlIHZpZGVvIHBsYXllciIgZnJhbWVib3JkZXI9IjAiIGFsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlOyB3ZWItc2hhcmUiIHJlZmVycmVycG9saWN5PSJzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+CgojIEludHJvZHVjdGlvbgoKSW5mZXJlbmNlIHdhcyBvbmx5IGNvcnJlY3QgaWYgZGlzdHJpYnV0aW9uYWwgYXNzdW1wdGlvbnMgd2VyZSBzYXRpc2ZpZWQKCi0gZS5nIE5vcm1hbCBkaXN0cmlidXRpb24KLSBlcXVhbCB2YXJpYW5jZQoKLSAgVGhlICRwJC12YWx1ZTogJFx0ZXh0e1B9XzBcbGVmdFsgXHZlcnQgVFx2ZXJ0IFxnZXEgXHZlcnQgdCBcdmVydCBccmlnaHRdJC4KCgktIENhbGN1bGF0ZWQgdXNpbmcgdGhlIG51bGwgZGlzdHJpYnV0aW9uIG9mICRUJCB0aGF0IHdlIGRlcml2ZWQgdW5kZXIgdGhlIGFzc3VtcHRpb25zCgktIEluIGNvcnJlY3QgaWYgYXNzdW1wdGlvbnMgYXJlIHZpb2xhdGVkCgotICAkOTVcJSQgQ0kgYWxzbyBidWlsZHMgdXBvbiB0aGVzZSBhc3N1bXB0aW9ucy4gSWYgdGhleSBhcmUgaW52YWxpZCB0aGVuIHRoZSBpbnRlcnZhbHMgd2lsbCBub3QgY29udGFpbiB0aGUgcG9wdWxhdGlvbiBwYXJhbWV0ZXIgd2l0aCA5NSUgcHJvYmFiaWxpdHkuCgotIEFzeW1wdG90aWMgdGhlb3J5IGlzIG1vcmUgZGlmZmljdWx0IHRvIHBsYWNlOiB0aGUgJHQkLXRlc3QgaXMgYXN5bXB0b3RpY2FsbHkgbm9uLXBhcmFtZXRyaWMgYmVjYXVzZSBmb3IgdmVyeSBsYXJnZSBzYW1wbGVzIHRoZSBkaXN0cmlidXRpb25hbCBhc3N1bXB0aW9ucyBvZiBub3JtYWxpdHkgYXJlIG5vIGxvbmdlciBpbXBvcnRhbnQuCgotIElmIGFzc3VtcHRpb25zIGhvbGQgdGhlIHBhcmFtZXRyaWMgYXBwcm9hY2gKCgktIG1vcmUgZWZmaWNpZW50OiBsYXJnZXIgcG93ZXIgd2l0aCBzYW1lIHNhbXBsZSBzaXplICsgc21hbGxlciBDSS4KCS0gbW9yZSBmbGV4aWJsZTogZWFzaWVyIHRvIGFuYWx5c2UgZGF0YSB3aXRoIGNvbXBsZXggZGVzaWducwoKLS0tCgojIyBDaG9sZXN0ZXJvbCBleGFtcGxlCgotIENob2xlc3Rlcm9sIGNvbmNlbnRyYXRpb24gaW4gYmxvb2QgbWVhc3VyZWQgZm9yCiAgLSA1IHBhdGllbnRzIChncm91cD0xKSB0d28gZGF5cyB1cG9uIGEgc3Ryb2tlCiAgLSA1IGhlYWx0aHkgc3ViamVjdCAoZ3JvZXA9MikuCgotIElzIGNob2xlc3Rlcm9sIGNvbmNlbnRyYXRpb24gb2YgaGFydCBwYXRpZW50cyBhbmQgaGVhbHRoeSBzdWJqZWN0cyBvbiBhdmVyYWdlIGRpZmZlcmVudD8KCmBgYHtyfQpjaG9sIDwtIHJlYWRfdHN2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vR1RQQi9QU0xTMjAvbWFzdGVyL2RhdGEvY2hvbC50eHQiKQpjaG9sJGdyb3VwIDwtIGFzLmZhY3RvcihjaG9sJGdyb3VwKQpuR3JvdXBzIDwtIHRhYmxlKGNob2wkZ3JvdXApCm4gPC0gc3VtKG5Hcm91cHMpCmNob2wKYGBgCgotLS0KCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmFsaWduPSdjZW50ZXInfQpjaG9sICU+JSBnZ3Bsb3QoYWVzKHggPSBncm91cCwgeSA9IGNob2xlc3QpKSArCiAgZ2VvbV9ib3hwbG90KG91dGxpZXIuc2hhcGUgPSBOQSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSAiaml0dGVyIikKCmNob2wgJT4lIGdncGxvdChhZXMoc2FtcGxlID0gY2hvbGVzdCkpICsKICBnZW9tX3FxKCkgKwogIGdlb21fcXFfbGluZSgpICsKICBmYWNldF93cmFwKH5ncm91cCkKYGBgCgotIFBvc3NpYmx5IG91dGxpZXJzCi0gRGlmZmljdWx0IHRvIGFzc2VzcyBkaXN0cmlidXRpb25hbCBhc3N1bXB0aW9ucyB3aGVuIG9ubHkgNSBvYnNlcnZhdGlvbnMgYXJlIGF2YWlsYWJsZS4KCgojIFJhbmsgVGVzdHMKCi0gSW1wb3J0YW50IGdyb3VwIG9mIG5vbi1wYXJhbWV0cmljIHRlc3QKICAtIE5vbi1wYXJhbWV0cmljLAogIC0gRXhhY3QgJHAkLXZhbHVlcyB1c2luZyBhIHBlcm11dGF0aW9uIG51bGwgZGlzdHJpYnV0aW9uLgogIC0gTm8gbmVlZCBmb3Igc2VwYXJhdGUgcGVybXV0YXRpb24gZGlzdHJpYnV0aW9uIGZvciBlYWNoIG5ldyBkYXRhc2V0LgogIC0gUGVybXV0YXRpb24gbnVsbCBkaXN0cmlidXRpb24gb2YgcmFuayB0ZXN0cyBvbmx5IGRlcGVuZHMgb24gc2FtcGxlIHNpemUKICAtIFJvYnVzdCB0byBvdXRsaWVycwoKLS0tCgojIFJhbmtzCgpSYW5rIHRlc3RzIHN0YXJ0IGZyb20gcmFuay10cmFuc2Zvcm1lZCBkYXRhLgoKLSBMZXQgJFlfMSwgXGxkb3RzLCBZX24kLgotIEluIHRoZSBhYnNlbmNlIG9mICp0aWVzKgogICQkUl9pPVIoWV9pKSA9IFwjXHtZX2o6IFlfalxsZXEgWV9pOyBqPTEsXGxkb3RzLCBuXH0kJAotIFNtYWxsZXN0IG9ic2VydmF0aW9uIGhhcyByYW5rIDEsIHNlY29uZCBzbWFsbGVzdCByYW5rIDIsIC4uLiAsIGxhcmdlc3Qgb2JzZXJ2YXRpb24gZ2V0cyByYW5rICRuJAoKYGBge3J9CmNob2wkY2hvbGVzdApyYW5rKGNob2wkY2hvbGVzdCkKYGBgCgotLS0KCiMjIFRpZXMKClNvbWV0aW1lcyAqdGllcyogb2NjdXI6IHR3byBvYnNlcnZhdGlvbnMgd2l0aCBpZGVudGljYWwgdmFsdWVzCgpgYGB7cn0Kd2l0aFRpZXMgPC0gYyg0MDMsIDUwNywgNTA3LCA2MTAsIDY1MSwgNjUxLCA2NTEsIDgzMCwgOTAwKQpyYW5rKHdpdGhUaWVzKQpgYGAKCi0gVGllczogNTA3IG9jY3VycyB0d2ljZSwgNjUxIG9jY3VycyAzIHRpbWVzCi0gSWYgdGllcyBvY2N1ciAqbWlkcmFua3MqIGFyZSB1c2VkLgoKLSAqKm1pZHJhbmsqKiBvZiBvYnNlcnZhdGlvbiAkWV9pJCBiZWNvbWVzCiAgXGJlZ2lue2VxbmFycmF5Kn0KICAgUl9pICY9JiBcZnJhY3sgXCNce1lfajogWV9qXGxlcSBZX2lcfSArICggXCNce1lfajogWV9qIDwgWV9pXH0gKzEpfXsyfS4KICAgXGVuZHtlcW5hcnJheSp9CgotLS0KCiMjIFJhbmtzIG9mIHBvb2xlZCBzYW1wbGUKCi0gTGV0ICRZX3tpan0kLCAkaT0xLFxsZG90cywgbl9qJCBiZSBvYnNlcnZhdGlvbnMgZnJvbSB0d28gdHJlYXRtZW50IGdyb3VwcyAkaj0xLDIkLgotIFRoZXkgY2FuIGFsc28gYmUgcmVwcmVzZW50ZWQgYnkgJFpfMSxcbGRvdHMsIFpfbiQgKCRuPW5fMStuXzIkKSwgdGhlIG91dGNvbWVzIG9mIHRoZSBwb29sZWQgc2FtcGxlCgpgYGB7cn0KdChjaG9sKQp6IDwtIGNob2wkY2hvbGVzdAp6CnJhbmsoeikKYGBgCi0tLQoKIyBXaWxjb3hvbi1NYW5uLVdoaXRuZXkgVGVzdAoKIFNpbXVsdGFuZW91c2x5IGRldmVsb3BlZCBieSBXaWxjb3hvbiwgYW5kLCAgTWFubiBhbmQgV2hpdG5leTogICoqV2lsY294b24tTWFubi1XaGl0bmV5KiosICoqV2lsY294b24gcmFuayBzdW0gdGVzdCoqICBvciAqKk1hbm4tV2hpdG5leSBVIHRlc3QqKgoKIyMgSHlwb3RoZXNlcwoKVW5kZXIgJEhfMCQgdGhlIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIHR3byBncm91cHMgYXJlIGVxdWFsCiQkSF8wOiBmXzE9Zl8yJCQKCgpVbmRlciB0aGUgYWx0ZXJuYXRpdmUgJEhfMSQgdGhlIGRpc3RyaWJ1dGlvbnMgZGlmZmVyIGluIGxvY2F0aW9uICQkSF8xOiBcbXVfMVxuZXEgXG11XzIkJAoKJEhfMSQgYXNzdW1lcyAqKmxvY2F0aW9uLXNoaWZ0KiosIHdlIHdpbGwgcmVsYXggdGhpcyBhc3N1bXB0aW9uIGxhdGVyIG9uLgoKIyMgVGVzdCBzdGF0aXN0aWMKCkNsYXNzaWMgVC10ZXN0OiBkaWZmZXJlbmNlIGluIHNhbXBsZSBtZWFucyAkXGJhcntZfV8xLVxiYXJ7WX1fMiQuCgpIZXJlOiBEaWZmZXJlbmNlIGluIHNhbXBsZSBtZWFucyBiYXNlZCBvbiByYW5rIHRyYW5zZm9ybWVkIGRhdGEKClJhbmtzIGJhc2VkIG9uIHRoZSBwb29sZWQgc2FtcGxlICh1cG9uIGpvaW5pbmcgdGhlIG9ic2VydmF0aW9ucyBmcm9tIHRoZSB0d28gZ3JvdXBzKTogJFJfe2lqfT1SKFlfe2lqfSkkIGlzIGRlIHJhbmsgb2Ygb2JzZXJ2YXRpb24gJFlfe2lqfSQgaW4gdGhlIHBvb2xlZCBzYW1wbGUuCgpcWwogIFQgPSBcZnJhY3sxfXtuXzF9XHN1bV97aT0xfV57bl8xfSBSKFlfe2kxfSkgLSBcZnJhY3sxfXtuXzJ9XHN1bV97aT0xfV57bl8yfSBSKFlfe2kyfSkgLgpcXQoKLSBVbmRlciAkSF8wJCB3ZSBleHBlY3QgdGhlIGF2ZXJhZ2UgcmFuayBvZiB0aGUgZmlyc3QgZ3JvdXAgdG8gYmUgY2xvc2UgdG8gdGhhdCBvZiB0aGUgc2Vjb25kIGdyb3VwIHNvICRUJCBpcyBjbG9zZSB0byB6ZXJvLgoKLSBVbmRlciAkSF8xJCB3ZSBleHBlY3QgdGhlIG1lYW4gcmFua3MgdG8gZGlmZmVyIHNvIHRoYXQgJFQkIGRldmlhdGVzIGZyb20gemVyby4KCi0gSXQgaXMgc3VmZmljaWVudCB0byBvbmx5IGNhbGN1bGF0ZQogICQkU18xPVxzdW1fe2k9MX1ee25fMX0gUihZX3tpMX0pJCQuCgotICRTXzEkIGlzIHRoZSBzdW0gb2YgdGhlIHJhbmtzIG9mIHRoZSBmaXJzdCBncm91cDogKnJhbmsgc3VtIHRlc3QqLgoKLSBUaGlzIGhvbGRzIGJlY2F1c2UKXFsKICBTXzErU18yID0gXHRleHR7c3VtIG9mIGFsbCByYW5rc30gPSAxKzIrXGNkb3RzICsgbj1cZnJhY3sxfXsyfW4obisxKS4KXF0KCgotICRTXzEkIChvciAkU18yJCkgaXMgYSBnb29kIHRlc3Qgc3RhdGlzdGljCgotIFVzZSBwZXJtdXRhdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBwZXJtdXRhdGlvbiBkaXN0cmlidXRpb24uIChQZXJtdXRlIHRoZSByYW5rcyBiZXR3ZWVuIHRoZSBncm91cHMpCgotIEZvciBhIGdpdmVuICRuJCBhbmQgbm8gKnRpZXMqIHRoZSByYW5rIHRyYW5zZm9ybWVkIGRhdGEgaXMgYWx3YXlzCiAgJCQxLCAyLCBcbGRvdHMsIG4kJAotIEZvciBnaXZlbiAkbl8xJCBlbiAkbl8yJCB0aGUgcGVybXV0YXRpb24gZGlzdHJpYnV0aW9uIGlzIGFsd2F5cyB0aGUgc2FtZSEKLSBXaXRoIGN1cnJlbnQgY29tcHV0aW5nIHBvd2VyIHRoaXMgaXMgbm90IHNvIGltcG9ydGFudCBhbnkgbW9yZS4KCi0tLQoKIyMgU3RhbmRhcmRpemVkIHN0YXRpc3RpYwoKT2Z0ZW4gdGhlIHN0YW5kYXJkaXplZCB0ZXN0IHN0YXRpc3RpYyBpcyB1c2VkClxbCiAgVCA9IFxmcmFje1NfMS1cdGV4dHtFfV97MH1cbGVmdFtTXzFccmlnaHRdfXtcc3FydHtcdGV4dHtWYXJ9X3swfVxsZWZ0W1NfMVxyaWdodF19fSwKXF0KCi0gd2l0aCAkXHRleHR7RX1fezB9XGxlZnRbU18xXHJpZ2h0XSQgYW5kICRcdGV4dHtWYXJ9X3swfVxsZWZ0W1NfMVxyaWdodF0kIHRoZSBleHBlY3QgbWVhbiBhbmQgdmFyaWFuY2Ugb2YgUzEgdW5kZXIgJEhfMCQuCgotIFVuZGVyICRIXzAkCiBcWwogICBcdGV4dHtFfV97MH1cbGVmdFtTXzFccmlnaHRdPSBcZnJhY3sxfXsyfW5fMShuKzEpIFw7XDtcO1w7XHRleHR7IGVuIH1cO1w7XDtcOyBcdGV4dHtWYXJ9X3swfVxsZWZ0W1NfMVxyaWdodF09XGZyYWN7MX17MTJ9bl8xbl8yKG4rMSkuCiBcXQoKLSBVbmRlciAkSF8wJCBhbmQgd2hlbiAkXG1pbihuXzEsbl8yKVxyaWdodGFycm93IFxpbmZ0eSQKIFxbCiAgICBUID0gXGZyYWN7U18xLVx0ZXh0e0V9X3swfVxsZWZ0W1NfMVxyaWdodF19e1xzcXJ0e1x0ZXh0e1Zhcn1fezB9XGxlZnRbU18xXHJpZ2h0XX19IFxyaWdodGFycm93IE4oMCwxKS4KIFxdCgpBc3ltcHRvdGljYWxseSB0aGUgc3RhbmRhcmRpc2VkIHN0YXRpc3RpYyBmb2xsb3dzIGEgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbiEKCi0tLQoKIyMgQ2hvbGVzdGVyb2wgZXhhbXBsZQoKV2UgaWxsdXN0cmF0ZSB0aGUgcmVzdWx0IGZvciB0aGUgY2hvbGVzdGVyb2wgZXhhbXBsZSB1c2luZyB0aGUgUiBmdW5jdGlvbiBgd2lsY294LnRlc3RgLgpgYGB7cn0Kd2lsY294LnRlc3QoY2hvbGVzdCB+IGdyb3VwLCBkYXRhID0gY2hvbCkKYGBgCgotIFdlIHJlamVjdCAkSF8wJCAoJHA9JCBgciBmb3JtYXQod2lsY294LnRlc3QoY2hvbGVzdH5ncm91cCxkYXRhPWNob2wpJHAudmFsdWUsZGlnaXRzPTIpYCAkPDAuMDUkKQoKLSBUaGUgb3V0cHV0IHNob3dzICRXPSQgYHIgd2lsY294LnRlc3QoY2hvbGVzdH5ncm91cCxkYXRhPWNob2wpJHN0YXRpc3RpY2A/CgotIExldHMgY2FsY3VsYXRlCmBgYHtyfQpTMSA8LSBzdW0ocmFuayhjaG9sJGNob2xlc3QpW2Nob2wkZ3JvdXAgPT0gMV0pClMxClMyIDwtIHN1bShyYW5rKGNob2wkY2hvbGVzdClbY2hvbCRncm91cCA9PSAyXSkKUzIKYGBgCgotIFdoZXJlIGRvZXMgJFc9JCBgciB3aWxjb3gudGVzdChjaG9sZXN0fmdyb3VwLGRhdGE9Y2hvbCkkc3RhdGlzdGljYCBjb21lcyBmcm9tPwoKLS0tCgojIyBNYW5uIGFuZCBXaGl0bmV5IHRlc3QKCk1hbm4gYW5kIFdoaXRuZXkgdGVzdCBpbiBhYnNlbmNlIG9mIHRpZXM6ClxbCiBVXzEgPSBcc3VtX3tpPTF9XntuXzF9XHN1bV97az0xfV57bl8yfSBcdGV4dHtJfVxsZWZ0XHtZX3tpMX1cZ2VxIFlfe2syfVxyaWdodFx9LgpcXQoKLSB3aXRoICRcdGV4dHtJfVxsZWZ0XHsuXHJpZ2h0XH0kIGFuIGluZGljYXRvciB0aGF0IGVxdWFscyAxICBpZiB0aGUgZXhwcmVzc2lvbiBpcyB0cnVlIGFuZCBpcyB6ZXJvIG90aGVyd2lzZS4KCi0gVSBjb3VudHMgaG93IG1hbnkgdGltZXMgYW4gb2JzZXJ2YXRpb24gb2YgdGhlIGZpcnN0IGdyb3VwIGlzIGxhcmdlciBvciBlcXVhbCB0byBhbiBvYnNlcnZhdGlvbiBmcm9tIHRoZSBzZWNvbmQgZ3JvdXAuCgpgYGB7cn0KeTEgPC0gc3Vic2V0KGNob2wsIGdyb3VwID09IDEpJGNob2xlc3QKeTIgPC0gc3Vic2V0KGNob2wsIGdyb3VwID09IDIpJGNob2xlc3QKdTFIbHAgPC0gc2FwcGx5KHkxLCBmdW5jdGlvbih5MWksIHkyKSB7CiAgeTFpID49IHkyCn0sIHkyID0geTIpCmNvbG5hbWVzKHUxSGxwKSA8LSB5MQpyb3duYW1lcyh1MUhscCkgPC0geTIKYGBgCgpgYGB7cn0KdTFIbHAKVTEgPC0gc3VtKHUxSGxwKQpVMQpgYGAKCkl0IGNhbiBiZSBzaG93biB0aGF0ICRVXzEgPSBTXzEgLSBcZnJhY3sxfXsyfW5fMShuXzErMSkuJAoKYGBge3J9ClMxIC0gbkdyb3Vwc1sxXSAqIChuR3JvdXBzWzFdICsgMSkgLyAyCmBgYAoKMS4gJFVfMSQgZW4gJFNfMSQgY29udGFpbiB0aGUgc2FtZSBpbmZvcm1hdGlvbgoyLiAkVV8xJCBpcyBhbHNvIGEgcmFuayBzdGF0aXN0aWMsIGFuZAozLiBFeGFjdCB0ZXN0IGJhc2VkIG9uICRVXzEkIGFuZCAkU18xJCBhcmUgZXF1aXZhbGVudC4KCi0tLQoKIyMgUHJvYmFiaWxpc3RpYyBpbmRleAoKLSAkVV8xJCBoYXMgYSBiZXR0ZXIgaW50ZXJwcmV0YXRpb24gZmVhdHVyZQotIExldCAkWV9qJCBhIHJhbmRvbSBvYnNlcnZhdGlvbiBmcm9tIGdyb3VwICRqJCAoJGo9MSwyJCkuIFRoZW4KXGJlZ2lue2VxbmFycmF5Kn0KICBcZnJhY3sxfXtuXzFuXzJ9XHRleHR7RX1cbGVmdFtVXzFccmlnaHRdCiAgICAgJj0mIFx0ZXh0e1B9XGxlZnRbWV8xIFxnZXEgWV8yXHJpZ2h0XS4KXGVuZHtlcW5hcnJheSp9CgpTbyB3ZSBjYW4gZXN0aW1hdGUgdGhlIHByb2JhYmlsaXR5IGJ5IGNhbGN1bGF0aW5nIHRoZSBtZWFuIG9mIGFsbCBpbmRpY2F0b3IgdmFyaWFibGUgdmFsdWVzICRcdGV4dHtJfVxsZWZ0XHtZX3tpMX1cZ2VxIFlfe2syfVxyaWdodFx9JC4gTm90ZSwgdGhhdCB3ZSBkaWQgJG5fMSBcdGltZXMgbl8yJCBjb21wYXJpc29ucwoKYGBge3J9Cm1lYW4odTFIbHApClUxIC8gKG5Hcm91cHNbMV0gKiBuR3JvdXBzWzJdKQpgYGAKCi0gUHJvYmFiaWxpdHkgJFx0ZXh0e1B9XGxlZnRbWV8xIFxnZXEgWV8yXHJpZ2h0XSQgaXMgcmVmZXJyZWQgdG8gYXMgdGhlICpwcm9iYWJpbGlzdGljIGluZGV4Ki4KLSBJdCBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhIHJhbmRvbSBvYnNlcnZhdGlvbiBvZiB0aGUgZmlyc3QgZ3JvdXAgaXMgbGFyZ2VyIG9yIGVxdWFsIHRoYW4gYSByYW5kb20gb2JzZXJ2YXRpb24gb2YgdGhlIHNlY29uZCBncm91cAotIElmICRIXzAkIGhvbGRzICRcdGV4dHtQfVxsZWZ0W1lfMSBcZ2VxIFlfMlxyaWdodF09XGZyYWN7MX17Mn0kLgoKLSBSIGZ1bmN0aW9uIGB3aWxjb3gudGVzdGAgZG9lcyBub3QgcmV0dXJuIHRoZSBXaWxjb3hvbiByYW5rIHN1bSBzdGF0aXN0aWMuIEl0IHJldHVybnMgdGhlIE1hbm4tV2hpdG5leSBzdGF0aXN0aWMgJFVfMSQuCi0gTGV0cyByZXZpc2l0IHRoZSByZXN1bHQKYGBge3J9CndUZXN0IDwtIHdpbGNveC50ZXN0KGNob2xlc3QgfiBncm91cCwgZGF0YSA9IGNob2wpCndUZXN0ClUxCnByb2JJbmQgPC0gd1Rlc3Qkc3RhdGlzdGljIC8gcHJvZChuR3JvdXBzKQpwcm9iSW5kCmBgYAoKQmVjYXVzZSAkcD0kIGByIGZvcm1hdCh3VGVzdCRwLnZhbHVlLGRpZ2l0cz0zKWAgJDwwLjA1JCB3ZSBjb25jbHVkZSBhdCB0aGUgJDVcJSQgc2lnbmlmaWNhbmNlIGxldmVsIHRoYXQgdGhlIG1lYW4gY2hvbGVzdGVyb2wgbGV2ZWwgb2YgaGFydCBwYXRpZW50cyBpcyBsYXJnZXIgdGhlbiB0aGF0IG9mIGhlYWx0aHkgc3ViamVjdHMuCgogIC0gTm90ZSB0aGF0IHdlIGhhdmUgYXNzdW1lZCB0aGF0IHRoZSBsb2NhdGlvbi1zaGlmdCBtb2RlbCBpcyB2YWxpZCBpbiB0aGlzIGNvbmNsdXNpb24uCiAgLSBXZSBhbHNvIGtub3cgdGhhdCBoaWdoZXIgY2hvbGVzdGVyb2wgbGV2ZWwgYXJlIG1vcmUgbGlrZWx5IGZvciBoYXJ0IHBhdGllbnRzIHRoZW4gZm9yIGhlYWx0aHkgc3ViamVjdHMgYW5kIHRoaXMgcHJvYmFiaWxpdHkgaXMKJFUxLyhuXzFcdGltZXMgbl8yKT0kIGByIHByb2JJbmQqMTAwYCUuCiAgLSBXZSBzaG91bGQgYXNzZXNzIHRoZSBsb2NhdGlvbiBzaGlmdCBhc3N1bXB0aW9uLiBCdXQgdGhpcyBpcyBub3QgcG9zc2libGUgd2l0aCBvbmx5IDUgb2JzZXJ2YXRpb25zLgoKV2l0aG91dCB0aGUgbG9jYXRpb24tc2hpZnQgYXNzdW1wdGlvbiB0aGUgY29uY2x1c2lvbiBpbiB0ZXJtcyBvZiB0aGUgcHJvYmFiaWxpc3RpYyBpbmRleCByZW1haW5zIHZhbGlkIQoKICAtIFNvIHdoZW4gd2UgZG8gbm90IGFzc3VtZSBsb2NhdGlvbiBzaGlmdCB3ZSB0ZXN0IGZvcgoKXFtIXzA6IEZfMT1GXzIgXHRleHR7IHZzIH0gSF8xOiBQW1lfMSBcZ2VxIFlfMl0gXG5lcSAwLjUuXF0KCgojIyBDb25jbHVzaW9uCgpUaGVyZSBpcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgY2hvbGVzdGVyb2wgY29uY2VudHJhdGlvbiBvZiBoYXJ0IHBhdGllbnRzIHR3byBkYXlzIHVwb24gYSBzdHJva2UgYW5kIHRoYXQgb2YgaGVhbHRoeSBzdWJqZWN0ICgkcD0kIGByIGZvcm1hdCh3VGVzdCRwLnZhbHVlLGRpZ2l0cz0zKWApLiBJdCBpcyBtb3JlIGxpa2VseSB0byBvYnNlcnZlIGhpZ2hlciBjaG9sZXN0ZXJvbCBsZXZlbHMgZm9yIGhhcnQgcGF0aWVudHMgdGhlbiBmb3IgaGVhbHRoeSBzdWJqZWN0cy4gVGhlIHBvaW50IGVzdGltYXRvciBmb3IgdGhpcyBwcm9iYWJpbGl0eSBpcyBgciBwcm9iSW5kKjEwMGAlLgo=