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.6 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_PASS, SPF_PASS,UNPARSEABLE_RELAY shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id DCABC1F910 for ; Mon, 14 Nov 2022 12:11:21 +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="OuUWcCCj"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id E558A121D13; Mon, 14 Nov 2022 21:11:20 +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 853C3121CFF for ; Mon, 14 Nov 2022 21:11:18 +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=ZP2LugVOExUkX0pzOK0Fw856H1DX4dSQMSaLpUF0GhI=; b=OuUWcCCjX20ppquRgdF1yKsSLsHEDT1wF3fYCHKlfr4VCpdb+zTwolKIlb8cDHDLF2rT atTXiv5k26IJRqME5CXOa66kg/OS0oPPlxMdMQbjQz7Vc3i5BGPRIWUtVaNYrnRecp3+7u Bi+nkj5tB8f3K25vUsNWEYDYf0tPao2ltbBU/ycHDLkNh5d5zgVBODlFA++bvbDy4JUj9l fFb+PuXBIs8cWR7DGG6RN/Fzh3V8vnCAPlBL1m89DNpHZUqY6H6T6sS8mIncFfM1kwsxrl iIqnrWkfewvtLzzzEAH30qnViWtLh3w04u/8a5mumYNmKirlumdA9xsuhy13DNKQ== Received: by filterdrecv-79b54d489b-qdd22 with SMTP id filterdrecv-79b54d489b-qdd22-1-63723061-55 2022-11-14 12:11:13.812525324 +0000 UTC m=+318416.099932634 Received: from herokuapp.com (unknown) by geopod-ismtpd-3-0 (SG) with ESMTP id 2S3NzA1wRJeooL7ipzSlKw for ; Mon, 14 Nov 2022 12:11:13.725 +0000 (UTC) Date: Mon, 14 Nov 2022 12:11:13 +0000 (UTC) From: "byroot (Jean Boussier)" 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: byroot 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: 87206 X-SG-EID: =?us-ascii?Q?Dq8GNIcVqP8cs5uR+EIAabfg3LE9XdC6dZ5KYNrMpf6VzBWG6HqArcu5raQjXL?= =?us-ascii?Q?IGTFdxKHUt7++67+KD54pNYXheirMcsUIf3sdgF?= =?us-ascii?Q?Riq06iZIq0HB+URsRtFxwqPTbTFj+VIMqMwB3yV?= =?us-ascii?Q?ZPumYBwVU8Frnhq9eCqzMRNBOHSLlQwU4GZPrH5?= =?us-ascii?Q?yvzpn=2FjcjNiHA37z8hJxYm5Y75RayuwhURIg0Az?= =?us-ascii?Q?qEx8PTwwSxAIMfQvPvGLpmuA5veadp8w3AkuS3+?= =?us-ascii?Q?zYg9kiMdCHXvvRHx5zMcg=3D=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110754 Subject: [ruby-core:110754] [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" SXNzdWUgIzE5MTE5IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4K Cgo+IHRoZSBSdWJ5IGludGVycHJldGVyIHNob3VsZCBiZSBzdXNwZW5kZWQgYXQgYSBzYWZlIHBs YWNlIGJlZm9yZSByZWFkaW5nLgoKVGhhdCBpcyB3aGF0IGBzdGFja3Byb2ZgIGhhcyBiZWVuIGRv aW5nIGhpc3RvcmljYWxseSwgdGhlIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXQgaXQgdGVuZCB0 byBza2V3IHRoZSBwcm9maWxpbmcgcmVzdWx0cyBhbmQgYXR0cmlidXRlIG1vcmUgd2VpZ2h0IHRv IG1ldGhvZHMgaW1wbGVtZW50ZWQgaW4gQyB0aGFuIHJlZ3VsYXIgbWV0aG9kcy4KClNpbmNlIGFi b3V0IGEgeWVhciBhZ28gaG93ZXZlciwgd2hlbiBvbiBSdWJ5IDMuMCsgKGFuZCB3aGVuIFlKSVQg aXMgbm90IGVuYWJsZWQpLCBgc3RhY2twcm9mYCBkb2VzIGNvbGxlY3QgdGhlIHN0YWNrdHJhY2Ug ZGlyZWN0bHkgZnJvbSB0aGUgc2lnbmFsIGhhbmRsZXIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20v dG1tMS9zdGFja3Byb2YvcHVsbC8xNTAgY2MgQGpoYXd0aG9ybiAmIEB0ZW5kZXJsb3ZlbWFraW5n KS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQnVnICMxOTExOTog QWRkIGFuIGludGVyZmFjZSBmb3Igb3V0LW9mLXByb2Nlc3MgcHJvZmlsaW5nIHRvb2xzIHRvIGFj Y2VzcyBSdWJ5IGluZm9ybWF0aW9uCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8x OTExOSNjaGFuZ2UtMTAwMDkyCgoqIEF1dGhvcjoga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5ha3Rz aWRpcykKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCiogQmFja3BvcnQ6IDIuNzog VU5LTk9XTiwgMy4wOiBVTktOT1dOLCAzLjE6IFVOS05PV04KLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKV2FybmluZzogdGhpcyBpcyBhIHZlcnkgbG9uZyBwcm9wb3Nh bCA6KCBJIGRvbid0IHJlYWxseSBrbm93IHdoYXQgdGhlIG1vc3QgcHJvZHVjdGl2ZSB3YXkgdG8g ZW5nYWdlIHdpdGggdGhlIFJ1YnkgY29tbXVuaXR5IGFib3V0IHRoaXMgaXMgLSBpZiB0aGVyZSdz IGEgYmV0dGVyIHBsYWNlIHRvIHRha2UgdGhpcywgcGxlYXNlIGxldCBtZSBrbm93IQoKSSBhbHNv IHdhbnQgdG8gYWNrbm93bGVkZ2UgQGl2b2Fuam8gZm9yIGNvbnRyaWJ1dGluZyB0byB0aGlzIHBy b3Bvc2FsIC0gSSBib3VuY2VkIG1hbnkgaWRlYXMgYWJvdXQgcHJvZmlsaW5nIG9mZiBoaW0gYW5k IHRoZSBpbXByb3ZlZC1iYWNrdHJhY2Ugc3R1ZmYgaXMgYWxsIGJhc2VkIG9uIGhpcyBbYmFja3Ry YWNpZV0oaHR0cHM6Ly9naXRodWIuY29tL2l2b2Fuam8vYmFja3RyYWNpZSkgZ2VtLgoKIyMgTW90 aXZhdGlvbgoKV2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgYW5kIG9sZCBSdWJ5IGFwcHMsIHRoZXJl IGlzIG9mdGVuIGJvdGggYSBuZWVkIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHNvbWUg b3BlcmF0aW9ucywgYXMgd2VsbCBhcyBhIGxhY2sgb2YgdW5kZXJzdGFuZGluZyBhcyB0byBob3cs IHByZWNpc2VseSwgdGhlIGNvZGUgd29ya3MsIGFuZCB3aGF0IGFzcGVjdCBvZiBpdCBpcyBhY3R1 YWxseSBzbG93LiBGdXJ0aGVybW9yZSwgdGhlIHBlcmZvcm1hbmNlIGlzc3VlcyBpbiBxdWVzdGlv biBvZnRlbiBvbmx5IGFwcGVhciBpbiBhIGxpdmUsIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHdo ZXJlIHRoZXJlIGlzIHNvbWUgdHJhZmZpYyBwYXR0ZXJuIG9yIHVzZXIgZGF0YSBjYXVzaW5nIHRo ZSBwcm9ibGVtLiBJbiBzaXR1YXRpb25zIGxpa2UgdGhpcywgcHJvZmlsaW5nIHRvb2xzIGNhbiBw cm92ZSBpbnZhbHVhYmxlIGluIGhlbHBpbmcgdG8gdW5kZXJzdGFuZCBhcHBsaWNhdGlvbiBwZXJm b3JtYW5jZSBpbi1zaXR1IGluIHByb2R1Y3Rpb24uCgpUaGUgdGhpbmdzIHdoaWNoIGFuIGVuZ2lu ZWVyIG1pZ2h0IHVzZSBhIHByb2ZpbGVyIHRvIG1lYXN1cmUgaW5jbHVkZToKICAqIFdhbGwgY2xv Y2sgdGltZTsgaG93IGxvbmcgZG8gcGFydGljdWxhciBtZXRob2QgY2FsbHMgdGFrZT8KICAqIENQ VSB0aW1lOyBvZiB0aGUgdGltZSBhIG1ldGhvZCB0YWtlcywgaG93IGxvbmcgaXMgc3BlbnQgYWN0 dWFsbHkgX3J1bm5pbmdfIG9uIHRoZSBDUFUsIGFuZCBob3cgbXVjaCBpcyBzcGVudCBibG9ja2Vk IHdhaXRpbmcgZm9yIGUuZy4gYSBuZXR3b3JrIHJlc3BvbnNlPwogICogR1ZMIGNvbnRlbnRpb247 IGlzIGFuIGFwcGxpY2F0aW9uIHVzaW5nIGxvdHMgb2YgdGhyZWFkcyBqdXN0IHdhaXRpbmcgZm9y IHRoZSBHVkwgdG8gYmVjb21lIGF2YWlsYWJsZT8KICAqIEdDIHRpbWU7IGlzIGEgcGFydGljdWxh ciBwaWVjZSBvZiBjb2RlIF9hY3R1YWxseV8gc2xvdywgb3IgaXMgaXRzIHNsb3duZXNzIGp1c3Qg YSByZXN1bHQgb2YgX290aGVyXyBjb2RlIGNhdXNpbmcgdGhlIEdDIHRvIGJlIGludm9rZWQ/CiAg KiBBbGxvY2F0aW9uczsgaG93IG1hbnkgb2JqZWN0cyBpcyBhIHBhcnRpY3VsYXIgcGllY2Ugb2Yg Y29kZSBhbGxvY2F0aW5nLCBhbmQgd2hhdCBpbXBhY3QgaXMgdGhpcyBoYXZpbmcgb24gR0M/CiAg KiBIZWFwOyBvZiB0aGUgb2JqZWN0cyBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZSBhbGxvY2F0 ZWQsIGhvdyBtYW55IG9mIHRoZW0gYXJlIHN0aWxsIGxpdmU/IElzIHRoZXJlIHNvbWUga2luZCBv ZiBsZWFrPwoKR2VuZXJhbGx5LCBpbiBvcmRlciB0byBjb2xsZWN0IHRoaXMgaW5mb3JtYXRpb24g ZnJvbSBwcm9kdWN0aW9uIGluIGEgbWluaW1hbGx5LWltcGFjdGZ1bCB3YXksIGEgc2FtcGxpbmcg YXBwcm9hY2ggaXMgdXNlZC4gQSBwcm9maWxpbmcgdG9vbCBwZXJpb2RpY2FsbHkgdGFrZXMgYSBz bmFwc2hvdCBvZiB0aGUgY3VycmVudCBjYWxsLXN0YWNrIG9mIGEgUnVieSBwcm9ncmFtOyBkZXBl bmRpbmcgb24gd2hhdCBpcyBiZWluZyBtZWFzdXJlZCwgdGhpcyBwZXJpb2RpY2l0eSBtaWdodCBi ZSBlLmcuIHNpbXBseSBldmVyeSBOIG1zIChmb3Igd2FsbC1jbG9jayBwcm9maWxpbmcpLCBldmVy eSBOIGFsbG9jYXRpb25zIChmb3IgYWxsb2NhdGlvbiBwcm9maWxpbmcpLCBldGMuIFRoZW4sIHRo ZSBkYXRhIHdpbGwgZ2VuZXJhbGx5IGJlIGNvbWJpbmVkIGFjcm9zcyBtYW55IGluc3RhbmNlcyBv ZiBhIHByb2dyYW0gdG8gZ2V0IGFuIGFnZ3JlZ2F0ZSB2aWV3ICh0aHJvdWdoIGUuZy4gYSBmbGFt ZSBncmFwaCkuCgpJbiBhZGRpdGlvbiB0byB0aGlzIGZsZWV0LXdpZGUgYWdncmVnYXRpb24sIGl0 J3Mgc29tZXRpbWVzIHVzZWZ1bCB0byBwcm9maWxlIGEgcGFydGljdWxhciBwcm9jZXNzIHdoaWNo IGhhcyBzdWRkZW5seSBzdGFydGVkIGRpc3BsYXlpbmcgc29tZSBwYXRob2xvZ3kgb2YgaW50ZXJl c3QuIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGEgd2Vic2VydmVyIHByb2Nlc3MgdGhhdCBoYWQg c3VkZGVubHkgYmVjb21lIHN0dWNrLCB5b3UgbWlnaHQgd2FudCB0byBhdHRhY2ggYSBwcm9maWxl ciB0byBmaW5kIG91dCBfd2h5Xy4gSW4gc2NlbmFyaW9zIGxpa2UgdGhpcywgaXQncyBvZnRlbiBp bXBvc3NpYmxlIHRvIG1ha2Ugc29tZSBhZGp1c3RtZW50IHRvIHRoZSBwcm9ncmFtIHRvIGVuYWJs ZSBwcm9maWxpbmcgYW5kIHJlc3RhcnQgaXQ7IHRoZSBhY3Qgb2YgcmVzdGFydGluZyBpdCB3b3Vs ZCBtYWtlIHRoZSBwcm9ibGVtIGdvIGF3YXkgKGZvciBub3chKS4KCiMjIEN1cnJlbnQgc3RhdGUg b2YgdGhlIGFydAoKVGhpcyByZXByZXNlbnRzIG15IGJlc3QgdW5kZXJzdGFuZGluZyBvZiB0aGUg d2F5cyBpbiB3aGljaCBtb3N0IFJ1YnkgcHJvZmlsaW5nIHRvb2xzIHdvcmsgdG9kYXkuIEknbSBz dXJlIEkndmUgbWlzc2VkIHNvbWUgaW1wb3J0YW50IGRldGFpbHMgYW5kIG90aGVyIHRvb2xzLCBm b3Igd2hpY2ggSSdtIGRlZXBseSBzb3JyeS4KCiMjIyBTaWduYWwtYmFzZWQgcHJvZmlsaW5nCgpT aWduYWwtYmFzZWQgcHJvZmlsZXJzIGNhbiBiZSB1c2VkIHRvIG1lYXN1cmUgQ1BVIGFuZCB3YWxs IGNsb2NrIHRpbWUuIEluIHRoaXMgc2NoZW1lLCBhIHByb2ZpbGVyIChpbiB0aGUgZm9ybSBvZiBh biBleHRlbnNpb24gZ2VtKSBzZXRzIHVwIGEgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR1BST0YgaW4g QywgYW5kIHRoZW4gYXJyYW5nZXMgZm9yIFNJR1BST0YgdG8gYmUgZGVsaXZlcmVkIHRvIHRoZSBw cm9jZXNzIHJlcGVhdGVkbHkgaW4gc29tZSBraW5kIG9mIGxvb3AuIFRoZSBzaWduYWwgaGFuZGxl ciB0aGVuIGNhcHR1cmVzIGEgc3RhY2sgdHJhY2UgdXNpbmcgdGhlIGByYl9wcm9maWxlX2ZyYW1l c2AgQVBJIGZyb20gdGhlIEMgZXh0ZW5zaW9uIGFuZCByZWNvcmRzIHRoaXMgYXMgYSBzaW5nbGUg c2FtcGxlLgoKVGhpcyBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIENQVS93YWxsIGNsb2NrIHBy b2ZpbGluZyBpbiBbU3RhY2twcm9mXShodHRwczovL2dpdGh1Yi5jb20vdG1tMS9zdGFja3Byb2Yp LCB0aGUgW0RhdGFkb2cgY29udGludW91cyBwcm9maWxlcl0oaHR0cHM6Ly9naXRodWIuY29tL0Rh dGFEb2cvZGQtdHJhY2UtcmIpLCBhbmQgSSdtIHN1cmUgb3RoZXJzLiBJdCdzIGFsc28gYSB3ZWxs LWtub3duIG1lY2hhbmlzbSB1c2VkIGluIG90aGVyIG5vbi1SdWJ5IHRvb2xzIGxpa2UgW2dwZXJm dG9vbHNdKGh0dHBzOi8vZ3BlcmZ0b29scy5naXRodWIuaW8vZ3BlcmZ0b29scy9jcHVwcm9maWxl Lmh0bWwpCgpPbmUgYmVuZWZpdCBvZiB0aGlzIG1lY2hhbmlzbSBpcyB0aGF0IGl0IHNob3VsZCBi ZSBxdWl0ZSBmYXN0LiBUcmlnZ2VyaW5nIHRoZSBzaWduYWwgY2F1c2VzIGEgY29udGV4dCBzd2l0 Y2ggaW50byB0aGUga2VybmVsICYgYmFjayBpbnRvIHRoZSBoYW5kbGVyLCBidXQgZXhlY3V0aW9u IHN0YXlzIGluc2lkZSB0aGUgY3VycmVudCBwcm9ncmFtOyB0aGVyZSdzIG5vIG5lZWQgZm9yIHRo ZSBleGVjdXRpb24gdG8gc3dpdGNoIHRvIGFub3RoZXIgcHJvZ3JhbSAoYW5kIGNvbnNlcXVlbnRs eSBjaGFuZ2UgYWRkcmVzcyBzcGFjZSkuCgpUaGUgZG93bnNpZGUgb2YgdGhpcyBhcHByb2FjaCBp cyB0aGF0IGl0IHJlcXVpcmVzIHNvbWUgbGV2ZWwgb2YgY29vcGVyYXRpb24gZnJvbSB0aGUgcHJv Z3JhbSBiZWluZyBwcm9maWxlZC4gU29tZXRoaW5nIGluc2lkZSB0aGUgcHJvY2VzcyBtdXN0IGlu c3RhbGwgdGhlIFNJR1BST0YgaGFuZGxlcjsgaWYgeW91IGhhdmUgc29tZSBleGlzdGluZywgcnVu bmluZyBSdWJ5IHByb2Nlc3MgZm9yIHdoaWNoIGEgcHJvZmlsZXIgaXMgbm90IGxvYWRlZCwgeW91 IGNhbm5vdCBiZWdpbiBwcm9maWxpbmcgaXQgd2l0aG91dCByZXN0YXJ0aW5nIGl0IChhbmQgdXNp bmcgc29tZSBtZWNoYW5pc20gbGlrZSBhIGAtcm15X3Byb2ZpbGVyL2F1dG9sb2FkYCBmbGFnKS4K CkFub3RoZXIgcHJvYmxlbSB3aXRoIHRoaXMgYXBwcm9hY2ggaXMgdGhlIGVmZmVjdCB0aGVzZSBT SUdQUk9GIHNpZ25hbHMgaGF2ZSBvbiB0aGUgYXBwbGljYXRpb24uIE5vcm1hbGx5LCB0aGUgcHJv ZmlsZXIgaW5zdGFsbHMgdGhlIHNpZ25hbCBoYW5kbGVyIHdpdGggdGhlIFNBX1JFU1RBUlQgZmxh ZzsgdGhpcyBfc2hvdWxkXyBtZWFuIHRoYXQgYW55IGluLXByb2dyZXNzIHN5c3RlbSBjYWxsIHRo ZSBhcHBsaWNhdGlvbiBpcyBkb2luZyB3aGVuIHRoZSBTSUdQUk9GIGFycml2ZXMgZ2V0cyB0cmFu c3BhcmVudGx5IHJlc3RhcnRlZCB3aGVuIHRoZSBoYW5kbGVyIGZpbmlzaGVzIGNvbGxlY3Rpbmcg aXRzIHNhbXBsZS4gSG93ZXZlciwgb24gTGludXggYXQgbGVhc3QsIHRoZXJlIGFyZSBzb21lIHN5 c3RlbSBjYWxscyB3aGljaCBhcmUgX05PVF8gcmVzdGFydGVkIHdoZW4gU0FfUkVTVEFSVCBoYXBw ZW5zIC0gbm90YWJseSBzb21lIG5ldHdvcmsgcmVsYXRlZCBvbmVzIGxpa2UgcG9sbCwgZXBvbGws IGFuZCBzZW5kL3JlY3Ygd2hlbiBhIHNvY2tldCB0aW1lb3V0IGlzIHNldC4gVGhlc2Ugc3lzdGVt IGNhbGxzIHdpbGwgaW5zdGVhZCBmYWlsIHdpdGggRUlOVFI7IHdlbGwgYmVoYXZlZCBwcm9ncmFt cyBhbmQgbGlicmFyaWVzIF9TSE9VTERfIHJldHJ5IHRoaXMuCgpTYWRseSwgaG93ZXZlciwgdGhl IHJlcGVhdGVkIGRlbGl2ZXJ5IG9mIFNJR1BST0YgdGVucyBvciBodW5kcmVkcyBvZiB0aW1lcyBw ZXIgc2Vjb25kIGRvZXMgaGF2ZSBhIHdheSBvZiBzaGFraW5nIG91dCBjb3JuZXItY2FzZXMgaW4g bGlicmFyaWVzIHdoZXJlIHRoaXMgaXNuJ3QgYmVpbmcgZG9uZSBwcm9wZXJseS4gRm9yIGV4YW1w bGUsIEkgaGF2ZSBwZXJzb25hbGx5IGRpc2NvdmVyZWQgdGhlIGhhcmQgd2F5IHRoYXQgbGlibXlz cWxjbGllbnQgdmVyc2lvbiA1LjcgZG9lcyB0aGlzIHdyb25nIGluIG9uZSBwbGFjZSwgc28gZW5h YmxpbmcgYSBTSUdQUk9GLWJhc2VkIHByb2ZpbGVyIGNhbiBjYXVzZSBsaWJteXNxbGNsaWVudCB0 byBlcnJvbmVvdXNseSB0aGluayB0aGF0IGRhdGFiYXNlIGNvbm5lY3Rpb25zIHdlcmUgY2xvc2Vk LiBUaGlzIGlzIHVuZG91YnRlZGx5IGEgYnVnIGluIGxpYm15c3FsY2xpZW50ICh3aGljaCwgYnkg dGhlIHdheSwgc2VlbXMgdG8gYmUgZml4ZWQgaW4gdmVyc2lvbiA4KSwgdGhhdCBfY291bGRfIGJl IHRyaWdnZXJlZCBieSBhbnkgb3RoZXIgc2lnbmFsLiBUaGVyZSdzIG5vIGRlbnlpbmcgdGhvdWdo IHRoYXQgU0lHUFJPRi1iYXNlZCBwcm9maWxpbmcgaXMgYSByZWFsIHRvcnR1cmUtdGVzdCBmb3Ig RUlOVFIgaGFuZGxpbmcsIGFuZCB0aGVyZSB1bmRvdWJ0ZWRseSBfYXJlXyBidWdneSBsaWJyYXJp ZXMgb3V0IHRoZXJlIGluIHRoZSB3aWxkIHRoYXQgcGVvcGxlIGFyZSB1c2luZyBpbiB0aGVpciBh cHBsaWNhdGlvbnMuIEl0IHdvdWxkIGJlIG5pY2UgaWYgUnVieSBwcm9maWxlcnMgY291bGQgd29y ayBhcm91bmQgdGhpcyBwcm9ibGVtLgoKIyMjIFJVQllfSU5URVJOQUxfRVZFTlRfTkVXT0JKIHBy b2ZpbGluZwoKQ29sbGVjdGlvbiBvZiBzdGFja3MgZnJvbSBTSUdQUk9GIHdvcmtzIGZvciBDUFUv d2FsbCB0aW1lIHByb2ZpbGluZywgYnV0IGEgZGlmZmVyZW50IGFwcHJvYWNoIGlzIG5lZWRlZCBm b3IgaW4tcHJvY2VzcyBwcm9maWxlcnMgdG8gY29sbGVjdCBhbGxvY2F0aW9uIHByb2ZpbGVzLiBU aGlzIGlzIG5vcm1hbGx5IGRvbmUgYnkgcmVnaXN0ZXJpbmcgYSB0cmFjZXBvaW50IGhhbmRsZXIg Zm9yIFJVQllfSU5URVJOQUxfRVZFTlRfTkVXT0JKIGluIHRoZSBwcm9maWxlciBleHRlbnNpb24g Z2VtOyB0aGlzIGlzIGNhbGxlZCBldmVyeSB0aW1lIGEgUnVieSBvYmplY3QgaXMgYWxsb2NhdGVk LiBGcm9tIHRoaXMgaGFuZGxlciwgdGhlIHByb2ZpbGVyIGNhbiB1c2UgYHJiX3Byb2ZpbGVfZnJh bWVzYCBhZ2FpbiB0byBjb2xsZWN0IGEgUnVieSBiYWNrdHJhY2Ugb2YgdGhlIGNvZGUgcmVzcG9u c2libGUgZm9yIGFsbG9jYXRpbmcgdGhpcyBvYmplY3QuCgojIyMgUHRyYWNlLWJhc2VkIHByb2Zp bGluZwoKQW5vdGhlciBhcHByb2FjaCB0aGF0IGhhcyBiZWVuIHVzZWQgaXMgdG8gY29udHJvbCB0 aGUgUnVieSBwcm9ncmFtIHRvIGJlIHByb2ZpbGVkIHdpdGggYW5vdGhlciwgc2VwYXJhdGUgcHJv Y2VzcywgdXNpbmcgYW4gYXBwcm9wcmlhdGUgcGxhdGZvcm0gQVBJIChlLmcuIHB0cmFjZSBvbiBM aW51eCkuIFBlcmlvZGljYWxseSwgdGhlIHByb2ZpbGVyIHByb2Nlc3MgY2FuIHVzZSBwdHJhY2Ug dG8gc3VzcGVuZCBleGVjdXRpb24gb2YgdGhlIHRhcmdldCBSdWJ5IHByb2dyYW0sIGFuZCBjb2xs ZWN0IGEgc3RhY2sgdHJhY2Ugb2YgaXQuIFRoaXMgaXMgdGhlIGFwcHJvYWNoIHVzZWQgYnkgdGhl IFtyYnNweV0oaHR0cHM6Ly9naXRodWIuY29tL3Jic3B5L3Jic3B5KSBwcm9maWxlciwgd2hpY2gg aXMgaXRzZWxmIGFjdHVhbGx5IGEgUnVzdCBwcm9ncmFtLgoKVGhlIG1haW4gc3RyZW5ndGggb2Yg dGhpcyBhcHByb2FjaCBpcyB0aGF0IGl0IGFsbG93cyBvbmUgdG8gYmVnaW4gdHJhY2luZyBhIFJ1 YnkgcHJvZ3JhbSB3aGljaCBpcyBhbHJlYWR5IHJ1bm5pbmcsIF93aXRob3V0IHJlc3RhcnRpbmcg aXRfOyByYnNweSBjYW4gcHRyYWNlLWF0dGFjaCB0byBhIHJ1bm5pbmcgcHJvY2VzcyBhbmQgYmVn aW4gY29sbGVjdGluZyBzYW1wbGVzIHN0cmFpZ2h0IGF3YXkuIFRoaXMgYWxsb3dzIG9uZSB0byBn YWluIGluc2lnaHQgaW50byBpbnRlcm1pdHRlbnQgcHJvYmxlbXMgb25jZSB0aGV5IHN0YXJ0IGhh cHBlbmluZyEKClVuZm9ydHVuYXRlbHksICJjb2xsZWN0IGEgc3RhY2sgdHJhY2UiIGlzIHF1aXRl IHRyaWNreSB0byBkbyBmcm9tIG91dHNpZGUgdGhlIHByb2Nlc3M7IHdlIHdhbnQgdGhlIF9SdWJ5 XyBsZXZlbCBzdGFjayB0cmFjZSwgbm90IChvciBhdCBsZWFzdCwgYXMgd2VsbCBhcykgdGhlIG1h Y2hpbmUgc3RhY2sgdHJhY2UgKHdoaWNoIGNvdWxkIGJlIGNvbGxlY3RlZCBlLmcuIHZpYSBEV0FS RiB1bndpbmRpbmcgb3IgZnJhbWUtcG9pbnRlciBjaGFzaW5nKS4gVG8gZ2V0IHRoZSBSdWJ5IHN0 YWNrIHRyYWNlIHJlcXVpcmVzIHJ1bW1hZ2luZyBhcm91bmQgaW5zaWRlIHRoZSBtZW1vcnkgb2Yg dGhlIHRhcmdldCBwcm9jZXNzIChlLmcuIHdpdGggYC9wcm9jL3twaWR9L21lbWAgb24gTGludXgp LCB0byBmaW5kIHRoZSByZWxldmFudCBgcmJfY29udHJvbF9mcmFtZV90YCBzdHJ1Y3R1cmVzLiBS YnNweSBjb250YWlucyBhIGh1Z2UgbGlzdCBvZiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZm9yIHZh cmlvdXMgdmVyc2lvbnMgb2YgUnVieSB0byBtYWtlIHRoaXMgcG9zc2libGUsIGJ1dCBhbnkgdGlt ZSBhIG5ldyB2ZXJzaW9uIG9mIFJ1YnkgaXMgcmVsZWFzZWQsIGEgbmV3IHZlcnNpb24gb2YgUmJz cHkgbXVzdCBhbHNvIGJlIHJlbGVhc2VkIHRvIGFjY291bnQgZm9yIGFueSBjaGFuZ2VzIHRvIHRo ZSBsYXlvdXQgb2YgUnVieSdzIGludGVybmFsIHN0cnVjdHVyZXMuCgpJbiB0aGVvcnksIHRoZSBw dHJhY2UgYXBwcm9hY2ggaXMgYWxzbyB3b3JzZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3Rp dmU7IHRvIGNvbGxlY3QgYSBzYW1wbGUsIGV4ZWN1dGlvbiBtdXN0IHN3aXRjaCBmcm9tIHRoZSBw cm9jZXNzIHRvIGJlIHByb2ZpbGVkIHRvIHRoZSBwcm9maWxlciBwcm9jZXNzLCB3aGljaCByZXF1 aXJlcyBzd2l0Y2hpbmcgbWVtb3J5IG1hcHBpbmdzLiBSZWNhbGwgdGhhdCB3aXRoIGluLXByb2Nl c3MgU0lHUFJPRiBwcm9maWxpbmcsIHRoZSBwcm9maWxlciB3b3JrIGlzIGRvbmUgaW4gdGhlIHNh bWUgcHJvY2VzcyB3aXRoIHRoZSBzYW1lIG1lbW9yeSBtYXBwaW5ncy4gSG93ZXZlciwgdGhpcyBj b25jZXJuIHNlZW1zIHRvIGJlIGxhcmdlbHkgdGhlb3JldGljYWw7IEkgaGF2ZSBub3QgX2FjdHVh bGx5XyBzZWVuIG9yIGhlYXJkIG9mIGFueWJvZHkgc2F5aW5nIHRoYXQgdGhpcyBpcyBtYWtpbmcg cmJzcHkgdG9vIHNsb3cgZm9yIHRoZWlyIHVzZWNhc2UuCgpGaW5hbGx5LCBhbHRob3VnaCBwdHJh Y2UtYmFzZWQgcHJvZmlsaW5nIGdldHMgdXMgX2Nsb3NlXyB0byB0aGUgaWRlYWwgb2Ygbm90IHJl cXVpcmluZyBhbnkgZm9yZXNpZ2h0IHRvIGJlZ2luIHByb2ZpbGluZyBhIHJ1bm5pbmcgcHJvZ3Jh bSwgdGhlcmUgaXMgX29uZV8gc21hbGwgcmVxdWlyZW1lbnQgd2hpY2ggbXVzdCBiZSBzYXRpc2Zp ZWQgYWhlYWQgb2YgdGltZSAtIHRoZSBSdWJ5IGludGVycHJldGVyIG5lZWRzIHRvIGhhdmUgbm90 IGhhZCBpdHMgc3ltYm9scyBzdHJpcHBlZCBzbyB0aGF0IHJic3B5IGNhbiBmaW5kIHRoZSBgcnVi eV9jdXJyZW50X3ZtX3B0cmAgZ2xvYmFsLiBJIGJlbGlldmUgcmJzcHkgbWFrZXMgYW4gX2F0dGVt cHRfIHRvIGZpbmQgaXQgd2l0aG91dCB0aGUgc3ltYm9sIGJ1dCBpdCBkb2VzIG5vdCBjbGFpbSB0 byBiZSByZWxpYWJsZS4KCiMjIyBBbGxvY2F0aW9uIHNhbXBsaW5nIGZyb20gcHRyYWNlLWJhc2Vk IHByb2ZpbGluZwoKVG8gcGVyZm9ybSBhbGxvY2F0aW9uIHByb2ZpbGluZyBmcm9tIG91dHNpZGUg dGhlIFJ1YnkgcHJvY2Vzcywgd2Ugd291bGQgbmVlZCBzb21lIGFuYWxvZ3VlIHRvIFJVQllfSU5U RVJOQUxfRVZFTlRfTkVXT0JKLiBJIGJlbGlldmUgdGhpcyBfY291bGRfIGJlIGFjaGlldmVkIGJ5 IGNvbXBpbGluZyBSdWJ5IHdpdGggZHRyYWNlL3N5c3RlbXRhcC9VU0RUIHByb2JlcyBlbmFibGVk LCBhbmQgaGF2aW5nIHRoZSBwcm9maWxlciBwcm9jZXNzIHdyaXRlIGEgdHJhcCBpbnN0cnVjdGlv biBvdmVyIHRoZSB0b3Agb2YgdGhlIHByb2JlICh3aGljaCBpcyBob3cgZS5nLiBkZWJ1Z2dlcnMg d29yaykuIEkgZG9uJ3QgYmVsaWV2ZSByYnNweSBvciBhbnkgb3RoZXIgcHJvZmlsZXIgdGhhdCBJ IGZvdW5kIGFjdHVhbGx5IGRvZXMgdGhpcyB0aG91Z2guCgojIyMgUGVyZi1iYXNlZCBwcm9maWxp bmcKCkxpbnV4IGhhcyBhIGRlZGljYXRlZCBzdWJzeXN0ZW0gY2FsbGVkIHBlcmYgd2hpY2ggKGFt b25nc3QgbWFueSBvdGhlciB0aGluZ3MpIGNhbiBkbyBsb3ctb3ZlcmhlYWQgcHJvZmlsaW5nIG9m IGFyYml0cmFyeSBwcm9jZXNzZXMuIFRoZSBzYW1wbGluZyBpcyBkb25lIGluc2lkZSB0aGUga2Vy bmVsLCBzbyBsaWtlIFNJR1BST0YgKGFuZCB1bmxpa2UgcHRyYWNlKSBjb2xsZWN0aW5nIGEgc2Ft cGxlIHJlcXVpcmVzIG5vIHN3aXRjaCBvZiBhZGRyZXNzIHNwYWNlLiBIb3dldmVyLCBvZiBjb3Vy c2UsIHBlcmYgb25seSB1bmRlcnN0YW5kcyB0aGUgbWFjaGluZSBzdGFjaywgbm90IHRoZSBSdWJ5 IHN0YWNrLCBzbyB1c2luZyBwZXJmIHRvIHByb2ZpbGUgYSBSdWJ5IHByb2dyYW0gaXMgbm90IGN1 cnJlbnRseSBleHRyYW9yZGluYXJpbHkgdXNlZnVsICh1bmxlc3MgeW91J3JlIHByb2ZpbGluZyB0 aGUgUnVieSBWTSBpdHNlbGYgb3IgYSBDIGV4dGVuc2lvbikuCgpQZXJmIGFjdHVhbGx5IGhhcyBh IFttZWNoYW5pc21dKGh0dHBzOi8vd3d3LmJyZW5kYW5ncmVnZy5jb20vcGVyZi5odG1sI0pJVF9T eW1ib2xzKSB0byBoZWxwIGdpdmUgbWVhbmluZ2Z1bCBzdGFjayB0cmFjZXMgZm9yIGxhbmd1YWdl cyB3aXRoIEpJVHM7IHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byB3cml0ZSBvdXQgYSBt YXBwaW5nIG9mIGZ1bmN0aW9uIGFkZHJlc3MgLT4gbmFtZSB0byBhIGZpbGUgYC90bXAvcGVyZi0k UElELm1hcGA7IHBlcmYgd2lsbCB1c2UgdGhpcyBmaWxlIHRvIHN5bWJvbGljYXRlIHN0YWNrcy4g UHl0aG9uIFtyZWNlbnRseSBhZGRlZF0oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2L2hvd3Rv L3BlcmZfcHJvZmlsaW5nLmh0bWwpIHN1cHBvcnQgZm9yIHRoaXMgbWVjaGFuaXNtIGFzIHdlbGw7 IGhvd2V2ZXIsIGJlY2F1c2UgQ1B5dGhvbiBkb2VzIG5vdCBoYXZlIGEgSklULCBpdCB3b3JrcyBi eSBnZW5lcmF0aW5nIGEgbmF0aXZlIHRyYW1wb2xpbmUgZm9yIGVhY2ggZnVuY3Rpb24gKHdpdGgg YSB1bmlxdWUgYWRkcmVzcyksIGFuZCBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSB0cmFtcG9saW5l cyBkdXJpbmcgUHl0aG9uIG1ldGhvZCBleGVjdXRpb24gdG8gbWFrZSB0aGUgbWFjaGluZSBzdGFj ayBtaXJyb3IgdGhlIFZNIG9uZS4gVGhpcyBtZWNoYW5pc20gaXMgbm90IGltcGxlbWVudGVkIGlu IENSdWJ5IGN1cnJlbnRseS4KCiMjIFRoZSBwcm9wb3NhbDogcHJvdmlkZSBhbiAiZXh0ZXJuYWwg ZGVidWcgc2VjdGlvbiIKCldlIGlkZWFsbHkgd291bGQgbGlrZSB0byBoYXZlIGEgd2F5IHRvIHBy b2ZpbGUgUnVieSBhcHBsaWNhdGlvbnMgd2hpY2ggY29tYmluZXMgdGhlIGJlbmVmaXRzIG9mIHRo ZSBTSUdQUk9GIG1lY2hhbmlzbSAoZWFzeSwgZG9jdW1lbnRlZCBhY2Nlc3MgdG8gUnVieSBjYWxs IHN0YWNrcyksIHRoZSBwdHJhY2UgbWVjaGFuaXNtICh0aGUgYWJpbGl0eSB0byBhdHRhY2ggdG8g cnVubmluZyBwcm9jZXNzZXMgd2l0aCBhIG1pbmltdW0gb2YgZm9yZXNpZ2h0IHJlcXVpcmVkKSwg YW5kIHRoZSBwZXJmIG1lY2hhbmlzbSAobG93IG92ZXJoZWFkIHNhbXBsZSBjb2xsZWN0aW9uIHdp dGhvdXQgcmVxdWlyaW5nIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlIHN3aXRjaCkuIFRoaXMgcHJv cG9zYWwgYWltcyB0byBwcm92aWRlIGV4YWN0bHkgdGhhdC4KClRoZSBSdWJ5IGludGVycHJldGVy IHdvdWxkIGhhdmUgYSBuZXcgZ2xvYmFsIHZhcmlhYmxlIGByYl9kZWJ1Z19leHRfc2VjdGlvbmAs IHdoaWNoIGlzIGRlZmluZWQgd2l0aCBgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigicmJfZGVidWdf ZXh0IikpKWAgc28gdGhhdCBpdCBhcHBlYXJlZCBpbiBhIHNlcGFyYXRlIHNlY3Rpb24gaW4gdGhl IEVMRiBiaW5hcnkuIFRoaXMgdmFyaWFibGUgd291bGQgYmUgY29uc3RhbnRseSBrZXB0IHBvcHVs YXRlZCB3aXRoIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSBjYWxsLXN0YWNr cyBvZiBhbGwgdGhyZWFkcy9maWJlcnMgaW4gdGhlIHByb2dyYW0uIEFuIGV4dGVybmFsIGRlYnVn Z2luZyB0b29sIGNvdWxkIGVhc2lseSAoImVhc2lseSIpIHB0cmFjZSBhIHJ1bm5pbmcgUnVieSBw cm9ncmFtLCBhbmQgZmluZCB0aGUgYWRkcmVzcyBvZiB0aGlzIHNlY3Rpb24gaW4gaXRzIHJ1bm5p bmcgbWVtb3J5LCBldmVuIGlmIHN5bWJvbHMgaGF2ZSBiZWVuIHN0cmlwcGVkLiBPbmNlIGFuIGV4 dGVybmFsIHRvb2wgaGFzIGZvdW5kIHRoaXMgdmFyaWFibGUsIGl0IG5lZWRzIHRvIG1ha2Ugc2Vu c2Ugb2YgaXQuIFJ1Ynkgd291bGQgcHJvdmlkZSBhIG5ldyBoZWFkZXIgZmlsZSBgaW5jbHVkZS9y dWJ5L2RlYnVnX2V4dGVybmFsLmhgIHdoaWNoIGRlc2NyaWJlZCB0aGUgbGF5b3V0IG9mIHRoaXMg c3RydWN0dXJlLgoKVGhlIHNpbXBsZSwgc2xvdyB2ZXJzaW9uIG9mIGFuIGV4dGVybmFsIHByb2Zp bGVyIHVzaW5nIHRoaXMgaW50ZXJmYWNlIHdvdWxkIGJlIGEgbG90IGxpa2UgcmJzcHk7IGl0IHdv dWxkIHVzZSBwdHJhY2UgdG8gcGVyaW9kaWNhbGx5IHN0b3AgdGhlIFJ1YnkgcHJvY2VzcywgYW5k IHRoZW4gdXNlIHRoZSBjb250ZW50cyBvZiBgcmJfZGVidWdfZXh0X3NlY3Rpb25gIHRvIGNvbGxl Y3QgUnVieSBiYWNrdHJhY2VzIGZvciBDUFUvd2FsbC1jbG9jayBwcm9maWxpbmcuIFRoZSBiZW5l Zml0LCBvZiBjb3Vyc2UsIGlzIHRoYXQgaXQncyB1c2luZyBhIGRvY3VtZW50ZWQgaW50ZXJmYWNl IHRoYXQgY2FuIGJlIHZlcnNpb25lZCBhbmQga2VwdCBiYWNrd2FyZHMgY29tcGF0aWJsZSwgcmF0 aGVyIHRoYW4gaGF2aW5nIHRvIGNvbnN0YW50bHkgY2hhc2UgYnJlYWtpbmcgY2hhbmdlcyB0byBp bnRlcm5hbCBSdWJ5IFZNIHN0cnVjdHVyZXMuCgpIb3dldmVyLCB0aGUgYmVuZWZpdCBvZiB0aGlz IGFwcHJvYWNoIGlzIHRoYXQgd2UgY2FuIGRvIGJldHRlciEgVGhlIHBlcmYgc3Vic3lzdGVtIG9u IExpbnV4IGlzIGFibGUgdG8gaW52b2tlIGFuIGVCUEYgcHJvZ3JhbSB0byBhY3R1YWxseSBjb2xs ZWN0IHNhbXBsZXMgKHVzaW5nLCBJIHRoaW5rLCBgUEVSRl9FVkVOVF9JT0NfU0VUX0JQRmAgYnV0 IEknbSBub3QgMTAwJSBzdXJlKSBhbmQgd3JpdGUgdGhlbSB0byBhIHJpbmctYnVmZmVyLiBUaGUg ZUJQRiBwcm9ncmFtIGNhbiBhY3R1YWxseSB1c2UgdGhlIGBkZWJ1Z19leHRlcm5hbC5oYCBoZWFk ZXIgZmlsZSB0byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IFJ1Ynkgc3RhY2sgdHJhY2UocykgaXRz ZWxmLCB3aXRob3V0IG5lZWRpbmcgdG8gc3dpdGNoIGJhY2sgaW50byB0aGUgcHJvZmlsZXIgYWRk cmVzcyBzcGFjZSEgVGhlIHByb2ZpbGVyIHByb2dyYW0gb25seSBuZWVkcyB0byBydW4gcGVyaW9k aWNhbGx5IHRvIGVtcHR5IHRoZSByaW5nLWJ1ZmZlciBhbmQgd3JpdGUgc2FtcGxlcyB0byBkaXNr LgoKIyMgVGhlIHJpZGVyOiBiZXR0ZXIgc3RhY2sgdHJhY2Ugb3V0cHV0CgpTbyBmYXIsIHdlJ3Zl IG1lbnRpb25lZCB0aGF0IHRoZSBwcm9maWxlciBwcm9jZXNzIHdpbGwgZXh0cmFjdCBhIHN0YWNr IHRyYWNlIG91dCBvZiBgcmJfZGVidWdfZXh0X3NlY3Rpb25gLiBMZXQncyB0dXJuIG91ciBhdHRl bnRpb24gdG8gd2hhdCB0aGF0IHN0YWNrIHRyYWNlIHdvdWxkIGFjdHVhbGx5IF9iZV8uCgpUcmFk aXRpb25hbCBwcm9maWxpbmcgdG9vbHMgZm9yIG5vbi1keW5hbWljIGxhbmd1YWdlcyB1c3VhbGx5 IHdvcmsgYnkgY2FwdHVyaW5nIG1lbW9yeSBhZGRyZXNzZXMgZm9yIGZ1bmN0aW9ucywgYW5kIHRo ZW4gZGVmZXJyaW5nIHRoZSB0cmFuc2xhdGlvbiBvZiBhZGRyZXNzZXMgLT4gbmFtZXMgdW50aWwg bGF0ZXIgKHBvc3NpYmx5IGV2ZW4gb24gYSBkaWZmZXJlbnQgbWFjaGluZSkuIFJ1YnksIGhvd2V2 ZXIsIGlzIEkgYmVsaWV2ZSBtdWNoIHRvbyBkeW5hbWljIGZvciBhIHNpbWlsYXIgYXBwcm9hY2gu IE1ldGhvZHMgYW5kIGNsYXNzZXMgY2FuIGJlIGRlZmluZWQgYW5kIHVuZGVmaW5lZCBkeW5hbWlj YWxseSBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgcHJvZ3JhbS4gSW5zdHJ1Y3Rpb24gc2VxdWVu Y2VzIGNhbiBiZSBjcmVhdGVkIGFuZCBHQydkIGFzIGEgcmVzdWx0IG9mIHVzaW5nIHRoaW5ncyBs aWtlIGBldmFsYC4gQSBtZW1vcnkgYWRkcmVzcyBvY2N1cGllZCBieSBvbmUgY2xhc3Mgb3IgaXNl cSBtaWdodCBsYXRlciBiZSBvY2N1cGllZCBieSBhIGRpZmZlcmVudCBvbmUgLSBlc3BlY2lhbGx5 IGJlY2F1c2Ugd2Ugbm93IGhhdmUgR0MgY29tcGFjdGlvbi4KClRodXMsIEkgdGhpbmsgdGhlIG9u bHkgc2Vuc2libGUgdGhpbmcgdG8gZG8gaXMgdG8gc3RvcmUgc3RyaW5ncyBpbiB0aGUgYHJiX2Rl YnVnX2V4dF9zZWN0aW9uYCBzdHJ1Y3R1cmUuIFRoZXNlIHN0cmluZ3MgbmVlZCB0byBiZSB2YWxp ZCwgZXNzZW50aWFsbHksIHdoaWxzdCB0aGUgY2FsbGVkIG1ldGhvZC9pc2VxIGlzIHN0aWxsIG9u IHRoZSBzdGFjayAtIHRoZXJlJ3Mgbm8gcmVxdWlyZW1lbnQgdG8gcmV0YWluIHRoZW0gdW50aWwg bGF0ZXIuIFRoZSBleHRlcm5hbCB0b29sIHdvdWxkIG5lZWQgdG8gY29weSB0aGVzZSBzdHJpbmdz IGludG8gaXRzIG93biBwcm9jZXNzLgoKV2hhdCBzaG91bGQgdGhvc2UgYWN0dWFsbHkgX2NvbnRh aW5fPyBBIHRyYWRpdGlvbmFsIFJ1YnkgYmFja3RyYWNlIGNvbnRhaW5zIGEgZmlsZSwgbGluZSBu dW1iZXIsIGEgbWV0aG9kIG5hbWUgKGlmIGF2YWlsYWJsZSksIGFuZCBzb21lIG90aGVyIGRldGFp bHMgYWJvdXQgdGhlIGlzZXEgaWYgcHJlc2VudCAoZS5nLiB3aGV0aGVyIGl0J3MgYSBibG9jayBv ciBldmFsLCB3aGV0aGVyIGl0J3MgPG1haW4+LCBldGMpLgoKYGBgcnVieQppcmIjMShtYWluKTow MDM6MD4gZGVmIGZvbzsgcmFpc2UgIm9oIG5vIjsgZW5kOwo9PiA6Zm9vCmlyYiMxKG1haW4pOjAw NDowPiBmb28KKGlyYiMxKTozOmluIGBmb28nOiBvaCBubyAoUnVudGltZUVycm9yKQoJZnJvbSAo aXJiIzEpOjQ6aW4gYDxtYWluPicKYGBgCgpJIGRvIG5vdCBiZWxpZXZlIHRoaXMgaXMgdGhlIG1v c3QgdXNlZnVsIHdheSB0byBwcmVzZW50IHRoaXMgaW5mb3JtYXRpb24gZnJvbSBhIHByb2ZpbGlu ZyBwZXJzcGVjdGl2ZSwgaG93ZXZlci4gV2hlbiBkZWFsaW5nIHdpdGggYSBsYXJnZSBtb25vbGl0 aGljIGFwcGxpY2F0aW9uLCBwcm9maWxlcyB3aWxsIGJlIGNvbGxlY3RlZCBwcm9jZXNzLXdpZGUg YW5kIGFnZ3JlZ2F0ZWQgb24gc29tZSBraW5kIG9mIGNlbnRyYWwgZGFzaGJvYXJkOyB0aGVyZSBj b3VsZCBiZSBtYW55IG1ldGhvZHMgY2FsbGVkIHRoZSBzYW1lIHRoaW5nICh0aGluayBgZGVmIGNy ZWF0ZWAgaW4gYSBSYWlscyBjb250cm9sbGVyLCBmb3IgZXhhbXBsZSkuIFRoZSBmaWxlbmFtZSBj YW4gaGVscCBkaXNhbWJpZ3VhdGUgaW4gY2lyY3Vtc3RhbmNlcyBsaWtlIHRoaXMsIGJ1dCBDIGZ1 bmN0aW9ucyBkb24ndCBldmVuIF9oYXZlXyBhIGZpbGVuYW1lLCBzbyBqdXN0IHByaW50IHRoZSBm aWxlbmFtZSBvZiB0aGUgdGhpbmcgdGhhdCBjYWxsZWQgdGhlbToKCmBgYHJ1YnkKaXJiIzEobWFp bik6MDA1OjA+IDEudGltZXMgeyByYWlzZSAib2ggbm8iIH0KKGlyYiMxKTo1OmluIGBibG9jayBp biA8bWFpbj4nOiBvaCBubyAoUnVudGltZUVycm9yKQoJZnJvbSAoaXJiIzEpOjU6aW4gYHRpbWVz JyAjIEkgZGlkIG5vdCBkZWZpbmUgSW50ZWdlciN0aW1lcyBpbiBJUkIhCglmcm9tIChpcmIjMSk6 NTppbiBgPG1haW4+JwpgYGAKCkFsbCBvZiB0aGlzIGNhbiBiZSBnZW5lcmFsbHkgZmlndXJlZCBv dXQgYnkgbG9va2luZyBhdCB0aGUgY29kZSwgYnV0IG9mdGVuIHdoZW4gd2UncmUgbG9va2luZyBh dCBlLmcuIGEgcHJvZmlsaW5nIGRhc2hib2FyZCwgaGF2aW5nIHRvIGtlZXAgbG9va2luZyBiZXR3 ZWVuIHRoZSBmbGFtZSBncmFwaCBhbmQgdGhlIGNvZGUgY2FuIGJlIHJhdGhlciBhbm5veWluZy4K Ckl0IHdvdWxkIGJlIG5pY2UgaWYgaW5zdGVhZCwgb3VyIHByb2ZpbGVzIGNvbnRhaW5lZCB0aGUg bmFtZSBvZiB0aGUgY2xhc3Mgb24gd2hpY2ggYSBtZXRob2QgaXMgZGVmaW5lZDsgc29tZXRoaW5n IGxpa2UgYEZvb0NsYXNzI3RoZV9tZXRob2RgLiBSdWJ5IGhhcyBhIG1ldGhvZCBgcmJfcHJvZmls ZV9mcmFtZV9xdWFsaWZpZWRfbWV0aG9kX25hbWVgIHdoaWNoIGNhbiBnaXZlIHVzZWZ1bCBvdXRw dXQgbGlrZSB0aGlzIGluIG1hbnkgY2FzZXMuIEhvd2V2ZXIsIGluIG1hbnkgY29tbW9uIGNhc2Vz IGxpa2UgZS5nLiBhbm9ueW1vdXMgY2xhc3NlcywgaXQgd2lsbCBwcmVzZW50IHRoZSBuYW1lIG9m IHRoZSBjbGFzcyBhcyBzb21ldGhpbmcgbGlrZSAiIzxDbGFzczoweDAwMDAwMDAwMDBkYjQ4ZTA+ Ii4gVGhpcyBpcyB3b3JzZSB0aGFuIHVzZWxlc3MgZm9yIHByb2ZpbGluZzsgdGhhdCBhZGRyZXNz IHdpbGwgYmUgZGlmZmVyZW50IGFtb25nc3QgZGlmZmVyZW50IHByb2Nlc3NlcyBiZWluZyBwcm9m aWxlZCwgc28gbXVsdGlwbGUgcHJvZmlsZXMgY2FuJ3QgYmUgYWdncmVnYXRlZCB0b2dldGhlci4g SW4gZmFjdCwgdGhhdCBhZGRyZXNzIGlzbid0IGV2ZW4gZ3VhcmFudGVlZCB0byBiZSBjb25zdGFu dCB3aXRoaW4gdGhlIHNhbWUgcHJvY2VzcyBhbnltb3JlLCBiZWNhdXNlIG9mIGNvbXBhY3Rpb24u CgpJIHdvdWxkIHByb3Bvc2UgdGhhdCB3ZSBoYXZlIGEgbmV3IHdheSBvZiBuYW1pbmcgbWV0aG9k cyB3aGljaCBwcm9kdWNlcyB1c2VmdWwgc3RyaW5ncyBpbiBhbGwgY2FzZXMsIHdpdGhvdXQgYW55 IGFkZHJlc3NlcyBpbiB0aGVtLiBUaGUgcnVsZXMgSSBoYXZlIGNvbWUgdXAgd2l0aCBzbyBmYXIg YXJlOgoKKiBgIiM8cmVmaW5lbWVudCBGb28gb2YgQmFyPiJgIGZvciBhIHJlZmluZW1lbnQgbW9k dWxlIGFkZGluZyBtZXRob2RzIHRvCiAgQmFyCiogYCIjPGluc3RhbmNlIG9mIEZvbz4iYCBmb3Ig YSBwYXJ0aWN1bGFyIGluc3RhbmNlIG9mIEZvbwoqIGAiIzxzaW5nbGV0b24gb2YgRm9vPiJgIGZv ciBGb28ncyBzaW5nbGV0b24gY2xhc3MuCiogYCIjPGFub255bW91cyBzdWJjbGFzcyBvZiBGb28+ ImAgZm9yIGFuIGFub255bW91cyBzdWJjbGFzcwoqIFRoZSB1c3VhbCBjbGFzc3BhdGggc3RyaW5n IG90aGVyd2lzZQoKTm90ZSB0aGF0IG5lc3RpbmcgaXMgT0sgdG9vIC0gc28gYSBtZXRob2QgZGVm aW5lZCBvbiB0aGUgc2luZ2xldG9uIGNsYXNzIG9mIGEgcGFydGljdWxhciBGb28gb2JqZWN0IHdv dWxkIGJlICIjPHNpbmdsZXRvbiBvZiAjPGluc3RhbmNlIG9mIEZvbz4+I3RoZV9tZXRob2QiLgoK U28sIG15IHByb3Bvc2FsIGlzIHRoYXQgdGhpcyBpcyB0aGUgZm9ybWF0IG9mIHRoZSBtZXRob2Qg bmFtZSB0aGF0IGFwcGVhcnMgaW4gdGhlIGByYl9kZWJ1Z19leHRfc2VjdGlvbmAgc3RydWN0dXJl LgoKIyMgV2hlcmUgaGF2ZSBJIGdvdCB0byBzbyBmYXI/CgpPSywgc28gSSBoYXZlIGEgZHJhZnQg UFIgdXAgd2hpY2ggc2hvdWxkIGhvcGVmdWxseSBoZWxwIG1ha2Ugc29tZSBvZiB0aGlzIGNsZWFy ZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2LiBJdCBpcyBvZiBjb3Vy c2UgaW4gbm8gd2F5IGV2ZW4gY2xvc2UgdG8gbWVyZ2UgcmVhZHksIGJ1dCBJJ20gaG9waW5nIGl0 IGhlbHBzIGlsbHVzdHJhdGUgc29tZSBvZiBteSBpZGVhcyBoZXJlOgoKKiBbVGhlIGRlYnVnX2V4 dGVybmFsLmggZmlsZV0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvZmls ZXMjZGlmZi02NjFmOTI2OTAwOWVjODI3MTg1ZWFmYTVlZTA1YmQ3MjUxYmJlMGE1NWRlYzM2MWM5 YzVjMjViYjJhNDNhMDk4KSB0aGF0IGRlZmluZXMgdGhlIGV4dGVybmFsbHktdmlzaWJsZSBzdHJ1 Y3R1cmVzCiogV2hlcmUgdGhyZWFkcyBhcmUgW2FkZGVkXShodHRwczovL2dpdGh1Yi5jb20vcnVi eS9ydWJ5L3B1bGwvNjcwNi9maWxlcyNkaWZmLWFhMmFkZGI5Mjk3NDlhNGEwMzMwYjkzY2VlY2Vj NWJjNTQ4NTc1MWEzNjI1MjRmNWNiMzdiZjIyZGZmMTkzNmVSNjUpIGFuZCBbcmVtb3ZlZF0oaHR0 cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi1hYTJhZGRiOTI5 NzQ5YTRhMDMzMGI5M2NlZWNlYzViYzU0ODU3NTFhMzYyNTI0ZjVjYjM3YmYyMmRmZjE5MzZlUjEx MCkgZnJvbSB0aGUgYHJiX2RlYnVnX2V4dF9zZWN0aW9uYCBzdHJ1Y3R1cmUKKiBXaGVyZSBmcmFt ZXMgYXJlIFtwdXNoZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2L2Zp bGVzI2RpZmYtZjhjMTc0MzQ3ZTZlYTg4ODliNTAzNjA2NGExZmY0ZmU1ZTdjNTNhODIxYmVmYTli ZGM1Y2NiZjE3ODAwYTY0OVI0MDcpIGFuZCBbcG9wcGVkXShodHRwczovL2dpdGh1Yi5jb20vcnVi eS9ydWJ5L3B1bGwvNjcwNi9maWxlcyNkaWZmLWY4YzE3NDM0N2U2ZWE4ODg5YjUwMzYwNjRhMWZm NGZlNWU3YzUzYTgyMWJlZmE5YmRjNWNjYmYxNzgwMGE2NDlSNDM3KSBmcm9tIHRoZSBgcmJfZGVi dWdfZXh0X3NlY3Rpb25gIHN0cnVjdHVyZQoqIFRoZSBbdGVzdHNdKGh0dHBzOi8vZ2l0aHViLmNv bS9ydWJ5L3J1YnkvcHVsbC82NzA2L2ZpbGVzI2RpZmYtODlhNjdhNGQ1YjM0OGFjNmY5Y2FiZTU2 ZDI4NDc1NDViZTY3ODA5YjAxZDg1NmIzNTQxZTk2NDcxMDE0YmQ5OVI1NzMpIGlsbHVzdHJhdGUg d2hhdCB0aGUgbmV3IHF1YWxpZmllZCBtZXRob2QgbmFtZSBvdXRwdXQgbG9va3MgbGlrZS4KCiMj IFdoYXQgZG8gSSB3YW50IGZlZWRiYWNrIG9uPwoKVGhpcyB3aG9sZSBwcm9qZWN0IGlzIG9idmlv dXNseSBzdGlsbCBhYm91dCAyMCUgY29va2VkLCBzbywgYW55dGhpbmcgYW5kIGV2ZXJ5dGhpbmcu IEJ1dCBtb3JlIHNwZWNpZmljYWxseSwgdGhlc2UgYXJlIHRoZSBxdWVzdGlvbnMgSSB3b3VsZCBy ZWFsbHkgbGlrZSBzb21lIGhlbHAgd2l0aCA6KQoKKiBEb2VzIHRoaXMgX2FwcHJvYWNoXyBzZWVt IHNlbnNpYmxlPyBJcyB0aGUgYmFzaWMgX2lkZWFfIG9mICJleHBvc2Ugc29tZSBkb2N1bWVudGVk IGRhdGEgc3RydWN0dXJlIHRvIG90aGVyIHByb2Nlc3NlcyB0aGF0IGFyZSBhYmxlIHRvIHJlYWQg bXkgbWVtb3J5IiBhIHNvdW5kIG9uZT8KKiBXaGF0IHNob3VsZCBJIGRvIHdpdGggdGhlIHF1YWxp ZmllZC1tZXRob2QtbmFtZS13aXRob3V0LWFkZHJlc3NlcyB3b3JrPyBBdCB0aGUgbW9tZW50IEkg ZXhwb3NlZCB0aGF0IGxvZ2ljIGJlaGluZCBuZXcgbWV0aG9kcyBgTWV0aG9kI2RlYnVnX25hbWVg IGFuZCBgVGhyZWFkOjpCYWNrdHJhY2U6OkV4dGVybmFsI2RlYnVnX2xhYmVsYC4gSXMgdGhlcmUg c29tZSBhcHBldGl0ZSB0byBvcGVuIGEgcHJvcG9zYWwgdG8gaGF2ZSB0aGF0IGluIENSdWJ5Pwoq IFNob3VsZCB3ZSBldmVuIGNvbnNpZGVyIF9jaGFuZ2luZyB0aGUgZGVmYXVsdCBvdXRwdXRfIG9m IHRocmVhZCBiYWNrdHJhY2VzIHRvIHByaW50IHRoZXNlIHF1YWxpZmllZCBuYW1lcz8KKiBUaGVy ZSBhcmUgc29tZSAnaW5mcmFzdHJ1Y3R1cmFsJyBjb21taXRzIG9uIHRoYXQgYnJhbmNoIG9mIG1p bmUgLSBvbmUgdG8gW2ZpbmQgc29tZSBleHRyYSBzcGFjZSBpbiBgcmJfbWV0aG9kX2VudHJ5X3Rg XShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9jb21taXRzL2Y0NDZmNTI4 MWY1OGU4NzYxZDE4MjZiNmIxYzRhOThmYWNkMDQ3MmUpIGFuZCBvbmUgdG8gW2FkZCBzb21lIG5l dyBhdG9taWMgaGVscGVyc10oYGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2 L2NvbW1pdHMvMTdkNGIxNTZjZmU4ZjBjMzI5MTA5MDg4NTNjMThjN2ZjODAxMjFlY2ApLiBJcyB0 aGlzIHRoZSBzb3J0IG9mIHRoaW5nIHRoYXQgd291bGQgbWFrZSBzZW5zZSB0byB0cnkgYW5kIGxh bmQgbm93IG9yIG9ubHkgd2hlbiB0aGlzIGlzIGFsbCBjbG9zZXIgdG8gZG9uZT8KKiBJIGhhdmVu J3QgeWV0IGFjdHVhbGx5IGltcGxlbWVudGVkIGFueXRoaW5nIHRvIHRyeSBhbmQgX3JlYWRfIHRo aXMgZXh0ZXJuYWwgZGVidWcgc2VjdGlvbi4gU2hvdWxkIGl0IGJlCiAgMSkgc29tZSBleHRlcm5h bCByZXBvLCBpbiBhIG5vbi1SdWJ5IGxhbmd1YWdlIGUuZy4gUnVzdCBvciBzb21ldGhpbmc/CiAg MikgQSBSdWJ5IGdlbSwgd2l0aCBhIEMgZXh0ZW5zaW9uIHRvIGhhbmRsZSBhbGwgdGhlIHB0cmFj ZS9icGYneSBiaXRzPwogIDMpIFRoZSBnZW0sIGJ1dCBpbnNpZGUgdGhlIENSdWJ5IHNvdXJjZSB0 cmVlPwogIEknbSBsZWFuaW5nIHRvd2FyZHMgMiwgYnV0IG5vdCByZWFsbHkgc3VyZS4KClRoYW5r IHlvdSwgdG8gYW55Ym9keSB3aG8gYWN0dWFsbHkgZ290IHRvIHRoZSBib3R0b20gb2YgdGhpcyB3 YWxsIG9mIHRleHQsIGFuZCB0aGFua3MgZG91Ymx5IHRvIGFueWJvZHkgd2hvIHByb3ZpZGVzIGZl ZWRiYWNrIQoKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvCg==