Received: from mx0.gmx.net (mx0.gmx.net [213.165.64.100]) by h1439878.stratoserver.net (8.14.2/8.14.2/Debian-2build1) with SMTP id p2G1GIW6014016 for ; Wed, 16 Mar 2011 02:16:19 +0100 Received: (qmail 30547 invoked by alias); 16 Mar 2011 01:15:59 -0000 Delivered-To: GMX delivery to rainer.schoepf@gmx.net Received: (qmail invoked by alias); 16 Mar 2011 01:15:59 -0000 Received: from relay2.uni-heidelberg.de (EHLO relay2.uni-heidelberg.de) [129.206.210.211] by mx0.gmx.net (mx042) with SMTP; 16 Mar 2011 02:15:59 +0100 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id p2G1CcCV017841 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 16 Mar 2011 02:12:38 +0100 Received: from listserv.uni-heidelberg.de (localhost.localdomain [127.0.0.1]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p2FN13Ek029216; Wed, 16 Mar 2011 02:12:26 +0100 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 1234734 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Wed, 16 Mar 2011 02:12:26 +0100 Received: from relay2.uni-heidelberg.de (relay2.uni-heidelberg.de [129.206.210.211]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p2G1CQSJ005870 for ; Wed, 16 Mar 2011 02:12:26 +0100 Received: from mail-yx0-f177.google.com (mail-yx0-f177.google.com [209.85.213.177]) by relay2.uni-heidelberg.de (8.13.8/8.13.8) with ESMTP id p2G1CHJl017775 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=FAIL) for ; Wed, 16 Mar 2011 02:12:21 +0100 Received: by yxh35 with SMTP id 35so780280yxh.22 for ; Tue, 15 Mar 2011 18:12:17 -0700 (PDT) MIME-Version: 1.0 Received: by 10.236.200.227 with SMTP id z63mr85826yhn.142.1300237937074; Tue, 15 Mar 2011 18:12:17 -0700 (PDT) Received: by 10.147.170.13 with HTTP; Tue, 15 Mar 2011 18:12:16 -0700 (PDT) References: <905C5ED0-6639-4DEB-95AC-A2FCB2C4491D@gmail.com> <935A1EA2-C971-4A3A-8DF4-6F890E0CFB32@gmail.com> <5256FD2C-CD53-4FF0-A405-5B8B2781E5EC@gmail.com> Content-Type: multipart/mixed; boundary=20cf303f6c645ce1d8049e8f3cff X-Spam-Whitelist: Message-ID: Date: Tue, 15 Mar 2011 21:12:16 -0400 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Bruno Le Floch Subject: Re: expl3's seq_pop_right etc. To: LATEX-L@listserv.uni-heidelberg.de In-Reply-To: Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=5D7Q89H36p4WX0t+AtsdW2ORvUlAfcdS0skAdU0CyDpncVxtUMPpOqI3gH81aZIXD1cH3 5ETx5RtA06hG3EktnRGhfE2oxt+RU0e7F8YpJ9eB28exjgx7xl4PJV7d6l42PTMYFOttFGsL2SlK x2C0A==V1; X-Resent-By: Forwarder X-Resent-For: rainer.schoepf@gmx.net X-Resent-To: rainer@rainer-schoepf.de Status: R X-Status: X-Keywords: X-UID: 6676 --20cf303f6c645ce1d8049e8f3cff Content-Type: text/plain; charset=ISO-8859-1 Hi, I'm attaching to this email an alternative version of l3seq, where sequences are stored as \seq_elt:n {}. Since it's a dtx, hopefully there is enough comments in the file to follow the code, but a quick overview. FYI, the ins file is at the bottom of this email, and to test the package, I just make a symbolic link l3seq.sty->seq-one-braces.sty and then \usepackage{expl3}. - items can be any balanced text, no brace will be stripped - I don't like the fact that \seq_(g)pop return its value locally, so I changed which functions are provided there to \seq_pop_with:Nn {}. - The mappings are fairly optimized as far as I can tell, and should be preferred to doing things one element at a time. - I expect the pop_right functions to be much faster for large sequences than simply storing the elements one by one. - I made extensive use of breaks, and it could be useful to generalize that a bit. - I'd like every "..._map_function:NN" to become "..._map_function:Nn", i.e. allow mapping several tokens at a time. It isn't difficult to adapt the code for that, and it would be quite practical, since among the mappings, only the "map_function" are expandable. For that reason, "\seq_map_function:NN" is not defined in the file I attach. > I'm not so fussed about the edge cases with mismatched conditionals, but the > {{{{{{a}}}}}} problem is more serious. I'll look into it. More troubling: \quark_if_recursion_tail_stop:n {{aa}}. > I haven't seen that catcode trick for comparing emptiness -- > is it any better than \tl_if_empty ? It should perform identically (+/- 5%?), and behave in the same way. > Surely the break has to come at the end so that any \seq_map_break:n puts > its argument after all the cleanup? In the implementation attached to this email, a breaking looks like \seq_break:n {} \seq_break_point:n {} and executes before . In the absence of break, is also run, because \seq_break_point:n is \use:n. > This reminds me that after I implemented the break using a gobbling-up-until > marker, I realised it would have been more in the spirit of the seq code to > just define > > \cs_set:Npn \seq_elt:w #1 \seq_elt_end: {} Since I'd like every "map_function" to be expandable, that method cannot be used in general. Although, it would be nice, and appears to be just as quick. >>>> I did a quick comparison, and it seems like the delimited-argument search >>>> is around about 10-20 times faster than mapping, even for relatively large >>>> seqs (several thousand (small) elements, which takes a surprisingly long >>>> time to create using \seq_push:Nn). Using \seq_push:Nn one element at a time is very slow: the whole sequence is "unpacked" each time we add an element. The best way to use sequences is to map through them. To create a large sequence, your best bet is \prg_replicate:nn. Regards, Bruno % =========== .ins file ======================== \input docstrip.tex \askforoverwritefalse \preamble \endpreamble \postamble \endpostamble \keepsilent \generate{\file{seq-one-braces.sty}{\from{seq-one-braces.dtx}{package,trace}}} \endbatchfile --20cf303f6c645ce1d8049e8f3cff Content-Type: text/x-tex; charset=US-ASCII; name="seq-one-braces.dtx" Content-Disposition: attachment; filename="seq-one-braces.dtx" Content-Transfer-Encoding: base64 X-Attachment-Id: file2 JSBcaWZmYWxzZQolJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlCiUlIE1vZGlmaWVkIGZyb20gbDNzZXEuZHR4IChM YVRlWDMgcHJvamVjdCkgYnkgQnJ1bm8gTGUgRmxvY2guCiUlCiUlIFRoZSBvcmlnaW5hbCBjb2Rl IHdhcyB1bmRlciB0aGUgTFBQTCwgc28gSSBndWVzcyB0aGF0IG9uZSBhcyB3ZWxsLgolJQolJSBJ ZiBpdCBpcyBtZXJnZWQgYXMgbDNzZXEsIHRoZSBwcmVhbWJsZSAodW50aWwgYW5kIGluY2x1ZGlu ZyB0aGUgdGl0bGUpCiUlIHNob3VsZCBiZSByZXZlcnRlZCB0byB0aGUgY3VycmVudCBsM3NlcSBv bmUuCiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUKJQolPCpkcml2ZXJ8cGFja2FnZT4KXFJlcXVpcmVQYWNrYWdl e2wzbmFtZXN9CiU8L2RyaXZlcnxwYWNrYWdlPgolXGZpClxHZXRJZEluZm8kSWQ6IHNlcS1vbmUt YnJhY2VzLmR0eCAxODc5IDIwMTAtMDMtMjkgMTc6NDg6MzhaIGJydW5vICQKICAgICAgICAgIHtT ZXF1ZW5jZXMgYW5kIHN0YWNrcyB3aXRoIG9uZSBtYXJrZXIsIGJyYWNlZCBlbGVtZW50cy59CiVc aWZmYWxzZQolPCpkcml2ZXI+CiVcZmkKXFByb3ZpZGVzRmlsZXtcZmlsZW5hbWUuXGZpbGVuYW1l ZXh0fQogIFtcZmlsZWRhdGVcc3BhY2UgdlxmaWxldmVyc2lvblxzcGFjZVxmaWxlZGVzY3JpcHRp b25dCiVcaWZmYWxzZQpcZG9jdW1lbnRjbGFzc1tmdWxsXXtsM2RvY30KXGJlZ2lue2RvY3VtZW50 fQpcRG9jSW5wdXR7XGZpbGVuYW1lLlxmaWxlbmFtZWV4dH0KXGVuZHtkb2N1bWVudH0KJTwvZHJp dmVyPiAKJSBcZmkKJQolCiUgXHRpdGxle1RoZSBcdGV4dHNme3NlcS1vbmUtYnJhY2VzfSBwYWNr YWdlIGJhc2VkIG9uIAolICAgXHRleHRzZntsM3NlcX1cdGhhbmtze1RoaXMgZmlsZQolICAgICAg ICAgaGFzIHZlcnNpb24gbnVtYmVyIFxmaWxldmVyc2lvbiwgbGFzdAolICAgICAgICAgcmV2aXNl ZCBcZmlsZWRhdGUufVxcCiUgU2VxdWVuY2VzfQolIFxhdXRob3J7XFRlYW17fSAtLS0gbW9kaWZp ZWQgYnkgQnJ1bm8gTGUgRmxvY2h9CiUgXGRhdGV7XGZpbGVkYXRlfQolIFxtYWtldGl0bGUKJSBc dGFibGVvZmNvbnRlbnRzCiUKJSAKJSBcYmVnaW57ZG9jdW1lbnRhdGlvbn0KJQolIFxMYVRlWDMg aW1wbGVtZW50cyBhIGRhdGEgdHlwZSBjYWxsZWQgYHNlcXVlbmNlcycuIFRoZXNlIGFyZSBzcGVj aWFsCiUgdG9rZW4gbGlzdHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdmlhIHNwZWNpYWwgZnVuY3Rp b25zIG9uIHRoZSBgbGVmdCcuCiUgQXBwZW5kaW5nIHRva2VucyBpcyBwb3NzaWJsZSBhdCBib3Ro IGVuZHMuIEFwcGVuZGVkIHRva2VuIGxpc3RzIGNhbiBiZQolIGFjY2Vzc2VkIG9ubHkgYXMgYSB1 bmlvbi4gIFRoZSB0b2tlbiBsaXN0cyB0aGF0IGZvcm0gdGhlIGluZGl2aWR1YWwKJSBpdGVtcyBv ZiBhIHNlcXVlbmNlIG1pZ2h0IGNvbnRhaW4gYW55IHRva2VucyBleGNlcHQgb25lIGludGVybmFs CiUgZnVuY3Rpb25zIHRoYXQgaXMgdXNlZCB0byBzdHJ1Y3R1cmUgc2VxdWVuY2VzIChzZWUgc2Vj dGlvbiBpbnRlcm5hbAolIGZ1bmN0aW9ucyBiZWxvdykuXGZvb3Rub3Rle0JydW5vOiBkb3VibGUt Y2hlY2sgdGhhdC59IAolIEl0IGlzIGFsc28gcG9zc2libGUgdG8gbWFwIGZ1bmN0aW9ucyBvbiBz dWNoCiUgc2VxdWVuY2VzIHNvIHRoYXQgdGhleSBhcmUgZXhlY3V0ZWQgZm9yIGV2ZXJ5IGl0ZW0g b24gdGhlIHNlcXVlbmNlLgolCiUgVGhlIGRlZmluZWQgZnVuY3Rpb25zIGFyZSBub3Qgb3J0aG9n b25hbCBpbiB0aGUgc2Vuc2UgdGhhdCBldmVyeQolIHBvc3NpYmxlIHZhcmlhdGlvbiBwb3NzaWJs ZSBpcyBhY3R1YWxseSBhdmFpbGFibGUuIElmIHlvdSBuZWVkIGEgbmV3CiUgdmFyaWFudCB1c2Ug dGhlIGV4cGFuc2lvbiBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBwYWNrYWdlCiUgXHRleHR0 dHtsM2V4cGFufSB0byBidWlsZCBpdC4KJQolIEFkZGluZyBpdGVtcyB0byB0aGUgbGVmdCBvZiBh IHNlcXVlbmNlIGNhbiBjdXJyZW50bHkgYmUgZG9uZSB3aXRoCiUgZWl0aGVyIHNvbWV0aGluZyBs aWtlICJcc2VxX3B1dF9sZWZ0Ok5uIiBvciB3aXRoIGEgYGBzdGFjaycnIGZ1bmN0aW9uCiUgbGlr ZSAiXHNlcV9wdXNoOk5uIiB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0LgolCiUgXHNlY3Rpb257 RnVuY3Rpb25zIGZvciBjcmVhdGluZy9pbml0aWFsaXNpbmcgc2VxdWVuY2VzfQolCiUgXGJlZ2lu e2Z1bmN0aW9ufXsgXHNlcV9uZXc6TiwgXHNlcV9uZXc6YyB9CiUgXGJlZ2lue3N5bnRheH0KJSAg ICAiXHNlcV9uZXc6TiIgPHNlcXVlbmNlPgolIFxlbmR7c3ludGF4fQolIERlZmluZXMgPHNlcXVl bmNlPiB0byBiZSBhIHZhcmlhYmxlIG9mIHR5cGUgInNlcSIuCiUgXGVuZHtmdW5jdGlvbn0KJQol IFxiZWdpbntmdW5jdGlvbn17IFxzZXFfY2xlYXI6TiwgXHNlcV9jbGVhcjpjLAolICAgICAgICAg ICAgICAgICAgXHNlcV9nY2xlYXI6TiwgXHNlcV9nY2xlYXI6YyB9CiUgXGJlZ2lue3N5bnRheH0K JSAgICJcc2VxX2NsZWFyOk4iICA8c2VxdWVuY2U+CiUgXGVuZHtzeW50YXh9CiUgVGhlc2UgZnVu Y3Rpb25zIGxvY2FsbHkgb3IgZ2xvYmFsbHkgY2xlYXIgPHNlcXVlbmNlPi4KJSBcZW5ke2Z1bmN0 aW9ufQolCiUgXGJlZ2lue2Z1bmN0aW9ufXsgXHNlcV9jbGVhcl9uZXc6TiwgXHNlcV9jbGVhcl9u ZXc6YywKJSAgICAgICAgICAgICAgICAgIFxzZXFfZ2NsZWFyX25ldzpOLCBcc2VxX2djbGVhcl9u ZXc6YyB9CiUgXGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX2NsZWFyX25ldzpOIiAgPHNlcXVlbmNl PgolIFxlbmR7c3ludGF4fQolIFRoZXNlIGZ1bmN0aW9ucyBsb2NhbGx5IG9yIGdsb2JhbGx5IGNs ZWFyIDxzZXF1ZW5jZT4gaWYgaXQgZXhpc3RzIG9yIAolIG90aGVyd2lzZSBhbGxvY2F0ZXMgaXQu CiUgXGVuZHtmdW5jdGlvbn0KJQolIFxiZWdpbntmdW5jdGlvbn17IFxzZXFfc2V0X2VxOk5OLCBc c2VxX3NldF9lcTpjTiwKJSAgICAgICAgICAgICAgICAgICBcc2VxX3NldF9lcTpOYywgXHNlcV9z ZXRfZXE6Y2MsCiUgICAgICAgICAgICAgICAgICAgXHNlcV9nc2V0X2VxOk5OLCBcc2VxX2dzZXRf ZXE6Y04sCiUgICAgICAgICAgICAgICAgICAgXHNlcV9nc2V0X2VxOk5jLCBcc2VxX2dzZXRfZXE6 Y2MgfQolIFxiZWdpbntzeW50YXh9CiUgICAiXHNlcV9zZXRfZXE6Tk4iIDxzZXExPiA8c2VxMj4K JSAgICJcc2VxX2dzZXRfZXE6Tk4iIDxzZXExPiA8c2VxMj4KJSBcZW5ke3N5bnRheH0KJSBGdW5j dGlvbnMgdGhhdCBsb2NhbGx5IG9yIGdsb2JhbGx5IG1ha2UgPHNlcTE+IGlkZW50aWNhbCB0byA8 c2VxMj4uCiUgXGVuZHtmdW5jdGlvbn0KJQolIFxiZWdpbntmdW5jdGlvbn17XHNlcV9jb25jYXQ6 Tk5OLCAgXHNlcV9jb25jYXQ6Y2NjLAolICAgICAgICAgICAgICAgICAgXHNlcV9nY29uY2F0Ok5O TiwgXHNlcV9nY29uY2F0OmNjY30KJSBcYmVnaW57c3ludGF4fQolICAgIlxzZXFfY29uY2F0Ok5O TiIgIDxzZXExPiA8c2VxMj4gPHNlcTM+CiUgICAiXHNlcV9nY29uY2F0Ok5OTiIgPHNlcTE+IDxz ZXEyPiA8c2VxMz4KJSBcZW5ke3N5bnRheH0KJSBGdW5jdGlvbiB0aGF0IGNvbmF0ZW5hdGVzIDxz ZXEyPiBhbmQgPHNlcTM+IGFuZCAKJSBsb2NhbGx5IG9yIGdsb2JhbGx5IGFzc2lnbnMgdGhlIHJl c3VsdCB0byA8c2VxMT4uCiUgXGVuZHtmdW5jdGlvbn0KJQolIFxzZWN0aW9ue0FkZGluZyBkYXRh IHRvIHNlcXVlbmNlc30KJQolIFxiZWdpbntmdW5jdGlvbn17XHNlcV9wdXRfbGVmdDpObiwgIFxz ZXFfcHV0X2xlZnQ6TlYsICAKJSAgICAgICAgICAgICAgICAgIFxzZXFfcHV0X2xlZnQ6Tm8sICBc c2VxX3B1dF9sZWZ0Ok54LAolICAgICAgICAgICAgICAgICAgXHNlcV9wdXRfbGVmdDpjbiwgIFxz ZXFfcHV0X2xlZnQ6Y1YsICAKJSAgICAgICAgICAgICAgICAgIFxzZXFfcHV0X2xlZnQ6Y299CiUg XGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX3B1dF9sZWZ0Ok5uIiA8c2VxdWVuY2U+IDx0b2tlbiBs aXN0PgolIFxlbmR7c3ludGF4fQolIExvY2FsbHkgIGFwcGVuZHMgPHRva2VuIGxpc3Q+IGFzIGEg c2luZ2xlIGl0ZW0gdG8gdGhlIGxlZnQKJSBvZiA8c2VxdWVuY2U+LiA8dG9rZW4gbGlzdD4gbWln aHQgZ2V0IGV4cGFuZGVkIGJlZm9yZQolIGFwcGVuZGluZyBhY2NvcmRpbmcgdG8gdGhlIHZhcmlh bnQuCiUgXGVuZHtmdW5jdGlvbn0KJQolIFxiZWdpbntmdW5jdGlvbn17XHNlcV9wdXRfcmlnaHQ6 Tm4sIFxzZXFfcHV0X3JpZ2h0Ok5WLCAKJSAgICAgICAgICAgICAgICAgIFxzZXFfcHV0X3JpZ2h0 Ok5vLCBcc2VxX3B1dF9yaWdodDpOeCwKJSAgICAgICAgICAgICAgICAgIFxzZXFfcHV0X3JpZ2h0 OmNuLCBcc2VxX3B1dF9yaWdodDpjViwKJSAgICAgICAgICAgICAgICAgIFxzZXFfcHV0X3JpZ2h0 OmNvfQolIFxiZWdpbntzeW50YXh9CiUgICAiXHNlcV9wdXRfcmlnaHQ6Tm4iIDxzZXF1ZW5jZT4g PHRva2VuIGxpc3Q+CiUgXGVuZHtzeW50YXh9CiUgTG9jYWxseSAgYXBwZW5kcyA8dG9rZW4gbGlz dD4gYXMgYSBzaW5nbGUgaXRlbSB0byB0aGUgcmlnaHQKJSBvZiA8c2VxdWVuY2U+LiA8dG9rZW4g bGlzdD4gbWlnaHQgZ2V0IGV4cGFuZGVkIGJlZm9yZQolIGFwcGVuZGluZyBhY2NvcmRpbmcgdG8g dGhlIHZhcmlhbnQuCiUgXGVuZHtmdW5jdGlvbn0KJQolIFxiZWdpbntmdW5jdGlvbn17XHNlcV9n cHV0X2xlZnQ6Tm4sIFxzZXFfZ3B1dF9sZWZ0Ok5WLCAKJSAgICAgICAgICAgICAgICAgIFxzZXFf Z3B1dF9sZWZ0Ok5vLCBcc2VxX2dwdXRfbGVmdDpOeCwKJSAgICAgICAgICAgICAgICAgIFxzZXFf Z3B1dF9sZWZ0OmNuLCBcc2VxX2dwdXRfbGVmdDpjViwgCiUgICAgICAgICAgICAgICAgICBcc2Vx X2dwdXRfbGVmdDpjb30KJSBcYmVnaW57c3ludGF4fQolICAgIlxzZXFfZ3B1dF9sZWZ0Ok5uIiA8 c2VxdWVuY2U+IDx0b2tlbiBsaXN0PgolIFxlbmR7c3ludGF4fQolIEdsb2JhbGx5IGFwcGVuZHMg PHRva2VuIGxpc3Q+IGFzIGEgc2luZ2xlIGl0ZW0gdG8gdGhlIGxlZnQKJSBvZiA8c2VxdWVuY2U+ LgolIFxlbmR7ZnVuY3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259e1xzZXFfZ3B1dF9yaWdodDpO biwgXHNlcV9ncHV0X3JpZ2h0Ok5WLCAKJSAgICAgICAgICAgICAgICAgIFxzZXFfZ3B1dF9yaWdo dDpObywgXHNlcV9ncHV0X3JpZ2h0Ok54LAolICAgICAgICAgICAgICAgICAgXHNlcV9ncHV0X3Jp Z2h0OmNuLCBcc2VxX2dwdXRfcmlnaHQ6Y1YsCiUgICAgICAgICAgICAgICAgICBcc2VxX2dwdXRf cmlnaHQ6Y299CiUgXGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX2dwdXRfcmlnaHQ6Tm4iIDxzZXF1 ZW5jZT4gPHRva2VuIGxpc3Q+CiUgXGVuZHtzeW50YXh9CiUgR2xvYmFsbHkgYXBwZW5kcyA8dG9r ZW4gbGlzdD4gYXMgYSBzaW5nbGUgaXRlbSB0byB0aGUgcmlnaHQKJSBvZiA8c2VxdWVuY2U+Lgol IFxlbmR7ZnVuY3Rpb259CiUKJQolIFxzZWN0aW9ue0dldHRpbmcgYW5kIHBvcHBpbmcgZWxlbWVu dHMgZnJvbSBzZXF1ZW5jZXN9CiUKJSBJdCBpcyBhbHdheXMgZmFzdGVyIHRvIG1hcCBhIGZ1bmN0 aW9uIG92ZXIgYWxsIHRoZSBpdGVtcyAKJSBvZiBhIHNlcSBpbiBvbmUgZ28gdXNpbmcgb25lIG9m IHRoZSAiXHNlcV9tYXAiIGZ1bmN0aW9ucwolIHRoYW4gdG8gZ2V0IHRoZSBpdGVtcyBvbmUgYnkg b25lIG1hbnVhbGx5IGJ5IHJlcGVhdGVkbHkgCiUgdXNpbmcgb25lIG9mIHRoZSAiXHNlcV9nZXQi IG9yICJcc2VxX3BvcCIgZnVuY3Rpb25zLiBPZgolIGNvdXJzZSwgaW4gc29tZSBzaXR1YXRpb25z IHlvdSB3aWxsIGhhdmUgdG8gdXNlIHRoZQolICJcc2VxX2dldCIgYW5kICJcc2VxX3BvcCIgZmFt aWx5IGFueXdheXMuCiUKJSBBbHNvLCBhY2Nlc3NpbmcgYSBzZXF1ZW5jZSBvbiB0aGUgbGVmdCBp cyBmYXN0ZXIgdGhhbiAKJSBhY2Nlc3NpbmcgaXQgZnJvbSB0aGUgcmlnaHQuCiUgCiUgXGJlZ2lu e2Z1bmN0aW9ufXtcc2VxX2dldF9sZWZ0Ok5OLAolICAgICAgICAgICAgICAgICAgXHNlcV9nZ2V0 X2xlZnQ6Tk4sCiUgICAgICAgICAgICAgICAgICBcc2VxX2dldF9sZWZ0X3dpdGg6Tm59CiUgXGJl Z2lue3N5bnRheH0KJSAgICAiXHNlcV9nZXRfbGVmdDpOTiIgPHNlcXVlbmNlPiA8dGwgdmFyLj4K JSAgICAiXHNlcV9nZXRfbGVmdF93aXRoOk5uIiA8c2VxdWVuY2U+IDxhc3NpZ25tZW50IGNvZGU+ CiUgXGVuZHtzeW50YXh9CiUgRnVuY3Rpb25zIHRoYXQgYXNzaWduIHRoZSBsZWZ0LW1vc3QgaXRl bSBvZiA8c2VxdWVuY2U+IHRvIHRoZQolIHRva2VuIGxpc3QgdmFyaWFibGUgPHRsIHZhci4+IG9y IHVzaW5nIHRoZSA8YXNzaWdubWVudCBjb2RlPi4KJSBUaGUgaXRlbSBpcyBub3QgcmVtb3ZlZCBm cm9tIDxzZXF1ZW5jZT4hIAolIAolIFRoZSAiX2dldDoiIGZ1bmN0aW9ucyBwZXJmb3JtIHRoZSBh c3NpZ25tZW50IGxvY2FsbHksCiUgYW5kIHRoZSAiX2dnZXQ6IiBmdW5jdGlvbnMgcGVyZm9ybSB0 aGUgYXNzaWdubWVudCBnbG9iYWxseS4KJSBUaGUgZnVuY3Rpb24gIlxzZXFfZ2V0X2xlZnRfd2l0 aDpObiIgY2FuIGJlIHVzZWQgZm9yIGZhbmNpZXIgCiUgYXNzaWdubWVudHMuIEZvciBpbnN0YW5j ZSwgb25lIGNvdWxkIGhhdmUKJSBcYmVnaW57cXVvdGV9CiUgICAiXHNlcV9nZXRfbGVmdF93aXRo Ok5uIiA8c2VxdWVuY2U+ICJ7XGNzX2dzZXQ6TnBuIFxjc19oZWFkOm4gIzF9IiAKJSBcZW5ke3F1 b3RlfQolIHRvIGRlZmluZSAiXGNzX2hlYWQ6biIgdG8gZ2xvYmFsbHkgdGFrZSBvbmUgYXJndW1l bnQsIHdpdGggYSAKJSByZXBsYWNlbWVudCB0ZXh0IGdpdmVuIGJ5IHRoZSBoZWFkIG9mIDxzZXF1 ZW5jZT4uCiUKJSBCcnVubzogc2hvdWxkICJcc2VxX2dldF9sZWZ0X3dpdGgiIGJlIGNvbnZlcnRl ZCB0byBzb21lICJtYXBfbGVmdF9pdGVtIgolIGZ1bmN0aW9uLCBhbmQgbWFkZSBleHBhbmRhYmxl PwolIFxlbmR7ZnVuY3Rpb259CiUKJQolIFxiZWdpbntmdW5jdGlvbn17XHNlcV9wb3BfbGVmdDpO LAolICAgICAgICAgICAgICAgICAgXHNlcV9ncG9wX2xlZnQ6TiwKJSAgICAgICAgICAgICAgICAg IFxzZXFfcG9wX2xlZnRfd2l0aDpObiwKJSAgICAgICAgICAgICAgICAgIFxzZXFfZ3BvcF9sZWZ0 X3dpdGg6Tm59CiUgXGJlZ2lue3N5bnRheH0KJSAgICAiXHNlcV9wb3BfbGVmdDpOIiA8c2VxdWVu Y2U+IAolICAgICJcc2VxX3BvcF9sZWZ0X3dpdGg6Tm4iIDxzZXF1ZW5jZT4gPGFzc2lnbm1lbnQg Y29kZT4KJSBcZW5ke3N5bnRheH0KJSBGdW5jdGlvbnMgdGhhdCByZW1vdmUgdGhlIGxlZnQtbW9z dCBpdGVtIG9mIDxzZXF1ZW5jZT4gCiUgKGxvY2FsbHkgZm9yICJfcG9wIiBhbmQgZ2xvYmFsbHkg Zm9yICJfZ3BvcCIpLCBhbmQgYXNzaWduCiUgaXQgdXNpbmcgPGFzc2lnbm1lbnQgY29kZT4uIFRo ZSBmb3JtZXIgY29uc3RydWN0aW9uCiUgIlxzZXFfcG9wX2xlZnQ6Tk4iIDxzZXF1ZW5jZT4gPHRs IHZhci4+IGNhbiBiZSB3cml0dGVuIGFzCiUgIlxzZXFfcG9wX2xlZnRfd2l0aDpObiIgPHNlcXVl bmNlPiAie1x0bF9zZXQ6Tm4iIDx0bCB2YXIuPiAifSIuCiUKJSBCcnVubzogbm90IHRvbyBoYXBw eSB3aXRoIHRoYXQsIGJ1dCBpdCBzZWVtcyBiZXR0ZXIgdGhhbiAKJSBmb3JjaW5nIGxvY2FsIGFz c2lnbm1lbnRzIHRvIDx0bCB2YXIuPi4KJSBcZW5ke2Z1bmN0aW9ufQolCiUKJSBcYmVnaW57ZnVu Y3Rpb259e1xzZXFfZ2V0X3JpZ2h0Ok5OLAolICAgICAgICAgICAgICAgICAgXHNlcV9nZ2V0X3Jp Z2h0Ok5OLAolICAgICAgICAgICAgICAgICAgXHNlcV9nZXRfcmlnaHRfd2l0aDpObn0KJSBcYmVn aW57c3ludGF4fQolICAgIlxzZXFfZ2V0X3JpZ2h0Ok5OIiA8c2VxdWVuY2U+IDx0bCB2YXIuPgol ICAgIlxzZXFfZ2V0X3JpZ2h0X3dpdGg6Tm4iIDxzZXF1ZW5jZT4gXG1hcmd7YXNzaWdubWVudCBj b2RlfQolIFxlbmR7c3ludGF4fQolIFNhbWUgYXMgIlxzZXFfZ2V0Ok5OIiBldCBhbC4sIGV4Y2Vw dCB0aGF0IHRoZXkgYXNzaWduIHRoZSAKJSByaWdodC1tb3N0IGVsZW1lbnQgb2YgPHNlcXVlbmNl Pi4gVGhlc2UgZnVuY3Rpb25zIGFyZSBzbG93ZXIgCiUgKGhvdyBtdWNoPyksIGFuZCBhY2Nlc3Np bmcgc2VxdWVuY2VzIGZyb20gdGhlIGxlZnQgc2hvdWxkIGJlCiUgcHJlZmVycmVkLgolIFxlbmR7 ZnVuY3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259e1xzZXFfcG9wX3JpZ2h0Ok4sCiUgICAgICAg ICAgICAgICAgICBcc2VxX2dwb3BfcmlnaHQ6TiwKJSAgICAgICAgICAgICAgICAgIFxzZXFfcG9w X3JpZ2h0X3dpdGg6Tm4sCiUgICAgICAgICAgICAgICAgICBcc2VxX2dwb3BfcmlnaHRfd2l0aDpO biwKJSAgICAgICAgICAgICAgICAgIFxzZXFfcG9wX3JpZ2h0X2F1eDpOTm59CiUgXGJlZ2lue3N5 bnRheH0KJSAgICJcc2VxX2dwb3BfcmlnaHQ6TiIgXG1ldGF7c2VxdWVuY2V9CiUgICAiXHNlcV9n cG9wX3JpZ2h0X3dpdGg6Tm4iIFxtZXRhe3NlcXVlbmNlfSBcbWFyZ3thc3NpZ25tZW50IGNvZGV9 CiUgXGVuZHtzeW50YXh9CiUgRWFybGllciwgdGhlcmUgd2FzIGEgIlxzZXFfKGcpcG9wX3JpZ2h0 Ok5OIiwgYnV0IHRoZSBuYW1lIGRpZAolIG5vdCBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIGFzc2ln bm1lbnQgb2YgdGhlIHJpZ2h0LW1vc3QgZWxlbWVudAolIHdhcyBhbHdheXMgbG9jYWwuIFRoZWly IGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgd2l0aCAKJSAiXHNlcV8oZylwb3BfcmlnaHRfd2l0aDpO biIgXG1ldGF7c2VxdWVuY2V9ICJ7XHRsX3NldDpObiIgXG1ldGF7dGwtdmFyLn0gIn0iLgolIFxl bmR7ZnVuY3Rpb259CiUgCiUgCiUgXHNlY3Rpb257TWFwcGluZyBvbiBzZXF1ZW5jZXN9CiUgCiUg XGJlZ2lue2Z1bmN0aW9ufXsgXHNlcV9tYXBfZnVuY3Rpb246Tm4sCiUgICAgICAgICAgICAgICAg ICAgXHNlcV9tYXBfZnVuY3Rpb246Y259CiUgXGJlZ2lue3N5bnRheH0KJSAgICAiXHNlcV9tYXBf ZnVuY3Rpb246Tm4iIDxzZXF1ZW5jZT4gPGZ1bmN0aW9uPgolIFxlbmR7c3ludGF4fQolIFRoaXMg ZnVuY3Rpb24gYXBwbGllcyA8ZnVuY3Rpb24+ICh3aGljaCBtdXN0IGJlIGEgZnVuY3Rpb24gd2l0 aCBvbmUKJSBhcmd1bWVudCwgYnV0IGNhbiBiZSBjb21wb3NlZCBvZiBzZXZlcmFsIHRva2Vucykg dG8gZXZlcnkgaXRlbSBvZgolIDxzZXF1ZW5jZT4uIDxmdW5jdGlvbj4gaXMgbm90IGV4ZWN1dGVk IHdpdGhpbiBhIHN1Yi1ncm91cCBzbyB0aGF0CiUgc2lkZSBlZmZlY3RzIGNhbiBiZSBhY2hpZXZl ZCBsb2NhbGx5LiBUaGUgb3BlcmF0aW9uIGlzCiUgZXhwYW5kYWJsZS5cZm9vdG5vdGV7QnJ1bm86 IG5lc3Rpbmc/fQolCiUgSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdGhlIG5leHQgZnVu Y3Rpb25zIGFyZSBtb3JlIAolIGVmZmljaWVudCBhbmQgc2hvdWxkIGJlIHByZWZlcnJlZCBpZiBl eHBhbmRhYmlsaXR5IGlzIG5vdCBhbiAKJSBpc3N1ZS4KJSBcZW5ke2Z1bmN0aW9ufQolCiUgXGJl Z2lue2Z1bmN0aW9ufXtcc2VxX21hcF92YXJpYWJsZTpOTm4sCiUgICAgICAgICAgICAgICAgICBc c2VxX21hcF92YXJpYWJsZTpjTm59CiUgXGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX21hcF92YXJp YWJsZTpOTm4iIDxzZXF1ZW5jZT4gPHRsIHZhci4+IFxBcmd7Y29kZSB1c2luZyB0bCB2YXIufQol IFxlbmR7c3ludGF4fQolIEV2ZXJ5IGVsZW1lbnQgaW4gPHNlcXVlbmNlPiBpcyBhc3NpZ25lZCB0 byA8dGwgdmFyLj4gYW5kIHRoZW4gPGNvZGUKJSB1c2luZyB0bCB2YXIuPiBpcyBleGVjdXRlZC4g VGhlIG9wZXJhdGlvbiBpcyBub3QgZXhwYW5kYWJsZSB3aGljaCBtZWFucwolIHRoYXQgaXQgY2Fu J3QgYmUgdXNlZCB3aXRoaW4gd3JpdGUgb3BlcmF0aW9ucyBldGMuXGZvb3Rub3Rle0JydW5vOiAK JSAgIG5lc3Rpbmc/fQolIFxlbmR7ZnVuY3Rpb259CiUgCiUgXGJlZ2lue2Z1bmN0aW9ufXtcc2Vx X21hcF9pbmxpbmU6Tm4sCiUgICAgICAgICAgICAgICAgICBcc2VxX21hcF9pbmxpbmU6Y259CiUg XGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX21hcF9pbmxpbmU6Tm4iIDxzZXF1ZW5jZT4gXEFyZ3tp bmxpbmUgZnVuY3Rpb259CiUgXGVuZHtzeW50YXh9CiUgQXBwbGllcyA8aW5saW5lIGZ1bmN0aW9u PiAod2hpY2ggc2hvdWxkIGJlIHRoZSBkaXJlY3QgY29kaW5nIGZvciBhCiUgZnVuY3Rpb24gd2l0 aCBvbmUgYXJndW1lbnQgKGkuZS5cIHVzZSAiIzEiIGFzIHRoZSBwbGFjZSBob2xkZXIgZm9yCiUg dGhpcyBhcmd1bWVudCkpIHRvIGV2ZXJ5IGl0ZW0gb2YgPHNlcXVlbmNlPi4gIDxpbmxpbmUgZnVu Y3Rpb24+IGlzIG5vdAolIGV4ZWN1dGVkIHdpdGhpbiBhIHN1Yi1ncm91cCBzbyB0aGF0IHNpZGUg ZWZmZWN0cyBjYW4gYmUgYWNoaWV2ZWQgbG9jYWxseS4KJSBUaGUgb3BlcmF0aW9uIGlzIG5vdCBl eHBhbmRhYmxlIHdoaWNoIG1lYW5zIHRoYXQgaXQgY2FuJ3QgYmUgdXNlZAolIHdpdGhpbiB3cml0 ZSBvcGVyYXRpb25zIGV0Yy5cZm9vdG5vdGV7QnJ1bm86IG5lc3Rpbmc/fQolIFxlbmR7ZnVuY3Rp b259CiUKJSBcYmVnaW57ZnVuY3Rpb259eyBcc2VxX2JyZWFrOiwgXHNlcV9icmVhazpuIH0KJSBc YmVnaW57c3ludGF4fQolICAgIlxzZXFfYnJlYWs6biIgXG1hcmd7Y29kZX0KJSBcZW5ke3N5bnRh eH0KJSBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gYnJlYWsgb3V0IG9mIGEgbWFwcGluZyAK JSBmdW5jdGlvbiBhdCB0aGUgcG9pbnQgb2YgZXhlY3V0aW9uLiAiXHNlcV9icmVhazpuIgolIGJy ZWFrcyBvdXQgcGxhY2VzIFxtZXRhe2NvZGV9IFxlbXBoe2FmdGVyfSBkb2luZwolIHdoaWNoZXZl ciBvcGVyYXRpb25zIGFyZSBuZWVkZWQgdG8gY2xlYW4gdXAgdGhlIG1hcHBpbmcuCiUgXGVuZHtm dW5jdGlvbn0KJQolCiUgXHNlY3Rpb257UHJlZGljYXRlcyBhbmQgY29uZGl0aW9uYWxzfQolCiUg XGJlZ2lue2Z1bmN0aW9ufXsgXHNlcV9pZl9lbXB0eV9wOk4gLyAoRVhQKSB8IAolICAgICAgICAg ICAgICAgICAgIFxzZXFfaWZfZW1wdHlfcDpjIC8gKEVYUCkgfQolIFxiZWdpbntzeW50YXh9CiUg ICAiXHNlcV9pZl9lbXB0eV9wOk4iIDxzZXF1ZW5jZT4KJSBcZW5ke3N5bnRheH0KJSBUaGlzIHBy ZWRpY2F0ZSByZXR1cm5zIGB0cnVlJyBpZiA8c2VxdWVuY2U+IGlzIGBlbXB0eScgaS5lLiwgZG9l c24ndAolIGNvbnRhaW4gYW55IGl0ZW1zLiBOb3RlIHRoYXQgdGhpcyBpcyBgZmFsc2UnIGV2ZW4g aWYgdGhlIDxzZXF1ZW5jZT4gb25seQolIGNvbnRhaW5zIGEgc2luZ2xlIGVtcHR5IGl0ZW0uCiUg XGVuZHtmdW5jdGlvbn0KJQolIFxiZWdpbntmdW5jdGlvbn17IFxzZXFfaWZfZW1wdHk6TiAvIChU RikgfAolICAgICAgICAgICAgICAgICAgIFxzZXFfaWZfZW1wdHk6YyAvIChURikgfQolIFxiZWdp bntzeW50YXh9CiUgICAiXHNlcV9pZl9lbXB0eTpOVEYiIDxzZXF1ZW5jZT4gXEFyZ3t0cnVlIGNv ZGV9IFxBcmd7ZmFsc2UgY29kZX0KJSBcZW5ke3N5bnRheH0KJSBTZXQgb2YgY29uZGl0aW9uYWxz IHRoYXQgdGVzdCB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgPHNlcXVlbmNlPgolIGlzIGVt cHR5IGFuZCBpZiBzbyBleGVjdXRlcyBlaXRoZXIgPHRydWUgY29kZT4gb3IgPGZhbHNlIGNvZGU+ LgolIFxlbmR7ZnVuY3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259eyBcc2VxX2lmX2luOk5uIC8g KFRGKSB8CiUgICAgICAgICAgICAgICAgICAgXHNlcV9pZl9pbjpOViAvIChURikgfAolICAgICAg ICAgICAgICAgICAgIFxzZXFfaWZfaW46Y24gLyAoVEYpIHwKJSAgICAgICAgICAgICAgICAgICBc c2VxX2lmX2luOmNWIC8gKFRGKSB8CiUgICAgICAgICAgICAgICAgICAgXHNlcV9pZl9pbjpjbyAv IChURikgfAolICAgICAgICAgICAgICAgICAgIFxzZXFfaWZfaW46Y3ggLyAoVEYpIH0KJSBcYmVn aW57c3ludGF4fQolICAgIlxzZXFfaWZfaW46Tm5URiIgPHNlcXVlbmNlPiBcQXJne2l0ZW19IFxB cmd7dHJ1ZSBjb2RlfSBcQXJne2ZhbHNlIGNvZGV9CiUgXGVuZHtzeW50YXh9CiUgRnVuY3Rpb25z IHRoYXQgdGVzdCBpZiA8aXRlbT4gaXMgaW4gPHNlcXVlbmNlPi4gRGVwZW5kaW5nIG9uIHRoZSBy ZXN1bHQKJSBlaXRoZXIgPHRydWUgY29kZT4gb3IgPGZhbHNlIGNvZGU+IGlzIGV4ZWN1dGVkLgol IFxlbmR7ZnVuY3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259eyBcc2VxX2lmX2luX3N0cjpObiAv IChURikgfQolIFxiZWdpbntzeW50YXh9CiUgICAiXHNlcV9pZl9pbl9zdHI6Tm5URiIgPHNlcXVl bmNlPiBcQXJne2l0ZW19IFxBcmd7dHJ1ZSBjb2RlfSBcQXJne2ZhbHNlIGNvZGV9CiUgXGVuZHtz eW50YXh9CiUgRmFzdGVyIHRoYW4gIlxzZXFfaWZfaW46Tm4iLCBidXQgaXRlbXMgYXJlIGNvbXBh cmVkIGFmdGVyCiUgYmVpbmcgcGFzc2VkIHRocm91Z2ggIlx0bF90b19zdHI6biIsIHBvc3NpYmx5 IGxlYWRpbmcgdG8gc29tZSBmYWxzZQolIHBvc2l0aXZlcyAoY2F0Y29kZXMgYXJlIG5vdCBjb21w YXJlZCkuIE9ubHkgdXNlIHRoZXNlIGZ1bmN0aW9ucyBpZgolIHNwZWVkIGlzIGFuIGlzc3VlLCBv ciBpZiB5b3Uga25vdyB0aGF0IHRoZSBpdGVtcyBpbiB5b3VyIHNlcXVlbmNlCiUgYXJlIGhhcm1s ZXNzIChlLmcuIHNlcXVlbmNlcyBvZiBpbnRlZ2VycykuCiUKJSBBbHNvLCBpbiBzb21lIHZlcnkg cmFyZSBjYXNlcyB3aGVyZSBhbiBpdGVtIGNvbnRhaW5zIHNvbWV0aGluZwolIHRoYXQgbG9va3Mg bGlrZSB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gIlxzZXFfZWx0Om4iLCB0aGVyZSBjYW4KJSBiZSBt b3JlIGZhbHNlIHBvc2l0aXZlcy4KJSBcZW5ke2Z1bmN0aW9ufQolCiUKJSBcc2VjdGlvbntNaXNj fQolIAolIFxiZWdpbntmdW5jdGlvbn17IFxzZXFfc2hvdzpOIHwKJSAgICAgICAgICAgICAgICAg ICBcc2VxX3Nob3c6YyB9CiUgXGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX3Nob3c6TiIgPHNlcXVl bmNlPgolIFxlbmR7c3ludGF4fQolIEZ1bmN0aW9uIHRoYXQgcGF1c2VzIHRoZSBjb21waWxhdGlv biBhbmQgZGlzcGxheXMgPHNlcT4gaW4gdGhlIHRlcm1pbmFsCiUgb3V0cHV0IGFuZCBpbiB0aGUg bG9nIGZpbGUuIChVc3VhbGx5IHVzZWQgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuKQolIFxlbmR7 ZnVuY3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259eyBcc2VxX2Rpc3BsYXk6TiB8CiUgICAgICAg ICAgICAgICAgICAgXHNlcV9kaXNwbGF5OmMgfQolIFxiZWdpbntzeW50YXh9CiUgICAiXHNlcV9k aXNwbGF5Ok4iIDxzZXF1ZW5jZT4KJSBcZW5ke3N5bnRheH0KJSBBcyB3aXRoICJcc2VxX3Nob3c6 TiIgYnV0IHByZXR0eSBwcmludHMgdGhlIG91dHB1dCBvbmUgbGluZSBwZXIgZWxlbWVudC4KJSBc ZW5ke2Z1bmN0aW9ufQolCiUgCiUgXGJlZ2lue2Z1bmN0aW9ufXsgXHNlcV9yZW1vdmVfYWxsX2lu Ok5uLAolICAgICAgICAgICAgICAgICAgIFxzZXFfZ3JlbW92ZV9hbGxfaW46Tm59CiUgXGJlZ2lu e3N5bnRheH0KJSAgICJcc2VxX2dyZW1vdmVfYWxsX2luOk5uIiA8c2VxdWVuY2U+IFxtYXJne2l0 ZW19CiUgXGVuZHtzeW50YXh9CiUgRnVuY3Rpb25zIHRoYXQgcmVtb3ZlIGV2ZXJ5IG9jY3VyZW5j ZSBvZiA8aXRlbT4gaW4gPHNlcXVlbmNlPiwKJSBsb2NhbGx5IG9yIGdsb2JhbGx5LgolIFxlbmR7 ZnVuY3Rpb259CiUKJQolIFxiZWdpbntmdW5jdGlvbn17IFxzZXFfcmVtb3ZlX2R1cGxpY2F0ZXM6 TiwKJSAgICAgICAgICAgICAgICAgICBcc2VxX2dyZW1vdmVfZHVwbGljYXRlczpOLAolICAgICAg ICAgICAgICAgICAgIFxzZXFfcmVtb3ZlX3N0cl9kdXBsaWNhdGVzOk4sCiUgICAgICAgICAgICAg ICAgICAgXHNlcV9ncmVtb3ZlX3N0cl9kdXBsaWNhdGVzOk4gfQolIFxiZWdpbntzeW50YXh9CiUg ICAiXHNlcV9ncmVtb3ZlX2R1cGxpY2F0ZXM6TiIgPHNlcXVlbmNlPgolIFxlbmR7c3ludGF4fQol IEZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyBhbnkgZHVwbGljYXRlIGVudHJpZXMgaW4gPHNlcXVlbmNl Pi4gCiUgVGhlICJfc3RyIiBmdW5jdGlvbnMgYXJlIGZhc3RlciwgYnV0IG9ubHkgY29tcGFyZSBz dHJpbmdzIChpLmUuLAolIHRoZSByZXN1bHQgb2YgIlx0bF90b19zdHI6biIpLCBhbmQgbWlnaHQg Y29uc2lkZXIgYXMgZHVwbGljYXRlcyAKJSB0d28gZWxlbWVudHMgd2hpY2ggaW4gZmFjdCBkaWZm ZXIuIFNlZSAiXHNlcV9pZl9pbl9zdHI6Tm4iIGZvcgolIG1vcmUgb24gdGhpcy4KJSBcZW5ke2Z1 bmN0aW9ufQolCiUKJSBcc2VjdGlvbntJbnRlcm5hbCBmdW5jdGlvbnN9CiUKJSBcYmVnaW57ZnVu Y3Rpb259e1xzZXFfaWZfZW1wdHlfZXJyOk4sCiUgICAgICAgICAgICAgICAgICBcc2VxX2lmX2Vt cHR5X2Vycl9icmVhazpOfQolIFxiZWdpbntzeW50YXh9CiUgICAiXHNlcV9pZl9lbXB0eV9lcnI6 TiIgPHNlcXVlbmNlPgolIFxlbmR7c3ludGF4fQolIFNpZ25hbHMgYW4gXExhVGVYMyBlcnJvciBp ZiA8c2VxdWVuY2U+IGlzIGVtcHR5LiBUaGUgCiUgIl9icmVhayIgdmFyaWFudCBhdHRlbXB0cyB0 byByZWNvdmVyIGJ5IGp1bXBpbmcgdG8gdGhlCiUgZW5kIG9mIHRoZSBjdXJyZW50IHNlcSBmdW5j dGlvbiAodXNpbmcgIlxzZXFfYnJlYWs6IikuCiUgXGVuZHtmdW5jdGlvbn0KJQolIFxiZWdpbntm dW5jdGlvbn17XHNlcV9wb3BfbGVmdF9hdXg6Tm5ufQolIFxiZWdpbntzeW50YXh9CiUgICAiXHNl cV9wb3BfbGVmdF9hdXg6Tm5uIiA8c2VxdWVuY2U+IDxkZWY+IDxhc3NpZ25tZW50IGNvZGU+IAol IFxlbmR7c3ludGF4fQolIEZ1bmN0aW9uIHRoYXQgYXNzaWducyB0aGUgbGVmdC1tb3N0IDxpdGVt PiBvZiA8c2VxdWVuY2U+IHVzaW5nCiUgPGFzc2lnbm1lbnQgY29kZT4gXG1hcmd7aXRlbX0gYW5k IGFzc2lnbnMgdGhlIHRhaWwgdG8gPHNlcXVlbmNlPgolIHVzaW5nIDxkZWY+LgolIFxlbmR7ZnVu Y3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259e1xzZXFfZ2V0X2xlZnRfYXV4OncsCiUgICAgICAg ICAgICAgICAgICBcc2VxX3BvcF9sZWZ0X2F1eDp3fQolIEZ1bmN0aW9ucyB1c2VkIHRvIGltcGxl bWVudCBwdXQgYW5kIGdldCBvcGVyYXRpb25zLiBUaGV5ICBhcmUgbm90IGZvcgolIG1lYW50IGZv ciBkaXJlY3QgdXNlLgolIFxlbmR7ZnVuY3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259eyBcc2Vx X3RtcDp3LCAgXHNlcV9lbHQ6biB9CiUgICAiXHNlcV9lbHQ6biIgaXMgdGhlIGJhY2stYm9uZSBv ZiBzZXF1ZW5jZXMuIEJvdGggCiUgICAiXHNlcV9lbHQ6biIgYW5kICJcc2VxX3RtcDp3IiBnZXQg c3BlY2lhbCBtZWFuaW5ncyBkdXJpbmcKJSAgIG1hcHBpbmcgb3BlcmF0aW9ucy4gVGhleSBhcmUg b3RoZXJ3aXNlIGRlZmluZWQgdG8gcHJvZHVjZQolICAgYW4gZXJyb3Igd2hlbiBleHBhbmRlZC4K JSBcZW5ke2Z1bmN0aW9ufQolCiUgXGJlZ2lue2Z1bmN0aW9ufXsgXHNlcV9icmVha19wb2ludDpu IH0KJSAgIEZsYWcgcGxhY2VkIGF0IHRoZSBwb2ludCB3aGVyZSAiXHNlcV9icmVhazoiIHNob3Vs ZCAKJSAgIGp1bXAgdG8uIEl0IHRha2VzIG9uZSBhcmd1bWVudCwgd2hpY2ggaXMgdXNlZCB0byBj bGVhbgolICAgdXAgdGhlIG1hcHBpbmcgYmVmb3JlIHRoZSBjb2RlIGdpdmVuIGJ5IHRoZSB1c2Vy IAolICAgKHR5cGljYWxseSwgY2xlYW5pbmcgdXAgaW52b2x2ZXMgcmVzdG9yaW5nIHRoZSBmb3Jt ZXIgCiUgICBkZWZpbml0aW9uIG9mICJcc2VxX2VsdDpuIiBhbmQgIlxzZXFfdG1wOnciKS4KJSBc ZW5ke2Z1bmN0aW9ufQolCiUgXGJlZ2lue2Z1bmN0aW9ufXtcc2VxX21hcF9pbmxpbmVfbGFzdDpO bm4sCiUgICAgICAgICAgICAgICAgICBcdXNlX2lpX2JpX3JlcGVhdDpubn0KJSBcYmVnaW57c3lu dGF4fQolICAgIlxzZXFfbWFwX2lubGluZV9sYXN0Ok5ubiIgXG1ldGF7c2VxdWVuY2V9IAolICAg XG1hcmd7aW5saW5lIGZ1bmN0aW9ufSBcbWFyZ3tsYXN0IGlubGluZSBmdW5jdGlvbn0KJSBcZW5k e3N5bnRheH0KJSBBcHBsaWVzIFxtZXRhe2lubGluZSBmdW5jdGlvbn0gdG8gZWFjaCBpdGVtIG9m IFxtZXRhe3NlcXVlbmNlfSAKJSAoZ2l2ZW4gYXMgIiMxIikgZXhjZXB0IHRoZSBsYXN0LCBhbmQg XG1ldGF7bGFzdCBpbmxpbmUgZnVuY3Rpb259CiUgb24gdGhlIGxhc3QgaXRlbS4gTWFpbmx5IHVz ZWQgdG8gaW1wbGVtZW50IHRoZSAicG9wX3JpZ2h0IiBhbmQKJSAiZ2V0X3JpZ2h0IiBvcGVyYXRp b25zLgolIFxlbmR7ZnVuY3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259e1x1c2VfaWlfaTpubn0K JSBFeGNoYW5nZXMgaXRzIHR3byBhcmd1bWVudHMgKHJlbW92aW5nIG9uZSBzZXQgb2Ygb3V0ZXIg YnJhY2VzIGlmIHByZXNlbnQpLgolIFxlbmR7ZnVuY3Rpb259CiUgCiUKJSBcc2VjdGlvbntGdW5j dGlvbnMgZm9yIGBTZXF1ZW5jZSBTdGFja3MnfQolCiUgU3BlY2lhbCBzZXF1ZW5jZXMgaW4gXExh VGVYMyBhcmUgYHN0YWNrcycgd2l0aCB0aGVpciB1c3VhbCBvcGVyYXRpb25zCiUgb2YgYHB1c2gn LCBgcG9wJywgYW5kIGB0b3AnLiBUaGV5IGFyZSBpbnRlcm5hbGx5IGltcGxlbWVudGVkIGFzCiUg c2VxdWVuY2VzIGFuZCBzaGFyZSBzb21lIG9mIHRoZSBmdW5jdGlvbnMgKGxpa2UgIlxzZXFfbmV3 Ok4iIGV0Yy4pCiUKJSBcYmVnaW57ZnVuY3Rpb259e1xzZXFfcHVzaDpObiwgIFxzZXFfcHVzaDpO ViwKJSAgICAgICAgICAgICAgICAgIFxzZXFfcHVzaDpObywgIFxzZXFfcHVzaDpjbiwKJSAgICAg ICAgICAgICAgICAgIFxzZXFfZ3B1c2g6Tm4sIFxzZXFfZ3B1c2g6TlYsCiUgICAgICAgICAgICAg ICAgICBcc2VxX2dwdXNoOk5vLCBcc2VxX2dwdXNoOk52LAolICAgICAgICAgICAgICAgICAgXHNl cV9ncHVzaDpOeCwKJSAgICAgICAgICAgICAgICAgIFxzZXFfZ3B1c2g6Y24sIFxzZXFfZ3B1c2g6 Y1Z9CiUgXGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX3B1c2g6Tm4iIDxzdGFjaz4gXEFyZ3t0b2tl biBsaXN0fQolIFxlbmR7c3ludGF4fQolIExvY2FsbHkgb3IgZ2xvYmFsbHkgcHVzaGVzIDx0b2tl biBsaXN0PiBhcyBhIHNpbmdsZSBpdGVtIG9udG8gdGhlCiUgPHN0YWNrPi4gVGhlc2UgYXJlIHN5 bm9ueW1zIGZvciAiXHNlcV9wdXRfbGVmdCIKJSBcZW5ke2Z1bmN0aW9ufQolCiUKJSBcYmVnaW57 ZnVuY3Rpb259e1xzZXFfZ2V0Ok5OLCBcc2VxX2dnZXQ6Tk4sIFxzZXFfZ2V0X3dpdGg6Tm59CiUg XGJlZ2lue3N5bnRheH0KJSAgICAiXHNlcV9nZXQ6Tk4iIDxzdGFjaz4gPHRsIHZhci4+CiUgXGVu ZHtzeW50YXh9CiUgRnVuY3Rpb25zIHRoYXQgYXNzaWduIHRoZSB0b3AgaXRlbSBvZiA8c3RhY2s+ IHRvIHRoZSA8dGwgdmFyLj4uCiUgSXRlbSBpcyBcZW1waHtub3R9IHJlbW92ZWQgZnJvbSA8c3Rh Y2s+ISBUaGVzZSBhcmUgc3lub255bXMgZm9yCiUgdGhlICJcc2VxX2dldF9sZWZ0IiBmYW1pbHkg b2YgZnVuY3Rpb25zLgolIFxlbmR7ZnVuY3Rpb259CiUKJSBcYmVnaW57ZnVuY3Rpb259e1xzZXFf cG9wOk4sICAgICAgIFxzZXFfZ3BvcDpOLCAKJSAgICAgICAgICAgICAgICAgIFxzZXFfcG9wX3dp dGg6Tm4sIFxzZXFfZ3BvcF93aXRoOk5ufQolIFxiZWdpbntzeW50YXh9CiUgICAiXHNlcV9wb3A6 TiIgPHN0YWNrPgolICAgIlxzZXFfcG9wX3dpdGg6Tm4iIDxzdGFjaz4gPGFzc2lnbm1lbnQgY29k ZT4KJSBcZW5ke3N5bnRheH0KJSBSZW1vdmUgdGhlIHRvcCBpdGVtIG9mIHRoZSA8c3RhY2s+IGxv Y2FsbHkgb3IgZ2xvYmFsbHksIAolIGFuZCBhc3NpZ24gaXQgdXNpbmcgPGFzc2lnbm1lbnQgY29k ZT4uIFRoZXNlIGZ1bmN0aW9ucwolIGFyZSBzeW5vbnltcyBvZiB0aGUgY29ycmVzcG9uZGluZyAi XHNlcV9wb3BfbGVmdCIgCiUgZnVuY3Rpb25zLgolIFxlbmR7ZnVuY3Rpb259CiUKJSBcZW5ke2Rv Y3VtZW50YXRpb259CiUKJQolCiUgXGJlZ2lue2ltcGxlbWVudGF0aW9ufQolCiUgXHNlY3Rpb257 XHBrZ3tsM3NlcX0gaW1wbGVtZW50YXRpb259CiUKJSAgICBcYmVnaW57bWFjcm9jb2RlfQolPCpw YWNrYWdlPgpcUHJvdmlkZXNFeHBsUGFja2FnZQogIHtcZmlsZW5hbWV9e1xmaWxlZGF0ZX17XGZp bGV2ZXJzaW9ufXtcZmlsZWRlc2NyaXB0aW9ufQpccGFja2FnZV9jaGVja19sb2FkZWRfZXhwbDoK JTwvcGFja2FnZT4KJSAgICBcZW5ke21hY3JvY29kZX0KJQolIEEgc2VxdWVuY2UgaXMgYSBjb250 cm9sIHNlcXVlbmNlIHdob3NlIHRvcC1sZXZlbCBleHBhbnNpb24gaXMgCiUgb2YgdGhlIGZvcm0g YHxcc2VxX2VsdDpufCBcbWFyZ3t0ZXh0JFxzYjEkfSBcbGRvdHN7fQolIHxcc2VxX2VsdDpufCBc bWFyZ3t0ZXh0JFxzYntufSR9IFxsZG90cycuIAolCiUgQW5vdGhlciBjaG9pY2Ugd291bGQgYmUg dG8gc3RvcmUgZWFjaCBpdGVtIGFzICJcc2VxX2VsdDp3IiAKJSBcbWV0YXtpdGVtfSAiXHNlcV9l bHRfZW5kOiIgaW5zdGVhZCBvZiAiXHNlcV9lbHQ6biIgXG1hcmd7aXRlbX0uCiUgVGhlIG1haW4g YXJndW1lbnQgZm9yIHRoYXQgb3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCBpdCBhbGxvd3MgCiUg ZWZmaWNpZW50IHNlYXJjaGluZyBvZiBhbiBpdGVtIHVzaW5nIGRlbGltaXRlZCBhcmd1bWVudHMu IEhvd2V2ZXIsCiUgdGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgaXRlbSB0aGF0IGlzIHNlYXJj aGVkIGZvciBkb2VzIG5vdCAKJSBjb250YWluIGJyYWNlcyBub3IgdGhlIG1hY3JvIHBhcmFtZXRl ciBjaGFyYWN0ZXIgIiMiLiBBbHNvLCB1c2luZwolIGV4cGxpY2l0IGRlbGltaXRlcnMgYXMgIlxz ZXFfZWx0OncgXG1ldGF7aXRlbX0gXHNlcV9lbHRfZW5kOiIgbGVhZHMKJSB0byBlbmRsZXNzIHRy b3VibGUgd2l0aCBicmFjZSBzdHJpcHBpbmcgKHdoZW4gYW4gaXRlbSBoYXBwZW5zIHRvIGJlCiUg c3Vycm91bmRlZCBieSBicmFjZXMpLgolIAolIFdlIHRodXMgc3RvcmUgZWxlbWVudHMgYXMgIlxz ZXFfZWx0Om4iIFxtYXJne2l0ZW19LiBUaGVyZSBhcmUgdHdvCiUgbWV0aG9kcyBmb3Igc2VhcmNo aW5nIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSwgZWl0aGVyIGluIGEgZnVsbHkgCiUgcm9idXN0IHdh eSAoY29tcGFyaW5nIGl0ZW1zIHdpdGggIlx0bF9pZl9lcTpubiIpLCBvciBpbiBhIGZhc3QKJSB3 YXkgYnkgd29ya2luZyB3aXRoIHRoZSByZXN1bHQgb2YgIlx0bF90b19zdHI6TiIuIFNlZSAiXHNl cV9pZl9pbl9zdHI6Tm4iCiUgZm9yIGRldGFpbHMuCiUKJSBcYmVnaW57bWFjcm99e1xzZXFfZWx0 Om59CiUgICAgV2UgYWxsb2NhdGUgdGhlIGRlbGltaXRlciBhbmQgbWFrZSBpdCBhbiBlcnJvciBp ZiBleGVjdXRlZC4KJSAgICBIb3dldmVyLCBpdCByZW1vdmVzIGl0cyBhcmd1bWVudCAodGhlIGl0 ZW0gb2YgdGhlIHNlcXVlbmNlKQolICAgIHRvIGhlbHAgcmVjb3ZlciBmcm9tIHRoZSBlcnJvci4K JSAgICBcYmVnaW57bWFjcm9jb2RlfQolPCppbml0ZXh8cGFja2FnZT4KXGNzX25ldzpOcG4gXHNl cV9lbHQ6biAjMSB7XEVSUk9SfQolICAgIFxlbmR7bWFjcm9jb2RlfQolIFxlbmR7bWFjcm99CiUK JSBcYmVnaW57bWFjcm99e1x1c2VfaWlfaTpubn0KJSBDb252ZW5pZW50IG1hY3JvIHRvIHNodWZm bGUgYXJndW1lbnRzIGFyb3VuZC4KJSAgICBcYmVnaW57bWFjcm9jb2RlfQpcY3NfbmV3Ok5wbiBc dXNlX2lpX2k6bm4gIzEgIzIgeyAjMiAjMSB9CiUgICAgXGVuZHttYWNyb2NvZGV9CiUgXGVuZHtt YWNyb30KJSAKJSBcc3Vic2VjdGlvbntBbGxvY2F0aW5nIGFuZCBpbml0aWFsaXNhdGlvbn0KJQol IFxiZWdpbnttYWNyb317XHNlcV9uZXc6Tn0KJSBcYmVnaW57bWFjcm99e1xzZXFfbmV3OmN9CiUg ICAgU2VxdWVuY2VzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0b2tlbiBsaXN0cy4KJSAgICBcYmVn aW57bWFjcm9jb2RlfQpcY3NfbmV3X2VxOk5OIFxzZXFfbmV3Ok4gXHRsX25ldzpOClxjc19uZXdf ZXE6Tk4gXHNlcV9uZXc6YyBcdGxfbmV3OmMKJSAgICBcZW5ke21hY3JvY29kZX0KJSBcZW5ke21h Y3JvfQolIFxlbmR7bWFjcm99CiUKJSBcYmVnaW57bWFjcm99e1xzZXFfY2xlYXI6Tn0KJSBcYmVn aW57bWFjcm99e1xzZXFfY2xlYXI6Y30KJSBcYmVnaW57bWFjcm99e1xzZXFfZ2NsZWFyOk59CiUg XGJlZ2lue21hY3JvfXtcc2VxX2djbGVhcjpjfQolICAgIENsZWFyaW5nIGEgc2VxdWVuY2UgaXMg dGhlIHNhbWUgYXMgY2xlYXJpbmcgYSB0b2tlbiBsaXN0LgolICAgIFxiZWdpbnttYWNyb2NvZGV9 Clxjc19uZXdfZXE6Tk4gXHNlcV9jbGVhcjpOICBcdGxfY2xlYXI6TgpcY3NfbmV3X2VxOk5OIFxz ZXFfY2xlYXI6YyAgXHRsX2NsZWFyOmMKXGNzX25ld19lcTpOTiBcc2VxX2djbGVhcjpOIFx0bF9n Y2xlYXI6TgpcY3NfbmV3X2VxOk5OIFxzZXFfZ2NsZWFyOmMgXHRsX2djbGVhcjpjCiUgICAgXGVu ZHttYWNyb2NvZGV9CiUgXGVuZHttYWNyb30KJSBcZW5ke21hY3JvfQolIFxlbmR7bWFjcm99CiUg XGVuZHttYWNyb30KJQolIFxiZWdpbnttYWNyb317XHNlcV9jbGVhcl9uZXc6Tn0KJSBcYmVnaW57 bWFjcm99e1xzZXFfY2xlYXJfbmV3OmN9CiUgXGJlZ2lue21hY3JvfXtcc2VxX2djbGVhcl9uZXc6 Tn0KJSBcYmVnaW57bWFjcm99e1xzZXFfZ2NsZWFyX25ldzpjfQolICAgIENsZWFyaW5nIGEgc2Vx dWVuY2UgaXMgdGhlIHNhbWUgYXMgY2xlYXJpbmcgYSB0b2tlbiBsaXN0LgolICAgIFxiZWdpbntt YWNyb2NvZGV9Clxjc19uZXdfZXE6Tk4gXHNlcV9jbGVhcl9uZXc6TiAgXHRsX2NsZWFyX25ldzpO Clxjc19uZXdfZXE6Tk4gXHNlcV9jbGVhcl9uZXc6YyAgXHRsX2NsZWFyX25ldzpjClxjc19uZXdf ZXE6Tk4gXHNlcV9nY2xlYXJfbmV3Ok4gXHRsX2djbGVhcl9uZXc6TgpcY3NfbmV3X2VxOk5OIFxz ZXFfZ2NsZWFyX25ldzpjIFx0bF9nY2xlYXJfbmV3OmMKJSAgICBcZW5ke21hY3JvY29kZX0KJSBc ZW5ke21hY3JvfQolIFxlbmR7bWFjcm99CiUgXGVuZHttYWNyb30KJSBcZW5ke21hY3JvfSAgIAol ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiUgXGJlZ2lue21hY3JvfXtcc2VxX3NldF9l cTpOTn0KJSBcYmVnaW57bWFjcm99e1xzZXFfc2V0X2VxOk5jfSAKJSBcYmVnaW57bWFjcm99e1xz ZXFfc2V0X2VxOmNOfQolIFxiZWdpbnttYWNyb317XHNlcV9zZXRfZXE6Y2N9IAolICAgIFdlIGNh biBzZXQgb25lICJzZXEiIGVxdWFsIHRvIGFub3RoZXIuCiUgICAgXGJlZ2lue21hY3JvY29kZX0g ICAgICAgICAgICAgICAgClxjc19uZXdfZXE6Tk4gXHNlcV9zZXRfZXE6Tk4gXGNzX3NldF9lcTpO TiAgIApcY3NfbmV3X2VxOk5OIFxzZXFfc2V0X2VxOmNOIFxjc19zZXRfZXE6Y04gICAKXGNzX25l d19lcTpOTiBcc2VxX3NldF9lcTpOYyBcY3Nfc2V0X2VxOk5jICAgClxjc19uZXdfZXE6Tk4gXHNl cV9zZXRfZXE6Y2MgXGNzX3NldF9lcTpjYyAgICAgICAgICAgICAgICAgICAgICAgIAolICAgIFxl bmR7bWFjcm9jb2RlfQolIFxlbmR7bWFjcm99CiUgXGVuZHttYWNyb30KJSBcZW5ke21hY3JvfQol IFxlbmR7bWFjcm99CiUKJSBcYmVnaW57bWFjcm99e1xzZXFfZ3NldF9lcTpOTn0KJSBcYmVnaW57 bWFjcm99e1xzZXFfZ3NldF9lcTpjTn0KJSBcYmVnaW57bWFjcm99e1xzZXFfZ3NldF9lcTpOY30K JSBcYmVnaW57bWFjcm99e1xzZXFfZ3NldF9lcTpjY30KJSAgICBBbmQgb2YgY291cnNlIGdsb2Jh bGx5IHdoaWNoIHNlZW1zIHRvIGJlIG5lZWRlZCBmYXIgbW9yZQolICAgIG9mdGVuLlxmb290bm90 ZXtUbyBzYXZlIGEgYml0IG9mIHNwYWNlIHRoZXNlIGZ1bmN0aW9ucyBjb3VsZCBiZSBtYWRlCiUg ICAgaWRlbnRpY2FsIHRvIHRob3NlIGZyb20gdGhlIHRsIG9yIGNsaXN0IG1vZHVsZS4gQnJ1bm86 IEkgZG9uJ3QgCiUgICAgdW5kZXJzdGFuZCB0aGlzIGNvbW1lbnQufQolICAgIFxiZWdpbnttYWNy b2NvZGV9Clxjc19uZXdfZXE6Tk4gXHNlcV9nc2V0X2VxOk5OIFxjc19nc2V0X2VxOk5OClxjc19u ZXdfZXE6Tk4gXHNlcV9nc2V0X2VxOmNOIFxjc19nc2V0X2VxOmNOClxjc19uZXdfZXE6Tk4gXHNl cV9nc2V0X2VxOk5jIFxjc19nc2V0X2VxOk5jClxjc19uZXdfZXE6Tk4gXHNlcV9nc2V0X2VxOmNj IFxjc19nc2V0X2VxOmNjCiUgICAgXGVuZHttYWNyb2NvZGV9CiUgXGVuZHttYWNyb30KJSBcZW5k e21hY3JvfQolIFxlbmR7bWFjcm99CiUgXGVuZHttYWNyb30KJQolIFxiZWdpbnttYWNyb317XHNl cV9jb25jYXQ6Tk5OLFxzZXFfY29uY2F0OmNjY30KJSBcYmVnaW57c3ludGF4fQolICAgIlxzZXFf Y29uY2F0Ok5OTiIgXG17c2VxfjF9IFxte3NlcX4yfSBcbXtzZXF+M30gCiUgXGVuZHtzeW50YXh9 CiUgd2lsbCBsb2NhbGx5IGFzc2lnbiBcbXtzZXF+MX0gdGhlIGNvbmNhdGVuYXRpb24gb2YgXG17 c2VxfjJ9IGFuZCBcbXtzZXF+M30uCiUgICAgXGJlZ2lue21hY3JvY29kZX0KXGNzX25ld19wcm90 ZWN0ZWRfbm9wYXI6TnBuIFxzZXFfY29uY2F0Ok5OTiAjMSMyIzMgewogIFx0bF9zZXQ6TnggIzEg eyBcZXhwX25vdDpWICMyIFxleHBfbm90OlYgIzMgfQp9Clxjc19nZW5lcmF0ZV92YXJpYW50Ok5u IFxzZXFfY29uY2F0Ok5OTiB7Y2NjfQolICAgIFxlbmR7bWFjcm9jb2RlfQolIFxlbmR7bWFjcm99 CiUKJSBcYmVnaW57bWFjcm99e1xzZXFfZ2NvbmNhdDpOTk4sXHNlcV9nY29uY2F0OmNjY30KJSBc YmVnaW57c3ludGF4fQolICAgIlxzZXFfZ2NvbmNhdDpOTk4iIFxte3NlcX4xfSBcbXtzZXF+Mn0g XG17c2VxfjN9CiUgXGVuZHtzeW50YXh9CiUgd2lsbCBnbG9iYWxseSBhc3NpZ24gXG17c2VxfjF9 IHRoZSBjb25jYXRlbmF0aW9uIG9mIFxte3NlcX4yfSBhbmQgXG17c2VxfjN9LgolICAgIFxiZWdp bnttYWNyb2NvZGV9Clxjc19uZXdfcHJvdGVjdGVkX25vcGFyOk5wbiBcc2VxX2djb25jYXQ6Tk5O ICMxIzIjMyB7CiAgXHRsX2dzZXQ6TnggIzEgeyBcZXhwX25vdDpWICMyIFxleHBfbm90OlYgIzMg fQp9Clxjc19nZW5lcmF0ZV92YXJpYW50Ok5uIFxzZXFfZ2NvbmNhdDpOTk4ge2NjY30KJSAgICBc ZW5ke21hY3JvY29kZX0KJSBcZW5ke21hY3JvfQolCiUKJQolIFxzdWJzZWN0aW9ue1B1dHRpbmcg ZGF0YSBpbn0KJQolIFxiZWdpbnttYWNyb317XHNlcV9wdXRfbGVmdDpObiwgIFxzZXFfcHV0X2xl ZnQ6TlYsICAKJSAgICAgICAgICAgICAgIFxzZXFfcHV0X2xlZnQ6Tm8sICBcc2VxX3B1dF9sZWZ0 Ok54LAolICAgICAgICAgICAgICAgXHNlcV9wdXRfbGVmdDpjbiwgIFxzZXFfcHV0X2xlZnQ6Y1Ys ICAKJSAgICAgICAgICAgICAgIFxzZXFfcHV0X2xlZnQ6Y28sCiUgICAgICAgICAgICAgICBcc2Vx X3B1dF9yaWdodDpObiwgXHNlcV9wdXRfcmlnaHQ6Tm8sIAolICAgICAgICAgICAgICAgXHNlcV9w dXRfcmlnaHQ6TlYsIFxzZXFfcHV0X3JpZ2h0Ok54LAolICAgICAgICAgICAgICAgXHNlcV9wdXRf cmlnaHQ6Y24sIFxzZXFfcHV0X3JpZ2h0OmNWLCAKJSAgICAgICAgICAgICAgIFxzZXFfcHV0X3Jp Z2h0OmNvfQolIEhlcmUgYXJlIHRoZSB1c3VhbCBvcGVyYXRpb25zIGZvciBhZGRpbmcgdG8gdGhl IGxlZnQgYW5kIAolIHJpZ2h0LCBzaW1wbHkgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgInRsIiBm dW5jdGlvbnMuXGZvb3Rub3Rle0JydW5vOgolICAgVGhlIGltcGxlbWVudGF0aW9uIHdhcyBtdWNo IG1vcmUgY29tcGxpY2F0ZWQuIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/fSAKJSAgICBcYmVnaW57 bWFjcm9jb2RlfQpcY3NfbmV3X3Byb3RlY3RlZDpOcG4gXHNlcV9wdXRfbGVmdDpObiAjMSMyIHsK ICBcdGxfcHV0X2xlZnQ6Tm4gIzEge1xzZXFfZWx0Om4geyMyfSB9Cn0KXGNzX25ld19wcm90ZWN0 ZWQ6TnBuIFxzZXFfcHV0X3JpZ2h0Ok5uICMxIzJ7CiAgXHRsX3B1dF9yaWdodDpObiAjMSB7XHNl cV9lbHQ6biB7IzJ9IH0KfQpcY3NfZ2VuZXJhdGVfdmFyaWFudDpObiBcc2VxX3B1dF9sZWZ0Ok5u IHtOVixObyxOeCxjbixjVixjb30KXGNzX2dlbmVyYXRlX3ZhcmlhbnQ6Tm4gXHNlcV9wdXRfcmln aHQ6Tm4ge05WLE5vLE54LGNuLGNWLGNvfQolICAgIFxlbmR7bWFjcm9jb2RlfQolIFxlbmR7bWFj cm99CiUKJSAKJSAKJSBcYmVnaW57bWFjcm99e1xzZXFfZ3B1dF9sZWZ0Ok5uLCAgXHNlcV9ncHV0 X2xlZnQ6TlYsICAKJSAgICAgICAgICAgICAgIFxzZXFfZ3B1dF9sZWZ0Ok5vLCAgXHNlcV9ncHV0 X2xlZnQ6TngsCiUgICAgICAgICAgICAgICBcc2VxX2dwdXRfbGVmdDpjbiwgIFxzZXFfZ3B1dF9s ZWZ0OmNWLCAgCiUgICAgICAgICAgICAgICBcc2VxX2dwdXRfbGVmdDpjbywKJSAgICAgICAgICAg ICAgIFxzZXFfZ3B1dF9yaWdodDpObiwgXHNlcV9ncHV0X3JpZ2h0Ok5WLCAKJSAgICAgICAgICAg ICAgIFxzZXFfZ3B1dF9yaWdodDpObywgXHNlcV9ncHV0X3JpZ2h0Ok54LAolICAgICAgICAgICAg ICAgXHNlcV9ncHV0X3JpZ2h0OmNuLCBcc2VxX2dwdXRfcmlnaHQ6Y1YsIAolICAgICAgICAgICAg ICAgXHNlcV9ncHV0X3JpZ2h0OmNvfQolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19uZXdfcHJv dGVjdGVkOk5wbiBcc2VxX2dwdXRfbGVmdDpObiB7CiU8KmNoZWNrPgogIFxwcmVmX2dsb2JhbF9j aGs6CiU8L2NoZWNrPgolPCohY2hlY2s+IAogIFxwcmVmX2dsb2JhbDpECiU8LyFjaGVjaz4KICBc c2VxX3B1dF9sZWZ0Ok5uCn0KJSAgICBcZW5ke21hY3JvY29kZX0KJSAgICBcYmVnaW57bWFjcm9j b2RlfQpcY3NfbmV3X3Byb3RlY3RlZDpOcG4gXHNlcV9ncHV0X3JpZ2h0Ok5uIHsKJTwqY2hlY2s+ CiAgXHByZWZfZ2xvYmFsX2NoazoKJTwvY2hlY2s+CiU8KiFjaGVjaz4gCiAgXHByZWZfZ2xvYmFs OkQKJTwvIWNoZWNrPgogIFxzZXFfcHV0X3JpZ2h0Ok5uCn0KJSAgICBcZW5ke21hY3JvY29kZX0K JSAgICBcYmVnaW57bWFjcm9jb2RlfQpcY3NfZ2VuZXJhdGVfdmFyaWFudDpObiBcc2VxX2dwdXRf bGVmdDpObiB7TlYsTm8sTngsY24sY1YsY299Clxjc19nZW5lcmF0ZV92YXJpYW50Ok5uIFxzZXFf Z3B1dF9yaWdodDpObiB7TlYsTm8sTngsY24sY1YsY299CiUgICAgXGVuZHttYWNyb2NvZGV9CiUg XGVuZHttYWNyb30KJQolCiUKJSBcc3Vic2VjdGlvbntNYXBwaW5nfQolIAolIE1hbnkgb2YgdGhl IG9wZXJhdGlvbnMgb24gc2VxdWVuY2VzIGFyZSBkb25lIGJ5IG1hcHBpbmcgdGhyb3VnaCAKJSB0 aGUgc2VxdWVuY2UsIHNvIHdlIGdpdmUgdGhlIGNvZGUgZm9yIHRob3NlIG1hcHBpbmcgZnVuY3Rp b25zIAolIGVhcmx5IG9uLiBBcyBhbHdheXMsIHRocmVlIHR5cGVzIG9mIG1hcHBpbmdzOiAiZnVu Y3Rpb24iLCAiaW5saW5lIiwgCiUgYW5kICJ2YXJpYWJsZSIuIFRoZSAiZnVuY3Rpb24iIHZhcmlh bnQgaXMgZXhwYW5kYWJsZSwgdGhlIG90aGVyCiUgdHdvIGFyZSBub3QgKGJ1dCB0aGV5IHNob3Vs ZCBiZSBmYXN0ZXIsIGJlY2F1c2UgdGhleSBkbyBub3QgbmVlZCAKJSB0byB0ZXN0IGZvciB0aGUg ZW5kIG9mIHRoZSBzZXF1ZW5jZSkuIAolCiUgSSBoYXZlbid0IHRob3VnaHQgeWV0IGFib3V0IG5l c3RpbmcuCiUgCiUgXGJlZ2lue21hY3JvfXtcc2VxX2JyZWFrOiwKJSAgICAgICAgICAgICAgIFxz ZXFfYnJlYWs6bn0KJSBUZXJtaW5hdGUgYSBtYXBwaW5nIGZ1bmN0aW9uIGF0IHRoZSBwb2ludCBv ZiBleGVjdXRpb24uIFRoZSBsYXR0ZXIKJSB0YWtlcyBhbiBhcmd1bWVudCB0byBiZSBleGVjdXRl ZCBhZnRlciBjbGVhbmluZyB1cCB0aGUgbWFwLgolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19u ZXc6TnBuIFxzZXFfYnJlYWs6ICAgICAjMSBcc2VxX2JyZWFrX3BvaW50Om4gIzIgeyMyfQpcY3Nf bmV3Ok5wbiBcc2VxX2JyZWFrOm4gIzEgIzIgXHNlcV9icmVha19wb2ludDpuICMzIHsjMyAjMX0K JSAgICBcZW5ke21hY3JvY29kZX0KJSBUaGUgYXJndW1lbnQgb2YgIlxzZXFfYnJlYWtfcG9pbnQ6 biIgaXMgYWx3YXlzIGV4ZWN1dGVkIGJlZm9yZSB0aGUgCiUgY29kZSBwcm92aWRlZCBieSB0aGUg dXNlciBhcyBhbiBhcmd1bWVudCBvZiAiXHNlcV9icmVhazpuIi4gVGhpcwolIHdheSwgdGhlIG1h cHMgY2FuIGJlIGV4aXRlZCBjbGVhbmx5LCBhbmQgdGhleSBsZWF2ZSBubyB0b2tlbiBhZnRlcgol IHRoZSB1c2VyJ3MgY29kZS4gCiUKJSBJbiBjYXNlIHRoZSBtYXAgaXMgbm90IGV4aXRlZCB2aWEg YSBicmVhaywgIlxzZXFfYnJlYWtfcG9pbnQ6biIgc2ltcGx5CiUgdXNlcyBpdHMgYXJndW1lbnQu IFRodXMsIGluIGV2ZXJ5IGNhc2UgdGhlIGFyZ3VtZW50IG9mIAolICJcc2VxX2JyZWFrX3BvaW50 Om4iIHdpbGwgYmUgZXhlY3V0ZWQuCiUgICAgXGJlZ2lue21hY3JvY29kZX0KXGNzX25ld19lcTpO TiBcc2VxX2JyZWFrX3BvaW50Om4gXHVzZTpuCiUgICAgXGVuZHttYWNyb2NvZGV9CiUgXGVuZHtt YWNyb30KJQolCiUgXGJlZ2lue21hY3JvfXtcc2VxX21hcF9pbmxpbmU6Tm4sCiUgICAgICAgICAg ICAgICBcc2VxX21hcF9pbmxpbmU6Y259CiUgXGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX21hcF9p bmxpbmU6Tm4iIFxtZXRhe3NlcXVlbmNlfSBcQXJne2lubGluZSBmdW5jdGlvbn0KJSBcZW5ke3N5 bnRheH0KJSAgQXBwbGllcyBcbWV0YXtpbmxpbmUgZnVuY3Rpb259IHRvIGV2ZXJ5IGl0ZW0gaW4g dGhlIFxtZXRhe3NlcXVlbmNlfS4gCiUgIFRoZSBcbWV0YXtpbmxpbmUgZnVuY3Rpb259IHNob3Vs ZCBjb25zaXN0IG9mIGNvZGUgd2hpY2ggd2lsbCByZWNlaXZlCiUgIHRoZSBpdGVtIGFzICIjMSIu IFRoZSBpdGVtcyBpbiB0aGUgXG1ldGF7c2VxdWVuY2V9IGFyZSBzdXBwbGllZCB0byB0aGUKJSAg XG1ldGF7aW5saW5lIGZ1bmN0aW9ufSByZWFkaW5nIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0 LgolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19uZXdfcHJvdGVjdGVkX25vcGFyOk5wbiBcc2Vx X21hcF9pbmxpbmU6Tm4gIzEjMiB7CiAgXGNzX3NldDpOcG4gXHNlcV9lbHQ6biAjIzEgeyMyfQog ICMxIAogIFxzZXFfYnJlYWtfcG9pbnQ6biB7XGNzX3NldDpOcG4gXHNlcV9lbHQ6biAjMSB7XEVS Uk9SfX0KfQpcY3NfZ2VuZXJhdGVfdmFyaWFudDpObiBcc2VxX21hcF9pbmxpbmU6Tm4ge2N9CiUg ICAgXGVuZHttYWNyb2NvZGV9CiUgVGhlIGxhc3QgbGluZSBpbiB0aGUgZGVmaW5pdGlvbiBpcyB0 aGVyZSB0byBhbGxvdyBicmVha2luZyB0aGUgCiUgbWFwcGluZyB3aXRoICJcc2VxX2JyZWFrOiIg b3IgIlxzZXFfYnJlYWs6biIuIEJydW5vOiBNYXliZSB3ZSAKJSBzaG91bGQgbWFrZSBzb21lIGdl bmVyYWwgYnJlYWtpbmcgc3lzdGVtPwolIFxlbmR7bWFjcm99CiUKJQolCiUgXGJlZ2lue21hY3Jv fXtcc2VxX21hcF92YXJpYWJsZTpOTm4sCiUgICAgICAgICAgICAgICBcc2VxX21hcF92YXJpYWJs ZTpjTm59CiUgXGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX21hcF92YXJpYWJsZTpOTm4iIFxtZXRh e3NlcXVlbmNlfSBcbWV0YXt2YXJpYWJsZX0gXG1hcmd7ZnVuY3Rpb259CiUgXGVuZHtzeW50YXh9 CiUgQXBwbGllcyBcbWV0YXtmdW5jdGlvbn0gdG8gZXZlcnkgaXRlbSBpbiB0aGUgXG1ldGF7c2Vx dWVuY2V9LiBUaGUKJSBpdGVtIGlzIHN0b3JlZCBhcyBcbWV0YXt2YXJpYWJsZX0gYmVmb3JlIGJl aW5nIHJ1bm5pbmcgXG1ldGF7ZnVuY3Rpb259LgolIFRoZSBpdGVtcyBpbiB0aGUgXG1ldGF7c2Vx dWVuY2V9IGFyZSByZWFkIGZyb20gbGVmdCB0byByaWdodC4KJSAKJSBUaGUgY29kZSBpcyBlc3Nl bnRpYWxseSB0aGUgc2FtZSBhcyBmb3IgIl9tYXBfaW5saW5lIiwgZXhjZXB0IHRoYXQgd2UgCiUg dXNlICJcY3Nfc2V0Ok5weCIgYW5kICJcZXhwX25vdDpuIiBzbyB0aGF0IHRoZSB1c2VyIGRvZXMg bm90IG5lZWQgdG8KJSBkb3VibGUgIiMiLgolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19uZXdf cHJvdGVjdGVkOk5wbiBcc2VxX21hcF92YXJpYWJsZTpOTm4gIzEgIzIgIzMgewogIFxjc19zZXQ6 TnB4IFxzZXFfZWx0Om4gIyMxIHsgXGV4cF9ub3Q6bntcdGxfc2V0Ok5uICMyfSB7IyMxfSBcZXhw X25vdDpueyMzfSB9CiAgIzEgCiAgXHNlcV9icmVha19wb2ludDpuIHtcY3Nfc2V0Ok5wbiBcc2Vx X2VsdDpuICMxIHtcRVJST1J9fQp9Clxjc19nZW5lcmF0ZV92YXJpYW50Ok5uIFxzZXFfbWFwX3Zh cmlhYmxlOk5ObiB7Y30KJSAgICBcZW5ke21hY3JvY29kZX0KJSBcZW5ke21hY3JvfQolCiUKJSBc YmVnaW57bWFjcm99e1xzZXFfbWFwX2Z1bmN0aW9uOk5uLAolICAgICAgICAgICAgICAgXHNlcV9t YXBfZnVuY3Rpb246Y259CiUgXGJlZ2lue3N5bnRheH0KJSAgICJcc2VxX21hcF9mdW5jdGlvbjpO biIgXG1ldGF7c2VxdWVuY2V9IFxtYXJne2Z1bmN0aW9ufQolIFxlbmR7c3ludGF4fQolIEFwcGxp ZXMgXG1ldGF7ZnVuY3Rpb259IHRvIGV2ZXJ5IFxtZXRhe2l0ZW19IGluIHRoZSAKJSBcbWV0YXtz ZXF1ZW5jZX0uIE5hbWVseSwgcnVucyBcbWV0YXtmdW5jdGlvbn0gXG1hcmd7aXRlbX0KJSBmb3Ig ZWFjaCBcbWV0YXtpdGVtfSBpbiB0aGUgXG1ldGF7c2VxdWVuY2V9LCBmcm9tIGxlZnQgdG8gCiUg cmlnaHQuIElmIHRoZSBcbWV0YXtmdW5jdGlvbn0gaXMgZXhwYW5kYWJsZSwgdGhpcyBtYXBwaW5n CiUgd2lsbCBhbHNvIGJlLiAKJQolIE5vdGUgdGhhdCBcbWV0YXtmdW5jdGlvbn0gY2FuIGJlIGNv bXBvc2VkIG9mIHNldmVyYWwgdG9rZW5zIQolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19uZXc6 TnBuIFxzZXFfbWFwX2Z1bmN0aW9uOk5uICMxICMyIHsKICBcZXhwX2FyZ3M6TlYgXHVzZV9paV9p Om5uICMxIHsgXHNlcV9tYXBfZnVuY3Rpb25fYXV4Om5ObiB7IzJ9IH0KICAlXGV4cF9sYXN0X3Vu YnJhY2VkOk5uViBcc2VxX21hcF9mdW5jdGlvbl9hdXg6bk5uIHsjMn0gIzEKICBccV9yZWN1cnNp b25fdGFpbCB7fSBccV9yZWN1cnNpb25fc3RvcAogIFxzZXFfYnJlYWtfcG9pbnQ6biB7fQp9Clxj c19uZXc6TnBuIFxzZXFfbWFwX2Z1bmN0aW9uX2F1eDpuTm4gIzEgIzIgIzMgewogIFxxdWFya19p Zl9yZWN1cnNpb25fdGFpbF9zdG9wOk4gIzIKICBcdXNlOm4geyMxIHsjM319IAogIFxzZXFfbWFw X2Z1bmN0aW9uX2F1eDpuTm4geyMxfQp9CiUgICAgXGVuZHttYWNyb2NvZGV9CiUgCiUgQnJ1bm86 IEknZCBsaWtlIHRvIHN3aXRjaCBhbGwgdGhlIFxjc3suLi5fbWFwX2Z1bmN0aW9uOk5OfSAKJSBj b21tYW5kcyBpbiBleHBsMyB0byBcdGV4dHR0ezpObn0uCiUgICAgXGJlZ2lue21hY3JvY29kZX0K XGNzX2dlbmVyYXRlX3ZhcmlhbnQ6Tm4gXHNlcV9tYXBfZnVuY3Rpb246Tm4ge2N9CiUgICAgXGVu ZHttYWNyb2NvZGV9CiUKJSBcYmVnaW57dGV4bm90ZX0KJSAgIFRoaXMgbmV2ZXIgZXhwYW5kcyB0 byBcbWV0YXtmdW5jdGlvbn0gXG1hcmd7aXRlbSRcc2IxJH0gXGxkb3Rze30KJSAgIFxtZXRhe2Z1 bmN0aW9ufSBcbWFyZ3tpdGVtJFxzYiBuJH0sIHVubGlrZSAiXHByZ19yZXBsaWNhdGU6bm4iLgol IFxlbmR7dGV4bm90ZX0KJQolIFxlbmR7bWFjcm99CiUKJQolCiUgXGJlZ2lue21hY3JvfXtcc2Vx X21hcF9pbmxpbmVfbGFzdDpObm4sCiUgICAgICAgICAgICAgICBcdXNlX2lpX2JpX3JlcGVhdDpu bn0KJSBcYmVnaW57c3ludGF4fQolICAgIlxzZXFfbWFwX2lubGluZV9sYXN0Ok5ubiIgXG1ldGF7 c2VxdWVuY2V9IAolICAgXEFyZ3tpbmxpbmUgZnVuY3Rpb259IFxBcmd7bGFzdCBpbmxpbmUgZnVu Y3Rpb259CiUgXGVuZHtzeW50YXh9CiUgVGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgbWVhbnQgdG8g aW1wbGVtZW50IHRoZSBvcGVyYXRpb25zIHRvIGdldCBhbmQgCiUgcG9wIGl0ZW1zIGZyb20gdGhl IHJpZ2h0IG9mIHRoZSBcbWV0YXtzZXF1ZW5jZX0uIFNhbWUgYXMKJSAiXHNlcV9tYXBfaW5saW5l Ok5uIiwgZXhjZXB0IHRoYXQgd2UgYXBwbHkgXG1ldGF7bGFzdCBpbmxpbmUgZnVuY3Rpb259IAol IHRvIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIFxtZXRhe3NlcXVlbmNlfSAoaW5zdGVhZCBvZiB0 aGUKJSBcbWV0YXtpbmxpbmUgZnVuY3Rpb259KS4gSXQgaXMgc2xpZ2h0bHkgbGVzcyBlZmZpY2ll bnQuCiUgCiUgQXQgZWFjaCBzdGVwIGluIHRoZSByZWN1cnNpb24sIHdlIGdyYWIgb25lIGJyYWNl IGdyb3VwIGZvbGxvd2VkIGJ5CiUgZWl0aGVyICJcc2VxX2VsdDpuIiwgIlxzZXFfdG1wOnciLCBv ciAiXHVzZTpuIiwgYW5kIHdlIGFwcGx5IHRoYXQgCiUgc2Vjb25kIGZ1bmN0aW9uIHRvIHRoZSBi cmFjZSBncm91cCwgdGhlbiByZXBlYXQuIE5vIG5lZWQgdG8gY2hlY2sgCiUgZm9yIHRoZSBlbmQg b2YgdGhlIHNlcXVlbmNlLCBzaW5jZSBpdCBpcyBhdXRvbWF0aWNhbGx5IHRyaWdnZXJlZAolIHdo ZW4gc3dhcHBpbmcgdGhlIGxhc3QgYXJndW1lbnQgdG8gIlx1c2U6biB7XHNlcV9icmVhazp9Ii4K JQolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19uZXdfcHJvdGVjdGVkX25vcGFyOk5wbiBcc2Vx X21hcF9pbmxpbmVfbGFzdDpObm4gIzEgIzIgIzMgewogIFxjc19zZXQ6TnBuIFxzZXFfZWx0Om4g IyMxIHsjMn0KICBcY3Nfc2V0Ok5wbiBcc2VxX3RtcDp3ICMjMSB7IzN9CiAgXGV4cF9hZnRlcjp3 TiBcZXhwX2FmdGVyOndOIFxleHBfYWZ0ZXI6d04gXHVzZV9paV9iaV9yZXBlYXQ6bm4gCiAgICAg ICBcZXhwX2FmdGVyOndOIFx1c2Vfbm9uZTpuICMxIFxzZXFfdG1wOncge1xzZXFfYnJlYWs6fSBc dXNlOm4KICBcc2VxX2JyZWFrX3BvaW50Om4gewogICAgXGNzX3NldDpOcG4gXHNlcV90bXA6dyB7 XEVSUk9SfQogICAgXGNzX3NldDpOcG4gXHNlcV9lbHQ6biAjMSB7XEVSUk9SfQogIH0KfQpcY3Nf bmV3Ok5wbiBcdXNlX2lpX2JpX3JlcGVhdDpubiAjMSAjMiB7ICMyIHsjMX0gXHVzZV9paV9iaV9y ZXBlYXQ6bm4gfQolICAgIFxlbmR7bWFjcm9jb2RlfQolIFxlbmR7bWFjcm99CiUgCiUKJQolIFxz dWJzZWN0aW9ue0dldHRpbmcgZGF0YSBvdXR9CiUKJSBcc3Vic3Vic2VjdGlvbntGcm9tIHRoZSBs ZWZ0IChxdWljayl9CiUKJSBcYmVnaW57bWFjcm99e1xzZXFfZ2V0X2xlZnQ6Tk4sCiUgICAgICAg ICAgICAgICBcc2VxX2dnZXRfbGVmdDpOTiwKJSAgICAgICAgICAgICAgIFxzZXFfZ2V0X2xlZnRf d2l0aDpObiwKJSAgICAgICAgICAgICAgIFxzZXFfZ2V0X2xlZnRfYXV4Ond9CiUgXGJlZ2lue3N5 bnRheH0KJSAgICJcc2VxX2dldF9sZWZ0Ok5OIiBcbWV0YXtzZXF1ZW5jZX0gXG1ldGF7dmFyaWFi bGV9CiUgICAiXHNlcV9nZXRfbGVmdF93aXRoOk5uIiBcbWV0YXtzZXF1ZW5jZX0gXG1hcmd7Y21k c30KJSBcZW5ke3N5bnRheH0KJSAiXHNlcV9nZXRfbGVmdDpOTiIgYXNzaWducyB0aGUgbGVmdC1t b3N0IGVsZW1lbnQgb2YgCiUgXG1ldGF7c2VxdWVuY2V9IHRvIFxtZXRhe3ZhcmlhYmxlfSB1c2lu ZyAiXHRsX3NldDpObiIKJSAoaGVuY2UgbG9jYWxseSkuIFRoZSAiX2dnZXQiIGZ1bmN0aW9uIGRv ZXMgCiUgdGhlIGFzc2lnbm1lbnQgZ2xvYmFsbHksIHVzaW5nICJcdGxfZ3NldDpObiIuCiUgCiUg ICAgXGJlZ2lue21hY3JvY29kZX0KXGNzX25ld19wcm90ZWN0ZWRfbm9wYXI6TnBuIFxzZXFfZ2V0 X2xlZnQ6Tk4gIzEgIzIgewogIFxzZXFfZ2V0X2xlZnRfd2l0aDpObiAjMSB7XHRsX3NldDpObiAj Mn0KfQpcY3NfbmV3X3Byb3RlY3RlZF9ub3BhcjpOcG4gXHNlcV9nZ2V0X2xlZnQ6Tk4gIzEgIzIg ewogIFxzZXFfZ2V0X2xlZnRfd2l0aDpObiAjMSB7XHRsX2dzZXQ6Tm4gIzJ9Cn0KJSAgICBcZW5k e21hY3JvY29kZX0KJSAKJSBUaGlzIGlzIGJhc2VkIG9uIHRoZSBtb3JlIGdlbmVyYWwgIlxzZXFf Z2V0X2xlZnRfd2l0aDpObiIsIAolIHdoaWNoIGp1c3QgcGxhY2VzIFxtZXRhe2NtZHN9IChwcmVz dW1hYmx5IGFuIGFzc2lnbm1lbnQpIAolIGluIGZyb250IG9mIHRoZSBsZWZ0LW1vc3QgZWxlbWVu dCBvZiBcbWV0YXtzZXF1ZW5jZX0KJSAoZW5jbG9zZWQgd2l0aGluIGJyYWNlcykuIFRoYXQgZnVu Y3Rpb24gaXMgbWVhbnQgdG8gYmUKJSB1c2VkIGZvciBpbnN0YW5jZSB3aGVuIG1hbmlwdWxhdGlu ZyBzZXF1ZW5jZXMgd2hvc2UgaXRlbXMKJSBhcmUgYSBwYXJ0aWN1bGFyIHR5cGUgb2Ygb2JqZWN0 cywgc2F5LCBmbG9hdGluZyBwb2ludHMuCiUgXGJlZ2lue3F1b3RlfQolICAgIlxzZXFfZ2V0X2xl ZnRfd2l0aDpObiIgXG1ldGF7c2VxdWVuY2V9ICJ7XGZwX3NldDpObiIgXG1ldGF7ZnAtdmFyfSAi fSIKJSBcZW5ke3F1b3RlfQolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19uZXdfcHJvdGVjdGVk Ok5wbiBcc2VxX2dldF9sZWZ0X3dpdGg6Tm4gIzEgIzIgewogIFxzZXFfaWZfZW1wdHlfZXJyX2Jy ZWFrOk4gIzEgCiAgXGV4cF9hZnRlcjp3TiBcc2VxX2dldF9sZWZ0X2F1eDp3ICMxIFxxX3N0b3Ag eyMyfQogIFxzZXFfYnJlYWtfcG9pbnQ6biB7fQp9Clxjc19uZXdfcHJvdGVjdGVkOk5wbiBcc2Vx X2dldF9sZWZ0X2F1eDp3IFxzZXFfZWx0Om4gIzEgIzIgXHFfc3RvcCAjMyB7IAogICMzIHsjMX0g Cn0KJSAgICBcZW5ke21hY3JvY29kZX0KJSBcZW5ke21hY3JvfQolCiUgXGJlZ2lue21hY3JvfXtc c2VxX3BvcF9sZWZ0Ok4sICAgICAgICBcc2VxX2dwb3BfbGVmdDpOLAolICAgICAgICAgICAgICAg XHNlcV9wb3BfbGVmdF93aXRoOk5uLCAgXHNlcV9ncG9wX2xlZnRfd2l0aDpObiwKJSAgICAgICAg ICAgICAgIFxzZXFfcG9wX2xlZnRfYXV4Ok5ubiwgIFxzZXFfcG9wX2xlZnRfYXV4Ond9CiUgXGJl Z2lue3N5bnRheH0KJSAgIHxcc2VxX3BvcF9sZWZ0X2F1eDpObm58IFxtZXRhe3NlcXVlbmNlfSBc bWV0YXtkZWZ9IFxtYXJne2Fzc2lnbm1lbnQgY29kZX0KJSBcZW5ke3N5bnRheH0KJSBhcHBsaWVz IFxtZXRhe2Fzc2lnbm1lbnQgY29kZX0gdG8gdGhlIGxlZnQtbW9zdCBcbWV0YXtpdGVtfSBvZgol IFxtZXRhe3NlcXVlbmNlfSBpbiB0aGUgZm9ybSBcbWV0YXthc3NpZ25tZW50IGNvZGV9IFxtYXJn e2l0ZW19LAolIGFuZCBhc3NpZ25zIHRoZSB0YWlsIG9mIFxtZXRhe3NlcXVlbmNlfSB0byBcbWV0 YXtzZXF1ZW5jZX0gdXNpbmcKJSBcbWV0YXtkZWZ9LiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50 IGFsbCBvZiB0aGUgInBvcF9sZWZ0IiBmdW5jdGlvbnMuCiUgICAgXGJlZ2lue21hY3JvY29kZX0K XGNzX25ld19wcm90ZWN0ZWQ6TnBuIFxzZXFfcG9wX2xlZnRfYXV4Ok5ubiAjMSAjMiAjMyB7CiAg XHNlcV9pZl9lbXB0eV9lcnJfYnJlYWs6TiAjMQogIFxleHBfYWZ0ZXI6d04gXHNlcV9wb3BfbGVm dF9hdXg6dyAjMSBccV9zdG9wICMxIHsjMn0geyMzfQogIFxzZXFfYnJlYWtfcG9pbnQ6biB7fQp9 Clxjc19uZXdfcHJvdGVjdGVkOk5wbiBcc2VxX3BvcF9sZWZ0X2F1eDp3IFxzZXFfZWx0Om4gIzEg IzJccV9zdG9wICMzIzQjNSB7CiAgIzQgIzMgeyMyfQogICM1ICAgIHsjMX0KfQolICAgIFxlbmR7 bWFjcm9jb2RlfQolIFdlIGNhbiB0aGVuIGltcGxlbWVudCB0aGUgdmFyaW91cyAicG9wX2xlZnQi IGZ1bmN0aW9ucy4KJSAgICBcYmVnaW57bWFjcm9jb2RlfQpcY3NfbmV3Ok5wbiBcc2VxX3BvcF9s ZWZ0Ok4gIzEgewogIFxzZXFfcG9wX2xlZnRfYXV4Ok5ubiAjMSB7XHRsX3NldDpObn0ge1x1c2Vf bm9uZTpufQp9Clxjc19uZXc6TnBuIFxzZXFfZ3BvcF9sZWZ0Ok4gIzEgewogIFxzZXFfcG9wX2xl ZnRfYXV4Ok5ubiAjMSB7XHRsX2dzZXQ6Tm59IHtcdXNlX25vbmU6bn0KfQpcY3NfbmV3Ok5wbiBc c2VxX3BvcF9sZWZ0X3dpdGg6Tm4gIzEgIzIgewogIFxzZXFfcG9wX2xlZnRfYXV4Ok5ubiAjMSB7 XHRsX3NldDpObn0geyMyfQp9Clxjc19uZXc6TnBuIFxzZXFfZ3BvcF9sZWZ0X3dpdGg6Tm4gIzEg IzIgewogIFxzZXFfcG9wX2xlZnRfYXV4Ok5ubiAjMSB7XHRsX2dzZXQ6Tm59IHsjMn0gCn0KJSAg ICBcZW5ke21hY3JvY29kZX0gCiUgXGVuZHttYWNyb30KJQolIAolIFxzdWJzdWJzZWN0aW9ue0Zy b20gdGhlIHJpZ2h0IChzbG93ZXIpfQolIAolIElmIHBvc3NpYmxlLCBhY2Nlc3MgdGhlIGRhdGEg ZnJvbSB0aGUgbGVmdCAoc2VlIHByZXZpb3VzIHNlY3Rpb24pOgolIGZ1bmN0aW9ucyB3aGljaCBh Y2Nlc3Mgc2VxdWVuY2VzIGZyb20gdGhlIHJpZ2h0IGFyZSBzbG93ZXIuCiUgCiUgXGJlZ2lue21h Y3JvfXtcc2VxX2dldF9yaWdodDpOTiwKJSAgICAgICAgICAgICAgIFxzZXFfZ2dldF9yaWdodDpO TiwKJSAgICAgICAgICAgICAgIFxzZXFfZ2V0X3JpZ2h0X3dpdGg6Tm59CiUgXGJlZ2lue3N5bnRh eH0KJSAgICJcc2VxX2dldF9yaWdodF93aXRoOk5uIiBcbWV0YXtzZXF1ZW5jZX0gXG1hcmd7YXNz aWdubWVudH0KJSBcZW5ke3N5bnRheH0KJSBBc3NpZ25zIHRoZSBsYXN0IGVsZW1lbnQgb2YgXG1l dGF7c2VxdWVuY2V9IHVzaW5nIFxtZXRhe2Fzc2lnbm1lbnR9LgolIEZvciBpbnN0YW5jZSB0aGUg XG1ldGF7YXNzaWdubWVudH0gY291bGQgYmUgIlxpbnRfc2V0Ok54IFxsX3RtcGFfaW50Ii4KJSAg ICBcYmVnaW57bWFjcm9jb2RlfQpcY3NfbmV3X3Byb3RlY3RlZF9ub3BhcjpOcG4gXHNlcV9nZXRf cmlnaHQ6Tk4gIzEjMiB7CiAgXHNlcV9nZXRfcmlnaHRfd2l0aDpObiAjMSB7XHRsX3NldDpObiAj Mn0gCn0KXGNzX25ld19wcm90ZWN0ZWRfbm9wYXI6TnBuIFxzZXFfZ2dldF9yaWdodDpOTiAjMSMy IHsKICBcc2VxX2dldF9yaWdodF93aXRoOk5uICMxIHtcdGxfZ3NldDpObiAjMn0gCn0KXGNzX25l d19wcm90ZWN0ZWRfbm9wYXI6TnBuIFxzZXFfZ2V0X3JpZ2h0X3dpdGg6Tm4gIzEgIzIgewogIFxz ZXFfbWFwX2lubGluZV9sYXN0Ok5ubiAjMSB7fSB7IzIgeyMjMX19Cn0KJSAgICBcZW5ke21hY3Jv Y29kZX0KJSBcZW5ke21hY3JvfSAKJSAKJSBcYmVnaW57bWFjcm99e1xzZXFfcG9wX3JpZ2h0Ok4s CiUgICAgICAgICAgICAgICBcc2VxX2dwb3BfcmlnaHQ6TiwKJSAgICAgICAgICAgICAgIFxzZXFf cG9wX3JpZ2h0X3dpdGg6Tm4sCiUgICAgICAgICAgICAgICBcc2VxX2dwb3BfcmlnaHRfd2l0aDpO biwKJSAgICAgICAgICAgICAgIFxzZXFfcG9wX3JpZ2h0X2F1eDpOTm59CiUgXGJlZ2lue3N5bnRh eH0KJSAgICJcc2VxX2dwb3BfcmlnaHQ6TiIgXG1ldGF7c2VxdWVuY2V9CiUgICAiXHNlcV9ncG9w X3JpZ2h0X3dpdGg6Tm4iIFxtZXRhe3NlcXVlbmNlfSBcbWFyZ3thc3NpZ25tZW50fQolIFxlbmR7 c3ludGF4fQolIFJlbW92ZXMgZ2xvYmFsbHkgdGhlIHJpZ2h0LW1vc3QgZWxlbWVudCBmcm9tIFxt ZXRhe3NlcXVlbmNlfSwgYW5kCiUgYXNzaWducyB0aGF0IGVsZW1lbnQgdXNpbmcgXG1ldGF7YXNz aWdubWVudH0uIEJydW5vOiBJIGRvbid0IHByb3ZpZGUKJSAiXHNlcV8oZylwb3BfcmlnaHQ6Tk4i IHdoaWNoIGV4aXN0ZWQgZWFybGllciwgc2luY2UgdGhlaXIgbmFtZSBkb2VzCiUgbm90IG1ha2Ug aXQgY2xlYXIgd2hldGhlciB0aGUgYXNzaWdubWVudCBvZiB0aGUgdGFpbCBpcyBnbG9iYWwgb3Ig bG9jYWwuCiUgCiUgICAgXGJlZ2lue21hY3JvY29kZX0KXGNzX25ld19wcm90ZWN0ZWRfbm9wYXI6 TnBuIFxzZXFfcG9wX3JpZ2h0Ok4gIzEgewogIFxzZXFfcG9wX3JpZ2h0X2F1eDpOTm4gIzEgXGNz X3NldF9ub3BhcjpOcHgge1x1c2Vfbm9uZTpufQp9Clxjc19uZXdfcHJvdGVjdGVkX25vcGFyOk5w biBcc2VxX2dwb3BfcmlnaHQ6TiAjMSB7CiAgXHNlcV9wb3BfcmlnaHRfYXV4Ok5ObiAjMSBcY3Nf Z3NldF9ub3BhcjpOcHgge1x1c2Vfbm9uZTpufQp9Clxjc19uZXdfcHJvdGVjdGVkX25vcGFyOk5w biBcc2VxX3BvcF9yaWdodF93aXRoOk5uICMxICMyIHsKICBcc2VxX3BvcF9yaWdodF9hdXg6Tk5u ICMxIFxjc19zZXRfbm9wYXI6TnB4IHsjMn0KfQpcY3NfbmV3X3Byb3RlY3RlZF9ub3BhcjpOcG4g XHNlcV9ncG9wX3JpZ2h0X3dpdGg6Tm4gIzEgIzIgewogIFxzZXFfcG9wX3JpZ2h0X2F1eDpOTm4g IzEgXGNzX2dzZXRfbm9wYXI6TnB4IHsjMn0KfQolICAgIFxlbmR7bWFjcm9jb2RlfQolIAolICJc c2VxX3BvcF9yaWdodF9hdXg6Tk5uICMxICMyIHsjM30iIHJlbW92ZXMgdGhlIGxhc3QgZWxlbWVu dCBmcm9tCiUgdGhlIHNlcXVlbmNlICIjMSIsIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgYmFjayB0 byAiIzEiIGxvY2FsbHkgb3IKJSBnbG9iYWxseSBkZXBlbmRpbmcgb24gIiMyIi4gSXQgdGhlbiBy dW5zICIjMyIgXG1hcmd7bGFzdCBpdGVtfS4KJQolIFB1dHRpbmcgdGhlIGVsZW1lbnRzIGluIHRo ZSByZXN1bHRpbmcgc2VxdWVuY2Ugb25lIGJ5IG9uZSB1c2luZwolICJcc2VxX3B1dF9yaWdodDpO biIgaXMgdmVyeSBzbG93IChxdWFkcmF0aWMgaW4gdGhlIHNpemUgb2YgdGhlIAolIHNlcXVlbmNl KS4gSW5zdGVhZCwgd2Ugc3RvcmUgdGhlIGVsZW1lbnRzIGFsbCBpbiBvbmUgZ28sIHVzaW5nCiUg dGhlIGZhY3QgdGhhdCBhIGNvZGUgbGlrZQolIFxiZWdpbntxdW90ZX0KJSAiXGNzX3NldF9ub3Bh cjpOcHgiIFxtZXRhe3NlcXVlbmNlfSAie1xpZl9mYWxzZTp9XGZpOiIgICAgICBcXAolICJcZXhw X25vdDpuIiBcbWFyZ3tpdGVtJFxzYjEkfSAgICAgICAgICAgICAgICAgICAgICAgXFwKJSBcbGRv dHN7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcCiUgIlxl eHBfbm90Om4iIFxtYXJne2l0ZW0kXHNiIHtuLTF9JH0gICAgICAgICAgICAgICAgICBcXAolICAi XGlmX2ZhbHNlOntcZmk6fSIgXG1ldGF7ZnVuY3Rpb259IFxtYXJne2l0ZW0kXHNiIG4kfQolIFxl bmR7cXVvdGV9CiUgd2lsbCBzdG9yZSB0aGUgJG4tMSQgZmlyc3QgaXRlbXMgaW4gXG1ldGF7c2Vx dWVuY2V9LCBhbmQgYXBwbHkgdGhlCiUgXG1ldGF7ZnVuY3Rpb259IHRvIFxtYXJne2l0ZW0kXHNi IG4kfS4gVGhlIGNvZGUgaXMgcmF0aGVyIGNyeXB0aWMsCiUgYnV0IGl0IHNob3VsZCB0YWtlIGEg dGltZSBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIHNlcXVlbmNlLgolICAgIFxiZWdpbnttYWNy b2NvZGV9Clxjc19uZXdfcHJvdGVjdGVkX25vcGFyOk5wbiBcc2VxX3BvcF9yaWdodF9hdXg6Tk5u ICMxIzIjMyB7CiAgXHNlcV9pZl9lbXB0eV9lcnJfYnJlYWs6TiAjMQogIFxjc19zZXQ6TnBuIFxz ZXFfZWx0Om4gIyMxIHsgXGV4cF9ub3Q6bntcc2VxX2VsdDpuIHsjIzF9fSB9CiAgXGNzX3NldDpO cG4gXHNlcV90bXA6dyAjIzEgeyAKICAgIFxpZl9mYWxzZTogeyBcZmk6IH0gJSBjbG9zZSB0aGUg YXNzaWdubWVudAogICAgIzMgeyMjMX0gICAgICAgICAgICAlIGFzc2lnbiB0aGUgcmlnaHQtbW9z dCBlbGVtZW50CiAgfQogICMyICMxIHsgXGlmX2ZhbHNlOiB9XGZpOgogIFxleHBfYWZ0ZXI6d04g XGV4cF9hZnRlcjp3TiBcZXhwX2FmdGVyOndOIFx1c2VfaWlfYmlfcmVwZWF0Om5uIAogICAgICAg XGV4cF9hZnRlcjp3TiBcdXNlX25vbmU6biAjMSBcc2VxX3RtcDp3IHtcc2VxX2JyZWFrOn0gXHVz ZTpuCiAgXHNlcV9icmVha19wb2ludDpuIHsKICAgIFxjc19zZXQ6TnBuIFxzZXFfdG1wOncge1xF UlJPUn0KICAgIFxjc19zZXQ6TnBuIFxzZXFfZWx0Om4gIzEge1xFUlJPUn0KICB9Cn0KJSAgICBc ZW5ke21hY3JvY29kZX0gCiUgXGVuZHttYWNyb30gCiUKJQolIFxzdWJzZWN0aW9ue1ByZWRpY2F0 ZXMgYW5kIGNvbmRpdGlvbmFsc30KJQolIFxiZWdpbnttYWNyb317XHNlcV9pZl9lbXB0eV9wOk4s XHNlcV9pZl9lbXB0eV9wOmN9CiUgXGJlZ2lue21hY3JvfVtURl17XHNlcV9pZl9lbXB0eTpOLFxz ZXFfaWZfZW1wdHk6Y30KJSAgICBBIHByZWRpY2F0ZSB3aGljaCBldmFsdWF0ZXMgdG8gfFxjX3Ry dWVfYm9vbHwgaWZmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eS4KJSAgICBcYmVnaW57bWFjcm9jb2Rl fQpccHJnX25ld19lcV9jb25kaXRpb25hbDpOTm4gXHNlcV9pZl9lbXB0eTpOIFx0bF9pZl9lbXB0 eTpOIHtwLFRGLFQsRn0KXHByZ19uZXdfZXFfY29uZGl0aW9uYWw6Tk5uIFxzZXFfaWZfZW1wdHk6 YyBcdGxfaWZfZW1wdHk6YyB7cCxURixULEZ9CiUgICAgXGVuZHttYWNyb2NvZGV9CiUgXGVuZHtt YWNyb30KJSBcZW5ke21hY3JvfQolCiUKJSBcYmVnaW57bWFjcm99e1xzZXFfaWZfZW1wdHlfZXJy Ok4sCiUgICAgICAgICAgICAgICBcc2VxX2lmX2VtcHR5X2Vycl9icmVhazpOfQolIFxiZWdpbntz eW50YXh9CiUgICAiXHNlcV9pZl9lbXB0eV9lcnJfYnJlYWs6TiIgXG1ldGF7c2VxdWVuY2V9CiUg XGVuZHtzeW50YXh9CiUgU2lnbmFscyBhbiBlcnJvciBpZiB0aGUgXG1ldGF7c2VxdWVuY2V9IGlz IGVtcHR5Llxmb290bm90ZXtCcnVubzogCiUgICB0aGluayBhYm91dCB3aGF0IHRvIGRvIGluIGFu IGV4cGFuc2lvbiBjb250ZXh0Ln0KJSBUaGUgIl9icmVhayIgdmFyaWFudCBzaG91bGQgYmUgcHJl ZmVycmVkOiBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHksCiUgaXQgYWxzbyBza2lwcyB0byB0aGUg bmV4dCAiXHNlcV9icmVha19wb2ludDpuIiwgYWxsb3dpbmcgYmV0dGVyIAolIGVycm9yIHJlY292 ZXJ5IGlmIHVzZWQgY29ycmVjdGx5LgolIAolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19uZXdf bm9wYXI6TnBuIFxzZXFfaWZfZW1wdHlfZXJyOk4gIzEgewogIFxpZl9tZWFuaW5nOncgIzEgXGNf ZW1wdHlfdGwKICAgIFx0bF9jbGVhcjpOIFxsX2tlcm5lbF90ZXN0YV90bCAlIGNhdGNoIHByZWZp eGVzCiAgICBcbXNnX2tlcm5lbF9idWc6eCB7RW1wdHl+c2VxdWVuY2V+YFx0b2tlbl90b19zdHI6 TiMxJ30KICBcZmk6Cn0KXGNzX25ld19ub3BhcjpOcG4gXHNlcV9pZl9lbXB0eV9lcnJfYnJlYWs6 TiAjMSB7CiAgXGlmX21lYW5pbmc6dyAjMSBcY19lbXB0eV90bAogICAgXHRsX2NsZWFyOk4gXGxf a2VybmVsX3Rlc3RhX3RsICUgY2F0Y2ggcHJlZml4ZXMKICAgIFxtc2dfa2VybmVsX2J1Zzp4IHtF bXB0eX5zZXF1ZW5jZX5gXHRva2VuX3RvX3N0cjpOIzEnfQogICAgXGV4cF9hZnRlcjp3TiBcc2Vx X2JyZWFrOgogIFxmaToKfQolICAgIFxlbmR7bWFjcm9jb2RlfQolIAolIEJydW5vOiBhIHByZXZp b3VzIGNvbW1lbnQgb24gdGhlc2UgZnVuY3Rpb25zLCB3aGljaCBJIGRvbid0IHVuZGVyc3RhbmQu CiUgXGJlZ2lue3F1b3RlfQolICAgQXMgSSBzYWlkIGJlZm9yZSwgSSBkb24ndCB0aGluayB3ZSBu ZWVkIHRvIHByb3ZpZGUgY2hlY2tzIGZvciB0aGlzCiUgICBraW5kIG9mIGVycm9yLCBzaW5jZSBp dCBpcyBhIHNldmVyZSBpbnRlcm5hbCBtYWNybyBwYWNrYWdlIGVycm9yCiUgICB0aGF0IGNhbiBu b3QgYmUgcHJvZHVjZWQgYnkgdGhlIHVzZXIgZGlyZWN0bHkuIENhbiBpdD8gU28gdGhlCiUgICBu ZXh0IGxpbmUgb2YgY29kZSBzaG91bGQgYmUgcHJvYmFibHkgcmVtb3ZlZC4KJSAgIChXaWxsOiBJ IGhhdmUgbm8gaWRlYSB3aGF0IHRoaXMgY29tbWVudCBtZWFucy4pCiUgXGVuZHtxdW90ZX0KJQol IFxlbmR7bWFjcm99CiUKJSBcYmVnaW57bWFjcm99W1RGXXtcc2VxX2lmX2luOk5uLCBcc2VxX2lm X2luOk5WLAolICAgICAgICAgICAgICAgICAgIFxzZXFfaWZfaW46Y24sIFxzZXFfaWZfaW46Y1Ys CiUgICAgICAgICAgICAgICAgICAgXHNlcV9pZl9pbjpjbyxcc2VxX2lmX2luOmN4fQolIFxiZWdp bntzeW50YXh9CiUgIlxzZXFfaWZfaW46Tm5URiIgXG17c2VxfVxte2l0ZW19IFxte3RydWV+Y2Fz ZX0gXG17ZmFsc2V+Y2FzZX0KJSBcZW5ke3N5bnRheH0KJSB3aWxsIGNoZWNrIHdoZXRoZXIgXG17 aXRlbX0gaXMgaW4gXG17c2VxfSBhbmQgdGhlbiBlaXRoZXIgZXhlY3V0ZQolIHRoZSBcbXt0cnVl fmNhc2V9IG9yIHRoZSBcbXtmYWxzZX5jYXNlfS4KJSAKJSBXZSBkZWZpbmUgIlxzZXFfZWx0Om4i IHRvIGNvbXBhcmUgaXRzIGFyZ3VtZW50IHdpdGggdGhlIGl0ZW0gd2UKJSBhcmUgbG9va2luZyBm b3IsIGFuZCB0aGVuIGV4ZWN1dGUgdGhlIHNlcXVlbmNlLiBJZiB0aGUgdHdvIGl0ZW1zCiUgYXJl IGVxdWFsLCB0aGVuIHdlIGFyZSBkb25lOiBicmVhaywgYW5kIHJldHVybiB0cnVlLiBJZiB0aGUg aXRlbQolIHdhcyBub3QgZm91bmQgYWZ0ZXIgZ29pbmcgdGhyb3VnaCB0aGUgd2hvbGUgc2VxdWVu Y2UsIHdlIGJyZWFrCiUgYW5kIHJldHVybiBmYWxzZS4gCiUgCiUgVGhlIHdob2xlIHRlc3QgaXMg aW5zaWRlIGEgZ3JvdXAsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gY2FzZXMKJSB3aGVyZSB0 aGUgZGVmaW5pdGlvbiBvZiAiXHNlcV9lbHQ6biIgc2hvdWxkIGJlIHByZXNlcnZlZCAoZS5nLgol IHRoZSAicmVtb3ZlX2R1cGxpY2F0ZXMiIGZ1bmN0aW9ucykuIFRoZSBncm91cCBpcyBhbHdheXMg Y2xvc2VkCiUgYmVmb3JlIHJldHVybmluZyBlaXRoZXIgdHJ1ZSBvciBmYWxzZTogc2VlIHRoZSBp bXBsZW1lbnRhdGlvbiAKJSBvZiAiXHNlcV9icmVha19wb2ludDpuIi4KJSAgICAKJSAgICBcYmVn aW57bWFjcm9jb2RlfQpcdGxfbmV3Ok4gXGxfc2VxX3RtcGFfdGwKXHRsX25ldzpOIFxsX3NlcV90 bXBiX3RsClxwcmdfbmV3X3Byb3RlY3RlZF9jb25kaXRpb25hbDpOcG5uIFxzZXFfaWZfaW46Tm4g IzEgIzIge1RGLFQsRn0gewogIFxncm91cF9iZWdpbjoKICBcdGxfc2V0Ok5uIFxsX3NlcV90bXBh X3RsIHsjMn0KICBcY3Nfc2V0Ok5wbiBcc2VxX2VsdDpuICMjMSB7CiAgICBcdGxfc2V0Ok5uIFxs X3NlcV90bXBiX3RsIHsjIzF9CiAgICBcaWZfbWVhbmluZzp3IFxsX3NlcV90bXBhX3RsIFxsX3Nl cV90bXBiX3RsCiAgICBcdXNlX2lfYWZ0ZXJfZmk6bncgCiAgICBcc2VxX2JyZWFrOm4ge1xwcmdf cmV0dXJuX3RydWU6fQogICAgXGZpOgogIH0KICAjMSAKICBcc2VxX2JyZWFrOm4ge1xwcmdfcmV0 dXJuX2ZhbHNlOn0KICBcc2VxX2JyZWFrX3BvaW50Om4ge1xncm91cF9lbmQ6fQp9CiUgICAgXGVu ZHttYWNyb2NvZGV9CiUgICAgXGJlZ2lue21hY3JvY29kZX0KXGNzX2dlbmVyYXRlX3ZhcmlhbnQ6 Tm4gXHNlcV9pZl9pbjpOblRGIHsgTlYsIGNWLCBjbywgY24sIGN4fQpcY3NfZ2VuZXJhdGVfdmFy aWFudDpObiBcc2VxX2lmX2luOk5uVCAgeyBOViwgY1YsIGNvLCBjbiwgY3h9Clxjc19nZW5lcmF0 ZV92YXJpYW50Ok5uIFxzZXFfaWZfaW46Tm5GICB7IE5WLCBjViwgY28sIGNuLCBjeH0KJSAgICBc ZW5ke21hY3JvY29kZX0KJSBcZW5ke21hY3JvfQolCiUKJSBcYmVnaW57bWFjcm99W1RGXXtcc2Vx X2lmX2luX3N0cjpObn0KJSBcYmVnaW57c3ludGF4fQolICAgIlxzZXFfaWZfaW5fc3RyOk5uVEYi IFxte3NlcX1cbXtpdGVtfSBcbXt0cnVlfmNhc2V9IFxte2ZhbHNlfmNhc2V9CiUgXGVuZHtzeW50 YXh9CiUgd2lsbCBjaGVjayB3aGV0aGVyIFxte2l0ZW19IGlzIGluIFxte3NlcX0gYW5kIHRoZW4g ZWl0aGVyIGV4ZWN1dGUKJSB0aGUgXG17dHJ1ZX5jYXNlfSBvciB0aGUgXG17ZmFsc2V+Y2FzZX0u CiUgICAgCiUgSW1wb3J0YW50IG5vdGljZTogdGhpcyB0ZXN0IGlzIGZhc3RlciB0aGFuICJcc2Vx X2lmX2luOk5uVEYiLCBidXQKJSBcZW1waHtsZXNzIHJvYnVzdH06IFxte2l0ZW19IGlzIHBhc3Nl ZCB0aHJvdWdoICJcdGxfdG9fc3RyOm4iIGJlZm9yZSAKJSBiZWluZyBjb21wYXJlZC4gV2UgdXNl IGRlbGltaXRlZCBhcmd1bWVudHMuCiUgCiUgQWdhaW4sIHRoZSB0ZXN0IGlzIHBlcmZvcm1lZCBp bnNpZGUgYSBncm91cCwgdG8gYXZvaWQgcG90ZW50aWFsIHByb2JsZW1zCiUgd2l0aCBuZXN0aW5n LgolICAgIFxiZWdpbnttYWNyb2NvZGV9ClxwcmdfbmV3X3Byb3RlY3RlZF9jb25kaXRpb25hbDpO cG5uIFxzZXFfaWZfaW5fc3RyOk5uICMxICMyIHtURixULEZ9IHsKICBcZ3JvdXBfYmVnaW46CiAg XGV4cF9hZnRlcjp3TiBcY3Nfc2V0Ok5wbiBcZXhwX2FmdGVyOndOIFxzZXFfdG1wOncgCiAgXGV4 cF9hZnRlcjp3TiAjIyBcZXhwX2FmdGVyOndOIDEgXHRsX3RvX3N0cjpuIHtcc2VxX2VsdDpuIHsj Mn19ICMjMiBccV9zdG9wCiAgewogICAgXGdyb3VwX2VuZDoKICAgIFx0bF9pZl9lbXB0eTpuVEYg eyMjMn0ge1xwcmdfcmV0dXJuX2ZhbHNlOn0ge1xwcmdfcmV0dXJuX3RydWU6fQogIH0KICBcZXhw X2FmdGVyOndOIFxzZXFfdG1wOncgCiAgICAgIFx0bF90b19zdHI6biBcZXhwX2FmdGVyOndOIHsj MVxzZXFfZWx0Om4geyMyfX0gXHFfc3RvcAp9CiUgICAgXGVuZHttYWNyb2NvZGV9CiUgXGVuZHtt YWNyb30KJSAKJSAKJQolIFxzdWJzZWN0aW9ue01pc2N9CiUKJSBcYmVnaW57bWFjcm99e1xzZXFf c2hvdzpOLCBcc2VxX3Nob3c6Y30KJSAgICBcYmVnaW57bWFjcm9jb2RlfQpcY3NfbmV3X2VxOk5O IFxzZXFfc2hvdzpOIFx0bF9zaG93Ok4KXGNzX25ld19lcTpOTiBcc2VxX3Nob3c6YyBcdGxfc2hv dzpjCiUgICAgXGVuZHttYWNyb2NvZGV9CiUgXGVuZHttYWNyb30KJQolIFxiZWdpbnttYWNyb317 XHNlcV9kaXNwbGF5Ok4sIFxzZXFfZGlzcGxheTpjfQolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxj c19uZXdfcHJvdGVjdGVkX25vcGFyOk5wbiBcc2VxX2Rpc3BsYXk6TiAjMSB7CiAgXGlvd190ZXJt OnggeyBTZXF1ZW5jZX5cdG9rZW5fdG9fc3RyOk4gIzF+Y29udGFpbnN+CiAgICAgICAgICAgICAg ICAgICB0aGV+ZWxlbWVudHN+KHdpdGhvdXR+b3V0ZXJ+YnJhY2VzKTogfQogIFx0b2tzX2NsZWFy Ok4gXGxfdG1wYV90b2tzCiAgXHNlcV9tYXBfaW5saW5lOk5uICMxIHsKICAgIFx0b2tzX2lmX2Vt cHR5Ok5GICBcbF90bXBhX3Rva3MgewogICAgICBcdG9rc19wdXRfcmlnaHQ6TnggXGxfdG1wYV90 b2tzIHteXko+fn0KICAgIH0KICAgIFx0b2tzX3B1dF9yaWdodDpOeCBcbF90bXBhX3Rva3Mgewog ICAgICBcY19zcGFjZV90bCBcaW93X2NoYXI6TiBceyBcZXhwX25vdDpuIHsjIzF9IFxpb3dfY2hh cjpOIFx9CiAgICB9CiAgfQogIFx0b2tzX3Nob3c6TiBcbF90bXBhX3Rva3MKfQpcY3NfZ2VuZXJh dGVfdmFyaWFudDpObiBcc2VxX2Rpc3BsYXk6TiB7Y30KJSAgICBcZW5ke21hY3JvY29kZX0KJSBc ZW5ke21hY3JvfQolIAolIAolIFxiZWdpbnttYWNyb31bYXV4XXtcbF9zZXFfcmVtb3ZlX3NlcX0K JSAgIEEgY29tbW9uIHNjcmF0Y2ggc3BhY2UgZm9yIHRoZSByZW1vdmFsIHJvdXRpbmVzLgolICAg IFxiZWdpbnttYWNyb2NvZGV9ClxzZXFfbmV3Ok4gXGxfc2VxX3JlbW92ZV9zZXEKJSAgICBcZW5k e21hY3JvY29kZX0KJSBcZW5ke21hY3JvfQolIAolIFxiZWdpbnttYWNyb317XHNlcV9yZW1vdmVf YWxsX2luOk5ufQolIFRoaXMgc2VlbXMgdG8gYmUgdXNlZCBpbiAibDNmaWxlLmR0eCIgdW5kZXIg dGhlIG5hbWUKJSAiXHNlcV9yZW1vdmVfZWxlbWVudDpObiIuIFRoZSB2ZXJzaW9uIGhlcmUgaXMg cXVpdGUgaW5lZmZpY2llbnQuCiUgSXQgd291bGQgYmUgYmV0dGVyIHRvIGdvIHRocm91Z2ggdGhl IGxpc3Qgb25jZSwgZmluZCBhdCB3aGljaAolIHBvc2l0aW9uKHMpIHRoZSBpdGVtIGFwcGVhcnMs IGFuZCB0aGVuIGRvIGEgdHJpY2sgc2ltaWxhciB0bwolIHRoZSBlZmZpY2llbnQgaW1wbGVtZW50 YXRpb24gb2YgIlxzZXFfcG9wX3JpZ2h0IiBmdW5jdGlvbnMuCiUgICAgXGJlZ2lue21hY3JvY29k ZX0KXGNzX25ld19wcm90ZWN0ZWQ6TnBuIFxzZXFfcmVtb3ZlX2FsbF9pbjpObiAjMSAjMiB7CiAg XHNlcV9jbGVhcjpOIFxsX3NlcV9yZW1vdmVfc2VxCiAgXHNlcV9tYXBfaW5saW5lOk5uICMxIHsK ICAgIFx0bF9pZl9lcTpubkYgeyMyfSB7IyMxfSB7XHNlcV9wdXRfcmlnaHQ6Tm4gXGxfc2VxX3Jl bW92ZV9zZXEgeyMjMX0gfQogIH0KICBcc2VxX3NldF9lcTpOTiAjMSBcbF9zZXFfcmVtb3ZlX3Nl cQp9Clxjc19uZXdfcHJvdGVjdGVkOk5wbiBcc2VxX2dyZW1vdmVfYWxsX2luOk5uICMxICMyIHsK ICBcc2VxX2NsZWFyOk4gXGxfc2VxX3JlbW92ZV9zZXEKICBcc2VxX21hcF9pbmxpbmU6Tm4gIzEg ewogICAgXHRsX2lmX2VxOm5uRiB7IzJ9IHsjIzF9IHtcc2VxX3B1dF9yaWdodDpObiBcbF9zZXFf cmVtb3ZlX3NlcSB7IyMxfSB9CiAgfQogIFxzZXFfZ3NldF9lcTpOTiAjMSBcbF9zZXFfcmVtb3Zl X3NlcQp9CiUgICAgXGVuZHttYWNyb2NvZGV9CiUgXGVuZHttYWNyb30KJSAKJSAKJSBcYmVnaW57 bWFjcm99W2F1eF17XHNlcV9yZW1vdmVfZHVwbGljYXRlc19hdXg6Tk5OfQolIFxiZWdpbnttYWNy b31bYXV4XXtcc2VxX3JlbW92ZV9kdXBsaWNhdGVzX2F1eDpObn0KJSBcYmVnaW57bWFjcm99e1xz ZXFfcmVtb3ZlX2R1cGxpY2F0ZXM6TiwKJSAgICAgICAgICAgICAgIFxzZXFfZ3JlbW92ZV9kdXBs aWNhdGVzOk4sCiUgICAgICAgICAgICAgICBcc2VxX3JlbW92ZV9zdHJfZHVwbGljYXRlczpOLAol ICAgICAgICAgICAgICAgXHNlcV9ncmVtb3ZlX3N0cl9kdXBsaWNhdGVzOk59CiUgQ29waWVkIGZy b20gIlxjbGlzdF9yZW1vdmVfZHVwbGljYXRlcyIsIHdpdGggYSBzbWFsbAolIG1vZGlmaWNhdGlv biB0byBnZXQgdGhlICJfc3RyIiB2YXJpYW50cyBpbiB0aGUgc2FtZSBnby4KJSAgICBcYmVnaW57 bWFjcm9jb2RlfQpcY3NfbmV3X3Byb3RlY3RlZDpOcG4gXHNlcV9yZW1vdmVfZHVwbGljYXRlc19h dXg6Tk5OICMxICMyICMzIHsKICBcc2VxX2NsZWFyOk4gXGxfc2VxX3JlbW92ZV9zZXEKICBcc2Vx X21hcF9mdW5jdGlvbjpObiAjMyB7XHNlcV9yZW1vdmVfZHVwbGljYXRlc19hdXg6Tm4gIzF9CiAg IzIgIzMgXGxfc2VxX3JlbW92ZV9zZXEKfQpcY3NfbmV3X3Byb3RlY3RlZDpOcG4gXHNlcV9yZW1v dmVfZHVwbGljYXRlc19hdXg6Tm4gIzEgIzIgewogICMxIFxsX3NlcV9yZW1vdmVfc2VxIHsjMn0g ewogICAgXHNlcV9wdXRfcmlnaHQ6Tm4gXGxfc2VxX3JlbW92ZV9zZXEgeyMyfQogIH0KfQolICAg IFxlbmR7bWFjcm9jb2RlfQolICAgIFxiZWdpbnttYWNyb2NvZGV9Clxjc19uZXdfcHJvdGVjdGVk X25vcGFyOk5wbiBcc2VxX3JlbW92ZV9kdXBsaWNhdGVzOk4gewogIFxzZXFfcmVtb3ZlX2R1cGxp Y2F0ZXNfYXV4Ok5OTiBcc2VxX2lmX2luOk5uRiBcc2VxX3NldF9lcTpOTiB9Clxjc19uZXdfcHJv dGVjdGVkX25vcGFyOk5wbiBcc2VxX2dyZW1vdmVfZHVwbGljYXRlczpOIHsKICBcc2VxX3JlbW92 ZV9kdXBsaWNhdGVzX2F1eDpOTk4gXHNlcV9pZl9pbjpObkYgXHNlcV9nc2V0X2VxOk5OIH0KXGNz X25ld19wcm90ZWN0ZWRfbm9wYXI6TnBuIFxzZXFfcmVtb3ZlX3N0cl9kdXBsaWNhdGVzOk4gewog IFxzZXFfcmVtb3ZlX2R1cGxpY2F0ZXNfYXV4Ok5OTiBcc2VxX2lmX2luX3N0cjpObkYgXHNlcV9z ZXRfZXE6Tk4gfQpcY3NfbmV3X3Byb3RlY3RlZF9ub3BhcjpOcG4gXHNlcV9ncmVtb3ZlX3N0cl9k dXBsaWNhdGVzOk4gewogIFxzZXFfcmVtb3ZlX2R1cGxpY2F0ZXNfYXV4Ok5OTiBcc2VxX2lmX2lu X3N0cjpObkYgXHNlcV9nc2V0X2VxOk5OIH0KJSAgICBcZW5ke21hY3JvY29kZX0KJSBcZW5ke21h Y3JvfQolIFxlbmR7bWFjcm99CiUgXGVuZHttYWNyb30KJQolCiUKJSBcc3Vic2VjdGlvbntTZXF1 ZW5jZSBzdGFja3N9CiUKJSAKJSBcYmVnaW57bWFjcm99e1xzZXFfcHVzaDpObiwKJSAgICAgICAg ICAgICAgIFxzZXFfcHVzaDpOViwKJSAgICAgICAgICAgICAgIFxzZXFfcHVzaDpObywKJSAgICAg ICAgICAgICAgIFxzZXFfcHVzaDpjbiwKJSAgICAgICAgICAgICAgIFxzZXFfcG9wOk4sCiUgICAg ICAgICAgICAgICBcc2VxX3BvcF93aXRoOk5ufQolIFNpbmNlIHNlcXVlbmNlcyBjYW4gYmUgdXNl ZCBhcyBzdGFja3MsIHdlIG91Z2h0IHRvIGhhdmUgYm90aCAKJSBgcHVzaCcgYW5kIGBwb3AnLiBU aGV5IGFyZSBub3RoaW5nIG1vcmUgdGhlbiBuZXcKJSBuYW1lcyBmb3Igb2xkIGZ1bmN0aW9ucy4K JSAgICBcYmVnaW57bWFjcm9jb2RlfQpcY3NfbmV3X2VxOk5OIFxzZXFfcHVzaDpObiAgICAgIFxz ZXFfcHV0X2xlZnQ6Tm4KXGNzX25ld19lcTpOTiBcc2VxX3B1c2g6TlYgICAgICBcc2VxX3B1dF9s ZWZ0Ok5WClxjc19uZXdfZXE6Tk4gXHNlcV9wdXNoOk5vICAgICAgXHNlcV9wdXRfbGVmdDpObwpc Y3NfbmV3X2VxOk5OIFxzZXFfcHVzaDpjbiAgICAgIFxzZXFfcHV0X2xlZnQ6Y24KXGNzX25ld19l cTpOTiBcc2VxX3BvcDpOICAgICAgICBcc2VxX3BvcF9sZWZ0Ok4KXGNzX25ld19lcTpOTiBcc2Vx X3BvcF93aXRoOk5uICBcc2VxX3BvcF9sZWZ0X3dpdGg6Tm4KJSAgICBcZW5ke21hY3JvY29kZX0K JSBcZW5ke21hY3JvfQolCiUgXGJlZ2lue21hY3JvfXtcc2VxX2dwdXNoOk5uLAolICAgICAgICAg ICAgICAgXHNlcV9ncHVzaDpOViwKJSAgICAgICAgICAgICAgIFxzZXFfZ3B1c2g6Tm8sCiUgICAg ICAgICAgICAgICBcc2VxX2dwdXNoOk54LAolICAgICAgICAgICAgICAgXHNlcV9ncHVzaDpjbiwK JSAgICAgICAgICAgICAgIFxzZXFfZ3B1c2g6Y1YsCiUgICAgICAgICAgICAgICBcc2VxX2dwdXNo Ok52LAolICAgICAgICAgICAgICAgXHNlcV9ncG9wOk4sIAolICAgICAgICAgICAgICAgXHNlcV9n cG9wX3dpdGg6Tm59CiUgSSAod2hvPykgZG9uJ3QgYWdyZWUgd2l0aCBEZW55cyB0aGF0IG9uZSBu ZWVkcyBvbmx5IGxvY2FsIHN0YWNrcywKJSBhY3R1YWxseSBJIGJlbGlldmUgdGhhdCBvbmUgd2ls bCBwcm9iYWJseSBuZWVkIHRoZSBmdW5jdGlvbnMKJSBoZXJlIG1vcmUgb2Z0ZW4uICJcc2VxX2dw b3A6Tk4iIHdhcyByZW1vdmVkLCBiZWNhdXNlIGl0IGlzIHVuY2xlYXIKJSB0aGF0IHRoZSB2YWx1 ZSBpcyByZXR1cm5lZCBsb2NhbGx5LiBVc2UgIlxzZXFfZ3BvcF93aXRoOk5uIiAKJSBcbWV0YXtz ZXF1ZW5jZX0gIntcdGxfc2V0Ok5uIiBcbWV0YXt0bC12YXIufSAifSIgaW5zdGVhZC4KJSBuZXZl cnRoZWxlc3MgcmV0dXJuZWQgbG9jYWxseS4KJSAgICBcYmVnaW57bWFjcm9jb2RlfQpcY3NfbmV3 X2VxOk5OICBcc2VxX2dwdXNoOk5uICAgICBcc2VxX2dwdXRfbGVmdDpObgpcY3NfbmV3X2VxOk5O ICBcc2VxX2dwdXNoOk5WICAgICBcc2VxX2dwdXRfbGVmdDpOVgpcY3NfbmV3X2VxOk5OICBcc2Vx X2dwdXNoOk5vICAgICBcc2VxX2dwdXRfbGVmdDpObwpcY3NfbmV3X2VxOk5OICBcc2VxX2dwdXNo Ok54ICAgICBcc2VxX2dwdXRfbGVmdDpOeApcY3NfbmV3X2VxOk5OICBcc2VxX2dwdXNoOmNuICAg ICBcc2VxX2dwdXRfbGVmdDpjbgpcY3NfbmV3X2VxOk5OICBcc2VxX2dwdXNoOmNWICAgICBcc2Vx X2dwdXRfbGVmdDpjVgpcY3NfZ2VuZXJhdGVfdmFyaWFudDpObiBcc2VxX2dwdXNoOk5uIHtOdn0K XGNzX25ld19lcTpOTiAgXHNlcV9ncG9wOk4gICAgICAgXHNlcV9ncG9wX2xlZnQ6TgpcY3NfbmV3 X2VxOk5OICBcc2VxX2dwb3Bfd2l0aDpObiBcc2VxX2dwb3BfbGVmdF93aXRoOk5uCiUgICAgXGVu ZHttYWNyb2NvZGV9CiUgXGVuZHttYWNyb30KJSAKJQolIFxiZWdpbnttYWNyb317XHNlcV9nZXQ6 Tk4sIFxzZXFfZ2dldDpOTiwgXHNlcV9nZXRfd2l0aDpObn0KJSBMb29raW5nIGF0IHRoZSB0b3Ag ZWxlbWVudCBvZiB0aGUgc3RhY2sgd2l0aG91dCByZW1vdmluZyBpdCBpcwolIGRvbmUgd2l0aCB0 aGlzIG9wZXJhdGlvbi4KJSAgICBcYmVnaW57bWFjcm9jb2RlfQpcY3NfbmV3X2VxOk5OIFxzZXFf Z2V0Ok5OIFxzZXFfZ2V0X2xlZnQ6Tk4KXGNzX25ld19lcTpOTiBcc2VxX2dnZXQ6Tk4gXHNlcV9n Z2V0X2xlZnQ6Tk4KXGNzX25ld19lcTpOTiBcc2VxX2dldF93aXRoOk5uIFxzZXFfZ2V0X2xlZnRf d2l0aDpObgolICAgIFxlbmR7bWFjcm9jb2RlfQolIFxlbmR7bWFjcm99CiUKJQolICAgIFxiZWdp bnttYWNyb2NvZGV9CiU8L2luaXRleHxwYWNrYWdlPgolICAgIFxlbmR7bWFjcm9jb2RlfQolCiUg ICAgU2hvdyB0b2tlbiB1c2FnZToKJSAgICBcYmVnaW57bWFjcm9jb2RlfQolPCpzaG93bWVtb3J5 PgolXHNob3dNZW1Vc2FnZQolPC9zaG93bWVtb3J5PgolICAgIFxlbmR7bWFjcm9jb2RlfQolCiUg XGVuZHtpbXBsZW1lbnRhdGlvbn0KJSBcUHJpbnRJbmRleAolCiUgXGVuZGlucHV0Cg== --20cf303f6c645ce1d8049e8f3cff--