From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Mauro Aranda Newsgroups: gmane.emacs.bugs Subject: bug#18: Fine-grained revert-buffer Date: Mon, 29 Apr 2019 21:17:48 -0300 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000007302600587b45578" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="236041"; mail-complaints-to="usenet@blaine.gmane.org" Cc: rms@gnu.org To: 18@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Apr 30 02:19:20 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hLGUS-000zH7-4n for geb-bug-gnu-emacs@m.gmane.org; Tue, 30 Apr 2019 02:19:20 +0200 Original-Received: from localhost ([127.0.0.1]:36891 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hLGUR-0006Rl-5D for geb-bug-gnu-emacs@m.gmane.org; Mon, 29 Apr 2019 20:19:19 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:55092) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hLGUE-0006RO-6l for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2019 20:19:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hLGUA-0004d6-MA for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2019 20:19:06 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:54856) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hLGUA-0004cs-Ga for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2019 20:19:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hLGUA-0006WR-A9 for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2019 20:19:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Mauro Aranda Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 30 Apr 2019 00:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 18 X-GNU-PR-Package: emacs Original-Received: via spool by 18-submit@debbugs.gnu.org id=B18.155658349225015 (code B ref 18); Tue, 30 Apr 2019 00:19:02 +0000 Original-Received: (at 18) by debbugs.gnu.org; 30 Apr 2019 00:18:12 +0000 Original-Received: from localhost ([127.0.0.1]:40167 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hLGTK-0006VO-Mi for submit@debbugs.gnu.org; Mon, 29 Apr 2019 20:18:11 -0400 Original-Received: from mail-lj1-f181.google.com ([209.85.208.181]:39202) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hLGTH-0006Uu-5O for 18@debbugs.gnu.org; Mon, 29 Apr 2019 20:18:08 -0400 Original-Received: by mail-lj1-f181.google.com with SMTP id q10so11059320ljc.6 for <18@debbugs.gnu.org>; Mon, 29 Apr 2019 17:18:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=wrhiI7rbKa572zfyJqWpjuRmwqRQIJD71W0JYr7f/g0=; b=FZGuJQuyvCpRfvgrPHcOqcpg2zaLpiJve92cT6hjlPn/TIBInsPQiY7t5HtfJ4kgJB 2UxxcpxCOlwUzOPhA2XcuiS8hbyJhCHAfprgcmuoKc1warFFKEsH2KpFBj87bejgJCFo rZaMWY2awHyl2jI0+4s4piVCYlFRd+Op23xaLUsV3hLpMEtJypOeat1JN/BWIzvvH3UD 5z+QJ9GnxRGBNZDSWyzbl6mjDxyCOPD8WpCnS7zS1nWTEn5cYtyAQQ+vvP4A6AHeG/gp bcCan6kwD+rpjnxHC1o87/jE9o+RaiMyPHbxu5BKdWiXbYZZYfmywx3NtpHs41hDcEjC DClA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=wrhiI7rbKa572zfyJqWpjuRmwqRQIJD71W0JYr7f/g0=; b=mG+zC3x4o7OxPdPHI4mKb6osytdgOVP406Msp4egiPMNN6CRwR0+xofGwVBQl4cXzw xhQeM7JtW6z11ZFonrX+Q3WWnisxGdXhKx6elhX/KPXThoKlFN+nsziFfcMtTVOOUXQt DHvb4gzicDl+Ri898tJQBVXBFibho+pXhMcd4l9+xPNd3RO1qBe1ifqPiCdM97+lWdYd OYBnnB19td8HUNKynG9O/1L0GtP9k0yLb6OJ49EdfPO9/5AsYjpVgNw5v9jP5dLyhiWC FClkD5KDupBqW0hTTJDoXfZ+FD2PVF0UOeNC0EUxfQdlo98n2yczmt6uRgt0eErAU3E/ j2hg== X-Gm-Message-State: APjAAAU1gAjzWkBG6DEVHQHDMe7H3zvCuTX4YxecLPONJjGbZgG6VCMU y0HpYKGU40st+eDvS+9UndTFJptix+xo98wS7AdH65usK+A= X-Google-Smtp-Source: APXvYqymNpWxGRfAygrXxNDniwgNm0lCEBS1QPrPMuzujogFQ/jsVXkSaKkluay2TB222V7IysOXshXBaJ3E7Gv0gRQ= X-Received: by 2002:a2e:500d:: with SMTP id e13mr34206766ljb.169.1556583481007; Mon, 29 Apr 2019 17:18:01 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:158466 Archived-At: --0000000000007302600587b45578 Content-Type: multipart/alternative; boundary="00000000000073025d0587b45576" --00000000000073025d0587b45576 Content-Type: text/plain; charset="UTF-8" I've now written a similar function to revert the buffer, but using replace-buffer-contents as I was suggested. The new attached file contains such function, which I called revert-buffer-with-fine-grain, to honor a previous post. I kept it as similar as I could to the revert-buffer-by-hunks function, and went ahead to time both functions (I figure there will be enough time to add functionality to them). I additionally timed revert-buffer. For the files in Bug#31888, the results were: revert-buffer: 0.122238819 revert-buffer-with-fine-grain: 2.85150876 rbbh-revert-buffer-by-hunks: 2.044583634 all times in seconds, substracting GC time. To gather more data, I compared emacs-25.3 and emacs-26.2 C source files (from the src/ directory), checking them out from the git repository. I did the test as if I was going back from emacs-26.2 to emacs-25.3. I think these files provided a good range of changes in size and number of hunks, obtained from `diff --normal'. I attach the data as ascii file. Let me know if I should send it in another format. The tests are with the latest master, optimized build, run as `emacs -Q'. For the majority of files, revert-buffer and revert-buffer-with-fine-grain spent a similar amount of time when the buffers or changes are not too big, so I believe that's promising for implementing this functionality. On the contrary, reverting by hunks (by calling diff), takes 1 to 4 times more than the other functions, in these cases. When there are many changes, replace-buffer-contents starts taking too much time (as the docs warns). In those situations, reverting by hunks does a much better job than using replace-buffer-contents, but I'm not sure if it does a good enough job. Some problematic files: doprnt.c: revert-buffer-with-fine-grain took 28.6 times more than revert-buffer and rbbh-revert-buffer-by-hunks took 1.4 times more. alloc.c: revert-buffer-with-fine-grain took 18 times more than revert-buffer and rbbh-revert-buffer-by-hunks took 6.5 times more. lisp.h: lisp.h took almost 9 minutes to revert, using revert-buffer-with-fine-grain. It took 0.86 seconds to revert with rbbh-revert-buffer-by-hunks. I'll wait for opinions about the data I've collected. At least it was super fun writing these tests. Best regards, Mauro. --00000000000073025d0587b45576 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I've now written a similar function t= o revert the buffer, but using
replace-buffer-contents as I was suggeste= d.=C2=A0 The new attached file
contains such function, which I called re= vert-buffer-with-fine-grain, to
honor a previous post.

I kept it = as similar as I could to the revert-buffer-by-hunks
function, and went a= head to time both functions (I figure there will be
enough time to add f= unctionality to them).=C2=A0 I additionally timed
revert-buffer.

= For the files in Bug#31888, the results were:
revert-buffer: 0.122238819=
revert-buffer-with-fine-grain: 2.85150876
rbbh-revert-buffer-by-hunk= s: 2.044583634

all times in seconds, substracting GC time.

To= gather more data, I compared emacs-25.3 and emacs-26.2 C source
files (= from the src/ directory), checking them out from the git
repository.=C2= =A0 I did the test as if I was going back from emacs-26.2 to
emacs-25.3.= =C2=A0 I think these files provided a good range of changes in
size and = number of hunks, obtained from `diff --normal'.

I attach the dat= a as ascii file.=C2=A0 Let me know if I should send it in
another format= .=C2=A0 The tests are with the latest master, optimized build,
run as `e= macs -Q'.

For the majority of files, revert-buffer and
revert= -buffer-with-fine-grain spent a similar amount of time when the
buffers = or changes are not too big, so I believe that's promising for
implem= enting this functionality.=C2=A0 On the contrary, reverting by hunks
(by= calling diff), takes 1 to 4 times more than the other functions, in
the= se cases.

When there are many changes, replace-buffer-contents start= s taking too
much time (as the docs warns).=C2=A0 In those situations, r= everting by hunks
does a much better job than using replace-buffer-conte= nts, but I'm not
sure if it does a good enough job.

Some prob= lematic files:
doprnt.c:
revert-buffer-with-fine-grain took 28.6 time= s more than revert-buffer
and rbbh-revert-buffer-by-hunks took 1.4 times= more.

alloc.c:
revert-buffer-with-fine-grain took 18 times more = than revert-buffer
and rbbh-revert-buffer-by-hunks took 6.5 times more.<= br>
lisp.h:
lisp.h took almost 9 minutes to revert, using
revert-b= uffer-with-fine-grain.=C2=A0 It took 0.86 seconds to revert with
rbbh-re= vert-buffer-by-hunks.

I'll wait for opinions about the data I= 9;ve collected.=C2=A0 At least it was
super fun writing these tests.
=
Best regards,
Mauro.

--00000000000073025d0587b45576-- --0000000000007302600587b45578 Content-Type: text/plain; charset="US-ASCII"; name="bug18-benchmark-report.txt" Content-Disposition: attachment; filename="bug18-benchmark-report.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jv31dsge1 RklMRSAJT0xELVNJWkUJTkVXLVNJWkUJSFVOS1MJUkVWRVJULUJVRkZFUglSRVZFUlQtQlVGRkVS LVdJVEgtRklORS1HUkFJTglSQkJILVJFVkVSVC1CVUZGRVItQlktSFVOS1MJRkFTVEVTVAphbGxv Yy5jCTIwNDUyMAkyMTA0OTYJMjgzCTAuMTYxODY3MTE2CTIuOTE3NTExODk2CTEuMDU1MjcyNzYy OTk5OTk4MwlSRVZFUlQtQlVGRkVSCmF0aW1lci5jCTE0MTIzCTE0MTM2CTQJMC4wNDYwMjA2MjUJ MC4wMDgyNDg5MTEJMC4wMzU2MDI0MDYJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KYXRp bWVyLmgJMjE3MQkyMTcyCTIJMC4wMzg5MDE0OTQJMC4wMDI0MTc1MjMJMC4wMzU4OTE4MjQJUkVW RVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KYmlkaS5jCTEyNDc4NgkxMjUxODUJMTMJMC4wOTA2 NTYyNDEJMC4wNjA0MTY1NjYJMC4wODI0MDE2OTcJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JB SU4KYmxvY2tpbnB1dC5oCTIzMjMJMjMyNAkyCTAuMDM5MzA3MjY3CTAuMDAyNDExMTY4CTAuMDY0 MzE3OTE5CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCmJ1ZmZlci5jCTIxMDY2NQkyMDkw NDQJNjEJMC4xNDMwNTUzMzcJMC45NjgwMDQ1NzgJMC4yMzA0NzUwMjkJUkVWRVJULUJVRkZFUgpi dWZmZXIuaAk0NjM1Ngk0NzI1MwkxNQkwLjA2NDk3MzE5NwkwLjA0MzE1OTAxOAkwLjA2OTkyNzM2 CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCmJ5dGVjb2RlLmMJNDQ1MDgJMzQ2MTgJMjM5 CTAuMDY2NjEzODkzCTMuNDg5MTQyMTc4CTAuNTgwMDExMTE2CVJFVkVSVC1CVUZGRVIKY2FsbGlu dC5jCTMwODQ1CTMxMjQzCTcJMC4wNTAyNTE0MjgJMC4wMjE3NzQ4MTcJMC4wNDc0MjYwMzcJUkVW RVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY2FsbHByb2MuYwk1MjQxNAk1MjMyNQk0MwkwLjA3 MTA2MzcxNwkwLjA3NTUzNDI2NwkwLjE1MTIzMzk1NQlSRVZFUlQtQlVGRkVSCmNhc2VmaWRkbGUu YwkxMzUzMAkyMTU2MQk1MgkwLjA0NDE3ODk5OAk2Ljg5MTA1MTAzOQkwLjM4NDE5ODg1NjAwMDAw MDcJUkVWRVJULUJVRkZFUgpjYXNldGFiLmMJODY0MQk4NjQyCTIJMC4wMzkwNDMyNjgJMC4wMDM5 MjkxNDYJMC4wMzAwMTQ5NjMJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY2F0ZWdvcnku YwkxNjQ5OAkxNjQ2MwkzCTAuMDQxOTM5NDE4CTAuMDA2MjI4MzYJMC4wODQ5ODEwMzgJUkVWRVJU LUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY2F0ZWdvcnkuaAk0NjA1CTQ2MDYJMQkwLjA0MDQ4MjU0 MwkwLjAwMzQ1NDkzCTAuMDQ0ODg5MjIzCVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCmNj bC5jCTY0ODkyCTY0OTA5CTkJMC4wNzA5MDA0MjcJMC4wMzA1MzM2MjgJMC4wNTUyNzg5NjEJUkVW RVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY2NsLmgJMzM3OAkzMzc5CTEJMC4wNDU4ODU2OQkw LjAwMjY5MTI5NwkwLjA3MzUzNjc3OQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpjaGFy YWN0ZXIuYwkzMDAxMQkzMTQ2MAkxMgkwLjA1MjQ4NjYwNQkwLjAyOTM4Mzc3NwkwLjA2NjEwMTM2 MQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpjaGFyYWN0ZXIuaAkyMjI2MAkyMjgwNwkx MAkwLjA1MzgzMDU0OAkwLjAyMDg3NjI0OQkwLjA2MjE5MjI1NAlSRVZFUlQtQlVGRkVSLVdJVEgt RklORS1HUkFJTgpjaGFyc2V0LmMJNzEwOTkJNzEzNTMJMjcJMC4wNzQ5NjIwNzYJMC4wNDk0ODk1 NDcJMC4xMDU2MTE0MDMJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY2hhcnNldC5oCTE5 NDk3CTE5NDk4CTIJMC4wNDcyMzU0OTkJMC4wMTAwMDgzOTcJMC4wMzM0MjI0NzUJUkVWRVJULUJV RkZFUi1XSVRILUZJTkUtR1JBSU4KY2hhcnRhYi5jCTQwNTAwCTQwNDc3CTMJMC4wNDk0MTA1NDUJ MC4wMTU0MTIwMTIJMC4wNzgzOTA4OTYJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY20u YwkxMjQ1MAkxMjQ5Nwk4CTAuMDQzNDI4MDY5CTAuMDA3MTEwMzAzCTAuMDcxNzA2NDAxCVJFVkVS VC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCmNtLmgJNjY2Mwk2NjY0CTIJMC4wNDE2MzI4ODcJMC4w MDUwNzQxMDkJMC4wMjc5OTE5NjQJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY21kcy5j CTE2NTI2CTE2NTk5CTcJMC4wNDM0NjQ3MzUJMC4wMDk0NDM3MzgJMC4wODY5MjIzOTEJUkVWRVJU LUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY29kaW5nLmMJMzM4OTczCTMzOTYxNAk1MAkwLjIxODkx ODQxMwkwLjIwMTU3ODg1CTAuMjk3MTQ5MzM4CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlO CmNvZGluZy5oCTI1MTM1CTI1MDg5CTkJMC4wNTU5MjA1MjUJMC4wNDA0OTIxNTgJMC4wNDkxMTYx MDIJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KY29tbWFuZHMuaAkxNzc3CTE3NzgJMgkw LjAzODMzMzQwNgkwLjAwMjI1NjE5MgkwLjA3MTIxNjA1MQlSRVZFUlQtQlVGRkVSLVdJVEgtRklO RS1HUkFJTgpjb21wb3NpdGUuYwk2MjIwNwk2MjY2MgkyMgkwLjA2NzI4MTcwMwkwLjAzOTQ3NDMw NQkwLjEwNjE1MjU5NQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpjb21wb3NpdGUuaAkx Mjg0MQkxMjg0MgkyCTAuMDQ0NDY1NDgJMC4wMDc2NTEwMDcJMC4wMjk4NTgwMjkJUkVWRVJULUJV RkZFUi1XSVRILUZJTkUtR1JBSU4KY29uZl9wb3N0LmgJMTIyMTkJMTM2MTkJMzIJMC4wNTYyNDI2 OTkJMC4zMjU2OTMzMjgJMC4xNDA0MjUyMzUJUkVWRVJULUJVRkZFUgpjeWd3MzIuYwk0MDk3CTQx MDMJNAkwLjAzODg0MjgyMwkwLjAwMjY1OTAzCTAuMDM0MTQ4OTU0CVJFVkVSVC1CVUZGRVItV0lU SC1GSU5FLUdSQUlOCmN5Z3czMi5oCTExMTQJMTExNQkyCTAuMDM5MjEwNDY0CTAuMDAyMjA0MzcJ MC4wMjk5NTUzMTcJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KZGF0YS5jCTEwNTk3MAkx MTE4NTkJMTczCTAuMDk0Njc2ODE0CTIuNzM0MjcyMTY2CTAuNTA3MzgxMTYyCVJFVkVSVC1CVUZG RVIKZGJ1c2JpbmQuYwk1NjcxNwk1NjExNAkzMwkwLjA3MDI0MzM2MgkwLjAzODM2MjA5NgkwLjE0 MDQ4NDM4NwlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpkZWNvbXByZXNzLmMJNTgxOAk1 ODE2CTYJMC4wNDE2NjIyMTgJMC4wMDQ1MzQzODMJMC4wNDE1Mzc0MzkJUkVWRVJULUJVRkZFUi1X SVRILUZJTkUtR1JBSU4KZGlyZWQuYwkzMzkzMwkzNTI2NAk0NgkwLjA1OTU1NzgyCTAuMTI3MzUy ODMJMC4xNzE2MDE3NzcJUkVWRVJULUJVRkZFUgpkaXNwZXh0ZXJuLmgJMTI1MDQ5CTEyNTU5OQky NwkwLjEwODY3MTEyCTAuMTMyOTI5NTA5CTAuMTAzNTQzOTExCVJCQkgtUkVWRVJULUJVRkZFUi1C WS1IVU5LUwpkaXNwbmV3LmMJMTkyODIwCTE5NTAwMgk0MAkwLjEzNTYxODkwMgkwLjEyNDQ2MzA0 NwkwLjE5NTIxNjI4MQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpkaXNwdGFiLmgJMzc5 MgkzNzkzCTIJMC4wNDE0MDc5OTcJMC4wMDQwNzIzODgJMC4wMzI2MjExOTQJUkVWRVJULUJVRkZF Ui1XSVRILUZJTkUtR1JBSU4KZG9jLmMJMzA3ODcJMzAzNjQJNjAJMC4wNTU0NTUxMDQJMTMwLjk4 MDEzMjgwOAkwLjIyODIwNzU1NQlSRVZFUlQtQlVGRkVSCmRvcHJudC5jCTE3NDQwCTE3MzQxCTEx CTAuMDQ5NDc5NDczCTEuNDEzNjI3Mjk2CTAuMDY4Nzc1NTQzCVJFVkVSVC1CVUZGRVIKZG9zZm5z LmMJMjQwMjMJMjQwMjQJMgkwLjA0NDE4Nzc5MQkwLjAxMDA4NjYJMC4wMzI5Mzk0NTYJUkVWRVJU LUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KZG9zZm5zLmgJMTM1NAkxMzU1CTIJMC4wMzYwNDczODEJ MC4wMDE5MTczOTMJMC4wNjE2MjMxODcJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KZHlu bGliLmMJODIwNAk4MTQ0CTEzCTAuMDQyOTIyNTYJMC4wMDg5OTc4NjEJMC4wOTI3MzA3OTkJUkVW RVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KZHlubGliLmgJMTIzNgkxNDcwCTQJMC4wMzcwMjcx MDYJMC4wMDQ0Nzk2MgkwLjA3ODE5OTI0NwlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpl ZGl0Zm5zLmMJMTYzNzM5CTE3NjY5NgkxNjgJMC4xMzM4OTI2NDcJMjQ5LjE0ODQ1NTc4CTAuNjM5 MzU3NDg1CVJFVkVSVC1CVUZGRVIKZW1hY3MtaWNvbi5oCTExMjI3CTk3NDEJNQkwLjA0MzM5NzI2 NQkwLjk0NzU5MzE1OAkwLjA0ODk4OTQ3NwlSRVZFUlQtQlVGRkVSCmVtYWNzLW1vZHVsZS5jCTM2 MTQxCTQxMDgzCTEyMwkwLjA1NzU3NTM5Mgk1LjQ0ODAwNzUxNgkwLjMyMzMwNzk1OQlSRVZFUlQt QlVGRkVSCmVtYWNzLW1vZHVsZS5oCTU5MjYJMTE0MDMJMzkJMC4wNDA4OTg1NzgJMC4zMzQyNjI1 NjUJMC4xNDIzNTA5MzIJUkVWRVJULUJVRkZFUgplbWFjcy5jCTc2NjA5CTgyMjU5CTEwNAkwLjA5 NzYzMjExMwkwLjgxMTk2MTExNwkwLjM0MDM2MzYwOAlSRVZFUlQtQlVGRkVSCmVtYWNzZ3RrZml4 ZWQuYwk3NjEwCTc1OTMJNwkwLjA0MTg3NDg3OQkwLjAwNTEwMzQyMQkwLjA1MzY2OTA2MQlSRVZF UlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgplbWFjc2d0a2ZpeGVkLmgJMTIzMgkxMjMzCTIJMC4w MzcwNjgxNwkwLjAwMjA3NTI5NgkwLjAzMjA4MzkwOQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1H UkFJTgpldmFsLmMJMTE0MTIwCTEyNDcxMAkxODgJMC4wODk1NjY5ODkJNC4xNjM4MDQ5OTUJMC41 NDM4MjQzODgJUkVWRVJULUJVRkZFUgpmaWxlaW8uYwkxOTM4OTUJMTk4NTM0CTE3OAkwLjE1MTM5 MzcxNwkzLjI3MDg2OTEwOQkwLjU3MTQxNTQ1OQlSRVZFUlQtQlVGRkVSCmZpbGVsb2NrLmMJMjUx MjMJMjQ5MTYJMTgJMC4wNTQ2MzIzMDkJMC4wMjYzOTAyNDIJMC4wNzExNTM0NjIJUkVWRVJULUJV RkZFUi1XSVRILUZJTkUtR1JBSU4KZmlyc3RmaWxlLmMJMTE3NAkxMTgxCTQJMC4wMzg4ODQ4NjQJ MC4wMDIwMzAzMTkJMC4wNTQ5MDQ5NTUJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KZmxv YXRmbnMuYwkxNDMwMQkxNDk0Mgk0MgkwLjA0NjUyODU2NQkwLjA2ODUxNjU1OQkwLjEzNDA4NTM4 NAlSRVZFUlQtQlVGRkVSCmZucy5jCTE0NDI5NwkxNTIzOTAJMjYxCTAuMTEyOTAyNDAyCTQuNzYz NDgwODMzCTAuODA4NTI0NTUxOTk5OTk4NQlSRVZFUlQtQlVGRkVSCmZvbnQuYwkxNTY3NTkJMTU4 MDkwCTQ2CTAuMTIwMTI5NTc2CTAuMTAyOTAwOTY2CTAuMjAyMzg0NzQ0CVJFVkVSVC1CVUZGRVIt V0lUSC1GSU5FLUdSQUlOCmZvbnQuaAkzMjc2NwkzNTExMQk0MQkwLjA1NTg3MDE2MgkwLjA3OTAw ODkwMwkwLjEyMjU4MDk5CVJFVkVSVC1CVUZGRVIKZm9udHNldC5jCTYzODA2CTY2MDE1CTQzCTAu MDY3NDA4ODAzCTAuMDY1MjkwNDM2CTAuMTQ0OTE3NTUzCVJFVkVSVC1CVUZGRVItV0lUSC1GSU5F LUdSQUlOCmZvbnRzZXQuaAkxODcwCTE4NzEJMgkwLjAzNjkzOTEwMwkwLjAwMjI1OTYwNAkwLjAy ODkxMDU2OQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpmcmFtZS5jCTE2OTQ1OQkxOTcw MzUJMTk3CTAuMTM2ODgwNjk3CTE3LjY5NjM4ODY1NwkwLjYyNzg1MjUzMglSRVZFUlQtQlVGRkVS CmZyYW1lLmgJNTE3MjQJNTU4MjkJMzUJMC4wODAyNjMwMzMJMC4xOTk5Nzc4NzkJMC4xMjY1MTUw MjcJUkVWRVJULUJVRkZFUgpmcmluZ2UuYwk0NzEwNwk0NzQxMAk2CTAuMDYyMDc2MDU2CTAuMDI0 NTc5OTE1CTAuMDUxNTAwODYxCVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCmZ0Y3Jmb250 LmMJODUyMgk4OTk5CTEzCTAuMDM5NzAxMjk3CTAuMDE1MjcwNjYJMC4wODMzMjI3MjYJUkVWRVJU LUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KZnRmb250LmMJNzY1MzEJNzQ3MzYJMjkJMC4wODIyNDU0 NTUJMC4wOTAzNTA5MTEJMC4xMjY1NDI0MDMJUkVWRVJULUJVRkZFUgpmdGZvbnQuaAkxNDc3CTE0 NzgJMQkwLjAzODM2MTI2NgkwLjAwMjI1NDcxNQkwLjAyOTc4OTU4CVJFVkVSVC1CVUZGRVItV0lU SC1GSU5FLUdSQUlOCmZ0eGZvbnQuYwk5MjUyCTk4MTcJMTkJMC4wNDE0OTIwOAkwLjAyMDY2NjQy OQkwLjA3NTkwNjg2NAlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpnZXRwYWdlc2l6ZS5o CTE1NDIJMTU0MwkyCTAuMDM3MjY5MDk5CTAuMDAzODI2NDY1CTAuMDMzODU5MDQJUkVWRVJULUJV RkZFUi1XSVRILUZJTkUtR1JBSU4KZ2ZpbGVub3RpZnkuYwkxMDM1NgkxMTAwNQkxMAkwLjA0MzEy MDA2MwkwLjAxMjI5Nzc3OQkwLjA0ODQwOTE2NwlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJ TgpnbWFsbG9jLmMJNTk1MzUJNTg3MzYJODYJMC4wNzA4MDUwNzkJMC4yOTgxOTA5NTkJMC4yNjAz NDI3NTQJUkVWRVJULUJVRkZFUgpnbnV0bHMuYwk1NzM1MAk4ODM4MQkxMzMJMC4wNzM0NDcwMDcJ MTkuMjU0MDU5MDEzCTAuNDAwNDAxMjk1CVJFVkVSVC1CVUZGRVIKZ251dGxzLmgJMjc4MgkzMTQ2 CTcJMC4wNDAyNjkzNzkJMC4wMDUzNDg4MzcJMC4wNDI5NDgzNDUJUkVWRVJULUJVRkZFUi1XSVRI LUZJTkUtR1JBSU4KZ3RrdXRpbC5jCTE2MjI0MAkxNjcwMjEJNjUJMC4xMzI3ODQ4MjEJMS4xMzkx OTY2MDQJMC4yMTk1MjA1NTUJUkVWRVJULUJVRkZFUgpndGt1dGlsLmgJNzE0OAk3NjY5CTcJMC4w NDMzMzQ2ODIJMC4wMTIwMDM0NzIJMC4wNDEyODcxMjIJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUt R1JBSU4KaW1hZ2UuYwkyNzAyNTMJMjcyMTM2CTE5NwkwLjIyMjAzMjU1NQkwLjM3MDQyMjk0NAkw LjgwODUwODgyMTk5OTk5ODMJUkVWRVJULUJVRkZFUgppbmRlbnQuYwk2ODcyNQk3MjQzOQkzOQkw LjA2ODk4Nzg5NQkwLjE4OTg0NDgzMwkwLjE0MTY2NjQ3CVJFVkVSVC1CVUZGRVIKaW5kZW50LmgJ MjE3MQkyMTcyCTIJMC4wMzY4ODI4NzkJMC4wMDI0MDU3NzkJMC4wMzQ0ODYyNzQJUkVWRVJULUJV RkZFUi1XSVRILUZJTkUtR1JBSU4KaW5vdGlmeS5jCTExNzQ0CTE2NDIzCTI5CTAuMDQxMTE3MTA0 CTEuMjM2NzQ0Nzc2CTAuMDk3NTE0NDk2CVJFVkVSVC1CVUZGRVIKaW5zZGVsLmMJNjUzMjkJNjkz MTQJMjEJMC4wNjgxNDIxMjQJMC4zMjA3NjU5MjcJMC4xNzEwOTEzNDEJUkVWRVJULUJVRkZFUgpp bnRlcnZhbHMuYwk2OTkwNgk2OTE3Ngk5CTAuMDY3Nzg4MTcxCTAuMDQ1NTk2ODYzCTAuMDUyOTEy NzUxCVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCmludGVydmFscy5oCTExNzAyCTExNjA0 CTExCTAuMDQzNzU5MDMyCTAuMDA5NzM2NTM0CTAuMDc4MTgxMTQJUkVWRVJULUJVRkZFUi1XSVRI LUZJTkUtR1JBSU4Ka2V5Ym9hcmQuYwkzNjg2OTgJMzc1Mjk3CTk5CTAuMjUyMzMxMTM4CTAuNDcz MzE5OTYzCTAuNDY3NTQwMDE1CVJFVkVSVC1CVUZGRVIKa2V5Ym9hcmQuaAkxODQyNAkxODQ2OQk2 CTAuMDQ2OTY1NjIyCTAuMDEwOTIxMDkxCTAuMDM4NjE3ODE5CVJFVkVSVC1CVUZGRVItV0lUSC1G SU5FLUdSQUlOCmtleW1hcC5jCTExMjY2MgkxMTMzMzUJMTcJMC4wODQyMTY2MjgJMC4wNTY0Njc2 CTAuMDk2NzE0MTkyCVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCmtleW1hcC5oCTIzMDEJ MjMwMgkyCTAuMDM1NTgwMDAxCTAuMDAyNDAzMzM0CTAuMDM4NTc5Njg3CVJFVkVSVC1CVUZGRVIt V0lUSC1GSU5FLUdSQUlOCmtxdWV1ZS5jCTE1ODk5CTE2NTQzCTEwCTAuMDQ0MTMyMDQ5CTAuMDEz MDM4NDMxCTAuMDU5OTExMTA1CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCmxhc3RmaWxl LmMJMTg5MgkyMDUzCTUJMC4wMzYyMjcyODQJMC4wMDI1NjgwODcJMC4wNjU2ODgyMzEJUkVWRVJU LUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KbGlzcC5oCTE1MTUzMgkxNTQ3NDMJMjY1CTAuMTQzODgz OTQ0CTUzOS44NzkwOTgxMTYJMC44NjM0NTMzMTI5OTk5OTkyCVJFVkVSVC1CVUZGRVIKbHJlYWQu YwkxNDE0MzQJMTUzOTYyCTE4NAkwLjExODExNjgyMgk0LjI3NDQ4MzU2OAkwLjU5MzQyNDM0MwlS RVZFUlQtQlVGRkVSCm1hY2ZvbnQuaAkyNzEyCTI4NDgJMwkwLjAzOTcwNjE4MQkwLjAwMzIxMDQ2 OQkwLjAzMjE4OTk5CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCm1hY3Jvcy5jCTEyMjk3 CTEyMzA3CTMJMC4wNDI0MzM2NjYJMC4wMDUwNzAxNjUJMC4wMzI5MjI4MjQJUkVWRVJULUJVRkZF Ui1XSVRILUZJTkUtR1JBSU4KbWFjcm9zLmgJMTY2NAkxNjY1CTIJMC4wMzU4MzQ3MDkJMC4wMDIx MDM2NDcJMC4wMzQxNzE0MwlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgptYWN1dnMuaAk0 Nzg3MTAJNDc4ODQyCTkJMC4xODgxMDIwMwkwLjI2Mjc5OTg1OQkwLjE0ODg0NzE2NglSQkJILVJF VkVSVC1CVUZGRVItQlktSFVOS1MKbWFya2VyLmMJMjE2NTUJMjIxOTAJNgkwLjA0NzUxMzY1OAkw LjAxMzU2ODM0OQkwLjA0MTcxMjQ0NQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgptZW51 LmMJNDU0NDIJNDUzMTAJOAkwLjA2MDY1MjQxNQkwLjAyMjgwODY1MQkwLjA4OTEwNTcwNglSRVZF UlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgptZW51LmgJMjI5MQkyMjc2CTMJMC4wMzkyMjA3MTkJ MC4wMDI3Mjc5NDUJMC4wMzg1MjYzOTYJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KbWlu aWJ1Zi5jCTcxMzQ4CTczNzU0CTQxCTAuMDY4ODUzOTM0CTAuMDkyMjA2MDA4CTAuMTQ0MzA4ODY2 CVJFVkVSVC1CVUZGRVIKbXNkb3MuYwkxMTcwMzIJMTE3NTcwCTkJMC4xMTI0MTI1MTgJMS44NTE1 Njk2OTkJMC4yMzE0Mjc3NTIJUkVWRVJULUJVRkZFUgptc2Rvcy5oCTQyMjcJNDM0OAk1CTAuMDQw NDYzNDYxCTAuMDA0MjA0ODQ4CTAuMDM4MDQ4NzU4CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdS QUlOCm5zZ3VpLmgJNDkzOAk0OTM5CTIJMC4wNDIwMjI1MTIJMC4wMDcwMDEyMzYJMC4wNTg5NDQ1 NzkJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KbnN0ZXJtLmgJMzg2MjYJNDQwODMJNDQJ MC4wNzA5ODc5MTEJMC41MDYyMDA5OTUJMC4xNDQ2NTU0ODIJUkVWRVJULUJVRkZFUgpwcmludC5j CTcwMDM4CTczODQxCTQ1CTAuMDc1Njc3Nzc1CTQuMDI2MzQxMjA2CTAuMTU2ODQ4NzAzCVJFVkVS VC1CVUZGRVIKcHJvY2Vzcy5jCTIyNzU4MgkyNDcyOTAJMjk1CTAuMTgyNTIwNDMzCTMzLjMzNzM1 MTU2MgkwLjk3NzgwMjg4NTk5OTk5ODMJUkVWRVJULUJVRkZFUgpwcm9jZXNzLmgJODIzNAk5ODM2 CTE2CTAuMDQyNDgzMDQJMC4wMzY0NzEzNTEJMC4wNjQxOTUxNzYJUkVWRVJULUJVRkZFUi1XSVRI LUZJTkUtR1JBSU4KcHJvZmlsZXIuYwkxODQ4MgkxODQ1NwkxMQkwLjA0MzgxMzc4MgkwLjAxMDM1 MDU0NgkwLjA1NTc4MDUyOAlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpwdXJlc2l6ZS5o CTM0NDIJMzQ0MwkzCTAuMDQxMjA5NDk4CTAuMDAzODk1Mzg4CTAuMDUxNTIzODI3CVJFVkVSVC1C VUZGRVItV0lUSC1GSU5FLUdSQUlOCnJhbGxvYy5jCTMzNDQ0CTMzMDgzCTcJMC4wNDczMDA5OTIJ MC4wMTY1NDU2MjEJMC4wNzMyMzYwODIJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KcmVn ZXguYwkxOTQzMDUJMTkzMzI2CTk3CTAuMTgwOTU2MDAxCTIuMjY0MDUwNDQxCTAuNDAwODUzNDI3 CVJFVkVSVC1CVUZGRVIKcmVnZXguaAkyMzc2MgkyMzc4NAkxOAkwLjA1ODAxMDQ4MwkwLjAzNDM0 OTEyNwkwLjA3Njc5MjIxMwlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpyZWdpb24tY2Fj aGUuYwkyNjYyMQkyNjYyMgkyCTAuMDQ0NjU3NTk1CTAuMDA5ODkzNDQ0CTAuMDMzMTI1MjE5CVJF VkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnJlZ2lvbi1jYWNoZS5oCTUyNzgJNTI3OQkyCTAu MDM2NTgzNjc2CTAuMDAzMDg1ODA0CTAuMDM3Mjk4MzIJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUt R1JBSU4Kc2Nyb2xsLmMJMzI1MTMJMzI0NzkJNgkwLjA0ODQ4MjEzNQkwLjAxMTUxOTQ1NgkwLjA4 NTI4NjA1OQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgpzZWFyY2guYwkxMDM1MTMJMTAz MzIxCTYxCTAuMDg1MjQ3Njc0CTAuMDc3NzQzNDkzCTAuMTgyODQwNjI1CVJFVkVSVC1CVUZGRVIt V0lUSC1GSU5FLUdSQUlOCnNoZWFwLmMJMjk0MgkyMTQwCTE0CTAuMDM5NzY2MzEJMC4wMjYzMDQ2 MjMJMC4wNjM2NDM3MTQJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4Kc291bmQuYwk0MDM1 Nwk0MDQxMwk4CTAuMDUyNTY4NzE0CTAuMDE4ODUyNjQxCTAuMDQ3MDU4MzczCVJFVkVSVC1CVUZG RVItV0lUSC1GSU5FLUdSQUlOCnN5bnRheC5jCTEwOTczOAkxMTMxNjEJMTU4CTAuMDg5ODExODk0 CTEuNDg5NzE4OTA1CTAuNDI2NTcxMDg0CVJFVkVSVC1CVUZGRVIKc3ludGF4LmgJNzc2MQk3NzYy CTIJMC4wMzg5Mjg4NTEJMC4wMDQxMTY4NQkwLjAzMDM4NjAwOQlSRVZFUlQtQlVGRkVSLVdJVEgt RklORS1HUkFJTgpzeXNkZXAuYwkxMDIwMDcJMTExNTgyCTk5CTAuMTI1MjQ5MTM0CTIuMDYzNDIz MjgyCTAuMzI3OTIzODYzCVJFVkVSVC1CVUZGRVIKc3lzc2VsZWN0LmgJMjI4MwkyNTU2CTMJMC4w NDEzMzEyMjcJMC4wMDQyMjE5NTkJMC4wMzI5NjI5MDgJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUt R1JBSU4Kc3lzc2lnbmFsLmgJMjIzMgkyMzY3CTQJMC4wNDAwMDE5NTEJMC4wMDM0OTA1OTYJMC4w NzU1OTY4OTEJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4Kc3lzc3RkaW8uaAkxMDIyCTIx MjUJMwkwLjAzODkxNTE2MgkwLjAwOTMzNjEyMgkwLjAzOTI3ODc4MwlSRVZFUlQtQlVGRkVSLVdJ VEgtRklORS1HUkFJTgpzeXN0aW1lLmgJMzE4NgkzMTg3CTIJMC4wMzg5NzM4MjgJMC4wMDMxMDUz NTkJMC4wNjYxMzYwMzYJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4Kc3lzdHR5LmgJMjc3 NAkyNzU0CTMJMC4wNDA5MzIyOTgJMC4wMDMzNDAwMjEJMC4wMzQwNTExNjEJUkVWRVJULUJVRkZF Ui1XSVRILUZJTkUtR1JBSU4Kc3lzd2FpdC5oCTE5MDkJMTkxMAkzCTAuMDM5ODU5MTk3CTAuMDAz MTMzMjI1CTAuMDczMzkzNDk4CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnRlcm0uYwkx MzAwODIJMTMxMDk3CTU3CTAuMTA2MTIwNTcJMC4wODMzODA3NTUJMC4xODQzMTQxMDgJUkVWRVJU LUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KdGVybWNhcC5jCTE1ODQ5CTE1OTUwCTIJMC4wNDIyMjcz NQkwLjAwNzMxOTQ5NgkwLjAyOTY4MTAzOQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgp0 ZXJtY2hhci5oCTkzMDYJOTE0MgkzCTAuMDQxNDU0NDI0CTAuMDA1NTAyMzMzCTAuMDI2NjAyNTQ1 CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnRlcm1ob29rcy5oCTI4MDQ3CTI4Nzk5CTEw CTAuMDU1Mzk4MzcyCTAuMDIyMTgwNDM5CTAuMDUwNzE4NjM0CVJFVkVSVC1CVUZGRVItV0lUSC1G SU5FLUdSQUlOCnRlcm1pbmFsLmMJMTg1MzIJMTg4NDIJNQkwLjA0NDk1OTIzMwkwLjAxMTA5NTU5 NwkwLjEyMjUyNDcyOAlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgp0ZXJtaW5mby5jCTE2 MDQJMTYwNQkyCTAuMDM4MzkyMDU1CTAuMDAxOTM5MzgzCTAuMDY3NzQ3ODgxCVJFVkVSVC1CVUZG RVItV0lUSC1GSU5FLUdSQUlOCnRlcm1vcHRzLmgJMTA2NAkxMDY1CTIJMC4wMzc3MDMyMTgJMC4w MDE4MTc2NTIJMC4wNTM0ODgxNTMJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KdGV4dHBy b3AuYwk3MjA2OAk3Mjg4NQkxMAkwLjA2NDM0NDQ1OAkwLjAzODgwNjIzNgkwLjA2NjYwNDg3MglS RVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgp0cGFyYW0uYwk3Mjk2CTczOTkJOQkwLjA0MjAw NzM1MgkwLjAwNDg1NDA4CTAuMDY5MDczNzI5CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlO CnRwYXJhbS5oCTEyODUJMTM0MAkzCTAuMDM5MzUwNzU2CTAuMDAyMTU4NDAxCTAuMDU1NjYyMjE0 CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnVuZG8uYwkxNTY4MgkxNTY4MwkyCTAuMDQx NzQ2Mjg3CTAuMDA1NDgxOAkwLjA1NTgyMzA1NglSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJ Tgp1bmV4YWl4LmMJMTU1MTQJMTU1MTUJMgkwLjA0MzA2ODcxOAkwLjAwNzE0OTM2NgkwLjA1MjM4 NDI1NglSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgp1bmV4Y29mZi5jCTE1MTU2CTE1MTU3 CTIJMC4wNDMxMjY4OTYJMC4wMDczNTYxNjIJMC4wNzE2NDAzNjIJUkVWRVJULUJVRkZFUi1XSVRI LUZJTkUtR1JBSU4KdW5leGN3LmMJOTEwNwk4OTE2CTEyCTAuMDQwODkzNjc0CTAuMDA2MTQ4MTQz CTAuMDc1OTIxOTk1CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnVuZXhlYy5oCTExNgkx MTYJMAkwLjAzNzM1MTIyMQkwLjAwMTQ4MTc5MgkwLjAzMDk1ODk3NwlSRVZFUlQtQlVGRkVSLVdJ VEgtRklORS1HUkFJTgp1bmV4ZWxmLmMJMjM3NjUJMjEyOTkJMTEJMC4wNTUwODU5NzMJMC4xNDg1 NjI1MDIJMC4wNjI4MDg2OTgJUkVWRVJULUJVRkZFUgp1bmV4aHA5azgwMC5jCTk4MTcJOTgxNwkw CTAuMDQwOTAzOTQJMC4wMDQ3ODA3NDgJMC4wNTU0MTIzOTMJUkVWRVJULUJVRkZFUi1XSVRILUZJ TkUtR1JBSU4KdW5leG1hY29zeC5jCTQzMjIwCTQyMzUwCTYJMC4wNTI3OTg0ODUJMC4wMjY2NTgw ODMJMC4wNzE1NzE0MjkJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KdW5leHNvbC5jCTYw NAk2MDQJMAkwLjAzNTIwODQ0MgkwLjAwMTY2MjY3OAkwLjA2NjIzODY5OAlSRVZFUlQtQlVGRkVS LVdJVEgtRklORS1HUkFJTgp1bmV4dzMyLmMJMjY5OTgJMjcxODkJMjUJMC4wNTMzMDU0NTcJMC4w Mjc2MzMzOTYJMC4xMDc1Nzc2MjkJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4Kdm0tbGlt aXQuYwk1NzQ1CTU5MDcJNAkwLjA0MTk2Mzg0CTAuMDA1NDIxNjY4CTAuMDM1MjI3NDEJUkVWRVJU LUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KdzE2c2VsZWN0LmMJMjIyNzkJMjIyODAJMgkwLjA0NTA4 NTg1MgkwLjAwODkzNTI0MQkwLjA2NDk4MTc4CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlO CnczMi5jCTI2NjAwNQkyNzM3NDgJNjYJMC4xODEwNzg2ODgJMC42MzE5MjE1NTQJMC4yNjMxMjUz ODkJUkVWRVJULUJVRkZFUgp3MzIuaAk4OTQ5CTg5NTMJNAkwLjA0MzM0ODg0NwkwLjAwNTg3NDM3 CTAuMDM0OTU1MTAyCVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnczMmNvbW1vbi5oCTE2 NjUJMTY2NgkyCTAuMDM5MDYwMzU3CTAuMDAyMjY2NDQzCTAuMDM0NjA2MDQJUkVWRVJULUJVRkZF Ui1XSVRILUZJTkUtR1JBSU4KdzMyY29uc29sZS5jCTIzNTM4CTI0Njk2CTIyCTAuMDQ3NDQ3MTYx CTAuMDIwNjc2NjQ4CTAuMDc2NTQ1ODA3CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCncz MmZucy5jCTMyNDQ5OQkzNjI1NTIJMjEyCTAuMjEyNzk4NDQ4CTI3LjU5NTQ1NzQ4OQkwLjc3MDU0 MTQ1OQlSRVZFUlQtQlVGRkVSCnczMmZvbnQuYwk4ODY0Mwk5MDg0MgkyOQkwLjA4NDk0MTYyMQkw LjA2ODU5NzU0CTAuMDk4NzYzNTYxCVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnczMmZv bnQuaAkyOTc3CTI5NDIJMwkwLjAzNzM0MDk1MgkwLjAwMzMyMDQ2NgkwLjAzMzg5OTYwNAlSRVZF UlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgp3MzJndWkuaAk0MDIwCTQwMjEJMgkwLjA0MTIyOTUz NAkwLjAwNDYzMTYzOQkwLjA0NjgwMTIxNAlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgp3 MzJoZWFwLmMJMjM5MDUJMjYyMzMJMTYJMC4wNDc5Mzc1MTEJMC4wNDMxMjQwMTMJMC4wOTM4NTU2 NjkJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KdzMyaGVhcC5oCTIyNjcJMjI0NQk0CTAu MDM1ODE3NTg5CTAuMDAyNTgxMjgxCTAuMDc2MTA2Mjk5CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5F LUdSQUlOCnczMmluZXZ0LmMJMjMzNzUJMjQxOTMJMjEJMC4wNDY5NDA2NzUJMC4wMzEyNTg5MjEJ MC4wOTIzMzMyODcJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KdzMyaW5ldnQuaAkxMTc2 CTExNzcJMgkwLjAzODY0NzI0OAkwLjAwMTg1Njc2MgkwLjA3MDI4NjE1MglSRVZFUlQtQlVGRkVS LVdJVEgtRklORS1HUkFJTgp3MzJtZW51LmMJNDU1OTUJNDU2MDAJMTMJMC4wNTg4NzMzNTMJMC4w MjQ0NjE1NDgJMC4xMDc1OTEzMTEJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KdzMybm90 aWZ5LmMJMjQwMDMJMjUxMjIJNDMJMC4wNDgwNTE0MTkJMC4zMDA3NTgzMzUJMC4xNDQwNzE3MjUJ UkVWRVJULUJVRkZFUgp3MzJwcm9jLmMJMTE0MTQwCTExNTg0MQkzMAkwLjA5Njc1NTQ5OQkwLjA4 NzA5ODE4NgkwLjEzMTgwNTE3MQlSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgp3MzJyZWcu Ywk0NDU4CTQ0NzMJNAkwLjA0MDM0NTYzMQkwLjAwMzE1NzE4MQkwLjAzODY4NzIzCVJFVkVSVC1C VUZGRVItV0lUSC1GSU5FLUdSQUlOCnczMnNlbGVjdC5jCTMyNDk4CTM1NjgzCTgJMC4wNTA4MzA3 MjMJMC4xMTU0NjE5NjYJMC4wODEzODU3NAlSRVZFUlQtQlVGRkVSCnczMnNlbGVjdC5oCTk1Mwk5 NTQJMgkwLjAzNzYwNjkwMwkwLjAwMTgwMjQ5NwkwLjA3MzQzMzA4OAlSRVZFUlQtQlVGRkVSLVdJ VEgtRklORS1HUkFJTgp3MzJ0ZXJtLmMJMjA4MjE0CTIxNjgwNAkxMjgJMC4xNDU4NDYyODEJMC40 MTU5OTU5MDQJMC40NTIwMTc4MzgJUkVWRVJULUJVRkZFUgp3MzJ0ZXJtLmgJMzAxMTMJMzAxNjkJ MTYJMC4wNjE2MjEzNjgJMC4wNDM3MjI0MDEJMC4wNjg1NDUyMzkJUkVWRVJULUJVRkZFUi1XSVRI LUZJTkUtR1JBSU4KdzMydW5pc2NyaWJlLmMJMzcyNTIJMzc4NTgJMTEJMC4wNTc5Njk0MDUJMC4w Mjc4Mjg0NTcJMC4wNjU3ODk0MDkJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KdzMyeGZu cy5jCTc0MjkJODQ0OQk0CTAuMDQxMDk4MDIyCTAuMDE0MTY3MjI0CTAuMDYyNzU1NDA0CVJFVkVS VC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCndpZGdldC5jCTE1MjM1CTE1NDA4CTIwCTAuMDQ1MDk1 NjI1CTAuMDE1MzAzMzc4CTAuMDkxOTk4ODg4CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlO CndpZGdldC5oCTI4MzkJMjg0Nwk0CTAuMDQzNDU3Mzc2CTAuMDA0NTY2MTMJMC4wMzM2NTY2MjcJ UkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4Kd2lkZ2V0cHJ2LmgJMjE5MgkyMTkzCTQJMC4w Mzc4NDY5NDQJMC4wMDI0MTAxNzMJMC4wMzkxOTI3MzIJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUt R1JBSU4Kd2luZG93LmMJMjQ3MDI5CTI2MzE5NgkxMTMJMC4xNjI5MzkxMjUJMS44MjM3NDE0MzMJ MC40MzMwNjUzMglSRVZFUlQtQlVGRkVSCndpbmRvdy5oCTQwNjc2CTQyNTMxCTU3CTAuMDY2NDc3 NDQ5CTAuNjg5MDA3OTA5CTAuMjIyNDM1NjY4CVJFVkVSVC1CVUZGRVIKeGRpc3AuYwkxMDE0MjYx CTEwNjM3NjAJNDEzCTAuNTY1ODUxMjY5OTk5OTk5MgkxMi4xNjI5MzcxNjkJMi42MjU2Mjg0MjE5 OTk5OTkJUkVWRVJULUJVRkZFUgp4ZmFjZXMuYwkxOTg4NDAJMjAwNjg5CTQ0CTAuMTQ3NzYzNjc0 CTAuMTI4NjM0ODA1CTAuMTk5NTY5NjQ0CVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnhm bnMuYwkyMTk5OTIJMjQ5MDY4CTE0MgkwLjE3MTExMjI3NAkxOC40MDcyNDI3NjEJMC40ODU1ODkz NTEJUkVWRVJULUJVRkZFUgp4Zm9udC5jCTMxOTg0CTMxMjY2CTE3CTAuMDUyODE1NTg3CTAuMDQ0 MzIzNzE5CTAuMDc1Mzc4MzQxCVJFVkVSVC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnhmdGZvbnQu YwkyMzg1OAkyNDY1OAkyMwkwLjA1MjA3ODM1CTAuMDkzMDgwNTkyCTAuMDc5ODM5ODgzCVJFVkVS VC1CVUZGRVIKeGdzZWxlY3QuYwk1MjQ0CTU0NDAJMTEJMC4wMzk3NTA2NTUJMC4wMDU3NDEzOTQJ MC4wODUxNjMzMjQJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KeGdzZWxlY3QuaAkxMDA2 CTk4NwkzCTAuMDM2MTQ5NTM4CTAuMDAyMDQ5MzgxCTAuMDM0NDkzNTkxCVJFVkVSVC1CVUZGRVIt V0lUSC1GSU5FLUdSQUlOCnhtZW51LmMJNjcwNzQJNjg4MDEJMTUJMC4wODIxNTk4NTkJMC4wNDgw NDExNTQJMC4wNzY0MDk4ODMJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KeG1sLmMJODA1 NAk4MDM5CTYJMC4wNDE5MzEwNzcJMC4wMDUwMDEyMzEJMC4wNjExODI2NjEJUkVWRVJULUJVRkZF Ui1XSVRILUZJTkUtR1JBSU4KeHJkYi5jCTE3Mzc1CTE3NDk4CTUJMC4wNDQzNzIwNzQJMC4wMTA5 MTEyODkJMC4wNjM3MDE4NzIJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4KeHNlbGVjdC5j CTg2ODE0CTg3Nzc2CTE2CTAuMDc1ODM0MTkxCTAuMDQ5MjE4ODY0CTAuMTI2MzA3MTgxCVJFVkVS VC1CVUZGRVItV0lUSC1GSU5FLUdSQUlOCnhzZXR0aW5ncy5jCTMwNjU5CTMwNjM5CTQJMC4wNTYy ODU2ODMJMC4wMTU0NzU0NjIJMC4wNDM2Njg5MzYJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JB SU4KeHNldHRpbmdzLmgJMTEzNAkxMTM1CTIJMC4wMzc5OTg0OTUJMC4wMDE5ODY4MDQJMC4wODIy ODEzNglSRVZFUlQtQlVGRkVSLVdJVEgtRklORS1HUkFJTgp4c21mbnMuYwkxNzU1OQkxNzYwNQk1 CTAuMDQ0MTIwMjk4CTAuMDA5MDc0NTcJMC4wODYyNTEwODYJUkVWRVJULUJVRkZFUi1XSVRILUZJ TkUtR1JBSU4KeHRlcm0uYwkzODMwMTUJNDAyNTIxCTIwOAkwLjI3Nzc5MDYyNgkyLjcxNDQ4NzAz CTAuODgxOTEzNjA5MDAwMDAxNAlSRVZFUlQtQlVGRkVSCnh0ZXJtLmgJNDEzNzMJNDM0MjcJMTMJ MC4wNjcwMjY0NgkwLjA2NTQ4NDg0MwkwLjA1NTI5NjUxNAlSQkJILVJFVkVSVC1CVUZGRVItQlkt SFVOS1MKeHdpZGdldC5jCTM3MTkzCTM4NDU2CTUyCTAuMDU4NzAyMjMzCTIuNDQwMDk3ODU0CTAu MTg0MzYyNDU1CVJFVkVSVC1CVUZGRVIKeHdpZGdldC5oCTM3MzkJMzYyMgk1CTAuMDM2NjMzNTMJ MC4wMDQwNTA4NTEJMC4wMzc3MjExOTEJUkVWRVJULUJVRkZFUi1XSVRILUZJTkUtR1JBSU4K --0000000000007302600587b45578 Content-Type: text/x-emacs-lisp; charset="US-ASCII"; name="rbbh-bug18.el" Content-Disposition: attachment; filename="rbbh-bug18.el" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jv31d7oo0 Ozs7IHJiYmguZWwgLS0tIFJldmVydCBCdWZmZXIgQnkgSHVua3MgLSotIGxleGljYWwtYmluZGlu ZzogdCAtKi0KCihyZXF1aXJlICdkaWZmKQoKOzsgQXQgbGVhc3QgZm9yIG5vdywgdGhpcyBhcmUg ZGVmY29uc3QuCgooZGVmY29uc3QgcmJiaC1kaWZmLWNvbW1hbmQgImRpZmYiCiAgIk5hbWUgb2Yg dGhlIGNvbW1hbmQgdG8gcnVuIGRpZmYiKQoKKGRlZmNvbnN0IHJiYmgtZGlmZi1zd2l0Y2hlcyAi LS1ub3JtYWwiCiAgIlN3aXRjaGVzIHRvIHBhc3MgdG8gZGlmZi4iKQoKKGRlZmNvbnN0IHJiYmgt ZGlmZi1jaGFuZ2UtY29tbWFuZC1yZWdleHAKICAobGV0ICgocm5nICJcXChbMC05XStcXClcXChc XHwsXFwoWzAtOV0rXFwpXFwpIikpCiAgICAoY29uY2F0ICJeIiBybmcgIlxcKFthY2RdXFwpIiBy bmcgIiQiKSkKICAiUmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyB0aGUgY2hhbmdlIGNv bW1hbmRzIGZvciBlYWNoIGh1bmsKU2hvdWxkIGJlIGluIHN5bmNoIHdpdGggdGhlIHN3aXRjaCB1 c2VkIHRvIGNhbGwgZGlmZi4iKQoKKGRlZmNvbnN0IHJiYmgtZGlmZi1idWZmZXItbmFtZSAiKlJC QkgtRGlmZioiCiAgIlRoZSBuYW1lIG9mIHRoZSBkaWZmIGJ1ZmZlciBpbnRlcm5hbGx5IGNyZWF0 ZWQgYnkgYHJiYmgtLXJ1bi1kaWZmJy4iKQoKKGRlZnZhciByYmJoLWN1cnJlbnQtZGlmZi1idWZm ZXItbmFtZSBuaWwKICAiTmFtZSBvZiB0aGUgY3VycmVudCBkaWZmIGJ1ZmZlci4iKQoKKGRlZnZh ciByYmJoLXRvdGFsLWh1bmtzIDAKICAiVG90YWwgaHVua3MgaW4gdGhlIGRpZmYgb3V0cHV0LiIp Cgo7OyBJZiBgZGlmZicgYW5kIGBkaWZmLW1vZGUnIGFyZSBub3QgdG8gYmUgcmVxdWlyZWQsIHRo aXMgZnVuY3Rpb24gc2hvdWxkIGJlCjs7IGNoYW5nZWQgdG8gZG8gYSBsb3Qgb2Ygd2hhdCBgZGlm Zi1uby1zZWxlY3QnIGRvZXMuCihkZWZ1biByYmJoLS1ydW4tZGlmZiAoYnVmKQogICJDb21wYXJl IGNvbnRlbnRzIG9mIGJ1ZmZlciBCVUYgd2l0aCB0aG9zZSBvZiB0aGUgZmlsZSBpdCB2aXNpdHMu ClJ1bnMgYHJiYmgtZGlmZi1jb21tYW5kJyBjb21tYW5kIHRvIG1ha2UgdGhlIGNvbXBhcmlzb24s IGFuZCBwdXRzIGl0cyBvdXRwdXQKaW4gYSBidWZmZXIsIHdpdGggYmFzZW5hbWUgYHJiYmgtZGlm Zi1idWZmZXItbmFtZScuClRoZSBjb21tYW5kIGlzIHJ1biB3aXRoIHRoZSBzd2l0Y2hlcyBgcmJi aC1kaWZmLXN3aXRjaGVzJy4iCiAgKGxldCAoKGRpZmYtY29tbWFuZCByYmJoLWRpZmYtY29tbWFu ZCkKCShkaWZmLXVzZS1sYWJlbHMgbmlsKSkgOyBEb24ndCBjYXJlIGFib3V0IGxhYmVscy4KICAg IChzZXRxIHJiYmgtY3VycmVudC1kaWZmLWJ1ZmZlci1uYW1lIChnZW5lcmF0ZS1uZXctYnVmZmVy CgkJCQkJIHJiYmgtZGlmZi1idWZmZXItbmFtZSkpCiAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBi dWYKICAgICAgKGRpZmYtbm8tc2VsZWN0IGJ1ZiBidWZmZXItZmlsZS1uYW1lIHJiYmgtZGlmZi1z d2l0Y2hlcwoJCSAgICAgIHQgcmJiaC1jdXJyZW50LWRpZmYtYnVmZmVyLW5hbWUpKSkpCgo7OyBX aXRoIHRoaXMsIHJldmVydGVkIGh1bmtzIGNhbiBiZSB1bmRvbmUgb25lIGJ5IG9uZS4KKGRlZnN1 YnN0IHJiYmgtLXNwbGl0LXVuZG8taHVuayAoYnVmKQogICJGb3JjZSB1bmRvIGhpc3RvcnkgdG8g c2VwYXJhdGUgaHVuayByZXBsYWNlbWVudHMgaW4gYnVmZmVyIEJVRi4iCiAgKHdpdGgtY3VycmVu dC1idWZmZXIgYnVmCiAgICAodW5kby1ib3VuZGFyeSkpKQoKKGRlZnVuIHJiYmgtZGVsZXRlLWxp bmUgKCZvcHRpb25hbCBhcmcpCiAgIkRlbGV0ZSBBUkcgbGluZXMgKG9yIHRoZSBjdXJyZW50IGxp bmUsIGlmIEFSRyBpcyAwKS4KRG9lcyBub3QgcHV0IHRoZSBraWxsZWQgdGV4dCBpbiB0aGUgYGtp bGwtcmluZycuICBTZWUgYGtpbGwtd2hvbGUtbGluZScgZm9yCmRldGFpbHMgb24gQVJHLiIKICAo c2V0cSBhcmcgKG9yIGFyZyAxKSkKICAoaWYgKGFuZCAoPiBhcmcgMCkKCSAgIChlb2JwKQoJICAg KHNhdmUtZXhjdXJzaW9uIChmb3J3YXJkLXZpc2libGUtbGluZSAwKQoJCQkgICAoZW9icCkpKQog ICAgICAoc2lnbmFsICdlbmQtb2YtYnVmZmVyIG5pbCkpCiAgKGlmIChhbmQgKDwgYXJnIDApCgkg ICAoYm9icCkKCSAgIChzYXZlLWV4Y3Vyc2lvbiAoZW5kLW9mLXZpc2libGUtbGluZSkgKGJvYnAp KSkKICAgICAgKHNpZ25hbCAnYmVnaW5uaW5nLW9mLWJ1ZmZlciBuaWwpKQogIChjb25kICgoemVy b3AgYXJnKQogICAgICAgICAoZGVsZXRlLXJlZ2lvbiAocHJvZ24gKGZvcndhcmQtdmlzaWJsZS1s aW5lIDApIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAgICAgIChwcm9nbiAoZW5kLW9mLXZp c2libGUtbGluZSkgKHBvaW50KSkpKQogICAgICAgICgoPCBhcmcgMCkKICAgICAgICAgKGRlbGV0 ZS1yZWdpb24gKHByb2duIChlbmQtb2YtdmlzaWJsZS1saW5lKSAocG9pbnQpKQogICAgICAgICAg ICAgICAgICAgICAgICAocHJvZ24gKGZvcndhcmQtdmlzaWJsZS1saW5lICgxKyBhcmcpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoYm9icCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGJhY2t3YXJkLWNoYXIpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBvaW50KSkpKQogICAgICAgICh0CiAgICAgICAgIChkZWxldGUtcmVnaW9uIChw cm9nbiAoZm9yd2FyZC12aXNpYmxlLWxpbmUgMCkgKHBvaW50KSkKCQkJKHByb2duIChmb3J3YXJk LXZpc2libGUtbGluZSBhcmcpIChwb2ludCkpKSkpKQoKKGRlZnN1YnN0IHJiYmgtY291bnQtdG90 YWwtaHVua3MgKGRpZmYtYnVmICZvcHRpb25hbCBjaGFuZ2UtY29tbWFuZC1yZSkKICAod2l0aC1j dXJyZW50LWJ1ZmZlciBkaWZmLWJ1ZgogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNo YXIgKHBvaW50LW1pbikpCiAgICAgIChsZXQgKChjb3VudCAwKQoJICAgIChyZSAob3IgY2hhbmdl LWNvbW1hbmQtcmUgcmJiaC1kaWZmLWNoYW5nZS1jb21tYW5kLXJlZ2V4cCkpKQoJKHdoaWxlIChy ZS1zZWFyY2gtZm9yd2FyZCByZSBuaWwgdCkKCSAgKHNldHEgY291bnQgKDErIGNvdW50KSkpCglj b3VudCkpKSkKCihkZWZzdWJzdCByYmJoLWdldC1odW5rLWNvbnRlbnRzIChiZWcgZW5kKQogICJH ZXQgdGhlIGh1bmsgY29udGVudHMgZnJvbSBwb3NpdGlvbnMgQkVHIHRvIEVORC4KRXhwZWN0cyB0 aGF0IGEgZGlmZiBidWZmZXIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLiIKICAobGV0ICgoc3RhcnQg KHBvaW50KSkpCiAgICAoZm9yd2FyZC1saW5lICgxKyAoLSBiZWcgZW5kKSkpCiAgICAobGV0ICgo dGV4dCAoYnVmZmVyLXN1YnN0cmluZyBzdGFydCAocG9pbnQpKSkpCiAgICAgIDs7IFJlbWVtYmVy IHRoYXQgd2UgYXJlIHVzaW5nIHRoZSAtLW5vcm1hbCBzd2l0Y2gsIGhlbmNlIHRoZSA+IGFuZCA8 CiAgICAgIDs7IHJlcGxhY2VtZW50LgogICAgICAoc2V0cSB0ZXh0IChyZXBsYWNlLXJlZ2V4cC1p bi1zdHJpbmcgIl5bPjxdICIgIiIgdGV4dCkpCiAgICAgIHRleHQpKSkKCihkZWZ1biByYmJoLXBh dGNoLWJ1ZmZlciAoYnVmIGRpZmYtYnVmKQogICJQYXRjaCB0aGUgYnVmZmVyIEJVRiBhY2NvcmRp bmcgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBkaWZmIGJ1ZmZlciBESUZGLUJVRi4KSXQgd29ya3Mg d2l0aCBhIGRpZmYgYnVmZmVyIHRoYXQgY29udGFpbnMgYSAtLW5vcm1hbCBvdXRwdXQgZnJvbSBk aWZmLiIKICA7OyBsaW5lLW9mZnNldCBrZWVwcyBtZW1vcnkgb2YgdGhlIGxpbmVzIGFkZGVkIGFu ZCBkZWxldGVkIHRvIHRoZSBidWZmZXIgQlVGLAogIDs7IGFuZCBpdCBpcyBuZWNlc3NhcnkgYmVj YXVzZSB0aGUgZGlmZiBvdXRwdXQgd2lsbCBzdGF5IHRoZSBzYW1lIChsaW5lCiAgOzsgcmVmZXJl bmNlcyB3aWxsIHN0YXkgcmVsYXRpdmUgdG8gdGhlIHVucGF0Y2hlZCBidWZmZXIpLgogIDs7IEFk ZGVkIGxpbmVzIGRlY3JlbWVudHMgb2Zmc2V0LCBhbmQgZGVsZXRlZCBsaW5lcyBpbmNyZW1lbnQg aXQuCiAgKGxldCAoKGxpbmUtb2Zmc2V0IDApCgkoY29sdW1uIChjdXJyZW50LWNvbHVtbikpKSA7 IFRvIHJlc3RvcmUgcG9pbnQganVzdCByaWdodC4KICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAo d2l0aC1jdXJyZW50LWJ1ZmZlciBkaWZmLWJ1ZgoJKGdvdG8tY2hhciAocG9pbnQtbWluKSkKCShz YXZlLWV4Y3Vyc2lvbgoJICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHJiYmgtZGlmZi1jaGFu Z2UtY29tbWFuZC1yZWdleHAgbmlsIHQpCgkgICAgKHJiYmgtLXNwbGl0LXVuZG8taHVuayBidWYp ICA7IE1ha2UgZWFjaCBjaGFuZ2Ugb2YgaHVuayB1bmRvYWJsZS4KCSAgICAoZm9yd2FyZC1saW5l KSA7IHNraXAgdGhlIGNvbW1hbmQuCgkgICAgOzsgR2V0IHJhbmdlcyBhbmQgdGhlIGFjdGlvbiwg ZnJvbSB0aGUgcHJldmlvdXMgbWF0Y2guCgkgICAgKGxldCogKChhY3Rpb24tY21kIChtYXRjaC1z dHJpbmcgNCkpCgkJICAgKG9sZC1mcm9tIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcg MSkpKQoJCSAgIChvbGQtdG8gKGlmIChtYXRjaC1iZWdpbm5pbmcgMykKCQkJICAgICAgIChzdHJp bmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMykpCgkJCSAgICAgb2xkLWZyb20pKQoJCSAgIChu ZXctZnJvbSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDUpKSkKCQkgICAobmV3LXRv IChpZiAobWF0Y2gtYmVnaW5uaW5nIDcpCgkJCSAgICAgICAoc3RyaW5nLXRvLW51bWJlciAobWF0 Y2gtc3RyaW5nIDcpKQoJCQkgICAgIG5ldy1mcm9tKSkpCgkgICAgICAoY29uZCAoKGVxdWFsIGFj dGlvbi1jbWQgImEiKQoJCSAgICAgOzsgV2hlbiBhZGRpbmcsIHdlIHRha2UgdGhlIHRleHQgYW5k IHJlbW92ZSA+IGFuZCA8CgkJICAgICA7OyAoZGlmZiB3YXMgY2FsbGVkIHdpdGggLS1ub3JtYWwg c3dpdGNoKS4KCQkgICAgIDs7IFRoZW4gbmF2aWdhdGUgdG8gdGhlIGxpbmUsIGFjY291bnRpbmcg dGhlIG9mZnNldCwKCQkgICAgIDs7IGFuZCBpbnNlcnQgdGhlIHRleHQuCgkJICAgICAobGV0ICgo dGV4dCAocmJiaC1nZXQtaHVuay1jb250ZW50cyBuZXctdG8gbmV3LWZyb20pKSkKCQkgICAgICAg KHdpdGgtY3VycmVudC1idWZmZXIgYnVmCgkJCSAoZ290by1jaGFyIChwb2ludC1taW4pKQoJCQkg KGZvcndhcmQtbGluZSAoLSBvbGQtZnJvbSBsaW5lLW9mZnNldCkpCgkJCSAoc2V0cSBsaW5lLW9m ZnNldCAoLSBsaW5lLW9mZnNldCAoMSsgKC0gbmV3LXRvCgkJCQkJCQkJIG5ldy1mcm9tKSkpKQoJ CQkgKGluc2VydCB0ZXh0KSkpKQoJCSAgICAoKGVxdWFsIGFjdGlvbi1jbWQgImQiKQoJCSAgICAg OzsgV2hlbiBkZWxldGluZywgbmF2aWdhdGUgdG8gdGhlIGNvcnJlY3QgbGluZSBhbmQga2lsbAoJ CSAgICAgOzsgYXMgbWFueSBsaW5lcyBhcyB0aGUgcmFuZ2UgaW4gdGhlIGRpZmYgb3V0cHV0IHNh eXMuCgkJICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYKCQkgICAgICAgKGdvdG8tY2hhciAo cG9pbnQtbWluKSkKCQkgICAgICAgKGZvcndhcmQtbGluZSAoMS0gKC0gb2xkLWZyb20gbGluZS1v ZmZzZXQpKSkKCQkgICAgICAgKHNldHEgbGluZS1vZmZzZXQgKCsgbGluZS1vZmZzZXQgKDErCgkJ CQkJCQkgKC0gb2xkLXRvIG9sZC1mcm9tKSkpKQoJCSAgICAgICAocmJiaC1kZWxldGUtbGluZSAo MSsgKC0gb2xkLXRvIG9sZC1mcm9tKSkpKSkKCQkgICAgKChlcXVhbCBhY3Rpb24tY21kICJjIikK CQkgICAgIDs7IFdoZW4gY2hhbmdpbmcsIGlzIGEgY29tYmluYXRpb24gb2YgYWRkaW5nIGFuZCBk ZWxldGluZy4KCQkgICAgIDs7IEdldCB0aGUgdGV4dCBhZnRlciAiLS0tIiwgYW5kIGFjdCBzaW1p bGFyIGFzIHdlIHdvdWxkCgkJICAgICA7OyB3aXRoIGFkZGluZy4KCQkgICAgIDs7IEJ1dCBiZWZv cmUsIGtpbGwgdGhlIGxpbmVzLCBhcyB3ZSBkbyB3aGVuIGRlbGV0aW5nLgoJCSAgICAgKHJlLXNl YXJjaC1mb3J3YXJkICJeLS0tIikKCQkgICAgIChmb3J3YXJkLWxpbmUpCgkJICAgICAobGV0ICgo dGV4dCAocmJiaC1nZXQtaHVuay1jb250ZW50cyBuZXctdG8gbmV3LWZyb20pKSkKCQkgICAgICAg KHdpdGgtY3VycmVudC1idWZmZXIgYnVmCgkJCSAoZ290by1jaGFyIChwb2ludC1taW4pKQoJCQkg KGZvcndhcmQtbGluZSAoMS0gKC0gb2xkLWZyb20gbGluZS1vZmZzZXQpKSkKCQkJIChyYmJoLWRl bGV0ZS1saW5lICgxKyAoLSBvbGQtdG8gb2xkLWZyb20pKSkKCQkJIChzZXRxIGxpbmUtb2Zmc2V0 ICgrIGxpbmUtb2Zmc2V0ICgtIG9sZC10byBvbGQtZnJvbSkKCQkJCQkgICAgICBuZXctZnJvbSAo LSBuZXctdG8pKSkKCQkJIChpbnNlcnQgdGV4dCkpKSkKCQkgICAgKHQKCQkgICAgIChlcnJvciAi VW5rbm93biBjb21tYW5kIGFjdGlvbiBpbiBkaWZmIG91dHB1dCIpKSkpKSkpKQogICAgKG1vdmUt dG8tY29sdW1uIGNvbHVtbikpKSA7IFJlc3RvcmUgY29sdW1uLgoKOzsgTm90IHN1cmUgaWYgdGhl IGZ1bmN0aW9uIHdvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yCjs7IGByZXZlcnQtYnVmZmVy LWZ1bmN0aW9uJy4KOzsgQnV0IGp1c3QgaW4gY2FzZSwgbWFrZSBpdCB0YWtlIF9pZ25vcmUtYXV0 byBhcyBhbiBhcmd1bWVudC4KOzsgTm90ZSB0aGF0IHJldmVydGluZyB3aXRoIHRoZSBjb250ZW50 cyBvZiBhbiBhdXRvIHNhdmUgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLgo7OyBJdCBjb3VsZCBiZSBh ZGRlZCwgaWYgc3VnZ2VzdGVkLgooZGVmdW4gcmJiaC1yZXZlcnQtYnVmZmVyLWJ5LWh1bmtzICgm b3B0aW9uYWwgX2lnbm9yZS1hdXRvIG5vY29uZmlybSkKICAiUmV2ZXJ0IGJ1ZmZlciBieSBodW5r cywgaW5zdGVhZCBvZiBkb2luZyBhIHNpbmdsZSBkZWxldGlvbiBwbHVzIGluc2VydGlvbi4KVGhp cyBhY3Rpb24gaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmV2ZXJ0IGEgYnVmZmVyIChsaWtl IHlvdSB3b3VsZCBkbyB3aXRoCmByZXZlcnQtYnVmZmVyJyksIGJ1dCB0aGVuIHdvdWxkIGxpa2Ug dG8gdW5kbyBzb21lIG9mIHRoZSByZXZlcnRpbmcuCldoZW4gdGhlIGJ1ZmZlciBoYXNuJ3QgYmVl biBtb2RpZmllZCwgbm90aGluZyBpcyBkb25lLgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZnVs IGZvciBidWZmZXJzIHZpc3RpbmcgZmlsZXMuCkFmdGVyIHJldmVydGluZywgaXQgbWFya3MgdGhl IGJ1ZmZlciBhcyBub3QgbW9kaWZpZWQuCgpXaGVuIE5PQ09ORklSTSBpcyBub24tbmlsLCBkb24n dCBhc2sgZm9yIGNvbmZpcm1hdGlvbiBiZWZvcmUgcmV2ZXJ0aW5nLiAgVGhlCm90aGVyIHdheSBv ZiBhdm9pZGluZyB0aGUgcXVlcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHZhcmlhYmxlIApgcmV2ZXJ0 LXdpdGhvdXQtcXVlcnknLiAgTmV2ZXJ0aGVsZXNzLCB5b3Ugd2lsbCBiZSBhbHdheXMgcHJvbXB0 ZWQsIGlmIHRoZQpmaWxlIHdhcyBjaGFuZ2VkIGV4dGVybmFsbHkuCgpUaGUgb3B0aW9uYWwgYXJn dW1lbnQgX0lHTk9SRS1BVVRPIGlzIGlnbm9yZWQgYW5kIGlzIHByb3ZpZGVkIG9ubHkgZm9yCmNv bXBhdGliaWxpdHkgd2l0aCBgcmV2ZXJ0LWJ1ZmZlcicuICBUaHVzLCBpdCBpcyBhIGNhbmRpZGF0 ZSBmb3IgdGhlIHZhcmlhYmxlCmByZXZlcnQtYnVmZmVyLWZ1bmN0aW9uJy4iCiAgKGludGVyYWN0 aXZlKQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciAoYnVmZmVyLWJhc2UtYnVmZmVyIChjdXJy ZW50LWJ1ZmZlcikpCgkJCSAgIChjdXJyZW50LWJ1ZmZlcikpCiAgICAoc2F2ZS1leGN1cnNpb24K ICAgICAgKGxldCAoKGZpbGUtbmFtZSBidWZmZXItZmlsZS1uYW1lKQoJICAgIChidWYgKGN1cnJl bnQtYnVmZmVyKSkKCSAgICA7OyBKdXN0IGluIGNhc2Ugd2UgYXJlIG5vdCB0aGUgcmV2ZXJ0LWJ1 ZmZlci1mdW5jdGlvbi4KCSAgICAocmV2ZXJ0LWJ1ZmZlci1pbi1wcm9ncmVzcy1wIHQpKQoJOzsg UmVwZWF0IHNvbWUgb2Ygd2hhdCByZXZlcnQtYnVmZmVyLS1kZWZhdWx0IGRvZXMsIGJlY2F1c2Ug aXQgaXMgbm90Cgk7OyBzdXJlIHJldmVydGluZyBieSBodW5rcyBpcyBhIGNhbmRpZGF0ZSBmb3Ig cmV2ZXJ0LWJ1ZmZlci1mdW5jdGlvbi4KCShjb25kICgobnVsbCBmaWxlLW5hbWUpCgkgICAgICAg KGVycm9yICJCdWZmZXIgZG9lcyBub3Qgc2VlbSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYW55IGZp bGUiKSkKCSAgICAgICgob3IgKGFuZCAobm90ICh2ZXJpZnktdmlzaXRlZC1maWxlLW1vZHRpbWUg YnVmKSkKCQkJKHllcy1vci1uby1wCgkJCSAoZm9ybWF0ICJGaWxlICVzIHdhcyBtb2RpZmllZCBv dXRzaWRlIG9mIEVtYWNzLiAgUmVhbGx5IHJldmVydD8gIgoJCQkJIGZpbGUtbmFtZSkpKQoJCSAg IG5vY29uZmlybQoJCSAgIDs7IFJlc3BlY3QgdXNlciBjaG9pY2UuCgkJICAgKGNhdGNoICdmb3Vu ZAoJCSAgICAgKGRvbGlzdCAocmVnZXhwIHJldmVydC13aXRob3V0LXF1ZXJ5KQoJCSAgICAgICAo d2hlbiAoc3RyaW5nLW1hdGNoIHJlZ2V4cCBmaWxlLW5hbWUpCgkJCSAodGhyb3cgJ2ZvdW5kIHQp KSkpCgkJICAgKHllcy1vci1uby1wIChmb3JtYXQgIlJldmVydCBidWZmZXIgZnJvbSBmaWxlICVz PyAiCgkJCQkJZmlsZS1uYW1lKSkpCgkgICAgICAgKHJ1bi1ob29rcyAnYmVmb3JlLXJldmVydC1o b29rKQoJICAgICAgIChyYmJoLS1ydW4tZGlmZiBidWYpCgkgICAgICAgKHJiYmgtcGF0Y2gtYnVm ZmVyIGJ1ZiByYmJoLWN1cnJlbnQtZGlmZi1idWZmZXItbmFtZSkKCSAgICAgICA7OyBNYXJrIHRo ZSBidWZmZXIgYXMgbm90IG1vZGlmaWVkLCBsaWtlIGl0IHdvdWxkIGhhcHBlbiB3aXRoCgkgICAg ICAgOzsgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgcmV2ZXJ0LWJ1ZmZlci4KCSAgICAgICAoc2V0 LWJ1ZmZlci1tb2RpZmllZC1wIG5pbCkKCSAgICAgICA7OyBSZXBvcnQgdG8gdGhlIHVzZXIgKHRo aXMgY291bGQgYmUgbWFkZSBvcHRpb25hbCkuCgkgICAgICAgOzsgKHNldHEgcmJiaC10b3RhbC1o dW5rcyAocmJiaC1jb3VudC10b3RhbC1odW5rcwoJICAgICAgIDs7IAkJCSAgICAgICByYmJoLWN1 cnJlbnQtZGlmZi1idWZmZXItbmFtZSkpCgkgICAgICAgOzsgKG1lc3NhZ2UgIiVkICVzIHJldmVy dGVkIiByYmJoLXRvdGFsLWh1bmtzCgkgICAgICAgOzsgCQkoaWYgKD0gcmJiaC10b3RhbC1odW5r cyAxKQoJICAgICAgIDs7IAkJICAgICJodW5rIgoJICAgICAgIDs7IAkJICAiaHVua3MiKSkKCSAg ICAgICA7OyBLaWxsIHRoZSBkaWZmIGJ1ZmZlciB3ZSB1c2VkLgoJICAgICAgIChraWxsLWJ1ZmZl ciByYmJoLWN1cnJlbnQtZGlmZi1idWZmZXItbmFtZSkKCSAgICAgICAocnVuLWhvb2tzICdhZnRl ci1yZXZlcnQtaG9vaykpCgkgICAgICAodAoJICAgICAgIChtZXNzYWdlICJSZXZlcnQgYWJvcnRl ZCIpKSkpKSkpCgo7OyBUaGUgbmV4dCBmdW5jdGlvbiB1c2VzIHJlcGxhY2UtYnVmZmVyLWNvbnRl bnRzOgooZGVmdW4gcmV2ZXJ0LWJ1ZmZlci13aXRoLWZpbmUtZ3JhaW4gKCZvcHRpb25hbCBfaWdu b3JlLWF1dG8gbm9jb25maXJtKQogICJSZXBsYWNlIGN1cnJlbnQgYnVmZmVyIHRleHQgd2l0aCB0 aGUgdGV4dCBvZiB0aGUgdmlzaXRlZCBmaWxlIG9uIGRpc2suCkFjdHMganVzdCBsaWtlIGByZXZl cnQtYnVmZmVyJywgYnV0IHRyaWVzIHRvIGJlIGFzIG5vbi1kZXN0cnVjdGl2ZSBhcyBwb3NzaWJs ZSwKYnkgcHJlc2VydmluZyBtYXJrZXJzLCBwcm9wZXJ0aWVzIGFuZCBvdmVybGF5cy4KCkluIExp c3AgY29kZSwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIElHTk9SRS1BVVRPOiB3aGVuIG5pbCwgb2Zm ZXJzIHRvIHJldmVydApmcm9tIHRoZSBhdXRvLXNhdmUgZmlsZS4gIEl0IGRlZmF1bHRzIHRvIG5p bC4KCldoZW4gTk9DT05GSVJNIGlzIG5vbi1uaWwsIGRvbid0IGFzayBmb3IgY29uZmlybWF0aW9u IGJlZm9yZSByZXZlcnRpbmcuICBUaGUKb3RoZXIgd2F5IG9mIGF2b2lkaW5nIHRoZSBxdWVyeSBp cyBwcm92aWRlZCBieSB0aGUgdmFyaWFibGUgCmByZXZlcnQtd2l0aG91dC1xdWVyeScuICBOZXZl cnRoZWxlc3MsIHRoZSBwcm9tcHQgY2FuJ3QgYmUgc2tpcHBlZCBpZiB0aGUgZmlsZQp3YXMgY2hh bmdlZCBleHRlcm5hbGx5LiIKICAoaW50ZXJhY3RpdmUpCiAgOzsgUmVwZWF0IHNvbWUgb2Ygd2hh dCByZXZlcnQtYnVmZmVyLS1kZWZhdWx0IGRvZXMsIGJlY2F1c2UgaXQgaXMgbm90IHN1cmUKICA7 OyB0aGlzIHJldmVydCBmdW5jdGlvbiBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciByZXZlcnQtYnVm ZmVyLWZ1bmN0aW9uLgogIChsZXQgKChidWYgKG9yIChidWZmZXItYmFzZS1idWZmZXIgKGN1cnJl bnQtYnVmZmVyKSkKCQkgKGN1cnJlbnQtYnVmZmVyKSkpCgkoZmlsZS1uYW1lIGJ1ZmZlci1maWxl LW5hbWUpCgkocmV2ZXJ0LWJ1ZmZlci1pbi1wcm9ncmVzcy1wIHQpKQogICAgKGNvbmQgKChudWxs IGZpbGUtbmFtZSkKCSAgIChlcnJvciAiQnVmZmVyIGRvZXMgbm90IHNlZW0gdG8gYmUgYXNzb2Np YXRlZCB3aXRoIGFueSBmaWxlIikpCgkgICgob3IgKGFuZCAobm90ICh2ZXJpZnktdmlzaXRlZC1m aWxlLW1vZHRpbWUgYnVmKSkKCQkgICAgKHllcy1vci1uby1wCgkJICAgICAoZm9ybWF0ICJGaWxl ICVzIHdhcyBtb2RpZmllZCBvdXRzaWRlIG9mIEVtYWNzLiAgUmVhbGx5IHJldmVydD8gIgoJCQkg ICAgIGZpbGUtbmFtZSkpKQoJICAgICAgIG5vY29uZmlybQoJICAgICAgIDs7IFJlc3BlY3QgdXNl ciBjaG9pY2UuCgkgICAgICAgKGNhdGNoICdmb3VuZAoJCSAoZG9saXN0IChyZWdleHAgcmV2ZXJ0 LXdpdGhvdXQtcXVlcnkpCgkJICAgKHdoZW4gKHN0cmluZy1tYXRjaCByZWdleHAgZmlsZS1uYW1l KQoJCSAgICAgKHRocm93ICdmb3VuZCB0KSkpKQoJICAgICAgICh5ZXMtb3Itbm8tcCAoZm9ybWF0 ICJSZXZlcnQgYnVmZmVyIGZyb20gZmlsZSAlcz8gIiBmaWxlLW5hbWUpKSkKCSAgIChydW4taG9v a3MgJ2JlZm9yZS1yZXZlcnQtaG9vaykKCSAgIChzYXZlLWV4Y3Vyc2lvbgoJICAgICA7OyBUaGlz IGFjdGlvbiByZXZlcnRzIHRoZSB3aG9sZSBidWZmZXIuCgkgICAgIChzYXZlLXJlc3RyaWN0aW9u CgkgICAgICAgKHdpZGVuKQoJICAgICAgICh3aXRoLXRlbXAtYnVmZmVyCgkJIChpbnNlcnQtZmls ZS1jb250ZW50cyBmaWxlLW5hbWUpCgkJIChsZXQgKCh0ZW1wLWJ1ZiAoY3VycmVudC1idWZmZXIp KSkKCQkgICAoc2V0LWJ1ZmZlciBidWYpCgkJICAgKHJlcGxhY2UtYnVmZmVyLWNvbnRlbnRzIHRl bXAtYnVmKSkpKSkKCSAgIDs7IE1hcmsgdGhlIGJ1ZmZlciBhcyBub3QgbW9kaWZpZWQsIGxpa2Ug aXQgd291bGQgaGFwcGVuIHdpdGggdGhlCgkgICA7OyBkZWZhdWx0IGJlaGF2aW9yIG9mIHJldmVy dC1idWZmZXIuCgkgICAoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG5pbCkKCSAgIChydW4taG9va3Mg J2FmdGVyLXJldmVydC1ob29rKSkKCSAgKHQKCSAgIChtZXNzYWdlICJSZXZlcnQgYWJvcnRlZCIp KSkpKQoKCihwcm92aWRlICdyYmJoKQoKOzs7IHJiYmguZWwgZW5kcyBoZXJlCg== --0000000000007302600587b45578--