From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.devel Subject: Re: Character literals for Unicode (control) characters Date: Sun, 06 Mar 2016 17:35:18 +0000 Message-ID: References: <87r3fsjenn.fsf@gnus.org> <56D8623F.6060806@cs.ucla.edu> <838u1vwqj9.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=089e01419b022ae93e052d64c65d X-Trace: ger.gmane.org 1457285746 1963 80.91.229.3 (6 Mar 2016 17:35:46 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 6 Mar 2016 17:35:46 +0000 (UTC) Cc: eggert@cs.ucla.edu, larsi@gnus.org, johnw@gnu.org, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Mar 06 18:35:41 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1accae-00060p-Qd for ged-emacs-devel@m.gmane.org; Sun, 06 Mar 2016 18:35:37 +0100 Original-Received: from localhost ([::1]:51461 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1accae-0006g0-6V for ged-emacs-devel@m.gmane.org; Sun, 06 Mar 2016 12:35:36 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:39052) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1accaY-0006fp-Pi for emacs-devel@gnu.org; Sun, 06 Mar 2016 12:35:31 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1accaX-0006RU-PQ for emacs-devel@gnu.org; Sun, 06 Mar 2016 12:35:30 -0500 Original-Received: from mail-wm0-x233.google.com ([2a00:1450:400c:c09::233]:33394) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1accaX-0006RQ-Ec; Sun, 06 Mar 2016 12:35:29 -0500 Original-Received: by mail-wm0-x233.google.com with SMTP id l68so80896911wml.0; Sun, 06 Mar 2016 09:35:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=OfmcLqnbxznhsJC0X5UAuaW/W+C55kD7j6c0JgyCFHU=; b=j7XjDMk2ipU9wxIX028FtHGAGibxwdh0gWOiSaeNiHVPnGt8ZQ4TxbwbRS3NNKHgoI uvodaoBmy8aMA/WsuP+uYSbbhBZHlZX9dI6ik/kFH4NCM4vDR4aKV+7m9sQ2uL1ZbU/4 8CHEQoU1ABD1JAnWl3ngFwuxaLWpIFDoATZlIIuWSIwfBwE6uimxPM4uRmwJj4w76JCq b57mdTtxNjw/GXSaBex8B6m3OyYOK9I5xqa7V1MO3+g9elIWqFDLpzqUoRsjnjWQRReg 6mpa6bWKEDFSw1cBs3SaBnokJDHWtbIbub7A1eMBqnPT7wGikXUOTJKhG+k3oIoZ3fa7 5lWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=OfmcLqnbxznhsJC0X5UAuaW/W+C55kD7j6c0JgyCFHU=; b=EFUlQLP069HY6bzke461mT1o2uN8vShKdUgb3gLV9inQ3Uj7prtNPElw3AwbBptI3i gkHUlW9Ttd/XhHT5Krwn+lq/EfR9AVqPYJTrStbnImYnKJ2xxhAPIQzYka+WsV+UlZfP 5sCdMZJfsb/Q9ue/+BhvKQG0fZGH9YPBRI40dfgjphWOXK7Rl7BNprDqX3mON0narvSr ZrCPoyMXFGnMAM4XDFCsePayi8NFRZBY/PuiCZPG1Z3DoV6nJ0GMOcdQdQDQrb/FrwDv RdAW6ohYW89JTBwMr3PxmgvxCl7qqVqC8UyUWjxRSmVBflrQUFXcx4kZYLlvedS0dS/T GYKg== X-Gm-Message-State: AD7BkJKGsSjpOs23Th6Qg6Jba8n/5hgOe3gYTfhk6zsxrKqseWZI0xc/cLNiPwcU+Gbr5MTIMx61SBsesC8Dcw== X-Received: by 10.194.242.202 with SMTP id ws10mr18597546wjc.3.1457285728127; Sun, 06 Mar 2016 09:35:28 -0800 (PST) In-Reply-To: <838u1vwqj9.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::233 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 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-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:201003 Archived-At: --089e01419b022ae93e052d64c65d Content-Type: multipart/alternative; boundary=089e01419b022ae937052d64c65b --089e01419b022ae937052d64c65b Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Eli Zaretskii schrieb am So., 6. M=C3=A4rz 2016 um 16:54 Uhr= : > > From: Philipp Stephani > > Date: Sun, 06 Mar 2016 15:24:47 +0000 > > > > I've attached a patch with an initial implementation. > > Thanks. > > > +/* Hash table that maps Unicode character names to code points. */ > > +static Lisp_Object character_names; > > + > > +/* Length of the longest Unicode character name, in bytes. */ > > +static ptrdiff_t max_character_name_length; > > + > > +/* Initializes `character_names' and `max_character_name_length'. > > + Called by `read_escape'. */ > > I wonder if there's a better way, in particular with a smaller memory > footprint. Doesn't map-char-table work well enough to avoid > generating all the names up front? > It doesn't seem to work; for some reason the Unicode name table appears very small (only 136 code points) when map-char-table is called from C and lacks most characters. > > > + if (! RANGED_INTEGERP (0, code, 0x10FFFF)) > > This should use MAX_UNICODE_CHAR. > > Done, attached a new patch. --089e01419b022ae937052d64c65b Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable


Eli Za= retskii <eliz@gnu.org> schrieb am= So., 6. M=C3=A4rz 2016 um 16:54=C2=A0Uhr:
> From: Philipp Stephani <p.stephani2@gmail.com>
> Date: Sun, 06 Mar 2016 15:24:47 +0000
>
> I've attached a patch with an initial implementation.

Thanks.

> +/* Hash table that maps Unicode character names to code points.=C2=A0= */
> +static Lisp_Object character_names;
> +
> +/* Length of the longest Unicode character name, in bytes. */
> +static ptrdiff_t max_character_name_length;
> +
> +/* Initializes `character_names' and `max_character_name_length&#= 39;.
> +=C2=A0 =C2=A0Called by `read_escape'.=C2=A0 */

I wonder if there's a better way, in particular with a smaller memory footprint.=C2=A0 Doesn't map-char-table work well enough to avoid
generating all the names up front?

It d= oesn't seem to work; for some reason the Unicode name table appears ver= y small (only 136 code points) when map-char-table is called from C and lac= ks most characters.
=C2=A0

> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (! RANGED_INTEGERP (0, code, 0x10FFFF)= )

This should use MAX_UNICODE_CHAR.


Done, attached a new patch.=C2=A0
--089e01419b022ae937052d64c65b-- --089e01419b022ae93e052d64c65d Content-Type: application/octet-stream; name="0001-Implement-named-character-escapes-similar-to-Perl.patch" Content-Disposition: attachment; filename="0001-Implement-named-character-escapes-similar-to-Perl.patch" Content-Transfer-Encoding: base64 Content-ID: <1534cff5953797e18101> X-Attachment-Id: 1534cff5953797e18101 RnJvbSAyMmUyOTljZDIzYTcyYTA3MjQ2MWJlZmEzMGEwNGJmNTU3YWVjYWM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+CkRh dGU6IFN1biwgNiBNYXIgMjAxNiAxNjoxNjoyOSArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxl bWVudCBuYW1lZCBjaGFyYWN0ZXIgZXNjYXBlcywgc2ltaWxhciB0byBQZXJsCgoqIGxyZWFkLmMg KGluaXRfY2hhcmFjdGVyX25hbWVzKTogTmV3IGZ1bmN0aW9uLgoocmVhZF9lc2NhcGUpOiBSZWFk IFBlcmwtc3R5bGUgbmFtZWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZXMuCihzeW1zX29mX2xy ZWFkKTogSW5pdGlhbGl6ZSBuZXcgdmFyaWFibGUgYGNoYXJhY3Rlcl9uYW1lcycuCiogdGVzdC9z cmMvbHJlYWQtdGVzdHMuZWwgKGxyZWFkLWNoYXItZW1wdHktbmFtZSk6IEFkZCB0ZXN0IGZpbGUK Zm9yIHNyYy9scmVhZC5jLgotLS0KIHNyYy9scmVhZC5jICAgICAgICAgICAgIHwgOTYgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdC9zcmMvbHJl YWQtdGVzdHMuZWwgfCA1NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNo YW5nZWQsIDE1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9zcmMvbHJl YWQtdGVzdHMuZWwKCmRpZmYgLS1naXQgYS9zcmMvbHJlYWQuYyBiL3NyYy9scmVhZC5jCmluZGV4 IDI1ZTNmZjAuLjZlODRmYzggMTAwNjQ0Ci0tLSBhL3NyYy9scmVhZC5jCisrKyBiL3NyYy9scmVh ZC5jCkBAIC00Myw2ICs0Myw3IEBAIGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KICNpbmNsdWRlICJzeXN0aW1lLmgi CiAjaW5jbHVkZSAidGVybWhvb2tzLmgiCiAjaW5jbHVkZSAiYmxvY2tpbnB1dC5oIgorI2luY2x1 ZGUgPGMtY3R5cGUuaD4KIAogI2lmZGVmIE1TRE9TCiAjaW5jbHVkZSAibXNkb3MuaCIKQEAgLTIx NTAsNiArMjE1MSwzNiBAQCBncm93X3JlYWRfYnVmZmVyICh2b2lkKQogCQkJIE1BWF9NVUxUSUJZ VEVfTEVOR1RILCAtMSwgMSk7CiB9CiAKKy8qIEhhc2ggdGFibGUgdGhhdCBtYXBzIFVuaWNvZGUg Y2hhcmFjdGVyIG5hbWVzIHRvIGNvZGUgcG9pbnRzLiAgKi8KK3N0YXRpYyBMaXNwX09iamVjdCBj aGFyYWN0ZXJfbmFtZXM7CisKKy8qIExlbmd0aCBvZiB0aGUgbG9uZ2VzdCBVbmljb2RlIGNoYXJh Y3RlciBuYW1lLCBpbiBieXRlcy4gKi8KK3N0YXRpYyBwdHJkaWZmX3QgbWF4X2NoYXJhY3Rlcl9u YW1lX2xlbmd0aDsKKworLyogSW5pdGlhbGl6ZXMgYGNoYXJhY3Rlcl9uYW1lcycgYW5kIGBtYXhf Y2hhcmFjdGVyX25hbWVfbGVuZ3RoJy4KKyAgIENhbGxlZCBieSBgcmVhZF9lc2NhcGUnLiAgKi8K K3ZvaWQgaW5pdF9jaGFyYWN0ZXJfbmFtZXMgKCkKK3sKKyAgY2hhcmFjdGVyX25hbWVzID0gQ0FM TE4gKEZtYWtlX2hhc2hfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBRQ3Rlc3Qs IFFlcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnRseSBhcm91bmQg MTAwLDAwMCBVbmljb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJz IGFyZSBkZWZpbmVkLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDc2l6ZSwgbWFr ZV9uYXRudW0gKDEwMDAwMCkpOworICBjb25zdCBMaXNwX09iamVjdCBnZXRfcHJvcGVydHkgPQor ICAgIEZzeW1ib2xfZnVuY3Rpb24gKGludGVybl9jX3N0cmluZyAoImdldC1jaGFyLWNvZGUtcHJv cGVydHkiKSk7CisgIHB0cmRpZmZfdCBsZW5ndGggPSAwOworICBmb3IgKGludCBpID0gMDsgaSA8 PSBNQVhfVU5JQ09ERV9DSEFSOyArK2kpCisgICAgeworICAgICAgY29uc3QgTGlzcF9PYmplY3Qg Y29kZSA9IG1ha2VfbmF0bnVtIChpKTsKKyAgICAgIGNvbnN0IExpc3BfT2JqZWN0IG5hbWUgPSBj YWxsMiAoZ2V0X3Byb3BlcnR5LCBjb2RlLCBRbmFtZSk7CisgICAgICBpZiAoTklMUCAobmFtZSkp IGNvbnRpbnVlOworICAgICAgQ0hFQ0tfU1RSSU5HIChuYW1lKTsKKyAgICAgIGxlbmd0aCA9IG1h eCAobGVuZ3RoLCBTQllURVMgKG5hbWUpKTsKKyAgICAgIEZwdXRoYXNoIChuYW1lLCBjb2RlLCBj aGFyYWN0ZXJfbmFtZXMpOworICAgIH0KKyAgbWF4X2NoYXJhY3Rlcl9uYW1lX2xlbmd0aCA9IGxl bmd0aDsKK30KKwogLyogUmVhZCBhIFwtZXNjYXBlIHNlcXVlbmNlLCBhc3N1bWluZyB3ZSBhbHJl YWR5IHJlYWQgdGhlIGBcJy4KICAgIElmIHRoZSBlc2NhcGUgc2VxdWVuY2UgZm9yY2VzIHVuaWJ5 dGUsIHJldHVybiBlaWdodC1iaXQgY2hhci4gICovCiAKQEAgLTIzNTcsNiArMjM4OCw2OCBAQCBy ZWFkX2VzY2FwZSAoTGlzcF9PYmplY3QgcmVhZGNoYXJmdW4sIGJvb2wgc3RyaW5ncCkKIAlyZXR1 cm4gaTsKICAgICAgIH0KIAorICAgIGNhc2UgJ04nOgorICAgICAgLyogTmFtZWQgY2hhcmFjdGVy LiAgKi8KKyAgICAgIHsKKyAgICAgICAgYyA9IFJFQURDSEFSOworICAgICAgICBpZiAoYyAhPSAn eycpCisgICAgICAgICAgaW52YWxpZF9zeW50YXggKCJFeHBlY3RlZCBvcGVuaW5nIGJyYWNlIGFm dGVyIFxcTiIpOworICAgICAgICBpZiAoTklMUCAoY2hhcmFjdGVyX25hbWVzKSkKKyAgICAgICAg ICBpbml0X2NoYXJhY3Rlcl9uYW1lcyAoKTsKKyAgICAgICAgVVNFX1NBRkVfQUxMT0NBOworICAg ICAgICBjaGFyICpuYW1lID0gU0FGRV9BTExPQ0EgKG1heF9jaGFyYWN0ZXJfbmFtZV9sZW5ndGgg KyAxKTsKKyAgICAgICAgYm9vbCB3aGl0ZXNwYWNlID0gZmFsc2U7CisgICAgICAgIHB0cmRpZmZf dCBsZW5ndGggPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkKKyAgICAgICAgICB7CisgICAgICAg ICAgICBjID0gUkVBRENIQVI7CisgICAgICAgICAgICBpZiAoYyA8IDApCisgICAgICAgICAgICAg IGVuZF9vZl9maWxlX2Vycm9yICgpOworICAgICAgICAgICAgaWYgKGMgPT0gJ30nKQorICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghIGNfaXNhc2NpaSAoYykpCisgICAgICAg ICAgICAgIHhzaWduYWwxIChRaW52YWxpZF9yZWFkX3N5bnRheCwKKyAgICAgICAgICAgICAgICAg ICAgICAgIENBTExOIChGZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 aWxkX3B1cmVfY19zdHJpbmcgKCJOb24tQVNDSUkgY2hhcmFjdGVyIFUrJTA0WCIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGluIGNoYXJhY3Rl ciBuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9uYXRudW0gKGMp KSk7CisgICAgICAgICAgICAvKiBXZSB0cmVhdCBtdWx0aXBsZSBhZGphY2VudCB3aGl0ZXNwYWNl IGNoYXJhY3RlcnMgYXMgYQorICAgICAgICAgICAgICAgc2luZ2xlIHNwYWNlIGNoYXJhY3Rlci4g IFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHVzZQorICAgICAgICAgICAgICAgY2hhcmFjdGVyIG5h bWVzIGluIGUuZy4gbXVsdGktbGluZSBzdHJpbmdzLiAgKi8KKyAgICAgICAgICAgIGlmIChjX2lz c3BhY2UgKGMpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCEgd2hpdGVz cGFjZSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFj ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG5hbWVbbGVuZ3RoKytdID0gJyAnOworICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlID0gZmFsc2U7CisgICAgICAg ICAgICAgICAgbmFtZVtsZW5ndGgrK10gPSBjOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAobGVuZ3RoID49IG1heF9jaGFyYWN0ZXJfbmFtZV9sZW5ndGgpCisgICAgICAgICAgICAg IGludmFsaWRfc3ludGF4ICgiQ2hhcmFjdGVyIG5hbWUgdG9vIGxvbmciKTsKKyAgICAgICAgICB9 CisgICAgICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICAgICAgICBpbnZhbGlkX3N5bnRheCAoIkVt cHR5IGNoYXJhY3RlciBuYW1lIik7CisgICAgICAgIG5hbWVbbGVuZ3RoXSA9IDA7CisgICAgICAg IGNvbnN0IExpc3BfT2JqZWN0IGxpc3BfbmFtZSA9IG1ha2VfdW5pYnl0ZV9zdHJpbmcgKG5hbWUs IGxlbmd0aCk7CisgICAgICAgIGNvbnN0IExpc3BfT2JqZWN0IGNvZGUgPQorICAgICAgICAgIChs ZW5ndGggPj0gMyAmJiBsZW5ndGggPD0gMTAgJiYgbmFtZVswXSA9PSAnVScgJiYgbmFtZVsxXSA9 PSAnKycpID8KKyAgICAgICAgICAvKiBDb2RlIHBvaW50IGFzIFUrTiwgd2hlcmUgTiBpcyBiZXR3 ZWVuIDEgYW5kIDggaGV4YWRlY2ltYWwKKyAgICAgICAgICAgICBkaWdpdHMuICAqLworICAgICAg ICAgIHN0cmluZ190b19udW1iZXIgKG5hbWUgKyAyLCAxNiwgZmFsc2UpIDoKKyAgICAgICAgICBG Z2V0aGFzaCAobGlzcF9uYW1lLCBjaGFyYWN0ZXJfbmFtZXMsIFFuaWwpOworICAgICAgICBTQUZF X0ZSRUUgKCk7CisgICAgICAgIGlmICghIFJBTkdFRF9JTlRFR0VSUCAoMCwgY29kZSwgTUFYX1VO SUNPREVfQ0hBUikpCisgICAgICAgICAgeHNpZ25hbDEgKFFpbnZhbGlkX3JlYWRfc3ludGF4LAor ICAgICAgICAgICAgICAgICAgICBDQUxMTiAoRmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJ1aWxkX3B1cmVfY19zdHJpbmcgKCJcXE57JXN9IiksIGxpc3BfbmFtZSkpOworICAg ICAgICByZXR1cm4gWElOVCAoY29kZSk7CisgICAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAg cmV0dXJuIGM7CiAgICAgfQpAQCAtNDc0NSw0ICs0ODM4LDcgQEAgdGhhdCBhcmUgbG9hZGVkIGJl Zm9yZSB5b3VyIGN1c3RvbWl6YXRpb25zIGFyZSByZWFkISAgKi8pOwogICBERUZTWU0gKFF3ZWFr bmVzcywgIndlYWtuZXNzIik7CiAgIERFRlNZTSAoUXJlaGFzaF9zaXplLCAicmVoYXNoLXNpemUi KTsKICAgREVGU1lNIChRcmVoYXNoX3RocmVzaG9sZCwgInJlaGFzaC10aHJlc2hvbGQiKTsKKwor ICBjaGFyYWN0ZXJfbmFtZXMgPSBRbmlsOworICBzdGF0aWNwcm8gKCZjaGFyYWN0ZXJfbmFtZXMp OwogfQpkaWZmIC0tZ2l0IGEvdGVzdC9zcmMvbHJlYWQtdGVzdHMuZWwgYi90ZXN0L3NyYy9scmVh ZC10ZXN0cy5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjg3MzM0Ci0t LSAvZGV2L251bGwKKysrIGIvdGVzdC9zcmMvbHJlYWQtdGVzdHMuZWwKQEAgLTAsMCArMSw1NCBA QAorOzs7IGxyZWFkLXRlc3RzLmVsIC0tLSB0ZXN0cyBmb3IgbHJlYWQuYyAtKi0gbGV4aWNhbC1i aW5kaW5nOiB0OyAtKi0KKworOzsgQ29weXJpZ2h0IChDKSAyMDE2ICBHb29nbGUgSW5jLgorCis7 OyBBdXRob3I6IFBoaWxpcHAgU3RlcGhhbmkgPHBoc3RAZ29vZ2xlLmNvbT4KKworOzsgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgorCis7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOzsgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCis7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor Cis7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisK Kzs7OyBDb21tZW50YXJ5OgorCis7OyBVbml0IHRlc3RzIGZvciBjb2RlIGluIHNyYy9scmVhZC5j LgorCis7OzsgQ29kZToKKworKGVydC1kZWZ0ZXN0IGxyZWFkLWNoYXItbnVtYmVyICgpCisgIChz aG91bGQgKGVxdWFsID9cTntVK0E4MTd9ICN4QTgxNykpKQorCisoZXJ0LWRlZnRlc3QgbHJlYWQt Y2hhci1uYW1lICgpCisgIChzaG91bGQgKGVxdWFsID9cTntTWUxPVEkgIE5BR1JJIExFVFRFUgor ICAgICAgICAgICAgICAgICBESE99CisgICAgICAgICAgICAgICAgICN4QTgxNykpKQorCisoZXJ0 LWRlZnRlc3QgbHJlYWQtY2hhci1pbnZhbGlkLW51bWJlciAoKQorICAoc2hvdWxkLWVycm9yIChy ZWFkICI/XFxOe1UrMTEwMDAwfSIpIDp0eXBlICdpbnZhbGlkLXJlYWQtc3ludGF4KSkKKworKGVy dC1kZWZ0ZXN0IGxyZWFkLWNoYXItaW52YWxpZC1uYW1lICgpCisgIChzaG91bGQtZXJyb3IgKHJl YWQgIj9cXE57RE9FUyBOT1QgRVhJU1R9IikpIDp0eXBlICdpbnZhbGlkLXJlYWQtc3ludGF4KQor CisoZXJ0LWRlZnRlc3QgbHJlYWQtY2hhci1ub24tYXNjaWktbmFtZSAoKQorICAoc2hvdWxkLWVy cm9yIChyZWFkICI/XFxOe0xBVElOIENBUElUQUwgTEVUVEVSIMOYfSIpKSAnaW52YWxpZC1yZWFk LXN5bnRheCkKKworKGVydC1kZWZ0ZXN0IGxyZWFkLWNoYXItZW1wdHktbmFtZSAoKQorICAoc2hv dWxkLWVycm9yIChyZWFkICI/XFxOe30iKSkgJ2ludmFsaWQtcmVhZC1zeW50YXgpCisKKyhlcnQt ZGVmdGVzdCBscmVhZC1zdHJpbmctY2hhci1udW1iZXIgKCkKKyAgKHNob3VsZCAoZXF1YWwgImFc TntVK0E4MTd9YiIgImFcdUE4MTdiIikpKQorCisoZXJ0LWRlZnRlc3QgbHJlYWQtc3RyaW5nLWNo YXItbmFtZSAoKQorICAoc2hvdWxkIChlcXVhbCAiYVxOe1NZTE9USSBOQUdSSSAgTEVUVEVSIERI T31iIiAiYVx1QTgxN2IiKSkpCisKKzs7OyBscmVhZC10ZXN0cy5lbCBlbmRzIGhlcmUKLS0gCjIu Ny4wCgo= --089e01419b022ae93e052d64c65d--