From mboxrd@z Thu Jan 1 00:00:00 1970
Path: news.gmane.org!.POSTED!not-for-mail
From: Philipp Stephani
Newsgroups: gmane.emacs.devel
Subject: Re: [PATCH] Allow inserting non-BMP characters
Date: Fri, 29 Dec 2017 20:14:41 +0000
Message-ID:
References:
<20171225210115.13789-1-phst@google.com> <83d132hz9e.fsf@gnu.org>
<834lodii55.fsf@gnu.org>
<83zi65grxv.fsf@gnu.org>
<20171226213642.GB82103@breton.holly.idiocy.org>
<83shbwhm70.fsf@gnu.org>
<20171228113820.GA83324@breton.holly.idiocy.org>
<834loahl4j.fsf@gnu.org>
NNTP-Posting-Host: blaine.gmane.org
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="001a1147dcac087a0505618049fe"
X-Trace: blaine.gmane.org 1514578390 5325 195.159.176.226 (29 Dec 2017 20:13:10 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Fri, 29 Dec 2017 20:13:10 +0000 (UTC)
Cc: phst@google.com, alan@idiocy.org, emacs-devel@gnu.org
To: Eli Zaretskii
Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Dec 29 21:13:06 2017
Return-path:
Envelope-to: ged-emacs-devel@m.gmane.org
Original-Received: from lists.gnu.org ([208.118.235.17])
by blaine.gmane.org with esmtp (Exim 4.84_2)
(envelope-from )
id 1eV11c-0000nW-6L
for ged-emacs-devel@m.gmane.org; Fri, 29 Dec 2017 21:13:04 +0100
Original-Received: from localhost ([::1]:53290 helo=lists.gnu.org)
by lists.gnu.org with esmtp (Exim 4.71)
(envelope-from )
id 1eV13Z-0003xo-Gw
for ged-emacs-devel@m.gmane.org; Fri, 29 Dec 2017 15:15:05 -0500
Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:50502)
by lists.gnu.org with esmtp (Exim 4.71)
(envelope-from ) id 1eV13R-0003xB-Bk
for emacs-devel@gnu.org; Fri, 29 Dec 2017 15:14:58 -0500
Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from ) id 1eV13P-000274-KX
for emacs-devel@gnu.org; Fri, 29 Dec 2017 15:14:57 -0500
Original-Received: from mail-qk0-x22f.google.com ([2607:f8b0:400d:c09::22f]:42229)
by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16)
(Exim 4.71) (envelope-from )
id 1eV13N-00023T-CW; Fri, 29 Dec 2017 15:14:53 -0500
Original-Received: by mail-qk0-x22f.google.com with SMTP id d202so29387799qkc.9;
Fri, 29 Dec 2017 12:14:53 -0800 (PST)
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=22Gyl3/D/mITRfm/d4OHJDOXlTvQyZFsaXHrkc3rzeA=;
b=dm/O7gJ347x8ZyxXUVcQwrjXBJmse46OCIfpLejHPLkSun5bflvEI7TBYRhwW0XE25
p9+B0e0Dlw8i/AvTcyKOTJhOPIW3AYWAvyPeFqEJPyVNnoOyJemBovE3mATsjh/CwK8c
rYPIDg4ehjjBL8WiBaLrBJ10PdhPTLC9yyZLNvDzGZZ5m+vE0FEf+98oC21JOuuy7GaA
8LqHx5l6WcqgbHuy8qQNWN0T47aaNrTdQQ52Cwl3/xdXWKCM+oSOqnMjCUuqfcI5cE9Y
7xZDN7RwrlXHmL35z4pUR7Fd5jHrf2RoSXz3WuvnW/HjMMg+s10xZ8DBBGfHBnAQI5X9
g+mA==
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=22Gyl3/D/mITRfm/d4OHJDOXlTvQyZFsaXHrkc3rzeA=;
b=rerWclfFub1Ur2PnELDhMfgMOZ0sadrg7150xTySj5O5T03hdT89WHVqXzSuMRZt1y
6eEZeXFa0SOBkRB/3Q1CuRlIdnn1jM9hGJoxwPeJDkq4yQOcMECVK0LdcpNi2HjwwOtm
uUE4OrcEe421jcQtmr5tvpgcL9WitpsD3wXGTYWUG+16S2CZC2EpNY6gKuFqYNjCkOxJ
OU2dDZhP3GqKrcrPzBrxjDujg/UZRAO4I9dbMvj2pW7CAYiFhVtEhd37E9028aNnuC4w
WY/76+KDU1q+PbOf4bIMYaAxaJkxlIM2tod7P80F6JppOUxbJZSO1r1A7sVVOiLrI/QC
posQ==
X-Gm-Message-State: AKGB3mIxfgUIgCltNMRdtdCLX3Okv5ybNCBF6L/oPsTN9rmOxGkEKc7T
OvewoZ95PVGSzbdtXbwOgM7s7ETcmuObp340WGagKg==
X-Google-Smtp-Source: ACJfBotf+2Wl5WAYnJTOddnUF/mdrgfMRYeNumueoNVymv7SYPxL3KYq50K10R+XfzzUpMrq65NamiG/OeQEw6OaYi4=
X-Received: by 10.55.31.131 with SMTP id n3mr44066722qkh.274.1514578492545;
Fri, 29 Dec 2017 12:14:52 -0800 (PST)
In-Reply-To: <834loahl4j.fsf@gnu.org>
X-detected-operating-system: by eggs.gnu.org: Genre and OS details not
recognized.
X-Received-From: 2607:f8b0:400d:c09::22f
X-BeenThere: emacs-devel@gnu.org
X-Mailman-Version: 2.1.21
Precedence: list
List-Id: "Emacs development discussions."
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org
Original-Sender: "Emacs-devel"
Xref: news.gmane.org gmane.emacs.devel:221457
Archived-At:
--001a1147dcac087a0505618049fe
Content-Type: multipart/alternative; boundary="001a1147dcac087a0205618049fc"
--001a1147dcac087a0205618049fc
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Eli Zaretskii schrieb am Do., 28. Dez. 2017 um 17:29 Uhr:
> > From: Philipp Stephani
> > Date: Thu, 28 Dec 2017 12:31:39 +0000
> > Cc: phst@google.com, Eli Zaretskii , emacs-devel@gnu.org
> >
> > Alan Third schrieb am Do., 28. Dez. 2017 um 12:38 Uhr=
:
> >
> > On Wed, Dec 27, 2017 at 05:41:23AM +0200, Eli Zaretskii wrote:
> > > What about the possibility that SAFE_NALLOCA could signal an error a=
nd
> > > longjmp to top level? Does this code always run in the main thread,
> > > and if so, can it allow such longjmp's?
> >
> > I think it does always run in the main thread, however since it runs
> > within the NSApplication run loop I=E2=80=99ve no idea what would happ=
en if we
> > did a longjmp.
> >
> > We should probably avoid longjmps here. This message is invoked by the
> window manager, which most likely
> > can't deal with longjmps.
>
> Then maybe process the input in chunks using a fixed-size buffer?
>
Maybe, but for now I've reverted to just call characterAtIndex repeatedly.
I guess in 99% of cases we insert a single code unit anyway, and if we plan
to make the code more complex we should benchmark it before.
--001a1147dcac087a0205618049fc
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Eli Za=
retskii <
eliz@gnu.org> schrieb am=
Do., 28. Dez. 2017 um 17:29=C2=A0Uhr:
> From: Philipp Stephani <p.stephani2@gmail.com>
> Date: Thu, 28 Dec 2017 12:31:39 +0000
> Cc: phst@google.c=
om, Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
>
> Alan Third <al=
an@idiocy.org> schrieb am Do., 28. Dez. 2017 um 12:38 Uhr:
>
>=C2=A0 On Wed, Dec 27, 2017 at 05:41:23AM +0200, Eli Zaretskii wrote:
>=C2=A0 > What about the possibility that SAFE_NALLOCA could signal a=
n error and
>=C2=A0 > longjmp to top level?=C2=A0 Does this code always run in th=
e main thread,
>=C2=A0 > and if so, can it allow such longjmp's?
>
>=C2=A0 I think it does always run in the main thread, however since it =
runs
>=C2=A0 within the NSApplication run loop I=E2=80=99ve no idea what woul=
d happen if we
>=C2=A0 did a longjmp.
>
> We should probably avoid longjmps here. This message is invoked by the=
window manager, which most likely
> can't deal with longjmps.
Then maybe process the input in chunks using a fixed-size buffer?
Maybe, but for now I've reverted to just cal=
l characterAtIndex repeatedly. I guess in 99% of cases we insert a single c=
ode unit anyway, and if we plan to make the code more complex we should ben=
chmark it before.=C2=A0
--001a1147dcac087a0205618049fc--
--001a1147dcac087a0505618049fe
Content-Type: text/plain; charset="US-ASCII";
name="0001-Allow-inserting-non-BMP-characters.txt"
Content-Disposition: attachment;
filename="0001-Allow-inserting-non-BMP-characters.txt"
Content-Transfer-Encoding: base64
Content-ID: <160a3e97afad3a38a881>
X-Attachment-Id: 160a3e97afad3a38a881
RnJvbSAzODNlNmZlN2M1MGMxZTNhOTY3MjAyODRmYTVmYzJjMDA2MTA5NTlmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+CkRh
dGU6IE1vbiwgMjUgRGVjIDIwMTcgMjI6MDA6MDAgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBbGxv
dyBpbnNlcnRpbmcgbm9uLUJNUCBjaGFyYWN0ZXJzCgoqIHNyYy9jb2RpbmcuaCAoY2hhcl9sb3df
c3Vycm9nYXRlX3AsIGNoYXJfaGlnaF9zdXJyb2dhdGVfcCkKKHN1cnJvZ2F0ZXNfdG9fY29kZXBv
aW50KTogTmV3IGZ1bmN0aW9ucy4KCiogc3JjL2NvZGluZy5jIChkZWNvZGVfY29kaW5nX3V0Zl8x
Nik6IFVzZSBuZXcgaW5saW5lIGZ1bmN0aW9uczsKcmVtb3ZlIG9sZCBtYWNyb3MuCgoqIHNyYy9u
c3Rlcm0ubSAoaW5zZXJ0VGV4dDopOiBQcm9wZXJseSBoYW5kbGUgc3Vycm9nYXRlIHBhaXJzLgot
LS0KIHNyYy9jb2RpbmcuYyB8IDEzICsrKy0tLS0tLS0tLS0KIHNyYy9jb2RpbmcuaCB8IDI2ICsr
KysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvbnN0ZXJtLm0gfCAyNSArKysrKysrKysrKysr
KysrKysrLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDE2IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9jb2RpbmcuYyBiL3NyYy9jb2RpbmcuYwppbmRleCAx
NzA1ODM4ZmZhLi45OTAzZDg3YjkyIDEwMDY0NAotLS0gYS9zcmMvY29kaW5nLmMKKysrIGIvc3Jj
L2NvZGluZy5jCkBAIC0xNTE1LDEzICsxNTE1LDYgQEAgZW5jb2RlX2NvZGluZ191dGZfOCAoc3Ry
dWN0IGNvZGluZ19zeXN0ZW0gKmNvZGluZykKIC8qIFNlZSB0aGUgYWJvdmUgIkdFTkVSQUwgTk9U
RVMgb24gYGRldGVjdF9jb2RpbmdfWFhYICgpJyBmdW5jdGlvbnMiLgogICAgUmV0dXJuIHRydWUg
aWYgYSB0ZXh0IGlzIGVuY29kZWQgaW4gb25lIG9mIFVURi0xNiBiYXNlZCBjb2Rpbmcgc3lzdGVt
cy4gICovCiAKLSNkZWZpbmUgVVRGXzE2X0hJR0hfU1VSUk9HQVRFX1AodmFsKSBcCi0gICgoKHZh
bCkgJiAweEZDMDApID09IDB4RDgwMCkKLQotI2RlZmluZSBVVEZfMTZfTE9XX1NVUlJPR0FURV9Q
KHZhbCkgXAotICAoKCh2YWwpICYgMHhGQzAwKSA9PSAweERDMDApCi0KLQogc3RhdGljIGJvb2wK
IGRldGVjdF9jb2RpbmdfdXRmXzE2IChzdHJ1Y3QgY29kaW5nX3N5c3RlbSAqY29kaW5nLAogCQkg
ICAgICBzdHJ1Y3QgY29kaW5nX2RldGVjdGlvbl9pbmZvICpkZXRlY3RfaW5mbykKQEAgLTE2ODYs
NyArMTY3OSw3IEBAIGRlY29kZV9jb2RpbmdfdXRmXzE2IChzdHJ1Y3QgY29kaW5nX3N5c3RlbSAq
Y29kaW5nKQogCiAgICAgICBpZiAoc3Vycm9nYXRlKQogCXsKLQkgIGlmICghIFVURl8xNl9MT1df
U1VSUk9HQVRFX1AgKGMpKQorCSAgaWYgKCEgY2hhcl9sb3dfc3Vycm9nYXRlX3AgKGMpKQogCSAg
ICB7CiAJICAgICAgaWYgKGVuZGlhbiA9PSB1dGZfMTZfYmlnX2VuZGlhbikKIAkJYzEgPSBzdXJy
b2dhdGUgPj4gOCwgYzIgPSBzdXJyb2dhdGUgJiAweEZGOwpAQCAtMTY5NCw3ICsxNjg3LDcgQEAg
ZGVjb2RlX2NvZGluZ191dGZfMTYgKHN0cnVjdCBjb2Rpbmdfc3lzdGVtICpjb2RpbmcpCiAJCWMx
ID0gc3Vycm9nYXRlICYgMHhGRiwgYzIgPSBzdXJyb2dhdGUgPj4gODsKIAkgICAgICAqY2hhcmJ1
ZisrID0gYzE7CiAJICAgICAgKmNoYXJidWYrKyA9IGMyOwotCSAgICAgIGlmIChVVEZfMTZfSElH
SF9TVVJST0dBVEVfUCAoYykpCisJICAgICAgaWYgKGNoYXJfaGlnaF9zdXJyb2dhdGVfcCAoYykp
CiAJCUNPRElOR19VVEZfMTZfU1VSUk9HQVRFIChjb2RpbmcpID0gc3Vycm9nYXRlID0gYzsKIAkg
ICAgICBlbHNlCiAJCSpjaGFyYnVmKysgPSBjOwpAQCAtMTcwOCw3ICsxNzAxLDcgQEAgZGVjb2Rl
X2NvZGluZ191dGZfMTYgKHN0cnVjdCBjb2Rpbmdfc3lzdGVtICpjb2RpbmcpCiAJfQogICAgICAg
ZWxzZQogCXsKLQkgIGlmIChVVEZfMTZfSElHSF9TVVJST0dBVEVfUCAoYykpCisJICBpZiAoY2hh
cl9oaWdoX3N1cnJvZ2F0ZV9wIChjKSkKIAkgICAgQ09ESU5HX1VURl8xNl9TVVJST0dBVEUgKGNv
ZGluZykgPSBzdXJyb2dhdGUgPSBjOwogCSAgZWxzZQogCSAgICB7CmRpZmYgLS1naXQgYS9zcmMv
Y29kaW5nLmggYi9zcmMvY29kaW5nLmgKaW5kZXggNjZkMTI1YjA3ZS4uYjExMWNlNzBjNiAxMDA2
NDQKLS0tIGEvc3JjL2NvZGluZy5oCisrKyBiL3NyYy9jb2RpbmcuaApAQCAtNjYyLDYgKzY2Miwz
MiBAQCBzdHJ1Y3QgY29kaW5nX3N5c3RlbQogLyogTm90ZSB0aGF0IHRoaXMgZW5jb2RlcyB1dGYt
OCwgbm90IHV0Zi04LWVtYWNzLCBzbyBpdCdzIG5vdCBhIG5vLW9wLiAgKi8KICNkZWZpbmUgRU5D
T0RFX1VURl84KHN0cikgY29kZV9jb252ZXJ0X3N0cmluZ19ub3JlY29yZCAoc3RyLCBRdXRmXzgs
IHRydWUpCiAKKy8qIFJldHVybiB0cnVlIGlmIEMgaXMgYSBsb3cgc3Vycm9nYXRlLiAgKi8KKwor
SU5MSU5FIGJvb2wKK2NoYXJfbG93X3N1cnJvZ2F0ZV9wIChpbnQgYykKK3sKKyAgcmV0dXJuIDB4
REMwMCA8PSBjICYmIGMgPD0gMHhERkZGOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBDIGlzIGEg
aGlnaCBzdXJyb2dhdGUuICAqLworCitJTkxJTkUgYm9vbAorY2hhcl9oaWdoX3N1cnJvZ2F0ZV9w
IChpbnQgYykKK3sKKyAgcmV0dXJuIDB4RDgwMCA8PSBjICYmIGMgPD0gMHhEQkZGOworfQorCisv
KiBSZXR1cm4gdGhlIFVuaWNvZGUgY29kZSBwb2ludCBmb3IgdGhlIGdpdmVuIFVURi0xNiBzdXJy
b2dhdGVzLiAgKi8KKworSU5MSU5FIGludAorc3Vycm9nYXRlc190b19jb2RlcG9pbnQgKGludCBs
b3csIGludCBoaWdoKQoreworICBlYXNzZXJ0IChjaGFyX2xvd19zdXJyb2dhdGVfcCAobG93KSk7
CisgIGVhc3NlcnQgKGNoYXJfaGlnaF9zdXJyb2dhdGVfcCAoaGlnaCkpOworICByZXR1cm4gMHgx
MDAwMCArIChsb3cgLSAweERDMDApICsgKChoaWdoIC0gMHhEODAwKSAqIDB4NDAwKTsKK30KKwog
LyogRXh0ZXJuIGRlY2xhcmF0aW9ucy4gICovCiBleHRlcm4gTGlzcF9PYmplY3QgY29kZV9jb252
ZXJzaW9uX3NhdmUgKGJvb2wsIGJvb2wpOwogZXh0ZXJuIGJvb2wgZW5jb2RlX2NvZGluZ191dGZf
OCAoc3RydWN0IGNvZGluZ19zeXN0ZW0gKik7CmRpZmYgLS1naXQgYS9zcmMvbnN0ZXJtLm0gYi9z
cmMvbnN0ZXJtLm0KaW5kZXggMDdhYzhmOTc4Zi4uMGMwYjNmZDliNSAxMDA2NDQKLS0tIGEvc3Jj
L25zdGVybS5tCisrKyBiL3NyYy9uc3Rlcm0ubQpAQCAtNjI4MywxNCArNjI4MywxMyBAQCBmbGFn
IHNldCAodGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgT1MpLgogICAgICAgICAgYnkgZG9D
b21tYW5kQnlTZWxlY3RvcjogZGVsZXRlQmFja3dhcmQ6ICovCiAtICh2b2lkKWluc2VydFRleHQ6
IChpZClhU3RyaW5nCiB7Ci0gIGludCBjb2RlOwotICBpbnQgbGVuID0gWyhOU1N0cmluZyAqKWFT
dHJpbmcgbGVuZ3RoXTsKLSAgaW50IGk7CisgIE5TU3RyaW5nICpzID0gYVN0cmluZzsKKyAgTlNV
SW50ZWdlciBsZW4gPSBbcyBsZW5ndGhdOwogCiAgIE5TVFJBQ0UgKCJbRW1hY3NWaWV3IGluc2Vy
dFRleHQ6XSIpOwogCiAgIGlmIChOU19LRVlMT0cpCi0gICAgTlNMb2cgKEAiaW5zZXJ0VGV4dCAn
JUAnXHRsZW4gPSAlZCIsIGFTdHJpbmcsIGxlbik7CisgICAgTlNMb2cgKEAiaW5zZXJ0VGV4dCAn
JUAnXHRsZW4gPSAlbHUiLCBhU3RyaW5nLCAodW5zaWduZWQgbG9uZykgbGVuKTsKICAgcHJvY2Vz
c2luZ0NvbXBvc2UgPSBOTzsKIAogICBpZiAoIWVtYWNzX2V2ZW50KQpAQCAtNjMwMCwxMCArNjI5
OSwyNCBAQCAtICh2b2lkKWluc2VydFRleHQ6IChpZClhU3RyaW5nCiAgIGlmICh3b3JraW5nVGV4
dCAhPSBuaWwpCiAgICAgW3NlbGYgZGVsZXRlV29ya2luZ1RleHRdOwogCisgIC8qIEl0IG1pZ2h0
IGJlIHByZWZlcmFibGUgdG8gdXNlIGdldENoYXJhY3RlcnM6cmFuZ2U6IGJlbG93LAorICAgICBj
Zi4gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvY29udGVudC9kb2N1bWVudGF0
aW9uL0NvY29hL0NvbmNlcHR1YWwvQ29jb2FQZXJmb3JtYW5jZS9BcnRpY2xlcy9TdHJpbmdEcmF3
aW5nLmh0bWwjLy9hcHBsZV9yZWYvZG9jL3VpZC9UUDQwMDAxNDQ1LTExMjM3OC4KKyAgICAgSG93
ZXZlciwgd2UgcHJvYmFibHkgY2FuJ3QgdXNlIFNBRkVfTkFMTE9DQSBoZXJlIGJlY2F1c2UgaXQg
bWlnaHQKKyAgICAgZXhpdCBub25sb2NhbGx5LiAgKi8KKwogICAvKiBub3cgaW5zZXJ0IHRoZSBz
dHJpbmcgYXMga2V5c3Ryb2tlcyAqLwotICBmb3IgKGkgPTA7IGk8bGVuOyBpKyspCisgIGZvciAo
TlNVSW50ZWdlciBpID0gMDsgaSA8IGxlbjsgaSsrKQogICAgIHsKLSAgICAgIGNvZGUgPSBbYVN0
cmluZyBjaGFyYWN0ZXJBdEluZGV4OiBpXTsKKyAgICAgIE5TVUludGVnZXIgY29kZSA9IFtzIGNo
YXJhY3RlckF0SW5kZXg6aV07CisgICAgICBpZiAoY2hhcl9oaWdoX3N1cnJvZ2F0ZV9wIChjb2Rl
KSAmJiBpIDwgbGVuIC0gMSkKKyAgICAgICAgeworICAgICAgICAgIHVuaWNoYXIgbG93ID0gW3Mg
Y2hhcmFjdGVyQXRJbmRleDppICsgMV07CisgICAgICAgICAgaWYgKGNoYXJfbG93X3N1cnJvZ2F0
ZV9wIChsb3cpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb2RlID0gc3Vycm9nYXRl
c190b19jb2RlcG9pbnQgKGxvdywgY29kZSk7CisgICAgICAgICAgICAgICsraTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgICAgLyogVE9ETzogc3RpbGwgbmVlZCB0aGlzPyAqLwogICAg
ICAgaWYgKGNvZGUgPT0gMHgyREMpCiAgICAgICAgIGNvZGUgPSAnfic7IC8qIDB4N0UgKi8KLS0g
CjIuMTUuMQoK
--001a1147dcac087a0505618049fe--