From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?UTF-8?Q?Jo=C3=A3o_Paulo_Labegalini_de_Carvalho?= Newsgroups: gmane.emacs.devel Subject: Re: Initial fontification in sh-mode with tree-sittter Date: Fri, 28 Oct 2022 09:27:47 -0600 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000001b71bb05ec19e78b" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="5993"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Oct 28 17:28:45 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ooRHo-0001K6-F6 for ged-emacs-devel@m.gmane-mx.org; Fri, 28 Oct 2022 17:28:44 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ooRHF-0008JP-EA; Fri, 28 Oct 2022 11:28:11 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ooRH9-0008Ee-7H for emacs-devel@gnu.org; Fri, 28 Oct 2022 11:28:03 -0400 Original-Received: from mail-ot1-x336.google.com ([2607:f8b0:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ooRH7-0006k2-0i for emacs-devel@gnu.org; Fri, 28 Oct 2022 11:28:02 -0400 Original-Received: by mail-ot1-x336.google.com with SMTP id cy15-20020a056830698f00b0065c530585afso3168221otb.2 for ; Fri, 28 Oct 2022 08:28:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=KNJKVapT8dKyu/O8RdFa7RQ1L3TR1nxiLBhw6ghvg1k=; b=nZOBT3E/H+QkEyp5r5ChOrYWekXuEw524yCiSlkipNSdmC76mswP5l2uweACmsq5sR twfv7LxcxAWR6QaJWa/qu3Lk68Vn5ow/nt/bj2FkRwWqp6HP5MuRmhGhayPpAocMau+E EPOEGTTSHVNc0tM3jRgsjCXyZVQ1BcbHelSzZGgtBG79lUBHHJJkqOFS7+PW3jiJKNg8 Ujx8YpU93mNrEWSgtMFq+GakwUE9JFb8KVZd0w52Apx52KxLy2q/QFYw50pt9BdxBy3V SmLB3NeewBOwN1ujWsIK7rAF+1/+72mgksIpIEontPlk8wKhwJOHuMDxenIQ64elHXJ6 HCgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KNJKVapT8dKyu/O8RdFa7RQ1L3TR1nxiLBhw6ghvg1k=; b=34EY4orUC+SE07F2u+BF8+nO78MyZxA6JN03G7TlBVlPEXlS7s6mCywO5P9YiP1leK jNID2o3r+s4sFjNuzi9Dx0ODOn2ZP8D54qo8D5uwbZf0Rgya5jXkj4LWj7xKwj05N580 3jDfTjuiS0rWG3SI6UCRNCVd2m1+y80CeLavaWRMiCDCgx0TUlXICN87VSB68ZA2dSV/ /XG2xD0uURHtiEOkfOmhri+grtqrYpOEWc2qbe/vj5VSNS3RSxW7IJpl9wa8r7KUp4Re 3OJ2nlP4o2lBt0KJS6887zS5oUIhdwGsvhZ6aNXbFHSKSa7lEiu41E8AQZz/DG6CG8UT UFHA== X-Gm-Message-State: ACrzQf0y8JcC+Ethrq++7O2478bgvz6ypPGoGwziMoJHSx8aumpUy+eh E1CLL+iMNu3ms+A2NN+2/zr8r9BQfj9soKWTsEpwCY+A X-Google-Smtp-Source: AMsMyM741L405Tkkxc0N//YBctZ/iDEWrIF1Ll1aBJzkIdiV6rdNWrelKZ5Qyw84OXzUg0ufJ5rtfBNT1s3VHVwbqZs= X-Received: by 2002:a9d:369:0:b0:66c:2e8d:3367 with SMTP id 96-20020a9d0369000000b0066c2e8d3367mr2494658otv.102.1666970879196; Fri, 28 Oct 2022 08:27:59 -0700 (PDT) In-Reply-To: Received-SPF: pass client-ip=2607:f8b0:4864:20::336; envelope-from=jaopaulolc@gmail.com; helo=mail-ot1-x336.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: "Emacs-devel" Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:298679 Archived-At: --0000000000001b71bb05ec19e78b Content-Type: multipart/alternative; boundary="0000000000001b71b805ec19e789" --0000000000001b71b805ec19e789 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, In face of the comments about the risks of adding new faces, I edited my patch to only use existing faces from font-lock. Please let me know what you think of this new patch. Thanks. On Thu, Oct 27, 2022 at 4:01 PM Jo=C3=A3o Paulo Labegalini de Carvalho < jaopaulolc@gmail.com> wrote: > Hi everyone, > > Please find the patch for enabling fontification in sh-mode (currently > only for bash) using tree-sitter. > > I welcome all comments and suggestions to improve the patch. > > I noticed a weird behavior with heredocs. Take the code below: > > echo < This is a here document. > EOF > echo "Done." > > My patch correctly fontifies the code above, but if I kill the whole line > with the "This is a here document." text, then the sh-heredoc face bleeds > out and all the subsequent comments get fontified as part of the heredoc. > > A similar behavior happens if tree-sitter is not enabled, if the heredoc > is empty then all subsequent commands are fontified as heredoc. However, = as > soon as anything is added to the heredoc, then everything goes back to th= e > correct fontification. > > Such "refreshing" does not happen with tree-sitter enabled, but if I > execute M-x sh-mode then the buffer gets refreshed and everything looks > good. > > What am I doing wrong? > > -- > Jo=C3=A3o Paulo L. de Carvalho > Ph.D Computer Science | IC-UNICAMP | Campinas , SP - Brazil > Postdoctoral Research Fellow | University of Alberta | Edmonton, AB - > Canada > joao.carvalho@ic.unicamp.br > joao.carvalho@ualberta.ca > --=20 Jo=C3=A3o Paulo L. de Carvalho Ph.D Computer Science | IC-UNICAMP | Campinas , SP - Brazil Postdoctoral Research Fellow | University of Alberta | Edmonton, AB - Canad= a joao.carvalho@ic.unicamp.br joao.carvalho@ualberta.ca --0000000000001b71b805ec19e789 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

In face of the comments about the risks of addi= ng new faces, I edited my patch to only use existing=C2=A0faces from font-l= ock.

Please let me know what you think of this new patch.

Tha= nks.

On Thu, Oct 27, 2022 at 4:01 PM Jo=C3=A3o Paulo Labegalini de Carvalho = <jaopaulolc@gmail.com> wr= ote:
Hi everyone,

Please find the patch for enabling fo= ntification in sh-mode (currently only=C2=A0for bash) using tree-sitter.
I welcome all comments and suggestions to improve the patch.

I = noticed a weird behavior with heredocs. Take the code below:

<= div>echo <<EOF
This is a here document.
EOF
echo "Done."=

My patch correctly=C2=A0fontifies the code above, but if I k= ill the whole line with the "This is a here document." text, then= the sh-heredoc face bleeds out and all the subsequent comments get fontifi= ed as part of the heredoc.

A similar behavior happens if tree-sitter= is not enabled, if the heredoc is empty then all subsequent commands are f= ontified as heredoc. However, as soon as anything is added to the heredoc, = then everything goes back to the correct fontification.=C2=A0

Such &= quot;refreshing" does not happen with tree-sitter enabled, but if I ex= ecute M-x sh-mode then the buffer gets refr= eshed and everything looks good.

What am I doing wrong?

--
Jo=C3=A3o Paulo L. de Carvalho
Ph.D Computer Science | =C2= =A0IC-UNICAMP | Campinas , SP - Brazil
Postdoctoral Research Fellow | Un= iversity of Alberta | Edmonton, AB - Canada


--
Jo= =C3=A3o Paulo L. de Carvalho
Ph.D Computer Science | =C2=A0IC-UNICAMP | = Campinas , SP - Brazil
Postdoctoral Research Fellow | University of Albe= rta | Edmonton, AB - Canada
--0000000000001b71b805ec19e789-- --0000000000001b71bb05ec19e78b Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Initial-fontification-in-sh-mode-with-tree-sitter.patch" Content-Disposition: attachment; filename="0001-Initial-fontification-in-sh-mode-with-tree-sitter.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9sne6pu0 RnJvbSAxZDgxMjY2ZjExZWU2MWFhYTMzYWJlZjM3Mzg1Y2JjYWI3NTAyMmVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Sm89QzM9QTNvPTIwUD0yRT0yMEw9MkU9MjBk ZT0yMENhcnZhbGhvPz0KIDxqYW9wYXVsb2xjQGdtYWlsLmNvbT4KRGF0ZTogVGh1LCAyNyBPY3Qg MjAyMiAxNTo0NTo1NiAtMDYwMApTdWJqZWN0OiBbUEFUQ0hdIEluaXRpYWwgZm9udGlmaWNhdGlv biBpbiBzaC1tb2RlIHdpdGggdHJlZS1zaXR0ZXIKCi0tLQogbGlzcC9wcm9nbW9kZXMvc2gtc2Ny aXB0LmVsIHwgMTMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxl IGNoYW5nZWQsIDEyMSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9saXNwL3Byb2dtb2Rlcy9zaC1zY3JpcHQuZWwgYi9saXNwL3Byb2dtb2Rlcy9zaC1zY3JpcHQu ZWwKaW5kZXggNTU4YjYyYjIwYS4uMmFiMjI1Yjc3ZCAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9k ZXMvc2gtc2NyaXB0LmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL3NoLXNjcmlwdC5lbApAQCAtMTQ4 LDYgKzE0OCw3IEBACiAgIChyZXF1aXJlICdsZXQtYWxpc3QpCiAgIChyZXF1aXJlICdzdWJyLXgp KQogKHJlcXVpcmUgJ2V4ZWN1dGFibGUpCisocmVxdWlyZSAndHJlZXNpdCkKIAogKGF1dG9sb2Fk ICdjb21pbnQtY29tcGxldGlvbi1hdC1wb2ludCAiY29taW50IikKIChhdXRvbG9hZCAnY29taW50 LWZpbGVuYW1lLWNvbXBsZXRpb24gImNvbWludCIpCkBAIC0xNTM0LDEzICsxNTM1LDYgQEAgc2gt bW9kZQogICA7OyB3ZSBjYW4ndCBsb29rIGlmIHByZXZpb3VzIGxpbmUgZW5kZWQgd2l0aCBgXCcK ICAgKHNldHEtbG9jYWwgY29taW50LXByb21wdC1yZWdleHAgIl5bIFx0XSoiKQogICAoc2V0cS1s b2NhbCBpbWVudS1jYXNlLWZvbGQtc2VhcmNoIG5pbCkKLSAgKHNldHEgZm9udC1sb2NrLWRlZmF1 bHRzCi0JYCgoc2gtZm9udC1sb2NrLWtleXdvcmRzCi0JICAgc2gtZm9udC1sb2NrLWtleXdvcmRz LTEgc2gtZm9udC1sb2NrLWtleXdvcmRzLTIpCi0JICBuaWwgbmlsCi0JICAoKD8vIC4gInciKSAo P34gLiAidyIpICg/LiAuICJ3IikgKD8tIC4gInciKSAoP18gLiAidyIpKSBuaWwKLQkgIChmb250 LWxvY2stc3ludGFjdGljLWZhY2UtZnVuY3Rpb24KLQkgICAuICwjJ3NoLWZvbnQtbG9jay1zeW50 YWN0aWMtZmFjZS1mdW5jdGlvbikpKQogICAoc2V0cS1sb2NhbCBzeW50YXgtcHJvcGVydGl6ZS1m dW5jdGlvbiAjJ3NoLXN5bnRheC1wcm9wZXJ0aXplLWZ1bmN0aW9uKQogICAoYWRkLWhvb2sgJ3N5 bnRheC1wcm9wZXJ0aXplLWV4dGVuZC1yZWdpb24tZnVuY3Rpb25zCiAgICAgICAgICAgICAjJ3N5 bnRheC1wcm9wZXJ0aXplLW11bHRpbGluZSAnYXBwZW5kICdsb2NhbCkKQEAgLTE1ODcsNyArMTU4 MSwyNiBAQCBzaC1tb2RlCiAgICBuaWwgbmlsKQogICAoYWRkLWhvb2sgJ2ZseW1ha2UtZGlhZ25v c3RpYy1mdW5jdGlvbnMgIydzaC1zaGVsbGNoZWNrLWZseW1ha2UgbmlsIHQpCiAgIChhZGQtaG9v ayAnaGFjay1sb2NhbC12YXJpYWJsZXMtaG9vawotICAgICMnc2gtYWZ0ZXItaGFjay1sb2NhbC12 YXJpYWJsZXMgbmlsIHQpKQorICAgICMnc2gtYWZ0ZXItaGFjay1sb2NhbC12YXJpYWJsZXMgbmls IHQpCisKKyAgKGNvbmQKKyAgIDs7IFRyZWUtc2l0dGVyCisgICAoKHRyZWVzaXQtcmVhZHktcCAn c2gtbW9kZSBzaC1zaGVsbCkKKyAgICAoc2V0cS1sb2NhbCBmb250LWxvY2sta2V5d29yZHMtb25s eSB0KQorICAgIChzZXRxLWxvY2FsIHRyZWVzaXQtZm9udC1sb2NrLWZlYXR1cmUtbGlzdAorICAg ICAgICAgICAgICAgICcoKGJhc2ljKSAobW9kZXJhdGUpIChlbGFib3JhdGUpKSkKKyAgICAoc2V0 cS1sb2NhbCB0cmVlc2l0LWZvbnQtbG9jay1zZXR0aW5ncworICAgICAgICAgICAgICAgIHNoLW1v ZGUtLXRyZWVzaXQtc2V0dGluZ3MpCisgICAgKHRyZWVzaXQtbWFqb3ItbW9kZS1zZXR1cCkpCisg ICA7OyBFbGlzcC4KKyAgICh0CisgICAgKHNldHEgZm9udC1sb2NrLWRlZmF1bHRzCisgICAgICAg ICAgYCgoc2gtZm9udC1sb2NrLWtleXdvcmRzCisgICAgICAgICAgICAgc2gtZm9udC1sb2NrLWtl eXdvcmRzLTEgc2gtZm9udC1sb2NrLWtleXdvcmRzLTIpCisgICAgICAgICAgICBuaWwgbmlsCisg ICAgICAgICAgICAoKD8vIC4gInciKSAoP34gLiAidyIpICg/LiAuICJ3IikgKD8tIC4gInciKSAo P18gLiAidyIpKSBuaWwKKyAgICAgICAgICAgIChmb250LWxvY2stc3ludGFjdGljLWZhY2UtZnVu Y3Rpb24KKyAgICAgICAgICAgICAuICwjJ3NoLWZvbnQtbG9jay1zeW50YWN0aWMtZmFjZS1mdW5j dGlvbikpKSkpKQogCiA7OzsjIyNhdXRvbG9hZAogKGRlZmFsaWFzICdzaGVsbC1zY3JpcHQtbW9k ZSAnc2gtbW9kZSkKQEAgLTMxOTEsNiArMzIwNCwxMDMgQEAgc2gtc2hlbGxjaGVjay1mbHltYWtl CiAgICAgICAocHJvY2Vzcy1zZW5kLXJlZ2lvbiBzaC0tc2hlbGxjaGVjay1wcm9jZXNzIChwb2lu dC1taW4pIChwb2ludC1tYXgpKQogICAgICAgKHByb2Nlc3Mtc2VuZC1lb2Ygc2gtLXNoZWxsY2hl Y2stcHJvY2VzcykpKSkKIAotKHByb3ZpZGUgJ3NoLXNjcmlwdCkKLQotOzs7IHNoLXNjcmlwdC5l bCBlbmRzIGhlcmUKKzs7OyBUcmVlLXNpdHRlciBmb250LWxvY2sKKworKGRlZnZhciBzaC1tb2Rl LS10cmVlc2l0LW9wZXJhdG9ycworICAnKCJ8IiAifCYiICJ8fCIgIiYmIiAiPiIgIj4+IiAiPCIg Ijw8IiAiPDwtIiAiPDw8IiAiPT0iICIhPSIgIjsiCisgICAgIjs7IiAiOyYiICI7OyYiKQorICAi TGlzdCBvZiBgc2gtbW9kZScgb3BlcmF0b3IgdG8gZm9udGlmeSIpCisKKyhkZWZ2YXIgc2gtbW9k ZS0tdHJlZXNpdC1rZXl3b3JkcworICAnKCJjYXNlIiAiZG8iICJkb25lIiAiZWxpZiIgImVsc2Ui ICJlc2FjIiAiZXhwb3J0IiAiZmkiICJmb3IiCisgICAgImZ1bmN0aW9uIiAiaWYiICJpbiIgInVu c2V0IiAid2hpbGUiICJ0aGVuIikKKyAgIk1pbmltYWwgbGlzdCBvZiBrZXl3b3JkcyB0aGF0IGJl bG9uZyB0byB0cmVlLXNpdHRlci1iYXNoJ3MgZ3JhbW1hci4KKworU29tZSByZXNlcnZlZCB3b3Jk cyBhcmUgbm90IHJlY29nbml6ZSB0byBrZWVwIHRoZSBncmFtbWFyCitzaW1wbGVyLiBUaG9zZSBh cmUgaWRlbnRpZmllZCB3aXRoIHJlZ2V4LWJhc2VkIGZpbHRlcmVkIHF1ZXJpZXMuCisKK1NlZSBg c2gtbW9kZS0tdHJlZXNpdC1vdGhlci1rZXl3b3JkcycgYW5kCitgc2gtbW9kZS0tdHJlZXNpdC1z ZXR0aW5ncycpLiIpCisKKyhkZWZ1biBzaC1tb2RlLS10cmVlc2l0LW90aGVyLWtleXdvcmRzICgp CisgICJSZXR1cm5zIGEgbGlzdCBgb3RoZXJzJyBvZiBrZXkvcmVzZXJ2ZWQgd29yZHMgdG8gYmUg Zm9udGlmaWVkIHdpdGgKK3JlZ2V4LWJhc2VkIHF1ZXJpZXMgYXMgdGhleSBhcmUgbm90IHBhcnQg b2YgdHJlZS1zaXR0ZXItYmFzaCdzCitncmFtbWFyLgorCitTZWUgYHNoLW1vZGUtLXRyZWVzaXQt b3RoZXIta2V5d29yZHMnIGFuZAorYHNoLW1vZGUtLXRyZWVzaXQtc2V0dGluZ3MnKS4iCisgIChs ZXQgKChtaW5pbWFsIHNoLW1vZGUtLXRyZWVzaXQta2V5d29yZHMpCisgICAgICAgIChhbGwgKGFw cGVuZCAoc2gtZmVhdHVyZSBzaC1sZWFkaW5nLWtleXdvcmRzKQorICAgICAgICAgICAgICAgICAg ICAgKHNoLWZlYXR1cmUgc2gtb3RoZXIta2V5d29yZHMpKSkKKyAgICAgICAgKG90aGVycykpCisg ICAgKGRvbGlzdCAoa2V5d29yZCBhbGwgb3RoZXJzKQorICAgICAgKGlmIChub3QgKG1lbWJlciBr ZXl3b3JkIG1pbmltYWwpKQorICAgICAgICAgIChzZXRxIG90aGVycyAoY29ucyBrZXl3b3JkIG90 aGVycykpKSkpKQorCisoZGVmdmFyIHNoLW1vZGUtLXRyZWVzaXQtc2V0dGluZ3MKKyAgKHRyZWVz aXQtZm9udC1sb2NrLXJ1bGVzCisgICA6bGFuZ3VhZ2Ugc2gtc2hlbGwKKyAgIDpmZWF0dXJlICdi YXNpYworICAgOm92ZXJyaWRlIHQKKyAgICcoOzsgZnVuY3Rpb24KKyAgICAgKGZ1bmN0aW9uX2Rl ZmluaXRpb24gbmFtZTogKHdvcmQpIEBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQorICAg ICA7OyBjb21tZW50cworICAgICAoY29tbWVudCkgQGZvbnQtbG9jay1jb21tZW50LWZhY2UKKyAg ICAgOzsgc3RyaW5ncyBhbmQgaGVyZWRvYworICAgICBbIChzdHJpbmcpIChyYXdfc3RyaW5nKSBd IEBmb250LWxvY2stc3RyaW5nLWZhY2UKKyAgICAgOzsgaGVyZWRvY3MKKyAgICAgWyAoaGVyZWRv Y19zdGFydCkgKGhlcmVkb2NfYm9keSkgXSBAc2gtaGVyZWRvYworICAgICA7OyB2YXJpYWJsZXMK KyAgICAgKHZhcmlhYmxlX25hbWUpIEBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKQorICAg Omxhbmd1YWdlIHNoLXNoZWxsCisgICA6ZmVhdHVyZSAnbW9kZXJhdGUKKyAgIDpvdmVycmlkZSB0 CisgICBgKDs7IGtleXdvcmRzCisgICAgIFsgLEBzaC1tb2RlLS10cmVlc2l0LWtleXdvcmRzIF0g QGZvbnQtbG9jay1rZXl3b3JkLWZhY2UKKyAgICAgOzsgcmVzZXJ2ZWQgd29yZHMKKyAgICAgKGNv bW1hbmRfbmFtZQorICAgICAgKCh3b3JkKSBAZm9udC1sb2NrLWtleXdvcmQtZmFjZQorICAgICAg ICg6bWF0Y2gKKyAgICAgICAgLChyeC10by1zdHJpbmcKKyAgICAgICAgICAgIGAoc2VxIGJvbAor ICAgICAgICAgICAgICAgICAgKG9yICxAKHNoLW1vZGUtLXRyZWVzaXQtb3RoZXIta2V5d29yZHMp KQorICAgICAgICAgICAgICAgICAgZW9sKSkKKyAgICAgICAgQGZvbnQtbG9jay1rZXl3b3JkLWZh Y2UpKSkKKyAgICAgOzsgZnVuY3Rpb24vbm9uLWJ1aWx0aW4gY29tbWFuZCBjYWxscworICAgICAo Y29tbWFuZF9uYW1lICh3b3JkKSBAZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAgICAg OzsgYnVpbHRpbiBjb21tYW5kcworICAgICAoY29tbWFuZF9uYW1lCisgICAgICAoKHdvcmQpIEBm b250LWxvY2stYnVpbHRpbi1mYWNlCisgICAgICAgKDptYXRjaCAsKGxldCAoKGJ1aWx0aW5zCisg ICAgICAgICAgICAgICAgICAgICAgIChzaC1mZWF0dXJlIHNoLWJ1aWx0aW5zKSkpCisgICAgICAg ICAgICAgICAgICAocngtdG8tc3RyaW5nCisgICAgICAgICAgICAgICAgICAgYChzZXEgYm9sCisg ICAgICAgICAgICAgICAgICAgICAgICAgKG9yICxAYnVpbHRpbnMpCisgICAgICAgICAgICAgICAg ICAgICAgICAgZW9sKSkpCisgICAgICAgICAgICAgICBAZm9udC1sb2NrLWJ1aWx0aW4tZmFjZSkp KQorICAgICA7OyBkZWNsYXJhdGlvbiBjb21tYW5kcworICAgICAoZGVjbGFyYXRpb25fY29tbWFu ZCkgQGZvbnQtbG9jay1idWlsdGluLWZhY2UKKyAgICAgOzsgdmFyaWFibGVzCisgICAgICh2YXJp YWJsZV9uYW1lKSBAZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkKKyAgIDpsYW5ndWFnZSBz aC1zaGVsbAorICAgOmZlYXR1cmUgJ2VsYWJvcmF0ZQorICAgOm92ZXJyaWRlIHQKKyAgIGAoOzsg ZXZlcnl0aGluZyBpbnNpZGUgY29tbWFuZCBzdWJzdGl0dXRpb24KKyAgICAgKGNvbW1hbmRfc3Vi c3RpdHV0aW9uIF8gXyBAc2gtcXVvdGVkLWV4ZWMgXykKKyAgICAgOzsgY29uc3RhbnRzCisgICAg IChjYXNlX2l0ZW0gdmFsdWU6ICh3b3JkKSBAZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpCisgICAg IChmaWxlX2Rlc2NyaXB0b3IpIEBmb250LWxvY2stY29uc3RhbnQtZmFjZQorICAgICA7OyBvcGVy YXRvcnMKKyAgICAgWyAsQHNoLW1vZGUtLXRyZWVzaXQtb3BlcmF0b3JzIF0gQGZvbnQtbG9jay1i dWlsdGluLWZhY2UKKyAgICAgOzsgc3BlY2lhbCB2YXJpYWJsZXMKKyAgICAgKCh2YXJpYWJsZV9u YW1lKSBAZm9udC1sb2NrLWJ1aWx0aW4tZmFjZQorICAgICAgKDptYXRjaCAsKGxldCAoKGJ1aWx0 aW4tdmFycyAoc2gtZmVhdHVyZSBzaC12YXJpYWJsZXMpKSkKKyAgICAgICAgICAgICAgICAgKHJ4 LXRvLXN0cmluZworICAgICAgICAgICAgICAgICAgYChzZXEgYm9sCisgICAgICAgICAgICAgICAg ICAgICAgICAob3IgLEBidWlsdGluLXZhcnMpCisgICAgICAgICAgICAgICAgICAgICAgICBlb2wp KSkKKyAgICAgICAgICAgICAgQGZvbnQtbG9jay1idWlsdGluLWZhY2UpKSkpCisgICJUcmVlLXNp dHRlciBmb250LWxvY2sgc2V0dGluZ3MgZm9yIGBzaC1tb2RlJy4iKQorCisocHJvdmlkZSAnc2gt bW9kZSkKKzs7OyBzaC1tb2RlLmVsIGVuZHMgaGVyZQotLSAKMi4zMS4xCgo= --0000000000001b71bb05ec19e78b--