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--