From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/113564 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Joey McCollum via ntg-context Newsgroups: gmane.comp.tex.context Subject: Re: Checking for a Unicode prefix of a Unicode string Date: Sat, 27 Nov 2021 20:39:49 -0500 Message-ID: References: <47a78903-0e58-7b6a-a6ba-1cf7f83e62de@xs4all.nl> <29046f7f-f861-f1d4-ba22-331a2301e2b6@xs4all.nl> Reply-To: mailing list for ConTeXt users Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3484572586599671012==" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37905"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Joey McCollum , mailing list for ConTeXt users To: Hans Hagen Original-X-From: ntg-context-bounces@ntg.nl Sun Nov 28 02:40:56 2021 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane-mx.org Original-Received: from zapf.boekplan.nl ([5.39.185.232] helo=zapf.ntg.nl) by ciao.gmane.io with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mr9BY-0009c6-HB for gctc-ntg-context-518@m.gmane-mx.org; Sun, 28 Nov 2021 02:40:56 +0100 Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id B3BE22896F7; Sun, 28 Nov 2021 02:40:26 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YhDE7Jiiu0RW; Sun, 28 Nov 2021 02:40:23 +0100 (CET) Original-Received: from zapf.ntg.nl (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 7A8802896FB; Sun, 28 Nov 2021 02:40:23 +0100 (CET) Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id B0BCE2896E4 for ; Sun, 28 Nov 2021 02:40:19 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9I_oTznCYXLC for ; Sun, 28 Nov 2021 02:40:15 +0100 (CET) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.166.175; helo=mail-il1-f175.google.com; envelope-from=jmccollum20140511@gmail.com; receiver= Original-Received: from mail-il1-f175.google.com (mail-il1-f175.google.com [209.85.166.175]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id 7174728966C for ; Sun, 28 Nov 2021 02:40:15 +0100 (CET) Original-Received: by mail-il1-f175.google.com with SMTP id h16so12262619ila.4 for ; Sat, 27 Nov 2021 17:40:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=pRGWIVIGM+7vvQRV/vMy8QDMJebO7q7i4i+R4qD4qjE=; b=i9GB0oSFgJjnQrYK2sfblsWOJTYvMfbnuYHCiTXhSMzervQ9CaZ79wCBNpjNP760zy GB/YORT7NQh0DJ8njp0pp5i/7VwXedsF9s62Xmiz3r8eTRuQNDut504FVoXbYPiPt+Ro M7HHa047IuKsS/buNHf3lSelTF+lOgU6UBcWu/zpMv3djW2sDCKP9WKiaLj87070o9zU r8Q7PJyzmQCNABxC1ComQOIieXfnHVAaw9quyav8e0GJZnDB9ZmzXIuJK455Mmo+A/G4 MBlLa5JjcH4XirLkGoIplY/8WaFuP7XApf46DvJEAsVup9ix74SStRaG9dRdUt6x2oea aGpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=pRGWIVIGM+7vvQRV/vMy8QDMJebO7q7i4i+R4qD4qjE=; b=kFPvMV6fTwgSmpXkrPSx/ycwx8223ycFnUb/GcQSS9h2sY+xIGwesKC/scsCHVVl+s +eoaB3x3cLplVFnNm23BEbUFYDhfvZ2qf7DKyIgQuHKVUYwHh5ZgZudfdTpIy+BmYo1r 6AN9+bjrCoqcBrHvAjwCrkNRucPlbIniY0ak49esPt3MqnlNSaGvm1wZ8jCZgNiR6jEU qLvzhp1T6p4vT46o4yCj+AhRrN2Af7zkqs9s/OOppQGwa/oLatG2TxCa6cOroSvOOggB Z9uBLoUMlgR0qO6dPFASi29Ssb28/lMhYh27cHGU++02WLG6OYrp5TirPANFMIkHzHUR bE9Q== X-Gm-Message-State: AOAM533N0sZYeMAMxPK2/vhsYaHSIG3ZIa7ah0Zb6A8qpkaGCikDFe4T YqXGNQ3lnaMg4tHySWRWx46r9lEG/CL3JiktSO4= X-Google-Smtp-Source: ABdhPJwPLogsXtlj5SMMkm7wMhV1+Loe/19OxaAjP24q8A446Pfs09Fp4rsU9hOgNAFsWPXItfl4U9MKSx4zsA2Ec/o= X-Received: by 2002:a92:ca46:: with SMTP id q6mr39809885ilo.54.1638063613729; Sat, 27 Nov 2021 17:40:13 -0800 (PST) In-Reply-To: <29046f7f-f861-f1d4-ba22-331a2301e2b6@xs4all.nl> X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.26 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ntg-context-bounces@ntg.nl Original-Sender: "ntg-context" Xref: news.gmane.io gmane.comp.tex.context:113564 Archived-At: --===============3484572586599671012== Content-Type: multipart/alternative; boundary="000000000000d0e17805d1cf6714" --000000000000d0e17805d1cf6714 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I was afraid that might be the problem. I've described some of the intended purpose of this code near the end of the "Checking for a macro in a string without expanding it" thread on the mailing list, but I will get into more detail here. I'm working on a ConTeXt implementation of citation style language (CSL) locators, particularly for the SBL citation rendering (although the code could easily be adapted for use in general or with other bibliographic renderings). This would allow for a consistent, language-sensitive syntax that could be used within citations or in any part of a text and could accommodate changes in bibliographic style without requiring the user to reformat all their page number citations. In SBL style, for instance, volume, part, and page numbers are not prefixed by abbreviations like "vol.", "pt." and "p.", but in other styles, they might be. The locator syntax ``` \loc[vol=3D33,pt=3D1,p=3D86] ``` would be defined in the SBL rendering file to output ``` 33.1:86 ``` while in some other style, it might be defined to output ``` vol. 33, pt. 1, p. 86 ``` To accommodate the use of these macros within citations, I've added "loctext" (locator text) and "altloctext" (alternate locator text) arguments to the set of parameters used by the \cite macro, because in some bibliographic categories, different locators can be specified for different parts of a citation (e.g., one for a passage in an ancient text and another for the book reproducing it), and therefore cannot just be specified in the "righttext" parameter. So now we can do something like ``` \cite[lefttext=3D{See},altloctext=3D{1.3},loctext=3D{8:223},righttext=3D{fo= r further details}][clementinehomilies] ``` to get See *The Clementine Homilies* 1.3 (*ANF *8:223) for further details. or ``` \cite[lefttext=3D{See},loctext=3D{\loc[p=3D8]},righttext=3D{; but there are= also contradictory statements, e.g. \loc[p=3D12].}][Doe:Title] ``` to get See Doe, *Title*, 8; but there are also contradictory statements, e.g. 12. The main problem is determining when to include a comma before printing the "loctext" and when not to include one. In the first example above, we don't want a comma between *ANF* and 8:223 (SBL style does not add a comma between a multivolume set abbreviation and a volume number), but in the second example, we do want one between *Title *and 8. Similarly, we want to remove the comma if the first locator in the loctext is a section marker (=C2=A7) or paragraph marker (=C2=B6). This is why I want to check the begi= nning of the \currentloctext macro for the presence of a volume number (a number followed by a colon), a section mark, or a paragraph mark. While storing the locator parameters as btx parameters would allow for another solution to this problem, it would complicate defining the \loc macro in a way that would be suitable outside of citations or for multiple uses in the same citation (notice how a second \loc invocation occurs in the righttext of the second example above). Parsing the output of \loc seemed like the simplest solution, but as you've pointed out, it has its own difficulties. I'm inclined to try one of the TeX-based solutions you describe above to avoid complicating other things, but if my description of the intended use gives you any better ideas, please suggest them! Thanks again! Joey On Sat, Nov 27, 2021 at 1:44 PM Hans Hagen wrote: > On 11/27/2021 6:13 PM, Joey McCollum wrote: > > All right, I think I've solved the expansion problem I described before= : > > to ensure that the first input is expanded when it is passed to Lua, I > > have to pass it as [=3D=3D[#1]=3D=3D], not "#1". But the updated MWE be= low still > > does not seem to work, as the \DoIfPrefixElse macro is printing "NOP" > > instead of "YES": > > > > ``` > > > > \starttexdefinition loc [#1] > > > > \doifassignmentelse{#1} { > > > > % if an assignment, then parse and format accordingly > > > > \getparameters[loc][#1] > > > > % Was a section number specified? > > > > \doifdefined{locsec} { > > > > =C2=A7 \locsec > > > > } > > > > } { > > > > % otherwise, just print the input as-is > > > > #1 > > > > } > > > > \stoptexdefinition > > > > > > > \def\DoIfPrefixElse#1#2{\ctxlua{commands.doifelse(string.find([=3D=3D[#2]= =3D=3D],"^"..[=3D=3D[#1]=3D=3D]))}} > > > > > > \def\currentbtxloctext{\loc[sec=3D31]} > > > > > > \starttext > > > > \currentbtxloctext\blank > > > > \DoIfPrefixElse{=C2=A7}{\currentbtxloctext}{YES}{NOP} > > > > \stoptext > > > > ``` > > > > Indeed, if I add a simple \doifelse equality check, it looks like the > > value I expect is not the same as what the macro produces, even though > > they look identical: > > > > ``` > > > > \starttexdefinition loc [#1] > > \doifassignmentelse{#1} { > > % if an assignment, then parse and format accordingly > > \getparameters[loc][#1] > > % Was a section number specified? > > \doifdefined{locsec} { > > =C2=A7 \locsec > > } > > } { > > % otherwise, just print the input as-is > > #1 > > } > > \stoptexdefinition > > > > > \def\DoIfPrefixElse#1#2{\ctxlua{commands.doifelse(string.find([=3D=3D[#2]= =3D=3D],"^"..[=3D=3D[#1]=3D=3D]))}} > > > > \def\currentbtxloctext{\loc[sec=3D31]} > > > > \starttext > > =C2=A7 31\blank%the raw text we expect > > \currentbtxloctext\blank%the text as produced by the macro > > \doifelse{\currentbtxloctext}{=C2=A7 31}{YES}{NOP}\blank% should o= utput > > YES, but doesn't > > \DoIfPrefixElse{=C2=A7}{\currentbtxloctext}{YES}{NOP}\blank% shoul= d > > output YES, but doesn't > > \stoptext > > > > ``` > > > > What am I missing here? > Expansion hell ... and i fear that you draw yourself into more and more > trouble with this approach (which is why you don't find that kind of > hackery in the core unless we're real desperate) so maybe try to explain > what the real problem is that needs to be solved. Parsing tex is seldom > a solution (at least not in context). > > You can add: > > \edef\Whatever{\currentbtxloctext}\meaning\Whatever > \doifelse{\currentbtxloctext}{=C2=A7 31}{YES}{NOP}\blank > > and see what comes back. Now, as always in tex, there's of course a > solution because after all it's a programming language too (and at some > point these solutions start looking so complex that one enters guru state= ) > > \starttexdefinition loc [#1] > \beginlocalcontrol > \doifassignmentelse{#1} { > \getparameters[loc][#1] > \doifdefinedelse{locsec} { > \endlocalcontrol > =C2=A7 \locsec > } { > \endlocalcontrol > } > } { > \endlocalcontrol > #1 > } > \stoptexdefinition > > a curious mix between a fully expanded result, using protected macros > and hiding what tex does but hard to explain > > Hans > > ----------------------------------------------------------------- > Hans Hagen | PRAGMA ADE > Ridderstraat 27 | 8061 GH Hasselt | The Netherlands > tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl > ----------------------------------------------------------------- > --000000000000d0e17805d1cf6714 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
I was afraid that might be the problem. I've described= some of the intended purpose of this code near the end of the "Checki= ng for a macro in a string without expanding it" thread on the mailing= list, but I will get into more detail here. I'm working on a ConTeXt i= mplementation of citation=C2=A0style language (CSL) locators, particularly = for the SBL citation rendering (although the code could easily be adapted f= or use in general or with other bibliographic renderings). This would allow= for a consistent, language-sensitive syntax that could be used within cita= tions or in any part of a text and could accommodate changes in bibliograph= ic style without requiring the user to reformat all their page number citat= ions. In SBL style, for instance, volume, part, and page numbers are not pr= efixed by abbreviations like "vol.", "pt." and "p.= ", but in other styles, they might be. The locator syntax

```<= br>\loc[vol=3D33,pt=3D1,p=3D86]
```

would be defined in th= e SBL rendering file to output

```
33.1:86
```

<= div>while in some other style, it might be defined to output

```
= vol. 33, pt. 1, p. 86
```

To accomm= odate the use of these macros within citations, I've added "loctex= t" (locator text) and "altloctext" (alternate locator text) = arguments to the set of parameters used by the \cite macro, because in some= bibliographic categories, different locators can be specified for differen= t parts of a citation (e.g., one for a passage in an ancient text and anoth= er for the book reproducing it), and therefore cannot just be specified in = the "righttext" parameter. So now we can do something like
```
\cite[lefttext=3D{See},altloctext=3D{1.3},loctext=3D{8:223},rightte= xt=3D{for further details}][clementinehomilies]
```

t= o get

See Doe, <= i>Title, 8; but there are also contradictory statements, e.g. 12.
=

The main problem is determining when to in= clude a comma before printing the "loctext" and when not to inclu= de one. In the first example above, we don't want a comma between AN= F=C2=A0and 8:223 (SBL style does not add a comma between a multivolume = set abbreviation and a volume number), but in the second example, we do wan= t one between Title and 8. Similarly, we want to remove the comma if= the first locator in the loctext is a section marker (=C2=A7) or paragraph= marker (=C2=B6). This is why I want to check the beginning of the \current= loctext=C2=A0macro for the presence of a volume number (a number followed b= y a colon), a section mark, or a paragraph mark.

W= hile storing the locator parameters as btx parameters would allow for anoth= er solution to this problem, it would complicate defining the \loc macro in= a way that would be suitable outside of citations or for multiple uses in = the same citation (notice how a second \loc invocation occurs in the rightt= ext=C2=A0of the second example above). Parsing the output of \loc seemed li= ke the simplest solution, but as you've pointed out, it has its own dif= ficulties. I'm inclined to try one of the TeX-based solutions you descr= ibe above to avoid complicating=C2=A0other things, but if my description of= the intended use gives you any better ideas, please suggest them!

Thanks again!

Joey
On Sat, N= ov 27, 2021 at 1:44 PM Hans Hagen <j.hagen@xs4all.nl> wrote:
On 11/27/2021 6:13 PM, Joey McCollum wro= te:
> All right, I think I've solved the expansion problem I described b= efore:
> to ensure that the first input is expanded when it is passed to Lua, I=
> have to pass it as [=3D=3D[#1]=3D=3D], not "#1". But the upd= ated MWE below still
> does not seem to work, as the \DoIfPrefixElse macro is printing "= NOP"
> instead of "YES":
>
> ```
>
> \starttexdefinition loc [#1]
>
> \doifassignmentelse{#1} {
>
> % if an assignment, then parse and format accordingly
>
> \getparameters[loc][#1]
>
> % Was a section number specified?
>
> \doifdefined{locsec} {
>
> =C2=A7 \locsec
>
> }
>
> } {
>
> % otherwise, just print the input as-is
>
> #1
>
> }
>
> \stoptexdefinition
>
>
> \def\DoIfPrefixElse#1#2{\ctxlua{commands.doifelse(string.find([=3D=3D[= #2]=3D=3D],"^"..[=3D=3D[#1]=3D=3D]))}}
>
>
> \def\currentbtxloctext{\loc[sec=3D31]}
>
>
> \starttext
>
> \currentbtxloctext\blank
>
> \DoIfPrefixElse{=C2=A7}{\currentbtxloctext}{YES}{NOP}
>
> \stoptext
>
> ```
>
> Indeed, if I add a simple \doifelse=C2=A0equality check, it looks like= the
> value I expect is not the same as what the macro produces, even though=
> they look identical:
>
> ```
>
> \starttexdefinition loc [#1]
>=C2=A0 =C2=A0 =C2=A0 \doifassignmentelse{#1} {
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 % if an assignment, then parse and f= ormat accordingly
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 \getparameters[loc][#1]
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 % Was a section number specified? >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 \doifdefined{locsec} {
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A7 \locsec
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
>=C2=A0 =C2=A0 =C2=A0 } {
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 % otherwise, just print the input as= -is
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 #1
>=C2=A0 =C2=A0 =C2=A0 }
> \stoptexdefinition
>
> \def\DoIfPrefixElse#1#2{\ctxlua{commands.doifelse(string.find([=3D=3D[= #2]=3D=3D],"^"..[=3D=3D[#1]=3D=3D]))}}
>
> \def\currentbtxloctext{\loc[sec=3D31]}
>
> \starttext
>=C2=A0 =C2=A0 =C2=A0 =C2=A7 31\blank%the raw text we expect
>=C2=A0 =C2=A0 =C2=A0 \currentbtxloctext\blank%the text as produced by t= he macro
>=C2=A0 =C2=A0 =C2=A0 \doifelse{\currentbtxloctext}{=C2=A7 31}{YES}{NOP}= \blank% should output
> YES, but doesn't
>=C2=A0 =C2=A0 =C2=A0 \DoIfPrefixElse{=C2=A7}{\currentbtxloctext}{YES}{N= OP}\blank% should
> output YES, but doesn't
> \stoptext
>
> ```
>
> What am I missing here?
Expansion hell ... and i fear that you draw yourself into more and more trouble with this approach (which is why you don't find that kind of hackery in the core unless we're real desperate) so maybe try to explai= n
what the real problem is that needs to be solved. Parsing tex is seldom a solution (at least not in context).

You can add:

=C2=A0 =C2=A0 =C2=A0\edef\Whatever{\currentbtxloctext}\meaning\Whatever
=C2=A0 =C2=A0 =C2=A0\doifelse{\currentbtxloctext}{=C2=A7 31}{YES}{NOP}\blan= k

and see what comes back. Now, as always in tex, there's of course a solution because after all it's a programming language too (and at some=
point these solutions start looking so complex that one enters guru state)<= br>
\starttexdefinition loc [#1]
=C2=A0 =C2=A0 =C2=A0\beginlocalcontrol
=C2=A0 =C2=A0 =C2=A0\doifassignmentelse{#1} {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\getparameters[loc][#1]
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\doifdefinedelse{locsec} {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\endlocalcontrol
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A7 \locsec
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\endlocalcontrol
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}
=C2=A0 =C2=A0 =C2=A0} {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\endlocalcontrol
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0#1
=C2=A0 =C2=A0 =C2=A0}
\stoptexdefinition

a curious mix between a fully expanded result, using protected macros
and hiding what tex does but hard to explain

Hans

-----------------------------------------------------------------
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0Hans Hagen | PRAGMA ADE
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Ridderstraat 27 | 80= 61 GH Hasselt | The Netherlands
=C2=A0 =C2=A0 =C2=A0 =C2=A0 tel: 038 477 53 69 | www.pragma-ade.nl | www.= pragma-pod.nl
-----------------------------------------------------------------
--000000000000d0e17805d1cf6714-- --===============3484572586599671012== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSWYgeW91ciBxdWVzdGlvbiBpcyBvZiBpbnRlcmVz dCB0byBvdGhlcnMgYXMgd2VsbCwgcGxlYXNlIGFkZCBhbiBlbnRyeSB0byB0aGUgV2lraSEKCm1h aWxsaXN0IDogbnRnLWNvbnRleHRAbnRnLm5sIC8gaHR0cDovL3d3dy5udGcubmwvbWFpbG1hbi9s aXN0aW5mby9udGctY29udGV4dAp3ZWJwYWdlICA6IGh0dHA6Ly93d3cucHJhZ21hLWFkZS5ubCAv IGh0dHA6Ly9jb250ZXh0LmFhbmhldC5uZXQKYXJjaGl2ZSAgOiBodHRwczovL2JpdGJ1Y2tldC5v cmcvcGhnL2NvbnRleHQtbWlycm9yL2NvbW1pdHMvCndpa2kgICAgIDogaHR0cDovL2NvbnRleHRn YXJkZW4ubmV0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCg== --===============3484572586599671012==--