From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-2.8 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_BL_SPAMCOP_NET, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, UNPARSEABLE_RELAY,URIBL_GREY shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 934441F4D7 for ; Thu, 12 May 2022 01:24:15 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sendgrid.me header.i=@sendgrid.me header.b="HLm4n7vi"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 12964120B6F; Thu, 12 May 2022 10:24:11 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 85132120B6F for ; Thu, 12 May 2022 10:24:08 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sendgrid.me; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to; s=smtpapi; bh=emMHCiJgdbN/EqZD0+N+GZLiD0SKlb796uNj9WMmk3k=; b=HLm4n7vi0/vaKy8p24jIOfHpjTgk5N2wMl6Z0mWW46fC0GxqVjXky4i+IwcSxXVZ4oI/ K66kfOx5lCfIGNQHQGmbQTFP9e1eRb+DepCq90X9/ENRfA0C6QuAyubIC3qoWxMPklx1Ct e7wkA9SfAXFqJ2UPlzTObfiGqGq+qunqQ= Received: by filterdrecv-77df7bffc9-s6jjg with SMTP id filterdrecv-77df7bffc9-s6jjg-1-627C61B1-4A 2022-05-12 01:24:01.894360611 +0000 UTC m=+3037082.861168244 Received: from herokuapp.com (unknown) by geopod-ismtpd-canary-0 (SG) with ESMTP id s0TSTVOCTi6gAdcNMeAwbw for ; Thu, 12 May 2022 01:24:01.844 +0000 (UTC) Date: Thu, 12 May 2022 01:24:02 +0000 (UTC) From: "ko1 (Koichi Sasada)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 18776 X-Redmine-Issue-Author: jemmai X-Redmine-Sender: ko1 X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-Redmine-MailingListIntegration-Message-Ids: 84893 X-SG-EID: =?us-ascii?Q?YkmFGMrQnymZs=2F4gaHJnvrsFPAGAfVipS20r=2FEutHlZKBkOXJV3+2vYlfF3wrB?= =?us-ascii?Q?u+wzn1=2FYobjg0PO+JI9qcf52mK3MA+nOY6Ni7MF?= =?us-ascii?Q?tukjT0ORQvKQfqDGilJFpSe+SNMx1oRBNF0Vf9j?= =?us-ascii?Q?+C0Rvv5DO+Fw=2FAcMbCd4xdi1m=2FEj92qKVveRlbm?= =?us-ascii?Q?HSLrGNpOIrBnofiKKztxtdeS5v61=2FBIKYU49rEB?= =?us-ascii?Q?TGT26cVqp0UWoMm7W9p9XNq1XPbybAlTUfhm7JI?= =?us-ascii?Q?ZjGZyqw+8MHwxZ69Y=2Fjzg=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 108524 Subject: [ruby-core:108524] [Ruby master Feature#18776] Object Shapes X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Reply-To: Ruby developers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkga28xIChLb2ljaGkgU2FzYWRhKS4KCgpH cmVhdCBwYXRjaC4KSSdtIGxvb2tpbmcgZm9yd2FyZCB0byBzZWVpbmcgZXZhbHVhdGlvbiByZXN1 bHRzLgoKUXVlc3Rpb25zOgoKKiBob3cgdG8gdXNlIHBhcmVudCBpZD8KKiBob3cgdG8gZmluZCBu ZXh0IGlkIHdpdGggYWRkaXRpb25hbCBpdmFyPwoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTg3NzY6IE9iamVjdCBTaGFwZXMKaHR0cHM6Ly9idWdz LnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE4Nzc2I2NoYW5nZS05NzU2NgoKKiBBdXRob3I6IGplbW1h aSAoSmVtbWEgSXNzcm9mZikKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPYmplY3QgU2hhcGVzIGltcGxl bWVudGF0aW9uCgpBYXJvbiBQYXR0ZXJzb24sIEVpbGVlbiBVY2hpdGVsbGUgYW5kIEkgaGF2ZSBi ZWVuIHdvcmtpbmcgb24gYW4gaW1wbGVtZW50YXRpb24gb2YgT2JqZWN0IFNoYXBlcyBmb3IgUnVi eS4gIFdlIGFyZSBmaWxpbmcgYSB0aWNrZXQgdG8gc2hhcmUgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5n LCBhcyB3ZWxsIGFzIGdldCBmZWVkYmFjayBvbiB0aGUgcHJvamVjdCBpbiBpdHMgY3VycmVudCBz dGF0ZS4KCldlIGhvcGUgdG8gZXZlbnR1YWxseSBzdWJtaXQgdGhlIGZpbmFsaXplZCBwcm9qZWN0 IHVwc3RyZWFtIGFmdGVyIHZlcmlmeWluZyBlZmZpY2FjeS4KCiMjIFdoYXQgYXJlIE9iamVjdCBT aGFwZXM/CgpPYmplY3Qgc2hhcGVzIGFyZSBhIHRlY2huaXF1ZSBmb3IgcmVwcmVzZW50aW5nIHBy b3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBPdGhlciBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMsIGlu Y2x1ZGluZyBbVHJ1ZmZsZVJ1YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcmFjbGUvdHJ1ZmZsZXJ1 YnkpIGFuZCBbVjhdKGh0dHBzOi8vdjguZGV2LyksIHVzZSB0aGlzIHRlY2huaXF1ZS4gQ2hyaXMg U2VhdG9uLCB0aGUgY3JlYXRvciBvZiBUcnVmZmxlUnVieSwgZGlzY3Vzc2VkIG9iamVjdCBzaGFw ZXMgaW4gaGlzIFtSdWJ5S2FpZ2kgMjAyMSBLZXlub3RlXShodHRwczovL3J1YnlrYWlnaS5vcmcv MjAyMS10YWtlb3V0L3ByZXNlbnRhdGlvbnMvY2hyaXNnc2VhdG9uLmh0bWwpIGFuZCBNYXhpbWUg Q2hldmFsaWVyLUJvaXN2ZXJ0IGRpc2N1c3NlZCB0aGUgaW1wbGljYXRpb25zIGZvciBZSklUIGlu IHRoZSBsYXR0ZXIgcGFydCBvZiBbaGVyIHRhbGsgYXQgUnVieUthaWdpIDIwMjFdKGh0dHBzOi8v d3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9UEJWTGYzeWZNczgmdD0xMTAwcykuIFRoZSBvcmlnaW5h bCBpZGVhIG9mIG9iamVjdCBzaGFwZXMgW29yaWdpbmF0ZXMgZnJvbSB0aGUgU2VsZiBsYW5ndWFn ZV0oaHR0cHM6Ly9iaWJsaW9ncmFwaHkuc2VsZmxhbmd1YWdlLm9yZy9fc3RhdGljL2ltcGxlbWVu dGF0aW9uLnBkZiksIHdoaWNoIGlzIGNvbnNpZGVyZWQgYSBkaXJlY3QgZGVzY2VuZGFudCBvZiBT bWFsbHRhbGsuCgpFYWNoIHNoYXBlIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBzZXQgb2YgYXR0cmli dXRlcyAoaW5zdGFuY2UgdmFyaWFibGVzIGFuZCBvdGhlciBwcm9wZXJ0aWVzKSBhbmQgdGhlaXIg dmFsdWVzLiBJbiBvdXIgaW1wbGVtZW50YXRpb24sIGFsbCBvYmplY3RzIGhhdmUgYSBzaGFwZS4g VGhlIHNoYXBlcyBhcmUgbm9kZXMgaW4gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiBFdmVyeSBlZGdl IGluIHRoZSB0cmVlIHJlcHJlc2VudHMgYW4gYXR0cmlidXRlIHRyYW5zaXRpb24uCgpNb3JlIHNw ZWNpZmljYWxseSwgc2V0dGluZyBhbiBpbnN0YW5jZSB2YXJpYWJsZSBvbiBhbiBpbnN0YW5jZSBv ZiBhbiBvYmplY3QgY3JlYXRlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gdGhlIGluc3RhbmNlJ3Mg Y3VycmVudCBzaGFwZS4gVGhpcyBpcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgc2hhcGUgdG8gYW5v dGhlci4gVGhlIGVkZ2UgcmVwcmVzZW50cyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBz ZXQuCgpGb3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxpemUKICAg ICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBA YSA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkKICAg IEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCAyKQog IGVuZAplbmQKCmZvbyA9IEZvby5uZXcKYGBgCgpXaGVuIGBGb29gIGlzIGludGlhbGl6ZWQsIGl0 cyBzaGFwZSBpcyB0aGUgcm9vdCBzaGFwZSB3aXRoIElEIDAuICBUaGUgcm9vdCBzaGFwZSByZXBy ZXNlbnRzIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5vIGluc3RhbmNlIHZhcmlhYmxlcy4gRWFjaCB0 aW1lIGFuIGluc3RhbmNlIHZhcmlhYmxlIGlzIHNldCBvbiBgZm9vYCwgdGhlIHNoYXBlIG9mIHRo ZSBpbnN0YW5jZSBjaGFuZ2VzLiBJdCBmaXJzdCB0cmFuc2l0aW9ucyB3aXRoIGBAYWAgdG8gYSBz aGFwZSB3aXRoIElEIDEsIGFuZCB0aGVuIHRyYW5zaXRpb25zIHdpdGggYEBiYCB0byBhIHNoYXBl IHdpdGggSUQgMi4gSWYgYEBhYCBpcyB0aGVuIHNldCB0byBhIGRpZmZlcmVudCB2YWx1ZSwgaXRz IHNoYXBlIHdpbGwgcmVtYWluIHRoZSBzaGFwZSB3aXRoIElEIDIsIHNpbmNlIHRoaXMgc2hhcGUg YWxyZWFkeSBpbmNsdWRlcyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgYEBhYC4gIAoKIVtdKGh0dHBz Oi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTE4MzYwLTBh NmM5MWFhLTI1ODctNDhjYi04ZmYyLTdmM2E5NTgzMjg4ZS5zdmcpCgpUaGVyZSBpcyBvbmUgZ2xv YmFsIHNoYXBlIHRyZWUgYW5kIG9iamVjdHMgd2hpY2ggdW5kZXJnbyB0aGUgc2FtZSBzaGFwZSB0 cmFuc2l0aW9ucyBpbiB0aGUgc2FtZSBvcmRlciB3aWxsIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGZp bmFsIHNoYXBlLgoKRm9yIGluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgY2xhc3MgYEJhcmAgZGVmaW5l ZCBhcyBmb2xsb3dzLCB0aGUgZmlyc3QgdHJhbnNpdGlvbiBvbiBgQmFyLm5ld2AgdGhyb3VnaCB0 aGUgaW5zdGFuY2UgdmFyaWFibGUgYEBhYCB3aWxsIGJlIHRoZSBzYW1lIGFzIGBGb28ubmV3YCdz IGZpcnN0IHRyYW5zaXRpb246CgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAg ICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAg QGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpCiAg ICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgMikK ICBlbmQKZW5kCgpjbGFzcyBCYXIKICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhp cyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRp b25zIHRvIHNoYXBlIGRlZmluZWQgZWFybGllciB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBjID0g MSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBjIChJRCAzKQogICAgQGIg PSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDQpCiAgZW5k CmVuZAoKZm9vID0gRm9vLm5ldyAjIGJsdWUgaW4gdGhlIGRpYWdyYW0KYmFyID0gQmFyLm5ldyAj IHJlZCBpbiB0aGUgZGlhZ3JhbQpgYGAKCkluIHRoZSBkaWFncmFtIGJlbG93LCBwdXJwbGUgcmVw cmVzZW50cyBzaGFyZWQgdHJhbnNpdGlvbnMsIGJsdWUgcmVwcmVzZW50cyB0cmFuc2l0aW9ucyBm b3Igb25seSBgZm9vYCwgYW5kIHJlZCByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBi YXJgLgoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1 NjAvMTY3OTE4ODk5LWYxYTZmMzQ0LWFlNWUtNGRjMC1iMTdhLWZiMTU2ZDFkNTUwZi5zdmcpCgoj IyMgQ2FjaGUgc3RydWN0dXJlCgpGb3IgaW5zdGFuY2UgdmFyaWFibGUgd3JpdGVycywgdGhlIGN1 cnJlbnQgc2hhcGUgSUQsIHRoZSBzaGFwZSBJRCB0aGF0IGl2YXIgd3JpdGUgd291bGQgdHJhbnNp dGlvbiB0byBhbmQgaW5zdGFuY2UgdmFyaWFibGUgaW5kZXggYXJlIGFsbCBzdG9yZWQgaW4gdGhl IGlubGluZSBjYWNoZS4gVGhlIHNoYXBlIElEIGlzIHRoZSBrZXkgdG8gdGhlIGNhY2hlLgoKRm9y IGluc3RhbmNlIHZhcmlhYmxlIHJlYWRlcnMsIHRoZSBzaGFwZSBJRCBhbmQgaW5zdGFuY2UgdmFy aWFibGUgaW5kZXggYXJlIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hlLiAgQWdhaW4sIHRoZSBz aGFwZSBJRCBpcyB0aGUgY2FjaGUga2V5LgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlh bGl6ZQogICAgQGEgPSAxICMgSUMgc2hhcGVfaWQ6IDAsIG5leHQgc2hhcGU6IDEsIGl2IGluZGV4 IDAKICAgIEBiID0gMSAjIElDIHNoYXBlX2lkOiAxLCBuZXh0IHNoYXBlOiAyLCBpdiBpbmRleCAx CiAgZW5kCiAgICAKICBkZWYgYQogICAgQGEgIyBJQyBzaGFwZV9pZDogMiwgaXYgaW5kZXggMAog IGVuZAplbmQKYGBgCgojIyBSYXRpb25hbGUKCldlIHRoaW5rIHRoYXQgYW4gb2JqZWN0IHNoYXBl IGltcGxlbWVudGF0aW9uIHdpbGwgc2ltcGxpZnkgY2FjaGUgY2hlY2tzLCBpbmNyZWFzZSBpbmxp bmUgY2FjaGUgaGl0cywgZGVjcmVhc2UgcnVudGltZSBjaGVja3MsIGFuZCBlbmFibGUgb3RoZXIg cG90ZW50aWFsIGZ1dHVyZSBvcHRpbWl6YXRpb25zLiBUaGVzZSBhcmUgYWxsIGV4cGxhaW5lZCBi ZWxvdy4gCgojIyMgU2ltcGxpZnkgY2FjaGluZwoKVGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50 YXRpb24gZGVwZW5kcyBvbiB0aGUgY2xhc3Mgb2YgdGhlIHJlY2VpdmVyLiBTaW5jZSB0aGUgYWRk cmVzcyBvZiB0aGUgY2xhc3MgY2FuIGJlIHJldXNlZCwgdGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVt ZW50YXRpb24gYWxzbyBkZXBlbmRzIG9uIGFuIGluY3JlbWVudGluZyBzZXJpYWwgbnVtYmVyIHNl dCBvbiB0aGUgY2xhc3MgKHRoZSBjbGFzcyBzZXJpYWwpLiAgVGhlIHNoYXBlIGltcGxlbWVudGF0 aW9uIGhhcyBubyBzdWNoIGRlcGVuZGVuY3kuIEl0IG9ubHkgcmVxdWlyZXMgY2hlY2tpbmcgdGhl IHNoYXBlIElEIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGUgaXMgdmFsaWQuCgojIyMgQ2FjaGUg aGl0cwoKT2JqZWN0cyB0aGF0IHNldCBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIG9yZGVyIGNhbiBz aGFyZSBzaGFwZXMuICBGb3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgSG9nZQogIGRlZiBpbml0 aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJ RCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gdGhlIG5leHQgc2hhcGUgdmlhIGVkZ2Ug bmFtZWQgQGEKICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIG5leHQgc2hhcGUgdmlhIGVkZ2Ug bmFtZWQgQGIKICBlbmQKZW5kCgpjbGFzcyBGdWdhIDwgSG9nZTsgZW5kCgpob2dlID0gSG9nZS5u ZXcKZnVnYSA9IEZ1Z2EubmV3CmBgYAoKSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBpbnN0YW5j ZXMgYGhvZ2VgIGFuZCBgZnVnYWAgd2lsbCBzaGFyZSB0aGUgc2FtZSBzaGFwZSBJRC4gIFRoaXMg bWVhbnMgaW5saW5lIGNhY2hlcyBpbiBgaW5pdGlhbGl6ZWAgd2lsbCBoaXQgaW4gYm90aCBjYXNl cy4gIFRoaXMgY29udHJhc3RzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1 c2VzIHRoZSBjbGFzcyBhcyB0aGUgY2FjaGUga2V5LiAgSW4gb3RoZXIgd29yZHMsIHdpdGggb2Jq ZWN0IHNoYXBlcyB0aGUgYWJvdmUgY29kZSB3aWxsIGhpdCBpbmxpbmUgY2FjaGVzIHdoZXJlIHRo ZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgbWlzcy4KCklmIHBlcmZvcm1hbmNlIHRlc3Rp bmcgcmV2ZWFscyB0aGF0IGNhY2hlIGhpdHMgYXJlICpub3QqIHN1YnN0YW50aWFsbHkgaW1wcm92 ZWQsIHRoZW4gd2UgY2FuIHVzZSBzaGFwZXMgdG8gcmVjbGFpbSBtZW1vcnkgZnJvbSBgUkJhc2lj YC4gV2UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBlbmNvZGluZyB0aGUgY2xhc3Mgd2l0aGluIHRo ZSBzaGFwZSB0cmVlLiBUaGlzIHdpbGwgaGF2ZSBhbiBlcXVpdmFsZW50IGNhY2hlIGhpdCByYXRl IHRvIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBPbmNlIHRoZSBjbGFzcyBpcyBlbmNvZGVk IHdpdGhpbiB0aGUgc2hhcGUgdHJlZSwgd2UgY2FuIHJlbW92ZSB0aGUgY2xhc3MgcG9pbnRlciBm cm9tIGBSQmFzaWNgIGFuZCBlaXRoZXIgcmVjbGFpbSB0aGF0IG1lbW9yeSBvciBmcmVlIGl0IGZv ciBhbm90aGVyIHVzZS4KCiMjIyBEZWNyZWFzZXMgcnVudGltZSBjaGVja2luZwoKV2UgY2FuIGVu Y29kZSBhdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluc3RhbmNlIHZhcmlhYmxlcyBpbnRvIGFuIG9i amVjdCdzIHNoYXBlLiBDdXJyZW50bHksIHdlIGFsc28gaW5jbHVkZSBmcm96ZW4gd2l0aGluIHRo ZSBzaGFwZS4gVGhpcyBtZWFucyB3ZSBjYW4gbGltaXQgZnJvemVuIGNoZWNrcyB0byBvbmx5IGNh Y2hlIG1pc3Nlcy4KCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGU6CgpgYGBydWJ5CmNs YXNzIFRvdG8KICBkZWYgc2V0X2EKICAgIEBhID0gMSAjIGNhY2hlOiBzaGFwZTogMCwgbmV4dCBz aGFwZTogMSwgSVYgaWR4OiAwCiAgZW5kCmVuZAoKdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0 b3RvLnNldF9hICAgICAjIHNoYXBlIDEKCnRvdG8gPSBUb3RvLm5ldyAjIHNoYXBlIDAKdG90by5m cmVlemUgICAgIyBzaGFwZSAyCnRvdG8uc2V0X2EgICAgICMgQ2FjaGUgbWlzcywgRXhjZXB0aW9u IQpgYGAKCiFbXShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4 NTYwLzE2NzkyMDAwMS1jNGU2MzI2Yi0zYTNjLTQ4M2ItYTc5Ny05ZTAyMzE3NjQ3ZDcuc3ZnKQoK V2l0aG91dCBzaGFwZXMsIGFsbCBpbnN0YW5jZSB2YXJpYWJsZSBzZXRzIHJlcXVpcmUgY2hlY2tp bmcgdGhlIGZyb3plbiBzdGF0dXMgb2YgdGhlIG9iamVjdC4gV2l0aCBzaGFwZXMsIHdlIG9ubHkg bmVlZCB0byBjaGVjayB0aGUgZnJvemVuIHN0YXR1cyBvbiBjYWNoZSBtaXNzZXMuCgpXZSBjYW4g YWxzbyBlbGltaW5hdGUgZW1iZWRkZWQgYW5kIGV4dGVuZGVkIGNoZWNrcyB3aXRoIHRoZSBpbnRy b2R1Y3Rpb24gb2Ygb2JqZWN0IHNoYXBlcy4gQW55IHBhcnRpY3VsYXIgc2hhcGUgcmVwcmVzZW50 cyBhbiBvYmplY3QgdGhhdCBpcyBfZWl0aGVyXyBleHRlbmRlZCBvciBlbWJlZGRlZC4gSklUcyBj YW4gcG9zc2libHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmYWN0IGJ5IGdlbmVyYXRpbmcgc3Bl Y2lhbGl6ZWQgbWFjaGluZSBjb2RlIGJhc2VkIG9uIHRoZSBzaGFwZXMuIAogICAgCiMjIyBDbGFz cyBpbnN0YW5jZSB2YXJpYWJsZXMgY2FuIGJlIHN0b3JlZCBpbiBhbiBhcnJheQoKQ3VycmVudGx5 LCBgVF9DTEFTU2AgYW5kIGBUX01PRFVMRWAgaW5zdGFuY2VzIGNhbm5vdCB1c2UgdGhlIHNhbWUg SVYgaW5kZXggdGFibGUgb3B0aW1pemF0aW9uIHRoYXQgYFRfT0JKRUNUYCBpbnN0YW5jZXMgdXNl LiAgV2UgdGhpbmsgdGhhdCB0aGUgb2JqZWN0IHNoYXBlcyB0ZWNobmlxdWUgY2FuIGJlIGxldmVy YWdlZCBieSBjbGFzcyBpbnN0YW5jZXMgdG8gdXNlIGFycmF5cyBmb3IgY2xhc3MgaW5zdGFuY2Ug dmFyaWFibGUgc3RvcmFnZSBhbmQgbWF5IHBvc3NpYmx5IGxlYWQgdG8gYSByZWR1Y3Rpb24gaW4g bWVtb3J5IHVzYWdlICh0aG91Z2ggd2UgaGF2ZSB5ZXQgdG8gdGVzdCB0aGlzKS4KCiMjIEltcGxl bWVudGF0aW9uIERldGFpbHMKCltIZXJlXShodHRwczovL2dpdGh1Yi5jb20vamVtbWFpc3Nyb2Zm L3J1YnkvY29tbWl0LzRlOTVkMDE2NTRmMjRjZWZmNmM4MzMwY2Y0ZTVjN2RhYzUwNDczOWUpIGlz IGEgbGluayB0byBvdXIgY29kZSBzbyBmYXIuCgpBcyBtZW50aW9uZWQgZWFybGllciwgc2hhcGUg b2JqZWN0cyBmb3JtIGEgdHJlZSBkYXRhIHN0cnVjdHVyZS4gIEluIG9yZGVyIHRvIGxvb2sgdXAg dGhlIHNoYXBlIHF1aWNrbHksIHdlIGFsc28gc3RvcmUgdGhlIHNoYXBlcyBpbiBhIHdlYWsgYXJy YXkgdGhhdCBpcyBzdG9yZWQgb24gdGhlIFZNLiAgVGhlIElEIG9mIHRoZSBzaGFwZSBpcyB0aGUg aW5kZXggaW4gdG8gdGhlIGFycmF5LCBhbmQgdGhlIElEIGlzIHN0b3JlZCBvbiB0aGUgb2JqZWN0 LgoKRm9yIGBUX09CSkVDVGAgb2JqZWN0cywgd2Ugc3RvcmUgdGhlIHNoYXBlIElEIGluIHRoZSBv YmplY3QncyBoZWFkZXIuIE9uIDY0IGJpdCBzeXN0ZW1zLCB0aGUgdXBwZXIgMzIgYml0cyBhcmUg dXNlZCBieSBSYWN0b3JzLiAgV2Ugd2FudCBvYmplY3Qgc2hhcGVzIHRvIGJlIGVuYWJsZWQgb24g MzIgYml0IHN5c3RlbXMgYW5kIDY0IGJpdCBzeXN0ZW1zIHNvIHRoYXQgbGltaXRzIHVzIHRvIHRo ZSBib3R0b20gMzIgYml0cyBvZiB0aGUgT2JqZWN0IGhlYWRlci4gIFRoZSB0b3AgMjAgYml0cyBm b3IgYFRfT0JKRUNUYCBvYmplY3RzIHdhcyB1bnVzZWQsIHNvIHdlIHVzZWQgdGhlIHRvcCAxNiBi aXRzIGZvciB0aGUgc2hhcGUgaWQuICBXZSBjaG9zZSB0aGUgdG9wIDE2IGJpdHMgYmVjYXVzZSB0 aGlzIGFsbG93cyB1cyB0byB1c2UgYHVpbnQxNl90YCBhbmQgbWFza2luZyB0aGUgaGVhZGVyIGJp dHMgaXMgZWFzaWVyLgoKVGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgbGltaXRzIHVzIHRvIH42 NWsgc2hhcGVzLiBXZSBtZWFzdXJlZCB0aGUgbnVtYmVyIG9mIHNoYXBlcyB1c2VkIG9uIGEgc2lt cGxlIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlzY291cnNlKSBh cHBsaWNhdGlvbiAofjMuNWspLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3Vi dW4vcmFpbHNiZW5jaCkgKH40ayksIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGgncyB0ZXN0IHN1aXRl ICh+NDBrKS4gQWNjb3JkaW5nbHksIHdlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGdhcmJhZ2UgY29s bGVjdGlvbiBvbiBvYmplY3Qgc2hhcGVzIHNvIHdlIGNhbiByZWN5Y2xlIHNoYXBlIElEcyB3aGlj aCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4gIFdlIGFyZSBjdXJyZW50bHkgd29ya2luZyBvbiBzaGFw ZSBHQy4KCkV2ZW4gdGhvdWdoIGl0J3MgdW5saWtlbHksIGl0J3Mgc3RpbGwgcG9zc2libGUgZm9y IGFuIGFwcGxpY2F0aW9uIHRvIHJ1biBvdXQgb2Ygc2hhcGVzLiBPbmNlIGFsbCBzaGFwZSBJRHMg YXJlIGluIHVzZSwgYW55IG9iamVjdHMgdGhhdCBuZWVkIG5ldyBzaGFwZSBJRHMgd2lsbCBuZXZl ciBoaXQgb24gaW5saW5lIGNhY2hlcy4KCiMjIEV2YWx1YXRpb24KCldlIGhhdmUgc28gZmFyIHRl c3RlZCB0aGlzIGJyYW5jaCB3aXRoIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNj b3Vyc2UvZGlzY291cnNlKSwgW1JhaWxzQmVuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9rMGt1YnVu L3JhaWxzYmVuY2gpIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGguIFdlIHBsYW4gdG8gdGVzdCB0aGlz IGJyYW5jaCBtb3JlIGJyb2FkbHkgYWdhaW5zdCBzZXZlcmFsIG9wZW4gc291cmNlIFJ1YnkgYW5k IFJhaWxzIGFwcGxpY2F0aW9ucy4gCgpCZWZvcmUgd2UgY29uc2lkZXIgdGhpcyBicmFuY2ggdG8g YmUgcmVhZHkgZm9yIGZvcm1hbCByZXZpZXcsIHdlIHdhbnQgdGhlIHJ1bnRpbWUgcGVyZm9ybWFu Y2UgYW5kIG1lbW9yeSB1c2FnZSBvZiB0aGVzZSBiZW5jaG1hcmtzIHRvIGJlIGVxdWl2YWxlbnQg b3IgYmV0dGVyIHRoYW4gaXQgaXMgY3VycmVudGx5LiBJbiBvdXIgb3BpbmlvbiwgZXZlbiB3aXRo IGVxdWl2YWxlbnQgcnVudGltZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlLCB0aGUgZnV0 dXJlIGJlbmVmaXRzIG9mIHRoaXMgYXBwcm9hY2ggbWFrZSB0aGUgY2hhbmdlIHNlZW0gd29ydGh3 aGlsZS4KCiMjIEZlZWRiYWNrCgpJZiB5b3UgaGF2ZSBhbnkgZmVlZGJhY2ssIGNvbW1lbnRzLCBv ciBxdWVzdGlvbnMsIHBsZWFzZSBsZXQgdXMga25vdyBhbmQgd2UnbGwgZG8gb3VyIGJlc3QgdG8g YWRkcmVzcyBpdC4gVGhhbmsgeW91IQoKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcv Cg==