From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Philip Kaludercic Newsgroups: gmane.emacs.devel Subject: Re: Adding package and package-vc to ELPA Date: Fri, 18 Aug 2023 18:34:59 +0000 Message-ID: <87o7j4xkq4.fsf_-_@posteo.net> References: <87r0oftgye.fsf@posteo.net> <87350vt1wz.fsf@posteo.net> <871qgen1ln.fsf@posteo.net> <87edke4mou.fsf@posteo.net> <87wmy6kuan.fsf@posteo.net> <87wmy6w070.fsf@posteo.net> <87zg2sjleg.fsf@posteo.net> <87pm3nlbm7.fsf@posteo.net> <87zg2ri9g9.fsf@posteo.net> <87bkf7b7ls.fsf@posteo.net> <87v8dfi6zy.fsf@posteo.net> <877cpvb361.fsf@posteo.net> <87pm3mj0ot.fsf_-_@posteo.net> <87v8de9qel.fsf@posteo.net> <87pm3mgj8d.fsf@posteo.net> <87a5upojjc.fsf@posteo.net> <871qg1oi61.fsf@posteo.net> <87y1i9fs8v.fsf@posteo.net> <874jkwvs01.fsf@posteo.net> <877cpsvlgm.fsf@posteo.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="1769"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Thierry Volpiatto Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Aug 18 20:35:30 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qX4Jl-0000BO-4g for ged-emacs-devel@m.gmane-mx.org; Fri, 18 Aug 2023 20:35:29 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qX4JW-00056B-3x; Fri, 18 Aug 2023 14:35:14 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qX4JT-000561-TW for emacs-devel@gnu.org; Fri, 18 Aug 2023 14:35:12 -0400 Original-Received: from mout02.posteo.de ([185.67.36.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qX4JP-0006Hz-Dx for emacs-devel@gnu.org; Fri, 18 Aug 2023 14:35:11 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id A1FB8240103 for ; Fri, 18 Aug 2023 20:35:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1692383704; bh=bv8uimsWVJM0wggDokzQxG4TfBUldeXc01HImwSxtow=; h=From:To:Cc:Subject:Autocrypt:Date:Message-ID:MIME-Version:From; b=iGISduKxyV43WJ6tIX6UguTsUp5KoEk/RIMUkgLKQ8GO3HfYL9GsJb3lcYnMlUhY9 NA+OMr0PlA1W+YIl1azs6lZ0iG+7ykZk2LCP7o78ftyIa0shDOtoRuCZYuzBjrRsD6 ITHywYEw/KD7DEEIN8f+jFiTVLiAvqMbOp5Yap3/J6b5uSpWMAiOBzSWV5sM4uKetm HtAZNQ8Ix67tKbJuPSVNSIiaaTl6oTCKznWXshRZtrKj63Rgr0gNHSoAxIM69LFI0P Mqm2jBy/M4szpfi6RBE+0MXpnAP4ibPqHyJ6tFmuRipha5/MM40zOHLJgOm0s6W7ZO Pw7eEZn245Y5w== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4RS9XN4p5Wz6txx; Fri, 18 Aug 2023 20:35:00 +0200 (CEST) In-Reply-To: <877cpsvlgm.fsf@posteo.net> (Philip Kaludercic's message of "Fri, 18 Aug 2023 09:49:45 +0200") Autocrypt: addr=philipk@posteo.net; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM Received-SPF: pass client-ip=185.67.36.66; envelope-from=philipk@posteo.net; helo=mout02.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:308898 Archived-At: --=-=-= Content-Type: text/plain Philip Kaludercic writes: >> Now your function is working fine and nearly finish, did you think how >> you are going to distribute it? It seems you are going to merge it in >> master, but what about providing it as well as a Elpa package so that >> users of old emacs (at some point of course, say emacs-27) can use it to >> report bugs? > > I am not a fan of small ELPA packages, but what I'd like to bring up > again was the proposal to add package.el itself to ELPA. I wrote a > patch in <873559q83j.fsf@posteo.net> that should arrange everything > necessary for this move, there are still a few points that should be > discussed in terms of stability and recovering from a possibly > inconsistent state. I think I'll create a feature branch some day soon > to make the proposal more concrete. I have pushed the patch from that thread, together with a patch for package-vc and a custom command that would revert Emacs to use the built-in version of package.el. The branch is called "feature/elpa-package", and I have added to tarballs with packages built by elpa-admin.el in case anyone wants to try out the packages. I'll be testing these tarballs with older versions of Emacs, to see how that works out. --=-=-= Content-Type: application/x-tar Content-Disposition: attachment; filename=package.tar Content-Transfer-Encoding: base64 cGFja2FnZS0xLjEuMS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMDAwMDAwADE0NDEzMzYzMTUxADAxMjQ0MgAgNQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBoaWxpcAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAcGhpbGlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw YWNrYWdlLTEuMS4xL3BhY2thZ2UtcGtnLmVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUw ADAwMDE3NTAAMDAwMDAwMDA3NDMAMTQ0MTMzNjMxNTEAMDE1MTQyACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcGhpbGlwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABwaGlsaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7 IEdlbmVyYXRlZCBwYWNrYWdlIGRlc2NyaXB0aW9uIGZyb20gcGFja2FnZS5lbCAgLSotIG5vLWJ5 dGUtY29tcGlsZTogdCAtKi0KKGRlZmluZS1wYWNrYWdlICJwYWNrYWdlIiAiMS4xLjEiICJTaW1w bGUgcGFja2FnZSBzeXN0ZW0gZm9yIEVtYWNzIiAnKChlbWFjcyAiMjYuMSIpIChjb21wYXQgIjI5 LjEuMC4wIikpIDpjb21taXQgIjFmY2Y1NjcyNTg0ODk4NGVmNmRhNTBlZjJiN2ExMzBlMWZmZDMy ODIiIDp1cmwgImh0dHBzOi8vZWxwYS5nbnUub3JnL3BhY2thZ2VzL3BhY2thZ2UuaHRtbCIgOmF1 dGhvcnMgJygoIlRvbSBUcm9tZXkiIC4gInRyb21leUByZWRoYXQuY29tIikgKCJEYW5pZWwgSGFj a25leSIgLiAiZGFuQGhheG5leS5vcmciKSkgOm1haW50YWluZXIgJygoIlRvbSBUcm9tZXkiIC4g InRyb21leUByZWRoYXQuY29tIikgKCJEYW5pZWwgSGFja25leSIgLiAiZGFuQGhheG5leS5vcmci KSkgOmtleXdvcmRzICcoInRvb2xzIikpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGFj a2FnZS0xLjEuMS9wYWNrYWdlLmVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAw MDAxNzUwADAwMDAwNTc3MDYwADE0NDEzMzYyNDU3ADAxNDQwNgAgMAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBoaWxpcAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAcGhpbGlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7Ozsg cGFja2FnZS5lbCAtLS0gU2ltcGxlIHBhY2thZ2Ugc3lzdGVtIGZvciBFbWFjcyAgLSotIGxleGlj YWwtYmluZGluZzp0IC0qLQoKOzsgQ29weXJpZ2h0IChDKSAyMDA3LTIwMjMgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCgo7OyBBdXRob3I6IFRvbSBUcm9tZXkgPHRyb21leUByZWRoYXQu Y29tPgo7OyAgICAgICAgIERhbmllbCBIYWNrbmV5IDxkYW5AaGF4bmV5Lm9yZz4KOzsgQ3JlYXRl ZDogMTAgTWFyIDIwMDcKOzsgVmVyc2lvbjogMS4xLjEKOzsgS2V5d29yZHM6IHRvb2xzCjs7IFBh Y2thZ2UtUmVxdWlyZXM6ICgoZW1hY3MgIjI2LjEiKSAoY29tcGF0ICIyOS4xLjAuMCIpKQoKOzsg VGhpcyBpcyBhIEdOVSBFTFBBIDpjb3JlIHBhY2thZ2UuICBBdm9pZCBmdW5jdGlvbmFsaXR5IHRo YXQgaXMgbm90Cjs7IGNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiBvZiBFbWFjcyByZWNvcmRl ZCBhYm92ZS4KCjs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KCjs7IEdOVSBFbWFj cyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Cjs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5Cjs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCjs7IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCgo7OyBHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo7OyBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKOzsgYWxvbmcgd2l0aCBHTlUg RW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7 IENvbW1lbnRhcnk6Cgo7OyBUaGUgaWRlYSBiZWhpbmQgcGFja2FnZS5lbCBpcyB0byBiZSBhYmxl IHRvIGRvd25sb2FkIHBhY2thZ2VzIGFuZAo7OyBpbnN0YWxsIHRoZW0uICBQYWNrYWdlcyBhcmUg dmVyc2lvbmVkIGFuZCBoYXZlIHZlcnNpb25lZAo7OyBkZXBlbmRlbmNpZXMuICBGdXJ0aGVybW9y ZSwgdGhpcyBzdXBwb3J0cyBidWlsdC1pbiBwYWNrYWdlcyB3aGljaAo7OyBtYXkgb3IgbWF5IG5v dCBiZSBuZXdlciB0aGFuIHVzZXItc3BlY2lmaWVkIHBhY2thZ2VzLiAgVGhpcyBtYWtlcwo7OyBp dCBwb3NzaWJsZSB0byB1cGdyYWRlIEVtYWNzIGFuZCBhdXRvbWF0aWNhbGx5IGRpc2FibGUgcGFj a2FnZXMKOzsgd2hpY2ggaGF2ZSBtb3ZlZCBmcm9tIGV4dGVybmFsIHRvIGNvcmUuICAoTm90ZSB0 aG91Z2ggdGhhdCB3ZSBkb24ndAo7OyBjdXJyZW50bHkgcmVnaXN0ZXIgYW55IG9mIHRoZXNlLCBz byB0aGlzIGZlYXR1cmUgZG9lcyBub3QgYWN0dWFsbHkKOzsgd29yay4pCgo7OyBBIHBhY2thZ2Ug aXMgZGVzY3JpYmVkIGJ5IGl0cyBuYW1lIGFuZCB2ZXJzaW9uLiAgVGhlIGRpc3RyaWJ1dGlvbgo7 OyBmb3JtYXQgaXMgZWl0aGVyIGEgdGFyIGZpbGUgb3IgYSBzaW5nbGUgLmVsIGZpbGUuCgo7OyBB IHRhciBmaWxlIHNob3VsZCBiZSBuYW1lZCAiTkFNRS1WRVJTSU9OLnRhciIuICBUaGUgdGFyIGZp bGUgbXVzdAo7OyB1bnBhY2sgaW50byBhIGRpcmVjdG9yeSBuYW1lZCBhZnRlciB0aGUgcGFja2Fn ZSBhbmQgdmVyc2lvbjoKOzsgIk5BTUUtVkVSU0lPTiIuICBJdCBtdXN0IGNvbnRhaW4gYSBmaWxl IG5hbWVkICJQQUNLQUdFLXBrZy5lbCIKOzsgd2hpY2ggY29uc2lzdHMgb2YgYSBjYWxsIHRvIGRl ZmluZS1wYWNrYWdlLiAgSXQgbWF5IGFsc28gY29udGFpbiBhCjs7ICJkaXIiIGZpbGUgYW5kIHRo ZSBpbmZvIGZpbGVzIGl0IHJlZmVyZW5jZXMuCgo7OyBBIC5lbCBmaWxlIGlzIG5hbWVkICJOQU1F LVZFUlNJT04uZWwiIGluIHRoZSByZW1vdGUgYXJjaGl2ZSwgYnV0IGlzCjs7IGluc3RhbGxlZCBh cyBzaW1wbHkgIk5BTUUuZWwiIGluIGEgZGlyZWN0b3J5IG5hbWVkICJOQU1FLVZFUlNJT04iLgoK OzsgVGhlIGRvd25sb2FkZXIgZG93bmxvYWRzIGFsbCBkZXBlbmRlbnQgcGFja2FnZXMuICBCeSBk ZWZhdWx0LAo7OyBwYWNrYWdlcyBjb21lIGZyb20gdGhlIG9mZmljaWFsIEdOVSBzb3VyY2VzLCBi dXQgb3RoZXJzIG1heSBiZQo7OyBhZGRlZCBieSBjdXN0b21pemluZyB0aGUgYHBhY2thZ2UtYXJj aGl2ZXMnIGFsaXN0LiAgUGFja2FnZXMgZ2V0Cjs7IGJ5dGUtY29tcGlsZWQgYXQgaW5zdGFsbCB0 aW1lLgoKOzsgQXQgYWN0aXZhdGlvbiB0aW1lIHdlIHdpbGwgc2V0IHVwIHRoZSBsb2FkLXBhdGgg YW5kIHRoZSBpbmZvIHBhdGgsCjs7IGFuZCB3ZSB3aWxsIGxvYWQgdGhlIHBhY2thZ2UncyBhdXRv bG9hZHMuICBJZiBhIHBhY2thZ2Uncwo7OyBkZXBlbmRlbmNpZXMgYXJlIG5vdCBhdmFpbGFibGUs IHdlIHdpbGwgbm90IGFjdGl2YXRlIHRoYXQgcGFja2FnZS4KCjs7IENvbmNlcHR1YWxseSBhIHBh Y2thZ2UgaGFzIG11bHRpcGxlIHN0YXRlIHRyYW5zaXRpb25zOgo7Owo7OyAqIERvd25sb2FkLiAg RmV0Y2hpbmcgdGhlIHBhY2thZ2UgZnJvbSBFTFBBLgo7OyAqIEluc3RhbGwuICBVbnRhciB0aGUg cGFja2FnZSwgb3Igd3JpdGUgdGhlIC5lbCBmaWxlLCBpbnRvCjs7ICAgfi8uZW1hY3MuZC9lbHBh LyBkaXJlY3RvcnkuCjs7ICogQXV0b2xvYWQgZ2VuZXJhdGlvbi4KOzsgKiBCeXRlIGNvbXBpbGUu ICBDdXJyZW50bHkgdGhpcyBwaGFzZSBpcyBkb25lIGR1cmluZyBpbnN0YWxsLAo7OyAgIGJ1dCB3 ZSBtYXkgY2hhbmdlIHRoaXMuCjs7ICogQWN0aXZhdGUuICBFdmFsdWF0ZSB0aGUgYXV0b2xvYWRz IGZvciB0aGUgcGFja2FnZSB0byBtYWtlIGl0Cjs7ICAgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLgo7 OyAqIExvYWQuICBBY3R1YWxseSBsb2FkIHRoZSBwYWNrYWdlIGFuZCBydW4gc29tZSBjb2RlIGZy b20gaXQuCgo7OyBPdGhlciBleHRlcm5hbCBmdW5jdGlvbnMgeW91IG1heSB3YW50IHRvIHVzZToK OzsKOzsgTS14IGxpc3QtcGFja2FnZXMKOzsgICAgRW50ZXJzIGEgbW9kZSBzaW1pbGFyIHRvIGJ1 ZmZlci1tZW51IHdoaWNoIGxldHMgeW91IG1hbmFnZQo7OyAgICBwYWNrYWdlcy4gIFlvdSBjYW4g Y2hvb3NlIHBhY2thZ2VzIGZvciBpbnN0YWxsIChtYXJrIHdpdGggImkiLAo7OyAgICB0aGVuICJ4 IiB0byBleGVjdXRlKSBvciBkZWxldGlvbiwgYW5kIHlvdSBjYW4gc2VlIHdoYXQgcGFja2FnZXMK OzsgICAgYXJlIGF2YWlsYWJsZS4gIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGZldGNoIHRoZSBs YXRlc3QgbGlzdCBvZgo7OyAgICBwYWNrYWdlcyBmcm9tIEVMUEEuCjs7Cjs7IE0teCBwYWNrYWdl LWluc3RhbGwtZnJvbS1idWZmZXIKOzsgICAgSW5zdGFsbCBhIHBhY2thZ2UgY29uc2lzdGluZyBv ZiBhIHNpbmdsZSAuZWwgZmlsZSB0aGF0IGFwcGVhcnMKOzsgICAgaW4gdGhlIGN1cnJlbnQgYnVm ZmVyLiAgVGhpcyBvbmx5IHdvcmtzIGZvciBwYWNrYWdlcyB3aGljaAo7OyAgICBkZWZpbmUgYSBW ZXJzaW9uIGhlYWRlciBwcm9wZXJseTsgcGFja2FnZS5lbCBhbHNvIHN1cHBvcnRzIHRoZQo7OyAg ICBleHRlbnNpb24gaGVhZGVycyBQYWNrYWdlLVZlcnNpb24gKGluIGNhc2UgVmVyc2lvbiBpcyBh biBSQ1MgaWQKOzsgICAgb3Igc2ltaWxhciksIGFuZCBQYWNrYWdlLVJlcXVpcmVzIChpZiB0aGUg cGFja2FnZSByZXF1aXJlcyBvdGhlcgo7OyAgICBwYWNrYWdlcykuCjs7Cjs7IE0teCBwYWNrYWdl LWluc3RhbGwtZmlsZQo7OyAgICBJbnN0YWxsIGEgcGFja2FnZSBmcm9tIHRoZSBpbmRpY2F0ZWQg ZmlsZS4gIFRoZSBwYWNrYWdlIGNhbiBiZQo7OyAgICBlaXRoZXIgYSB0YXIgZmlsZSBvciBhIC5l bCBmaWxlLiAgQSB0YXIgZmlsZSBtdXN0IGNvbnRhaW4gYW4KOzsgICAgYXBwcm9wcmlhdGVseS1u YW1lZCAiLXBrZy5lbCIgZmlsZTsgYSAuZWwgZmlsZSBtdXN0IGJlIHByb3Blcmx5Cjs7ICAgIGZv cm1hdHRlZCBhcyB3aXRoIGBwYWNrYWdlLWluc3RhbGwtZnJvbS1idWZmZXInLgoKOzs7IFRoYW5r czoKOzs7IChzb3J0ZWQgYnkgc29ydC1saW5lcyk6Cgo7OyBKaW0gQmxhbmR5IDxqaW1iQHJlZC1i ZWFuLmNvbT4KOzsgS2FybCBGb2dlbCA8a2ZvZ2VsQHJlZC1iZWFuLmNvbT4KOzsgS2V2aW4gUnlk ZSA8dXNlcjQyQHppcC5jb20uYXU+Cjs7IExhd3JlbmNlIE1pdGNoZWxsCjs7IE1pY2hhZWwgT2xz b24gPG13b2xzb25AbWVtYmVyLmZzZi5vcmc+Cjs7IFNlYmFzdGlhbiBUZW5uYW50IDxzZWJ5dGVA c21vbG55LnBsdXMuY29tPgo7OyBTdGVmYW4gTW9ubmllciA8bW9ubmllckBpcm8udW1vbnRyZWFs LmNhPgo7OyBWaW5pY2l1cyBKb3NlIExhdG9ycmUgPHZpbmljaXVzamwuZ251QGdtYWlsLmNvbT4K OzsgUGhpbCBIYWdlbGJlcmcgPHBoaWxAaGFnZWxiLm9yZz4KCjs7OyBUb0RvOgoKOzsgLSBwdXR0 aW5nIGluZm8gZGlycyBhdCB0aGUgc3RhcnQgb2YgdGhlIGluZm8gcGF0aCBtZWFucwo7OyAgIHVz ZXJzIHNlZSBhIHdlaXJkIG9yZGVyaW5nIG9mIGNhdGVnb3JpZXMuICBPVE9IIHdlIHdhbnQgdG8K OzsgICBvdmVycmlkZSBsYXRlciBlbnRyaWVzLiAgbWF5YmUgZW1hY3MgbmVlZHMgdG8gZW5mb3Jj ZQo7OyAgIHRoZSBzdGFuZGFyZCBsYXlvdXQ/Cjs7IC0gcHV0IGJ5dGVjb2RlIGluIGEgc2VwYXJh dGUgZGlyZWN0b3J5IHRyZWUKOzsgLSBwZXJoYXBzIGdpdmUgdXNlcnMgYSB3YXkgdG8gcmVjb21w aWxlIHRoZWlyIGJ5dGVjb2RlCjs7ICAgb3IgZG8gaXQgYXV0b21hdGljYWxseSB3aGVuIGVtYWNz IGNoYW5nZXMKOzsgLSBnaXZlIHVzZXJzIGEgd2F5IHRvIGtub3cgd2hldGhlciBhIHBhY2thZ2Ug aXMgaW5zdGFsbGVkIG9rCjs7IC0gZ2l2ZSB1c2VycyBhIHdheSB0byB2aWV3IGEgcGFja2FnZSdz IGRvY3VtZW50YXRpb24gd2hlbiBpdAo7OyAgIG9ubHkgYXBwZWFycyBpbiB0aGUgLmVsCjs7IC0g dXNlL2V4dGVuZCBjaGVja2RvYyBzbyBwZW9wbGUgY2FuIHRlbGwgaWYgdGhlaXIgcGFja2FnZSB3 aWxsIHdvcmsKOzsgLSAiaW5zdGFsbGVkIiBpbnN0ZWFkIG9mIGEgYmxhbmsgaW4gdGhlIHN0YXR1 cyBjb2x1bW4KOzsgLSB0cmFtcCBuZWVkcyBpdHMgZmlsZXMgdG8gYmUgY29tcGlsZWQgaW4gYSBj ZXJ0YWluIG9yZGVyLgo7OyAgIGhvdyB0byBoYW5kbGUgdGhpcz8gIGZpeCB0cmFtcD8KOzsgLSBt YXliZSB3ZSBuZWVkIHNlcGFyYXRlIC5lbGMgZGlyZWN0b3JpZXMgZm9yIHZhcmlvdXMgZW1hY3MK OzsgICB2ZXJzaW9ucy4gIFRoYXQgd2F5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNhbiB3b3Jr LiAgQnV0IHdvdWxkCjs7ICAgdGhpcyBicmVhayBhbnl0aGluZz8KOzsgLSBXaWxsaWFtIFh1IHN1 Z2dlc3RzIGJlaW5nIGFibGUgdG8gb3BlbiBhIHBhY2thZ2UgZmlsZSB3aXRob3V0Cjs7ICAgaW5z dGFsbGluZyBpdAo7OyAtIEludGVyZmFjZSB3aXRoIGRlc2t0b3AuZWwgc28gdGhhdCByZXN0YXJ0 aW5nIGFmdGVyIGFuIGluc3RhbGwKOzsgICB3b3JrcyBwcm9wZXJseQo7OyAtIFVzZSBoaWVyYXJj aGljYWwgbGF5b3V0LiAgUEtHL2V0YyBQS0cvbGlzcCBQS0cvaW5mbwo7OyAgIC4uLiBleGNlcHQg bWF5YmUgbGlzcD8KOzsgLSBJdCBtYXkgYmUgbmljZSB0byBoYXZlIGEgbWFjcm8gdGhhdCBleHBh bmRzIHRvIHRoZSBwYWNrYWdlJ3MKOzsgICBwcml2YXRlIGRhdGEgZGlyLCBha2EgIi4uLi9ldGMi LiAgT3IsIG1heWJlIGRhdGEtZGlyZWN0b3J5Cjs7ICAgbmVlZHMgdG8gYmUgYSBsaXN0ICh0aG91 Z2ggdGhpcyB3b3VsZCBiZSBsZXNzIG5pY2UpCjs7ICAgYSBmZXcgcGFja2FnZXMgd2FudCB0aGlz LCBlZyBzb2tvYmFuCjs7IC0gQWxsb3cgbXVsdGlwbGUgdmVyc2lvbnMgb24gdGhlIHNlcnZlciwg c28gdGhhdCBpZiBhIHVzZXIgZG9lc24ndAo7OyAgIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBmb3Ig dGhlIG1vc3QgcmVjZW50IHZlcnNpb24gdGhleSBjYW4gc3RpbGwKOzsgICBpbnN0YWxsIGFuIG9s ZGVyIG9uZS4KOzsgLSBBbGxvdyBvcHRpb25hbCBwYWNrYWdlIGRlcGVuZGVuY2llcwo7OyAgIHRo ZW4gaWYgd2UgcmVxdWlyZSAnYmJkYicsIGJiZGItc3BlY2lmaWMgbGlzcCBpbiBsaXNwL2JiZGIK OzsgICBhbmQganVzdCBkb24ndCBjb21waWxlIHRvIGFkZCB0byBsb2FkIHBhdGggLi4uPwo7OyAt IE91ciB0cmVhdG1lbnQgb2YgdGhlIGluZm8gcGF0aCBpcyBzb21ld2hhdCBib2d1cwoKOzs7IENv ZGU6CgoocmVxdWlyZSAnY2wtbGliKQooZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ3N1YnIt eCkpCihldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnZXBnKSkgICAgICA7Rm9yIHNldGYgYWNj ZXNzb3JzLgooZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ2lubGluZSkpICAgO0ZvciBgZGVm aW5lLWlubGluZScKKHJlcXVpcmUgJ2NvbXBhdCBuaWwgJ25vZXJyb3IpCihyZXF1aXJlICdzZXEp CgoocmVxdWlyZSAndGFidWxhdGVkLWxpc3QpCihyZXF1aXJlICdtYWNyb2V4cCkKKHJlcXVpcmUg J3VybC1oYW5kbGVycykKKHJlcXVpcmUgJ2Jyb3dzZS11cmwpCgooZGVmZ3JvdXAgcGFja2FnZSBu aWwKICAiTWFuYWdlciBmb3IgRW1hY3MgTGlzcCBwYWNrYWdlcy4iCiAgOmdyb3VwICdhcHBsaWNh dGlvbnMKICA6dmVyc2lvbiAiMjQuMSIpCgoMCjs7OyBDdXN0b21pemF0aW9uIG9wdGlvbnMKCjs7 OyMjI2F1dG9sb2FkCihkZWZjdXN0b20gcGFja2FnZS1lbmFibGUtYXQtc3RhcnR1cCB0CiAgIldo ZXRoZXIgdG8gbWFrZSBpbnN0YWxsZWQgcGFja2FnZXMgYXZhaWxhYmxlIHdoZW4gRW1hY3Mgc3Rh cnRzLgpJZiBub24tbmlsLCBwYWNrYWdlcyBhcmUgbWFkZSBhdmFpbGFibGUgYmVmb3JlIHJlYWRp bmcgdGhlIGluaXQKZmlsZSAoYnV0IGFmdGVyIHJlYWRpbmcgdGhlIGVhcmx5IGluaXQgZmlsZSku ICBUaGlzIG1lYW5zIHRoYXQgaWYKeW91IHdpc2ggdG8gc2V0IHRoaXMgdmFyaWFibGUsIHlvdSBt dXN0IGRvIHNvIGluIHRoZSBlYXJseSBpbml0CmZpbGUuICBSZWdhcmRsZXNzIG9mIHRoZSB2YWx1 ZSBvZiB0aGlzIHZhcmlhYmxlLCBwYWNrYWdlcyBhcmUgbm90Cm1hZGUgYXZhaWxhYmxlIGlmIGB1 c2VyLWluaXQtZmlsZScgaXMgbmlsIChlLmcuIEVtYWNzIHdhcyBzdGFydGVkCndpdGggXCItcVwi KS4KCkV2ZW4gaWYgdGhlIHZhbHVlIGlzIG5pbCwgeW91IGNhbiB0eXBlIFxcW3BhY2thZ2UtaW5p dGlhbGl6ZV0gdG8KbWFrZSBpbnN0YWxsZWQgcGFja2FnZXMgYXZhaWxhYmxlIGF0IGFueSB0aW1l LCBvciB5b3UgY2FuCmNhbGwgKHBhY2thZ2UtYWN0aXZhdGUtYWxsKSBpbiB5b3VyIGluaXQtZmls ZS4iCiAgOnR5cGUgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjQuMSIpCgooZGVmY3VzdG9tIHBhY2th Z2UtbG9hZC1saXN0ICcoYWxsKQogICJMaXN0IG9mIHBhY2thZ2VzIGZvciBgcGFja2FnZS1hY3Rp dmF0ZS1hbGwnIHRvIG1ha2UgYXZhaWxhYmxlLgpFYWNoIGVsZW1lbnQgaW4gdGhpcyBsaXN0IHNo b3VsZCBiZSBhIGxpc3QgKE5BTUUgVkVSU0lPTiksIG9yIHRoZQpzeW1ib2wgYGFsbCcuICBUaGUg c3ltYm9sIGBhbGwnIHNheXMgdG8gbWFrZSBhdmFpbGFibGUgdGhlIGxhdGVzdAppbnN0YWxsZWQg dmVyc2lvbnMgb2YgYWxsIHBhY2thZ2VzIG5vdCBzcGVjaWZpZWQgYnkgb3RoZXIKZWxlbWVudHMu CgpGb3IgYW4gZWxlbWVudCAoTkFNRSBWRVJTSU9OKSwgTkFNRSBpcyBhIHBhY2thZ2UgbmFtZSAo YSBzeW1ib2wpLgpWRVJTSU9OIHNob3VsZCBiZSB0LCBhIHN0cmluZywgb3IgbmlsLgpJZiBWRVJT SU9OIGlzIHQsIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIGlzIG1hZGUgYXZhaWxhYmxlLgpJZiBW RVJTSU9OIGlzIGEgc3RyaW5nLCBvbmx5IHRoYXQgdmVyc2lvbiBpcyBldmVyIG1hZGUgYXZhaWxh YmxlLgogQW55IG90aGVyIHZlcnNpb24sIGV2ZW4gaWYgbmV3ZXIsIGlzIHNpbGVudGx5IGlnbm9y ZWQuCiBIZW5jZSwgdGhlIHBhY2thZ2UgaXMgXCJoZWxkXCIgYXQgdGhhdCB2ZXJzaW9uLgpJZiBW RVJTSU9OIGlzIG5pbCwgdGhlIHBhY2thZ2UgaXMgbm90IG1hZGUgYXZhaWxhYmxlIChpdCBpcyBc ImRpc2FibGVkXCIpLiIKICA6dHlwZSAnKHJlcGVhdCAoY2hvaWNlIChjb25zdCBhbGwpCiAgICAg ICAgICAgICAgICAgICAgICAgICAobGlzdCA6dGFnICJTcGVjaWZpYyBwYWNrYWdlIgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbCA6dGFnICJQYWNrYWdlIG5hbWUiKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNob2ljZSA6dGFnICJWZXJzaW9uIgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCA6dGFnICJkaXNhYmxlIiBuaWwpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIm1vc3QgcmVjZW50IiB0KQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcgOnRhZyAic3BlY2lmaWMgdmVy c2lvbiIpKSkpKQogIDpyaXNreSB0CiAgOnZlcnNpb24gIjI0LjEiKQoKKGRlZmN1c3RvbSBwYWNr YWdlLWFyY2hpdmVzIGAoKCJnbnUiIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwo Zm9ybWF0ICJodHRwJXM6Ly9lbHBhLmdudS5vcmcvcGFja2FnZXMvIgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChnbnV0bHMtYXZhaWxhYmxlLXApICJzIiAiIikp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm5vbmdudSIgLgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLChmb3JtYXQgImh0dHAlczovL2VscGEubm9uZ251Lm9yZy9ub25n bnUvIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChnbnV0bHMt YXZhaWxhYmxlLXApICJzIiAiIikpKSkKICAiQW4gYWxpc3Qgb2YgYXJjaGl2ZXMgZnJvbSB3aGlj aCB0byBmZXRjaC4KVGhlIGRlZmF1bHQgdmFsdWUgcG9pbnRzIHRvIHRoZSBHTlUgRW1hY3MgcGFj a2FnZSByZXBvc2l0b3J5LgoKRWFjaCBlbGVtZW50IGhhcyB0aGUgZm9ybSAoSUQgLiBMT0NBVElP TikuCiBJRCBpcyBhbiBhcmNoaXZlIG5hbWUsIGFzIGEgc3RyaW5nLgogTE9DQVRJT04gc3BlY2lm aWVzIHRoZSBiYXNlIGxvY2F0aW9uIGZvciB0aGUgYXJjaGl2ZS4KICBJZiBpdCBzdGFydHMgd2l0 aCBcImh0dHAocyk6XCIsIGl0IGlzIHRyZWF0ZWQgYXMgYW4gSFRUUChTKSBVUkw7CiAgb3RoZXJ3 aXNlIGl0IHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KICAoT3RoZXIgdHlw ZXMgb2YgVVJMIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4pCgpPbmx5IGFkZCBsb2NhdGlv bnMgdGhhdCB5b3UgdHJ1c3QsIHNpbmNlIGZldGNoaW5nIGFuZCBpbnN0YWxsaW5nCmEgcGFja2Fn ZSBjYW4gcnVuIGFyYml0cmFyeSBjb2RlLgoKSFRUUFMgVVJMcyBzaG91bGQgYmUgdXNlZCB3aGVy ZSBwb3NzaWJsZSwgYXMgdGhleSBvZmZlciBzdXBlcmlvcgpzZWN1cml0eS4iCiAgOnR5cGUgJyhh bGlzdCA6a2V5LXR5cGUgKHN0cmluZyA6dGFnICJBcmNoaXZlIG5hbWUiKQogICAgICAgICAgICAg ICAgOnZhbHVlLXR5cGUgKHN0cmluZyA6dGFnICJVUkwgb3IgZGlyZWN0b3J5IG5hbWUiKSkKICA6 cmlza3kgdAogIDp2ZXJzaW9uICIyOC4xIikKCihkZWZjdXN0b20gcGFja2FnZS1tZW51LWhpZGUt bG93LXByaW9yaXR5ICdhcmNoaXZlCiAgIklmIG5vbi1uaWwsIGhpZGUgbG93IHByaW9yaXR5IHBh Y2thZ2VzIGZyb20gdGhlIHBhY2thZ2VzIG1lbnUuCkEgcGFja2FnZSBpcyBjb25zaWRlcmVkIGxv dyBwcmlvcml0eSBpZiB0aGVyZSdzIGFub3RoZXIgdmVyc2lvbgpvZiBpdCBhdmFpbGFibGUgc3Vj aCB0aGF0OgogICAgKGEpIHRoZSBhcmNoaXZlIG9mIHRoZSBvdGhlciBwYWNrYWdlIGlzIGhpZ2hl ciBwcmlvcml0eSB0aGFuCiAgICB0aGlzIG9uZSwgYXMgcGVyIGBwYWNrYWdlLWFyY2hpdmUtcHJp b3JpdGllcyc7CiAgb3IKICAgIChiKSB0aGV5IGJvdGggaGF2ZSB0aGUgc2FtZSBhcmNoaXZlIHBy aW9yaXR5IGJ1dCB0aGUgb3RoZXIKICAgIHBhY2thZ2UgaGFzIGEgaGlnaGVyIHZlcnNpb24gbnVt YmVyLgoKVGhpcyB2YXJpYWJsZSBoYXMgdGhyZWUgcG9zc2libGUgdmFsdWVzOgogICAgbmlsOiBu byBwYWNrYWdlcyBhcmUgaGlkZGVuOwogICAgYGFyY2hpdmUnOiBvbmx5IGNyaXRlcmlvbiAoYSkg aXMgdXNlZDsKICAgIHQ6IGJvdGggY3JpdGVyaWEgYXJlIHVzZWQuCgpUaGlzIHZhcmlhYmxlIGhh cyBubyBlZmZlY3QgaWYgYHBhY2thZ2UtbWVudS0taGlkZS1wYWNrYWdlcycgaXMKbmlsLCBzbyBp dCBjYW4gYmUgdG9nZ2xlZCB3aXRoIFxcPHBhY2thZ2UtbWVudS1tb2RlLW1hcD5cXFtwYWNrYWdl LW1lbnUtdG9nZ2xlLWhpZGluZ10uIgogIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJEb24n dCBoaWRlIGFueXRoaW5nIiBuaWwpCiAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIkhpZGUg cGVyIHBhY2thZ2UtYXJjaGl2ZS1wcmlvcml0aWVzIgogICAgICAgICAgICAgICAgICAgICAgICBh cmNoaXZlKQogICAgICAgICAgICAgICAgIChjb25zdCA6dGFnICJIaWRlIHBlciBhcmNoaXZlIGFu ZCB2ZXJzaW9uIG51bWJlciIgdCkpCiAgOnZlcnNpb24gIjI1LjEiKQoKKGRlZmN1c3RvbSBwYWNr YWdlLWFyY2hpdmUtcHJpb3JpdGllcyBuaWwKICAiQW4gYWxpc3Qgb2YgcHJpb3JpdGllcyBmb3Ig cGFja2FnZXMuCgpFYWNoIGVsZW1lbnQgaGFzIHRoZSBmb3JtIChBUkNISVZFLUlEIC4gUFJJT1JJ VFkpLgoKV2hlbiBpbnN0YWxsaW5nIHBhY2thZ2VzLCB0aGUgcGFja2FnZSB3aXRoIHRoZSBoaWdo ZXN0IHZlcnNpb24KbnVtYmVyIGZyb20gdGhlIGFyY2hpdmUgd2l0aCB0aGUgaGlnaGVzdCBwcmlv cml0eSBpcwpzZWxlY3RlZC4gIFdoZW4gaGlnaGVyIHZlcnNpb25zIGFyZSBhdmFpbGFibGUgZnJv bSBhcmNoaXZlcyB3aXRoCmxvd2VyIHByaW9yaXRpZXMsIHRoZSB1c2VyIGhhcyB0byBzZWxlY3Qg dGhvc2UgbWFudWFsbHkuCgpBcmNoaXZlcyBub3QgaW4gdGhpcyBsaXN0IGhhdmUgdGhlIHByaW9y aXR5IDAsIGFzIGhhdmUgcGFja2FnZXMKdGhhdCBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuICBJZiB5 b3UgdXNlIG5lZ2F0aXZlIHByaW9yaXRpZXMgZm9yCnRoZSBhcmNoaXZlcywgdGhleSB3aWxsIG5v dCBiZSB1cGdyYWRlZCBhdXRvbWF0aWNhbGx5LgoKU2VlIGFsc28gYHBhY2thZ2UtbWVudS1oaWRl LWxvdy1wcmlvcml0eScuIgogIDp0eXBlICcoYWxpc3QgOmtleS10eXBlIChzdHJpbmcgOnRhZyAi QXJjaGl2ZSBuYW1lIikKICAgICAgICAgICAgICAgIDp2YWx1ZS10eXBlIChpbnRlZ2VyIDp0YWcg IlByaW9yaXR5IChkZWZhdWx0IGlzIDApIikpCiAgOnJpc2t5IHQKICA6dmVyc2lvbiAiMjUuMSIp CgooZGVmY3VzdG9tIHBhY2thZ2UtcGlubmVkLXBhY2thZ2VzIG5pbAogICJBbiBhbGlzdCBvZiBw YWNrYWdlcyB0aGF0IGFyZSBwaW5uZWQgdG8gc3BlY2lmaWMgYXJjaGl2ZXMuClRoaXMgY2FuIGJl IHVzZWZ1bCBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBwYWNrYWdlIGFyY2hpdmVzIGVuYWJsZWQsCmFu ZCB3YW50IHRvIGNvbnRyb2wgd2hpY2ggYXJjaGl2ZSBhIGdpdmVuIHBhY2thZ2UgZ2V0cyBpbnN0 YWxsZWQgZnJvbS4KCkVhY2ggZWxlbWVudCBvZiB0aGUgYWxpc3QgaGFzIHRoZSBmb3JtIChQQUNL QUdFIC4gQVJDSElWRSksIHdoZXJlOgogUEFDS0FHRSBpcyBhIHN5bWJvbCByZXByZXNlbnRpbmcg YSBwYWNrYWdlCiBBUkNISVZFIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBhcmNoaXZlIChp dCBzaG91bGQgYmUgdGhlIGNhciBvZgphbiBlbGVtZW50IGluIGBwYWNrYWdlLWFyY2hpdmVzJywg ZS5nLiBcImdudVwiKS4KCkFkZGluZyBhbiBlbnRyeSB0byB0aGlzIHZhcmlhYmxlIG1lYW5zIHRo YXQgb25seSBBUkNISVZFIHdpbGwgYmUKY29uc2lkZXJlZCBhcyBhIHNvdXJjZSBmb3IgUEFDS0FH RS4gIElmIG90aGVyIGFyY2hpdmVzIHByb3ZpZGUgUEFDS0FHRSwKdGhleSBhcmUgaWdub3JlZCAo Zm9yIHRoaXMgcGFja2FnZSkuICBJZiBBUkNISVZFIGRvZXMgbm90IGNvbnRhaW4gUEFDS0FHRSwK dGhlIHBhY2thZ2Ugd2lsbCBiZSB1bmF2YWlsYWJsZS4iCiAgOnR5cGUgJyhhbGlzdCA6a2V5LXR5 cGUgKHN5bWJvbCA6dGFnICJQYWNrYWdlIikKICAgICAgICAgICAgICAgIDp2YWx1ZS10eXBlIChz dHJpbmcgOnRhZyAiQXJjaGl2ZSBuYW1lIikpCiAgOzsgVGhpcyBjb3VsZCBwcmV2ZW50IHlvdSBm cm9tIHJlY2VpdmluZyB1cGRhdGVzIGZvciBhIHBhY2thZ2UsCiAgOzsgdmlhIGFuIGVudHJ5IChQ QUNLQUdFIC4gTk9OLUVYSVNUSU5HKS4gIFdoaWNoIGNvdWxkIGJlIGFuIGlzc3VlCiAgOzsgaWYg UEFDS0FHRSBoYXMgYSBrbm93biB2dWxuZXJhYmlsaXR5IHRoYXQgaXMgZml4ZWQgaW4gbmV3ZXIg dmVyc2lvbnMuCiAgOnJpc2t5IHQKICA6dmVyc2lvbiAiMjQuNCIpCgo7OzsjIyNhdXRvbG9hZAoo ZGVmY3VzdG9tIHBhY2thZ2UtdXNlci1kaXIgKGxvY2F0ZS11c2VyLWVtYWNzLWZpbGUgImVscGEi KQogICJEaXJlY3RvcnkgY29udGFpbmluZyB0aGUgdXNlcidzIEVtYWNzIExpc3AgcGFja2FnZXMu ClRoZSBkaXJlY3RvcnkgbmFtZSBzaG91bGQgYmUgYWJzb2x1dGUuCkFwYXJ0IGZyb20gdGhpcyBk aXJlY3RvcnksIEVtYWNzIGFsc28gbG9va3MgZm9yIHN5c3RlbS13aWRlCnBhY2thZ2VzIGluIGBw YWNrYWdlLWRpcmVjdG9yeS1saXN0Jy4iCiAgOnR5cGUgJ2RpcmVjdG9yeQogIDppbml0aWFsaXpl ICMnY3VzdG9tLWluaXRpYWxpemUtZGVsYXkKICA6cmlza3kgdAogIDpncm91cCAnYXBwbGljYXRp b25zCiAgOnZlcnNpb24gIjI0LjEiKQoKOzs7IyMjYXV0b2xvYWQKKGRlZmN1c3RvbSBwYWNrYWdl LWRpcmVjdG9yeS1saXN0CiAgOzsgRGVmYXVsdHMgYXJlIHN1YmRpcnMgbmFtZWQgImVscGEiIGlu IHRoZSBzaXRlLWxpc3AgZGlycy4KICAobGV0IChyZXN1bHQpCiAgICAoZG9saXN0IChmIGxvYWQt cGF0aCkKICAgICAgKGFuZCAoc3RyaW5ncCBmKQogICAgICAgICAgIChlcXVhbCAoZmlsZS1uYW1l LW5vbmRpcmVjdG9yeSBmKSAic2l0ZS1saXNwIikKICAgICAgICAgICAocHVzaCAoZXhwYW5kLWZp bGUtbmFtZSAiZWxwYSIgZikgcmVzdWx0KSkpCiAgICAobnJldmVyc2UgcmVzdWx0KSkKICAiTGlz dCBvZiBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgRW1hY3MgTGlzcCBwYWNrYWdl cy4KRWFjaCBkaXJlY3RvcnkgbmFtZSBzaG91bGQgYmUgYWJzb2x1dGUuCgpUaGVzZSBkaXJlY3Rv cmllcyBjb250YWluIHBhY2thZ2VzIGludGVuZGVkIGZvciBzeXN0ZW0td2lkZTsgaW4KY29udHJh c3QsIGBwYWNrYWdlLXVzZXItZGlyJyBjb250YWlucyBwYWNrYWdlcyBmb3IgcGVyc29uYWwgdXNl LiIKICA6dHlwZSAnKHJlcGVhdCBkaXJlY3RvcnkpCiAgOmluaXRpYWxpemUgIydjdXN0b20taW5p dGlhbGl6ZS1kZWxheQogIDpncm91cCAnYXBwbGljYXRpb25zCiAgOnJpc2t5IHQKICA6dmVyc2lv biAiMjQuMSIpCgooZGVjbGFyZS1mdW5jdGlvbiBlcGctZmluZC1jb25maWd1cmF0aW9uICJlcGct Y29uZmlnIgogICAgICAgICAgICAgICAgICAocHJvdG9jb2wgJm9wdGlvbmFsIG5vLWNhY2hlIHBy b2dyYW0tYWxpc3QpKQoKKGRlZmN1c3RvbSBwYWNrYWdlLWdudXBnaG9tZS1kaXIgKGV4cGFuZC1m aWxlLW5hbWUgImdudXBnIiBwYWNrYWdlLXVzZXItZGlyKQogICJEaXJlY3RvcnkgY29udGFpbmlu ZyBHbnVQRyBrZXlyaW5nIG9yIG5pbC4KVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIEdudVBH IGhvbWUgZGlyZWN0b3J5IHVzZWQgYnkgcGFja2FnZS4KVGhhdCBkaXJlY3RvcnkgaXMgcGFzc2Vk IHZpYSB0aGUgb3B0aW9uIFwiLS1ob21lZGlyXCIgdG8gR251UEcuCklmIG5pbCwgZG8gbm90IHVz ZSB0aGUgb3B0aW9uIFwiLS1ob21lZGlyXCIsIGJ1dCBzdGljayB3aXRoIEdudVBHJ3MKZGVmYXVs dCBkaXJlY3RvcnkuIgogIDp0eXBlIGAoY2hvaWNlCiAgICAgICAgICAoY29uc3QKICAgICAgICAg ICA6dGFnICJEZWZhdWx0IEVtYWNzIHBhY2thZ2UgbWFuYWdlbWVudCBHbnVQRyBob21lIGRpcmVj dG9yeSIKICAgICAgICAgICAsKGV4cGFuZC1maWxlLW5hbWUgImdudXBnIiBwYWNrYWdlLXVzZXIt ZGlyKSkKICAgICAgICAgIChjb25zdAogICAgICAgICAgIDp0YWcgIkRlZmF1bHQgR251UEcgZGly ZWN0b3J5IChHbnVQRyBvcHRpb24gLS1ob21lZGlyIG5vdCB1c2VkKSIKICAgICAgICAgICBuaWwp CiAgICAgICAgICAoZGlyZWN0b3J5IDp0YWcgIkEgc3BlY2lmaWMgR251UEcgLS1ob21lZGlyIikp CiAgOnJpc2t5IHQKICA6dmVyc2lvbiAiMjYuMSIpCgooZGVmY3VzdG9tIHBhY2thZ2UtY2hlY2st c2lnbmF0dXJlICdhbGxvdy11bnNpZ25lZAogICJOb24tbmlsIG1lYW5zIHRvIGNoZWNrIHBhY2th Z2Ugc2lnbmF0dXJlcyB3aGVuIGluc3RhbGxpbmcuCgpUaGlzIGFsc28gYXBwbGllcyB0byB0aGUg XCJhcmNoaXZlLWNvbnRlbnRzXCIgZmlsZSB0aGF0IGxpc3RzIHRoZQpjb250ZW50cyBvZiB0aGUg YXJjaGl2ZS4KClRoZSB2YWx1ZSBjYW4gYmUgb25lIG9mOgoKICB0ICAgICAgICAgICAgICAgICAg QWNjZXB0IGEgcGFja2FnZSBvbmx5IGlmIGl0IGNvbWVzIHdpdGggYXQgbGVhc3QKICAgICAgICAg ICAgICAgICAgICAgb25lIHZlcmlmaWVkIHNpZ25hdHVyZS4KCiAgYGFsbCcgICAgICAgICAgICAg IFNhbWUgYXMgdCwgYnV0IHZlcmlmeSBhbGwgc2lnbmF0dXJlcyBpZiB0aGVyZQogICAgICAgICAg ICAgICAgICAgICBhcmUgbW9yZSB0aGFuIG9uZS4KCiAgYGFsbG93LXVuc2lnbmVkJyAgIEluc3Rh bGwgYSBwYWNrYWdlIGV2ZW4gaWYgaXQgaXMgdW5zaWduZWQsCiAgICAgICAgICAgICAgICAgICAg IGJ1dCB2ZXJpZnkgdGhlIHNpZ25hdHVyZSBpZiBwb3NzaWJsZSAodGhhdAogICAgICAgICAgICAg ICAgICAgICBpcywgaWYgaXQgaXMgc2lnbmVkLCB3ZSBoYXZlIHRoZSBrZXkgZm9yIGl0LAogICAg ICAgICAgICAgICAgICAgICBhbmQgR251UEcgaXMgaW5zdGFsbGVkKS4KCiAgbmlsICAgICAgICAg ICAgICAgIFBhY2thZ2Ugc2lnbmF0dXJlcyBhcmUgaWdub3JlZC4iCiAgOnR5cGUgJyhjaG9pY2Ug KGNvbnN0IDp2YWx1ZSBuaWwgICAgICAgICAgICA6dGFnICJOZXZlciIpCiAgICAgICAgICAgICAg ICAgKGNvbnN0IDp2YWx1ZSBhbGxvdy11bnNpZ25lZCA6dGFnICJBbGxvdyB1bnNpZ25lZCIpCiAg ICAgICAgICAgICAgICAgKGNvbnN0IDp2YWx1ZSB0ICAgICAgICAgICAgICA6dGFnICJDaGVjayBh bHdheXMiKQogICAgICAgICAgICAgICAgIChjb25zdCA6dmFsdWUgYWxsICAgICAgICAgICAgOnRh ZyAiQ2hlY2sgYWx3YXlzIChhbGwgc2lnbmF0dXJlcykiKSkKICA6cmlza3kgdAogIDp2ZXJzaW9u ICIyNy4xIikKCihkZWZ1biBwYWNrYWdlLWNoZWNrLXNpZ25hdHVyZSAoKQogICJDaGVjayB3aGV0 aGVyIHdlIGhhdmUgYSB1c2FibGUgT3BlblBHUCBjb25maWd1cmF0aW9uLgpJZiBzbywgYW5kIHZh cmlhYmxlIGBwYWNrYWdlLWNoZWNrLXNpZ25hdHVyZScgaXMKYGFsbG93LXVuc2lnbmVkJywgcmV0 dXJuIGBhbGxvdy11bnNpZ25lZCcsIG90aGVyd2lzZSByZXR1cm4gdGhlCnZhbHVlIG9mIHZhcmlh YmxlIGBwYWNrYWdlLWNoZWNrLXNpZ25hdHVyZScuIgogIChpZiAoZXEgcGFja2FnZS1jaGVjay1z aWduYXR1cmUgJ2FsbG93LXVuc2lnbmVkKQogICAgICAoYW5kIChlcGctZmluZC1jb25maWd1cmF0 aW9uICdPcGVuUEdQKQogICAgICAgICAgICdhbGxvdy11bnNpZ25lZCkKICAgIHBhY2thZ2UtY2hl Y2stc2lnbmF0dXJlKSkKCihkZWZjdXN0b20gcGFja2FnZS11bnNpZ25lZC1hcmNoaXZlcyBuaWwK ICAiTGlzdCBvZiBhcmNoaXZlcyB3aGVyZSB3ZSBkbyBub3QgY2hlY2sgZm9yIHBhY2thZ2Ugc2ln bmF0dXJlcy4KVGhpcyBzaG91bGQgYmUgYSBsaXN0IG9mIHN0cmluZ3MgbWF0Y2hpbmcgdGhlIG5h bWVzIG9mIHBhY2thZ2UKYXJjaGl2ZXMgaW4gdGhlIHZhcmlhYmxlIGBwYWNrYWdlLWFyY2hpdmVz Jy4iCiAgOnR5cGUgJyhyZXBlYXQgKHN0cmluZyA6dGFnICJBcmNoaXZlIG5hbWUiKSkKICA6cmlz a3kgdAogIDp2ZXJzaW9uICIyNC40IikKCihkZWZjdXN0b20gcGFja2FnZS1zZWxlY3RlZC1wYWNr YWdlcyBuaWwKICAiU3RvcmUgaGVyZSBwYWNrYWdlcyBpbnN0YWxsZWQgZXhwbGljaXRseSBieSB1 c2VyLgpUaGlzIHZhcmlhYmxlIGlzIGZlZCBhdXRvbWF0aWNhbGx5IGJ5IEVtYWNzIHdoZW4gaW5z dGFsbGluZyBhIG5ldyBwYWNrYWdlLgpUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgYHBhY2thZ2Ut YXV0b3JlbW92ZScgdG8gZGVjaWRlCndoaWNoIHBhY2thZ2VzIGFyZSBubyBsb25nZXIgbmVlZGVk LgpZb3UgY2FuIHVzZSBpdCB0byAocmUpaW5zdGFsbCBwYWNrYWdlcyBvbiBvdGhlciBtYWNoaW5l cwpieSBydW5uaW5nIGBwYWNrYWdlLWluc3RhbGwtc2VsZWN0ZWQtcGFja2FnZXMnLgoKVG8gY2hl Y2sgaWYgYSBwYWNrYWdlIGlzIGNvbnRhaW5lZCBpbiB0aGlzIGxpc3QgaGVyZSwgdXNlCmBwYWNr YWdlLS11c2VyLXNlbGVjdGVkLXAnLCBhcyBpdCBtYXkgcG9wdWxhdGUgdGhlIHZhcmlhYmxlIHdp dGgKYSBzYW5lIGluaXRpYWwgdmFsdWUuIgogIDp2ZXJzaW9uICIyNS4xIgogIDp0eXBlICcocmVw ZWF0IHN5bWJvbCkpCgooZGVmY3VzdG9tIHBhY2thZ2UtbmF0aXZlLWNvbXBpbGUgbmlsCiAgIk5v bi1uaWwgbWVhbnMgdG8gbmF0aXZlbHkgY29tcGlsZSBwYWNrYWdlcyBhcyBwYXJ0IG9mIHRoZWly IGluc3RhbGxhdGlvbi4KVGhpcyBjb250cm9scyBhaGVhZC1vZi10aW1lIGNvbXBpbGF0aW9uIG9m IHBhY2thZ2VzIHdoZW4gdGhleSBhcmUKaW5zdGFsbGVkLiAgSWYgdGhpcyBvcHRpb24gaXMgbmls LCBwYWNrYWdlcyB3aWxsIGJlIG5hdGl2ZWx5CmNvbXBpbGVkIHdoZW4gdGhleSBhcmUgbG9hZGVk IGZvciB0aGUgZmlyc3QgdGltZS4KClRoaXMgb3B0aW9uIGRvZXMgbm90IGhhdmUgYW55IGVmZmVj dCBpZiBFbWFjcyB3YXMgbm90IGJ1aWx0IHdpdGgKbmF0aXZlIGNvbXBpbGF0aW9uIHN1cHBvcnQu IgogIDp0eXBlICcoYm9vbGVhbikKICA6cmlza3kgdAogIDp2ZXJzaW9uICIyOC4xIikKCihkZWZj dXN0b20gcGFja2FnZS1tZW51LWFzeW5jIHQKICAiSWYgbm9uLW5pbCwgcGFja2FnZS1tZW51IHdp bGwgdXNlIGFzeW5jIG9wZXJhdGlvbnMgd2hlbiBwb3NzaWJsZS4KQ3VycmVudGx5LCBvbmx5IHRo ZSByZWZyZXNoaW5nIG9mIGFyY2hpdmUgY29udGVudHMgc3VwcG9ydHMKYXN5bmNocm9ub3VzIG9w ZXJhdGlvbnMuICBQYWNrYWdlIHRyYW5zYWN0aW9ucyBhcmUgc3RpbGwgZG9uZQpzeW5jaHJvbm91 c2x5LiIKICA6dHlwZSAnYm9vbGVhbgogIDp2ZXJzaW9uICIyNS4xIikKCihkZWZjdXN0b20gcGFj a2FnZS1uYW1lLWNvbHVtbi13aWR0aCAzMAogICJDb2x1bW4gd2lkdGggZm9yIHRoZSBQYWNrYWdl IG5hbWUgaW4gdGhlIHBhY2thZ2UgbWVudS4iCiAgOnR5cGUgJ25hdG51bQogIDp2ZXJzaW9uICIy OC4xIikKCihkZWZjdXN0b20gcGFja2FnZS12ZXJzaW9uLWNvbHVtbi13aWR0aCAxNAogICJDb2x1 bW4gd2lkdGggZm9yIHRoZSBQYWNrYWdlIHZlcnNpb24gaW4gdGhlIHBhY2thZ2UgbWVudS4iCiAg OnR5cGUgJ25hdG51bQogIDp2ZXJzaW9uICIyOC4xIikKCihkZWZjdXN0b20gcGFja2FnZS1zdGF0 dXMtY29sdW1uLXdpZHRoIDEyCiAgIkNvbHVtbiB3aWR0aCBmb3IgdGhlIFBhY2thZ2Ugc3RhdHVz IGluIHRoZSBwYWNrYWdlIG1lbnUuIgogIDp0eXBlICduYXRudW0KICA6dmVyc2lvbiAiMjguMSIp CgooZGVmY3VzdG9tIHBhY2thZ2UtYXJjaGl2ZS1jb2x1bW4td2lkdGggOAogICJDb2x1bW4gd2lk dGggZm9yIHRoZSBQYWNrYWdlIGFyY2hpdmUgaW4gdGhlIHBhY2thZ2UgbWVudS4iCiAgOnR5cGUg J25hdG51bQogIDp2ZXJzaW9uICIyOC4xIikKCgwKOzs7IGBwYWNrYWdlLWRlc2MnIG9iamVjdCBk ZWZpbml0aW9uCjs7IFRoaXMgaXMgdGhlIHN0cnVjdCB1c2VkIGludGVybmFsbHkgdG8gcmVwcmVz ZW50IHBhY2thZ2VzLgo7OyBGdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggcGFja2FnZXMgc2hvdWxk IGdlbmVyYWxseSB0YWtlIHRoaXMgb2JqZWN0Cjs7IGFzIGFuIGFyZ3VtZW50LiAgSW4gc29tZSBz aXR1YXRpb25zIChlLmcuIGNvbW1hbmRzIHRoYXQgcXVlcnkgdGhlCjs7IHVzZXIpIGl0IG1ha2Vz IHNlbnNlIHRvIHRha2UgdGhlIHBhY2thZ2UgbmFtZSBhcyBhIHN5bWJvbCBpbnN0ZWFkLAo7OyBi dXQga2VlcCBpbiBtaW5kIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGBwYWNrYWdlLWRlc2MncyB3 aXRoIHRoZQo7OyBzYW1lIG5hbWUuCgooZGVmdmFyIHBhY2thZ2UtLWRlZmF1bHQtc3VtbWFyeSAi Tm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlLiIpCgooZGVmaW5lLWlubGluZSBwYWNrYWdlLXZjLXAg KHBrZy1kZXNjKQogICJSZXR1cm4gbm9uLW5pbCBpZiBQS0ctREVTQyBpcyBhIFZDIHBhY2thZ2Uu IgogIChpbmxpbmUtbGV0ZXZhbHMgKHBrZy1kZXNjKQogICAgKGlubGluZS1xdW90ZSAoZXEgKHBh Y2thZ2UtZGVzYy1raW5kICxwa2ctZGVzYykgJ3ZjKSkpKQoKKGNsLWRlZnN0cnVjdCAocGFja2Fn ZS1kZXNjCiAgICAgICAgICAgICAgIDs7IFJlbmFtZSB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBm cm9tIGBtYWtlLXBhY2thZ2UtZGVzYycuCiAgICAgICAgICAgICAgICg6Y29uc3RydWN0b3IgcGFj a2FnZS1kZXNjLWNyZWF0ZSkKICAgICAgICAgICAgICAgOzsgSGFzIHRoZSBzYW1lIGludGVyZmFj ZSBhcyB0aGUgb2xkIGBkZWZpbmUtcGFja2FnZScsCiAgICAgICAgICAgICAgIDs7IHdoaWNoIGlz IHN0aWxsIHVzZWQgaW4gdGhlICJmb28tcGtnLmVsIiBmaWxlcy4gRXh0cmEKICAgICAgICAgICAg ICAgOzsgb3B0aW9ucyBjYW4gYmUgc3VwcG9ydGVkIGJ5IGFkZGluZyBhZGRpdGlvbmFsIGtleXMu CiAgICAgICAgICAgICAgICg6Y29uc3RydWN0b3IKICAgICAgICAgICAgICAgIHBhY2thZ2UtZGVz Yy1mcm9tLWRlZmluZQogICAgICAgICAgICAgICAgKG5hbWUtc3RyaW5nIHZlcnNpb24tc3RyaW5n ICZvcHRpb25hbCBzdW1tYXJ5IHJlcXVpcmVtZW50cwogICAgICAgICAgICAgICAgICZyZXN0IHJl c3QtcGxpc3QKICAgICAgICAgICAgICAgICAmYXV4CiAgICAgICAgICAgICAgICAgKG5hbWUgKGlu dGVybiBuYW1lLXN0cmluZykpCiAgICAgICAgICAgICAgICAgKHZlcnNpb24gKGlmIChlcSAoY2Fy LXNhZmUgdmVyc2lvbi1zdHJpbmcpICd2YykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHZlcnNpb24tdG8tbGlzdCAoY2RyIHZlcnNpb24tc3RyaW5nKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICh2ZXJzaW9uLXRvLWxpc3QgdmVyc2lvbi1zdHJpbmcpKSkKICAgICAgICAgICAg ICAgICAocmVxcyAobWFwY2FyIChsYW1iZGEgKGVsdCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxpc3QgKGNhciBlbHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh2ZXJzaW9uLXRvLWxpc3QgKGNhZHIgZWx0KSkpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGlmIChlcSAncXVvdGUgKGNhciByZXF1aXJlbWVudHMpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChudGggMSByZXF1aXJlbWVudHMpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVtZW50cykpKQogICAgICAgICAgICAgICAgIChr aW5kIChwbGlzdC1nZXQgcmVzdC1wbGlzdCA6a2luZCkpCiAgICAgICAgICAgICAgICAgKGFyY2hp dmUgKHBsaXN0LWdldCByZXN0LXBsaXN0IDphcmNoaXZlKSkKICAgICAgICAgICAgICAgICAoZXh0 cmFzIChsZXQgKGFsaXN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAod2hpbGUgcmVzdC1w bGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3MgKG1lbXEgKGNhciByZXN0 LXBsaXN0KSAnKDpraW5kIDphcmNoaXZlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsZXQgKCh2YWx1ZSAoY2FkciByZXN0LXBsaXN0KSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICh3aGVuIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHB1c2ggKGNvbnMgKGNhciByZXN0LXBsaXN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChpZiAoZXEgKGNhci1zYWZlIHZhbHVlKSAncXVvdGUpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWRyIHZhbHVl KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaXN0KSkpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJlc3QtcGxpc3QgKGNkZHIgcmVzdC1wbGlz dCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlzdCkpKSkpCiAgIlN0cnVjdHVyZSBj b250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGFuIGluZGl2aWR1YWwgcGFja2FnZS4KU2xvdHM6 CgpgbmFtZScJTmFtZSBvZiB0aGUgcGFja2FnZSwgYXMgYSBzeW1ib2wuCgpgdmVyc2lvbicgVmVy c2lvbiBvZiB0aGUgcGFja2FnZSwgYXMgYSB2ZXJzaW9uIGxpc3QuCgpgc3VtbWFyeScgU2hvcnQg ZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2UsIHR5cGljYWxseSB0YWtlbiBmcm9tCiAgICAgICAg dGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUuCgpgcmVxcycJUmVxdWlyZW1lbnRzIG9mIHRoZSBw YWNrYWdlLiAgQSBsaXN0IG9mIChQQUNLQUdFCiAgICAgICAgVkVSU0lPTi1MSVNUKSBuYW1pbmcg dGhlIGRlcGVuZGVudCBwYWNrYWdlIGFuZCB0aGUgbWluaW11bQogICAgICAgIHJlcXVpcmVkIHZl cnNpb24uCgpga2luZCcJVGhlIGRpc3RyaWJ1dGlvbiBmb3JtYXQgb2YgdGhlIHBhY2thZ2UuICBD dXJyZW50bHksIGl0IGlzCiAgICAgICAgZWl0aGVyIGBzaW5nbGUnIG9yIGB0YXInLgoKYGFyY2hp dmUnIFRoZSBuYW1lIG9mIHRoZSBhcmNoaXZlIChhcyBhIHN0cmluZykgd2hlbmNlIHRoaXMKICAg ICAgICBwYWNrYWdlIGNhbWUuCgpgZGlyJwlUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBwYWNrYWdl IGlzIGluc3RhbGxlZCAoaWYgaW5zdGFsbGVkKSwKICAgICAgICBgYnVpbHRpbicgaWYgaXQgaXMg YnVpbHQtaW4sIG9yIG5pbCBvdGhlcndpc2UuCgpgZXh0cmFzJyBPcHRpb25hbCBhbGlzdCBvZiBh ZGRpdGlvbmFsIGtleXdvcmQtdmFsdWUgcGFpcnMuCgpgc2lnbmVkJyBGbGFnIHRvIGluZGljYXRl IHRoYXQgdGhlIHBhY2thZ2UgaXMgc2lnbmVkIGJ5IHByb3ZpZGVyLiIKICBuYW1lCiAgdmVyc2lv bgogIChzdW1tYXJ5IHBhY2thZ2UtLWRlZmF1bHQtc3VtbWFyeSkKICByZXFzCiAga2luZAogIGFy Y2hpdmUKICBkaXIKICBleHRyYXMKICBzaWduZWQpCgooZGVmdW4gcGFja2FnZS0tZnJvbS1idWls dGluIChiaS1kZXNjKQogICJDcmVhdGUgYSBgcGFja2FnZS1kZXNjJyBvYmplY3QgZnJvbSBCSS1E RVNDLgpCSS1ERVNDIHNob3VsZCBiZSBhIGBwYWNrYWdlLS1iaS1kZXNjJyBvYmplY3QuIgogIChw YWNrYWdlLWRlc2MtY3JlYXRlIDpuYW1lIChwb3AgYmktZGVzYykKICAgICAgICAgICAgICAgICAg ICAgICA6dmVyc2lvbiAocGFja2FnZS0tYmktZGVzYy12ZXJzaW9uIGJpLWRlc2MpCiAgICAgICAg ICAgICAgICAgICAgICAgOnN1bW1hcnkgKHBhY2thZ2UtLWJpLWRlc2Mtc3VtbWFyeSBiaS1kZXNj KQogICAgICAgICAgICAgICAgICAgICAgIDpkaXIgJ2J1aWx0aW4pKQoKOzsgUHNldWRvIGZpZWxk cy4KKGRlZnVuIHBhY2thZ2UtdmVyc2lvbi1qb2luICh2bGlzdCkKICAiUmV0dXJuIHRoZSB2ZXJz aW9uIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsaXN0IFZMSVNULgpUaGlzIGlzLCBhcHBy b3hpbWF0ZWx5LCB0aGUgaW52ZXJzZSBvZiBgdmVyc2lvbi10by1saXN0Jy4KXChBY3R1YWxseSwg aXQgcmV0dXJucyBvbmx5IG9uZSBvZiB0aGUgcG9zc2libGUgaW52ZXJzZXMsIHNpbmNlCmB2ZXJz aW9uLXRvLWxpc3QnIGlzIGEgbWFueS10by1vbmUgb3BlcmF0aW9uLikiCiAgKGlmIChudWxsIHZs aXN0KQogICAgICAiIgogICAgKGxldCAoKHN0ci1saXN0IChsaXN0ICIuIiAoaW50LXRvLXN0cmlu ZyAoY2FyIHZsaXN0KSkpKSkKICAgICAgKGRvbGlzdCAobnVtIChjZHIgdmxpc3QpKQogICAgICAg IChjb25kCiAgICAgICAgICgoPj0gbnVtIDApCiAgICAgICAgICAocHVzaCAoaW50LXRvLXN0cmlu ZyBudW0pIHN0ci1saXN0KQogICAgICAgICAgKHB1c2ggIi4iIHN0ci1saXN0KSkKICAgICAgICAg KCg8IG51bSAtNCkKICAgICAgICAgIChlcnJvciAiSW52YWxpZCB2ZXJzaW9uIGxpc3QgYCVzJyIg dmxpc3QpKQogICAgICAgICAodAogICAgICAgICAgOzsgcHJlLCBvciBiZXRhLCBvciBhbHBoYQog ICAgICAgICAgKGNvbmQgKChlcXVhbCAiLiIgKGNhciBzdHItbGlzdCkpCiAgICAgICAgICAgICAg ICAgKHBvcCBzdHItbGlzdCkpCiAgICAgICAgICAgICAgICAoKG5vdCAoc3RyaW5nLW1hdGNoICJb MC05XSsiIChjYXIgc3RyLWxpc3QpKSkKICAgICAgICAgICAgICAgICAoZXJyb3IgIkludmFsaWQg dmVyc2lvbiBsaXN0IGAlcyciIHZsaXN0KSkpCiAgICAgICAgICAocHVzaCAoY29uZCAoKD0gbnVt IC0xKSAicHJlIikKICAgICAgICAgICAgICAgICAgICAgICgoPSBudW0gLTIpICJiZXRhIikKICAg ICAgICAgICAgICAgICAgICAgICgoPSBudW0gLTMpICJhbHBoYSIpCiAgICAgICAgICAgICAgICAg ICAgICAoKD0gbnVtIC00KSAic25hcHNob3QiKSkKICAgICAgICAgICAgICAgIHN0ci1saXN0KSkp KQogICAgICAoaWYgKGVxdWFsICIuIiAoY2FyIHN0ci1saXN0KSkKICAgICAgICAgIChwb3Agc3Ry LWxpc3QpKQogICAgICAoYXBwbHkgIydjb25jYXQgKG5yZXZlcnNlIHN0ci1saXN0KSkpKSkKCihk ZWZ1biBwYWNrYWdlLWRlc2MtZnVsbC1uYW1lIChwa2ctZGVzYykKICAiUmV0dXJuIGZ1bGwgbmFt ZSBvZiBwYWNrYWdlLWRlc2Mgb2JqZWN0IFBLRy1ERVNDLgpUaGlzIGlzIHRoZSBuYW1lIG9mIHRo ZSBwYWNrYWdlIHdpdGggaXRzIHZlcnNpb24gYXBwZW5kZWQuIgogIChpZiAocGFja2FnZS12Yy1w IHBrZy1kZXNjKQogICAgICAoc3ltYm9sLW5hbWUgKHBhY2thZ2UtZGVzYy1uYW1lIHBrZy1kZXNj KSkKICAgIChmb3JtYXQgIiVzLSVzIgogICAgICAgICAgICAocGFja2FnZS1kZXNjLW5hbWUgcGtn LWRlc2MpCiAgICAgICAgICAgIChwYWNrYWdlLXZlcnNpb24tam9pbiAocGFja2FnZS1kZXNjLXZl cnNpb24gcGtnLWRlc2MpKSkpKQoKKGRlZnVuIHBhY2thZ2UtZGVzYy1zdWZmaXggKHBrZy1kZXNj KQogICJSZXR1cm4gZmlsZS1uYW1lIGV4dGVuc2lvbiBvZiBwYWNrYWdlLWRlc2Mgb2JqZWN0IFBL Ry1ERVNDLgpEZXBlbmRpbmcgb24gdGhlIGBwYWNrYWdlLWRlc2Mta2luZCcgb2YgUEtHLURFU0Ms IHRoaXMgaXMgb25lIG9mOgoKICAgXFw9J3NpbmdsZSAtIFwiLmVsXCIKICAgXFw9J3RhciAgICAt IFwiLnRhclwiCiAgIFxcPSdkaXIgICAgLSBcIlwiCgpTaWduYWwgYW4gZXJyb3IgaWYgdGhlIGtp bmQgaXMgbm9uZSBvZiB0aGUgYWJvdmUuIgogIChwY2FzZSAocGFja2FnZS1kZXNjLWtpbmQgcGtn LWRlc2MpCiAgICAoJ3NpbmdsZSAiLmVsIikKICAgICgndGFyICIudGFyIikKICAgICgnZGlyICIi KQogICAgKGtpbmQgKGVycm9yICJVbmtub3duIHBhY2thZ2Uga2luZDogJXMiIGtpbmQpKSkpCgoo ZGVmdW4gcGFja2FnZS1kZXNjLS1rZXl3b3JkcyAocGtnLWRlc2MpCiAgIlJldHVybiBrZXl3b3Jk cyBvZiBwYWNrYWdlLWRlc2Mgb2JqZWN0IFBLRy1ERVNDLgpUaGVzZSBrZXl3b3JkcyBjb21lIGZy b20gdGhlIGZvby1wa2cuZWwgZmlsZSwgYW5kIGluIGdlbmVyYWwKY29ycmVzcG9uZHMgdG8gdGhl IGtleXdvcmRzIGluIHRoZSBcIktleXdvcmRzXCIgaGVhZGVyIG9mIHRoZQpwYWNrYWdlLiIKICAo bGV0ICgoa2V5d29yZHMgKGNkciAoYXNzb2MgOmtleXdvcmRzIChwYWNrYWdlLWRlc2MtZXh0cmFz IHBrZy1kZXNjKSkpKSkKICAgIChpZiAoZXEgKGNhci1zYWZlIGtleXdvcmRzKSAncXVvdGUpCiAg ICAgICAgKG50aCAxIGtleXdvcmRzKQogICAgICBrZXl3b3JkcykpKQoKKGRlZnVuIHBhY2thZ2Ut ZGVzYy1wcmlvcml0eSAocGtnLWRlc2MpCiAgIlJldHVybiB0aGUgcHJpb3JpdHkgb2YgdGhlIGFy Y2hpdmUgb2YgcGFja2FnZS1kZXNjIG9iamVjdCBQS0ctREVTQy4iCiAgKHBhY2thZ2UtYXJjaGl2 ZS1wcmlvcml0eSAocGFja2FnZS1kZXNjLWFyY2hpdmUgcGtnLWRlc2MpKSkKCihkZWZ1biBwYWNr YWdlLS1wYXJzZS1lbHBhaWdub3JlIChwa2ctZGVzYykKICAiUmV0dXJuIHRoZSBvZiByZWd1bGFy IGV4cHJlc3Npb24gdG8gbWF0Y2ggZmlsZXMgaWdub3JlZCBieSBQS0ctREVTQy4iCiAgKGxldCog KChwa2ctZGlyIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IChwYWNrYWdlLWRlc2MtZGlyIHBrZy1k ZXNjKSkpCiAgICAgICAgIChpZ25vcmUgKGV4cGFuZC1maWxlLW5hbWUgIi5lbHBhaWdub3JlIiBw a2ctZGlyKSkKICAgICAgICAgZmlsZXMpCiAgICAod2hlbiAoZmlsZS1leGlzdHMtcCBpZ25vcmUp CiAgICAgICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgICAgKGluc2VydC1maWxlLWNvbnRlbnRzIGln bm9yZSkKICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAgICh3aGlsZSAobm90 IChlb2JwKSkKICAgICAgICAgIChwdXNoICh3aWxkY2FyZC10by1yZWdleHAKICAgICAgICAgICAg ICAgICAobGV0ICgobGluZSAoYnVmZmVyLXN1YnN0cmluZwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsaW5lLWVuZC1wb3NpdGlvbikpKSkKICAgICAgICAgICAgICAgICAgIChmaWxlLW5h bWUtY29uY2F0IHBrZy1kaXIgKHN0cmluZy10cmltLWxlZnQgbGluZSAiLyIpKSkpCiAgICAgICAg ICAgICAgICBmaWxlcykKICAgICAgICAgIChmb3J3YXJkLWxpbmUpKSkKICAgICAgZmlsZXMpKSkK CihjbC1kZWZzdHJ1Y3QgKHBhY2thZ2UtLWJpLWRlc2MKICAgICAgICAgICAgICAgKDpjb25zdHJ1 Y3RvciBwYWNrYWdlLW1ha2UtYnVpbHRpbiAodmVyc2lvbiBzdW1tYXJ5KSkKICAgICAgICAgICAg ICAgKDp0eXBlIHZlY3RvcikpCiAgIlBhY2thZ2UgZGVzY3JpcHRvciBmb3JtYXQgdXNlZCBpbiBm aW5kZXItaW5mLmVsIGFuZCBwYWNrYWdlLS1idWlsdGlucy4iCiAgdmVyc2lvbgogIHJlcXMKICBz dW1tYXJ5KQoKDAo7OzsgSW5zdGFsbGVkIHBhY2thZ2VzCjs7IFRoZSBmb2xsb3dpbmcgdmFyaWFi bGVzIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2VzIHByZXNlbnQgaW4KOzsgdGhlIHN5 c3RlbS4gIFRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGVzZSBpcyBgcGFja2FnZS1hbGlzdCcuICBU aGUKOzsgY29tbWFuZCBgcGFja2FnZS1hY3RpdmF0ZS1hbGwnIGlzIGFsc28gY2xvc2VseSByZWxh dGVkIHRvIHRoaXMKOzsgc2VjdGlvbi4KCihkZWZ2YXIgcGFja2FnZS0tYnVpbHRpbnMgbmlsCiAg IkFsaXN0IG9mIGJ1aWx0LWluIHBhY2thZ2VzLgpUaGUgYWN0dWFsIHZhbHVlIGlzIGluaXRpYWxp emVkIGJ5IGxvYWRpbmcgdGhlIGxpYnJhcnkKYGZpbmRlci1pbmYnOyB0aGlzIGlzIG5vdCBkb25l IHVudGlsIGl0IGlzIG5lZWRlZCwgZS5nLiBieSB0aGUKZnVuY3Rpb24gYHBhY2thZ2UtYnVpbHQt aW4tcCcuCgpFYWNoIGVsZW1lbnQgaGFzIHRoZSBmb3JtIChQS0cgLiBQQUNLQUdFLUJJLURFU0Mp LCB3aGVyZSBQS0cgaXMgYSBwYWNrYWdlCm5hbWUgKGEgc3ltYm9sKSBhbmQgREVTQyBpcyBhIGBw YWNrYWdlLS1iaS1kZXNjJyBzdHJ1Y3R1cmUuIikKKHB1dCAncGFja2FnZS0tYnVpbHRpbnMgJ3Jp c2t5LWxvY2FsLXZhcmlhYmxlIHQpCgooZGVmdmFyIHBhY2thZ2UtYWxpc3QgbmlsCiAgIkFsaXN0 IG9mIGFsbCBwYWNrYWdlcyBhdmFpbGFibGUgZm9yIGFjdGl2YXRpb24uCkVhY2ggZWxlbWVudCBo YXMgdGhlIGZvcm0gKFBLRyAuIERFU0NTKSwgd2hlcmUgUEtHIGlzIGEgcGFja2FnZQpuYW1lIChh IHN5bWJvbCkgYW5kIERFU0NTIGlzIGEgbm9uLWVtcHR5IGxpc3Qgb2YgYHBhY2thZ2UtZGVzYycK c3RydWN0dXJlcywgc29ydGVkIGJ5IGRlY3JlYXNpbmcgdmVyc2lvbnMuCgpUaGlzIHZhcmlhYmxl IGlzIHNldCBhdXRvbWF0aWNhbGx5IGJ5IGBwYWNrYWdlLWxvYWQtZGVzY3JpcHRvcicsCmNhbGxl ZCB2aWEgYHBhY2thZ2UtYWN0aXZhdGUtYWxsJy4gIFRvIGNoYW5nZSB3aGljaCBwYWNrYWdlcyBh cmUKbG9hZGVkIGFuZC9vciBhY3RpdmF0ZWQsIGN1c3RvbWl6ZSBgcGFja2FnZS1sb2FkLWxpc3Qn LiIpCihwdXQgJ3BhY2thZ2UtYWxpc3QgJ3Jpc2t5LWxvY2FsLXZhcmlhYmxlIHQpCgo7OzsjIyNh dXRvbG9hZAooZGVmdmFyIHBhY2thZ2UtYWN0aXZhdGVkLWxpc3QgbmlsCiAgOzsgRklYTUU6IFRo aXMgc2hvdWxkIGltcGxpY2l0bHkgaW5jbHVkZSBhbGwgYnVpbHRpbiBwYWNrYWdlcy4KICAiTGlz dCBvZiB0aGUgbmFtZXMgb2YgY3VycmVudGx5IGFjdGl2YXRlZCBwYWNrYWdlcy4iKQoocHV0ICdw YWNrYWdlLWFjdGl2YXRlZC1saXN0ICdyaXNreS1sb2NhbC12YXJpYWJsZSB0KQoKOzs7OyBQb3B1 bGF0aW5nIGBwYWNrYWdlLWFsaXN0Jy4KCjs7IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBj YWxsZWQgb24gZWFjaCBpbnN0YWxsZWQgcGFja2FnZSBieQo7OyBgcGFja2FnZS1sb2FkLWFsbC1k ZXNjcmlwdG9ycycsIHdoaWNoIHVsdGltYXRlbHkgcG9wdWxhdGVzIHRoZQo7OyBgcGFja2FnZS1h bGlzdCcgdmFyaWFibGUuCgooZGVjbGFyZS1mdW5jdGlvbiBwYWNrYWdlLXZjLXZlcnNpb24gInBh Y2thZ2UtdmMiIChwa2cpKQoKKGRlZnVuIHBhY2thZ2UtcHJvY2Vzcy1kZWZpbmUtcGFja2FnZSAo ZXhwKQogICJQcm9jZXNzIGRlZmluZS1wYWNrYWdlIGV4cHJlc3Npb24gRVhQIGFuZCBwdXNoIGl0 IHRvIGBwYWNrYWdlLWFsaXN0Jy4KRVhQIHNob3VsZCBiZSBhIGZvcm0gcmVhZCBmcm9tIGEgZm9v LXBrZy5lbCBmaWxlLgpDb252ZXJ0IEVYUCBpbnRvIGEgYHBhY2thZ2UtZGVzYycgb2JqZWN0IHVz aW5nIHRoZQpgcGFja2FnZS1kZXNjLWZyb20tZGVmaW5lJyBjb25zdHJ1Y3RvciBiZWZvcmUgcHVz aGluZyBpdCB0bwpgcGFja2FnZS1hbGlzdCcuCgpJZiB0aGVyZSBhbHJlYWR5IGV4aXN0cyBhIHBh Y2thZ2UgYnkgdGhlIHNhbWUgbmFtZSBpbgpgcGFja2FnZS1hbGlzdCcsIGluc2VydCB0aGlzIG9i amVjdCB0aGVyZSBzdWNoIHRoYXQgdGhlIHBhY2thZ2VzCmFyZSBzb3J0ZWQgd2l0aCB0aGUgaGln aGVzdCB2ZXJzaW9uIGZpcnN0LiIKICAod2hlbiAoZXEgKGNhci1zYWZlIGV4cCkgJ2RlZmluZS1w YWNrYWdlKQogICAgKGxldCogKChuZXctcGtnLWRlc2MgKGFwcGx5ICMncGFja2FnZS1kZXNjLWZy b20tZGVmaW5lIChjZHIgZXhwKSkpCiAgICAgICAgICAgKG5hbWUgKHBhY2thZ2UtZGVzYy1uYW1l IG5ldy1wa2ctZGVzYykpCiAgICAgICAgICAgKHZlcnNpb24gKHBhY2thZ2UtZGVzYy12ZXJzaW9u IG5ldy1wa2ctZGVzYykpCiAgICAgICAgICAgKG9sZC1wa2dzIChhc3NxIG5hbWUgcGFja2FnZS1h bGlzdCkpKQogICAgICAoaWYgKG51bGwgb2xkLXBrZ3MpCiAgICAgICAgICA7OyBJZiB0aGVyZSdz IG5vIG9sZCBwYWNrYWdlLCBqdXN0IGFkZCB0aGlzIHRvIGBwYWNrYWdlLWFsaXN0Jy4KICAgICAg ICAgIChwdXNoIChsaXN0IG5hbWUgbmV3LXBrZy1kZXNjKSBwYWNrYWdlLWFsaXN0KQogICAgICAg IDs7IElmIHRoZXJlIGlzLCBpbnNlcnQgdGhlIG5ldyBwYWNrYWdlIGF0IHRoZSByaWdodCBwbGFj ZSBpbiB0aGUgbGlzdC4KICAgICAgICAod2hpbGUKICAgICAgICAgICAgKGlmIChhbmQgKGNkciBv bGQtcGtncykKICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24tbGlzdC08IHZlcnNpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlc2MtdmVyc2lvbiAo Y2FkciBvbGQtcGtncykpKSkKICAgICAgICAgICAgICAgIChzZXRxIG9sZC1wa2dzIChjZHIgb2xk LXBrZ3MpKQogICAgICAgICAgICAgIChwdXNoIG5ldy1wa2ctZGVzYyAoY2RyIG9sZC1wa2dzKSkK ICAgICAgICAgICAgICBuaWwpKSkKICAgICAgbmV3LXBrZy1kZXNjKSkpCgooZGVjbGFyZS1mdW5j dGlvbiBwYWNrYWdlLXZjLWNvbW1pdCAicGFja2FnZS12YyIgKHBrZykpCgooZGVmdW4gcGFja2Fn ZS1sb2FkLWRlc2NyaXB0b3IgKHBrZy1kaXIpCiAgIkxvYWQgdGhlIHBhY2thZ2UgZGVzY3JpcHRp b24gZmlsZSBpbiBkaXJlY3RvcnkgUEtHLURJUi4KQ3JlYXRlIGEgbmV3IGBwYWNrYWdlLWRlc2Mn IG9iamVjdCwgYWRkIGl0IHRvIGBwYWNrYWdlLWFsaXN0JyBhbmQKcmV0dXJuIGl0LiIKICAobGV0 ICgocGtnLWZpbGUgKGV4cGFuZC1maWxlLW5hbWUgKHBhY2thZ2UtLWRlc2NyaXB0aW9uLWZpbGUg cGtnLWRpcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnLWRpcikpCiAg ICAgICAgKHNpZ25lZC1maWxlIChjb25jYXQgcGtnLWRpciAiLnNpZ25lZCIpKSkKICAgICh3aGVu IChmaWxlLWV4aXN0cy1wIHBrZy1maWxlKQogICAgICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgICAg IChpbnNlcnQtZmlsZS1jb250ZW50cyBwa2ctZmlsZSkKICAgICAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQogICAgICAgIChsZXQgKChwa2ctZGVzYyAob3IgKHBhY2thZ2UtcHJvY2Vzcy1kZWZp bmUtcGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkIChjdXJyZW50LWJ1 ZmZlcikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJDYW4ndCBmaW5kIGRl ZmluZS1wYWNrYWdlIGluICVzIiBwa2ctZmlsZSkpKSkKICAgICAgICAgIChzZXRmIChwYWNrYWdl LWRlc2MtZGlyIHBrZy1kZXNjKSBwa2ctZGlyKQogICAgICAgICAgKGlmIChmaWxlLWV4aXN0cy1w IHNpZ25lZC1maWxlKQogICAgICAgICAgICAgIChzZXRmIChwYWNrYWdlLWRlc2Mtc2lnbmVkIHBr Zy1kZXNjKSB0KSkKICAgICAgICAgIHBrZy1kZXNjKSkpKSkKCihkZWZ1biBwYWNrYWdlLWxvYWQt YWxsLWRlc2NyaXB0b3JzICgpCiAgIkxvYWQgZGVzY3JpcHRvcnMgZm9yIGluc3RhbGxlZCBFbWFj cyBMaXNwIHBhY2thZ2VzLgpUaGlzIGxvb2tzIGZvciBwYWNrYWdlIHN1YmRpcmVjdG9yaWVzIGlu IGBwYWNrYWdlLXVzZXItZGlyJyBhbmQKYHBhY2thZ2UtZGlyZWN0b3J5LWxpc3QnLiAgVGhlIHZh cmlhYmxlIGBwYWNrYWdlLWxvYWQtbGlzdCcKY29udHJvbHMgd2hpY2ggcGFja2FnZSBzdWJkaXJl Y3RvcmllcyBtYXkgYmUgbG9hZGVkLgoKSW4gZWFjaCB2YWxpZCBwYWNrYWdlIHN1YmRpcmVjdG9y eSwgdGhpcyBmdW5jdGlvbiBsb2FkcyB0aGUKZGVzY3JpcHRpb24gZmlsZSBjb250YWluaW5nIGEg Y2FsbCB0byBgZGVmaW5lLXBhY2thZ2UnLCB3aGljaAp1cGRhdGVzIGBwYWNrYWdlLWFsaXN0Jy4i CiAgKGRvbGlzdCAoZGlyIChjb25zIHBhY2thZ2UtdXNlci1kaXIgcGFja2FnZS1kaXJlY3Rvcnkt bGlzdCkpCiAgICAod2hlbiAoZmlsZS1kaXJlY3RvcnktcCBkaXIpCiAgICAgIChkb2xpc3QgKHBr Zy1kaXIgKGRpcmVjdG9yeS1maWxlcyBkaXIgdCAiXFxgW14uXSIgdCkpCiAgICAgICAgKHdoZW4g KGZpbGUtZGlyZWN0b3J5LXAgcGtnLWRpcikKICAgICAgICAgIChwYWNrYWdlLWxvYWQtZGVzY3Jp cHRvciBwa2ctZGlyKSkpKSkpCgooZGVmdW4gcGFja2FnZS0tYWxpc3QgKCkKICAiUmV0dXJuIGBw YWNrYWdlLWFsaXN0JywgYWZ0ZXIgY29tcHV0aW5nIGl0IGlmIG5lZWRlZC4iCiAgKG9yIHBhY2th Z2UtYWxpc3QKICAgICAgKHByb2duIChwYWNrYWdlLWxvYWQtYWxsLWRlc2NyaXB0b3JzKQogICAg ICAgICAgICAgcGFja2FnZS1hbGlzdCkpKQoKKGRlZnVuIGRlZmluZS1wYWNrYWdlICggX25hbWUt c3RyaW5nIF92ZXJzaW9uLXN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwg X2RvY3N0cmluZyBfcmVxdWlyZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICZyZXN0IF9l eHRyYS1wcm9wZXJ0aWVzKQogICJEZWZpbmUgYSBuZXcgcGFja2FnZS4KTkFNRS1TVFJJTkcgaXMg dGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UsIGFzIGEgc3RyaW5nLgpWRVJTSU9OLVNUUklORyBpcyB0 aGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSwgYXMgYSBzdHJpbmcuCkRPQ1NUUklORyBpcyBhIHNo b3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwYWNrYWdlLCBhIHN0cmluZy4KUkVRVUlSRU1FTlRTIGlz IGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMgb24gb3RoZXIgcGFja2FnZXMuCiBFYWNoIHJlcXVpcmVt ZW50IGlzIG9mIHRoZSBmb3JtIChPVEhFUi1QQUNLQUdFIE9USEVSLVZFUlNJT04pLAogd2hlcmUg T1RIRVItVkVSU0lPTiBpcyBhIHN0cmluZy4KCkVYVFJBLVBST1BFUlRJRVMgaXMgY3VycmVudGx5 IHVudXNlZC4iCiAgKGRlY2xhcmUgKG9ic29sZXRlIG5pbCAiMjkuMSIpIChpbmRlbnQgZGVmdW4p KQogIChlcnJvciAiRG9uJ3QgY2FsbCBtZSEiKSkKCgwKOzs7IFBhY2thZ2UgYWN0aXZhdGlvbgo7 OyBTZWN0aW9uIGZvciBmdW5jdGlvbnMgdXNlZCBieSBgcGFja2FnZS1hY3RpdmF0ZScsIHdoaWNo IHNlZS4KCihkZWZ1biBwYWNrYWdlLWRpc2FibGVkLXAgKHBrZy1uYW1lIHZlcnNpb24pCiAgIlJl dHVybiB3aGV0aGVyIFBLRy1OQU1FIGF0IFZFUlNJT04gY2FuIGJlIGFjdGl2YXRlZC4KVGhlIGRl Y2lzaW9uIGlzIG1hZGUgYWNjb3JkaW5nIHRvIGBwYWNrYWdlLWxvYWQtbGlzdCcuClJldHVybiBu aWwgaWYgdGhlIHBhY2thZ2UgY2FuIGJlIGFjdGl2YXRlZC4KUmV0dXJuIHQgaWYgdGhlIHBhY2th Z2UgaXMgY29tcGxldGVseSBkaXNhYmxlZC4KUmV0dXJuIHRoZSBtYXggdmVyc2lvbiAoYXMgYSBz dHJpbmcpIGlmIHRoZSBwYWNrYWdlIGlzIGhlbGQgYXQgYSBsb3dlciB2ZXJzaW9uLiIKICAobGV0 ICgoZm9yY2UgKGFzc3EgcGtnLW5hbWUgcGFja2FnZS1sb2FkLWxpc3QpKSkKICAgIChjb25kICgo bnVsbCBmb3JjZSkgKG5vdCAobWVtcSAnYWxsIHBhY2thZ2UtbG9hZC1saXN0KSkpCiAgICAgICAg ICAoKG51bGwgKHNldHEgZm9yY2UgKGNhZHIgZm9yY2UpKSkgdCkgOyBkaXNhYmxlZAogICAgICAg ICAgKChlcSBmb3JjZSB0KSBuaWwpCiAgICAgICAgICAoKHN0cmluZ3AgZm9yY2UpICAgICAgICAg ICAgICA7IGhlbGQKICAgICAgICAgICAodW5sZXNzICh2ZXJzaW9uLWxpc3QtPSB2ZXJzaW9uICh2 ZXJzaW9uLXRvLWxpc3QgZm9yY2UpKQogICAgICAgICAgICAgZm9yY2UpKQogICAgICAgICAgKHQg KGVycm9yICJJbnZhbGlkIGVsZW1lbnQgaW4gYHBhY2thZ2UtbG9hZC1saXN0JyIpKSkpKQoKKGRl ZnVuIHBhY2thZ2UtYnVpbHQtaW4tcCAocGFja2FnZSAmb3B0aW9uYWwgbWluLXZlcnNpb24pCiAg IlJldHVybiBub24tbmlsIGlmIFBBQ0tBR0UgaXMgYnVpbHQtaW4gdG8gRW1hY3MuCk9wdGlvbmFs IGFyZyBNSU4tVkVSU0lPTiwgaWYgbm9uLW5pbCwgc2hvdWxkIGJlIGEgdmVyc2lvbiBsaXN0CnNw ZWNpZnlpbmcgdGhlIG1pbmltdW0gYWNjZXB0YWJsZSB2ZXJzaW9uLiIKICAoaWYgKHBhY2thZ2Ut ZGVzYy1wIHBhY2thZ2UpIDs7IHdhcyBidWlsdC1pbiBhbmQgdGhlbiB3YXMgY29udmVydGVkCiAg ICAgIChlcSAnYnVpbHRpbiAocGFja2FnZS1kZXNjLWRpciBwYWNrYWdlKSkKICAgIChsZXQgKChi aSAoYXNzcSBwYWNrYWdlIHBhY2thZ2UtLWJ1aWx0aW4tdmVyc2lvbnMpKSkKICAgICAgKGNvbmQK ICAgICAgIChiaSAodmVyc2lvbi1saXN0LTw9IG1pbi12ZXJzaW9uIChjZHIgYmkpKSkKICAgICAg ICgocmVtb3ZlIDAgbWluLXZlcnNpb24pIG5pbCkKICAgICAgICh0CiAgICAgICAgKHJlcXVpcmUg J2ZpbmRlci1pbmYgbmlsIHQpIDsgRm9yIGBwYWNrYWdlLS1idWlsdGlucycuCiAgICAgICAgKGFz c3EgcGFja2FnZSBwYWNrYWdlLS1idWlsdGlucykpKSkpKQoKKGRlZnVuIHBhY2thZ2UtLWF1dG9s b2Fkcy1maWxlLW5hbWUgKHBrZy1kZXNjKQogICJSZXR1cm4gdGhlIGFic29sdXRlIG5hbWUgb2Yg dGhlIGF1dG9sb2FkcyBmaWxlLCBzYW5zIGV4dGVuc2lvbi4KUEtHLURFU0MgaXMgYSBgcGFja2Fn ZS1kZXNjJyBvYmplY3QuIgogIChleHBhbmQtZmlsZS1uYW1lCiAgIChmb3JtYXQgIiVzLWF1dG9s b2FkcyIgKHBhY2thZ2UtZGVzYy1uYW1lIHBrZy1kZXNjKSkKICAgKHBhY2thZ2UtZGVzYy1kaXIg cGtnLWRlc2MpKSkKCihkZWZ2YXIgSW5mby1kaXJlY3RvcnktbGlzdCkKKGRlY2xhcmUtZnVuY3Rp b24gaW5mby1pbml0aWFsaXplICJpbmZvIiAoKSkKCihkZWZ2YXIgcGFja2FnZS0tcXVpY2tzdGFy dC1wa2dzIHQKICAiSWYgc2V0IHRvIGEgbGlzdCwgd2UncmUgY29tcHV0aW5nIHRoZSBzZXQgb2Yg cGtncyB0byBhY3RpdmF0ZS4iKQoKKGRlZnN1YnN0IHBhY2thZ2UtLWxpYnJhcnktc3RlbSAoZmls ZSkKICAoY2F0Y2ggJ2RvbmUKICAgIChsZXQgKHJlc3VsdCkKICAgICAgKGRvbGlzdCAoc3VmZml4 IChnZXQtbG9hZC1zdWZmaXhlcykgZmlsZSkKICAgICAgICAoc2V0cSByZXN1bHQgKHN0cmluZy10 cmltIGZpbGUgbmlsIHN1ZmZpeCkpCiAgICAgICAgKHVubGVzcyAoZXF1YWwgZmlsZSByZXN1bHQp CiAgICAgICAgICAodGhyb3cgJ2RvbmUgcmVzdWx0KSkpKSkpCgooZGVmdW4gcGFja2FnZS0tcmVs b2FkLXByZXZpb3VzbHktbG9hZGVkIChwa2ctZGVzYykKICAiRm9yY2UgcmVpbXBvcnRhdGlvbiBv ZiBmaWxlcyBpbiBQS0ctREVTQyBhbHJlYWR5IHByZXNlbnQgaW4gYGxvYWQtaGlzdG9yeScuCk5l dyBlZGl0aW9ucyBvZiBmaWxlcyBjb250YWluIG1hY3JvIGRlZmluaXRpb25zIGFuZApyZWRlZmlu aXRpb25zLCB0aGUgb3Zlcmxvb2tpbmcgb2Ygd2hpY2ggd291bGQgY2F1c2UKYnl0ZS1jb21waWxh dGlvbiBvZiB0aGUgbmV3IHBhY2thZ2UgdG8gZmFpbC4iCiAgKHdpdGgtZGVtb3RlZC1lcnJvcnMg IkVycm9yIGluIHBhY2thZ2UtLWxvYWQtZmlsZXMtZm9yLWFjdGl2YXRpb246ICVzIgogICAgKGxl dCogKHJlc3VsdAogICAgICAgICAgIChkaXIgKHBhY2thZ2UtZGVzYy1kaXIgcGtnLWRlc2MpKQog ICAgICAgICAgIDs7IEEgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gd291bGQgc2tpcCBgZGlyJyBp dHNlbGYuCiAgICAgICAgICAgOzsgSG93ZXZlciwgaW4gbm9ybWFsIHVzZSByZWxvYWRpbmcgZnJv bSB0aGUgc2FtZSBkaXJlY3RvcnkKICAgICAgICAgICA7OyBuZXZlciBoYXBwZW5zIGFueXdheSwg d2hpbGUgaW4gY2VydGFpbiBjYXNlcyBleHRlcm5hbCB0bwogICAgICAgICAgIDs7IEVtYWNzIGEg cGFja2FnZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgbm90IG5lY2Vzc2FyeQogICAgICAgICAgIDs7 IHN0YXlzIGJ5dGUtaWRlbnRpY2FsLCBlLmcuICBkdXJpbmcgZGV2ZWxvcG1lbnQuICBKdXN0CiAg ICAgICAgICAgOzsgZG9uJ3Qgc3BlY2lhbC1jYXNlIGBkaXInLgogICAgICAgICAgIChlZmZlY3Rp dmUtcGF0aCAob3IgKGJvdW5kLWFuZC10cnVlLXAgZmluZC1saWJyYXJ5LXNvdXJjZS1wYXRoKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZC1wYXRoKSkKICAgICAgICAgICAoZmls ZXMgKGRpcmVjdG9yeS1maWxlcy1yZWN1cnNpdmVseSBkaXIgIlxcYFteXFwuXS4qXFwuZWxcXCci KSkKICAgICAgICAgICAoaGlzdG9yeSAobWFwY2FyICMnZmlsZS10cnVlbmFtZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNsLXJlbW92ZS1pZi1ub3QgIydzdHJpbmdwCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwY2FyICMnY2FyIGxvYWQtaGlz dG9yeSkpKSkpCiAgICAgIChkb2xpc3QgKGZpbGUgZmlsZXMpCiAgICAgICAgKHdoZW4tbGV0ICgo bGlicmFyeSAocGFja2FnZS0tbGlicmFyeS1zdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGZpbGUtcmVsYXRpdmUtbmFtZSBmaWxlIGRpcikpKQogICAgICAgICAgICAgICAgICAgKGNh bm9uaWNhbCAobG9jYXRlLWxpYnJhcnkgbGlicmFyeSBuaWwgZWZmZWN0aXZlLXBhdGgpKQogICAg ICAgICAgICAgICAgICAgKHRydWVuYW1lIChmaWxlLXRydWVuYW1lIGNhbm9uaWNhbCkpCiAgICAg ICAgICAgICAgICAgICA7OyBOb3JtYWxseSwgYWxsIGZpbGVzIGluIGEgcGFja2FnZSBhcmUgY29t cGlsZWQgYnkKICAgICAgICAgICAgICAgICAgIDs7IG5vdywgYnV0IGRvbid0IGFzc3VtZSB0aGF0 LiAgRS5nLiBkaWZmZXJlbnQKICAgICAgICAgICAgICAgICAgIDs7IHZlcnNpb25zIGNhbiBhZGQg b3IgcmVtb3ZlIGBuby1ieXRlLWNvbXBpbGUnLgogICAgICAgICAgICAgICAgICAgKGFsdG5hbWUg KGlmIChzdHJpbmctc3VmZml4LXAgIi5lbCIgdHJ1ZW5hbWUpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiXFwuZWxcXCciICIuZWxjIiB0cnVlbmFtZSB0KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiXFwuZWxjXFwnIiAiLmVsIiB0cnVlbmFtZSB0KSkpCiAgICAgICAg ICAgICAgICAgICAoZm91bmQgKG9yIChtZW1iZXIgdHJ1ZW5hbWUgaGlzdG9yeSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGFuZCAobm90IChzdHJpbmc9IGFsdG5hbWUgdHJ1ZW5hbWUp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZW1iZXIgYWx0bmFtZSBoaXN0 b3J5KSkpKQogICAgICAgICAgICAgICAgICAgKHJlY2VudC1pbmRleCAobGVuZ3RoIGZvdW5kKSkp CiAgICAgICAgICAodW5sZXNzIChlcXVhbCAoZmlsZS1uYW1lLWJhc2UgbGlicmFyeSkKICAgICAg ICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIiVzLWF1dG9sb2FkcyIgKHBhY2thZ2UtZGVzYy1u YW1lIHBrZy1kZXNjKSkpCiAgICAgICAgICAgIChwdXNoIChjb25zIChleHBhbmQtZmlsZS1uYW1l IGxpYnJhcnkgZGlyKSByZWNlbnQtaW5kZXgpIHJlc3VsdCkpKSkKICAgICAgKG1hcGMgKGxhbWJk YSAoYykgKGxvYWQgKGNhciBjKSBuaWwgdCkpCiAgICAgICAgICAgIChzb3J0IHJlc3VsdCAobGFt YmRhICh4IHkpICg8IChjZHIgeCkgKGNkciB5KSkpKSkpKSkKCihkZWZ1biBwYWNrYWdlLWFjdGl2 YXRlLTEgKHBrZy1kZXNjICZvcHRpb25hbCByZWxvYWQgZGVwcykKICAiQWN0aXZhdGUgcGFja2Fn ZSBnaXZlbiBieSBQS0ctREVTQywgZXZlbiBpZiBpdCB3YXMgYWxyZWFkeSBhY3RpdmUuCklmIERF UFMgaXMgbm9uLW5pbCwgYWxzbyBhY3RpdmF0ZSBpdHMgZGVwZW5kZW5jaWVzICh1bmxlc3MgdGhl eQphcmUgYWxyZWFkeSBhY3RpdmF0ZWQpLgpJZiBSRUxPQUQgaXMgbm9uLW5pbCwgYWxzbyBgbG9h ZCcgYW55IGZpbGVzIGluc2lkZSB0aGUgcGFja2FnZSB3aGljaApjb3JyZXNwb25kIHRvIHByZXZp b3VzbHkgbG9hZGVkIGZpbGVzLiIKICAobGV0KiAoKG5hbWUgKHBhY2thZ2UtZGVzYy1uYW1lIHBr Zy1kZXNjKSkKICAgICAgICAgKHBrZy1kaXIgKHBhY2thZ2UtZGVzYy1kaXIgcGtnLWRlc2MpKSkK ICAgICh1bmxlc3MgcGtnLWRpcgogICAgICAoZXJyb3IgIkludGVybmFsIGVycm9yOiB1bmFibGUg dG8gZmluZCBkaXJlY3RvcnkgZm9yIGAlcyciCiAgICAgICAgICAgICAocGFja2FnZS1kZXNjLWZ1 bGwtbmFtZSBwa2ctZGVzYykpKQogICAgKGNhdGNoICdleGl0CiAgICAgIDs7IEFjdGl2YXRlIGl0 cyBkZXBlbmRlbmNpZXMgcmVjdXJzaXZlbHkuCiAgICAgIDs7IEZJWE1FOiBUaGlzIGRvZXNuJ3Qg Y2hlY2sgd2hldGhlciB0aGUgYWN0aXZhdGVkIHZlcnNpb24gaXMgdGhlCiAgICAgIDs7IHJlcXVp cmVkIHZlcnNpb24uCiAgICAgICh3aGVuIGRlcHMKICAgICAgICAoZG9saXN0IChyZXEgKHBhY2th Z2UtZGVzYy1yZXFzIHBrZy1kZXNjKSkKICAgICAgICAgICh1bmxlc3MgKHBhY2thZ2UtYWN0aXZh dGUgKGNhciByZXEpKQogICAgICAgICAgICAobWVzc2FnZSAiVW5hYmxlIHRvIGFjdGl2YXRlIHBh Y2thZ2UgYCVzJy5cblJlcXVpcmVkIHBhY2thZ2UgYCVzLSVzJyBpcyB1bmF2YWlsYWJsZSIKICAg ICAgICAgICAgICAgICAgICAgbmFtZSAoY2FyIHJlcSkgKHBhY2thZ2UtdmVyc2lvbi1qb2luIChj YWRyIHJlcSkpKQogICAgICAgICAgICAodGhyb3cgJ2V4aXQgbmlsKSkpKQogICAgICAoaWYgKGxp c3RwIHBhY2thZ2UtLXF1aWNrc3RhcnQtcGtncykKICAgICAgICAgIDs7IFdlJ3JlIG9ubHkgY29s bGVjdGluZyB0aGUgc2V0IG9mIHBhY2thZ2VzIHRvIGFjdGl2YXRlIQogICAgICAgICAgKHB1c2gg cGtnLWRlc2MgcGFja2FnZS0tcXVpY2tzdGFydC1wa2dzKQogICAgICAgICh3aGVuIHJlbG9hZAog ICAgICAgICAgKHBhY2thZ2UtLXJlbG9hZC1wcmV2aW91c2x5LWxvYWRlZCBwa2ctZGVzYykpCiAg ICAgICAgKHdpdGgtZGVtb3RlZC1lcnJvcnMgIkVycm9yIGxvYWRpbmcgYXV0b2xvYWRzOiAlcyIK ICAgICAgICAgIChsb2FkIChwYWNrYWdlLS1hdXRvbG9hZHMtZmlsZS1uYW1lIHBrZy1kZXNjKSBu aWwgdCkpCiAgICAgICAgKGFkZC10by1saXN0ICdsb2FkLXBhdGggKGRpcmVjdG9yeS1maWxlLW5h bWUgcGtnLWRpcikpKQogICAgICA7OyBBZGQgaW5mbyBub2RlLgogICAgICAod2hlbiAoZmlsZS1l eGlzdHMtcCAoZXhwYW5kLWZpbGUtbmFtZSAiZGlyIiBwa2ctZGlyKSkKICAgICAgICA7OyBGSVhN RTogbm90IHRoZSBmcmllbmRsaWVzdCwgYnV0IHNpbXBsZS4KICAgICAgICAocmVxdWlyZSAnaW5m bykKICAgICAgICAoaW5mby1pbml0aWFsaXplKQogICAgICAgIChhZGQtdG8tbGlzdCAnSW5mby1k aXJlY3RvcnktbGlzdCBwa2ctZGlyKSkKICAgICAgKHB1c2ggbmFtZSBwYWNrYWdlLWFjdGl2YXRl ZC1saXN0KQogICAgICA7OyBEb24ndCByZXR1cm4gbmlsLgogICAgICB0KSkpCgo7Ozs7IGBwYWNr YWdlLWFjdGl2YXRlJwoKKGRlZnVuIHBhY2thZ2UtLWdldC1hY3RpdmF0YWJsZS1wa2cgKHBrZy1u YW1lKQogIDs7IElzICJhY3RpdmF0YWJsZSIgYSB3b3JkPwogIChsZXQgKChwa2ctZGVzY3MgKHNv cnQgKGNkciAoYXNzcSBwa2ctbmFtZSBwYWNrYWdlLWFsaXN0KSkKICAgICAgICAgICAgICAgICAg ICAgICAgIChsYW1iZGEgKHAxIHAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgo djEgKHBhY2thZ2UtZGVzYy12ZXJzaW9uIHAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHYyIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBwMikpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBQcmVmZXIgVkMg cGFja2FnZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLXZjLXAgcDEp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLXZjLXAgcDIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDs7IFByZWZlciBidWlsdGluIHBhY2thZ2VzLgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1kaXNhYmxlZC1wIHAxIHYxKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobm90IChwYWNrYWdlLWRpc2FibGVkLXAgcDIgdjIpKSkp KSkpKQogICAgOzsgQ2hlY2sgaWYgUEFDS0FHRSBpcyBhdmFpbGFibGUgaW4gYHBhY2thZ2UtYWxp c3QnLgogICAgKHdoaWxlCiAgICAgICAgKHdoZW4gcGtnLWRlc2NzCiAgICAgICAgICAobGV0ICgo YXZhaWxhYmxlLXZlcnNpb24gKHBhY2thZ2UtZGVzYy12ZXJzaW9uIChjYXIgcGtnLWRlc2NzKSkp KQogICAgICAgICAgICAocGFja2FnZS1kaXNhYmxlZC1wIHBrZy1uYW1lIGF2YWlsYWJsZS12ZXJz aW9uKSkpCiAgICAgIChzZXRxIHBrZy1kZXNjcyAoY2RyIHBrZy1kZXNjcykpKQogICAgKGNhciBw a2ctZGVzY3MpKSkKCjs7IFRoaXMgZnVuY3Rpb24gYWN0aXZhdGVzIGEgbmV3ZXIgdmVyc2lvbiBv ZiBhIHBhY2thZ2UgaWYgYW4gb2xkZXIKOzsgb25lIHdhcyBhbHJlYWR5IGFjdGl2YXRlZC4gIEl0 IGFsc28gbG9hZHMgYSBmZWF0dXJlcyBvZiB0aGlzCjs7IHBhY2thZ2Ugd2hpY2ggd2VyZSBhbHJl YWR5IGxvYWRlZC4KKGRlZnVuIHBhY2thZ2UtYWN0aXZhdGUgKHBhY2thZ2UgJm9wdGlvbmFsIGZv cmNlKQogICJBY3RpdmF0ZSB0aGUgcGFja2FnZSBuYW1lZCBQQUNLQUdFLgpJZiBGT1JDRSBpcyB0 cnVlLCAocmUtKWFjdGl2YXRlIGl0IGlmIGl0J3MgYWxyZWFkeSBhY3RpdmF0ZWQuCk5ld2VyIHZl cnNpb25zIGFyZSBhbHdheXMgYWN0aXZhdGVkLCByZWdhcmRsZXNzIG9mIEZPUkNFLiIKICAobGV0 ICgocGtnLWRlc2MgKHBhY2thZ2UtLWdldC1hY3RpdmF0YWJsZS1wa2cgcGFja2FnZSkpKQogICAg KGNvbmQKICAgICA7OyBJZiBubyBzdWNoIHBhY2thZ2UgaXMgZm91bmQsIG1heWJlIGl0J3MgYnVp bHQtaW4uCiAgICAgKChudWxsIHBrZy1kZXNjKQogICAgICAocGFja2FnZS1idWlsdC1pbi1wIHBh Y2thZ2UpKQogICAgIDs7IElmIHRoZSBwYWNrYWdlIGlzIGFscmVhZHkgYWN0aXZhdGVkLCBqdXN0 IHJldHVybiB0LgogICAgICgoYW5kIChtZW1xIHBhY2thZ2UgcGFja2FnZS1hY3RpdmF0ZWQtbGlz dCkgKG5vdCBmb3JjZSkpCiAgICAgIHQpCiAgICAgOzsgT3RoZXJ3aXNlLCBwcm9jZWVkIHdpdGgg YWN0aXZhdGlvbi4KICAgICAodCAocGFja2FnZS1hY3RpdmF0ZS0xIHBrZy1kZXNjIG5pbCAnZGVw cykpKSkpCgoMCjs7OyBJbnN0YWxsYXRpb24gLS0gTG9jYWwgb3BlcmF0aW9ucwo7OyBUaGlzIHNl Y3Rpb24gY29udGFpbnMgYSB2YXJpZXR5IG9mIGZlYXR1cmVzIHJlZ2FyZGluZyBpbnN0YWxsaW5n IGEKOzsgcGFja2FnZSB0by9mcm9tIGRpc2suICBUaGlzIGluY2x1ZGVzIGF1dG9sb2FkIGdlbmVy YXRpb24sCjs7IHVucGFja2luZywgY29tcGlsaW5nLCBhcyB3ZWxsIGFzIGRlZmluaW5nIGEgcGFj a2FnZSBmcm9tIHRoZQo7OyBjdXJyZW50IGJ1ZmZlci4KCjs7OzsgVW5wYWNraW5nCihkZWZ2YXIg dGFyLXBhcnNlLWluZm8pCihkZWNsYXJlLWZ1bmN0aW9uIHRhci11bnRhci1idWZmZXIgInRhci1t b2RlIiAoKSkKKGRlY2xhcmUtZnVuY3Rpb24gdGFyLWhlYWRlci1uYW1lICJ0YXItbW9kZSIgKHRh ci1oZWFkZXIpIHQpCihkZWNsYXJlLWZ1bmN0aW9uIHRhci1oZWFkZXItbGluay10eXBlICJ0YXIt bW9kZSIgKHRhci1oZWFkZXIpIHQpCgooZGVmdW4gcGFja2FnZS11bnRhci1idWZmZXIgKGRpcikK ICAiVW50YXIgdGhlIGN1cnJlbnQgYnVmZmVyLgpUaGlzIHVzZXMgYHRhci11bnRhci1idWZmZXIn IGZyb20gVGFyIG1vZGUuICBBbGwgZmlsZXMgc2hvdWxkCnVudGFyIGludG8gYSBkaXJlY3Rvcnkg bmFtZWQgRElSOyBvdGhlcndpc2UsIHNpZ25hbCBhbiBlcnJvci4iCiAgKHRhci1tb2RlKQogIDs7 IE1ha2Ugc3VyZSBldmVyeXRoaW5nIGV4dHJhY3RzIGludG8gRElSLgogIChsZXQgKChyZWdleHAg KGNvbmNhdCAiXFxgIiAocmVnZXhwLXF1b3RlIChleHBhbmQtZmlsZS1uYW1lIGRpcikpICIvIikp CiAgICAgICAgKGNhc2UtZm9sZC1zZWFyY2ggKGZpbGUtbmFtZS1jYXNlLWluc2Vuc2l0aXZlLXAg ZGlyKSkpCiAgICAoZG9saXN0ICh0YXItZGF0YSB0YXItcGFyc2UtaW5mbykKICAgICAgKGxldCAo KG5hbWUgKGV4cGFuZC1maWxlLW5hbWUgKHRhci1oZWFkZXItbmFtZSB0YXItZGF0YSkpKSkKICAg ICAgICAob3IgKHN0cmluZy1tYXRjaCByZWdleHAgbmFtZSkKICAgICAgICAgICAgOzsgVGFyYmFs bHMgY3JlYXRlZCBieSBzb21lIHV0aWxpdGllcyBkb24ndCBsaXN0CiAgICAgICAgICAgIDs7IGRp cmVjdG9yaWVzIHdpdGggYSB0cmFpbGluZyBzbGFzaCAoQnVnIzEzMTM2KS4KICAgICAgICAgICAg KGFuZCAoc3RyaW5nLWVxdWFsIChleHBhbmQtZmlsZS1uYW1lIGRpcikgbmFtZSkKICAgICAgICAg ICAgICAgICAoZXEgKHRhci1oZWFkZXItbGluay10eXBlIHRhci1kYXRhKSA1KSkKICAgICAgICAg ICAgKGVycm9yICJQYWNrYWdlIGRvZXMgbm90IHVudGFyIGNsZWFubHkgaW50byBkaXJlY3Rvcnkg JXMvIiBkaXIpKSkpKQogICh0YXItdW50YXItYnVmZmVyKSkKCihkZWZ1biBwYWNrYWdlLS1hbGlz dC10by1wbGlzdC1hcmdzIChhbGlzdCkKICAobWFwY2FyICMnbWFjcm9leHAtcXVvdGUKICAgICAg ICAgIChhcHBseSAjJ25jb25jCiAgICAgICAgICAgICAgICAgKG1hcGNhciAobGFtYmRhIChwYWly KSAobGlzdCAoY2FyIHBhaXIpIChjZHIgcGFpcikpKSBhbGlzdCkpKSkKCihkZWZ1biBwYWNrYWdl LXVucGFjayAocGtnLWRlc2MpCiAgIkluc3RhbGwgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50 IGJ1ZmZlciBhcyBhIHBhY2thZ2UuIgogIChsZXQqICgobmFtZSAocGFja2FnZS1kZXNjLW5hbWUg cGtnLWRlc2MpKQogICAgICAgICAoZGlybmFtZSAocGFja2FnZS1kZXNjLWZ1bGwtbmFtZSBwa2ct ZGVzYykpCiAgICAgICAgIChwa2ctZGlyIChleHBhbmQtZmlsZS1uYW1lIGRpcm5hbWUgcGFja2Fn ZS11c2VyLWRpcikpKQogICAgKHBjYXNlIChwYWNrYWdlLWRlc2Mta2luZCBwa2ctZGVzYykKICAg ICAgKCdkaXIKICAgICAgIChtYWtlLWRpcmVjdG9yeSBwa2ctZGlyIHQpCiAgICAgICAobGV0ICgo ZmlsZS1saXN0CiAgICAgICAgICAgICAgKGRpcmVjdG9yeS1maWxlcwogICAgICAgICAgICAgICBk ZWZhdWx0LWRpcmVjdG9yeSAnZnVsbCAiXFxgW14uXS4qXFwuZWxcXCciICdub3NvcnQpKSkKICAg ICAgICAgKGRvbGlzdCAoc291cmNlLWZpbGUgZmlsZS1saXN0KQogICAgICAgICAgIChsZXQgKCh0 YXJnZXQtZWwtZmlsZQogICAgICAgICAgICAgICAgICAoZXhwYW5kLWZpbGUtbmFtZSAoZmlsZS1u YW1lLW5vbmRpcmVjdG9yeSBzb3VyY2UtZmlsZSkgcGtnLWRpcikpKQogICAgICAgICAgICAgKGNv cHktZmlsZSBzb3VyY2UtZmlsZSB0YXJnZXQtZWwtZmlsZSB0KSkpCiAgICAgICAgIDs7IE5vdyB0 aGF0IHRoZSBmaWxlcyBoYXZlIGJlZW4gaW5zdGFsbGVkLCB0aGlzIHBhY2thZ2UgaXMKICAgICAg ICAgOzsgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhIGB0YXInIG9yIGEgYHNpbmdsZScuIExldCdz IG1ha2UKICAgICAgICAgOzsgdGhpbmdzIHNpbXBsZSBieSBlbnN1cmluZyB3ZSdyZSBvbmUgb2Yg dGhlbS4KICAgICAgICAgKHNldGYgKHBhY2thZ2UtZGVzYy1raW5kIHBrZy1kZXNjKQogICAgICAg ICAgICAgICAoaWYgKGxlbmd0aD4gZmlsZS1saXN0IDEpICd0YXIgJ3NpbmdsZSkpKSkKICAgICAg KCd0YXIKICAgICAgIChtYWtlLWRpcmVjdG9yeSBwYWNrYWdlLXVzZXItZGlyIHQpCiAgICAgICAo bGV0KiAoKGRlZmF1bHQtZGlyZWN0b3J5IChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IHBhY2thZ2Ut dXNlci1kaXIpKSkKICAgICAgICAgKHBhY2thZ2UtdW50YXItYnVmZmVyIGRpcm5hbWUpKSkKICAg ICAgKCdzaW5nbGUKICAgICAgIChsZXQgKChlbC1maWxlIChleHBhbmQtZmlsZS1uYW1lIChmb3Jt YXQgIiVzLmVsIiBuYW1lKSBwa2ctZGlyKSkpCiAgICAgICAgIChtYWtlLWRpcmVjdG9yeSBwa2ct ZGlyIHQpCiAgICAgICAgIChwYWNrYWdlLS13cml0ZS1maWxlLW5vLWNvZGluZyBlbC1maWxlKSkp CiAgICAgIChraW5kIChlcnJvciAiVW5rbm93biBwYWNrYWdlIGtpbmQ6ICVTIiBraW5kKSkpCiAg ICAocGFja2FnZS0tbWFrZS1hdXRvbG9hZHMtYW5kLXN0dWZmIHBrZy1kZXNjIHBrZy1kaXIpCiAg ICA7OyBVcGRhdGUgcGFja2FnZS1hbGlzdC4KICAgIChsZXQgKChuZXctZGVzYyAocGFja2FnZS1s b2FkLWRlc2NyaXB0b3IgcGtnLWRpcikpKQogICAgICAodW5sZXNzIChlcXVhbCAocGFja2FnZS1k ZXNjLWZ1bGwtbmFtZSBuZXctZGVzYykKICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVz Yy1mdWxsLW5hbWUgcGtnLWRlc2MpKQogICAgICAgIChlcnJvciAiVGhlIHJldHJpZXZlZCBwYWNr YWdlIChgJXMnKSBkb2Vzbid0IG1hdGNoIHdoYXQgdGhlIGFyY2hpdmUgb2ZmZXJlZCAoYCVzJyki CiAgICAgICAgICAgICAgIChwYWNrYWdlLWRlc2MtZnVsbC1uYW1lIG5ldy1kZXNjKSAocGFja2Fn ZS1kZXNjLWZ1bGwtbmFtZSBwa2ctZGVzYykpKQogICAgICA7OyBBY3RpdmF0aW9uIGhhcyB0byBi ZSBkb25lIGJlZm9yZSBjb21waWxhdGlvbiwgc28gdGhhdCBpZiB3ZSdyZQogICAgICA7OyB1cGdy YWRpbmcgYW5kIG1hY3JvcyBoYXZlIGNoYW5nZWQgd2UgbG9hZCB0aGUgbmV3IGRlZmluaXRpb25z CiAgICAgIDs7IGJlZm9yZSBjb21waWxpbmcuCiAgICAgICh3aGVuIChwYWNrYWdlLWFjdGl2YXRl LTEgbmV3LWRlc2MgOnJlbG9hZCA6ZGVwcykKICAgICAgICA7OyBGSVhNRTogQ29tcGlsYXRpb24g c2hvdWxkIGJlIGRvbmUgYXMgYSBzZXBhcmF0ZSwgb3B0aW9uYWwsIHN0ZXAuCiAgICAgICAgOzsg RS5nLiBmb3IgbXVsdGktcGFja2FnZSBpbnN0YWxscywgd2Ugc2hvdWxkIGZpcnN0IGluc3RhbGwg YWxsIHBhY2thZ2VzCiAgICAgICAgOzsgYW5kIHRoZW4gY29tcGlsZSB0aGVtLgogICAgICAgIChw YWNrYWdlLS1jb21waWxlIG5ldy1kZXNjKQogICAgICAgICh3aGVuIHBhY2thZ2UtbmF0aXZlLWNv bXBpbGUKICAgICAgICAgIChwYWNrYWdlLS1uYXRpdmUtY29tcGlsZS1hc3luYyBuZXctZGVzYykp CiAgICAgICAgOzsgQWZ0ZXIgY29tcGlsYXRpb24sIGxvYWQgYWdhaW4gYW55IGZpbGVzIGxvYWRl ZCBieQogICAgICAgIDs7IGBhY3RpdmF0ZS0xJywgc28gdGhhdCB3ZSB1c2UgdGhlIGJ5dGUtY29t cGlsZWQgZGVmaW5pdGlvbnMuCiAgICAgICAgKHBhY2thZ2UtLXJlbG9hZC1wcmV2aW91c2x5LWxv YWRlZCBuZXctZGVzYykpKQogICAgcGtnLWRpcikpCgooZGVmdW4gcGFja2FnZS1nZW5lcmF0ZS1k ZXNjcmlwdGlvbi1maWxlIChwa2ctZGVzYyBwa2ctZmlsZSkKICAiQ3JlYXRlIHRoZSBmb28tcGtn LmVsIGZpbGUgUEtHLUZJTEUgZm9yIHNpbmdsZS1maWxlIHBhY2thZ2UgUEtHLURFU0MuIgogIChs ZXQqICgobmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKSkKICAgIChsZXQgKChwcmlu dC1sZXZlbCBuaWwpCiAgICAgICAgICAocHJpbnQtcXVvdGVkIHQpCiAgICAgICAgICAocHJpbnQt bGVuZ3RoIG5pbCkpCiAgICAgICh3cml0ZS1yZWdpb24KICAgICAgIChjb25jYXQKICAgICAgICAi Ozs7IEdlbmVyYXRlZCBwYWNrYWdlIGRlc2NyaXB0aW9uIGZyb20gIgogICAgICAgIChyZXBsYWNl LXJlZ2V4cC1pbi1zdHJpbmcgIi1wa2dcXC5lbFxcJyIgIi5lbCIKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IHBrZy1maWxlKSkKICAgICAg ICAiICAtKi0gbm8tYnl0ZS1jb21waWxlOiB0IC0qLVxuIgogICAgICAgIChwcmluMS10by1zdHJp bmcKICAgICAgICAgKG5jb25jCiAgICAgICAgICAobGlzdCAnZGVmaW5lLXBhY2thZ2UKICAgICAg ICAgICAgICAgIChzeW1ib2wtbmFtZSBuYW1lKQogICAgICAgICAgICAgICAgKHBhY2thZ2UtdmVy c2lvbi1qb2luIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBwa2ctZGVzYykpCiAgICAgICAgICAgICAg ICAocGFja2FnZS1kZXNjLXN1bW1hcnkgcGtnLWRlc2MpCiAgICAgICAgICAgICAgICAobGV0ICgo cmVxdWlyZXMgKHBhY2thZ2UtZGVzYy1yZXFzIHBrZy1kZXNjKSkpCiAgICAgICAgICAgICAgICAg IChsaXN0ICdxdW90ZQogICAgICAgICAgICAgICAgICAgICAgICA7OyBUdXJuIHZlcnNpb24gbGlz dHMgaW50byBzdHJpbmcgZm9ybS4KICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhcgogICAg ICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZWx0KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAobGlzdCAoY2FyIGVsdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBh Y2thZ2UtdmVyc2lvbi1qb2luIChjYWRyIGVsdCkpKSkKICAgICAgICAgICAgICAgICAgICAgICAg IHJlcXVpcmVzKSkpKQogICAgICAgICAgKHBhY2thZ2UtLWFsaXN0LXRvLXBsaXN0LWFyZ3MKICAg ICAgICAgICAocGFja2FnZS1kZXNjLWV4dHJhcyBwa2ctZGVzYykpKSkKICAgICAgICAiXG4iKQog ICAgICAgbmlsIHBrZy1maWxlIG5pbCAnc2lsZW50KSkpKQoKCjs7OzsgQXV0b2xvYWQKKGRlY2xh cmUtZnVuY3Rpb24gYXV0b2xvYWQtcnVicmljICJhdXRvbG9hZCIgKGZpbGUgJm9wdGlvbmFsIHR5 cGUgZmVhdHVyZSkpCgooZGVmdW4gcGFja2FnZS1hdXRvbG9hZC1lbnN1cmUtZGVmYXVsdC1maWxl IChmaWxlKQogICJNYWtlIHN1cmUgdGhhdCB0aGUgYXV0b2xvYWQgZmlsZSBGSUxFIGV4aXN0cyBh bmQgaWYgbm90IGNyZWF0ZSBpdC4iCiAgKGRlY2xhcmUgKG9ic29sZXRlIG5pbCAiMjkuMSIpKQog ICh1bmxlc3MgKGZpbGUtZXhpc3RzLXAgZmlsZSkKICAgIChyZXF1aXJlICdhdXRvbG9hZCkKICAg IChsZXQgKChjb2Rpbmctc3lzdGVtLWZvci13cml0ZSAndXRmLTgtZW1hY3MtdW5peCkpCiAgICAg ICh3aXRoLXN1cHByZXNzZWQtd2FybmluZ3MgKChvYnNvbGV0ZSBhdXRvbG9hZC1ydWJyaWMpKQog ICAgICAgICh3cml0ZS1yZWdpb24gKGF1dG9sb2FkLXJ1YnJpYyBmaWxlICJwYWNrYWdlIiBuaWwp CiAgICAgICAgICAgICAgICAgICAgICBuaWwgZmlsZSBuaWwgJ3NpbGVudCkpKSkKICBmaWxlKQoK KGRlZnZhciBhdXRvbG9hZC10aW1lc3RhbXBzKQooZGVmdmFyIHZlcnNpb24tY29udHJvbCkKCihk ZWZ1biBwYWNrYWdlLWdlbmVyYXRlLWF1dG9sb2FkcyAobmFtZSBwa2ctZGlyKQogICJHZW5lcmF0 ZSBhdXRvbG9hZHMgaW4gUEtHLURJUiBmb3IgcGFja2FnZSBuYW1lZCBOQU1FLiIKICAobGV0KiAo KGF1dG8tbmFtZSAoZm9ybWF0ICIlcy1hdXRvbG9hZHMuZWwiIG5hbWUpKQogICAgICAgICA7Oyhp Z25vcmUtbmFtZSAoY29uY2F0IG5hbWUgIi1wa2cuZWwiKSkKICAgICAgICAgKG91dHB1dC1maWxl IChleHBhbmQtZmlsZS1uYW1lIGF1dG8tbmFtZSBwa2ctZGlyKSkKICAgICAgICAgOzsgV2UgZG9u J3QgbmVlZCAnZW0sIGFuZCB0aGlzIG1ha2VzIHRoZSBvdXRwdXQgcmVwcm9kdWNpYmxlLgogICAg ICAgICAoYXV0b2xvYWQtdGltZXN0YW1wcyBuaWwpCiAgICAgICAgIChiYWNrdXAtaW5oaWJpdGVk IHQpCiAgICAgICAgICh2ZXJzaW9uLWNvbnRyb2wgJ25ldmVyKSkKICAgIChsb2FkZGVmcy1nZW5l cmF0ZQogICAgIHBrZy1kaXIgb3V0cHV0LWZpbGUgbmlsCiAgICAgKHByaW4xLXRvLXN0cmluZwog ICAgICAnKGFkZC10by1saXN0CiAgICAgICAgJ2xvYWQtcGF0aAogICAgICAgIDs7IEFkZCB0aGUg ZGlyZWN0b3J5IHRoYXQgd2lsbCBjb250YWluIHRoZSBhdXRvbG9hZCBmaWxlIHRvCiAgICAgICAg OzsgdGhlIGxvYWQgcGF0aC4gIFdlIGRvbid0IGhhcmQtY29kZSBgcGtnLWRpcicsIHRvIGF2b2lk CiAgICAgICAgOzsgaXNzdWVzIGlmIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSBpcyBtb3ZlZCBhcm91 bmQuCiAgICAgICAgKG9yIChhbmQgbG9hZC1maWxlLW5hbWUgKGZpbGUtbmFtZS1kaXJlY3Rvcnkg bG9hZC1maWxlLW5hbWUpKQogICAgICAgICAgICAoY2FyIGxvYWQtcGF0aCkpKSkpCiAgICAobGV0 ICgoYnVmIChmaW5kLWJ1ZmZlci12aXNpdGluZyBvdXRwdXQtZmlsZSkpKQogICAgICAod2hlbiBi dWYgKGtpbGwtYnVmZmVyIGJ1ZikpKQogICAgYXV0by1uYW1lKSkKCihkZWZ1biBwYWNrYWdlLS1t YWtlLWF1dG9sb2Fkcy1hbmQtc3R1ZmYgKHBrZy1kZXNjIHBrZy1kaXIpCiAgIkdlbmVyYXRlIGF1 dG9sb2FkcywgZGVzY3JpcHRpb24gZmlsZSwgZXRjLiwgZm9yIFBLRy1ERVNDIGluc3RhbGxlZCBh dCBQS0ctRElSLiIKICAocGFja2FnZS1nZW5lcmF0ZS1hdXRvbG9hZHMgKHBhY2thZ2UtZGVzYy1u YW1lIHBrZy1kZXNjKSBwa2ctZGlyKQogIChsZXQgKChkZXNjLWZpbGUgKGV4cGFuZC1maWxlLW5h bWUgKHBhY2thZ2UtLWRlc2NyaXB0aW9uLWZpbGUgcGtnLWRpcikKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBrZy1kaXIpKSkKICAgICh1bmxlc3MgKGZpbGUtZXhpc3RzLXAg ZGVzYy1maWxlKQogICAgICAocGFja2FnZS1nZW5lcmF0ZS1kZXNjcmlwdGlvbi1maWxlIHBrZy1k ZXNjIGRlc2MtZmlsZSkpKQogIDs7IEZJWE1FOiBDcmVhdGUgZm9vLmluZm8gYW5kIGRpciBmaWxl IGZyb20gZm9vLnRleGk/CiAgKQoKOzs7OyBDb21waWxhdGlvbgooZGVmdmFyIHdhcm5pbmctbWlu aW11bS1sZXZlbCkKKGRlZnZhciBieXRlLWNvbXBpbGUtaWdub3JlLWZpbGVzKQooZGVmdW4gcGFj a2FnZS0tY29tcGlsZSAocGtnLWRlc2MpCiAgIkJ5dGUtY29tcGlsZSBpbnN0YWxsZWQgcGFja2Fn ZSBQS0ctREVTQy4KVGhpcyBhc3N1bWVzIHRoYXQgYHBrZy1kZXNjJyBoYXMgYWxyZWFkeSBiZWVu IGFjdGl2YXRlZCB3aXRoCmBwYWNrYWdlLWFjdGl2YXRlLTEnLiIKICAobGV0ICgoYnl0ZS1jb21w aWxlLWlnbm9yZS1maWxlcyAocGFja2FnZS0tcGFyc2UtZWxwYWlnbm9yZSBwa2ctZGVzYykpCiAg ICAgICAgKHdhcm5pbmctbWluaW11bS1sZXZlbCA6ZXJyb3IpCiAgICAgICAgKGxvYWQtcGF0aCBs b2FkLXBhdGgpKQogICAgKGJ5dGUtcmVjb21waWxlLWRpcmVjdG9yeSAocGFja2FnZS1kZXNjLWRp ciBwa2ctZGVzYykgMCB0KSkpCgooZGVmdW4gcGFja2FnZS0tbmF0aXZlLWNvbXBpbGUtYXN5bmMg KHBrZy1kZXNjKQogICJOYXRpdmUgY29tcGlsZSBpbnN0YWxsZWQgcGFja2FnZSBQS0ctREVTQyBh c3luY2hyb25vdXNseS4KVGhpcyBhc3N1bWVzIHRoYXQgYHBrZy1kZXNjJyBoYXMgYWxyZWFkeSBi ZWVuIGFjdGl2YXRlZCB3aXRoCmBwYWNrYWdlLWFjdGl2YXRlLTEnLiIKICAod2hlbiAoYW5kIChm Ym91bmRwICduYXRpdmUtY29tcC1hdmFpbGFibGUtcCkKICAgICAgICAgICAgIChuYXRpdmUtY29t cC1hdmFpbGFibGUtcCkpCiAgICAobGV0ICgod2FybmluZy1taW5pbXVtLWxldmVsIDplcnJvcikp CiAgICAgIChuYXRpdmUtY29tcGlsZS1hc3luYyAocGFja2FnZS1kZXNjLWRpciBwa2ctZGVzYykg dCkpKSkKCjs7OzsgSW5mZXJyaW5nIHBhY2thZ2UgZnJvbSBjdXJyZW50IGJ1ZmZlcgooZGVmdW4g cGFja2FnZS1yZWFkLWZyb20tc3RyaW5nIChzdHIpCiAgIlJlYWQgYSBMaXNwIGV4cHJlc3Npb24g ZnJvbSBTVFIuClNpZ25hbCBhbiBlcnJvciBpZiB0aGUgZW50aXJlIHN0cmluZyB3YXMgbm90IHVz ZWQuIgogIChwY2FzZS1sZXQgKChgKCxleHByIC4gLG9mZnNldCkgKHJlYWQtZnJvbS1zdHJpbmcg c3RyKSkpCiAgICAoY29uZGl0aW9uLWNhc2UgKCkKICAgICAgICA7OyBUaGUgY2FsbCB0byBgaWdu b3JlJyBzdXBwcmVzc2VzIGEgY29tcGlsZXIgd2FybmluZy4KICAgICAgICAocHJvZ24gKGlnbm9y ZSAocmVhZC1mcm9tLXN0cmluZyBzdHIgb2Zmc2V0KSkKICAgICAgICAgICAgICAgKGVycm9yICJD YW4ndCByZWFkIHdob2xlIHN0cmluZyIpKQogICAgICAoZW5kLW9mLWZpbGUgZXhwcikpKSkKCihk ZWZ1biBwYWNrYWdlLS1wcmVwYXJlLWRlcGVuZGVuY2llcyAoZGVwcykKICAiVHVybiBERVBTIGlu dG8gYW4gYWNjZXB0YWJsZSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KCkFueSBwYXJ0cyBtaXNzaW5n IGEgdmVyc2lvbiBzdHJpbmcgZ2V0IGEgZGVmYXVsdCB2ZXJzaW9uIHN0cmluZwpvZiBcIjBcIiAo bWVhbmluZyBhbnkgdmVyc2lvbikgYW5kIGFuIGFwcHJvcHJpYXRlIGxldmVsIG9mIGxpc3RzCmlz IHdyYXBwZWQgYXJvdW5kIGFueSBwYXJ0cyByZXF1aXJpbmcgaXQuIgogIChjb25kCiAgICgobm90 IChsaXN0cCBkZXBzKSkKICAgIChlcnJvciAiSW52YWxpZCByZXF1aXJlbWVudCBzcGVjaWZpZXI6 ICVTIiBkZXBzKSkKICAgKHQgKG1hcGNhciAobGFtYmRhIChkZXApCiAgICAgICAgICAgICAgICAo Y29uZAogICAgICAgICAgICAgICAgICgoc3ltYm9scCBkZXApIGAoLGRlcCAiMCIpKQogICAgICAg ICAgICAgICAgICgoc3RyaW5ncCBkZXApCiAgICAgICAgICAgICAgICAgIChlcnJvciAiSW52YWxp ZCByZXF1aXJlbWVudCBzcGVjaWZpZXI6ICVTIiBkZXApKQogICAgICAgICAgICAgICAgICgoYW5k IChsaXN0cCBkZXApIChudWxsIChjZHIgZGVwKSkpCiAgICAgICAgICAgICAgICAgIChsaXN0IChj YXIgZGVwKSAiMCIpKQogICAgICAgICAgICAgICAgICh0IGRlcCkpKQogICAgICAgICAgICAgIGRl cHMpKSkpCgooZGVjbGFyZS1mdW5jdGlvbiBsbS1oZWFkZXIgImxpc3AtbW50IiAoaGVhZGVyKSkK KGRlY2xhcmUtZnVuY3Rpb24gbG0taGVhZGVyLW11bHRpbGluZSAibGlzcC1tbnQiIChoZWFkZXIp KQooZGVjbGFyZS1mdW5jdGlvbiBsbS1ob21lcGFnZSAibGlzcC1tbnQiICgmb3B0aW9uYWwgZmls ZSkpCihkZWNsYXJlLWZ1bmN0aW9uIGxtLWtleXdvcmRzLWxpc3QgImxpc3AtbW50IiAoJm9wdGlv bmFsIGZpbGUpKQooZGVjbGFyZS1mdW5jdGlvbiBsbS1tYWludGFpbmVycyAibGlzcC1tbnQiICgm b3B0aW9uYWwgZmlsZSkpCihkZWNsYXJlLWZ1bmN0aW9uIGxtLW1haW50YWluZXIgImxpc3AtbW50 IiAoJm9wdGlvbmFsIGZpbGUpKQooZGVjbGFyZS1mdW5jdGlvbiBsbS1hdXRob3JzICJsaXNwLW1u dCIgKCZvcHRpb25hbCBmaWxlKSkKCihkZWZ1biBwYWNrYWdlLWJ1ZmZlci1pbmZvICgpCiAgIlJl dHVybiBhIGBwYWNrYWdlLWRlc2MnIGRlc2NyaWJpbmcgdGhlIHBhY2thZ2UgaW4gdGhlIGN1cnJl bnQgYnVmZmVyLgoKSWYgdGhlIGJ1ZmZlciBkb2VzIG5vdCBjb250YWluIGEgY29uZm9ybWluZyBw YWNrYWdlLCBzaWduYWwgYW4KZXJyb3IuICBJZiB0aGVyZSBpcyBhIHBhY2thZ2UsIG5hcnJvdyB0 aGUgYnVmZmVyIHRvIHRoZSBmaWxlJ3MKYm91bmRhcmllcy4iCiAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkKICAodW5sZXNzIChyZS1zZWFyY2gtZm9yd2FyZCAiXjs7OyBcXChbXiBdKlxcKVxcLmVs IC0tLVsgXHRdKlxcKC4qP1xcKVsgXHRdKlxcKC1cXCotLiotXFwqLVsgXHRdKlxcKT8kIiBuaWwg dCkKICAgIChlcnJvciAiUGFja2FnZSBsYWNrcyBhIGZpbGUgaGVhZGVyIikpCiAgKGxldCAoKGZp bGUtbmFtZSAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMSkpCiAgICAgICAgKGRlc2MgICAg ICAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMikpCiAgICAgICAgKHN0YXJ0ICAgICAobGlu ZS1iZWdpbm5pbmctcG9zaXRpb24pKSkKICAgIDs7IFRoaXMgd2FybmluZyB3YXMgYWRkZWQgaW4g RW1hY3MgMjcuMSwgYW5kIHNob3VsZCBiZSByZW1vdmVkIGF0CiAgICA7OyB0aGUgZWFybGllc3Qg aW4gdmVyc2lvbiAzMS4xLiAgVGhlIGlkZWEgaXMgdG8gcGhhc2Ugb3V0IHRoZQogICAgOzsgcmVx dWlyZW1lbnQgZm9yIGEgImZvb3RlciBsaW5lIiB3aXRob3V0IHVuZHVseSBpbXBhY3RpbmcgdXNl cnMKICAgIDs7IG9uIGVhcmxpZXIgRW1hY3MgdmVyc2lvbnMuICBTZWUgQnVnIzI2NDkwIGZvciBt b3JlIGRldGFpbHMuCiAgICAodW5sZXNzIChzZWFyY2gtZm9yd2FyZCAoY29uY2F0ICI7OzsgIiBm aWxlLW5hbWUgIi5lbCBlbmRzIGhlcmUiKSkKICAgICAgKGx3YXJuICcocGFja2FnZSBwYWNrYWdl LWZvcm1hdCkgOndhcm5pbmcKICAgICAgICAgICAgICJQYWNrYWdlIGxhY2tzIGEgdGVybWluYXRp bmcgY29tbWVudCIpKQogICAgOzsgVHJ5IHRvIGluY2x1ZGUgYSB0cmFpbGluZyBuZXdsaW5lLgog ICAgKGZvcndhcmQtbGluZSkKICAgIChuYXJyb3ctdG8tcmVnaW9uIHN0YXJ0IChwb2ludCkpCiAg ICAocmVxdWlyZSAnbGlzcC1tbnQpCiAgICA7OyBVc2Ugc29tZSBoZWFkZXJzIHdlJ3ZlIGludmVu dGVkIHRvIGRyaXZlIHRoZSBwcm9jZXNzLgogICAgKGxldCogKDs7IFByZWZlciBQYWNrYWdlLVZl cnNpb247IGlmIGRlZmluZWQsIHRoZSBwYWNrYWdlIGF1dGhvcgogICAgICAgICAgIDs7IHByb2Jh Ymx5IHdhbnRzIHVzIHRvIHVzZSBpdC4gIE90aGVyd2lzZSB0cnkgVmVyc2lvbi4KICAgICAgICAg ICAodmVyc2lvbi1pbmZvCiAgICAgICAgICAgIChvciAobG0taGVhZGVyICJwYWNrYWdlLXZlcnNp b24iKSAobG0taGVhZGVyICJ2ZXJzaW9uIikpKQogICAgICAgICAgIChwa2ctdmVyc2lvbiAocGFj a2FnZS1zdHJpcC1yY3MtaWQgdmVyc2lvbi1pbmZvKSkKICAgICAgICAgICAoa2V5d29yZHMgKGxt LWtleXdvcmRzLWxpc3QpKQogICAgICAgICAgICh3ZWJzaXRlIChsbS1ob21lcGFnZSkpKQogICAg ICAodW5sZXNzIHBrZy12ZXJzaW9uCiAgICAgICAgIChpZiB2ZXJzaW9uLWluZm8KICAgICAgICAg ICAgIChlcnJvciAiVW5yZWNvZ25pemVkIHBhY2thZ2UgdmVyc2lvbjogJXMiIHZlcnNpb24taW5m bykKICAgICAgICAgICAoZXJyb3IgIlBhY2thZ2UgbGFja3MgYSBcIlZlcnNpb25cIiBvciBcIlBh Y2thZ2UtVmVyc2lvblwiIGhlYWRlciIpKSkKICAgICAgKHBhY2thZ2UtZGVzYy1mcm9tLWRlZmlu ZQogICAgICAgZmlsZS1uYW1lIHBrZy12ZXJzaW9uIGRlc2MKICAgICAgIChhbmQtbGV0KiAoKHJl cXVpcmUtbGluZXMgKGxtLWhlYWRlci1tdWx0aWxpbmUgInBhY2thZ2UtcmVxdWlyZXMiKSkpCiAg ICAgICAgIChwYWNrYWdlLS1wcmVwYXJlLWRlcGVuZGVuY2llcwogICAgICAgICAgKHBhY2thZ2Ut cmVhZC1mcm9tLXN0cmluZyAobWFwY29uY2F0ICMnaWRlbnRpdHkgcmVxdWlyZS1saW5lcyAiICIp KSkpCiAgICAgICA6a2luZCAnc2luZ2xlCiAgICAgICA6dXJsIHdlYnNpdGUKICAgICAgIDprZXl3 b3JkcyBrZXl3b3JkcwogICAgICAgOm1haW50YWluZXIgKGxtLW1haW50YWluZXIpCiAgICAgICA7 OyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdXNlIGEgc2luZ2xlIHN0cmluZyBpZiB0aGVy ZSdzIG9ubHkKICAgICAgIDs7IG9uZSBtYWludGFpbmVyICh0aGUgbW9zdCBjb21tb24gY2FzZSku CiAgICAgICAoaWYgKGZib3VuZHAgJ2xtLW1haW50YWluZXJzKQogICAgICAgICAgIChsZXQgKCht YWludHMgKGxtLW1haW50YWluZXJzKSkpCiAgICAgICAgICAgICAoaWYgKGNkciBtYWludHMpIG1h aW50cyAoY2FyIG1haW50cykpKQogICAgICAgICAobG0tbWFpbnRhaW5lcikpCiAgICAgICA6YXV0 aG9ycyAobG0tYXV0aG9ycykpKSkpCgooZGVmdW4gcGFja2FnZS0tcmVhZC1wa2ctZGVzYyAoa2lu ZCkKICAiUmVhZCBhIGBkZWZpbmUtcGFja2FnZScgZm9ybSBpbiBjdXJyZW50IGJ1ZmZlci4KUmV0 dXJuIHRoZSBwa2ctZGVzYywgd2l0aCBkZXNjLWtpbmQgc2V0IHRvIEtJTkQuIgogIChnb3RvLWNo YXIgKHBvaW50LW1pbikpCiAgKHVud2luZC1wcm90ZWN0CiAgICAgIChsZXQqICgocGtnLWRlZi1w YXJzZWQgKHJlYWQgKGN1cnJlbnQtYnVmZmVyKSkpCiAgICAgICAgICAgICAocGtnLWRlc2MKICAg ICAgICAgICAgICAod2hlbiAoZXEgKGNhciBwa2ctZGVmLXBhcnNlZCkgJ2RlZmluZS1wYWNrYWdl KQogICAgICAgICAgICAgICAgKGFwcGx5ICMncGFja2FnZS1kZXNjLWZyb20tZGVmaW5lCiAgICAg ICAgICAgICAgICAgIChhcHBlbmQgKGNkciBwa2ctZGVmLXBhcnNlZCkpKSkpKQogICAgICAgICh3 aGVuIHBrZy1kZXNjCiAgICAgICAgICAoc2V0ZiAocGFja2FnZS1kZXNjLWtpbmQgcGtnLWRlc2Mp IGtpbmQpCiAgICAgICAgICBwa2ctZGVzYykpKSkKCihkZWNsYXJlLWZ1bmN0aW9uIHRhci1nZXQt ZmlsZS1kZXNjcmlwdG9yICJ0YXItbW9kZSIgKGZpbGUpKQooZGVjbGFyZS1mdW5jdGlvbiB0YXIt LWV4dHJhY3QgInRhci1tb2RlIiAoZGVzY3JpcHRvcikpCgooZGVmdW4gcGFja2FnZS10YXItZmls ZS1pbmZvICgpCiAgIkZpbmQgcGFja2FnZSBpbmZvcm1hdGlvbiBmb3IgYSB0YXIgZmlsZS4KVGhl IHJldHVybiByZXN1bHQgaXMgYSBgcGFja2FnZS1kZXNjJy4iCiAgKGNsLWFzc2VydCAoZGVyaXZl ZC1tb2RlLXAgJ3Rhci1tb2RlKSkKICAobGV0KiAoKGRpci1uYW1lIChuYW1lZC1sZXQgbG9vcAog ICAgICAgICAgICAgICAgICAgICAgICgoZmlsZW5hbWUgKHRhci1oZWFkZXItbmFtZSAoY2FyIHRh ci1wYXJzZS1pbmZvKSkpKQogICAgICAgICAgICAgICAgICAgICAobGV0ICgoZGlybmFtZSAoZmls ZS1uYW1lLWRpcmVjdG9yeSBmaWxlbmFtZSkpKQogICAgICAgICAgICAgICAgICAgICAgIDs7IFRo ZSBmaXJzdCBmaWxlIGNhbiBiZSBpbiBhIHN1YmRpcjogbG9vayBmb3IgdGhlIHRvcC4KICAgICAg ICAgICAgICAgICAgICAgICAoaWYgZGlybmFtZSAobG9vcCAoZGlyZWN0b3J5LWZpbGUtbmFtZSBk aXJuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5 IGZpbGVuYW1lKSkpKSkKICAgICAgICAgKGRlc2MtZmlsZSAocGFja2FnZS0tZGVzY3JpcHRpb24t ZmlsZSBkaXItbmFtZSkpCiAgICAgICAgICh0YXItZGVzYyAodGFyLWdldC1maWxlLWRlc2NyaXB0 b3IgKGNvbmNhdCBkaXItbmFtZSBkZXNjLWZpbGUpKSkpCiAgICAodW5sZXNzIHRhci1kZXNjCiAg ICAgIChlcnJvciAiTm8gcGFja2FnZSBkZXNjcmlwdG9yIGZpbGUgZm91bmQiKSkKICAgICh3aXRo LWN1cnJlbnQtYnVmZmVyICh0YXItLWV4dHJhY3QgdGFyLWRlc2MpCiAgICAgICh1bndpbmQtcHJv dGVjdAogICAgICAgICAgKG9yIChwYWNrYWdlLS1yZWFkLXBrZy1kZXNjICd0YXIpCiAgICAgICAg ICAgICAgKGVycm9yICJDYW4ndCBmaW5kIGRlZmluZS1wYWNrYWdlIGluICVzIgogICAgICAgICAg ICAgICAgKHRhci1oZWFkZXItbmFtZSB0YXItZGVzYykpKQogICAgICAgIChraWxsLWJ1ZmZlciAo Y3VycmVudC1idWZmZXIpKSkpKSkKCihkZWZ1biBwYWNrYWdlLWRpci1pbmZvICgpCiAgIkZpbmQg cGFja2FnZSBpbmZvcm1hdGlvbiBmb3IgYSBkaXJlY3RvcnkuClRoZSByZXR1cm4gcmVzdWx0IGlz IGEgYHBhY2thZ2UtZGVzYycuIgogIChjbC1hc3NlcnQgKGRlcml2ZWQtbW9kZS1wICdkaXJlZC1t b2RlKSkKICAobGV0KiAoKGRlc2MtZmlsZSAocGFja2FnZS0tZGVzY3JpcHRpb24tZmlsZSBkZWZh dWx0LWRpcmVjdG9yeSkpKQogICAgKGlmIChmaWxlLXJlYWRhYmxlLXAgZGVzYy1maWxlKQogICAg ICAgICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgZGVz Yy1maWxlKQogICAgICAgICAgKHBhY2thZ2UtLXJlYWQtcGtnLWRlc2MgJ2RpcikpCiAgICAgIChs ZXQgKChmaWxlcyAoZGlyZWN0b3J5LWZpbGVzIGRlZmF1bHQtZGlyZWN0b3J5IHQgIlxcLmVsXFwn IiB0KSkKICAgICAgICAgICAgaW5mbykKICAgICAgICAod2hpbGUgZmlsZXMKICAgICAgICAgICh3 aXRoLXRlbXAtYnVmZmVyCiAgICAgICAgICAgIChsZXQgKChmaWxlIChwb3AgZmlsZXMpKSkKICAg ICAgICAgICAgICA7OyBUaGUgZmlsZSBtYXkgYmUgYSBsaW5rIHRvIGEgbm9uZXhpc3RlbnQgZmls ZTsgZS5nLiwgYQogICAgICAgICAgICAgIDs7IGxvY2sgZmlsZS4KICAgICAgICAgICAgICAod2hl biAoZmlsZS1leGlzdHMtcCBmaWxlKQogICAgICAgICAgICAgICAgKGluc2VydC1maWxlLWNvbnRl bnRzIGZpbGUpCiAgICAgICAgICAgICAgICA7OyBXaGVuIHdlIGZpbmQgdGhlIGZpbGUgd2l0aCB0 aGUgZGF0YSwKICAgICAgICAgICAgICAgICh3aGVuIChzZXRxIGluZm8gKGlnbm9yZS1lcnJvcnMg KHBhY2thZ2UtYnVmZmVyLWluZm8pKSkKICAgICAgICAgICAgICAgICAgOzsgc3RvcCBsb29waW5n LAogICAgICAgICAgICAgICAgICAoc2V0cSBmaWxlcyBuaWwpCiAgICAgICAgICAgICAgICAgIDs7 IHNldCB0aGUgJ2RpciBraW5kLAogICAgICAgICAgICAgICAgICAoc2V0ZiAocGFja2FnZS1kZXNj LWtpbmQgaW5mbykgJ2RpcikpKSkpKQogICAgICAgICh1bmxlc3MgaW5mbwogICAgICAgICAgKGVy cm9yICJObyAuZWwgZmlsZXMgd2l0aCBwYWNrYWdlIGhlYWRlcnMgaW4gYCVzJyIgZGVmYXVsdC1k aXJlY3RvcnkpKQogICAgICAgIDs7IGFuZCByZXR1cm4gdGhlIGluZm8uCiAgICAgICAgaW5mbykp KSkKCgwKOzs7IENvbW11bmljYXRpbmcgd2l0aCBBcmNoaXZlcwo7OyBTZXQgb2YgbG93LWxldmVs IGZ1bmN0aW9ucyBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGFyY2hpdmVzIGFuZAo7OyBzaWduYXR1 cmUgY2hlY2tpbmcuCgooZGVmdW4gcGFja2FnZS0td3JpdGUtZmlsZS1uby1jb2RpbmcgKGZpbGUt bmFtZSkKICAiV3JpdGUgZmlsZSBGSUxFLU5BTUUgd2l0aG91dCBlbmNvZGluZyB1c2luZyBjb2Rp bmcgc3lzdGVtLiIKICAobGV0ICgoYnVmZmVyLWZpbGUtY29kaW5nLXN5c3RlbSAnbm8tY29udmVy c2lvbikpCiAgICAod3JpdGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpIGZpbGUtbmFt ZSBuaWwgJ3NpbGVudCkpKQoKKGRlY2xhcmUtZnVuY3Rpb24gdXJsLWh0dHAtZmlsZS1leGlzdHMt cCAidXJsLWh0dHAiICh1cmwpKQoKKGRlZnVuIHBhY2thZ2UtLWFyY2hpdmUtZmlsZS1leGlzdHMt cCAobG9jYXRpb24gZmlsZSkKICAiUmV0dXJuIHQgaWYgRklMRSBleGlzdHMgaW4gcmVtb3RlIExP Q0FUSU9OLiIKICAobGV0ICgoaHR0cCAoc3RyaW5nLW1hdGNoICJcXGBodHRwcz86IiBsb2NhdGlv bikpKQogICAgKGlmIGh0dHAKICAgICAgICAocHJvZ24KICAgICAgICAgIChyZXF1aXJlICd1cmwt aHR0cCkKICAgICAgICAgICh1cmwtaHR0cC1maWxlLWV4aXN0cy1wIChjb25jYXQgbG9jYXRpb24g ZmlsZSkpKQogICAgICAoZmlsZS1leGlzdHMtcCAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlIGxvY2F0 aW9uKSkpKSkKCihkZWNsYXJlLWZ1bmN0aW9uIGVwZy1tYWtlLWNvbnRleHQgImVwZyIKICAgICAg ICAgICAgICAgICAgKCZvcHRpb25hbCBwcm90b2NvbCBhcm1vciB0ZXh0bW9kZSBpbmNsdWRlLWNl cnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyLWFsZ29yaXRobQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdC1hbGdvcml0aG0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb21wcmVzcy1hbGdvcml0aG0pKQooZGVjbGFyZS1mdW5jdGlvbiBlcGctdmVy aWZ5LXN0cmluZyAiZXBnIiAoIGNvbnRleHQgc2lnbmF0dXJlCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHNpZ25lZC10ZXh0KSkKKGRlY2xhcmUt ZnVuY3Rpb24gZXBnLWNvbnRleHQtcmVzdWx0LWZvciAiZXBnIiAoY29udGV4dCBuYW1lKSkKKGRl Y2xhcmUtZnVuY3Rpb24gZXBnLXNpZ25hdHVyZS1zdGF0dXMgImVwZyIgKHNpZ25hdHVyZSkgdCkK KGRlY2xhcmUtZnVuY3Rpb24gZXBnLXNpZ25hdHVyZS10by1zdHJpbmcgImVwZyIgKHNpZ25hdHVy ZSkpCgooZGVmdW4gcGFja2FnZS0tZGlzcGxheS12ZXJpZnktZXJyb3IgKGNvbnRleHQgc2lnLWZp bGUpCiAgIlNob3cgZXJyb3IgZGV0YWlscyB3aXRoIENPTlRFWFQgZm9yIGZhaWxlZCB2ZXJpZmlj YXRpb24gb2YgU0lHLUZJTEUuClRoZSBkZXRhaWxzIGFyZSBzaG93biBpbiBhIG5ldyBidWZmZXIg Y2FsbGVkIFwiKkVycm9yXCIuIgogICh1bmxlc3MgKGVxdWFsIChlcGctY29udGV4dC1lcnJvci1v dXRwdXQgY29udGV4dCkgIiIpCiAgICAod2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXIgIipFcnJv cioiCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1dAogICAgICAgIChp ZiAoZXBnLWNvbnRleHQtcmVzdWx0LWZvciBjb250ZXh0ICd2ZXJpZnkpCiAgICAgICAgICAgIChp bnNlcnQgKGZvcm1hdCAiRmFpbGVkIHRvIHZlcmlmeSBzaWduYXR1cmUgJXM6XG4iIHNpZy1maWxl KQogICAgICAgICAgICAgICAgICAgIChtYXBjb25jYXQgIydlcGctc2lnbmF0dXJlLXRvLXN0cmlu ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVwZy1jb250ZXh0LXJlc3VsdC1mb3Ig Y29udGV4dCAndmVyaWZ5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIikpCiAg ICAgICAgICAoaW5zZXJ0IChmb3JtYXQgIkVycm9yIHdoaWxlIHZlcmlmeWluZyBzaWduYXR1cmUg JXM6XG4iIHNpZy1maWxlKSkpCiAgICAgICAgKGluc2VydCAiXG5Db21tYW5kIG91dHB1dDpcbiIg KGVwZy1jb250ZXh0LWVycm9yLW91dHB1dCBjb250ZXh0KSkpKSkpCgooZGVmbWFjcm8gcGFja2Fn ZS0td2l0aC13b3JrLWJ1ZmZlciAobG9jYXRpb24gZmlsZSAmcmVzdCBib2R5KQogICJSdW4gQk9E WSBpbiBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiBGSUxFIGF0IExPQ0FUSU9O LgpMT0NBVElPTiBpcyB0aGUgYmFzZSBsb2NhdGlvbiBvZiBhIHBhY2thZ2UgYXJjaGl2ZSwgYW5k IHNob3VsZCBiZQpvbmUgb2YgdGhlIFVSTHMgKG9yIGZpbGUgbmFtZXMpIHNwZWNpZmllZCBpbiBg cGFja2FnZS1hcmNoaXZlcycuCkZJTEUgaXMgdGhlIG5hbWUgb2YgYSBmaWxlIHJlbGF0aXZlIHRv IHRoYXQgYmFzZSBsb2NhdGlvbi4KClRoaXMgbWFjcm8gcmV0cmlldmVzIEZJTEUgZnJvbSBMT0NB VElPTiBpbnRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciwKYW5kIGV2YWx1YXRlcyBCT0RZIHdoaWxlIHRo YXQgYnVmZmVyIGlzIGN1cnJlbnQuICBUaGlzIHdvcmsKYnVmZmVyIGlzIGtpbGxlZCBhZnRlcndh cmRzLiAgUmV0dXJuIHRoZSBsYXN0IHZhbHVlIGluIEJPRFkuIgogIChkZWNsYXJlIChpbmRlbnQg MikgKGRlYnVnIHQpCiAgICAgICAgICAgKG9ic29sZXRlIHBhY2thZ2UtLXdpdGgtcmVzcG9uc2Ut YnVmZmVyICIyNS4xIikpCiAgYCh3aXRoLXRlbXAtYnVmZmVyCiAgICAgKGlmIChzdHJpbmctbWF0 Y2gtcCAiXFxgaHR0cHM/OiIgLGxvY2F0aW9uKQogICAgICAgICAodXJsLWluc2VydC1maWxlLWNv bnRlbnRzIChjb25jYXQgLGxvY2F0aW9uICxmaWxlKSkKICAgICAgICh1bmxlc3MgKGZpbGUtbmFt ZS1hYnNvbHV0ZS1wICxsb2NhdGlvbikKICAgICAgICAgKGVycm9yICJBcmNoaXZlIGxvY2F0aW9u ICVzIGlzIG5vdCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiCiAgICAgICAgICAgLGxvY2F0aW9uKSkK ICAgICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyAoZXhwYW5kLWZpbGUtbmFtZSAsZmlsZSAsbG9j YXRpb24pKSkKICAgICAsQGJvZHkpKQoKKGNsLWRlZm1hY3JvIHBhY2thZ2UtLXdpdGgtcmVzcG9u c2UtYnVmZmVyICh1cmwgJnJlc3QgYm9keSAma2V5IGFzeW5jIGZpbGUgZXJyb3ItZm9ybSBub2Vy cm9yICZhbGxvdy1vdGhlci1rZXlzKQogICJBY2Nlc3MgVVJMIGFuZCBydW4gQk9EWSBpbiBhIGJ1 ZmZlciBjb250YWluaW5nIHRoZSByZXNwb25zZS4KUG9pbnQgaXMgYWZ0ZXIgdGhlIGhlYWRlcnMg d2hlbiBCT0RZIHJ1bnMuCkZJTEUsIGlmIHByb3ZpZGVkLCBpcyBhZGRlZCB0byBVUkwuClVSTCBj YW4gYmUgYSBsb2NhbCBmaWxlIG5hbWUsIHdoaWNoIG11c3QgYmUgYWJzb2x1dGUuCkFTWU5DLCBp ZiBub24tbmlsLCBydW5zIHRoZSByZXF1ZXN0IGFzeW5jaHJvbm91c2x5LgpFUlJPUi1GT1JNIGlz IHJ1biBvbmx5IGlmIGEgY29ubmVjdGlvbiBlcnJvciBvY2N1cnMuICBJZiBOT0VSUk9SCmlzIG5v bi1uaWwsIGRvbid0IHByb3BhZ2F0ZSBjb25uZWN0aW9uIGVycm9ycyAoZG9lcyBub3QgYXBwbHkg dG8KZXJyb3JzIHNpZ25hbGVkIGJ5IEVSUk9SLUZPUk0gb3IgYnkgQk9EWSkuCgpcKGZuIFVSTCAm a2V5IEFTWU5DIEZJTEUgRVJST1ItRk9STSBOT0VSUk9SICZyZXN0IEJPRFkpIgogIChkZWNsYXJl IChpbmRlbnQgZGVmdW4pIChkZWJ1ZyAoc2V4cCBib2R5KSkpCiAgKHdoaWxlIChrZXl3b3JkcCAo Y2FyIGJvZHkpKQogICAgKHNldHEgYm9keSAoY2RyIChjZHIgYm9keSkpKSkKICBgKHBhY2thZ2Ut LXdpdGgtcmVzcG9uc2UtYnVmZmVyLTEgLHVybCAobGFtYmRhICgpICxAYm9keSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZpbGUgLGZpbGUKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOmFzeW5jICxhc3luYwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6ZXJyb3ItZnVuY3Rpb24gKGxhbWJkYSAoKSAsZXJyb3ItZm9ybSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm5vZXJyb3IgLG5vZXJyb3IpKQoKKGRlZm1h Y3JvIHBhY2thZ2UtLXVubGVzcy1lcnJvciAoYm9keSAmcmVzdCBiZWZvcmUtYm9keSkKICAoZGVj bGFyZSAoZGVidWcgdCkgKGluZGVudCAxKSkKICAobGV0ICgoZXJyIChtYWtlLXN5bWJvbCAiZXJy IikpKQogICAgYCh3aXRoLXRlbXAtYnVmZmVyCiAgICAgICAoc2V0LWJ1ZmZlci1tdWx0aWJ5dGUg bmlsKQogICAgICAgKHdoZW4gKGNvbmRpdGlvbi1jYXNlICxlcnIKICAgICAgICAgICAgICAgICAo cHJvZ24gLEBiZWZvcmUtYm9keSB0KQogICAgICAgICAgICAgICAoZXJyb3IgKGZ1bmNhbGwgZXJy b3ItZnVuY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAodW5sZXNzIG5vZXJyb3IKICAgICAg ICAgICAgICAgICAgICAgICAgKHNpZ25hbCAoY2FyICxlcnIpIChjZHIgLGVycikpKSkpCiAgICAg ICAgIChmdW5jYWxsICxib2R5KSkpKSkKCihjbC1kZWZ1biBwYWNrYWdlLS13aXRoLXJlc3BvbnNl LWJ1ZmZlci0xICh1cmwgYm9keSAma2V5IGFzeW5jIGZpbGUgZXJyb3ItZnVuY3Rpb24gbm9lcnJv ciAmYWxsb3ctb3RoZXIta2V5cykKICAoaWYgKHN0cmluZy1tYXRjaC1wICJcXGBodHRwcz86IiB1 cmwpCiAgICAgICAgKGxldCAoKHVybCAodXJsLWV4cGFuZC1maWxlLW5hbWUgZmlsZSB1cmwpKSkK ICAgICAgICAgIChpZiBhc3luYwogICAgICAgICAgICAgIChwYWNrYWdlLS11bmxlc3MtZXJyb3Ig IydpZ25vcmUKICAgICAgICAgICAgICAgICh1cmwtcmV0cmlldmUKICAgICAgICAgICAgICAgICB1 cmwKICAgICAgICAgICAgICAgICAobGFtYmRhIChzdGF0dXMpCiAgICAgICAgICAgICAgICAgICAo bGV0ICgoYiAoY3VycmVudC1idWZmZXIpKSkKICAgICAgICAgICAgICAgICAgICAgKHJlcXVpcmUg J3VybC1oYW5kbGVycykKICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtLXVubGVzcy1lcnJv ciBib2R5CiAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4tbGV0KiAoKGVyIChwbGlzdC1nZXQg c3RhdHVzIDplcnJvcikpKQogICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJFcnJvciBy ZXRyaWV2aW5nOiAlcyAlUyIgdXJsIGVyKSkKICAgICAgICAgICAgICAgICAgICAgICAod2l0aC1j dXJyZW50LWJ1ZmZlciBiCiAgICAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoc2VhcmNoLWZvcndhcmQt cmVnZXhwICJeXHI/XG5ccj8iIG5pbCB0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJy b3IgIkVycm9yIHJldHJpZXZpbmc6ICVzICVTIgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdXJsICJpbmNvbXByZWhlbnNpYmxlIGJ1ZmZlciIpKSkKICAgICAgICAgICAgICAgICAg ICAgICAodXJsLWluc2VydCBiKQogICAgICAgICAgICAgICAgICAgICAgIChraWxsLWJ1ZmZlciBi KQogICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpKSkpCiAgICAg ICAgICAgICAgICAgbmlsCiAgICAgICAgICAgICAgICAgJ3NpbGVudCkpCiAgICAgICAgICAgIChw YWNrYWdlLS11bmxlc3MtZXJyb3IgYm9keQogICAgICAgICAgICAgIDs7IENvcHkmcGFzdGVkIGZy b20gdXJsLWluc2VydC1maWxlLWNvbnRlbnRzLAogICAgICAgICAgICAgIDs7IGV4Y2VwdCBpdCBj YWxscyBgdXJsLWluc2VydCcgYmVjYXVzZSB3ZSB3YW50IHRoZSBjb250ZW50cwogICAgICAgICAg ICAgIDs7IGxpdGVyYWxseSAoYnV0IHRoZXJlJ3Mgbm8gdXJsLWluc2VydC1maWxlLWNvbnRlbnRz LWxpdGVyYWxseSkuCiAgICAgICAgICAgICAgKGxldCAoKGJ1ZmZlciAodXJsLXJldHJpZXZlLXN5 bmNocm9ub3VzbHkgdXJsKSkpCiAgICAgICAgICAgICAgICAodW5sZXNzIGJ1ZmZlciAoc2lnbmFs ICdmaWxlLWVycm9yIChsaXN0IHVybCAiTm8gRGF0YSIpKSkKICAgICAgICAgICAgICAgICh3aGVu IChmYm91bmRwICd1cmwtaHR0cC0taW5zZXJ0LWZpbGUtaGVscGVyKQogICAgICAgICAgICAgICAg ICA7OyBYWFg6IFRoaXMgaXMgSFRUUC9TIHNwZWNpZmljIGFuZCBzaG91bGQgYmUgbW92ZWQKICAg ICAgICAgICAgICAgICAgOzsgdG8gdXJsLWh0dHAgaW5zdGVhZC4gIFNlZSBidWcjMTc1NDkuCiAg ICAgICAgICAgICAgICAgICh1cmwtaHR0cC0taW5zZXJ0LWZpbGUtaGVscGVyIGJ1ZmZlciB1cmwp KQogICAgICAgICAgICAgICAgKHVybC1pbnNlcnQgYnVmZmVyKQogICAgICAgICAgICAgICAgKGtp bGwtYnVmZmVyIGJ1ZmZlcikKICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikp KSkpKQogICAgICAocGFja2FnZS0tdW5sZXNzLWVycm9yIGJvZHkKICAgICAgICAodW5sZXNzIChm aWxlLW5hbWUtYWJzb2x1dGUtcCB1cmwpCiAgICAgICAgICAoZXJyb3IgIkxvY2F0aW9uICVzIGlz IG5vdCBhIHVybCBub3IgYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiB1cmwpKQogICAgICAgIChpbnNl cnQtZmlsZS1jb250ZW50cy1saXRlcmFsbHkgKGV4cGFuZC1maWxlLW5hbWUgZmlsZSB1cmwpKSkp KQoKKGRlZmluZS1lcnJvciAnYmFkLXNpZ25hdHVyZSAiRmFpbGVkIHRvIHZlcmlmeSBzaWduYXR1 cmUiKQoKKGRlZnVuIHBhY2thZ2UtLWNoZWNrLXNpZ25hdHVyZS1jb250ZW50IChjb250ZW50IHN0 cmluZyAmb3B0aW9uYWwgc2lnLWZpbGUpCiAgIkNoZWNrIHNpZ25hdHVyZSBDT05URU5UIGFnYWlu c3QgU1RSSU5HLgpTSUctRklMRSBpcyB0aGUgbmFtZSBvZiB0aGUgc2lnbmF0dXJlIGZpbGUsIHVz ZWQgd2hlbiBzaWduYWxpbmcKZXJyb3JzLiIKICAobGV0ICgoY29udGV4dCAoZXBnLW1ha2UtY29u dGV4dCAnT3BlblBHUCkpKQogICAgKHdoZW4gcGFja2FnZS1nbnVwZ2hvbWUtZGlyCiAgICAgIChz ZXRmIChlcGctY29udGV4dC1ob21lLWRpcmVjdG9yeSBjb250ZXh0KSBwYWNrYWdlLWdudXBnaG9t ZS1kaXIpKQogICAgKGNvbmRpdGlvbi1jYXNlIGVycm9yCiAgICAgICAgKGVwZy12ZXJpZnktc3Ry aW5nIGNvbnRleHQgY29udGVudCBzdHJpbmcpCiAgICAgIChlcnJvciAocGFja2FnZS0tZGlzcGxh eS12ZXJpZnktZXJyb3IgY29udGV4dCBzaWctZmlsZSkKICAgICAgICAgICAgIChzaWduYWwgJ2Jh ZC1zaWduYXR1cmUgZXJyb3IpKSkKICAgIChsZXQgKGdvb2Qtc2lnbmF0dXJlcyBoYWQtZmF0YWwt ZXJyb3IpCiAgICAgIDs7IFRoZSAuc2lnIGZpbGUgbWF5IGNvbnRhaW4gbXVsdGlwbGUgc2lnbmF0 dXJlcy4gIFN1Y2Nlc3MgaWYgb25lCiAgICAgIDs7IG9mIHRoZSBzaWduYXR1cmVzIGlzIGdvb2Qu CiAgICAgIChkb2xpc3QgKHNpZyAoZXBnLWNvbnRleHQtcmVzdWx0LWZvciBjb250ZXh0ICd2ZXJp ZnkpKQogICAgICAgIChpZiAoZXEgKGVwZy1zaWduYXR1cmUtc3RhdHVzIHNpZykgJ2dvb2QpCiAg ICAgICAgICAgIChwdXNoIHNpZyBnb29kLXNpZ25hdHVyZXMpCiAgICAgICAgICA7OyBJZiBgcGFj a2FnZS1jaGVjay1zaWduYXR1cmUnIGlzIGFsbG93LXVuc2lnbmVkLCBkb24ndAogICAgICAgICAg Ozsgc2lnbmFsIGVycm9yIHdoZW4gd2UgY2FuJ3QgdmVyaWZ5IHNpZ25hdHVyZSBiZWNhdXNlIG9m CiAgICAgICAgICA7OyBtaXNzaW5nIHB1YmxpYyBrZXkuICBPdGhlciBlcnJvcnMgYXJlIHN0aWxs IHRyZWF0ZWQgYXMKICAgICAgICAgIDs7IGZhdGFsIChidWcjMTc2MjUpLgogICAgICAgICAgKHVu bGVzcyAoYW5kIChlcSAocGFja2FnZS1jaGVjay1zaWduYXR1cmUpICdhbGxvdy11bnNpZ25lZCkK ICAgICAgICAgICAgICAgICAgICAgICAoZXEgKGVwZy1zaWduYXR1cmUtc3RhdHVzIHNpZykgJ25v LXB1YmtleSkpCiAgICAgICAgICAgIChzZXRxIGhhZC1mYXRhbC1lcnJvciB0KSkpKQogICAgICAo d2hlbiAob3IgKG51bGwgZ29vZC1zaWduYXR1cmVzKQogICAgICAgICAgICAgICAgKGFuZCAoZXEg KHBhY2thZ2UtY2hlY2stc2lnbmF0dXJlKSAnYWxsKQogICAgICAgICAgICAgICAgICAgICBoYWQt ZmF0YWwtZXJyb3IpKQogICAgICAgIChwYWNrYWdlLS1kaXNwbGF5LXZlcmlmeS1lcnJvciBjb250 ZXh0IHNpZy1maWxlKQogICAgICAgIChzaWduYWwgJ2JhZC1zaWduYXR1cmUgKGxpc3Qgc2lnLWZp bGUpKSkKICAgICAgZ29vZC1zaWduYXR1cmVzKSkpCgooZGVmdW4gcGFja2FnZS0tY2hlY2stc2ln bmF0dXJlIChsb2NhdGlvbiBmaWxlICZvcHRpb25hbCBzdHJpbmcgYXN5bmMgY2FsbGJhY2sgdW53 aW5kKQogICJDaGVjayBzaWduYXR1cmUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLgpEb3dubG9hZCB0 aGUgc2lnbmF0dXJlIGZpbGUgZnJvbSBMT0NBVElPTiBieSBhcHBlbmRpbmcgXCIuc2lnXCIKdG8g RklMRS4KR251UEcga2V5cmluZyBsb2NhdGlvbiBkZXBlbmRzIG9uIGBwYWNrYWdlLWdudXBnaG9t ZS1kaXInLgpTVFJJTkcgaXMgdGhlIHN0cmluZyB0byB2ZXJpZnksIGl0IGRlZmF1bHRzIHRvIGBi dWZmZXItc3RyaW5nJy4KSWYgQVNZTkMgaXMgbm9uLW5pbCwgdGhlIGRvd25sb2FkIG9mIHRoZSBz aWduYXR1cmUgZmlsZSBpcwpkb25lIGFzeW5jaHJvbm91c2x5LgoKSWYgdGhlIHNpZ25hdHVyZSBk b2VzIG5vdCB2ZXJpZnksIHNpZ25hbCBhbiBlcnJvci4KSWYgdGhlIHNpZ25hdHVyZSBpcyB2ZXJp ZmllZCBhbmQgQ0FMTEJBQ0sgd2FzIHByb3ZpZGVkLCBgZnVuY2FsbCcKQ0FMTEJBQ0sgd2l0aCB0 aGUgbGlzdCBvZiBnb29kIHNpZ25hdHVyZXMgYXMgYXJndW1lbnQgKHRoZSBsaXN0CmNhbiBiZSBl bXB0eSkuCklmIG5vIHNpZ25hdHVyZXMgZmlsZSBpcyBmb3VuZCwgYW5kIGBwYWNrYWdlLWNoZWNr LXNpZ25hdHVyZScgaXMKYGFsbG93LXVuc2lnbmVkJywgY2FsbCBDQUxMQkFDSyB3aXRoIGEgbmls IGFyZ3VtZW50LgpPdGhlcndpc2UsIGFuIGVycm9yIGlzIHNpZ25hbGVkLgoKVU5XSU5ELCBpZiBw cm92aWRlZCwgaXMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgZXZlcnl0aGluZwplbHNl LCBldmVuIGlmIGFuIGVycm9yIGlzIHNpZ25hbGVkLiIKICAobGV0ICgoc2lnLWZpbGUgKGNvbmNh dCBmaWxlICIuc2lnIikpCiAgICAgICAgKHN0cmluZyAob3Igc3RyaW5nIChidWZmZXItc3RyaW5n KSkpKQogICAgKHBhY2thZ2UtLXdpdGgtcmVzcG9uc2UtYnVmZmVyIGxvY2F0aW9uIDpmaWxlIHNp Zy1maWxlCiAgICAgIDphc3luYyBhc3luYyA6bm9lcnJvciB0CiAgICAgIDs7IENvbm5lY3Rpb24g ZXJyb3IgaXMgYXNzdW1lZCB0byBtZWFuICJubyBzaWctZmlsZSIuCiAgICAgIDplcnJvci1mb3Jt IChsZXQgKChhbGxvdy11bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICAgICAgKGVxIChwYWNr YWdlLWNoZWNrLXNpZ25hdHVyZSkgJ2FsbG93LXVuc2lnbmVkKSkpCiAgICAgICAgICAgICAgICAg ICAgKHdoZW4gKGFuZCBjYWxsYmFjayBhbGxvdy11bnNpZ25lZCkKICAgICAgICAgICAgICAgICAg ICAgIChmdW5jYWxsIGNhbGxiYWNrIG5pbCkpCiAgICAgICAgICAgICAgICAgICAgKHdoZW4gdW53 aW5kIChmdW5jYWxsIHVud2luZCkpCiAgICAgICAgICAgICAgICAgICAgKHVubGVzcyBhbGxvdy11 bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJVbnNpZ25lZCBmaWxlIGAlcycg YXQgJXMiIGZpbGUgbG9jYXRpb24pKSkKICAgICAgOzsgT1RPSCwgYW4gZXJyb3IgaGVyZSBtZWFu cyAiYmFkIHNpZ25hdHVyZSIsIHdoaWNoIHdlIG5ldmVyCiAgICAgIDs7IHN1cHByZXNzLiAgKEJ1 ZyMyMjA4OSkKICAgICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgICAobGV0ICgoc2lnIChwYWNr YWdlLS1jaGVjay1zaWduYXR1cmUtY29udGVudAogICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZl ci1zdWJzdHJpbmcgKHBvaW50KSAocG9pbnQtbWF4KSkKICAgICAgICAgICAgICAgICAgICAgIHN0 cmluZyBzaWctZmlsZSkpKQogICAgICAgICAgICAod2hlbiBjYWxsYmFjayAoZnVuY2FsbCBjYWxs YmFjayBzaWcpKQogICAgICAgICAgICBzaWcpCiAgICAgICAgKHdoZW4gdW53aW5kIChmdW5jYWxs IHVud2luZCkpKSkpKQoMCjs7OyBQYWNrYWdlcyBvbiBBcmNoaXZlcwo7OyBUaGUgZm9sbG93aW5n IHZhcmlhYmxlcyBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdlcyBhdmFpbGFibGUKOzsg ZnJvbSBhcmNoaXZlcy4gIFRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGVzZSBpcwo7OyBgcGFja2Fn ZS1hcmNoaXZlLWNvbnRlbnRzJyB3aGljaCBpcyBpbml0aWFsbHkgcG9wdWxhdGVkIGJ5IHRoZQo7 OyBmdW5jdGlvbiBgcGFja2FnZS1yZWFkLWFsbC1hcmNoaXZlLWNvbnRlbnRzJyBmcm9tIGEgY2Fj aGUgb24gZGlzay4KOzsgVGhlIGBwYWNrYWdlLWluaXRpYWxpemUnIGNvbW1hbmQgaXMgYWxzbyBj bG9zZWx5IHJlbGF0ZWQgdG8gdGhpcwo7OyBzZWN0aW9uLCBidXQgaXQgaGFzIGl0cyBvd24gc2Vj dGlvbi4KCihkZWZjb25zdCBwYWNrYWdlLWFyY2hpdmUtdmVyc2lvbiAxCiAgIlZlcnNpb24gbnVt YmVyIG9mIHRoZSBwYWNrYWdlIGFyY2hpdmUgdW5kZXJzdG9vZCBieSBwYWNrYWdlLmVsLgpMb3dl ciB2ZXJzaW9uIG51bWJlcnMgdGhhbiB0aGlzIHdpbGwgcHJvYmFibHkgYmUgdW5kZXJzdG9vZCBh cyB3ZWxsLiIpCgo7OyBXZSBkb24ndCBwcmltZSB0aGUgY2FjaGUgc2luY2UgaXQgdGVuZHMgdG8g Z2V0IG91dCBvZiBkYXRlLgooZGVmdmFyIHBhY2thZ2UtYXJjaGl2ZS1jb250ZW50cyBuaWwKICAi Q2FjaGUgb2YgdGhlIGNvbnRlbnRzIG9mIGFsbCBhcmNoaXZlcyBpbiBgcGFja2FnZS1hcmNoaXZl cycuClRoaXMgaXMgYW4gYWxpc3QgbWFwcGluZyBwYWNrYWdlIG5hbWVzIChzeW1ib2xzKSB0bwpu b24tZW1wdHkgbGlzdHMgb2YgYHBhY2thZ2UtZGVzYycgc3RydWN0dXJlcy4iKQoocHV0ICdwYWNr YWdlLWFyY2hpdmUtY29udGVudHMgJ3Jpc2t5LWxvY2FsLXZhcmlhYmxlIHQpCgooZGVmdmFyIHBh Y2thZ2UtLWNvbXBhdGliaWxpdHktdGFibGUgbmlsCiAgIkhhc2ggdGFibGUgY29ubmVjdGluZyBw YWNrYWdlIG5hbWVzIHRvIHRoZWlyIGNvbXBhdGliaWxpdHkuCkVhY2gga2V5IGlzIGEgc3ltYm9s LCB0aGUgbmFtZSBvZiBhIHBhY2thZ2UuCgpUaGUgdmFsdWUgaXMgZWl0aGVyIG5pbCwgcmVwcmVz ZW50aW5nIGFuIGluY29tcGF0aWJsZSBwYWNrYWdlLCBvcgphIHZlcnNpb24gbGlzdCwgcmVwcmVz ZW50aW5nIHRoZSBoaWdoZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZgp0aGF0IHBhY2thZ2Ugd2hp Y2ggaXMgYXZhaWxhYmxlLgoKQSBwYWNrYWdlIGlzIGNvbnNpZGVyZWQgaW5jb21wYXRpYmxlIGlm IGl0IHJlcXVpcmVzIGFuIEVtYWNzCnZlcnNpb24gaGlnaGVyIHRoYW4gdGhlIG9uZSBiZWluZyB1 c2VkLiAgVG8gY2hlY2sgZm9yIHBhY2thZ2UKXChpbiljb21wYXRpYmlsaXR5LCBkb24ndCByZWFk IHRoaXMgdGFibGUgZGlyZWN0bHksIHVzZQpgcGFja2FnZS0taW5jb21wYXRpYmxlLXAnIHdoaWNo IGFsc28gY2hlY2tzIGRlcGVuZGVuY2llcy4iKQoKKGRlZnVuIHBhY2thZ2UtLWJ1aWxkLWNvbXBh dGliaWxpdHktdGFibGUgKCkKICAiQnVpbGQgYHBhY2thZ2UtLWNvbXBhdGliaWxpdHktdGFibGUn IHdpdGggYHBhY2thZ2UtLW1hcGMnLiIKICA7OyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIGJ1aWx0 LWlucy4KICAocmVxdWlyZSAnZmluZGVyLWluZiBuaWwgdCkKICA7OyBCdWlsZCBjb21wYXQgdGFi bGUuCiAgKHNldHEgcGFja2FnZS0tY29tcGF0aWJpbGl0eS10YWJsZSAobWFrZS1oYXNoLXRhYmxl IDp0ZXN0ICdlcSkpCiAgKHBhY2thZ2UtLW1hcGMgIydwYWNrYWdlLS1hZGQtdG8tY29tcGF0aWJp bGl0eS10YWJsZSkpCgooZGVmdW4gcGFja2FnZS0tYWRkLXRvLWNvbXBhdGliaWxpdHktdGFibGUg KHBrZykKICAiSWYgUEtHIGlzIGNvbXBhdGlibGUgKHdpdGhvdXQgZGVwZW5kZW5jaWVzKSwgYWRk IHRvIHRoZSBjb21wYXRpYmlsaXR5IHRhYmxlLgpQS0cgaXMgYSBwYWNrYWdlLWRlc2Mgb2JqZWN0 LgpPbmx5IGFkZHMgaWYgaXRzIHZlcnNpb24gaXMgaGlnaGVyIHRoYW4gd2hhdCdzIGFscmVhZHkg c3RvcmVkIGluCnRoZSB0YWJsZS4iCiAgKHVubGVzcyAocGFja2FnZS0taW5jb21wYXRpYmxlLXAg cGtnICdzaGFsbG93KQogICAgKGxldCogKChuYW1lIChwYWNrYWdlLWRlc2MtbmFtZSBwa2cpKQog ICAgICAgICAgICh2ZXJzaW9uIChvciAocGFja2FnZS1kZXNjLXZlcnNpb24gcGtnKSAnKDApKSkK ICAgICAgICAgICAodGFibGUtdmVyc2lvbiAoZ2V0aGFzaCBuYW1lIHBhY2thZ2UtLWNvbXBhdGli aWxpdHktdGFibGUpKSkKICAgICAgKHdoZW4gKG9yIChub3QgdGFibGUtdmVyc2lvbikKICAgICAg ICAgICAgICAgICh2ZXJzaW9uLWxpc3QtPCB0YWJsZS12ZXJzaW9uIHZlcnNpb24pKQogICAgICAg IChwdXRoYXNoIG5hbWUgdmVyc2lvbiBwYWNrYWdlLS1jb21wYXRpYmlsaXR5LXRhYmxlKSkpKSkK Cjs7IFBhY2thZ2UgZGVzY3JpcHRvciBvYmplY3RzIHVzZWQgaW5zaWRlIHRoZSAiYXJjaGl2ZS1j b250ZW50cyIgZmlsZS4KOzsgQ2hhbmdpbmcgdGhpcyBkZWZzdHJ1Y3QgaW1wbGllcyBjaGFuZ2lu ZyB0aGUgZm9ybWF0IG9mIHRoZQo7OyAiYXJjaGl2ZS1jb250ZW50cyIgZmlsZXMuCihjbC1kZWZz dHJ1Y3QgKHBhY2thZ2UtLWFjLWRlc2MKICAgICAgICAgICAgICAgKDpjb25zdHJ1Y3RvciBwYWNr YWdlLW1ha2UtYWMtZGVzYyAodmVyc2lvbiByZXFzIHN1bW1hcnkga2luZCBleHRyYXMpKQogICAg ICAgICAgICAgICAoOmNvcGllciBuaWwpCiAgICAgICAgICAgICAgICg6dHlwZSB2ZWN0b3IpKQog IHZlcnNpb24gcmVxcyBzdW1tYXJ5IGtpbmQgZXh0cmFzKQoKKGRlZnVuIHBhY2thZ2UtLWFwcGVu ZC10by1hbGlzdCAocGtnLWRlc2MgYWxpc3QpCiAgIkFwcGVuZCBhbiBlbnRyeSBmb3IgUEtHLURF U0MgdG8gdGhlIHN0YXJ0IG9mIEFMSVNUIGFuZCByZXR1cm4gaXQuClRoaXMgZW50cnkgdGFrZXMg dGhlIGZvcm0gKGBwYWNrYWdlLWRlc2MtbmFtZScgUEtHLURFU0MpLgoKSWYgQUxJU1QgYWxyZWFk eSBoYXMgYW4gZW50cnkgd2l0aCB0aGlzIG5hbWUsIGRlc3RydWN0aXZlbHkgYWRkClBLRy1ERVND IHRvIHRoZSBjZHIgb2YgdGhpcyBlbnRyeSBpbnN0ZWFkLCBzb3J0ZWQgYnkgdmVyc2lvbgpudW1i ZXIuIgogIChsZXQqICgobmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKQogICAgICAg ICAocHJpb3JpdHktdmVyc2lvbiAocGFja2FnZS1kZXNjLXByaW9yaXR5LXZlcnNpb24gcGtnLWRl c2MpKQogICAgICAgICAoZXhpc3RpbmctcGFja2FnZXMgKGFzc3EgbmFtZSBhbGlzdCkpKQogICAg KGlmIChub3QgZXhpc3RpbmctcGFja2FnZXMpCiAgICAgICAgKGNvbnMgKGxpc3QgbmFtZSBwa2ct ZGVzYykKICAgICAgICAgICAgICBhbGlzdCkKICAgICAgKHdoaWxlIChpZiAoYW5kIChjZHIgZXhp c3RpbmctcGFja2FnZXMpCiAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbi1saXN0LTwgcHJp b3JpdHktdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNr YWdlLWRlc2MtcHJpb3JpdHktdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2FkciBleGlzdGluZy1wYWNrYWdlcykpKSkKICAgICAgICAgICAgICAgICAoc2V0 cSBleGlzdGluZy1wYWNrYWdlcyAoY2RyIGV4aXN0aW5nLXBhY2thZ2VzKSkKICAgICAgICAgICAg ICAgKHB1c2ggcGtnLWRlc2MgKGNkciBleGlzdGluZy1wYWNrYWdlcykpCiAgICAgICAgICAgICAg IG5pbCkpCiAgICAgIGFsaXN0KSkpCgooZGVmdW4gcGFja2FnZS0tYWRkLXRvLWFyY2hpdmUtY29u dGVudHMgKHBhY2thZ2UgYXJjaGl2ZSkKICAiQWRkIHRoZSBQQUNLQUdFIGZyb20gdGhlIGdpdmVu IEFSQ0hJVkUgaWYgbmVjZXNzYXJ5LgpQQUNLQUdFIHNob3VsZCBoYXZlIHRoZSBmb3JtIChOQU1F IC4gUEFDS0FHRS0tQUMtREVTQykuCkFsc28sIGFkZCB0aGUgb3JpZ2luYXRpbmcgYXJjaGl2ZSB0 byB0aGUgYHBhY2thZ2UtZGVzYycgc3RydWN0dXJlLiIKICAobGV0KiAoKG5hbWUgKGNhciBwYWNr YWdlKSkKICAgICAgICAgKHZlcnNpb24gKHBhY2thZ2UtLWFjLWRlc2MtdmVyc2lvbiAoY2RyIHBh Y2thZ2UpKSkKICAgICAgICAgKHBrZy1kZXNjCiAgICAgICAgICAocGFja2FnZS1kZXNjLWNyZWF0 ZQogICAgICAgICAgIDpuYW1lIG5hbWUKICAgICAgICAgICA6dmVyc2lvbiB2ZXJzaW9uCiAgICAg ICAgICAgOnJlcXMgKHBhY2thZ2UtLWFjLWRlc2MtcmVxcyAoY2RyIHBhY2thZ2UpKQogICAgICAg ICAgIDpzdW1tYXJ5IChwYWNrYWdlLS1hYy1kZXNjLXN1bW1hcnkgKGNkciBwYWNrYWdlKSkKICAg ICAgICAgICA6a2luZCAocGFja2FnZS0tYWMtZGVzYy1raW5kIChjZHIgcGFja2FnZSkpCiAgICAg ICAgICAgOmFyY2hpdmUgYXJjaGl2ZQogICAgICAgICAgIDpleHRyYXMgKGFuZCAoPiAobGVuZ3Ro IChjZHIgcGFja2FnZSkpIDQpCiAgICAgICAgICAgICAgICAgICAgICAgIDs7IE9sZGVyIGFyY2hp dmUtY29udGVudHMgZmlsZXMgaGF2ZSBvbmx5IDQKICAgICAgICAgICAgICAgICAgICAgICAgOzsg ZWxlbWVudHMgaGVyZS4KICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtLWFjLWRlc2Mt ZXh0cmFzIChjZHIgcGFja2FnZSkpKSkpCiAgICAgICAgIChwaW5uZWQtdG8tYXJjaGl2ZSAoYXNz b2MgbmFtZSBwYWNrYWdlLXBpbm5lZC1wYWNrYWdlcykpKQogICAgOzsgU2tpcCBlbnRpcmVseSBp ZiBwaW5uZWQgdG8gYW5vdGhlciBhcmNoaXZlLgogICAgKHdoZW4gKG5vdCAoYW5kIHBpbm5lZC10 by1hcmNoaXZlCiAgICAgICAgICAgICAgICAgICAgKG5vdCAoZXF1YWwgKGNkciBwaW5uZWQtdG8t YXJjaGl2ZSkgYXJjaGl2ZSkpKSkKICAgICAgKHNldHEgcGFja2FnZS1hcmNoaXZlLWNvbnRlbnRz CiAgICAgICAgICAgIChwYWNrYWdlLS1hcHBlbmQtdG8tYWxpc3QgcGtnLWRlc2MgcGFja2FnZS1h cmNoaXZlLWNvbnRlbnRzKSkpKSkKCihkZWZ1biBwYWNrYWdlLS1yZWFkLWFyY2hpdmUtZmlsZSAo ZmlsZSkKICAiUmVhZCBjYWNoZWQgYXJjaGl2ZSBGSUxFIGRhdGEsIGlmIGl0IGV4aXN0cy4KUmV0 dXJuIHRoZSBkYXRhIGZyb20gdGhlIGZpbGUsIG9yIG5pbCBpZiB0aGUgZmlsZSBkb2VzIG5vdCBl eGlzdC4KSWYgdGhlIGFyY2hpdmUgdmVyc2lvbiBpcyB0b28gbmV3LCBzaWduYWwgYW4gZXJyb3Iu IgogIChsZXQgKChmaWxlbmFtZSAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlIHBhY2thZ2UtdXNlci1k aXIpKSkKICAgICh3aGVuIChmaWxlLWV4aXN0cy1wIGZpbGVuYW1lKQogICAgICAod2l0aC10ZW1w LWJ1ZmZlcgogICAgICAgIChsZXQgKChjb2Rpbmctc3lzdGVtLWZvci1yZWFkICd1dGYtOCkpCiAg ICAgICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgZmlsZW5hbWUpKQogICAgICAgIChsZXQgKChj b250ZW50cyAocmVhZCAoY3VycmVudC1idWZmZXIpKSkpCiAgICAgICAgICAoaWYgKD4gKGNhciBj b250ZW50cykgcGFja2FnZS1hcmNoaXZlLXZlcnNpb24pCiAgICAgICAgICAgICAgKGVycm9yICJQ YWNrYWdlIGFyY2hpdmUgdmVyc2lvbiAlZCBpcyBoaWdoZXIgdGhhbiAlZCIKICAgICAgICAgICAg ICAgIChjYXIgY29udGVudHMpIHBhY2thZ2UtYXJjaGl2ZS12ZXJzaW9uKSkKICAgICAgICAgIChj ZHIgY29udGVudHMpKSkpKSkKCihkZWZ1biBwYWNrYWdlLXJlYWQtYXJjaGl2ZS1jb250ZW50cyAo YXJjaGl2ZSkKICAiUmVhZCBjYWNoZWQgYXJjaGl2ZSBmaWxlIGZvciBBUkNISVZFLgpJZiBzdWNj ZXNzZnVsLCBzZXQgb3IgdXBkYXRlIHRoZSB2YXJpYWJsZSBgcGFja2FnZS1hcmNoaXZlLWNvbnRl bnRzJy4KQVJDSElWRSBzaG91bGQgYmUgYSBzdHJpbmcgbWF0Y2hpbmcgdGhlIG5hbWUgb2YgYSBw YWNrYWdlIGFyY2hpdmUKaW4gdGhlIHZhcmlhYmxlIGBwYWNrYWdlLWFyY2hpdmVzJy4KSWYgdGhl IGFyY2hpdmUgdmVyc2lvbiBpcyB0b28gbmV3LCBzaWduYWwgYW4gZXJyb3IuIgogIDs7IFZlcnNp b24gMSBvZiAnYXJjaGl2ZS1jb250ZW50cycgaXMgaWRlbnRpY2FsIHRvIG91ciBpbnRlcm5hbAog IDs7IHJlcHJlc2VudGF0aW9uLgogIChsZXQqICgoY29udGVudHMtZmlsZSAoZm9ybWF0ICJhcmNo aXZlcy8lcy9hcmNoaXZlLWNvbnRlbnRzIiBhcmNoaXZlKSkKICAgICAgICAgKGNvbnRlbnRzIChw YWNrYWdlLS1yZWFkLWFyY2hpdmUtZmlsZSBjb250ZW50cy1maWxlKSkpCiAgICAod2hlbiBjb250 ZW50cwogICAgICAoZG9saXN0IChwYWNrYWdlIGNvbnRlbnRzKQogICAgICAgIChpZiBwYWNrYWdl CiAgICAgICAgICAgIChwYWNrYWdlLS1hZGQtdG8tYXJjaGl2ZS1jb250ZW50cyBwYWNrYWdlIGFy Y2hpdmUpCiAgICAgICAgICAobHdhcm4gJyhwYWNrYWdlIHJlZnJlc2gpIDp3YXJuaW5nCiAgICAg ICAgICAgICAgICAgIklnbm9yaW5nIG5pbCBwYWNrYWdlIG9uIGAlcycgcGFja2FnZSBhcmNoaXZl IiBhcmNoaXZlKSkpKSkpCgooZGVmdmFyIHBhY2thZ2UtLW9sZC1hcmNoaXZlLXByaW9yaXRpZXMg bmlsCiAgIlN0b3JlIGN1cnJlbnRseSB1c2VkIGBwYWNrYWdlLWFyY2hpdmUtcHJpb3JpdGllcycu ClRoaXMgaXMgdGhlIHZhbHVlIG9mIGBwYWNrYWdlLWFyY2hpdmUtcHJpb3JpdGllcycgbGFzdCB0 aW1lCmBwYWNrYWdlLXJlYWQtYWxsLWFyY2hpdmUtY29udGVudHMnIHdhcyBjYWxsZWQuICBJdCBj YW4gYmUgdXNlZApieSBhcmJpdHJhcnkgZnVuY3Rpb25zIHRvIGRlY2lkZSB3aGV0aGVyIGl0IGlz IG5lY2Vzc2FyeSB0byBjYWxsCml0IGFnYWluLiIpCgooZGVmdmFyIHBhY2thZ2UtcmVhZC1hcmNo aXZlLWhvb2sgKGxpc3QgIydwYWNrYWdlLXJlYWQtYXJjaGl2ZS1jb250ZW50cykKICAiTGlzdCBv ZiBmdW5jdGlvbnMgdG8gY2FsbCB0byByZWFkIHRoZSBhcmNoaXZlIGNvbnRlbnRzLgpFYWNoIGZ1 bmN0aW9uIG11c3QgdGFrZSBhbiBvcHRpb25hbCBhcmd1bWVudCwgYSBzeW1ib2wgaW5kaWNhdGlu Zwp3aGF0IGFyY2hpdmUgdG8gcmVhZCBpbi4gIFRoZSBzeW1ib2wgb3VnaHQgdG8gYmUgYSBrZXkg aW4KYHBhY2thZ2UtYXJjaGl2ZXMnLiIpCgooZGVmdW4gcGFja2FnZS1yZWFkLWFsbC1hcmNoaXZl LWNvbnRlbnRzICgpCiAgIlJlYWQgY2FjaGVkIGFyY2hpdmUgZmlsZSBmb3IgYWxsIGFyY2hpdmVz IGluIGBwYWNrYWdlLWFyY2hpdmVzJy4KSWYgc3VjY2Vzc2Z1bCwgc2V0IG9yIHVwZGF0ZSBgcGFj a2FnZS1hcmNoaXZlLWNvbnRlbnRzJy4iCiAgKHNldHEgcGFja2FnZS1hcmNoaXZlLWNvbnRlbnRz IG5pbCkKICAoc2V0cSBwYWNrYWdlLS1vbGQtYXJjaGl2ZS1wcmlvcml0aWVzIHBhY2thZ2UtYXJj aGl2ZS1wcmlvcml0aWVzKQogIChkb2xpc3QgKGFyY2hpdmUgcGFja2FnZS1hcmNoaXZlcykKICAg IChydW4taG9vay13aXRoLWFyZ3MgJ3BhY2thZ2UtcmVhZC1hcmNoaXZlLWhvb2sgKGNhciBhcmNo aXZlKSkpKQoKDAo7Ozs7IFBhY2thZ2UgSW5pdGlhbGl6ZQo7OyBBIGJpdCBvZiBhIG1pbGVzdG9u ZS4gIFRoaXMgYnJpbmdzIHRvZ2V0aGVyIHNvbWUgb2YgdGhlIGFib3ZlCjs7IHNlY3Rpb25zIGFu ZCBwb3B1bGF0ZXMgYWxsIHJlbGV2YW50IGxpc3RzIG9mIHBhY2thZ2VzIGZyb20gY29udGVudHMK OzsgYXZhaWxhYmxlIG9uIGRpc2suCgooZGVmdmFyIHBhY2thZ2UtLWluaXRpYWxpemVkIG5pbAog ICJOb24tbmlsIGlmIGBwYWNrYWdlLWluaXRpYWxpemUnIGhhcyBiZWVuIHJ1bi4iKQoKOzs7IyMj YXV0b2xvYWQKKGRlZnZhciBwYWNrYWdlLS1hY3RpdmF0ZWQgbmlsCiAgIk5vbi1uaWwgaWYgYHBh Y2thZ2UtYWN0aXZhdGUtYWxsJyBoYXMgYmVlbiBydW4uIikKCjs7OyMjI2F1dG9sb2FkCihkZWZ1 biBwYWNrYWdlLWluaXRpYWxpemUgKCZvcHRpb25hbCBuby1hY3RpdmF0ZSkKICAiTG9hZCBFbWFj cyBMaXNwIHBhY2thZ2VzLCBhbmQgYWN0aXZhdGUgdGhlbS4KVGhlIHZhcmlhYmxlIGBwYWNrYWdl LWxvYWQtbGlzdCcgY29udHJvbHMgd2hpY2ggcGFja2FnZXMgdG8gbG9hZC4KSWYgb3B0aW9uYWwg YXJnIE5PLUFDVElWQVRFIGlzIG5vbi1uaWwsIGRvbid0IGFjdGl2YXRlIHBhY2thZ2VzLgoKSXQg aXMgbm90IG5lY2Vzc2FyeSB0byBhZGp1c3QgYGxvYWQtcGF0aCcgb3IgYHJlcXVpcmUnIHRoZQpp bmRpdmlkdWFsIHBhY2thZ2VzIGFmdGVyIGNhbGxpbmcgYHBhY2thZ2UtaW5pdGlhbGl6ZScgLS0g dGhpcyBpcwp0YWtlbiBjYXJlIG9mIGJ5IGBwYWNrYWdlLWluaXRpYWxpemUnLgoKSWYgYHBhY2th Z2UtaW5pdGlhbGl6ZScgaXMgY2FsbGVkIHR3aWNlIGR1cmluZyBFbWFjcyBzdGFydHVwLApzaWdu YWwgYSB3YXJuaW5nLCBzaW5jZSB0aGlzIGlzIGEgYmFkIGlkZWEgZXhjZXB0IGluIGhpZ2hseQph ZHZhbmNlZCB1c2UgY2FzZXMuICBUbyBzdXBwcmVzcyB0aGUgd2FybmluZywgcmVtb3ZlIHRoZQpz dXBlcmZsdW91cyBjYWxsIHRvIGBwYWNrYWdlLWluaXRpYWxpemUnIGZyb20geW91ciBpbml0LWZp bGUuICBJZgp5b3UgaGF2ZSBjb2RlIHdoaWNoIG11c3QgcnVuIGJlZm9yZSBgcGFja2FnZS1pbml0 aWFsaXplJywgcHV0CnRoYXQgY29kZSBpbiB0aGUgZWFybHkgaW5pdC1maWxlLiIKICAoaW50ZXJh Y3RpdmUpCiAgKHdoZW4gKGFuZCBwYWNrYWdlLS1pbml0aWFsaXplZCAobm90IGFmdGVyLWluaXQt dGltZSkpCiAgICAobHdhcm4gJyhwYWNrYWdlIHJlaW5pdGlhbGl6YXRpb24pIDp3YXJuaW5nCiAg ICAgICAgICAgIlVubmVjZXNzYXJ5IGNhbGwgdG8gYHBhY2thZ2UtaW5pdGlhbGl6ZScgaW4gaW5p dCBmaWxlIikpCiAgKHNldHEgcGFja2FnZS1hbGlzdCBuaWwpCiAgKHBhY2thZ2UtbG9hZC1hbGwt ZGVzY3JpcHRvcnMpCiAgKHBhY2thZ2UtcmVhZC1hbGwtYXJjaGl2ZS1jb250ZW50cykKICAoc2V0 cSBwYWNrYWdlLS1pbml0aWFsaXplZCB0KQogICh1bmxlc3Mgbm8tYWN0aXZhdGUKICAgIChwYWNr YWdlLWFjdGl2YXRlLWFsbCkpCiAgOzsgVGhpcyB1c2VzIGBwYWNrYWdlLS1tYXBjJyBzbyBpdCBt dXN0IGJlIGNhbGxlZCBhZnRlcgogIDs7IGBwYWNrYWdlLS1pbml0aWFsaXplZCcgaXMgdC4KICAo cGFja2FnZS0tYnVpbGQtY29tcGF0aWJpbGl0eS10YWJsZSkpCgo7OzsjIyNhdXRvbG9hZAoocHJv Z24gOzsgTWFrZSB0aGUgZnVuY3Rpb24gdXNhYmxlIHdpdGhvdXQgbG9hZGluZyBgcGFja2FnZS5l bCcuCihkZWZ1biBwYWNrYWdlLWFjdGl2YXRlLWFsbCAoKQogICJBY3RpdmF0ZSBhbGwgaW5zdGFs bGVkIHBhY2thZ2VzLgpUaGUgdmFyaWFibGUgYHBhY2thZ2UtbG9hZC1saXN0JyBjb250cm9scyB3 aGljaCBwYWNrYWdlcyB0byBsb2FkLiIKICAoc2V0cSBwYWNrYWdlLS1hY3RpdmF0ZWQgdCkKICAo bGV0KiAoKGVsYyAoY29uY2F0IHBhY2thZ2UtcXVpY2tzdGFydC1maWxlICJjIikpCiAgICAgICAg IChxcyAoaWYgKGZpbGUtcmVhZGFibGUtcCBlbGMpIGVsYwogICAgICAgICAgICAgICAoaWYgKGZp bGUtcmVhZGFibGUtcCBwYWNrYWdlLXF1aWNrc3RhcnQtZmlsZSkKICAgICAgICAgICAgICAgICAg IHBhY2thZ2UtcXVpY2tzdGFydC1maWxlKSkpKQogICAgOzsgVGhlIHF1aWNrc3RhcnQgZmlsZSBw cmVzdW1lcyB0aGF0IGl0IGhhcyBhIGJsYW5rIHNsYXRlLAogICAgOzsgc28gZG9uJ3QgdXNlIGl0 IGlmIHdlIGFscmVhZHkgYWN0aXZhdGVkIHNvbWUgcGFja2FnZXMuCiAgICAoaWYgKGFuZCBxcyAo bm90IChib3VuZC1hbmQtdHJ1ZS1wIHBhY2thZ2UtYWN0aXZhdGVkLWxpc3QpKSkKICAgICAgICA7 OyBTa2lwIGxvYWQtc291cmNlLWZpbGUtZnVuY3Rpb24gd2hpY2ggd291bGQgc2xvdyB1cyBkb3du IGJ5IGEgZmFjdG9yCiAgICAgICAgOzsgMiB3aGVuIGxvYWRpbmcgdGhlIC5lbCBmaWxlICh0aGlz IGFzc3VtZXMgd2Ugd2VyZSBjYXJlZnVsIHRvCiAgICAgICAgOzsgc2F2ZSB0aGlzIGZpbGUgc28g aXQgZG9lc24ndCBuZWVkIGFueSBkZWNvZGluZykuCiAgICAgICAgKGxldCAoKGxvYWQtc291cmNl LWZpbGUtZnVuY3Rpb24gbmlsKSkKICAgICAgICAgICh1bmxlc3MgKGJvdW5kcCAncGFja2FnZS1h Y3RpdmF0ZWQtbGlzdCkKICAgICAgICAgICAgKHNldHEgcGFja2FnZS1hY3RpdmF0ZWQtbGlzdCBu aWwpKQogICAgICAgICAgKGxvYWQgcXMgbmlsICdub21lc3NhZ2UpKQogICAgICAocmVxdWlyZSAn cGFja2FnZSkKICAgICAgKHBhY2thZ2UtLWFjdGl2YXRlLWFsbCkpKSkpCgo7OzsjIyNhdXRvbG9h ZAooZGVmdW4gcGFja2FnZS0tYWN0aXZhdGUtYWxsICgpCiAgKGRvbGlzdCAoZWx0IChwYWNrYWdl LS1hbGlzdCkpCiAgICAoY29uZGl0aW9uLWNhc2UgZXJyCiAgICAgICAgKHBhY2thZ2UtYWN0aXZh dGUgKGNhciBlbHQpKQogICAgICA7OyBEb24ndCBsZXQgZmFpbHVyZSBvZiBhY3RpdmF0aW9uIG9m IGEgcGFja2FnZSBhcmJpdHJhcmlseSBzdG9wCiAgICAgIDs7IGFjdGl2YXRpb24gb2YgZnVydGhl ciBwYWNrYWdlcy4KICAgICAgKGVycm9yIChtZXNzYWdlICIlcyIgKGVycm9yLW1lc3NhZ2Utc3Ry aW5nIGVycikpKSkpKQoMCjs7OzsgUG9wdWxhdGluZyBgcGFja2FnZS1hcmNoaXZlLWNvbnRlbnRz JyBmcm9tIGFyY2hpdmVzCjs7IFRoaXMgc3Vic2VjdGlvbiBwb3B1bGF0ZXMgdGhlIHZhcmlhYmxl cyBsaXN0ZWQgYWJvdmUgZnJvbSB0aGUKOzsgYWN0dWFsIGFyY2hpdmVzLCBpbnN0ZWFkIG9mIGZy b20gYSBsb2NhbCBjYWNoZS4KCihkZWZ2YXIgcGFja2FnZS0tZG93bmxvYWRzLWluLXByb2dyZXNz IG5pbAogICJMaXN0IG9mIGluLXByb2dyZXNzIGFzeW5jaHJvbm91cyBkb3dubG9hZHMuIikKCihk ZWNsYXJlLWZ1bmN0aW9uIGVwZy1pbXBvcnQta2V5cy1mcm9tLWZpbGUgImVwZyIgKGNvbnRleHQg a2V5cykpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gcGFja2FnZS1pbXBvcnQta2V5cmluZyAoJm9w dGlvbmFsIGZpbGUpCiAgIkltcG9ydCBrZXlzIGZyb20gRklMRS4iCiAgKGludGVyYWN0aXZlICJm RmlsZTogIikKICAoc2V0cSBmaWxlIChleHBhbmQtZmlsZS1uYW1lIGZpbGUpKQogIChsZXQgKChj b250ZXh0IChlcGctbWFrZS1jb250ZXh0ICdPcGVuUEdQKSkpCiAgICAod2hlbiBwYWNrYWdlLWdu dXBnaG9tZS1kaXIKICAgICAgKHdpdGgtZmlsZS1tb2RlcyA0NDgKICAgICAgICAobWFrZS1kaXJl Y3RvcnkgcGFja2FnZS1nbnVwZ2hvbWUtZGlyIHQpKQogICAgICAoc2V0ZiAoZXBnLWNvbnRleHQt aG9tZS1kaXJlY3RvcnkgY29udGV4dCkgcGFja2FnZS1nbnVwZ2hvbWUtZGlyKSkKICAgIChtZXNz YWdlICJJbXBvcnRpbmcgJXMuLi4iIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZpbGUpKQogICAg KGVwZy1pbXBvcnQta2V5cy1mcm9tLWZpbGUgY29udGV4dCBmaWxlKQogICAgKG1lc3NhZ2UgIklt cG9ydGluZyAlcy4uLmRvbmUiIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZpbGUpKSkpCgooZGVm dmFyIHBhY2thZ2UtLXBvc3QtZG93bmxvYWQtYXJjaGl2ZXMtaG9vayBuaWwKICAiSG9vayBydW4g YWZ0ZXIgdGhlIGFyY2hpdmUgY29udGVudHMgYXJlIGRvd25sb2FkZWQuCkRvbid0IHJ1biB0aGlz IGhvb2sgZGlyZWN0bHkuICBJdCBpcyBtZWFudCB0byBiZSBydW4gYXMgcGFydCBvZgpgcGFja2Fn ZS0tdXBkYXRlLWRvd25sb2Fkcy1pbi1wcm9ncmVzcycuIikKKHB1dCAncGFja2FnZS0tcG9zdC1k b3dubG9hZC1hcmNoaXZlcy1ob29rICdyaXNreS1sb2NhbC12YXJpYWJsZSB0KQoKKGRlZnVuIHBh Y2thZ2UtLXVwZGF0ZS1kb3dubG9hZHMtaW4tcHJvZ3Jlc3MgKGVudHJ5KQogICJSZW1vdmUgRU5U UlkgZnJvbSBgcGFja2FnZS0tZG93bmxvYWRzLWluLXByb2dyZXNzJy4KT25jZSBpdCdzIGVtcHR5 LCBydW4gYHBhY2thZ2UtLXBvc3QtZG93bmxvYWQtYXJjaGl2ZXMtaG9vaycuIgogIDs7IEtlZXAg dHJhY2sgb2YgdGhlIGRvd25sb2FkaW5nIHByb2dyZXNzLgogIChzZXRxIHBhY2thZ2UtLWRvd25s b2Fkcy1pbi1wcm9ncmVzcwogICAgICAgIChyZW1vdmUgZW50cnkgcGFja2FnZS0tZG93bmxvYWRz LWluLXByb2dyZXNzKSkKICA7OyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBkb3dubG9hZCwgcnVuIHRo ZSBob29rLgogICh1bmxlc3MgcGFja2FnZS0tZG93bmxvYWRzLWluLXByb2dyZXNzCiAgICAocGFj a2FnZS1yZWFkLWFsbC1hcmNoaXZlLWNvbnRlbnRzKQogICAgKHBhY2thZ2UtLWJ1aWxkLWNvbXBh dGliaWxpdHktdGFibGUpCiAgICA7OyBXZSBtZXNzYWdlIGJlZm9yZSBydW5uaW5nIHRoZSBob29r LCBzbyB0aGUgaG9vayBjYW4gZ2l2ZQogICAgOzsgbWVzc2FnZXMgYXMgd2VsbC4KICAgIChtZXNz YWdlICJQYWNrYWdlIHJlZnJlc2ggZG9uZSIpCiAgICAocnVuLWhvb2tzICdwYWNrYWdlLS1wb3N0 LWRvd25sb2FkLWFyY2hpdmVzLWhvb2spKSkKCihkZWZ1biBwYWNrYWdlLS1kb3dubG9hZC1vbmUt YXJjaGl2ZSAoYXJjaGl2ZSBmaWxlICZvcHRpb25hbCBhc3luYykKICAiUmV0cmlldmUgYW4gYXJj aGl2ZSBmaWxlIEZJTEUgZnJvbSBBUkNISVZFLCBhbmQgY2FjaGUgaXQuCkFSQ0hJVkUgc2hvdWxk IGJlIGEgY29ucyBjZWxsIG9mIHRoZSBmb3JtIChOQU1FIC4gTE9DQVRJT04pLApzaW1pbGFyIHRv IGFuIGVudHJ5IGluIGBwYWNrYWdlLWFsaXN0Jy4gIFNhdmUgdGhlIGNhY2hlZCBjb3B5IHRvClwi YXJjaGl2ZXMvTkFNRS9GSUxFXCIgaW4gYHBhY2thZ2UtdXNlci1kaXInLiIKICA7OyBUaGUgZG93 bmxvYWRlZCBhcmNoaXZlIGNvbnRlbnRzIHdpbGwgYmUgcmVhZCBhcyBwYXJ0IG9mCiAgOzsgYHBh Y2thZ2UtLXVwZGF0ZS1kb3dubG9hZHMtaW4tcHJvZ3Jlc3MnLgogICh3aGVuIGFzeW5jCiAgICAo Y2wtcHVzaG5ldyAoY29ucyBhcmNoaXZlIGZpbGUpIHBhY2thZ2UtLWRvd25sb2Fkcy1pbi1wcm9n cmVzcwogICAgICAgICAgICAgICAgOnRlc3QgIydlcXVhbCkpCiAgKHBhY2thZ2UtLXdpdGgtcmVz cG9uc2UtYnVmZmVyIChjZHIgYXJjaGl2ZSkgOmZpbGUgZmlsZQogICAgOmFzeW5jIGFzeW5jCiAg ICA6ZXJyb3ItZm9ybSAocGFja2FnZS0tdXBkYXRlLWRvd25sb2Fkcy1pbi1wcm9ncmVzcyAoY29u cyBhcmNoaXZlIGZpbGUpKQogICAgKGxldCogKChsb2NhdGlvbiAoY2RyIGFyY2hpdmUpKQogICAg ICAgICAgIChuYW1lIChjYXIgYXJjaGl2ZSkpCiAgICAgICAgICAgKGNvbnRlbnQgKGJ1ZmZlci1z dHJpbmcpKQogICAgICAgICAgIChkaXIgKGV4cGFuZC1maWxlLW5hbWUgKGNvbmNhdCAiYXJjaGl2 ZXMvIiBuYW1lKSBwYWNrYWdlLXVzZXItZGlyKSkKICAgICAgICAgICAobG9jYWwtZmlsZSAoZXhw YW5kLWZpbGUtbmFtZSBmaWxlIGRpcikpKQogICAgICAod2hlbiAobGlzdHAgKHJlYWQgY29udGVu dCkpCiAgICAgICAgKG1ha2UtZGlyZWN0b3J5IGRpciB0KQogICAgICAgIChpZiAob3IgKG5vdCAo cGFja2FnZS1jaGVjay1zaWduYXR1cmUpKQogICAgICAgICAgICAgICAgKG1lbWJlciBuYW1lIHBh Y2thZ2UtdW5zaWduZWQtYXJjaGl2ZXMpKQogICAgICAgICAgICA7OyBJZiB3ZSBkb24ndCBjYXJl IGFib3V0IHRoZSBzaWduYXR1cmUsIHNhdmUgdGhlIGZpbGUgYW5kCiAgICAgICAgICAgIDs7IHdl J3JlIGRvbmUuCiAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgIChjbC1hc3NlcnQgKG5v dCBlbmFibGUtbXVsdGlieXRlLWNoYXJhY3RlcnMpKQogICAgICAgICAgICAgIChsZXQgKChjb2Rp bmctc3lzdGVtLWZvci13cml0ZSAnYmluYXJ5KSkKICAgICAgICAgICAgICAgICh3cml0ZS1yZWdp b24gY29udGVudCBuaWwgbG9jYWwtZmlsZSBuaWwgJ3NpbGVudCkpCiAgICAgICAgICAgICAgKHBh Y2thZ2UtLXVwZGF0ZS1kb3dubG9hZHMtaW4tcHJvZ3Jlc3MgKGNvbnMgYXJjaGl2ZSBmaWxlKSkp CiAgICAgICAgICA7OyBJZiB3ZSBjYXJlLCBjaGVjayBpdCAocGVyaGFwcyBhc3luYykgYW5kICp0 aGVuKiB3cml0ZSB0aGUgZmlsZS4KICAgICAgICAgIChwYWNrYWdlLS1jaGVjay1zaWduYXR1cmUK ICAgICAgICAgICBsb2NhdGlvbiBmaWxlIGNvbnRlbnQgYXN5bmMKICAgICAgICAgICA7OyBUaGlz IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHNpZ25hdHVyZSBjaGVja2luZy4KICAgICAg ICAgICAobGFtYmRhICgmb3B0aW9uYWwgZ29vZC1zaWdzKQogICAgICAgICAgICAgKGNsLWFzc2Vy dCAobm90IGVuYWJsZS1tdWx0aWJ5dGUtY2hhcmFjdGVycykpCiAgICAgICAgICAgICAobGV0ICgo Y29kaW5nLXN5c3RlbS1mb3Itd3JpdGUgJ2JpbmFyeSkpCiAgICAgICAgICAgICAgICh3cml0ZS1y ZWdpb24gY29udGVudCBuaWwgbG9jYWwtZmlsZSBuaWwgJ3NpbGVudCkpCiAgICAgICAgICAgICA7 OyBXcml0ZSBvdXQgZ29vZCBzaWduYXR1cmVzIGludG8gYXJjaGl2ZS1jb250ZW50cy5zaWduZWQg ZmlsZS4KICAgICAgICAgICAgICh3aGVuIGdvb2Qtc2lncwogICAgICAgICAgICAgICAod3JpdGUt cmVnaW9uIChtYXBjb25jYXQgIydlcGctc2lnbmF0dXJlLXRvLXN0cmluZyBnb29kLXNpZ3MgIlxu IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgKGNvbmNhdCBsb2NhbC1maWxlICIu c2lnbmVkIikgbmlsICdzaWxlbnQpKSkKICAgICAgICAgICAobGFtYmRhICgpIChwYWNrYWdlLS11 cGRhdGUtZG93bmxvYWRzLWluLXByb2dyZXNzIChjb25zIGFyY2hpdmUgZmlsZSkpKSkpKSkpKQoK KGRlZnVuIHBhY2thZ2UtLWRvd25sb2FkLWFuZC1yZWFkLWFyY2hpdmVzICgmb3B0aW9uYWwgYXN5 bmMpCiAgIkRvd25sb2FkIGRlc2NyaXB0aW9ucyBvZiBhbGwgYHBhY2thZ2UtYXJjaGl2ZXMnIGFu ZCByZWFkIHRoZW0uClBvcHVsYXRlIGBwYWNrYWdlLWFyY2hpdmUtY29udGVudHMnIHdpdGggdGhl IHJlc3VsdC4KCklmIG9wdGlvbmFsIGFyZ3VtZW50IEFTWU5DIGlzIG5vbi1uaWwsIHBlcmZvcm0g dGhlIGRvd25sb2Fkcwphc3luY2hyb25vdXNseS4iCiAgKGRvbGlzdCAoYXJjaGl2ZSBwYWNrYWdl LWFyY2hpdmVzKQogICAgKGNvbmRpdGlvbi1jYXNlLXVubGVzcy1kZWJ1ZyBuaWwKICAgICAgICAo cGFja2FnZS0tZG93bmxvYWQtb25lLWFyY2hpdmUgYXJjaGl2ZSAiYXJjaGl2ZS1jb250ZW50cyIg YXN5bmMpCiAgICAgIChlcnJvciAobWVzc2FnZSAiRmFpbGVkIHRvIGRvd25sb2FkIGAlcycgYXJj aGl2ZS4iCiAgICAgICAgICAgICAgIChjYXIgYXJjaGl2ZSkpKSkpKQoKKGRlZnZhciBwYWNrYWdl LXJlZnJlc2gtY29udGVudHMtaG9vayAobGlzdCAjJ3BhY2thZ2UtLWRvd25sb2FkLWFuZC1yZWFk LWFyY2hpdmVzKQogICJMaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIHRvIHJlZnJlc2ggdGhlIHBh Y2thZ2UgYXJjaGl2ZS4KRWFjaCBmdW5jdGlvbiBtYXkgdGFrZSBhbiBvcHRpb25hbCBhcmd1bWVu dCBpbmRpY2F0aW5nIHRoYXQgdGhlCm9wZXJhdGlvbiBvdWdodCB0byBiZSBleGVjdXRlZCBhc3lu Y2hyb25vdXNseS4iKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHBhY2thZ2UtcmVmcmVzaC1jb250 ZW50cyAoJm9wdGlvbmFsIGFzeW5jKQogICJEb3dubG9hZCBkZXNjcmlwdGlvbnMgb2YgYWxsIGNv bmZpZ3VyZWQgRUxQQSBwYWNrYWdlcy4KRm9yIGVhY2ggYXJjaGl2ZSBjb25maWd1cmVkIGluIHRo ZSB2YXJpYWJsZSBgcGFja2FnZS1hcmNoaXZlcycsCmluZm9ybSBFbWFjcyBhYm91dCB0aGUgbGF0 ZXN0IHZlcnNpb25zIG9mIGFsbCBwYWNrYWdlcyBpdCBvZmZlcnMsCmFuZCBtYWtlIHRoZW0gYXZh aWxhYmxlIGZvciBkb3dubG9hZC4KT3B0aW9uYWwgYXJndW1lbnQgQVNZTkMgc3BlY2lmaWVzIHdo ZXRoZXIgdG8gcGVyZm9ybSB0aGUKZG93bmxvYWRzIGluIHRoZSBiYWNrZ3JvdW5kLiIKICAoaW50 ZXJhY3RpdmUpCiAgKHVubGVzcyAoZmlsZS1leGlzdHMtcCBwYWNrYWdlLXVzZXItZGlyKQogICAg KG1ha2UtZGlyZWN0b3J5IHBhY2thZ2UtdXNlci1kaXIgdCkpCiAgKGxldCAoKGRlZmF1bHQta2V5 cmluZyAoZXhwYW5kLWZpbGUtbmFtZSAicGFja2FnZS1rZXlyaW5nLmdwZyIKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlyZWN0b3J5KSkKICAgICAgICAo aW5oaWJpdC1tZXNzYWdlIChvciBpbmhpYml0LW1lc3NhZ2UgYXN5bmMpKSkKICAgICh3aGVuIChh bmQgKHBhY2thZ2UtY2hlY2stc2lnbmF0dXJlKSAoZmlsZS1leGlzdHMtcCBkZWZhdWx0LWtleXJp bmcpKQogICAgICAoY29uZGl0aW9uLWNhc2UtdW5sZXNzLWRlYnVnIGVycm9yCiAgICAgICAgICAo cGFja2FnZS1pbXBvcnQta2V5cmluZyBkZWZhdWx0LWtleXJpbmcpCiAgICAgICAgKGVycm9yICht ZXNzYWdlICJDYW5ub3QgaW1wb3J0IGRlZmF1bHQga2V5cmluZzogJVMiIChjZHIgZXJyb3IpKSkp KSkKICAocnVuLWhvb2std2l0aC1hcmdzICdwYWNrYWdlLXJlZnJlc2gtY29udGVudHMtaG9vayBh c3luYykpCgoMCjs7OyBEZXBlbmRlbmN5IE1hbmFnZW1lbnQKOzsgQ2FsY3VsYXRpbmcgdGhlIGZ1 bGwgdHJhbnNhY3Rpb24gbmVjZXNzYXJ5IGZvciBhbiBpbnN0YWxsYXRpb24sCjs7IGtlZXBpbmcg dHJhY2sgb2Ygd2hpY2ggcGFja2FnZXMgd2VyZSBpbnN0YWxsZWQgc3RyaWN0bHkgYXMKOzsgZGVw ZW5kZW5jaWVzLCBhbmQgZGV0ZXJtaW5pbmcgd2hpY2ggcGFja2FnZXMgY2Fubm90IGJlIHJlbW92 ZWQKOzsgYmVjYXVzZSB0aGV5IGFyZSBkZXBlbmRlbmNpZXMuCgooZGVmdW4gcGFja2FnZS1jb21w dXRlLXRyYW5zYWN0aW9uIChwYWNrYWdlcyByZXF1aXJlbWVudHMgJm9wdGlvbmFsIHNlZW4pCiAg IlJldHVybiBhIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkLCBpbmNsdWRpbmcgUEFD S0FHRVMuClBBQ0tBR0VTIHNob3VsZCBiZSBhIGxpc3Qgb2YgYHBhY2thZ2UtZGVzYycuCgpSRVFV SVJFTUVOVFMgc2hvdWxkIGJlIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHJlcXVpcmVtZW50czsgZWFj aAplbGVtZW50IGluIHRoaXMgbGlzdCBzaG91bGQgaGF2ZSB0aGUgZm9ybSAoUEFDS0FHRSBWRVJT SU9OLUxJU1QpLAp3aGVyZSBQQUNLQUdFIGlzIGEgcGFja2FnZSBuYW1lIGFuZCBWRVJTSU9OLUxJ U1QgaXMgdGhlIHJlcXVpcmVkCnZlcnNpb24gb2YgdGhhdCBwYWNrYWdlLgoKVGhpcyBmdW5jdGlv biByZWN1cnNpdmVseSBjb21wdXRlcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZQpwYWNrYWdlcyBp biBSRVFVSVJFTUVOVFMsIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIHBhY2thZ2VzCnRo YXQgbXVzdCBiZSBpbnN0YWxsZWQuICBQYWNrYWdlcyB0aGF0IGFyZSBhbHJlYWR5IGluc3RhbGxl ZCBhcmUKbm90IGluY2x1ZGVkIGluIHRoaXMgbGlzdC4KClNFRU4gaXMgdXNlZCBpbnRlcm5hbGx5 IHRvIGRldGVjdCBpbmZpbml0ZSByZWN1cnNpb24uIgogIDs7IEZJWE1FOiBXZSByZWFsbHkgc2hv dWxkIHVzZSBiYWNrdHJhY2tpbmcgdG8gZXhwbG9yZSB0aGUgd2hvbGUKICA7OyBzZWFyY2ggc3Bh Y2UgKGUuZy4gaWYgZm9vIHJlcXVpcmUgYmFyLTEuMywgYW5kIGJhci0xLjQgcmVxdWlyZXMgdG90 by0xLjEKICA7OyB3aGVyZWFzIGJhci0xLjMgcmVxdWlyZXMgdG90by0xLjAgYW5kIHRoZSB1c2Vy IGhhcyBwdXQgYSBob2xkIG9uIHRvdG8tMS4wOgogIDs7IHRoZSBjdXJyZW50IGNvZGUgbWlnaHQg ZmFpbCB0byBzZWUgdGhhdCBpdCBjb3VsZCBpbnN0YWxsIGZvbyBieSB1c2luZyB0aGUKICA7OyBv bGRlciBiYXItMS4zKS4KICAoZG9saXN0IChlbHQgcmVxdWlyZW1lbnRzKQogICAgKGxldCogKChu ZXh0LXBrZyAoY2FyIGVsdCkpCiAgICAgICAgICAgKG5leHQtdmVyc2lvbiAoY2FkciBlbHQpKQog ICAgICAgICAgIChhbHJlYWR5ICgpKSkKICAgICAgKGRvbGlzdCAocGtnIHBhY2thZ2VzKQogICAg ICAgIChpZiAoZXEgbmV4dC1wa2cgKHBhY2thZ2UtZGVzYy1uYW1lIHBrZykpCiAgICAgICAgICAg IChzZXRxIGFscmVhZHkgcGtnKSkpCiAgICAgICh3aGVuIGFscmVhZHkKICAgICAgICAoaWYgKHZl cnNpb24tbGlzdC08PSBuZXh0LXZlcnNpb24gKHBhY2thZ2UtZGVzYy12ZXJzaW9uIGFscmVhZHkp KQogICAgICAgICAgICA7OyBgbmV4dC1wa2cnIGlzIGFscmVhZHkgaW4gYHBhY2thZ2VzJywgYnV0 IGl0cyBwb3NpdGlvbiB0aGVyZQogICAgICAgICAgICA7OyBtZWFucyBpdCBtaWdodCBiZSBpbnN0 YWxsZWQgdG9vIGxhdGU6IHJlbW92ZSBpdCBmcm9tIHRoZXJlLCBzbwogICAgICAgICAgICA7OyB3 ZSByZS1hZGQgaXQgKGFsb25nIHdpdGggaXRzIGRlcGVuZGVuY2llcykgYXQgYW4gZWFybGllciBw bGFjZQogICAgICAgICAgICA7OyBiZWxvdyAoYnVnIzE2OTk0KS4KICAgICAgICAgICAgKGlmICht ZW1xIGFscmVhZHkgc2VlbikgICAgIDtBdm9pZCBpbmYtbG9vcCBvbiBkZXBlbmRlbmN5IGN5Y2xl cy4KICAgICAgICAgICAgICAgIChtZXNzYWdlICJEZXBlbmRlbmN5IGN5Y2xlIGdvaW5nIHRocm91 Z2ggJVMiCiAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLWZ1bGwtbmFtZSBh bHJlYWR5KSkKICAgICAgICAgICAgICAoc2V0cSBwYWNrYWdlcyAoZGVscSBhbHJlYWR5IHBhY2th Z2VzKSkKICAgICAgICAgICAgICAoc2V0cSBhbHJlYWR5IG5pbCkpCiAgICAgICAgICAoZXJyb3Ig Ik5lZWQgcGFja2FnZSBgJXMtJXMnLCBidXQgb25seSAlcyBpcyBiZWluZyBpbnN0YWxsZWQiCiAg ICAgICAgICAgICAgICAgbmV4dC1wa2cgKHBhY2thZ2UtdmVyc2lvbi1qb2luIG5leHQtdmVyc2lv bikKICAgICAgICAgICAgICAgICAocGFja2FnZS12ZXJzaW9uLWpvaW4gKHBhY2thZ2UtZGVzYy12 ZXJzaW9uIGFscmVhZHkpKSkpKQogICAgICAoY29uZAogICAgICAgKGFscmVhZHkgbmlsKQogICAg ICAgKChwYWNrYWdlLWluc3RhbGxlZC1wIG5leHQtcGtnIG5leHQtdmVyc2lvbikgbmlsKQoKICAg ICAgICh0CiAgICAgICAgOzsgQSBwYWNrYWdlIGlzIHJlcXVpcmVkLCBidXQgbm90IGluc3RhbGxl ZC4gIEl0IG1pZ2h0IGFsc28gYmUKICAgICAgICA7OyBibG9ja2VkIHZpYSBgcGFja2FnZS1sb2Fk LWxpc3QnLgogICAgICAgIChsZXQgKChwa2ctZGVzY3MgKGNkciAoYXNzcSBuZXh0LXBrZyBwYWNr YWdlLWFyY2hpdmUtY29udGVudHMpKSkKICAgICAgICAgICAgICAoZm91bmQgbmlsKQogICAgICAg ICAgICAgIChmb3VuZC1zb21ldGhpbmcgbmlsKQogICAgICAgICAgICAgIChwcm9ibGVtIG5pbCkp CiAgICAgICAgICAod2hpbGUgKGFuZCBwa2ctZGVzY3MgKG5vdCBmb3VuZCkpCiAgICAgICAgICAg IChsZXQqICgocGtnLWRlc2MgKHBvcCBwa2ctZGVzY3MpKQogICAgICAgICAgICAgICAgICAgKHZl cnNpb24gKHBhY2thZ2UtZGVzYy12ZXJzaW9uIHBrZy1kZXNjKSkKICAgICAgICAgICAgICAgICAg IChkaXNhYmxlZCAocGFja2FnZS1kaXNhYmxlZC1wIG5leHQtcGtnIHZlcnNpb24pKSkKICAgICAg ICAgICAgICAoY29uZAogICAgICAgICAgICAgICAoKHZlcnNpb24tbGlzdC08IHZlcnNpb24gbmV4 dC12ZXJzaW9uKQogICAgICAgICAgICAgICAgOzsgcGtnLWRlc2NzIGlzIHNvcnRlZCBieSBwcmlv cml0eSwgbm90IHZlcnNpb24sIHNvCiAgICAgICAgICAgICAgICA7OyBkb24ndCBlcnJvciBqdXN0 IHlldC4KICAgICAgICAgICAgICAgICh1bmxlc3MgZm91bmQtc29tZXRoaW5nCiAgICAgICAgICAg ICAgICAgIChzZXRxIGZvdW5kLXNvbWV0aGluZyAocGFja2FnZS12ZXJzaW9uLWpvaW4gdmVyc2lv bikpKSkKICAgICAgICAgICAgICAgKGRpc2FibGVkCiAgICAgICAgICAgICAgICAodW5sZXNzIHBy b2JsZW0KICAgICAgICAgICAgICAgICAgKHNldHEgcHJvYmxlbQogICAgICAgICAgICAgICAgICAg ICAgICAoaWYgKHN0cmluZ3AgZGlzYWJsZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Zm9ybWF0LW1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFja2FnZSBgJXMn IGhlbGQgYXQgdmVyc2lvbiAlcywgYnV0IHZlcnNpb24gJXMgcmVxdWlyZWQiCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbmV4dC1wa2cgZGlzYWJsZWQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocGFja2FnZS12ZXJzaW9uLWpvaW4gbmV4dC12ZXJzaW9uKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAoZm9ybWF0LW1lc3NhZ2UgIlJlcXVpcmVkIHBhY2thZ2UgYCVzJyBpcyBk aXNhYmxlZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC1w a2cpKSkpKQogICAgICAgICAgICAgICAodCAoc2V0cSBmb3VuZCBwa2ctZGVzYykpKSkpCiAgICAg ICAgICAodW5sZXNzIGZvdW5kCiAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAocHJvYmxl bSAoZXJyb3IgIiVzIiBwcm9ibGVtKSkKICAgICAgICAgICAgIChmb3VuZC1zb21ldGhpbmcKICAg ICAgICAgICAgICAoZXJyb3IgIk5lZWQgcGFja2FnZSBgJXMtJXMnLCBidXQgb25seSAlcyBpcyBh dmFpbGFibGUiCiAgICAgICAgICAgICAgICAgICAgIG5leHQtcGtnIChwYWNrYWdlLXZlcnNpb24t am9pbiBuZXh0LXZlcnNpb24pCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kLXNvbWV0aGluZykp CiAgICAgICAgICAgICAodAogICAgICAgICAgICAgIChpZiAoZXEgbmV4dC1wa2cgJ2VtYWNzKQog ICAgICAgICAgICAgICAgICAoZXJyb3IgIlRoaXMgcGFja2FnZSByZXF1aXJlcyBFbWFjcyB2ZXJz aW9uICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtdmVyc2lvbi1qb2luIG5l eHQtdmVyc2lvbikpCiAgICAgICAgICAgICAgICAoZXJyb3IgKGlmIChub3QgbmV4dC12ZXJzaW9u KQogICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJQYWNrYWdlIGAlcycgaXMgdW5h dmFpbGFibGUiIG5leHQtcGtnKQogICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiUGFj a2FnZSBgJXMnICh2ZXJzaW9uICVzKSBpcyB1bmF2YWlsYWJsZSIKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmV4dC1wa2cgKHBhY2thZ2UtdmVyc2lvbi1qb2luIG5leHQtdmVyc2lv bikpKSkpKSkpCiAgICAgICAgICAoc2V0cSBwYWNrYWdlcwogICAgICAgICAgICAgICAgKHBhY2th Z2UtY29tcHV0ZS10cmFuc2FjdGlvbiAoY29ucyBmb3VuZCBwYWNrYWdlcykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVzYy1yZXFzIGZvdW5k KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyBmb3Vu ZCBzZWVuKSkpKSkpKSkKICBwYWNrYWdlcykKCihkZWZ1biBwYWNrYWdlLS1maW5kLW5vbi1kZXBl bmRlbmNpZXMgKCkKICAiUmV0dXJuIGEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgd2hpY2gg YXJlIG5vdCBkZXBlbmRlbmNpZXMuCkZpbmRzIGFsbCBwYWNrYWdlcyBpbiBgcGFja2FnZS1hbGlz dCcgd2hpY2ggYXJlIG5vdCBkZXBlbmRlbmNpZXMKb2YgYW55IG90aGVyIHBhY2thZ2VzLgpVc2Vk IHRvIHBvcHVsYXRlIGBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzJy4iCiAgKGxldCAoKGRlcC1s aXN0CiAgICAgICAgIChkZWxldGUtZHVwcwogICAgICAgICAgKGFwcGx5ICMnYXBwZW5kCiAgICAg ICAgICAgIChtYXBjYXIgKGxhbWJkYSAocCkgKG1hcGNhciAjJ2NhciAocGFja2FnZS1kZXNjLXJl cXMgKGNhZHIgcCkpKSkKICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLWFsaXN0KSkpKSkKICAg IChjbC1sb29wIGZvciBwIGluIHBhY2thZ2UtYWxpc3QKICAgICAgICAgICAgIGZvciBuYW1lID0g KGNhciBwKQogICAgICAgICAgICAgdW5sZXNzIChtZW1xIG5hbWUgZGVwLWxpc3QpCiAgICAgICAg ICAgICBjb2xsZWN0IG5hbWUpKSkKCihkZWZ1biBwYWNrYWdlLS1zYXZlLXNlbGVjdGVkLXBhY2th Z2VzICgmb3B0aW9uYWwgdmFsdWUpCiAgIlNldCBhbmQgc2F2ZSBgcGFja2FnZS1zZWxlY3RlZC1w YWNrYWdlcycgdG8gVkFMVUUuIgogICh3aGVuIHZhbHVlCiAgICAoc2V0cSBwYWNrYWdlLXNlbGVj dGVkLXBhY2thZ2VzIHZhbHVlKSkKICAoaWYgYWZ0ZXItaW5pdC10aW1lCiAgICAgIChjdXN0b21p emUtc2F2ZS12YXJpYWJsZSAncGFja2FnZS1zZWxlY3RlZC1wYWNrYWdlcyBwYWNrYWdlLXNlbGVj dGVkLXBhY2thZ2VzKQogICAgKGFkZC1ob29rICdhZnRlci1pbml0LWhvb2sgIydwYWNrYWdlLS1z YXZlLXNlbGVjdGVkLXBhY2thZ2VzKSkpCgooZGVmdW4gcGFja2FnZS0tdXNlci1zZWxlY3RlZC1w IChwa2cpCiAgIlJldHVybiBub24tbmlsIGlmIFBLRyBpcyBhIHBhY2thZ2Ugd2FzIGluc3RhbGxl ZCBieSB0aGUgdXNlci4KUEtHIGlzIGEgcGFja2FnZSBuYW1lLgpUaGlzIGxvb2tzIGludG8gYHBh Y2thZ2Utc2VsZWN0ZWQtcGFja2FnZXMnLCBwb3B1bGF0aW5nIGl0IGZpcnN0CmlmIGl0IGlzIHN0 aWxsIGVtcHR5LiIKICAodW5sZXNzIChjb25zcCBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzKQog ICAgKHBhY2thZ2UtLXNhdmUtc2VsZWN0ZWQtcGFja2FnZXMgKHBhY2thZ2UtLWZpbmQtbm9uLWRl cGVuZGVuY2llcykpKQogIChtZW1xIHBrZyBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzKSkKCihk ZWZ1biBwYWNrYWdlLS1nZXQtZGVwcyAocGtncykKICAobGV0ICgoc2VlbiAnKCkpKQogICAgKHdo aWxlIHBrZ3MKICAgICAgKGxldCAoKHBrZyAocG9wIHBrZ3MpKSkKICAgICAgICAoaWYgKG1lbXEg cGtnIHNlZW4pCiAgICAgICAgICAgIG5pbCA7OyBEb25lIGFscmVhZHkhCiAgICAgICAgICAobGV0 ICgocGtnLWRlc2MgKGNhZHIgKGFzc3EgcGtnIHBhY2thZ2UtYWxpc3QpKSkpCiAgICAgICAgICAg ICh3aGVuIHBrZy1kZXNjCiAgICAgICAgICAgICAgKHB1c2ggcGtnIHNlZW4pCiAgICAgICAgICAg ICAgKHNldHEgcGtncyAoYXBwZW5kIChtYXBjYXIgIydjYXIgKHBhY2thZ2UtZGVzYy1yZXFzIHBr Zy1kZXNjKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtncykpKSkpKSkKICAg IHNlZW4pKQoKKGRlZnVuIHBhY2thZ2UtLXVzZXItaW5zdGFsbGVkLXAgKHBhY2thZ2UpCiAgIlJl dHVybiBub24tbmlsIGlmIFBBQ0tBR0UgaXMgYSB1c2VyLWluc3RhbGxlZCBwYWNrYWdlLgpQQUNL QUdFIGlzIHRoZSBwYWNrYWdlIG5hbWUsIGEgc3ltYm9sLiAgQ2hlY2sgd2hldGhlciB0aGUgcGFj a2FnZQp3YXMgaW5zdGFsbGVkIGludG8gYHBhY2thZ2UtdXNlci1kaXInIHdoZXJlIHdlIGFzc3Vt ZSB0byBoYXZlCmNvbnRyb2wgb3Zlci4iCiAgKGxldCogKChwa2ctZGVzYyAoY2FkciAoYXNzcSBw YWNrYWdlIHBhY2thZ2UtYWxpc3QpKSkKICAgICAgICAgKGRpciAocGFja2FnZS1kZXNjLWRpciBw a2ctZGVzYykpKQogICAgKGZpbGUtaW4tZGlyZWN0b3J5LXAgZGlyIHBhY2thZ2UtdXNlci1kaXIp KSkKCihkZWZ1biBwYWNrYWdlLS1yZW1vdmFibGUtcGFja2FnZXMgKCkKICAiUmV0dXJuIGEgbGlz dCBvZiBuYW1lcyBvZiBwYWNrYWdlcyBubyBsb25nZXIgbmVlZGVkLgpUaGVzZSBhcmUgcGFja2Fn ZXMgd2hpY2ggYXJlIG5laXRoZXIgY29udGFpbmVkIGluCmBwYWNrYWdlLXNlbGVjdGVkLXBhY2th Z2VzJyBub3IgYSBkZXBlbmRlbmN5IG9mIG9uZSB0aGF0IGlzLiIKICAobGV0ICgobmVlZGVkIChw YWNrYWdlLS1nZXQtZGVwcyBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzKSkpCiAgICAoY2wtbG9v cCBmb3IgcCBpbiAobWFwY2FyICMnY2FyIHBhY2thZ2UtYWxpc3QpCiAgICAgICAgICAgICB1bmxl c3MgKG9yIChtZW1xIHAgbmVlZGVkKQogICAgICAgICAgICAgICAgICAgICAgICA7OyBEbyBub3Qg YXV0by1yZW1vdmUgZXh0ZXJuYWwgcGFja2FnZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIChu b3QgKHBhY2thZ2UtLXVzZXItaW5zdGFsbGVkLXAgcCkpKQogICAgICAgICAgICAgY29sbGVjdCBw KSkpCgooZGVmdW4gcGFja2FnZS0tdXNlZC1lbHNld2hlcmUtcCAocGtnLWRlc2MgJm9wdGlvbmFs IHBrZy1saXN0IGFsbCkKICAiTm9uLW5pbCBpZiBQS0ctREVTQyBpcyBhIGRlcGVuZGVuY3kgb2Yg YSBwYWNrYWdlIGluIFBLRy1MSVNULgpSZXR1cm4gdGhlIGZpcnN0IHBhY2thZ2UgZm91bmQgaW4g UEtHLUxJU1Qgb2Ygd2hpY2ggUEtHIGlzIGEKZGVwZW5kZW5jeS4gIElmIEFMTCBpcyBub24tbmls LCByZXR1cm4gYWxsIHN1Y2ggcGFja2FnZXMgaW5zdGVhZC4KCldoZW4gbm90IHNwZWNpZmllZCwg UEtHLUxJU1QgZGVmYXVsdHMgdG8gYHBhY2thZ2UtYWxpc3QnCndpdGggUEtHLURFU0MgZW50cnkg cmVtb3ZlZC4iCiAgKHVubGVzcyAoc3RyaW5nPSAocGFja2FnZS1kZXNjLXN0YXR1cyBwa2ctZGVz YykgIm9ic29sZXRlIikKICAgIChsZXQqICgocGtnIChwYWNrYWdlLWRlc2MtbmFtZSBwa2ctZGVz YykpCiAgICAgICAgICAgKGFsaXN0IChvciBwa2ctbGlzdAogICAgICAgICAgICAgICAgICAgICAg KHJlbW92ZSAoYXNzcSBwa2cgcGFja2FnZS1hbGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGFja2FnZS1hbGlzdCkpKSkKICAgICAgKGlmIGFsbAogICAgICAgICAgKGNsLWxvb3Ag Zm9yIHAgaW4gYWxpc3QKICAgICAgICAgICAgICAgICAgIGlmIChhc3NxIHBrZyAocGFja2FnZS1k ZXNjLXJlcXMgKGNhZHIgcCkpKQogICAgICAgICAgICAgICAgICAgY29sbGVjdCAoY2FkciBwKSkK ICAgICAgICAoY2wtbG9vcCBmb3IgcCBpbiBhbGlzdCB0aGVyZWlzCiAgICAgICAgICAgICAgICAg KGFuZCAoYXNzcSBwa2cgKHBhY2thZ2UtZGVzYy1yZXFzIChjYWRyIHApKSkKICAgICAgICAgICAg ICAgICAgICAgIChjYWRyIHApKSkpKSkpCgooZGVmdW4gcGFja2FnZS0tc29ydC1kZXBzLWluLWFs aXN0IChwYWNrYWdlIG9ubHkpCiAgIlJldHVybiBhIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGZvciBQ QUNLQUdFIHNvcnRlZCBieSBkZXBlbmRlbmN5LgpQQUNLQUdFIGlzIGluY2x1ZGVkIGFzIHRoZSBm aXJzdCBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCBsaXN0LgpPTkxZIGlzIGFuIGFsaXN0IGFzc29j aWF0aW5nIHBhY2thZ2UgbmFtZXMgdG8gcGFja2FnZSBvYmplY3RzLgpPbmx5IHRoZXNlIHBhY2th Z2VzIHdpbGwgYmUgaW4gdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlaXIgY2RycyBhcmUKZGVzdHJ1 Y3RpdmVseSBzZXQgdG8gbmlsIGluIE9OTFkuIgogIChsZXQgKChvdXQpKQogICAgKGRvbGlzdCAo ZGVwIChwYWNrYWdlLWRlc2MtcmVxcyBwYWNrYWdlKSkKICAgICAgKHdoZW4tbGV0KiAoKGNlbGwg KGFzc3EgKGNhciBkZXApIG9ubHkpKQogICAgICAgICAgICAgICAgICAoZGVwLXBhY2thZ2UgKGNk ci1zYWZlIGNlbGwpKSkKICAgICAgICAoc2V0Y2RyIGNlbGwgbmlsKQogICAgICAgIChzZXRxIG91 dCAoYXBwZW5kIChwYWNrYWdlLS1zb3J0LWRlcHMtaW4tYWxpc3QgZGVwLXBhY2thZ2Ugb25seSkK ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQpKSkpCiAgICAoY29ucyBwYWNrYWdlIG91dCkp KQoKKGRlZnVuIHBhY2thZ2UtLXNvcnQtYnktZGVwZW5kZW5jZSAocGFja2FnZS1saXN0KQogICJS ZXR1cm4gUEFDS0FHRS1MSVNUIHNvcnRlZCBieSBkZXBlbmRlbmNlLgpUaGF0IGlzLCBhbnkgZWxl bWVudCBvZiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBndWFyYW50ZWVkIHRvIG5vdApkaXJlY3RseSBk ZXBlbmQgb24gYW55IGVsZW1lbnRzIHRoYXQgY29tZSBiZWZvcmUgaXQuCgpQQUNLQUdFLUxJU1Qg aXMgYSBsaXN0IG9mIGBwYWNrYWdlLWRlc2MnIG9iamVjdHMuCkluZGlyZWN0IGRlcGVuZGVuY2ll cyBhcmUgZ3VhcmFudGVlZCB0byBiZSByZXR1cm5lZCBpbiBvcmRlciBvbmx5CmlmIGFsbCB0aGUg aW4tYmV0d2VlbiBkZXBlbmRlbmNpZXMgYXJlIGFsc28gaW4gUEFDS0FHRS1MSVNULiIKICAobGV0 ICgoYWxpc3QgKG1hcGNhciAobGFtYmRhIChwKSAoY29ucyAocGFja2FnZS1kZXNjLW5hbWUgcCkg cCkpIHBhY2thZ2UtbGlzdCkpCiAgICAgICAgb3V0LWxpc3QpCiAgICAoZG9saXN0IChjZWxsIGFs aXN0IG91dC1saXN0KQogICAgICA7OyBgcGFja2FnZS0tc29ydC1kZXBzLWluLWFsaXN0JyBkZXN0 cnVjdGl2ZWx5IGNoYW5nZXMgYWxpc3QsIHNvCiAgICAgIDs7IHNvbWUgY2VsbHMgbWlnaHQgYWxy ZWFkeSBiZSBlbXB0eS4gIFdlIGNoZWNrIHRoaXMgaGVyZS4KICAgICAgKHdoZW4tbGV0KiAoKHBr Zy1kZXNjIChjZHIgY2VsbCkpKQogICAgICAgIChzZXRjZHIgY2VsbCBuaWwpCiAgICAgICAgKHNl dHEgb3V0LWxpc3QKICAgICAgICAgICAgICAoYXBwZW5kIChwYWNrYWdlLS1zb3J0LWRlcHMtaW4t YWxpc3QgcGtnLWRlc2MgYWxpc3QpCiAgICAgICAgICAgICAgICAgICAgICBvdXQtbGlzdCkpKSkp KQoKDAo7OzsgSW5zdGFsbGF0aW9uIEZ1bmN0aW9ucwo7OyBBcyBvcHBvc2VkIHRvIHRoZSBwcmV2 aW91cyBzZWN0aW9uICh3aGljaCBsaXN0ZWQgc29tZSB1bmRlcmx5aW5nCjs7IGZ1bmN0aW9ucyBu ZWNlc3NhcnkgZm9yIGluc3RhbGxhdGlvbiksIHRoaXMgb25lIGNvbnRhaW5zIHRoZSBhY3R1YWwK OzsgZnVuY3Rpb25zIHRoYXQgaW5zdGFsbCBwYWNrYWdlcy4gIFRoZSBwYWNrYWdlIGl0c2VsZiBj YW4gYmUKOzsgaW5zdGFsbGVkIGluIGEgdmFyaWV0eSBvZiB3YXlzIChhcmNoaXZlcywgYnVmZmVy LCBmaWxlKSwgYnV0Cjs7IHJlcXVpcmVtZW50cyAoZGVwZW5kZW5jaWVzKSBhcmUgYWx3YXlzIHNh dGlzZmllZCBieSBsb29raW5nIGluCjs7IGBwYWNrYWdlLWFyY2hpdmUtY29udGVudHMnLgoKKGRl ZnVuIHBhY2thZ2UtYXJjaGl2ZS1iYXNlIChkZXNjKQogICJSZXR1cm4gdGhlIHBhY2thZ2UgZGVz Y3JpYmVkIGJ5IERFU0MuIgogIChjZHIgKGFzc29jIChwYWNrYWdlLWRlc2MtYXJjaGl2ZSBkZXNj KSBwYWNrYWdlLWFyY2hpdmVzKSkpCgooZGVmdW4gcGFja2FnZS1pbnN0YWxsLWZyb20tYXJjaGl2 ZSAocGtnLWRlc2MpCiAgIkRvd25sb2FkIGFuZCBpbnN0YWxsIGEgcGFja2FnZSBkZWZpbmVkIGJ5 IFBLRy1ERVNDLiIKICA7OyBUaGlzIHdvbid0IGhhcHBlbiwgdW5sZXNzIHRoZSBhcmNoaXZlIGlz IGRvaW5nIHNvbWV0aGluZyB3cm9uZy4KICAod2hlbiAoZXEgKHBhY2thZ2UtZGVzYy1raW5kIHBr Zy1kZXNjKSAnZGlyKQogICAgKGVycm9yICJDYW4ndCBpbnN0YWxsIGRpcmVjdG9yeSBwYWNrYWdl IGZyb20gYXJjaGl2ZSIpKQogIChsZXQqICgobG9jYXRpb24gKHBhY2thZ2UtYXJjaGl2ZS1iYXNl IHBrZy1kZXNjKSkKICAgICAgICAgKGZpbGUgKGNvbmNhdCAocGFja2FnZS1kZXNjLWZ1bGwtbmFt ZSBwa2ctZGVzYykKICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLXN1ZmZpeCBw a2ctZGVzYykpKSkKICAgIChwYWNrYWdlLS13aXRoLXJlc3BvbnNlLWJ1ZmZlciBsb2NhdGlvbiA6 ZmlsZSBmaWxlCiAgICAgIChpZiAob3IgKG5vdCAocGFja2FnZS1jaGVjay1zaWduYXR1cmUpKQog ICAgICAgICAgICAgIChtZW1iZXIgKHBhY2thZ2UtZGVzYy1hcmNoaXZlIHBrZy1kZXNjKQogICAg ICAgICAgICAgICAgICAgICAgcGFja2FnZS11bnNpZ25lZC1hcmNoaXZlcykpCiAgICAgICAgICA7 OyBJZiB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBzaWduYXR1cmUsIHVucGFjayBhbmQgd2UncmUK ICAgICAgICAgIDs7IGRvbmUuCiAgICAgICAgICAobGV0ICgoc2F2ZS1zaWxlbnRseSB0KSkKICAg ICAgICAgICAgKHBhY2thZ2UtdW5wYWNrIHBrZy1kZXNjKSkKICAgICAgICA7OyBJZiB3ZSBjYXJl LCBjaGVjayBpdCBhbmQgKnRoZW4qIHdyaXRlIHRoZSBmaWxlLgogICAgICAgIChsZXQgKChjb250 ZW50IChidWZmZXItc3RyaW5nKSkpCiAgICAgICAgICAocGFja2FnZS0tY2hlY2stc2lnbmF0dXJl CiAgICAgICAgICAgbG9jYXRpb24gZmlsZSBjb250ZW50IG5pbAogICAgICAgICAgIDs7IFRoaXMg ZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgc2lnbmF0dXJlIGNoZWNraW5nLgogICAgICAg ICAgIChsYW1iZGEgKCZvcHRpb25hbCBnb29kLXNpZ3MpCiAgICAgICAgICAgICA7OyBTaWduYXR1 cmUgY2hlY2tlZCwgdW5wYWNrIG5vdy4KICAgICAgICAgICAgICh3aXRoLXRlbXAtYnVmZmVyIDtG SVhNRTogSnVzdCB1c2UgdGhlIHByZXZpb3VzIGN1cnJlbnQtYnVmZmVyLgogICAgICAgICAgICAg ICAoc2V0LWJ1ZmZlci1tdWx0aWJ5dGUgbmlsKQogICAgICAgICAgICAgICAoY2wtYXNzZXJ0IChu b3QgKG11bHRpYnl0ZS1zdHJpbmctcCBjb250ZW50KSkpCiAgICAgICAgICAgICAgIChpbnNlcnQg Y29udGVudCkKICAgICAgICAgICAgICAgKGxldCAoKHNhdmUtc2lsZW50bHkgdCkpCiAgICAgICAg ICAgICAgICAgKHBhY2thZ2UtdW5wYWNrIHBrZy1kZXNjKSkpCiAgICAgICAgICAgICA7OyBIZXJl IHRoZSBwYWNrYWdlIGhhcyBiZWVuIGluc3RhbGxlZCBzdWNjZXNzZnVsbHksIG1hcmsgaXQgYXMK ICAgICAgICAgICAgIDs7IHNpZ25lZCBpZiBhcHByb3ByaWF0ZS4KICAgICAgICAgICAgICh3aGVu IGdvb2Qtc2lncwogICAgICAgICAgICAgICA7OyBXcml0ZSBvdXQgZ29vZCBzaWduYXR1cmVzIGlu dG8gTkFNRS1WRVJTSU9OLnNpZ25lZCBmaWxlLgogICAgICAgICAgICAgICAod3JpdGUtcmVnaW9u IChtYXBjb25jYXQgIydlcGctc2lnbmF0dXJlLXRvLXN0cmluZyBnb29kLXNpZ3MgIlxuIikKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZXhwYW5kLWZpbGUtbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0 IChwYWNrYWdlLWRlc2MtZnVsbC1uYW1lIHBrZy1kZXNjKSAiLnNpZ25lZCIpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhY2thZ2UtdXNlci1kaXIpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmlsICdzaWxlbnQpCiAgICAgICAgICAgICAgIDs7IFVwZGF0ZSB0aGUgb2xkIHBr Zy1kZXNjIHdoaWNoIHdpbGwgYmUgc2hvd24gb24gdGhlIGRlc2NyaXB0aW9uIGJ1ZmZlci4KICAg ICAgICAgICAgICAgKHNldGYgKHBhY2thZ2UtZGVzYy1zaWduZWQgcGtnLWRlc2MpIHQpCiAgICAg ICAgICAgICAgIDs7IFVwZGF0ZSB0aGUgbmV3IChhY3RpdmF0ZWQpIHBrZy1kZXNjIGFzIHdlbGwu CiAgICAgICAgICAgICAgICh3aGVuLWxldCogKChwa2ctZGVzY3MgKGNkciAoYXNzcSAocGFja2Fn ZS1kZXNjLW5hbWUgcGtnLWRlc2MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYWNrYWdlLWFsaXN0KSkpKQogICAgICAgICAgICAgICAgIChzZXRmIChw YWNrYWdlLWRlc2Mtc2lnbmVkIChjYXIgcGtnLWRlc2NzKSkgdCkpKSkpKSkpKSkKCjs7OyMjI2F1 dG9sb2FkCihkZWZ1biBwYWNrYWdlLWluc3RhbGxlZC1wIChwYWNrYWdlICZvcHRpb25hbCBtaW4t dmVyc2lvbikKICAiUmV0dXJuIG5vbi1uaWwgaWYgUEFDS0FHRSwgb2YgTUlOLVZFUlNJT04gb3Ig bmV3ZXIsIGlzIGluc3RhbGxlZC4KSWYgUEFDS0FHRSBpcyBhIHN5bWJvbCwgaXQgaXMgdGhlIHBh Y2thZ2UgbmFtZSBhbmQgTUlOLVZFUlNJT04Kc2hvdWxkIGJlIGEgdmVyc2lvbiBsaXN0LgoKSWYg UEFDS0FHRSBpcyBhIGBwYWNrYWdlLWRlc2MnIG9iamVjdCwgTUlOLVZFUlNJT04gaXMgaWdub3Jl ZC4iCiAgKGNvbmQKICAgKChwYWNrYWdlLWRlc2MtcCBwYWNrYWdlKQogICAgKGxldCAoKGRpciAo cGFja2FnZS1kZXNjLWRpciBwYWNrYWdlKSkpCiAgICAgICAgKGFuZCAoc3RyaW5ncCBkaXIpCiAg ICAgICAgICAgICAoZmlsZS1leGlzdHMtcCBkaXIpKSkpCiAgICgoYW5kIChub3QgcGFja2FnZS0t aW5pdGlhbGl6ZWQpCiAgICAgICAgIChudWxsIG1pbi12ZXJzaW9uKQogICAgICAgICBwYWNrYWdl LWFjdGl2YXRlZC1saXN0KQogICAgOzsgV2UgdXNlZCB0aGUgcXVpY2tzdGFydDogbWFrZSBpdCBw b3NzaWJsZSB0byB1c2UgcGFja2FnZS1pbnN0YWxsZWQtcAogICAgOzsgZXZlbiBiZWZvcmUgcGFj a2FnZSBpcyBmdWxseSBpbml0aWFsaXplZC4KICAgIChvcgogICAgIChtZW1xIHBhY2thZ2UgcGFj a2FnZS1hY3RpdmF0ZWQtbGlzdCkKICAgICA7OyBBbHNvIGNoZWNrIGJ1aWx0LWluIHBhY2thZ2Vz LgogICAgIChwYWNrYWdlLWJ1aWx0LWluLXAgcGFja2FnZSBtaW4tdmVyc2lvbikpKQogICAodAog ICAgKG9yCiAgICAgKGxldCAoKHBrZy1kZXNjcyAoY2RyIChhc3NxIHBhY2thZ2UgKHBhY2thZ2Ut LWFsaXN0KSkpKSkKICAgICAgIChhbmQgcGtnLWRlc2NzCiAgICAgICAgICAgICh2ZXJzaW9uLWxp c3QtPD0gbWluLXZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1k ZXNjLXZlcnNpb24gKGNhciBwa2ctZGVzY3MpKSkpKQogICAgIDs7IEFsc28gY2hlY2sgYnVpbHQt aW4gcGFja2FnZXMuCiAgICAgKHBhY2thZ2UtYnVpbHQtaW4tcCBwYWNrYWdlIG1pbi12ZXJzaW9u KSkpKSkKCihkZWZ1biBwYWNrYWdlLWRvd25sb2FkLXRyYW5zYWN0aW9uIChwYWNrYWdlcykKICAi RG93bmxvYWQgYW5kIGluc3RhbGwgYWxsIHRoZSBwYWNrYWdlcyBpbiBQQUNLQUdFUy4KUEFDS0FH RVMgc2hvdWxkIGJlIGEgbGlzdCBvZiBgcGFja2FnZS1kZXNjJy4KVGhpcyBmdW5jdGlvbiBhc3N1 bWVzIHRoYXQgYWxsIHBhY2thZ2UgcmVxdWlyZW1lbnRzIGluClBBQ0tBR0VTIGFyZSBzYXRpc2Zp ZWQsIGkuZS4gdGhhdCBQQUNLQUdFUyBpcyBjb21wdXRlZAp1c2luZyBgcGFja2FnZS1jb21wdXRl LXRyYW5zYWN0aW9uJy4iCiAgKG1hcGMgIydwYWNrYWdlLWluc3RhbGwtZnJvbS1hcmNoaXZlIHBh Y2thZ2VzKSkKCihkZWZ1biBwYWNrYWdlLS1hcmNoaXZlcy1pbml0aWFsaXplICgpCiAgIk1ha2Ug c3VyZSB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgYW5kIHJlbW90ZSBwYWNrYWdlcyBhcmUgaW5pdGlh bGl6ZWQuIgogICh1bmxlc3MgcGFja2FnZS0taW5pdGlhbGl6ZWQKICAgIChwYWNrYWdlLWluaXRp YWxpemUgdCkpCiAgKHVubGVzcyBwYWNrYWdlLWFyY2hpdmUtY29udGVudHMKICAgIChwYWNrYWdl LXJlZnJlc2gtY29udGVudHMpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBwYWNrYWdlLWluc3Rh bGwgKHBrZyAmb3B0aW9uYWwgZG9udC1zZWxlY3QpCiAgIkluc3RhbGwgdGhlIHBhY2thZ2UgUEtH LgpQS0cgY2FuIGJlIGEgYHBhY2thZ2UtZGVzYycgb3IgYSBzeW1ib2wgbmFtaW5nIG9uZSBvZiB0 aGUKYXZhaWxhYmxlIHBhY2thZ2VzIGluIGFuIGFyY2hpdmUgaW4gYHBhY2thZ2UtYXJjaGl2ZXMn LiAgV2hlbgpjYWxsZWQgaW50ZXJhY3RpdmVseSwgcHJvbXB0IGZvciB0aGUgcGFja2FnZSBuYW1l LgoKTWFyayB0aGUgaW5zdGFsbGVkIHBhY2thZ2UgYXMgc2VsZWN0ZWQgYnkgYWRkaW5nIGl0IHRv CmBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzJy4KCldoZW4gY2FsbGVkIGZyb20gTGlzcCBhbmQg b3B0aW9uYWwgYXJndW1lbnQgRE9OVC1TRUxFQ1QgaXMKbm9uLW5pbCwgaW5zdGFsbCB0aGUgcGFj a2FnZSBidXQgZG8gbm90IGFkZCBpdCB0bwpgcGFja2FnZS1zZWxlY3RlZC1wYWNrYWdlcycuCgpJ ZiBQS0cgaXMgYSBgcGFja2FnZS1kZXNjJyBhbmQgaXQgaXMgYWxyZWFkeSBpbnN0YWxsZWQsIGRv bid0IHRyeQp0byBpbnN0YWxsIGl0IGJ1dCBzdGlsbCBtYXJrIGl0IGFzIHNlbGVjdGVkLiIKICAo aW50ZXJhY3RpdmUKICAgKHByb2duCiAgICAgOzsgSW5pdGlhbGl6ZSB0aGUgcGFja2FnZSBzeXN0 ZW0gdG8gZ2V0IHRoZSBsaXN0IG9mIHBhY2thZ2UKICAgICA7OyBzeW1ib2xzIGZvciBjb21wbGV0 aW9uLgogICAgIChwYWNrYWdlLS1hcmNoaXZlcy1pbml0aWFsaXplKQogICAgIChsaXN0IChpbnRl cm4gKGNvbXBsZXRpbmctcmVhZAogICAgICAgICAgICAgICAgICAgICJJbnN0YWxsIHBhY2thZ2U6 ICIKICAgICAgICAgICAgICAgICAgICAoZGVscSBuaWwKICAgICAgICAgICAgICAgICAgICAgICAg ICAobWFwY2FyIChsYW1iZGEgKGVsdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHVubGVzcyAocGFja2FnZS1pbnN0YWxsZWQtcCAoY2FyIGVsdCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC1uYW1lIChjYXIgZWx0KSkpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS1hcmNoaXZlLWNvbnRlbnRzKSkKICAg ICAgICAgICAgICAgICAgICBuaWwgdCkpCiAgICAgICAgICAgbmlsKSkpCiAgKHBhY2thZ2UtLWFy Y2hpdmVzLWluaXRpYWxpemUpCiAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayAjJ3BhY2th Z2UtbWVudS0tcG9zdC1yZWZyZXNoKQogIChsZXQgKChuYW1lIChpZiAocGFja2FnZS1kZXNjLXAg cGtnKQogICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLW5hbWUgcGtnKQogICAgICAgICAg ICAgICAgcGtnKSkpCiAgICAodW5sZXNzIChvciBkb250LXNlbGVjdCAocGFja2FnZS0tdXNlci1z ZWxlY3RlZC1wIG5hbWUpKQogICAgICAocGFja2FnZS0tc2F2ZS1zZWxlY3RlZC1wYWNrYWdlcwog ICAgICAgKGNvbnMgbmFtZSBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzKSkpCiAgICAoaWYtbGV0 KiAoKHRyYW5zYWN0aW9uCiAgICAgICAgICAgICAgIChpZiAocGFja2FnZS1kZXNjLXAgcGtnKQog ICAgICAgICAgICAgICAgICAgKHVubGVzcyAocGFja2FnZS1pbnN0YWxsZWQtcCBwa2cpCiAgICAg ICAgICAgICAgICAgICAgIChwYWNrYWdlLWNvbXB1dGUtdHJhbnNhY3Rpb24gKGxpc3QgcGtnKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdl LWRlc2MtcmVxcyBwa2cpKSkKICAgICAgICAgICAgICAgICAocGFja2FnZS1jb21wdXRlLXRyYW5z YWN0aW9uICgpIChsaXN0IChsaXN0IHBrZykpKSkpKQogICAgICAgIChwcm9nbgogICAgICAgICAg KHBhY2thZ2UtZG93bmxvYWQtdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24pCiAgICAgICAgICAocGFj a2FnZS0tcXVpY2tzdGFydC1tYXliZS1yZWZyZXNoKQogICAgICAgICAgKG1lc3NhZ2UgICJQYWNr YWdlIGAlcycgaW5zdGFsbGVkLiIgbmFtZSkpCiAgICAgIChtZXNzYWdlICJgJXMnIGlzIGFscmVh ZHkgaW5zdGFsbGVkIiBuYW1lKSkpKQoKKGRlY2xhcmUtZnVuY3Rpb24gcGFja2FnZS12Yy11cGRh dGUgInBhY2thZ2UtdmMiIChwa2cpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHBhY2thZ2UtdXBk YXRlIChuYW1lKQogICJVcGRhdGUgcGFja2FnZSBOQU1FIGlmIGEgbmV3ZXIgdmVyc2lvbiBleGlz dHMuIgogIChpbnRlcmFjdGl2ZQogICAobGlzdCAoY29tcGxldGluZy1yZWFkCiAgICAgICAgICAi VXBkYXRlIHBhY2thZ2U6ICIgKHBhY2thZ2UtLXVwZGF0ZWFibGUtcGFja2FnZXMpIG5pbCB0KSkp CiAgKGxldCogKChwYWNrYWdlIChpZiAoc3ltYm9scCBuYW1lKQogICAgICAgICAgICAgICAgICAg ICAgbmFtZQogICAgICAgICAgICAgICAgICAgIChpbnRlcm4gbmFtZSkpKQogICAgICAgICAocGtn LWRlc2MgKGNhZHIgKGFzc3EgcGFja2FnZSBwYWNrYWdlLWFsaXN0KSkpKQogICAgKGlmIChwYWNr YWdlLXZjLXAgcGtnLWRlc2MpCiAgICAgICAgKHBhY2thZ2UtdmMtdXBkYXRlIHBrZy1kZXNjKQog ICAgICAocGFja2FnZS1kZWxldGUgcGtnLWRlc2MgJ2ZvcmNlKQogICAgICAocGFja2FnZS1pbnN0 YWxsIHBhY2thZ2UgJ2RvbnQtc2VsZWN0KSkpKQoKKGRlZnVuIHBhY2thZ2UtLXVwZGF0ZWFibGUt cGFja2FnZXMgKCkKICA7OyBJbml0aWFsaXplIHRoZSBwYWNrYWdlIHN5c3RlbSB0byBnZXQgdGhl IGxpc3Qgb2YgcGFja2FnZQogIDs7IHN5bWJvbHMgZm9yIGNvbXBsZXRpb24uCiAgKHBhY2thZ2Ut LWFyY2hpdmVzLWluaXRpYWxpemUpCiAgKG1hcGNhcgogICAjJ2NhcgogICAoc2VxLWZpbHRlcgog ICAgKGxhbWJkYSAoZWx0KQogICAgICAob3IgKGxldCAoKGF2YWlsYWJsZQogICAgICAgICAgICAg ICAgIChhc3NxIChjYXIgZWx0KSBwYWNrYWdlLWFyY2hpdmUtY29udGVudHMpKSkKICAgICAgICAg ICAgKGFuZCBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAodmVyc2lvbi1saXN0LTwKICAgICAg ICAgICAgICAgICAgKHBhY2thZ2UtZGVzYy12ZXJzaW9uIChjYWRyIGVsdCkpCiAgICAgICAgICAg ICAgICAgIChwYWNrYWdlLWRlc2MtdmVyc2lvbiAoY2FkciBhdmFpbGFibGUpKSkpKQogICAgICAg ICAgKHBhY2thZ2UtdmMtcCAoY2FkciAoYXNzcSAoY2FyIGVsdCkgcGFja2FnZS1hbGlzdCkpKSkp CiAgICBwYWNrYWdlLWFsaXN0KSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gcGFja2FnZS11cGRh dGUtYWxsICgmb3B0aW9uYWwgcXVlcnkpCiAgIlJlZnJlc2ggcGFja2FnZSBsaXN0IGFuZCB1cGdy YWRlIGFsbCBwYWNrYWdlcy4KSWYgUVVFUlksIGFzayB0aGUgdXNlciBiZWZvcmUgdXBkYXRpbmcg cGFja2FnZXMuICBXaGVuIGNhbGxlZAppbnRlcmFjdGl2ZWx5LCBRVUVSWSBpcyBhbHdheXMgdHJ1 ZS4iCiAgKGludGVyYWN0aXZlIChsaXN0IChub3Qgbm9uaW50ZXJhY3RpdmUpKSkKICAocGFja2Fn ZS1yZWZyZXNoLWNvbnRlbnRzKQogIChsZXQgKCh1cGRhdGVhYmxlIChwYWNrYWdlLS11cGRhdGVh YmxlLXBhY2thZ2VzKSkpCiAgICAoaWYgKG5vdCB1cGRhdGVhYmxlKQogICAgICAgIChtZXNzYWdl ICJObyBwYWNrYWdlcyB0byB1cGRhdGUiKQogICAgICAod2hlbiAoYW5kIHF1ZXJ5CiAgICAgICAg ICAgICAgICAgKG5vdCAoeWVzLW9yLW5vLXAKICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGxl bmd0aD0gdXBkYXRlYWJsZSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAiT25lIHBhY2th Z2UgdG8gdXBkYXRlLiAgRG8gaXQ/ICIKICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQg IiVzIHBhY2thZ2VzIHRvIHVwZGF0ZS4gIERvIGl0PyIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxlbmd0aCB1cGRhdGVhYmxlKSkpKSkpCiAgICAgICAgKHVzZXItZXJyb3IgIlVw ZGF0aW5nIGFib3J0ZWQiKSkKICAgICAgKG1hcGMgIydwYWNrYWdlLXVwZGF0ZSB1cGRhdGVhYmxl KSkpKQoKKGRlZnVuIHBhY2thZ2UtLWRlcGVuZGVuY2llcyAocGtnKQogICJSZXR1cm4gYSBsaXN0 IG9mIGFsbCBkZXBlbmRlbmNpZXMgUEtHIGhhcy4KVGhpcyBpcyBkb25lIHJlY3Vyc2l2ZWx5LiIK ICA7OyBDYW4gd2UgaGF2ZSBjaXJjdWxhciBkZXBlbmRlbmNpZXM/ICBBc3N1bWUgIm5vcGUiLgog ICh3aGVuLWxldCogKChkZXNjIChjYWRyIChhc3NxIHBrZyBwYWNrYWdlLWFyY2hpdmUtY29udGVu dHMpKSkKICAgICAgICAgICAgICAoZGVwcyAobWFwY2FyICMnY2FyIChwYWNrYWdlLWRlc2MtcmVx cyBkZXNjKSkpKQogICAgKGRlbGV0ZS1kdXBzIChhcHBseSAjJ25jb25jIGRlcHMgKG1hcGNhciAj J3BhY2thZ2UtLWRlcGVuZGVuY2llcyBkZXBzKSkpKSkKCihkZWZ1biBwYWNrYWdlLXN0cmlwLXJj cy1pZCAoc3RyKQogICJTdHJpcCBSQ1MgdmVyc2lvbiBJRCBmcm9tIHRoZSB2ZXJzaW9uIHN0cmlu ZyBTVFIuCklmIHRoZSByZXN1bHQgbG9va3MgbGlrZSBhIGRvdHRlZCBudW1lcmljIHZlcnNpb24s IHJldHVybiBpdC4KT3RoZXJ3aXNlIHJldHVybiBuaWwuIgogICh3aGVuIHN0cgogICAgKHdoZW4g KHN0cmluZy1tYXRjaCAiXFxgWyBcdF0qWyRdUmV2aXNpb246WyBcdF0rIiBzdHIpCiAgICAgIChz ZXRxIHN0ciAoc3Vic3RyaW5nIHN0ciAobWF0Y2gtZW5kIDApKSkpCiAgICAobGV0ICgobCAodmVy c2lvbi10by1saXN0IHN0cikpKQogICAgICA7OyBEb24ndCByZXR1cm4gYHN0cicgYnV0IChwYWNr YWdlLXZlcnNpb24tam9pbiAodmVyc2lvbi10by1saXN0IHN0cikpCiAgICAgIDs7IHRvIG1ha2Ug c3VyZSB3ZSB1c2UgYSAiY2Fub25pY2FsIG5hbWUiIQogICAgICAoaWYgbCAocGFja2FnZS12ZXJz aW9uLWpvaW4gbCkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gcGFja2FnZS1pbnN0YWxsLWZy b20tYnVmZmVyICgpCiAgIkluc3RhbGwgYSBwYWNrYWdlIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVy LgpUaGUgY3VycmVudCBidWZmZXIgaXMgYXNzdW1lZCB0byBiZSBhIHNpbmdsZSAuZWwgb3IgLnRh ciBmaWxlIG9yCmEgZGlyZWN0b3J5LiAgVGhlc2UgbXVzdCBmb2xsb3cgdGhlIHBhY2thZ2luZyBn dWlkZWxpbmVzIChzZWUKaW5mbyBub2RlIGAoZWxpc3ApUGFja2FnaW5nJykuCgpTcGVjaWFsbHks IGlmIGN1cnJlbnQgYnVmZmVyIGlzIGEgZGlyZWN0b3J5LCB0aGUgLXBrZy5lbApkZXNjcmlwdGlv biBmaWxlIGlzIG5vdCBtYW5kYXRvcnksIGluIHdoaWNoIGNhc2UgdGhlIGluZm9ybWF0aW9uCmlz IGRlcml2ZWQgZnJvbSB0aGUgbWFpbiAuZWwgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LgoKRG93bmxv YWRzIGFuZCBpbnN0YWxscyByZXF1aXJlZCBwYWNrYWdlcyBhcyBuZWVkZWQuIgogIChpbnRlcmFj dGl2ZSkKICAobGV0KiAoKHBrZy1kZXNjCiAgICAgICAgICAoY29uZAogICAgICAgICAgICAoKGRl cml2ZWQtbW9kZS1wICdkaXJlZC1tb2RlKQogICAgICAgICAgICAgOzsgVGhpcyBpcyB0aGUgb25s eSB3YXkgYSBwYWNrYWdlLWRlc2Mgb2JqZWN0IHdpdGggYSBgZGlyJwogICAgICAgICAgICAgOzsg ZGVzYy1raW5kIGNhbiBiZSBjcmVhdGVkLiAgU3VjaCBwYWNrYWdlcyBjYW4ndCBiZQogICAgICAg ICAgICAgOzsgdXBsb2FkZWQgb3IgaW5zdGFsbGVkIGZyb20gYXJjaGl2ZXMsIHRoZXkgY2FuIG9u bHkgYmUKICAgICAgICAgICAgIDs7IGluc3RhbGxlZCBmcm9tIGxvY2FsIGJ1ZmZlcnMgb3IgZGly ZWN0b3JpZXMuCiAgICAgICAgICAgICAocGFja2FnZS1kaXItaW5mbykpCiAgICAgICAgICAgICgo ZGVyaXZlZC1tb2RlLXAgJ3Rhci1tb2RlKQogICAgICAgICAgICAgKHBhY2thZ2UtdGFyLWZpbGUt aW5mbykpCiAgICAgICAgICAgICh0CiAgICAgICAgICAgICA7OyBQYWNrYWdlIGhlYWRlcnMgc2hv dWxkIGJlIHBhcnNlZCBmcm9tIGRlY29kZWQgdGV4dAogICAgICAgICAgICAgOzsgKHNlZSBCdWcj NDgxMzcpIHdoZXJlIHBvc3NpYmxlLgogICAgICAgICAgICAgKGlmIChhbmQgKGVxIGJ1ZmZlci1m aWxlLWNvZGluZy1zeXN0ZW0gJ25vLWNvbnZlcnNpb24pCiAgICAgICAgICAgICAgICAgICAgICBi dWZmZXItZmlsZS1uYW1lKQogICAgICAgICAgICAgICAgIChsZXQqICgocGFja2FnZS1idWZmZXIg KGN1cnJlbnQtYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgICAgKGRlY29kaW5nLXN5c3Rl bQogICAgICAgICAgICAgICAgICAgICAgICAgKGNhciAoZmluZC1vcGVyYXRpb24tY29kaW5nLXN5 c3RlbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luc2VydC1maWxlLWNvbnRlbnRz CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyBidWZmZXItZmlsZS1uYW1lCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLWJ1ZmZlcikpKSkpCiAg ICAgICAgICAgICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAo aW5zZXJ0LWJ1ZmZlci1zdWJzdHJpbmcgcGFja2FnZS1idWZmZXIpCiAgICAgICAgICAgICAgICAg ICAgIChkZWNvZGUtY29kaW5nLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rpbmctc3lzdGVtKQogICAg ICAgICAgICAgICAgICAgICAocGFja2FnZS1idWZmZXItaW5mbykpKQoKICAgICAgICAgICAgICAg KHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgKHBhY2thZ2UtYnVmZmVyLWluZm8pKSkp KSkKICAgICAgICAgKG5hbWUgKHBhY2thZ2UtZGVzYy1uYW1lIHBrZy1kZXNjKSkpCiAgICA7OyBE b3dubG9hZCBhbmQgaW5zdGFsbCB0aGUgZGVwZW5kZW5jaWVzLgogICAgKGxldCogKChyZXF1aXJl cyAocGFja2FnZS1kZXNjLXJlcXMgcGtnLWRlc2MpKQogICAgICAgICAgICh0cmFuc2FjdGlvbiAo cGFja2FnZS1jb21wdXRlLXRyYW5zYWN0aW9uIG5pbCByZXF1aXJlcykpKQogICAgICAocGFja2Fn ZS1kb3dubG9hZC10cmFuc2FjdGlvbiB0cmFuc2FjdGlvbikpCiAgICA7OyBJbnN0YWxsIHRoZSBw YWNrYWdlIGl0c2VsZi4KICAgIChwYWNrYWdlLXVucGFjayBwa2ctZGVzYykKICAgICh1bmxlc3Mg KHBhY2thZ2UtLXVzZXItc2VsZWN0ZWQtcCBuYW1lKQogICAgICAocGFja2FnZS0tc2F2ZS1zZWxl Y3RlZC1wYWNrYWdlcwogICAgICAgKGNvbnMgbmFtZSBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2Vz KSkpCiAgICAocGFja2FnZS0tcXVpY2tzdGFydC1tYXliZS1yZWZyZXNoKQogICAgcGtnLWRlc2Mp KQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHBhY2thZ2UtaW5zdGFsbC1maWxlIChmaWxlKQogICJJ bnN0YWxsIGEgcGFja2FnZSBmcm9tIEZJTEUuClRoZSBmaWxlIGNhbiBlaXRoZXIgYmUgYSB0YXIg ZmlsZSwgYW4gRW1hY3MgTGlzcCBmaWxlLCBvciBhCmRpcmVjdG9yeS4iCiAgKGludGVyYWN0aXZl ICJmUGFja2FnZSBmaWxlIG5hbWU6ICIpCiAgKHdpdGgtdGVtcC1idWZmZXIKICAgIChpZiAoZmls ZS1kaXJlY3RvcnktcCBmaWxlKQogICAgICAgIChwcm9nbgogICAgICAgICAgKHNldHEgZGVmYXVs dC1kaXJlY3RvcnkgZmlsZSkKICAgICAgICAgIChkaXJlZC1tb2RlKSkKICAgICAgKGluc2VydC1m aWxlLWNvbnRlbnRzLWxpdGVyYWxseSBmaWxlKQogICAgICAoc2V0LXZpc2l0ZWQtZmlsZS1uYW1l IGZpbGUpCiAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKQogICAgICAod2hlbiAoc3Ry aW5nLW1hdGNoICJcXC50YXJcXCciIGZpbGUpICh0YXItbW9kZSkpKQogICAgKHBhY2thZ2UtaW5z dGFsbC1mcm9tLWJ1ZmZlcikpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHBhY2thZ2UtaW5zdGFs bC1zZWxlY3RlZC1wYWNrYWdlcyAoJm9wdGlvbmFsIG5vY29uZmlybSkKICAiRW5zdXJlIHBhY2th Z2VzIGluIGBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzJyBhcmUgaW5zdGFsbGVkLgpJZiBzb21l IHBhY2thZ2VzIGFyZSBub3QgaW5zdGFsbGVkLCBwcm9wb3NlIHRvIGluc3RhbGwgdGhlbS4KSWYg b3B0aW9uYWwgYXJndW1lbnQgTk9DT05GSVJNIGlzIG5vbi1uaWwsIGRvbid0IGFzayBmb3IKY29u ZmlybWF0aW9uIHRvIGluc3RhbGwgcGFja2FnZXMuIgogIChpbnRlcmFjdGl2ZSkKICAocGFja2Fn ZS0tYXJjaGl2ZXMtaW5pdGlhbGl6ZSkKICA7OyBXZSBkb24ndCBuZWVkIHRvIHBvcHVsYXRlIGBw YWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzJyBiZWZvcmUKICA7OyB1c2luZyBoZXJlLCBiZWNhdXNl IHRoZSBvdXRjb21lIGlzIHRoZSBzYW1lIGVpdGhlciB3YXkgKG5vdGhpbmcKICA7OyBnZXRzIGlu c3RhbGxlZCkuCiAgKGlmIChub3QgcGFja2FnZS1zZWxlY3RlZC1wYWNrYWdlcykKICAgICAgKG1l c3NhZ2UgImBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzJyBpcyBlbXB0eSwgbm90aGluZyB0byBp bnN0YWxsIikKICAgIChsZXQqICgobm90LWluc3RhbGxlZCAoc2VxLXJlbW92ZSAjJ3BhY2thZ2Ut aW5zdGFsbGVkLXAgcGFja2FnZS1zZWxlY3RlZC1wYWNrYWdlcykpCiAgICAgICAgICAgKGF2YWls YWJsZSAoc2VxLWZpbHRlciAobGFtYmRhIChwKSAoYXNzcSBwIHBhY2thZ2UtYXJjaGl2ZS1jb250 ZW50cykpIG5vdC1pbnN0YWxsZWQpKQogICAgICAgICAgIChkaWZmZXJlbmNlICgtIChsZW5ndGgg bm90LWluc3RhbGxlZCkgKGxlbmd0aCBhdmFpbGFibGUpKSkpCiAgICAgIChjb25kCiAgICAgICAo YXZhaWxhYmxlCiAgICAgICAgKHdoZW4gKG9yIG5vY29uZmlybQogICAgICAgICAgICAgICAgICAo eS1vci1uLXAKICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIlBhY2thZ2VzIHRvIGluc3RhbGw6 ICVkICglcyksIHByb2NlZWQ/ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbmd0aCBh dmFpbGFibGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXBjb25jYXQgIydzeW1ib2wt bmFtZSBhdmFpbGFibGUgIiAiKSkpKQogICAgICAgICAgKG1hcGMgKGxhbWJkYSAocCkgKHBhY2th Z2UtaW5zdGFsbCBwICdkb250LXNlbGVjdCkpIGF2YWlsYWJsZSkpKQogICAgICAgKCg+IGRpZmZl cmVuY2UgMCkKICAgICAgICAobWVzc2FnZSAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMKICAgICAg ICAgICAgICAgICAgIlBhY2thZ2VzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGU6ICVkICh0aGUgcmVz dCBpcyBhbHJlYWR5IFwKaW5zdGFsbGVkKSwgbWF5YmUgeW91IG5lZWQgdG8gXFxbcGFja2FnZS1y ZWZyZXNoLWNvbnRlbnRzXSIpCiAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSkpCiAgICAgICAo dAogICAgICAgIChtZXNzYWdlICJBbGwgeW91ciBwYWNrYWdlcyBhcmUgYWxyZWFkeSBpbnN0YWxs ZWQiKSkpKSkpCgoMCjs7OyBQYWNrYWdlIERlbGV0aW9uCgooZGVmdW4gcGFja2FnZS0tbmV3ZXN0 LXAgKHBrZykKICAiUmV0dXJuIG5vbi1uaWwgaWYgUEtHIGlzIHRoZSBuZXdlc3QgcGFja2FnZSB3 aXRoIGl0cyBuYW1lLiIKICAoZXF1YWwgKGNhZHIgKGFzc3EgKHBhY2thZ2UtZGVzYy1uYW1lIHBr ZykgcGFja2FnZS1hbGlzdCkpCiAgICAgICAgIHBrZykpCgooZGVjbGFyZS1mdW5jdGlvbiBjb21w LWVsLXRvLWVsbi1maWxlbmFtZSAiY29tcC5jIikKKGRlZnZhciBwYWNrYWdlLXZjLXJlcG9zaXRv cnktc3RvcmUpCihkZWZ1biBwYWNrYWdlLS1kZWxldGUtZGlyZWN0b3J5IChkaXIpCiAgIkRlbGV0 ZSBQS0ctREVTQyBkaXJlY3RvcnkgRElSIHJlY3Vyc2l2ZWx5LgpDbGVhbi11cCB0aGUgY29ycmVz cG9uZGluZyAuZWxuIGZpbGVzIGlmIEVtYWNzIGlzIG5hdGl2ZQpjb21waWxlZC4iCiAgKHdoZW4g KGZlYXR1cmVwICduYXRpdmUtY29tcGlsZSkKICAgIChjbC1sb29wCiAgICAgZm9yIGZpbGUgaW4g KGRpcmVjdG9yeS1maWxlcy1yZWN1cnNpdmVseSBkaXIgIlxcLmVsXFwnIikKICAgICBkbyAoY29t cC1jbGVhbi11cC1zdGFsZS1lbG4gKGNvbXAtZWwtdG8tZWxuLWZpbGVuYW1lIGZpbGUpKSkpCiAg KGlmIChmaWxlLXN5bWxpbmstcCAoZGlyZWN0b3J5LWZpbGUtbmFtZSBkaXIpKQogICAgICAoZGVs ZXRlLWZpbGUgKGRpcmVjdG9yeS1maWxlLW5hbWUgZGlyKSkKICAgIChkZWxldGUtZGlyZWN0b3J5 IGRpciB0KSkpCgoKKGRlZnVuIHBhY2thZ2UtZGVsZXRlIChwa2ctZGVzYyAmb3B0aW9uYWwgZm9y Y2Ugbm9zYXZlKQogICJEZWxldGUgcGFja2FnZSBQS0ctREVTQy4KCkFyZ3VtZW50IFBLRy1ERVND IGlzIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiBwYWNrYWdlIGFzIHZlY3Rvci4KSW50ZXJhY3RpdmVs eSwgcHJvbXB0IHRoZSB1c2VyIGZvciB0aGUgcGFja2FnZSBuYW1lIGFuZCB2ZXJzaW9uLgoKV2hl biBwYWNrYWdlIGlzIHVzZWQgZWxzZXdoZXJlIGFzIGRlcGVuZGVuY3kgb2YgYW5vdGhlciBwYWNr YWdlLApyZWZ1c2UgZGVsZXRpbmcgaXQgYW5kIHJldHVybiBhbiBlcnJvci4KSWYgcHJlZml4IGFy Z3VtZW50IEZPUkNFIGlzIG5vbi1uaWwsIHBhY2thZ2Ugd2lsbCBiZSBkZWxldGVkIGV2ZW4KaWYg aXQgaXMgdXNlZCBlbHNld2hlcmUuCklmIE5PU0FWRSBpcyBub24tbmlsLCB0aGUgcGFja2FnZSBp cyBub3QgcmVtb3ZlZCBmcm9tCmBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzJy4iCiAgKGludGVy YWN0aXZlCiAgIChwcm9nbgogICAgIChsZXQqICgocGFja2FnZS10YWJsZQogICAgICAgICAgICAg KG1hcGNhcgogICAgICAgICAgICAgIChsYW1iZGEgKHApIChjb25zIChwYWNrYWdlLWRlc2MtZnVs bC1uYW1lIHApIHApKQogICAgICAgICAgICAgIChkZWxxIG5pbAogICAgICAgICAgICAgICAgICAg IChtYXBjYXIgKGxhbWJkYSAocCkgKHVubGVzcyAocGFja2FnZS1idWlsdC1pbi1wIHApIHApKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGx5ICMnYXBwZW5kIChtYXBjYXIgIydjZHIg KHBhY2thZ2UtLWFsaXN0KSkpKSkpKQogICAgICAgICAgICAocGFja2FnZS1uYW1lIChjb21wbGV0 aW5nLXJlYWQgIkRlbGV0ZSBwYWNrYWdlOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobWFwY2FyICMnY2FyIHBhY2thZ2UtdGFibGUpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgdCkpKQogICAgICAgKGxpc3QgKGNkciAo YXNzb2MgcGFja2FnZS1uYW1lIHBhY2thZ2UtdGFibGUpKQogICAgICAgICAgICAgY3VycmVudC1w cmVmaXgtYXJnIG5pbCkpKSkKICAobGV0ICgoZGlyIChwYWNrYWdlLWRlc2MtZGlyIHBrZy1kZXNj KSkKICAgICAgICAobmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKQogICAgICAgIHBr Zy11c2VkLWVsc2V3aGVyZS1ieSkKICAgIDs7IElmIHRoZSB1c2VyIGlzIHRyeWluZyB0byBkZWxl dGUgdGhpcyBwYWNrYWdlLCB0aGV5IGRlZmluaXRlbHkKICAgIDs7IGRvbid0IHdhbnQgaXQgbWFy a2VkIGFzIHNlbGVjdGVkLCBzbyB3ZSByZW1vdmUgaXQgZnJvbQogICAgOzsgYHBhY2thZ2Utc2Vs ZWN0ZWQtcGFja2FnZXMnIGV2ZW4gaWYgaXQgY2FuJ3QgYmUgZGVsZXRlZC4KICAgICh3aGVuIChh bmQgKG51bGwgbm9zYXZlKQogICAgICAgICAgICAgICAocGFja2FnZS0tdXNlci1zZWxlY3RlZC1w IG5hbWUpCiAgICAgICAgICAgICAgIDs7IERvbid0IGRlc2VsZWN0IGlmIHRoaXMgaXMgYW4gb2xk ZXIgdmVyc2lvbiBvZiBhbgogICAgICAgICAgICAgICA7OyB1cGdyYWRlZCBwYWNrYWdlLgogICAg ICAgICAgICAgICAocGFja2FnZS0tbmV3ZXN0LXAgcGtnLWRlc2MpKQogICAgICAocGFja2FnZS0t c2F2ZS1zZWxlY3RlZC1wYWNrYWdlcyAocmVtb3ZlIG5hbWUgcGFja2FnZS1zZWxlY3RlZC1wYWNr YWdlcykpKQogICAgKGNvbmQgKChub3QgKHN0cmluZy1wcmVmaXgtcCAoZmlsZS1uYW1lLWFzLWRp cmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGFuZC1maWxlLW5h bWUgcGFja2FnZS11c2VyLWRpcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl eHBhbmQtZmlsZS1uYW1lIGRpcikpKQogICAgICAgICAgIDs7IERvbid0IGRlbGV0ZSAic3lzdGVt IiBwYWNrYWdlcy4KICAgICAgICAgICAoZXJyb3IgIlBhY2thZ2UgYCVzJyBpcyBhIHN5c3RlbSBw YWNrYWdlLCBub3QgZGVsZXRpbmciCiAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlc2MtZnVs bC1uYW1lIHBrZy1kZXNjKSkpCiAgICAgICAgICAoKGFuZCAobnVsbCBmb3JjZSkKICAgICAgICAg ICAgICAgIChzZXRxIHBrZy11c2VkLWVsc2V3aGVyZS1ieQogICAgICAgICAgICAgICAgICAgICAg KHBhY2thZ2UtLXVzZWQtZWxzZXdoZXJlLXAgcGtnLWRlc2MpKSkKICAgICAgICAgICA7OyBEb24n dCBkZWxldGUgcGFja2FnZXMgdXNlZCBhcyBkZXBlbmRlbmN5IGVsc2V3aGVyZS4KICAgICAgICAg ICAoZXJyb3IgIlBhY2thZ2UgYCVzJyBpcyB1c2VkIGJ5IGAlcycgYXMgZGVwZW5kZW5jeSwgbm90 IGRlbGV0aW5nIgogICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLWZ1bGwtbmFtZSBwa2ct ZGVzYykKICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVzYy1uYW1lIHBrZy11c2VkLWVsc2V3 aGVyZS1ieSkpKQogICAgICAgICAgKHQKICAgICAgICAgICAoYWRkLWhvb2sgJ3Bvc3QtY29tbWFu ZC1ob29rICMncGFja2FnZS1tZW51LS1wb3N0LXJlZnJlc2gpCiAgICAgICAgICAgKHBhY2thZ2Ut LWRlbGV0ZS1kaXJlY3RvcnkgZGlyKQogICAgICAgICAgIDs7IFJlbW92ZSBOQU1FLVZFUlNJT04u c2lnbmVkIGFuZCBOQU1FLXJlYWRtZS50eHQgZmlsZXMuCiAgICAgICAgICAgOzsKICAgICAgICAg ICA7OyBOQU1FLXJlYWRtZS50eHQgZmlsZXMgYXJlIG5vIGxvbmdlciBjcmVhdGVkLCBidXQgdGhl eQogICAgICAgICAgIDs7IG1heSBiZSBsZWZ0IGFyb3VuZCBmcm9tIGFuIGVhcmxpZXIgaW5zdGFs bC4KICAgICAgICAgICAoZG9saXN0IChzdWZmaXggJygiLnNpZ25lZCIgInJlYWRtZS50eHQiKSkK ICAgICAgICAgICAgIChsZXQqICgodmVyc2lvbiAocGFja2FnZS12ZXJzaW9uLWpvaW4gKHBhY2th Z2UtZGVzYy12ZXJzaW9uIHBrZy1kZXNjKSkpCiAgICAgICAgICAgICAgICAgICAgKGZpbGUgKGNv bmNhdCAoaWYgKHN0cmluZz0gc3VmZml4ICIuc2lnbmVkIikKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHN1YnN0cmluZyBkaXIgMCAoLSAobGVuZ3RoIHZlcnNpb24pKSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdWZmaXgpKSkKICAgICAgICAgICAgICAgKHdoZW4gKGZpbGUtZXhp c3RzLXAgZmlsZSkKICAgICAgICAgICAgICAgICAoZGVsZXRlLWZpbGUgZmlsZSkpKSkKICAgICAg ICAgICA7OyBVcGRhdGUgcGFja2FnZS1hbGlzdC4KICAgICAgICAgICAobGV0ICgocGtncyAoYXNz cSBuYW1lIHBhY2thZ2UtYWxpc3QpKSkKICAgICAgICAgICAgIChkZWxldGUgcGtnLWRlc2MgcGtn cykKICAgICAgICAgICAgICh1bmxlc3MgKGNkciBwa2dzKQogICAgICAgICAgICAgICAoc2V0cSBw YWNrYWdlLWFsaXN0IChkZWxxIHBrZ3MgcGFja2FnZS1hbGlzdCkpKSkKICAgICAgICAgICAocGFj a2FnZS0tcXVpY2tzdGFydC1tYXliZS1yZWZyZXNoKQogICAgICAgICAgIChtZXNzYWdlICJQYWNr YWdlIGAlcycgZGVsZXRlZC4iCiAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVzYy1mdWxs LW5hbWUgcGtnLWRlc2MpKSkpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBwYWNrYWdlLXJlaW5z dGFsbCAocGtnKQogICJSZWluc3RhbGwgcGFja2FnZSBQS0cuClBLRyBzaG91bGQgYmUgZWl0aGVy IGEgc3ltYm9sLCB0aGUgcGFja2FnZSBuYW1lLCBvciBhIGBwYWNrYWdlLWRlc2MnCm9iamVjdC4i CiAgKGludGVyYWN0aXZlCiAgIChwcm9nbgogICAgIChwYWNrYWdlLS1hcmNoaXZlcy1pbml0aWFs aXplKQogICAgIChsaXN0IChpbnRlcm4gKGNvbXBsZXRpbmctcmVhZAogICAgICAgICAgICAgICAg ICAgICJSZWluc3RhbGwgcGFja2FnZTogIgogICAgICAgICAgICAgICAgICAgIChtYXBjYXIgIydz eW1ib2wtbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhciAjJ2NhciBwYWNr YWdlLWFsaXN0KSkpKSkpKQogIChwYWNrYWdlLS1hcmNoaXZlcy1pbml0aWFsaXplKQogIChwYWNr YWdlLWRlbGV0ZQogICAoaWYgKHBhY2thZ2UtZGVzYy1wIHBrZykgcGtnIChjYWRyIChhc3NxIHBr ZyBwYWNrYWdlLWFsaXN0KSkpCiAgICdmb3JjZSAnbm9zYXZlKQogIChwYWNrYWdlLWluc3RhbGwg cGtnICdkb250LXNlbGVjdCkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gcGFja2FnZS1yZWNvbXBp bGUgKHBrZykKICAiQnl0ZS1jb21waWxlIHBhY2thZ2UgUEtHIGFnYWluLgpQS0cgc2hvdWxkIGJl IGVpdGhlciBhIHN5bWJvbCwgdGhlIHBhY2thZ2UgbmFtZSwgb3IgYSBgcGFja2FnZS1kZXNjJwpv YmplY3QuIgogIChpbnRlcmFjdGl2ZSAobGlzdCAoaW50ZXJuIChjb21wbGV0aW5nLXJlYWQKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlY29tcGlsZSBwYWNrYWdlOiAiCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChtYXBjYXIgIydzeW1ib2wtbmFtZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChtYXBjYXIgIydjYXIgcGFja2FnZS1hbGlzdCkpKSkp KQogIChsZXQgKChwa2ctZGVzYyAoaWYgKHBhY2thZ2UtZGVzYy1wIHBrZykKICAgICAgICAgICAg ICAgICAgICAgIHBrZwogICAgICAgICAgICAgICAgICAgIChjYWRyIChhc3NxIHBrZyBwYWNrYWdl LWFsaXN0KSkpKSkKICAgIDs7IERlbGV0ZSB0aGUgb2xkIC5lbGMgZmlsZXMgdG8gZW5zdXJlIHRo YXQgd2UgZG9uJ3QgaW5hZHZlcnRlbnRseQogICAgOzsgbG9hZCB0aGVtIChpbiBjYXNlIHRoZXkg Y29udGFpbiBieXRlIGNvZGUvbWFjcm9zIHRoYXQgYXJlIG5vdwogICAgOzsgaW52YWxpZCkuCiAg ICAoZG9saXN0IChlbGMgKGRpcmVjdG9yeS1maWxlcy1yZWN1cnNpdmVseQogICAgICAgICAgICAg ICAgICAocGFja2FnZS1kZXNjLWRpciBwa2ctZGVzYykgIlxcLmVsY1xcJyIpKQogICAgICAoZGVs ZXRlLWZpbGUgZWxjKSkKICAgIChwYWNrYWdlLS1jb21waWxlIHBrZy1kZXNjKSkpCgo7OzsjIyNh dXRvbG9hZAooZGVmdW4gcGFja2FnZS1yZWNvbXBpbGUtYWxsICgpCiAgIkJ5dGUtY29tcGlsZSBh bGwgaW5zdGFsbGVkIHBhY2thZ2VzLgpUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQgb25seSBpbiB0 aGUgY2FzZSB0aGUgYnl0ZS1jb21waWxlZCBmaWxlcwphcmUgaW52YWxpZCBkdWUgdG8gY2hhbmdl ZCBieXRlLWNvZGUsIG1hY3JvcyBvciB0aGUgbGlrZS4iCiAgKGludGVyYWN0aXZlKQogIChwY2Fz ZS1kb2xpc3QgKGAoXyAscGtnLWRlc2MpIHBhY2thZ2UtYWxpc3QpCiAgICAocGFja2FnZS1yZWNv bXBpbGUgcGtnLWRlc2MpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBwYWNrYWdlLWF1dG9yZW1v dmUgKCkKICAiUmVtb3ZlIHBhY2thZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQuCgpQYWNr YWdlcyB0aGF0IGFyZSBubyBtb3JlIG5lZWRlZCBieSBvdGhlciBwYWNrYWdlcyBpbgpgcGFja2Fn ZS1zZWxlY3RlZC1wYWNrYWdlcycgYW5kIHRoZWlyIGRlcGVuZGVuY2llcwp3aWxsIGJlIGRlbGV0 ZWQuIgogIChpbnRlcmFjdGl2ZSkKICA7OyBJZiBgcGFja2FnZS1zZWxlY3RlZC1wYWNrYWdlcycg aXMgbmlsLCBpdCB3b3VsZCBtYWtlIG5vIHNlbnNlIHRvCiAgOzsgdHJ5IHRvIHBvcHVsYXRlIGl0 IGhlcmUsIGJlY2F1c2UgdGhlbiBgcGFja2FnZS1hdXRvcmVtb3ZlJyB3aWxsCiAgOzsgZG8gYWJz b2x1dGVseSBub3RoaW5nLgogICh3aGVuIChvciBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzCiAg ICAgICAgICAgICh5ZXMtb3Itbm8tcAogICAgICAgICAgICAgKGZvcm1hdC1tZXNzYWdlCiAgICAg ICAgICAgICAgImBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzJyBpcyBlbXB0eSEgUmVhbGx5IHJl bW92ZSBBTEwgcGFja2FnZXM/ICIpKSkKICAgIChsZXQgKChyZW1vdmFibGUgKHBhY2thZ2UtLXJl bW92YWJsZS1wYWNrYWdlcykpKQogICAgICAoaWYgcmVtb3ZhYmxlCiAgICAgICAgICAod2hlbiAo eS1vci1uLXAKICAgICAgICAgICAgICAgICAoZm9ybWF0ICJQYWNrYWdlcyB0byBkZWxldGU6ICVk ICglcyksIHByb2NlZWQ/ICIKICAgICAgICAgICAgICAgICAgIChsZW5ndGggcmVtb3ZhYmxlKQog ICAgICAgICAgICAgICAgICAgKG1hcGNvbmNhdCAjJ3N5bWJvbC1uYW1lIHJlbW92YWJsZSAiICIp KSkKICAgICAgICAgICAgKG1hcGMgKGxhbWJkYSAocCkKICAgICAgICAgICAgICAgICAgICAocGFj a2FnZS1kZWxldGUgKGNhZHIgKGFzc3EgcCBwYWNrYWdlLWFsaXN0KSkgdCkpCiAgICAgICAgICAg ICAgICAgIHJlbW92YWJsZSkpCiAgICAgICAgKG1lc3NhZ2UgIk5vdGhpbmcgdG8gYXV0b3JlbW92 ZSIpKSkpKQoKDAo7Ozs7IFBhY2thZ2UgZGVzY3JpcHRpb24gYnVmZmVyLgoKOzs7IyMjYXV0b2xv YWQKKGRlZnVuIGRlc2NyaWJlLXBhY2thZ2UgKHBhY2thZ2UpCiAgIkRpc3BsYXkgdGhlIGZ1bGwg ZG9jdW1lbnRhdGlvbiBvZiBQQUNLQUdFIChhIHN5bWJvbCkuIgogIChpbnRlcmFjdGl2ZQogICAo bGV0KiAoKGd1ZXNzIChvciAoZnVuY3Rpb24tY2FsbGVkLWF0LXBvaW50KQogICAgICAgICAgICAg ICAgICAgICAoc3ltYm9sLWF0LXBvaW50KSkpKQogICAgIChyZXF1aXJlICdmaW5kZXItaW5mIG5p bCB0KQogICAgIDs7IExvYWQgdGhlIHBhY2thZ2UgbGlzdCBpZiBuZWNlc3NhcnkgKGJ1dCBkb24n dCBhY3RpdmF0ZSB0aGVtKS4KICAgICAodW5sZXNzIHBhY2thZ2UtLWluaXRpYWxpemVkCiAgICAg ICAocGFja2FnZS1pbml0aWFsaXplIHQpKQogICAgIChsZXQgKChwYWNrYWdlcyAoYXBwZW5kICht YXBjYXIgIydjYXIgcGFja2FnZS1hbGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bWFwY2FyICMnY2FyIHBhY2thZ2UtYXJjaGl2ZS1jb250ZW50cykKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobWFwY2FyICMnY2FyIHBhY2thZ2UtLWJ1aWx0aW5zKSkpKQogICAgICAgKHVu bGVzcyAobWVtcSBndWVzcyBwYWNrYWdlcykKICAgICAgICAgKHNldHEgZ3Vlc3MgbmlsKSkKICAg ICAgIChzZXRxIHBhY2thZ2VzIChtYXBjYXIgIydzeW1ib2wtbmFtZSBwYWNrYWdlcykpCiAgICAg ICAobGV0ICgodmFsCiAgICAgICAgICAgICAgKGNvbXBsZXRpbmctcmVhZCAoZm9ybWF0LXByb21w dCAiRGVzY3JpYmUgcGFja2FnZSIgZ3Vlc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYWNrYWdlcyBuaWwgdCBuaWwgbmlsICh3aGVuIGd1ZXNzCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC1uYW1lIGd1ZXNzKSkp KSkKICAgICAgICAgKGxpc3QgKGFuZCAoPiAobGVuZ3RoIHZhbCkgMCkgKGludGVybiB2YWwpKSkp KSkpCiAgKGlmIChub3QgKG9yIChwYWNrYWdlLWRlc2MtcCBwYWNrYWdlKSAoYW5kIHBhY2thZ2Ug KHN5bWJvbHAgcGFja2FnZSkpKSkKICAgICAgKG1lc3NhZ2UgIk5vIHBhY2thZ2Ugc3BlY2lmaWVk IikKICAgIChoZWxwLXNldHVwLXhyZWYgKGxpc3QgIydkZXNjcmliZS1wYWNrYWdlIHBhY2thZ2Up CiAgICAgICAgICAgICAgICAgICAgIChjYWxsZWQtaW50ZXJhY3RpdmVseS1wICdpbnRlcmFjdGl2 ZSkpCiAgICAod2l0aC1oZWxwLXdpbmRvdyAoaGVscC1idWZmZXIpCiAgICAgICh3aXRoLWN1cnJl bnQtYnVmZmVyIHN0YW5kYXJkLW91dHB1dAogICAgICAgIChkZXNjcmliZS1wYWNrYWdlLTEgcGFj a2FnZSkpKSkpCgooZGVmZmFjZSBwYWNrYWdlLWhlbHAtc2VjdGlvbi1uYW1lCiAgJygodCA6aW5o ZXJpdCAoYm9sZCBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSkpCiAgIkZhY2UgdXNlZCBv biBzZWN0aW9uIG5hbWVzIGluIHBhY2thZ2UgZGVzY3JpcHRpb24gYnVmZmVycy4iCiAgOnZlcnNp b24gIjI1LjEiKQoKKGRlZnVuIHBhY2thZ2UtLXByaW50LWhlbHAtc2VjdGlvbiAobmFtZSAmcmVz dCBzdHJpbmdzKQogICJQcmludCBcIk5BTUU6IFwiLCByaWdodCBhbGlnbmVkIHRvIHRoZSAxM3Ro IGNvbHVtbi4KSWYgbW9yZSBTVFJJTkdTIGFyZSBwcm92aWRlZCwgaW5zZXJ0IHRoZW0gZm9sbG93 ZWQgYnkgYSBuZXdsaW5lLgpPdGhlcndpc2Ugbm8gbmV3bGluZSBpcyBpbnNlcnRlZC4iCiAgKGRl Y2xhcmUgKGluZGVudCAxKSkKICAoaW5zZXJ0IChtYWtlLXN0cmluZyAobWF4IDAgKC0gMTEgKHN0 cmluZy13aWR0aCBuYW1lKSkpID9ccykKICAgICAgICAgIChwcm9wZXJ0aXplIChjb25jYXQgbmFt ZSAiOiAiKSAnZm9udC1sb2NrLWZhY2UgJ3BhY2thZ2UtaGVscC1zZWN0aW9uLW5hbWUpKQogICh3 aGVuIHN0cmluZ3MKICAgIChhcHBseSAjJ2luc2VydCBzdHJpbmdzKQogICAgKGluc2VydCAiXG4i KSkpCgooZGVjbGFyZS1mdW5jdGlvbiBsbS1jb21tZW50YXJ5ICJsaXNwLW1udCIgKCZvcHRpb25h bCBmaWxlKSkKCihkZWZ1biBwYWNrYWdlLS1nZXQtZGVzY3JpcHRpb24gKGRlc2MpCiAgIlJldHVy biBhIHN0cmluZyBjb250YWluaW5nIHRoZSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBwYWNrYWdl IERFU0MuClRoZSBkZXNjcmlwdGlvbiBpcyByZWFkIGZyb20gdGhlIGluc3RhbGxlZCBwYWNrYWdl IGZpbGVzLiIKICA7OyBJbnN0YWxsZWQgcGFja2FnZXMgaGF2ZSBuaWwgZm9yIGtpbmQsIHNvIHdl IGxvb2sgZm9yIFJFQURNRQogIDs7IGZpcnN0LCB0aGVuIGZhbGwgYmFjayB0byB0aGUgQ29tbWVu dGFyeSBoZWFkZXIuCgogIDs7IFdlIGRvbuKAmXQgaW5jbHVkZSBSRUFETUUubWQgaGVyZSwgYmVj YXVzZSB0aGF0IGlzIG9mdGVuIHRoZSBob21lCiAgOzsgcGFnZSBvbiBhIHNpdGUgbGlrZSBnaXRo dWIsIGFuZCBub3Qgc3VpdGFibGUgYXMgdGhlIHBhY2thZ2UgbG9uZwogIDs7IGRlc2NyaXB0aW9u LgogIChsZXQgKChmaWxlcyAnKCJSRUFETUUtZWxwYSIgIlJFQURNRS1lbHBhLm1kIiAiUkVBRE1F IiAiUkVBRE1FLnJzdCIgIlJFQURNRS5vcmciKSkKICAgICAgICBmaWxlCiAgICAgICAgKHNyY2Rp ciAocGFja2FnZS1kZXNjLWRpciBkZXNjKSkKICAgICAgICByZXN1bHQpCiAgICAod2hpbGUgKGFu ZCBmaWxlcwogICAgICAgICAgICAgICAgKG5vdCByZXN1bHQpKQogICAgICAoc2V0cSBmaWxlIChw b3AgZmlsZXMpKQogICAgICAod2hlbiAoZmlsZS1yZWFkYWJsZS1wIChleHBhbmQtZmlsZS1uYW1l IGZpbGUgc3JjZGlyKSkKICAgICAgICA7OyBGb3VuZCBhIFJFQURNRS4KICAgICAgICAod2l0aC10 ZW1wLWJ1ZmZlcgogICAgICAgICAgKGluc2VydC1maWxlLWNvbnRlbnRzIChleHBhbmQtZmlsZS1u YW1lIGZpbGUgc3JjZGlyKSkKICAgICAgICAgIChzZXRxIHJlc3VsdCAoYnVmZmVyLXN0cmluZykp KSkpCgogICAgKG9yCiAgICAgcmVzdWx0CgogICAgIDs7IExvb2sgZm9yIENvbW1lbnRhcnkgaGVh ZGVyLgogICAgIChsbS1jb21tZW50YXJ5IChleHBhbmQtZmlsZS1uYW1lCiAgICAgICAgICAgICAg ICAgICAgIChmb3JtYXQgIiVzLmVsIiAocGFja2FnZS1kZXNjLW5hbWUgZGVzYykpIHNyY2Rpcikp CiAgICAgIiIpKSkKCihkZWZ1biBwYWNrYWdlLS1kZXNjcmliZS1hZGQtbGlicmFyeS1saW5rcyAo KQogICJBZGQgbGlua3MgdG8gbGlicmFyeSBuYW1lcyBpbiBwYWNrYWdlIGRlc2NyaXB0aW9uLiIK ICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJcXDxcXChbLVs6YWxudW06XV0rXFwuZWxcXClc XD4iIG5pbCB0KQogICAgKGlmIChsb2NhdGUtbGlicmFyeSAobWF0Y2gtc3RyaW5nIDEpKQogICAg ICAgIChtYWtlLXRleHQtYnV0dG9uIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKQog ICAgICAgICAgICAgICAgICAgICAgICAgICd4cmVmIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGll cyAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICdoZWxwLWVjaG8gIlJlYWQgdGhpcyBmaWxl J3MgY29tbWVudGFyeSIKICAgICAgICAgICAgICAgICAgICAgICAgICA6dHlwZSAncGFja2FnZS0t ZmluZGVyLXhyZWYpKSkpCgooZGVmdW4gZGVzY3JpYmUtcGFja2FnZS0xIChwa2cpCiAgIkluc2Vy dCB0aGUgcGFja2FnZSBkZXNjcmlwdGlvbiBmb3IgUEtHLgpIZWxwZXIgZnVuY3Rpb24gZm9yIGBk ZXNjcmliZS1wYWNrYWdlJy4iCiAgKHJlcXVpcmUgJ2xpc3AtbW50KQogIChsZXQqICgoZGVzYyAo b3IKICAgICAgICAgICAgICAgIChpZiAocGFja2FnZS1kZXNjLXAgcGtnKSBwa2cpCiAgICAgICAg ICAgICAgICAoY2FkciAoYXNzcSBwa2cgcGFja2FnZS1hbGlzdCkpCiAgICAgICAgICAgICAgICAo bGV0ICgoYnVpbHQtaW4gKGFzc3EgcGtnIHBhY2thZ2UtLWJ1aWx0aW5zKSkpCiAgICAgICAgICAg ICAgICAgIChpZiBidWlsdC1pbgogICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtLWZyb20t YnVpbHRpbiBidWlsdC1pbikKICAgICAgICAgICAgICAgICAgICAoY2FkciAoYXNzcSBwa2cgcGFj a2FnZS1hcmNoaXZlLWNvbnRlbnRzKSkpKSkpCiAgICAgICAgIChuYW1lIChpZiBkZXNjIChwYWNr YWdlLWRlc2MtbmFtZSBkZXNjKSBwa2cpKQogICAgICAgICAocGtnLWRpciAoaWYgZGVzYyAocGFj a2FnZS1kZXNjLWRpciBkZXNjKSkpCiAgICAgICAgIChyZXFzIChpZiBkZXNjIChwYWNrYWdlLWRl c2MtcmVxcyBkZXNjKSkpCiAgICAgICAgIChyZXF1aXJlZC1ieSAoaWYgZGVzYyAocGFja2FnZS0t dXNlZC1lbHNld2hlcmUtcCBkZXNjIG5pbCAnYWxsKSkpCiAgICAgICAgICh2ZXJzaW9uIChpZiBk ZXNjIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBkZXNjKSkpCiAgICAgICAgIChhcmNoaXZlIChpZiBk ZXNjIChwYWNrYWdlLWRlc2MtYXJjaGl2ZSBkZXNjKSkpCiAgICAgICAgIChleHRyYXMgKGFuZCBk ZXNjIChwYWNrYWdlLWRlc2MtZXh0cmFzIGRlc2MpKSkKICAgICAgICAgKHdlYnNpdGUgKGNkciAo YXNzb2MgOnVybCBleHRyYXMpKSkKICAgICAgICAgKGNvbW1pdCAoY2RyIChhc3NvYyA6Y29tbWl0 IGV4dHJhcykpKQogICAgICAgICAoa2V5d29yZHMgKGlmIGRlc2MgKHBhY2thZ2UtZGVzYy0ta2V5 d29yZHMgZGVzYykpKQogICAgICAgICAoYnVpbHQtaW4gKGVxIHBrZy1kaXIgJ2J1aWx0aW4pKQog ICAgICAgICAoaW5zdGFsbGFibGUgKGFuZCBhcmNoaXZlIChub3QgYnVpbHQtaW4pKSkKICAgICAg ICAgKHN0YXR1cyAoaWYgZGVzYyAocGFja2FnZS1kZXNjLXN0YXR1cyBkZXNjKSAib3JwaGFuIikp CiAgICAgICAgIChpbmNvbXBhdGlibGUtcmVhc29uIChwYWNrYWdlLS1pbmNvbXBhdGlibGUtcCBk ZXNjKSkKICAgICAgICAgKHNpZ25lZCAoaWYgZGVzYyAocGFja2FnZS1kZXNjLXNpZ25lZCBkZXNj KSkpCiAgICAgICAgIChtYWludGFpbmVyIChjZHIgKGFzc29jIDptYWludGFpbmVyIGV4dHJhcykp KQogICAgICAgICAoYXV0aG9ycyAoY2RyIChhc3NvYyA6YXV0aG9ycyBleHRyYXMpKSkKICAgICAg ICAgKG5ld3MgKGFuZC1sZXQqIChwa2ctZGlyCiAgICAgICAgICAgICAgICAgICAgICAgICAgKChu b3QgYnVpbHQtaW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlIChleHBhbmQtZmls ZS1uYW1lICJuZXdzIiBwa2ctZGlyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZpbGUt cmVndWxhci1wIGZpbGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICgoZmlsZS1yZWFkYWJs ZS1wIGZpbGUpKSkKICAgICAgICAgICAgICAgICBmaWxlKSkpCiAgICAod2hlbiAoc3RyaW5nPSBz dGF0dXMgImF2YWlsLW9ic28iKQogICAgICAoc2V0cSBzdGF0dXMgImF2YWlsYWJsZSBvYnNvbGV0 ZSIpKQogICAgKHdoZW4gaW5jb21wYXRpYmxlLXJlYXNvbgogICAgICAoc2V0cSBzdGF0dXMgImlu Y29tcGF0aWJsZSIpKQogICAgKHByaW5jIChmb3JtYXQgIlBhY2thZ2UgJVMgaXMgJXMuXG5cbiIg bmFtZSBzdGF0dXMpKQoKICAgIDs7IFRPRE86IFJlbW92ZSB0aGUgc3RyaW5nIGRlY29yYXRpb25z IGFuZCByZWZvcm1hdCB0aGUgc3RyaW5ncwogICAgOzsgZm9yIGZ1dHVyZSBsMTBuLgogICAgKHBh Y2thZ2UtLXByaW50LWhlbHAtc2VjdGlvbiAiU3RhdHVzIikKICAgIChjb25kIChidWlsdC1pbgog ICAgICAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgKGNhcGl0YWxpemUgc3RhdHVzKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtbG9jay1mYWNlICdwYWNrYWdlLXN0YXR1cy1i dWlsdC1pbikKICAgICAgICAgICAgICAgICAgICIuIikpCiAgICAgICAgICAocGtnLWRpcgogICAg ICAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgKGlmIChtZW1iZXIgc3RhdHVzICcoInVuc2lnbmVk IiAiZGVwZW5kZW5jeSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnN0 YWxsZWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXBpdGFsaXplIHN0YXR1 cykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1sb2NrLWZhY2UgJ3BhY2th Z2Utc3RhdHVzLWJ1aWx0LWluKSkKICAgICAgICAgICAoaW5zZXJ0IChzdWJzdGl0dXRlLWNvbW1h bmQta2V5cyAiIGluIGAiKSkKICAgICAgICAgICAobGV0ICgoZGlyIChhYmJyZXZpYXRlLWZpbGUt bmFtZQogICAgICAgICAgICAgICAgICAgICAgIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5CiAgICAg ICAgICAgICAgICAgICAgICAgIChpZiAoZmlsZS1pbi1kaXJlY3RvcnktcCBwa2ctZGlyIHBhY2th Z2UtdXNlci1kaXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZS1yZWxhdGl2ZS1u YW1lIHBrZy1kaXIgcGFja2FnZS11c2VyLWRpcikKICAgICAgICAgICAgICAgICAgICAgICAgICBw a2ctZGlyKSkpKSkKICAgICAgICAgICAgIChoZWxwLWluc2VydC14cmVmLWJ1dHRvbiBkaXIgJ2hl bHAtcGFja2FnZS1kZWYgcGtnLWRpcikpCiAgICAgICAgICAgKGlmIChhbmQgKHBhY2thZ2UtYnVp bHQtaW4tcCBuYW1lKQogICAgICAgICAgICAgICAgICAgIChub3QgKHBhY2thZ2UtYnVpbHQtaW4t cCBuYW1lIHZlcnNpb24pKSkKICAgICAgICAgICAgICAgKGluc2VydCAoc3Vic3RpdHV0ZS1jb21t YW5kLWtleXMKICAgICAgICAgICAgICAgICAgICAgICAgIicsXG4gICAgICAgICAgICAgc2hhZG93 aW5nIGEgIikKICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAiYnVpbHQtaW4gcGFj a2FnZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1sb2NrLWZhY2Ug J3BhY2thZ2Utc3RhdHVzLWJ1aWx0LWluKSkKICAgICAgICAgICAgIChpbnNlcnQgKHN1YnN0aXR1 dGUtcXVvdGVzICInIikpKQogICAgICAgICAgIChpZiBzaWduZWQKICAgICAgICAgICAgICAgKGlu c2VydCAiLiIpCiAgICAgICAgICAgICAoaW5zZXJ0ICIgKHVuc2lnbmVkKS4iKSkKICAgICAgICAg ICAod2hlbiAoYW5kIChwYWNrYWdlLWRlc2MtcCBkZXNjKQogICAgICAgICAgICAgICAgICAgICAg KG5vdCByZXF1aXJlZC1ieSkKICAgICAgICAgICAgICAgICAgICAgIChtZW1iZXIgc3RhdHVzICco InVuc2lnbmVkIiAiaW5zdGFsbGVkIikpKQogICAgICAgICAgICAgKGluc2VydCAiICIpCiAgICAg ICAgICAgICAocGFja2FnZS1tYWtlLWJ1dHRvbiAiRGVsZXRlIgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2FjdGlvbiAjJ3BhY2thZ2UtZGVsZXRlLWJ1dHRvbi1hY3Rpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlLWRlc2MgZGVzYykpKQogICAg ICAgICAgKGluY29tcGF0aWJsZS1yZWFzb24KICAgICAgICAgICAoaW5zZXJ0IChwcm9wZXJ0aXpl ICJJbmNvbXBhdGlibGUiICdmb250LWxvY2stZmFjZSBmb250LWxvY2std2FybmluZy1mYWNlKQog ICAgICAgICAgICAgICAgICAgIiBiZWNhdXNlIGl0IGRlcGVuZHMgb24gIikKICAgICAgICAgICAo aWYgKHN0cmluZ3AgaW5jb21wYXRpYmxlLXJlYXNvbikKICAgICAgICAgICAgICAgKGluc2VydCAi RW1hY3MgIiBpbmNvbXBhdGlibGUtcmVhc29uICIuIikKICAgICAgICAgICAgIChpbnNlcnQgInVu aW5zdGFsbGFibGUgcGFja2FnZXMuIikpKQogICAgICAgICAgKGluc3RhbGxhYmxlCiAgICAgICAg ICAgKGluc2VydCAoY2FwaXRhbGl6ZSBzdGF0dXMpKQogICAgICAgICAgIChpbnNlcnQgIiBmcm9t ICIgKGZvcm1hdCAiJXMiIGFyY2hpdmUpKQogICAgICAgICAgIChpbnNlcnQgIiAtLSAiKQogICAg ICAgICAgIChwYWNrYWdlLW1ha2UtYnV0dG9uCiAgICAgICAgICAgICJJbnN0YWxsIgogICAgICAg ICAgICAnYWN0aW9uICdwYWNrYWdlLWluc3RhbGwtYnV0dG9uLWFjdGlvbgogICAgICAgICAgICAn cGFja2FnZS1kZXNjIGRlc2MpKQogICAgICAgICAgKHQgKGluc2VydCAoY2FwaXRhbGl6ZSBzdGF0 dXMpICIuIikpKQogICAgKGluc2VydCAiXG4iKQogICAgKHVubGVzcyAoYW5kIHBrZy1kaXIgKG5v dCBhcmNoaXZlKSkgOyBJbnN0YWxsZWQgcGtncyBkb24ndCBoYXZlIGFyY2hpdmUuCiAgICAgIChw YWNrYWdlLS1wcmludC1oZWxwLXNlY3Rpb24gIkFyY2hpdmUiCiAgICAgICAgKG9yIGFyY2hpdmUg Im4vYSIpKSkKICAgIChhbmQgdmVyc2lvbgogICAgICAgICAocGFja2FnZS0tcHJpbnQtaGVscC1z ZWN0aW9uICJWZXJzaW9uIgogICAgICAgICAgIChwYWNrYWdlLXZlcnNpb24tam9pbiB2ZXJzaW9u KSkpCiAgICAod2hlbiBjb21taXQKICAgICAgKHBhY2thZ2UtLXByaW50LWhlbHAtc2VjdGlvbiAi Q29tbWl0IiBjb21taXQpKQogICAgKHdoZW4gZGVzYwogICAgICAocGFja2FnZS0tcHJpbnQtaGVs cC1zZWN0aW9uICJTdW1tYXJ5IgogICAgICAgIChwYWNrYWdlLWRlc2Mtc3VtbWFyeSBkZXNjKSkp CgogICAgKHNldHEgcmVxcyAoaWYgZGVzYyAocGFja2FnZS1kZXNjLXJlcXMgZGVzYykpKQogICAg KHdoZW4gcmVxcwogICAgICAocGFja2FnZS0tcHJpbnQtaGVscC1zZWN0aW9uICJSZXF1aXJlcyIp CiAgICAgIChsZXQgKChmaXJzdCB0KSkKICAgICAgICAoZG9saXN0IChyZXEgcmVxcykKICAgICAg ICAgIChsZXQqICgobmFtZSAoY2FyIHJlcSkpCiAgICAgICAgICAgICAgICAgKHZlcnMgKGNhZHIg cmVxKSkKICAgICAgICAgICAgICAgICAodGV4dCAoZm9ybWF0ICIlcy0lcyIgKHN5bWJvbC1uYW1l IG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS12ZXJzaW9uLWpv aW4gdmVycykpKQogICAgICAgICAgICAgICAgIChyZWFzb24gKGlmIChhbmQgKGxpc3RwIGluY29t cGF0aWJsZS1yZWFzb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXNzcSBu YW1lIGluY29tcGF0aWJsZS1yZWFzb24pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg KG5vdCBhdmFpbGFibGUpIiAiIikpKQogICAgICAgICAgICAoY29uZCAoZmlyc3QgKHNldHEgZmly c3QgbmlsKSkKICAgICAgICAgICAgICAgICAgKCg+PSAoKyAyIChjdXJyZW50LWNvbHVtbikgKGxl bmd0aCB0ZXh0KSAobGVuZ3RoIHJlYXNvbikpCiAgICAgICAgICAgICAgICAgICAgICAgKHdpbmRv dy13aWR0aCkpCiAgICAgICAgICAgICAgICAgICAoaW5zZXJ0ICIsXG4gICAgICAgICAgICAgICAi KSkKICAgICAgICAgICAgICAgICAgKHQgKGluc2VydCAiLCAiKSkpCiAgICAgICAgICAgIChoZWxw LWluc2VydC14cmVmLWJ1dHRvbiB0ZXh0ICdoZWxwLXBhY2thZ2UgbmFtZSkKICAgICAgICAgICAg KGluc2VydCByZWFzb24pKSkKICAgICAgICAoaW5zZXJ0ICJcbiIpKSkKICAgICh3aGVuIHJlcXVp cmVkLWJ5CiAgICAgIChwYWNrYWdlLS1wcmludC1oZWxwLXNlY3Rpb24gIlJlcXVpcmVkIGJ5IikK ICAgICAgKGxldCAoKGZpcnN0IHQpKQogICAgICAgIChkb2xpc3QgKHBrZyByZXF1aXJlZC1ieSkK ICAgICAgICAgIChsZXQgKCh0ZXh0IChwYWNrYWdlLWRlc2MtZnVsbC1uYW1lIHBrZykpKQogICAg ICAgICAgICAoY29uZCAoZmlyc3QgKHNldHEgZmlyc3QgbmlsKSkKICAgICAgICAgICAgICAgICAg KCg+PSAoKyAyIChjdXJyZW50LWNvbHVtbikgKGxlbmd0aCB0ZXh0KSkKICAgICAgICAgICAgICAg ICAgICAgICAod2luZG93LXdpZHRoKSkKICAgICAgICAgICAgICAgICAgIChpbnNlcnQgIixcbiAg ICAgICAgICAgICAgICIpKQogICAgICAgICAgICAgICAgICAodCAoaW5zZXJ0ICIsICIpKSkKICAg ICAgICAgICAgKGhlbHAtaW5zZXJ0LXhyZWYtYnV0dG9uIHRleHQgJ2hlbHAtcGFja2FnZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVzYy1uYW1lIHBrZykp KSkKICAgICAgICAoaW5zZXJ0ICJcbiIpKSkKICAgICh3aGVuIHdlYnNpdGUKICAgICAgOzsgUHJl ZmVyIGh0dHBzIGZvciB0aGUgd2Vic2l0ZSBvZiBwYWNrYWdlcyBvbiBjb21tb24gZG9tYWlucy4K ICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaC1wIChyeCBib2wgImh0dHA6Ly8iIChvciAiZWxwYS4i ICJ3d3cuIiAiZ2l0LiIgIiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yICJu b25nbnUub3JnIiAiZ251Lm9yZyIgInNyLmh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiZW1hY3N3aWtpLm9yZyIgImdpdGxhYi5jb20iICJnaXRodWIuY29tIikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3ZWJzaXRlKQogICAgICAgIDs7IEJ1dCBvbmx5IGlmIHRoZSB1c2VyIGhhcyAiaHR0cHMiIGlu IGBwYWNrYWdlLWFyY2hpdmVzJy4KICAgICAgICAobGV0ICgoZ251IChjZHIgKGFzc29jICJnbnUi IHBhY2thZ2UtYXJjaGl2ZXMpKSkpCiAgICAgICAgICAoYW5kIGdudSAoc3RyaW5nLW1hdGNoLXAg Il5odHRwcyIgZ251KQogICAgICAgICAgICAgICAoc2V0cSB3ZWJzaXRlCiAgICAgICAgICAgICAg ICAgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgIl5odHRwIiAiaHR0cHMiIHdlYnNpdGUp KSkpKQogICAgICAocGFja2FnZS0tcHJpbnQtaGVscC1zZWN0aW9uICJXZWJzaXRlIikKICAgICAg KGhlbHAtaW5zZXJ0LXhyZWYtYnV0dG9uIHdlYnNpdGUgJ2hlbHAtdXJsIHdlYnNpdGUpCiAgICAg IChpbnNlcnQgIlxuIikpCiAgICAod2hlbiBrZXl3b3JkcwogICAgICAocGFja2FnZS0tcHJpbnQt aGVscC1zZWN0aW9uICJLZXl3b3JkcyIpCiAgICAgIChkb2xpc3QgKGsga2V5d29yZHMpCiAgICAg ICAgKHBhY2thZ2UtbWFrZS1idXR0b24KICAgICAgICAgawogICAgICAgICAncGFja2FnZS1rZXl3 b3JkIGsKICAgICAgICAgJ2FjdGlvbiAncGFja2FnZS1rZXl3b3JkLWJ1dHRvbi1hY3Rpb24pCiAg ICAgICAgKGluc2VydCAiICIpKQogICAgICAoaW5zZXJ0ICJcbiIpKQogICAgKHdoZW4gbWFpbnRh aW5lcgogICAgICAocGFja2FnZS0tcHJpbnQtaGVscC1zZWN0aW9uICJNYWludGFpbmVyIikKICAg ICAgKHBhY2thZ2UtLXByaW50LWVtYWlsLWJ1dHRvbiBtYWludGFpbmVyKSkKICAgICh3aGVuIGF1 dGhvcnMKICAgICAgKHBhY2thZ2UtLXByaW50LWhlbHAtc2VjdGlvbgogICAgICAgICAgKGlmICg9 IChsZW5ndGggYXV0aG9ycykgMSkKICAgICAgICAgICAgICAiQXV0aG9yIgogICAgICAgICAgICAi QXV0aG9ycyIpKQogICAgICAocGFja2FnZS0tcHJpbnQtZW1haWwtYnV0dG9uIChwb3AgYXV0aG9y cykpCiAgICAgIDs7IElmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSBhdXRob3IsIGluZGVudCB0aGUg cmVzdCBjb3JyZWN0bHkuCiAgICAgIChkb2xpc3QgKG5hbWUgYXV0aG9ycykKICAgICAgICAoaW5z ZXJ0IChtYWtlLXN0cmluZyAxMyA/XHMpKQogICAgICAgIChwYWNrYWdlLS1wcmludC1lbWFpbC1i dXR0b24gbmFtZSkpKQogICAgKGxldCogKChhbGwtcGtncyAoYXBwZW5kIChjZHIgKGFzc3EgbmFt ZSBwYWNrYWdlLWFsaXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RyIChhc3Nx IG5hbWUgcGFja2FnZS1hcmNoaXZlLWNvbnRlbnRzKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGV0ICgoYmkgKGFzc3EgbmFtZSBwYWNrYWdlLS1idWlsdGlucykpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGlmIGJpIChsaXN0IChwYWNrYWdlLS1mcm9tLWJ1aWx0aW4g YmkpKSkpKSkKICAgICAgICAgICAob3RoZXItcGtncyAoZGVsZXRlIGRlc2MgYWxsLXBrZ3MpKSkK ICAgICAgKHdoZW4gb3RoZXItcGtncwogICAgICAgIChwYWNrYWdlLS1wcmludC1oZWxwLXNlY3Rp b24gIk90aGVyIHZlcnNpb25zIgogICAgICAgICAgKG1hcGNvbmNhdCAobGFtYmRhIChvcGtnKQog ICAgICAgICAgICAgICAgICAgICAgIChsZXQqICgob3YgKHBhY2thZ2UtZGVzYy12ZXJzaW9uIG9w a2cpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlyIChwYWNrYWdlLWRlc2MtZGly IG9wa2cpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJvbSAob3IgKHBhY2thZ2Ut ZGVzYy1hcmNoaXZlIG9wa2cpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoaWYgKHN0cmluZ3AgZGlyKSAiaW5zdGFsbGVkIiBkaXIpKSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAoaWYgKG5vdCBvdikgKGZvcm1hdCAiJXMiIGZyb20pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIChmb3JtYXQgIiVzICglcykiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG1ha2UtdGV4dC1idXR0b24gKHBhY2thZ2UtdmVyc2lvbi1qb2luIG92KSBuaWwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1s b2NrLWZhY2UgJ2xpbmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnZm9sbG93LWxpbmsgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChfYnV0dG9uKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlc2NyaWJlLXBhY2th Z2Ugb3BrZykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20pKSkpCiAg ICAgICAgICAgICAgICAgICAgIG90aGVyLXBrZ3MgIiwgIikKICAgICAgICAgICIuIikpKQoKICAg IChpbnNlcnQgIlxuIikKCiAgICAobGV0ICgoc3RhcnQtb2YtZGVzY3JpcHRpb24gKHBvaW50KSkp CiAgICAgIChpZiBidWlsdC1pbgogICAgICAgICAgOzsgRm9yIGJ1aWx0LWluIHBhY2thZ2VzLCBn ZXQgdGhlIGRlc2NyaXB0aW9uIGZyb20gdGhlCiAgICAgICAgICA7OyBDb21tZW50YXJ5IGhlYWRl ci4KICAgICAgICAgIChpbnNlcnQgKG9yIChsbS1jb21tZW50YXJ5IChsb2NhdGUtZmlsZSAoZm9y bWF0ICIlcy5lbCIgbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsb2FkLXBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsb2FkLWZpbGUtcmVwLXN1ZmZpeGVzKSkKICAgICAgICAgICAgICAgICAg ICAgICIiKSkKCiAgICAgICAgKGlmIChwYWNrYWdlLWluc3RhbGxlZC1wIGRlc2MpCiAgICAgICAg ICAgIDs7IEZvciBpbnN0YWxsZWQgcGFja2FnZXMsIGdldCB0aGUgZGVzY3JpcHRpb24gZnJvbSB0 aGUKICAgICAgICAgICAgOzsgaW5zdGFsbGVkIGZpbGVzLgogICAgICAgICAgICAoaW5zZXJ0IChw YWNrYWdlLS1nZXQtZGVzY3JpcHRpb24gZGVzYykpCgogICAgICAgICAgOzsgRm9yIG5vbi1idWls dC1pbiwgbm9uLWluc3RhbGxlZCBwYWNrYWdlcywgZ2V0IGRlc2NyaXB0aW9uIGZyb20KICAgICAg ICAgIDs7IHRoZSBhcmNoaXZlLgogICAgICAgICAgKGxldCogKChiYXNlbmFtZSAoZm9ybWF0ICIl cy1yZWFkbWUudHh0IiBuYW1lKSkKICAgICAgICAgICAgICAgICByZWFkbWUtc3RyaW5nKQoKICAg ICAgICAgICAgKHBhY2thZ2UtLXdpdGgtcmVzcG9uc2UtYnVmZmVyIChwYWNrYWdlLWFyY2hpdmUt YmFzZSBkZXNjKQogICAgICAgICAgICAgIDpmaWxlIGJhc2VuYW1lIDpub2Vycm9yIHQKICAgICAg ICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50 LW1heCkpCiAgICAgICAgICAgICAgICAodW5sZXNzIChib2xwKQogICAgICAgICAgICAgICAgICAo aW5zZXJ0ID9cbikpKQogICAgICAgICAgICAgIChjbC1hc3NlcnQgKG5vdCBlbmFibGUtbXVsdGli eXRlLWNoYXJhY3RlcnMpKQogICAgICAgICAgICAgIChzZXRxIHJlYWRtZS1zdHJpbmcKICAgICAg ICAgICAgICAgICAgICA7OyBUaGUgcmVhZG1lLnR4dCBmaWxlcyBhcmUgZGVmaW5lZCB0byBjb250 YWluIHV0Zi04IHRleHQuCiAgICAgICAgICAgICAgICAgICAgKGRlY29kZS1jb2RpbmctcmVnaW9u IChwb2ludC1taW4pIChwb2ludC1tYXgpICd1dGYtOCB0KSkKICAgICAgICAgICAgICB0KQogICAg ICAgICAgICAoaW5zZXJ0IChvciByZWFkbWUtc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAg ICJUaGlzIHBhY2thZ2UgZG9lcyBub3QgcHJvdmlkZSBhIGRlc2NyaXB0aW9uLiIpKSkpKQoKICAg ICAgOzsgSW5zZXJ0IG5ld3MgaWYgYXZhaWxhYmxlLgogICAgICAod2hlbiBuZXdzCiAgICAgICAg KG5ld2xpbmUpCiAgICAgICAgKHdoZW4gKGZib3VuZHAgJ21ha2Utc2VwYXJhdG9yLWxpbmUpCiAg ICAgICAgICAoaW5zZXJ0IChtYWtlLXNlcGFyYXRvci1saW5lKSkKICAgICAgICAgIChuZXdsaW5l KSkKICAgICAgICAoaW5zZXJ0IChwcm9wZXJ0aXplICIqIE5ld3MiICdmYWNlICdwYWNrYWdlLWhl bHAtc2VjdGlvbi1uYW1lKQogICAgICAgICAgICAgICAgIlxuXG4iKQogICAgICAgIChpbnNlcnQt ZmlsZS1jb250ZW50cyBuZXdzKSkKCiAgICAgIDs7IE1ha2UgbGlicmFyeSBkZXNjcmlwdGlvbnMg aW50byBsaW5rcy4KICAgICAgKGdvdG8tY2hhciBzdGFydC1vZi1kZXNjcmlwdGlvbikKICAgICAg KHBhY2thZ2UtLWRlc2NyaWJlLWFkZC1saWJyYXJ5LWxpbmtzKQogICAgICA7OyBNYWtlIFVSTHMg aW4gdGhlIGRlc2NyaXB0aW9uIGludG8gbGlua3MuCiAgICAgIChnb3RvLWNoYXIgc3RhcnQtb2Yt ZGVzY3JpcHRpb24pCiAgICAgIChicm93c2UtdXJsLWFkZC1idXR0b25zKSkpKQoKKGRlZnVuIHBh Y2thZ2UtaW5zdGFsbC1idXR0b24tYWN0aW9uIChidXR0b24pCiAgIlJ1biBgcGFja2FnZS1pbnN0 YWxsJyBvbiB0aGUgcGFja2FnZSBCVVRUT04gcG9pbnRzIHRvLgpVc2VkIGZvciB0aGUgYGFjdGlv bicgcHJvcGVydHkgb2YgYnV0dG9ucyBpbiB0aGUgYnVmZmVyIGNyZWF0ZWQgYnkKYGRlc2NyaWJl LXBhY2thZ2UnLiIKICAobGV0ICgocGtnLWRlc2MgKGJ1dHRvbi1nZXQgYnV0dG9uICdwYWNrYWdl LWRlc2MpKSkKICAgICh3aGVuICh5LW9yLW4tcCAoZm9ybWF0LW1lc3NhZ2UgIkluc3RhbGwgcGFj a2FnZSBgJXMnPyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdl LWRlc2MtZnVsbC1uYW1lIHBrZy1kZXNjKSkpCiAgICAgIChwYWNrYWdlLWluc3RhbGwgcGtnLWRl c2MgbmlsKQogICAgICAoZGVzY3JpYmUtcGFja2FnZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRl c2MpKSkpKQoKKGRlZnVuIHBhY2thZ2UtZGVsZXRlLWJ1dHRvbi1hY3Rpb24gKGJ1dHRvbikKICAi UnVuIGBwYWNrYWdlLWRlbGV0ZScgb24gdGhlIHBhY2thZ2UgQlVUVE9OIHBvaW50cyB0by4KVXNl ZCBmb3IgdGhlIGBhY3Rpb24nIHByb3BlcnR5IG9mIGJ1dHRvbnMgaW4gdGhlIGJ1ZmZlciBjcmVh dGVkIGJ5CmBkZXNjcmliZS1wYWNrYWdlJy4iCiAgKGxldCAoKHBrZy1kZXNjIChidXR0b24tZ2V0 IGJ1dHRvbiAncGFja2FnZS1kZXNjKSkpCiAgICAod2hlbiAoeS1vci1uLXAgKGZvcm1hdC1tZXNz YWdlICJEZWxldGUgcGFja2FnZSBgJXMnPyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwYWNrYWdlLWRlc2MtZnVsbC1uYW1lIHBrZy1kZXNjKSkpCiAgICAgIChwYWNrYWdl LWRlbGV0ZSBwa2ctZGVzYykKICAgICAgKGRlc2NyaWJlLXBhY2thZ2UgKHBhY2thZ2UtZGVzYy1u YW1lIHBrZy1kZXNjKSkpKSkKCihkZWZ1biBwYWNrYWdlLWtleXdvcmQtYnV0dG9uLWFjdGlvbiAo YnV0dG9uKQogICJTaG93IGZpbHRlcmVkIFwiKlBhY2thZ2VzKlwiIGJ1ZmZlciBmb3IgQlVUVE9O LgpUaGUgYnVmZmVyIGlzIGZpbHRlcmVkIGJ5IHRoZSBgcGFja2FnZS1rZXl3b3JkJyBwcm9wZXJ0 eSBvZiBCVVRUT04uClVzZWQgZm9yIHRoZSBgYWN0aW9uJyBwcm9wZXJ0eSBvZiBidXR0b25zIGlu IHRoZSBidWZmZXIgY3JlYXRlZCBieQpgZGVzY3JpYmUtcGFja2FnZScuIgogIChsZXQgKChwa2ct a2V5d29yZCAoYnV0dG9uLWdldCBidXR0b24gJ3BhY2thZ2Uta2V5d29yZCkpKQogICAgKHBhY2th Z2Utc2hvdy1wYWNrYWdlLWxpc3QgdCAobGlzdCBwa2cta2V5d29yZCkpKSkKCihkZWZ1biBwYWNr YWdlLW1ha2UtYnV0dG9uICh0ZXh0ICZyZXN0IHByb3BlcnRpZXMpCiAgIkluc2VydCBidXR0b24g bGFiZWxlZCBURVhUIHdpdGggYnV0dG9uIFBST1BFUlRJRVMgYXQgcG9pbnQuClBST1BFUlRJRVMg YXJlIHBhc3NlZCB0byBgaW5zZXJ0LXRleHQtYnV0dG9uJywgZm9yIHdoaWNoIHRoaXMKZnVuY3Rp b24gaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIHVzZWQgYnkgYGRlc2NyaWJlLXBhY2thZ2UtMScu IgogIChsZXQgKChidXR0b24tdGV4dCAoaWYgKGRpc3BsYXktZ3JhcGhpYy1wKSB0ZXh0IChjb25j YXQgIlsiIHRleHQgIl0iKSkpCiAgICAgICAgKGJ1dHRvbi1mYWNlIChpZiAoZGlzcGxheS1ncmFw aGljLXApCiAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHJlcXVpcmUgJ2N1cy1lZGl0KSA7IGZvciB0aGUgY3VzdG9tLWJ1dHRvbiBmYWNl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXN0b20tYnV0dG9uKQogICAgICAgICAgICAg ICAgICAgICAgICdsaW5rKSkpCiAgICAoYXBwbHkgIydpbnNlcnQtdGV4dC1idXR0b24gYnV0dG9u LXRleHQgJ2ZhY2UgYnV0dG9uLWZhY2UgJ2ZvbGxvdy1saW5rIHQKICAgICAgICAgICBwcm9wZXJ0 aWVzKSkpCgooZGVmdW4gcGFja2FnZS0tZmluZGVyLWdvdG8teHJlZiAoYnV0dG9uKQogICJKdW1w IHRvIGEgTGlzcCBmaWxlIGZvciB0aGUgQlVUVE9OIGF0IHBvaW50LiIKICAobGV0KiAoKGZpbGUg KGJ1dHRvbi1nZXQgYnV0dG9uICd4cmVmKSkKICAgICAgICAgKGxpYiAobG9jYXRlLWxpYnJhcnkg ZmlsZSkpKQogICAgKGlmIGxpYiAoZmluZGVyLWNvbW1lbnRhcnkgbGliKQogICAgICAobWVzc2Fn ZSAiVW5hYmxlIHRvIGxvY2F0ZSBgJXMnIiBmaWxlKSkpKQoKKGRlZmluZS1idXR0b24tdHlwZSAn cGFja2FnZS0tZmluZGVyLXhyZWYgJ2FjdGlvbiAjJ3BhY2thZ2UtLWZpbmRlci1nb3RvLXhyZWYp CgooZGVmdW4gcGFja2FnZS0tcHJpbnQtZW1haWwtYnV0dG9uIChyZWNpcGllbnQpCiAgIkluc2Vy dCBhIGJ1dHRvbiB3aG9zZSBhY3Rpb24gd2lsbCBzZW5kIGFuIGVtYWlsIHRvIFJFQ0lQSUVOVC4K TkFNRSBzaG91bGQgaGF2ZSB0aGUgZm9ybSAoRlVMTE5BTUUgLiBFTUFJTCkgd2hlcmUgRlVMTE5B TUUgaXMKZWl0aGVyIGEgZnVsbCBuYW1lIG9yIG5pbCwgYW5kIEVNQUlMIGlzIGEgdmFsaWQgZW1h aWwgYWRkcmVzcy4iCiAgKHdoZW4gKGNhciByZWNpcGllbnQpCiAgICAoaW5zZXJ0IChjYXIgcmVj aXBpZW50KSkpCiAgKHdoZW4gKGFuZCAoY2FyIHJlY2lwaWVudCkgKGNkciByZWNpcGllbnQpKQog ICAgKGluc2VydCAiICIpKQogICh3aGVuIChjZHIgcmVjaXBpZW50KQogICAgKGluc2VydCAiPCIp CiAgICAoaW5zZXJ0LXRleHQtYnV0dG9uIChjZHIgcmVjaXBpZW50KQogICAgICAgICAgICAgICAg ICAgICAgICAnZm9sbG93LWxpbmsgdAogICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uIChs YW1iZGEgKF8pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcG9zZS1tYWls CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiJXMgPCVzPiIgKGNh ciByZWNpcGllbnQpIChjZHIgcmVjaXBpZW50KSkpKSkKICAgIChpbnNlcnQgIj4iKSkKICAoaW5z ZXJ0ICJcbiIpKQoKDAo7Ozs7IFBhY2thZ2UgbWVudSBtb2RlLgoKKGRlZnZhci1rZXltYXAgcGFj a2FnZS1tZW51LW1vZGUtbWFwCiAgOmRvYyAiTG9jYWwga2V5bWFwIGZvciBgcGFja2FnZS1tZW51 LW1vZGUnIGJ1ZmZlcnMuIgogIDpwYXJlbnQgdGFidWxhdGVkLWxpc3QtbW9kZS1tYXAKICAiQy1t IiAgICMncGFja2FnZS1tZW51LWRlc2NyaWJlLXBhY2thZ2UKICAidSIgICAgICMncGFja2FnZS1t ZW51LW1hcmstdW5tYXJrCiAgIkRFTCIgICAjJ3BhY2thZ2UtbWVudS1iYWNrdXAtdW5tYXJrCiAg ImQiICAgICAjJ3BhY2thZ2UtbWVudS1tYXJrLWRlbGV0ZQogICJpIiAgICAgIydwYWNrYWdlLW1l bnUtbWFyay1pbnN0YWxsCiAgIlUiICAgICAjJ3BhY2thZ2UtbWVudS1tYXJrLXVwZ3JhZGVzCiAg InIiICAgICAjJ3JldmVydC1idWZmZXIKICAifiIgICAgICMncGFja2FnZS1tZW51LW1hcmstb2Jz b2xldGUtZm9yLWRlbGV0aW9uCiAgInciICAgICAjJ3BhY2thZ2UtYnJvd3NlLXVybAogICJiIiAg ICAgIydwYWNrYWdlLXJlcG9ydC1idWcKICAieCIgICAgICMncGFja2FnZS1tZW51LWV4ZWN1dGUK ICAiaCIgICAgICMncGFja2FnZS1tZW51LXF1aWNrLWhlbHAKICAiSCIgICAgICMncGFja2FnZS1t ZW51LWhpZGUtcGFja2FnZQogICI/IiAgICAgIydwYWNrYWdlLW1lbnUtZGVzY3JpYmUtcGFja2Fn ZQogICIoIiAgICAgIydwYWNrYWdlLW1lbnUtdG9nZ2xlLWhpZGluZwogICIvIC8iICAgIydwYWNr YWdlLW1lbnUtY2xlYXItZmlsdGVyCiAgIi8gYSIgICAjJ3BhY2thZ2UtbWVudS1maWx0ZXItYnkt YXJjaGl2ZQogICIvIGQiICAgIydwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LWRlc2NyaXB0aW9uCiAg Ii8gayIgICAjJ3BhY2thZ2UtbWVudS1maWx0ZXItYnkta2V5d29yZAogICIvIE4iICAgIydwYWNr YWdlLW1lbnUtZmlsdGVyLWJ5LW5hbWUtb3ItZGVzY3JpcHRpb24KICAiLyBuIiAgICMncGFja2Fn ZS1tZW51LWZpbHRlci1ieS1uYW1lCiAgIi8gcyIgICAjJ3BhY2thZ2UtbWVudS1maWx0ZXItYnkt c3RhdHVzCiAgIi8gdiIgICAjJ3BhY2thZ2UtbWVudS1maWx0ZXItYnktdmVyc2lvbgogICIvIG0i ICAgIydwYWNrYWdlLW1lbnUtZmlsdGVyLW1hcmtlZAogICIvIHUiICAgIydwYWNrYWdlLW1lbnUt ZmlsdGVyLXVwZ3JhZGFibGUpCgooZWFzeS1tZW51LWRlZmluZSBwYWNrYWdlLW1lbnUtbW9kZS1t ZW51IHBhY2thZ2UtbWVudS1tb2RlLW1hcAogICJNZW51IGZvciBgcGFja2FnZS1tZW51LW1vZGUn LiIKICAnKCJQYWNrYWdlIgogICAgWyJEZXNjcmliZSBQYWNrYWdlIiBwYWNrYWdlLW1lbnUtZGVz Y3JpYmUtcGFja2FnZSA6aGVscCAiRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhY2th Z2UiXQogICAgWyJPcGVuIFBhY2thZ2UgV2Vic2l0ZSIgcGFja2FnZS1icm93c2UtdXJsCiAgICAg OmhlbHAgIk9wZW4gdGhlIHdlYnNpdGUgb2YgdGhpcyBwYWNrYWdlIl0KICAgIFsiSGVscCIgcGFj a2FnZS1tZW51LXF1aWNrLWhlbHAgOmhlbHAgIlNob3cgc2hvcnQga2V5IGJpbmRpbmcgaGVscCBm b3IgcGFja2FnZS1tZW51LW1vZGUiXQogICAgIi0tIgogICAgWyJSZWZyZXNoIFBhY2thZ2UgTGlz dCIgcmV2ZXJ0LWJ1ZmZlcgogICAgIDpoZWxwICJSZWRvd25sb2FkIHRoZSBwYWNrYWdlIGFyY2hp dmUocykiCiAgICAgOmFjdGl2ZSAobm90IHBhY2thZ2UtLWRvd25sb2Fkcy1pbi1wcm9ncmVzcyld CiAgICBbIkV4ZWN1dGUgTWFya2VkIEFjdGlvbnMiIHBhY2thZ2UtbWVudS1leGVjdXRlIDpoZWxw ICJQZXJmb3JtIGFsbCB0aGUgbWFya2VkIGFjdGlvbnMiXQoKICAgICItLSIKICAgIFsiTWFyayBB bGwgQXZhaWxhYmxlIFVwZ3JhZGVzIiBwYWNrYWdlLW1lbnUtbWFyay11cGdyYWRlcwogICAgIDpo ZWxwICJNYXJrIHBhY2thZ2VzIHRoYXQgaGF2ZSBhIG5ld2VyIHZlcnNpb24gZm9yIHVwZ3JhZGlu ZyIKICAgICA6YWN0aXZlIChub3QgcGFja2FnZS0tZG93bmxvYWRzLWluLXByb2dyZXNzKV0KICAg IFsiTWFyayBBbGwgT2Jzb2xldGUgZm9yIERlbGV0aW9uIiBwYWNrYWdlLW1lbnUtbWFyay1vYnNv bGV0ZS1mb3ItZGVsZXRpb24gOmhlbHAgIk1hcmsgYWxsIG9ic29sZXRlIHBhY2thZ2VzIGZvciBk ZWxldGlvbiJdCiAgICBbIk1hcmsgZm9yIEluc3RhbGwiIHBhY2thZ2UtbWVudS1tYXJrLWluc3Rh bGwgOmhlbHAgIk1hcmsgYSBwYWNrYWdlIGZvciBpbnN0YWxsYXRpb24gYW5kIG1vdmUgdG8gdGhl IG5leHQgbGluZSJdCiAgICBbIk1hcmsgZm9yIERlbGV0aW9uIiBwYWNrYWdlLW1lbnUtbWFyay1k ZWxldGUgOmhlbHAgIk1hcmsgYSBwYWNrYWdlIGZvciBkZWxldGlvbiBhbmQgbW92ZSB0byB0aGUg bmV4dCBsaW5lIl0KICAgIFsiVW5tYXJrIiBwYWNrYWdlLW1lbnUtbWFyay11bm1hcmsgOmhlbHAg IkNsZWFyIGFueSBtYXJrcyBvbiBhIHBhY2thZ2UgYW5kIG1vdmUgdG8gdGhlIG5leHQgbGluZSJd CgogICAgIi0tIgogICAgKCJGaWx0ZXIgUGFja2FnZXMiCiAgICAgWyJGaWx0ZXIgYnkgQXJjaGl2 ZSIgcGFja2FnZS1tZW51LWZpbHRlci1ieS1hcmNoaXZlIDpoZWxwICJGaWx0ZXIgcGFja2FnZXMg YnkgYXJjaGl2ZSJdCiAgICAgWyJGaWx0ZXIgYnkgRGVzY3JpcHRpb24iIHBhY2thZ2UtbWVudS1m aWx0ZXItYnktZGVzY3JpcHRpb24gOmhlbHAgIkZpbHRlciBwYWNrYWdlcyBieSBkZXNjcmlwdGlv biJdCiAgICAgWyJGaWx0ZXIgYnkgS2V5d29yZCIgcGFja2FnZS1tZW51LWZpbHRlci1ieS1rZXl3 b3JkIDpoZWxwICJGaWx0ZXIgcGFja2FnZXMgYnkga2V5d29yZCJdCiAgICAgWyJGaWx0ZXIgYnkg TmFtZSIgcGFja2FnZS1tZW51LWZpbHRlci1ieS1uYW1lIDpoZWxwICJGaWx0ZXIgcGFja2FnZXMg YnkgbmFtZSJdCiAgICAgWyJGaWx0ZXIgYnkgTmFtZSBvciBEZXNjcmlwdGlvbiIgcGFja2FnZS1t ZW51LWZpbHRlci1ieS1uYW1lLW9yLWRlc2NyaXB0aW9uCiAgICAgIDpoZWxwICJGaWx0ZXIgcGFj a2FnZXMgYnkgbmFtZSBvciBkZXNjcmlwdGlvbiJdCiAgICAgWyJGaWx0ZXIgYnkgU3RhdHVzIiBw YWNrYWdlLW1lbnUtZmlsdGVyLWJ5LXN0YXR1cyA6aGVscCAiRmlsdGVyIHBhY2thZ2VzIGJ5IHN0 YXR1cyJdCiAgICAgWyJGaWx0ZXIgYnkgVmVyc2lvbiIgcGFja2FnZS1tZW51LWZpbHRlci1ieS12 ZXJzaW9uIDpoZWxwICJGaWx0ZXIgcGFja2FnZXMgYnkgdmVyc2lvbiJdCiAgICAgWyJGaWx0ZXIg TWFya2VkIiBwYWNrYWdlLW1lbnUtZmlsdGVyLW1hcmtlZCA6aGVscCAiRmlsdGVyIHBhY2thZ2Vz IG1hcmtlZCBmb3IgdXBncmFkZSJdCiAgICAgWyJDbGVhciBGaWx0ZXIiIHBhY2thZ2UtbWVudS1j bGVhci1maWx0ZXIgOmhlbHAgIkNsZWFyIHBhY2thZ2UgbGlzdCBmaWx0ZXIiXSkKCiAgICBbIkhp ZGUgYnkgUmVnZXhwIiBwYWNrYWdlLW1lbnUtaGlkZS1wYWNrYWdlIDpoZWxwICJIaWRlIGFsbCBw YWNrYWdlcyBtYXRjaGluZyBhIHJlZ2V4cCJdCiAgICBbIkRpc3BsYXkgT2xkZXIgVmVyc2lvbnMi IHBhY2thZ2UtbWVudS10b2dnbGUtaGlkaW5nCiAgICAgOnN0eWxlIHRvZ2dsZSA6c2VsZWN0ZWQg KG5vdCBwYWNrYWdlLW1lbnUtLWhpZGUtcGFja2FnZXMpCiAgICAgOmhlbHAgIkRpc3BsYXkgcGFj a2FnZSBldmVuIGlmIGEgbmV3ZXIgdmVyc2lvbiBpcyBhbHJlYWR5IGluc3RhbGxlZCJdCgogICAg Ii0tIgogICAgWyJRdWl0IiBxdWl0LXdpbmRvdyA6aGVscCAiUXVpdCBwYWNrYWdlIHNlbGVjdGlv biJdCiAgICBbIkN1c3RvbWl6ZSIgKGN1c3RvbWl6ZS1ncm91cCAncGFja2FnZSldKSkKCihkZWZ2 YXIgcGFja2FnZS1tZW51LS1uZXctcGFja2FnZS1saXN0IG5pbAogICJMaXN0IG9mIG5ld2x5LWF2 YWlsYWJsZSBwYWNrYWdlcyBzaW5jZSBgbGlzdC1wYWNrYWdlcycgd2FzIGxhc3QgY2FsbGVkLiIp CgooZGVmdmFyIHBhY2thZ2UtbWVudS0tdHJhbnNhY3Rpb24tc3RhdHVzIG5pbAogICJNb2RlLWxp bmUgc3RhdHVzIG9mIG9uZ29pbmcgcGFja2FnZSB0cmFuc2FjdGlvbi4iKQoKKGRlZmluZS1kZXJp dmVkLW1vZGUgcGFja2FnZS1tZW51LW1vZGUgdGFidWxhdGVkLWxpc3QtbW9kZSAiUGFja2FnZSBN ZW51IgogICJNYWpvciBtb2RlIGZvciBicm93c2luZyBhIGxpc3Qgb2YgcGFja2FnZXMuClRoZSBt b3N0IHVzZWZ1bCBjb21tYW5kcyBoZXJlIGFyZToKCiAgYHgnOiBJbnN0YWxsIHRoZSBwYWNrYWdl IHVuZGVyIHBvaW50IGlmIGl0IGlzbid0IGFscmVhZHkgaW5zdGFsbGVkLAogICAgICAgYW5kIGRl bGV0ZSBpdCBpZiBpdCdzIGFscmVhZHkgaW5zdGFsbGVkLAogIGBpJzogbWFyayBhIHBhY2thZ2Ug Zm9yIGluc3RhbGxhdGlvbiwgYW5kCiAgYGQnOiBtYXJrIGEgcGFja2FnZSBmb3IgZGVsZXRpb24u ICBVc2UgdGhlIGB4JyBjb21tYW5kIHRvIHBlcmZvcm0gdGhlCiAgICAgICBhY3Rpb25zIG9uIHRo ZSBtYXJrZWQgZmlsZXMuClxcPHBhY2thZ2UtbWVudS1tb2RlLW1hcD4KXFx7cGFja2FnZS1tZW51 LW1vZGUtbWFwfSIKICA6aW50ZXJhY3RpdmUgbmlsCiAgKHNldHEgbW9kZS1saW5lLXByb2Nlc3Mg JygocGFja2FnZS0tZG93bmxvYWRzLWluLXByb2dyZXNzICI6TG9hZGluZyIpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocGFja2FnZS1tZW51LS10cmFuc2FjdGlvbi1zdGF0dXMKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLW1lbnUtLXRyYW5zYWN0aW9uLXN0YXR1cykp KQogIChzZXRxIHRhYnVsYXRlZC1saXN0LWZvcm1hdAogICAgICAgIGBbKCJQYWNrYWdlIiAscGFj a2FnZS1uYW1lLWNvbHVtbi13aWR0aCBwYWNrYWdlLW1lbnUtLW5hbWUtcHJlZGljYXRlKQogICAg ICAgICAgKCJWZXJzaW9uIiAscGFja2FnZS12ZXJzaW9uLWNvbHVtbi13aWR0aCBwYWNrYWdlLW1l bnUtLXZlcnNpb24tcHJlZGljYXRlKQogICAgICAgICAgKCJTdGF0dXMiICAscGFja2FnZS1zdGF0 dXMtY29sdW1uLXdpZHRoICBwYWNrYWdlLW1lbnUtLXN0YXR1cy1wcmVkaWNhdGUpCiAgICAgICAg ICAoIkFyY2hpdmUiICxwYWNrYWdlLWFyY2hpdmUtY29sdW1uLXdpZHRoIHBhY2thZ2UtbWVudS0t YXJjaGl2ZS1wcmVkaWNhdGUpCiAgICAgICAgICAoIkRlc2NyaXB0aW9uIiAwIHBhY2thZ2UtbWVu dS0tZGVzY3JpcHRpb24tcHJlZGljYXRlKV0pCiAgKHNldHEgdGFidWxhdGVkLWxpc3QtcGFkZGlu ZyAyKQogIChzZXRxIHRhYnVsYXRlZC1saXN0LXNvcnQta2V5IChjb25zICJTdGF0dXMiIG5pbCkp CiAgKGFkZC1ob29rICd0YWJ1bGF0ZWQtbGlzdC1yZXZlcnQtaG9vayAjJ3BhY2thZ2UtbWVudS0t cmVmcmVzaCBuaWwgdCkKICAodGFidWxhdGVkLWxpc3QtaW5pdC1oZWFkZXIpCiAgKHNldHEgcmV2 ZXJ0LWJ1ZmZlci1mdW5jdGlvbiAncGFja2FnZS1tZW51LS1yZWZyZXNoLWNvbnRlbnRzKQogIChz ZXRmIGltZW51LXByZXYtaW5kZXgtcG9zaXRpb24tZnVuY3Rpb24KICAgICAgICAjJ3BhY2thZ2Ut LWltZW51LXByZXYtaW5kZXgtcG9zaXRpb24tZnVuY3Rpb24pCiAgKHNldGYgaW1lbnUtZXh0cmFj dC1pbmRleC1uYW1lLWZ1bmN0aW9uCiAgICAgICAgIydwYWNrYWdlLS1pbWVudS1leHRyYWN0LWlu ZGV4LW5hbWUtZnVuY3Rpb24pKQoKKGRlZm1hY3JvIHBhY2thZ2UtLXB1c2ggKHBrZy1kZXNjIHN0 YXR1cyBsaXN0bmFtZSkKICAiQ29udmVuaWVuY2UgbWFjcm8gZm9yIGBwYWNrYWdlLW1lbnUtLWdl bmVyYXRlJy4KSWYgdGhlIGFsaXN0IHN0b3JlZCBpbiB0aGUgc3ltYm9sIExJU1ROQU1FIGxhY2tz IGFuIGVudHJ5IGZvciBhCnBhY2thZ2UgUEtHLURFU0MsIGFkZCBvbmUuICBUaGUgYWxpc3QgaXMg a2V5ZWQgd2l0aCBQS0ctREVTQy4iCiAgKGRlY2xhcmUgKG9ic29sZXRlIG5pbCAiMjcuMSIpKQog IGAodW5sZXNzIChhc3NvYyAscGtnLWRlc2MgLGxpc3RuYW1lKQogICAgIDs7IEZJWE1FOiBTaG91 bGQgd2UgbW92ZSBzdGF0dXMgaW50byBwa2ctZGVzYz8KICAgICAocHVzaCAoY29ucyAscGtnLWRl c2MgLHN0YXR1cykgLGxpc3RuYW1lKSkpCgooZGVmdmFyIHBhY2thZ2UtbGlzdC11bnZlcnNpb25l ZCBuaWwKICAiSWYgbm9uLW5pbCwgaW5jbHVkZSBwYWNrYWdlcyB0aGF0IGRvbid0IGhhdmUgYSB2 ZXJzaW9uIGluIGBsaXN0LXBhY2thZ2VzJy4iKQoKKGRlZnZhciBwYWNrYWdlLWxpc3QtdW5zaWdu ZWQgbmlsCiAgIklmIG5vbi1uaWwsIG1lbnRpb24gaW4gdGhlIGxpc3Qgd2hpY2ggcGFja2FnZXMg d2VyZSBpbnN0YWxsZWQgd2l0aG91dCBzaWduYXR1cmUuIikKCihkZWZ2YXIgcGFja2FnZS0tZW1h Y3MtdmVyc2lvbi1saXN0ICh2ZXJzaW9uLXRvLWxpc3QgZW1hY3MtdmVyc2lvbikKICAiVGhlIHZh bHVlIG9mIHZhcmlhYmxlIGBlbWFjcy12ZXJzaW9uJyBhcyBhIGxpc3QuIikKCihkZWZ1biBwYWNr YWdlLS1lbnN1cmUtcGFja2FnZS1tZW51LW1vZGUgKCkKICAiU2lnbmFsIGEgdXNlci1lcnJvciBp ZiBtYWpvciBtb2RlIGlzIG5vdCBgcGFja2FnZS1tZW51LW1vZGUnLiIKICAodW5sZXNzIChkZXJp dmVkLW1vZGUtcCAncGFja2FnZS1tZW51LW1vZGUpCiAgICAodXNlci1lcnJvciAiVGhlIGN1cnJl bnQgYnVmZmVyIGlzIG5vdCBhIFBhY2thZ2UgTWVudSIpKSkKCihkZWZ1biBwYWNrYWdlLS1pbmNv bXBhdGlibGUtcCAocGtnICZvcHRpb25hbCBzaGFsbG93KQogICJSZXR1cm4gbm9uLW5pbCBpZiBQ S0cgaGFzIG5vIGNoYW5jZSBvZiBiZWluZyBpbnN0YWxsYWJsZS4KUEtHIGlzIGEgYHBhY2thZ2Ut ZGVzYycgb2JqZWN0LgoKSWYgU0hBTExPVyBpcyBub24tbmlsLCB0aGlzIG9ubHkgY2hlY2tzIGlm IFBLRyBkZXBlbmRzIG9uIGEKaGlnaGVyIGBlbWFjcy12ZXJzaW9uJyB0aGFuIHRoZSBvbmUgYmVp bmcgdXNlZC4gIE90aGVyd2lzZSwgYWxzbwpjaGVja3MgdGhlIHZpYWJpbGl0eSBvZiBkZXBlbmRl bmNpZXMsIGFjY29yZGluZyB0bwpgcGFja2FnZS0tY29tcGF0aWJpbGl0eS10YWJsZScuCgpJZiBQ S0cgcmVxdWlyZXMgYW4gaW5jb21wYXRpYmxlIEVtYWNzIHZlcnNpb24sIHRoZSByZXR1cm4gdmFs dWUKaXMgdGhpcyB2ZXJzaW9uIChhcyBhIHN0cmluZykuCklmIFBLRyByZXF1aXJlcyBpbmNvbXBh dGlibGUgcGFja2FnZXMsIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBsaXN0Cm9mIHRoZXNlIGRlcGVu ZGVuY2llcywgc2ltaWxhciB0byB0aGUgbGlzdCByZXR1cm5lZCBieQpgcGFja2FnZS1kZXNjLXJl cXMnLiIKICAobGV0KiAoKHJlcXMgICAgKHBhY2thZ2UtZGVzYy1yZXFzIHBrZykpCiAgICAgICAg ICh2ZXJzaW9uIChjYWRyIChhc3NxICdlbWFjcyByZXFzKSkpKQogICAgKGlmIChhbmQgdmVyc2lv biAodmVyc2lvbi1saXN0LTwgcGFja2FnZS0tZW1hY3MtdmVyc2lvbi1saXN0IHZlcnNpb24pKQog ICAgICAgIChwYWNrYWdlLXZlcnNpb24tam9pbiB2ZXJzaW9uKQogICAgICAodW5sZXNzIHNoYWxs b3cKICAgICAgICAobGV0IChvdXQpCiAgICAgICAgICAoZG9saXN0IChkZXAgKHBhY2thZ2UtZGVz Yy1yZXFzIHBrZykgb3V0KQogICAgICAgICAgICAobGV0ICgoZGVwLW5hbWUgKGNhciBkZXApKSkK ICAgICAgICAgICAgICAodW5sZXNzIChlcSAnZW1hY3MgZGVwLW5hbWUpCiAgICAgICAgICAgICAg ICAobGV0ICgoY3YgKGdldGhhc2ggZGVwLW5hbWUgcGFja2FnZS0tY29tcGF0aWJpbGl0eS10YWJs ZSkpKQogICAgICAgICAgICAgICAgICAod2hlbiAodmVyc2lvbi1saXN0LTwgKG9yIGN2ICcoMCkp IChvciAoY2FkciBkZXApICcoMCkpKQogICAgICAgICAgICAgICAgICAgIChwdXNoIGRlcCBvdXQp KSkpKSkpKSkpKQoKKGRlZnVuIHBhY2thZ2UtZGVzYy1zdGF0dXMgKHBrZy1kZXNjKQogICJSZXR1 cm4gdGhlIHN0YXR1cyBvZiBgcGFja2FnZS1kZXNjJyBvYmplY3QgUEtHLURFU0MuIgogIChsZXQq ICgobmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKQogICAgICAgICAoZGlyIChwYWNr YWdlLWRlc2MtZGlyIHBrZy1kZXNjKSkKICAgICAgICAgKGxsZSAoYXNzcSBuYW1lIHBhY2thZ2Ut bG9hZC1saXN0KSkKICAgICAgICAgKGhlbGQgKGNhZHIgbGxlKSkKICAgICAgICAgKHZlcnNpb24g KHBhY2thZ2UtZGVzYy12ZXJzaW9uIHBrZy1kZXNjKSkKICAgICAgICAgKHNpZ25lZCAob3IgKG5v dCBwYWNrYWdlLWxpc3QtdW5zaWduZWQpCiAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRl c2Mtc2lnbmVkIHBrZy1kZXNjKSkpKQogICAgKGNvbmQKICAgICAoKHBhY2thZ2UtdmMtcCBwa2ct ZGVzYykgInNvdXJjZSIpCiAgICAgKChlcSBkaXIgJ2J1aWx0aW4pICJidWlsdC1pbiIpCiAgICAg KChhbmQgbGxlIChudWxsIGhlbGQpKSAiZGlzYWJsZWQiKQogICAgICgoc3RyaW5ncCBoZWxkKQog ICAgICAobGV0ICgoaHYgKGlmIChzdHJpbmdwIGhlbGQpICh2ZXJzaW9uLXRvLWxpc3QgaGVsZCkp KSkKICAgICAgICAoY29uZAogICAgICAgICAoKHZlcnNpb24tbGlzdC09IHZlcnNpb24gaHYpICJo ZWxkIikKICAgICAgICAgKCh2ZXJzaW9uLWxpc3QtPCB2ZXJzaW9uIGh2KSAib2Jzb2xldGUiKQog ICAgICAgICAodCAiZGlzYWJsZWQiKSkpKQogICAgIChkaXIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgO09uZSBvZiB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzLgogICAgICAoY29uZAogICAg ICAgKChub3QgKGZpbGUtZXhpc3RzLXAgZGlyKSkgImRlbGV0ZWQiKQogICAgICAgOzsgTm90IGlu c2lkZSBgcGFja2FnZS11c2VyLWRpcicuCiAgICAgICAoKG5vdCAoZmlsZS1pbi1kaXJlY3Rvcnkt cCBkaXIgcGFja2FnZS11c2VyLWRpcikpICJleHRlcm5hbCIpCiAgICAgICAoKGVxIHBrZy1kZXNj IChjYWRyIChhc3NxIG5hbWUgcGFja2FnZS1hbGlzdCkpKQogICAgICAgIChpZiAobm90IHNpZ25l ZCkgInVuc2lnbmVkIgogICAgICAgICAgKGlmIChwYWNrYWdlLS11c2VyLXNlbGVjdGVkLXAgbmFt ZSkKICAgICAgICAgICAgICAiaW5zdGFsbGVkIiAiZGVwZW5kZW5jeSIpKSkKICAgICAgICh0ICJv YnNvbGV0ZSIpKSkKICAgICAoKHBhY2thZ2UtLWluY29tcGF0aWJsZS1wIHBrZy1kZXNjKSAiaW5j b21wYXQiKQogICAgICh0CiAgICAgIChsZXQqICgoaW5zIChjYWRyIChhc3NxIG5hbWUgcGFja2Fn ZS1hbGlzdCkpKQogICAgICAgICAgICAgKGlucy12IChpZiBpbnMgKHBhY2thZ2UtZGVzYy12ZXJz aW9uIGlucykpKSkKICAgICAgICAoY29uZAogICAgICAgICA7OyBJbnN0YWxsZWQgb2Jzb2xldGUg cGFja2FnZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGBkaXInCiAgICAgICAgIDs7IGNsYXVzZSBhYm92 ZS4gIEhlcmUgd2UgaGFuZGxlIGF2YWlsYWJsZSBvYnNvbGV0ZSwgd2hpY2gKICAgICAgICAgOzsg YXJlIGRpc3BsYXllZCBkZXBlbmRpbmcgb24gYHBhY2thZ2UtbWVudS0taGlkZS1wYWNrYWdlcycu CiAgICAgICAgICgoYW5kIGlucyAodmVyc2lvbi1saXN0LTw9IHZlcnNpb24gaW5zLXYpKSAiYXZh aWwtb2JzbyIpCiAgICAgICAgICh0CiAgICAgICAgICAoaWYgKG1lbXEgbmFtZSBwYWNrYWdlLW1l bnUtLW5ldy1wYWNrYWdlLWxpc3QpCiAgICAgICAgICAgICAgIm5ldyIgImF2YWlsYWJsZSIpKSkp KSkpKQoKKGRlZnZhciBwYWNrYWdlLW1lbnUtLWhpZGUtcGFja2FnZXMgdAogICJXaGV0aGVyIGF2 YWlsYWJsZSBvYnNvbGV0ZSBwYWNrYWdlcyBzaG91bGQgYmUgaGlkZGVuLgpDYW4gYmUgdG9nZ2xl ZCB3aXRoIFxcPHBhY2thZ2UtbWVudS1tb2RlLW1hcD4gXFxbcGFja2FnZS1tZW51LXRvZ2dsZS1o aWRpbmddLgpJbnN0YWxsZWQgb2Jzb2xldGUgcGFja2FnZXMgYXJlIGFsd2F5cyBkaXNwbGF5ZWQu IikKCihkZWZ1biBwYWNrYWdlLW1lbnUtdG9nZ2xlLWhpZGluZyAoKQogICJJbiBQYWNrYWdlIE1l bnUsIHRvZ2dsZSB2aXNpYmlsaXR5IG9mIG9ic29sZXRlIGF2YWlsYWJsZSBwYWNrYWdlcy4KCkFs c28gaGlkZSBwYWNrYWdlcyB3aG9zZSBuYW1lIG1hdGNoZXMgYSByZWdleHAgaW4gdXNlciBvcHRp b24KYHBhY2thZ2UtaGlkZGVuLXJlZ2V4cHMnIChhIGxpc3QpLiAgVG8gYWRkIHJlZ2V4cHMgdG8g dGhpcyBsaXN0LAp1c2UgYHBhY2thZ2UtbWVudS1oaWRlLXBhY2thZ2UnLiIKICAoaW50ZXJhY3Rp dmUgbmlsIHBhY2thZ2UtbWVudS1tb2RlKQogIChwYWNrYWdlLS1lbnN1cmUtcGFja2FnZS1tZW51 LW1vZGUpCiAgKHNldHEgcGFja2FnZS1tZW51LS1oaWRlLXBhY2thZ2VzCiAgICAgICAgKG5vdCBw YWNrYWdlLW1lbnUtLWhpZGUtcGFja2FnZXMpKQogIChpZiBwYWNrYWdlLW1lbnUtLWhpZGUtcGFj a2FnZXMKICAgICAgKG1lc3NhZ2UgIkhpZGluZyBvYnNvbGV0ZSBvciB1bndhbnRlZCBwYWNrYWdl cyIpCiAgICAobWVzc2FnZSAiRGlzcGxheWluZyBhbGwgcGFja2FnZXMiKSkKICAocmV2ZXJ0LWJ1 ZmZlciBuaWwgJ25vLWNvbmZpcm0pKQoKKGRlZnVuIHBhY2thZ2UtLXJlbW92ZS1oaWRkZW4gKHBr Zy1saXN0KQogICJGaWx0ZXIgUEtHLUxJU1QgYWNjb3JkaW5nIHRvIGBwYWNrYWdlLWFyY2hpdmUt cHJpb3JpdGllcycuClBLRy1MSVNUIG11c3QgYmUgYSBsaXN0IG9mIGBwYWNrYWdlLWRlc2MnIG9i amVjdHMsIGFsbCB3aXRoIHRoZQpzYW1lIG5hbWUsIHNvcnRlZCBieSBkZWNyZWFzaW5nIGBwYWNr YWdlLWRlc2MtcHJpb3JpdHktdmVyc2lvbicuClJldHVybiBhIGxpc3Qgb2YgcGFja2FnZXMgdGll ZCBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgYWNjb3JkaW5nCnRvIHRoZWlyIGFyY2hpdmVzLiIK ICAod2hlbiBwa2ctbGlzdAogICAgOzsgVmFyaWFibGUgdG9nZ2xlZCB3aXRoIGBwYWNrYWdlLW1l bnUtdG9nZ2xlLWhpZGluZycuCiAgICAoaWYgKG5vdCBwYWNrYWdlLW1lbnUtLWhpZGUtcGFja2Fn ZXMpCiAgICAgICAgcGtnLWxpc3QKICAgICAgKGxldCAoKGluc3RhbGxlZCAoY2FkciAoYXNzcSAo cGFja2FnZS1kZXNjLW5hbWUgKGNhciBwa2ctbGlzdCkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFja2FnZS1hbGlzdCkpKSkKICAgICAgICAod2hlbiBpbnN0YWxsZWQKICAg ICAgICAgIChzZXRxIHBrZy1saXN0CiAgICAgICAgICAgICAgICAobGV0ICgoaW5zLXZlcnNpb24g KHBhY2thZ2UtZGVzYy12ZXJzaW9uIGluc3RhbGxlZCkpKQogICAgICAgICAgICAgICAgICAoY2wt cmVtb3ZlLWlmIChsYW1iZGEgKHApICh2ZXJzaW9uLWxpc3QtPCAocGFja2FnZS1kZXNjLXZlcnNp b24gcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlucy12ZXJzaW9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2ctbGlz dCkpKSkKICAgICAgICAobGV0ICgoZmlsdGVyZWQtYnktcHJpb3JpdHkKICAgICAgICAgICAgICAg KGNvbmQKICAgICAgICAgICAgICAgICgobm90IHBhY2thZ2UtbWVudS1oaWRlLWxvdy1wcmlvcml0 eSkKICAgICAgICAgICAgICAgICBwa2ctbGlzdCkKICAgICAgICAgICAgICAgICgoZXEgcGFja2Fn ZS1tZW51LWhpZGUtbG93LXByaW9yaXR5ICdhcmNoaXZlKQogICAgICAgICAgICAgICAgIChsZXQg KG1heC1wcmlvcml0eSBvdXQpCiAgICAgICAgICAgICAgICAgICAod2hpbGUgcGtnLWxpc3QKICAg ICAgICAgICAgICAgICAgICAgKGxldCAoKHAgKHBvcCBwa2ctbGlzdCkpKQogICAgICAgICAgICAg ICAgICAgICAgIChsZXQgKChwcmlvcml0eSAocGFja2FnZS1kZXNjLXByaW9yaXR5IHApKSkKICAg ICAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIG1heC1wcmlvcml0eSAoPCBwcmlvcml0eSBt YXgtcHJpb3JpdHkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHBrZy1saXN0 IG5pbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB1c2ggcCBvdXQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzZXRxIG1heC1wcmlvcml0eSBwcmlvcml0eSkpKSkpCiAgICAgICAg ICAgICAgICAgICAobnJldmVyc2Ugb3V0KSkpCiAgICAgICAgICAgICAgICAocGtnLWxpc3QKICAg ICAgICAgICAgICAgICAobGlzdCAoY2FyIHBrZy1saXN0KSkpKSkpCiAgICAgICAgICAoaWYgKG5v dCBpbnN0YWxsZWQpCiAgICAgICAgICAgICAgZmlsdGVyZWQtYnktcHJpb3JpdHkKICAgICAgICAg ICAgKGxldCAoKGlucy12ZXJzaW9uIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBpbnN0YWxsZWQpKSkK ICAgICAgICAgICAgICAoY2wtcmVtb3ZlLWlmIChsYW1iZGEgKHApIChvciAodmVyc2lvbi1saXN0 LT0gKHBhY2thZ2UtZGVzYy12ZXJzaW9uIHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucy12ZXJzaW9uKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLXZjLXAgaW5zdGFsbGVkKSkp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC1ieS1wcmlvcml0eSkpKSkpKSkp CgooZGVmY3VzdG9tIHBhY2thZ2UtaGlkZGVuLXJlZ2V4cHMgbmlsCiAgIkxpc3Qgb2YgcmVnZXhw cyBtYXRjaGluZyB0aGUgbmFtZSBvZiBwYWNrYWdlcyB0byBoaWRlLgpJZiB0aGUgbmFtZSBvZiBh IHBhY2thZ2UgbWF0Y2hlcyBhbnkgb2YgdGhlc2UgcmVnZXhwcyBpdCBpcwpvbWl0dGVkIGZyb20g dGhlIHBhY2thZ2UgbWVudS4gIFRvIHRvZ2dsZSB0aGlzLCB0eXBlIFxcW3BhY2thZ2UtbWVudS10 b2dnbGUtaGlkaW5nXS4KClZhbHVlcyBjYW4gYmUgaW50ZXJhY3RpdmVseSBhZGRlZCB0byB0aGlz IGxpc3QgYnkgdHlwaW5nClxcW3BhY2thZ2UtbWVudS1oaWRlLXBhY2thZ2VdIG9uIGEgcGFja2Fn ZS4iCiAgOnZlcnNpb24gIjI1LjEiCiAgOnR5cGUgJyhyZXBlYXQgKHJlZ2V4cCA6dGFnICJIaWRl IHBhY2thZ2VzIHdpdGggbmFtZSBtYXRjaGluZyIpKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUtLXJl ZnJlc2ggKCZvcHRpb25hbCBwYWNrYWdlcyBrZXl3b3JkcykKICAiUmUtcG9wdWxhdGUgdGhlIGB0 YWJ1bGF0ZWQtbGlzdC1lbnRyaWVzJy4KUEFDS0FHRVMgc2hvdWxkIGJlIG5pbCBvciB0LCB3aGlj aCBtZWFucyB0byBkaXNwbGF5IGFsbCBrbm93biBwYWNrYWdlcy4KS0VZV09SRFMgc2hvdWxkIGJl IG5pbCBvciBhIGxpc3Qgb2Yga2V5d29yZHMuIgogIDs7IENvbnN0cnVjdCBsaXN0IG9mIChQS0ct REVTQyAuIFNUQVRVUykuCiAgKHVubGVzcyBwYWNrYWdlcyAoc2V0cSBwYWNrYWdlcyB0KSkKICAo bGV0ICgoaGlkZGVuLW5hbWVzIChtYXBjb25jYXQgIydpZGVudGl0eSBwYWNrYWdlLWhpZGRlbi1y ZWdleHBzICJcXHwiKSkKICAgICAgICBpbmZvLWxpc3QpCiAgICA7OyBJbnN0YWxsZWQgcGFja2Fn ZXM6CiAgICAoZG9saXN0IChlbHQgcGFja2FnZS1hbGlzdCkKICAgICAgKGxldCAoKG5hbWUgKGNh ciBlbHQpKSkKICAgICAgICAod2hlbiAob3IgKGVxIHBhY2thZ2VzIHQpIChtZW1xIG5hbWUgcGFj a2FnZXMpKQogICAgICAgICAgKGRvbGlzdCAocGtnIChjZHIgZWx0KSkKICAgICAgICAgICAgKHdo ZW4gKHBhY2thZ2UtLWhhcy1rZXl3b3JkLXAgcGtnIGtleXdvcmRzKQogICAgICAgICAgICAgIChw dXNoIHBrZyBpbmZvLWxpc3QpKSkpKSkKCiAgICA7OyBCdWlsdC1pbiBwYWNrYWdlczoKICAgIChk b2xpc3QgKGVsdCBwYWNrYWdlLS1idWlsdGlucykKICAgICAgKGxldCAoKHBrZyAgKHBhY2thZ2Ut LWZyb20tYnVpbHRpbiBlbHQpKQogICAgICAgICAgICAobmFtZSAoY2FyIGVsdCkpKQogICAgICAg ICh3aGVuIChub3QgKGVxIG5hbWUgJ2VtYWNzKSkgOyBIaWRlIHRoZSBgZW1hY3MnIHBhY2thZ2Uu CiAgICAgICAgICAod2hlbiAoYW5kIChwYWNrYWdlLS1oYXMta2V5d29yZC1wIHBrZyBrZXl3b3Jk cykKICAgICAgICAgICAgICAgICAgICAgKG9yIHBhY2thZ2UtbGlzdC11bnZlcnNpb25lZAogICAg ICAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtLWJpLWRlc2MtdmVyc2lvbiAoY2RyIGVsdCkp KQogICAgICAgICAgICAgICAgICAgICAob3IgKGVxIHBhY2thZ2VzIHQpIChtZW1xIG5hbWUgcGFj a2FnZXMpKSkKICAgICAgICAgICAgKHB1c2ggcGtnIGluZm8tbGlzdCkpKSkpCgogICAgOzsgQXZh aWxhYmxlIGFuZCBkaXNhYmxlZCBwYWNrYWdlczoKICAgICh1bmxlc3MgKGVxdWFsIHBhY2thZ2Ut LW9sZC1hcmNoaXZlLXByaW9yaXRpZXMgcGFja2FnZS1hcmNoaXZlLXByaW9yaXRpZXMpCiAgICAg IChwYWNrYWdlLXJlYWQtYWxsLWFyY2hpdmUtY29udGVudHMpKQogICAgKGRvbGlzdCAoZWx0IHBh Y2thZ2UtYXJjaGl2ZS1jb250ZW50cykKICAgICAgKGxldCAoKG5hbWUgKGNhciBlbHQpKSkKICAg ICAgICA7OyBUbyBiZSBkaXNwbGF5ZWQgaXQgbXVzdCBiZSBpbiBQQUNLQUdFUzsKICAgICAgICAo d2hlbiAoYW5kIChvciAoZXEgcGFja2FnZXMgdCkgKG1lbXEgbmFtZSBwYWNrYWdlcykpCiAgICAg ICAgICAgICAgICAgICA7OyBhbmQgd2UgbXVzdCBlaXRoZXIgbm90IGJlIGhpZGluZyBhbnl0aGlu ZywKICAgICAgICAgICAgICAgICAgIChvciAobm90IHBhY2thZ2UtbWVudS0taGlkZS1wYWNrYWdl cykKICAgICAgICAgICAgICAgICAgICAgICAobm90IHBhY2thZ2UtaGlkZGVuLXJlZ2V4cHMpCiAg ICAgICAgICAgICAgICAgICAgICAgOzsgb3IganVzdCBub3QgaGlkaW5nIHRoaXMgc3BlY2lmaWMg cGFja2FnZS4KICAgICAgICAgICAgICAgICAgICAgICAobm90IChzdHJpbmctbWF0Y2ggaGlkZGVu LW5hbWVzIChzeW1ib2wtbmFtZSBuYW1lKSkpKSkKICAgICAgICAgIDs7IEhpZGUgYXZhaWxhYmxl LW9ic29sZXRlIG9yIGxvdy1wcmlvcml0eSBwYWNrYWdlcy4KICAgICAgICAgIChkb2xpc3QgKHBr ZyAocGFja2FnZS0tcmVtb3ZlLWhpZGRlbiAoY2RyIGVsdCkpKQogICAgICAgICAgICAod2hlbiAo cGFja2FnZS0taGFzLWtleXdvcmQtcCBwa2cga2V5d29yZHMpCiAgICAgICAgICAgICAgKHB1c2gg cGtnIGluZm8tbGlzdCkpKSkpKQoKICAgIDs7IFByaW50IHRoZSByZXN1bHQuCiAgICAodGFidWxh dGVkLWxpc3QtaW5pdC1oZWFkZXIpCiAgICAoc2V0cSB0YWJ1bGF0ZWQtbGlzdC1lbnRyaWVzCiAg ICAgICAgICAobWFwY2FyICMncGFja2FnZS1tZW51LS1wcmludC1pbmZvLXNpbXBsZSBpbmZvLWxp c3QpKSkpCgooZGVmdW4gcGFja2FnZS1hbGwta2V5d29yZHMgKCkKICAiQ29sbGVjdCBhbGwgcGFj a2FnZSBrZXl3b3Jkcy4iCiAgKGxldCAoKGtleS1saXN0KSkKICAgIChwYWNrYWdlLS1tYXBjIChs YW1iZGEgKGRlc2MpCiAgICAgICAgICAgICAgICAgICAgIChzZXRxIGtleS1saXN0IChhcHBlbmQg KHBhY2thZ2UtZGVzYy0ta2V5d29yZHMgZGVzYykKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBrZXktbGlzdCkpKSkKICAgIGtleS1saXN0KSkKCihkZWZ1biBwYWNr YWdlLS1tYXBjIChmdW5jdGlvbiAmb3B0aW9uYWwgcGFja2FnZXMpCiAgIkNhbGwgRlVOQ1RJT04g Zm9yIGFsbCBrbm93biBQQUNLQUdFUy4KUEFDS0FHRVMgY2FuIGJlIG5pbCBvciB0LCB3aGljaCBt ZWFucyB0byBkaXNwbGF5IGFsbCBrbm93bgpwYWNrYWdlcywgb3IgYSBsaXN0IG9mIHBhY2thZ2Vz LgoKQnVpbHQtaW4gcGFja2FnZXMgYXJlIGNvbnZlcnRlZCB3aXRoIGBwYWNrYWdlLS1mcm9tLWJ1 aWx0aW4nLiIKICAodW5sZXNzIHBhY2thZ2VzIChzZXRxIHBhY2thZ2VzIHQpKQogIChsZXQgKG5h bWUpCiAgICA7OyBJbnN0YWxsZWQgcGFja2FnZXM6CiAgICAoZG9saXN0IChlbHQgcGFja2FnZS1h bGlzdCkKICAgICAgKHNldHEgbmFtZSAoY2FyIGVsdCkpCiAgICAgICh3aGVuIChvciAoZXEgcGFj a2FnZXMgdCkgKG1lbXEgbmFtZSBwYWNrYWdlcykpCiAgICAgICAgKG1hcGMgZnVuY3Rpb24gKGNk ciBlbHQpKSkpCgogICAgOzsgQnVpbHQtaW4gcGFja2FnZXM6CiAgICAoZG9saXN0IChlbHQgcGFj a2FnZS0tYnVpbHRpbnMpCiAgICAgIChzZXRxIG5hbWUgKGNhciBlbHQpKQogICAgICAod2hlbiAo YW5kIChub3QgKGVxIG5hbWUgJ2VtYWNzKSkgOyBIaWRlIHRoZSBgZW1hY3MnIHBhY2thZ2UuCiAg ICAgICAgICAgICAgICAgKG9yIHBhY2thZ2UtbGlzdC11bnZlcnNpb25lZAogICAgICAgICAgICAg ICAgICAgICAocGFja2FnZS0tYmktZGVzYy12ZXJzaW9uIChjZHIgZWx0KSkpCiAgICAgICAgICAg ICAgICAgKG9yIChlcSBwYWNrYWdlcyB0KSAobWVtcSBuYW1lIHBhY2thZ2VzKSkpCiAgICAgICAg KGZ1bmNhbGwgZnVuY3Rpb24gKHBhY2thZ2UtLWZyb20tYnVpbHRpbiBlbHQpKSkpCgogICAgOzsg QXZhaWxhYmxlIGFuZCBkaXNhYmxlZCBwYWNrYWdlczoKICAgIChkb2xpc3QgKGVsdCBwYWNrYWdl LWFyY2hpdmUtY29udGVudHMpCiAgICAgIChzZXRxIG5hbWUgKGNhciBlbHQpKQogICAgICAod2hl biAob3IgKGVxIHBhY2thZ2VzIHQpIChtZW1xIG5hbWUgcGFja2FnZXMpKQogICAgICAgIChkb2xp c3QgKHBrZyAoY2RyIGVsdCkpCiAgICAgICAgICA7OyBIaWRlIG9ic29sZXRlIHBhY2thZ2VzLgog ICAgICAgICAgKHVubGVzcyAocGFja2FnZS1pbnN0YWxsZWQtcCAocGFja2FnZS1kZXNjLW5hbWUg cGtnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNj LXZlcnNpb24gcGtnKSkKICAgICAgICAoZnVuY2FsbCBmdW5jdGlvbiBwa2cpKSkpKSkpCgooZGVm dW4gcGFja2FnZS0taGFzLWtleXdvcmQtcCAoZGVzYyAmb3B0aW9uYWwga2V5d29yZHMpCiAgIlRl c3QgaWYgcGFja2FnZSBERVNDIGhhcyBhbnkgb2YgdGhlIGdpdmVuIEtFWVdPUkRTLgpXaGVuIG5v bmUgYXJlIGdpdmVuLCB0aGUgcGFja2FnZSBtYXRjaGVzLiIKICAoaWYga2V5d29yZHMKICAgICAg KGxldCAoKGRlc2Mta2V5d29yZHMgKGFuZCBkZXNjIChwYWNrYWdlLWRlc2MtLWtleXdvcmRzIGRl c2MpKSkKICAgICAgICAgICAgZm91bmQpCiAgICAgICAgKHdoaWxlIChhbmQgKG5vdCBmb3VuZCkg a2V5d29yZHMpCiAgICAgICAgICAobGV0ICgoayAocG9wIGtleXdvcmRzKSkpCiAgICAgICAgICAg IChzZXRxIGZvdW5kCiAgICAgICAgICAgICAgICAgIChvciAoc3RyaW5nPSBrIChjb25jYXQgImFy YzoiIChwYWNrYWdlLWRlc2MtYXJjaGl2ZSBkZXNjKSkpCiAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nPSBrIChjb25jYXQgInN0YXR1czoiIChwYWNrYWdlLWRlc2Mtc3RhdHVzIGRlc2MpKSkK ICAgICAgICAgICAgICAgICAgICAgIChtZW1iZXIgayBkZXNjLWtleXdvcmRzKSkpKSkKICAgICAg ICBmb3VuZCkKICAgIHQpKQoKKGRlZnVuIHBhY2thZ2UtbWVudS0tZGlzcGxheSAocmVtZW1iZXIt cG9zIHN1ZmZpeCkKICAiRGlzcGxheSB0aGUgUGFja2FnZSBNZW51LgpJZiBSRU1FTUJFUi1QT1Mg aXMgbm9uLW5pbCwga2VlcCBwb2ludCBvbiB0aGUgc2FtZSBlbnRyeS4KCklmIFNVRkZJWCBpcyBu b24tbmlsLCBhcHBlbmQgdGhhdCB0byBcIlBhY2thZ2VcIiBmb3IgdGhlIGZpcnN0CmNvbHVtbiBp biB0aGUgaGVhZGVyIGxpbmUuIgogIChzZXRmIChjYXIgKGFyZWYgdGFidWxhdGVkLWxpc3QtZm9y bWF0IDApKQogICAgICAgIChpZiBzdWZmaXgKICAgICAgICAgICAgKGNvbmNhdCAiUGFja2FnZVsi IHN1ZmZpeCAiXSIpCiAgICAgICAgICAiUGFja2FnZSIpKQogICh0YWJ1bGF0ZWQtbGlzdC1pbml0 LWhlYWRlcikKICAodGFidWxhdGVkLWxpc3QtcHJpbnQgcmVtZW1iZXItcG9zKSkKCihkZWZ1biBw YWNrYWdlLW1lbnUtLWdlbmVyYXRlIChyZW1lbWJlci1wb3MgJm9wdGlvbmFsIHBhY2thZ2VzIGtl eXdvcmRzKQogICJQb3B1bGF0ZSBhbmQgZGlzcGxheSB0aGUgUGFja2FnZSBNZW51LgpJZiBSRU1F TUJFUi1QT1MgaXMgbm9uLW5pbCwga2VlcCBwb2ludCBvbiB0aGUgc2FtZSBlbnRyeS4KUEFDS0FH RVMgc2hvdWxkIGJlIHQsIHdoaWNoIG1lYW5zIHRvIGRpc3BsYXkgYWxsIGtub3duIHBhY2thZ2Vz LApvciBhIGxpc3Qgb2YgcGFja2FnZSBuYW1lcyAoc3ltYm9scykgdG8gZGlzcGxheS4KCldpdGgg S0VZV09SRFMgZ2l2ZW4sIG9ubHkgcGFja2FnZXMgd2l0aCB0aG9zZSBrZXl3b3JkcyBhcmUKc2hv d24uIgogIChwYWNrYWdlLW1lbnUtLXJlZnJlc2ggcGFja2FnZXMga2V5d29yZHMpCiAgKHBhY2th Z2UtbWVudS0tZGlzcGxheSByZW1lbWJlci1wb3MKICAgICAgICAgICAgICAgICAgKHdoZW4ga2V5 d29yZHMKICAgICAgICAgICAgICAgICAgICAobGV0ICgoZmlsdGVycyAobWFwY29uY2F0ICMnaWRl bnRpdHkga2V5d29yZHMgIiwiKSkpCiAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICJQYWNr YWdlWyIgZmlsdGVycyAiXSIpKSkpKQoKKGRlZnVuIHBhY2thZ2UtbWVudS0tcHJpbnQtaW5mbyAo cGtnKQogICJSZXR1cm4gYSBwYWNrYWdlIGVudHJ5IHN1aXRhYmxlIGZvciBgdGFidWxhdGVkLWxp c3QtZW50cmllcycuClBLRyBoYXMgdGhlIGZvcm0gKFBLRy1ERVNDIC4gU1RBVFVTKS4KUmV0dXJu IChQS0ctREVTQyBbTkFNRSBWRVJTSU9OIFNUQVRVUyBET0NdKS4iCiAgKHBhY2thZ2UtbWVudS0t cHJpbnQtaW5mby1zaW1wbGUgKGNhciBwa2cpKSkKKG1ha2Utb2Jzb2xldGUgJ3BhY2thZ2UtbWVu dS0tcHJpbnQtaW5mbwogICAgICAgICAgICAgICAncGFja2FnZS1tZW51LS1wcmludC1pbmZvLXNp bXBsZSAiMjUuMSIpCgoMCjs7OyBQYWNrYWdlIG1lbnUgZmFjZXMKCihkZWZmYWNlIHBhY2thZ2Ut bmFtZQogICcoKHQgOmluaGVyaXQgbGluaykpCiAgIkZhY2UgdXNlZCBvbiBwYWNrYWdlIG5hbWVz IGluIHRoZSBwYWNrYWdlIG1lbnUuIgogIDp2ZXJzaW9uICIyNS4xIikKCihkZWZmYWNlIHBhY2th Z2UtZGVzY3JpcHRpb24KICAnKCh0IDppbmhlcml0IGRlZmF1bHQpKQogICJGYWNlIHVzZWQgb24g cGFja2FnZSBkZXNjcmlwdGlvbiBzdW1tYXJpZXMgaW4gdGhlIHBhY2thZ2UgbWVudS4iCiAgOnZl cnNpb24gIjI1LjEiKQoKOzsgU2hhbWUgdGhpcyBoeXBoZW5hdGVzICJidWlsdC1pbiIsIHdoZW4g ImZvbnQtbG9jay1idWlsdGluLWZhY2UiIGRvZXNuJ3QuCihkZWZmYWNlIHBhY2thZ2Utc3RhdHVz LWJ1aWx0LWluCiAgJygodCA6aW5oZXJpdCBmb250LWxvY2stYnVpbHRpbi1mYWNlKSkKICAiRmFj ZSB1c2VkIG9uIHRoZSBzdGF0dXMgYW5kIHZlcnNpb24gb2YgYnVpbHQtaW4gcGFja2FnZXMuIgog IDp2ZXJzaW9uICIyNS4xIikKCihkZWZmYWNlIHBhY2thZ2Utc3RhdHVzLWV4dGVybmFsCiAgJygo dCA6aW5oZXJpdCBwYWNrYWdlLXN0YXR1cy1idWlsdC1pbikpCiAgIkZhY2UgdXNlZCBvbiB0aGUg c3RhdHVzIGFuZCB2ZXJzaW9uIG9mIGV4dGVybmFsIHBhY2thZ2VzLiIKICA6dmVyc2lvbiAiMjUu MSIpCgooZGVmZmFjZSBwYWNrYWdlLXN0YXR1cy1hdmFpbGFibGUKICAnKCh0IDppbmhlcml0IGRl ZmF1bHQpKQogICJGYWNlIHVzZWQgb24gdGhlIHN0YXR1cyBhbmQgdmVyc2lvbiBvZiBhdmFpbGFi bGUgcGFja2FnZXMuIgogIDp2ZXJzaW9uICIyNS4xIikKCihkZWZmYWNlIHBhY2thZ2Utc3RhdHVz LW5ldwogICcoKHQgOmluaGVyaXQgKGJvbGQgcGFja2FnZS1zdGF0dXMtYXZhaWxhYmxlKSkpCiAg IkZhY2UgdXNlZCBvbiB0aGUgc3RhdHVzIGFuZCB2ZXJzaW9uIG9mIG5ldyBwYWNrYWdlcy4iCiAg OnZlcnNpb24gIjI1LjEiKQoKKGRlZmZhY2UgcGFja2FnZS1zdGF0dXMtaGVsZAogICcoKHQgOmlu aGVyaXQgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpKQogICJGYWNlIHVzZWQgb24gdGhlIHN0YXR1 cyBhbmQgdmVyc2lvbiBvZiBoZWxkIHBhY2thZ2VzLiIKICA6dmVyc2lvbiAiMjUuMSIpCgooZGVm ZmFjZSBwYWNrYWdlLXN0YXR1cy1kaXNhYmxlZAogICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLXdh cm5pbmctZmFjZSkpCiAgIkZhY2UgdXNlZCBvbiB0aGUgc3RhdHVzIGFuZCB2ZXJzaW9uIG9mIGRp c2FibGVkIHBhY2thZ2VzLiIKICA6dmVyc2lvbiAiMjUuMSIpCgooZGVmZmFjZSBwYWNrYWdlLXN0 YXR1cy1pbnN0YWxsZWQKICAnKCh0IDppbmhlcml0IGZvbnQtbG9jay1jb21tZW50LWZhY2UpKQog ICJGYWNlIHVzZWQgb24gdGhlIHN0YXR1cyBhbmQgdmVyc2lvbiBvZiBpbnN0YWxsZWQgcGFja2Fn ZXMuIgogIDp2ZXJzaW9uICIyNS4xIikKCihkZWZmYWNlIHBhY2thZ2Utc3RhdHVzLWZyb20tc291 cmNlCiAgJygodCA6aW5oZXJpdCBmb250LWxvY2stbmVnYXRpb24tY2hhci1mYWNlKSkKICAiRmFj ZSB1c2VkIG9uIHRoZSBzdGF0dXMgYW5kIHZlcnNpb24gb2YgaW5zdGFsbGVkIHBhY2thZ2VzLiIK ICA6dmVyc2lvbiAiMjkuMSIpCgooZGVmZmFjZSBwYWNrYWdlLXN0YXR1cy1kZXBlbmRlbmN5CiAg JygodCA6aW5oZXJpdCBwYWNrYWdlLXN0YXR1cy1pbnN0YWxsZWQpKQogICJGYWNlIHVzZWQgb24g dGhlIHN0YXR1cyBhbmQgdmVyc2lvbiBvZiBkZXBlbmRlbmN5IHBhY2thZ2VzLiIKICA6dmVyc2lv biAiMjUuMSIpCgooZGVmZmFjZSBwYWNrYWdlLXN0YXR1cy11bnNpZ25lZAogICcoKHQgOmluaGVy aXQgZm9udC1sb2NrLXdhcm5pbmctZmFjZSkpCiAgIkZhY2UgdXNlZCBvbiB0aGUgc3RhdHVzIGFu ZCB2ZXJzaW9uIG9mIHVuc2lnbmVkIHBhY2thZ2VzLiIKICA6dmVyc2lvbiAiMjUuMSIpCgooZGVm ZmFjZSBwYWNrYWdlLXN0YXR1cy1pbmNvbXBhdAogICcoKHQgOmluaGVyaXQgZXJyb3IpKQogICJG YWNlIHVzZWQgb24gdGhlIHN0YXR1cyBhbmQgdmVyc2lvbiBvZiBpbmNvbXBhdCBwYWNrYWdlcy4i CiAgOnZlcnNpb24gIjI1LjEiKQoKKGRlZmZhY2UgcGFja2FnZS1zdGF0dXMtYXZhaWwtb2Jzbwog ICcoKHQgOmluaGVyaXQgcGFja2FnZS1zdGF0dXMtaW5jb21wYXQpKQogICJGYWNlIHVzZWQgb24g dGhlIHN0YXR1cyBhbmQgdmVyc2lvbiBvZiBhdmFpbC1vYnNvIHBhY2thZ2VzLiIKICA6dmVyc2lv biAiMjUuMSIpCgoMCjs7OyBQYWNrYWdlIG1lbnUgcHJpbnRpbmcKCihkZWZ1biBwYWNrYWdlLW1l bnUtLXByaW50LWluZm8tc2ltcGxlIChwa2cpCiAgIlJldHVybiBhIHBhY2thZ2UgZW50cnkgc3Vp dGFibGUgZm9yIGB0YWJ1bGF0ZWQtbGlzdC1lbnRyaWVzJy4KUEtHIGlzIGEgYHBhY2thZ2UtZGVz Yycgb2JqZWN0LgpSZXR1cm4gKFBLRy1ERVNDIFtOQU1FIFZFUlNJT04gU1RBVFVTIERPQ10pLiIK ICAobGV0KiAoKHN0YXR1cyAgKHBhY2thZ2UtZGVzYy1zdGF0dXMgcGtnKSkKICAgICAgICAgKGZh Y2UgKHBjYXNlIHN0YXR1cwogICAgICAgICAgICAgICAgICgiYnVpbHQtaW4iICAncGFja2FnZS1z dGF0dXMtYnVpbHQtaW4pCiAgICAgICAgICAgICAgICAgKCJleHRlcm5hbCIgICdwYWNrYWdlLXN0 YXR1cy1leHRlcm5hbCkKICAgICAgICAgICAgICAgICAoImF2YWlsYWJsZSIgJ3BhY2thZ2Utc3Rh dHVzLWF2YWlsYWJsZSkKICAgICAgICAgICAgICAgICAoImF2YWlsLW9ic28iICdwYWNrYWdlLXN0 YXR1cy1hdmFpbC1vYnNvKQogICAgICAgICAgICAgICAgICgibmV3IiAgICAgICAncGFja2FnZS1z dGF0dXMtbmV3KQogICAgICAgICAgICAgICAgICgiaGVsZCIgICAgICAncGFja2FnZS1zdGF0dXMt aGVsZCkKICAgICAgICAgICAgICAgICAoImRpc2FibGVkIiAgJ3BhY2thZ2Utc3RhdHVzLWRpc2Fi bGVkKQogICAgICAgICAgICAgICAgICgiaW5zdGFsbGVkIiAncGFja2FnZS1zdGF0dXMtaW5zdGFs bGVkKQogICAgICAgICAgICAgICAgICgic291cmNlIiAgICAncGFja2FnZS1zdGF0dXMtZnJvbS1z b3VyY2UpCiAgICAgICAgICAgICAgICAgKCJkZXBlbmRlbmN5IiAncGFja2FnZS1zdGF0dXMtZGVw ZW5kZW5jeSkKICAgICAgICAgICAgICAgICAoInVuc2lnbmVkIiAgJ3BhY2thZ2Utc3RhdHVzLXVu c2lnbmVkKQogICAgICAgICAgICAgICAgICgiaW5jb21wYXQiICAncGFja2FnZS1zdGF0dXMtaW5j b21wYXQpCiAgICAgICAgICAgICAgICAgKF8gICAgICAgICAgICAnZm9udC1sb2NrLXdhcm5pbmct ZmFjZSkpKSkgOyBvYnNvbGV0ZS4KICAgIChsaXN0IHBrZwogICAgICAgICAgYFsoLChzeW1ib2wt bmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnKSkKICAgICAgICAgICAgIGZhY2UgcGFja2FnZS1u YW1lCiAgICAgICAgICAgICBmb250LWxvY2stZmFjZSBwYWNrYWdlLW5hbWUKICAgICAgICAgICAg IGZvbGxvdy1saW5rIHQKICAgICAgICAgICAgIHBhY2thZ2UtZGVzYyAscGtnCiAgICAgICAgICAg ICBhY3Rpb24gcGFja2FnZS1tZW51LWRlc2NyaWJlLXBhY2thZ2UpCiAgICAgICAgICAgICwocHJv cGVydGl6ZQogICAgICAgICAgICAgIChpZiAocGFja2FnZS12Yy1wIHBrZykKICAgICAgICAgICAg ICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAgICAgKHJlcXVpcmUgJ3BhY2thZ2UtdmMpCiAg ICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtdmMtY29tbWl0IHBrZykpCiAgICAgICAgICAgICAg ICAocGFja2FnZS12ZXJzaW9uLWpvaW4KICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLXZl cnNpb24gcGtnKSkpCiAgICAgICAgICAgICAgJ2ZvbnQtbG9jay1mYWNlIGZhY2UpCiAgICAgICAg ICAgICwocHJvcGVydGl6ZSBzdGF0dXMgJ2ZvbnQtbG9jay1mYWNlIGZhY2UpCiAgICAgICAgICAg ICwocHJvcGVydGl6ZSAob3IgKHBhY2thZ2UtZGVzYy1hcmNoaXZlIHBrZykgIiIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250LWxvY2stZmFjZSBmYWNlKQogICAgICAg ICAgICAsKHByb3BlcnRpemUgKHBhY2thZ2UtZGVzYy1zdW1tYXJ5IHBrZykKICAgICAgICAgICAg ICAgICAgICAgICAgICdmb250LWxvY2stZmFjZSAncGFja2FnZS1kZXNjcmlwdGlvbildKSkpCgoo ZGVmdmFyIHBhY2thZ2UtbWVudS0tb2xkLWFyY2hpdmUtY29udGVudHMgbmlsCiAgImBwYWNrYWdl LWFyY2hpdmUtY29udGVudHMnIGJlZm9yZSB0aGUgbGF0ZXN0IHJlZnJlc2guIikKCihkZWZ1biBw YWNrYWdlLW1lbnUtLXJlZnJlc2gtY29udGVudHMgKCZvcHRpb25hbCBfYXJnIF9ub2NvbmZpcm0p CiAgIkluIFBhY2thZ2UgTWVudSwgZG93bmxvYWQgdGhlIEVtYWNzIExpc3AgcGFja2FnZSBhcmNo aXZlLgpGZXRjaCB0aGUgY29udGVudHMgb2YgZWFjaCBhcmNoaXZlIHNwZWNpZmllZCBpbgpgcGFj a2FnZS1hcmNoaXZlcycsIGFuZCB0aGVuIHJlZnJlc2ggdGhlIHBhY2thZ2UgbWVudS4KCmBwYWNr YWdlLW1lbnUtbW9kZScgc2V0cyBgcmV2ZXJ0LWJ1ZmZlci1mdW5jdGlvbicgdG8gdGhpcwpmdW5j dGlvbi4gIFRoZSBhcmdzIEFSRyBhbmQgTk9DT05GSVJNLCBwYXNzZWQgZnJvbQpgcmV2ZXJ0LWJ1 ZmZlcicsIGFyZSBpZ25vcmVkLiIKICAocGFja2FnZS0tZW5zdXJlLXBhY2thZ2UtbWVudS1tb2Rl KQogIChzZXRxIHBhY2thZ2UtbWVudS0tb2xkLWFyY2hpdmUtY29udGVudHMgcGFja2FnZS1hcmNo aXZlLWNvbnRlbnRzKQogIChzZXRxIHBhY2thZ2UtbWVudS0tbmV3LXBhY2thZ2UtbGlzdCBuaWwp CiAgKHBhY2thZ2UtcmVmcmVzaC1jb250ZW50cyBwYWNrYWdlLW1lbnUtYXN5bmMpKQooZGVmaW5l LW9ic29sZXRlLWZ1bmN0aW9uLWFsaWFzICdwYWNrYWdlLW1lbnUtcmVmcmVzaCAncmV2ZXJ0LWJ1 ZmZlciAiMjcuMSIpCgooZGVmdW4gcGFja2FnZS1tZW51LWhpZGUtcGFja2FnZSAoKQogICJIaWRl IGluIFBhY2thZ2UgTWVudSBwYWNrYWdlcyB0aGF0IG1hdGNoIGEgcmVnZXhwLgpQcm9tcHQgZm9y IHRoZSByZWdleHAgdG8gbWF0Y2ggYWdhaW5zdCBwYWNrYWdlIG5hbWVzLgpUaGUgZGVmYXVsdCBy ZWdleHAgd2lsbCBoaWRlIG9ubHkgdGhlIHBhY2thZ2Ugd2hvc2UgbmFtZSBpcyBhdCBwb2ludC4K ClRoZSByZWdleHAgaXMgYWRkZWQgdG8gdGhlIGxpc3QgaW4gdGhlIHVzZXIgb3B0aW9uCmBwYWNr YWdlLWhpZGRlbi1yZWdleHBzJyBhbmQgc2F2ZWQgZm9yIGZ1dHVyZSBzZXNzaW9ucy4KClRvIHVu aGlkZSBhIHBhY2thZ2UsIHR5cGUKYFxcW2N1c3RvbWl6ZS12YXJpYWJsZV0gUkVUIHBhY2thZ2Ut aGlkZGVuLXJlZ2V4cHMnLgoKVHlwZSBcXFtwYWNrYWdlLW1lbnUtdG9nZ2xlLWhpZGluZ10gdG8g dG9nZ2xlIHBhY2thZ2UgaGlkaW5nLiIKICAoZGVjbGFyZSAoaW50ZXJhY3RpdmUtb25seSAiY2hh bmdlIGBwYWNrYWdlLWhpZGRlbi1yZWdleHBzJyBpbnN0ZWFkLiIpKQogIChpbnRlcmFjdGl2ZSBu aWwgcGFja2FnZS1tZW51LW1vZGUpCiAgKHBhY2thZ2UtLWVuc3VyZS1wYWNrYWdlLW1lbnUtbW9k ZSkKICAobGV0KiAoKG5hbWUgKHdoZW4gKGRlcml2ZWQtbW9kZS1wICdwYWNrYWdlLW1lbnUtbW9k ZSkKICAgICAgICAgICAgICAgICAoY29uY2F0ICJcXGAiIChyZWdleHAtcXVvdGUgKHN5bWJvbC1u YW1lIChwYWNrYWdlLWRlc2MtbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJ1bGF0ZWQtbGlzdC1nZXQtaWQpKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAiXFwnIikpKQogICAgICAgICAocmUgKHJlYWQtc3RyaW5nICJI aWRlIHBhY2thZ2VzIG1hdGNoaW5nIHJlZ2V4cDogIiBuYW1lKSkpCiAgICA7OyBUZXN0IGlmIGl0 IGlzIHZhbGlkLgogICAgKHN0cmluZy1tYXRjaCByZSAiIikKICAgIChwdXNoIHJlIHBhY2thZ2Ut aGlkZGVuLXJlZ2V4cHMpCiAgICAoY3VzdG9taXplLXNhdmUtdmFyaWFibGUgJ3BhY2thZ2UtaGlk ZGVuLXJlZ2V4cHMgcGFja2FnZS1oaWRkZW4tcmVnZXhwcykKICAgIChwYWNrYWdlLW1lbnUtLXBv c3QtcmVmcmVzaCkKICAgIChsZXQgKChoaWRkZW4KICAgICAgICAgICAoY2wtcmVtb3ZlLWlmLW5v dCAobGFtYmRhIChlKSAoc3RyaW5nLW1hdGNoIHJlIChzeW1ib2wtbmFtZSAoY2FyIGUpKSkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS1hcmNoaXZlLWNvbnRlbnRzKSkpCiAg ICAgIChtZXNzYWdlICJQYWNrYWdlcyB0byBoaWRlOiAlZC4gIFR5cGUgYCVzJyB0byB0b2dnbGUg b3IgYCVzJyB0byBjdXN0b21pemUiCiAgICAgICAgICAgICAgIChsZW5ndGggaGlkZGVuKQogICAg ICAgICAgICAgICAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMgIlxcW3BhY2thZ2UtbWVudS10b2dn bGUtaGlkaW5nXSIpCiAgICAgICAgICAgICAgIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyAiXFxb Y3VzdG9taXplLXZhcmlhYmxlXSBSRVQgcGFja2FnZS1oaWRkZW4tcmVnZXhwcyIpKSkpKQoKCihk ZWZ1biBwYWNrYWdlLW1lbnUtZGVzY3JpYmUtcGFja2FnZSAoJm9wdGlvbmFsIGJ1dHRvbikKICAi RGVzY3JpYmUgdGhlIGN1cnJlbnQgcGFja2FnZS4KSWYgb3B0aW9uYWwgYXJnIEJVVFRPTiBpcyBu b24tbmlsLCBkZXNjcmliZSBpdHMgYXNzb2NpYXRlZCBwYWNrYWdlLiIKICAoaW50ZXJhY3RpdmUg bmlsIHBhY2thZ2UtbWVudS1tb2RlKQogIChsZXQgKChwa2ctZGVzYyAoaWYgYnV0dG9uIChidXR0 b24tZ2V0IGJ1dHRvbiAncGFja2FnZS1kZXNjKQogICAgICAgICAgICAgICAgICAgICh0YWJ1bGF0 ZWQtbGlzdC1nZXQtaWQpKSkpCiAgICAoaWYgcGtnLWRlc2MKICAgICAgICAoZGVzY3JpYmUtcGFj a2FnZSBwa2ctZGVzYykKICAgICAgKHVzZXItZXJyb3IgIk5vIHBhY2thZ2UgaGVyZSIpKSkpCgo7 OyBmaXhtZSBudW1lcmljIGFyZ3VtZW50CihkZWZ1biBwYWNrYWdlLW1lbnUtbWFyay1kZWxldGUg KCZvcHRpb25hbCBfbnVtKQogICJNYXJrIGEgcGFja2FnZSBmb3IgZGVsZXRpb24gYW5kIG1vdmUg dG8gdGhlIG5leHQgbGluZS4iCiAgKGludGVyYWN0aXZlICJwIiBwYWNrYWdlLW1lbnUtbW9kZSkK ICAocGFja2FnZS0tZW5zdXJlLXBhY2thZ2UtbWVudS1tb2RlKQogIChpZiAobWVtYmVyIChwYWNr YWdlLW1lbnUtZ2V0LXN0YXR1cykKICAgICAgICAgICAgICAnKCJpbnN0YWxsZWQiICJzb3VyY2Ui ICJkZXBlbmRlbmN5IiAib2Jzb2xldGUiICJ1bnNpZ25lZCIpKQogICAgICAodGFidWxhdGVkLWxp c3QtcHV0LXRhZyAiRCIgdCkKICAgIChmb3J3YXJkLWxpbmUpKSkKCihkZWZ1biBwYWNrYWdlLW1l bnUtbWFyay1pbnN0YWxsICgmb3B0aW9uYWwgX251bSkKICAiTWFyayBhIHBhY2thZ2UgZm9yIGlu c3RhbGxhdGlvbiBhbmQgbW92ZSB0byB0aGUgbmV4dCBsaW5lLiIKICAoaW50ZXJhY3RpdmUgInAi IHBhY2thZ2UtbWVudS1tb2RlKQogIChwYWNrYWdlLS1lbnN1cmUtcGFja2FnZS1tZW51LW1vZGUp CiAgKGlmIChtZW1iZXIgKHBhY2thZ2UtbWVudS1nZXQtc3RhdHVzKSAnKCJhdmFpbGFibGUiICJh dmFpbC1vYnNvIiAibmV3IiAiZGVwZW5kZW5jeSIpKQogICAgICAodGFidWxhdGVkLWxpc3QtcHV0 LXRhZyAiSSIgdCkKICAgIChmb3J3YXJkLWxpbmUpKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUtbWFy ay11bm1hcmsgKCZvcHRpb25hbCBfbnVtKQogICJDbGVhciBhbnkgbWFya3Mgb24gYSBwYWNrYWdl IGFuZCBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUuIgogIChpbnRlcmFjdGl2ZSAicCIgcGFja2FnZS1t ZW51LW1vZGUpCiAgKHBhY2thZ2UtLWVuc3VyZS1wYWNrYWdlLW1lbnUtbW9kZSkKICAodGFidWxh dGVkLWxpc3QtcHV0LXRhZyAiICIgdCkpCgooZGVmdW4gcGFja2FnZS1tZW51LWJhY2t1cC11bm1h cmsgKCkKICAiQmFjayB1cCBvbmUgbGluZSBhbmQgY2xlYXIgYW55IG1hcmtzIG9uIHRoYXQgcGFj a2FnZS4iCiAgKGludGVyYWN0aXZlIG5pbCBwYWNrYWdlLW1lbnUtbW9kZSkKICAocGFja2FnZS0t ZW5zdXJlLXBhY2thZ2UtbWVudS1tb2RlKQogIChmb3J3YXJkLWxpbmUgLTEpCiAgKHRhYnVsYXRl ZC1saXN0LXB1dC10YWcgIiAiKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUtbWFyay1vYnNvbGV0ZS1m b3ItZGVsZXRpb24gKCkKICAiTWFyayBhbGwgb2Jzb2xldGUgcGFja2FnZXMgZm9yIGRlbGV0aW9u LiIKICAoaW50ZXJhY3RpdmUgbmlsIHBhY2thZ2UtbWVudS1tb2RlKQogIChwYWNrYWdlLS1lbnN1 cmUtcGFja2FnZS1tZW51LW1vZGUpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoZ290by1jaGFyIChw b2ludC1taW4pKQogICAgKHdoaWxlIChub3QgKGVvYnApKQogICAgICAoaWYgKGVxdWFsIChwYWNr YWdlLW1lbnUtZ2V0LXN0YXR1cykgIm9ic29sZXRlIikKICAgICAgICAgICh0YWJ1bGF0ZWQtbGlz dC1wdXQtdGFnICJEIiB0KQogICAgICAgIChmb3J3YXJkLWxpbmUgMSkpKSkpCgooZGVmdmFyIHBh Y2thZ2UtLXF1aWNrLWhlbHAta2V5cwogICcoKCgibWFyayBmb3IgaW5zdGFsbGF0aW9uLCIgLiA5 KQogICAgICgibWFyayBmb3IgZGVsZXRpb24sIiAuIDkpICJ1bm1hcmssIiAoImV4ZWN1dGUgbWFy a2VkIGFjdGlvbnMiIC4gMSkpCiAgICAoIm5leHQsIiAicHJldmlvdXMiKQogICAgKCJIaWRlLXBh Y2thZ2UsIiAiKC10b2dnbGUtaGlkZGVuIikKICAgICgiZy1yZWZyZXNoLWNvbnRlbnRzLCIgIi8t ZmlsdGVyLCIgImhlbHAiKSkpCgooZGVmdW4gcGFja2FnZS0tcHJldHRpZnktcXVpY2staGVscC1r ZXkgKGRlc2MpCiAgIlByZXR0aWZ5IERFU0MgdG8gYmUgZGlzcGxheWVkIGFzIGEgaGVscCBtZW51 LiIKICAoaWYgKGxpc3RwIGRlc2MpCiAgICAgIChpZiAobGlzdHAgKGNkciBkZXNjKSkKICAgICAg ICAgIChtYXBjb25jYXQgIydwYWNrYWdlLS1wcmV0dGlmeS1xdWljay1oZWxwLWtleSBkZXNjICIg ICAiKQogICAgICAgIChsZXQgKChwbGFjZSAoY2RyIGRlc2MpKQogICAgICAgICAgICAgIChvdXQg KGNvcHktc2VxdWVuY2UgKGNhciBkZXNjKSkpKQogICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRp ZXMgcGxhY2UgKDErIHBsYWNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhmYWNl IGhlbHAta2V5LWJpbmRpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQpCiAg ICAgICAgICBvdXQpKQogICAgKHBhY2thZ2UtLXByZXR0aWZ5LXF1aWNrLWhlbHAta2V5IChjb25z IGRlc2MgMCkpKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUtcXVpY2staGVscCAoKQogICJTaG93IHNo b3J0IGtleSBiaW5kaW5nIGhlbHAgZm9yIGBwYWNrYWdlLW1lbnUtbW9kZScuClRoZSBmdWxsIGxp c3Qgb2Yga2V5cyBjYW4gYmUgdmlld2VkIHdpdGggXFxbZGVzY3JpYmUtbW9kZV0uIgogIChpbnRl cmFjdGl2ZSBuaWwgcGFja2FnZS1tZW51LW1vZGUpCiAgKHBhY2thZ2UtLWVuc3VyZS1wYWNrYWdl LW1lbnUtbW9kZSkKICAobWVzc2FnZSAobWFwY29uY2F0ICMncGFja2FnZS0tcHJldHRpZnktcXVp Y2staGVscC1rZXkKICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UtLXF1aWNrLWhlbHAta2V5 cyAiXG4iKSkpCgooZGVmdW4gcGFja2FnZS1tZW51LWdldC1zdGF0dXMgKCkKICAiUmV0dXJuIHN0 YXR1cyB0ZXh0IG9mIHBhY2thZ2UgYXQgcG9pbnQgaW4gUGFja2FnZSBNZW51LiIKICAocGFja2Fn ZS0tZW5zdXJlLXBhY2thZ2UtbWVudS1tb2RlKQogIChsZXQqICgoaWQgKHRhYnVsYXRlZC1saXN0 LWdldC1pZCkpCiAgICAgICAgIChlbnRyeSAoYW5kIGlkIChhc3NvYyBpZCB0YWJ1bGF0ZWQtbGlz dC1lbnRyaWVzKSkpKQogICAgKGlmIGVudHJ5CiAgICAgICAgKGFyZWYgKGNhZHIgZW50cnkpIDIp CiAgICAgICIiKSkpCgooZGVmdW4gcGFja2FnZS1hcmNoaXZlLXByaW9yaXR5IChhcmNoaXZlKQog ICJSZXR1cm4gdGhlIHByaW9yaXR5IG9mIEFSQ0hJVkUuCgpUaGUgYXJjaGl2ZSBwcmlvcml0aWVz IGFyZSBzcGVjaWZpZWQgaW4KYHBhY2thZ2UtYXJjaGl2ZS1wcmlvcml0aWVzJy4gIElmIG5vdCBn aXZlbiB0aGVyZSwgdGhlIHByaW9yaXR5CmRlZmF1bHRzIHRvIDAuIgogIChvciAoY2RyIChhc3Nv YyBhcmNoaXZlIHBhY2thZ2UtYXJjaGl2ZS1wcmlvcml0aWVzKSkKICAgICAgMCkpCgooZGVmdW4g cGFja2FnZS1kZXNjLXByaW9yaXR5LXZlcnNpb24gKHBrZy1kZXNjKQogICJSZXR1cm4gdGhlIHZl cnNpb24gUEtHLURFU0Mgd2l0aCB0aGUgYXJjaGl2ZSBwcmlvcml0eSBwcmVwZW5kZWQuCgpUaGlz IGFsbG93cyBmb3IgZWFzeSBjb21wYXJpc29uIG9mIHBhY2thZ2UgdmVyc2lvbnMgZnJvbQpkaWZm ZXJlbnQgYXJjaGl2ZXMgaWYgYXJjaGl2ZSBwcmlvcml0aWVzIGFyZSBtZWFudCB0byBiZSB0YWtl biBpbgpjb25zaWRlcmF0aW9uLiIKICAoY29ucyAocGFja2FnZS1kZXNjLXByaW9yaXR5IHBrZy1k ZXNjKQogICAgICAgIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBwa2ctZGVzYykpKQoKKGRlZnVuIHBh Y2thZ2UtbWVudS0tZmluZC11cGdyYWRlcyAoKQogICJJbiBQYWNrYWdlIE1lbnUsIHJldHVybiBh biBhbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNhbiBiZSB1cGdyYWRlZC4KVGhlIGFsaXN0IGhhcyB0 aGUgc2FtZSBmb3JtIGFzIGBwYWNrYWdlLWFsaXN0JywgbmFtZWx5IGEgbGlzdApvZiAoUEtHIC4g REVTQ1MpLCBidXQgd2hlcmUgREVTQ1MgaXMgdGhlIGBwYWNrYWdlLWRlc2MnIG9iamVjdApjb3Jy ZXNwb25kaW5nIHRvIHRoZSBuZXdlciB2ZXJzaW9uLiIKICAobGV0IChpbnN0YWxsZWQgYXZhaWxh YmxlIHVwZ3JhZGVzKQogICAgOzsgQnVpbGQgbGlzdCBvZiBpbnN0YWxsZWQvYXZhaWxhYmxlIHBh Y2thZ2VzIGluIHRoaXMgYnVmZmVyLgogICAgKGRvbGlzdCAoZW50cnkgdGFidWxhdGVkLWxpc3Qt ZW50cmllcykKICAgICAgOzsgRU5UUlkgaXMgKFBLRy1ERVNDIFtOQU1FIFZFUlNJT04gU1RBVFVT IERPQ10pCiAgICAgIChsZXQgKChwa2ctZGVzYyAoY2FyIGVudHJ5KSkKICAgICAgICAgICAgKHN0 YXR1cyAoYXJlZiAoY2FkciBlbnRyeSkgMikpKQogICAgICAgIChjb25kICgobWVtYmVyIHN0YXR1 cyAnKCJpbnN0YWxsZWQiICJkZXBlbmRlbmN5IiAidW5zaWduZWQiICJleHRlcm5hbCIpKQogICAg ICAgICAgICAgICAocHVzaCBwa2ctZGVzYyBpbnN0YWxsZWQpKQogICAgICAgICAgICAgICgobWVt YmVyIHN0YXR1cyAnKCJhdmFpbGFibGUiICJuZXciKSkKICAgICAgICAgICAgICAgKHNldHEgYXZh aWxhYmxlIChwYWNrYWdlLS1hcHBlbmQtdG8tYWxpc3QgcGtnLWRlc2MgYXZhaWxhYmxlKSkpKSkp CiAgICA7OyBMb29wIHRocm91Z2ggbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMsIGZpbmRpbmcg dXBncmFkZXMuCiAgICAoZG9saXN0IChwa2ctZGVzYyBpbnN0YWxsZWQpCiAgICAgIChsZXQqICgo bmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKQogICAgICAgICAgICAgKGF2YWlsLXBr ZyAoY2FkciAoYXNzcSBuYW1lIGF2YWlsYWJsZSkpKSkKICAgICAgICAoYW5kIGF2YWlsLXBrZwog ICAgICAgICAgICAgKHZlcnNpb24tbGlzdC08IChwYWNrYWdlLWRlc2MtcHJpb3JpdHktdmVyc2lv biBwa2ctZGVzYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLXBy aW9yaXR5LXZlcnNpb24gYXZhaWwtcGtnKSkKICAgICAgICAgICAgIChwdXNoIChjb25zIG5hbWUg YXZhaWwtcGtnKSB1cGdyYWRlcykpKSkKICAgIHVwZ3JhZGVzKSkKCihkZWZ2YXIgcGFja2FnZS1t ZW51LS1tYXJrLXVwZ3JhZGVzLXBlbmRpbmcgbmlsCiAgIldoZXRoZXIgbWFyay11cGdyYWRlcyBp cyB3YWl0aW5nIGZvciBhIHJlZnJlc2ggdG8gZmluaXNoLiIpCgooZGVmdW4gcGFja2FnZS1tZW51 LS1tYXJrLXVwZ3JhZGVzLTEgKCkKICAiTWFyayBhbGwgdXBncmFkYWJsZSBwYWNrYWdlcyBpbiB0 aGUgUGFja2FnZSBNZW51LgpJbXBsZW1lbnRhdGlvbiBvZiBgcGFja2FnZS1tZW51LW1hcmstdXBn cmFkZXMnLiIKICAoc2V0cSBwYWNrYWdlLW1lbnUtLW1hcmstdXBncmFkZXMtcGVuZGluZyBuaWwp CiAgKGxldCAoKHVwZ3JhZGVzIChwYWNrYWdlLW1lbnUtLWZpbmQtdXBncmFkZXMpKSkKICAgIChp ZiAobnVsbCB1cGdyYWRlcykKICAgICAgICAobWVzc2FnZSAiTm8gcGFja2FnZXMgdG8gdXBncmFk ZSIpCiAgICAgICh3aWRlbikKICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkKICAgICAgICAod2hpbGUgKG5vdCAoZW9icCkpCiAgICAgICAgICAobGV0 KiAoKHBrZy1kZXNjICh0YWJ1bGF0ZWQtbGlzdC1nZXQtaWQpKQogICAgICAgICAgICAgICAgICh1 cGdyYWRlIChjZHIgKGFzc3EgKHBhY2thZ2UtZGVzYy1uYW1lIHBrZy1kZXNjKSB1cGdyYWRlcykp KSkKICAgICAgICAgICAgKGNvbmQgKChudWxsIHVwZ3JhZGUpCiAgICAgICAgICAgICAgICAgICAo Zm9yd2FyZC1saW5lIDEpKQogICAgICAgICAgICAgICAgICAoKGVxdWFsIHBrZy1kZXNjIHVwZ3Jh ZGUpCiAgICAgICAgICAgICAgICAgICAocGFja2FnZS1tZW51LW1hcmstaW5zdGFsbCkpCiAgICAg ICAgICAgICAgICAgICh0CiAgICAgICAgICAgICAgICAgICAocGFja2FnZS1tZW51LW1hcmstZGVs ZXRlKSkpKSkpCiAgICAgIChtZXNzYWdlICJQYWNrYWdlcyBtYXJrZWQgZm9yIHVwZ3JhZGluZzog JWQiCiAgICAgICAgICAgICAgIChsZW5ndGggdXBncmFkZXMpKSkpKQoKCihkZWZ1biBwYWNrYWdl LW1lbnUtbWFyay11cGdyYWRlcyAoKQogICJNYXJrIGFsbCB1cGdyYWRhYmxlIHBhY2thZ2VzIGlu IHRoZSBQYWNrYWdlIE1lbnUuCkZvciBlYWNoIGluc3RhbGxlZCBwYWNrYWdlIHdpdGggYSBuZXdl ciB2ZXJzaW9uIGF2YWlsYWJsZSwgcGxhY2UKYW4gKEkpbnN0YWxsIGZsYWcgb24gdGhlIGF2YWls YWJsZSB2ZXJzaW9uIGFuZCBhIChEKWVsZXRlIGZsYWcgb24KdGhlIGluc3RhbGxlZCB2ZXJzaW9u LiAgQSBzdWJzZXF1ZW50IFxcW3BhY2thZ2UtbWVudS1leGVjdXRlXQpjYWxsIHdpbGwgdXBncmFk ZSB0aGUgcGFja2FnZS4KCklmIHRoZXJlJ3MgYW4gYXN5bmMgcmVmcmVzaCBvcGVyYXRpb24gaW4g cHJvZ3Jlc3MsIHRoZSBmbGFncyB3aWxsCmJlIHBsYWNlZCBhcyBwYXJ0IG9mIGBwYWNrYWdlLW1l bnUtLXBvc3QtcmVmcmVzaCcgaW5zdGVhZCBvZgppbW1lZGlhdGVseS4iCiAgKGludGVyYWN0aXZl IG5pbCBwYWNrYWdlLW1lbnUtbW9kZSkKICAocGFja2FnZS0tZW5zdXJlLXBhY2thZ2UtbWVudS1t b2RlKQogIChpZiAobm90IHBhY2thZ2UtLWRvd25sb2Fkcy1pbi1wcm9ncmVzcykKICAgICAgKHBh Y2thZ2UtbWVudS0tbWFyay11cGdyYWRlcy0xKQogICAgKHNldHEgcGFja2FnZS1tZW51LS1tYXJr LXVwZ3JhZGVzLXBlbmRpbmcgdCkKICAgIChtZXNzYWdlICJXYWl0aW5nIGZvciByZWZyZXNoIHRv IGZpbmlzaC4uLiIpKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUtLWxpc3QtdG8tcHJvbXB0IChwYWNr YWdlcyAmb3B0aW9uYWwgaW5jbHVkZS1kZXBlbmRlbmNpZXMpCiAgIlJldHVybiBhIHN0cmluZyBs aXN0aW5nIFBBQ0tBR0VTIHRoYXQncyB1c2FibGUgaW4gYSBwcm9tcHQuClBBQ0tBR0VTIGlzIGEg bGlzdCBvZiBgcGFja2FnZS1kZXNjJyBvYmplY3RzLgpGb3JtYXRzIHRoZSByZXR1cm5lZCBzdHJp bmcgdG8gYmUgdXNhYmxlIGluIGEgbWluaWJ1ZmZlcgpwcm9tcHQgKHNlZSBgcGFja2FnZS1tZW51 LS1wcm9tcHQtdHJhbnNhY3Rpb24tcCcpLgoKSWYgSU5DTFVERS1ERVBFTkRFTkNJRVMsIGFsc28g aW5jbHVkZSB0aGUgbnVtYmVyIG9mIHVuaW5zdGFsbGVkCmRlcGVuZGVuY2llcy4iCiAgOzsgVGhl IGNhc2Ugd2hlcmUgYHBhY2thZ2UnIGlzIGVtcHR5IGlzIGhhbmRsZWQgaW4KICA7OyBgcGFja2Fn ZS1tZW51LS1wcm9tcHQtdHJhbnNhY3Rpb24tcCcgYmVsb3cuCiAgKGZvcm1hdCAiJWQgKCVzKSVz IgogICAgICAgICAgKGxlbmd0aCBwYWNrYWdlcykKICAgICAgICAgIChtYXBjb25jYXQgIydwYWNr YWdlLWRlc2MtZnVsbC1uYW1lIHBhY2thZ2VzICIgIikKICAgICAgICAgIChsZXQgKChkZXBzCiAg ICAgICAgICAgICAgICAgKHNlcS1yZW1vdmUKICAgICAgICAgICAgICAgICAgIydwYWNrYWdlLWlu c3RhbGxlZC1wCiAgICAgICAgICAgICAgICAgIChkZWxldGUtZHVwcwogICAgICAgICAgICAgICAg ICAgKGFwcGx5CiAgICAgICAgICAgICAgICAgICAgIyduY29uYwogICAgICAgICAgICAgICAgICAg IChtYXBjYXIgKGxhbWJkYSAocGFja2FnZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHBhY2thZ2UtLWRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBh Y2thZ2UtZGVzYy1uYW1lIHBhY2thZ2UpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh Y2thZ2VzKSkpKSkpCiAgICAgICAgICAgIChpZiAoYW5kIGluY2x1ZGUtZGVwZW5kZW5jaWVzIGRl cHMpCiAgICAgICAgICAgICAgICAoaWYgKGxlbmd0aD0gZGVwcyAxKQogICAgICAgICAgICAgICAg ICAgIChmb3JtYXQgIiBwbHVzIDEgZGVwZW5kZW5jeSIpCiAgICAgICAgICAgICAgICAgIChmb3Jt YXQgIiBwbHVzICVkIGRlcGVuZGVuY2llcyIgKGxlbmd0aCBkZXBzKSkpCiAgICAgICAgICAgICAg IiIpKSkpCgooZGVmdW4gcGFja2FnZS1tZW51LS1wcm9tcHQtdHJhbnNhY3Rpb24tcCAoZGVsZXRl IGluc3RhbGwgdXBncmFkZSkKICAiUHJvbXB0IHRoZSB1c2VyIGFib3V0IERFTEVURSwgSU5TVEFM TCwgYW5kIFVQR1JBREUuCkRFTEVURSwgSU5TVEFMTCwgYW5kIFVQR1JBREUgYXJlIGxpc3RzIG9m IGBwYWNrYWdlLWRlc2MnIG9iamVjdHMuCkVpdGhlciBtYXkgYmUgbmlsLCBidXQgbm90IGFsbC4i CiAgKHktb3Itbi1wCiAgIChjb25jYXQKICAgICh3aGVuIGRlbGV0ZQogICAgICAoZm9ybWF0ICJQ YWNrYWdlcyB0byBkZWxldGU6ICVzLiAgIgogICAgICAgICAgICAgIChwYWNrYWdlLW1lbnUtLWxp c3QtdG8tcHJvbXB0IGRlbGV0ZSkpKQogICAgKHdoZW4gaW5zdGFsbAogICAgICAoZm9ybWF0ICJQ YWNrYWdlcyB0byBpbnN0YWxsOiAlcy4gICIKICAgICAgICAgICAgICAocGFja2FnZS1tZW51LS1s aXN0LXRvLXByb21wdCBpbnN0YWxsIHQpKSkKICAgICh3aGVuIHVwZ3JhZGUKICAgICAgKGZvcm1h dCAiUGFja2FnZXMgdG8gdXBncmFkZTogJXMuICAiCiAgICAgICAgICAgICAgKHBhY2thZ2UtbWVu dS0tbGlzdC10by1wcm9tcHQgdXBncmFkZSkpKQogICAgIlByb2NlZWQ/ICIpKSkKCgooZGVmdW4g cGFja2FnZS1tZW51LS1wYXJ0aXRpb24tdHJhbnNhY3Rpb24gKGluc3RhbGwgZGVsZXRlKQogICJS ZXR1cm4gYW4gYWxpc3QgZGVzY3JpYmluZyBhbiBJTlNUQUxMIERFTEVURSB0cmFuc2FjdGlvbi4K QWxpc3QgY29udGFpbnMgdGhyZWUgZW50cmllcywgdXBncmFkZSwgZGVsZXRlLCBhbmQgaW5zdGFs bCwgZWFjaAp3aXRoIGEgbGlzdCBvZiBwYWNrYWdlIG5hbWVzLgoKVGhlIHVwZ3JhZGUgZW50cnkg Y29udGFpbnMgYW55IGBwYWNrYWdlLWRlc2MnIG9iamVjdHMgaW4gSU5TVEFMTAp3aG9zZSBuYW1l IGNvaW5jaWRlcyB3aXRoIGFuIG9iamVjdCBpbiBERUxFVEUuICBUaGUgZGVsZXRlIGFuZAp0aGUg aW5zdGFsbCBlbnRyaWVzIGFyZSB0aGUgc2FtZSBhcyBERUxFVEUgYW5kIElOU1RBTEwgd2l0aCBz dWNoCm9iamVjdHMgcmVtb3ZlZC4iCiAgKGxldCogKCh1cGcgKGNsLWludGVyc2VjdGlvbiBpbnN0 YWxsIGRlbGV0ZSA6a2V5ICMncGFja2FnZS1kZXNjLW5hbWUpKQogICAgICAgICAoaW5zIChjbC1z ZXQtZGlmZmVyZW5jZSBpbnN0YWxsIHVwZyA6a2V5ICMncGFja2FnZS1kZXNjLW5hbWUpKQogICAg ICAgICAoZGVsIChjbC1zZXQtZGlmZmVyZW5jZSBkZWxldGUgdXBnIDprZXkgIydwYWNrYWdlLWRl c2MtbmFtZSkpKQogICAgYCgoZGVsZXRlIC4gLGRlbCkgKGluc3RhbGwgLiAsaW5zKSAodXBncmFk ZSAuICx1cGcpKSkpCgooZGVmdW4gcGFja2FnZS1tZW51LS1wZXJmb3JtLXRyYW5zYWN0aW9uIChp bnN0YWxsLWxpc3QgZGVsZXRlLWxpc3QpCiAgIkluc3RhbGwgcGFja2FnZXMgaW4gSU5TVEFMTC1M SVNUIGFuZCBkZWxldGUgREVMRVRFLUxJU1QuClJldHVybiBuaWwgaWYgdGhlcmUgd2VyZSBubyBl cnJvcnM7IG5vbi1uaWwgb3RoZXJ3aXNlLiIKICAobGV0ICgoZXJyb3JzIG5pbCkpCiAgICAoaWYg aW5zdGFsbC1saXN0CiAgICAgICAgKGxldCAoKHN0YXR1cy1mb3JtYXQgKGZvcm1hdCAiOkluc3Rh bGxpbmcgJSVkLyVkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbmd0 aCBpbnN0YWxsLWxpc3QpKSkKICAgICAgICAgICAgICAoaSAwKQogICAgICAgICAgICAgIChwYWNr YWdlLW1lbnUtLXRyYW5zYWN0aW9uLXN0YXR1cykpCiAgICAgICAgICAoZG9saXN0IChwa2cgaW5z dGFsbC1saXN0KQogICAgICAgICAgICAoc2V0cSBwYWNrYWdlLW1lbnUtLXRyYW5zYWN0aW9uLXN0 YXR1cwogICAgICAgICAgICAgICAgICAoZm9ybWF0IHN0YXR1cy1mb3JtYXQgKGNsLWluY2YgaSkp KQogICAgICAgICAgICAoZm9yY2UtbW9kZS1saW5lLXVwZGF0ZSkKICAgICAgICAgICAgKHJlZGlz cGxheSAnZm9yY2UpCiAgICAgICAgICAgIDs7IERvbid0IG1hcmsgYXMgc2VsZWN0ZWQsIGBwYWNr YWdlLW1lbnUtZXhlY3V0ZScgYWxyZWFkeQogICAgICAgICAgICA7OyBkb2VzIHRoYXQuCiAgICAg ICAgICAgIChwYWNrYWdlLWluc3RhbGwgcGtnICdkb250LXNlbGVjdCkpKSkKICAgIChsZXQgKChw YWNrYWdlLW1lbnUtLXRyYW5zYWN0aW9uLXN0YXR1cyAiOkRlbGV0aW5nIikpCiAgICAgIChmb3Jj ZS1tb2RlLWxpbmUtdXBkYXRlKQogICAgICAocmVkaXNwbGF5ICdmb3JjZSkKICAgICAgKGRvbGlz dCAoZWx0IChwYWNrYWdlLS1zb3J0LWJ5LWRlcGVuZGVuY2UgZGVsZXRlLWxpc3QpKQogICAgICAg IChjb25kaXRpb24tY2FzZS11bmxlc3MtZGVidWcgZXJyCiAgICAgICAgICAgIChsZXQgKChpbmhp Yml0LW1lc3NhZ2UgKG9yIGluaGliaXQtbWVzc2FnZSBwYWNrYWdlLW1lbnUtYXN5bmMpKSkKICAg ICAgICAgICAgICAocGFja2FnZS1kZWxldGUgZWx0IG5pbCAnbm9zYXZlKSkKICAgICAgICAgIChl cnJvcgogICAgICAgICAgIChwdXNoIChwYWNrYWdlLWRlc2MtZnVsbC1uYW1lIGVsdCkgZXJyb3Jz KQogICAgICAgICAgIChtZXNzYWdlICJFcnJvciB0cnlpbmcgdG8gZGVsZXRlIGAlcyc6ICVTIgog ICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlc2MtZnVsbC1uYW1lIGVsdCkgZXJyKSkpKSkK ICAgIGVycm9ycykpCgooZGVmdW4gcGFja2FnZS0tdXBkYXRlLXNlbGVjdGVkLXBhY2thZ2VzIChh ZGQgcmVtb3ZlKQogICJVcGRhdGUgdGhlIGBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzJyBsaXN0 IGFjY29yZGluZyB0byBBREQgYW5kIFJFTU9WRS4KQUREIGFuZCBSRU1PVkUgbXVzdCBiZSBkaXNq b2ludCBsaXN0cyBvZiBwYWNrYWdlIG5hbWVzIChvcgpgcGFja2FnZS1kZXNjJyBvYmplY3RzKSB0 byBiZSBhZGRlZCBhbmQgcmVtb3ZlZCB0byB0aGUgc2VsZWN0ZWQKcGFja2FnZXMgbGlzdCwgcmVz cGVjdGl2ZWx5LiIKICAoZG9saXN0IChwIGFkZCkKICAgIChjbC1wdXNobmV3IChpZiAocGFja2Fn ZS1kZXNjLXAgcCkgKHBhY2thZ2UtZGVzYy1uYW1lIHApIHApCiAgICAgICAgICAgICAgICBwYWNr YWdlLXNlbGVjdGVkLXBhY2thZ2VzKSkKICAoZG9saXN0IChwIHJlbW92ZSkKICAgIChzZXRxIHBh Y2thZ2Utc2VsZWN0ZWQtcGFja2FnZXMKICAgICAgICAgIChyZW1vdmUgKGlmIChwYWNrYWdlLWRl c2MtcCBwKSAocGFja2FnZS1kZXNjLW5hbWUgcCkgcCkKICAgICAgICAgICAgICAgICAgcGFja2Fn ZS1zZWxlY3RlZC1wYWNrYWdlcykpKQogICh3aGVuIChvciBhZGQgcmVtb3ZlKQogICAgKHBhY2th Z2UtLXNhdmUtc2VsZWN0ZWQtcGFja2FnZXMgcGFja2FnZS1zZWxlY3RlZC1wYWNrYWdlcykpKQoK KGRlZnVuIHBhY2thZ2UtbWVudS1leGVjdXRlICgmb3B0aW9uYWwgbm9xdWVyeSkKICAiUGVyZm9y bSBtYXJrZWQgUGFja2FnZSBNZW51IGFjdGlvbnMuClBhY2thZ2VzIG1hcmtlZCBmb3IgaW5zdGFs bGF0aW9uIGFyZSBkb3dubG9hZGVkIGFuZCBpbnN0YWxsZWQsCnBhY2thZ2VzIG1hcmtlZCBmb3Ig ZGVsZXRpb24gYXJlIHJlbW92ZWQsIGFuZCBwYWNrYWdlcyBtYXJrZWQgZm9yCnVwZ3JhZGluZyBh cmUgZG93bmxvYWRlZCBhbmQgdXBncmFkZWQuCgpJZiBubyBwYWNrYWdlcyBhcmUgbWFya2VkLCB0 aGUgYWN0aW9uIHRha2VuIGRlcGVuZHMgb24gdGhlIHN0YXRlCm9mIHRoZSBwYWNrYWdlIHVuZGVy IHBvaW50LiAgSWYgaXQncyBub3QgYWxyZWFkeSBpbnN0YWxsZWQsIHRoaXMKY29tbWFuZCB3aWxs IGluc3RhbGwgdGhlIHBhY2thZ2UsIGFuZCBpZiBpdCdzIGluc3RhbGxlZCwgaXQgd2lsbApkZWxl dGUgdGhlIHBhY2thZ2UuCgpPcHRpb25hbCBhcmd1bWVudCBOT1FVRVJZIG5vbi1uaWwgbWVhbnMg ZG8gbm90IGFzayB0aGUgdXNlciB0byBjb25maXJtLiIKICAoaW50ZXJhY3RpdmUgbmlsIHBhY2th Z2UtbWVudS1tb2RlKQogIChwYWNrYWdlLS1lbnN1cmUtcGFja2FnZS1tZW51LW1vZGUpCiAgKGxl dCAoaW5zdGFsbC1saXN0IGRlbGV0ZS1saXN0IGNtZCBwa2ctZGVzYykKICAgIChzYXZlLWV4Y3Vy c2lvbgogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAod2hpbGUgKG5vdCAoZW9i cCkpCiAgICAgICAgKHNldHEgY21kIChjaGFyLWFmdGVyKSkKICAgICAgICAodW5sZXNzIChlcSBj bWQgP1xzKQogICAgICAgICAgOzsgVGhpcyBpcyB0aGUga2V5IFBLRy1ERVNDLgogICAgICAgICAg KHNldHEgcGtnLWRlc2MgKHRhYnVsYXRlZC1saXN0LWdldC1pZCkpCiAgICAgICAgICAoY29uZCAo KGVxIGNtZCA/RCkKICAgICAgICAgICAgICAgICAocHVzaCBwa2ctZGVzYyBkZWxldGUtbGlzdCkp CiAgICAgICAgICAgICAgICAoKGVxIGNtZCA/SSkKICAgICAgICAgICAgICAgICAocHVzaCBwa2ct ZGVzYyBpbnN0YWxsLWxpc3QpKSkpCiAgICAgICAgKGZvcndhcmQtbGluZSkpKQogICAgOzsgTm90 aGluZyBtYXJrZWQuCiAgICAodW5sZXNzIChvciBkZWxldGUtbGlzdCBpbnN0YWxsLWxpc3QpCiAg ICAgIDs7IE5vdCBvbiBhIHBhY2thZ2UgbGluZS4KICAgICAgKHVubGVzcyAodGFidWxhdGVkLWxp c3QtZ2V0LWlkKQogICAgICAgICh1c2VyLWVycm9yICJObyBvcGVyYXRpb25zIHNwZWNpZmllZCIp KQogICAgICAobGV0KiAoKGlkICh0YWJ1bGF0ZWQtbGlzdC1nZXQtaWQpKQogICAgICAgICAgICAg KHN0YXR1cyAocGFja2FnZS1tZW51LWdldC1zdGF0dXMpKSkKICAgICAgICAoY29uZAogICAgICAg ICAoKG1lbWJlciBzdGF0dXMgJygiaW5zdGFsbGVkIikpCiAgICAgICAgICAocHVzaCBpZCBkZWxl dGUtbGlzdCkpCiAgICAgICAgICgobWVtYmVyIHN0YXR1cyAnKCJhdmFpbGFibGUiICJhdmFpbC1v YnNvIiAibmV3IiAiZGVwZW5kZW5jeSIpKQogICAgICAgICAgKHB1c2ggaWQgaW5zdGFsbC1saXN0 KSkKICAgICAgICAgKHQgKHVzZXItZXJyb3IgIk5vIGRlZmF1bHQgYWN0aW9uIGF2YWlsYWJsZSBm b3Igc3RhdHVzOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKSkpKSkKICAgIChs ZXQtYWxpc3QgKHBhY2thZ2UtbWVudS0tcGFydGl0aW9uLXRyYW5zYWN0aW9uIGluc3RhbGwtbGlz dCBkZWxldGUtbGlzdCkKICAgICAgKHdoZW4gKG9yIG5vcXVlcnkKICAgICAgICAgICAgICAgIChw YWNrYWdlLW1lbnUtLXByb21wdC10cmFuc2FjdGlvbi1wIC5kZWxldGUgLmluc3RhbGwgLnVwZ3Jh ZGUpKQogICAgICAgIChsZXQgKChtZXNzYWdlLXRlbXBsYXRlCiAgICAgICAgICAgICAgIChjb25j YXQgIlsgIgogICAgICAgICAgICAgICAgICAgICAgICh3aGVuIC5kZWxldGUKICAgICAgICAgICAg ICAgICAgICAgICAgIChmb3JtYXQgIkRlbGV0ZSAlZCAiIChsZW5ndGggLmRlbGV0ZSkpKQogICAg ICAgICAgICAgICAgICAgICAgICh3aGVuIC5pbnN0YWxsCiAgICAgICAgICAgICAgICAgICAgICAg ICAoZm9ybWF0ICJJbnN0YWxsICVkICIgKGxlbmd0aCAuaW5zdGFsbCkpKQogICAgICAgICAgICAg ICAgICAgICAgICh3aGVuIC51cGdyYWRlCiAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0 ICJVcGdyYWRlICVkICIgKGxlbmd0aCAudXBncmFkZSkpKQogICAgICAgICAgICAgICAgICAgICAg ICJdIikpKQogICAgICAgICAgKG1lc3NhZ2UgIk9wZXJhdGlvbiAlcyBzdGFydGVkIiBtZXNzYWdl LXRlbXBsYXRlKQogICAgICAgICAgOzsgUGFja2FnZXMgYmVpbmcgdXBncmFkZWQgYXJlIG5vdCBt YXJrZWQgYXMgc2VsZWN0ZWQuCiAgICAgICAgICAocGFja2FnZS0tdXBkYXRlLXNlbGVjdGVkLXBh Y2thZ2VzIC5pbnN0YWxsIC5kZWxldGUpCiAgICAgICAgICAodW5sZXNzIChwYWNrYWdlLW1lbnUt LXBlcmZvcm0tdHJhbnNhY3Rpb24gaW5zdGFsbC1saXN0IGRlbGV0ZS1saXN0KQogICAgICAgICAg ICA7OyBJZiB0aGVyZSB3ZXJlbid0IGVycm9ycywgb3V0cHV0IGRhdGEuCiAgICAgICAgICAgIChp Zi1sZXQqICgocmVtb3ZhYmxlIChwYWNrYWdlLS1yZW1vdmFibGUtcGFja2FnZXMpKSkKICAgICAg ICAgICAgICAgIChtZXNzYWdlICJPcGVyYXRpb24gZmluaXNoZWQuICBQYWNrYWdlcyB0aGF0IGFy ZSBubyBsb25nZXIgbmVlZGVkOiAlZC4gIFR5cGUgYCVzJyB0byByZW1vdmUgdGhlbSIKICAgICAg ICAgICAgICAgICAgICAgICAgIChsZW5ndGggcmVtb3ZhYmxlKQogICAgICAgICAgICAgICAgICAg ICAgICAgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzICJcXFtwYWNrYWdlLWF1dG9yZW1vdmVdIikp CiAgICAgICAgICAgICAgKG1lc3NhZ2UgIk9wZXJhdGlvbiAlcyBmaW5pc2hlZCIgbWVzc2FnZS10 ZW1wbGF0ZSkpKSkpKSkpCgooZGVmdW4gcGFja2FnZS1tZW51LS12ZXJzaW9uLXByZWRpY2F0ZSAo QSBCKQogICJQcmVkaWNhdGUgdG8gc29ydCBcIipQYWNrYWdlcypcIiBidWZmZXIgYnkgdGhlIHZl cnNpb24gY29sdW1uLgpUaGlzIGlzIHVzZWQgZm9yIGB0YWJ1bGF0ZWQtbGlzdC1mb3JtYXQnIGlu IGBwYWNrYWdlLW1lbnUtbW9kZScuIgogIChsZXQgKCh2QSAob3IgKHZlcnNpb24tdG8tbGlzdCAo YXJlZiAoY2FkciBBKSAxKSkgJygwKSkpCiAgICAgICAgKHZCIChvciAodmVyc2lvbi10by1saXN0 IChhcmVmIChjYWRyIEIpIDEpKSAnKDApKSkpCiAgICAoaWYgKHZlcnNpb24tbGlzdC09IHZBIHZC KQogICAgICAgIChwYWNrYWdlLW1lbnUtLW5hbWUtcHJlZGljYXRlIEEgQikKICAgICAgKHZlcnNp b24tbGlzdC08IHZBIHZCKSkpKQoKKGRlZnVuIHBhY2thZ2UtbWVudS0tc3RhdHVzLXByZWRpY2F0 ZSAoQSBCKQogICJQcmVkaWNhdGUgdG8gc29ydCBcIipQYWNrYWdlcypcIiBidWZmZXIgYnkgdGhl IHN0YXR1cyBjb2x1bW4uClRoaXMgaXMgdXNlZCBmb3IgYHRhYnVsYXRlZC1saXN0LWZvcm1hdCcg aW4gYHBhY2thZ2UtbWVudS1tb2RlJy4iCiAgKGxldCAoKHNBIChhcmVmIChjYWRyIEEpIDIpKQog ICAgICAgIChzQiAoYXJlZiAoY2FkciBCKSAyKSkpCiAgICAoY29uZCAoKHN0cmluZz0gc0Egc0Ip CiAgICAgICAgICAgKHBhY2thZ2UtbWVudS0tbmFtZS1wcmVkaWNhdGUgQSBCKSkKICAgICAgICAg ICgoc3RyaW5nPSBzQSAibmV3IikgdCkKICAgICAgICAgICgoc3RyaW5nPSBzQiAibmV3Iikgbmls KQogICAgICAgICAgKChzdHJpbmctcHJlZml4LXAgImF2YWlsIiBzQSkKICAgICAgICAgICAoaWYg KHN0cmluZy1wcmVmaXgtcCAiYXZhaWwiIHNCKQogICAgICAgICAgICAgICAocGFja2FnZS1tZW51 LS1uYW1lLXByZWRpY2F0ZSBBIEIpCiAgICAgICAgICAgICB0KSkKICAgICAgICAgICgoc3RyaW5n LXByZWZpeC1wICJhdmFpbCIgc0IpIG5pbCkKICAgICAgICAgICgoc3RyaW5nPSBzQSAiaW5zdGFs bGVkIikgdCkKICAgICAgICAgICgoc3RyaW5nPSBzQiAiaW5zdGFsbGVkIikgbmlsKQogICAgICAg ICAgKChzdHJpbmc9IHNBICJkZXBlbmRlbmN5IikgdCkKICAgICAgICAgICgoc3RyaW5nPSBzQiAi ZGVwZW5kZW5jeSIpIG5pbCkKICAgICAgICAgICgoc3RyaW5nPSBzQSAic291cmNlIikgdCkKICAg ICAgICAgICgoc3RyaW5nPSBzQiAic291cmNlIikgbmlsKQogICAgICAgICAgKChzdHJpbmc9IHNB ICJ1bnNpZ25lZCIpIHQpCiAgICAgICAgICAoKHN0cmluZz0gc0IgInVuc2lnbmVkIikgbmlsKQog ICAgICAgICAgKChzdHJpbmc9IHNBICJoZWxkIikgdCkKICAgICAgICAgICgoc3RyaW5nPSBzQiAi aGVsZCIpIG5pbCkKICAgICAgICAgICgoc3RyaW5nPSBzQSAiZXh0ZXJuYWwiKSB0KQogICAgICAg ICAgKChzdHJpbmc9IHNCICJleHRlcm5hbCIpIG5pbCkKICAgICAgICAgICgoc3RyaW5nPSBzQSAi YnVpbHQtaW4iKSB0KQogICAgICAgICAgKChzdHJpbmc9IHNCICJidWlsdC1pbiIpIG5pbCkKICAg ICAgICAgICgoc3RyaW5nPSBzQSAib2Jzb2xldGUiKSB0KQogICAgICAgICAgKChzdHJpbmc9IHNC ICJvYnNvbGV0ZSIpIG5pbCkKICAgICAgICAgICgoc3RyaW5nPSBzQSAiaW5jb21wYXQiKSB0KQog ICAgICAgICAgKChzdHJpbmc9IHNCICJpbmNvbXBhdCIpIG5pbCkKICAgICAgICAgICh0IChzdHJp bmc8IHNBIHNCKSkpKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUtLWRlc2NyaXB0aW9uLXByZWRpY2F0 ZSAoQSBCKQogICJQcmVkaWNhdGUgdG8gc29ydCBcIipQYWNrYWdlcypcIiBidWZmZXIgYnkgdGhl IGRlc2NyaXB0aW9uIGNvbHVtbi4KVGhpcyBpcyB1c2VkIGZvciBgdGFidWxhdGVkLWxpc3QtZm9y bWF0JyBpbiBgcGFja2FnZS1tZW51LW1vZGUnLiIKICAobGV0ICgoZEEgKGFyZWYgKGNhZHIgQSkg KGlmIChjZHIgcGFja2FnZS1hcmNoaXZlcykgNCAzKSkpCiAgICAgICAgKGRCIChhcmVmIChjYWRy IEIpIChpZiAoY2RyIHBhY2thZ2UtYXJjaGl2ZXMpIDQgMykpKSkKICAgIChpZiAoc3RyaW5nPSBk QSBkQikKICAgICAgICAocGFja2FnZS1tZW51LS1uYW1lLXByZWRpY2F0ZSBBIEIpCiAgICAgIChz dHJpbmc8IGRBIGRCKSkpKQoKKGRlZnVuIHBhY2thZ2UtbWVudS0tbmFtZS1wcmVkaWNhdGUgKEEg QikKICAiUHJlZGljYXRlIHRvIHNvcnQgXCIqUGFja2FnZXMqXCIgYnVmZmVyIGJ5IHRoZSBuYW1l IGNvbHVtbi4KVGhpcyBpcyB1c2VkIGZvciBgdGFidWxhdGVkLWxpc3QtZm9ybWF0JyBpbiBgcGFj a2FnZS1tZW51LW1vZGUnLiIKICAoc3RyaW5nPCAoc3ltYm9sLW5hbWUgKHBhY2thZ2UtZGVzYy1u YW1lIChjYXIgQSkpKQogICAgICAgICAgIChzeW1ib2wtbmFtZSAocGFja2FnZS1kZXNjLW5hbWUg KGNhciBCKSkpKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUtLWFyY2hpdmUtcHJlZGljYXRlIChBIEIp CiAgIlByZWRpY2F0ZSB0byBzb3J0IFwiKlBhY2thZ2VzKlwiIGJ1ZmZlciBieSB0aGUgYXJjaGl2 ZSBjb2x1bW4uClRoaXMgaXMgdXNlZCBmb3IgYHRhYnVsYXRlZC1saXN0LWZvcm1hdCcgaW4gYHBh Y2thZ2UtbWVudS1tb2RlJy4iCiAgKGxldCAoKGEgKG9yIChwYWNrYWdlLWRlc2MtYXJjaGl2ZSAo Y2FyIEEpKSAiIikpCiAgICAgICAgKGIgKG9yIChwYWNrYWdlLWRlc2MtYXJjaGl2ZSAoY2FyIEIp KSAiIikpKQogICAgKGlmIChzdHJpbmc9IGEgYikKICAgICAgICAocGFja2FnZS1tZW51LS1uYW1l LXByZWRpY2F0ZSBBIEIpCiAgICAgIChzdHJpbmc8IGEgYikpKSkKCihkZWZ1biBwYWNrYWdlLW1l bnUtLXBvcHVsYXRlLW5ldy1wYWNrYWdlLWxpc3QgKCkKICAiRGVjaWRlIHdoaWNoIHBhY2thZ2Vz IGFyZSBuZXcgaW4gYHBhY2thZ2UtYXJjaGl2ZS1jb250ZW50cycuClN0b3JlIHRoaXMgbGlzdCBp biBgcGFja2FnZS1tZW51LS1uZXctcGFja2FnZS1saXN0Jy4iCiAgOzsgRmluZCB3aGljaCBwYWNr YWdlcyBhcmUgbmV3LgogICh3aGVuIHBhY2thZ2UtbWVudS0tb2xkLWFyY2hpdmUtY29udGVudHMK ICAgIChkb2xpc3QgKGVsdCBwYWNrYWdlLWFyY2hpdmUtY29udGVudHMpCiAgICAgICh1bmxlc3Mg KGFzc3EgKGNhciBlbHQpIHBhY2thZ2UtbWVudS0tb2xkLWFyY2hpdmUtY29udGVudHMpCiAgICAg ICAgKHB1c2ggKGNhciBlbHQpIHBhY2thZ2UtbWVudS0tbmV3LXBhY2thZ2UtbGlzdCkpKQogICAg KHNldHEgcGFja2FnZS1tZW51LS1vbGQtYXJjaGl2ZS1jb250ZW50cyBuaWwpKSkKCihkZWZ1biBw YWNrYWdlLW1lbnUtLWZpbmQtYW5kLW5vdGlmeS11cGdyYWRlcyAoKQogICJOb3RpZnkgdGhlIHVz ZXIgb2YgdXBncmFkYWJsZSBwYWNrYWdlcy4iCiAgKHdoZW4tbGV0KiAoKHVwZ3JhZGVzIChwYWNr YWdlLW1lbnUtLWZpbmQtdXBncmFkZXMpKSkKICAgIChtZXNzYWdlICJQYWNrYWdlcyB0aGF0IGNh biBiZSB1cGdyYWRlZDogJWQ7IHR5cGUgYCVzJyB0byBtYXJrIGZvciB1cGdyYWRpbmcuIgogICAg ICAgICAgICAgKGxlbmd0aCB1cGdyYWRlcykKICAgICAgICAgICAgIChzdWJzdGl0dXRlLWNvbW1h bmQta2V5cyAiXFxbcGFja2FnZS1tZW51LW1hcmstdXBncmFkZXNdIikpKSkKCgooZGVmdW4gcGFj a2FnZS1tZW51LS1wb3N0LXJlZnJlc2ggKCkKICAiUmV2ZXJ0IFwiKlBhY2thZ2VzKlwiIGJ1ZmZl ciBhbmQgY2hlY2sgZm9yIG5ldyBwYWNrYWdlcyBhbmQgdXBncmFkZXMuCkRvIG5vdGhpbmcgaWYg dGhlcmUncyBubyAqUGFja2FnZXMqIGJ1ZmZlci4KClRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFm dGVyIGBwYWNrYWdlLXJlZnJlc2gtY29udGVudHMnIGFuZCBpdAppcyBhZGRlZCB0byBgcG9zdC1j b21tYW5kLWhvb2snIGJ5IGFueSBmdW5jdGlvbiB3aGljaCBhbHRlcnMgdGhlCnBhY2thZ2UgZGF0 YWJhc2UgKGBwYWNrYWdlLWluc3RhbGwnIGFuZCBgcGFja2FnZS1kZWxldGUnKS4gIFdoZW4KcnVu LCBpdCByZW1vdmVzIGl0c2VsZiBmcm9tIGBwb3N0LWNvbW1hbmQtaG9vaycuIgogIChyZW1vdmUt aG9vayAncG9zdC1jb21tYW5kLWhvb2sgIydwYWNrYWdlLW1lbnUtLXBvc3QtcmVmcmVzaCkKICAo bGV0ICgoYnVmIChnZXQtYnVmZmVyICIqUGFja2FnZXMqIikpKQogICAgKHdoZW4gKGJ1ZmZlci1s aXZlLXAgYnVmKQogICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYKICAgICAgICAocGFja2Fn ZS1tZW51LS1wb3B1bGF0ZS1uZXctcGFja2FnZS1saXN0KQogICAgICAgIChydW4taG9va3MgJ3Rh YnVsYXRlZC1saXN0LXJldmVydC1ob29rKQogICAgICAgICh0YWJ1bGF0ZWQtbGlzdC1wcmludCAn cmVtZW1iZXIgJ3VwZGF0ZSkpKSkpCgooZGVmdW4gcGFja2FnZS1tZW51LS1tYXJrLW9yLW5vdGlm eS11cGdyYWRlcyAoKQogICJJZiB0aGVyZSdzIGEgKlBhY2thZ2VzKiBidWZmZXIsIGNoZWNrIGZv ciB1cGdyYWRlcyBhbmQgcG9zc2libHkgbWFyayB0aGVtLgpEbyBub3RoaW5nIGlmIHRoZXJlJ3Mg bm8gKlBhY2thZ2VzKiBidWZmZXIuICBJZiB0aGVyZSBhcmUKdXBncmFkZXMsIG1hcmsgdGhlbSBp ZiBgcGFja2FnZS1tZW51LS1tYXJrLXVwZ3JhZGVzLXBlbmRpbmcnIGlzCm5vbi1uaWwsIG90aGVy d2lzZSBqdXN0IG5vdGlmeSB0aGUgdXNlciB0aGF0IHRoZXJlIGFyZSB1cGdyYWRlcy4KVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYHBhY2thZ2UtcmVmcmVzaC1jb250ZW50cycuIgogIChs ZXQgKChidWYgKGdldC1idWZmZXIgIipQYWNrYWdlcyoiKSkpCiAgICAod2hlbiAoYnVmZmVyLWxp dmUtcCBidWYpCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgogICAgICAgIChpZiBwYWNr YWdlLW1lbnUtLW1hcmstdXBncmFkZXMtcGVuZGluZwogICAgICAgICAgICAocGFja2FnZS1tZW51 LS1tYXJrLXVwZ3JhZGVzLTEpCiAgICAgICAgICAocGFja2FnZS1tZW51LS1maW5kLWFuZC1ub3Rp ZnktdXBncmFkZXMpKSkpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBsaXN0LXBhY2thZ2VzICgm b3B0aW9uYWwgbm8tZmV0Y2gpCiAgIkRpc3BsYXkgYSBsaXN0IG9mIHBhY2thZ2VzLgpUaGlzIGZp cnN0IGZldGNoZXMgdGhlIHVwZGF0ZWQgbGlzdCBvZiBwYWNrYWdlcyBiZWZvcmUKZGlzcGxheWlu ZywgdW5sZXNzIGEgcHJlZml4IGFyZ3VtZW50IE5PLUZFVENIIGlzIHNwZWNpZmllZC4KVGhlIGxp c3QgaXMgZGlzcGxheWVkIGluIGEgYnVmZmVyIG5hbWVkIGAqUGFja2FnZXMqJywgYW5kCmluY2x1 ZGVzIHRoZSBwYWNrYWdlJ3MgdmVyc2lvbiwgYXZhaWxhYmlsaXR5IHN0YXR1cywgYW5kIGEKc2hv cnQgZGVzY3JpcHRpb24uIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKHJlcXVpcmUgJ2ZpbmRlci1p bmYgbmlsIHQpCiAgOzsgSW5pdGlhbGl6ZSB0aGUgcGFja2FnZSBzeXN0ZW0gaWYgbmVjZXNzYXJ5 LgogICh1bmxlc3MgcGFja2FnZS0taW5pdGlhbGl6ZWQKICAgIChwYWNrYWdlLWluaXRpYWxpemUg dCkpCiAgOzsgSW50ZWdyYXRlIHRoZSBwYWNrYWdlLW1lbnUgd2l0aCB1cGRhdGluZyB0aGUgYXJj aGl2ZXMuCiAgKGFkZC1ob29rICdwYWNrYWdlLS1wb3N0LWRvd25sb2FkLWFyY2hpdmVzLWhvb2sK ICAgICAgICAgICAgIydwYWNrYWdlLW1lbnUtLXBvc3QtcmVmcmVzaCkKICAoYWRkLWhvb2sgJ3Bh Y2thZ2UtLXBvc3QtZG93bmxvYWQtYXJjaGl2ZXMtaG9vawogICAgICAgICAgICAjJ3BhY2thZ2Ut bWVudS0tbWFyay1vci1ub3RpZnktdXBncmFkZXMgJ2FwcGVuZCkKCiAgOzsgR2VuZXJhdGUgdGhl IFBhY2thZ2UgTWVudS4KICAobGV0ICgoYnVmIChnZXQtYnVmZmVyLWNyZWF0ZSAiKlBhY2thZ2Vz KiIpKSkKICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgogICAgICA7OyBTaW5jZSBzb21lIHBh Y2thZ2VzIGhhdmUgdGhlaXIgZGVzY3JpcHRpb25zIGluY2x1ZGUgbm9uLUFTQ0lJCiAgICAgIDs7 IGNoYXJhY3RlcnMuLi4KICAgICAgKHNldHEgYnVmZmVyLWZpbGUtY29kaW5nLXN5c3RlbSAndXRm LTgpCiAgICAgIChwYWNrYWdlLW1lbnUtbW9kZSkKCiAgICAgIDs7IEZldGNoIHRoZSByZW1vdGUg bGlzdCBvZiBwYWNrYWdlcy4KICAgICAgKHVubGVzcyBuby1mZXRjaCAocGFja2FnZS1tZW51LS1y ZWZyZXNoLWNvbnRlbnRzKSkKCiAgICAgIDs7IElmIHdlJ3JlIG5vdCBhc3luYywgdGhpcyB3b3Vs ZCBiZSByZWR1bmRhbnQuCiAgICAgICh3aGVuIHBhY2thZ2UtbWVudS1hc3luYwogICAgICAgIChw YWNrYWdlLW1lbnUtLWdlbmVyYXRlIG5pbCB0KSkpCiAgICA7OyBUaGUgcGFja2FnZSBtZW51IGJ1 ZmZlciBoYXMga2V5YmluZGluZ3MuICBJZiB0aGUgdXNlciB0eXBlcwogICAgOzsgYE0teCBsaXN0 LXBhY2thZ2VzJywgdGhhdCBzdWdnZXN0cyBpdCBzaG91bGQgYmVjb21lIGN1cnJlbnQuCiAgICAo cG9wLXRvLWJ1ZmZlci1zYW1lLXdpbmRvdyBidWYpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZhbGlh cyAncGFja2FnZS1saXN0LXBhY2thZ2VzICdsaXN0LXBhY2thZ2VzKQoKOzsgVXNlZCBpbiBmaW5k ZXIuZWwKKGRlZnVuIHBhY2thZ2Utc2hvdy1wYWNrYWdlLWxpc3QgKCZvcHRpb25hbCBwYWNrYWdl cyBrZXl3b3JkcykKICAiRGlzcGxheSBQQUNLQUdFUyBpbiBhICpQYWNrYWdlcyogYnVmZmVyLgpU aGlzIGlzIHNpbWlsYXIgdG8gYGxpc3QtcGFja2FnZXMnLCBidXQgaXQgZG9lcyBub3QgZmV0Y2gg dGhlCnVwZGF0ZWQgbGlzdCBvZiBwYWNrYWdlcywgYW5kIGl0IG9ubHkgZGlzcGxheXMgcGFja2Fn ZXMgd2l0aApuYW1lcyBpbiBQQUNLQUdFUyAod2hpY2ggc2hvdWxkIGJlIGEgbGlzdCBvZiBzeW1i b2xzKS4KCldoZW4gS0VZV09SRFMgYXJlIGdpdmVuLCBvbmx5IHBhY2thZ2VzIHdpdGggdGhvc2Ug S0VZV09SRFMgYXJlCnNob3duLiIKICAoaW50ZXJhY3RpdmUpCiAgKHJlcXVpcmUgJ2ZpbmRlci1p bmYgbmlsIHQpCiAgKGxldCogKChidWYgKGdldC1idWZmZXItY3JlYXRlICIqUGFja2FnZXMqIikp CiAgICAgICAgICh3aW4gKGdldC1idWZmZXItd2luZG93IGJ1ZikpKQogICAgKHdpdGgtY3VycmVu dC1idWZmZXIgYnVmCiAgICAgIChwYWNrYWdlLW1lbnUtbW9kZSkKICAgICAgKHBhY2thZ2UtbWVu dS0tZ2VuZXJhdGUgbmlsIHBhY2thZ2VzIGtleXdvcmRzKSkKICAgIChpZiB3aW4KICAgICAgICAo c2VsZWN0LXdpbmRvdyB3aW4pCiAgICAgIChzd2l0Y2gtdG8tYnVmZmVyIGJ1ZikpKSkKCihkZWZ1 biBwYWNrYWdlLW1lbnUtLWZpbHRlci1ieSAocHJlZGljYXRlIHN1ZmZpeCkKICAiRmlsdGVyIFwi KlBhY2thZ2VzKlwiIGJ1ZmZlciBieSBQUkVESUNBVEUgYW5kIGFkZCBTVUZGSVggdG8gaGVhZGVy LgpQUkVESUNBVEUgaXMgYSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aXRoIG9uZSBh cmd1bWVudCwgYQpgcGFja2FnZS1kZXNjJyBvYmplY3QsIGFuZCByZXR1cm5zIHQgaWYgdGhhdCBv YmplY3Qgc2hvdWxkIGJlCmxpc3RlZCBpbiB0aGUgUGFja2FnZSBNZW51LgoKU1VGRklYIGlzIHBh c3NlZCBvbiB0byBgcGFja2FnZS1tZW51LS1kaXNwbGF5JyBhbmQgaXMgYWRkZWQgdG8KdGhlIGhl YWRlciBsaW5lIG9mIHRoZSBmaXJzdCBjb2x1bW4uIgogIDs7IFVwZGF0ZSBgdGFidWxhdGVkLWxp c3QtZW50cmllcycgc28gdGhhdCBpdCBjb250YWlucyBhbGwKICA7OyBwYWNrYWdlcyBiZWZvcmUg c2VhcmNoaW5nLgogIChwYWNrYWdlLW1lbnUtLXJlZnJlc2ggdCBuaWwpCiAgKGxldCAoZm91bmQt ZW50cmllcykKICAgIChkb2xpc3QgKGVudHJ5IHRhYnVsYXRlZC1saXN0LWVudHJpZXMpCiAgICAg ICh3aGVuIChmdW5jYWxsIHByZWRpY2F0ZSAoY2FyIGVudHJ5KSkKICAgICAgICAocHVzaCBlbnRy eSBmb3VuZC1lbnRyaWVzKSkpCiAgICAoaWYgZm91bmQtZW50cmllcwogICAgICAgIChwcm9nbgog ICAgICAgICAgKHNldHEgdGFidWxhdGVkLWxpc3QtZW50cmllcyBmb3VuZC1lbnRyaWVzKQogICAg ICAgICAgKHBhY2thZ2UtbWVudS0tZGlzcGxheSB0IHN1ZmZpeCkpCiAgICAgICh1c2VyLWVycm9y ICJObyBwYWNrYWdlcyBmb3VuZCIpKSkpCgooZGVmdW4gcGFja2FnZS1tZW51LWZpbHRlci1ieS1h cmNoaXZlIChhcmNoaXZlKQogICJGaWx0ZXIgdGhlIFwiKlBhY2thZ2VzKlwiIGJ1ZmZlciBieSBB UkNISVZFLgpEaXNwbGF5IG9ubHkgcGFja2FnZXMgZnJvbSBwYWNrYWdlIGFyY2hpdmUgQVJDSElW RS4KCldoZW4gY2FsbGVkIGludGVyYWN0aXZlbHksIHByb21wdCBmb3IgQVJDSElWRSwgd2hpY2gg Y2FuIGJlIGEKY29tbWEtc2VwYXJhdGVkIHN0cmluZy4gIElmIEFSQ0hJVkUgaXMgZW1wdHksIHNo b3cgYWxsIHBhY2thZ2VzLgoKV2hlbiBjYWxsZWQgZnJvbSBMaXNwLCBBUkNISVZFIGNhbiBiZSBh IHN0cmluZyBvciBhIGxpc3Qgb2YKc3RyaW5ncy4gIElmIEFSQ0hJVkUgaXMgbmlsIG9yIHRoZSBl bXB0eSBzdHJpbmcsIHNob3cgYWxsCnBhY2thZ2VzLiIKICAoaW50ZXJhY3RpdmUgKGxpc3QgKGNv bXBsZXRpbmctcmVhZC1tdWx0aXBsZQogICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciBieSBh cmNoaXZlIChjb21tYSBzZXBhcmF0ZWQpOiAiCiAgICAgICAgICAgICAgICAgICAgICAobWFwY2Fy ICMnY2FyIHBhY2thZ2UtYXJjaGl2ZXMpKSkKICAgICAgICAgICAgICAgcGFja2FnZS1tZW51LW1v ZGUpCiAgKHBhY2thZ2UtLWVuc3VyZS1wYWNrYWdlLW1lbnUtbW9kZSkKICAobGV0ICgoYXJjaGl2 ZXMgKGVuc3VyZS1saXN0IGFyY2hpdmUpKSkKICAgIChwYWNrYWdlLW1lbnUtLWZpbHRlci1ieQog ICAgIChsYW1iZGEgKHBrZy1kZXNjKQogICAgICAgKGxldCAoKHBrZy1hcmNoaXZlIChwYWNrYWdl LWRlc2MtYXJjaGl2ZSBwa2ctZGVzYykpKQogICAgICAgICAob3IgKG51bGwgYXJjaGl2ZXMpCiAg ICAgICAgICAgICAoYW5kIHBrZy1hcmNoaXZlCiAgICAgICAgICAgICAgICAgIChtZW1iZXIgcGtn LWFyY2hpdmUgYXJjaGl2ZXMpKSkpKQogICAgIChjb25jYXQgImFyY2hpdmU6IiAoc3RyaW5nLWpv aW4gYXJjaGl2ZXMgIiwiKSkpKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUtZmlsdGVyLWJ5LWRlc2Ny aXB0aW9uIChkZXNjcmlwdGlvbikKICAiRmlsdGVyIHRoZSBcIipQYWNrYWdlcypcIiBidWZmZXIg YnkgREVTQ1JJUFRJT04gcmVnZXhwLgpEaXNwbGF5IG9ubHkgcGFja2FnZXMgd2l0aCBhIGRlc2Ny aXB0aW9uIHRoYXQgbWF0Y2hlcyByZWdleHAKREVTQ1JJUFRJT04uCgpXaGVuIGNhbGxlZCBpbnRl cmFjdGl2ZWx5LCBwcm9tcHQgZm9yIERFU0NSSVBUSU9OLgoKSWYgREVTQ1JJUFRJT04gaXMgbmls IG9yIHRoZSBlbXB0eSBzdHJpbmcsIHNob3cgYWxsIHBhY2thZ2VzLiIKICAoaW50ZXJhY3RpdmUg KGxpc3QgKHJlYWQtcmVnZXhwICJGaWx0ZXIgYnkgZGVzY3JpcHRpb24gKHJlZ2V4cCkiKSkKICAg ICAgICAgICAgICAgcGFja2FnZS1tZW51LW1vZGUpCiAgKHBhY2thZ2UtLWVuc3VyZS1wYWNrYWdl LW1lbnUtbW9kZSkKICAoaWYgKG9yIChub3QgZGVzY3JpcHRpb24pIChzdHJpbmctZW1wdHktcCBk ZXNjcmlwdGlvbikpCiAgICAgIChwYWNrYWdlLW1lbnUtLWdlbmVyYXRlIHQgdCkKICAgIChwYWNr YWdlLW1lbnUtLWZpbHRlci1ieSAobGFtYmRhIChwa2ctZGVzYykKICAgICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZy1tYXRjaCBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChwYWNrYWdlLWRlc2Mtc3VtbWFyeSBwa2ctZGVzYykpKQogICAgICAgICAg ICAgICAgICAgICAgKGZvcm1hdCAiZGVzYzolcyIgZGVzY3JpcHRpb24pKSkpCgooZGVmdW4gcGFj a2FnZS1tZW51LWZpbHRlci1ieS1rZXl3b3JkIChrZXl3b3JkKQogICJGaWx0ZXIgdGhlIFwiKlBh Y2thZ2VzKlwiIGJ1ZmZlciBieSBLRVlXT1JELgpEaXNwbGF5IG9ubHkgcGFja2FnZXMgd2l0aCBz cGVjaWZpZWQgS0VZV09SRC4KCldoZW4gY2FsbGVkIGludGVyYWN0aXZlbHksIHByb21wdCBmb3Ig S0VZV09SRCwgd2hpY2ggY2FuIGJlIGEKY29tbWEtc2VwYXJhdGVkIHN0cmluZy4gIElmIEtFWVdP UkQgaXMgZW1wdHksIHNob3cgYWxsIHBhY2thZ2VzLgoKV2hlbiBjYWxsZWQgZnJvbSBMaXNwLCBL RVlXT1JEIGNhbiBiZSBhIHN0cmluZyBvciBhIGxpc3Qgb2YKc3RyaW5ncy4gIElmIEtFWVdPUkQg aXMgbmlsIG9yIHRoZSBlbXB0eSBzdHJpbmcsIHNob3cgYWxsCnBhY2thZ2VzLiIKICAoaW50ZXJh Y3RpdmUgKGxpc3QgKGNvbXBsZXRpbmctcmVhZC1tdWx0aXBsZQogICAgICAgICAgICAgICAgICAg ICAgIktleXdvcmRzIChjb21tYSBzZXBhcmF0ZWQpOiAiCiAgICAgICAgICAgICAgICAgICAgICAo cGFja2FnZS1hbGwta2V5d29yZHMpKSkKICAgICAgICAgICAgICAgcGFja2FnZS1tZW51LW1vZGUp CiAgKHBhY2thZ2UtLWVuc3VyZS1wYWNrYWdlLW1lbnUtbW9kZSkKICAod2hlbiAoc3RyaW5ncCBr ZXl3b3JkKQogICAgKHNldHEga2V5d29yZCAobGlzdCBrZXl3b3JkKSkpCiAgKGlmIChub3Qga2V5 d29yZCkKICAgICAgKHBhY2thZ2UtbWVudS0tZ2VuZXJhdGUgdCB0KQogICAgKHBhY2thZ2UtbWVu dS0tZmlsdGVyLWJ5IChsYW1iZGEgKHBrZy1kZXNjKQogICAgICAgICAgICAgICAgICAgICAgICAo cGFja2FnZS0taGFzLWtleXdvcmQtcCBwa2ctZGVzYyBrZXl3b3JkKSkKICAgICAgICAgICAgICAg ICAgICAgIChjb25jYXQgImtleXdvcmQ6IiAoc3RyaW5nLWpvaW4ga2V5d29yZCAiLCIpKSkpKQoK KGRlZmluZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcwogICdwYWNrYWdlLW1lbnUtZmlsdGVyICMn cGFja2FnZS1tZW51LWZpbHRlci1ieS1rZXl3b3JkICIyNy4xIikKCihkZWZ1biBwYWNrYWdlLW1l bnUtZmlsdGVyLWJ5LW5hbWUtb3ItZGVzY3JpcHRpb24gKG5hbWUtb3ItZGVzY3JpcHRpb24pCiAg IkZpbHRlciB0aGUgXCIqUGFja2FnZXMqXCIgYnVmZmVyIGJ5IE5BTUUtT1ItREVTQ1JJUFRJT04g cmVnZXhwLgpEaXNwbGF5IG9ubHkgcGFja2FnZXMgd2l0aCBhIG5hbWUtb3ItZGVzY3JpcHRpb24g dGhhdCBtYXRjaGVzIHJlZ2V4cApOQU1FLU9SLURFU0NSSVBUSU9OLgoKV2hlbiBjYWxsZWQgaW50 ZXJhY3RpdmVseSwgcHJvbXB0IGZvciBOQU1FLU9SLURFU0NSSVBUSU9OLgoKSWYgTkFNRS1PUi1E RVNDUklQVElPTiBpcyBuaWwgb3IgdGhlIGVtcHR5IHN0cmluZywgc2hvdyBhbGwKcGFja2FnZXMu IgogIChpbnRlcmFjdGl2ZSAobGlzdCAocmVhZC1yZWdleHAgIkZpbHRlciBieSBuYW1lIG9yIGRl c2NyaXB0aW9uIChyZWdleHApIikpCiAgICAgICAgICAgICAgIHBhY2thZ2UtbWVudS1tb2RlKQog IChwYWNrYWdlLS1lbnN1cmUtcGFja2FnZS1tZW51LW1vZGUpCiAgKGlmIChvciAobm90IG5hbWUt b3ItZGVzY3JpcHRpb24pIChzdHJpbmctZW1wdHktcCBuYW1lLW9yLWRlc2NyaXB0aW9uKSkKICAg ICAgKHBhY2thZ2UtbWVudS0tZ2VuZXJhdGUgdCB0KQogICAgKHBhY2thZ2UtbWVudS0tZmlsdGVy LWJ5IChsYW1iZGEgKHBrZy1kZXNjKQogICAgICAgICAgICAgICAgICAgICAgICAob3IgKHN0cmlu Zy1tYXRjaCBuYW1lLW9yLWRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChwYWNrYWdlLWRlc2Mtc3VtbWFyeSBwa2ctZGVzYykpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoIG5hbWUtb3ItZGVzY3JpcHRpb24KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC1uYW1lCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLW5hbWUgcGtn LWRlc2MpKSkpKQogICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAibmFtZS1vci1kZXNjOiVz IiBuYW1lLW9yLWRlc2NyaXB0aW9uKSkpKQoKKGRlZnVuIHBhY2thZ2UtbWVudS1maWx0ZXItYnkt bmFtZSAobmFtZSkKICAiRmlsdGVyIHRoZSBcIipQYWNrYWdlcypcIiBidWZmZXIgYnkgTkFNRSBy ZWdleHAuCkRpc3BsYXkgb25seSBwYWNrYWdlcyB3aXRoIG5hbWUgdGhhdCBtYXRjaGVzIHJlZ2V4 cCBOQU1FLgoKV2hlbiBjYWxsZWQgaW50ZXJhY3RpdmVseSwgcHJvbXB0IGZvciBOQU1FLgoKSWYg TkFNRSBpcyBuaWwgb3IgdGhlIGVtcHR5IHN0cmluZywgc2hvdyBhbGwgcGFja2FnZXMuIgogIChp bnRlcmFjdGl2ZSAobGlzdCAocmVhZC1yZWdleHAgIkZpbHRlciBieSBuYW1lIChyZWdleHApIikp CiAgICAgICAgICAgICAgIHBhY2thZ2UtbWVudS1tb2RlKQogIChwYWNrYWdlLS1lbnN1cmUtcGFj a2FnZS1tZW51LW1vZGUpCiAgKGlmIChvciAobm90IG5hbWUpIChzdHJpbmctZW1wdHktcCBuYW1l KSkKICAgICAgKHBhY2thZ2UtbWVudS0tZ2VuZXJhdGUgdCB0KQogICAgKHBhY2thZ2UtbWVudS0t ZmlsdGVyLWJ5IChsYW1iZGEgKHBrZy1kZXNjKQogICAgICAgICAgICAgICAgICAgICAgICAoc3Ry aW5nLW1hdGNoLXAgbmFtZSAoc3ltYm9sLW5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlc2MtbmFtZSBwa2ctZGVzYykpKSkKICAgICAg ICAgICAgICAgICAgICAgIChmb3JtYXQgIm5hbWU6JXMiIG5hbWUpKSkpCgooZGVmdW4gcGFja2Fn ZS1tZW51LWZpbHRlci1ieS1zdGF0dXMgKHN0YXR1cykKICAiRmlsdGVyIHRoZSBcIipQYWNrYWdl cypcIiBidWZmZXIgYnkgU1RBVFVTLgpEaXNwbGF5IG9ubHkgcGFja2FnZXMgd2l0aCBzcGVjaWZp ZWQgU1RBVFVTLgoKV2hlbiBjYWxsZWQgaW50ZXJhY3RpdmVseSwgcHJvbXB0IGZvciBTVEFUVVMs IHdoaWNoIGNhbiBiZSBhCmNvbW1hLXNlcGFyYXRlZCBzdHJpbmcuICBJZiBTVEFUVVMgaXMgZW1w dHksIHNob3cgYWxsIHBhY2thZ2VzLgoKV2hlbiBjYWxsZWQgZnJvbSBMaXNwLCBTVEFUVVMgY2Fu IGJlIGEgc3RyaW5nIG9yIGEgbGlzdCBvZgpzdHJpbmdzLiAgSWYgU1RBVFVTIGlzIG5pbCBvciB0 aGUgZW1wdHkgc3RyaW5nLCBzaG93IGFsbApwYWNrYWdlcy4iCiAgKGludGVyYWN0aXZlIChsaXN0 IChjb21wbGV0aW5nLXJlYWQgIkZpbHRlciBieSBzdGF0dXM6ICIKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnKCJhdmFpbC1vYnNvIgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImF2YWlsYWJsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJidWlsdC1pbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJkZXBlbmRlbmN5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImRpc2FibGVkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4 dGVybmFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlbGQiCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wYXQiCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdGFsbGVkIgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSIKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJuZXciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAidW5zaWduZWQiKSkpCiAgICAgICAgICAgICAgIHBhY2thZ2UtbWVudS1tb2RlKQog IChwYWNrYWdlLS1lbnN1cmUtcGFja2FnZS1tZW51LW1vZGUpCiAgKGlmIChvciAobm90IHN0YXR1 cykgKHN0cmluZy1lbXB0eS1wIHN0YXR1cykpCiAgICAgIChwYWNrYWdlLW1lbnUtLWdlbmVyYXRl IHQgdCkKICAgIChsZXQgKChzdGF0dXMtbGlzdAogICAgICAgICAgIChpZiAobGlzdHAgc3RhdHVz KQogICAgICAgICAgICAgICBzdGF0dXMKICAgICAgICAgICAgIChzcGxpdC1zdHJpbmcgc3RhdHVz ICIsIikpKSkKICAgICAgKHBhY2thZ2UtbWVudS0tZmlsdGVyLWJ5CiAgICAgICAobGFtYmRhIChw a2ctZGVzYykKICAgICAgICAgKG1lbWJlciAocGFja2FnZS1kZXNjLXN0YXR1cyBwa2ctZGVzYykg c3RhdHVzLWxpc3QpKQogICAgICAgKGZvcm1hdCAic3RhdHVzOiVzIiAoc3RyaW5nLWpvaW4gc3Rh dHVzLWxpc3QgIiwiKSkpKSkpCgooZGVmdW4gcGFja2FnZS1tZW51LWZpbHRlci1ieS12ZXJzaW9u ICh2ZXJzaW9uIHByZWRpY2F0ZSkKICAiRmlsdGVyIHRoZSBcIipQYWNrYWdlcypcIiBidWZmZXIg YnkgVkVSU0lPTiBhbmQgUFJFRElDQVRFLgpEaXNwbGF5IG9ubHkgcGFja2FnZXMgd2l0aCBhIG1h dGNoaW5nIHZlcnNpb24uCgpXaGVuIGNhbGxlZCBpbnRlcmFjdGl2ZWx5LCBwcm9tcHQgZm9yIG9u ZSBvZiB0aGUgcXVhbGlmaWVycyBgPCcsCmA+JyBvciBgPScsIGFuZCBhIHBhY2thZ2UgdmVyc2lv bi4gIFNob3cgb25seSBwYWNrYWdlcyB0aGF0IGhhcyBhCmxvd2VyIChgPCcpLCBlcXVhbCAoYD0n KSBvciBoaWdoZXIgKGA+JykgdmVyc2lvbiB0aGFuIHRoZQpzcGVjaWZpZWQgb25lLgoKV2hlbiBj YWxsZWQgZnJvbSBMaXNwLCBWRVJTSU9OIHNob3VsZCBiZSBhIHZlcnNpb24gc3RyaW5nIGFuZApQ UkVESUNBVEUgc2hvdWxkIGJlIHRoZSBzeW1ib2wgYD0nLCBgPCcgb3IgYD4nLgoKSWYgVkVSU0lP TiBpcyBuaWwgb3IgdGhlIGVtcHR5IHN0cmluZywgc2hvdyBhbGwgcGFja2FnZXMuIgogIChpbnRl cmFjdGl2ZSAobGV0ICgoY2hvaWNlIChpbnRlcm4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNoYXItdG8tc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZC1j aGFyLWNob2ljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIgYnkgdmVy c2lvbj8gW1R5cGUgPSwgPCwgPiBvciBxXSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJyg/PCA/PiA/PSA/cSkpKSkpKQogICAgICAgICAgICAgICAgIChpZiAoZXEgY2hvaWNlICdx KQogICAgICAgICAgICAgICAgICAgICAnKHF1aXQgbmlsKQogICAgICAgICAgICAgICAgICAgKGxp c3QgKHJlYWQtZnJvbS1taW5pYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNh dCAiRmlsdGVyIGJ5IHZlcnNpb24gKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChwY2FzZSBjaG9pY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc9ICI9 IGVxdWFsIHRvIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ICI8IGxl c3MgdGhhbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPiAiPiBncmVh dGVyIHRoYW4iKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOiAiKSkKICAg ICAgICAgICAgICAgICAgICAgICAgIGNob2ljZSkpKQogICAgICAgICAgICAgICBwYWNrYWdlLW1l bnUtbW9kZSkKICAocGFja2FnZS0tZW5zdXJlLXBhY2thZ2UtbWVudS1tb2RlKQogICh1bmxlc3Mg KGVxdWFsIHByZWRpY2F0ZSAncXVpdCkKICAgIChpZiAob3IgKG5vdCB2ZXJzaW9uKSAoc3RyaW5n LWVtcHR5LXAgdmVyc2lvbikpCiAgICAgICAgKHBhY2thZ2UtbWVudS0tZ2VuZXJhdGUgdCB0KQog ICAgICAocGFja2FnZS1tZW51LS1maWx0ZXItYnkKICAgICAgIChsZXQgKChmdW4gKHBjYXNlIHBy ZWRpY2F0ZQogICAgICAgICAgICAgICAgICAgICgnPSAjJ3ZlcnNpb24tbGlzdC09KQogICAgICAg ICAgICAgICAgICAgICgnPCAjJ3ZlcnNpb24tbGlzdC08KQogICAgICAgICAgICAgICAgICAgICgn PiAobGFtYmRhIChhIGIpIChub3QgKHZlcnNpb24tbGlzdC08PSBhIGIpKSkpCiAgICAgICAgICAg ICAgICAgICAgKF8gKGVycm9yICJVbmtub3duIHByZWRpY2F0ZTogJXMiIHByZWRpY2F0ZSkpKSkK ICAgICAgICAgICAgICh2ZXIgKHZlcnNpb24tdG8tbGlzdCB2ZXJzaW9uKSkpCiAgICAgICAgIChs YW1iZGEgKHBrZy1kZXNjKQogICAgICAgICAgIChmdW5jYWxsIGZ1biAocGFja2FnZS1kZXNjLXZl cnNpb24gcGtnLWRlc2MpIHZlcikpKQogICAgICAgKGZvcm1hdCAidmVyc2lvbnM6JXMlcyIgcHJl ZGljYXRlIHZlcnNpb24pKSkpKQoKKGRlZnVuIHBhY2thZ2UtbWVudS1maWx0ZXItbWFya2VkICgp CiAgIkZpbHRlciBcIipQYWNrYWdlcypcIiBidWZmZXIgYnkgbm9uLWVtcHR5IHVwZ3JhZGUgbWFy ay4KVW5saWtlIG90aGVyIGZpbHRlcnMsIHRoaXMgbGVhdmVzIHRoZSBtYXJrcyBpbnRhY3QuIgog IChpbnRlcmFjdGl2ZSBuaWwgcGFja2FnZS1tZW51LW1vZGUpCiAgKHBhY2thZ2UtLWVuc3VyZS1w YWNrYWdlLW1lbnUtbW9kZSkKICAod2lkZW4pCiAgKGxldCAoZm91bmQtZW50cmllcyBtYXJrIHBr Zy1pZCBlbnRyeSBtYXJrcykKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAoZ290by1jaGFyIChw b2ludC1taW4pKQogICAgICAod2hpbGUgKG5vdCAoZW9icCkpCiAgICAgICAgKHNldHEgbWFyayAo Y2hhci1hZnRlcikpCiAgICAgICAgKHVubGVzcyAoZXEgbWFyayA/XHMpCiAgICAgICAgICAoc2V0 cSBwa2ctaWQgKHRhYnVsYXRlZC1saXN0LWdldC1pZCkpCiAgICAgICAgICAoc2V0cSBlbnRyeSAo cGFja2FnZS1tZW51LS1wcmludC1pbmZvLXNpbXBsZSBwa2ctaWQpKQogICAgICAgICAgKHB1c2gg ZW50cnkgZm91bmQtZW50cmllcykKICAgICAgICAgIDs7IHJlbWVtYmVyIHRoZSBtYXJrCiAgICAg ICAgICAocHVzaCAoY29ucyBwa2ctaWQgbWFyaykgbWFya3MpKQogICAgICAgIChmb3J3YXJkLWxp bmUpKQogICAgICAoaWYgZm91bmQtZW50cmllcwogICAgICAgICAgKHByb2duCiAgICAgICAgICAg IChzZXRxIHRhYnVsYXRlZC1saXN0LWVudHJpZXMgZm91bmQtZW50cmllcykKICAgICAgICAgICAg KHBhY2thZ2UtbWVudS0tZGlzcGxheSB0IG5pbCkKICAgICAgICAgICAgOzsgcmVkbyB0aGUgbWFy a3MsIGJ1dCB3ZSBtdXN0IHJlbWVtYmVyIHRoZSBtYXJrcyEhCiAgICAgICAgICAgIChnb3RvLWNo YXIgKHBvaW50LW1pbikpCiAgICAgICAgICAgICh3aGlsZSAobm90IChlb2JwKSkKICAgICAgICAg ICAgICAoc2V0cSBtYXJrIChjZHIgKGFzc3EgKHRhYnVsYXRlZC1saXN0LWdldC1pZCkgbWFya3Mp KSkKICAgICAgICAgICAgICAodGFidWxhdGVkLWxpc3QtcHV0LXRhZyAoY2hhci10by1zdHJpbmcg bWFyaykgdCkpKQogICAgICAgICh1c2VyLWVycm9yICJObyBwYWNrYWdlcyBmb3VuZCIpKSkpKQoK KGRlZnVuIHBhY2thZ2UtbWVudS1maWx0ZXItdXBncmFkYWJsZSAoKQogICJGaWx0ZXIgXCIqUGFj a2FnZXMqXCIgYnVmZmVyIHRvIHNob3cgb25seSB1cGdyYWRhYmxlIHBhY2thZ2VzLiIKICAoaW50 ZXJhY3RpdmUgbmlsIHBhY2thZ2UtbWVudS1tb2RlKQogIChsZXQgKChwa2dzIChtYXBjYXIgIydj YXIgKHBhY2thZ2UtbWVudS0tZmluZC11cGdyYWRlcykpKSkKICAgIChwYWNrYWdlLW1lbnUtLWZp bHRlci1ieQogICAgIChsYW1iZGEgKHBrZykKICAgICAgIChtZW1xbCAocGFja2FnZS1kZXNjLW5h bWUgcGtnKSBwa2dzKSkKICAgICAidXBncmFkYWJsZSIpKSkKCihkZWZ1biBwYWNrYWdlLW1lbnUt Y2xlYXItZmlsdGVyICgpCiAgIkNsZWFyIGFueSBmaWx0ZXIgY3VycmVudGx5IGFwcGxpZWQgdG8g dGhlIFwiKlBhY2thZ2VzKlwiIGJ1ZmZlci4iCiAgKGludGVyYWN0aXZlIG5pbCBwYWNrYWdlLW1l bnUtbW9kZSkKICAocGFja2FnZS0tZW5zdXJlLXBhY2thZ2UtbWVudS1tb2RlKQogIChwYWNrYWdl LW1lbnUtLWdlbmVyYXRlIHQgdCkpCgooZGVmdW4gcGFja2FnZS1saXN0LXBhY2thZ2VzLW5vLWZl dGNoICgpCiAgIkRpc3BsYXkgYSBsaXN0IG9mIHBhY2thZ2VzLgpEb2VzIG5vdCBmZXRjaCB0aGUg dXBkYXRlZCBsaXN0IG9mIHBhY2thZ2VzIGJlZm9yZSBkaXNwbGF5aW5nLgpUaGUgbGlzdCBpcyBk aXNwbGF5ZWQgaW4gYSBidWZmZXIgbmFtZWQgYCpQYWNrYWdlcyonLiIKICAoaW50ZXJhY3RpdmUp CiAgKGxpc3QtcGFja2FnZXMgdCkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gcGFja2FnZS1nZXQt dmVyc2lvbiAoKQogICJSZXR1cm4gdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBwYWNrYWdlIGlu IHdoaWNoIHRoaXMgaXMgdXNlZC4KQXNzdW1lcyBpdCBpcyB1c2VkIGZyb20gYW4gRWxpc3AgZmls ZSBwbGFjZWQgaW5zaWRlIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5Cm9mIGFuIGluc3RhbGxlZCBF TFBBIHBhY2thZ2UuClRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJpbmcgKG9yIG5pbCBpbiBjYXNl IHdlIGNhbid0IGZpbmQgaXQpLgpJdCB3b3JrcyBpbiBtb3JlIGNhc2VzIGlmIHRoZSBjYWxsIGlz IGluIHRoZSBmaWxlIHdoaWNoIGNvbnRhaW5zCnRoZSBgVmVyc2lvbjonIGhlYWRlci4iCiAgOzsg SW4gYSBzZW5zZSwgdGhpcyBpcyBhIGxpZSwgYnV0IGl0IGRvZXMganVzdCB3aGF0IHdlIHdhbnQ6 IHByZWNvbXB1dGUKICA7OyB0aGUgdmVyc2lvbiBhdCBjb21waWxlIHRpbWUgYW5kIGhhcmRjb2Rl cyBpdCBpbnRvIHRoZSAuZWxjIGZpbGUhCiAgKGRlY2xhcmUgKHB1cmUgdCkpCiAgOzsgSGFjayBh bGVydCEKICAobGV0ICgoZmlsZSAob3IgKG1hY3JvZXhwLWZpbGUtbmFtZSkgYnVmZmVyLWZpbGUt bmFtZSkpKQogICAgKGNvbmQKICAgICAoKG51bGwgZmlsZSkgbmlsKQogICAgIDs7IFBhY2thZ2Vz IGFyZSBub3JtYWxseSBpbnN0YWxsZWQgaW50byBkaXJlY3RvcmllcyBuYW1lZCAiPHBrZz4tPHZl cnM+IiwKICAgICA7OyBzbyBnZXQgdGhlIHZlcnNpb24gbnVtYmVyIGZyb20gdGhlcmUuCiAgICAg KChzdHJpbmctbWF0Y2ggIi9bXi9dKy1cXChbMC05XVxcKD86WzAtOS5dXFx8cHJlXFx8YmV0YVxc fGFscGhhXFx8c25hcHNob3RcXCkrXFwpL1teL10rXFwnIiBmaWxlKQogICAgICAobWF0Y2gtc3Ry aW5nIDEgZmlsZSkpCiAgICAgOzsgRm9yIHBhY2thZ2VzIHJ1biBzdHJhaWdodCBmcm9tIHRoZSBh biBlbHBhLmdpdCBjbG9uZSwgdGhlcmUncyBubwogICAgIDs7ICItPHZlcnM+IiBpbiB0aGUgZGly ZWN0b3J5IG5hbWUsIHNvIHdlIGhhdmUgdG8gZmV0Y2ggdGhlIHZlcnNpb24KICAgICA7OyB0aGUg aGFyZCB3YXkuCiAgICAgKHQKICAgICAgKGxldCogKChwa2dkaXIgKGZpbGUtbmFtZS1kaXJlY3Rv cnkgZmlsZSkpCiAgICAgICAgICAgICAocGtnbmFtZSAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSAo ZGlyZWN0b3J5LWZpbGUtbmFtZSBwa2dkaXIpKSkKICAgICAgICAgICAgIChtYWluZmlsZSAoZXhw YW5kLWZpbGUtbmFtZSAoY29uY2F0IHBrZ25hbWUgIi5lbCIpIHBrZ2RpcikpKQogICAgICAgICh1 bmxlc3MgKGZpbGUtcmVhZGFibGUtcCBtYWluZmlsZSkgKHNldHEgbWFpbmZpbGUgZmlsZSkpCiAg ICAgICAgKHdoZW4gKGZpbGUtcmVhZGFibGUtcCBtYWluZmlsZSkKICAgICAgICAgIChyZXF1aXJl ICdsaXNwLW1udCkKICAgICAgICAgICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgICAgICAgIChpbnNl cnQtZmlsZS1jb250ZW50cyBtYWluZmlsZSkKICAgICAgICAgICAgKG9yIChsbS1oZWFkZXIgInBh Y2thZ2UtdmVyc2lvbiIpCiAgICAgICAgICAgICAgICAobG0taGVhZGVyICJ2ZXJzaW9uIikpKSkp KSkpKQoKDAo7Ozs7IFF1aWNrc3RhcnQ6IHByZWNvbXB1dGUgYWN0aXZhdGlvbiBhY3Rpb25zIGZv ciBmYXN0ZXIgc3RhcnQgdXAuCgo7OyBBY3RpdmF0aW5nIHBhY2thZ2VzIHZpYSBgcGFja2FnZS1p bml0aWFsaXplJyBpcyBjb3N0bHk6IGZvciBOIGluc3RhbGxlZAo7OyBwYWNrYWdlcywgaXQgbmVl ZHMgdG8gcmVhZCBhbGwgTiA8cGtnPi1wa2cuZWwgZmlsZXMgZmlyc3QgdG8gZGVjaWRlCjs7IHdo aWNoIHBhY2thZ2VzIHRvIGFjdGl2YXRlLCBhbmQgdGhlbiBhZ2FpbiBOIDxwa2c+LWF1dG9sb2Fk cy5lbCBmaWxlcy4KOzsgVG8gc3BlZWQgdGhpcyB1cCwgd2UgcHJlY29tcHV0ZSBhIG1lZ2EtYXV0 b2xvYWRzIGZpbGUgd2hpY2ggaXMgdGhlCjs7IGNvbmNhdGVuYXRpb24gb2YgYWxsIHRob3NlIDxw a2c+LWF1dG9sb2Fkcy5lbCwgc28gd2UgY2FuIGFjdGl2YXRlCjs7IGFsbCBwYWNrYWdlcyBieSBs b2FkaW5nIHRoaXMgb25lIGZpbGUgKGFuZCBoZW5jZSB3aXRob3V0IGluaXRpYWxpemluZwo7OyBw YWNrYWdlLmVsKS4KCjs7IE90aGVyIHRoYW4gc3BlZWRpbmcgdGhpbmdzIHVwLCB0aGlzIGFsc28g b2ZmZXJzIGEgYm9vdHN0cmFwIGZlYXR1cmU6Cjs7IGl0IGxldHMgdXMgYWN0aXZhdGUgcGFja2Fn ZXMgYWNjb3JkaW5nIHRvIGBwYWNrYWdlLWxvYWQtbGlzdCcgYW5kCjs7IGBwYWNrYWdlLXVzZXIt ZGlyJyBldmVuIGJlZm9yZSB0aG9zZSB2YXJzIGFyZSBzZXQuCgooZGVmY3VzdG9tIHBhY2thZ2Ut cXVpY2tzdGFydCBuaWwKICAiUHJlY29tcHV0ZSBhY3RpdmF0aW9uIGFjdGlvbnMgdG8gc3BlZWQg dXAgc3RhcnR1cC4KVGhpcyByZXF1aXJlcyB0aGUgdXNlIG9mIGBwYWNrYWdlLXF1aWNrc3RhcnQt cmVmcmVzaCcgZXZlcnkgdGltZSB0aGUKYWN0aXZhdGlvbnMgbmVlZCB0byBiZSBjaGFuZ2VkLCBz dWNoIGFzIHdoZW4gYHBhY2thZ2UtbG9hZC1saXN0JyBpcyBtb2RpZmllZC4iCiAgOnR5cGUgJ2Jv b2xlYW4KICA6dmVyc2lvbiAiMjcuMSIpCgo7OzsjIyNhdXRvbG9hZAooZGVmY3VzdG9tIHBhY2th Z2UtcXVpY2tzdGFydC1maWxlCiAgKGxvY2F0ZS11c2VyLWVtYWNzLWZpbGUgInBhY2thZ2UtcXVp Y2tzdGFydC5lbCIpCiAgIkxvY2F0aW9uIG9mIHRoZSBmaWxlIHVzZWQgdG8gc3BlZWQgdXAgYWN0 aXZhdGlvbiBvZiBwYWNrYWdlcyBhdCBzdGFydHVwLiIKICA6dHlwZSAnZmlsZQogIDpncm91cCAn YXBwbGljYXRpb25zCiAgOmluaXRpYWxpemUgIydjdXN0b20taW5pdGlhbGl6ZS1kZWxheQogIDp2 ZXJzaW9uICIyNy4xIikKCihkZWZ1biBwYWNrYWdlLS1xdWlja3N0YXJ0LW1heWJlLXJlZnJlc2gg KCkKICAoaWYgcGFja2FnZS1xdWlja3N0YXJ0CiAgICAgIDs7IEZJWE1FOiBEZWxheSByZWZyZXNo IGluIGNhc2Ugd2UncmUgaW5zdGFsbGluZy9kZWxldGluZwogICAgICA7OyBzZXZlcmFsIHBhY2th Z2VzIQogICAgICAocGFja2FnZS1xdWlja3N0YXJ0LXJlZnJlc2gpCiAgICAoZGVsZXRlLWZpbGUg KGNvbmNhdCBwYWNrYWdlLXF1aWNrc3RhcnQtZmlsZSAiYyIpKQogICAgKGRlbGV0ZS1maWxlIHBh Y2thZ2UtcXVpY2tzdGFydC1maWxlKSkpCgooZGVmdW4gcGFja2FnZS1xdWlja3N0YXJ0LXJlZnJl c2ggKCkKICAiKFJlKUdlbmVyYXRlIHRoZSBgcGFja2FnZS1xdWlja3N0YXJ0LWZpbGUnLiIKICAo aW50ZXJhY3RpdmUpCiAgKHBhY2thZ2UtaW5pdGlhbGl6ZSAnbm8tYWN0aXZhdGUpCiAgKHJlcXVp cmUgJ2luZm8pCiAgKGxldCAoKHBhY2thZ2UtLXF1aWNrc3RhcnQtcGtncyAoKSkKICAgICAgICA7 OyBQcmV0ZW5kIHdlIGhhdmVuJ3QgYWN0aXZhdGVkIGFueXRoaW5nIHlldCEKICAgICAgICAocGFj a2FnZS1hY3RpdmF0ZWQtbGlzdCAoKSkKICAgICAgICA7OyBNYWtlIHN1cmUgd2UgY2FuIGxvYWQg dGhpcyBmaWxlIHdpdGhvdXQgbG9hZC1zb3VyY2UtZmlsZS1mdW5jdGlvbi4KICAgICAgICAoY29k aW5nLXN5c3RlbS1mb3Itd3JpdGUgJ2VtYWNzLWludGVybmFsKQogICAgICAgIDs7IEVuc3VyZSB0 aGF0IGBwcCcgYW5kIGBwcmluMS10by1zdHJpbmcnIGNhbGxzIGZ1cnRoZXIgZG93bgogICAgICAg IDs7IGFyZW4ndCB0cnVuY2F0ZWQuCiAgICAgICAgKHByaW50LWxlbmd0aCBuaWwpCiAgICAgICAg KHByaW50LWxldmVsIG5pbCkKICAgICAgICAoSW5mby1kaXJlY3RvcnktbGlzdCAnKCIiKSkpCiAg ICAoZG9saXN0IChlbHQgcGFja2FnZS1hbGlzdCkKICAgICAgKGNvbmRpdGlvbi1jYXNlIGVycgog ICAgICAgICAgKHBhY2thZ2UtYWN0aXZhdGUgKGNhciBlbHQpKQogICAgICAgIDs7IERvbid0IGxl dCBmYWlsdXJlIG9mIGFjdGl2YXRpb24gb2YgYSBwYWNrYWdlIGFyYml0cmFyaWx5IHN0b3AKICAg ICAgICA7OyBhY3RpdmF0aW9uIG9mIGZ1cnRoZXIgcGFja2FnZXMuCiAgICAgICAgKGVycm9yICht ZXNzYWdlICIlcyIgKGVycm9yLW1lc3NhZ2Utc3RyaW5nIGVycikpKSkpCiAgICAoc2V0cSBwYWNr YWdlLS1xdWlja3N0YXJ0LXBrZ3MgKG5yZXZlcnNlIHBhY2thZ2UtLXF1aWNrc3RhcnQtcGtncykp CiAgICAod2l0aC10ZW1wLWZpbGUgcGFja2FnZS1xdWlja3N0YXJ0LWZpbGUKICAgICAgKGVtYWNz LWxpc3AtbW9kZSkgICAgICAgICAgICAgICAgIDtGb3IgYHN5bnRheC1wcHNzJy4KICAgICAgKGlu c2VydCAiOzs7IFF1aWNrc3RhcnQgZmlsZSB0byBhY3RpdmF0ZSBhbGwgcGFja2FnZXMgYXQgc3Rh cnR1cCAgLSotIGxleGljYWwtYmluZGluZzp0IC0qLVxuIikKICAgICAgKGluc2VydCAiOzsgwqHC oSBUaGlzIGZpbGUgaXMgYXV0b2dlbmVyYXRlZCBieSBgcGFja2FnZS1xdWlja3N0YXJ0LXJlZnJl c2gnLCBETyBOT1QgRURJVCAhIVxuXG4iKQogICAgICAoZG9saXN0IChwa2cgcGFja2FnZS0tcXVp Y2tzdGFydC1wa2dzKQogICAgICAgIChsZXQqICgoZmlsZQogICAgICAgICAgICAgICAgOzsgUHJl ZmVyIHVuY29tcGlsZWQgZmlsZXMgKGFuZCBkb24ndCBhY2NlcHQgLnNvIGZpbGVzKS4KICAgICAg ICAgICAgICAgIChsZXQgKChsb2FkLXN1ZmZpeGVzICcoIi5lbCIgIi5lbGMiKSkpCiAgICAgICAg ICAgICAgICAgIChsb2NhdGUtbGlicmFyeSAocGFja2FnZS0tYXV0b2xvYWRzLWZpbGUtbmFtZSBw a2cpKSkpCiAgICAgICAgICAgICAgIChwZmlsZSAocHJpbjEtdG8tc3RyaW5nIGZpbGUpKSkKICAg ICAgICAgIChpbnNlcnQgIihsZXQgKChsb2FkLXRydWUtZmlsZS1uYW1lICIgcGZpbGUgIilcClwo bG9hZC1maWxlLW5hbWUgIiBwZmlsZSAiKSlcbiIpCiAgICAgICAgICAoaW5zZXJ0LWZpbGUtY29u dGVudHMgZmlsZSkKICAgICAgICAgIDs7IEZpeHVwIHRoZSBzcGVjaWFsICMkIHJlYWRlciBmb3Jt IGFuZCB0aHJvdyBhd2F5IGNvbW1lbnRzLgogICAgICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9y d2FyZCAiI1xcJFxcfF47XFwoLipcblxcKSIgbmlsICdtb3ZlKQogICAgICAgICAgICAodW5sZXNz IChwcHNzLXN0cmluZy10ZXJtaW5hdG9yIChzYXZlLW1hdGNoLWRhdGEgKHN5bnRheC1wcHNzKSkp CiAgICAgICAgICAgICAgKHJlcGxhY2UtbWF0Y2ggKGlmIChtYXRjaC1lbmQgMSkgIiIgcGZpbGUp IHQgdCkpKQogICAgICAgICAgKHVubGVzcyAoYm9scCkgKGluc2VydCAiXG4iKSkKICAgICAgICAg IChpbnNlcnQgIilcbiIpKSkKICAgICAgKHBwIGAoZGVmdmFyIHBhY2thZ2UtYWN0aXZhdGVkLWxp c3QpIChjdXJyZW50LWJ1ZmZlcikpCiAgICAgIChwcCBgKHNldHEgcGFja2FnZS1hY3RpdmF0ZWQt bGlzdAogICAgICAgICAgICAgICAgIChkZWxldGUtZHVwcwogICAgICAgICAgICAgICAgICAoYXBw ZW5kICcsKG1hcGNhciAjJ3BhY2thZ2UtZGVzYy1uYW1lIHBhY2thZ2UtLXF1aWNrc3RhcnQtcGtn cykKICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLWFjdGl2YXRlZC1saXN0KSkpCiAg ICAgICAgICAoY3VycmVudC1idWZmZXIpKQogICAgICAobGV0ICgoaW5mby1kaXJzIChidXRsYXN0 IEluZm8tZGlyZWN0b3J5LWxpc3QpKSkKICAgICAgICAod2hlbiBpbmZvLWRpcnMKICAgICAgICAg IChwcCBgKHByb2duIChyZXF1aXJlICdpbmZvKQogICAgICAgICAgICAgICAgICAgICAgKGluZm8t aW5pdGlhbGl6ZSkKICAgICAgICAgICAgICAgICAgICAgIChzZXRxIEluZm8tZGlyZWN0b3J5LWxp c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQgJyxpbmZvLWRpcnMgSW5mby1k aXJlY3RvcnktbGlzdCkpKQogICAgICAgICAgICAgIChjdXJyZW50LWJ1ZmZlcikpKSkKICAgICAg OzsgVXNlIGBccycgaW5zdGVhZCBvZiBhIHNwYWNlIGNoYXJhY3Rlciwgc28gdGhpcyBjb2RlIGNo dW5rIGlzIG5vdAogICAgICA7OyBtaXN0YWtlbiBmb3IgYW4gYWN0dWFsIGZpbGUtbG9jYWwgc2Vj dGlvbiBvZiBwYWNrYWdlLmVsLgogICAgICAoaW5zZXJ0ICIMCjs7IExvY2FsXHNWYXJpYWJsZXM6 Cjs7IHZlcnNpb24tY29udHJvbDogbmV2ZXIKOzsgbm8tdXBkYXRlLWF1dG9sb2FkczogdAo7OyBi eXRlLWNvbXBpbGUtd2FybmluZ3M6IChub3QgbWFrZS1sb2NhbCkKOzsgRW5kOgoiKSkKICAgIDs7 IEZJWE1FOiBEbyBpdCBhc3luY2hyb25vdXNseSBpbiBhbiBFbWFjcyBzdWJwcm9jZXNzLCBhbmQK ICAgIDs7IGRvbid0IHNob3cgdGhlIGJ5dGUtY29tcGlsZXIgd2FybmluZ3MuCiAgICAoYnl0ZS1j b21waWxlLWZpbGUgcGFja2FnZS1xdWlja3N0YXJ0LWZpbGUpKSkKCihkZWZ1biBwYWNrYWdlLS1p bWVudS1wcmV2LWluZGV4LXBvc2l0aW9uLWZ1bmN0aW9uICgpCiAgIk1vdmUgcG9pbnQgdG8gcHJl dmlvdXMgbGluZSBpbiBwYWNrYWdlLW1lbnUgYnVmZmVyLgpUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg YXMgYSB2YWx1ZSBmb3IKYGltZW51LXByZXYtaW5kZXgtcG9zaXRpb24tZnVuY3Rpb24nLiIKICAo dW5sZXNzIChib2JwKQogICAgKGZvcndhcmQtbGluZSAtMSkpKQoKKGRlZnVuIHBhY2thZ2UtLWlt ZW51LWV4dHJhY3QtaW5kZXgtbmFtZS1mdW5jdGlvbiAoKQogICJSZXR1cm4gaW1lbnUgbmFtZSBm b3IgbGluZSBhdCBwb2ludC4KVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgdmFsdWUgZm9yCmBp bWVudS1leHRyYWN0LWluZGV4LW5hbWUtZnVuY3Rpb24nLiAgUG9pbnQgc2hvdWxkIGJlIGF0IHRo ZQpiZWdpbm5pbmcgb2YgdGhlIGxpbmUuIgogIChsZXQgKChwYWNrYWdlLWRlc2MgKHRhYnVsYXRl ZC1saXN0LWdldC1pZCkpKQogICAgKGZvcm1hdCAiJXMgKCVzKTogJXMiCiAgICAgICAgICAgIChw YWNrYWdlLWRlc2MtbmFtZSBwYWNrYWdlLWRlc2MpCiAgICAgICAgICAgIChwYWNrYWdlLXZlcnNp b24tam9pbiAocGFja2FnZS1kZXNjLXZlcnNpb24gcGFja2FnZS1kZXNjKSkKICAgICAgICAgICAg KHBhY2thZ2UtZGVzYy1zdW1tYXJ5IHBhY2thZ2UtZGVzYykpKSkKCihkZWZ1biBwYWNrYWdlLS1x dWVyeS1kZXNjICgmb3B0aW9uYWwgYWxpc3QpCiAgIlF1ZXJ5IHRoZSB1c2VyIGZvciBhIHBhY2th Z2Ugb3IgcmV0dXJuIHRoZSBwYWNrYWdlIGF0IHBvaW50LgpUaGUgb3B0aW9uYWwgYXJndW1lbnQg QUxJU1QgbXVzdCBjb25zaXN0IG9mIGVsZW1lbnRzIHdpdGggdGhlCmZvcm0gKFBLRy1OQU1FIFBL Ry1ERVNDKS4gIElmIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwgZGVmYXVsdCB0bwpgcGFja2FnZS1h bGlzdCcuIgogIChvciAodGFidWxhdGVkLWxpc3QtZ2V0LWlkKQogICAgICAobGV0ICgoYWxpc3Qg KG9yIGFsaXN0IHBhY2thZ2UtYWxpc3QpKSkKICAgICAgICAoY2FkciAoYXNzb2MgKGNvbXBsZXRp bmctcmVhZCAiUGFja2FnZTogIiBhbGlzdCBuaWwgdCkKICAgICAgICAgICAgICAgICAgICAgYWxp c3QgIydzdHJpbmc9KSkpKSkKCihkZWZ1biBwYWNrYWdlLWJyb3dzZS11cmwgKGRlc2MgJm9wdGlv bmFsIHNlY29uZGFyeSkKICAiT3BlbiB0aGUgd2Vic2l0ZSBvZiB0aGUgcGFja2FnZSB1bmRlciBw b2ludCBpbiBhIGJyb3dzZXIuCmBicm93c2UtdXJsJyBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUg YnJvd3NlciB0byBiZSB1c2VkLiAgSWYKU0VDT05EQVJZIChpbnRlcmFjdGl2ZWx5LCB0aGUgcHJl Zml4KSwgdXNlIHRoZSBzZWNvbmRhcnkgYnJvd3Nlci4KREVTQyBtdXN0IGJlIGEgYHBhY2thZ2Ut ZGVzYycgb2JqZWN0LiIKICAoaW50ZXJhY3RpdmUgKGxpc3QgKHBhY2thZ2UtLXF1ZXJ5LWRlc2Mp CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtcHJlZml4LWFyZykKICAgICAgICAgICAgICAg cGFja2FnZS1tZW51LW1vZGUpCiAgKHVubGVzcyBkZXNjCiAgICAodXNlci1lcnJvciAiTm8gcGFj a2FnZSBoZXJlIikpCiAgKGxldCAoKHVybCAoY2RyIChhc3NvYyA6dXJsIChwYWNrYWdlLWRlc2Mt ZXh0cmFzIGRlc2MpKSkpKQogICAgKHVubGVzcyB1cmwKICAgICAgKHVzZXItZXJyb3IgIk5vIHdl YnNpdGUgZm9yICVzIiAocGFja2FnZS1kZXNjLW5hbWUgZGVzYykpKQogICAgKGlmIHNlY29uZGFy eQogICAgICAgIChmdW5jYWxsIGJyb3dzZS11cmwtc2Vjb25kYXJ5LWJyb3dzZXItZnVuY3Rpb24g dXJsKQogICAgICAoYnJvd3NlLXVybCB1cmwpKSkpCgooZGVjbGFyZS1mdW5jdGlvbiBpZXRmLWRy dW1zLXBhcnNlLWFkZHJlc3MgImlldGYtZHJ1bXMiCiAgICAgICAgICAgICAgICAgIChzdHJpbmcg Jm9wdGlvbmFsIGRlY29kZSkpCgooZGVmdW4gcGFja2FnZS1tYWludGFpbmVycyAocGtnLWRlc2Mg Jm9wdGlvbmFsIG5vLWVycm9yKQogICJSZXR1cm4gYW4gZW1haWwgYWRkcmVzcyBmb3IgdGhlIG1h aW50YWluZXJzIG9mIFBLRy1ERVNDLgpUaGUgZW1haWwgYWRkcmVzcyBtYXkgY29udGFpbiBjb21t YXMsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZQptYWludGFpbmVycy4gIElmIG5vIG1haW50YWluZXJz IGFyZSBmb3VuZCwgYW4gZXJyb3Igd2lsbCBiZQpzaWduYWxlZC4gIElmIHRoZSBvcHRpb25hbCBh cmd1bWVudCBOTy1FUlJPUiBpcyBub24tbmlsIG5vIGVycm9yCndpbGwgYmUgc2lnbmFsZWQgaW4g dGhhdCBjYXNlLiIKICAodW5sZXNzIChwYWNrYWdlLWRlc2MtcCBwa2ctZGVzYykKICAgIChlcnJv ciAiSW52YWxpZCBwYWNrYWdlIGRlc2NyaXB0aW9uOiAlUyIgcGtnLWRlc2MpKQogIChsZXQqICgo bmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKQogICAgICAgICAoZXh0cmFzIChwYWNr YWdlLWRlc2MtZXh0cmFzIHBrZy1kZXNjKSkKICAgICAgICAgKG1haW50IChhbGlzdC1nZXQgOm1h aW50YWluZXIgZXh0cmFzKSkpCiAgICAoY29uZAogICAgICgoYW5kIChudWxsIG1haW50KSAobnVs bCBuby1lcnJvcikpCiAgICAgICh1c2VyLWVycm9yICJQYWNrYWdlIGAlcycgaGFzIG5vIGV4cGxp Y2l0IG1haW50YWluZXIiIG5hbWUpKQogICAgICgoYW5kIChub3QgKHByb2duCiAgICAgICAgICAg ICAgICAgIChyZXF1aXJlICdpZXRmLWRydW1zKQogICAgICAgICAgICAgICAgICAoaWV0Zi1kcnVt cy1wYXJzZS1hZGRyZXNzIChjZHIgbWFpbnQpKSkpCiAgICAgICAgICAgKG51bGwgbm8tZXJyb3Ip KQogICAgICAodXNlci1lcnJvciAiUGFja2FnZSBgJXMnIGhhcyBubyBtYWludGFpbmVyIGFkZHJl c3MiIG5hbWUpKQogICAgICgobm90IChudWxsIG1haW50KSkKICAgICAgKHdpdGgtdGVtcC1idWZm ZXIKICAgICAgICAocGFja2FnZS0tcHJpbnQtZW1haWwtYnV0dG9uIG1haW50KQogICAgICAgIChz dHJpbmctdHJpbSAoc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKGJ1ZmZlci1zdHJpbmcpKSkpKSkp KQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHBhY2thZ2UtcmVwb3J0LWJ1ZyAoZGVzYykKICAiUHJl cGFyZSBhIG1lc3NhZ2UgdG8gc2VuZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgYSBwYWNrYWdlLgpE RVNDIG11c3QgYmUgYSBgcGFja2FnZS1kZXNjJyBvYmplY3QuIgogIChpbnRlcmFjdGl2ZSAobGlz dCAocGFja2FnZS0tcXVlcnktZGVzYyBwYWNrYWdlLWFsaXN0KSkKICAgICAgICAgICAgICAgcGFj a2FnZS1tZW51LW1vZGUpCiAgKGxldCAoKG1haW50IChwYWNrYWdlLW1haW50YWluZXJzIGRlc2Mp KQogICAgICAgIChuYW1lIChzeW1ib2wtbmFtZSAocGFja2FnZS1kZXNjLW5hbWUgZGVzYykpKQog ICAgICAgIHZhcnMpCiAgICAoZG9saXN0LXdpdGgtcHJvZ3Jlc3MtcmVwb3J0ZXIgKGdyb3VwIGN1 c3RvbS1jdXJyZW50LWdyb3VwLWFsaXN0KQogICAgICAgICJTY2FubmluZyBmb3IgbW9kaWZpZWQg dXNlciBvcHRpb25zLi4uIgogICAgICAoZG9saXN0IChlbnQgKGdldCAoY2RyIGdyb3VwKSAnY3Vz dG9tLWdyb3VwKSkKICAgICAgICAod2hlbiAoYW5kIChjdXN0b20tdmFyaWFibGUtcCAoY2FyIGVu dCkpCiAgICAgICAgICAgICAgICAgICAoYm91bmRwIChjYXIgZW50KSkKICAgICAgICAgICAgICAg ICAgIChub3QgKGVxCiAgICAgICAgICAgICAgICAgICAgICAgICA7OyBXZSBhcmUgbm90IHVzaW5n IGBjdXN0b20tLXN0YW5kYXJkLXZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgOzsgdG8g cmV0YWluIGNvbXBhdGliaWxpdHkgZm9yIEVtYWNzIDI3LgogICAgICAgICAgICAgICAgICAgICAg ICAgKGV2YWwgKGNhciAoZ2V0IChjYXIgZW50KSAnc3RhbmRhcmQtdmFsdWUpKSB0KQogICAgICAg ICAgICAgICAgICAgICAgICAgKGRlZmF1bHQtdG9wbGV2ZWwtdmFsdWUgKGNhciBlbnQpKSkpCiAg ICAgICAgICAgICAgICAgICAoZmlsZS1pbi1kaXJlY3RvcnktcCAoY2FyIGdyb3VwKSAocGFja2Fn ZS1kZXNjLWRpciBkZXNjKSkpCiAgICAgICAgICAocHVzaCAoY2FyIGVudCkgdmFycykpKSkKICAg IChkbGV0ICgocmVwb3J0ZXItcHJvbXB0LWZvci1zdW1tYXJ5LXAgdCkpCiAgICAgIChyZXBvcnRl ci1zdWJtaXQtYnVnLXJlcG9ydCBtYWludCBuYW1lIHZhcnMpKSkpCgo7Ozs7IEludHJvc3BlY3Rp b24KCihkZWZ1biBwYWNrYWdlLWdldC1kZXNjcmlwdG9yIChwa2ctbmFtZSkKICAiUmV0dXJuIHRo ZSBgcGFja2FnZS1kZXNjJyBvZiBQS0ctTkFNRS4iCiAgKHVubGVzcyBwYWNrYWdlLS1pbml0aWFs aXplZCAocGFja2FnZS1pbml0aWFsaXplICduby1hY3RpdmF0ZSkpCiAgKG9yIChwYWNrYWdlLS1n ZXQtYWN0aXZhdGFibGUtcGtnIHBrZy1uYW1lKQogICAgICAoY2FkciAoYXNzcSBwa2ctbmFtZSBw YWNrYWdlLWFsaXN0KSkKICAgICAgKGNhZHIgKGFzc3EgcGtnLW5hbWUgcGFja2FnZS1hcmNoaXZl LWNvbnRlbnRzKSkpKQoKKHByb3ZpZGUgJ3BhY2thZ2UpCgo7OzsgcGFja2FnZS5lbCBlbmRzIGhl cmUKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= --=-=-= Content-Type: application/x-tar Content-Disposition: attachment; filename=package-vc.tar Content-Transfer-Encoding: base64 cGFja2FnZS12Yy0wLjEuMC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUAMDAwMTc1 MAAwMDAxNzUwADAwMDAwMDAwMDAwADE0NDY3NzMyNzI1ADAxMzA2NgAgNQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBoaWxpcAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAcGhpbGlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw YWNrYWdlLXZjLTAuMS4wL3BhY2thZ2UtdmMtcGtnLmVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAxNzUw ADAwMDE3NTAAMDAwMDAwMDA2NTYAMTQ0Njc3MzI3MjUAMDE2MTc3ACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcGhpbGlwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABwaGlsaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs7 IEdlbmVyYXRlZCBwYWNrYWdlIGRlc2NyaXB0aW9uIGZyb20gcGFja2FnZS12Yy5lbCAgLSotIG5v LWJ5dGUtY29tcGlsZTogdCAtKi0KKGRlZmluZS1wYWNrYWdlICJwYWNrYWdlLXZjIiAiMC4xLjAi ICJNYW5hZ2UgcGFja2FnZXMgZnJvbSBWQyBjaGVja291dHMiICcoKGVtYWNzICIyOS4xIikgKHBh Y2thZ2UgIjEuMS4xIikpIDpjb21taXQgImI2YjBhMTRlODY3NTIwNzEyODllNmFhMGUyYTQxYzU5 YTE1YmZkNDkiIDp1cmwgImh0dHBzOi8vZWxwYS5nbnUub3JnL3BhY2thZ2VzL3BhY2thZ2UtdmMu aHRtbCIgOmF1dGhvcnMgJygoIlBoaWxpcCBLYWx1ZGVyY2ljIiAuICJwaGlsaXBrQHBvc3Rlby5u ZXQiKSkgOm1haW50YWluZXIgJygiUGhpbGlwIEthbHVkZXJjaWMiIC4gInBoaWxpcGtAcG9zdGVv Lm5ldCIpIDprZXl3b3JkcyAnKCJ0b29scyIpKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGFj a2FnZS12Yy0wLjEuMC9wYWNrYWdlLXZjLmVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAwMTc1MAAw MDAxNzUwADAwMDAwMTI0MTMwADE0NDY3NjQwMjM1ADAxNTQwNAAgMAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBoaWxpcAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAcGhpbGlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7Ozsg cGFja2FnZS12Yy5lbCAtLS0gTWFuYWdlIHBhY2thZ2VzIGZyb20gVkMgY2hlY2tvdXRzICAgICAt Ki0gbGV4aWNhbC1iaW5kaW5nOiB0OyAtKi0KCjs7IENvcHlyaWdodCAoQykgMjAyMi0yMDIzIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgoKOzsgQXV0aG9yOiBQaGlsaXAgS2FsdWRlcmNp YyA8cGhpbGlwa0Bwb3N0ZW8ubmV0Pgo7OyBLZXl3b3JkczogdG9vbHMKOzsgVmVyc2lvbjogMC4x LjAKOzsgUGFja2FnZS1SZXF1aXJlczogKChlbWFjcyAiMjkuMSIpIChwYWNrYWdlICIxLjEuMSIp KQoKOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgoKOzsgR05VIEVtYWNzIGlzIGZy ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKOzsgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KCjs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAo7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgo7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCjs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCgo7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBhbG9uZyB3aXRoIEdOVSBFbWFjcy4g IElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgo7OzsgQ29tbWVu dGFyeToKCjs7IFdoaWxlIHBhY2thZ2VzIG1hbmFnZWQgYnkgcGFja2FnZS5lbCB1c2UgdGFyYmFs bHMgZm9yIGRpc3RyaWJ1dGluZwo7OyB0aGUgc291cmNlIGNvZGUsIHRoaXMgZXh0ZW5zaW9uIGFs bG93cyBmb3IgcGFja2FnZXMgdG8gYmUgZmV0Y2hlZAo7OyBhbmQgdXBncmFkZWQgZGlyZWN0bHkg ZnJvbSBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0uCjs7Cjs7IFRvIGluc3RhbGwgYSBwYWNrYWdl IGZyb20gc291cmNlIHVzZSBgcGFja2FnZS12Yy1pbnN0YWxsJy4gIElmIHlvdQo7OyBhcmVuJ3Qg aW50ZXJlc3RlZCBpbiBhY3RpdmF0aW5nIGEgcGFja2FnZSwgeW91IGNhbiB1c2UKOzsgYHBhY2th Z2UtdmMtY2hlY2tvdXQnIGluc3RlYWQsIHdoaWNoIHdpbGwgcHJvbXB0IHlvdSBmb3IgYSB0YXJn ZXQKOzsgZGlyZWN0b3J5LiAgSWYgeW91IHdpc2ggdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGNoZWNr b3V0LCB0aGUgY29tbWFuZAo7OyBgcGFja2FnZS12Yy1pbnN0YWxsLWZyb20tY2hlY2tvdXQnIHdp bGwgY3JlYXRlIGEgc3ltYm9saWMgbGluayBhbmQKOzsgcHJlcGFyZSB0aGUgcGFja2FnZS4KOzsK OzsgSWYgeW91IG1ha2UgbG9jYWwgY2hhbmdlcyB0aGF0IHlvdSB3aXNoIHRvIHNoYXJlIHdpdGgg YW4gdXBzdHJlYW0KOzsgbWFpbnRhaW5lciwgdGhlIGNvbW1hbmQgYHBhY2thZ2UtdmMtcHJlcGFy ZS1wYXRjaCcgY2FuIHByZXBhcmUKOzsgdGhlc2UgYXMgcGF0Y2hlcyB0byBzZW5kIHZpYSBFbWFp bC4KCjs7OyBUT0RPOgoKOzsgLSBBbGxvdyBtYWludGFpbmluZyBwYXRjaGVzIHRoYXQgYXJlIHBv cnRlZCBiYWNrIG9udG8gcmVndWxhcgo7OyAgIHBhY2thZ2VzIGFuZCBtYWludGFpbmVkIGJldHdl ZW4gdmVyc2lvbnMuCgo7OzsgQ29kZToKCihldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAncngp KQooZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ21hcCkpCihldmFsLXdoZW4tY29tcGlsZSAo cmVxdWlyZSAnY2wtbGliKSkKKHJlcXVpcmUgJ3BhY2thZ2UpCihyZXF1aXJlICdsaXNwLW1udCkK KHJlcXVpcmUgJ3ZjKQoocmVxdWlyZSAnc2VxKQoKKGRlZmdyb3VwIHBhY2thZ2UtdmMgbmlsCiAg Ik1hbmFnZSBwYWNrYWdlcyBmcm9tIFZDIGNoZWNrb3V0cy4iCiAgOmdyb3VwICdwYWNrYWdlCiAg OmxpbmsgJyhjdXN0b20tbWFudWFsICIoZW1hY3MpIEZldGNoaW5nIFBhY2thZ2UgU291cmNlcyIp CiAgOnByZWZpeCAicGFja2FnZS12Yy0iCiAgOnZlcnNpb24gIjI5LjEiKQoKKGRlZmNvbnN0IHBh Y2thZ2UtdmMtLWVscGEtcGFja2FnZXMtdmVyc2lvbiAxCiAgIlZlcnNpb24gbnVtYmVyIG9mIHRo ZSBwYWNrYWdlIHNwZWNpZmljYXRpb24gZm9ybWF0IHVuZGVyc3Rvb2QgYnkgcGFja2FnZS12Yy4i KQoKKGRlZmN1c3RvbSBwYWNrYWdlLXZjLWhldXJpc3RpYy1hbGlzdAogIGAoKCwocnggYm9zICJo dHRwIiAoPyAicyIpICI6Ly8iCiAgICAgICAgICAob3IgKDogKD8gInd3dy4iKSAiZ2l0aHViLmNv bSIKICAgICAgICAgICAgICAgICAiLyIgKCsgKG9yIGFsbnVtICItIiAiLiIgIl8iKSkKICAgICAg ICAgICAgICAgICAiLyIgKCsgKG9yIGFsbnVtICItIiAiLiIgIl8iKSkpCiAgICAgICAgICAgICAg KDogImNvZGViZXJnLm9yZyIKICAgICAgICAgICAgICAgICAiLyIgKCsgKG9yIGFsbnVtICItIiAi LiIgIl8iKSkKICAgICAgICAgICAgICAgICAiLyIgKCsgKG9yIGFsbnVtICItIiAiLiIgIl8iKSkp CiAgICAgICAgICAgICAgKDogKD8gInd3dy4iKSAiZ2l0bGFiIiAoKyAiLiIgKCsgYWxudW0pKQog ICAgICAgICAgICAgICAgICIvIiAoKyAob3IgYWxudW0gIi0iICIuIiAiXyIpKQogICAgICAgICAg ICAgICAgICIvIiAoKyAob3IgYWxudW0gIi0iICIuIiAiXyIpKSkKICAgICAgICAgICAgICAoOiAi Z2l0LnNyLmh0IgogICAgICAgICAgICAgICAgICIvfiIgKCsgKG9yIGFsbnVtICItIiAiLiIgIl8i KSkKICAgICAgICAgICAgICAgICAiLyIgKCsgKG9yIGFsbnVtICItIiAiLiIgIl8iKSkpCiAgICAg ICAgICAgICAgKDogImdpdC4iIChvciAic2F2YW5uYWgiICJzdiIpICIuIiAoPyAibm9uIikgImdu dS5vcmcvIgogICAgICAgICAgICAgICAgIChvciAiciIgImdpdCIpICIvIgogICAgICAgICAgICAg ICAgICgrIChvciBhbG51bSAiLSIgIi4iICJfIikpICg/ICIvIikpKQogICAgICAgICAgKG9yICg/ ICIvIikgIi5naXQiKSBlb3MpCiAgICAgLiBHaXQpCiAgICAoLChyeCBib3MgImh0dHAiICg/ICJz IikgIjovLyIKICAgICAgICAgIChvciAoOiAiaGcuc3IuaHQiCiAgICAgICAgICAgICAgICAgIi9+ IiAoKyAob3IgYWxudW0gIi0iICIuIiAiXyIpKQogICAgICAgICAgICAgICAgICIvIiAoKyAob3Ig YWxudW0gIi0iICIuIiAiXyIpKSkKICAgICAgICAgICAgICAoOiAiaGcuIiAob3IgInNhdmFubmFo IiAic3YiKSAiLiIgKD8gIm5vbiIpICJnbnUub3JnL2hnd2ViLyIKICAgICAgICAgICAgICAgICAo KyAob3IgYWxudW0gIi0iICIuIiAiXyIpKSAoPyAiLyIpKSkKICAgICAgICAgIGVvcykKICAgICAu IEhnKQogICAgKCwocnggYm9zICJodHRwIiAoPyAicyIpICI6Ly8iCiAgICAgICAgICAob3IgKDog ImJ6ci4iIChvciAic2F2YW5uYWgiICJzdiIpICIuIiAoPyAibm9uIikgImdudS5vcmcvci8iCiAg ICAgICAgICAgICAgICAgKCsgKG9yIGFsbnVtICItIiAiLiIgIl8iKSkgKD8gIi8iKSkpCiAgICAg ICAgICBlb3MpCiAgICAgLiBCenIpKQogICJIZXVyaXN0aWMgbWFwcGluZyBVUkwgcmVndWxhciBl eHByZXNzaW9ucyB0byBWQyBiYWNrZW5kcy4iCiAgOnR5cGUgYChhbGlzdCA6a2V5LXR5cGUgKHJl Z2V4cCA6dGFnICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgVVJMcyIpCiAgICAgICAgICAg ICAgICA6dmFsdWUtdHlwZSAoY2hvaWNlIDp0YWcgIlZDIEJhY2tlbmQiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICxAKG1hcGNhciAobGFtYmRhIChiKSBgKGNvbnN0ICxiKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjLWhhbmRsZWQt YmFja2VuZHMpKSkKICA6dmVyc2lvbiAiMjkuMSIpCgooZGVmY3VzdG9tIHBhY2thZ2UtdmMtZGVm YXVsdC1iYWNrZW5kICdHaXQKICAiRGVmYXVsdCBWQyBiYWNrZW5kIHVzZWQgd2hlbiBjbG9uaW5n IGEgcGFja2FnZSByZXBvc2l0b3J5LgpJZiBubyByZXBvc2l0b3J5IHR5cGUgd2FzIHNwZWNpZmll ZCBvciBjb3VsZCBiZSBndWVzc2VkIGJ5CmBwYWNrYWdlLXZjLWhldXJpc3RpYy1hbGlzdCcsIHRo aXMgaXMgdGhlIGRlZmF1bHQgVkMgYmFja2VuZAp1c2VkIGFzIGZhbGxiYWNrLiAgVGhlIHZhbHVl IG11c3QgYmUgYSBtZW1iZXIgb2YKYHZjLWhhbmRsZWQtYmFja2VuZHMnIGFuZCB0aGUgbmFtZWQg YmFja2VuZCBtdXN0IGltcGxlbWVudAp0aGUgYGNsb25lJyBmdW5jdGlvbi4iCiAgOnR5cGUgYChj aG9pY2UgLEAobWFwY2FyIChsYW1iZGEgKGIpIChsaXN0ICdjb25zdCBiKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmMtaGFuZGxlZC1iYWNrZW5kcykpCiAgOnZlcnNpb24gIjI5LjEiKQoK KGRlZmN1c3RvbSBwYWNrYWdlLXZjLXJlZ2lzdGVyLWFzLXByb2plY3QgdAogICJOb24tbmlsIG1l YW5zIHRoYXQgcGFja2FnZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgYXMgcHJvamVjdHMuIgogIDp0 eXBlICdib29sZWFuCiAgOnZlcnNpb24gIjMwLjEiKQoKKGRlZnZhciBwYWNrYWdlLXZjLXNlbGVj dGVkLXBhY2thZ2VzKSA7IHBhY2lmeSBieXRlLWNvbXBpbGVyCgo7OzsjIyNhdXRvbG9hZAooZGVm dW4gcGFja2FnZS12Yy1pbnN0YWxsLXNlbGVjdGVkLXBhY2thZ2VzICgpCiAgIkVuc3VyZSBwYWNr YWdlcyBzcGVjaWZpZWQgaW4gYHBhY2thZ2UtdmMtc2VsZWN0ZWQtcGFja2FnZXMnIGFyZSBpbnN0 YWxsZWQuIgogIChpbnRlcmFjdGl2ZSkKICAocGNhc2UtZG9saXN0IChgKCxuYW1lIC4gLHNwZWMp IHBhY2thZ2UtdmMtc2VsZWN0ZWQtcGFja2FnZXMpCiAgICAod2hlbiAoc3RyaW5ncCBuYW1lKQog ICAgICAoc2V0cSBuYW1lIChpbnRlcm4gbmFtZSkpKQogICAgKGxldCAoKHBrZy1kZXNjcyAoYXNz b2MgbmFtZSBwYWNrYWdlLWFsaXN0ICMnc3RyaW5nPSkpKQogICAgICAodW5sZXNzIChzZXEtc29t ZSAjJ3BhY2thZ2UtdmMtcCAoY2RyIHBrZy1kZXNjcykpCiAgICAgICAgKGNvbmQKICAgICAgICAg KChudWxsIHNwZWMpCiAgICAgICAgICAocGFja2FnZS12Yy1pbnN0YWxsIG5hbWUpKQogICAgICAg ICAoKHN0cmluZ3Agc3BlYykKICAgICAgICAgIChwYWNrYWdlLXZjLWluc3RhbGwgbmFtZSBzcGVj KSkKICAgICAgICAgKChsaXN0cCBzcGVjKQogICAgICAgICAgKHBhY2thZ2UtdmMtLWFyY2hpdmVz LWluaXRpYWxpemUpCiAgICAgICAgICAocGFja2FnZS12Yy0tdW5wYWNrCiAgICAgICAgICAgKG9y IChjYWRyIChhc3NvYyBuYW1lIHBhY2thZ2UtYXJjaGl2ZS1jb250ZW50cykpCiAgICAgICAgICAg ICAgIChwYWNrYWdlLWRlc2MtY3JlYXRlIDpuYW1lIG5hbWUgOmtpbmQgJ3ZjKSkKICAgICAgICAg ICBzcGVjKSkpKSkpKQoKKGRlZmN1c3RvbSBwYWNrYWdlLXZjLXNlbGVjdGVkLXBhY2thZ2VzICco KQogICJMaXN0IG9mIHBhY2thZ2VzIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQuCkVhY2ggbWVtYmVy IG9mIHRoZSBsaXN0IGlzIG9mIHRoZSBmb3JtIChOQU1FIC4gU1BFQyksIHdoZXJlIE5BTUUKaXMg YSBzeW1ib2wgZGVzaWduYXRpbmcgdGhlIHBhY2thZ2UgYW5kIFNQRUMgaXMgb25lIG9mOgoKLSBu aWwsIGlmIGFueSBwYWNrYWdlIHZlcnNpb24gY2FuIGJlIGluc3RhbGxlZDsKLSBhIHZlcnNpb24g c3RyaW5nLCBpZiB0aGF0IHNwZWNpZmljIHJldmlzaW9uIGlzIHRvIGJlIGluc3RhbGxlZDsKLSBh IHByb3BlcnR5IGxpc3QsIGRlc2NyaWJpbmcgYSBwYWNrYWdlIHNwZWNpZmljYXRpb24uICBGb3Ig bW9yZQogIGRldGFpbHMsIHBsZWFzZSBjb25zdWx0IHRoZSBzdWJzZWN0aW9uIFwiU3BlY2lmeWlu ZyBQYWNrYWdlCiAgU291cmNlc1wiIGluIHRoZSBJbmZvIG5vZGUgYChlbWFjcylGZXRjaGluZyBQ YWNrYWdlIFNvdXJjZXMnLgoKVGhpcyB1c2VyIG9wdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkg dXBkYXRlZCB0byBzdG9yZSBwYWNrYWdlCnNwZWNpZmljYXRpb25zIGZvciBwYWNrYWdlcyB0aGF0 IGFyZSBub3Qgc3BlY2lmaWVkIGluIGFueQphcmNoaXZlLiIKICA6dHlwZSAnKGFsaXN0IDp0YWcg Ikxpc3Qgb2YgcGFja2FnZXMgeW91IHdhbnQgdG8gYmUgaW5zdGFsbGVkIgogICAgICAgICAgICAg ICAgOmtleS10eXBlIChzeW1ib2wgOnRhZyAiUGFja2FnZSIpCiAgICAgICAgICAgICAgICA6dmFs dWUtdHlwZQogICAgICAgICAgICAgICAgKGNob2ljZSAoY29uc3QgOnRhZyAiQW55IHJldmlzaW9u IiBuaWwpCiAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcgOnRhZyAiU3BlY2lmaWMgcmV2 aXNpb24iKQogICAgICAgICAgICAgICAgICAgICAgICAocGxpc3QgOm9wdGlvbnMgKCg6dXJsIHN0 cmluZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOmJyYW5jaCBz dHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDpsaXNwLWRp ciBzdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDptYWlu LWZpbGUgc3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg6 ZG9jIHN0cmluZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOnZj LWJhY2tlbmQgc3ltYm9sKSkpKSkKICA6dmVyc2lvbiAiMjkuMSIpCgooZGVmdmFyIHBhY2thZ2Ut dmMtLWFyY2hpdmUtc3BlYy1hbGlzdHMgbmlsCiAgIkxpc3Qgb2YgcGFja2FnZSBzcGVjaWZpY2F0 aW9ucyBmb3IgZWFjaCBhcmNoaXZlLgpUaGUgbGlzdCBtYXBzIGVhY2ggcGFja2FnZSBuYW1lLCBh cyBhIHN0cmluZywgdG8gYSBwbGlzdCBhcwpzcGVjaWZpZWQgaW4gYHBhY2thZ2UtdmMtc2VsZWN0 ZWQtcGFja2FnZXMnLiIpCgooZGVmdmFyIHBhY2thZ2UtdmMtLWFyY2hpdmUtZGF0YS1hbGlzdCBu aWwKICAiTGlzdCBvZiBwYWNrYWdlIHNwZWNpZmljYXRpb24gbWV0YWRhdGEgZm9yIGFyY2hpdmVz LgpFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QgaGFzIHRoZSBmb3JtIChBUkNISVZFIC4gUExJU1Qp LCB3aGVyZQpQTElTVCBrZXlzIGFyZSBvbmUgb2Y6CgogYDp2ZXJzaW9uJyAoaW50ZWdlcikKICAg SW5kaWNhdGVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGZvcm1hdHRpbmcsIHRvIGJlIGNvbXBh cmVkCiAgIHdpdGggYHBhY2thZ2UtdmMtLWVscGEtcGFja2FnZXMtdmVyc2lvbicuCgogYDp2Yy1i YWNrZW5kJyAoc3ltYm9sKQogICBBIHN5bWJvbCBvZiB0aGUgZGVmYXVsdCBWQyBiYWNrZW5kIHRv IHVzZSBpZiBhIHBhY2thZ2Ugc3BlY2lmaWNhdGlvbgogICBkb2VzIG5vdCBpbmRpY2F0ZSBhIGJh Y2tlbmQuICBUaGUgdmFsdWUgb3VnaHQgdG8gYmUgYSBtZW1iZXIgb2YKICAgYHZjLWhhbmRsZWQt YmFja2VuZHMnLiAgSWYgb21pdHRlZCwgYHZjLWNsb25lJyB3aWxsIGZhbGwgYmFjayBvbgogICBg cGFja2FnZS12Yy1kZWZhdWx0LWJhY2tlbmQnLgoKQWxsIG90aGVyIHZhbHVlcyBhcmUgaWdub3Jl ZC4iKQoKKGRlZnVuIHBhY2thZ2UtdmMtLWRlc2MtPnNwZWMgKHBrZy1kZXNjICZvcHRpb25hbCBu YW1lKQogICJSZXRyaWV2ZSB0aGUgcGFja2FnZSBzcGVjaWZpY2F0aW9uIGZvciBQS0ctREVTQy4K VGhlIG9wdGlvbmFsIGFyZ3VtZW50IE5BTUUgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRl ZmF1bHQKbmFtZSBmb3IgUEtHLURFU0MuIgogIChhbGlzdC1nZXQKICAgKHNldHEgbmFtZSAob3Ig bmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKSkKICAgKGlmIChhbmQgKHBhY2thZ2Ut ZGVzYy1hcmNoaXZlIHBrZy1kZXNjKQogICAgICAgICAgICAobm90IChhbGlzdC1nZXQgbmFtZSBw YWNrYWdlLXZjLXNlbGVjdGVkLXBhY2thZ2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu aWwgbmlsICMnc3RyaW5nPSkpKQogICAgICAgKGFsaXN0LWdldCAoaW50ZXJuIChwYWNrYWdlLWRl c2MtYXJjaGl2ZSBwa2ctZGVzYykpCiAgICAgICAgICAgICAgICAgIHBhY2thZ2UtdmMtLWFyY2hp dmUtc3BlYy1hbGlzdHMpCiAgICAgOzsgQ29uc3VsdCBib3RoIG91ciBsb2NhbCBsaXN0IG9mIHBh Y2thZ2Ugc3BlY2lmaWNhdGlvbnMsIGFzIHdlbGwKICAgICA7OyBhcyB0aGUgbGlzdHMgcHJvdmlk ZWQgYnkgdGhlIGFyY2hpdmVzLgogICAgIChhcHBseSAjJ2FwcGVuZCAoY29ucyBwYWNrYWdlLXZj LXNlbGVjdGVkLXBhY2thZ2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXBjYXIgIydj ZHIgcGFja2FnZS12Yy0tYXJjaGl2ZS1zcGVjLWFsaXN0cykpKSkKICAgJygpIG5pbCAjJ3N0cmlu Zz0pKQoKKGRlZnVuIHBhY2thZ2UtdmMtLXJlYWQtYXJjaGl2ZS1kYXRhIChhcmNoaXZlKQogICJV cGRhdGUgYHBhY2thZ2UtdmMtLWFyY2hpdmUtc3BlYy1hbGlzdHMnIGZvciBBUkNISVZFLgpUaGlz IGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgYSBob29rIGZvciBgcGFja2FnZS1yZWFk LWFyY2hpdmUtaG9vaycuIgogIChsZXQgKChjb250ZW50cy1maWxlIChleHBhbmQtZmlsZS1uYW1l CiAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgImFyY2hpdmVzLyVzL2VscGEtcGFja2Fn ZXMuZWxkIiBhcmNoaXZlKQogICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLXVzZXItZGly KSkpCiAgICAod2hlbiAoZmlsZS1leGlzdHMtcCBjb250ZW50cy1maWxlKQogICAgICAod2l0aC10 ZW1wLWJ1ZmZlcgogICAgICAgIChsZXQgKChjb2Rpbmctc3lzdGVtLWZvci1yZWFkICd1dGYtOCkp CiAgICAgICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgY29udGVudHMtZmlsZSkKICAgICAgICAg IDs7IFRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUg Zm9ybQogICAgICAgICAgOzsKICAgICAgICAgIDs7ICAgICgoKCJmb28iIDp1cmwgIi4uLiIgLi4u KSAuLi4pCiAgICAgICAgICA7OyAgICAgOnZlcnNpb24gMQogICAgICAgICAgOzsgICAgIDpkZWZh dWx0LXZjIEdpdCkKICAgICAgICAgIChsZXQgKChzcGVjIChyZWFkIChjdXJyZW50LWJ1ZmZlcikp KSkKICAgICAgICAgICAgKHdoZW4gKGVxIHBhY2thZ2UtdmMtLWVscGEtcGFja2FnZXMtdmVyc2lv bgogICAgICAgICAgICAgICAgICAgICAgKHBsaXN0LWdldCAoY2RyIHNwZWMpIDp2ZXJzaW9uKSkK ICAgICAgICAgICAgICAoc2V0ZiAoYWxpc3QtZ2V0IChpbnRlcm4gYXJjaGl2ZSkgcGFja2FnZS12 Yy0tYXJjaGl2ZS1zcGVjLWFsaXN0cykKICAgICAgICAgICAgICAgICAgICAoY2FyIHNwZWMpKSkK ICAgICAgICAgICAgKHNldGYgKGFsaXN0LWdldCAoaW50ZXJuIGFyY2hpdmUpIHBhY2thZ2UtdmMt LWFyY2hpdmUtZGF0YS1hbGlzdCkKICAgICAgICAgICAgICAgICAgKGNkciBzcGVjKSkKICAgICAg ICAgICAgKHdoZW4tbGV0ICgoZGVmYXVsdC12YyAocGxpc3QtZ2V0IChjZHIgc3BlYykgOmRlZmF1 bHQtdmMpKQogICAgICAgICAgICAgICAgICAgICAgICgobm90IChtZW1xIGRlZmF1bHQtdmMgdmMt aGFuZGxlZC1iYWNrZW5kcykpKSkKICAgICAgICAgICAgICAod2FybiAiQXJjaGl2ZSBgJVMnIGV4 cGVjdHMgbWlzc2luZyBWQyBiYWNrZW5kICVTIgogICAgICAgICAgICAgICAgICAgIGFyY2hpdmUg KHBsaXN0LWdldCAoY2RyIHNwZWMpIDpkZWZhdWx0LXZjKSkpKSkpKSkpCgooZGVmdW4gcGFja2Fn ZS12Yy0tZG93bmxvYWQtYW5kLXJlYWQtYXJjaGl2ZXMgKCZvcHRpb25hbCBhc3luYykKICAiRG93 bmxvYWQgc3BlY2lmaWNhdGlvbnMgb2YgYWxsIGBwYWNrYWdlLWFyY2hpdmVzJyBhbmQgcmVhZCB0 aGVtLgpQb3B1bGF0ZSBgcGFja2FnZS12Yy0tYXJjaGl2ZS1zcGVjLWFsaXN0cycgd2l0aCB0aGUg cmVzdWx0LgoKSWYgb3B0aW9uYWwgYXJndW1lbnQgQVNZTkMgaXMgbm9uLW5pbCwgcGVyZm9ybSB0 aGUgZG93bmxvYWRzCmFzeW5jaHJvbm91c2x5LiIKICAoZG9saXN0IChhcmNoaXZlIHBhY2thZ2Ut YXJjaGl2ZXMpCiAgICAoY29uZGl0aW9uLWNhc2UgZXJyCiAgICAgICAgKHBhY2thZ2UtLWRvd25s b2FkLW9uZS1hcmNoaXZlIGFyY2hpdmUgImVscGEtcGFja2FnZXMuZWxkIiBhc3luYykKICAgICAg KGVycm9yIChtZXNzYWdlICJGYWlsZWQgdG8gZG93bmxvYWQgYCVzJyBhcmNoaXZlOiAlUyIgKGNh ciBhcmNoaXZlKSBlcnIpKSkpKQoKKGFkZC1ob29rICdwYWNrYWdlLXJlYWQtYXJjaGl2ZS1ob29r ICAgICAjJ3BhY2thZ2UtdmMtLXJlYWQtYXJjaGl2ZS1kYXRhIDIwKQoKKGRlZnVuIHBhY2thZ2Ut dmMtY29tbWl0IChwa2cpCiAgIlJldHVybiB0aGUgbGFzdCBjb21taXQgb2YgYSBkZXZlbG9wbWVu dCBwYWNrYWdlIFBLRy4iCiAgKGNsLWFzc2VydCAocGFja2FnZS12Yy1wIHBrZykpCiAgOzsgRklY TUU6IHZjIHNob3VsZCBiZSBleHRlbmRlZCB0byBhbGxvdyBxdWVyeWluZyB0aGUgY29tbWl0IG9m IGEKICA7OyBkaXJlY3RvcnkgKGFzIGlzIHBvc3NpYmxlIHdoZW4gZGVhbGluZyB3aXRoIGdpdCBy ZXBvc2l0b3JpZXMpLgogIDs7IFRoaXMgc2hvdWxkIGJlIGEgZmFsbGJhY2sgb3B0aW9uLgogIChj bC1sb29wIHdpdGggZGlyID0gKHBhY2thZ2UtZGVzYy1kaXIgcGtnKQogICAgICAgICAgIGZvciBm aWxlIGluIChkaXJlY3RvcnktZmlsZXMgZGlyIHQgIlxcLmVsXFwnIiB0KQogICAgICAgICAgIHdo ZW4gKHZjLXdvcmtpbmctcmV2aXNpb24gZmlsZSkgcmV0dXJuIGl0CiAgICAgICAgICAgZmluYWxs eSByZXR1cm4gInVua25vd24iKSkKCihkZWZ1biBwYWNrYWdlLXZjLS12ZXJzaW9uIChwa2cpCiAg IlJldHVybiB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBWQyBwYWNrYWdlIFBLRy4iCiAgKGNs LWFzc2VydCAocGFja2FnZS12Yy1wIHBrZykpCiAgKGlmLWxldCAoKG1haW4tZmlsZSAocGFja2Fn ZS12Yy0tbWFpbi1maWxlIHBrZykpKQogICAgICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgICAgIChp bnNlcnQtZmlsZS1jb250ZW50cyBtYWluLWZpbGUpCiAgICAgICAgKHBhY2thZ2Utc3RyaXAtcmNz LWlkCiAgICAgICAgIChvciAobG0taGVhZGVyICJwYWNrYWdlLXZlcnNpb24iKQogICAgICAgICAg ICAgKGxtLWhlYWRlciAidmVyc2lvbiIpCiAgICAgICAgICAgICAiMCIpKSkKICAgICIwIikpCgoo ZGVmdW4gcGFja2FnZS12Yy0tbWFpbi1maWxlIChwa2ctZGVzYykKICAiUmV0dXJuIHRoZSBuYW1l IG9mIHRoZSBtYWluIGZpbGUgZm9yIFBLRy1ERVNDLiIKICAoY2wtYXNzZXJ0IChwYWNrYWdlLXZj LXAgcGtnLWRlc2MpKQogIChsZXQqICgocGtnLXNwZWMgKHBhY2thZ2UtdmMtLWRlc2MtPnNwZWMg cGtnLWRlc2MpKQogICAgICAgICAobmFtZSAoc3ltYm9sLW5hbWUgKHBhY2thZ2UtZGVzYy1uYW1l IHBrZy1kZXNjKSkpCiAgICAgICAgIChkaXJlY3RvcnkgKGZpbGUtbmFtZS1jb25jYXQKICAgICAg ICAgICAgICAgICAgICAgKG9yIChwYWNrYWdlLWRlc2MtZGlyIHBrZy1kZXNjKQogICAgICAgICAg ICAgICAgICAgICAgICAgKGV4cGFuZC1maWxlLW5hbWUgbmFtZSBwYWNrYWdlLXVzZXItZGlyKSkK ICAgICAgICAgICAgICAgICAgICAgKHBsaXN0LWdldCBwa2ctc3BlYyA6bGlzcC1kaXIpKSkKICAg ICAgICAgKGZpbGUgKGV4cGFuZC1maWxlLW5hbWUKICAgICAgICAgICAgICAgIChvciAocGxpc3Qt Z2V0IHBrZy1zcGVjIDptYWluLWZpbGUpCiAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCBuYW1l ICIuZWwiKSkKICAgICAgICAgICAgICAgIGRpcmVjdG9yeSkpKQogICAgKGlmIChmaWxlLWV4aXN0 cy1wIGZpbGUpIGZpbGUKICAgICAgOzsgVGhlIGZvbGxvd2luZyBoZXVyaXN0aWMgaXMgb25seSBu ZWNlc3Nhcnkgd2hlbiBmZXRjaGluZyBhCiAgICAgIDs7IHJlcG9zaXRvcnkgd2l0aCBVUkwgdGhh dCB3b3VsZCBicmVhayB0aGUgYWJvdmUgYXNzdW1wdGlvbnMuCiAgICAgIDs7IENvbmNyZXRlIGV4 YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYWNoYWMvd2F2ZWZvcm0tZWwgZG9lcwogICAgICA7 OyBub3QgaGF2ZSBhIGZpbGUgd2F2ZWZvcm0tZWwuZWwsIGJ1dCBhIGZpbGUgd2F2ZWZvcm0uZWws IHNvIHdlCiAgICAgIDs7IHRyeSBhbmQgZmluZCB0aGUgY2xvc2VzdCBtYXRjaC4KICAgICAgKGxl dCAoKGRpc3RhbmNlIG1vc3QtcG9zaXRpdmUtZml4bnVtKSAoYmVzdCBuaWwpKQogICAgICAgIChk b2xpc3QgKGFsdCAoZGlyZWN0b3J5LWZpbGVzIGRpcmVjdG9yeSB0ICJcXC5lbFxcJyIgdCkpCiAg ICAgICAgICAobGV0ICgoc2QgKHN0cmluZy1kaXN0YW5jZSBmaWxlIGFsdCkpKQogICAgICAgICAg ICAod2hlbiAoYW5kIChub3QgKHN0cmluZy1tYXRjaC1wIChyeCAob3IgKDogIi1hdXRvbG9hZHMu ZWwiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KDogIi1wa2cuZWwiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW9zKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs dCkpCiAgICAgICAgICAgICAgICAgICAgICAgKDwgc2QgZGlzdGFuY2UpKQogICAgICAgICAgICAg ICh3aGVuICg8IHNkIGRpc3RhbmNlKQogICAgICAgICAgICAgICAgKHNldHEgZGlzdGFuY2UgKHN0 cmluZy1kaXN0YW5jZSBmaWxlIGFsdCkKICAgICAgICAgICAgICAgICAgICAgIGJlc3QgYWx0KSkp KSkKICAgICAgICBiZXN0KSkpKQoKKGRlZnVuIHBhY2thZ2UtdmMtLWdlbmVyYXRlLWRlc2NyaXB0 aW9uLWZpbGUgKHBrZy1kZXNjIHBrZy1maWxlKQogICJHZW5lcmF0ZSBhIHBhY2thZ2UgZGVzY3Jp cHRpb24gZmlsZSBmb3IgUEtHLURFU0MgYW5kIHdyaXRlIGl0IHRvIFBLRy1GSUxFLiIKICAobGV0 ICgobmFtZSAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKSkKICAgIDs7IEluZmVyIHRoZSBz dWJqZWN0IGlmIG1pc3NpbmcuCiAgICAodW5sZXNzIChwYWNrYWdlLWRlc2Mtc3VtbWFyeSBwa2ct ZGVzYykKICAgICAgKHNldGYgKHBhY2thZ2UtZGVzYy1zdW1tYXJ5IHBrZy1kZXNjKQogICAgICAg ICAgICAobGV0ICgobWFpbi1maWxlIChwYWNrYWdlLXZjLS1tYWluLWZpbGUgcGtnLWRlc2MpKSkK ICAgICAgICAgICAgICAob3IgKHBhY2thZ2UtZGVzYy1zdW1tYXJ5IHBrZy1kZXNjKQogICAgICAg ICAgICAgICAgICAoYW5kLWxldCogKChwa2cgKGNhZHIgKGFzc3EgbmFtZSBwYWNrYWdlLWFyY2hp dmUtY29udGVudHMpKSkpCiAgICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVzYy1zdW1tYXJ5 IHBrZykpCiAgICAgICAgICAgICAgICAgIChhbmQgbWFpbi1maWxlIChmaWxlLWV4aXN0cy1wIG1h aW4tZmlsZSkKICAgICAgICAgICAgICAgICAgICAgICAobG0tc3VtbWFyeSBtYWluLWZpbGUpKQog ICAgICAgICAgICAgICAgICBwYWNrYWdlLS1kZWZhdWx0LXN1bW1hcnkpKSkpCiAgICAobGV0ICgo cHJpbnQtbGV2ZWwgbmlsKQogICAgICAgICAgKHByaW50LXF1b3RlZCB0KQogICAgICAgICAgKHBy aW50LWxlbmd0aCBuaWwpKQogICAgICAod3JpdGUtcmVnaW9uCiAgICAgICAoY29uY2F0CiAgICAg ICAgIjs7OyBHZW5lcmF0ZWQgcGFja2FnZSBkZXNjcmlwdGlvbiBmcm9tICIKICAgICAgICAocmVw bGFjZS1yZWdleHAtaW4tc3RyaW5nCiAgICAgICAgICItcGtnXFwuZWxcXCciICIuZWwiCiAgICAg ICAgIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IHBrZy1maWxlKSkKICAgICAgICAiICAtKi0gbm8t Ynl0ZS1jb21waWxlOiB0IC0qLVxuIgogICAgICAgIChwcmluMS10by1zdHJpbmcKICAgICAgICAg KG5jb25jCiAgICAgICAgICAobGlzdCAnZGVmaW5lLXBhY2thZ2UKICAgICAgICAgICAgICAgIChz eW1ib2wtbmFtZSBuYW1lKQogICAgICAgICAgICAgICAgKHBhY2thZ2UtdmMtLXZlcnNpb24gcGtn LWRlc2MpCiAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLXN1bW1hcnkgcGtnLWRlc2MpCiAg ICAgICAgICAgICAgICAobGV0ICgocmVxdWlyZXMgKHBhY2thZ2UtZGVzYy1yZXFzIHBrZy1kZXNj KSkpCiAgICAgICAgICAgICAgICAgIChsaXN0ICdxdW90ZQogICAgICAgICAgICAgICAgICAgICAg ICA7OyBUdXJuIHZlcnNpb24gbGlzdHMgaW50byBzdHJpbmcgZm9ybS4KICAgICAgICAgICAgICAg ICAgICAgICAgKG1hcGNhcgogICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZWx0KQog ICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAoY2FyIGVsdCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtdmVyc2lvbi1qb2luIChjYWRyIGVsdCkpKSkKICAg ICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzKSkpKQogICAgICAgICAgKGxpc3QgOmtpbmQg J3ZjKQogICAgICAgICAgKHBhY2thZ2UtLWFsaXN0LXRvLXBsaXN0LWFyZ3MKICAgICAgICAgICAo cGFja2FnZS1kZXNjLWV4dHJhcyBwa2ctZGVzYykpKSkKICAgICAgICAiXG4iKQogICAgICAgbmls IHBrZy1maWxlIG5pbCAnc2lsZW50KSkpKQoKKGRlZmN1c3RvbSBwYWNrYWdlLXZjLWFsbG93LXNp ZGUtZWZmZWN0cyBuaWwKICAiV2hldGhlciB0byBwcm9jZXNzIDptYWtlIGFuZCA6c2hlbGwtY29t bWFuZCBzcGVjIGFyZ3VtZW50cy4KCkl0IG1heSBiZSBuZWNlc3NhcnkgdG8gcnVuIDptYWtlIGFu ZCA6c2hlbGwtY29tbWFuZCBhcmd1bWVudHMgaW4Kb3JkZXIgdG8gaW5pdGlhbGl6ZSBhIHBhY2th Z2Ugb3IgYnVpbGQgaXRzIGRvY3VtZW50YXRpb24sIGJ1dApwbGVhc2UgYmUgY2FyZWZ1bCB3aGVu IGNoYW5naW5nIHRoaXMgb3B0aW9uLCBhcyBpbnN0YWxsaW5nIGFuZAp1cGRhdGluZyBhIHBhY2th Z2UgY2FuIHJ1biBwb3RlbnRpYWxseSBoYXJtZnVsIGNvZGUuCgpXaGVuIHNldCB0byBhIGxpc3Qg b2Ygc3ltYm9scyAocGFja2FnZXMpLCBydW4gY29tbWFuZHMgZm9yIG9ubHkKcGFja2FnZXMgaW4g dGhlIGxpc3QuICBXaGVuIG5pbCwgbmV2ZXIgcnVuIGNvbW1hbmRzLiAgT3RoZXJ3aXNlCndoZW4g bm9uLW5pbCwgcnVuIGNvbW1hbmRzIGZvciBhbnkgcGFja2FnZSB3aXRoIDptYWtlIG9yCjpzaGVs bC1jb21tYW5kIHNwZWNpZmllZC4KClBhY2thZ2Ugc3BlY3MgYXJlIGxvYWRlZCBmcm9tIHRydXN0 ZWQgcGFja2FnZSBhcmNoaXZlcy4iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIlJ1biBm b3IgYWxsIHBhY2thZ2VzIiB0KQogICAgICAgICAgICAgICAgIChyZXBlYXQgOnRhZyAiUnVuIG9u bHkgZm9yIHNlbGVjdGVkIHBhY2thZ2VzIiAoc3ltYm9sIDp0YWcgIlBhY2thZ2UgbmFtZSIpKQog ICAgICAgICAgICAgICAgIChjb25zdCA6dGFnICJOZXZlciBydW4iIG5pbCkpCiAgOnZlcnNpb24g IjMwLjEiKQoKKGRlZnVuIHBhY2thZ2UtdmMtLW1ha2UgKHBrZy1zcGVjIHBrZy1kZXNjKQogICJQ cm9jZXNzIDptYWtlIGFuZCA6c2hlbGwtY29tbWFuZCBpbiBQS0ctU1BFQy4KUEtHLURFU0MgaXMg dGhlIHBhY2thZ2UgZGVzY3JpcHRvciBmb3IgdGhlIHBhY2thZ2UgdGhhdCBpcyBiZWluZwpwcmVw YXJlZC4iCiAgKGxldCAoKHRhcmdldCAocGxpc3QtZ2V0IHBrZy1zcGVjIDptYWtlKSkKICAgICAg ICAoY21kIChwbGlzdC1nZXQgcGtnLXNwZWMgOnNoZWxsLWNvbW1hbmQpKQogICAgICAgIChidWYg KGZvcm1hdCAiICpwYWNrYWdlLXZjIG1ha2UgJXMqIiAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRl c2MpKSkpCiAgICAod2hlbiAob3IgY21kIHRhcmdldCkKICAgICAgKHdpdGgtY3VycmVudC1idWZm ZXIgKGdldC1idWZmZXItY3JlYXRlIGJ1ZikKICAgICAgICAoZXJhc2UtYnVmZmVyKQogICAgICAg ICh3aGVuIChhbmQgY21kICgvPSAwIChjYWxsLXByb2Nlc3Mgc2hlbGwtZmlsZS1uYW1lIG5pbCB0 IG5pbCBzaGVsbC1jb21tYW5kLXN3aXRjaCBjbWQpKSkKICAgICAgICAgICh3YXJuICJGYWlsZWQg dG8gcnVuICVzLCBzZWUgYnVmZmVyICVTIiBjbWQgKGJ1ZmZlci1uYW1lKSkpCiAgICAgICAgKHdo ZW4gKGFuZCB0YXJnZXQgKC89IDAgKGFwcGx5ICMnY2FsbC1wcm9jZXNzICJtYWtlIiBuaWwgdCBu aWwgKGlmIChjb25zcCB0YXJnZXQpIHRhcmdldCAobGlzdCB0YXJnZXQpKSkpKQogICAgICAgICAg KHdhcm4gIkZhaWxlZCB0byBtYWtlICVzLCBzZWUgYnVmZmVyICVTIiB0YXJnZXQgKGJ1ZmZlci1u YW1lKSkpKSkpKQoKKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWV4cG9ydC10by1maWxlICJveCIgKGJh Y2tlbmQgZmlsZSkpCgooZGVmdW4gcGFja2FnZS12Yy0tYnVpbGQtZG9jdW1lbnRhdGlvbiAocGtn LWRlc2MgZmlsZSkKICAiQnVpbGQgZG9jdW1lbnRhdGlvbiBmb3IgcGFja2FnZSBQS0ctREVTQyBm cm9tIGRvY3VtZW50YXRpb24gc291cmNlIGluIEZJTEUuCkZJTEUgY2FuIGJlIGFuIE9yZyBmaWxl LCBpbmRpY2F0ZWQgYnkgaXRzIFwiLm9yZ1wiIGV4dGVuc2lvbiwKb3RoZXJ3aXNlIGl0J3MgYXNz dW1lZCB0byBiZSBhbiBJbmZvIGZpbGUuIgogIChsZXQqICgocGtnLW5hbWUgKHBhY2thZ2UtZGVz Yy1uYW1lIHBrZy1kZXNjKSkKICAgICAgICAgKGRlZmF1bHQtZGlyZWN0b3J5IChwYWNrYWdlLWRl c2MtZGlyIHBrZy1kZXNjKSkKICAgICAgICAgKGRvY3MtZGlyZWN0b3J5IChmaWxlLW5hbWUtZGly ZWN0b3J5IChleHBhbmQtZmlsZS1uYW1lIGZpbGUpKSkKICAgICAgICAgKG91dHB1dCAoZXhwYW5k LWZpbGUtbmFtZSAoZm9ybWF0ICIlcy5pbmZvIiBwa2ctbmFtZSkpKQogICAgICAgICBjbGVhbi11 cCkKICAgICh3aGVuIChzdHJpbmctbWF0Y2gtcCAiXFwub3JnXFwnIiBmaWxlKQogICAgICAocmVx dWlyZSAnb3gpCiAgICAgIChyZXF1aXJlICdveC10ZXhpbmZvKQogICAgICAod2l0aC10ZW1wLWJ1 ZmZlcgogICAgICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlKQogICAgICAgIChzZXRxIGZp bGUgKG1ha2UtdGVtcC1maWxlICJveC10ZXhpbmZvLSIpKQogICAgICAgIChvcmctZXhwb3J0LXRv LWZpbGUgJ3RleGluZm8gZmlsZSkKICAgICAgICAoc2V0cSBjbGVhbi11cCB0KSkpCiAgICAod2l0 aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIiAqcGFja2FnZS12YyBkb2MqIikK ICAgICAgKGVyYXNlLWJ1ZmZlcikKICAgICAgKGNvbmQKICAgICAgICgoLz0gMCAoY2FsbC1wcm9j ZXNzICJtYWtlaW5mbyIgbmlsIHQgbmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLUki IGRvY3MtZGlyZWN0b3J5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1uby1zcGxpdCIg ZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1vIiBvdXRwdXQpKQogICAgICAgICht ZXNzYWdlICJGYWlsZWQgdG8gYnVpbGQgbWFudWFsICVzLCBzZWUgYnVmZmVyICVTIgogICAgICAg ICAgICAgICAgIGZpbGUgKGJ1ZmZlci1uYW1lKSkpCiAgICAgICAoKC89IDAgKGNhbGwtcHJvY2Vz cyAiaW5zdGFsbC1pbmZvIiBuaWwgdCBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91 dHB1dCAoZXhwYW5kLWZpbGUtbmFtZSAiZGlyIikpKQogICAgICAgIChtZXNzYWdlICJGYWlsZWQg dG8gaW5zdGFsbCBtYW51YWwgJXMsIHNlZSBidWZmZXIgJVMiCiAgICAgICAgICAgICAgICAgb3V0 cHV0IChidWZmZXItbmFtZSkpKQogICAgICAgKChraWxsLWJ1ZmZlcikpKSkKICAgICh3aGVuIGNs ZWFuLXVwCiAgICAgIChkZWxldGUtZmlsZSBmaWxlKSkpKQoKKGRlZnVuIHBhY2thZ2UtdmMtaW5z dGFsbC1kZXBlbmRlbmNpZXMgKHJlcXVpcmVtZW50cykKICAiSW5zdGFsbCBtaXNzaW5nIGRlcGVu ZGVuY2llcywgYW5kIHJldHVybiBtaXNzaW5nIG9uZXMuClRoZSByZXR1cm4gdmFsdWUgd2lsbCBi ZSBuaWwgaWYgZXZlcnl0aGluZyB3YXMgZm91bmQsIG9yIGEgbGlzdApvZiAoTkFNRSBWRVJTSU9O KSBwYWlycyBvZiBhbGwgcGFja2FnZXMgdGhhdCBjb3VsZG4ndCBiZSBmb3VuZC4KClJFUVVJUkVN RU5UUyBzaG91bGQgYmUgYSBsaXN0IG9mIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzOyBlYWNoCmVs ZW1lbnQgaW4gdGhpcyBsaXN0IHNob3VsZCBoYXZlIHRoZSBmb3JtIChQQUNLQUdFIFZFUlNJT04t TElTVCksCndoZXJlIFBBQ0tBR0UgaXMgYSBwYWNrYWdlIG5hbWUgYW5kIFZFUlNJT04tTElTVCBp cyB0aGUgcmVxdWlyZWQKdmVyc2lvbiBvZiB0aGF0IHBhY2thZ2UuIgogIChsZXQgKCh0by1pbnN0 YWxsICcoKSkgKG1pc3NpbmcgJygpKSkKICAgIChjbC1sYWJlbHMgKChzZWFyY2ggKHBrZykKICAg ICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gZmluZCBhbGwgZGVwZW5kZW5jaWVzIGZvciBQS0cu IgogICAgICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgICAgKChhc3NxIChjYXIg cGtnKSB0by1pbnN0YWxsKSkgO2luaGliaXQgY3ljbGVzCiAgICAgICAgICAgICAgICAgICAoKHBh Y2thZ2UtaW5zdGFsbGVkLXAgKGNhciBwa2cpKSkKICAgICAgICAgICAgICAgICAgICgobGV0KiAo KHBhYyBwYWNrYWdlLWFyY2hpdmUtY29udGVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg IChkZXNjIChjYWRyIChhc3NvYyAoY2FyIHBrZykgcGFjKSkpKQogICAgICAgICAgICAgICAgICAg ICAgKGlmIGRlc2MKICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgocmVxcyAocGFja2Fn ZS1kZXNjLXJlcXMgZGVzYykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB1c2ggZGVz YyB0by1pbnN0YWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGMgIydzZWFyY2gg cmVxcykpCiAgICAgICAgICAgICAgICAgICAgICAgIChwdXNoIHBrZyBtaXNzaW5nKSkpKSkpCiAg ICAgICAgICAgICAgICAodmVyc2lvbi1vcmRlciAoYSBiKQogICAgICAgICAgICAgICAgICAiUHJl ZGljYXRlIHRvIHNvcnQgcGFja2FnZXMgaW4gb3JkZXIuIgogICAgICAgICAgICAgICAgICAodmVy c2lvbi1saXN0LTwKICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBiKQog ICAgICAgICAgICAgICAgICAgKHBhY2thZ2UtZGVzYy12ZXJzaW9uIGEpKSkKICAgICAgICAgICAg ICAgIChkdXBsaWNhdGUtcCAoYSBiKQogICAgICAgICAgICAgICAgICAiQXJlIEEgYW5kIEIgdGhl IHNhbWUgcGFja2FnZT8iCiAgICAgICAgICAgICAgICAgIChlcSAocGFja2FnZS1kZXNjLW5hbWUg YSkgKHBhY2thZ2UtZGVzYy1uYW1lIGIpKSkKICAgICAgICAgICAgICAgIChkZXBlbmRzLW9uLXAg KHRhcmdldCBwYWNrYWdlKQogICAgICAgICAgICAgICAgICAiRG9lcyBQQUNLQUdFIGRlcGVuZCBv biBUQVJHRVQ/IgogICAgICAgICAgICAgICAgICAob3IgKGVxIHRhcmdldCBwYWNrYWdlKQogICAg ICAgICAgICAgICAgICAgICAgKGxldCogKChwYWMgcGFja2FnZS1hcmNoaXZlLWNvbnRlbnRzKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZXNjIChjYWRyIChhc3NvYyBwYWNrYWdlIHBh YykpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBkZXNjIChzZXEtc29tZQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBseS1wYXJ0aWFsbHkgIydkZXBlbmRzLW9u LXAgdGFyZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWRl c2MtcmVxcyBkZXNjKSkpKSkpCiAgICAgICAgICAgICAgICAoZGVwZW5kZW50LW9yZGVyIChhIGIp CiAgICAgICAgICAgICAgICAgIChsZXQgKChkZXNjLWEgKHBhY2thZ2UtZGVzYy1uYW1lIGEpKQog ICAgICAgICAgICAgICAgICAgICAgICAoZGVzYy1iIChwYWNrYWdlLWRlc2MtbmFtZSBiKSkpCiAg ICAgICAgICAgICAgICAgICAgKG9yIChub3QgZGVzYy1hKSAobm90IGRlc2MtYikKICAgICAgICAg ICAgICAgICAgICAgICAgKG5vdCAoZGVwZW5kcy1vbi1wIGRlc2MtYiBkZXNjLWEpKQogICAgICAg ICAgICAgICAgICAgICAgICAoZGVwZW5kcy1vbi1wIGRlc2MtYSBkZXNjLWIpKSkpKQogICAgICAo bWFwYyAjJ3NlYXJjaCByZXF1aXJlbWVudHMpCiAgICAgIChjbC1jYWxsZiBzb3J0IHRvLWluc3Rh bGwgIyd2ZXJzaW9uLW9yZGVyKQogICAgICAoY2wtY2FsbGYgc2VxLXVuaXEgdG8taW5zdGFsbCAj J2R1cGxpY2F0ZS1wKQogICAgICAoY2wtY2FsbGYgc29ydCB0by1pbnN0YWxsICMnZGVwZW5kZW50 LW9yZGVyKSkKICAgIChtYXBjICMncGFja2FnZS1pbnN0YWxsLWZyb20tYXJjaGl2ZSB0by1pbnN0 YWxsKQogICAgbWlzc2luZykpCgooZGVmdW4gcGFja2FnZS12Yy0tdW5wYWNrLTEgKHBrZy1kZXNj IHBrZy1kaXIpCiAgIlByZXBhcmUgUEtHLURFU0MgdGhhdCBpcyBhbHJlYWR5IGNoZWNrZWQtb3V0 IGluIFBLRy1ESVIuClRoaXMgaW5jbHVkZXMgZG93bmxvYWRpbmcgbWlzc2luZyBkZXBlbmRlbmNp ZXMsIGdlbmVyYXRpbmcKYXV0b2xvYWRzLCBnZW5lcmF0aW5nIGEgcGFja2FnZSBkZXNjcmlwdGlv biBmaWxlICh1c2VkIHRvCmlkZW50aWZ5IGEgcGFja2FnZSBhcyBhIFZDIHBhY2thZ2UgbGF0ZXIg b24pLCBidWlsZGluZwpkb2N1bWVudGF0aW9uIGFuZCBtYXJraW5nIHRoZSBwYWNrYWdlIGFzIGlu c3RhbGxlZC4iCiAgKGxldCAobWlzc2luZykKICAgIDs7IFJlbW92ZSBhbnkgcHJldmlvdXMgaW5z dGFuY2Ugb2YgUEtHLURFU0MgZnJvbSBgcGFja2FnZS1hbGlzdCcKICAgIChsZXQgKChwa2dzIChh c3NxIChwYWNrYWdlLWRlc2MtbmFtZSBwa2ctZGVzYykgcGFja2FnZS1hbGlzdCkpKQogICAgICAo d2hlbiBwa2dzCiAgICAgICAgKHNldGYgKGNkciBwa2dzKSAoc2VxLXJlbW92ZSAjJ3BhY2thZ2Ut dmMtcCAoY2RyIHBrZ3MpKSkpKQoKICAgIDs7IEluIGNhc2UgdGhlIHBhY2thZ2Ugd2FzIGluc3Rh bGxlZCBkaXJlY3RseSBmcm9tIHNvdXJjZSwgdGhlCiAgICA7OyBkZXBlbmRlbmN5IGxpc3Qgd2Fz bid0IGtub3cgYmVmb3JlaGFuZCwgYW5kIHRoZXkgbWlnaHQgaGF2ZQogICAgOzsgdG8gYmUgaW5z dGFsbGVkIGV4cGxpY2l0bHkuCiAgICAobGV0ICgoZGVwcyAnKCkpKQogICAgICAoZG9saXN0IChm aWxlIChkaXJlY3RvcnktZmlsZXMgcGtnLWRpciB0ICJcXC5lbFxcJyIgdCkpCiAgICAgICAgKHdp dGgtdGVtcC1idWZmZXIKICAgICAgICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlKQogICAg ICAgICAgKHdoZW4tbGV0KiAoKHJlcXVpcmUtbGluZXMgKGxtLWhlYWRlci1tdWx0aWxpbmUgInBh Y2thZ2UtcmVxdWlyZXMiKSkpCiAgICAgICAgICAgICh0aHJlYWQtbGFzdAogICAgICAgICAgICAg IChtYXBjb25jYXQgIydpZGVudGl0eSByZXF1aXJlLWxpbmVzICIgIikKICAgICAgICAgICAgICBw YWNrYWdlLXJlYWQtZnJvbS1zdHJpbmcKICAgICAgICAgICAgICBwYWNrYWdlLS1wcmVwYXJlLWRl cGVuZGVuY2llcwogICAgICAgICAgICAgIChuY29uYyBkZXBzKQogICAgICAgICAgICAgIChzZXRx IGRlcHMpKSkpKQogICAgICAoZG9saXN0IChkZXAgZGVwcykKICAgICAgICAoY2wtY2FsbGYgdmVy c2lvbi10by1saXN0IChjYWRyIGRlcCkpKQogICAgICAoc2V0ZiBtaXNzaW5nIChwYWNrYWdlLXZj LWluc3RhbGwtZGVwZW5kZW5jaWVzIChkZWxldGUtZHVwcyBkZXBzKSkpCiAgICAgIChzZXRmIG1p c3NpbmcgKGRlbHEgKGFzc3EgKHBhY2thZ2UtZGVzYy1uYW1lIHBrZy1kZXNjKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAg bWlzc2luZykpKQoKICAgIChsZXQgKChkZWZhdWx0LWRpcmVjdG9yeSAoZmlsZS1uYW1lLWFzLWRp cmVjdG9yeSBwa2ctZGlyKSkKICAgICAgICAgIChwa2ctZmlsZSAoZXhwYW5kLWZpbGUtbmFtZSAo cGFja2FnZS0tZGVzY3JpcHRpb24tZmlsZSBwa2ctZGlyKSBwa2ctZGlyKSkKICAgICAgICAgIChw a2ctc3BlYyAocGFja2FnZS12Yy0tZGVzYy0+c3BlYyBwa2ctZGVzYykpKQogICAgICA7OyBHZW5l cmF0ZSBhdXRvbG9hZHMKICAgICAgKGxldCogKChuYW1lIChwYWNrYWdlLWRlc2MtbmFtZSBwa2ct ZGVzYykpCiAgICAgICAgICAgICAoYXV0by1uYW1lIChmb3JtYXQgIiVzLWF1dG9sb2Fkcy5lbCIg bmFtZSkpCiAgICAgICAgICAgICAobGlzcC1kaXIgKHBsaXN0LWdldCBwa2ctc3BlYyA6bGlzcC1k aXIpKSkKICAgICAgICAocGFja2FnZS1nZW5lcmF0ZS1hdXRvbG9hZHMKICAgICAgICAgbmFtZSAo ZmlsZS1uYW1lLWNvbmNhdCBwa2ctZGlyIGxpc3AtZGlyKSkKICAgICAgICAod2hlbiBsaXNwLWRp cgogICAgICAgICAgKHdyaXRlLXJlZ2lvbgogICAgICAgICAgICh3aXRoLXRlbXAtYnVmZmVyCiAg ICAgICAgICAgICAoaW5zZXJ0ICI7OyBBdXRvbG9hZCBpbmRpcmVjdGlvbiBmb3IgcGFja2FnZS12 Y1xuXG4iKQogICAgICAgICAgICAgKHByaW4xIGAobG9hZCAoZXhwYW5kLWZpbGUtbmFtZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgLChmaWxlLW5hbWUtY29uY2F0IGxpc3AtZGlyIGF1dG8t bmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAoYW5kIGxvYWQtZmlsZS1uYW1l CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZS1uYW1lLWRpcmVjdG9y eSBsb2FkLWZpbGUtbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhciBs b2FkLXBhdGgpKSkpCiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtYnVmZmVyKSkKICAgICAg ICAgICAgIChidWZmZXItc3RyaW5nKSkKICAgICAgICAgICBuaWwgKGV4cGFuZC1maWxlLW5hbWUg YXV0by1uYW1lIHBrZy1kaXIpKSkpCgogICAgICA7OyBHZW5lcmF0ZSBwYWNrYWdlIGZpbGUKICAg ICAgKHBhY2thZ2UtdmMtLWdlbmVyYXRlLWRlc2NyaXB0aW9uLWZpbGUgcGtnLWRlc2MgcGtnLWZp bGUpCgogICAgICA7OyBQcm9jZXNzIDptYWtlIGFuZCA6c2hlbGwtY29tbWFuZCBhcmd1bWVudHMg YmVmb3JlIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24KICAgICAgKHdoZW4gKG9yIChlcSBwYWNrYWdl LXZjLWFsbG93LXNpZGUtZWZmZWN0cyB0KQogICAgICAgICAgICAgICAgKG1lbXEgKHBhY2thZ2Ut ZGVzYy1uYW1lIHBrZy1kZXNjKQogICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS12Yy1hbGxv dy1zaWRlLWVmZmVjdHMpKQogICAgICAgIChwYWNrYWdlLXZjLS1tYWtlIHBrZy1zcGVjIHBrZy1k ZXNjKSkKCiAgICAgIDs7IERldGVjdCBhIG1hbnVhbAogICAgICAod2hlbiAoZXhlY3V0YWJsZS1m aW5kICJpbnN0YWxsLWluZm8iKQogICAgICAgIChkb2xpc3QgKGRvYy1maWxlIChlbnN1cmUtbGlz dCAocGxpc3QtZ2V0IHBrZy1zcGVjIDpkb2MpKSkKICAgICAgICAgIChwYWNrYWdlLXZjLS1idWls ZC1kb2N1bWVudGF0aW9uIHBrZy1kZXNjIGRvYy1maWxlKSkpKQoKICAgIDs7IFVwZGF0ZSBwYWNr YWdlLWFsaXN0LgogICAgKGxldCAoKG5ldy1kZXNjIChwYWNrYWdlLWxvYWQtZGVzY3JpcHRvciBw a2ctZGlyKSkpCiAgICAgIDs7IEFjdGl2YXRpb24gaGFzIHRvIGJlIGRvbmUgYmVmb3JlIGNvbXBp bGF0aW9uLCBzbyB0aGF0IGlmIHdlJ3JlCiAgICAgIDs7IHVwZ3JhZGluZyBhbmQgbWFjcm9zIGhh dmUgY2hhbmdlZCB3ZSBsb2FkIHRoZSBuZXcgZGVmaW5pdGlvbnMKICAgICAgOzsgYmVmb3JlIGNv bXBpbGluZy4KICAgICAgKHdoZW4gKHBhY2thZ2UtYWN0aXZhdGUtMSBuZXctZGVzYyA6cmVsb2Fk IDpkZXBzKQogICAgICAgIDs7IEZJWE1FOiBDb21waWxhdGlvbiBzaG91bGQgYmUgZG9uZSBhcyBh IHNlcGFyYXRlLCBvcHRpb25hbCwgc3RlcC4KICAgICAgICA7OyBFLmcuIGZvciBtdWx0aS1wYWNr YWdlIGluc3RhbGxzLCB3ZSBzaG91bGQgZmlyc3QgaW5zdGFsbCBhbGwgcGFja2FnZXMKICAgICAg ICA7OyBhbmQgdGhlbiBjb21waWxlIHRoZW0uCiAgICAgICAgKHBhY2thZ2UtLWNvbXBpbGUgbmV3 LWRlc2MpCiAgICAgICAgKHdoZW4gcGFja2FnZS1uYXRpdmUtY29tcGlsZQogICAgICAgICAgKHBh Y2thZ2UtLW5hdGl2ZS1jb21waWxlLWFzeW5jIG5ldy1kZXNjKSkKICAgICAgICA7OyBBZnRlciBj b21waWxhdGlvbiwgbG9hZCBhZ2FpbiBhbnkgZmlsZXMgbG9hZGVkIGJ5CiAgICAgICAgOzsgYGFj dGl2YXRlLTEnLCBzbyB0aGF0IHdlIHVzZSB0aGUgYnl0ZS1jb21waWxlZCBkZWZpbml0aW9ucy4K ICAgICAgICAocGFja2FnZS0tcmVsb2FkLXByZXZpb3VzbHktbG9hZGVkIG5ldy1kZXNjKSkpCgog ICAgOzsgTWFyayBwYWNrYWdlIGFzIHNlbGVjdGVkCiAgICAobGV0ICgobmFtZSAocGFja2FnZS1k ZXNjLW5hbWUgcGtnLWRlc2MpKSkKICAgICAgKHVubGVzcyAobWVtcSBuYW1lIHBhY2thZ2Utc2Vs ZWN0ZWQtcGFja2FnZXMpCiAgICAgICAgKHBhY2thZ2UtLXNhdmUtc2VsZWN0ZWQtcGFja2FnZXMK ICAgICAgICAgKGNvbnMgbmFtZSBwYWNrYWdlLXNlbGVjdGVkLXBhY2thZ2VzKSkpKQoKICAgIChw YWNrYWdlLS1xdWlja3N0YXJ0LW1heWJlLXJlZnJlc2gpCgogICAgOzsgQ29uZmlybSB0aGF0IHRo ZSBpbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWwKICAgIChsZXQgKChtYWluLWZpbGUgKHBhY2th Z2UtdmMtLW1haW4tZmlsZSBwa2ctZGVzYykpKQogICAgICAobWVzc2FnZSAiVkMgcGFja2FnZSBg JXMnIGluc3RhbGxlZCAoVmVyc2lvbiAlcywgUmV2aXNpb24gJVMpLiVzIgogICAgICAgICAgICAg ICAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpCiAgICAgICAgICAgICAgIChsbS13aXRoLWZp bGUgbWFpbi1maWxlCiAgICAgICAgICAgICAgICAgKHBhY2thZ2Utc3RyaXAtcmNzLWlkCiAgICAg ICAgICAgICAgICAgIChvciAobG0taGVhZGVyICJwYWNrYWdlLXZlcnNpb24iKQogICAgICAgICAg ICAgICAgICAgICAgKGxtLWhlYWRlciAidmVyc2lvbiIpKSkpCiAgICAgICAgICAgICAgICh2Yy13 b3JraW5nLXJldmlzaW9uIG1haW4tZmlsZSkKICAgICAgICAgICAgICAgKGlmIG1pc3NpbmcKICAg ICAgICAgICAgICAgICAgICAoZm9ybWF0CiAgICAgICAgICAgICAgICAgICAgICIgRmFpbGVkIHRv IGluc3RhbGwgdGhlIGZvbGxvd2luZyBkZXBlbmRlbmNpZXM6ICVzIgogICAgICAgICAgICAgICAg ICAgICAobWFwY29uY2F0CiAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChwKQogICAgICAg ICAgICAgICAgICAgICAgICAoZm9ybWF0ICIlcyAoJXMpIiAoY2FyIHApIChjYWRyIHApKSkKICAg ICAgICAgICAgICAgICAgICAgIG1pc3NpbmcgIiwgIikpCiAgICAgICAgICAgICAgICAgIiIpKSkK ICAgIHQpKQoKKGRlZnVuIHBhY2thZ2UtdmMtLWd1ZXNzLWJhY2tlbmQgKHVybCkKICAiR3Vlc3Mg dGhlIFZDIGJhY2tlbmQgZm9yIFVSTC4KVGhpcyBmdW5jdGlvbiB3aWxsIGludGVybmFsbHkgcXVl cnkgYHBhY2thZ2UtdmMtaGV1cmlzdGljLWFsaXN0JwphbmQgcmV0dXJuIG5pbCBpZiBpdCBjYW5u b3QgcmVhc29uYWJseSBndWVzcy4iCiAgKGFuZCB1cmwgKGFsaXN0LWdldCB1cmwgcGFja2FnZS12 Yy1oZXVyaXN0aWMtYWxpc3QKICAgICAgICAgICAgICAgICAgICAgIG5pbCBuaWwgIydzdHJpbmct bWF0Y2gtcCkpKQoKKGRlY2xhcmUtZnVuY3Rpb24gcHJvamVjdC1yZW1lbWJlci1wcm9qZWN0cy11 bmRlciAicHJvamVjdCIgKGRpciAmb3B0aW9uYWwgcmVjdXJzaXZlKSkKCihkZWZ1biBwYWNrYWdl LXZjLS1jbG9uZSAocGtnLWRlc2MgcGtnLXNwZWMgZGlyIHJldikKICAiQ2xvbmUgdGhlIHBhY2th Z2UgUEtHLURFU0Mgd2hvc2Ugc3BlYyBpcyBQS0ctU1BFQyBpbnRvIHRoZSBkaXJlY3RvcnkgRElS LgpSRVYgc3BlY2lmaWVzIGEgc3BlY2lmaWMgcmV2aXNpb24gdG8gY2hlY2tvdXQuICBUaGlzIG92 ZXJyaWRlcyB0aGUgYDpicmFuY2gnCmF0dHJpYnV0ZSBpbiBQS0ctU1BFQy4iCiAgKHBjYXNlLWxl dCogKChuYW1lIChwYWNrYWdlLWRlc2MtbmFtZSBwa2ctZGVzYykpCiAgICAgICAgICAgICAgICgo bWFwIDp1cmwgOmJyYW5jaCkgcGtnLXNwZWMpKQoKICAgIDs7IENsb25lIHRoZSByZXBvc2l0b3J5 IGludG8gYHJlcG8tZGlyJyBpZiBuZWNlc3NhcnkKICAgICh1bmxlc3MgKGZpbGUtZXhpc3RzLXAg ZGlyKQogICAgICAobWFrZS1kaXJlY3RvcnkgKGZpbGUtbmFtZS1kaXJlY3RvcnkgZGlyKSB0KQog ICAgICAobGV0ICgoYmFja2VuZCAob3IgKHBsaXN0LWdldCBwa2ctc3BlYyA6dmMtYmFja2VuZCkK ICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLXZjLS1ndWVzcy1iYWNrZW5kIHVybCkK ICAgICAgICAgICAgICAgICAgICAgICAgIChwbGlzdC1nZXQgKGFsaXN0LWdldCAocGFja2FnZS1k ZXNjLWFyY2hpdmUgcGtnLWRlc2MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFja2FnZS12Yy0tYXJjaGl2ZS1kYXRhLWFsaXN0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsIG5pbCAjJ3N0cmluZz0pCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2Yy1iYWNrZW5kKQogICAgICAgICAgICAg ICAgICAgICAgICAgcGFja2FnZS12Yy1kZWZhdWx0LWJhY2tlbmQpKSkKICAgICAgICAodW5sZXNz ICh2Yy1jbG9uZSB1cmwgYmFja2VuZCBkaXIKICAgICAgICAgICAgICAgICAgICAgICAgICAob3Ig KGFuZCAobm90IChlcSByZXYgOmxhc3QtcmVsZWFzZSkpIHJldikgYnJhbmNoKSkKICAgICAgICAg IChlcnJvciAiRmFpbGVkIHRvIGNsb25lICVzIGZyb20gJXMiIG5hbWUgdXJsKSkpKQoKICAgICh3 aGVuIHBhY2thZ2UtdmMtcmVnaXN0ZXItYXMtcHJvamVjdAogICAgICAobGV0ICgoZGVmYXVsdC1k aXJlY3RvcnkgZGlyKSkKICAgICAgICAocmVxdWlyZSAncHJvamVjdCkKICAgICAgICAocHJvamVj dC1yZW1lbWJlci1wcm9qZWN0cy11bmRlciBkaXIpKSkKCiAgICA7OyBDaGVjayBvdXQgdGhlIGxh dGVzdCByZWxlYXNlIGlmIHJlcXVlc3RlZAogICAgKHdoZW4gKGVxIHJldiA6bGFzdC1yZWxlYXNl KQogICAgICAoaWYtbGV0ICgocmVsZWFzZS1yZXYgKHBhY2thZ2UtdmMtLXJlbGVhc2UtcmV2IHBr Zy1kZXNjKSkpCiAgICAgICAgICAodmMtcmV0cmlldmUtdGFnIGRpciByZWxlYXNlLXJldikKICAg ICAgICAobWVzc2FnZSAiTm8gcmVsZWFzZSByZXZpc2lvbiB3YXMgZm91bmQsIGNvbnRpbnVpbmcu Li4iKSkpKSkKCihkZWZ2YXIgcGFja2FnZS12Yy1ub24tY29kZS1maWxlLW5hbWVzCiAgJygiLmRp ci1sb2NhbHMuZWwiICIuZGlyLWxvY2Fscy0yLmVsIikKICAiTGlzdCBvZiBmaWxlIG5hbWVzIHRo YXQgZG8gbm90IGNvbnRhaW4gRW1hY3MgTGlzcCBjb2RlLgpUaGlzIGxpc3QgaXMgdXNlZCBieSBg cGFja2FnZS12Yy0tdW5wYWNrJyB0byBiZXR0ZXIgY2hlY2sgaWYgdGhlCnVzZXIgaXMgZmV0Y2hp bmcgY29kZSBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55CkVtYWNz IExpc3AgZmlsZXMuIikKCihkZWZ1biBwYWNrYWdlLXZjLS11bnBhY2sgKHBrZy1kZXNjIHBrZy1z cGVjICZvcHRpb25hbCByZXYpCiAgIkluc3RhbGwgdGhlIHBhY2thZ2UgZGVzY3JpYmVkIGJ5IFBL Ry1ERVNDLgpQS0ctU1BFQyBpcyBhIHBhY2thZ2Ugc3BlY2lmaWNhdGlvbiwgYSBwcm9wZXJ0eSBs aXN0IGRlc2NyaWJpbmcKaG93IHRvIGZldGNoIGFuZCBidWlsZCB0aGUgcGFja2FnZS4gIFNlZSBg cGFja2FnZS12Yy0tYXJjaGl2ZS1zcGVjLWFsaXN0cycKZm9yIGRldGFpbHMuICBUaGUgb3B0aW9u YWwgYXJndW1lbnQgUkVWIHNwZWNpZmllcyBhIHNwZWNpZmljIHJldmlzaW9uIHRvCmNoZWNrb3V0 LiAgVGhpcyBvdmVycmlkZXMgdGhlIGA6YnJhbmNoJyBhdHRyaWJ1dGUgaW4gUEtHLVNQRUMuIgog ICh1bmxlc3MgKGVxIChwYWNrYWdlLWRlc2Mta2luZCBwa2ctZGVzYykgJ3ZjKQogICAgKGxldCAo KGNvcHkgKGNvcHktcGFja2FnZS1kZXNjIHBrZy1kZXNjKSkpCiAgICAgIChzZXRmIChwYWNrYWdl LWRlc2Mta2luZCBjb3B5KSAndmMKICAgICAgICAgICAgcGtnLWRlc2MgY29weSkpKQogIChwY2Fz ZS1sZXQqICgoKG1hcCA6bGlzcC1kaXIpIHBrZy1zcGVjKQogICAgICAgICAgICAgICAobmFtZSAo cGFja2FnZS1kZXNjLW5hbWUgcGtnLWRlc2MpKQogICAgICAgICAgICAgICAoZGlybmFtZSAocGFj a2FnZS1kZXNjLWZ1bGwtbmFtZSBwa2ctZGVzYykpCiAgICAgICAgICAgICAgIChwa2ctZGlyIChm aWxlLW5hbWUtYXMtZGlyZWN0b3J5IChleHBhbmQtZmlsZS1uYW1lIGRpcm5hbWUgcGFja2FnZS11 c2VyLWRpcikpKSkKICAgICh3aGVuIChzdHJpbmctZW1wdHktcCBuYW1lKQogICAgICAodXNlci1l cnJvciAiRW1wdHkgcGFja2FnZSBuYW1lIikpCiAgICAoc2V0ZiAocGFja2FnZS1kZXNjLWRpciBw a2ctZGVzYykgcGtnLWRpcikKICAgICh3aGVuIChmaWxlLWV4aXN0cy1wIHBrZy1kaXIpCiAgICAg IChpZiAoeWVzLW9yLW5vLXAgKGZvcm1hdCAiT3ZlcndyaXRlIHByZXZpb3VzIGNoZWNrb3V0IGZv ciBwYWNrYWdlIGAlcyc/IiBuYW1lKSkKICAgICAgICAgIChwYWNrYWdlLS1kZWxldGUtZGlyZWN0 b3J5IHBrZy1kaXIpCiAgICAgICAgKGVycm9yICJUaGVyZSBhbHJlYWR5IGV4aXN0cyBhIGNoZWNr b3V0IGZvciAlcyIgbmFtZSkpKQogICAgKHBhY2thZ2UtdmMtLWNsb25lIHBrZy1kZXNjIHBrZy1z cGVjIHBrZy1kaXIgcmV2KQogICAgKHdoZW4gKGRpcmVjdG9yeS1lbXB0eS1wIHBrZy1kaXIpCiAg ICAgIChkZWxldGUtZGlyZWN0b3J5IHBrZy1kaXIpCiAgICAgIChlcnJvciAiRW1wdHkgY2hlY2tv dXQgZm9yICVzIiBuYW1lKSkKICAgICh1bmxlc3MgKHNlcS1yZW1vdmUKICAgICAgICAgICAgIChs YW1iZGEgKGZpbGUpCiAgICAgICAgICAgICAgIChtZW1iZXIgKGZpbGUtbmFtZS1ub25kaXJlY3Rv cnkgZmlsZSkgcGFja2FnZS12Yy1ub24tY29kZS1maWxlLW5hbWVzKSkKICAgICAgICAgICAgIChk aXJlY3RvcnktZmlsZXMtcmVjdXJzaXZlbHkgcGtnLWRpciAiXFwuZWxcXCciIG5pbCkpCiAgICAg ICh3aGVuICh5ZXMtb3Itbm8tcCAoZm9ybWF0ICJObyBFbWFjcyBMaXNwIGZpbGVzIGZvdW5kIHdo ZW4gZmV0Y2hpbmcgXCIlc1wiLCBcCmFib3J0IGluc3RhbGxhdGlvbj8iIG5hbWUpKQogICAgICAg IChkZWxldGUtZGlyZWN0b3J5IHBrZy1kaXIgdCkKICAgICAgICAodXNlci1lcnJvciAiSW5zdGFs bGF0aW9uIGFib3J0ZWQiKSkpCgogICAgOzsgV2hlbiBub3RoaW5nIGlzIHNwZWNpZmllZCBhYm91 dCBhIGBsaXNwLWRpcicsIHRoZW4gc2hvdWxkCiAgICA7OyBoZXVyaXN0aWNhbGx5IGNoZWNrIGlm IHRoZXJlIGlzIGEgc3ViLWRpcmVjdG9yeSB3aXRoIGxpc3AKICAgIDs7IGZpbGVzLiAgVGhlc2Ug YXJlIGNvbnZlbnRpb25hbGx5IGp1c3QgY2FsbGVkICJsaXNwIiBvciAic3JjIi4KICAgIDs7IElm IHRoaXMgZGlyZWN0b3J5IGV4aXN0cyBhbmQgY29udGFpbnMgbm9uLXplcm8gbnVtYmVyIG9mIGxp c3AKICAgIDs7IGZpbGVzLCB3ZSB3aWxsIHVzZSB0aGF0IGluc3RlYWQgb2YgYHBrZy1kaXInLgog ICAgKGNhdGNoICdkb25lCiAgICAgIChkb2xpc3QgKG5hbWUgJygibGlzcCIgInNyYyIpKQogICAg ICAgICh3aGVuLWxldCogKCgobnVsbCBsaXNwLWRpcikpCiAgICAgICAgICAgICAgICAgICAgKGRp ciAoZXhwYW5kLWZpbGUtbmFtZSBuYW1lIHBrZy1kaXIpKQogICAgICAgICAgICAgICAgICAgICgo ZmlsZS1kaXJlY3RvcnktcCBkaXIpKQogICAgICAgICAgICAgICAgICAgICgoZGlyZWN0b3J5LWZp bGVzIGRpciBuaWwgIlxcYFteLl0uK1xcLmVsXFwnIiB0IDEpKSkKICAgICAgICAgIDs7IFdlIHdv bid0IHVzZSBgZGlyJywgc2luY2UgZGlyIGlzIGFuIGFic29sdXRlIHBhdGggYW5kIHdlCiAgICAg ICAgICA7OyBkb24ndCB3YW50IGBsaXNwLWRpcicgdG8gZGVwZW5kIG9uIHRoZSBjdXJyZW50IGxv Y2F0aW9uIG9mCiAgICAgICAgICA7OyB0aGUgcGFja2FnZSBpbnN0YWxsYXRpb24sIGllLiB0byBi cmVhayBpZiBtb3ZlZCBhcm91bmQgdGhlCiAgICAgICAgICA7OyBmaWxlIHN5c3RlbSBvciBiZXR3 ZWVuIGluc3RhbGxhdGlvbnMuCiAgICAgICAgICAodGhyb3cgJ2RvbmUgKHNldHEgbGlzcC1kaXIg bmFtZSkpKSkpCgogICAgOzsgRW5zdXJlIHdlIGhhdmUgYSBjb3B5IG9mIHRoZSBwYWNrYWdlIHNw ZWNpZmljYXRpb24KICAgICh1bmxlc3MgKHNlcS1zb21lIChsYW1iZGEgKGFsaXN0KSAoZXF1YWwg KGFsaXN0LWdldCBuYW1lIChjZHIgYWxpc3QpKSBwa2ctc3BlYykpCiAgICAgICAgICAgICAgICAg ICAgICBwYWNrYWdlLXZjLS1hcmNoaXZlLXNwZWMtYWxpc3RzKQogICAgICAoY3VzdG9taXplLXNh dmUtdmFyaWFibGUKICAgICAgICdwYWNrYWdlLXZjLXNlbGVjdGVkLXBhY2thZ2VzCiAgICAgICAo Y29ucyAoY29ucyBuYW1lIHBrZy1zcGVjKQogICAgICAgICAgICAgKHNlcS1yZW1vdmUgKGxhbWJk YSAoc3BlYykgKHN0cmluZz0gbmFtZSAoY2FyIHNwZWMpKSkKICAgICAgICAgICAgICAgICAgICAg ICAgIHBhY2thZ2UtdmMtc2VsZWN0ZWQtcGFja2FnZXMpKSkpCgogICAgKHBhY2thZ2UtdmMtLXVu cGFjay0xIHBrZy1kZXNjIHBrZy1kaXIpKSkKCihkZWZ1biBwYWNrYWdlLXZjLS1yZWFkLXBhY2th Z2UtbmFtZSAocHJvbXB0ICZvcHRpb25hbCBhbGxvdy11cmwgaW5zdGFsbGVkKQogICJRdWVyeSB0 aGUgdXNlciBmb3IgYSBWQyBwYWNrYWdlIGFuZCByZXR1cm4gYSBuYW1lIHdpdGggUFJPTVBULgpJ ZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgQUxMT1ctVVJMIGlzIG5vbi1uaWwsIHRoZSB1c2VyIGlz IGFsc28KYWxsb3dlZCB0byBzcGVjaWZ5IGEgbm9uLXBhY2thZ2UgbmFtZS4gIElmIHRoZSBvcHRp b25hbCBhcmd1bWVudApJTlNUQUxMRUQgaXMgbm9uLW5pbCwgdGhlIHNlbGVjdGlvbiB3aWxsIGJl IGZpbHRlcmVkIGRvd24gdG8KVkMgcGFja2FnZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBpbnN0 YWxsZWQuIgogIChwYWNrYWdlLXZjLS1hcmNoaXZlcy1pbml0aWFsaXplKQogIChjb21wbGV0aW5n LXJlYWQgcHJvbXB0IChpZiBpbnN0YWxsZWQgcGFja2FnZS1hbGlzdCBwYWNrYWdlLWFyY2hpdmUt Y29udGVudHMpCiAgICAgICAgICAgICAgICAgICAoaWYgaW5zdGFsbGVkCiAgICAgICAgICAgICAg ICAgICAgICAgKGxhbWJkYSAocGtnKSAocGFja2FnZS12Yy1wIChjYWRyIHBrZykpKQogICAgICAg ICAgICAgICAgICAgICAobGFtYmRhIChwa2cpCiAgICAgICAgICAgICAgICAgICAgICAgKG9yIChw YWNrYWdlLXZjLS1kZXNjLT5zcGVjIChjYWRyIHBrZykpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIDs7IElmIHdlIGhhdmUgbm8gZXhwbGljaXQgVkMgZGF0YSwgd2UgY2FuIHRyeSBhIGtpbmQg b2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgaGV1cmlzdGljIGFuZCB1c2UgdGhlIFVS TCBoZWFkZXIsIHRoYXQgbWlnaHQgYWxyZWFkeSBiZQogICAgICAgICAgICAgICAgICAgICAgICAg ICA7OyBwb2ludGluZyB0b3dhcmRzIGEgcmVwb3NpdG9yeSwgYW5kIHVzZSB0aGF0IGFzIGEgYmFj a3VwCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQtbGV0KiAoKGV4dHJhcyAocGFja2Fn ZS1kZXNjLWV4dHJhcyAoY2FkciBwa2cpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodXJsIChhbGlzdC1nZXQgOnVybCBleHRyYXMpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgocGFja2FnZS12Yy0tZ3Vlc3MtYmFja2VuZCB1cmwpKSkpKSkp CiAgICAgICAgICAgICAgICAgICAobm90IGFsbG93LXVybCkpKQoKKGRlZnVuIHBhY2thZ2UtdmMt LXJlYWQtcGFja2FnZS1kZXNjIChwcm9tcHQgJm9wdGlvbmFsIGluc3RhbGxlZCkKICAiUXVlcnkg dGhlIHVzZXIgZm9yIGEgVkMgcGFja2FnZSBhbmQgcmV0dXJuIGEgZGVzY3JpcHRpb24gd2l0aCBQ Uk9NUFQuCklmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBJTlNUQUxMRUQgaXMgbm9uLW5pbCwgdGhl IHNlbGVjdGlvbiB3aWxsCmJlIGZpbHRlcmVkIGRvd24gdG8gVkMgcGFja2FnZXMgdGhhdCBoYXZl IGFscmVhZHkgYmVlbgppbnN0YWxsZWQsIGFuZCB0aGUgcGFja2FnZSBkZXNjcmlwdGlvbiB3aWxs IGJlIHRoYXQgb2YgYW4KaW5zdGFsbGVkIHBhY2thZ2UuIgogIChjYWRyIChhc3NvYyAocGFja2Fn ZS12Yy0tcmVhZC1wYWNrYWdlLW5hbWUgcHJvbXB0IG5pbCBpbnN0YWxsZWQpCiAgICAgICAgICAg ICAgIChpZiBpbnN0YWxsZWQgcGFja2FnZS1hbGlzdCBwYWNrYWdlLWFyY2hpdmUtY29udGVudHMp CiAgICAgICAgICAgICAgICMnc3RyaW5nPSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHBhY2th Z2UtdmMtdXBncmFkZS1hbGwgKCkKICAiQXR0ZW1wdCB0byB1cGdyYWRlIGFsbCBpbnN0YWxsZWQg VkMgcGFja2FnZXMuIgogIChpbnRlcmFjdGl2ZSkKICAoZG9saXN0IChwYWNrYWdlIHBhY2thZ2Ut YWxpc3QpCiAgICAoZG9saXN0IChwa2ctZGVzYyAoY2RyIHBhY2thZ2UpKQogICAgICAod2hlbiAo cGFja2FnZS12Yy1wIHBrZy1kZXNjKQogICAgICAgIChwYWNrYWdlLXZjLXVwZ3JhZGUgcGtnLWRl c2MpKSkpCiAgKG1lc3NhZ2UgIkRvbmUgdXBncmFkaW5nIHBhY2thZ2VzLiIpKQoKOzs7IyMjYXV0 b2xvYWQKKGRlZnVuIHBhY2thZ2UtdmMtdXBncmFkZSAocGtnLWRlc2MpCiAgIkF0dGVtcHQgdG8g dXBncmFkZSB0aGUgcGFja2FnZSBQS0ctREVTQy4iCiAgKGludGVyYWN0aXZlIChsaXN0IChwYWNr YWdlLXZjLS1yZWFkLXBhY2thZ2UtZGVzYyAiVXBncmFkZSBWQyBwYWNrYWdlOiAiIHQpKSkKICA7 OyBIQUNLOiBUbyBydW4gYHBhY2thZ2UtdmMtLXVucGFjay0xJyBhZnRlciBjaGVja2luZyBvdXQg dGhlIG5ldwogIDs7IHJldmlzaW9uLCB3ZSBpbnNlcnQgYSBob29rIGludG8gYHZjLXBvc3QtY29t bWFuZC1mdW5jdGlvbnMnLCBhbmQKICA7OyByZW1vdmUgaXQgcmlnaHQgYWZ0ZXIgaXQgcmFuLiAg VG8gYXZvaWQgcnVubmluZyB0aGUgaG9vayBtdWx0aXBsZQogIDs7IHRpbWVzIG9yIGV2ZW4gZm9y IHRoZSB3cm9uZyByZXBvc2l0b3J5IChhcyBgdmMtcHVsbCcgaXMgb2Z0ZW4KICA7OyBhc3luY2hy b25vdXMpLCB3ZSBleHRyYWN0IHRoZSByZWxldmFudCBhcmd1bWVudHMgdXNpbmcgYSBwc2V1ZG8K ICA7OyBmaWx0ZXIgZm9yIGB2Yy1maWx0ZXItY29tbWFuZC1mdW5jdGlvbicsIGV4ZWN1dGVkIG9u bHkgZm9yIHRoZQogIDs7IHNpZGUgZWZmZWN0LCBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgbGV4aWNh bCBzY29wZS4gIFdoZW4gdGhlIGhvb2sKICA7OyBpcyBydW4sIHdlIGNoZWNrIGlmIHRoZSBhcmd1 bWVudHMgYXJlIHRoZSBzYW1lIChgZXEnKSBhcyB0aGUgb25lcwogIDs7IHByZXZpb3VzbHkgZXh0 cmFjdGVkLCBhbmQgb25seSBpbiB0aGF0IGNhc2Ugd2lsbCBiZSBjYWxsCiAgOzsgYHBhY2thZ2Ut dmMtLXVucGFjay0xJy4gIFVnaC4uLgogIDs7CiAgOzsgSWYgdGhlcmUgaXMgYSBiZXR0ZXIgd2F5 IHRvIGRvIHRoaXMsIGl0IHNob3VsZCBiZSBkb25lLgogIChjbC1hc3NlcnQgKHBhY2thZ2UtdmMt cCBwa2ctZGVzYykpCiAgKGxldHJlYyAoKHBrZy1kaXIgKHBhY2thZ2UtZGVzYy1kaXIgcGtnLWRl c2MpKQogICAgICAgICAgICh2Yy1mbGFncykKICAgICAgICAgICAodmMtZmlsdGVyLWNvbW1hbmQt ZnVuY3Rpb24KICAgICAgICAgICAgKGxhbWJkYSAoY29tbWFuZCBmaWxlLW9yLWxpc3QgZmxhZ3Mp CiAgICAgICAgICAgICAgKHNldHEgdmMtZmxhZ3MgZmxhZ3MpCiAgICAgICAgICAgICAgKGxpc3Qg Y29tbWFuZCBmaWxlLW9yLWxpc3QgZmxhZ3MpKSkKICAgICAgICAgICAocG9zdC11cGdyYWRlCiAg ICAgICAgICAgIChsYW1iZGEgKF9jb21tYW5kIF9maWxlLW9yLWxpc3QgZmxhZ3MpCiAgICAgICAg ICAgICAgKHdoZW4gKGFuZCAoZmlsZS1lcXVhbC1wIHBrZy1kaXIgZGVmYXVsdC1kaXJlY3Rvcnkp CiAgICAgICAgICAgICAgICAgICAgICAgICAoZXEgZmxhZ3MgdmMtZmxhZ3MpKQogICAgICAgICAg ICAgICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgICAgICAgICAgICAgKHdpdGgtZGVtb3RlZC1l cnJvcnMgIkZhaWxlZCB0byBhY3RpdmF0ZTogJVMiCiAgICAgICAgICAgICAgICAgICAgICAocGFj a2FnZS12Yy0tdW5wYWNrLTEgcGtnLWRlc2MgcGtnLWRpcikpCiAgICAgICAgICAgICAgICAgIChy ZW1vdmUtaG9vayAndmMtcG9zdC1jb21tYW5kLWZ1bmN0aW9ucyBwb3N0LXVwZ3JhZGUpKSkpKSkK ICAgIChhZGQtaG9vayAndmMtcG9zdC1jb21tYW5kLWZ1bmN0aW9ucyBwb3N0LXVwZ3JhZGUpCiAg ICAod2l0aC1kZW1vdGVkLWVycm9ycyAiRmFpbGVkIHRvIGZldGNoOiAlUyIKICAgICAgKGxldCAo KGRlZmF1bHQtZGlyZWN0b3J5IHBrZy1kaXIpKQogICAgICAgICh2Yy1wdWxsKSkpKSkKCihkZWZ1 biBwYWNrYWdlLXZjLS1hcmNoaXZlcy1pbml0aWFsaXplICgpCiAgIkluaXRpYWxpemUgcGFja2Fn ZS5lbCBhbmQgZmV0Y2ggcGFja2FnZSBzcGVjaWZpY2F0aW9ucy4iCiAgKHBhY2thZ2UtLWFyY2hp dmVzLWluaXRpYWxpemUpCiAgKHVubGVzcyBwYWNrYWdlLXZjLS1hcmNoaXZlLWRhdGEtYWxpc3QK ICAgIChwYWNrYWdlLXZjLS1kb3dubG9hZC1hbmQtcmVhZC1hcmNoaXZlcykpKQoKKGRlZnVuIHBh Y2thZ2UtdmMtLXJlbGVhc2UtcmV2IChwa2ctZGVzYykKICAiUmV0dXJuIHRoZSBsYXRlc3QgcmV2 aXNpb24gdGhhdCBidW1wcyB0aGUgXCJWZXJzaW9uXCIgdGFnIGZvciBQS0ctREVTQy4KSWYgbm8g c3VjaCByZXZpc2lvbiBjYW4gYmUgZm91bmQsIHJldHVybiBuaWwuIgogICh3aXRoLWN1cnJlbnQt YnVmZmVyIChmaW5kLWZpbGUtbm9zZWxlY3QgKHBhY2thZ2UtdmMtLW1haW4tZmlsZSBwa2ctZGVz YykpCiAgICAodmMtYnVmZmVyLXN5bmMpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkKICAgICAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggdCkpCiAgICAg ICAgKHdoZW4gKGNvbmQKICAgICAgICAgICAgICAgKChyZS1zZWFyY2gtZm9yd2FyZAogICAgICAg ICAgICAgICAgIChjb25jYXQgKGxtLWdldC1oZWFkZXItcmUgInBhY2thZ2UtdmVyc2lvbiIpICIu KiQiKQogICAgICAgICAgICAgICAgIChsbS1jb2RlLXN0YXJ0KSB0KSkKICAgICAgICAgICAgICAg KChyZS1zZWFyY2gtZm9yd2FyZAogICAgICAgICAgICAgICAgIChjb25jYXQgKGxtLWdldC1oZWFk ZXItcmUgInZlcnNpb24iKSAiLiokIikKICAgICAgICAgICAgICAgICAobG0tY29kZS1zdGFydCkg dCkpKQogICAgICAgICAgKGlnbm9yZS1lcnJvciB2Yy1ub3Qtc3VwcG9ydGVkCiAgICAgICAgICAg ICh2Yy1jYWxsLWJhY2tlbmQgKHZjLWJhY2tlbmQgKGJ1ZmZlci1maWxlLW5hbWUpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdsYXN0LWNoYW5nZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChidWZmZXItZmlsZS1uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs aW5lLW51bWJlci1hdC1wb3MgbmlsIHQpKSkpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHBh Y2thZ2UtdmMtaW5zdGFsbCAocGFja2FnZSAmb3B0aW9uYWwgcmV2IGJhY2tlbmQgbmFtZSkKICAi RmV0Y2ggYSBQQUNLQUdFIGFuZCBzZXQgaXQgdXAgZm9yIHVzaW5nIHdpdGggRW1hY3MuCgpJZiBQ QUNLQUdFIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gVVJMLCBkb3dubG9hZCB0aGUgcGFja2Fn ZQpmcm9tIHRoZSByZXBvc2l0b3J5IGF0IHRoYXQgVVJMOyB0aGUgZnVuY3Rpb24gd2lsbCB0cnkg dG8gZ3Vlc3MKdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgZnJvbSB0aGUgVVJMLiAgVGhpcyBjYW4g YmUgb3ZlcnJpZGRlbiBieQpwYXNzaW5nIHRoZSBvcHRpb25hbCBhcmd1bWVudCBOQU1FLiAgSWYg UEFDS0FHRSBpcyBhIGNvbnMtY2VsbCwKaXQgc2hvdWxkIGhhdmUgdGhlIGZvcm0gKE5BTUUgLiBT UEVDKSwgd2hlcmUgTkFNRSBpcyBhIHN5bWJvbAppbmRpY2F0aW5nIHRoZSBwYWNrYWdlIG5hbWUg YW5kIFNQRUMgaXMgYSBwbGlzdCBhcyBkZXNjcmliZWQgaW4KYHBhY2thZ2UtdmMtc2VsZWN0ZWQt cGFja2FnZXMnLiAgT3RoZXJ3aXNlIFBBQ0tBR0Ugc2hvdWxkIGJlIGEKc3ltYm9sIHdob3NlIG5h bWUgaXMgdGhlIHBhY2thZ2UgbmFtZSwgYW5kIHRoZSBVUkwgZm9yIHRoZQpwYWNrYWdlIHdpbGwg YmUgdGFrZW4gZnJvbSB0aGUgcGFja2FnZSdzIG1ldGFkYXRhLgoKQnkgZGVmYXVsdCwgdGhpcyBm dW5jdGlvbiBpbnN0YWxscyB0aGUgbGFzdCByZXZpc2lvbiBvZiB0aGUKcGFja2FnZSBhdmFpbGFi bGUgZnJvbSBpdHMgcmVwb3NpdG9yeS4gIElmIFJFViBpcyBhIHN0cmluZywgaXQKZGVzY3JpYmVz IHRoZSByZXZpc2lvbiB0byBpbnN0YWxsLCBhcyBpbnRlcnByZXRlZCBieSB0aGUgVkMKYmFja2Vu ZC4gIFRoZSBzcGVjaWFsIHZhbHVlIGA6bGFzdC1yZWxlYXNlJyAoaW50ZXJhY3RpdmVseSwgdGhl CnByZWZpeCBhcmd1bWVudCksIHdpbGwgdXNlIHRoZSBjb21taXQgb2YgdGhlIGxhdGVzdCByZWxl YXNlLCBpZgppdCBleGlzdHMuICBUaGUgbGFzdCByZWxlYXNlIGlzIHRoZSBsYXRlc3QgcmV2aXNp b24gd2hpY2ggY2hhbmdlZAp0aGUgXCJWZXJzaW9uOlwiIGhlYWRlciBvZiB0aGUgcGFja2FnZSdz IG1haW4gTGlzcCBmaWxlLgoKT3B0aW9uYWwgYXJndW1lbnQgQkFDS0VORCBzcGVjaWZpZXMgdGhl IFZDIGJhY2tlbmQgdG8gdXNlIGZvciBjbG9uaW5nCnRoZSBwYWNrYWdlJ3MgcmVwb3NpdG9yeTsg dGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIE5BTUUtT1ItVVJMIGlzIGEgVVJMLAphIHN0cmluZy4g IElmIEJBQ0tFTkQgaXMgb21pdHRlZCBvciBuaWwsIHRoZSBmdW5jdGlvbgp1c2VzIGBwYWNrYWdl LXZjLWhldXJpc3RpYy1hbGlzdCcgdG8gZ3Vlc3MgdGhlIGJhY2tlbmQuCk5vdGUgdGhhdCBieSBk ZWZhdWx0LCBhIFZDIHBhY2thZ2Ugd2lsbCBiZSBwcmlvcml0aXplZCBvdmVyIGEKcmVndWxhciBw YWNrYWdlLCBidXQgaXQgd2lsbCBub3QgcmVtb3ZlIGEgVkMgcGFja2FnZS4KClwoZm4gUEFDS0FH RSAmb3B0aW9uYWwgUkVWIEJBQ0tFTkQpIgogIChpbnRlcmFjdGl2ZQogICAocHJvZ24KICAgICA7 OyBJbml0aWFsaXplIHRoZSBwYWNrYWdlIHN5c3RlbSB0byBnZXQgdGhlIGxpc3Qgb2YgcGFja2Fn ZQogICAgIDs7IHN5bWJvbHMgZm9yIGNvbXBsZXRpb24uCiAgICAgKHBhY2thZ2UtdmMtLWFyY2hp dmVzLWluaXRpYWxpemUpCiAgICAgKGxldCogKChuYW1lLW9yLXVybCAocGFja2FnZS12Yy0tcmVh ZC1wYWNrYWdlLW5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAiRmV0Y2ggYW5kIGluc3Rh bGwgcGFja2FnZTogIiB0KSkKICAgICAgICAgICAgKG5hbWUgKGZpbGUtbmFtZS1iYXNlIChkaXJl Y3RvcnktZmlsZS1uYW1lIG5hbWUtb3ItdXJsKSkpKQogICAgICAgKHdoZW4gKHN0cmluZy1lbXB0 eS1wIG5hbWUpCiAgICAgICAgICh1c2VyLWVycm9yICJFbXB0eSBwYWNrYWdlIG5hbWUiKSkKICAg ICAgIChsaXN0IG5hbWUtb3ItdXJsCiAgICAgICAgICAgICAoYW5kIGN1cnJlbnQtcHJlZml4LWFy ZyA6bGFzdC1yZWxlYXNlKQogICAgICAgICAgICAgbmlsCiAgICAgICAgICAgICAoaW50ZXJuIChz dHJpbmctcmVtb3ZlLXByZWZpeCAiZW1hY3MtIiBuYW1lKSkpKSkpCiAgKHBhY2thZ2UtdmMtLWFy Y2hpdmVzLWluaXRpYWxpemUpCiAgKGNvbmQKICAgKChudWxsIHBhY2thZ2UpCiAgICAoc2lnbmFs ICd3cm9uZy10eXBlLWFyZ3VtZW50IG5pbCkpCiAgICgoY29uc3AgcGFja2FnZSkKICAgIChwYWNr YWdlLXZjLS11bnBhY2sKICAgICAocGFja2FnZS1kZXNjLWNyZWF0ZSA6bmFtZSAoY2FyIHBhY2th Z2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOmtpbmQgJ3ZjKQogICAgIChjZHIgcGFja2Fn ZSkKICAgICByZXYpKQogICAoKGFuZC1sZXQqICgoKHN0cmluZ3AgcGFja2FnZSkpCiAgICAgICAg ICAgICAgIChiYWNrZW5kIChvciBiYWNrZW5kIChwYWNrYWdlLXZjLS1ndWVzcy1iYWNrZW5kIHBh Y2thZ2UpKSkpCiAgICAgIChwYWNrYWdlLXZjLS11bnBhY2sKICAgICAgIChwYWNrYWdlLWRlc2Mt Y3JlYXRlCiAgICAgICAgOm5hbWUgKG9yIG5hbWUgKGludGVybiAoZmlsZS1uYW1lLWJhc2UgcGFj a2FnZSkpKQogICAgICAgIDpraW5kICd2YykKICAgICAgIChsaXN0IDp2Yy1iYWNrZW5kIGJhY2tl bmQgOnVybCBwYWNrYWdlKQogICAgICAgcmV2KSkpCiAgICgoYW5kLWxldCogKChkZXNjIChhc3Nv YyBwYWNrYWdlIHBhY2thZ2UtYXJjaGl2ZS1jb250ZW50cyAjJ3N0cmluZz0pKSkKICAgICAgKHBh Y2thZ2UtdmMtLXVucGFjawogICAgICAgKGNhZHIgZGVzYykKICAgICAgIChvciAocGFja2FnZS12 Yy0tZGVzYy0+c3BlYyAoY2FkciBkZXNjKSkKICAgICAgICAgICAoYW5kLWxldCogKChleHRyYXMg KHBhY2thZ2UtZGVzYy1leHRyYXMgKGNhZHIgZGVzYykpKQogICAgICAgICAgICAgICAgICAgICAg KHVybCAoYWxpc3QtZ2V0IDp1cmwgZXh0cmFzKSkKICAgICAgICAgICAgICAgICAgICAgIChiYWNr ZW5kIChwYWNrYWdlLXZjLS1ndWVzcy1iYWNrZW5kIHVybCkpKQogICAgICAgICAgICAgKGxpc3Qg OnZjLWJhY2tlbmQgYmFja2VuZCA6dXJsIHVybCkpCiAgICAgICAgICAgKHVzZXItZXJyb3IgIlBh Y2thZ2UgYCVzJyBoYXMgbm8gVkMgZGF0YSIgcGFja2FnZSkpCiAgICAgICByZXYpKSkKICAgKCh1 c2VyLWVycm9yICJVbmtub3duIHBhY2thZ2UgdG8gZmV0Y2g6ICVzIiBwYWNrYWdlKSkpKQoKOzs7 IyMjYXV0b2xvYWQKKGRlZnVuIHBhY2thZ2UtdmMtY2hlY2tvdXQgKHBrZy1kZXNjIGRpcmVjdG9y eSAmb3B0aW9uYWwgcmV2KQogICJDbG9uZSB0aGUgc291cmNlcyBmb3IgUEtHLURFU0MgaW50byBE SVJFQ1RPUlkgYW5kIHZpc2l0IHRoYXQgZGlyZWN0b3J5LgpVbmxpa2UgYHBhY2thZ2UtdmMtaW5z dGFsbCcsIHRoaXMgZG9lcyBub3QgeWV0IHNldCB1cCB0aGUgcGFja2FnZQpmb3IgdXNlIHdpdGgg RW1hY3M7IHVzZSBgcGFja2FnZS12Yy1pbnN0YWxsLWZyb20tY2hlY2tvdXQnIGZvcgpzZXR0aW5n IHRoZSBwYWNrYWdlIHVwIGFmdGVyIHRoaXMgZnVuY3Rpb24gZmluaXNoZXMuICBPcHRpb25hbAph cmd1bWVudCBSRVYgbWVhbnMgdG8gY2xvbmUgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwYWNr YWdlOyBpdApkZWZhdWx0cyB0byB0aGUgbGFzdCB2ZXJzaW9uIGF2YWlsYWJsZSBmcm9tIHRoZSBw YWNrYWdlJ3MKcmVwb3NpdG9yeS4gIElmIFJFViBoYXMgdGhlIHNwZWNpYWwgdmFsdWUKYDpsYXN0 LXJlbGVhc2UnIChpbnRlcmFjdGl2ZWx5LCB0aGUgcHJlZml4IGFyZ3VtZW50KSwgdGhhdCBzdGFu ZHMKZm9yIHRoZSBsYXN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuIgogIChpbnRl cmFjdGl2ZQogICAobGV0KiAoKG5hbWUgKHBhY2thZ2UtdmMtLXJlYWQtcGFja2FnZS1uYW1lICJG ZXRjaCBwYWNrYWdlIHNvdXJjZTogIikpKQogICAgIChsaXN0IChjYWRyIChhc3NvYyBuYW1lIHBh Y2thZ2UtYXJjaGl2ZS1jb250ZW50cyAjJ3N0cmluZz0pKQogICAgICAgICAgIChyZWFkLWZpbGUt bmFtZSAiQ2xvbmUgaW50byBuZXcgb3IgZW1wdHkgZGlyZWN0b3J5OiAiIG5pbCBuaWwgdCBuaWwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZGlyKSAob3IgKG5vdCAoZmlsZS1l eGlzdHMtcCBkaXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZGlyZWN0b3J5LWVtcHR5LXAgZGlyKSkpKQogICAgICAgICAgIChhbmQgY3VycmVudC1wcmVm aXgtYXJnIDpsYXN0LXJlbGVhc2UpKSkpCiAgKHBhY2thZ2UtdmMtLWFyY2hpdmVzLWluaXRpYWxp emUpCiAgKGxldCAoKHBrZy1zcGVjIChvciAocGFja2FnZS12Yy0tZGVzYy0+c3BlYyBwa2ctZGVz YykKICAgICAgICAgICAgICAgICAgICAgIChhbmQtbGV0KiAoKGV4dHJhcyAocGFja2FnZS1kZXNj LWV4dHJhcyBwa2ctZGVzYykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cmwg KGFsaXN0LWdldCA6dXJsIGV4dHJhcykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChiYWNrZW5kIChwYWNrYWdlLXZjLS1ndWVzcy1iYWNrZW5kIHVybCkpKQogICAgICAgICAgICAg ICAgICAgICAgICAobGlzdCA6dmMtYmFja2VuZCBiYWNrZW5kIDp1cmwgdXJsKSkKICAgICAgICAg ICAgICAgICAgICAgICh1c2VyLWVycm9yICJQYWNrYWdlIGAlcycgaGFzIG5vIFZDIGRhdGEiCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2FnZS1kZXNjLW5hbWUgcGtnLWRl c2MpKSkpKQogICAgKHBhY2thZ2UtdmMtLWNsb25lIHBrZy1kZXNjIHBrZy1zcGVjIGRpcmVjdG9y eSByZXYpCiAgICAoZmluZC1maWxlIGRpcmVjdG9yeSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVu IHBhY2thZ2UtdmMtaW5zdGFsbC1mcm9tLWNoZWNrb3V0IChkaXIgbmFtZSkKICAiU2V0IHVwIHRo ZSBwYWNrYWdlIE5BTUUgaW4gRElSIGJ5IGxpbmtpbmcgaXQgaW50byB0aGUgRUxQQSBkaXJlY3Rv cnkuCkludGVyYWN0aXZlbHksIHByb21wdCB0aGUgdXNlciBmb3IgRElSLCB3aGljaCBzaG91bGQg YmUgYSBkaXJlY3RvcnkKdW5kZXIgdmVyc2lvbiBjb250cm9sLCB0eXBpY2FsbHkgb25lIGNyZWF0 ZWQgYnkgYHBhY2thZ2UtdmMtY2hlY2tvdXQnLgpJZiBpbnZva2VkIGludGVyYWN0aXZlbHkgd2l0 aCBhIHByZWZpeCBhcmd1bWVudCwgcHJvbXB0IHRoZSB1c2VyCmZvciB0aGUgTkFNRSBvZiB0aGUg cGFja2FnZSB0byBzZXQgdXAuICBPdGhlcndpc2UgaW5mZXIgdGhlIHBhY2thZ2UKbmFtZSBmcm9t IHRoZSBiYXNlIG5hbWUgb2YgRElSLiIKICAoaW50ZXJhY3RpdmUgKGxldCAoKGRpciAocmVhZC1k aXJlY3RvcnktbmFtZSAiRGlyZWN0b3J5OiAiKSkpCiAgICAgICAgICAgICAgICAgKGxpc3QgZGly CiAgICAgICAgICAgICAgICAgICAgICAgKGlmIGN1cnJlbnQtcHJlZml4LWFyZwogICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVhZC1zdHJpbmcgIlBhY2thZ2UgbmFtZTogIikKICAgICAgICAg ICAgICAgICAgICAgICAgIChmaWxlLW5hbWUtYmFzZSAoZGlyZWN0b3J5LWZpbGUtbmFtZSBkaXIp KSkpKSkKICAodW5sZXNzICh2Yy1yZXNwb25zaWJsZS1iYWNrZW5kIGRpcikKICAgICh1c2VyLWVy cm9yICJEaXJlY3RvcnkgJVMgaXMgbm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIgZGlyKSkKICAo cGFja2FnZS12Yy0tYXJjaGl2ZXMtaW5pdGlhbGl6ZSkKICAobGV0KiAoKG5hbWUgKG9yIG5hbWUg KGZpbGUtbmFtZS1iYXNlIChkaXJlY3RvcnktZmlsZS1uYW1lIGRpcikpKSkKICAgICAgICAgKHBr Zy1kaXIgKGV4cGFuZC1maWxlLW5hbWUgbmFtZSBwYWNrYWdlLXVzZXItZGlyKSkpCiAgICAod2hl biAoZmlsZS1leGlzdHMtcCBwa2ctZGlyKQogICAgICAoaWYgKHllcy1vci1uby1wIChmb3JtYXQg Ik92ZXJ3cml0ZSBwcmV2aW91cyBjaGVja291dCBmb3IgcGFja2FnZSBgJXMnPyIgbmFtZSkpCiAg ICAgICAgICAocGFja2FnZS0tZGVsZXRlLWRpcmVjdG9yeSBwa2ctZGlyKQogICAgICAgIChlcnJv ciAiVGhlcmUgYWxyZWFkeSBleGlzdHMgYSBjaGVja291dCBmb3IgJXMiIG5hbWUpKSkKICAgICht YWtlLXN5bWJvbGljLWxpbmsgKGV4cGFuZC1maWxlLW5hbWUgZGlyKSBwa2ctZGlyKQogICAgKHBh Y2thZ2UtdmMtLXVucGFjay0xCiAgICAgKHBhY2thZ2UtZGVzYy1jcmVhdGUKICAgICAgOm5hbWUg KGludGVybiBuYW1lKQogICAgICA6ZGlyIHBrZy1kaXIKICAgICAgOmtpbmQgJ3ZjKQogICAgIChm aWxlLW5hbWUtYXMtZGlyZWN0b3J5IHBrZy1kaXIpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4g cGFja2FnZS12Yy1yZWJ1aWxkIChwa2ctZGVzYykKICAiUmVidWlsZCB0aGUgaW5zdGFsbGF0aW9u IGZvciBwYWNrYWdlIGdpdmVuIGJ5IFBLRy1ERVNDLgpSZWJ1aWxkaW5nIGFuIGluc3RhbGxhdGlv biBtZWFucyBzY3JhcGluZyBmb3IgbmV3IGF1dG9sb2FkCmNvb2tpZXMsIHJlLWNvbXBpbGluZyBF bWFjcyBMaXNwIGZpbGVzLCBidWlsZGluZyBhbmQgaW5zdGFsbGluZwphbnkgZG9jdW1lbnRhdGlv biwgZG93bmxvYWRpbmcgYW55IG1pc3NpbmcgZGVwZW5kZW5jaWVzLiAgVGhpcwpjb21tYW5kIGRv ZXMgbm90IGZldGNoIG5ldyByZXZpc2lvbnMgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIuICBUaGF0Cmlz IHRoZSByZXNwb25zaWJpbGl0eSBvZiBgcGFja2FnZS12Yy11cGdyYWRlJy4gIEludGVyYWN0aXZl bHksCnByb21wdCBmb3IgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gcmVidWlsZC4iCiAgKGlu dGVyYWN0aXZlIChsaXN0IChwYWNrYWdlLXZjLS1yZWFkLXBhY2thZ2UtZGVzYyAiUmVidWlsZCBw YWNrYWdlOiAiIHQpKSkKICAocGFja2FnZS12Yy0tdW5wYWNrLTEgcGtnLWRlc2MgKHBhY2thZ2Ut ZGVzYy1kaXIgcGtnLWRlc2MpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBwYWNrYWdlLXZjLXBy ZXBhcmUtcGF0Y2ggKHBrZy1kZXNjIHN1YmplY3QgcmV2aXNpb25zKQogICJTZW5kIHBhdGNoIGZv ciBSRVZJU0lPTlMgdG8gbWFpbnRhaW5lciBvZiB0aGUgcGFja2FnZSBQS0cgdXNpbmcgU1VCSkVD VC4KVGhlIGZ1bmN0aW9uIHVzZXMgYHZjLXByZXBhcmUtcGF0Y2gnLCBwYXNzaW5nIFNVQkpFQ1Qg YW5kClJFVklTSU9OUyBkaXJlY3RseS4gIFBLRy1ERVNDIG11c3QgYmUgYSBwYWNrYWdlIGRlc2Ny aXB0aW9uLgpJbnRlcmFjdGl2ZWx5LCBwcm9tcHQgZm9yIFBLRy1ERVNDLCBTVUJKRUNULCBhbmQg UkVWSVNJT05TLiAgV2hlbgppbnZva2VkIHdpdGggYSBudW1lcmljYWwgcHJlZml4IGFyZ3VtZW50 LCB1c2UgdGhlIGxhc3QgTgpyZXZpc2lvbnMuICBXaGVuIGludm9rZWQgaW50ZXJhY3RpdmVseSBp biBhIExvZyBWaWV3IGJ1ZmZlciB3aXRoCm1hcmtlZCByZXZpc2lvbnMsIHVzZSB0aG9zZS4iCiAg KGludGVyYWN0aXZlCiAgIChsaXN0IChwYWNrYWdlLXZjLS1yZWFkLXBhY2thZ2UtZGVzYyAiUGFj a2FnZSB0byBwcmVwYXJlIGEgcGF0Y2ggZm9yOiAiIHQpCiAgICAgICAgIChhbmQgKG5vdCB2Yy1w cmVwYXJlLXBhdGNoZXMtc2VwYXJhdGVseSkKICAgICAgICAgICAgICAocmVhZC1zdHJpbmcgIlN1 YmplY3Q6ICIgIltQQVRDSF0gIiBuaWwgbmlsIHQpKQogICAgICAgICAodmMtcHJlcGFyZS1wYXRj aC1wcm9tcHQtcmV2aXNpb25zKSkpCiAgKGxldCAoKGRlZmF1bHQtZGlyZWN0b3J5IChwYWNrYWdl LWRlc2MtZGlyIHBrZy1kZXNjKSkpCiAgICAodmMtcHJlcGFyZS1wYXRjaCAocGFja2FnZS1tYWlu dGFpbmVycyBwa2ctZGVzYyB0KQogICAgICAgICAgICAgICAgICAgICAgc3ViamVjdCByZXZpc2lv bnMpKSkKCihwcm92aWRlICdwYWNrYWdlLXZjKQo7OzsgcGFja2FnZS12Yy5lbCBlbmRzIGhlcmUK AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAA= --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-elpa-packages-package-package-vc-New-packages.patch >From 3834109bf379fae333b60adf49dd119bd538635a Mon Sep 17 00:00:00 2001 From: Philip Kaludercic Date: Fri, 18 Aug 2023 20:33:24 +0200 Subject: [PATCH] * elpa-packages (package,package-vc): New packages --- elpa-packages | 2 ++ 1 file changed, 2 insertions(+) diff --git a/elpa-packages b/elpa-packages index 3949d8fe14..ced827955b 100644 --- a/elpa-packages +++ b/elpa-packages @@ -521,7 +521,9 @@ (paced :url "bzr::bzr://bzr.savannah.nongnu.org/paced-el/trunk" ;; The Bzr<->Git bridge wasn't working well enough last time I tried. :manual-sync t) + (package :core "lisp/emacs-lisp/package.el") (package-fixes :url nil) + (package-vc :core "lisp/emacs-lisp/package-vc.el") (parsec :url "https://github.com/cute-jumper/parsec.el.git") (parser-generator :url "https://github.com/cjohansson/emacs-parser-generator") (path-iterator :url nil) -- 2.41.0 --=-=-=--