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.0 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_PASS,SPF_PASS,UNPARSEABLE_RELAY 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 B2D481F910 for ; Wed, 16 Nov 2022 14:47:22 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.b="etMDX7Oq"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id BEDEA1210C6; Wed, 16 Nov 2022 23:47:18 +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 625A512110F for ; Wed, 16 Nov 2022 23:47:16 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ruby-lang.org; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to:cc; s=s1; bh=Poaw4noxBi9JiDEfz8OqV20ilvOMn4kQyyB+bmVzChA=; b=etMDX7OqBQad4+M3yxLvRUM9gt44bzVsKVPANpEuNiHS0s0dopg6v4EMm8uHnltIf3Sn OzxiXzDPuX7j0xV3aEuxDEFJ32Uk15cTL/C1KM/Km97TiUIZLAlnaRK7J+GnEWR2i8xsVB xqurNyVeaGnvvys529Fl0BebRB7rvwnZMmvqhwMnRye+ytJUnbXVLFVcRAzxDWBggHjMp0 n23Zo+x/TdeJxmdD3syC70qoAGn2VDyCxa95orkMr3x7zgu+rzUHXk5bCTw5CkoZ/fF54R KbTVcYbIOHAgnbmx+Es2RQ+3Z//tFNU9YbCz3oBEc3YYOT2JJxrcV6zkHNSP7LRw== Received: by filterdrecv-85cd7b65cf-wbjrs with SMTP id filterdrecv-85cd7b65cf-wbjrs-1-6374F7EC-36 2022-11-16 14:47:08.894961234 +0000 UTC m=+500830.650730501 Received: from herokuapp.com (unknown) by geopod-ismtpd-3-5 (SG) with ESMTP id g4I6mBhuTx6UlboJF5syKA for ; Wed, 16 Nov 2022 14:47:08.827 +0000 (UTC) Date: Wed, 16 Nov 2022 14:47:08 +0000 (UTC) From: "make_now_just (Kitsune TSUYUSATO)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 19104 X-Redmine-Issue-Author: make_now_just X-Redmine-Sender: make_now_just 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: 87231 X-SG-EID: =?us-ascii?Q?Kh8XFMPV1KnUqUQrkUjUrF9m3wMZdjltDpem16aq5IRqipy=2Ft9fVrhryShpiTX?= =?us-ascii?Q?Cajufqn8NOAOvmQ+6fJsl=2FX7o188lIZ4tgPhbLs?= =?us-ascii?Q?RrtR8f0128rttH3QAKi7ojXXgj8GgMxt1Sy5Kgr?= =?us-ascii?Q?EB3CK+MKEzfSNPP04ZvoKN8TJSHeHUOzF=2F6YJ6N?= =?us-ascii?Q?k5TxEUs6JEI1CEvbo09vpZ4jvICjY3a+e+Wy7Ca?= =?us-ascii?Q?ozjpCq7X6c8uaw4MYo+pxz0=2FwigCNMQeSNVFY1L?= =?us-ascii?Q?var6yASkVZ3x5xy2rDbdu5NGPZQnQn3UCzOCFo2?= =?us-ascii?Q?+jQ=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110777 Subject: [ruby-core:110777] [Ruby master Feature#19104] Introduce the cache-based optimization for Regexp matching 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" SXNzdWUgIzE5MTA0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFrZV9ub3dfanVzdCAoS2l0c3VuZSBU U1VZVVNBVE8pLg0KDQoNCkkgY3JlYXRlZCBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIHJlcG9ydC4g VGhhbmtzIEBieXJvb3QuDQoNCmh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzQ0 DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzE5 MTA0OiBJbnRyb2R1Y2UgdGhlIGNhY2hlLWJhc2VkIG9wdGltaXphdGlvbiBmb3IgUmVnZXhwIG1h dGNoaW5nDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTkxMDQjY2hhbmdlLTEw MDEyMw0KDQoqIEF1dGhvcjogbWFrZV9ub3dfanVzdCAoS2l0c3VuZSBUU1VZVVNBVE8pDQoqIFN0 YXR1czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpSZWdleHAgbWF0Y2hpbmcgY2F1c2VzIGEgdGltZS1jb21wbGV4aXR5 IGV4cGxvc2lvbiBwcm9ibGVtIGFzIGtub3duIGFzIFJlRG9TIChbaHR0cHM6Ly9lbi53aWtpcGVk aWEub3JnL3dpa2kvUmVEb1NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlRG9TKSku IFJlRG9TIGhhcyBiZWNvbWUgc2VyaW91cyB2dWxuZXJhYmlsaXR5IGluIG1hbnkgcGxhY2VzIGlu IHJlY2VudCB5ZWFycywgYW5kIFJ1YnkgaXMgbm8gZXhjZXB0aW9uLiBUaGUgZm9sbG93aW5nIGlz IHRoZSBpbmNvbXBsZXRlIGxpc3Qgb2Ygc3VjaCB2dWxuZXJhYmlsaXR5IHJlcG9ydHM6DQoNCi0g W2h0dHBzOi8vZ2l0aHViLmNvbS9zaW5hdHJhL3NpbmF0cmEvcHVsbC8xODIzXShodHRwczovL2dp dGh1Yi5jb20vc2luYXRyYS9zaW5hdHJhL3B1bGwvMTgyMykNCi0gW2h0dHBzOi8vZ2l0aHViLmNv bS9sb3N0aXNsYW5kL2ZhcmFkYXktbmV0X2h0dHAvcHVsbC8yN10oaHR0cHM6Ly9naXRodWIuY29t L2xvc3Rpc2xhbmQvZmFyYWRheS1uZXRfaHR0cC9wdWxsLzI3KQ0KDQpUaGVzZSByZXBvcnRzIGhh dmUgYmVlbiBhZGRyZXNzZWQgYnkgZml4aW5nIHRoZSBsaWJyYXJ5L3NvZnR3YXJlIGltcGxlbWVu dGF0aW9uLiBCdXQsIGlmIHRoZSBsYW5ndWFnZeKAmXMgUmVnZXhwIGltcGxlbWVudGF0aW9uIGJl Y29tZXMgc2FmZSwgdGhlIHZ1bG5lcmFiaWxpdHkgaXMgZnVuZGFtZW50YWxseSBhcmNoaXZlZC4N Cg0KRm9yIGEgZmV3IG1vbnRocywgUnVieSBoYXMgaW1wbGVtZW50ZWQgYSBSZWdleHAgbWF0Y2hp bmcgdGltZW91dCAoW2h0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNzgzN10oaHR0 cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE3ODM3KSkuIEl0IGlzIG9uZSBvZiB0aGUg dXNlZnVsIG1ldGhvZHMgZm9yIHByZXZlbnRpbmcgUmVEb1MgdnVsbmVyYWJpbGl0eSwgYnV0IGl0 IGlzIGEgcHJvYmxlbSB0aGF0IHNldHRpbmcgYSBjb3JyZWN0IHRpbWVvdXQgdmFsdWUgaXMgaGFy ZC4gVGhpcyB2YWx1ZSBpcyBkZXBlbmRpbmcgb24gaW5wdXQgbGVuZ3RoLCBlbnZpcm9ubWVudCwg bmV0d29yayBzdGF0dXMsIHN5c3RlbSBsb2FkLCBldGMuIFdoZW4gdGhlIHZhbHVlIGlzIHRvbyBz bWFsbCwgYSBzeXN0ZW0gbWF5IGJlIGJyb2tlbiwgYnV0IHdoZW4gdGhlIHZhbHVlIGlzIHRvbyBs YXJnZSwgaXQgaXMgbm90IHVzZWZ1bCBmb3IgcHJldmVudGluZyBSZURvUy4NCg0KVGhlcmVmb3Jl LCBhcyBhIG5ldyB3YXkgdG8gcHJldmVudCBSZURvUywgd2UgcHJvcG9zZSB0byBpbnRyb2R1Y2Ug Y2FjaGUtYmFzZWQgb3B0aW1pemF0aW9uIGZvciBSZWdleHAgbWF0Y2hpbmcuIEFzIENTIGZ1bmRh bWVudGFsIGtub3dsZWRnZSwgYXV0b21hdG9uIG1hdGNoaW5nIHJlc3VsdCBkZXBlbmRzIG9uIHRo ZSBwb3NpdGlvbiBvZiBpbnB1dCBhbmQgc3RhdGUuIEluIGFkZGl0aW9uLCBtYXRjaGluZyB0aW1l IGV4cGxvc2lvbiBpcyBjYXVzZWQgZm9yIHJlcGVhdGluZyB0byBhcnJpdmUgYXQgdGhlIHNhbWUg cG9zaXRpb24gYW5kIHN0YXRlIG1hbnkgdGltZXMuIFRoZW4sIFJlRG9TIGNhbiBiZSBwcmV2ZW50 ZWQgd2hlbiBwYWlycyBvZiBwb3NpdGlvbiwgYW5kIHN0YXRlIGFycml2ZWQgb25jZSBpcyByZWNv cmRlZCAoY2FjaGVkKS4gSW4gZmFjdCwgdW5kZXIgc3VjaCBhbiBvcHRpbWl6YXRpb24sIGl0IGlz IGtub3duIGFzIHRoZSBtYXRjaGluZyB0aW1lIGNvbXBsZXhpdHkgaXMgbGluZWFyIGFnYWluc3Qg aW5wdXQgc2l6ZSBbMV0uDQoNClsxXTogRGF2aXMsIEphbWVzIEMuLCBGcmFuY2lzY28gU2VydmFu dCwgYW5kIERvbmd5b29uIExlZS4gIlVzaW5nIHNlbGVjdGl2ZSBtZW1vaXphdGlvbiB0byBkZWZl YXQgcmVndWxhciBleHByZXNzaW9uIGRlbmlhbCBvZiBzZXJ2aWNlIChSZURvUykuIiAqMjAyMSBJ RUVFIHN5bXBvc2l1bSBvbiBzZWN1cml0eSBhbmQgcHJpdmFjeSAoU1ApKi4gSUVFRSwgMjAyMS4g W2h0dHBzOi8vd3d3LmNvbXB1dGVyLm9yZy9jc2RsL3Byb2NlZWRpbmdzLWFydGljbGUvc3AvMjAy MS84OTM0MDBhNTQzLzFvYWs5ODhUaHZPXShodHRwczovL3d3dy5jb21wdXRlci5vcmcvY3NkbC9w cm9jZWVkaW5ncy1hcnRpY2xlL3NwLzIwMjEvODkzNDAwYTU0My8xb2FrOTg4VGh2TykNCg0KU2Vl IHRoZSBmb2xsb3dpbmcgZXhhbXBsZS4NCg0KYGBgYmFzaA0KJCBydWJ5IC0tdmVyc2lvbg0KcnVi eSAzLjIuMHByZXZpZXcyICgyMDIyLTA5LTA5IG1hc3RlciAzNWNmYzlhM2JiKSBbYXJtNjQtZGFy d2luMjFdDQoNCiQgdGltZSBydWJ5IC1lICcvXihhfGEpKiQvID1+ICJhIiAqIDI4ICsgImIiJw0K cnVieSAtZSAnL14oYXxhKSokLyA9fiAiYSIgKiAyOCArICJiIicgIDguNDlzIHVzZXIgMC4wNHMg c3lzdGVtIDk4JSBjcHUgOC42NjMgdG90YWwNCg0KJCAuL21pbmlydWJ5IC0tdmVyc2lvbg0KcnVi eSAzLjIuMGRldiAoMjAyMi0xMC0yN1QxMzozOTo1NlogcmVjYWNoZSBiYzU5YjdjYzFlKSBbYXJt NjQtZGFyd2luMjFdDQoNCiQgdGltZSAuL21pbmlydWJ5IC1lICcvXihhfGEpKiQvID1+ICJhIiAq IDI4ICsgImIiJw0KLi9taW5pcnVieSAtZSAnL14oYXxhKSokLyA9fiAiYSIgKiAyOCArICJiIicg IDAuMDFzIHVzZXIgMC4wMXMgc3lzdGVtIDglIGNwdSAwLjMxMCB0b3RhbA0KYGBgDQoNCkluIHRo aXMgZXhhbXBsZSwgdXNpbmcgcnVieSB2My4yLjAtcHJldmlldzIsIG1hdGNoaW5nIGAvXihhfGEp KiQvYCBhZ2FpbnN0IGAiYSIgKiAyOCArICJiImAgdGFrZXMgOC42IHNlY29uZHMgYmVjYXVzZSBt YXRjaGluZyB0aW1lIG9mIHRoaXMgUmVnZXhwIHRha2VzIGV4cG9uZW50aWFsbHkgYWdhaW5zdCBg ImEiICogTiArICJiImAgZm9ybSBzdHJpbmcuIEJ1dCwgdXNpbmcgdGhlIHBhdGNoZWQgdmVyc2lv biBvZiBydWJ5LCBpdCB0YWtlcyAwLjAxIHNlY29uZHMuIEluY3JlZGlibHkgaXQgaXMgODYwIHRp bWVzIGZhc3RlciBiZWNhdXNlIG1hdGNoaW5nIGlzIGRvbmUgaW4gbGluZWFyIHRpbWUuDQoNCkJ5 IHRoaXMgb3B0aW1pemF0aW9uLCB0aGUgbWF0Y2hpbmcgdGltZSBpcyBsaW5lYXIgdG8gdGhlIGlu cHV0IHNpemUuIEl0IHNvdW5kcyBzZWN1cmUgYW5kIGdvb2QuIFVuZm9ydHVuYXRlbHksIHdoZW4g UmVnZXhwIHVzZXMgc29tZSBleHRlbnNpb24gKGUuZy4gbG9vay1hcm91bmQsIGJhY2stcmVmZXJl bmNlLCBzdWJleHByZXNzaW9uIGNhbGwpLCB0aGUgb3B0aW1pemF0aW9uIGlzIG5vdCBhcHBsaWVk LiBBbHNvLCB0aGUgb3B0aW1pemF0aW9uIG5lZWRzIGEgYml0IG1vcmUgbWVtb3J5IGZvciBjYWNo aW5nLiBIb3dldmVyLCB3ZSBoYXZlIGFscmVhZHkgaW52ZXN0aWdhdGVkIHRoYXQgdGhleSBhcmUg bm90IHNvIHRoZSBtYWpvciBwcm9ibGVtcyAoU2VlIHRoZSAiTGltaXRhdGlvbiIgc2VjdGlvbiku DQoNCiMjIEltcGxlbWVudGF0aW9uDQoNClRoZSBiYXNpYyBjYWNoZSBpbXBsZW1lbnRhdGlvbiBp cyBjb21wbGV0ZSBhdCB0aGlzIHRpbWUgYW5kIGNhbiBiZSBmb3VuZCBpbiB0aGUgZm9sbG93aW5n IFB1bGwgUmVxdWVzdC4NCg0KW2h0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2 XShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjQ4NikNCg0KU29tZSB0ZXN0cyBz ZWVtIHRvIGJlIGZhaWxlZCwgYnV0IGl0IGlzIG5vIHByb2JsZW0hIEJlY2F1c2UgdGhlIGZhaWxl ZCB0ZXN0cyBhcmUgZm9yIFJlZ2V4cCB0aW1lb3V0LCBvcHRpbWl6YXRpb24gd29ya3MgY29ycmVj dGx5IGFuZCBzbyB0aGV5IGZhaWxlZCBhcyBleHBlY3RlZC4gT2YgY291cnNlLCB3ZSBuZWVkIHRv IGZpeCB0aGVzZSB0ZXN0cyBiZWZvcmUgbWVyZ2luZy4NCg0KSW1wbGVtZW50YXRpb24gbm90ZXM6 DQoNCi0gQSBudWxsLWNoZWNrIG9uIGxvb3AgY2F1c2VzIG5vbi1saW5lYXIgYmVoYXZpb3IsIHNv IHRoZSBmaWVsZCB0byBpbmRleCB0aGUgbGF0ZXN0IG51bGwtY2hlY2sgaXRlbSBvbiB0aGUgc3Rh Y2sgaXMgYWRkZWQgdG8gT25pZ1N0YWNrVHlwZS4gKFtodHRwczovL2dpdGh1Yi5jb20vcnVieS9y dWJ5L3B1bGwvNjQ4Ni9maWxlcyNkaWZmLTQzNDc0NjBlMzc5Y2Q5NzBiYTBiODhiNGFjYjIxNWVh NjBjYmFlMzA4MTI0Njc1ZGU4ODExZWVkMzc3MzY3YWFSODMxXShodHRwczovL2dpdGh1Yi5jb20v cnVieS9ydWJ5L3B1bGwvNjQ4Ni9maWxlcyNkaWZmLTQzNDc0NjBlMzc5Y2Q5NzBiYTBiODhiNGFj YjIxNWVhNjBjYmFlMzA4MTI0Njc1ZGU4ODExZWVkMzc3MzY3YWFSODMxKSkNCi0gV2hlbiB0aGUg bG9vcCBpcyBudWxsIGFuZCB0aGlzIGxvb3AgaGFzIGEgY2FwdHVyZSwgbWF0Y2hpbmcgYmVoYXZl cyBhcyBhIG1vbm9tYW5pYWMuIFRvIHJlcHJvZHVjZSB0aGlzIGJlaGF2aW9yLCBjYWNoZXMgaW4g dGhlIGxvb3AgaXMgY2xlYXJlZCBhcyBuZWNlc3NhcnkuIChbaHR0cHM6Ly9naXRodWIuY29tL3J1 YnkvcnVieS9wdWxsLzY0ODYvZmlsZXMjZGlmZi1jM2NmZTE5ZWZmZjBjYzUxODEzODQ3NDEzODYw NjdiODFlYWRiMjUwNWI4YjliM2Y5ODBkMTBmODE1MDM3Mzk1UjM0MzNdKGh0dHBzOi8vZ2l0aHVi LmNvbS9ydWJ5L3J1YnkvcHVsbC82NDg2L2ZpbGVzI2RpZmYtYzNjZmUxOWVmZmYwY2M1MTgxMzg0 NzQxMzg2MDY3YjgxZWFkYjI1MDViOGI5YjNmOTgwZDEwZjgxNTAzNzM5NVIzNDMzKSkNCkxpa2Ug YSBmbGlwLWZsb3Agb3BlcmF0b3IsIHdlIGhvcGUgdG8gZHJvcCB0aGlzIGlmIHBvc3NpYmxlLiBC dXQgaXQgc3RpbGwgcmVtYWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Lg0KDQojIyMgTGltaXRh dGlvbg0KDQpDYWNoZS1iYXNlZCBvcHRpbWl6YXRpb24gaXMgbm90IGFwcGxpZWQgaW4gdGhlIGZv bGxvd2luZyBjYXNlczoNCg0KMS4gUmVnZXhwIHVzaW5nIHNvbWUgZXh0ZW5zaW9ucyAoYmFjay1y ZWZlcmVuY2UgYW5kIHN1YmV4cHJlc3Npb24gY2FsbCwgbG9vay1hcm91bmQsIGF0b21pYywgYWJz ZW50IG9wZXJhdG9ycykgaXMgbm90IG9wdGltaXplZCBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUg b3IgaGFyZC4gSG93ZXZlciwgaXQgbWF5IGJlIHBvc3NpYmxlIGZvciBsb29rLWFyb3VuZCBvcGVy YXRvcnMuDQoyLiBBIGJvdW5kZWQgb3IgZml4ZWQgdGltZXMgcmVwZXRpdGlvbiBuZXN0aW5nIGlu IGFub3RoZXIgcmVwZXRpdGlvbiAoZS5nLiBgLyhhezIsM30pKi9gKS4gSXQgaXMgYW4gaW1wbGVt ZW50YXRpb24gaXNzdWUgZW50aXJlbHksIGJ1dCB3ZSBiZWxpZXZlIGl0IGlzIGhhcmQgdG8gc3Vw cG9ydCB0aGlzIGNhc2UgY29ycmVjdGx5Lg0KMy4gQm91bmRlZCBvciBmaXhlZCB0aW1lcyByZXBl dGl0aW9uIGlzIHRvbyBsYXJnZSAoZS5nLiBgLyhhfGIpezEwMDAwMCwyMDAwMDB9L2ApLiBUaGUg Y2FjaGUgdGFibGUgc2l6ZSBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHByb2R1Y3Qgb2YgdGhlIG51 bWJlciBvZiBjYWNoZSBwb2ludHMgb2YgcmVnZXggYW5kIGlucHV0IHNpemUuIEluIHRoaXMgY2Fz ZSwgc2luY2UgdGhlIG51bWJlciBvZiBjYWNoZSBwb2ludHMgYmVjb21lcyB0b28gbGFyZ2UsIHRo ZSBvcHRpbWl6YXRpb24gY2Fubm90IGJlIGFwcGxpZWQuDQoNCkV4cGVyaW1lbnRzIHdlcmUgY29u ZHVjdGVkIHRvIGludmVzdGlnYXRlIGhvdyB0aGVzZSBsaW1pdGF0aW9ucyBhcmUgcHJvYmxlbWF0 aWMgaW4gcHJhY3RpY2UuIFdlIHVzZWQgT2JqZWN0U3BhY2UgdG8gY29sbGVjdCBSZWdleHBzIGFu ZCBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoZXkgY291bGQgYmUgb3B0aW1pemVkIGFuZCB0aGUgbnVt YmVyIG9mIGNhY2hlIHBvaW50cy4gUmVnZXhwcyB3ZXJlIGNvbGxlY3RlZCBmcm9tIHRoZSBzdGFu ZGFyZCBsaWJyYXJ5LCBXZWJyaWNrLCBhbmQgUmFpbHMuIFNlZSB0aGUgZm9sbG93aW5nIGdpc3Qg Zm9yIHRoZSBkZXRhaWxzIChbaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbWFrZW5vd2p1c3QvODNl MWU3NWEyZDdkZThiOTU2ZTkzYmRhYzAwNGEwNmJdKGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL21h a2Vub3dqdXN0LzgzZTFlNzVhMmQ3ZGU4Yjk1NmU5M2JkYWMwMDRhMDZiKSkuDQoNClRoZSBleHBl cmltZW50cyByZXN1bHQgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyB0YWJsZS4NCg0KfCBDb2xs ZWN0ZWQgZnJvbSB8ICMgUmVnZXhwIHwgIyBub24tb3B0aW1pemFibGUgfCBNYXhpbXVtIG51bWJl ciBvZiBjYWNoZSBwb2ludHMgfA0KfCAtLS0gfCAtLS0gfCAtLS0gfCAtLS0gfA0KfCBzdGRsaWIg fCAxMDA5IHwgODYgKDguNTIlKSB8IDgxIHwNCnwgV2VicmljayB8IDM1NiB8IDQ0ICgxMi4zNiUp IHwgMjAgfA0KfCBSYWlscyB8IDc1OSB8IDc0ICg3Ljc1JSkgfCAyNyB8DQp8IFRvdGFsIDxicj4g KER1cGxpY2F0aW9ucyBhcmUgcmVkdWNlZCkgfCAxNTA2IHwgMTE4ICg3Ljg0JSkgfCA4MSB8DQoN ClRoaXMgcmVzdWx0IHNob3dzIHRoYXQgdGhlIHBlcmNlbnRhZ2Ugb2Ygbm9uLW9wdGltaXphYmxl IFJlZ2V4cCBpcyBsZXNzIHRoYW4gMTAlLCBhbmQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBm b3Igb3B0aW1pemF0aW9uIGlzIGFib3V0IDEwIHRpbWVzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmlu ZyAoODEvOCwgZm9yIGEgYml0IGFycmF5KSBhdCB3b3JzdCBpbiB0aGlzIGNhc2UuIEl0IGlzIGNv bnNpZGVyZWQgdGhhdCBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIFJlZ2V4cCBjYW4gYmUgb3B0aW1p emVkIGluIHByYWN0aWNlLg0KDQojIyBTcGVjaWZpY2F0aW9uDQoNClRoZSBkZXRhaWxlZCBzcGVj aWZpY2F0aW9uIGhhcyBiZWVuIGZpeGVkIHlldC4gV2UgaGF2ZSBzb21lIGlkZWFzIGFuZCB3ZSB3 b3VsZCBsaWtlIHRvIGRpc2N1c3MgdGhlbS4NCg0KLSBXaGVuIGlzIG9wdGltaXphdGlvbiBlbmFi bGVkPyBDdXJyZW50bHksIGl0IHR1cm5zIG9uIHdoZW4gdGhlIGJhY2t0cmFjayBjYXVzZXMgYXMg bWFueSBhcyB0aGUgaW5wdXQgbGVuZ3RoLg0KLSBIb3cgdGhlIG51bWJlciBvZiBjYWNoZSBwb2lu dHMgaXMgYWxsb3dlZCwgYW5kIGhvdyBtZW1vcnkgY2FuIGJlIGFsbG9jYXRlZD8gSXQgaXMgbm90 IGRldGVybWluZWQgZm9yIG5vdy4NCi0gSWYgdGhlIGFib3ZlIHBhcmFtZXRlcnMgY2FuIGJlIHNw ZWNpZmllZCBieSB1c2VycywgaG93IGFyZSB0aGV5IHNwZWNpZmllZD8gKHZpYSBjb21tYW5kLWxp bmUgZmxhZ3MsIG9yIHN0YXRpYyAvIGluc3RhbmNlIHBhcmFtZXRlcnMgbGlrZSBgUmVnZXhwIy50 aW1lb3V0PWAgYW5kIGBSZWdleHAjdGltZW91dD1gKQ0KLSBVbmxlc3MgdGhlIGlucHV0IHNpemUg aXMgdG9vIGxhcmdlLCB0aGUgYXZhaWxhYmlsaXR5IG9mIG9wdGltaXphdGlvbiBjYW4gYmUgZGV0 ZXJtaW5lZCBvbiBjb21waWxlLXRpbWUuIFNvLCB3ZSB3b3VsZCBsaWtlIHRvIGFkZCBhIG5ldyBm bGFnIHRvIFJlZ2V4cCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNhY2hlIGlzIGF2YWlsYWJsZS4g SXQgYmVjb21lcyBvbmUgb2YgdGhlIGNyaXRlcmlhIGZvciB3aGV0aGVyIFJlZ2V4cCBpcyBlZmZp Y2llbnRseSBleGVjdXRhYmxlIG9yIG5vdC4gV2UgYmVsaWV2ZSBpdCBoZWxwcyB1c2Vycy4gVGh1 cywgd2hpY2ggbGV0dGVyIGlzIHByZWZlcnJlZCBmb3IgdGhpcyBwdXJwb3NlPyBgbGAgKGxpbmVh cikgb3IgYHJgIChyZWd1bGFyKSBzb3VuZHMgZ29vZCwgYnV0IEkgYW0gbm90IHN1cmUgd2hpY2gg aXMgdGhlIGJlc3QuDQoNClRoYW5rIHlvdS4NCg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1Ynkt bGFuZy5vcmcvDQo=