From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Lynn Winebarger Newsgroups: gmane.emacs.devel Subject: Re: define-inline-pure Date: Mon, 15 May 2023 20:02:58 -0400 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000ee4bb205fbc44b82" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="27709"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue May 16 02:04:22 2023 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 1pyiAv-00075f-O6 for ged-emacs-devel@m.gmane-mx.org; Tue, 16 May 2023 02:04:21 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pyi9u-0005Tr-OZ; Mon, 15 May 2023 20:03:18 -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 1pyi9t-0005TT-1D for emacs-devel@gnu.org; Mon, 15 May 2023 20:03:17 -0400 Original-Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pyi9q-0000Gq-L3 for emacs-devel@gnu.org; Mon, 15 May 2023 20:03:16 -0400 Original-Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-64a9335a8e7so1597535b3a.0 for ; Mon, 15 May 2023 17:03:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684195390; x=1686787390; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=y9+biyUWWrVLC0XKIdIxdlKMKsMAcpfq7NjsUvIcCwI=; b=WQiIRMtSyAp1n62R8iHxpu2FV1LTAmt8UHnjKBGaO2OP99vl6GrJcIjWfsE/QXWElG vdExF4l7wPrQHtmhEJM79+HVgHoNxIdMzjrcFoTI8EZsvhcoQSn28D3cD1MsmWybD3FR UWpVYSMI5DqSdcixgIGn57tQuQShTDuU3+beuH9XKEaisbyTT3G8iIWrn6D7TcNRojmN 2xxChEr+RiEUr8EGDI7siMaNyvHIHv6kvUx2JsgX9g4Ki8CpwOoOag78du4Gohm3u4UI 3iQ5RhzNAOtD1HJL18QOC1+K3+Yvg4cuWKmRKZY0AiGZbGHctlWArmexwZVuy1iNR9fL UUBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684195390; x=1686787390; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=y9+biyUWWrVLC0XKIdIxdlKMKsMAcpfq7NjsUvIcCwI=; b=PvyLgcGlO3k2hD2WQ0uVxvGmIw+SfuQbr3nNBn2L3KPbV1GTMYxIqE6+nbVD2YhhEg DkgvhPmFAAMD+wYlNXhVxXBf0xSuwG5F6P863gCYeotm/LsiEme/3cTjapFaHhMxOeaR Avs2aWewNcchgzjVlLKOVZGfs7wEe6/dHyIFhZl0vyObCIX/aHAT35k//TMhdJpUMBwU RSNYhhTSUdB0n3QHQSEhoyNP8O7o9RFvtwDdL+BansNZKtOPBtOCmsX6eipIJquA7gxZ MOuOWjCIiM0UjAR2klXa1xtlnrQAb7D4PsXa1jrfVam8EGxb5Fda/4yCXORQFtds21jf qMXA== X-Gm-Message-State: AC+VfDx1OA9FfYfPXwi0+leAtmq94wSN5+L7EOJFTbNBn2HOlvtV14Rp X6US0mfSBRjvYwMuL54OkXZyfAh0EzybcdRSJiB+VWnV X-Google-Smtp-Source: ACHHUZ7wBxX1jfFRq7cUg2f5XN+U40mC3iNXMZ2ExBqrtmG5qN+OID785lZy5p+cKC1YL4ei6eq6tjF2xOt8mn5YB6Q= X-Received: by 2002:a17:90a:ea83:b0:24e:f33:8a1 with SMTP id h3-20020a17090aea8300b0024e0f3308a1mr46810299pjz.1.1684195389614; Mon, 15 May 2023 17:03:09 -0700 (PDT) In-Reply-To: Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=owinebar@gmail.com; helo=mail-pf1-x42c.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action 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: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:306136 Archived-At: --000000000000ee4bb205fbc44b82 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I have attached a patch to master that adds "define-inline-pure-subr" to inline.el and converts all defined functions marked as pure to be inlined. The approach in the patch reflects my intention to include this feature in an external package. I'm sure the maintainers would modify the source of the pure functions to use it directly, if they were interested in the feature. This version bootstraps and "make check" succeeds at least. It also works as intended: (require 'byte-opt) (require 'inline) (macroexpand-all '(+ 5 7)) =3D> 12 (macroexpand-all '(cl-typep 5 'integer)) =3D> t So, the user can see the effects of "compile-time" evaluation of constant expressions in the source code instead of disassembling the generated byte-code. Lynn On Fri, May 12, 2023 at 9:02=E2=80=AFPM Lynn Winebarger wrote: > > I adapted the define-inline function to allow redefinition of existing > function names to be an inlining version that will evaluate constant > arguments during macroexpand-all, without involvement of the compiler. > The code is below this message. > > For example, for a truly pure function > (define-inline-pure-subr + (&rest numbers-or-markers)) > > It can also be used for not-quite-pure functions that may still be > desirable to evaluate at compile-time using an explicit inline-* > variant: > (define-inline-pure-subr format (string &rest objects) inline-format) > > There is code following the definition of define-inline-pure-subr to > find all function symbols declared pure and perform the redefinition > on them. Emacs doesn't immediately fail when I run it, but I haven't > recompiled emacs with the code added to inline.el. > > At the bottom is a variant of define-inline, define-inline-pure, that > replicates define-inline, except it evaluates the function call during > macroexpansion if all arguments expand to constant expressions. I > have not tested it at all. > > The envisioned use case is dispatching macros to generic functions to > get specialization at compile-time. Presumably the byte-compiler's > optimization code might be slightly simplified as well. > > Lynn --000000000000ee4bb205fbc44b82 Content-Type: text/x-patch; charset="US-ASCII"; name="inline-pure.diff" Content-Disposition: attachment; filename="inline-pure.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lhpi4wqw0 ZGlmZiAtLWdpdCBhL2xpc3AvZW1hY3MtbGlzcC9pbmxpbmUuZWwgYi9saXNwL2VtYWNzLWxpc3Av aW5saW5lLmVsCmluZGV4IGY3NjFmZGEyOWE4Li5mMzE4NTBkYWZhZCAxMDA2NDQKLS0tIGEvbGlz cC9lbWFjcy1saXNwL2lubGluZS5lbAorKysgYi9saXNwL2VtYWNzLWxpc3AvaW5saW5lLmVsCkBA IC0yNjYsNSArMjY2LDIzNSBAQCBpbmxpbmUtLXdhcm5pbmcKICAgICAgICAgICA7OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbmxpbmUtLWZvcm0pCiAgICAgICAgICAgaW5saW5lLS1mb3Jt KSkKIAorKGRlZnVuIGlubGluZS1leHRyYWN0LWFyZ2xpc3QgKGZ4bi1uYW1lKQorICAiQ29uc3Ry dWN0IGFyZ2xpc3QgYmFzZWQgb24gRlhOIGRvY3N0cmluZyBpZiBwcm92aWRlZCBpbiBoZWxwIGZv cm1hdC4iCisgIChsZXQqICgocyAob3IgKGRvY3VtZW50YXRpb24gZnhuLW5hbWUgdCkgIiIpKQor CSAoZm91bmQgKHN0cmluZy1tYXRjaCAiXG4oZm4gXFwoW15cKV0qXFwpKSQiIHMpKQorCSAobiAo bGVuZ3RoICJcblwoZm4gIikpKQorICAgIChpZiAobm90IGZvdW5kKQorCTs7IHB1bnQKKwknKCZy ZXN0IGFyZ3MpCisgICAgICAobGV0ICgoYXJnbGlzdC1zdHJpbmcKKwkgICAgIChmb3JtYXQgIlwo JXMiCisJCSAgICAgKGRvd25jYXNlIChzdWJzdHJpbmcgcyAoKyBmb3VuZCBuKSkpKSkpCisJKHdp dGgtdGVtcC1idWZmZXIKKwkgIChpbnNlcnQgYXJnbGlzdC1zdHJpbmcpCisJICAoZ290by1jaGFy IChwb2ludC1taW4pKQorCSAgKHJlYWQgKGN1cnJlbnQtYnVmZmVyKSkpKSkpKQorCisKKyhkZWZ1 biBpbmxpbmUtYXBwbGljYXRpb24tZm9ybSAoZnhuIGFyZ3MgJm9wdGlvbmFsIHJhbmRzKQorICAi Q29uc3RydWN0IGFuIGFwcGxpY2F0aW9uIGZvcm0gZm9yIGZ1bmN0aW9uIEZYTiB3aXRoIGFyZ3Vt ZW50IGxpc3QgQVJHUyBhbmQgb3BlcmFuZHMgUkFORFMuIgorICAobGV0ICgobHMgYXJncykKKwko cmVxdWlyZWQgMCkKKwlwYXJhbXMgb3B0IHJlc3RwKQorICAgICh3aGlsZSBscworICAgICAgKHBj YXNlIGxzCisJKGAoJnJlc3QgLHBhcmFtKQorCSAocHVzaCBwYXJhbSBwYXJhbXMpCisJIChzZXRx IHJlc3RwIHQpCisJIChzZXRxIGxzIG5pbCkpCisJKGAoJnJlc3QgLiAsX2lnbm9yZWQpCisJIChl cnJvciAiYXJndW1lbnQgbGlzdDogJXM6IG1hbGZvcm1lZCAmcmVzdCBwYXJhbWV0ZXIgJVMiIGZ4 biBhcmdzKSkKKwkoYCgmb3B0aW9uYWwgLiAsX2lnbm9yZWQpCisJICh3aGVuIG9wdAorCSAgIChl cnJvciAiYXJndW1lbnQgbGlzdDogJXM6IG11bHRpcGxlICZvcHRpb25hbCBtYXJrZXJzICVTIgor CQkgIGZ4biBhcmdzKSkKKwkgKHBvcCBscykKKwkgKHNldHEgb3B0IDApKQorCShgKCxwYXJhbSAu ICxfaWdub3JlZCkKKwkgKHB1c2ggcGFyYW0gcGFyYW1zKQorCSAocG9wIGxzKQorCSAoaWYgb3B0 CisJICAgICAoc2V0cSBvcHQgKDErIG9wdCkpCisJICAgKHNldHEgcmVxdWlyZWQgKDErIHJlcXVp cmVkKSkpKQorCShfCisJIChlcnJvciAibWFsZm9ybWVkIGFyZ3VtZW50IGxpc3Q6ICVzOiAlUyIg ZnhuIGFyZ3MpKSkpCisgICAgKHNldHEgcGFyYW1zIChucmV2ZXJzZSBwYXJhbXMpKQorICAgICh1 bmxlc3MgKG9yIChzdWJycCBmeG4pCisgICAgICAgICAgICAgICAgKGJ5dGUtY29kZS1mdW5jdGlv bi1wIGZ4bikKKyAgICAgICAgICAgICAgICAoY29tcGlsZWQtZnVuY3Rpb24tcCBmeG4pCisgICAg ICAgICAgICAgICAgKHN5bWJvbHAgZnhuKQorICAgICAgICAgICAgICAgIChhbmQgKGNvbnNwIGZ4 bikKKyAgICAgICAgICAgICAgICAgICAgIChlcSAoY2FyIGZ4bikgJ2Z1bmN0aW9uKSkpCisgICAg ICAoc2V0cSBmeG4gKGxpc3QgJ2Z1bmN0aW9uIGZ4bikpKQorICAgICh1bmxlc3Mgb3B0CisgICAg ICAoc2V0cSBvcHQgMCkpCisgICAgKGlmIHJhbmRzCisgICAgICAgIChwcm9nbgorICAgICAgICAg IDs7IChkaXNwbGF5LXdhcm5pbmcgJyhpbmxpbmUpCisgICAgICAgICAgOzsgICAgICAgICAgICAg ICAgICAoZm9ybWF0ICJTb3VyY2Ugb3BlcmFuZHM6ICVTICVTIiBmeG4gcmFuZHMpKQorICAgICAg ICAgIGAoLGZ4biAsQHJhbmRzKSkKKyAgICAgIChpZiByZXN0cAorCSAgYChhcHBseSAsKGlmIChz eW1ib2xwIGZ4bikgYCMnLGZ4biBmeG4pICxAcGFyYW1zKQorICAgICAgICBgKCxmeG4gLEBwYXJh bXMpKSkpKQorCis7OyBEZXJpdmVkIGZyb20gaW5saW5lLmVsCisoZGVmdW4gaW5saW5lLS10ZXN0 Y29uc3QtZXhwLXAgKGV4cCkKKyAgKG9yIChtYWNyb2V4cC1jb25zdC1wIGV4cCkKKyAgICAgIChl cSAoY2FyLXNhZmUgZXhwKSAnZnVuY3Rpb24pKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZtYWNy byBkZWZpbmUtaW5saW5lLXB1cmUtc3ViciAobmFtZSBhcmdzICZvcHRpb25hbCBuZXctbmFtZSkK KyAgIkRlZmluZSBORVctTkFNRSB0byBpbmxpbmUgdGhlIHN1YnIgY3VycmVudGx5IGJvdW5kIHRv IE5BTUUuCitUaGUgZnVuY3Rpb24gbXVzdCBoYXZlIHRoZSBzaWduYXR1cmUgc3BlY2lmaWVkIGJ5 IEFSR1MuCitUaGlzIGlubGluaW5nIGVuYWJsZXMgY29tcGlsZS10aW1lIGV2YWx1YXRpb24gZHVy aW5nIG1hY3JvZXhwYW5zaW9uCityYXRoZXIgdGhhbiBkdXJpbmcgdGhlIGJ5dGUtY29tcGlsZXIn cyBvcHRpbWl6YXRpb24gcGhhc2UuCitORVctTkFNRSBkZWZhdWx0cyB0byBOQU1FLiIKKyAgKGRl Y2xhcmUgKGluZGVudCBkZWZ1bikgKGRlYnVnIGRlZnVuKSAoZG9jLXN0cmluZyAzKSkKKyAgOzsg KG1lc3NhZ2UgIlJlZGVmaW5pbmcgYXMgaW5saW5lICVzICVTICVzIiBuYW1lIGFyZ3MgbmV3LW5h bWUpCisgICh3aGVuIChhbmQgbmV3LW5hbWUgKG5vdCAoZXEgbmV3LW5hbWUgbmFtZSkpKQorICAg IChzZXRwbGlzdCBuZXctbmFtZSAoc2VxLWNvcHkgKHN5bWJvbC1wbGlzdCBuYW1lKSkpKQorICAo dW5sZXNzIG5ldy1uYW1lCisgICAgKHNldHEgbmV3LW5hbWUgbmFtZSkpCisgIChsZXQgKChkb2Mg KGRvY3VtZW50YXRpb24gbmFtZSB0KSkKKwkoZnhuIChzeW1ib2wtZnVuY3Rpb24gbmFtZSkpCisg ICAgICAgIChmeG4tc3ltIChpbnRlcm4gKGZvcm1hdCAiaW5saW5lLSVzIiBuZXctbmFtZSkpKQor ICAgICAgICAoY20tbmFtZSAoaW50ZXJuIChmb3JtYXQgIiVzLS1pbmxpbmVyIiBuZXctbmFtZSkp KQorCWFwcC1mb3JtKQorICAgICh3aGlsZSAoc3ltYm9scCBmeG4pCisgICAgICAoc2V0cSBmeG4g KHN5bWJvbC1mdW5jdGlvbiBmeG4pKSkKKyAgICAodW5sZXNzIChvciAoc3VicnAgZnhuKQorICAg ICAgICAgICAgICAgIChieXRlLWNvZGUtZnVuY3Rpb24tcCBmeG4pCisgICAgICAgICAgICAgICAg KGNvbXBpbGVkLWZ1bmN0aW9uLXAgZnhuKQorICAgICAgICAgICAgICAgIChhbmQgKGNvbnNwIGZ4 bikKKyAgICAgICAgICAgICAgICAgICAgIChvciAoZXEgKGNhciBmeG4pICdmdW5jdGlvbikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAoZXEgKGNhciBmeG4pICdsYW1iZGEpKSkpCisgICAgICAo c2V0cSBmeG4gKGxpc3QgJ2Z1bmN0aW9uIGZ4bikpKQorICAgIChmdW5jdGlvbi1wdXQgbmV3LW5h bWUgJ2NvbXBpbGVyLW1hY3JvIG5pbCkgOyBzZWUgZGVmaW5lLWlubGluZQorICAgIChzZXRxIGFw cC1mb3JtIChpbmxpbmUtYXBwbGljYXRpb24tZm9ybSBmeG4tc3ltIGFyZ3MpKQorICAgIChmc2V0 IGZ4bi1zeW0gZnhuKQorICAgIGAocHJvZ24KKyAgICAgICAoZnNldCAnLGZ4bi1zeW0gLGZ4bikK KyAgICAgICAoZGVmdW4gLG5ldy1uYW1lICxhcmdzCisgICAgICAgICAsZG9jCisgICAgICAgICAo ZnNldCAnLGZ4bi1zeW0gLGZ4bikKKyAgICAgICAgICwoaWYgKGVxIG5ldy1uYW1lIG5hbWUpCisg ICAgICAgICAgICAgIGAocHJvZ24KKyAgICAgICAgICAgICAgICAgKGZzZXQgJyxuZXctbmFtZSAs ZnhuKQorICAgICAgICAgICAgICAgICA7OyBzZWUgZGVmaW5lLWlubGluZQorICAgICAgICAgICAg ICAgICAoZnVuY3Rpb24tcHV0ICcsbmV3LW5hbWUgJ2NvbXBpbGVyLW1hY3JvICcsY20tbmFtZSkp CisgICAgICAgICAgICA7OyBmaXJzdCBwYXNzIGVuc3VyZSBkZWZpbml0aW9uIG9mIHVuZGVybHlp bmcgZnVuY3Rpb24KKyAgICAgICAgICAgIDs7IHRoZW4gcmVkZWZpbmUgdG8gYnlwYXNzIHRoaXMg dHJhbXBvbGluZQorICAgICAgICAgICAgYCgsKGlmIChtZW1xIChnZXQgbmFtZSAnYnl0ZS1vcHRp bWl6ZXIpCisJCSAgICAgICAgICcobmlsIGJ5dGUtY29tcGlsZS1pbmxpbmUtZXhwYW5kKSkKKwkJ ICAgJ2RlZnN1YnN0CisJICAgICAgICAgJ2RlZnVuKQorCSAgICAgICxuZXctbmFtZSAsYXJncyAs ZG9jCisgICAgICAgICAgICAgIChkZWNsYXJlIChjb21waWxlci1tYWNybyAsY20tbmFtZSkpCisJ ICAgICAgLGFwcC1mb3JtKSkKKyAgICAgICAgICxhcHAtZm9ybSkKKyAgICAgICAoZXZhbC1hbmQt Y29tcGlsZQorICAgICAgICAgKGRlZnVuICxjbS1uYW1lICwoY29ucyAnaW5saW5lLS1mb3JtIGFy Z3MpCisgICAgICAgICAgIChmc2V0ICcsZnhuLXN5bSAsZnhuKQorICAgICAgICAgICAoZGVmdW4g LGNtLW5hbWUgLChjb25zICdpbmxpbmUtLWZvcm0gYXJncykKKwkgICAgIChsZXQqICgocmFuZHMg KG1hcGNhciAjJ21hY3JvZXhwYW5kLWFsbCAoY2RyIGlubGluZS0tZm9ybSkpKQorCQkgICAgKGV4 cGFuZGVyLWFwcC1mb3JtCisgICAgICAgICAgICAgICAgICAgICBgKCwnLGZ4bi1zeW0gLEByYW5k cykpKQorCSAgICAgICAoaWYgKHNlcS1ldmVyeS1wICMnaW5saW5lLS10ZXN0Y29uc3QtZXhwLXAg cmFuZHMpCisgICAgICAgICAgICAgICAgICAgKHByb2duCisJCSAgICAgKGxldCAoKHIgKGV2YWwg ZXhwYW5kZXItYXBwLWZvcm0pKSkKKwkJICAgICAgICh1bmxlc3MgKG1hY3JvZXhwLWNvbnN0LXAg cikKKwkJICAgICAgICAgKHNldHEgciBgKHF1b3RlICxyKSkpCisJCSAgICAgICByKSkKKwkgICAg ICAgICBpbmxpbmUtLWZvcm0pKSkKKyAgICAgICAgICAgLChpbmxpbmUtYXBwbGljYXRpb24tZm9y bSBjbS1uYW1lIChjb25zICdpbmxpbmUtLWZvcm0gYXJncykpKSkKKyAgICAgICAoZnVuY3Rpb24t cHV0ICcsbmV3LW5hbWUgJ2NvbXBpbGVyLW1hY3JvICcsY20tbmFtZSkpKSkKKworOzs7IyMjYXV0 b2xvYWQKKyhkZWZ2YXIgaW5saW5lLS1pbmxpbmVkLXByaW1pdGl2ZXMgbmlsCisgICJBc3NvY2lh dGlvbiBsaXN0IG9mIHB1cmUgZnVuY3Rpb25zIGFuZCB0aGVpciBhcmd1bWVudCBsaXN0cyBmb3Ig aW5saW5pbmcuIikKKworKGRlZnZhciBpbmxpbmUtLWRlZmluaW5nLWlubGluZXMgbmlsKQorKGRl ZnVuIGlubGluZS1hbGwtcHVyZS1mdW5jdGlvbnMgKCkKKyAgIkNyZWF0ZSBtYWNyby1leHBhbnNp b24gZXZhbHVhdGluZyB2ZXJzaW9ucyBvZiBrbm93biBwdXJlIGZ1bmN0aW9ucy4KK1RoZXNlIGlu bGluZSB2ZXJzaW9ucyByZWR1Y2UgY29uc3RhbnQgYXJndW1lbnRzIGF0IG1hY3JvLWV4cGFuc2lv biB0aW1lIHdpdGhvdXQKK2ludm9sdmVtZW50IG9mIHRoZSBieXRlLWNvbXBpbGVyLiIKKyAgKGxl dCAoKGlubGluZS0tZGVmaW5pbmctaW5saW5lcyB0KSkKKyAgICAoc2V0cSBpbmxpbmUtLWlubGlu ZWQtcHJpbWl0aXZlcworICAgICAgICAgIChsZXQgKHB1cmVmdW5jcykKKyAgICAgICAgICAgICht YXBhdG9tcyAobGFtYmRhICh4KQorCQkgICAgICAgIChhbmQgKGZib3VuZHAgeCkgKGdldCB4ICdw dXJlKQorCQkgICAgICAgICAgICAgKHB1c2ggYCgseCAuICx4KSBwdXJlZnVuY3MpKSkpCisgICAg ICAgICAgICA7OyB0aGVzZSBhcmUgbm90IHRydWx5IHB1cmUKKyAgICAgICAgICAgIDs7IG1ha2Ug aW5saW5lLSogdmFyaWFudHMgYXZhaWxhYmxlIGZvciBleHBsaWNpdCB1c2UKKyAgICAgICAgICAg IChwdXNoICcoZm9ybWF0IC4gaW5saW5lLWZvcm1hdCkgcHVyZWZ1bmNzKQorICAgICAgICAgICAg KHB1c2ggJyhpbnRlcm4gLiBpbmxpbmUtaW50ZXJuKSBwdXJlZnVuY3MpCisgICAgICAgICAgICAo c2V0cSBwdXJlZnVuY3MgKG5yZXZlcnNlIHB1cmVmdW5jcykpCisgICAgICAgICAgICAobWFwY2Fy IChsYW1iZGEgKHgpCisJICAgICAgICAgICAgICBgKCwoY2FyIHgpICwoY2RyIHgpIC4gLChpbmxp bmUtZXh0cmFjdC1hcmdsaXN0IChjYXIgeCkpKSkKKwkgICAgICAgICAgICBwdXJlZnVuY3MpKSkp CisKKyAgICAobWFwYyAobGFtYmRhIChwcikKKwkgICAgKGV2YWwgYChkZWZpbmUtaW5saW5lLXB1 cmUtc3ViciAsKGNhciBwcikgLChjZGRyIHByKSAsKGNhZHIgcHIpKSkpCisgICAgICAgICAgaW5s aW5lLS1pbmxpbmVkLXByaW1pdGl2ZXMpKQorCisod2hlbiAoYW5kIChvciAoZmVhdHVyZXAgJ2J5 dGVjb21wKSAoZmVhdHVyZXAgJ2J5dGUtb3B0KSkKKyAgICAgICAgICAgKGZib3VuZHAgJ2Z1bmN0 aW9uLWRvY3VtZW50YXRpb24pCisgICAgICAgICAgIChub3QgaW5saW5lLS1kZWZpbmluZy1pbmxp bmVzKSkKKyAgKGlubGluZS1hbGwtcHVyZS1mdW5jdGlvbnMpKQorCis7OyAoZGVmbWFjcm8gZGVm aW5lLWlubGluZS1wdXJlIChuYW1lIGFyZ3MgJnJlc3QgYm9keSkKKzs7ICAgIkRlZmluZSBOQU1F IGFzIGlubGluZWQgcHVyZSBmdW5jdGlvbiB3aXRoIHNpZ25hdHVyZSBBUkdTLgorOzsgQk9EWSB3 aWxsIGJlIGV2YWx1YXRlZCBkdXJpbmcgbWFjcm9leHBhbnNpb24gaWYgZ2l2ZW4gY29uc3RhbnQg YXJndW1lbnRzLiIKKzs7ICAgKGRlY2xhcmUgKGluZGVudCBkZWZ1bikgKGRlYnVnIGRlZnVuKSAo ZG9jLXN0cmluZyAzKSkKKzs7ICAgKGxldCAoKGRvYyAoaWYgKHN0cmluZ3AgKGNhci1zYWZlIGJv ZHkpKSAobGlzdCAocG9wIGJvZHkpKSkpCis7OyAgICAgICAgIChkZWNsYXJlcyAoaWYgKGVxIChj YXItc2FmZSAoY2FyLXNhZmUgYm9keSkpICdkZWNsYXJlKSAocG9wIGJvZHkpKSkKKzs7ICAgICAg ICAgKGNtLW5hbWUgKGludGVybiAoZm9ybWF0ICIlcy0taW5saW5lciIgbmFtZSkpKQorOzsgICAg ICAgICAoYm9keWV4cCAobWFjcm9leHAtcHJvZ24gYm9keSkpCis7OyAJZXhwYW5kZWQtY3QtYm9k eSBjdC1meG4gYXBwLWZvcm0pCis7OyAgICAgKGZ1bmN0aW9uLXB1dCBuYW1lICdjb21waWxlci1t YWNybyBuaWwpIDsgc2VlIGRlZmluZS1pbmxpbmUKKzs7ICAgICAoc2V0cSBhcHAtZm9ybSAoaW5s aW5lLWFwcGxpY2F0aW9uLWZvcm0gZnhuIGFyZ3MpKQorOzsgICAgIChzZXRxIGV4cGFuZGVkLWN0 LWJvZHkKKzs7IAkgIGAoY2F0Y2ggJ2lubGluZS0tanVzdC11c2UKKzs7IAkgICAgICwobWFjcm9l eHBhbmQtYWxsCis7OyAJICAgICAgIGJvZHlleHAKKzs7IAkgICAgICAgYCgoaW5saW5lLXF1b3Rl IC4gaW5saW5lLS1kby1xdW90ZSkKKzs7IAkJIDs7IChpbmxpbmUtXGAgLiBpbmxpbmUtLWRvLXF1 b3RlKQorOzsgCQkgKGlubGluZS0tbGV0ZXZhbCAuIGlubGluZS0tZG8tbGV0ZXZhbCkKKzs7IAkJ IChpbmxpbmUtLWxldGxpc3RldmFsCis7OyAJCSAgLiBpbmxpbmUtLWRvLWxldGxpc3RldmFsKQor OzsgCQkgKGlubGluZS1jb25zdC1wIC4gaW5saW5lLS10ZXN0Y29uc3QtcCkKKzs7IAkJIChpbmxp bmUtY29uc3QtdmFsIC4gaW5saW5lLS1nZXRjb25zdC12YWwpCis7OyAJCSAoaW5saW5lLWVycm9y IC4gaW5saW5lLS13YXJuaW5nKQorOzsgCQkgLEBtYWNyb2V4cGFuZC1hbGwtZW52aXJvbm1lbnQp KSkpCis7OyAgICAgOzsgY29uc3RydWN0IGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgbm90IGhhdmUK Kzs7ICAgICA7OyBjaXJjdWxhciBkZXBlbmRlbmN5IG9uIHRoZSBmdW5jdGlvbiBzeW1ib2wKKzs7 ICAgICA7OyBiZWluZyBpbmxpbmVkCis7OyAgICAgKHNldHEgY3QtZnhuCis7OyAJICAobGV0ICgo eCAoY2wtZ2Vuc3ltICJ4LSIpKQorOzsgCQkoZXhwYW5kZWQtYm9keQorOzsgCQkgYChjYXRjaCAn aW5saW5lLS1qdXN0LXVzZQorOzsgCQkgICAgLGV4cGFuZGVkLWN0LWJvZHkpKSkKKzs7IAkgICAg KGJ5dGUtY29tcGlsZQorOzsgCSAgICAgYChsYW1iZGEgKCxhcmdzKQorOzsgCQkoY2wtbGFiZWxz ICgoLG5hbWUgLGFyZ3MgLEBleHBhbmRlZC1jdC1ib2R5KSkKKzs7IAkJICAsYXBwLWZvcm0pKSkp KQorOzsgICAgIGAocHJvZ24KKzs7ICAgICAgICAoZGVmdW4gLG5hbWUgLGFyZ3MKKzs7IAkgLEBk b2MKKzs7ICAgICAgICAgIChkZWNsYXJlIChjb21waWxlci1tYWNybyAsY20tbmFtZSkgLEBkZWNs YXJlcykKKzs7ICAgICAgICAgICwobWFjcm9leHBhbmQtYWxsIGJvZHlleHAKKzs7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGAoKGlubGluZS1xdW90ZSAuIGlubGluZS0tZG9udC1xdW90ZSkK Kzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgKGlubGluZS1cYCAuIGlubGluZS0t ZG9udC1xdW90ZSkKKzs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlubGluZS0tbGV0 ZXZhbCAuIGlubGluZS0tZG9udC1sZXRldmFsKQorOzsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaW5saW5lLS1sZXRsaXN0ZXZhbCAuIGlubGluZS0tZG9udC1sZXRsaXN0ZXZhbCkKKzs7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlubGluZS1jb25zdC1wIC4gaW5saW5lLS1h bHdheXNjb25zdC1wKQorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5saW5lLWNv bnN0LXZhbCAuIGlubGluZS0tYWx3YXlzY29uc3QtdmFsKQorOzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaW5saW5lLWVycm9yIC4gaW5saW5lLS1lcnJvcikKKzs7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLEBtYWNyb2V4cGFuZC1hbGwtZW52aXJvbm1lbnQpKSkKKzs7ICAg ICAgICAoZXZhbC1hbmQtY29tcGlsZQorOzsgICAgICAgICAgKGRlZnVuICxjbS1uYW1lICwoY29u cyAnaW5saW5lLS1mb3JtIGFyZ3MpCis7OyAJICAgKGxldCogKChyYW5kcyAobWFwY2FyICMnbWFj cm9leHBhbmQtYWxsIChjZHIgaW5saW5lLS1mb3JtKSkpCis7OyAJCSAgKGV4cGFuZGVyLWFwcC1m b3JtIGAoLCxmeG4gLEByYW5kcykpKQorOzsgCSAgICAgKGlmIChzZXEtZXZlcnktcCAjJ2lubGlu ZS0tdGVzdGNvbnN0LWV4cC1wIHJhbmRzKQorOzsgCQkgKGxldCAoKHIKKzs7IAkJCTs7IChldmFs IGV4cGFuZGVyLWFwcC1mb3JtKSkpCis7OyAJCQkoYXBwbHkgY3QtZnhuIHJhbmRzKSkpCis7OyAJ CSAgICh1bmxlc3MgKG1hY3JvZXhwLWNvbnN0LXAgcikKKzs7IAkJICAgICAoc2V0cSByIGAocXVv dGUgLHIpKSkKKzs7IAkJICAgcikKKzs7IAkgICAgICAgLEBleHBhbmRlZC1jdC1ib2R5KSkpKSkp KQorCiAocHJvdmlkZSAnaW5saW5lKQogOzs7IGlubGluZS5lbCBlbmRzIGhlcmUKZGlmZiAtLWdp dCBhL2xpc3AvbGRlZnMtYm9vdC5lbCBiL2xpc3AvbGRlZnMtYm9vdC5lbAppbmRleCBkZGFhM2Y4 M2ZiYi4uZjVjZWJiNTRmYWEgMTAwNjQ0Ci0tLSBhL2xpc3AvbGRlZnMtYm9vdC5lbAorKysgYi9s aXNwL2xkZWZzLWJvb3QuZWwKQEAgLTE4MjQ5LDYgKzE4MjQ5LDE4IEBAICJpbmZvcm1hdCIKIChm biBOQU1FIEFSR1MgJnJlc3QgQk9EWSkiIG5pbCB0KQogKGZ1bmN0aW9uLXB1dCAnZGVmaW5lLWlu bGluZSAnbGlzcC1pbmRlbnQtZnVuY3Rpb24gJ2RlZnVuKQogKGZ1bmN0aW9uLXB1dCAnZGVmaW5l LWlubGluZSAnZG9jLXN0cmluZy1lbHQgMykKKworCisoYXV0b2xvYWQgJ2RlZmluZS1pbmxpbmUt cHVyZS1zdWJyICJpbmxpbmUiICJcCitEZWZpbmUgTkVXLU5BTUUgdG8gaW5saW5lIHRoZSBzdWJy IGN1cnJlbnRseSBib3VuZCB0byBOQU1FLgorVGhlIGZ1bmN0aW9uIG11c3QgaGF2ZSB0aGUgc2ln bmF0dXJlIHNwZWNpZmllZCBieSBBUkdTLgorVGhpcyBpbmxpbmluZyBlbmFibGVzIGNvbXBpbGUt dGltZSBldmFsdWF0aW9uIGR1cmluZyBtYWNyb2V4cGFuc2lvbgorcmF0aGVyIHRoYW4gZHVyaW5n IHRoZSBieXRlLWNvbXBpbGVyJ3Mgb3B0aW1pemF0aW9uIHBoYXNlLgorTkVXLU5BTUUgZGVmYXVs dHMgdG8gTkFNRS4iKQorCisoZGVmdmFyIGlubGluZS0taW5saW5lZC1wcmltaXRpdmVzIG5pbCAi XAorQXNzb2NpYXRpb24gbGlzdCBvZiBwdXJlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgYXJndW1lbnQg bGlzdHMgZm9yIGlubGluaW5nLiIpCisKIChyZWdpc3Rlci1kZWZpbml0aW9uLXByZWZpeGVzICJp bmxpbmUiICcoImlubGluZS0iKSkKIAogDAo= --000000000000ee4bb205fbc44b82--