From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Ken Manheimer" Newsgroups: gmane.emacs.devel Subject: Re: allout encryption and non-ascii characters Date: Sat, 4 Nov 2006 14:28:52 -0500 Message-ID: <2cd46e7f0611041128k57da936vda14f79f35259d58@mail.gmail.com> References: <877iyfjpbx.fsf@acm.org> <2cd46e7f0611011007g772df6dcn84b0e36c2a2dfe71@mail.gmail.com> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_26149_24469499.1162668532156" X-Trace: sea.gmane.org 1162669070 11589 80.91.229.2 (4 Nov 2006 19:37:50 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sat, 4 Nov 2006 19:37:50 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Nov 04 20:34:50 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GgRCp-0006UY-D0 for ged-emacs-devel@m.gmane.org; Sat, 04 Nov 2006 20:34:44 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GgRCj-0000nJ-L0 for ged-emacs-devel@m.gmane.org; Sat, 04 Nov 2006 14:29:21 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GgRCO-0000n5-1V for emacs-devel@gnu.org; Sat, 04 Nov 2006 14:29:00 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GgRCN-0000mu-IN for emacs-devel@gnu.org; Sat, 04 Nov 2006 14:28:59 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GgRCN-0000mr-Dp for emacs-devel@gnu.org; Sat, 04 Nov 2006 14:28:59 -0500 Original-Received: from [64.233.182.184] (helo=nf-out-0910.google.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1GgRCJ-00058L-Fe for emacs-devel@gnu.org; Sat, 04 Nov 2006 14:28:59 -0500 Original-Received: by nf-out-0910.google.com with SMTP id h2so1864281nfe for ; Sat, 04 Nov 2006 11:28:53 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=C5Dm6/5JKmuxCe1PB9OrDOxQdi/mwO8uN/7HTHzg71aSqnc+KvE+FHD7cWkPWrIKMJDPYkOM7asffhNaOnpK12CBIkk/8IvB8+xuhurBM8DxoPDbbkAwyBr9NbZJoGtih150njfxqEPPxmTDUGNX7uuxNR/3C6icDMkf3sLOoPY= Original-Received: by 10.78.118.19 with SMTP id q19mr4571480huc.1162668532714; Sat, 04 Nov 2006 11:28:52 -0800 (PST) Original-Received: by 10.78.198.11 with HTTP; Sat, 4 Nov 2006 11:28:52 -0800 (PST) Original-To: Emacs-Devel , "David Smith" In-Reply-To: <2cd46e7f0611011007g772df6dcn84b0e36c2a2dfe71@mail.gmail.com> X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:61794 Archived-At: ------=_Part_26149_24469499.1162668532156 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline i have had some success with getting allout topic encryption to encrypt text so that characters in an alternate coding set are preserved. i am looking for people to test it - i am so unfamiliar with coding sets in general that i don't really know how to be sure it works generally! (i am excited, though, that i was able to round-trip some text with an elaborate <'> apostrophe that isn't preserved in the ascii character set, but is preserved in iso-2022-7bit.) i'm attaching a full copy of the revised allout.el for testing - make sure you're not getting byte code from an old version when giving it a go. and when you do test it, be sure that the file you're working with has a coding set which preserves the characters on rereading - the encryption depends on the buffer being in the right coding set. let me know whether or not it works for you, and if possible, the coding set of the trial ('Esc-x buffer-file-coding-set' will tell you). if i get good confirmation that this works, i'll submit a proper patch. thanks! On 11/1/06, Ken Manheimer wrote: > allout's use of pgg for encryption doesn't provide for non-ascii text, > and encoding is a realm where i seem to have less than zero > cluefulness. can anyone help me solve the problem posed below? > > ken > > On 11/1/06, an david smith wrote: > > > Hi Ken, > > > > I've been an allout user for a very long time. It's wonderful > > software. Thank you. > > > > Today I thought I'd try out the encryption support as I finally > > have a need for it but it doesn't properly handle non-ascii > > characters. pgg-output-buffer is created inside of pgg-gpg with > > mode of raw-text or binary and that is never converted back > > into the charset of the original cleartext. I do a lot of work > > in Japanese and so this is critical. > > > > I look at how gnus uses pgg and its charset handling but even > > in edebug I couldn't quite see how it was doing it correctly > > compared to how allout's method. > > > > If you have any insight I would really appreciate it. I will > > try to debug this in my own time but as you are the > > maintainer/author of the software involved, I hope you can at > > least nudge in me the right direction towards a fix. > > -- > ken > ken.manheimer@gmail.com > http://myriadicity.net > -- ken ken.manheimer@gmail.com http://myriadicity.net ------=_Part_26149_24469499.1162668532156 Content-Type: application/octet-stream; name=allout.el Content-Transfer-Encoding: base64 X-Attachment-Id: f_eu4e6c1t Content-Disposition: attachment; filename="allout.el" Ozs7IGFsbG91dC5lbCAtLS0gZXh0ZW5zaXZlIG91dGxpbmUgbW9kZSBmb3IgdXNlIGFsb25lIGFu ZCB3aXRoIG90aGVyIG1vZGVzCgo7OyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDIw MDEsIDIwMDIsIDIwMDMsIDIwMDQsCjs7ICAgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KCjs7IEF1dGhvcjogS2VuIE1hbmhlaW1lciA8a2VuIGRvdCBtYW5oZWltZXIg YXQgZ21haWwgZG90IGNvbT4KOzsgTWFpbnRhaW5lcjogS2VuIE1hbmhlaW1lciA8a2VuIGRvdCBt YW5oZWltZXIgYXQgZ21haWwgZG90IGNvbT4KOzsgQ3JlYXRlZDogRGVjIDE5OTEgLSBmaXJzdCBy ZWxlYXNlIHRvIHVzZW5ldAo7OyBWZXJzaW9uOiAyLjIuMSAoJFJldmlzaW9uOiAxLjIyOSAkKQo7 OyBLZXl3b3Jkczogb3V0bGluZXMgd3AgbGFuZ3VhZ2VzCjs7IFdlYnNpdGU6IGh0dHA6Ly9teXJp YWRpY2l0eS5uZXQvU3VuZHJ5L0VtYWNzQWxsb3V0Cgo7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBH TlUgRW1hY3MuCgo7OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCjs7IGFu eSBsYXRlciB2ZXJzaW9uLgoKOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCjs7IGFsb25nIHdp dGggR05VIEVtYWNzOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhl Cjs7IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwKOzsgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCgo7OzsgQ29tbWVudGFy eToKCjs7IEFsbG91dCBvdXRsaW5lIG1pbm9yIG1vZGUgcHJvdmlkZXMgZXh0ZW5zaXZlIG91dGxp bmUgZm9ybWF0dGluZyBhbmQKOzsgYW5kIG1hbmlwdWxhdGlvbiBiZXlvbmQgc3RhbmRhcmQgZW1h Y3Mgb3V0bGluZSBtb2RlLiAgU29tZSBmZWF0dXJlczoKOzsKOzsgIC0gQ2xhc3NpYyBvdXRsaW5l LW1vZGUgdG9waWMtb3JpZW50ZWQgbmF2aWdhdGlvbiBhbmQgZXhwb3N1cmUgYWRqdXN0bWVudAo7 OyAgLSBUb3BpYy1vcmllbnRlZCBlZGl0aW5nIGluY2x1ZGluZyBjb2hlcmVudCB0b3BpYyBhbmQg c3VidG9waWMKOzsgICAgY3JlYXRpb24sIHByb21vdGlvbiwgZGVtb3Rpb24sIGN1dC9wYXN0ZSBh Y3Jvc3MgZGVwdGhzLCBldGMuCjs7ICAtIEluY3JlbWVudGFsIHNlYXJjaCB3aXRoIGR5bmFtaWMg ZXhwb3N1cmUgYW5kIHJlY29uY2VhbG1lbnQgb2YgdGV4dAo7OyAgLSBDdXN0b21pemFibGUgYnVs bGV0IGZvcm1hdCAtIGVuYWJsZXMgcHJvZ3JhbW1pbmctbGFuZ3VhZ2Ugc3BlY2lmaWMKOzsgICAg b3V0bGluaW5nLCBmb3IgY29kZS1mb2xkaW5nIGVkaXRpbmcuICAoQWxsb3V0IGNvZGUgaXRzZWxm IGlzIHRvIHRyeSBpdDsKOzsgICAgZm9ybWF0dGVkIGFzIGFuIG91dGxpbmUgLSBkbyBFU0MteCBl dmFsLWJ1ZmZlciBpbiBhbGxvdXQuZWw7IGJ1dAo7OyAgICBlbWFjcyBsb2NhbCBmaWxlIHZhcmlh YmxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgd2hlbiB0aGUKOzsgICAgZmlsZSB3YXMgdmlzaXRlZCAt IHNlZSBgZW5hYmxlLWxvY2FsLXZhcmlhYmxlcycuKQo7OyAgLSBDb25maWd1cmFibGUgcGVyLWZp bGUgaW5pdGlhbCBleHBvc3VyZSBzZXR0aW5ncwo7OyAgLSBTeW1tZXRyaWMta2V5IGFuZCBrZXkt cGFpciB0b3BpYyBlbmNyeXB0aW9uLCBwbHVzIHN5bW1ldHJpYyBwYXNzcGhyYXNlCjs7ICAgIG1u ZW1vbmljIHN1cHBvcnQsIHdpdGggdmVyaWZpY2F0aW9uIGFnYWluc3QgYW4gZXN0YWJsaXNoZWQg cGFzc3BocmFzZQo7OyAgICAodXNpbmcgYSBzdGFzaGVkIGVuY3J5cHRlZCBkdW1teSBzdHJpbmcp IGFuZCB1c2VyLXN1cHBsaWVkIGhpbnQKOzsgICAgbWFpbnRlbmFuY2UuICAoU2VlIGFsbG91dC10 b2dnbGUtY3VycmVudC1zdWJ0cmVlLWVuY3J5cHRpb24gZG9jc3RyaW5nLikKOzsgIC0gQXV0b21h dGljIHRvcGljLW51bWJlciBtYWludGVuYW5jZQo7OyAgLSAiSG90LXNwb3QiIG9wZXJhdGlvbiwg Zm9yIHNpbmdsZS1rZXlzdHJva2UgbWFuZXV2ZXJpbmcgYW5kCjs7ICAgIGV4cG9zdXJlIGNvbnRy b2wgKHNlZSB0aGUgYWxsb3V0LW1vZGUgZG9jc3RyaW5nKQo7OyAgLSBFYXN5IHJlbmRlcmluZyBv ZiBleHBvc2VkIHBvcnRpb25zIGludG8gbnVtYmVyZWQsIGxhdGV4LCBpbmRlbnRlZCwgZXRjCjs7 ICAgIG91dGxpbmUgc3R5bGVzCjs7ICAtIENhcmVmdWwgYXR0ZW50aW9uIHRvIHdoaXRlc3BhY2Ug LSBlbmFibGluZyBibGFuayBsaW5lcyBiZXR3ZWVuIGl0ZW1zCjs7ICAgIGFuZCBtYWludGVuYW5j ZSBvZiBoYW5naW5nIGluZGVudGF0aW9uIChpbiBwYXJhZ3JhcGggYXV0by1maWxsIGFuZAo7OyAg ICBhY3Jvc3MgdG9waWMgcHJvbW90aW9uIGFuZCBkZW1vdGlvbikgb2YgdG9waWMgYm9kaWVzIGNv bnNpc3RlbnQgd2l0aAo7OyAgICBpbmRlbnRhdGlvbiBvZiB0aGVpciB0b3BpYyBoZWFkZXIuCjs7 Cjs7IGFuZCBtb3JlLgo7Owo7OyBTZWUgdGhlIGBhbGxvdXQtbW9kZScgZnVuY3Rpb24ncyBkb2Nz dHJpbmcgZm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUKOzsgbW9kZS4KOzsKOzsgVGhlIGxhdGVz dCBkZXZlbG9wbWVudCB2ZXJzaW9uIGFuZCBoZWxwZnVsIG5vdGVzIGFyZSBhdmFpbGFibGUgYXQK OzsgaHR0cDovL215cmlhZGljaXR5Lm5ldC9TdW5kcnkvRW1hY3NBbGxvdXQgLgo7Owo7OyBUaGUg b3V0bGluZSBtZW51YmFyIGFkZGl0aW9ucyBwcm92aWRlIHF1aWNrIHJlZmVyZW5jZSB0byBtYW55 IG9mCjs7IHRoZSBmZWF0dXJlcywgYW5kIHNlZSB0aGUgZG9jc3RyaW5nIG9mIHRoZSB2YXJpYWJs ZSBgYWxsb3V0LWluaXQnCjs7IGZvciBpbnN0cnVjdGlvbnMgb24gcHJpbWluZyB5b3VyIGVtYWNz IHNlc3Npb24gZm9yIGF1dG9tYXRpYwo7OyBhY3RpdmF0aW9uIG9mIGFsbG91dC1tb2RlLgo7Owo7 OyBTZWUgdGhlIGRvY3N0cmluZyBvZiB0aGUgdmFyaWFibGVzIGBhbGxvdXQtbGF5b3V0JyBhbmQK OzsgYGFsbG91dC1hdXRvLWFjdGl2YXRpb24nIGZvciBkZXRhaWxzIG9uIGF1dG9tYXRpYyBhY3Rp dmF0aW9uIG9mCjs7IGBhbGxvdXQtbW9kZScgYXMgYSBtaW5vciBtb2RlLiAgKEl0IGhhcyBjaGFu Z2VkIHNpbmNlIGFsbG91dAo7OyAzLngsIGZvciB0aG9zZSBvZiB5b3UgdGhhdCBkZXBlbmQgb24g dGhlIG9sZCBtZXRob2QuKQo7Owo7OyBOb3RlIC0gdGhlIGxpbmVzIGJlZ2lubmluZyB3aXRoIGA7 OztfJyBhcmUgb3V0bGluZSB0b3BpYyBoZWFkZXJzLgo7OyAgICAgICAgSnVzdCBgRVNDLXggZXZh bC1idWZmZXInIHRvIGdpdmUgaXQgYSB3aGlybC4KCjs7IGtlbiBtYW5oZWltZXIgKGtlbiBkb3Qg bWFuaGVpbWVyIGF0IGdtYWlsIGRvdCBjb20pCgo7OzsgQ29kZToKCjs7O18qIERlcGVuZGVuY3kg YXV0b2xvYWRzCihyZXF1aXJlICdvdmVybGF5KQooZXZhbC13aGVuLWNvbXBpbGUKICA7OyBNb3N0 IG9mIHRoZSByZXF1aXJlcyBoZXJlIGFyZSBmb3Igc3R1ZmYgY292ZXJlZCBieSBhdXRvbG9hZHMu CiAgOzsgU2luY2UganVzdCBieXRlLWNvbXBpbGluZyBkb2Vzbid0IHRyaWdnZXIgYXV0b2xvYWRz LCBzbyB0aGF0CiAgOzsgImZ1bmN0aW9uIG5vdCBmb3VuZCIgd2FybmluZ3Mgd291bGQgb2NjdXIg d2l0aG91dCB0aGVzZSByZXF1aXJlcy4KICAocHJvZ24KICAgIChyZXF1aXJlICdwZ2cpCiAgICAo cmVxdWlyZSAncGdnLWdwZykKICAgIChyZXF1aXJlICdvdmVybGF5KQogICAgOzsgYGNsJyBpcyBy ZXF1aXJlZCBmb3IgYGFzc2VydCcuICBgYXNzZXJ0JyBpcyBub3QgY292ZXJlZCBieSBhIHN0YW5k YXJkCiAgICA7OyBhdXRvbG9hZCwgYnV0IGl0IGlzIGEgbWFjcm8sIHNvIHRoYXQgZXZhbC13aGVu LWNvbXBpbGUgaXMgc3VmZmljaWVudAogICAgOzsgdG8gYnl0ZS1jb21waWxlIGl0IGluLCBvciB0 byBkbyB0aGUgcmVxdWlyZSB3aGVuIHRoZSBidWZmZXIgZXZhbGxlZC4KICAgIChyZXF1aXJlICdj bCkKICAgICkpCgo7OztfKiBVU0VSIENVU1RPTUlaQVRJT04gVkFSSUFCTEVTOgoKOzs7XyA+IGRl Zmdyb3VwIGFsbG91dAooZGVmZ3JvdXAgYWxsb3V0IG5pbAogICJFeHRlbnNpdmUgb3V0bGluZSBt b2RlIGZvciB1c2UgYWxvbmUgYW5kIHdpdGggb3RoZXIgbW9kZXMuIgogIDpwcmVmaXggImFsbG91 dC0iCiAgOmdyb3VwICdvdXRsaW5lcykKCjs7O18gKyBMYXlvdXQsIE1vZGUsIGFuZCBUb3BpYyBI ZWFkZXIgQ29uZmlndXJhdGlvbgoKOzs7XyAgPSBhbGxvdXQtYXV0by1hY3RpdmF0aW9uCihkZWZj dXN0b20gYWxsb3V0LWF1dG8tYWN0aXZhdGlvbiBuaWwKICAiKlJlZ3VsYXRlcyBhdXRvLWFjdGl2 YXRpb24gbW9kYWxpdHkgb2YgYWxsb3V0IG91dGxpbmVzIC0gc2VlIGBhbGxvdXQtaW5pdCcuCgpT ZXRxLWRlZmF1bHQgYnkgYGFsbG91dC1pbml0JyB0byByZWd1bGF0ZSB3aGV0aGVyIG9yIG5vdCBh bGxvdXQKb3V0bGluZSBtb2RlIGlzIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIHdoZW4gdGhlIGJ1 ZmZlci1zcGVjaWZpYwp2YXJpYWJsZSBgYWxsb3V0LWxheW91dCcgaXMgbm9uLW5pbCwgYW5kIHdo ZXRoZXIgb3Igbm90IHRoZSBsYXlvdXQKZGljdGF0ZWQgYnkgYGFsbG91dC1sYXlvdXQnIHNob3Vs ZCBiZSBpbXBvc2VkIG9uIG1vZGUgYWN0aXZhdGlvbi4KCldpdGggdmFsdWUgdCwgYXV0by1tb2Rl LWFjdGl2YXRpb24gYW5kIGF1dG8tbGF5b3V0IGFyZSBlbmFibGVkLgpcKFRoaXMgYWxzbyBkZXBl bmRzIG9uIGBhbGxvdXQtZmluZC1maWxlLWhvb2snIGJlaW5nIGluc3RhbGxlZCBpbgpgZmluZC1m aWxlLWhvb2snLCB3aGljaCBpcyBhbHNvIGRvbmUgYnkgYGFsbG91dC1pbml0Jy4pCgpXaXRoIHZh bHVlIGBhc2snLCBhdXRvLW1vZGUtYWN0aXZhdGlvbiBpcyBlbmFibGVkLCBhbmQgZW5kb3JzZW1l bnQgZm9yCnBlcmZvcm1pbmcgYXV0by1sYXlvdXQgaXMgYXNrZWQgb2YgdGhlIHVzZXIgZWFjaCB0 aW1lLgoKV2l0aCB2YWx1ZSBgYWN0aXZhdGUnLCBvbmx5IGF1dG8tbW9kZS1hY3RpdmF0aW9uIGlz IGVuYWJsZWQsCmF1dG8tbGF5b3V0IGlzIG5vdC4KCldpdGggdmFsdWUgbmlsLCBuZWl0aGVyIGF1 dG8tbW9kZS1hY3RpdmF0aW9uIG5vciBhdXRvLWxheW91dCBhcmUKZW5hYmxlZC4KClNlZSB0aGUg ZG9jc3RyaW5nIGZvciBgYWxsb3V0LWluaXQnIGZvciB0aGUgcHJvcGVyIGludGVyZmFjZSB0bwp0 aGlzIHZhcmlhYmxlLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiT24iIHQpCiAgICAg ICAgICAgICAgICAoY29uc3QgOnRhZyAiQXNrIGFib3V0IGxheW91dCIgImFzayIpCiAgICAgICAg ICAgICAgICAoY29uc3QgOnRhZyAiTW9kZSBvbmx5IiAiYWN0aXZhdGUiKQogICAgICAgICAgICAg ICAgKGNvbnN0IDp0YWcgIk9mZiIgbmlsKSkKICA6Z3JvdXAgJ2FsbG91dCkKOzs7XyAgPSBhbGxv dXQtZGVmYXVsdC1sYXlvdXQKKGRlZmN1c3RvbSBhbGxvdXQtZGVmYXVsdC1sYXlvdXQgJygtMiA6 IDApCiAgIipEZWZhdWx0IGFsbG91dCBvdXRsaW5lIGxheW91dCBzcGVjaWZpY2F0aW9uLgoKVGhp cyBzZXR0aW5nIHNwZWNpZmllcyB0aGUgb3V0bGluZSBleHBvc3VyZSB0byB1c2Ugd2hlbgpgYWxs b3V0LWxheW91dCcgaGFzIHRoZSBsb2NhbCB2YWx1ZSBgdCcuICBUaGlzIGRvY3N0cmluZyBkZXNj cmliZXMgdGhlCmxheW91dCBzcGVjaWZpY2F0aW9ucy4KCkEgbGlzdCB2YWx1ZSBzcGVjaWZpZXMg YSBkZWZhdWx0IGxheW91dCBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLAp0byBiZSBhcHBsaWVkIHVw b24gYWN0aXZhdGlvbiBvZiBgYWxsb3V0LW1vZGUnLiAgQW55IG5vbi1uaWwKdmFsdWUgd2lsbCBh dXRvbWF0aWNhbGx5IHRyaWdnZXIgYGFsbG91dC1tb2RlJywgcHJvdmlkZWQKYGFsbG91dC1pbml0 JyBoYXMgYmVlbiBjYWxsZWQgdG8gZW5hYmxlIHRoaXMgYmVoYXZpb3IuCgpUaGUgdHlwZXMgb2Yg ZWxlbWVudHMgaW4gdGhlIGxheW91dCBzcGVjaWZpY2F0aW9uIGFyZToKCiBpbnRlZ2VyIC0gZGlj dGF0ZSB0aGUgcmVsYXRpdmUgZGVwdGggdG8gb3BlbiB0aGUgY29ycmVzcG9uZGluZyB0b3BpYyhz KSwKICAgICAgICAgICB3aGVyZToKICAgICAgICAgLSBuZWdhdGl2ZSBudW1iZXJzIGZvcmNlIHRo ZSB0b3BpYyB0byBiZSBjbG9zZWQgYmVmb3JlIG9wZW5pbmcKICAgICAgICAgICB0byB0aGUgYWJz b2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciwgc28gYWxsIHNpYmxpbmdzIGFyZSBvcGVuCiAgICAg ICAgICAgb25seSB0byB0aGF0IGxldmVsLgogICAgICAgICAtIHBvc2l0aXZlIG51bWJlcnMgb3Bl biB0byB0aGUgcmVsYXRpdmUgZGVwdGggaW5kaWNhdGVkIGJ5IHRoZQogICAgICAgICAgIG51bWJl ciwgYnV0IGRvIG5vdCBmb3JjZSBhbHJlYWR5IG9wZW5lZCBzdWJ0b3BpY3MgdG8gYmUgY2xvc2Vk LgogICAgICAgICAtIDAgbWVhbnMgdG8gY2xvc2UgdG9waWMgLSBoaWRlIGFsbCBzdWJpdGVtcy4K IDogICAtIHJlcGVhdCBzcGVjIC0gYXBwbHkgdGhlIHByZWNlZWRpbmcgZWxlbWVudCB0byBhbGwg c2libGluZ3MgYXQKICAgICAgIGN1cnJlbnQgbGV2ZWwsICp1cCB0byogdGhvc2Ugc2libGluZ3Mg dGhhdCB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHNwZWNzCiAgICAgICBmb2xsb3dpbmcgdGhlIGA6JyBv biB0aGUgbGlzdC4gIEllLCBhcHBseSB0byBhbGwgdG9waWNzIGF0IGxldmVsIGJ1dAogICAgICAg dHJhaWxpbmcgb25lcyBhY2NvdW50ZWQgZm9yIGJ5IHRyYWlsaW5nIHNwZWNzLiAgXChPbmx5IHRo ZSBmaXJzdCBvZgogICAgICAgbXVsdGlwbGUgY29sb25zIGF0IHRoZSBzYW1lIGxldmVsIGlzIGhv bm9yZWQgLSBsYXRlciBvbmVzIGFyZSBpZ25vcmVkLikKICogICAtIGNvbXBsZXRlbHkgZXhwb3Nl cyB0aGUgdG9waWMsIGluY2x1ZGluZyBib2RpZXMKICsgICAtIGV4cG9zZXMgYWxsIHN1YnRvcGlj cywgYnV0IG5vdCB0aGUgYm9kaWVzCiAtICAgLSBleHBvc2VzIHRoZSBib2R5IG9mIHRoZSBjb3Jy ZXNwb25kaW5nIHRvcGljLCBidXQgbm90IHN1YnRvcGljcwogbGlzdCAtIGEgbmVzdGVkIGxheW91 dCBzcGVjLCB0byBiZSBhcHBsaWVkIGludHJpY2F0ZWx5IHRvIGl0cwogICAgICAgIGNvcnJlc3Bv bmRpbmcgaXRlbShzKQoKRXhhbXBsZXM6CiAnKC0yIDogMCkKCUNvbGxhcHNlIHRoZSB0b3AtbGV2 ZWwgdG9waWNzIHRvIHNob3cgdGhlaXIgY2hpbGRyZW4gYW5kCiAgICAgICAgZ3JhbmRjaGlsZHJl biwgYnV0IGNvbXBsZXRlbHkgY29sbGFwc2UgdGhlIGZpbmFsIHRvcC1sZXZlbCB0b3BpYy4KICco LTEgKCkgOiAxIDApCglDbG9zZSB0aGUgZmlyc3QgdG9waWMgc28gb25seSB0aGUgaW1tZWRpYXRl IHN1YnRvcGljcyBhcmUgc2hvd24sCiAgICAgICAgbGVhdmUgdGhlIHN1YnNlcXVlbnQgdG9waWNz IGV4cG9zZWQgYXMgdGhleSBhcmUgdW50aWwgdGhlIHNlY29uZAoJc2Vjb25kIHRvIGxhc3QgdG9w aWMsIHdoaWNoIGlzIGV4cG9zZWQgYXQgbGVhc3Qgb25lIGxldmVsLCBhbmQKICAgICAgICBjb21w bGV0ZWx5IGNsb3NlIHRoZSBsYXN0IHRvcGljLgogJygtMiA6IC0xICopCiAgICAgICAgRXhwb3Nl IGNoaWxkcmVuIGFuZCBncmFuZGNoaWxkcmVuIG9mIGFsbCB0b3BpY3MgYXQgY3VycmVudAoJbGV2 ZWwgZXhjZXB0IHRoZSBsYXN0IHR3bzsgZXhwb3NlIGNoaWxkcmVuIG9mIHRoZSBzZWNvbmQgdG8K CWxhc3QgYW5kIGNvbXBsZXRlbHkgZXhwb3NlIHRoZSBsYXN0IG9uZSwgaW5jbHVkaW5nIGl0cyBz dWJ0b3BpY3MuCgpTZWUgYGFsbG91dC1leHBvc2UtdG9waWMnIGZvciBtb3JlIGFib3V0IHRoZSBl eHBvc3VyZSBwcm9jZXNzLgoKQWxzbywgYWxsb3V0J3MgbW9kZS1zcGVjaWZpYyBwcm92aXNpb25z IHdpbGwgbWFrZSB0b3BpYyBwcmVmaXhlcyBkZWZhdWx0CnRvIHRoZSBjb21tZW50LXN0YXJ0IHN0 cmluZywgaWYgYW55LCBvZiB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGZpbGUuICBUaGlzCmlzIG1vZHVs byB0aGUgc2V0dGluZyBvZiBgYWxsb3V0LXVzZS1tb2RlLXNwZWNpZmljLWxlYWRlcicsIHdoaWNo IHNlZS4iCiAgOnR5cGUgJ2FsbG91dC1sYXlvdXQtdHlwZQogIDpncm91cCAnYWxsb3V0KQo7Oztf ICA6IGFsbG91dC1sYXlvdXQtdHlwZQooZGVmaW5lLXdpZGdldCAnYWxsb3V0LWxheW91dC10eXBl ICdsYXp5CiAgIkFsbG91dCBsYXlvdXQgZm9ybWF0IGN1c3RvbWl6YXRpb24gYmFzaWMgYnVpbGRp bmcgYmxvY2tzLiIKICA6dHlwZSAnKHJlcGVhdAogICAgICAgICAgKGNob2ljZSAoaW50ZWdlciA6 dGFnICJpbnRlZ2VyICg8PSB6ZXJvIGlzIHN0cmljdCkiKQogICAgICAgICAgICAgICAgICAoY29u c3QgOnRhZyAiOiAocmVwZWF0IHByaW9yKSIgOikKICAgICAgICAgICAgICAgICAgKGNvbnN0IDp0 YWcgIiogKGNvbXBsZXRlbHkgZXhwb3NlKSIgKikKICAgICAgICAgICAgICAgICAgKGNvbnN0IDp0 YWcgIisgKGV4cG9zZSBhbGwgb2Zmc3ByaW5nLCBoZWFkbGluZXMgb25seSkiICspCiAgICAgICAg ICAgICAgICAgIChjb25zdCA6dGFnICItIChleHBvc2UgdG9waWMgYm9keSBidXQgbm90IG9mZnNw cmluZykiIC0pCiAgICAgICAgICAgICAgICAgIChhbGxvdXQtbGF5b3V0LXR5cGUgOnRhZyAiPE5l c3RlZCBsYXlvdXQ+IikpKSkKCjs7O18gID0gYWxsb3V0LXNob3ctYm9kaWVzCihkZWZjdXN0b20g YWxsb3V0LXNob3ctYm9kaWVzIG5pbAogICIqSWYgbm9uLW5pbCwgc2hvdyBlbnRpcmUgYm9keSB3 aGVuIGV4cG9zaW5nIGEgdG9waWMsIHJhdGhlciB0aGFuCmp1c3QgdGhlIGhlYWRlci4iCiAgOnR5 cGUgJ2Jvb2xlYW4KICA6Z3JvdXAgJ2FsbG91dCkKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2Fs ICdhbGxvdXQtc2hvdy1ib2RpZXMpCjs7OyMjI2F1dG9sb2FkCihwdXQgJ2FsbG91dC1zaG93LWJv ZGllcyAnc2FmZS1sb2NhbC12YXJpYWJsZQogICAgIChpZiAoZmJvdW5kcCAnYm9vbGVhbnApICdi b29sZWFucCAnKGxhbWJkYSAoeCkgKG1lbWJlciB4ICcodCBuaWwpKSkpKQoKOzs7XyAgPSBhbGxv dXQtYmVnaW5uaW5nLW9mLWxpbmUtY3ljbGVzCihkZWZjdXN0b20gYWxsb3V0LWJlZ2lubmluZy1v Zi1saW5lLWN5Y2xlcyB0CiAgIipJZiBub24tbmlsLCBcXFthbGxvdXQtYmVnaW5uaW5nLW9mLWxp bmVdIHdpbGwgY3ljbGUgdGhyb3VnaCBzbWFydC1wbGFjZW1lbnQgb3B0aW9ucy4KCkN5Y2xpbmcg b25seSBoYXBwZW5zIG9uIHdoZW4gdGhlIGNvbW1hbmQgaXMgcmVwZWF0ZWQsIG5vdCB3aGVuIGl0 CmZvbGxvd3MgYSBkaWZmZXJlbnQgY29tbWFuZC4KClNtYXJ0LXBsYWNlbWVudCBtZWFucyB0aGF0 IHJlcGVhdGVkIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbAphZHZhbmNlIGFzIGZvbGxvd3M6 CgogLSBpZiB0aGUgY3Vyc29yIGlzIG9uIGEgbm9uLWhlYWRsaW5lIGJvZHkgbGluZSBhbmQgbm90 IG9uIHRoZSBmaXJzdCBjb2x1bW46CiAgIHRoZW4gaXQgZ29lcyB0byB0aGUgZmlyc3QgY29sdW1u CiAtIGlmIHRoZSBjdXJzb3IgaXMgb24gdGhlIGZpcnN0IGNvbHVtbiBvZiBhIG5vbi1oZWFkbGlu ZSBib2R5IGxpbmU6CiAgIHRoZW4gaXQgZ29lcyB0byB0aGUgc3RhcnQgb2YgdGhlIGhlYWRsaW5l IHdpdGhpbiB0aGUgaXRlbSBib2R5CiAtIGlmIHRoZSBjdXJzb3IgaXMgb24gdGhlIGhlYWRsaW5l IGFuZCBub3QgdGhlIHN0YXJ0IG9mIHRoZSBoZWFkbGluZToKICAgdGhlbiBpdCBnb2VzIHRvIHRo ZSBzdGFydCBvZiB0aGUgaGVhZGxpbmUKIC0gaWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgc3RhcnQg b2YgdGhlIGhlYWRsaW5lOgogICB0aGVuIGl0IGdvZXMgdG8gdGhlIGJ1bGxldCBjaGFyYWN0ZXIg XChmb3IgaG90c3BvdCBuYXZpZ2F0aW9uXCkKIC0gaWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgYnVs bGV0IGNoYXJhY3RlcjoKICAgdGhlbiBpdCBnb2VzIHRvIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhh dCBsaW5lIFwodGhlIGhlYWRsaW5lXCkKIC0gaWYgdGhlIGN1cnNvciBpcyBvbiB0aGUgZmlyc3Qg Y29sdW1uIG9mIHRoZSBoZWFkbGluZToKICAgdGhlbiBpdCBnb2VzIHRvIHRoZSBzdGFydCBvZiB0 aGUgaGVhZGxpbmUgd2l0aGluIHRoZSBpdGVtIGJvZHkuCgpJbiB0aGlzIGZhc2hpb24sIHlvdSBj YW4gdXNlIHRoZSBiZWdpbm5pbmctb2YtbGluZSBjb21tYW5kIHRvIGRvCml0cyBub3JtYWwgam9i IGFuZCB0aGVuLCB3aGVuIHJlcGVhdGVkLCBhZHZhbmNlIHRocm91Z2ggdGhlCmVudHJ5LCBjeWNs aW5nIGJhY2sgdG8gc3RhcnQuCgpJZiB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbmls LCB0aGVuIHRoZSBjdXJzb3IgaXMganVzdAphZHZhbmNlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBsaW5lIGFuZCByZW1haW5zIHRoZXJlIG9uCnJlcGVhdGVkIGNhbGxzLiIKICA6dHlwZSAnYm9v bGVhbiA6Z3JvdXAgJ2FsbG91dCkKOzs7XyAgPSBhbGxvdXQtZW5kLW9mLWxpbmUtY3ljbGVzCihk ZWZjdXN0b20gYWxsb3V0LWVuZC1vZi1saW5lLWN5Y2xlcyB0CiAgIipJZiBub24tbmlsLCBcXFth bGxvdXQtZW5kLW9mLWxpbmVdIHdpbGwgY3ljbGUgdGhyb3VnaCBzbWFydC1wbGFjZW1lbnQgb3B0 aW9ucy4KCkN5Y2xpbmcgb25seSBoYXBwZW5zIG9uIHdoZW4gdGhlIGNvbW1hbmQgaXMgcmVwZWF0 ZWQsIG5vdCB3aGVuIGl0CmZvbGxvd3MgYSBkaWZmZXJlbnQgY29tbWFuZC4KClNtYXJ0LXBsYWNl bWVudCBtZWFucyB0aGF0IHJlcGVhdGVkIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbAphZHZh bmNlIGFzIGZvbGxvd3M6CgogLSBpZiB0aGUgY3Vyc29yIGlzIG5vdCBvbiB0aGUgZW5kLW9mLWxp bmUsCiAgIHRoZW4gaXQgZ29lcyB0byB0aGUgZW5kLW9mLWxpbmUKIC0gaWYgdGhlIGN1cnNvciBp cyBvbiB0aGUgZW5kLW9mLWxpbmUgYnV0IG5vdCB0aGUgZW5kLW9mLWVudHJ5LAogICB0aGVuIGl0 IGdvZXMgdG8gdGhlIGVuZC1vZi1lbnRyeSwgZXhwb3NpbmcgaXQgaWYgbmVjZXNzYXJ5CiAtIGlm IHRoZSBjdXJzb3IgaXMgb24gdGhlIGVuZC1vZi1lbnRyeSwKICAgdGhlbiBpdCBnb2VzIHRvIHRo ZSBlbmQgb2YgdGhlIGhlYWQgbGluZQoKSW4gdGhpcyBmYXNoaW9uLCB5b3UgY2FuIHVzZSB0aGUg ZW5kLW9mLWxpbmUgY29tbWFuZCB0byBkbyBpdHMKbm9ybWFsIGpvYiBhbmQgdGhlbiwgd2hlbiBy ZXBlYXRlZCwgYWR2YW5jZSB0aHJvdWdoIHRoZSBlbnRyeSwKY3ljbGluZyBiYWNrIHRvIHN0YXJ0 LgoKSWYgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG5pbCwgdGhlbiB0aGUgY3Vyc29y IGlzIGp1c3QKYWR2YW5jZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSBhbmQgcmVtYWlucyB0aGVy ZSBvbiByZXBlYXRlZApjYWxscy4iCiAgOnR5cGUgJ2Jvb2xlYW4gOmdyb3VwICdhbGxvdXQpCgo7 OztfICA9IGFsbG91dC1oZWFkZXItcHJlZml4CihkZWZjdXN0b20gYWxsb3V0LWhlYWRlci1wcmVm aXggIi4iCjs7IHRoaXMgc3RyaW5nIGlzIHRyZWF0ZWQgYXMgbGl0ZXJhbCBtYXRjaC4gIGl0IHdp bGwgYmUgYHJlZ2V4cC1xdW90ZSdkLCBzbwo7OyBvbmUgY2Fubm90IHVzZSByZWd1bGFyIGV4cHJl c3Npb25zIHRvIG1hdGNoIHZhcnlpbmcgaGVhZGVyIHByZWZpeGVzLgogICIqTGVhZGluZyBzdHJp bmcgd2hpY2ggaGVscHMgZGlzdGluZ3Vpc2ggdG9waWMgaGVhZGVycy4KCk91dGxpbmUgdG9waWMg aGVhZGVyIGxpbmVzIGFyZSBpZGVudGlmaWVkIGJ5IGEgbGVhZGluZyB0b3BpYwpoZWFkZXIgcHJl Zml4LCB3aGljaCBtb3N0bHkgaGF2ZSB0aGUgdmFsdWUgb2YgdGhpcyB2YXIgYXQgdGhlaXIgZnJv bnQuCkxldmVsIDEgdG9waWNzIGFyZSBleGNlcHRpb25zLiAgVGhleSBjb25zaXN0IG9mIG9ubHkg YSBzaW5nbGUKY2hhcmFjdGVyLCB3aGljaCBpcyB0eXBpY2FsbHkgc2V0IHRvIHRoZSBgYWxsb3V0 LXByaW1hcnktYnVsbGV0Jy4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0KQoobWFr ZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1oZWFkZXItcHJlZml4KQo7OzsjIyNhdXRv bG9hZAoocHV0ICdhbGxvdXQtaGVhZGVyLXByZWZpeCAnc2FmZS1sb2NhbC12YXJpYWJsZSAnc3Ry aW5ncCkKOzs7XyAgPSBhbGxvdXQtcHJpbWFyeS1idWxsZXQKKGRlZmN1c3RvbSBhbGxvdXQtcHJp bWFyeS1idWxsZXQgIioiCiAgIkJ1bGxldCB1c2VkIGZvciB0b3AtbGV2ZWwgb3V0bGluZSB0b3Bp Y3MuCgpPdXRsaW5lIHRvcGljIGhlYWRlciBsaW5lcyBhcmUgaWRlbnRpZmllZCBieSBhIGxlYWRp bmcgdG9waWMgaGVhZGVyCnByZWZpeCwgd2hpY2ggaXMgY29uY2x1ZGVkIGJ5IGJ1bGxldHMgdGhh dCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgdGhpcwp2YXIgYW5kIHRoZSByZXNwZWN0aXZlIGFsbG91 dC0qLWJ1bGxldHMtc3RyaW5nIHZhcnMuCgpUaGUgdmFsdWUgb2YgYW4gYXN0ZXJpc2sgKGAqJykg cHJvdmlkZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CndpdGggdGhlIG9yaWdpbmFsIEVt YWNzIG91dGxpbmUgbW9kZS4gIFNlZSBgYWxsb3V0LXBsYWluLWJ1bGxldHMtc3RyaW5nJwphbmQg YGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRzLXN0cmluZycgZm9yIHRoZSByYW5nZSBvZiBhdmFp bGFibGUKYnVsbGV0cy4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0KQoobWFrZS12 YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1wcmltYXJ5LWJ1bGxldCkKOzs7IyMjYXV0b2xv YWQKKHB1dCAnYWxsb3V0LXByaW1hcnktYnVsbGV0ICdzYWZlLWxvY2FsLXZhcmlhYmxlICdzdHJp bmdwKQo7OztfICA9IGFsbG91dC1wbGFpbi1idWxsZXRzLXN0cmluZwooZGVmY3VzdG9tIGFsbG91 dC1wbGFpbi1idWxsZXRzLXN0cmluZyAiLiwiCiAgIipUaGUgYnVsbGV0cyBub3JtYWxseSB1c2Vk IGluIG91dGxpbmUgdG9waWMgcHJlZml4ZXMuCgpTZWUgYGFsbG91dC1kaXN0aW5jdGl2ZS1idWxs ZXRzLXN0cmluZycgZm9yIHRoZSBvdGhlciBraW5kIG9mCmJ1bGxldHMuCgpETyBOT1QgaW5jbHVk ZSB0aGUgY2xvc2Utc3F1YXJlLWJyYWNrZXQsIGBdJywgYXMgYSBidWxsZXQuCgpPdXRsaW5lIG1v ZGUgaGFzIHRvIGJlIHJlYWN0aXZhdGVkIGluIG9yZGVyIGZvciBjaGFuZ2VzIHRvIHRoZSB2YWx1 ZQpvZiB0aGlzIHZhciB0byB0YWtlIGVmZmVjdC4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAn YWxsb3V0KQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1wbGFpbi1idWxsZXRz LXN0cmluZykKOzs7IyMjYXV0b2xvYWQKKHB1dCAnYWxsb3V0LXBsYWluLWJ1bGxldHMtc3RyaW5n ICdzYWZlLWxvY2FsLXZhcmlhYmxlICdzdHJpbmdwKQo7OztfICA9IGFsbG91dC1kaXN0aW5jdGl2 ZS1idWxsZXRzLXN0cmluZwooZGVmY3VzdG9tIGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRzLXN0 cmluZyAiKistPT4oKVt7fSYhPyMlXCJYQCR+X1xcOjteIgogICIqUGVyc2lzdGVudCBvdXRsaW5l IGhlYWRlciBidWxsZXRzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbCB0b3BpY3MuCgpUaGVz ZSBidWxsZXRzIGFyZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRvcGljcyBmcm9tIHRoZSBydW4tb2Yt dGhlLW1pbGwKb25lcy4gIFRoZXkgYXJlIG5vdCB1c2VkIGluIHRoZSBzdGFuZGFyZCB0b3BpYyBo ZWFkZXJzIGNyZWF0ZWQgYnkKdGhlIHRvcGljLW9wZW5pbmcsIHNoaWZ0aW5nLCBhbmQgcmVidWxs ZXRpbmcgXChlZywgb24gdG9waWMgc2hpZnQsCnRvcGljIHBhc3RlLCBibGFua2V0IHJlYnVsbGV0 aW5nKSByb3V0aW5lcywgYnV0IGFyZSBvZmZlcmVkIGFtb25nIHRoZQpjaG9pY2VzIGZvciByZWJ1 bGxldGluZy4gIFRoZXkgYXJlIG5vdCBhbHRlcmVkIGJ5IHRoZSBhYm92ZSBhdXRvbWF0aWMKcmVi dWxsZXRpbmcsIHNvIHRoZXkgY2FuIGJlIHVzZWQgdG8gY2hhcmFjdGVyaXplIHRvcGljcywgZWc6 CgogYD8nIHF1ZXN0aW9uIHRvcGljcwogYFwoJyBwYXJlbnRoZXRpYyBjb21tZW50IFwod2l0aCBh IG1hdGNoaW5nIGNsb3NlIHBhcmVuIGluc2lkZSkKIGBbJyBtZXRhLW5vdGUgXCh3aXRoIGEgbWF0 Y2hpbmcgY2xvc2UgXSBpbnNpZGUpCiBgXCInIGEgcXVvdGF0aW9uCiBgPScgdmFsdWUgc2V0dGlu Z3MKIGB+JyBcIm1vcmUgb3IgbGVzc1wiCiBgXicgc2VlIGFib3ZlCgogLi4uIGZvciBleGFtcGxl LiAgKGAjJyB0eXBpY2FsbHkgaGFzIGEgc3BlY2lhbCBtZWFuaW5nIHRvIHRoZSBzb2Z0d2FyZSwK YWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBgYWxsb3V0LW51bWJlcmVkLWJ1bGxldCcuKQoKU2Vl IGBhbGxvdXQtcGxhaW4tYnVsbGV0cy1zdHJpbmcnIGZvciB0aGUgc2VsZWN0aW9uIG9mCmFsdGVy bmF0aW5nIGJ1bGxldHMuCgpZb3UgbXVzdCBydW4gYHNldC1hbGxvdXQtcmVnZXhwJyBpbiBvcmRl ciBmb3Igb3V0bGluZSBtb2RlIHRvCnJlY29uY2lsZSB0byBjaGFuZ2VzIG9mIHRoaXMgdmFsdWUu CgpETyBOT1QgaW5jbHVkZSB0aGUgY2xvc2Utc3F1YXJlLWJyYWNrZXQsIGBdJywgb24gZWl0aGVy IG9mIHRoZSBidWxsZXQKc3RyaW5ncy4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0 KQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRz LXN0cmluZykKOzs7IyMjYXV0b2xvYWQKKHB1dCAnYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMt c3RyaW5nICdzYWZlLWxvY2FsLXZhcmlhYmxlICdzdHJpbmdwKQoKOzs7XyAgPSBhbGxvdXQtdXNl LW1vZGUtc3BlY2lmaWMtbGVhZGVyCihkZWZjdXN0b20gYWxsb3V0LXVzZS1tb2RlLXNwZWNpZmlj LWxlYWRlciB0CiAgIipXaGVuIG5vbi1uaWwsIHVzZSBtb2RlLXNwZWNpZmljIHRvcGljLWhlYWRl ciBwcmVmaXhlcy4KCkFsbG91dCBvdXRsaW5lIG1vZGUgd2lsbCB1c2UgdGhlIG1vZGUtc3BlY2lm aWMgYGFsbG91dC1tb2RlLWxlYWRlcnMnIG9yCmNvbW1lbnQtc3RhcnQgc3RyaW5nLCBpZiBhbnks IHRvIGxlYWQgdGhlIHRvcGljIHByZWZpeCBzdHJpbmcsIHNvIHRvcGljCmhlYWRlcnMgbG9vayBs aWtlIGNvbW1lbnRzIGluIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZS4gIEl0IHdpbGwgYWxzbyB1 c2UKdGhlIGNvbW1lbnQtc3RhcnQgc3RyaW5nLCB3aXRoIGFuICdfJyBhcHBlbmRlZCwgZm9yIGBh bGxvdXQtcHJpbWFyeS1idWxsZXQnLgoKU3RyaW5nIHZhbHVlcyBhcmUgdXNlZCBhcyBsaXRlcmFs cywgbm90IHJlZ3VsYXIgZXhwcmVzc2lvbnMsIHNvCmRvIG5vdCBlc2NhcGUgYW55IHJlZ3VsYXJl LWV4cHJlc3Npb24gY2hhcmFjdGVycy4KClZhbHVlIHQgbWVhbnMgdG8gZmlyc3QgY2hlY2sgZm9y IGFzc29jIHZhbHVlIGluIGBhbGxvdXQtbW9kZS1sZWFkZXJzJwphbGlzdCwgdGhlbiB1c2UgY29t bWVudC1zdGFydCBzdHJpbmcsIGlmIGFueSwgdGhlbiB1c2UgZGVmYXVsdCBcKGAuJykuClwoU2Vl IG5vdGUgYWJvdXQgdXNlIG9mIGNvbW1lbnQtc3RhcnQgc3RyaW5ncywgYmVsb3cuKQoKU2V0IHRv IHRoZSBzeW1ib2wgZm9yIGVpdGhlciBvZiBgYWxsb3V0LW1vZGUtbGVhZGVycycgb3IKYGNvbW1l bnQtc3RhcnQnIHRvIHVzZSBvbmx5IG9uZSBvZiB0aGVtLCByZXNwZWN0aXZlbHkuCgpWYWx1ZSBu aWwgbWVhbnMgdG8gYWx3YXlzIHVzZSB0aGUgZGVmYXVsdCBcKGAuJykgYW5kIGxlYXZlCmBhbGxv dXQtcHJpbWFyeS1idWxsZXQnIHVuYWx0ZXJlZC4KCmNvbW1lbnQtc3RhcnQgc3RyaW5ncyB0aGF0 IGRvIG5vdCBlbmQgaW4gc3BhY2VzIGFyZSB0cmlwbGVkIGluCnRoZSBoZWFkZXItcHJlZml4LCBh bmQgYW4gYF8nIHVuZGVyc2NvcmUgaXMgdGFja2VkIG9uIHRoZSBlbmQsIHRvCmRpc3Rpbmd1aXNo IHRoZW0gZnJvbSByZWd1bGFyIGNvbW1lbnQgc3RyaW5ncy4gIGNvbW1lbnQtc3RhcnQKc3RyaW5n cyB0aGF0IGRvIGVuZCBpbiBzcGFjZXMgYXJlIG5vdCB0cmlwbGVkLCBidXQgYW4gdW5kZXJzY29y ZQppcyBzdWJzdGl0dXRlZCBmb3IgdGhlIHNwYWNlLiBbVGhpcyBwcmVzdW1lcyB0aGF0IHRoZSBz cGFjZSBpcwpmb3IgYXBwZWFyYW5jZSwgbm90IGNvbW1lbnQgc3ludGF4LiAgWW91IGNhbiB1c2UK YGFsbG91dC1tb2RlLWxlYWRlcnMnIHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IsIHdoZW4KdW5k ZXNpcmVkLl0iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IHQpIChjb25zdCBuaWwpIHN0cmluZwoJ CSAoY29uc3QgYWxsb3V0LW1vZGUtbGVhZGVycykKCQkgKGNvbnN0IGNvbW1lbnQtc3RhcnQpKQog IDpncm91cCAnYWxsb3V0KQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxvdXQtdXNlLW1vZGUtc3Bl Y2lmaWMtbGVhZGVyICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgJyhsYW1iZGEgKHgpIChvciAo bWVtcSB4ICcodCBuaWwgYWxsb3V0LW1vZGUtbGVhZGVycyBjb21tZW50LXN0YXJ0KSkKICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmdwIHgpKSkpCjs7O18gID0gYWxsb3V0LW1vZGUtbGVhZGVy cwooZGVmdmFyIGFsbG91dC1tb2RlLWxlYWRlcnMgJygpCiAgIlNwZWNpZmljIGFsbG91dC1wcmVm aXggbGVhZGluZyBzdHJpbmdzIHBlciBtYWpvciBtb2Rlcy4KClVzZSB0aGlzIGlmIHRoZSBtb2Rl J3MgY29tbWVudC1zdGFydCBzdHJpbmcgaXNuJ3Qgd2hhdCB5b3UKcHJlZmVyLCBvciBpZiB0aGUg bW9kZSBsYWNrcyBhIGNvbW1lbnQtc3RhcnQgc3RyaW5nLiAgU2VlCmBhbGxvdXQtdXNlLW1vZGUt c3BlY2lmaWMtbGVhZGVyJyBmb3IgbW9yZSBkZXRhaWxzLgoKSWYgeW91J3JlIGNvbnN0cnVjdGlu ZyBhIHN0cmluZyB0aGF0IHdpbGwgY29tbWVudC1vdXQgb3V0bGluZQpzdHJ1Y3R1cmluZyBzbyBp dCBjYW4gYmUgaW5jbHVkZWQgaW4gcHJvZ3JhbSBjb2RlLCBhcHBlbmQgYW4gZXh0cmEKY2hhcmFj dGVyLCBsaWtlIGFuIFwiX1wiIHVuZGVyc2NvcmUsIHRvIGRpc3Rpbmd1aXNoIHRoZSBsZWFkIHN0 cmluZwpmcm9tIHJlZ3VsYXIgY29tbWVudHMgdGhhdCBzdGFydCBhdCB0aGUgYmVnaW5uaW5nLW9m LWxpbmUuIikKCjs7O18gID0gYWxsb3V0LW9sZC1zdHlsZS1wcmVmaXhlcwooZGVmY3VzdG9tIGFs bG91dC1vbGQtc3R5bGUtcHJlZml4ZXMgbmlsCiAgIipXaGVuIG5vbi1uaWwsIHVzZSBvbmx5IG9s ZC1hbmQtY3J1c3R5IGBvdXRsaW5lLW1vZGUnIGAqJyB0b3BpYyBwcmVmaXhlcy4KCk5vbi1uaWwg cmVzdHJpY3RzIHRoZSB0b3BpYyBjcmVhdGlvbiBhbmQgbW9kaWZpY2F0aW9uCmZ1bmN0aW9ucyB0 byBhc3Rlcml4LXBhZGRlZCBwcmVmaXhlcywgc28gdGhleSBsb29rIGV4YWN0bHkKbGlrZSB0aGUg b3JpZ2luYWwgRW1hY3Mtb3V0bGluZSBzdHlsZSBwcmVmaXhlcy4KCldoYXRldmVyIHRoZSBzZXR0 aW5nIG9mIHRoaXMgdmFyaWFibGUsIGJvdGggb2xkIGFuZCBuZXcgc3R5bGUgcHJlZml4ZXMKYXJl IGFsd2F5cyByZXNwZWN0ZWQgYnkgdGhlIHRvcGljIG1hbmV1dmVyaW5nIGZ1bmN0aW9ucy4iCiAg OnR5cGUgJ2Jvb2xlYW4KICA6Z3JvdXAgJ2FsbG91dCkKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxv Y2FsICdhbGxvdXQtb2xkLXN0eWxlLXByZWZpeGVzKQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxv dXQtb2xkLXN0eWxlLXByZWZpeGVzICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgKGlmIChmYm91 bmRwICdib29sZWFucCkgJ2Jvb2xlYW5wICcobGFtYmRhICh4KSAobWVtYmVyIHggJyh0IG5pbCkp KSkpCjs7O18gID0gYWxsb3V0LXN0eWxpc2gtcHJlZml4ZXMgLSBhbHRlcm5hdGluZyBidWxsZXRz CihkZWZjdXN0b20gYWxsb3V0LXN0eWxpc2gtcHJlZml4ZXMgdAogICIqRG8gZmFuY3kgc3R1ZmYg d2l0aCB0b3BpYyBwcmVmaXggYnVsbGV0cyBhY2NvcmRpbmcgdG8gbGV2ZWwsIGV0Yy4KCk5vbi1u aWwgZW5hYmxlcyB0b3BpYyBjcmVhdGlvbiwgbW9kaWZpY2F0aW9uLCBhbmQgcmVwb3NpdGlvbmlu ZwpmdW5jdGlvbnMgdG8gdmFyeSB0aGUgdG9waWMgYnVsbGV0IGNoYXIgKHRoZSBjaGFyIHRoYXQg bWFya3MgdGhlIHRvcGljCmRlcHRoKSBqdXN0IHByZWNlZGluZyB0aGUgc3RhcnQgb2YgdGhlIHRv cGljIHRleHQpIGFjY29yZGluZyB0byBsZXZlbC4KT3RoZXJ3aXNlLCBvbmx5IGFzdGVyaXNrcyAo YConKSBhbmQgZGlzdGluY3RpdmUgYnVsbGV0cyBhcmUgdXNlZC4KClRoaXMgaXMgaG93IGFuIG91 dGxpbmUgY2FuIGxvb2sgKGJ1dCBzYW5zIGluZGVudGF0aW9uKSB3aXRoIHN0eWxpc2gKcHJlZml4 ZXM6CgogICAgKiBUb3AgbGV2ZWwKICAgIC4qIEEgdG9waWMKICAgIC4gKyBPbmUgbGV2ZWwgMyBz dWJ0b3BpYwogICAgLiAgLiBPbmUgbGV2ZWwgNCBzdWJ0b3BpYwogICAgLiAgLiBBIHNlY29uZCA0 IHN1YnRvcGljCiAgICAuICsgQW5vdGhlciBsZXZlbCAzIHN1YnRvcGljCiAgICAuICAjMSBBIG51 bWJlcmVkIGxldmVsIDQgc3VidG9waWMKICAgIC4gICMyIEFub3RoZXIKICAgIC4gICEgQW5vdGhl ciBsZXZlbCA0IHN1YnRvcGljIHdpdGggYSBkaWZmZXJlbnQgZGlzdGluY3RpdmUgYnVsbGV0CiAg ICAuICAjNCBBbmQgYW5vdGhlciBudW1iZXJlZCBsZXZlbCA0IHN1YnRvcGljCgpUaGlzIHdvdWxk IGJlIGFuIG91dGxpbmUgd2l0aCBzdHlsaXNoIHByZWZpeGVzIGluaGliaXRlZCAoYnV0IHRoZQpu dW1iZXJlZCBhbmQgb3RoZXIgZGlzdGluY3RpdmUgYnVsbGV0cyByZXRhaW5lZCk6CgogICAgKiBU b3AgbGV2ZWwKICAgIC4qIEEgdG9waWMKICAgIC4gKiBPbmUgbGV2ZWwgMyBzdWJ0b3BpYwogICAg LiAgKiBPbmUgbGV2ZWwgNCBzdWJ0b3BpYwogICAgLiAgKiBBIHNlY29uZCA0IHN1YnRvcGljCiAg ICAuICogQW5vdGhlciBsZXZlbCAzIHN1YnRvcGljCiAgICAuICAjMSBBIG51bWJlcmVkIGxldmVs IDQgc3VidG9waWMKICAgIC4gICMyIEFub3RoZXIKICAgIC4gICEgQW5vdGhlciBsZXZlbCA0IHN1 YnRvcGljIHdpdGggYSBkaWZmZXJlbnQgZGlzdGluY3RpdmUgYnVsbGV0CiAgICAuICAjNCBBbmQg YW5vdGhlciBudW1iZXJlZCBsZXZlbCA0IHN1YnRvcGljCgpTdHlsaXNoIGFuZCBjb25zdGFudCBw cmVmaXhlcyAoYXMgd2VsbCBhcyBvbGQtc3R5bGUgcHJlZml4ZXMpIGFyZQphbHdheXMgcmVzcGVj dGVkIGJ5IHRoZSB0b3BpYyBtYW5ldXZlcmluZyBmdW5jdGlvbnMsIHJlZ2FyZGxlc3Mgb2YKdGhp cyB2YXJpYWJsZSBzZXR0aW5nLgoKVGhlIHNldHRpbmcgb2YgdGhpcyB2YXIgaXMgbm90IHJlbGV2 YW50IHdoZW4gYGFsbG91dC1vbGQtc3R5bGUtcHJlZml4ZXMnCmlzIG5vbi1uaWwuIgogIDp0eXBl ICdib29sZWFuCiAgOmdyb3VwICdhbGxvdXQpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAn YWxsb3V0LXN0eWxpc2gtcHJlZml4ZXMpCjs7OyMjI2F1dG9sb2FkCihwdXQgJ2FsbG91dC1zdHls aXNoLXByZWZpeGVzICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgKGlmIChmYm91bmRwICdib29s ZWFucCkgJ2Jvb2xlYW5wICcobGFtYmRhICh4KSAobWVtYmVyIHggJyh0IG5pbCkpKSkpCgo7Oztf ICA9IGFsbG91dC1udW1iZXJlZC1idWxsZXQKKGRlZmN1c3RvbSBhbGxvdXQtbnVtYmVyZWQtYnVs bGV0ICIjIgogICIqU3RyaW5nIGRlc2lnbmF0aW5nIGJ1bGxldCBvZiB0b3BpY3MgdGhhdCBoYXZl IGF1dG8tbnVtYmVyaW5nOyBuaWwgZm9yIG5vbmUuCgpUb3BpY3MgaGF2aW5nIHRoaXMgYnVsbGV0 IGhhdmUgYXV0b21hdGljIG1haW50ZW5hbmNlIG9mIGEgc2libGluZwpzZXF1ZW5jZS1udW1iZXIg dGFja2VkIG9uLCBqdXN0IGFmdGVyIHRoZSBidWxsZXQuICBDb252ZW50aW9uYWxseSBzZXQKdG8g XCIjXCIsIHlvdSBjYW4gc2V0IGl0IHRvIGEgYnVsbGV0IG9mIHlvdXIgY2hvaWNlLiAgQSBuaWwg dmFsdWUKZGlzYWJsZXMgbnVtYmVyaW5nIG1haW50ZW5hbmNlLiIKICA6dHlwZSAnKGNob2ljZSAo Y29uc3QgbmlsKSBzdHJpbmcpCiAgOmdyb3VwICdhbGxvdXQpCihtYWtlLXZhcmlhYmxlLWJ1ZmZl ci1sb2NhbCAnYWxsb3V0LW51bWJlcmVkLWJ1bGxldCkKOzs7IyMjYXV0b2xvYWQKKHB1dCAnYWxs b3V0LW51bWJlcmVkLWJ1bGxldCAnc2FmZS1sb2NhbC12YXJpYWJsZQogICAgIChpZiAoZmJvdW5k cCAnc3RyaW5nLW9yLW51bGwtcCkKICAgICAgICAgJ3N0cmluZy1vci1udWxsLXAKICAgICAgICco bGFtYmRhICh4KSAob3IgKHN0cmluZ3AgeCkgKG51bGwgeCkpKSkpCjs7O18gID0gYWxsb3V0LWZp bGUteHJlZi1idWxsZXQKKGRlZmN1c3RvbSBhbGxvdXQtZmlsZS14cmVmLWJ1bGxldCAiQCIKICAi KkJ1bGxldCBzaWduaWZ5aW5nIGZpbGUgY3Jvc3MtcmVmZXJlbmNlcywgZm9yIGBhbGxvdXQtcmVz b2x2ZS14cmVmJy4KClNldCB0aGlzIHZhciB0byB0aGUgYnVsbGV0IHlvdSB3YW50IHRvIHVzZSBm b3IgZmlsZSBjcm9zcy1yZWZlcmVuY2VzLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgbmlsKSBz dHJpbmcpCiAgOmdyb3VwICdhbGxvdXQpCjs7OyMjI2F1dG9sb2FkCihwdXQgJ2FsbG91dC1maWxl LXhyZWYtYnVsbGV0ICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgKGlmIChmYm91bmRwICdzdHJp bmctb3ItbnVsbC1wKQogICAgICAgICAnc3RyaW5nLW9yLW51bGwtcAogICAgICAgJyhsYW1iZGEg KHgpIChvciAoc3RyaW5ncCB4KSAobnVsbCB4KSkpKSkKOzs7XyAgPSBhbGxvdXQtcHJlc2VudGF0 aW9uLXBhZGRpbmcKKGRlZmN1c3RvbSBhbGxvdXQtcHJlc2VudGF0aW9uLXBhZGRpbmcgMgogICIq UHJlc2VudGF0aW9uLWZvcm1hdCB3aGl0ZS1zcGFjZSBwYWRkaW5nIGZhY3RvciwgZm9yIGdyZWF0 ZXIgaW5kZW50LiIKICA6dHlwZSAnaW50ZWdlcgogIDpncm91cCAnYWxsb3V0KQoKKG1ha2UtdmFy aWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtcHJlc2VudGF0aW9uLXBhZGRpbmcpCjs7OyMjI2F1 dG9sb2FkCihwdXQgJ2FsbG91dC1wcmVzZW50YXRpb24tcGFkZGluZyAnc2FmZS1sb2NhbC12YXJp YWJsZSAnaW50ZWdlcnApCgo7OztfICA9IGFsbG91dC1hYmJyZXZpYXRlLWZsYXR0ZW5lZC1udW1i ZXJpbmcKKGRlZmN1c3RvbSBhbGxvdXQtYWJicmV2aWF0ZS1mbGF0dGVuZWQtbnVtYmVyaW5nIG5p bAogICIqSWYgbm9uLW5pbCwgYGFsbG91dC1mbGF0dGVuLWV4cG9zZWQtdG8tYnVmZmVyJyBhYmJy ZXZpYXRlcyB0b3BpYwpudW1iZXJzIHRvIG1pbmltYWwgYW1vdW50IHdpdGggc29tZSBjb250ZXh0 LiAgT3RoZXJ3aXNlLCBlbnRpcmUKbnVtYmVycyBhcmUgYWx3YXlzIHVzZWQuIgogIDp0eXBlICdi b29sZWFuCiAgOmdyb3VwICdhbGxvdXQpCgo7OztfICsgTGFUZVggZm9ybWF0dGluZwo7OztfICAt IGFsbG91dC1udW1iZXItcGFnZXMKKGRlZmN1c3RvbSBhbGxvdXQtbnVtYmVyLXBhZ2VzIG5pbAog ICIqTm9uLW5pbCB0dXJucyBvbiBwYWdlIG51bWJlcmluZyBmb3IgTGFUZVggZm9ybWF0dGluZyBv ZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnYWxsb3V0KQo7OztfICAt IGFsbG91dC1sYWJlbC1zdHlsZQooZGVmY3VzdG9tIGFsbG91dC1sYWJlbC1zdHlsZSAiXFxsYXJn ZVxcYmYiCiAgIipGb250IGFuZCBzaXplIG9mIGxhYmVscyBmb3IgTGFUZVggZm9ybWF0dGluZyBv ZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnc3RyaW5nCiAgOmdyb3VwICdhbGxvdXQpCjs7O18gIC0g YWxsb3V0LWhlYWQtbGluZS1zdHlsZQooZGVmY3VzdG9tIGFsbG91dC1oZWFkLWxpbmUtc3R5bGUg IlxcbGFyZ2VcXHNsICIKICAiKkZvbnQgYW5kIHNpemUgb2YgZW50cmllcyBmb3IgTGFUZVggZm9y bWF0dGluZyBvZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnc3RyaW5nCiAgOmdyb3VwICdhbGxvdXQp Cjs7O18gIC0gYWxsb3V0LWJvZHktbGluZS1zdHlsZQooZGVmY3VzdG9tIGFsbG91dC1ib2R5LWxp bmUtc3R5bGUgIiAiCiAgIipGb250IGFuZCBzaXplIG9mIGVudHJpZXMgZm9yIExhVGVYIGZvcm1h dHRpbmcgb2YgYW4gb3V0bGluZS4iCiAgOnR5cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0KQo7 OztfICAtIGFsbG91dC10aXRsZS1zdHlsZQooZGVmY3VzdG9tIGFsbG91dC10aXRsZS1zdHlsZSAi XFxMYXJnZVxcYmYiCiAgIipGb250IGFuZCBzaXplIG9mIHRpdGxlcyBmb3IgTGFUZVggZm9ybWF0 dGluZyBvZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnc3RyaW5nCiAgOmdyb3VwICdhbGxvdXQpCjs7 O18gIC0gYWxsb3V0LXRpdGxlCihkZWZjdXN0b20gYWxsb3V0LXRpdGxlICcob3IgYnVmZmVyLWZp bGUtbmFtZSAoYnVmZmVyLW5hbWUpKQogICIqRXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgdG8g ZGV0ZXJtaW5lIHRoZSB0aXRsZSBmb3IgTGFUZVgKZm9ybWF0dGVkIGNvcHkuIgogIDp0eXBlICdz ZXhwCiAgOmdyb3VwICdhbGxvdXQpCjs7O18gIC0gYWxsb3V0LWxpbmUtc2tpcAooZGVmY3VzdG9t IGFsbG91dC1saW5lLXNraXAgIi4wNWNtIgogICIqU3BhY2UgYmV0d2VlbiBsaW5lcyBmb3IgTGFU ZVggZm9ybWF0dGluZyBvZiBhbiBvdXRsaW5lLiIKICA6dHlwZSAnc3RyaW5nCiAgOmdyb3VwICdh bGxvdXQpCjs7O18gIC0gYWxsb3V0LWluZGVudAooZGVmY3VzdG9tIGFsbG91dC1pbmRlbnQgIi4z Y20iCiAgIipMYVRlWCBmb3JtYXR0ZWQgZGVwdGgtaW5kZW50IHNwYWNpbmcuIgogIDp0eXBlICdz dHJpbmcKICA6Z3JvdXAgJ2FsbG91dCkKCjs7O18gKyBUb3BpYyBlbmNyeXB0aW9uCjs7O18gID0g YWxsb3V0LWVuY3J5cHRpb24gZ3JvdXAKKGRlZmdyb3VwIGFsbG91dC1lbmNyeXB0aW9uIG5pbAog ICJTZXR0aW5ncyBmb3IgdG9waWMgZW5jcnlwdGlvbiBmZWF0dXJlcyBvZiBhbGxvdXQgb3V0bGlu ZXIuIgogIDpncm91cCAnYWxsb3V0KQo7OztfICA9IGFsbG91dC10b3BpYy1lbmNyeXB0aW9uLWJ1 bGxldAooZGVmY3VzdG9tIGFsbG91dC10b3BpYy1lbmNyeXB0aW9uLWJ1bGxldCAifiIKICAiKkJ1 bGxldCBzaWduaWZ5aW5nIGVuY3J5cHRpb24gb2YgdGhlIGVudHJ5J3MgYm9keS4iCiAgOnR5cGUg JyhjaG9pY2UgKGNvbnN0IG5pbCkgc3RyaW5nKQogIDp2ZXJzaW9uICIyMi4wIgogIDpncm91cCAn YWxsb3V0LWVuY3J5cHRpb24pCjs7O18gID0gYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItaGFu ZGxpbmcKKGRlZmN1c3RvbSBhbGxvdXQtcGFzc3BocmFzZS12ZXJpZmllci1oYW5kbGluZyB0CiAg IipFbmFibGUgdXNlIG9mIHN5bW1ldHJpYyBlbmNyeXB0aW9uIHBhc3NwaHJhc2UgdmVyaWZpZXIg aWYgbm9uLW5pbC4KClNlZSB0aGUgZG9jc3RyaW5nIGZvciB0aGUgYGFsbG91dC1lbmFibGUtZmls ZS12YXJpYWJsZS1hZGp1c3RtZW50Jwp2YXJpYWJsZSBmb3IgZGV0YWlscyBhYm91dCBhbGxvdXQg YWp1c3RtZW50IG9mIGZpbGUgdmFyaWFibGVzLiIKICA6dHlwZSAnYm9vbGVhbgogIDp2ZXJzaW9u ICIyMi4wIgogIDpncm91cCAnYWxsb3V0LWVuY3J5cHRpb24pCihtYWtlLXZhcmlhYmxlLWJ1ZmZl ci1sb2NhbCAnYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItaGFuZGxpbmcpCjs7O18gID0gYWxs b3V0LXBhc3NwaHJhc2UtaGludC1oYW5kbGluZwooZGVmY3VzdG9tIGFsbG91dC1wYXNzcGhyYXNl LWhpbnQtaGFuZGxpbmcgJ2Fsd2F5cwogICIqRGljdGF0ZSBvdXRsaW5lIGVuY3J5cHRpb24gcGFz c3BocmFzZSByZW1pbmRlciBoYW5kbGluZzoKCiBhbHdheXMgLSBhbHdheXMgc2hvdyByZW1pbmRl ciB3aGVuIHByb21wdGluZwogbmVlZGVkIC0gc2hvdyByZW1pbmRlciBvbiBwYXNzcGhyYXNlIGVu dHJ5IGZhaWx1cmUKIGRpc2FibGVkIC0gbmV2ZXIgcHJlc2VudCBvciBhZGp1c3QgcmVtaW5kZXIK ClNlZSB0aGUgZG9jc3RyaW5nIGZvciB0aGUgYGFsbG91dC1lbmFibGUtZmlsZS12YXJpYWJsZS1h ZGp1c3RtZW50Jwp2YXJpYWJsZSBmb3IgZGV0YWlscyBhYm91dCBhbGxvdXQgYWp1c3RtZW50IG9m IGZpbGUgdmFyaWFibGVzLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgYWx3YXlzKQogICAgICAg ICAgICAgICAgIChjb25zdCBuZWVkZWQpCiAgICAgICAgICAgICAgICAgKGNvbnN0IGRpc2FibGVk KSkKICA6dmVyc2lvbiAiMjIuMCIKICA6Z3JvdXAgJ2FsbG91dC1lbmNyeXB0aW9uKQoobWFrZS12 YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1wYXNzcGhyYXNlLWhpbnQtaGFuZGxpbmcpCjs7 O18gID0gYWxsb3V0LWVuY3J5cHQtdW5lbmNyeXB0ZWQtb24tc2F2ZXMKKGRlZmN1c3RvbSBhbGxv dXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcyB0CiAgIipXaGVuIHNhdmluZywgc2hvdWxk IHRvcGljcyBwZW5kaW5nIGVuY3J5cHRpb24gYmUgZW5jcnlwdGVkPwoKVGhlIGlkZWEgaXMgdG8g cHJldmVudCBmaWxlLXN5c3RlbSBleHBvc3VyZSBvZiBhbnkgdW4tZW5jcnlwdGVkIHN0dWZmLCBh bmQKbW9zdGx5IGNvdmVycyBib3RoIGRlbGliZXJhdGUgZmlsZSB3cml0ZXMgYW5kIGF1dG8tc2F2 ZXMuCgogLSBZZXM6IGVuY3J5cHQgYWxsIHRvcGljcyBwZW5kaW5nIGVuY3J5cHRpb24sIGV2ZW4g aWYgaXQncyB0aGUgb25lCiAgICAgICAgY3VycmVudGx5IGJlaW5nIGVkaXRlZC4gIFwoSW4gdGhh dCBjYXNlLCB0aGUgY3VycmVudGx5IGVkaXRlZCB0b3BpYwogICAgICAgIHdpbGwgYmUgYXV0b21h dGljYWxseSBkZWNyeXB0ZWQgYmVmb3JlIGFueSB1c2VyIGludGVyYWN0aW9uLCBzbyB0aGV5CiAg ICAgICAgY2FuIGNvbnRpbnVlIGVkaXRpbmcgYnV0IHRoZSBjb3B5IG9uIHRoZSBmaWxlIHN5c3Rl bSB3aWxsIGJlCiAgICAgICAgZW5jcnlwdGVkLikKICAgICAgICBBdXRvLXNhdmVzIHdpbGwgdXNl IHRoZSBcIkFsbCBleGNlcHQgY3VycmVudCB0b3BpY1wiIG1vZGUgaWYgdGhpcwogICAgICAgIG9u ZSBpcyBzZWxlY3RlZCwgdG8gYXZvaWQgcHJhY3RpY2FsIGRpZmZpY3VsdGllcyAtIHNlZSBiZWxv dy4KIC0gQWxsIGV4Y2VwdCBjdXJyZW50IHRvcGljOiBza2lwIHRoZSB0b3BpYyBjdXJyZW50bHkg YmVpbmcgZWRpdGVkLCBldmVuIGlmCiAgICAgICBpdCdzIHBlbmRpbmcgZW5jcnlwdGlvbi4gIFRo aXMgbWF5IGV4cG9zZSB0aGUgY3VycmVudCB0b3BpYyBvbiB0aGUKICAgICAgIGZpbGUgc3l0ZW0s IGJ1dCBhdm9pZHMgdGhlIG51aXNhbmNlIG9mIHByb21wdHMgZm9yIHRoZSBlbmNyeXB0aW9uCiAg ICAgICBwYXNzcGhyYXNlIGluIHRoZSBtaWRkbGUgb2YgZWRpdGluZyBmb3IsIGVnLCBhdXRvc2F2 ZXMuCiAgICAgICBUaGlzIG1vZGUgaXMgdXNlZCBmb3IgYXV0by1zYXZlcyBmb3IgYm90aCB0aGlz IG9wdGlvbiBhbmQgXCJZZXNcIi4KIC0gTm86IGxlYXZlIGl0IHRvIHRoZSB1c2VyIHRvIGVuY3J5 cHQgYW55IHVuZW5jcnlwdGVkIHRvcGljcy4KCkZvciBwcmFjdGljYWwgcmVhc29ucywgYXV0by1z YXZlcyBhbHdheXMgdXNlIHRoZSAnZXhjZXB0LWN1cnJlbnQgcG9saWN5CndoZW4gYXV0by1lbmNy eXB0aW9uIGlzIGVuYWJsZWQuICBcKE90aGVyd2lzZSwgc3B1cmlvdXMgcGFzc3BocmFzZSBwcm9t cHRzCmFuZCB1bmF2b2lkYWJsZSB0aW1pbmcgY29sbGlzaW9ucyBhcmUgdG9vIGRpc3J1cHRpdmUu KSAgSWYgc2VjdXJpdHkgZm9yIGEKZmlsZSByZXF1aXJlcyB0aGF0IGV2ZW4gdGhlIGN1cnJlbnQg dG9waWMgaXMgbmV2ZXIgYXV0by1zYXZlZCBpbiB0aGUgY2xlYXIsCmRpc2FibGUgYXV0by1zYXZl cyBmb3IgdGhhdCBmaWxlLiIKCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIlllcyIgdCkK ICAgICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiQWxsIGV4Y2VwdCBjdXJyZW50IHRvcGljIiBl eGNlcHQtY3VycmVudCkKICAgICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiTm8iIG5pbCkpCiAg OnZlcnNpb24gIjIyLjAiCiAgOmdyb3VwICdhbGxvdXQtZW5jcnlwdGlvbikKKG1ha2UtdmFyaWFi bGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcykKCjs7 O18gKyBEZXZlbG9wZXIKOzs7XyAgPSBhbGxvdXQtZGV2ZWxvcGVyIGdyb3VwCihkZWZncm91cCBh bGxvdXQtZGV2ZWxvcGVyIG5pbAogICJTZXR0aW5ncyBmb3IgdG9waWMgZW5jcnlwdGlvbiBmZWF0 dXJlcyBvZiBhbGxvdXQgb3V0bGluZXIuIgogIDpncm91cCAnYWxsb3V0KQo7OztfICA9IGFsbG91 dC1ydW4tdW5pdC10ZXN0cy1vbi1sb2FkCihkZWZjdXN0b20gYWxsb3V0LXJ1bi11bml0LXRlc3Rz LW9uLWxvYWQgbmlsCiAgIipXaGVuIG5vbi1uaWwsIHVuaXQgdGVzdHMgd2lsbCBiZSBydW4gYXQg ZW5kIG9mIGxvYWRpbmcgdGhlIGFsbG91dCBtb2R1bGUuCgpHZW5lcmFsbHksIGFsbG91dCBjb2Rl IGRldmVsb3BlcnMgYXJlIHRoZSBvbmx5IG9uZXMgd2hvJ2xsIHdhbnQgdG8gc2V0IHRoaXMuCgpc KElmIHNldCwgdGhpcyBtYWtlcyBpdCBhbiBldmVuIGJldHRlciBwcmFjdGljZSB0byBleGVyY2lz ZSBjaGFuZ2VzIGJ5CmRvaW5nIGJ5dGUtY29tcGlsYXRpb24gd2l0aCBhIHJlcGVhdCBjb3VudCwg c28gdGhlIGZpbGUgaXMgbG9hZGVkIGFmdGVyCmNvbXBpbGF0aW9uLikKClNlZSBgYWxsb3V0LXJ1 bi11bml0LXRlc3RzJyB0byBzZWUgd2hhdCdzIHJ1bi4iCiAgOnR5cGUgJ2Jvb2xlYW4KICA6Z3Jv dXAgJ2FsbG91dC1kZXZlbG9wZXIpCgo7OztfICsgTWlzY2VsbGFuZW91cyBjdXN0b21pemF0aW9u Cgo7OztfICA9IGFsbG91dC1jb21tYW5kLXByZWZpeAooZGVmY3VzdG9tIGFsbG91dC1jb21tYW5k LXByZWZpeCAiXEMtYyAiCiAgIipLZXkgc2VxdWVuY2UgdG8gYmUgdXNlZCBhcyBwcmVmaXggZm9y IG91dGxpbmUgbW9kZSBjb21tYW5kIGtleSBiaW5kaW5ncy4KCkRlZmF1bHQgaXMgJ1xDLWM8c3Bh Y2U+JzsganVzdCAnXEMtYycgaXMgbW9yZSBzaG9ydC1hbmQtc3dlZXQsIGlmIHlvdSdyZQp3aWxs aW5nIHRvIGxldCBhbGxvdXQgdXNlIGEgYnVuY2ggb2YgXEMtYyBrZXliaW5kaW5ncy4iCiAgOnR5 cGUgJ3N0cmluZwogIDpncm91cCAnYWxsb3V0KQoKOzs7XyAgPSBhbGxvdXQta2V5YmluZGluZ3Mt bGlzdAo7OzsgWW91IGhhdmUgdG8gcmVhY3RpdmF0ZSBhbGxvdXQtbW9kZSAtIGAoYWxsb3V0LW1v ZGUgdCknIC0gdG8KOzs7IGluc3RpdHV0ZSBjaGFuZ2VzIHRvIHRoaXMgdmFyLgooZGVmdmFyIGFs bG91dC1rZXliaW5kaW5ncy1saXN0ICgpCiAgIipMaXN0IG9mIGBhbGxvdXQtbW9kZScga2V5IC8g ZnVuY3Rpb24gYmluZGluZ3MsIGZvciBgYWxsb3V0LW1vZGUtbWFwJy4KClN0cmluZyBvciB2ZWN0 b3Iga2V5IHdpbGwgYmUgcHJlZmFjZWQgd2l0aCBgYWxsb3V0LWNvbW1hbmQtcHJlZml4JywKdW5s ZXNzIG9wdGlvbmFsIHRoaXJkLCBub24tbmlsIGVsZW1lbnQgaXMgcHJlc2VudC4iKQooc2V0cSBh bGxvdXQta2V5YmluZGluZ3MtbGlzdAogICAgICAnKAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOyBNb3Rpb24gY29tbWFuZHM6CiAgICAgICAgKCJcQy1uIiBhbGxvdXQt bmV4dC12aXNpYmxlLWhlYWRpbmcpCiAgICAgICAgKCJcQy1wIiBhbGxvdXQtcHJldmlvdXMtdmlz aWJsZS1oZWFkaW5nKQogICAgICAgICgiXEMtdSIgYWxsb3V0LXVwLWN1cnJlbnQtbGV2ZWwpCiAg ICAgICAgKCJcQy1mIiBhbGxvdXQtZm9yd2FyZC1jdXJyZW50LWxldmVsKQogICAgICAgICgiXEMt YiIgYWxsb3V0LWJhY2t3YXJkLWN1cnJlbnQtbGV2ZWwpCiAgICAgICAgKCJcQy1hIiBhbGxvdXQt YmVnaW5uaW5nLW9mLWN1cnJlbnQtZW50cnkpCiAgICAgICAgKCJcQy1lIiBhbGxvdXQtZW5kLW9m LWVudHJ5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBFeHBvc3Vy ZSBjb21tYW5kczoKICAgICAgICAoIlxDLWkiIGFsbG91dC1zaG93LWNoaWxkcmVuKQogICAgICAg ICgiXEMtcyIgYWxsb3V0LXNob3ctY3VycmVudC1zdWJ0cmVlKQogICAgICAgICgiXEMtaCIgYWxs b3V0LWhpZGUtY3VycmVudC1zdWJ0cmVlKQogICAgICAgICgiaCIgYWxsb3V0LWhpZGUtY3VycmVu dC1zdWJ0cmVlKQogICAgICAgICgiXEMtbyIgYWxsb3V0LXNob3ctY3VycmVudC1lbnRyeSkKICAg ICAgICAoIiEiIGFsbG91dC1zaG93LWFsbCkKICAgICAgICAoIngiIGFsbG91dC10b2dnbGUtY3Vy cmVudC1zdWJ0cmVlLWVuY3J5cHRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7IEFsdGVyYXRpb24gY29tbWFuZHM6CiAgICAgICAgKCIgIiBhbGxvdXQtb3Blbi1z aWJ0b3BpYykKICAgICAgICAoIi4iIGFsbG91dC1vcGVuLXN1YnRvcGljKQogICAgICAgICgiLCIg YWxsb3V0LW9wZW4tc3VwZXJ0b3BpYykKICAgICAgICAoIiciIGFsbG91dC1zaGlmdC1pbikKICAg ICAgICAoIj4iIGFsbG91dC1zaGlmdC1pbikKICAgICAgICAoIjwiIGFsbG91dC1zaGlmdC1vdXQp CiAgICAgICAgKCJcQy1tIiBhbGxvdXQtcmVidWxsZXQtdG9waWMpCiAgICAgICAgKCIqIiBhbGxv dXQtcmVidWxsZXQtY3VycmVudC1oZWFkaW5nKQogICAgICAgICgiIyIgYWxsb3V0LW51bWJlci1z aWJsaW5ncykKICAgICAgICAoIlxDLWsiIGFsbG91dC1raWxsLWxpbmUgdCkKICAgICAgICAoIlxN LWsiIGFsbG91dC1jb3B5LWxpbmUtYXMta2lsbCB0KQogICAgICAgICgiXEMteSIgYWxsb3V0LXlh bmsgdCkKICAgICAgICAoIlxNLXkiIGFsbG91dC15YW5rLXBvcCB0KQogICAgICAgICgiXEMtayIg YWxsb3V0LWtpbGwtdG9waWMpCiAgICAgICAgKCJcTS1rIiBhbGxvdXQtY29weS10b3BpYy1hcy1r aWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNaXNjZWxsYW5l b3VzIGNvbW1hbmRzOgoJOyhbP1xDLVwgXSBhbGxvdXQtbWFyay10b3BpYykKICAgICAgICAoIkAi IGFsbG91dC1yZXNvbHZlLXhyZWYpCiAgICAgICAgKCI9YyIgYWxsb3V0LWNvcHktZXhwb3NlZC10 by1idWZmZXIpCiAgICAgICAgKCI9aSIgYWxsb3V0LWluZGVudGVkLWV4cG9zZWQtdG8tYnVmZmVy KQoJKCI9dCIgYWxsb3V0LWxhdGV4aWZ5LWV4cG9zZWQpCgkoIj1wIiBhbGxvdXQtZmxhdHRlbi1l eHBvc2VkLXRvLWJ1ZmZlcikpKQoKOzs7XyAgPSBhbGxvdXQtaW5oaWJpdC1hdXRvLWZpbGwKKGRl ZmN1c3RvbSBhbGxvdXQtaW5oaWJpdC1hdXRvLWZpbGwgbmlsCiAgIipJZiBub24tbmlsLCBhdXRv LWZpbGwgd2lsbCBiZSBpbmhpYml0ZWQgaW4gdGhlIGFsbG91dCBidWZmZXJzLgoKWW91IGNhbiBj dXN0b21pemUgdGhpcyBzZXR0aW5nIHRvIHNldCBpdCBmb3IgYWxsIGFsbG91dCBidWZmZXJzLCBv ciBzZXQgaXQKaW4gaW5kaXZpZHVhbCBidWZmZXJzIGlmIHlvdSB3YW50IHRvIGluaGliaXQgYXV0 by1maWxsIG9ubHkgaW4gcGFydGljdWxhcgpidWZmZXJzLiAgXChZb3UgY291bGQgdXNlIGEgZnVu Y3Rpb24gb24gYGFsbG91dC1tb2RlLWhvb2snIHRvIGluaGliaXQKYXV0by1maWxsIGFjY29yZGlu ZywgZWcsIHRvIHRoZSBtYWpvciBtb2RlLlwpCgpJZiB5b3UgZG9uJ3Qgc2V0IHRoaXMgYW5kIGF1 dG8tZmlsbC1tb2RlIGlzIGVuYWJsZWQsIGFsbG91dCB3aWxsIHVzZSB0aGUKdmFsdWUgdGhhdCBg bm9ybWFsLWF1dG8tZmlsbC1mdW5jdGlvbicsIGlmIGFueSwgd2hlbiBhbGxvdXQgbW9kZSBzdGFy dHMsIG9yCmVsc2UgYWxsb3V0J3Mgc3BlY2lhbCBoYW5naW5nLWluZGVudCBtYWludGFpbmluZyBh dXRvLWZpbGwgZnVuY3Rpb24sCmBhbGxvdXQtYXV0by1maWxsJy4iCiAgOnR5cGUgJ2Jvb2xlYW4K ICA6Z3JvdXAgJ2FsbG91dCkKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtaW5o aWJpdC1hdXRvLWZpbGwpCgo7OztfICA9IGFsbG91dC11c2UtaGFuZ2luZy1pbmRlbnRzCihkZWZj dXN0b20gYWxsb3V0LXVzZS1oYW5naW5nLWluZGVudHMgdAogICIqSWYgbm9uLW5pbCwgdG9waWMg Ym9keSB0ZXh0IGF1dG8taW5kZW50IGRlZmF1bHRzIHRvIGluZGVudCBvZiB0aGUgaGVhZGVyLgpJ ZSwgaXQgaXMgaW5kZW50ZWQgdG8gYmUganVzdCBwYXN0IHRoZSBoZWFkZXIgcHJlZml4LiAgVGhp cyBpcwpyZWxldmFudCBtb3N0bHkgZm9yIHVzZSB3aXRoIGluZGVudGVkLXRleHQtbW9kZSwgb3Ig b3RoZXIgc2l0dWF0aW9ucwp3aGVyZSBhdXRvLWZpbGwgb2NjdXJzLiIKICA6dHlwZSAnYm9vbGVh bgogIDpncm91cCAnYWxsb3V0KQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC11 c2UtaGFuZ2luZy1pbmRlbnRzKQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxvdXQtdXNlLWhhbmdp bmctaW5kZW50cyAnc2FmZS1sb2NhbC12YXJpYWJsZQogICAgIChpZiAoZmJvdW5kcCAnYm9vbGVh bnApICdib29sZWFucCAnKGxhbWJkYSAoeCkgKG1lbWJlciB4ICcodCBuaWwpKSkpKQoKOzs7XyAg PSBhbGxvdXQtcmVpbmRlbnQtYm9kaWVzCihkZWZjdXN0b20gYWxsb3V0LXJlaW5kZW50LWJvZGll cyAoaWYgYWxsb3V0LXVzZS1oYW5naW5nLWluZGVudHMKCQkJCSAgICAndGV4dCkKICAiKk5vbi1u aWwgZW5hYmxlcyBhdXRvLWFkanVzdCBvZiB0b3BpYyBib2R5IGhhbmdpbmcgaW5kZW50IHdpdGgg ZGVwdGggc2hpZnRzLgoKV2hlbiBhY3RpdmUsIHRvcGljIGJvZHkgbGluZXMgdGhhdCBhcmUgaW5k ZW50ZWQgZXZlbiB3aXRoIG9yIGJleW9uZAp0aGVpciB0b3BpYyBoZWFkZXIgYXJlIHJlaW5kZW50 ZWQgdG8gY29ycmVzcG9uZCB3aXRoIGRlcHRoIHNoaWZ0cyBvZgp0aGUgaGVhZGVyLgoKQSB2YWx1 ZSBvZiB0IGVuYWJsZXMgcmVpbmRlbnQgaW4gbm9uLXByb2dyYW1taW5nLWNvZGUgYnVmZmVycywg aWUKdGhvc2UgdGhhdCBkbyBub3QgaGF2ZSB0aGUgdmFyaWFibGUgYGNvbW1lbnQtc3RhcnQnIHNl dC4gIEEgdmFsdWUgb2YKYGZvcmNlJyBlbmFibGVzIHJlaW5kZW50IHdoZXRoZXIgb3Igbm90IGBj b21tZW50LXN0YXJ0JyBpcyBzZXQuIgogIDp0eXBlICcoY2hvaWNlIChjb25zdCBuaWwpIChjb25z dCB0KSAoY29uc3QgdGV4dCkgKGNvbnN0IGZvcmNlKSkKICA6Z3JvdXAgJ2FsbG91dCkKCihtYWtl LXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXJlaW5kZW50LWJvZGllcykKOzs7IyMjYXV0 b2xvYWQKKHB1dCAnYWxsb3V0LXJlaW5kZW50LWJvZGllcyAnc2FmZS1sb2NhbC12YXJpYWJsZQog ICAgICcobGFtYmRhICh4KSAobWVtcSB4ICcobmlsIHQgdGV4dCBmb3JjZSkpKSkKCjs7O18gID0g YWxsb3V0LWVuYWJsZS1maWxlLXZhcmlhYmxlLWFkanVzdG1lbnQKKGRlZmN1c3RvbSBhbGxvdXQt ZW5hYmxlLWZpbGUtdmFyaWFibGUtYWRqdXN0bWVudCB0CiAgIipJZiBub24tbmlsLCBzb21lIGFs bG91dCBvdXRsaW5lIGFjdGlvbnMgZWRpdCBFbWFjcyBsb2NhbCBmaWxlIHZhciB0ZXh0LgoKVGhp cyBjYW4gcmFuZ2UgZnJvbSBjaGFuZ2VzIHRvIGV4aXN0aW5nIGVudHJpZXMsIGFkZGl0aW9uIG9m IG5ldyBvbmVzLAphbmQgY3JlYXRpb24gb2YgYSBuZXcgbG9jYWwgdmFyaWFibGVzIHNlY3Rpb24g d2hlbiBuZWNlc3NhcnkuCgpFbWFjcyBmaWxlIHZhcmlhYmxlcyBhZGp1c3RtZW50cyBhcmUgYWxz byBpbmhpYml0ZWQgaWYgYGVuYWJsZS1sb2NhbC12YXJpYWJsZXMnCmlzIG5pbC4KCk9wZXJhdGlv bnMgcG90ZW50aWFsbHkgY2F1c2luZyBlZGl0cyBpbmNsdWRlIGFsbG91dCBlbmNyeXB0aW9uIHJv dXRpbmVzLgpGb3IgZGV0YWlscywgc2VlIGBhbGxvdXQtdG9nZ2xlLWN1cnJlbnQtc3VidHJlZS1l bmNyeXB0aW9uJ3MgZG9jc3RyaW5nLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnYWxsb3V0 KQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1lbmFibGUtZmlsZS12YXJpYWJs ZS1hZGp1c3RtZW50KQoKOzs7XyogQ09ERSAtIG5vIHVzZXIgY3VzdG9taXphdGlvbnMgYmVsb3cu Cgo7OztfICMxIEludGVybmFsIE91dGxpbmUgRm9ybWF0dGluZyBhbmQgQ29uZmlndXJhdGlvbgo7 OztfICA6IFZlcnNpb24KOzs7XyAgID0gYWxsb3V0LXZlcnNpb24KKGRlZnZhciBhbGxvdXQtdmVy c2lvbiAiMi4yLjEgKCRSZXZpc2lvbjogMS4yMjkgJCkiCiAgIlZlcnNpb24gb2YgY3VycmVudGx5 IGxvYWRlZCBvdXRsaW5lIHBhY2thZ2UuICBcKGFsbG91dC5lbCkiKQo7OztfICAgPiBhbGxvdXQt dmVyc2lvbgooZGVmdW4gYWxsb3V0LXZlcnNpb24gKCZvcHRpb25hbCBoZXJlKQogICJSZXR1cm4g c3RyaW5nIGRlc2NyaWJpbmcgdGhlIGxvYWRlZCBvdXRsaW5lIHZlcnNpb24uIgogIChpbnRlcmFj dGl2ZSAiUCIpCiAgKGxldCAoKG1zZyAoY29uY2F0ICJBbGxvdXQgT3V0bGluZSBNb2RlIHYgIiBh bGxvdXQtdmVyc2lvbikpKQogICAgKGlmIGhlcmUgKGluc2VydCBtc2cpKQogICAgKG1lc3NhZ2Ug IiVzIiBtc2cpCiAgICBtc2cpKQo7OztfICA6IE1vZGUgYWN0aXZhdGlvbiAoZGVmaW5lZCBoZXJl IGJlY2F1c2UgaXQncyByZWZlcmVuY2VkIGVhcmx5KQo7OztfICAgPSBhbGxvdXQtbW9kZQooZGVm dmFyIGFsbG91dC1tb2RlIG5pbCAiQWxsb3V0IG91dGxpbmUgbW9kZSBtaW5vci1tb2RlIGZsYWcu IikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtbW9kZSkKOzs7XyAgID0gYWxs b3V0LWxheW91dCBuaWwKKGRlZnZhciBhbGxvdXQtbGF5b3V0IG5pbCAgICAgICAgICAgIDsgTEVB VkUgR0xPQkFMIFZBTFVFIE5JTCAtIHNlZSBkb2NzdHJpbmcuCiAgIkJ1ZmZlci1zcGVjaWZpYyBz ZXR0aW5nIGZvciBhbGxvdXQgbGF5b3V0LgoKSW4gYnVmZmVycyB3aGVyZSB0aGlzIGlzIG5vbi1u aWwgXChhbmQgaWYgYGFsbG91dC1pbml0JyBoYXMgYmVlbiBydW4sIHRvCmVuYWJsZSB0aGlzIGJl aGF2aW9yKSwgYGFsbG91dC1tb2RlJyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkLiAg VGhlCmxheW91dCBkaWN0YXRlZCBieSB0aGUgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIHNldCB0aGUg aW5pdGlhbCBleHBvc3VyZSB3aGVuCmBhbGxvdXQtbW9kZScgaXMgYWN0aXZhdGVkLgoKXCpZb3Ug c2hvdWxkIG5vdCBzZXRxLWRlZmF1bHQgdGhpcyB2YXJpYWJsZSBub24tbmlsIHVubGVzcyB5b3Ug d2FudCBldmVyeQp2aXNpdGVkIGZpbGUgdG8gYmUgdHJlYXRlZCBhcyBhbiBhbGxvdXQgZmlsZS4q CgpUaGUgdmFsdWUgd291bGQgdHlwaWNhbGx5IGJlIHNldCBieSBhIGZpbGUgbG9jYWwgdmFyaWFi bGUuICBGb3IKZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBsaW5lcyBhdCB0aGUgYm90dG9tIG9mIGFu IEVtYWNzIExpc3AgZmlsZToKCjs7O0xvY2FsIHZhcmlhYmxlczoKOzs7YWxsb3V0LWxheW91dDog XCgwIDogLTEgLTEgMCkKOzs7RW5kOgoKZGljdGF0ZSBhY3RpdmF0aW9uIG9mIGBhbGxvdXQtbW9k ZScgbW9kZSB3aGVuIHRoZSBmaWxlIGlzIHZpc2l0ZWQKXChwcmVzdW1pbmcgYWxsb3V0LWluaXQg d2FzIGFscmVhZHkgcnVuKSwgZm9sbG93ZWQgYnkgdGhlCmVxdWl2YWxlbnQgb2YgYFwoYWxsb3V0 LWV4cG9zZS10b3BpYyAwIDogLTEgLTEgMCknLiAgXChUaGlzIGlzCnRoZSBsYXlvdXQgdXNlZCBm b3IgdGhlIGFsbG91dC5lbCBzb3VyY2UgZmlsZS4pCgpgYWxsb3V0LWRlZmF1bHQtbGF5b3V0JyBk ZXNjcmliZXMgdGhlIHNwZWNpZmljYXRpb24gZm9ybWF0LgpgYWxsb3V0LWxheW91dCcgY2FuIGFk ZGl0aW9uYWxseSBoYXZlIHRoZSB2YWx1ZSBgdCcsIGluIHdoaWNoCmNhc2UgdGhlIHZhbHVlIG9m IGBhbGxvdXQtZGVmYXVsdC1sYXlvdXQnIGlzIHVzZWQuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVy LWxvY2FsICdhbGxvdXQtbGF5b3V0KQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxvdXQtbGF5b3V0 ICdzYWZlLWxvY2FsLXZhcmlhYmxlCiAgICAgJyhsYW1iZGEgKHgpIChvciAobnVtYmVycCB4KSAo bGlzdHAgeCkgKG1lbXEgeCAnKDogKiArIC0pKSkpKQoKOzs7XyAgOiBUb3BpYyBoZWFkZXIgZm9y bWF0Cjs7O18gICA9IGFsbG91dC1yZWdleHAKKGRlZnZhciBhbGxvdXQtcmVnZXhwICIiCiAgIipS ZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGJlZ2lubmluZyBvZiBhIGhlYWRpbmcgbGlu ZS4KCkFueSBsaW5lIHdob3NlIGJlZ2lubmluZyBtYXRjaGVzIHRoaXMgcmVnZXhwIGlzIGNvbnNp ZGVyZWQgYQpoZWFkaW5nLiAgVGhpcyB2YXIgaXMgc2V0IGFjY29yZGluZyB0byB0aGUgdXNlciBj b25maWd1cmF0aW9uIHZhcnMKYnkgYHNldC1hbGxvdXQtcmVnZXhwJy4iKQoobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ2FsbG91dC1yZWdleHApCjs7O18gICA9IGFsbG91dC1idWxsZXRzLXN0 cmluZwooZGVmdmFyIGFsbG91dC1idWxsZXRzLXN0cmluZyAiIgogICJBIHN0cmluZyBkaWN0YXRp bmcgdGhlIHZhbGlkIHNldCBvZiBvdXRsaW5lIHRvcGljIGJ1bGxldHMuCgpUaGlzIHZhciBzaG91 bGQgKm5vdCogYmUgc2V0IGJ5IHRoZSB1c2VyIC0gaXQgaXMgc2V0IGJ5IGBzZXQtYWxsb3V0LXJl Z2V4cCcsCmFuZCBpcyBwcm9kdWNlZCBmcm9tIHRoZSBlbGVtZW50cyBvZiBgYWxsb3V0LXBsYWlu LWJ1bGxldHMtc3RyaW5nJwphbmQgYGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRzLXN0cmluZycu IikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtYnVsbGV0cy1zdHJpbmcpCjs7 O18gICA9IGFsbG91dC1idWxsZXRzLXN0cmluZy1sZW4KKGRlZnZhciBhbGxvdXQtYnVsbGV0cy1z dHJpbmctbGVuIDAKICAiTGVuZ3RoIG9mIGN1cnJlbnQgYnVmZmVycycgYGFsbG91dC1wbGFpbi1i dWxsZXRzLXN0cmluZycuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtYnVs bGV0cy1zdHJpbmctbGVuKQo7OztfICAgPSBhbGxvdXQtZGVwdGgtc3BlY2lmaWMtcmVnZXhwCihk ZWZ2YXIgYWxsb3V0LWRlcHRoLXNwZWNpZmljLXJlZ2V4cCAiIgogICIqUmVndWxhciBleHByZXNz aW9uIHRvIG1hdGNoIGEgaGVhZGluZyBsaW5lIHByZWZpeCBmb3IgYSBwYXJ0aWN1bGFyIGRlcHRo LgoKVGhpcyBleHByZXNzaW9uIGlzIHVzZWQgdG8gc2VhcmNoIGZvciBkZXB0aC1zcGVjaWZpYyB0 b3BpYwpoZWFkZXJzIGF0IGRlcHRoIDIgYW5kIGdyZWF0ZXIuICBVc2UgYGFsbG91dC1kZXB0aC1v bmUtcmVnZXhwJwpmb3IgdG8gc2VlayB0b3BpY3MgYXQgZGVwdGggb25lLgoKVGhpcyB2YXIgaXMg c2V0IGFjY29yZGluZyB0byB0aGUgdXNlciBjb25maWd1cmF0aW9uIHZhcnMgYnkKYHNldC1hbGxv dXQtcmVnZXhwJy4gIEl0IGlzIHByZXBhcmVkIHdpdGggZm9ybWF0IHN0cmluZ3MgZm9yIHR3bwpk ZWNpbWFsIG51bWJlcnMsIHdoaWNoIHNob3VsZCBlYWNoIGJlIG9uZSBsZXNzIHRoYW4gdGhlIGRl cHRoIG9mIHRoZQp0b3BpYyBwcmVmaXggdG8gYmUgbWF0Y2hlZC4iKQoobWFrZS12YXJpYWJsZS1i dWZmZXItbG9jYWwgJ2FsbG91dC1kZXB0aC1zcGVjaWZpYy1yZWdleHApCjs7O18gICA9IGFsbG91 dC1kZXB0aC1vbmUtcmVnZXhwCihkZWZ2YXIgYWxsb3V0LWRlcHRoLW9uZS1yZWdleHAgIiIKICAi KlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhIGhlYWRpbmcgbGluZSBwcmVmaXggZm9yIGRl cHRoIG9uZS4KClRoaXMgdmFyIGlzIHNldCBhY2NvcmRpbmcgdG8gdGhlIHVzZXIgY29uZmlndXJh dGlvbiB2YXJzIGJ5CmBzZXQtYWxsb3V0LXJlZ2V4cCcuICBJdCBpcyBwcmVwYXJlZCB3aXRoIGZv cm1hdCBzdHJpbmdzIGZvciB0d28KZGVjaW1hbCBudW1iZXJzLCB3aGljaCBzaG91bGQgZWFjaCBi ZSBvbmUgbGVzcyB0aGFuIHRoZSBkZXB0aCBvZiB0aGUKdG9waWMgcHJlZml4IHRvIGJlIG1hdGNo ZWQuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtZGVwdGgtb25lLXJlZ2V4 cCkKOzs7XyAgID0gYWxsb3V0LWxpbmUtYm91bmRhcnktcmVnZXhwCihkZWZ2YXIgYWxsb3V0LWxp bmUtYm91bmRhcnktcmVnZXhwICgpCiAgImBhbGxvdXQtcmVnZXhwJyB3aXRoIG91dGxpbmUgc3R5 bGUgYmVnaW5uaW5nLW9mLWxpbmUgYW5jaG9yLgoKVGhpcyBpcyBwcm9wZXJseSBzZXQgYnkgYHNl dC1hbGxvdXQtcmVnZXhwJy4iKQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1s aW5lLWJvdW5kYXJ5LXJlZ2V4cCkKOzs7XyAgID0gYWxsb3V0LWJvYi1yZWdleHAKKGRlZnZhciBh bGxvdXQtYm9iLXJlZ2V4cCAoKQogICJMaWtlIGBhbGxvdXQtbGluZS1ib3VuZGFyeS1yZWdleHAn LCBmb3IgaGVhZGVycyBhdCBiZWdpbm5pbmcgb2YgYnVmZmVyLiIpCihtYWtlLXZhcmlhYmxlLWJ1 ZmZlci1sb2NhbCAnYWxsb3V0LWJvYi1yZWdleHApCjs7O18gICA9IGFsbG91dC1oZWFkZXItc3Vi dHJhY3Rpb24KKGRlZnZhciBhbGxvdXQtaGVhZGVyLXN1YnRyYWN0aW9uICgxLSAobGVuZ3RoIGFs bG91dC1oZWFkZXItcHJlZml4KSkKICAiQWxsb3V0LWhlYWRlciBwcmVmaXggbGVuZ3RoIHRvIHN1 YnRyYWN0IHdoZW4gY29tcHV0aW5nIHRvcGljIGRlcHRoLiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZl ci1sb2NhbCAnYWxsb3V0LWhlYWRlci1zdWJ0cmFjdGlvbikKOzs7XyAgID0gYWxsb3V0LXBsYWlu LWJ1bGxldHMtc3RyaW5nLWxlbgooZGVmdmFyIGFsbG91dC1wbGFpbi1idWxsZXRzLXN0cmluZy1s ZW4gKGxlbmd0aCBhbGxvdXQtcGxhaW4tYnVsbGV0cy1zdHJpbmcpCiAgIkxlbmd0aCBvZiBgYWxs b3V0LXBsYWluLWJ1bGxldHMtc3RyaW5nJywgdXBkYXRlZCBieSBgc2V0LWFsbG91dC1yZWdleHAn LiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXBsYWluLWJ1bGxldHMtc3Ry aW5nLWxlbikKCjs7O18gICA9IGFsbG91dC1kb3VibGVjaGVjay1hdC1hbmQtc2hhbGxvd2VyCihk ZWZjb25zdCBhbGxvdXQtZG91YmxlY2hlY2stYXQtYW5kLXNoYWxsb3dlciAyCiAgIlZhbGlkYXRl IGFwcGFyZW50IHRvcGljcyBvZiB0aGlzIGRlcHRoIGFuZCBzaGFsbG93ZXIgYXMgYmVpbmcgbm9u LWFiZXJyYW50LgoKVmVyaWZpZWQgd2l0aCBgYWxsb3V0LWFiZXJyYW50LWNvbnRhaW5lci1wJy4g IFRoaXMgY2hlY2sncyB1c2VmdWxuZXNzIGlzCmxpbWl0ZWQgdG8gc2hhbGxvdyBwcm9zcGVjdHMs IGJlY2F1c2UgdGhlIGRldGVybWluYXRpb24gb2YgYWJlcnJhbmNlCmRlcGVuZHMgb24gdGhlIG1p c3Rha2VuIGl0ZW0gYmVpbmcgZm9sbG93ZWQgYnkgYSBsZWdpdGltYXRlIGl0ZW0gb2YKZXhjZXNz aXZlbHkgZ3JlYXRlciBkZXB0aC4KCkEgbGV2ZWwgb2YgMiBpcyBzYWZlc3QsIHNvIHRoYXQgeWFu a3MsIHdoaWNoIG11c3QgaWdub3JlCmFiZXJyYW5jZSB3aGlsZSByZWN0aWZ5aW5nIHRoZSB5YW5r ZWQgdGV4dCB0byB0aGVpciBuZXcgbG9jYXRpb24sCmlzIGxlYXN0IGxpa2VseSB0byBiZSBmb29s ZWQgYnkgYWJlcnJhbnQgdG9waWNzIGluIHRoZSB5YW5rZWQKdGV4dC4iKQo7OztfICAgWCBhbGxv dXQtcmVzZXQtaGVhZGVyLWxlYWQgKGhlYWRlci1sZWFkKQooZGVmdW4gYWxsb3V0LXJlc2V0LWhl YWRlci1sZWFkIChoZWFkZXItbGVhZCkKICAiKlJlc2V0IHRoZSBsZWFkaW5nIHN0cmluZyB1c2Vk IHRvIGlkZW50aWZ5IHRvcGljIGhlYWRlcnMuIgogIChpbnRlcmFjdGl2ZSAic05ldyBsZWFkIHN0 cmluZzogIikKICAoc2V0cSBhbGxvdXQtaGVhZGVyLXByZWZpeCBoZWFkZXItbGVhZCkKICAoc2V0 cSBhbGxvdXQtaGVhZGVyLXN1YnRyYWN0aW9uICgxLSAobGVuZ3RoIGFsbG91dC1oZWFkZXItcHJl Zml4KSkpCiAgKHNldC1hbGxvdXQtcmVnZXhwKSkKOzs7XyAgIFggYWxsb3V0LWxlYWQtd2l0aC1j b21tZW50LXN0cmluZyAoaGVhZGVyLWxlYWQpCihkZWZ1biBhbGxvdXQtbGVhZC13aXRoLWNvbW1l bnQtc3RyaW5nICgmb3B0aW9uYWwgaGVhZGVyLWxlYWQpCiAgIipTZXQgdGhlIHRvcGljLWhlYWRl ciBsZWFkaW5nIHN0cmluZyB0byBzcGVjaWZpZWQgc3RyaW5nLgoKVXNlZnVsIHdoZW4gZm9yIGVu Y2Fwc3VsYXRpbmcgb3V0bGluZSBzdHJ1Y3R1cmUgaW4gcHJvZ3JhbW1pbmcKbGFuZ3VhZ2UgY29t bWVudHMuICBSZXR1cm5zIHRoZSBsZWFkaW5nIHN0cmluZy4iCgogIChpbnRlcmFjdGl2ZSAiUCIp CiAgKGlmIChub3QgKHN0cmluZ3AgaGVhZGVyLWxlYWQpKQogICAgICAoc2V0cSBoZWFkZXItbGVh ZCAocmVhZC1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICJTdHJpbmcgcHJlZml4IGZv ciB0b3BpYyBoZWFkZXJzOiAiKSkpCiAgKHNldHEgYWxsb3V0LXJlaW5kZW50LWJvZGllcyBuaWwp CiAgKGFsbG91dC1yZXNldC1oZWFkZXItbGVhZCBoZWFkZXItbGVhZCkKICBoZWFkZXItbGVhZCkK Ozs7XyAgID4gYWxsb3V0LWluZmVyLWhlYWRlci1sZWFkLWFuZC1wcmltYXJ5LWJ1bGxldCAoKQoo ZGVmdW4gYWxsb3V0LWluZmVyLWhlYWRlci1sZWFkLWFuZC1wcmltYXJ5LWJ1bGxldCAoKQogICJE ZXRlcm1pbmUgYXBwcm9wcmlhdGUgYGFsbG91dC1oZWFkZXItcHJlZml4JyBhbmQgYGFsbG91dC1w cmltYXJ5LWJ1bGxldCcuCgpXb3JrcyBhY2NvcmRpbmcgdG8gc2V0dGluZ3Mgb2Y6CgogICAgICAg YGNvbW1lbnQtc3RhcnQnCiAgICAgICBgYWxsb3V0LWhlYWRlci1wcmVmaXgnIChkZWZhdWx0KQog ICAgICAgYGFsbG91dC11c2UtbW9kZS1zcGVjaWZpYy1sZWFkZXInCmFuZCAgICBgYWxsb3V0LW1v ZGUtbGVhZGVycycuCgpBcHBseSB0aGlzIHZpYSBcKHJlKWFjdGl2YXRpb24gb2YgYGFsbG91dC1t b2RlJywgcmF0aGVyIHRoYW4KaW52b2tpbmcgaXQgZGlyZWN0bHkuIgogIChsZXQqICgodXNlLWxl YWRlciAoYW5kIChib3VuZHAgJ2FsbG91dC11c2UtbW9kZS1zcGVjaWZpYy1sZWFkZXIpCgkJCSAg KGlmIChvciAoc3RyaW5ncCBhbGxvdXQtdXNlLW1vZGUtc3BlY2lmaWMtbGVhZGVyKQoJCQkJICAo bWVtcSBhbGxvdXQtdXNlLW1vZGUtc3BlY2lmaWMtbGVhZGVyCgkJCQkJJyhhbGxvdXQtbW9kZS1s ZWFkZXJzCgkJCQkJICBjb21tZW50LXN0YXJ0CgkJCQkJICB0KSkpCgkJCSAgICAgIGFsbG91dC11 c2UtbW9kZS1zcGVjaWZpYy1sZWFkZXIKCQkJICAgIDs7IE9vcHMgLSBnYXJibGVkIHZhbHVlLCBl cXVhdGUgd2l0aCBlZmZlY3Qgb2YgJ3Q6CgkJCSAgICB0KSkpCgkgKGxlYWRlcgoJICAoY29uZAoJ ICAgKChub3QgdXNlLWxlYWRlcikgbmlsKQoJICAgOzsgVXNlIHRoZSBleHBsaWNpdGx5IGRlc2ln bmF0ZWQgbGVhZGVyOgoJICAgKChzdHJpbmdwIHVzZS1sZWFkZXIpIHVzZS1sZWFkZXIpCgkgICAo dCAob3IgKGFuZCAobWVtcSB1c2UtbGVhZGVyICcodCBhbGxvdXQtbW9kZS1sZWFkZXJzKSkKCQkg ICAgICAgOzsgR2V0IGl0IGZyb20gb3V0bGluZSBtb2RlIGxlYWRlcnM/CgkJICAgICAgIChjZHIg KGFzc3EgbWFqb3ItbW9kZSBhbGxvdXQtbW9kZS1sZWFkZXJzKSkpCgkJICA7OyAuLi4gZGlkbid0 IGdldCBmcm9tIGFsbG91dC1tb2RlLWxlYWRlcnMuLi4KCQkgIChhbmQgKG1lbXEgdXNlLWxlYWRl ciAnKHQgY29tbWVudC1zdGFydCkpCgkJICAgICAgIGNvbW1lbnQtc3RhcnQKCQkgICAgICAgOzsg VXNlIGNvbW1lbnQtc3RhcnQsIG1heWJlIHRyaXBsZWQsIGFuZCB3aXRoCgkJICAgICAgIDs7IHVu ZGVyc2NvcmU6CgkJICAgICAgIChjb25jYXQKCQkJKGlmIChzdHJpbmc9ICIgIgoJCQkJICAgICAo c3Vic3RyaW5nIGNvbW1lbnQtc3RhcnQKCQkJCQkJKDEtIChsZW5ndGggY29tbWVudC1zdGFydCkp KSkKCQkJICAgIDs7IFVzZSBjb21tZW50LXN0YXJ0LCBzYW5zIHRyYWlsaW5nIHNwYWNlOgoJCQkg ICAgKHN1YnN0cmluZyBjb21tZW50LXN0YXJ0IDAgLTEpCgkJCSAgKGNvbmNhdCBjb21tZW50LXN0 YXJ0IGNvbW1lbnQtc3RhcnQgY29tbWVudC1zdGFydCkpCgkJCTs7IC4uLiBhbmQgYXBwZW5kIHVu ZGVyc2NvcmUsIHdoaWNoZXZlcjoKCQkJIl8iKSkpKSkpKQogICAgKGlmIChub3QgbGVhZGVyKQoJ bmlsCiAgICAgIChzZXRxIGFsbG91dC1oZWFkZXItcHJlZml4IGxlYWRlcikKICAgICAgKGlmIChu b3QgYWxsb3V0LW9sZC1zdHlsZS1wcmVmaXhlcykKICAgICAgICAgIDs7IHNldHRpbmcgYWxsb3V0 LXByaW1hcnktYnVsbGV0IG1ha2VzIHRoZSB0b3AgbGV2ZWwgdG9waWNzIHVzZSAtCiAgICAgICAg ICA7OyBhY3R1YWxseSwgYmUgLSB0aGUgc3BlY2lhbCBwcmVmaXg6CiAgICAgICAgICAoc2V0cSBh bGxvdXQtcHJpbWFyeS1idWxsZXQgbGVhZGVyKSkKICAgICAgYWxsb3V0LWhlYWRlci1wcmVmaXgp KSkKKGRlZmFsaWFzICdhbGxvdXQtaW5mZXItaGVhZGVyLWxlYWQKICAnYWxsb3V0LWluZmVyLWhl YWRlci1sZWFkLWFuZC1wcmltYXJ5LWJ1bGxldCkKOzs7XyAgID4gYWxsb3V0LWluZmVyLWJvZHkt cmVpbmRlbnQgKCkKKGRlZnVuIGFsbG91dC1pbmZlci1ib2R5LXJlaW5kZW50ICgpCiAgIkRldGVy bWluZSBwcm9wZXIgc2V0dGluZyBmb3IgYGFsbG91dC1yZWluZGVudC1ib2RpZXMnLgoKRGVwZW5k cyBvbiBkZWZhdWx0IHNldHRpbmcgb2YgYGFsbG91dC1yZWluZGVudC1ib2RpZXMnIFwod2hpY2gg c2VlKQphbmQgcHJlc2VuY2Ugb2Ygc2V0dGluZyBmb3IgYGNvbW1lbnQtc3RhcnQnLCB0byB0ZWxs IHdoZXRoZXIgdGhlCmZpbGUgaXMgcHJvZ3JhbW1pbmcgY29kZS4iCiAgKGlmIChhbmQgYWxsb3V0 LXJlaW5kZW50LWJvZGllcwoJICAgY29tbWVudC1zdGFydAoJICAgKG5vdCAoZXEgJ2ZvcmNlIGFs bG91dC1yZWluZGVudC1ib2RpZXMpKSkKICAgICAgKHNldHEgYWxsb3V0LXJlaW5kZW50LWJvZGll cyBuaWwpKSkKOzs7XyAgID4gc2V0LWFsbG91dC1yZWdleHAgKCkKKGRlZnVuIHNldC1hbGxvdXQt cmVnZXhwICgpCiAgIkdlbmVyYXRlIHByb3BlciB0b3BpYy1oZWFkZXIgcmVnZXhwIGZvcm0gZm9y IG91dGxpbmUgZnVuY3Rpb25zLgoKV29ya3Mgd2l0aCByZXNwZWN0IHRvIGBhbGxvdXQtcGxhaW4t YnVsbGV0cy1zdHJpbmcnIGFuZApgYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMtc3RyaW5nJy4K CkFsc28gcmVmcmVzaCB2YXJpb3VzIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhpbmdlIG9uIHRoZSBy ZWdleHAuIgoKICAoaW50ZXJhY3RpdmUpCiAgOzsgRGVyaXZlIGFsbG91dC1idWxsZXRzLXN0cmlu ZyBmcm9tIHVzZXIgY29uZmlndXJlZCBjb21wb25lbnRzOgogIChzZXRxIGFsbG91dC1idWxsZXRz LXN0cmluZyAiIikKICAobGV0ICgoc3RyaW5ncyAobGlzdCAnYWxsb3V0LXBsYWluLWJ1bGxldHMt c3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRz LXN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICdhbGxvdXQtcHJpbWFyeS1idWxsZXQpKQog ICAgICAgIGN1ci1zdHJpbmcKICAgICAgICBjdXItbGVuCiAgICAgICAgY3VyLWNoYXIKICAgICAg ICBpbmRleCkKICAgICh3aGlsZSBzdHJpbmdzCiAgICAgIChzZXRxIGluZGV4IDApCiAgICAgIChz ZXRxIGN1ci1sZW4gKGxlbmd0aCAoc2V0cSBjdXItc3RyaW5nIChzeW1ib2wtdmFsdWUgKGNhciBz dHJpbmdzKSkpKSkKICAgICAgKHdoaWxlICg8IGluZGV4IGN1ci1sZW4pCiAgICAgICAgKHNldHEg Y3VyLWNoYXIgKGFyZWYgY3VyLXN0cmluZyBpbmRleCkpCiAgICAgICAgKHNldHEgYWxsb3V0LWJ1 bGxldHMtc3RyaW5nCiAgICAgICAgICAgICAgKGNvbmNhdCBhbGxvdXQtYnVsbGV0cy1zdHJpbmcK ICAgICAgICAgICAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7IFNpbmdsZSBkYXNoIHdvdWxkIGRlbm90ZSBhCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7IHNlcXVlbmNlLCByZXBlYXRlZCBkZW5vdGVzCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGEgZGFzaDoKICAgICAgICAgICAg ICAgICAgICAgICAoKGVxIGN1ci1jaGFyID8tKSAiLS0iKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOyBsaXRlcmFsIGNsb3NlLXNxdWFyZS1icmFja2V0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGRvZXNuJ3Qgd29yayByaWdodCBpbiB0 aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZXhwciwgZXhjbHVk ZSBpdDoKICAgICAgICAgICAgICAgICAgICAgICAoKGVxIGN1ci1jaGFyID9cXSkgIiIpCiAgICAg ICAgICAgICAgICAgICAgICAgKHQgKHJlZ2V4cC1xdW90ZSAgKGNoYXItdG8tc3RyaW5nIGN1ci1j aGFyKSkpKSkpCiAgICAgICAgKHNldHEgaW5kZXggKDErIGluZGV4KSkpCiAgICAgIChzZXRxIHN0 cmluZ3MgKGNkciBzdHJpbmdzKSkpCiAgICApCiAgOzsgRGVyaXZlIG5leHQgZm9yIHJlcGVhdGVk IHVzZSBpbiBhbGxvdXQtcGVuZGluZy1idWxsZXQ6CiAgKHNldHEgYWxsb3V0LXBsYWluLWJ1bGxl dHMtc3RyaW5nLWxlbiAobGVuZ3RoIGFsbG91dC1wbGFpbi1idWxsZXRzLXN0cmluZykpCiAgKHNl dHEgYWxsb3V0LWhlYWRlci1zdWJ0cmFjdGlvbiAoMS0gKGxlbmd0aCBhbGxvdXQtaGVhZGVyLXBy ZWZpeCkpKQoKICAobGV0IChuZXctcGFydCBvbGQtcGFydCkKICAgIChzZXRxIG5ldy1wYXJ0IChj b25jYXQgIlxcKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1xdW90ZSBhbGxv dXQtaGVhZGVyLXByZWZpeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlsgXHRdKiIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgOzsgYWxyZWFkeSByZWdleHAtcXVvdGVkIGluIGEgY3Vz dG9tIHdheToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlsiIGFsbG91dC1idWxsZXRzLXN0 cmluZyAiXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcKSIpCiAgICAgICAgICBvbGQt cGFydCAoY29uY2F0ICJcXCgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWdleHAtcXVv dGUgYWxsb3V0LXByaW1hcnktYnVsbGV0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx8 IgogICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnZXhwLXF1b3RlIGFsbG91dC1oZWFkZXIt cHJlZml4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAiXFwpIgogICAgICAgICAgICAgICAg ICAgICAgICAgICAiKyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA/W14iIGFsbG91dC1w cmltYXJ5LWJ1bGxldCAiXSIpCiAgICAgICAgICBhbGxvdXQtcmVnZXhwIChjb25jYXQgbmV3LXBh cnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx8IgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9sZC1wYXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlxcfFxebCIpCgogICAgICAgICAgYWxsb3V0LWxpbmUtYm91bmRhcnktcmVnZXhwIChjb25jYXQg IlxuIiBuZXctcGFydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlxcfCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJc biIgb2xkLXBhcnQpCgogICAgICAgICAgYWxsb3V0LWJvYi1yZWdleHAgKGNvbmNhdCAiXFxgIiBu ZXctcGFydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx8IgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFxgIiBvbGQtcGFydCkpCgogICAgKHNldHEg YWxsb3V0LWRlcHRoLXNwZWNpZmljLXJlZ2V4cAogICAgICAgICAgKGNvbmNhdCAiXFwoXlxcfFxc YFxcKSIKICAgICAgICAgICAgICAgICAgIlxcKCIKCiAgICAgICAgICAgICAgICAgIDs7IG5ldy1z dHlsZSBzcGFjZXJzLXRoZW4tYnVsbGV0IHN0cmluZzoKICAgICAgICAgICAgICAgICAgIlxcKCIK ICAgICAgICAgICAgICAgICAgKGFsbG91dC1mb3JtYXQtcXVvdGUgKHJlZ2V4cC1xdW90ZSBhbGxv dXQtaGVhZGVyLXByZWZpeCkpCiAgICAgICAgICAgICAgICAgICIgXFx7JXNcXH0iCiAgICAgICAg ICAgICAgICAgICJbIiAoYWxsb3V0LWZvcm1hdC1xdW90ZSBhbGxvdXQtYnVsbGV0cy1zdHJpbmcp ICJdIgogICAgICAgICAgICAgICAgICAiXFwpIgoKICAgICAgICAgICAgICAgICAgOzsgb2xkLXN0 eWxlIGFsbC1idWxsZXRzIHN0cmluZywgaWYgcHJpbWFyeSBub3QgbXVsdGktY2hhcjoKICAgICAg ICAgICAgICAgICAgKGlmICg8IDAgYWxsb3V0LWhlYWRlci1zdWJ0cmFjdGlvbikKICAgICAgICAg ICAgICAgICAgICAgICIiCiAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiXFx8XFwoIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1mb3JtYXQtcXVvdGUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVnZXhwLXF1b3RlIGFsbG91dC1wcmltYXJ5LWJ1bGxldCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWZvcm1hdC1xdW90ZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChyZWdleHAtcXVvdGUgYWxsb3V0LXByaW1hcnktYnVsbGV0KSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZm9ybWF0LXF1b3RlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHJlZ2V4cC1xdW90ZSBhbGxvdXQtcHJpbWFyeS1idWxsZXQp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxceyVzXFx9IgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgOzsgZGlzcXVhbGlmeSBncmVhdGVyIGRlcHRoczoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJbXiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZm9y bWF0LXF1b3RlIGFsbG91dC1wcmltYXJ5LWJ1bGxldCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJdXFwpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKICAgICAgICAgICAgICAg ICAgIlxcKSIKICAgICAgICAgICAgICAgICAgKSkKICAgIChzZXRxIGFsbG91dC1kZXB0aC1vbmUt cmVnZXhwCiAgICAgICAgICAoY29uY2F0ICJcXCheXFx8XFxgXFwpIgogICAgICAgICAgICAgICAg ICAiXFwoIgoKICAgICAgICAgICAgICAgICAgIlxcKCIKICAgICAgICAgICAgICAgICAgKHJlZ2V4 cC1xdW90ZSBhbGxvdXQtaGVhZGVyLXByZWZpeCkKICAgICAgICAgICAgICAgICAgOzsgZGlzcXVh bGlmeSBhbnkgYnVsbGV0IGNoYXIgZm9sbG93aW5nIGFueSBhbW91bnQgb2YKICAgICAgICAgICAg ICAgICAgOzsgaW50ZXJ2ZW5pbmcgd2hpdGVzcGFjZToKICAgICAgICAgICAgICAgICAgIiAqIgog ICAgICAgICAgICAgICAgICAoY29uY2F0ICJbXiAiIGFsbG91dC1idWxsZXRzLXN0cmluZyAiXSIp CiAgICAgICAgICAgICAgICAgICJcXCkiCiAgICAgICAgICAgICAgICAgIChpZiAoPCAwIGFsbG91 dC1oZWFkZXItc3VidHJhY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICA7OyBOZWVkIG5vdCBz dXBwb3J0IGFueXRoaW5nIGxpa2UgdGhlIG9sZAogICAgICAgICAgICAgICAgICAgICAgOzsgYnVs bGV0IHN0eWxlIGlmIHRoZSBwcmVmaXggaXMgbXVsdGktY2hhci4KICAgICAgICAgICAgICAgICAg ICAgICIiCiAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiXFx8IgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHJlZ2V4cC1xdW90ZSBhbGxvdXQtcHJpbWFyeS1idWxsZXQpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7OyBkaXNxdWFsaWZ5IGRlZXBlciBwcmltYXJ5LWJ1bGxldCBz ZXF1ZW5jZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW14iIGFsbG91dC1wcmltYXJ5 LWJ1bGxldCAiXSIpKQogICAgICAgICAgICAgICAgICAiXFwpIgogICAgICAgICAgICAgICAgICAp KSkpCjs7O18gIDogS2V5IGJpbmRpbmdzCjs7O18gICA9IGFsbG91dC1tb2RlLW1hcAooZGVmdmFy IGFsbG91dC1tb2RlLW1hcCBuaWwgIktleWJpbmRpbmdzIGZvciAoYWxsb3V0KSBvdXRsaW5lIG1p bm9yIG1vZGUuIikKOzs7XyAgID4gcHJvZHVjZS1hbGxvdXQtbW9kZS1tYXAgKGtleW1hcC1hbGlz dCAmb3B0aW9uYWwgYmFzZS1tYXApCihkZWZ1biBwcm9kdWNlLWFsbG91dC1tb2RlLW1hcCAoa2V5 bWFwLWxpc3QgJm9wdGlvbmFsIGJhc2UtbWFwKQogICJQcm9kdWNlIGtleW1hcCBmb3IgdXNlIGFz IGFsbG91dC1tb2RlLW1hcCwgZnJvbSBLRVlNQVAtTElTVC4KCkJ1aWx0IG9uIHRvcCBvZiBvcHRp b25hbCBCQVNFLU1BUCwgb3IgZW1wdHkgc3BhcnNlIG1hcCBpZiBub25lIHNwZWNpZmllZC4KU2Vl IGRvYyBzdHJpbmcgZm9yIGFsbG91dC1rZXliaW5kaW5ncy1saXN0IGZvciBmb3JtYXQgb2YgYmlu ZGluZyBsaXN0LiIKICAobGV0ICgobWFwIChvciBiYXNlLW1hcCAobWFrZS1zcGFyc2Uta2V5bWFw KSkpCgkocHJlZiAobGlzdCBhbGxvdXQtY29tbWFuZC1wcmVmaXgpKSkKICAgIChtYXBjYXIgKGZ1 bmN0aW9uCgkgICAgIChsYW1iZGEgKGNlbGwpCgkgICAgICAgKGxldCAoKGFkZC1wcmVmIChudWxs IChjZHIgKGNkciBjZWxsKSkpKQoJCSAgICAgKGtleS1zdWZmIChsaXN0IChjYXIgY2VsbCkpKSkK CQkgKGFwcGx5ICdkZWZpbmUta2V5CgkJCShsaXN0IG1hcAoJCQkgICAgICAoYXBwbHkgJ2NvbmNh dCAoaWYgYWRkLXByZWYKCQkJCQkJIChhcHBlbmQgcHJlZiBrZXktc3VmZikKCQkJCQkgICAgICAg a2V5LXN1ZmYpKQoJCQkgICAgICAoY2FyIChjZHIgY2VsbCkpKSkpKSkKCSAgICBrZXltYXAtbGlz dCkKICAgIG1hcCkpCjs7O18gIDogTWVudSBiYXIKKGRlZnZhciBhbGxvdXQtbW9kZS1leHBvc3Vy ZS1tZW51KQooZGVmdmFyIGFsbG91dC1tb2RlLWVkaXRpbmctbWVudSkKKGRlZnZhciBhbGxvdXQt bW9kZS1uYXZpZ2F0aW9uLW1lbnUpCihkZWZ2YXIgYWxsb3V0LW1vZGUtbWlzYy1tZW51KQooZGVm dW4gcHJvZHVjZS1hbGxvdXQtbW9kZS1tZW51YmFyLWVudHJpZXMgKCkKICAocmVxdWlyZSAnZWFz eW1lbnUpCiAgKGVhc3ktbWVudS1kZWZpbmUgYWxsb3V0LW1vZGUtZXhwb3N1cmUtbWVudQoJCSAg ICBhbGxvdXQtbW9kZS1tYXAKCQkgICAgIkFsbG91dCBvdXRsaW5lIGV4cG9zdXJlIG1lbnUuIgoJ CSAgICAnKCJFeHBvc3VyZSIKCQkgICAgICBbIlNob3cgRW50cnkiIGFsbG91dC1zaG93LWN1cnJl bnQtZW50cnkgdF0KCQkgICAgICBbIlNob3cgQ2hpbGRyZW4iIGFsbG91dC1zaG93LWNoaWxkcmVu IHRdCgkJICAgICAgWyJTaG93IFN1YnRyZWUiIGFsbG91dC1zaG93LWN1cnJlbnQtc3VidHJlZSB0 XQoJCSAgICAgIFsiSGlkZSBTdWJ0cmVlIiBhbGxvdXQtaGlkZS1jdXJyZW50LXN1YnRyZWUgdF0K CQkgICAgICBbIkhpZGUgTGVhdmVzIiBhbGxvdXQtaGlkZS1jdXJyZW50LWxlYXZlcyB0XQoJCSAg ICAgICItLS0tIgoJCSAgICAgIFsiU2hvdyBBbGwiIGFsbG91dC1zaG93LWFsbCB0XSkpCiAgKGVh c3ktbWVudS1kZWZpbmUgYWxsb3V0LW1vZGUtZWRpdGluZy1tZW51CgkJICAgIGFsbG91dC1tb2Rl LW1hcAoJCSAgICAiQWxsb3V0IG91dGxpbmUgZWRpdGluZyBtZW51LiIKCQkgICAgJygiSGVhZGlu Z3MiCgkJICAgICAgWyJPcGVuIFNpYmxpbmciIGFsbG91dC1vcGVuLXNpYnRvcGljIHRdCgkJICAg ICAgWyJPcGVuIFN1YnRvcGljIiBhbGxvdXQtb3Blbi1zdWJ0b3BpYyB0XQoJCSAgICAgIFsiT3Bl biBTdXBlcnRvcGljIiBhbGxvdXQtb3Blbi1zdXBlcnRvcGljIHRdCgkJICAgICAgIi0tLS0iCgkJ ICAgICAgWyJTaGlmdCBUb3BpYyBJbiIgYWxsb3V0LXNoaWZ0LWluIHRdCgkJICAgICAgWyJTaGlm dCBUb3BpYyBPdXQiIGFsbG91dC1zaGlmdC1vdXQgdF0KCQkgICAgICBbIlJlYnVsbGV0IFRvcGlj IiBhbGxvdXQtcmVidWxsZXQtdG9waWMgdF0KCQkgICAgICBbIlJlYnVsbGV0IEhlYWRpbmciIGFs bG91dC1yZWJ1bGxldC1jdXJyZW50LWhlYWRpbmcgdF0KCQkgICAgICBbIk51bWJlciBTaWJsaW5n cyIgYWxsb3V0LW51bWJlci1zaWJsaW5ncyB0XQoJCSAgICAgICItLS0tIgogICAgICAgICAgICAg ICAgICAgICAgWyJUb2dnbGUgVG9waWMgRW5jcnlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAg ICBhbGxvdXQtdG9nZ2xlLWN1cnJlbnQtc3VidHJlZS1lbmNyeXB0aW9uCiAgICAgICAgICAgICAg ICAgICAgICAgKD4gKGFsbG91dC1jdXJyZW50LWRlcHRoKSAxKV0pKQogIChlYXN5LW1lbnUtZGVm aW5lIGFsbG91dC1tb2RlLW5hdmlnYXRpb24tbWVudQoJCSAgICBhbGxvdXQtbW9kZS1tYXAKCQkg ICAgIkFsbG91dCBvdXRsaW5lIG5hdmlnYXRpb24gbWVudS4iCgkJICAgICcoIk5hdmlnYXRpb24i CgkJICAgICAgWyJOZXh0IFZpc2libGUgSGVhZGluZyIgYWxsb3V0LW5leHQtdmlzaWJsZS1oZWFk aW5nIHRdCgkJICAgICAgWyJQcmV2aW91cyBWaXNpYmxlIEhlYWRpbmciCgkJICAgICAgIGFsbG91 dC1wcmV2aW91cy12aXNpYmxlLWhlYWRpbmcgdF0KCQkgICAgICAiLS0tLSIKCQkgICAgICBbIlVw IExldmVsIiBhbGxvdXQtdXAtY3VycmVudC1sZXZlbCB0XQoJCSAgICAgIFsiRm9yd2FyZCBDdXJy ZW50IExldmVsIiBhbGxvdXQtZm9yd2FyZC1jdXJyZW50LWxldmVsIHRdCgkJICAgICAgWyJCYWNr d2FyZCBDdXJyZW50IExldmVsIgoJCSAgICAgICBhbGxvdXQtYmFja3dhcmQtY3VycmVudC1sZXZl bCB0XQoJCSAgICAgICItLS0tIgoJCSAgICAgIFsiQmVnaW5uaW5nIG9mIEVudHJ5IgoJCSAgICAg ICBhbGxvdXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtZW50cnkgdF0KCQkgICAgICBbIkVuZCBvZiBF bnRyeSIgYWxsb3V0LWVuZC1vZi1lbnRyeSB0XQoJCSAgICAgIFsiRW5kIG9mIFN1YnRyZWUiIGFs bG91dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVlIHRdKSkKICAoZWFzeS1tZW51LWRlZmluZSBhbGxv dXQtbW9kZS1taXNjLW1lbnUKCQkgICAgYWxsb3V0LW1vZGUtbWFwCgkJICAgICJBbGxvdXQgb3V0 bGluZXMgbWlzY2VsbGFuZW91cyBiaW5kaW5ncy4iCgkJICAgICcoIk1pc2MiCgkJICAgICAgWyJW ZXJzaW9uIiBhbGxvdXQtdmVyc2lvbiB0XQoJCSAgICAgICItLS0tIgoJCSAgICAgIFsiRHVwbGlj YXRlIEV4cG9zZWQiIGFsbG91dC1jb3B5LWV4cG9zZWQtdG8tYnVmZmVyIHRdCgkJICAgICAgWyJE dXBsaWNhdGUgRXhwb3NlZCwgbnVtYmVyZWQiCgkJICAgICAgIGFsbG91dC1mbGF0dGVuLWV4cG9z ZWQtdG8tYnVmZmVyIHRdCgkJICAgICAgWyJEdXBsaWNhdGUgRXhwb3NlZCwgaW5kZW50ZWQiCgkJ ICAgICAgIGFsbG91dC1pbmRlbnRlZC1leHBvc2VkLXRvLWJ1ZmZlciB0XQoJCSAgICAgICItLS0t IgoJCSAgICAgIFsiU2V0IEhlYWRlciBMZWFkIiBhbGxvdXQtcmVzZXQtaGVhZGVyLWxlYWQgdF0K CQkgICAgICBbIlNldCBOZXcgRXhwb3N1cmUiIGFsbG91dC1leHBvc2UtdG9waWMgdF0pKSkKOzs7 XyAgOiBBbGxvdXQgTW9kYWwtVmFyaWFibGVzIFV0aWxpdGllcwo7OztfICAgPSBhbGxvdXQtbW9k ZS1wcmlvci1zZXR0aW5ncwooZGVmdmFyIGFsbG91dC1tb2RlLXByaW9yLXNldHRpbmdzIG5pbAog ICJJbnRlcm5hbCBgYWxsb3V0LW1vZGUnIHVzZTsgc2V0dGluZ3MgdG8gYmUgcmVzdW1lZCBvbiBt b2RlIGRlYWN0aXZhdGlvbi4KClNlZSBgYWxsb3V0LWFkZC1yZXN1bXB0aW9ucycgYW5kIGBhbGxv dXQtZG8tcmVzdW1wdGlvbnMnLiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0 LW1vZGUtcHJpb3Itc2V0dGluZ3MpCjs7O18gICA+IGFsbG91dC1hZGQtcmVzdW1wdGlvbnMgKCZy ZXN0IHBhaXJzKQooZGVmdW4gYWxsb3V0LWFkZC1yZXN1bXB0aW9ucyAoJnJlc3QgcGFpcnMpCiAg IlNldCBuYW1lL3ZhbHVlIFBBSVJTLgoKT2xkIHNldHRpbmdzIGFyZSBwcmVzZXJ2ZWQgZm9yIGxh dGVyIHJlc3VtcHRpb24gdXNpbmcgYGFsbG91dC1kby1yZXN1bXB0aW9ucycuCgpUaGUgbmV3IHZh bHVlcyBhcmUgc2V0IGFzIGEgYnVmZmVyIGxvY2FsLiAgT24gcmVzdW1wdGlvbiwgdGhlIHByaW9y IGJ1ZmZlcgpzY29wZSBvZiB0aGUgdmFyaWFibGUgaXMgcmVzdG9yZWQgYWxvbmcgd2l0aCBpdHMg dmFsdWUuICBJZiBpdCB3YXMgYSB2b2lkCmJ1ZmZlci1sb2NhbCB2YWx1ZSwgdGhlbiBpdCBpcyBs ZWZ0IGFzIG5pbCBvbiByZXN1bXB0aW9uLgoKVGhlIHBhaXJzIGFyZSBsaXN0cyB3aG9zZSBjYXIg aXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGFuZCBjYXIgb2YgdGhlCmNkciBpcyB0aGUgbmV3 IHZhbHVlOiAnKHNvbWUtdmFyIHNvbWUtdmFsdWUpJy4gIFRoZSBwYWlycyBjYW4gYWN0dWFsbHkg YmUKdHJpcGxlcywgd2hlcmUgdGhlIHRoaXJkIGVsZW1lbnQgcXVhbGlmaWVzIHRoZSBkaXNwb3Np dGlvbiBvZiB0aGUgc2V0dGluZywKYXMgZGVzY3JpYmVkIGZ1cnRoZXIgYmVsb3cuCgpJZiB0aGUg b3B0aW9uYWwgdGhpcmQgZWxlbWVudCBpcyB0aGUgc3ltYm9sICdleHRlbmQsIHRoZW4gdGhlIG5l dyB2YWx1ZQpjcmVhdGVkIGJ5IGBjb25zJ2luZyB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIHBh aXIgb250byB0aGUgZnJvbnQgb2YgdGhlCmV4aXN0aW5nIHZhbHVlLgoKSWYgdGhlIG9wdGlvbmFs IHRoaXJkIGVsZW1lbnQgaXMgdGhlIHN5bWJvbCAnYXBwZW5kLCB0aGVuIHRoZSBuZXcgdmFsdWUg aXMKZXh0ZW5kZWQgZnJvbSB0aGUgZXhpc3Rpbmcgb25lIGJ5IGBhcHBlbmQnaW5nIGEgbGlzdCBj b250YWluaW5nIHRoZSBzZWNvbmQKZWxlbWVudCBvZiB0aGUgcGFpciBvbnRvIHRoZSBlbmQgb2Yg dGhlIGV4aXN0aW5nIHZhbHVlLgoKRXh0ZW5zaW9uLCBhbmQgcmVzdW1wdGlvbnMgaW4gZ2VuZXJh bCwgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBob29rCmZ1bmN0aW9ucyAtIHVzZSB0aGUgJ2xvY2Fs IG1vZGUgb2YgYGFkZC1ob29rJyBmb3IgdGhhdCwgaW5zdGVhZC4KClRoZSBzZXR0aW5ncyBhcmUg c3RvcmVkIG9uIGBhbGxvdXQtbW9kZS1wcmlvci1zZXR0aW5ncycuIgogICh3aGlsZSBwYWlycwog ICAgKGxldCogKChwYWlyIChwb3AgcGFpcnMpKQogICAgICAgICAgIChuYW1lIChjYXIgcGFpcikp CiAgICAgICAgICAgKHZhbHVlIChjYWRyIHBhaXIpKQogICAgICAgICAgIChxdWFsaWZpZXIgKGlm ICg+IChsZW5ndGggcGFpcikgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FkZHIgcGFp cikpKQogICAgICAgICAgIHByaW9yLXZhbHVlKQogICAgICAoaWYgKG5vdCAoc3ltYm9scCBuYW1l KSkKICAgICAgICAgIChlcnJvciAiUGFpcidzIG5hbWUsICVTLCBtdXN0IGJlIGEgc3ltYm9sLCBu b3QgJXMiCiAgICAgICAgICAgICAgICAgbmFtZSAodHlwZS1vZiBuYW1lKSkpCiAgICAgIChzZXRx IHByaW9yLXZhbHVlIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzeW1ib2wtdmFsdWUgbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZC12 YXJpYWJsZSBuaWwpKSkKICAgICAgKHdoZW4gKG5vdCAoYXNzb2MgbmFtZSBhbGxvdXQtbW9kZS1w cmlvci1zZXR0aW5ncykpCiAgICAgICAgOzsgTm90IGFscmVhZHkgYWRkZWQgYXMgYSByZXN1bXB0 aW9uLCBjcmVhdGUgdGhlIHByaW9yIHNldHRpbmcgZW50cnkuCiAgICAgICAgKGlmIChsb2NhbC12 YXJpYWJsZS1wIG5hbWUpCiAgICAgICAgICAgIDs7IGlzIGFscmVhZHkgbG9jYWwgdmFyaWFibGUg LSBwcmVzZXJ2ZSB0aGUgcHJpb3IgdmFsdWU6CiAgICAgICAgICAgIChwdXNoIChsaXN0IG5hbWUg cHJpb3ItdmFsdWUpIGFsbG91dC1tb2RlLXByaW9yLXNldHRpbmdzKQogICAgICAgICAgOzsgd2Fz bid0IGxvY2FsIHZhcmlhYmxlLCBpbmRpY2F0ZSBzbyBmb3IgcmVzdW1wdGlvbiBieSBraWxsaW5n CiAgICAgICAgICA7OyBsb2NhbCB2YWx1ZSwgYW5kIG1ha2UgaXQgbG9jYWw6CiAgICAgICAgICAo cHVzaCAobGlzdCBuYW1lKSBhbGxvdXQtbW9kZS1wcmlvci1zZXR0aW5ncykKICAgICAgICAgICht YWtlLWxvY2FsLXZhcmlhYmxlIG5hbWUpKSkKICAgICAgKGlmIHF1YWxpZmllcgogICAgICAgICAg KGNvbmQgKChlcSBxdWFsaWZpZXIgJ2V4dGVuZCkKICAgICAgICAgICAgICAgICAoaWYgKG5vdCAo bGlzdHAgcHJpb3ItdmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAoZXJyb3IgImV4dGVuc2lv biBvZiBub24tbGlzdCBwcmlvciB2YWx1ZSBhdHRlbXB0ZWQiKQogICAgICAgICAgICAgICAgICAg KHNldCBuYW1lIChjb25zIHZhbHVlIHByaW9yLXZhbHVlKSkpKQogICAgICAgICAgICAgICAgKChl cSBxdWFsaWZpZXIgJ2FwcGVuZCkKICAgICAgICAgICAgICAgICAoaWYgKG5vdCAobGlzdHAgcHJp b3ItdmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAoZXJyb3IgImFwcGVuZGluZyBvZiBub24t bGlzdCBwcmlvciB2YWx1ZSBhdHRlbXB0ZWQiKQogICAgICAgICAgICAgICAgICAgKHNldCBuYW1l IChhcHBlbmQgcHJpb3ItdmFsdWUgKGxpc3QgdmFsdWUpKSkpKQogICAgICAgICAgICAgICAgKHQg KGVycm9yICJ1bnJlY29nbml6ZWQgc2V0dGluZyBxdWFsaWZpZXIgYCVzJyBlbmNvdW50ZXJlZCIK ICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZXIpKSkKICAgICAgICAoc2V0IG5hbWUg dmFsdWUpKSkpKQo7OztfICAgPiBhbGxvdXQtZG8tcmVzdW1wdGlvbnMgKCkKKGRlZnVuIGFsbG91 dC1kby1yZXN1bXB0aW9ucyAoKQogICJSZXN1bWUgYWxsIG5hbWUvdmFsdWUgc2V0dGluZ3MgcmVn aXN0ZXJlZCBieSBgYWxsb3V0LWFkZC1yZXN1bXB0aW9ucycuCgpUaGlzIGlzIHVzZWQgd2hlbiBj b25jbHVkaW5nIGFsbG91dC1tb2RlLCB0byByZXN1bWUgc2VsZWN0ZWQgdmFyaWFibGVzIHRvCnRo ZWlyIHNldHRpbmdzIGJlZm9yZSBhbGxvdXQtbW9kZSB3YXMgc3RhcnRlZC4iCgogICAgKHdoaWxl IGFsbG91dC1tb2RlLXByaW9yLXNldHRpbmdzCiAgICAgIChsZXQqICgocGFpciAocG9wIGFsbG91 dC1tb2RlLXByaW9yLXNldHRpbmdzKSkKICAgICAgICAgICAgIChuYW1lIChjYXIgcGFpcikpCiAg ICAgICAgICAgICAodmFsdWUtY2VsbCAoY2RyIHBhaXIpKSkKICAgICAgICAoaWYgKG5vdCB2YWx1 ZS1jZWxsKQogICAgICAgICAgICA7OyBQcmlvciB2YWx1ZSB3YXMgZ2xvYmFsOgogICAgICAgICAg ICAoa2lsbC1sb2NhbC12YXJpYWJsZSBuYW1lKQogICAgICAgICAgOzsgUHJpb3IgdmFsdWUgd2Fz IGV4cGxpY2l0OgogICAgICAgICAgKHNldCBuYW1lIChjYXIgdmFsdWUtY2VsbCkpKSkpKQo7Oztf ICA6IE1vZGUtc3BlY2lmaWMgaW5jaWRlbnRhbHMKOzs7XyAgID4gYWxsb3V0LXVucHJvdGVjdGVk IChleHByKQooZGVmbWFjcm8gYWxsb3V0LXVucHJvdGVjdGVkIChleHByKQogICJFbmFibGUgaW50 ZXJuYWwgb3V0bGluZSBvcGVyYXRpb25zIHRvIGFsdGVyIGludmlzaWJsZSB0ZXh0LiIKICBgKGxl dCAoKGluaGliaXQtcmVhZC1vbmx5IChpZiAobm90IGJ1ZmZlci1yZWFkLW9ubHkpIHQpKQogICAg ICAgICAoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KSkKICAgICAsZXhwcikpCjs7O18gICA9 IGFsbG91dC1tb2RlLWhvb2sKKGRlZnZhciBhbGxvdXQtbW9kZS1ob29rIG5pbAogICIqSG9vayB0 aGF0J3MgcnVuIHdoZW4gYWxsb3V0IG1vZGUgc3RhcnRzLiIpCjs7O18gICA9IGFsbG91dC1tb2Rl LWRlYWN0aXZhdGUtaG9vawooZGVmdmFyIGFsbG91dC1tb2RlLWRlYWN0aXZhdGUtaG9vayBuaWwK ICAiKkhvb2sgdGhhdCdzIHJ1biB3aGVuIGFsbG91dCBtb2RlIGVuZHMuIikKOzs7XyAgID0gYWxs b3V0LWV4cG9zdXJlLWNhdGVnb3J5CihkZWZ2YXIgYWxsb3V0LWV4cG9zdXJlLWNhdGVnb3J5IG5p bAogICJTeW1ib2wgZm9yIHVzZSBhcyBhbGxvdXQgaW52aXNpYmxlLXRleHQgb3ZlcmxheSBjYXRl Z29yeS4iKQo7OztfICAgeCBhbGxvdXQtdmlldy1jaGFuZ2UtaG9vawooZGVmdmFyIGFsbG91dC12 aWV3LWNoYW5nZS1ob29rIG5pbAogICIqXChEZXByZWNhdGVkXCkgQSBob29rIHJ1biBhZnRlciBh bGxvdXQgb3V0bGluZSBleHBvc3VyZSBjaGFuZ2VzLgoKU3dpdGNoIHRvIHVzaW5nIGBhbGxvdXQt ZXhwb3N1cmUtY2hhbmdlLWhvb2snIGluc3RlYWQuICBCb3RoIGhvb2tzIGFyZQpjdXJyZW50bHkg cmVzcGVjdGVkLCBidXQgdGhlIG90aGVyIGNvbnZleXMgdGhlIGRldGFpbHMgb2YgdGhlIGV4cG9z dXJlCmNoYW5nZSB2aWEgZXhwbGljaXQgcGFyYW1ldGVycywgYW5kIHRoaXMgb25lIHdpbGwgZXZl bnR1YWxseSBiZSBkaXNhYmxlZCBpbgphIHN1YnNlcXVlbnQgYWxsb3V0IHZlcnNpb24uIikKOzs7 XyAgID0gYWxsb3V0LWV4cG9zdXJlLWNoYW5nZS1ob29rCihkZWZ2YXIgYWxsb3V0LWV4cG9zdXJl LWNoYW5nZS1ob29rIG5pbAogICIqSG9vayB0aGF0J3MgcnVuIGFmdGVyIGFsbG91dCBvdXRsaW5l IHN1YnRyZWUgZXhwb3N1cmUgY2hhbmdlcy4KCkl0IGlzIHJ1biBhdCB0aGUgY29uY2x1c2lvbiBv ZiBgYWxsb3V0LWZsYWctcmVnaW9uJy4KCkZ1bmN0aW9ucyBvbiB0aGUgaG9vayBtdXN0IHRha2Ug dGhyZWUgYXJndW1lbnRzOgoKIC0gZnJvbSAtIGludGVnZXIgaW5kaWNhdGluZyB0aGUgcG9pbnQg YXQgdGhlIHN0YXJ0IG9mIHRoZSBjaGFuZ2UuCiAtIHRvIC0gaW50ZWdlciBpbmRpY2F0aW5nIHRo ZSBwb2ludCBvZiB0aGUgZW5kIG9mIHRoZSBjaGFuZ2UuCiAtIGZsYWcgLSBjaGFuZ2UgbW9kZTog bmlsIGZvciBleHBvc3VyZSwgb3RoZXJ3aXNlIGNvbmNlYWxtZW50LgoKVGhpcyBob29rIG1pZ2h0 IGJlIGludm9rZWQgbXVsdGlwbGUgdGltZXMgYnkgYSBzaW5nbGUgY29tbWFuZC4KClRoaXMgaG9v ayBpcyByZXBsYWNpbmcgYGFsbG91dC12aWV3LWNoYW5nZS1ob29rJywgd2hpY2ggaXMgYmVpbmcg ZGVwcmVjYXRlZAphbmQgZXZlbnR1YWxseSB3aWxsIG5vdCBiZSBpbnZva2VkLiIpCjs7O18gICA9 IGFsbG91dC1zdHJ1Y3R1cmUtYWRkZWQtaG9vawooZGVmdmFyIGFsbG91dC1zdHJ1Y3R1cmUtYWRk ZWQtaG9vayBuaWwKICAiKkhvb2sgdGhhdCdzIHJ1biBhZnRlciBhZGRpdGlvbiBvZiBpdGVtcyB0 byB0aGUgb3V0bGluZS4KCkZ1bmN0aW9ucyBvbiB0aGUgaG9vayBzaG91bGQgdGFrZSB0d28gYXJn dW1lbnRzOgoKIC0gbmV3LXN0YXJ0IC0gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBwb2ludCBhdCB0 aGUgc3RhcnQgb2YgdGhlIGZpcnN0IG5ldyBpdGVtLgogLSBuZXctZW5kIC0gaW50ZWdlciBpbmRp Y2F0aW5nIHRoZSBwb2ludCBvZiB0aGUgZW5kIG9mIHRoZSBsYXN0IG5ldyBpdGVtLgoKU29tZSBl ZGl0cyB0aGF0IGludHJvZHVjZSBuZXcgaXRlbXMgbWF5IG1pc3NlZCBieSB0aGlzIGhvb2sgLQpz cGVjaWZpY2FsbHkgZWRpdHMgdGhhdCBuYXRpdmUgYWxsb3V0IHJvdXRpbmVzIGRvIG5vdCBjb250 cm9sLgoKVGhpcyBob29rIG1pZ2h0IGJlIGludm9rZWQgbXVsdGlwbGUgdGltZXMgYnkgYSBzaW5n bGUgY29tbWFuZC4iKQo7OztfICAgPSBhbGxvdXQtc3RydWN0dXJlLWRlbGV0ZWQtaG9vawooZGVm dmFyIGFsbG91dC1zdHJ1Y3R1cmUtZGVsZXRlZC1ob29rIG5pbAogICIqSG9vayB0aGF0J3MgcnVu IGFmdGVyIGRpc2NpcGxpbmVkIGRlbGV0aW9uIG9mIHN1YnRyZWVzIGZyb20gdGhlIG91dGxpbmUu CgpGdW5jdGlvbnMgb24gdGhlIGhvb2sgbXVzdCB0YWtlIHR3byBhcmd1bWVudHM6CgogLSBkZXB0 aCAtIGludGVnZXIgaW5kaWNhdGluZyB0aGUgZGVwdGggb2YgdGhlIHN1YnRyZWUgdGhhdCB3YXMg ZGVsZXRlZC4KIC0gcmVtb3ZlZC1mcm9tIC0gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBwb2ludCB3 aGVyZSB0aGUgc3VidHJlZSB3YXMgcmVtb3ZlZC4KClNvbWUgZWRpdHMgdGhhdCByZW1vdmUgb3Ig aW52YWxpZGF0ZSBpdGVtcyBtYXkgbWlzc2VkIGJ5IHRoaXMgaG9vayAtCnNwZWNpZmljYWxseSBl ZGl0cyB0aGF0IG5hdGl2ZSBhbGxvdXQgcm91dGluZXMgZG8gbm90IGNvbnRyb2wuCgpUaGlzIGhv b2sgbWlnaHQgYmUgaW52b2tlZCBtdWx0aXBsZSB0aW1lcyBieSBhIHNpbmdsZSBjb21tYW5kLiIp Cjs7O18gICA9IGFsbG91dC1zdHJ1Y3R1cmUtc2hpZnRlZC1ob29rCihkZWZ2YXIgYWxsb3V0LXN0 cnVjdHVyZS1zaGlmdGVkLWhvb2sgbmlsCiAgIipIb29rIHRoYXQncyBydW4gYWZ0ZXIgc2hpZnRp bmcgb2YgaXRlbXMgaW4gdGhlIG91dGxpbmUuCgpGdW5jdGlvbnMgb24gdGhlIGhvb2sgc2hvdWxk IHRha2UgdHdvIGFyZ3VtZW50czoKCiAtIGRlcHRoLWNoYW5nZSAtIGludGVnZXIgaW5kaWNhdGlu ZyBkZXB0aCBpbmNyZWFzZSwgbmVnYXRpdmUgZm9yIGRlY3JlYXNlCiAtIHN0YXJ0IC0gaW50ZWdl ciBpbmRpY2F0aW5nIHRoZSBzdGFydCBwb2ludCBvZiB0aGUgc2hpZnRlZCBwYXJlbnQgaXRlbS4K ClNvbWUgZWRpdHMgdGhhdCBzaGlmdCBpdGVtcyBjYW4gYmUgbWlzc2VkIGJ5IHRoaXMgaG9vayAt IHNwZWNpZmljYWxseSBlZGl0cwp0aGF0IG5hdGl2ZSBhbGxvdXQgcm91dGluZXMgZG8gbm90IGNv bnRyb2wuCgpUaGlzIGhvb2sgbWlnaHQgYmUgaW52b2tlZCBtdWx0aXBsZSB0aW1lcyBieSBhIHNp bmdsZSBjb21tYW5kLiIpCjs7O18gICA9IGFsbG91dC1vdXRzaWRlLW5vcm1hbC1hdXRvLWZpbGwt ZnVuY3Rpb24KKGRlZnZhciBhbGxvdXQtb3V0c2lkZS1ub3JtYWwtYXV0by1maWxsLWZ1bmN0aW9u IG5pbAogICJWYWx1ZSBvZiBub3JtYWwtYXV0by1maWxsLWZ1bmN0aW9uIG91dHNpZGUgb2YgYWxs b3V0IG1vZGUuCgpVc2VkIGJ5IGFsbG91dC1hdXRvLWZpbGwgdG8gZG8gdGhlIG1hbmRhdGVkIG5v cm1hbC1hdXRvLWZpbGwtZnVuY3Rpb24Kd3JhcHBlZCB3aXRoaW4gYWxsb3V0J3MgYXV0b21hdGlj IGZpbGwtcHJlZml4IHNldHRpbmcuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxv dXQtb3V0c2lkZS1ub3JtYWwtYXV0by1maWxsLWZ1bmN0aW9uKQo7OztfICAgPSBmaWxlLXZhci1i dWcgaGFjawooZGVmdmFyIGFsbG91dC12MTgvMTktZmlsZS12YXItaGFjayBuaWwKICAiSG9ycmli bGUgaGFjayB1c2VkIHRvIHByZXZlbnQgaW52YWxpZCBtdWx0aXBsZSB0cmlnZ2VyaW5nIG9mIG91 dGxpbmUKbW9kZSBmcm9tIHByb3AtbGluZSBmaWxlLXZhciBhY3RpdmF0aW9uLiAgVXNlZCBieSBg YWxsb3V0LW1vZGUnIGZ1bmN0aW9uCnRvIHRyYWNrIHJlcGVhdHMuIikKOzs7XyAgID0gYWxsb3V0 LXBhc3NwaHJhc2UtdmVyaWZpZXItc3RyaW5nCihkZWZ2YXIgYWxsb3V0LXBhc3NwaHJhc2UtdmVy aWZpZXItc3RyaW5nIG5pbAogICJTZXR0aW5nIHVzZWQgdG8gdGVzdCBzb2xpY2l0ZWQgZW5jcnlw dGlvbiBwYXNzcGhyYXNlcyBhZ2FpbnN0IHRoZSBvbmUKYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGgg YSBmaWxlLgoKSXQgY29uc2lzdHMgb2YgYW4gZW5jcnlwdGVkIHJhbmRvbSBzdHJpbmcgdXNlZnVs IG9ubHkgdG8gdmVyaWZ5IHRoYXQgYQpwYXNzcGhyYXNlIGVudGVyZWQgYnkgdGhlIHVzZXIgaXMg ZWZmZWN0aXZlIGZvciBkZWNyeXB0aW9uLiAgVGhlIHBhc3NwaHJhc2UKaXRzZWxmIGlzIFwqbm90 KiByZWNvcmRlZCBpbiB0aGUgZmlsZSBhbnl3aGVyZSwgYW5kIHRoZSBlbmNyeXB0ZWQgY29udGVu dHMKYXJlIHJhbmRvbSBiaW5hcnkgY2hhcmFjdGVycyB0byBhdm9pZCBleHBvc2luZyBncmVhdGVy IHN1c2NlcHRpYmlsaXR5IHRvCnNlYXJjaCBhdHRhY2tzLgoKVGhlIHZlcmlmaWVyIHN0cmluZyBp cyByZXRhaW5lZCBhcyBhbiBFbWFjcyBmaWxlIHZhcmlhYmxlLCBhcyB3ZWxsIGFzIGluCnRoZSBl bWFjcyBidWZmZXIgc3RhdGUsIGlmIGZpbGUgdmFyaWFibGUgYWRqdXN0bWVudHMgYXJlIGVuYWJs ZWQuICBTZWUKYGFsbG91dC1lbmFibGUtZmlsZS12YXJpYWJsZS1hZGp1c3RtZW50JyBmb3IgZGV0 YWlscyBhYm91dCB0aGF0LiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXBh c3NwaHJhc2UtdmVyaWZpZXItc3RyaW5nKQo7OzsjIyNhdXRvbG9hZAoocHV0ICdhbGxvdXQtcGFz c3BocmFzZS12ZXJpZmllci1zdHJpbmcgJ3NhZmUtbG9jYWwtdmFyaWFibGUgJ3N0cmluZ3ApCjs7 O18gICA9IGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5nCihkZWZ2YXIgYWxsb3V0LXBhc3Nw aHJhc2UtaGludC1zdHJpbmcgIiIKICAiVmFyaWFibGUgdXNlZCB0byByZXRhaW4gcmVtaW5kZXIg c3RyaW5nIGZvciBmaWxlJ3MgZW5jcnlwdGlvbiBwYXNzcGhyYXNlLgoKU2VlIHRoZSBkZXNjcmlw dGlvbiBvZiBgYWxsb3V0LXBhc3NwaHJhc2UtaGludC1oYW5kbGluZycgZm9yIGRldGFpbHMgYWJv dXQgaG93CnRoZSByZW1pbmRlciBpcyBkZXBsb3llZC4KClRoZSBoaW50IGlzIHJldGFpbmVkIGFz IGFuIEVtYWNzIGZpbGUgdmFyaWFibGUsIGFzIHdlbGwgYXMgaW4gdGhlIGVtYWNzIGJ1ZmZlcgpz dGF0ZSwgaWYgZmlsZSB2YXJpYWJsZSBhZGp1c3RtZW50cyBhcmUgZW5hYmxlZC4gIFNlZQpgYWxs b3V0LWVuYWJsZS1maWxlLXZhcmlhYmxlLWFkanVzdG1lbnQnIGZvciBkZXRhaWxzIGFib3V0IHRo YXQuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdhbGxvdXQtcGFzc3BocmFzZS1oaW50 LXN0cmluZykKKHNldHEtZGVmYXVsdCBhbGxvdXQtcGFzc3BocmFzZS1oaW50LXN0cmluZyAiIikK Ozs7IyMjYXV0b2xvYWQKKHB1dCAnYWxsb3V0LXBhc3NwaHJhc2UtaGludC1zdHJpbmcgJ3NhZmUt bG9jYWwtdmFyaWFibGUgJ3N0cmluZ3ApCjs7O18gICA9IGFsbG91dC1hZnRlci1zYXZlLWRlY3J5 cHQKKGRlZnZhciBhbGxvdXQtYWZ0ZXItc2F2ZS1kZWNyeXB0IG5pbAogICJJbnRlcm5hbCB2YXJp YWJsZSwgaXMgbmlsIG9yIGhhcyB0aGUgdmFsdWUgb2YgdHdvIHBvaW50czoKCiAtIHRoZSBsb2Nh dGlvbiBvZiBhIHRvcGljIHRvIGJlIGRlY3J5cHRlZCBhZnRlciBzYXZpbmcgaXMgZG9uZQogLSB3 aGVyZSB0byBzaXR1YXRlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIGRlY3J5cHRpb24gaXMgcGVyZm9y bWVkCgpUaGlzIGlzIHVzZWQgdG8gZGVjcnlwdCB0aGUgdG9waWMgdGhhdCB3YXMgY3VycmVudGx5 IGJlaW5nIGVkaXRlZCwgaWYgaXQKd2FzIGVuY3J5cHRlZCBhdXRvbWF0aWNhbGx5IGFzIHBhcnQg b2YgYSBmaWxlIHdyaXRlIG9yIGF1dG9zYXZlLiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2Nh bCAnYWxsb3V0LWFmdGVyLXNhdmUtZGVjcnlwdCkKOzs7XyAgID0gYWxsb3V0LWVuY3J5cHRpb24t cGxhaW50ZXh0LXNhbml0aXphdGlvbi1yZWdleHBzCihkZWZ2YXIgYWxsb3V0LWVuY3J5cHRpb24t cGxhaW50ZXh0LXNhbml0aXphdGlvbi1yZWdleHBzIG5pbAogICJMaXN0IG9mIHJlZ2V4cHMgd2hv c2UgbWF0Y2hlcyBhcmUgcmVtb3ZlZCBmcm9tIHBsYWludGV4dCBiZWZvcmUgZW5jcnlwdGlvbi4K ClRoaXMgaXMgZm9yIHRoZSBzYWtlIG9mIHJlbW92aW5nIGFydGlmYWN0cywgbGlrZSBlc2NhcGVz LCB0aGF0IGFyZSBhZGRlZCBvbgphbmQgbm90IGFjdHVhbGx5IHBhcnQgb2YgdGhlIG9yaWdpbmFs IHBsYWludGV4dC4gIFRoZSByZW1vdmFsIGlzIGRvbmUganVzdApwcmlvciB0byBlbmNyeXB0aW9u LgoKRW50cmllcyBtdXN0IGJlIHN5bWJvbHMgdGhhdCBhcmUgYm91bmQgdG8gdGhlIGRlc2lyZWQg dmFsdWVzLgoKRWFjaCB2YWx1ZSBjYW4gYmUgYSByZWdleHAgb3IgYSBsaXN0IHdpdGggYSByZWdl eHAgZm9sbG93ZWQgYnkgYQpzdWJzdGl0dXRpb24gc3RyaW5nLiAgSWYgaXQncyBqdXN0IGEgcmVn ZXhwLCBhbGwgaXRzIG1hdGNoZXMgYXJlIHJlbW92ZWQKYmVmb3JlIHRoZSB0ZXh0IGlzIGVuY3J5 cHRlZC4gIElmIGl0J3MgYSByZWdleHAgYW5kIGEgc3Vic3RpdHV0aW9uLCB0aGUKc3Vic3RpdGlv biBpcyB1c2VkIGFnYWluc3QgdGhlIHJlZ2V4cCBtYXRjaGVzLCBhIGxhIGByZXBsYWNlLW1hdGNo Jy4iKQoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2FsbG91dC1lbmNyeXB0aW9uLXRleHQt cmVtb3ZhbC1yZWdleHBzKQo7OztfICAgPSBhbGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJl amVjdGlvbi1yZWdleHBzCihkZWZ2YXIgYWxsb3V0LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWpl Y3Rpb24tcmVnZXhwcyBuaWwKICAiVmFyaWFibGUgZm9yIHJlZ2V4cHMgbWF0Y2hpbmcgcGxhaW50 ZXh0IHRvIHJlbW92ZSBiZWZvcmUgZW5jcnlwdGlvbi4KClRoaXMgaXMgZm9yIHRoZSBzYWtlIG9m IHJlZG9pbmcgZW5jcnlwdGlvbiBpbiBjYXNlcyB3aGVyZSB0aGUgY2lwaGVydGV4dAppbmNpZGVu dGFsbHkgY29udGFpbnMgc3RyaW5ncyB0aGF0IHdvdWxkIGRpc3J1cHQgbW9kZSBvcGVyYXRpb24g LQpmb3IgZXhhbXBsZSwgYSBsaW5lIHRoYXQgaGFwcGVucyB0byBsb29rIGxpa2UgYW4gYWxsb3V0 LW1vZGUgdG9waWMgcHJlZml4LgoKRW50cmllcyBtdXN0IGJlIHN5bWJvbHMgdGhhdCBhcmUgYm91 bmQgdG8gdGhlIGRlc2lyZWQgcmVnZXhwIHZhbHVlcy4KClRoZSBlbmNyeXB0aW9uIHdpbGwgYmUg cmV0cmllZCB1cCB0bwpgYWxsb3V0LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tbGlt aXQnIHRpbWVzLCBhZnRlciB3aGljaCBhbiBlcnJvcgppcyByYWlzZWQuIikKCihtYWtlLXZhcmlh YmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24t cmVnZXhwcykKOzs7XyAgID0gYWxsb3V0LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24t Y2VpbGluZwooZGVmdmFyIGFsbG91dC1lbmNyeXB0aW9uLWNpcGhlcnRleHQtcmVqZWN0aW9uLWNl aWxpbmcgNQogICJMaW1pdCBvbiBudW1iZXIgb2YgdGltZXMgZW5jcnlwdGlvbiBjaXBoZXJ0ZXh0 IGlzIHJlamVjdGVkLgoKU2VlIGBhbGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlv bi1yZWdleHBzJyBmb3IgcmVqZWN0aW9uIHJlYXNvbnMuIikKKG1ha2UtdmFyaWFibGUtYnVmZmVy LWxvY2FsICdhbGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0LXJlamVjdGlvbi1jZWlsaW5nKQo7 OztfICAgPiBhbGxvdXQtbW9kZS1wICgpCjs7IE11c3QgZGVmaW5lIHRoaXMgbWFjcm8gYWJvdmUg YW55IHVzZXMsIG9yIGJ5dGUgY29tcGlsYXRpb24gd2lsbCBsYWNrCjs7IHByb3BlciBkZWYsIGlm IGZpbGUgaXNuJ3QgbG9hZGVkIC0gZWcsIGR1cmluZyBlbWFjcyBidWlsZCEKKGRlZm1hY3JvIGFs bG91dC1tb2RlLXAgKCkKICAiUmV0dXJuIHQgaWYgYGFsbG91dC1tb2RlJyBpcyBhY3RpdmUgaW4g Y3VycmVudCBidWZmZXIuIgogICdhbGxvdXQtbW9kZSkKOzs7XyAgID4gYWxsb3V0LXdyaXRlLWZp bGUtaG9vay1oYW5kbGVyICgpCihkZWZ1biBhbGxvdXQtd3JpdGUtZmlsZS1ob29rLWhhbmRsZXIg KCkKICAiSW1wbGVtZW50IGBhbGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcycgcG9s aWN5IGZvciBmaWxlIHdyaXRlcy4iCgogIChpZiAob3IgKG5vdCAoYWxsb3V0LW1vZGUtcCkpCiAg ICAgICAgICAobm90IChib3VuZHAgJ2FsbG91dC1lbmNyeXB0LXVuZW5jcnlwdGVkLW9uLXNhdmVz KSkKICAgICAgICAgIChub3QgYWxsb3V0LWVuY3J5cHQtdW5lbmNyeXB0ZWQtb24tc2F2ZXMpKQog ICAgICBuaWwKICAgIChsZXQgKChleGNlcHQtbWFyayAoYW5kIChlcXVhbCBhbGxvdXQtZW5jcnlw dC11bmVuY3J5cHRlZC1vbi1zYXZlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdleGNlcHQtY3VycmVudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludC1tYXJr ZXIpKSkpCiAgICAgIChpZiAoc2F2ZS1leGN1cnNpb24gKGdvdG8tY2hhciAocG9pbnQtbWluKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LW5leHQtdG9waWMtcGVuZGluZy1lbmNy eXB0aW9uIGV4Y2VwdC1tYXJrKSkKICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAobWVzc2Fn ZSAiYXV0by1lbmNyeXB0aW5nIHBlbmRpbmcgdG9waWNzIikKICAgICAgICAgICAgKHNpdC1mb3Ig MCkKICAgICAgICAgICAgKGNvbmRpdGlvbi1jYXNlIGZhaWx1cmUKICAgICAgICAgICAgICAgIChz ZXRxIGFsbG91dC1hZnRlci1zYXZlLWRlY3J5cHQKICAgICAgICAgICAgICAgICAgICAgIChhbGxv dXQtZW5jcnlwdC1kZWNyeXB0ZWQgZXhjZXB0LW1hcmspKQogICAgICAgICAgICAgIChlcnJvciAo cHJvZ24KICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZQogICAgICAgICAgICAgICAgICAg ICAgICAiYWxsb3V0LXdyaXRlLWZpbGUtaG9vay1oYW5kbGVyIHN1cHByZXNzaW5nIGVycm9yICVz IgogICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlKQogICAgICAgICAgICAgICAgICAgICAg IChzaXQtZm9yIDIpKSkpKSkKICAgICAgKSkKICAgIG5pbCkKOzs7XyAgID4gYWxsb3V0LWF1dG8t c2F2ZS1ob29rLWhhbmRsZXIgKCkKKGRlZnVuIGFsbG91dC1hdXRvLXNhdmUtaG9vay1oYW5kbGVy ICgpCiAgIkltcGxlbWVudCBgYWxsb3V0LWVuY3J5cHQtdW5lbmNyeXB0ZWQtb24tc2F2ZXMnIHBv bGljeSBmb3IgYXV0byBzYXZlLiIKCiAgKGlmIChhbmQgKGFsbG91dC1tb2RlLXApIGFsbG91dC1l bmNyeXB0LXVuZW5jcnlwdGVkLW9uLXNhdmVzKQogICAgICA7OyBBbHdheXMgaW1wbGVtZW50ICdl eGNlcHQtY3VycmVudCBwb2xpY3kgd2hlbiBlbmFibGVkLgogICAgICAobGV0ICgoYWxsb3V0LWVu Y3J5cHQtdW5lbmNyeXB0ZWQtb24tc2F2ZXMgJ2V4Y2VwdC1jdXJyZW50KSkKICAgICAgICAoYWxs b3V0LXdyaXRlLWZpbGUtaG9vay1oYW5kbGVyKSkpKQo7OztfICAgPiBhbGxvdXQtYWZ0ZXItc2F2 ZXMtaGFuZGxlciAoKQooZGVmdW4gYWxsb3V0LWFmdGVyLXNhdmVzLWhhbmRsZXIgKCkKICAiRGVj cnlwdCB0b3BpYyBlbmNyeXB0ZWQgZm9yIHNhdmUsIGlmIGl0J3MgY3VycmVudGx5IGJlaW5nIGVk aXRlZC4KCkllLCBpZiBpdCB3YXMgcGVuZGluZyBlbmNyeXB0aW9uIGFuZCBjb250YWluZWQgdGhl IHBvaW50IGluIGl0cyBib2R5IGJlZm9yZQp0aGUgc2F2ZS4KCldlIHVzZSB2YWx1ZXMgc3RvcmVk IGluIGBhbGxvdXQtYWZ0ZXItc2F2ZS1kZWNyeXB0JyB0byBsb2NhdGUgdGhlIHRvcGljCmFuZCB0 aGUgcGxhY2UgZm9yIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIGRlY3J5cHRpb24gaXMgZG9uZS4iCiAg KGlmIChub3QgKGFuZCAoYWxsb3V0LW1vZGUtcCkKICAgICAgICAgICAgICAgIChib3VuZHAgJ2Fs bG91dC1hZnRlci1zYXZlLWRlY3J5cHQpCiAgICAgICAgICAgICAgICBhbGxvdXQtYWZ0ZXItc2F2 ZS1kZWNyeXB0KSkKICAgICAgdAogICAgKGdvdG8tY2hhciAoY2FyIGFsbG91dC1hZnRlci1zYXZl LWRlY3J5cHQpKQogICAgKGxldCAoKHdhcy1tb2RpZmllZCAoYnVmZmVyLW1vZGlmaWVkLXApKSkK ICAgICAgKGFsbG91dC10b2dnbGUtc3VidHJlZS1lbmNyeXB0aW9uKQogICAgICAoaWYgKG5vdCB3 YXMtbW9kaWZpZWQpCiAgICAgICAgICAoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG5pbCkpKQogICAg KGdvdG8tY2hhciAoY2FkciBhbGxvdXQtYWZ0ZXItc2F2ZS1kZWNyeXB0KSkKICAgIChzZXRxIGFs bG91dC1hZnRlci1zYXZlLWRlY3J5cHQgbmlsKSkKICApCjs7O18gICA9IGFsbG91dC1pbmhpYml0 LWRvdWJsZWNoZWNrIG5pbAo7OyBpbiByYXJlIGNpcmN1bXN0YW5jZSBkaXNwYXJhdGUgdG9waWMg ZGVwdGhzIGFyZSBqdXh0YXBvc2VkLCB3aGVuIG9uZQo7OyB0b3BpYyBpcyBiZWluZyB5YW5rZWQg aW50byBhbm90aGVyIGFuZCB0aGV5J3JlIGFib3V0IHRvIGJlIHJlY29uY2lsZWQuCjs7IGxldC1i aW5kIHRoaXMgdmFyaWFibGUgdG8gbW9tZW50YXJpbHkgZGlzcmVnYXJkIHRoZSBkaXNjcmVwYW5j eS4KKGRlZnZhciBhbGxvdXQtaW5oaWJpdC1kb3VibGVjaGVjayBuaWwKICAiSW50ZXJuYWwgc3Rh dGUsIGZvciBtb21lbnRhcmlseSBpbmhpYml0cyBhYmVycmFuY2UgZG91YmxlY2hlY2suCgpUaGlz IHNob3VsZCBvbmx5IGJlIG1vbWVudGFyaWx5IGxldC1ib3VuZCBub24tbmlsLCBub3Qgc2V0Cm5v bi1uaWwgaW4gYSBsYXN0aW5nIHdheS4iKQoKOzs7XyAjMiBNb2RlIGFjdGl2YXRpb24KOzs7XyAg PSBhbGxvdXQtZXhwbGljaXRseS1kZWFjdGl2YXRlZAooZGVmdmFyIGFsbG91dC1leHBsaWNpdGx5 LWRlYWN0aXZhdGVkIG5pbAogICJJZiB0LCBgYWxsb3V0LW1vZGUncyBsYXN0IGRlYWN0aXZhdGlv biB3YXMgZGVsaWJlcmF0ZS4KU28gYGFsbG91dC1wb3N0LWNvbW1hbmQtYnVzaW5lc3MnIHNob3Vs ZCBub3QgcmVhY3RpdmF0ZSBpdC4uLiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxs b3V0LWV4cGxpY2l0bHktZGVhY3RpdmF0ZWQpCjs7O18gID4gYWxsb3V0LWluaXQgKCZvcHRpb25h bCBtb2RlKQooZGVmdW4gYWxsb3V0LWluaXQgKCZvcHRpb25hbCBtb2RlKQogICJQcmltZSBgYWxs b3V0LW1vZGUnIHRvIGVuYWJsZS9kaXNhYmxlIGF1dG8tYWN0aXZhdGlvbiwgd3J0IGBhbGxvdXQt bGF5b3V0Jy4KCk1PREUgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9sczoKCiAtIG5pbCBc KG9yIG5vIGFyZ3VtZW50KSBkZWFjdGl2YXRlIGF1dG8tYWN0aXZhdGlvbi9sYXlvdXQ7CiAtIGBh Y3RpdmF0ZScsIGVuYWJsZSBhdXRvLWFjdGl2YXRpb24gb25seTsKIC0gYGFzaycsIGVuYWJsZSBh dXRvLWFjdGl2YXRpb24sIGFuZCBlbmFibGUgYXV0by1sYXlvdXQgYnV0IHdpdGgKICAgY29uZmly bWF0aW9uIGZvciBsYXlvdXQgb3BlcmF0aW9uIHNvbGljaXRlZCBmcm9tIHVzZXIgZWFjaCB0aW1l OwogLSBgcmVwb3J0JywganVzdCByZXBvcnQgYW5kIHJldHVybiB0aGUgY3VycmVudCBhdXRvLWFj dGl2YXRpb24gc3RhdGU7CiAtIGFueXRoaW5nIGVsc2UgXChlZywgdCkgZm9yIGF1dG8tYWN0aXZh dGlvbiBhbmQgYXV0by1sYXlvdXQsIHdpdGhvdXQKICAgYW55IGNvbmZpcm1hdGlvbiBjaGVjay4K ClVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldHVwIHlvdXIgRW1hY3Mgc2Vzc2lvbiBmb3IgYXV0b21h dGljIGFjdGl2YXRpb24Kb2YgYWxsb3V0IG91dGxpbmUgbW9kZSwgY29udGluZ2VudCB0byB0aGUg YnVmZmVyLXNwZWNpZmljIHNldHRpbmcgb2YKdGhlIGBhbGxvdXQtbGF5b3V0JyB2YXJpYWJsZS4g IChTZWUgYGFsbG91dC1sYXlvdXQnIGFuZApgYWxsb3V0LWV4cG9zZS10b3BpYycgZG9jc3RyaW5n cyBmb3IgbW9yZSBkZXRhaWxzIG9uIGF1dG8gbGF5b3V0KS4KCmBhbGxvdXQtaW5pdCcgd29ya3Mg Ynkgc2V0dGluZyB1cCAob3IgcmVtb3ZpbmcpIHRoZSBgYWxsb3V0LW1vZGUnCmZpbmQtZmlsZS1o b29rLCBhbmQgZ2l2aW5nIGBhbGxvdXQtYXV0by1hY3RpdmF0aW9uJyBhIHN1aXRhYmxlCnNldHRp bmcuCgpUbyBwcmltZSB5b3VyIEVtYWNzIHNlc3Npb24gZm9yIGZ1bGwgYXV0by1vdXRsaW5lIG9w ZXJhdGlvbiwgaW5jbHVkZQp0aGUgZm9sbG93aW5nIHR3byBsaW5lcyBpbiB5b3VyIEVtYWNzIGlu aXQgZmlsZToKClwocmVxdWlyZSAnYWxsb3V0KQpcKGFsbG91dC1pbml0IHQpIgoKICAoaW50ZXJh Y3RpdmUpCiAgKGlmIChpbnRlcmFjdGl2ZS1wKQogICAgICAocHJvZ24KCShzZXRxIG1vZGUKCSAg ICAgIChjb21wbGV0aW5nLXJlYWQKCSAgICAgICAoY29uY2F0ICJTZWxlY3Qgb3V0bGluZSBhdXRv IHNldHVwIG1vZGUgIgoJCSAgICAgICAiKGVtcHR5IGZvciByZXBvcnQsID8gZm9yIG9wdGlvbnMp ICIpCgkgICAgICAgJygoIm5pbCIpKCJmdWxsIikoImFjdGl2YXRlIikoImRlYWN0aXZhdGUiKQoJ CSAoImFzayIpICgicmVwb3J0IikgKCIiKSkKCSAgICAgICBuaWwKCSAgICAgICB0KSkKCShpZiAo c3RyaW5nPSBtb2RlICIiKQoJICAgIChzZXRxIG1vZGUgJ3JlcG9ydCkKCSAgKHNldHEgbW9kZSAo aW50ZXJuLXNvZnQgbW9kZSkpKSkpCiAgKGxldAogICAgICA7OyBjb252ZW5pZW5jZSBhbGlhc2Vz LCBmb3IgY29uc2lzdGVudCByZWYgdG8gcmVzcGVjdGl2ZSB2YXJzOgogICAgICAoKGhvb2sgJ2Fs bG91dC1maW5kLWZpbGUtaG9vaykKICAgICAgIChmaW5kLWZpbGUtaG9vay12YXItbmFtZSAoaWYg KGJvdW5kcCAnZmluZC1maWxlLWhvb2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdmaW5kLWZpbGUtaG9vawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zp bmQtZmlsZS1ob29rcykpCiAgICAgICAoY3Vyci1tb2RlICdhbGxvdXQtYXV0by1hY3RpdmF0aW9u KSkKCiAgICAoY29uZCAoKG5vdCBtb2RlKQoJICAgKHNldCBmaW5kLWZpbGUtaG9vay12YXItbmFt ZQogICAgICAgICAgICAgICAgKGRlbHEgaG9vayAoc3ltYm9sLXZhbHVlIGZpbmQtZmlsZS1ob29r LXZhci1uYW1lKSkpCgkgICAoaWYgKGludGVyYWN0aXZlLXApCgkgICAgICAgKG1lc3NhZ2UgIkFs bG91dCBvdXRsaW5lIG1vZGUgYXV0by1hY3RpdmF0aW9uIGluaGliaXRlZC4iKSkpCgkgICgoZXEg bW9kZSAncmVwb3J0KQoJICAgKGlmIChub3QgKG1lbXEgaG9vayAoc3ltYm9sLXZhbHVlIGZpbmQt ZmlsZS1ob29rLXZhci1uYW1lKSkpCgkgICAgICAgKGFsbG91dC1pbml0IG5pbCkKCSAgICAgOzsg SnVzdCBwdW50IGFuZCB1c2UgdGhlIHJlcG9ydHMgZnJvbSBlYWNoIG9mIHRoZSBtb2RlczoKCSAg ICAgKGFsbG91dC1pbml0IChzeW1ib2wtdmFsdWUgY3Vyci1tb2RlKSkpKQoJICAodCAoYWRkLWhv b2sgZmluZC1maWxlLWhvb2stdmFyLW5hbWUgaG9vaykKCSAgICAgKHNldCBjdXJyLW1vZGUJCTsg YHNldCcsIG5vdCBgc2V0cSchCgkJICAoY29uZCAoKGVxIG1vZGUgJ2FjdGl2YXRlKQoJCQkgKG1l c3NhZ2UKCQkJICAiT3V0bGluZSBtb2RlIGF1dG8tYWN0aXZhdGlvbiBlbmFibGVkLiIpCgkJCSAn YWN0aXZhdGUpCgkJCSgoZXEgbW9kZSAncmVwb3J0KQoJCQkgOzsgUmV0dXJuIHRoZSBjdXJyZW50 IG1vZGUgc2V0dGluZzoKCQkJIChhbGxvdXQtaW5pdCBtb2RlKSkKCQkJKChlcSBtb2RlICdhc2sp CgkJCSAobWVzc2FnZQoJCQkgIChjb25jYXQgIk91dGxpbmUgbW9kZSBhdXRvLWFjdGl2YXRpb24g YW5kICIKCQkJCSAgIi1sYXlvdXQgXCh1cG9uIGNvbmZpcm1hdGlvbikgZW5hYmxlZC4iKSkKCQkJ ICdhc2spCgkJCSgobWVzc2FnZQoJCQkgICJPdXRsaW5lIG1vZGUgYXV0by1hY3RpdmF0aW9uIGFu ZCAtbGF5b3V0IGVuYWJsZWQuIikKCQkJICdmdWxsKSkpKSkpKQo7OztfICA+IGFsbG91dC1zZXR1 cC1tZW51YmFyICgpCihkZWZ1biBhbGxvdXQtc2V0dXAtbWVudWJhciAoKQogICJQb3B1bGF0ZSB0 aGUgY3VycmVudCBidWZmZXIncyBtZW51YmFyIHdpdGggYGFsbG91dC1tb2RlJyBzdHVmZi4iCiAg KGxldCAoKG1lbnVzIChsaXN0IGFsbG91dC1tb2RlLWV4cG9zdXJlLW1lbnUKCQkgICAgIGFsbG91 dC1tb2RlLWVkaXRpbmctbWVudQoJCSAgICAgYWxsb3V0LW1vZGUtbmF2aWdhdGlvbi1tZW51CgkJ ICAgICBhbGxvdXQtbW9kZS1taXNjLW1lbnUpKQoJY3VyKQogICAgKHdoaWxlIG1lbnVzCiAgICAg IChzZXRxIGN1ciAoY2FyIG1lbnVzKQoJICAgIG1lbnVzIChjZHIgbWVudXMpKQogICAgICAoZWFz eS1tZW51LWFkZCBjdXIpKSkpCjs7O18gID4gYWxsb3V0LW92ZXJsYXktcHJlcGFyYXRpb25zCihk ZWZ1biBhbGxvdXQtb3ZlcmxheS1wcmVwYXJhdGlvbnMgKCkKICAiU2V0IHRoZSBwcm9wZXJ0aWVz IG9mIHRoZSBhbGxvdXQgaW52aXNpYmxlLXRleHQgb3ZlcmxheSBhbmQgb3RoZXJzLiIKICAoc2V0 cGxpc3QgJ2FsbG91dC1leHBvc3VyZS1jYXRlZ29yeSBuaWwpCiAgKHB1dCAnYWxsb3V0LWV4cG9z dXJlLWNhdGVnb3J5ICdpbnZpc2libGUgJ2FsbG91dCkKICAocHV0ICdhbGxvdXQtZXhwb3N1cmUt Y2F0ZWdvcnkgJ2V2YXBvcmF0ZSB0KQogIDs7IFhYWCBXZSB1c2UgaXNlYXJjaC1vcGVuLWludmlz aWJsZSAqYW5kKiBpc2VhcmNoLW1vZGUtZW5kLWhvb2suICBUaGUKICA7OyBsYXR0ZXIgd291bGQg YmUgc3VmZmljaWVudCwgYnV0IGl0IHNlZW1zIHRoYXQgYSBzZXBhcmF0ZSBiZWhhdmlvciAtCiAg OzsgdGhlIF90cmFuc2llbnRfIG9wZW5pbmcgb2YgaW52aXNpYmxlIHRleHQgZHVyaW5nIGlzZWFy Y2ggLSBpcyBrZXllZCB0bwogIDs7IHByZXNlbmNlIG9mIHRoZSBpc2VhcmNoLW9wZW4taW52aXNp YmxlIHByb3BlcnR5IC0gZXZlbiB0aG91Z2ggdGhpcwogIDs7IHByb3BlcnR5IGNvbnRyb2xzIHRo ZSBpc2VhcmNoIF9hcnJpdmFsXyBiZWhhdmlvci4gIFRoaXMgaXMgdGhlIGNhc2UgYXQKICA7OyBs ZWFzdCBpbiBlbWFjcyAyMSwgMjIuMCwgYW5kIHhlbWFjcyAyMS40LgogIChwdXQgJ2FsbG91dC1l eHBvc3VyZS1jYXRlZ29yeSAnaXNlYXJjaC1vcGVuLWludmlzaWJsZQogICAgICAgJ2FsbG91dC1p c2VhcmNoLWVuZC1oYW5kbGVyKQogIChpZiAoZmVhdHVyZXAgJ3hlbWFjcykKICAgICAgKHB1dCAn YWxsb3V0LWV4cG9zdXJlLWNhdGVnb3J5ICdzdGFydC1vcGVuIHQpCiAgICAocHV0ICdhbGxvdXQt ZXhwb3N1cmUtY2F0ZWdvcnkgJ2luc2VydC1pbi1mcm9udC1ob29rcwogICAgICAgICAnKGFsbG91 dC1vdmVybGF5LWluc2VydC1pbi1mcm9udC1oYW5kbGVyKSkpCiAgKHB1dCAnYWxsb3V0LWV4cG9z dXJlLWNhdGVnb3J5ICdtb2RpZmljYXRpb24taG9va3MKICAgICAgICcoYWxsb3V0LW92ZXJsYXkt aW50ZXJpb3ItbW9kaWZpY2F0aW9uLWhhbmRsZXIpKSkKOzs7XyAgPiBhbGxvdXQtbW9kZSAoJm9w dGlvbmFsIHRvZ2dsZSkKOzs7XyAgIDogRGVmdW46Cjs7OyMjI2F1dG9sb2FkCihkZWZ1biBhbGxv dXQtbW9kZSAoJm9wdGlvbmFsIHRvZ2dsZSkKOzs7XyAgICAuIERvYyBzdHJpbmc6CiAgIlRvZ2ds ZSBtaW5vciBtb2RlIGZvciBjb250cm9sbGluZyBleHBvc3VyZSBhbmQgZWRpdGluZyBvZiB0ZXh0 IG91dGxpbmVzLgpcXDxhbGxvdXQtbW9kZS1tYXA+CgpPcHRpb25hbCBhcmcgZm9yY2VzIG1vZGUg dG8gcmUtaW5pdGlhbGl6ZSBpZmYgYXJnIGlzIHBvc2l0aXZlIG51bSBvcgpzeW1ib2wuICBBbGxv dXQgb3V0bGluZSBtb2RlIGFsd2F5cyBydW5zIGFzIGEgbWlub3IgbW9kZS4KCkFsbG91dCBvdXRs aW5lIG1vZGUgcHJvdmlkZXMgZXh0ZW5zaXZlIG91dGxpbmUgb3JpZW50ZWQgZm9ybWF0dGluZyBh bmQKbWFuaXB1bGF0aW9uLiAgSXQgZW5hYmxlcyBzdHJ1Y3R1cmFsIGVkaXRpbmcgb2Ygb3V0bGlu ZXMsIGFzIHdlbGwgYXMKbmF2aWdhdGlvbiBhbmQgZXhwb3N1cmUuICBJdCBhbHNvIGlzIHNwZWNp ZmljYWxseSBhaW1lZCBhdAphY2NvbW1vZGF0aW5nIHN5bnRheC1zZW5zaXRpdmUgdGV4dCBsaWtl IHByb2dyYW1taW5nIGxhbmd1YWdlcy4gIFwoRm9yCmFuIGV4YW1wbGUsIHNlZSB0aGUgYWxsb3V0 IGNvZGUgaXRzZWxmLCB3aGljaCBpcyBvcmdhbml6ZWQgYXMgYW4gYWxsb3V0Cm91dGxpbmUuKQoK SW4gYWRkaXRpb24gdG8gb3V0bGluZSBuYXZpZ2F0aW9uIGFuZCBleHBvc3VyZSwgYWxsb3V0IGlu Y2x1ZGVzOgoKIC0gdG9waWMtb3JpZW50ZWQgcmVwb3NpdGlvbmluZywgcHJvbW90aW9uL2RlbW90 aW9uLCBjdXQsIGFuZCBwYXN0ZQogLSBpbnRlZ3JhbCBvdXRsaW5lIGV4cG9zdXJlLWxheW91dAog LSBpbmNyZW1lbnRhbCBzZWFyY2ggd2l0aCBkeW5hbWljIGV4cG9zdXJlIGFuZCByZWNvbmNlYWxt ZW50IG9mIGhpZGRlbiB0ZXh0CiAtIGF1dG9tYXRpYyB0b3BpYy1udW1iZXIgbWFpbnRlbmFuY2UK IC0gZWFzeSB0b3BpYyBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uCiAtIFwiSG90LXNwb3RcIiBv cGVyYXRpb24sIGZvciBzaW5nbGUta2V5c3Ryb2tlIG1hbmV1dmVyaW5nIGFuZAogICAgZXhwb3N1 cmUgY29udHJvbC4gIFwoU2VlIHRoZSBhbGxvdXQtbW9kZSBkb2NzdHJpbmcuKQoKYW5kIG1hbnkg b3RoZXIgZmVhdHVyZXMuCgpCZWxvdyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBiaW5kaW5ncywg YW5kIHRoZW4gZXhwbGFuYXRpb24gb2YKc3BlY2lhbCBgYWxsb3V0LW1vZGUnIGZlYXR1cmVzIGFu ZCB0ZXJtaW5vbG9neS4gIFNlZSBhbHNvIHRoZSBvdXRsaW5lCm1lbnViYXIgYWRkaXRpb25zIGZv ciBxdWljayByZWZlcmVuY2UgdG8gbWFueSBvZiB0aGUgZmVhdHVyZXMsIGFuZCBzZWUKdGhlIGRv Y3N0cmluZyBvZiB0aGUgZnVuY3Rpb24gYGFsbG91dC1pbml0JyBmb3IgaW5zdHJ1Y3Rpb25zIG9u CnByaW1pbmcgeW91ciBlbWFjcyBzZXNzaW9uIGZvciBhdXRvbWF0aWMgYWN0aXZhdGlvbiBvZiBg YWxsb3V0LW1vZGUnLgoKClRoZSBiaW5kaW5ncyBhcmUgZGljdGF0ZWQgYnkgdGhlIGBhbGxvdXQt a2V5YmluZGluZ3MtbGlzdCcgYW5kCmBhbGxvdXQtY29tbWFuZC1wcmVmaXgnIHZhcmlhYmxlcy4K CglOYXZpZ2F0aW9uOgkJCQkgICBFeHBvc3VyZSBDb250cm9sOgoJLS0tLS0tLS0tLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0KXFxbYWxsb3V0LW5leHQt dmlzaWJsZS1oZWFkaW5nXSBhbGxvdXQtbmV4dC12aXNpYmxlLWhlYWRpbmcgICAgIHwgXFxbYWxs b3V0LWhpZGUtY3VycmVudC1zdWJ0cmVlXSBhbGxvdXQtaGlkZS1jdXJyZW50LXN1YnRyZWUKXFxb YWxsb3V0LXByZXZpb3VzLXZpc2libGUtaGVhZGluZ10gYWxsb3V0LXByZXZpb3VzLXZpc2libGUt aGVhZGluZyB8IFxcW2FsbG91dC1zaG93LWNoaWxkcmVuXSBhbGxvdXQtc2hvdy1jaGlsZHJlbgpc XFthbGxvdXQtdXAtY3VycmVudC1sZXZlbF0gYWxsb3V0LXVwLWN1cnJlbnQtbGV2ZWwgICAgICAg ICB8IFxcW2FsbG91dC1zaG93LWN1cnJlbnQtc3VidHJlZV0gYWxsb3V0LXNob3ctY3VycmVudC1z dWJ0cmVlClxcW2FsbG91dC1mb3J3YXJkLWN1cnJlbnQtbGV2ZWxdIGFsbG91dC1mb3J3YXJkLWN1 cnJlbnQtbGV2ZWwgICAgfCBcXFthbGxvdXQtc2hvdy1jdXJyZW50LWVudHJ5XSBhbGxvdXQtc2hv dy1jdXJyZW50LWVudHJ5ClxcW2FsbG91dC1iYWNrd2FyZC1jdXJyZW50LWxldmVsXSBhbGxvdXQt YmFja3dhcmQtY3VycmVudC1sZXZlbCAgIHwgXFxbYWxsb3V0LXNob3ctYWxsXSBhbGxvdXQtc2hv dy1hbGwKXFxbYWxsb3V0LWVuZC1vZi1lbnRyeV0gYWxsb3V0LWVuZC1vZi1lbnRyeQpcXFthbGxv dXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtZW50cnldIGFsbG91dC1iZWdpbm5pbmctb2YtY3VycmVu dC1lbnRyeSwgYWx0ZXJuYXRlbHksIGdvZXMgdG8gaG90LXNwb3QKCglUb3BpYyBIZWFkZXIgUHJv ZHVjdGlvbjoKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClxcW2FsbG91dC1vcGVuLXNpYnRvcGlj XQlhbGxvdXQtb3Blbi1zaWJ0b3BpYwlDcmVhdGUgYSBuZXcgc2libGluZyBhZnRlciBjdXJyZW50 IHRvcGljLgpcXFthbGxvdXQtb3Blbi1zdWJ0b3BpY10JYWxsb3V0LW9wZW4tc3VidG9waWMJLi4u IGFuIG9mZnNwcmluZyBvZiBjdXJyZW50IHRvcGljLgpcXFthbGxvdXQtb3Blbi1zdXBlcnRvcGlj XQlhbGxvdXQtb3Blbi1zdXBlcnRvcGljCS4uLiBhIHNpYmxpbmcgb2YgdGhlIGN1cnJlbnQgdG9w aWMncyBwYXJlbnQuCgoJVG9waWMgTGV2ZWwgYW5kIFByZWZpeCBBZGp1c3RtZW50OgoJLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClxcW2FsbG91dC1zaGlmdC1pbl0JYWxsb3V0LXNo aWZ0LWluCVNoaWZ0IGN1cnJlbnQgdG9waWMgYW5kIGFsbCBvZmZzcHJpbmcgZGVlcGVyLgpcXFth bGxvdXQtc2hpZnQtb3V0XQlhbGxvdXQtc2hpZnQtb3V0CS4uLiBsZXNzIGRlZXAuClxcW2FsbG91 dC1yZWJ1bGxldC1jdXJyZW50LWhlYWRpbmddCWFsbG91dC1yZWJ1bGxldC1jdXJyZW50LWhlYWRp bmcgUHJvbXB0IGZvciBhbHRlcm5hdGUgYnVsbGV0IGZvcgoJCQkJCSBjdXJyZW50IHRvcGljLgpc XFthbGxvdXQtcmVidWxsZXQtdG9waWNdCWFsbG91dC1yZWJ1bGxldC10b3BpYwlSZWNvbmNpbGUg YnVsbGV0cyBvZiB0b3BpYyBhbmQgaXRzIG9mZnNwcmluZwoJCQkJLSBkaXN0aW5jdGl2ZSBidWxs ZXRzIGFyZSBub3QgY2hhbmdlZCwgb3RoZXJzCgkJCQkgIGFsdGVybmF0ZWQgYWNjb3JkaW5nIHRv IG5lc3RpbmcgZGVwdGguClxcW2FsbG91dC1udW1iZXItc2libGluZ3NdCWFsbG91dC1udW1iZXIt c2libGluZ3MJTnVtYmVyIGJ1bGxldHMgb2YgdG9waWMgYW5kIHNpYmxpbmdzIC0gdGhlCgkJCQlv ZmZzcHJpbmcgYXJlIG5vdCBhZmZlY3RlZC4gIFdpdGggcmVwZWF0CgkJCQljb3VudCwgcmV2b2tl IG51bWJlcmluZy4KCglUb3BpYy1vcmllbnRlZCBLaWxsaW5nIGFuZCBZYW5raW5nOgoJLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpcXFthbGxvdXQta2lsbC10b3BpY10JYWxsb3V0 LWtpbGwtdG9waWMJS2lsbCBjdXJyZW50IHRvcGljLCBpbmNsdWRpbmcgb2Zmc3ByaW5nLgpcXFth bGxvdXQtY29weS10b3BpYy1hcy1raWxsXQlhbGxvdXQtY29weS10b3BpYy1hcy1raWxsIENvcHkg Y3VycmVudCB0b3BpYywgaW5jbHVkaW5nIG9mZnNwcmluZy4KXFxbYWxsb3V0LWtpbGwtbGluZV0J YWxsb3V0LWtpbGwtbGluZQlraWxsLWxpbmUsIGF0dGVuZGluZyB0byBvdXRsaW5lIHN0cnVjdHVy ZS4KXFxbYWxsb3V0LWNvcHktbGluZS1hcy1raWxsXQlhbGxvdXQtY29weS1saW5lLWFzLWtpbGwg Q29weSBsaW5lIGJ1dCBkb24ndCBkZWxldGUgaXQuClxcW2FsbG91dC15YW5rXQlhbGxvdXQteWFu awkJWWFuaywgYWRqdXN0aW5nIGRlcHRoIG9mIHlhbmtlZCB0b3BpYyB0bwoJCQkJZGVwdGggb2Yg aGVhZGluZyBpZiB5YW5raW5nIGludG8gYmFyZSB0b3BpYwoJCQkJaGVhZGluZyAoaWUsIHByZWZp eCBzYW5zIHRleHQpLgpcXFthbGxvdXQteWFuay1wb3BdCWFsbG91dC15YW5rLXBvcAlJcyB0byBh bGxvdXQteWFuayBhcyB5YW5rLXBvcCBpcyB0byB5YW5rCgoJVG9waWMtb3JpZW50ZWQgRW5jcnlw dGlvbjoKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KXFxbYWxsb3V0LXRvZ2dsZS1jdXJyZW50 LXN1YnRyZWUtZW5jcnlwdGlvbl0JYWxsb3V0LXRvZ2dsZS1jdXJyZW50LXN1YnRyZWUtZW5jcnlw dGlvbiBFbmNyeXB0L0RlY3J5cHQgdG9waWMgY29udGVudAoKCU1pc2MgY29tbWFuZHM6CgktLS0t LS0tLS0tLS0tCk0teCBvdXRsaW5laWZ5LXN0aWNreQkJQWN0aXZhdGUgb3V0bGluZSBtb2RlIGZv ciBjdXJyZW50IGJ1ZmZlciwKCQkJCWFuZCBlc3RhYmxpc2ggYSBkZWZhdWx0IGZpbGUtdmFyIHNl dHRpbmcKCQkJCWZvciBgYWxsb3V0LWxheW91dCcuClxcW2FsbG91dC1tYXJrLXRvcGljXSAgIAlh bGxvdXQtbWFyay10b3BpYwpcXFthbGxvdXQtY29weS1leHBvc2VkLXRvLWJ1ZmZlcl0gICAgIGFs bG91dC1jb3B5LWV4cG9zZWQtdG8tYnVmZmVyCgkJCQlEdXBsaWNhdGUgb3V0bGluZSwgc2FucyBj b25jZWFsZWQgdGV4dCwgdG8KCQkJCWJ1ZmZlciB3aXRoIG5hbWUgZGVyaXZlZCBmcm9tIGRlcml2 ZWQgZnJvbSB0aGF0CgkJCQlvZiBjdXJyZW50IGJ1ZmZlciAtIFwiKkJVRkZFUk5BTUUgZXhwb3Nl ZCpcIi4KXFxbYWxsb3V0LWZsYXR0ZW4tZXhwb3NlZC10by1idWZmZXJdCWFsbG91dC1mbGF0dGVu LWV4cG9zZWQtdG8tYnVmZmVyCgkJCQlMaWtlIGFib3ZlICdjb3B5LWV4cG9zZWQnLCBidXQgY29u dmVydCB0b3BpYwoJCQkJcHJlZml4ZXMgdG8gc2VjdGlvbi5zdWJzZWN0aW9uLi4uIG51bWVyaWMK CQkJCWZvcm1hdC4KXFxbZXZhbC1leHByZXNzaW9uXSAoYWxsb3V0LWluaXQgdCkJU2V0dXAgRW1h Y3Mgc2Vzc2lvbiBmb3Igb3V0bGluZSBtb2RlCgkJCQlhdXRvLWFjdGl2YXRpb24uCgogICAgICAg ICAgICAgICAgICBUb3BpYyBFbmNyeXB0aW9uCgpPdXRsaW5lIG1vZGUgc3VwcG9ydHMgZ3BnIGVu Y3J5cHRpb24gb2YgdG9waWNzLCB3aXRoIHN1cHBvcnQgZm9yCnN5bW1ldHJpYyBhbmQga2V5LXBh aXIgbW9kZXMsIHBhc3NwaHJhc2UgdGltZW91dCwgcGFzc3BocmFzZQpjb25zaXN0ZW5jeSBjaGVj a2luZywgdXNlci1wcm92aWRlZCBoaW50aW5nIGZvciBzeW1tZXRyaWMga2V5Cm1vZGUsIGFuZCBh dXRvLWVuY3J5cHRpb24gb2YgdG9waWNzIHBlbmRpbmcgZW5jcnlwdGlvbiBvbiBzYXZlLgpcKFRv cGljcyBwZW5kaW5nIGVuY3J5cHRpb24gYXJlLCBieSBkZWZhdWx0LCBhdXRvbWF0aWNhbGx5CmVu Y3J5cHRlZCBkdXJpbmcgZmlsZSBzYXZlczsgaWYgeW91J3JlIGVkaXRpbmcgdGhlIGNvbnRlbnRz IG9mCnN1Y2ggYSB0b3BpYywgaXQgaXMgYXV0b21hdGljYWxseSBkZWNyeXB0ZWQgZm9yIGNvbnRp bnVlZAplZGl0aW5nLikgIFRoZSBhaW0gaXMgcmVsaWFibGUgdG9waWMgcHJpdmFjeSB3aGlsZSBw cmV2ZW50aW5nCmFjY2lkZW50cyBsaWtlIG5lZ2xlY3RlZCBlbmNyeXB0aW9uIGJlZm9yZSBzYXZl cywgZm9yZ2V0dGluZwp3aGljaCBwYXNzcGhyYXNlIHdhcyB1c2VkLCBhbmQgb3RoZXIgcHJhY3Rp Y2FsIHBpdGZhbGxzLgoKU2VlIGBhbGxvdXQtdG9nZ2xlLWN1cnJlbnQtc3VidHJlZS1lbmNyeXB0 aW9uJyBmdW5jdGlvbiBkb2NzdHJpbmcgYW5kCmBhbGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1v bi1zYXZlcycgY3VzdG9taXphdGlvbiB2YXJpYWJsZSBmb3IgZGV0YWlscy4KCgkJIEhPVC1TUE9U IE9wZXJhdGlvbgoKSG90LXNwb3Qgb3BlcmF0aW9uIHByb3ZpZGVzIGEgbWVhbnMgZm9yIGVhc3ks IHNpbmdsZS1rZXlzdHJva2Ugb3V0bGluZQpuYXZpZ2F0aW9uIGFuZCBleHBvc3VyZSBjb250cm9s LgoKV2hlbiB0aGUgdGV4dCBjdXJzb3IgaXMgcG9zaXRpb25lZCBkaXJlY3RseSBvbiB0aGUgYnVs bGV0IGNoYXJhY3RlciBvZgphIHRvcGljLCByZWd1bGFyIGNoYXJhY3RlcnMgKGEgdG8geikgaW52 b2tlIHRoZSBjb21tYW5kcyBvZiB0aGUKY29ycmVzcG9uZGluZyBhbGxvdXQtbW9kZSBrZXltYXAg Y29udHJvbCBjaGFycy4gIEZvciBleGFtcGxlLCBcImZcIgp3b3VsZCBpbnZva2UgdGhlIGNvbW1h bmQgdHlwaWNhbGx5IGJvdW5kIHRvIFwiQy1jPHNwYWNlPkMtZlwiClwoXFxbYWxsb3V0LWZvcndh cmQtY3VycmVudC1sZXZlbF0gYGFsbG91dC1mb3J3YXJkLWN1cnJlbnQtbGV2ZWwnKS4KClRodXMs IGJ5IHBvc2l0aW9uaW5nIHRoZSBjdXJzb3Igb24gYSB0b3BpYyBidWxsZXQsIHlvdSBjYW4KZXhl Y3V0ZSB0aGUgb3V0bGluZSBuYXZpZ2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gY29tbWFuZHMgd2l0 aCBhCnNpbmdsZSBrZXlzdHJva2UuICBSZWd1bGFyIG5hdmlnYXRpb24ga2V5cyAoZWcsIFxcW2Zv cndhcmQtY2hhcl0sIFxcW25leHQtbGluZV0pIG5ldmVyIGdldAp0aGlzIHNwZWNpYWwgdHJhbnNs YXRpb24sIHNvIHlvdSBjYW4gdXNlIHRoZW0gdG8gZ2V0IG91dCBvZiB0aGUKaG90LXNwb3QgYW5k IGJhY2sgdG8gbm9ybWFsIG9wZXJhdGlvbi4KCk5vdGUgdGhhdCB0aGUgY29tbWFuZCBgYWxsb3V0 LWJlZ2lubmluZy1vZi1jdXJyZW50LWVudHJ5JyBcKFxcW2FsbG91dC1iZWdpbm5pbmctb2YtY3Vy cmVudC1lbnRyeV1cKQp3aWxsIG1vdmUgdG8gdGhlIGhvdC1zcG90IHdoZW4gdGhlIGN1cnNvciBp cyBhbHJlYWR5IGxvY2F0ZWQgYXQgdGhlCmJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBlbnRyeSwg c28geW91IHVzdWFsbHkgY2FuIGhpdCBcXFthbGxvdXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtZW50 cnldCnR3aWNlIGluIGEgcm93IHRvIGdldCB0byB0aGUgaG90LXNwb3QuCgoJCQkgICAgVGVybWlu b2xvZ3kKClRvcGljIGhpZXJhcmNoeSBjb25zdGl0dWVudHMgLSBUT1BJQ1MgYW5kIFNVQlRPUElD UzoKClRPUElDOglBIGJhc2ljLCBjb2hlcmVudCBjb21wb25lbnQgb2YgYW4gRW1hY3Mgb3V0bGlu ZS4gIEl0IGNhbgoJY29udGFpbiBhbmQgYmUgY29udGFpbmVkIGJ5IG90aGVyIHRvcGljcy4KQ1VS UkVOVCB0b3BpYzoKCVRoZSB2aXNpYmxlIHRvcGljIG1vc3QgaW1tZWRpYXRlbHkgY29udGFpbmlu ZyB0aGUgY3Vyc29yLgpERVBUSDoJVGhlIGRlZ3JlZSBvZiBuZXN0aW5nIG9mIGEgdG9waWM7IGl0 IGluY3JlYXNlcyB3aXRoCgljb250YWlubWVudC4gIEFsc28gY2FsbGVkIHRoZToKTEVWRUw6CVRo ZSBzYW1lIGFzIERFUFRILgoKQU5DRVNUT1JTOgoJVGhlIHRvcGljcyB0aGF0IGNvbnRhaW4gYSB0 b3BpYy4KUEFSRU5UOglBIHRvcGljJ3MgaW1tZWRpYXRlIGFuY2VzdG9yLiAgSXQgaGFzIGEgZGVw dGggb25lIGxlc3MgdGhhbgoJdGhlIHRvcGljLgpPRkZTUFJJTkc6CglUaGUgdG9waWNzIGNvbnRh aW5lZCBieSBhIHRvcGljOwpTVUJUT1BJQzoKCUFuIGltbWVkaWF0ZSBvZmZzcHJpbmcgb2YgYSB0 b3BpYzsKQ0hJTERSRU46CglUaGUgaW1tZWRpYXRlIG9mZnNwcmluZyBvZiBhIHRvcGljLgpTSUJM SU5HUzoKCVRvcGljcyBoYXZpbmcgdGhlIHNhbWUgcGFyZW50IGFuZCBkZXB0aC4KClRvcGljIHRl eHQgY29uc3RpdHVlbnRzOgoKSEVBREVSOglUaGUgZmlyc3QgbGluZSBvZiBhIHRvcGljLCBpbmNs dWRlIHRoZSB0b3BpYyBQUkVGSVggYW5kIGhlYWRlcgoJdGV4dC4KUFJFRklYOiBUaGUgbGVhZGlu ZyB0ZXh0IG9mIGEgdG9waWMgd2hpY2ggZGlzdGluZ3Vpc2hlcyBpdCBmcm9tIG5vcm1hbAogICAg ICAgIHRleHQuICBJdCBoYXMgYSBzdHJpY3QgZm9ybSwgd2hpY2ggY29uc2lzdHMgb2YgYSBwcmVm aXgtbGVhZAogICAgICAgIHN0cmluZywgcGFkZGluZywgYW5kIGEgYnVsbGV0LiAgVGhlIGJ1bGxl dCBtYXkgYmUgZm9sbG93ZWQgYnkgYQogICAgICAgIG51bWJlciwgaW5kaWNhdGluZyB0aGUgb3Jk aW5hbCBudW1iZXIgb2YgdGhlIHRvcGljIGFtb25nIGl0cwogICAgICAgIHNpYmxpbmdzLCBhIHNw YWNlLCBhbmQgdGhlbiB0aGUgaGVhZGVyIHRleHQuCgoJVGhlIHJlbGF0aXZlIGxlbmd0aCBvZiB0 aGUgUFJFRklYIGRldGVybWluZXMgdGhlIG5lc3RpbmcgZGVwdGgKCW9mIHRoZSB0b3BpYy4KUFJF RklYLUxFQUQ6CglUaGUgc3RyaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB0b3BpYyBwcmVmaXgs IG5vcm1hbGx5IGEgYC4nLgoJSXQgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgY2hhbmdpbmcgdGhlIHNl dHRpbmcgb2YKCWBhbGxvdXQtaGVhZGVyLXByZWZpeCcgYW5kIHRoZW4gcmVpbml0aWFsaXppbmcg YGFsbG91dC1tb2RlJy4KCglCeSBzZXR0aW5nIHRoZSBwcmVmaXgtbGVhZCB0byB0aGUgY29tbWVu dC1zdHJpbmcgb2YgYQoJcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIHlvdSBjYW4gZW1iZWQgb3V0bGlu ZSBzdHJ1Y3R1cmluZyBpbgoJcHJvZ3JhbSBjb2RlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0 aGUgbGFuZ3VhZ2UgcHJvY2Vzc2luZwoJb2YgdGhhdCBjb2RlLiAgU2VlIGBhbGxvdXQtdXNlLW1v ZGUtc3BlY2lmaWMtbGVhZGVyJwoJZG9jc3RyaW5nIGZvciBtb3JlIGRldGFpbC4KUFJFRklYLVBB RERJTkc6CglTcGFjZXMgb3IgYXN0ZXJpc2tzIHdoaWNoIHNlcGFyYXRlIHRoZSBwcmVmaXgtbGVh ZCBhbmQgdGhlCglidWxsZXQsIGRldGVybWluaW5nIHRoZSBkZXB0aCBvZiB0aGUgdG9waWMuCkJV TExFVDogQSBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgdG9waWMgcHJlZml4LCBpdCBtdXN0 IGJlIG9uZSBvZgoJdGhlIGNoYXJhY3RlcnMgbGlzdGVkIG9uIGBhbGxvdXQtcGxhaW4tYnVsbGV0 cy1zdHJpbmcnIG9yCiAgICAgICAgYGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRzLXN0cmluZycu ICAoU2VlIHRoZSBkb2N1bWVudGF0aW9uCiAgICAgICAgZm9yIHRoZXNlIHZhcmlhYmxlcyBmb3Ig bW9yZSBkZXRhaWxzLikgIFRoZSBkZWZhdWx0IGNob2ljZSBvZgoJYnVsbGV0IHdoZW4gZ2VuZXJh dGluZyB0b3BpY3MgdmFyaWVzIGluIGEgY3ljbGUgd2l0aCB0aGUgZGVwdGggb2YKCXRoZSB0b3Bp Yy4KRU5UUlk6CVRoZSB0ZXh0IGNvbnRhaW5lZCBpbiBhIHRvcGljIGJlZm9yZSBhbnkgb2Zmc3By aW5nLgpCT0RZOglTYW1lIGFzIEVOVFJZLgoKCkVYUE9TVVJFOgogCVRoZSBzdGF0ZSBvZiBhIHRv cGljIHdoaWNoIGRldGVybWluZXMgdGhlIG9uLXNjcmVlbiB2aXNpYmlsaXR5CglvZiBpdHMgb2Zm c3ByaW5nIGFuZCBjb250YWluZWQgdGV4dC4KQ09OQ0VBTEVEOgoJVG9waWNzIGFuZCBlbnRyeSB0 ZXh0IHdob3NlIGRpc3BsYXkgaXMgaW5oaWJpdGVkLiAgQ29udGlndW91cwoJdW5pdHMgb2YgY29u Y2VhbGVkIHRleHQgaXMgcmVwcmVzZW50ZWQgYnkgYC4uLicgZWxsaXBzZXMuCgoJQ29uY2VhbGVk IHRvcGljcyBhcmUgZWZmZWN0aXZlbHkgY29sbGFwc2VkIHdpdGhpbiBhbiBhbmNlc3Rvci4KQ0xP U0VEOglBIHRvcGljIHdob3NlIGltbWVkaWF0ZSBvZmZzcHJpbmcgYW5kIGJvZHktdGV4dCBpcyBj b25jZWFsZWQuCk9QRU46CUEgdG9waWMgdGhhdCBpcyBub3QgY2xvc2VkLCB0aG91Z2ggaXRzIG9m ZnNwcmluZyBvciBib2R5IG1heSBiZS4iCjs7O18gICAgLiBDb2RlCiAgKGludGVyYWN0aXZlICJQ IikKCiAgKGxldCogKChhY3RpdmUgKGFuZCAobm90IChlcXVhbCBtYWpvci1tb2RlICdvdXRsaW5l KSkKCQkgICAgIChhbGxvdXQtbW9kZS1wKSkpCgkJCQkgICAgICAgOyBNYXNzYWdlIHVuaXZlcnNh bC1hcmcgYHRvZ2dsZScgdmFsOgoJICh0b2dnbGUgKGFuZCB0b2dnbGUKCQkgICAgIChvciAoYW5k IChsaXN0cCB0b2dnbGUpKGNhciB0b2dnbGUpKQoJCQkgdG9nZ2xlKSkpCgkJCQkgICAgICAgOyBB Y3RpdmF0aW9uIHNwZWNpZmljYWxseSBkZW1hbmRlZD8KCSAoZXhwbGljaXQtYWN0aXZhdGlvbiAo YW5kIHRvZ2dsZQoJCQkJICAgKG9yIChzeW1ib2xwIHRvZ2dsZSkKCQkJCSAgICAgICAoYW5kICh3 aG9sZW51bXAgdG9nZ2xlKQoJCQkJCSAgICAobm90ICh6ZXJvcCB0b2dnbGUpKSkpKSkKCSA7OyBh bGxvdXQtbW9kZSBhbHJlYWR5IGNhbGxlZCBvbmNlIGR1cmluZyB0aGlzIGNvbXBsZXggY29tbWFu ZD8KCSAoc2FtZS1jb21wbGV4LWNvbW1hbmQgKGVxIGFsbG91dC12MTgvMTktZmlsZS12YXItaGFj awoJCQkJICAoY2FyIGNvbW1hbmQtaGlzdG9yeSkpKQogICAgICAgICAod3JpdGUtZmlsZS1ob29r LXZhci1uYW1lIChjb25kICgoYm91bmRwICd3cml0ZS1maWxlLWZ1bmN0aW9ucykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRlLWZpbGUtZnVuY3Rpb25zKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYm91bmRwICd3cml0ZS1m aWxlLWhvb2tzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3Jp dGUtZmlsZS1ob29rcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dCAnbG9jYWwtd3JpdGUtZmlsZS1ob29rcykpKQoJIGRvLWxheW91dAoJICkKCgkJCQkgICAgICAg OyBTZWUgY29tbWVudHMgYmVsb3cgcmUgdjE5LjE4LC4xOSBidWcuCiAgICAoc2V0cSBhbGxvdXQt djE4LzE5LWZpbGUtdmFyLWhhY2sgKGNhciBjb21tYW5kLWhpc3RvcnkpKQoKICAgIChjb25kCgog ICAgIDs7IFByb3Zpc2lvbiBmb3IgdjE5LjE4LCAxOS4xOSBidWcgLQogICAgIDs7IEVtYWNzIHYg MTkuMTgsIDE5LjE5IGZpbGUtdmFyIGNvZGUgaW52b2tlcyBwcm9wLWxpbmUtZGVzaWduYXRlZAog ICAgIDs7IG1vZGVzIHR3aWNlIHdoZW4gZmlsZSBpcyB2aXNpdGVkLiAgV2UgaGF2ZSB0byBhdm9p ZCB0b2dnbGluZyBtb2RlCiAgICAgOzsgb2ZmIG9uIHNlY29uZCBpbnZvY2F0aW9uLCBzbyB3ZSBk ZXRlY3QgaXQgYXMgYmVzdCB3ZSBjYW4sIGFuZAogICAgIDs7IHNraXAgZXZlcnl0aGluZy4KICAg ICAoKGFuZCBzYW1lLWNvbXBsZXgtY29tbWFuZAkJOyBTdGlsbCBpbiBzYW1lIGNvbXBsZXggY29t bWFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBhcyBsYXN0IHRp bWUgYGFsbG91dC1tb2RlJyBpbnZva2VkLgoJICBhY3RpdmUJCQk7IEFscmVhZHkgYWN0aXZhdGVk LgoJICAobm90IGV4cGxpY2l0LWFjdGl2YXRpb24pCTsgUHJvcC1saW5lIGZpbGUtdmFycyBkb24n dCBoYXZlIGFyZ3MuCgkgIChzdHJpbmctbWF0Y2ggIl4xOS4xWzg5XSIJOyBCdWcgb25seSBrbm93 biB0byBiZSBpbiB2MTkuMTggYW5kCgkJCWVtYWNzLXZlcnNpb24pKTsgMTkuMTkuCiAgICAgIHQp CgogICAgIDs7IERlYWN0aXZhdGlvbjoKICAgICAoKGFuZCAobm90IGV4cGxpY2l0LWFjdGl2YXRp b24pCgkgIChvciBhY3RpdmUgdG9nZ2xlKSkKCQkJCSAgICAgICA7IEFjdGl2YXRpb24gbm90IGV4 cGxpY2l0bHkKCQkJCSAgICAgICA7IHJlcXVlc3RlZCwgYW5kIGVpdGhlciBpbgoJCQkJICAgICAg IDsgYWN0aXZlIHN0YXRlIG9yICpkZSphY3RpdmF0aW9uCgkJCQkgICAgICAgOyBzcGVjaWZpY2Fs bHkgcmVxdWVzdGVkOgogICAgICAoc2V0cSBhbGxvdXQtZXhwbGljaXRseS1kZWFjdGl2YXRlZCB0 KQoKICAgICAgKGFsbG91dC1kby1yZXN1bXB0aW9ucykKCiAgICAgIChyZW1vdmUtZnJvbS1pbnZp c2liaWxpdHktc3BlYyAnKGFsbG91dCAuIHQpKQogICAgICAocmVtb3ZlLWhvb2sgJ3ByZS1jb21t YW5kLWhvb2sgJ2FsbG91dC1wcmUtY29tbWFuZC1idXNpbmVzcyB0KQogICAgICAocmVtb3ZlLWhv b2sgJ3Bvc3QtY29tbWFuZC1ob29rICdhbGxvdXQtcG9zdC1jb21tYW5kLWJ1c2luZXNzIHQpCiAg ICAgIChyZW1vdmUtaG9vayAnYmVmb3JlLWNoYW5nZS1mdW5jdGlvbnMgJ2FsbG91dC1iZWZvcmUt Y2hhbmdlLWhhbmRsZXIgdCkKICAgICAgKHJlbW92ZS1ob29rICdpc2VhcmNoLW1vZGUtZW5kLWhv b2sgJ2FsbG91dC1pc2VhcmNoLWVuZC1oYW5kbGVyIHQpCiAgICAgIChyZW1vdmUtaG9vayB3cml0 ZS1maWxlLWhvb2stdmFyLW5hbWUgJ2FsbG91dC13cml0ZS1maWxlLWhvb2staGFuZGxlciB0KQog ICAgICAocmVtb3ZlLWhvb2sgJ2F1dG8tc2F2ZS1ob29rICdhbGxvdXQtYXV0by1zYXZlLWhvb2st aGFuZGxlciB0KQoKICAgICAgKHJlbW92ZS1vdmVybGF5cyAocG9pbnQtbWluKSAocG9pbnQtbWF4 KQogICAgICAgICAgICAgICAgICAgICAgICdjYXRlZ29yeSAnYWxsb3V0LWV4cG9zdXJlLWNhdGVn b3J5KQoKICAgICAgKHNldHEgYWxsb3V0LW1vZGUgbmlsKQogICAgICAocnVuLWhvb2tzICdhbGxv dXQtbW9kZS1kZWFjdGl2YXRlLWhvb2spKQoKICAgICA7OyBBY3RpdmF0aW9uOgogICAgICgobm90 IGFjdGl2ZSkKICAgICAgKHNldHEgYWxsb3V0LWV4cGxpY2l0bHktZGVhY3RpdmF0ZWQgbmlsKQog ICAgICAoaWYgYWxsb3V0LW9sZC1zdHlsZS1wcmVmaXhlcwogICAgICAgICAgOzsgSW5oaWJpdCBh bGwgdGhlIGZhbmN5IGZvcm1hdHRpbmc6CiAgICAgICAgICAoYWxsb3V0LWFkZC1yZXN1bXB0aW9u cyAnKGFsbG91dC1wcmltYXJ5LWJ1bGxldCAiKiIpKSkKCiAgICAgIChhbGxvdXQtb3ZlcmxheS1w cmVwYXJhdGlvbnMpICAgICA7IERvZXNuJ3QgaHVydCB0byByZWRvIHRoaXMuCgogICAgICAoYWxs b3V0LWluZmVyLWhlYWRlci1sZWFkLWFuZC1wcmltYXJ5LWJ1bGxldCkKICAgICAgKGFsbG91dC1p bmZlci1ib2R5LXJlaW5kZW50KQoKICAgICAgKHNldC1hbGxvdXQtcmVnZXhwKQogICAgICAoYWxs b3V0LWFkZC1yZXN1bXB0aW9ucwogICAgICAgJyhhbGxvdXQtZW5jcnlwdGlvbi1jaXBoZXJ0ZXh0 LXJlamVjdGlvbi1yZWdleHBzCiAgICAgICAgIGFsbG91dC1saW5lLWJvdW5kYXJ5LXJlZ2V4cAog ICAgICAgICBleHRlbmQpCiAgICAgICAnKGFsbG91dC1lbmNyeXB0aW9uLWNpcGhlcnRleHQtcmVq ZWN0aW9uLXJlZ2V4cHMKICAgICAgICAgYWxsb3V0LWJvYi1yZWdleHAKICAgICAgICAgZXh0ZW5k KSkKCiAgICAgIDs7IFByb2R1Y2UgbWFwIGZyb20gY3VycmVudCB2ZXJzaW9uIG9mIGFsbG91dC1r ZXliaW5kaW5ncy1saXN0OgogICAgICAoc2V0cSBhbGxvdXQtbW9kZS1tYXAKICAgICAgICAgICAg KHByb2R1Y2UtYWxsb3V0LW1vZGUtbWFwIGFsbG91dC1rZXliaW5kaW5ncy1saXN0KSkKICAgICAg KHN1YnN0aXR1dGUta2V5LWRlZmluaXRpb24gJ2JlZ2lubmluZy1vZi1saW5lCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdhbGxvdXQtYmVnaW5uaW5nLW9mLWxpbmUKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LW1vZGUtbWFwIGdsb2JhbC1tYXApCiAgICAg IChzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9uICdtb3ZlLWJlZ2lubmluZy1vZi1saW5lCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGxvdXQtYmVnaW5uaW5nLW9mLWxpbmUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LW1vZGUtbWFwIGdsb2JhbC1tYXAp CiAgICAgIChzdWJzdGl0dXRlLWtleS1kZWZpbml0aW9uICdlbmQtb2YtbGluZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnYWxsb3V0LWVuZC1vZi1saW5lCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFsbG91dC1tb2RlLW1hcCBnbG9iYWwtbWFwKQogICAgICAoc3Vi c3RpdHV0ZS1rZXktZGVmaW5pdGlvbiAnbW92ZS1lbmQtb2YtbGluZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnYWxsb3V0LWVuZC1vZi1saW5lCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFsbG91dC1tb2RlLW1hcCBnbG9iYWwtbWFwKQogICAgICAocHJvZHVjZS1h bGxvdXQtbW9kZS1tZW51YmFyLWVudHJpZXMpCiAgICAgIChmc2V0ICdhbGxvdXQtbW9kZS1tYXAg YWxsb3V0LW1vZGUtbWFwKQoKICAgICAgOzsgSW5jbHVkZSBvbiBtaW5vci1tb2RlLW1hcC1hbGlz dCwgaWYgbm90IGFscmVhZHkgdGhlcmU6CiAgICAgIChpZiAobm90IChtZW1iZXIgJyhhbGxvdXQt bW9kZSAuIGFsbG91dC1tb2RlLW1hcCkKICAgICAgICAgICAgICAgICAgICAgICBtaW5vci1tb2Rl LW1hcC1hbGlzdCkpCiAgICAgICAgICAoc2V0cSBtaW5vci1tb2RlLW1hcC1hbGlzdAogICAgICAg ICAgICAgICAgKGNvbnMgJyhhbGxvdXQtbW9kZSAuIGFsbG91dC1tb2RlLW1hcCkKICAgICAgICAg ICAgICAgICAgICAgIG1pbm9yLW1vZGUtbWFwLWFsaXN0KSkpCgogICAgICAoYWRkLXRvLWludmlz aWJpbGl0eS1zcGVjICcoYWxsb3V0IC4gdCkpCiAgICAgIChhbGxvdXQtYWRkLXJlc3VtcHRpb25z ICcobGluZS1tb3ZlLWlnbm9yZS1pbnZpc2libGUgdCkpCiAgICAgIChhZGQtaG9vayAncHJlLWNv bW1hbmQtaG9vayAnYWxsb3V0LXByZS1jb21tYW5kLWJ1c2luZXNzIG5pbCB0KQogICAgICAoYWRk LWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdhbGxvdXQtcG9zdC1jb21tYW5kLWJ1c2luZXNzIG5p bCB0KQogICAgICAoYWRkLWhvb2sgJ2JlZm9yZS1jaGFuZ2UtZnVuY3Rpb25zICdhbGxvdXQtYmVm b3JlLWNoYW5nZS1oYW5kbGVyCiAgICAgICAgICAgICAgICBuaWwgdCkKICAgICAgKGFkZC1ob29r ICdpc2VhcmNoLW1vZGUtZW5kLWhvb2sgJ2FsbG91dC1pc2VhcmNoLWVuZC1oYW5kbGVyIG5pbCB0 KQogICAgICAoYWRkLWhvb2sgd3JpdGUtZmlsZS1ob29rLXZhci1uYW1lICdhbGxvdXQtd3JpdGUt ZmlsZS1ob29rLWhhbmRsZXIKICAgICAgICAgICAgICAgIG5pbCB0KQogICAgICAoYWRkLWhvb2sg J2F1dG8tc2F2ZS1ob29rICdhbGxvdXQtYXV0by1zYXZlLWhvb2staGFuZGxlcgogICAgICAgICAg ICAgICAgbmlsIHQpCgogICAgICA7OyBTdGFzaCBhdXRvLWZpbGwgc2V0dGluZ3MgYW5kIGFkanVz dCBzbyBjdXN0b20gYWxsb3V0IGF1dG8tZmlsbAogICAgICA7OyBmdW5jIHdpbGwgYmUgdXNlZCBp ZiBhdXRvLWZpbGwgaXMgYWN0aXZlIG9yIGFjdGl2YXRlZC4gIChUaGUKICAgICAgOzsgY3VzdG9t IGZ1bmMgcmVzcGVjdHMgdG9waWMgaGVhZGxpbmUsIG1haW50YWlucyBoYW5naW5nLWluZGVudHMs CiAgICAgIDs7IGV0Yy4pCiAgICAgIChpZiAoYW5kIGF1dG8tZmlsbC1mdW5jdGlvbiAobm90IGFs bG91dC1pbmhpYml0LWF1dG8tZmlsbCkpCiAgICAgICAgICA7OyBhbGxvdXQtYXV0by1maWxsIHdp bGwgdXNlIHRoZSBzdGFzaGVkIHZhbHVlcyBhbmQgc28gZm9ydGguCiAgICAgICAgICAoYWxsb3V0 LWFkZC1yZXN1bXB0aW9ucyAnKGF1dG8tZmlsbC1mdW5jdGlvbiBhbGxvdXQtYXV0by1maWxsKSkp CiAgICAgIChhbGxvdXQtYWRkLXJlc3VtcHRpb25zIChsaXN0ICdhbGxvdXQtZm9ybWVyLWF1dG8t ZmlsbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8tZmlsbC1mdW5j dGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgUmVnaXN0ZXIgYWxsb3V0LWF1 dG8tZmlsbCB0byBiZSB1c2VkIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGZp bGxpbmcgaXMgYWN0aXZlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnYWxs b3V0LW91dHNpZGUtbm9ybWFsLWF1dG8tZmlsbC1mdW5jdGlvbgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBub3JtYWwtYXV0by1maWxsLWZ1bmN0aW9uKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnKG5vcm1hbC1hdXRvLWZpbGwtZnVuY3Rpb24gYWxsb3V0LWF1dG8t ZmlsbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgUGFyYWdyYXBocyBhcmUgYnJv a2VuIGJ5IHRvcGljIGhlYWRsaW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxp c3QgJ3BhcmFncmFwaC1zdGFydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uY2F0IHBhcmFncmFwaC1zdGFydCAiXFx8XlxcKCIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhbGxvdXQtcmVnZXhwICJcXCkiKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxpc3QgJ3BhcmFncmFwaC1zZXBhcmF0ZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uY2F0IHBhcmFncmFwaC1zZXBhcmF0ZSAiXFx8XlxcKCIK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtcmVnZXhw ICJcXCkiKSkpCiAgICAgIChvciAoYXNzcSAnYWxsb3V0LW1vZGUgbWlub3ItbW9kZS1hbGlzdCkK CSAgKHNldHEgbWlub3ItbW9kZS1hbGlzdAoJICAgICAgIChjb25zICcoYWxsb3V0LW1vZGUgIiBB bGxvdXQiKSBtaW5vci1tb2RlLWFsaXN0KSkpCgogICAgICAoYWxsb3V0LXNldHVwLW1lbnViYXIp CgogICAgICAoaWYgYWxsb3V0LWxheW91dAoJICAoc2V0cSBkby1sYXlvdXQgdCkpCgogICAgICAo c2V0cSBhbGxvdXQtbW9kZSB0KQogICAgICAocnVuLWhvb2tzICdhbGxvdXQtbW9kZS1ob29rKSkK CiAgICAgOzsgUmVhY3RpdmF0aW9uOgogICAgICgoc2V0cSBkby1sYXlvdXQgdCkKICAgICAgKGFs bG91dC1pbmZlci1ib2R5LXJlaW5kZW50KSkKICAgICApIDs7IGVuZCBvZiBhY3RpdmF0aW9uLW1v ZGUgY2FzZXMuCgogICAgOzsgRG8gYXV0byBsYXlvdXQgaWYgd2FycmFudGVkOgogICAgKGxldCAo KHVzZS1sYXlvdXQgKGlmIChsaXN0cCBhbGxvdXQtbGF5b3V0KQogICAgICAgICAgICAgICAgICAg ICAgICAgIGFsbG91dC1sYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LWRlZmF1 bHQtbGF5b3V0KSkpCiAgICAgIChpZiAoYW5kIGRvLWxheW91dAogICAgICAgICAgICAgICBhbGxv dXQtYXV0by1hY3RpdmF0aW9uCiAgICAgICAgICAgICAgIHVzZS1sYXlvdXQKICAgICAgICAgICAg ICAgKGFuZCAobm90IChlcSBhbGxvdXQtYXV0by1hY3RpdmF0aW9uICdhY3RpdmF0ZSkpCiAgICAg ICAgICAgICAgICAgICAgKGlmIChlcSBhbGxvdXQtYXV0by1hY3RpdmF0aW9uICdhc2spCiAgICAg ICAgICAgICAgICAgICAgICAgIChpZiAoeS1vci1uLXAgKGZvcm1hdCAiRXhwb3NlICVzIHdpdGgg bGF5b3V0ICclcyc/ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChidWZmZXItbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVzZS1sYXlvdXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdAogICAgICAg ICAgICAgICAgICAgICAgICAgIChtZXNzYWdlICJTa2lwcGVkICVzIGxheW91dC4iIChidWZmZXIt bmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsKQogICAgICAgICAgICAgICAgICAg ICAgdCkpKQogICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgIChtZXNzYWdlICJB ZGp1c3RpbmcgJyVzJyBleHBvc3VyZS4uLiIgKGJ1ZmZlci1uYW1lKSkKICAgICAgICAgICAgKGdv dG8tY2hhciAwKQogICAgICAgICAgICAoYWxsb3V0LXRoaXMtb3ItbmV4dC1oZWFkaW5nKQogICAg ICAgICAgICAoY29uZGl0aW9uLWNhc2UgZXJyCiAgICAgICAgICAgICAgICAocHJvZ24KICAgICAg ICAgICAgICAgICAgKGFwcGx5ICdhbGxvdXQtZXhwb3NlLXRvcGljIChsaXN0IHVzZS1sYXlvdXQp KQogICAgICAgICAgICAgICAgICAobWVzc2FnZSAiQWRqdXN0aW5nICclcycgZXhwb3N1cmUuLi4g ZG9uZS4iIChidWZmZXItbmFtZSkpKQogICAgICAgICAgICAgIDs7IFByb2JsZW0gYXBwbHlpbmcg ZXhwb3N1cmUgLSBub3RpZnkgdXNlciwgYnV0IGRvbid0CiAgICAgICAgICAgICAgOzsgaW50ZXJy dXB0LCBlZywgZmlsZSB2aXNpdDoKICAgICAgICAgICAgICAoZXJyb3IgKG1lc3NhZ2UgIiVzIiAo Y2FyIChjZHIgZXJyKSkpCiAgICAgICAgICAgICAgICAgICAgIChzaXQtZm9yIDEpKSkpKSkKICAg IGFsbG91dC1tb2RlCiAgICApCQkJCQk7IGxldCoKICApICAJCQkJCTsgZGVmdW4KOzs7XyAgPiBh bGxvdXQtbWlub3ItbW9kZQooZGVmYWxpYXMgJ2FsbG91dC1taW5vci1tb2RlICdhbGxvdXQtbW9k ZSkKCjs7O18gIC0gUG9zaXRpb24gQXNzZXNzbWVudAo7OztfICAgPiBhbGxvdXQtaGlkZGVuLXAg KCZvcHRpb25hbCBwb3MpCihkZWZzdWJzdCBhbGxvdXQtaGlkZGVuLXAgKCZvcHRpb25hbCBwb3Mp CiAgIk5vbi1uaWwgaWYgdGhlIGNoYXJhY3RlciBhZnRlciBwb2ludCBpcyBpbnZpc2libGUuIgog IChlcSAoZ2V0LWNoYXItcHJvcGVydHkgKG9yIHBvcyAocG9pbnQpKSAnaW52aXNpYmxlKSAnYWxs b3V0KSkKCjs7O18gID4gYWxsb3V0LW92ZXJsYXktaW5zZXJ0LWluLWZyb250LWhhbmRsZXIgKG9s IGFmdGVyIGJlZyBlbmQKOzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJm9wdGlvbmFsIHByZWxlbikKKGRlZnVuIGFsbG91dC1vdmVybGF5LWluc2VydC1p bi1mcm9udC1oYW5kbGVyIChvbCBhZnRlciBiZWcgZW5kCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByZWxlbikKICAiU2hpZnQgdGhl IG92ZXJsYXkgc28gc3R1ZmYgaW5zZXJ0ZWQgaW4gZnJvbnQgb2YgaXQgYXJlIGV4Y2x1ZGVkLiIK ICAoaWYgYWZ0ZXIKICAgICAgKG1vdmUtb3ZlcmxheSBvbCAoMSsgYmVnKSAob3ZlcmxheS1lbmQg b2wpKSkpCjs7O18gID4gYWxsb3V0LW92ZXJsYXktaW50ZXJpb3ItbW9kaWZpY2F0aW9uLWhhbmRs ZXIgKG9sIGFmdGVyIGJlZyBlbmQKOzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByZWxlbikKKGRlZnVuIGFsbG91dC1vdmVy bGF5LWludGVyaW9yLW1vZGlmaWNhdGlvbi1oYW5kbGVyIChvbCBhZnRlciBiZWcgZW5kCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlv bmFsIHByZWxlbikKICAiR2V0IGNvbmZpcm1hdGlvbiBiZWZvcmUgbWFraW5nIGFyYml0cmFyeSBj aGFuZ2VzIHRvIGludmlzaWJsZSB0ZXh0LgoKV2UgZXhwb3NlIHRoZSBpbnZpc2libGUgdGV4dCBh bmQgYXNrIGZvciBjb25maXJtYXRpb24uICBSZWZ1c2FsIG9yCmtleWJvYXJkLXF1aXQgYWJhbmRv bnMgdGhlIGNoYW5nZXMsIHdpdGgga2V5Ym9hcmQtcXVpdCBhZGRpdGlvbmFsbHkKcmVjbG9zaW5n IHRoZSBvcGVuZWQgdGV4dC4KCk5vIGNvbmZpcm1hdGlvbiBpcyBuZWNlc3Nhcnkgd2hlbiBpbmhp Yml0LXJlYWQtb25seSBpcyBzZXQgLSBlZywgYWxsb3V0CmludGVybmFsIGZ1bmN0aW9ucyB1c2Ug dGhpcyBmZWF0dXJlIGNvaGVzaXZlbHkgYnVuY2ggY2hhbmdlcy4iCgogICh3aGVuIChhbmQgKG5v dCBpbmhpYml0LXJlYWQtb25seSkgKG5vdCBhZnRlcikpCiAgICAobGV0ICgoc3RhcnQgKHBvaW50 KSkKICAgICAgICAgIChvbC1zdGFydCAob3ZlcmxheS1zdGFydCBvbCkpCiAgICAgICAgICAob2wt ZW5kIChvdmVybGF5LWVuZCBvbCkpCiAgICAgICAgICBmaXJzdCkKICAgICAgKGdvdG8tY2hhciBi ZWcpCiAgICAgICh3aGlsZSAoPCAocG9pbnQpIGVuZCkKICAgICAgICAod2hlbiAoYWxsb3V0LWhp ZGRlbi1wKQogICAgICAgICAgKGFsbG91dC1zaG93LXRvLW9mZnNob290KQogICAgICAgICAgKGlm IChhbGxvdXQtaGlkZGVuLXApCiAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uIChmb3J3YXJk LWNoYXIgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1zaG93LXRvLW9m ZnNob290KSkpCiAgICAgICAgICAod2hlbiAobm90IGZpcnN0KQogICAgICAgICAgICAoc2V0cSBm aXJzdCAocG9pbnQpKSkpCiAgICAgICAgKGdvdG8tY2hhciAoaWYgKGZlYXR1cmVwICd4ZW1hY3Mp CiAgICAgICAgICAgICAgICAgICAgICAgKG5leHQtcHJvcGVydHktY2hhbmdlICgxKyAocG9pbnQp KSBuaWwgZW5kKQogICAgICAgICAgICAgICAgICAgICAobmV4dC1jaGFyLXByb3BlcnR5LWNoYW5n ZSAoMSsgKHBvaW50KSkgZW5kKSkpKQogICAgICAod2hlbiBmaXJzdAogICAgICAgIChnb3RvLWNo YXIgZmlyc3QpCiAgICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAogICAgICAgICAgICAoaWYgKG5v dAogICAgICAgICAgICAgICAgICh5ZXMtb3Itbm8tcAogICAgICAgICAgICAgICAgICAoc3Vic3Rp dHV0ZS1jb21tYW5kLWtleXMKICAgICAgICAgICAgICAgICAgIChjb25jYXQgIk1vZGlmeSBjb25j ZWFsZWQgdGV4dD8gIChcIm5vXCIganVzdCBhYm9ydHMsIgogICAgICAgICAgICAgICAgICAgICAg ICAgICAiIFxcW2tleWJvYXJkLXF1aXRdIGFsc28gcmVjb25jZWFscykgIikpKSkKICAgICAgICAg ICAgICAgIChwcm9nbiAoZ290by1jaGFyIHN0YXJ0KQogICAgICAgICAgICAgICAgICAgICAgIChl cnJvciAiQ29uY2VhbGVkLXRleHQgY2hhbmdlIHJlZnVzZWQuIikpKQogICAgICAgICAgKHF1aXQg KGFsbG91dC1mbGFnLXJlZ2lvbiBvbC1zdGFydCBvbC1lbmQgbmlsKQogICAgICAgICAgICAgICAg KGFsbG91dC1mbGFnLXJlZ2lvbiBvbC1zdGFydCBvbC1lbmQgdCkKICAgICAgICAgICAgICAgIChl cnJvciAiQ29uY2VhbGVkLXRleHQgY2hhbmdlIGFiYW5kb25lZCwgdGV4dCByZWNvbmNlYWxlZC4i KSkpKQogICAgICAoZ290by1jaGFyIHN0YXJ0KSkpKQo7OztfICA+IGFsbG91dC1iZWZvcmUtY2hh bmdlLWhhbmRsZXIgKGJlZyBlbmQpCihkZWZ1biBhbGxvdXQtYmVmb3JlLWNoYW5nZS1oYW5kbGVy IChiZWcgZW5kKQogICJQcm90ZWN0IGFnYWluc3QgY2hhbmdlcyB0byBpbnZpc2libGUgdGV4dC4K ClNlZSBhbGxvdXQtb3ZlcmxheS1pbnRlcmlvci1tb2RpZmljYXRpb24taGFuZGxlciBmb3IgZGV0 YWlscy4iCgogIChpZiAoYW5kIChhbGxvdXQtbW9kZS1wKSB1bmRvLWluLXByb2dyZXNzIChhbGxv dXQtaGlkZGVuLXApKQogICAgICAoYWxsb3V0LXNob3ctdG8tb2Zmc2hvb3QpKQoKICA7OyBhbGxv dXQtb3ZlcmxheS1pbnRlcmlvci1tb2RpZmljYXRpb24taGFuZGxlciBvbiBhbiBvdmVybGF5IGhh bmRsZXMKICA7OyB0aGlzIGluIG90aGVyIGVtYWNzLCB2aWEgYGFsbG91dC1leHBvc3VyZS1jYXRl Z29yeSdzICdtb2RpZmljYXRpb24taG9va3MuCiAgKHdoZW4gKGFuZCAoZmVhdHVyZXAgJ3hlbWFj cykgKGFsbG91dC1tb2RlLXApKQogICAgOzsgcHJvY2VzcyBhbGwgb2YgdGhlIHBlbmRpbmcgb3Zl cmxheXM6CiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGdvdC1jaGFyIGJlZykKICAgICAgKGxl dCAoKG92ZXJsYXkgKGFsbG91dC1nZXQtaW52aXNpYmlsaXR5LW92ZXJsYXkpKSkKCShhbGxvdXQt b3ZlcmxheS1pbnRlcmlvci1tb2RpZmljYXRpb24taGFuZGxlcgoJIG92ZXJsYXkgbmlsIGJlZyBl bmQgbmlsKSkpKSkKOzs7XyAgPiBhbGxvdXQtaXNlYXJjaC1lbmQtaGFuZGxlciAoJm9wdGlvbmFs IG92ZXJsYXkpCihkZWZ1biBhbGxvdXQtaXNlYXJjaC1lbmQtaGFuZGxlciAoJm9wdGlvbmFsIG92 ZXJsYXkpCiAgIlJlY29uY2lsZSBhbGxvdXQgb3V0bGluZSBleHBvc3VyZSBvbiBhcnJpdmluZyBp biBoaWRkZW4gdGV4dCBhZnRlciBpc2VhcmNoLgoKT3B0aW9uYWwgT1ZFUkxBWSBwYXJhbWV0ZXIg aXMgZm9yIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5CmBpc2VhcmNoLW9wZW4taW52aXNp YmxlJyBvdmVybGF5IHByb3BlcnR5LiAgSXQgaXMgb3RoZXJ3aXNlIHVudXNlZCwgc28gdGhpcwpm dW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIGBpc2VhcmNoLW1vZGUtZW5kLWhvb2snLiIK CiAgKGlmIChhbmQgKGFsbG91dC1tb2RlLXApIChhbGxvdXQtaGlkZGVuLXApKQogICAgICAoYWxs b3V0LXNob3ctdG8tb2Zmc2hvb3QpKSkKCjs7O18gIzMgSW50ZXJuYWwgUG9zaXRpb24gU3RhdGUt VHJhY2tpbmcgLSAiYWxsb3V0LXJlY2VudC0qIiBmdW5jcwo7OzsgQWxsIHRoZSBiYXNpYyBvdXRs aW5lIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGRvIHN0cmluZyBtYXRjaGVzIHRvCjs7OyBldmFs dWF0ZSBoZWFkaW5nIHByZWZpeCBsb2NhdGlvbiBzZXQgdGhlIHZhcmlhYmxlcwo7OzsgYGFsbG91 dC1yZWNlbnQtcHJlZml4LWJlZ2lubmluZycgIGFuZCBgYWxsb3V0LXJlY2VudC1wcmVmaXgtZW5k Jwo7Ozsgd2hlbiBzdWNjZXNzZnVsLiAgRnVuY3Rpb25zIHN0YXJ0aW5nIHdpdGggYGFsbG91dC1y ZWNlbnQtJyBhbGwKOzs7IHVzZSB0aGlzIHN0YXRlLCBwcm92aWRpbmcgdGhlIG1lYW5zIHRvIGF2 b2lkIHJlZHVuZGFudCBzZWFyY2hlcwo7OzsgZm9yIGp1c3QtZXN0YWJsaXNoZWQgZGF0YS4gIFRo aXMgb3B0aW1pemF0aW9uIGNhbiBwcm92aWRlCjs7OyBzaWduaWZpY2FudCBzcGVlZCBpbXByb3Zl bWVudCwgYnV0IGl0IG11c3QgYmUgZW1wbG95ZWQgY2FyZWZ1bGx5Lgo7OztfICA9IGFsbG91dC1y ZWNlbnQtcHJlZml4LWJlZ2lubmluZwooZGVmdmFyIGFsbG91dC1yZWNlbnQtcHJlZml4LWJlZ2lu bmluZyAwCiAgIkJ1ZmZlciBwb2ludCBvZiB0aGUgc3RhcnQgb2YgdGhlIGxhc3QgdG9waWMgcHJl Zml4IGVuY291bnRlcmVkLiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXJl Y2VudC1wcmVmaXgtYmVnaW5uaW5nKQo7OztfICA9IGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZAoo ZGVmdmFyIGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCAwCiAgIkJ1ZmZlciBwb2ludCBvZiB0aGUg ZW5kIG9mIHRoZSBsYXN0IHRvcGljIHByZWZpeCBlbmNvdW50ZXJlZC4iKQoobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ2FsbG91dC1yZWNlbnQtcHJlZml4LWVuZCkKOzs7XyAgPSBhbGxvdXQt cmVjZW50LWRlcHRoCihkZWZ2YXIgYWxsb3V0LXJlY2VudC1kZXB0aCAwCiAgIkRlcHRoIG9mIHRo ZSBsYXN0IHRvcGljIHByZWZpeCBlbmNvdW50ZXJlZC4iKQoobWFrZS12YXJpYWJsZS1idWZmZXIt bG9jYWwgJ2FsbG91dC1yZWNlbnQtZGVwdGgpCjs7O18gID0gYWxsb3V0LXJlY2VudC1lbmQtb2Yt c3VidHJlZQooZGVmdmFyIGFsbG91dC1yZWNlbnQtZW5kLW9mLXN1YnRyZWUgMAogICJCdWZmZXIg cG9pbnQgbGFzdCByZXR1cm5lZCBieSBgYWxsb3V0LWVuZC1vZi1jdXJyZW50LXN1YnRyZWUnLiIp CihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnYWxsb3V0LXJlY2VudC1lbmQtb2Ytc3VidHJl ZSkKOzs7XyAgPiBhbGxvdXQtcHJlZml4LWRhdGEgKCkKKGRlZnN1YnN0IGFsbG91dC1wcmVmaXgt ZGF0YSAoKQogICJSZWdpc3RlciBhbGxvdXQtcHJlZml4IHN0YXRlIGRhdGEuCgpGb3IgcmVmZXJl bmNlIGJ5IGBhbGxvdXQtcmVjZW50JyBmdW5jcy4gIFJldHVybnMgQkVHSU5OSU5HLiIKICAoc2V0 cSBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQgKG9yIChtYXRjaC1lbmQgMSkgKG1hdGNoLWVuZCAy KSkKICAgICAgICBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcgKG9yIChtYXRjaC1iZWdp bm5pbmcgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRj aC1iZWdpbm5pbmcgMikpCiAgICAgICAgYWxsb3V0LXJlY2VudC1kZXB0aCAobWF4IDEgKC0gYWxs b3V0LXJlY2VudC1wcmVmaXgtZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWxsb3V0LWhlYWRlci1zdWJ0cmFjdGlvbikpKQogIGFsbG91dC1yZWNl bnQtcHJlZml4LWJlZ2lubmluZykKOzs7XyAgPiBudWxsaWZ5LWFsbG91dC1wcmVmaXgtZGF0YSAo KQooZGVmc3Vic3QgbnVsbGlmeS1hbGxvdXQtcHJlZml4LWRhdGEgKCkKICAiTWFyayBhbGxvdXQg cHJlZml4IGRhdGEgYXMgYmVpbmcgdW5pbmZvcm1hdGl2ZS4iCiAgKHNldHEgYWxsb3V0LXJlY2Vu dC1wcmVmaXgtZW5kIChwb2ludCkKICAgICAgICBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5p bmcgKHBvaW50KQogICAgICAgIGFsbG91dC1yZWNlbnQtZGVwdGggMCkKICBhbGxvdXQtcmVjZW50 LXByZWZpeC1iZWdpbm5pbmcpCjs7O18gID4gYWxsb3V0LXJlY2VudC1kZXB0aCAoKQooZGVmc3Vi c3QgYWxsb3V0LXJlY2VudC1kZXB0aCAoKQogICJSZXR1cm4gZGVwdGggb2YgbGFzdCBoZWFkaW5n IGVuY291bnRlcmVkIGJ5IGFuIG91dGxpbmUgbWFuZXV2ZXJpbmcgZnVuY3Rpb24uCgpBbGwgb3V0 bGluZSBmdW5jdGlvbnMgd2hpY2ggZGlyZWN0bHkgZG8gc3RyaW5nIG1hdGNoZXMgdG8gYXNzZXNz CmhlYWRpbmdzIHNldCB0aGUgdmFyaWFibGVzIGBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5p bmcnIGFuZApgYWxsb3V0LXJlY2VudC1wcmVmaXgtZW5kJyBpZiBzdWNjZXNzZnVsLiAgVGhpcyBm dW5jdGlvbiB1c2VzIHRob3NlIHNldHRpbmdzCnRvIHJldHVybiB0aGUgY3VycmVudCBkZXB0aC4i CgogIGFsbG91dC1yZWNlbnQtZGVwdGgpCjs7O18gID4gYWxsb3V0LXJlY2VudC1wcmVmaXggKCkK KGRlZnN1YnN0IGFsbG91dC1yZWNlbnQtcHJlZml4ICgpCiAgIkxpa2UgYGFsbG91dC1yZWNlbnQt ZGVwdGgnLCBidXQgcmV0dXJucyB0ZXh0IG9mIGxhc3QgZW5jb3VudGVyZWQgcHJlZml4LgoKQWxs IG91dGxpbmUgZnVuY3Rpb25zIHdoaWNoIGRpcmVjdGx5IGRvIHN0cmluZyBtYXRjaGVzIHRvIGFz c2VzcwpoZWFkaW5ncyBzZXQgdGhlIHZhcmlhYmxlcyBgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVn aW5uaW5nJyBhbmQKYGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCcgaWYgc3VjY2Vzc2Z1bC4gIFRo aXMgZnVuY3Rpb24gdXNlcyB0aG9zZSBzZXR0aW5ncwp0byByZXR1cm4gdGhlIGN1cnJlbnQgcHJl Zml4LiIKICAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIGFsbG91dC1yZWNlbnQtcHJl Zml4LWJlZ2lubmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LXJl Y2VudC1wcmVmaXgtZW5kKSkKOzs7XyAgPiBhbGxvdXQtcmVjZW50LWJ1bGxldCAoKQooZGVmbWFj cm8gYWxsb3V0LXJlY2VudC1idWxsZXQgKCkKICAiTGlrZSBhbGxvdXQtcmVjZW50LXByZWZpeCwg YnV0IHJldHVybnMgYnVsbGV0IG9mIGxhc3QgZW5jb3VudGVyZWQgcHJlZml4LgoKQWxsIG91dGxp bmUgZnVuY3Rpb25zIHdoaWNoIGRpcmVjdGx5IGRvIHN0cmluZyBtYXRjaGVzIHRvIGFzc2Vzcwpo ZWFkaW5ncyBzZXQgdGhlIHZhcmlhYmxlcyBgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5n JyBhbmQKYGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCcgaWYgc3VjY2Vzc2Z1bC4gIFRoaXMgZnVu Y3Rpb24gdXNlcyB0aG9zZSBzZXR0aW5ncwp0byByZXR1cm4gdGhlIGN1cnJlbnQgZGVwdGggb2Yg dGhlIG1vc3QgcmVjZW50bHkgbWF0Y2hlZCB0b3BpYy4iCiAgJyhidWZmZXItc3Vic3RyaW5nLW5v LXByb3BlcnRpZXMgKDEtIGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQpKQoKOzs7XyAjNCBO YXZpZ2F0aW9uCgo7OztfICAtIFBvc2l0aW9uIEFzc2Vzc21lbnQKOzs7XyAgIDogTG9jYXRpb24g UHJlZGljYXRlcwo7OztfICAgID4gYWxsb3V0LWRvLWRvdWJsZWNoZWNrICgpCihkZWZzdWJzdCBh bGxvdXQtZG8tZG91YmxlY2hlY2sgKCkKICAiVHJ1ZSBpZiBjdXJyZW50IGl0ZW0gY29uZGl0aW9u cyBxdWFsaWZ5IGZvciBjaGVja2luZyBvbiB0b3BpYyBhYmVycmFuY2UuIgogIChhbmQKICAgOzsg cHJlc3VtZSBpbnRlZ3JpdHkgb2Ygb3V0bGluZSBhbmQgeWFua2VkIGNvbnRlbnQgZHVyaW5nIHlh bmsgLSBuZWNlc3NhcnksCiAgIDs7IHRvIGFsbG93IGZvciBsZXZlbCBkaXNwYXJpdHkgb2YgeWFu ayBsb2NhdGlvbiBhbmQgeWFua2VkIHRleHQ6CiAgIChub3QgYWxsb3V0LWluaGliaXQtZG91Ymxl Y2hlY2spCiAgIDs7IGFsbG91dC1kb3VibGVjaGVjay1hdC1hbmQtc2hhbGxvd2VyIGlzIGNlaWxp bmcgZm9yIGRvdWJsZWNoZWNrOgogICAoPD0gYWxsb3V0LXJlY2VudC1kZXB0aCBhbGxvdXQtZG91 YmxlY2hlY2stYXQtYW5kLXNoYWxsb3dlcikpKQo7OztfICAgICA+IGFsbG91dC1hYmVycmFudC1j b250YWluZXItcCAoKQooZGVmdW4gYWxsb3V0LWFiZXJyYW50LWNvbnRhaW5lci1wICgpCiAgIlRy dWUgaWYgdG9waWMsIG9yIG5leHQgc2libGluZyB3aXRoIGNoaWxkcmVuLCBjb250YWlucyB0aGVt IGRpc2NvbnRpbnVvdXNseS4KCkRpc2NvbnRpbnVvdXMgbWVhbnMgYW4gaW1tZWRpYXRlIG9mZnNw cmluZyB0aGF0IGlzIG5lc3RlZCBtb3JlCnRoYW4gb25lIGxldmVsIGRlZXBlciB0aGFuIHRoZSB0 b3BpYy4KCklmIHRvcGljIGhhcyBubyBvZmZzcHJpbmcsIHRoZW4gdGhlIG5leHQgc2libGluZyB3 aXRoIG9mZnNwcmluZyB3aWxsCmRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGlzIG9uZSBpcyBk ZXRlcm1pbmVkIHRvIGJlIGFiZXJyYW50LgoKSWYgdHJ1ZSwgdGhlbiB0aGUgYWxsb3V0LXJlY2Vu dC0qIHNldHRpbmdzIGFyZSBjYWxpYnJhdGVkIG9uIHRoZQpvZmZzcHJpbmcgdGhhdCBxYXVsaWZp ZXMgaXQgYXMgYWJlcnJhbnQsIGllIHdpdGggZGVwdGggdGhhdApleGNlZWRzIHRoZSB0b3BpYyBi eSBtb3JlIHRoYW4gb25lLiIKCiAgOzsgVGhpcyBpcyBtb3N0IGNsZWFybHkgdW5kZXJzdG9vZCB3 aGVuIGNvbnNpZGVyaW5nIHN0YW5kYXJkLXByZWZpeC1sZWFkZXIKICA7OyBsb3ctbGV2ZWwgdG9w aWNzLCB3aGljaCBjYW4gYWxsIHRvbyBlYXNpbHkgbWF0Y2ggdGV4dCBub3QgaW50ZW5kZWQgYXMK ICA7OyBoZWFkZXJzLiAgRm9yIGV4YW1wbGUsIGFueSBsaW5lIHdpdGggYSBsZWFkaW5nICcuJyBv ciAnKicgYW5kIGxhY2tpbmcgYQogIDs7IGZvbGxvd2luZyBidWxsZXQgcXVhbGlmaWVzIHdpdGhv dXQgdGhpcyBwcm90ZWN0aW9uLiAgKEEgc2VxdWVuY2Ugb2YKICA7OyB0aGVtIGNhbiBvY2N1ciBu YXR1cmFsbHksIGVnIGEgdHlwaWNhbCB0ZXh0dWFsIGJ1bGxldCBsaXN0LikgIFdlCiAgOzsgZGlz cXVhbGlmeSBzdWNoIGxvdy1sZXZlbCBzZXF1ZW5jZXMgd2hlbiB0aGV5IGFyZSBmb2xsb3dlZCBi eSBhCiAgOzsgZGlzY29udGludW91c2x5IGNvbnRhaW5lZCBjaGlsZCwgaW5mZXJyaW5nIHRoYXQg dGhlIHNlcXVlbmNlcyBhcmUgbm90CiAgOzsgYWN0dWFsbHkgY29ubmVjdGVkIHdpdGggdGhlaXIg cHJvc3BlY3RpdmUgY29udGV4dC4KCiAgKGxldCAoKGRlcHRoIChhbGxvdXQtZGVwdGgpKQogICAg ICAgIChzdGFydC1wb2ludCAocG9pbnQpKQogICAgICAgIGRvbmUgYWJlcnJhbnQpCiAgICAoc2F2 ZS1leGN1cnNpb24KICAgICAgKHdoaWxlIChhbmQgKG5vdCBkb25lKQogICAgICAgICAgICAgICAg ICAocmUtc2VhcmNoLWZvcndhcmQgYWxsb3V0LWxpbmUtYm91bmRhcnktcmVnZXhwIG5pbCAwKSkK ICAgICAgICAoYWxsb3V0LXByZWZpeC1kYXRhKQogICAgICAgIChnb3RvLWNoYXIgYWxsb3V0LXJl Y2VudC1wcmVmaXgtYmVnaW5uaW5nKQogICAgICAgIChjb25kCiAgICAgICAgIDs7IHNpYmxpbmcg LSBjb250aW51ZToKICAgICAgICAgKChlcSBhbGxvdXQtcmVjZW50LWRlcHRoIGRlcHRoKSkgCiAg ICAgICAgIDs7IGZpcnN0IG9mZnNwcmluZyBpcyBleGNlc3NpdmUgLSBhYmVycmFudDoKICAgICAg ICAgKCg+IGFsbG91dC1yZWNlbnQtZGVwdGggKDErIGRlcHRoKSkKICAgICAgICAgIChzZXRxIGRv bmUgdCBhYmVycmFudCB0KSkKICAgICAgICAgOzsgbmV4dCBub24tc2libGluZyBpcyBsb3dlci1k ZXB0aCAtIG5vdCBhYmVycmFudDoKICAgICAgICAgKHQgKHNldHEgZG9uZSB0KSkpKSkKICAgIChp ZiBhYmVycmFudAogICAgICAgIGFiZXJyYW50CiAgICAgIChnb3RvLWNoYXIgc3RhcnQtcG9pbnQp CiAgICAgIDs7IHJlY2FsaWJyYXRlIGFsbG91dC1yZWNlbnQtKgogICAgICAoYWxsb3V0LWRlcHRo KQogICAgICBuaWwpKSkKOzs7XyAgICA+IGFsbG91dC1vbi1jdXJyZW50LWhlYWRpbmctcCAoKQoo ZGVmdW4gYWxsb3V0LW9uLWN1cnJlbnQtaGVhZGluZy1wICgpCiAgIlJldHVybiBub24tbmlsIGlm IHBvaW50IGlzIG9uIGN1cnJlbnQgdmlzaWJsZSB0b3BpY3MnIGhlYWRlciBsaW5lLgoKQWN0dWFs bHksIHJldHVybnMgcHJlZml4IGJlZ2lubmluZyBwb2ludC4iCiAgKHNhdmUtZXhjdXJzaW9uCiAg ICAoYWxsb3V0LWJlZ2lubmluZy1vZi1jdXJyZW50LWxpbmUpCiAgICAoYW5kIChsb29raW5nLWF0 IGFsbG91dC1yZWdleHApCiAgICAgICAgIChhbGxvdXQtcHJlZml4LWRhdGEpCiAgICAgICAgIChv ciAobm90IChhbGxvdXQtZG8tZG91YmxlY2hlY2spKQogICAgICAgICAgICAgKG5vdCAoYWxsb3V0 LWFiZXJyYW50LWNvbnRhaW5lci1wKSkpKSkpCjs7O18gICAgPiBhbGxvdXQtb24taGVhZGluZy1w ICgpCihkZWZhbGlhcyAnYWxsb3V0LW9uLWhlYWRpbmctcCAnYWxsb3V0LW9uLWN1cnJlbnQtaGVh ZGluZy1wKQo7OztfICAgID4gYWxsb3V0LWUtby1wcmVmaXgtcCAoKQooZGVmdW4gYWxsb3V0LWUt by1wcmVmaXgtcCAoKQogICJUcnVlIGlmIHBvaW50IGlzIGxvY2F0ZWQgd2hlcmUgY3VycmVudCB0 b3BpYyBwcmVmaXggZW5kcywgaGVhZGluZyBiZWdpbnMuIgogIChhbmQgKHNhdmUtZXhjdXJzaW9u IChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpKQogICAgICAgICAgICAgICAgICAg ICAgICAgKGJlZ2lubmluZy1vZi1saW5lKSkKCQkgICAgICAgKGxvb2tpbmctYXQgYWxsb3V0LXJl Z2V4cCkpCiAgICAgICAoPSAocG9pbnQpKHNhdmUtZXhjdXJzaW9uIChhbGxvdXQtZW5kLW9mLXBy ZWZpeCkocG9pbnQpKSkpKQo7OztfICAgOiBMb2NhdGlvbiBhdHRyaWJ1dGVzCjs7O18gICAgPiBh bGxvdXQtZGVwdGggKCkKKGRlZnVuIGFsbG91dC1kZXB0aCAoKQogICJSZXR1cm4gZGVwdGggb2Yg dG9waWMgbW9zdCBpbW1lZGlhdGVseSBjb250YWluaW5nIHBvaW50LgoKUmV0dXJuIHplcm8gaWYg cG9pbnQgaXMgbm90IHdpdGhpbiBhbnkgdG9waWMuCgpMaWtlIGBhbGxvdXQtY3VycmVudC1kZXB0 aCcsIGJ1dCByZXNwZWN0cyBoaWRkZW4gYXMgd2VsbCBhcyB2aXNpYmxlIHRvcGljcy4iCiAgKHNh dmUtZXhjdXJzaW9uCiAgICAobGV0ICgoc3RhcnQtcG9pbnQgKHBvaW50KSkpCiAgICAgIChpZiAo YW5kIChhbGxvdXQtZ290by1wcmVmaXgpCiAgICAgICAgICAgICAgIChub3QgKDwgc3RhcnQtcG9p bnQgKHBvaW50KSkpKQogICAgICAgICAgYWxsb3V0LXJlY2VudC1kZXB0aAogICAgICAgIChwcm9n bgogICAgICAgICAgOzsgT29wcywgbm8gcHJlZml4LCBudWxsaWZ5IGl0OgogICAgICAgICAgKG51 bGxpZnktYWxsb3V0LXByZWZpeC1kYXRhKQogICAgICAgICAgOzsgLi4uIGFuZCByZXR1cm4gMDoK ICAgICAgICAgIDApKSkpKQo7OztfICAgID4gYWxsb3V0LWN1cnJlbnQtZGVwdGggKCkKKGRlZnVu IGFsbG91dC1jdXJyZW50LWRlcHRoICgpCiAgIlJldHVybiBkZXB0aCBvZiB2aXNpYmxlIHRvcGlj IG1vc3QgaW1tZWRpYXRlbHkgY29udGFpbmluZyBwb2ludC4KClJldHVybiB6ZXJvIGlmIHBvaW50 IGlzIG5vdCB3aXRoaW4gYW55IHRvcGljLiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChpZiAoYWxs b3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5nKQogICAgICAgIChtYXggMQogICAgICAgICAgICAg KC0gYWxsb3V0LXJlY2VudC1wcmVmaXgtZW5kCiAgICAgICAgICAgICAgICBhbGxvdXQtcmVjZW50 LXByZWZpeC1iZWdpbm5pbmcKICAgICAgICAgICAgICAgIGFsbG91dC1oZWFkZXItc3VidHJhY3Rp b24pKQogICAgICAwKSkpCjs7O18gICAgPiBhbGxvdXQtZ2V0LWN1cnJlbnQtcHJlZml4ICgpCihk ZWZ1biBhbGxvdXQtZ2V0LWN1cnJlbnQtcHJlZml4ICgpCiAgIlRvcGljIHByZWZpeCBvZiB0aGUg Y3VycmVudCB0b3BpYy4iCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoaWYgKGFsbG91dC1nb3RvLXBy ZWZpeCkKCShhbGxvdXQtcmVjZW50LXByZWZpeCkpKSkKOzs7XyAgICA+IGFsbG91dC1nZXQtYnVs bGV0ICgpCihkZWZ1biBhbGxvdXQtZ2V0LWJ1bGxldCAoKQogICJSZXR1cm4gYnVsbGV0IG9mIGNv bnRhaW5pbmcgdG9waWMgKHZpc2libGUgb3Igbm90KS4iCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAo YW5kIChhbGxvdXQtZ290by1wcmVmaXgpCgkgKGFsbG91dC1yZWNlbnQtYnVsbGV0KSkpKQo7Oztf ICAgID4gYWxsb3V0LWN1cnJlbnQtYnVsbGV0ICgpCihkZWZ1biBhbGxvdXQtY3VycmVudC1idWxs ZXQgKCkKICAiUmV0dXJuIGJ1bGxldCBvZiBjdXJyZW50ICh2aXNpYmxlKSB0b3BpYyBoZWFkaW5n LCBvciBub25lIGlmIG5vbmUgZm91bmQuIgogIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAgKHNh dmUtZXhjdXJzaW9uCgkoYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5nKQoJKGJ1ZmZlci1z dWJzdHJpbmctbm8tcHJvcGVydGllcyAoLSBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQgMSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1yZWNlbnQtcHJlZml4 LWVuZCkpCiAgICA7OyBRdWljayBhbmQgZGlydHkgcHJvdmlzaW9uLCBvc3RlbnNpYmx5IGZvciBt aXNzaW5nIGJ1bGxldDoKICAgIChhcmdzLW91dC1vZi1yYW5nZSBuaWwpKQogICkKOzs7XyAgICA+ IGFsbG91dC1nZXQtcHJlZml4LWJ1bGxldCAocHJlZml4KQooZGVmdW4gYWxsb3V0LWdldC1wcmVm aXgtYnVsbGV0IChwcmVmaXgpCiAgIlJldHVybiB0aGUgYnVsbGV0IG9mIHRoZSBoZWFkZXIgcHJl Zml4IHN0cmluZyBQUkVGSVguIgogIDs7IERvZXNuJ3QgbWFrZSBzZW5zZSBpZiB3ZSdyZSBvbGQt c3R5bGUgcHJlZml4ZXMsIGJ1dCB0aGlzIGp1c3QKICA7OyBvdWdodG4ndCBiZSBjYWxsZWQgdGhl biwgc28gZm9yZ2V0IGFib3V0IGl0Li4uCiAgKGlmIChzdHJpbmctbWF0Y2ggYWxsb3V0LXJlZ2V4 cCBwcmVmaXgpCiAgICAgIChzdWJzdHJpbmcgcHJlZml4ICgxLSAobWF0Y2gtZW5kIDIpKSAobWF0 Y2gtZW5kIDIpKSkpCjs7O18gICAgPiBhbGxvdXQtc2libGluZy1pbmRleCAoJm9wdGlvbmFsIGRl cHRoKQooZGVmdW4gYWxsb3V0LXNpYmxpbmctaW5kZXggKCZvcHRpb25hbCBkZXB0aCkKICAiSXRl bSBudW1iZXIgb2YgdGhpcyBwcm9zcGVjdGl2ZSB0b3BpYyBhbW9uZyBpdHMgc2libGluZ3MuCgpJ ZiBvcHRpb25hbCBhcmcgREVQVEggaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZGVwdGgsIHRoZW4g d2UncmUKb3BlbmluZyBhIG5ldyBsZXZlbCwgYW5kIHJldHVybiAwLgoKSWYgbGVzcyB0aGFuIHRo aXMgZGVwdGgsIGFzY2VuZCB0byB0aGF0IGRlcHRoIGFuZCBjb3VudC4uLiIKCiAgKHNhdmUtZXhj dXJzaW9uCiAgICAoY29uZCAoKGFuZCBkZXB0aCAoPD0gZGVwdGggMCkgMCkpCiAgICAgICAgICAo KG9yIChudWxsIGRlcHRoKSAoPSBkZXB0aCAoYWxsb3V0LWRlcHRoKSkpCiAgICAgICAgICAgKGxl dCAoKGluZGV4IDEpKQogICAgICAgICAgICAgKHdoaWxlIChhbGxvdXQtcHJldmlvdXMtc2libGlu ZyBhbGxvdXQtcmVjZW50LWRlcHRoIG5pbCkKCSAgICAgICAoc2V0cSBpbmRleCAoMSsgaW5kZXgp KSkKICAgICAgICAgICAgIGluZGV4KSkKICAgICAgICAgICgoPCBkZXB0aCBhbGxvdXQtcmVjZW50 LWRlcHRoKQogICAgICAgICAgIChhbGxvdXQtYXNjZW5kLXRvLWRlcHRoIGRlcHRoKQogICAgICAg ICAgIChhbGxvdXQtc2libGluZy1pbmRleCkpCiAgICAgICAgICAoMCkpKSkKOzs7XyAgICA+IGFs bG91dC10b3BpYy1mbGF0LWluZGV4ICgpCihkZWZ1biBhbGxvdXQtdG9waWMtZmxhdC1pbmRleCAo KQogICJSZXR1cm4gYSBsaXN0IGluZGljYXRpbmcgcG9pbnQncyBudW1lcmljIHNlY3Rpb24uc3Vi c2VjdC5zdWJzdWJzZWN0Li4uCk91dGVybW9zdCBpcyBmaXJzdC4iCiAgKGxldCogKChkZXB0aCAo YWxsb3V0LWRlcHRoKSkKCSAobmV4dC1pbmRleCAoYWxsb3V0LXNpYmxpbmctaW5kZXggZGVwdGgp KQoJIChyZXYtc2libHMgbmlsKSkKICAgICh3aGlsZSAoPiBuZXh0LWluZGV4IDApCiAgICAgIChz ZXRxIHJldi1zaWJscyAoY29ucyBuZXh0LWluZGV4IHJldi1zaWJscykpCiAgICAgIChzZXRxIGRl cHRoICgxLSBkZXB0aCkpCiAgICAgIChzZXRxIG5leHQtaW5kZXggKGFsbG91dC1zaWJsaW5nLWlu ZGV4IGRlcHRoKSkpCiAgICByZXYtc2libHMpCiAgKQoKOzs7XyAgLSBOYXZpZ2F0aW9uIHJvdXRp bmVzCjs7O18gICA+IGFsbG91dC1iZWdpbm5pbmctb2YtY3VycmVudC1saW5lICgpCihkZWZ1biBh bGxvdXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtbGluZSAoKQogICJMaWtlIGJlZ2lubmluZyBvZiBs aW5lLCBidXQgdG8gdmlzaWJsZSB0ZXh0LiIKCiAgOzsgVGhpcyBjb21iaW5hdGlvbiBvZiBtb3Zl LWJlZ2lubmluZy1vZi1saW5lIGFuZCBiZWdpbm5pbmctb2YtbGluZSBpcwogIDs7IGRlbGliZXJh dGUsIGJ1dCB0aGUgKGJlZ2lubmluZy1vZi1saW5lKSBtYXkgbm93IGJlIHN1cGVyZmx1b3VzLgog IChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpKQogICAgKG1vdmUtYmVnaW5uaW5n LW9mLWxpbmUgMSkKICAgIChiZWdpbm5pbmctb2YtbGluZSkKICAgICh3aGlsZSAoYW5kIChub3Qg KGJvYnApKSAob3IgKG5vdCAoYm9scCkpIChhbGxvdXQtaGlkZGVuLXApKSkKICAgICAgKGJlZ2lu bmluZy1vZi1saW5lKQogICAgICAoaWYgKG9yIChhbGxvdXQtaGlkZGVuLXApIChub3QgKGJvbHAp KSkKICAgICAgICAgIChmb3J3YXJkLWNoYXIgLTEpKSkpKQo7OztfICAgPiBhbGxvdXQtZW5kLW9m LWN1cnJlbnQtbGluZSAoKQooZGVmdW4gYWxsb3V0LWVuZC1vZi1jdXJyZW50LWxpbmUgKCkKICAi TW92ZSB0byB0aGUgZW5kIG9mIGxpbmUsIHBhc3QgY29uY2VhbGVkIHRleHQgaWYgYW55LiIKICA7 OyBYWFggVGhpcyBpcyBmb3Igc3ltbWV0cnkgd2l0aCBgYWxsb3V0LWJlZ2lubmluZy1vZi1jdXJy ZW50LWxpbmUnIC0KICA7OyBgbW92ZS1lbmQtb2YtbGluZScgZG9lc24ndCBzdWZmZXIgdGhlIHNh bWUgcHJvYmxlbSBhcwogIDs7IGBtb3ZlLWJlZ2lubmluZy1vZi1saW5lJy4KICAobGV0ICgoaW5o aWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KSkKICAgIChlbmQtb2YtbGluZSkKICAgICh3aGlsZSAo YWxsb3V0LWhpZGRlbi1wKQogICAgICAoZW5kLW9mLWxpbmUpCiAgICAgIChpZiAoYWxsb3V0LWhp ZGRlbi1wKSAoZm9yd2FyZC1jaGFyIDEpKSkpKQo7OztfICAgPiBhbGxvdXQtYmVnaW5uaW5nLW9m LWxpbmUgKCkKKGRlZnVuIGFsbG91dC1iZWdpbm5pbmctb2YtbGluZSAoKQogICJCZWdpbm5pbmct b2YtbGluZSB3aXRoIGBhbGxvdXQtYmVnaW5uaW5nLW9mLWxpbmUtY3ljbGVzJyBiZWhhdmlvciwg aWYgc2V0LiIKCiAgKGludGVyYWN0aXZlKQoKICAoaWYgKG9yIChub3QgYWxsb3V0LWJlZ2lubmlu Zy1vZi1saW5lLWN5Y2xlcykKICAgICAgICAgIChub3QgKGVxdWFsIGxhc3QtY29tbWFuZCB0aGlz LWNvbW1hbmQpKSkKICAgICAgKG1vdmUtYmVnaW5uaW5nLW9mLWxpbmUgMSkKICAgIChhbGxvdXQt ZGVwdGgpCiAgICAobGV0ICgoYmVnaW5uaW5nLW9mLWJvZHkKICAgICAgICAgICAoc2F2ZS1leGN1 cnNpb24KICAgICAgICAgICAgICh3aGlsZSAoYW5kIChhbGxvdXQtZG8tZG91YmxlY2hlY2spCiAg ICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWFiZXJyYW50LWNvbnRhaW5lci1wKQogICAg ICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1wcmV2aW91cy12aXNpYmxlLWhlYWRpbmcgMSkp KQogICAgICAgICAgICAgKGFsbG91dC1iZWdpbm5pbmctb2YtY3VycmVudC1lbnRyeSkKICAgICAg ICAgICAgIChwb2ludCkpKSkKICAgICAgKGNvbmQgKCg9IChjdXJyZW50LWNvbHVtbikgMCkKICAg ICAgICAgICAgIChnb3RvLWNoYXIgYmVnaW5uaW5nLW9mLWJvZHkpKQogICAgICAgICAgICAoKDwg KHBvaW50KSBiZWdpbm5pbmctb2YtYm9keSkKICAgICAgICAgICAgIChhbGxvdXQtYmVnaW5uaW5n LW9mLWN1cnJlbnQtbGluZSkpCiAgICAgICAgICAgICgoPSAocG9pbnQpIGJlZ2lubmluZy1vZi1i b2R5KQogICAgICAgICAgICAgKGdvdG8tY2hhciAoYWxsb3V0LWN1cnJlbnQtYnVsbGV0LXBvcykp KQogICAgICAgICAgICAodCAoYWxsb3V0LWJlZ2lubmluZy1vZi1jdXJyZW50LWxpbmUpCiAgICAg ICAgICAgICAgIChpZiAoPCAocG9pbnQpIGJlZ2lubmluZy1vZi1ib2R5KQogICAgICAgICAgICAg ICAgICAgOzsgd2Ugd2VyZSBvbiB0aGUgaGVhZGxpbmUgYWZ0ZXIgaXRzIHN0YXJ0OgogICAgICAg ICAgICAgICAgICAgKGdvdG8tY2hhciBiZWdpbm5pbmctb2YtYm9keSkpKSkpKSkKOzs7XyAgID4g YWxsb3V0LWVuZC1vZi1saW5lICgpCihkZWZ1biBhbGxvdXQtZW5kLW9mLWxpbmUgKCkKICAiRW5k LW9mLWxpbmUgd2l0aCBgYWxsb3V0LWVuZC1vZi1saW5lLWN5Y2xlcycgYmVoYXZpb3IsIGlmIHNl dC4iCgogIChpbnRlcmFjdGl2ZSkKCiAgKGlmIChvciAobm90IGFsbG91dC1lbmQtb2YtbGluZS1j eWNsZXMpCiAgICAgICAgICAobm90IChlcXVhbCBsYXN0LWNvbW1hbmQgdGhpcy1jb21tYW5kKSkp CiAgICAgIChhbGxvdXQtZW5kLW9mLWN1cnJlbnQtbGluZSkKICAgIChsZXQgKChlbmQtb2YtZW50 cnkgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1lbmQt b2YtZW50cnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50KSkpKQogICAgICAoY29u ZCAoKG5vdCAoZW9scCkpCiAgICAgICAgICAgICAoYWxsb3V0LWVuZC1vZi1jdXJyZW50LWxpbmUp KQogICAgICAgICAgICAoKG9yIChhbGxvdXQtaGlkZGVuLXApIChzYXZlLWV4Y3Vyc2lvbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtY2hhciAtMSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtaGlkZGVuLXApKSkKICAgICAg ICAgICAgIChhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRpbmcpCiAgICAgICAgICAgICAoYWxs b3V0LXNob3ctY3VycmVudC1lbnRyeSkKICAgICAgICAgICAgIChhbGxvdXQtc2hvdy1jaGlsZHJl bikKICAgICAgICAgICAgIChhbGxvdXQtZW5kLW9mLWVudHJ5KSkKICAgICAgICAgICAgKCg+PSAo cG9pbnQpIGVuZC1vZi1lbnRyeSkKICAgICAgICAgICAgIChhbGxvdXQtYmFjay10by1jdXJyZW50 LWhlYWRpbmcpCiAgICAgICAgICAgICAoYWxsb3V0LWVuZC1vZi1jdXJyZW50LWxpbmUpKQogICAg ICAgICAgICAodCAoYWxsb3V0LWVuZC1vZi1lbnRyeSkpKSkpKQo7OztfICAgPiBhbGxvdXQtbmV4 dC1oZWFkaW5nICgpCihkZWZzdWJzdCBhbGxvdXQtbmV4dC1oZWFkaW5nICgpCiAgIk1vdmUgdG8g dGhlIGhlYWRpbmcgZm9yIHRoZSB0b3BpYyBcKHBvc3NpYmx5IGludmlzaWJsZSkgYWZ0ZXIgdGhp cyBvbmUuCgpSZXR1cm5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgaGVhZGluZywgb3IgbmlsIGlmIG5v bmUgZm91bmQuCgpXZSBza2lwIGFub21vbG91cyBsb3ctbGV2ZWwgdG9waWNzLCBhIGxhIGBhbGxv dXQtYWJlcnJhbnQtY29udGFpbmVyLXAnLiIKICAoaWYgKGxvb2tpbmctYXQgYWxsb3V0LXJlZ2V4 cCkKICAgICAgKGZvcndhcmQtY2hhciAxKSkKCiAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkIGFs bG91dC1saW5lLWJvdW5kYXJ5LXJlZ2V4cCBuaWwgMCkKICAgIChhbGxvdXQtcHJlZml4LWRhdGEp CiAgICAoYW5kIChhbGxvdXQtZG8tZG91YmxlY2hlY2spCiAgICAgICAgIDs7IHRoaXMgd2lsbCBz ZXQgYWxsb3V0LXJlY2VudC0qIG9uIHRoZSBmaXJzdCBub24tYWJlcnJhbnQgdG9waWMsCiAgICAg ICAgIDs7IHdoZXRoZXIgaXQncyB0aGUgY3VycmVudCBvbmUgb3Igb25lIHRoYXQgZGlzcXVhbGlm aWVzIGl0OgogICAgICAgICAoYWxsb3V0LWFiZXJyYW50LWNvbnRhaW5lci1wKSkKICAgIChnb3Rv LWNoYXIgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKSkpCjs7O18gICA+IGFsbG91dC10 aGlzLW9yLW5leHQtaGVhZGluZwooZGVmdW4gYWxsb3V0LXRoaXMtb3ItbmV4dC1oZWFkaW5nICgp CiAgIlBvc2l0aW9uIGN1cnNvciBvbiBjdXJyZW50IG9yIG5leHQgaGVhZGluZy4iCiAgOzsgQSB0 aHJvd2F3YXkgbm9uLW1hY3JvIHRoYXQgaXMgZGVmaW5lZCBhZnRlciBhbGxvdXQtbmV4dC1oZWFk aW5nCiAgOzsgYW5kIHVzYWJsZSBieSBhbGxvdXQtbW9kZS4KICAoaWYgKG5vdCAoYWxsb3V0LWdv dG8tcHJlZml4LWRvdWJsZWNoZWNrZWQpKSAoYWxsb3V0LW5leHQtaGVhZGluZykpKQo7OztfICAg PiBhbGxvdXQtcHJldmlvdXMtaGVhZGluZyAoKQooZGVmdW4gYWxsb3V0LXByZXZpb3VzLWhlYWRp bmcgKCkKICAiTW92ZSB0byB0aGUgcHJpb3IgXChwb3NzaWJseSBpbnZpc2libGUpIGhlYWRpbmcg bGluZS4KClJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgaGVhZGlu Zywgb3IgbmlsIGlmIG5vdCBmb3VuZC4KCldlIHNraXAgYW5vbW9sb3VzIGxvdy1sZXZlbCB0b3Bp Y3MsIGEgbGEgYGFsbG91dC1hYmVycmFudC1jb250YWluZXItcCcuIgoKICAoaWYgKGJvYnApCiAg ICAgIG5pbAogICAgKGxldCAoKHN0YXJ0LXBvaW50IChwb2ludCkpKQogICAgICA7OyBhbGxvdXQt Z290by1wcmVmaXgtZG91YmxlY2hlY2tlZCBjYWxscyB1cywgc28gd2UgY2FuJ3QgdXNlIGl0IGhl cmUuCiAgICAgIChhbGxvdXQtZ290by1wcmVmaXgpCiAgICAgICh3aGVuIChvciAocmUtc2VhcmNo LWJhY2t3YXJkIGFsbG91dC1saW5lLWJvdW5kYXJ5LXJlZ2V4cCBuaWwgMCkKICAgICAgICAgICAg ICAgIChsb29raW5nLWF0IGFsbG91dC1ib2ItcmVnZXhwKSkKICAgICAgICAoZ290by1jaGFyIChh bGxvdXQtcHJlZml4LWRhdGEpKQogICAgICAgIChpZiAoYW5kIChhbGxvdXQtZG8tZG91YmxlY2hl Y2spCiAgICAgICAgICAgICAgICAgKGFsbG91dC1hYmVycmFudC1jb250YWluZXItcCkpCiAgICAg ICAgICAgIChvciAoYWxsb3V0LXByZXZpb3VzLWhlYWRpbmcpCiAgICAgICAgICAgICAgICAoYW5k IChnb3RvLWNoYXIgc3RhcnQtcG9pbnQpCiAgICAgICAgICAgICAgICAgICAgIDs7IHJlY2FsaWJy YXRlIGFsbG91dC1yZWNlbnQtKjoKICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1kZXB0aCkK ICAgICAgICAgICAgICAgICAgICAgbmlsKSkKICAgICAgICAgIChwb2ludCkpKSkpKQo7OztfICAg PiBhbGxvdXQtZ2V0LWludmlzaWJpbGl0eS1vdmVybGF5ICgpCihkZWZ1biBhbGxvdXQtZ2V0LWlu dmlzaWJpbGl0eS1vdmVybGF5ICgpCiAgIlJldHVybiB0aGUgb3ZlcmxheSBhdCBwb2ludCB0aGF0 IGRpY3RhdGVzIGFsbG91dCBpbnZpc2liaWxpdHkuIgogIChsZXQgKChvdmVybGF5cyAob3Zlcmxh eXMtYXQgKHBvaW50KSkpCiAgICAgICAgZ290KQogICAgKHdoaWxlIChhbmQgb3ZlcmxheXMgKG5v dCBnb3QpKQogICAgICAoaWYgKGVxdWFsIChvdmVybGF5LWdldCAoY2FyIG92ZXJsYXlzKSAnaW52 aXNpYmxlKSAnYWxsb3V0KQogICAgICAgICAgKHNldHEgZ290IChjYXIgb3ZlcmxheXMpKQogICAg ICAgIChwb3Agb3ZlcmxheXMpKSkKICAgIGdvdCkpCjs7O18gICA+IGFsbG91dC1iYWNrLXRvLXZp c2libGUtdGV4dCAoKQooZGVmdW4gYWxsb3V0LWJhY2stdG8tdmlzaWJsZS10ZXh0ICgpCiAgIk1v dmUgdG8gbW9zdCByZWNlbnQgcHJpb3IgY2hhcmFjdGVyIHRoYXQgaXMgdmlzaWJsZSwgYW5kIHJl dHVybiBwb2ludC4iCiAgICAoaWYgKGFsbG91dC1oaWRkZW4tcCkKICAgICAgKGdvdG8tY2hhciAo b3ZlcmxheS1zdGFydCAoYWxsb3V0LWdldC1pbnZpc2liaWxpdHktb3ZlcmxheSkpKSkKICAgIChw b2ludCkpCgo7OztfICAtIFN1YnRyZWUgQ2hhcnRpbmcKOzs7XyAgICIgVGhlc2Ugcm91dGluZXMg ZWl0aGVyIHByb2R1Y2Ugb3IgYXNzZXNzIGNoYXJ0cywgd2hpY2ggYXJlCjs7OyBuZXN0ZWQgbGlz dHMgb2YgdGhlIGxvY2F0aW9ucyBvZiB0b3BpY3Mgd2l0aGluIGEgc3VidHJlZS4KOzs7Cjs7OyBD aGFydHMgZW5hYmxlIGVmZmljaWVudCBzdWJ0cmVlIG5hdmlnYXRpb24gYnkgcHJvdmlkaW5nIGEg cmV1c2FibGUgYmFzaXMKOzs7IGZvciBlbGFib3JhdGUsIGNvbXBvdW5kIGFzc2Vzc21lbnQgYW5k IGFkanVzdG1lbnQgb2YgYSBzdWJ0cmVlLgoKOzs7XyAgID4gYWxsb3V0LWNoYXJ0LXN1YnRyZWUg KCZvcHRpb25hbCBsZXZlbHMgdmlzaWJsZSBvcmlnLWRlcHRoIHByZXYtZGVwdGgpCihkZWZ1biBh bGxvdXQtY2hhcnQtc3VidHJlZSAoJm9wdGlvbmFsIGxldmVscyB2aXNpYmxlIG9yaWctZGVwdGgg cHJldi1kZXB0aCkKICAiUHJvZHVjZSBhIGxvY2F0aW9uIFwiY2hhcnRcIiBvZiBzdWJ0b3BpY3Mg b2YgdGhlIGNvbnRhaW5pbmcgdG9waWMuCgpPcHRpb25hbCBhcmd1bWVudCBMRVZFTFMgc3BlY2lm aWVzIGEgZGVwdGggbGltaXQgXChyZWxhdGl2ZSB0byBzdGFydApkZXB0aCkgZm9yIHRoZSBjaGFy dC4gIE51bGwgTEVWRUxTIG1lYW5zIG5vIGxpbWl0LgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBW SVNJQkxFIGlzIG5vbi1uaWwsIHRoZSBjaGFydCBpbmNsdWRlcwpvbmx5IHRoZSB2aXNpYmxlIHN1 YmVsZW1lbnRzIG9mIHRoZSBjaGFydGVkIHN1YmplY3RzLgoKVGhlIHJlbWFpbmluZyBvcHRpb25h bCBhcmdzIGFyZSBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBmdW5jdGlvbi4KClBvaW50IGlzIGxl ZnQgYXQgdGhlIGVuZCBvZiB0aGUgc3VidHJlZS4KCkNoYXJ0cyBhcmUgdXNlZCB0byBjYXB0dXJl IG91dGxpbmUgc3RydWN0dXJlLCBzbyB0aGF0IG91dGxpbmUtYWx0ZXJpbmcKcm91dGluZXMgbmVl ZCBhc3Nlc3MgdGhlIHN0cnVjdHVyZSBvbmx5IG9uY2UsIGFuZCB0aGVuIHVzZSB0aGUgY2hhcnQK Zm9yIHRoZWlyIGVsYWJvcmF0ZSBtYW5pcHVsYXRpb25zLgoKVGhlIGNoYXJ0IGVudHJpZXMgZm9y IHRoZSB0b3BpY3MgYXJlIGluIHJldmVyc2Ugb3JkZXIsIHNvIHRoZQpsYXN0IHRvcGljIGlzIGxp c3RlZCBmaXJzdC4gIFRoZSBlbnRyeSBmb3IgZWFjaCB0b3BpYyBjb25zaXN0cyBvZgphbiBpbnRl Z2VyIGluZGljYXRpbmcgdGhlIHBvaW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRvcGljCnBy ZWZpeC4gIENoYXJ0cyBmb3Igb2Zmc3ByaW5nIGNvbnNpc3RzIG9mIGEgbGlzdCBjb250YWluaW5n LApyZWN1cnNpdmVseSwgdGhlIGNoYXJ0cyBmb3IgdGhlIHJlc3BlY3RpdmUgc3VidG9waWNzLiAg VGhlIGNoYXJ0CmZvciBhIHRvcGljcycgb2Zmc3ByaW5nIHByZWNlZGVzIHRoZSBlbnRyeSBmb3Ig dGhlIHRvcGljIGl0c2VsZi4KClRoZSBvdGhlciBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBmb3Ig aW50ZXJuYWwgcmVjdXJzaW9uLCBhbmQgc2hvdWxkCm5vdCBiZSBzcGVjaWZpZWQgYnkgZXh0ZXJu YWwgY2FsbGVycy4gIE9SSUctREVQVEggaXMgZGVwdGggb2YgdG9waWMgYXQKc3RhcnRpbmcgcG9p bnQsIGFuZCBQUkVWLURFUFRIIGlzIGRlcHRoIG9mIHByaW9yIHRvcGljLiIKCiAgKGxldCAoKG9y aWdpbmFsIChub3Qgb3JpZy1kZXB0aCkpCTsgYG9yaWctZGVwdGgnIHNldCBvbmx5IGluIHJlY3Vy c2lvbi4KCWNoYXJ0IGN1cnItZGVwdGgpCgogICAgKGlmIG9yaWdpbmFsCQkJOyBKdXN0IHN0YXJ0 aW5nPwoJCQkJCTsgUmVnaXN0ZXIgaW5pdGlhbCBzZXR0aW5ncyBhbmQKCQkJCQk7IHBvc2l0aW9u IHRvIGZpcnN0IG9mZnNwcmluZzoKCShwcm9nbiAoc2V0cSBvcmlnLWRlcHRoIChhbGxvdXQtZGVw dGgpKQoJICAgICAgIChvciBwcmV2LWRlcHRoIChzZXRxIHByZXYtZGVwdGggKDErIG9yaWctZGVw dGgpKSkKICAgICAgICAgICAgICAgKGlmIHZpc2libGUKICAgICAgICAgICAgICAgICAgIChhbGxv dXQtbmV4dC12aXNpYmxlLWhlYWRpbmcgMSkKICAgICAgICAgICAgICAgICAoYWxsb3V0LW5leHQt aGVhZGluZykpKSkKCiAgICA7OyBMb29wIG92ZXIgdGhlIGN1cnJlbnQgbGV2ZWxzJyBzaWJsaW5n cy4gIEJlc2lkZXMgYmVpbmcgbW9yZQogICAgOzsgZWZmaWNpZW50IHRoYW4gdGFpbC1yZWN1cnNp bmcgb3ZlciBhIGxldmVsLCBpdCBhdm9pZHMgZXhjZWVkaW5nCiAgICA7OyB0aGUgdHlwaWNhbGx5 IHF1aXRlIGNvbnN0cmFpbmVkIEVtYWNzIG1heC1saXNwLWV2YWwtZGVwdGguCiAgICA7OwogICAg OzsgUHJvYmFibHkgd291bGQgc3BlZWQgdGhpbmdzIHVwIHRvIGltcGxlbWVudCBsb29wLWJhc2Vk IHN0YWNrCiAgICA7OyBvcGVyYXRpb24gcmF0aGVyIHRoYW4gcmVjdXJzaW5nIGZvciBsb3dlciBs ZXZlbHMuICBCYWguCgogICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpCgkJCQkJOyBTdGlsbCB3 aXRoaW4gb3JpZ2luYWwgdG9waWM/CgkJKDwgb3JpZy1kZXB0aCAoc2V0cSBjdXJyLWRlcHRoIGFs bG91dC1yZWNlbnQtZGVwdGgpKQoJCShjb25kICgoPSBwcmV2LWRlcHRoIGN1cnItZGVwdGgpCgkJ ICAgICAgIDs7IFJlZ2lzdGVyIHRoaXMgb25lIGFuZCBtb3ZlIG9uOgoJCSAgICAgICAoc2V0cSBj aGFydCAoY29ucyBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcgY2hhcnQpKQoJCSAgICAg ICAoaWYgKGFuZCBsZXZlbHMgKDw9IGxldmVscyAxKSkKCQkJICAgOzsgQXQgZGVwdGggbGltaXQg LSBza2lwIHN1YmxldmVsczoKCQkJICAgKG9yIChhbGxvdXQtbmV4dC1zaWJsaW5nIGN1cnItZGVw dGgpCgkJCSAgICAgICA7OyBvciBubyBtb3JlIHNpYmxpbmdzIC0gcHJvY2VlZCB0bwoJCQkgICAg ICAgOzsgbmV4dCBoZWFkaW5nIGF0IGxlc3NlciBkZXB0aDoKCQkJICAgICAgICh3aGlsZSAoYW5k ICg8PSBjdXJyLWRlcHRoCgkJCQkJICAgICAgIGFsbG91dC1yZWNlbnQtZGVwdGgpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgdmlzaWJsZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtbmV4dC12aXNpYmxl LWhlYWRpbmcgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGFsbG91dC1uZXh0LWhlYWRpbmcpKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHZp c2libGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LW5leHQtdmlzaWJsZS1o ZWFkaW5nIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtbmV4dC1oZWFkaW5n KSkpKQoKCQkgICAgICAoKGFuZCAoPCBwcmV2LWRlcHRoIGN1cnItZGVwdGgpCgkJCSAgICAob3Ig KG5vdCBsZXZlbHMpCgkJCQkoPiBsZXZlbHMgMCkpKQoJCSAgICAgICA7OyBSZWN1cnNlIG9uIGRl ZXBlciBsZXZlbCBvZiBjdXJyIHRvcGljOgoJCSAgICAgICAoc2V0cSBjaGFydAoJCQkgICAgIChj b25zIChhbGxvdXQtY2hhcnQtc3VidHJlZSAoYW5kIGxldmVscwoJCQkJCQkJICAgICAgICgxLSBs ZXZlbHMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2aXNpYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9yaWctZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci1kZXB0aCkKCQkJCSAgIGNoYXJ0KSkKCQkg ICAgICAgOzsgLi4uIHRoZW4gY29udGludWUgd2l0aCB0aGlzIG9uZS4KCQkgICAgICAgKQoKCQkg ICAgICA7OyAuLi4gZWxzZSBuaWwgaWYgd2UndmUgYXNjZW5kZWQgYmFjayB0byBwcmV2LWRlcHRo LgoKCQkgICAgICApKSkKCiAgICAoaWYgb3JpZ2luYWwJCQk7IFdlJ3JlIGF0IHRoZSBsYXN0IHNp Ymxpbmcgb24KCQkJCQk7IHRoZSBvcmlnaW5hbCBsZXZlbC4gIFBvc2l0aW9uCgkJCQkJOyB0byB0 aGUgZW5kIG9mIGl0OgoJKHByb2duIChhbmQgKG5vdCAoZW9icCkpIChmb3J3YXJkLWNoYXIgLTEp KQoJICAgICAgIChhbmQgKD0gKHByZWNlZGluZy1jaGFyKSA/XG4pCgkJICAgICg9IChhcmVmIChi dWZmZXItc3Vic3RyaW5nIChtYXggMSAoLSAocG9pbnQpIDMpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMSkKICAgICAgICAgICAgICAgICAgICAgICA/XG4pCgkJICAgIChmb3J3YXJkLWNo YXIgLTEpKQoJICAgICAgIChzZXRxIGFsbG91dC1yZWNlbnQtZW5kLW9mLXN1YnRyZWUgKHBvaW50 KSkpKQoKICAgIGNoYXJ0CQkJCTsgKG5yZXZlcnNlIGNoYXJ0KSBub3QgbmVjZXNzYXJ5LAoJCQkJ CTsgYW5kIG1heWJlIG5vdCBwcmVmZXJhYmxlLgogICAgKSkKOzs7XyAgID4gYWxsb3V0LWNoYXJ0 LXNpYmxpbmdzICgmb3B0aW9uYWwgc3RhcnQgZW5kKQooZGVmdW4gYWxsb3V0LWNoYXJ0LXNpYmxp bmdzICgmb3B0aW9uYWwgc3RhcnQgZW5kKQogICJQcm9kdWNlIGEgbGlzdCBvZiBsb2NhdGlvbnMg b2YgdGhpcyBhbmQgc3VjY2VlZGluZyBzaWJsaW5nIHRvcGljcy4KRWZmZWN0aXZlbHkgYSB0b3At bGV2ZWwgY2hhcnQgb2Ygc2libGluZ3MuICBTZWUgYGFsbG91dC1jaGFydC1zdWJ0cmVlJwpmb3Ig YW4gZXhwbGFuYXRpb24gb2YgY2hhcnRzLiIKICAoc2F2ZS1leGN1cnNpb24KICAgICh3aGVuIChh bGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tlZCkKICAgICAgKGxldCAoKGNoYXJ0IChsaXN0 IChwb2ludCkpKSkKICAgICAgICAod2hpbGUgKGFsbG91dC1uZXh0LXNpYmxpbmcpCiAgICAgICAg ICAoc2V0cSBjaGFydCAoY29ucyAocG9pbnQpIGNoYXJ0KSkpCiAgICAgICAgKGlmIGNoYXJ0IChz ZXRxIGNoYXJ0IChucmV2ZXJzZSBjaGFydCkpKSkpKSkKOzs7XyAgID4gYWxsb3V0LWNoYXJ0LXRv LXJldmVhbCAoY2hhcnQgZGVwdGgpCihkZWZ1biBhbGxvdXQtY2hhcnQtdG8tcmV2ZWFsIChjaGFy dCBkZXB0aCkKCiAgIlJldHVybiBhIGZsYXQgbGlzdCBvZiBoaWRkZW4gcG9pbnRzIGluIHN1YnRy ZWUgQ0hBUlQsIHVwIHRvIERFUFRILgoKSWYgREVQVEggaXMgbmlsLCBpbmNsdWRlIGhpZGRlbiBw b2ludHMgYXQgYW55IGRlcHRoLgoKTm90ZSB0aGF0IHBvaW50IGNhbiBiZSBsZWZ0IGF0IGFueSBv ZiB0aGUgcG9pbnRzIG9uIGNoYXJ0LCBvciBhdCB0aGUKc3RhcnQgcG9pbnQuIgoKICAobGV0IChy ZXN1bHQgaGVyZSkKICAgICh3aGlsZSAoYW5kIChvciAobnVsbCBkZXB0aCkgKD4gZGVwdGggMCkp CgkJY2hhcnQpCiAgICAgIChzZXRxIGhlcmUgKGNhciBjaGFydCkpCiAgICAgIChpZiAobGlzdHAg aGVyZSkKCSAgKGxldCAoKGZ1cnRoZXIgKGFsbG91dC1jaGFydC10by1yZXZlYWwgaGVyZSAoaWYg KG51bGwgZGVwdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXB0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgxLSBkZXB0aCkpKSkpCgkgICAgOzsgV2UncmUgb24gdGhlIHN0 YXJ0IG9mIGEgc3VidHJlZSAtIHJlY3Vyc2Ugd2l0aCBpdCwgaWYgdGhlcmUncwoJICAgIDs7IG1v cmUgZGVwdGggdG8gZ286CgkgICAgKGlmIGZ1cnRoZXIgKHNldHEgcmVzdWx0IChhcHBlbmQgZnVy dGhlciByZXN1bHQpKSkKCSAgICAoc2V0cSBjaGFydCAoY2RyIGNoYXJ0KSkpCgkoZ290by1jaGFy IGhlcmUpCiAgICAgICAgKGlmIChhbGxvdXQtaGlkZGVuLXApCgkgICAgKHNldHEgcmVzdWx0IChj b25zIGhlcmUgcmVzdWx0KSkpCgkoc2V0cSBjaGFydCAoY2RyIGNoYXJ0KSkpKQogICAgcmVzdWx0 KSkKOzs7XyAgIFggYWxsb3V0LWNoYXJ0LXNwZWMgKGNoYXJ0IHNwZWMgJm9wdGlvbmFsIGV4cG9z aW5nKQo7OyAoZGVmdW4gYWxsb3V0LWNoYXJ0LXNwZWMgKGNoYXJ0IHNwZWMgJm9wdGlvbmFsIGV4 cG9zaW5nKQo7OyAgICJOb3QgeWV0IFwoaWYgZXZlcikgaW1wbGVtZW50ZWQuCgo7OyBQcm9kdWNl IGV4cG9zdXJlIGRpcmVjdGl2ZXMgZ2l2ZW4gdG9waWMvc3VidHJlZSBDSEFSVCBhbmQgYW4gZXhw b3N1cmUgU1BFQy4KCjs7IEV4cG9zdXJlIHNwZWMgaW5kaWNhdGVzIHRoZSBsb2NhdGlvbnMgdG8g YmUgZXhwb3NlZCBhbmQgdGhlIHByZXNjcmliZWQKOzsgZXhwb3N1cmUgc3RhdHVzLiAgT3B0aW9u YWwgYXJnIEVYUE9TSU5HIGlzIGFuIGludGVnZXIsIHdpdGggMAo7OyBpbmRpY2F0aW5nIHBlbmRp bmcgY29uY2VhbG1lbnQsIGFueXRoaW5nIGhpZ2hlciBpbmRpY2F0aW5nIGRlcHRoIHRvCjs7IHdo aWNoIHN1YnRvcGljIGhlYWRlcnMgc2hvdWxkIGJlIGV4cG9zZWQsIGFuZCBuZWdhdGl2ZSBudW1i ZXJzCjs7IGluZGljYXRpbmcgKG5lZ2F0aXZlIG9mKSB0aGUgZGVwdGggdG8gd2hpY2ggc3VidG9w aWMgaGVhZGVycyBhbmQKOzsgYm9kaWVzIHNob3VsZCBiZSBleHBvc2VkLgoKOzsgVGhlIHByb2R1 Y2VkIGxpc3QgY2FuIGhhdmUgdHdvIHR5cGVzIG9mIGVudHJpZXMuICBCYXJlIG51bWJlcnMKOzsg aW5kaWNhdGUgcG9pbnRzIGluIHRoZSBidWZmZXIgd2hlcmUgdG9waWMgaGVhZGVycyB0aGF0IHNo b3VsZCBiZQo7OyBleHBvc2VkIHJlc2lkZS4KCjs7ICAtIGJhcmUgbmVnYXRpdmUgbnVtYmVycyBp bmRpY2F0ZXMgdGhhdCB0aGUgdG9waWMgc3RhcnRpbmcgYXQgdGhlCjs7ICAgIHBvaW50IHdoaWNo IGlzIHRoZSBuZWdhdGl2ZSBvZiB0aGUgbnVtYmVyIHNob3VsZCBiZSBvcGVuZWQsCjs7ICAgIGlu Y2x1ZGluZyB0aGVpciBlbnRyaWVzLgo7OyAgLSBiYXJlIHBvc2l0aXZlIHZhbHVlcyBpbmRpY2F0 ZSB0aGF0IHRoaXMgdG9waWMgaGVhZGVyIHNob3VsZCBiZQo7OyAgICBvcGVuZWQuCjs7ICAtIExp c3RzIHNpZ25pZnkgdGhlIGJlZ2lubmluZyBhbmQgZW5kIHBvaW50cyBvZiByZWdpb25zIHRoYXQg c2hvdWxkCjs7ICAgIGJlIGZsYWdnZWQsIGFuZCB0aGUgZmxhZyB0byBlbXBsb3kuICAoRm9yIGNv bmNlYWxtZW50OiBgXChcP3JcKScsIGFuZAo7OyAgICBleHBvc3VyZToiCjs7ICAgKHdoaWxlIHNw ZWMKOzsgICAgIChjb25kICgobGlzdHAgc3BlYykKOzsgCSAgICkKOzsgCSAgKQo7OyAgICAgKHNl dHEgc3BlYyAoY2RyIHNwZWMpKSkKOzsgICApCgo7OztfICAtIFdpdGhpbiBUb3BpYwo7OztfICAg PiBhbGxvdXQtZ290by1wcmVmaXggKCkKKGRlZnVuIGFsbG91dC1nb3RvLXByZWZpeCAoKQogICJQ dXQgcG9pbnQgYXQgYmVnaW5uaW5nIG9mIGltbWVkaWF0ZWx5IGNvbnRhaW5pbmcgb3V0bGluZSB0 b3BpYy4KCkdvZXMgdG8gbW9zdCBpbW1lZGlhdGUgc3Vic2VxdWVudCB0b3BpYyBpZiBub25lIGlt bWVkaWF0ZWx5IGNvbnRhaW5pbmcuCgpOb3Qgc2Vuc2l0aXZlIHRvIHRvcGljIHZpc2liaWxpdHku CgpSZXR1cm5zIHRoZSBwb2ludCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmVmaXgsIG9yIG5p bCBpZiBub25lLiIKCiAgKGxldCAoZG9uZSkKICAgICh3aGlsZSAoYW5kIChub3QgZG9uZSkKCQko c2VhcmNoLWJhY2t3YXJkICJcbiIgbmlsIDEpKQogICAgICAoZm9yd2FyZC1jaGFyIDEpCiAgICAg IChpZiAobG9va2luZy1hdCBhbGxvdXQtcmVnZXhwKQoJICAoc2V0cSBkb25lIChhbGxvdXQtcHJl Zml4LWRhdGEpKQoJKGZvcndhcmQtY2hhciAtMSkpKQogICAgKGlmIChib2JwKQoJKGNvbmQgKChs b29raW5nLWF0IGFsbG91dC1yZWdleHApCgkgICAgICAgKGFsbG91dC1wcmVmaXgtZGF0YSkpCgkg ICAgICAoKGFsbG91dC1uZXh0LWhlYWRpbmcpKQoJICAgICAgKGRvbmUpKQogICAgICBkb25lKSkp Cjs7O18gICA+IGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2VkICgpCihkZWZ1biBhbGxv dXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tlZCAoKQogICJQdXQgcG9pbnQgYXQgYmVnaW5uaW5n IG9mIGltbWVkaWF0ZWx5IGNvbnRhaW5pbmcgb3V0bGluZSB0b3BpYy4KCkxpa2UgYGFsbG91dC1n b3RvLXByZWZpeCcsIGJ1dCBzaGFsbG93IHRvcGljcyBcKGFjY29yZGluZyB0bwpgYWxsb3V0LWRv dWJsZWNoZWNrLWF0LWFuZC1zaGFsbG93ZXInKSBhcmUgY2hlY2tlZCBhbmQKZGlzcXVhbGlmaWVk IGZvciBjaGlsZCBjb250YWlubWVudCBkaXNjb250aW51aXR5LCBhY2NvcmRpbmcgdG8KYGFsbG91 dC1hYmVycmFudC1jb250YWluZXItcCcuIgogIChpZiAoYWxsb3V0LWdvdG8tcHJlZml4KQogICAg ICAoaWYgKGFuZCAoYWxsb3V0LWRvLWRvdWJsZWNoZWNrKQogICAgICAgICAgICAgICAoYWxsb3V0 LWFiZXJyYW50LWNvbnRhaW5lci1wKSkKICAgICAgICAgIChhbGxvdXQtcHJldmlvdXMtaGVhZGlu ZykKICAgICAgICAocG9pbnQpKSkpCgo7OztfICAgPiBhbGxvdXQtZW5kLW9mLXByZWZpeCAoKQoo ZGVmdW4gYWxsb3V0LWVuZC1vZi1wcmVmaXggKCZvcHRpb25hbCBpZ25vcmUtZGVjb3JhdGlvbnMp CiAgIlBvc2l0aW9uIGN1cnNvciBhdCBiZWdpbm5pbmcgb2YgaGVhZGVyIHRleHQuCgpJZiBvcHRp b25hbCBJR05PUkUtREVDT1JBVElPTlMgaXMgbm9uLW5pbCwgcHV0IGp1c3QgYWZ0ZXIgYnVsbGV0 LApvdGhlcndpc2Ugc2tpcCB3aGl0ZSBzcGFjZSBiZXR3ZWVuIGJ1bGxldCBhbmQgZW5zdWluZyB0 ZXh0LiIKCiAgKGlmIChub3QgKGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2VkKSkKICAg ICAgbmlsCiAgICAoZ290by1jaGFyIGFsbG91dC1yZWNlbnQtcHJlZml4LWVuZCkKICAgIChpZiBp Z25vcmUtZGVjb3JhdGlvbnMKICAgICAgICB0CiAgICAgICh3aGlsZSAobG9va2luZy1hdCAiWzAt OV0iKSAoZm9yd2FyZC1jaGFyIDEpKQogICAgICAoaWYgKGFuZCAobm90IChlb2xwKSkgKGxvb2tp bmctYXQgIlxccy0iKSkgKGZvcndhcmQtY2hhciAxKSkpCiAgICA7OyBSZWVzdGFibGlzaCB3aGVy ZSB3ZSBhcmU6CiAgICAoYWxsb3V0LWN1cnJlbnQtZGVwdGgpKSkKOzs7XyAgID4gYWxsb3V0LWN1 cnJlbnQtYnVsbGV0LXBvcyAoKQooZGVmdW4gYWxsb3V0LWN1cnJlbnQtYnVsbGV0LXBvcyAoKQog ICJSZXR1cm4gcG9zaXRpb24gb2YgY3VycmVudCBcKHZpc2libGUpIHRvcGljJ3MgYnVsbGV0LiIK CiAgKGlmIChub3QgKGFsbG91dC1jdXJyZW50LWRlcHRoKSkKICAgICAgbmlsCiAgICAoMS0gYWxs b3V0LXJlY2VudC1wcmVmaXgtZW5kKSkpCjs7O18gICA+IGFsbG91dC1iYWNrLXRvLWN1cnJlbnQt aGVhZGluZyAoKQooZGVmdW4gYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5nICgpCiAgIk1v dmUgdG8gaGVhZGluZyBsaW5lIG9mIGN1cnJlbnQgdG9waWMsIG9yIGJlZ2lubmluZyBpZiBub3Qg aW4gYSB0b3BpYy4KCklmIGludGVyYWN0aXZlLCB3ZSBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRo ZSBwcmVmaXguCgpSZXR1cm4gdmFsdWUgb2YgcmVzdWx0aW5nIHBvaW50LCB1bmxlc3Mgd2Ugc3Rh cnRlZCBvdXRzaWRlCm9mIChiZWZvcmUgYW55KSB0b3BpY3MsIGluIHdoaWNoIGNhc2Ugd2UgcmV0 dXJuIG5pbC4iCgogIChhbGxvdXQtYmVnaW5uaW5nLW9mLWN1cnJlbnQtbGluZSkKICAobGV0ICgo Ym9sLXBvaW50IChwb2ludCkpKQogICAgKGlmIChhbGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hl Y2tlZCkKICAgICAgICAoaWYgKDw9IChwb2ludCkgYm9sLXBvaW50KQogICAgICAgICAgICAoaWYg KGludGVyYWN0aXZlLXApCiAgICAgICAgICAgICAgICAoYWxsb3V0LWVuZC1vZi1wcmVmaXgpCiAg ICAgICAgICAgICAgKHBvaW50KSkKICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAg ICAgICAgICBuaWwpKSkpCjs7O18gICA+IGFsbG91dC1iYWNrLXRvLWhlYWRpbmcgKCkKKGRlZmFs aWFzICdhbGxvdXQtYmFjay10by1oZWFkaW5nICdhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRp bmcpCjs7O18gICA+IGFsbG91dC1wcmUtbmV4dC1wcmVmaXggKCkKKGRlZnVuIGFsbG91dC1wcmUt bmV4dC1wcmVmaXggKCkKICAiU2tpcCBmb3J3YXJkIHRvIGp1c3QgYmVmb3JlIHRoZSBuZXh0IGhl YWRpbmcgbGluZS4KClJldHVybnMgdGhhdCBjaGFyYWN0ZXIgcG9zaXRpb24uIgoKICAoaWYgKGFs bG91dC1uZXh0LWhlYWRpbmcpCiAgICAgIChnb3RvLWNoYXIgKDEtIGFsbG91dC1yZWNlbnQtcHJl Zml4LWJlZ2lubmluZykpKSkKOzs7XyAgID4gYWxsb3V0LWVuZC1vZi1zdWJ0cmVlICgmb3B0aW9u YWwgY3VycmVudCBpbmNsdWRlLXRyYWlsaW5nLWJsYW5rKQooZGVmdW4gYWxsb3V0LWVuZC1vZi1z dWJ0cmVlICgmb3B0aW9uYWwgY3VycmVudCBpbmNsdWRlLXRyYWlsaW5nLWJsYW5rKQogICJQdXQg cG9pbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsZWFmIGluIHRoZSBjb250YWluaW5nIHRvcGlj LgoKT3B0aW9uYWwgQ1VSUkVOVCBtZWFucyBwdXQgcG9pbnQgYXQgdGhlIGVuZCBvZiB0aGUgY29u dGFpbmluZwp2aXNpYmxlIHRvcGljLgoKT3B0aW9uYWwgSU5DTFVERS1UUkFJTElORy1CTEFOSyBt ZWFucyBpbmNsdWRlIGEgdHJhaWxpbmcgYmxhbmsgbGluZSwgaWYKYW55LCBhcyBwYXJ0IG9mIHRo ZSBzdWJ0cmVlLiAgT3RoZXJ3aXNlLCB0aGF0IHRyYWlsaW5nIGJsYW5rIHdpbGwgYmUKZXhjbHVk ZWQgYXMgZGVsaW1pdGluZyB3aGl0ZXNwYWNlIGJldHdlZW4gdG9waWNzLgoKUmV0dXJucyB0aGUg dmFsdWUgb2YgcG9pbnQuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKGlmIGN1cnJlbnQKICAgICAg KGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGluZykKICAgIChhbGxvdXQtZ290by1wcmVmaXgt ZG91YmxlY2hlY2tlZCkpCiAgKGxldCAoKGxldmVsIGFsbG91dC1yZWNlbnQtZGVwdGgpKQogICAg KGFsbG91dC1uZXh0LWhlYWRpbmcpCiAgICAod2hpbGUgKGFuZCAobm90IChlb2JwKSkKICAgICAg ICAgICAgICAgICg+IGFsbG91dC1yZWNlbnQtZGVwdGggbGV2ZWwpKQogICAgICAoYWxsb3V0LW5l eHQtaGVhZGluZykpCiAgICAoaWYgKGVvYnApCiAgICAgICAgKGFsbG91dC1lbmQtb2YtZW50cnkp CiAgICAgIChmb3J3YXJkLWNoYXIgLTEpKQogICAgKGlmIChhbmQgKG5vdCBpbmNsdWRlLXRyYWls aW5nLWJsYW5rKSAoPSA/XG4gKHByZWNlZGluZy1jaGFyKSkpCiAgICAgICAgIChmb3J3YXJkLWNo YXIgLTEpKQogICAgKHNldHEgYWxsb3V0LXJlY2VudC1lbmQtb2Ytc3VidHJlZSAocG9pbnQpKSkp Cjs7O18gICA+IGFsbG91dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVlICgmb3B0aW9uYWwgaW5jbHVk ZS10cmFpbGluZy1ibGFuaykKKGRlZnVuIGFsbG91dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVlICgm b3B0aW9uYWwgaW5jbHVkZS10cmFpbGluZy1ibGFuaykKCiAgIlB1dCBwb2ludCBhdCBlbmQgb2Yg bGFzdCBsZWFmIGluIGN1cnJlbnRseSB2aXNpYmxlIGNvbnRhaW5pbmcgdG9waWMuCgpPcHRpb25h bCBJTkNMVURFLVRSQUlMSU5HLUJMQU5LIG1lYW5zIGluY2x1ZGUgYSB0cmFpbGluZyBibGFuayBs aW5lLCBpZgphbnksIGFzIHBhcnQgb2YgdGhlIHN1YnRyZWUuICBPdGhlcndpc2UsIHRoYXQgdHJh aWxpbmcgYmxhbmsgd2lsbCBiZQpleGNsdWRlZCBhcyBkZWxpbWl0aW5nIHdoaXRlc3BhY2UgYmV0 d2VlbiB0b3BpY3MuCgpSZXR1cm5zIHRoZSB2YWx1ZSBvZiBwb2ludC4iCiAgKGludGVyYWN0aXZl KQogIChhbGxvdXQtZW5kLW9mLXN1YnRyZWUgdCBpbmNsdWRlLXRyYWlsaW5nLWJsYW5rKSkKOzs7 XyAgID4gYWxsb3V0LWJlZ2lubmluZy1vZi1jdXJyZW50LWVudHJ5ICgpCihkZWZ1biBhbGxvdXQt YmVnaW5uaW5nLW9mLWN1cnJlbnQtZW50cnkgKCkKICAiV2hlbiBub3QgYWxyZWFkeSB0aGVyZSwg cG9zaXRpb24gcG9pbnQgYXQgYmVnaW5uaW5nIG9mIGN1cnJlbnQgdG9waWMgaGVhZGVyLgoKSWYg YWxyZWFkeSB0aGVyZSwgbW92ZSBjdXJzb3IgdG8gYnVsbGV0IGZvciBob3Qtc3BvdCBvcGVyYXRp b24uClwoU2VlIGBhbGxvdXQtbW9kZScgZG9jIHN0cmluZyBmb3IgZGV0YWlscyBvZiBob3Qtc3Bv dCBvcGVyYXRpb24uKSIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKHN0YXJ0LXBvaW50IChwb2lu dCkpKQogICAgKG1vdmUtYmVnaW5uaW5nLW9mLWxpbmUgMSkKICAgIChpZiAoPCAwIChhbGxvdXQt Y3VycmVudC1kZXB0aCkpCiAgICAgICAgKGdvdG8tY2hhciBhbGxvdXQtcmVjZW50LXByZWZpeC1l bmQpCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpKQogICAgKGFsbG91dC1lbmQtb2YtcHJl Zml4KQogICAgKGlmIChhbmQgKGludGVyYWN0aXZlLXApCgkgICAgICg9IChwb2ludCkgc3RhcnQt cG9pbnQpKQoJKGdvdG8tY2hhciAoYWxsb3V0LWN1cnJlbnQtYnVsbGV0LXBvcykpKSkpCjs7O18g ICA+IGFsbG91dC1lbmQtb2YtZW50cnkgKCZvcHRpb25hbCBpbmNsdXNpdmUpCihkZWZ1biBhbGxv dXQtZW5kLW9mLWVudHJ5ICgmb3B0aW9uYWwgaW5jbHVzaXZlKQogICJQb3NpdGlvbiB0aGUgcG9p bnQgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCB0b3BpY3MnIGVudHJ5LgoKT3B0aW9uYWwgSU5D TFVTSVZFIG1lYW5zIGFsc28gaW5jbHVkZSB0cmFpbGluZyBlbXB0eSBsaW5lLCBpZiBhbnkuICBX aGVuCnVuc2V0LCB3aGl0ZXNwYWNlIGJldHdlZW4gaXRlbXMgc2VwYXJhdGVzIHRoZW0gZXZlbiB3 aGVuIHRoZSBpdGVtcyBhcmUKY29sbGFwc2VkLiIKICAoaW50ZXJhY3RpdmUpCiAgKGFsbG91dC1w cmUtbmV4dC1wcmVmaXgpCiAgKGlmIChhbmQgKG5vdCBpbmNsdXNpdmUpIChub3QgKGJvYnApKSAo PSA/XG4gKHByZWNlZGluZy1jaGFyKSkpCiAgICAgIChmb3J3YXJkLWNoYXIgLTEpKQogIChwb2lu dCkpCjs7O18gICA+IGFsbG91dC1lbmQtb2YtY3VycmVudC1oZWFkaW5nICgpCihkZWZ1biBhbGxv dXQtZW5kLW9mLWN1cnJlbnQtaGVhZGluZyAoKQogIChpbnRlcmFjdGl2ZSkKICAoYWxsb3V0LWJl Z2lubmluZy1vZi1jdXJyZW50LWVudHJ5KQogIChzZWFyY2gtZm9yd2FyZCAiXG4iIG5pbCB0KQog IChmb3J3YXJkLWNoYXIgLTEpKQooZGVmYWxpYXMgJ2FsbG91dC1lbmQtb2YtaGVhZGluZyAnYWxs b3V0LWVuZC1vZi1jdXJyZW50LWhlYWRpbmcpCjs7O18gICA+IGFsbG91dC1nZXQtYm9keS10ZXh0 ICgpCihkZWZ1biBhbGxvdXQtZ2V0LWJvZHktdGV4dCAoKQogICJSZXR1cm4gdGhlIHVubWFuZ2xl ZCBib2R5IHRleHQgb2YgdGhlIHRvcGljIGltbWVkaWF0ZWx5IGNvbnRhaW5pbmcgcG9pbnQuIgog IChzYXZlLWV4Y3Vyc2lvbgogICAgKGFsbG91dC1lbmQtb2YtcHJlZml4KQogICAgKGlmIChub3Qg KHNlYXJjaC1mb3J3YXJkICJcbiIgbmlsIHQpKQogICAgICAgIG5pbAogICAgICAoYmFja3dhcmQt Y2hhciAxKQogICAgICAobGV0ICgocHJlLWJvZHkgKHBvaW50KSkpCiAgICAgICAgKGlmIChub3Qg cHJlLWJvZHkpCiAgICAgICAgICAgIG5pbAogICAgICAgICAgKGFsbG91dC1lbmQtb2YtZW50cnkg dCkKICAgICAgICAgIChpZiAobm90ICg9IHByZS1ib2R5IChwb2ludCkpKQogICAgICAgICAgICAg IChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKDErIHByZS1ib2R5KSAocG9pbnQpKSkp CiAgICAgICAgKQogICAgICApCiAgICApCiAgKQoKOzs7XyAgLSBEZXB0aC13aXNlCjs7O18gICA+ IGFsbG91dC1hc2NlbmQtdG8tZGVwdGggKGRlcHRoKQooZGVmdW4gYWxsb3V0LWFzY2VuZC10by1k ZXB0aCAoZGVwdGgpCiAgIkFzY2VuZCB0byBkZXB0aCBERVBUSCwgcmV0dXJuaW5nIGRlcHRoIGlm IHN1Y2Nlc3NmdWwsIG5pbCBpZiBub3QuIgogIChpZiAoYW5kICg+IGRlcHRoIDApKDw9IGRlcHRo IChhbGxvdXQtZGVwdGgpKSkKICAgICAgKGxldCAobGFzdC1hc2NlbmRlZCkKICAgICAgICAod2hp bGUgKGFuZCAoPCBkZXB0aCBhbGxvdXQtcmVjZW50LWRlcHRoKQogICAgICAgICAgICAgICAgICAg IChzZXRxIGxhc3QtYXNjZW5kZWQgKGFsbG91dC1hc2NlbmQpKSkpCiAgICAgICAgKGdvdG8tY2hh ciBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcpCiAgICAgICAgKGlmIChpbnRlcmFjdGl2 ZS1wKSAoYWxsb3V0LWVuZC1vZi1wcmVmaXgpKQogICAgICAgIChhbmQgbGFzdC1hc2NlbmRlZCBh bGxvdXQtcmVjZW50LWRlcHRoKSkpKQo7OztfICAgPiBhbGxvdXQtYXNjZW5kICgpCihkZWZ1biBh bGxvdXQtYXNjZW5kICgpCiAgIkFzY2VuZCBvbmUgbGV2ZWwsIHJldHVybmluZyB0IGlmIHN1Y2Nl c3NmdWwsIG5pbCBpZiBub3QuIgogIChwcm9nMQogICAgICAoaWYgKGFsbG91dC1iZWdpbm5pbmct b2YtbGV2ZWwpCiAgICAgICAgICAoYWxsb3V0LXByZXZpb3VzLWhlYWRpbmcpKQogICAgKGlmIChp bnRlcmFjdGl2ZS1wKSAoYWxsb3V0LWVuZC1vZi1wcmVmaXgpKSkpCjs7O18gICA+IGFsbG91dC1k ZXNjZW5kLXRvLWRlcHRoIChkZXB0aCkKKGRlZnVuIGFsbG91dC1kZXNjZW5kLXRvLWRlcHRoIChk ZXB0aCkKICAiRGVzY2VuZCB0byBkZXB0aCBERVBUSCB3aXRoaW4gY3VycmVudCB0b3BpYy4KClJl dHVybmluZyBkZXB0aCBpZiBzdWNjZXNzZnVsLCBuaWwgaWYgbm90LiIKICAobGV0ICgoc3RhcnQt cG9pbnQgKHBvaW50KSkKICAgICAgICAoc3RhcnQtZGVwdGggKGFsbG91dC1kZXB0aCkpKQogICAg KHdoaWxlCiAgICAgICAgKGFuZCAoPiAoYWxsb3V0LWRlcHRoKSAwKQogICAgICAgICAgICAgKG5v dCAoPSBkZXB0aCBhbGxvdXQtcmVjZW50LWRlcHRoKSkgOyAuLi4gbm90IHRoZXJlIHlldAogICAg ICAgICAgICAgKGFsbG91dC1uZXh0LWhlYWRpbmcpICAgICA7IC4uLiBnbyBmdXJ0aGVyCiAgICAg ICAgICAgICAoPCBzdGFydC1kZXB0aCBhbGxvdXQtcmVjZW50LWRlcHRoKSkpIDsgLi4uIHN0aWxs IGluIHRvcGljCiAgICAoaWYgKGFuZCAoPiAoYWxsb3V0LWRlcHRoKSAwKQogICAgICAgICAgICAg KD0gYWxsb3V0LXJlY2VudC1kZXB0aCBkZXB0aCkpCiAgICAgICAgZGVwdGgKICAgICAgKGdvdG8t Y2hhciBzdGFydC1wb2ludCkKICAgICAgbmlsKSkKICApCjs7O18gICA+IGFsbG91dC11cC1jdXJy ZW50LWxldmVsIChhcmcpCihkZWZ1biBhbGxvdXQtdXAtY3VycmVudC1sZXZlbCAoYXJnKQogICJN b3ZlIG91dCBBUkcgbGV2ZWxzIGZyb20gY3VycmVudCB2aXNpYmxlIHRvcGljLiIKICAoaW50ZXJh Y3RpdmUgInAiKQogIChsZXQgKChzdGFydC1wb2ludCAocG9pbnQpKSkKICAgIChhbGxvdXQtYmFj ay10by1jdXJyZW50LWhlYWRpbmcpCiAgICAoaWYgKG5vdCAoYWxsb3V0LWFzY2VuZCkpCiAgICAg ICAgKHByb2duIChnb3RvLWNoYXIgc3RhcnQtcG9pbnQpCiAgICAgICAgICAgICAgIChlcnJvciAi Q2FuJ3QgYXNjZW5kIHBhc3Qgb3V0ZXJtb3N0IGxldmVsIikpCiAgICAgIChpZiAoaW50ZXJhY3Rp dmUtcCkgKGFsbG91dC1lbmQtb2YtcHJlZml4KSkKICAgICAgYWxsb3V0LXJlY2VudC1wcmVmaXgt YmVnaW5uaW5nKSkpCgo7OztfICAtIExpbmVhcgo7OztfICAgPiBhbGxvdXQtbmV4dC1zaWJsaW5n ICgmb3B0aW9uYWwgZGVwdGggYmFja3dhcmQpCihkZWZ1biBhbGxvdXQtbmV4dC1zaWJsaW5nICgm b3B0aW9uYWwgZGVwdGggYmFja3dhcmQpCiAgIkxpa2UgYGFsbG91dC1mb3J3YXJkLWN1cnJlbnQt bGV2ZWwnLCBidXQgcmVzcGVjdHMgaW52aXNpYmxlIHRvcGljcy4KClRyYXZlcnNlIGF0IG9wdGlv bmFsIERFUFRILCBvciBjdXJyZW50IGRlcHRoIGlmIG5vbmUgc3BlY2lmaWVkLgoKR28gYmFja3dh cmQgaWYgb3B0aW9uYWwgYXJnIEJBQ0tXQVJEIGlzIG5vbi1uaWwuCgpSZXR1cm4gdGhlIHN0YXJ0 IHBvaW50IG9mIHRoZSBuZXcgdG9waWMgaWYgc3VjY2Vzc2Z1bCwgbmlsIG90aGVyd2lzZS4iCgog IChpZiAoaWYgYmFja3dhcmQgKGJvYnApIChlb2JwKSkKICAgICAgbmlsCiAgICAobGV0ICgodGFy Z2V0LWRlcHRoIChvciBkZXB0aCAoYWxsb3V0LWRlcHRoKSkpCiAgICAgICAgICAoc3RhcnQtcG9p bnQgKHBvaW50KSkKICAgICAgICAgIChzdGFydC1wcmVmaXgtYmVnaW5uaW5nIGFsbG91dC1yZWNl bnQtcHJlZml4LWJlZ2lubmluZykKICAgICAgICAgIChjb3VudCAwKQogICAgICAgICAgbGVhcGlu ZwoJICBsYXN0LWRlcHRoKQogICAgICAod2hpbGUgKGFuZAogICAgICAgICAgICAgIDs7IGRvbmUg dG9vIGZldyBzaW5nbGUgc3RlcHMgdG8gcmVzb3J0IHRvIHRoZSBsZWFwIHJvdXRpbmU6CiAgICAg ICAgICAgICAgKG5vdCBsZWFwaW5nKQogICAgICAgICAgICAgIDs7IG5vdCBhdCBsaW1pdDoKICAg ICAgICAgICAgICAobm90IChpZiBiYWNrd2FyZCAoYm9icCkgKGVvYnApKSkKICAgICAgICAgICAg ICA7OyBzdGlsbCB0cmF2ZXJzYWJsZToKICAgICAgICAgICAgICAoaWYgYmFja3dhcmQgKGFsbG91 dC1wcmV2aW91cy1oZWFkaW5nKSAoYWxsb3V0LW5leHQtaGVhZGluZykpCiAgICAgICAgICAgICAg Ozsgd2UncmUgYmVsb3cgdGhlIHRhcmdldCBkZXB0aAogICAgICAgICAgICAgICg+IChzZXRxIGxh c3QtZGVwdGggYWxsb3V0LXJlY2VudC1kZXB0aCkgdGFyZ2V0LWRlcHRoKSkKICAgICAgICAoc2V0 cSBjb3VudCAoMSsgY291bnQpKQogICAgICAgIChpZiAoPiBjb3VudCA3KSAgICAgICAgICAgICAg ICAgOyBsaXN0cyBhcmUgY29tbW9ubHkgNyArLSAyLCByaWdodD8tKQogICAgICAgICAgICAoc2V0 cSBsZWFwaW5nIHQpKSkKICAgICAgKGNvbmQgKGxlYXBpbmcKICAgICAgICAgICAgIChvciAoYWxs b3V0LW5leHQtc2libGluZy1sZWFwIHRhcmdldC1kZXB0aCBiYWNrd2FyZCkKICAgICAgICAgICAg ICAgICAocHJvZ24KICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgc3RhcnQtcG9pbnQpCiAg ICAgICAgICAgICAgICAgICAoaWYgZGVwdGggKGFsbG91dC1kZXB0aCkgdGFyZ2V0LWRlcHRoKQog ICAgICAgICAgICAgICAgICAgbmlsKSkpCiAgICAgICAgICAgICgoYW5kIChub3QgKGVvYnApKQog ICAgICAgICAgICAgICAgICAoYW5kICg+IChvciBsYXN0LWRlcHRoIChhbGxvdXQtZGVwdGgpKSAw KQogICAgICAgICAgICAgICAgICAgICAgICg9IGFsbG91dC1yZWNlbnQtZGVwdGggdGFyZ2V0LWRl cHRoKSkKICAgICAgICAgICAgICAgICAgKG5vdCAoPSBzdGFydC1wcmVmaXgtYmVnaW5uaW5nCiAg ICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKSkp CiAgICAgICAgICAgICBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5pbmcpCiAgICAgICAgICAg ICh0CiAgICAgICAgICAgICAoZ290by1jaGFyIHN0YXJ0LXBvaW50KQogICAgICAgICAgICAgKGlm IGRlcHRoIChhbGxvdXQtZGVwdGgpIHRhcmdldC1kZXB0aCkKICAgICAgICAgICAgIG5pbCkpKSkp Cjs7O18gICA+IGFsbG91dC1uZXh0LXNpYmxpbmctbGVhcCAoJm9wdGlvbmFsIGRlcHRoIGJhY2t3 YXJkKQooZGVmdW4gYWxsb3V0LW5leHQtc2libGluZy1sZWFwICgmb3B0aW9uYWwgZGVwdGggYmFj a3dhcmQpCiAgIkxpa2UgYGFsbG91dC1uZXh0LXNpYmxpbmcnLCBidXQgYnkgZGlyZWN0IHNlYXJj aCBmb3IgdG9waWMgYXQgZGVwdGguCgpUcmF2ZXJzZSBhdCBvcHRpb25hbCBERVBUSCwgb3IgY3Vy cmVudCBkZXB0aCBpZiBub25lIHNwZWNpZmllZC4KCkdvIGJhY2t3YXJkIGlmIG9wdGlvbmFsIGFy ZyBCQUNLV0FSRCBpcyBub24tbmlsLgoKUmV0dXJuIHRoZSBzdGFydCBwb2ludCBvZiB0aGUgbmV3 IHRvcGljIGlmIHN1Y2Nlc3NmdWwsIG5pbCBvdGhlcndpc2UuCgpDb3N0cyBtb3JlIHRoYW4gcmVn dWxhciBgYWxsb3V0LW5leHQtc2libGluZycgZm9yIHNob3J0IHRyYXZlcnNhbHM6CgogLSB3ZSBo YXZlIHRvIGNoZWNrIHRoZSBwcmlvciBcKG5leHQsIGlmIHRyYXZlbGxpbmcgYmFja3dhcmRzKQog ICBpdGVtIHRvIGNvbmZpcm0gY29ubmVjdGl2aXR5IHdpdGggdGhlIHByaW9yIHRvcGljLCBhbmQK IC0gaWYgY29uZmlybWVkLCB3ZSBoYXZlIHRvIHJlZXN0YWJsaXNoIHRoZSBhbGxvdXQtcmVjZW50 LSogc2V0dGluZ3Mgd2l0aAogICBzb21lIGV4dHJhIG5hdmlnYXRpb24KIC0gaWYgY29uZmlybWF0 aW9uIGZhaWxzLCB3ZSBoYXZlIHRvIGRvIG1vcmUgd29yayB0byByZWNvdmVyCgpJdCBpcyBhbiBp bmNyZWFzaW5nbHkgYmlnIHdpbiB3aGVuIHRoZXJlIGFyZSBtYW55IGludGVydmVuaW5nCm9mZnNw cmluZyBiZWZvcmUgdGhlIG5leHQgc2libGluZywgaG93ZXZlciwgc28KYGFsbG91dC1uZXh0LXNp YmxpbmcnIHJlc29ydHMgdG8gdGhpcyBpZiBpdCBmaW5kcyBpdHNlbGYgaW4gdGhhdApzaXR1YXRp b24uIgoKICAoaWYgKGlmIGJhY2t3YXJkIChib2JwKSAoZW9icCkpCiAgICAgIG5pbAogICAgKGxl dCogKChzdGFydC1wb2ludCAocG9pbnQpKQogICAgICAgICAgICh0YXJnZXQtZGVwdGggKG9yIGRl cHRoIChhbGxvdXQtZGVwdGgpKSkKICAgICAgICAgICAoc2VhcmNoLXdoaXRlc3BhY2UtcmVnZXhw IG5pbCkKICAgICAgICAgICAoZGVwdGgtYmlhc2VkICgtIHRhcmdldC1kZXB0aCAyKSkKICAgICAg ICAgICAoZXhwcmVzc2lvbiAoaWYgKDw9IHRhcmdldC1kZXB0aCAxKQogICAgICAgICAgICAgICAg ICAgICAgICAgICBhbGxvdXQtZGVwdGgtb25lLXJlZ2V4cAogICAgICAgICAgICAgICAgICAgICAg ICAgKGZvcm1hdCBhbGxvdXQtZGVwdGgtc3BlY2lmaWMtcmVnZXhwCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlcHRoLWJpYXNlZCBkZXB0aC1iaWFzZWQpKSkKICAgICAgICAgICBm b3VuZAogICAgICAgICAgIGRvbmUpCiAgICAgICh3aGlsZSAobm90IGRvbmUpCiAgICAgICAgKHNl dHEgZm91bmQgKGlmIGJhY2t3YXJkCiAgICAgICAgICAgICAgICAgICAgICAgIChyZS1zZWFyY2gt YmFja3dhcmQgZXhwcmVzc2lvbiBuaWwgJ3RvLWxpbWl0KQogICAgICAgICAgICAgICAgICAgICAg KGZvcndhcmQtY2hhciAxKQogICAgICAgICAgICAgICAgICAgICAgKHJlLXNlYXJjaC1mb3J3YXJk IGV4cHJlc3Npb24gbmlsICd0by1saW1pdCkpKQogICAgICAgIChpZiAoYW5kIGZvdW5kIChhbGxv dXQtYWJlcnJhbnQtY29udGFpbmVyLXApKQogICAgICAgICAgICAoc2V0cSBmb3VuZCBuaWwpKQog ICAgICAgIChzZXRxIGRvbmUgKG9yIGZvdW5kIChpZiBiYWNrd2FyZCAoYm9icCkgKGVvYnApKSkp KQogICAgICAoaWYgKG5vdCBmb3VuZCkKICAgICAgICAgIChwcm9nbiAoZ290by1jaGFyIHN0YXJ0 LXBvaW50KQogICAgICAgICAgICAgICAgIG5pbCkKICAgICAgICA7OyByYXRpb25hbGU6IGlmIGFu eSBpbnRlcnZlbmluZyBpdGVtcyB3ZXJlIGF0IGEgbG93ZXIgZGVwdGgsIHdlCiAgICAgICAgOzsg d291bGQgbm93IGJlIG9uIHRoZSBmaXJzdCBvZmZzcHJpbmcgYXQgdGhlIHRhcmdldCBkZXB0aCAt IGllLAogICAgICAgIDs7IHRoZSBwcmVjZWVkaW5nIGl0ZW0gKHBlciB0aGUgc2VhcmNoIGRpcmVj dGlvbikgbXVzdCBiZSBhdCBhCiAgICAgICAgOzsgbGVzc2VyIGRlcHRoLiAgdGhhdCdzIGFsbCB3 ZSBuZWVkIHRvIGNoZWNrLgogICAgICAgIChpZiBiYWNrd2FyZCAoYWxsb3V0LW5leHQtaGVhZGlu ZykgKGFsbG91dC1wcmV2aW91cy1oZWFkaW5nKSkKICAgICAgICAoaWYgKDwgYWxsb3V0LXJlY2Vu dC1kZXB0aCB0YXJnZXQtZGVwdGgpCiAgICAgICAgICAgIDs7IHJldHVybiB0byBzdGFydCBhbmQg cmVlc3RhYmxpc2ggYWxsb3V0LXJlY2VudC0qOgogICAgICAgICAgICAocHJvZ24KICAgICAgICAg ICAgICAoZ290by1jaGFyIHN0YXJ0LXBvaW50KQogICAgICAgICAgICAgIChhbGxvdXQtZGVwdGgp CiAgICAgICAgICAgICAgbmlsKQogICAgICAgICAgKGdvdG8tY2hhciBmb3VuZCkKICAgICAgICAg IDs7IGxvY2F0ZSBjdXJzb3IgYW5kIHNldCBhbGxvdXQtcmVjZW50LSo6CiAgICAgICAgICAoYWxs b3V0LWdvdG8tcHJlZml4KSkpKSkpCjs7O18gICA+IGFsbG91dC1wcmV2aW91cy1zaWJsaW5nICgm b3B0aW9uYWwgZGVwdGggYmFja3dhcmQpCihkZWZ1biBhbGxvdXQtcHJldmlvdXMtc2libGluZyAo Jm9wdGlvbmFsIGRlcHRoIGJhY2t3YXJkKQogICJMaWtlIGBhbGxvdXQtZm9yd2FyZC1jdXJyZW50 LWxldmVsJyBiYWNrd2FyZHMsIHJlc3BlY3RpbmcgaW52aXNpYmxlIHRvcGljcy4KCk9wdGlvbmFs IERFUFRIIHNwZWNpZmllcyBkZXB0aCB0byB0cmF2ZXJzZSwgZGVmYXVsdCBjdXJyZW50IGRlcHRo LgoKT3B0aW9uYWwgQkFDS1dBUkQgcmV2ZXJzZXMgZGlyZWN0aW9uLgoKUmV0dXJuIGRlcHRoIGlm IHN1Y2Nlc3NmdWwsIG5pbCBvdGhlcndpc2UuIgogIChhbGxvdXQtbmV4dC1zaWJsaW5nIGRlcHRo IChub3QgYmFja3dhcmQpKQogICkKOzs7XyAgID4gYWxsb3V0LXNudWctYmFjayAoKQooZGVmdW4g YWxsb3V0LXNudWctYmFjayAoKQogICJQb3NpdGlvbiBjdXJzb3IgYXQgZW5kIG9mIHByZXZpb3Vz IHRvcGljLgoKUHJlc3VtZXMgcG9pbnQgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgdG9waWMgcHJlZml4 LiIKIChpZiAob3IgKGJvYnApIChlb2JwKSkKICAgICBuaWwKICAgKGZvcndhcmQtY2hhciAtMSkp CiAoaWYgKG9yIChib2JwKSAobm90ICg9ID9cbiAocHJlY2VkaW5nLWNoYXIpKSkpCiAgICAgbmls CiAgIChmb3J3YXJkLWNoYXIgLTEpKQogKHBvaW50KSkKOzs7XyAgID4gYWxsb3V0LWJlZ2lubmlu Zy1vZi1sZXZlbCAoKQooZGVmdW4gYWxsb3V0LWJlZ2lubmluZy1vZi1sZXZlbCAoKQogICJHbyBi YWNrIHRvIHRoZSBmaXJzdCBzaWJsaW5nIGF0IHRoaXMgbGV2ZWwsIHZpc2libGUgb3Igbm90LiIK ICAoYWxsb3V0LWVuZC1vZi1sZXZlbCAnYmFja3dhcmQpKQo7OztfICAgPiBhbGxvdXQtZW5kLW9m LWxldmVsICgmb3B0aW9uYWwgYmFja3dhcmQpCihkZWZ1biBhbGxvdXQtZW5kLW9mLWxldmVsICgm b3B0aW9uYWwgYmFja3dhcmQpCiAgIkdvIHRvIHRoZSBsYXN0IHNpYmxpbmcgYXQgdGhpcyBsZXZl bCwgdmlzaWJsZSBvciBub3QuIgoKICAobGV0ICgoZGVwdGggKGFsbG91dC1kZXB0aCkpKQogICAg KHdoaWxlIChhbGxvdXQtcHJldmlvdXMtc2libGluZyBkZXB0aCBuaWwpKQogICAgKHByb2cxIGFs bG91dC1yZWNlbnQtZGVwdGgKICAgICAgKGlmIChpbnRlcmFjdGl2ZS1wKSAoYWxsb3V0LWVuZC1v Zi1wcmVmaXgpKSkpKQo7OztfICAgPiBhbGxvdXQtbmV4dC12aXNpYmxlLWhlYWRpbmcgKGFyZykK KGRlZnVuIGFsbG91dC1uZXh0LXZpc2libGUtaGVhZGluZyAoYXJnKQogICJNb3ZlIHRvIHRoZSBu ZXh0IEFSRyd0aCB2aXNpYmxlIGhlYWRpbmcgbGluZSwgYmFja3dhcmQgaWYgYXJnIGlzIG5lZ2F0 aXZlLgoKTW92ZSB0byBidWZmZXIgbGltaXQgaW4gaW5kaWNhdGVkIGRpcmVjdGlvbiBpZiBoZWFk aW5ncyBhcmUgZXhoYXVzdGVkLiIKCiAgKGludGVyYWN0aXZlICJwIikKICAobGV0KiAoKGluaGli aXQtZmllbGQtdGV4dC1tb3Rpb24gdCkKICAgICAgICAgKGJhY2t3YXJkIChpZiAoPCBhcmcgMCkg KHNldHEgYXJnICgqIC0xIGFyZykpKSkKCSAoc3RlcCAoaWYgYmFja3dhcmQgLTEgMSkpCgkgcHJl diBnb3QpCgogICAgKHdoaWxlICg+IGFyZyAwKQogICAgICAod2hpbGUgKGFuZAogICAgICAgICAg ICAgIDs7IEJvdW5kYXJ5IGNvbmRpdGlvbjoKICAgICAgICAgICAgICAobm90IChpZiBiYWNrd2Fy ZCAoYm9icCkoZW9icCkpKQogICAgICAgICAgICAgIDs7IE1vdmUsIHNraXBwaW5nIG92ZXIgYWxs IGNvbmNlYWxlZCBsaW5lcyBpbiBvbmUgZmVsbCBzd29vcDoKICAgICAgICAgICAgICAocHJvZzEg KGNvbmRpdGlvbi1jYXNlIG5pbCAob3IgKGxpbmUtbW92ZSBzdGVwKSB0KQogICAgICAgICAgICAg ICAgICAgICAgIChlcnJvciBuaWwpKQogICAgICAgICAgICAgICAgKGFsbG91dC1iZWdpbm5pbmct b2YtY3VycmVudC1saW5lKSkKICAgICAgICAgICAgICA7OyBEZWFsIHdpdGggYXBwYXJlbnQgaGVh ZGVyIGxpbmU6CiAgICAgICAgICAgICAgKGlmIChub3QgKGxvb2tpbmctYXQgYWxsb3V0LXJlZ2V4 cCkpCiAgICAgICAgICAgICAgICAgIDs7IG5vdCBhIGhlYWRlciBsaW5lLCBrZWVwIGxvb2tpbmc6 CiAgICAgICAgICAgICAgICAgIHQKICAgICAgICAgICAgICAgIChhbGxvdXQtcHJlZml4LWRhdGEp CiAgICAgICAgICAgICAgICAoaWYgKGFuZCAoYWxsb3V0LWRvLWRvdWJsZWNoZWNrKQogICAgICAg ICAgICAgICAgICAgICAgICAgKGFsbG91dC1hYmVycmFudC1jb250YWluZXItcCkpCiAgICAgICAg ICAgICAgICAgICAgOzsgc2tpcCB0aGlzIGFiZXJyYW50IHByb3NwZWN0aXZlIGhlYWRlciBsaW5l OgogICAgICAgICAgICAgICAgICAgIHQKICAgICAgICAgICAgICAgICAgOzsgdGhpcyBwcm9zcGVj dGl2ZSBoZWFkZXJsaW5lIHF1YWxpZmllcyAtIHJlZ2lzdGVyOgogICAgICAgICAgICAgICAgICAo c2V0cSBnb3QgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKQogICAgICAgICAgICAgICAg ICA7OyBhbmQgYnJlYWsgdGhlIGxvb3A6CiAgICAgICAgICAgICAgICAgIG5pbCkpKSkKICAgICAg OzsgUmVnaXN0ZXIgdGhpcyBnb3QsIGl0IG1heSBiZSB0aGUgbGFzdDoKICAgICAgKGlmIGdvdCAo c2V0cSBwcmV2IGdvdCkpCiAgICAgIChzZXRxIGFyZyAoMS0gYXJnKSkpCiAgICAoY29uZCAoZ290 CQkJCTsgTGFzdCBtb3ZlIHdhcyB0byBhIHByZWZpeDoKICAgICAgICAgICAoYWxsb3V0LWVuZC1v Zi1wcmVmaXgpKQoJICAocHJldgkJCQk7IExhc3QgbW92ZSB3YXNuJ3QsIGJ1dCBwcmV2IHdhczoK ICAgICAgICAgICAoZ290by1jaGFyIHByZXYpCiAgICAgICAgICAgKGFsbG91dC1lbmQtb2YtcHJl Zml4KSkKCSAgKChub3QgYmFja3dhcmQpIChlbmQtb2YtbGluZSkgbmlsKSkpKQo7OztfICAgPiBh bGxvdXQtcHJldmlvdXMtdmlzaWJsZS1oZWFkaW5nIChhcmcpCihkZWZ1biBhbGxvdXQtcHJldmlv dXMtdmlzaWJsZS1oZWFkaW5nIChhcmcpCiAgIk1vdmUgdG8gdGhlIHByZXZpb3VzIGhlYWRpbmcg bGluZS4KCldpdGggYXJndW1lbnQsIHJlcGVhdHMgb3IgY2FuIG1vdmUgZm9yd2FyZCBpZiBuZWdh dGl2ZS4KQSBoZWFkaW5nIGxpbmUgaXMgb25lIHRoYXQgc3RhcnRzIHdpdGggYSBgKicgKG9yIHRo YXQgYGFsbG91dC1yZWdleHAnCm1hdGNoZXMpLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChwcm9n MSAoYWxsb3V0LW5leHQtdmlzaWJsZS1oZWFkaW5nICgtIGFyZykpCiAgICAoaWYgKGludGVyYWN0 aXZlLXApIChhbGxvdXQtZW5kLW9mLXByZWZpeCkpKSkKOzs7XyAgID4gYWxsb3V0LWZvcndhcmQt Y3VycmVudC1sZXZlbCAoYXJnKQooZGVmdW4gYWxsb3V0LWZvcndhcmQtY3VycmVudC1sZXZlbCAo YXJnKQogICJQb3NpdGlvbiBwb2ludCBhdCB0aGUgbmV4dCBoZWFkaW5nIG9mIHRoZSBzYW1lIGxl dmVsLgoKVGFrZXMgb3B0aW9uYWwgcmVwZWF0LWNvdW50LCBnb2VzIGJhY2t3YXJkIGlmIGNvdW50 IGlzIG5lZ2F0aXZlLgoKUmV0dXJucyByZXN1bHRpbmcgcG9zaXRpb24sIGVsc2UgbmlsIGlmIG5v bmUgZm91bmQuIgogIChpbnRlcmFjdGl2ZSAicCIpCiAgKGxldCAoKHN0YXJ0LWRlcHRoIChhbGxv dXQtY3VycmVudC1kZXB0aCkpCgkoc3RhcnQtYXJnIGFyZykKCShiYWNrd2FyZCAoPiAwIGFyZykp KQogICAgKGlmICg9IDAgc3RhcnQtZGVwdGgpCgkoZXJyb3IgIk5vIHNpYmxpbmdzLCBub3QgaW4g YSB0b3BpYy4uLiIpKQogICAgKGlmIGJhY2t3YXJkIChzZXRxIGFyZyAoKiAtMSBhcmcpKSkKICAg IChhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRpbmcpCiAgICAod2hpbGUgKGFuZCAobm90ICh6 ZXJvcCBhcmcpKQogICAgICAgICAgICAgICAgKGlmIGJhY2t3YXJkCiAgICAgICAgICAgICAgICAg ICAgKGFsbG91dC1wcmV2aW91cy1zaWJsaW5nKQogICAgICAgICAgICAgICAgICAoYWxsb3V0LW5l eHQtc2libGluZykpKQogICAgICAoc2V0cSBhcmcgKDEtIGFyZykpKQogICAgKGlmIChub3QgKGlu dGVyYWN0aXZlLXApKQogICAgICAgIG5pbAogICAgICAoYWxsb3V0LWVuZC1vZi1wcmVmaXgpCiAg ICAgIChpZiAobm90ICh6ZXJvcCBhcmcpKQogICAgICAgICAgKGVycm9yICJIaXQgJXMgbGV2ZWwg JWQgdG9waWMsIHRyYXZlcnNlZCAlZCBvZiAlZCByZXF1ZXN0ZWQiCiAgICAgICAgICAgICAgICAg KGlmIGJhY2t3YXJkICJmaXJzdCIgImxhc3QiKQogICAgICAgICAgICAgICAgIGFsbG91dC1yZWNl bnQtZGVwdGgKICAgICAgICAgICAgICAgICAoLSAoYWJzIHN0YXJ0LWFyZykgYXJnKQogICAgICAg ICAgICAgICAgIChhYnMgc3RhcnQtYXJnKSkpKSkpCjs7O18gICA+IGFsbG91dC1iYWNrd2FyZC1j dXJyZW50LWxldmVsIChhcmcpCihkZWZ1biBhbGxvdXQtYmFja3dhcmQtY3VycmVudC1sZXZlbCAo YXJnKQogICJJbnZlcnNlIG9mIGBhbGxvdXQtZm9yd2FyZC1jdXJyZW50LWxldmVsJy4iCiAgKGlu dGVyYWN0aXZlICJwIikKICAoaWYgKGludGVyYWN0aXZlLXApCiAgICAgIChsZXQgKChjdXJyZW50 LXByZWZpeC1hcmcgKCogLTEgYXJnKSkpCgkoY2FsbC1pbnRlcmFjdGl2ZWx5ICdhbGxvdXQtZm9y d2FyZC1jdXJyZW50LWxldmVsKSkKICAgIChhbGxvdXQtZm9yd2FyZC1jdXJyZW50LWxldmVsICgq IC0xIGFyZykpKSkKCjs7O18gIzUgQWx0ZXJhdGlvbgoKOzs7XyAgLSBGdW5kYW1lbnRhbAo7Oztf ICAgPSBhbGxvdXQtcG9zdC1nb3RvLWJ1bGxldAooZGVmdmFyIGFsbG91dC1wb3N0LWdvdG8tYnVs bGV0IG5pbAogICJPdXRsaW5lIGludGVybmFsIHZhciwgZm9yIGBhbGxvdXQtcHJlLWNvbW1hbmQt YnVzaW5lc3MnIGhvdC1zcG90IG9wZXJhdGlvbi4KCldoZW4gc2V0LCB0ZWxscyBwb3N0LXByb2Nl c3NpbmcgdG8gcmVwb3NpdGlvbiBvbiB0b3BpYyBidWxsZXQsIGFuZAp0aGVuIHVuc2V0IGl0LiAg U2V0IGJ5IGBhbGxvdXQtcHJlLWNvbW1hbmQtYnVzaW5lc3MnIHdoZW4gaW1wbGVtZW50aW5nCmhv dC1zcG90IG9wZXJhdGlvbiwgd2hlcmUgbGl0ZXJhbCBjaGFyYWN0ZXJzIHR5cGVkIG92ZXIgYSB0 b3BpYyBidWxsZXQKYXJlIG1hcHBlZCB0byB0aGUgY29tbWFuZCBvZiB0aGUgY29ycmVzcG9uZGlu ZyBjb250cm9sLWtleSBvbiB0aGUKYGFsbG91dC1tb2RlLW1hcCcuIikKKG1ha2UtdmFyaWFibGUt YnVmZmVyLWxvY2FsICdhbGxvdXQtcG9zdC1nb3RvLWJ1bGxldCkKOzs7XyAgID0gYWxsb3V0LWNv bW1hbmQtY291bnRlcgooZGVmdmFyIGFsbG91dC1jb21tYW5kLWNvdW50ZXIgMAogICJDb3VudGVy IHRoYXQgbW9ub3RvbmljYWxseSBpbmNyZWFzZXMgaW4gYWxsb3V0LW1vZGUgYnVmZmVycy4KClNl dCBieSBgYWxsb3V0LXByZS1jb21tYW5kLWJ1c2luZXNzJywgdG8gc3VwcG9ydCBhbGxvdXQgYWRk b25zIGluCmNvb3JkaW5hdGluZyB3aXRoIGFsbG91dCBhY3Rpdml0eS4iKQoobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ2FsbG91dC1jb21tYW5kLWNvdW50ZXIpCjs7O18gICA+IGFsbG91dC1w b3N0LWNvbW1hbmQtYnVzaW5lc3MgKCkKKGRlZnVuIGFsbG91dC1wb3N0LWNvbW1hbmQtYnVzaW5l c3MgKCkKICAiT3V0bGluZSBgcG9zdC1jb21tYW5kLWhvb2snIGZ1bmN0aW9uLgoKLSBJbXBsZW1l bnQgKGFuZCBjbGVhcikgYGFsbG91dC1wb3N0LWdvdG8tYnVsbGV0JywgZm9yIGhvdC1zcG90CiAg b3V0bGluZSBjb21tYW5kcy4KCi0gRGVjcnlwdCB0b3BpYyBjdXJyZW50bHkgYmVpbmcgZWRpdGVk IGlmIGl0IHdhcyBlbmNyeXB0ZWQgZm9yIGEgc2F2ZS4iCgoJCQkJCTsgQXBwbHkgYW55IGV4dGVy bmFsIGNoYW5nZSBmdW5jOgogIChpZiAobm90IChhbGxvdXQtbW9kZS1wKSkJCTsgSW4gYWxsb3V0 LW1vZGUuCiAgICAgIG5pbAoKICAgIChpZiAoYW5kIChib3VuZHAgJ2FsbG91dC1hZnRlci1zYXZl LWRlY3J5cHQpCiAgICAgICAgICAgICBhbGxvdXQtYWZ0ZXItc2F2ZS1kZWNyeXB0KQogICAgICAg IChhbGxvdXQtYWZ0ZXItc2F2ZXMtaGFuZGxlcikpCgogICAgOzsgSW1wbGVtZW50IGFsbG91dC1w b3N0LWdvdG8tYnVsbGV0LCBpZiBzZXQ6CiAgICAoaWYgKGFuZCBhbGxvdXQtcG9zdC1nb3RvLWJ1 bGxldAoJICAgICAoYWxsb3V0LWN1cnJlbnQtYnVsbGV0LXBvcykpCgkocHJvZ24gKGdvdG8tY2hh ciAoYWxsb3V0LWN1cnJlbnQtYnVsbGV0LXBvcykpCgkgICAgICAgKHNldHEgYWxsb3V0LXBvc3Qt Z290by1idWxsZXQgbmlsKSkpCiAgICApKQo7OztfICAgPiBhbGxvdXQtcHJlLWNvbW1hbmQtYnVz aW5lc3MgKCkKKGRlZnVuIGFsbG91dC1wcmUtY29tbWFuZC1idXNpbmVzcyAoKQogICJPdXRsaW5l IGBwcmUtY29tbWFuZC1ob29rJyBmdW5jdGlvbiBmb3Igb3V0bGluZSBidWZmZXJzLgoKQW1vbmcg b3RoZXIgdGhpbmdzLCBpbXBsZW1lbnRzIHNwZWNpYWwgYmVoYXZpb3Igd2hlbiB0aGUgY3Vyc29y IGlzIG9uIHRoZQp0b3BpYyBidWxsZXQgY2hhcmFjdGVyLgoKV2hlbiB0aGUgY3Vyc29yIGlzIG9u IHRoZSBidWxsZXQgY2hhcmFjdGVyLCBzZWxmLWluc2VydCBjaGFyYWN0ZXJzIGFyZQpyZWludGVy cHJldGVkIGFzIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRyb2wtY2hhcmFjdGVyIGluIHRoZQpgYWxs b3V0LW1vZGUtbWFwJy4gIFRoZSBgYWxsb3V0LW1vZGUnIGBwb3N0LWNvbW1hbmQtaG9vaycgaW5z dXJlcyB0aGF0CnRoZSBjdXJzb3Igd2hpY2ggaGFzIG1vdmVkIGFzIGEgcmVzdWx0IG9mIHN1Y2gg cmVpbnRlcnByZXRhdGlvbiBpcwpwb3NpdGlvbmVkIG9uIHRoZSBidWxsZXQgY2hhcmFjdGVyIG9m IHRoZSBkZXN0aW5hdGlvbiB0b3BpYy4KClRoZSB1cHNob3QgaXMgdGhhdCB5b3UgY2FuIGdldCBl YXN5LCBzaW5nbGUgXChpZSwgdW5tb2RpZmllZFwpIGtleQpvdXRsaW5lIG1hbmV1dmVyaW5nIG9w ZXJhdGlvbnMgYnkgcG9zaXRpb25pbmcgdGhlIGN1cnNvciBvbiB0aGUgYnVsbGV0CmNoYXIuICBX aGVuIGluIHRoaXMgbW9kZSB5b3UgY2FuIHVzZSByZWd1bGFyIGN1cnNvci1wb3NpdGlvbmluZwpj b21tYW5kL2tleXN0cm9rZXMgdG8gcmVsb2NhdGUgdGhlIGN1cnNvciBvZmYgb2YgYSBidWxsZXQg Y2hhcmFjdGVyIHRvCnJldHVybiB0byByZWd1bGFyIGludGVycHJldGF0aW9uIG9mIHNlbGYtaW5z ZXJ0IGNoYXJhY3RlcnMuIgoKICAoaWYgKG5vdCAoYWxsb3V0LW1vZGUtcCkpCiAgICAgIG5pbAog ICAgOzsgSW5jcmVtZW50IGFsbG91dC1jb21tYW5kLWNvdW50ZXIKICAgIChzZXRxIGFsbG91dC1j b21tYW5kLWNvdW50ZXIgKDErIGFsbG91dC1jb21tYW5kLWNvdW50ZXIpKQogICAgOzsgRG8gaG90 LXNwb3QgbmF2aWdhdGlvbi4KICAgIChpZiAoYW5kIChlcSB0aGlzLWNvbW1hbmQgJ3NlbGYtaW5z ZXJ0LWNvbW1hbmQpCgkgICAgIChlcSAocG9pbnQpKGFsbG91dC1jdXJyZW50LWJ1bGxldC1wb3Mp KSkKICAgICAgICAoYWxsb3V0LWhvdHNwb3Qta2V5LWhhbmRsZXIpKSkpCjs7O18gICA+IGFsbG91 dC1ob3RzcG90LWtleS1oYW5kbGVyICgpCihkZWZ1biBhbGxvdXQtaG90c3BvdC1rZXktaGFuZGxl ciAoKQogICJDYXRjaGFsbCBoYW5kbGluZyBvZiBrZXkgYmluZGluZ3MgaW4gaG90LXNwb3RzLgoK VHJhbnNsYXRlcyB1bm1vZGlmaWVkIGtleXN0cm9rZXMgdG8gY29ycmVzcG9uZGluZyBhbGxvdXQg Y29tbWFuZHMsIHdoZW4KdGhleSB3b3VsZCBxdWFsaWZ5IGlmIHByZWZpeGVkIHdpdGggdGhlIGFs bG91dC1jb21tYW5kLXByZWZpeCwgYW5kIHNldHMKdGhpcy1jb21tYW5kIGFjY29yZGluZ2x5LgoK UmV0dXJucyB0aGUgcXVhbGlmeWluZyBjb21tYW5kLCBpZiBhbnksIGVsc2UgbmlsLiIKICAoaW50 ZXJhY3RpdmUpCiAgKGxldCogKChrZXktc3RyaW5nIChpZiAobnVtYmVycCBsYXN0LWNvbW1hbmQt Y2hhcikKICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyLXRvLXN0cmluZyBsYXN0LWNvbW1h bmQtY2hhcikpKQogICAgICAgICAoa2V5LW51bSAoY29uZCAoKG51bWJlcnAgbGFzdC1jb21tYW5k LWNoYXIpIGxhc3QtY29tbWFuZC1jaGFyKQogICAgICAgICAgICAgICAgICAgICAgICA7OyBmb3Ig WEVtYWNzIGNoYXJhY3RlciB0eXBlOgogICAgICAgICAgICAgICAgICAgICAgICAoKGFuZCAoZmJv dW5kcCAnY2hhcmFjdGVycCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGx5ICdj aGFyYWN0ZXJwIChsaXN0IGxhc3QtY29tbWFuZC1jaGFyKSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAoYXBwbHkgJ2NoYXItdG8taW50IChsaXN0IGxhc3QtY29tbWFuZC1jaGFyKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICh0IDApKSkKICAgICAgICAgbWFwcGVkLWJpbmRpbmcpCgogICAg KGlmICh6ZXJvcCBrZXktbnVtKQogICAgICAgIG5pbAoKICAgICAgKGlmIChhbmQKICAgICAgICAg ICA7OyBleGNsdWRlIGNvbnRyb2wgY2hhcnMgYW5kIGVzY2FwZToKICAgICAgICAgICAoPD0gMzMg a2V5LW51bSkKICAgICAgICAgICAoc2V0cSBtYXBwZWQtYmluZGluZwogICAgICAgICAgICAgICAg IChvciAoYW5kIChhc3NvYyBrZXktc3RyaW5nIGFsbG91dC1rZXliaW5kaW5ncy1saXN0KQogICAg ICAgICAgICAgICAgICAgICAgICAgIDs7IHRyYW5zbGF0ZSBsaXRlcmFsIG1lbWJlcnNoaXAgb24g bGlzdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FkciAoYXNzb2Mga2V5LXN0cmluZyBh bGxvdXQta2V5YmluZGluZ3MtbGlzdCkpKQogICAgICAgICAgICAgICAgICAgICA7OyB0cmFuc2xh dGUgYXMgYSBrZXliaW5kaW5nOgogICAgICAgICAgICAgICAgICAgICAoa2V5LWJpbmRpbmcgKGNv bmNhdCBhbGxvdXQtY29tbWFuZC1wcmVmaXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNoYXItdG8tc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaWYgKGFuZCAoPD0gOTcga2V5LW51bSkgICA7ICJhIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKD49IDEyMiBrZXktbnVt KSkgOyAieiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo LSBrZXktbnVtIDk2KSBrZXktbnVtKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0KSkpKQogICAgICAgICAgOzsgUXVhbGlmaWVkIGFzIGFuIGFsbG91dCBjb21tYW5kIC0gZG8g aG90LXNwb3Qgb3BlcmF0aW9uLgogICAgICAgICAgKHNldHEgYWxsb3V0LXBvc3QtZ290by1idWxs ZXQgdCkKICAgICAgICA7OyBhY2NlcHQtZGVmYXVsdHMgbmlsLCBvciBlbHNlIHdlJ2xsIGdldCBh bGxvdXQtaXRlbS1pY29uLWtleS1oYW5kbGVyLgogICAgICAgIChzZXRxIG1hcHBlZC1iaW5kaW5n IChrZXktYmluZGluZyAoY2hhci10by1zdHJpbmcga2V5LW51bSkpKSkKCiAgICAgICh3aGlsZSAo a2V5bWFwcCBtYXBwZWQtYmluZGluZykKICAgICAgICAoc2V0cSBtYXBwZWQtYmluZGluZwogICAg ICAgICAgICAgIChsb29rdXAta2V5IG1hcHBlZC1iaW5kaW5nICh2ZWN0b3IgKHJlYWQtY2hhcikp KSkpCgogICAgICAoaWYgbWFwcGVkLWJpbmRpbmcKICAgICAgICAgIChzZXRxIHRoaXMtY29tbWFu ZCBtYXBwZWQtYmluZGluZykpKSkpCgo7OztfICAgPiBhbGxvdXQtZmluZC1maWxlLWhvb2sgKCkK KGRlZnVuIGFsbG91dC1maW5kLWZpbGUtaG9vayAoKQogICJBY3RpdmF0ZSBgYWxsb3V0LW1vZGUn IG9uIG5vbi1uaWwgYGFsbG91dC1hdXRvLWFjdGl2YXRpb24nLCBgYWxsb3V0LWxheW91dCcuCgpT ZWUgYGFsbG91dC1pbml0JyBmb3Igc2V0dXAgaW5zdHJ1Y3Rpb25zLiIKICAoaWYgKGFuZCBhbGxv dXQtYXV0by1hY3RpdmF0aW9uCgkgICAobm90IChhbGxvdXQtbW9kZS1wKSkKCSAgIGFsbG91dC1s YXlvdXQpCiAgICAgIChhbGxvdXQtbW9kZSB0KSkpCgo7OztfICAtIFRvcGljIEZvcm1hdCBBc3Nl c3NtZW50Cjs7O18gICA+IGFsbG91dC1zb2xpY2l0LWFsdGVybmF0ZS1idWxsZXQgKGRlcHRoICZv cHRpb25hbCBjdXJyZW50LWJ1bGxldCkKKGRlZnVuIGFsbG91dC1zb2xpY2l0LWFsdGVybmF0ZS1i dWxsZXQgKGRlcHRoICZvcHRpb25hbCBjdXJyZW50LWJ1bGxldCkKCiAgIlByb21wdCBmb3IgYW5k IHJldHVybiBhIGJ1bGxldCBjaGFyIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBjdXJyZW50IG9u ZS4KCk9mZmVyIG9uZSBzdWl0YWJsZSBmb3IgY3VycmVudCBkZXB0aCBERVBUSCBhcyBkZWZhdWx0 LiIKCiAgKGxldCogKChkZWZhdWx0LWJ1bGxldCAob3IgKGFuZCAoc3RyaW5ncCBjdXJyZW50LWJ1 bGxldCkgY3VycmVudC1idWxsZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91 dC1idWxsZXQtZm9yLWRlcHRoIGRlcHRoKSkpCgkgKHNhbnMtZXNjYXBlcyAocmVnZXhwLXNhbnMt ZXNjYXBlcyBhbGxvdXQtYnVsbGV0cy1zdHJpbmcpKQoJIGNob2ljZSkKICAgIChzYXZlLWV4Y3Vy c2lvbgogICAgICAoZ290by1jaGFyIChhbGxvdXQtY3VycmVudC1idWxsZXQtcG9zKSkKICAgICAg KHNldHEgY2hvaWNlIChzb2xpY2l0LWNoYXItaW4tc3RyaW5nCiAgICAgICAgICAgICAgICAgICAg KGZvcm1hdCAiU2VsZWN0IGJ1bGxldDogJXMgKCclcycgZGVmYXVsdCk6ICIKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNhbnMtZXNjYXBlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg KHN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIGRlZmF1bHQtYnVsbGV0KSkKICAgICAgICAgICAgICAg ICAgICBzYW5zLWVzY2FwZXMKICAgICAgICAgICAgICAgICAgICB0KSkpCiAgICAobWVzc2FnZSAi IikKICAgIChpZiAoc3RyaW5nPSBjaG9pY2UgIiIpIGRlZmF1bHQtYnVsbGV0IGNob2ljZSkpCiAg KQo7OztfICAgPiBhbGxvdXQtZGlzdGluY3RpdmUtYnVsbGV0IChidWxsZXQpCihkZWZ1biBhbGxv dXQtZGlzdGluY3RpdmUtYnVsbGV0IChidWxsZXQpCiAgIlRydWUgaWYgQlVMTEVUIGlzIG9uZSBv ZiB0aG9zZSBvbiBgYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMtc3RyaW5nJy4iCiAgKHN0cmlu Zy1tYXRjaCAocmVnZXhwLXF1b3RlIGJ1bGxldCkgYWxsb3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMt c3RyaW5nKSkKOzs7XyAgID4gYWxsb3V0LW51bWJlcmVkLXR5cGUtcHJlZml4ICgmb3B0aW9uYWwg cHJlZml4KQooZGVmdW4gYWxsb3V0LW51bWJlcmVkLXR5cGUtcHJlZml4ICgmb3B0aW9uYWwgcHJl Zml4KQogICJUcnVlIGlmIGN1cnJlbnQgaGVhZGVyIHByZWZpeCBidWxsZXQgaXMgbnVtYmVyZWQg YnVsbGV0LiIKICAoYW5kIGFsbG91dC1udW1iZXJlZC1idWxsZXQKICAgICAgICAoc3RyaW5nPSBh bGxvdXQtbnVtYmVyZWQtYnVsbGV0CiAgICAgICAgICAgICAgICAgKGlmIHByZWZpeAogICAgICAg ICAgICAgICAgICAgICAoYWxsb3V0LWdldC1wcmVmaXgtYnVsbGV0IHByZWZpeCkKICAgICAgICAg ICAgICAgICAgIChhbGxvdXQtZ2V0LWJ1bGxldCkpKSkpCjs7O18gICA+IGFsbG91dC1lbmNyeXB0 ZWQtdHlwZS1wcmVmaXggKCZvcHRpb25hbCBwcmVmaXgpCihkZWZ1biBhbGxvdXQtZW5jcnlwdGVk LXR5cGUtcHJlZml4ICgmb3B0aW9uYWwgcHJlZml4KQogICJUcnVlIGlmIGN1cnJlbnQgaGVhZGVy IHByZWZpeCBidWxsZXQgaXMgZm9yIGFuIGVuY3J5cHRlZCBlbnRyeSBcKGJvZHkpLiIKICAoYW5k IGFsbG91dC10b3BpYy1lbmNyeXB0aW9uLWJ1bGxldAogICAgICAgIChzdHJpbmc9IGFsbG91dC10 b3BpYy1lbmNyeXB0aW9uLWJ1bGxldAogICAgICAgICAgICAgICAgIChpZiBwcmVmaXgKICAgICAg ICAgICAgICAgICAgICAgKGFsbG91dC1nZXQtcHJlZml4LWJ1bGxldCBwcmVmaXgpCiAgICAgICAg ICAgICAgICAgICAoYWxsb3V0LWdldC1idWxsZXQpKSkpKQo7OztfICAgPiBhbGxvdXQtYnVsbGV0 LWZvci1kZXB0aCAoJm9wdGlvbmFsIGRlcHRoKQooZGVmdW4gYWxsb3V0LWJ1bGxldC1mb3ItZGVw dGggKCZvcHRpb25hbCBkZXB0aCkKICAiUmV0dXJuIG91dGxpbmUgdG9waWMgYnVsbGV0IHN1aXRl ZCB0byBvcHRpb25hbCBERVBUSCwgb3IgY3VycmVudCBkZXB0aC4iCiAgOzsgRmluZCBidWxsZXQg aW4gcGxhaW4tYnVsbGV0cy1zdHJpbmcgbW9kdWxvIERFUFRILgogIChpZiBhbGxvdXQtc3R5bGlz aC1wcmVmaXhlcwogICAgICAoY2hhci10by1zdHJpbmcgKGFyZWYgYWxsb3V0LXBsYWluLWJ1bGxl dHMtc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJSAobWF4IDAgKC0gZGVwdGgg MikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtcGxhaW4tYnVsbGV0cy1z dHJpbmctbGVuKSkpCiAgICBhbGxvdXQtcHJpbWFyeS1idWxsZXQpCiAgKQoKOzs7XyAgLSBUb3Bp YyBQcm9kdWN0aW9uCjs7O18gICA+IGFsbG91dC1tYWtlLXRvcGljLXByZWZpeCAoJm9wdGlvbmFs IHByaW9yLWJ1bGxldAooZGVmdW4gYWxsb3V0LW1ha2UtdG9waWMtcHJlZml4ICgmb3B0aW9uYWwg cHJpb3ItYnVsbGV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2xpY2l0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLWNvbnRyb2wKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCkKICA7OyBEZXB0aCBu dWxsIG1lYW5zIHVzZSBjdXJyZW50IGRlcHRoLCBub24tbnVsbCBtZWFucyB3ZSdyZSBlaXRoZXIK ICA7OyBvcGVuaW5nIGEgbmV3IHRvcGljIGFmdGVyIGN1cnJlbnQgdG9waWMsIGxvd2VyIG9yIGhp Z2hlciwgb3Igd2UncmUKICA7OyBjaGFuZ2luZyBsZXZlbCBvZiBjdXJyZW50IHRvcGljLgogIDs7 IFNvbGljaXQgZG9taW5hdGVzIHNwZWNpZmllZCBidWxsZXQtY2hhci4KOzs7XyAgICAuIERvYyBz dHJpbmc6CiAgIkdlbmVyYXRlIGEgdG9waWMgcHJlZml4IHN1aXRhYmxlIGZvciBvcHRpb25hbCBh cmcgREVQVEgsIG9yIGN1cnJlbnQgZGVwdGguCgpBbGwgdGhlIGFyZ3VtZW50cyBhcmUgb3B0aW9u YWwuCgpQUklPUi1CVUxMRVQgaW5kaWNhdGVzIHRoZSBidWxsZXQgb2YgdGhlIHByZWZpeCBiZWlu ZyBjaGFuZ2VkLCBvcgpuaWwgaWYgbm9uZS4gIFRoaXMgYnVsbGV0IG1heSBiZSBwcmVzZXJ2ZWQg KG90aGVyIG9wdGlvbnMKbm90d2l0aHN0YW5kaW5nKSBpZiBpdCBpcyBvbiB0aGUgYGFsbG91dC1k aXN0aW5jdGl2ZS1idWxsZXRzLXN0cmluZycsCmZvciBpbnN0YW5jZS4KClNlY29uZCBhcmcgTkVX IGluZGljYXRlcyB0aGF0IGEgbmV3IHRvcGljIGlzIGJlaW5nIG9wZW5lZCBhZnRlciB0aGUKdG9w aWMgYXQgcG9pbnQsIGlmIG5vbi1uaWwuICBEZWZhdWx0IGJ1bGxldCBmb3IgbmV3IHRvcGljcywg ZWcsIG1heQpiZSBzZXQgKGNvbnRpbmdlbnQgdG8gb3RoZXIgYXJncykgdG8gbnVtYmVyZWQgYnVs bGV0cyBpZiBwcmV2aW91cwpzaWJsaW5nIGlzIG9uZS4gIFRoZSBpbXBsaWNhdGlvbiBvdGhlcndp c2UgaXMgdGhhdCB0aGUgY3VycmVudCB0b3BpYwppcyBiZWluZyBhZGp1c3RlZCAtIHNoaWZ0ZWQg b3IgcmVidWxsZXRlZCAtIGFuZCB3ZSBkb24ndCBjb25zaWRlcgpidWxsZXQgb3IgcHJldmlvdXMg c2libGluZy4KClRoaXJkIGFyZyBERVBUSCBmb3JjZXMgdGhlIHRvcGljIHByZWZpeCB0byB0aGF0 IGRlcHRoLCByZWdhcmRsZXNzIG9mCnRoZSBjdXJyZW50IHRvcGljcycgZGVwdGguCgpJZiBTT0xJ Q0lUIGlzIG5vbi1uaWwsIHRoZW4gdGhlIGNob2ljZSBvZiBidWxsZXQgaXMgc29saWNpdGVkIGZy b20KdXNlci4gIElmIGl0J3MgYSBjaGFyYWN0ZXIsIHRoZW4gdGhhdCBjaGFyYWN0ZXIgaXMgb2Zm ZXJlZCBhcyB0aGUKZGVmYXVsdCwgb3RoZXJ3aXNlIHRoZSBvbmUgc3VpdGVkIHRvIHRoZSBjb250 ZXh0IFwoYWNjb3JkaW5nIHRvCmRpc3RpbmN0aW9uIG9yIGRlcHRoKSBpcyBvZmZlcmVkLiAgXChU aGlzIG92ZXJyaWRlcyBvdGhlciBvcHRpb25zLAppbmNsdWRpbmcsIGVnLCBhIGRpc3RpbmN0aXZl IFBSSU9SLUJVTExFVC4pICBJZiBub24tbmlsLCB0aGVuIHRoZQpjb250ZXh0LXNwZWNpZmljIGJ1 bGxldCBpcyB1c2VkLgoKRmlmdGggYXJnLCBOVU1CRVItQ09OVFJPTCwgbWF0dGVycyBvbmx5IGlm IGBhbGxvdXQtbnVtYmVyZWQtYnVsbGV0JwppcyBub24tbmlsICphbmQqIHNvbGljaXRpbmcgd2Fz IG5vdCBleHBsaWNpdGx5IGludm9rZWQuICBUaGVuCk5VTUJFUi1DT05UUk9MIG5vbi1uaWwgZm9y Y2VzIHByZWZpeCB0byBlaXRoZXIgbnVtYmVyZWQgb3IKZGVudW1iZXJlZCBmb3JtYXQsIGRlcGVu ZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIHNpeHRoIGFyZywgSU5ERVguCgpcKE5vdGUgdGhhdCBO VU1CRVItQ09OVFJPTCBkb2VzICpub3QqIGFwcGx5IHRvIGxldmVsIDEgdG9waWNzLiAgU29ycnku Li4pCgpJZiBOVU1CRVItQ09OVFJPTCBpcyBub24tbmlsIGFuZCBzaXh0aCBhcmcgSU5ERVggaXMg bm9uLW5pbCB0aGVuCnRoZSBwcmVmaXggb2YgdGhlIHRvcGljIGlzIGZvcmNlZCB0byBiZSBudW1i ZXJlZC4gIE5vbi1uaWwKTlVNQkVSLUNPTlRST0wgYW5kIG5pbCBJTkRFWCBmb3JjZXMgbm9uLW51 bWJlcmVkIGZvcm1hdCBvbiB0aGUKYnVsbGV0LiAgTm9uLW5pbCBOVU1CRVItQ09OVFJPTCBhbmQg bm9uLW5pbCwgbm9uLW51bWJlciBJTkRFWCBtZWFucwp0aGF0IHRoZSBpbmRleCBmb3IgdGhlIG51 bWJlcmVkIHByZWZpeCB3aWxsIGJlIGRlcml2ZWQsIGJ5IGNvdW50aW5nCnNpYmxpbmdzIGJhY2sg dG8gc3RhcnQgb2YgbGV2ZWwuICBJZiBJTkRFWCBpcyBhIG51bWJlciwgdGhlbiB0aGF0Cm51bWJl ciBpcyB1c2VkIGFzIHRoZSBpbmRleCBmb3IgdGhlIG51bWJlcmVkIHByZWZpeCAoYWxsb3dpbmcs IGVnLApzZXF1ZW50aWFsIHJlbnVtYmVyaW5nIHRvIG5vdCByZXF1aXJlIHRoaXMgZnVuY3Rpb24g Y291bnRpbmcgYmFjayB0aGUKaW5kZXggZm9yIGVhY2ggc3VjY2Vzc2l2ZSBzaWJsaW5nKS4iCjs7 O18gICAgLiBDb2RlOgogIDs7IFRoZSBvcHRpb25zIGFyZSBvcmRlcmVkIGluIGxpa2VseSBmcmVx dWVuY2Ugb2YgdXNlLCBtb3N0IGNvbW1vbgogIDs7IGhpZ2hlc3QsIGxlYXN0IGxvd2VzdC4gIEll LCBtb3JlIGxpa2VseSB0byBiZSBkb2luZyBwcmVmaXgKICA7OyBhZGp1c3RtZW50cyB0aGFuIHNv bGljaXRpbmcsIGFuZCB5ZXQgbW9yZSB0aGFuIG51bWJlcmluZy4KICA7OyBDdXJyZW50IHByZWZp eCBpcyBsZWFzdCBkb21pbmFudCwgYnV0IG1vc3QgbGlrZWx5IHRvIGJlIGNvbW1vbmx5CiAgOzsg c3BlY2lmaWVkLi4uCgogIChsZXQqIChib2R5CiAgICAgICAgIG51bWJlcmluZwogICAgICAgICBk ZW51bWJlcmluZwogICAgICAgICAoZGVwdGggKG9yIGRlcHRoIChhbGxvdXQtZGVwdGgpKSkKICAg ICAgICAgKGhlYWRlci1sZWFkIGFsbG91dC1oZWFkZXItcHJlZml4KQogICAgICAgICAoYnVsbGV0 LWNoYXIKCiAgICAgICAgICA7OyBHZXR0aW5nIHZhbHVlIGZvciBidWxsZXQgY2hhciBpcyBwcmFj dGljYWxseSB0aGUgd2hvbGUgam9iOgoKICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7IFNpbXBsZXN0IHNpdHVhdGlvbiAtIGxldmVsIDE6CiAg ICAgICAgICAgKCg8PSBkZXB0aCAxKSAoc2V0cSBoZWFkZXItbGVhZCAiIikgYWxsb3V0LXByaW1h cnktYnVsbGV0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBTaW1w bGUsIHRvbzogYWxsIGFzdGVyaXNrczoKICAgICAgICAgICAoYWxsb3V0LW9sZC1zdHlsZS1wcmVm aXhlcwogICAgICAgICAgICA7OyBDaGVhdCAtIG1ha2UgYm9keSB0aGUgd2hvbGUgdGhpbmcsIG51 bGwgb3V0IGhlYWRlci1sZWFkIGFuZAogICAgICAgICAgICA7OyBidWxsZXQtY2hhcjoKICAgICAg ICAgICAgKHNldHEgYm9keSAobWFrZS1zdHJpbmcgZGVwdGgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHN0cmluZy10by1jaGFyIGFsbG91dC1wcmltYXJ5LWJ1bGxldCkpKQog ICAgICAgICAgICAoc2V0cSBoZWFkZXItbGVhZCAiIikKICAgICAgICAgICAgIiIpCgogICAgICAg ICAgIDs7IChOZWl0aGVyIGxldmVsIDEgbm9yIG9sZC1zdHlsZSwgc28gd2UncmUgc3BhY2UgcGFk ZGluZy4KICAgICAgICAgICA7OyBTbmVhayBpdCBpbiB0aGUgY29uZGl0aW9uIG9mIHRoZSBuZXh0 IGNhc2UsIHdoYXRldmVyIGl0IGlzLikKCiAgICAgICAgICAgOzsgU29saWNpdGF0aW9uIG92ZXJy aWRlcyBudW1iZXJpbmcgYW5kIG90aGVyIGNhc2VzOgogICAgICAgICAgICgocHJvZ24gKHNldHEg Ym9keSAobWFrZS1zdHJpbmcgKC0gZGVwdGggMikgP1wgKSkKICAgICAgICAgICAgICAgICAgIDs7 IFRoZSBhY3R1YWwgY29uZGl0aW9uOgogICAgICAgICAgICAgICAgICAgc29saWNpdCkKICAgICAg ICAgICAgKGxldCogKChnb3QgKGFsbG91dC1zb2xpY2l0LWFsdGVybmF0ZS1idWxsZXQgZGVwdGgg c29saWNpdCkpKQogICAgICAgICAgICAgIDs7IEdvdHRhIGNoZWNrIHdoZXRoZXIgd2UncmUgbnVt YmVyaW5nIGFuZCBnb3QgYSBudW1iZXJlZCBidWxsZXQ6CiAgICAgICAgICAgICAgKHNldHEgbnVt YmVyaW5nIChhbmQgYWxsb3V0LW51bWJlcmVkLWJ1bGxldAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChub3QgKGFuZCBudW1iZXItY29udHJvbCAobm90IGluZGV4KSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZz0gZ290IGFsbG91dC1udW1iZXJl ZC1idWxsZXQpKSkKICAgICAgICAgICAgICA7OyBOb3cgcmV0dXJuIHdoYXQgd2UgZ290LCByZWdh cmRsZXNzOgogICAgICAgICAgICAgIGdvdCkpCgogICAgICAgICAgIDs7IE51bWJlcmluZyBpbnZv a2VkIHRocm91Z2ggYXJnczoKICAgICAgICAgICAoKGFuZCBhbGxvdXQtbnVtYmVyZWQtYnVsbGV0 IG51bWJlci1jb250cm9sKQogICAgICAgICAgICAoaWYgKHNldHEgbnVtYmVyaW5nIChub3QgKHNl dHEgZGVudW1iZXJpbmcgKG5vdCBpbmRleCkpKSkKICAgICAgICAgICAgICAgIGFsbG91dC1udW1i ZXJlZC1idWxsZXQKICAgICAgICAgICAgICAoaWYgKGFuZCBwcmlvci1idWxsZXQKICAgICAgICAg ICAgICAgICAgICAgICAobm90IChzdHJpbmc9IGFsbG91dC1udW1iZXJlZC1idWxsZXQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yLWJ1bGxldCkpKQogICAgICAgICAg ICAgICAgICBwcmlvci1idWxsZXQKICAgICAgICAgICAgICAgIChhbGxvdXQtYnVsbGV0LWZvci1k ZXB0aCBkZXB0aCkpKSkKCiAgICAgICAgICA7OzsgTmVpdGhlciBzb2xpY2l0aW5nIG5vciBjb250 cm9sbGVkIG51bWJlcmluZyA7OzsKICAgICAgICAgICAgIDs7OyAobWF5IGJlIGNvbnRyb2xsZWQg ZGVudW1iZXJpbmcsIHRobykgOzs7CgogICAgICAgICAgIDs7IENoZWNrIHdydCBwcmV2aW91cyBz aWJsaW5nOgogICAgICAgICAgICgoYW5kIG5ldwkJCQkgIDsgb25seSBjaGVjayBmb3IgbmV3IHBy ZWZpeGVzCiAgICAgICAgICAgICAgICAgKDw9IGRlcHRoIChhbGxvdXQtZGVwdGgpKQogICAgICAg ICAgICAgICAgIGFsbG91dC1udW1iZXJlZC1idWxsZXQJICAgICAgOyAuLi4gJiBudW1iZXJpbmcg ZW5hYmxlZAogICAgICAgICAgICAgICAgIChub3QgZGVudW1iZXJpbmcpCiAgICAgICAgICAgICAg ICAgKGxldCAoKHNpYmxpbmctYnVsbGV0CiAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlLWV4 Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgIDs7IExvY2F0ZSBjb3JyZWN0IHNpYmxp bmc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yICg+PSBkZXB0aCAoYWxsb3V0LWRlcHRo KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1hc2NlbmQtdG8tZGVwdGgg ZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZ2V0LWJ1bGxldCkpKSkK ICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIHNpYmxpbmctYnVsbGV0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nPSBhbGxvdXQtbnVtYmVyZWQtYnVsbGV0IHNpYmxpbmctYnVs bGV0KSkKICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBudW1iZXJpbmcgc2libGluZy1idWxs ZXQpKSkpKQoKICAgICAgICAgICA7OyBEaXN0aW5jdGl2ZSBwcmlvciBidWxsZXQ/CiAgICAgICAg ICAgKChhbmQgcHJpb3ItYnVsbGV0CiAgICAgICAgICAgICAgICAgKGFsbG91dC1kaXN0aW5jdGl2 ZS1idWxsZXQgcHJpb3ItYnVsbGV0KQogICAgICAgICAgICAgICAgIDs7IEVpdGhlciBub24tbnVt YmVyZWQ6CiAgICAgICAgICAgICAgICAgKG9yIChub3QgKGFuZCBhbGxvdXQtbnVtYmVyZWQtYnVs bGV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nPSBwcmlvci1idWxsZXQg YWxsb3V0LW51bWJlcmVkLWJ1bGxldCkpKQogICAgICAgICAgICAgICAgICAgICA7OyBvciBudW1i ZXJlZCwgYW5kIG5vdCBkZW51bWJlcmluZzoKICAgICAgICAgICAgICAgICAgICAgKHNldHEgbnVt YmVyaW5nIChub3QgZGVudW1iZXJpbmcpKSkKICAgICAgICAgICAgICAgICA7OyBIZXJlICd0aXM6 CiAgICAgICAgICAgICAgICAgcHJpb3ItYnVsbGV0KSkKCiAgICAgICAgICAgOzsgRWxzZSwgc3Rh bmRhcmQgYnVsbGV0IHBlciBkZXB0aDoKICAgICAgICAgICAoKGFsbG91dC1idWxsZXQtZm9yLWRl cHRoIGRlcHRoKSkpKSkKCiAgICAoY29uY2F0IGhlYWRlci1sZWFkCiAgICAgICAgICAgIGJvZHkK ICAgICAgICAgICAgYnVsbGV0LWNoYXIKICAgICAgICAgICAgKGlmIG51bWJlcmluZwogICAgICAg ICAgICAgICAgKGZvcm1hdCAiJWQiIChjb25kICgoYW5kIGluZGV4IChudW1iZXJwIGluZGV4KSkg aW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldyAoMSsgKGFsbG91 dC1zaWJsaW5nLWluZGV4IGRlcHRoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKChhbGxvdXQtc2libGluZy1pbmRleCkpKSkpKQogICAgKQogICkKOzs7XyAgID4gYWxsb3V0 LW9wZW4tdG9waWMgKHJlbGF0aXZlLWRlcHRoICZvcHRpb25hbCBiZWZvcmUgb2ZmZXItcmVjZW50 LWJ1bGxldCkKKGRlZnVuIGFsbG91dC1vcGVuLXRvcGljIChyZWxhdGl2ZS1kZXB0aCAmb3B0aW9u YWwgYmVmb3JlIG9mZmVyLXJlY2VudC1idWxsZXQpCiAgIk9wZW4gYSBuZXcgdG9waWMgYXQgZGVw dGggREVQVEguCgpOZXcgdG9waWMgaXMgc2l0dWF0ZWQgYWZ0ZXIgY3VycmVudCBvbmUsIHVubGVz cyBvcHRpb25hbCBmbGFnIEJFRk9SRQppcyBub24tbmlsLCBvciB1bmxlc3MgY3VycmVudCBsaW5l IGlzIGNvbXBsZXRlbHkgZW1wdHkgLSBsYWNraW5nIGV2ZW4Kd2hpdGVzcGFjZSAtIGluIHdoaWNo IGNhc2Ugb3BlbiBpcyBkb25lIG9uIHRoZSBjdXJyZW50IGxpbmUuCgpXaGVuIGFkZGluZyBhbiBv ZmZzcHJpbmcsIGl0IHdpbGwgYmUgYWRkZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHBhcmVudCBp Zgp0aGUgb3RoZXIgb2Zmc3ByaW5nIGFyZSBleHBvc2VkLCBvciBhZnRlciB0aGUgbGFzdCBjaGls ZCBpZiB0aGUgb2Zmc3ByaW5nCmFyZSBoaWRkZW4uICBcKFRoZSBpbnRlcnZlbmluZyBvZmZzcHJp bmcgd2lsbCBiZSBleHBvc2VkIGluIHRoZSBsYXR0ZXIKY2FzZS4pCgpJZiBPRkZFUi1SRUNFTlQt QlVMTEVUIGlzIHRydWUsIG9mZmVyIHRvIHVzZSB0aGUgYnVsbGV0IG9mIHRoZSBwcmlvciBzaWJs aW5nLgoKUnVucyAKCk51YW5jZXM6CgotIENyZWF0aW9uIG9mIG5ldyB0b3BpY3MgaXMgd2l0aCBy ZXNwZWN0IHRvIHRoZSB2aXNpYmxlIHRvcGljCiAgY29udGFpbmluZyB0aGUgY3Vyc29yLCByZWdh cmRsZXNzIG9mIGludGVydmVuaW5nIGNvbmNlYWxlZCBvbmVzLgoKLSBOZXcgaGVhZGVycyBhcmUg Z2VuZXJhbGx5IGNyZWF0ZWQgYWZ0ZXIvYmVmb3JlIHRoZSBib2R5IG9mIGEKICB0b3BpYy4gIEhv d2V2ZXIsIHRoZXkgYXJlIGNyZWF0ZWQgcmlnaHQgYXQgY3Vyc29yIGxvY2F0aW9uIGlmIHRoZQog IGN1cnNvciBpcyBvbiBhIGJsYW5rIGxpbmUsIGV2ZW4gaWYgdGhhdCBicmVha3MgdGhlIGN1cnJl bnQgdG9waWMKICBib2R5LiAgVGhpcyBpcyBpbnRlbnRpb25hbCwgdG8gcHJvdmlkZSBhIHNpbXBs ZSBtZWFucyBmb3IKICBkZWxpYmVyYXRlbHkgZGl2aWRpbmcgdG9waWMgYm9kaWVzLgoKLSBEb3Vi bGUgc3BhY2luZyBvZiB0b3BpYyBsaXN0cyBpcyBwcmVzZXJ2ZWQuICBBbHNvLCB0aGUgZmlyc3QK ICBsZXZlbCB0d28gdG9waWMgaXMgY3JlYXRlZCBkb3VibGUtc3BhY2VkIChhbmQgc28gd291bGQg YmUKICBzdWJzZXF1ZW50IHNpYmxpbmdzLCBpZiB0aGF0J3MgbGVmdCBpbnRhY3QpLiAgT3RoZXJ3 aXNlLAogIHNpbmdsZS1zcGFjaW5nIGlzIHVzZWQuCgotIENyZWF0aW9uIG9mIHNpYmxpbmcgb3Ig bmVzdGVkIHRvcGljcyBpcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvcGljCiAgeW91J3JlIHN0YXJ0 aW5nIGZyb20sIGV2ZW4gd2hlbiBjcmVhdGluZyBiYWNrd2FyZHMuICBUaGlzIHdheSB5b3UKICBj YW4gZWFzaWx5IGNyZWF0ZSBhIHNpYmxpbmcgaW4gZnJvbnQgb2YgdGhlIGN1cnJlbnQgdG9waWMg d2l0aG91dAogIGhhdmluZyB0byBnbyB0byBpdHMgcHJlY2VkaW5nIHNpYmxpbmcsIGFuZCB0aGVu IG9wZW4gZm9yd2FyZAogIGZyb20gdGhlcmUuIgoKICAoYWxsb3V0LWJlZ2lubmluZy1vZi1jdXJy ZW50LWxpbmUpCiAgKGxldCogKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpCiAgICAgICAg IChkZXB0aCAoKyAoYWxsb3V0LWN1cnJlbnQtZGVwdGgpIHJlbGF0aXZlLWRlcHRoKSkKICAgICAg ICAgKG9wZW5pbmctb24tYmxhbmsgKGlmIChsb29raW5nLWF0ICJeXCQiKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG5vdCAoc2V0cSBiZWZvcmUgbmlsKSkpKQogICAgICAgICA7OyBi dW5jaCBvIHZhcnMgc2V0IHdoaWxlIGNvbXB1dGluZyByZWYtdG9waWMKICAgICAgICAgb3Blbmlu Zy1udW1iZXJlZAogICAgICAgICByZWYtZGVwdGgKICAgICAgICAgcmVmLWJ1bGxldAogICAgICAg ICAocmVmLXRvcGljIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICAgKGNvbmQg KCg8IHJlbGF0aXZlLWRlcHRoIDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91 dC1hc2NlbmQtdG8tZGVwdGggZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg+ PSByZWxhdGl2ZS1kZXB0aCAxKSBuaWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCAo YWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5nKSkpCiAgICAgICAgICAgICAgICAgICAgICAo c2V0cSByZWYtZGVwdGggYWxsb3V0LXJlY2VudC1kZXB0aCkKICAgICAgICAgICAgICAgICAgICAg IChzZXRxIHJlZi1idWxsZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoPiBhbGxv dXQtcmVjZW50LXByZWZpeC1lbmQgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YWxsb3V0LXJlY2VudC1idWxsZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKSkK ICAgICAgICAgICAgICAgICAgICAgIChzZXRxIG9wZW5pbmctbnVtYmVyZWQKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoYW5kIGFsbG91dC1udW1iZXJlZC1idWxsZXQKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAob3IgKDw9IHJlbGF0aXZlLWRlcHRoIDApCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZGVzY2VuZC10by1kZXB0aCBkZXB0aCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChhbGxvdXQtbnVtYmVyZWQtdHlwZS1w cmVmaXgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1udW1i ZXJlZC1idWxsZXQpKSkpCiAgICAgICAgICAgICAgICAgICAgICAocG9pbnQpKSkKICAgICAgICAg ZGJsLXNwYWNlCiAgICAgICAgIGRvaW5nLWJlZ2lubmluZwogICAgICAgICBzdGFydCBlbmQpCgog ICAgKGlmIChub3Qgb3BlbmluZy1vbi1ibGFuaykKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgUG9zaXRpb25pbmcgYW5kIHZlcnRpY2FsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7IHBhZGRpbmcgLSBvbmx5IGlmIG5vdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBvcGVuaW5nLW9uLWJsYW5rOgogICAgICAg IChwcm9nbgogICAgICAgICAgKGdvdG8tY2hhciByZWYtdG9waWMpCiAgICAgICAgICAoc2V0cSBk Ymwtc3BhY2UgICAgICAgICAgICAgICA7IERldGVybWluZSBkb3VibGUgc3BhY2UgYWN0aW9uOgog ICAgICAgICAgICAgICAgKG9yIChhbmQgKDw9IHJlbGF0aXZlLWRlcHRoIDApCTsgbm90IGRlc2Nl bmRpbmc7CiAgICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAg ICAgICAgICAgICAgICAgICAgOzsgYXQgYi1vLWIgb3IgcHJlY2VkZWQgYnkgYSBibGFuayBsaW5l PwogICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKD4gMCAoZm9yd2FyZC1saW5lIC0xKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb29raW5nLWF0ICJeXFxzLSokIikKCQkJ ICAgICAgIChib2JwKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24K ICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgc3VjY2VlZGVkIGJ5IGEgYmxhbmsgbGluZT8K ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVl KQogICAgICAgICAgICAgICAgICAgICAgICAgICAobG9va2luZy1hdCAiXG5cbiIpKSkKICAgICAg ICAgICAgICAgICAgICAoYW5kICg9IHJlZi1kZXB0aCAxKQogICAgICAgICAgICAgICAgICAgICAg ICAgKG9yIGJlZm9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICg9IGRlcHRoIDEpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7OyBEb24ndCBhbHJlYWR5IGhhdmUgZm9sbG93aW5nCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7OyB2ZXJ0aWNhbCBwYWRkaW5nOgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG5vdCAoYWxsb3V0LXByZS1uZXh0LXByZWZpeCkpKSkpKSkKCiAg ICAgICAgICA7OyBQb3NpdGlvbiB0byBwcmlvciBoZWFkaW5nLCBpZiBpbnNlcnRpbmcgYmFja3dh cmRzLCBhbmQgbm90CiAgICAgICAgICA7OyBnb2luZyBvdXR3YXJkczoKICAgICAgICAgIChpZiAo YW5kIGJlZm9yZSAoPj0gcmVsYXRpdmUtZGVwdGggMCkpCgkgICAgICAocHJvZ24gKGFsbG91dC1i YWNrLXRvLWN1cnJlbnQtaGVhZGluZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRx IGRvaW5nLWJlZ2lubmluZyAoYm9icCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYg KG5vdCAoYm9icCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1wcmV2 aW91cy1oZWFkaW5nKSkpCgkgICAgKGlmIChhbmQgYmVmb3JlIChib2JwKSkKCQkob3Blbi1saW5l IDEpKSkKCiAgICAgICAgICAoaWYgKDw9IHJlbGF0aXZlLWRlcHRoIDApCiAgICAgICAgICAgICAg OzsgTm90IGdvaW5nIGlud2FyZHMsIGRvbid0IHNudWcgdXA6CiAgICAgICAgICAgICAgKGlmIGRv aW5nLWJlZ2lubmluZwogICAgICAgICAgICAgICAgICAoaWYgKG5vdCBkYmwtc3BhY2UpCiAgICAg ICAgICAgICAgICAgICAgICAob3Blbi1saW5lIDEpCiAgICAgICAgICAgICAgICAgICAgKG9wZW4t bGluZSAyKSkKCQkoaWYgYmVmb3JlCgkJICAgIChwcm9nbiAoZW5kLW9mLWxpbmUpCgkJCSAgIChh bGxvdXQtcHJlLW5leHQtcHJlZml4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAod2hpbGUg KGFuZCAoPSA/XG4gKGZvbGxvd2luZy1jaGFyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGZvcndhcmQtY2hhciAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChhbGxvdXQtaGlkZGVuLXApKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoZm9yd2FyZC1jaGFyIDEpKQoJCQkgICAoaWYgKG5vdCAobG9va2luZy1hdCAiXiQiKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuLWxpbmUgMSkpKQoJCSAgKGFsbG91 dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVlKQogICAgICAgICAgICAgICAgICAoaWYgKGxvb2tpbmct YXQgIlxuXG4iKSAoZm9yd2FyZC1jaGFyIDEpKSkpCiAgICAgICAgICAgIDs7IEdvaW5nIGlud2Fy ZHMgLSBkb3VibGUtc3BhY2UgaWYgZmlyc3Qgb2Zmc3ByaW5nIGlzCiAgICAgICAgICAgIDs7IGRv dWJsZS1zcGFjZWQsIG90aGVyd2lzZSBzbnVnIHVwLgogICAgICAgICAgICAoYWxsb3V0LWVuZC1v Zi1lbnRyeSkKICAgICAgICAgICAgKGlmIChlb2JwKQogICAgICAgICAgICAgICAgKG5ld2xpbmUg MSkKICAgICAgICAgICAgICAobGluZS1tb3ZlIDEpKQogICAgICAgICAgICAoYWxsb3V0LWJlZ2lu bmluZy1vZi1jdXJyZW50LWxpbmUpCiAgICAgICAgICAgIChiYWNrd2FyZC1jaGFyIDEpCiAgICAg ICAgICAgIChpZiAoYm9scCkKICAgICAgICAgICAgICAgIDs7IEJsYW5rIGxpbmVzIGJldHdlZW4g Y3VycmVudCBoZWFkZXIgYm9keSBhbmQgbmV4dAogICAgICAgICAgICAgICAgOzsgaGVhZGVyIC0g Z2V0IHRvIGxhc3Qgc3Vic3RhbnRpdmUgKG5vbi13aGl0ZS1zcGFjZSkKICAgICAgICAgICAgICAg IDs7IGxpbmUgaW4gYm9keToKICAgICAgICAgICAgICAgIChwcm9nbiAoc2V0cSBkYmwtc3BhY2Ug dCkKICAgICAgICAgICAgICAgICAgICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICJbXiBcdFxuXSIg bmlsIHQpKSkKICAgICAgICAgICAgKGlmIChsb29raW5nLWF0ICJcblxuIikKICAgICAgICAgICAg ICAgIChzZXRxIGRibC1zcGFjZSB0KSkKICAgICAgICAgICAgKGlmIChzYXZlLWV4Y3Vyc2lvbgog ICAgICAgICAgICAgICAgICAoYWxsb3V0LW5leHQtaGVhZGluZykKICAgICAgICAgICAgICAgICAg KHdoZW4gKD4gYWxsb3V0LXJlY2VudC1kZXB0aCByZWYtZGVwdGgpCiAgICAgICAgICAgICAgICAg ICAgOzsgVGhpcyBpcyBhbiBvZmZzcHJpbmcuCiAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQt bGluZSAtMSkKICAgICAgICAgICAgICAgICAgICAobG9va2luZy1hdCAiXlxccy0qJCIpKSkKICAg ICAgICAgICAgICAgIChwcm9nbiAoZm9yd2FyZC1saW5lIDEpCiAgICAgICAgICAgICAgICAgICAg ICAgKG9wZW4tbGluZSAxKQogICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkp KQogICAgICAgICAgICAoYWxsb3V0LWVuZC1vZi1jdXJyZW50LWxpbmUpKQoKICAgICAgICAgIDs7 KGlmIGRvaW5nLWJlZ2lubmluZyAoZ290by1jaGFyIGRvaW5nLWJlZ2lubmluZykpCiAgICAgICAg ICAoaWYgKG5vdCAoYm9icCkpCiAgICAgICAgICAgICAgOzsgV2UgaW5zZXJ0IGEgbmV3bGluZSBj aGFyIHJhdGhlciB0aGFuIHVzaW5nIG9wZW4tbGluZSB0bwogICAgICAgICAgICAgIDs7IGF2b2lk IHJlYXItc3RpY2tpbmVzcyBpbmhlcml0ZW5jZSBvZiByZWFkLW9ubHkgcHJvcGVydHkuCiAgICAg ICAgICAgICAgKHByb2duIChpZiAoYW5kIChub3QgKD4gZGVwdGggcmVmLWRlcHRoKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCBiZWZvcmUpKQogICAgICAgICAgICAgICAgICAg ICAgICAgKG9wZW4tbGluZSAxKQoJCSAgICAgICAoaWYgKGFuZCAobm90IGRibC1zcGFjZSkgKD4g ZGVwdGggcmVmLWRlcHRoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld2xpbmUgMSkK CQkJIChpZiBkYmwtc3BhY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Blbi1saW5l IDEpCgkJCSAgIChpZiAobm90IGJlZm9yZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChuZXdsaW5lIDEpKSkpKQogICAgICAgICAgICAgICAgICAgICAoaWYgKGFuZCBkYmwtc3BhY2Ug KG5vdCAoPiByZWxhdGl2ZS1kZXB0aCAwKSkpCgkJCSAobmV3bGluZSAxKSkKICAgICAgICAgICAg ICAgICAgICAgKGlmIChhbmQgKG5vdCAoZW9icCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChvciAobm90IChib2xwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChh bmQgKG5vdCAoYm9icCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7 IGJvbHAgZG9lc250IGRldGVjdCBjb25jZWFsZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOzsgdHJhaWxpbmcgbmV3bGluZXMsIGNvbXBlbnNhdGU6CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgLTEpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1oaWRkZW4tcCkpKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1jaGFyIDEpKSkpCiAgICAgICAgICApKQogICAg KHNldHEgc3RhcnQgKHBvaW50KSkKICAgIChpbnNlcnQgKGNvbmNhdCAoYWxsb3V0LW1ha2UtdG9w aWMtcHJlZml4IG9wZW5pbmctbnVtYmVyZWQgdCBkZXB0aCkKICAgICAgICAgICAgICAgICAgICAi ICIpKQogICAgKHNldHEgZW5kICgxKyAocG9pbnQpKSkKCiAgICAoYWxsb3V0LXJlYnVsbGV0LWhl YWRpbmcgKGFuZCBvZmZlci1yZWNlbnQtYnVsbGV0IHJlZi1idWxsZXQpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlcHRoIG5pbCBuaWwgdCkKICAgIChpZiAoPiByZWxhdGl2ZS1kZXB0 aCAwKQogICAgICAgIChzYXZlLWV4Y3Vyc2lvbiAoZ290by1jaGFyIHJlZi10b3BpYykKICAgICAg ICAgICAgICAgICAgICAgICAgKGFsbG91dC1zaG93LWNoaWxkcmVuKSkpCiAgICAoZW5kLW9mLWxp bmUpCgogICAgKHJ1bi1ob29rLXdpdGgtYXJncyAnYWxsb3V0LXN0cnVjdHVyZS1hZGRlZC1ob29r IHN0YXJ0IGVuZCkKICAgICkKICApCjs7O18gICA+IGFsbG91dC1vcGVuLXN1YnRvcGljIChhcmcp CihkZWZ1biBhbGxvdXQtb3Blbi1zdWJ0b3BpYyAoYXJnKQogICJPcGVuIG5ldyB0b3BpYyBoZWFk ZXIgYXQgZGVlcGVyIGxldmVsIHRoYW4gdGhlIGN1cnJlbnQgb25lLgoKTmVnYXRpdmUgdW5pdmVy c2FsIGFyZyBtZWFucyB0byBvcGVuIGRlZXBlciwgYnV0IHBsYWNlIHRoZSBuZXcgdG9waWMKcHJp b3IgdG8gdGhlIGN1cnJlbnQgb25lLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChhbGxvdXQtb3Bl bi10b3BpYyAxICg+IDAgYXJnKSAoPCAxIGFyZykpKQo7OztfICAgPiBhbGxvdXQtb3Blbi1zaWJ0 b3BpYyAoYXJnKQooZGVmdW4gYWxsb3V0LW9wZW4tc2lidG9waWMgKGFyZykKICAiT3BlbiBuZXcg dG9waWMgaGVhZGVyIGF0IHNhbWUgbGV2ZWwgYXMgdGhlIGN1cnJlbnQgb25lLgoKUG9zaXRpdmUg dW5pdmVyc2FsIGFyZyBtZWFucyB0byB1c2UgdGhlIGJ1bGxldCBvZiB0aGUgcHJpb3Igc2libGlu Zy4KCk5lZ2F0aXZlIHVuaXZlcnNhbCBhcmcgbWVhbnMgdG8gcGxhY2UgdGhlIG5ldyB0b3BpYyBw cmlvciB0byB0aGUgY3VycmVudApvbmUuIgogIChpbnRlcmFjdGl2ZSAicCIpCiAgKGFsbG91dC1v cGVuLXRvcGljIDAgKD4gMCBhcmcpIChub3QgKD0gMSBhcmcpKSkpCjs7O18gICA+IGFsbG91dC1v cGVuLXN1cGVydG9waWMgKGFyZykKKGRlZnVuIGFsbG91dC1vcGVuLXN1cGVydG9waWMgKGFyZykK ICAiT3BlbiBuZXcgdG9waWMgaGVhZGVyIGF0IHNoYWxsb3dlciBsZXZlbCB0aGFuIHRoZSBjdXJy ZW50IG9uZS4KCk5lZ2F0aXZlIHVuaXZlcnNhbCBhcmcgbWVhbnMgdG8gb3BlbiBzaGFsbG93ZXIs IGJ1dCBwbGFjZSB0aGUgbmV3CnRvcGljIHByaW9yIHRvIHRoZSBjdXJyZW50IG9uZS4iCgogIChp bnRlcmFjdGl2ZSAicCIpCiAgKGFsbG91dC1vcGVuLXRvcGljIC0xICg+IDAgYXJnKSAoPCAxIGFy ZykpKQoKOzs7XyAgLSBPdXRsaW5lIEFsdGVyYXRpb24KOzs7XyAgIDogVG9waWMgTW9kaWZpY2F0 aW9uCjs7O18gICAgPSBhbGxvdXQtZm9ybWVyLWF1dG8tZmlsbGVyCihkZWZ2YXIgYWxsb3V0LWZv cm1lci1hdXRvLWZpbGxlciBuaWwKICAiTmFtZSBvZiBtb2RhbCBmaWxsIGZ1bmN0aW9uIGJlaW5n IHdyYXBwZWQgYnkgYGFsbG91dC1hdXRvLWZpbGwnLiIpCjs7O18gICAgPiBhbGxvdXQtYXV0by1m aWxsICgpCihkZWZ1biBhbGxvdXQtYXV0by1maWxsICgpCiAgImBhbGxvdXQtbW9kZScgYXV0b2Zp bGwgZnVuY3Rpb24uCgpNYWludGFpbnMgb3V0bGluZSBoYW5naW5nIHRvcGljIGluZGVudGF0aW9u IGlmCmBhbGxvdXQtdXNlLWhhbmdpbmctaW5kZW50cycgaXMgc2V0LiIKCiAgKHdoZW4gKG5vdCBh bGxvdXQtaW5oaWJpdC1hdXRvLWZpbGwpCiAgICAobGV0ICgoZmlsbC1wcmVmaXggKGlmIGFsbG91 dC11c2UtaGFuZ2luZy1pbmRlbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IENoZWNr IGZvciB0b3BpYyBoZWFkZXIgaW5kZW50YXRpb246CiAgICAgICAgICAgICAgICAgICAgICAgICAg IChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiZWdpbm5pbmct b2YtbGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGxvb2tpbmctYXQgYWxs b3V0LXJlZ2V4cCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgLi4uIGNvbnN0 cnVjdCBpbmRlbnRhdGlvbiB0byBhY2NvdW50IGZvcgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7OyBsZW5ndGggb2YgdG9waWMgcHJlZml4OgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobWFrZS1zdHJpbmcgKHByb2duIChhbGxvdXQtZW5kLW9mLXByZWZpeCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVu dC1jb2x1bW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg P1wgKSkpKSkKICAgICAgICAgICh1c2UtYXV0by1maWxsLWZ1bmN0aW9uIChvciBhbGxvdXQtb3V0 c2lkZS1ub3JtYWwtYXV0by1maWxsLWZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXV0by1maWxsLWZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2RvLWF1dG8tZmlsbCkpKQogICAgICAoaWYgKG9yIGFsbG91dC1mb3JtZXIt YXV0by1maWxsZXIgYWxsb3V0LXVzZS1oYW5naW5nLWluZGVudHMpCiAgICAgICAgICAoZnVuY2Fs bCB1c2UtYXV0by1maWxsLWZ1bmN0aW9uKSkpKSkKOzs7XyAgICA+IGFsbG91dC1yZWluZGVudC1i b2R5IChvbGQtZGVwdGggbmV3LWRlcHRoICZvcHRpb25hbCBudW1iZXIpCihkZWZ1biBhbGxvdXQt cmVpbmRlbnQtYm9keSAob2xkLWRlcHRoIG5ldy1kZXB0aCAmb3B0aW9uYWwgbnVtYmVyKQogICJS ZWluZGVudCBib2R5IGxpbmVzIHdoaWNoIHdlcmUgaW5kZW50ZWQgYXQgT0xELURFUFRIIHRvIE5F Vy1ERVBUSC4KCk9wdGlvbmFsIGFyZyBOVU1CRVIgaW5kaWNhdGVzIG51bWJlcmluZyBpcyBiZWlu ZyBhZGRlZCwgYW5kIGl0IG11c3QKYmUgYWNjb21tb2RhdGVkLgoKTm90ZSB0aGF0IHJlZmlsbCBv ZiBpbmRlbnRlZCBwYXJhZ3JhcGhzIGlzIG5vdCBkb25lLiIKCiAgKHNhdmUtZXhjdXJzaW9uCiAg ICAoYWxsb3V0LWVuZC1vZi1wcmVmaXgpCiAgICAobGV0KiAoKG5ldy1tYXJnaW4gKGN1cnJlbnQt Y29sdW1uKSkKCSAgIGV4Y2VzcyBvbGQtaW5kZW50LWJlZ2luIG9sZC1pbmRlbnQtZW5kCgkgICA7 OyBXZSB3YW50IHRoZSBjb2x1bW4gd2hlcmUgdGhlIGhlYWRlci1wcmVmaXggdGV4dCBzdGFydGVk CgkgICA7OyAqYmVmb3JlKiB0aGUgcHJlZml4IHdhcyBjaGFuZ2VkLCBzbyB3ZSBpbmZlciBpdCBy ZWxhdGl2ZQoJICAgOzsgdG8gdGhlIG5ldyBtYXJnaW4gYW5kIHRoZSBzaGlmdCBpbiBkZXB0aDoK CSAgIChvbGQtbWFyZ2luICgrIG9sZC1kZXB0aCAoLSBuZXctbWFyZ2luIG5ldy1kZXB0aCkpKSkK CiAgICAgIDs7IFByb2Nlc3MgbGluZXMgdXAgdG8gKGJ1dCBleGNsdWRpbmcpIG5leHQgdG9waWMg aGVhZGVyOgogICAgICAoYWxsb3V0LXVucHJvdGVjdGVkCiAgICAgICAoc2F2ZS1tYXRjaC1kYXRh CiAgICAgICAgICh3aGlsZQoJICAgICAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCAiXG5cXChcXHMt KlxcKSIKCQkJCSAgICAgbmlsCgkJCQkgICAgIHQpCgkJICA7OyBSZWdpc3RlciB0aGUgaW5kZW50 IGRhdGEsIGJlZm9yZSB3ZSByZXNldCB0aGUKCQkgIDs7IG1hdGNoIGRhdGEgd2l0aCBhIHN1YnNl cXVlbnQgYGxvb2tpbmctYXQnOgoJCSAgKHNldHEgb2xkLWluZGVudC1iZWdpbiAobWF0Y2gtYmVn aW5uaW5nIDEpCgkJCW9sZC1pbmRlbnQtZW5kIChtYXRjaC1lbmQgMSkpCgkJICAobm90IChsb29r aW5nLWF0IGFsbG91dC1yZWdleHApKSkKCSAgIChpZiAoPiAwIChzZXRxIGV4Y2VzcyAoLSAoLSBv bGQtaW5kZW50LWVuZCBvbGQtaW5kZW50LWJlZ2luKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvbGQtbWFyZ2luKSkpCgkgICAgICAgOzsgVGV4dCBzdGFydHMgbGVmdCBvZiBv bGQgbWFyZ2luIC0gZG9uJ3QgYWRqdXN0OgoJICAgICAgIG5pbAoJICAgICA7OyBUZXh0IHdhcyBo YW5naW5nIGF0IG9yIHJpZ2h0IG9mIG9sZCBsZWZ0IG1hcmdpbiAtCgkgICAgIDs7IHJlaW5kZW50 IGl0LCBwcmVzZXJ2aW5nIGl0cyBleGlzdGluZyBpbmRlbnRhdGlvbgoJICAgICA7OyBiZXlvbmQg dGhlIG9sZCBtYXJnaW46CgkgICAgIChkZWxldGUtcmVnaW9uIG9sZC1pbmRlbnQtYmVnaW4gb2xk LWluZGVudC1lbmQpCiAgICAgICAgICAgICAoaW5kZW50LXRvICgrIG5ldy1tYXJnaW4gZXhjZXNz IChjdXJyZW50LWNvbHVtbikpKSkpKSkpKSkKOzs7XyAgICA+IGFsbG91dC1yZWJ1bGxldC1jdXJy ZW50LWhlYWRpbmcgKGFyZykKKGRlZnVuIGFsbG91dC1yZWJ1bGxldC1jdXJyZW50LWhlYWRpbmcg KGFyZykKICAiU29saWNpdCBuZXcgYnVsbGV0IGZvciBjdXJyZW50IHZpc2libGUgaGVhZGluZy4i CiAgKGludGVyYWN0aXZlICJwIikKICAobGV0ICgoaW5pdGlhbC1jb2wgKGN1cnJlbnQtY29sdW1u KSkKCShvbi1idWxsZXQgKGVxIChwb2ludCkoYWxsb3V0LWN1cnJlbnQtYnVsbGV0LXBvcykpKQog ICAgICAgIGZyb20gdG8KCShiYWNrd2FyZHMgKGlmICg8IGFyZyAwKQoJCSAgICAgICAoc2V0cSBh cmcgKCogYXJnIC0xKSkpKSkKICAgICh3aGlsZSAoPiBhcmcgMCkKICAgICAgKHNhdmUtZXhjdXJz aW9uIChhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRpbmcpCgkJICAgICAgKGFsbG91dC1lbmQt b2YtcHJlZml4KQogICAgICAgICAgICAgICAgICAgICAgKHNldHEgZnJvbSBhbGxvdXQtcmVjZW50 LXByZWZpeC1iZWdpbm5pbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFsbG91dC1y ZWNlbnQtcHJlZml4LWVuZCkKCQkgICAgICAoYWxsb3V0LXJlYnVsbGV0LWhlYWRpbmcgdAk7Ozsg c29saWNpdAoJCQkJCQluaWwJOzs7IGRlcHRoCgkJCQkJCW5pbAk7OzsgbnVtYmVyLWNvbnRyb2wK CQkJCQkJbmlsCTs7OyBpbmRleAoJCQkJCQl0KQk7OzsgZG8tc3VjY2Vzc29ycwogICAgICAgICAg ICAgICAgICAgICAgKHJ1bi1ob29rLXdpdGgtYXJncyAnYWxsb3V0LWV4cG9zdXJlLWNoYW5nZS1o b29rCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdG8gdCkp CiAgICAgIChzZXRxIGFyZyAoMS0gYXJnKSkKICAgICAgKGlmICg8PSBhcmcgMCkKCSAgbmlsCgko c2V0cSBpbml0aWFsLWNvbCBuaWwpCQk7IE92ZXJyaWRlIHBvc2l0aW9uaW5nIGJhY2sgdG8gaW5p dCBjb2wKCShpZiAobm90IGJhY2t3YXJkcykKCSAgICAoYWxsb3V0LW5leHQtdmlzaWJsZS1oZWFk aW5nIDEpCgkgIChhbGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tlZCkKCSAgKGFsbG91dC1u ZXh0LXZpc2libGUtaGVhZGluZyAtMSkpKSkKICAgIChtZXNzYWdlICJEb25lLiIpCiAgICAoY29u ZCAob24tYnVsbGV0IChnb3RvLWNoYXIgKGFsbG91dC1jdXJyZW50LWJ1bGxldC1wb3MpKSkKCSAg KGluaXRpYWwtY29sIChtb3ZlLXRvLWNvbHVtbiBpbml0aWFsLWNvbCkpKSkpCjs7O18gICAgPiBh bGxvdXQtcmVidWxsZXQtaGVhZGluZyAoJm9wdGlvbmFsIHNvbGljaXQgLi4uKQooZGVmdW4gYWxs b3V0LXJlYnVsbGV0LWhlYWRpbmcgKCZvcHRpb25hbCBzb2xpY2l0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXctZGVwdGgKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG51bWJlci1jb250cm9sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG8tc3VjY2Vzc29ycykKCiAgIkFkanVzdCBidWxsZXQgb2YgY3VycmVu dCB0b3BpYyBwcmVmaXguCgpBbGwgYXJncyBhcmUgb3B0aW9uYWwuCgpJZiBTT0xJQ0lUIGlzIG5v bi1uaWwsIHRoZW4gdGhlIGNob2ljZSBvZiBidWxsZXQgaXMgc29saWNpdGVkIGZyb20KdXNlci4g IElmIGl0J3MgYSBjaGFyYWN0ZXIsIHRoZW4gdGhhdCBjaGFyYWN0ZXIgaXMgb2ZmZXJlZCBhcyB0 aGUKZGVmYXVsdCwgb3RoZXJ3aXNlIHRoZSBvbmUgc3VpdGVkIHRvIHRoZSBjb250ZXh0IFwoYWNj b3JkaW5nIHRvCmRpc3RpbmN0aW9uIG9yIGRlcHRoKSBpcyBvZmZlcmVkLiAgSWYgbm9uLW5pbCwg dGhlbiB0aGUKY29udGV4dC1zcGVjaWZpYyBidWxsZXQgaXMganVzdCB1c2VkLgoKU2Vjb25kIGFy ZyBERVBUSCBmb3JjZXMgdGhlIHRvcGljIHByZWZpeCB0byB0aGF0IGRlcHRoLCByZWdhcmRsZXNz Cm9mIHRoZSB0b3BpYydzIGN1cnJlbnQgZGVwdGguCgpUaGlyZCBhcmcgTlVNQkVSLUNPTlRST0wg Y2FuIGZvcmNlIHRoZSBwcmVmaXggdG8gb3IgYXdheSBmcm9tCm51bWJlcmVkIGZvcm0uICBJdCBo YXMgZWZmZWN0IG9ubHkgaWYgYGFsbG91dC1udW1iZXJlZC1idWxsZXQnIGlzCm5vbi1uaWwgYW5k IHNvbGljaXRpbmcgd2FzIG5vdCBleHBsaWNpdGx5IGludm9rZWQgKHZpYSBmaXJzdCBhcmcpLgpJ dHMgZWZmZWN0LCBudW1iZXJpbmcgb3IgZGVudW1iZXJpbmcsIHRoZW4gZGVwZW5kcyBvbiB0aGUg c2V0dGluZwpvZiB0aGUgZm9ydGggYXJnLCBJTkRFWC4KCklmIE5VTUJFUi1DT05UUk9MIGlzIG5v bi1uaWwgYW5kIGZvcnRoIGFyZyBJTkRFWCBpcyBuaWwsIHRoZW4gdGhlCnByZWZpeCBvZiB0aGUg dG9waWMgaXMgZm9yY2VkIHRvIGJlIG5vbi1udW1iZXJlZC4gIE51bGwgaW5kZXggYW5kCm5vbi1u aWwgTlVNQkVSLUNPTlRST0wgZm9yY2VzIGRlbnVtYmVyaW5nLiAgTm9uLW5pbCBJTkRFWCAoYW5k Cm5vbi1uaWwgTlVNQkVSLUNPTlRST0wpIGZvcmNlcyBhIG51bWJlcmVkLXByZWZpeCBmb3JtLiAg SWYgbm9uLW5pbApJTkRFWCBpcyBhIG51bWJlciwgdGhlbiB0aGF0IG51bWJlciBpcyB1c2VkIGZv ciB0aGUgbnVtYmVyZWQKcHJlZml4LiAgTm9uLW5pbCBhbmQgbm9uLW51bWJlciBtZWFucyB0aGF0 IHRoZSBpbmRleCBmb3IgdGhlCm51bWJlcmVkIHByZWZpeCB3aWxsIGJlIGRlcml2ZWQgYnkgYWxs b3V0LW1ha2UtdG9waWMtcHJlZml4LgoKRmlmdGggYXJnIERPLVNVQ0NFU1NPUlMgdCBtZWFucyBy ZS1yZXNvbHZlIGNvdW50IG9uIHN1Y2NlZWRpbmcKc2libGluZ3MuCgpDZiB2YXJzIGBhbGxvdXQt c3R5bGlzaC1wcmVmaXhlcycsIGBhbGxvdXQtb2xkLXN0eWxlLXByZWZpeGVzJywKYW5kIGBhbGxv dXQtbnVtYmVyZWQtYnVsbGV0Jywgd2hpY2ggYWxsIGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YKdGhp cyBmdW5jdGlvbi4iCgogIChsZXQqICgoY3VycmVudC1kZXB0aCAoYWxsb3V0LWRlcHRoKSkKICAg ICAgICAgKG5ldy1kZXB0aCAob3IgbmV3LWRlcHRoIGN1cnJlbnQtZGVwdGgpKQogICAgICAgICAo bWIgYWxsb3V0LXJlY2VudC1wcmVmaXgtYmVnaW5uaW5nKQogICAgICAgICAobWUgYWxsb3V0LXJl Y2VudC1wcmVmaXgtZW5kKQogICAgICAgICAoY3VycmVudC1idWxsZXQgKGJ1ZmZlci1zdWJzdHJp bmctbm8tcHJvcGVydGllcyAoLSBtZSAxKSBtZSkpCiAgICAgICAgIChoYXMtYW5ub3RhdGlvbiAo Z2V0LXRleHQtcHJvcGVydHkgbWIgJ2FsbG91dC13YXMtaGlkZGVuKSkKICAgICAgICAgKG5ldy1w cmVmaXggKGFsbG91dC1tYWtlLXRvcGljLXByZWZpeCBjdXJyZW50LWJ1bGxldAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3LWRlcHRoCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbGljaXQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyLWNvbnRyb2wKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpKSkKCiAgICA7OyBJ cyBuZXcgb25lIGlzIGlkZW50aWNhbCB0byBvbGQ/CiAgICAoaWYgKGFuZCAoPSBjdXJyZW50LWRl cHRoIG5ldy1kZXB0aCkKICAgICAgICAgICAgIChzdHJpbmc9IGN1cnJlbnQtYnVsbGV0CiAgICAg ICAgICAgICAgICAgICAgICAoc3Vic3RyaW5nIG5ldy1wcmVmaXggKDEtIChsZW5ndGggbmV3LXBy ZWZpeCkpKSkpCgk7OyBOb3RoaW5nIHRvIGRvOgogICAgICAgIHQKCiAgICAgIDs7IE5ldyBwcmVm aXggcHJvYmFibHkgZGlmZmVyZW50IGZyb20gb2xkOgoJCQkJCTsgZ2V0IHJpZCBvZiBvbGQgb25l OgogICAgICAoYWxsb3V0LXVucHJvdGVjdGVkIChkZWxldGUtcmVnaW9uIG1iIG1lKSkKICAgICAg KGdvdG8tY2hhciBtYikKCQkJCQk7IERpc3BlbnNlIHdpdGggbnVtYmVyIGlmCgkJCQkJOyBudW1i ZXJlZC1idWxsZXQgcHJlZml4OgogICAgICAoaWYgKGFuZCBhbGxvdXQtbnVtYmVyZWQtYnVsbGV0 CiAgICAgICAgICAgICAgIChzdHJpbmc9IGFsbG91dC1udW1iZXJlZC1idWxsZXQgY3VycmVudC1i dWxsZXQpCiAgICAgICAgICAgICAgIChsb29raW5nLWF0ICJbMC05XSsiKSkKCSAgKGFsbG91dC11 bnByb3RlY3RlZAoJICAgKGRlbGV0ZS1yZWdpb24gKG1hdGNoLWJlZ2lubmluZyAwKShtYXRjaC1l bmQgMCkpKSkKCiAgICAgIDs7IGNvbnZleSAnYWxsb3V0LXdhcy1oaWRkZW4gYW5ub3RhdGlvbiwg aWYgb3JpZ2luYWwgaGFkIGl0OgogICAgICAoaWYgaGFzLWFubm90YXRpb24KICAgICAgICAgIChw dXQtdGV4dC1wcm9wZXJ0eSAwIChsZW5ndGggbmV3LXByZWZpeCkgJ2FsbG91dC13YXMtaGlkZGVu IHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXctcHJlZml4KSkKCgkJCQkJOyBQdXQg aW4gbmV3IHByZWZpeDoKICAgICAgKGFsbG91dC11bnByb3RlY3RlZCAoaW5zZXJ0IG5ldy1wcmVm aXgpKQoKICAgICAgOzsgUmVpbmRlbnQgdGhlIGJvZHkgaWYgZWxlY3RlZCwgbWFyZ2luIGNoYW5n ZWQsIGFuZCBub3QgZW5jcnlwdGVkIGJvZHk6CiAgICAgIChpZiAoYW5kIGFsbG91dC1yZWluZGVu dC1ib2RpZXMKCSAgICAgICAobm90ICg9IG5ldy1kZXB0aCBjdXJyZW50LWRlcHRoKSkKICAgICAg ICAgICAgICAgKG5vdCAoYWxsb3V0LWVuY3J5cHRlZC10b3BpYy1wKSkpCgkgIChhbGxvdXQtcmVp bmRlbnQtYm9keSBjdXJyZW50LWRlcHRoIG5ldy1kZXB0aCkpCgogICAgICA7OyBSZWN1cnNpdmVs eSByZWN0aWZ5IHN1Y2Nlc3NpdmUgc2libGluZ3Mgb2Ygb3JpZyB0b3BpYyBpZgogICAgICA7OyBj YWxsZXIgZWxlY3RlZCBmb3IgaXQ6CiAgICAgIChpZiBkby1zdWNjZXNzb3JzCgkgIChzYXZlLWV4 Y3Vyc2lvbgoJICAgICh3aGlsZSAoYWxsb3V0LW5leHQtc2libGluZyBuZXctZGVwdGggbmlsKQoJ ICAgICAgKHNldHEgaW5kZXgKCQkgICAgKGNvbmQgKChudW1iZXJwIGluZGV4KSAoMSsgaW5kZXgp KQoJCQkgICgobm90IG51bWJlci1jb250cm9sKSAgKGFsbG91dC1zaWJsaW5nLWluZGV4KSkpKQoJ ICAgICAgKGlmIChhbGxvdXQtbnVtYmVyZWQtdHlwZS1wcmVmaXgpCgkJICAoYWxsb3V0LXJlYnVs bGV0LWhlYWRpbmcgbmlsCQk7Ozsgc29saWNpdAoJCQkJCSAgICBuZXctZGVwdGgJOzs7IG5ldy1k ZXB0aAoJCQkJCSAgICBudW1iZXItY29udHJvbDs7OyBudW1iZXItY29udHJvbAoJCQkJCSAgICBp bmRleAk7OzsgaW5kZXgKCQkJCQkgICAgbmlsKSkpKSkJOzs7KGRvbnQhKWRvLXN1Y2Nlc3NvcnMK ICAgICAgKQk7IChpZiAoYW5kICg9IGN1cnJlbnQtZGVwdGggbmV3LWRlcHRoKS4uLikpCiAgICAp IDsgbGV0KiAoKGN1cnJlbnQtZGVwdGggKGFsbG91dC1kZXB0aCkpLi4uKQogICkgOyBkZWZ1bgo7 OztfICAgID4gYWxsb3V0LXJlYnVsbGV0LXRvcGljIChhcmcpCihkZWZ1biBhbGxvdXQtcmVidWxs ZXQtdG9waWMgKGFyZyAmb3B0aW9uYWwgc2Fucy1vZmZzcHJpbmcpCiAgIlJlYnVsbGV0IHRoZSB2 aXNpYmxlIHRvcGljIGNvbnRhaW5pbmcgcG9pbnQgYW5kIGFsbCBjb250YWluZWQgc3VidG9waWNz LgoKRGVzY2VuZHMgaW50byBpbnZpc2libGUgYXMgd2VsbCBhcyB2aXNpYmxlIHRvcGljcywgaG93 ZXZlci4KCldoZW4gb3B0aW9uYWwgc2Fucy1vZmZzcHJpbmcgaXMgbm9uLW5pbCwgc3VidG9waWNz IGFyZSBub3QKc2hpZnRlZC4gIFwoU2hpZnRpbmcgYSB0b3BpYyBvdXR3YXJkcyB3aXRob3V0IHNo aWZ0aW5nIGl0cwpvZmZzcHJpbmcgaXMgZGlzYWxsb3dlZCwgc2luY2UgdGhpcyB3b3VsZCBjcmVh dGUgYSBcImNvbnRhaW5tZW50CmRpc2NvbnRpbnVpdHlcIiwgd2hlcmUgdGhlIGRlcHRoIGRpZmZl cmVuY2UgYmV0d2VlbiBhIHRvcGljIGFuZAppdHMgaW1tZWRpYXRlIG9mZnNwcmluZyBpcyBncmVh dGVyIHRoYW4gb25lLikKCldpdGggcmVwZWF0IGNvdW50LCBzaGlmdCB0b3BpYyBkZXB0aCBieSB0 aGF0IGFtb3VudC4iCiAgKGludGVyYWN0aXZlICJQIikKICAobGV0ICgoc3RhcnQtY29sIChjdXJy ZW50LWNvbHVtbikpKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIDs7IE5vcm1hbGl6ZSBhcmc6 CiAgICAgIChjb25kICgobnVsbCBhcmcpIChzZXRxIGFyZyAwKSkKICAgICAgICAgICAgKChsaXN0 cCBhcmcpIChzZXRxIGFyZyAoY2FyIGFyZykpKSkKICAgICAgOzsgRmlsbCB0aGUgdXNlciBpbiwg aW4gY2FzZSB3ZSdyZSBzaGlmdGluZyBhIGJpZyB0b3BpYzoKICAgICAgKGlmIChub3QgKHplcm9w IGFyZykpIChtZXNzYWdlICJTaGlmdGluZy4uLiIpKQogICAgICAoYWxsb3V0LWJhY2stdG8tY3Vy cmVudC1oZWFkaW5nKQogICAgICAoaWYgKDw9ICgrIGFsbG91dC1yZWNlbnQtZGVwdGggYXJnKSAw KQogICAgICAgICAgKGVycm9yICJBdHRlbXB0IHRvIHNoaWZ0IHRvcGljIGJlbG93IGxldmVsIDEi KSkKICAgICAgKGFsbG91dC1yZWJ1bGxldC10b3BpYy1ncnVudCBhcmcgbmlsIG5pbCBuaWwgbmls IHNhbnMtb2Zmc3ByaW5nKQogICAgICAoaWYgKG5vdCAoemVyb3AgYXJnKSkgKG1lc3NhZ2UgIlNo aWZ0aW5nLi4uIGRvbmUuIikpKQogICAgKG1vdmUtdG8tY29sdW1uIChtYXggMCAoKyBzdGFydC1j b2wgYXJnKSkpKSkKOzs7XyAgICA+IGFsbG91dC1yZWJ1bGxldC10b3BpYy1ncnVudCAoJm9wdGlv bmFsIHJlbGF0aXZlLWRlcHRoIC4uLikKKGRlZnVuIGFsbG91dC1yZWJ1bGxldC10b3BpYy1ncnVu dCAoJm9wdGlvbmFsIHJlbGF0aXZlLWRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RhcnRpbmctZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZy1wb2ludAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZG8tc3VjY2Vzc29ycwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbnMtb2Zmc3ByaW5nKQogICJMaWtlIGBhbGxv dXQtcmVidWxsZXQtdG9waWMnLCBidXQgb24gbmVhcmVzdCBjb250YWluaW5nIHRvcGljClwodmlz aWJsZSBvciBub3QpLgoKU2VlIGBhbGxvdXQtcmVidWxsZXQtaGVhZGluZycgZm9yIHJlYnVsbGV0 aW5nIGJlaGF2aW9yLgoKQWxsIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwuCgpGaXJzdCBhcmcgUkVM QVRJVkUtREVQVEggbWVhbnMgdG8gc2hpZnQgdGhlIGRlcHRoIG9mIHRoZSBlbnRpcmUKdG9waWMg dGhhdCBhbW91bnQuCgpTZXZlcmFsIHN1YnNlcXVlbnQgYXJncyBhcmUgZm9yIGludGVybmFsIHJl Y3Vyc2l2ZSB1c2UgYnkgdGhlIGZ1bmN0aW9uCml0c2VsZjogU1RBUlRJTkctREVQVEgsIFNUQVJU SU5HLVBPSU5ULCBhbmQgSU5ERVguCgpGaW5hbGx5LCBpZiBvcHRpb25hbCBTQU5TLU9GRlNQUklO RyBpcyBub24tbmlsIHRoZW4gdGhlIG9mZnNwcmluZwphcmUgbm90IHNoaWZ0ZWQuICBcKFNoaWZ0 aW5nIGEgdG9waWMgb3V0d2FyZHMgd2l0aG91dCBzaGlmdGluZwppdHMgb2Zmc3ByaW5nIGlzIGRp c2FsbG93ZWQsIHNpbmNlIHRoaXMgd291bGQgY3JlYXRlIGEKXCJjb250YWlubWVudCBkaXNjb250 aW51aXR5XCIsIHdoZXJlIHRoZSBkZXB0aCBkaWZmZXJlbmNlIGJldHdlZW4KYSB0b3BpYyBhbmQg aXRzIGltbWVkaWF0ZSBvZmZzcHJpbmcgaXMgZ3JlYXRlciB0aGFuIG9uZS4uKSIKCiAgOzsgWFhY IHRoZSByZWN1cnNpb24gaGVyZSBpcyBwZWN1bGlhciwgYW5kIGluIGdlbmVyYWwgdGhlIHJvdXRp bmUgbWF5CiAgOzsgbmVlZCBzaW1wbGlmaWNhdGlvbiB3aXRoIHJlZmFjdG9yaW5nLgoKICAoaWYg KGFuZCBzYW5zLW9mZnNwcmluZwogICAgICAgICAgIHJlbGF0aXZlLWRlcHRoCiAgICAgICAgICAg KDwgcmVsYXRpdmUtZGVwdGggMCkpCiAgICAgIChlcnJvciAoY29uY2F0ICJBdHRlbXB0IHRvIHNo aWZ0IHRvcGljIG91dHdhcmRzIHdpdGhvdXQgb2Zmc3ByaW5nLCIKICAgICAgICAgICAgICAgICAg ICAgIiB3b3VsZCBjYXVzZSBjb250YWlubWVudCBkaXNjb250aW51aXR5LiIpKSkKCiAgKGxldCog KChyZWxhdGl2ZS1kZXB0aCAob3IgcmVsYXRpdmUtZGVwdGggMCkpCiAgICAgICAgIChuZXctZGVw dGggKGFsbG91dC1kZXB0aCkpCiAgICAgICAgIChzdGFydGluZy1kZXB0aCAob3Igc3RhcnRpbmct ZGVwdGggbmV3LWRlcHRoKSkKICAgICAgICAgKG9uLXN0YXJ0aW5nLWNhbGwgIChudWxsIHN0YXJ0 aW5nLXBvaW50KSkKICAgICAgICAgKGluZGV4IChvciBpbmRleAogICAgICAgICAgICAgICAgICAg IDs7IExlYXZlIGluZGV4IG51bGwgb24gc3RhcnRpbmcgY2FsbCwgc28gcmVidWxsZXQtaGVhZGlu ZwogICAgICAgICAgICAgICAgICAgIDs7IGNhbGN1bGF0ZXMgaXQgYXQgd2hhdCBtaWdodCBiZSBu ZXcgZGVwdGg6CiAgICAgICAgICAgICAgICAgICAgKGFuZCAob3IgKHplcm9wIHJlbGF0aXZlLWRl cHRoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3Qgb24tc3RhcnRpbmctY2FsbCkp CiAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LXNpYmxpbmctaW5kZXgpKSkpCiAgICAg ICAgIChzdGFydGluZy1pbmRleCBpbmRleCkKICAgICAgICAgKG1vdmluZy1vdXR3YXJkcyAoPCAw IHJlbGF0aXZlLWRlcHRoKSkKICAgICAgICAgKHN0YXJ0aW5nLXBvaW50IChvciBzdGFydGluZy1w b2ludCAocG9pbnQpKSkKICAgICAgICAgKGxvY2FsLXBvaW50IChwb2ludCkpKQoKICAgIDs7IFNh bml0eSBjaGVjayBmb3IgZXhjZXNzaXZlIHByb21vdGlvbiBkb25lIG9ubHkgb24gc3RhcnRpbmcg Y2FsbDoKICAgIChhbmQgb24tc3RhcnRpbmctY2FsbAogICAgICAgICBtb3Zpbmctb3V0d2FyZHMK ICAgICAgICAgKD4gMCAoKyBzdGFydGluZy1kZXB0aCByZWxhdGl2ZS1kZXB0aCkpCiAgICAgICAg IChlcnJvciAiQXR0ZW1wdCB0byBzaGlmdCB0b3BpYyBvdXQgYmV5b25kIGxldmVsIDEiKSkKCiAg ICAoY29uZCAoKD0gc3RhcnRpbmctZGVwdGggbmV3LWRlcHRoKQogICAgICAgICAgIDs7IFdlJ3Jl IGF0IGRlcHRoIHRvIHdvcmsgb24gdGhpcyBvbmUuCgogICAgICAgICAgIDs7IFdoZW4gc2hpZnRp bmcgb3V0IHdlIHdvcmsgb24gdGhlIGNoaWxkcmVuIGJlZm9yZSB3b3JraW5nIG9uCiAgICAgICAg ICAgOzsgdGhlIHBhcmVudCB0byBhdm9pZCBpbnRlcmltIGBhbGxvdXQtYWJlcnJhbnQtY29udGFp bmVyLXAnCiAgICAgICAgICAgOzsgYWJlcnJhbmN5LCBhbmQgdmljZS12ZXJzYSB3aGVuIHNoaWZ0 aW5nIGluOgogICAgICAgICAgIChpZiAoPj0gcmVsYXRpdmUtZGVwdGggMCkKICAgICAgICAgICAg ICAgKGFsbG91dC1yZWJ1bGxldC1oZWFkaW5nIG5pbAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCsgc3RhcnRpbmctZGVwdGggcmVsYXRpdmUtZGVwdGgpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwJCTs7OyBudW1iZXIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuaWwpKSA7OzsgZG8tc3VjY2Vzc29ycwogICAgICAgICAgICh3 aGVuIChub3Qgc2Fucy1vZmZzcHJpbmcpCiAgICAgICAgICAgICA7OyAuLi4gYW5kIHdvcmsgb24g c3Vic2VxdWVudCBvbmVzIHdoaWNoIGFyZSBhdCBncmVhdGVyIGRlcHRoOgogICAgICAgICAgICAg KHNldHEgaW5kZXggMCkKICAgICAgICAgICAgIChhbGxvdXQtbmV4dC1oZWFkaW5nKQogICAgICAg ICAgICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAo PCBzdGFydGluZy1kZXB0aCAoYWxsb3V0LWRlcHRoKSkpCiAgICAgICAgICAgICAgIChzZXRxIGlu ZGV4ICgxKyBpbmRleCkpCiAgICAgICAgICAgICAgIChhbGxvdXQtcmVidWxsZXQtdG9waWMtZ3J1 bnQgcmVsYXRpdmUtZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMSsgc3RhcnRpbmctZGVwdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RhcnRpbmctcG9pbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbmRleCkpKQogICAgICAgICAgICh3aGVuICg8IHJlbGF0aXZlLWRlcHRo IDApCiAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgKGdvdG8tY2hh ciBsb2NhbC1wb2ludCkKICAgICAgICAgICAgICAgKGFsbG91dC1yZWJ1bGxldC1oZWFkaW5nIG5p bCAgICAgICAgICAgICAgIDs7OyBzb2xpY2l0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKyBzdGFydGluZy1kZXB0aCByZWxhdGl2ZS1kZXB0aCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbAkJOzs7IG51bWJlcgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmctaW5kZXgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCkpKSkgOzs7IGRvLXN1Y2Nlc3NvcnMKCiAgICAg ICAgICAoKDwgc3RhcnRpbmctZGVwdGggbmV3LWRlcHRoKQogICAgICAgICAgIDs7IFJhcmUgY2Fz ZSAtIHN1YnRvcGljIG1vcmUgdGhhbiBvbmUgbGV2ZWwgZGVlcGVyIHRoYW4gcGFyZW50LgogICAg ICAgICAgIDs7IFRyZWF0IHRoaXMgb25lIGF0IGFuIGV2ZW4gZGVlcGVyIGxldmVsOgogICAgICAg ICAgIChhbGxvdXQtcmVidWxsZXQtdG9waWMtZ3J1bnQgcmVsYXRpdmUtZGVwdGgKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXctZGVwdGgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZy1wb2ludAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2Fucy1vZmZzcHJpbmcpKSkKCiAgICAoaWYgb24tc3RhcnRpbmctY2Fs bAogICAgICAgIChwcm9nbgogICAgICAgICAgOzsgUmVjdGlmeSBudW1iZXJpbmcgb2YgZm9ybWVy IHNpYmxpbmdzIG9mIHRoZSBhZGp1c3RlZCB0b3BpYywKICAgICAgICAgIDs7IGlmIHRvcGljIGhh cyBjaGFuZ2VkIGRlcHRoCiAgICAgICAgICAoaWYgKG9yIGRvLXN1Y2Nlc3NvcnMKICAgICAgICAg ICAgICAgICAgKGFuZCAobm90ICh6ZXJvcCByZWxhdGl2ZS1kZXB0aCkpCiAgICAgICAgICAgICAg ICAgICAgICAgKG9yICg9IGFsbG91dC1yZWNlbnQtZGVwdGggc3RhcnRpbmctZGVwdGgpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICg9IGFsbG91dC1yZWNlbnQtZGVwdGggKCsgc3RhcnRpbmct ZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWxhdGl2ZS1kZXB0aCkpKSkpCiAgICAgICAgICAgICAgKGFsbG91dC1yZWJ1bGxldC1o ZWFkaW5nIG5pbCBuaWwgbmlsIG5pbCB0KSkKICAgICAgICAgIDs7IE5vdyByZWN0aWZ5IG51bWJl cmluZyBvZiBuZXcgc2libGluZ3Mgb2YgdGhlIGFkanVzdGVkIHRvcGljLAogICAgICAgICAgOzsg aWYgZGVwdGggaGFzIGJlZW4gY2hhbmdlZDoKICAgICAgICAgIChwcm9nbiAoZ290by1jaGFyIHN0 YXJ0aW5nLXBvaW50KQogICAgICAgICAgICAgICAgIChpZiAobm90ICh6ZXJvcCByZWxhdGl2ZS1k ZXB0aCkpCiAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtcmVidWxsZXQtaGVhZGluZyBuaWwg bmlsIG5pbCBuaWwgdCkpKSkpCiAgICApCiAgKQo7OztfICAgID4gYWxsb3V0LXJlbnVtYmVyLXRv LWRlcHRoICgmb3B0aW9uYWwgZGVwdGgpCihkZWZ1biBhbGxvdXQtcmVudW1iZXItdG8tZGVwdGgg KCZvcHRpb25hbCBkZXB0aCkKICAiUmVudW1iZXIgc2libGluZ3MgYXQgY3VycmVudCBkZXB0aC4K CkFmZmVjdHMgc3VwZXJpb3IgdG9waWNzIGlmIG9wdGlvbmFsIGFyZyBERVBUSCBpcyBsZXNzIHRo YW4gY3VycmVudCBkZXB0aC4KClJldHVybnMgZmluYWwgZGVwdGguIgoKICA7OyBQcm9jZWVkIGJ5 IGxldmVsLCBwcm9jZXNzaW5nIHN1YnNlcXVlbnQgc2libGluZ3Mgb24gZWFjaCwKICA7OyBhc2Nl bmRpbmcgdW50aWwgd2UgZ2V0IHNoYWxsb3dlciB0aGFuIHRoZSBzdGFydCBkZXB0aDoKCiAgKGxl dCAoKGFzY2VuZGVyIChhbGxvdXQtZGVwdGgpKQoJd2FzLWVvYnApCiAgICAod2hpbGUgKGFuZCAo bm90IChlb2JwKSkKCQkoYWxsb3V0LWRlcHRoKQogICAgICAgICAgICAgICAgKD49IGFsbG91dC1y ZWNlbnQtZGVwdGggZGVwdGgpCiAgICAgICAgICAgICAgICAoPj0gYXNjZW5kZXIgZGVwdGgpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBTa2lwIG92ZXIgYWxsIHRv cGljcyBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBsZXNzZXIg ZGVwdGhzLCB3aGljaCBjYW4gbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7IGhhdmUgYmVlbiBkaXN0dXJiZWQ6CiAgICAgICh3aGlsZSAoYW5kIChub3QgKHNldHEg d2FzLWVvYnAgKGVvYnApKSkKCQkgICg+IGFsbG91dC1yZWNlbnQtZGVwdGggYXNjZW5kZXIpKQog ICAgICAgIChhbGxvdXQtbmV4dC1oZWFkaW5nKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgUHJpbWUgYXNjZW5kZXIgZm9yIGFzY2Vuc2lvbjoKICAgICAgKHNldHEg YXNjZW5kZXIgKDEtIGFsbG91dC1yZWNlbnQtZGVwdGgpKQogICAgICAoaWYgKD49IGFsbG91dC1y ZWNlbnQtZGVwdGggZGVwdGgpCiAgICAgICAgICAoYWxsb3V0LXJlYnVsbGV0LWhlYWRpbmcgbmls CTs7OyBzb2xpY2l0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbAk7Ozsg ZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsCTs7OyBudW1iZXIt Y29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwJOzs7IGluZGV4 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQpKSA7OzsgZG8tc3VjY2Vzc29y cwogICAgICAoaWYgd2FzLWVvYnAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkpKSkKICBhbGxvdXQt cmVjZW50LWRlcHRoKQo7OztfICAgID4gYWxsb3V0LW51bWJlci1zaWJsaW5ncyAoJm9wdGlvbmFs IGRlbnVtYmVyKQooZGVmdW4gYWxsb3V0LW51bWJlci1zaWJsaW5ncyAoJm9wdGlvbmFsIGRlbnVt YmVyKQogICJBc3NpZ24gbnVtYmVyZWQgdG9waWMgcHJlZml4IHRvIHRoaXMgdG9waWMgYW5kIGl0 cyBzaWJsaW5ncy4KCldpdGggdW5pdmVyc2FsIGFyZ3VtZW50LCBkZW51bWJlciAtIGFzc2lnbiBk ZWZhdWx0IGJ1bGxldCB0byB0aGlzCnRvcGljIGFuZCBpdHMgc2libGluZ3MuCgpXaXRoIHJlcGVh dGVkIHVuaXZlcnNhbCBhcmd1bWVudCAoYF5VXlUnKSwgc29saWNpdCBidWxsZXQgZm9yIGVhY2gK cmVidWxsZXRpbmcgZWFjaCB0b3BpYyBhdCB0aGlzIGxldmVsLiIKCiAgKGludGVyYWN0aXZlICJQ IikKCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5n KQogICAgKGFsbG91dC1iZWdpbm5pbmctb2YtbGV2ZWwpCiAgICAobGV0ICgoZGVwdGggYWxsb3V0 LXJlY2VudC1kZXB0aCkKCSAgKGluZGV4IChpZiAobm90IGRlbnVtYmVyKSAxKSkKICAgICAgICAg ICh1c2UtYnVsbGV0IChlcXVhbCAnKDE2KSBkZW51bWJlcikpCiAgICAgICAgICAobW9yZSB0KSkK ICAgICAgKHdoaWxlIG1vcmUKICAgICAgICAoYWxsb3V0LXJlYnVsbGV0LWhlYWRpbmcgdXNlLWJ1 bGxldAkJOzs7IHNvbGljaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRo CQkJOzs7IGRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0CQkJOzs7IG51 bWJlci1jb250cm9sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleAkJCTs7 OyBpbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsKQkJCTs7OyBkby1z dWNjZXNzb3JzCiAgICAgICAgKGlmIGluZGV4IChzZXRxIGluZGV4ICgxKyBpbmRleCkpKQogICAg ICAgIChzZXRxIG1vcmUgKGFsbG91dC1uZXh0LXNpYmxpbmcgZGVwdGggbmlsKSkpKSkpCjs7O18g ICAgPiBhbGxvdXQtc2hpZnQtaW4gKGFyZykKKGRlZnVuIGFsbG91dC1zaGlmdC1pbiAoYXJnKQog ICJJbmNyZWFzZSBkZXB0aCBvZiBjdXJyZW50IGhlYWRpbmcgYW5kIGFueSBpdGVtcyBjb2xsYXBz ZWQgd2l0aGluIGl0LgoKV2l0aCBhIG5lZ2F0aXZlIGFyZ3VtZW50LCB0aGUgaXRlbSBpcyBzaGlm dGVkIG91dCB1c2luZwpgYWxsb3V0LXNoaWZ0LW91dCcsIGluc3RlYWQuCgpXaXRoIGFuIGFyZ3Vt ZW50IGdyZWF0ZXIgdGhhbiBvbmUsIHNoaWZ0LWluIHRoZSBpdGVtIGJ1dCBub3QgaXRzCm9mZnNw cmluZywgbWFraW5nIHRoZSBpdGVtIGludG8gYSBzaWJsaW5nIG9mIGl0cyBmb3JtZXIgY2hpbGRy ZW4sCmFuZCBhIGNoaWxkIG9mIHNpYmxpbmcgdGhhdCBmb3JtZXJseSBwcmVjZWVkZWQgaXQuCgpZ b3UgYXJlIG5vdCBhbGxvd2VkIHRvIHNoaWZ0IHRoZSBmaXJzdCBvZmZzcHJpbmcgb2YgYSB0b3Bp YwppbndhcmRzLCBiZWNhdXNlIHRoYXQgd291bGQgeWllbGQgYSBcImNvbnRhaW5tZW50CmRpc2Nv bnRpbnVpdHlcIiwgd2hlcmUgdGhlIGRlcHRoIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHRvcGljIGFu ZAppdHMgaW1tZWRpYXRlIG9mZnNwcmluZyBpcyBncmVhdGVyIHRoYW4gb25lLiAgVGhlIGZpcnN0 IHRvcGljIGluCnRoZSBmaWxlIGNhbiBiZSBhZGp1c3RlZCB0byBhbnkgcG9zaXRpdmUgZGVwdGgs IGhvd2V2ZXIuIgoKICAoaW50ZXJhY3RpdmUgInAiKQogIChpZiAoPCBhcmcgMCkKICAgICAgKGFs bG91dC1zaGlmdC1vdXQgKCogYXJnIC0xKSkKICAgIDs7IHJlZnVzZSB0byBjcmVhdGUgYSBjb250 YWlubWVudCBkaXNjb250aW51aXR5OgogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChhbGxvdXQt YmFjay10by1jdXJyZW50LWhlYWRpbmcpCiAgICAgIChpZiAobm90IChib2JwKSkKICAgICAgICAg IChsZXQqICgoY3VycmVudC1kZXB0aCBhbGxvdXQtcmVjZW50LWRlcHRoKQogICAgICAgICAgICAg ICAgIChzdGFydC1wb2ludCAocG9pbnQpKQogICAgICAgICAgICAgICAgIChwcmVkZWNlc3Nvci1k ZXB0aCAocHJvZ24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2Fy ZC1jaGFyIC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQt Z290by1wcmVmaXgtZG91YmxlY2hlY2tlZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoaWYgKDwgKHBvaW50KSBzdGFydC1wb2ludCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LXJlY2VudC1kZXB0aAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCkpKSkKICAgICAgICAgICAgKGlmIChhbmQgKD4gcHJl ZGVjZXNzb3ItZGVwdGggMCkKICAgICAgICAgICAgICAgICAgICAgKD4gKDErIGN1cnJlbnQtZGVw dGgpCiAgICAgICAgICAgICAgICAgICAgICAgICgxKyBwcmVkZWNlc3Nvci1kZXB0aCkpKQogICAg ICAgICAgICAgICAgKGVycm9yIChjb25jYXQgIkRpc2FsbG93ZWQgc2hpZnQgZGVlcGVyIHRoYW4i CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNvbnRhaW5pbmcgdG9waWMncyBjaGls ZHJlbi4iKSkpKSkpCiAgICAobGV0ICgod2hlcmUgKHBvaW50KSkpCiAgICAgIChhbGxvdXQtcmVi dWxsZXQtdG9waWMgMSAoYW5kICg+IGFyZyAxKSAnc2Fucy1vZmZzcHJpbmcpKQogICAgICAocnVu LWhvb2std2l0aC1hcmdzICdhbGxvdXQtc3RydWN0dXJlLXNoaWZ0ZWQtaG9vayBhcmcgd2hlcmUp KSkpCjs7O18gICAgPiBhbGxvdXQtc2hpZnQtb3V0IChhcmcpCihkZWZ1biBhbGxvdXQtc2hpZnQt b3V0IChhcmcpCiAgIkRlY3JlYXNlIGRlcHRoIG9mIGN1cnJlbnQgaGVhZGluZyBhbmQgYW55IHRv cGljcyBjb2xsYXBzZWQgd2l0aGluIGl0LgpUaGlzIHdpbGwgbWFrZSB0aGUgaXRlbSBhIHNpYmxp bmcgb2YgaXRzIGZvcm1lciBjb250YWluZXIuCgpXaXRoIGEgbmVnYXRpdmUgYXJndW1lbnQsIHRo ZSBpdGVtIGlzIHNoaWZ0ZWQgaW4gdXNpbmcKYGFsbG91dC1zaGlmdC1pbicsIGluc3RlYWQuCgpX aXRoIGFuIGFyZ3VtZW50IGdyZWF0ZXIgdGhhbiBvbmUsIHNoaWZ0LW91dCB0aGUgaXRlbSdzIG9m ZnNwcmluZwpidXQgbm90IHRoZSBpdGVtIGl0c2VsZiwgbWFraW5nIHRoZSBmb3JtZXIgY2hpbGRy ZW4gc2libGluZ3Mgb2YKdGhlIGl0ZW0uCgpXaXRoIGFuIGFyZ3VtZW50IGdyZWF0ZXIgdGhhbiAx LCB0aGUgaXRlbSdzIG9mZnNwcmluZyBhcmUgc2hpZnRlZApvdXQgd2l0aG91dCBzaGlmdGluZyB0 aGUgaXRlbS4gIFRoaXMgd2lsbCBtYWtlIHRoZSBpbW1lZGlhdGUKc3VidG9waWNzIGludG8gc2li bGluZ3Mgb2YgdGhlIGl0ZW0uIgogIChpbnRlcmFjdGl2ZSAicCIpCiAgKGlmICg8IGFyZyAwKQog ICAgICAoYWxsb3V0LXNoaWZ0LWluICgqIGFyZyAtMSkpCiAgICA7OyBHZXQgcHJvcGVyIGV4cG9z dXJlIGluIHRoaXMgYXJlYToKICAgIChzYXZlLWV4Y3Vyc2lvbiAoaWYgKGFsbG91dC1hc2NlbmQp CiAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtc2hvdy1jaGlsZHJlbikpKQogICAgOzsg U2hvdyBjb2xsYXBzZWQgY2hpbGRyZW4gaWYgdGhlcmUncyBhIHN1Y2Nlc3NvciB3aGljaCB3aWxs IGJlY29tZQogICAgOzsgdGhlaXIgc2libGluZzoKICAgIChpZiAoYW5kIChhbGxvdXQtY3VycmVu dC10b3BpYy1jb2xsYXBzZWQtcCkKICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbiAoYWxsb3V0 LW5leHQtc2libGluZykpKQogICAgICAgIChhbGxvdXQtc2hvdy1jaGlsZHJlbikpCiAgICAobGV0 ICgod2hlcmUgKGFuZCAoYWxsb3V0LWRlcHRoKSBhbGxvdXQtcmVjZW50LXByZWZpeC1iZWdpbm5p bmcpKSkKICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgKGlmICg+IGFyZyAxKQogICAgICAg ICAgICA7OyBTaGlmdCB0aGUgb2Zmc3ByaW5nIGJ1dCBub3QgdGhlIHRvcGljOgogICAgICAgICAg ICAobGV0ICgoY2hpbGRyZW4tY2hhcnQgKGFsbG91dC1jaGFydC1zdWJ0cmVlIDEpKSkKICAgICAg ICAgICAgICAoaWYgKGxpc3RwIChjYXIgY2hpbGRyZW4tY2hhcnQpKQogICAgICAgICAgICAgICAg ICA7OyB3aG9vcHM6CiAgICAgICAgICAgICAgICAgIChzZXRxIGNoaWxkcmVuLWNoYXJ0IChhbGxv dXQtZmxhdHRlbiBjaGlsZHJlbi1jaGFydCkpKQogICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lv bgogICAgICAgICAgICAgICAgKGRvbGlzdCAoY2hpbGQtcG9pbnQgY2hpbGRyZW4tY2hhcnQpCiAg ICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgY2hpbGQtcG9pbnQpCiAgICAgICAgICAgICAgICAg IChhbGxvdXQtc2hpZnQtb3V0IDEpKSkpCiAgICAgICAgICAoYWxsb3V0LXJlYnVsbGV0LXRvcGlj ICgqIGFyZyAtMSkpKSkKICAgICAgKHJ1bi1ob29rLXdpdGgtYXJncyAnYWxsb3V0LXN0cnVjdHVy ZS1zaGlmdGVkLWhvb2sgKCogYXJnIC0xKSB3aGVyZSkpKSkKOzs7XyAgIDogU3VyZ2VyeSAoa2ls bC1yaW5nKSBmdW5jdGlvbnMgd2l0aCBzcGVjaWFsIHByb3Zpc2lvbnMgZm9yIG91dGxpbmVzOgo7 OztfICAgID4gYWxsb3V0LWtpbGwtbGluZSAoJm9wdGlvbmFsIGFyZykKKGRlZnVuIGFsbG91dC1r aWxsLWxpbmUgKCZvcHRpb25hbCBhcmcpCiAgIktpbGwgbGluZSwgYWRqdXN0aW5nIHN1YnNlcXVl bnQgbGluZXMgc3VpdGFibHkgZm9yIG91dGxpbmUgbW9kZS4iCgogIChpbnRlcmFjdGl2ZSAiKlAi KQoKICAoaWYgKG9yIChub3QgKGFsbG91dC1tb2RlLXApKQogICAgICAgICAgKG5vdCAoYm9scCkp CiAgICAgICAgICAobm90IChsb29raW5nLWF0IGFsbG91dC1yZWdleHApKSkKICAgICAgOzsgSnVz dCBkbyBhIHJlZ3VsYXIga2lsbDoKICAgICAgKGtpbGwtbGluZSBhcmcpCiAgICA7OyBBaCwgaGF2 ZSB0byB3YXRjaCBvdXQgZm9yIGFkanVzdG1lbnRzOgogICAgKGxldCogKChiZWcgKHBvaW50KSkK ICAgICAgICAgICBlbmQKICAgICAgICAgICAoYmVnLWhpZGRlbiAoYWxsb3V0LWhpZGRlbi1wKSkK ICAgICAgICAgICAoZW5kLWhpZGRlbiAoc2F2ZS1leGN1cnNpb24gKGFsbG91dC1lbmQtb2YtY3Vy cmVudC1saW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBl bmQgKHBvaW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91 dC1oaWRkZW4tcCkpKQogICAgICAgICAgIChkZXB0aCAoYWxsb3V0LWRlcHRoKSkpCgogICAgICAo YWxsb3V0LWFubm90YXRlLWhpZGRlbiBiZWcgZW5kKQogICAgICAoaWYgKGFuZCAobm90IGJlZy1o aWRkZW4pIChub3QgZW5kLWhpZGRlbikpCiAgICAgICAgICAoYWxsb3V0LXVucHJvdGVjdGVkIChr aWxsLWxpbmUgYXJnKSkKICAgICAgICAoa2lsbC1saW5lIGFyZykpCiAgICAgIChhbGxvdXQtZGVh bm5vdGF0ZS1oaWRkZW4gYmVnIGVuZCkKCiAgICAgIChpZiBhbGxvdXQtbnVtYmVyZWQtYnVsbGV0 CiAgICAgICAgICAoc2F2ZS1leGN1cnNpb24gICAgICAgICAgICAgICA7IFJlbnVtYmVyIHN1YnNl cXVlbnQgdG9waWNzIGlmIG5lZWRlZDoKICAgICAgICAgICAgKGlmIChub3QgKGxvb2tpbmctYXQg YWxsb3V0LXJlZ2V4cCkpCiAgICAgICAgICAgICAgICAoYWxsb3V0LW5leHQtaGVhZGluZykpCiAg ICAgICAgICAgIChhbGxvdXQtcmVudW1iZXItdG8tZGVwdGggZGVwdGgpKSkKICAgICAgKHJ1bi1o b29rLXdpdGgtYXJncyAnYWxsb3V0LXN0cnVjdHVyZS1kZWxldGVkLWhvb2sgZGVwdGggKHBvaW50 KSkpKSkKOzs7XyAgICA+IGFsbG91dC1jb3B5LWxpbmUtYXMta2lsbCAoKQooZGVmdW4gYWxsb3V0 LWNvcHktbGluZS1hcy1raWxsICgpCiAgIkxpa2UgYWxsb3V0LWtpbGwtdG9waWMsIGJ1dCBzYXZl IHRvIGtpbGwgcmluZyBpbnN0ZWFkIG9mIGRlbGV0aW5nLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxl dCAoKGJ1ZmZlci1yZWFkLW9ubHkgdCkpCiAgICAoY29uZGl0aW9uLWNhc2UgbmlsCiAgICAgICAg KGFsbG91dC1raWxsLWxpbmUpCiAgICAgIChidWZmZXItcmVhZC1vbmx5IG5pbCkpKSkKOzs7XyAg ICA+IGFsbG91dC1raWxsLXRvcGljICgpCihkZWZ1biBhbGxvdXQta2lsbC10b3BpYyAoKQogICJL aWxsIHRvcGljIHRvZ2V0aGVyIHdpdGggc3VidG9waWNzLgoKVHJhaWxpbmcgd2hpdGVzcGFjZSBp cyBraWxsZWQgd2l0aCBhIHRvcGljIGlmIHRoYXQgd2hpdGVzcGFjZToKCiAtIHdvdWxkIHNlcGFy YXRlIHRoZSB0b3BpYyBmcm9tIGEgc3Vic2VxdWVudCBzaWJsaW5nCiAtIHdvdWxkIHNlcGFyYXRl IHRoZSB0b3BpYyBmcm9tIHRoZSBlbmQgb2YgYnVmZmVyCiAtIHdvdWxkIG5vdCBiZSBhZGRlZCB0 byB3aGl0ZXNwYWNlIGFscmVhZHkgc2VwYXJhdGluZyB0aGUgdG9waWMgZnJvbSB0aGUKICAgcHJl dmlvdXMgb25lLgoKVG9waWMgZXhwb3N1cmUgaXMgbWFya2VkIHdpdGggdGV4dC1wcm9wZXJ0aWVz LCB0byBiZSB1c2VkIGJ5CmFsbG91dC15YW5rLXByb2Nlc3NpbmcgZm9yIGV4cG9zdXJlIHJlY292 ZXJ5LiIKCiAgKGludGVyYWN0aXZlKQogIChsZXQqICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlv biB0KQogICAgICAgICAoYmVnIChwcm9nMSAoYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5n KSAoYmVnaW5uaW5nLW9mLWxpbmUpKSkKICAgICAgICAgZW5kCiAgICAgICAgIChkZXB0aCBhbGxv dXQtcmVjZW50LWRlcHRoKSkKICAgIChhbGxvdXQtZW5kLW9mLWN1cnJlbnQtc3VidHJlZSkKICAg IChpZiAoYW5kICgvPSAoY3VycmVudC1jb2x1bW4pIDApIChub3QgKGVvYnApKSkKICAgICAgICAo Zm9yd2FyZC1jaGFyIDEpKQogICAgKGlmIChub3QgKGVvYnApKQoJKGlmIChhbmQgKGxvb2tpbmct YXQgIlxuIikKICAgICAgICAgICAgICAgICAob3IgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAg ICAgICAgICAgICAgKG9yIChub3QgKGFsbG91dC1uZXh0LWhlYWRpbmcpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAoPSBkZXB0aCBhbGxvdXQtcmVjZW50LWRlcHRoKSkpCiAgICAgICAgICAg ICAgICAgICAgIChhbmQgKD4gKC0gYmVnIChwb2ludC1taW4pKSAzKQogICAgICAgICAgICAgICAg ICAgICAgICAgIChzdHJpbmc9IChidWZmZXItc3Vic3RyaW5nICgtIGJlZyAyKSBiZWcpICJcblxu IikpKSkKCSAgICAoZm9yd2FyZC1jaGFyIDEpKSkKCiAgICAoYWxsb3V0LWFubm90YXRlLWhpZGRl biBiZWcgKHNldHEgZW5kIChwb2ludCkpKQogICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgKGFs bG91dC11bnByb3RlY3RlZCAoa2lsbC1yZWdpb24gYmVnIGVuZCkpCiAgICAgIChpZiBidWZmZXIt cmVhZC1vbmx5CiAgICAgICAgICA7OyBlZywgZHVyaW5nIGNvcHktYXMta2lsbC4KICAgICAgICAg IChhbGxvdXQtZGVhbm5vdGF0ZS1oaWRkZW4gYmVnIGVuZCkpKQoKICAgIChzYXZlLWV4Y3Vyc2lv bgogICAgICAoYWxsb3V0LXJlbnVtYmVyLXRvLWRlcHRoIGRlcHRoKSkKICAgIChydW4taG9vay13 aXRoLWFyZ3MgJ2FsbG91dC1zdHJ1Y3R1cmUtZGVsZXRlZC1ob29rIGRlcHRoIChwb2ludCkpKSkK Ozs7XyAgICA+IGFsbG91dC1jb3B5LXRvcGljLWFzLWtpbGwgKCkKKGRlZnVuIGFsbG91dC1jb3B5 LXRvcGljLWFzLWtpbGwgKCkKICAiTGlrZSBhbGxvdXQta2lsbC10b3BpYywgYnV0IHNhdmUgdG8g a2lsbCByaW5nIGluc3RlYWQgb2YgZGVsZXRpbmcuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgo YnVmZmVyLXJlYWQtb25seSB0KSkKICAgIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAgICAoYWxs b3V0LWtpbGwtdG9waWMpCiAgICAgIChidWZmZXItcmVhZC1vbmx5IChtZXNzYWdlICJUb3BpYyBj b3BpZWQuLi4iKSkpKSkKOzs7XyAgICA+IGFsbG91dC1hbm5vdGF0ZS1oaWRkZW4gKGJlZ2luIGVu ZCkKKGRlZnVuIGFsbG91dC1hbm5vdGF0ZS1oaWRkZW4gKGJlZ2luIGVuZCkKICAiUXVhbGlmeSB0 ZXh0IHdpdGggcHJvcGVydGllcyB0byBpbmRpY2F0ZSBleHBvc3VyZSBzdGF0dXMuIgoKICAobGV0 ICgod2FzLW1vZGlmaWVkIChidWZmZXItbW9kaWZpZWQtcCkpCiAgICAgICAgKGJ1ZmZlci1yZWFk LW9ubHkgbmlsKSkKICAgIChhbGxvdXQtZGVhbm5vdGF0ZS1oaWRkZW4gYmVnaW4gZW5kKQogICAg KHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgYmVnaW4pCiAgICAgIChsZXQgKGRvbmUg bmV4dCBwcmV2IG92ZXJsYXkpCiAgICAgICAgKHdoaWxlIChub3QgZG9uZSkKICAgICAgICAgIDs7 IGF0IG9yIGFkdmFuY2UgdG8gc3RhcnQgb2YgbmV4dCBoaWRkZW4gcmVnaW9uOgogICAgICAgICAg KGlmIChub3QgKGFsbG91dC1oaWRkZW4tcCkpCiAgICAgICAgICAgICAgKHNldHEgbmV4dAogICAg ICAgICAgICAgICAgICAgIChtYXggKDErIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAobmV4dC1zaW5nbGUtY2hhci1wcm9wZXJ0eS1jaGFuZ2UgKHBvaW50KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnZpc2libGUK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuaWwgZW5kKSkpKQogICAgICAgICAgKGlmIChvciAobm90IG5leHQpIChlcSBwcmV2IG5leHQp KQogICAgICAgICAgICAgIDs7IHN0aWxsIG5vdCBhdCBzdGFydCBvZiBoaWRkZW4gYXJlYSAtIG11 c3Qgbm90IGJlIGFueSBsZWZ0LgogICAgICAgICAgICAgIChzZXRxIGRvbmUgdCkKICAgICAgICAg ICAgKGdvdG8tY2hhciBuZXh0KQogICAgICAgICAgICAoc2V0cSBwcmV2IG5leHQpCiAgICAgICAg ICAgIChpZiAobm90IChhbGxvdXQtaGlkZGVuLXApKQogICAgICAgICAgICAgICAgOzsgc3RpbGwg bm90IGF0IHN0YXJ0IG9mIGhpZGRlbiBhcmVhLgogICAgICAgICAgICAgICAgKHNldHEgZG9uZSB0 KQogICAgICAgICAgICAgIChzZXRxIG92ZXJsYXkgKGFsbG91dC1nZXQtaW52aXNpYmlsaXR5LW92 ZXJsYXkpKQogICAgICAgICAgICAgIChzZXRxIG5leHQgKG92ZXJsYXktZW5kIG92ZXJsYXkpCiAg ICAgICAgICAgICAgICAgICAgcHJldiBuZXh0KQogICAgICAgICAgICAgIDs7IGFkdmFuY2UgdG8g ZW5kIG9mIHRoaXMgaGlkZGVuIGFyZWE6CiAgICAgICAgICAgICAgKHdoZW4gbmV4dAogICAgICAg ICAgICAgICAgKGdvdG8tY2hhciBuZXh0KQogICAgICAgICAgICAgICAgKGFsbG91dC11bnByb3Rl Y3RlZAogICAgICAgICAgICAgICAgIChsZXQgKChidWZmZXItdW5kby1saXN0IHQpKQogICAgICAg ICAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IChvdmVybGF5LXN0YXJ0IG92ZXJsYXkpIG5l eHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxsb3V0LXdhcy1oaWRk ZW4gdCkpKSkpKSkpKQogICAgKHNldC1idWZmZXItbW9kaWZpZWQtcCB3YXMtbW9kaWZpZWQpKSkK Ozs7XyAgICA+IGFsbG91dC1kZWFubm90YXRlLWhpZGRlbiAoYmVnaW4gZW5kKQooZGVmdW4gYWxs b3V0LWRlYW5ub3RhdGUtaGlkZGVuIChiZWdpbiBlbmQpCiAgIlJlbW92ZSBhbGxvdXQgaGlkZGVu LXRleHQgYW5ub3RhdGlvbiBiZXR3ZWVuIEJFR0lOIGFuZCBFTkQuIgoKICAoYWxsb3V0LXVucHJv dGVjdGVkCiAgIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KQogICAgICAgICAoYnVmZmVyLXVu ZG8tbGlzdCB0KSkKICAgICA7KHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgYmVnaW4gZW5kICcoYWxs b3V0LXdhcy1oaWRkZW4gdCkpCiAgICAgKSkpCjs7O18gICAgPiBhbGxvdXQtaGlkZS1ieS1hbm5v dGF0aW9uIChiZWdpbiBlbmQpCihkZWZ1biBhbGxvdXQtaGlkZS1ieS1hbm5vdGF0aW9uIChiZWdp biBlbmQpCiAgIlRyYW5zbGF0ZSB0ZXh0IHByb3BlcnRpZXMgaW5kaWNhdGluZyBleHBvc3VyZSBz dGF0dXMgaW50byBhY3R1YWwgZXhwb3N1cmUuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGdvdG8t Y2hhciBiZWdpbikKICAgIChsZXQgKCh3YXMtbW9kaWZpZWQgKGJ1ZmZlci1tb2RpZmllZC1wKSkK ICAgICAgICAgIGRvbmUgbmV4dCBwcmV2KQogICAgICAod2hpbGUgKG5vdCBkb25lKQogICAgICAg IDs7IGF0IG9yIGFkdmFuY2UgdG8gc3RhcnQgb2YgbmV4dCBhbm5vdGF0aW9uOgogICAgICAgIChp ZiAobm90IChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdhbGxvdXQtd2FzLWhpZGRlbikpCiAg ICAgICAgICAgIChzZXRxIG5leHQgKG5leHQtc2luZ2xlLWNoYXItcHJvcGVydHktY2hhbmdlIChw b2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2FsbG91dC13YXMtaGlkZGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCBlbmQpKSkKICAgICAgICAoaWYgKG9yIChub3Qg bmV4dCkgKGVxIHByZXYgbmV4dCkpCiAgICAgICAgICAgIDs7IG5vIG1vcmUgb3Igbm90IGFkdmFu Y2luZyAtIG11c3Qgbm90IGJlIGFueSBsZWZ0LgogICAgICAgICAgICAoc2V0cSBkb25lIHQpCiAg ICAgICAgICAoZ290by1jaGFyIG5leHQpCiAgICAgICAgICAoc2V0cSBwcmV2IG5leHQpCiAgICAg ICAgICAoaWYgKG5vdCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnYWxsb3V0LXdhcy1oaWRk ZW4pKQogICAgICAgICAgICAgIDs7IHN0aWxsIG5vdCBhdCBzdGFydCBvZiBhbm5vdGF0aW9uLgog ICAgICAgICAgICAgIChzZXRxIGRvbmUgdCkKICAgICAgICAgICAgOzsgYWR2YW5jZSB0byBqdXN0 IGFmdGVyIGVuZCBvZiB0aGlzIGFubm90YXRpb246CiAgICAgICAgICAgIChzZXRxIG5leHQgKG5l eHQtc2luZ2xlLWNoYXItcHJvcGVydHktY2hhbmdlIChwb2ludCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG91dC13YXMtaGlkZGVu CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5pbCBlbmQpKQogICAgICAgICAgICAob3ZlcmxheS1wdXQgKG1ha2Utb3ZlcmxheSBwcmV2IG5l eHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAnY2F0ZWdvcnkgJ2FsbG91dC1leHBvc3VyZS1j YXRlZ29yeSkKICAgICAgICAgICAgKGFsbG91dC1kZWFubm90YXRlLWhpZGRlbiBwcmV2IG5leHQp CiAgICAgICAgICAgIChzZXRxIHByZXYgbmV4dCkKICAgICAgICAgICAgKGlmIG5leHQgKGdvdG8t Y2hhciBuZXh0KSkpKSkKICAgICAgKHNldC1idWZmZXItbW9kaWZpZWQtcCB3YXMtbW9kaWZpZWQp KSkpCjs7O18gICAgPiBhbGxvdXQteWFuay1wcm9jZXNzaW5nICgpCihkZWZ1biBhbGxvdXQteWFu ay1wcm9jZXNzaW5nICgmb3B0aW9uYWwgYXJnKQoKICAiSW5jaWRlbnRhbCBhbGxvdXQtc3BlY2lm aWMgYnVzaW5lc3MgdG8gYmUgZG9uZSBqdXN0IGFmdGVyIHRleHQgeWFua3MuCgpEb2VzIGRlcHRo IGFkanVzdG1lbnQgb2YgeWFua2VkIHRvcGljcywgd2hlbjoKCjEgdGhlIHN0dWZmIGJlaW5nIHlh bmtlZCBzdGFydHMgd2l0aCBhIHZhbGlkIG91dGxpbmUgaGVhZGVyIHByZWZpeCwgYW5kCjIgaXQg aXMgYmVpbmcgeWFua2VkIGF0IHRoZSBlbmQgb2YgYSBsaW5lIHdoaWNoIGNvbnNpc3RzIG9mIG9u bHkgYSB2YWxpZAogICAgIHRvcGljIHByZWZpeC4KCkFsc28sIGFkanVzdHMgbnVtYmVyaW5nIG9m IHN1YnNlcXVlbnQgc2libGluZ3Mgd2hlbiBhcHByb3ByaWF0ZS4KCkRlcHRoIGFkanVzdG1lbnQg YWx0ZXJzIHRoZSBkZXB0aCBvZiBhbGwgdGhlIHRvcGljcyBiZWluZyB5YW5rZWQKdGhlIGFtb3Vu dCBpdCB0YWtlcyB0byBtYWtlIHRoZSBmaXJzdCB0b3BpYyBoYXZlIHRoZSBkZXB0aCBvZiB0aGUK aGVhZGVyIGludG8gd2hpY2ggaXQncyBiZWluZyB5YW5rZWQuCgpUaGUgcG9pbnQgaXMgbGVmdCBp biBmcm9udCBvZiB5YW5rZWQsIGFkanVzdGVkIHRvcGljcywgcmF0aGVyIHRoYW4KYXQgdGhlIGVu ZCAoYW5kIHZpY2UtdmVyc2Egd2l0aCB0aGUgbWFyaykuICBOb24tYWRqdXN0ZWQgeWFua3MsCmhv d2V2ZXIsIGFyZSBsZWZ0IGV4YWN0bHkgbGlrZSBub3JtYWwsIG5vbi1hbGxvdXQtc3BlY2lmaWMg eWFua3MuIgoKICAoaW50ZXJhY3RpdmUgIipQIikKCQkJCQk7IEdldCB0byBiZWdpbm5pbmcsIGxl YXZpbmcKCQkJCQk7IHJlZ2lvbiBhcm91bmQgc3ViamVjdDoKICAoaWYgKDwgKGFsbG91dC1tYXJr LW1hcmtlciB0KSAocG9pbnQpKQogICAgICAoZXhjaGFuZ2UtcG9pbnQtYW5kLW1hcmspKQogIChs ZXQqICgoc3Viai1iZWcgKHBvaW50KSkKICAgICAgICAgKGludG8tYm9sIChib2xwKSkKICAgICAg ICAgKHN1YmotZW5kIChhbGxvdXQtbWFyay1tYXJrZXIgdCkpCiAgICAgICAgIDs7ICdyZXNpdHVh dGUnIGlmIHlhbmtpbmcgYW4gZW50aXJlIHRvcGljIGludG8gdG9waWMgaGVhZGVyOgogICAgICAg ICAocmVzaXR1YXRlIChhbmQgKGxldCAoKGFsbG91dC1pbmhpYml0LWRvdWJsZWNoZWNrIHQpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWUtby1wcmVmaXgtcCkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAobG9va2luZy1hdCBhbGxvdXQtcmVnZXhwKQogICAgICAgICAgICAg ICAgICAgICAgICAgKGFsbG91dC1wcmVmaXgtZGF0YSkpKQogICAgICAgICA7OyBgcmVjdGlmeS1u dW1iZXJpbmcnIGlmIHJlc2l0dWF0aW5nICh3aGVyZSBzZXZlcmFsIHRvcGljcyBtYXkKICAgICAg ICAgOzsgYmUgcmVzaXR1YXRpbmcpIG9yIHlhbmtpbmcgYSB0b3BpYyBpbnRvIGEgdG9waWMgc2xv dCAoYm9sKToKICAgICAgICAgKHJlY3RpZnktbnVtYmVyaW5nIChvciByZXNpdHVhdGUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIGludG8tYm9sIChsb29raW5nLWF0IGFsbG91 dC1yZWdleHApKSkpKQogICAgKGlmIHJlc2l0dWF0ZQogICAgICAgIDs7IFlhbmtpbmcgYSB0b3Bp YyBpbnRvIHRoZSBzdGFydCBvZiBhIHRvcGljIC0gcmVjb25jaWxlIHRvIGZpdDoKICAgICAgICAo bGV0KiAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gdCkKICAgICAgICAgICAgICAgKHByZWZp eC1sZW4gKGlmIChub3QgKG1hdGNoLWVuZCAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAobWF0Y2gtZW5kIDEpIHN1Ymot YmVnKSkpCiAgICAgICAgICAgICAgIChzdWJqLWRlcHRoIGFsbG91dC1yZWNlbnQtZGVwdGgpCiAg ICAgICAgICAgICAgIChwcmVmaXgtYnVsbGV0IChhbGxvdXQtcmVjZW50LWJ1bGxldCkpCiAgICAg ICAgICAgICAgIChhZGp1c3QtdG8tZGVwdGgKICAgICAgICAgICAgICAgIDs7IE5pbCBpZiBhZGp1 c3RtZW50IHVubmVjZXNzYXJ5LCBvdGhlcndpc2UgZGVwdGggdG8gd2hpY2gKICAgICAgICAgICAg ICAgIDs7IGFkanVzdG1lbnQgc2hvdWxkIGJlIG1hZGU6CiAgICAgICAgICAgICAgICAoc2F2ZS1l eGN1cnNpb24KICAgICAgICAgICAgICAgICAgKGFuZCAoZ290by1jaGFyIHN1YmotZW5kKQogICAg ICAgICAgICAgICAgICAgICAgIChlb2xwKQogICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNo YXIgc3Viai1iZWcpCiAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAobG9va2luZy1hdCBhbGxv dXQtcmVnZXhwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG5vdCAoPSAocG9pbnQpIHN1YmotYmVnKSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9va2luZy1hdCBhbGxvdXQtcmVnZXhwKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGFsbG91dC1wcmVmaXgtZGF0YSkpCiAgICAgICAgICAgICAgICAgICAgICAgYWxs b3V0LXJlY2VudC1kZXB0aCkpKQogICAgICAgICAgICAgICAobW9yZSB0KSkKICAgICAgICAgIChz ZXRxIHJlY3RpZnktbnVtYmVyaW5nIGFsbG91dC1udW1iZXJlZC1idWxsZXQpCiAgICAgICAgICAo aWYgYWRqdXN0LXRvLWRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IERvIHRoZSBhZGp1c3RtZW50OgogICAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAg ICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgICAgICAgICAgICAgKG5hcnJvdy10by1yZWdpb24g c3Viai1iZWcgc3Viai1lbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IFRyaW0gb2ZmIGV4Y2Vzc2l2ZSBibGFuawogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyBsaW5lIGF0IGVuZCwgaWYgYW55OgogICAgICAgICAgICAgICAgICAoZ290 by1jaGFyIChwb2ludC1tYXgpKQogICAgICAgICAgICAgICAgICAoaWYgKGxvb2tpbmctYXQgIl4k IikKICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtdW5wcm90ZWN0ZWQgKGRlbGV0ZS1jaGFy IC0xKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFdvcmsgYmFj a3dhcmRzLCB3aXRoIGVhY2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgc2hhbGxvd2VzdCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgc3VjY2Vzc2l2ZWx5IGV4Y2x1ZGluZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgbGFzdCBwcm9jZXNzZWQgdG9waWMgZnJvbQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB0aGUgbmFycm93IHJlZ2lvbjoKICAgICAgICAg ICAgICAgICAgKHdoaWxlIG1vcmUKICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWJhY2stdG8t Y3VycmVudC1oZWFkaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OyBnbyBhcyBoaWdoIGFzIHdlIGNhbiBpbiBlYWNoIGJ1bmNoOgogICAgICAgICAgICAgICAgICAg ICh3aGlsZSAoYWxsb3V0LWFzY2VuZCkpCiAgICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJz aW9uCiAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LXVucHJvdGVjdGVkCiAgICAgICAgICAg ICAgICAgICAgICAgKGFsbG91dC1yZWJ1bGxldC10b3BpYy1ncnVudCAoLSBhZGp1c3QtdG8tZGVw dGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN1YmotZGVwdGgpKSkKICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZGVwdGgpKQogICAg ICAgICAgICAgICAgICAgIChpZiAoc2V0cSBtb3JlIChub3QgKGJvYnApKSkKICAgICAgICAgICAg ICAgICAgICAgICAgKHByb2duICh3aWRlbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChmb3J3YXJkLWNoYXIgLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFycm93 LXRvLXJlZ2lvbiBzdWJqLWJlZyAocG9pbnQpKSkpKSkKICAgICAgICAgICAgICAgIDs7IFByZXNl cnZlIG5ldyBidWxsZXQgaWYgaXQncyBhIGRpc3RpbmN0aXZlIG9uZSwgb3RoZXJ3aXNlCiAgICAg ICAgICAgICAgICA7OyB1c2Ugb2xkIG9uZToKICAgICAgICAgICAgICAgIChpZiAoc3RyaW5nLW1h dGNoIChyZWdleHAtcXVvdGUgcHJlZml4LWJ1bGxldCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFsbG91dC1kaXN0aW5jdGl2ZS1idWxsZXRzLXN0cmluZykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRGVsZXRlIGZyb20gYnVsbGV0IG9mIG9sZCB0 bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBiZWZvcmUgYnVsbGV0 IG9mIG5ldzoKICAgICAgICAgICAgICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAgICAgICAg IChiZWdpbm5pbmctb2YtbGluZSkKICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtdW5wcm90 ZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIHN1Ymot YmVnKSkKICAgICAgICAgICAgICAgICAgICAgIChzZXQtbWFya2VyIChhbGxvdXQtbWFyay1tYXJr ZXIgdCkgc3Viai1lbmQpCiAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIHN1YmotYmVn KQogICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1lbmQtb2YtcHJlZml4KSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRGVsZXRlIGJhc2Ugc3ViaiBwcmVmaXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGxlYXZpbmcgb2xkIG9u ZToKICAgICAgICAgICAgICAgICAgKGFsbG91dC11bnByb3RlY3RlZAogICAgICAgICAgICAgICAg ICAgKHByb2duCiAgICAgICAgICAgICAgICAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKCsg KHBvaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy ZWZpeC1sZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo LSBhZGp1c3QtdG8tZGVwdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdWJqLWRlcHRoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7IGFuZCBkZWxldGUgcmVzaWR1YWwgc3ViagogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOyBwcmVmaXggZGlnaXRzIGFuZCBzcGFjZToKICAgICAgICAgICAg ICAgICAgICAgKHdoaWxlIChsb29raW5nLWF0ICJbMC05XSIpIChkZWxldGUtY2hhciAxKSkKICAg ICAgICAgICAgICAgICAgICAgKGlmIChsb29raW5nLWF0ICIgIikgKGRlbGV0ZS1jaGFyIDEpKSkp KSkKICAgICAgICAgICAgKGV4Y2hhbmdlLXBvaW50LWFuZC1tYXJrKSkpKQogICAgKGlmIHJlY3Rp ZnktbnVtYmVyaW5nCiAgICAgICAgKHByb2duCiAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgR2l2ZSBzb21lIHByZWxpbWlu YXJ5IGZlZWRiYWNrOgogICAgICAgICAgICAobWVzc2FnZSAiLi4uIHJlY29uY2lsaW5nIG51bWJl cnMiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAuLi4gYW5kIHJl bnVtYmVyLCBpbiBjYXNlIG5lY2Vzc2FyeToKICAgICAgICAgICAgKGdvdG8tY2hhciBzdWJqLWJl ZykKICAgICAgICAgICAgKGlmIChhbGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tlZCkKICAg ICAgICAgICAgICAgIChhbGxvdXQtdW5wcm90ZWN0ZWQKICAgICAgICAgICAgICAgICAoYWxsb3V0 LXJlYnVsbGV0LWhlYWRpbmcgbmlsICAgICAgICAgICAgOzs7IHNvbGljaXQKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1kZXB0aCkgOzs7IGRlcHRoCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCAgICAgICAgICAgIDs7 OyBudW1iZXItY29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuaWwgICAgICAgICAgICA7OzsgaW5kZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdCkpKQogICAgICAgICAgICAobWVzc2FnZSAiIikpKSkKICAgIChpZiAob3Ig aW50by1ib2wgcmVzaXR1YXRlKQogICAgICAgIChhbGxvdXQtaGlkZS1ieS1hbm5vdGF0aW9uIChw b2ludCkgKGFsbG91dC1tYXJrLW1hcmtlciB0KSkKICAgICAgKGFsbG91dC1kZWFubm90YXRlLWhp ZGRlbiAoYWxsb3V0LW1hcmstbWFya2VyIHQpIChwb2ludCkpKQogICAgKGlmIChub3QgcmVzaXR1 YXRlKQogICAgICAgIChleGNoYW5nZS1wb2ludC1hbmQtbWFyaykpCiAgICAocnVuLWhvb2std2l0 aC1hcmdzICdhbGxvdXQtc3RydWN0dXJlLWFkZGVkLWhvb2sgc3Viai1iZWcgc3Viai1lbmQpKSkK Ozs7XyAgICA+IGFsbG91dC15YW5rICgmb3B0aW9uYWwgYXJnKQooZGVmdW4gYWxsb3V0LXlhbmsg KCZvcHRpb25hbCBhcmcpCiAgImBhbGxvdXQtbW9kZScgeWFuaywgd2l0aCBkZXB0aCBhbmQgbnVt YmVyaW5nIGFkanVzdG1lbnQgb2YgeWFua2VkIHRvcGljcy4KCk5vbi10b3BpYyB5YW5rcyB3b3Jr IG5vIGRpZmZlcmVudGx5IHRoYW4gbm9ybWFsIHlhbmtzLgoKSWYgYSB0b3BpYyBpcyBiZWluZyB5 YW5rZWQgaW50byBhIGJhcmUgdG9waWMgcHJlZml4LCB0aGUgZGVwdGggb2YgdGhlCnlhbmtlZCB0 b3BpYyBpcyBhZGp1c3RlZCB0byB0aGUgZGVwdGggb2YgdGhlIHRvcGljIHByZWZpeC4KCiAgMSB3 ZSdyZSB5YW5raW5nIGluIGFuIGBhbGxvdXQtbW9kZScgYnVmZmVyCiAgMiB0aGUgc3R1ZmYgYmVp bmcgeWFua2VkIHN0YXJ0cyB3aXRoIGEgdmFsaWQgb3V0bGluZSBoZWFkZXIgcHJlZml4LCBhbmQK ICAzIGl0IGlzIGJlaW5nIHlhbmtlZCBhdCB0aGUgZW5kIG9mIGEgbGluZSB3aGljaCBjb25zaXN0 cyBvZiBvbmx5IGEgdmFsaWQKICAgIHRvcGljIHByZWZpeC4KCklmIHRoZXNlIGNvbmRpdGlvbnMg aG9sZCB0aGVuIHRoZSBkZXB0aCBvZiB0aGUgeWFua2VkIHRvcGljcyBhcmUgYWxsCmFkanVzdGVk IHRoZSBhbW91bnQgaXQgdGFrZXMgdG8gbWFrZSB0aGUgZmlyc3Qgb25lIGF0IHRoZSBkZXB0aCBv ZiB0aGUKaGVhZGVyIGludG8gd2hpY2ggaXQncyBiZWluZyB5YW5rZWQuCgpUaGUgcG9pbnQgaXMg bGVmdCBpbiBmcm9udCBvZiB5YW5rZWQsIGFkanVzdGVkIHRvcGljcywgcmF0aGVyIHRoYW4KYXQg dGhlIGVuZCAoYW5kIHZpY2UtdmVyc2Egd2l0aCB0aGUgbWFyaykuICBOb24tYWRqdXN0ZWQgeWFu a3MsCmhvd2V2ZXIsIChvbmVzIHRoYXQgZG9uJ3QgcXVhbGlmeSBmb3IgYWRqdXN0bWVudCkgYXJl IGhhbmRsZWQKZXhhY3RseSBsaWtlIG5vcm1hbCB5YW5rcy4KCk51bWJlcmluZyBvZiB5YW5rZWQg dG9waWNzLCBhbmQgdGhlIHN1Y2Nlc3NpdmUgc2libGluZ3MgYXQgdGhlIGRlcHRoCmludG8gd2hp Y2ggdGhleSdyZSBiZWluZyB5YW5rZWQsIGlzIGFkanVzdGVkLgoKYGFsbG91dC15YW5rLXBvcCcg d29ya3Mgd2l0aCBgYWxsb3V0LXlhbmsnIGp1c3QgbGlrZSBub3JtYWwgYHlhbmstcG9wJwp3b3Jr cyB3aXRoIG5vcm1hbCBgeWFuaycgaW4gbm9uLW91dGxpbmUgYnVmZmVycy4iCgogIChpbnRlcmFj dGl2ZSAiKlAiKQogIChzZXRxIHRoaXMtY29tbWFuZCAneWFuaykKICAoYWxsb3V0LXVucHJvdGVj dGVkCiAgICh5YW5rIGFyZykpCiAgKGlmIChhbGxvdXQtbW9kZS1wKQogICAgICAoYWxsb3V0LXlh bmstcHJvY2Vzc2luZykpKQo7OztfICAgID4gYWxsb3V0LXlhbmstcG9wICgmb3B0aW9uYWwgYXJn KQooZGVmdW4gYWxsb3V0LXlhbmstcG9wICgmb3B0aW9uYWwgYXJnKQogICJZYW5rLXBvcCBsaWtl IGBhbGxvdXQteWFuaycgd2hlbiBwb3BwaW5nIHRvIGJhcmUgb3V0bGluZSBwcmVmaXhlcy4KCkFk YXB0cyBsZXZlbCBvZiBwb3BwZWQgdG9waWNzIHRvIGxldmVsIG9mIGZyZXNoIHByZWZpeC4KCk5v dGUgLSBwcmVmaXggY2hhbmdlcyB0byBkaXN0aW5jdGl2ZSBidWxsZXRzIHdpbGwgc3RpY2ssIGlm IGZvbGxvd2VkCmJ5IHBvcHMgdG8gbm9uLWRpc3RpbmN0aXZlIHlhbmtzLiAgQnVnLi4uIgoKICAo aW50ZXJhY3RpdmUgIipwIikKICAoc2V0cSB0aGlzLWNvbW1hbmQgJ3lhbmspCiAgKHlhbmstcG9w IGFyZykKICAoaWYgKGFsbG91dC1tb2RlLXApCiAgICAgIChhbGxvdXQteWFuay1wcm9jZXNzaW5n KSkpCgo7OztfICAtIFNwZWNpYWx0eSBidWxsZXQgZnVuY3Rpb25zCjs7O18gICA6IEZpbGUgQ3Jv c3MgcmVmZXJlbmNlcwo7OztfICAgID4gYWxsb3V0LXJlc29sdmUteHJlZiAoKQooZGVmdW4gYWxs b3V0LXJlc29sdmUteHJlZiAoKQogICJQb3AgdG8gZmlsZSBhc3NvY2lhdGVkIHdpdGggY3VycmVu dCBoZWFkaW5nLCBpZiBpdCBoYXMgYW4geHJlZiBidWxsZXQuCgpcKFdvcmtzIGFjY29yZGluZyB0 byBzZXR0aW5nIG9mIGBhbGxvdXQtZmlsZS14cmVmLWJ1bGxldCcpLiIKICAoaW50ZXJhY3RpdmUp CiAgKGlmIChub3QgYWxsb3V0LWZpbGUteHJlZi1idWxsZXQpCiAgICAgIChlcnJvcgogICAgICAg Ik91dGxpbmUgY3Jvc3MgcmVmZXJlbmNlcyBkaXNhYmxlZCAtIG5vIGBhbGxvdXQtZmlsZS14cmVm LWJ1bGxldCciKQogICAgKGlmIChub3QgKHN0cmluZz0gKGFsbG91dC1jdXJyZW50LWJ1bGxldCkg YWxsb3V0LWZpbGUteHJlZi1idWxsZXQpKQogICAgICAgIChlcnJvciAiQ3VycmVudCBoZWFkaW5n IGxhY2tzIGNyb3NzLXJlZmVyZW5jZSBidWxsZXQgYCVzJyIKICAgICAgICAgICAgICAgYWxsb3V0 LWZpbGUteHJlZi1idWxsZXQpCiAgICAgIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9u IHQpCiAgICAgICAgICAgIGZpbGUtbmFtZSkKICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAg ICAgIChsZXQqICgodGV4dC1zdGFydCBhbGxvdXQtcmVjZW50LXByZWZpeC1lbmQpCiAgICAgICAg ICAgICAgICAgKGhlYWRpbmctZW5kIChwcm9nbiAoZW5kLW9mLWxpbmUpIChwb2ludCkpKSkKICAg ICAgICAgICAgKGdvdG8tY2hhciB0ZXh0LXN0YXJ0KQogICAgICAgICAgICAoc2V0cSBmaWxlLW5h bWUKICAgICAgICAgICAgICAgICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAiXFxzLVxcKFxcUy0q XFwpIiBoZWFkaW5nLWVuZCB0KQogICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJp bmcgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkpKSkKICAgICAgICAoc2V0cSBm aWxlLW5hbWUgKGV4cGFuZC1maWxlLW5hbWUgZmlsZS1uYW1lKSkKICAgICAgICAoaWYgKG9yIChm aWxlLWV4aXN0cy1wIGZpbGUtbmFtZSkKICAgICAgICAgICAgICAgIChpZiAoZmlsZS13cml0YWJs ZS1wIGZpbGUtbmFtZSkKICAgICAgICAgICAgICAgICAgICAoeS1vci1uLXAgKGZvcm1hdCAiJXMg bm90IHRoZXJlLCBjcmVhdGUgb25lPyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmlsZS1uYW1lKSkKICAgICAgICAgICAgICAgICAgKGVycm9yICIlcyBub3QgZm91bmQg YW5kIGNhbid0IGJlIGNyZWF0ZWQiIGZpbGUtbmFtZSkpKQogICAgICAgICAgICAoY29uZGl0aW9u LWNhc2UgZmFpbHVyZQogICAgICAgICAgICAgICAgKGZpbmQtZmlsZS1vdGhlci13aW5kb3cgZmls ZS1uYW1lKQogICAgICAgICAgICAgIChlcnJvciBmYWlsdXJlKSkKICAgICAgICAgIChlcnJvciAi JXMgbm90IGZvdW5kIiBmaWxlLW5hbWUpKQogICAgICAgICkKICAgICAgKQogICAgKQogICkKCjs7 O18gIzYgRXhwb3N1cmUgQ29udHJvbAoKOzs7XyAgLSBGdW5kYW1lbnRhbAo7OztfICAgPiBhbGxv dXQtZmxhZy1yZWdpb24gKGZyb20gdG8gZmxhZykKKGRlZnVuIGFsbG91dC1mbGFnLXJlZ2lvbiAo ZnJvbSB0byBmbGFnKQogICJDb25jZWFsIHRleHQgYmV0d2VlbiBGUk9NIGFuZCBUTyBpZiBGTEFH IGlzIG5vbi1uaWwsIGVsc2UgcmV2ZWFsIGl0LgoKRXhwb3N1cmUtY2hhbmdlIGhvb2sgYGFsbG91 dC1leHBvc3VyZS1jaGFuZ2UtaG9vaycgaXMgcnVuIHdpdGggdGhlIHNhbWUKYXJndW1lbnRzIGFz IHRoaXMgZnVuY3Rpb24sIGFmdGVyIHRoZSBleHBvc3VyZSBjaGFuZ2VzIGFyZSBtYWRlLiAgXChU aGUgb2xkCmBhbGxvdXQtdmlldy1jaGFuZ2UtaG9vaycgaXMgYmVpbmcgZGVwcmVjYXRlZCwgYW5k IGV2ZW50dWFsbHkgd2lsbCBub3QgYmUKaW52b2tlZC5cKSIKCiAgOzsgV2UgdXNlIG91dGxpbmUg aW52aXNpYmlsaXR5IHNwZWMuCiAgKHJlbW92ZS1vdmVybGF5cyBmcm9tIHRvICdjYXRlZ29yeSAn YWxsb3V0LWV4cG9zdXJlLWNhdGVnb3J5KQogICh3aGVuIGZsYWcKICAgIChsZXQgKChvIChtYWtl LW92ZXJsYXkgZnJvbSB0bykpKQogICAgICAob3ZlcmxheS1wdXQgbyAnY2F0ZWdvcnkgJ2FsbG91 dC1leHBvc3VyZS1jYXRlZ29yeSkKICAgICAgKHdoZW4gKGZlYXR1cmVwICd4ZW1hY3MpCiAgICAg ICAgKGxldCAoKHByb3BzIChzeW1ib2wtcGxpc3QgJ2FsbG91dC1leHBvc3VyZS1jYXRlZ29yeSkp KQogICAgICAgICAgKHdoaWxlIHByb3BzCiAgICAgICAgICAgIChvdmVybGF5LXB1dCBvIChwb3Ag cHJvcHMpIChwb3AgcHJvcHMpKSkpKSkpCiAgKHJ1bi1ob29rcyAnYWxsb3V0LXZpZXctY2hhbmdl LWhvb2spCiAgKHJ1bi1ob29rLXdpdGgtYXJncyAnYWxsb3V0LWV4cG9zdXJlLWNoYW5nZS1ob29r IGZyb20gdG8gZmxhZykpCjs7O18gICA+IGFsbG91dC1mbGFnLWN1cnJlbnQtc3VidHJlZSAoZmxh ZykKKGRlZnVuIGFsbG91dC1mbGFnLWN1cnJlbnQtc3VidHJlZSAoZmxhZykKICAiQ29uY2VhbCBj dXJyZW50bHktdmlzaWJsZSB0b3BpYydzIHN1YnRyZWUgaWYgRkxBRyBub24tbmlsLCBlbHNlIHJl dmVhbCBpdC4iCgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQt aGVhZGluZykKICAgIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpKQogICAgICAo ZW5kLW9mLWxpbmUpKQogICAgKGFsbG91dC1mbGFnLXJlZ2lvbiAocG9pbnQpCiAgICAgICAgICAg ICAgICAgICAgICAgIDs7IEV4cG9zaW5nIG11c3Qgbm90IGxlYXZlIHRyYWlsaW5nIGJsYW5rcyBo aWRkZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIDs7IGJ1dCBjYW4gbGVhdmUgdGhlbSBleHBv c2VkIHdoZW4gaGlkaW5nLCBzbyB3ZQogICAgICAgICAgICAgICAgICAgICAgICA7OyBjYW4gdXNl IGZsYWcncyBpbnZlcnNlIGFzIHRoZQogICAgICAgICAgICAgICAgICAgICAgICA7OyBpbmNsdWRl LXRyYWlsaW5nLWJsYW5rIGN1ZToKICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1lbmQt b2YtY3VycmVudC1zdWJ0cmVlIChub3QgZmxhZykpCiAgICAgICAgICAgICAgICAgICAgICAgIGZs YWcpKSkKCjs7O18gIC0gVG9waWMtc3BlY2lmaWMKOzs7XyAgID4gYWxsb3V0LXNob3ctZW50cnkg KCkKKGRlZnVuIGFsbG91dC1zaG93LWVudHJ5ICgpCiAgIkxpa2UgYGFsbG91dC1zaG93LWN1cnJl bnQtZW50cnknLCBidXQgcmV2ZWFscyBlbnRyaWVzIGluIGhpZGRlbiB0b3BpY3MuCgpUaGlzIGlz IGEgd2F5IHRvIGdpdmUgcmVzdHJpY3RlZCBwZWVrIGF0IGEgY29uY2VhbGVkIGxvY2FsaXR5IHdp dGhvdXQgdGhlCmV4cGVuc2Ugb2YgZXhwb3NpbmcgaXRzIGNvbnRleHQsIGJ1dCBjYW4gbGVhdmUg dGhlIG91dGxpbmUgd2l0aCBhYmVycmFudApleHBvc3VyZS4gIGBhbGxvdXQtc2hvdy1vZmZzaG9v dCcgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgdGhlIHBlZWsgdG8gcmVjdGlmeQp0aGUgZXhwb3N1cmUu IgoKICAoaW50ZXJhY3RpdmUpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAobGV0IChiZWcgZW5kKQog ICAgICAoYWxsb3V0LWdvdG8tcHJlZml4LWRvdWJsZWNoZWNrZWQpCiAgICAgIChzZXRxIGJlZyAo aWYgKGFsbG91dC1oaWRkZW4tcCkgKDEtIChwb2ludCkpIChwb2ludCkpKQogICAgICAoc2V0cSBl bmQgKGFsbG91dC1wcmUtbmV4dC1wcmVmaXgpKQogICAgICAoYWxsb3V0LWZsYWctcmVnaW9uIGJl ZyBlbmQgbmlsKQogICAgICAobGlzdCBiZWcgZW5kKSkpKQo7OztfICAgPiBhbGxvdXQtc2hvdy1j aGlsZHJlbiAoJm9wdGlvbmFsIGxldmVsIHN0cmljdCkKKGRlZnVuIGFsbG91dC1zaG93LWNoaWxk cmVuICgmb3B0aW9uYWwgbGV2ZWwgc3RyaWN0KQoKICAiSWYgcG9pbnQgaXMgdmlzaWJsZSwgc2hv dyBhbGwgZGlyZWN0IHN1YmhlYWRpbmdzIG9mIHRoaXMgaGVhZGluZy4KCk90aGVyd2lzZSwgZG8g YGFsbG91dC1zaG93LXRvLW9mZnNob290JywgYW5kIHRoZW4gc2hvdyBzdWJoZWFkaW5ncy4KCk9w dGlvbmFsIExFVkVMIHNwZWNpZmllcyBob3cgbWFueSBsZXZlbHMgYmVsb3cgdGhlIGN1cnJlbnQg bGV2ZWwKc2hvdWxkIGJlIHNob3duLCBvciBhbGwgbGV2ZWxzIGlmIHQuICBEZWZhdWx0IGlzIDEu CgpPcHRpb25hbCBTVFJJQ1QgbWVhbnMgZG9uJ3QgcmVzb3J0IHRvIC1zaG93LXRvLW9mZnNob290 LCBubyBtYXR0ZXIKd2hhdC4gIFRoaXMgaXMgYmFzaWNhbGx5IHNvIC1zaG93LXRvLW9mZnNob290 LCB3aGljaCBpcyBjYWxsZWQgYnkKdGhpcyBmdW5jdGlvbiwgY2FuIGVtcGxveSB0aGUgcHVyZSBv ZmZzcHJpbmctcmV2ZWFsaW5nIGNhcGFiaWxpdGllcyBvZgppdC4KClJldHVybnMgcG9pbnQgYXQg ZW5kIG9mIHN1YnRyZWUgdGhhdCB3YXMgb3BlbmVkLCBpZiBhbnkuICAoTWF5IGdldCBhCnBvaW50 IG9mIG5vbi1vcGVuZWQgc3VidHJlZT8pIgoKICAoaW50ZXJhY3RpdmUgInAiKQogIChsZXQgKChz dGFydC1wb2ludCAocG9pbnQpKSkKICAgIChpZiAoYW5kIChub3Qgc3RyaWN0KQogICAgICAgICAg ICAgKGFsbG91dC1oaWRkZW4tcCkpCgogICAgICAgIChwcm9nbiAoYWxsb3V0LXNob3ctdG8tb2Zm c2hvb3QpIDsgUG9pbnQncyBjb25jZWFsZWQsIG9wZW4gdG8KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsgZXhwb3NlIGl0LgogICAgICAgICAgICAgICA7OyBUaGVuIHJl Y3Vyc2UsIGJ1dCB3aXRoICJzdHJpY3QiIHNldCBzbyB3ZSBkb24ndAogICAgICAgICAgICAgICA7 OyBpbmZpbml0ZSByZWdyZXNzOgogICAgICAgICAgICAgICAoYWxsb3V0LXNob3ctY2hpbGRyZW4g bGV2ZWwgdCkpCgogICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAoYWxsb3V0LWJlZ2lubmlu Zy1vZi1jdXJyZW50LWxpbmUpCiAgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgICAgIChs ZXQqIChkZXB0aAogICAgICAgICAgICAgICAgIDs7IHRyYW5zbGF0ZSB0aGUgbGV2ZWwgc3BlYyBm b3IgdGhpcyByb3V0aW5lIHRvIHRoZSBvbmVzCiAgICAgICAgICAgICAgICAgOzsgdXNlZCBieSAt Y2hhcnQtc3VidHJlZSBhbmQgLWNoYXJ0LXRvLXJldmVhbDoKICAgICAgICAgICAgICAgICAoY2hh cnQtbGV2ZWwgKGNvbmQgKChub3QgbGV2ZWwpIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgoZXEgbGV2ZWwgdCkgbmlsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodCBsZXZlbCkpKQogICAgICAgICAgICAgICAgIChjaGFydCAoYWxsb3V0LWNoYXJ0 LXN1YnRyZWUgY2hhcnQtbGV2ZWwpKQogICAgICAgICAgICAgICAgICh0by1yZXZlYWwgKG9yIChh bGxvdXQtY2hhcnQtdG8tcmV2ZWFsIGNoYXJ0IGNoYXJ0LWxldmVsKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDs7IGludGVyYWN0aXZlLCBzaG93IGRpc2NvbnRpbnVvdXMgY2hpbGRy ZW46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBjaGFydAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludGVyYWN0aXZlLXApCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQtaGVhZGluZykKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgZGVwdGggKGFsbG91dC1j dXJyZW50LWRlcHRoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFu ZCAoYWxsb3V0LW5leHQtaGVhZGluZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoPiBhbGxvdXQtcmVjZW50LWRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKDErIGRlcHRoKSkpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiRGlzY29udGludW91cyBvZmZzcHJpbmc7IHVzZSBgJXMgJXMnJXMuIgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFxbdW5pdmVyc2FsLWFyZ3Vt ZW50XSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUt Y29tbWFuZC1rZXlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXFth bGxvdXQtc2hpZnQtb3V0XSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IiB0byBlbGV2YXRlIHRoZW0uIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChhbGxvdXQtY2hhcnQtdG8tcmV2ZWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhcnQgKC0gYWxsb3V0LXJlY2VudC1kZXB0aCBkZXB0aCkpKSkpKQogICAgICAgICAg ICAoZ290by1jaGFyIHN0YXJ0LXBvaW50KQogICAgICAgICAgICAod2hlbiAoYW5kIHN0cmljdCAo YWxsb3V0LWhpZGRlbi1wKSkKICAgICAgICAgICAgICA7OyBDb25jZWFsZWQgcm9vdCB3b3VsZCBh bHJlYWR5IGhhdmUgYmVlbiB0YWtlbiBjYXJlIG9mLAogICAgICAgICAgICAgIDs7IHVubGVzcyBz dHJpY3Qgd2FzIHNldC4KICAgICAgICAgICAgICAoYWxsb3V0LWZsYWctcmVnaW9uIChwb2ludCkg KGFsbG91dC1zbnVnLWJhY2spIG5pbCkKICAgICAgICAgICAgICAod2hlbiBhbGxvdXQtc2hvdy1i b2RpZXMKICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKGNhciB0by1yZXZlYWwpKQogICAgICAg ICAgICAgICAgKGFsbG91dC1zaG93LWN1cnJlbnQtZW50cnkpKSkKICAgICAgICAgICAgKHdoaWxl IHRvLXJldmVhbAogICAgICAgICAgICAgIChnb3RvLWNoYXIgKGNhciB0by1yZXZlYWwpKQogICAg ICAgICAgICAgIChhbGxvdXQtZmxhZy1yZWdpb24gKHNhdmUtZXhjdXJzaW9uIChhbGxvdXQtc251 Zy1iYWNrKSAocG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2du IChzZWFyY2gtZm9yd2FyZCAiXG4iIG5pbCB0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgxLSAocG9pbnQpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5pbCkKICAgICAgICAgICAgICAod2hlbiBhbGxvdXQtc2hvdy1ib2RpZXMKICAgICAgICAg ICAgICAgIChnb3RvLWNoYXIgKGNhciB0by1yZXZlYWwpKQogICAgICAgICAgICAgICAgKGFsbG91 dC1zaG93LWN1cnJlbnQtZW50cnkpKQogICAgICAgICAgICAgIChzZXRxIHRvLXJldmVhbCAoY2Ry IHRvLXJldmVhbCkpKSkpKSkKICAgIDs7IENvbXBlbnNhdGUgZm9yIGBzYXZlLWV4Y3Vyc2lvbidz IG1haW50ZW5hbmNlIG9mIHBvaW50CiAgICA7OyB3aXRoaW4gaW52aXNpYmxlIHRleHQ6CiAgICAo Z290by1jaGFyIHN0YXJ0LXBvaW50KSkpCjs7O18gICA+IGFsbG91dC1zaG93LXRvLW9mZnNob290 ICgpCihkZWZ1biBhbGxvdXQtc2hvdy10by1vZmZzaG9vdCAoKQogICJMaWtlIGBhbGxvdXQtc2hv dy1lbnRyeScsIGJ1dCByZXZlYWxzIGFsbCBjb25jZWFsZWQgYW5jZXN0b3JzLCBhcyB3ZWxsLgoK VXNlZnVsIGZvciBjb2hlcmVudGx5IGV4cG9zaW5nIHRvIGEgcmFuZG9tIHBvaW50IGluIGEgaGlk ZGVuIHJlZ2lvbi4iCiAgKGludGVyYWN0aXZlKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCAo KGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gdCkKICAgICAgICAgIChvcmlnLXB0IChwb2ludCkp CgkgIChvcmlnLXByZWYgKGFsbG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2VkKSkKCSAgKGxh c3QtYXQgKHBvaW50KSkKCSAgKGJhZy1pdCAwKSkKICAgICAgKHdoaWxlIChvciAoPiBiYWctaXQg MSkgKGFsbG91dC1oaWRkZW4tcCkpCiAgICAgICAgKHdoaWxlIChhbGxvdXQtaGlkZGVuLXApCiAg ICAgICAgICAobW92ZS1iZWdpbm5pbmctb2YtbGluZSAxKQogICAgICAgICAgKGlmIChhbGxvdXQt aGlkZGVuLXApIChmb3J3YXJkLWNoYXIgLTEpKSkKCShpZiAoPSBsYXN0LWF0IChzZXRxIGxhc3Qt YXQgKHBvaW50KSkpCgkgICAgOzsgT29wcywgd2UncmUgbm90IG1ha2luZyBhbnkgcHJvZ3Jlc3Mh ICBTaG93IHRoZSBjdXJyZW50IHRvcGljCgkgICAgOzsgY29tcGxldGVseSwgYW5kIHRyeSBvbmUg bW9yZSB0aW1lIGhlcmUsIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeS4KCSAgICAocHJvZ24gKGJlZ2lu bmluZy1vZi1saW5lKQoJCSAgIChhbGxvdXQtc2hvdy1jdXJyZW50LXN1YnRyZWUpCgkJICAgKGdv dG8tY2hhciBvcmlnLXB0KQoJCSAgIChzZXRxIGJhZy1pdCAoMSsgYmFnLWl0KSkKICAgICAgICAg ICAgICAgICAgIChpZiAoPiBiYWctaXQgMSkKICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3Ig ImFsbG91dC1zaG93LXRvLW9mZnNob290OiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlN0dW1wZWQgYnkgYWJlcnJhbnQgbmVzdGluZy4iKSkpCiAgICAgICAgICAoaWYgKD4gYmFn LWl0IDApIChzZXRxIGJhZy1pdCAwKSkKICAgICAgICAgIChhbGxvdXQtc2hvdy1jaGlsZHJlbikK ICAgICAgICAgIChnb3RvLWNoYXIgb3JpZy1wcmVmKSkpCiAgICAgIChnb3RvLWNoYXIgb3JpZy1w dCkpKQogIChpZiAoYWxsb3V0LWhpZGRlbi1wKQogICAgICAoYWxsb3V0LXNob3ctZW50cnkpKSkK Ozs7XyAgID4gYWxsb3V0LWhpZGUtY3VycmVudC1lbnRyeSAoKQooZGVmdW4gYWxsb3V0LWhpZGUt Y3VycmVudC1lbnRyeSAoKQogICJIaWRlIHRoZSBib2R5IGRpcmVjdGx5IGZvbGxvd2luZyB0aGlz IGhlYWRpbmcuIgogIChpbnRlcmFjdGl2ZSkKICAoYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFk aW5nKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rp b24gdCkpCiAgICAgIChlbmQtb2YtbGluZSkpCiAgICAoYWxsb3V0LWZsYWctcmVnaW9uIChwb2lu dCkKICAgICAgICAgICAgICAgICAgICAgICAgKHByb2duIChhbGxvdXQtZW5kLW9mLWVudHJ5KSAo cG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgICB0KSkpCjs7O18gICA+IGFsbG91dC1zaG93 LWN1cnJlbnQtZW50cnkgKCZvcHRpb25hbCBhcmcpCihkZWZ1biBhbGxvdXQtc2hvdy1jdXJyZW50 LWVudHJ5ICgmb3B0aW9uYWwgYXJnKQogICJTaG93IGJvZHkgZm9sbG93aW5nIGN1cnJlbnQgaGVh ZGluZywgb3IgaGlkZSBlbnRyeSB3aXRoIHVuaXZlcnNhbCBhcmd1bWVudC4iCgogIChpbnRlcmFj dGl2ZSAiUCIpCiAgKGlmIGFyZwogICAgICAoYWxsb3V0LWhpZGUtY3VycmVudC1lbnRyeSkKICAg IChzYXZlLWV4Y3Vyc2lvbiAoYWxsb3V0LXNob3ctdG8tb2Zmc2hvb3QpKQogICAgKHNhdmUtZXhj dXJzaW9uCiAgICAgIChhbGxvdXQtZmxhZy1yZWdpb24gKHBvaW50KQogICAgICAgICAgICAgICAg ICAgICAgICAgIChwcm9nbiAoYWxsb3V0LWVuZC1vZi1lbnRyeSB0KSAocG9pbnQpKQogICAgICAg ICAgICAgICAgICAgICAgICAgIG5pbCkKICAgICAgKSkpCjs7O18gICA+IGFsbG91dC1zaG93LWN1 cnJlbnQtc3VidHJlZSAoJm9wdGlvbmFsIGFyZykKKGRlZnVuIGFsbG91dC1zaG93LWN1cnJlbnQt c3VidHJlZSAoJm9wdGlvbmFsIGFyZykKICAiU2hvdyBldmVyeXRoaW5nIHdpdGhpbiB0aGUgY3Vy cmVudCB0b3BpYy4gIFdpdGggYSByZXBlYXQtY291bnQsCmV4cG9zZSB0aGlzIHRvcGljIGFuZCBp dHMgc2libGluZ3MuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAo aWYgKDw9IChhbGxvdXQtY3VycmVudC1kZXB0aCkgMCkKCTs7IE91dHNpZGUgYW55IHRvcGljcyAt IHRyeSB0byBnZXQgdG8gdGhlIGZpcnN0OgoJKGlmIChub3QgKGFsbG91dC1uZXh0LWhlYWRpbmcp KQoJICAgIChlcnJvciAiTm8gdG9waWNzIikKCSAgOzsgZ290IHRvIGZpcnN0LCBvdXRlcm1vc3Qg dG9waWMgLSBzZXQgdG8gZXhwb3NlIGl0IGFuZCBzaWJsaW5nczoKCSAgKG1lc3NhZ2UgIkFib3Zl IG91dGVybW9zdCB0b3BpYyAtIGV4cG9zaW5nIGFsbC4iKQoJICAoYWxsb3V0LWZsYWctcmVnaW9u IChwb2ludC1taW4pKHBvaW50LW1heCkgbmlsKSkKICAgICAgKGFsbG91dC1iZWdpbm5pbmctb2Yt Y3VycmVudC1saW5lKQogICAgICAoaWYgKG5vdCBhcmcpCgkgIChhbGxvdXQtZmxhZy1jdXJyZW50 LXN1YnRyZWUgbmlsKQoJKGFsbG91dC1iZWdpbm5pbmctb2YtbGV2ZWwpCgkoYWxsb3V0LWV4cG9z ZS10b3BpYyAnKCogOikpKSkpKQo7OztfICAgPiBhbGxvdXQtY3VycmVudC10b3BpYy1jb2xsYXBz ZWQtcCAoJm9wdGlvbmFsIGluY2x1ZGUtc2luZ2xlLWxpbmVycykKKGRlZnVuIGFsbG91dC1jdXJy ZW50LXRvcGljLWNvbGxhcHNlZC1wICgmb3B0aW9uYWwgaW5jbHVkZS1zaW5nbGUtbGluZXJzKQog ICJUcnVlIGlmIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb250YWluaW5nIHRvcGljIGlzIGFscmVh ZHkgY29sbGFwc2VkLgoKU2luZ2xlIGxpbmUgdG9waWNzIGludHJpbnNpY2FsbHkgY2FuIGJlIGNv bnNpZGVyZWQgYXMgYmVpbmcgYm90aApjb2xsYXBzZWQgYW5kIHVuY29sbGFwc2VkLiAgSWYgb3B0 aW9uYWwgSU5DTFVERS1TSU5HTEUtTElORVJTIGlzCnRydWUsIHRoZW4gc2luZ2xlLWxpbmUgdG9w aWNzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGNvbGxhcHNlZC4gIEJ5CmRlZmF1bHQsIHRoZXkgYXJl IHRyZWF0ZWQgYXMgYmVpbmcgdW5jb2xsYXBzZWQuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGFu ZAogICAgIDs7IElzIHRoZSB0b3BpYyBhbGwgb24gb25lIGxpbmUgKGFsbG93aW5nIGZvciB0cmFp bGluZyBibGFuayBsaW5lKT8KICAgICAoPj0gKHByb2duIChhbGxvdXQtYmFjay10by1jdXJyZW50 LWhlYWRpbmcpCiAgICAgICAgICAgICAgICAobW92ZS1lbmQtb2YtbGluZSAxKQogICAgICAgICAg ICAgICAgKHBvaW50KSkKICAgICAgICAgKGFsbG91dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVlIChu b3QgKGxvb2tpbmctYXQgIlxuXG4iKSkpKQoKICAgICAob3IgaW5jbHVkZS1zaW5nbGUtbGluZXJz CiAgICAgICAgIChwcm9nbiAoYmFja3dhcmQtY2hhciAxKSAoYWxsb3V0LWhpZGRlbi1wKSkpKSkp Cjs7O18gICA+IGFsbG91dC1oaWRlLWN1cnJlbnQtc3VidHJlZSAoJm9wdGlvbmFsIGp1c3QtY2xv c2UpCihkZWZ1biBhbGxvdXQtaGlkZS1jdXJyZW50LXN1YnRyZWUgKCZvcHRpb25hbCBqdXN0LWNs b3NlKQogICJDbG9zZSB0aGUgY3VycmVudCB0b3BpYywgb3IgY29udGFpbmluZyB0b3BpYyBpZiB0 aGlzIG9uZSBpcyBhbHJlYWR5IGNsb3NlZC4KCklmIHRoaXMgdG9waWMgaXMgY2xvc2VkIGFuZCBp dCdzIGEgdG9wIGxldmVsIHRvcGljLCBjbG9zZSB0aGlzIHRvcGljCmFuZCBpdHMgc2libGluZ3Mu CgpJZiBvcHRpb25hbCBhcmcgSlVTVC1DTE9TRSBpcyBub24tbmlsLCBkbyBub3QgY2xvc2UgdGhl IHBhcmVudCBvcgpzaWJsaW5ncywgZXZlbiBpZiB0aGUgdGFyZ2V0IHRvcGljIGlzIGFscmVhZHkg Y2xvc2VkLiIKCiAgKGludGVyYWN0aXZlKQogIChsZXQqICgoZnJvbSAocG9pbnQpKQogICAgICAg ICAoc2licy1tc2cgIlRvcC1sZXZlbCB0b3BpYyBhbHJlYWR5IGNsb3NlZCAtIGNsb3Npbmcgc2li bGluZ3MuLi4iKQogICAgICAgICAoY3VycmVudC1leHBvc2VkIChub3QgKGFsbG91dC1jdXJyZW50 LXRvcGljLWNvbGxhcHNlZC1wIHQpKSkpCiAgICAoY29uZCAoY3VycmVudC1leHBvc2VkIChhbGxv dXQtZmxhZy1jdXJyZW50LXN1YnRyZWUgdCkpCiAgICAgICAgICAoanVzdC1jbG9zZSBuaWwpCiAg ICAgICAgICAoKGFsbG91dC1hc2NlbmQpIChhbGxvdXQtaGlkZS1jdXJyZW50LXN1YnRyZWUpKQog ICAgICAgICAgKHQgKGdvdG8tY2hhciAwKQogICAgICAgICAgICAgKG1lc3NhZ2Ugc2licy1tc2cp CiAgICAgICAgICAgICAoYWxsb3V0LWdvdG8tcHJlZml4LWRvdWJsZWNoZWNrZWQpCiAgICAgICAg ICAgICAoYWxsb3V0LWV4cG9zZS10b3BpYyAnKDAgOikpCiAgICAgICAgICAgICAobWVzc2FnZSAo Y29uY2F0IHNpYnMtbXNnICIgIERvbmUuIikpKSkKICAgIChnb3RvLWNoYXIgZnJvbSkpKQo7Oztf ICAgPiBhbGxvdXQtc2hvdy1jdXJyZW50LWJyYW5jaGVzICgpCihkZWZ1biBhbGxvdXQtc2hvdy1j dXJyZW50LWJyYW5jaGVzICgpCiAgIlNob3cgYWxsIHN1YmhlYWRpbmdzIG9mIHRoaXMgaGVhZGlu ZywgYnV0IG5vdCB0aGVpciBib2RpZXMuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgoaW5oaWJp dC1maWVsZC10ZXh0LW1vdGlvbiB0KSkKICAgIChiZWdpbm5pbmctb2YtbGluZSkpCiAgKGFsbG91 dC1zaG93LWNoaWxkcmVuIHQpKQo7OztfICAgPiBhbGxvdXQtaGlkZS1jdXJyZW50LWxlYXZlcyAo KQooZGVmdW4gYWxsb3V0LWhpZGUtY3VycmVudC1sZWF2ZXMgKCkKICAiSGlkZSB0aGUgYm9kaWVz IG9mIHRoZSBjdXJyZW50IHRvcGljIGFuZCBhbGwgaXRzIG9mZnNwcmluZy4iCiAgKGludGVyYWN0 aXZlKQogIChhbGxvdXQtYmFjay10by1jdXJyZW50LWhlYWRpbmcpCiAgKGFsbG91dC1oaWRlLXJl Z2lvbi1ib2R5IChwb2ludCkgKHByb2duIChhbGxvdXQtZW5kLW9mLWN1cnJlbnQtc3VidHJlZSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludCkpKSkKCjs7 O18gIC0gUmVnaW9uIGFuZCBiZXlvbmQKOzs7XyAgID4gYWxsb3V0LXNob3ctYWxsICgpCihkZWZ1 biBhbGxvdXQtc2hvdy1hbGwgKCkKICAiU2hvdyBhbGwgb2YgdGhlIHRleHQgaW4gdGhlIGJ1ZmZl ci4iCiAgKGludGVyYWN0aXZlKQogIChtZXNzYWdlICJFeHBvc2luZyBlbnRpcmUgYnVmZmVyLi4u IikKICAoYWxsb3V0LWZsYWctcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpIG5pbCkKICAo bWVzc2FnZSAiRXhwb3NpbmcgZW50aXJlIGJ1ZmZlci4uLiAgRG9uZS4iKSkKOzs7XyAgID4gYWxs b3V0LWhpZGUtYm9kaWVzICgpCihkZWZ1biBhbGxvdXQtaGlkZS1ib2RpZXMgKCkKICAiSGlkZSBh bGwgb2YgYnVmZmVyIGV4Y2VwdCBoZWFkaW5ncy4iCiAgKGludGVyYWN0aXZlKQogIChhbGxvdXQt aGlkZS1yZWdpb24tYm9keSAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpCjs7O18gICA+IGFsbG91 dC1oaWRlLXJlZ2lvbi1ib2R5IChzdGFydCBlbmQpCihkZWZ1biBhbGxvdXQtaGlkZS1yZWdpb24t Ym9keSAoc3RhcnQgZW5kKQogICJIaWRlIGFsbCBib2R5IGxpbmVzIGluIHRoZSByZWdpb24sIGJ1 dCBub3QgaGVhZGluZ3MuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHNhdmUtcmVzdHJpY3Rpb24K ICAgICAgKG5hcnJvdy10by1yZWdpb24gc3RhcnQgZW5kKQogICAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQogICAgICAobGV0ICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KSkKICAgICAg ICAod2hpbGUgKG5vdCAoZW9icCkpCiAgICAgICAgICAoZW5kLW9mLWxpbmUpCiAgICAgICAgICAo YWxsb3V0LWZsYWctcmVnaW9uIChwb2ludCkgKGFsbG91dC1lbmQtb2YtZW50cnkpIHQpCiAgICAg ICAgICAoaWYgKG5vdCAoZW9icCkpCiAgICAgICAgICAgICAgKGZvcndhcmQtY2hhcgogICAgICAg ICAgICAgICAoaWYgKGxvb2tpbmctYXQgIlxuXG4iKQogICAgICAgICAgICAgICAgICAgMiAxKSkp KSkpKSkKCjs7O18gICA+IGFsbG91dC1leHBvc2UtdG9waWMgKHNwZWMpCihkZWZ1biBhbGxvdXQt ZXhwb3NlLXRvcGljIChzcGVjKQogICJBcHBseSBleHBvc3VyZSBzcGVjcyB0byBzdWNjZXNzaXZl IG91dGxpbmUgdG9waWMgaXRlbXMuCgpVc2UgdGhlIG1vcmUgY29udmVuaWVudCBmcm9udGVuZCwg YGFsbG91dC1uZXctZXhwb3N1cmUnLCBpZiB5b3UgZG9uJ3QKbmVlZCBldmFsdWF0aW9uIG9mIHRo ZSBhcmd1bWVudHMsIG9yIGV2ZW4gYmV0dGVyLCB0aGUgYGFsbG91dC1sYXlvdXQnCnZhcmlhYmxl LWtleWVkIG1vZGUtYWN0aXZhdGlvbi9hdXRvLWV4cG9zdXJlIGZlYXR1cmUgb2YgYWxsb3V0IG91 dGxpbmUKbW9kZS4gIFNlZSB0aGUgcmVzcGVjdGl2ZSBkb2N1bWVudGF0aW9uIHN0cmluZ3MgZm9y IG1vcmUgZGV0YWlscy4KCkN1cnNvciBpcyBsZWZ0IGF0IHN0YXJ0IHBvc2l0aW9uLgoKU1BFQyBp cyBlaXRoZXIgYSBudW1iZXIgb3IgYSBsaXN0LgoKU3VjY2Vzc2l2ZSBzcGVjcyBvbiBhIGxpc3Qg YXJlIGFwcGxpZWQgdG8gc3VjY2Vzc2l2ZSBzaWJsaW5nIHRvcGljcy4KCkEgc2ltcGxlIHNwZWMg XChlaXRoZXIgYSBudW1iZXIsIG9uZSBvZiBhIGZldyBzeW1ib2xzLCBvciB0aGUgbnVsbApsaXN0 KSBkaWN0YXRlcyB0aGUgZXhwb3N1cmUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHRvcGljLgoKTm9u LW51bGwgbGlzdHMgcmVjdXJzaXZlbHkgZGVzaWduYXRlIGV4cG9zdXJlIHNwZWNzIGZvciByZXNw ZWN0aXZlCnN1YnRvcGljcyBvZiB0aGUgY3VycmVudCB0b3BpYy4KClRoZSBgOicgcmVwZWF0IHNw ZWMgaXMgdXNlZCB0byBzcGVjaWZ5IGV4cG9zdXJlIGZvciBhbnkgbnVtYmVyIG9mCnN1Y2Nlc3Np dmUgc2libGluZ3MsIHVwIHRvIHRoZSB0cmFpbGluZyBvbmVzIGZvciB3aGljaCB0aGVyZSBhcmUK ZXhwbGljaXQgc3BlY3MgZm9sbG93aW5nIHRoZSBgOicuCgpTaW1wbGUgKG51bWVyaWMgYW5kIG51 bGwtbGlzdCkgc3BlY3MgYXJlIGludGVycHJldGVkIGFzIGZvbGxvd3M6CgogTnVtYmVycyBpbmRp Y2F0ZSB0aGUgcmVsYXRpdmUgZGVwdGggdG8gb3BlbiB0aGUgY29ycmVzcG9uZGluZyB0b3BpYy4K ICAgICAtIG5lZ2F0aXZlIG51bWJlcnMgZm9yY2UgdGhlIHRvcGljIHRvIGJlIGNsb3NlZCBiZWZv cmUgb3BlbmluZyB0byB0aGUKICAgICAgIGFic29sdXRlIHZhbHVlIG9mIHRoZSBudW1iZXIsIHNv IGFsbCBzaWJsaW5ncyBhcmUgb3BlbiBvbmx5IHRvCiAgICAgICB0aGF0IGxldmVsLgogICAgIC0g cG9zaXRpdmUgbnVtYmVycyBvcGVuIHRvIHRoZSByZWxhdGl2ZSBkZXB0aCBpbmRpY2F0ZWQgYnkg dGhlCiAgICAgICBudW1iZXIsIGJ1dCBkbyBub3QgZm9yY2UgYWxyZWFkeSBvcGVuZWQgc3VidG9w aWNzIHRvIGJlIGNsb3NlZC4KICAgICAtIDAgbWVhbnMgdG8gY2xvc2UgdG9waWMgLSBoaWRlIGFs bCBvZmZzcHJpbmcuCiAgOiAgLSBgcmVwZWF0JwogICAgICAgYXBwbHkgcHJpb3IgZWxlbWVudCB0 byBhbGwgc2libGluZ3MgYXQgY3VycmVudCBsZXZlbCwgKnVwIHRvKgogICAgICAgdGhvc2Ugc2li bGluZ3MgdGhhdCB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHNwZWNzIGZvbGxvd2luZyB0aGUgYDonCiAg ICAgICBvbiB0aGUgbGlzdC4gIEllLCBhcHBseSB0byBhbGwgdG9waWNzIGF0IGxldmVsIGJ1dCB0 aGUgbGFzdAogICAgICAgb25lcy4gIFwoT25seSBmaXJzdCBvZiBtdWx0aXBsZSBjb2xvbnMgYXQg c2FtZSBsZXZlbCBpcwogICAgICAgcmVzcGVjdGVkIC0gc3Vic2VxdWVudCBvbmVzIGFyZSBkaXNj YXJkZWQuKQogICogIC0gY29tcGxldGVseSBvcGVucyB0aGUgdG9waWMsIGluY2x1ZGluZyBib2Rp ZXMuCiAgKyAgLSBzaG93cyBhbGwgdGhlIHN1YiBoZWFkZXJzLCBidXQgbm90IHRoZSBib2RpZXMK ICAtICAtIGV4cG9zZXMgdGhlIGJvZHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdG9waWMuCgpFeGFt cGxlczoKXChhbGxvdXQtZXhwb3NlLXRvcGljICcoLTEgOiAwKSkKCUNsb3NlIHRoaXMgYW5kIGFs bCBmb2xsb3dpbmcgdG9waWNzIGF0IGN1cnJlbnQgbGV2ZWwsIGV4cG9zaW5nCglvbmx5IHRoZWly IGltbWVkaWF0ZSBjaGlsZHJlbiwgYnV0IGNsb3NlIGRvd24gdGhlIGxhc3QgdG9waWMKCWF0IHRo aXMgY3VycmVudCBsZXZlbCBjb21wbGV0ZWx5LgpcKGFsbG91dC1leHBvc2UtdG9waWMgJygtMSAo KSA6IDEgMCkpCglDbG9zZSBjdXJyZW50IHRvcGljIHNvIG9ubHkgdGhlIGltbWVkaWF0ZSBzdWJ0 b3BpY3MgYXJlIHNob3duOwoJc2hvdyB0aGUgY2hpbGRyZW4gaW4gdGhlIHNlY29uZCB0byBsYXN0 IHRvcGljLCBhbmQgY29tcGxldGVseQoJY2xvc2UgdGhlIGxhc3Qgb25lLgpcKGFsbG91dC1leHBv c2UtdG9waWMgJygtMiA6IC0xICopKQogICAgICAgIEV4cG9zZSBjaGlsZHJlbiBhbmQgZ3JhbmRj aGlsZHJlbiBvZiBhbGwgdG9waWNzIGF0IGN1cnJlbnQKCWxldmVsIGV4Y2VwdCB0aGUgbGFzdCB0 d287IGV4cG9zZSBjaGlsZHJlbiBvZiB0aGUgc2Vjb25kIHRvCglsYXN0IGFuZCBjb21wbGV0ZWx5 IG9wZW4gdGhlIGxhc3Qgb25lLiIKCiAgKGludGVyYWN0aXZlICJ4RXhwb3N1cmUgc3BlYzogIikK ICAoaWYgKG5vdCAobGlzdHAgc3BlYykpCiAgICAgIG5pbAogICAgKGxldCAoKGRlcHRoIChhbGxv dXQtZGVwdGgpKQoJICAobWF4LXBvcyAwKQoJICBwcmV2LWVsZW0gY3Vyci1lbGVtCgkgIHN0YXkp CiAgICAgICh3aGlsZSBzcGVjCgkoc2V0cSBwcmV2LWVsZW0gY3Vyci1lbGVtCgkgICAgICBjdXJy LWVsZW0gKGNhciBzcGVjKQoJICAgICAgc3BlYyAoY2RyIHNwZWMpKQoJKGNvbmQJCQkJOyBEbyBj dXJyZW50IGVsZW1lbnQ6CgkgKChudWxsIGN1cnItZWxlbSkgbmlsKQoJICgoc3ltYm9scCBjdXJy LWVsZW0pCgkgIChjb25kICgoZXEgY3Vyci1lbGVtICcqKSAoYWxsb3V0LXNob3ctY3VycmVudC1z dWJ0cmVlKQoJCSAoaWYgKD4gYWxsb3V0LXJlY2VudC1lbmQtb2Ytc3VidHJlZSBtYXgtcG9zKQoJ CSAgICAgKHNldHEgbWF4LXBvcyBhbGxvdXQtcmVjZW50LWVuZC1vZi1zdWJ0cmVlKSkpCiAgICAg ICAgICAgICAgICAoKGVxIGN1cnItZWxlbSAnKykKICAgICAgICAgICAgICAgICAoaWYgKG5vdCAo YWxsb3V0LWhpZGRlbi1wKSkKICAgICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uIChh bGxvdXQtaGlkZS1jdXJyZW50LXN1YnRyZWUgdCkpKQogICAgICAgICAgICAgICAgIChhbGxvdXQt c2hvdy1jdXJyZW50LWJyYW5jaGVzKQoJCSAoaWYgKD4gYWxsb3V0LXJlY2VudC1lbmQtb2Ytc3Vi dHJlZSBtYXgtcG9zKQoJCSAgICAgKHNldHEgbWF4LXBvcyBhbGxvdXQtcmVjZW50LWVuZC1vZi1z dWJ0cmVlKSkpCgkJKChlcSBjdXJyLWVsZW0gJy0pIChhbGxvdXQtc2hvdy1jdXJyZW50LWVudHJ5 KSkKCQkoKGVxIGN1cnItZWxlbSAnOikKCQkgKHNldHEgc3RheSB0KQoJCSA7OyBFeHBhbmQgdGhl IGByZXBlYXQnIHNwZWMgdG8gYW4gZXhwbGljaXQgdmVyc2lvbiwKCQkgOzsgdy5yLnQuIHJlbWFp bmluZyBzaWJsaW5nczoKCQkgKGxldCAoKHJlc2lkdWUJICAgOyA9ICMgb2Ygc2licyBub3QgY292 ZXJlZCBieSByZW1haW5pbmcgc3BlYwoJCQk7OyBEYW5nIC0gY291bGQgYmUgbmljZSB0byBtYWtl IHVzZSBvZiB0aGUgY2hhcnQsIHNpZ2g6CgkJCSgtIChsZW5ndGggKGFsbG91dC1jaGFydC1zaWJs aW5ncykpCgkJCSAgIChsZW5ndGggc3BlYykpKSkKCQkgICAoaWYgKDwgMCByZXNpZHVlKQoJCSAg ICAgICA7OyBTb21lIHJlc2lkdWUgLSBjb3ZlciBpdCB3aXRoIHByZXYtZWxlbToKCQkgICAgICAg KHNldHEgc3BlYyAoYXBwZW5kIChtYWtlLWxpc3QgcmVzaWR1ZSBwcmV2LWVsZW0pCgkJCQkJICBz cGVjKSkpKSkpKQoJICgobnVtYmVycCBjdXJyLWVsZW0pCgkgIChpZiAoYW5kICg+PSAwIGN1cnIt ZWxlbSkgKG5vdCAoYWxsb3V0LWhpZGRlbi1wKSkpCgkgICAgICAoc2F2ZS1leGN1cnNpb24gKGFs bG91dC1oaWRlLWN1cnJlbnQtc3VidHJlZSB0KQoJCQkgICAgICAoaWYgKD4gMCBjdXJyLWVsZW0p CgkJCQkgIG5pbAoJCQkJKGlmICg+IGFsbG91dC1yZWNlbnQtZW5kLW9mLXN1YnRyZWUgbWF4LXBv cykKCQkJCSAgICAoc2V0cSBtYXgtcG9zCgkJCQkJICBhbGxvdXQtcmVjZW50LWVuZC1vZi1zdWJ0 cmVlKSkpKSkKCSAgKGlmICg+IChhYnMgY3Vyci1lbGVtKSAwKQoJICAgICAgKHByb2duIChhbGxv dXQtc2hvdy1jaGlsZHJlbiAoYWJzIGN1cnItZWxlbSkpCgkJICAgICAoaWYgKD4gYWxsb3V0LXJl Y2VudC1lbmQtb2Ytc3VidHJlZSBtYXgtcG9zKQoJCQkgKHNldHEgbWF4LXBvcyBhbGxvdXQtcmVj ZW50LWVuZC1vZi1zdWJ0cmVlKSkpKSkKCSAgKChsaXN0cCBjdXJyLWVsZW0pCgkgICAoaWYgKGFs bG91dC1kZXNjZW5kLXRvLWRlcHRoICgxKyBkZXB0aCkpCgkgICAgICAgKGxldCAoKGdvdCAoYWxs b3V0LWV4cG9zZS10b3BpYyBjdXJyLWVsZW0pKSkKCQkgKGlmIChhbmQgZ290ICg+IGdvdCBtYXgt cG9zKSkgKHNldHEgbWF4LXBvcyBnb3QpKSkpKSkKCShjb25kIChzdGF5IChzZXRxIHN0YXkgbmls KSkKCSAgICAgICgobGlzdHAgKGNhciBzcGVjKSkgbmlsKQoJICAgICAgKCg+IG1heC1wb3MgKHBv aW50KSkKCSAgICAgICA7OyBDYXBpdGFsaXplIG9uIG1heC1wb3Mgc3RhdGUgdG8gZ2V0IHVzIG5l YXJlciBuZXh0IHNpYmxpbmc6CgkgICAgICAgKHByb2duIChnb3RvLWNoYXIgKG1pbiAocG9pbnQt bWF4KSBtYXgtcG9zKSkKCQkgICAgICAoYWxsb3V0LW5leHQtaGVhZGluZykpKQoJICAgICAgKChh bGxvdXQtbmV4dC1zaWJsaW5nIGRlcHRoKSkpKQogICAgICBtYXgtcG9zKSkpCjs7O18gICA+IGFs bG91dC1vbGQtZXhwb3NlLXRvcGljIChzcGVjICZyZXN0IGZvbGxvd2VycykKKGRlZnVuIGFsbG91 dC1vbGQtZXhwb3NlLXRvcGljIChzcGVjICZyZXN0IGZvbGxvd2VycykKCiAgIkRlcHJlY2F0ZWQu ICBVc2UgYGFsbG91dC1leHBvc2UtdG9waWMnIFwod2l0aCBkaWZmZXJlbnQgc2NoZW1hCmZvcm1h dCkgaW5zdGVhZC4KCkRpY3RhdGUgd2hvbGVzYWxlIGV4cG9zdXJlIHNjaGVtZSBmb3IgY3VycmVu dCB0b3BpYywgYWNjb3JkaW5nIHRvIFNQRUMuCgpTUEVDIGlzIGVpdGhlciBhIG51bWJlciBvciBh IGxpc3QuICBPcHRpb25hbCBzdWNjZXNzaXZlIGFyZ3MKZGljdGF0ZSBleHBvc3VyZSBmb3Igc3Vi c2VxdWVudCBzaWJsaW5ncyBvZiBjdXJyZW50IHRvcGljLgoKQSBzaW1wbGUgc3BlYyAoZWl0aGVy IGEgbnVtYmVyLCBhIHNwZWNpYWwgc3ltYm9sLCBvciB0aGUgbnVsbCBsaXN0KQpkaWN0YXRlcyB0 aGUgb3ZlcmFsbCBleHBvc3VyZSBmb3IgYSB0b3BpYy4gIE5vbiBudWxsIGxpc3RzIGFyZQpjb21w b3NpdGUgc3BlY3Mgd2hvc2UgZmlyc3QgZWxlbWVudCBkaWN0YXRlcyB0aGUgb3ZlcmFsbCBleHBv c3VyZSBmb3IKYSB0b3BpYywgd2l0aCB0aGUgc3Vic2VxdWVudCBlbGVtZW50cyBpbiB0aGUgbGlz dCBpbnRlcnByZXRlZCBhcyBzcGVjcwp0aGF0IGRpY3RhdGUgdGhlIGV4cG9zdXJlIGZvciB0aGUg c3VjY2Vzc2l2ZSBvZmZzcHJpbmcgb2YgdGhlIHRvcGljLgoKU2ltcGxlIChudW1lcmljIGFuZCBu dWxsLWxpc3QpIHNwZWNzIGFyZSBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgoKIC0gTnVtYmVycyBp bmRpY2F0ZSB0aGUgcmVsYXRpdmUgZGVwdGggdG8gb3BlbiB0aGUgY29ycmVzcG9uZGluZyB0b3Bp YzoKICAtIG5lZ2F0aXZlIG51bWJlcnMgZm9yY2UgdGhlIHRvcGljIHRvIGJlIGNsb3NlIGJlZm9y ZSBvcGVuaW5nIHRvIHRoZQogICAgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlci4KICAtIHBv c2l0aXZlIG51bWJlcnMganVzdCBvcGVuIHRvIHRoZSByZWxhdGl2ZSBkZXB0aCBpbmRpY2F0ZWQg YnkgdGhlIG51bWJlci4KICAtIDAganVzdCBjbG9zZXMKIC0gYConIGNvbXBsZXRlbHkgb3BlbnMg dGhlIHRvcGljLCBpbmNsdWRpbmcgYm9kaWVzLgogLSBgKycgc2hvd3MgYWxsIHRoZSBzdWIgaGVh ZGVycywgYnV0IG5vdCB0aGUgYm9kaWVzCiAtIGAtJyBleHBvc2VzIHRoZSBib2R5IGFuZCBpbW1l ZGlhdGUgb2Zmc3ByaW5nIG9mIHRoZSBjb3JyZXNwb25kaW5nIHRvcGljLgoKSWYgdGhlIHNwZWMg aXMgYSBsaXN0LCB0aGUgZmlyc3QgZWxlbWVudCBtdXN0IGJlIGEgbnVtYmVyLCB3aGljaApkaWN0 YXRlcyB0aGUgZXhwb3N1cmUgZGVwdGggb2YgdGhlIHRvcGljIGFzIGEgd2hvbGUuICBTdWJzZXF1 ZW50CmVsZW1lbnRzIG9mIHRoZSBsaXN0IGFyZSBuZXN0ZWQgU1BFQ3MsIGRpY3RhdGluZyB0aGUg c3BlY2lmaWMgZXhwb3N1cmUKZm9yIHRoZSBjb3JyZXNwb25kaW5nIG9mZnNwcmluZyBvZiB0aGUg dG9waWMuCgpPcHRpb25hbCBGT0xMT1dFUlMgYXJndW1lbnRzIGRpY3RhdGUgZXhwb3N1cmUgZm9y IHN1Y2NlZWRpbmcgc2libGluZ3MuIgoKICAoaW50ZXJhY3RpdmUgInhFeHBvc3VyZSBzcGVjOiAi KQogIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uIHQpCiAgICAgICAgKGRlcHRoIChh bGxvdXQtY3VycmVudC1kZXB0aCkpCgltYXgtcG9zKQogICAgKGNvbmQgKChudWxsIHNwZWMpIG5p bCkKCSAgKChzeW1ib2xwIHNwZWMpCgkgICAoaWYgKGVxIHNwZWMgJyopIChhbGxvdXQtc2hvdy1j dXJyZW50LXN1YnRyZWUpKQoJICAgKGlmIChlcSBzcGVjICcrKSAoYWxsb3V0LXNob3ctY3VycmVu dC1icmFuY2hlcykpCgkgICAoaWYgKGVxIHNwZWMgJy0pIChhbGxvdXQtc2hvdy1jdXJyZW50LWVu dHJ5KSkpCgkgICgobnVtYmVycCBzcGVjKQoJICAgKGlmICg+PSAwIHNwZWMpCgkgICAgICAgKHNh dmUtZXhjdXJzaW9uIChhbGxvdXQtaGlkZS1jdXJyZW50LXN1YnRyZWUgdCkKCQkJICAgICAgIChl bmQtb2YtbGluZSkKCQkJICAgICAgIChpZiAob3IgKG5vdCBtYXgtcG9zKQoJCQkJICAgICAgICg+ IChwb2ludCkgbWF4LXBvcykpCgkJCQkgICAoc2V0cSBtYXgtcG9zIChwb2ludCkpKQoJCQkgICAg ICAgKGlmICg+IDAgc3BlYykKCQkJCSAgIChzZXRxIHNwZWMgKCogLTEgc3BlYykpKSkpCgkgICAo aWYgKD4gc3BlYyAwKQoJICAgICAoYWxsb3V0LXNob3ctY2hpbGRyZW4gc3BlYykpKQoJICAoKGxp c3RwIHNwZWMpCgkgICA7KGxldCAoKGdvdCAoYWxsb3V0LW9sZC1leHBvc2UtdG9waWMgKGNhciBz cGVjKSkpKQoJICAgOyAgKGlmIChhbmQgZ290IChvciAobm90IG1heC1wb3MpICg+IGdvdCBtYXgt cG9zKSkpCgkgICA7CSAoc2V0cSBtYXgtcG9zIGdvdCkpKQoJICAgKGxldCAoKG5ldy1kZXB0aCAg KCsgKGFsbG91dC1jdXJyZW50LWRlcHRoKSAxKSkKCQkgZ290KQoJICAgICAoc2V0cSBtYXgtcG9z IChhbGxvdXQtb2xkLWV4cG9zZS10b3BpYyAoY2FyIHNwZWMpKSkKCSAgICAgKHNldHEgc3BlYyAo Y2RyIHNwZWMpKQoJICAgICAoaWYgKGFuZCBzcGVjCgkJICAgICAgKGFsbG91dC1kZXNjZW5kLXRv LWRlcHRoIG5ldy1kZXB0aCkKCQkgICAgICAobm90IChhbGxvdXQtaGlkZGVuLXApKSkKCQkgKHBy b2duIChzZXRxIGdvdCAoYXBwbHkgJ2FsbG91dC1vbGQtZXhwb3NlLXRvcGljIHNwZWMpKQoJCQko aWYgKGFuZCBnb3QgKG9yIChub3QgbWF4LXBvcykgKD4gZ290IG1heC1wb3MpKSkKCQkJICAgIChz ZXRxIG1heC1wb3MgZ290KSkpKSkpKQogICAgKHdoaWxlIChhbmQgZm9sbG93ZXJzCgkJKHByb2du IChpZiAoYW5kIG1heC1wb3MgKDwgKHBvaW50KSBtYXgtcG9zKSkKCQkJICAgKHByb2duIChnb3Rv LWNoYXIgbWF4LXBvcykKCQkJCSAgKHNldHEgbWF4LXBvcyBuaWwpKSkKCQkgICAgICAgKGVuZC1v Zi1saW5lKQoJCSAgICAgICAoYWxsb3V0LW5leHQtc2libGluZyBkZXB0aCkpKQogICAgICAoYWxs b3V0LW9sZC1leHBvc2UtdG9waWMgKGNhciBmb2xsb3dlcnMpKQogICAgICAoc2V0cSBmb2xsb3dl cnMgKGNkciBmb2xsb3dlcnMpKSkKICAgIG1heC1wb3MpKQo7OztfICAgPiBhbGxvdXQtbmV3LWV4 cG9zdXJlICcoKQooZGVmbWFjcm8gYWxsb3V0LW5ldy1leHBvc3VyZSAoJnJlc3Qgc3BlYykKICAi TGl0ZXJhbCBmcm9udGVuZCBmb3IgYGFsbG91dC1leHBvc2UtdG9waWMnLCBkb2Vzbid0IGV2YWx1 YXRlIGFyZ3VtZW50cy4KU29tZSBhcmd1bWVudHMgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHF1b3Rl ZCBpbiBgYWxsb3V0LWV4cG9zZS10b3BpYycKbmVlZCBub3QgYmUgcXVvdGVkIGluIGBhbGxvdXQt bmV3LWV4cG9zdXJlJy4KCkN1cnNvciBpcyBsZWZ0IGF0IHN0YXJ0IHBvc2l0aW9uLgoKVXNlIHRo aXMgaW5zdGVhZCBvZiBvYnNvbGV0ZSBgYWxsb3V0LWV4cG9zdXJlJy4KCkV4YW1wbGVzOgpcKGFs bG91dC1uZXctZXhwb3N1cmUgKC0xICgpICgpICgpIDEpIDApCglDbG9zZSBjdXJyZW50IHRvcGlj IGF0IGN1cnJlbnQgbGV2ZWwgc28gb25seSB0aGUgaW1tZWRpYXRlCglzdWJ0b3BpY3MgYXJlIHNo b3duLCBleGNlcHQgYWxzbyBzaG93IHRoZSBjaGlsZHJlbiBvZiB0aGUKCXRoaXJkIHN1YnRvcGlj OyBhbmQgY2xvc2UgdGhlIG5leHQgdG9waWMgYXQgdGhlIGN1cnJlbnQgbGV2ZWwuClwoYWxsb3V0 LW5ldy1leHBvc3VyZSA6IC0xIDApCglDbG9zZSBhbGwgdG9waWNzIGF0IGN1cnJlbnQgbGV2ZWwg dG8gZXhwb3NlIG9ubHkgdGhlaXIKCWltbWVkaWF0ZSBjaGlsZHJlbiwgZXhjZXB0IGZvciB0aGUg bGFzdCB0b3BpYyBhdCB0aGUgY3VycmVudAoJbGV2ZWwsIGluIHdoaWNoIGV2ZW4gaXRzIGltbWVk aWF0ZSBjaGlsZHJlbiBhcmUgaGlkZGVuLgpcKGFsbG91dC1uZXctZXhwb3N1cmUgLTIgOiAtMSAq KQogICAgICAgIEV4cG9zZSBjaGlsZHJlbiBhbmQgZ3JhbmRjaGlsZHJlbiBvZiBmaXJzdCB0b3Bp YyBhdCBjdXJyZW50CglsZXZlbCwgYW5kIGV4cG9zZSBjaGlsZHJlbiBvZiBzdWJzZXF1ZW50IHRv cGljcyBhdCBjdXJyZW50CglsZXZlbCAqZXhjZXB0KiBmb3IgdGhlIGxhc3QsIHdoaWNoIHNob3Vs ZCBiZSBvcGVuZWQgY29tcGxldGVseS4iCiAgKGxpc3QgJ3NhdmUtZXhjdXJzaW9uCgknKGlmIChu b3QgKG9yIChhbGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tlZCkKCQkgICAgICAoYWxsb3V0 LW5leHQtaGVhZGluZykpKQoJICAgICAoZXJyb3IgImFsbG91dC1uZXctZXhwb3N1cmU6IENhbid0 IGZpbmQgYW55IG91dGxpbmUgdG9waWNzIikpCgkobGlzdCAnYWxsb3V0LWV4cG9zZS10b3BpYyAo bGlzdCAncXVvdGUgc3BlYykpKSkKCjs7O18gIzcgU3lzdGVtYXRpYyBvdXRsaW5lIHByZXNlbnRh dGlvbiAtIGNvcHlpbmcsIHByaW50aW5nLCBmbGF0dGVuaW5nCgo7OztfICAtIE1hcHBpbmcgYW5k IHByb2Nlc3Npbmcgb2YgdG9waWNzCjs7O18gICAoIFNlZSBhbHNvIFN1YnRyZWUgQ2hhcnRpbmcs IGluIE5hdmlnYXRpb24gY29kZS4pCjs7O18gICA+IGFsbG91dC1zdHJpbmdpZnktZmxhdC1pbmRl eCAoZmxhdC1pbmRleCkKKGRlZnVuIGFsbG91dC1zdHJpbmdpZnktZmxhdC1pbmRleCAoZmxhdC1p bmRleCAmb3B0aW9uYWwgY29udGV4dCkKICAiQ29udmVydCBsaXN0IHJlcHJlc2VudGluZyBzZWN0 aW9uL3N1YnNlY3Rpb24vLi4uIHRvIGRvY3VtZW50IHN0cmluZy4KCk9wdGlvbmFsIGFyZyBDT05U RVhUIGluZGljYXRlcyBpbnRlcmlvciBsZXZlbHMgdG8gaW5jbHVkZS4iCiAgKGxldCAoKGRlbGlt ICIuIikKCXJlc3VsdAoJbnVtc3RyCgkoY29udGV4dC1kZXB0aCAob3IgKGFuZCBjb250ZXh0IDIp IDEpKSkKICAgIDs7IFRha2UgY2FyZSBvZiB0aGUgZXhwbGljaXQgY29udGV4dDoKICAgICh3aGls ZSAoPiBjb250ZXh0LWRlcHRoIDApCiAgICAgIChzZXRxIG51bXN0ciAoaW50LXRvLXN0cmluZyAo Y2FyIGZsYXQtaW5kZXgpKQoJICAgIGZsYXQtaW5kZXggKGNkciBmbGF0LWluZGV4KQoJICAgIHJl c3VsdCAoaWYgZmxhdC1pbmRleAoJCSAgICAgICAoY29ucyBkZWxpbSAoY29ucyBudW1zdHIgcmVz dWx0KSkKCQkgICAgICAgKGNvbnMgbnVtc3RyIHJlc3VsdCkpCgkgICAgY29udGV4dC1kZXB0aCAo aWYgZmxhdC1pbmRleCAoMS0gY29udGV4dC1kZXB0aCkgMCkpKQogICAgKHNldHEgZGVsaW0gIiAi KQogICAgOzsgVGFrZSBjYXJlIG9mIHRoZSBpbmRlbnRhdGlvbjoKICAgIChpZiBmbGF0LWluZGV4 CgkocHJvZ24KCSAgKHdoaWxlIGZsYXQtaW5kZXgKCSAgICAoc2V0cSByZXN1bHQKCQkgIChjb25z IGRlbGltCgkJCShjb25zIChtYWtlLXN0cmluZwoJCQkgICAgICAgKDErICh0cnVuY2F0ZSAoaWYg KHplcm9wIChjYXIgZmxhdC1pbmRleCkpCgkJCQkJCSAxCgkJCQkJICAgICAgIChsb2cxMCAoY2Fy IGZsYXQtaW5kZXgpKSkpKQoJCQkgICAgICAgPyApCgkJCSAgICAgIHJlc3VsdCkpKQoJICAgIChz ZXRxIGZsYXQtaW5kZXggKGNkciBmbGF0LWluZGV4KSkpCgkgIDs7IERpc3Bvc2Ugb2Ygc2luZ2xl IGV4dHJhIGRlbGltOgoJICAoc2V0cSByZXN1bHQgKGNkciByZXN1bHQpKSkpCiAgICAoYXBwbHkg J2NvbmNhdCByZXN1bHQpKSkKOzs7XyAgID4gYWxsb3V0LXN0cmluZ2lmeS1mbGF0LWluZGV4LXBs YWluIChmbGF0LWluZGV4KQooZGVmdW4gYWxsb3V0LXN0cmluZ2lmeS1mbGF0LWluZGV4LXBsYWlu IChmbGF0LWluZGV4KQogICJDb252ZXJ0IGxpc3QgcmVwcmVzZW50aW5nIHNlY3Rpb24vc3Vic2Vj dGlvbi8uLi4gdG8gZG9jdW1lbnQgc3RyaW5nLiIKICAobGV0ICgoZGVsaW0gIi4iKQoJcmVzdWx0 KQoJKHdoaWxlIGZsYXQtaW5kZXgKCSAgKHNldHEgcmVzdWx0IChjb25zIChpbnQtdG8tc3RyaW5n IChjYXIgZmxhdC1pbmRleCkpCgkJCSAgICAgKGlmIHJlc3VsdAoJCQkJIChjb25zIGRlbGltIHJl c3VsdCkpKSkKCSAgKHNldHEgZmxhdC1pbmRleCAoY2RyIGZsYXQtaW5kZXgpKSkKICAgIChhcHBs eSAnY29uY2F0IHJlc3VsdCkpKQo7OztfICAgPiBhbGxvdXQtc3RyaW5naWZ5LWZsYXQtaW5kZXgt aW5kZW50ZWQgKGZsYXQtaW5kZXgpCihkZWZ1biBhbGxvdXQtc3RyaW5naWZ5LWZsYXQtaW5kZXgt aW5kZW50ZWQgKGZsYXQtaW5kZXgpCiAgIkNvbnZlcnQgbGlzdCByZXByZXNlbnRpbmcgc2VjdGlv bi9zdWJzZWN0aW9uLy4uLiB0byBkb2N1bWVudCBzdHJpbmcuIgogIChsZXQgKChkZWxpbSAiLiIp CglyZXN1bHQKCW51bXN0cikKICAgIDs7IFRha2UgY2FyZSBvZiB0aGUgZXhwbGljaXQgY29udGV4 dDoKICAgIChzZXRxIG51bXN0ciAoaW50LXRvLXN0cmluZyAoY2FyIGZsYXQtaW5kZXgpKQoJICBm bGF0LWluZGV4IChjZHIgZmxhdC1pbmRleCkKCSAgcmVzdWx0IChpZiBmbGF0LWluZGV4CgkJICAg ICAoY29ucyBkZWxpbSAoY29ucyBudW1zdHIgcmVzdWx0KSkKCQkgICAoY29ucyBudW1zdHIgcmVz dWx0KSkpCiAgICAoc2V0cSBkZWxpbSAiICIpCiAgICA7OyBUYWtlIGNhcmUgb2YgdGhlIGluZGVu dGF0aW9uOgogICAgKGlmIGZsYXQtaW5kZXgKCShwcm9nbgoJICAod2hpbGUgZmxhdC1pbmRleAoJ ICAgIChzZXRxIHJlc3VsdAoJCSAgKGNvbnMgZGVsaW0KCQkJKGNvbnMgKG1ha2Utc3RyaW5nCgkJ CSAgICAgICAoMSsgKHRydW5jYXRlIChpZiAoemVyb3AgKGNhciBmbGF0LWluZGV4KSkKCQkJCQkJ IDEKCQkJCQkgICAgICAgKGxvZzEwIChjYXIgZmxhdC1pbmRleCkpKSkpCgkJCSAgICAgICA/ICkK CQkJICAgICAgcmVzdWx0KSkpCgkgICAgKHNldHEgZmxhdC1pbmRleCAoY2RyIGZsYXQtaW5kZXgp KSkKCSAgOzsgRGlzcG9zZSBvZiBzaW5nbGUgZXh0cmEgZGVsaW06CgkgIChzZXRxIHJlc3VsdCAo Y2RyIHJlc3VsdCkpKSkKICAgIChhcHBseSAnY29uY2F0IHJlc3VsdCkpKQo7OztfICAgPiBhbGxv dXQtbGlzdGlmeS1leHBvc2VkICgmb3B0aW9uYWwgc3RhcnQgZW5kIGZvcm1hdCkKKGRlZnVuIGFs bG91dC1saXN0aWZ5LWV4cG9zZWQgKCZvcHRpb25hbCBzdGFydCBlbmQgZm9ybWF0KQoKICAiUHJv ZHVjZSBhIGxpc3QgcmVwcmVzZW50aW5nIGV4cG9zZWQgdG9waWNzIGluIGN1cnJlbnQgcmVnaW9u LgoKVGhpcyBsaXN0IGNhbiB0aGVuIGJlIHVzZWQgYnkgYGFsbG91dC1wcm9jZXNzLWV4cG9zZWQn IHRvIG1hbmlwdWxhdGUKdGhlIHN1YmplY3QgcmVnaW9uLgoKT3B0aW9uYWwgU1RBUlQgYW5kIEVO RCBpbmRpY2F0ZSBib3VuZHMgb2YgcmVnaW9uLgoKb3B0aW9uYWwgYXJnLCBGT1JNQVQsIGRlc2ln bmF0ZXMgYW4gYWx0ZXJuYXRlIHByZXNlbnRhdGlvbiBmb3JtIGZvcgp0aGUgcHJlZml4OgoKIGxp c3QgLSBQcmVzZW50IHByZWZpeCBhcyBudW1lcmljIHNlY3Rpb24uc3Vic2VjdGlvbi4uLiwgc3Rh cnRpbmcgd2l0aAoJc2VjdGlvbiBpbmRpY2F0ZWQgYnkgdGhlIGxpc3QsIGlubmVybW9zdCBuZXN0 aW5nIGZpcnN0LgogYGluZGVudCcgXChzeW1ib2wpIC0gIENvbnZlcnQgaGVhZGVyIHByZWZpeGVz IHRvIGFsbCB3aGl0ZSBzcGFjZSwKCQkgICAgICAgZXhjZXB0IGZvciBkaXN0aW5jdGl2ZSBidWxs ZXRzLgoKVGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0IHByb2R1Y2VkIGFyZSBsaXN0cyB0aGF0IHJl cHJlc2VudHMgYSB0b3BpYwpoZWFkZXIgYW5kIGJvZHkuICBUaGUgZWxlbWVudHMgb2YgdGhhdCBs aXN0IGFyZToKCiAtIGEgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgZGVwdGggb2YgdGhlIHRvcGlj LAogLSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGhlYWRlci1wcmVmaXgsIGluY2x1ZGluZyB0 cmFpbGluZyB3aGl0ZXNwYWNlIGFuZAogICBidWxsZXQuCiAtIGEgc3RyaW5nIHJlcHJlc2VudGlu ZyB0aGUgYnVsbGV0IGNoYXJhY3RlciwKIC0gYW5kIGEgc2VyaWVzIG9mIHN0cmluZ3MsIGVhY2gg Y29udGFpbmluZyBvbmUgbGluZSBvZiB0aGUgZXhwb3NlZAogICBwb3J0aW9uIG9mIHRoZSB0b3Bp YyBlbnRyeS4iCgogIChpbnRlcmFjdGl2ZSAiciIpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAobGV0 KgogICAgICAgICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KQogICAgICAgICA7OyBzdGF0 ZSB2YXJzOgogICAgICAgICBzdHJpbmdzIHByZWZpeCByZXN1bHQgZGVwdGggbmV3LWRlcHRoIG91 dCBnb25lLW91dCBidWxsZXQgYmVnCgkJIG5leHQgZG9uZSkKCiAgICAgIChnb3RvLWNoYXIgc3Rh cnQpCiAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKICAgICAgOzsgR290byBpbml0aWFsIHRvcGlj LCBhbmQgcmVnaXN0ZXIgcHJlY2VlZGluZyBzdHVmZiwgaWYgYW55OgogICAgICAoaWYgKD4gKGFs bG91dC1nb3RvLXByZWZpeC1kb3VibGVjaGVja2VkKSBzdGFydCkKCSAgOzsgRmlyc3QgdG9waWMg Zm9sbG93cyBiZWdpbm5pbmcgcG9pbnQgLSByZWdpc3RlciBwcmVsaW1pbmFyeSBzdHVmZjoKCSAg KHNldHEgcmVzdWx0IChsaXN0IChsaXN0IDAgIiIgbmlsCgkJCQkgICAoYnVmZmVyLXN1YnN0cmlu ZyBzdGFydCAoMS0gKHBvaW50KSkpKSkpKQogICAgICAod2hpbGUgKGFuZCAobm90IGRvbmUpCgkJ ICAobm90IChlb2JwKSkJCTsgTG9vcCB1bnRpbCB3ZSd2ZSBjb3ZlcmVkIHRoZSByZWdpb24uCgkJ ICAobm90ICg+IChwb2ludCkgZW5kKSkpCgkoc2V0cSBkZXB0aCBhbGxvdXQtcmVjZW50LWRlcHRo IAk7IEN1cnJlbnQgdG9waWNzIGRlcHRoLAoJICAgICAgYnVsbGV0IChhbGxvdXQtcmVjZW50LWJ1 bGxldCkJOyAuLi4gYnVsbGV0LAoJICAgICAgcHJlZml4IChhbGxvdXQtcmVjZW50LXByZWZpeCkK CSAgICAgIGJlZyAocHJvZ24gKGFsbG91dC1lbmQtb2YtcHJlZml4IHQpIChwb2ludCkpKSA7IGFu ZCBiZWdpbm5pbmcuCgkoc2V0cSBkb25lCQkJOyBUaGUgYm91bmRhcnkgZm9yIHRoZSBjdXJyZW50 IHRvcGljOgoJICAgICAgKG5vdCAoYWxsb3V0LW5leHQtdmlzaWJsZS1oZWFkaW5nIDEpKSkKCShz ZXRxIG5ldy1kZXB0aCBhbGxvdXQtcmVjZW50LWRlcHRoKQoJKHNldHEgZ29uZS1vdXQgb3V0Cgkg ICAgICBvdXQgKDwgbmV3LWRlcHRoIGRlcHRoKSkKCShiZWdpbm5pbmctb2YtbGluZSkKCShzZXRx IG5leHQgKHBvaW50KSkKCShnb3RvLWNoYXIgYmVnKQoJKHNldHEgc3RyaW5ncyBuaWwpCgkod2hp bGUgKD4gbmV4dCAocG9pbnQpKQkJOyBHZXQgYWxsIHRoZSBleHBvc2VkIHRleHQgaW4KCSAgKHNl dHEgc3RyaW5ncwoJCShjb25zIChidWZmZXItc3Vic3RyaW5nCgkJICAgICAgIGJlZwoJCQkJCTtU byBoaWRkZW4gdGV4dCBvciBlbmQgb2YgbGluZToKCQkgICAgICAgKHByb2duCiAgICAgICAgICAg ICAgICAgICAgICAgICAoZW5kLW9mLWxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAoYWxs b3V0LWJhY2stdG8tdmlzaWJsZS10ZXh0KSkpCgkJICAgICAgc3RyaW5ncykpCgkgICh3aGVuICg8 IChwb2ludCkgbmV4dCkgICAgICA7IFJlc3VtZSBmcm9tIGFmdGVyIGhpZCB0ZXh0LCBpZiBhbnku CiAgICAgICAgICAgIChsaW5lLW1vdmUgMSkKICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5l KSkKCSAgKHNldHEgYmVnIChwb2ludCkpKQoJOzsgQWNjdW11bGF0ZSBsaXN0IGZvciB0aGlzIHRv cGljOgoJKHNldHEgc3RyaW5ncyAobnJldmVyc2Ugc3RyaW5ncykpCgkoc2V0cSByZXN1bHQKCSAg ICAgIChjb25zCgkgICAgICAgKGlmIGZvcm1hdAoJCSAgIChsZXQgKChzcGVjaWFsIChpZiAoc3Ry aW5nLW1hdGNoCgkJCQkgICAgICAgKHJlZ2V4cC1xdW90ZSBidWxsZXQpCgkJCQkgICAgICAgYWxs b3V0LWRpc3RpbmN0aXZlLWJ1bGxldHMtc3RyaW5nKQoJCQkJICAgICAgYnVsbGV0KSkpCgkJICAg ICAoY29uZCAoKGxpc3RwIGZvcm1hdCkKCQkJICAgIChsaXN0IGRlcHRoCgkJCQkgIChpZiBhbGxv dXQtYWJicmV2aWF0ZS1mbGF0dGVuZWQtbnVtYmVyaW5nCgkJCQkgICAgICAoYWxsb3V0LXN0cmlu Z2lmeS1mbGF0LWluZGV4IGZvcm1hdAoJCQkJCQkJCSAgICBnb25lLW91dCkKCQkJCSAgICAgIChh bGxvdXQtc3RyaW5naWZ5LWZsYXQtaW5kZXgtcGxhaW4KCQkJCSAgICAgICBmb3JtYXQpKQoJCQkJ ICBzdHJpbmdzCgkJCQkgIHNwZWNpYWwpKQoJCQkgICAoKGVxIGZvcm1hdCAnaW5kZW50KQoJCQkg ICAgKGlmIHNwZWNpYWwKCQkJCShsaXN0IGRlcHRoCgkJCQkgICAgICAoY29uY2F0IChtYWtlLXN0 cmluZyAoMSsgZGVwdGgpID8gKQoJCQkJCSAgICAgIChzdWJzdHJpbmcgcHJlZml4IC0xKSkKCQkJ CSAgICAgIHN0cmluZ3MpCgkJCSAgICAgIChsaXN0IGRlcHRoCgkJCQkgICAgKG1ha2Utc3RyaW5n IGRlcHRoID8gKQoJCQkJICAgIHN0cmluZ3MpKSkKCQkJICAgKHQgKGVycm9yICJhbGxvdXQtbGlz dGlmeS1leHBvc2VkOiAlcyAlcyIKCQkJCSAgICAgImludmFsaWQgZm9ybWF0IiBmb3JtYXQpKSkp CgkJIChsaXN0IGRlcHRoIHByZWZpeCBzdHJpbmdzKSkKCQkgICAgcmVzdWx0KSkKCTs7IFJlYXNz ZXMgZm9ybWF0LCBpZiBhbnk6CgkoaWYgKGFuZCBmb3JtYXQgKGxpc3RwIGZvcm1hdCkpCgkgICAg KGNvbmQgKCg9IG5ldy1kZXB0aCBkZXB0aCkKCQkgICAoc2V0cSBmb3JtYXQgKGNvbnMgKDErIChj YXIgZm9ybWF0KSkKCQkJCQkgIChjZHIgZm9ybWF0KSkpKQoJCSAgKCg+IG5ldy1kZXB0aCBkZXB0 aCkJOyBkZXNjZW5kaW5nIC0gYXNzdW1lIGJ5IDE6CgkJICAgKHNldHEgZm9ybWF0IChjb25zIDEg Zm9ybWF0KSkpCgkJICAodAoJCQkJCTsgUG9wIHRoZSByZXNpZHVlOgoJCSAgICh3aGlsZSAoPCBu ZXctZGVwdGggZGVwdGgpCgkJICAgICAgIChzZXRxIGZvcm1hdCAoY2RyIGZvcm1hdCkpCgkJICAg ICAgIChzZXRxIGRlcHRoICgxLSBkZXB0aCkpKQoJCQkJCTsgQW5kIGluY3JlbWVudCB0aGUgY3Vy cmVudCBvbmU6CgkJICAgICAoc2V0cSBmb3JtYXQKCQkJICAgKGNvbnMgKDErIChvciAoY2FyIGZv cm1hdCkKCQkJCQkgLTEpKQoJCQkJIChjZHIgZm9ybWF0KSkpKSkpKQogICAgICA7OyBQdXQgdGhl IGxpc3Qgd2l0aCBmaXJzdCBhdCBmcm9udCwgdG8gbGFzdCBhdCBiYWNrOgogICAgICAobnJldmVy c2UgcmVzdWx0KSkpKQo7OztfICAgPiBteS1yZWdpb24tYWN0aXZlLXAgKCkKKGRlZm1hY3JvIG15 LXJlZ2lvbi1hY3RpdmUtcCAoKQogIChpZiAoZmJvdW5kcCAncmVnaW9uLWFjdGl2ZS1wKQogICAg ICAnKHJlZ2lvbi1hY3RpdmUtcCkKICAgICdtYXJrLWFjdGl2ZSkpCjs7O18gICA+IGFsbG91dC1w cm9jZXNzLWV4cG9zZWQgKCZvcHRpb25hbCBmdW5jIGZyb20gdG8gZnJvbWJ1Zgo7OzsJCQkJCSAg ICB0b2J1ZiBmb3JtYXQpCihkZWZ1biBhbGxvdXQtcHJvY2Vzcy1leHBvc2VkICgmb3B0aW9uYWwg ZnVuYyBmcm9tIHRvIGZyb21idWYgdG9idWYKCQkJCQkgIGZvcm1hdCBzdGFydC1udW0pCiAgIk1h cCBmdW5jdGlvbiBvbiBleHBvc2VkIHBhcnRzIG9mIGN1cnJlbnQgdG9waWM7IHJlc3VsdHMgdG8g YW5vdGhlciBidWZmZXIuCgpBbGwgYXJncyBhcmUgb3B0aW9uczsgZGVmYXVsdCB2YWx1ZXMgaXRl bWl6ZWQgYmVsb3cuCgpBcHBseSBGVU5DVElPTiB0byBleHBvc2VkIHBvcnRpb25zIEZST00gcG9z aXRpb24gVE8gcG9zaXRpb24gaW4gYnVmZmVyCkZST01CVUYgdG8gYnVmZmVyIFRPQlVGLiAgU2l4 dGggb3B0aW9uYWwgYXJnLCBGT1JNQVQsIGRlc2lnbmF0ZXMgYW4KYWx0ZXJuYXRlIHByZXNlbnRh dGlvbiBmb3JtOgoKIGBmbGF0JyAtIFByZXNlbnQgcHJlZml4IGFzIG51bWVyaWMgc2VjdGlvbi5z dWJzZWN0aW9uLi4uLCBzdGFydGluZyB3aXRoCgkgc2VjdGlvbiBpbmRpY2F0ZWQgYnkgdGhlIHN0 YXJ0LW51bSwgaW5uZXJtb3N0IG5lc3RpbmcgZmlyc3QuCiBYYGZsYXQtaW5kZW50ZWQnIC0gUHJl Zml4IGlzIGxpa2UgYGZsYXQnIGZvciBmaXJzdCB0b3BpYyBhdCBlYWNoCiBYCQkgICBsZXZlbCwg YnV0IHN1YnNlcXVlbnQgdG9waWNzIGhhdmUgb25seSBsZWFmIHRvcGljCiBYCQkgICBudW1iZXIs IHBhZGRlZCB3aXRoIGJsYW5rcyB0byBsaW5lIHVwIHdpdGggZmlyc3QuCiBgaW5kZW50JyBcKHN5 bWJvbCkgLSAgQ29udmVydCBoZWFkZXIgcHJlZml4ZXMgdG8gYWxsIHdoaXRlIHNwYWNlLAoJCSAg ICAgICBleGNlcHQgZm9yIGRpc3RpbmN0aXZlIGJ1bGxldHMuCgpEZWZhdWx0czoKICBGVU5DVElP TjoJYGFsbG91dC1pbnNlcnQtbGlzdGlmaWVkJwogIEZST006CQlyZWdpb24gc3RhcnQsIGlmIHJl Z2lvbiBhY3RpdmUsIGVsc2Ugc3RhcnQgb2YgYnVmZmVyCiAgVE86CQlyZWdpb24gZW5kLCBpZiBy ZWdpb24gYWN0aXZlLCBlbHNlIGVuZCBvZiBidWZmZXIKICBGUk9NQlVGOgljdXJyZW50IGJ1ZmZl cgogIFRPQlVGOglidWZmZXIgbmFtZSBkZXJpdmVkOiBcIipjdXJyZW50LWJ1ZmZlci1uYW1lIGV4 cG9zZWQqXCIKICBGT1JNQVQ6CW5pbCIKCgkJCQkJOyBSZXNvbHZlIGFyZ3VtZW50cywKCQkJCQk7 IGRlZmF1bHRpbmcgaWYgbmVjZXNzYXJ5OgogIChpZiAobm90IGZ1bmMpIChzZXRxIGZ1bmMgJ2Fs bG91dC1pbnNlcnQtbGlzdGlmaWVkKSkKICAoaWYgKG5vdCAoYW5kIGZyb20gdG8pKQogICAgICAo aWYgKG15LXJlZ2lvbi1hY3RpdmUtcCkKCSAgKHNldHEgZnJvbSAocmVnaW9uLWJlZ2lubmluZykg dG8gKHJlZ2lvbi1lbmQpKQoJKHNldHEgZnJvbSAocG9pbnQtbWluKSB0byAocG9pbnQtbWF4KSkp KQogIChpZiBmcm9tYnVmCiAgICAgIChpZiAobm90IChidWZmZXJwIGZyb21idWYpKQoJICA7OyBT cGVjaWZpZWQgYnV0IG5vdCBhIGJ1ZmZlciAtIGdldCBpdDoKCSAgKGxldCAoKGdvdCAoZ2V0LWJ1 ZmZlciBmcm9tYnVmKSkpCgkgICAgKGlmIChub3QgZ290KQoJCShlcnJvciAoY29uY2F0ICJhbGxv dXQtcHJvY2Vzcy1leHBvc2VkOiBzb3VyY2UgYnVmZmVyICIKCQkJICAgICAgIGZyb21idWYKCQkJ ICAgICAgICIgbm90IGZvdW5kLiIpKQoJICAgICAgKHNldHEgZnJvbWJ1ZiBnb3QpKSkpCiAgICA7 OyBub3Qgc3BlY2lmaWVkIC0gZGVmYXVsdCBpdDoKICAgIChzZXRxIGZyb21idWYgKGN1cnJlbnQt YnVmZmVyKSkpCiAgKGlmIHRvYnVmCiAgICAgIChpZiAobm90IChidWZmZXJwIHRvYnVmKSkKCSAg KHNldHEgdG9idWYgKGdldC1idWZmZXItY3JlYXRlIHRvYnVmKSkpCiAgICA7OyBub3Qgc3BlY2lm aWVkIC0gZGVmYXVsdCBpdDoKICAgIChzZXRxIHRvYnVmIChjb25jYXQgIioiIChidWZmZXItbmFt ZSBmcm9tYnVmKSAiIGV4cG9zZWQqIikpKQogIChpZiAobGlzdHAgZm9ybWF0KQogICAgICAobnJl dmVyc2UgZm9ybWF0KSkKCiAgKGxldCogKChsaXN0aWZpZWQKCSAgKHByb2duIChzZXQtYnVmZmVy IGZyb21idWYpCgkJIChhbGxvdXQtbGlzdGlmeS1leHBvc2VkIGZyb20gdG8gZm9ybWF0KSkpKQog ICAgKHNldC1idWZmZXIgdG9idWYpCiAgICAobWFwY2FyIGZ1bmMgbGlzdGlmaWVkKQogICAgKHBv cC10by1idWZmZXIgdG9idWYpKSkKCjs7O18gIC0gQ29weSBleHBvc2VkCjs7O18gICA+IGFsbG91 dC1pbnNlcnQtbGlzdGlmaWVkIChsaXN0aWZpZWQpCihkZWZ1biBhbGxvdXQtaW5zZXJ0LWxpc3Rp ZmllZCAobGlzdGlmaWVkKQogICJJbnNlcnQgY29udGVudHMgb2YgbGlzdGlmaWVkIG91dGxpbmUg cG9ydGlvbiBpbiBjdXJyZW50IGJ1ZmZlci4KCkxJU1RJRklFRCBpcyBhIGxpc3QgcmVwcmVzZW50 aW5nIGVhY2ggdG9waWMgaGVhZGVyIGFuZCBib2R5OgoKIFxgKGRlcHRoIHByZWZpeCB0ZXh0KScK Cm9yIFxgKGRlcHRoIHByZWZpeCB0ZXh0IGJ1bGxldC1wbHVzKScKCklmIGBidWxsZXQtcGx1cycg aXMgc3BlY2lmaWVkLCBpdCBpcyBpbnNlcnRlZCBqdXN0IGFmdGVyIHRoZSBlbnRpcmUgcHJlZml4 LiIKICAoc2V0cSBsaXN0aWZpZWQgKGNkciBsaXN0aWZpZWQpKQogIChsZXQgKChwcmVmaXggKHBy b2cxCgkJICAgIChjYXIgbGlzdGlmaWVkKQoJCSAgKHNldHEgbGlzdGlmaWVkIChjZHIgbGlzdGlm aWVkKSkpKQoJKHRleHQgKHByb2cxCgkJICAoY2FyIGxpc3RpZmllZCkKCQkoc2V0cSBsaXN0aWZp ZWQgKGNkciBsaXN0aWZpZWQpKSkpCgkoYnVsbGV0LXBsdXMgKGNhciBsaXN0aWZpZWQpKSkKICAg IChpbnNlcnQgcHJlZml4KQogICAgKGlmIGJ1bGxldC1wbHVzIChpbnNlcnQgKGNvbmNhdCAiICIg YnVsbGV0LXBsdXMpKSkKICAgICh3aGlsZSB0ZXh0CiAgICAgIChpbnNlcnQgKGNhciB0ZXh0KSkK ICAgICAgKGlmIChzZXRxIHRleHQgKGNkciB0ZXh0KSkKCSAgKGluc2VydCAiXG4iKSkpCiAgICAo aW5zZXJ0ICJcbiIpKSkKOzs7XyAgID4gYWxsb3V0LWNvcHktZXhwb3NlZC10by1idWZmZXIgKCZv cHRpb25hbCBhcmcgdG9idWYgZm9ybWF0KQooZGVmdW4gYWxsb3V0LWNvcHktZXhwb3NlZC10by1i dWZmZXIgKCZvcHRpb25hbCBhcmcgdG9idWYgZm9ybWF0KQogICJEdXBsaWNhdGUgZXhwb3NlZCBw b3J0aW9ucyBvZiBjdXJyZW50IG91dGxpbmUgdG8gYW5vdGhlciBidWZmZXIuCgpPdGhlciBidWZm ZXIgaGFzIGN1cnJlbnQgYnVmZmVycyBuYW1lIHdpdGggXCIgZXhwb3NlZFwiIGFwcGVuZGVkIHRv IGl0LgoKV2l0aCByZXBlYXQgY291bnQsIGNvcHkgdGhlIGV4cG9zZWQgcGFydHMgb2Ygb25seSB0 aGUgY3VycmVudCB0b3BpYy4KCk9wdGlvbmFsIHNlY29uZCBhcmcgVE9CVUYgaXMgdGFyZ2V0IGJ1 ZmZlciBuYW1lLgoKT3B0aW9uYWwgdGhpcmQgYXJnIEZPUk1BVCwgaWYgbm9uLW5pbCwgc3ltYm9s aWNhbGx5IGRlc2lnbmF0ZXMgYW4KYWx0ZXJuYXRlIHByZXNlbnRhdGlvbiBmb3JtYXQgZm9yIHRo ZSBvdXRsaW5lOgoKIGBmbGF0JyAgIC0gQ29udmVydCB0b3BpYyBoZWFkZXIgcHJlZml4ZXMgdG8g bnVtZXJpYwoJICAgIHNlY3Rpb24uc3Vic2VjdGlvbi4uLiBpZGVudGlmaWVycy4KIGBpbmRlbnQn IC0gQ29udmVydCBoZWFkZXIgcHJlZml4ZXMgdG8gYWxsIHdoaXRlIHNwYWNlLCBleGNlcHQgZm9y CgkgICAgZGlzdGluY3RpdmUgYnVsbGV0cy4KIGBpbmRlbnQtZmxhdCcgLSBUaGUgYmVzdCBvZiBi b3RoIC0gb25seSB0aGUgZmlyc3Qgb2YgZWFjaCBsZXZlbCBoYXMKCQkgdGhlIGZ1bGwgcGF0aCwg dGhlIHJlc3QgaGF2ZSBvbmx5IHRoZSBzZWN0aW9uIG51bWJlcgoJCSBvZiB0aGUgbGVhZiwgcHJl Y2VkZWQgYnkgdGhlIHJpZ2h0IGFtb3VudCBvZiBpbmRlbnRhdGlvbi4iCgogIChpbnRlcmFjdGl2 ZSAiUCIpCiAgKGlmIChub3QgdG9idWYpCiAgICAgIChzZXRxIHRvYnVmIChnZXQtYnVmZmVyLWNy ZWF0ZSAoY29uY2F0ICIqIiAoYnVmZmVyLW5hbWUpICIgZXhwb3NlZCoiKSkpKQogIChsZXQqICgo c3RhcnQtcHQgKHBvaW50KSkKCSAoYmVnIChpZiBhcmcgKGFsbG91dC1iYWNrLXRvLWN1cnJlbnQt aGVhZGluZykgKHBvaW50LW1pbikpKQoJIChlbmQgKGlmIGFyZyAoYWxsb3V0LWVuZC1vZi1jdXJy ZW50LXN1YnRyZWUpIChwb2ludC1tYXgpKSkKCSAoYnVmIChjdXJyZW50LWJ1ZmZlcikpCgkgKHN0 YXJ0LWxpc3QgKCkpKQogICAgKGlmIChlcSBmb3JtYXQgJ2ZsYXQpCgkoc2V0cSBmb3JtYXQgKGlm IGFyZyAoc2F2ZS1leGN1cnNpb24KCQkJCSAgIChnb3RvLWNoYXIgYmVnKQoJCQkJICAgKGFsbG91 dC10b3BpYy1mbGF0LWluZGV4KSkKCQkJICAgJygxKSkpKQogICAgKHNhdmUtZXhjdXJzaW9uIChz ZXQtYnVmZmVyIHRvYnVmKShlcmFzZS1idWZmZXIpKQogICAgKGFsbG91dC1wcm9jZXNzLWV4cG9z ZWQgJ2FsbG91dC1pbnNlcnQtbGlzdGlmaWVkCgkJCSAgICAgYmVnCgkJCSAgICAgZW5kCgkJCSAg ICAgKGN1cnJlbnQtYnVmZmVyKQoJCQkgICAgIHRvYnVmCgkJCSAgICAgZm9ybWF0IHN0YXJ0LWxp c3QpCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgKHBvcC10by1idWZmZXIgYnVmKQog ICAgKGdvdG8tY2hhciBzdGFydC1wdCkpKQo7OztfICAgPiBhbGxvdXQtZmxhdHRlbi1leHBvc2Vk LXRvLWJ1ZmZlciAoJm9wdGlvbmFsIGFyZyB0b2J1ZikKKGRlZnVuIGFsbG91dC1mbGF0dGVuLWV4 cG9zZWQtdG8tYnVmZmVyICgmb3B0aW9uYWwgYXJnIHRvYnVmKQogICJQcmVzZW50IG51bWVyaWMg b3V0bGluZSBvZiBvdXRsaW5lJ3MgZXhwb3NlZCBwb3J0aW9ucyBpbiBhbm90aGVyIGJ1ZmZlci4K ClRoZSByZXN1bHRpbmcgb3V0bGluZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG91dGxpbmUgbW9k ZSAtIHVzZQpgYWxsb3V0LWNvcHktZXhwb3NlZC10by1idWZmZXInIGlmIHlvdSB3YW50IHRoYXQu CgpVc2UgYGFsbG91dC1pbmRlbnRlZC1leHBvc2VkLXRvLWJ1ZmZlcicgZm9yIGluZGVudGVkIHBy ZXNlbnRhdGlvbi4KCldpdGggcmVwZWF0IGNvdW50LCBjb3B5IHRoZSBleHBvc2VkIHBvcnRpb25z IG9mIG9ubHkgY3VycmVudCB0b3BpYy4KCk90aGVyIGJ1ZmZlciBoYXMgY3VycmVudCBidWZmZXIn cyBuYW1lIHdpdGggXCIgZXhwb3NlZFwiIGFwcGVuZGVkIHRvCml0LCB1bmxlc3Mgb3B0aW9uYWwg c2Vjb25kIGFyZyBUT0JVRiBpcyBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgaXQgaXMKdXNlZCB2 ZXJiYXRpbS4iCiAgKGludGVyYWN0aXZlICJQIikKICAoYWxsb3V0LWNvcHktZXhwb3NlZC10by1i dWZmZXIgYXJnIHRvYnVmICdmbGF0KSkKOzs7XyAgID4gYWxsb3V0LWluZGVudGVkLWV4cG9zZWQt dG8tYnVmZmVyICgmb3B0aW9uYWwgYXJnIHRvYnVmKQooZGVmdW4gYWxsb3V0LWluZGVudGVkLWV4 cG9zZWQtdG8tYnVmZmVyICgmb3B0aW9uYWwgYXJnIHRvYnVmKQogICJQcmVzZW50IGluZGVudGVk IG91dGxpbmUgb2Ygb3V0bGluZSdzIGV4cG9zZWQgcG9ydGlvbnMgaW4gYW5vdGhlciBidWZmZXIu CgpUaGUgcmVzdWx0aW5nIG91dGxpbmUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvdXRsaW5lIG1v ZGUgLSB1c2UKYGFsbG91dC1jb3B5LWV4cG9zZWQtdG8tYnVmZmVyJyBpZiB5b3Ugd2FudCB0aGF0 LgoKVXNlIGBhbGxvdXQtZmxhdHRlbi1leHBvc2VkLXRvLWJ1ZmZlcicgZm9yIG51bWVyaWMgc2Vj dGlvbmFsIHByZXNlbnRhdGlvbi4KCldpdGggcmVwZWF0IGNvdW50LCBjb3B5IHRoZSBleHBvc2Vk IHBvcnRpb25zIG9mIG9ubHkgY3VycmVudCB0b3BpYy4KCk90aGVyIGJ1ZmZlciBoYXMgY3VycmVu dCBidWZmZXIncyBuYW1lIHdpdGggXCIgZXhwb3NlZFwiIGFwcGVuZGVkIHRvCml0LCB1bmxlc3Mg b3B0aW9uYWwgc2Vjb25kIGFyZyBUT0JVRiBpcyBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgaXQg aXMKdXNlZCB2ZXJiYXRpbS4iCiAgKGludGVyYWN0aXZlICJQIikKICAoYWxsb3V0LWNvcHktZXhw b3NlZC10by1idWZmZXIgYXJnIHRvYnVmICdpbmRlbnQpKQoKOzs7XyAgLSBMYVRlWCBmb3JtYXR0 aW5nCjs7O18gICA+IGFsbG91dC1sYXRleC12ZXJiLXF1b3RlIChzdHJpbmcgJm9wdGlvbmFsIGZs b3cpCihkZWZ1biBhbGxvdXQtbGF0ZXgtdmVyYi1xdW90ZSAoc3RyaW5nICZvcHRpb25hbCBmbG93 KQogICJSZXR1cm4gY29weSBvZiBTVFJJTkcgZm9yIGxpdGVyYWwgcmVwcm9kdWN0aW9uIGFjcm9z cyBMYVRlWCBwcm9jZXNzaW5nLgpFeHByZXNzZXMgdGhlIG9yaWdpbmFsIGNoYXJhY3RlcnMgXChp bmNsdWRpbmcgY2FycmlhZ2UgcmV0dXJucykgb2YgdGhlCnN0cmluZyBhY3Jvc3MgTGFUZVggcHJv Y2Vzc2luZy4iCiAgKG1hcGNvbmNhdCAoZnVuY3Rpb24KCSAgICAgIChsYW1iZGEgKGNoYXIpCgkJ KGNvbmQgKChtZW1xIGNoYXIgJyg/XFwgPyQgPyUgPyMgPyYgP3sgP30gP18gP14gPy0gPyopKQoJ CSAgICAgICAoY29uY2F0ICJcXGNoYXIiIChudW1iZXItdG8tc3RyaW5nIGNoYXIpICJ7fSIpKQoJ CSAgICAgICgoPSBjaGFyID9cbikgIlxcXFwiKQoJCSAgICAgICh0IChjaGFyLXRvLXN0cmluZyBj aGFyKSkpKSkKCSAgICAgc3RyaW5nCgkgICAgICIiKSkKOzs7XyAgID4gYWxsb3V0LWxhdGV4LXZl cmJhdGltLXF1b3RlLWN1cnItbGluZSAoKQooZGVmdW4gYWxsb3V0LWxhdGV4LXZlcmJhdGltLXF1 b3RlLWN1cnItbGluZSAoKQogICJFeHByZXNzIGxpbmUgZm9yIGV4YWN0IFwobGl0ZXJhbCkgcmVw cmVzZW50YXRpb24gYWNyb3NzIExhVGVYIHByb2Nlc3NpbmcuCgpBZGp1c3QgbGluZSBjb250ZW50 cyBzbyBpdCBpcyB1bmFsdGVyZWQgXChmcm9tIHRoZSBvcmlnaW5hbCBsaW5lKQphY3Jvc3MgTGFU ZVggcHJvY2Vzc2luZywgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgYHZlcmJhdGltJwplbnZpcm9u bWVudC4gIExlYXZlcyBwb2ludCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiIKICAobGV0ICgoaW5o aWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KSkKICAgIChiZWdpbm5pbmctb2YtbGluZSkKICAgIChs ZXQgKChiZWcgKHBvaW50KSkKICAgICAgICAgIChlbmQgKHByb2duIChlbmQtb2YtbGluZSkocG9p bnQpKSkpCiAgICAgIChnb3RvLWNoYXIgYmVnKQogICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3 YXJkICJcXFxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IlxcXFxcXHxcXHtc XHxcXH1cXHxcXF9cXHxcXCRcXHxcXFwiXFx8XFwmXFx8XFxeXFx8XFwtXFx8XFwqXFx8IyIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQJOyBib3VuZGVkIGJ5IGVuZC1vZi1saW5l CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkgICA7IG5vIG1hdGNoZXMsIG1vdmUg dG8gZW5kICYgcmV0dXJuIG5pbAogICAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAy KSkKICAgICAgICAoaW5zZXJ0ICJcXCIpCiAgICAgICAgKHNldHEgZW5kICgxKyBlbmQpKQogICAg ICAgIChnb3RvLWNoYXIgKDErIChtYXRjaC1lbmQgMikpKSkpKSkKOzs7XyAgID4gYWxsb3V0LWlu c2VydC1sYXRleC1oZWFkZXIgKGJ1ZmZlcikKKGRlZnVuIGFsbG91dC1pbnNlcnQtbGF0ZXgtaGVh ZGVyIChidWZmZXIpCiAgIkluc2VydCBpbml0aWFsIExhVGVYIGNvbW1hbmRzIGF0IHBvaW50IGlu IEJVRkZFUi4iCiAgOzsgTXVjaCBvZiB0aGlzIGlzIGJlaW5nIGRlcml2ZWQgZnJvbSB0aGUgc3R1 ZmYgaW4gYXBwZW5kaXggb2YgRSBpbgogIDs7IHRoZSBUZVhCb29rLCBwZyA0MjEuCiAgKHNldC1i dWZmZXIgYnVmZmVyKQogIChsZXQgKChkb2Mtc3R5bGUgKGZvcm1hdCAiXG5cXGRvY3VtZW50c3R5 bGV7JXN9XG4iCgkJCSAgICJyZXBvcnQiKSkKCShwYWdlLW51bWJlcmluZyAoaWYgYWxsb3V0LW51 bWJlci1wYWdlcwoJCQkgICAgIlxccGFnZXN0eWxle2VtcHR5fVxuIgoJCQkgICIiKSkKCSh0aXRs ZWNtZCAoZm9ybWF0ICJcXG5ld2NvbW1hbmR7XFx0aXRsZWNtZH1bMV17eyVzICMxfX1cbiIKCQkJ ICBhbGxvdXQtdGl0bGUtc3R5bGUpKQoJKGxhYmVsY21kIChmb3JtYXQgIlxcbmV3Y29tbWFuZHtc XGxhYmVsY21kfVsxXXt7JXMgIzF9fVxuIgoJCQkgIGFsbG91dC1sYWJlbC1zdHlsZSkpCgkoaGVh ZGxpbmVjbWQgKGZvcm1hdCAiXFxuZXdjb21tYW5ke1xcaGVhZGxpbmVjbWR9WzFde3slcyAjMX19 XG4iCgkJCSAgICAgYWxsb3V0LWhlYWQtbGluZS1zdHlsZSkpCgkoYm9keWxpbmVjbWQgKGZvcm1h dCAiXFxuZXdjb21tYW5ke1xcYm9keWxpbmVjbWR9WzFde3slcyAjMX19XG4iCgkJCSAgICAgYWxs b3V0LWJvZHktbGluZS1zdHlsZSkpCgkoc2V0bGVuZ3RoIChmb3JtYXQgIiVzJXMlcyVzIgoJCQkg ICAiXFxuZXdsZW5ndGh7XFxzdGVwc2l6ZX1cbiIKCQkJICAgIlxcc2V0bGVuZ3Roe1xcc3RlcHNp emV9eyIKCQkJICAgYWxsb3V0LWluZGVudAoJCQkgICAifVxuIikpCgkob25laGVhZGxpbmUgKGZv cm1hdCAiJXMlcyVzJXMlcyVzJXMiCgkJCSAgICAgIlxcbmV3Y29tbWFuZHtcXE9uZUhlYWRMaW5l fVszXXslXG4iCgkJCSAgICAgIlxcbm9pbmRlbnQlXG4iCgkJCSAgICAgIlxcaHNwYWNlKnsjMlxc c3RlcHNpemV9JVxuIgoJCQkgICAgICJcXGxhYmVsY21keyMxfVxcaHNwYWNlKnsuMmNtfSIKCQkJ ICAgICAiXFxoZWFkbGluZWNtZHsjM31cXFxcWyIKCQkJICAgICBhbGxvdXQtbGluZS1za2lwCgkJ CSAgICAgIl1cbn1cbiIpKQoJKG9uZWJvZHlsaW5lIChmb3JtYXQgIiVzJXMlcyVzJXMlcyIKCQkJ ICAgICAgICJcXG5ld2NvbW1hbmR7XFxPbmVCb2R5TGluZX1bMl17JVxuIgoJCQkgICAgICAgIlxc bm9pbmRlbnQlXG4iCgkJCSAgICAgICAiXFxoc3BhY2UqeyMxXFxzdGVwc2l6ZX0lXG4iCgkJCSAg ICAgICAiXFxib2R5bGluZWNtZHsjMn1cXFxcWyIKCQkJICAgICAgIGFsbG91dC1saW5lLXNraXAK CQkJICAgICAgICJdXG59XG4iKSkKCShiZWdpbmRvYyAiXFxiZWdpbntkb2N1bWVudH1cblxcYmVn aW57Y2VudGVyfVxuIikKCSh0aXRsZSAoZm9ybWF0ICIlcyVzJXMlcyIKCQkgICAgICAgIlxcdGl0 bGVjbWR7IgoJCSAgICAgICAoYWxsb3V0LWxhdGV4LXZlcmItcXVvdGUgKGlmIGFsbG91dC10aXRs ZQoJCQkJCQkoY29uZGl0aW9uLWNhc2UgbmlsCgkJCQkJCSAgICAoZXZhbCBhbGxvdXQtdGl0bGUp CgkJCQkJCSAgKGVycm9yICI8dW5uYW1lZCBidWZmZXI+IikpCgkJCQkJICAgICAgIlVubmFtZWQg T3V0bGluZSIpKQoJCSAgICAgICAifVxuIgoJCSAgICAgICAiXFxlbmR7Y2VudGVyfVxuXG4iKSkK CShoc2l6ZSAiXFxoc2l6ZSA9IDcuNSB0cnVlIGluXG4iKQoJKGhvZmZzZXQgIlxcaG9mZnNldCA9 IC0xLjUgdHJ1ZSBpblxuIikKCSh2c3BhY2UgIlxcdnNwYWNley4xY219XG5cbiIpKQogICAgKGlu c2VydCAoY29uY2F0IGRvYy1zdHlsZQoJCSAgICBwYWdlLW51bWJlcmluZwoJCSAgICB0aXRsZWNt ZAoJCSAgICBsYWJlbGNtZAoJCSAgICBoZWFkbGluZWNtZAoJCSAgICBib2R5bGluZWNtZAoJCSAg ICBzZXRsZW5ndGgKCQkgICAgb25laGVhZGxpbmUKCQkgICAgb25lYm9keWxpbmUKCQkgICAgYmVn aW5kb2MKCQkgICAgdGl0bGUKCQkgICAgaHNpemUKCQkgICAgaG9mZnNldAoJCSAgICB2c3BhY2Up CgkgICAgKSkpCjs7O18gICA+IGFsbG91dC1pbnNlcnQtbGF0ZXgtdHJhaWxlciAoYnVmZmVyKQoo ZGVmdW4gYWxsb3V0LWluc2VydC1sYXRleC10cmFpbGVyIChidWZmZXIpCiAgIkluc2VydCBjb25j bHVkaW5nIExhVGVYIGNvbW1hbmRzIGF0IHBvaW50IGluIEJVRkZFUi4iCiAgKHNldC1idWZmZXIg YnVmZmVyKQogIChpbnNlcnQgIlxuXFxlbmR7ZG9jdW1lbnR9XG4iKSkKOzs7XyAgID4gYWxsb3V0 LWxhdGV4aWZ5LW9uZS1pdGVtIChkZXB0aCBwcmVmaXggYnVsbGV0IHRleHQpCihkZWZ1biBhbGxv dXQtbGF0ZXhpZnktb25lLWl0ZW0gKGRlcHRoIHByZWZpeCBidWxsZXQgdGV4dCkKICAiSW5zZXJ0 IExhVGVYIGNvbW1hbmRzIGZvciBmb3JtYXR0aW5nIG9uZSBvdXRsaW5lIGl0ZW0uCgpBcmdzIGFy ZSB0aGUgdG9waWNzIG51bWVyaWMgREVQVEgsIHRoZSBoZWFkZXIgUFJFRklYIGxlYWQgc3RyaW5n LCB0aGUKQlVMTEVUIHN0cmluZywgYW5kIGEgbGlzdCBvZiBURVhUIHN0cmluZ3MgZm9yIHRoZSBi b2R5LiIKICAobGV0KiAoKGhlYWQtbGluZSAoaWYgdGV4dCAoY2FyIHRleHQpKSkKCSAoYm9keS1s aW5lcyAoY2RyIHRleHQpKQoJIChjdXJyLWxpbmUpCgkgYm9keS1jb250ZW50IGJvcCkKCQkJCQk7 IERvIHRoZSBoZWFkIGxpbmU6CiAgICAoaW5zZXJ0IChjb25jYXQgIlxcT25lSGVhZExpbmV7XFx2 ZXJiXDEgIgogICAgICAgICAgICAgICAgICAgIChhbGxvdXQtbGF0ZXgtdmVyYi1xdW90ZSBidWxs ZXQpCiAgICAgICAgICAgICAgICAgICAgIlwxfXsiCiAgICAgICAgICAgICAgICAgICAgZGVwdGgK ICAgICAgICAgICAgICAgICAgICAifXtcXHZlcmJcMSAiCiAgICAgICAgICAgICAgICAgICAgKGlm IGhlYWQtbGluZQogICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3V0LWxhdGV4LXZlcmItcXVv dGUgaGVhZC1saW5lKQogICAgICAgICAgICAgICAgICAgICAgIiIpCiAgICAgICAgICAgICAgICAg ICAgIlwxfVxuIikpCiAgICAoaWYgKG5vdCBib2R5LWxpbmVzKQoJbmlsCiAgICAgIDs7KGluc2Vy dCAiXFxiZWdpbmxpbmVzXG4iKQogICAgICAoaW5zZXJ0ICJcXGJlZ2lue3ZlcmJhdGltfVxuIikK ICAgICAgKHdoaWxlIGJvZHktbGluZXMKCShzZXRxIGN1cnItbGluZSAoY2FyIGJvZHktbGluZXMp KQoJKGlmIChhbmQgKG5vdCBib2R5LWNvbnRlbnQpCgkJIChub3QgKHN0cmluZy1tYXRjaCAiXlxc cy0qJCIgY3Vyci1saW5lKSkpCgkgICAgKHNldHEgYm9keS1jb250ZW50IHQpKQoJCQkJCTsgTWFu Z2xlIGFueSBvY2N1cnJlbmNlcyBvZgoJCQkJCTsgIlxlbmR7dmVyYmF0aW19IiBpbiB0ZXh0LAoJ CQkJCTsgaXQncyBzcGVjaWFsOgoJKGlmIChhbmQgYm9keS1jb250ZW50CgkJIChzZXRxIGJvcCAo c3RyaW5nLW1hdGNoICJcXGVuZHt2ZXJiYXRpbX0iIGN1cnItbGluZSkpKQoJICAgIChzZXRxIGN1 cnItbGluZSAoY29uY2F0IChzdWJzdHJpbmcgY3Vyci1saW5lIDAgYm9wKQoJCQkJICAgICI+IgoJ CQkJICAgIChzdWJzdHJpbmcgY3Vyci1saW5lIGJvcCkpKSkKCTs7KGluc2VydCAifCIgKGNhciBi b2R5LWxpbmVzKSAifCIpCgkoaW5zZXJ0IGN1cnItbGluZSkKCShhbGxvdXQtbGF0ZXgtdmVyYmF0 aW0tcXVvdGUtY3Vyci1saW5lKQoJKGluc2VydCAiXG4iKQoJKHNldHEgYm9keS1saW5lcyAoY2Ry IGJvZHktbGluZXMpKSkKICAgICAgKGlmIGJvZHktY29udGVudAoJICAoc2V0cSBib2R5LWNvbnRl bnQgbmlsKQoJKGZvcndhcmQtY2hhciAtMSkKCShpbnNlcnQgIlxcICIpCgkoZm9yd2FyZC1jaGFy IDEpKQogICAgICA7OyhpbnNlcnQgIlxcZW5kbGluZXNcbiIpCiAgICAgIChpbnNlcnQgIlxcZW5k e3ZlcmJhdGltfVxuIikKICAgICAgKSkpCjs7O18gICA+IGFsbG91dC1sYXRleGlmeS1leHBvc2Vk IChhcmcgJm9wdGlvbmFsIHRvYnVmKQooZGVmdW4gYWxsb3V0LWxhdGV4aWZ5LWV4cG9zZWQgKGFy ZyAmb3B0aW9uYWwgdG9idWYpCiAgIkZvcm1hdCBjdXJyZW50IHRvcGljcyBleHBvc2VkIHBvcnRp b25zIHRvIFRPQlVGIGZvciBMYVRlWCBwcm9jZXNzaW5nLgpUT0JVRiBkZWZhdWx0cyB0byBhIGJ1 ZmZlciBuYW1lZCB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBidWZmZXIsIGJ1dAp3aXRoIFwiKlwi IHByZXBlbmRlZCBhbmQgXCIgbGF0ZXgtZm9ybWVkKlwiIGFwcGVuZGVkLgoKV2l0aCByZXBlYXQg Y291bnQsIGNvcHkgdGhlIGV4cG9zZWQgcG9ydGlvbnMgb2YgZW50aXJlIGJ1ZmZlci4iCgogIChp bnRlcmFjdGl2ZSAiUCIpCiAgKGlmIChub3QgdG9idWYpCiAgICAgIChzZXRxIHRvYnVmCgkgICAg KGdldC1idWZmZXItY3JlYXRlIChjb25jYXQgIioiIChidWZmZXItbmFtZSkgIiBsYXRleGlmaWVk KiIpKSkpCiAgKGxldCogKChzdGFydC1wdCAocG9pbnQpKQoJIChiZWcgKGlmIGFyZyAocG9pbnQt bWluKSAoYWxsb3V0LWJhY2stdG8tY3VycmVudC1oZWFkaW5nKSkpCgkgKGVuZCAoaWYgYXJnIChw b2ludC1tYXgpIChhbGxvdXQtZW5kLW9mLWN1cnJlbnQtc3VidHJlZSkpKQoJIChidWYgKGN1cnJl bnQtYnVmZmVyKSkpCiAgICAoc2V0LWJ1ZmZlciB0b2J1ZikKICAgIChlcmFzZS1idWZmZXIpCiAg ICAoYWxsb3V0LWluc2VydC1sYXRleC1oZWFkZXIgdG9idWYpCiAgICAoZ290by1jaGFyIChwb2lu dC1tYXgpKQogICAgKGFsbG91dC1wcm9jZXNzLWV4cG9zZWQgJ2FsbG91dC1sYXRleGlmeS1vbmUt aXRlbQoJCQkgICAgIGJlZwoJCQkgICAgIGVuZAoJCQkgICAgIGJ1ZgoJCQkgICAgIHRvYnVmKQog ICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKICAgIChhbGxvdXQtaW5zZXJ0LWxhdGV4LXRyYWls ZXIgdG9idWYpCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgKHBvcC10by1idWZmZXIg YnVmKQogICAgKGdvdG8tY2hhciBzdGFydC1wdCkpKQoKOzs7XyAjOCBFbmNyeXB0aW9uCjs7O18g ID4gYWxsb3V0LXRvZ2dsZS1jdXJyZW50LXN1YnRyZWUtZW5jcnlwdGlvbiAoJm9wdGlvbmFsIGZl dGNoLXBhc3MpCihkZWZ1biBhbGxvdXQtdG9nZ2xlLWN1cnJlbnQtc3VidHJlZS1lbmNyeXB0aW9u ICgmb3B0aW9uYWwgZmV0Y2gtcGFzcykKICAiRW5jcnlwdCBjbGVhciBvciBkZWNyeXB0IGVuY29k ZWQgdGV4dCBvZiB2aXNpYmx5LWNvbnRhaW5pbmcgdG9waWMncyBjb250ZW50cy4KCk9wdGlvbmFs IEZFVENILVBBU1MgdW5pdmVyc2FsIGFyZ3VtZW50IHByb3Zva2VzIGtleS1wYWlyIGVuY3J5cHRp b24gd2l0aApzaW5nbGUgdW5pdmVyc2FsIGFyZ3VtZW50LiAgV2l0aCBkb3VibGVkIHVuaXZlcnNh bCBhcmd1bWVudCBcKHZhbHVlID0gMTYpLAppdCBmb3JjZXMgcHJvbXB0aW5nIGZvciB0aGUgcGFz c3BocmFzZSByZWdhcmRsZXNzIG9mIGF2YWlsYWJpbGl0eSBmcm9tIHRoZQpwYXNzcGhyYXNlIGNh Y2hlLiAgV2l0aCBubyB1bml2ZXJzYWwgYXJndW1lbnQsIHRoZSBhcHByb3ByaWF0ZSBwYXNzcGhy YXNlCmlzIG9idGFpbmVkIGZyb20gdGhlIGNhY2hlLCBpZiBhdmFpbGFibGUsIGVsc2UgZnJvbSB0 aGUgdXNlci4KCkN1cnJlbnRseSBvbmx5IEdudVBHIGVuY3J5cHRpb24gaXMgc3VwcG9ydGVkLgoK XCoqTk9URSBXRUxMKiogdGhhdCB0aGUgZW5jcnlwdGVkIHRleHQgbXVzdCBiZSBhc2NpaS1hcm1v cmVkLiAgRm9yIGdudXBnCmVuY3J5cHRpb24sIGluY2x1ZGUgdGhlIG9wdGlvbiBgYGFybW9yJycg aW4geW91ciB+Ly5nbnVwZy9ncGcuY29uZiBmaWxlLgoKQm90aCBzeW1tZXRyaWMta2V5IGFuZCBr ZXktcGFpciBlbmNyeXB0aW9uIGlzIGltcGxlbWVudGVkLiAgU3ltbWV0cmljIGlzCnRoZSBkZWZh dWx0LCB1c2UgYSBzaW5nbGUgXCh4NCkgdW5pdmVyc2FsIGFyZ3VtZW50IGZvciBrZXlwYWlyIG1v ZGUuCgpFbmNyeXB0ZWQgdG9waWMncyBidWxsZXQgaXMgc2V0IHRvIGEgYH4nIHRvIHNpZ25hbCB0 aGF0IHRoZSBjb250ZW50cyBvZiB0aGUKdG9waWMgXChib2R5IGFuZCBzdWJ0b3BpY3MsIGJ1dCBu b3QgaGVhZGluZykgaXMgcGVuZGluZyBlbmNyeXB0aW9uIG9yCmVuY3J5cHRlZC4gIGAqJyBhc3Rl cmlzayBpbW1lZGlhdGVseSBhZnRlciB0aGUgYnVsbGV0IHNpZ25hbHMgdGhhdCB0aGUgYm9keQpp cyBlbmNyeXB0ZWQsIGl0cycgYWJzZW5jZSBtZWFucyB0aGUgdG9waWMgaXMgbWVhbnQgdG8gYmUg ZW5jcnlwdGVkIGJ1dCBpcwpub3QuICBXaGVuIGEgZmlsZSB3aXRoIHRvcGljcyBwZW5kaW5nIGVu Y3J5cHRpb24gaXMgc2F2ZWQsIHRvcGljcyBwZW5kaW5nCmVuY3J5cHRpb24gYXJlIGVuY3J5cHRl ZC4gIFNlZSBhbGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcyBmb3IKYXV0by1lbmNy eXB0aW9uIHNwZWNpZmljcy4KClwqKk5PVEUgV0VMTCoqIHRoYXQgYXV0b21hdGljIGVuY3J5cHRp b24gdGhhdCBoYXBwZW5zIGR1cmluZyBzYXZlcyB3aWxsCmRlZmF1bHQgdG8gc3ltbWV0cmljIGVu Y3J5cHRpb24gLSB5b3UgbXVzdCBtYW51YWxseSBcKHJlKWVuY3J5cHQga2V5LXBhaXIKZW5jcnlw dGVkIHRvcGljcyBpZiB5b3Ugd2FudCB0aGVtIHRvIGNvbnRpbnVlIHRvIHVzZSB0aGUga2V5LXBh aXIgY2lwaGVyLgoKTGV2ZWwtb25lIHRvcGljcywgd2l0aCBwcmVmaXggY29uc2lzdGluZyBzb2xl bHkgb2YgYW4gYConIGFzdGVyaXNrLCBjYW5ub3QgYmUKZW5jcnlwdGVkLiAgSWYgeW91IHdhbnQg dG8gZW5jcnlwdCB0aGUgY29udGVudHMgb2YgYSB0b3AtbGV2ZWwgdG9waWMsIHVzZQpcXFthbGxv dXQtc2hpZnQtaW5dIHRvIGluY3JlYXNlIGl0cyBkZXB0aC4KCiAgUGFzc3BocmFzZSBDYWNoaW5n CgpUaGUgZW5jcnlwdGlvbiBwYXNzcGhyYXNlIGlzIHNvbGljaXRlZCBpZiBub3QgY3VycmVudGx5 IGF2YWlsYWJsZSBpbiB0aGUKcGFzc3BocmFzZSBjYWNoZSBmcm9tIGEgcmVjZW50IGVuY3J5cHRp b24gYWN0aW9uLgoKVGhlIHNvbGljaXRlZCBwYXNzcGhyYXNlIGlzIHJldGFpbmVkIGZvciByZXVz ZSBpbiBhIGJ1ZmZlci1zcGVjaWZpYyBjYWNoZQpmb3Igc29tZSBzZXQgcGVyaW9kIG9mIHRpbWUg XChkZWZhdWx0LCA2MCBzZWNvbmRzKSwgYWZ0ZXIgd2hpY2ggdGhlIHN0cmluZwppcyBudWxsZWQu ICBUaGUgcGFzc3BocmFzZSBjYWNoZSB0aW1lb3V0IGlzIGN1c3RvbWl6ZWQgYnkgc2V0dGluZwpg cGdnLXBhc3NwaHJhc2UtY2FjaGUtZXhwaXJ5Jy4KCiAgU3ltbWV0cmljIFBhc3NwaHJhc2UgSGlu dGluZyBhbmQgVmVyaWZpY2F0aW9uCgpJZiB0aGUgZmlsZSBwcmV2aW91c2x5IGhhZCBubyBhc3Nv Y2lhdGVkIHBhc3NwaHJhc2UsIG9yIGhhZCBhIGRpZmZlcmVudApwYXNzcGhyYXNlIHRoYW4gc3Bl Y2lmaWVkLCB0aGUgdXNlciBpcyBwcm9tcHRlZCB0byByZXBlYXQgdGhlIG5ldyBvbmUgZm9yCmNv cnJvYm9yYXRpb24uICBBIHJhbmRvbSBzdHJpbmcgZW5jcnlwdGVkIGJ5IHRoZSBuZXcgcGFzc3Bo cmFzZSBpcyBzZXQgb24KdGhlIGJ1ZmZlci1zcGVjaWZpYyB2YXJpYWJsZSBgYWxsb3V0LXBhc3Nw aHJhc2UtdmVyaWZpZXItc3RyaW5nJywgZm9yCmNvbmZpcm1hdGlvbiBvZiB0aGUgcGFzc3BocmFz ZSB3aGVuIG5leHQgb2J0YWluZWQsIGJlZm9yZSBlbmNyeXB0aW5nIG9yCmRlY3J5cHRpbmcgYW55 dGhpbmcgd2l0aCBpdC4gIFRoaXMgaGVscHMgYXZvaWQgbWlzdGFrZW5seSBzaGlmdGluZyBiZXR3 ZWVuCmtleXMuCgpJZiBhbGxvdXQgY3VzdG9taXphdGlvbiB2YXIgYGFsbG91dC1wYXNzcGhyYXNl LXZlcmlmaWVyLWhhbmRsaW5nJyBpcwpub24tbmlsLCBhbiBlbnRyeSBmb3IgYGFsbG91dC1wYXNz cGhyYXNlLXZlcmlmaWVyLXN0cmluZycgYW5kIGl0cyB2YWx1ZSBpcwphZGRlZCB0byBhbiBFbWFj cyAnbG9jYWwgdmFyaWFibGVzJyBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIHdoaWNo CmlzIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LiAgVGhhdCBzZXR0aW5nIGlzIGZvciByZXRlbnRpb24g b2YgdGhlIHBhc3NwaHJhc2UKdmVyaWZpZXIgYWNyb3NzIGVtYWNzIHNlc3Npb25zLgoKU2ltaWxh cmx5LCBgYWxsb3V0LXBhc3NwaHJhc2UtaGludC1zdHJpbmcnIHN0b3JlcyBhIHVzZXItcHJvdmlk ZWQgcmVtaW5kZXIKYWJvdXQgdGhlaXIgcGFzc3BocmFzZSwgYW5kIGBhbGxvdXQtcGFzc3BocmFz ZS1oaW50LWhhbmRsaW5nJyBzcGVjaWZpZXMKd2hlbiB0aGUgaGludCBpcyBwcmVzZW50ZWQsIG9y IGlmIHBhc3NwaHJhc2UgaGludHMgYXJlIGRpc2FibGVkLiAgSWYKZW5hYmxlZCBcKHNlZSB0aGUg YGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtaGFuZGxpbmcnIGRvY3N0cmluZyBmb3IgZGV0YWlscyks CnRoZSBoaW50IHN0cmluZyBpcyBzdG9yZWQgaW4gdGhlIGxvY2FsLXZhcmlhYmxlcyBzZWN0aW9u IG9mIHRoZSBmaWxlLCBhbmQKc29saWNpdGVkIHdoZW5ldmVyIHRoZSBwYXNzcGhyYXNlIGlzIGNo YW5nZWQuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoYWxsb3V0 LWJhY2stdG8tY3VycmVudC1oZWFkaW5nKQogICAgKGFsbG91dC10b2dnbGUtc3VidHJlZS1lbmNy eXB0aW9uIGZldGNoLXBhc3MpCiAgICApCiAgKQo7OztfICA+IGFsbG91dC10b2dnbGUtc3VidHJl ZS1lbmNyeXB0aW9uICgmb3B0aW9uYWwgZmV0Y2gtcGFzcykKKGRlZnVuIGFsbG91dC10b2dnbGUt c3VidHJlZS1lbmNyeXB0aW9uICgmb3B0aW9uYWwgZmV0Y2gtcGFzcykKICAiRW5jcnlwdCBjbGVh ciB0ZXh0IG9yIGRlY3J5cHQgZW5jb2RlZCB0b3BpYyBjb250ZW50cyBcKGJvZHkgYW5kIHN1YnRv cGljcy4pCgpPcHRpb25hbCBGRVRDSC1QQVNTIHVuaXZlcnNhbCBhcmd1bWVudCBwcm92b2tlcyBr ZXktcGFpciBlbmNyeXB0aW9uIHdpdGgKc2luZ2xlIHVuaXZlcnNhbCBhcmd1bWVudC4gIFdpdGgg ZG91YmxlZCB1bml2ZXJzYWwgYXJndW1lbnQgXCh2YWx1ZSA9IDE2KSwKaXQgZm9yY2VzIHByb21w dGluZyBmb3IgdGhlIHBhc3NwaHJhc2UgcmVnYXJkbGVzcyBvZiBhdmFpbGFiaWxpdHkgZnJvbSB0 aGUKcGFzc3BocmFzZSBjYWNoZS4gIFdpdGggbm8gdW5pdmVyc2FsIGFyZ3VtZW50LCB0aGUgYXBw cm9wcmlhdGUgcGFzc3BocmFzZQppcyBvYnRhaW5lZCBmcm9tIHRoZSBjYWNoZSwgaWYgYXZhaWxh YmxlLCBlbHNlIGZyb20gdGhlIHVzZXIuCgpDdXJyZW50bHkgb25seSBHbnVQRyBlbmNyeXB0aW9u IGlzIHN1cHBvcnRlZC4KClwqKk5PVEUgV0VMTCoqIHRoYXQgdGhlIGVuY3J5cHRlZCB0ZXh0IG11 c3QgYmUgYXNjaWktYXJtb3JlZC4gIEZvciBnbnVwZwplbmNyeXB0aW9uLCBpbmNsdWRlIHRoZSBv cHRpb24gYGBhcm1vcicnIGluIHlvdXIgfi8uZ251cGcvZ3BnLmNvbmYgZmlsZS4KClNlZSBgYWxs b3V0LXRvZ2dsZS1jdXJyZW50LXN1YnRyZWUtZW5jcnlwdGlvbicgZm9yIG1vcmUgZGV0YWlscy4i CgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoYWxsb3V0LWVuZC1v Zi1wcmVmaXggdCkKCiAgICAoaWYgKD0gYWxsb3V0LXJlY2VudC1kZXB0aCAxKQogICAgICAgIChl cnJvciAoY29uY2F0ICJDYW5ub3QgZW5jcnlwdCBvciBkZWNyeXB0IGxldmVsIDEgdG9waWNzIC0i CiAgICAgICAgICAgICAgICAgICAgICAgIiBzaGlmdCBpdCBpbiB0byBtYWtlIGl0IGVuY3J5cHRh YmxlIikpKQoKICAgIChsZXQqICgoYWxsb3V0LWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQogICAg ICAgICAgIDs7IEFzc2VzIGxvY2F0aW9uOgogICAgICAgICAgIChidWxsZXQtcG9zIGFsbG91dC1y ZWNlbnQtcHJlZml4LWJlZ2lubmluZykKICAgICAgICAgICAoYWZ0ZXItYnVsbGV0LXBvcyAocG9p bnQpKQogICAgICAgICAgICh3YXMtZW5jcnlwdGVkCiAgICAgICAgICAgIChwcm9nbiAoaWYgKD0g KHBvaW50LW1heCkgYWZ0ZXItYnVsbGV0LXBvcykKICAgICAgICAgICAgICAgICAgICAgICAoZXJy b3IgIm5vIGJvZHkgdG8gZW5jcnlwdCIpKQogICAgICAgICAgICAgICAgICAgKGFsbG91dC1lbmNy eXB0ZWQtdG9waWMtcCkpKQogICAgICAgICAgICh3YXMtY29sbGFwc2VkIChpZiAobm90IChzZWFy Y2gtZm9yd2FyZCAiXG4iIG5pbCB0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmls CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFja3dhcmQtY2hhciAxKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGFsbG91dC1oaWRkZW4tcCkpKQogICAgICAgICAgIChzdWJ0cmVl LWJlZyAoMSsgKHBvaW50KSkpCiAgICAgICAgICAgKHN1YnRyZWUtZW5kIChhbGxvdXQtZW5kLW9m LXN1YnRyZWUpKQogICAgICAgICAgIChzdWJqZWN0LXRleHQgKGJ1ZmZlci1zdWJzdHJpbmctbm8t cHJvcGVydGllcyBzdWJ0cmVlLWJlZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdWJ0cmVlLWVuZCkpCiAgICAgICAgICAgKHN1YnRyZWUt ZW5kLWNoYXIgKGNoYXItYWZ0ZXIgKDEtIHN1YnRyZWUtZW5kKSkpCiAgICAgICAgICAgKHN1YnRy ZWUtdHJhaWxpbmctY2hhciAoY2hhci1hZnRlciBzdWJ0cmVlLWVuZCkpCiAgICAgICAgICAgOzsg a2x1Z2UgLSByZXN1bHQtdGV4dCBuZWVkcyB0byBiZSBuaWwsIGJ1dCB3ZSBhbHNvIHdhbnQgdG8K ICAgICAgICAgICA7OyAgICAgICAgIGNoZWNrIGZvciB0aGUgZXJyb3IgY29uZGl0aW9uCiAgICAg ICAgICAgKHJlc3VsdC10ZXh0IChpZiAob3IgKHN0cmluZz0gIiIgc3ViamVjdC10ZXh0KQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9ICJcbiIgc3ViamVjdC10ZXh0KSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciAiTm8gdG9waWMgY29udGVudHMgdG8g JXNjcnlwdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgd2FzLWVuY3J5 cHRlZCAiZGUiICJlbiIpKQogICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCkpCiAgICAgICAg ICAgOzsgQXNzZXNzIGtleSBwYXJhbWV0ZXJzOgogICAgICAgICAgIChrZXktaW5mbyAob3IKICAg ICAgICAgICAgICAgICAgICAgIDs7IGRldGVjdCB0aGUgdHlwZSBieSB3aGljaCBpdCBpcyBhbHJl YWR5IGVuY3J5cHRlZAogICAgICAgICAgICAgICAgICAgICAgKGFuZCB3YXMtZW5jcnlwdGVkCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIChhbGxvdXQtZW5jcnlwdGVkLWtleS1pbmZvIHN1Ympl Y3QtdGV4dCkpCiAgICAgICAgICAgICAgICAgICAgICAoYW5kIChtZW1iZXIgZmV0Y2gtcGFzcyAn KDQgKDQpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhrZXlwYWlyIG5pbCkpCiAgICAg ICAgICAgICAgICAgICAgICAnKHN5bW1ldHJpYyBuaWwpKSkKICAgICAgICAgICAoZm9yLWtleS10 eXBlIChjYXIga2V5LWluZm8pKQogICAgICAgICAgIChmb3Ita2V5LWlkZW50aXR5IChjYWRyIGtl eS1pbmZvKSkKICAgICAgICAgICAoZmV0Y2gtcGFzcyAoYW5kIGZldGNoLXBhc3MgKG1lbWJlciBm ZXRjaC1wYXNzICcoMTYgKDE2KSkpKSkpCgogICAgICAoc2V0cSByZXN1bHQtdGV4dAogICAgICAg ICAgICAoYWxsb3V0LWVuY3J5cHQtc3RyaW5nIHN1YmplY3QtdGV4dCB3YXMtZW5jcnlwdGVkCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50LWJ1ZmZlcikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yLWtleS10eXBlIGZvci1rZXktaWRlbnRp dHkgZmV0Y2gtcGFzcykpCgogICAgICAgOzsgUmVwbGFjZSB0aGUgc3VidHJlZSB3aXRoIHRoZSBw cm9jZXNzZWQgcHJvZHVjdC4KICAgICAgKGFsbG91dC11bnByb3RlY3RlZAogICAgICAgKHByb2du CiAgICAgICAgIChzZXQtYnVmZmVyIGFsbG91dC1idWZmZXIpCiAgICAgICAgIChkZWxldGUtcmVn aW9uIHN1YnRyZWUtYmVnIHN1YnRyZWUtZW5kKQogICAgICAgICAoaW5zZXJ0IHJlc3VsdC10ZXh0 KQogICAgICAgICAoaWYgd2FzLWNvbGxhcHNlZAogICAgICAgICAgICAgKGFsbG91dC1mbGFnLXJl Z2lvbiAoMS0gc3VidHJlZS1iZWcpIChwb2ludCkgdCkpCiAgICAgICAgIDs7IGFkanVzdCB0cmFp bGluZy1ibGFuay1saW5lcyB0byBwcmVzZXJ2ZSB0b3BpYyBzcGFjaW5nOgogICAgICAgICAoaWYg KG5vdCB3YXMtZW5jcnlwdGVkKQogICAgICAgICAgICAgKGlmIChhbmQgKD0gc3VidHJlZS1lbmQt Y2hhciA/XG4pCiAgICAgICAgICAgICAgICAgICAgICAoPSBzdWJ0cmVlLXRyYWlsaW5nLWNoYXIg P1xuKSkKICAgICAgICAgICAgICAgICAoaW5zZXJ0IHN1YnRyZWUtdHJhaWxpbmctY2hhcikpKQog ICAgICAgICA7OyBFbnN1cmUgdGhhdCB0aGUgaXRlbSBoYXMgYW4gZW5jcnlwdGVkLWVudHJ5IGJ1 bGxldDoKICAgICAgICAgKGlmIChub3QgKHN0cmluZz0gKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJv cGVydGllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEtIGFmdGVyLWJ1bGxldC1wb3Mp IGFmdGVyLWJ1bGxldC1wb3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC10b3Bp Yy1lbmNyeXB0aW9uLWJ1bGxldCkpCiAgICAgICAgICAgICAocHJvZ24gKGdvdG8tY2hhciAoMS0g YWZ0ZXItYnVsbGV0LXBvcykpCiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1jaGFyIDEpCiAg ICAgICAgICAgICAgICAgICAgKGluc2VydCBhbGxvdXQtdG9waWMtZW5jcnlwdGlvbi1idWxsZXQp KSkKICAgICAgICAgKGlmIHdhcy1lbmNyeXB0ZWQKICAgICAgICAgICAgIDs7IFJlbW92ZSB0aGUg aXMtZW5jcnlwdGVkIGJ1bGxldCBxdWFsaWZpZXI6CiAgICAgICAgICAgICAocHJvZ24gKGdvdG8t Y2hhciBhZnRlci1idWxsZXQtcG9zKQogICAgICAgICAgICAgICAgICAgIChkZWxldGUtY2hhciAx KSkKICAgICAgICAgICA7OyBBZGQgdGhlIGlzLWVuY3J5cHRlZCBidWxsZXQgcXVhbGlmaWVyOgog ICAgICAgICAgIChnb3RvLWNoYXIgYWZ0ZXItYnVsbGV0LXBvcykKICAgICAgICAgICAoaW5zZXJ0 ICIqIikpKSkKICAgICAgKHJ1bi1ob29rLXdpdGgtYXJncyAnYWxsb3V0LXN0cnVjdHVyZS1hZGRl ZC1ob29rCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVsbGV0LXBvcyBzdWJ0cmVlLWVuZCkp KSkKOzs7XyAgPiBhbGxvdXQtZW5jcnlwdC1zdHJpbmcgKHRleHQgZGVjcnlwdCBhbGxvdXQtYnVm ZmVyIGtleS10eXBlIGZvci1rZXkKOzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZldGNoLXBhc3MgJm9wdGlvbmFsIHJldHJpZWQgdmVyaWZ5aW5nCjs7OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYXNzcGhyYXNlKQooZGVmdW4gYWxsb3V0LWVuY3J5cHQtc3Ry aW5nICh0ZXh0IGRlY3J5cHQgYWxsb3V0LWJ1ZmZlciBrZXktdHlwZSBmb3Ita2V5CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2gtcGFzcyAmb3B0aW9uYWwgcmV0cmllZCBy ZWplY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeWluZyBwYXNz cGhyYXNlKQogICJFbmNyeXB0IG9yIGRlY3J5cHQgbWVzc2FnZSBURVhULgoKSWYgREVDUllQVCBp cyB0cnVlIChkZWZhdWx0IGZhbHNlKSwgdGhlbiBkZWNyeXB0IGluc3RlYWQgb2YgZW5jcnlwdC4K CkZFVENILVBBU1MgKGRlZmF1bHQgZmFsc2UpIGZvcmNlcyBmcmVzaCBwcm9tcHRpbmcgZm9yIHRo ZSBwYXNzcGhyYXNlLgoKS0VZLVRZUEUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIGEgJ3N5bW1l dHJpYyBvciAna2V5cGFpciBjaXBoZXIuCgpGT1ItS0VZIGlzIGh1bWFuIHJlYWRhYmxlIGlkZW50 aWZpY2F0aW9uIG9mIHRoZSBmaXJzdCBvZiB0aGUgdXNlcidzCmVsaWdpYmxlIHNlY3JldCBrZXlz IGEga2V5cGFpciBkZWNyeXB0aW9uIHRhcmdldHMsIG9yIGVsc2UgbmlsLgoKT3B0aW9uYWwgUkVU UklFRCBpcyBmb3IgaW50ZXJuYWwgdXNlIC0gY29udmV5cyB0aGUgbnVtYmVyIG9mIGZhaWxlZCBr ZXlzCnRoYXQgaGF2ZSBiZWVuIHNvbGljaXRlZCBpbiBzZXF1ZW5jZSBsZWFkaW5nIHRvIHRoaXMg Y3VycmVudCBjYWxsLgoKT3B0aW9uYWwgUEFTU1BIUkFTRSBlbmFibGVzIGV4cGxpY2l0IGRlbGl2 ZXJ5IG9mIHRoZSBkZWNyeXB0aW9uIHBhc3NwaHJhc2UsCmZvciB2ZXJpZmljYXRpb24gcHVycG9z ZXMuCgpPcHRpb25hbCBSRUpFQ1RFRCBpcyBmb3IgaW50ZXJuYWwgdXNlIC0gY29udmV5cyB0aGUg bnVtYmVyIG9mCnJlamVjdGlvbnMgZHVlIHRvIG1hdGNoZXMgYWdhaW5zdApgYWxsb3V0LWVuY3J5 cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tcmVnZXhwcycsIGFzIGxpbWl0ZWQgYnkKYGFsbG91 dC1lbmNyeXB0aW9uLWNpcGhlcnRleHQtcmVqZWN0aW9uLWNlaWxpbmcnLgoKUmV0dXJucyB0aGUg cmVzdWx0aW5nIHN0cmluZywgb3IgbmlsIGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiBmYWlscy4iCgog IChyZXF1aXJlICdwZ2cpCgogIChpZiAobm90IChmYm91bmRwICdwZ2ctZW5jcnlwdC1zeW1tZXRy aWMpKQogICAgICAoZXJyb3IgIkFsbG91dCBlbmNyeXB0aW9uIGRlcGVuZHMgb24gYSBuZXdlciB2 ZXJzaW9uIG9mIHBnZyIpKQoKICAobGV0KiAoKHNjaGVtZSAodXBjYXNlCiAgICAgICAgICAgICAg ICAgIChmb3JtYXQgIiVzIiAob3IgcGdnLXNjaGVtZSBwZ2ctZGVmYXVsdC1zY2hlbWUgIkdQRyIp KSkpCiAgICAgICAgIChmb3Ita2V5IChhbmQgKGVxdWFsIGtleS10eXBlICdrZXlwYWlyKQogICAg ICAgICAgICAgICAgICAgICAgIChvciBmb3Ita2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAg IChzcGxpdC1zdHJpbmcgKHJlYWQtc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChmb3JtYXQgIiVzIG1lc3NhZ2UgcmVjaXBpZW50czogIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtZSkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlsgXHQsXSsiKSkpKQogICAgICAgICAo dGFyZ2V0LXByb21wdC1pZCAoaWYgKGVxdWFsIGtleS10eXBlICdrZXlwYWlyKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGlmICg9IChsZW5ndGggZm9yLWtleSkgMSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyIGZvci1rZXkpIGZvci1rZXkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1uYW1lIGFsbG91dC1idWZmZXIpKSkKICAgICAg ICAgKHRhcmdldC1jYWNoZS1pZCAoZm9ybWF0ICIlcy0lcyIKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGtleS10eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo aWYgKGVxdWFsIGtleS10eXBlICdrZXlwYWlyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRhcmdldC1wcm9tcHQtaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG9yIChidWZmZXItZmlsZS1uYW1lIGFsbG91dC1idWZmZXIpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtcHJvbXB0LWlkKSkpKQogICAgICAgICA7 OyBYWFggdGhpcyBlbmNvZGluZyBwcmVzZXJ2YXRpb24gYXR0ZW1wdCBpcyBub3QgeWV0IGVmZmVj dGl2ZQogICAgICAgICAoZW5jb2RpbmcgKHdpdGgtY3VycmVudC1idWZmZXIgYWxsb3V0LWJ1ZmZl cgogICAgICAgICAgICAgICAgICAgICBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtKSkKICAgICAg ICAgKG11bHRpYnl0ZSAod2l0aC1jdXJyZW50LWJ1ZmZlciBhbGxvdXQtYnVmZmVyCiAgICAgICAg ICAgICAgICAgICAgIGVuYWJsZS1tdWx0aWJ5dGUtY2hhcmFjdGVycykpCiAgICAgICAgIChzdHJp cC1wbGFpbnRleHQtcmVnZXhwcwogICAgICAgICAgKGlmIChub3QgZGVjcnlwdCkKICAgICAgICAg ICAgICAoYWxsb3V0LWdldC1jb25maWd2YXItdmFsdWVzCiAgICAgICAgICAgICAgICdhbGxvdXQt ZW5jcnlwdGlvbi1wbGFpbnRleHQtc2FuaXRpemF0aW9uLXJlZ2V4cHMpKSkKICAgICAgICAgKHJl amVjdC1jaXBoZXJ0ZXh0LXJlZ2V4cHMKICAgICAgICAgIChpZiAobm90IGRlY3J5cHQpCiAgICAg ICAgICAgICAgKGFsbG91dC1nZXQtY29uZmlndmFyLXZhbHVlcwogICAgICAgICAgICAgICAnYWxs b3V0LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tcmVnZXhwcykpKQogICAgICAgICAo cmVqZWN0ZWQgKG9yIHJlamVjdGVkIDApKQogICAgICAgICAocmVqZWN0aW9ucy1sZWZ0ICgtIGFs bG91dC1lbmNyeXB0aW9uLWNpcGhlcnRleHQtcmVqZWN0aW9uLWNlaWxpbmcKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWplY3RlZCkpCiAgICAgICAgIHJlc3VsdC10ZXh0IHN0YXR1cykK CiAgICAoaWYgKGFuZCBmZXRjaC1wYXNzIChub3QgcGFzc3BocmFzZSkpCiAgICAgICAgOzsgRm9y Y2UgbGF0ZXIgZmV0Y2ggYnkgZXZpY3RpbmcgcGFzc3BocmFzZSBmcm9tIHRoZSBjYWNoZS4KICAg ICAgICAocGdnLXJlbW92ZS1wYXNzcGhyYXNlLWZyb20tY2FjaGUgdGFyZ2V0LWNhY2hlLWlkIHQp KQoKICAgIChjYXRjaCAnZW5jcnlwdGlvbi1mYWlsZWQKCiAgICAgICAgOzsgT2J0YWluIHRoZSBw YXNzcGhyYXNlIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUgYW5kIHdlJ3JlIG5vdAogICAg ICAgIDs7IGRvaW5nIGEga2V5cGFpciBlbmNyeXB0aW9uOgogICAgICAgIChpZiAobm90IChvciBw YXNzcGhyYXNlCiAgICAgICAgICAgICAgICAgICAgIChhbmQgKGVxdWFsIGtleS10eXBlICdrZXlw YWlyKQogICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgZGVjcnlwdCkpKSkKCiAgICAgICAg ICAgIChzZXRxIHBhc3NwaHJhc2UgKGFsbG91dC1vYnRhaW4tcGFzc3BocmFzZSBmb3Ita2V5CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn ZXQtY2FjaGUtaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRhcmdldC1wcm9tcHQtaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGtleS10eXBlCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtYnVmZmVyCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyaWVkIGZldGNo LXBhc3MpKSkKCiAgICAgICAgKHdpdGgtdGVtcC1idWZmZXIKCiAgICAgICAgICAoaW5zZXJ0IHRl eHQpCgogICAgICAgICAgKHdoZW4gZW5jb2RpbmcKICAgICAgICAgICAgKHNldC1idWZmZXItZmls ZS1jb2Rpbmctc3lzdGVtIGVuY29kaW5nKQogICAgICAgICAgICAoaWYgKG5vdCBkZWNyeXB0KQog ICAgICAgICAgICAgICAgKGVuY29kZS1jb2RpbmctcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1t YXgpIGVuY29kaW5nKSkpCiAgICAgICAgICAoc2V0LWJ1ZmZlci1tdWx0aWJ5dGUgbXVsdGlieXRl KQoKICAgICAgICAgICh3aGVuIChhbmQgc3RyaXAtcGxhaW50ZXh0LXJlZ2V4cHMgKG5vdCBkZWNy eXB0KSkKICAgICAgICAgICAgKGRvbGlzdCAocmUgc3RyaXAtcGxhaW50ZXh0LXJlZ2V4cHMpCiAg ICAgICAgICAgICAgKGxldCAoKHJlIChpZiAobGlzdHAgcmUpIChjYXIgcmUpIHJlKSkKICAgICAg ICAgICAgICAgICAgICAocmVwbGFjZW1lbnQgKGlmIChsaXN0cCByZSkgKGNhZHIgcmUpICIiKSkp CiAgICAgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAgICAgICAgICAg KHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCByZSBuaWwgdCkKICAgICAgICAgICAgICAgICAgKHJl cGxhY2UtbWF0Y2ggcmVwbGFjZW1lbnQgbmlsIG5pbCkpKSkpCgogICAgICAgICAgKGNvbmQKCiAg ICAgICAgICAgOzsgc3ltbWV0cmljOgogICAgICAgICAgICgoZXF1YWwga2V5LXR5cGUgJ3N5bW1l dHJpYykKICAgICAgICAgICAgKHNldHEgc3RhdHVzCiAgICAgICAgICAgICAgICAgIChpZiBkZWNy eXB0CgogICAgICAgICAgICAgICAgICAgICAgKHBnZy1kZWNyeXB0IChwb2ludC1taW4pIChwb2lu dC1tYXgpIHBhc3NwaHJhc2UpCgogICAgICAgICAgICAgICAgICAgIChwZ2ctZW5jcnlwdC1zeW1t ZXRyaWMgKHBvaW50LW1pbikgKHBvaW50LW1heCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UpKSkKCiAgICAgICAgICAgIChpZiBzdGF0dXMKICAg ICAgICAgICAgICAgIChwZ2ctc2l0dWF0ZS1vdXRwdXQgKHBvaW50LW1pbikgKHBvaW50LW1heCkp CiAgICAgICAgICAgICAgOzsgZmFpbGVkIC0gaGFuZGxlIHBhc3NwaHJhc2UgY2FjaGluZwogICAg ICAgICAgICAgIChpZiB2ZXJpZnlpbmcKICAgICAgICAgICAgICAgICAgKHRocm93ICdlbmNyeXB0 aW9uLWZhaWxlZCBuaWwpCiAgICAgICAgICAgICAgICAocGdnLXJlbW92ZS1wYXNzcGhyYXNlLWZy b20tY2FjaGUgdGFyZ2V0LWNhY2hlLWlkIHQpCiAgICAgICAgICAgICAgICAoZXJyb3IgIlN5bW1l dHJpYy1jaXBoZXIgJXNjcnlwdGlvbiBmYWlsZWQgLSAlcyIKICAgICAgICAgICAgICAgICAgICAg ICAoaWYgZGVjcnlwdCAiZGUiICJlbiIpCiAgICAgICAgICAgICAgICAgICAgICAgInRyeSBhZ2Fp biB3aXRoIGRpZmZlcmVudCBwYXNzcGhyYXNlLiIpKSkpCgogICAgICAgICAgIDs7IGVuY3J5cHQg J2tleXBhaXI6CiAgICAgICAgICAgKChub3QgZGVjcnlwdCkKCiAgICAgICAgICAgIChzZXRxIHN0 YXR1cwoKICAgICAgICAgICAgICAgICAgKHBnZy1lbmNyeXB0IGZvci1rZXkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5pbCAocG9pbnQtbWluKSAocG9pbnQtbWF4KSBwYXNzcGhyYXNl KSkKCiAgICAgICAgICAgIChpZiBzdGF0dXMKICAgICAgICAgICAgICAgIChwZ2ctc2l0dWF0ZS1v dXRwdXQgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCiAgICAgICAgICAgICAgKGVycm9yIChwZ2ct cmVtb3ZlLXBhc3NwaHJhc2UtZnJvbS1jYWNoZSB0YXJnZXQtY2FjaGUtaWQgdCkKICAgICAgICAg ICAgICAgICAgICAgKGVycm9yICJlbmNyeXB0aW9uIGZhaWxlZCIpKSkpCgogICAgICAgICAgIDs7 IGRlY3J5cHQgJ2tleXBhaXI6CiAgICAgICAgICAgKHQKCiAgICAgICAgICAgIChzZXRxIHN0YXR1 cwogICAgICAgICAgICAgICAgICAocGdnLWRlY3J5cHQgKHBvaW50LW1pbikgKHBvaW50LW1heCkg cGFzc3BocmFzZSkpCgogICAgICAgICAgICAoaWYgc3RhdHVzCiAgICAgICAgICAgICAgICAocGdn LXNpdHVhdGUtb3V0cHV0IChwb2ludC1taW4pIChwb2ludC1tYXgpKQogICAgICAgICAgICAgIChl cnJvciAocGdnLXJlbW92ZS1wYXNzcGhyYXNlLWZyb20tY2FjaGUgdGFyZ2V0LWNhY2hlLWlkIHQp CiAgICAgICAgICAgICAgICAgICAgIChlcnJvciAiZGVjcnlwdGlvbiBmYWlsZWQiKSkpKSkKCiAg ICAgICAgICAoc2V0cSByZXN1bHQtdGV4dAogICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJp bmctbm8tcHJvcGVydGllcwogICAgICAgICAgICAgICAgIDEgKC0gKHBvaW50LW1heCkgKGlmIGRl Y3J5cHQgMCAxKSkpKQogICAgICAgICAgKQoKICAgICAgICA7OyB2YWxpZGF0ZSByZXN1bHQgLSBu b24tZW1wdHkKICAgICAgICAoY29uZCAoKG5vdCByZXN1bHQtdGV4dCkKICAgICAgICAgICAgICAg KGlmIHZlcmlmeWluZwogICAgICAgICAgICAgICAgICAgbmlsCiAgICAgICAgICAgICAgICAgOzsg dHJhbnNmb3JtIHdhcyBmcnVpdGxlc3MsIHJldHJ5IHcvbmV3IHBhc3NwaHJhc2UuCiAgICAgICAg ICAgICAgICAgKHBnZy1yZW1vdmUtcGFzc3BocmFzZS1mcm9tLWNhY2hlIHRhcmdldC1jYWNoZS1p ZCB0KQogICAgICAgICAgICAgICAgIChhbGxvdXQtZW5jcnlwdC1zdHJpbmcgdGV4dCBkZWNyeXB0 IGFsbG91dC1idWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eS10eXBlIGZvci1rZXkgbmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoaWYgcmV0cmllZCAoMSsgcmV0cmllZCkgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlamVjdGVkIHZlcmlmeWluZyBuaWwpKSkKCiAgICAgICAgICAgICAgOzsg UmV0cnkgKHdpdGhpbiBsaW1pdCkgaWYgY2lwaGVydGV4dCBjb250YWlucyByZWplY3Rpb25zOgog ICAgICAgICAgICAgICgoYW5kIChub3QgZGVjcnlwdCkKICAgICAgICAgICAgICAgICAgICA7OyBD aGVjayBmb3IgZGlzcXVhbGlmaWNhdGlvbiBvZiB0aGlzIGNpcGhlcnRleHQ6CiAgICAgICAgICAg ICAgICAgICAgKGxldCAoKHJlZ2V4cHMgcmVqZWN0LWNpcGhlcnRleHQtcmVnZXhwcykKICAgICAg ICAgICAgICAgICAgICAgICAgICByZWplY3QtaXQpCiAgICAgICAgICAgICAgICAgICAgICAod2hp bGUgKGFuZCByZWdleHBzIChub3QgcmVqZWN0LWl0KSkKICAgICAgICAgICAgICAgICAgICAgICAg KHNldHEgcmVqZWN0LWl0IChzdHJpbmctbWF0Y2ggKGNhciByZWdleHBzKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtdGV4dCkpCiAg ICAgICAgICAgICAgICAgICAgICAgIChwb3AgcmVnZXhwcykpCiAgICAgICAgICAgICAgICAgICAg ICByZWplY3QtaXQpKQogICAgICAgICAgICAgICAoc2V0cSByZWplY3Rpb25zLWxlZnQgKDEtIHJl amVjdGlvbnMtbGVmdCkpCiAgICAgICAgICAgICAgIChpZiAoPD0gcmVqZWN0aW9ucy1sZWZ0IDAp CiAgICAgICAgICAgICAgICAgICAoZXJyb3IgKGNvbmNhdCAiQ2lwaGVydGV4dCByZWplY3RlZCB0 b28gbWFueSB0aW1lcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKCVzKSwg cGVyIGAlcyciKQogICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1lbmNyeXB0aW9uLWNp cGhlcnRleHQtcmVqZWN0aW9uLWNlaWxpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxs b3V0LWVuY3J5cHRpb24tY2lwaGVydGV4dC1yZWplY3Rpb24tcmVnZXhwcykKICAgICAgICAgICAg ICAgICAoYWxsb3V0LWVuY3J5cHQtc3RyaW5nIHRleHQgZGVjcnlwdCBhbGxvdXQtYnVmZmVyCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktdHlwZSBmb3Ita2V5IG5p bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cmllZCAoMSsgcmVq ZWN0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZnlpbmcg cGFzc3BocmFzZSkpKQogICAgICAgICAgICAgIDs7IEJhcmYgaWYgZW5jcnlwdGlvbiB5aWVsZHMg ZXh0cmFvcmRpbmFyeSBjb250cm9sIGNoYXJzOgogICAgICAgICAgICAgICgoYW5kIChub3QgZGVj cnlwdCkKICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoICJbXEMtYVxDLWtcQy1vLVxD LXpcQy1AXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC10ZXh0KSkK ICAgICAgICAgICAgICAgKGVycm9yIChjb25jYXQgIkVuY3J5cHRpb24gcHJvZHVjZWQgbm9uLWFy bW9yZWQgdGV4dCwgd2hpY2giCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25mbGlj dHMgd2l0aCBhbGxvdXQgbW9kZSAtIHJlY29uZmlndXJlISIpKSkKCiAgICAgICAgICAgICAgOzsg dmFsaWQgcmVzdWx0IGFuZCBqdXN0IHZlcmlmeWluZyBvciBub24tc3ltbWV0cmljOgogICAgICAg ICAgICAgICgob3IgdmVyaWZ5aW5nIChub3QgKGVxdWFsIGtleS10eXBlICdzeW1tZXRyaWMpKSkK ICAgICAgICAgICAgICAgKGlmIChvciB2ZXJpZnlpbmcgZGVjcnlwdCkKICAgICAgICAgICAgICAg ICAgIChwZ2ctYWRkLXBhc3NwaHJhc2UtdG8tY2FjaGUgdGFyZ2V0LWNhY2hlLWlkCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UgdCkpCiAg ICAgICAgICAgICAgIHJlc3VsdC10ZXh0KQoKICAgICAgICAgICAgICA7OyB2YWxpZCByZXN1bHQg YW5kIHJlZ3VsYXIgc3ltbWV0cmljIC0gInJlZ2lzdGVyIgogICAgICAgICAgICAgIDs7IHBhc3Nw aHJhc2Ugd2l0aCBtbmVtb25pYyBhaWRzL2NhY2hlLgogICAgICAgICAgICAgICh0CiAgICAgICAg ICAgICAgIChzZXQtYnVmZmVyIGFsbG91dC1idWZmZXIpCiAgICAgICAgICAgICAgIChpZiBwYXNz cGhyYXNlCiAgICAgICAgICAgICAgICAgICAocGdnLWFkZC1wYXNzcGhyYXNlLXRvLWNhY2hlIHRh cmdldC1jYWNoZS1pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYXNzcGhyYXNlIHQpKQogICAgICAgICAgICAgICAoYWxsb3V0LXVwZGF0ZS1wYXNzcGhy YXNlLW1uZW1vbmljLWFpZHMgZm9yLWtleSBwYXNzcGhyYXNlCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtYnVmZmVyKQogICAgICAg ICAgICAgICByZXN1bHQtdGV4dCkKICAgICAgICAgICAgICApCiAgICAgICAgKQogICAgKQogICkK Ozs7XyAgPiBhbGxvdXQtb2J0YWluLXBhc3NwaHJhc2UgKGZvci1rZXkgY2FjaGUtaWQgcHJvbXB0 LWlkIGtleS10eXBlCjs7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs bG91dC1idWZmZXIgcmV0cmllZCBmZXRjaC1wYXNzKQooZGVmdW4gYWxsb3V0LW9idGFpbi1wYXNz cGhyYXNlIChmb3Ita2V5IGNhY2hlLWlkIHByb21wdC1pZCBrZXktdHlwZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG91dC1idWZmZXIgcmV0cmllZCBmZXRjaC1w YXNzKQogICJPYnRhaW4gcGFzc3BocmFzZSBmb3IgYSBrZXkgZnJvbSB0aGUgY2FjaGUgb3IgZWxz ZSBmcm9tIHRoZSB1c2VyLgoKV2hlbiBvYnRhaW5pbmcgZnJvbSB0aGUgdXNlciwgc3ltbWV0cmlj LWNpcGhlciBwYXNzcGhyYXNlcyBhcmUgdmVyaWZpZWQKYWdhaW5zdCBlaXRoZXIsIGlmIGF2YWls YWJsZSBhbmQgZW5hYmxlZCwgYSByYW5kb20gc3RyaW5nIHRoYXQgd2FzCmVuY3J5cHRlZCBhZ2Fp bnN0IHRoZSBwYXNzcGhyYXNlLCBvciBlbHNlIGFnYWluc3QgcmVwZWF0ZWQgZW50cnkgYnkgdGhl CnVzZXIgZm9yIGNvcnJvYm9yYXRpb24uCgpGT1ItS0VZIGlzIHRoZSBrZXkgZm9yIHdoaWNoIHRo ZSBwYXNzcGhyYXNlIGlzIGJlaW5nIG9idGFpbmVkLgoKQ0FDSEUtSUQgaXMgdGhlIGNhY2hlIGlk IG9mIHRoZSBrZXkgZm9yIHRoZSBwYXNzcGhyYXNlLgoKUFJPTVBULUlEIGlzIHRoZSBpZCBmb3Ig dXNlIHdoZW4gcHJvbXB0aW5nIHRoZSB1c2VyLgoKS0VZLVRZUEUgaXMgZWl0aGVyICdzeW1tZXRy aWMgb3IgJ2tleXBhaXIuCgpBTExPVVQtQlVGRkVSIGlzIHRoZSBidWZmZXIgY29udGFpbmluZyB0 aGUgZW50cnkgYmVpbmcgZW4vZGVjcnlwdGVkLgoKUkVUUklFRCBpcyB0aGUgbnVtYmVyIG9mIHRo aXMgYXR0ZW1wdCB0byBvYnRhaW4gdGhpcyBwYXNzcGhyYXNlLgoKRkVUQ0gtUEFTUyBjYXVzZXMg dGhlIHBhc3NwaHJhc2UgdG8gYmUgc29saWNpdGVkIGZyb20gdGhlIHVzZXIsIHJlZ2FyZGxlc3MK b2YgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGNhY2hlZCBjb3B5LiIKCiAgKGlmIChub3QgKGVxdWFs IGtleS10eXBlICdzeW1tZXRyaWMpKQogICAgICA7OyBkbyByZWd1bGFyIHBhc3NwaHJhc2UgcmVh ZCBvbiBub24tc3ltbWV0cmljIHBhc3NwaHJhc2U6CiAgICAgIChwZ2ctcmVhZC1wYXNzcGhyYXNl IChmb3JtYXQgIiVzIHBhc3NwaHJhc2UlczogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh1cGNhc2UgKGZvcm1hdCAiJXMiIChvciBwZ2ctc2NoZW1lCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnZy1kZWZhdWx0 LXNjaGVtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiR1BHIikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGlmIHByb21wdC1pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChm b3JtYXQgIiBmb3IgJXMiIHByb21wdC1pZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS1pZCB0KQoKICAg IDs7IFN5bW1ldHJpYyBoZXJlb246CgogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChzZXQtYnVm ZmVyIGFsbG91dC1idWZmZXIpCiAgICAgIChsZXQqICgoaGludCAoaWYgKGFuZCAobm90IChzdHJp bmc9IGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5nICIiKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChvciAoZXF1YWwgYWxsb3V0LXBhc3NwaHJhc2UtaGludC1oYW5kbGluZyAnYWx3 YXlzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGVxdWFsIGFsbG91dC1w YXNzcGhyYXNlLWhpbnQtaGFuZGxpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnbmVlZGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0cmllZCkpKQogICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIiBbJXNdIiBhbGxvdXQt cGFzc3BocmFzZS1oaW50LXN0cmluZykKICAgICAgICAgICAgICAgICAgICAgIiIpKQogICAgICAg ICAgICAgKHJldHJ5LW1lc3NhZ2UgKGlmIHJldHJpZWQgKGZvcm1hdCAiICglcyByZXRyeSkiIHJl dHJpZWQpICIiKSkKICAgICAgICAgICAgIChwcm9tcHQtc2Fucy1oaW50IChmb3JtYXQgIiclcycg c3ltbWV0cmljIHBhc3NwaHJhc2UlczogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcm9tcHQtaWQgcmV0cnktbWVzc2FnZSkpCiAgICAgICAgICAgICAoZnVsbC1wcm9t cHQgKGZvcm1hdCAiJyVzJyBzeW1tZXRyaWMgcGFzc3BocmFzZSVzJXM6ICIKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByb21wdC1pZCBoaW50IHJldHJ5LW1lc3NhZ2UpKQogICAg ICAgICAgICAgKHByb21wdCBmdWxsLXByb21wdCkKICAgICAgICAgICAgICh2ZXJpZmllci1zdHJp bmcgKGFsbG91dC1nZXQtZW5jcnlwdGlvbi1wYXNzcGhyYXNlLXZlcmlmaWVyKSkKCiAgICAgICAg ICAgICAoY2FjaGVkIChhbmQgKG5vdCBmZXRjaC1wYXNzKQogICAgICAgICAgICAgICAgICAgICAg ICAgIChwZ2ctcmVhZC1wYXNzcGhyYXNlLWZyb20tY2FjaGUgY2FjaGUtaWQgdCkpKQogICAgICAg ICAgICAgKGdvdC1wYXNzIChvciBjYWNoZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBn Zy1yZWFkLXBhc3NwaHJhc2UgZnVsbC1wcm9tcHQgY2FjaGUtaWQgdCkpKQogICAgICAgICAgICAg Y29uZmlybWF0aW9uKQoKICAgICAgICAoaWYgKG5vdCBnb3QtcGFzcykKICAgICAgICAgICAgbmls CgogICAgICAgICAgOzsgRHVwbGljYXRlIG91ciBoYW5kbGUgb24gdGhlIHBhc3NwaHJhc2Ugc28g aXQncyBub3QgY2xvYmJlcmVkIGJ5CiAgICAgICAgICA7OyBkZWFjdGl2YXRlLXBhc3N3ZCBtZW1v cnkgY2xlYXJpbmc6CiAgICAgICAgICAoc2V0cSBnb3QtcGFzcyAoY29weS1zZXF1ZW5jZSBnb3Qt cGFzcykpCgogICAgICAgICAgKGNvbmQgKHZlcmlmaWVyLXN0cmluZwogICAgICAgICAgICAgICAg IChzYXZlLXdpbmRvdy1leGN1cnNpb24KICAgICAgICAgICAgICAgICAgIChpZiAoYWxsb3V0LWVu Y3J5cHQtc3RyaW5nIHZlcmlmaWVyLXN0cmluZyAnZGVjcnlwdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LWJ1ZmZlciAnc3ltbWV0cmljCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ita2V5IG5pbCAwIDAg J3ZlcmlmeWluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvcHktc2VxdWVuY2UgZ290LXBhc3MpKQogICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGNv bmZpcm1hdGlvbiAoZm9ybWF0ICIlcyIgZ290LXBhc3MpKSkpCgogICAgICAgICAgICAgICAgIChp ZiAoYW5kIChub3QgY29uZmlybWF0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAo eWVzLW9yLW5vLXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQgIlBhc3Nw aHJhc2UgZGlmZmVycyBmcm9tIGVzdGFibGlzaGVkIgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiIC0gdXNlIG5ldyBvbmUgaW5zdGVhZD8gIikpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDs7IGRlYWN0aXZhdGUgcGFzc3dvcmQgZm9yIHN1YnNlcXVlbnQKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgY29uZmlybWF0aW9uOgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cGdnLXJlbW92ZS1wYXNzcGhyYXNlLWZyb20tY2FjaGUgY2FjaGUtaWQgdCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc2V0cSBwcm9tcHQgcHJvbXB0LXNhbnMtaGludCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0KSkKICAgICAgICAgICAgICAgICAgICAgKHByb2duIChwZ2ctcmVtb3ZlLXBhc3NwaHJhc2Ut ZnJvbS1jYWNoZSBjYWNoZS1pZCB0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9y ICJXcm9uZyBwYXNzcGhyYXNlLiIpKSkpCiAgICAgICAgICAgICAgICA7OyBObyB2ZXJpZmllciBz dHJpbmcgLSBmb3JjZSBjb25maXJtYXRpb24gYnkgcmVwZXRpdGlvbiBvZgogICAgICAgICAgICAg ICAgOzsgKG5ldykgcGFzc3BocmFzZToKICAgICAgICAgICAgICAgICgob3IgZmV0Y2gtcGFzcyAo bm90IGNhY2hlZCkpCiAgICAgICAgICAgICAgICAgKHBnZy1yZW1vdmUtcGFzc3BocmFzZS1mcm9t LWNhY2hlIGNhY2hlLWlkIHQpKSkpCiAgICAgICAgOzsgY29uZmlybWF0aW9uIHZzIG5ldyBpbnB1 dCAtIGRvaW5nIHBnZy1yZWFkLXBhc3NwaHJhc2Ugd2lsbCBkbyB0aGUKICAgICAgICA7OyByaWdo dCB0aGluZywgaW4gZWl0aGVyIGNhc2U6CiAgICAgICAgKGlmIChub3QgY29uZmlybWF0aW9uKQog ICAgICAgICAgICAoc2V0cSBjb25maXJtYXRpb24KICAgICAgICAgICAgICAgICAgKHBnZy1yZWFk LXBhc3NwaHJhc2UgKGNvbmNhdCBwcm9tcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiIC4uLiBjb25maXJtIHNwZWxsaW5nOiAiKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS1pZCB0KSkpCiAgICAgICAgKHByb2cxCiAg ICAgICAgICAgIChpZiAoZXF1YWwgZ290LXBhc3MgY29uZmlybWF0aW9uKQogICAgICAgICAgICAg ICAgY29uZmlybWF0aW9uCiAgICAgICAgICAgICAgKGlmICh5ZXMtb3Itbm8tcCAoY29uY2F0ICJz cGVsbGluZyBvZiBvcmlnaW5hbCBhbmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIgY29uZmlybWF0aW9uIGRpZmZlciAtIHJldHJ5PyAiKSkKICAgICAgICAgICAgICAg ICAgKHByb2duIChzZXRxIHJldHJpZWQgKGlmIHJldHJpZWQgKDErIHJldHJpZWQpIDEpKQogICAg ICAgICAgICAgICAgICAgICAgICAgKHBnZy1yZW1vdmUtcGFzc3BocmFzZS1mcm9tLWNhY2hlIGNh Y2hlLWlkIHQpCiAgICAgICAgICAgICAgICAgICAgICAgICA7OyByZWN1cnNlIHRvIHRoaXMgcm91 dGluZToKICAgICAgICAgICAgICAgICAgICAgICAgIChwZ2ctcmVhZC1wYXNzcGhyYXNlIHByb21w dC1zYW5zLWhpbnQgY2FjaGUtaWQgdCkpCiAgICAgICAgICAgICAgICAocGdnLXJlbW92ZS1wYXNz cGhyYXNlLWZyb20tY2FjaGUgY2FjaGUtaWQgdCkKICAgICAgICAgICAgICAgIChlcnJvciAiQ29u ZmlybWF0aW9uIGZhaWxlZC4iKSkpKSkpKSkKOzs7XyAgPiBhbGxvdXQtZW5jcnlwdGVkLXRvcGlj LXAgKCkKKGRlZnVuIGFsbG91dC1lbmNyeXB0ZWQtdG9waWMtcCAoKQogICJUcnVlIGlmIHRoZSBj dXJyZW50IHRvcGljIGlzIGVuY3J5cHRhYmxlIGFuZCBlbmNyeXB0ZWQuIgogIChzYXZlLWV4Y3Vy c2lvbgogICAgKGFsbG91dC1lbmQtb2YtcHJlZml4IHQpCiAgICAoYW5kIChzdHJpbmc9IChidWZm ZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKDEtIChwb2ludCkpIChwb2ludCkpCiAgICAgICAg ICAgICAgICAgIGFsbG91dC10b3BpYy1lbmNyeXB0aW9uLWJ1bGxldCkKICAgICAgICAgKGxvb2tp bmctYXQgIlxcKiIpKQogICAgKQogICkKOzs7XyAgPiBhbGxvdXQtZW5jcnlwdGVkLWtleS1pbmZv ICh0ZXh0KQo7OyBYWFggZ3BnLXNwZWNpZmljLCBhbGFzCihkZWZ1biBhbGxvdXQtZW5jcnlwdGVk LWtleS1pbmZvICh0ZXh0KQogICJSZXR1cm4gYSBwYWlyIG9mIHRoZSBrZXkgdHlwZSBhbmQgaWRl bnRpdHkgb2YgYSByZWNpcGllbnQncyBzZWNyZXQga2V5LgoKVGhlIGtleSB0eXBlIGlzIG9uZSBv ZiAnc3ltbWV0cmljIG9yICdrZXlwYWlyLgoKaWYgJ2tleXBhaXIsIGFuZCBzb21lIG9mIHRoZSB1 c2VyJ3Mgc2VjcmV0IGtleXMgYXJlIGFtb25nIHRob3NlIGZvciB3aGljaAp0aGUgbWVzc2FnZSB3 YXMgZW5jb2RlZCwgcmV0dXJuIHRoZSBpZGVudGl0eSBvZiB0aGUgZmlyc3QuICBvdGhlcndpc2Us CnJldHVybiBuaWwgZm9yIHRoZSBzZWNvbmQgaXRlbSBvZiB0aGUgcGFpci4KCkFuIGVycm9yIGlz IHJhaXNlZCBpZiB0aGUgdGV4dCBpcyBub3QgZW5jcnlwdGVkLiIKICAocmVxdWlyZSAncGdnLXBh cnNlKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHdpdGgtdGVtcC1idWZmZXIKICAgICAgKGluc2Vy dCB0ZXh0KQogICAgICAobGV0KiAoKHBhcnNlZC1hcm1vciAocGdnLXBhcnNlLWFybW9yLXJlZ2lv biAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpCiAgICAgICAgICAgICAodHlwZSAoaWYgKHBnZy1n cGctc3ltbWV0cmljLWtleS1wIHBhcnNlZC1hcm1vcikKICAgICAgICAgICAgICAgICAgICAgICAn c3ltbWV0cmljCiAgICAgICAgICAgICAgICAgICAgICdrZXlwYWlyKSkKICAgICAgICAgICAgIHNl Y3JldC1rZXlzIGZpcnN0LXNlY3JldC1rZXkgZm9yLWtleS1vd25lcikKICAgICAgICAoaWYgKGVx dWFsIHR5cGUgJ2tleXBhaXIpCiAgICAgICAgICAgIChzZXRxIHNlY3JldC1rZXlzIChwZ2ctZ3Bn LWxvb2t1cC1hbGwtc2VjcmV0LWtleXMpCiAgICAgICAgICAgICAgICAgIGZpcnN0LXNlY3JldC1r ZXkgKHBnZy1ncGctc2VsZWN0LW1hdGNoaW5nLWtleSBwYXJzZWQtYXJtb3IKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Jl dC1rZXlzKQogICAgICAgICAgICAgICAgICBmb3Ita2V5LW93bmVyIChhbmQgZmlyc3Qtc2VjcmV0 LWtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBnZy1ncGctbG9va3Vw LWtleS1vd25lcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0LXNl Y3JldC1rZXkpKSkpCiAgICAgICAgKGxpc3QgdHlwZSAocGdnLWdwZy1rZXktaWQtZnJvbS1rZXkt b3duZXIgZm9yLWtleS1vd25lcikpCiAgICAgICAgKQogICAgICApCiAgICApCiAgKQo7OztfICA+ IGFsbG91dC1jcmVhdGUtZW5jcnlwdGlvbi1wYXNzcGhyYXNlLXZlcmlmaWVyIChwYXNzcGhyYXNl KQooZGVmdW4gYWxsb3V0LWNyZWF0ZS1lbmNyeXB0aW9uLXBhc3NwaHJhc2UtdmVyaWZpZXIgKHBh c3NwaHJhc2UpCiAgIkVuY3J5cHQgcmFuZG9tIG1lc3NhZ2UgZm9yIGxhdGVyIHZhbGlkYXRpb24g b2Ygc3ltbWV0cmljIGtleSdzIHBhc3NwaHJhc2UuIgogIDs7IHVzZSAyMCByYW5kb20gYXNjaWkg Y2hhcmFjdGVycywgYWNyb3NzIHRoZSBlbnRpcmUgYXNjaWkgcmFuZ2UuCiAgKHJhbmRvbSB0KQog IChsZXQgKChzcGV3IChtYWtlLXN0cmluZyAyMCA/XDApKSkKICAgIChkb3RpbWVzIChpIChsZW5n dGggc3BldykpCiAgICAgIChhc2V0IHNwZXcgaSAoMSsgKHJhbmRvbSAyNTQpKSkpCiAgICAoYWxs b3V0LWVuY3J5cHQtc3RyaW5nIHNwZXcgbmlsIChjdXJyZW50LWJ1ZmZlcikgJ3N5bW1ldHJpYwog ICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgbmlsIDAgMCBwYXNzcGhyYXNlKSkKICApCjs7 O18gID4gYWxsb3V0LXVwZGF0ZS1wYXNzcGhyYXNlLW1uZW1vbmljLWFpZHMgKGZvci1rZXkgcGFz c3BocmFzZQo7OzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG91dGxpbmUtYnVmZmVyKQooZGVmdW4gYWxsb3V0LXVwZGF0ZS1wYXNzcGhyYXNlLW1u ZW1vbmljLWFpZHMgKGZvci1rZXkgcGFzc3BocmFzZQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZS1idWZmZXIpCiAgIlVwZGF0ZSBw YXNzcGhyYXNlIHZlcmlmaWVyIGFuZCBoaW50IHN0cmluZ3MgaWYgbmVjZXNzYXJ5LgoKU2VlIGBh bGxvdXQtcGFzc3BocmFzZS12ZXJpZmllci1zdHJpbmcnIGFuZCBgYWxsb3V0LXBhc3NwaHJhc2Ut aGludC1zdHJpbmcnCnNldHRpbmdzLgoKUEFTU1BIUkFTRSBpcyB0aGUgcGFzc3BocmFzZSBiZWlu ZyBtbmVtb25pY2l6ZWQKCk9VVExJTkUtQlVGRkVSIGlzIHRoZSBidWZmZXIgb2YgdGhlIG91dGxp bmUgYmVpbmcgYWRqdXN0ZWQuCgpUaGVzZSBhcmUgdXNlZCB0byBoZWxwIHRoZSB1c2VyIGtlZXAg dHJhY2sgb2YgdGhlIHBhc3NwaHJhc2UgdGhleSB1c2UgZm9yCnN5bW1ldHJpYyBlbmNyeXB0aW9u IGluIHRoZSBmaWxlLgoKQmVoYXZpb3IgaXMgZ292ZXJuZWQgYnkgYGFsbG91dC1wYXNzcGhyYXNl LXZlcmlmaWVyLWhhbmRsaW5nJywKYGFsbG91dC1wYXNzcGhyYXNlLWhpbnQtaGFuZGxpbmcnLCBh bmQgYWxzbywgY29udHJvbGxpbmcgd2hldGhlciB0aGUgdmFsdWVzCmFyZSBwcmVzZXJ2ZWQgb24g RW1hY3MgbG9jYWwgZmlsZSB2YXJpYWJsZXMsCmBhbGxvdXQtZW5hYmxlLWZpbGUtdmFyaWFibGUt YWRqdXN0bWVudCcuIgoKICA7OyBJZiBwYXNzcGhyYXNlIGRvZXNuJ3QgYWdyZWUgd2l0aCBjdXJy ZW50IHZlcmlmaWVyOgogIDs7ICAgLSBhZGp1c3QgdGhlIHZlcmlmaWVyCiAgOzsgICAtIGlmIHBh c3NwaHJhc2UgaGludCBoYW5kbGluZyBpcyBlbmFibGVkLCBhZGp1c3QgdGhlIHBhc3NwaHJhc2Ug aGludAogIDs7ICAgLSBpZiBmaWxlIHZhciBzZXR0aW5ncyBhcmUgZW5hYmxlZCwgYWRqdXN0IHRo ZSBmaWxlIHZhcnMKCiAgKGxldCogKChuZXctdmVyaWZpZXItbmVlZGVkIChub3QgKGFsbG91dC12 ZXJpZnktcGFzc3BocmFzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3It a2V5IHBhc3NwaHJhc2Ugb3V0bGluZS1idWZmZXIpKSkKICAgICAgICAgKG5ldy12ZXJpZmllci1z dHJpbmcKICAgICAgICAgIChpZiBuZXctdmVyaWZpZXItbmVlZGVkCiAgICAgICAgICAgICAgOzsg Q29sbGFwc2UgdG8gYSBzaW5nbGUgbGluZSBhbmQgZW5jbG9zZSBpbiBzdHJpbmcgcXVvdGVzOgog ICAgICAgICAgICAgIChzdWJzdC1jaGFyLWluLXN0cmluZwogICAgICAgICAgICAgICA/XG4gP1xD LWEgKGFsbG91dC1jcmVhdGUtZW5jcnlwdGlvbi1wYXNzcGhyYXNlLXZlcmlmaWVyCiAgICAgICAg ICAgICAgICAgICAgICAgICAgcGFzc3BocmFzZSkpKSkKICAgICAgICAgbmV3LWhpbnQpCiAgICAo d2hlbiBuZXctdmVyaWZpZXItc3RyaW5nCiAgICAgIDs7IGRvIHRoZSBwYXNzcGhyYXNlIGhpbnQg Zmlyc3QsIHNpbmNlIGl0J3MgaW50ZXJhY3RpdmUKICAgICAgKHdoZW4gKGFuZCBhbGxvdXQtcGFz c3BocmFzZS1oaW50LWhhbmRsaW5nCiAgICAgICAgICAgICAgICAgKG5vdCAoZXF1YWwgYWxsb3V0 LXBhc3NwaHJhc2UtaGludC1oYW5kbGluZyAnZGlzYWJsZWQpKSkKICAgICAgICAoc2V0cSBuZXct aGludAogICAgICAgICAgICAgIChyZWFkLWZyb20tbWluaWJ1ZmZlciAiUGFzc3BocmFzZSBoaW50 IHRvIGpvZyB5b3VyIG1lbW9yeTogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhbGxvdXQtcGFzc3BocmFzZS1oaW50LXN0cmluZykpCiAgICAgICAgKHdoZW4gKG5vdCAoc3Ry aW5nPSBuZXctaGludCBhbGxvdXQtcGFzc3BocmFzZS1oaW50LXN0cmluZykpCiAgICAgICAgICAo c2V0cSBhbGxvdXQtcGFzc3BocmFzZS1oaW50LXN0cmluZyBuZXctaGludCkKICAgICAgICAgIChh bGxvdXQtYWRqdXN0LWZpbGUtdmFyaWFibGUgImFsbG91dC1wYXNzcGhyYXNlLWhpbnQtc3RyaW5n IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdXQtcGFzc3BocmFz ZS1oaW50LXN0cmluZykpKQogICAgICAod2hlbiBhbGxvdXQtcGFzc3BocmFzZS12ZXJpZmllci1o YW5kbGluZwogICAgICAgIChzZXRxIGFsbG91dC1wYXNzcGhyYXNlLXZlcmlmaWVyLXN0cmluZyBu ZXctdmVyaWZpZXItc3RyaW5nKQogICAgICAgIChhbGxvdXQtYWRqdXN0LWZpbGUtdmFyaWFibGUg ImFsbG91dC1wYXNzcGhyYXNlLXZlcmlmaWVyLXN0cmluZyIKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFsbG91dC1wYXNzcGhyYXNlLXZlcmlmaWVyLXN0cmluZykpCiAgICAg ICkKICAgICkKICApCjs7O18gID4gYWxsb3V0LWdldC1lbmNyeXB0aW9uLXBhc3NwaHJhc2UtdmVy aWZpZXIgKCkKKGRlZnVuIGFsbG91dC1nZXQtZW5jcnlwdGlvbi1wYXNzcGhyYXNlLXZlcmlmaWVy ICgpCiAgIlJldHVybiB0ZXh0IG9mIHRoZSBlbmNyeXB0IHBhc3NwaHJhc2UgdmVyaWZpZXIsIHVu bWFzc2FnZWQsIG9yIG5pbCBpZiBub25lLgoKRGVyaXZlZCBmcm9tIHZhbHVlIG9mIGBhbGxvdXQt cGFzc3BocmFzZS12ZXJpZmllci1zdHJpbmcnLiIKCiAgKGxldCAoKHZlcmlmaWVyLXN0cmluZyAo YW5kIChib3VuZHAgJ2FsbG91dC1wYXNzcGhyYXNlLXZlcmlmaWVyLXN0cmluZykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZpZXItc3RyaW5nKSkp CiAgICAoaWYgdmVyaWZpZXItc3RyaW5nCiAgICAgICAgOzsgUmV0dXJuIGl0IHVuY29sbGFwc2Vk CiAgICAgICAgKHN1YnN0LWNoYXItaW4tc3RyaW5nID9cQy1hID9cbiB2ZXJpZmllci1zdHJpbmcp KQogICApCiAgKQo7OztfICA+IGFsbG91dC12ZXJpZnktcGFzc3BocmFzZSAoa2V5IHBhc3NwaHJh c2UgYWxsb3V0LWJ1ZmZlcikKKGRlZnVuIGFsbG91dC12ZXJpZnktcGFzc3BocmFzZSAoa2V5IHBh c3NwaHJhc2UgYWxsb3V0LWJ1ZmZlcikKICAiVHJ1ZSBpZiBwYXNzcGhyYXNlIHN1Y2Nlc3NmdWxs eSBkZWNyeXB0cyB2ZXJpZmllciwgbmlsIG90aGVyd2lzZS4KClwiT3RoZXJ3aXNlXCIgaW5jbHVk ZXMgYWJzZW5jZSBvZiBwYXNzcGhyYXNlIHZlcmlmaWVyLiIKICAoc2F2ZS1leGN1cnNpb24KICAg IChzZXQtYnVmZmVyIGFsbG91dC1idWZmZXIpCiAgICAoYW5kIChib3VuZHAgJ2FsbG91dC1wYXNz cGhyYXNlLXZlcmlmaWVyLXN0cmluZykKICAgICAgICAgYWxsb3V0LXBhc3NwaHJhc2UtdmVyaWZp ZXItc3RyaW5nCiAgICAgICAgIChhbGxvdXQtZW5jcnlwdC1zdHJpbmcgKGFsbG91dC1nZXQtZW5j cnlwdGlvbi1wYXNzcGhyYXNlLXZlcmlmaWVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZGVjcnlwdCBhbGxvdXQtYnVmZmVyICdzeW1tZXRyaWMKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAga2V5IG5pbCAwIDAgJ3ZlcmlmeWluZyBwYXNzcGhyYXNlKQogICAgICAg ICB0KSkpCjs7O18gID4gYWxsb3V0LW5leHQtdG9waWMtcGVuZGluZy1lbmNyeXB0aW9uICgmb3B0 aW9uYWwgZXhjZXB0LW1hcmspCihkZWZ1biBhbGxvdXQtbmV4dC10b3BpYy1wZW5kaW5nLWVuY3J5 cHRpb24gKCZvcHRpb25hbCBleGNlcHQtbWFyaykKICAiUmV0dXJuIHRoZSBwb2ludCBvZiB0aGUg bmV4dCB0b3BpYyBwZW5kaW5nIGVuY3J5cHRpb24sIG9yIG5pbCBpZiBub25lLgoKRVhDRVBULU1B UksgaWRlbnRpZmllcyBhIHBvaW50IHdob3NlIGNvbnRhaW5pbmcgdG9waWNzIHNob3VsZCBiZSBl eGNsdWRlZApmcm9tIGVuY3J5cHRpb24uICBUaGlzIHN1cHBvcnRzICdleGNlcHQtY3VycmVudCBt b2RlIG9mCmBhbGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcycuCgpTdWNoIGEgdG9w aWMgaGFzIHRoZSBhbGxvdXQtdG9waWMtZW5jcnlwdGlvbi1idWxsZXQgd2l0aG91dCBhbgppbW1l ZGlhdGVseSBmb2xsb3dpbmcgJyonIHRoYXQgd291bGQgbWFyayB0aGUgdG9waWMgYXMgYmVpbmcg ZW5jcnlwdGVkLiAgSXQKbXVzdCBhbHNvIGhhdmUgY29udGVudC4iCiAgKGxldCAoZG9uZSBnb3Qg Y29udGVudC1iZWcpCiAgICAod2hpbGUgKG5vdCBkb25lKQoKICAgICAgKGlmIChub3QgKHJlLXNl YXJjaC1mb3J3YXJkCiAgICAgICAgICAgICAgICAoZm9ybWF0ICJcXChcXGBcXHxcblxcKSVzICol c1teKl0iCiAgICAgICAgICAgICAgICAgICAgICAgIChyZWdleHAtcXVvdGUgYWxsb3V0LWhlYWRl ci1wcmVmaXgpCiAgICAgICAgICAgICAgICAgICAgICAgIChyZWdleHAtcXVvdGUgYWxsb3V0LXRv cGljLWVuY3J5cHRpb24tYnVsbGV0KSkKICAgICAgICAgICAgICAgIG5pbCB0KSkKICAgICAgICAg IChzZXRxIGdvdCBuaWwKICAgICAgICAgICAgICAgIGRvbmUgdCkKICAgICAgICAoZ290by1jaGFy IChzZXRxIGdvdCAobWF0Y2gtYmVnaW5uaW5nIDApKSkKICAgICAgICAoaWYgKGxvb2tpbmctYXQg IlxuIikKICAgICAgICAgICAgKGZvcndhcmQtY2hhciAxKSkKICAgICAgICAoc2V0cSBnb3QgKHBv aW50KSkpCgogICAgICAoY29uZCAoKG5vdCBnb3QpCiAgICAgICAgICAgICAoc2V0cSBkb25lIHQp KQoKICAgICAgICAgICAgKChub3QgKHNlYXJjaC1mb3J3YXJkICJcbiIpKQogICAgICAgICAgICAg KHNldHEgZ290IG5pbAogICAgICAgICAgICAgICAgICAgZG9uZSB0KSkKCiAgICAgICAgICAgICgo ZW9icCkKICAgICAgICAgICAgIChzZXRxIGdvdCBuaWwKICAgICAgICAgICAgICAgICAgIGRvbmUg dCkpCgogICAgICAgICAgICAodAogICAgICAgICAgICAgKHNldHEgY29udGVudC1iZWcgKHBvaW50 KSkKICAgICAgICAgICAgIChiYWNrd2FyZC1jaGFyIDEpCiAgICAgICAgICAgICAoYWxsb3V0LWVu ZC1vZi1zdWJ0cmVlKQogICAgICAgICAgICAgKGlmIChvciAoPD0gKHBvaW50KSBjb250ZW50LWJl ZykKICAgICAgICAgICAgICAgICAgICAgKGFuZCBleGNlcHQtbWFyawogICAgICAgICAgICAgICAg ICAgICAgICAgICg8PSBjb250ZW50LWJlZyBleGNlcHQtbWFyaykKICAgICAgICAgICAgICAgICAg ICAgICAgICAoPj0gKHBvaW50KSBleGNlcHQtbWFyaykpKQogICAgICAgICAgICAgICAgIDs7IENv bnRpbnVlIGxvb2tpbmcKICAgICAgICAgICAgICAgICAoc2V0cSBnb3QgbmlsKQogICAgICAgICAg ICAgICA7OyBHb3QgaXQhCiAgICAgICAgICAgICAgIChzZXRxIGRvbmUgdCkpKQogICAgICAgICAg ICApCiAgICAgICkKICAgIChpZiBnb3QKICAgICAgICAoZ290by1jaGFyIGdvdCkpCiAgICApCiAg KQo7OztfICA+IGFsbG91dC1lbmNyeXB0LWRlY3J5cHRlZCAoJm9wdGlvbmFsIGV4Y2VwdC1tYXJr KQooZGVmdW4gYWxsb3V0LWVuY3J5cHQtZGVjcnlwdGVkICgmb3B0aW9uYWwgZXhjZXB0LW1hcmsp CiAgIkVuY3J5cHQgdG9waWNzIHBlbmRpbmcgZW5jcnlwdGlvbiBleGNlcHQgdGhvc2UgY29udGFp bmluZyBleGVtcHRpb24gcG9pbnQuCgpFWENFUFQtTUFSSyBpZGVudGlmaWVzIGEgcG9pbnQgd2hv c2UgY29udGFpbmluZyB0b3BpY3Mgc2hvdWxkIGJlIGV4Y2x1ZGVkCmZyb20gZW5jcnlwdGlvbi4g IFRoaXMgc3VwcG9ydHMgJ2V4Y2VwdC1jdXJyZW50IG1vZGUgb2YKYGFsbG91dC1lbmNyeXB0LXVu ZW5jcnlwdGVkLW9uLXNhdmVzJy4KCklmIGEgdG9waWMgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcg ZWRpdGVkIHdhcyBlbmNyeXB0ZWQsIHdlIHJldHVybiBhIGxpc3QKY29udGFpbmluZyB0aGUgbG9j YXRpb24gb2YgdGhlIHRvcGljIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnNvciBqdXN0CmJl Zm9yZSB0aGUgdG9waWMgd2FzIGVuY3J5cHRlZC4gIFRoaXMgY2FuIGJlIHVzZWQsIGVnLCB0byBk ZWNyeXB0IHRoZSB0b3BpYwphbmQgZXhhY3RseSByZXNpdHVhdGUgdGhlIGN1cnNvciBpZiB0aGlz IGlzIGJlaW5nIGRvbmUgYXMgcGFydCBvZiBhIGZpbGUKc2F2ZS4gIFNlZSBgYWxsb3V0LWVuY3J5 cHQtdW5lbmNyeXB0ZWQtb24tc2F2ZXMnIGZvciBtb3JlIGluZm8uIgoKICAoaW50ZXJhY3RpdmUg InAiKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCogKChjdXJyZW50LW1hcmsgKHBvaW50LW1h cmtlcikpCiAgICAgICAgICAgKGN1cnJlbnQtbWFyay1wb3NpdGlvbiAobWFya2VyLXBvc2l0aW9u IGN1cnJlbnQtbWFyaykpCiAgICAgICAgICAgd2FzLW1vZGlmaWVkCiAgICAgICAgICAgYm8tc3Vi dHJlZQogICAgICAgICAgIGVkaXRpbmctdG9waWMgZWRpdGluZy1wb2ludCkKICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkKICAgICAgKHdoaWxlIChhbGxvdXQtbmV4dC10b3BpYy1wZW5kaW5n LWVuY3J5cHRpb24gZXhjZXB0LW1hcmspCiAgICAgICAgKHNldHEgd2FzLW1vZGlmaWVkIChidWZm ZXItbW9kaWZpZWQtcCkpCiAgICAgICAgKHdoZW4gKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAg ICAgICAoYW5kIChib3VuZHAgJ2FsbG91dC1lbmNyeXB0LXVuZW5jcnlwdGVkLW9uLXNhdmVzKQog ICAgICAgICAgICAgICAgICAgICBhbGxvdXQtZW5jcnlwdC11bmVuY3J5cHRlZC1vbi1zYXZlcwog ICAgICAgICAgICAgICAgICAgICAoc2V0cSBiby1zdWJ0cmVlIChyZS1zZWFyY2gtZm9yd2FyZCAi JCIpKQogICAgICAgICAgICAgICAgICAgICAobm90IChhbGxvdXQtaGlkZGVuLXApKQogICAgICAg ICAgICAgICAgICAgICAoPj0gY3VycmVudC1tYXJrIChwb2ludCkpCiAgICAgICAgICAgICAgICAg ICAgIChhbGxvdXQtZW5kLW9mLWN1cnJlbnQtc3VidHJlZSkKICAgICAgICAgICAgICAgICAgICAg KDw9IGN1cnJlbnQtbWFyayAocG9pbnQpKSkpCiAgICAgICAgICAgIChzZXRxIGVkaXRpbmctdG9w aWMgKHBvaW50KQogICAgICAgICAgICAgICAgICA7OyB3ZSBoYWQgdG8gd2FpdCBmb3IgdGhpcyAn dGlsIG5vdyBzbyBwcmlvciB0b3BpY3MgYXJlCiAgICAgICAgICAgICAgICAgIDs7IGVuY3J5cHRl ZCwgYW55IHJlbGV2YW50IHRleHQgc2hpZnRzIGFyZSBpbiBwbGFjZToKICAgICAgICAgICAgICAg ICAgZWRpdGluZy1wb2ludCAoLSBjdXJyZW50LW1hcmstcG9zaXRpb24KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY291bnQtdHJhaWxpbmctd2hpdGVzcGFjZS1yZWdpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm8tc3VidHJlZSBjdXJyZW50LW1hcmst cG9zaXRpb24pKSkpCiAgICAgICAgKGFsbG91dC10b2dnbGUtc3VidHJlZS1lbmNyeXB0aW9uKQog ICAgICAgIChpZiAobm90IHdhcy1tb2RpZmllZCkKICAgICAgICAgICAgKHNldC1idWZmZXItbW9k aWZpZWQtcCBuaWwpKQogICAgICAgICkKICAgICAgKGlmIChub3Qgd2FzLW1vZGlmaWVkKQogICAg ICAgICAoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG5pbCkpCiAgICAgIChpZiBlZGl0aW5nLXRvcGlj IChsaXN0IGVkaXRpbmctdG9waWMgZWRpdGluZy1wb2ludCkpCiAgICAgICkKICAgICkKICApCgo7 OztfICM5IG1pc2NlbGxhbmVvdXMKOzs7XyAgOiBNb2RlOgo7OztfICAgPiBvdXRsaW5laWZ5LXN0 aWNreSAoKQo7OyBvdXRsaW5pZnktc3RpY2t5IGlzIGNvcnJlY3Qgc3BlbGxpbmc7IHByb3ZpZGUg dGhpcyBhbGlhcyBmb3Igc3RpY2tsZXJzOgo7OzsjIyNhdXRvbG9hZAooZGVmYWxpYXMgJ291dGxp bmlmeS1zdGlja3kgJ291dGxpbmVpZnktc3RpY2t5KQo7OzsjIyNhdXRvbG9hZAooZGVmdW4gb3V0 bGluZWlmeS1zdGlja3kgKCZvcHRpb25hbCBhcmcpCiAgIkFjdGl2YXRlIG91dGxpbmUgbW9kZSBh bmQgZXN0YWJsaXNoIGZpbGUgdmFyIHNvIGl0IGlzIHN0YXJ0ZWQgc3Vic2VxdWVudGx5LgoKU2Vl IGRvYy1zdHJpbmcgZm9yIGBhbGxvdXQtbGF5b3V0JyBhbmQgYGFsbG91dC1pbml0JyBmb3IgZGV0 YWlscyBvbgpzZXR1cCBmb3IgYXV0by1zdGFydHVwLiIKCiAgKGludGVyYWN0aXZlICJQIikKCiAg KGFsbG91dC1tb2RlIHQpCgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkKICAgIChpZiAoYWxsb3V0LWdvdG8tcHJlZml4KQoJdAogICAgICAoYWxsb3V0LW9wZW4t dG9waWMgMikKICAgICAgKGluc2VydCAoY29uY2F0ICJEdW1teSBvdXRsaW5lIHRvcGljIGhlYWRl ciAtIHNlZSIKICAgICAgICAgICAgICAgICAgICAgICJgYWxsb3V0LW1vZGUnIGRvY3N0cmluZzog YF5IbScuIikpCiAgICAgIChhbGxvdXQtYWRqdXN0LWZpbGUtdmFyaWFibGUKICAgICAgICJhbGxv dXQtbGF5b3V0IiAob3IgYWxsb3V0LWxheW91dCAnKC0xIDogMCkpKSkpKQo7OztfICAgPiBhbGxv dXQtZmlsZS12YXJzLXNlY3Rpb24tZGF0YSAoKQooZGVmdW4gYWxsb3V0LWZpbGUtdmFycy1zZWN0 aW9uLWRhdGEgKCkKICAiUmV0dXJuIGRhdGEgaWRlbnRpZnlpbmcgdGhlIGZpbGUtdmFycyBzZWN0 aW9uLCBvciBuaWwgaWYgbm9uZS4KClJldHVybnMgbGlzdCBgKGJlZ2lubmluZy1wb2ludCBwcmVm aXgtc3RyaW5nIHN1ZmZpeC1zdHJpbmcpJy4iCiAgOzsgbWluaW1hbGx5IGdsZWFuZWQgZnJvbSBl bWFjcyAyMS40IGZpbGVzLmVsIGhhY2stbG9jYWwtdmFyaWFibGVzIGZ1bmN0aW9uLgogIChsZXQg KGJlZyBwcmVmaXggc3VmZml4KQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIg KHBvaW50LW1heCkpCiAgICAgIChzZWFyY2gtYmFja3dhcmQgIlxuXF5MIiAobWF4ICgtIChwb2lu dC1tYXgpIDMwMDApIChwb2ludC1taW4pKSAnbW92ZSkKICAgICAgKGlmIChsZXQgKChjYXNlLWZv bGQtc2VhcmNoIHQpKQoJICAgIChub3QgKHNlYXJjaC1mb3J3YXJkICJMb2NhbCBWYXJpYWJsZXM6 IiBuaWwgdCkpKQogICAgICAgICAgbmlsCiAgICAgICAgKHNldHEgYmVnICgtIChwb2ludCkgMTYp KQogICAgICAgIChzZXRxIHN1ZmZpeCAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCiAg ICAgICAgICAgICAgICAgICAgICAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAocHJvZ24g KGlmIChzZWFyY2gtZm9yd2FyZCAiXG4iIG5pbCB0KQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZm9yd2FyZC1jaGFyIC0xKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cG9pbnQpKSkpCiAgICAgICAgKHNldHEgcHJlZml4IChidWZmZXItc3Vic3RyaW5nLW5vLXByb3Bl cnRpZXMKICAgICAgICAgICAgICAgICAgICAgIChwcm9nbiAoaWYgKHNlYXJjaC1iYWNrd2FyZCAi XG4iIG5pbCB0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1jaGFy IDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludCkpCiAgICAgICAgICAgICAg ICAgICAgICBiZWcpKQogICAgICAgIChsaXN0IGJlZyBwcmVmaXggc3VmZml4KSkKICAgICAgKQog ICAgKQogICkKOzs7XyAgID4gYWxsb3V0LWFkanVzdC1maWxlLXZhcmlhYmxlICh2YXJuYW1lIHZh bHVlKQooZGVmdW4gYWxsb3V0LWFkanVzdC1maWxlLXZhcmlhYmxlICh2YXJuYW1lIHZhbHVlKQog ICJBZGp1c3QgdGhlIHNldHRpbmcgb2YgYW4gZW1hY3MgZmlsZSB2YXJpYWJsZSBuYW1lZCBWQVJO QU1FIHRvIFZBTFVFLgoKVGhpcyBhY3Rpdml0eSBpcyBpbmhpYml0ZWQgaWYgZWl0aGVyIGBlbmFi bGUtbG9jYWwtdmFyaWFibGVzJwpgYWxsb3V0LWVuYWJsZS1maWxlLXZhcmlhYmxlLWFkanVzdG1l bnQnIGFyZSBuaWwuCgpXaGVuIGVuYWJsZWQsIGFuIGVudHJ5IGZvciB0aGUgdmFyaWFibGUgaXMg Y3JlYXRlZCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LApvciBjaGFuZ2VkIGlmIGVzdGFibGlzaGVk IHdpdGggYSBkaWZmZXJlbnQgdmFsdWUuICBUaGUgc2VjdGlvbiBmb3IgdGhlIGZpbGUKdmFyaWFi bGVzLCBpdHNlbGYsIGlzIGNyZWF0ZWQgaWYgbm90IGFscmVhZHkgcHJlc2VudC4gIFdoZW4gY3Jl YXRlZCwgdGhlCnNlY3Rpb24gbGluZXMgXChpbmNsdWRpbmcgdGhlIHNlY3Rpb24gbGluZSkgZXhp c3QgYXMgc2Vjb25kLWxldmVsIHRvcGljcyBpbgphIHRvcC1sZXZlbCB0b3BpYyBhdCB0aGUgZW5k IG9mIHRoZSBmaWxlLgoKZW5hYmxlLWxvY2FsLXZhcmlhYmxlcyBtdXN0IGJlIHRydWUgZm9yIGFu eSBvZiB0aGlzIHRvIGhhcHBlbi4iCiAgKGlmIChub3QgKGFuZCBlbmFibGUtbG9jYWwtdmFyaWFi bGVzCiAgICAgICAgICAgICAgICBhbGxvdXQtZW5hYmxlLWZpbGUtdmFyaWFibGUtYWRqdXN0bWVu dCkpCiAgICAgIG5pbAogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChsZXQgKChpbmhpYml0LWZp ZWxkLXRleHQtbW90aW9uIHQpCiAgICAgICAgICAgIChzZWN0aW9uLWRhdGEgKGFsbG91dC1maWxl LXZhcnMtc2VjdGlvbi1kYXRhKSkKICAgICAgICAgICAgYmVnIHByZWZpeCBzdWZmaXgpCiAgICAg ICAgKGlmIHNlY3Rpb24tZGF0YQogICAgICAgICAgICAoc2V0cSBiZWcgKGNhciBzZWN0aW9uLWRh dGEpCiAgICAgICAgICAgICAgICAgIHByZWZpeCAoY2FkciBzZWN0aW9uLWRhdGEpCiAgICAgICAg ICAgICAgICAgIHN1ZmZpeCAoY2FyIChjZGRyIHNlY3Rpb24tZGF0YSkpKQogICAgICAgICAgOzsg Y3JlYXRlIHRoZSBzZWN0aW9uCiAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAg ICAgICAgKG9wZW4tbGluZSAxKQogICAgICAgICAgKGFsbG91dC1vcGVuLXRvcGljIDApCiAgICAg ICAgICAoZW5kLW9mLWxpbmUpCiAgICAgICAgICAoaW5zZXJ0ICJMb2NhbCBlbWFjcyB2YXJzLlxu IikKICAgICAgICAgIChhbGxvdXQtb3Blbi10b3BpYyAxKQogICAgICAgICAgKHNldHEgYmVnIChw b2ludCkKICAgICAgICAgICAgICAgIHN1ZmZpeCAiIgogICAgICAgICAgICAgICAgcHJlZml4IChi dWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKHByb2duCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHBvaW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJlZykpCiAgICAgICAgICAoZ290by1jaGFyIGJlZykKICAgICAgICAgIChpbnNlcnQg IkxvY2FsIHZhcmlhYmxlczpcbiIpCiAgICAgICAgICAoYWxsb3V0LW9wZW4tdG9waWMgMCkKICAg ICAgICAgIChpbnNlcnQgIkVuZDpcbiIpCiAgICAgICAgICApCiAgICAgICAgOzsgbG9vayBmb3Ig ZXhpc3RpbmcgZW50cnkgb3IgY3JlYXRlIG9uZSwgbGVhdmluZyBwb2ludCBmb3IgaW5zZXJ0aW9u CiAgICAgICAgOzsgb2YgbmV3IHZhbHVlOgogICAgICAgIChnb3RvLWNoYXIgYmVnKQogICAgICAg IChhbGxvdXQtc2hvdy10by1vZmZzaG9vdCkKICAgICAgICAoaWYgKHNlYXJjaC1mb3J3YXJkIChj b25jYXQgIlxuIiBwcmVmaXggdmFybmFtZSAiOiIpIG5pbCB0KQogICAgICAgICAgICAobGV0KiAo KHZhbHVlLWJlZyAocG9pbnQpKQogICAgICAgICAgICAgICAgICAgKGxpbmUtZW5kIChwcm9nbiAo aWYgKHNlYXJjaC1mb3J3YXJkICJcbiIgbmlsIHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoZm9yd2FyZC1jaGFyIC0xKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBvaW50KSkpCiAgICAgICAgICAgICAgICAgICAodmFsdWUtZW5kICgtIGxp bmUtZW5kIChsZW5ndGggc3VmZml4KSkpKQogICAgICAgICAgICAgIChpZiAoPiB2YWx1ZS1lbmQg dmFsdWUtYmVnKQogICAgICAgICAgICAgICAgICAoZGVsZXRlLXJlZ2lvbiB2YWx1ZS1iZWcgdmFs dWUtZW5kKSkpCiAgICAgICAgICAoZW5kLW9mLWxpbmUpCiAgICAgICAgICAob3Blbi1saW5lIDEp CiAgICAgICAgICAoZm9yd2FyZC1saW5lIDEpCiAgICAgICAgICAoaW5zZXJ0IChjb25jYXQgcHJl Zml4IHZhcm5hbWUgIjoiKSkpCiAgICAgICAgKGluc2VydCAoZm9ybWF0ICIgJVMlcyIgdmFsdWUg c3VmZml4KSkKICAgICAgICApCiAgICAgICkKICAgICkKICApCjs7O18gICA+IGFsbG91dC1nZXQt Y29uZmlndmFyLXZhbHVlcyAodmFybmFtZSkKKGRlZnVuIGFsbG91dC1nZXQtY29uZmlndmFyLXZh bHVlcyAoY29uZmlndmFyLW5hbWUpCiAgIlJldHVybiBhIGxpc3Qgb2YgdmFsdWVzIG9mIHRoZSBz eW1ib2xzIGluIGxpc3QgYm91bmQgdG8gQ09ORklHVkFSLU5BTUUuCgpUaGUgdXNlciBpcyBwcm9t cHRlZCBmb3IgcmVtb3ZhbCBvZiBzeW1ib2xzIHRoYXQgYXJlIHVuYm91bmQsIGFuZCB0aGV5Cm90 aGVyd2lzZSBhcmUgaWdub3JlZC4KCkNPTkZJR1ZBUi1OQU1FIHNob3VsZCBiZSB0aGUgbmFtZSBv ZiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwKbm90IGl0cyB2YWx1ZS4iCgogIChsZXQgKChj b25maWd2YXItdmFsdWUgKHN5bWJvbC12YWx1ZSBjb25maWd2YXItbmFtZSkpCiAgICAgICAgZ290 KQogICAgKGRvbGlzdCAoc3ltIGNvbmZpZ3Zhci12YWx1ZSkKICAgICAgKGlmIChub3QgKGJvdW5k cCBzeW0pKQogICAgICAgICAgKGlmICh5ZXMtb3Itbm8tcCAoZm9ybWF0ICIlcyBlbnRyeSBgJXMn IGlzIHVuYm91bmQgLSByZW1vdmUgaXQ/ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25maWd2YXItbmFtZSBzeW0pKQogICAgICAgICAgICAgIChkZWxxIHN5bSAoc3ltYm9s LXZhbHVlIGNvbmZpZ3Zhci1uYW1lKSkpCiAgICAgICAgKHB1c2ggKHN5bWJvbC12YWx1ZSBzeW0p IGdvdCkpKQogICAgKHJldmVyc2UgZ290KSkpCjs7O18gIDogVG9waWNzOgo7OztfICAgPiBhbGxv dXQtbWFyay10b3BpYyAoKQooZGVmdW4gYWxsb3V0LW1hcmstdG9waWMgKCkKICAiUHV0IHRoZSBy ZWdpb24gYXJvdW5kIHRvcGljIGN1cnJlbnRseSBjb250YWluaW5nIHBvaW50LiIKICAoaW50ZXJh Y3RpdmUpCiAgKGxldCAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gdCkpCiAgICAoYmVnaW5u aW5nLW9mLWxpbmUpKQogIChhbGxvdXQtZ290by1wcmVmaXgtZG91YmxlY2hlY2tlZCkKICAocHVz aC1tYXJrIChwb2ludCkpCiAgKGFsbG91dC1lbmQtb2YtY3VycmVudC1zdWJ0cmVlKQogIChleGNo YW5nZS1wb2ludC1hbmQtbWFyaykpCjs7O18gIDogVUk6Cjs7O18gICA+IHNvbGljaXQtY2hhci1p bi1zdHJpbmcgKHByb21wdCBzdHJpbmcgJm9wdGlvbmFsIGRvLWRlZmF1bHRpbmcpCihkZWZ1biBz b2xpY2l0LWNoYXItaW4tc3RyaW5nIChwcm9tcHQgc3RyaW5nICZvcHRpb25hbCBkby1kZWZhdWx0 aW5nKQogICJTb2xpY2l0ICh3aXRoIGZpcnN0IGFyZyBQUk9NUFQpIGNob2ljZSBvZiBhIGNoYXJh Y3RlciBmcm9tIHN0cmluZyBTVFJJTkcuCgpPcHRpb25hbCBhcmcgRE8tREVGQVVMVElORyBpbmRp Y2F0ZXMgdG8gYWNjZXB0IGVtcHR5IGlucHV0IChDUikuIgoKICAobGV0ICgobmV3LXByb21wdCBw cm9tcHQpCiAgICAgICAgZ290KQoKICAgICh3aGlsZSAobm90IGdvdCkKICAgICAgKG1lc3NhZ2Ug IiVzIiBuZXctcHJvbXB0KQoKICAgICAgOzsgV2UgZG8gb3VyIG93biByZWFkaW5nIGhlcmUsIHNv IHdlIGNhbiBjaXJjdW12ZW50LCBlZywgc3BlY2lhbAogICAgICA7OyB0cmVhdG1lbnQgZm9yIGA/ JyBjaGFyYWN0ZXIuICAoT3VnaHRhIHVzZSBtaW5pYnVmZmVyIGtleW1hcCBpbnN0ZWFkLikKICAg ICAgKHNldHEgZ290CiAgICAgICAgICAgIChjaGFyLXRvLXN0cmluZyAobGV0ICgoY3Vyc29yLWlu LWVjaG8tYXJlYSBuaWwpKSAocmVhZC1jaGFyKSkpKQoKICAgICAgKHNldHEgZ290CgkgICAgKGNv bmQgKChzdHJpbmctbWF0Y2ggKHJlZ2V4cC1xdW90ZSBnb3QpIHN0cmluZykgZ290KQoJCSAgKChh bmQgZG8tZGVmYXVsdGluZyAoc3RyaW5nPSBnb3QgIlxyIikpCgkJICAgOzsgUmV0dXJuIGVtcHR5 IHN0cmluZyB0byBkZWZhdWx0OgoJCSAgICIiKQoJCSAgKChzdHJpbmc9IGdvdCAiXEMtZyIpIChz aWduYWwgJ3F1aXQgbmlsKSkKCQkgICh0CgkJICAgKHNldHEgbmV3LXByb21wdCAoY29uY2F0IHBy b21wdAoJCQkJCSAgICBnb3QKCQkJCQkgICAgIiAuLi5waWNrIGZyb206ICIKCQkJCQkgICAgc3Ry aW5nCgkJCQkJICAgICIiKSkKCQkgICBuaWwpKSkpCiAgICAgIDs7IGdvdCBzb21ldGhpbmcgb3V0 IG9mIGxvb3AgLSByZXR1cm4gaXQ6CiAgICAgIGdvdCkKICApCjs7O18gIDogU3RyaW5nczoKOzs7 XyAgID4gcmVnZXhwLXNhbnMtZXNjYXBlcyAoc3RyaW5nKQooZGVmdW4gcmVnZXhwLXNhbnMtZXNj YXBlcyAocmVnZXhwICZvcHRpb25hbCBzdWNjZXNzaXZlLWJhY2tzbGFzaGVzKQogICJSZXR1cm4g YSBjb3B5IG9mIFJFR0VYUCB3aXRoIGFsbCBjaGFyYWN0ZXIgZXNjYXBlcyBzdHJpcHBlZCBvdXQu CgpSZXByZXNlbnRhdGlvbnMgb2YgYWN0dWFsIGJhY2tzbGFzaGVzIC0gJ1xcXFxcXFxcJyAtIGFy ZSBsZWZ0IGFzIGEKc2luZ2xlIGJhY2tzbGFzaC4KCk9wdGlvbmFsIGFyZyBTVUNDRVNTSVZFLUJB Q0tTTEFTSEVTIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgcmVjdXJzaW9uLiIKCiAgKGlmIChzdHJp bmc9IHJlZ2V4cCAiIikKICAgICAgIiIKICAgIDs7IFNldCBzdWNjZXNzaXZlLWJhY2tzbGFzaGVz IHRvIG51bWJlciBpZiBjdXJyZW50IGNoYXIgaXMKICAgIDs7IGJhY2tzbGFzaCwgb3IgZWxzZSB0 byBuaWw6CiAgICAoc2V0cSBzdWNjZXNzaXZlLWJhY2tzbGFzaGVzCgkgIChpZiAoPSAoYXJlZiBy ZWdleHAgMCkgP1xcKQoJICAgICAgKGlmIHN1Y2Nlc3NpdmUtYmFja3NsYXNoZXMgKDErIHN1Y2Nl c3NpdmUtYmFja3NsYXNoZXMpIDEpCgkgICAgbmlsKSkKICAgIChpZiAob3IgKG5vdCBzdWNjZXNz aXZlLWJhY2tzbGFzaGVzKSAoPSAyIHN1Y2Nlc3NpdmUtYmFja3NsYXNoZXMpKQoJOzsgSW5jbHVk ZSBmaXJzdCBjaGFyOgoJKGNvbmNhdCAoc3Vic3RyaW5nIHJlZ2V4cCAwIDEpCgkJKHJlZ2V4cC1z YW5zLWVzY2FwZXMgKHN1YnN0cmluZyByZWdleHAgMSkpKQogICAgICA7OyBFeGNsdWRlIGZpcnN0 IGNoYXIsIGJ1dCBtYWludGFpbiBjb3VudDoKICAgICAgKHJlZ2V4cC1zYW5zLWVzY2FwZXMgKHN1 YnN0cmluZyByZWdleHAgMSkgc3VjY2Vzc2l2ZS1iYWNrc2xhc2hlcykpKSkKOzs7XyAgID4gY291 bnQtdHJhaWxpbmctd2hpdGVzcGFjZS1yZWdpb24gKGJlZyBlbmQpCihkZWZ1biBjb3VudC10cmFp bGluZy13aGl0ZXNwYWNlLXJlZ2lvbiAoYmVnIGVuZCkKICAiUmV0dXJuIG51bWJlciBvZiB0cmFp bGluZyB3aGl0ZXNwYWNlIGNoYXJzIGJldHdlZW4gQkVHIGFuZCBFTkQuCgpJZiBCRUcgaXMgYmln Z2VyIHRoYW4gRU5EIHdlIHJldHVybiAwLiIKICAoaWYgKD4gYmVnIGVuZCkKICAgICAgMAogICAg KHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgYmVnKQogICAgICAobGV0ICgoY291bnQg MCkpCiAgICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiWyAJXVsgCV0qJCIgZW5kIHQp CiAgICAgICAgICAoZ290by1jaGFyICgxKyAobWF0Y2gtYmVnaW5uaW5nIDIpKSkKICAgICAgICAg IChzZXRxIGNvdW50ICgxKyBjb3VudCkpKQogICAgICAgIGNvdW50KSkpKQo7OztfICAgPiBhbGxv dXQtZm9ybWF0LXF1b3RlIChzdHJpbmcpCihkZWZ1biBhbGxvdXQtZm9ybWF0LXF1b3RlIChzdHJp bmcpCiAgIlJldHVybiBhIGNvcHkgb2Ygc3RyaW5nIHdpdGggYWxsIFwiJVwiIGNoYXJhY3RlcnMg ZG91YmxlZC4iCiAgKGFwcGx5ICdjb25jYXQKICAgICAgICAgKG1hcGNhciAobGFtYmRhIChjaGFy KSAoaWYgKD0gY2hhciA/JSkgIiUlIiAoY2hhci10by1zdHJpbmcgY2hhcikpKQogICAgICAgICAg ICAgICAgIHN0cmluZykpKQo7OztfICA6IGxpc3RzCjs7O18gICA+IGFsbG91dC1mbGF0dGVuIChs aXN0KQooZGVmdW4gYWxsb3V0LWZsYXR0ZW4gKGxpc3QpCiAgIlJldHVybiBhIGxpc3Qgb2YgYWxs IGF0b21zIGluIGxpc3QuIgogIDs7IGNsYXNzaWMuCiAgKGNvbmQgKChudWxsIGxpc3QpIG5pbCkK ICAgICAgICAoKGF0b20gKGNhciBsaXN0KSkgKGNvbnMgKGNhciBsaXN0KSAoYWxsb3V0LWZsYXR0 ZW4gKGNkciBsaXN0KSkpKQogICAgICAgICh0IChhcHBlbmQgKGFsbG91dC1mbGF0dGVuIChjYXIg bGlzdCkpIChhbGxvdXQtZmxhdHRlbiAoY2RyIGxpc3QpKSkpKSkKOzs7XyAgOiBDb21wYXRhYmls aXR5Ogo7OztfICAgPiBhbGxvdXQtbWFyay1tYXJrZXIgdG8gYWNjb21tb2RhdGUgZGl2ZXJnZW50 IGVtYWNzZW46CihkZWZ1biBhbGxvdXQtbWFyay1tYXJrZXIgKCZvcHRpb25hbCBmb3JjZSBidWZm ZXIpCiAgIkFjY29tbW9kYXRlIHRoZSBkaWZmZXJlbnQgc2lnbmF0dXJlIGZvciBgbWFyay1tYXJr ZXInIGFjcm9zcyBFbWFjc2VuLgoKWEVtYWNzIHRha2VzIHR3byBvcHRpb25hbCBhcmdzLCB3aGls ZSBtYWlubGluZSBHTlUgRW1hY3MgZG9lcyBub3QsCnNvIHBhc3MgdGhlbSBhbG9uZyB3aGVuIGFw cHJvcHJpYXRlLiIKICAoaWYgKGZlYXR1cmVwICd4ZW1hY3MpCiAgICAgIChhcHBseSAnbWFyay1t YXJrZXIgZm9yY2UgYnVmZmVyKQogICAgKG1hcmstbWFya2VyKSkpCjs7O18gICA+IHN1YnN0LWNo YXItaW4tc3RyaW5nIGlmIG5lY2Vzc2FyeQooaWYgKG5vdCAoZmJvdW5kcCAnc3Vic3QtY2hhci1p bi1zdHJpbmcpKQogICAgKGRlZnVuIHN1YnN0LWNoYXItaW4tc3RyaW5nIChmcm9tY2hhciB0b2No YXIgc3RyaW5nICZvcHRpb25hbCBpbnBsYWNlKQogICAgICAiUmVwbGFjZSBGUk9NQ0hBUiB3aXRo IFRPQ0hBUiBpbiBTVFJJTkcgZWFjaCB0aW1lIGl0IG9jY3Vycy4KVW5sZXNzIG9wdGlvbmFsIGFy Z3VtZW50IElOUExBQ0UgaXMgbm9uLW5pbCwgcmV0dXJuIGEgbmV3IHN0cmluZy4iCiAgICAgIChs ZXQgKChpIChsZW5ndGggc3RyaW5nKSkKICAgICAgICAgICAgKG5ld3N0ciAoaWYgaW5wbGFjZSBz dHJpbmcgKGNvcHktc2VxdWVuY2Ugc3RyaW5nKSkpKQogICAgICAgICh3aGlsZSAoPiBpIDApCiAg ICAgICAgICAoc2V0cSBpICgxLSBpKSkKICAgICAgICAgIChpZiAoZXEgKGFyZWYgbmV3c3RyIGkp IGZyb21jaGFyKQogICAgICAgICAgICAgIChhc2V0IG5ld3N0ciBpIHRvY2hhcikpKQogICAgICAg IG5ld3N0cikpKQo7OztfICAgPiB3aG9sZW51bXAgaWYgbmVjZXNzYXJ5CihpZiAobm90IChmYm91 bmRwICd3aG9sZW51bXApKQogICAgKGRlZmFsaWFzICd3aG9sZW51bXAgJ25hdG51bXApKQo7Oztf ICAgPiByZW1vdmUtb3ZlcmxheXMgaWYgbmVjZXNzYXJ5CihpZiAobm90IChmYm91bmRwICdyZW1v dmUtb3ZlcmxheXMpKQogICAgKGRlZnVuIHJlbW92ZS1vdmVybGF5cyAoJm9wdGlvbmFsIGJlZyBl bmQgbmFtZSB2YWwpCiAgICAgICJDbGVhciBCRUcgYW5kIEVORCBvZiBvdmVybGF5cyB3aG9zZSBw cm9wZXJ0eSBOQU1FIGhhcyB2YWx1ZSBWQUwuCk92ZXJsYXlzIG1pZ2h0IGJlIG1vdmVkIGFuZC9v ciBzcGxpdC4KQkVHIGFuZCBFTkQgZGVmYXVsdCByZXNwZWN0aXZlbHkgdG8gdGhlIGJlZ2lubmlu ZyBhbmQgZW5kIG9mIGJ1ZmZlci4iCiAgICAgICh1bmxlc3MgYmVnIChzZXRxIGJlZyAocG9pbnQt bWluKSkpCiAgICAgICh1bmxlc3MgZW5kIChzZXRxIGVuZCAocG9pbnQtbWF4KSkpCiAgICAgIChp ZiAoPCBlbmQgYmVnKQogICAgICAgICAgKHNldHEgYmVnIChwcm9nMSBlbmQgKHNldHEgZW5kIGJl ZykpKSkKICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgKGRvbGlzdCAobyAob3ZlcmxheXMt aW4gYmVnIGVuZCkpCiAgICAgICAgICAod2hlbiAoZXEgKG92ZXJsYXktZ2V0IG8gbmFtZSkgdmFs KQogICAgICAgICAgICA7OyBFaXRoZXIgcHVzaCB0aGlzIG92ZXJsYXkgb3V0c2lkZSBiZWcuLi5l bmQKICAgICAgICAgICAgOzsgb3Igc3BsaXQgaXQgdG8gZXhjbHVkZSBiZWcuLi5lbmQKICAgICAg ICAgICAgOzsgb3IgZGVsZXRlIGl0IGVudGlyZWx5IChpZiBpdCBpcyBjb250YWluZWQgaW4gYmVn Li4uZW5kKS4KICAgICAgICAgICAgKGlmICg8IChvdmVybGF5LXN0YXJ0IG8pIGJlZykKICAgICAg ICAgICAgICAgIChpZiAoPiAob3ZlcmxheS1lbmQgbykgZW5kKQogICAgICAgICAgICAgICAgICAg IChwcm9nbgogICAgICAgICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSAoY29weS1vdmVybGF5 IG8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdmVybGF5LXN0YXJ0IG8p IGJlZykKICAgICAgICAgICAgICAgICAgICAgIChtb3ZlLW92ZXJsYXkgbyBlbmQgKG92ZXJsYXkt ZW5kIG8pKSkKICAgICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSBvIChvdmVybGF5LXN0YXJ0 IG8pIGJlZykpCiAgICAgICAgICAgICAgKGlmICg+IChvdmVybGF5LWVuZCBvKSBlbmQpCiAgICAg ICAgICAgICAgICAgIChtb3ZlLW92ZXJsYXkgbyBlbmQgKG92ZXJsYXktZW5kIG8pKQogICAgICAg ICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG8pKSkpKSkpCiAgKQo7OztfICAgPiBjb3B5LW92ZXJs YXkgaWYgbmVjZXNzYXJ5IC0geGVtYWNzIH4gMjEuNAooaWYgKG5vdCAoZmJvdW5kcCAnY29weS1v dmVybGF5KSkKICAgIChkZWZ1biBjb3B5LW92ZXJsYXkgKG8pCiAgICAgICJSZXR1cm4gYSBjb3B5 IG9mIG92ZXJsYXkgTy4iCiAgICAgIChsZXQgKChvMSAobWFrZS1vdmVybGF5IChvdmVybGF5LXN0 YXJ0IG8pIChvdmVybGF5LWVuZCBvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBG SVhNRTogdGhlcmUncyBubyBlYXN5IHdheSB0byBmaW5kIHRoZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7OyBpbnNlcnRpb24tdHlwZSBvZiB0aGUgdHdvIG1hcmtlcnMuCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChvdmVybGF5LWJ1ZmZlciBvKSkpCiAgICAgICAgICAgIChw cm9wcyAob3ZlcmxheS1wcm9wZXJ0aWVzIG8pKSkKICAgICAgICAod2hpbGUgcHJvcHMKICAgICAg ICAgIChvdmVybGF5LXB1dCBvMSAocG9wIHByb3BzKSAocG9wIHByb3BzKSkpCiAgICAgICAgbzEp KSkKOzs7XyAgID4gYWRkLXRvLWludmlzaWJpbGl0eS1zcGVjIGlmIG5lY2Vzc2FyeSAtIHhlbWFj cyB+IDIxLjQKKGlmIChub3QgKGZib3VuZHAgJ2FkZC10by1pbnZpc2liaWxpdHktc3BlYykpCiAg ICAoZGVmdW4gYWRkLXRvLWludmlzaWJpbGl0eS1zcGVjIChlbGVtZW50KQogICAgICAiQWRkIEVM RU1FTlQgdG8gYGJ1ZmZlci1pbnZpc2liaWxpdHktc3BlYycuClNlZSBkb2N1bWVudGF0aW9uIGZv ciBgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjJyBmb3IgdGhlIGtpbmQgb2YgZWxlbWVudHMKdGhh dCBjYW4gYmUgYWRkZWQuIgogICAgICAoaWYgKGVxIGJ1ZmZlci1pbnZpc2liaWxpdHktc3BlYyB0 KQogICAgICAgICAgKHNldHEgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjIChsaXN0IHQpKSkKICAg ICAgKHNldHEgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjCiAgICAgICAgICAgIChjb25zIGVsZW1l bnQgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjKSkpKQo7OztfICAgPiByZW1vdmUtZnJvbS1pbnZp c2liaWxpdHktc3BlYyBpZiBuZWNlc3NhcnkgLSB4ZW1hY3MgfiAyMS40CihpZiAobm90IChmYm91 bmRwICdyZW1vdmUtZnJvbS1pbnZpc2liaWxpdHktc3BlYykpCiAgICAoZGVmdW4gcmVtb3ZlLWZy b20taW52aXNpYmlsaXR5LXNwZWMgKGVsZW1lbnQpCiAgICAgICJSZW1vdmUgRUxFTUVOVCBmcm9t IGBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMnLiIKICAgICAgKGlmIChjb25zcCBidWZmZXItaW52 aXNpYmlsaXR5LXNwZWMpCiAgICAgICAgICAoc2V0cSBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMg KGRlbGV0ZSBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBidWZmZXItaW52aXNpYmlsaXR5LXNwZWMpKSkpKQo7OztfICAgPiBtb3ZlLWJlZ2lu bmluZy1vZi1saW5lIGlmIG5lY2Vzc2FyeSAtIG9sZGVyIGVtYWNzLCB4ZW1hY3MKKGlmIChub3Qg KGZib3VuZHAgJ21vdmUtYmVnaW5uaW5nLW9mLWxpbmUpKQogICAgKGRlZnVuIG1vdmUtYmVnaW5u aW5nLW9mLWxpbmUgKGFyZykKICAgICAgIk1vdmUgcG9pbnQgdG8gYmVnaW5uaW5nIG9mIGN1cnJl bnQgbGluZSBhcyBkaXNwbGF5ZWQuClwoVGhpcyBkaXNyZWdhcmRzIGludmlzaWJsZSBuZXdsaW5l cyBzdWNoIGFzIHRob3NlCndoaWNoIGFyZSBwYXJ0IG9mIHRoZSB0ZXh0IHRoYXQgYW4gaW1hZ2Ug cmVzdHMgb24uKQoKV2l0aCBhcmd1bWVudCBBUkcgbm90IG5pbCBvciAxLCBtb3ZlIGZvcndhcmQg QVJHIC0gMSBsaW5lcyBmaXJzdC4KSWYgcG9pbnQgcmVhY2hlcyB0aGUgYmVnaW5uaW5nIG9yIGVu ZCBvZiBidWZmZXIsIGl0IHN0b3BzIHRoZXJlLgpUbyBpZ25vcmUgaW50YW5naWJpbGl0eSwgYmlu ZCBgaW5oaWJpdC1wb2ludC1tb3Rpb24taG9va3MnIHRvIHQuIgogICAgICAoaW50ZXJhY3RpdmUg InAiKQogICAgICAob3IgYXJnIChzZXRxIGFyZyAxKSkKICAgICAgKGlmICgvPSBhcmcgMSkKICAg ICAgICAgIChjb25kaXRpb24tY2FzZSBuaWwgKGxpbmUtbW92ZSAoMS0gYXJnKSkgKGVycm9yIG5p bCkpKQoKICAgICAgOzsgTW92ZSB0byBiZWdpbm5pbmctb2YtbGluZSwgaWdub3JpbmcgZmllbGRz IGFuZCBpbnZpc2libGVzLgogICAgICAoc2tpcC1jaGFycy1iYWNrd2FyZCAiXlxuIikKICAgICAg KHdoaWxlIChhbmQgKG5vdCAoYm9icCkpIChsaW5lLW1vdmUtaW52aXNpYmxlLXAgKDEtIChwb2lu dCkpKSkKICAgICAgICAoZ290by1jaGFyIChpZiAoZmVhdHVyZXAgJ3hlbWFjcykKICAgICAgICAg ICAgICAgICAgICAgICAocHJldmlvdXMtcHJvcGVydHktY2hhbmdlIChwb2ludCkpCiAgICAgICAg ICAgICAgICAgICAgIChwcmV2aW91cy1jaGFyLXByb3BlcnR5LWNoYW5nZSAocG9pbnQpKSkpCiAg ICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIl5cbiIpKQogICAgICAodmVydGljYWwtbW90aW9u IDApKQopCjs7O18gICA+IG1vdmUtZW5kLW9mLWxpbmUgaWYgbmVjZXNzYXJ5IC0gb2xkZXIgZW1h Y3MsIHhlbWFjcwooaWYgKG5vdCAoZmJvdW5kcCAnbW92ZS1lbmQtb2YtbGluZSkpCiAgICAoZGVm dW4gbW92ZS1lbmQtb2YtbGluZSAoYXJnKQogICAgICAiTW92ZSBwb2ludCB0byBlbmQgb2YgY3Vy cmVudCBsaW5lIGFzIGRpc3BsYXllZC4KXChUaGlzIGRpc3JlZ2FyZHMgaW52aXNpYmxlIG5ld2xp bmVzIHN1Y2ggYXMgdGhvc2UKd2hpY2ggYXJlIHBhcnQgb2YgdGhlIHRleHQgdGhhdCBhbiBpbWFn ZSByZXN0cyBvbi4pCgpXaXRoIGFyZ3VtZW50IEFSRyBub3QgbmlsIG9yIDEsIG1vdmUgZm9yd2Fy ZCBBUkcgLSAxIGxpbmVzIGZpcnN0LgpJZiBwb2ludCByZWFjaGVzIHRoZSBiZWdpbm5pbmcgb3Ig ZW5kIG9mIGJ1ZmZlciwgaXQgc3RvcHMgdGhlcmUuClRvIGlnbm9yZSBpbnRhbmdpYmlsaXR5LCBi aW5kIGBpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcycgdG8gdC4iCiAgICAgIChpbnRlcmFjdGl2 ZSAicCIpCiAgICAgIChvciBhcmcgKHNldHEgYXJnIDEpKQogICAgICAobGV0IChkb25lKQogICAg ICAgICh3aGlsZSAobm90IGRvbmUpCiAgICAgICAgICAobGV0ICgobmV3cG9zCiAgICAgICAgICAg ICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAobGV0ICgoZ29hbC1jb2x1 bW4gMCkpCiAgICAgICAgICAgICAgICAgICAgIChhbmQgKGNvbmRpdGlvbi1jYXNlIG5pbAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKGxpbmUtbW92ZSBhcmcpIHQpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZXJyb3IgbmlsKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAobm90IChib2JwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh3aGlsZSAoYW5kIChub3QgKGJvYnApKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUtbW92ZS1pbnZpc2libGUtcCAoMS0gKHBv aW50KSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXMtY2hhci1wcm9wZXJ0eS1jaGFuZ2UgKHBv aW50KSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhY2t3YXJkLWNoYXIgMSkpKQog ICAgICAgICAgICAgICAgICAgICAocG9pbnQpKSkpKQogICAgICAgICAgICAoZ290by1jaGFyIG5l d3BvcykKICAgICAgICAgICAgKGlmIChhbmQgKD4gKHBvaW50KSBuZXdwb3MpCiAgICAgICAgICAg ICAgICAgICAgIChlcSAocHJlY2VkaW5nLWNoYXIpID9cbikpCiAgICAgICAgICAgICAgICAoYmFj a3dhcmQtY2hhciAxKQogICAgICAgICAgICAgIChpZiAoYW5kICg+IChwb2ludCkgbmV3cG9zKSAo bm90IChlb2JwKSkKICAgICAgICAgICAgICAgICAgICAgICAobm90IChlcSAoZm9sbG93aW5nLWNo YXIpID9cbikpKQogICAgICAgICAgICAgICAgICA7OyBJZiB3ZSBza2lwcGVkIHNvbWV0aGluZyBp bnRhbmdpYmxlCiAgICAgICAgICAgICAgICAgIDs7IGFuZCBub3cgd2UncmUgbm90IHJlYWxseSBh dCBlb2wsCiAgICAgICAgICAgICAgICAgIDs7IGtlZXAgZ29pbmcuCiAgICAgICAgICAgICAgICAg IChzZXRxIGFyZyAxKQogICAgICAgICAgICAgICAgKHNldHEgZG9uZSB0KSkpKSkpKQogICkKOzs7 XyAgID4gbGluZS1tb3ZlLWludmlzaWJsZS1wIGlmIG5lY2Vzc2FyeQooaWYgKG5vdCAoZmJvdW5k cCAnbGluZS1tb3ZlLWludmlzaWJsZS1wKSkKICAgIChkZWZ1biBsaW5lLW1vdmUtaW52aXNpYmxl LXAgKHBvcykKICAgICAgIlJldHVybiBub24tbmlsIGlmIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgUE9T IGlzIGN1cnJlbnRseSBpbnZpc2libGUuIgogICAgICAobGV0ICgocHJvcAogICAgICAgICAgICAg KGdldC1jaGFyLXByb3BlcnR5IHBvcyAnaW52aXNpYmxlKSkpCiAgICAgICAgKGlmIChlcSBidWZm ZXItaW52aXNpYmlsaXR5LXNwZWMgdCkKICAgICAgICAgICAgcHJvcAogICAgICAgICAgKG9yICht ZW1xIHByb3AgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjKQogICAgICAgICAgICAgIChhc3NxIHBy b3AgYnVmZmVyLWludmlzaWJpbGl0eS1zcGVjKSkpKSkpCgo7OztfICMxMCBVbmZpbmlzaGVkCjs7 O18gID4gYWxsb3V0LWJ1bGxldC1pc2VhcmNoICgmb3B0aW9uYWwgYnVsbGV0KQooZGVmdW4gYWxs b3V0LWJ1bGxldC1pc2VhcmNoICgmb3B0aW9uYWwgYnVsbGV0KQogICJJc2VhcmNoIFwocmVnZXhw KSBmb3IgdG9waWMgd2l0aCBidWxsZXQgQlVMTEVULiIKICAoaW50ZXJhY3RpdmUpCiAgKGlmIChu b3QgYnVsbGV0KQogICAgICAoc2V0cSBidWxsZXQgKHNvbGljaXQtY2hhci1pbi1zdHJpbmcKCQkg ICAgIklTZWFyY2ggZm9yIHRvcGljIHdpdGggYnVsbGV0OiAiCgkJICAgIChyZWdleHAtc2Fucy1l c2NhcGVzIGFsbG91dC1idWxsZXRzLXN0cmluZykpKSkKCiAgKGxldCAoKGlzZWFyY2gtcmVnZXhw IHQpCgkoaXNlYXJjaC1zdHJpbmcgKGNvbmNhdCAiXiIKCQkJCWFsbG91dC1oZWFkZXItcHJlZml4 CgkJCQkiWyBcdF0qIgoJCQkJYnVsbGV0KSkpCiAgICAoaXNlYXJjaC1yZXBlYXQgJ2ZvcndhcmQp CiAgICAoaXNlYXJjaC1tb2RlIHQpKSkKCjs7O18gIzExIFVuaXQgdGVzdHMgLSB0aGlzIHNob3Vs ZCBiZSBsYXN0IGl0ZW0gYmVmb3JlICJQcm92aWRlIgo7OztfICA+IGFsbG91dC1ydW4tdW5pdC10 ZXN0cyAoKQooZGVmdW4gYWxsb3V0LXJ1bi11bml0LXRlc3RzICgpCiAgIlJ1biB0aGUgdmFyaW91 cyBhbGxvdXQgdW5pdCB0ZXN0cy4iCiAgKG1lc3NhZ2UgIlJ1bm5pbmcgYWxsb3V0IHRlc3RzLi4u IikKICAoYWxsb3V0LXRlc3QtcmVzdW1wdGlvbnMpCiAgKG1lc3NhZ2UgIlJ1bm5pbmcgYWxsb3V0 IHRlc3RzLi4uICBEb25lLiIpCiAgKHNpdC1mb3IgLjUpKQo7OztfICA6IHRlc3QgcmVzdW1wdGlv bnM6Cjs7O18gICA+IGFsbG91dC10ZXN0cy1vYmxpdGVyYXRlLXZhcmlhYmxlIChuYW1lKQooZGVm dW4gYWxsb3V0LXRlc3RzLW9ibGl0ZXJhdGUtdmFyaWFibGUgKG5hbWUpCiAgIkNvbXBsZXRlbHkg dW5iaW5kIHZhcmlhYmxlIHdpdGggTkFNRS4iCiAgKGlmIChsb2NhbC12YXJpYWJsZS1wIG5hbWUp IChraWxsLWxvY2FsLXZhcmlhYmxlIG5hbWUpKQogICh3aGlsZSAoYm91bmRwIG5hbWUpIChtYWt1 bmJvdW5kIG5hbWUpKSkKOzs7XyAgID4gYWxsb3V0LXRlc3QtcmVzdW1wdGlvbnMgKCkKKGRlZnZh ciBhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3VuZCBuaWwKICAiRm9kZGVyIGZvciBhbGxvdXQg cmVzdW1wdGlvbnMgdGVzdHMgLSBkZWZ2YXIganVzdCBmb3IgYnl0ZSBjb21waWxlci4iKQooZGVm dmFyIGFsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlIG5pbAogICJGb2RkZXIgZm9yIGFsbG91dCBy ZXN1bXB0aW9ucyB0ZXN0cyAtIGRlZnZhciBqdXN0IGp1c3QgZm9yIGJ5dGUgY29tcGlsZXIuIikK KGRlZnZhciBhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlIG5pbAogICJGb2RkZXIgZm9yIGFsbG91 dCByZXN1bXB0aW9ucyB0ZXN0cyAtIGRlZnZhciBqdXN0IGZvciBieXRlIGNvbXBpbGVyLiIpCihk ZWZ1biBhbGxvdXQtdGVzdC1yZXN1bXB0aW9ucyAoKQogICJFeGVyY2lzZSBhbGxvdXQgcmVzdW1w dGlvbnMuIgogIDs7IGZvciBlYWNoIHJlc3VtcHRpb24gY2FzZSwgd2UgYWxzbyB0ZXN0IHRoYXQg dGhlIHJpZ2h0IGxvY2FsL2dsb2JhbAogIDs7IHNjb3BlcyBhcmUgYWZmZWN0ZWQgZHVyaW5nIHJl c3VtcHRpb24gZWZmZWN0czoKCiAgOzsgZW5zdXJlIHRoYXQgcHJldmlvdXNseSB1bmJvdW5kIHZh cmlhYmxlcyByZXR1cm4gdG8gdGhlIHVuYm91bmQgc3RhdGUuCiAgKHdpdGgtdGVtcC1idWZmZXIK ICAgIChhbGxvdXQtdGVzdHMtb2JsaXRlcmF0ZS12YXJpYWJsZSAnYWxsb3V0LXRlc3RzLWdsb2Jh bGx5LXVuYm91bmQpCiAgICAoYWxsb3V0LWFkZC1yZXN1bXB0aW9ucyAnKGFsbG91dC10ZXN0cy1n bG9iYWxseS11bmJvdW5kIHQpKQogICAgKGFzc2VydCAobm90IChkZWZhdWx0LWJvdW5kcCAnYWxs b3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQpKSkKICAgIChhc3NlcnQgKGxvY2FsLXZhcmlhYmxl LXAgJ2FsbG91dC10ZXN0cy1nbG9iYWxseS11bmJvdW5kKSkKICAgIChhc3NlcnQgKGJvdW5kcCAn YWxsb3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQpKQogICAgKGFzc2VydCAoZXF1YWwgYWxsb3V0 LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQgdCkpCiAgICAoYWxsb3V0LWRvLXJlc3VtcHRpb25zKQog ICAgKGFzc2VydCAobm90IChsb2NhbC12YXJpYWJsZS1wICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHkt dW5ib3VuZCkpKQogICAgKGFzc2VydCAobm90IChib3VuZHAgJ2FsbG91dC10ZXN0cy1nbG9iYWxs eS11bmJvdW5kKSkpKQoKICA7OyBlbnN1cmUgdGhhdCB2YXJpYWJsZSB3aXRoIHByaW9yIGdsb2Jh bCB2YWx1ZSBpcyByZXN1bWVkCiAgKHdpdGgtdGVtcC1idWZmZXIKICAgIChhbGxvdXQtdGVzdHMt b2JsaXRlcmF0ZS12YXJpYWJsZSAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUpCiAgICAoc2V0 cSBhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSB0KQogICAgKGFsbG91dC1hZGQtcmVzdW1wdGlv bnMgJyhhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSBuaWwpKQogICAgKGFzc2VydCAoZXF1YWwg KGRlZmF1bHQtdmFsdWUgJ2FsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlKSB0KSkKICAgIChhc3Nl cnQgKGxvY2FsLXZhcmlhYmxlLXAgJ2FsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlKSkKICAgIChh c3NlcnQgKGVxdWFsIGFsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlIG5pbCkpCiAgICAoYWxsb3V0 LWRvLXJlc3VtcHRpb25zKQogICAgKGFzc2VydCAobm90IChsb2NhbC12YXJpYWJsZS1wICdhbGxv dXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSkpKQogICAgKGFzc2VydCAoYm91bmRwICdhbGxvdXQtdGVz dHMtZ2xvYmFsbHktdHJ1ZSkpCiAgICAoYXNzZXJ0IChlcXVhbCBhbGxvdXQtdGVzdHMtZ2xvYmFs bHktdHJ1ZSB0KSkpCgogIDs7IGVuc3VyZSB0aGF0IHByaW9yIGxvY2FsIHZhbHVlIGlzIHJlc3Vt ZWQKICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgKGFsbG91dC10ZXN0cy1vYmxpdGVyYXRlLXZhcmlh YmxlICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKQogICAgKHNldCAobWFrZS1sb2NhbC12YXJp YWJsZSAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkgdCkKICAgIChhc3NlcnQgKG5vdCAoZGVm YXVsdC1ib3VuZHAgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUpKQogICAgICAgICAgICBuaWwg KGNvbmNhdCAiVGVzdCBzZXR1cCBtaXN0YWtlIC0gdmFyaWFibGUgc3VwcG9zZWQgdG8iCiAgICAg ICAgICAgICAgICAgICAgICAgICIgbm90IGhhdmUgZ2xvYmFsIGJpbmRpbmcsIGJ1dCBpdCBkb2Vz LiIpKQogICAgKGFzc2VydCAobG9jYWwtdmFyaWFibGUtcCAnYWxsb3V0LXRlc3RzLWxvY2FsbHkt dHJ1ZSkKICAgICAgICAgICAgbmlsIChjb25jYXQgIlRlc3Qgc2V0dXAgbWlzdGFrZSAtIHZhcmlh YmxlIHN1cHBvc2VkIHRvIGhhdmUiCiAgICAgICAgICAgICAgICAgICAgICAgICIgbG9jYWwgYmlu ZGluZywgYnV0IGl0IGxhY2tzIG9uZS4iKSkKICAgIChhbGxvdXQtYWRkLXJlc3VtcHRpb25zICco YWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSBuaWwpKQogICAgKGFzc2VydCAobm90IChkZWZhdWx0 LWJvdW5kcCAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkpKQogICAgKGFzc2VydCAobG9jYWwt dmFyaWFibGUtcCAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkpCiAgICAoYXNzZXJ0IChlcXVh bCBhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlIG5pbCkpCiAgICAoYWxsb3V0LWRvLXJlc3VtcHRp b25zKQogICAgKGFzc2VydCAoYm91bmRwICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKSkKICAg IChhc3NlcnQgKGxvY2FsLXZhcmlhYmxlLXAgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUpKQog ICAgKGFzc2VydCAoZXF1YWwgYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSB0KSkKICAgIChhc3Nl cnQgKG5vdCAoZGVmYXVsdC1ib3VuZHAgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUpKSkpCgog IDs7IGVuc3VyZSB0aGF0IGxhc3Qgb2YgbXVsdGlwbGUgcmVzdW1wdGlvbnMgaG9sZHMsIGZvciB2 YXJpb3VzIHNjb3Blcy4KICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgKGFsbG91dC10ZXN0cy1vYmxp dGVyYXRlLXZhcmlhYmxlICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3VuZCkKICAgIChhbGxv dXQtdGVzdHMtb2JsaXRlcmF0ZS12YXJpYWJsZSAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUp CiAgICAoc2V0cSBhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSB0KQogICAgKGFsbG91dC10ZXN0 cy1vYmxpdGVyYXRlLXZhcmlhYmxlICdhbGxvdXQtdGVzdHMtbG9jYWxseS10cnVlKQogICAgKHNl dCAobWFrZS1sb2NhbC12YXJpYWJsZSAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkgdCkKICAg IChhbGxvdXQtYWRkLXJlc3VtcHRpb25zICcoYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQg dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRy dWUgbmlsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhhbGxvdXQtdGVzdHMtbG9jYWxs eS10cnVlIG5pbCkpCiAgICAoYWxsb3V0LWFkZC1yZXN1bXB0aW9ucyAnKGFsbG91dC10ZXN0cy1n bG9iYWxseS11bmJvdW5kIDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGFsbG91dC10 ZXN0cy1nbG9iYWxseS10cnVlIDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGFsbG91 dC10ZXN0cy1sb2NhbGx5LXRydWUgNCkpCiAgICA7OyByZWVzdGFibGlzaCBtYW55IG9mIHRoZSBi YXNpYyBjb25kaXRpb25zIGFyZSBtYWludGFpbmVkIGFmdGVyIHJlLWFkZDoKICAgIChhc3NlcnQg KG5vdCAoZGVmYXVsdC1ib3VuZHAgJ2FsbG91dC10ZXN0cy1nbG9iYWxseS11bmJvdW5kKSkpCiAg ICAoYXNzZXJ0IChsb2NhbC12YXJpYWJsZS1wICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3Vu ZCkpCiAgICAoYXNzZXJ0IChlcXVhbCBhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5ib3VuZCAyKSkK ICAgIChhc3NlcnQgKGRlZmF1bHQtYm91bmRwICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSkp CiAgICAoYXNzZXJ0IChsb2NhbC12YXJpYWJsZS1wICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1 ZSkpCiAgICAoYXNzZXJ0IChlcXVhbCBhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdHJ1ZSAzKSkKICAg IChhc3NlcnQgKG5vdCAoZGVmYXVsdC1ib3VuZHAgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUp KSkKICAgIChhc3NlcnQgKGxvY2FsLXZhcmlhYmxlLXAgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRy dWUpKQogICAgKGFzc2VydCAoZXF1YWwgYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSA0KSkKICAg IChhbGxvdXQtZG8tcmVzdW1wdGlvbnMpCiAgICAoYXNzZXJ0IChub3QgKGxvY2FsLXZhcmlhYmxl LXAgJ2FsbG91dC10ZXN0cy1nbG9iYWxseS11bmJvdW5kKSkpCiAgICAoYXNzZXJ0IChub3QgKGJv dW5kcCAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQpKSkKICAgIChhc3NlcnQgKG5vdCAo bG9jYWwtdmFyaWFibGUtcCAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUpKSkKICAgIChhc3Nl cnQgKGJvdW5kcCAnYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUpKQogICAgKGFzc2VydCAoZXF1 YWwgYWxsb3V0LXRlc3RzLWdsb2JhbGx5LXRydWUgdCkpCiAgICAoYXNzZXJ0IChib3VuZHAgJ2Fs bG91dC10ZXN0cy1sb2NhbGx5LXRydWUpKQogICAgKGFzc2VydCAobG9jYWwtdmFyaWFibGUtcCAn YWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkpCiAgICAoYXNzZXJ0IChlcXVhbCBhbGxvdXQtdGVz dHMtbG9jYWxseS10cnVlIHQpKQogICAgKGFzc2VydCAobm90IChkZWZhdWx0LWJvdW5kcCAnYWxs b3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkpKSkKCiAgOzsgZW5zdXJlIHRoYXQgZGVsaWJlcmF0ZWx5 IHVuYmluZGluZyByZWdpc3RlcmVkIHZhcmlhYmxlcyBkb2Vzbid0IGZvdWwgdGhpbmdzCiAgKHdp dGgtdGVtcC1idWZmZXIKICAgIChhbGxvdXQtdGVzdHMtb2JsaXRlcmF0ZS12YXJpYWJsZSAnYWxs b3V0LXRlc3RzLWdsb2JhbGx5LXVuYm91bmQpCiAgICAoYWxsb3V0LXRlc3RzLW9ibGl0ZXJhdGUt dmFyaWFibGUgJ2FsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlKQogICAgKHNldHEgYWxsb3V0LXRl c3RzLWdsb2JhbGx5LXRydWUgdCkKICAgIChhbGxvdXQtdGVzdHMtb2JsaXRlcmF0ZS12YXJpYWJs ZSAnYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSkKICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFi bGUgJ2FsbG91dC10ZXN0cy1sb2NhbGx5LXRydWUpIHQpCiAgICAoYWxsb3V0LWFkZC1yZXN1bXB0 aW9ucyAnKGFsbG91dC10ZXN0cy1nbG9iYWxseS11bmJvdW5kIHQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnKGFsbG91dC10ZXN0cy1nbG9iYWxseS10cnVlIG5pbCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICcoYWxsb3V0LXRlc3RzLWxvY2FsbHktdHJ1ZSBuaWwpKQogICAgKGFs bG91dC10ZXN0cy1vYmxpdGVyYXRlLXZhcmlhYmxlICdhbGxvdXQtdGVzdHMtZ2xvYmFsbHktdW5i b3VuZCkKICAgIChhbGxvdXQtdGVzdHMtb2JsaXRlcmF0ZS12YXJpYWJsZSAnYWxsb3V0LXRlc3Rz LWdsb2JhbGx5LXRydWUpCiAgICAoYWxsb3V0LXRlc3RzLW9ibGl0ZXJhdGUtdmFyaWFibGUgJ2Fs bG91dC10ZXN0cy1sb2NhbGx5LXRydWUpCiAgICAoYWxsb3V0LWRvLXJlc3VtcHRpb25zKSkKICAp Cjs7O18gICUgUnVuIHVuaXQgdGVzdHMgaWYgYGFsbG91dC1ydW4tdW5pdC10ZXN0cy1hZnRlci1s b2FkJyBpcyB0cnVlOgood2hlbiBhbGxvdXQtcnVuLXVuaXQtdGVzdHMtb24tbG9hZAogIChhbGxv dXQtcnVuLXVuaXQtdGVzdHMpKQoKOzs7XyAjMTIgUHJvdmlkZQoocHJvdmlkZSAnYWxsb3V0KQoK Ozs7XyogTG9jYWwgZW1hY3MgdmFycy4KOzsgVGhlIGZvbGxvd2luZyBgYWxsb3V0LWxheW91dCcg bG9jYWwgdmFyaWFibGUgc2V0dGluZzoKOzsgIC0gY2xvc2VzIGFsbCB0b3BpY3MgZnJvbSB0aGUg Zmlyc3QgdG9waWMgdG8ganVzdCBiZWZvcmUgdGhlIHRoaXJkLXRvLWxhc3QsCjs7ICAtIHNob3dz IHRoZSBjaGlsZHJlbiBvZiB0aGUgdGhpcmQgdG8gbGFzdCAoY29uZmlnIHZhcnMpCjs7ICAtIGFu ZCB0aGUgc2Vjb25kIHRvIGxhc3QgKGNvZGUgc2VjdGlvbiksCjs7ICAtIGFuZCBjbG9zZXMgdGhl IGxhc3QgdG9waWMgKHRoaXMgbG9jYWwtdmFyaWFibGVzIHNlY3Rpb24pLgo7O0xvY2FsIHZhcmlh YmxlczoKOzthbGxvdXQtd2lkZ2V0cy1tb2RlLWluaGliaXQ6IHQKOzthbGxvdXQtbGF5b3V0OiAo MCA6IC0xIC0xIDApCjs7RW5kOgoKOzsgYXJjaC10YWc6IGNmMzhmYmMzLWMwNDQtNDUwZi04YmZm LWFmZWQ4YmE1NjgxYwo7OzsgYWxsb3V0LmVsIGVuZHMgaGVyZQo= ------=_Part_26149_24469499.1162668532156 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel ------=_Part_26149_24469499.1162668532156--