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 6E4E51F910 for ; Thu, 10 Nov 2022 13:31:31 +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="FQ+OPlcV"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 64F4E119098; Thu, 10 Nov 2022 22:31:30 +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 AEBC011908C for ; Thu, 10 Nov 2022 22:31:27 +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=AmS4AnCw4NZjMaukryw9EtstT+DG4E+l85pp6c4w5oI=; b=FQ+OPlcVTUpNY6kA/DJVFQNz9louY21IcuhJiSOxec9qFoMai8xzSwfkC4rhu2JBpOto enpBZFsxkypLecB78N9+ahzMVV7EoxyZ7AACltcvB44G5wvc1LqzsG07Tm8TwRXESaxik9 72XeINqBHB0kw99P56EuXkh1VuMFD4actwb19UKw80/PTDghFXl3HyaudXybnP8p9MzPNp 1RTIGaReGfMXIctYVjLvALRwMS/RYSahyo3dVe+iX6PJqGIYuFSbVIJOwXRkKzarSE/Qfr 6ZFXZExHt8WJAQ2/Ct77XPWTA39uA5ALweneGmoRpSABRSnUWTW4yLTVift+m/0g== Received: by filterdrecv-69c5db5cf4-55nxz with SMTP id filterdrecv-69c5db5cf4-55nxz-1-636CFD2D-35 2022-11-10 13:31:25.378870341 +0000 UTC m=+847002.044620984 Received: from herokuapp.com (unknown) by geopod-ismtpd-6-0 (SG) with ESMTP id zJoevDGXTniLUPVqLNxc0Q for ; Thu, 10 Nov 2022 13:31:25.371 +0000 (UTC) Date: Thu, 10 Nov 2022 13:31:25 +0000 (UTC) From: "kjtsanaktsidis (KJ Tsanaktsidis)" 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: kjtsanaktsidis 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: 87146 X-SG-EID: =?us-ascii?Q?bpuAnwiv5wR3AMKfH76hNK7PI5khDDZ1kji5+D8yFrgaUvTZzAkIlQXnVriLYY?= =?us-ascii?Q?wZntoXP0DUH6R9LNgqzTU1esCZ4KY8M9zX8WDhO?= =?us-ascii?Q?VCp0C52oPpfLv7dtwulgBIgDaAAH3Y7vSSq=2FIZ+?= =?us-ascii?Q?lWwy7qET7K1DKIssMilcKrZeT+qTydMquuzyQAe?= =?us-ascii?Q?ad94dESf4dtOYbbU8rL6TN++8DKDA=2FJyv65h=2FJN?= =?us-ascii?Q?nJIBXqRc9+=2FvCmg8D47J=2FCvUARaHtwpSJKDFLjT?= =?us-ascii?Q?BL8Nr0xsqYwPsSAqtB=2FbBchpIpnKpx0DnqQwQ36?= =?us-ascii?Q?1Cw=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110689 Subject: [ruby-core:110689] [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" SXNzdWUgIzE5MTE5IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu YWt0c2lkaXMpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCdWcg IzE5MTE5OiBBZGQgYW4gaW50ZXJmYWNlIGZvciBvdXQtb2YtcHJvY2VzcyBwcm9maWxpbmcgdG9v bHMgdG8gYWNjZXNzIFJ1YnkgaW5mb3JtYXRpb24KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcv aXNzdWVzLzE5MTE5CgoqIEF1dGhvcjoga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5ha3RzaWRpcykK KiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCiogQmFja3BvcnQ6IDIuNzogVU5LTk9X TiwgMy4wOiBVTktOT1dOLCAzLjE6IFVOS05PV04KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQoKV2FybmluZzogdGhpcyBpcyBhIHZlcnkgbG9uZyBwcm9wb3NhbCA6KCBJ IGRvbid0IHJlYWxseSBrbm93IHdoYXQgdGhlIG1vc3QgcHJvZHVjdGl2ZSB3YXkgdG8gZW5nYWdl IHdpdGggdGhlIFJ1YnkgY29tbXVuaXR5IGFib3V0IHRoaXMgaXMgLSBpZiB0aGVyZSdzIGEgYmV0 dGVyIHBsYWNlIHRvIHRha2UgdGhpcywgcGxlYXNlIGxldCBtZSBrbm93IQoKSSBhbHNvIHdhbnQg dG8gYWNrbm93bGVkZ2UgQGl2b2Fuam8gZm9yIGNvbnRyaWJ1dGluZyB0byB0aGlzIHByb3Bvc2Fs IC0gSSBib3VuY2VkIG1hbnkgaWRlYXMgYWJvdXQgcHJvZmlsaW5nIG9mZiBoaW0gYW5kIHRoZSBp bXByb3ZlZC1iYWNrdHJhY2Ugc3R1ZmYgaXMgYWxsIGJhc2VkIG9uIGhpcyBbYmFja3RyYWNpZV0o aHR0cHM6Ly9naXRodWIuY29tL2l2b2Fuam8vYmFja3RyYWNpZSkgZ2VtLgoKIyMgTW90aXZhdGlv bgoKV2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgYW5kIG9sZCBSdWJ5IGFwcHMsIHRoZXJlIGlzIG9m dGVuIGJvdGggYSBuZWVkIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHNvbWUgb3BlcmF0 aW9ucywgYXMgd2VsbCBhcyBhIGxhY2sgb2YgdW5kZXJzdGFuZGluZyBhcyB0byBob3csIHByZWNp c2VseSwgdGhlIGNvZGUgd29ya3MsIGFuZCB3aGF0IGFzcGVjdCBvZiBpdCBpcyBhY3R1YWxseSBz bG93LiBGdXJ0aGVybW9yZSwgdGhlIHBlcmZvcm1hbmNlIGlzc3VlcyBpbiBxdWVzdGlvbiBvZnRl biBvbmx5IGFwcGVhciBpbiBhIGxpdmUsIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHdoZXJlIHRo ZXJlIGlzIHNvbWUgdHJhZmZpYyBwYXR0ZXJuIG9yIHVzZXIgZGF0YSBjYXVzaW5nIHRoZSBwcm9i bGVtLiBJbiBzaXR1YXRpb25zIGxpa2UgdGhpcywgcHJvZmlsaW5nIHRvb2xzIGNhbiBwcm92ZSBp bnZhbHVhYmxlIGluIGhlbHBpbmcgdG8gdW5kZXJzdGFuZCBhcHBsaWNhdGlvbiBwZXJmb3JtYW5j ZSBpbi1zaXR1IGluIHByb2R1Y3Rpb24uCgpUaGUgdGhpbmdzIHdoaWNoIGFuIGVuZ2luZWVyIG1p Z2h0IHVzZSBhIHByb2ZpbGVyIHRvIG1lYXN1cmUgaW5jbHVkZToKICAqIFdhbGwgY2xvY2sgdGlt ZTsgaG93IGxvbmcgZG8gcGFydGljdWxhciBtZXRob2QgY2FsbHMgdGFrZT8KICAqIENQVSB0aW1l OyBvZiB0aGUgdGltZSBhIG1ldGhvZCB0YWtlcywgaG93IGxvbmcgaXMgc3BlbnQgYWN0dWFsbHkg X3J1bm5pbmdfIG9uIHRoZSBDUFUsIGFuZCBob3cgbXVjaCBpcyBzcGVudCBibG9ja2VkIHdhaXRp bmcgZm9yIGUuZy4gYSBuZXR3b3JrIHJlc3BvbnNlPwogICogR1ZMIGNvbnRlbnRpb247IGlzIGFu IGFwcGxpY2F0aW9uIHVzaW5nIGxvdHMgb2YgdGhyZWFkcyBqdXN0IHdhaXRpbmcgZm9yIHRoZSBH VkwgdG8gYmVjb21lIGF2YWlsYWJsZT8KICAqIEdDIHRpbWU7IGlzIGEgcGFydGljdWxhciBwaWVj ZSBvZiBjb2RlIF9hY3R1YWxseV8gc2xvdywgb3IgaXMgaXRzIHNsb3duZXNzIGp1c3QgYSByZXN1 bHQgb2YgX290aGVyXyBjb2RlIGNhdXNpbmcgdGhlIEdDIHRvIGJlIGludm9rZWQ/CiAgKiBBbGxv Y2F0aW9uczsgaG93IG1hbnkgb2JqZWN0cyBpcyBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZSBh bGxvY2F0aW5nLCBhbmQgd2hhdCBpbXBhY3QgaXMgdGhpcyBoYXZpbmcgb24gR0M/CiAgKiBIZWFw OyBvZiB0aGUgb2JqZWN0cyBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZSBhbGxvY2F0ZWQsIGhv dyBtYW55IG9mIHRoZW0gYXJlIHN0aWxsIGxpdmU/IElzIHRoZXJlIHNvbWUga2luZCBvZiBsZWFr PwoKR2VuZXJhbGx5LCBpbiBvcmRlciB0byBjb2xsZWN0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSBw cm9kdWN0aW9uIGluIGEgbWluaW1hbGx5LWltcGFjdGZ1bCB3YXksIGEgc2FtcGxpbmcgYXBwcm9h Y2ggaXMgdXNlZC4gQSBwcm9maWxpbmcgdG9vbCBwZXJpb2RpY2FsbHkgdGFrZXMgYSBzbmFwc2hv dCBvZiB0aGUgY3VycmVudCBjYWxsLXN0YWNrIG9mIGEgUnVieSBwcm9ncmFtOyBkZXBlbmRpbmcg b24gd2hhdCBpcyBiZWluZyBtZWFzdXJlZCwgdGhpcyBwZXJpb2RpY2l0eSBtaWdodCBiZSBlLmcu IHNpbXBseSBldmVyeSBOIG1zIChmb3Igd2FsbC1jbG9jayBwcm9maWxpbmcpLCBldmVyeSBOIGFs bG9jYXRpb25zIChmb3IgYWxsb2NhdGlvbiBwcm9maWxpbmcpLCBldGMuIFRoZW4sIHRoZSBkYXRh IHdpbGwgZ2VuZXJhbGx5IGJlIGNvbWJpbmVkIGFjcm9zcyBtYW55IGluc3RhbmNlcyBvZiBhIHBy b2dyYW0gdG8gZ2V0IGFuIGFnZ3JlZ2F0ZSB2aWV3ICh0aHJvdWdoIGUuZy4gYSBmbGFtZSBncmFw aCkuCgpJbiBhZGRpdGlvbiB0byB0aGlzIGZsZWV0LXdpZGUgYWdncmVnYXRpb24sIGl0J3Mgc29t ZXRpbWVzIHVzZWZ1bCB0byBwcm9maWxlIGEgcGFydGljdWxhciBwcm9jZXNzIHdoaWNoIGhhcyBz dWRkZW5seSBzdGFydGVkIGRpc3BsYXlpbmcgc29tZSBwYXRob2xvZ3kgb2YgaW50ZXJlc3QuIEZv ciBleGFtcGxlLCBpZiB5b3UgaGFkIGEgd2Vic2VydmVyIHByb2Nlc3MgdGhhdCBoYWQgc3VkZGVu bHkgYmVjb21lIHN0dWNrLCB5b3UgbWlnaHQgd2FudCB0byBhdHRhY2ggYSBwcm9maWxlciB0byBm aW5kIG91dCBfd2h5Xy4gSW4gc2NlbmFyaW9zIGxpa2UgdGhpcywgaXQncyBvZnRlbiBpbXBvc3Np YmxlIHRvIG1ha2Ugc29tZSBhZGp1c3RtZW50IHRvIHRoZSBwcm9ncmFtIHRvIGVuYWJsZSBwcm9m aWxpbmcgYW5kIHJlc3RhcnQgaXQ7IHRoZSBhY3Qgb2YgcmVzdGFydGluZyBpdCB3b3VsZCBtYWtl IHRoZSBwcm9ibGVtIGdvIGF3YXkgKGZvciBub3chKS4KCiMjIEN1cnJlbnQgc3RhdGUgb2YgdGhl IGFydAoKVGhpcyByZXByZXNlbnRzIG15IGJlc3QgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2F5cyBp biB3aGljaCBtb3N0IFJ1YnkgcHJvZmlsaW5nIHRvb2xzIHdvcmsgdG9kYXkuIEknbSBzdXJlIEkn dmUgbWlzc2VkIHNvbWUgaW1wb3J0YW50IGRldGFpbHMgYW5kIG90aGVyIHRvb2xzLCBmb3Igd2hp Y2ggSSdtIGRlZXBseSBzb3JyeS4KCiMjIyBTaWduYWwtYmFzZWQgcHJvZmlsaW5nCgpTaWduYWwt YmFzZWQgcHJvZmlsZXJzIGNhbiBiZSB1c2VkIHRvIG1lYXN1cmUgQ1BVIGFuZCB3YWxsIGNsb2Nr IHRpbWUuIEluIHRoaXMgc2NoZW1lLCBhIHByb2ZpbGVyIChpbiB0aGUgZm9ybSBvZiBhbiBleHRl bnNpb24gZ2VtKSBzZXRzIHVwIGEgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR1BST0YgaW4gQywgYW5k IHRoZW4gYXJyYW5nZXMgZm9yIFNJR1BST0YgdG8gYmUgZGVsaXZlcmVkIHRvIHRoZSBwcm9jZXNz IHJlcGVhdGVkbHkgaW4gc29tZSBraW5kIG9mIGxvb3AuIFRoZSBzaWduYWwgaGFuZGxlciB0aGVu IGNhcHR1cmVzIGEgc3RhY2sgdHJhY2UgdXNpbmcgdGhlIGByYl9wcm9maWxlX2ZyYW1lc2AgQVBJ IGZyb20gdGhlIEMgZXh0ZW5zaW9uIGFuZCByZWNvcmRzIHRoaXMgYXMgYSBzaW5nbGUgc2FtcGxl LgoKVGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIENQVS93YWxsIGNsb2NrIHByb2ZpbGlu ZyBpbiBbU3RhY2twcm9mXShodHRwczovL2dpdGh1Yi5jb20vdG1tMS9zdGFja3Byb2YpLCB0aGUg W0RhdGFkb2cgY29udGludW91cyBwcm9maWxlcl0oaHR0cHM6Ly9naXRodWIuY29tL0RhdGFEb2cv ZGQtdHJhY2UtcmIpLCBhbmQgSSdtIHN1cmUgb3RoZXJzLiBJdCdzIGFsc28gYSB3ZWxsLWtub3du IG1lY2hhbmlzbSB1c2VkIGluIG90aGVyIG5vbi1SdWJ5IHRvb2xzIGxpa2UgW2dwZXJmdG9vbHNd KGh0dHBzOi8vZ3BlcmZ0b29scy5naXRodWIuaW8vZ3BlcmZ0b29scy9jcHVwcm9maWxlLmh0bWwp CgpPbmUgYmVuZWZpdCBvZiB0aGlzIG1lY2hhbmlzbSBpcyB0aGF0IGl0IHNob3VsZCBiZSBxdWl0 ZSBmYXN0LiBUcmlnZ2VyaW5nIHRoZSBzaWduYWwgY2F1c2VzIGEgY29udGV4dCBzd2l0Y2ggaW50 byB0aGUga2VybmVsICYgYmFjayBpbnRvIHRoZSBoYW5kbGVyLCBidXQgZXhlY3V0aW9uIHN0YXlz IGluc2lkZSB0aGUgY3VycmVudCBwcm9ncmFtOyB0aGVyZSdzIG5vIG5lZWQgZm9yIHRoZSBleGVj dXRpb24gdG8gc3dpdGNoIHRvIGFub3RoZXIgcHJvZ3JhbSAoYW5kIGNvbnNlcXVlbnRseSBjaGFu Z2UgYWRkcmVzcyBzcGFjZSkuCgpUaGUgZG93bnNpZGUgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0 IGl0IHJlcXVpcmVzIHNvbWUgbGV2ZWwgb2YgY29vcGVyYXRpb24gZnJvbSB0aGUgcHJvZ3JhbSBi ZWluZyBwcm9maWxlZC4gU29tZXRoaW5nIGluc2lkZSB0aGUgcHJvY2VzcyBtdXN0IGluc3RhbGwg dGhlIFNJR1BST0YgaGFuZGxlcjsgaWYgeW91IGhhdmUgc29tZSBleGlzdGluZywgcnVubmluZyBS dWJ5IHByb2Nlc3MgZm9yIHdoaWNoIGEgcHJvZmlsZXIgaXMgbm90IGxvYWRlZCwgeW91IGNhbm5v dCBiZWdpbiBwcm9maWxpbmcgaXQgd2l0aG91dCByZXN0YXJ0aW5nIGl0IChhbmQgdXNpbmcgc29t ZSBtZWNoYW5pc20gbGlrZSBhIGAtcm15X3Byb2ZpbGVyL2F1dG9sb2FkYCBmbGFnKS4KCkFub3Ro ZXIgcHJvYmxlbSB3aXRoIHRoaXMgYXBwcm9hY2ggaXMgdGhlIGVmZmVjdCB0aGVzZSBTSUdQUk9G IHNpZ25hbHMgaGF2ZSBvbiB0aGUgYXBwbGljYXRpb24uIE5vcm1hbGx5LCB0aGUgcHJvZmlsZXIg aW5zdGFsbHMgdGhlIHNpZ25hbCBoYW5kbGVyIHdpdGggdGhlIFNBX1JFU1RBUlQgZmxhZzsgdGhp cyBfc2hvdWxkXyBtZWFuIHRoYXQgYW55IGluLXByb2dyZXNzIHN5c3RlbSBjYWxsIHRoZSBhcHBs aWNhdGlvbiBpcyBkb2luZyB3aGVuIHRoZSBTSUdQUk9GIGFycml2ZXMgZ2V0cyB0cmFuc3BhcmVu dGx5IHJlc3RhcnRlZCB3aGVuIHRoZSBoYW5kbGVyIGZpbmlzaGVzIGNvbGxlY3RpbmcgaXRzIHNh bXBsZS4gSG93ZXZlciwgb24gTGludXggYXQgbGVhc3QsIHRoZXJlIGFyZSBzb21lIHN5c3RlbSBj YWxscyB3aGljaCBhcmUgX05PVF8gcmVzdGFydGVkIHdoZW4gU0FfUkVTVEFSVCBoYXBwZW5zIC0g bm90YWJseSBzb21lIG5ldHdvcmsgcmVsYXRlZCBvbmVzIGxpa2UgcG9sbCwgZXBvbGwsIGFuZCBz ZW5kL3JlY3Ygd2hlbiBhIHNvY2tldCB0aW1lb3V0IGlzIHNldC4gVGhlc2Ugc3lzdGVtIGNhbGxz IHdpbGwgaW5zdGVhZCBmYWlsIHdpdGggRUlOVFI7IHdlbGwgYmVoYXZlZCBwcm9ncmFtcyBhbmQg bGlicmFyaWVzIF9TSE9VTERfIHJldHJ5IHRoaXMuCgpTYWRseSwgaG93ZXZlciwgdGhlIHJlcGVh dGVkIGRlbGl2ZXJ5IG9mIFNJR1BST0YgdGVucyBvciBodW5kcmVkcyBvZiB0aW1lcyBwZXIgc2Vj b25kIGRvZXMgaGF2ZSBhIHdheSBvZiBzaGFraW5nIG91dCBjb3JuZXItY2FzZXMgaW4gbGlicmFy aWVzIHdoZXJlIHRoaXMgaXNuJ3QgYmVpbmcgZG9uZSBwcm9wZXJseS4gRm9yIGV4YW1wbGUsIEkg aGF2ZSBwZXJzb25hbGx5IGRpc2NvdmVyZWQgdGhlIGhhcmQgd2F5IHRoYXQgbGlibXlzcWxjbGll bnQgdmVyc2lvbiA1LjcgZG9lcyB0aGlzIHdyb25nIGluIG9uZSBwbGFjZSwgc28gZW5hYmxpbmcg YSBTSUdQUk9GLWJhc2VkIHByb2ZpbGVyIGNhbiBjYXVzZSBsaWJteXNxbGNsaWVudCB0byBlcnJv bmVvdXNseSB0aGluayB0aGF0IGRhdGFiYXNlIGNvbm5lY3Rpb25zIHdlcmUgY2xvc2VkLiBUaGlz IGlzIHVuZG91YnRlZGx5IGEgYnVnIGluIGxpYm15c3FsY2xpZW50ICh3aGljaCwgYnkgdGhlIHdh eSwgc2VlbXMgdG8gYmUgZml4ZWQgaW4gdmVyc2lvbiA4KSwgdGhhdCBfY291bGRfIGJlIHRyaWdn ZXJlZCBieSBhbnkgb3RoZXIgc2lnbmFsLiBUaGVyZSdzIG5vIGRlbnlpbmcgdGhvdWdoIHRoYXQg U0lHUFJPRi1iYXNlZCBwcm9maWxpbmcgaXMgYSByZWFsIHRvcnR1cmUtdGVzdCBmb3IgRUlOVFIg aGFuZGxpbmcsIGFuZCB0aGVyZSB1bmRvdWJ0ZWRseSBfYXJlXyBidWdneSBsaWJyYXJpZXMgb3V0 IHRoZXJlIGluIHRoZSB3aWxkIHRoYXQgcGVvcGxlIGFyZSB1c2luZyBpbiB0aGVpciBhcHBsaWNh dGlvbnMuIEl0IHdvdWxkIGJlIG5pY2UgaWYgUnVieSBwcm9maWxlcnMgY291bGQgd29yayBhcm91 bmQgdGhpcyBwcm9ibGVtLgoKIyMjIFJVQllfSU5URVJOQUxfRVZFTlRfTkVXT0JKIHByb2ZpbGlu ZwoKQ29sbGVjdGlvbiBvZiBzdGFja3MgZnJvbSBTSUdQUk9GIHdvcmtzIGZvciBDUFUvd2FsbCB0 aW1lIHByb2ZpbGluZywgYnV0IGEgZGlmZmVyZW50IGFwcHJvYWNoIGlzIG5lZWRlZCBmb3IgaW4t cHJvY2VzcyBwcm9maWxlcnMgdG8gY29sbGVjdCBhbGxvY2F0aW9uIHByb2ZpbGVzLiBUaGlzIGlz IG5vcm1hbGx5IGRvbmUgYnkgcmVnaXN0ZXJpbmcgYSB0cmFjZXBvaW50IGhhbmRsZXIgZm9yIFJV QllfSU5URVJOQUxfRVZFTlRfTkVXT0JKIGluIHRoZSBwcm9maWxlciBleHRlbnNpb24gZ2VtOyB0 aGlzIGlzIGNhbGxlZCBldmVyeSB0aW1lIGEgUnVieSBvYmplY3QgaXMgYWxsb2NhdGVkLiBGcm9t IHRoaXMgaGFuZGxlciwgdGhlIHByb2ZpbGVyIGNhbiB1c2UgYHJiX3Byb2ZpbGVfZnJhbWVzYCBh Z2FpbiB0byBjb2xsZWN0IGEgUnVieSBiYWNrdHJhY2Ugb2YgdGhlIGNvZGUgcmVzcG9uc2libGUg Zm9yIGFsbG9jYXRpbmcgdGhpcyBvYmplY3QuCgojIyMgUHRyYWNlLWJhc2VkIHByb2ZpbGluZwoK QW5vdGhlciBhcHByb2FjaCB0aGF0IGhhcyBiZWVuIHVzZWQgaXMgdG8gY29udHJvbCB0aGUgUnVi eSBwcm9ncmFtIHRvIGJlIHByb2ZpbGVkIHdpdGggYW5vdGhlciwgc2VwYXJhdGUgcHJvY2Vzcywg dXNpbmcgYW4gYXBwcm9wcmlhdGUgcGxhdGZvcm0gQVBJIChlLmcuIHB0cmFjZSBvbiBMaW51eCku IFBlcmlvZGljYWxseSwgdGhlIHByb2ZpbGVyIHByb2Nlc3MgY2FuIHVzZSBwdHJhY2UgdG8gc3Vz cGVuZCBleGVjdXRpb24gb2YgdGhlIHRhcmdldCBSdWJ5IHByb2dyYW0sIGFuZCBjb2xsZWN0IGEg c3RhY2sgdHJhY2Ugb2YgaXQuIFRoaXMgaXMgdGhlIGFwcHJvYWNoIHVzZWQgYnkgdGhlIFtyYnNw eV0oaHR0cHM6Ly9naXRodWIuY29tL3Jic3B5L3Jic3B5KSBwcm9maWxlciwgd2hpY2ggaXMgaXRz ZWxmIGFjdHVhbGx5IGEgUnVzdCBwcm9ncmFtLgoKVGhlIG1haW4gc3RyZW5ndGggb2YgdGhpcyBh cHByb2FjaCBpcyB0aGF0IGl0IGFsbG93cyBvbmUgdG8gYmVnaW4gdHJhY2luZyBhIFJ1YnkgcHJv Z3JhbSB3aGljaCBpcyBhbHJlYWR5IHJ1bm5pbmcsIF93aXRob3V0IHJlc3RhcnRpbmcgaXRfOyBy YnNweSBjYW4gcHRyYWNlLWF0dGFjaCB0byBhIHJ1bm5pbmcgcHJvY2VzcyBhbmQgYmVnaW4gY29s bGVjdGluZyBzYW1wbGVzIHN0cmFpZ2h0IGF3YXkuIFRoaXMgYWxsb3dzIG9uZSB0byBnYWluIGlu c2lnaHQgaW50byBpbnRlcm1pdHRlbnQgcHJvYmxlbXMgb25jZSB0aGV5IHN0YXJ0IGhhcHBlbmlu ZyEKClVuZm9ydHVuYXRlbHksICJjb2xsZWN0IGEgc3RhY2sgdHJhY2UiIGlzIHF1aXRlIHRyaWNr eSB0byBkbyBmcm9tIG91dHNpZGUgdGhlIHByb2Nlc3M7IHdlIHdhbnQgdGhlIF9SdWJ5XyBsZXZl bCBzdGFjayB0cmFjZSwgbm90IChvciBhdCBsZWFzdCwgYXMgd2VsbCBhcykgdGhlIG1hY2hpbmUg c3RhY2sgdHJhY2UgKHdoaWNoIGNvdWxkIGJlIGNvbGxlY3RlZCBlLmcuIHZpYSBEV0FSRiB1bndp bmRpbmcgb3IgZnJhbWUtcG9pbnRlciBjaGFzaW5nKS4gVG8gZ2V0IHRoZSBSdWJ5IHN0YWNrIHRy YWNlIHJlcXVpcmVzIHJ1bW1hZ2luZyBhcm91bmQgaW5zaWRlIHRoZSBtZW1vcnkgb2YgdGhlIHRh cmdldCBwcm9jZXNzIChlLmcuIHdpdGggYC9wcm9jL3twaWR9L21lbWAgb24gTGludXgpLCB0byBm aW5kIHRoZSByZWxldmFudCBgcmJfY29udHJvbF9mcmFtZV90YCBzdHJ1Y3R1cmVzLiBSYnNweSBj b250YWlucyBhIGh1Z2UgbGlzdCBvZiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMg dmVyc2lvbnMgb2YgUnVieSB0byBtYWtlIHRoaXMgcG9zc2libGUsIGJ1dCBhbnkgdGltZSBhIG5l dyB2ZXJzaW9uIG9mIFJ1YnkgaXMgcmVsZWFzZWQsIGEgbmV3IHZlcnNpb24gb2YgUmJzcHkgbXVz dCBhbHNvIGJlIHJlbGVhc2VkIHRvIGFjY291bnQgZm9yIGFueSBjaGFuZ2VzIHRvIHRoZSBsYXlv dXQgb2YgUnVieSdzIGludGVybmFsIHN0cnVjdHVyZXMuCgpJbiB0aGVvcnksIHRoZSBwdHJhY2Ug YXBwcm9hY2ggaXMgYWxzbyB3b3JzZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmU7IHRv IGNvbGxlY3QgYSBzYW1wbGUsIGV4ZWN1dGlvbiBtdXN0IHN3aXRjaCBmcm9tIHRoZSBwcm9jZXNz IHRvIGJlIHByb2ZpbGVkIHRvIHRoZSBwcm9maWxlciBwcm9jZXNzLCB3aGljaCByZXF1aXJlcyBz d2l0Y2hpbmcgbWVtb3J5IG1hcHBpbmdzLiBSZWNhbGwgdGhhdCB3aXRoIGluLXByb2Nlc3MgU0lH UFJPRiBwcm9maWxpbmcsIHRoZSBwcm9maWxlciB3b3JrIGlzIGRvbmUgaW4gdGhlIHNhbWUgcHJv Y2VzcyB3aXRoIHRoZSBzYW1lIG1lbW9yeSBtYXBwaW5ncy4gSG93ZXZlciwgdGhpcyBjb25jZXJu IHNlZW1zIHRvIGJlIGxhcmdlbHkgdGhlb3JldGljYWw7IEkgaGF2ZSBub3QgX2FjdHVhbGx5XyBz ZWVuIG9yIGhlYXJkIG9mIGFueWJvZHkgc2F5aW5nIHRoYXQgdGhpcyBpcyBtYWtpbmcgcmJzcHkg dG9vIHNsb3cgZm9yIHRoZWlyIHVzZWNhc2UuCgpGaW5hbGx5LCBhbHRob3VnaCBwdHJhY2UtYmFz ZWQgcHJvZmlsaW5nIGdldHMgdXMgX2Nsb3NlXyB0byB0aGUgaWRlYWwgb2Ygbm90IHJlcXVpcmlu ZyBhbnkgZm9yZXNpZ2h0IHRvIGJlZ2luIHByb2ZpbGluZyBhIHJ1bm5pbmcgcHJvZ3JhbSwgdGhl cmUgaXMgX29uZV8gc21hbGwgcmVxdWlyZW1lbnQgd2hpY2ggbXVzdCBiZSBzYXRpc2ZpZWQgYWhl YWQgb2YgdGltZSAtIHRoZSBSdWJ5IGludGVycHJldGVyIG5lZWRzIHRvIGhhdmUgbm90IGhhZCBp dHMgc3ltYm9scyBzdHJpcHBlZCBzbyB0aGF0IHJic3B5IGNhbiBmaW5kIHRoZSBgcnVieV9jdXJy ZW50X3ZtX3B0cmAgZ2xvYmFsLiBJIGJlbGlldmUgcmJzcHkgbWFrZXMgYW4gX2F0dGVtcHRfIHRv IGZpbmQgaXQgd2l0aG91dCB0aGUgc3ltYm9sIGJ1dCBpdCBkb2VzIG5vdCBjbGFpbSB0byBiZSBy ZWxpYWJsZS4KCiMjIyBBbGxvY2F0aW9uIHNhbXBsaW5nIGZyb20gcHRyYWNlLWJhc2VkIHByb2Zp bGluZwoKVG8gcGVyZm9ybSBhbGxvY2F0aW9uIHByb2ZpbGluZyBmcm9tIG91dHNpZGUgdGhlIFJ1 YnkgcHJvY2Vzcywgd2Ugd291bGQgbmVlZCBzb21lIGFuYWxvZ3VlIHRvIFJVQllfSU5URVJOQUxf RVZFTlRfTkVXT0JKLiBJIGJlbGlldmUgdGhpcyBfY291bGRfIGJlIGFjaGlldmVkIGJ5IGNvbXBp bGluZyBSdWJ5IHdpdGggZHRyYWNlL3N5c3RlbXRhcC9VU0RUIHByb2JlcyBlbmFibGVkLCBhbmQg aGF2aW5nIHRoZSBwcm9maWxlciBwcm9jZXNzIHdyaXRlIGEgdHJhcCBpbnN0cnVjdGlvbiBvdmVy IHRoZSB0b3Agb2YgdGhlIHByb2JlICh3aGljaCBpcyBob3cgZS5nLiBkZWJ1Z2dlcnMgd29yayku IEkgZG9uJ3QgYmVsaWV2ZSByYnNweSBvciBhbnkgb3RoZXIgcHJvZmlsZXIgdGhhdCBJIGZvdW5k IGFjdHVhbGx5IGRvZXMgdGhpcyB0aG91Z2guCgojIyMgUGVyZi1iYXNlZCBwcm9maWxpbmcKCkxp bnV4IGhhcyBhIGRlZGljYXRlZCBzdWJzeXN0ZW0gY2FsbGVkIHBlcmYgd2hpY2ggKGFtb25nc3Qg bWFueSBvdGhlciB0aGluZ3MpIGNhbiBkbyBsb3ctb3ZlcmhlYWQgcHJvZmlsaW5nIG9mIGFyYml0 cmFyeSBwcm9jZXNzZXMuIFRoZSBzYW1wbGluZyBpcyBkb25lIGluc2lkZSB0aGUga2VybmVsLCBz byBsaWtlIFNJR1BST0YgKGFuZCB1bmxpa2UgcHRyYWNlKSBjb2xsZWN0aW5nIGEgc2FtcGxlIHJl cXVpcmVzIG5vIHN3aXRjaCBvZiBhZGRyZXNzIHNwYWNlLiBIb3dldmVyLCBvZiBjb3Vyc2UsIHBl cmYgb25seSB1bmRlcnN0YW5kcyB0aGUgbWFjaGluZSBzdGFjaywgbm90IHRoZSBSdWJ5IHN0YWNr LCBzbyB1c2luZyBwZXJmIHRvIHByb2ZpbGUgYSBSdWJ5IHByb2dyYW0gaXMgbm90IGN1cnJlbnRs eSBleHRyYW9yZGluYXJpbHkgdXNlZnVsICh1bmxlc3MgeW91J3JlIHByb2ZpbGluZyB0aGUgUnVi eSBWTSBpdHNlbGYgb3IgYSBDIGV4dGVuc2lvbikuCgpQZXJmIGFjdHVhbGx5IGhhcyBhIFttZWNo YW5pc21dKGh0dHBzOi8vd3d3LmJyZW5kYW5ncmVnZy5jb20vcGVyZi5odG1sI0pJVF9TeW1ib2xz KSB0byBoZWxwIGdpdmUgbWVhbmluZ2Z1bCBzdGFjayB0cmFjZXMgZm9yIGxhbmd1YWdlcyB3aXRo IEpJVHM7IHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byB3cml0ZSBvdXQgYSBtYXBwaW5n IG9mIGZ1bmN0aW9uIGFkZHJlc3MgLT4gbmFtZSB0byBhIGZpbGUgYC90bXAvcGVyZi0kUElELm1h cGA7IHBlcmYgd2lsbCB1c2UgdGhpcyBmaWxlIHRvIHN5bWJvbGljYXRlIHN0YWNrcy4gUHl0aG9u IFtyZWNlbnRseSBhZGRlZF0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2L2hvd3RvL3BlcmZf cHJvZmlsaW5nLmh0bWwpIHN1cHBvcnQgZm9yIHRoaXMgbWVjaGFuaXNtIGFzIHdlbGw7IGhvd2V2 ZXIsIGJlY2F1c2UgQ1B5dGhvbiBkb2VzIG5vdCBoYXZlIGEgSklULCBpdCB3b3JrcyBieSBnZW5l cmF0aW5nIGEgbmF0aXZlIHRyYW1wb2xpbmUgZm9yIGVhY2ggZnVuY3Rpb24gKHdpdGggYSB1bmlx dWUgYWRkcmVzcyksIGFuZCBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSB0cmFtcG9saW5lcyBkdXJp bmcgUHl0aG9uIG1ldGhvZCBleGVjdXRpb24gdG8gbWFrZSB0aGUgbWFjaGluZSBzdGFjayBtaXJy b3IgdGhlIFZNIG9uZS4gVGhpcyBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIGluIENSdWJ5 IGN1cnJlbnRseS4KCiMjIFRoZSBwcm9wb3NhbDogcHJvdmlkZSBhbiAiZXh0ZXJuYWwgZGVidWcg c2VjdGlvbiIKCldlIGlkZWFsbHkgd291bGQgbGlrZSB0byBoYXZlIGEgd2F5IHRvIHByb2ZpbGUg UnVieSBhcHBsaWNhdGlvbnMgd2hpY2ggY29tYmluZXMgdGhlIGJlbmVmaXRzIG9mIHRoZSBTSUdQ Uk9GIG1lY2hhbmlzbSAoZWFzeSwgZG9jdW1lbnRlZCBhY2Nlc3MgdG8gUnVieSBjYWxsIHN0YWNr cyksIHRoZSBwdHJhY2UgbWVjaGFuaXNtICh0aGUgYWJpbGl0eSB0byBhdHRhY2ggdG8gcnVubmlu ZyBwcm9jZXNzZXMgd2l0aCBhIG1pbmltdW0gb2YgZm9yZXNpZ2h0IHJlcXVpcmVkKSwgYW5kIHRo ZSBwZXJmIG1lY2hhbmlzbSAobG93IG92ZXJoZWFkIHNhbXBsZSBjb2xsZWN0aW9uIHdpdGhvdXQg cmVxdWlyaW5nIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlIHN3aXRjaCkuIFRoaXMgcHJvcG9zYWwg YWltcyB0byBwcm92aWRlIGV4YWN0bHkgdGhhdC4KClRoZSBSdWJ5IGludGVycHJldGVyIHdvdWxk IGhhdmUgYSBuZXcgZ2xvYmFsIHZhcmlhYmxlIGByYl9kZWJ1Z19leHRfc2VjdGlvbmAsIHdoaWNo IGlzIGRlZmluZWQgd2l0aCBgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicmJfZGVidWdfZXh0Iikp KWAgc28gdGhhdCBpdCBhcHBlYXJlZCBpbiBhIHNlcGFyYXRlIHNlY3Rpb24gaW4gdGhlIEVMRiBi aW5hcnkuIFRoaXMgdmFyaWFibGUgd291bGQgYmUgY29uc3RhbnRseSBrZXB0IHBvcHVsYXRlZCB3 aXRoIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSBjYWxsLXN0YWNrcyBvZiBh bGwgdGhyZWFkcy9maWJlcnMgaW4gdGhlIHByb2dyYW0uIEFuIGV4dGVybmFsIGRlYnVnZ2luZyB0 b29sIGNvdWxkIGVhc2lseSAoImVhc2lseSIpIHB0cmFjZSBhIHJ1bm5pbmcgUnVieSBwcm9ncmFt LCBhbmQgZmluZCB0aGUgYWRkcmVzcyBvZiB0aGlzIHNlY3Rpb24gaW4gaXRzIHJ1bm5pbmcgbWVt b3J5LCBldmVuIGlmIHN5bWJvbHMgaGF2ZSBiZWVuIHN0cmlwcGVkLiBPbmNlIGFuIGV4dGVybmFs IHRvb2wgaGFzIGZvdW5kIHRoaXMgdmFyaWFibGUsIGl0IG5lZWRzIHRvIG1ha2Ugc2Vuc2Ugb2Yg aXQuIFJ1Ynkgd291bGQgcHJvdmlkZSBhIG5ldyBoZWFkZXIgZmlsZSBgaW5jbHVkZS9ydWJ5L2Rl YnVnX2V4dGVybmFsLmhgIHdoaWNoIGRlc2NyaWJlZCB0aGUgbGF5b3V0IG9mIHRoaXMgc3RydWN0 dXJlLgoKVGhlIHNpbXBsZSwgc2xvdyB2ZXJzaW9uIG9mIGFuIGV4dGVybmFsIHByb2ZpbGVyIHVz aW5nIHRoaXMgaW50ZXJmYWNlIHdvdWxkIGJlIGEgbG90IGxpa2UgcmJzcHk7IGl0IHdvdWxkIHVz ZSBwdHJhY2UgdG8gcGVyaW9kaWNhbGx5IHN0b3AgdGhlIFJ1YnkgcHJvY2VzcywgYW5kIHRoZW4g dXNlIHRoZSBjb250ZW50cyBvZiBgcmJfZGVidWdfZXh0X3NlY3Rpb25gIHRvIGNvbGxlY3QgUnVi eSBiYWNrdHJhY2VzIGZvciBDUFUvd2FsbC1jbG9jayBwcm9maWxpbmcuIFRoZSBiZW5lZml0LCBv ZiBjb3Vyc2UsIGlzIHRoYXQgaXQncyB1c2luZyBhIGRvY3VtZW50ZWQgaW50ZXJmYWNlIHRoYXQg Y2FuIGJlIHZlcnNpb25lZCBhbmQga2VwdCBiYWNrd2FyZHMgY29tcGF0aWJsZSwgcmF0aGVyIHRo YW4gaGF2aW5nIHRvIGNvbnN0YW50bHkgY2hhc2UgYnJlYWtpbmcgY2hhbmdlcyB0byBpbnRlcm5h bCBSdWJ5IFZNIHN0cnVjdHVyZXMuCgpIb3dldmVyLCB0aGUgYmVuZWZpdCBvZiB0aGlzIGFwcHJv YWNoIGlzIHRoYXQgd2UgY2FuIGRvIGJldHRlciEgVGhlIHBlcmYgc3Vic3lzdGVtIG9uIExpbnV4 IGlzIGFibGUgdG8gaW52b2tlIGFuIGVCUEYgcHJvZ3JhbSB0byBhY3R1YWxseSBjb2xsZWN0IHNh bXBsZXMgKHVzaW5nLCBJIHRoaW5rLCBgUEVSRl9FVkVOVF9JT0NfU0VUX0JQRmAgYnV0IEknbSBu b3QgMTAwJSBzdXJlKSBhbmQgd3JpdGUgdGhlbSB0byBhIHJpbmctYnVmZmVyLiBUaGUgZUJQRiBw cm9ncmFtIGNhbiBhY3R1YWxseSB1c2UgdGhlIGBkZWJ1Z19leHRlcm5hbC5oYCBoZWFkZXIgZmls ZSB0byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IFJ1Ynkgc3RhY2sgdHJhY2UocykgaXRzZWxmLCB3 aXRob3V0IG5lZWRpbmcgdG8gc3dpdGNoIGJhY2sgaW50byB0aGUgcHJvZmlsZXIgYWRkcmVzcyBz cGFjZSEgVGhlIHByb2ZpbGVyIHByb2dyYW0gb25seSBuZWVkcyB0byBydW4gcGVyaW9kaWNhbGx5 IHRvIGVtcHR5IHRoZSByaW5nLWJ1ZmZlciBhbmQgd3JpdGUgc2FtcGxlcyB0byBkaXNrLgoKIyMg VGhlIHJpZGVyOiBiZXR0ZXIgc3RhY2sgdHJhY2Ugb3V0cHV0CgpTbyBmYXIsIHdlJ3ZlIG1lbnRp b25lZCB0aGF0IHRoZSBwcm9maWxlciBwcm9jZXNzIHdpbGwgZXh0cmFjdCBhIHN0YWNrIHRyYWNl IG91dCBvZiBgcmJfZGVidWdfZXh0X3NlY3Rpb25gLiBMZXQncyB0dXJuIG91ciBhdHRlbnRpb24g dG8gd2hhdCB0aGF0IHN0YWNrIHRyYWNlIHdvdWxkIGFjdHVhbGx5IF9iZV8uCgpUcmFkaXRpb25h bCBwcm9maWxpbmcgdG9vbHMgZm9yIG5vbi1keW5hbWljIGxhbmd1YWdlcyB1c3VhbGx5IHdvcmsg YnkgY2FwdHVyaW5nIG1lbW9yeSBhZGRyZXNzZXMgZm9yIGZ1bmN0aW9ucywgYW5kIHRoZW4gZGVm ZXJyaW5nIHRoZSB0cmFuc2xhdGlvbiBvZiBhZGRyZXNzZXMgLT4gbmFtZXMgdW50aWwgbGF0ZXIg KHBvc3NpYmx5IGV2ZW4gb24gYSBkaWZmZXJlbnQgbWFjaGluZSkuIFJ1YnksIGhvd2V2ZXIsIGlz IEkgYmVsaWV2ZSBtdWNoIHRvbyBkeW5hbWljIGZvciBhIHNpbWlsYXIgYXBwcm9hY2guIE1ldGhv ZHMgYW5kIGNsYXNzZXMgY2FuIGJlIGRlZmluZWQgYW5kIHVuZGVmaW5lZCBkeW5hbWljYWxseSBv dmVyIHRoZSBsaWZldGltZSBvZiB0aGUgcHJvZ3JhbS4gSW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIGNh biBiZSBjcmVhdGVkIGFuZCBHQydkIGFzIGEgcmVzdWx0IG9mIHVzaW5nIHRoaW5ncyBsaWtlIGBl dmFsYC4gQSBtZW1vcnkgYWRkcmVzcyBvY2N1cGllZCBieSBvbmUgY2xhc3Mgb3IgaXNlcSBtaWdo dCBsYXRlciBiZSBvY2N1cGllZCBieSBhIGRpZmZlcmVudCBvbmUgLSBlc3BlY2lhbGx5IGJlY2F1 c2Ugd2Ugbm93IGhhdmUgR0MgY29tcGFjdGlvbi4KClRodXMsIEkgdGhpbmsgdGhlIG9ubHkgc2Vu c2libGUgdGhpbmcgdG8gZG8gaXMgdG8gc3RvcmUgc3RyaW5ncyBpbiB0aGUgYHJiX2RlYnVnX2V4 dF9zZWN0aW9uYCBzdHJ1Y3R1cmUuIFRoZXNlIHN0cmluZ3MgbmVlZCB0byBiZSB2YWxpZCwgZXNz ZW50aWFsbHksIHdoaWxzdCB0aGUgY2FsbGVkIG1ldGhvZC9pc2VxIGlzIHN0aWxsIG9uIHRoZSBz dGFjayAtIHRoZXJlJ3Mgbm8gcmVxdWlyZW1lbnQgdG8gcmV0YWluIHRoZW0gdW50aWwgbGF0ZXIu IFRoZSBleHRlcm5hbCB0b29sIHdvdWxkIG5lZWQgdG8gY29weSB0aGVzZSBzdHJpbmdzIGludG8g aXRzIG93biBwcm9jZXNzLgoKV2hhdCBzaG91bGQgdGhvc2UgYWN0dWFsbHkgX2NvbnRhaW5fPyBB IHRyYWRpdGlvbmFsIFJ1YnkgYmFja3RyYWNlIGNvbnRhaW5zIGEgZmlsZSwgbGluZSBudW1iZXIs IGEgbWV0aG9kIG5hbWUgKGlmIGF2YWlsYWJsZSksIGFuZCBzb21lIG90aGVyIGRldGFpbHMgYWJv dXQgdGhlIGlzZXEgaWYgcHJlc2VudCAoZS5nLiB3aGV0aGVyIGl0J3MgYSBibG9jayBvciBldmFs LCB3aGV0aGVyIGl0J3MgPG1haW4+LCBldGMpLgoKYGBgcnVieQppcmIjMShtYWluKTowMDM6MD4g ZGVmIGZvbzsgcmFpc2UgIm9oIG5vIjsgZW5kOwo9PiA6Zm9vCmlyYiMxKG1haW4pOjAwNDowPiBm b28KKGlyYiMxKTozOmluIGBmb28nOiBvaCBubyAoUnVudGltZUVycm9yKQoJZnJvbSAoaXJiIzEp OjQ6aW4gYDxtYWluPicKYGBgCgpJIGRvIG5vdCBiZWxpZXZlIHRoaXMgaXMgdGhlIG1vc3QgdXNl ZnVsIHdheSB0byBwcmVzZW50IHRoaXMgaW5mb3JtYXRpb24gZnJvbSBhIHByb2ZpbGluZyBwZXJz cGVjdGl2ZSwgaG93ZXZlci4gV2hlbiBkZWFsaW5nIHdpdGggYSBsYXJnZSBtb25vbGl0aGljIGFw cGxpY2F0aW9uLCBwcm9maWxlcyB3aWxsIGJlIGNvbGxlY3RlZCBwcm9jZXNzLXdpZGUgYW5kIGFn Z3JlZ2F0ZWQgb24gc29tZSBraW5kIG9mIGNlbnRyYWwgZGFzaGJvYXJkOyB0aGVyZSBjb3VsZCBi ZSBtYW55IG1ldGhvZHMgY2FsbGVkIHRoZSBzYW1lIHRoaW5nICh0aGluayBgZGVmIGNyZWF0ZWAg aW4gYSBSYWlscyBjb250cm9sbGVyLCBmb3IgZXhhbXBsZSkuIFRoZSBmaWxlbmFtZSBjYW4gaGVs cCBkaXNhbWJpZ3VhdGUgaW4gY2lyY3Vtc3RhbmNlcyBsaWtlIHRoaXMsIGJ1dCBDIGZ1bmN0aW9u cyBkb24ndCBldmVuIF9oYXZlXyBhIGZpbGVuYW1lLCBzbyBqdXN0IHByaW50IHRoZSBmaWxlbmFt ZSBvZiB0aGUgdGhpbmcgdGhhdCBjYWxsZWQgdGhlbToKCmBgYHJ1YnkKaXJiIzEobWFpbik6MDA1 OjA+IDEudGltZXMgeyByYWlzZSAib2ggbm8iIH0KKGlyYiMxKTo1OmluIGBibG9jayBpbiA8bWFp bj4nOiBvaCBubyAoUnVudGltZUVycm9yKQoJZnJvbSAoaXJiIzEpOjU6aW4gYHRpbWVzJyAjIEkg ZGlkIG5vdCBkZWZpbmUgSW50ZWdlciN0aW1lcyBpbiBJUkIhCglmcm9tIChpcmIjMSk6NTppbiBg PG1haW4+JwpgYGAKCkFsbCBvZiB0aGlzIGNhbiBiZSBnZW5lcmFsbHkgZmlndXJlZCBvdXQgYnkg bG9va2luZyBhdCB0aGUgY29kZSwgYnV0IG9mdGVuIHdoZW4gd2UncmUgbG9va2luZyBhdCBlLmcu IGEgcHJvZmlsaW5nIGRhc2hib2FyZCwgaGF2aW5nIHRvIGtlZXAgbG9va2luZyBiZXR3ZWVuIHRo ZSBmbGFtZSBncmFwaCBhbmQgdGhlIGNvZGUgY2FuIGJlIHJhdGhlciBhbm5veWluZy4KCkl0IHdv dWxkIGJlIG5pY2UgaWYgaW5zdGVhZCwgb3VyIHByb2ZpbGVzIGNvbnRhaW5lZCB0aGUgbmFtZSBv ZiB0aGUgY2xhc3Mgb24gd2hpY2ggYSBtZXRob2QgaXMgZGVmaW5lZDsgc29tZXRoaW5nIGxpa2Ug YEZvb0NsYXNzI3RoZV9tZXRob2RgLiBSdWJ5IGhhcyBhIG1ldGhvZCBgcmJfcHJvZmlsZV9mcmFt ZV9xdWFsaWZpZWRfbWV0aG9kX25hbWVgIHdoaWNoIGNhbiBnaXZlIHVzZWZ1bCBvdXRwdXQgbGlr ZSB0aGlzIGluIG1hbnkgY2FzZXMuIEhvd2V2ZXIsIGluIG1hbnkgY29tbW9uIGNhc2VzIGxpa2Ug ZS5nLiBhbm9ueW1vdXMgY2xhc3NlcywgaXQgd2lsbCBwcmVzZW50IHRoZSBuYW1lIG9mIHRoZSBj bGFzcyBhcyBzb21ldGhpbmcgbGlrZSAiIzxDbGFzczoweDAwMDAwMDAwMDBkYjQ4ZTA+Ii4gVGhp cyBpcyB3b3JzZSB0aGFuIHVzZWxlc3MgZm9yIHByb2ZpbGluZzsgdGhhdCBhZGRyZXNzIHdpbGwg YmUgZGlmZmVyZW50IGFtb25nc3QgZGlmZmVyZW50IHByb2Nlc3NlcyBiZWluZyBwcm9maWxlZCwg c28gbXVsdGlwbGUgcHJvZmlsZXMgY2FuJ3QgYmUgYWdncmVnYXRlZCB0b2dldGhlci4gSW4gZmFj dCwgdGhhdCBhZGRyZXNzIGlzbid0IGV2ZW4gZ3VhcmFudGVlZCB0byBiZSBjb25zdGFudCB3aXRo aW4gdGhlIHNhbWUgcHJvY2VzcyBhbnltb3JlLCBiZWNhdXNlIG9mIGNvbXBhY3Rpb24uCgpJIHdv dWxkIHByb3Bvc2UgdGhhdCB3ZSBoYXZlIGEgbmV3IHdheSBvZiBuYW1pbmcgbWV0aG9kcyB3aGlj aCBwcm9kdWNlcyB1c2VmdWwgc3RyaW5ncyBpbiBhbGwgY2FzZXMsIHdpdGhvdXQgYW55IGFkZHJl c3NlcyBpbiB0aGVtLiBUaGUgcnVsZXMgSSBoYXZlIGNvbWUgdXAgd2l0aCBzbyBmYXIgYXJlOgoK KiAiIzxyZWZpbmVtZW50IEZvbyBvZiBCYXI+IiBmb3IgYSByZWZpbmVtZW50IG1vZHVsZSBhZGRp bmcgbWV0aG9kcyB0bwogIEJhcgoqICIjPGluc3RhbmNlIG9mIEZvbz4iIGZvciBhIHBhcnRpY3Vs YXIgaW5zdGFuY2Ugb2YgRm9vCiogIiM8c2luZ2xldG9uIG9mIEZvbz4iIGZvciBGb28ncyBzaW5n bGV0b24gY2xhc3MuCiogIiM8YW5vbnltb3VzIHN1YmNsYXNzIG9mIEZvbz4iIGZvciBhbiBhbm9u eW1vdXMgc3ViY2xhc3MKKiBUaGUgdXN1YWwgY2xhc3NwYXRoIHN0cmluZyBvdGhlcndpc2UKCk5v dGUgdGhhdCBuZXN0aW5nIGlzIE9LIHRvbyAtIHNvIGEgbWV0aG9kIGRlZmluZWQgb24gdGhlIHNp bmdsZXRvbiBjbGFzcyBvZiBhIHBhcnRpY3VsYXIgRm9vIG9iamVjdCB3b3VsZCBiZSAiIzxzaW5n bGV0b24gb2YgIzxpbnN0YW5jZSBvZiBGb28+PiN0aGVfbWV0aG9kIi4KClNvLCBteSBwcm9wb3Nh bCBpcyB0aGF0IHRoaXMgaXMgdGhlIGZvcm1hdCBvZiB0aGUgbWV0aG9kIG5hbWUgdGhhdCBhcHBl YXJzIGluIHRoZSBgcmJfZGVidWdfZXh0X3NlY3Rpb25gIHN0cnVjdHVyZS4KCiMjIFdoZXJlIGhh dmUgSSBnb3QgdG8gc28gZmFyPwoKT0ssIHNvIEkgaGF2ZSBhIGRyYWZ0IFBSIHVwIHdoaWNoIHNo b3VsZCBob3BlZnVsbHkgaGVscCBtYWtlIHNvbWUgb2YgdGhpcyBjbGVhcmVyOiBodHRwczovL2dp dGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi4gSXQgaXMgb2YgY291cnNlIGluIG5vIHdheSBl dmVuIGNsb3NlIHRvIG1lcmdlIHJlYWR5LCBidXQgSSdtIGhvcGluZyBpdCBoZWxwcyBpbGx1c3Ry YXRlIHNvbWUgb2YgbXkgaWRlYXMgaGVyZToKCiogW1RoZSBkZWJ1Z19leHRlcm5hbC5oIGZpbGVd KGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2L2ZpbGVzI2RpZmYtNjYxZjky NjkwMDllYzgyNzE4NWVhZmE1ZWUwNWJkNzI1MWJiZTBhNTVkZWMzNjFjOWM1YzI1YmIyYTQzYTA5 OCkgdGhhdCBkZWZpbmVzIHRoZSBleHRlcm5hbGx5LXZpc2libGUgc3RydWN0dXJlcwoqIFdoZXJl IHRocmVhZHMgYXJlIFthZGRlZF0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3 MDYvZmlsZXMjZGlmZi1hYTJhZGRiOTI5NzQ5YTRhMDMzMGI5M2NlZWNlYzViYzU0ODU3NTFhMzYy NTI0ZjVjYjM3YmYyMmRmZjE5MzZlUjY1KSBhbmQgW3JlbW92ZWRdKGh0dHBzOi8vZ2l0aHViLmNv bS9ydWJ5L3J1YnkvcHVsbC82NzA2L2ZpbGVzI2RpZmYtYWEyYWRkYjkyOTc0OWE0YTAzMzBiOTNj ZWVjZWM1YmM1NDg1NzUxYTM2MjUyNGY1Y2IzN2JmMjJkZmYxOTM2ZVIxMTApIGZyb20gdGhlIGBy Yl9kZWJ1Z19leHRfc2VjdGlvbmAgc3RydWN0dXJlCiogV2hlcmUgZnJhbWVzIGFyZSBbcHVzaGVk XShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9maWxlcyNkaWZmLWY4YzE3 NDM0N2U2ZWE4ODg5YjUwMzYwNjRhMWZmNGZlNWU3YzUzYTgyMWJlZmE5YmRjNWNjYmYxNzgwMGE2 NDlSNDA3KSBhbmQgW3BvcHBlZF0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3 MDYvZmlsZXMjZGlmZi1mOGMxNzQzNDdlNmVhODg4OWI1MDM2MDY0YTFmZjRmZTVlN2M1M2E4MjFi ZWZhOWJkYzVjY2JmMTc4MDBhNjQ5UjQzNykgZnJvbSB0aGUgYHJiX2RlYnVnX2V4dF9zZWN0aW9u YCBzdHJ1Y3R1cmUKKiBUaGUgW3Rlc3RzXShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1 bGwvNjcwNi9maWxlcyNkaWZmLTg5YTY3YTRkNWIzNDhhYzZmOWNhYmU1NmQyODQ3NTQ1YmU2Nzgw OWIwMWQ4NTZiMzU0MWU5NjQ3MTAxNGJkOTlSNTczKSBpbGx1c3RyYXRlIHdoYXQgdGhlIG5ldyBx dWFsaWZpZWQgbWV0aG9kIG5hbWUgb3V0cHV0IGxvb2tzIGxpa2UuCgojIyBXaGF0IGRvIEkgd2Fu dCBmZWVkYmFjayBvbj8KClRoaXMgd2hvbGUgcHJvamVjdCBpcyBvYnZpb3VzbHkgc3RpbGwgYWJv dXQgMjAlIGNvb2tlZCwgc28sIGFueXRoaW5nIGFuZCBldmVyeXRoaW5nLiBCdXQgbW9yZSBzcGVj aWZpY2FsbHksIHRoZXNlIGFyZSB0aGUgcXVlc3Rpb25zIEkgd291bGQgcmVhbGx5IGxpa2Ugc29t ZSBoZWxwIHdpdGggOikKCiogRG9lcyB0aGlzIF9hcHByb2FjaF8gc2VlbSBzZW5zaWJsZT8gSXMg dGhlIGJhc2ljIF9pZGVhXyBvZiAiZXhwb3NlIHNvbWUgZG9jdW1lbnRlZCBkYXRhIHN0cnVjdHVy ZSB0byBvdGhlciBwcm9jZXNzZXMgdGhhdCBhcmUgYWJsZSB0byByZWFkIG15IG1lbW9yeSIgYSBz b3VuZCBvbmU/CiogV2hhdCBzaG91bGQgSSBkbyB3aXRoIHRoZSBxdWFsaWZpZWQtbWV0aG9kLW5h bWUtd2l0aG91dC1hZGRyZXNzZXMgd29yaz8gQXQgdGhlIG1vbWVudCBJIGV4cG9zZWQgdGhhdCBs b2dpYyBiZWhpbmQgbmV3IG1ldGhvZHMgYE1ldGhvZCNkZWJ1Z19uYW1lYCBhbmQgYFRocmVhZDo6 QmFja3RyYWNlOjpFeHRlcm5hbCNkZWJ1Z19sYWJlbGAuIElzIHRoZXJlIHNvbWUgYXBwZXRpdGUg dG8gb3BlbiBhIHByb3Bvc2FsIHRvIGhhdmUgdGhhdCBpbiBDUnVieT8KKiBTaG91bGQgd2UgZXZl biBjb25zaWRlciBfY2hhbmdpbmcgdGhlIGRlZmF1bHQgb3V0cHV0XyBvZiB0aHJlYWQgYmFja3Ry YWNlcyB0byBwcmludCB0aGVzZSBxdWFsaWZpZWQgbmFtZXM/CiogVGhlcmUgYXJlIHNvbWUgJ2lu ZnJhc3RydWN0dXJhbCcgY29tbWl0cyBvbiB0aGF0IGJyYW5jaCBvZiBtaW5lIC0gb25lIHRvIFtm aW5kIHNvbWUgZXh0cmEgc3BhY2UgaW4gYHJiX21ldGhvZF9lbnRyeV90YF0oaHR0cHM6Ly9naXRo dWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvY29tbWl0cy9mNDQ2ZjUyODFmNThlODc2MWQxODI2 YjZiMWM0YTk4ZmFjZDA0NzJlKSBhbmQgb25lIHRvIFthZGQgc29tZSBuZXcgYXRvbWljIGhlbHBl cnNdKGBodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9jb21taXRzLzE3ZDRi MTU2Y2ZlOGYwYzMyOTEwOTA4ODUzYzE4YzdmYzgwMTIxZWNgKS4gSXMgdGhpcyB0aGUgc29ydCBv ZiB0aGluZyB0aGF0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdHJ5IGFuZCBsYW5kIG5vdyBvciBvbmx5 IHdoZW4gdGhpcyBpcyBhbGwgY2xvc2VyIHRvIGRvbmU/CiogSSBoYXZlbid0IHlldCBhY3R1YWxs eSBpbXBsZW1lbnRlZCBhbnl0aGluZyB0byB0cnkgYW5kIF9yZWFkXyB0aGlzIGV4dGVybmFsIGRl YnVnIHNlY3Rpb24uIFNob3VsZCBpdCBiZQogIDEpIHNvbWUgZXh0ZXJuYWwgcmVwbywgaW4gYSBu b24tUnVieSBsYW5ndWFnZSBlLmcuIFJ1c3Qgb3Igc29tZXRoaW5nPwogIDIpIEEgUnVieSBnZW0s IHdpdGggYSBDIGV4dGVuc2lvbiB0byBoYW5kbGUgYWxsIHRoZSBwdHJhY2UvYnBmJ3kgYml0cz8K ICAzKSBUaGUgZ2VtLCBidXQgaW5zaWRlIHRoZSBDUnVieSBzb3VyY2UgdHJlZT8KICBJJ20gbGVh bmluZyB0b3dhcmRzIDIsIGJ1dCBub3QgcmVhbGx5IHN1cmUuCgpUaGFuayB5b3UsIHRvIGFueWJv ZHkgd2hvIGFjdHVhbGx5IGdvdCB0byB0aGUgYm90dG9tIG9mIHRoaXMgd2FsbCBvZiB0ZXh0LCBh bmQgdGhhbmtzIGRvdWJseSB0byBhbnlib2R5IHdobyBwcm92aWRlcyBmZWVkYmFjayEKCgoKLS0g Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwo=