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_HI, 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 419FF1F910 for ; Tue, 15 Nov 2022 11:38:32 +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="WhsghWm8"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id B82921210FF; Tue, 15 Nov 2022 20:38:26 +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 A5F26120AF3 for ; Tue, 15 Nov 2022 20:38:23 +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=xEo8XTKH1wHtuvOvu/ay25JCTLRsU03Go+7jtrdlkCA=; b=WhsghWm8A8c8PI6gx24i8d1AXq00zUUazztnaTCzj2VE8uFCgFJa/U9KT473wC9YMw91 +nUXzpNOMSAoUcMlNZlReEMXRxBq5gUKQk0kHOXQjlZhSDEuH5h2e+N3ELGKyGMux3CS5f ZYK+P6/P1En4MDoG94ZcU+o6jMEAD/5sagtQlm8405uwxvB+n30vWrwaKUNWhJknTCx+a4 4WtpMyA51afbrSnm1UoyjkLeitc9a4nEC8Fa5EVAD2N87yVsn1vNulrllPHu4H7tXFNH7N rTushA3Go4tZjJQorNn8W8SK4E6/Czahdpnjrtzm6+WAuKelvJpxiIPnRM7EfQ8Q== Received: by filterdrecv-857b658bc-lsckc with SMTP id filterdrecv-857b658bc-lsckc-1-63737A27-2C 2022-11-15 11:38:15.951593132 +0000 UTC m=+402846.159894726 Received: from herokuapp.com (unknown) by geopod-ismtpd-5-3 (SG) with ESMTP id 5ipRm09VQnai-UtVB3gsKg for ; Tue, 15 Nov 2022 11:38:15.852 +0000 (UTC) Date: Tue, 15 Nov 2022 11:38:15 +0000 (UTC) From: "Eregon (Benoit Daloze)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 19119 X-Redmine-Issue-Author: kjtsanaktsidis X-Redmine-Sender: Eregon 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: 87213 X-SG-EID: =?us-ascii?Q?DvL3W2Xo+Vk=2FeUn3F50L=2FNc8u9NqZCnbE0mXZHiyye4R1YZg=2FtAFc0SAFzpcS=2F?= =?us-ascii?Q?Zcr7BqPN=2FYCcMZBMITNeIci9STxYay0JAJWPbek?= =?us-ascii?Q?rFR+qWozq=2FRiRbHqqAWt3yCzxwfWgG3ktcMxqzY?= =?us-ascii?Q?=2FnyL2RR94gzputKZa=2FkrM98Spw9fcXJuaAhZmJz?= =?us-ascii?Q?nRYg+Etwr6CnNVjIRz5JCw8=2FshIBaVsi2Ey1FMT?= =?us-ascii?Q?0sM5fu8ufa+zEckjD4rr3n+ycteL9w9yCrP1IOt?= =?us-ascii?Q?yl=2F9=2F+wSq1aw330+963Ew=3D=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110761 Subject: [ruby-core:110761] [Ruby master Feature#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" SXNzdWUgIzE5MTE5IGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4K CgpranRzYW5ha3RzaWRpcyAoS0ogVHNhbmFrdHNpZGlzKSB3cm90ZToKPiBUaGlzIHZhcmlhYmxl IHdvdWxkIGJlIGNvbnN0YW50bHkga2VwdCBwb3B1bGF0ZWQgd2l0aCB1cC10by1kYXRlIGluZm9y bWF0aW9uIGFib3V0IGFsbCB0aGUgY2FsbC1zdGFja3Mgb2YgYWxsIHRocmVhZHMvZmliZXJzIGlu IHRoZSBwcm9ncmFtLgoKVGhpcyBzb3VuZHMgbGlrZSBhIGh1Z2Ugb3ZlcmhlYWQgdG8gbWUuCkFu ZCBhbHNvIHRoaXMgYXBwcm9hY2ggaXMgY29tcGxldGVseSB1bnJlYWxpc3RpYyBmb3IgSlJ1Ynkv VHJ1ZmZsZVJ1YnkvZXRjLCB3aGVyZSBrZWVwaW5nIHRoaXMgaW5mbyBpbiBuYXRpdmUgbWVtb3J5 IGFsbCB0aGUgdGltZSB3b3VsZCBiZSBldmVuIG1vcmUgb3ZlcmhlYWQuCkFsc28gaXQncyByZWFs bHkgaGVhdnkgYmVjYXVzZSB0aGlzIGlzIG92ZXJoZWFkIG9uIGV2ZXJ5IGNhbGwsIG5vdCBldmVu IG9ubHkgZHVyaW5nIHRoZSBzYW1wbGUgZXZlcnkgTiBtaWxsaXNlY29uZHMuClRoYXQncyBhbHNv IGdvaW5nIHRvIGNhdXNlIGEgbG90IG9mIGJpYXMgaW4gdGhlIHJlc3VsdHMsIGJlY2F1c2Ugc21h bGwgbWV0aG9kcyAoZS5nLiBgSW50ZWdlciMrYCkgd2lsbCBzcGVuZCBhIHNpZ25pZmljYW50IGFt b3VudCBvZiB0aW1lIGp1c3Qga2VlcGluZyB0aGlzIGluZm9ybWF0aW9uLgoKVGhlIGFwcHJvYWNo IHVzaW5nIHBlcmYgYXMgaW4gQ1B5dGhvbiBzZWVtcyBtdWNoIHNpbXBsZXIsIGJ1dCBpcyBhIGxp dHRsZSBiaXQgaGFja3kgYW5kIG5vdCBwb3J0YWJsZSAob25seSB3b3JrcyBvbiBMaW51eCkuCgpG b3IgVHJ1ZmZsZVJ1YnkgSSBoYXZlIHdyaXR0ZW4gc29tZSB0aG91Z2h0cyBvbiBob3cgdG8gcHJv ZmlsZSBlZmZpY2llbnRseSBhbmQgcHJvdmlkZSBhIFJ1YnkgQVBJIGZvciBpdCBpbiBodHRwczov L2dpdGh1Yi5jb20vb3JhY2xlL3RydWZmbGVydWJ5L2lzc3Vlcy8yMDQ0I2lzc3VlY29tbWVudC02 NTQ4NDgzMjQuCkkgdGhpbmsgdGhlIG1vc3QgaW50ZXJlc3RpbmcgaWRlYSB0aGVyZSBpczoKPiBP ciB3ZSBjb3VsZCBldmVuIGxldCBDUFVTYW1wbGVyIGNhcHR1cmUgZXZlcnkgbWlsbGlzZWNvbmQg Zm9yIHNvbWUgZHVyYXRpb24gYW5kIHRoZW4gZ2V0IGFsbCB0aGUgZGF0YSBvdXQgYXQgb25jZSwg dGhhdCB3b3VsZCBiZSBhIGxvdCBtb3JlIGVmZmljaWVudCBhbmQgYXZvaWQgYWZmZWN0aW5nIChh bmQgcG90ZW50aWFsbHkgYmlhcykgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGV4dHJhIGxvZ2lj IHRvIGNhcHR1cmUgYXQgYSBmcmVxdWVudCBpbnRlcnZhbC4KClNvIGJhc2ljYWxseSB0aGVyZSB3 b3VsZCBiZSBzb21lIGNvcmUgQVBJIHRvIHN0YXJ0IHByb2ZpbGluZyAoYW5kIGl0IHdvdWxkIHNh bXBsZSBldmVyeSBOIG1pbGxpc2Vjb25kcyksIHN0b3AgcHJvZmlsaW5nLCBhbmQgcmV0cmlldmUg dGhlIHJlc3VsdHMuClRoYXQncyBhZ25vc3RpYyBvZiBSdWJ5IFZNIGRldGFpbHMsIGFuZCBjYW4g dXNlIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gcHJvZmlsZSBpbi1wcm9jZXNzLgoKVG8gaW50 ZXJhY3Qgd2l0aCB0aGF0IGZyb20gYW5vdGhlciBwcm9jZXNzIHdlIGNvdWxkIGRvIG11bHRpcGxl IHRoaW5ncywgb25lIHdvdWxkIGJlIHRvIHVzZSBhIHNpZ25hbCB0byBzdGFydCBwcm9maWxpbmcs IGFuZCB0aGVuIHVzZSB0aGUgc2lnbmFsIGFnYWluIHRvIHN0b3AgcHJvZmlsaW5nIGFuZCBzdG9y ZSB0aGUgcmVzdWx0IGluIHNvbWUgd2VsbC1rbm93biBuYXRpdmUgZ2xvYmFsIHZhcmlhYmxlIGlu IGEgd2VsbC1rbm93biBmb3JtYXQuIFdlJ2QgbmVlZCBhIHdheSB0byB3YWl0IHVudGlsIHRoYXQg cmVzdWx0IGlzIGZ1bGx5IHN0b3JlZCBhcyBzaWduYWxzIGRvbid0IHdhaXQgb2YgY291cnNlLgpP ciBlYWNoIFJ1YnkgcHJvY2VzcyBjb3VsZCBzZXQgdXAgc29tZSBmaWxlIG9yIHNvY2tldCBvciBz byB0byBpbnRlcmFjdCB3aXRoIGl0IGZyb20gdGhlIG91dHNpZGUsIGxpa2UgdGhlIEpWTSBkb2Vz IHdpdGggSk1YL2p2bXN0YXQvZXRjLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpGZWF0dXJlICMxOTExOTogQWRkIGFuIGludGVyZmFjZSBmb3Igb3V0LW9mLXByb2Nl c3MgcHJvZmlsaW5nIHRvb2xzIHRvIGFjY2VzcyBSdWJ5IGluZm9ybWF0aW9uCmh0dHBzOi8vYnVn cy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xOTExOSNjaGFuZ2UtMTAwMTA1CgoqIEF1dGhvcjoga2p0 c2FuYWt0c2lkaXMgKEtKIFRzYW5ha3RzaWRpcykKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTog Tm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldhcm5pbmc6 IHRoaXMgaXMgYSB2ZXJ5IGxvbmcgcHJvcG9zYWwgOiggSSBkb24ndCByZWFsbHkga25vdyB3aGF0 IHRoZSBtb3N0IHByb2R1Y3RpdmUgd2F5IHRvIGVuZ2FnZSB3aXRoIHRoZSBSdWJ5IGNvbW11bml0 eSBhYm91dCB0aGlzIGlzIC0gaWYgdGhlcmUncyBhIGJldHRlciBwbGFjZSB0byB0YWtlIHRoaXMs IHBsZWFzZSBsZXQgbWUga25vdyEKCkkgYWxzbyB3YW50IHRvIGFja25vd2xlZGdlIEBpdm9hbmpv IGZvciBjb250cmlidXRpbmcgdG8gdGhpcyBwcm9wb3NhbCAtIEkgYm91bmNlZCBtYW55IGlkZWFz IGFib3V0IHByb2ZpbGluZyBvZmYgaGltIGFuZCB0aGUgaW1wcm92ZWQtYmFja3RyYWNlIHN0dWZm IGlzIGFsbCBiYXNlZCBvbiBoaXMgW2JhY2t0cmFjaWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9pdm9h bmpvL2JhY2t0cmFjaWUpIGdlbS4KCiMjIE1vdGl2YXRpb24KCldoZW4gZGVhbGluZyB3aXRoIGxh cmdlIGFuZCBvbGQgUnVieSBhcHBzLCB0aGVyZSBpcyBvZnRlbiBib3RoIGEgbmVlZCB0byBpbXBy b3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzb21lIG9wZXJhdGlvbnMsIGFzIHdlbGwgYXMgYSBsYWNr IG9mIHVuZGVyc3RhbmRpbmcgYXMgdG8gaG93LCBwcmVjaXNlbHksIHRoZSBjb2RlIHdvcmtzLCBh bmQgd2hhdCBhc3BlY3Qgb2YgaXQgaXMgYWN0dWFsbHkgc2xvdy4gRnVydGhlcm1vcmUsIHRoZSBw ZXJmb3JtYW5jZSBpc3N1ZXMgaW4gcXVlc3Rpb24gb2Z0ZW4gb25seSBhcHBlYXIgaW4gYSBsaXZl LCBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB3aGVyZSB0aGVyZSBpcyBzb21lIHRyYWZmaWMgcGF0 dGVybiBvciB1c2VyIGRhdGEgY2F1c2luZyB0aGUgcHJvYmxlbS4gSW4gc2l0dWF0aW9ucyBsaWtl IHRoaXMsIHByb2ZpbGluZyB0b29scyBjYW4gcHJvdmUgaW52YWx1YWJsZSBpbiBoZWxwaW5nIHRv IHVuZGVyc3RhbmQgYXBwbGljYXRpb24gcGVyZm9ybWFuY2UgaW4tc2l0dSBpbiBwcm9kdWN0aW9u LgoKVGhlIHRoaW5ncyB3aGljaCBhbiBlbmdpbmVlciBtaWdodCB1c2UgYSBwcm9maWxlciB0byBt ZWFzdXJlIGluY2x1ZGU6CiAgKiBXYWxsIGNsb2NrIHRpbWU7IGhvdyBsb25nIGRvIHBhcnRpY3Vs YXIgbWV0aG9kIGNhbGxzIHRha2U/CiAgKiBDUFUgdGltZTsgb2YgdGhlIHRpbWUgYSBtZXRob2Qg dGFrZXMsIGhvdyBsb25nIGlzIHNwZW50IGFjdHVhbGx5IF9ydW5uaW5nXyBvbiB0aGUgQ1BVLCBh bmQgaG93IG11Y2ggaXMgc3BlbnQgYmxvY2tlZCB3YWl0aW5nIGZvciBlLmcuIGEgbmV0d29yayBy ZXNwb25zZT8KICAqIEdWTCBjb250ZW50aW9uOyBpcyBhbiBhcHBsaWNhdGlvbiB1c2luZyBsb3Rz IG9mIHRocmVhZHMganVzdCB3YWl0aW5nIGZvciB0aGUgR1ZMIHRvIGJlY29tZSBhdmFpbGFibGU/ CiAgKiBHQyB0aW1lOyBpcyBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZSBfYWN0dWFsbHlfIHNs b3csIG9yIGlzIGl0cyBzbG93bmVzcyBqdXN0IGEgcmVzdWx0IG9mIF9vdGhlcl8gY29kZSBjYXVz aW5nIHRoZSBHQyB0byBiZSBpbnZva2VkPwogICogQWxsb2NhdGlvbnM7IGhvdyBtYW55IG9iamVj dHMgaXMgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgYWxsb2NhdGluZywgYW5kIHdoYXQgaW1w YWN0IGlzIHRoaXMgaGF2aW5nIG9uIEdDPwogICogSGVhcDsgb2YgdGhlIG9iamVjdHMgYSBwYXJ0 aWN1bGFyIHBpZWNlIG9mIGNvZGUgYWxsb2NhdGVkLCBob3cgbWFueSBvZiB0aGVtIGFyZSBzdGls bCBsaXZlPyBJcyB0aGVyZSBzb21lIGtpbmQgb2YgbGVhaz8KCkdlbmVyYWxseSwgaW4gb3JkZXIg dG8gY29sbGVjdCB0aGlzIGluZm9ybWF0aW9uIGZyb20gcHJvZHVjdGlvbiBpbiBhIG1pbmltYWxs eS1pbXBhY3RmdWwgd2F5LCBhIHNhbXBsaW5nIGFwcHJvYWNoIGlzIHVzZWQuIEEgcHJvZmlsaW5n IHRvb2wgcGVyaW9kaWNhbGx5IHRha2VzIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgY2FsbC1z dGFjayBvZiBhIFJ1YnkgcHJvZ3JhbTsgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgbWVhc3Vy ZWQsIHRoaXMgcGVyaW9kaWNpdHkgbWlnaHQgYmUgZS5nLiBzaW1wbHkgZXZlcnkgTiBtcyAoZm9y IHdhbGwtY2xvY2sgcHJvZmlsaW5nKSwgZXZlcnkgTiBhbGxvY2F0aW9ucyAoZm9yIGFsbG9jYXRp b24gcHJvZmlsaW5nKSwgZXRjLiBUaGVuLCB0aGUgZGF0YSB3aWxsIGdlbmVyYWxseSBiZSBjb21i aW5lZCBhY3Jvc3MgbWFueSBpbnN0YW5jZXMgb2YgYSBwcm9ncmFtIHRvIGdldCBhbiBhZ2dyZWdh dGUgdmlldyAodGhyb3VnaCBlLmcuIGEgZmxhbWUgZ3JhcGgpLgoKSW4gYWRkaXRpb24gdG8gdGhp cyBmbGVldC13aWRlIGFnZ3JlZ2F0aW9uLCBpdCdzIHNvbWV0aW1lcyB1c2VmdWwgdG8gcHJvZmls ZSBhIHBhcnRpY3VsYXIgcHJvY2VzcyB3aGljaCBoYXMgc3VkZGVubHkgc3RhcnRlZCBkaXNwbGF5 aW5nIHNvbWUgcGF0aG9sb2d5IG9mIGludGVyZXN0LiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBh IHdlYnNlcnZlciBwcm9jZXNzIHRoYXQgaGFkIHN1ZGRlbmx5IGJlY29tZSBzdHVjaywgeW91IG1p Z2h0IHdhbnQgdG8gYXR0YWNoIGEgcHJvZmlsZXIgdG8gZmluZCBvdXQgX3doeV8uIEluIHNjZW5h cmlvcyBsaWtlIHRoaXMsIGl0J3Mgb2Z0ZW4gaW1wb3NzaWJsZSB0byBtYWtlIHNvbWUgYWRqdXN0 bWVudCB0byB0aGUgcHJvZ3JhbSB0byBlbmFibGUgcHJvZmlsaW5nIGFuZCByZXN0YXJ0IGl0OyB0 aGUgYWN0IG9mIHJlc3RhcnRpbmcgaXQgd291bGQgbWFrZSB0aGUgcHJvYmxlbSBnbyBhd2F5IChm b3Igbm93ISkuCgojIyBDdXJyZW50IHN0YXRlIG9mIHRoZSBhcnQKClRoaXMgcmVwcmVzZW50cyBt eSBiZXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdheXMgaW4gd2hpY2ggbW9zdCBSdWJ5IHByb2Zp bGluZyB0b29scyB3b3JrIHRvZGF5LiBJJ20gc3VyZSBJJ3ZlIG1pc3NlZCBzb21lIGltcG9ydGFu dCBkZXRhaWxzIGFuZCBvdGhlciB0b29scywgZm9yIHdoaWNoIEknbSBkZWVwbHkgc29ycnkuCgoj IyMgU2lnbmFsLWJhc2VkIHByb2ZpbGluZwoKU2lnbmFsLWJhc2VkIHByb2ZpbGVycyBjYW4gYmUg dXNlZCB0byBtZWFzdXJlIENQVSBhbmQgd2FsbCBjbG9jayB0aW1lLiBJbiB0aGlzIHNjaGVtZSwg YSBwcm9maWxlciAoaW4gdGhlIGZvcm0gb2YgYW4gZXh0ZW5zaW9uIGdlbSkgc2V0cyB1cCBhIHNp Z25hbCBoYW5kbGVyIGZvciBTSUdQUk9GIGluIEMsIGFuZCB0aGVuIGFycmFuZ2VzIGZvciBTSUdQ Uk9GIHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgcHJvY2VzcyByZXBlYXRlZGx5IGluIHNvbWUga2lu ZCBvZiBsb29wLiBUaGUgc2lnbmFsIGhhbmRsZXIgdGhlbiBjYXB0dXJlcyBhIHN0YWNrIHRyYWNl IHVzaW5nIHRoZSBgcmJfcHJvZmlsZV9mcmFtZXNgIEFQSSBmcm9tIHRoZSBDIGV4dGVuc2lvbiBh bmQgcmVjb3JkcyB0aGlzIGFzIGEgc2luZ2xlIHNhbXBsZS4KClRoaXMgaXMgdGhlIG1lY2hhbmlz bSB1c2VkIGZvciBDUFUvd2FsbCBjbG9jayBwcm9maWxpbmcgaW4gW1N0YWNrcHJvZl0oaHR0cHM6 Ly9naXRodWIuY29tL3RtbTEvc3RhY2twcm9mKSwgdGhlIFtEYXRhZG9nIGNvbnRpbnVvdXMgcHJv ZmlsZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RkLXRyYWNlLXJiKSwgYW5kIEknbSBz dXJlIG90aGVycy4gSXQncyBhbHNvIGEgd2VsbC1rbm93biBtZWNoYW5pc20gdXNlZCBpbiBvdGhl ciBub24tUnVieSB0b29scyBsaWtlIFtncGVyZnRvb2xzXShodHRwczovL2dwZXJmdG9vbHMuZ2l0 aHViLmlvL2dwZXJmdG9vbHMvY3B1cHJvZmlsZS5odG1sKQoKT25lIGJlbmVmaXQgb2YgdGhpcyBt ZWNoYW5pc20gaXMgdGhhdCBpdCBzaG91bGQgYmUgcXVpdGUgZmFzdC4gVHJpZ2dlcmluZyB0aGUg c2lnbmFsIGNhdXNlcyBhIGNvbnRleHQgc3dpdGNoIGludG8gdGhlIGtlcm5lbCAmIGJhY2sgaW50 byB0aGUgaGFuZGxlciwgYnV0IGV4ZWN1dGlvbiBzdGF5cyBpbnNpZGUgdGhlIGN1cnJlbnQgcHJv Z3JhbTsgdGhlcmUncyBubyBuZWVkIGZvciB0aGUgZXhlY3V0aW9uIHRvIHN3aXRjaCB0byBhbm90 aGVyIHByb2dyYW0gKGFuZCBjb25zZXF1ZW50bHkgY2hhbmdlIGFkZHJlc3Mgc3BhY2UpLgoKVGhl IGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBpdCByZXF1aXJlcyBzb21lIGxldmVs IG9mIGNvb3BlcmF0aW9uIGZyb20gdGhlIHByb2dyYW0gYmVpbmcgcHJvZmlsZWQuIFNvbWV0aGlu ZyBpbnNpZGUgdGhlIHByb2Nlc3MgbXVzdCBpbnN0YWxsIHRoZSBTSUdQUk9GIGhhbmRsZXI7IGlm IHlvdSBoYXZlIHNvbWUgZXhpc3RpbmcsIHJ1bm5pbmcgUnVieSBwcm9jZXNzIGZvciB3aGljaCBh IHByb2ZpbGVyIGlzIG5vdCBsb2FkZWQsIHlvdSBjYW5ub3QgYmVnaW4gcHJvZmlsaW5nIGl0IHdp dGhvdXQgcmVzdGFydGluZyBpdCAoYW5kIHVzaW5nIHNvbWUgbWVjaGFuaXNtIGxpa2UgYSBgLXJt eV9wcm9maWxlci9hdXRvbG9hZGAgZmxhZykuCgpBbm90aGVyIHByb2JsZW0gd2l0aCB0aGlzIGFw cHJvYWNoIGlzIHRoZSBlZmZlY3QgdGhlc2UgU0lHUFJPRiBzaWduYWxzIGhhdmUgb24gdGhlIGFw cGxpY2F0aW9uLiBOb3JtYWxseSwgdGhlIHByb2ZpbGVyIGluc3RhbGxzIHRoZSBzaWduYWwgaGFu ZGxlciB3aXRoIHRoZSBTQV9SRVNUQVJUIGZsYWc7IHRoaXMgX3Nob3VsZF8gbWVhbiB0aGF0IGFu eSBpbi1wcm9ncmVzcyBzeXN0ZW0gY2FsbCB0aGUgYXBwbGljYXRpb24gaXMgZG9pbmcgd2hlbiB0 aGUgU0lHUFJPRiBhcnJpdmVzIGdldHMgdHJhbnNwYXJlbnRseSByZXN0YXJ0ZWQgd2hlbiB0aGUg aGFuZGxlciBmaW5pc2hlcyBjb2xsZWN0aW5nIGl0cyBzYW1wbGUuIEhvd2V2ZXIsIG9uIExpbnV4 IGF0IGxlYXN0LCB0aGVyZSBhcmUgc29tZSBzeXN0ZW0gY2FsbHMgd2hpY2ggYXJlIF9OT1RfIHJl c3RhcnRlZCB3aGVuIFNBX1JFU1RBUlQgaGFwcGVucyAtIG5vdGFibHkgc29tZSBuZXR3b3JrIHJl bGF0ZWQgb25lcyBsaWtlIHBvbGwsIGVwb2xsLCBhbmQgc2VuZC9yZWN2IHdoZW4gYSBzb2NrZXQg dGltZW91dCBpcyBzZXQuIFRoZXNlIHN5c3RlbSBjYWxscyB3aWxsIGluc3RlYWQgZmFpbCB3aXRo IEVJTlRSOyB3ZWxsIGJlaGF2ZWQgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcyBfU0hPVUxEXyByZXRy eSB0aGlzLgoKU2FkbHksIGhvd2V2ZXIsIHRoZSByZXBlYXRlZCBkZWxpdmVyeSBvZiBTSUdQUk9G IHRlbnMgb3IgaHVuZHJlZHMgb2YgdGltZXMgcGVyIHNlY29uZCBkb2VzIGhhdmUgYSB3YXkgb2Yg c2hha2luZyBvdXQgY29ybmVyLWNhc2VzIGluIGxpYnJhcmllcyB3aGVyZSB0aGlzIGlzbid0IGJl aW5nIGRvbmUgcHJvcGVybHkuIEZvciBleGFtcGxlLCBJIGhhdmUgcGVyc29uYWxseSBkaXNjb3Zl cmVkIHRoZSBoYXJkIHdheSB0aGF0IGxpYm15c3FsY2xpZW50IHZlcnNpb24gNS43IGRvZXMgdGhp cyB3cm9uZyBpbiBvbmUgcGxhY2UsIHNvIGVuYWJsaW5nIGEgU0lHUFJPRi1iYXNlZCBwcm9maWxl ciBjYW4gY2F1c2UgbGlibXlzcWxjbGllbnQgdG8gZXJyb25lb3VzbHkgdGhpbmsgdGhhdCBkYXRh YmFzZSBjb25uZWN0aW9ucyB3ZXJlIGNsb3NlZC4gVGhpcyBpcyB1bmRvdWJ0ZWRseSBhIGJ1ZyBp biBsaWJteXNxbGNsaWVudCAod2hpY2gsIGJ5IHRoZSB3YXksIHNlZW1zIHRvIGJlIGZpeGVkIGlu IHZlcnNpb24gOCksIHRoYXQgX2NvdWxkXyBiZSB0cmlnZ2VyZWQgYnkgYW55IG90aGVyIHNpZ25h bC4gVGhlcmUncyBubyBkZW55aW5nIHRob3VnaCB0aGF0IFNJR1BST0YtYmFzZWQgcHJvZmlsaW5n IGlzIGEgcmVhbCB0b3J0dXJlLXRlc3QgZm9yIEVJTlRSIGhhbmRsaW5nLCBhbmQgdGhlcmUgdW5k b3VidGVkbHkgX2FyZV8gYnVnZ3kgbGlicmFyaWVzIG91dCB0aGVyZSBpbiB0aGUgd2lsZCB0aGF0 IHBlb3BsZSBhcmUgdXNpbmcgaW4gdGhlaXIgYXBwbGljYXRpb25zLiBJdCB3b3VsZCBiZSBuaWNl IGlmIFJ1YnkgcHJvZmlsZXJzIGNvdWxkIHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbS4KCiMjIyBS VUJZX0lOVEVSTkFMX0VWRU5UX05FV09CSiBwcm9maWxpbmcKCkNvbGxlY3Rpb24gb2Ygc3RhY2tz IGZyb20gU0lHUFJPRiB3b3JrcyBmb3IgQ1BVL3dhbGwgdGltZSBwcm9maWxpbmcsIGJ1dCBhIGRp ZmZlcmVudCBhcHByb2FjaCBpcyBuZWVkZWQgZm9yIGluLXByb2Nlc3MgcHJvZmlsZXJzIHRvIGNv bGxlY3QgYWxsb2NhdGlvbiBwcm9maWxlcy4gVGhpcyBpcyBub3JtYWxseSBkb25lIGJ5IHJlZ2lz dGVyaW5nIGEgdHJhY2Vwb2ludCBoYW5kbGVyIGZvciBSVUJZX0lOVEVSTkFMX0VWRU5UX05FV09C SiBpbiB0aGUgcHJvZmlsZXIgZXh0ZW5zaW9uIGdlbTsgdGhpcyBpcyBjYWxsZWQgZXZlcnkgdGlt ZSBhIFJ1Ynkgb2JqZWN0IGlzIGFsbG9jYXRlZC4gRnJvbSB0aGlzIGhhbmRsZXIsIHRoZSBwcm9m aWxlciBjYW4gdXNlIGByYl9wcm9maWxlX2ZyYW1lc2AgYWdhaW4gdG8gY29sbGVjdCBhIFJ1Ynkg YmFja3RyYWNlIG9mIHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIHRoaXMgb2Jq ZWN0LgoKIyMjIFB0cmFjZS1iYXNlZCBwcm9maWxpbmcKCkFub3RoZXIgYXBwcm9hY2ggdGhhdCBo YXMgYmVlbiB1c2VkIGlzIHRvIGNvbnRyb2wgdGhlIFJ1YnkgcHJvZ3JhbSB0byBiZSBwcm9maWxl ZCB3aXRoIGFub3RoZXIsIHNlcGFyYXRlIHByb2Nlc3MsIHVzaW5nIGFuIGFwcHJvcHJpYXRlIHBs YXRmb3JtIEFQSSAoZS5nLiBwdHJhY2Ugb24gTGludXgpLiBQZXJpb2RpY2FsbHksIHRoZSBwcm9m aWxlciBwcm9jZXNzIGNhbiB1c2UgcHRyYWNlIHRvIHN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZSB0 YXJnZXQgUnVieSBwcm9ncmFtLCBhbmQgY29sbGVjdCBhIHN0YWNrIHRyYWNlIG9mIGl0LiBUaGlz IGlzIHRoZSBhcHByb2FjaCB1c2VkIGJ5IHRoZSBbcmJzcHldKGh0dHBzOi8vZ2l0aHViLmNvbS9y YnNweS9yYnNweSkgcHJvZmlsZXIsIHdoaWNoIGlzIGl0c2VsZiBhY3R1YWxseSBhIFJ1c3QgcHJv Z3JhbS4KClRoZSBtYWluIHN0cmVuZ3RoIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBpdCBhbGxv d3Mgb25lIHRvIGJlZ2luIHRyYWNpbmcgYSBSdWJ5IHByb2dyYW0gd2hpY2ggaXMgYWxyZWFkeSBy dW5uaW5nLCBfd2l0aG91dCByZXN0YXJ0aW5nIGl0XzsgcmJzcHkgY2FuIHB0cmFjZS1hdHRhY2gg dG8gYSBydW5uaW5nIHByb2Nlc3MgYW5kIGJlZ2luIGNvbGxlY3Rpbmcgc2FtcGxlcyBzdHJhaWdo dCBhd2F5LiBUaGlzIGFsbG93cyBvbmUgdG8gZ2FpbiBpbnNpZ2h0IGludG8gaW50ZXJtaXR0ZW50 IHByb2JsZW1zIG9uY2UgdGhleSBzdGFydCBoYXBwZW5pbmchCgpVbmZvcnR1bmF0ZWx5LCAiY29s bGVjdCBhIHN0YWNrIHRyYWNlIiBpcyBxdWl0ZSB0cmlja3kgdG8gZG8gZnJvbSBvdXRzaWRlIHRo ZSBwcm9jZXNzOyB3ZSB3YW50IHRoZSBfUnVieV8gbGV2ZWwgc3RhY2sgdHJhY2UsIG5vdCAob3Ig YXQgbGVhc3QsIGFzIHdlbGwgYXMpIHRoZSBtYWNoaW5lIHN0YWNrIHRyYWNlICh3aGljaCBjb3Vs ZCBiZSBjb2xsZWN0ZWQgZS5nLiB2aWEgRFdBUkYgdW53aW5kaW5nIG9yIGZyYW1lLXBvaW50ZXIg Y2hhc2luZykuIFRvIGdldCB0aGUgUnVieSBzdGFjayB0cmFjZSByZXF1aXJlcyBydW1tYWdpbmcg YXJvdW5kIGluc2lkZSB0aGUgbWVtb3J5IG9mIHRoZSB0YXJnZXQgcHJvY2VzcyAoZS5nLiB3aXRo IGAvcHJvYy97cGlkfS9tZW1gIG9uIExpbnV4KSwgdG8gZmluZCB0aGUgcmVsZXZhbnQgYHJiX2Nv bnRyb2xfZnJhbWVfdGAgc3RydWN0dXJlcy4gUmJzcHkgY29udGFpbnMgYSBodWdlIGxpc3Qgb2Yg c3RydWN0dXJlIGRlZmluaXRpb25zIGZvciB2YXJpb3VzIHZlcnNpb25zIG9mIFJ1YnkgdG8gbWFr ZSB0aGlzIHBvc3NpYmxlLCBidXQgYW55IHRpbWUgYSBuZXcgdmVyc2lvbiBvZiBSdWJ5IGlzIHJl bGVhc2VkLCBhIG5ldyB2ZXJzaW9uIG9mIFJic3B5IG11c3QgYWxzbyBiZSByZWxlYXNlZCB0byBh Y2NvdW50IGZvciBhbnkgY2hhbmdlcyB0byB0aGUgbGF5b3V0IG9mIFJ1YnkncyBpbnRlcm5hbCBz dHJ1Y3R1cmVzLgoKSW4gdGhlb3J5LCB0aGUgcHRyYWNlIGFwcHJvYWNoIGlzIGFsc28gd29yc2Ug ZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlOyB0byBjb2xsZWN0IGEgc2FtcGxlLCBleGVj dXRpb24gbXVzdCBzd2l0Y2ggZnJvbSB0aGUgcHJvY2VzcyB0byBiZSBwcm9maWxlZCB0byB0aGUg cHJvZmlsZXIgcHJvY2Vzcywgd2hpY2ggcmVxdWlyZXMgc3dpdGNoaW5nIG1lbW9yeSBtYXBwaW5n cy4gUmVjYWxsIHRoYXQgd2l0aCBpbi1wcm9jZXNzIFNJR1BST0YgcHJvZmlsaW5nLCB0aGUgcHJv ZmlsZXIgd29yayBpcyBkb25lIGluIHRoZSBzYW1lIHByb2Nlc3Mgd2l0aCB0aGUgc2FtZSBtZW1v cnkgbWFwcGluZ3MuIEhvd2V2ZXIsIHRoaXMgY29uY2VybiBzZWVtcyB0byBiZSBsYXJnZWx5IHRo ZW9yZXRpY2FsOyBJIGhhdmUgbm90IF9hY3R1YWxseV8gc2VlbiBvciBoZWFyZCBvZiBhbnlib2R5 IHNheWluZyB0aGF0IHRoaXMgaXMgbWFraW5nIHJic3B5IHRvbyBzbG93IGZvciB0aGVpciB1c2Vj YXNlLgoKRmluYWxseSwgYWx0aG91Z2ggcHRyYWNlLWJhc2VkIHByb2ZpbGluZyBnZXRzIHVzIF9j bG9zZV8gdG8gdGhlIGlkZWFsIG9mIG5vdCByZXF1aXJpbmcgYW55IGZvcmVzaWdodCB0byBiZWdp biBwcm9maWxpbmcgYSBydW5uaW5nIHByb2dyYW0sIHRoZXJlIGlzIF9vbmVfIHNtYWxsIHJlcXVp cmVtZW50IHdoaWNoIG11c3QgYmUgc2F0aXNmaWVkIGFoZWFkIG9mIHRpbWUgLSB0aGUgUnVieSBp bnRlcnByZXRlciBuZWVkcyB0byBoYXZlIG5vdCBoYWQgaXRzIHN5bWJvbHMgc3RyaXBwZWQgc28g dGhhdCByYnNweSBjYW4gZmluZCB0aGUgYHJ1YnlfY3VycmVudF92bV9wdHJgIGdsb2JhbC4gSSBi ZWxpZXZlIHJic3B5IG1ha2VzIGFuIF9hdHRlbXB0XyB0byBmaW5kIGl0IHdpdGhvdXQgdGhlIHN5 bWJvbCBidXQgaXQgZG9lcyBub3QgY2xhaW0gdG8gYmUgcmVsaWFibGUuCgojIyMgQWxsb2NhdGlv biBzYW1wbGluZyBmcm9tIHB0cmFjZS1iYXNlZCBwcm9maWxpbmcKClRvIHBlcmZvcm0gYWxsb2Nh dGlvbiBwcm9maWxpbmcgZnJvbSBvdXRzaWRlIHRoZSBSdWJ5IHByb2Nlc3MsIHdlIHdvdWxkIG5l ZWQgc29tZSBhbmFsb2d1ZSB0byBSVUJZX0lOVEVSTkFMX0VWRU5UX05FV09CSi4gSSBiZWxpZXZl IHRoaXMgX2NvdWxkXyBiZSBhY2hpZXZlZCBieSBjb21waWxpbmcgUnVieSB3aXRoIGR0cmFjZS9z eXN0ZW10YXAvVVNEVCBwcm9iZXMgZW5hYmxlZCwgYW5kIGhhdmluZyB0aGUgcHJvZmlsZXIgcHJv Y2VzcyB3cml0ZSBhIHRyYXAgaW5zdHJ1Y3Rpb24gb3ZlciB0aGUgdG9wIG9mIHRoZSBwcm9iZSAo d2hpY2ggaXMgaG93IGUuZy4gZGVidWdnZXJzIHdvcmspLiBJIGRvbid0IGJlbGlldmUgcmJzcHkg b3IgYW55IG90aGVyIHByb2ZpbGVyIHRoYXQgSSBmb3VuZCBhY3R1YWxseSBkb2VzIHRoaXMgdGhv dWdoLgoKIyMjIFBlcmYtYmFzZWQgcHJvZmlsaW5nCgpMaW51eCBoYXMgYSBkZWRpY2F0ZWQgc3Vi c3lzdGVtIGNhbGxlZCBwZXJmIHdoaWNoIChhbW9uZ3N0IG1hbnkgb3RoZXIgdGhpbmdzKSBjYW4g ZG8gbG93LW92ZXJoZWFkIHByb2ZpbGluZyBvZiBhcmJpdHJhcnkgcHJvY2Vzc2VzLiBUaGUgc2Ft cGxpbmcgaXMgZG9uZSBpbnNpZGUgdGhlIGtlcm5lbCwgc28gbGlrZSBTSUdQUk9GIChhbmQgdW5s aWtlIHB0cmFjZSkgY29sbGVjdGluZyBhIHNhbXBsZSByZXF1aXJlcyBubyBzd2l0Y2ggb2YgYWRk cmVzcyBzcGFjZS4gSG93ZXZlciwgb2YgY291cnNlLCBwZXJmIG9ubHkgdW5kZXJzdGFuZHMgdGhl IG1hY2hpbmUgc3RhY2ssIG5vdCB0aGUgUnVieSBzdGFjaywgc28gdXNpbmcgcGVyZiB0byBwcm9m aWxlIGEgUnVieSBwcm9ncmFtIGlzIG5vdCBjdXJyZW50bHkgZXh0cmFvcmRpbmFyaWx5IHVzZWZ1 bCAodW5sZXNzIHlvdSdyZSBwcm9maWxpbmcgdGhlIFJ1YnkgVk0gaXRzZWxmIG9yIGEgQyBleHRl bnNpb24pLgoKUGVyZiBhY3R1YWxseSBoYXMgYSBbbWVjaGFuaXNtXShodHRwczovL3d3dy5icmVu ZGFuZ3JlZ2cuY29tL3BlcmYuaHRtbCNKSVRfU3ltYm9scykgdG8gaGVscCBnaXZlIG1lYW5pbmdm dWwgc3RhY2sgdHJhY2VzIGZvciBsYW5ndWFnZXMgd2l0aCBKSVRzOyB0aGUgYXBwbGljYXRpb24g aXMgZXhwZWN0ZWQgdG8gd3JpdGUgb3V0IGEgbWFwcGluZyBvZiBmdW5jdGlvbiBhZGRyZXNzIC0+ IG5hbWUgdG8gYSBmaWxlIGAvdG1wL3BlcmYtJFBJRC5tYXBgOyBwZXJmIHdpbGwgdXNlIHRoaXMg ZmlsZSB0byBzeW1ib2xpY2F0ZSBzdGFja3MuIFB5dGhvbiBbcmVjZW50bHkgYWRkZWRdKGh0dHBz Oi8vZG9jcy5weXRob24ub3JnL2Rldi9ob3d0by9wZXJmX3Byb2ZpbGluZy5odG1sKSBzdXBwb3J0 IGZvciB0aGlzIG1lY2hhbmlzbSBhcyB3ZWxsOyBob3dldmVyLCBiZWNhdXNlIENQeXRob24gZG9l cyBub3QgaGF2ZSBhIEpJVCwgaXQgd29ya3MgYnkgZ2VuZXJhdGluZyBhIG5hdGl2ZSB0cmFtcG9s aW5lIGZvciBlYWNoIGZ1bmN0aW9uICh3aXRoIGEgdW5pcXVlIGFkZHJlc3MpLCBhbmQgY2FsbGlu ZyB0aGUgYXBwcm9wcmlhdGUgdHJhbXBvbGluZXMgZHVyaW5nIFB5dGhvbiBtZXRob2QgZXhlY3V0 aW9uIHRvIG1ha2UgdGhlIG1hY2hpbmUgc3RhY2sgbWlycm9yIHRoZSBWTSBvbmUuIFRoaXMgbWVj aGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBDUnVieSBjdXJyZW50bHkuCgojIyBUaGUgcHJv cG9zYWw6IHByb3ZpZGUgYW4gImV4dGVybmFsIGRlYnVnIHNlY3Rpb24iCgpXZSBpZGVhbGx5IHdv dWxkIGxpa2UgdG8gaGF2ZSBhIHdheSB0byBwcm9maWxlIFJ1YnkgYXBwbGljYXRpb25zIHdoaWNo IGNvbWJpbmVzIHRoZSBiZW5lZml0cyBvZiB0aGUgU0lHUFJPRiBtZWNoYW5pc20gKGVhc3ksIGRv Y3VtZW50ZWQgYWNjZXNzIHRvIFJ1YnkgY2FsbCBzdGFja3MpLCB0aGUgcHRyYWNlIG1lY2hhbmlz bSAodGhlIGFiaWxpdHkgdG8gYXR0YWNoIHRvIHJ1bm5pbmcgcHJvY2Vzc2VzIHdpdGggYSBtaW5p bXVtIG9mIGZvcmVzaWdodCByZXF1aXJlZCksIGFuZCB0aGUgcGVyZiBtZWNoYW5pc20gKGxvdyBv dmVyaGVhZCBzYW1wbGUgY29sbGVjdGlvbiB3aXRob3V0IHJlcXVpcmluZyBhIHByb2Nlc3MgYWRk cmVzcyBzcGFjZSBzd2l0Y2gpLiBUaGlzIHByb3Bvc2FsIGFpbXMgdG8gcHJvdmlkZSBleGFjdGx5 IHRoYXQuCgpUaGUgUnVieSBpbnRlcnByZXRlciB3b3VsZCBoYXZlIGEgbmV3IGdsb2JhbCB2YXJp YWJsZSBgcmJfZGVidWdfZXh0X3NlY3Rpb25gLCB3aGljaCBpcyBkZWZpbmVkIHdpdGggYF9fYXR0 cmlidXRlX18oKHNlY3Rpb24oInJiX2RlYnVnX2V4dCIpKSlgIHNvIHRoYXQgaXQgYXBwZWFyZWQg aW4gYSBzZXBhcmF0ZSBzZWN0aW9uIGluIHRoZSBFTEYgYmluYXJ5LiBUaGlzIHZhcmlhYmxlIHdv dWxkIGJlIGNvbnN0YW50bHkga2VwdCBwb3B1bGF0ZWQgd2l0aCB1cC10by1kYXRlIGluZm9ybWF0 aW9uIGFib3V0IGFsbCB0aGUgY2FsbC1zdGFja3Mgb2YgYWxsIHRocmVhZHMvZmliZXJzIGluIHRo ZSBwcm9ncmFtLiBBbiBleHRlcm5hbCBkZWJ1Z2dpbmcgdG9vbCBjb3VsZCBlYXNpbHkgKCJlYXNp bHkiKSBwdHJhY2UgYSBydW5uaW5nIFJ1YnkgcHJvZ3JhbSwgYW5kIGZpbmQgdGhlIGFkZHJlc3Mg b2YgdGhpcyBzZWN0aW9uIGluIGl0cyBydW5uaW5nIG1lbW9yeSwgZXZlbiBpZiBzeW1ib2xzIGhh dmUgYmVlbiBzdHJpcHBlZC4gT25jZSBhbiBleHRlcm5hbCB0b29sIGhhcyBmb3VuZCB0aGlzIHZh cmlhYmxlLCBpdCBuZWVkcyB0byBtYWtlIHNlbnNlIG9mIGl0LiBSdWJ5IHdvdWxkIHByb3ZpZGUg YSBuZXcgaGVhZGVyIGZpbGUgYGluY2x1ZGUvcnVieS9kZWJ1Z19leHRlcm5hbC5oYCB3aGljaCBk ZXNjcmliZWQgdGhlIGxheW91dCBvZiB0aGlzIHN0cnVjdHVyZS4KClRoZSBzaW1wbGUsIHNsb3cg dmVyc2lvbiBvZiBhbiBleHRlcm5hbCBwcm9maWxlciB1c2luZyB0aGlzIGludGVyZmFjZSB3b3Vs ZCBiZSBhIGxvdCBsaWtlIHJic3B5OyBpdCB3b3VsZCB1c2UgcHRyYWNlIHRvIHBlcmlvZGljYWxs eSBzdG9wIHRoZSBSdWJ5IHByb2Nlc3MsIGFuZCB0aGVuIHVzZSB0aGUgY29udGVudHMgb2YgYHJi X2RlYnVnX2V4dF9zZWN0aW9uYCB0byBjb2xsZWN0IFJ1YnkgYmFja3RyYWNlcyBmb3IgQ1BVL3dh bGwtY2xvY2sgcHJvZmlsaW5nLiBUaGUgYmVuZWZpdCwgb2YgY291cnNlLCBpcyB0aGF0IGl0J3Mg dXNpbmcgYSBkb2N1bWVudGVkIGludGVyZmFjZSB0aGF0IGNhbiBiZSB2ZXJzaW9uZWQgYW5kIGtl cHQgYmFja3dhcmRzIGNvbXBhdGlibGUsIHJhdGhlciB0aGFuIGhhdmluZyB0byBjb25zdGFudGx5 IGNoYXNlIGJyZWFraW5nIGNoYW5nZXMgdG8gaW50ZXJuYWwgUnVieSBWTSBzdHJ1Y3R1cmVzLgoK SG93ZXZlciwgdGhlIGJlbmVmaXQgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IHdlIGNhbiBkbyBi ZXR0ZXIhIFRoZSBwZXJmIHN1YnN5c3RlbSBvbiBMaW51eCBpcyBhYmxlIHRvIGludm9rZSBhbiBl QlBGIHByb2dyYW0gdG8gYWN0dWFsbHkgY29sbGVjdCBzYW1wbGVzICh1c2luZywgSSB0aGluaywg YFBFUkZfRVZFTlRfSU9DX1NFVF9CUEZgIGJ1dCBJJ20gbm90IDEwMCUgc3VyZSkgYW5kIHdyaXRl IHRoZW0gdG8gYSByaW5nLWJ1ZmZlci4gVGhlIGVCUEYgcHJvZ3JhbSBjYW4gYWN0dWFsbHkgdXNl IHRoZSBgZGVidWdfZXh0ZXJuYWwuaGAgaGVhZGVyIGZpbGUgdG8gZmlndXJlIG91dCB0aGUgY3Vy cmVudCBSdWJ5IHN0YWNrIHRyYWNlKHMpIGl0c2VsZiwgd2l0aG91dCBuZWVkaW5nIHRvIHN3aXRj aCBiYWNrIGludG8gdGhlIHByb2ZpbGVyIGFkZHJlc3Mgc3BhY2UhIFRoZSBwcm9maWxlciBwcm9n cmFtIG9ubHkgbmVlZHMgdG8gcnVuIHBlcmlvZGljYWxseSB0byBlbXB0eSB0aGUgcmluZy1idWZm ZXIgYW5kIHdyaXRlIHNhbXBsZXMgdG8gZGlzay4KCiMjIFRoZSByaWRlcjogYmV0dGVyIHN0YWNr IHRyYWNlIG91dHB1dAoKU28gZmFyLCB3ZSd2ZSBtZW50aW9uZWQgdGhhdCB0aGUgcHJvZmlsZXIg cHJvY2VzcyB3aWxsIGV4dHJhY3QgYSBzdGFjayB0cmFjZSBvdXQgb2YgYHJiX2RlYnVnX2V4dF9z ZWN0aW9uYC4gTGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIHdoYXQgdGhhdCBzdGFjayB0cmFj ZSB3b3VsZCBhY3R1YWxseSBfYmVfLgoKVHJhZGl0aW9uYWwgcHJvZmlsaW5nIHRvb2xzIGZvciBu b24tZHluYW1pYyBsYW5ndWFnZXMgdXN1YWxseSB3b3JrIGJ5IGNhcHR1cmluZyBtZW1vcnkgYWRk cmVzc2VzIGZvciBmdW5jdGlvbnMsIGFuZCB0aGVuIGRlZmVycmluZyB0aGUgdHJhbnNsYXRpb24g b2YgYWRkcmVzc2VzIC0+IG5hbWVzIHVudGlsIGxhdGVyIChwb3NzaWJseSBldmVuIG9uIGEgZGlm ZmVyZW50IG1hY2hpbmUpLiBSdWJ5LCBob3dldmVyLCBpcyBJIGJlbGlldmUgbXVjaCB0b28gZHlu YW1pYyBmb3IgYSBzaW1pbGFyIGFwcHJvYWNoLiBNZXRob2RzIGFuZCBjbGFzc2VzIGNhbiBiZSBk ZWZpbmVkIGFuZCB1bmRlZmluZWQgZHluYW1pY2FsbHkgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhl IHByb2dyYW0uIEluc3RydWN0aW9uIHNlcXVlbmNlcyBjYW4gYmUgY3JlYXRlZCBhbmQgR0MnZCBh cyBhIHJlc3VsdCBvZiB1c2luZyB0aGluZ3MgbGlrZSBgZXZhbGAuIEEgbWVtb3J5IGFkZHJlc3Mg b2NjdXBpZWQgYnkgb25lIGNsYXNzIG9yIGlzZXEgbWlnaHQgbGF0ZXIgYmUgb2NjdXBpZWQgYnkg YSBkaWZmZXJlbnQgb25lIC0gZXNwZWNpYWxseSBiZWNhdXNlIHdlIG5vdyBoYXZlIEdDIGNvbXBh Y3Rpb24uCgpUaHVzLCBJIHRoaW5rIHRoZSBvbmx5IHNlbnNpYmxlIHRoaW5nIHRvIGRvIGlzIHRv IHN0b3JlIHN0cmluZ3MgaW4gdGhlIGByYl9kZWJ1Z19leHRfc2VjdGlvbmAgc3RydWN0dXJlLiBU aGVzZSBzdHJpbmdzIG5lZWQgdG8gYmUgdmFsaWQsIGVzc2VudGlhbGx5LCB3aGlsc3QgdGhlIGNh bGxlZCBtZXRob2QvaXNlcSBpcyBzdGlsbCBvbiB0aGUgc3RhY2sgLSB0aGVyZSdzIG5vIHJlcXVp cmVtZW50IHRvIHJldGFpbiB0aGVtIHVudGlsIGxhdGVyLiBUaGUgZXh0ZXJuYWwgdG9vbCB3b3Vs ZCBuZWVkIHRvIGNvcHkgdGhlc2Ugc3RyaW5ncyBpbnRvIGl0cyBvd24gcHJvY2Vzcy4KCldoYXQg c2hvdWxkIHRob3NlIGFjdHVhbGx5IF9jb250YWluXz8gQSB0cmFkaXRpb25hbCBSdWJ5IGJhY2t0 cmFjZSBjb250YWlucyBhIGZpbGUsIGxpbmUgbnVtYmVyLCBhIG1ldGhvZCBuYW1lIChpZiBhdmFp bGFibGUpLCBhbmQgc29tZSBvdGhlciBkZXRhaWxzIGFib3V0IHRoZSBpc2VxIGlmIHByZXNlbnQg KGUuZy4gd2hldGhlciBpdCdzIGEgYmxvY2sgb3IgZXZhbCwgd2hldGhlciBpdCdzIDxtYWluPiwg ZXRjKS4KCmBgYHJ1YnkKaXJiIzEobWFpbik6MDAzOjA+IGRlZiBmb287IHJhaXNlICJvaCBubyI7 IGVuZDsKPT4gOmZvbwppcmIjMShtYWluKTowMDQ6MD4gZm9vCihpcmIjMSk6MzppbiBgZm9vJzog b2ggbm8gKFJ1bnRpbWVFcnJvcikKCWZyb20gKGlyYiMxKTo0OmluIGA8bWFpbj4nCmBgYAoKSSBk byBub3QgYmVsaWV2ZSB0aGlzIGlzIHRoZSBtb3N0IHVzZWZ1bCB3YXkgdG8gcHJlc2VudCB0aGlz IGluZm9ybWF0aW9uIGZyb20gYSBwcm9maWxpbmcgcGVyc3BlY3RpdmUsIGhvd2V2ZXIuIFdoZW4g ZGVhbGluZyB3aXRoIGEgbGFyZ2UgbW9ub2xpdGhpYyBhcHBsaWNhdGlvbiwgcHJvZmlsZXMgd2ls bCBiZSBjb2xsZWN0ZWQgcHJvY2Vzcy13aWRlIGFuZCBhZ2dyZWdhdGVkIG9uIHNvbWUga2luZCBv ZiBjZW50cmFsIGRhc2hib2FyZDsgdGhlcmUgY291bGQgYmUgbWFueSBtZXRob2RzIGNhbGxlZCB0 aGUgc2FtZSB0aGluZyAodGhpbmsgYGRlZiBjcmVhdGVgIGluIGEgUmFpbHMgY29udHJvbGxlciwg Zm9yIGV4YW1wbGUpLiBUaGUgZmlsZW5hbWUgY2FuIGhlbHAgZGlzYW1iaWd1YXRlIGluIGNpcmN1 bXN0YW5jZXMgbGlrZSB0aGlzLCBidXQgQyBmdW5jdGlvbnMgZG9uJ3QgZXZlbiBfaGF2ZV8gYSBm aWxlbmFtZSwgc28ganVzdCBwcmludCB0aGUgZmlsZW5hbWUgb2YgdGhlIHRoaW5nIHRoYXQgY2Fs bGVkIHRoZW06CgpgYGBydWJ5CmlyYiMxKG1haW4pOjAwNTowPiAxLnRpbWVzIHsgcmFpc2UgIm9o IG5vIiB9CihpcmIjMSk6NTppbiBgYmxvY2sgaW4gPG1haW4+Jzogb2ggbm8gKFJ1bnRpbWVFcnJv cikKCWZyb20gKGlyYiMxKTo1OmluIGB0aW1lcycgIyBJIGRpZCBub3QgZGVmaW5lIEludGVnZXIj dGltZXMgaW4gSVJCIQoJZnJvbSAoaXJiIzEpOjU6aW4gYDxtYWluPicKYGBgCgpBbGwgb2YgdGhp cyBjYW4gYmUgZ2VuZXJhbGx5IGZpZ3VyZWQgb3V0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUsIGJ1 dCBvZnRlbiB3aGVuIHdlJ3JlIGxvb2tpbmcgYXQgZS5nLiBhIHByb2ZpbGluZyBkYXNoYm9hcmQs IGhhdmluZyB0byBrZWVwIGxvb2tpbmcgYmV0d2VlbiB0aGUgZmxhbWUgZ3JhcGggYW5kIHRoZSBj b2RlIGNhbiBiZSByYXRoZXIgYW5ub3lpbmcuCgpJdCB3b3VsZCBiZSBuaWNlIGlmIGluc3RlYWQs IG91ciBwcm9maWxlcyBjb250YWluZWQgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9uIHdoaWNoIGEg bWV0aG9kIGlzIGRlZmluZWQ7IHNvbWV0aGluZyBsaWtlIGBGb29DbGFzcyN0aGVfbWV0aG9kYC4g UnVieSBoYXMgYSBtZXRob2QgYHJiX3Byb2ZpbGVfZnJhbWVfcXVhbGlmaWVkX21ldGhvZF9uYW1l YCB3aGljaCBjYW4gZ2l2ZSB1c2VmdWwgb3V0cHV0IGxpa2UgdGhpcyBpbiBtYW55IGNhc2VzLiBI b3dldmVyLCBpbiBtYW55IGNvbW1vbiBjYXNlcyBsaWtlIGUuZy4gYW5vbnltb3VzIGNsYXNzZXMs IGl0IHdpbGwgcHJlc2VudCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgYXMgc29tZXRoaW5nIGxpa2Ug IiM8Q2xhc3M6MHgwMDAwMDAwMDAwZGI0OGUwPiIuIFRoaXMgaXMgd29yc2UgdGhhbiB1c2VsZXNz IGZvciBwcm9maWxpbmc7IHRoYXQgYWRkcmVzcyB3aWxsIGJlIGRpZmZlcmVudCBhbW9uZ3N0IGRp ZmZlcmVudCBwcm9jZXNzZXMgYmVpbmcgcHJvZmlsZWQsIHNvIG11bHRpcGxlIHByb2ZpbGVzIGNh bid0IGJlIGFnZ3JlZ2F0ZWQgdG9nZXRoZXIuIEluIGZhY3QsIHRoYXQgYWRkcmVzcyBpc24ndCBl dmVuIGd1YXJhbnRlZWQgdG8gYmUgY29uc3RhbnQgd2l0aGluIHRoZSBzYW1lIHByb2Nlc3MgYW55 bW9yZSwgYmVjYXVzZSBvZiBjb21wYWN0aW9uLgoKSSB3b3VsZCBwcm9wb3NlIHRoYXQgd2UgaGF2 ZSBhIG5ldyB3YXkgb2YgbmFtaW5nIG1ldGhvZHMgd2hpY2ggcHJvZHVjZXMgdXNlZnVsIHN0cmlu Z3MgaW4gYWxsIGNhc2VzLCB3aXRob3V0IGFueSBhZGRyZXNzZXMgaW4gdGhlbS4gVGhlIHJ1bGVz IEkgaGF2ZSBjb21lIHVwIHdpdGggc28gZmFyIGFyZToKCiogYCIjPHJlZmluZW1lbnQgRm9vIG9m IEJhcj4iYCBmb3IgYSByZWZpbmVtZW50IG1vZHVsZSBhZGRpbmcgbWV0aG9kcyB0bwogIEJhcgoq IGAiIzxpbnN0YW5jZSBvZiBGb28+ImAgZm9yIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBGb28K KiBgIiM8c2luZ2xldG9uIG9mIEZvbz4iYCBmb3IgRm9vJ3Mgc2luZ2xldG9uIGNsYXNzLgoqIGAi Izxhbm9ueW1vdXMgc3ViY2xhc3Mgb2YgRm9vPiJgIGZvciBhbiBhbm9ueW1vdXMgc3ViY2xhc3MK KiBUaGUgdXN1YWwgY2xhc3NwYXRoIHN0cmluZyBvdGhlcndpc2UKCk5vdGUgdGhhdCBuZXN0aW5n IGlzIE9LIHRvbyAtIHNvIGEgbWV0aG9kIGRlZmluZWQgb24gdGhlIHNpbmdsZXRvbiBjbGFzcyBv ZiBhIHBhcnRpY3VsYXIgRm9vIG9iamVjdCB3b3VsZCBiZSAiIzxzaW5nbGV0b24gb2YgIzxpbnN0 YW5jZSBvZiBGb28+PiN0aGVfbWV0aG9kIi4KClNvLCBteSBwcm9wb3NhbCBpcyB0aGF0IHRoaXMg aXMgdGhlIGZvcm1hdCBvZiB0aGUgbWV0aG9kIG5hbWUgdGhhdCBhcHBlYXJzIGluIHRoZSBgcmJf ZGVidWdfZXh0X3NlY3Rpb25gIHN0cnVjdHVyZS4KCiMjIFdoZXJlIGhhdmUgSSBnb3QgdG8gc28g ZmFyPwoKT0ssIHNvIEkgaGF2ZSBhIGRyYWZ0IFBSIHVwIHdoaWNoIHNob3VsZCBob3BlZnVsbHkg aGVscCBtYWtlIHNvbWUgb2YgdGhpcyBjbGVhcmVyOiBodHRwczovL2dpdGh1Yi5jb20vcnVieS9y dWJ5L3B1bGwvNjcwNi4gSXQgaXMgb2YgY291cnNlIGluIG5vIHdheSBldmVuIGNsb3NlIHRvIG1l cmdlIHJlYWR5LCBidXQgSSdtIGhvcGluZyBpdCBoZWxwcyBpbGx1c3RyYXRlIHNvbWUgb2YgbXkg aWRlYXMgaGVyZToKCiogW1RoZSBkZWJ1Z19leHRlcm5hbC5oIGZpbGVdKGh0dHBzOi8vZ2l0aHVi LmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2L2ZpbGVzI2RpZmYtNjYxZjkyNjkwMDllYzgyNzE4NWVh ZmE1ZWUwNWJkNzI1MWJiZTBhNTVkZWMzNjFjOWM1YzI1YmIyYTQzYTA5OCkgdGhhdCBkZWZpbmVz IHRoZSBleHRlcm5hbGx5LXZpc2libGUgc3RydWN0dXJlcwoqIFdoZXJlIHRocmVhZHMgYXJlIFth ZGRlZF0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi1h YTJhZGRiOTI5NzQ5YTRhMDMzMGI5M2NlZWNlYzViYzU0ODU3NTFhMzYyNTI0ZjVjYjM3YmYyMmRm ZjE5MzZlUjY1KSBhbmQgW3JlbW92ZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVs bC82NzA2L2ZpbGVzI2RpZmYtYWEyYWRkYjkyOTc0OWE0YTAzMzBiOTNjZWVjZWM1YmM1NDg1NzUx YTM2MjUyNGY1Y2IzN2JmMjJkZmYxOTM2ZVIxMTApIGZyb20gdGhlIGByYl9kZWJ1Z19leHRfc2Vj dGlvbmAgc3RydWN0dXJlCiogV2hlcmUgZnJhbWVzIGFyZSBbcHVzaGVkXShodHRwczovL2dpdGh1 Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9maWxlcyNkaWZmLWY4YzE3NDM0N2U2ZWE4ODg5YjUw MzYwNjRhMWZmNGZlNWU3YzUzYTgyMWJlZmE5YmRjNWNjYmYxNzgwMGE2NDlSNDA3KSBhbmQgW3Bv cHBlZF0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi1m OGMxNzQzNDdlNmVhODg4OWI1MDM2MDY0YTFmZjRmZTVlN2M1M2E4MjFiZWZhOWJkYzVjY2JmMTc4 MDBhNjQ5UjQzNykgZnJvbSB0aGUgYHJiX2RlYnVnX2V4dF9zZWN0aW9uYCBzdHJ1Y3R1cmUKKiBU aGUgW3Rlc3RzXShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9maWxlcyNk aWZmLTg5YTY3YTRkNWIzNDhhYzZmOWNhYmU1NmQyODQ3NTQ1YmU2NzgwOWIwMWQ4NTZiMzU0MWU5 NjQ3MTAxNGJkOTlSNTczKSBpbGx1c3RyYXRlIHdoYXQgdGhlIG5ldyBxdWFsaWZpZWQgbWV0aG9k IG5hbWUgb3V0cHV0IGxvb2tzIGxpa2UuCgojIyBXaGF0IGRvIEkgd2FudCBmZWVkYmFjayBvbj8K ClRoaXMgd2hvbGUgcHJvamVjdCBpcyBvYnZpb3VzbHkgc3RpbGwgYWJvdXQgMjAlIGNvb2tlZCwg c28sIGFueXRoaW5nIGFuZCBldmVyeXRoaW5nLiBCdXQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZXNl IGFyZSB0aGUgcXVlc3Rpb25zIEkgd291bGQgcmVhbGx5IGxpa2Ugc29tZSBoZWxwIHdpdGggOikK CiogRG9lcyB0aGlzIF9hcHByb2FjaF8gc2VlbSBzZW5zaWJsZT8gSXMgdGhlIGJhc2ljIF9pZGVh XyBvZiAiZXhwb3NlIHNvbWUgZG9jdW1lbnRlZCBkYXRhIHN0cnVjdHVyZSB0byBvdGhlciBwcm9j ZXNzZXMgdGhhdCBhcmUgYWJsZSB0byByZWFkIG15IG1lbW9yeSIgYSBzb3VuZCBvbmU/CiogV2hh dCBzaG91bGQgSSBkbyB3aXRoIHRoZSBxdWFsaWZpZWQtbWV0aG9kLW5hbWUtd2l0aG91dC1hZGRy ZXNzZXMgd29yaz8gQXQgdGhlIG1vbWVudCBJIGV4cG9zZWQgdGhhdCBsb2dpYyBiZWhpbmQgbmV3 IG1ldGhvZHMgYE1ldGhvZCNkZWJ1Z19uYW1lYCBhbmQgYFRocmVhZDo6QmFja3RyYWNlOjpFeHRl cm5hbCNkZWJ1Z19sYWJlbGAuIElzIHRoZXJlIHNvbWUgYXBwZXRpdGUgdG8gb3BlbiBhIHByb3Bv c2FsIHRvIGhhdmUgdGhhdCBpbiBDUnVieT8KKiBTaG91bGQgd2UgZXZlbiBjb25zaWRlciBfY2hh bmdpbmcgdGhlIGRlZmF1bHQgb3V0cHV0XyBvZiB0aHJlYWQgYmFja3RyYWNlcyB0byBwcmludCB0 aGVzZSBxdWFsaWZpZWQgbmFtZXM/CiogVGhlcmUgYXJlIHNvbWUgJ2luZnJhc3RydWN0dXJhbCcg Y29tbWl0cyBvbiB0aGF0IGJyYW5jaCBvZiBtaW5lIC0gb25lIHRvIFtmaW5kIHNvbWUgZXh0cmEg c3BhY2UgaW4gYHJiX21ldGhvZF9lbnRyeV90YF0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVi eS9wdWxsLzY3MDYvY29tbWl0cy9mNDQ2ZjUyODFmNThlODc2MWQxODI2YjZiMWM0YTk4ZmFjZDA0 NzJlKSBhbmQgb25lIHRvIFthZGQgc29tZSBuZXcgYXRvbWljIGhlbHBlcnNdKGBodHRwczovL2dp dGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9jb21taXRzLzE3ZDRiMTU2Y2ZlOGYwYzMyOTEw OTA4ODUzYzE4YzdmYzgwMTIxZWNgKS4gSXMgdGhpcyB0aGUgc29ydCBvZiB0aGluZyB0aGF0IHdv dWxkIG1ha2Ugc2Vuc2UgdG8gdHJ5IGFuZCBsYW5kIG5vdyBvciBvbmx5IHdoZW4gdGhpcyBpcyBh bGwgY2xvc2VyIHRvIGRvbmU/CiogSSBoYXZlbid0IHlldCBhY3R1YWxseSBpbXBsZW1lbnRlZCBh bnl0aGluZyB0byB0cnkgYW5kIF9yZWFkXyB0aGlzIGV4dGVybmFsIGRlYnVnIHNlY3Rpb24uIFNo b3VsZCBpdCBiZQogIDEpIHNvbWUgZXh0ZXJuYWwgcmVwbywgaW4gYSBub24tUnVieSBsYW5ndWFn ZSBlLmcuIFJ1c3Qgb3Igc29tZXRoaW5nPwogIDIpIEEgUnVieSBnZW0sIHdpdGggYSBDIGV4dGVu c2lvbiB0byBoYW5kbGUgYWxsIHRoZSBwdHJhY2UvYnBmJ3kgYml0cz8KICAzKSBUaGUgZ2VtLCBi dXQgaW5zaWRlIHRoZSBDUnVieSBzb3VyY2UgdHJlZT8KICBJJ20gbGVhbmluZyB0b3dhcmRzIDIs IGJ1dCBub3QgcmVhbGx5IHN1cmUuCgpUaGFuayB5b3UsIHRvIGFueWJvZHkgd2hvIGFjdHVhbGx5 IGdvdCB0byB0aGUgYm90dG9tIG9mIHRoaXMgd2FsbCBvZiB0ZXh0LCBhbmQgdGhhbmtzIGRvdWJs eSB0byBhbnlib2R5IHdobyBwcm92aWRlcyBmZWVkYmFjayEKCgoKLS0gCmh0dHBzOi8vYnVncy5y dWJ5LWxhbmcub3JnLwo=