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=-3.5 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, T_SCC_BODY_TEXT_LINE,T_SPF_PERMERROR,UNPARSEABLE_RELAY,URIBL_GREY shortcircuit=no autolearn=ham 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 58D111F54E for ; Wed, 17 Aug 2022 19:03:48 +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="o6REJUbu"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id A638E120E0C; Thu, 18 Aug 2022 04:03:41 +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 C5B99120DDC for ; Thu, 18 Aug 2022 04:03:39 +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:cc; s=smtpapi; bh=fUOEZ2TH89YdOLk1ED9JJqEWEWdu01mTwcYBFmXbdOU=; b=o6REJUbuIFb+PpnZaQzi2XKh/H71a4Mjbl3MrxgBr9WBKJsBx5DG9MPAYd9mAiL3chqX W0ADH0PjXLWpXKrz/nVatutGS9DPfZUWIlMdub1wxHIygYVsSi/gwcAFjQjQDpj46EoxRV SBSdG1aw5bKqSZEY0MZ98lXmwp2t08iHk= Received: by filterdrecv-canary-c58b8c65-pts5n with SMTP id filterdrecv-canary-c58b8c65-pts5n-1-62FD3B85-24 2022-08-17 19:03:33.335671296 +0000 UTC m=+2329127.178374734 Received: from herokuapp.com (unknown) by geopod-ismtpd-3-1 (SG) with ESMTP id dDm6vxNRTk22mQSfgI9F-Q for ; Wed, 17 Aug 2022 19:03:33.258 +0000 (UTC) Date: Wed, 17 Aug 2022 19:03:33 +0000 (UTC) From: "jemmai (Jemma Issroff)" 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: jemmai 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: 85927 X-SG-EID: =?us-ascii?Q?F18P+2W1KnHe6ISASa+61nUK3i7mN03gxrUl5OPiI2ZTtcWzec3HAg3iwLkXVU?= =?us-ascii?Q?w9NVOsENbVlMKtc9X75yTo7Os1jg2OTxwg8Q8cw?= =?us-ascii?Q?8BUJUt2HJSkHxElUw3Er7gwIaK3ILHXsYqBA8eA?= =?us-ascii?Q?3yKR7AoUycaDgsim6ifTSL8jL8Xpx3FDn=2FQC9pg?= =?us-ascii?Q?FmbMlaagO4PxZmNKrUvhuG8sxuVmAMkrtEalvu3?= =?us-ascii?Q?3FmmPjSjruIkkd1c=2FychB6L39BkpXzUfHAEo8Uu?= =?us-ascii?Q?lrJzjLgtbx8PUAt7ZtxTA=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109519 Subject: [ruby-core:109519] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgamVtbWFpIChKZW1tYSBJc3Nyb2ZmKS4K Cgo+IEkgdGhpbmsgaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gb3BlbiBhIGRyYWZ0IHB1bGwg cmVxdWVzdCBzbyB0aGF0IGl0J3MgZWFzaWVyIHRvIGxvb2sgYXQgdGhlIGRpZmYgYW5kIGNvbW1l bnQgb24gaXQuCgpHb29kIGlkZWEsIFtoZXJlIGlzIGEgZHJhZnQgUFJdKGh0dHBzOi8vZ2l0aHVi LmNvbS9ydWJ5L3J1YnkvcHVsbC82MjQ4KSBhbmQgdXBkYXRlZCBpdCBhYm92ZSBhcyB3ZWxsCgo+ IENhbiB5b3UgZ3V5cyBpbnZlc3RpZ2F0ZSBhIGJpdCB3aHkgdGhlcmUgYXJlIGxhcmdlIHNsb3dk b3ducyB3aXRoIFlKSVQ/CgpXZSByZWFsaXplZCB3ZSBhY2NpZGVudGFsbHkgcmFuIHRoZXNlIGlu IGRlYnVnIG1vZGUuIFdlIHdpbGwgZ2V0IG5ldyBudW1iZXJzIGFuZCByZXBvc3QgdGhlbSwgc29y cnkgYWJvdXQgdGhhdCEKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K RmVhdHVyZSAjMTg3NzY6IE9iamVjdCBTaGFwZXMKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcv aXNzdWVzLzE4Nzc2I2NoYW5nZS05ODY4OAoKKiBBdXRob3I6IGplbW1haSAoSmVtbWEgSXNzcm9m ZikKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPYmplY3QgU2hhcGVzIGltcGxlbWVudGF0aW9uCgpBYXJv biBQYXR0ZXJzb24sIEVpbGVlbiBVY2hpdGVsbGUgYW5kIEkgaGF2ZSBiZWVuIHdvcmtpbmcgb24g YW4gaW1wbGVtZW50YXRpb24gb2YgT2JqZWN0IFNoYXBlcyBmb3IgUnVieS4gIFdlIGFyZSBmaWxp bmcgYSB0aWNrZXQgdG8gc2hhcmUgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nLCBhcyB3ZWxsIGFzIGdl dCBmZWVkYmFjayBvbiB0aGUgcHJvamVjdCBpbiBpdHMgY3VycmVudCBzdGF0ZS4KCldlIGhvcGUg dG8gZXZlbnR1YWxseSBzdWJtaXQgdGhlIGZpbmFsaXplZCBwcm9qZWN0IHVwc3RyZWFtIGFmdGVy IHZlcmlmeWluZyBlZmZpY2FjeS4KCiMjIFdoYXQgYXJlIE9iamVjdCBTaGFwZXM/CgpPYmplY3Qg c2hhcGVzIGFyZSBhIHRlY2huaXF1ZSBmb3IgcmVwcmVzZW50aW5nIHByb3BlcnRpZXMgb2YgYW4g b2JqZWN0LiBPdGhlciBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMsIGluY2x1ZGluZyBbVHJ1ZmZs ZVJ1YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcmFjbGUvdHJ1ZmZsZXJ1YnkpIGFuZCBbVjhdKGh0 dHBzOi8vdjguZGV2LyksIHVzZSB0aGlzIHRlY2huaXF1ZS4gQ2hyaXMgU2VhdG9uLCB0aGUgY3Jl YXRvciBvZiBUcnVmZmxlUnVieSwgZGlzY3Vzc2VkIG9iamVjdCBzaGFwZXMgaW4gaGlzIFtSdWJ5 S2FpZ2kgMjAyMSBLZXlub3RlXShodHRwczovL3J1YnlrYWlnaS5vcmcvMjAyMS10YWtlb3V0L3By ZXNlbnRhdGlvbnMvY2hyaXNnc2VhdG9uLmh0bWwpIGFuZCBNYXhpbWUgQ2hldmFsaWVyLUJvaXN2 ZXJ0IGRpc2N1c3NlZCB0aGUgaW1wbGljYXRpb25zIGZvciBZSklUIGluIHRoZSBsYXR0ZXIgcGFy dCBvZiBbaGVyIHRhbGsgYXQgUnVieUthaWdpIDIwMjFdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29t L3dhdGNoP3Y9UEJWTGYzeWZNczgmdD0xMTAwcykuIFRoZSBvcmlnaW5hbCBpZGVhIG9mIG9iamVj dCBzaGFwZXMgW29yaWdpbmF0ZXMgZnJvbSB0aGUgU2VsZiBsYW5ndWFnZV0oaHR0cHM6Ly9iaWJs aW9ncmFwaHkuc2VsZmxhbmd1YWdlLm9yZy9fc3RhdGljL2ltcGxlbWVudGF0aW9uLnBkZiksIHdo aWNoIGlzIGNvbnNpZGVyZWQgYSBkaXJlY3QgZGVzY2VuZGFudCBvZiBTbWFsbHRhbGsuCgpFYWNo IHNoYXBlIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBzZXQgb2YgYXR0cmlidXRlcyAoaW5zdGFuY2Ug dmFyaWFibGVzIGFuZCBvdGhlciBwcm9wZXJ0aWVzKSBhbmQgdGhlaXIgdmFsdWVzLiBJbiBvdXIg aW1wbGVtZW50YXRpb24sIGFsbCBvYmplY3RzIGhhdmUgYSBzaGFwZS4gVGhlIHNoYXBlcyBhcmUg bm9kZXMgaW4gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiBFdmVyeSBlZGdlIGluIHRoZSB0cmVlIHJl cHJlc2VudHMgYW4gYXR0cmlidXRlIHRyYW5zaXRpb24uCgpNb3JlIHNwZWNpZmljYWxseSwgc2V0 dGluZyBhbiBpbnN0YW5jZSB2YXJpYWJsZSBvbiBhbiBpbnN0YW5jZSBvZiBhbiBvYmplY3QgY3Jl YXRlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gdGhlIGluc3RhbmNlJ3MgY3VycmVudCBzaGFwZS4g VGhpcyBpcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgc2hhcGUgdG8gYW5vdGhlci4gVGhlIGVkZ2Ug cmVwcmVzZW50cyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBzZXQuCgpGb3IgZXhhbXBs ZToKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRo aXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0 aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBiID0gMiAjIFRyYW5z aXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCAyKQogIGVuZAplbmQKCmZvbyA9 IEZvby5uZXcKYGBgCgpXaGVuIGBGb29gIGlzIGludGlhbGl6ZWQsIGl0cyBzaGFwZSBpcyB0aGUg cm9vdCBzaGFwZSB3aXRoIElEIDAuICBUaGUgcm9vdCBzaGFwZSByZXByZXNlbnRzIGFuIGVtcHR5 IG9iamVjdCB3aXRoIG5vIGluc3RhbmNlIHZhcmlhYmxlcy4gRWFjaCB0aW1lIGFuIGluc3RhbmNl IHZhcmlhYmxlIGlzIHNldCBvbiBgZm9vYCwgdGhlIHNoYXBlIG9mIHRoZSBpbnN0YW5jZSBjaGFu Z2VzLiBJdCBmaXJzdCB0cmFuc2l0aW9ucyB3aXRoIGBAYWAgdG8gYSBzaGFwZSB3aXRoIElEIDEs IGFuZCB0aGVuIHRyYW5zaXRpb25zIHdpdGggYEBiYCB0byBhIHNoYXBlIHdpdGggSUQgMi4gSWYg YEBhYCBpcyB0aGVuIHNldCB0byBhIGRpZmZlcmVudCB2YWx1ZSwgaXRzIHNoYXBlIHdpbGwgcmVt YWluIHRoZSBzaGFwZSB3aXRoIElEIDIsIHNpbmNlIHRoaXMgc2hhcGUgYWxyZWFkeSBpbmNsdWRl cyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgYEBhYC4gIAoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMu Z2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTE4MzYwLTBhNmM5MWFhLTI1ODctNDhj Yi04ZmYyLTdmM2E5NTgzMjg4ZS5zdmcpCgpUaGVyZSBpcyBvbmUgZ2xvYmFsIHNoYXBlIHRyZWUg YW5kIG9iamVjdHMgd2hpY2ggdW5kZXJnbyB0aGUgc2FtZSBzaGFwZSB0cmFuc2l0aW9ucyBpbiB0 aGUgc2FtZSBvcmRlciB3aWxsIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGZpbmFsIHNoYXBlLgoKRm9y IGluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgY2xhc3MgYEJhcmAgZGVmaW5lZCBhcyBmb2xsb3dzLCB0 aGUgZmlyc3QgdHJhbnNpdGlvbiBvbiBgQmFyLm5ld2AgdGhyb3VnaCB0aGUgaW5zdGFuY2UgdmFy aWFibGUgYEBhYCB3aWxsIGJlIHRoZSBzYW1lIGFzIGBGb28ubmV3YCdzIGZpcnN0IHRyYW5zaXRp b246CgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0 aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNp dGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpCiAgICBAYiA9IDIgIyBUcmFu c2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgMikKICBlbmQKZW5kCgpjbGFz cyBCYXIKICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0 aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIHNoYXBlIGRl ZmluZWQgZWFybGllciB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBjID0gMSAjIFRyYW5zaXRpb25z IHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBjIChJRCAzKQogICAgQGIgPSAxICMgVHJhbnNpdGlv bnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDQpCiAgZW5kCmVuZAoKZm9vID0gRm9v Lm5ldyAjIGJsdWUgaW4gdGhlIGRpYWdyYW0KYmFyID0gQmFyLm5ldyAjIHJlZCBpbiB0aGUgZGlh Z3JhbQpgYGAKCkluIHRoZSBkaWFncmFtIGJlbG93LCBwdXJwbGUgcmVwcmVzZW50cyBzaGFyZWQg dHJhbnNpdGlvbnMsIGJsdWUgcmVwcmVzZW50cyB0cmFuc2l0aW9ucyBmb3Igb25seSBgZm9vYCwg YW5kIHJlZCByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBiYXJgLgoKIVtdKGh0dHBz Oi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTE4ODk5LWYx YTZmMzQ0LWFlNWUtNGRjMC1iMTdhLWZiMTU2ZDFkNTUwZi5zdmcpCgojIyMgQ2FjaGUgc3RydWN0 dXJlCgpGb3IgaW5zdGFuY2UgdmFyaWFibGUgd3JpdGVycywgdGhlIGN1cnJlbnQgc2hhcGUgSUQs IHRoZSBzaGFwZSBJRCB0aGF0IGl2YXIgd3JpdGUgd291bGQgdHJhbnNpdGlvbiB0byBhbmQgaW5z dGFuY2UgdmFyaWFibGUgaW5kZXggYXJlIGFsbCBzdG9yZWQgaW4gdGhlIGlubGluZSBjYWNoZS4g VGhlIHNoYXBlIElEIGlzIHRoZSBrZXkgdG8gdGhlIGNhY2hlLgoKRm9yIGluc3RhbmNlIHZhcmlh YmxlIHJlYWRlcnMsIHRoZSBzaGFwZSBJRCBhbmQgaW5zdGFuY2UgdmFyaWFibGUgaW5kZXggYXJl IHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hlLiAgQWdhaW4sIHRoZSBzaGFwZSBJRCBpcyB0aGUg Y2FjaGUga2V5LgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6ZQogICAgQGEgPSAx ICMgSUMgc2hhcGVfaWQ6IDAsIG5leHQgc2hhcGU6IDEsIGl2IGluZGV4IDAKICAgIEBiID0gMSAj IElDIHNoYXBlX2lkOiAxLCBuZXh0IHNoYXBlOiAyLCBpdiBpbmRleCAxCiAgZW5kCiAgICAKICBk ZWYgYQogICAgQGEgIyBJQyBzaGFwZV9pZDogMiwgaXYgaW5kZXggMAogIGVuZAplbmQKYGBgCgoj IyBSYXRpb25hbGUKCldlIHRoaW5rIHRoYXQgYW4gb2JqZWN0IHNoYXBlIGltcGxlbWVudGF0aW9u IHdpbGwgc2ltcGxpZnkgY2FjaGUgY2hlY2tzLCBpbmNyZWFzZSBpbmxpbmUgY2FjaGUgaGl0cywg ZGVjcmVhc2UgcnVudGltZSBjaGVja3MsIGFuZCBlbmFibGUgb3RoZXIgcG90ZW50aWFsIGZ1dHVy ZSBvcHRpbWl6YXRpb25zLiBUaGVzZSBhcmUgYWxsIGV4cGxhaW5lZCBiZWxvdy4gCgojIyMgU2lt cGxpZnkgY2FjaGluZwoKVGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50YXRpb24gZGVwZW5kcyBv biB0aGUgY2xhc3Mgb2YgdGhlIHJlY2VpdmVyLiBTaW5jZSB0aGUgYWRkcmVzcyBvZiB0aGUgY2xh c3MgY2FuIGJlIHJldXNlZCwgdGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50YXRpb24gYWxzbyBk ZXBlbmRzIG9uIGFuIGluY3JlbWVudGluZyBzZXJpYWwgbnVtYmVyIHNldCBvbiB0aGUgY2xhc3Mg KHRoZSBjbGFzcyBzZXJpYWwpLiAgVGhlIHNoYXBlIGltcGxlbWVudGF0aW9uIGhhcyBubyBzdWNo IGRlcGVuZGVuY3kuIEl0IG9ubHkgcmVxdWlyZXMgY2hlY2tpbmcgdGhlIHNoYXBlIElEIHRvIGRl dGVybWluZSBpZiB0aGUgY2FjaGUgaXMgdmFsaWQuCgojIyMgQ2FjaGUgaGl0cwoKT2JqZWN0cyB0 aGF0IHNldCBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIG9yZGVyIGNhbiBzaGFyZSBzaGFwZXMuICBG b3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgSG9nZQogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1 cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAx ICMgVHJhbnNpdGlvbnMgdG8gdGhlIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFtZWQgQGEKICAgIEBi ID0gMiAjIFRyYW5zaXRpb25zIHRvIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFtZWQgQGIKICBlbmQK ZW5kCgpjbGFzcyBGdWdhIDwgSG9nZTsgZW5kCgpob2dlID0gSG9nZS5uZXcKZnVnYSA9IEZ1Z2Eu bmV3CmBgYAoKSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBpbnN0YW5jZXMgYGhvZ2VgIGFuZCBg ZnVnYWAgd2lsbCBzaGFyZSB0aGUgc2FtZSBzaGFwZSBJRC4gIFRoaXMgbWVhbnMgaW5saW5lIGNh Y2hlcyBpbiBgaW5pdGlhbGl6ZWAgd2lsbCBoaXQgaW4gYm90aCBjYXNlcy4gIFRoaXMgY29udHJh c3RzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIHRoZSBjbGFzcyBh cyB0aGUgY2FjaGUga2V5LiAgSW4gb3RoZXIgd29yZHMsIHdpdGggb2JqZWN0IHNoYXBlcyB0aGUg YWJvdmUgY29kZSB3aWxsIGhpdCBpbmxpbmUgY2FjaGVzIHdoZXJlIHRoZSBjdXJyZW50IGltcGxl bWVudGF0aW9uIHdpbGwgbWlzcy4KCklmIHBlcmZvcm1hbmNlIHRlc3RpbmcgcmV2ZWFscyB0aGF0 IGNhY2hlIGhpdHMgYXJlICpub3QqIHN1YnN0YW50aWFsbHkgaW1wcm92ZWQsIHRoZW4gd2UgY2Fu IHVzZSBzaGFwZXMgdG8gcmVjbGFpbSBtZW1vcnkgZnJvbSBgUkJhc2ljYC4gV2UgY2FuIGFjY29t cGxpc2ggdGhpcyBieSBlbmNvZGluZyB0aGUgY2xhc3Mgd2l0aGluIHRoZSBzaGFwZSB0cmVlLiBU aGlzIHdpbGwgaGF2ZSBhbiBlcXVpdmFsZW50IGNhY2hlIGhpdCByYXRlIHRvIHRoZSBjdXJyZW50 IGltcGxlbWVudGF0aW9uLiBPbmNlIHRoZSBjbGFzcyBpcyBlbmNvZGVkIHdpdGhpbiB0aGUgc2hh cGUgdHJlZSwgd2UgY2FuIHJlbW92ZSB0aGUgY2xhc3MgcG9pbnRlciBmcm9tIGBSQmFzaWNgIGFu ZCBlaXRoZXIgcmVjbGFpbSB0aGF0IG1lbW9yeSBvciBmcmVlIGl0IGZvciBhbm90aGVyIHVzZS4K CiMjIyBEZWNyZWFzZXMgcnVudGltZSBjaGVja2luZwoKV2UgY2FuIGVuY29kZSBhdHRyaWJ1dGVz IHRoYXQgYXJlbid0IGluc3RhbmNlIHZhcmlhYmxlcyBpbnRvIGFuIG9iamVjdCdzIHNoYXBlLiBD dXJyZW50bHksIHdlIGFsc28gaW5jbHVkZSBmcm96ZW4gd2l0aGluIHRoZSBzaGFwZS4gVGhpcyBt ZWFucyB3ZSBjYW4gbGltaXQgZnJvemVuIGNoZWNrcyB0byBvbmx5IGNhY2hlIG1pc3Nlcy4KCkZv ciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGU6CgpgYGBydWJ5CmNsYXNzIFRvdG8KICBkZWYg c2V0X2EKICAgIEBhID0gMSAjIGNhY2hlOiBzaGFwZTogMCwgbmV4dCBzaGFwZTogMSwgSVYgaWR4 OiAwCiAgZW5kCmVuZAoKdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0b3RvLnNldF9hICAgICAj IHNoYXBlIDEKCnRvdG8gPSBUb3RvLm5ldyAjIHNoYXBlIDAKdG90by5mcmVlemUgICAgIyBzaGFw ZSAyCnRvdG8uc2V0X2EgICAgICMgQ2FjaGUgbWlzcywgRXhjZXB0aW9uIQpgYGAKCiFbXShodHRw czovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYwLzE2NzkyMDAwMS1j NGU2MzI2Yi0zYTNjLTQ4M2ItYTc5Ny05ZTAyMzE3NjQ3ZDcuc3ZnKQoKV2l0aG91dCBzaGFwZXMs IGFsbCBpbnN0YW5jZSB2YXJpYWJsZSBzZXRzIHJlcXVpcmUgY2hlY2tpbmcgdGhlIGZyb3plbiBz dGF0dXMgb2YgdGhlIG9iamVjdC4gV2l0aCBzaGFwZXMsIHdlIG9ubHkgbmVlZCB0byBjaGVjayB0 aGUgZnJvemVuIHN0YXR1cyBvbiBjYWNoZSBtaXNzZXMuCgpXZSBjYW4gYWxzbyBlbGltaW5hdGUg ZW1iZWRkZWQgYW5kIGV4dGVuZGVkIGNoZWNrcyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygb2Jq ZWN0IHNoYXBlcy4gQW55IHBhcnRpY3VsYXIgc2hhcGUgcmVwcmVzZW50cyBhbiBvYmplY3QgdGhh dCBpcyBfZWl0aGVyXyBleHRlbmRlZCBvciBlbWJlZGRlZC4gSklUcyBjYW4gcG9zc2libHkgdGFr ZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmYWN0IGJ5IGdlbmVyYXRpbmcgc3BlY2lhbGl6ZWQgbWFjaGlu ZSBjb2RlIGJhc2VkIG9uIHRoZSBzaGFwZXMuIAogICAgCiMjIyBDbGFzcyBpbnN0YW5jZSB2YXJp YWJsZXMgY2FuIGJlIHN0b3JlZCBpbiBhbiBhcnJheQoKQ3VycmVudGx5LCBgVF9DTEFTU2AgYW5k IGBUX01PRFVMRWAgaW5zdGFuY2VzIGNhbm5vdCB1c2UgdGhlIHNhbWUgSVYgaW5kZXggdGFibGUg b3B0aW1pemF0aW9uIHRoYXQgYFRfT0JKRUNUYCBpbnN0YW5jZXMgdXNlLiAgV2UgdGhpbmsgdGhh dCB0aGUgb2JqZWN0IHNoYXBlcyB0ZWNobmlxdWUgY2FuIGJlIGxldmVyYWdlZCBieSBjbGFzcyBp bnN0YW5jZXMgdG8gdXNlIGFycmF5cyBmb3IgY2xhc3MgaW5zdGFuY2UgdmFyaWFibGUgc3RvcmFn ZSBhbmQgbWF5IHBvc3NpYmx5IGxlYWQgdG8gYSByZWR1Y3Rpb24gaW4gbWVtb3J5IHVzYWdlICh0 aG91Z2ggd2UgaGF2ZSB5ZXQgdG8gdGVzdCB0aGlzKS4KCiMjIEltcGxlbWVudGF0aW9uIERldGFp bHMKCltIZXJlXShodHRwczovL2dpdGh1Yi5jb20vamVtbWFpc3Nyb2ZmL3J1YnkvY29tbWl0LzRl OTVkMDE2NTRmMjRjZWZmNmM4MzMwY2Y0ZTVjN2RhYzUwNDczOWUpIGlzIGEgbGluayB0byBvdXIg Y29kZSBzbyBmYXIuCgpBcyBtZW50aW9uZWQgZWFybGllciwgc2hhcGUgb2JqZWN0cyBmb3JtIGEg dHJlZSBkYXRhIHN0cnVjdHVyZS4gIEluIG9yZGVyIHRvIGxvb2sgdXAgdGhlIHNoYXBlIHF1aWNr bHksIHdlIGFsc28gc3RvcmUgdGhlIHNoYXBlcyBpbiBhIHdlYWsgYXJyYXkgdGhhdCBpcyBzdG9y ZWQgb24gdGhlIFZNLiAgVGhlIElEIG9mIHRoZSBzaGFwZSBpcyB0aGUgaW5kZXggaW4gdG8gdGhl IGFycmF5LCBhbmQgdGhlIElEIGlzIHN0b3JlZCBvbiB0aGUgb2JqZWN0LgoKRm9yIGBUX09CSkVD VGAgb2JqZWN0cywgd2Ugc3RvcmUgdGhlIHNoYXBlIElEIGluIHRoZSBvYmplY3QncyBoZWFkZXIu IE9uIDY0IGJpdCBzeXN0ZW1zLCB0aGUgdXBwZXIgMzIgYml0cyBhcmUgdXNlZCBieSBSYWN0b3Jz LiAgV2Ugd2FudCBvYmplY3Qgc2hhcGVzIHRvIGJlIGVuYWJsZWQgb24gMzIgYml0IHN5c3RlbXMg YW5kIDY0IGJpdCBzeXN0ZW1zIHNvIHRoYXQgbGltaXRzIHVzIHRvIHRoZSBib3R0b20gMzIgYml0 cyBvZiB0aGUgT2JqZWN0IGhlYWRlci4gIFRoZSB0b3AgMjAgYml0cyBmb3IgYFRfT0JKRUNUYCBv YmplY3RzIHdhcyB1bnVzZWQsIHNvIHdlIHVzZWQgdGhlIHRvcCAxNiBiaXRzIGZvciB0aGUgc2hh cGUgaWQuICBXZSBjaG9zZSB0aGUgdG9wIDE2IGJpdHMgYmVjYXVzZSB0aGlzIGFsbG93cyB1cyB0 byB1c2UgYHVpbnQxNl90YCBhbmQgbWFza2luZyB0aGUgaGVhZGVyIGJpdHMgaXMgZWFzaWVyLgoK VGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgbGltaXRzIHVzIHRvIH42NWsgc2hhcGVzLiBXZSBt ZWFzdXJlZCB0aGUgbnVtYmVyIG9mIHNoYXBlcyB1c2VkIG9uIGEgc2ltcGxlIFtEaXNjb3Vyc2Vd KGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlzY291cnNlKSBhcHBsaWNhdGlvbiAofjMu NWspLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3VidW4vcmFpbHNiZW5jaCkg KH40ayksIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGgncyB0ZXN0IHN1aXRlICh+NDBrKS4gQWNjb3Jk aW5nbHksIHdlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBvYmpl Y3Qgc2hhcGVzIHNvIHdlIGNhbiByZWN5Y2xlIHNoYXBlIElEcyB3aGljaCBhcmUgbm8gbG9uZ2Vy IGluIHVzZS4gIFdlIGFyZSBjdXJyZW50bHkgd29ya2luZyBvbiBzaGFwZSBHQy4KCkV2ZW4gdGhv dWdoIGl0J3MgdW5saWtlbHksIGl0J3Mgc3RpbGwgcG9zc2libGUgZm9yIGFuIGFwcGxpY2F0aW9u IHRvIHJ1biBvdXQgb2Ygc2hhcGVzLiBPbmNlIGFsbCBzaGFwZSBJRHMgYXJlIGluIHVzZSwgYW55 IG9iamVjdHMgdGhhdCBuZWVkIG5ldyBzaGFwZSBJRHMgd2lsbCBuZXZlciBoaXQgb24gaW5saW5l IGNhY2hlcy4KCiMjIEV2YWx1YXRpb24KCldlIGhhdmUgc28gZmFyIHRlc3RlZCB0aGlzIGJyYW5j aCB3aXRoIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlzY291cnNl KSwgW1JhaWxzQmVuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9rMGt1YnVuL3JhaWxzYmVuY2gpIGFu ZCBTaG9waWZ5J3MgbW9ub2xpdGguIFdlIHBsYW4gdG8gdGVzdCB0aGlzIGJyYW5jaCBtb3JlIGJy b2FkbHkgYWdhaW5zdCBzZXZlcmFsIG9wZW4gc291cmNlIFJ1YnkgYW5kIFJhaWxzIGFwcGxpY2F0 aW9ucy4gCgpCZWZvcmUgd2UgY29uc2lkZXIgdGhpcyBicmFuY2ggdG8gYmUgcmVhZHkgZm9yIGZv cm1hbCByZXZpZXcsIHdlIHdhbnQgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1 c2FnZSBvZiB0aGVzZSBiZW5jaG1hcmtzIHRvIGJlIGVxdWl2YWxlbnQgb3IgYmV0dGVyIHRoYW4g aXQgaXMgY3VycmVudGx5LiBJbiBvdXIgb3BpbmlvbiwgZXZlbiB3aXRoIGVxdWl2YWxlbnQgcnVu dGltZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlLCB0aGUgZnV0dXJlIGJlbmVmaXRzIG9m IHRoaXMgYXBwcm9hY2ggbWFrZSB0aGUgY2hhbmdlIHNlZW0gd29ydGh3aGlsZS4KCiMjIEZlZWRi YWNrCgpJZiB5b3UgaGF2ZSBhbnkgZmVlZGJhY2ssIGNvbW1lbnRzLCBvciBxdWVzdGlvbnMsIHBs ZWFzZSBsZXQgdXMga25vdyBhbmQgd2UnbGwgZG8gb3VyIGJlc3QgdG8gYWRkcmVzcyBpdC4gVGhh bmsgeW91IQoKLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpvYmplY3Qt c2hhcGVzLnBhdGNoICgxODAgS0IpCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwo=