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_MED,SPF_HELO_NONE, T_SCC_BODY_TEXT_LINE,T_SPF_PERMERROR,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 A97241F54E for ; Wed, 17 Aug 2022 20:33:00 +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="eiFviyyk"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 508AE121139; Thu, 18 Aug 2022 05:32:55 +0900 (JST) Received: from o1678948x4.outbound-mail.sendgrid.net (o1678948x4.outbound-mail.sendgrid.net [167.89.48.4]) by neon.ruby-lang.org (Postfix) with ESMTPS id AF8B8121177 for ; Thu, 18 Aug 2022 05:32:51 +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=8NLKnXCxBgaxA5RYeDPQn6GIsgZo3kTzQE3hyrES9Aw=; b=eiFviyykEiOLc0ITsNxfhtfUCGE5JAAdVrI0KmhcHpIxf6YWWtQNwAdFNtU08BDE19on vahBFVErlD8m4hsseh6mnPJ+xt0jY0mdHXelAT5SwoIuCYmK6F2DdgiuBozi++iq+SZnRb EKb9nlV2CP5IpHRhd5XGc1mWYC1IRBLR8= Received: by filterdrecv-7787b7f4d9-79fbv with SMTP id filterdrecv-7787b7f4d9-79fbv-1-62FD506C-18 2022-08-17 20:32:44.215578227 +0000 UTC m=+2334402.614879444 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-1 (SG) with ESMTP id c3srLKwXTyyNLviJpB4wzA for ; Wed, 17 Aug 2022 20:32:44.204 +0000 (UTC) Date: Wed, 17 Aug 2022 20:32:44 +0000 (UTC) From: "maximecb (Maxime Chevalier-Boisvert)" 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: maximecb 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: 85929 X-SG-EID: =?us-ascii?Q?zIopk+GYrfxaFZKR2ztRFb8ZuWMKjJeXK89gL2DuKjDTCcLghUd1QuIXZZobz3?= =?us-ascii?Q?Z1at4TymivivM=2FBXJOZa0t64dFZwPq5ijbJTlRa?= =?us-ascii?Q?mYCMyTFyPiKPOHx+yu5IXhaBmFqjlzwE35ykVzI?= =?us-ascii?Q?pQYbmDcuqVTU5+7b4+5ZqQSIw7opTmpd+1R0GTL?= =?us-ascii?Q?xnu5yCGwtDWYyGo2oYbsF5KWxGsuDh3zMQsJhlR?= =?us-ascii?Q?RVJw=2FsSo5jspzoJDok+XB9Pyv+Nhmrz8W0y4oPE?= =?us-ascii?Q?59hMp=2F9IfZBx=2Fu2e8kKvBFGixydRWNFDN8DIZL8?= =?us-ascii?Q?MKQ=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109521 Subject: [ruby-core:109521] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF4aW1lY2IgKE1heGltZSBDaGV2YWxp ZXItQm9pc3ZlcnQpLgoKCkl0J3MgdW5mb3J0dW5hdGUgdGhhdCB0aGVyZSBhcmUgc3BpbGxzIHRo ZXJlIGFuZCB0aGVyZSBtaWdodCBiZSB3YXlzIHRvIHJlZHVjZSB0aGF0IGJ5IHJlb3JnYW5pemlu ZyB0aGUgY29kZSBhIGJpdCwgYnV0IEkgd291bGQgZXhwZWN0IHRoZSBwZXJmb3JtYW5jZSBpbXBh Y3Qgb2YgdGhlIHNwaWxscyB0byBiZSByZWxhdGl2ZWx5IHNtYWxsLCBiZWNhdXNlIGluIHByYWN0 aWNlIGluIG1vc3Qga2luZHMgb2Ygc29mdHdhcmUsIHRoZXJlIGFyZSBtYW55IHRpbWVzIG1vcmUg aXZhciByZWFkcyB0aGFuIGl2YXIgd3JpdGVzLCBhbmQgdGhvc2Ugc3BpbGxzIGFyZSBhIGRyb3Ag aW4gdGhlIGJ1Y2tldC4KCkFsc28sIGlmIHlvdSBsb29rIGF0IHRoZSBnZXRpdmFyIGJlbmNobWFy ayBiZWZvcmUgYW5kIGFmdGVyLCB5b3UgY2FuIHNlZSB0aGF0IHRoZSBzcGVlZHVwIHdlbnQgZnJv bSA5Ljk1IHRvIDEuMDEuIFRoYXQgc3VnZ2VzdHMgdGhhdCB3ZSdyZSBwcm9iYWJseSBzaWRlLWV4 aXRpbmcgb3Igbm90IHJ1bm5pbmcgdGhlIGdldGluc3RhbmNldmFyaWFibGUgY29kZSBpbiBZSklU IGZvciBzb21lIHJlYXNvbi4gSU1PIGdldGluc3RhbmNldmFyaWFibGUgc2hvdWxkIGJlIHRoZSBm aXJzdCBwbGFjZSB0byBsb29rLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpGZWF0dXJlICMxODc3NjogT2JqZWN0IFNoYXBlcwpodHRwczovL2J1Z3MucnVieS1sYW5n Lm9yZy9pc3N1ZXMvMTg3NzYjY2hhbmdlLTk4NjkwCgoqIEF1dGhvcjogamVtbWFpIChKZW1tYSBJ c3Nyb2ZmKQoqIFN0YXR1czogT3BlbgoqIFByaW9yaXR5OiBOb3JtYWwKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE9iamVjdCBTaGFwZXMgaW1wbGVtZW50YXRpb24K CkFhcm9uIFBhdHRlcnNvbiwgRWlsZWVuIFVjaGl0ZWxsZSBhbmQgSSBoYXZlIGJlZW4gd29ya2lu ZyBvbiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3QgU2hhcGVzIGZvciBSdWJ5LiAgV2UgYXJl IGZpbGluZyBhIHRpY2tldCB0byBzaGFyZSB3aGF0IHdlJ3ZlIGJlZW4gZG9pbmcsIGFzIHdlbGwg YXMgZ2V0IGZlZWRiYWNrIG9uIHRoZSBwcm9qZWN0IGluIGl0cyBjdXJyZW50IHN0YXRlLgoKV2Ug aG9wZSB0byBldmVudHVhbGx5IHN1Ym1pdCB0aGUgZmluYWxpemVkIHByb2plY3QgdXBzdHJlYW0g YWZ0ZXIgdmVyaWZ5aW5nIGVmZmljYWN5LgoKIyMgV2hhdCBhcmUgT2JqZWN0IFNoYXBlcz8KCk9i amVjdCBzaGFwZXMgYXJlIGEgdGVjaG5pcXVlIGZvciByZXByZXNlbnRpbmcgcHJvcGVydGllcyBv ZiBhbiBvYmplY3QuIE90aGVyIGxhbmd1YWdlIGltcGxlbWVudGF0aW9ucywgaW5jbHVkaW5nIFtU cnVmZmxlUnVieV0oaHR0cHM6Ly9naXRodWIuY29tL29yYWNsZS90cnVmZmxlcnVieSkgYW5kIFtW OF0oaHR0cHM6Ly92OC5kZXYvKSwgdXNlIHRoaXMgdGVjaG5pcXVlLiBDaHJpcyBTZWF0b24sIHRo ZSBjcmVhdG9yIG9mIFRydWZmbGVSdWJ5LCBkaXNjdXNzZWQgb2JqZWN0IHNoYXBlcyBpbiBoaXMg W1J1YnlLYWlnaSAyMDIxIEtleW5vdGVdKGh0dHBzOi8vcnVieWthaWdpLm9yZy8yMDIxLXRha2Vv dXQvcHJlc2VudGF0aW9ucy9jaHJpc2dzZWF0b24uaHRtbCkgYW5kIE1heGltZSBDaGV2YWxpZXIt Qm9pc3ZlcnQgZGlzY3Vzc2VkIHRoZSBpbXBsaWNhdGlvbnMgZm9yIFlKSVQgaW4gdGhlIGxhdHRl ciBwYXJ0IG9mIFtoZXIgdGFsayBhdCBSdWJ5S2FpZ2kgMjAyMV0oaHR0cHM6Ly93d3cueW91dHVi ZS5jb20vd2F0Y2g/dj1QQlZMZjN5Zk1zOCZ0PTExMDBzKS4gVGhlIG9yaWdpbmFsIGlkZWEgb2Yg b2JqZWN0IHNoYXBlcyBbb3JpZ2luYXRlcyBmcm9tIHRoZSBTZWxmIGxhbmd1YWdlXShodHRwczov L2JpYmxpb2dyYXBoeS5zZWxmbGFuZ3VhZ2Uub3JnL19zdGF0aWMvaW1wbGVtZW50YXRpb24ucGRm KSwgd2hpY2ggaXMgY29uc2lkZXJlZCBhIGRpcmVjdCBkZXNjZW5kYW50IG9mIFNtYWxsdGFsay4K CkVhY2ggc2hhcGUgcmVwcmVzZW50cyBhIHNwZWNpZmljIHNldCBvZiBhdHRyaWJ1dGVzIChpbnN0 YW5jZSB2YXJpYWJsZXMgYW5kIG90aGVyIHByb3BlcnRpZXMpIGFuZCB0aGVpciB2YWx1ZXMuIElu IG91ciBpbXBsZW1lbnRhdGlvbiwgYWxsIG9iamVjdHMgaGF2ZSBhIHNoYXBlLiBUaGUgc2hhcGVz IGFyZSBub2RlcyBpbiBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUuIEV2ZXJ5IGVkZ2UgaW4gdGhlIHRy ZWUgcmVwcmVzZW50cyBhbiBhdHRyaWJ1dGUgdHJhbnNpdGlvbi4KCk1vcmUgc3BlY2lmaWNhbGx5 LCBzZXR0aW5nIGFuIGluc3RhbmNlIHZhcmlhYmxlIG9uIGFuIGluc3RhbmNlIG9mIGFuIG9iamVj dCBjcmVhdGVzIGFuIG91dGdvaW5nIGVkZ2UgZnJvbSB0aGUgaW5zdGFuY2UncyBjdXJyZW50IHNo YXBlLiBUaGlzIGlzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBzaGFwZSB0byBhbm90aGVyLiBUaGUg ZWRnZSByZXByZXNlbnRzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSB0aGF0IGlzIHNldC4KCkZvciBl eGFtcGxlOgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50 bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRy YW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBhIChJRCAxKQogICAgQGIgPSAyICMg VHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDIpCiAgZW5kCmVuZAoK Zm9vID0gRm9vLm5ldwpgYGAKCldoZW4gYEZvb2AgaXMgaW50aWFsaXplZCwgaXRzIHNoYXBlIGlz IHRoZSByb290IHNoYXBlIHdpdGggSUQgMC4gIFRoZSByb290IHNoYXBlIHJlcHJlc2VudHMgYW4g ZW1wdHkgb2JqZWN0IHdpdGggbm8gaW5zdGFuY2UgdmFyaWFibGVzLiBFYWNoIHRpbWUgYW4gaW5z dGFuY2UgdmFyaWFibGUgaXMgc2V0IG9uIGBmb29gLCB0aGUgc2hhcGUgb2YgdGhlIGluc3RhbmNl IGNoYW5nZXMuIEl0IGZpcnN0IHRyYW5zaXRpb25zIHdpdGggYEBhYCB0byBhIHNoYXBlIHdpdGgg SUQgMSwgYW5kIHRoZW4gdHJhbnNpdGlvbnMgd2l0aCBgQGJgIHRvIGEgc2hhcGUgd2l0aCBJRCAy LiBJZiBgQGFgIGlzIHRoZW4gc2V0IHRvIGEgZGlmZmVyZW50IHZhbHVlLCBpdHMgc2hhcGUgd2ls bCByZW1haW4gdGhlIHNoYXBlIHdpdGggSUQgMiwgc2luY2UgdGhpcyBzaGFwZSBhbHJlYWR5IGlu Y2x1ZGVzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgLiAgCgohW10oaHR0cHM6Ly91c2VyLWlt YWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MTgzNjAtMGE2YzkxYWEtMjU4 Ny00OGNiLThmZjItN2YzYTk1ODMyODhlLnN2ZykKClRoZXJlIGlzIG9uZSBnbG9iYWwgc2hhcGUg dHJlZSBhbmQgb2JqZWN0cyB3aGljaCB1bmRlcmdvIHRoZSBzYW1lIHNoYXBlIHRyYW5zaXRpb25z IGluIHRoZSBzYW1lIG9yZGVyIHdpbGwgZW5kIHVwIHdpdGggdGhlIHNhbWUgZmluYWwgc2hhcGUu CgpGb3IgaW5zdGFuY2UsIGlmIHdlIGhhdmUgYSBjbGFzcyBgQmFyYCBkZWZpbmVkIGFzIGZvbGxv d3MsIHRoZSBmaXJzdCB0cmFuc2l0aW9uIG9uIGBCYXIubmV3YCB0aHJvdWdoIHRoZSBpbnN0YW5j ZSB2YXJpYWJsZSBgQGFgIHdpbGwgYmUgdGhlIHNhbWUgYXMgYEZvby5uZXdgJ3MgZmlyc3QgdHJh bnNpdGlvbjoKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVu dGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBU cmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBiID0gMiAj IFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCAyKQogIGVuZAplbmQK CmNsYXNzIEJhcgogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNl IGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gc2hh cGUgZGVmaW5lZCBlYXJsaWVyIHZpYSBlZGdlIEBhIChJRCAxKQogICAgQGMgPSAxICMgVHJhbnNp dGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGMgKElEIDMpCiAgICBAYiA9IDEgIyBUcmFu c2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgNCkKICBlbmQKZW5kCgpmb28g PSBGb28ubmV3ICMgYmx1ZSBpbiB0aGUgZGlhZ3JhbQpiYXIgPSBCYXIubmV3ICMgcmVkIGluIHRo ZSBkaWFncmFtCmBgYAoKSW4gdGhlIGRpYWdyYW0gYmVsb3csIHB1cnBsZSByZXByZXNlbnRzIHNo YXJlZCB0cmFuc2l0aW9ucywgYmx1ZSByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBm b29gLCBhbmQgcmVkIHJlcHJlc2VudHMgdHJhbnNpdGlvbnMgZm9yIG9ubHkgYGJhcmAuCgohW10o aHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MTg4 OTktZjFhNmYzNDQtYWU1ZS00ZGMwLWIxN2EtZmIxNTZkMWQ1NTBmLnN2ZykKCiMjIyBDYWNoZSBz dHJ1Y3R1cmUKCkZvciBpbnN0YW5jZSB2YXJpYWJsZSB3cml0ZXJzLCB0aGUgY3VycmVudCBzaGFw ZSBJRCwgdGhlIHNoYXBlIElEIHRoYXQgaXZhciB3cml0ZSB3b3VsZCB0cmFuc2l0aW9uIHRvIGFu ZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBhcmUgYWxsIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNh Y2hlLiBUaGUgc2hhcGUgSUQgaXMgdGhlIGtleSB0byB0aGUgY2FjaGUuCgpGb3IgaW5zdGFuY2Ug dmFyaWFibGUgcmVhZGVycywgdGhlIHNoYXBlIElEIGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRl eCBhcmUgc3RvcmVkIGluIHRoZSBpbmxpbmUgY2FjaGUuICBBZ2FpbiwgdGhlIHNoYXBlIElEIGlz IHRoZSBjYWNoZSBrZXkuCgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICBA YSA9IDEgIyBJQyBzaGFwZV9pZDogMCwgbmV4dCBzaGFwZTogMSwgaXYgaW5kZXggMAogICAgQGIg PSAxICMgSUMgc2hhcGVfaWQ6IDEsIG5leHQgc2hhcGU6IDIsIGl2IGluZGV4IDEKICBlbmQKICAg IAogIGRlZiBhCiAgICBAYSAjIElDIHNoYXBlX2lkOiAyLCBpdiBpbmRleCAwCiAgZW5kCmVuZApg YGAKCiMjIFJhdGlvbmFsZQoKV2UgdGhpbmsgdGhhdCBhbiBvYmplY3Qgc2hhcGUgaW1wbGVtZW50 YXRpb24gd2lsbCBzaW1wbGlmeSBjYWNoZSBjaGVja3MsIGluY3JlYXNlIGlubGluZSBjYWNoZSBo aXRzLCBkZWNyZWFzZSBydW50aW1lIGNoZWNrcywgYW5kIGVuYWJsZSBvdGhlciBwb3RlbnRpYWwg ZnV0dXJlIG9wdGltaXphdGlvbnMuIFRoZXNlIGFyZSBhbGwgZXhwbGFpbmVkIGJlbG93LiAKCiMj IyBTaW1wbGlmeSBjYWNoaW5nCgpUaGUgY3VycmVudCBjYWNoZSBpbXBsZW1lbnRhdGlvbiBkZXBl bmRzIG9uIHRoZSBjbGFzcyBvZiB0aGUgcmVjZWl2ZXIuIFNpbmNlIHRoZSBhZGRyZXNzIG9mIHRo ZSBjbGFzcyBjYW4gYmUgcmV1c2VkLCB0aGUgY3VycmVudCBjYWNoZSBpbXBsZW1lbnRhdGlvbiBh bHNvIGRlcGVuZHMgb24gYW4gaW5jcmVtZW50aW5nIHNlcmlhbCBudW1iZXIgc2V0IG9uIHRoZSBj bGFzcyAodGhlIGNsYXNzIHNlcmlhbCkuICBUaGUgc2hhcGUgaW1wbGVtZW50YXRpb24gaGFzIG5v IHN1Y2ggZGVwZW5kZW5jeS4gSXQgb25seSByZXF1aXJlcyBjaGVja2luZyB0aGUgc2hhcGUgSUQg dG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWNoZSBpcyB2YWxpZC4KCiMjIyBDYWNoZSBoaXRzCgpPYmpl Y3RzIHRoYXQgc2V0IHByb3BlcnRpZXMgaW4gdGhlIHNhbWUgb3JkZXIgY2FuIHNoYXJlIHNoYXBl cy4gIEZvciBleGFtcGxlOgoKYGBgcnVieQpjbGFzcyBIb2dlCiAgZGVmIGluaXRpYWxpemUKICAg ICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBA YSA9IDEgIyBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzaGFwZSB2aWEgZWRnZSBuYW1lZCBAYQog ICAgQGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gbmV4dCBzaGFwZSB2aWEgZWRnZSBuYW1lZCBAYgog IGVuZAplbmQKCmNsYXNzIEZ1Z2EgPCBIb2dlOyBlbmQKCmhvZ2UgPSBIb2dlLm5ldwpmdWdhID0g RnVnYS5uZXcKYGBgCgpJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGluc3RhbmNlcyBgaG9nZWAg YW5kIGBmdWdhYCB3aWxsIHNoYXJlIHRoZSBzYW1lIHNoYXBlIElELiAgVGhpcyBtZWFucyBpbmxp bmUgY2FjaGVzIGluIGBpbml0aWFsaXplYCB3aWxsIGhpdCBpbiBib3RoIGNhc2VzLiAgVGhpcyBj b250cmFzdHMgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgdGhlIGNs YXNzIGFzIHRoZSBjYWNoZSBrZXkuICBJbiBvdGhlciB3b3Jkcywgd2l0aCBvYmplY3Qgc2hhcGVz IHRoZSBhYm92ZSBjb2RlIHdpbGwgaGl0IGlubGluZSBjYWNoZXMgd2hlcmUgdGhlIGN1cnJlbnQg aW1wbGVtZW50YXRpb24gd2lsbCBtaXNzLgoKSWYgcGVyZm9ybWFuY2UgdGVzdGluZyByZXZlYWxz IHRoYXQgY2FjaGUgaGl0cyBhcmUgKm5vdCogc3Vic3RhbnRpYWxseSBpbXByb3ZlZCwgdGhlbiB3 ZSBjYW4gdXNlIHNoYXBlcyB0byByZWNsYWltIG1lbW9yeSBmcm9tIGBSQmFzaWNgLiBXZSBjYW4g YWNjb21wbGlzaCB0aGlzIGJ5IGVuY29kaW5nIHRoZSBjbGFzcyB3aXRoaW4gdGhlIHNoYXBlIHRy ZWUuIFRoaXMgd2lsbCBoYXZlIGFuIGVxdWl2YWxlbnQgY2FjaGUgaGl0IHJhdGUgdG8gdGhlIGN1 cnJlbnQgaW1wbGVtZW50YXRpb24uIE9uY2UgdGhlIGNsYXNzIGlzIGVuY29kZWQgd2l0aGluIHRo ZSBzaGFwZSB0cmVlLCB3ZSBjYW4gcmVtb3ZlIHRoZSBjbGFzcyBwb2ludGVyIGZyb20gYFJCYXNp Y2AgYW5kIGVpdGhlciByZWNsYWltIHRoYXQgbWVtb3J5IG9yIGZyZWUgaXQgZm9yIGFub3RoZXIg dXNlLgoKIyMjIERlY3JlYXNlcyBydW50aW1lIGNoZWNraW5nCgpXZSBjYW4gZW5jb2RlIGF0dHJp YnV0ZXMgdGhhdCBhcmVuJ3QgaW5zdGFuY2UgdmFyaWFibGVzIGludG8gYW4gb2JqZWN0J3Mgc2hh cGUuIEN1cnJlbnRseSwgd2UgYWxzbyBpbmNsdWRlIGZyb3plbiB3aXRoaW4gdGhlIHNoYXBlLiBU aGlzIG1lYW5zIHdlIGNhbiBsaW1pdCBmcm96ZW4gY2hlY2tzIHRvIG9ubHkgY2FjaGUgbWlzc2Vz LgoKRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYHJ1YnkKY2xhc3MgVG90bwog IGRlZiBzZXRfYQogICAgQGEgPSAxICMgY2FjaGU6IHNoYXBlOiAwLCBuZXh0IHNoYXBlOiAxLCBJ ViBpZHg6IDAKICBlbmQKZW5kCgp0b3RvID0gVG90by5uZXcgIyBzaGFwZSAwCnRvdG8uc2V0X2Eg ICAgICMgc2hhcGUgMQoKdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0b3RvLmZyZWV6ZSAgICAj IHNoYXBlIDIKdG90by5zZXRfYSAgICAgIyBDYWNoZSBtaXNzLCBFeGNlcHRpb24hCmBgYAoKIVtd KGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTIw MDAxLWM0ZTYzMjZiLTNhM2MtNDgzYi1hNzk3LTllMDIzMTc2NDdkNy5zdmcpCgpXaXRob3V0IHNo YXBlcywgYWxsIGluc3RhbmNlIHZhcmlhYmxlIHNldHMgcmVxdWlyZSBjaGVja2luZyB0aGUgZnJv emVuIHN0YXR1cyBvZiB0aGUgb2JqZWN0LiBXaXRoIHNoYXBlcywgd2Ugb25seSBuZWVkIHRvIGNo ZWNrIHRoZSBmcm96ZW4gc3RhdHVzIG9uIGNhY2hlIG1pc3Nlcy4KCldlIGNhbiBhbHNvIGVsaW1p bmF0ZSBlbWJlZGRlZCBhbmQgZXh0ZW5kZWQgY2hlY2tzIHdpdGggdGhlIGludHJvZHVjdGlvbiBv ZiBvYmplY3Qgc2hhcGVzLiBBbnkgcGFydGljdWxhciBzaGFwZSByZXByZXNlbnRzIGFuIG9iamVj dCB0aGF0IGlzIF9laXRoZXJfIGV4dGVuZGVkIG9yIGVtYmVkZGVkLiBKSVRzIGNhbiBwb3NzaWJs eSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZhY3QgYnkgZ2VuZXJhdGluZyBzcGVjaWFsaXplZCBt YWNoaW5lIGNvZGUgYmFzZWQgb24gdGhlIHNoYXBlcy4gCiAgICAKIyMjIENsYXNzIGluc3RhbmNl IHZhcmlhYmxlcyBjYW4gYmUgc3RvcmVkIGluIGFuIGFycmF5CgpDdXJyZW50bHksIGBUX0NMQVNT YCBhbmQgYFRfTU9EVUxFYCBpbnN0YW5jZXMgY2Fubm90IHVzZSB0aGUgc2FtZSBJViBpbmRleCB0 YWJsZSBvcHRpbWl6YXRpb24gdGhhdCBgVF9PQkpFQ1RgIGluc3RhbmNlcyB1c2UuICBXZSB0aGlu ayB0aGF0IHRoZSBvYmplY3Qgc2hhcGVzIHRlY2huaXF1ZSBjYW4gYmUgbGV2ZXJhZ2VkIGJ5IGNs YXNzIGluc3RhbmNlcyB0byB1c2UgYXJyYXlzIGZvciBjbGFzcyBpbnN0YW5jZSB2YXJpYWJsZSBz dG9yYWdlIGFuZCBtYXkgcG9zc2libHkgbGVhZCB0byBhIHJlZHVjdGlvbiBpbiBtZW1vcnkgdXNh Z2UgKHRob3VnaCB3ZSBoYXZlIHlldCB0byB0ZXN0IHRoaXMpLgoKIyMgSW1wbGVtZW50YXRpb24g RGV0YWlscwoKW0hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qZW1tYWlzc3JvZmYvcnVieS9jb21t aXQvNGU5NWQwMTY1NGYyNGNlZmY2YzgzMzBjZjRlNWM3ZGFjNTA0NzM5ZSkgaXMgYSBsaW5rIHRv IG91ciBjb2RlIHNvIGZhci4KCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBzaGFwZSBvYmplY3RzIGZv cm0gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiAgSW4gb3JkZXIgdG8gbG9vayB1cCB0aGUgc2hhcGUg cXVpY2tseSwgd2UgYWxzbyBzdG9yZSB0aGUgc2hhcGVzIGluIGEgd2VhayBhcnJheSB0aGF0IGlz IHN0b3JlZCBvbiB0aGUgVk0uICBUaGUgSUQgb2YgdGhlIHNoYXBlIGlzIHRoZSBpbmRleCBpbiB0 byB0aGUgYXJyYXksIGFuZCB0aGUgSUQgaXMgc3RvcmVkIG9uIHRoZSBvYmplY3QuCgpGb3IgYFRf T0JKRUNUYCBvYmplY3RzLCB3ZSBzdG9yZSB0aGUgc2hhcGUgSUQgaW4gdGhlIG9iamVjdCdzIGhl YWRlci4gT24gNjQgYml0IHN5c3RlbXMsIHRoZSB1cHBlciAzMiBiaXRzIGFyZSB1c2VkIGJ5IFJh Y3RvcnMuICBXZSB3YW50IG9iamVjdCBzaGFwZXMgdG8gYmUgZW5hYmxlZCBvbiAzMiBiaXQgc3lz dGVtcyBhbmQgNjQgYml0IHN5c3RlbXMgc28gdGhhdCBsaW1pdHMgdXMgdG8gdGhlIGJvdHRvbSAz MiBiaXRzIG9mIHRoZSBPYmplY3QgaGVhZGVyLiAgVGhlIHRvcCAyMCBiaXRzIGZvciBgVF9PQkpF Q1RgIG9iamVjdHMgd2FzIHVudXNlZCwgc28gd2UgdXNlZCB0aGUgdG9wIDE2IGJpdHMgZm9yIHRo ZSBzaGFwZSBpZC4gIFdlIGNob3NlIHRoZSB0b3AgMTYgYml0cyBiZWNhdXNlIHRoaXMgYWxsb3dz IHVzIHRvIHVzZSBgdWludDE2X3RgIGFuZCBtYXNraW5nIHRoZSBoZWFkZXIgYml0cyBpcyBlYXNp ZXIuCgpUaGlzIGltcGxlbWVudGF0aW9uIGRldGFpbCBsaW1pdHMgdXMgdG8gfjY1ayBzaGFwZXMu IFdlIG1lYXN1cmVkIHRoZSBudW1iZXIgb2Ygc2hhcGVzIHVzZWQgb24gYSBzaW1wbGUgW0Rpc2Nv dXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNjb3Vyc2UpIGFwcGxpY2F0aW9u ICh+My41ayksIFtSYWlsc0JlbmNoXShodHRwczovL2dpdGh1Yi5jb20vazBrdWJ1bi9yYWlsc2Jl bmNoKSAofjRrKSwgYW5kIFNob3BpZnkncyBtb25vbGl0aCdzIHRlc3Qgc3VpdGUgKH40MGspLiBB Y2NvcmRpbmdseSwgd2UgZGVjaWRlZCB0byBpbXBsZW1lbnQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9u IG9iamVjdCBzaGFwZXMgc28gd2UgY2FuIHJlY3ljbGUgc2hhcGUgSURzIHdoaWNoIGFyZSBubyBs b25nZXIgaW4gdXNlLiAgV2UgYXJlIGN1cnJlbnRseSB3b3JraW5nIG9uIHNoYXBlIEdDLgoKRXZl biB0aG91Z2ggaXQncyB1bmxpa2VseSwgaXQncyBzdGlsbCBwb3NzaWJsZSBmb3IgYW4gYXBwbGlj YXRpb24gdG8gcnVuIG91dCBvZiBzaGFwZXMuIE9uY2UgYWxsIHNoYXBlIElEcyBhcmUgaW4gdXNl LCBhbnkgb2JqZWN0cyB0aGF0IG5lZWQgbmV3IHNoYXBlIElEcyB3aWxsIG5ldmVyIGhpdCBvbiBp bmxpbmUgY2FjaGVzLgoKIyMgRXZhbHVhdGlvbgoKV2UgaGF2ZSBzbyBmYXIgdGVzdGVkIHRoaXMg YnJhbmNoIHdpdGggW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNj b3Vyc2UpLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3VidW4vcmFpbHNiZW5j aCkgYW5kIFNob3BpZnkncyBtb25vbGl0aC4gV2UgcGxhbiB0byB0ZXN0IHRoaXMgYnJhbmNoIG1v cmUgYnJvYWRseSBhZ2FpbnN0IHNldmVyYWwgb3BlbiBzb3VyY2UgUnVieSBhbmQgUmFpbHMgYXBw bGljYXRpb25zLiAKCkJlZm9yZSB3ZSBjb25zaWRlciB0aGlzIGJyYW5jaCB0byBiZSByZWFkeSBm b3IgZm9ybWFsIHJldmlldywgd2Ugd2FudCB0aGUgcnVudGltZSBwZXJmb3JtYW5jZSBhbmQgbWVt b3J5IHVzYWdlIG9mIHRoZXNlIGJlbmNobWFya3MgdG8gYmUgZXF1aXZhbGVudCBvciBiZXR0ZXIg dGhhbiBpdCBpcyBjdXJyZW50bHkuIEluIG91ciBvcGluaW9uLCBldmVuIHdpdGggZXF1aXZhbGVu dCBydW50aW1lIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2UsIHRoZSBmdXR1cmUgYmVuZWZp dHMgb2YgdGhpcyBhcHByb2FjaCBtYWtlIHRoZSBjaGFuZ2Ugc2VlbSB3b3J0aHdoaWxlLgoKIyMg RmVlZGJhY2sKCklmIHlvdSBoYXZlIGFueSBmZWVkYmFjaywgY29tbWVudHMsIG9yIHF1ZXN0aW9u cywgcGxlYXNlIGxldCB1cyBrbm93IGFuZCB3ZSdsbCBkbyBvdXIgYmVzdCB0byBhZGRyZXNzIGl0 LiBUaGFuayB5b3UhCgotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm9i amVjdC1zaGFwZXMucGF0Y2ggKDE4MCBLQikKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5v cmcvCg==