From mboxrd@z Thu Jan 1 00:00:00 1970 From: KDr2 Subject: Re: [PATCH] ob-scheme.el: Fix scheme code blocks execution error in batch mode Date: Sat, 12 Apr 2014 16:13:25 +0800 Message-ID: References: <87sipky46c.fsf@gmail.com> <87tx9zk5ln.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11c2b8b277557104f6d407f2 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:46971) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WYt4P-0007Yo-AZ for emacs-orgmode@gnu.org; Sat, 12 Apr 2014 04:13:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WYt4M-0000TE-SY for emacs-orgmode@gnu.org; Sat, 12 Apr 2014 04:13:49 -0400 Received: from mail-oa0-x22e.google.com ([2607:f8b0:4003:c02::22e]:65133) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WYt4M-0000T8-HR for emacs-orgmode@gnu.org; Sat, 12 Apr 2014 04:13:46 -0400 Received: by mail-oa0-f46.google.com with SMTP id i7so7222195oag.19 for ; Sat, 12 Apr 2014 01:13:45 -0700 (PDT) In-Reply-To: <87tx9zk5ln.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Eric Schulte Cc: emacs-orgmode@gnu.org --001a11c2b8b277557104f6d407f2 Content-Type: multipart/alternative; boundary=001a11c2b8b277556c04f6d407f0 --001a11c2b8b277556c04f6d407f0 Content-Type: text/plain; charset=ISO-8859-1 HI, Eric You are right, I remove the usage of advice now, and use the method you (nearly) gave, only 1 little change: I found the code: ---- (defun t1 () (message "abc")) ;;(symbol-function 't1) (let ((hold #'t1)) (defun t1 () (message "def")) (setq t1 hold)) ;;(symbol-function 't1) ---- did recover the t1 function after it executed, so I use this way: ---- (defun t1 () (message "abc")) ;;(symbol-function 't1) (let ((hold (symbol-function 't1))) (defun t1 () (message "def")) (fset 't1 hold)) ;;(symbol-function 't1) ---- And the new patch is attached. BTW: I received a PDF assignment form from FSF, but the developer name and the target program on it were wrong (It's for another person who contributes to GCC, I think), so I reply that mail for a new PDF assignment form, I 'll tell you after these things done. Thanks. On Sat, Apr 12, 2014 at 3:18 AM, Eric Schulte wrote: > Hmmm, > > Not to be overly nitpicky here, but I see two issues. > > 1. You should use unwind-protect, to ensure that (ad-unadvise #'message) > is run even if @body throws an error, and > > 2. This will remove any advise which the user has placed on #'message. > > How about something shaped like the following. > > (defmacro with-weird-message (&rest body) > `(let ((hold #'message) > current-message) > (unwind-protect > (progn > (defun message (&rest args) > (setq current-message (apply #'format args))) > ,@body > current-message) > (setq message hold)))) > > Best, > > P.S. I know this is a lot of process for a small patch, but from this > point forward once you have the FSF assignment you can much more > easily contribute to ob-scheme and org in general > > KDr2 writes: > > > Hi, Eric > > > > I'm sorry for that I used `flet' in the patch, It's a easy way to let > > function `current-message' work in batch mode, so I used it even I saw > that > > emacs says `flet' is obsolete, I'm sorry for that. > > > > And I made a new patch(attachment) using `defadvice' for `message' to > > capture the message in batch mode, after the message being captured, the > > advice function is removed. Is this way OK? > > > > And I also sent a request email to assign@gnu.org, and now waiting the > > reply. > > > > Thanks. > > > > > > On Fri, Apr 11, 2014 at 10:45 AM, Eric Schulte >wrote: > > > >> We can no longer use `flet' in the Org-mode code base, please re-work > >> this patch w/o flet. > >> > >> Also, I don't see your name in the list of contributors, and (I believe) > >> this patch is too large to apply w/o FSF assignment. See the following > >> page on how to contribute to Org-mode. > >> > >> http://orgmode.org/worg/org-contribute.html > >> > >> KDr2 writes: > >> > >> > The bug: > >> > write file ~/scheme-test.org with the content below: > >> > -------8<-------------- > >> > #+BEGIN_SRC scheme :exports results :results output raw > >> > (display "Hello Scheme in OrgMode") > >> > #+END_SRC > >> > -------8<-------------- > >> > > >> > and run: > >> > > >> > emacs --batch --eval='(load "~/.emacs.d/init.el")' ~/scheme-test.org-f > >> > org-html-export-to-html > >> > > >> > you will find the bug: > >> > > >> > `org-babel-scheme-execute-with-geiser' uses `current-message' to get > the > >> > results of scheme code blocks, but `current-message' always returns > nil > >> in > >> > batch mode, and this patch fixes this. > >> > > >> > -- > >> > >> -- > >> Eric Schulte > >> https://cs.unm.edu/~eschulte > >> PGP: 0x614CA05D > >> > > > > > > > > -- > > -- > > > > KDr2, http://kdr2.com > > > > From fe5549f3f48acf9b51aeb3706eb8dd3d76ab18c1 Mon Sep 17 00:00:00 2001 > > From: KDr2 > > Date: Fri, 11 Apr 2014 12:56:24 +0800 > > Subject: [PATCH] lisp/ob-scheme.el: Fix scheme code blocks execution > error in > > batch mode > > > > * lisp/ob-scheme.el (org-babel-scheme-capture-current-message, > org-babel-scheme-execute-with-geiser): Capture scheme code results via > current-message both in interactive mode and noninteractive mode. > > > > `org-babel-scheme-execute-with-geiser' uses `current-message' to get the > results of scheme code blocks, but `current-message' always returns nil in > batch mode, and this patch fixes this. > > > > Modified from a patch proposal by KDr2(killy.draw@gmail.com) > > --- > > lisp/ob-scheme.el | 20 +++++++++++++++++--- > > 1 file changed, 17 insertions(+), 3 deletions(-) > > > > diff --git a/lisp/ob-scheme.el b/lisp/ob-scheme.el > > index b7117e9..6b82c6e 100644 > > --- a/lisp/ob-scheme.el > > +++ b/lisp/ob-scheme.el > > @@ -118,6 +118,19 @@ org-babel-scheme-execute-with-geiser will use a > temporary session." > > (name)))) > > result)) > > > > +(defmacro org-babel-scheme-capture-current-message (&rest body) > > + "Capture current message in both interactive and noninteractive mode" > > + `(if noninteractive > > + (let ((current-message nil)) > > + (defadvice message (after capture-current-message activate) > > + (setq current-message ad-return-value)) > > + ,@body > > + (ad-unadvise #'message) > > + current-message) > > + (progn > > + ,@body > > + (current-message)))) > > + > > (defun org-babel-scheme-execute-with-geiser (code output impl repl) > > "Execute code in specified REPL. If the REPL doesn't exist, create it > > using the given scheme implementation. > > @@ -142,10 +155,11 @@ is true; otherwise returns the last value." > > (current-buffer))))) > > (setq geiser-repl--repl repl-buffer) > > (setq geiser-impl--implementation nil) > > - (geiser-eval-region (point-min) (point-max)) > > + (setq result (org-babel-scheme-capture-current-message > > + (geiser-eval-region (point-min) (point-max)))) > > (setq result > > - (if (equal (substring (current-message) 0 3) "=> ") > > - (replace-regexp-in-string "^=> " "" (current-message)) > > + (if (and (stringp result) (equal (substring result 0 3) "=> > ")) > > + (replace-regexp-in-string "^=> " "" result) > > "\"An error occurred.\"")) > > (when (not repl) > > (save-current-buffer (set-buffer repl-buffer) > > -- > Eric Schulte > https://cs.unm.edu/~eschulte > PGP: 0x614CA05D > -- -- KDr2, http://kdr2.com --001a11c2b8b277556c04f6d407f0 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
HI, Eric

You are right, I remove the us= age of advice now, and use the method you (nearly) gave, only 1 little chan= ge:
I found the code:
----
(defun t1 () = (message "abc"))
;;(symbol-function 't1)

(let ((hold #'= ;t1))
=A0 (defun t1 () (message "def"))
=A0 (= setq t1 hold))
;;(symbol-function 't1)
--= --

did recover the t1 function after it executed, so I use= this way:
----
(defun t1 () (message "abc&qu= ot;))
;;(symbol-function 't1)

(let (= (hold (symbol-function 't1)))
=A0 (defun t1 () (message "def"))
=A0 (fset 't= 1 hold))

;;(symbol-function 't1)
----

And the new patch is attached.

BTW: I received a PDF=A0assignment form from FSF, but the developer name and th= e target program on it were wrong (It's for another person who contribu= tes to GCC, I think), so I reply that mail for a new=A0PDF=A0assignment form, I = 9;ll tell you after these things done.

Tha= nks.


On Sat, Apr 12, 2014 at 3:18 AM, Eric Schulte <schulte.eric@gmail.com= > wrote:
Hmmm,

Not to be overly nitpicky here, but I see two issues.

1. You should use unwind-protect, to ensure that (ad-unadvise #'message= )
=A0 =A0is run even if @body throws an error, and

2. This will remove any advise which the user has placed on #'message.<= br>
How about something shaped like the following.

=A0 =A0 (defmacro with-weird-message (&rest body)
=A0 =A0 =A0 `(let ((hold #'message)
=A0 =A0 =A0 =A0 =A0 =A0 =A0current-message)
=A0 =A0 =A0 =A0 =A0(unwind-protect
=A0 =A0 =A0 =A0 =A0 =A0 =A0(progn
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(defun message (&rest args)
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(setq current-message (apply #'forma= t args)))
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0,@body
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0current-message)
=A0 =A0 =A0 =A0 =A0 =A0(setq message hold))))

Best,

P.S. I know this is a lot of process for a small patch, but from this
=A0 =A0 =A0point forward once you have the FSF assignment you can much more=
=A0 =A0 =A0easily contribute to ob-scheme and org in general

KDr2 <killy.draw@gmail.com&g= t; writes:

> Hi, Eric
>
> I'm sorry for that I used `flet' in the patch, It's a easy= way to let
> function `current-message' work in batch mode, so I used it even I= saw that
> emacs says `flet' is obsolete, I'm sorry for that.
>
> And I made a new patch(attachment) using `defadvice' for `message&= #39; to
> capture the message in batch mode, after the message being captured, t= he
> advice function is removed. Is this way OK?
>
> And I also sent a request email to a= ssign@gnu.org, and now waiting the
> reply.
>
> Thanks.
>
>
> On Fri, Apr 11, 2014 at 10:45 AM, Eric Schulte <schulte.eric@gmail.com>wrote:
>
>> We can no longer use `flet' in the Org-mode code base, please = re-work
>> this patch w/o flet.
>>
>> Also, I don't see your name in the list of contributors, and (= I believe)
>> this patch is too large to apply w/o FSF assignment. =A0See the fo= llowing
>> page on how to contribute to Org-mode.
>>
>> =A0 http://orgmode.org/worg/org-contribute.html
>>
>> KDr2 <killy.draw@gmail.= com> writes:
>>
>> > The bug:
>> > write file ~/scheme-test.org with the content below:
>> > -------8<--------------
>> > #+BEGIN_SRC scheme :exports results :results output raw
>> > =A0 (display "Hello Scheme in OrgMode")
>> > #+END_SRC
>> > -------8<--------------
>> >
>> > and run:
>> >
>> > emacs --batch --eval=3D'(load "~/.emacs.d/init.el&qu= ot;)' ~/scheme-tes= t.org -f
>> > org-html-export-to-html
>> >
>> > you will find the bug:
>> >
>> > `org-babel-scheme-execute-with-geiser' uses `current-mess= age' to get the
>> > results of scheme code blocks, but `current-message' alwa= ys returns nil
>> in
>> > batch mode, and this patch fixes this.
>> >
>> > --
>>
>> --
>> Eric Schulte
>> https:/= /cs.unm.edu/~eschulte
>> PGP: 0x614CA05D
>>
>
>
>
> --
> --
>
> KDr2, http://kdr2.com
>
> From fe5549f3f48acf9b51aeb3706eb8dd3d76ab18c1 Mon Sep 17 0= 0:00:00 2001
> From: KDr2 <
killy.draw@gmai= l.com>
> Date: Fri, 11 Apr 2014 12:56:24 +0800
> Subject: [PATCH] lisp/ob-scheme.el: Fix scheme code blocks execution e= rror in
> =A0batch mode
>
> * lisp/ob-scheme.el (org-babel-scheme-capture-current-message, org-bab= el-scheme-execute-with-geiser): Capture scheme code results via current-mes= sage both in interactive mode and noninteractive mode.
>
> `org-babel-scheme-execute-with-geiser' uses `current-message' = to get the results of scheme code blocks, but `current-message' always = returns nil in batch mode, and this patch fixes this.
>
> Modified from a patch proposal by KDr2(killy.draw@gmail.com)
> ---
> =A0lisp/ob-scheme.el | 20 +++++++++++++++++---
> =A01 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/lisp/ob-scheme.el b/lisp/ob-scheme.el
> index b7117e9..6b82c6e 100644
> --- a/lisp/ob-scheme.el
> +++ b/lisp/ob-scheme.el
> @@ -118,6 +118,19 @@ org-babel-scheme-execute-with-geiser will use a t= emporary session."
> =A0 =A0 =A0 =A0 =A0 =A0 =A0(name))))
> =A0 =A0 =A0result))
>
> +(defmacro org-babel-scheme-capture-current-message (&rest body) > + =A0"Capture current message in both interactive and noninteract= ive mode"
> + =A0`(if noninteractive
> + =A0 =A0 =A0 (let ((current-message nil))
> + =A0 =A0 =A0 =A0 (defadvice message (after capture-current-message ac= tivate)
> + =A0 =A0 =A0 =A0 =A0 (setq current-message ad-return-value))
> + =A0 =A0 =A0 =A0 ,@body
> + =A0 =A0 =A0 =A0 (ad-unadvise #'message)
> + =A0 =A0 =A0 =A0 current-message)
> + =A0 =A0 (progn
> + =A0 =A0 =A0 ,@body
> + =A0 =A0 =A0 (current-message))))
> +
> =A0(defun org-babel-scheme-execute-with-geiser (code output impl repl)=
> =A0 =A0"Execute code in specified REPL. If the REPL doesn't e= xist, create it
> =A0using the given scheme implementation.
> @@ -142,10 +155,11 @@ is true; otherwise returns the last value."=
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(current-buffer= )))))
> =A0 =A0 =A0 (setq geiser-repl--repl repl-buffer)
> =A0 =A0 =A0 (setq geiser-impl--implementation nil)
> - =A0 =A0 (geiser-eval-region (point-min) (point-max))
> + =A0 =A0 (setq result (org-babel-scheme-capture-current-message
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (geiser-eval-region (point-min) = (point-max))))
> =A0 =A0 =A0 (setq result
> - =A0 =A0 =A0 =A0 =A0 (if (equal (substring (current-message) 0 3) &qu= ot;=3D> ")
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 (replace-regexp-in-string "^=3D>= " "" (current-message))
> + =A0 =A0 =A0 =A0 =A0 (if (and (stringp result) (equal (substring resu= lt 0 3) "=3D> "))
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 (replace-regexp-in-string "^=3D>= " "" result)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 "\"An error occurred.\"&quo= t;))
> =A0 =A0 =A0 (when (not repl)
> =A0 =A0 =A0 =A0 (save-current-buffer (set-buffer repl-buffer)

--
Eric Schulte
https://cs.unm.e= du/~eschulte
PGP: 0x614CA05D



--
=
--=A0
--001a11c2b8b277556c04f6d407f0-- --001a11c2b8b277557104f6d407f2 Content-Type: text/x-patch; charset=US-ASCII; name="0001-lisp-ob-scheme.el-Fix-scheme-code-blocks-execution-e.patch" Content-Disposition: attachment; filename="0001-lisp-ob-scheme.el-Fix-scheme-code-blocks-execution-e.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_htwmgmev0 RnJvbSBmMjA5NDllMTgzMTQ5NzdiZmEzYzJlYzFhNTlmYjFlN2IzMjY5Y2JkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLRHIyIDxraWxseS5kcmF3QGdtYWlsLmNvbT4KRGF0ZTogU2F0 LCAxMiBBcHIgMjAxNCAxNTo1OTozNyArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGxpc3Avb2Itc2No ZW1lLmVsOiBGaXggc2NoZW1lIGNvZGUgYmxvY2tzIGV4ZWN1dGlvbiBlcnJvciBpbgogYmF0Y2gg bW9kZQoKKiBsaXNwL29iLXNjaGVtZS5lbCAob3JnLWJhYmVsLXNjaGVtZS1jYXB0dXJlLWN1cnJl bnQtbWVzc2FnZSwgb3JnLWJhYmVsLXNjaGVtZS1leGVjdXRlLXdpdGgtZ2Vpc2VyKTogQ2FwdHVy ZSBzY2hlbWUgY29kZSByZXN1bHRzIHZpYSBjdXJyZW50LW1lc3NhZ2UgYm90aCBpbiBpbnRlcmFj dGl2ZSBtb2RlIGFuZCBub25pbnRlcmFjdGl2ZSBtb2RlLgoKYG9yZy1iYWJlbC1zY2hlbWUtZXhl Y3V0ZS13aXRoLWdlaXNlcicgdXNlcyBgY3VycmVudC1tZXNzYWdlJyB0byBnZXQgdGhlIHJlc3Vs dHMgb2Ygc2NoZW1lIGNvZGUgYmxvY2tzLCBidXQgYGN1cnJlbnQtbWVzc2FnZScgYWx3YXlzIHJl dHVybnMgbmlsIGluIGJhdGNoIG1vZGUsIGFuZCB0aGlzIHBhdGNoIGZpeGVzIHRoaXMuCgpNb2Rp ZmllZCBmcm9tIGEgcGF0Y2ggcHJvcG9zYWwgYnkgS0RyMihraWxseS5kcmF3QGdtYWlsLmNvbSkK LS0tCiBsaXNwL29iLXNjaGVtZS5lbCB8IDIxICsrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxl IGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv bGlzcC9vYi1zY2hlbWUuZWwgYi9saXNwL29iLXNjaGVtZS5lbAppbmRleCBiNzExN2U5Li5jZjIx MzExIDEwMDY0NAotLS0gYS9saXNwL29iLXNjaGVtZS5lbAorKysgYi9saXNwL29iLXNjaGVtZS5l bApAQCAtMTE4LDYgKzExOCwyMCBAQCBvcmctYmFiZWwtc2NoZW1lLWV4ZWN1dGUtd2l0aC1nZWlz ZXIgd2lsbCB1c2UgYSB0ZW1wb3Jhcnkgc2Vzc2lvbi4iCiAJICAgICAgIChuYW1lKSkpKQogICAg IHJlc3VsdCkpCiAKKyhkZWZtYWNybyBvcmctYmFiZWwtc2NoZW1lLWNhcHR1cmUtY3VycmVudC1t ZXNzYWdlICgmcmVzdCBib2R5KQorICAiQ2FwdHVyZSBjdXJyZW50IG1lc3NhZ2UgaW4gYm90aCBp bnRlcmFjdGl2ZSBhbmQgbm9uaW50ZXJhY3RpdmUgbW9kZSIKKyAgYChpZiBub25pbnRlcmFjdGl2 ZQorICAgICAgIChsZXQgKChvcmlnaW5hbC1tZXNzYWdlIChzeW1ib2wtZnVuY3Rpb24gJ21lc3Nh Z2UpKQorICAgICAgICAgICAgIChjdXJyZW50LW1lc3NhZ2UgbmlsKSkKKyAgICAgICAgIChkZWZ1 biBtZXNzYWdlICgmcmVzdCBhcmdzKQorICAgICAgICAgICAoc2V0cSBjdXJyZW50LW1lc3NhZ2Ug KGFwcGx5IG9yaWdpbmFsLW1lc3NhZ2UgYXJncykpKQorICAgICAgICAgKHVud2luZC1wcm90ZWN0 ICxAYm9keSkKKyAgICAgICAgIChmc2V0ICdtZXNzYWdlIG9yaWdpbmFsLW1lc3NhZ2UpCisgICAg ICAgICBjdXJyZW50LW1lc3NhZ2UpCisgICAgIChwcm9nbgorICAgICAgICxAYm9keQorICAgICAg IChjdXJyZW50LW1lc3NhZ2UpKSkpCisKIChkZWZ1biBvcmctYmFiZWwtc2NoZW1lLWV4ZWN1dGUt d2l0aC1nZWlzZXIgKGNvZGUgb3V0cHV0IGltcGwgcmVwbCkKICAgIkV4ZWN1dGUgY29kZSBpbiBz cGVjaWZpZWQgUkVQTC4gSWYgdGhlIFJFUEwgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0CiB1c2lu ZyB0aGUgZ2l2ZW4gc2NoZW1lIGltcGxlbWVudGF0aW9uLgpAQCAtMTQyLDEwICsxNTYsMTEgQEAg aXMgdHJ1ZTsgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGxhc3QgdmFsdWUuIgogCQkJICAgICAoY3Vy cmVudC1idWZmZXIpKSkpKQogCShzZXRxIGdlaXNlci1yZXBsLS1yZXBsIHJlcGwtYnVmZmVyKQog CShzZXRxIGdlaXNlci1pbXBsLS1pbXBsZW1lbnRhdGlvbiBuaWwpCi0JKGdlaXNlci1ldmFsLXJl Z2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkKKwkoc2V0cSByZXN1bHQgKG9yZy1iYWJlbC1z Y2hlbWUtY2FwdHVyZS1jdXJyZW50LW1lc3NhZ2UKKwkJICAgICAgKGdlaXNlci1ldmFsLXJlZ2lv biAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKQogCShzZXRxIHJlc3VsdAotCSAgICAgIChpZiAo ZXF1YWwgKHN1YnN0cmluZyAoY3VycmVudC1tZXNzYWdlKSAwIDMpICI9PiAiKQotCQkgIChyZXBs YWNlLXJlZ2V4cC1pbi1zdHJpbmcgIl49PiAiICIiIChjdXJyZW50LW1lc3NhZ2UpKQorCSAgICAg IChpZiAoYW5kIChzdHJpbmdwIHJlc3VsdCkgKGVxdWFsIChzdWJzdHJpbmcgcmVzdWx0IDAgMykg Ij0+ICIpKQorCQkgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgIl49PiAiICIiIHJlc3VsdCkK IAkJIlwiQW4gZXJyb3Igb2NjdXJyZWQuXCIiKSkKIAkod2hlbiAobm90IHJlcGwpCiAJICAoc2F2 ZS1jdXJyZW50LWJ1ZmZlciAoc2V0LWJ1ZmZlciByZXBsLWJ1ZmZlcikKLS0gCjEuOS4yCgo= --001a11c2b8b277557104f6d407f2--