From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: daanturo Newsgroups: gmane.emacs.devel Subject: Re: A function to take the regexp-matched subsring directly Date: Mon, 31 Oct 2022 00:16:03 +0700 Message-ID: <47fff48c-90d4-7c6b-7b92-8a99d9453f3f@gmail.com> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------i3aylt36W08NTsQLjZ00d5iQ" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="33289"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Oct 30 18:21:05 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1opBzc-0008Vi-BX for ged-emacs-devel@m.gmane-mx.org; Sun, 30 Oct 2022 18:21:04 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1opBym-0004Ga-Qe; Sun, 30 Oct 2022 13:20:12 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1opBus-0003Pv-VQ for emacs-devel@gnu.org; Sun, 30 Oct 2022 13:16:10 -0400 Original-Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1opBur-0006K6-2B for emacs-devel@gnu.org; Sun, 30 Oct 2022 13:16:10 -0400 Original-Received: by mail-pf1-x42d.google.com with SMTP id b185so8826659pfb.9 for ; Sun, 30 Oct 2022 10:16:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=O2e5+YdmzUD4yyTHBwDH4O8wiitCQVtxPdSN7W26wvg=; b=HdUAUpsRXQAD/fXpE1GFee/9aFZVcpxHc5ClCLJO98vWBZ25PVKdDcvyhsUc1mNbQL C4aFSVZYr34OSyzEYjyDa8aqliGceYInhVci+pih51rF24UsFh/BRF7eEtr4JkBsxVQ/ H5q2Ooe+AciqXSCZFEk9E7Pp11hH1mrwEAuEsQ/HFkPVZZBLWYk4Ufa0pGy3xgpt8JPp 3G05Y53iEnJ5lnBaBJIfl2zou/xptdDZ4W8bb4/vKbREoNPRXuT9oP2enH85s0ipPjYd +/wPPxri/iTcO3QGzI//Wx1408NeJjUewqT+4LJB4VZFgz7fNfyisfbwAfQ7JjMrKhRe XM0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=O2e5+YdmzUD4yyTHBwDH4O8wiitCQVtxPdSN7W26wvg=; b=IOZbnvcaaomH8y4zfMuR8V8PLqNAC2+v2SnMidAF9zovxw4HCuvH5RTEFkhwQ1Fm2E oqRT9rdjCZGIcysuNS93hxRKAD4Ilzr2BYeZn+cCPIUVEY2/qac6zC2RylCQSLsh1m7S uqVHCtXkk3Zejcmhplhi19c+rS05TsuhxknIS7qU9vQOxm1+tFONxmka1IwU/AD2jGNc HgmirOX9IKD/3Uv4tXmZ7V18Dz2N1m3y3tyQ2kOHUd1k/L4v2J+5ykL+J7bbi6BqOHyL M9fqKSDG0z4DqQREJ4DTsrWIl7O9fg4TN/4A9SPUysPPT/6sSFDB0vQGLMKY/IMtgq+D RZGw== X-Gm-Message-State: ACrzQf3XNTaXHTDek0Ihct8xXtgFiL7d8Tg9Z1nStV7kuyJBYk1lG9g7 BpmwZle8E8rEci+nPc8gBoItwQga+UE= X-Google-Smtp-Source: AMsMyM4BF1PTIeunE1sqTHH3NTYo/AYdFAK0MhPnSjwGZYlB+8jGDGfe+oFflHRxNPEtMYQPVrVZ+w== X-Received: by 2002:a05:6a00:b90:b0:56d:5540:b83a with SMTP id g16-20020a056a000b9000b0056d5540b83amr2947762pfj.74.1667150167520; Sun, 30 Oct 2022 10:16:07 -0700 (PDT) Original-Received: from ?IPV6:2001:ee0:4f8d:5d40:72b7:27ac:56c4:2f2a? ([2001:ee0:4f8d:5d40:72b7:27ac:56c4:2f2a]) by smtp.gmail.com with ESMTPSA id b14-20020a17090a6ace00b00203ab277966sm2651328pjm.7.2022.10.30.10.16.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 30 Oct 2022 10:16:06 -0700 (PDT) Content-Language: en-US In-Reply-To: Received-SPF: pass client-ip=2607:f8b0:4864:20::42d; envelope-from=daanturo@gmail.com; helo=mail-pf1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Sun, 30 Oct 2022 13:20:11 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: "Emacs-devel" Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:298826 Archived-At: This is a multi-part message in MIME format. --------------i3aylt36W08NTsQLjZ00d5iQ Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > I suspect it'd be more efficient to iterate directly on the `match-data` rather > than on an integer (which suffers from an O(N²) complexity). Got it. By using `substring` directly, it looks like this: ```emacs-lisp (when (string-match regexp string)     (let ((matched-data (match-data))           matches beg end)       (while matched-data         (setq beg (pop matched-data))         (setq end (pop matched-data))         (push (and beg end                    (substring string beg end))               matches))       (nreverse matches))) ``` > `save-match-data` is costly and extremely rarely needed. I committed a change that now makes inhibit-modify optional (though `(declare (pure t) (side-effect-free t))` is lost in the process). Although I think intuitively, when running those kind of functions, we naturally expect them not to cause any side-effects from a high-level perspective so `save-match-data` should be the default. -- Daanturo. --------------i3aylt36W08NTsQLjZ00d5iQ Content-Type: text/x-patch; charset=UTF-8; name="regexp-match.patch" Content-Disposition: attachment; filename="regexp-match.patch" Content-Transfer-Encoding: base64 RnJvbSA3NTQwZGMxMzJmMTVhYTI3YjZkZjNjNmEwMjM5YThmNzBlZjE5MDMyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYWFudHVybyA8ZGFhbnR1cm9AZ21haWwuY29tPgpE YXRlOiBTdW4sIDMwIE9jdCAyMDIyIDIxOjU0OjU2ICswNzAwClN1YmplY3Q6IFtQQVRDSCAx LzJdIERlZmluZSByZWdleHAtbWF0Y2gsIHJlZ2V4cC1tYXRjaCoKCiogbGlzcC9lbWFjcy1s aXNwL3N1YnIteC5lbDogaW1wbGVtZW50YXRpb24KKiBkb2MvbGlzcHJlZi9zZWFyY2hpbmcu dGV4aTogZG9jdW1lbnRzCiogZXRjL05FV1M6IGRvY3VtZW50cwoqIGxpc3AvZW1hY3MtbGlz cC9zaG9ydGRvYy5lbDogZG9jdW1lbnRzCi0tLQogZG9jL2xpc3ByZWYvc2VhcmNoaW5nLnRl eGkgIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGV0Yy9ORVdTICAg ICAgICAgICAgICAgICAgICB8ICA3ICsrKysrKysKIGxpc3AvZW1hY3MtbGlzcC9zaG9ydGRv Yy5lbCB8ICA0ICsrKysKIGxpc3AvZW1hY3MtbGlzcC9zdWJyLXguZWwgICB8IDMwICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA3MyBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvZG9jL2xpc3ByZWYvc2VhcmNoaW5nLnRleGkgYi9kb2Mv bGlzcHJlZi9zZWFyY2hpbmcudGV4aQppbmRleCA3NDM3MThiNTYwLi5lNGNlY2Q4NThhIDEw MDY0NAotLS0gYS9kb2MvbGlzcHJlZi9zZWFyY2hpbmcudGV4aQorKysgYi9kb2MvbGlzcHJl Zi9zZWFyY2hpbmcudGV4aQpAQCAtMjA5OSw2ICsyMDk5LDM4IEBAIFRoaXMgcHJlZGljYXRl IGZ1bmN0aW9uIGRvZXMgd2hhdCBAY29kZXtzdHJpbmctbWF0Y2h9IGRvZXMsIGJ1dCBpdAog YXZvaWRzIG1vZGlmeWluZyB0aGUgbWF0Y2ggZGF0YS4KIEBlbmQgZGVmdW4KIAorQGRlZnVu IHJlZ2V4cC1tYXRjaCByZWdleHAgc3RyaW5nICZvcHRpb25hbCBuCitUaGlzIGZ1bmN0aW9u IHJldHVybnMgdGhlIG4tdGggbWF0Y2hlZCBzdWJzdHJpbmcgZm9yIHJlZ2V4cCBpbiBzdHJp bmcuCitOIGRlZmF1bHRzIHRvIDAgKHRoZSB3aG9sZSBtYXRjaCkuICBJdCBkb2VzIG5vdCBt b2RpZnkgdGhlIG1hdGNoIGRhdGEuCisKK0BleGFtcGxlCitAZ3JvdXAKKyhyZWdleHAtbWF0 Y2ggInF1aWNrIiAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgcXVpY2tseS4iKQorICAg ICAgICBAcmVzdWx0e30gInF1aWNrIgorQGVuZCBncm91cAorQGdyb3VwCisocmVnZXhwLW1h dGNoICJxdWlja1tbOnNwYWNlOl1dK1xcKFthLXpdK1xcKSIgIlRoZSBxdWljayBicm93biBm b3gganVtcGVkIHF1aWNrbHkuIiAxKQorICAgICAgICBAcmVzdWx0e30gImJyb3duIgorQGVu ZCBncm91cAorQGVuZCBleGFtcGxlCisKK0BlbmQgZGVmdW4KKworCitAZGVmdW4gcmVnZXhw LW1hdGNoKiByZWdleHAgc3RyaW5nCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgbGlzdCBvZiBt YXRjaGVkIHN1YnN0cmluZ3MgZm9yIHJlZ2V4cAoraW4gc3RyaW5nLiAgSXQgZG9lcyBub3Qg bW9kaWZ5IHRoZSBtYXRjaCBkYXRhLgorCitAZXhhbXBsZQorQGdyb3VwCisocmVnZXhwLW1h dGNoKiAicXVpY2tbWzpzcGFjZTpdXStcXChbYS16XStcXCkiICJUaGUgcXVpY2sgYnJvd24g Zm94IGp1bXBlZCBxdWlja2x5LiIpCisgICAgICAgIEByZXN1bHR7fSAoInF1aWNrIGJyb3du IiAiYnJvd24iKQorQGVuZCBncm91cAorQGVuZCBleGFtcGxlCisKK0BlbmQgZGVmdW4KKwor CiBAZGVmdW4gbG9va2luZy1hdCByZWdleHAgJm9wdGlvbmFsIGluaGliaXQtbW9kaWZ5CiBU aGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB0aGUgdGV4dCBpbiB0aGUgY3VycmVu dCBidWZmZXIgZGlyZWN0bHkKIGZvbGxvd2luZyBwb2ludCBtYXRjaGVzIHRoZSByZWd1bGFy IGV4cHJlc3Npb24gQHZhcntyZWdleHB9LiAgYGBEaXJlY3RseQpkaWZmIC0tZ2l0IGEvZXRj L05FV1MgYi9ldGMvTkVXUwppbmRleCBhMTg1OTY3NDgzLi42ZmFlZTcyNTFlIDEwMDY0NAot LS0gYS9ldGMvTkVXUworKysgYi9ldGMvTkVXUwpAQCAtMzE5OCw2ICszMTk4LDEzIEBAIFRo ZSBmb2xsb3dpbmcgZ2VuZXJhbGl6ZWQgdmFyaWFibGVzIGhhdmUgYmVlbiBtYWRlIG9ic29s ZXRlOgogDAogKiBMaXNwIENoYW5nZXMgaW4gRW1hY3MgMjkuMQogCisrKysKKyoqIE5ldyBm dW5jdGlvbiAncmVnZXhwLW1hdGNoJywgJ3JlZ2V4cC1tYXRjaConLgorJ3JlZ2V4cC1tYXRj aCcgY2FuIGJlIHVzZWQgdG8gZXh0cmFjdCB0aGUgc3Vic3RyaW5nIHRoYXQgbWF0Y2hlcyBh Cit3YW50ZWQgc3ViZXhwcmVzc2lvbiBmcm9tIGEgc3RyaW5nLCB3aGlsZSAncmVnZXhwLW1h dGNoKicgcmV0dXJucwordGhlIGNvcnJlc3BvbmRpbmcgc3Vic3RyaW5nIGZvciBlYWNoIHN1 YmV4cHJlc3Npb24uIEJvdGggZG9uJ3QgY2hhbmdlCit0aGUgbWF0Y2ggZGF0YQorCiArKysK ICoqIEludGVycHJldGVkIGNsb3N1cmVzIGFyZSAic2FmZSBmb3Igc3BhY2UiLgogQXMgd2Fz IGFscmVhZHkgdGhlIGNhc2UgZm9yIGJ5dGUtY29tcGlsZWQgY2xvc3VyZXMsIGluc3RlYWQg b2YgY2FwdHVyaW5nCmRpZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3Avc2hvcnRkb2MuZWwg Yi9saXNwL2VtYWNzLWxpc3Avc2hvcnRkb2MuZWwKaW5kZXggZGJhYzAzNDMyYy4uODFlNjE2 ODIxNyAxMDA2NDQKLS0tIGEvbGlzcC9lbWFjcy1saXNwL3Nob3J0ZG9jLmVsCisrKyBiL2xp c3AvZW1hY3MtbGlzcC9zaG9ydGRvYy5lbApAQCAtNzgxLDYgKzc4MSwxMCBAQCBBIEZVTkMg Zm9ybSBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIGA6bm8tZXZhbCcgKG9yIGA6bm8tdmFsdWUn KSwKICAgIDplZy1yZXN1bHQgMykKICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgIDpuby1ldmFs IChzYXZlLW1hdGNoLWRhdGEgLi4uKSkKKyAgKHJlZ2V4cC1tYXRjaAorICAgOmV2YWwgKHJl Z2V4cC1tYXRjaCAiXlxcKFtmb10rXFwpYiIgImZvb2JhciIgMSkpCisgIChyZWdleHAtbWF0 Y2gqCisgICA6ZXZhbCAocmVnZXhwLW1hdGNoKiAiXlxcKFtmb10rXFwpYiIgImZvb2JhciIp KQogICAiUmVwbGFjaW5nIE1hdGNoIgogICAocmVwbGFjZS1tYXRjaAogICAgOm5vLWV2YWwg KHJlcGxhY2UtbWF0Y2ggIm5ldyIpCmRpZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3Avc3Vi ci14LmVsIGIvbGlzcC9lbWFjcy1saXNwL3N1YnIteC5lbAppbmRleCA2ZTRkODhiNGRmLi4w YmFkZjFjYmFmIDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3Avc3Vici14LmVsCisrKyBi L2xpc3AvZW1hY3MtbGlzcC9zdWJyLXguZWwKQEAgLTM0Nyw2ICszNDcsMzYgQEAgVGhpcyB0 YWtlcyBpbnRvIGFjY291bnQgY29tYmluaW5nIGNoYXJhY3RlcnMgYW5kIGdyYXBoZW1lIGNs dXN0ZXJzLiIKICAgICAgICAgKHNldHEgc3RhcnQgKDErIHN0YXJ0KSkpKQogICAgIChucmV2 ZXJzZSByZXN1bHQpKSkKIAorOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biByZWdleHAtbWF0Y2gg KHJlZ2V4cCBzdHJpbmcgJm9wdGlvbmFsIG4pCisgICJSZXR1cm4gdGhlIE4gLXRoIG1hdGNo ZWQgc3Vic3RyaW5nIGZvciBSRUdFWFAgaW4gU1RSSU5HLgorTiBkZWZhdWx0cyB0byAwICh0 aGUgd2hvbGUgbWF0Y2gpLgorCitUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUg bWF0Y2ggZGF0YS4iCisgIChkZWNsYXJlIChwdXJlIHQpIChzaWRlLWVmZmVjdC1mcmVlIHQp KQorICAobGV0ICgobiAob3IgbiAwKSkpCisgICAgKHNhdmUtbWF0Y2gtZGF0YQorICAgICAg KHdoZW4gKHN0cmluZy1tYXRjaCByZWdleHAgc3RyaW5nKQorICAgICAgICAobWF0Y2gtc3Ry aW5nIG4gc3RyaW5nKSkpKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biByZWdleHAtbWF0 Y2gqIChyZWdleHAgc3RyaW5nKQorICAiUmV0dXJuIGEgbGlzdCBvZiBtYXRjaGVkIHN1YnN0 cmluZ3MgZm9yIFJFR0VYUCBpbiBTVFJJTkcuCisKK1RoaXMgZnVuY3Rpb24gZG9lcyBub3Qg Y2hhbmdlIHRoZSBtYXRjaCBkYXRhLiIKKyAgKGRlY2xhcmUgKHB1cmUgdCkgKHNpZGUtZWZm ZWN0LWZyZWUgdCkpCisgIChzYXZlLW1hdGNoLWRhdGEKKyAgICAod2hlbiAoc3RyaW5nLW1h dGNoIHJlZ2V4cCBzdHJpbmcpCisgICAgICAobGV0ICgobWF0Y2hlZC1kYXRhIChtYXRjaC1k YXRhKSkKKyAgICAgICAgICAgIG1hdGNoZXMgYmVnIGVuZCkKKyAgICAgICAgKHdoaWxlIG1h dGNoZWQtZGF0YQorICAgICAgICAgIChzZXRxIGJlZyAocG9wIG1hdGNoZWQtZGF0YSkpCisg ICAgICAgICAgKHNldHEgZW5kIChwb3AgbWF0Y2hlZC1kYXRhKSkKKyAgICAgICAgICAocHVz aCAoYW5kIGJlZyBlbmQKKyAgICAgICAgICAgICAgICAgICAgIChzdWJzdHJpbmcgc3RyaW5n IGJlZyBlbmQpKQorICAgICAgICAgICAgICAgIG1hdGNoZXMpKQorICAgICAgICAobnJldmVy c2UgbWF0Y2hlcykpKSkpCisKIDs7OyMjI2F1dG9sb2FkCiAoZGVmdW4gYWRkLWRpc3BsYXkt dGV4dC1wcm9wZXJ0eSAoc3RhcnQgZW5kIHByb3AgdmFsdWUKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgb2JqZWN0KQotLSAKMi4zOC4xCgoK RnJvbSA0N2MxNDE0Y2YyNGIyOWFiODVmOWI0M2UyYTdkZWFhMTM0MjcxY2QyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYWFudHVybyA8ZGFhbnR1cm9AZ21haWwuY29tPgpE YXRlOiBTdW4sIDMwIE9jdCAyMDIyIDIzOjU2OjM3ICswNzAwClN1YmplY3Q6IFtQQVRDSCAy LzJdIHJlZ2V4cC1tYXRjaCwgcmVnZXhwLW1hdGNoKjogbWFrZSBpbmhpYml0LW1vZGlmeSBv cHRpb25hbAoKKiBsaXNwL2VtYWNzLWxpc3Avc3Vici14LmVsOiBzcGxpdCBoZWxwZXIgZnVu Y3Rpb25zIGZvciB0aGUgYWJvdmUgYW5kCmFkZCBvcHRpb25hbCBJTkhJQklULU1PRElGWS4K LS0tCiBsaXNwL2VtYWNzLWxpc3Avc3Vici14LmVsIHwgNDggKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygr KSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9lbWFjcy1saXNwL3N1YnIt eC5lbCBiL2xpc3AvZW1hY3MtbGlzcC9zdWJyLXguZWwKaW5kZXggMGJhZGYxY2JhZi4uNGRl MjIxM2FkZSAxMDA2NDQKLS0tIGEvbGlzcC9lbWFjcy1saXNwL3N1YnIteC5lbAorKysgYi9s aXNwL2VtYWNzLWxpc3Avc3Vici14LmVsCkBAIC0zNDcsMzUgKzM0NywzOSBAQCBUaGlzIHRh a2VzIGludG8gYWNjb3VudCBjb21iaW5pbmcgY2hhcmFjdGVycyBhbmQgZ3JhcGhlbWUgY2x1 c3RlcnMuIgogICAgICAgICAoc2V0cSBzdGFydCAoMSsgc3RhcnQpKSkpCiAgICAgKG5yZXZl cnNlIHJlc3VsdCkpKQogCisoZGVmdW4gcmVnZXhwLS1tYXRjaCAocmVnZXhwIHN0cmluZyAm b3B0aW9uYWwgbikKKyAgKGxldCAoKG4gKG9yIG4gMCkpKQorICAgICh3aGVuIChzdHJpbmct bWF0Y2ggcmVnZXhwIHN0cmluZykKKyAgICAgIChtYXRjaC1zdHJpbmcgbiBzdHJpbmcpKSkp CiA7OzsjIyNhdXRvbG9hZAotKGRlZnVuIHJlZ2V4cC1tYXRjaCAocmVnZXhwIHN0cmluZyAm b3B0aW9uYWwgbikKKyhkZWZ1biByZWdleHAtbWF0Y2ggKHJlZ2V4cCBzdHJpbmcgJm9wdGlv bmFsIG4gaW5oaWJpdC1tb2RpZnkpCiAgICJSZXR1cm4gdGhlIE4gLXRoIG1hdGNoZWQgc3Vi c3RyaW5nIGZvciBSRUdFWFAgaW4gU1RSSU5HLgogTiBkZWZhdWx0cyB0byAwICh0aGUgd2hv bGUgbWF0Y2gpLgotCi1UaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgbWF0Y2gg ZGF0YS4iCitXaXRoIG5vbi1uaWwgSU5ISUJJVC1NT0RJRlksIGRvZXMgbm90IGNoYW5nZSB0 aGUgbWF0Y2ggZGF0YS4iCiAgIChkZWNsYXJlIChwdXJlIHQpIChzaWRlLWVmZmVjdC1mcmVl IHQpKQotICAobGV0ICgobiAob3IgbiAwKSkpCi0gICAgKHNhdmUtbWF0Y2gtZGF0YQotICAg ICAgKHdoZW4gKHN0cmluZy1tYXRjaCByZWdleHAgc3RyaW5nKQotICAgICAgICAobWF0Y2gt c3RyaW5nIG4gc3RyaW5nKSkpKSkKLQorICAoaWYgaW5oaWJpdC1tb2RpZnkKKyAgICAgIChz YXZlLW1hdGNoLWRhdGEgKHJlZ2V4cC0tbWF0Y2ggcmVnZXhwIHN0cmluZyBuKSkKKyAgICAo cmVnZXhwLS1tYXRjaCByZWdleHAgc3RyaW5nIG4pKSkKKworKGRlZnVuIHJlZ2V4cC0tbWF0 Y2gqIChyZWdleHAgc3RyaW5nKQorICAod2hlbiAoc3RyaW5nLW1hdGNoIHJlZ2V4cCBzdHJp bmcpCisgICAgKGxldCAoKG1hdGNoZWQtZGF0YSAobWF0Y2gtZGF0YSkpCisgICAgICAgICAg bWF0Y2hlcyBiZWcgZW5kKQorICAgICAgKHdoaWxlIG1hdGNoZWQtZGF0YQorICAgICAgICAo c2V0cSBiZWcgKHBvcCBtYXRjaGVkLWRhdGEpKQorICAgICAgICAoc2V0cSBlbmQgKHBvcCBt YXRjaGVkLWRhdGEpKQorICAgICAgICAocHVzaCAoYW5kIGJlZyBlbmQKKyAgICAgICAgICAg ICAgICAgICAoc3Vic3RyaW5nIHN0cmluZyBiZWcgZW5kKSkKKyAgICAgICAgICAgICAgbWF0 Y2hlcykpCisgICAgICAobnJldmVyc2UgbWF0Y2hlcykpKSkKIDs7OyMjI2F1dG9sb2FkCi0o ZGVmdW4gcmVnZXhwLW1hdGNoKiAocmVnZXhwIHN0cmluZykKKyhkZWZ1biByZWdleHAtbWF0 Y2gqIChyZWdleHAgc3RyaW5nICZvcHRpb25hbCBpbmhpYml0LW1vZGlmeSkKICAgIlJldHVy biBhIGxpc3Qgb2YgbWF0Y2hlZCBzdWJzdHJpbmdzIGZvciBSRUdFWFAgaW4gU1RSSU5HLgot Ci1UaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgbWF0Y2ggZGF0YS4iCitXaXRo IG5vbi1uaWwgSU5ISUJJVC1NT0RJRlksIGRvZXMgbm90IGNoYW5nZSB0aGUgbWF0Y2ggZGF0 YS4gIgogICAoZGVjbGFyZSAocHVyZSB0KSAoc2lkZS1lZmZlY3QtZnJlZSB0KSkKLSAgKHNh dmUtbWF0Y2gtZGF0YQotICAgICh3aGVuIChzdHJpbmctbWF0Y2ggcmVnZXhwIHN0cmluZykK LSAgICAgIChsZXQgKChtYXRjaGVkLWRhdGEgKG1hdGNoLWRhdGEpKQotICAgICAgICAgICAg bWF0Y2hlcyBiZWcgZW5kKQotICAgICAgICAod2hpbGUgbWF0Y2hlZC1kYXRhCi0gICAgICAg ICAgKHNldHEgYmVnIChwb3AgbWF0Y2hlZC1kYXRhKSkKLSAgICAgICAgICAoc2V0cSBlbmQg KHBvcCBtYXRjaGVkLWRhdGEpKQotICAgICAgICAgIChwdXNoIChhbmQgYmVnIGVuZAotICAg ICAgICAgICAgICAgICAgICAgKHN1YnN0cmluZyBzdHJpbmcgYmVnIGVuZCkpCi0gICAgICAg ICAgICAgICAgbWF0Y2hlcykpCi0gICAgICAgIChucmV2ZXJzZSBtYXRjaGVzKSkpKSkKKyAg KGlmIGluaGliaXQtbW9kaWZ5CisgICAgICAoc2F2ZS1tYXRjaC1kYXRhIChyZWdleHAtLW1h dGNoKiByZWdleHAgc3RyaW5nKSkKKyAgICAocmVnZXhwLS1tYXRjaCogcmVnZXhwIHN0cmlu ZykpKQogCiA7OzsjIyNhdXRvbG9hZAogKGRlZnVuIGFkZC1kaXNwbGF5LXRleHQtcHJvcGVy dHkgKHN0YXJ0IGVuZCBwcm9wIHZhbHVlCi0tIAoyLjM4LjEKCg== --------------i3aylt36W08NTsQLjZ00d5iQ--