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 C3EA91F910 for ; Mon, 14 Nov 2022 16:52:27 +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="tRbsapTp"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 2DB19121CBE; Tue, 15 Nov 2022 01:52:25 +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 D9CAF121CB8 for ; Tue, 15 Nov 2022 01:52:21 +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=LmzL9eQl6DVnsjJfclDh8YdOad5IYP96SAL5YsGFAdw=; b=tRbsapTpBkE/V7JCh5xeuhvE+KaqEh+aGVLqMFtnyfOr+mvwGHXr49sqn/WEghlcP1kb uo+nKZ1G6NwlfPRCG7+emfVCvZJQcH29RipCtL2rpRXO8BxzQIYy6pl848mBPrrrSIB3W8 T4Vr0MLtV/PwWvVWIlRJX3VFGe478gkTh9yyl+YqRa7C7mgJnYbP4JNxJasdJmgn1vX5H/ gS84reb/qWkKZP2Wma97wVaGsOwzmPsgNtJ9OiGDzpR4YLN56pfKsXAbWBDEUjxWhGuG43 Qf+CqFGVdkhPXQjLx6iqzv7hRKUw0sSq2Iim8jBWSIl62EpLqphmCEqbIQKoqPFg== Received: by filterdrecv-85cd7b65cf-h59wh with SMTP id filterdrecv-85cd7b65cf-h59wh-1-63727243-37 2022-11-14 16:52:19.568555308 +0000 UTC m=+335553.520041604 Received: from herokuapp.com (unknown) by geopod-ismtpd-2-2 (SG) with ESMTP id _cjvUPTTT3eULwv9jLp4bQ for ; Mon, 14 Nov 2022 16:52:19.494 +0000 (UTC) Date: Mon, 14 Nov 2022 16:52:19 +0000 (UTC) From: "mame (Yusuke Endoh)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Bug X-Redmine-Issue-Id: 19119 X-Redmine-Issue-Author: kjtsanaktsidis X-Redmine-Sender: mame 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: 87207 X-SG-EID: =?us-ascii?Q?YbSlef6ZOa=2FS=2FuqSxXRzl42MttQDxKOujGe43WuBjI7JKMg2OkmRsyzG5za6L9?= =?us-ascii?Q?e1flZkYZ9OViVy5Lc4acvpZku1T3IBlo=2FyX26Ek?= =?us-ascii?Q?WvIBdon4=2F7WlhCOapdW=2FwoacmiN29V6w=2FoHdzZ2?= =?us-ascii?Q?TuIVyWq3fQUCi2QzEBTGnxjj5WNvr4rpI=2F4z8+3?= =?us-ascii?Q?Z60Lf9IyVtsdbFZKuhTLvyPVh3Co9o9ZCCM9EOW?= =?us-ascii?Q?QSXhosTg4NNCw35Uj371uiTSzDkEXr2bPP330IK?= =?us-ascii?Q?JjOxLuetjndTa=2FDbQRYmg=3D=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110755 Subject: [ruby-core:110755] [Ruby master Bug#19119] Add an interface for out-of-process profiling tools to access Ruby information 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" SXNzdWUgIzE5MTE5IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFtZSAoWXVzdWtlIEVuZG9oKS4KCgpi eXJvb3QgKEplYW4gQm91c3NpZXIpIHdyb3RlIGluICNub3RlLTM6Cj4gU2luY2UgYWJvdXQgYSB5 ZWFyIGFnbyBob3dldmVyLCB3aGVuIG9uIFJ1YnkgMy4wKyAoYW5kIHdoZW4gWUpJVCBpcyBub3Qg ZW5hYmxlZCksIGBzdGFja3Byb2ZgIGRvZXMgY29sbGVjdCB0aGUgc3RhY2t0cmFjZSBkaXJlY3Rs eSBmcm9tIHRoZSBzaWduYWwgaGFuZGxlciAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90bW0xL3N0 YWNrcHJvZi9wdWxsLzE1MCBjYyBAamhhd3Rob3JuICYgQHRlbmRlcmxvdmVtYWtpbmcpLgoKSSBk aWQgbm90IGtub3cgYWJvdXQgdGhpcyBjaGFuZ2UuIEkgd29uZGVyIGlmIHRoZSBzaWduYWwgaGFu ZGxlciBpcyBleGVjdXRlZCBpbiBhbiBpbmNvbXBsZXRlIHN0YXRlLiBBbnl3YXksIEkgdGhpbmsg dGhlIGV4ZWN1dGlvbiBvZiB0aGUgaW50ZXJwcmV0ZXIgKGF0IGxlYXN0LCB0aGUgbWFpbiB0aHJl YWQpIGlzIHN0b3BwZWQgd2hlbiB0aGUgc2luZ2FsIGhhbmRsZXIgaXMgZXhlY3V0ZWQuCgpJIHRo aW5rIHRoZSBwcm9ibGVtIG9mIHRoaXMgdGlja2V0J3MgcHJvcG9zYWwgaXMgbW9yZSBkaWZmaWN1 bHQgYmVjYXVzZSB0aGUgaW50ZXJwcmV0ZXIgcnVucyBpbiBwYXJhbGxlbCBldmVuIHdoZW4gdGhl IG1vbml0b3IgcHJvY2VzcyBhdHRlbXB0cyB0byBwZWVrIHRoZSBzdGFjayB0cmFjZS4KCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQnVnICMxOTExOTogQWRkIGFuIGlu dGVyZmFjZSBmb3Igb3V0LW9mLXByb2Nlc3MgcHJvZmlsaW5nIHRvb2xzIHRvIGFjY2VzcyBSdWJ5 IGluZm9ybWF0aW9uCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xOTExOSNjaGFu Z2UtMTAwMDkzCgoqIEF1dGhvcjoga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5ha3RzaWRpcykKKiBT dGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCiogQmFja3BvcnQ6IDIuNzogVU5LTk9XTiwg My4wOiBVTktOT1dOLCAzLjE6IFVOS05PV04KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKV2FybmluZzogdGhpcyBpcyBhIHZlcnkgbG9uZyBwcm9wb3NhbCA6KCBJIGRv bid0IHJlYWxseSBrbm93IHdoYXQgdGhlIG1vc3QgcHJvZHVjdGl2ZSB3YXkgdG8gZW5nYWdlIHdp dGggdGhlIFJ1YnkgY29tbXVuaXR5IGFib3V0IHRoaXMgaXMgLSBpZiB0aGVyZSdzIGEgYmV0dGVy IHBsYWNlIHRvIHRha2UgdGhpcywgcGxlYXNlIGxldCBtZSBrbm93IQoKSSBhbHNvIHdhbnQgdG8g YWNrbm93bGVkZ2UgQGl2b2Fuam8gZm9yIGNvbnRyaWJ1dGluZyB0byB0aGlzIHByb3Bvc2FsIC0g SSBib3VuY2VkIG1hbnkgaWRlYXMgYWJvdXQgcHJvZmlsaW5nIG9mZiBoaW0gYW5kIHRoZSBpbXBy b3ZlZC1iYWNrdHJhY2Ugc3R1ZmYgaXMgYWxsIGJhc2VkIG9uIGhpcyBbYmFja3RyYWNpZV0oaHR0 cHM6Ly9naXRodWIuY29tL2l2b2Fuam8vYmFja3RyYWNpZSkgZ2VtLgoKIyMgTW90aXZhdGlvbgoK V2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgYW5kIG9sZCBSdWJ5IGFwcHMsIHRoZXJlIGlzIG9mdGVu IGJvdGggYSBuZWVkIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHNvbWUgb3BlcmF0aW9u cywgYXMgd2VsbCBhcyBhIGxhY2sgb2YgdW5kZXJzdGFuZGluZyBhcyB0byBob3csIHByZWNpc2Vs eSwgdGhlIGNvZGUgd29ya3MsIGFuZCB3aGF0IGFzcGVjdCBvZiBpdCBpcyBhY3R1YWxseSBzbG93 LiBGdXJ0aGVybW9yZSwgdGhlIHBlcmZvcm1hbmNlIGlzc3VlcyBpbiBxdWVzdGlvbiBvZnRlbiBv bmx5IGFwcGVhciBpbiBhIGxpdmUsIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHdoZXJlIHRoZXJl IGlzIHNvbWUgdHJhZmZpYyBwYXR0ZXJuIG9yIHVzZXIgZGF0YSBjYXVzaW5nIHRoZSBwcm9ibGVt LiBJbiBzaXR1YXRpb25zIGxpa2UgdGhpcywgcHJvZmlsaW5nIHRvb2xzIGNhbiBwcm92ZSBpbnZh bHVhYmxlIGluIGhlbHBpbmcgdG8gdW5kZXJzdGFuZCBhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZSBp bi1zaXR1IGluIHByb2R1Y3Rpb24uCgpUaGUgdGhpbmdzIHdoaWNoIGFuIGVuZ2luZWVyIG1pZ2h0 IHVzZSBhIHByb2ZpbGVyIHRvIG1lYXN1cmUgaW5jbHVkZToKICAqIFdhbGwgY2xvY2sgdGltZTsg aG93IGxvbmcgZG8gcGFydGljdWxhciBtZXRob2QgY2FsbHMgdGFrZT8KICAqIENQVSB0aW1lOyBv ZiB0aGUgdGltZSBhIG1ldGhvZCB0YWtlcywgaG93IGxvbmcgaXMgc3BlbnQgYWN0dWFsbHkgX3J1 bm5pbmdfIG9uIHRoZSBDUFUsIGFuZCBob3cgbXVjaCBpcyBzcGVudCBibG9ja2VkIHdhaXRpbmcg Zm9yIGUuZy4gYSBuZXR3b3JrIHJlc3BvbnNlPwogICogR1ZMIGNvbnRlbnRpb247IGlzIGFuIGFw cGxpY2F0aW9uIHVzaW5nIGxvdHMgb2YgdGhyZWFkcyBqdXN0IHdhaXRpbmcgZm9yIHRoZSBHVkwg dG8gYmVjb21lIGF2YWlsYWJsZT8KICAqIEdDIHRpbWU7IGlzIGEgcGFydGljdWxhciBwaWVjZSBv ZiBjb2RlIF9hY3R1YWxseV8gc2xvdywgb3IgaXMgaXRzIHNsb3duZXNzIGp1c3QgYSByZXN1bHQg b2YgX290aGVyXyBjb2RlIGNhdXNpbmcgdGhlIEdDIHRvIGJlIGludm9rZWQ/CiAgKiBBbGxvY2F0 aW9uczsgaG93IG1hbnkgb2JqZWN0cyBpcyBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZSBhbGxv Y2F0aW5nLCBhbmQgd2hhdCBpbXBhY3QgaXMgdGhpcyBoYXZpbmcgb24gR0M/CiAgKiBIZWFwOyBv ZiB0aGUgb2JqZWN0cyBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZSBhbGxvY2F0ZWQsIGhvdyBt YW55IG9mIHRoZW0gYXJlIHN0aWxsIGxpdmU/IElzIHRoZXJlIHNvbWUga2luZCBvZiBsZWFrPwoK R2VuZXJhbGx5LCBpbiBvcmRlciB0byBjb2xsZWN0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSBwcm9k dWN0aW9uIGluIGEgbWluaW1hbGx5LWltcGFjdGZ1bCB3YXksIGEgc2FtcGxpbmcgYXBwcm9hY2gg aXMgdXNlZC4gQSBwcm9maWxpbmcgdG9vbCBwZXJpb2RpY2FsbHkgdGFrZXMgYSBzbmFwc2hvdCBv ZiB0aGUgY3VycmVudCBjYWxsLXN0YWNrIG9mIGEgUnVieSBwcm9ncmFtOyBkZXBlbmRpbmcgb24g d2hhdCBpcyBiZWluZyBtZWFzdXJlZCwgdGhpcyBwZXJpb2RpY2l0eSBtaWdodCBiZSBlLmcuIHNp bXBseSBldmVyeSBOIG1zIChmb3Igd2FsbC1jbG9jayBwcm9maWxpbmcpLCBldmVyeSBOIGFsbG9j YXRpb25zIChmb3IgYWxsb2NhdGlvbiBwcm9maWxpbmcpLCBldGMuIFRoZW4sIHRoZSBkYXRhIHdp bGwgZ2VuZXJhbGx5IGJlIGNvbWJpbmVkIGFjcm9zcyBtYW55IGluc3RhbmNlcyBvZiBhIHByb2dy YW0gdG8gZ2V0IGFuIGFnZ3JlZ2F0ZSB2aWV3ICh0aHJvdWdoIGUuZy4gYSBmbGFtZSBncmFwaCku CgpJbiBhZGRpdGlvbiB0byB0aGlzIGZsZWV0LXdpZGUgYWdncmVnYXRpb24sIGl0J3Mgc29tZXRp bWVzIHVzZWZ1bCB0byBwcm9maWxlIGEgcGFydGljdWxhciBwcm9jZXNzIHdoaWNoIGhhcyBzdWRk ZW5seSBzdGFydGVkIGRpc3BsYXlpbmcgc29tZSBwYXRob2xvZ3kgb2YgaW50ZXJlc3QuIEZvciBl eGFtcGxlLCBpZiB5b3UgaGFkIGEgd2Vic2VydmVyIHByb2Nlc3MgdGhhdCBoYWQgc3VkZGVubHkg YmVjb21lIHN0dWNrLCB5b3UgbWlnaHQgd2FudCB0byBhdHRhY2ggYSBwcm9maWxlciB0byBmaW5k IG91dCBfd2h5Xy4gSW4gc2NlbmFyaW9zIGxpa2UgdGhpcywgaXQncyBvZnRlbiBpbXBvc3NpYmxl IHRvIG1ha2Ugc29tZSBhZGp1c3RtZW50IHRvIHRoZSBwcm9ncmFtIHRvIGVuYWJsZSBwcm9maWxp bmcgYW5kIHJlc3RhcnQgaXQ7IHRoZSBhY3Qgb2YgcmVzdGFydGluZyBpdCB3b3VsZCBtYWtlIHRo ZSBwcm9ibGVtIGdvIGF3YXkgKGZvciBub3chKS4KCiMjIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGFy dAoKVGhpcyByZXByZXNlbnRzIG15IGJlc3QgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2F5cyBpbiB3 aGljaCBtb3N0IFJ1YnkgcHJvZmlsaW5nIHRvb2xzIHdvcmsgdG9kYXkuIEknbSBzdXJlIEkndmUg bWlzc2VkIHNvbWUgaW1wb3J0YW50IGRldGFpbHMgYW5kIG90aGVyIHRvb2xzLCBmb3Igd2hpY2gg SSdtIGRlZXBseSBzb3JyeS4KCiMjIyBTaWduYWwtYmFzZWQgcHJvZmlsaW5nCgpTaWduYWwtYmFz ZWQgcHJvZmlsZXJzIGNhbiBiZSB1c2VkIHRvIG1lYXN1cmUgQ1BVIGFuZCB3YWxsIGNsb2NrIHRp bWUuIEluIHRoaXMgc2NoZW1lLCBhIHByb2ZpbGVyIChpbiB0aGUgZm9ybSBvZiBhbiBleHRlbnNp b24gZ2VtKSBzZXRzIHVwIGEgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR1BST0YgaW4gQywgYW5kIHRo ZW4gYXJyYW5nZXMgZm9yIFNJR1BST0YgdG8gYmUgZGVsaXZlcmVkIHRvIHRoZSBwcm9jZXNzIHJl cGVhdGVkbHkgaW4gc29tZSBraW5kIG9mIGxvb3AuIFRoZSBzaWduYWwgaGFuZGxlciB0aGVuIGNh cHR1cmVzIGEgc3RhY2sgdHJhY2UgdXNpbmcgdGhlIGByYl9wcm9maWxlX2ZyYW1lc2AgQVBJIGZy b20gdGhlIEMgZXh0ZW5zaW9uIGFuZCByZWNvcmRzIHRoaXMgYXMgYSBzaW5nbGUgc2FtcGxlLgoK VGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIENQVS93YWxsIGNsb2NrIHByb2ZpbGluZyBp biBbU3RhY2twcm9mXShodHRwczovL2dpdGh1Yi5jb20vdG1tMS9zdGFja3Byb2YpLCB0aGUgW0Rh dGFkb2cgY29udGludW91cyBwcm9maWxlcl0oaHR0cHM6Ly9naXRodWIuY29tL0RhdGFEb2cvZGQt dHJhY2UtcmIpLCBhbmQgSSdtIHN1cmUgb3RoZXJzLiBJdCdzIGFsc28gYSB3ZWxsLWtub3duIG1l Y2hhbmlzbSB1c2VkIGluIG90aGVyIG5vbi1SdWJ5IHRvb2xzIGxpa2UgW2dwZXJmdG9vbHNdKGh0 dHBzOi8vZ3BlcmZ0b29scy5naXRodWIuaW8vZ3BlcmZ0b29scy9jcHVwcm9maWxlLmh0bWwpCgpP bmUgYmVuZWZpdCBvZiB0aGlzIG1lY2hhbmlzbSBpcyB0aGF0IGl0IHNob3VsZCBiZSBxdWl0ZSBm YXN0LiBUcmlnZ2VyaW5nIHRoZSBzaWduYWwgY2F1c2VzIGEgY29udGV4dCBzd2l0Y2ggaW50byB0 aGUga2VybmVsICYgYmFjayBpbnRvIHRoZSBoYW5kbGVyLCBidXQgZXhlY3V0aW9uIHN0YXlzIGlu c2lkZSB0aGUgY3VycmVudCBwcm9ncmFtOyB0aGVyZSdzIG5vIG5lZWQgZm9yIHRoZSBleGVjdXRp b24gdG8gc3dpdGNoIHRvIGFub3RoZXIgcHJvZ3JhbSAoYW5kIGNvbnNlcXVlbnRseSBjaGFuZ2Ug YWRkcmVzcyBzcGFjZSkuCgpUaGUgZG93bnNpZGUgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IGl0 IHJlcXVpcmVzIHNvbWUgbGV2ZWwgb2YgY29vcGVyYXRpb24gZnJvbSB0aGUgcHJvZ3JhbSBiZWlu ZyBwcm9maWxlZC4gU29tZXRoaW5nIGluc2lkZSB0aGUgcHJvY2VzcyBtdXN0IGluc3RhbGwgdGhl IFNJR1BST0YgaGFuZGxlcjsgaWYgeW91IGhhdmUgc29tZSBleGlzdGluZywgcnVubmluZyBSdWJ5 IHByb2Nlc3MgZm9yIHdoaWNoIGEgcHJvZmlsZXIgaXMgbm90IGxvYWRlZCwgeW91IGNhbm5vdCBi ZWdpbiBwcm9maWxpbmcgaXQgd2l0aG91dCByZXN0YXJ0aW5nIGl0IChhbmQgdXNpbmcgc29tZSBt ZWNoYW5pc20gbGlrZSBhIGAtcm15X3Byb2ZpbGVyL2F1dG9sb2FkYCBmbGFnKS4KCkFub3RoZXIg cHJvYmxlbSB3aXRoIHRoaXMgYXBwcm9hY2ggaXMgdGhlIGVmZmVjdCB0aGVzZSBTSUdQUk9GIHNp Z25hbHMgaGF2ZSBvbiB0aGUgYXBwbGljYXRpb24uIE5vcm1hbGx5LCB0aGUgcHJvZmlsZXIgaW5z dGFsbHMgdGhlIHNpZ25hbCBoYW5kbGVyIHdpdGggdGhlIFNBX1JFU1RBUlQgZmxhZzsgdGhpcyBf c2hvdWxkXyBtZWFuIHRoYXQgYW55IGluLXByb2dyZXNzIHN5c3RlbSBjYWxsIHRoZSBhcHBsaWNh dGlvbiBpcyBkb2luZyB3aGVuIHRoZSBTSUdQUk9GIGFycml2ZXMgZ2V0cyB0cmFuc3BhcmVudGx5 IHJlc3RhcnRlZCB3aGVuIHRoZSBoYW5kbGVyIGZpbmlzaGVzIGNvbGxlY3RpbmcgaXRzIHNhbXBs ZS4gSG93ZXZlciwgb24gTGludXggYXQgbGVhc3QsIHRoZXJlIGFyZSBzb21lIHN5c3RlbSBjYWxs cyB3aGljaCBhcmUgX05PVF8gcmVzdGFydGVkIHdoZW4gU0FfUkVTVEFSVCBoYXBwZW5zIC0gbm90 YWJseSBzb21lIG5ldHdvcmsgcmVsYXRlZCBvbmVzIGxpa2UgcG9sbCwgZXBvbGwsIGFuZCBzZW5k L3JlY3Ygd2hlbiBhIHNvY2tldCB0aW1lb3V0IGlzIHNldC4gVGhlc2Ugc3lzdGVtIGNhbGxzIHdp bGwgaW5zdGVhZCBmYWlsIHdpdGggRUlOVFI7IHdlbGwgYmVoYXZlZCBwcm9ncmFtcyBhbmQgbGli cmFyaWVzIF9TSE9VTERfIHJldHJ5IHRoaXMuCgpTYWRseSwgaG93ZXZlciwgdGhlIHJlcGVhdGVk IGRlbGl2ZXJ5IG9mIFNJR1BST0YgdGVucyBvciBodW5kcmVkcyBvZiB0aW1lcyBwZXIgc2Vjb25k IGRvZXMgaGF2ZSBhIHdheSBvZiBzaGFraW5nIG91dCBjb3JuZXItY2FzZXMgaW4gbGlicmFyaWVz IHdoZXJlIHRoaXMgaXNuJ3QgYmVpbmcgZG9uZSBwcm9wZXJseS4gRm9yIGV4YW1wbGUsIEkgaGF2 ZSBwZXJzb25hbGx5IGRpc2NvdmVyZWQgdGhlIGhhcmQgd2F5IHRoYXQgbGlibXlzcWxjbGllbnQg dmVyc2lvbiA1LjcgZG9lcyB0aGlzIHdyb25nIGluIG9uZSBwbGFjZSwgc28gZW5hYmxpbmcgYSBT SUdQUk9GLWJhc2VkIHByb2ZpbGVyIGNhbiBjYXVzZSBsaWJteXNxbGNsaWVudCB0byBlcnJvbmVv dXNseSB0aGluayB0aGF0IGRhdGFiYXNlIGNvbm5lY3Rpb25zIHdlcmUgY2xvc2VkLiBUaGlzIGlz IHVuZG91YnRlZGx5IGEgYnVnIGluIGxpYm15c3FsY2xpZW50ICh3aGljaCwgYnkgdGhlIHdheSwg c2VlbXMgdG8gYmUgZml4ZWQgaW4gdmVyc2lvbiA4KSwgdGhhdCBfY291bGRfIGJlIHRyaWdnZXJl ZCBieSBhbnkgb3RoZXIgc2lnbmFsLiBUaGVyZSdzIG5vIGRlbnlpbmcgdGhvdWdoIHRoYXQgU0lH UFJPRi1iYXNlZCBwcm9maWxpbmcgaXMgYSByZWFsIHRvcnR1cmUtdGVzdCBmb3IgRUlOVFIgaGFu ZGxpbmcsIGFuZCB0aGVyZSB1bmRvdWJ0ZWRseSBfYXJlXyBidWdneSBsaWJyYXJpZXMgb3V0IHRo ZXJlIGluIHRoZSB3aWxkIHRoYXQgcGVvcGxlIGFyZSB1c2luZyBpbiB0aGVpciBhcHBsaWNhdGlv bnMuIEl0IHdvdWxkIGJlIG5pY2UgaWYgUnVieSBwcm9maWxlcnMgY291bGQgd29yayBhcm91bmQg dGhpcyBwcm9ibGVtLgoKIyMjIFJVQllfSU5URVJOQUxfRVZFTlRfTkVXT0JKIHByb2ZpbGluZwoK Q29sbGVjdGlvbiBvZiBzdGFja3MgZnJvbSBTSUdQUk9GIHdvcmtzIGZvciBDUFUvd2FsbCB0aW1l IHByb2ZpbGluZywgYnV0IGEgZGlmZmVyZW50IGFwcHJvYWNoIGlzIG5lZWRlZCBmb3IgaW4tcHJv Y2VzcyBwcm9maWxlcnMgdG8gY29sbGVjdCBhbGxvY2F0aW9uIHByb2ZpbGVzLiBUaGlzIGlzIG5v cm1hbGx5IGRvbmUgYnkgcmVnaXN0ZXJpbmcgYSB0cmFjZXBvaW50IGhhbmRsZXIgZm9yIFJVQllf SU5URVJOQUxfRVZFTlRfTkVXT0JKIGluIHRoZSBwcm9maWxlciBleHRlbnNpb24gZ2VtOyB0aGlz IGlzIGNhbGxlZCBldmVyeSB0aW1lIGEgUnVieSBvYmplY3QgaXMgYWxsb2NhdGVkLiBGcm9tIHRo aXMgaGFuZGxlciwgdGhlIHByb2ZpbGVyIGNhbiB1c2UgYHJiX3Byb2ZpbGVfZnJhbWVzYCBhZ2Fp biB0byBjb2xsZWN0IGEgUnVieSBiYWNrdHJhY2Ugb2YgdGhlIGNvZGUgcmVzcG9uc2libGUgZm9y IGFsbG9jYXRpbmcgdGhpcyBvYmplY3QuCgojIyMgUHRyYWNlLWJhc2VkIHByb2ZpbGluZwoKQW5v dGhlciBhcHByb2FjaCB0aGF0IGhhcyBiZWVuIHVzZWQgaXMgdG8gY29udHJvbCB0aGUgUnVieSBw cm9ncmFtIHRvIGJlIHByb2ZpbGVkIHdpdGggYW5vdGhlciwgc2VwYXJhdGUgcHJvY2VzcywgdXNp bmcgYW4gYXBwcm9wcmlhdGUgcGxhdGZvcm0gQVBJIChlLmcuIHB0cmFjZSBvbiBMaW51eCkuIFBl cmlvZGljYWxseSwgdGhlIHByb2ZpbGVyIHByb2Nlc3MgY2FuIHVzZSBwdHJhY2UgdG8gc3VzcGVu ZCBleGVjdXRpb24gb2YgdGhlIHRhcmdldCBSdWJ5IHByb2dyYW0sIGFuZCBjb2xsZWN0IGEgc3Rh Y2sgdHJhY2Ugb2YgaXQuIFRoaXMgaXMgdGhlIGFwcHJvYWNoIHVzZWQgYnkgdGhlIFtyYnNweV0o aHR0cHM6Ly9naXRodWIuY29tL3Jic3B5L3Jic3B5KSBwcm9maWxlciwgd2hpY2ggaXMgaXRzZWxm IGFjdHVhbGx5IGEgUnVzdCBwcm9ncmFtLgoKVGhlIG1haW4gc3RyZW5ndGggb2YgdGhpcyBhcHBy b2FjaCBpcyB0aGF0IGl0IGFsbG93cyBvbmUgdG8gYmVnaW4gdHJhY2luZyBhIFJ1YnkgcHJvZ3Jh bSB3aGljaCBpcyBhbHJlYWR5IHJ1bm5pbmcsIF93aXRob3V0IHJlc3RhcnRpbmcgaXRfOyByYnNw eSBjYW4gcHRyYWNlLWF0dGFjaCB0byBhIHJ1bm5pbmcgcHJvY2VzcyBhbmQgYmVnaW4gY29sbGVj dGluZyBzYW1wbGVzIHN0cmFpZ2h0IGF3YXkuIFRoaXMgYWxsb3dzIG9uZSB0byBnYWluIGluc2ln aHQgaW50byBpbnRlcm1pdHRlbnQgcHJvYmxlbXMgb25jZSB0aGV5IHN0YXJ0IGhhcHBlbmluZyEK ClVuZm9ydHVuYXRlbHksICJjb2xsZWN0IGEgc3RhY2sgdHJhY2UiIGlzIHF1aXRlIHRyaWNreSB0 byBkbyBmcm9tIG91dHNpZGUgdGhlIHByb2Nlc3M7IHdlIHdhbnQgdGhlIF9SdWJ5XyBsZXZlbCBz dGFjayB0cmFjZSwgbm90IChvciBhdCBsZWFzdCwgYXMgd2VsbCBhcykgdGhlIG1hY2hpbmUgc3Rh Y2sgdHJhY2UgKHdoaWNoIGNvdWxkIGJlIGNvbGxlY3RlZCBlLmcuIHZpYSBEV0FSRiB1bndpbmRp bmcgb3IgZnJhbWUtcG9pbnRlciBjaGFzaW5nKS4gVG8gZ2V0IHRoZSBSdWJ5IHN0YWNrIHRyYWNl IHJlcXVpcmVzIHJ1bW1hZ2luZyBhcm91bmQgaW5zaWRlIHRoZSBtZW1vcnkgb2YgdGhlIHRhcmdl dCBwcm9jZXNzIChlLmcuIHdpdGggYC9wcm9jL3twaWR9L21lbWAgb24gTGludXgpLCB0byBmaW5k IHRoZSByZWxldmFudCBgcmJfY29udHJvbF9mcmFtZV90YCBzdHJ1Y3R1cmVzLiBSYnNweSBjb250 YWlucyBhIGh1Z2UgbGlzdCBvZiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMgdmVy c2lvbnMgb2YgUnVieSB0byBtYWtlIHRoaXMgcG9zc2libGUsIGJ1dCBhbnkgdGltZSBhIG5ldyB2 ZXJzaW9uIG9mIFJ1YnkgaXMgcmVsZWFzZWQsIGEgbmV3IHZlcnNpb24gb2YgUmJzcHkgbXVzdCBh bHNvIGJlIHJlbGVhc2VkIHRvIGFjY291bnQgZm9yIGFueSBjaGFuZ2VzIHRvIHRoZSBsYXlvdXQg b2YgUnVieSdzIGludGVybmFsIHN0cnVjdHVyZXMuCgpJbiB0aGVvcnksIHRoZSBwdHJhY2UgYXBw cm9hY2ggaXMgYWxzbyB3b3JzZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmU7IHRvIGNv bGxlY3QgYSBzYW1wbGUsIGV4ZWN1dGlvbiBtdXN0IHN3aXRjaCBmcm9tIHRoZSBwcm9jZXNzIHRv IGJlIHByb2ZpbGVkIHRvIHRoZSBwcm9maWxlciBwcm9jZXNzLCB3aGljaCByZXF1aXJlcyBzd2l0 Y2hpbmcgbWVtb3J5IG1hcHBpbmdzLiBSZWNhbGwgdGhhdCB3aXRoIGluLXByb2Nlc3MgU0lHUFJP RiBwcm9maWxpbmcsIHRoZSBwcm9maWxlciB3b3JrIGlzIGRvbmUgaW4gdGhlIHNhbWUgcHJvY2Vz cyB3aXRoIHRoZSBzYW1lIG1lbW9yeSBtYXBwaW5ncy4gSG93ZXZlciwgdGhpcyBjb25jZXJuIHNl ZW1zIHRvIGJlIGxhcmdlbHkgdGhlb3JldGljYWw7IEkgaGF2ZSBub3QgX2FjdHVhbGx5XyBzZWVu IG9yIGhlYXJkIG9mIGFueWJvZHkgc2F5aW5nIHRoYXQgdGhpcyBpcyBtYWtpbmcgcmJzcHkgdG9v IHNsb3cgZm9yIHRoZWlyIHVzZWNhc2UuCgpGaW5hbGx5LCBhbHRob3VnaCBwdHJhY2UtYmFzZWQg cHJvZmlsaW5nIGdldHMgdXMgX2Nsb3NlXyB0byB0aGUgaWRlYWwgb2Ygbm90IHJlcXVpcmluZyBh bnkgZm9yZXNpZ2h0IHRvIGJlZ2luIHByb2ZpbGluZyBhIHJ1bm5pbmcgcHJvZ3JhbSwgdGhlcmUg aXMgX29uZV8gc21hbGwgcmVxdWlyZW1lbnQgd2hpY2ggbXVzdCBiZSBzYXRpc2ZpZWQgYWhlYWQg b2YgdGltZSAtIHRoZSBSdWJ5IGludGVycHJldGVyIG5lZWRzIHRvIGhhdmUgbm90IGhhZCBpdHMg c3ltYm9scyBzdHJpcHBlZCBzbyB0aGF0IHJic3B5IGNhbiBmaW5kIHRoZSBgcnVieV9jdXJyZW50 X3ZtX3B0cmAgZ2xvYmFsLiBJIGJlbGlldmUgcmJzcHkgbWFrZXMgYW4gX2F0dGVtcHRfIHRvIGZp bmQgaXQgd2l0aG91dCB0aGUgc3ltYm9sIGJ1dCBpdCBkb2VzIG5vdCBjbGFpbSB0byBiZSByZWxp YWJsZS4KCiMjIyBBbGxvY2F0aW9uIHNhbXBsaW5nIGZyb20gcHRyYWNlLWJhc2VkIHByb2ZpbGlu ZwoKVG8gcGVyZm9ybSBhbGxvY2F0aW9uIHByb2ZpbGluZyBmcm9tIG91dHNpZGUgdGhlIFJ1Ynkg cHJvY2Vzcywgd2Ugd291bGQgbmVlZCBzb21lIGFuYWxvZ3VlIHRvIFJVQllfSU5URVJOQUxfRVZF TlRfTkVXT0JKLiBJIGJlbGlldmUgdGhpcyBfY291bGRfIGJlIGFjaGlldmVkIGJ5IGNvbXBpbGlu ZyBSdWJ5IHdpdGggZHRyYWNlL3N5c3RlbXRhcC9VU0RUIHByb2JlcyBlbmFibGVkLCBhbmQgaGF2 aW5nIHRoZSBwcm9maWxlciBwcm9jZXNzIHdyaXRlIGEgdHJhcCBpbnN0cnVjdGlvbiBvdmVyIHRo ZSB0b3Agb2YgdGhlIHByb2JlICh3aGljaCBpcyBob3cgZS5nLiBkZWJ1Z2dlcnMgd29yaykuIEkg ZG9uJ3QgYmVsaWV2ZSByYnNweSBvciBhbnkgb3RoZXIgcHJvZmlsZXIgdGhhdCBJIGZvdW5kIGFj dHVhbGx5IGRvZXMgdGhpcyB0aG91Z2guCgojIyMgUGVyZi1iYXNlZCBwcm9maWxpbmcKCkxpbnV4 IGhhcyBhIGRlZGljYXRlZCBzdWJzeXN0ZW0gY2FsbGVkIHBlcmYgd2hpY2ggKGFtb25nc3QgbWFu eSBvdGhlciB0aGluZ3MpIGNhbiBkbyBsb3ctb3ZlcmhlYWQgcHJvZmlsaW5nIG9mIGFyYml0cmFy eSBwcm9jZXNzZXMuIFRoZSBzYW1wbGluZyBpcyBkb25lIGluc2lkZSB0aGUga2VybmVsLCBzbyBs aWtlIFNJR1BST0YgKGFuZCB1bmxpa2UgcHRyYWNlKSBjb2xsZWN0aW5nIGEgc2FtcGxlIHJlcXVp cmVzIG5vIHN3aXRjaCBvZiBhZGRyZXNzIHNwYWNlLiBIb3dldmVyLCBvZiBjb3Vyc2UsIHBlcmYg b25seSB1bmRlcnN0YW5kcyB0aGUgbWFjaGluZSBzdGFjaywgbm90IHRoZSBSdWJ5IHN0YWNrLCBz byB1c2luZyBwZXJmIHRvIHByb2ZpbGUgYSBSdWJ5IHByb2dyYW0gaXMgbm90IGN1cnJlbnRseSBl eHRyYW9yZGluYXJpbHkgdXNlZnVsICh1bmxlc3MgeW91J3JlIHByb2ZpbGluZyB0aGUgUnVieSBW TSBpdHNlbGYgb3IgYSBDIGV4dGVuc2lvbikuCgpQZXJmIGFjdHVhbGx5IGhhcyBhIFttZWNoYW5p c21dKGh0dHBzOi8vd3d3LmJyZW5kYW5ncmVnZy5jb20vcGVyZi5odG1sI0pJVF9TeW1ib2xzKSB0 byBoZWxwIGdpdmUgbWVhbmluZ2Z1bCBzdGFjayB0cmFjZXMgZm9yIGxhbmd1YWdlcyB3aXRoIEpJ VHM7IHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byB3cml0ZSBvdXQgYSBtYXBwaW5nIG9m IGZ1bmN0aW9uIGFkZHJlc3MgLT4gbmFtZSB0byBhIGZpbGUgYC90bXAvcGVyZi0kUElELm1hcGA7 IHBlcmYgd2lsbCB1c2UgdGhpcyBmaWxlIHRvIHN5bWJvbGljYXRlIHN0YWNrcy4gUHl0aG9uIFty ZWNlbnRseSBhZGRlZF0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2L2hvd3RvL3BlcmZfcHJv ZmlsaW5nLmh0bWwpIHN1cHBvcnQgZm9yIHRoaXMgbWVjaGFuaXNtIGFzIHdlbGw7IGhvd2V2ZXIs IGJlY2F1c2UgQ1B5dGhvbiBkb2VzIG5vdCBoYXZlIGEgSklULCBpdCB3b3JrcyBieSBnZW5lcmF0 aW5nIGEgbmF0aXZlIHRyYW1wb2xpbmUgZm9yIGVhY2ggZnVuY3Rpb24gKHdpdGggYSB1bmlxdWUg YWRkcmVzcyksIGFuZCBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSB0cmFtcG9saW5lcyBkdXJpbmcg UHl0aG9uIG1ldGhvZCBleGVjdXRpb24gdG8gbWFrZSB0aGUgbWFjaGluZSBzdGFjayBtaXJyb3Ig dGhlIFZNIG9uZS4gVGhpcyBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIGluIENSdWJ5IGN1 cnJlbnRseS4KCiMjIFRoZSBwcm9wb3NhbDogcHJvdmlkZSBhbiAiZXh0ZXJuYWwgZGVidWcgc2Vj dGlvbiIKCldlIGlkZWFsbHkgd291bGQgbGlrZSB0byBoYXZlIGEgd2F5IHRvIHByb2ZpbGUgUnVi eSBhcHBsaWNhdGlvbnMgd2hpY2ggY29tYmluZXMgdGhlIGJlbmVmaXRzIG9mIHRoZSBTSUdQUk9G IG1lY2hhbmlzbSAoZWFzeSwgZG9jdW1lbnRlZCBhY2Nlc3MgdG8gUnVieSBjYWxsIHN0YWNrcyks IHRoZSBwdHJhY2UgbWVjaGFuaXNtICh0aGUgYWJpbGl0eSB0byBhdHRhY2ggdG8gcnVubmluZyBw cm9jZXNzZXMgd2l0aCBhIG1pbmltdW0gb2YgZm9yZXNpZ2h0IHJlcXVpcmVkKSwgYW5kIHRoZSBw ZXJmIG1lY2hhbmlzbSAobG93IG92ZXJoZWFkIHNhbXBsZSBjb2xsZWN0aW9uIHdpdGhvdXQgcmVx dWlyaW5nIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlIHN3aXRjaCkuIFRoaXMgcHJvcG9zYWwgYWlt cyB0byBwcm92aWRlIGV4YWN0bHkgdGhhdC4KClRoZSBSdWJ5IGludGVycHJldGVyIHdvdWxkIGhh dmUgYSBuZXcgZ2xvYmFsIHZhcmlhYmxlIGByYl9kZWJ1Z19leHRfc2VjdGlvbmAsIHdoaWNoIGlz IGRlZmluZWQgd2l0aCBgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicmJfZGVidWdfZXh0IikpKWAg c28gdGhhdCBpdCBhcHBlYXJlZCBpbiBhIHNlcGFyYXRlIHNlY3Rpb24gaW4gdGhlIEVMRiBiaW5h cnkuIFRoaXMgdmFyaWFibGUgd291bGQgYmUgY29uc3RhbnRseSBrZXB0IHBvcHVsYXRlZCB3aXRo IHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSBjYWxsLXN0YWNrcyBvZiBhbGwg dGhyZWFkcy9maWJlcnMgaW4gdGhlIHByb2dyYW0uIEFuIGV4dGVybmFsIGRlYnVnZ2luZyB0b29s IGNvdWxkIGVhc2lseSAoImVhc2lseSIpIHB0cmFjZSBhIHJ1bm5pbmcgUnVieSBwcm9ncmFtLCBh bmQgZmluZCB0aGUgYWRkcmVzcyBvZiB0aGlzIHNlY3Rpb24gaW4gaXRzIHJ1bm5pbmcgbWVtb3J5 LCBldmVuIGlmIHN5bWJvbHMgaGF2ZSBiZWVuIHN0cmlwcGVkLiBPbmNlIGFuIGV4dGVybmFsIHRv b2wgaGFzIGZvdW5kIHRoaXMgdmFyaWFibGUsIGl0IG5lZWRzIHRvIG1ha2Ugc2Vuc2Ugb2YgaXQu IFJ1Ynkgd291bGQgcHJvdmlkZSBhIG5ldyBoZWFkZXIgZmlsZSBgaW5jbHVkZS9ydWJ5L2RlYnVn X2V4dGVybmFsLmhgIHdoaWNoIGRlc2NyaWJlZCB0aGUgbGF5b3V0IG9mIHRoaXMgc3RydWN0dXJl LgoKVGhlIHNpbXBsZSwgc2xvdyB2ZXJzaW9uIG9mIGFuIGV4dGVybmFsIHByb2ZpbGVyIHVzaW5n IHRoaXMgaW50ZXJmYWNlIHdvdWxkIGJlIGEgbG90IGxpa2UgcmJzcHk7IGl0IHdvdWxkIHVzZSBw dHJhY2UgdG8gcGVyaW9kaWNhbGx5IHN0b3AgdGhlIFJ1YnkgcHJvY2VzcywgYW5kIHRoZW4gdXNl IHRoZSBjb250ZW50cyBvZiBgcmJfZGVidWdfZXh0X3NlY3Rpb25gIHRvIGNvbGxlY3QgUnVieSBi YWNrdHJhY2VzIGZvciBDUFUvd2FsbC1jbG9jayBwcm9maWxpbmcuIFRoZSBiZW5lZml0LCBvZiBj b3Vyc2UsIGlzIHRoYXQgaXQncyB1c2luZyBhIGRvY3VtZW50ZWQgaW50ZXJmYWNlIHRoYXQgY2Fu IGJlIHZlcnNpb25lZCBhbmQga2VwdCBiYWNrd2FyZHMgY29tcGF0aWJsZSwgcmF0aGVyIHRoYW4g aGF2aW5nIHRvIGNvbnN0YW50bHkgY2hhc2UgYnJlYWtpbmcgY2hhbmdlcyB0byBpbnRlcm5hbCBS dWJ5IFZNIHN0cnVjdHVyZXMuCgpIb3dldmVyLCB0aGUgYmVuZWZpdCBvZiB0aGlzIGFwcHJvYWNo IGlzIHRoYXQgd2UgY2FuIGRvIGJldHRlciEgVGhlIHBlcmYgc3Vic3lzdGVtIG9uIExpbnV4IGlz IGFibGUgdG8gaW52b2tlIGFuIGVCUEYgcHJvZ3JhbSB0byBhY3R1YWxseSBjb2xsZWN0IHNhbXBs ZXMgKHVzaW5nLCBJIHRoaW5rLCBgUEVSRl9FVkVOVF9JT0NfU0VUX0JQRmAgYnV0IEknbSBub3Qg MTAwJSBzdXJlKSBhbmQgd3JpdGUgdGhlbSB0byBhIHJpbmctYnVmZmVyLiBUaGUgZUJQRiBwcm9n cmFtIGNhbiBhY3R1YWxseSB1c2UgdGhlIGBkZWJ1Z19leHRlcm5hbC5oYCBoZWFkZXIgZmlsZSB0 byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IFJ1Ynkgc3RhY2sgdHJhY2UocykgaXRzZWxmLCB3aXRo b3V0IG5lZWRpbmcgdG8gc3dpdGNoIGJhY2sgaW50byB0aGUgcHJvZmlsZXIgYWRkcmVzcyBzcGFj ZSEgVGhlIHByb2ZpbGVyIHByb2dyYW0gb25seSBuZWVkcyB0byBydW4gcGVyaW9kaWNhbGx5IHRv IGVtcHR5IHRoZSByaW5nLWJ1ZmZlciBhbmQgd3JpdGUgc2FtcGxlcyB0byBkaXNrLgoKIyMgVGhl IHJpZGVyOiBiZXR0ZXIgc3RhY2sgdHJhY2Ugb3V0cHV0CgpTbyBmYXIsIHdlJ3ZlIG1lbnRpb25l ZCB0aGF0IHRoZSBwcm9maWxlciBwcm9jZXNzIHdpbGwgZXh0cmFjdCBhIHN0YWNrIHRyYWNlIG91 dCBvZiBgcmJfZGVidWdfZXh0X3NlY3Rpb25gLiBMZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8g d2hhdCB0aGF0IHN0YWNrIHRyYWNlIHdvdWxkIGFjdHVhbGx5IF9iZV8uCgpUcmFkaXRpb25hbCBw cm9maWxpbmcgdG9vbHMgZm9yIG5vbi1keW5hbWljIGxhbmd1YWdlcyB1c3VhbGx5IHdvcmsgYnkg Y2FwdHVyaW5nIG1lbW9yeSBhZGRyZXNzZXMgZm9yIGZ1bmN0aW9ucywgYW5kIHRoZW4gZGVmZXJy aW5nIHRoZSB0cmFuc2xhdGlvbiBvZiBhZGRyZXNzZXMgLT4gbmFtZXMgdW50aWwgbGF0ZXIgKHBv c3NpYmx5IGV2ZW4gb24gYSBkaWZmZXJlbnQgbWFjaGluZSkuIFJ1YnksIGhvd2V2ZXIsIGlzIEkg YmVsaWV2ZSBtdWNoIHRvbyBkeW5hbWljIGZvciBhIHNpbWlsYXIgYXBwcm9hY2guIE1ldGhvZHMg YW5kIGNsYXNzZXMgY2FuIGJlIGRlZmluZWQgYW5kIHVuZGVmaW5lZCBkeW5hbWljYWxseSBvdmVy IHRoZSBsaWZldGltZSBvZiB0aGUgcHJvZ3JhbS4gSW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIGNhbiBi ZSBjcmVhdGVkIGFuZCBHQydkIGFzIGEgcmVzdWx0IG9mIHVzaW5nIHRoaW5ncyBsaWtlIGBldmFs YC4gQSBtZW1vcnkgYWRkcmVzcyBvY2N1cGllZCBieSBvbmUgY2xhc3Mgb3IgaXNlcSBtaWdodCBs YXRlciBiZSBvY2N1cGllZCBieSBhIGRpZmZlcmVudCBvbmUgLSBlc3BlY2lhbGx5IGJlY2F1c2Ug d2Ugbm93IGhhdmUgR0MgY29tcGFjdGlvbi4KClRodXMsIEkgdGhpbmsgdGhlIG9ubHkgc2Vuc2li bGUgdGhpbmcgdG8gZG8gaXMgdG8gc3RvcmUgc3RyaW5ncyBpbiB0aGUgYHJiX2RlYnVnX2V4dF9z ZWN0aW9uYCBzdHJ1Y3R1cmUuIFRoZXNlIHN0cmluZ3MgbmVlZCB0byBiZSB2YWxpZCwgZXNzZW50 aWFsbHksIHdoaWxzdCB0aGUgY2FsbGVkIG1ldGhvZC9pc2VxIGlzIHN0aWxsIG9uIHRoZSBzdGFj ayAtIHRoZXJlJ3Mgbm8gcmVxdWlyZW1lbnQgdG8gcmV0YWluIHRoZW0gdW50aWwgbGF0ZXIuIFRo ZSBleHRlcm5hbCB0b29sIHdvdWxkIG5lZWQgdG8gY29weSB0aGVzZSBzdHJpbmdzIGludG8gaXRz IG93biBwcm9jZXNzLgoKV2hhdCBzaG91bGQgdGhvc2UgYWN0dWFsbHkgX2NvbnRhaW5fPyBBIHRy YWRpdGlvbmFsIFJ1YnkgYmFja3RyYWNlIGNvbnRhaW5zIGEgZmlsZSwgbGluZSBudW1iZXIsIGEg bWV0aG9kIG5hbWUgKGlmIGF2YWlsYWJsZSksIGFuZCBzb21lIG90aGVyIGRldGFpbHMgYWJvdXQg dGhlIGlzZXEgaWYgcHJlc2VudCAoZS5nLiB3aGV0aGVyIGl0J3MgYSBibG9jayBvciBldmFsLCB3 aGV0aGVyIGl0J3MgPG1haW4+LCBldGMpLgoKYGBgcnVieQppcmIjMShtYWluKTowMDM6MD4gZGVm IGZvbzsgcmFpc2UgIm9oIG5vIjsgZW5kOwo9PiA6Zm9vCmlyYiMxKG1haW4pOjAwNDowPiBmb28K KGlyYiMxKTozOmluIGBmb28nOiBvaCBubyAoUnVudGltZUVycm9yKQoJZnJvbSAoaXJiIzEpOjQ6 aW4gYDxtYWluPicKYGBgCgpJIGRvIG5vdCBiZWxpZXZlIHRoaXMgaXMgdGhlIG1vc3QgdXNlZnVs IHdheSB0byBwcmVzZW50IHRoaXMgaW5mb3JtYXRpb24gZnJvbSBhIHByb2ZpbGluZyBwZXJzcGVj dGl2ZSwgaG93ZXZlci4gV2hlbiBkZWFsaW5nIHdpdGggYSBsYXJnZSBtb25vbGl0aGljIGFwcGxp Y2F0aW9uLCBwcm9maWxlcyB3aWxsIGJlIGNvbGxlY3RlZCBwcm9jZXNzLXdpZGUgYW5kIGFnZ3Jl Z2F0ZWQgb24gc29tZSBraW5kIG9mIGNlbnRyYWwgZGFzaGJvYXJkOyB0aGVyZSBjb3VsZCBiZSBt YW55IG1ldGhvZHMgY2FsbGVkIHRoZSBzYW1lIHRoaW5nICh0aGluayBgZGVmIGNyZWF0ZWAgaW4g YSBSYWlscyBjb250cm9sbGVyLCBmb3IgZXhhbXBsZSkuIFRoZSBmaWxlbmFtZSBjYW4gaGVscCBk aXNhbWJpZ3VhdGUgaW4gY2lyY3Vtc3RhbmNlcyBsaWtlIHRoaXMsIGJ1dCBDIGZ1bmN0aW9ucyBk b24ndCBldmVuIF9oYXZlXyBhIGZpbGVuYW1lLCBzbyBqdXN0IHByaW50IHRoZSBmaWxlbmFtZSBv ZiB0aGUgdGhpbmcgdGhhdCBjYWxsZWQgdGhlbToKCmBgYHJ1YnkKaXJiIzEobWFpbik6MDA1OjA+ IDEudGltZXMgeyByYWlzZSAib2ggbm8iIH0KKGlyYiMxKTo1OmluIGBibG9jayBpbiA8bWFpbj4n OiBvaCBubyAoUnVudGltZUVycm9yKQoJZnJvbSAoaXJiIzEpOjU6aW4gYHRpbWVzJyAjIEkgZGlk IG5vdCBkZWZpbmUgSW50ZWdlciN0aW1lcyBpbiBJUkIhCglmcm9tIChpcmIjMSk6NTppbiBgPG1h aW4+JwpgYGAKCkFsbCBvZiB0aGlzIGNhbiBiZSBnZW5lcmFsbHkgZmlndXJlZCBvdXQgYnkgbG9v a2luZyBhdCB0aGUgY29kZSwgYnV0IG9mdGVuIHdoZW4gd2UncmUgbG9va2luZyBhdCBlLmcuIGEg cHJvZmlsaW5nIGRhc2hib2FyZCwgaGF2aW5nIHRvIGtlZXAgbG9va2luZyBiZXR3ZWVuIHRoZSBm bGFtZSBncmFwaCBhbmQgdGhlIGNvZGUgY2FuIGJlIHJhdGhlciBhbm5veWluZy4KCkl0IHdvdWxk IGJlIG5pY2UgaWYgaW5zdGVhZCwgb3VyIHByb2ZpbGVzIGNvbnRhaW5lZCB0aGUgbmFtZSBvZiB0 aGUgY2xhc3Mgb24gd2hpY2ggYSBtZXRob2QgaXMgZGVmaW5lZDsgc29tZXRoaW5nIGxpa2UgYEZv b0NsYXNzI3RoZV9tZXRob2RgLiBSdWJ5IGhhcyBhIG1ldGhvZCBgcmJfcHJvZmlsZV9mcmFtZV9x dWFsaWZpZWRfbWV0aG9kX25hbWVgIHdoaWNoIGNhbiBnaXZlIHVzZWZ1bCBvdXRwdXQgbGlrZSB0 aGlzIGluIG1hbnkgY2FzZXMuIEhvd2V2ZXIsIGluIG1hbnkgY29tbW9uIGNhc2VzIGxpa2UgZS5n LiBhbm9ueW1vdXMgY2xhc3NlcywgaXQgd2lsbCBwcmVzZW50IHRoZSBuYW1lIG9mIHRoZSBjbGFz cyBhcyBzb21ldGhpbmcgbGlrZSAiIzxDbGFzczoweDAwMDAwMDAwMDBkYjQ4ZTA+Ii4gVGhpcyBp cyB3b3JzZSB0aGFuIHVzZWxlc3MgZm9yIHByb2ZpbGluZzsgdGhhdCBhZGRyZXNzIHdpbGwgYmUg ZGlmZmVyZW50IGFtb25nc3QgZGlmZmVyZW50IHByb2Nlc3NlcyBiZWluZyBwcm9maWxlZCwgc28g bXVsdGlwbGUgcHJvZmlsZXMgY2FuJ3QgYmUgYWdncmVnYXRlZCB0b2dldGhlci4gSW4gZmFjdCwg dGhhdCBhZGRyZXNzIGlzbid0IGV2ZW4gZ3VhcmFudGVlZCB0byBiZSBjb25zdGFudCB3aXRoaW4g dGhlIHNhbWUgcHJvY2VzcyBhbnltb3JlLCBiZWNhdXNlIG9mIGNvbXBhY3Rpb24uCgpJIHdvdWxk IHByb3Bvc2UgdGhhdCB3ZSBoYXZlIGEgbmV3IHdheSBvZiBuYW1pbmcgbWV0aG9kcyB3aGljaCBw cm9kdWNlcyB1c2VmdWwgc3RyaW5ncyBpbiBhbGwgY2FzZXMsIHdpdGhvdXQgYW55IGFkZHJlc3Nl cyBpbiB0aGVtLiBUaGUgcnVsZXMgSSBoYXZlIGNvbWUgdXAgd2l0aCBzbyBmYXIgYXJlOgoKKiBg IiM8cmVmaW5lbWVudCBGb28gb2YgQmFyPiJgIGZvciBhIHJlZmluZW1lbnQgbW9kdWxlIGFkZGlu ZyBtZXRob2RzIHRvCiAgQmFyCiogYCIjPGluc3RhbmNlIG9mIEZvbz4iYCBmb3IgYSBwYXJ0aWN1 bGFyIGluc3RhbmNlIG9mIEZvbwoqIGAiIzxzaW5nbGV0b24gb2YgRm9vPiJgIGZvciBGb28ncyBz aW5nbGV0b24gY2xhc3MuCiogYCIjPGFub255bW91cyBzdWJjbGFzcyBvZiBGb28+ImAgZm9yIGFu IGFub255bW91cyBzdWJjbGFzcwoqIFRoZSB1c3VhbCBjbGFzc3BhdGggc3RyaW5nIG90aGVyd2lz ZQoKTm90ZSB0aGF0IG5lc3RpbmcgaXMgT0sgdG9vIC0gc28gYSBtZXRob2QgZGVmaW5lZCBvbiB0 aGUgc2luZ2xldG9uIGNsYXNzIG9mIGEgcGFydGljdWxhciBGb28gb2JqZWN0IHdvdWxkIGJlICIj PHNpbmdsZXRvbiBvZiAjPGluc3RhbmNlIG9mIEZvbz4+I3RoZV9tZXRob2QiLgoKU28sIG15IHBy b3Bvc2FsIGlzIHRoYXQgdGhpcyBpcyB0aGUgZm9ybWF0IG9mIHRoZSBtZXRob2QgbmFtZSB0aGF0 IGFwcGVhcnMgaW4gdGhlIGByYl9kZWJ1Z19leHRfc2VjdGlvbmAgc3RydWN0dXJlLgoKIyMgV2hl cmUgaGF2ZSBJIGdvdCB0byBzbyBmYXI/CgpPSywgc28gSSBoYXZlIGEgZHJhZnQgUFIgdXAgd2hp Y2ggc2hvdWxkIGhvcGVmdWxseSBoZWxwIG1ha2Ugc29tZSBvZiB0aGlzIGNsZWFyZXI6IGh0dHBz Oi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2LiBJdCBpcyBvZiBjb3Vyc2UgaW4gbm8g d2F5IGV2ZW4gY2xvc2UgdG8gbWVyZ2UgcmVhZHksIGJ1dCBJJ20gaG9waW5nIGl0IGhlbHBzIGls bHVzdHJhdGUgc29tZSBvZiBteSBpZGVhcyBoZXJlOgoKKiBbVGhlIGRlYnVnX2V4dGVybmFsLmgg ZmlsZV0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi02 NjFmOTI2OTAwOWVjODI3MTg1ZWFmYTVlZTA1YmQ3MjUxYmJlMGE1NWRlYzM2MWM5YzVjMjViYjJh NDNhMDk4KSB0aGF0IGRlZmluZXMgdGhlIGV4dGVybmFsbHktdmlzaWJsZSBzdHJ1Y3R1cmVzCiog V2hlcmUgdGhyZWFkcyBhcmUgW2FkZGVkXShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1 bGwvNjcwNi9maWxlcyNkaWZmLWFhMmFkZGI5Mjk3NDlhNGEwMzMwYjkzY2VlY2VjNWJjNTQ4NTc1 MWEzNjI1MjRmNWNiMzdiZjIyZGZmMTkzNmVSNjUpIGFuZCBbcmVtb3ZlZF0oaHR0cHM6Ly9naXRo dWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi1hYTJhZGRiOTI5NzQ5YTRhMDMz MGI5M2NlZWNlYzViYzU0ODU3NTFhMzYyNTI0ZjVjYjM3YmYyMmRmZjE5MzZlUjExMCkgZnJvbSB0 aGUgYHJiX2RlYnVnX2V4dF9zZWN0aW9uYCBzdHJ1Y3R1cmUKKiBXaGVyZSBmcmFtZXMgYXJlIFtw dXNoZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2L2ZpbGVzI2RpZmYt ZjhjMTc0MzQ3ZTZlYTg4ODliNTAzNjA2NGExZmY0ZmU1ZTdjNTNhODIxYmVmYTliZGM1Y2NiZjE3 ODAwYTY0OVI0MDcpIGFuZCBbcG9wcGVkXShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1 bGwvNjcwNi9maWxlcyNkaWZmLWY4YzE3NDM0N2U2ZWE4ODg5YjUwMzYwNjRhMWZmNGZlNWU3YzUz YTgyMWJlZmE5YmRjNWNjYmYxNzgwMGE2NDlSNDM3KSBmcm9tIHRoZSBgcmJfZGVidWdfZXh0X3Nl Y3Rpb25gIHN0cnVjdHVyZQoqIFRoZSBbdGVzdHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1 YnkvcHVsbC82NzA2L2ZpbGVzI2RpZmYtODlhNjdhNGQ1YjM0OGFjNmY5Y2FiZTU2ZDI4NDc1NDVi ZTY3ODA5YjAxZDg1NmIzNTQxZTk2NDcxMDE0YmQ5OVI1NzMpIGlsbHVzdHJhdGUgd2hhdCB0aGUg bmV3IHF1YWxpZmllZCBtZXRob2QgbmFtZSBvdXRwdXQgbG9va3MgbGlrZS4KCiMjIFdoYXQgZG8g SSB3YW50IGZlZWRiYWNrIG9uPwoKVGhpcyB3aG9sZSBwcm9qZWN0IGlzIG9idmlvdXNseSBzdGls bCBhYm91dCAyMCUgY29va2VkLCBzbywgYW55dGhpbmcgYW5kIGV2ZXJ5dGhpbmcuIEJ1dCBtb3Jl IHNwZWNpZmljYWxseSwgdGhlc2UgYXJlIHRoZSBxdWVzdGlvbnMgSSB3b3VsZCByZWFsbHkgbGlr ZSBzb21lIGhlbHAgd2l0aCA6KQoKKiBEb2VzIHRoaXMgX2FwcHJvYWNoXyBzZWVtIHNlbnNpYmxl PyBJcyB0aGUgYmFzaWMgX2lkZWFfIG9mICJleHBvc2Ugc29tZSBkb2N1bWVudGVkIGRhdGEgc3Ry dWN0dXJlIHRvIG90aGVyIHByb2Nlc3NlcyB0aGF0IGFyZSBhYmxlIHRvIHJlYWQgbXkgbWVtb3J5 IiBhIHNvdW5kIG9uZT8KKiBXaGF0IHNob3VsZCBJIGRvIHdpdGggdGhlIHF1YWxpZmllZC1tZXRo b2QtbmFtZS13aXRob3V0LWFkZHJlc3NlcyB3b3JrPyBBdCB0aGUgbW9tZW50IEkgZXhwb3NlZCB0 aGF0IGxvZ2ljIGJlaGluZCBuZXcgbWV0aG9kcyBgTWV0aG9kI2RlYnVnX25hbWVgIGFuZCBgVGhy ZWFkOjpCYWNrdHJhY2U6OkV4dGVybmFsI2RlYnVnX2xhYmVsYC4gSXMgdGhlcmUgc29tZSBhcHBl dGl0ZSB0byBvcGVuIGEgcHJvcG9zYWwgdG8gaGF2ZSB0aGF0IGluIENSdWJ5PwoqIFNob3VsZCB3 ZSBldmVuIGNvbnNpZGVyIF9jaGFuZ2luZyB0aGUgZGVmYXVsdCBvdXRwdXRfIG9mIHRocmVhZCBi YWNrdHJhY2VzIHRvIHByaW50IHRoZXNlIHF1YWxpZmllZCBuYW1lcz8KKiBUaGVyZSBhcmUgc29t ZSAnaW5mcmFzdHJ1Y3R1cmFsJyBjb21taXRzIG9uIHRoYXQgYnJhbmNoIG9mIG1pbmUgLSBvbmUg dG8gW2ZpbmQgc29tZSBleHRyYSBzcGFjZSBpbiBgcmJfbWV0aG9kX2VudHJ5X3RgXShodHRwczov L2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9jb21taXRzL2Y0NDZmNTI4MWY1OGU4NzYx ZDE4MjZiNmIxYzRhOThmYWNkMDQ3MmUpIGFuZCBvbmUgdG8gW2FkZCBzb21lIG5ldyBhdG9taWMg aGVscGVyc10oYGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2L2NvbW1pdHMv MTdkNGIxNTZjZmU4ZjBjMzI5MTA5MDg4NTNjMThjN2ZjODAxMjFlY2ApLiBJcyB0aGlzIHRoZSBz b3J0IG9mIHRoaW5nIHRoYXQgd291bGQgbWFrZSBzZW5zZSB0byB0cnkgYW5kIGxhbmQgbm93IG9y IG9ubHkgd2hlbiB0aGlzIGlzIGFsbCBjbG9zZXIgdG8gZG9uZT8KKiBJIGhhdmVuJ3QgeWV0IGFj dHVhbGx5IGltcGxlbWVudGVkIGFueXRoaW5nIHRvIHRyeSBhbmQgX3JlYWRfIHRoaXMgZXh0ZXJu YWwgZGVidWcgc2VjdGlvbi4gU2hvdWxkIGl0IGJlCiAgMSkgc29tZSBleHRlcm5hbCByZXBvLCBp biBhIG5vbi1SdWJ5IGxhbmd1YWdlIGUuZy4gUnVzdCBvciBzb21ldGhpbmc/CiAgMikgQSBSdWJ5 IGdlbSwgd2l0aCBhIEMgZXh0ZW5zaW9uIHRvIGhhbmRsZSBhbGwgdGhlIHB0cmFjZS9icGYneSBi aXRzPwogIDMpIFRoZSBnZW0sIGJ1dCBpbnNpZGUgdGhlIENSdWJ5IHNvdXJjZSB0cmVlPwogIEkn bSBsZWFuaW5nIHRvd2FyZHMgMiwgYnV0IG5vdCByZWFsbHkgc3VyZS4KClRoYW5rIHlvdSwgdG8g YW55Ym9keSB3aG8gYWN0dWFsbHkgZ290IHRvIHRoZSBib3R0b20gb2YgdGhpcyB3YWxsIG9mIHRl eHQsIGFuZCB0aGFua3MgZG91Ymx5IHRvIGFueWJvZHkgd2hvIHByb3ZpZGVzIGZlZWRiYWNrIQoK CgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvCg==