Received: (at 79982) by debbugs.gnu.org; 20 Dec 2025 12:31:01 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Dec 20 07:31:01 2025
Received: from localhost ([127.0.0.1]:48429 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vWw6u-0001M5-PT
for submit <at> debbugs.gnu.org; Sat, 20 Dec 2025 07:31:01 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:50524)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vWw6s-000171-L3
for 79982 <at> debbugs.gnu.org; Sat, 20 Dec 2025 07:30:59 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
id 1vWw6m-0005Zq-9r; Sat, 20 Dec 2025 07:30:52 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
Date; bh=rHoZ3aFnlZ7CJPtjhUot2XheNhoBHenXs7t/8ryQkLM=; b=A4Ox4Pm2ilWr1djuiOyw
c9+h4cBzfO+hoTPXiaJxVCSMGr+PO/mjgi+Ba/djsDnOnwGOIdEWv4ozgbMTNC5Axx+xhVajFqqLN
X0WV/KOSDE1quMDSR+iUiLAMzEKw6BPpB+ZOCdWzxxmlWtT0uHkag5MWqt3WKfshkTshUMEw4QfRX
4mS3/a/uvA4M3dXgKpPRfpCH5sh67veyOc6VAZmlwNbLHI+Uf1nf6GYRQ05l0SJcfEsS338B8ijxj
uChzTtYIjHKEU0ZElpsieiCRTL59cYto2grkihF1n9oUsAVEtPS5zF+7KteyxjlMcmTbzPARQRmTr
djNLabxmsqFH5Q==;
Date: Sat, 20 Dec 2025 14:30:49 +0200
Message-Id: <86ldixz66e.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
In-Reply-To: <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN>
(message from =?utf-8?Q?St=C3=A9phane?= Marks on Wed, 10 Dec 2025 17:18:31
-0500)
Subject: Re: bug#79982: [PATCH] Add vtable buffer slot,
[PATCH] Add vtable buffer slot
References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN>
<iero6o6s75r.fsf@HIDDEN>
<CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN>
<ierikeerwu7.fsf_-_@HIDDEN>
<CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79982
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN,
ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, visuweshm@HIDDEN,
adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)
> Cc: Kristoffer Balintona <krisbalintona@HIDDEN>,
> Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN,
> 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>,
> Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
> Augusto Stoffel <arstoffel@HIDDEN>
> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Wed, 10 Dec 2025 17:18:31 -0500
>
> Thanks. Revised patch, attached. With regard to point vs. window-point, the code seems no worse off than
> before? There is a suite of additional fixes coming that address keeping point stable during operations and
> we can see if there are any ill effects when we get to testing those changes.
I wanted to install this, but vtable-tests fail here:
Test test-vtable--limit-string-with-face-remapped-buffer backtrace:
signal(ert-test-failed (((should (eq 2 (length (vtable--limit-string
ert-fail(((should (eq 2 (length (vtable--limit-string text 50 (curre
(if (unwind-protect (setq value-67 (apply fn-65 args-66)) (setq form
(let (form-description-69) (if (unwind-protect (setq value-67 (apply
(let ((value-67 'ert-form-evaluation-aborted-68)) (let (form-descrip
(let* ((fn-65 #'eq) (args-66 (condition-case err (list 2 (length (vt
(if (> emacs-major-version 30) (let* ((fn-65 #'eq) (args-66 (conditi
(let ((text (propertize "XXXXX" 'face 'variable-pitch))) (face-remap
(progn (let ((text (propertize "XXXXX" 'face 'variable-pitch))) (fac
(unwind-protect (progn (let ((text (propertize "XXXXX" 'face 'variab
(save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn
(let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current
#f(lambda () [t] (let ((temp-buffer (generate-new-buffer " *temp*" t
#f(compiled-function () #<bytecode 0x10250e872e3136f3>)()
handler-bind-1(#f(compiled-function () #<bytecode 0x10250e872e3136f3
ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test
ert-run-test(#s(ert-test :name test-vtable--limit-string-with-face-r
ert-run-or-rerun-test(#s(ert--stats :selector (not (or ... ...)) :te
ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil
ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp))))
ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco
eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n
command-line-1(("-L" ";." "-l" "ert" "--eval" "(setq treesit-extra-l
command-line()
normal-top-level()
Test test-vtable--limit-string-with-face-remapped-buffer condition:
(ert-test-failed
((should (eq 2 (length ...))) :form (eq 2 5) :value nil))
FAILED 1/7 test-vtable--limit-string-with-face-remapped-buffer (0.002743 sec) at lisp/emacs-lisp/vtable-tests.el:127
Could you please fix this and resubmit?
Also, please take this opportunity to fix the log message: add the bug
number and make sure lines are at most 70 columns wide.
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 17 Dec 2025 15:03:32 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 17 10:03:32 2025 Received: from localhost ([127.0.0.1]:43488 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVt3r-0008Vj-Qi for submit <at> debbugs.gnu.org; Wed, 17 Dec 2025 10:03:32 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58388) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vVt3o-0008VS-1d for 79982 <at> debbugs.gnu.org; Wed, 17 Dec 2025 10:03:29 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1vVt3h-00058e-Qh; Wed, 17 Dec 2025 10:03:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=hx957mBzqsmR6CCAj05Q7Cjbl+DgfH0CePzrLTQ4kq8=; b=aPi4hFOtuSbGA/fFDNr0 wqhdS+AagndQRJwqpKpabz3v0wFIALtWtRETP4k4ATqxL26ml16LvAl/H5cfZN87AAvGGUYdcN6NU phuxp+uqgdGklHKaGuX6D2RWxCj+NYUk5lXdF3mbsNGghf29UOEg87OBtGibiRtHncYMCRDF2DBkp 4g0qrf6HbIOIrg1mQU4QoVw/t+buyKDuIl4n28aGmEmMqRgdkCZuZoE69csoct8k2MLjeLNDRQnOk 2Vl9d0y2YGaaeBMRl+2vT5apCsiMkS7VFxNClDHCtWUwI5p8bVmAKxRq1HNIQSASZhTZ4ws2xhiY1 HZMFq3+W8yOTow==; Date: Wed, 17 Dec 2025 17:02:46 +0200 Message-Id: <86h5tp40dl.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> In-Reply-To: <CAN+1HbrakfBTBa+zYxNrFgDXqNd+vN4DmO4CgzKfwPwTmgaj7A@HIDDEN> (message from =?utf-8?Q?St=C3=A9phane?= Marks on Wed, 17 Dec 2025 09:28:02 -0500) Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> <iertsxvd878.fsf@HIDDEN> <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> <CAN+1HbrqF3OqdZQxgWWWmOjTd4UW4Vu64X5mS28M2N50TgzCgQ@HIDDEN> <ierv7i7xv64.fsf@HIDDEN> <CAN+1Hbriar_5zAHd-cTSqDJOUgYzxJPM9i+2CLCPbXRt_DRwQA@HIDDEN> <CAN+1HboS10cjaUJ=ztDWuL0OMur0U3Nzfj=NpSKcrmqZ6eD82A@HIDDEN> <CAO=BR8OAWvVan4emACKBG2+pMs2KeTfR7+VWdQ5dQcWECJEegw@HIDDEN> <CAN+1HbrakfBTBa+zYxNrFgDXqNd+vN4DmO4CgzKfwPwTmgaj7A@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 79982 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, visuweshm@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: Stéphane Marks <shipmints@HIDDEN> > Date: Wed, 17 Dec 2025 09:28:02 -0500 > Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, > ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, > Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, > Augusto Stoffel <arstoffel@HIDDEN>, Eli Zaretskii <eliz@HIDDEN> > > Eli, would you please commit the attached patch? And thank you. Thanks, but there's no need to ping me so soon after your discussion reached an agreement. I had the patch in my queue and intended to get to installing it in a couple of days, after reading that your discussion got to completion. Please ping me only if you see that a week or two have passed and nothing happened.
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 17 Dec 2025 14:28:26 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 17 09:28:26 2025 Received: from localhost ([127.0.0.1]:42305 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVsVt-0006H2-3f for submit <at> debbugs.gnu.org; Wed, 17 Dec 2025 09:28:25 -0500 Received: from mail-vs1-xe36.google.com ([2607:f8b0:4864:20::e36]:45245) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vVsVn-0006FR-6P for 79982 <at> debbugs.gnu.org; Wed, 17 Dec 2025 09:28:23 -0500 Received: by mail-vs1-xe36.google.com with SMTP id ada2fe7eead31-5dd6fbe50c0so2004119137.2 for <79982 <at> debbugs.gnu.org>; Wed, 17 Dec 2025 06:28:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765981693; x=1766586493; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=5YRR+jUbDaMGjt/nvrNooQxsTXLsY9/X7y0r37nVpUs=; b=eJn7YXpMQCJOJyvGDBo6YxzzmOrhZfCVM6agutJovlQk03pJvtPF2M1fD5YhVNk6fF CYC9ySLTTFhB0/jdu9ESXbmiQVYSU1C757vbw/B7ldYFTNvneE2E9OI7fBBUNKTDtd38 5i1s9jK7U+tnjLvePwn9vy+RQZ5kd+F3/cwQmqiKwa4JIo3M9if1mKFHWqUlrNHDtvAY AuUQCtUuOHPVmwUoLnnDFWEmTl3Nldv5VT8i8enVbP2HTvkEgjWPjLtopIqlQEIdBPZg X167vg0qsJX0k0GvlF5TMOhuARnjv8mYrE0/IX0edIaiejv1n1eBMrarjXTnXNmtMqkn JQgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765981693; x=1766586493; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=5YRR+jUbDaMGjt/nvrNooQxsTXLsY9/X7y0r37nVpUs=; b=W8Ja56cDVCb/myuAG2zm01nMlFNVLghWTljywvc3Ye2WQpghv/Ea3aTyWobxf/oTBW l+bkDbn9/S9bLidLyLdcaIwFiusYrOLjV1IvPTBxuDdp5mhD3pH+x/ax5Wg6ZKu9SouV /Dh3aAEZ3wTwShrPlviOs1YOZxSVMoLaXEl1bhIElSIjdW6xrUMzp/RSKMt3TSjT2+Ub uRyIqBGwJ0TkT9u9qbvzEWh8mOXf81QS8Tzk1YOcgfMHJ2t/jPjfcd5nfwfhaFxomsdE GkkQK1MMyryM1IX9/HkK0EQDz03B/pbm0AjhyUZ4yEpU+CHz2y0W3O/JU2azpSoel54s 6R6A== X-Forwarded-Encrypted: i=1; AJvYcCU8cKRINkH/DM5f58cHCEAlSlngB//Hwx6PEBQjjqmdUgiYQ21RektPBDqCz6Cs3MW6NL5KUg==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzbYy4c6sDTJiLvDV4khWPaGJJvqo65Hkz+0h56vw3gUF4DboRB fvY5q1AiMaG3afEDLZu6GGJYtHn7oi6LeSal9NfLnlmluOySBIRcTm0vbvjhEK68QPyDJeaJ8Th 3CZ5LpC8pMhqdJrej8mlu2XPshyga244= X-Gm-Gg: AY/fxX4sHsW3LSes00jBhCTg7kQ4UriTYrmrIofRXK/Q25FAk2pEnNYeVMq/R7srWnT 38wbPCoAPromhryFvv/N14yB11jPUCo9PRfuBbGdJemoQ/QPZEjXctoWvult6YGEmi9/51DuCh3 w+w7rOSkzAr6uQOTlTAkmJCitgTR4/LjC9n/mU0RF7Ea+E+wVsOyVNGExcBH1x9/KLzd3hU+glZ 8a+LUYjXHr51DGbxul2IDdUIKkan/QL9yshILBj+Ab1hwkbU8riRvNT2gwdEEtQAWG6EOo= X-Google-Smtp-Source: AGHT+IFWi4BJyReLkLKbI1aTnrjnavFDRX3ugEcTYIIEV+w58bIAzIx203RYxrRZQtqOsClT7JlbFk8IQe60VRUvDQE= X-Received: by 2002:a05:6102:1515:b0:5db:fe41:747b with SMTP id ada2fe7eead31-5e8276a329bmr5183583137.18.1765981693428; Wed, 17 Dec 2025 06:28:13 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> <iertsxvd878.fsf@HIDDEN> <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> <CAN+1HbrqF3OqdZQxgWWWmOjTd4UW4Vu64X5mS28M2N50TgzCgQ@HIDDEN> <ierv7i7xv64.fsf@HIDDEN> <CAN+1Hbriar_5zAHd-cTSqDJOUgYzxJPM9i+2CLCPbXRt_DRwQA@HIDDEN> <CAN+1HboS10cjaUJ=ztDWuL0OMur0U3Nzfj=NpSKcrmqZ6eD82A@HIDDEN> <CAO=BR8OAWvVan4emACKBG2+pMs2KeTfR7+VWdQ5dQcWECJEegw@HIDDEN> In-Reply-To: <CAO=BR8OAWvVan4emACKBG2+pMs2KeTfR7+VWdQ5dQcWECJEegw@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Wed, 17 Dec 2025 09:28:02 -0500 X-Gm-Features: AQt7F2oFr1-2_gbNPiUtdjlNnLa2Cyvq2_jbve4uRf39i0P9N8XKhJVhF6-l91w Message-ID: <CAN+1HbrakfBTBa+zYxNrFgDXqNd+vN4DmO4CgzKfwPwTmgaj7A@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/mixed; boundary="0000000000008478ad064626a743" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN>, Eli Zaretskii <eliz@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000008478ad064626a743 Content-Type: multipart/alternative; boundary="0000000000008478ac064626a741" --0000000000008478ac064626a741 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Eli, would you please commit the attached patch? And thank you. On Wed, Dec 17, 2025 at 9:12=E2=80=AFAM Spencer Baugh <sbaugh@HIDDEN= m> wrote: > Yes, looks good to me > > On Wed, Dec 17, 2025, 8:42=E2=80=AFAM St=C3=A9phane Marks <shipmints@gmai= l.com> wrote: > >> On Mon, Dec 15, 2025 at 6:29=E2=80=AFPM St=C3=A9phane Marks <shipmints@g= mail.com> >> wrote: >> >>> On Mon, Dec 15, 2025 at 5:00=E2=80=AFPM Spencer Baugh <sbaugh@janestree= t.com> >>> wrote: >>> >>>> St=C3=A9phane Marks <shipmints@HIDDEN> writes: >>>> >>>> > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <shipmi= nts@HIDDEN> >>>> wrote: >>>> > >>>> > On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh < >>>> sbaugh@HIDDEN> wrote: >>>> > >>>> > St=C3=A9phane Marks <shipmints@HIDDEN> writes: >>>> > >>>> > > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks < >>>> shipmints@HIDDEN> wrote: >>>> > > >>>> > > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh < >>>> sbaugh@HIDDEN> wrote: >>>> > > >>>> > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: >>>> > > > --- a/lisp/emacs-lisp/vtable.el >>>> > > > +++ b/lisp/emacs-lisp/vtable.el >>>> > > > @@ -398,56 +403,58 @@ vtable-insert-object >>>> > > ... >>>> > > > + (with-current-buffer (vtable-buffer table) >>>> > > > + (save-excursion >>>> > > >>>> > > So in the end I think the only way to keep the diff to >>>> vtable-insert-object small is >>>> > > if you use (set-buffer (vtable-buffer table)) here instead of >>>> > > with-current-buffer. It's a bit less normal, but it at least >>>> avoids >>>> > > some unnecessary indentation. >>>> > > >>>> > > That is, instead of >>>> > > (with-current-buffer (vtable-buffer table) >>>> > > (save-excursion >>>> > > ...)) >>>> > > >>>> > > do >>>> > > >>>> > > (save-excursion >>>> > > (set-buffer (vtable-buffer table)) >>>> > > ...) >>>> > > >>>> > > (save-excursion saves and restores the current buffer) >>>> > > >>>> > > Thanks for making all these changes. I think after that we >>>> should be >>>> > > good to go. >>>> > > >>>> > > While I appreciate the desire for tiny diffs, I prefer that the >>>> stanzas used in update insert remove functions remain >>>> > consistent >>>> > > and we avoid a special comment explaining why insert is special >>>> saying this was just for indentation. Hrumph. >>>> > > >>>> > > The alternative would be to make them all save-excursion, >>>> set-buffer, if you think that's worthy. >>>> > >>>> > IMO that's worth doing. It also saves indentation, so it's actuall= y >>>> > somewhat useful in all the places we're currently adding a >>>> > with-current-buffer, even if it doesn't avoid a big reindent diff. >>>> > >>>> > I forgot about the compiler warning >>>> > >>>> > emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-current-b= uffer=E2=80=99 >>>> rather than save-excursion+set-buffer >>>> > >>>> > We may also need save-excursion twice, once for what is the ambient >>>> current buffer, and the second to ensure that point doesn't >>>> > move around in the vtable-buffer. Both of these, I think, are >>>> satisfied via with-current-buffer and we avoid the warning. So, >>>> > perhaps, we should bite the bullet and swallow the extra indentatio= n >>>> in vtable-insert-object and use the more robust and simpler >>>> > w-c-b. >>>> > >>>> > I can get a revised patch out quickly. Can we agree on using >>>> with-current-buffer and suffer the few extra indented diff lines? >>>> >>>> Yes, okay, I agree it's fine. I don't think you need to revise anythi= ng >>>> there, your most recent patch is fine. (Except for the other issue I >>>> just emailed about) >>>> >>> >>> Thanks for catching the buffer-local let bindings. >>> >>> Here's a revised patch. Up next, a simpler patch optimizing >>> vtable--limit-string with a string-length heuristic, and which a bunch = of >>> us have tested. >>> >> >> Looks good to you? I can assume we'll commit this, or very close to it, >> and start submitting other patches. There are a lot of changes and the >> more parsimonious the patches, the more time this will take and I think = we >> all agree vtable needs a lot of help on top of Lars's great start and I'= d >> like to see the suite of changes in Emacs 31 so there's not that much ti= me, >> if Eli wants to cut a branch soon. >> > --0000000000008478ac064626a741 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac= e">Eli, would you please commit the attached patch? And thank you.</div></d= iv><br><div class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" cl= ass=3D"gmail_attr">On Wed, Dec 17, 2025 at 9:12=E2=80=AFAM Spencer Baugh &l= t;<a href=3D"mailto:sbaugh@HIDDEN">sbaugh@HIDDEN</a>> wr= ote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px= 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D= "auto">Yes, looks good to me</div><br><div class=3D"gmail_quote"><div dir= =3D"ltr" class=3D"gmail_attr">On Wed, Dec 17, 2025, 8:42=E2=80=AFAM St=C3= =A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blank"= >shipmints@HIDDEN</a>> wrote:<br></div><blockquote class=3D"gmail_quo= te" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204= );padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_d= efault" style=3D"font-family:monospace"><span style=3D"font-family:Arial,He= lvetica,sans-serif">On Mon, Dec 15, 2025 at 6:29=E2=80=AFPM St=C3=A9phane M= arks <<a href=3D"mailto:shipmints@HIDDEN" rel=3D"noreferrer" target= =3D"_blank">shipmints@HIDDEN</a>> wrote:</span></div></div><div class= =3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px = 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir= =3D"ltr"><div dir=3D"ltr"><div style=3D"font-family:monospace"><span style= =3D"font-family:Arial,Helvetica,sans-serif">On Mon, Dec 15, 2025 at 5:00=E2= =80=AFPM Spencer Baugh <<a href=3D"mailto:sbaugh@HIDDEN" rel=3D"= noreferrer" target=3D"_blank">sbaugh@HIDDEN</a>> wrote:</span></= div></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" styl= e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin= g-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" = rel=3D"noreferrer" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br= > <br> > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <<a hr= ef=3D"mailto:shipmints@HIDDEN" rel=3D"noreferrer" target=3D"_blank">ship= mints@HIDDEN</a>> wrote:<br> ><br> >=C2=A0 On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <<a hr= ef=3D"mailto:sbaugh@HIDDEN" rel=3D"noreferrer" target=3D"_blank">sb= augh@HIDDEN</a>> wrote:<br> ><br> >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" r= el=3D"noreferrer" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> ><br> >=C2=A0 > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks= <<a href=3D"mailto:shipmints@HIDDEN" rel=3D"noreferrer" target=3D"_b= lank">shipmints@HIDDEN</a>> wrote:<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh= <<a href=3D"mailto:sbaugh@HIDDEN" rel=3D"noreferrer" target=3D"= _blank">sbaugh@HIDDEN</a>> wrote:<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" rel=3D"noreferrer" target=3D"_blank">shipmints@HIDDEN</a>> = writes:<br> >=C2=A0 >=C2=A0 > --- a/lisp/emacs-lisp/vtable.el<br> >=C2=A0 >=C2=A0 > +++ b/lisp/emacs-lisp/vtable.el<br> >=C2=A0 >=C2=A0 > @@ -398,56 +403,58 @@ vtable-insert-object<br> >=C2=A0 >=C2=A0 ...<br> >=C2=A0 >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtab= le-buffer table)<br> >=C2=A0 >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 So in the end I think the only way to keep the diff t= o vtable-insert-object small is<br> >=C2=A0 >=C2=A0 if you use (set-buffer (vtable-buffer table)) here in= stead of<br> >=C2=A0 >=C2=A0 with-current-buffer.=C2=A0 It's a bit less normal= , but it at least avoids<br> >=C2=A0 >=C2=A0 some unnecessary indentation.<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 That is, instead of<br> >=C2=A0 >=C2=A0 (with-current-buffer (vtable-buffer table)<br> >=C2=A0 >=C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 >=C2=A0 =C2=A0 =C2=A0 ...))<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 do<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 (save-excursion<br> >=C2=A0 >=C2=A0 =C2=A0 (set-buffer (vtable-buffer table))<br> >=C2=A0 >=C2=A0 =C2=A0 ...)<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 (save-excursion saves and restores the current buffer= )<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 Thanks for making all these changes.=C2=A0 I think af= ter that we should be<br> >=C2=A0 >=C2=A0 good to go.<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 While I appreciate the desire for tiny diffs, I prefe= r that the stanzas used in update insert remove functions remain<br> >=C2=A0 consistent<br> >=C2=A0 >=C2=A0 and we avoid a special comment explaining why insert = is special saying this was just for indentation.=C2=A0 Hrumph.<br> >=C2=A0 ><br> >=C2=A0 > The alternative would be to make them all save-excursion, s= et-buffer, if you think that's worthy.<br> ><br> >=C2=A0 IMO that's worth doing.=C2=A0 It also saves indentation, so = it's actually<br> >=C2=A0 somewhat useful in all the places we're currently adding a<b= r> >=C2=A0 with-current-buffer, even if it doesn't avoid a big reindent= diff.<br> ><br> >=C2=A0 I forgot about the compiler warning<br> ><br> >=C2=A0 =C2=A0 emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-c= urrent-buffer=E2=80=99 rather than save-excursion+set-buffer<br> ><br> >=C2=A0 We may also need save-excursion twice, once for what is the ambi= ent current buffer, and the second to ensure that point doesn't<br> >=C2=A0 move around in the vtable-buffer.=C2=A0 Both of these, I think, = are satisfied via with-current-buffer and we avoid the warning.=C2=A0 So,<b= r> >=C2=A0 perhaps, we should bite the bullet and swallow the extra indenta= tion in vtable-insert-object and use the more robust and simpler<br> >=C2=A0 w-c-b.<br> ><br> > I can get a revised patch out quickly.=C2=A0 Can we agree on using wit= h-current-buffer and suffer the few extra indented diff lines?<br> <br> Yes, okay, I agree it's fine.=C2=A0 I don't think you need to revis= e anything<br> there, your most recent patch is fine.=C2=A0 (Except for the other issue I<= br> just emailed about)<br></blockquote><div><br></div><div style=3D"font-famil= y:monospace">Thanks for catching the buffer-local let bindings.</div><div s= tyle=3D"font-family:monospace"><br></div><div style=3D"font-family:monospac= e">Here's a revised patch.=C2=A0 Up next, a simpler patch optimizing vt= able--limit-string with a string-length heuristic, and which a bunch of us = have tested.<br></div></div></div></blockquote><div><br></div><div class=3D= "gmail_default" style=3D"font-family:monospace">Looks good to you?=C2=A0 I = can assume we'll commit this, or very close to it, and start submitting= other patches.=C2=A0 There are a lot of changes and the more parsimonious = the patches, the more time this will take and I think we all agree vtable n= eeds a lot of help on top of Lars's great start and I'd like to see= the suite of changes in Emacs 31 so there's not that much time, if Eli= wants to cut a branch soon.</div></div></div> </blockquote></div> </blockquote></div> --0000000000008478ac064626a741-- --0000000000008478ad064626a743 Content-Type: application/octet-stream; name="0001-Add-vtable-buffer-slot.patch" Content-Disposition: attachment; filename="0001-Add-vtable-buffer-slot.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mja3w1ir0> X-Attachment-Id: f_mja3w1ir0 RnJvbSA4MTk1M2IwMTBmODNlNjQ0YzJmNTUwNTlhNDkyYzViZmI2YTEzYmE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTAgRGVjIDIwMjUgMDk6MjA6MDIgLTA1MDAK U3ViamVjdDogW1BBVENIXSBBZGQgdnRhYmxlIGJ1ZmZlciBzbG90CgpUaGlzIHNvbHZlcyBmb3Ig YmFja2dyb3VuZCB2dGFibGUgbXV0YXRpb25zLCBpLmUuLCB1cGRhdGVzCmluaXRpYXRlZCBmcm9t IGJ1ZmZlcnMgb3RoZXIgdGhhbiB0aGUgdnRhYmxlIGJ1ZmZlciwgYW5kIGZvcgpidWZmZXItYWRq dXN0ZWQgc3RyaW5nLXBpeGVsLXdpZHRoIGNvbXB1dGF0aW9ucy4KCiogbGlzcC9lbWFjcy1saXNw L3Z0YWJsZS5lbCAodnRhYmxlKTogTmV3ICctYnVmZmVyJyBzbG90LgoodnRhYmxlLWJ1ZmZlcik6 Cih2dGFibGUtc2V0LWJ1ZmZlcik6IE5ldyBmdW5jdGlvbi4KKHZ0YWJsZS11cGRhdGUtb2JqZWN0 KToKKHZ0YWJsZS1yZW1vdmUtb2JqZWN0KToKKHZ0YWJsZS1pbnNlcnQtb2JqZWN0KTogV3JhcCBv cGVyYXRpb24gd2l0aCB0aGUgdnRhYmxlIGJ1ZmZlci4KKHZ0YWJsZS0taW5zZXJ0KTogU3BsaXQg ZnJvbSBvbGQgJ3Z0YWJsZS1pbnNlcnQnLgoodnRhYmxlLWluc2VydCk6IEluc2VydCB0YWJsZSBh bmQgcmVjb3JkIHRoZSBidWZmZXIuCih2dGFibGUtLWluc2VydC1saW5lKToKKHZ0YWJsZS0taW5z ZXJ0LWhlYWRlci1saW5lKTogVXNlICd2dGFibGUtYnVmZmVyJyBmb3IgcGl4ZWwtd2lkdGggY29t cHV0YXRpb24uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6Cih2dGFibGUtLWNoYXItd2lkdGgpOiBQ YXNzIGJ1ZmZlciB0byAnc3RyaW5nLXBpeGVsLXdpZHRoJy4KKHZ0YWJsZS1yZXZlcnQpOiBOZXcg b3B0aW9uYWwgdGFibGUgYXJndW1lbnQuCih2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCk6Cih2 dGFibGUtcmV2ZXJ0LWNvbW1hbmQpOgoodnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4pOiBD YWxsICd2dGFibGUtcmV2ZXJ0JyB3aXRoIHRoZSB0YWJsZS4KCiogdGVzdC9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLXRlc3RzLmVsCih2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0 LXRhYmxlKTogTmV3IGhlbHBlcgpmdW5jdGlvbi4KKHRlc3QtdnN0YWJsZS1jb21wdXRlLWNvbHVt bnMpOiBDb3JyZWN0IHR5cG8gaW4gdGVzdCBuYW1lLiAgVXNlCm5ldyBoZWxwZXIgZnVuY3Rpb24u Cih0ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyKQoodGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVm ZmVyLWluc2VydC1vYmplY3QpCih0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3Zl LW9iamVjdCkKKHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUtb2JqZWN0KQoo dGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRoLWZhY2UtcmVtYXBwZWQtYnVmZmVyKTogTmV3 IHRlc3QuCi0tLQogbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCAgICAgICAgICAgIHwgMzIxICsr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRl c3RzLmVsIHwgIDg0ICsrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMjU2IGluc2VydGlvbnMoKyks IDE0OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVs IGIvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbAppbmRleCBiY2RkMjgwZmI5Mi4uMjk3OTFlMmFh YTAgMTAwNjQ0Ci0tLSBhL2xpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwKKysrIGIvbGlzcC9lbWFj cy1saXNwL3Z0YWJsZS5lbApAQCAtNjcsOCArNjcsMTAgQEAgdnRhYmxlCiAgICAoZWxsaXBzaXMg OmluaXRhcmcgOmVsbGlwc2lzIDphY2Nlc3NvciB2dGFibGUtZWxsaXBzaXMpCiAgICAoY29sdW1u LWNvbG9ycyA6aW5pdGFyZyA6Y29sdW1uLWNvbG9ycyA6YWNjZXNzb3IgdnRhYmxlLWNvbHVtbi1j b2xvcnMpCiAgICAocm93LWNvbG9ycyA6aW5pdGFyZyA6cm93LWNvbG9ycyA6YWNjZXNzb3IgdnRh YmxlLXJvdy1jb2xvcnMpCisgICAoYnVmZmVyIDppbml0Zm9ybSBuaWwgOmFjY2Vzc29yIHZ0YWJs ZS1idWZmZXIpCiAgICAoLWNhY2hlZC1jb2xvcnMgOmluaXRmb3JtIG5pbCkKICAgICgtY2FjaGUg OmluaXRmb3JtIChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCkpCisgICAoLWN1cnJlbnQt Y2FjaGUgOmluaXRmb3JtIG5pbCA6YWNjZXNzb3IgdnRhYmxlLS1jdXJyZW50LWNhY2hlKQogICAg KC1jYWNoZWQta2V5bWFwIDppbml0Zm9ybSBuaWwpCiAgICAoLWhhcy1jb2x1bW4tc3BlYyA6aW5p dGZvcm0gbmlsKSkKICAgIkFuIG9iamVjdCB0byBob2xkIHRoZSBkYXRhIGZvciBhIHRhYmxlLiIp CkBAIC0yODcsOCArMjg5LDcgQEAgdnRhYmxlLXVwZGF0ZS1vYmplY3QKIFRBQkxFIG11c3QgYmUg YXQgcG9pbnQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiIKICAgKHVubGVzcyBvbGQtb2JqZWN0CiAg ICAgKHNldHEgb2xkLW9iamVjdCBvYmplY3QpKQotICAobGV0KiAoKG9iamVjdHMgKHZ0YWJsZS1v YmplY3RzIHRhYmxlKSkKLSAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KSkKKyAgKGxldCAo KG9iamVjdHMgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkpCiAgICAgOzsgRmlyc3QgcmVwbGFjZSB0 aGUgb2JqZWN0IGluIHRoZSBvYmplY3Qgc3RvcmFnZS4KICAgICAoaWYgKGVxIG9sZC1vYmplY3Qg KGNhciBvYmplY3RzKSkKICAgICAgICAgOzsgSXQncyBhdCB0aGUgaGVhZCwgc28gcmVwbGFjZSBp dCB0aGVyZS4KQEAgLTMwMSwzMSArMzAyLDMyIEBAIHZ0YWJsZS11cGRhdGUtb2JqZWN0CiAgICAg ICAodW5sZXNzIChjZHIgb2JqZWN0cykKICAgICAgICAgKGVycm9yICJDYW4ndCBmaW5kIHRoZSBv bGQgb2JqZWN0IikpCiAgICAgICAoc2V0Y2FyIChjZHIgb2JqZWN0cykgb2JqZWN0KSkKLSAgICA7 OyBUaGVuIHVwZGF0ZSB0aGUgcmVuZGVyZWQgdnRhYmxlIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4K LSAgICAoaWYtbGV0KiAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAg ICAgIChsaW5lLW51bWJlciAoc2VxLXBvc2l0aW9uICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hl KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC1vYmplY3QKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChhIGIpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWwgKGNhciBhKSBiKSkp KQotICAgICAgICAgICAgIChsaW5lIChlbHQgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpIGxp bmUtbnVtYmVyKSkpCi0gICAgICAgIChwcm9nbgotICAgICAgICAgIChzZXRjYXIgbGluZSBvYmpl Y3QpCi0gICAgICAgICAgKHNldGNkciBsaW5lICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUg dGFibGUgb2JqZWN0KSkKLSAgICAgICAgICA7OyAuLi4gYW5kIHJlZGlzcGxheSB0aGUgbGluZSBp biBxdWVzdGlvbi4KLSAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICAgICAgICh2dGFi bGUtZ290by1vYmplY3Qgb2xkLW9iamVjdCkKLSAgICAgICAgICAgIChsZXQgKChrZXltYXAgKGdl dC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2tleW1hcCkpCi0gICAgICAgICAgICAgICAgICAoc3Rh cnQgKHBvaW50KSkpCi0gICAgICAgICAgICAgIChkZWxldGUtbGluZSkKLSAgICAgICAgICAgICAg KHZ0YWJsZS0taW5zZXJ0LWxpbmUgdGFibGUgbGluZSBsaW5lLW51bWJlcgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCi0g ICAgICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tl eW1hcCBrZXltYXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAndnRhYmxlIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZS1jYWNoZSBjYWNoZSkpKSkKLSAgICAgICAg ICA7OyBXZSBtYXkgaGF2ZSBpbnNlcnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHBy ZXZpb3VzbHkKLSAgICAgICAgICA7OyBhbGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUu Ci0gICAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAoY2RyIGxpbmUp KSkKKyAgICA7OyBUaGVuIHVwZGF0ZSB0aGUgcmVuZGVyZWQgdnRhYmxlIGluIGl0cyBidWZmZXIu CisgICAgKGlmLWxldCogKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlIHRhYmxlKSkKKyAg ICAgICAgICAgICAgKGxpbmUtbnVtYmVyIChzZXEtcG9zaXRpb24gKHZ0YWJsZS0tY2FjaGUtbGlu ZXMgY2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC1v YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAo YSBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbCAo Y2FyIGEpIGIpKSkpCisgICAgICAgICAgICAgIChsaW5lIChlbHQgKHZ0YWJsZS0tY2FjaGUtbGlu ZXMgY2FjaGUpIGxpbmUtbnVtYmVyKSkpCisgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2 dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICAgICAgIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0 KQorICAgICAgICAgICAgICAgIChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkKKyAgICAg ICAgICAgIChzZXRjYXIgbGluZSBvYmplY3QpCisgICAgICAgICAgICAoc2V0Y2RyIGxpbmUgKHZ0 YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKQorICAgICAgICAgICAgOzsg Li4uIGFuZCByZWRpc3BsYXkgdGhlIGxpbmUgaW4gcXVlc3Rpb24uCisgICAgICAgICAgICAoc2F2 ZS1leGN1cnNpb24KKyAgICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvbGQtb2JqZWN0 KQorICAgICAgICAgICAgICAobGV0ICgoa2V5bWFwIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQp ICdrZXltYXApKQorICAgICAgICAgICAgICAgICAgICAoc3RhcnQgKHBvaW50KSkpCisgICAgICAg ICAgICAgICAgKGRlbGV0ZS1saW5lKQorICAgICAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1s aW5lIHRhYmxlIGxpbmUgbGluZS1udW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKSkKKyAgICAgICAgICAgICAg ICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpIChsaXN0ICdrZXltYXAga2V5bWFw CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAndnRhYmxlIHRhYmxlKSkpKQorICAgICAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQg YSBub24tbnVtZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5CisgICAgICAgICAgICA7OyBh bGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCisgICAgICAgICAgICAodnRhYmxlLS1y ZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkKICAgICAgIChlcnJvciAiQ2Fu J3QgZmluZCBjYWNoZWQgb2JqZWN0IGluIHZ0YWJsZSIpKSkpCiAKIChkZWZ1biB2dGFibGUtcmVt b3ZlLW9iamVjdCAodGFibGUgb2JqZWN0KQpAQCAtMzM0LDE0ICszMzYsMTYgQEAgdnRhYmxlLXJl bW92ZS1vYmplY3QKICAgOzsgRmlyc3QgcmVtb3ZlIGZyb20gdGhlIG9iamVjdHMuCiAgIChzZXRm ICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGRlbHEgb2JqZWN0ICh2dGFibGUtb2JqZWN0cyB0YWJs ZSkpKQogICA7OyBUaGVuIGFkanVzdCB0aGUgY2FjaGUgYW5kIGRpc3BsYXkuCi0gIChzYXZlLWV4 Y3Vyc2lvbgotICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKLSAgICAobGV0ICgoY2FjaGUg KHZ0YWJsZS0tY3VycmVudC1jYWNoZSkpCi0gICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQp KQotICAgICAgKHNldGNhciBjYWNoZSAoZGVscSAoYXNzcSBvYmplY3QgKHZ0YWJsZS0tY2FjaGUt bGluZXMgY2FjaGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS1s aW5lcyBjYWNoZSkpKQotICAgICAgKHdoZW4gKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpCi0g ICAgICAgIChkZWxldGUtbGluZSkpKSkpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUt YnVmZmVyIHRhYmxlKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKHZ0YWJsZS1nb3RvLXRh YmxlIHRhYmxlKQorICAgICAgKGxldCAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUgdGFi bGUpKQorICAgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCisgICAgICAgICAgICAoaW5o aWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpCisgICAgICAgIChzZXRjYXIgY2FjaGUgKGRlbHEg KGFzc3Egb2JqZWN0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpKQorICAgICAgICAod2hl biAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkKKyAgICAgICAgICAoZGVsZXRlLWxpbmUpKSkp KSkKIAogOzsgRklYTUU6IFRoZSBmYWN0IHRoYXQgdGhlIGBsb2NhdGlvbicgYXJndW1lbnQgb2YK IDs7IGB2dGFibGUtaW5zZXJ0LW9iamVjdCcgY2FuIGJlIGFuIGludGVnZXIgYW5kIGlzIHRoZW4g aW50ZXJwcmV0ZWQgYXMKQEAgLTM2OSw4ICszNzMsOSBAQCB2dGFibGUtaW5zZXJ0LW9iamVjdAog ICAgICAgKHByb2duCiAgICAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGxpc3Qg b2JqZWN0KSkKICAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAodnRh YmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpCi0gICAgICAgICh2dGFibGUt Z290by10YWJsZSB0YWJsZSkKLSAgICAgICAgKHZ0YWJsZS1yZXZlcnQtY29tbWFuZCkpCisgICAg ICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICAgICAg ICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKKyAgICAgICAgICAodnRhYmxlLXJldmVydC1jb21t YW5kKSkpCiAgICAgOzsgRmlyc3QgaW5zZXJ0IGludG8gdGhlIG9iamVjdHMuCiAgICAgKGxldCAo KHBvcyAoaWYgbG9jYXRpb24KICAgICAgICAgICAgICAgICAgICAoaWYgKGludGVnZXJwIGxvY2F0 aW9uKQpAQCAtMzk4LDU2ICs0MDMsNTggQEAgdnRhYmxlLWluc2VydC1vYmplY3QKICAgICAgICAg ICA7OyBPdGhlcndpc2UsIGFwcGVuZCB0aGUgb2JqZWN0LgogICAgICAgICAgIChuY29uYyAodnRh YmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpKSkpCiAgICAgOzsgVGhlbiBhZGp1c3Qg dGhlIGNhY2hlIGFuZCBkaXNwbGF5LgotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKHZ0YWJs ZS1nb3RvLXRhYmxlIHRhYmxlKQotICAgICAgKGxldCogKChjYWNoZSAodnRhYmxlLS1jdXJyZW50 LWNhY2hlKSkKLSAgICAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkKLSAgICAgICAgICAg ICAoa2V5bWFwIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdrZXltYXApKQotICAgICAgICAg ICAgIChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNpcyB0YWJsZSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIChwcm9wZXJ0aXplICh0cnVuY2F0ZS1zdHJpbmctZWxsaXBzaXMpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAodnRhYmxlLWZhY2UgdGFi bGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICIiKSkKLSAgICAgICAgICAgICAoZWxsaXBz aXMtd2lkdGggKHN0cmluZy1waXhlbC13aWR0aCBlbGxpcHNpcykpCi0gICAgICAgICAgICAgKGxp bmVzICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKLSAgICAgICAgICAgICAoZWxlbSAoaWYg bG9jYXRpb24gIDsgVGhpcyBiaW5kaW5nIG1pcnJvcnMgdGhlIGJpbmRpbmcgb2YgYHBvcycgYWJv dmUuCi0gICAgICAgICAgICAgICAgICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAobnRoIGxvY2F0aW9uIGxpbmVzKQotICAgICAgICAgICAg ICAgICAgICAgICAgIChvciAoYXNzcSBsb2NhdGlvbiBsaW5lcykKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGFuZCBiZWZvcmUgKGNhciBsaW5lcykpKSkKLSAgICAgICAgICAgICAgICAg ICAgIChpZiBiZWZvcmUgKGNhciBsaW5lcykpKSkKLSAgICAgICAgICAgICAocG9zIChtZW1xIGVs ZW0gbGluZXMpKQotICAgICAgICAgICAgIChsaW5lIChjb25zIG9iamVjdCAodnRhYmxlLS1jb21w dXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpKSkKLSAgICAgICAgKGlmIChvciBiZWZvcmUK LSAgICAgICAgICAgICAgICAoYW5kIHBvcyAoaW50ZWdlcnAgbG9jYXRpb24pKSkKLSAgICAgICAg ICAgIDs7IEFkZCB0aGUgbmV3IG9iamVjdCBiZWZvcmU6LgotICAgICAgICAgICAgKGxldCAoKG9s ZC1saW5lIChjYXIgcG9zKSkpCi0gICAgICAgICAgICAgIChzZXRjYXIgcG9zIGxpbmUpCi0gICAg ICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIG9sZC1saW5lIChjZHIgcG9zKSkpCi0gICAgICAg ICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3RvLW9iamVjdCAoY2FyIGVsZW0pKQotICAgICAgICAg ICAgICAgICh2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlKSkpCi0gICAgICAgICAgOzsgT3RoZXJ3 aXNlLCBhZGQgdGhlIG9iamVjdCBhZnRlci4KLSAgICAgICAgICAoaWYgcG9zCi0gICAgICAgICAg ICAgIDs7IFNwbGljZSB0aGUgb2JqZWN0IGludG8gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIChw cm9nbgotICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3MpKSkK LSAgICAgICAgICAgICAgICAoaWYgKHZ0YWJsZS1nb3RvLW9iamVjdCBsb2NhdGlvbikKLSAgICAg ICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKSAgOyBJbnNlcnQgKmFmdGVyKi4KLSAgICAg ICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCi0gICAgICAgICAgICA7OyBPdGhl cndpc2UsIGFwcGVuZCB0aGUgb2JqZWN0LgotICAgICAgICAgICAgKHNldGNhciBjYWNoZSAobmNv bmMgbGluZXMgKGxpc3QgbGluZSkpKQotICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2YtdGFibGUp KSkKLSAgICAgICAgKGxldCAoKHN0YXJ0IChwb2ludCkpKQotICAgICAgICAgIDs7IEZJWE1FOiBX ZSBoYXZlIHRvIGFkanVzdCBjb2xvcnMgaW4gbGluZXMgYmVsb3cgdGhpcyBpZiB3ZQotICAgICAg ICAgIDs7IGhhdmUgOnJvdy1jb2xvcnMuCi0gICAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWxpbmUg dGFibGUgbGluZSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2Fj aGUtd2lkdGhzIGNhY2hlKSAodnRhYmxlLS1zcGFjZXIgdGFibGUpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxsaXBzaXMgZWxsaXBzaXMtd2lkdGgpCi0gICAgICAgICAgKGFkZC10 ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBvaW50KSAobGlzdCAna2V5bWFwIGtleW1hcAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJs ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0 YWJsZS1jYWNoZSBjYWNoZSkpKQotICAgICAgICA7OyBXZSBtYXkgaGF2ZSBpbnNlcnRlZCBhIG5v bi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkKLSAgICAgICAgOzsgYWxsLW51bWVy aWNhbCB0YWJsZSwgc28gcmVjb21wdXRlLgotICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVt ZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkpKQorICAgIChsZXQqICgoY2FjaGUgKHZ0YWJsZS0t Y3VycmVudC1jYWNoZSB0YWJsZSkpCisgICAgICAgICAgIChsaW5lcyAodnRhYmxlLS1jYWNoZS1s aW5lcyBjYWNoZSkpCisgICAgICAgICAgIChlbGVtIChpZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRp bmcgbWlycm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBhYm92ZS4KKyAgICAgICAgICAgICAgICAg ICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgKG50 aCBsb2NhdGlvbiBsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxvY2F0 aW9uIGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBiZWZvcmUgKGNhciBs aW5lcykpKSkKKyAgICAgICAgICAgICAgICAgICAoaWYgYmVmb3JlIChjYXIgbGluZXMpKSkpCisg ICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCisgICAgICAgICAgIChsaW5lIChjb25z IG9iamVjdCAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpKSkKKyAg ICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICAgICAo bGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkKKyAgICAgICAgICAgICAgKGluaGliaXQtbW9kaWZp Y2F0aW9uLWhvb2tzIHQpKQorICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAg KHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQorICAgICAgICAgICAgKGlmIChvciBiZWZvcmUKKyAg ICAgICAgICAgICAgICAgICAgKGFuZCBwb3MgKGludGVnZXJwIGxvY2F0aW9uKSkpCisgICAgICAg ICAgICAgICAgOzsgQWRkIHRoZSBuZXcgb2JqZWN0IGJlZm9yZTouCisgICAgICAgICAgICAgICAg KGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCisgICAgICAgICAgICAgICAgICAoc2V0Y2FyIHBv cyBsaW5lKQorICAgICAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNvbnMgb2xkLWxpbmUgKGNk ciBwb3MpKSkKKyAgICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3RvLW9iamVjdCAo Y2FyIGVsZW0pKQorICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJs ZSkpKQorICAgICAgICAgICAgICA7OyBPdGhlcndpc2UsIGFkZCB0aGUgb2JqZWN0IGFmdGVyLgor ICAgICAgICAgICAgICAoaWYgcG9zCisgICAgICAgICAgICAgICAgICA7OyBTcGxpY2UgdGhlIG9i amVjdCBpbnRvIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgICAgKHByb2duCisgICAgICAgICAg ICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3MpKSkKKyAgICAgICAgICAg ICAgICAgICAgKGlmICh2dGFibGUtZ290by1vYmplY3QgbG9jYXRpb24pCisgICAgICAgICAgICAg ICAgICAgICAgICAoZm9yd2FyZC1saW5lIDEpICA7IEluc2VydCAqYWZ0ZXIqLgorICAgICAgICAg ICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisgICAgICAgICAgICAgICAgOzsg T3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KKyAgICAgICAgICAgICAgICAoc2V0Y2FyIGNh Y2hlIChuY29uYyBsaW5lcyAobGlzdCBsaW5lKSkpCisgICAgICAgICAgICAgICAgKHZ0YWJsZS1l bmQtb2YtdGFibGUpKSkKKyAgICAgICAgICAgIChsZXQqICgoc3RhcnQgKHBvaW50KSkKKyAgICAg ICAgICAgICAgICAgICAoZWxsaXBzaXMgKGlmICh2dGFibGUtZWxsaXBzaXMgdGFibGUpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5n LWVsbGlwc2lzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIikpCisgICAgICAgICAgICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwt d2lkdGggZWxsaXBzaXMgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgICAgICAgICAgICAgICAgKGtl eW1hcCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAna2V5bWFwKSkpCisgICAgICAgICAgICAg IDs7IEZJWE1FOiBXZSBoYXZlIHRvIGFkanVzdCBjb2xvcnMgaW4gbGluZXMgYmVsb3cgdGhpcyBp ZiB3ZQorICAgICAgICAgICAgICA7OyBoYXZlIDpyb3ctY29sb3JzLgorICAgICAgICAgICAgICAo dnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIDAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtd2lkdGhzIGNhY2hlKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1zcGFjZXIgdGFibGUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzIGVsbGlwc2lzLXdpZHRoKQorICAgICAgICAg ICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpIChsaXN0ICdrZXltYXAga2V5 bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3Z0YWJsZSB0YWJsZSkpKQorICAgICAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQg YSBub24tbnVtZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5CisgICAgICAgICAgICA7OyBh bGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCisgICAgICAgICAgICAodnRhYmxlLS1y ZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkpKSkpCiAKIChkZWZ1biB2dGFi bGUtY29sdW1uICh0YWJsZSBpbmRleCkKICAgIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgSU5ERVh0 aCBjb2x1bW4gaW4gVEFCTEUuIgpAQCAtNTIwLDE0ICs1MjcsMTQgQEAgdnRhYmxlLS1jYWNoZS13 aWR0aHMKIChkZWZ1biB2dGFibGUtLWNhY2hlLWxpbmVzIChjYWNoZSkKICAgKGNhciBjYWNoZSkp CiAKLShkZWZ1biB2dGFibGUtaW5zZXJ0ICh0YWJsZSkKKyhkZWZ1biB2dGFibGUtLWluc2VydCAo dGFibGUpCiAgIChsZXQqICgoc3BhY2VyICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCiAgICAgICAg ICAoc3RhcnQgKHBvaW50KSkKICAgICAgICAgIChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNp cyB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKHRydW5jYXRlLXN0 cmluZy1lbGxpcHNpcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2Ug KHZ0YWJsZS1mYWNlIHRhYmxlKSkKICAgICAgICAgICAgICAgICAgICAgICIiKSkKLSAgICAgICAg IChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGVsbGlwc2lzKSkKKyAgICAgICAg IChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGVsbGlwc2lzICh2dGFibGUtYnVm ZmVyIHRhYmxlKSkpCiAgICAgICAgICA7OyBXZSBtYWludGFpbiBhIGNhY2hlIHBlciBzY3JlZW4v d2luZG93IHdpZHRoLCBzbyB0aGF0IHdlIHJlbmRlcgogICAgICAgICAgOzsgY29ycmVjdGx5IGlm IEVtYWNzIGlzIG9wZW4gb24gdHdvIGRpZmZlcmVudCBzY3JlZW5zIChvciB0aGUKICAgICAgICAg IDs7IHVzZXIgcmVzaXplcyB0aGUgZnJhbWUpLgpAQCAtNTQ5LDggKzU1Niw3IEBAIHZ0YWJsZS1p bnNlcnQKICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBvaW50KQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAna2V5bWFwIHZ0YWJsZS1oZWFkZXItbGluZS1t YXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYXItbm9uc3RpY2t5IHQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hlIGNhY2hlKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZSkpCiAgICAgICAgIChz ZXRxIHN0YXJ0IChwb2ludCkpKSkKICAgICAodnRhYmxlLS1zb3J0IHRhYmxlIGNhY2hlKQogICAg IDs7IEluc2VydCB0aGUgZGF0YS4KQEAgLTU2MSwxMyArNTY3LDM1IEBAIHZ0YWJsZS1pbnNlcnQK ICAgICAgICAgKHNldHEgbGluZS1udW1iZXIgKDErIGxpbmUtbnVtYmVyKSkpKQogICAgIChhZGQt dGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAo bGlzdCAncmVhci1ub25zdGlja3kgdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2 dGFibGUgdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hl IGNhY2hlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlKSkK KyAgICAoc2V0ZiAodnRhYmxlLS1jdXJyZW50LWNhY2hlIHRhYmxlKSBjYWNoZSkKICAgICAoZ290 by1jaGFyIHN0YXJ0KSkpCiAKKyhkZWZ1biB2dGFibGUtaW5zZXJ0ICh0YWJsZSkKKyAgIkluc2Vy dCBUQUJMRSBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KK1RoZSBjdXJyZW50IGJ1ZmZlciB3aWxs IGJlIHJlY29yZGVkIGFzIFRBQkxFJ3MgYnVmZmVyLiAgSWYgdGhlIHRhYmxlIGlzCitpbnNlcnRl ZCBpbnRvIGEgYnVmZmVyIG90aGVyIHRoYW4gaXRzIG9yaWdpbmF0aW5nIGJ1ZmZlciwgc2lnbmFs IGFuCitlcnJvci4gIEEgdGFibGUgbWF5IGJlIHJlaW5zZXJ0ZWQgaW50byBpdHMgb3duIGJ1ZmZl ciwgYnV0IGluc2VydCBvbmx5CitvbmUgaW5zdGFuY2UgcGVyIGJ1ZmZlci4gIFRoaXMgcmVzdHJp Y3Rpb24gbmVlZHMgdG8gYmUgZW5mb3JjZWQgYnkgdGhlCitjYWxsZXIuIgorICAoaWYtbGV0KiAo KHRhYmxlLWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkpKQorICAgICAgKHdoZW4gKG5vdCAo ZXEgdGFibGUtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKQorICAgICAgICAoZXJyb3IgIkEgdnRh YmxlIGNhbm5vdCBiZSBpbnNlcnRlZCBpbnRvIG1vcmUgdGhhbiBvbmUgYnVmZmVyIikpKQorICAo c2V0ZiAodnRhYmxlLWJ1ZmZlciB0YWJsZSkgKGN1cnJlbnQtYnVmZmVyKSkKKyAgKGxldCAoKGlu aGliaXQtcmVhZC1vbmx5IHQpCisgICAgICAgIChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0 KSkKKyAgICAodnRhYmxlLS1pbnNlcnQgdGFibGUpKSkKKworKGRlZnVuIHZ0YWJsZS1zZXQtYnVm ZmVyICh0YWJsZSBidWZmZXIpCisgICJBc3NvY2lhdGUgQlVGRkVSIHdpdGggVEFCTEUuCitVc2Ug dGhpcyBmdW5jdGlvbiB3aXRoIGNhcmUsIGFuZCBlbnN1cmUgeW91ciB2dGFibGUgaW5zdGFuY2Ug cmVuZGVycworaXRzZWxmIGluIHRoZSBuZXcgYnVmZmVyLiIKKyAgKHNldGYgKHZ0YWJsZS1idWZm ZXIgdGFibGUpIGJ1ZmZlcikpCisKIChkZWZ1biB2dGFibGUtLWluc2VydC1saW5lICh0YWJsZSBs aW5lIGxpbmUtbnVtYmVyIHdpZHRocyBzcGFjZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmb3B0aW9uYWwgZWxsaXBzaXMgZWxsaXBzaXMtd2lkdGgpCiAgIChsZXQgKChzdGFy dCAocG9pbnQpKQorICAgICAgICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKICAgICAg ICAgKGNvbHVtbnMgKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkKICAgICAgICAgKGNvbHVtbi1jb2xv cnMKICAgICAgICAgIChhbmQgKHZ0YWJsZS1jb2x1bW4tY29sb3JzIHRhYmxlKQpAQCAtNjA3LDE2 ICs2MzUsMTggQEAgdnRhYmxlLS1pbnNlcnQtbGluZQogICAgICAgICAgICAgICAgICAgICAgIChj b25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCiAgICAg ICAgICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRo IDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBz aXMtd2lkdGggMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAg ICAgICAgICAgICAgIGVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQp KQogICAgICAgICAgICAgICAgICA7OyBSZWNvbXB1dGUgd2lkdGhzLgogICAgICAgICAgICAgICAg ICAodAotICAgICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggdmFsdWUp IChlbHQgd2lkdGhzIGluZGV4KSkKKyAgICAgICAgICAgICAgICAgIChpZiAoPiAoc3RyaW5nLXBp eGVsLXdpZHRoIHZhbHVlIGJ1ZmZlcikgKGVsdCB3aWR0aHMgaW5kZXgpKQogICAgICAgICAgICAg ICAgICAgICAgIChjb25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQt c3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAoLSAoZWx0IHdpZHRocyBpbmRl eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAw KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBzaXMtd2lkdGgg MCkpCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAg ICAgIGVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICB2YWx1ZSkpKSkKICAgICAgICAgICAg ICAgIChzdGFydCAocG9pbnQpKQpAQCAtNjMwLDE0ICs2NjAsMTUgQEAgdnRhYmxlLS1pbnNlcnQt bGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOndpZHRoIChsaXN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCsgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aCBkaXNw bGF5ZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctcGl4ZWwtd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGlzcGxheWVkIGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGlmIGxhc3QgMCBzcGFjZXIpKSkpKSkpCiAgICAgICAgICAgICAgOzsg QWxpZ24gdG8gdGhlIHJpZ2h0LgogICAgICAgICAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgIiAi ICdkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp3aWR0aCAobGlzdCAoLSAo ZWx0IHdpZHRocyBpbmRleCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZCkpKSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bs YXllZCBidWZmZXIpKSkpKQogICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkKQogICAgICAg ICAgICAgICh1bmxlc3MgbGFzdAogICAgICAgICAgICAgICAgKGluc2VydCAocHJvcGVydGl6ZSAi ICIgJ2Rpc3BsYXkKQEAgLTY2NCwxNiArNjk1LDYgQEAgdnRhYmxlLS1pbnNlcnQtbGluZQogKGRl ZnVuIHZ0YWJsZS0tY2FjaGUta2V5ICgpCiAgIChjb25zIChmcmFtZS10ZXJtaW5hbCkgKHdpbmRv dy13aWR0aCkpKQogCi0oZGVmdW4gdnRhYmxlLS1jdXJyZW50LWNhY2hlICgpCi0gICJSZXR1cm4g dGhlIGN1cnJlbnQgY2FjaGUgZm9yIHRoZSB0YWJsZSBhdCBwb2ludC4KLQotSW4gYHZ0YWJsZS1p bnNlcnQnLCB0aGUgbGluZXMgYW5kIHdpZHRocyBvZiB0aGUgdnRhYmxlIHRleHQgYXJlIGNvbXB1 dGVkCi1iYXNlZCBvbiB0aGUgY3VycmVudCBzZWxlY3RlZCBmcmFtZSBhbmQgd2luZG93IGFuZCBz dG9yZWQgaW4gYSBjYWNoZS4KLVN1YnNlcXVlbnQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGV4dCBv ZiB0aGUgdnRhYmxlIHNob3VsZCB1c2UgdGhhdCBjYWNoZQotdmlhIHRoaXMgZnVuY3Rpb24gcmF0 aGVyIHRoYW4gYnkgY2FsbGluZyBgdnRhYmxlLS1jYWNoZS1rZXknIHRvIGxvb2sgdXAKLXRoZSBj YWNoZS4iCi0gIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICd2dGFibGUtY2FjaGUpKQotCiAo ZGVmdW4gdnRhYmxlLS1jbGVhci1jYWNoZSAodGFibGUpCiAgIChzZXRmIChnZXRoYXNoICh2dGFi bGUtLWNhY2hlLWtleSkgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZSkpIG5pbCkpCiAKQEAgLTcx OCw2ICs3MzksNyBAQCB2dGFibGUtLWluZGljYXRvcgogKGRlZnVuIHZ0YWJsZS0taW5zZXJ0LWhl YWRlci1saW5lICh0YWJsZSB3aWR0aHMgc3BhY2VyKQogICA7OyBJbnNlcnQgdGhlIGhlYWRlciBk aXJlY3RseSBpbnRvIHRoZSBidWZmZXIuCiAgIChsZXQgKChzdGFydCAocG9pbnQpKQorICAgICAg ICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKICAgICAgICAgKGRpdmlkZXIgKHZ0YWJs ZS1kaXZpZGVyIHRhYmxlKSkKICAgICAgICAgKGNtYXAgKGRlZmluZS1rZXltYXAKICAgICAgICAg ICAgICAgICAiPGhlYWRlci1saW5lPiA8ZHJhZy1tb3VzZS0xPiIgIyd2dGFibGUtLWRyYWctcmVz aXplLWNvbHVtbgpAQCAtNzM3LDE0ICs3NTksMTUgQEAgdnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxp bmUKICAgICAgICAgICAgICAgICAgICAgICdrZXltYXAgY21hcCkpCiAgICAgICAgICAgICAgIChz dGFydCAocG9pbnQpKQogICAgICAgICAgICAgICAoaW5kaWNhdG9yICh2dGFibGUtLWluZGljYXRv ciB0YWJsZSBpbmRleCkpCi0gICAgICAgICAgICAgIChpbmRpY2F0b3Itd2lkdGggKHN0cmluZy1w aXhlbC13aWR0aCBpbmRpY2F0b3IpKQorICAgICAgICAgICAgICAoaW5kaWNhdG9yLXdpZHRoIChz dHJpbmctcGl4ZWwtd2lkdGggaW5kaWNhdG9yIGJ1ZmZlcikpCiAgICAgICAgICAgICAgIChsYXN0 ICg9IGluZGV4ICgxLSAobGVuZ3RoICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKSkpCiAgICAgICAg ICAgICAgIGRpc3BsYXllZCkKICAgICAgICAgIChzZXRxIGRpc3BsYXllZAotICAgICAgICAgICAg ICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggbmFtZSkKKyAgICAgICAgICAgICAgIChpZiAo PiAoc3RyaW5nLXBpeGVsLXdpZHRoIG5hbWUgYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAg ICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpKQogICAgICAgICAgICAgICAg ICAgICh2dGFibGUtLWxpbWl0LXN0cmluZwotICAgICAgICAgICAgICAgICAgICBuYW1lICgtIChl bHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBu YW1lICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpCisgICAgICAgICAgICAg ICAgICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgbmFtZSkpCiAgICAgICAgICAobGV0KiAo KGluZGljYXRvci1sZWFkLXdpZHRoCiAgICAgICAgICAgICAgICAgIDs7IFdlIHdhbnQgdGhlIGlu ZGljYXRvciB0byBub3QgYmUgcXVpdGUgZmx1c2ggcmlnaHQuCkBAIC03NTMsNyArNzc2LDcgQEAg dnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbmRpY2F0b3ItbGVhZC13aWR0aCkpCiAgICAgICAgICAgICAgICAgKGZpbGwt d2lkdGgKICAgICAgICAgICAgICAgICAgKCsgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGggZGlzcGxheWVkKQorICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoIGRpc3BsYXllZCBidWZmZXIpCiAgICAg ICAgICAgICAgICAgICAgICAgIGluZGljYXRvci13aWR0aAogICAgICAgICAgICAgICAgICAgICAg ICBpbmRpY2F0b3ItbGVhZC13aWR0aCkKICAgICAgICAgICAgICAgICAgICAgKGlmIGxhc3QgMCBz cGFjZXIpKSkpCkBAIC03NzEsNyArNzk0LDggQEAgdnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUK ICAgICAgICAgICAgICA7OyBUaGlzIGlzIHRoZSBmaW5hbCBjb2x1bW4sIGFuZCB3ZSBoYXZlIGEg c29ydGluZwogICAgICAgICAgICAgIDs7IGluZGljYXRvciwgYW5kIHRoZSB0YWJsZSBpcyB0b28g d2lkZSBmb3IgdGhlIHdpbmRvdy4KICAgICAgICAgICAgICAobGV0KiAoKHByZS1pbmRpY2F0b3Ig KHN0cmluZy1waXhlbC13aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50KSkpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikpCiAgICAgICAg ICAgICAgICAgICAgIChwcmUtZmlsbAogICAgICAgICAgICAgICAgICAgICAgKC0gKHdpbmRvdy13 aWR0aCBuaWwgdCkKICAgICAgICAgICAgICAgICAgICAgICAgIHByZS1pbmRpY2F0b3IKQEAgLTg1 MCwxNCArODc0LDE2IEBAIHZ0YWJsZS0tc2V0LWhlYWRlci1saW5lCiAgICAgICAgICAgIChidWZm ZXItc3Vic3RyaW5nIChwb2ludC1taW4pICgxLSAocG9pbnQtbWF4KSkpKSkpCiAgICh2dGFibGUt aGVhZGVyLW1vZGUgMSkpCiAKLShkZWZ1biB2dGFibGUtLWxpbWl0LXN0cmluZyAoc3RyaW5nIHBp eGVscykKKworKGRlZnVuIHZ0YWJsZS0tbGltaXQtc3RyaW5nIChzdHJpbmcgcGl4ZWxzIGJ1ZmZl cikKICAgKHdoaWxlIChhbmQgKGxlbmd0aD4gc3RyaW5nIDApCi0gICAgICAgICAgICAgICg+IChz dHJpbmctcGl4ZWwtd2lkdGggc3RyaW5nKSBwaXhlbHMpKQorICAgICAgICAgICAgICAoPiAoc3Ry aW5nLXBpeGVsLXdpZHRoIHN0cmluZyBidWZmZXIpIHBpeGVscykpCiAgICAgKHNldHEgc3RyaW5n IChzdWJzdHJpbmcgc3RyaW5nIDAgKDEtIChsZW5ndGggc3RyaW5nKSkpKSkKICAgc3RyaW5nKQog CiAoZGVmdW4gdnRhYmxlLS1jaGFyLXdpZHRoICh0YWJsZSkKLSAgKHN0cmluZy1waXhlbC13aWR0 aCAocHJvcGVydGl6ZSAieCIgJ2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkpKQorICAoc3RyaW5n LXBpeGVsLXdpZHRoIChwcm9wZXJ0aXplICJ4IiAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQor ICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtYnVmZmVyIHRhYmxlKSkpCiAKIChkZWZ1biB2 dGFibGUtLWNvbXB1dGUtd2lkdGggKHRhYmxlIHNwZWMpCiAgIChjb25kCkBAIC05MzYsNyArOTYy LDcgQEAgdnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lCiAgICAgICAgOzsgV2Ugc3Rhc2ggdGhl IGNvbXB1dGVkIHdpZHRoIGFuZCBzdHJpbmcgaGVyZSAtLSBpZiB0aGVyZSBhcmUKICAgICAgICA7 OyBubyBmb3JtYXR0ZXJzL2Rpc3BsYXllcnMsIHdlJ2xsIGJlIHVzaW5nIHRoZSBzdHJpbmcsIGFu ZAogICAgICAgIDs7IHRoZW4gd29uJ3QgaGF2ZSB0byByZWNyZWF0ZSBpdC4KLSAgICAgICAobGlz dCB2YWx1ZSAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cmluZykgc3RyaW5nKSkpCisgICAgICAgKGxp c3QgdmFsdWUgKHN0cmluZy1waXhlbC13aWR0aCBzdHJpbmcgKHZ0YWJsZS1idWZmZXIgdGFibGUp KSBzdHJpbmcpKSkKICAgICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKQogCiAoZGVmdW4gdnRhYmxl LS1tYWtlLWtleW1hcCAodGFibGUpCkBAIC05NjcsMjAgKzk5MywyMiBAQCB2dGFibGUtLW1ha2Ut a2V5bWFwCiAgICAgICAgICAgKHZ0YWJsZS1rZXltYXAgdGFibGUpKQogICAgICAgbWFwKSkpCiAK LShkZWZ1biB2dGFibGUtcmV2ZXJ0ICgpCi0gICJSZWdlbmVyYXRlIHRoZSB0YWJsZSB1bmRlciBw b2ludC4iCi0gIChsZXQgKCh0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQotICAgICAgICAo b2JqZWN0ICh2dGFibGUtY3VycmVudC1vYmplY3QpKQotICAgICAgICAoY29sdW1uICh2dGFibGUt Y3VycmVudC1jb2x1bW4pKQotICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCi0gICAgKHVu bGVzcyB0YWJsZQotICAgICAgKHVzZXItZXJyb3IgIk5vIHRhYmxlIHVuZGVyIHBvaW50IikpCi0g ICAgKGRlbGV0ZS1yZWdpb24gKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpICh2dGFibGUtZW5k LW9mLXRhYmxlKSkKLSAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKLSAgICAod2hlbiBvYmplY3QK LSAgICAgICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0KSkKLSAgICAod2hlbiBjb2x1bW4KLSAg ICAgICh2dGFibGUtZ290by1jb2x1bW4gY29sdW1uKSkpKQorKGRlZnVuIHZ0YWJsZS1yZXZlcnQg KCZvcHRpb25hbCB0YWJsZSkKKyAgIlJlZ2VuZXJhdGUgVEFCTEUsIGRlZmF1bHRpbmcgdG8gdGhl IHRhYmxlIHVuZGVyIHBvaW50LiIKKyAgKHNldHEgdGFibGUgKG9yIHRhYmxlICh2dGFibGUtY3Vy cmVudC10YWJsZSkpKQorICAodW5sZXNzIHRhYmxlCisgICAgKHVzZXItZXJyb3IgIk5vIHRhYmxl IHVuZGVyIHBvaW50IikpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRh YmxlKQorICAgIChsZXQgKChvYmplY3QgKHZ0YWJsZS1jdXJyZW50LW9iamVjdCkpCisgICAgICAg ICAgKGNvbHVtbiAodnRhYmxlLWN1cnJlbnQtY29sdW1uKSkKKyAgICAgICAgICAoaW5oaWJpdC1y ZWFkLW9ubHkgdCkKKyAgICAgICAgICAoaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpCisg ICAgICAoZGVsZXRlLXJlZ2lvbiAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJsZSkgKHZ0YWJsZS1l bmQtb2YtdGFibGUpKQorICAgICAgKHZ0YWJsZS0taW5zZXJ0IHRhYmxlKQorICAgICAgKHdoZW4g b2JqZWN0CisgICAgICAgICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0KSkKKyAgICAgICh3aGVu IGNvbHVtbgorICAgICAgICAodnRhYmxlLWdvdG8tY29sdW1uIGNvbHVtbikpKSkpCiAKIDs7OyBD b21tYW5kcy4KIApAQCAtMTAwNiwxNCArMTAzNCwxNCBAQCB2dGFibGUtbmFycm93LWN1cnJlbnQt Y29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtICgqICh2dGFibGUtLWNo YXItd2lkdGggdGFibGUpIChvciBuIDEpKSkpKSkKIAogKGRlZnVuIHZ0YWJsZS0tYWx0ZXItY29s dW1uLXdpZHRoICh0YWJsZSBjb2x1bW4gZGVsdGEpCi0gIChsZXQgKCh3aWR0aHMgKHZ0YWJsZS0t Y2FjaGUtd2lkdGhzICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKSkpCisgIChsZXQgKCh3aWR0aHMg KHZ0YWJsZS0tY2FjaGUtd2lkdGhzICh2dGFibGUtLWN1cnJlbnQtY2FjaGUgdGFibGUpKSkpCiAg ICAgKHNldGYgKGFyZWYgd2lkdGhzIGNvbHVtbikKICAgICAgICAgICAobWF4ICgqICh2dGFibGUt LWNoYXItd2lkdGggdGFibGUpIDIpCiAgICAgICAgICAgICAgICAoKyAoYXJlZiB3aWR0aHMgY29s dW1uKSBkZWx0YSkpKQogICAgIDs7IFN0b3JlIHRoZSB3aWR0aCBzbyBpdCdsbCBiZSByZXNwZWN0 ZWQgb24gYSByZXZlcnQuCiAgICAgKHNldGYgKHZ0YWJsZS1jb2x1bW4td2lkdGggKGVsdCAodnRh YmxlLWNvbHVtbnMgdGFibGUpIGNvbHVtbikpCiAgICAgICAgICAgKGZvcm1hdCAiJWRweCIgKGFy ZWYgd2lkdGhzIGNvbHVtbikpKQotICAgICh2dGFibGUtcmV2ZXJ0KSkpCisgICAgKHZ0YWJsZS1y ZXZlcnQgdGFibGUpKSkKIAogKGRlZnVuIHZ0YWJsZS13aWRlbi1jdXJyZW50LWNvbHVtbiAoJm9w dGlvbmFsIG4pCiAgICJXaWRlbiB0aGUgY3VycmVudCBjb2x1bW4gYnkgTiBjaGFyYWN0ZXJzLgpA QCAtMTAyOCwyNCArMTA1NiwyOSBAQCB2dGFibGUtcHJldmlvdXMtY29sdW1uCiAgIChpbnRlcmFj dGl2ZSkKICAgKHZ0YWJsZS1nb3RvLWNvbHVtbgogICAgKG1heCAwICgxLSAob3IgKHZ0YWJsZS1j dXJyZW50LWNvbHVtbikKLSAgICAgICAgICAgICAgICAgIChsZW5ndGggKHZ0YWJsZS0tY2FjaGUt d2lkdGhzICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKSkpKSkpKQorICAgICAgICAgICAgICAgICAg KGxlbmd0aCAodnRhYmxlLS1jYWNoZS13aWR0aHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICh2dGFibGUtLWN1cnJlbnQtY2FjaGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpKSkpKSkpCiAK IChkZWZ1biB2dGFibGUtbmV4dC1jb2x1bW4gKCkKICAgIkdvIHRvIHRoZSBuZXh0IGNvbHVtbi4i CiAgIChpbnRlcmFjdGl2ZSkKICAgKHdoZW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikKICAgICAo dnRhYmxlLWdvdG8tY29sdW1uCi0gICAgIChtaW4gKDEtIChsZW5ndGggKHZ0YWJsZS0tY2FjaGUt d2lkdGhzICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKSkpCisgICAgIChtaW4gKDEtIChsZW5ndGgg KHZ0YWJsZS0tY2FjaGUtd2lkdGhzCisgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWN1 cnJlbnQtY2FjaGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpKSkKICAgICAgICAgICAoMSsgKHZ0 YWJsZS1jdXJyZW50LWNvbHVtbikpKSkpKQogCi0oZGVmdW4gdnRhYmxlLXJldmVydC1jb21tYW5k ICgpCi0gICJSZS1xdWVyeSBkYXRhIGFuZCByZWdlbmVyYXRlIHRoZSB0YWJsZSB1bmRlciBwb2lu dC4iCisoZGVmdW4gdnRhYmxlLXJldmVydC1jb21tYW5kICgmb3B0aW9uYWwgdGFibGUpCisgICJS ZS1xdWVyeSBkYXRhIGFuZCByZWdlbmVyYXRlIFRBQkxFLgorSWYgVEFCTEUgaXMgbmlsLCB1c2Ug dGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKICAgKGludGVyYWN0aXZlKQotICAobGV0ICgodGFibGUg KHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCi0gICAgKHdoZW4gKHZ0YWJsZS1vYmplY3RzLWZ1bmN0 aW9uIHRhYmxlKQotICAgICAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAoZnVuY2FsbCAo dnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpKSkpCi0gICAgKHZ0YWJsZS0tY2xlYXItY2Fj aGUgdGFibGUpKQotICAodnRhYmxlLXJldmVydCkpCisgIChzZXRxIHRhYmxlIChvciB0YWJsZSAo dnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKKyAgKHVubGVzcyB0YWJsZQorICAgICh1c2VyLWVycm9y ICJObyB0YWJsZSBmb3VuZCIpKQorICAod2hlbiAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFi bGUpCisgICAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAoZnVuY2FsbCAodnRhYmxlLW9i amVjdHMtZnVuY3Rpb24gdGFibGUpKSkpCisgICh2dGFibGUtLWNsZWFyLWNhY2hlIHRhYmxlKQor ICAodnRhYmxlLXJldmVydCB0YWJsZSkpCiAKIChkZWZ1biB2dGFibGUtc29ydC1ieS1jdXJyZW50 LWNvbHVtbiAoKQogICAiU29ydCB0aGUgdGFibGUgdW5kZXIgcG9pbnQgYnkgdGhlIGNvbHVtbiB1 bmRlciBwb2ludC4iCkBAIC0xMDY3LDggKzExMDAsOCBAQCB2dGFibGUtc29ydC1ieS1jdXJyZW50 LWNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgKGNkciBs YXN0KSAnYXNjZW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVz Y2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2VuZCkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2VuZCkpKSkpKQotICAodnRhYmxlLXJldmVy dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NlbmQpKSkpKQorICAgICh2 dGFibGUtcmV2ZXJ0IHRhYmxlKSkpCiAKIChkZWZ1biB2dGFibGUtaGVhZGVyLWxpbmUtc29ydCAo ZSkKICAgIlNvcnQgYSB2dGFibGUgZnJvbSB0aGUgaGVhZGVyIGxpbmUuIgpkaWZmIC0tZ2l0IGEv dGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsIGIvdGVzdC9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLXRlc3RzLmVsCmluZGV4IDc0ZmI4Y2M4MTM5Li5lMDMyOGUzMWJjNSAxMDA2NDQK LS0tIGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsCisrKyBiL3Rlc3QvbGlz cC9lbWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbApAQCAtMjcsMTYgKzI3LDE5IEBACiAocmVxdWly ZSAnZXJ0KQogKHJlcXVpcmUgJ2VydC14KQogCi0oZXJ0LWRlZnRlc3QgdGVzdC12c3RhYmxlLWNv bXB1dGUtY29sdW1ucyAoKQorKGRlZnVuIHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1v YmplY3QtdGFibGUgKCkKKyAgKG1ha2UtdnRhYmxlIDpjb2x1bW5zICcoImEiICJiIiAiYyIpCisg ICAgICAgICAgICAgICA6b2JqZWN0cyAnKCgiZm9vIiAxIDIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICgiYmFyIiAzIDp6b3QpKQorICAgICAgICAgICAgICAgOmluc2VydCBuaWwpKQorCiso ZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtY29tcHV0ZS1jb2x1bW5zICgpCiAgIChzaG91bGQKICAg IChlcXVhbCAobWFwY2FyCiAgICAgICAgICAgIChsYW1iZGEgKGNvbHVtbikKICAgICAgICAgICAg ICAodnRhYmxlLWNvbHVtbi1hbGlnbiBjb2x1bW4pKQogICAgICAgICAgICAodnRhYmxlLS1jb21w dXRlLWNvbHVtbnMKLSAgICAgICAgICAgIChtYWtlLXZ0YWJsZSA6Y29sdW1ucyAnKCJhIiAiYiIg ImMiKQotICAgICAgICAgICAgICAgICAgICAgICAgIDpvYmplY3RzICcoKCJmb28iIDEgMikKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYmFyIiAzIDp6b3QpKQotICAgICAg ICAgICAgICAgICAgICAgICAgIDppbnNlcnQgbmlsKSkpCisgICAgICAgICAgICAodnRhYmxlLXRl c3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSkpKQogICAgICAgICAgICcobGVmdCBy aWdodCBsZWZ0KSkpKQogCiAoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtaW5zZXJ0LW9iamVjdCAo KQpAQCAtNjksNCArNzIsNzUgQEAgdGVzdC12dGFibGUtaW5zZXJ0LW9iamVjdAogICAgICAgICAg ICAgICAobWFwY2FyICMnY2FkciAodnRhYmxlLW9iamVjdHMgdGFibGUpKSkpCiAgICAgICAgICAg KG51bWJlci1zZXF1ZW5jZSAwIDExKSkpKQogCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtdW5p cXVlLWJ1ZmZlciAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFk ZXItMi1vYmplY3QtdGFibGUpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJs ZS1pbnNlcnQgdGFibGUpCisgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAoc2hvdWxk LWVycm9yICh2dGFibGUtaW5zZXJ0IHRhYmxlKSkpCisgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgor ICAgICAgICAodnRhYmxlLXNldC1idWZmZXIgdGFibGUgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAg ICAgKHZ0YWJsZS1pbnNlcnQgdGFibGUpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUt cmVhZC1vbmx5LWJ1ZmZlciAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1u by1oZWFkZXItMi1vYmplY3QtdGFibGUpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAg KHNldHEgYnVmZmVyLXJlYWQtb25seSB0KQorICAgICAgKHZ0YWJsZS1pbnNlcnQgdGFibGUpKSkp CisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItaW5zZXJ0LW9i amVjdCAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1v YmplY3QtdGFibGUpKQorICAgICAgICAob2JqICcoImJheiIgNCA1KSkpCisgICAgKHdpdGgtdGVt cC1idWZmZXIKKyAgICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAgICAgKHNob3VsZCAoPSAo Y291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDIpKQorICAgICAgKHdpdGgtdGVt cC1idWZmZXIKKyAgICAgICAgKHZ0YWJsZS1pbnNlcnQtb2JqZWN0IHRhYmxlIG9iaikpCisgICAg ICAoc2hvdWxkICg9IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMykpKSkp CisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3ZlLW9i amVjdCAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1v YmplY3QtdGFibGUpKQorICAgICAgICAob2JqICcoImJheiIgNCA1KSkpCisgICAgKHdpdGgtdGVt cC1idWZmZXIKKyAgICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAgICAgKHZ0YWJsZS1pbnNl cnQtb2JqZWN0IHRhYmxlIG9iaikKKyAgICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2lu dC1taW4pIChwb2ludC1tYXgpKSAzKSkKKyAgICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAg ICh2dGFibGUtcmVtb3ZlLW9iamVjdCB0YWJsZSBvYmopKQorICAgICAgKHNob3VsZCAoPSAoY291 bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDIpKSkpKQorCisoZXJ0LWRlZnRlc3Qg dGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVmZmVyLXVwZGF0ZS1vYmplY3QgKCkKKyAgKGxldCAo KHRhYmxlICh2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxlKSkKKyAg ICAgICAgKG9iaiAnKCJiYXoiIDQgNSkpCisgICAgICAgIChvYmotMiAnKCJxdXgiIDYgNykpKQor ICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKKyAgICAg ICh2dGFibGUtaW5zZXJ0LW9iamVjdCB0YWJsZSBvYmopCisgICAgICAoc2hvdWxkICg9IChjb3Vu dC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMykpCisgICAgICAobGV0ICgobGluZS0y IChwcm9nbgorICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisg ICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAyKQorICAgICAgICAgICAgICAgICAg ICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludCkgKHBvaW50LW1heCkpKSkpCisgICAgICAgICh3 aXRoLXRlbXAtYnVmZmVyCisgICAgICAgICAgKHZ0YWJsZS11cGRhdGUtb2JqZWN0IHRhYmxlIG9i ai0yIG9iaikpCisgICAgICAgIChsZXQgKChsaW5lLTItbmV3IChwcm9nbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGZvcndhcmQtbGluZSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IChidWZmZXItc3Vic3RyaW5nIChwb2ludCkgKHBvaW50LW1heCkpKSkpCisgICAgICAgICAgKHNo b3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDMpKQorICAgICAg ICAgIChzaG91bGQgKG5vdCAoc3RyaW5nPSBsaW5lLTIgbGluZS0yLW5ldykpKSkpKSkpCisKKyhl cnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS0tbGltaXQtc3RyaW5nLXdpdGgtZmFjZS1yZW1hcHBlZC1i dWZmZXIgKCkKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAobGV0ICgodGV4dCAocHJvcGVydGl6 ZSAiWFhYWFgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgJ3ZhcmlhYmxlLXBp dGNoKSkpCisgICAgICAoZmFjZS1yZW1hcC1hZGQtcmVsYXRpdmUgJ2RlZmF1bHQgOmhlaWdodCAx LjUpCisgICAgICAoaWYgKD4gZW1hY3MtbWFqb3ItdmVyc2lvbiAzMCkKKyAgICAgICAgICAoc2hv dWxkIChlcQorICAgICAgICAgICAgICAgICAgIDIKKyAgICAgICAgICAgICAgICAgICAobGVuZ3Ro ICh2dGFibGUtLWxpbWl0LXN0cmluZyB0ZXh0IDUwIChjdXJyZW50LWJ1ZmZlcikpKSkpCisgICAg ICAgIChzaG91bGQgKGVxCisgICAgICAgICAgICAgICAgIDIKKyAgICAgICAgICAgICAgICAgKGxl bmd0aCAodnRhYmxlLS1saW1pdC1zdHJpbmcgdGV4dCA1MCkpKSkpKSkpCisKIDs7OyB2dGFibGUt dGVzdHMuZWwgZW5kcyBoZXJlCi0tIAoyLjQ3LjEKCg== --0000000000008478ad064626a743--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 17 Dec 2025 14:13:03 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 17 09:13:03 2025 Received: from localhost ([127.0.0.1]:42079 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVsH0-000557-De for submit <at> debbugs.gnu.org; Wed, 17 Dec 2025 09:13:03 -0500 Received: from mxout1.mail.janestreet.com ([38.105.200.78]:47759) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>) id 1vVsGx-00054Z-2k for 79982 <at> debbugs.gnu.org; Wed, 17 Dec 2025 09:13:00 -0500 Received: from mail-lf1-f69.google.com ([209.85.167.69]) by mxgoog2.mail.janestreet.com with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) (Exim 4.99) id 1vVsGq-00000009b0i-3K3U for 79982 <at> debbugs.gnu.org; Wed, 17 Dec 2025 09:12:53 -0500 Received: by mail-lf1-f69.google.com with SMTP id 2adb3069b0e04-597d583f5ecso4073118e87.3 for <79982 <at> debbugs.gnu.org>; Wed, 17 Dec 2025 06:12:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=google; t=1765980772; x=1766585572; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1izPC4vAK5wgr4UylXU3XbP1kR3XJmmmGzhpgxoV4Tw=; b=Ht6yCq74hz1DfaVaB4mdjlJ6hludgKTzbV8Xs7w2VM/aXEKIh7pmRzRgVVaXXE4ME0 2cwArgMROSqYXsQP3cGfyjJIFw3Qftv3Su8vHxZnKdpGqcZXG/Bnhwrrc400h5HAc5kI zq2Ci0vDTHw69ITfORO8fA8ouosfzwBe9ZCP0= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=waixah; t=1765980773; bh=1izPC4vAK5wgr4UylXU3XbP1kR3XJmmmGzhpgxoV4Tw=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=q8KHfvgTE/+bhnNoaE5olDh90f8UEfnxIbk3C5KwAGK7uTw7GCPFxLNVv2IFlU7tA oelLWlWHaA92muFGE4YeFkKPi0OTMSy1O+t8h3YDv4pQwKKUq+BKUi7wW+5Ljk1U5e Vc2GVejJwrao5HQt4riJ4bMCKOIPLxY+S6CuimAdnVkbUXQMRij3SdNuiqFnXW/Xm5 N3Yu3v58i+u0wgwsJ7yovHxe1DHROiQs3djRj8z99CtuxusvTyK9dv7PiTV0xDqmZo tFpc8h46kddPAxNKrpZM6eH7UqebDNKvjQ/Cy0kzejyZtx9CT+P+NyKGhUgVyTz0xJ HyuZ1a3tsNChw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765980772; x=1766585572; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=1izPC4vAK5wgr4UylXU3XbP1kR3XJmmmGzhpgxoV4Tw=; b=Z17Z+uaNdPuZtJt0kzcX9bUpltQjSxBEoJQK/6jwEDGean/d5/fO71tLJczORaoZpq lEZ/lPtFxZIk05p+dGASKaUjSQHG3IfcU4mCyRAiATG0CBivkrDz2LdsZpo+7tW8qD05 IH26S+tevvV3708foGHIqUdgsx3KLHgpW338oBFgkGRYkr0+rDTb1T9Qbhq3+7334LD2 n1j/Xj0dWH8CobNWnI5R3hCUBzRWiBSjauLWXMuZ00M74aaMFSpqS+KTkhNBRZNtrajx k0/Wfh3KtyUqB5s8QMh9Cmm+7FTt0ssT9c/yOxQoHtiqKxOc5M2gZDjlufVyi+OcVSvs M//g== X-Forwarded-Encrypted: i=1; AJvYcCVn3j3+j6MCGyOOLtvlLF+8CU7M8VFMHl9Db07idiV3TAB5AjUdw+F1FoTj2LWHmFU4Hh5wlA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YxfiOLE/pJINrZ2tmGu23PVCpNaBVMZjB6Av8rWQUF7HdUGR7O1 jb6s8RNUuUWqoAQTS73Y5fv0a4LmREUY2hf2hX67HHnprt4KMYxFXJhmwPH60cmxYcd+11FnEOR /cyWR0JnhciST+DVGQVszqQ48VhqyciRGvrbXJQhYpztHPFSWVfGFMmZG6BCHdKY+dMtarZmGxp RMohZL1KDqioNJQWwoAy22HhKUOHfZJQ== X-Gm-Gg: AY/fxX7AI5fByW0icEtOtOOFHvd/tZR5ohyluguPJfZLSYfepxNjWyoc0+mhSB+gR7h aCBz5NbW2a6ttPFbBkx3wBi6CFrKyCk79Q7Bm/bhcrUeOdCF0G0oWWUyLLRfOmrloYT3PYRBXgn K+l44pjLvdlPKVjO/953TZ4/nMnPThn2BdEA/rqbMev32RVADQJndRXpeFamXJ8NcxFRCPuYOL0 KMhuX64WXdk0iNXHcQMQrNEAMr5V5Tb8ggUnzvd+NiG948YWw== X-Received: by 2002:a05:6512:3c8c:b0:595:9da3:fe6a with SMTP id 2adb3069b0e04-598faa22af3mr6510155e87.10.1765980771344; Wed, 17 Dec 2025 06:12:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IG/j5n/ocohdgHtCbR0XUty5NQPbYbYUQhpkgsHoghV3j+JQHIsDJfnatysT+yJF0tsFLMdgL3Nij0bghWnTog= X-Received: by 2002:a05:6512:3c8c:b0:595:9da3:fe6a with SMTP id 2adb3069b0e04-598faa22af3mr6510130e87.10.1765980770724; Wed, 17 Dec 2025 06:12:50 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> <iertsxvd878.fsf@HIDDEN> <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> <CAN+1HbrqF3OqdZQxgWWWmOjTd4UW4Vu64X5mS28M2N50TgzCgQ@HIDDEN> <ierv7i7xv64.fsf@HIDDEN> <CAN+1Hbriar_5zAHd-cTSqDJOUgYzxJPM9i+2CLCPbXRt_DRwQA@HIDDEN> <CAN+1HboS10cjaUJ=ztDWuL0OMur0U3Nzfj=NpSKcrmqZ6eD82A@HIDDEN> In-Reply-To: <CAN+1HboS10cjaUJ=ztDWuL0OMur0U3Nzfj=NpSKcrmqZ6eD82A@HIDDEN> From: Spencer Baugh <sbaugh@HIDDEN> Date: Wed, 17 Dec 2025 09:12:40 -0500 X-Gm-Features: AQt7F2pzF_Lhlhg1QbVrL9aue5d3FQeq93EIV7VX1dqwW38PuiCMLqnHuc1Byt8 Message-ID: <CAO=BR8OAWvVan4emACKBG2+pMs2KeTfR7+VWdQ5dQcWECJEegw@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Content-Type: multipart/alternative; boundary="00000000000084fbf506462670cd" X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) --00000000000084fbf506462670cd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Yes, looks good to me On Wed, Dec 17, 2025, 8:42=E2=80=AFAM St=C3=A9phane Marks <shipmints@gmail.= com> wrote: > On Mon, Dec 15, 2025 at 6:29=E2=80=AFPM St=C3=A9phane Marks <shipmints@gm= ail.com> > wrote: > >> On Mon, Dec 15, 2025 at 5:00=E2=80=AFPM Spencer Baugh <sbaugh@janestreet= .com> >> wrote: >> >>> St=C3=A9phane Marks <shipmints@HIDDEN> writes: >>> >>> > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <shipmin= ts@HIDDEN> >>> wrote: >>> > >>> > On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <sbaugh@janes= treet.com> >>> wrote: >>> > >>> > St=C3=A9phane Marks <shipmints@HIDDEN> writes: >>> > >>> > > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <shipm= ints@HIDDEN> >>> wrote: >>> > > >>> > > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh < >>> sbaugh@HIDDEN> wrote: >>> > > >>> > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: >>> > > > --- a/lisp/emacs-lisp/vtable.el >>> > > > +++ b/lisp/emacs-lisp/vtable.el >>> > > > @@ -398,56 +403,58 @@ vtable-insert-object >>> > > ... >>> > > > + (with-current-buffer (vtable-buffer table) >>> > > > + (save-excursion >>> > > >>> > > So in the end I think the only way to keep the diff to >>> vtable-insert-object small is >>> > > if you use (set-buffer (vtable-buffer table)) here instead of >>> > > with-current-buffer. It's a bit less normal, but it at least >>> avoids >>> > > some unnecessary indentation. >>> > > >>> > > That is, instead of >>> > > (with-current-buffer (vtable-buffer table) >>> > > (save-excursion >>> > > ...)) >>> > > >>> > > do >>> > > >>> > > (save-excursion >>> > > (set-buffer (vtable-buffer table)) >>> > > ...) >>> > > >>> > > (save-excursion saves and restores the current buffer) >>> > > >>> > > Thanks for making all these changes. I think after that we shoul= d >>> be >>> > > good to go. >>> > > >>> > > While I appreciate the desire for tiny diffs, I prefer that the >>> stanzas used in update insert remove functions remain >>> > consistent >>> > > and we avoid a special comment explaining why insert is special >>> saying this was just for indentation. Hrumph. >>> > > >>> > > The alternative would be to make them all save-excursion, >>> set-buffer, if you think that's worthy. >>> > >>> > IMO that's worth doing. It also saves indentation, so it's actually >>> > somewhat useful in all the places we're currently adding a >>> > with-current-buffer, even if it doesn't avoid a big reindent diff. >>> > >>> > I forgot about the compiler warning >>> > >>> > emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-current-bu= ffer=E2=80=99 >>> rather than save-excursion+set-buffer >>> > >>> > We may also need save-excursion twice, once for what is the ambient >>> current buffer, and the second to ensure that point doesn't >>> > move around in the vtable-buffer. Both of these, I think, are >>> satisfied via with-current-buffer and we avoid the warning. So, >>> > perhaps, we should bite the bullet and swallow the extra indentation >>> in vtable-insert-object and use the more robust and simpler >>> > w-c-b. >>> > >>> > I can get a revised patch out quickly. Can we agree on using >>> with-current-buffer and suffer the few extra indented diff lines? >>> >>> Yes, okay, I agree it's fine. I don't think you need to revise anythin= g >>> there, your most recent patch is fine. (Except for the other issue I >>> just emailed about) >>> >> >> Thanks for catching the buffer-local let bindings. >> >> Here's a revised patch. Up next, a simpler patch optimizing >> vtable--limit-string with a string-length heuristic, and which a bunch o= f >> us have tested. >> > > Looks good to you? I can assume we'll commit this, or very close to it, > and start submitting other patches. There are a lot of changes and the > more parsimonious the patches, the more time this will take and I think w= e > all agree vtable needs a lot of help on top of Lars's great start and I'd > like to see the suite of changes in Emacs 31 so there's not that much tim= e, > if Eli wants to cut a branch soon. > --00000000000084fbf506462670cd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto">Yes, looks good to me</div><br><div class=3D"gmail_quote = gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, Dec 17= , 2025, 8:42=E2=80=AFAM St=C3=A9phane Marks <<a href=3D"mailto:shipmints= @gmail.com">shipmints@HIDDEN</a>> wrote:<br></div><blockquote class= =3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd= ing-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default= " style=3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetic= a,sans-serif">On Mon, Dec 15, 2025 at 6:29=E2=80=AFPM St=C3=A9phane Marks &= lt;<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blank" rel=3D"noreferr= er">shipmints@HIDDEN</a>> wrote:</span></div></div><div class=3D"gmai= l_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8e= x;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"= ><div dir=3D"ltr"><div style=3D"font-family:monospace"><span style=3D"font-= family:Arial,Helvetica,sans-serif">On Mon, Dec 15, 2025 at 5:00=E2=80=AFPM = Spencer Baugh <<a href=3D"mailto:sbaugh@HIDDEN" target=3D"_blank= " rel=3D"noreferrer">sbaugh@HIDDEN</a>> wrote:</span></div></div= ><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"marg= in:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1e= x">St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" target=3D= "_blank" rel=3D"noreferrer">shipmints@HIDDEN</a>> writes:<br> <br> > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <<a hr= ef=3D"mailto:shipmints@HIDDEN" target=3D"_blank" rel=3D"noreferrer">ship= mints@HIDDEN</a>> wrote:<br> ><br> >=C2=A0 On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <<a hr= ef=3D"mailto:sbaugh@HIDDEN" target=3D"_blank" rel=3D"noreferrer">sb= augh@HIDDEN</a>> wrote:<br> ><br> >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" t= arget=3D"_blank" rel=3D"noreferrer">shipmints@HIDDEN</a>> writes:<br> ><br> >=C2=A0 > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks= <<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blank" rel=3D"norefe= rrer">shipmints@HIDDEN</a>> wrote:<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh= <<a href=3D"mailto:sbaugh@HIDDEN" target=3D"_blank" rel=3D"nore= ferrer">sbaugh@HIDDEN</a>> wrote:<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank" rel=3D"noreferrer">shipmints@HIDDEN</a>> = writes:<br> >=C2=A0 >=C2=A0 > --- a/lisp/emacs-lisp/vtable.el<br> >=C2=A0 >=C2=A0 > +++ b/lisp/emacs-lisp/vtable.el<br> >=C2=A0 >=C2=A0 > @@ -398,56 +403,58 @@ vtable-insert-object<br> >=C2=A0 >=C2=A0 ...<br> >=C2=A0 >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtab= le-buffer table)<br> >=C2=A0 >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 So in the end I think the only way to keep the diff t= o vtable-insert-object small is<br> >=C2=A0 >=C2=A0 if you use (set-buffer (vtable-buffer table)) here in= stead of<br> >=C2=A0 >=C2=A0 with-current-buffer.=C2=A0 It's a bit less normal= , but it at least avoids<br> >=C2=A0 >=C2=A0 some unnecessary indentation.<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 That is, instead of<br> >=C2=A0 >=C2=A0 (with-current-buffer (vtable-buffer table)<br> >=C2=A0 >=C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 >=C2=A0 =C2=A0 =C2=A0 ...))<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 do<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 (save-excursion<br> >=C2=A0 >=C2=A0 =C2=A0 (set-buffer (vtable-buffer table))<br> >=C2=A0 >=C2=A0 =C2=A0 ...)<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 (save-excursion saves and restores the current buffer= )<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 Thanks for making all these changes.=C2=A0 I think af= ter that we should be<br> >=C2=A0 >=C2=A0 good to go.<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 While I appreciate the desire for tiny diffs, I prefe= r that the stanzas used in update insert remove functions remain<br> >=C2=A0 consistent<br> >=C2=A0 >=C2=A0 and we avoid a special comment explaining why insert = is special saying this was just for indentation.=C2=A0 Hrumph.<br> >=C2=A0 ><br> >=C2=A0 > The alternative would be to make them all save-excursion, s= et-buffer, if you think that's worthy.<br> ><br> >=C2=A0 IMO that's worth doing.=C2=A0 It also saves indentation, so = it's actually<br> >=C2=A0 somewhat useful in all the places we're currently adding a<b= r> >=C2=A0 with-current-buffer, even if it doesn't avoid a big reindent= diff.<br> ><br> >=C2=A0 I forgot about the compiler warning<br> ><br> >=C2=A0 =C2=A0 emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-c= urrent-buffer=E2=80=99 rather than save-excursion+set-buffer<br> ><br> >=C2=A0 We may also need save-excursion twice, once for what is the ambi= ent current buffer, and the second to ensure that point doesn't<br> >=C2=A0 move around in the vtable-buffer.=C2=A0 Both of these, I think, = are satisfied via with-current-buffer and we avoid the warning.=C2=A0 So,<b= r> >=C2=A0 perhaps, we should bite the bullet and swallow the extra indenta= tion in vtable-insert-object and use the more robust and simpler<br> >=C2=A0 w-c-b.<br> ><br> > I can get a revised patch out quickly.=C2=A0 Can we agree on using wit= h-current-buffer and suffer the few extra indented diff lines?<br> <br> Yes, okay, I agree it's fine.=C2=A0 I don't think you need to revis= e anything<br> there, your most recent patch is fine.=C2=A0 (Except for the other issue I<= br> just emailed about)<br></blockquote><div><br></div><div style=3D"font-famil= y:monospace">Thanks for catching the buffer-local let bindings.</div><div s= tyle=3D"font-family:monospace"><br></div><div style=3D"font-family:monospac= e">Here's a revised patch.=C2=A0 Up next, a simpler patch optimizing vt= able--limit-string with a string-length heuristic, and which a bunch of us = have tested.<br></div></div></div></blockquote><div><br></div><div class=3D= "gmail_default" style=3D"font-family:monospace">Looks good to you?=C2=A0 I = can assume we'll commit this, or very close to it, and start submitting= other patches.=C2=A0 There are a lot of changes and the more parsimonious = the patches, the more time this will take and I think we all agree vtable n= eeds a lot of help on top of Lars's great start and I'd like to see= the suite of changes in Emacs 31 so there's not that much time, if Eli= wants to cut a branch soon.</div></div></div> </blockquote></div> --00000000000084fbf506462670cd--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 17 Dec 2025 13:43:08 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 17 08:43:07 2025 Received: from localhost ([127.0.0.1]:41638 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVro3-0002wA-7X for submit <at> debbugs.gnu.org; Wed, 17 Dec 2025 08:43:07 -0500 Received: from mail-ua1-x933.google.com ([2607:f8b0:4864:20::933]:56500) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vVro0-0002vf-Bt for 79982 <at> debbugs.gnu.org; Wed, 17 Dec 2025 08:43:05 -0500 Received: by mail-ua1-x933.google.com with SMTP id a1e0cc1a2514c-9413e5ee53eso2324254241.0 for <79982 <at> debbugs.gnu.org>; Wed, 17 Dec 2025 05:43:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765978979; x=1766583779; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=xtsJNdwx8+HR4YvuydV1EbPTVkMrKbTPRkhdaP0yUN0=; b=ExakFvmueF6ur5sQZ8AJGwouhkbVff8VRYF3rAFCiT8CinhxlYRfX1ZSUAO8Ug6uqO ZSgRymrRMnApjXf0bDt2dgeOGzNdh9Vl+OfR6sP1sYYnBn6A+A9KJhpB0bTEBsK1lUYJ r321Fj0xsVelkaY44AZFModS5/+s3oTIhZLroU/ZU6EmCjb+s5/o5mv57UKcpaY5cXb/ bXqc9MQ5jzkeANES0AQ5sxs9QD/MIdAfLdT4+OCzKvko2cj/QC/diG3l/NWzgKI6gvUI X4SrsHMKKq8iF9XZz3QZwNisZdlUFJFj8+jsmLf2FYKGZI+LxjwcfDfYRXc5QKGhlACC WIRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765978979; x=1766583779; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=xtsJNdwx8+HR4YvuydV1EbPTVkMrKbTPRkhdaP0yUN0=; b=UlOWnG3U836tyF/AxZuakl+m7hAzkyqwlvZi7XQ6m+4Pq21wcsNaiWlP80au0sw9Ey DQOJZc8N6KHU5TOUjD9J7+Vap0hZDJgMx3oUtExjQQ+Zrdx+6PgyJf4tkoa8oC2pawJ0 GIOghqTJTruDOMoqXJxeDLIZOhhbyWxdEwKoZI/D9XJnBULIU/ckzv4oMewhrCgL5J8D EXRY8todBhuxIFd9tWqjo4BNcXjivkO2fDSAsKe8S0u3YAr5rV1cehHjXWjdIBymqB07 4teb8pgS58EfPEo2WrZwD0l/rUof/yqMsARJEVPsArT2i3XqrzIepavB1VfaFB2UA51r n5VQ== X-Forwarded-Encrypted: i=1; AJvYcCVhQCfWjwV1Gquo6bzMUBTCude1LhOli33STkaA0A0I6u5f6jyVg9DifejshPZpPxsyl9RNTg==@debbugs.gnu.org X-Gm-Message-State: AOJu0YxT+nU/2QpxEzTaYEbpQXMum2lrpJ25CFg3rd7PUQqHx+rDmuEh MUIEJf1M2zBHsa4/LA4DIcPVuAyydSK+2ah9dL9/d/LaDcR65zQiEyxps6Xi+ft46533M4D3aS8 lQQ2n3qp7OSFn/YBHtYPCOeO/VWA3+ms= X-Gm-Gg: AY/fxX7KSouga9zz67r2Ns90WRkvU+jOxy9sLonKlwhmjohUoIw3t/uMyWz42RzMw36 7kwY7Zh5qHNNOmf+ToOeL4jAgT+udFwKDi+ZW7HB1nNp9tDzXsjWS5V1jqDGTM3GhP03rL5bPOr uY7/APbHWS8DTUfE+Lc2cyRCyR6VWNR1S5iLGt+v+5LqpEeFhFQ7b6UZMPYqM9HhtO5N7ZiLFnl yW/AUjPQ57yMqqGAk1SsxW3ENneo8JhGNPymo8ew74dJWkGM3PQjL2fKQ7yxk26BWUooFE= X-Google-Smtp-Source: AGHT+IGaEm2l3ihLabdSY52b00KDdoVWB816VtPhDtY8pej2ewO5XvdoxKJvc+U4lXOo0tO95+adaOYv1BTi7Yj1igI= X-Received: by 2002:a05:6102:6442:b0:5de:93bb:c56a with SMTP id ada2fe7eead31-5e827835874mr7439484137.34.1765978978684; Wed, 17 Dec 2025 05:42:58 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> <iertsxvd878.fsf@HIDDEN> <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> <CAN+1HbrqF3OqdZQxgWWWmOjTd4UW4Vu64X5mS28M2N50TgzCgQ@HIDDEN> <ierv7i7xv64.fsf@HIDDEN> <CAN+1Hbriar_5zAHd-cTSqDJOUgYzxJPM9i+2CLCPbXRt_DRwQA@HIDDEN> In-Reply-To: <CAN+1Hbriar_5zAHd-cTSqDJOUgYzxJPM9i+2CLCPbXRt_DRwQA@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Wed, 17 Dec 2025 08:42:47 -0500 X-Gm-Features: AQt7F2rxYC-5HC7nFGm1Re7LmhIf7YOPsJyX8GRopbBNuVbq3WsW21JRL-fq4NQ Message-ID: <CAN+1HboS10cjaUJ=ztDWuL0OMur0U3Nzfj=NpSKcrmqZ6eD82A@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000b490e506462605cd" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000b490e506462605cd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Dec 15, 2025 at 6:29=E2=80=AFPM St=C3=A9phane Marks <shipmints@gmai= l.com> wrote: > On Mon, Dec 15, 2025 at 5:00=E2=80=AFPM Spencer Baugh <sbaugh@janestreet.= com> > wrote: > >> St=C3=A9phane Marks <shipmints@HIDDEN> writes: >> >> > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <shipmint= s@HIDDEN> >> wrote: >> > >> > On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <sbaugh@janest= reet.com> >> wrote: >> > >> > St=C3=A9phane Marks <shipmints@HIDDEN> writes: >> > >> > > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <shipmi= nts@HIDDEN> >> wrote: >> > > >> > > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh < >> sbaugh@HIDDEN> wrote: >> > > >> > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: >> > > > --- a/lisp/emacs-lisp/vtable.el >> > > > +++ b/lisp/emacs-lisp/vtable.el >> > > > @@ -398,56 +403,58 @@ vtable-insert-object >> > > ... >> > > > + (with-current-buffer (vtable-buffer table) >> > > > + (save-excursion >> > > >> > > So in the end I think the only way to keep the diff to >> vtable-insert-object small is >> > > if you use (set-buffer (vtable-buffer table)) here instead of >> > > with-current-buffer. It's a bit less normal, but it at least avoi= ds >> > > some unnecessary indentation. >> > > >> > > That is, instead of >> > > (with-current-buffer (vtable-buffer table) >> > > (save-excursion >> > > ...)) >> > > >> > > do >> > > >> > > (save-excursion >> > > (set-buffer (vtable-buffer table)) >> > > ...) >> > > >> > > (save-excursion saves and restores the current buffer) >> > > >> > > Thanks for making all these changes. I think after that we should >> be >> > > good to go. >> > > >> > > While I appreciate the desire for tiny diffs, I prefer that the >> stanzas used in update insert remove functions remain >> > consistent >> > > and we avoid a special comment explaining why insert is special >> saying this was just for indentation. Hrumph. >> > > >> > > The alternative would be to make them all save-excursion, >> set-buffer, if you think that's worthy. >> > >> > IMO that's worth doing. It also saves indentation, so it's actually >> > somewhat useful in all the places we're currently adding a >> > with-current-buffer, even if it doesn't avoid a big reindent diff. >> > >> > I forgot about the compiler warning >> > >> > emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-current-buf= fer=E2=80=99 >> rather than save-excursion+set-buffer >> > >> > We may also need save-excursion twice, once for what is the ambient >> current buffer, and the second to ensure that point doesn't >> > move around in the vtable-buffer. Both of these, I think, are >> satisfied via with-current-buffer and we avoid the warning. So, >> > perhaps, we should bite the bullet and swallow the extra indentation >> in vtable-insert-object and use the more robust and simpler >> > w-c-b. >> > >> > I can get a revised patch out quickly. Can we agree on using >> with-current-buffer and suffer the few extra indented diff lines? >> >> Yes, okay, I agree it's fine. I don't think you need to revise anything >> there, your most recent patch is fine. (Except for the other issue I >> just emailed about) >> > > Thanks for catching the buffer-local let bindings. > > Here's a revised patch. Up next, a simpler patch optimizing > vtable--limit-string with a string-length heuristic, and which a bunch of > us have tested. > Looks good to you? I can assume we'll commit this, or very close to it, and start submitting other patches. There are a lot of changes and the more parsimonious the patches, the more time this will take and I think we all agree vtable needs a lot of help on top of Lars's great start and I'd like to see the suite of changes in Emacs 31 so there's not that much time, if Eli wants to cut a branch soon. --000000000000b490e506462605cd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Mon, Dec 15, 2025 at 6:29=E2=80=AFPM St=C3=A9phane Marks <<a href=3D"= mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:</span></div>= </div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D= "gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2= 04,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style= =3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-= serif">On Mon, Dec 15, 2025 at 5:00=E2=80=AFPM Spencer Baugh <<a href=3D= "mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN</a>&= gt; wrote:</span></div></div><div class=3D"gmail_quote"><blockquote class= =3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg= b(204,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:= shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<= br> <br> > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <<a hr= ef=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>= > wrote:<br> ><br> >=C2=A0 On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <<a hr= ef=3D"mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN= </a>> wrote:<br> ><br> >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" t= arget=3D"_blank">shipmints@HIDDEN</a>> writes:<br> ><br> >=C2=A0 > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks= <<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@gma= il.com</a>> wrote:<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh= <<a href=3D"mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@jane= street.com</a>> wrote:<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> >=C2=A0 >=C2=A0 > --- a/lisp/emacs-lisp/vtable.el<br> >=C2=A0 >=C2=A0 > +++ b/lisp/emacs-lisp/vtable.el<br> >=C2=A0 >=C2=A0 > @@ -398,56 +403,58 @@ vtable-insert-object<br> >=C2=A0 >=C2=A0 ...<br> >=C2=A0 >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtab= le-buffer table)<br> >=C2=A0 >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 So in the end I think the only way to keep the diff t= o vtable-insert-object small is<br> >=C2=A0 >=C2=A0 if you use (set-buffer (vtable-buffer table)) here in= stead of<br> >=C2=A0 >=C2=A0 with-current-buffer.=C2=A0 It's a bit less normal= , but it at least avoids<br> >=C2=A0 >=C2=A0 some unnecessary indentation.<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 That is, instead of<br> >=C2=A0 >=C2=A0 (with-current-buffer (vtable-buffer table)<br> >=C2=A0 >=C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 >=C2=A0 =C2=A0 =C2=A0 ...))<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 do<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 (save-excursion<br> >=C2=A0 >=C2=A0 =C2=A0 (set-buffer (vtable-buffer table))<br> >=C2=A0 >=C2=A0 =C2=A0 ...)<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 (save-excursion saves and restores the current buffer= )<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 Thanks for making all these changes.=C2=A0 I think af= ter that we should be<br> >=C2=A0 >=C2=A0 good to go.<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 While I appreciate the desire for tiny diffs, I prefe= r that the stanzas used in update insert remove functions remain<br> >=C2=A0 consistent<br> >=C2=A0 >=C2=A0 and we avoid a special comment explaining why insert = is special saying this was just for indentation.=C2=A0 Hrumph.<br> >=C2=A0 ><br> >=C2=A0 > The alternative would be to make them all save-excursion, s= et-buffer, if you think that's worthy.<br> ><br> >=C2=A0 IMO that's worth doing.=C2=A0 It also saves indentation, so = it's actually<br> >=C2=A0 somewhat useful in all the places we're currently adding a<b= r> >=C2=A0 with-current-buffer, even if it doesn't avoid a big reindent= diff.<br> ><br> >=C2=A0 I forgot about the compiler warning<br> ><br> >=C2=A0 =C2=A0 emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-c= urrent-buffer=E2=80=99 rather than save-excursion+set-buffer<br> ><br> >=C2=A0 We may also need save-excursion twice, once for what is the ambi= ent current buffer, and the second to ensure that point doesn't<br> >=C2=A0 move around in the vtable-buffer.=C2=A0 Both of these, I think, = are satisfied via with-current-buffer and we avoid the warning.=C2=A0 So,<b= r> >=C2=A0 perhaps, we should bite the bullet and swallow the extra indenta= tion in vtable-insert-object and use the more robust and simpler<br> >=C2=A0 w-c-b.<br> ><br> > I can get a revised patch out quickly.=C2=A0 Can we agree on using wit= h-current-buffer and suffer the few extra indented diff lines?<br> <br> Yes, okay, I agree it's fine.=C2=A0 I don't think you need to revis= e anything<br> there, your most recent patch is fine.=C2=A0 (Except for the other issue I<= br> just emailed about)<br></blockquote><div><br></div><div style=3D"font-famil= y:monospace">Thanks for catching the buffer-local let bindings.</div><div s= tyle=3D"font-family:monospace"><br></div><div style=3D"font-family:monospac= e">Here's a revised patch.=C2=A0 Up next, a simpler patch optimizing vt= able--limit-string with a string-length heuristic, and which a bunch of us = have tested.<br></div></div></div></blockquote><div><br></div><div class=3D= "gmail_default" style=3D"font-family:monospace">Looks good to you?=C2=A0 I = can assume we'll commit this, or very close to it, and start submitting= other patches.=C2=A0 There are a lot of changes and the more parsimonious = the patches, the more time this will take and I think we all agree vtable n= eeds a lot of help on top of Lars's great start and I'd like to see= the suite of changes in Emacs 31 so there's not that much time, if Eli= wants to cut a branch soon.</div></div></div> --000000000000b490e506462605cd--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 15 Dec 2025 23:30:00 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Dec 15 18:30:00 2025 Received: from localhost ([127.0.0.1]:45795 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVI0t-0007r2-7n for submit <at> debbugs.gnu.org; Mon, 15 Dec 2025 18:29:59 -0500 Received: from mail-vs1-xe34.google.com ([2607:f8b0:4864:20::e34]:44105) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vVI0p-0007qi-Cs for 79982 <at> debbugs.gnu.org; Mon, 15 Dec 2025 18:29:56 -0500 Received: by mail-vs1-xe34.google.com with SMTP id ada2fe7eead31-5dfc6be7df3so1469266137.0 for <79982 <at> debbugs.gnu.org>; Mon, 15 Dec 2025 15:29:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765841389; x=1766446189; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=mLZLIQseJIt+1N6loCr5N/ju2xxGMD1GMIjmSb2S2qk=; b=JvvQOcvLoWcNHcSfMSZANqq434p9Ndmw/Zv+qRjUb2FaXzpAGvyiD63MdjOb5Jk3tm DUKARBdeFy9pqybuLIgmqy97kG3rnzMSBSqIO96Dw9uNyNqM+hWc9+t0d1gUZMNvWre3 QmOpP6JLXJHeApXPzHrnEBlj5WmtwLYtUZlGR5BD+tSATRFr0Z1uqkXLKm8Jxq2vVCRF TEWvD9xVEWoaVpBxWa5W+Tz2aBB4Bgq1Jy0RMPccnIasY706Y0OYpsatOiwwkM7oyTW7 3TWXJMryWFc4918SXvy4EDsDStm3xrTlxB1iWbbfhShIV5JJPKVJhQ4YrpdUjNoGVFWO Abfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765841389; x=1766446189; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mLZLIQseJIt+1N6loCr5N/ju2xxGMD1GMIjmSb2S2qk=; b=FWc8eVrjCWUHehyTQXpnQ9NeQgP4lItCYpmMXFWWv3lfTAolDO7MaLnYT9zOsxtz/4 5ywgmETq9k2s4DnjHjhCVOpJo008AzzIPpnLhnR5eEeAMKysGY5aeU7IRyTvw48Zie6Q 70jK47dQGlPdm7cVUsoSNj7Ad6328VFnBcpQCQQ49HXDHif4NjcZc0gKwO7kbfzMR33I WWUYh8jFxtA/5p7380HNgd/tnfNmJBIncnSug7eIdTWgkIy9T8tN+Un28gJN4Y6hJo7l r6yIIGq8wFeVuheiHaNalq4L/QXQO15eHQ29GrPI0yt8dThtt3BJ2zD2ZpdS5fa24sZT SfCw== X-Forwarded-Encrypted: i=1; AJvYcCVSTRuR3SzlZXMRiNtYNf2CfLgFV8Rlt+sW2JUalF0bmSZLZC9n+LN3IZXKA3sVNZSP4aPRSA==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yw4WQaC8lklI/MnOprgArw4rMmw224T4Z/unbC8uxRE2tUNqalB Z0YZ4owwUYpV3gmErLsj4SazA6/vkBAErGpXtu174Odo+BPV21iTqZdT8SIBcDpJYqM2LeNCXyn /U/tz3bUvTOeRYHVupahvn7KlYag+rvk= X-Gm-Gg: AY/fxX7+bAxFypejaqW2Cz/wPRi50sd82Hw+b8eHqZcb8Q2ImTyvkY16QcIik0VJxdf gYKVRFNT2A5KGvRdj/5yqxa8UNmLHiOJBwBKs4vUu6wC9oNHuKN9diUt3FFzrkW5AN6E5Vb7Rcf YebRRSG7jrqQ/+px2zdL9z0mml5L5x3dg30GgrSjKb3gvjJjwdmGlW5J72z+vX4Ps/LUsPsxiMq /jQnNuig+zSlBWS4/HyjYoMpegcGh+bNbbPV9XTSzzAPpbVwXYW1m47mLxxjxUWZPi/Iao= X-Google-Smtp-Source: AGHT+IHOROuMlvgwN9+Tw6NUhyJ/xspvK5Pey1+PU4vhEjssPTWNhJi7QCtqUqbpmmlaIsvT4cvmIrnpt4RltuV/BYQ= X-Received: by 2002:a05:6102:4b08:b0:5db:e297:2c6c with SMTP id ada2fe7eead31-5e8278498demr4266942137.42.1765841389468; Mon, 15 Dec 2025 15:29:49 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> <iertsxvd878.fsf@HIDDEN> <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> <CAN+1HbrqF3OqdZQxgWWWmOjTd4UW4Vu64X5mS28M2N50TgzCgQ@HIDDEN> <ierv7i7xv64.fsf@HIDDEN> In-Reply-To: <ierv7i7xv64.fsf@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Mon, 15 Dec 2025 18:29:36 -0500 X-Gm-Features: AQt7F2pRcbFBRP2J54UfyeYxOntbk27cI5Vusw375EcYL1N_BbxYuK855YZ1e6o Message-ID: <CAN+1Hbriar_5zAHd-cTSqDJOUgYzxJPM9i+2CLCPbXRt_DRwQA@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/mixed; boundary="000000000000bfd80b064605fc16" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000bfd80b064605fc16 Content-Type: multipart/alternative; boundary="000000000000bfd80a064605fc14" --000000000000bfd80a064605fc14 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Dec 15, 2025 at 5:00=E2=80=AFPM Spencer Baugh <sbaugh@HIDDEN= m> wrote: > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <shipmints= @gmail.com> > wrote: > > > > On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <sbaugh@janestr= eet.com> > wrote: > > > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > > > > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <shipmin= ts@HIDDEN> > wrote: > > > > > > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <sbaugh@janes= treet.com> > wrote: > > > > > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > > > --- a/lisp/emacs-lisp/vtable.el > > > > +++ b/lisp/emacs-lisp/vtable.el > > > > @@ -398,56 +403,58 @@ vtable-insert-object > > > ... > > > > + (with-current-buffer (vtable-buffer table) > > > > + (save-excursion > > > > > > So in the end I think the only way to keep the diff to > vtable-insert-object small is > > > if you use (set-buffer (vtable-buffer table)) here instead of > > > with-current-buffer. It's a bit less normal, but it at least avoid= s > > > some unnecessary indentation. > > > > > > That is, instead of > > > (with-current-buffer (vtable-buffer table) > > > (save-excursion > > > ...)) > > > > > > do > > > > > > (save-excursion > > > (set-buffer (vtable-buffer table)) > > > ...) > > > > > > (save-excursion saves and restores the current buffer) > > > > > > Thanks for making all these changes. I think after that we should = be > > > good to go. > > > > > > While I appreciate the desire for tiny diffs, I prefer that the > stanzas used in update insert remove functions remain > > consistent > > > and we avoid a special comment explaining why insert is special > saying this was just for indentation. Hrumph. > > > > > > The alternative would be to make them all save-excursion, set-buffer= , > if you think that's worthy. > > > > IMO that's worth doing. It also saves indentation, so it's actually > > somewhat useful in all the places we're currently adding a > > with-current-buffer, even if it doesn't avoid a big reindent diff. > > > > I forgot about the compiler warning > > > > emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-current-buff= er=E2=80=99 > rather than save-excursion+set-buffer > > > > We may also need save-excursion twice, once for what is the ambient > current buffer, and the second to ensure that point doesn't > > move around in the vtable-buffer. Both of these, I think, are > satisfied via with-current-buffer and we avoid the warning. So, > > perhaps, we should bite the bullet and swallow the extra indentation i= n > vtable-insert-object and use the more robust and simpler > > w-c-b. > > > > I can get a revised patch out quickly. Can we agree on using > with-current-buffer and suffer the few extra indented diff lines? > > Yes, okay, I agree it's fine. I don't think you need to revise anything > there, your most recent patch is fine. (Except for the other issue I > just emailed about) > Thanks for catching the buffer-local let bindings. Here's a revised patch. Up next, a simpler patch optimizing vtable--limit-string with a string-length heuristic, and which a bunch of us have tested. -St=C3=A9phane --000000000000bfd80a064605fc14 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Mon, Dec 15, 2025 at 5:00=E2=80=AFPM Spencer Baugh <<a href=3D"mailto= :sbaugh@HIDDEN">sbaugh@HIDDEN</a>> wrote:</span></div></= div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"g= mail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204= ,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:shipm= ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> <br> > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <<a hr= ef=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>= > wrote:<br> ><br> >=C2=A0 On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <<a hr= ef=3D"mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN= </a>> wrote:<br> ><br> >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" t= arget=3D"_blank">shipmints@HIDDEN</a>> writes:<br> ><br> >=C2=A0 > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks= <<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@gma= il.com</a>> wrote:<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh= <<a href=3D"mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@jane= street.com</a>> wrote:<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> >=C2=A0 >=C2=A0 > --- a/lisp/emacs-lisp/vtable.el<br> >=C2=A0 >=C2=A0 > +++ b/lisp/emacs-lisp/vtable.el<br> >=C2=A0 >=C2=A0 > @@ -398,56 +403,58 @@ vtable-insert-object<br> >=C2=A0 >=C2=A0 ...<br> >=C2=A0 >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtab= le-buffer table)<br> >=C2=A0 >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 So in the end I think the only way to keep the diff t= o vtable-insert-object small is<br> >=C2=A0 >=C2=A0 if you use (set-buffer (vtable-buffer table)) here in= stead of<br> >=C2=A0 >=C2=A0 with-current-buffer.=C2=A0 It's a bit less normal= , but it at least avoids<br> >=C2=A0 >=C2=A0 some unnecessary indentation.<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 That is, instead of<br> >=C2=A0 >=C2=A0 (with-current-buffer (vtable-buffer table)<br> >=C2=A0 >=C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 >=C2=A0 =C2=A0 =C2=A0 ...))<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 do<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 (save-excursion<br> >=C2=A0 >=C2=A0 =C2=A0 (set-buffer (vtable-buffer table))<br> >=C2=A0 >=C2=A0 =C2=A0 ...)<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 (save-excursion saves and restores the current buffer= )<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 Thanks for making all these changes.=C2=A0 I think af= ter that we should be<br> >=C2=A0 >=C2=A0 good to go.<br> >=C2=A0 ><br> >=C2=A0 >=C2=A0 While I appreciate the desire for tiny diffs, I prefe= r that the stanzas used in update insert remove functions remain<br> >=C2=A0 consistent<br> >=C2=A0 >=C2=A0 and we avoid a special comment explaining why insert = is special saying this was just for indentation.=C2=A0 Hrumph.<br> >=C2=A0 ><br> >=C2=A0 > The alternative would be to make them all save-excursion, s= et-buffer, if you think that's worthy.<br> ><br> >=C2=A0 IMO that's worth doing.=C2=A0 It also saves indentation, so = it's actually<br> >=C2=A0 somewhat useful in all the places we're currently adding a<b= r> >=C2=A0 with-current-buffer, even if it doesn't avoid a big reindent= diff.<br> ><br> >=C2=A0 I forgot about the compiler warning<br> ><br> >=C2=A0 =C2=A0 emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-c= urrent-buffer=E2=80=99 rather than save-excursion+set-buffer<br> ><br> >=C2=A0 We may also need save-excursion twice, once for what is the ambi= ent current buffer, and the second to ensure that point doesn't<br> >=C2=A0 move around in the vtable-buffer.=C2=A0 Both of these, I think, = are satisfied via with-current-buffer and we avoid the warning.=C2=A0 So,<b= r> >=C2=A0 perhaps, we should bite the bullet and swallow the extra indenta= tion in vtable-insert-object and use the more robust and simpler<br> >=C2=A0 w-c-b.<br> ><br> > I can get a revised patch out quickly.=C2=A0 Can we agree on using wit= h-current-buffer and suffer the few extra indented diff lines?<br> <br> Yes, okay, I agree it's fine.=C2=A0 I don't think you need to revis= e anything<br> there, your most recent patch is fine.=C2=A0 (Except for the other issue I<= br> just emailed about)<br></blockquote><div><br></div><div class=3D"gmail_defa= ult" style=3D"font-family:monospace">Thanks for catching the buffer-local l= et bindings.</div><div class=3D"gmail_default" style=3D"font-family:monospa= ce"><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">= Here's a revised patch.=C2=A0 Up next, a simpler patch optimizing vtabl= e--limit-string with a string-length heuristic, and which a bunch of us hav= e tested.</div><div class=3D"gmail_default" style=3D"font-family:monospace"= ><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">-St= =C3=A9phane=C2=A0</div></div></div> --000000000000bfd80a064605fc14-- --000000000000bfd80b064605fc16 Content-Type: application/octet-stream; name="0001-Add-vtable-buffer-slot.patch" Content-Disposition: attachment; filename="0001-Add-vtable-buffer-slot.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mj7sd06a0> X-Attachment-Id: f_mj7sd06a0 RnJvbSA4MTk1M2IwMTBmODNlNjQ0YzJmNTUwNTlhNDkyYzViZmI2YTEzYmE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTAgRGVjIDIwMjUgMDk6MjA6MDIgLTA1MDAK U3ViamVjdDogW1BBVENIXSBBZGQgdnRhYmxlIGJ1ZmZlciBzbG90CgpUaGlzIHNvbHZlcyBmb3Ig YmFja2dyb3VuZCB2dGFibGUgbXV0YXRpb25zLCBpLmUuLCB1cGRhdGVzCmluaXRpYXRlZCBmcm9t IGJ1ZmZlcnMgb3RoZXIgdGhhbiB0aGUgdnRhYmxlIGJ1ZmZlciwgYW5kIGZvcgpidWZmZXItYWRq dXN0ZWQgc3RyaW5nLXBpeGVsLXdpZHRoIGNvbXB1dGF0aW9ucy4KCiogbGlzcC9lbWFjcy1saXNw L3Z0YWJsZS5lbCAodnRhYmxlKTogTmV3ICctYnVmZmVyJyBzbG90LgoodnRhYmxlLWJ1ZmZlcik6 Cih2dGFibGUtc2V0LWJ1ZmZlcik6IE5ldyBmdW5jdGlvbi4KKHZ0YWJsZS11cGRhdGUtb2JqZWN0 KToKKHZ0YWJsZS1yZW1vdmUtb2JqZWN0KToKKHZ0YWJsZS1pbnNlcnQtb2JqZWN0KTogV3JhcCBv cGVyYXRpb24gd2l0aCB0aGUgdnRhYmxlIGJ1ZmZlci4KKHZ0YWJsZS0taW5zZXJ0KTogU3BsaXQg ZnJvbSBvbGQgJ3Z0YWJsZS1pbnNlcnQnLgoodnRhYmxlLWluc2VydCk6IEluc2VydCB0YWJsZSBh bmQgcmVjb3JkIHRoZSBidWZmZXIuCih2dGFibGUtLWluc2VydC1saW5lKToKKHZ0YWJsZS0taW5z ZXJ0LWhlYWRlci1saW5lKTogVXNlICd2dGFibGUtYnVmZmVyJyBmb3IgcGl4ZWwtd2lkdGggY29t cHV0YXRpb24uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6Cih2dGFibGUtLWNoYXItd2lkdGgpOiBQ YXNzIGJ1ZmZlciB0byAnc3RyaW5nLXBpeGVsLXdpZHRoJy4KKHZ0YWJsZS1yZXZlcnQpOiBOZXcg b3B0aW9uYWwgdGFibGUgYXJndW1lbnQuCih2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCk6Cih2 dGFibGUtcmV2ZXJ0LWNvbW1hbmQpOgoodnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4pOiBD YWxsICd2dGFibGUtcmV2ZXJ0JyB3aXRoIHRoZSB0YWJsZS4KCiogdGVzdC9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLXRlc3RzLmVsCih2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0 LXRhYmxlKTogTmV3IGhlbHBlcgpmdW5jdGlvbi4KKHRlc3QtdnN0YWJsZS1jb21wdXRlLWNvbHVt bnMpOiBDb3JyZWN0IHR5cG8gaW4gdGVzdCBuYW1lLiAgVXNlCm5ldyBoZWxwZXIgZnVuY3Rpb24u Cih0ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyKQoodGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVm ZmVyLWluc2VydC1vYmplY3QpCih0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3Zl LW9iamVjdCkKKHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUtb2JqZWN0KQoo dGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRoLWZhY2UtcmVtYXBwZWQtYnVmZmVyKTogTmV3 IHRlc3QuCi0tLQogbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCAgICAgICAgICAgIHwgMzIxICsr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRl c3RzLmVsIHwgIDg0ICsrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMjU2IGluc2VydGlvbnMoKyks IDE0OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVs IGIvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbAppbmRleCBiY2RkMjgwZmI5Mi4uMjk3OTFlMmFh YTAgMTAwNjQ0Ci0tLSBhL2xpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwKKysrIGIvbGlzcC9lbWFj cy1saXNwL3Z0YWJsZS5lbApAQCAtNjcsOCArNjcsMTAgQEAgdnRhYmxlCiAgICAoZWxsaXBzaXMg OmluaXRhcmcgOmVsbGlwc2lzIDphY2Nlc3NvciB2dGFibGUtZWxsaXBzaXMpCiAgICAoY29sdW1u LWNvbG9ycyA6aW5pdGFyZyA6Y29sdW1uLWNvbG9ycyA6YWNjZXNzb3IgdnRhYmxlLWNvbHVtbi1j b2xvcnMpCiAgICAocm93LWNvbG9ycyA6aW5pdGFyZyA6cm93LWNvbG9ycyA6YWNjZXNzb3IgdnRh YmxlLXJvdy1jb2xvcnMpCisgICAoYnVmZmVyIDppbml0Zm9ybSBuaWwgOmFjY2Vzc29yIHZ0YWJs ZS1idWZmZXIpCiAgICAoLWNhY2hlZC1jb2xvcnMgOmluaXRmb3JtIG5pbCkKICAgICgtY2FjaGUg OmluaXRmb3JtIChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCkpCisgICAoLWN1cnJlbnQt Y2FjaGUgOmluaXRmb3JtIG5pbCA6YWNjZXNzb3IgdnRhYmxlLS1jdXJyZW50LWNhY2hlKQogICAg KC1jYWNoZWQta2V5bWFwIDppbml0Zm9ybSBuaWwpCiAgICAoLWhhcy1jb2x1bW4tc3BlYyA6aW5p dGZvcm0gbmlsKSkKICAgIkFuIG9iamVjdCB0byBob2xkIHRoZSBkYXRhIGZvciBhIHRhYmxlLiIp CkBAIC0yODcsOCArMjg5LDcgQEAgdnRhYmxlLXVwZGF0ZS1vYmplY3QKIFRBQkxFIG11c3QgYmUg YXQgcG9pbnQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiIKICAgKHVubGVzcyBvbGQtb2JqZWN0CiAg ICAgKHNldHEgb2xkLW9iamVjdCBvYmplY3QpKQotICAobGV0KiAoKG9iamVjdHMgKHZ0YWJsZS1v YmplY3RzIHRhYmxlKSkKLSAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KSkKKyAgKGxldCAo KG9iamVjdHMgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkpCiAgICAgOzsgRmlyc3QgcmVwbGFjZSB0 aGUgb2JqZWN0IGluIHRoZSBvYmplY3Qgc3RvcmFnZS4KICAgICAoaWYgKGVxIG9sZC1vYmplY3Qg KGNhciBvYmplY3RzKSkKICAgICAgICAgOzsgSXQncyBhdCB0aGUgaGVhZCwgc28gcmVwbGFjZSBp dCB0aGVyZS4KQEAgLTMwMSwzMSArMzAyLDMyIEBAIHZ0YWJsZS11cGRhdGUtb2JqZWN0CiAgICAg ICAodW5sZXNzIChjZHIgb2JqZWN0cykKICAgICAgICAgKGVycm9yICJDYW4ndCBmaW5kIHRoZSBv bGQgb2JqZWN0IikpCiAgICAgICAoc2V0Y2FyIChjZHIgb2JqZWN0cykgb2JqZWN0KSkKLSAgICA7 OyBUaGVuIHVwZGF0ZSB0aGUgcmVuZGVyZWQgdnRhYmxlIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4K LSAgICAoaWYtbGV0KiAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAg ICAgIChsaW5lLW51bWJlciAoc2VxLXBvc2l0aW9uICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hl KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC1vYmplY3QKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChhIGIpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWwgKGNhciBhKSBiKSkp KQotICAgICAgICAgICAgIChsaW5lIChlbHQgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpIGxp bmUtbnVtYmVyKSkpCi0gICAgICAgIChwcm9nbgotICAgICAgICAgIChzZXRjYXIgbGluZSBvYmpl Y3QpCi0gICAgICAgICAgKHNldGNkciBsaW5lICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUg dGFibGUgb2JqZWN0KSkKLSAgICAgICAgICA7OyAuLi4gYW5kIHJlZGlzcGxheSB0aGUgbGluZSBp biBxdWVzdGlvbi4KLSAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICAgICAgICh2dGFi bGUtZ290by1vYmplY3Qgb2xkLW9iamVjdCkKLSAgICAgICAgICAgIChsZXQgKChrZXltYXAgKGdl dC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2tleW1hcCkpCi0gICAgICAgICAgICAgICAgICAoc3Rh cnQgKHBvaW50KSkpCi0gICAgICAgICAgICAgIChkZWxldGUtbGluZSkKLSAgICAgICAgICAgICAg KHZ0YWJsZS0taW5zZXJ0LWxpbmUgdGFibGUgbGluZSBsaW5lLW51bWJlcgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCi0g ICAgICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tl eW1hcCBrZXltYXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAndnRhYmxlIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZS1jYWNoZSBjYWNoZSkpKSkKLSAgICAgICAg ICA7OyBXZSBtYXkgaGF2ZSBpbnNlcnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHBy ZXZpb3VzbHkKLSAgICAgICAgICA7OyBhbGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUu Ci0gICAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAoY2RyIGxpbmUp KSkKKyAgICA7OyBUaGVuIHVwZGF0ZSB0aGUgcmVuZGVyZWQgdnRhYmxlIGluIGl0cyBidWZmZXIu CisgICAgKGlmLWxldCogKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlIHRhYmxlKSkKKyAg ICAgICAgICAgICAgKGxpbmUtbnVtYmVyIChzZXEtcG9zaXRpb24gKHZ0YWJsZS0tY2FjaGUtbGlu ZXMgY2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC1v YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAo YSBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbCAo Y2FyIGEpIGIpKSkpCisgICAgICAgICAgICAgIChsaW5lIChlbHQgKHZ0YWJsZS0tY2FjaGUtbGlu ZXMgY2FjaGUpIGxpbmUtbnVtYmVyKSkpCisgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2 dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICAgICAgIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0 KQorICAgICAgICAgICAgICAgIChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkKKyAgICAg ICAgICAgIChzZXRjYXIgbGluZSBvYmplY3QpCisgICAgICAgICAgICAoc2V0Y2RyIGxpbmUgKHZ0 YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKQorICAgICAgICAgICAgOzsg Li4uIGFuZCByZWRpc3BsYXkgdGhlIGxpbmUgaW4gcXVlc3Rpb24uCisgICAgICAgICAgICAoc2F2 ZS1leGN1cnNpb24KKyAgICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvbGQtb2JqZWN0 KQorICAgICAgICAgICAgICAobGV0ICgoa2V5bWFwIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQp ICdrZXltYXApKQorICAgICAgICAgICAgICAgICAgICAoc3RhcnQgKHBvaW50KSkpCisgICAgICAg ICAgICAgICAgKGRlbGV0ZS1saW5lKQorICAgICAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1s aW5lIHRhYmxlIGxpbmUgbGluZS1udW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKSkKKyAgICAgICAgICAgICAg ICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpIChsaXN0ICdrZXltYXAga2V5bWFw CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAndnRhYmxlIHRhYmxlKSkpKQorICAgICAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQg YSBub24tbnVtZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5CisgICAgICAgICAgICA7OyBh bGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCisgICAgICAgICAgICAodnRhYmxlLS1y ZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkKICAgICAgIChlcnJvciAiQ2Fu J3QgZmluZCBjYWNoZWQgb2JqZWN0IGluIHZ0YWJsZSIpKSkpCiAKIChkZWZ1biB2dGFibGUtcmVt b3ZlLW9iamVjdCAodGFibGUgb2JqZWN0KQpAQCAtMzM0LDE0ICszMzYsMTYgQEAgdnRhYmxlLXJl bW92ZS1vYmplY3QKICAgOzsgRmlyc3QgcmVtb3ZlIGZyb20gdGhlIG9iamVjdHMuCiAgIChzZXRm ICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGRlbHEgb2JqZWN0ICh2dGFibGUtb2JqZWN0cyB0YWJs ZSkpKQogICA7OyBUaGVuIGFkanVzdCB0aGUgY2FjaGUgYW5kIGRpc3BsYXkuCi0gIChzYXZlLWV4 Y3Vyc2lvbgotICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKLSAgICAobGV0ICgoY2FjaGUg KHZ0YWJsZS0tY3VycmVudC1jYWNoZSkpCi0gICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQp KQotICAgICAgKHNldGNhciBjYWNoZSAoZGVscSAoYXNzcSBvYmplY3QgKHZ0YWJsZS0tY2FjaGUt bGluZXMgY2FjaGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS1s aW5lcyBjYWNoZSkpKQotICAgICAgKHdoZW4gKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpCi0g ICAgICAgIChkZWxldGUtbGluZSkpKSkpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUt YnVmZmVyIHRhYmxlKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgKHZ0YWJsZS1nb3RvLXRh YmxlIHRhYmxlKQorICAgICAgKGxldCAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUgdGFi bGUpKQorICAgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCisgICAgICAgICAgICAoaW5o aWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpCisgICAgICAgIChzZXRjYXIgY2FjaGUgKGRlbHEg KGFzc3Egb2JqZWN0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpKQorICAgICAgICAod2hl biAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkKKyAgICAgICAgICAoZGVsZXRlLWxpbmUpKSkp KSkKIAogOzsgRklYTUU6IFRoZSBmYWN0IHRoYXQgdGhlIGBsb2NhdGlvbicgYXJndW1lbnQgb2YK IDs7IGB2dGFibGUtaW5zZXJ0LW9iamVjdCcgY2FuIGJlIGFuIGludGVnZXIgYW5kIGlzIHRoZW4g aW50ZXJwcmV0ZWQgYXMKQEAgLTM2OSw4ICszNzMsOSBAQCB2dGFibGUtaW5zZXJ0LW9iamVjdAog ICAgICAgKHByb2duCiAgICAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGxpc3Qg b2JqZWN0KSkKICAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAodnRh YmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpCi0gICAgICAgICh2dGFibGUt Z290by10YWJsZSB0YWJsZSkKLSAgICAgICAgKHZ0YWJsZS1yZXZlcnQtY29tbWFuZCkpCisgICAg ICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICAgICAg ICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKKyAgICAgICAgICAodnRhYmxlLXJldmVydC1jb21t YW5kKSkpCiAgICAgOzsgRmlyc3QgaW5zZXJ0IGludG8gdGhlIG9iamVjdHMuCiAgICAgKGxldCAo KHBvcyAoaWYgbG9jYXRpb24KICAgICAgICAgICAgICAgICAgICAoaWYgKGludGVnZXJwIGxvY2F0 aW9uKQpAQCAtMzk4LDU2ICs0MDMsNTggQEAgdnRhYmxlLWluc2VydC1vYmplY3QKICAgICAgICAg ICA7OyBPdGhlcndpc2UsIGFwcGVuZCB0aGUgb2JqZWN0LgogICAgICAgICAgIChuY29uYyAodnRh YmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpKSkpCiAgICAgOzsgVGhlbiBhZGp1c3Qg dGhlIGNhY2hlIGFuZCBkaXNwbGF5LgotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKHZ0YWJs ZS1nb3RvLXRhYmxlIHRhYmxlKQotICAgICAgKGxldCogKChjYWNoZSAodnRhYmxlLS1jdXJyZW50 LWNhY2hlKSkKLSAgICAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkKLSAgICAgICAgICAg ICAoa2V5bWFwIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdrZXltYXApKQotICAgICAgICAg ICAgIChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNpcyB0YWJsZSkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIChwcm9wZXJ0aXplICh0cnVuY2F0ZS1zdHJpbmctZWxsaXBzaXMpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAodnRhYmxlLWZhY2UgdGFi bGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICIiKSkKLSAgICAgICAgICAgICAoZWxsaXBz aXMtd2lkdGggKHN0cmluZy1waXhlbC13aWR0aCBlbGxpcHNpcykpCi0gICAgICAgICAgICAgKGxp bmVzICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKLSAgICAgICAgICAgICAoZWxlbSAoaWYg bG9jYXRpb24gIDsgVGhpcyBiaW5kaW5nIG1pcnJvcnMgdGhlIGJpbmRpbmcgb2YgYHBvcycgYWJv dmUuCi0gICAgICAgICAgICAgICAgICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAobnRoIGxvY2F0aW9uIGxpbmVzKQotICAgICAgICAgICAg ICAgICAgICAgICAgIChvciAoYXNzcSBsb2NhdGlvbiBsaW5lcykKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGFuZCBiZWZvcmUgKGNhciBsaW5lcykpKSkKLSAgICAgICAgICAgICAgICAg ICAgIChpZiBiZWZvcmUgKGNhciBsaW5lcykpKSkKLSAgICAgICAgICAgICAocG9zIChtZW1xIGVs ZW0gbGluZXMpKQotICAgICAgICAgICAgIChsaW5lIChjb25zIG9iamVjdCAodnRhYmxlLS1jb21w dXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpKSkKLSAgICAgICAgKGlmIChvciBiZWZvcmUK LSAgICAgICAgICAgICAgICAoYW5kIHBvcyAoaW50ZWdlcnAgbG9jYXRpb24pKSkKLSAgICAgICAg ICAgIDs7IEFkZCB0aGUgbmV3IG9iamVjdCBiZWZvcmU6LgotICAgICAgICAgICAgKGxldCAoKG9s ZC1saW5lIChjYXIgcG9zKSkpCi0gICAgICAgICAgICAgIChzZXRjYXIgcG9zIGxpbmUpCi0gICAg ICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIG9sZC1saW5lIChjZHIgcG9zKSkpCi0gICAgICAg ICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3RvLW9iamVjdCAoY2FyIGVsZW0pKQotICAgICAgICAg ICAgICAgICh2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlKSkpCi0gICAgICAgICAgOzsgT3RoZXJ3 aXNlLCBhZGQgdGhlIG9iamVjdCBhZnRlci4KLSAgICAgICAgICAoaWYgcG9zCi0gICAgICAgICAg ICAgIDs7IFNwbGljZSB0aGUgb2JqZWN0IGludG8gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIChw cm9nbgotICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3MpKSkK LSAgICAgICAgICAgICAgICAoaWYgKHZ0YWJsZS1nb3RvLW9iamVjdCBsb2NhdGlvbikKLSAgICAg ICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKSAgOyBJbnNlcnQgKmFmdGVyKi4KLSAgICAg ICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCi0gICAgICAgICAgICA7OyBPdGhl cndpc2UsIGFwcGVuZCB0aGUgb2JqZWN0LgotICAgICAgICAgICAgKHNldGNhciBjYWNoZSAobmNv bmMgbGluZXMgKGxpc3QgbGluZSkpKQotICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2YtdGFibGUp KSkKLSAgICAgICAgKGxldCAoKHN0YXJ0IChwb2ludCkpKQotICAgICAgICAgIDs7IEZJWE1FOiBX ZSBoYXZlIHRvIGFkanVzdCBjb2xvcnMgaW4gbGluZXMgYmVsb3cgdGhpcyBpZiB3ZQotICAgICAg ICAgIDs7IGhhdmUgOnJvdy1jb2xvcnMuCi0gICAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWxpbmUg dGFibGUgbGluZSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2Fj aGUtd2lkdGhzIGNhY2hlKSAodnRhYmxlLS1zcGFjZXIgdGFibGUpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZWxsaXBzaXMgZWxsaXBzaXMtd2lkdGgpCi0gICAgICAgICAgKGFkZC10 ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBvaW50KSAobGlzdCAna2V5bWFwIGtleW1hcAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJs ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0 YWJsZS1jYWNoZSBjYWNoZSkpKQotICAgICAgICA7OyBXZSBtYXkgaGF2ZSBpbnNlcnRlZCBhIG5v bi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkKLSAgICAgICAgOzsgYWxsLW51bWVy aWNhbCB0YWJsZSwgc28gcmVjb21wdXRlLgotICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVt ZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkpKQorICAgIChsZXQqICgoY2FjaGUgKHZ0YWJsZS0t Y3VycmVudC1jYWNoZSB0YWJsZSkpCisgICAgICAgICAgIChsaW5lcyAodnRhYmxlLS1jYWNoZS1s aW5lcyBjYWNoZSkpCisgICAgICAgICAgIChlbGVtIChpZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRp bmcgbWlycm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBhYm92ZS4KKyAgICAgICAgICAgICAgICAg ICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgKG50 aCBsb2NhdGlvbiBsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxvY2F0 aW9uIGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBiZWZvcmUgKGNhciBs aW5lcykpKSkKKyAgICAgICAgICAgICAgICAgICAoaWYgYmVmb3JlIChjYXIgbGluZXMpKSkpCisg ICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCisgICAgICAgICAgIChsaW5lIChjb25z IG9iamVjdCAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpKSkKKyAg ICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICAgICAo bGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkKKyAgICAgICAgICAgICAgKGluaGliaXQtbW9kaWZp Y2F0aW9uLWhvb2tzIHQpKQorICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAg KHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQorICAgICAgICAgICAgKGlmIChvciBiZWZvcmUKKyAg ICAgICAgICAgICAgICAgICAgKGFuZCBwb3MgKGludGVnZXJwIGxvY2F0aW9uKSkpCisgICAgICAg ICAgICAgICAgOzsgQWRkIHRoZSBuZXcgb2JqZWN0IGJlZm9yZTouCisgICAgICAgICAgICAgICAg KGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCisgICAgICAgICAgICAgICAgICAoc2V0Y2FyIHBv cyBsaW5lKQorICAgICAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNvbnMgb2xkLWxpbmUgKGNk ciBwb3MpKSkKKyAgICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3RvLW9iamVjdCAo Y2FyIGVsZW0pKQorICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJs ZSkpKQorICAgICAgICAgICAgICA7OyBPdGhlcndpc2UsIGFkZCB0aGUgb2JqZWN0IGFmdGVyLgor ICAgICAgICAgICAgICAoaWYgcG9zCisgICAgICAgICAgICAgICAgICA7OyBTcGxpY2UgdGhlIG9i amVjdCBpbnRvIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgICAgKHByb2duCisgICAgICAgICAg ICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3MpKSkKKyAgICAgICAgICAg ICAgICAgICAgKGlmICh2dGFibGUtZ290by1vYmplY3QgbG9jYXRpb24pCisgICAgICAgICAgICAg ICAgICAgICAgICAoZm9yd2FyZC1saW5lIDEpICA7IEluc2VydCAqYWZ0ZXIqLgorICAgICAgICAg ICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisgICAgICAgICAgICAgICAgOzsg T3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KKyAgICAgICAgICAgICAgICAoc2V0Y2FyIGNh Y2hlIChuY29uYyBsaW5lcyAobGlzdCBsaW5lKSkpCisgICAgICAgICAgICAgICAgKHZ0YWJsZS1l bmQtb2YtdGFibGUpKSkKKyAgICAgICAgICAgIChsZXQqICgoc3RhcnQgKHBvaW50KSkKKyAgICAg ICAgICAgICAgICAgICAoZWxsaXBzaXMgKGlmICh2dGFibGUtZWxsaXBzaXMgdGFibGUpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5n LWVsbGlwc2lzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIikpCisgICAgICAgICAgICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwt d2lkdGggZWxsaXBzaXMgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgICAgICAgICAgICAgICAgKGtl eW1hcCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAna2V5bWFwKSkpCisgICAgICAgICAgICAg IDs7IEZJWE1FOiBXZSBoYXZlIHRvIGFkanVzdCBjb2xvcnMgaW4gbGluZXMgYmVsb3cgdGhpcyBp ZiB3ZQorICAgICAgICAgICAgICA7OyBoYXZlIDpyb3ctY29sb3JzLgorICAgICAgICAgICAgICAo dnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIDAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtd2lkdGhzIGNhY2hlKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1zcGFjZXIgdGFibGUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzIGVsbGlwc2lzLXdpZHRoKQorICAgICAgICAg ICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpIChsaXN0ICdrZXltYXAga2V5 bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3Z0YWJsZSB0YWJsZSkpKQorICAgICAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQg YSBub24tbnVtZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5CisgICAgICAgICAgICA7OyBh bGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCisgICAgICAgICAgICAodnRhYmxlLS1y ZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkpKSkpCiAKIChkZWZ1biB2dGFi bGUtY29sdW1uICh0YWJsZSBpbmRleCkKICAgIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgSU5ERVh0 aCBjb2x1bW4gaW4gVEFCTEUuIgpAQCAtNTIwLDE0ICs1MjcsMTQgQEAgdnRhYmxlLS1jYWNoZS13 aWR0aHMKIChkZWZ1biB2dGFibGUtLWNhY2hlLWxpbmVzIChjYWNoZSkKICAgKGNhciBjYWNoZSkp CiAKLShkZWZ1biB2dGFibGUtaW5zZXJ0ICh0YWJsZSkKKyhkZWZ1biB2dGFibGUtLWluc2VydCAo dGFibGUpCiAgIChsZXQqICgoc3BhY2VyICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCiAgICAgICAg ICAoc3RhcnQgKHBvaW50KSkKICAgICAgICAgIChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNp cyB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKHRydW5jYXRlLXN0 cmluZy1lbGxpcHNpcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2Ug KHZ0YWJsZS1mYWNlIHRhYmxlKSkKICAgICAgICAgICAgICAgICAgICAgICIiKSkKLSAgICAgICAg IChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGVsbGlwc2lzKSkKKyAgICAgICAg IChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGVsbGlwc2lzICh2dGFibGUtYnVm ZmVyIHRhYmxlKSkpCiAgICAgICAgICA7OyBXZSBtYWludGFpbiBhIGNhY2hlIHBlciBzY3JlZW4v d2luZG93IHdpZHRoLCBzbyB0aGF0IHdlIHJlbmRlcgogICAgICAgICAgOzsgY29ycmVjdGx5IGlm IEVtYWNzIGlzIG9wZW4gb24gdHdvIGRpZmZlcmVudCBzY3JlZW5zIChvciB0aGUKICAgICAgICAg IDs7IHVzZXIgcmVzaXplcyB0aGUgZnJhbWUpLgpAQCAtNTQ5LDggKzU1Niw3IEBAIHZ0YWJsZS1p bnNlcnQKICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBvaW50KQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAna2V5bWFwIHZ0YWJsZS1oZWFkZXItbGluZS1t YXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYXItbm9uc3RpY2t5IHQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hlIGNhY2hlKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZSkpCiAgICAgICAgIChz ZXRxIHN0YXJ0IChwb2ludCkpKSkKICAgICAodnRhYmxlLS1zb3J0IHRhYmxlIGNhY2hlKQogICAg IDs7IEluc2VydCB0aGUgZGF0YS4KQEAgLTU2MSwxMyArNTY3LDM1IEBAIHZ0YWJsZS1pbnNlcnQK ICAgICAgICAgKHNldHEgbGluZS1udW1iZXIgKDErIGxpbmUtbnVtYmVyKSkpKQogICAgIChhZGQt dGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAo bGlzdCAncmVhci1ub25zdGlja3kgdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2 dGFibGUgdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hl IGNhY2hlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlKSkK KyAgICAoc2V0ZiAodnRhYmxlLS1jdXJyZW50LWNhY2hlIHRhYmxlKSBjYWNoZSkKICAgICAoZ290 by1jaGFyIHN0YXJ0KSkpCiAKKyhkZWZ1biB2dGFibGUtaW5zZXJ0ICh0YWJsZSkKKyAgIkluc2Vy dCBUQUJMRSBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KK1RoZSBjdXJyZW50IGJ1ZmZlciB3aWxs IGJlIHJlY29yZGVkIGFzIFRBQkxFJ3MgYnVmZmVyLiAgSWYgdGhlIHRhYmxlIGlzCitpbnNlcnRl ZCBpbnRvIGEgYnVmZmVyIG90aGVyIHRoYW4gaXRzIG9yaWdpbmF0aW5nIGJ1ZmZlciwgc2lnbmFs IGFuCitlcnJvci4gIEEgdGFibGUgbWF5IGJlIHJlaW5zZXJ0ZWQgaW50byBpdHMgb3duIGJ1ZmZl ciwgYnV0IGluc2VydCBvbmx5CitvbmUgaW5zdGFuY2UgcGVyIGJ1ZmZlci4gIFRoaXMgcmVzdHJp Y3Rpb24gbmVlZHMgdG8gYmUgZW5mb3JjZWQgYnkgdGhlCitjYWxsZXIuIgorICAoaWYtbGV0KiAo KHRhYmxlLWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkpKQorICAgICAgKHdoZW4gKG5vdCAo ZXEgdGFibGUtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKQorICAgICAgICAoZXJyb3IgIkEgdnRh YmxlIGNhbm5vdCBiZSBpbnNlcnRlZCBpbnRvIG1vcmUgdGhhbiBvbmUgYnVmZmVyIikpKQorICAo c2V0ZiAodnRhYmxlLWJ1ZmZlciB0YWJsZSkgKGN1cnJlbnQtYnVmZmVyKSkKKyAgKGxldCAoKGlu aGliaXQtcmVhZC1vbmx5IHQpCisgICAgICAgIChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0 KSkKKyAgICAodnRhYmxlLS1pbnNlcnQgdGFibGUpKSkKKworKGRlZnVuIHZ0YWJsZS1zZXQtYnVm ZmVyICh0YWJsZSBidWZmZXIpCisgICJBc3NvY2lhdGUgQlVGRkVSIHdpdGggVEFCTEUuCitVc2Ug dGhpcyBmdW5jdGlvbiB3aXRoIGNhcmUsIGFuZCBlbnN1cmUgeW91ciB2dGFibGUgaW5zdGFuY2Ug cmVuZGVycworaXRzZWxmIGluIHRoZSBuZXcgYnVmZmVyLiIKKyAgKHNldGYgKHZ0YWJsZS1idWZm ZXIgdGFibGUpIGJ1ZmZlcikpCisKIChkZWZ1biB2dGFibGUtLWluc2VydC1saW5lICh0YWJsZSBs aW5lIGxpbmUtbnVtYmVyIHdpZHRocyBzcGFjZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmb3B0aW9uYWwgZWxsaXBzaXMgZWxsaXBzaXMtd2lkdGgpCiAgIChsZXQgKChzdGFy dCAocG9pbnQpKQorICAgICAgICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKICAgICAg ICAgKGNvbHVtbnMgKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkKICAgICAgICAgKGNvbHVtbi1jb2xv cnMKICAgICAgICAgIChhbmQgKHZ0YWJsZS1jb2x1bW4tY29sb3JzIHRhYmxlKQpAQCAtNjA3LDE2 ICs2MzUsMTggQEAgdnRhYmxlLS1pbnNlcnQtbGluZQogICAgICAgICAgICAgICAgICAgICAgIChj b25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCiAgICAg ICAgICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRo IDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBz aXMtd2lkdGggMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAg ICAgICAgICAgICAgIGVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQp KQogICAgICAgICAgICAgICAgICA7OyBSZWNvbXB1dGUgd2lkdGhzLgogICAgICAgICAgICAgICAg ICAodAotICAgICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggdmFsdWUp IChlbHQgd2lkdGhzIGluZGV4KSkKKyAgICAgICAgICAgICAgICAgIChpZiAoPiAoc3RyaW5nLXBp eGVsLXdpZHRoIHZhbHVlIGJ1ZmZlcikgKGVsdCB3aWR0aHMgaW5kZXgpKQogICAgICAgICAgICAg ICAgICAgICAgIChjb25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQt c3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAoLSAoZWx0IHdpZHRocyBpbmRl eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAw KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBzaXMtd2lkdGgg MCkpCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAg ICAgIGVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICB2YWx1ZSkpKSkKICAgICAgICAgICAg ICAgIChzdGFydCAocG9pbnQpKQpAQCAtNjMwLDE0ICs2NjAsMTUgQEAgdnRhYmxlLS1pbnNlcnQt bGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOndpZHRoIChsaXN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCsgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aCBkaXNw bGF5ZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctcGl4ZWwtd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGlzcGxheWVkIGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGlmIGxhc3QgMCBzcGFjZXIpKSkpKSkpCiAgICAgICAgICAgICAgOzsg QWxpZ24gdG8gdGhlIHJpZ2h0LgogICAgICAgICAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgIiAi ICdkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp3aWR0aCAobGlzdCAoLSAo ZWx0IHdpZHRocyBpbmRleCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZCkpKSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bs YXllZCBidWZmZXIpKSkpKQogICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkKQogICAgICAg ICAgICAgICh1bmxlc3MgbGFzdAogICAgICAgICAgICAgICAgKGluc2VydCAocHJvcGVydGl6ZSAi ICIgJ2Rpc3BsYXkKQEAgLTY2NCwxNiArNjk1LDYgQEAgdnRhYmxlLS1pbnNlcnQtbGluZQogKGRl ZnVuIHZ0YWJsZS0tY2FjaGUta2V5ICgpCiAgIChjb25zIChmcmFtZS10ZXJtaW5hbCkgKHdpbmRv dy13aWR0aCkpKQogCi0oZGVmdW4gdnRhYmxlLS1jdXJyZW50LWNhY2hlICgpCi0gICJSZXR1cm4g dGhlIGN1cnJlbnQgY2FjaGUgZm9yIHRoZSB0YWJsZSBhdCBwb2ludC4KLQotSW4gYHZ0YWJsZS1p bnNlcnQnLCB0aGUgbGluZXMgYW5kIHdpZHRocyBvZiB0aGUgdnRhYmxlIHRleHQgYXJlIGNvbXB1 dGVkCi1iYXNlZCBvbiB0aGUgY3VycmVudCBzZWxlY3RlZCBmcmFtZSBhbmQgd2luZG93IGFuZCBz dG9yZWQgaW4gYSBjYWNoZS4KLVN1YnNlcXVlbnQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGV4dCBv ZiB0aGUgdnRhYmxlIHNob3VsZCB1c2UgdGhhdCBjYWNoZQotdmlhIHRoaXMgZnVuY3Rpb24gcmF0 aGVyIHRoYW4gYnkgY2FsbGluZyBgdnRhYmxlLS1jYWNoZS1rZXknIHRvIGxvb2sgdXAKLXRoZSBj YWNoZS4iCi0gIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICd2dGFibGUtY2FjaGUpKQotCiAo ZGVmdW4gdnRhYmxlLS1jbGVhci1jYWNoZSAodGFibGUpCiAgIChzZXRmIChnZXRoYXNoICh2dGFi bGUtLWNhY2hlLWtleSkgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZSkpIG5pbCkpCiAKQEAgLTcx OCw2ICs3MzksNyBAQCB2dGFibGUtLWluZGljYXRvcgogKGRlZnVuIHZ0YWJsZS0taW5zZXJ0LWhl YWRlci1saW5lICh0YWJsZSB3aWR0aHMgc3BhY2VyKQogICA7OyBJbnNlcnQgdGhlIGhlYWRlciBk aXJlY3RseSBpbnRvIHRoZSBidWZmZXIuCiAgIChsZXQgKChzdGFydCAocG9pbnQpKQorICAgICAg ICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKICAgICAgICAgKGRpdmlkZXIgKHZ0YWJs ZS1kaXZpZGVyIHRhYmxlKSkKICAgICAgICAgKGNtYXAgKGRlZmluZS1rZXltYXAKICAgICAgICAg ICAgICAgICAiPGhlYWRlci1saW5lPiA8ZHJhZy1tb3VzZS0xPiIgIyd2dGFibGUtLWRyYWctcmVz aXplLWNvbHVtbgpAQCAtNzM3LDE0ICs3NTksMTUgQEAgdnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxp bmUKICAgICAgICAgICAgICAgICAgICAgICdrZXltYXAgY21hcCkpCiAgICAgICAgICAgICAgIChz dGFydCAocG9pbnQpKQogICAgICAgICAgICAgICAoaW5kaWNhdG9yICh2dGFibGUtLWluZGljYXRv ciB0YWJsZSBpbmRleCkpCi0gICAgICAgICAgICAgIChpbmRpY2F0b3Itd2lkdGggKHN0cmluZy1w aXhlbC13aWR0aCBpbmRpY2F0b3IpKQorICAgICAgICAgICAgICAoaW5kaWNhdG9yLXdpZHRoIChz dHJpbmctcGl4ZWwtd2lkdGggaW5kaWNhdG9yIGJ1ZmZlcikpCiAgICAgICAgICAgICAgIChsYXN0 ICg9IGluZGV4ICgxLSAobGVuZ3RoICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKSkpCiAgICAgICAg ICAgICAgIGRpc3BsYXllZCkKICAgICAgICAgIChzZXRxIGRpc3BsYXllZAotICAgICAgICAgICAg ICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggbmFtZSkKKyAgICAgICAgICAgICAgIChpZiAo PiAoc3RyaW5nLXBpeGVsLXdpZHRoIG5hbWUgYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAg ICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpKQogICAgICAgICAgICAgICAg ICAgICh2dGFibGUtLWxpbWl0LXN0cmluZwotICAgICAgICAgICAgICAgICAgICBuYW1lICgtIChl bHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpKQorICAgICAgICAgICAgICAgICAgICBu YW1lICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpCisgICAgICAgICAgICAg ICAgICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgbmFtZSkpCiAgICAgICAgICAobGV0KiAo KGluZGljYXRvci1sZWFkLXdpZHRoCiAgICAgICAgICAgICAgICAgIDs7IFdlIHdhbnQgdGhlIGlu ZGljYXRvciB0byBub3QgYmUgcXVpdGUgZmx1c2ggcmlnaHQuCkBAIC03NTMsNyArNzc2LDcgQEAg dnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbmRpY2F0b3ItbGVhZC13aWR0aCkpCiAgICAgICAgICAgICAgICAgKGZpbGwt d2lkdGgKICAgICAgICAgICAgICAgICAgKCsgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGggZGlzcGxheWVkKQorICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoIGRpc3BsYXllZCBidWZmZXIpCiAgICAg ICAgICAgICAgICAgICAgICAgIGluZGljYXRvci13aWR0aAogICAgICAgICAgICAgICAgICAgICAg ICBpbmRpY2F0b3ItbGVhZC13aWR0aCkKICAgICAgICAgICAgICAgICAgICAgKGlmIGxhc3QgMCBz cGFjZXIpKSkpCkBAIC03NzEsNyArNzk0LDggQEAgdnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUK ICAgICAgICAgICAgICA7OyBUaGlzIGlzIHRoZSBmaW5hbCBjb2x1bW4sIGFuZCB3ZSBoYXZlIGEg c29ydGluZwogICAgICAgICAgICAgIDs7IGluZGljYXRvciwgYW5kIHRoZSB0YWJsZSBpcyB0b28g d2lkZSBmb3IgdGhlIHdpbmRvdy4KICAgICAgICAgICAgICAobGV0KiAoKHByZS1pbmRpY2F0b3Ig KHN0cmluZy1waXhlbC13aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50KSkpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikpCiAgICAgICAg ICAgICAgICAgICAgIChwcmUtZmlsbAogICAgICAgICAgICAgICAgICAgICAgKC0gKHdpbmRvdy13 aWR0aCBuaWwgdCkKICAgICAgICAgICAgICAgICAgICAgICAgIHByZS1pbmRpY2F0b3IKQEAgLTg1 MCwxNCArODc0LDE2IEBAIHZ0YWJsZS0tc2V0LWhlYWRlci1saW5lCiAgICAgICAgICAgIChidWZm ZXItc3Vic3RyaW5nIChwb2ludC1taW4pICgxLSAocG9pbnQtbWF4KSkpKSkpCiAgICh2dGFibGUt aGVhZGVyLW1vZGUgMSkpCiAKLShkZWZ1biB2dGFibGUtLWxpbWl0LXN0cmluZyAoc3RyaW5nIHBp eGVscykKKworKGRlZnVuIHZ0YWJsZS0tbGltaXQtc3RyaW5nIChzdHJpbmcgcGl4ZWxzIGJ1ZmZl cikKICAgKHdoaWxlIChhbmQgKGxlbmd0aD4gc3RyaW5nIDApCi0gICAgICAgICAgICAgICg+IChz dHJpbmctcGl4ZWwtd2lkdGggc3RyaW5nKSBwaXhlbHMpKQorICAgICAgICAgICAgICAoPiAoc3Ry aW5nLXBpeGVsLXdpZHRoIHN0cmluZyBidWZmZXIpIHBpeGVscykpCiAgICAgKHNldHEgc3RyaW5n IChzdWJzdHJpbmcgc3RyaW5nIDAgKDEtIChsZW5ndGggc3RyaW5nKSkpKSkKICAgc3RyaW5nKQog CiAoZGVmdW4gdnRhYmxlLS1jaGFyLXdpZHRoICh0YWJsZSkKLSAgKHN0cmluZy1waXhlbC13aWR0 aCAocHJvcGVydGl6ZSAieCIgJ2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkpKQorICAoc3RyaW5n LXBpeGVsLXdpZHRoIChwcm9wZXJ0aXplICJ4IiAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQor ICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtYnVmZmVyIHRhYmxlKSkpCiAKIChkZWZ1biB2 dGFibGUtLWNvbXB1dGUtd2lkdGggKHRhYmxlIHNwZWMpCiAgIChjb25kCkBAIC05MzYsNyArOTYy LDcgQEAgdnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lCiAgICAgICAgOzsgV2Ugc3Rhc2ggdGhl IGNvbXB1dGVkIHdpZHRoIGFuZCBzdHJpbmcgaGVyZSAtLSBpZiB0aGVyZSBhcmUKICAgICAgICA7 OyBubyBmb3JtYXR0ZXJzL2Rpc3BsYXllcnMsIHdlJ2xsIGJlIHVzaW5nIHRoZSBzdHJpbmcsIGFu ZAogICAgICAgIDs7IHRoZW4gd29uJ3QgaGF2ZSB0byByZWNyZWF0ZSBpdC4KLSAgICAgICAobGlz dCB2YWx1ZSAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cmluZykgc3RyaW5nKSkpCisgICAgICAgKGxp c3QgdmFsdWUgKHN0cmluZy1waXhlbC13aWR0aCBzdHJpbmcgKHZ0YWJsZS1idWZmZXIgdGFibGUp KSBzdHJpbmcpKSkKICAgICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKQogCiAoZGVmdW4gdnRhYmxl LS1tYWtlLWtleW1hcCAodGFibGUpCkBAIC05NjcsMjAgKzk5MywyMiBAQCB2dGFibGUtLW1ha2Ut a2V5bWFwCiAgICAgICAgICAgKHZ0YWJsZS1rZXltYXAgdGFibGUpKQogICAgICAgbWFwKSkpCiAK LShkZWZ1biB2dGFibGUtcmV2ZXJ0ICgpCi0gICJSZWdlbmVyYXRlIHRoZSB0YWJsZSB1bmRlciBw b2ludC4iCi0gIChsZXQgKCh0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQotICAgICAgICAo b2JqZWN0ICh2dGFibGUtY3VycmVudC1vYmplY3QpKQotICAgICAgICAoY29sdW1uICh2dGFibGUt Y3VycmVudC1jb2x1bW4pKQotICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCi0gICAgKHVu bGVzcyB0YWJsZQotICAgICAgKHVzZXItZXJyb3IgIk5vIHRhYmxlIHVuZGVyIHBvaW50IikpCi0g ICAgKGRlbGV0ZS1yZWdpb24gKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpICh2dGFibGUtZW5k LW9mLXRhYmxlKSkKLSAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKLSAgICAod2hlbiBvYmplY3QK LSAgICAgICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0KSkKLSAgICAod2hlbiBjb2x1bW4KLSAg ICAgICh2dGFibGUtZ290by1jb2x1bW4gY29sdW1uKSkpKQorKGRlZnVuIHZ0YWJsZS1yZXZlcnQg KCZvcHRpb25hbCB0YWJsZSkKKyAgIlJlZ2VuZXJhdGUgVEFCTEUsIGRlZmF1bHRpbmcgdG8gdGhl IHRhYmxlIHVuZGVyIHBvaW50LiIKKyAgKHNldHEgdGFibGUgKG9yIHRhYmxlICh2dGFibGUtY3Vy cmVudC10YWJsZSkpKQorICAodW5sZXNzIHRhYmxlCisgICAgKHVzZXItZXJyb3IgIk5vIHRhYmxl IHVuZGVyIHBvaW50IikpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRh YmxlKQorICAgIChsZXQgKChvYmplY3QgKHZ0YWJsZS1jdXJyZW50LW9iamVjdCkpCisgICAgICAg ICAgKGNvbHVtbiAodnRhYmxlLWN1cnJlbnQtY29sdW1uKSkKKyAgICAgICAgICAoaW5oaWJpdC1y ZWFkLW9ubHkgdCkKKyAgICAgICAgICAoaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpCisg ICAgICAoZGVsZXRlLXJlZ2lvbiAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJsZSkgKHZ0YWJsZS1l bmQtb2YtdGFibGUpKQorICAgICAgKHZ0YWJsZS0taW5zZXJ0IHRhYmxlKQorICAgICAgKHdoZW4g b2JqZWN0CisgICAgICAgICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0KSkKKyAgICAgICh3aGVu IGNvbHVtbgorICAgICAgICAodnRhYmxlLWdvdG8tY29sdW1uIGNvbHVtbikpKSkpCiAKIDs7OyBD b21tYW5kcy4KIApAQCAtMTAwNiwxNCArMTAzNCwxNCBAQCB2dGFibGUtbmFycm93LWN1cnJlbnQt Y29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtICgqICh2dGFibGUtLWNo YXItd2lkdGggdGFibGUpIChvciBuIDEpKSkpKSkKIAogKGRlZnVuIHZ0YWJsZS0tYWx0ZXItY29s dW1uLXdpZHRoICh0YWJsZSBjb2x1bW4gZGVsdGEpCi0gIChsZXQgKCh3aWR0aHMgKHZ0YWJsZS0t Y2FjaGUtd2lkdGhzICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKSkpCisgIChsZXQgKCh3aWR0aHMg KHZ0YWJsZS0tY2FjaGUtd2lkdGhzICh2dGFibGUtLWN1cnJlbnQtY2FjaGUgdGFibGUpKSkpCiAg ICAgKHNldGYgKGFyZWYgd2lkdGhzIGNvbHVtbikKICAgICAgICAgICAobWF4ICgqICh2dGFibGUt LWNoYXItd2lkdGggdGFibGUpIDIpCiAgICAgICAgICAgICAgICAoKyAoYXJlZiB3aWR0aHMgY29s dW1uKSBkZWx0YSkpKQogICAgIDs7IFN0b3JlIHRoZSB3aWR0aCBzbyBpdCdsbCBiZSByZXNwZWN0 ZWQgb24gYSByZXZlcnQuCiAgICAgKHNldGYgKHZ0YWJsZS1jb2x1bW4td2lkdGggKGVsdCAodnRh YmxlLWNvbHVtbnMgdGFibGUpIGNvbHVtbikpCiAgICAgICAgICAgKGZvcm1hdCAiJWRweCIgKGFy ZWYgd2lkdGhzIGNvbHVtbikpKQotICAgICh2dGFibGUtcmV2ZXJ0KSkpCisgICAgKHZ0YWJsZS1y ZXZlcnQgdGFibGUpKSkKIAogKGRlZnVuIHZ0YWJsZS13aWRlbi1jdXJyZW50LWNvbHVtbiAoJm9w dGlvbmFsIG4pCiAgICJXaWRlbiB0aGUgY3VycmVudCBjb2x1bW4gYnkgTiBjaGFyYWN0ZXJzLgpA QCAtMTAyOCwyNCArMTA1NiwyOSBAQCB2dGFibGUtcHJldmlvdXMtY29sdW1uCiAgIChpbnRlcmFj dGl2ZSkKICAgKHZ0YWJsZS1nb3RvLWNvbHVtbgogICAgKG1heCAwICgxLSAob3IgKHZ0YWJsZS1j dXJyZW50LWNvbHVtbikKLSAgICAgICAgICAgICAgICAgIChsZW5ndGggKHZ0YWJsZS0tY2FjaGUt d2lkdGhzICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKSkpKSkpKQorICAgICAgICAgICAgICAgICAg KGxlbmd0aCAodnRhYmxlLS1jYWNoZS13aWR0aHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICh2dGFibGUtLWN1cnJlbnQtY2FjaGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpKSkpKSkpCiAK IChkZWZ1biB2dGFibGUtbmV4dC1jb2x1bW4gKCkKICAgIkdvIHRvIHRoZSBuZXh0IGNvbHVtbi4i CiAgIChpbnRlcmFjdGl2ZSkKICAgKHdoZW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikKICAgICAo dnRhYmxlLWdvdG8tY29sdW1uCi0gICAgIChtaW4gKDEtIChsZW5ndGggKHZ0YWJsZS0tY2FjaGUt d2lkdGhzICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKSkpCisgICAgIChtaW4gKDEtIChsZW5ndGgg KHZ0YWJsZS0tY2FjaGUtd2lkdGhzCisgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWN1 cnJlbnQtY2FjaGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpKSkKICAgICAgICAgICAoMSsgKHZ0 YWJsZS1jdXJyZW50LWNvbHVtbikpKSkpKQogCi0oZGVmdW4gdnRhYmxlLXJldmVydC1jb21tYW5k ICgpCi0gICJSZS1xdWVyeSBkYXRhIGFuZCByZWdlbmVyYXRlIHRoZSB0YWJsZSB1bmRlciBwb2lu dC4iCisoZGVmdW4gdnRhYmxlLXJldmVydC1jb21tYW5kICgmb3B0aW9uYWwgdGFibGUpCisgICJS ZS1xdWVyeSBkYXRhIGFuZCByZWdlbmVyYXRlIFRBQkxFLgorSWYgVEFCTEUgaXMgbmlsLCB1c2Ug dGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKICAgKGludGVyYWN0aXZlKQotICAobGV0ICgodGFibGUg KHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCi0gICAgKHdoZW4gKHZ0YWJsZS1vYmplY3RzLWZ1bmN0 aW9uIHRhYmxlKQotICAgICAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAoZnVuY2FsbCAo dnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpKSkpCi0gICAgKHZ0YWJsZS0tY2xlYXItY2Fj aGUgdGFibGUpKQotICAodnRhYmxlLXJldmVydCkpCisgIChzZXRxIHRhYmxlIChvciB0YWJsZSAo dnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKKyAgKHVubGVzcyB0YWJsZQorICAgICh1c2VyLWVycm9y ICJObyB0YWJsZSBmb3VuZCIpKQorICAod2hlbiAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFi bGUpCisgICAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAoZnVuY2FsbCAodnRhYmxlLW9i amVjdHMtZnVuY3Rpb24gdGFibGUpKSkpCisgICh2dGFibGUtLWNsZWFyLWNhY2hlIHRhYmxlKQor ICAodnRhYmxlLXJldmVydCB0YWJsZSkpCiAKIChkZWZ1biB2dGFibGUtc29ydC1ieS1jdXJyZW50 LWNvbHVtbiAoKQogICAiU29ydCB0aGUgdGFibGUgdW5kZXIgcG9pbnQgYnkgdGhlIGNvbHVtbiB1 bmRlciBwb2ludC4iCkBAIC0xMDY3LDggKzExMDAsOCBAQCB2dGFibGUtc29ydC1ieS1jdXJyZW50 LWNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgKGNkciBs YXN0KSAnYXNjZW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVz Y2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2VuZCkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2VuZCkpKSkpKQotICAodnRhYmxlLXJldmVy dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NlbmQpKSkpKQorICAgICh2 dGFibGUtcmV2ZXJ0IHRhYmxlKSkpCiAKIChkZWZ1biB2dGFibGUtaGVhZGVyLWxpbmUtc29ydCAo ZSkKICAgIlNvcnQgYSB2dGFibGUgZnJvbSB0aGUgaGVhZGVyIGxpbmUuIgpkaWZmIC0tZ2l0IGEv dGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsIGIvdGVzdC9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLXRlc3RzLmVsCmluZGV4IDc0ZmI4Y2M4MTM5Li5lMDMyOGUzMWJjNSAxMDA2NDQK LS0tIGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsCisrKyBiL3Rlc3QvbGlz cC9lbWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbApAQCAtMjcsMTYgKzI3LDE5IEBACiAocmVxdWly ZSAnZXJ0KQogKHJlcXVpcmUgJ2VydC14KQogCi0oZXJ0LWRlZnRlc3QgdGVzdC12c3RhYmxlLWNv bXB1dGUtY29sdW1ucyAoKQorKGRlZnVuIHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1v YmplY3QtdGFibGUgKCkKKyAgKG1ha2UtdnRhYmxlIDpjb2x1bW5zICcoImEiICJiIiAiYyIpCisg ICAgICAgICAgICAgICA6b2JqZWN0cyAnKCgiZm9vIiAxIDIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICgiYmFyIiAzIDp6b3QpKQorICAgICAgICAgICAgICAgOmluc2VydCBuaWwpKQorCiso ZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtY29tcHV0ZS1jb2x1bW5zICgpCiAgIChzaG91bGQKICAg IChlcXVhbCAobWFwY2FyCiAgICAgICAgICAgIChsYW1iZGEgKGNvbHVtbikKICAgICAgICAgICAg ICAodnRhYmxlLWNvbHVtbi1hbGlnbiBjb2x1bW4pKQogICAgICAgICAgICAodnRhYmxlLS1jb21w dXRlLWNvbHVtbnMKLSAgICAgICAgICAgIChtYWtlLXZ0YWJsZSA6Y29sdW1ucyAnKCJhIiAiYiIg ImMiKQotICAgICAgICAgICAgICAgICAgICAgICAgIDpvYmplY3RzICcoKCJmb28iIDEgMikKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYmFyIiAzIDp6b3QpKQotICAgICAg ICAgICAgICAgICAgICAgICAgIDppbnNlcnQgbmlsKSkpCisgICAgICAgICAgICAodnRhYmxlLXRl c3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSkpKQogICAgICAgICAgICcobGVmdCBy aWdodCBsZWZ0KSkpKQogCiAoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtaW5zZXJ0LW9iamVjdCAo KQpAQCAtNjksNCArNzIsNzUgQEAgdGVzdC12dGFibGUtaW5zZXJ0LW9iamVjdAogICAgICAgICAg ICAgICAobWFwY2FyICMnY2FkciAodnRhYmxlLW9iamVjdHMgdGFibGUpKSkpCiAgICAgICAgICAg KG51bWJlci1zZXF1ZW5jZSAwIDExKSkpKQogCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtdW5p cXVlLWJ1ZmZlciAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFk ZXItMi1vYmplY3QtdGFibGUpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJs ZS1pbnNlcnQgdGFibGUpCisgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAoc2hvdWxk LWVycm9yICh2dGFibGUtaW5zZXJ0IHRhYmxlKSkpCisgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgor ICAgICAgICAodnRhYmxlLXNldC1idWZmZXIgdGFibGUgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAg ICAgKHZ0YWJsZS1pbnNlcnQgdGFibGUpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUt cmVhZC1vbmx5LWJ1ZmZlciAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1u by1oZWFkZXItMi1vYmplY3QtdGFibGUpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAg KHNldHEgYnVmZmVyLXJlYWQtb25seSB0KQorICAgICAgKHZ0YWJsZS1pbnNlcnQgdGFibGUpKSkp CisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItaW5zZXJ0LW9i amVjdCAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1v YmplY3QtdGFibGUpKQorICAgICAgICAob2JqICcoImJheiIgNCA1KSkpCisgICAgKHdpdGgtdGVt cC1idWZmZXIKKyAgICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAgICAgKHNob3VsZCAoPSAo Y291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDIpKQorICAgICAgKHdpdGgtdGVt cC1idWZmZXIKKyAgICAgICAgKHZ0YWJsZS1pbnNlcnQtb2JqZWN0IHRhYmxlIG9iaikpCisgICAg ICAoc2hvdWxkICg9IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMykpKSkp CisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3ZlLW9i amVjdCAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1v YmplY3QtdGFibGUpKQorICAgICAgICAob2JqICcoImJheiIgNCA1KSkpCisgICAgKHdpdGgtdGVt cC1idWZmZXIKKyAgICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAgICAgKHZ0YWJsZS1pbnNl cnQtb2JqZWN0IHRhYmxlIG9iaikKKyAgICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2lu dC1taW4pIChwb2ludC1tYXgpKSAzKSkKKyAgICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAg ICh2dGFibGUtcmVtb3ZlLW9iamVjdCB0YWJsZSBvYmopKQorICAgICAgKHNob3VsZCAoPSAoY291 bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDIpKSkpKQorCisoZXJ0LWRlZnRlc3Qg dGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVmZmVyLXVwZGF0ZS1vYmplY3QgKCkKKyAgKGxldCAo KHRhYmxlICh2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxlKSkKKyAg ICAgICAgKG9iaiAnKCJiYXoiIDQgNSkpCisgICAgICAgIChvYmotMiAnKCJxdXgiIDYgNykpKQor ICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKKyAgICAg ICh2dGFibGUtaW5zZXJ0LW9iamVjdCB0YWJsZSBvYmopCisgICAgICAoc2hvdWxkICg9IChjb3Vu dC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMykpCisgICAgICAobGV0ICgobGluZS0y IChwcm9nbgorICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisg ICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAyKQorICAgICAgICAgICAgICAgICAg ICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludCkgKHBvaW50LW1heCkpKSkpCisgICAgICAgICh3 aXRoLXRlbXAtYnVmZmVyCisgICAgICAgICAgKHZ0YWJsZS11cGRhdGUtb2JqZWN0IHRhYmxlIG9i ai0yIG9iaikpCisgICAgICAgIChsZXQgKChsaW5lLTItbmV3IChwcm9nbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGZvcndhcmQtbGluZSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IChidWZmZXItc3Vic3RyaW5nIChwb2ludCkgKHBvaW50LW1heCkpKSkpCisgICAgICAgICAgKHNo b3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDMpKQorICAgICAg ICAgIChzaG91bGQgKG5vdCAoc3RyaW5nPSBsaW5lLTIgbGluZS0yLW5ldykpKSkpKSkpCisKKyhl cnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS0tbGltaXQtc3RyaW5nLXdpdGgtZmFjZS1yZW1hcHBlZC1i dWZmZXIgKCkKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAobGV0ICgodGV4dCAocHJvcGVydGl6 ZSAiWFhYWFgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgJ3ZhcmlhYmxlLXBp dGNoKSkpCisgICAgICAoZmFjZS1yZW1hcC1hZGQtcmVsYXRpdmUgJ2RlZmF1bHQgOmhlaWdodCAx LjUpCisgICAgICAoaWYgKD4gZW1hY3MtbWFqb3ItdmVyc2lvbiAzMCkKKyAgICAgICAgICAoc2hv dWxkIChlcQorICAgICAgICAgICAgICAgICAgIDIKKyAgICAgICAgICAgICAgICAgICAobGVuZ3Ro ICh2dGFibGUtLWxpbWl0LXN0cmluZyB0ZXh0IDUwIChjdXJyZW50LWJ1ZmZlcikpKSkpCisgICAg ICAgIChzaG91bGQgKGVxCisgICAgICAgICAgICAgICAgIDIKKyAgICAgICAgICAgICAgICAgKGxl bmd0aCAodnRhYmxlLS1saW1pdC1zdHJpbmcgdGV4dCA1MCkpKSkpKSkpCisKIDs7OyB2dGFibGUt dGVzdHMuZWwgZW5kcyBoZXJlCi0tIAoyLjQ3LjEKCg== --000000000000bfd80b064605fc16--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 15 Dec 2025 22:00:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Dec 15 17:00:28 2025 Received: from localhost ([127.0.0.1]:44960 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVGcF-0002X0-JR for submit <at> debbugs.gnu.org; Mon, 15 Dec 2025 17:00:27 -0500 Received: from mxout5.mail.janestreet.com ([64.215.233.18]:40609) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>) id 1vVGcD-0002UR-8W for 79982 <at> debbugs.gnu.org; Mon, 15 Dec 2025 17:00:25 -0500 From: Spencer Baugh <sbaugh@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot In-Reply-To: <CAN+1HbrqF3OqdZQxgWWWmOjTd4UW4Vu64X5mS28M2N50TgzCgQ@HIDDEN> (=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Mon, 15 Dec 2025 16:22:08 -0500") References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> <iertsxvd878.fsf@HIDDEN> <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> <CAN+1HbrqF3OqdZQxgWWWmOjTd4UW4Vu64X5mS28M2N50TgzCgQ@HIDDEN> Date: Mon, 15 Dec 2025 17:00:19 -0500 Message-ID: <ierv7i7xv64.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=waixah; t=1765836020; bh=iwdwyohFR1M6fsJCbX8YFzl9oKWGsJImXH+qhD72zEc=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=dQTMagdn+sH1FIbBUtiH/93iBasPDhuPoOwM/y9LajyXcItpgm6aJsw0AiQnATROY b0nbSHPc4+Dpb9mgEEVAps0N575EWl6RNVx6p313jLVjH8DYN3ETkdDwu/E/s+W/z1 55yYpTEhLuK//kMMwSz7Cd+1cG6N88mBKoGWRpTl1lIdmFM/9+3JcaiK6ckFRnuR15 BbpeT1p0UrpWPII5+f4LYxucSBifroWOcSZ1UdFl3K4S9GN8gP9EI6ORyYIHNEoaQm AorNGHd4xz/ttJCz0pwPbbDRdqcYcVTowopBkP6xMbXzX187cAtZALAD+m9Mto7/2k kmyGnnFwDmMiA== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) St=C3=A9phane Marks <shipmints@HIDDEN> writes: > On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <shipmints@g= mail.com> wrote: > > On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <sbaugh@janestree= t.com> wrote: > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <shipmints= @gmail.com> wrote: > > > > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <sbaugh@janestr= eet.com> wrote: > > > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > > --- a/lisp/emacs-lisp/vtable.el > > > +++ b/lisp/emacs-lisp/vtable.el > > > @@ -398,56 +403,58 @@ vtable-insert-object > > ... > > > + (with-current-buffer (vtable-buffer table) > > > + (save-excursion > > > > So in the end I think the only way to keep the diff to vtable-insert-= object small is > > if you use (set-buffer (vtable-buffer table)) here instead of > > with-current-buffer. It's a bit less normal, but it at least avoids > > some unnecessary indentation. > > > > That is, instead of > > (with-current-buffer (vtable-buffer table) > > (save-excursion > > ...)) > > > > do > > > > (save-excursion > > (set-buffer (vtable-buffer table)) > > ...) > > > > (save-excursion saves and restores the current buffer) > > > > Thanks for making all these changes. I think after that we should be > > good to go. > > > > While I appreciate the desire for tiny diffs, I prefer that the stanz= as used in update insert remove functions remain > consistent > > and we avoid a special comment explaining why insert is special sayin= g this was just for indentation. Hrumph. > > > > The alternative would be to make them all save-excursion, set-buffer, = if you think that's worthy. > > IMO that's worth doing. It also saves indentation, so it's actually > somewhat useful in all the places we're currently adding a > with-current-buffer, even if it doesn't avoid a big reindent diff. > > I forgot about the compiler warning > > emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-current-buffer= =E2=80=99 rather than save-excursion+set-buffer > > We may also need save-excursion twice, once for what is the ambient curr= ent buffer, and the second to ensure that point doesn't > move around in the vtable-buffer. Both of these, I think, are satisfied= via with-current-buffer and we avoid the warning. So, > perhaps, we should bite the bullet and swallow the extra indentation in = vtable-insert-object and use the more robust and simpler > w-c-b. > > I can get a revised patch out quickly. Can we agree on using with-curren= t-buffer and suffer the few extra indented diff lines? Yes, okay, I agree it's fine. I don't think you need to revise anything there, your most recent patch is fine. (Except for the other issue I just emailed about)
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 15 Dec 2025 21:59:49 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Dec 15 16:59:49 2025 Received: from localhost ([127.0.0.1]:44945 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVGbc-0002Ne-Mm for submit <at> debbugs.gnu.org; Mon, 15 Dec 2025 16:59:49 -0500 Received: from mxout5.mail.janestreet.com ([64.215.233.18]:58173) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>) id 1vVGba-0002NF-Dx for 79982 <at> debbugs.gnu.org; Mon, 15 Dec 2025 16:59:47 -0500 From: Spencer Baugh <sbaugh@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot In-Reply-To: <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> (=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Thu, 11 Dec 2025 16:07:24 -0500") References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> Date: Mon, 15 Dec 2025 16:59:40 -0500 Message-ID: <iery0n3xv77.fsf_-_@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=waixah; t=1765835980; bh=OV+pvyaFl2cEJGCDY1DQo75qyq7UVTMFlDZD6LgZECw=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=pU6UZ05IzzOxD/hzZUTqDeQPkcvnIwaM3wjMwkO3NEzFcEzkrgF5YZP+4iGV91dJQ tAMMdufgnbtdLfu0pePK2J0o+U85efd9w98tTeWJF5iXVoSlwz5R3RpBF4NKd1yM+e xpPwxgzDDHj1Wj645r36vg6j0JkC0gkYwNV70UCSZHKF4rYXt1k1F4B6Jy1pqew1OW F6vFlV5yvf9usxnN5sspqZm4Phr7oa+WWaSx0brMgVcfJ4SKR/4w6Yo3dnukGqExRP DGYqInFE3Yv/Cu8xXMB3gREvhBlucCSILgjrmeD6foZpqdqutP6VgMM0y6eDlOuwXG Nks93NDMTvsMQ== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) St=C3=A9phane Marks <shipmints@HIDDEN> writes: > @@ -398,56 +403,58 @@ vtable-insert-object > ;; Otherwise, append the object. > (nconc (vtable-objects table) (list object))))) > ;; Then adjust the cache and display. > - (save-excursion > - (vtable-goto-table table) > - (let* ((cache (vtable--current-cache)) > - (inhibit-read-only t) > - (keymap (get-text-property (point) 'keymap)) > - (ellipsis (if (vtable-ellipsis table) > - (propertize (truncate-string-ellipsis) > - 'face (vtable-face table)) > - "")) > - (ellipsis-width (string-pixel-width ellipsis)) > - (lines (vtable--cache-lines cache)) > - (elem (if location ; This binding mirrors the binding of `= pos' above. > - (if (integerp location) > - (nth location lines) > - (or (assq location lines) > - (and before (car lines)))) > - (if before (car lines)))) > - (pos (memq elem lines)) > - (line (cons object (vtable--compute-cached-line table objec= t)))) > - (if (or before > - (and pos (integerp location))) > - ;; Add the new object before:. > - (let ((old-line (car pos))) > - (setcar pos line) > - (setcdr pos (cons old-line (cdr pos))) > - (unless (vtable-goto-object (car elem)) > - (vtable-beginning-of-table))) > - ;; Otherwise, add the object after. > - (if pos > - ;; Splice the object into the list. > - (progn > - (setcdr pos (cons line (cdr pos))) > - (if (vtable-goto-object location) > - (forward-line 1) ; Insert *after*. > - (vtable-end-of-table))) > - ;; Otherwise, append the object. > - (setcar cache (nconc lines (list line))) > - (vtable-end-of-table))) > - (let ((start (point))) > - ;; FIXME: We have to adjust colors in lines below this if we > - ;; have :row-colors. > - (vtable--insert-line table line 0 > - (vtable--cache-widths cache) (vtable--spa= cer table) > - ellipsis ellipsis-width) > - (add-text-properties start (point) (list 'keymap keymap > - 'vtable table > - 'vtable-cache cache))) > - ;; We may have inserted a non-numerical value into a previously > - ;; all-numerical table, so recompute. > - (vtable--recompute-numerical table (cdr line)))))) > + (let* ((cache (vtable--current-cache table)) > + (inhibit-read-only t) > + (inhibit-modification-hooks t) > + (lines (vtable--cache-lines cache)) > + (elem (if location ; This binding mirrors the binding of `po= s' above. > + (if (integerp location) > + (nth location lines) > + (or (assq location lines) > + (and before (car lines)))) > + (if before (car lines)))) > + (pos (memq elem lines)) > + (line (cons object (vtable--compute-cached-line table object)= ))) > + (with-current-buffer (vtable-buffer table) > + (save-excursion > + (vtable-goto-table table) > + (if (or before > + (and pos (integerp location))) > + ;; Add the new object before:. > + (let ((old-line (car pos))) > + (setcar pos line) > + (setcdr pos (cons old-line (cdr pos))) > + (unless (vtable-goto-object (car elem)) > + (vtable-beginning-of-table))) > + ;; Otherwise, add the object after. > + (if pos > + ;; Splice the object into the list. > + (progn > + (setcdr pos (cons line (cdr pos))) > + (if (vtable-goto-object location) > + (forward-line 1) ; Insert *after*. > + (vtable-end-of-table))) > + ;; Otherwise, append the object. > + (setcar cache (nconc lines (list line))) > + (vtable-end-of-table))) > + (let* ((start (point)) > + (ellipsis (if (vtable-ellipsis table) > + (propertize (truncate-string-ellipsis) > + 'face (vtable-face table)) > + "")) > + (ellipsis-width (string-pixel-width ellipsis (current-b= uffer))) > + (keymap (get-text-property (point) 'keymap))) The inhibit-read-only and inhibit-modification-hooks bindings should be here, inside the with-current-buffer, not in the outer let-binding. The bindings are ineffective when done in this order if there are buffer-local bindings for inhibit-read-only or inhibit-modification-hooks. It might be nice to just have a single test checking that things work if there are such buffer-local bindings.
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 15 Dec 2025 21:22:33 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Dec 15 16:22:33 2025 Received: from localhost ([127.0.0.1]:44624 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVG1Y-0000Ij-B9 for submit <at> debbugs.gnu.org; Mon, 15 Dec 2025 16:22:33 -0500 Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]:48150) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vVG1U-0000HF-TR for 79982 <at> debbugs.gnu.org; Mon, 15 Dec 2025 16:22:30 -0500 Received: by mail-vk1-xa2c.google.com with SMTP id 71dfb90a1353d-559a4d6b511so601782e0c.0 for <79982 <at> debbugs.gnu.org>; Mon, 15 Dec 2025 13:22:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765833743; x=1766438543; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=LqHZtTgQCoF3WyiMjTlhA3ftMQVSNB2tbbG5fWFBJAI=; b=aNe9iiP2n+0vBkauFxCLXVof+qr/Ot61YqZCOArzRN/1EQ3ro5FaMlJdJTyLYHe7um 0VqULkZ4y1/SkAlEAV6VowluNNmzr93SldwJQmKoc4PGibhzpCAxXY6GSB8Z3wpDLirb NjTgej2ZuGdjBhRngzlQx/cL+jRxfXNotoIL1EY/RO2Zsz66tDzTYGSNo188Bqu7+IXb W9Nc1Yf+t65pA2SEm4z8c8kjKJwLH1KmiYEkV7cN9SmywyE2+r2bJJybyXYfTQGFsYoh Vn3COSNP++2giwSfUc0ylbhn3MSYzzWWpPG85NpqMsV26+P0wB2CE7fnFoPSn+xo9eW+ GgPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765833743; x=1766438543; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=LqHZtTgQCoF3WyiMjTlhA3ftMQVSNB2tbbG5fWFBJAI=; b=qb+KjGYs6zVD1ZSZtg7kM4rERpU0rQP9I3jmPxDSL9YNdlEcbWVXbBX55oZnUJtCKN yfnhu2krddSZeBa4ugCY+GWJUMrSh8CgmX3D/qMcR1UZ35SuowEqInAFrkr5pZ3OuVuD ngg62Am7YbdcdNpOkw7kzXYbxjtIsy/Z78tV3XXVPKCKjsmE75sa/vUgpQOyOYA1mQwB uIiJz0O5am14KA9+SX2gyuMrXC+6CaH/V2MYkuUN0FiPKhIPTnIo8AczEVfvlAZbQ8+i Nzbs/Q9lLEwQFBU1buV8klstqtu/w7pViTgqFZiHnK3qK0TSQHJ8F1WImlEd2aZixJ/w l5SA== X-Forwarded-Encrypted: i=1; AJvYcCWRvTDuvepBTc64PQhndyefvDBKBztXhnm6t2/VCOCewLQbXTzi2ZZTZNgDKECzEV8J4Jn3/A==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yz+dhM5xG6ggr//BkVOGzCB/h7y8yGWOt8br8CHBUEDK5ecOv+b yuaOVx9tYosMuOtJfbjQuFEvdwtvQMeP6SeDGDJKDwZuAfnxRy4IO5wS7ykqfh1GpwkBBSIKDfk DiwkYa/D4cCsMMgRGMV+kBgJdHqcN4yM= X-Gm-Gg: AY/fxX4Qqxbf7A4BAJkBbctU40DGttPBmM93VWN3Ar0ELu4G+I8Tlp4+4Bq97zJyaX+ U8/yBzIuR5oDITmqZUwrnYsLVkLw7GgGkRVV7+L+bfgGxo4kJnbGmjjUsh/J+97cDn3n9lV7E2A MQk0tO0gZVm/VDOMnjZ789PJ9Qhd2squkknQ3d0GkOOKp/orW6uIuieWefYtWzlVXwlmz8lsx1f jVtioj+hTiE/IxdCA3ZajWLrBFRky4/iFkRgA7hYRHMbTpyR17ZzBbo2InyoqGttBFjSes= X-Google-Smtp-Source: AGHT+IFtbDyKL3P7WeG6Xlnx+PT4j53YIfhcYsyILHAB/uulnZ1cCwmGmqyj4+RU/rZYYkocqgGU9E2U2Sb2sELoBWw= X-Received: by 2002:a05:6122:6586:b0:54a:1e96:e958 with SMTP id 71dfb90a1353d-55fed465536mr3480840e0c.0.1765833742865; Mon, 15 Dec 2025 13:22:22 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> <iertsxvd878.fsf@HIDDEN> <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> In-Reply-To: <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Mon, 15 Dec 2025 16:22:08 -0500 X-Gm-Features: AQt7F2qMX0h-38bvRgaUrwyqC5_xK8TIdCW04qWPg5DxOzh63vzIhXB1dQ6XWu8 Message-ID: <CAN+1HbrqF3OqdZQxgWWWmOjTd4UW4Vu64X5mS28M2N50TgzCgQ@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000f9d96f0646043442" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000f9d96f0646043442 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <shipmints@gma= il.com> wrote: > On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <sbaugh@janestreet= .com> > wrote: > >> St=C3=A9phane Marks <shipmints@HIDDEN> writes: >> >> > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <shipmints= @gmail.com> >> wrote: >> > >> > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <sbaugh@janestr= eet.com> >> wrote: >> > >> > St=C3=A9phane Marks <shipmints@HIDDEN> writes: >> > > --- a/lisp/emacs-lisp/vtable.el >> > > +++ b/lisp/emacs-lisp/vtable.el >> > > @@ -398,56 +403,58 @@ vtable-insert-object >> > ... >> > > + (with-current-buffer (vtable-buffer table) >> > > + (save-excursion >> > >> > So in the end I think the only way to keep the diff to >> vtable-insert-object small is >> > if you use (set-buffer (vtable-buffer table)) here instead of >> > with-current-buffer. It's a bit less normal, but it at least avoids >> > some unnecessary indentation. >> > >> > That is, instead of >> > (with-current-buffer (vtable-buffer table) >> > (save-excursion >> > ...)) >> > >> > do >> > >> > (save-excursion >> > (set-buffer (vtable-buffer table)) >> > ...) >> > >> > (save-excursion saves and restores the current buffer) >> > >> > Thanks for making all these changes. I think after that we should be >> > good to go. >> > >> > While I appreciate the desire for tiny diffs, I prefer that the >> stanzas used in update insert remove functions remain consistent >> > and we avoid a special comment explaining why insert is special sayin= g >> this was just for indentation. Hrumph. >> > >> > The alternative would be to make them all save-excursion, set-buffer, >> if you think that's worthy. >> >> IMO that's worth doing. It also saves indentation, so it's actually >> somewhat useful in all the places we're currently adding a >> with-current-buffer, even if it doesn't avoid a big reindent diff. >> > > I forgot about the compiler warning > > emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-current-buffer= =E2=80=99 rather > than save-excursion+set-buffer > > We may also need save-excursion twice, once for what is the ambient > current buffer, and the second to ensure that point doesn't move around i= n > the vtable-buffer. Both of these, I think, are satisfied via > with-current-buffer and we avoid the warning. So, perhaps, we should bit= e > the bullet and swallow the extra indentation in vtable-insert-object and > use the more robust and simpler w-c-b. > I can get a revised patch out quickly. Can we agree on using with-current-buffer and suffer the few extra indented diff lines? --000000000000f9d96f0646043442 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Fri, Dec 12, 2025 at 10:48=E2=80=AFAM St=C3=A9phane Marks <<a href=3D= "mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:</span></div= ></div><div class=3D"gmail_quote gmail_quote_container"><blockquote class= =3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg= b(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div sty= le=3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,san= s-serif">On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <<a href= =3D"mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN</= a>> wrote:</span></div></div><div class=3D"gmail_quote"><blockquote clas= s=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid r= gb(204,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto= :shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:= <br> <br> > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <<a hre= f=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&= gt; wrote:<br> ><br> >=C2=A0 On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <<a hre= f=3D"mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN<= /a>> wrote:<br> ><br> >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" t= arget=3D"_blank">shipmints@HIDDEN</a>> writes:<br> >=C2=A0 > --- a/lisp/emacs-lisp/vtable.el<br> >=C2=A0 > +++ b/lisp/emacs-lisp/vtable.el<br> >=C2=A0 > @@ -398,56 +403,58 @@ vtable-insert-object<br> >=C2=A0 ...<br> >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtable-buffer t= able)<br> >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> ><br> >=C2=A0 So in the end I think the only way to keep the diff to vtable-in= sert-object small is<br> >=C2=A0 if you use (set-buffer (vtable-buffer table)) here instead of<br= > >=C2=A0 with-current-buffer.=C2=A0 It's a bit less normal, but it at= least avoids<br> >=C2=A0 some unnecessary indentation.<br> ><br> >=C2=A0 That is, instead of<br> >=C2=A0 (with-current-buffer (vtable-buffer table)<br> >=C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 =C2=A0 =C2=A0 ...))<br> ><br> >=C2=A0 do<br> ><br> >=C2=A0 (save-excursion<br> >=C2=A0 =C2=A0 (set-buffer (vtable-buffer table))<br> >=C2=A0 =C2=A0 ...)<br> ><br> >=C2=A0 (save-excursion saves and restores the current buffer)<br> ><br> >=C2=A0 Thanks for making all these changes.=C2=A0 I think after that we= should be<br> >=C2=A0 good to go.<br> ><br> >=C2=A0 While I appreciate the desire for tiny diffs, I prefer that the = stanzas used in update insert remove functions remain consistent<br> >=C2=A0 and we avoid a special comment explaining why insert is special = saying this was just for indentation.=C2=A0 Hrumph.<br> ><br> > The alternative would be to make them all save-excursion, set-buffer, = if you think that's worthy.<br> <br> IMO that's worth doing.=C2=A0 It also saves indentation, so it's ac= tually<br> somewhat useful in all the places we're currently adding a<br> with-current-buffer, even if it doesn't avoid a big reindent diff.<br><= /blockquote><div><br></div><div><font face=3D"monospace">I forgot about the= compiler warning</font></div><div><font face=3D"monospace"><br></font></di= v><div><font face=3D"monospace">=C2=A0=C2=A0emacs-lisp/vtable.el:376:10: Wa= rning: Use =E2=80=98with-current-buffer=E2=80=99 rather than save-excursion= +set-buffer</font></div><font face=3D"monospace"><br></font></div><div clas= s=3D"gmail_quote"><div><font face=3D"monospace">We may also need save-excur= sion twice, once for what is the ambient current buffer, and the second to = ensure that point doesn't move around in the vtable-buffer.=C2=A0 Both = of these, I think, are satisfied via with-current-buffer and we avoid the w= arning.=C2=A0 So, perhaps, we should bite the bullet and swallow the extra = indentation in vtable-insert-object and use the more robust and simpler w-c= -b.</font></div></div></div></blockquote><div><br></div><div class=3D"gmail= _default" style=3D"font-family:monospace">I can get a revised patch out qui= ckly.=C2=A0 Can we agree on using with-current-buffer and suffer the few ex= tra indented diff lines?</div></div></div> --000000000000f9d96f0646043442--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 12 Dec 2025 15:48:26 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 12 10:48:26 2025 Received: from localhost ([127.0.0.1]:58153 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vU5Na-0004JU-7H for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 10:48:26 -0500 Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]:42090) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vU5NX-0004J6-TM for 79982 <at> debbugs.gnu.org; Fri, 12 Dec 2025 10:48:24 -0500 Received: by mail-vk1-xa2c.google.com with SMTP id 71dfb90a1353d-55b219b2242so646304e0c.0 for <79982 <at> debbugs.gnu.org>; Fri, 12 Dec 2025 07:48:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765554498; x=1766159298; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=y6NH860imTXchbhiHbpjXLlTfMPnD8DV0pXdK/aJDfc=; b=m10Q/WK1eNIQ9MkpqIapruycwv1euAZEqhEnGv8MZAgpzhvEGSLgTL7rM4+2qmsvea kAVAn+FwXNCcej0d+7KfHLtHx0h/983nzpd84UVkl7x9YbZ2f7jWQwwwQZv1gGI+K2oK FjxDdj8JKJFZ2XJ0g4G4UhcsZsL8T6RutJme5t6iaceV86trk9VFqpW4+ye9o2zaUqFV jD/qLqhJBzBHo4j8PVI9fdDkgtQN8Hv+rZPr2R1oCefKdeyvrrep+Gs+ce2fIOFG7S6V +kpQ6i2PyrNtQcHC/STr7BCoVK9RDLQulY2ZgLdu4BZWILa1yJltoK+2dOWKTIm74aOz N9hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765554498; x=1766159298; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=y6NH860imTXchbhiHbpjXLlTfMPnD8DV0pXdK/aJDfc=; b=wxyTwWvOYB+hMjDhiRSUoSfJynchGqrr1iag6r/z30d+Ai3hM/xTz7niOHF9e/KF0A UTxe86rWxydh5ULIy0gYYxcwA852M7CiKtBhS/p6g0A+VCH5kX+VoNms6JINSPZWRiOq Pa9uM8d9P5G0NJAUqg9xKayUOQmHtPRQkbejzY6PFIkazeMy5VFVF0FraTEbLPGh9/se rL823RfCsXC9fzruGtcdYMlWN1+dZtxw4nWjaObKdEnz2vzTOwO2WgAT1szYfHrq0oyp dFIIWBC6VHSv+KBBpwWreMab3g2YgBH69Z4rlNxsfA9Z2VAyKE7voDgzvRRDkTnnc6Pv Eg3A== X-Forwarded-Encrypted: i=1; AJvYcCWa/KtffuHYVnVn7zcSTtf+PWOJkvmUY370q1DG/FbfQPUV7gUdsaVBOur5hId1o3ZMXYu2ag==@debbugs.gnu.org X-Gm-Message-State: AOJu0YwjZZ25k96wia9fzeY40VTq/bgN32aPm3XH8GfeSwA6XRmH6uh6 IbJWBD6un33FgOjb63MDDm8iWOcBKJd41bUN5F4VzZZTa7RaUQnF/a4mswD3x4u1EryfRjrF/KB UgFd3HtrupQeJHyFgdlowlcA1pdaAas8= X-Gm-Gg: AY/fxX7jmiJ739bFy5w3d9Hsn3z8pRnqFvpOp3RyMmjbANBZMXEWTQtC4WMLD9HU++r YUKmjiabQY9IdoRvKBKk6O2Us6zi89DawBEQK8ft8prQD8GrDCM2TgnI1Hw/cIlaGKmg6MTzgVl 3uy5KspUMmYXLLx0H1CI6l+udPZ0pm4ZMlgr25ZRU6BrMpgBroykGc2CkddvN0SlDkKiSKWmhiV Ftp6MzPF+2cdanaaCRHbYAcmuQAiwIBj9UaE2PVUA5/lNuz0n3kR48NqV+vnUnfnWhpJes= X-Google-Smtp-Source: AGHT+IH8jKIk+ZPc4YOE4HDHrHwWLweslR/rZIds4IlMI3CIOH0cjmLGIFdj0fiBfLAmT4Ya44LCPPhBl3iMv1KhsCg= X-Received: by 2002:a05:6122:4f86:b0:559:6b7f:b0f4 with SMTP id 71dfb90a1353d-55fecbc7e3cmr934815e0c.5.1765554498115; Fri, 12 Dec 2025 07:48:18 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> <iertsxvd878.fsf@HIDDEN> In-Reply-To: <iertsxvd878.fsf@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Fri, 12 Dec 2025 10:48:06 -0500 X-Gm-Features: AQt7F2p3FYLQaPqzX58pN0TvNxNKzu1PcyaYDySeDQUcMz3K3DklE-mgHOFNqKw Message-ID: <CAN+1HbpOOT9RXTQeGW8je=uz0aV=19oYWwhu3Dj=GGkFmOdkgw@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000b11c490645c33064" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000b11c490645c33064 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <sbaugh@HIDDEN= om> wrote: > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <shipmints@= gmail.com> > wrote: > > > > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <sbaugh@janestre= et.com> > wrote: > > > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > > --- a/lisp/emacs-lisp/vtable.el > > > +++ b/lisp/emacs-lisp/vtable.el > > > @@ -398,56 +403,58 @@ vtable-insert-object > > ... > > > + (with-current-buffer (vtable-buffer table) > > > + (save-excursion > > > > So in the end I think the only way to keep the diff to > vtable-insert-object small is > > if you use (set-buffer (vtable-buffer table)) here instead of > > with-current-buffer. It's a bit less normal, but it at least avoids > > some unnecessary indentation. > > > > That is, instead of > > (with-current-buffer (vtable-buffer table) > > (save-excursion > > ...)) > > > > do > > > > (save-excursion > > (set-buffer (vtable-buffer table)) > > ...) > > > > (save-excursion saves and restores the current buffer) > > > > Thanks for making all these changes. I think after that we should be > > good to go. > > > > While I appreciate the desire for tiny diffs, I prefer that the stanza= s > used in update insert remove functions remain consistent > > and we avoid a special comment explaining why insert is special saying > this was just for indentation. Hrumph. > > > > The alternative would be to make them all save-excursion, set-buffer, i= f > you think that's worthy. > > IMO that's worth doing. It also saves indentation, so it's actually > somewhat useful in all the places we're currently adding a > with-current-buffer, even if it doesn't avoid a big reindent diff. > I forgot about the compiler warning emacs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-current-buffer=E2= =80=99 rather than save-excursion+set-buffer We may also need save-excursion twice, once for what is the ambient current buffer, and the second to ensure that point doesn't move around in the vtable-buffer. Both of these, I think, are satisfied via with-current-buffer and we avoid the warning. So, perhaps, we should bite the bullet and swallow the extra indentation in vtable-insert-object and use the more robust and simpler w-c-b. --000000000000b11c490645c33064 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Fri, Dec 12, 2025 at 10:35=E2=80=AFAM Spencer Baugh <<a href=3D"mailt= o:sbaugh@HIDDEN">sbaugh@HIDDEN</a>> wrote:</span></div><= /div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"= gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20= 4,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:ship= mints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> <br> > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <<a hre= f=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&= gt; wrote:<br> ><br> >=C2=A0 On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <<a hre= f=3D"mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN<= /a>> wrote:<br> ><br> >=C2=A0 St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" t= arget=3D"_blank">shipmints@HIDDEN</a>> writes:<br> >=C2=A0 > --- a/lisp/emacs-lisp/vtable.el<br> >=C2=A0 > +++ b/lisp/emacs-lisp/vtable.el<br> >=C2=A0 > @@ -398,56 +403,58 @@ vtable-insert-object<br> >=C2=A0 ...<br> >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtable-buffer t= able)<br> >=C2=A0 > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> ><br> >=C2=A0 So in the end I think the only way to keep the diff to vtable-in= sert-object small is<br> >=C2=A0 if you use (set-buffer (vtable-buffer table)) here instead of<br= > >=C2=A0 with-current-buffer.=C2=A0 It's a bit less normal, but it at= least avoids<br> >=C2=A0 some unnecessary indentation.<br> ><br> >=C2=A0 That is, instead of<br> >=C2=A0 (with-current-buffer (vtable-buffer table)<br> >=C2=A0 =C2=A0 (save-excursion<br> >=C2=A0 =C2=A0 =C2=A0 ...))<br> ><br> >=C2=A0 do<br> ><br> >=C2=A0 (save-excursion<br> >=C2=A0 =C2=A0 (set-buffer (vtable-buffer table))<br> >=C2=A0 =C2=A0 ...)<br> ><br> >=C2=A0 (save-excursion saves and restores the current buffer)<br> ><br> >=C2=A0 Thanks for making all these changes.=C2=A0 I think after that we= should be<br> >=C2=A0 good to go.<br> ><br> >=C2=A0 While I appreciate the desire for tiny diffs, I prefer that the = stanzas used in update insert remove functions remain consistent<br> >=C2=A0 and we avoid a special comment explaining why insert is special = saying this was just for indentation.=C2=A0 Hrumph.<br> ><br> > The alternative would be to make them all save-excursion, set-buffer, = if you think that's worthy.<br> <br> IMO that's worth doing.=C2=A0 It also saves indentation, so it's ac= tually<br> somewhat useful in all the places we're currently adding a<br> with-current-buffer, even if it doesn't avoid a big reindent diff.<br><= /blockquote><div><br></div><div class=3D"gmail_default" style=3D""><font fa= ce=3D"monospace">I forgot about the compiler warning</font></div><div class= =3D"gmail_default" style=3D""><font face=3D"monospace"><br></font></div><di= v class=3D"gmail_default" style=3D""><font face=3D"monospace">=C2=A0=C2=A0e= macs-lisp/vtable.el:376:10: Warning: Use =E2=80=98with-current-buffer=E2=80= =99 rather than save-excursion+set-buffer</font></div><font face=3D"monospa= ce"><br></font></div><div class=3D"gmail_quote gmail_quote_container"><div = class=3D"gmail_default" style=3D""><font face=3D"monospace">We may also nee= d save-excursion twice, once for what is the ambient current buffer, and th= e second to ensure that point doesn't move around in the vtable-buffer.= =C2=A0 Both of these, I think, are satisfied via with-current-buffer and we= avoid the warning.=C2=A0 So, perhaps, we should bite the bullet and swallo= w the extra indentation in vtable-insert-object and use the more robust and= simpler w-c-b.</font></div><br></div></div> --000000000000b11c490645c33064--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 12 Dec 2025 15:35:32 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 12 10:35:31 2025 Received: from localhost ([127.0.0.1]:58069 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vU5B5-0003Y5-Gg for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 10:35:31 -0500 Received: from mxout5.mail.janestreet.com ([64.215.233.18]:40487) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>) id 1vU5B3-0003Va-BM for 79982 <at> debbugs.gnu.org; Fri, 12 Dec 2025 10:35:29 -0500 From: Spencer Baugh <sbaugh@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot In-Reply-To: <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> (=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Fri, 12 Dec 2025 09:34:35 -0500") References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> Date: Fri, 12 Dec 2025 10:35:23 -0500 Message-ID: <iertsxvd878.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=waixah; t=1765553723; bh=CUoTKLuBeJQ/tIdgBAHksGfEsicxf/kqA5zcM2XDLAk=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=hONtOuYPWs5BVbSflJdG/2Al8gaMdyhHn75UPMJCc9vAyL1I15RPvI42PxiSWemxA DVvqAW0iDCK+pKei+e7cwRegG2piGC7E1yeKqDDTT6vpNlUfjtzsMuFInH30mfrLbg RuZb03fKzW9ONkPOzwGp05qb91fUHYrRrrdn9fShzKFQTtEXcCs6SeKe7fCDWgHNns 7icBsl8MPlnCv3eimIo9F8n4cIki8jS/F1gSaU8G+WkSjkDdQRR5VLlSihGiFoJU1g JjenYhH4mJf7KWqxu6uOgKWHRuQ88hOh6atBw9X+54KZ/BrXgAkguV7ToKtxdqVWpB LEVpNSM91jaOQ== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) St=C3=A9phane Marks <shipmints@HIDDEN> writes: > On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <shipmints@gm= ail.com> wrote: > > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <sbaugh@janestreet= .com> wrote: > > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > --- a/lisp/emacs-lisp/vtable.el > > +++ b/lisp/emacs-lisp/vtable.el > > @@ -398,56 +403,58 @@ vtable-insert-object > ... > > + (with-current-buffer (vtable-buffer table) > > + (save-excursion > > So in the end I think the only way to keep the diff to vtable-insert-obj= ect small is > if you use (set-buffer (vtable-buffer table)) here instead of > with-current-buffer. It's a bit less normal, but it at least avoids > some unnecessary indentation. > > That is, instead of > (with-current-buffer (vtable-buffer table) > (save-excursion > ...)) > > do > > (save-excursion > (set-buffer (vtable-buffer table)) > ...) > > (save-excursion saves and restores the current buffer) > > Thanks for making all these changes. I think after that we should be > good to go. > > While I appreciate the desire for tiny diffs, I prefer that the stanzas = used in update insert remove functions remain consistent > and we avoid a special comment explaining why insert is special saying t= his was just for indentation. Hrumph. > > The alternative would be to make them all save-excursion, set-buffer, if = you think that's worthy. IMO that's worth doing. It also saves indentation, so it's actually somewhat useful in all the places we're currently adding a with-current-buffer, even if it doesn't avoid a big reindent diff.
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 12 Dec 2025 14:34:59 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 12 09:34:59 2025 Received: from localhost ([127.0.0.1]:56918 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vU4EU-0007I6-HJ for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 09:34:59 -0500 Received: from mail-ua1-x934.google.com ([2607:f8b0:4864:20::934]:52669) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vU4EQ-0007Ha-6s for 79982 <at> debbugs.gnu.org; Fri, 12 Dec 2025 09:34:54 -0500 Received: by mail-ua1-x934.google.com with SMTP id a1e0cc1a2514c-93f56a97064so376663241.1 for <79982 <at> debbugs.gnu.org>; Fri, 12 Dec 2025 06:34:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765550088; x=1766154888; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RF55PXNgYoRcaeEt7KYGfUwopuCI5nQIUwCRIKav+Yk=; b=kd65f43mg/vTW831x94C9G2PPEfS75AaMJCO+ZnI8rBJzxyjKInP4EqXzF5Ru98BXA AH9tDq85R+3KBi/ZRb5FRyr7OZIhrm/j3QRC0Lrtkqo1W4lJ3GzcFtMt3sV3UPo33zqm ic4MLTm8IWj0/TGMcFnIIdprHDIx/u8gTwQBt3ZprK0ulAhzVKqcTm6fHm5egjzh9iNB yTvMS85CLq912czSpwC6UdxtQrJL7GrwsNfMT5BPKA6bt5Q1qhdfk3FJzRmZplnX+WeD ez7k3VQzW4JLLWlv1iUwfkC7flscdr2aqUK9/5qS6tRGY2rF8zptiNJiuzkF+Pv358Ot 9eTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765550088; x=1766154888; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=RF55PXNgYoRcaeEt7KYGfUwopuCI5nQIUwCRIKav+Yk=; b=sfqrsUQ3Z7ACTeVziUBC7PZvmO5C0I75Sik9x5PR8zcopXESsrvky6KXC++czgyyX6 hz9T7aul2IYSs4afU/PPkdpgq4wRGrHlFMZ9BNoACsuQKi5ESpq6n9L8gB8YXHE6sXjv GGUrF+yXb/gl9DSS5v5s3UK4/Wcn0p8XPagHUi0KSpxUkB7Veygw6qMQGCaGbt91MW6F xRo0572482F7TnQiyf7qvuc3quB0YxG0IheQjmFB0WRCzyLqfgrYKhvyFzQwWalxjY5C bKCDMYjCxFfaWwolcsKEc+vgdEcasJM9SJIXeSK70A2/0iShZ2AgSOj6jczKqECSY/YP tafw== X-Forwarded-Encrypted: i=1; AJvYcCVpvzJLzpGGhWaL8dULQhfwfFycudOdVE0EQJmmipDyl0SRs6eQcoIr601mdjmUYFQet3iNKA==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yz2a31TtWU5UA/e2mQpURAMVXl3khQ/TDcjACqrLYZnF0QQdJFo 2aTJReeqb+wIRbZTQHctNivbv4J+h5LwX9l1mQ8VVhh7IlFWZGJRdwWezEPUsIziXvMnfYT/Io4 JSh3VNvBnxw3JynuCzH6Opwrr7ibsnG8= X-Gm-Gg: AY/fxX6Mb4giKhROMGSlqY0U+kb7YqdihRCYbGB1YEJPGcTbqPAnRn1oWajGlz2DRTF YwOw4wL2mGdDGIILXhq9LEFvmd7kEJjihyFnQW90kjyteBdvlfafuqbA0G8+TCmL2GiK5PJni0q Y+8TItPgaLdRMKL1Z8s1IVwEsI1LpxIolLNs3HBge/1AJ7mobSyp1PWe4ItQNCJNSI4ljB+3nn+ KbErElRuQ4Yx1bfg1fotDZ+Ar/u5SyGskqjqcO8qXJolR9MgOWovkSRmaQFDMqndcK5Vb4= X-Google-Smtp-Source: AGHT+IE5VmxrrUOL0p+di98D8wTepzGh/GbjhVdmRpHMkWsOJ3DB425VCkSlsfT5MbzkJx9tweTdwQ+Sxm1hpu9D12M= X-Received: by 2002:a05:6102:c8c:b0:5db:f573:a2c with SMTP id ada2fe7eead31-5e82768bf77mr556544137.13.1765550088398; Fri, 12 Dec 2025 06:34:48 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> In-Reply-To: <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Fri, 12 Dec 2025 09:34:35 -0500 X-Gm-Features: AQt7F2qzRsQmJuSiHacEXWUfXecGxdvo-gCEUpJ--Jn2kVSTIAT83Gfh8zxLc0U Message-ID: <CAN+1HbqXgFw0eh_asmGkNuJ9Lv-vfm10SELQs6U9M2U3p=QUog@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000da2d040645c229dc" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000da2d040645c229dc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <shipmints@gmai= l.com> wrote: > On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <sbaugh@janestreet.= com> > wrote: > >> St=C3=A9phane Marks <shipmints@HIDDEN> writes: >> > --- a/lisp/emacs-lisp/vtable.el >> > +++ b/lisp/emacs-lisp/vtable.el >> > @@ -398,56 +403,58 @@ vtable-insert-object >> ... >> > + (with-current-buffer (vtable-buffer table) >> > + (save-excursion >> >> So in the end I think the only way to keep the diff to >> vtable-insert-object small is >> if you use (set-buffer (vtable-buffer table)) here instead of >> with-current-buffer. It's a bit less normal, but it at least avoids >> some unnecessary indentation. >> >> That is, instead of >> (with-current-buffer (vtable-buffer table) >> (save-excursion >> ...)) >> >> do >> >> (save-excursion >> (set-buffer (vtable-buffer table)) >> ...) >> >> (save-excursion saves and restores the current buffer) >> >> Thanks for making all these changes. I think after that we should be >> good to go. >> > > While I appreciate the desire for tiny diffs, I prefer that the stanzas > used in update insert remove functions remain consistent and we avoid a > special comment explaining why insert is special saying this was just for > indentation. Hrumph. > The alternative would be to make them all save-excursion, set-buffer, if you think that's worthy. --000000000000da2d040645c229dc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Fri, Dec 12, 2025 at 9:33=E2=80=AFAM St=C3=A9phane Marks <<a href=3D"= mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:</span></div>= </div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D= "gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2= 04,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style= =3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-= serif">On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <<a href=3D= "mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN</a>&= gt; wrote:</span></div></div><div class=3D"gmail_quote"><blockquote class= =3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg= b(204,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:= shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<= br> > --- a/lisp/emacs-lisp/vtable.el<br> > +++ b/lisp/emacs-lisp/vtable.el<br> > @@ -398,56 +403,58 @@ vtable-insert-object<br><span class=3D"gmail_def= ault" style=3D"font-family:monospace">...</span><br> > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtable-buffer table)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> <br> So in the end I think the only way to keep the diff to vtable-insert-object= small is<br> if you use (set-buffer (vtable-buffer table)) here instead of<br> with-current-buffer.=C2=A0 It's a bit less normal, but it at least avoi= ds<br> some unnecessary indentation.<br> <br> That is, instead of<br> (with-current-buffer (vtable-buffer table)<br> =C2=A0 (save-excursion<br> =C2=A0 =C2=A0 ...))<br> <br> do<br> <br> (save-excursion<br> =C2=A0 (set-buffer (vtable-buffer table))<br> =C2=A0 ...)<br> <br> (save-excursion saves and restores the current buffer)<br> <br> Thanks for making all these changes.=C2=A0 I think after that we should be<= br> good to go.<br></blockquote><div><br></div><div style=3D"font-family:monosp= ace">While I appreciate the desire for tiny diffs, I prefer that the stanza= s used in update insert remove functions remain consistent and we avoid a s= pecial comment explaining why insert is special saying this was just for in= dentation.=C2=A0 Hrumph.</div></div></div></blockquote><div><br></div><div = class=3D"gmail_default" style=3D"font-family:monospace">The alternative wou= ld be to make them all save-excursion, set-buffer, if you think that's = worthy.</div></div></div> --000000000000da2d040645c229dc--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 12 Dec 2025 14:34:07 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 12 09:34:07 2025 Received: from localhost ([127.0.0.1]:56914 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vU4De-0007FW-FE for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 09:34:07 -0500 Received: from mail-ua1-x92b.google.com ([2607:f8b0:4864:20::92b]:51490) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vU4Db-0007F3-BC for 79982 <at> debbugs.gnu.org; Fri, 12 Dec 2025 09:34:04 -0500 Received: by mail-ua1-x92b.google.com with SMTP id a1e0cc1a2514c-93f56804894so760051241.3 for <79982 <at> debbugs.gnu.org>; Fri, 12 Dec 2025 06:34:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765550037; x=1766154837; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=mo3ztBsVNhKCQ4E9YhNVuhWO2wIja1bXCUcDnfmTAm0=; b=i/PHWLpTdLkpel3sCuJTIuchkDfsTiTHeEM6IPkZmvneWJHcMB4/nEMT95uh7RX7bV FP77irJO/CuFNJUDogGPpVy6ZnAvLSgXQQ5ZGgTecdGTNrV5OP95biTmnlnlj5DF5tX/ vuKNTrFpaf9cIwhuH4Gw1ApLk8EwYd4VeoHNSlg2OTmJAx7eC7YDnsz6UxBXuIJgYh8S gIAgkpv5xOua4LeHq6IcW1yejk/PWjJup72x8NsA9ektbW54gyuCdPqt5B/F9fclckif ovJ6dhvBSDN0bjKDC4uk+rDCxwITSqyzBTcvs3qRz/2yCzE+wTZfcm4RknwbMBKDy33d lZng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765550037; x=1766154837; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mo3ztBsVNhKCQ4E9YhNVuhWO2wIja1bXCUcDnfmTAm0=; b=dMb87s/atN8k8PiGeTWklM/iOVGkSj62S+RL+z+8zzyU3aoHZclEVOeNznuGO6GrXR VxGJWwkO31q4XCdWGlDfimbjm3i7e65uerZBulG5YNBoMkka2dOM8Pyxd/W6HYMZ59Mh 0L7igUGkqZLrqTBsAUzRcUdVOAXnwl9gDLHXXryJWiFO+zsNxKj/y2imUXTyaEfw3IbH pn3XudjOOejIymLCxSaWeyHPJNQTZqEmdrRWFaPpoHQqHWFN/GiqTXf8UESO+HELpNMj rrc412MOaxJjY2qxuZBg9ea6oHYvcQSu8J+Yv+u6XNtoShLxEXnP6CGjsbf/BGaPoOuk 3OKw== X-Forwarded-Encrypted: i=1; AJvYcCU9s5F3U1dUXME74UyxxKkZ7CuxMwgkwQdNvDgvWWfim/EdnSGst5/sp3LJBghYQKL0l4bIwA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyjiWzSZOB43nnj1W5fEacfEh7ipc9X4ME4O5KBnyN/m/Yi6zt7 CT7MoLhKKF/E0QcszYAQgwtnTntawe2jqz3Xp504OFw+60xcSV0+/GkhJxjasShrIha1kwT+oQA BAJv8O60mliJhigOPmXIVYANsPlLSUXE= X-Gm-Gg: AY/fxX6GCj6qVfo22xWJ3o91gTiJx2LbXKE/HhUA70jqITJ49ppbxtdXXpzWaL92qo/ LLFcrv77DWyvanDr4smb94fM2x7ZJ/Bcw+TIng7hcfr90zMnnApJ7qXNc1Nmt7F48SGmm+yYUql bi6HuojQ2yiQKWujRLzGiqsu2Tt6Ar5aeFX+qZkngKbIczbzI3GtWgrr+Ru9wl6OEqYy7ucJxQT oYT0wnNtz8UvR5iWtELVHJSfBf1HP6vHHjCecb/A3l419SHkaUb9zvao7lb9Bmmtw6GBNc= X-Google-Smtp-Source: AGHT+IGvdc3aDHzX05G/xVW1EPysQYRKJ9dzkGYK2W00Tm+YCpFx1EfUwBrXGnQKGc7xMN3E4AqWtfgXKsT/Zx3Svbs= X-Received: by 2002:a05:6102:5a98:b0:5e8:1dcb:4dfd with SMTP id ada2fe7eead31-5e827472534mr671809137.5.1765550037448; Fri, 12 Dec 2025 06:33:57 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <ierzf7ndebe.fsf_-_@HIDDEN> In-Reply-To: <ierzf7ndebe.fsf_-_@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Fri, 12 Dec 2025 09:33:45 -0500 X-Gm-Features: AQt7F2pBtgbC1JGiOeGS48mhDd2xTj1_6PTyzIevxj3m0yuxq_JjyeyuWR2NhbQ Message-ID: <CAN+1HbrMnL=PJt0d-ePEd5y15zDWVZQK0wJYEi5+b+wY3VK4DQ@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000d0b9a60645c22673" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000d0b9a60645c22673 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <sbaugh@HIDDEN= m> wrote: > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > --- a/lisp/emacs-lisp/vtable.el > > +++ b/lisp/emacs-lisp/vtable.el > > @@ -398,56 +403,58 @@ vtable-insert-object > ... > > + (with-current-buffer (vtable-buffer table) > > + (save-excursion > > So in the end I think the only way to keep the diff to > vtable-insert-object small is > if you use (set-buffer (vtable-buffer table)) here instead of > with-current-buffer. It's a bit less normal, but it at least avoids > some unnecessary indentation. > > That is, instead of > (with-current-buffer (vtable-buffer table) > (save-excursion > ...)) > > do > > (save-excursion > (set-buffer (vtable-buffer table)) > ...) > > (save-excursion saves and restores the current buffer) > > Thanks for making all these changes. I think after that we should be > good to go. > While I appreciate the desire for tiny diffs, I prefer that the stanzas used in update insert remove functions remain consistent and we avoid a special comment explaining why insert is special saying this was just for indentation. Hrumph. --000000000000d0b9a60645c22673 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Fri, Dec 12, 2025 at 8:23=E2=80=AFAM Spencer Baugh <<a href=3D"mailto= :sbaugh@HIDDEN">sbaugh@HIDDEN</a>> wrote:</span></div></= div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"g= mail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204= ,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:shipm= ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> > --- a/lisp/emacs-lisp/vtable.el<br> > +++ b/lisp/emacs-lisp/vtable.el<br> > @@ -398,56 +403,58 @@ vtable-insert-object<br><span class=3D"gmail_def= ault" style=3D"font-family:monospace">...</span><br> > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtable-buffer table)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> <br> So in the end I think the only way to keep the diff to vtable-insert-object= small is<br> if you use (set-buffer (vtable-buffer table)) here instead of<br> with-current-buffer.=C2=A0 It's a bit less normal, but it at least avoi= ds<br> some unnecessary indentation.<br> <br> That is, instead of<br> (with-current-buffer (vtable-buffer table)<br> =C2=A0 (save-excursion<br> =C2=A0 =C2=A0 ...))<br> <br> do<br> <br> (save-excursion<br> =C2=A0 (set-buffer (vtable-buffer table))<br> =C2=A0 ...)<br> <br> (save-excursion saves and restores the current buffer)<br> <br> Thanks for making all these changes.=C2=A0 I think after that we should be<= br> good to go.<br></blockquote><div><br></div><div class=3D"gmail_default" sty= le=3D"font-family:monospace">While I appreciate the desire for tiny diffs, = I prefer that the stanzas used in update insert remove functions remain con= sistent and we avoid a special comment explaining why insert is special say= ing this was just for indentation.=C2=A0 Hrumph.</div></div></div> --000000000000d0b9a60645c22673--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 12 Dec 2025 13:26:09 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 12 08:26:09 2025 Received: from localhost ([127.0.0.1]:56301 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vU39s-0002Ww-ED for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 08:26:08 -0500 Received: from mxout5.mail.janestreet.com ([64.215.233.18]:59961) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>) id 1vU39q-0002WH-0W for 79982 <at> debbugs.gnu.org; Fri, 12 Dec 2025 08:26:06 -0500 From: Spencer Baugh <sbaugh@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot In-Reply-To: <CAN+1Hbq8bF6Fz-on6WS8QsKxnN4RxLAgVcWRc9ZNs2fO4V22hQ@HIDDEN> (=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Fri, 12 Dec 2025 06:36:58 -0500") References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <87a4zo6kaq.fsf@HIDDEN> <CAN+1Hbq8bF6Fz-on6WS8QsKxnN4RxLAgVcWRc9ZNs2fO4V22hQ@HIDDEN> Date: Fri, 12 Dec 2025 08:26:00 -0500 Message-ID: <ierwm2rde6v.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=waixah; t=1765545960; bh=zXhPBRvWic82GWJv7TcqklJXzNU6Z2C/mlrMjkVYiks=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=WgLym1Lg04z3POu5xubYKGwNX/jPU0cyd5/sno+Lwe6dNBVFnlmxQx4McSgofLvxf YEHIyHDcSdHn/kZxT/gyoZNb1CCGRlQ02qD7G6r0VWM4Y01MAyGrjhbD+idODmwlVP +Irp72PYNIspm9Vc3y/KvoRiafNZ1gIirpiiy88l95gQX+mV0xGtZep37XdKEjSqNk ADZbAubgSjjKQI87wjbUHhkGwyJN07WWmK3EcjUyMJ70k0RH8qxdpoBDscYLukR4b3 EDUAPFjokwzxwfLMvDHO0xxFNLLNBl0VwdkFzug4de19ivt67HY6RkAA8AVa5RxuqY Yfh71QzFNJlLA== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) St=C3=A9phane Marks <shipmints@HIDDEN> writes: > On Fri, Dec 12, 2025 at 5:55=E2=80=AFAM Augusto Stoffel <arstoffel@gmail.= com> wrote: > > On Thu, 11 Dec 2025 at 16:07, St=C3=A9phane Marks <shipmints@HIDDEN> = wrote: > > > I put the vtable-set-buffer function back in because I recalled that > > Augusto's comint-mime implementation uses a multi-buffer approach to > > get a vtable into a comint buffer. It first inserts into a temp > > buffer and then blasts the buffer-string into the comint buffer and it > > expects to be able to manipulate that vtable in that comint buffer > > despite its foreign origin. comint-mime would invoke this to reset > > the buffer (yes, this is not backward compatible for his use case but > > he's the only one I've found and I'm aware of and it's been brought > > up). > > I implemented it that way because it "just worked", but it seems > perfectly reasonable to declare that a vtable is tied to a buffer, > period. I recommend picking the approach that simplifies the > implementation and future uses of vtable. comint-mime can be changed > (in fact, it has to be changed anyway). > > While I'm not fully into the loop regarding this discussion, it seems to > me that the vtable's buffer should not part of the public interface and > the ability to move a vtable between buffers should not be a supported > feature. > > I don't mind the safety hatch, though. Other people might do something c= lever like you did with the HTML renderer. I wrote a mild > admonishment in the docstring. I agree with Augusto that eventually we probably shouldn't support changing vtables between buffers. But, at the moment, removing support for changing vtables between buffers doesn't simplify the code at all. So I agree with leaving it in for now and just writing an admonishment in the docstring, as you did.
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.
Received: (at 79982) by debbugs.gnu.org; 12 Dec 2025 13:23:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 12 08:23:28 2025
Received: from localhost ([127.0.0.1]:56292 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vU37H-0002LT-4B
for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 08:23:27 -0500
Received: from mxout5.mail.janestreet.com ([64.215.233.18]:48997)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>)
id 1vU37D-0002L9-95
for 79982 <at> debbugs.gnu.org; Fri, 12 Dec 2025 08:23:24 -0500
From: Spencer Baugh <sbaugh@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable
buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer
slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot
In-Reply-To: <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN>
(=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Thu, 11 Dec 2025
16:07:24 -0500")
References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN>
<iero6o6s75r.fsf@HIDDEN>
<CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN>
<ierikeerwu7.fsf_-_@HIDDEN>
<CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN>
<ierfr9irmo2.fsf_-_@HIDDEN>
<CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN>
<iercy4kswsa.fsf_-_@HIDDEN>
<CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN>
<ier8qf8ssxp.fsf_-_@HIDDEN>
<CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN>
Date: Fri, 12 Dec 2025 08:23:17 -0500
Message-ID: <ierzf7ndebe.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com;
s=waixah; t=1765545797;
bh=MrVP6UsKXZhhQ680tNKF+FS3xRwUWlWajIznmRzKY78=;
h=From:To:Cc:Subject:In-Reply-To:References:Date;
b=sNRJyyBlX0Tvnv2xpL8oeQ3bucKdbJRz2Ujs1mzwuOF00UmBxSsbfKbpWCqxmKaTp
bHWzYd9DZIvxC4T/DNyB7oTrcCxxGHwkXsDN93QnUuXW6lU0WwiAaVLHI6b7bUbMwM
savKkXXukAGX7cZhUuCwNIa4vJUlWLrX/GWJloIfPxlpUsmwzPGzDZ4ulG9ujvAc2X
AiMXoJYGBjv7yXZkxvkpiull+ItWK+Sar/rVsr+ttD/bGbk3gn0KxRoiD3HoxbqMOA
lL+KvPzuptcBi/7gztg+9euFoHVh7LpLn9h/3/a3/YocCGePnwX4V9MsnQr+7qmB4R
rx+JbpzevsD0g==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79982
Cc: Kristoffer Balintona <krisbalintona@HIDDEN>,
Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN,
79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>,
Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
Augusto Stoffel <arstoffel@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)
St=C3=A9phane Marks <shipmints@HIDDEN> writes:
> --- a/lisp/emacs-lisp/vtable.el
> +++ b/lisp/emacs-lisp/vtable.el
> @@ -398,56 +403,58 @@ vtable-insert-object
> ;; Otherwise, append the object.
> (nconc (vtable-objects table) (list object)))))
> ;; Then adjust the cache and display.
> - (save-excursion
> - (vtable-goto-table table)
> - (let* ((cache (vtable--current-cache))
> - (inhibit-read-only t)
> - (keymap (get-text-property (point) 'keymap))
> - (ellipsis (if (vtable-ellipsis table)
> - (propertize (truncate-string-ellipsis)
> - 'face (vtable-face table))
> - ""))
> - (ellipsis-width (string-pixel-width ellipsis))
> - (lines (vtable--cache-lines cache))
> - (elem (if location ; This binding mirrors the binding of `=
pos' above.
> - (if (integerp location)
> - (nth location lines)
> - (or (assq location lines)
> - (and before (car lines))))
> - (if before (car lines))))
> - (pos (memq elem lines))
> - (line (cons object (vtable--compute-cached-line table objec=
t))))
> - (if (or before
> - (and pos (integerp location)))
> - ;; Add the new object before:.
> - (let ((old-line (car pos)))
> - (setcar pos line)
> - (setcdr pos (cons old-line (cdr pos)))
> - (unless (vtable-goto-object (car elem))
> - (vtable-beginning-of-table)))
> - ;; Otherwise, add the object after.
> - (if pos
> - ;; Splice the object into the list.
> - (progn
> - (setcdr pos (cons line (cdr pos)))
> - (if (vtable-goto-object location)
> - (forward-line 1) ; Insert *after*.
> - (vtable-end-of-table)))
> - ;; Otherwise, append the object.
> - (setcar cache (nconc lines (list line)))
> - (vtable-end-of-table)))
> - (let ((start (point)))
> - ;; FIXME: We have to adjust colors in lines below this if we
> - ;; have :row-colors.
> - (vtable--insert-line table line 0
> - (vtable--cache-widths cache) (vtable--spa=
cer table)
> - ellipsis ellipsis-width)
> - (add-text-properties start (point) (list 'keymap keymap
> - 'vtable table
> - 'vtable-cache cache)))
> - ;; We may have inserted a non-numerical value into a previously
> - ;; all-numerical table, so recompute.
> - (vtable--recompute-numerical table (cdr line))))))
> + (let* ((cache (vtable--current-cache table))
> + (inhibit-read-only t)
> + (inhibit-modification-hooks t)
> + (lines (vtable--cache-lines cache))
> + (elem (if location ; This binding mirrors the binding of `po=
s' above.
> + (if (integerp location)
> + (nth location lines)
> + (or (assq location lines)
> + (and before (car lines))))
> + (if before (car lines))))
> + (pos (memq elem lines))
> + (line (cons object (vtable--compute-cached-line table object)=
)))
> + (with-current-buffer (vtable-buffer table)
> + (save-excursion
So in the end I think the only way to keep the diff to vtable-insert-object=
small is
if you use (set-buffer (vtable-buffer table)) here instead of
with-current-buffer. It's a bit less normal, but it at least avoids
some unnecessary indentation.
That is, instead of
(with-current-buffer (vtable-buffer table)
(save-excursion
...))
do
(save-excursion
(set-buffer (vtable-buffer table))
...)
(save-excursion saves and restores the current buffer)
Thanks for making all these changes. I think after that we should be
good to go.
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 12 Dec 2025 11:37:19 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 12 06:37:19 2025 Received: from localhost ([127.0.0.1]:55478 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vU1SY-0000wk-KQ for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 06:37:19 -0500 Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]:61937) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vU1SW-0000wT-0S for 79982 <at> debbugs.gnu.org; Fri, 12 Dec 2025 06:37:16 -0500 Received: by mail-vs1-xe2b.google.com with SMTP id ada2fe7eead31-5dfccb35b10so729882137.3 for <79982 <at> debbugs.gnu.org>; Fri, 12 Dec 2025 03:37:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765539430; x=1766144230; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4lWp1z1qm5gimARgCinlQ2lC4285X5e/PriMkm9eQuc=; b=SvlCJPoLkF1WwHLgxndBekiWf/3qzqAsdFXCkkdPpJ9qaxQW+5OIdzwo2GUzuTr9sD jyeQQtBpwQgGnxdBgJNNBsrpuFHIb+Q2aP6qkeaspvt4dGW3Lf39QVYF7R/UYxQ8Q+mp OK8wWNd9SAg3spTji6yd6VZAFXgvzYdylRVDMshe4sw5S4UFA+Bg6MfGYOiZx/AHOiNr w5GhtmjQ9Mm3NbVrSyRAz/nLIAXUZX9WhZ15YQ54hXaxxyt5riEsv2lUNl0fwPKF2tk2 Lrqov9cRiWLFWPmmFRLUfuqFJA3zRoenD0yamgYAsqhiXlmOm5WFxZpnMM3JxuKOPS/9 3ZoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765539430; x=1766144230; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=4lWp1z1qm5gimARgCinlQ2lC4285X5e/PriMkm9eQuc=; b=jvqfaxTiSyXoaLUqQuNQ9+2j2uklkxc9gkqQcRY7B+9J8h5S/WIY62VvXDKpYEWnEC k5whLfr+mXQ6cy1W4vUOn8DPfTQEzcW+ffsuxi5ugUd11AVElJZQ+fnsw1hQnDZ3jFcu 3D9fMx4V8fcG/z8WsCDxenINHq1CjlulSrdRDDLYblDzOZjUfpWvS5s6eg56GY64eiZu 1nMFliwSj5wERZtNrhjMZ1nPG4Ejd+tgugRfz+GgbZeFiSqe5M5ApO7a+Yabl+fe9W2W PssPa69+sG2NJBvXARja+CGGMfD8ro3allj14L2s8mPbrvvb2UPQGw5pL8sinZSN/2nX BJ4Q== X-Forwarded-Encrypted: i=1; AJvYcCWk0pmNDtPXedOrCSZVqB4GeRgUQFCZ3C5AAfUhWpwzVDI5fC3+ftiYFvmEZNJAOJ6jb7iFGg==@debbugs.gnu.org X-Gm-Message-State: AOJu0Ywzl4VyTqXoawuYQsKJbg+Ruj6z76CuJpjmbCtLc28hGcw0bgWg 1Pvzq1g8EUaoEZluN1/Gmg+cKpuIv7PMpQ5Vm4KP2aEU8/s9m+To3m8zyZIohFy0TVFdpiCD8ns GdxWBdd96u1qMR/a6uEnSCJ3USIrLdv4= X-Gm-Gg: AY/fxX6rgI+vZ1Q2dnsctl/JQShnj+tQfzsUKqLQe+B1apw+1EYJgdEZUCCPlgDfQW9 URZ+VePLhLKRbxscqW4kOAc36xO98TqnLrzzGCJcGhZU/S41F5rU7+Zla7dhWm1Ly4XNQQ+Qje9 drDaJGGe+SLOgGpIyaVJOMutjcrMh8bYC12BB5U1gz5ucPE5LKBsHn/WYTGBKVCMLCGYe9MwMqk drrvDSE93uuXAQdUyWeVv+03uaqRM260X3F8ScD/sP2R+BNcS5b9LDScGCKMwZ2gffIPlU= X-Google-Smtp-Source: AGHT+IEx0CR1Djps8TeZdnjW11h23BJ/MpLG/qda+KG6TAFs+A4xMKjV5c8tGtgct8qz8fR95SOobKKMZ2grcM5sOVQ= X-Received: by 2002:a05:6102:dcb:b0:5df:a9ed:72a2 with SMTP id ada2fe7eead31-5e8276cf6e3mr351509137.19.1765539430200; Fri, 12 Dec 2025 03:37:10 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> <87a4zo6kaq.fsf@HIDDEN> In-Reply-To: <87a4zo6kaq.fsf@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Fri, 12 Dec 2025 06:36:58 -0500 X-Gm-Features: AQt7F2r1MqOs5CWd1_R7h2G1LEdo958Lu8QNhVKvLOb42kOLw7e7j_s3nWKk0PI Message-ID: <CAN+1Hbq8bF6Fz-on6WS8QsKxnN4RxLAgVcWRc9ZNs2fO4V22hQ@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Augusto Stoffel <arstoffel@HIDDEN> Content-Type: multipart/alternative; boundary="00000000000092f8f00645bfaeb8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Spencer Baugh <sbaugh@HIDDEN>, Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --00000000000092f8f00645bfaeb8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 12, 2025 at 5:55=E2=80=AFAM Augusto Stoffel <arstoffel@HIDDEN= m> wrote: > On Thu, 11 Dec 2025 at 16:07, St=C3=A9phane Marks <shipmints@HIDDEN> w= rote: > > > I put the vtable-set-buffer function back in because I recalled that > > Augusto's comint-mime implementation uses a multi-buffer approach to > > get a vtable into a comint buffer. It first inserts into a temp > > buffer and then blasts the buffer-string into the comint buffer and it > > expects to be able to manipulate that vtable in that comint buffer > > despite its foreign origin. comint-mime would invoke this to reset > > the buffer (yes, this is not backward compatible for his use case but > > he's the only one I've found and I'm aware of and it's been brought > > up). > > I implemented it that way because it "just worked", but it seems > perfectly reasonable to declare that a vtable is tied to a buffer, > period. I recommend picking the approach that simplifies the > implementation and future uses of vtable. comint-mime can be changed > (in fact, it has to be changed anyway). > > While I'm not fully into the loop regarding this discussion, it seems to > me that the vtable's buffer should not part of the public interface and > the ability to move a vtable between buffers should not be a supported > feature. > I don't mind the safety hatch, though. Other people might do something clever like you did with the HTML renderer. I wrote a mild admonishment in the docstring. --00000000000092f8f00645bfaeb8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Fri, Dec 12, 2025 at 5:55=E2=80=AFAM Augusto Stoffel <<a href=3D"mail= to:arstoffel@HIDDEN">arstoffel@HIDDEN</a>> wrote:</span></div></di= v><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gma= il_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,2= 04,204);padding-left:1ex">On Thu, 11 Dec 2025 at 16:07, St=C3=A9phane Marks= <<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@gma= il.com</a>> wrote:<br> <br> > I put the vtable-set-buffer function back in because I recalled that<b= r> > Augusto's comint-mime implementation uses a multi-buffer approach = to<br> > get a vtable into a comint buffer.=C2=A0 It first inserts into a temp<= br> > buffer and then blasts the buffer-string into the comint buffer and it= <br> > expects to be able to manipulate that vtable in that comint buffer<br> > despite its foreign origin.=C2=A0 comint-mime would invoke this to res= et<br> > the buffer (yes, this is not backward compatible for his use case but<= br> > he's the only one I've found and I'm aware of and it's= been brought<br> > up).<br> <br> I implemented it that way because it "just worked", but it seems<= br> perfectly reasonable to declare that a vtable is tied to a buffer,<br> period.=C2=A0 I recommend picking the approach that simplifies the<br> implementation and future uses of vtable.=C2=A0 comint-mime can be changed<= br> (in fact, it has to be changed anyway).<br> <br> While I'm not fully into the loop regarding this discussion, it seems t= o<br> me that the vtable's buffer should not part of the public interface and= <br> the ability to move a vtable between buffers should not be a supported<br> feature.<br></blockquote><div><br></div><div class=3D"gmail_default" style= =3D"font-family:monospace">I don't mind the safety hatch, though.=C2=A0= Other people might do something clever like you did with the HTML renderer= .=C2=A0 I wrote a mild admonishment in the docstring.</div></div></div> --00000000000092f8f00645bfaeb8--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 12 Dec 2025 10:56:08 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 12 05:56:08 2025 Received: from localhost ([127.0.0.1]:55111 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vU0oi-0006GF-6W for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 05:56:08 -0500 Received: from mail-ed1-x52b.google.com ([2a00:1450:4864:20::52b]:56677) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>) id 1vU0of-0006Ff-K3 for 79982 <at> debbugs.gnu.org; Fri, 12 Dec 2025 05:56:06 -0500 Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-6496c4ed38aso1538602a12.1 for <79982 <at> debbugs.gnu.org>; Fri, 12 Dec 2025 02:56:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765536959; x=1766141759; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:from:to:cc:subject:date:message-id :reply-to; bh=n/jNcn5NErdu5lkvu6kJNcF468yqF8/R0XCfQrEDfm0=; b=ToM9HLxHu3JsZqAgQ1a0dBi5tifYZmdgn3eIkXqlYW7kCrOSjdyni6xWUxoaN3aj9n TQdprMqT2iuxdIY4SCS/o553EZ+rU9gm2fkcaL2idGPCp4kjGG5ry74YRvnooiZkrCHv MI7YS7mNKKTnaiAV7B4INQ84GPjiuFXLfEGQ+qIlyqVI1c3P+vT70Jzv46YIbXqmXjZM D5wvIUGYUcHFx+6fowFsLnxK1YpVxKZz/sL7yolJLReltabMpt9vGyqHgi8OMvbdnR9D bcba/wWXscqowLFCXuJnjxG4CF8GbqB5tHYhcrNHpbRtFS+TV6oQxQmclnXXiWyzxsiE Fn0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765536959; x=1766141759; h=content-transfer-encoding:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=n/jNcn5NErdu5lkvu6kJNcF468yqF8/R0XCfQrEDfm0=; b=fql24DUUeLBSLFzGG853qSb7QDdm8yIKpp4ckd0PFulmgK3+FOCAfcqlPVuKExJYiS gubky8J5X8kO4D6DGqiXtEOzAflmIUB2xNEQyoR5l8ZLoZWl86PZUXKPjmNj/gLD9J1+ pZUI+qHCl+1O8q9E2yLEiNCWAv0iY/8yYDQ3angExyORRgQ3EVye80hOv5Jazwqx9vs5 FsDZYLkQXCbrqTSWi12UBEYe/9ig8WPFq1005DycwLlWyN4vUhUMjOGh7BwlhllHMv9l 5xRc2Xx4/COFTJOubE9aZTmholu28Ge+ZTWdSI/KwOy/faZw3qsrQdCIbuVs2U6D9H5O jj3Q== X-Forwarded-Encrypted: i=1; AJvYcCUrSb1M0q4I1lWdkoBnttTUoygjtXdU0ghYD8FST0tA3sCM3sq8xIU4lflwTegAz0gmPHkyMQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YziGVSXbkX+GMYHL4y1XiANn4wKhYLu9pbIE2ZmPnZDLSOSMssK L2Mz8Fpx2NJmn7IQCEg2hYrwR2/8efAqwHozkLN3BLao0j1O6XtWzDT5 X-Gm-Gg: AY/fxX5xUsCfoRvDX+XIF3jGbGDuejbzFiS8gBrJEPgoLnJsFGrs8gCib3wI2pPs8c4 rjXTV7FIRA1GKbo85ivwTHnbgb9TcrKAoN/bcf6sBxXlV7Qx2BFii45/IHfHRtzMFYpXng0E8RR l4GRPYx8MFTMkwoarTwionUHtzdlZwXZm3Tw8k3b8hVUFFzGOdUWR3Zp8ekyWnIz9VyeAA2jQzv 9NMMeXe9BljGUoDsG9+JU/QKOSnRyTY/RVNaz+1XL72GIuAPlq84W2kYh1VXzDnyQFbTS9r+fp0 Ay7LJUyWqJEmJGXz//iHXR8Bh+Ncb7Xx4Iyd0DQXlEMUeb3RcfwrS0iNIdOUE6DUwNoq8D7peJP f5IOZLgdHdZPHslWCw4zznfvSjyyJGSi3ARTo40JNf2Eow4LyNbkhTcU3/iZ/O+4= X-Google-Smtp-Source: AGHT+IELRjY9IYjKVRwCsWQ5Lk8R9P5tb9Kq1Ryynf0SYSD+xhteGkau5jK1jI+vNfvVHImHFkMlVw== X-Received: by 2002:a17:907:2d2b:b0:b76:ece3:510a with SMTP id a640c23a62f3a-b7d23776e1fmr173614666b.21.1765536958513; Fri, 12 Dec 2025 02:55:58 -0800 (PST) Received: from ars3 ([2a02:8109:8a95:9a00::17a2]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b7cfa51701csm531058566b.39.2025.12.12.02.55.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Dec 2025 02:55:57 -0800 (PST) From: Augusto Stoffel <arstoffel@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot In-Reply-To: <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> Date: Fri, 12 Dec 2025 11:55:57 +0100 Message-ID: <87a4zo6kaq.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Spencer Baugh <sbaugh@HIDDEN>, Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On Thu, 11 Dec 2025 at 16:07, St=C3=A9phane Marks <shipmints@HIDDEN> wro= te: > I put the vtable-set-buffer function back in because I recalled that > Augusto's comint-mime implementation uses a multi-buffer approach to > get a vtable into a comint buffer. It first inserts into a temp > buffer and then blasts the buffer-string into the comint buffer and it > expects to be able to manipulate that vtable in that comint buffer > despite its foreign origin. comint-mime would invoke this to reset > the buffer (yes, this is not backward compatible for his use case but > he's the only one I've found and I'm aware of and it's been brought > up). I implemented it that way because it "just worked", but it seems perfectly reasonable to declare that a vtable is tied to a buffer, period. I recommend picking the approach that simplifies the implementation and future uses of vtable. comint-mime can be changed (in fact, it has to be changed anyway). While I'm not fully into the loop regarding this discussion, it seems to me that the vtable's buffer should not part of the public interface and the ability to move a vtable between buffers should not be a supported feature.
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 11 Dec 2025 21:07:44 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 11 16:07:44 2025 Received: from localhost ([127.0.0.1]:48468 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vTnt1-0003AY-R5 for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 16:07:44 -0500 Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]:52529) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vTnsz-0003AI-RF for 79982 <at> debbugs.gnu.org; Thu, 11 Dec 2025 16:07:42 -0500 Received: by mail-vk1-xa2c.google.com with SMTP id 71dfb90a1353d-55cb8cabb4bso190622e0c.1 for <79982 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 13:07:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765487256; x=1766092056; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=zuw++VRMv53mQuM4gQRDKPhOPq/d3AEbbVvsPdGCYyc=; b=eXu0wgvWdqYHp+HF/nI8bJhvK4rbk1l3wInisdjWiM/+aepBbpo0CmKhi1GChkKjlp Bt9U+cx6SkZyROWvU0NvviWY4cn+KNG6Qng9St5Q0z/HybBp6eC5YNvX7r6MXmeqibYm kfnBK6ee2rzah3HqYad64kJub5yWq+iOTC7P4NG/gwTE+FFX2Tm2qaqKLvJoxyeuSB8v mAUUL7kdm0FFVjPR9IhwrYegpiVbdv5p5jXKAzuHlOPgxKnB/9r3Nju7iAsH8l6V51ny g8dBO9y64JTcCsHXRN4/DCwHFE2vUCCPxwPO4576Y8a7DC1oaERCCL2He/khGYvWFsYV vf1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765487256; x=1766092056; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=zuw++VRMv53mQuM4gQRDKPhOPq/d3AEbbVvsPdGCYyc=; b=K5QcclcP+eY12v2AcAwhJqW/DJ88zwKy2zBTynz3sMz9KLF8E5TEaSXnxDyVvmIdOR gc2qu6KuaedgfP4Sw/kMBcGrZFzBPFujwJhiv6DQZgnQRoKlzPW0UISCtaWIAMFbQy+E pyQ+BE3PzO0pWp3DM+LSsSgkLZov7EeJqXwMs08iMOqlgk+4KNyCJF6baq6gMwPrZhik XLZO6SH1oRfd0b+ghH3WeCxyAN5ZZBi15KLgWQb2ubMQMl0UEKzBMo8GwWA/bFwuokMH DjYc6toFYB+2rVTmLmgBLOdr3ObR+/ICodAwLGJWLMgs7OJMTZV2OkgpiKZm/7jDYbNP 2ILg== X-Forwarded-Encrypted: i=1; AJvYcCWGeGjI8mDxIIreX7qQY4mxWnDW+kRiDXJqV8cW8s3nKqdC3ntdAFAkWHprI7XuXeFtTwzv6g==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yyap6vt9UsIxBtVVzlBp69ZKZUk5D+JCpyml95ot9YfpPJZ3wqW ZM25ZCnihG8WQOIi97EuZLCSkUvaAtxAcnbNx+N5KvKV6H32w7pJaGugcdNHu2Sek6aQetDLg30 x/69CENAu1KkwwMo4Hn3MOETI0Tqa2Eg= X-Gm-Gg: AY/fxX6Jr5/IQU00SOzD2N82NCzjhhpBLT7rC6lv9SuywAQR6ehoCNEPkCcC1kiR6xB K5WkX2woNC6jxt0xHMwww3xKqkro4DDC4nTsguN/cF4d+CAdwNJ4sIfdy1VGSoFPt69dQHwWvya fa38GMQydLtjb4TnddoVmm6mbWl7Zq4QMTqv9UGICtWlfMQGVNwb2DnyvPc/iY8GXXXo7q/eG8M S2AsRohk2r2OHgnnqTlqFepZNGsYTSgiDkY//SXv3LDdmJVMrD7j1xo17PmqQAWoeFBdCE= X-Google-Smtp-Source: AGHT+IH3xPZ6Jc0lDbuSdF7wL4jSc5rXIonIR8fSxYOn9XHWxWDVcLSwDanb9z7KWc7D4J9zlARKtqEQuTMIVVWrOew= X-Received: by 2002:a05:6102:6442:b0:5db:e721:8624 with SMTP id ada2fe7eead31-5e5716f0612mr2654754137.1.1765487255756; Thu, 11 Dec 2025 13:07:35 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> <ier8qf8ssxp.fsf_-_@HIDDEN> In-Reply-To: <ier8qf8ssxp.fsf_-_@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Thu, 11 Dec 2025 16:07:24 -0500 X-Gm-Features: AQt7F2pIlxQ8d7yMWkNHm71pDppIx-q0ZZuE1HPw3d-VtCz1l4iXMe4dwRyVntI Message-ID: <CAN+1HbrtXJKodGRsGkRvH2dpx4spUjzSc7xN22jd_zeTiqcYcg@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/mixed; boundary="000000000000bc39a50645b38899" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000bc39a50645b38899 Content-Type: multipart/alternative; boundary="000000000000bc39a30645b38897" --000000000000bc39a30645b38897 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Dec 11, 2025 at 2:46=E2=80=AFPM Spencer Baugh <sbaugh@HIDDEN= m> wrote: > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > > On Thu, Dec 11, 2025 at 1:23=E2=80=AFPM Spencer Baugh <sbaugh@janestree= t.com> > wrote: > > Can we move these let-bindings out to the outer let-binding now? > > > > I'd prefer if they stay close to where they're being used, at least > here, where the cache update is clearly separate from the buffer > > update. > > Good point. Actually, so these bindings actually probably should be in > the same let-binding as (let ((start (point))) ...), a few lines later. > Since they're only used in that part of the code. > Sure. > > + (keymap (get-text-property (point) 'keymap))) > > > > I guess we could get this from vtable-keymap now? In which case it ca= n > > also move to the outer let-binding? > > > > It would have to be from the -cached-keymap slot. Let's leave the > keymaps as is for the time being. We have patches to refine > > and expand their functionality coming. > > That's fair, but I think if we move these let-bindings down to the (let > ((start (point)))) binding, that avoids reindenting the rest of this > function. Which makes this diff much smaller, which is nice. > I put the vtable-set-buffer function back in because I recalled that Augusto's comint-mime implementation uses a multi-buffer approach to get a vtable into a comint buffer. It first inserts into a temp buffer and then blasts the buffer-string into the comint buffer and it expects to be able to manipulate that vtable in that comint buffer despite its foreign origin. comint-mime would invoke this to reset the buffer (yes, this is not backward compatible for his use case but he's the only one I've found and I'm aware of and it's been brought up). > > +(defun vtable-insert (table) > > + "Insert TABLE into the current buffer. > > +The current buffer will be recorded as TABLE's buffer. If the table i= s > > +inserted into a buffer other than its originating buffer, signal an > > +error. A table may be reinserted into its own buffer, but insert only > > +one instance per buffer. This restriction needs to be enforced by the > > +caller." > > + (and-let* ((table-buffer (vtable-buffer table)) > > + (not (eq table-buffer (current-buffer)))) > > + (error "A vtable cannot be inserted into more than one buffer")) > > + (setf (vtable-buffer table) (current-buffer)) > > + (let ((inhibit-read-only t) > > + (inhibit-modification-hooks t)) > > Hm, why do we need these inhibit-read-only and > inhibit-modification-hooks? Those are new, right? They make sense, > though. Could we cover it with a test? > Test added, at least for the read-only case. Mod hooks are a performance issue and we could have a pedantic test for that but it's fussy for me at the moment. I also went ahead and put inhibit-modification-hooks in the other places it needs to be (those were in my mega patch). > -(defun vtable-revert-command () > > +(defun vtable-revert-command (&optional table) > > "Re-query data and regenerate the table under point." > > This docstring should mention TABLE. Yep. Patch attached. -St=C3=A9phane --000000000000bc39a30645b38897 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Thu, Dec 11, 2025 at 2:46=E2=80=AFPM Spencer Baugh <<a href=3D"mailto= :sbaugh@HIDDEN">sbaugh@HIDDEN</a>> wrote:</span></div></= div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"g= mail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204= ,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:shipm= ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> <br> > On Thu, Dec 11, 2025 at 1:23=E2=80=AFPM Spencer Baugh <<a href=3D"m= ailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN</a>>= ; wrote:<br> >=C2=A0 Can we move these let-bindings out to the outer let-binding now?= <br> ><br> > I'd prefer if they stay close to where they're being used, at = least here, where the cache update is clearly separate from the buffer<br> > update.<br> <br> Good point.=C2=A0 Actually, so these bindings actually probably should be i= n<br> the same let-binding as (let ((start (point))) ...), a few lines later.<br> Since they're only used in that part of the code.<br></blockquote><div>= <br></div><div class=3D"gmail_default" style=3D"font-family:monospace">Sure= .</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br></d= iv><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bord= er-left:1px solid rgb(204,204,204);padding-left:1ex"> >=C2=A0 > + (keymap (get-text-property (point) 'keymap)))<br> ><br> >=C2=A0 I guess we could get this from vtable-keymap now?=C2=A0 In which= case it can<br> >=C2=A0 also move to the outer let-binding?<br> ><br> > It would have to be from the -cached-keymap slot.=C2=A0 Let's leav= e the keymaps as is for the time being.=C2=A0 We have patches to refine<br> > and expand their functionality coming.<br> <br> That's fair, but I think if we move these let-bindings down to the (let= <br> ((start (point)))) binding, that avoids reindenting the rest of this<br> function.=C2=A0 Which makes this diff much smaller, which is nice.<br></blo= ckquote><div><br></div><div><div class=3D"gmail_default" style=3D"font-fami= ly:monospace">I put the vtable-set-buffer function back in because I recall= ed that=C2=A0Augusto's comint-mime implementation uses a multi-buffer a= pproach to get a vtable into a comint buffer.=C2=A0 It first inserts into a= temp buffer and then blasts the buffer-string into the comint buffer and i= t expects to be able to manipulate that vtable in that comint buffer despit= e its foreign origin.=C2=A0 comint-mime would=C2=A0invoke this to reset the= buffer (yes, this is not backward compatible for his use case but he's= the only one I've found and I'm aware of and it's been brought= up).</div></div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style= =3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding= -left:1ex">> +(defun vtable-insert (table)<br> > +=C2=A0 "Insert TABLE into the current buffer.<br> > +The current buffer will be recorded as TABLE's buffer.=C2=A0 If t= he table is<br> > +inserted into a buffer other than its originating buffer, signal an<b= r> > +error.=C2=A0 A table may be reinserted into its own buffer, but inser= t only<br> > +one instance per buffer.=C2=A0 This restriction needs to be enforced = by the<br> > +caller."<br> > +=C2=A0 (and-let* ((table-buffer (vtable-buffer table))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(not (eq table-buffer= (current-buffer))))<br> > +=C2=A0 =C2=A0 (error "A vtable cannot be inserted into more than= one buffer"))<br> > +=C2=A0 (setf (vtable-buffer table) (current-buffer))<br> > +=C2=A0 (let ((inhibit-read-only t)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (inhibit-modification-hooks t))<br> <br> Hm, why do we need these inhibit-read-only and<br> inhibit-modification-hooks?=C2=A0 Those are new, right?=C2=A0 They make sen= se,<br> though.=C2=A0 Could we cover it with a test?<br></blockquote><div><br></div= ><div><div class=3D"gmail_default" style=3D"font-family:monospace">Test add= ed,=C2=A0at least for the read-only case.=C2=A0 Mod hooks are a performance= issue and we could have a pedantic test for that but it's fussy for me= at the moment.</div><div class=3D"gmail_default" style=3D"font-family:mono= space"><br></div><div class=3D"gmail_default" style=3D"font-family:monospac= e">I also went ahead and put inhibit-modification-hooks in the other places= it needs to be (those were in my mega patch).</div></div><div class=3D"gma= il_default" style=3D"font-family:monospace"><br></div><blockquote class=3D"= gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20= 4,204,204);padding-left:1ex"> > -(defun vtable-revert-command ()<br> > +(defun vtable-revert-command (&optional table)<br> >=C2=A0 =C2=A0 "Re-query data and regenerate the table under point.= "<br> <br> This docstring should mention TABLE<span class=3D"gmail_default" style=3D"f= ont-family:monospace">.</span></blockquote><div><br></div><div class=3D"gma= il_default" style=3D"font-family:monospace">Yep.</div><div class=3D"gmail_d= efault" style=3D"font-family:monospace"><br></div><div class=3D"gmail_defau= lt" style=3D"font-family:monospace">Patch attached.</div><div class=3D"gmai= l_default" style=3D"font-family:monospace"><br></div><div class=3D"gmail_de= fault" style=3D"font-family:monospace">-St=C3=A9phane=C2=A0</div></div></di= v> --000000000000bc39a30645b38897-- --000000000000bc39a50645b38899 Content-Type: application/octet-stream; name="0001-Add-vtable-buffer-slot.patch" Content-Disposition: attachment; filename="0001-Add-vtable-buffer-slot.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mj1xiq820> X-Attachment-Id: f_mj1xiq820 RnJvbSAwNzZhZDYwMGViYmU4ZjA2M2Y4ZmYyMTdkNWQ0NDkxOTNkOTAwZGU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTAgRGVjIDIwMjUgMDk6MjA6MDIgLTA1MDAK U3ViamVjdDogW1BBVENIXSBBZGQgdnRhYmxlIGJ1ZmZlciBzbG90CgpUaGlzIHNvbHZlcyBmb3Ig YmFja2dyb3VuZCB2dGFibGUgbXV0YXRpb25zLCBpLmUuLCB1cGRhdGVzCmluaXRpYXRlZCBmcm9t IGJ1ZmZlcnMgb3RoZXIgdGhhbiB0aGUgdnRhYmxlIGJ1ZmZlciwgYW5kIGZvcgpidWZmZXItYWRq dXN0ZWQgc3RyaW5nLXBpeGVsLXdpZHRoIGNvbXB1dGF0aW9ucy4KCiogbGlzcC9lbWFjcy1saXNw L3Z0YWJsZS5lbCAodnRhYmxlKTogTmV3ICctYnVmZmVyJyBzbG90LgoodnRhYmxlLWJ1ZmZlcik6 Cih2dGFibGUtc2V0LWJ1ZmZlcik6IE5ldyBmdW5jdGlvbi4KKHZ0YWJsZS11cGRhdGUtb2JqZWN0 KToKKHZ0YWJsZS1yZW1vdmUtb2JqZWN0KToKKHZ0YWJsZS1pbnNlcnQtb2JqZWN0KTogV3JhcCBv cGVyYXRpb24gd2l0aCB0aGUgdnRhYmxlIGJ1ZmZlci4KKHZ0YWJsZS0taW5zZXJ0KTogU3BsaXQg ZnJvbSBvbGQgJ3Z0YWJsZS1pbnNlcnQnLgoodnRhYmxlLWluc2VydCk6IEluc2VydCB0YWJsZSBh bmQgcmVjb3JkIHRoZSBidWZmZXIuCih2dGFibGUtLWluc2VydC1saW5lKToKKHZ0YWJsZS0taW5z ZXJ0LWhlYWRlci1saW5lKTogVXNlICd2dGFibGUtYnVmZmVyJyBmb3IgcGl4ZWwtd2lkdGggY29t cHV0YXRpb24uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6Cih2dGFibGUtLWNoYXItd2lkdGgpOiBQ YXNzIGJ1ZmZlciB0byAnc3RyaW5nLXBpeGVsLXdpZHRoJy4KKHZ0YWJsZS1yZXZlcnQpOiBOZXcg b3B0aW9uYWwgdGFibGUgYXJndW1lbnQuCih2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCk6Cih2 dGFibGUtcmV2ZXJ0LWNvbW1hbmQpOgoodnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4pOiBD YWxsICd2dGFibGUtcmV2ZXJ0JyB3aXRoIHRoZSB0YWJsZS4KCiogdGVzdC9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLXRlc3RzLmVsCih2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0 LXRhYmxlKTogTmV3IGhlbHBlcgpmdW5jdGlvbi4KKHRlc3QtdnN0YWJsZS1jb21wdXRlLWNvbHVt bnMpOiBDb3JyZWN0IHR5cG8gaW4gdGVzdCBuYW1lLiAgVXNlCm5ldyBoZWxwZXIgZnVuY3Rpb24u Cih0ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyKQoodGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVm ZmVyLWluc2VydC1vYmplY3QpCih0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3Zl LW9iamVjdCkKKHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUtb2JqZWN0KQoo dGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRoLWZhY2UtcmVtYXBwZWQtYnVmZmVyKTogTmV3 IHRlc3QuCi0tLQogbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCAgICAgICAgICAgIHwgMjg5ICsr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRl c3RzLmVsIHwgIDg0ICsrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDI0MCBpbnNlcnRpb25zKCsp LCAxMzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5l bCBiL2xpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwKaW5kZXggYmNkZDI4MGZiOTIuLjgxMTUxMjNk NjAxIDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVsCisrKyBiL2xpc3AvZW1h Y3MtbGlzcC92dGFibGUuZWwKQEAgLTY3LDggKzY3LDEwIEBAIHZ0YWJsZQogICAgKGVsbGlwc2lz IDppbml0YXJnIDplbGxpcHNpcyA6YWNjZXNzb3IgdnRhYmxlLWVsbGlwc2lzKQogICAgKGNvbHVt bi1jb2xvcnMgOmluaXRhcmcgOmNvbHVtbi1jb2xvcnMgOmFjY2Vzc29yIHZ0YWJsZS1jb2x1bW4t Y29sb3JzKQogICAgKHJvdy1jb2xvcnMgOmluaXRhcmcgOnJvdy1jb2xvcnMgOmFjY2Vzc29yIHZ0 YWJsZS1yb3ctY29sb3JzKQorICAgKGJ1ZmZlciA6aW5pdGZvcm0gbmlsIDphY2Nlc3NvciB2dGFi bGUtYnVmZmVyKQogICAgKC1jYWNoZWQtY29sb3JzIDppbml0Zm9ybSBuaWwpCiAgICAoLWNhY2hl IDppbml0Zm9ybSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXF1YWwpKQorICAgKC1jdXJyZW50 LWNhY2hlIDppbml0Zm9ybSBuaWwgOmFjY2Vzc29yIHZ0YWJsZS0tY3VycmVudC1jYWNoZSkKICAg ICgtY2FjaGVkLWtleW1hcCA6aW5pdGZvcm0gbmlsKQogICAgKC1oYXMtY29sdW1uLXNwZWMgOmlu aXRmb3JtIG5pbCkpCiAgICJBbiBvYmplY3QgdG8gaG9sZCB0aGUgZGF0YSBmb3IgYSB0YWJsZS4i KQpAQCAtMjg4LDcgKzI5MCw4IEBAIHZ0YWJsZS11cGRhdGUtb2JqZWN0CiAgICh1bmxlc3Mgb2xk LW9iamVjdAogICAgIChzZXRxIG9sZC1vYmplY3Qgb2JqZWN0KSkKICAgKGxldCogKChvYmplY3Rz ICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpCi0gICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkp CisgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkKKyAgICAgICAgIChpbmhpYml0LW1vZGlm aWNhdGlvbi1ob29rcyB0KSkKICAgICA7OyBGaXJzdCByZXBsYWNlIHRoZSBvYmplY3QgaW4gdGhl IG9iamVjdCBzdG9yYWdlLgogICAgIChpZiAoZXEgb2xkLW9iamVjdCAoY2FyIG9iamVjdHMpKQog ICAgICAgICA7OyBJdCdzIGF0IHRoZSBoZWFkLCBzbyByZXBsYWNlIGl0IHRoZXJlLgpAQCAtMzAx LDE0ICszMDQsMTQgQEAgdnRhYmxlLXVwZGF0ZS1vYmplY3QKICAgICAgICh1bmxlc3MgKGNkciBv YmplY3RzKQogICAgICAgICAoZXJyb3IgIkNhbid0IGZpbmQgdGhlIG9sZCBvYmplY3QiKSkKICAg ICAgIChzZXRjYXIgKGNkciBvYmplY3RzKSBvYmplY3QpKQotICAgIDs7IFRoZW4gdXBkYXRlIHRo ZSByZW5kZXJlZCB2dGFibGUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotICAgIChpZi1sZXQqICgo Y2FjaGUgKHZ0YWJsZS0tY3VycmVudC1jYWNoZSkpCi0gICAgICAgICAgICAgKGxpbmUtbnVtYmVy IChzZXEtcG9zaXRpb24gKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkLW9iamVjdAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGEgYikKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChlcXVhbCAoY2FyIGEpIGIpKSkpCi0gICAgICAgICAgICAg KGxpbmUgKGVsdCAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkgbGluZS1udW1iZXIpKSkKLSAg ICAgICAgKHByb2duCisgICAgOzsgVGhlbiB1cGRhdGUgdGhlIHJlbmRlcmVkIHZ0YWJsZSBpbiBp dHMgYnVmZmVyLgorICAgIChpZi1sZXQqICgoY2FjaGUgKHZ0YWJsZS0tY3VycmVudC1jYWNoZSB0 YWJsZSkpCisgICAgICAgICAgICAgIChsaW5lLW51bWJlciAoc2VxLXBvc2l0aW9uICh2dGFibGUt LWNhY2hlLWxpbmVzIGNhY2hlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvbGQtb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsYW1iZGEgKGEgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZXF1YWwgKGNhciBhKSBiKSkpKQorICAgICAgICAgICAgICAobGluZSAoZWx0ICh2dGFibGUt LWNhY2hlLWxpbmVzIGNhY2hlKSBsaW5lLW51bWJlcikpKQorICAgICAgICAod2l0aC1jdXJyZW50 LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKICAgICAgICAgICAoc2V0Y2FyIGxpbmUgb2Jq ZWN0KQogICAgICAgICAgIChzZXRjZHIgbGluZSAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5l IHRhYmxlIG9iamVjdCkpCiAgICAgICAgICAgOzsgLi4uIGFuZCByZWRpc3BsYXkgdGhlIGxpbmUg aW4gcXVlc3Rpb24uCkBAIC0zMjEsOCArMzI0LDcgQEAgdnRhYmxlLXVwZGF0ZS1vYmplY3QKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtd2lkdGhzIGNh Y2hlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1zcGFjZXIg dGFibGUpKQogICAgICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQp IChsaXN0ICdrZXltYXAga2V5bWFwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUtY2FjaGUgY2FjaGUpKSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J3Z0YWJsZSB0YWJsZSkpKSkKICAgICAgICAgICA7OyBXZSBtYXkgaGF2ZSBpbnNlcnRlZCBhIG5v bi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkKICAgICAgICAgICA7OyBhbGwtbnVt ZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCiAgICAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRl LW51bWVyaWNhbCB0YWJsZSAoY2RyIGxpbmUpKSkKQEAgLTMzNCwxNCArMzM2LDE2IEBAIHZ0YWJs ZS1yZW1vdmUtb2JqZWN0CiAgIDs7IEZpcnN0IHJlbW92ZSBmcm9tIHRoZSBvYmplY3RzLgogICAo c2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChkZWxxIG9iamVjdCAodnRhYmxlLW9iamVjdHMg dGFibGUpKSkKICAgOzsgVGhlbiBhZGp1c3QgdGhlIGNhY2hlIGFuZCBkaXNwbGF5LgotICAoc2F2 ZS1leGN1cnNpb24KLSAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAgKGxldCAoKGNh Y2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAgIChpbmhpYml0LXJlYWQtb25s eSB0KSkKLSAgICAgIChzZXRjYXIgY2FjaGUgKGRlbHEgKGFzc3Egb2JqZWN0ICh2dGFibGUtLWNh Y2hlLWxpbmVzIGNhY2hlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2Fj aGUtbGluZXMgY2FjaGUpKSkKLSAgICAgICh3aGVuICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0 KQotICAgICAgICAoZGVsZXRlLWxpbmUpKSkpKQorICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodnRh YmxlLWJ1ZmZlciB0YWJsZSkKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICh2dGFibGUtZ290 by10YWJsZSB0YWJsZSkKKyAgICAgIChsZXQgKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hl IHRhYmxlKSkKKyAgICAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KQorICAgICAgICAgICAg KGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpKQorICAgICAgICAoc2V0Y2FyIGNhY2hlIChk ZWxxIChhc3NxIG9iamVjdCAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpKSkKKyAgICAgICAg KHdoZW4gKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpCisgICAgICAgICAgKGRlbGV0ZS1saW5l KSkpKSkpCiAKIDs7IEZJWE1FOiBUaGUgZmFjdCB0aGF0IHRoZSBgbG9jYXRpb24nIGFyZ3VtZW50 IG9mCiA7OyBgdnRhYmxlLWluc2VydC1vYmplY3QnIGNhbiBiZSBhbiBpbnRlZ2VyIGFuZCBpcyB0 aGVuIGludGVycHJldGVkIGFzCkBAIC0zNjksOCArMzczLDkgQEAgdnRhYmxlLWluc2VydC1vYmpl Y3QKICAgICAgIChwcm9nbgogICAgICAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChs aXN0IG9iamVjdCkpCiAgICAgICAgICh2dGFibGUtLXJlY29tcHV0ZS1udW1lcmljYWwgdGFibGUg KHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKQotICAgICAgICAodnRh YmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAgICAgICh2dGFibGUtcmV2ZXJ0LWNvbW1hbmQpKQor ICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKKyAgICAg ICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCisgICAgICAgICAgKHZ0YWJsZS1yZXZlcnQt Y29tbWFuZCkpKQogICAgIDs7IEZpcnN0IGluc2VydCBpbnRvIHRoZSBvYmplY3RzLgogICAgIChs ZXQgKChwb3MgKGlmIGxvY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgKGlmIChpbnRlZ2VycCBs b2NhdGlvbikKQEAgLTM5OCw1NiArNDAzLDU4IEBAIHZ0YWJsZS1pbnNlcnQtb2JqZWN0CiAgICAg ICAgICAgOzsgT3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KICAgICAgICAgICAobmNvbmMg KHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAobGlzdCBvYmplY3QpKSkpKQogICAgIDs7IFRoZW4gYWRq dXN0IHRoZSBjYWNoZSBhbmQgZGlzcGxheS4KLSAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICh2 dGFibGUtZ290by10YWJsZSB0YWJsZSkKLSAgICAgIChsZXQqICgoY2FjaGUgKHZ0YWJsZS0tY3Vy cmVudC1jYWNoZSkpCi0gICAgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCi0gICAgICAg ICAgICAgKGtleW1hcCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAna2V5bWFwKSkKLSAgICAg ICAgICAgICAoZWxsaXBzaXMgKGlmICh2dGFibGUtZWxsaXBzaXMgdGFibGUpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgKHZ0YWJsZS1mYWNl IHRhYmxlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIikpCi0gICAgICAgICAgICAgKGVs bGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxsaXBzaXMpKQotICAgICAgICAgICAg IChsaW5lcyAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpCi0gICAgICAgICAgICAgKGVsZW0g KGlmIGxvY2F0aW9uICA7IFRoaXMgYmluZGluZyBtaXJyb3JzIHRoZSBiaW5kaW5nIG9mIGBwb3Mn IGFib3ZlLgotICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGludGVnZXJwIGxvY2F0aW9uKQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG50aCBsb2NhdGlvbiBsaW5lcykKLSAgICAgICAg ICAgICAgICAgICAgICAgICAob3IgKGFzc3EgbG9jYXRpb24gbGluZXMpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChhbmQgYmVmb3JlIChjYXIgbGluZXMpKSkpCi0gICAgICAgICAgICAg ICAgICAgICAoaWYgYmVmb3JlIChjYXIgbGluZXMpKSkpCi0gICAgICAgICAgICAgKHBvcyAobWVt cSBlbGVtIGxpbmVzKSkKLSAgICAgICAgICAgICAobGluZSAoY29ucyBvYmplY3QgKHZ0YWJsZS0t Y29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKSkpCi0gICAgICAgIChpZiAob3IgYmVm b3JlCi0gICAgICAgICAgICAgICAgKGFuZCBwb3MgKGludGVnZXJwIGxvY2F0aW9uKSkpCi0gICAg ICAgICAgICA7OyBBZGQgdGhlIG5ldyBvYmplY3QgYmVmb3JlOi4KLSAgICAgICAgICAgIChsZXQg KChvbGQtbGluZSAoY2FyIHBvcykpKQotICAgICAgICAgICAgICAoc2V0Y2FyIHBvcyBsaW5lKQot ICAgICAgICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBvbGQtbGluZSAoY2RyIHBvcykpKQotICAg ICAgICAgICAgICAodW5sZXNzICh2dGFibGUtZ290by1vYmplY3QgKGNhciBlbGVtKSkKLSAgICAg ICAgICAgICAgICAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJsZSkpKQotICAgICAgICAgIDs7IE90 aGVyd2lzZSwgYWRkIHRoZSBvYmplY3QgYWZ0ZXIuCi0gICAgICAgICAgKGlmIHBvcwotICAgICAg ICAgICAgICA7OyBTcGxpY2UgdGhlIG9iamVjdCBpbnRvIHRoZSBsaXN0LgotICAgICAgICAgICAg ICAocHJvZ24KLSAgICAgICAgICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBsaW5lIChjZHIgcG9z KSkpCi0gICAgICAgICAgICAgICAgKGlmICh2dGFibGUtZ290by1vYmplY3QgbG9jYXRpb24pCi0g ICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkgIDsgSW5zZXJ0ICphZnRlciouCi0g ICAgICAgICAgICAgICAgICAodnRhYmxlLWVuZC1vZi10YWJsZSkpKQotICAgICAgICAgICAgOzsg T3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KLSAgICAgICAgICAgIChzZXRjYXIgY2FjaGUg KG5jb25jIGxpbmVzIChsaXN0IGxpbmUpKSkKLSAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRh YmxlKSkpCi0gICAgICAgIChsZXQgKChzdGFydCAocG9pbnQpKSkKLSAgICAgICAgICA7OyBGSVhN RTogV2UgaGF2ZSB0byBhZGp1c3QgY29sb3JzIGluIGxpbmVzIGJlbG93IHRoaXMgaWYgd2UKLSAg ICAgICAgICA7OyBoYXZlIDpyb3ctY29sb3JzLgotICAgICAgICAgICh2dGFibGUtLWluc2VydC1s aW5lIHRhYmxlIGxpbmUgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUt LWNhY2hlLXdpZHRocyBjYWNoZSkgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzIGVsbGlwc2lzLXdpZHRoKQotICAgICAgICAgIChh ZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tleW1hcCBrZXltYXAKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUg dGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICd2dGFibGUtY2FjaGUgY2FjaGUpKSkKLSAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQg YSBub24tbnVtZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5Ci0gICAgICAgIDs7IGFsbC1u dW1lcmljYWwgdGFibGUsIHNvIHJlY29tcHV0ZS4KLSAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRl LW51bWVyaWNhbCB0YWJsZSAoY2RyIGxpbmUpKSkpKSkKKyAgICAobGV0KiAoKGNhY2hlICh2dGFi bGUtLWN1cnJlbnQtY2FjaGUgdGFibGUpKQorICAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkg dCkKKyAgICAgICAgICAgKGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpCisgICAgICAgICAg IChsaW5lcyAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpCisgICAgICAgICAgIChlbGVtIChp ZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRpbmcgbWlycm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBh Ym92ZS4KKyAgICAgICAgICAgICAgICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCisgICAg ICAgICAgICAgICAgICAgICAgICAgKG50aCBsb2NhdGlvbiBsaW5lcykKKyAgICAgICAgICAgICAg ICAgICAgICAgKG9yIChhc3NxIGxvY2F0aW9uIGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGFuZCBiZWZvcmUgKGNhciBsaW5lcykpKSkKKyAgICAgICAgICAgICAgICAgICAoaWYg YmVmb3JlIChjYXIgbGluZXMpKSkpCisgICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykp CisgICAgICAgICAgIChsaW5lIChjb25zIG9iamVjdCAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1s aW5lIHRhYmxlIG9iamVjdCkpKSkKKyAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUt YnVmZmVyIHRhYmxlKQorICAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAodnRhYmxl LWdvdG8tdGFibGUgdGFibGUpCisgICAgICAgICAgKGlmIChvciBiZWZvcmUKKyAgICAgICAgICAg ICAgICAgIChhbmQgcG9zIChpbnRlZ2VycCBsb2NhdGlvbikpKQorICAgICAgICAgICAgICA7OyBB ZGQgdGhlIG5ldyBvYmplY3QgYmVmb3JlOi4KKyAgICAgICAgICAgICAgKGxldCAoKG9sZC1saW5l IChjYXIgcG9zKSkpCisgICAgICAgICAgICAgICAgKHNldGNhciBwb3MgbGluZSkKKyAgICAgICAg ICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBvbGQtbGluZSAoY2RyIHBvcykpKQorICAgICAgICAg ICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3RvLW9iamVjdCAoY2FyIGVsZW0pKQorICAgICAgICAg ICAgICAgICAgKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpKSkKKyAgICAgICAgICAgIDs7IE90 aGVyd2lzZSwgYWRkIHRoZSBvYmplY3QgYWZ0ZXIuCisgICAgICAgICAgICAoaWYgcG9zCisgICAg ICAgICAgICAgICAgOzsgU3BsaWNlIHRoZSBvYmplY3QgaW50byB0aGUgbGlzdC4KKyAgICAgICAg ICAgICAgICAocHJvZ24KKyAgICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUg KGNkciBwb3MpKSkKKyAgICAgICAgICAgICAgICAgIChpZiAodnRhYmxlLWdvdG8tb2JqZWN0IGxv Y2F0aW9uKQorICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkgIDsgSW5zZXJ0 ICphZnRlciouCisgICAgICAgICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisg ICAgICAgICAgICAgIDs7IE90aGVyd2lzZSwgYXBwZW5kIHRoZSBvYmplY3QuCisgICAgICAgICAg ICAgIChzZXRjYXIgY2FjaGUgKG5jb25jIGxpbmVzIChsaXN0IGxpbmUpKSkKKyAgICAgICAgICAg ICAgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKSkKKyAgICAgICAgICAobGV0KiAoKHN0YXJ0IChwb2lu dCkpCisgICAgICAgICAgICAgICAgIChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNpcyB0YWJs ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUt c3RyaW5nLWVsbGlwc2lzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIiKSkKKyAgICAgICAgICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwt d2lkdGggZWxsaXBzaXMgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgICAgICAgICAgICAgIChrZXlt YXAgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2tleW1hcCkpKQorICAgICAgICAgICAgOzsg RklYTUU6IFdlIGhhdmUgdG8gYWRqdXN0IGNvbG9ycyBpbiBsaW5lcyBiZWxvdyB0aGlzIGlmIHdl CisgICAgICAgICAgICA7OyBoYXZlIDpyb3ctY29sb3JzLgorICAgICAgICAgICAgKHZ0YWJsZS0t aW5zZXJ0LWxpbmUgdGFibGUgbGluZSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodnRhYmxlLS1zcGFjZXIgdGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbGxpcHNpcyBlbGxpcHNpcy13aWR0aCkKKyAgICAgICAgICAgIChhZGQtdGV4dC1w cm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tleW1hcCBrZXltYXAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZSkp KQorICAgICAgICAgIDs7IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2YWx1 ZSBpbnRvIGEgcHJldmlvdXNseQorICAgICAgICAgIDs7IGFsbC1udW1lcmljYWwgdGFibGUsIHNv IHJlY29tcHV0ZS4KKyAgICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxl IChjZHIgbGluZSkpKSkpKSkKIAogKGRlZnVuIHZ0YWJsZS1jb2x1bW4gKHRhYmxlIGluZGV4KQog ICAiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBJTkRFWHRoIGNvbHVtbiBpbiBUQUJMRS4iCkBAIC01 MjAsMTQgKzUyNywxNCBAQCB2dGFibGUtLWNhY2hlLXdpZHRocwogKGRlZnVuIHZ0YWJsZS0tY2Fj aGUtbGluZXMgKGNhY2hlKQogICAoY2FyIGNhY2hlKSkKIAotKGRlZnVuIHZ0YWJsZS1pbnNlcnQg KHRhYmxlKQorKGRlZnVuIHZ0YWJsZS0taW5zZXJ0ICh0YWJsZSkKICAgKGxldCogKChzcGFjZXIg KHZ0YWJsZS0tc3BhY2VyIHRhYmxlKSkKICAgICAgICAgIChzdGFydCAocG9pbnQpKQogICAgICAg ICAgKGVsbGlwc2lzIChpZiAodnRhYmxlLWVsbGlwc2lzIHRhYmxlKQogICAgICAgICAgICAgICAg ICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQogICAg ICAgICAgICAgICAgICAgICAgIiIpKQotICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmct cGl4ZWwtd2lkdGggZWxsaXBzaXMpKQorICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmct cGl4ZWwtd2lkdGggZWxsaXBzaXMgKHZ0YWJsZS1idWZmZXIgdGFibGUpKSkKICAgICAgICAgIDs7 IFdlIG1haW50YWluIGEgY2FjaGUgcGVyIHNjcmVlbi93aW5kb3cgd2lkdGgsIHNvIHRoYXQgd2Ug cmVuZGVyCiAgICAgICAgICA7OyBjb3JyZWN0bHkgaWYgRW1hY3MgaXMgb3BlbiBvbiB0d28gZGlm ZmVyZW50IHNjcmVlbnMgKG9yIHRoZQogICAgICAgICAgOzsgdXNlciByZXNpemVzIHRoZSBmcmFt ZSkuCkBAIC01NDksOCArNTU2LDcgQEAgdnRhYmxlLWluc2VydAogICAgICAgICAoYWRkLXRleHQt cHJvcGVydGllcyBzdGFydCAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs aXN0ICdrZXltYXAgdnRhYmxlLWhlYWRlci1saW5lLW1hcAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAncmVhci1ub25zdGlja3kgdAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAndnRhYmxlIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICd2dGFibGUtY2FjaGUgY2FjaGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAndnRhYmxlIHRhYmxlKSkKICAgICAgICAgKHNldHEgc3RhcnQgKHBvaW50KSkpKQogICAg ICh2dGFibGUtLXNvcnQgdGFibGUgY2FjaGUpCiAgICAgOzsgSW5zZXJ0IHRoZSBkYXRhLgpAQCAt NTYxLDEzICs1NjcsMzUgQEAgdnRhYmxlLWluc2VydAogICAgICAgICAoc2V0cSBsaW5lLW51bWJl ciAoMSsgbGluZS1udW1iZXIpKSkpCiAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBv aW50KQogICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdyZWFyLW5vbnN0aWNreSB0Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICd2dGFibGUtY2FjaGUgY2FjaGUpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICd2dGFibGUgdGFibGUpKQorICAgIChzZXRmICh2dGFibGUtLWN1cnJl bnQtY2FjaGUgdGFibGUpIGNhY2hlKQogICAgIChnb3RvLWNoYXIgc3RhcnQpKSkKIAorKGRlZnVu IHZ0YWJsZS1pbnNlcnQgKHRhYmxlKQorICAiSW5zZXJ0IFRBQkxFIGludG8gdGhlIGN1cnJlbnQg YnVmZmVyLgorVGhlIGN1cnJlbnQgYnVmZmVyIHdpbGwgYmUgcmVjb3JkZWQgYXMgVEFCTEUncyBi dWZmZXIuICBJZiB0aGUgdGFibGUgaXMKK2luc2VydGVkIGludG8gYSBidWZmZXIgb3RoZXIgdGhh biBpdHMgb3JpZ2luYXRpbmcgYnVmZmVyLCBzaWduYWwgYW4KK2Vycm9yLiAgQSB0YWJsZSBtYXkg YmUgcmVpbnNlcnRlZCBpbnRvIGl0cyBvd24gYnVmZmVyLCBidXQgaW5zZXJ0IG9ubHkKK29uZSBp bnN0YW5jZSBwZXIgYnVmZmVyLiAgVGhpcyByZXN0cmljdGlvbiBuZWVkcyB0byBiZSBlbmZvcmNl ZCBieSB0aGUKK2NhbGxlci4iCisgIChpZi1sZXQqICgodGFibGUtYnVmZmVyICh2dGFibGUtYnVm ZmVyIHRhYmxlKSkpCisgICAgICAod2hlbiAobm90IChlcSB0YWJsZS1idWZmZXIgKGN1cnJlbnQt YnVmZmVyKSkpCisgICAgICAgIChlcnJvciAiQSB2dGFibGUgY2Fubm90IGJlIGluc2VydGVkIGlu dG8gbW9yZSB0aGFuIG9uZSBidWZmZXIiKSkpCisgIChzZXRmICh2dGFibGUtYnVmZmVyIHRhYmxl KSAoY3VycmVudC1idWZmZXIpKQorICAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkKKyAgICAg ICAgKGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpKQorICAgICh2dGFibGUtLWluc2VydCB0 YWJsZSkpKQorCisoZGVmdW4gdnRhYmxlLXNldC1idWZmZXIgKHRhYmxlIGJ1ZmZlcikKKyAgIkFz c29jaWF0ZSBCVUZGRVIgd2l0aCBUQUJMRS4KK1VzZSB0aGlzIGZ1bmN0aW9uIHdpdGggY2FyZSwg YW5kIGVuc3VyZSB5b3VyIHZ0YWJsZSBpbnN0YW5jZSByZW5kZXJzCitpdHNlbGYgaW4gdGhlIG5l dyBidWZmZXIuIgorICAoc2V0ZiAodnRhYmxlLWJ1ZmZlciB0YWJsZSkgYnVmZmVyKSkKKwogKGRl ZnVuIHZ0YWJsZS0taW5zZXJ0LWxpbmUgKHRhYmxlIGxpbmUgbGluZS1udW1iZXIgd2lkdGhzIHNw YWNlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBlbGxpcHNp cyBlbGxpcHNpcy13aWR0aCkKICAgKGxldCAoKHN0YXJ0IChwb2ludCkpCisgICAgICAgIChidWZm ZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpKQogICAgICAgICAoY29sdW1ucyAodnRhYmxlLWNvbHVt bnMgdGFibGUpKQogICAgICAgICAoY29sdW1uLWNvbG9ycwogICAgICAgICAgKGFuZCAodnRhYmxl LWNvbHVtbi1jb2xvcnMgdGFibGUpCkBAIC02MDcsMTYgKzYzNSwxOCBAQCB2dGFibGUtLWluc2Vy dC1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdAogICAgICAgICAgICAgICAgICAg ICAgICAodnRhYmxlLS1saW1pdC1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIHByZS1j b21wdXRlZCAoLSAoZWx0IHdpZHRocyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAob3IgZWxsaXBzaXMtd2lkdGggMCkpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAwKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMpCiAg ICAgICAgICAgICAgICAgICAgIHByZS1jb21wdXRlZCkpCiAgICAgICAgICAgICAgICAgIDs7IFJl Y29tcHV0ZSB3aWR0aHMuCiAgICAgICAgICAgICAgICAgICh0Ci0gICAgICAgICAgICAgICAgICAo aWYgKD4gKHN0cmluZy1waXhlbC13aWR0aCB2YWx1ZSkgKGVsdCB3aWR0aHMgaW5kZXgpKQorICAg ICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggdmFsdWUgYnVmZmVyKSAo ZWx0IHdpZHRocyBpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdAogICAgICAg ICAgICAgICAgICAgICAgICAodnRhYmxlLS1saW1pdC1zdHJpbmcKICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbHVlICgtIChlbHQgd2lkdGhzIGluZGV4KQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRoIDApKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAwKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMpCiAgICAgICAgICAg ICAgICAgICAgIHZhbHVlKSkpKQogICAgICAgICAgICAgICAgKHN0YXJ0IChwb2ludCkpCkBAIC02 MzAsMTQgKzY2MCwxNSBAQCB2dGFibGUtLWluc2VydC1saW5lCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsaXN0ICdzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6d2lk dGggKGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKyAoLSAo ZWx0IHdpZHRocyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoIGRpc3BsYXllZCkpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQgYnVmZmVy KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgbGFzdCAw IHNwYWNlcikpKSkpKSkKICAgICAgICAgICAgICA7OyBBbGlnbiB0byB0aGUgcmlnaHQuCiAgICAg ICAgICAgICAgKGluc2VydCAocHJvcGVydGl6ZSAiICIgJ2Rpc3BsYXkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOndpZHRoIChsaXN0ICgtIChlbHQgd2lkdGhzIGluZGV4KQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmct cGl4ZWwtd2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGlzcGxheWVkKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkIGJ1ZmZlcikpKSkpCiAgICAgICAg ICAgICAgICAgICAgICBkaXNwbGF5ZWQpCiAgICAgICAgICAgICAgKHVubGVzcyBsYXN0CiAgICAg ICAgICAgICAgICAoaW5zZXJ0IChwcm9wZXJ0aXplICIgIiAnZGlzcGxheQpAQCAtNjY0LDE2ICs2 OTUsNiBAQCB2dGFibGUtLWluc2VydC1saW5lCiAoZGVmdW4gdnRhYmxlLS1jYWNoZS1rZXkgKCkK ICAgKGNvbnMgKGZyYW1lLXRlcm1pbmFsKSAod2luZG93LXdpZHRoKSkpCiAKLShkZWZ1biB2dGFi bGUtLWN1cnJlbnQtY2FjaGUgKCkKLSAgIlJldHVybiB0aGUgY3VycmVudCBjYWNoZSBmb3IgdGhl IHRhYmxlIGF0IHBvaW50LgotCi1JbiBgdnRhYmxlLWluc2VydCcsIHRoZSBsaW5lcyBhbmQgd2lk dGhzIG9mIHRoZSB2dGFibGUgdGV4dCBhcmUgY29tcHV0ZWQKLWJhc2VkIG9uIHRoZSBjdXJyZW50 IHNlbGVjdGVkIGZyYW1lIGFuZCB3aW5kb3cgYW5kIHN0b3JlZCBpbiBhIGNhY2hlLgotU3Vic2Vx dWVudCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0ZXh0IG9mIHRoZSB2dGFibGUgc2hvdWxkIHVzZSB0 aGF0IGNhY2hlCi12aWEgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBieSBjYWxsaW5nIGB2dGFi bGUtLWNhY2hlLWtleScgdG8gbG9vayB1cAotdGhlIGNhY2hlLiIKLSAgKGdldC10ZXh0LXByb3Bl cnR5IChwb2ludCkgJ3Z0YWJsZS1jYWNoZSkpCi0KIChkZWZ1biB2dGFibGUtLWNsZWFyLWNhY2hl ICh0YWJsZSkKICAgKHNldGYgKGdldGhhc2ggKHZ0YWJsZS0tY2FjaGUta2V5KSAoc2xvdC12YWx1 ZSB0YWJsZSAnLWNhY2hlKSkgbmlsKSkKIApAQCAtNzE4LDYgKzczOSw3IEBAIHZ0YWJsZS0taW5k aWNhdG9yCiAoZGVmdW4gdnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUgKHRhYmxlIHdpZHRocyBz cGFjZXIpCiAgIDs7IEluc2VydCB0aGUgaGVhZGVyIGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlci4K ICAgKGxldCAoKHN0YXJ0IChwb2ludCkpCisgICAgICAgIChidWZmZXIgKHZ0YWJsZS1idWZmZXIg dGFibGUpKQogICAgICAgICAoZGl2aWRlciAodnRhYmxlLWRpdmlkZXIgdGFibGUpKQogICAgICAg ICAoY21hcCAoZGVmaW5lLWtleW1hcAogICAgICAgICAgICAgICAgICI8aGVhZGVyLWxpbmU+IDxk cmFnLW1vdXNlLTE+IiAjJ3Z0YWJsZS0tZHJhZy1yZXNpemUtY29sdW1uCkBAIC03MzcsMTQgKzc1 OSwxNSBAQCB2dGFibGUtLWluc2VydC1oZWFkZXItbGluZQogICAgICAgICAgICAgICAgICAgICAg J2tleW1hcCBjbWFwKSkKICAgICAgICAgICAgICAgKHN0YXJ0IChwb2ludCkpCiAgICAgICAgICAg ICAgIChpbmRpY2F0b3IgKHZ0YWJsZS0taW5kaWNhdG9yIHRhYmxlIGluZGV4KSkKLSAgICAgICAg ICAgICAgKGluZGljYXRvci13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGluZGljYXRvcikpCisg ICAgICAgICAgICAgIChpbmRpY2F0b3Itd2lkdGggKHN0cmluZy1waXhlbC13aWR0aCBpbmRpY2F0 b3IgYnVmZmVyKSkKICAgICAgICAgICAgICAgKGxhc3QgKD0gaW5kZXggKDEtIChsZW5ndGggKHZ0 YWJsZS1jb2x1bW5zIHRhYmxlKSkpKSkKICAgICAgICAgICAgICAgZGlzcGxheWVkKQogICAgICAg ICAgKHNldHEgZGlzcGxheWVkCi0gICAgICAgICAgICAgICAoaWYgKD4gKHN0cmluZy1waXhlbC13 aWR0aCBuYW1lKQorICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggbmFt ZSBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAgICAgKC0gKGVsdCB3aWR0aHMgaW5kZXgpIGlu ZGljYXRvci13aWR0aCkpCiAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5n Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgKC0gKGVsdCB3aWR0aHMgaW5kZXgpIGluZGljYXRv ci13aWR0aCkpCisgICAgICAgICAgICAgICAgICAgIG5hbWUgKC0gKGVsdCB3aWR0aHMgaW5kZXgp IGluZGljYXRvci13aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyKQogICAgICAgICAg ICAgICAgICBuYW1lKSkKICAgICAgICAgIChsZXQqICgoaW5kaWNhdG9yLWxlYWQtd2lkdGgKICAg ICAgICAgICAgICAgICAgOzsgV2Ugd2FudCB0aGUgaW5kaWNhdG9yIHRvIG5vdCBiZSBxdWl0ZSBm bHVzaCByaWdodC4KQEAgLTc1Myw3ICs3NzYsNyBAQCB2dGFibGUtLWluc2VydC1oZWFkZXItbGlu ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvci1sZWFk LXdpZHRoKSkKICAgICAgICAgICAgICAgICAoZmlsbC13aWR0aAogICAgICAgICAgICAgICAgICAo KyAoLSAoZWx0IHdpZHRocyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1w aXhlbC13aWR0aCBkaXNwbGF5ZWQpCisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGl4 ZWwtd2lkdGggZGlzcGxheWVkIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNh dG9yLXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvci1sZWFkLXdpZHRoKQog ICAgICAgICAgICAgICAgICAgICAoaWYgbGFzdCAwIHNwYWNlcikpKSkKQEAgLTc3MSw3ICs3OTQs OCBAQCB2dGFibGUtLWluc2VydC1oZWFkZXItbGluZQogICAgICAgICAgICAgIDs7IFRoaXMgaXMg dGhlIGZpbmFsIGNvbHVtbiwgYW5kIHdlIGhhdmUgYSBzb3J0aW5nCiAgICAgICAgICAgICAgOzsg aW5kaWNhdG9yLCBhbmQgdGhlIHRhYmxlIGlzIHRvbyB3aWRlIGZvciB0aGUgd2luZG93LgogICAg ICAgICAgICAgIChsZXQqICgocHJlLWluZGljYXRvciAoc3RyaW5nLXBpeGVsLXdpZHRoCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQt bWluKSAocG9pbnQpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVm ZmVyLXN1YnN0cmluZyAocG9pbnQtbWluKSAocG9pbnQpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgKHByZS1maWxsCiAg ICAgICAgICAgICAgICAgICAgICAoLSAod2luZG93LXdpZHRoIG5pbCB0KQogICAgICAgICAgICAg ICAgICAgICAgICAgcHJlLWluZGljYXRvcgpAQCAtODUwLDE0ICs4NzQsMTYgQEAgdnRhYmxlLS1z ZXQtaGVhZGVyLWxpbmUKICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikg KDEtIChwb2ludC1tYXgpKSkpKSkKICAgKHZ0YWJsZS1oZWFkZXItbW9kZSAxKSkKIAotKGRlZnVu IHZ0YWJsZS0tbGltaXQtc3RyaW5nIChzdHJpbmcgcGl4ZWxzKQorCisoZGVmdW4gdnRhYmxlLS1s aW1pdC1zdHJpbmcgKHN0cmluZyBwaXhlbHMgYnVmZmVyKQogICAod2hpbGUgKGFuZCAobGVuZ3Ro PiBzdHJpbmcgMCkKLSAgICAgICAgICAgICAgKD4gKHN0cmluZy1waXhlbC13aWR0aCBzdHJpbmcp IHBpeGVscykpCisgICAgICAgICAgICAgICg+IChzdHJpbmctcGl4ZWwtd2lkdGggc3RyaW5nIGJ1 ZmZlcikgcGl4ZWxzKSkKICAgICAoc2V0cSBzdHJpbmcgKHN1YnN0cmluZyBzdHJpbmcgMCAoMS0g KGxlbmd0aCBzdHJpbmcpKSkpKQogICBzdHJpbmcpCiAKIChkZWZ1biB2dGFibGUtLWNoYXItd2lk dGggKHRhYmxlKQotICAoc3RyaW5nLXBpeGVsLXdpZHRoIChwcm9wZXJ0aXplICJ4IiAnZmFjZSAo dnRhYmxlLWZhY2UgdGFibGUpKSkpCisgIChzdHJpbmctcGl4ZWwtd2lkdGggKHByb3BlcnRpemUg IngiICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCisgICAgICAgICAgICAgICAgICAgICAgKHZ0 YWJsZS1idWZmZXIgdGFibGUpKSkKIAogKGRlZnVuIHZ0YWJsZS0tY29tcHV0ZS13aWR0aCAodGFi bGUgc3BlYykKICAgKGNvbmQKQEAgLTkzNiw3ICs5NjIsNyBAQCB2dGFibGUtLWNvbXB1dGUtY2Fj aGVkLWxpbmUKICAgICAgICA7OyBXZSBzdGFzaCB0aGUgY29tcHV0ZWQgd2lkdGggYW5kIHN0cmlu ZyBoZXJlIC0tIGlmIHRoZXJlIGFyZQogICAgICAgIDs7IG5vIGZvcm1hdHRlcnMvZGlzcGxheWVy cywgd2UnbGwgYmUgdXNpbmcgdGhlIHN0cmluZywgYW5kCiAgICAgICAgOzsgdGhlbiB3b24ndCBo YXZlIHRvIHJlY3JlYXRlIGl0LgotICAgICAgIChsaXN0IHZhbHVlIChzdHJpbmctcGl4ZWwtd2lk dGggc3RyaW5nKSBzdHJpbmcpKSkKKyAgICAgICAobGlzdCB2YWx1ZSAoc3RyaW5nLXBpeGVsLXdp ZHRoIHN0cmluZyAodnRhYmxlLWJ1ZmZlciB0YWJsZSkpIHN0cmluZykpKQogICAgKHZ0YWJsZS1j b2x1bW5zIHRhYmxlKSkpCiAKIChkZWZ1biB2dGFibGUtLW1ha2Uta2V5bWFwICh0YWJsZSkKQEAg LTk2NywyMCArOTkzLDIyIEBAIHZ0YWJsZS0tbWFrZS1rZXltYXAKICAgICAgICAgICAodnRhYmxl LWtleW1hcCB0YWJsZSkpCiAgICAgICBtYXApKSkKIAotKGRlZnVuIHZ0YWJsZS1yZXZlcnQgKCkK LSAgIlJlZ2VuZXJhdGUgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKLSAgKGxldCAoKHRhYmxlICh2 dGFibGUtY3VycmVudC10YWJsZSkpCi0gICAgICAgIChvYmplY3QgKHZ0YWJsZS1jdXJyZW50LW9i amVjdCkpCi0gICAgICAgIChjb2x1bW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpCi0gICAgICAg IChpbmhpYml0LXJlYWQtb25seSB0KSkKLSAgICAodW5sZXNzIHRhYmxlCi0gICAgICAodXNlci1l cnJvciAiTm8gdGFibGUgdW5kZXIgcG9pbnQiKSkKLSAgICAoZGVsZXRlLXJlZ2lvbiAodnRhYmxl LWJlZ2lubmluZy1vZi10YWJsZSkgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKQotICAgICh2dGFibGUt aW5zZXJ0IHRhYmxlKQotICAgICh3aGVuIG9iamVjdAotICAgICAgKHZ0YWJsZS1nb3RvLW9iamVj dCBvYmplY3QpKQotICAgICh3aGVuIGNvbHVtbgotICAgICAgKHZ0YWJsZS1nb3RvLWNvbHVtbiBj b2x1bW4pKSkpCisoZGVmdW4gdnRhYmxlLXJldmVydCAoJm9wdGlvbmFsIHRhYmxlKQorICAiUmVn ZW5lcmF0ZSBUQUJMRSwgZGVmYXVsdGluZyB0byB0aGUgdGFibGUgdW5kZXIgcG9pbnQuIgorICAo c2V0cSB0YWJsZSAob3IgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCisgICh1bmxlc3Mg dGFibGUKKyAgICAodXNlci1lcnJvciAiTm8gdGFibGUgdW5kZXIgcG9pbnQiKSkKKyAgKHdpdGgt Y3VycmVudC1idWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpCisgICAgKGxldCAoKG9iamVjdCAo dnRhYmxlLWN1cnJlbnQtb2JqZWN0KSkKKyAgICAgICAgICAoY29sdW1uICh2dGFibGUtY3VycmVu dC1jb2x1bW4pKQorICAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KQorICAgICAgICAgIChp bmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkKKyAgICAgIChkZWxldGUtcmVnaW9uICh2dGFi bGUtYmVnaW5uaW5nLW9mLXRhYmxlKSAodnRhYmxlLWVuZC1vZi10YWJsZSkpCisgICAgICAodnRh YmxlLS1pbnNlcnQgdGFibGUpCisgICAgICAod2hlbiBvYmplY3QKKyAgICAgICAgKHZ0YWJsZS1n b3RvLW9iamVjdCBvYmplY3QpKQorICAgICAgKHdoZW4gY29sdW1uCisgICAgICAgICh2dGFibGUt Z290by1jb2x1bW4gY29sdW1uKSkpKSkKIAogOzs7IENvbW1hbmRzLgogCkBAIC0xMDA2LDE0ICsx MDM0LDE0IEBAIHZ0YWJsZS1uYXJyb3ctY3VycmVudC1jb2x1bW4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKC0gKCogKHZ0YWJsZS0tY2hhci13aWR0aCB0YWJsZSkgKG9yIG4gMSkp KSkpKQogCiAoZGVmdW4gdnRhYmxlLS1hbHRlci1jb2x1bW4td2lkdGggKHRhYmxlIGNvbHVtbiBk ZWx0YSkKLSAgKGxldCAoKHdpZHRocyAodnRhYmxlLS1jYWNoZS13aWR0aHMgKHZ0YWJsZS0tY3Vy cmVudC1jYWNoZSkpKSkKKyAgKGxldCAoKHdpZHRocyAodnRhYmxlLS1jYWNoZS13aWR0aHMgKHZ0 YWJsZS0tY3VycmVudC1jYWNoZSB0YWJsZSkpKSkKICAgICAoc2V0ZiAoYXJlZiB3aWR0aHMgY29s dW1uKQogICAgICAgICAgIChtYXggKCogKHZ0YWJsZS0tY2hhci13aWR0aCB0YWJsZSkgMikKICAg ICAgICAgICAgICAgICgrIChhcmVmIHdpZHRocyBjb2x1bW4pIGRlbHRhKSkpCiAgICAgOzsgU3Rv cmUgdGhlIHdpZHRoIHNvIGl0J2xsIGJlIHJlc3BlY3RlZCBvbiBhIHJldmVydC4KICAgICAoc2V0 ZiAodnRhYmxlLWNvbHVtbi13aWR0aCAoZWx0ICh2dGFibGUtY29sdW1ucyB0YWJsZSkgY29sdW1u KSkKICAgICAgICAgICAoZm9ybWF0ICIlZHB4IiAoYXJlZiB3aWR0aHMgY29sdW1uKSkpCi0gICAg KHZ0YWJsZS1yZXZlcnQpKSkKKyAgICAodnRhYmxlLXJldmVydCB0YWJsZSkpKQogCiAoZGVmdW4g dnRhYmxlLXdpZGVuLWN1cnJlbnQtY29sdW1uICgmb3B0aW9uYWwgbikKICAgIldpZGVuIHRoZSBj dXJyZW50IGNvbHVtbiBieSBOIGNoYXJhY3RlcnMuCkBAIC0xMDI4LDI0ICsxMDU2LDI5IEBAIHZ0 YWJsZS1wcmV2aW91cy1jb2x1bW4KICAgKGludGVyYWN0aXZlKQogICAodnRhYmxlLWdvdG8tY29s dW1uCiAgICAobWF4IDAgKDEtIChvciAodnRhYmxlLWN1cnJlbnQtY29sdW1uKQotICAgICAgICAg ICAgICAgICAgKGxlbmd0aCAodnRhYmxlLS1jYWNoZS13aWR0aHMgKHZ0YWJsZS0tY3VycmVudC1j YWNoZSkpKSkpKSkpCisgICAgICAgICAgICAgICAgICAobGVuZ3RoICh2dGFibGUtLWNhY2hlLXdp ZHRocworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY3VycmVudC1jYWNoZSAo dnRhYmxlLWN1cnJlbnQtdGFibGUpKSkpKSkpKSkKIAogKGRlZnVuIHZ0YWJsZS1uZXh0LWNvbHVt biAoKQogICAiR28gdG8gdGhlIG5leHQgY29sdW1uLiIKICAgKGludGVyYWN0aXZlKQogICAod2hl biAodnRhYmxlLWN1cnJlbnQtY29sdW1uKQogICAgICh2dGFibGUtZ290by1jb2x1bW4KLSAgICAg KG1pbiAoMS0gKGxlbmd0aCAodnRhYmxlLS1jYWNoZS13aWR0aHMgKHZ0YWJsZS0tY3VycmVudC1j YWNoZSkpKSkKKyAgICAgKG1pbiAoMS0gKGxlbmd0aCAodnRhYmxlLS1jYWNoZS13aWR0aHMKKyAg ICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY3VycmVudC1jYWNoZSAodnRhYmxlLWN1cnJl bnQtdGFibGUpKSkpKQogICAgICAgICAgICgxKyAodnRhYmxlLWN1cnJlbnQtY29sdW1uKSkpKSkp CiAKLShkZWZ1biB2dGFibGUtcmV2ZXJ0LWNvbW1hbmQgKCkKLSAgIlJlLXF1ZXJ5IGRhdGEgYW5k IHJlZ2VuZXJhdGUgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKKyhkZWZ1biB2dGFibGUtcmV2ZXJ0 LWNvbW1hbmQgKCZvcHRpb25hbCB0YWJsZSkKKyAgIlJlLXF1ZXJ5IGRhdGEgYW5kIHJlZ2VuZXJh dGUgVEFCTEUuCitJZiBUQUJMRSBpcyBuaWwsIHVzZSB0aGUgdGFibGUgdW5kZXIgcG9pbnQuIgog ICAoaW50ZXJhY3RpdmUpCi0gIChsZXQgKCh0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkK LSAgICAod2hlbiAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpCi0gICAgICAoc2V0ZiAo dnRhYmxlLW9iamVjdHMgdGFibGUpIChmdW5jYWxsICh2dGFibGUtb2JqZWN0cy1mdW5jdGlvbiB0 YWJsZSkpKSkKLSAgICAodnRhYmxlLS1jbGVhci1jYWNoZSB0YWJsZSkpCi0gICh2dGFibGUtcmV2 ZXJ0KSkKKyAgKHNldHEgdGFibGUgKG9yIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpKQor ICAodW5sZXNzIHRhYmxlCisgICAgKHVzZXItZXJyb3IgIk5vIHRhYmxlIGZvdW5kIikpCisgICh3 aGVuICh2dGFibGUtb2JqZWN0cy1mdW5jdGlvbiB0YWJsZSkKKyAgICAoc2V0ZiAodnRhYmxlLW9i amVjdHMgdGFibGUpIChmdW5jYWxsICh2dGFibGUtb2JqZWN0cy1mdW5jdGlvbiB0YWJsZSkpKSkK KyAgKHZ0YWJsZS0tY2xlYXItY2FjaGUgdGFibGUpCisgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkK IAogKGRlZnVuIHZ0YWJsZS1zb3J0LWJ5LWN1cnJlbnQtY29sdW1uICgpCiAgICJTb3J0IHRoZSB0 YWJsZSB1bmRlciBwb2ludCBieSB0aGUgY29sdW1uIHVuZGVyIHBvaW50LiIKQEAgLTEwNjcsOCAr MTEwMCw4IEBAIHZ0YWJsZS1zb3J0LWJ5LWN1cnJlbnQtY29sdW1uCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGlmIChlcSAoY2RyIGxhc3QpICdhc2NlbmQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjZW5kCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnYXNjZW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnYXNjZW5kKSkpKSkpCi0gICh2dGFibGUtcmV2ZXJ0KSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2FzY2VuZCkpKSkpCisgICAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKSkKIAog KGRlZnVuIHZ0YWJsZS1oZWFkZXItbGluZS1zb3J0IChlKQogICAiU29ydCBhIHZ0YWJsZSBmcm9t IHRoZSBoZWFkZXIgbGluZS4iCmRpZmYgLS1naXQgYS90ZXN0L2xpc3AvZW1hY3MtbGlzcC92dGFi bGUtdGVzdHMuZWwgYi90ZXN0L2xpc3AvZW1hY3MtbGlzcC92dGFibGUtdGVzdHMuZWwKaW5kZXgg NzRmYjhjYzgxMzkuLmUwMzI4ZTMxYmM1IDEwMDY0NAotLS0gYS90ZXN0L2xpc3AvZW1hY3MtbGlz cC92dGFibGUtdGVzdHMuZWwKKysrIGIvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3Rz LmVsCkBAIC0yNywxNiArMjcsMTkgQEAKIChyZXF1aXJlICdlcnQpCiAocmVxdWlyZSAnZXJ0LXgp CiAKLShlcnQtZGVmdGVzdCB0ZXN0LXZzdGFibGUtY29tcHV0ZS1jb2x1bW5zICgpCisoZGVmdW4g dnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSAoKQorICAobWFrZS12 dGFibGUgOmNvbHVtbnMgJygiYSIgImIiICJjIikKKyAgICAgICAgICAgICAgIDpvYmplY3RzICco KCJmb28iIDEgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCJiYXIiIDMgOnpvdCkpCisg ICAgICAgICAgICAgICA6aW5zZXJ0IG5pbCkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1j b21wdXRlLWNvbHVtbnMgKCkKICAgKHNob3VsZAogICAgKGVxdWFsIChtYXBjYXIKICAgICAgICAg ICAgKGxhbWJkYSAoY29sdW1uKQogICAgICAgICAgICAgICh2dGFibGUtY29sdW1uLWFsaWduIGNv bHVtbikpCiAgICAgICAgICAgICh2dGFibGUtLWNvbXB1dGUtY29sdW1ucwotICAgICAgICAgICAg KG1ha2UtdnRhYmxlIDpjb2x1bW5zICcoImEiICJiIiAiYyIpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgOm9iamVjdHMgJygoImZvbyIgMSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCJiYXIiIDMgOnpvdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgOmluc2Vy dCBuaWwpKSkKKyAgICAgICAgICAgICh2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2Jq ZWN0LXRhYmxlKSkpCiAgICAgICAgICAgJyhsZWZ0IHJpZ2h0IGxlZnQpKSkpCiAKIChlcnQtZGVm dGVzdCB0ZXN0LXZ0YWJsZS1pbnNlcnQtb2JqZWN0ICgpCkBAIC02OSw0ICs3Miw3NSBAQCB0ZXN0 LXZ0YWJsZS1pbnNlcnQtb2JqZWN0CiAgICAgICAgICAgICAgIChtYXBjYXIgIydjYWRyICh2dGFi bGUtb2JqZWN0cyB0YWJsZSkpKSkKICAgICAgICAgICAobnVtYmVyLXNlcXVlbmNlIDAgMTEpKSkp CiAKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyICgpCisgIChsZXQgKCh0 YWJsZSAodnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSkpKQorICAg ICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKKyAgICAgICh3 aXRoLXRlbXAtYnVmZmVyCisgICAgICAgIChzaG91bGQtZXJyb3IgKHZ0YWJsZS1pbnNlcnQgdGFi bGUpKSkKKyAgICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAgICh2dGFibGUtc2V0LWJ1ZmZl ciB0YWJsZSAoY3VycmVudC1idWZmZXIpKQorICAgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkp KSkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1yZWFkLW9ubHktYnVmZmVyICgpCisgIChs ZXQgKCh0YWJsZSAodnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSkp KQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAoc2V0cSBidWZmZXItcmVhZC1vbmx5IHQp CisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkpKSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtdnRh YmxlLW5vbi1jdXJyZW50LWJ1ZmZlci1pbnNlcnQtb2JqZWN0ICgpCisgIChsZXQgKCh0YWJsZSAo dnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSkpCisgICAgICAgIChv YmogJygiYmF6IiA0IDUpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJsZS1p bnNlcnQgdGFibGUpCisgICAgICAoc2hvdWxkICg9IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAo cG9pbnQtbWF4KSkgMikpCisgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAodnRhYmxl LWluc2VydC1vYmplY3QgdGFibGUgb2JqKSkKKyAgICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVz IChwb2ludC1taW4pIChwb2ludC1tYXgpKSAzKSkpKSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtdnRh YmxlLW5vbi1jdXJyZW50LWJ1ZmZlci1yZW1vdmUtb2JqZWN0ICgpCisgIChsZXQgKCh0YWJsZSAo dnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSkpCisgICAgICAgIChv YmogJygiYmF6IiA0IDUpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJsZS1p bnNlcnQgdGFibGUpCisgICAgICAodnRhYmxlLWluc2VydC1vYmplY3QgdGFibGUgb2JqKQorICAg ICAgKHNob3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDMpKQor ICAgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgICAgKHZ0YWJsZS1yZW1vdmUtb2JqZWN0IHRh YmxlIG9iaikpCisgICAgICAoc2hvdWxkICg9IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9p bnQtbWF4KSkgMikpKSkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1i dWZmZXItdXBkYXRlLW9iamVjdCAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFr ZS1uby1oZWFkZXItMi1vYmplY3QtdGFibGUpKQorICAgICAgICAob2JqICcoImJheiIgNCA1KSkK KyAgICAgICAgKG9iai0yICcoInF1eCIgNiA3KSkpCisgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAg ICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAgICAgKHZ0YWJsZS1pbnNlcnQtb2JqZWN0IHRh YmxlIG9iaikKKyAgICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2lu dC1tYXgpKSAzKSkKKyAgICAgIChsZXQgKChsaW5lLTIgKHByb2duCisgICAgICAgICAgICAgICAg ICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgICAgICAgICAgICAgICAgICAoZm9y d2FyZC1saW5lIDIpCisgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBv aW50KSAocG9pbnQtbWF4KSkpKSkKKyAgICAgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgICAg ICAodnRhYmxlLXVwZGF0ZS1vYmplY3QgdGFibGUgb2JqLTIgb2JqKSkKKyAgICAgICAgKGxldCAo KGxpbmUtMi1uZXcgKHByb2duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5l IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50 KSAocG9pbnQtbWF4KSkpKSkKKyAgICAgICAgICAoc2hvdWxkICg9IChjb3VudC1saW5lcyAocG9p bnQtbWluKSAocG9pbnQtbWF4KSkgMykpCisgICAgICAgICAgKHNob3VsZCAobm90IChzdHJpbmc9 IGxpbmUtMiBsaW5lLTItbmV3KSkpKSkpKSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtdnRhYmxlLS1s aW1pdC1zdHJpbmctd2l0aC1mYWNlLXJlbWFwcGVkLWJ1ZmZlciAoKQorICAod2l0aC10ZW1wLWJ1 ZmZlcgorICAgIChsZXQgKCh0ZXh0IChwcm9wZXJ0aXplICJYWFhYWCIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZmFjZSAndmFyaWFibGUtcGl0Y2gpKSkKKyAgICAgIChmYWNlLXJlbWFw LWFkZC1yZWxhdGl2ZSAnZGVmYXVsdCA6aGVpZ2h0IDEuNSkKKyAgICAgIChpZiAoPiBlbWFjcy1t YWpvci12ZXJzaW9uIDMwKQorICAgICAgICAgIChzaG91bGQgKGVxCisgICAgICAgICAgICAgICAg ICAgMgorICAgICAgICAgICAgICAgICAgIChsZW5ndGggKHZ0YWJsZS0tbGltaXQtc3RyaW5nIHRl eHQgNTAgKGN1cnJlbnQtYnVmZmVyKSkpKSkKKyAgICAgICAgKHNob3VsZCAoZXEKKyAgICAgICAg ICAgICAgICAgMgorICAgICAgICAgICAgICAgICAobGVuZ3RoICh2dGFibGUtLWxpbWl0LXN0cmlu ZyB0ZXh0IDUwKSkpKSkpKSkKKwogOzs7IHZ0YWJsZS10ZXN0cy5lbCBlbmRzIGhlcmUKLS0gCjIu NDcuMQoK --000000000000bc39a50645b38899--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.
Received: (at 79982) by debbugs.gnu.org; 11 Dec 2025 19:46:21 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 11 14:46:21 2025
Received: from localhost ([127.0.0.1]:47918 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vTmcF-0005dP-Ss
for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 14:46:21 -0500
Received: from mxout5.mail.janestreet.com ([64.215.233.18]:34531)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>)
id 1vTmcC-0005d9-Ej
for 79982 <at> debbugs.gnu.org; Thu, 11 Dec 2025 14:46:17 -0500
From: Spencer Baugh <sbaugh@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable
buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer
slot, [PATCH] Add vtable buffer slot
In-Reply-To: <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN>
(=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Thu, 11 Dec 2025
14:31:26 -0500")
References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN>
<iero6o6s75r.fsf@HIDDEN>
<CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN>
<ierikeerwu7.fsf_-_@HIDDEN>
<CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN>
<ierfr9irmo2.fsf_-_@HIDDEN>
<CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN>
<iercy4kswsa.fsf_-_@HIDDEN>
<CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN>
Date: Thu, 11 Dec 2025 14:46:10 -0500
Message-ID: <ier8qf8ssxp.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com;
s=waixah; t=1765482370;
bh=W+zQQDdDqUsnN6BBzZEmmrBOhzI78ugZVOvMg02VvSo=;
h=From:To:Cc:Subject:In-Reply-To:References:Date;
b=cdspD3LoVAlmTK2mftPHw0tu6oUCBJNkCPVJqOwZex+2+BnKSEMy8/GyqD4VbJAYN
+as//F8xSmykfY+OyxaGEa3iOZhLKO4UZjqfE0LUaA2Qec2X7pAob7bPldFvtjwc1T
bpXCwVGvqdYpYIFk2D3TVjIP7PYQZQdT9AUFntDUITvV/M76Ar7K2nlyOJxPF4B8jT
0yvVUrujiqtXjGhr5VDoCh9QqQaDS1xwjeOTwlGj3HBZIzZH+jNPW0jQ35fAu+fVVl
KMP+zVX+bqh3dDabFcM+Xr7CEDTDbWi+xUwfEh4iB/fq8M9E8KPd+zJHMlPvkxssz2
ucxZqhHJyoVEA==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79982
Cc: Kristoffer Balintona <krisbalintona@HIDDEN>,
Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN,
79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>,
Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
Augusto Stoffel <arstoffel@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)
St=C3=A9phane Marks <shipmints@HIDDEN> writes:
> On Thu, Dec 11, 2025 at 1:23=E2=80=AFPM Spencer Baugh <sbaugh@janestreet.=
com> wrote:
> > + (let* ((cache (vtable--current-cache table))
> > + (inhibit-read-only t)
> > + (lines (vtable--cache-lines cache))
> > + (elem (if location ; This binding mirrors the binding of =
`pos' above.
> > + (if (integerp location)
> > + (nth location lines)
> > + (or (assq location lines)
> > + (and before (car lines))))
> > + (if before (car lines))))
> > + (pos (memq elem lines))
> > + (line (cons object (vtable--compute-cached-line table obje=
ct))))
> > + (with-current-buffer (vtable-buffer table)
> > + (save-excursion
> > + (vtable-goto-table table)
> > + (let* ((ellipsis (if (vtable-ellipsis table)
> > + (propertize (truncate-string-ellipsis)
> > + 'face (vtable-face table))
> > + ""))
> > + (ellipsis-width (string-pixel-width ellipsis (curren=
t-buffer)))
>
> Can we move these let-bindings out to the outer let-binding now?
>
> I'd prefer if they stay close to where they're being used, at least here,=
where the cache update is clearly separate from the buffer
> update.
Good point. Actually, so these bindings actually probably should be in
the same let-binding as (let ((start (point))) ...), a few lines later.
Since they're only used in that part of the code.
> > + (keymap (get-text-property (point) 'keymap)))
>
> I guess we could get this from vtable-keymap now? In which case it can
> also move to the outer let-binding?
>
> It would have to be from the -cached-keymap slot. Let's leave the keymap=
s as is for the time being. We have patches to refine
> and expand their functionality coming.
That's fair, but I think if we move these let-bindings down to the (let
((start (point)))) binding, that avoids reindenting the rest of this
function. Which makes this diff much smaller, which is nice.
> From 4505c63efaa9ce124a57c79317533fa3f0298f2c Mon Sep 17 00:00:00 2001
> From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN>
> Date: Wed, 10 Dec 2025 09:20:02 -0500
> Subject: [PATCH] Add vtable buffer slot
>
> This solves for background vtable mutations, i.e., updates
> initiated from buffers other than the vtable buffer, and for
> buffer-adjusted string-pixel-width computations.
>
> * lisp/emacs-lisp/vtable.el (vtable): New '-buffer' slot.
> (vtable-buffer):
> (vtable-set-buffer): New function.
> (vtable-update-object):
> (vtable-remove-object):
> (vtable-insert-object): Wrap operation with the vtable buffer.
> (vtable--insert): Split from old 'vtable-insert'.
> (vtable-insert): Insert table and record the buffer.
> (vtable--insert-line):
> (vtable--insert-header-line): Use 'vtable-buffer' for pixel-width computa=
tion.
> (vtable--limit-string):
> (vtable--char-width): Pass buffer to 'string-pixel-width'.
> (vtable-revert): New optional table argument.
> (vtable--alter-column-width):
> (vtable-revert-command):
> (vtable-sort-by-current-column): Call 'vtable-revert' with the table.
>
> * test/lisp/emacs-lisp/vtable-tests.el
> (vtable-tests--make-no-header-2-object-table): New helper
> function.
> (test-vstable-compute-columns): Correct typo in test name. Use
> new helper function.
> (test-vtable-unique-buffer)
> (test-vtable-non-current-buffer-insert-object)
> (test-vtable-non-current-buffer-remove-object)
> (test-vtable-non-current-buffer-update-object)
> (test-vtable--limit-string-with-face-remapped-buffer): New test.
> ---
> lisp/emacs-lisp/vtable.el | 274 +++++++++++++++------------
> test/lisp/emacs-lisp/vtable-tests.el | 78 +++++++-
> 2 files changed, 221 insertions(+), 131 deletions(-)
>
> diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
> index bcdd280fb92..ccdde49830e 100644
> --- a/lisp/emacs-lisp/vtable.el
> +++ b/lisp/emacs-lisp/vtable.el
> @@ -67,8 +67,10 @@ vtable
> (ellipsis :initarg :ellipsis :accessor vtable-ellipsis)
> (column-colors :initarg :column-colors :accessor vtable-column-colors)
> (row-colors :initarg :row-colors :accessor vtable-row-colors)
> + (buffer :initform nil :accessor vtable-buffer)
> (-cached-colors :initform nil)
> (-cache :initform (make-hash-table :test #'equal))
> + (-current-cache :initform nil :accessor vtable--current-cache)
> (-cached-keymap :initform nil)
> (-has-column-spec :initform nil))
> "An object to hold the data for a table.")
> @@ -301,14 +303,14 @@ vtable-update-object
> (unless (cdr objects)
> (error "Can't find the old object"))
> (setcar (cdr objects) object))
> - ;; Then update the rendered vtable in the current buffer.
> - (if-let* ((cache (vtable--current-cache))
> - (line-number (seq-position (vtable--cache-lines cache)
> - old-object
> - (lambda (a b)
> - (equal (car a) b))))
> - (line (elt (vtable--cache-lines cache) line-number)))
> - (progn
> + ;; Then update the rendered vtable in its buffer.
> + (if-let* ((cache (vtable--current-cache table))
> + (line-number (seq-position (vtable--cache-lines cache)
> + old-object
> + (lambda (a b)
> + (equal (car a) b))))
> + (line (elt (vtable--cache-lines cache) line-number)))
> + (with-current-buffer (vtable-buffer table)
> (setcar line object)
> (setcdr line (vtable--compute-cached-line table object))
> ;; ... and redisplay the line in question.
> @@ -321,8 +323,7 @@ vtable-update-object
> (vtable--cache-widths cache)
> (vtable--spacer table))
> (add-text-properties start (point) (list 'keymap keymap
> - 'vtable table
> - 'vtable-cache cac=
he))))
> + 'vtable table))))
> ;; We may have inserted a non-numerical value into a previously
> ;; all-numerical table, so recompute.
> (vtable--recompute-numerical table (cdr line)))
> @@ -334,14 +335,15 @@ vtable-remove-object
> ;; First remove from the objects.
> (setf (vtable-objects table) (delq object (vtable-objects table)))
> ;; Then adjust the cache and display.
> - (save-excursion
> - (vtable-goto-table table)
> - (let ((cache (vtable--current-cache))
> - (inhibit-read-only t))
> - (setcar cache (delq (assq object (vtable--cache-lines cache))
> - (vtable--cache-lines cache)))
> - (when (vtable-goto-object object)
> - (delete-line)))))
> + (with-current-buffer (vtable-buffer table)
> + (save-excursion
> + (vtable-goto-table table)
> + (let ((cache (vtable--current-cache table))
> + (inhibit-read-only t))
> + (setcar cache (delq (assq object (vtable--cache-lines cache))
> + (vtable--cache-lines cache)))
> + (when (vtable-goto-object object)
> + (delete-line))))))
>=20=20
> ;; FIXME: The fact that the `location' argument of
> ;; `vtable-insert-object' can be an integer and is then interpreted as
> @@ -369,8 +371,9 @@ vtable-insert-object
> (progn
> (setf (vtable-objects table) (list object))
> (vtable--recompute-numerical table (vtable--compute-cached-line =
table object))
> - (vtable-goto-table table)
> - (vtable-revert-command))
> + (with-current-buffer (vtable-buffer table)
> + (vtable-goto-table table)
> + (vtable-revert-command)))
> ;; First insert into the objects.
> (let ((pos (if location
> (if (integerp location)
> @@ -398,56 +401,57 @@ vtable-insert-object
> ;; Otherwise, append the object.
> (nconc (vtable-objects table) (list object)))))
> ;; Then adjust the cache and display.
> - (save-excursion
> - (vtable-goto-table table)
> - (let* ((cache (vtable--current-cache))
> - (inhibit-read-only t)
> - (keymap (get-text-property (point) 'keymap))
> - (ellipsis (if (vtable-ellipsis table)
> - (propertize (truncate-string-ellipsis)
> - 'face (vtable-face table))
> - ""))
> - (ellipsis-width (string-pixel-width ellipsis))
> - (lines (vtable--cache-lines cache))
> - (elem (if location ; This binding mirrors the binding of `=
pos' above.
> - (if (integerp location)
> - (nth location lines)
> - (or (assq location lines)
> - (and before (car lines))))
> - (if before (car lines))))
> - (pos (memq elem lines))
> - (line (cons object (vtable--compute-cached-line table objec=
t))))
> - (if (or before
> - (and pos (integerp location)))
> - ;; Add the new object before:.
> - (let ((old-line (car pos)))
> - (setcar pos line)
> - (setcdr pos (cons old-line (cdr pos)))
> - (unless (vtable-goto-object (car elem))
> - (vtable-beginning-of-table)))
> - ;; Otherwise, add the object after.
> - (if pos
> - ;; Splice the object into the list.
> - (progn
> - (setcdr pos (cons line (cdr pos)))
> - (if (vtable-goto-object location)
> - (forward-line 1) ; Insert *after*.
> - (vtable-end-of-table)))
> - ;; Otherwise, append the object.
> - (setcar cache (nconc lines (list line)))
> - (vtable-end-of-table)))
> - (let ((start (point)))
> - ;; FIXME: We have to adjust colors in lines below this if we
> - ;; have :row-colors.
> - (vtable--insert-line table line 0
> - (vtable--cache-widths cache) (vtable--spa=
cer table)
> - ellipsis ellipsis-width)
> - (add-text-properties start (point) (list 'keymap keymap
> - 'vtable table
> - 'vtable-cache cache)))
> - ;; We may have inserted a non-numerical value into a previously
> - ;; all-numerical table, so recompute.
> - (vtable--recompute-numerical table (cdr line))))))
> + (let* ((cache (vtable--current-cache table))
> + (inhibit-read-only t)
> + (lines (vtable--cache-lines cache))
> + (elem (if location ; This binding mirrors the binding of `po=
s' above.
> + (if (integerp location)
> + (nth location lines)
> + (or (assq location lines)
> + (and before (car lines))))
> + (if before (car lines))))
> + (pos (memq elem lines))
> + (line (cons object (vtable--compute-cached-line table object)=
)))
> + (with-current-buffer (vtable-buffer table)
> + (save-excursion
> + (vtable-goto-table table)
> + (let* ((ellipsis (if (vtable-ellipsis table)
> + (propertize (truncate-string-ellipsis)
> + 'face (vtable-face table))
> + ""))
> + (ellipsis-width (string-pixel-width ellipsis (current-b=
uffer)))
> + (keymap (get-text-property (point) 'keymap)))
> + (if (or before
> + (and pos (integerp location)))
> + ;; Add the new object before:.
> + (let ((old-line (car pos)))
> + (setcar pos line)
> + (setcdr pos (cons old-line (cdr pos)))
> + (unless (vtable-goto-object (car elem))
> + (vtable-beginning-of-table)))
> + ;; Otherwise, add the object after.
> + (if pos
> + ;; Splice the object into the list.
> + (progn
> + (setcdr pos (cons line (cdr pos)))
> + (if (vtable-goto-object location)
> + (forward-line 1) ; Insert *after*.
> + (vtable-end-of-table)))
> + ;; Otherwise, append the object.
> + (setcar cache (nconc lines (list line)))
> + (vtable-end-of-table)))
> + (let ((start (point)))
> + ;; FIXME: We have to adjust colors in lines below this if =
we
> + ;; have :row-colors.
> + (vtable--insert-line table line 0
> + (vtable--cache-widths cache)
> + (vtable--spacer table)
> + ellipsis ellipsis-width)
> + (add-text-properties start (point) (list 'keymap keymap
> + 'vtable table)))
> + ;; We may have inserted a non-numerical value into a previou=
sly
> + ;; all-numerical table, so recompute.
> + (vtable--recompute-numerical table (cdr line))))))))
>=20=20
> (defun vtable-column (table index)
> "Return the name of the INDEXth column in TABLE."
> @@ -520,14 +524,14 @@ vtable--cache-widths
> (defun vtable--cache-lines (cache)
> (car cache))
>=20=20
> -(defun vtable-insert (table)
> +(defun vtable--insert (table)
> (let* ((spacer (vtable--spacer table))
> (start (point))
> (ellipsis (if (vtable-ellipsis table)
> (propertize (truncate-string-ellipsis)
> 'face (vtable-face table))
> ""))
> - (ellipsis-width (string-pixel-width ellipsis))
> + (ellipsis-width (string-pixel-width ellipsis (vtable-buffer tab=
le)))
> ;; We maintain a cache per screen/window width, so that we rend=
er
> ;; correctly if Emacs is open on two different screens (or the
> ;; user resizes the frame).
> @@ -549,8 +553,7 @@ vtable-insert
> (add-text-properties start (point)
> (list 'keymap vtable-header-line-map
> 'rear-nonsticky t
> - 'vtable table
> - 'vtable-cache cache))
> + 'vtable table))
> (setq start (point))))
> (vtable--sort table cache)
> ;; Insert the data.
> @@ -561,13 +564,29 @@ vtable-insert
> (setq line-number (1+ line-number))))
> (add-text-properties start (point)
> (list 'rear-nonsticky t
> - 'vtable table
> - 'vtable-cache cache))
> + 'vtable table))
> + (setf (vtable--current-cache table) cache)
> (goto-char start)))
>=20=20
> +(defun vtable-insert (table)
> + "Insert TABLE into the current buffer.
> +The current buffer will be recorded as TABLE's buffer. If the table is
> +inserted into a buffer other than its originating buffer, signal an
> +error. A table may be reinserted into its own buffer, but insert only
> +one instance per buffer. This restriction needs to be enforced by the
> +caller."
> + (and-let* ((table-buffer (vtable-buffer table))
> + (not (eq table-buffer (current-buffer))))
> + (error "A vtable cannot be inserted into more than one buffer"))
> + (setf (vtable-buffer table) (current-buffer))
> + (let ((inhibit-read-only t)
> + (inhibit-modification-hooks t))
Hm, why do we need these inhibit-read-only and
inhibit-modification-hooks? Those are new, right? They make sense,
though. Could we cover it with a test?
> + (vtable--insert table)))
> +
> (defun vtable--insert-line (table line line-number widths spacer
> &optional ellipsis ellipsis-width)
> (let ((start (point))
> + (buffer (vtable-buffer table))
> (columns (vtable-columns table))
> (column-colors
> (and (vtable-column-colors table)
> @@ -607,16 +626,18 @@ vtable--insert-line
> (concat
> (vtable--limit-string
> pre-computed (- (elt widths index)
> - (or ellipsis-width 0)))
> + (or ellipsis-width 0))
> + buffer)
> ellipsis)
> pre-computed))
> ;; Recompute widths.
> (t
> - (if (> (string-pixel-width value) (elt widths index))
> + (if (> (string-pixel-width value buffer) (elt widths i=
ndex))
> (concat
> (vtable--limit-string
> value (- (elt widths index)
> - (or ellipsis-width 0)))
> + (or ellipsis-width 0))
> + buffer)
> ellipsis)
> value))))
> (start (point))
> @@ -630,14 +651,15 @@ vtable--insert-line
> (list 'space
> :width (list
> (+ (- (elt widths index)
> - (string-pixel-width displa=
yed))
> + (string-pixel-width
> + displayed buffer))
> (if last 0 spacer)))))))
> ;; Align to the right.
> (insert (propertize " " 'display
> (list 'space
> :width (list (- (elt widths index)
> (string-pixel-wid=
th
> - displayed)))))
> + displayed buffer=
)))))
> displayed)
> (unless last
> (insert (propertize " " 'display
> @@ -664,16 +686,6 @@ vtable--insert-line
> (defun vtable--cache-key ()
> (cons (frame-terminal) (window-width)))
>=20=20
> -(defun vtable--current-cache ()
> - "Return the current cache for the table at point.
> -
> -In `vtable-insert', the lines and widths of the vtable text are computed
> -based on the current selected frame and window and stored in a cache.
> -Subsequent interaction with the text of the vtable should use that cache
> -via this function rather than by calling `vtable--cache-key' to look up
> -the cache."
> - (get-text-property (point) 'vtable-cache))
> -
> (defun vtable--clear-cache (table)
> (setf (gethash (vtable--cache-key) (slot-value table '-cache)) nil))
>=20=20
> @@ -718,6 +730,7 @@ vtable--indicator
> (defun vtable--insert-header-line (table widths spacer)
> ;; Insert the header directly into the buffer.
> (let ((start (point))
> + (buffer (vtable-buffer table))
> (divider (vtable-divider table))
> (cmap (define-keymap
> "<header-line> <drag-mouse-1>" #'vtable--drag-resize-col=
umn
> @@ -737,14 +750,15 @@ vtable--insert-header-line
> 'keymap cmap))
> (start (point))
> (indicator (vtable--indicator table index))
> - (indicator-width (string-pixel-width indicator))
> + (indicator-width (string-pixel-width indicator buffer))
> (last (=3D index (1- (length (vtable-columns table)))))
> displayed)
> (setq displayed
> - (if (> (string-pixel-width name)
> + (if (> (string-pixel-width name buffer)
> (- (elt widths index) indicator-width))
> (vtable--limit-string
> - name (- (elt widths index) indicator-width))
> + name (- (elt widths index) indicator-width)
> + buffer)
> name))
> (let* ((indicator-lead-width
> ;; We want the indicator to not be quite flush right.
> @@ -753,7 +767,7 @@ vtable--insert-header-line
> indicator-lead-width))
> (fill-width
> (+ (- (elt widths index)
> - (string-pixel-width displayed)
> + (string-pixel-width displayed buffer)
> indicator-width
> indicator-lead-width)
> (if last 0 spacer))))
> @@ -771,7 +785,8 @@ vtable--insert-header-line
> ;; This is the final column, and we have a sorting
> ;; indicator, and the table is too wide for the window.
> (let* ((pre-indicator (string-pixel-width
> - (buffer-substring (point-min) (point=
))))
> + (buffer-substring (point-min) (point=
))
> + buffer))
> (pre-fill
> (- (window-width nil t)
> pre-indicator
> @@ -850,14 +865,16 @@ vtable--set-header-line
> (buffer-substring (point-min) (1- (point-max))))))
> (vtable-header-mode 1))
>=20=20
> -(defun vtable--limit-string (string pixels)
> +
> +(defun vtable--limit-string (string pixels buffer)
> (while (and (length> string 0)
> - (> (string-pixel-width string) pixels))
> + (> (string-pixel-width string buffer) pixels))
> (setq string (substring string 0 (1- (length string)))))
> string)
>=20=20
> (defun vtable--char-width (table)
> - (string-pixel-width (propertize "x" 'face (vtable-face table))))
> + (string-pixel-width (propertize "x" 'face (vtable-face table))
> + (vtable-buffer table)))
>=20=20
> (defun vtable--compute-width (table spec)
> (cond
> @@ -936,7 +953,7 @@ vtable--compute-cached-line
> ;; We stash the computed width and string here -- if there are
> ;; no formatters/displayers, we'll be using the string, and
> ;; then won't have to recreate it.
> - (list value (string-pixel-width string) string)))
> + (list value (string-pixel-width string (vtable-buffer table)) str=
ing)))
> (vtable-columns table)))
>=20=20
> (defun vtable--make-keymap (table)
> @@ -967,20 +984,21 @@ vtable--make-keymap
> (vtable-keymap table))
> map)))
>=20=20
> -(defun vtable-revert ()
> - "Regenerate the table under point."
> - (let ((table (vtable-current-table))
> - (object (vtable-current-object))
> - (column (vtable-current-column))
> - (inhibit-read-only t))
> - (unless table
> - (user-error "No table under point"))
> - (delete-region (vtable-beginning-of-table) (vtable-end-of-table))
> - (vtable-insert table)
> - (when object
> - (vtable-goto-object object))
> - (when column
> - (vtable-goto-column column))))
> +(defun vtable-revert (&optional table)
> + "Regenerate TABLE, defaulting to the table under point."
> + (setq table (or table (vtable-current-table)))
> + (unless table
> + (user-error "No table under point"))
> + (with-current-buffer (vtable-buffer table)
> + (let ((object (vtable-current-object))
> + (column (vtable-current-column))
> + (inhibit-read-only t))
> + (delete-region (vtable-beginning-of-table) (vtable-end-of-table))
> + (vtable--insert table)
> + (when object
> + (vtable-goto-object object))
> + (when column
> + (vtable-goto-column column)))))
>=20=20
> ;;; Commands.
>=20=20
> @@ -1006,14 +1024,14 @@ vtable-narrow-current-column
> (- (* (vtable--char-width table) (or n 1=
))))))
>=20=20
> (defun vtable--alter-column-width (table column delta)
> - (let ((widths (vtable--cache-widths (vtable--current-cache))))
> + (let ((widths (vtable--cache-widths (vtable--current-cache table))))
> (setf (aref widths column)
> (max (* (vtable--char-width table) 2)
> (+ (aref widths column) delta)))
> ;; Store the width so it'll be respected on a revert.
> (setf (vtable-column-width (elt (vtable-columns table) column))
> (format "%dpx" (aref widths column)))
> - (vtable-revert)))
> + (vtable-revert table)))
>=20=20
> (defun vtable-widen-current-column (&optional n)
> "Widen the current column by N characters.
> @@ -1028,24 +1046,28 @@ vtable-previous-column
> (interactive)
> (vtable-goto-column
> (max 0 (1- (or (vtable-current-column)
> - (length (vtable--cache-widths (vtable--current-cache))=
))))))
> + (length (vtable--cache-widths
> + (vtable--current-cache (vtable-current-table)=
))))))))
>=20=20
> (defun vtable-next-column ()
> "Go to the next column."
> (interactive)
> (when (vtable-current-column)
> (vtable-goto-column
> - (min (1- (length (vtable--cache-widths (vtable--current-cache))))
> + (min (1- (length (vtable--cache-widths
> + (vtable--current-cache (vtable-current-table)))))
> (1+ (vtable-current-column))))))
>=20=20
> -(defun vtable-revert-command ()
> +(defun vtable-revert-command (&optional table)
> "Re-query data and regenerate the table under point."
This docstring should mention TABLE.
> (interactive)
> - (let ((table (vtable-current-table)))
> - (when (vtable-objects-function table)
> - (setf (vtable-objects table) (funcall (vtable-objects-function tab=
le))))
> - (vtable--clear-cache table))
> - (vtable-revert))
> + (setq table (or table (vtable-current-table)))
> + (unless table
> + (user-error "No table found"))
> + (when (vtable-objects-function table)
> + (setf (vtable-objects table) (funcall (vtable-objects-function table=
))))
> + (vtable--clear-cache table)
> + (vtable-revert table))
>=20=20
> (defun vtable-sort-by-current-column ()
> "Sort the table under point by the column under point."
> @@ -1067,8 +1089,8 @@ vtable-sort-by-current-column
> (if (eq (cdr last) 'ascend)
> 'descend
> 'ascend)
> - 'ascend))))))
> - (vtable-revert))
> + 'ascend)))))
> + (vtable-revert table)))
>=20=20
> (defun vtable-header-line-sort (e)
> "Sort a vtable from the header line."
> diff --git a/test/lisp/emacs-lisp/vtable-tests.el b/test/lisp/emacs-lisp/=
vtable-tests.el
> index 74fb8cc8139..83f826ea353 100644
> --- a/test/lisp/emacs-lisp/vtable-tests.el
> +++ b/test/lisp/emacs-lisp/vtable-tests.el
> @@ -27,16 +27,19 @@
> (require 'ert)
> (require 'ert-x)
>=20=20
> -(ert-deftest test-vstable-compute-columns ()
> +(defun vtable-tests--make-no-header-2-object-table ()
> + (make-vtable :columns '("a" "b" "c")
> + :objects '(("foo" 1 2)
> + ("bar" 3 :zot))
> + :insert nil))
> +
> +(ert-deftest test-vtable-compute-columns ()
> (should
> (equal (mapcar
> (lambda (column)
> (vtable-column-align column))
> (vtable--compute-columns
> - (make-vtable :columns '("a" "b" "c")
> - :objects '(("foo" 1 2)
> - ("bar" 3 :zot))
> - :insert nil)))
> + (vtable-tests--make-no-header-2-object-table)))
> '(left right left))))
>=20=20
> (ert-deftest test-vtable-insert-object ()
> @@ -69,4 +72,69 @@ test-vtable-insert-object
> (mapcar #'cadr (vtable-objects table))))
> (number-sequence 0 11))))
>=20=20
> +(ert-deftest test-vtable-unique-buffer ()
> + (let ((table (vtable-tests--make-no-header-2-object-table)))
> + (with-temp-buffer
> + (vtable-insert table)
> + ;; This will run but fail on Emacs pre 31 vtable.
> + (should-error (vtable-insert table))
> + ;; This will run only on Emacs 31+ vtable.
> + (when (> emacs-major-version 30)
> + (should-error (vtable-set-buffer table (current-buffer)))))))
> +
> +(ert-deftest test-vtable-non-current-buffer-insert-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (should (=3D (count-lines (point-min) (point-max)) 2))
> + (with-temp-buffer
> + (vtable-insert-object table obj))
> + (should (=3D (count-lines (point-min) (point-max)) 3)))))
> +
> +(ert-deftest test-vtable-non-current-buffer-remove-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (vtable-insert-object table obj)
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (with-temp-buffer
> + (vtable-remove-object table obj))
> + (should (=3D (count-lines (point-min) (point-max)) 2)))))
> +
> +(ert-deftest test-vtable-non-current-buffer-update-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5))
> + (obj-2 '("qux" 6 7)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (vtable-insert-object table obj)
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (let ((line-2 (progn
> + (goto-char (point-min))
> + (forward-line 2)
> + (buffer-substring (point) (point-max)))))
> + (with-temp-buffer
> + (vtable-update-object table obj-2 obj))
> + (let ((line-2-new (progn
> + (goto-char (point-min))
> + (forward-line 2)
> + (buffer-substring (point) (point-max)))))
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (should (not (string=3D line-2 line-2-new))))))))
> +
> +(ert-deftest test-vtable--limit-string-with-face-remapped-buffer ()
> + (with-temp-buffer
> + (let ((text (propertize "XXXXX"
> + 'face 'variable-pitch)))
> + (face-remap-add-relative 'default :height 1.5)
> + (if (> emacs-major-version 30)
> + (should (eq
> + 2
> + (length (vtable--limit-string text 50 (current-buffer=
)))))
> + (should (eq
> + 2
> + (length (vtable--limit-string text 50))))))))
> +
> ;;; vtable-tests.el ends here
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 11 Dec 2025 19:31:48 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 11 14:31:48 2025 Received: from localhost ([127.0.0.1]:47872 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vTmOB-0004pZ-JN for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 14:31:48 -0500 Received: from mail-ua1-x92c.google.com ([2607:f8b0:4864:20::92c]:49362) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vTmO8-0004p2-8q for 79982 <at> debbugs.gnu.org; Thu, 11 Dec 2025 14:31:45 -0500 Received: by mail-ua1-x92c.google.com with SMTP id a1e0cc1a2514c-93f5ca8387eso75758241.2 for <79982 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 11:31:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765481498; x=1766086298; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=LYrV0E5X0fzuMM74iMuyIHjQjZJdNTHNj8sGnWN2CSM=; b=Bw+5NDxbx4fQXjbO+T8HRLjrRBWeQY0T9EmgLUdwYrMDHDy33XGjiIXh9SQJBjStHZ T5mTvVtcewB65/u5Sd8SaiYKCyHSo5rR+qJOTnAmvER87qdYaqvIXiYcMT50LnWkuQDt flD1l3/T639tDGRPl9oDumkYACHpyc9oSC40bs08PuVOU1nNQR7s9z2Os884OSmOuxJb EQHDaO4XPB8i8HrgmjoM5r0HZtJ9dth0V6Ay4wz4az/ySi7Zbrq89iPLjhWCfm7saDmE vFWbXJk1mctCbhYp9YKHfQ9VsvaWpyq2RDwuLhy0IarL/hGJbyZgHZchjWpStDspUwsl Yv5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765481498; x=1766086298; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=LYrV0E5X0fzuMM74iMuyIHjQjZJdNTHNj8sGnWN2CSM=; b=KhTDBr7kFeWqbAjbc3cmftRG2vcNEvUPNWiNejItwDRmA4gvf9NMnU6m0de4rIlyWr uLgAGJrB9bcEMhTbwr+Cocc9yPd9ojtcy5jbHx/wyFvMJ8eguCsoeAAEU2qaJKrl0KH/ ZsK0kn55H77Krs2vXg+t9AugIrA7XWwbEEd1aIAXwc27VAVkHvXScvwORgtZZxQpCBBt MlxDuyLa9ucSvNgcW9NfWlfVAe2aKrhuP/TrEdu9qRRtpLXToO0t1ST9kOrgxV95fHQx vm4xobmdTScNJt8KjS1ZuAkMd+igWNUC3MAsLrKZGON8UA3/bykFuyqVmULbi3g2UDPB G80Q== X-Forwarded-Encrypted: i=1; AJvYcCV9r6vYOLF8mWdWutG0Dpz+rAL+nHhB27oVFk4QaNVM/B8LeTyPeGicJI0tdZf6uH0DQIWekg==@debbugs.gnu.org X-Gm-Message-State: AOJu0YxkdR9L8ZmnEBZ4wZYI+Xgg/vkW+9XzatCNBnhUOzcJhyD6hGOF GL69jgjVraXDOevP7/4keNS+dJkjMy96OfEg4ll8jurvV3Eia9fFh/lLG/nFB2bLtujm7cerpIc dOnYL7LYjquWiOaymFVcwwQOkxYFvvW0= X-Gm-Gg: AY/fxX7Y1rQBWdYtZ+Re2yOtkfkO+1uIozSL1TDY+Gv6j9eZ9Zm12Ul5NavuRlYALPK znpid/geTf3I15peuo4izz8MH8brFH7KPIeGKJ0QJf1R0dp1CTClGXPjKIycxmjiZSnv5av6oR2 GIem6RUoVSnqy09iUbx/FJ4gzqPh16iAMu8d+l2SfJLkuYjPJw4isvbJoKXFwsek+6hCRn496HB y27Ramdxp0cSC5Qpt74RuekuMYmoq3q0sI7z4QJdIj1z9KTRnm1TGOV+UmbxUbfM9QJgM8= X-Google-Smtp-Source: AGHT+IHaXNcDwaDHowkU4YbJnJiLl+wh6+cQT5C1UM9JONIuzqbOzi48wvLl3J6s3nS6Qxszit38jVTzYhH1MOqVOeM= X-Received: by 2002:a05:6102:3e0b:b0:5db:d1b2:c0d4 with SMTP id ada2fe7eead31-5e571eede21mr2789299137.31.1765481498438; Thu, 11 Dec 2025 11:31:38 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> <iercy4kswsa.fsf_-_@HIDDEN> In-Reply-To: <iercy4kswsa.fsf_-_@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Thu, 11 Dec 2025 14:31:26 -0500 X-Gm-Features: AQt7F2p0UX3E9McM1bJ0pf70tamQUx5JKaOosv6aonDvVkzK5OfyHjrxZxZjUx0 Message-ID: <CAN+1HbrxjQxt6iDSUXc_x-q9omstHj9Cxvri+9trn7mp9tXB+w@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/mixed; boundary="0000000000009290f30645b23193" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000009290f30645b23193 Content-Type: multipart/alternative; boundary="0000000000009290f20645b23191" --0000000000009290f20645b23191 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Dec 11, 2025 at 1:23=E2=80=AFPM Spencer Baugh <sbaugh@HIDDEN= m> wrote: > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > One alternative is to save -current-cache-key instead and look it up in > -cache, but saving -current-cache is fine. > > A thought for the future, not for this patch: We probably should have a > -current-window-width slot of the vtable, which is set whenever we > vtable-revert, and then use it in all the places that currently call > window-width. That would make us more correct in a bunch of cases, I > think. Then the cache key would be (cons (frame-terminal) > -current-window-width), so if we just saved -current-frame-terminal as > well, we would be able to compute (vtable--current-cache-key table), and > remove -current-cache/-current-cache-key. > We can refine these later, for sure. It's an internal detail. > (-cached-keymap :initform nil) > > (-has-column-spec :initform nil)) > > "An object to hold the data for a table.") > > @@ -221,6 +223,20 @@ vtable--face-color > > > > ;;; Interface utility functions. > > > > +(defun vtable-buffer (&optional table) > > This should be a mandatory argument. > > And if it's a mandatory argument then this can just be defined with a > :accessor keyword argument in the defclass. > +(defun vtable-set-buffer (buffer &optional table) > But also I think this then just becomes a trivial > > (setf (vtable-buffer table) buffer) > Also while we're at it, I think the slot name should be just 'buffer not > '-buffer. > Right, good, done. <snip> > + (let* ((cache (vtable--current-cache table)) > > + (inhibit-read-only t) > > + (lines (vtable--cache-lines cache)) > > + (elem (if location ; This binding mirrors the binding of > `pos' above. > > + (if (integerp location) > > + (nth location lines) > > + (or (assq location lines) > > + (and before (car lines)))) > > + (if before (car lines)))) > > + (pos (memq elem lines)) > > + (line (cons object (vtable--compute-cached-line table > object)))) > > + (with-current-buffer (vtable-buffer table) > > + (save-excursion > > + (vtable-goto-table table) > > + (let* ((ellipsis (if (vtable-ellipsis table) > > + (propertize (truncate-string-ellipsis) > > + 'face (vtable-face table)) > > + "")) > > + (ellipsis-width (string-pixel-width ellipsis > (current-buffer))) > > Can we move these let-bindings out to the outer let-binding now? > I'd prefer if they stay close to where they're being used, at least here, where the cache update is clearly separate from the buffer update. > + (keymap (get-text-property (point) 'keymap))) > > I guess we could get this from vtable-keymap now? In which case it can > also move to the outer let-binding? > It would have to be from the -cached-keymap slot. Let's leave the keymaps as is for the time being. We have patches to refine and expand their functionality coming. > -(defun vtable-insert (table) > > +(defun vtable--insert (table) > > (let* ((spacer (vtable--spacer table)) > > (start (point)) > > (ellipsis (if (vtable-ellipsis table) > > (propertize (truncate-string-ellipsis) > > 'face (vtable-face table)) > > "")) > > - (ellipsis-width (string-pixel-width ellipsis)) > > + (ellipsis-width (string-pixel-width ellipsis (current-buffer)= )) > > Should we use vtable-buffer rather than current-buffer here, I guess? > Easy enough. > > > + (if-let* ((table-buffer (vtable-buffer table))) > > + (if (eq table-buffer (current-buffer)) > > + (error "A vtable cannot be inserted more than once into a > buffer") > > I don't think this should be an error. It's reasonable for Lisp code to > clear a buffer and then want to reinsert a vtable into it. If we're > inserting into the same buffer, there's no problem. > > I guess your concern is inserting a vtable when it already is present. > I don't think there's a good way to prevent that right now, > unfortunately, without also breaking the legitimate use case of clearing > a buffer then reinserting the vtable. > > > + (error "A vtable cannot be inserted into more than one > buffer"))) > > I agree that this should be an error, of course. > Duly refined and the docstring now reads "A table may be reinserted into its own buffer, but insert only one instance per buffer. This restriction needs to be enforced by the caller." We can build a mechanic later that enforces this. > +(defun vtable--current-cache (&optional table) > > + "Return the current cache for TABLE or the table under point. > > > > In `vtable-insert', the lines and widths of the vtable text are comput= ed > > based on the current selected frame and window and stored in a cache. > > Subsequent interaction with the text of the vtable should use that cac= he > > via this function rather than by calling `vtable--cache-key' to look u= p > > the cache." > > - (get-text-property (point) 'vtable-cache)) > > + (slot-value (or table (vtable-current-table)) '-current-cache)) > > Can we make TABLE just be a mandatory argument? It looks to me like > this would just require vtable-next-column and vtable-previous-column to > run (vtable--current-cache (vtable-current-table)) > > Then this function just becomes another :accessor. > Good, done. > +(defun vtable--set-current-cache (table cache) > > + "Set the current cache for the table." > > + (setf (slot-value table '-current-cache) cache)) > I've removed that function, too. Fresh patch attached. -St=C3=A9phane --0000000000009290f20645b23191 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Thu, Dec 11, 2025 at 1:23=E2=80=AFPM Spencer Baugh <<a href=3D"mailto= :sbaugh@HIDDEN">sbaugh@HIDDEN</a>> wrote:</span></div></= div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"g= mail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204= ,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:shipm= ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br><b= r> One alternative is to save -current-cache-key instead and look it up in<br> -cache, but saving -current-cache is fine.<br> <br> A thought for the future, not for this patch: We probably should have a<br> -current-window-width slot of the vtable, which is set whenever we<br> vtable-revert, and then use it in all the places that currently call<br> window-width.=C2=A0 That would make us more correct in a bunch of cases, I<= br> think.=C2=A0 Then the cache key would be (cons (frame-terminal)<br> -current-window-width), so if we just saved -current-frame-terminal as<br> well, we would be able to compute (vtable--current-cache-key table), and<br= > remove -current-cache/-current-cache-key.<br></blockquote><div><br></div><d= iv><div class=3D"gmail_default" style=3D"font-family:monospace">We can refi= ne these later, for sure.=C2=A0 It's an internal detail.</div></div><di= v><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0= .8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> >=C2=A0 =C2=A0 =C2=A0(-cached-keymap :initform nil)<br> >=C2=A0 =C2=A0 =C2=A0(-has-column-spec :initform nil))<br> >=C2=A0 =C2=A0 "An object to hold the data for a table.")<br> > @@ -221,6 +223,20 @@ vtable--face-color<br> >=C2=A0 <br> >=C2=A0 ;;; Interface utility functions.<br> >=C2=A0 <br> > +(defun vtable-buffer (&optional table)<br> <br> This should be a mandatory argument.<br> <br> And if it's a mandatory argument then this can just be defined with a<b= r> :accessor keyword argument in the defclass.</blockquote>> +(defun vtable= -set-buffer (buffer &optional table)<br><blockquote class=3D"gmail_quot= e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)= ;padding-left:1ex">But also I think this then just becomes a trivial<br><br= >(setf (vtable-buffer table) buffer)<br>=C2=A0Also while we're at it, I= think the slot name should be just 'buffer not<br> '-buffer.<br></blockquote><div><br></div><div><div class=3D"gmail_defau= lt" style=3D"font-family:monospace">Right, good, done.</div></div><div clas= s=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D= "gmail_default" style=3D"font-family:monospace"><snip></div><div clas= s=3D"gmail_default" style=3D"font-family:monospace"><br></div><blockquote c= lass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli= d rgb(204,204,204);padding-left:1ex"> > +=C2=A0 =C2=A0 (let* ((cache (vtable--current-cache table))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(inhibit-read-only t)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lines (vtable--cache-lines = cache))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(elem (if location=C2=A0 ; T= his binding mirrors the binding of `pos' above.<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0(if (integerp location)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0(nth location lines)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0(or (assq location lines)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0(and before (car lines))))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= (if before (car lines))))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(pos (memq elem lines))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(line (cons object (vtable--= compute-cached-line table object))))<br> > +=C2=A0 =C2=A0 =C2=A0 (with-current-buffer (vtable-buffer table)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-goto-table table)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let* ((ellipsis (if (vtable-ellip= sis table)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(propertize (truncate-string-elli= psis)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0'face (vtable-face table))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0""))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellips= is-width (string-pixel-width ellipsis (current-buffer)))<br> <br> Can we move these let-bindings out to the outer let-binding now?<br></block= quote><div><br></div><div class=3D"gmail_default" style=3D"font-family:mono= space">I'd prefer if they stay close to where they're being used, a= t least here, where the cache update is clearly separate from the buffer up= date.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br= ></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;= border-left:1px solid rgb(204,204,204);padding-left:1ex"> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(keymap= (get-text-property (point) 'keymap)))<br> <br> I guess we could get this from vtable-keymap now?=C2=A0 In which case it ca= n<br> also move to the outer let-binding?<br></blockquote><div><br></div><div><di= v class=3D"gmail_default" style=3D"font-family:monospace">It would have to = be from the -cached-keymap slot.=C2=A0 Let's leave the keymaps as is fo= r the time being.=C2=A0 We have patches to refine and expand their function= ality coming.</div></div><div><br></div><blockquote class=3D"gmail_quote" s= tyle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pad= ding-left:1ex">> -(defun vtable-insert (table)<br> > +(defun vtable--insert (table)<br> >=C2=A0 =C2=A0 (let* ((spacer (vtable--spacer table))<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(start (point))<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis (if (vtable-ellipsis= table)<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0(propertize (truncate-string-ellipsis)<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'face (vt= able-face table))<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0""))<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis-width (string-pixel-width= ellipsis))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis-width (string-pixel-width= ellipsis (current-buffer)))<br> <br> Should we use vtable-buffer rather than current-buffer here, I guess?<br></= blockquote><div><br></div><div><div class=3D"gmail_default" style=3D"font-f= amily:monospace">Easy enough.</div></div><blockquote class=3D"gmail_quote" = style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pa= dding-left:1ex"><br> > +=C2=A0 (if-let* ((table-buffer (vtable-buffer table)))<br> > +=C2=A0 =C2=A0 =C2=A0 (if (eq table-buffer (current-buffer))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "A vtable cannot be in= serted more than once into a buffer")<br> <br> I don't think this should be an error.=C2=A0 It's reasonable for Li= sp code to<br> clear a buffer and then want to reinsert a vtable into it.=C2=A0 If we'= re<br> inserting into the same buffer, there's no problem.<br> <br> I guess your concern is inserting a vtable when it already is present.<br> I don't think there's a good way to prevent that right now,<br> unfortunately, without also breaking the legitimate use case of clearing<br= > a buffer then reinserting the vtable.<br> <br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "A vtable cannot be inserted = into more than one buffer")))<br> <br> I agree that this should be an error, of course.<br></blockquote><div><br><= /div><div class=3D"gmail_default" style=3D""><font face=3D"monospace">Duly = refined and the docstring now reads "A table may be reinserted into it= s own buffer, but insert only=C2=A0one instance per buffer.=C2=A0 This rest= riction needs to be enforced by the<span class=3D"gmail_default" style=3D""= >=C2=A0</span>caller.<span class=3D"gmail_default" style=3D"">"=C2=A0 = We can build a mechanic later that enforces this.</span></font></div><div c= lass=3D"gmail_default" style=3D"font-family:monospace"><br></div><blockquot= e class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px s= olid rgb(204,204,204);padding-left:1ex">> +(defun vtable--current-cache = (&optional table)<br> > +=C2=A0 "Return the current cache for TABLE or the table under po= int.<br> >=C2=A0 <br> >=C2=A0 In `vtable-insert', the lines and widths of the vtable text = are computed<br> >=C2=A0 based on the current selected frame and window and stored in a c= ache.<br> >=C2=A0 Subsequent interaction with the text of the vtable should use th= at cache<br> >=C2=A0 via this function rather than by calling `vtable--cache-key'= to look up<br> >=C2=A0 the cache."<br> > -=C2=A0 (get-text-property (point) 'vtable-cache))<br> > +=C2=A0 (slot-value (or table (vtable-current-table)) '-current-ca= che))<br> <br> Can we make TABLE just be a mandatory argument?=C2=A0 It looks to me like<b= r> this would just require vtable-next-column and vtable-previous-column to<br= > run (vtable--current-cache (vtable-current-table))<br> <br> Then this function just becomes another :accessor.<br></blockquote><div><br= ></div><div class=3D"gmail_default" style=3D"font-family:monospace">Good, d= one.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br>= </div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;b= order-left:1px solid rgb(204,204,204);padding-left:1ex">> +(defun vtable= --set-current-cache (table cache)<br> > +=C2=A0 "Set the current cache for the table."<br> > +=C2=A0 (setf (slot-value table '-current-cache) cache))<br></bloc= kquote><div><br></div><div><div class=3D"gmail_default" style=3D"font-famil= y:monospace">I've removed that function, too.</div></div><div class=3D"= gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"gmai= l_default" style=3D"font-family:monospace">Fresh patch attached.</div><div = class=3D"gmail_default" style=3D"font-family:monospace"><br></div><div clas= s=3D"gmail_default" style=3D"font-family:monospace">-St=C3=A9phane=C2=A0</d= iv></div></div> --0000000000009290f20645b23191-- --0000000000009290f30645b23193 Content-Type: application/octet-stream; name="0001-Add-vtable-buffer-slot.patch" Content-Disposition: attachment; filename="0001-Add-vtable-buffer-slot.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mj1u3bvy0> X-Attachment-Id: f_mj1u3bvy0 RnJvbSA0NTA1YzYzZWZhYTljZTEyNGE1N2M3OTMxNzUzM2ZhM2YwMjk4ZjJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTAgRGVjIDIwMjUgMDk6MjA6MDIgLTA1MDAK U3ViamVjdDogW1BBVENIXSBBZGQgdnRhYmxlIGJ1ZmZlciBzbG90CgpUaGlzIHNvbHZlcyBmb3Ig YmFja2dyb3VuZCB2dGFibGUgbXV0YXRpb25zLCBpLmUuLCB1cGRhdGVzCmluaXRpYXRlZCBmcm9t IGJ1ZmZlcnMgb3RoZXIgdGhhbiB0aGUgdnRhYmxlIGJ1ZmZlciwgYW5kIGZvcgpidWZmZXItYWRq dXN0ZWQgc3RyaW5nLXBpeGVsLXdpZHRoIGNvbXB1dGF0aW9ucy4KCiogbGlzcC9lbWFjcy1saXNw L3Z0YWJsZS5lbCAodnRhYmxlKTogTmV3ICctYnVmZmVyJyBzbG90LgoodnRhYmxlLWJ1ZmZlcik6 Cih2dGFibGUtc2V0LWJ1ZmZlcik6IE5ldyBmdW5jdGlvbi4KKHZ0YWJsZS11cGRhdGUtb2JqZWN0 KToKKHZ0YWJsZS1yZW1vdmUtb2JqZWN0KToKKHZ0YWJsZS1pbnNlcnQtb2JqZWN0KTogV3JhcCBv cGVyYXRpb24gd2l0aCB0aGUgdnRhYmxlIGJ1ZmZlci4KKHZ0YWJsZS0taW5zZXJ0KTogU3BsaXQg ZnJvbSBvbGQgJ3Z0YWJsZS1pbnNlcnQnLgoodnRhYmxlLWluc2VydCk6IEluc2VydCB0YWJsZSBh bmQgcmVjb3JkIHRoZSBidWZmZXIuCih2dGFibGUtLWluc2VydC1saW5lKToKKHZ0YWJsZS0taW5z ZXJ0LWhlYWRlci1saW5lKTogVXNlICd2dGFibGUtYnVmZmVyJyBmb3IgcGl4ZWwtd2lkdGggY29t cHV0YXRpb24uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6Cih2dGFibGUtLWNoYXItd2lkdGgpOiBQ YXNzIGJ1ZmZlciB0byAnc3RyaW5nLXBpeGVsLXdpZHRoJy4KKHZ0YWJsZS1yZXZlcnQpOiBOZXcg b3B0aW9uYWwgdGFibGUgYXJndW1lbnQuCih2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCk6Cih2 dGFibGUtcmV2ZXJ0LWNvbW1hbmQpOgoodnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4pOiBD YWxsICd2dGFibGUtcmV2ZXJ0JyB3aXRoIHRoZSB0YWJsZS4KCiogdGVzdC9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLXRlc3RzLmVsCih2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0 LXRhYmxlKTogTmV3IGhlbHBlcgpmdW5jdGlvbi4KKHRlc3QtdnN0YWJsZS1jb21wdXRlLWNvbHVt bnMpOiBDb3JyZWN0IHR5cG8gaW4gdGVzdCBuYW1lLiAgVXNlCm5ldyBoZWxwZXIgZnVuY3Rpb24u Cih0ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyKQoodGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVm ZmVyLWluc2VydC1vYmplY3QpCih0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3Zl LW9iamVjdCkKKHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUtb2JqZWN0KQoo dGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRoLWZhY2UtcmVtYXBwZWQtYnVmZmVyKTogTmV3 IHRlc3QuCi0tLQogbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCAgICAgICAgICAgIHwgMjc0ICsr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRl c3RzLmVsIHwgIDc4ICsrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDIyMSBpbnNlcnRpb25zKCsp LCAxMzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5l bCBiL2xpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwKaW5kZXggYmNkZDI4MGZiOTIuLmNjZGRlNDk4 MzBlIDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVsCisrKyBiL2xpc3AvZW1h Y3MtbGlzcC92dGFibGUuZWwKQEAgLTY3LDggKzY3LDEwIEBAIHZ0YWJsZQogICAgKGVsbGlwc2lz IDppbml0YXJnIDplbGxpcHNpcyA6YWNjZXNzb3IgdnRhYmxlLWVsbGlwc2lzKQogICAgKGNvbHVt bi1jb2xvcnMgOmluaXRhcmcgOmNvbHVtbi1jb2xvcnMgOmFjY2Vzc29yIHZ0YWJsZS1jb2x1bW4t Y29sb3JzKQogICAgKHJvdy1jb2xvcnMgOmluaXRhcmcgOnJvdy1jb2xvcnMgOmFjY2Vzc29yIHZ0 YWJsZS1yb3ctY29sb3JzKQorICAgKGJ1ZmZlciA6aW5pdGZvcm0gbmlsIDphY2Nlc3NvciB2dGFi bGUtYnVmZmVyKQogICAgKC1jYWNoZWQtY29sb3JzIDppbml0Zm9ybSBuaWwpCiAgICAoLWNhY2hl IDppbml0Zm9ybSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXF1YWwpKQorICAgKC1jdXJyZW50 LWNhY2hlIDppbml0Zm9ybSBuaWwgOmFjY2Vzc29yIHZ0YWJsZS0tY3VycmVudC1jYWNoZSkKICAg ICgtY2FjaGVkLWtleW1hcCA6aW5pdGZvcm0gbmlsKQogICAgKC1oYXMtY29sdW1uLXNwZWMgOmlu aXRmb3JtIG5pbCkpCiAgICJBbiBvYmplY3QgdG8gaG9sZCB0aGUgZGF0YSBmb3IgYSB0YWJsZS4i KQpAQCAtMzAxLDE0ICszMDMsMTQgQEAgdnRhYmxlLXVwZGF0ZS1vYmplY3QKICAgICAgICh1bmxl c3MgKGNkciBvYmplY3RzKQogICAgICAgICAoZXJyb3IgIkNhbid0IGZpbmQgdGhlIG9sZCBvYmpl Y3QiKSkKICAgICAgIChzZXRjYXIgKGNkciBvYmplY3RzKSBvYmplY3QpKQotICAgIDs7IFRoZW4g dXBkYXRlIHRoZSByZW5kZXJlZCB2dGFibGUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotICAgIChp Zi1sZXQqICgoY2FjaGUgKHZ0YWJsZS0tY3VycmVudC1jYWNoZSkpCi0gICAgICAgICAgICAgKGxp bmUtbnVtYmVyIChzZXEtcG9zaXRpb24gKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkLW9iamVjdAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGEgYikKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbCAoY2FyIGEpIGIpKSkpCi0gICAg ICAgICAgICAgKGxpbmUgKGVsdCAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkgbGluZS1udW1i ZXIpKSkKLSAgICAgICAgKHByb2duCisgICAgOzsgVGhlbiB1cGRhdGUgdGhlIHJlbmRlcmVkIHZ0 YWJsZSBpbiBpdHMgYnVmZmVyLgorICAgIChpZi1sZXQqICgoY2FjaGUgKHZ0YWJsZS0tY3VycmVu dC1jYWNoZSB0YWJsZSkpCisgICAgICAgICAgICAgIChsaW5lLW51bWJlciAoc2VxLXBvc2l0aW9u ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvbGQtb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsYW1iZGEgKGEgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZXF1YWwgKGNhciBhKSBiKSkpKQorICAgICAgICAgICAgICAobGluZSAoZWx0 ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSBsaW5lLW51bWJlcikpKQorICAgICAgICAod2l0 aC1jdXJyZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKICAgICAgICAgICAoc2V0Y2Fy IGxpbmUgb2JqZWN0KQogICAgICAgICAgIChzZXRjZHIgbGluZSAodnRhYmxlLS1jb21wdXRlLWNh Y2hlZC1saW5lIHRhYmxlIG9iamVjdCkpCiAgICAgICAgICAgOzsgLi4uIGFuZCByZWRpc3BsYXkg dGhlIGxpbmUgaW4gcXVlc3Rpb24uCkBAIC0zMjEsOCArMzIzLDcgQEAgdnRhYmxlLXVwZGF0ZS1v YmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUt d2lkdGhzIGNhY2hlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxl LS1zcGFjZXIgdGFibGUpKQogICAgICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFy dCAocG9pbnQpIChsaXN0ICdrZXltYXAga2V5bWFwCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUtY2FjaGUg Y2FjaGUpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ3Z0YWJsZSB0YWJsZSkpKSkKICAgICAgICAgICA7OyBXZSBtYXkgaGF2ZSBpbnNl cnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkKICAgICAgICAgICA7 OyBhbGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCiAgICAgICAgICAgKHZ0YWJsZS0t cmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAoY2RyIGxpbmUpKSkKQEAgLTMzNCwxNCArMzM1LDE1 IEBAIHZ0YWJsZS1yZW1vdmUtb2JqZWN0CiAgIDs7IEZpcnN0IHJlbW92ZSBmcm9tIHRoZSBvYmpl Y3RzLgogICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChkZWxxIG9iamVjdCAodnRhYmxl LW9iamVjdHMgdGFibGUpKSkKICAgOzsgVGhlbiBhZGp1c3QgdGhlIGNhY2hlIGFuZCBkaXNwbGF5 LgotICAoc2F2ZS1leGN1cnNpb24KLSAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAg KGxldCAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAgIChpbmhpYml0 LXJlYWQtb25seSB0KSkKLSAgICAgIChzZXRjYXIgY2FjaGUgKGRlbHEgKGFzc3Egb2JqZWN0ICh2 dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0 YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpKSkKLSAgICAgICh3aGVuICh2dGFibGUtZ290by1vYmpl Y3Qgb2JqZWN0KQotICAgICAgICAoZGVsZXRlLWxpbmUpKSkpKQorICAod2l0aC1jdXJyZW50LWJ1 ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICh2 dGFibGUtZ290by10YWJsZSB0YWJsZSkKKyAgICAgIChsZXQgKChjYWNoZSAodnRhYmxlLS1jdXJy ZW50LWNhY2hlIHRhYmxlKSkKKyAgICAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KSkKKyAg ICAgICAgKHNldGNhciBjYWNoZSAoZGVscSAoYXNzcSBvYmplY3QgKHZ0YWJsZS0tY2FjaGUtbGlu ZXMgY2FjaGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNhY2hlLWxp bmVzIGNhY2hlKSkpCisgICAgICAgICh3aGVuICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0KQor ICAgICAgICAgIChkZWxldGUtbGluZSkpKSkpKQogCiA7OyBGSVhNRTogVGhlIGZhY3QgdGhhdCB0 aGUgYGxvY2F0aW9uJyBhcmd1bWVudCBvZgogOzsgYHZ0YWJsZS1pbnNlcnQtb2JqZWN0JyBjYW4g YmUgYW4gaW50ZWdlciBhbmQgaXMgdGhlbiBpbnRlcnByZXRlZCBhcwpAQCAtMzY5LDggKzM3MSw5 IEBAIHZ0YWJsZS1pbnNlcnQtb2JqZWN0CiAgICAgICAocHJvZ24KICAgICAgICAgKHNldGYgKHZ0 YWJsZS1vYmplY3RzIHRhYmxlKSAobGlzdCBvYmplY3QpKQogICAgICAgICAodnRhYmxlLS1yZWNv bXB1dGUtbnVtZXJpY2FsIHRhYmxlICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUg b2JqZWN0KSkKLSAgICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQotICAgICAgICAodnRh YmxlLXJldmVydC1jb21tYW5kKSkKKyAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKHZ0YWJs ZS1idWZmZXIgdGFibGUpCisgICAgICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQorICAg ICAgICAgICh2dGFibGUtcmV2ZXJ0LWNvbW1hbmQpKSkKICAgICA7OyBGaXJzdCBpbnNlcnQgaW50 byB0aGUgb2JqZWN0cy4KICAgICAobGV0ICgocG9zIChpZiBsb2NhdGlvbgogICAgICAgICAgICAg ICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCkBAIC0zOTgsNTYgKzQwMSw1NyBAQCB2dGFi bGUtaW5zZXJ0LW9iamVjdAogICAgICAgICAgIDs7IE90aGVyd2lzZSwgYXBwZW5kIHRoZSBvYmpl Y3QuCiAgICAgICAgICAgKG5jb25jICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGxpc3Qgb2JqZWN0 KSkpKSkKICAgICA7OyBUaGVuIGFkanVzdCB0aGUgY2FjaGUgYW5kIGRpc3BsYXkuCi0gICAgKHNh dmUtZXhjdXJzaW9uCi0gICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAgICAobGV0 KiAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAgICAgIChpbmhpYml0 LXJlYWQtb25seSB0KQotICAgICAgICAgICAgIChrZXltYXAgKGdldC10ZXh0LXByb3BlcnR5IChw b2ludCkgJ2tleW1hcCkpCi0gICAgICAgICAgICAgKGVsbGlwc2lzIChpZiAodnRhYmxlLWVsbGlw c2lzIHRhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKHRydW5j YXRlLXN0cmluZy1lbGxpcHNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg IiIpKQotICAgICAgICAgICAgIChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGVs bGlwc2lzKSkKLSAgICAgICAgICAgICAobGluZXMgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUp KQotICAgICAgICAgICAgIChlbGVtIChpZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRpbmcgbWlycm9y cyB0aGUgYmluZGluZyBvZiBgcG9zJyBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgKGlm IChpbnRlZ2VycCBsb2NhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChudGggbG9j YXRpb24gbGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxvY2F0aW9u IGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIGJlZm9yZSAoY2FyIGxp bmVzKSkpKQotICAgICAgICAgICAgICAgICAgICAgKGlmIGJlZm9yZSAoY2FyIGxpbmVzKSkpKQot ICAgICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCi0gICAgICAgICAgICAgKGxpbmUg KGNvbnMgb2JqZWN0ICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUgb2JqZWN0KSkp KQotICAgICAgICAoaWYgKG9yIGJlZm9yZQotICAgICAgICAgICAgICAgIChhbmQgcG9zIChpbnRl Z2VycCBsb2NhdGlvbikpKQotICAgICAgICAgICAgOzsgQWRkIHRoZSBuZXcgb2JqZWN0IGJlZm9y ZTouCi0gICAgICAgICAgICAobGV0ICgob2xkLWxpbmUgKGNhciBwb3MpKSkKLSAgICAgICAgICAg ICAgKHNldGNhciBwb3MgbGluZSkKLSAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNvbnMgb2xk LWxpbmUgKGNkciBwb3MpKSkKLSAgICAgICAgICAgICAgKHVubGVzcyAodnRhYmxlLWdvdG8tb2Jq ZWN0IChjYXIgZWxlbSkpCi0gICAgICAgICAgICAgICAgKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFi bGUpKSkKLSAgICAgICAgICA7OyBPdGhlcndpc2UsIGFkZCB0aGUgb2JqZWN0IGFmdGVyLgotICAg ICAgICAgIChpZiBwb3MKLSAgICAgICAgICAgICAgOzsgU3BsaWNlIHRoZSBvYmplY3QgaW50byB0 aGUgbGlzdC4KLSAgICAgICAgICAgICAgKHByb2duCi0gICAgICAgICAgICAgICAgKHNldGNkciBw b3MgKGNvbnMgbGluZSAoY2RyIHBvcykpKQotICAgICAgICAgICAgICAgIChpZiAodnRhYmxlLWdv dG8tb2JqZWN0IGxvY2F0aW9uKQotICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIDEp ICA7IEluc2VydCAqYWZ0ZXIqLgotICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2YtdGFi bGUpKSkKLSAgICAgICAgICAgIDs7IE90aGVyd2lzZSwgYXBwZW5kIHRoZSBvYmplY3QuCi0gICAg ICAgICAgICAoc2V0Y2FyIGNhY2hlIChuY29uYyBsaW5lcyAobGlzdCBsaW5lKSkpCi0gICAgICAg ICAgICAodnRhYmxlLWVuZC1vZi10YWJsZSkpKQotICAgICAgICAobGV0ICgoc3RhcnQgKHBvaW50 KSkpCi0gICAgICAgICAgOzsgRklYTUU6IFdlIGhhdmUgdG8gYWRqdXN0IGNvbG9ycyBpbiBsaW5l cyBiZWxvdyB0aGlzIGlmIHdlCi0gICAgICAgICAgOzsgaGF2ZSA6cm93LWNvbG9ycy4KLSAgICAg ICAgICAodnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIDAKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpICh2dGFibGUtLXNwYWNl ciB0YWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyBlbGxpcHNp cy13aWR0aCkKLSAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpIChs aXN0ICdrZXltYXAga2V5bWFwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hlIGNhY2hlKSkpCi0gICAgICAgIDs7 IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2YWx1ZSBpbnRvIGEgcHJldmlv dXNseQotICAgICAgICA7OyBhbGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCi0gICAg ICAgICh2dGFibGUtLXJlY29tcHV0ZS1udW1lcmljYWwgdGFibGUgKGNkciBsaW5lKSkpKSkpCisg ICAgKGxldCogKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlIHRhYmxlKSkKKyAgICAgICAg ICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCisgICAgICAgICAgIChsaW5lcyAodnRhYmxlLS1jYWNo ZS1saW5lcyBjYWNoZSkpCisgICAgICAgICAgIChlbGVtIChpZiBsb2NhdGlvbiAgOyBUaGlzIGJp bmRpbmcgbWlycm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBhYm92ZS4KKyAgICAgICAgICAgICAg ICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAg KG50aCBsb2NhdGlvbiBsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxv Y2F0aW9uIGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBiZWZvcmUgKGNh ciBsaW5lcykpKSkKKyAgICAgICAgICAgICAgICAgICAoaWYgYmVmb3JlIChjYXIgbGluZXMpKSkp CisgICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCisgICAgICAgICAgIChsaW5lIChj b25zIG9iamVjdCAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpKSkK KyAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICAg ICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCisg ICAgICAgICAgKGxldCogKChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNpcyB0YWJsZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5n LWVsbGlwc2lzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdm YWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIi KSkKKyAgICAgICAgICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGgg ZWxsaXBzaXMgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgICAgICAgICAgICAgIChrZXltYXAgKGdl dC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2tleW1hcCkpKQorICAgICAgICAgICAgKGlmIChvciBi ZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgKGFuZCBwb3MgKGludGVnZXJwIGxvY2F0aW9uKSkp CisgICAgICAgICAgICAgICAgOzsgQWRkIHRoZSBuZXcgb2JqZWN0IGJlZm9yZTouCisgICAgICAg ICAgICAgICAgKGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCisgICAgICAgICAgICAgICAgICAo c2V0Y2FyIHBvcyBsaW5lKQorICAgICAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNvbnMgb2xk LWxpbmUgKGNkciBwb3MpKSkKKyAgICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3Rv LW9iamVjdCAoY2FyIGVsZW0pKQorICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWJlZ2lubmlu Zy1vZi10YWJsZSkpKQorICAgICAgICAgICAgICA7OyBPdGhlcndpc2UsIGFkZCB0aGUgb2JqZWN0 IGFmdGVyLgorICAgICAgICAgICAgICAoaWYgcG9zCisgICAgICAgICAgICAgICAgICA7OyBTcGxp Y2UgdGhlIG9iamVjdCBpbnRvIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgICAgKHByb2duCisg ICAgICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3MpKSkKKyAg ICAgICAgICAgICAgICAgICAgKGlmICh2dGFibGUtZ290by1vYmplY3QgbG9jYXRpb24pCisgICAg ICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIDEpICA7IEluc2VydCAqYWZ0ZXIqLgor ICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisgICAgICAgICAg ICAgICAgOzsgT3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KKyAgICAgICAgICAgICAgICAo c2V0Y2FyIGNhY2hlIChuY29uYyBsaW5lcyAobGlzdCBsaW5lKSkpCisgICAgICAgICAgICAgICAg KHZ0YWJsZS1lbmQtb2YtdGFibGUpKSkKKyAgICAgICAgICAgIChsZXQgKChzdGFydCAocG9pbnQp KSkKKyAgICAgICAgICAgICAgOzsgRklYTUU6IFdlIGhhdmUgdG8gYWRqdXN0IGNvbG9ycyBpbiBs aW5lcyBiZWxvdyB0aGlzIGlmIHdlCisgICAgICAgICAgICAgIDs7IGhhdmUgOnJvdy1jb2xvcnMu CisgICAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxlIGxpbmUgMAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLXNwYWNlciB0YWJs ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMgZWxsaXBzaXMt d2lkdGgpCisgICAgICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkg KGxpc3QgJ2tleW1hcCBrZXltYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlKSkpCisgICAgICAgICAgICA7OyBXZSBt YXkgaGF2ZSBpbnNlcnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkK KyAgICAgICAgICAgIDs7IGFsbC1udW1lcmljYWwgdGFibGUsIHNvIHJlY29tcHV0ZS4KKyAgICAg ICAgICAgICh2dGFibGUtLXJlY29tcHV0ZS1udW1lcmljYWwgdGFibGUgKGNkciBsaW5lKSkpKSkp KSkKIAogKGRlZnVuIHZ0YWJsZS1jb2x1bW4gKHRhYmxlIGluZGV4KQogICAiUmV0dXJuIHRoZSBu YW1lIG9mIHRoZSBJTkRFWHRoIGNvbHVtbiBpbiBUQUJMRS4iCkBAIC01MjAsMTQgKzUyNCwxNCBA QCB2dGFibGUtLWNhY2hlLXdpZHRocwogKGRlZnVuIHZ0YWJsZS0tY2FjaGUtbGluZXMgKGNhY2hl KQogICAoY2FyIGNhY2hlKSkKIAotKGRlZnVuIHZ0YWJsZS1pbnNlcnQgKHRhYmxlKQorKGRlZnVu IHZ0YWJsZS0taW5zZXJ0ICh0YWJsZSkKICAgKGxldCogKChzcGFjZXIgKHZ0YWJsZS0tc3BhY2Vy IHRhYmxlKSkKICAgICAgICAgIChzdGFydCAocG9pbnQpKQogICAgICAgICAgKGVsbGlwc2lzIChp ZiAodnRhYmxlLWVsbGlwc2lzIHRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVy dGl6ZSAodHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQogICAgICAgICAgICAgICAgICAg ICAgIiIpKQotICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxs aXBzaXMpKQorICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxs aXBzaXMgKHZ0YWJsZS1idWZmZXIgdGFibGUpKSkKICAgICAgICAgIDs7IFdlIG1haW50YWluIGEg Y2FjaGUgcGVyIHNjcmVlbi93aW5kb3cgd2lkdGgsIHNvIHRoYXQgd2UgcmVuZGVyCiAgICAgICAg ICA7OyBjb3JyZWN0bHkgaWYgRW1hY3MgaXMgb3BlbiBvbiB0d28gZGlmZmVyZW50IHNjcmVlbnMg KG9yIHRoZQogICAgICAgICAgOzsgdXNlciByZXNpemVzIHRoZSBmcmFtZSkuCkBAIC01NDksOCAr NTUzLDcgQEAgdnRhYmxlLWluc2VydAogICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFy dCAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdrZXltYXAgdnRh YmxlLWhlYWRlci1saW5lLW1hcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn cmVhci1ub25zdGlja3kgdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRh YmxlIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUtY2Fj aGUgY2FjaGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRh YmxlKSkKICAgICAgICAgKHNldHEgc3RhcnQgKHBvaW50KSkpKQogICAgICh2dGFibGUtLXNvcnQg dGFibGUgY2FjaGUpCiAgICAgOzsgSW5zZXJ0IHRoZSBkYXRhLgpAQCAtNTYxLDEzICs1NjQsMjkg QEAgdnRhYmxlLWluc2VydAogICAgICAgICAoc2V0cSBsaW5lLW51bWJlciAoMSsgbGluZS1udW1i ZXIpKSkpCiAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBvaW50KQogICAgICAgICAg ICAgICAgICAgICAgICAgIChsaXN0ICdyZWFyLW5vbnN0aWNreSB0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICd2dGFibGUtY2FjaGUgY2FjaGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICd2dGFibGUgdGFibGUpKQorICAgIChzZXRmICh2dGFibGUtLWN1cnJlbnQtY2FjaGUgdGFibGUp IGNhY2hlKQogICAgIChnb3RvLWNoYXIgc3RhcnQpKSkKIAorKGRlZnVuIHZ0YWJsZS1pbnNlcnQg KHRhYmxlKQorICAiSW5zZXJ0IFRBQkxFIGludG8gdGhlIGN1cnJlbnQgYnVmZmVyLgorVGhlIGN1 cnJlbnQgYnVmZmVyIHdpbGwgYmUgcmVjb3JkZWQgYXMgVEFCTEUncyBidWZmZXIuICBJZiB0aGUg dGFibGUgaXMKK2luc2VydGVkIGludG8gYSBidWZmZXIgb3RoZXIgdGhhbiBpdHMgb3JpZ2luYXRp bmcgYnVmZmVyLCBzaWduYWwgYW4KK2Vycm9yLiAgQSB0YWJsZSBtYXkgYmUgcmVpbnNlcnRlZCBp bnRvIGl0cyBvd24gYnVmZmVyLCBidXQgaW5zZXJ0IG9ubHkKK29uZSBpbnN0YW5jZSBwZXIgYnVm ZmVyLiAgVGhpcyByZXN0cmljdGlvbiBuZWVkcyB0byBiZSBlbmZvcmNlZCBieSB0aGUKK2NhbGxl ci4iCisgIChhbmQtbGV0KiAoKHRhYmxlLWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkpCisg ICAgICAgICAgICAgKG5vdCAoZXEgdGFibGUtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKSkKKyAg ICAoZXJyb3IgIkEgdnRhYmxlIGNhbm5vdCBiZSBpbnNlcnRlZCBpbnRvIG1vcmUgdGhhbiBvbmUg YnVmZmVyIikpCisgIChzZXRmICh2dGFibGUtYnVmZmVyIHRhYmxlKSAoY3VycmVudC1idWZmZXIp KQorICAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkKKyAgICAgICAgKGluaGliaXQtbW9kaWZp Y2F0aW9uLWhvb2tzIHQpKQorICAgICh2dGFibGUtLWluc2VydCB0YWJsZSkpKQorCiAoZGVmdW4g dnRhYmxlLS1pbnNlcnQtbGluZSAodGFibGUgbGluZSBsaW5lLW51bWJlciB3aWR0aHMgc3BhY2Vy CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIGVsbGlwc2lzIGVs bGlwc2lzLXdpZHRoKQogICAobGV0ICgoc3RhcnQgKHBvaW50KSkKKyAgICAgICAgKGJ1ZmZlciAo dnRhYmxlLWJ1ZmZlciB0YWJsZSkpCiAgICAgICAgIChjb2x1bW5zICh2dGFibGUtY29sdW1ucyB0 YWJsZSkpCiAgICAgICAgIChjb2x1bW4tY29sb3JzCiAgICAgICAgICAoYW5kICh2dGFibGUtY29s dW1uLWNvbG9ycyB0YWJsZSkKQEAgLTYwNywxNiArNjI2LDE4IEBAIHZ0YWJsZS0taW5zZXJ0LWxp bmUKICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0CiAgICAgICAgICAgICAgICAgICAgICAg ICh2dGFibGUtLWxpbWl0LXN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgcHJlLWNvbXB1 dGVkICgtIChlbHQgd2lkdGhzIGluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAwKSkpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRoIDApKQorICAgICAgICAgICAgICAg ICAgICAgICAgYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcykKICAgICAg ICAgICAgICAgICAgICAgcHJlLWNvbXB1dGVkKSkKICAgICAgICAgICAgICAgICAgOzsgUmVjb21w dXRlIHdpZHRocy4KICAgICAgICAgICAgICAgICAgKHQKLSAgICAgICAgICAgICAgICAgIChpZiAo PiAoc3RyaW5nLXBpeGVsLXdpZHRoIHZhbHVlKSAoZWx0IHdpZHRocyBpbmRleCkpCisgICAgICAg ICAgICAgICAgICAoaWYgKD4gKHN0cmluZy1waXhlbC13aWR0aCB2YWx1ZSBidWZmZXIpIChlbHQg d2lkdGhzIGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0CiAgICAgICAgICAg ICAgICAgICAgICAgICh2dGFibGUtLWxpbWl0LXN0cmluZwogICAgICAgICAgICAgICAgICAgICAg ICAgdmFsdWUgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAob3IgZWxsaXBzaXMtd2lkdGggMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRoIDApKQorICAgICAgICAgICAgICAgICAgICAgICAg YnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcykKICAgICAgICAgICAgICAg ICAgICAgdmFsdWUpKSkpCiAgICAgICAgICAgICAgICAoc3RhcnQgKHBvaW50KSkKQEAgLTYzMCwx NCArNjUxLDE1IEBAIHZ0YWJsZS0taW5zZXJ0LWxpbmUKICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxpc3QgJ3NwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp3aWR0aCAo bGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrICgtIChlbHQg d2lkdGhzIGluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzdHJpbmctcGl4ZWwtd2lkdGggZGlzcGxheWVkKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZCBidWZmZXIpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBsYXN0IDAgc3Bh Y2VyKSkpKSkpKQogICAgICAgICAgICAgIDs7IEFsaWduIHRvIHRoZSByaWdodC4KICAgICAgICAg ICAgICAoaW5zZXJ0IChwcm9wZXJ0aXplICIgIiAnZGlzcGxheQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxpc3QgJ3NwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6d2lkdGggKGxpc3QgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhl bC13aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaXNwbGF5ZWQpKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQgYnVmZmVyKSkpKSkKICAgICAgICAgICAg ICAgICAgICAgIGRpc3BsYXllZCkKICAgICAgICAgICAgICAodW5sZXNzIGxhc3QKICAgICAgICAg ICAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgIiAiICdkaXNwbGF5CkBAIC02NjQsMTYgKzY4Niw2 IEBAIHZ0YWJsZS0taW5zZXJ0LWxpbmUKIChkZWZ1biB2dGFibGUtLWNhY2hlLWtleSAoKQogICAo Y29ucyAoZnJhbWUtdGVybWluYWwpICh3aW5kb3ctd2lkdGgpKSkKIAotKGRlZnVuIHZ0YWJsZS0t Y3VycmVudC1jYWNoZSAoKQotICAiUmV0dXJuIHRoZSBjdXJyZW50IGNhY2hlIGZvciB0aGUgdGFi bGUgYXQgcG9pbnQuCi0KLUluIGB2dGFibGUtaW5zZXJ0JywgdGhlIGxpbmVzIGFuZCB3aWR0aHMg b2YgdGhlIHZ0YWJsZSB0ZXh0IGFyZSBjb21wdXRlZAotYmFzZWQgb24gdGhlIGN1cnJlbnQgc2Vs ZWN0ZWQgZnJhbWUgYW5kIHdpbmRvdyBhbmQgc3RvcmVkIGluIGEgY2FjaGUuCi1TdWJzZXF1ZW50 IGludGVyYWN0aW9uIHdpdGggdGhlIHRleHQgb2YgdGhlIHZ0YWJsZSBzaG91bGQgdXNlIHRoYXQg Y2FjaGUKLXZpYSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGJ5IGNhbGxpbmcgYHZ0YWJsZS0t Y2FjaGUta2V5JyB0byBsb29rIHVwCi10aGUgY2FjaGUuIgotICAoZ2V0LXRleHQtcHJvcGVydHkg KHBvaW50KSAndnRhYmxlLWNhY2hlKSkKLQogKGRlZnVuIHZ0YWJsZS0tY2xlYXItY2FjaGUgKHRh YmxlKQogICAoc2V0ZiAoZ2V0aGFzaCAodnRhYmxlLS1jYWNoZS1rZXkpIChzbG90LXZhbHVlIHRh YmxlICctY2FjaGUpKSBuaWwpKQogCkBAIC03MTgsNiArNzMwLDcgQEAgdnRhYmxlLS1pbmRpY2F0 b3IKIChkZWZ1biB2dGFibGUtLWluc2VydC1oZWFkZXItbGluZSAodGFibGUgd2lkdGhzIHNwYWNl cikKICAgOzsgSW5zZXJ0IHRoZSBoZWFkZXIgZGlyZWN0bHkgaW50byB0aGUgYnVmZmVyLgogICAo bGV0ICgoc3RhcnQgKHBvaW50KSkKKyAgICAgICAgKGJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJs ZSkpCiAgICAgICAgIChkaXZpZGVyICh2dGFibGUtZGl2aWRlciB0YWJsZSkpCiAgICAgICAgIChj bWFwIChkZWZpbmUta2V5bWFwCiAgICAgICAgICAgICAgICAgIjxoZWFkZXItbGluZT4gPGRyYWct bW91c2UtMT4iICMndnRhYmxlLS1kcmFnLXJlc2l6ZS1jb2x1bW4KQEAgLTczNywxNCArNzUwLDE1 IEBAIHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lCiAgICAgICAgICAgICAgICAgICAgICAna2V5 bWFwIGNtYXApKQogICAgICAgICAgICAgICAoc3RhcnQgKHBvaW50KSkKICAgICAgICAgICAgICAg KGluZGljYXRvciAodnRhYmxlLS1pbmRpY2F0b3IgdGFibGUgaW5kZXgpKQotICAgICAgICAgICAg ICAoaW5kaWNhdG9yLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggaW5kaWNhdG9yKSkKKyAgICAg ICAgICAgICAgKGluZGljYXRvci13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGluZGljYXRvciBi dWZmZXIpKQogICAgICAgICAgICAgICAobGFzdCAoPSBpbmRleCAoMS0gKGxlbmd0aCAodnRhYmxl LWNvbHVtbnMgdGFibGUpKSkpKQogICAgICAgICAgICAgICBkaXNwbGF5ZWQpCiAgICAgICAgICAo c2V0cSBkaXNwbGF5ZWQKLSAgICAgICAgICAgICAgIChpZiAoPiAoc3RyaW5nLXBpeGVsLXdpZHRo IG5hbWUpCisgICAgICAgICAgICAgICAoaWYgKD4gKHN0cmluZy1waXhlbC13aWR0aCBuYW1lIGJ1 ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAoLSAoZWx0IHdpZHRocyBpbmRleCkgaW5kaWNh dG9yLXdpZHRoKSkKICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1saW1pdC1zdHJpbmcKLSAg ICAgICAgICAgICAgICAgICAgbmFtZSAoLSAoZWx0IHdpZHRocyBpbmRleCkgaW5kaWNhdG9yLXdp ZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgbmFtZSAoLSAoZWx0IHdpZHRocyBpbmRleCkgaW5k aWNhdG9yLXdpZHRoKQorICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAgICAg ICAgIG5hbWUpKQogICAgICAgICAgKGxldCogKChpbmRpY2F0b3ItbGVhZC13aWR0aAogICAgICAg ICAgICAgICAgICA7OyBXZSB3YW50IHRoZSBpbmRpY2F0b3IgdG8gbm90IGJlIHF1aXRlIGZsdXNo IHJpZ2h0LgpAQCAtNzUzLDcgKzc2Nyw3IEBAIHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLWxlYWQtd2lk dGgpKQogICAgICAgICAgICAgICAgIChmaWxsLXdpZHRoCiAgICAgICAgICAgICAgICAgICgrICgt IChlbHQgd2lkdGhzIGluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVs LXdpZHRoIGRpc3BsYXllZCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13 aWR0aCBkaXNwbGF5ZWQgYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3It d2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLWxlYWQtd2lkdGgpCiAgICAg ICAgICAgICAgICAgICAgIChpZiBsYXN0IDAgc3BhY2VyKSkpKQpAQCAtNzcxLDcgKzc4NSw4IEBA IHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lCiAgICAgICAgICAgICAgOzsgVGhpcyBpcyB0aGUg ZmluYWwgY29sdW1uLCBhbmQgd2UgaGF2ZSBhIHNvcnRpbmcKICAgICAgICAgICAgICA7OyBpbmRp Y2F0b3IsIGFuZCB0aGUgdGFibGUgaXMgdG9vIHdpZGUgZm9yIHRoZSB3aW5kb3cuCiAgICAgICAg ICAgICAgKGxldCogKChwcmUtaW5kaWNhdG9yIChzdHJpbmctcGl4ZWwtd2lkdGgKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludC1taW4p IChwb2ludCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXIt c3Vic3RyaW5nIChwb2ludC1taW4pIChwb2ludCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBidWZmZXIpKQogICAgICAgICAgICAgICAgICAgICAocHJlLWZpbGwKICAgICAg ICAgICAgICAgICAgICAgICgtICh3aW5kb3ctd2lkdGggbmlsIHQpCiAgICAgICAgICAgICAgICAg ICAgICAgICBwcmUtaW5kaWNhdG9yCkBAIC04NTAsMTQgKzg2NSwxNiBAQCB2dGFibGUtLXNldC1o ZWFkZXItbGluZQogICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtbWluKSAoMS0g KHBvaW50LW1heCkpKSkpKQogICAodnRhYmxlLWhlYWRlci1tb2RlIDEpKQogCi0oZGVmdW4gdnRh YmxlLS1saW1pdC1zdHJpbmcgKHN0cmluZyBwaXhlbHMpCisKKyhkZWZ1biB2dGFibGUtLWxpbWl0 LXN0cmluZyAoc3RyaW5nIHBpeGVscyBidWZmZXIpCiAgICh3aGlsZSAoYW5kIChsZW5ndGg+IHN0 cmluZyAwKQotICAgICAgICAgICAgICAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cmluZykgcGl4 ZWxzKSkKKyAgICAgICAgICAgICAgKD4gKHN0cmluZy1waXhlbC13aWR0aCBzdHJpbmcgYnVmZmVy KSBwaXhlbHMpKQogICAgIChzZXRxIHN0cmluZyAoc3Vic3RyaW5nIHN0cmluZyAwICgxLSAobGVu Z3RoIHN0cmluZykpKSkpCiAgIHN0cmluZykKIAogKGRlZnVuIHZ0YWJsZS0tY2hhci13aWR0aCAo dGFibGUpCi0gIChzdHJpbmctcGl4ZWwtd2lkdGggKHByb3BlcnRpemUgIngiICdmYWNlICh2dGFi bGUtZmFjZSB0YWJsZSkpKSkKKyAgKHN0cmluZy1waXhlbC13aWR0aCAocHJvcGVydGl6ZSAieCIg J2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAodnRhYmxl LWJ1ZmZlciB0YWJsZSkpKQogCiAoZGVmdW4gdnRhYmxlLS1jb21wdXRlLXdpZHRoICh0YWJsZSBz cGVjKQogICAoY29uZApAQCAtOTM2LDcgKzk1Myw3IEBAIHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQt bGluZQogICAgICAgIDs7IFdlIHN0YXNoIHRoZSBjb21wdXRlZCB3aWR0aCBhbmQgc3RyaW5nIGhl cmUgLS0gaWYgdGhlcmUgYXJlCiAgICAgICAgOzsgbm8gZm9ybWF0dGVycy9kaXNwbGF5ZXJzLCB3 ZSdsbCBiZSB1c2luZyB0aGUgc3RyaW5nLCBhbmQKICAgICAgICA7OyB0aGVuIHdvbid0IGhhdmUg dG8gcmVjcmVhdGUgaXQuCi0gICAgICAgKGxpc3QgdmFsdWUgKHN0cmluZy1waXhlbC13aWR0aCBz dHJpbmcpIHN0cmluZykpKQorICAgICAgIChsaXN0IHZhbHVlIChzdHJpbmctcGl4ZWwtd2lkdGgg c3RyaW5nICh2dGFibGUtYnVmZmVyIHRhYmxlKSkgc3RyaW5nKSkpCiAgICAodnRhYmxlLWNvbHVt bnMgdGFibGUpKSkKIAogKGRlZnVuIHZ0YWJsZS0tbWFrZS1rZXltYXAgKHRhYmxlKQpAQCAtOTY3 LDIwICs5ODQsMjEgQEAgdnRhYmxlLS1tYWtlLWtleW1hcAogICAgICAgICAgICh2dGFibGUta2V5 bWFwIHRhYmxlKSkKICAgICAgIG1hcCkpKQogCi0oZGVmdW4gdnRhYmxlLXJldmVydCAoKQotICAi UmVnZW5lcmF0ZSB0aGUgdGFibGUgdW5kZXIgcG9pbnQuIgotICAobGV0ICgodGFibGUgKHZ0YWJs ZS1jdXJyZW50LXRhYmxlKSkKLSAgICAgICAgKG9iamVjdCAodnRhYmxlLWN1cnJlbnQtb2JqZWN0 KSkKLSAgICAgICAgKGNvbHVtbiAodnRhYmxlLWN1cnJlbnQtY29sdW1uKSkKLSAgICAgICAgKGlu aGliaXQtcmVhZC1vbmx5IHQpKQotICAgICh1bmxlc3MgdGFibGUKLSAgICAgICh1c2VyLWVycm9y ICJObyB0YWJsZSB1bmRlciBwb2ludCIpKQotICAgIChkZWxldGUtcmVnaW9uICh2dGFibGUtYmVn aW5uaW5nLW9mLXRhYmxlKSAodnRhYmxlLWVuZC1vZi10YWJsZSkpCi0gICAgKHZ0YWJsZS1pbnNl cnQgdGFibGUpCi0gICAgKHdoZW4gb2JqZWN0Ci0gICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9i amVjdCkpCi0gICAgKHdoZW4gY29sdW1uCi0gICAgICAodnRhYmxlLWdvdG8tY29sdW1uIGNvbHVt bikpKSkKKyhkZWZ1biB2dGFibGUtcmV2ZXJ0ICgmb3B0aW9uYWwgdGFibGUpCisgICJSZWdlbmVy YXRlIFRBQkxFLCBkZWZhdWx0aW5nIHRvIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCisgIChzZXRx IHRhYmxlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKKyAgKHVubGVzcyB0YWJs ZQorICAgICh1c2VyLWVycm9yICJObyB0YWJsZSB1bmRlciBwb2ludCIpKQorICAod2l0aC1jdXJy ZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKKyAgICAobGV0ICgob2JqZWN0ICh2dGFi bGUtY3VycmVudC1vYmplY3QpKQorICAgICAgICAgIChjb2x1bW4gKHZ0YWJsZS1jdXJyZW50LWNv bHVtbikpCisgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpKQorICAgICAgKGRlbGV0ZS1y ZWdpb24gKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpICh2dGFibGUtZW5kLW9mLXRhYmxlKSkK KyAgICAgICh2dGFibGUtLWluc2VydCB0YWJsZSkKKyAgICAgICh3aGVuIG9iamVjdAorICAgICAg ICAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkpCisgICAgICAod2hlbiBjb2x1bW4KKyAgICAg ICAgKHZ0YWJsZS1nb3RvLWNvbHVtbiBjb2x1bW4pKSkpKQogCiA7OzsgQ29tbWFuZHMuCiAKQEAg LTEwMDYsMTQgKzEwMjQsMTQgQEAgdnRhYmxlLW5hcnJvdy1jdXJyZW50LWNvbHVtbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAoKiAodnRhYmxlLS1jaGFyLXdpZHRoIHRhYmxl KSAob3IgbiAxKSkpKSkpCiAKIChkZWZ1biB2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCAodGFi bGUgY29sdW1uIGRlbHRhKQotICAobGV0ICgod2lkdGhzICh2dGFibGUtLWNhY2hlLXdpZHRocyAo dnRhYmxlLS1jdXJyZW50LWNhY2hlKSkpKQorICAobGV0ICgod2lkdGhzICh2dGFibGUtLWNhY2hl LXdpZHRocyAodnRhYmxlLS1jdXJyZW50LWNhY2hlIHRhYmxlKSkpKQogICAgIChzZXRmIChhcmVm IHdpZHRocyBjb2x1bW4pCiAgICAgICAgICAgKG1heCAoKiAodnRhYmxlLS1jaGFyLXdpZHRoIHRh YmxlKSAyKQogICAgICAgICAgICAgICAgKCsgKGFyZWYgd2lkdGhzIGNvbHVtbikgZGVsdGEpKSkK ICAgICA7OyBTdG9yZSB0aGUgd2lkdGggc28gaXQnbGwgYmUgcmVzcGVjdGVkIG9uIGEgcmV2ZXJ0 LgogICAgIChzZXRmICh2dGFibGUtY29sdW1uLXdpZHRoIChlbHQgKHZ0YWJsZS1jb2x1bW5zIHRh YmxlKSBjb2x1bW4pKQogICAgICAgICAgIChmb3JtYXQgIiVkcHgiIChhcmVmIHdpZHRocyBjb2x1 bW4pKSkKLSAgICAodnRhYmxlLXJldmVydCkpKQorICAgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkp CiAKIChkZWZ1biB2dGFibGUtd2lkZW4tY3VycmVudC1jb2x1bW4gKCZvcHRpb25hbCBuKQogICAi V2lkZW4gdGhlIGN1cnJlbnQgY29sdW1uIGJ5IE4gY2hhcmFjdGVycy4KQEAgLTEwMjgsMjQgKzEw NDYsMjggQEAgdnRhYmxlLXByZXZpb3VzLWNvbHVtbgogICAoaW50ZXJhY3RpdmUpCiAgICh2dGFi bGUtZ290by1jb2x1bW4KICAgIChtYXggMCAoMS0gKG9yICh2dGFibGUtY3VycmVudC1jb2x1bW4p Ci0gICAgICAgICAgICAgICAgICAobGVuZ3RoICh2dGFibGUtLWNhY2hlLXdpZHRocyAodnRhYmxl LS1jdXJyZW50LWNhY2hlKSkpKSkpKSkKKyAgICAgICAgICAgICAgICAgIChsZW5ndGggKHZ0YWJs ZS0tY2FjaGUtd2lkdGhzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jdXJy ZW50LWNhY2hlICh2dGFibGUtY3VycmVudC10YWJsZSkpKSkpKSkpKQogCiAoZGVmdW4gdnRhYmxl LW5leHQtY29sdW1uICgpCiAgICJHbyB0byB0aGUgbmV4dCBjb2x1bW4uIgogICAoaW50ZXJhY3Rp dmUpCiAgICh3aGVuICh2dGFibGUtY3VycmVudC1jb2x1bW4pCiAgICAgKHZ0YWJsZS1nb3RvLWNv bHVtbgotICAgICAobWluICgxLSAobGVuZ3RoICh2dGFibGUtLWNhY2hlLXdpZHRocyAodnRhYmxl LS1jdXJyZW50LWNhY2hlKSkpKQorICAgICAobWluICgxLSAobGVuZ3RoICh2dGFibGUtLWNhY2hl LXdpZHRocworICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jdXJyZW50LWNhY2hlICh2 dGFibGUtY3VycmVudC10YWJsZSkpKSkpCiAgICAgICAgICAgKDErICh2dGFibGUtY3VycmVudC1j b2x1bW4pKSkpKSkKIAotKGRlZnVuIHZ0YWJsZS1yZXZlcnQtY29tbWFuZCAoKQorKGRlZnVuIHZ0 YWJsZS1yZXZlcnQtY29tbWFuZCAoJm9wdGlvbmFsIHRhYmxlKQogICAiUmUtcXVlcnkgZGF0YSBh bmQgcmVnZW5lcmF0ZSB0aGUgdGFibGUgdW5kZXIgcG9pbnQuIgogICAoaW50ZXJhY3RpdmUpCi0g IChsZXQgKCh0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKLSAgICAod2hlbiAodnRhYmxl LW9iamVjdHMtZnVuY3Rpb24gdGFibGUpCi0gICAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFi bGUpIChmdW5jYWxsICh2dGFibGUtb2JqZWN0cy1mdW5jdGlvbiB0YWJsZSkpKSkKLSAgICAodnRh YmxlLS1jbGVhci1jYWNoZSB0YWJsZSkpCi0gICh2dGFibGUtcmV2ZXJ0KSkKKyAgKHNldHEgdGFi bGUgKG9yIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpKQorICAodW5sZXNzIHRhYmxlCisg ICAgKHVzZXItZXJyb3IgIk5vIHRhYmxlIGZvdW5kIikpCisgICh3aGVuICh2dGFibGUtb2JqZWN0 cy1mdW5jdGlvbiB0YWJsZSkKKyAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChmdW5j YWxsICh2dGFibGUtb2JqZWN0cy1mdW5jdGlvbiB0YWJsZSkpKSkKKyAgKHZ0YWJsZS0tY2xlYXIt Y2FjaGUgdGFibGUpCisgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkKIAogKGRlZnVuIHZ0YWJsZS1z b3J0LWJ5LWN1cnJlbnQtY29sdW1uICgpCiAgICJTb3J0IHRoZSB0YWJsZSB1bmRlciBwb2ludCBi eSB0aGUgY29sdW1uIHVuZGVyIHBvaW50LiIKQEAgLTEwNjcsOCArMTA4OSw4IEBAIHZ0YWJsZS1z b3J0LWJ5LWN1cnJlbnQtY29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGlmIChlcSAoY2RyIGxhc3QpICdhc2NlbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdkZXNjZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn YXNjZW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNjZW5kKSkpKSkpCi0g ICh2dGFibGUtcmV2ZXJ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2Vu ZCkpKSkpCisgICAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKSkKIAogKGRlZnVuIHZ0YWJsZS1oZWFk ZXItbGluZS1zb3J0IChlKQogICAiU29ydCBhIHZ0YWJsZSBmcm9tIHRoZSBoZWFkZXIgbGluZS4i CmRpZmYgLS1naXQgYS90ZXN0L2xpc3AvZW1hY3MtbGlzcC92dGFibGUtdGVzdHMuZWwgYi90ZXN0 L2xpc3AvZW1hY3MtbGlzcC92dGFibGUtdGVzdHMuZWwKaW5kZXggNzRmYjhjYzgxMzkuLjgzZjgy NmVhMzUzIDEwMDY0NAotLS0gYS90ZXN0L2xpc3AvZW1hY3MtbGlzcC92dGFibGUtdGVzdHMuZWwK KysrIGIvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsCkBAIC0yNywxNiArMjcs MTkgQEAKIChyZXF1aXJlICdlcnQpCiAocmVxdWlyZSAnZXJ0LXgpCiAKLShlcnQtZGVmdGVzdCB0 ZXN0LXZzdGFibGUtY29tcHV0ZS1jb2x1bW5zICgpCisoZGVmdW4gdnRhYmxlLXRlc3RzLS1tYWtl LW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSAoKQorICAobWFrZS12dGFibGUgOmNvbHVtbnMgJygi YSIgImIiICJjIikKKyAgICAgICAgICAgICAgIDpvYmplY3RzICcoKCJmb28iIDEgMikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKCJiYXIiIDMgOnpvdCkpCisgICAgICAgICAgICAgICA6aW5z ZXJ0IG5pbCkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1jb21wdXRlLWNvbHVtbnMgKCkK ICAgKHNob3VsZAogICAgKGVxdWFsIChtYXBjYXIKICAgICAgICAgICAgKGxhbWJkYSAoY29sdW1u KQogICAgICAgICAgICAgICh2dGFibGUtY29sdW1uLWFsaWduIGNvbHVtbikpCiAgICAgICAgICAg ICh2dGFibGUtLWNvbXB1dGUtY29sdW1ucwotICAgICAgICAgICAgKG1ha2UtdnRhYmxlIDpjb2x1 bW5zICcoImEiICJiIiAiYyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgOm9iamVjdHMgJygo ImZvbyIgMSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJiYXIiIDMg OnpvdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgOmluc2VydCBuaWwpKSkKKyAgICAgICAg ICAgICh2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxlKSkpCiAgICAg ICAgICAgJyhsZWZ0IHJpZ2h0IGxlZnQpKSkpCiAKIChlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1p bnNlcnQtb2JqZWN0ICgpCkBAIC02OSw0ICs3Miw2OSBAQCB0ZXN0LXZ0YWJsZS1pbnNlcnQtb2Jq ZWN0CiAgICAgICAgICAgICAgIChtYXBjYXIgIydjYWRyICh2dGFibGUtb2JqZWN0cyB0YWJsZSkp KSkKICAgICAgICAgICAobnVtYmVyLXNlcXVlbmNlIDAgMTEpKSkpCiAKKyhlcnQtZGVmdGVzdCB0 ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyICgpCisgIChsZXQgKCh0YWJsZSAodnRhYmxlLXRlc3Rz LS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJsZSkpKQorICAgICh3aXRoLXRlbXAtYnVmZmVy CisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKKyAgICAgIDs7IFRoaXMgd2lsbCBydW4gYnV0 IGZhaWwgb24gRW1hY3MgcHJlIDMxIHZ0YWJsZS4KKyAgICAgIChzaG91bGQtZXJyb3IgKHZ0YWJs ZS1pbnNlcnQgdGFibGUpKQorICAgICAgOzsgVGhpcyB3aWxsIHJ1biBvbmx5IG9uIEVtYWNzIDMx KyB2dGFibGUuCisgICAgICAod2hlbiAoPiBlbWFjcy1tYWpvci12ZXJzaW9uIDMwKQorICAgICAg ICAoc2hvdWxkLWVycm9yICh2dGFibGUtc2V0LWJ1ZmZlciB0YWJsZSAoY3VycmVudC1idWZmZXIp KSkpKSkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItaW5z ZXJ0LW9iamVjdCAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFk ZXItMi1vYmplY3QtdGFibGUpKQorICAgICAgICAob2JqICcoImJheiIgNCA1KSkpCisgICAgKHdp dGgtdGVtcC1idWZmZXIKKyAgICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAgICAgKHNob3Vs ZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDIpKQorICAgICAgKHdp dGgtdGVtcC1idWZmZXIKKyAgICAgICAgKHZ0YWJsZS1pbnNlcnQtb2JqZWN0IHRhYmxlIG9iaikp CisgICAgICAoc2hvdWxkICg9IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkg MykpKSkpCisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVt b3ZlLW9iamVjdCAoKQorICAobGV0ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFk ZXItMi1vYmplY3QtdGFibGUpKQorICAgICAgICAob2JqICcoImJheiIgNCA1KSkpCisgICAgKHdp dGgtdGVtcC1idWZmZXIKKyAgICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAgICAgKHZ0YWJs ZS1pbnNlcnQtb2JqZWN0IHRhYmxlIG9iaikKKyAgICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVz IChwb2ludC1taW4pIChwb2ludC1tYXgpKSAzKSkKKyAgICAgICh3aXRoLXRlbXAtYnVmZmVyCisg ICAgICAgICh2dGFibGUtcmVtb3ZlLW9iamVjdCB0YWJsZSBvYmopKQorICAgICAgKHNob3VsZCAo PSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDIpKSkpKQorCisoZXJ0LWRl ZnRlc3QgdGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVmZmVyLXVwZGF0ZS1vYmplY3QgKCkKKyAg KGxldCAoKHRhYmxlICh2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxl KSkKKyAgICAgICAgKG9iaiAnKCJiYXoiIDQgNSkpCisgICAgICAgIChvYmotMiAnKCJxdXgiIDYg NykpKQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkK KyAgICAgICh2dGFibGUtaW5zZXJ0LW9iamVjdCB0YWJsZSBvYmopCisgICAgICAoc2hvdWxkICg9 IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMykpCisgICAgICAobGV0ICgo bGluZS0yIChwcm9nbgorICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1p bikpCisgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAyKQorICAgICAgICAgICAg ICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludCkgKHBvaW50LW1heCkpKSkpCisgICAg ICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAgICAgKHZ0YWJsZS11cGRhdGUtb2JqZWN0IHRh YmxlIG9iai0yIG9iaikpCisgICAgICAgIChsZXQgKChsaW5lLTItbmV3IChwcm9nbgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAyKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludCkgKHBvaW50LW1heCkpKSkpCisgICAgICAg ICAgKHNob3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDMpKQor ICAgICAgICAgIChzaG91bGQgKG5vdCAoc3RyaW5nPSBsaW5lLTIgbGluZS0yLW5ldykpKSkpKSkp CisKKyhlcnQtZGVmdGVzdCB0ZXN0LXZ0YWJsZS0tbGltaXQtc3RyaW5nLXdpdGgtZmFjZS1yZW1h cHBlZC1idWZmZXIgKCkKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAobGV0ICgodGV4dCAocHJv cGVydGl6ZSAiWFhYWFgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgJ3Zhcmlh YmxlLXBpdGNoKSkpCisgICAgICAoZmFjZS1yZW1hcC1hZGQtcmVsYXRpdmUgJ2RlZmF1bHQgOmhl aWdodCAxLjUpCisgICAgICAoaWYgKD4gZW1hY3MtbWFqb3ItdmVyc2lvbiAzMCkKKyAgICAgICAg ICAoc2hvdWxkIChlcQorICAgICAgICAgICAgICAgICAgIDIKKyAgICAgICAgICAgICAgICAgICAo bGVuZ3RoICh2dGFibGUtLWxpbWl0LXN0cmluZyB0ZXh0IDUwIChjdXJyZW50LWJ1ZmZlcikpKSkp CisgICAgICAgIChzaG91bGQgKGVxCisgICAgICAgICAgICAgICAgIDIKKyAgICAgICAgICAgICAg ICAgKGxlbmd0aCAodnRhYmxlLS1saW1pdC1zdHJpbmcgdGV4dCA1MCkpKSkpKSkpCisKIDs7OyB2 dGFibGUtdGVzdHMuZWwgZW5kcyBoZXJlCi0tIAoyLjQ3LjEKCg== --0000000000009290f30645b23193--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.
Received: (at 79982) by debbugs.gnu.org; 11 Dec 2025 18:23:15 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 11 13:23:15 2025
Received: from localhost ([127.0.0.1]:47250 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vTlJm-0008PY-Sc
for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 13:23:15 -0500
Received: from mxout5.mail.janestreet.com ([64.215.233.18]:53515)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>)
id 1vTlJj-0008O1-At
for 79982 <at> debbugs.gnu.org; Thu, 11 Dec 2025 13:23:09 -0500
From: Spencer Baugh <sbaugh@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable
buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer
slot
In-Reply-To: <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN>
(=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Thu, 11 Dec 2025
11:59:43 -0500")
References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN>
<iero6o6s75r.fsf@HIDDEN>
<CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN>
<ierikeerwu7.fsf_-_@HIDDEN>
<CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN>
<ierfr9irmo2.fsf_-_@HIDDEN>
<CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN>
Date: Thu, 11 Dec 2025 13:23:01 -0500
Message-ID: <iercy4kswsa.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com;
s=waixah; t=1765477381;
bh=+aPaI6U1eJAomjuu+mpZ5pwbHktvq4ryMffb/exhMN4=;
h=From:To:Cc:Subject:In-Reply-To:References:Date;
b=Bp1MCSp+gfhM/uhUI4VDXr8TBmyQyUnywUR/E+PEC4AyLgNEfZWcVx4z/L2qTjgdg
5MH9H+CEeiw9VSlV004qkUML2OpWS3KrQg6pB8D7ubouwH3kviOj5drRJU9nguK6zk
+fA8jqUJ/pUVNr7tPt8ET8e8GQ2gMlynd1DqG46Y1Q/cveo6oH/pJRhUKpMewi4u2O
VpSoYiXKW1+vYGJU0vX7Un0FvhM7fuXwhB4IxMVQSZ8N0ixwFivPh5FjdTw4x1wuob
00k7mLq5N2wTIFXYIxPUXOQ2TilGAYqO/g/vCU2e5WiVL2UeGa1SxHY/oOqZbuSWyI
qXiE8LPawB3aw==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79982
Cc: Kristoffer Balintona <krisbalintona@HIDDEN>,
Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN,
79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>,
Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
Augusto Stoffel <arstoffel@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)
St=C3=A9phane Marks <shipmints@HIDDEN> writes:
> > (defun vtable-remove-object (table object)
> > "Remove OBJECT from TABLE.
> > @@ -334,14 +350,15 @@ vtable-remove-object
> > ;; First remove from the objects.
> > (setf (vtable-objects table) (delq object (vtable-objects table)))
> > ;; Then adjust the cache and display.
> > - (save-excursion
> > - (vtable-goto-table table)
> > - (let ((cache (vtable--current-cache))
> > - (inhibit-read-only t))
> > - (setcar cache (delq (assq object (vtable--cache-lines cache))
> > - (vtable--cache-lines cache)))
> > - (when (vtable-goto-object object)
> > - (delete-line)))))
> > + (with-current-buffer (vtable-buffer table)
> > + (save-excursion
> > + (vtable-goto-table table)
> > + (let ((cache (vtable--current-cache))
>
> Maybe we won't need this vtable-goto-table if we make
> vtable--current-cache take the table?
>
> The goto-object calls require point being in the table.
>=20=20
> > + (inhibit-read-only t)
> > + (keymap (get-text-property (point) 'keymap))
> > + (ellipsis (if (vtable-ellipsis table)
> > + (propertize (truncate-string-ellipsis)
> > + 'face (vtable-face table))
> > + ""))
> > + (ellipsis-width (string-pixel-width ellipsis (current-=
buffer)))
> > + (lines (vtable--cache-lines cache))
> > + (elem (if location ; This binding mirrors the binding=
of `pos' above.
> > + (if (integerp location)
> > + (nth location lines)
> > + (or (assq location lines)
> > + (and before (car lines))))
> > + (if before (car lines))))
> > + (pos (memq elem lines))
> > + (line (cons object (vtable--compute-cached-line table =
object))))
>
> Hmm... I think this is the only thing in these let-bindings which
> depends on the current buffer (besides vtable--current-cache which
> should take the buffer as an argument).
>
> I reworked that code a bit to narrow the w-c-b scope.
>
> If we made vtable--compute-cached-line take the buffer and explicitly
> passed it to string-pixel-width in there, I think we'd be able to bind
> with-current-buffer around much less code.
>
> Not needed. I changed the string-pixel-width call to include vtable-buffe=
r.
Oh, smart, much better.
> -St=C3=A9phane=20
>
> From 1c104f1b29aa9e396005ae73394a2f49104361c6 Mon Sep 17 00:00:00 2001
> From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN>
> Date: Wed, 10 Dec 2025 09:20:02 -0500
> Subject: [PATCH] Add vtable buffer slot
>
> This solves for background vtable mutations, i.e., updates
> initiated from buffers other than the vtable buffer, and for
> buffer-adjusted string-pixel-width computations.
>
> * lisp/emacs-lisp/vtable.el (vtable): New '-buffer' slot.
> (vtable-buffer):
> (vtable-set-buffer): New function.
> (vtable-update-object):
> (vtable-remove-object):
> (vtable-insert-object): Wrap operation with the vtable buffer.
> (vtable--insert): Split from old 'vtable-insert'.
> (vtable-insert): Insert table and record the buffer.
> (vtable--insert-line):
> (vtable--insert-header-line): Use 'vtable-buffer' for pixel-width computa=
tion.
> (vtable--limit-string):
> (vtable--char-width): Pass buffer to 'string-pixel-width'.
> (vtable-revert): New optional table argument.
> (vtable--alter-column-width):
> (vtable-revert-command):
> (vtable-sort-by-current-column): Call 'vtable-revert' with the table.
>
> * test/lisp/emacs-lisp/vtable-tests.el
> (vtable-tests--make-no-header-2-object-table): New helper
> function.
> (test-vstable-compute-columns): Correct typo in test name. Use
> new helper function.
> (test-vtable-unique-buffer)
> (test-vtable-non-current-buffer-insert-object)
> (test-vtable-non-current-buffer-remove-object)
> (test-vtable-non-current-buffer-update-object)
> (test-vtable--limit-string-with-face-remapped-buffer): New test.
> ---
> lisp/emacs-lisp/vtable.el | 284 ++++++++++++++++-----------
> test/lisp/emacs-lisp/vtable-tests.el | 78 +++++++-
> 2 files changed, 239 insertions(+), 123 deletions(-)
>
> diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
> index bcdd280fb92..f4d87581dfa 100644
> --- a/lisp/emacs-lisp/vtable.el
> +++ b/lisp/emacs-lisp/vtable.el
> @@ -68,7 +68,9 @@ vtable
> (column-colors :initarg :column-colors :accessor vtable-column-colors)
> (row-colors :initarg :row-colors :accessor vtable-row-colors)
> (-cached-colors :initform nil)
> + (-buffer :initform nil)
> (-cache :initform (make-hash-table :test #'equal))
> + (-current-cache :initform nil)
Nice.
One alternative is to save -current-cache-key instead and look it up in
-cache, but saving -current-cache is fine.
A thought for the future, not for this patch: We probably should have a
-current-window-width slot of the vtable, which is set whenever we
vtable-revert, and then use it in all the places that currently call
window-width. That would make us more correct in a bunch of cases, I
think. Then the cache key would be (cons (frame-terminal)
-current-window-width), so if we just saved -current-frame-terminal as
well, we would be able to compute (vtable--current-cache-key table), and
remove -current-cache/-current-cache-key.
> (-cached-keymap :initform nil)
> (-has-column-spec :initform nil))
> "An object to hold the data for a table.")
> @@ -221,6 +223,20 @@ vtable--face-color
>=20=20
> ;;; Interface utility functions.
>=20=20
> +(defun vtable-buffer (&optional table)
This should be a mandatory argument.
And if it's a mandatory argument then this can just be defined with a
:accessor keyword argument in the defclass.
Also while we're at it, I think the slot name should be just 'buffer not
'-buffer.
> + "Return the buffer associated with TABLE.
> +If TABLE is nil, use the table under point. Return nil if the table has
> +not been inserted into a buffer."
> + (slot-value (or table (vtable-current-table))
> + '-buffer))
> +
> +(defun vtable-set-buffer (buffer &optional table)
Again this should be a mandatory argument.
But also I think this then just becomes a trivial
(setf (vtable-buffer table) buffer)
and probably that doesn't need a helper function.
> + "Associate BUFFER with TABLE.
> +If TABLE is nil, use the table under point."
> + (setf (slot-value (or table (vtable-current-table))
> + '-buffer)
> + buffer))
> +
> (defun vtable-current-table ()
> "Return the table under point."
> (get-text-property (point) 'vtable))
> @@ -301,14 +317,14 @@ vtable-update-object
> (unless (cdr objects)
> (error "Can't find the old object"))
> (setcar (cdr objects) object))
> - ;; Then update the rendered vtable in the current buffer.
> - (if-let* ((cache (vtable--current-cache))
> - (line-number (seq-position (vtable--cache-lines cache)
> - old-object
> - (lambda (a b)
> - (equal (car a) b))))
> - (line (elt (vtable--cache-lines cache) line-number)))
> - (progn
> + ;; Then update the rendered vtable in its buffer.
> + (if-let* ((cache (vtable--current-cache table))
> + (line-number (seq-position (vtable--cache-lines cache)
> + old-object
> + (lambda (a b)
> + (equal (car a) b))))
> + (line (elt (vtable--cache-lines cache) line-number)))
> + (with-current-buffer (vtable-buffer table)
> (setcar line object)
> (setcdr line (vtable--compute-cached-line table object))
> ;; ... and redisplay the line in question.
> @@ -321,8 +337,7 @@ vtable-update-object
> (vtable--cache-widths cache)
> (vtable--spacer table))
> (add-text-properties start (point) (list 'keymap keymap
> - 'vtable table
> - 'vtable-cache cac=
he))))
> + 'vtable table))))
> ;; We may have inserted a non-numerical value into a previously
> ;; all-numerical table, so recompute.
> (vtable--recompute-numerical table (cdr line)))
> @@ -334,14 +349,15 @@ vtable-remove-object
> ;; First remove from the objects.
> (setf (vtable-objects table) (delq object (vtable-objects table)))
> ;; Then adjust the cache and display.
> - (save-excursion
> - (vtable-goto-table table)
> - (let ((cache (vtable--current-cache))
> - (inhibit-read-only t))
> - (setcar cache (delq (assq object (vtable--cache-lines cache))
> - (vtable--cache-lines cache)))
> - (when (vtable-goto-object object)
> - (delete-line)))))
> + (with-current-buffer (vtable-buffer table)
> + (save-excursion
> + (vtable-goto-table table)
> + (let ((cache (vtable--current-cache table))
> + (inhibit-read-only t))
> + (setcar cache (delq (assq object (vtable--cache-lines cache))
> + (vtable--cache-lines cache)))
> + (when (vtable-goto-object object)
> + (delete-line))))))
>=20=20
> ;; FIXME: The fact that the `location' argument of
> ;; `vtable-insert-object' can be an integer and is then interpreted as
> @@ -369,8 +385,9 @@ vtable-insert-object
> (progn
> (setf (vtable-objects table) (list object))
> (vtable--recompute-numerical table (vtable--compute-cached-line =
table object))
> - (vtable-goto-table table)
> - (vtable-revert-command))
> + (with-current-buffer (vtable-buffer table)
> + (vtable-goto-table table)
> + (vtable-revert-command)))
> ;; First insert into the objects.
> (let ((pos (if location
> (if (integerp location)
> @@ -398,56 +415,57 @@ vtable-insert-object
> ;; Otherwise, append the object.
> (nconc (vtable-objects table) (list object)))))
> ;; Then adjust the cache and display.
> - (save-excursion
> - (vtable-goto-table table)
> - (let* ((cache (vtable--current-cache))
> - (inhibit-read-only t)
> - (keymap (get-text-property (point) 'keymap))
> - (ellipsis (if (vtable-ellipsis table)
> - (propertize (truncate-string-ellipsis)
> - 'face (vtable-face table))
> - ""))
> - (ellipsis-width (string-pixel-width ellipsis))
> - (lines (vtable--cache-lines cache))
> - (elem (if location ; This binding mirrors the binding of `=
pos' above.
> - (if (integerp location)
> - (nth location lines)
> - (or (assq location lines)
> - (and before (car lines))))
> - (if before (car lines))))
> - (pos (memq elem lines))
> - (line (cons object (vtable--compute-cached-line table objec=
t))))
> - (if (or before
> - (and pos (integerp location)))
> - ;; Add the new object before:.
> - (let ((old-line (car pos)))
> - (setcar pos line)
> - (setcdr pos (cons old-line (cdr pos)))
> - (unless (vtable-goto-object (car elem))
> - (vtable-beginning-of-table)))
> - ;; Otherwise, add the object after.
> - (if pos
> - ;; Splice the object into the list.
> - (progn
> - (setcdr pos (cons line (cdr pos)))
> - (if (vtable-goto-object location)
> - (forward-line 1) ; Insert *after*.
> - (vtable-end-of-table)))
> - ;; Otherwise, append the object.
> - (setcar cache (nconc lines (list line)))
> - (vtable-end-of-table)))
> - (let ((start (point)))
> - ;; FIXME: We have to adjust colors in lines below this if we
> - ;; have :row-colors.
> - (vtable--insert-line table line 0
> - (vtable--cache-widths cache) (vtable--spa=
cer table)
> - ellipsis ellipsis-width)
> - (add-text-properties start (point) (list 'keymap keymap
> - 'vtable table
> - 'vtable-cache cache)))
> - ;; We may have inserted a non-numerical value into a previously
> - ;; all-numerical table, so recompute.
> - (vtable--recompute-numerical table (cdr line))))))
> + (let* ((cache (vtable--current-cache table))
> + (inhibit-read-only t)
> + (lines (vtable--cache-lines cache))
> + (elem (if location ; This binding mirrors the binding of `po=
s' above.
> + (if (integerp location)
> + (nth location lines)
> + (or (assq location lines)
> + (and before (car lines))))
> + (if before (car lines))))
> + (pos (memq elem lines))
> + (line (cons object (vtable--compute-cached-line table object)=
)))
> + (with-current-buffer (vtable-buffer table)
> + (save-excursion
> + (vtable-goto-table table)
> + (let* ((ellipsis (if (vtable-ellipsis table)
> + (propertize (truncate-string-ellipsis)
> + 'face (vtable-face table))
> + ""))
> + (ellipsis-width (string-pixel-width ellipsis (current-b=
uffer)))
Can we move these let-bindings out to the outer let-binding now?
> + (keymap (get-text-property (point) 'keymap)))
I guess we could get this from vtable-keymap now? In which case it can
also move to the outer let-binding?
> + (if (or before
> + (and pos (integerp location)))
> + ;; Add the new object before:.
> + (let ((old-line (car pos)))
> + (setcar pos line)
> + (setcdr pos (cons old-line (cdr pos)))
> + (unless (vtable-goto-object (car elem))
> + (vtable-beginning-of-table)))
> + ;; Otherwise, add the object after.
> + (if pos
> + ;; Splice the object into the list.
> + (progn
> + (setcdr pos (cons line (cdr pos)))
> + (if (vtable-goto-object location)
> + (forward-line 1) ; Insert *after*.
> + (vtable-end-of-table)))
> + ;; Otherwise, append the object.
> + (setcar cache (nconc lines (list line)))
> + (vtable-end-of-table)))
> + (let ((start (point)))
> + ;; FIXME: We have to adjust colors in lines below this if =
we
> + ;; have :row-colors.
> + (vtable--insert-line table line 0
> + (vtable--cache-widths cache)
> + (vtable--spacer table)
> + ellipsis ellipsis-width)
> + (add-text-properties start (point) (list 'keymap keymap
> + 'vtable table)))
> + ;; We may have inserted a non-numerical value into a previou=
sly
> + ;; all-numerical table, so recompute.
> + (vtable--recompute-numerical table (cdr line))))))))
>=20=20
> (defun vtable-column (table index)
> "Return the name of the INDEXth column in TABLE."
> @@ -520,14 +538,14 @@ vtable--cache-widths
> (defun vtable--cache-lines (cache)
> (car cache))
>=20=20
> -(defun vtable-insert (table)
> +(defun vtable--insert (table)
> (let* ((spacer (vtable--spacer table))
> (start (point))
> (ellipsis (if (vtable-ellipsis table)
> (propertize (truncate-string-ellipsis)
> 'face (vtable-face table))
> ""))
> - (ellipsis-width (string-pixel-width ellipsis))
> + (ellipsis-width (string-pixel-width ellipsis (current-buffer)))
Should we use vtable-buffer rather than current-buffer here, I guess?
> ;; We maintain a cache per screen/window width, so that we rend=
er
> ;; correctly if Emacs is open on two different screens (or the
> ;; user resizes the frame).
> @@ -549,8 +567,7 @@ vtable-insert
> (add-text-properties start (point)
> (list 'keymap vtable-header-line-map
> 'rear-nonsticky t
> - 'vtable table
> - 'vtable-cache cache))
> + 'vtable table))
> (setq start (point))))
> (vtable--sort table cache)
> ;; Insert the data.
> @@ -561,13 +578,28 @@ vtable-insert
> (setq line-number (1+ line-number))))
> (add-text-properties start (point)
> (list 'rear-nonsticky t
> - 'vtable table
> - 'vtable-cache cache))
> + 'vtable table))
> + (vtable--set-current-cache table cache)
> (goto-char start)))
>=20=20
> +(defun vtable-insert (table)
> + "Insert TABLE into the current buffer.
> +The current buffer will be recorded as TABLE's buffer. If this is done
> +more than once, or if the table is attempted to be inserted more than
> +once into the same buffer, signal an error."
> + (if-let* ((table-buffer (vtable-buffer table)))
> + (if (eq table-buffer (current-buffer))
> + (error "A vtable cannot be inserted more than once into a buff=
er")
I don't think this should be an error. It's reasonable for Lisp code to
clear a buffer and then want to reinsert a vtable into it. If we're
inserting into the same buffer, there's no problem.
I guess your concern is inserting a vtable when it already is present.
I don't think there's a good way to prevent that right now,
unfortunately, without also breaking the legitimate use case of clearing
a buffer then reinserting the vtable.
> + (error "A vtable cannot be inserted into more than one buffer")))
I agree that this should be an error, of course.
> + (vtable-set-buffer (current-buffer) table)
> + (let ((inhibit-read-only t)
> + (inhibit-modification-hooks t))
> + (vtable--insert table)))
> +
> (defun vtable--insert-line (table line line-number widths spacer
> &optional ellipsis ellipsis-width)
> (let ((start (point))
> + (buffer (vtable-buffer table))
> (columns (vtable-columns table))
> (column-colors
> (and (vtable-column-colors table)
> @@ -607,16 +639,18 @@ vtable--insert-line
> (concat
> (vtable--limit-string
> pre-computed (- (elt widths index)
> - (or ellipsis-width 0)))
> + (or ellipsis-width 0))
> + buffer)
> ellipsis)
> pre-computed))
> ;; Recompute widths.
> (t
> - (if (> (string-pixel-width value) (elt widths index))
> + (if (> (string-pixel-width value buffer) (elt widths i=
ndex))
> (concat
> (vtable--limit-string
> value (- (elt widths index)
> - (or ellipsis-width 0)))
> + (or ellipsis-width 0))
> + buffer)
> ellipsis)
> value))))
> (start (point))
> @@ -630,14 +664,15 @@ vtable--insert-line
> (list 'space
> :width (list
> (+ (- (elt widths index)
> - (string-pixel-width displa=
yed))
> + (string-pixel-width
> + displayed buffer))
> (if last 0 spacer)))))))
> ;; Align to the right.
> (insert (propertize " " 'display
> (list 'space
> :width (list (- (elt widths index)
> (string-pixel-wid=
th
> - displayed)))))
> + displayed buffer=
)))))
> displayed)
> (unless last
> (insert (propertize " " 'display
> @@ -664,15 +699,19 @@ vtable--insert-line
> (defun vtable--cache-key ()
> (cons (frame-terminal) (window-width)))
>=20=20
> -(defun vtable--current-cache ()
> - "Return the current cache for the table at point.
> +(defun vtable--current-cache (&optional table)
> + "Return the current cache for TABLE or the table under point.
>=20=20
> In `vtable-insert', the lines and widths of the vtable text are computed
> based on the current selected frame and window and stored in a cache.
> Subsequent interaction with the text of the vtable should use that cache
> via this function rather than by calling `vtable--cache-key' to look up
> the cache."
> - (get-text-property (point) 'vtable-cache))
> + (slot-value (or table (vtable-current-table)) '-current-cache))
Can we make TABLE just be a mandatory argument? It looks to me like
this would just require vtable-next-column and vtable-previous-column to
run (vtable--current-cache (vtable-current-table))
Then this function just becomes another :accessor.
> +
> +(defun vtable--set-current-cache (table cache)
> + "Set the current cache for the table."
> + (setf (slot-value table '-current-cache) cache))
>=20=20
> (defun vtable--clear-cache (table)
> (setf (gethash (vtable--cache-key) (slot-value table '-cache)) nil))
> @@ -718,6 +757,7 @@ vtable--indicator
> (defun vtable--insert-header-line (table widths spacer)
> ;; Insert the header directly into the buffer.
> (let ((start (point))
> + (buffer (vtable-buffer table))
> (divider (vtable-divider table))
> (cmap (define-keymap
> "<header-line> <drag-mouse-1>" #'vtable--drag-resize-col=
umn
> @@ -737,14 +777,15 @@ vtable--insert-header-line
> 'keymap cmap))
> (start (point))
> (indicator (vtable--indicator table index))
> - (indicator-width (string-pixel-width indicator))
> + (indicator-width (string-pixel-width indicator buffer))
> (last (=3D index (1- (length (vtable-columns table)))))
> displayed)
> (setq displayed
> - (if (> (string-pixel-width name)
> + (if (> (string-pixel-width name buffer)
> (- (elt widths index) indicator-width))
> (vtable--limit-string
> - name (- (elt widths index) indicator-width))
> + name (- (elt widths index) indicator-width)
> + buffer)
> name))
> (let* ((indicator-lead-width
> ;; We want the indicator to not be quite flush right.
> @@ -753,7 +794,7 @@ vtable--insert-header-line
> indicator-lead-width))
> (fill-width
> (+ (- (elt widths index)
> - (string-pixel-width displayed)
> + (string-pixel-width displayed buffer)
> indicator-width
> indicator-lead-width)
> (if last 0 spacer))))
> @@ -771,7 +812,8 @@ vtable--insert-header-line
> ;; This is the final column, and we have a sorting
> ;; indicator, and the table is too wide for the window.
> (let* ((pre-indicator (string-pixel-width
> - (buffer-substring (point-min) (point=
))))
> + (buffer-substring (point-min) (point=
))
> + buffer))
> (pre-fill
> (- (window-width nil t)
> pre-indicator
> @@ -850,14 +892,16 @@ vtable--set-header-line
> (buffer-substring (point-min) (1- (point-max))))))
> (vtable-header-mode 1))
>=20=20
> -(defun vtable--limit-string (string pixels)
> +
> +(defun vtable--limit-string (string pixels buffer)
> (while (and (length> string 0)
> - (> (string-pixel-width string) pixels))
> + (> (string-pixel-width string buffer) pixels))
> (setq string (substring string 0 (1- (length string)))))
> string)
>=20=20
> (defun vtable--char-width (table)
> - (string-pixel-width (propertize "x" 'face (vtable-face table))))
> + (string-pixel-width (propertize "x" 'face (vtable-face table))
> + (vtable-buffer table)))
>=20=20
> (defun vtable--compute-width (table spec)
> (cond
> @@ -936,7 +980,7 @@ vtable--compute-cached-line
> ;; We stash the computed width and string here -- if there are
> ;; no formatters/displayers, we'll be using the string, and
> ;; then won't have to recreate it.
> - (list value (string-pixel-width string) string)))
> + (list value (string-pixel-width string (vtable-buffer table)) str=
ing)))
> (vtable-columns table)))
>=20=20
> (defun vtable--make-keymap (table)
> @@ -967,20 +1011,21 @@ vtable--make-keymap
> (vtable-keymap table))
> map)))
>=20=20
> -(defun vtable-revert ()
> - "Regenerate the table under point."
> - (let ((table (vtable-current-table))
> - (object (vtable-current-object))
> - (column (vtable-current-column))
> - (inhibit-read-only t))
> - (unless table
> - (user-error "No table under point"))
> - (delete-region (vtable-beginning-of-table) (vtable-end-of-table))
> - (vtable-insert table)
> - (when object
> - (vtable-goto-object object))
> - (when column
> - (vtable-goto-column column))))
> +(defun vtable-revert (&optional table)
> + "Regenerate TABLE, defaulting to the table under point."
> + (setq table (or table (vtable-current-table)))
> + (unless table
> + (user-error "No table under point"))
> + (with-current-buffer (vtable-buffer table)
> + (let ((object (vtable-current-object))
> + (column (vtable-current-column))
> + (inhibit-read-only t))
> + (delete-region (vtable-beginning-of-table) (vtable-end-of-table))
> + (vtable--insert table)
> + (when object
> + (vtable-goto-object object))
> + (when column
> + (vtable-goto-column column)))))
>=20=20
> ;;; Commands.
>=20=20
> @@ -1006,14 +1051,14 @@ vtable-narrow-current-column
> (- (* (vtable--char-width table) (or n 1=
))))))
>=20=20
> (defun vtable--alter-column-width (table column delta)
> - (let ((widths (vtable--cache-widths (vtable--current-cache))))
> + (let ((widths (vtable--cache-widths (vtable--current-cache table))))
> (setf (aref widths column)
> (max (* (vtable--char-width table) 2)
> (+ (aref widths column) delta)))
> ;; Store the width so it'll be respected on a revert.
> (setf (vtable-column-width (elt (vtable-columns table) column))
> (format "%dpx" (aref widths column)))
> - (vtable-revert)))
> + (vtable-revert table)))
>=20=20
> (defun vtable-widen-current-column (&optional n)
> "Widen the current column by N characters.
> @@ -1028,7 +1073,8 @@ vtable-previous-column
> (interactive)
> (vtable-goto-column
> (max 0 (1- (or (vtable-current-column)
> - (length (vtable--cache-widths (vtable--current-cache))=
))))))
> + (length (vtable--cache-widths
> + (vtable--current-cache))))))))
>=20=20
> (defun vtable-next-column ()
> "Go to the next column."
> @@ -1038,14 +1084,16 @@ vtable-next-column
> (min (1- (length (vtable--cache-widths (vtable--current-cache))))
> (1+ (vtable-current-column))))))
>=20=20
> -(defun vtable-revert-command ()
> +(defun vtable-revert-command (&optional table)
> "Re-query data and regenerate the table under point."
> (interactive)
> - (let ((table (vtable-current-table)))
> - (when (vtable-objects-function table)
> - (setf (vtable-objects table) (funcall (vtable-objects-function tab=
le))))
> - (vtable--clear-cache table))
> - (vtable-revert))
> + (setq table (or table (vtable-current-table)))
> + (unless table
> + (user-error "No table found"))
> + (when (vtable-objects-function table)
> + (setf (vtable-objects table) (funcall (vtable-objects-function table=
))))
> + (vtable--clear-cache table)
> + (vtable-revert table))
>=20=20
> (defun vtable-sort-by-current-column ()
> "Sort the table under point by the column under point."
> @@ -1067,8 +1115,8 @@ vtable-sort-by-current-column
> (if (eq (cdr last) 'ascend)
> 'descend
> 'ascend)
> - 'ascend))))))
> - (vtable-revert))
> + 'ascend)))))
> + (vtable-revert table)))
>=20=20
> (defun vtable-header-line-sort (e)
> "Sort a vtable from the header line."
> diff --git a/test/lisp/emacs-lisp/vtable-tests.el b/test/lisp/emacs-lisp/=
vtable-tests.el
> index 74fb8cc8139..83f826ea353 100644
> --- a/test/lisp/emacs-lisp/vtable-tests.el
> +++ b/test/lisp/emacs-lisp/vtable-tests.el
> @@ -27,16 +27,19 @@
> (require 'ert)
> (require 'ert-x)
>=20=20
> -(ert-deftest test-vstable-compute-columns ()
> +(defun vtable-tests--make-no-header-2-object-table ()
> + (make-vtable :columns '("a" "b" "c")
> + :objects '(("foo" 1 2)
> + ("bar" 3 :zot))
> + :insert nil))
> +
> +(ert-deftest test-vtable-compute-columns ()
> (should
> (equal (mapcar
> (lambda (column)
> (vtable-column-align column))
> (vtable--compute-columns
> - (make-vtable :columns '("a" "b" "c")
> - :objects '(("foo" 1 2)
> - ("bar" 3 :zot))
> - :insert nil)))
> + (vtable-tests--make-no-header-2-object-table)))
> '(left right left))))
>=20=20
> (ert-deftest test-vtable-insert-object ()
> @@ -69,4 +72,69 @@ test-vtable-insert-object
> (mapcar #'cadr (vtable-objects table))))
> (number-sequence 0 11))))
>=20=20
> +(ert-deftest test-vtable-unique-buffer ()
> + (let ((table (vtable-tests--make-no-header-2-object-table)))
> + (with-temp-buffer
> + (vtable-insert table)
> + ;; This will run but fail on Emacs pre 31 vtable.
> + (should-error (vtable-insert table))
> + ;; This will run only on Emacs 31+ vtable.
> + (when (> emacs-major-version 30)
> + (should-error (vtable-set-buffer table (current-buffer)))))))
> +
> +(ert-deftest test-vtable-non-current-buffer-insert-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (should (=3D (count-lines (point-min) (point-max)) 2))
> + (with-temp-buffer
> + (vtable-insert-object table obj))
> + (should (=3D (count-lines (point-min) (point-max)) 3)))))
> +
> +(ert-deftest test-vtable-non-current-buffer-remove-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (vtable-insert-object table obj)
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (with-temp-buffer
> + (vtable-remove-object table obj))
> + (should (=3D (count-lines (point-min) (point-max)) 2)))))
> +
> +(ert-deftest test-vtable-non-current-buffer-update-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5))
> + (obj-2 '("qux" 6 7)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (vtable-insert-object table obj)
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (let ((line-2 (progn
> + (goto-char (point-min))
> + (forward-line 2)
> + (buffer-substring (point) (point-max)))))
> + (with-temp-buffer
> + (vtable-update-object table obj-2 obj))
> + (let ((line-2-new (progn
> + (goto-char (point-min))
> + (forward-line 2)
> + (buffer-substring (point) (point-max)))))
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (should (not (string=3D line-2 line-2-new))))))))
> +
> +(ert-deftest test-vtable--limit-string-with-face-remapped-buffer ()
> + (with-temp-buffer
> + (let ((text (propertize "XXXXX"
> + 'face 'variable-pitch)))
> + (face-remap-add-relative 'default :height 1.5)
> + (if (> emacs-major-version 30)
> + (should (eq
> + 2
> + (length (vtable--limit-string text 50 (current-buffer=
)))))
> + (should (eq
> + 2
> + (length (vtable--limit-string text 50))))))))
> +
> ;;; vtable-tests.el ends here
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 11 Dec 2025 17:00:07 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 11 12:00:07 2025 Received: from localhost ([127.0.0.1]:46561 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vTk1N-0001i1-N1 for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 12:00:06 -0500 Received: from mail-vs1-xe2c.google.com ([2607:f8b0:4864:20::e2c]:49565) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vTk1K-0001gq-AZ for 79982 <at> debbugs.gnu.org; Thu, 11 Dec 2025 12:00:03 -0500 Received: by mail-vs1-xe2c.google.com with SMTP id ada2fe7eead31-5dbd9c7e468so154905137.3 for <79982 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 09:00:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765472396; x=1766077196; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=w6a9eB60ehnv18bbljbIlNA6O75BRkETFeWfgB8IuQE=; b=BnnadCvBmbIpHz+DKsM5p484LpBa88Mwh0TFmCDsl9hSrtV8DcCBR/tOuFYDQOpGYL qfiDnqKHrhligDchO6AM9iaW6Yc+txE1Mxf5JvEiyTXDoFKX5u+/0IMgNaWCGHjVceqo k2RAZFh+7DR3QWKz258YfZWRbMiA5r3Iuq5GS7AhUfj/0pAka7uuasWRg0d0HR6KsVRI Zkvf34+0sKDqpvaBgklYvdk/BcAtrdzNpr0rGxTpkKEvlk3Vv/TF4FCaIcLF43LWBagc 4H5jcFhWPZ4FDRgewZSXAGCdVOx4OWoWB4w3cOZChSOpUKndhFquzRSfHv3fQLgWoFmR zbrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765472396; x=1766077196; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=w6a9eB60ehnv18bbljbIlNA6O75BRkETFeWfgB8IuQE=; b=WzAnzbgedCogPHjYet5TPVibX1Wrux+6M1VefSlc/ADrtFt0JHHbeX08LZ7MOqdKyy Z7QM9gTaizELo6jN84fD1BsEoWZUrp6yPicOWA/MKAWtVfHaEXNA9pfSLKYJzvl7I2E+ uF5izQTBhoWWVdkySZt4BaK0XhMHIjC7i9mRf9gCMB/8jAfMJCSruImjSl/svVdGgKYz GjszsflavdGCN3+0ketnjCsILMPVmSCykd7wjDtkkwi4FssgWwuQAD1v5Mt1X3SsXRtf nI9VrWRIS+RR8zjRueGj7gWCM5b9ndOasy7BqKcM6KPmno1IOMWxTGIWKffLNDNokaiE NvLA== X-Forwarded-Encrypted: i=1; AJvYcCWSoWM/xYNN2nk4LUmRmbIZlmhS5mXWA5KVgnktuU7Gx2JaKRopZvLL9z7TDhplLx1wJeMeEw==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yx7icKsWxMGCQR6O3vKXTVRVwBd722sU+gu/jnjWDMVJwO3Df2V cyc2XiaNh6gwxC/6SfRtUH7jMwLkWiP6HYA12Oxh8qS8Dt8nBhQnPq3IhDmz4Z9m3AiJiPtQqaz /hVbVLQsu4kNl2bXKZawr0kgF78dUihc= X-Gm-Gg: AY/fxX5wFmu4nLvWkxKQ59dTcFcBUxn0Mkq6AFyuiiEAd9GR8L+h+mA49WmA2bHg7NN RagggS7LERaTkvwS5QtrtK1skW5wMcQ95Fx7wQ3/e14GWhdkoRU2rGCv9XrZgqqDOPTUR3dVFPY AJ6OCKaw0ARFu6K7dllhCLMPH90KCmGajYP65tJIniBQf7KrqG2COHjQ/dCgXBHMxOeTrNS1yk+ OMDifjYpFlCXF/fO9SGDWeHCqhY7y5Y1zIp5E86w0VpYPVq7cJQbMX80vBTC6ZMhrd100wjW6zX yJWbXQ== X-Google-Smtp-Source: AGHT+IHOMjg242IVfTmssFuSIj3wkdnAW+VTBqBWIt8YSIxqcEl6iZ6EZz8y9zuE16mtNq0bzl0WvYVzSHv2kMpEqJY= X-Received: by 2002:a05:6102:1529:b0:5db:ca9e:b589 with SMTP id ada2fe7eead31-5e571eed8c4mr2517950137.33.1765472396398; Thu, 11 Dec 2025 08:59:56 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> <ierfr9irmo2.fsf_-_@HIDDEN> In-Reply-To: <ierfr9irmo2.fsf_-_@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Thu, 11 Dec 2025 11:59:43 -0500 X-Gm-Features: AQt7F2qb660x3bx2SrVZCaOsVhhcG6n7NCHOok97kiCqRsEIuPwhnRIbtwH3el4 Message-ID: <CAN+1HboLRzmAAyC=zK4ji-CJ-2OWcb=4ZbpfqfMRga3dkQGLFw@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/mixed; boundary="0000000000000c6d050645b01364" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000000c6d050645b01364 Content-Type: multipart/alternative; boundary="0000000000000c6d040645b01362" --0000000000000c6d040645b01362 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Revised patch, attached. On Wed, Dec 10, 2025 at 5:34=E2=80=AFPM Spencer Baugh <sbaugh@HIDDEN= m> wrote: > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > Since we're restricting a vtable to only be inserted in a single buffer > now, we can make vtable--current-cache take the table as an explicit > argument, and just pull the cache out of there rather than the current > buffer. Actually, we can stop setting the vtable-cache text property > entirely: it should only be pulled from the table. > Good idea. > + (line-number (seq-position (vtable--cache-lines cache) > > + old-object > > + (lambda (a b) > > + (equal (car a) b)))) > > + (line (elt (vtable--cache-lines cache) line-number))) > > + (progn > > With the above-mentioned change to vtable--current-cache, you could have > the change just turn this progn into a with-current-buffer. > Good idea. > (defun vtable-remove-object (table object) > > "Remove OBJECT from TABLE. > > @@ -334,14 +350,15 @@ vtable-remove-object > > ;; First remove from the objects. > > (setf (vtable-objects table) (delq object (vtable-objects table))) > > ;; Then adjust the cache and display. > > - (save-excursion > > - (vtable-goto-table table) > > - (let ((cache (vtable--current-cache)) > > - (inhibit-read-only t)) > > - (setcar cache (delq (assq object (vtable--cache-lines cache)) > > - (vtable--cache-lines cache))) > > - (when (vtable-goto-object object) > > - (delete-line))))) > > + (with-current-buffer (vtable-buffer table) > > + (save-excursion > > + (vtable-goto-table table) > > + (let ((cache (vtable--current-cache)) > > Maybe we won't need this vtable-goto-table if we make > vtable--current-cache take the table? > The goto-object calls require point being in the table. > > + (inhibit-read-only t) > > + (keymap (get-text-property (point) 'keymap)) > > + (ellipsis (if (vtable-ellipsis table) > > + (propertize (truncate-string-ellipsis) > > + 'face (vtable-face table)) > > + "")) > > + (ellipsis-width (string-pixel-width ellipsis > (current-buffer))) > > + (lines (vtable--cache-lines cache)) > > + (elem (if location ; This binding mirrors the binding > of `pos' above. > > + (if (integerp location) > > + (nth location lines) > > + (or (assq location lines) > > + (and before (car lines)))) > > + (if before (car lines)))) > > + (pos (memq elem lines)) > > + (line (cons object (vtable--compute-cached-line table > object)))) > > Hmm... I think this is the only thing in these let-bindings which > depends on the current buffer (besides vtable--current-cache which > should take the buffer as an argument). > I reworked that code a bit to narrow the w-c-b scope. If we made vtable--compute-cached-line take the buffer and explicitly > passed it to string-pixel-width in there, I think we'd be able to bind > with-current-buffer around much less code. > Not needed. I changed the string-pixel-width call to include vtable-buffer. -St=C3=A9phane --0000000000000c6d040645b01362 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div><div class=3D"gmail_default" style= =3D"font-family:monospace">Revised patch, attached.</div></div><div><br></d= iv><div class=3D"gmail_default" style=3D"font-family:monospace"><span style= =3D"font-family:Arial,Helvetica,sans-serif">On Wed, Dec 10, 2025 at 5:34=E2= =80=AFPM Spencer Baugh <<a href=3D"mailto:sbaugh@HIDDEN">sbaugh@= janestreet.com</a>> wrote:</span></div></div><div class=3D"gmail_quote g= mail_quote_container"><blockquote class=3D"gmail_quote" style=3D"margin:0px= 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">St= =C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" target=3D"_bla= nk">shipmints@HIDDEN</a>> writes:<br><br> Since we're restricting a vtable to only be inserted in a single buffer= <br> now, we can make vtable--current-cache take the table as an explicit<br> argument, and just pull the cache out of there rather than the current<br> buffer.=C2=A0 Actually, we can stop setting the vtable-cache text property<= br> entirely: it should only be pulled from the table.<br></blockquote><div><br= ></div><div><div class=3D"gmail_default" style=3D"font-family:monospace">Go= od idea.</div></div><div class=3D"gmail_default" style=3D"font-family:monos= pace"><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0= px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (line-number = (seq-position (vtable--cache-lines cache)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0old-object<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(lambda (a b)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0(equal (car a) b))))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (line (elt (v= table--cache-lines cache) line-number)))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn<br> <br> With the above-mentioned change to vtable--current-cache, you could have<br= > the change just turn this progn into a with-current-buffer.<br></blockquote= ><div><br></div><div class=3D"gmail_default" style=3D"font-family:monospace= ">Good idea.</div><div class=3D"gmail_default" style=3D"font-family:monospa= ce"><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px= 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> >=C2=A0 (defun vtable-remove-object (table object)<br> >=C2=A0 =C2=A0 "Remove OBJECT from TABLE.<br> > @@ -334,14 +350,15 @@ vtable-remove-object<br> >=C2=A0 =C2=A0 ;; First remove from the objects.<br> >=C2=A0 =C2=A0 (setf (vtable-objects table) (delq object (vtable-objects= table)))<br> >=C2=A0 =C2=A0 ;; Then adjust the cache and display.<br> > -=C2=A0 (save-excursion<br> > -=C2=A0 =C2=A0 (vtable-goto-table table)<br> > -=C2=A0 =C2=A0 (let ((cache (vtable--current-cache))<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (inhibit-read-only t))<br> > -=C2=A0 =C2=A0 =C2=A0 (setcar cache (delq (assq object (vtable--cache-= lines cache))<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 (vtable--cache-lines cache)))<br> > -=C2=A0 =C2=A0 =C2=A0 (when (vtable-goto-object object)<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (delete-line)))))<br> > +=C2=A0 (with-current-buffer (vtable-buffer table)<br> > +=C2=A0 =C2=A0 (save-excursion<br> > +=C2=A0 =C2=A0 =C2=A0 (vtable-goto-table table)<br> > +=C2=A0 =C2=A0 =C2=A0 (let ((cache (vtable--current-cache))<br> <br> Maybe we won't need this vtable-goto-table if we make<br> vtable--current-cache take the table?<br></blockquote><div><br></div><div><= div class=3D"gmail_default" style=3D"font-family:monospace">The goto-object= calls require point being in the table.</div></div><div>=C2=A0</div><block= quote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1= px solid rgb(204,204,204);padding-left:1ex">> +=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(inhibit-read-only t)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(keymap (get-t= ext-property (point) 'keymap))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis (if = (vtable-ellipsis table)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(propertize (truncate-string-ellipsis)<b= r> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0'face (vtable-face table))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0""))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis-widt= h (string-pixel-width ellipsis (current-buffer)))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lines (vtable= --cache-lines cache))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(elem (if loca= tion=C2=A0 ; This binding mirrors the binding of `pos' above.<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0(if (integerp location)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(nth location lines)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0(or (assq location lines)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(and before (car lines))))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0(if before (car lines))))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(pos (memq ele= m lines))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(line (cons ob= ject (vtable--compute-cached-line table object))))<br> <br> Hmm... I think this is the only thing in these let-bindings which<br> depends on the current buffer (besides vtable--current-cache which<br> should take the buffer as an argument).<br></blockquote><div><br></div><div= class=3D"gmail_default" style=3D"font-family:monospace">I reworked that co= de a bit to narrow the=C2=A0w-c-b scope.</div><div class=3D"gmail_default" = style=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quote"= style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p= adding-left:1ex"> If we made vtable--compute-cached-line take the buffer and explicitly<br> passed it to string-pixel-width in there, I think we'd be able to bind<= br> with-current-buffer around much less code.<br></blockquote><div><br></div><= div class=3D"gmail_default" style=3D"font-family:monospace">Not needed. I c= hanged the string-pixel-width call to include vtable-buffer.</div><div clas= s=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D= "gmail_default" style=3D"font-family:monospace">-St=C3=A9phane=C2=A0</div><= /div></div> --0000000000000c6d040645b01362-- --0000000000000c6d050645b01364 Content-Type: application/octet-stream; name="0001-Add-vtable-buffer-slot.patch" Content-Disposition: attachment; filename="0001-Add-vtable-buffer-slot.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mj1oo7wo0> X-Attachment-Id: f_mj1oo7wo0 RnJvbSAxYzEwNGYxYjI5YWE5ZTM5NjAwNWFlNzMzOTRhMmY0OTEwNDM2MWM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTAgRGVjIDIwMjUgMDk6MjA6MDIgLTA1MDAK U3ViamVjdDogW1BBVENIXSBBZGQgdnRhYmxlIGJ1ZmZlciBzbG90CgpUaGlzIHNvbHZlcyBmb3Ig YmFja2dyb3VuZCB2dGFibGUgbXV0YXRpb25zLCBpLmUuLCB1cGRhdGVzCmluaXRpYXRlZCBmcm9t IGJ1ZmZlcnMgb3RoZXIgdGhhbiB0aGUgdnRhYmxlIGJ1ZmZlciwgYW5kIGZvcgpidWZmZXItYWRq dXN0ZWQgc3RyaW5nLXBpeGVsLXdpZHRoIGNvbXB1dGF0aW9ucy4KCiogbGlzcC9lbWFjcy1saXNw L3Z0YWJsZS5lbCAodnRhYmxlKTogTmV3ICctYnVmZmVyJyBzbG90LgoodnRhYmxlLWJ1ZmZlcik6 Cih2dGFibGUtc2V0LWJ1ZmZlcik6IE5ldyBmdW5jdGlvbi4KKHZ0YWJsZS11cGRhdGUtb2JqZWN0 KToKKHZ0YWJsZS1yZW1vdmUtb2JqZWN0KToKKHZ0YWJsZS1pbnNlcnQtb2JqZWN0KTogV3JhcCBv cGVyYXRpb24gd2l0aCB0aGUgdnRhYmxlIGJ1ZmZlci4KKHZ0YWJsZS0taW5zZXJ0KTogU3BsaXQg ZnJvbSBvbGQgJ3Z0YWJsZS1pbnNlcnQnLgoodnRhYmxlLWluc2VydCk6IEluc2VydCB0YWJsZSBh bmQgcmVjb3JkIHRoZSBidWZmZXIuCih2dGFibGUtLWluc2VydC1saW5lKToKKHZ0YWJsZS0taW5z ZXJ0LWhlYWRlci1saW5lKTogVXNlICd2dGFibGUtYnVmZmVyJyBmb3IgcGl4ZWwtd2lkdGggY29t cHV0YXRpb24uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6Cih2dGFibGUtLWNoYXItd2lkdGgpOiBQ YXNzIGJ1ZmZlciB0byAnc3RyaW5nLXBpeGVsLXdpZHRoJy4KKHZ0YWJsZS1yZXZlcnQpOiBOZXcg b3B0aW9uYWwgdGFibGUgYXJndW1lbnQuCih2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCk6Cih2 dGFibGUtcmV2ZXJ0LWNvbW1hbmQpOgoodnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4pOiBD YWxsICd2dGFibGUtcmV2ZXJ0JyB3aXRoIHRoZSB0YWJsZS4KCiogdGVzdC9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLXRlc3RzLmVsCih2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0 LXRhYmxlKTogTmV3IGhlbHBlcgpmdW5jdGlvbi4KKHRlc3QtdnN0YWJsZS1jb21wdXRlLWNvbHVt bnMpOiBDb3JyZWN0IHR5cG8gaW4gdGVzdCBuYW1lLiAgVXNlCm5ldyBoZWxwZXIgZnVuY3Rpb24u Cih0ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyKQoodGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVm ZmVyLWluc2VydC1vYmplY3QpCih0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3Zl LW9iamVjdCkKKHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUtb2JqZWN0KQoo dGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRoLWZhY2UtcmVtYXBwZWQtYnVmZmVyKTogTmV3 IHRlc3QuCi0tLQogbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCAgICAgICAgICAgIHwgMjg0ICsr KysrKysrKysrKysrKystLS0tLS0tLS0tLQogdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRl c3RzLmVsIHwgIDc4ICsrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDIzOSBpbnNlcnRpb25zKCsp LCAxMjMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5l bCBiL2xpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwKaW5kZXggYmNkZDI4MGZiOTIuLmY0ZDg3NTgx ZGZhIDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVsCisrKyBiL2xpc3AvZW1h Y3MtbGlzcC92dGFibGUuZWwKQEAgLTY4LDcgKzY4LDkgQEAgdnRhYmxlCiAgICAoY29sdW1uLWNv bG9ycyA6aW5pdGFyZyA6Y29sdW1uLWNvbG9ycyA6YWNjZXNzb3IgdnRhYmxlLWNvbHVtbi1jb2xv cnMpCiAgICAocm93LWNvbG9ycyA6aW5pdGFyZyA6cm93LWNvbG9ycyA6YWNjZXNzb3IgdnRhYmxl LXJvdy1jb2xvcnMpCiAgICAoLWNhY2hlZC1jb2xvcnMgOmluaXRmb3JtIG5pbCkKKyAgICgtYnVm ZmVyIDppbml0Zm9ybSBuaWwpCiAgICAoLWNhY2hlIDppbml0Zm9ybSAobWFrZS1oYXNoLXRhYmxl IDp0ZXN0ICMnZXF1YWwpKQorICAgKC1jdXJyZW50LWNhY2hlIDppbml0Zm9ybSBuaWwpCiAgICAo LWNhY2hlZC1rZXltYXAgOmluaXRmb3JtIG5pbCkKICAgICgtaGFzLWNvbHVtbi1zcGVjIDppbml0 Zm9ybSBuaWwpKQogICAiQW4gb2JqZWN0IHRvIGhvbGQgdGhlIGRhdGEgZm9yIGEgdGFibGUuIikK QEAgLTIyMSw2ICsyMjMsMjAgQEAgdnRhYmxlLS1mYWNlLWNvbG9yCiAKIDs7OyBJbnRlcmZhY2Ug dXRpbGl0eSBmdW5jdGlvbnMuCiAKKyhkZWZ1biB2dGFibGUtYnVmZmVyICgmb3B0aW9uYWwgdGFi bGUpCisgICJSZXR1cm4gdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggVEFCTEUuCitJZiBUQUJM RSBpcyBuaWwsIHVzZSB0aGUgdGFibGUgdW5kZXIgcG9pbnQuICBSZXR1cm4gbmlsIGlmIHRoZSB0 YWJsZSBoYXMKK25vdCBiZWVuIGluc2VydGVkIGludG8gYSBidWZmZXIuIgorICAoc2xvdC12YWx1 ZSAob3IgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkKKyAgICAgICAgICAgICAgJy1idWZm ZXIpKQorCisoZGVmdW4gdnRhYmxlLXNldC1idWZmZXIgKGJ1ZmZlciAmb3B0aW9uYWwgdGFibGUp CisgICJBc3NvY2lhdGUgQlVGRkVSIHdpdGggVEFCTEUuCitJZiBUQUJMRSBpcyBuaWwsIHVzZSB0 aGUgdGFibGUgdW5kZXIgcG9pbnQuIgorICAoc2V0ZiAoc2xvdC12YWx1ZSAob3IgdGFibGUgKHZ0 YWJsZS1jdXJyZW50LXRhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgJy1idWZmZXIpCisgICAg ICAgIGJ1ZmZlcikpCisKIChkZWZ1biB2dGFibGUtY3VycmVudC10YWJsZSAoKQogICAiUmV0dXJu IHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCiAgIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICd2 dGFibGUpKQpAQCAtMzAxLDE0ICszMTcsMTQgQEAgdnRhYmxlLXVwZGF0ZS1vYmplY3QKICAgICAg ICh1bmxlc3MgKGNkciBvYmplY3RzKQogICAgICAgICAoZXJyb3IgIkNhbid0IGZpbmQgdGhlIG9s ZCBvYmplY3QiKSkKICAgICAgIChzZXRjYXIgKGNkciBvYmplY3RzKSBvYmplY3QpKQotICAgIDs7 IFRoZW4gdXBkYXRlIHRoZSByZW5kZXJlZCB2dGFibGUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgot ICAgIChpZi1sZXQqICgoY2FjaGUgKHZ0YWJsZS0tY3VycmVudC1jYWNoZSkpCi0gICAgICAgICAg ICAgKGxpbmUtbnVtYmVyIChzZXEtcG9zaXRpb24gKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkLW9iamVjdAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGEgYikKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbCAoY2FyIGEpIGIpKSkp Ci0gICAgICAgICAgICAgKGxpbmUgKGVsdCAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkgbGlu ZS1udW1iZXIpKSkKLSAgICAgICAgKHByb2duCisgICAgOzsgVGhlbiB1cGRhdGUgdGhlIHJlbmRl cmVkIHZ0YWJsZSBpbiBpdHMgYnVmZmVyLgorICAgIChpZi1sZXQqICgoY2FjaGUgKHZ0YWJsZS0t Y3VycmVudC1jYWNoZSB0YWJsZSkpCisgICAgICAgICAgICAgIChsaW5lLW51bWJlciAoc2VxLXBv c2l0aW9uICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvbGQtb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsYW1iZGEgKGEgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZXF1YWwgKGNhciBhKSBiKSkpKQorICAgICAgICAgICAgICAobGlu ZSAoZWx0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSBsaW5lLW51bWJlcikpKQorICAgICAg ICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKICAgICAgICAgICAo c2V0Y2FyIGxpbmUgb2JqZWN0KQogICAgICAgICAgIChzZXRjZHIgbGluZSAodnRhYmxlLS1jb21w dXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpCiAgICAgICAgICAgOzsgLi4uIGFuZCByZWRp c3BsYXkgdGhlIGxpbmUgaW4gcXVlc3Rpb24uCkBAIC0zMjEsOCArMzM3LDcgQEAgdnRhYmxlLXVw ZGF0ZS1vYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0t Y2FjaGUtd2lkdGhzIGNhY2hlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dnRhYmxlLS1zcGFjZXIgdGFibGUpKQogICAgICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGll cyBzdGFydCAocG9pbnQpIChsaXN0ICdrZXltYXAga2V5bWFwCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUt Y2FjaGUgY2FjaGUpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZSkpKSkKICAgICAgICAgICA7OyBXZSBtYXkgaGF2 ZSBpbnNlcnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkKICAgICAg ICAgICA7OyBhbGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCiAgICAgICAgICAgKHZ0 YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAoY2RyIGxpbmUpKSkKQEAgLTMzNCwxNCAr MzQ5LDE1IEBAIHZ0YWJsZS1yZW1vdmUtb2JqZWN0CiAgIDs7IEZpcnN0IHJlbW92ZSBmcm9tIHRo ZSBvYmplY3RzLgogICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChkZWxxIG9iamVjdCAo dnRhYmxlLW9iamVjdHMgdGFibGUpKSkKICAgOzsgVGhlbiBhZGp1c3QgdGhlIGNhY2hlIGFuZCBk aXNwbGF5LgotICAoc2F2ZS1leGN1cnNpb24KLSAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUp Ci0gICAgKGxldCAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAgIChp bmhpYml0LXJlYWQtb25seSB0KSkKLSAgICAgIChzZXRjYXIgY2FjaGUgKGRlbHEgKGFzc3Egb2Jq ZWN0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpKSkKLSAgICAgICh3aGVuICh2dGFibGUtZ290 by1vYmplY3Qgb2JqZWN0KQotICAgICAgICAoZGVsZXRlLWxpbmUpKSkpKQorICAod2l0aC1jdXJy ZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAg ICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKKyAgICAgIChsZXQgKChjYWNoZSAodnRhYmxl LS1jdXJyZW50LWNhY2hlIHRhYmxlKSkKKyAgICAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0 KSkKKyAgICAgICAgKHNldGNhciBjYWNoZSAoZGVscSAoYXNzcSBvYmplY3QgKHZ0YWJsZS0tY2Fj aGUtbGluZXMgY2FjaGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNh Y2hlLWxpbmVzIGNhY2hlKSkpCisgICAgICAgICh3aGVuICh2dGFibGUtZ290by1vYmplY3Qgb2Jq ZWN0KQorICAgICAgICAgIChkZWxldGUtbGluZSkpKSkpKQogCiA7OyBGSVhNRTogVGhlIGZhY3Qg dGhhdCB0aGUgYGxvY2F0aW9uJyBhcmd1bWVudCBvZgogOzsgYHZ0YWJsZS1pbnNlcnQtb2JqZWN0 JyBjYW4gYmUgYW4gaW50ZWdlciBhbmQgaXMgdGhlbiBpbnRlcnByZXRlZCBhcwpAQCAtMzY5LDgg KzM4NSw5IEBAIHZ0YWJsZS1pbnNlcnQtb2JqZWN0CiAgICAgICAocHJvZ24KICAgICAgICAgKHNl dGYgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAobGlzdCBvYmplY3QpKQogICAgICAgICAodnRhYmxl LS1yZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUg dGFibGUgb2JqZWN0KSkKLSAgICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQotICAgICAg ICAodnRhYmxlLXJldmVydC1jb21tYW5kKSkKKyAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIg KHZ0YWJsZS1idWZmZXIgdGFibGUpCisgICAgICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxl KQorICAgICAgICAgICh2dGFibGUtcmV2ZXJ0LWNvbW1hbmQpKSkKICAgICA7OyBGaXJzdCBpbnNl cnQgaW50byB0aGUgb2JqZWN0cy4KICAgICAobGV0ICgocG9zIChpZiBsb2NhdGlvbgogICAgICAg ICAgICAgICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCkBAIC0zOTgsNTYgKzQxNSw1NyBA QCB2dGFibGUtaW5zZXJ0LW9iamVjdAogICAgICAgICAgIDs7IE90aGVyd2lzZSwgYXBwZW5kIHRo ZSBvYmplY3QuCiAgICAgICAgICAgKG5jb25jICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGxpc3Qg b2JqZWN0KSkpKSkKICAgICA7OyBUaGVuIGFkanVzdCB0aGUgY2FjaGUgYW5kIGRpc3BsYXkuCi0g ICAgKHNhdmUtZXhjdXJzaW9uCi0gICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAg ICAobGV0KiAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAgICAgIChp bmhpYml0LXJlYWQtb25seSB0KQotICAgICAgICAgICAgIChrZXltYXAgKGdldC10ZXh0LXByb3Bl cnR5IChwb2ludCkgJ2tleW1hcCkpCi0gICAgICAgICAgICAgKGVsbGlwc2lzIChpZiAodnRhYmxl LWVsbGlwc2lzIHRhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUg KHRydW5jYXRlLXN0cmluZy1lbGxpcHNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIiIpKQotICAgICAgICAgICAgIChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBpeGVsLXdp ZHRoIGVsbGlwc2lzKSkKLSAgICAgICAgICAgICAobGluZXMgKHZ0YWJsZS0tY2FjaGUtbGluZXMg Y2FjaGUpKQotICAgICAgICAgICAgIChlbGVtIChpZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRpbmcg bWlycm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAg ICAgKGlmIChpbnRlZ2VycCBsb2NhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChu dGggbG9jYXRpb24gbGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxv Y2F0aW9uIGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIGJlZm9yZSAo Y2FyIGxpbmVzKSkpKQotICAgICAgICAgICAgICAgICAgICAgKGlmIGJlZm9yZSAoY2FyIGxpbmVz KSkpKQotICAgICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCi0gICAgICAgICAgICAg KGxpbmUgKGNvbnMgb2JqZWN0ICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUgb2Jq ZWN0KSkpKQotICAgICAgICAoaWYgKG9yIGJlZm9yZQotICAgICAgICAgICAgICAgIChhbmQgcG9z IChpbnRlZ2VycCBsb2NhdGlvbikpKQotICAgICAgICAgICAgOzsgQWRkIHRoZSBuZXcgb2JqZWN0 IGJlZm9yZTouCi0gICAgICAgICAgICAobGV0ICgob2xkLWxpbmUgKGNhciBwb3MpKSkKLSAgICAg ICAgICAgICAgKHNldGNhciBwb3MgbGluZSkKLSAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNv bnMgb2xkLWxpbmUgKGNkciBwb3MpKSkKLSAgICAgICAgICAgICAgKHVubGVzcyAodnRhYmxlLWdv dG8tb2JqZWN0IChjYXIgZWxlbSkpCi0gICAgICAgICAgICAgICAgKHZ0YWJsZS1iZWdpbm5pbmct b2YtdGFibGUpKSkKLSAgICAgICAgICA7OyBPdGhlcndpc2UsIGFkZCB0aGUgb2JqZWN0IGFmdGVy LgotICAgICAgICAgIChpZiBwb3MKLSAgICAgICAgICAgICAgOzsgU3BsaWNlIHRoZSBvYmplY3Qg aW50byB0aGUgbGlzdC4KLSAgICAgICAgICAgICAgKHByb2duCi0gICAgICAgICAgICAgICAgKHNl dGNkciBwb3MgKGNvbnMgbGluZSAoY2RyIHBvcykpKQotICAgICAgICAgICAgICAgIChpZiAodnRh YmxlLWdvdG8tb2JqZWN0IGxvY2F0aW9uKQotICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1s aW5lIDEpICA7IEluc2VydCAqYWZ0ZXIqLgotICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1lbmQt b2YtdGFibGUpKSkKLSAgICAgICAgICAgIDs7IE90aGVyd2lzZSwgYXBwZW5kIHRoZSBvYmplY3Qu Ci0gICAgICAgICAgICAoc2V0Y2FyIGNhY2hlIChuY29uYyBsaW5lcyAobGlzdCBsaW5lKSkpCi0g ICAgICAgICAgICAodnRhYmxlLWVuZC1vZi10YWJsZSkpKQotICAgICAgICAobGV0ICgoc3RhcnQg KHBvaW50KSkpCi0gICAgICAgICAgOzsgRklYTUU6IFdlIGhhdmUgdG8gYWRqdXN0IGNvbG9ycyBp biBsaW5lcyBiZWxvdyB0aGlzIGlmIHdlCi0gICAgICAgICAgOzsgaGF2ZSA6cm93LWNvbG9ycy4K LSAgICAgICAgICAodnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIDAKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpICh2dGFibGUt LXNwYWNlciB0YWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyBl bGxpcHNpcy13aWR0aCkKLSAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9p bnQpIChsaXN0ICdrZXltYXAga2V5bWFwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hlIGNhY2hlKSkpCi0gICAg ICAgIDs7IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2YWx1ZSBpbnRvIGEg cHJldmlvdXNseQotICAgICAgICA7OyBhbGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUu Ci0gICAgICAgICh2dGFibGUtLXJlY29tcHV0ZS1udW1lcmljYWwgdGFibGUgKGNkciBsaW5lKSkp KSkpCisgICAgKGxldCogKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlIHRhYmxlKSkKKyAg ICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCisgICAgICAgICAgIChsaW5lcyAodnRhYmxl LS1jYWNoZS1saW5lcyBjYWNoZSkpCisgICAgICAgICAgIChlbGVtIChpZiBsb2NhdGlvbiAgOyBU aGlzIGJpbmRpbmcgbWlycm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBhYm92ZS4KKyAgICAgICAg ICAgICAgICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAg ICAgICAgKG50aCBsb2NhdGlvbiBsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgICAgKG9yIChh c3NxIGxvY2F0aW9uIGxpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBiZWZv cmUgKGNhciBsaW5lcykpKSkKKyAgICAgICAgICAgICAgICAgICAoaWYgYmVmb3JlIChjYXIgbGlu ZXMpKSkpCisgICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCisgICAgICAgICAgIChs aW5lIChjb25zIG9iamVjdCAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVj dCkpKSkKKyAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQor ICAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFi bGUpCisgICAgICAgICAgKGxldCogKChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNpcyB0YWJs ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUt c3RyaW5nLWVsbGlwc2lzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIiKSkKKyAgICAgICAgICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwt d2lkdGggZWxsaXBzaXMgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgICAgICAgICAgICAgIChrZXlt YXAgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2tleW1hcCkpKQorICAgICAgICAgICAgKGlm IChvciBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgKGFuZCBwb3MgKGludGVnZXJwIGxvY2F0 aW9uKSkpCisgICAgICAgICAgICAgICAgOzsgQWRkIHRoZSBuZXcgb2JqZWN0IGJlZm9yZTouCisg ICAgICAgICAgICAgICAgKGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCisgICAgICAgICAgICAg ICAgICAoc2V0Y2FyIHBvcyBsaW5lKQorICAgICAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNv bnMgb2xkLWxpbmUgKGNkciBwb3MpKSkKKyAgICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJs ZS1nb3RvLW9iamVjdCAoY2FyIGVsZW0pKQorICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWJl Z2lubmluZy1vZi10YWJsZSkpKQorICAgICAgICAgICAgICA7OyBPdGhlcndpc2UsIGFkZCB0aGUg b2JqZWN0IGFmdGVyLgorICAgICAgICAgICAgICAoaWYgcG9zCisgICAgICAgICAgICAgICAgICA7 OyBTcGxpY2UgdGhlIG9iamVjdCBpbnRvIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgICAgKHBy b2duCisgICAgICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3Mp KSkKKyAgICAgICAgICAgICAgICAgICAgKGlmICh2dGFibGUtZ290by1vYmplY3QgbG9jYXRpb24p CisgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIDEpICA7IEluc2VydCAqYWZ0 ZXIqLgorICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisgICAg ICAgICAgICAgICAgOzsgT3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KKyAgICAgICAgICAg ICAgICAoc2V0Y2FyIGNhY2hlIChuY29uYyBsaW5lcyAobGlzdCBsaW5lKSkpCisgICAgICAgICAg ICAgICAgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKSkKKyAgICAgICAgICAgIChsZXQgKChzdGFydCAo cG9pbnQpKSkKKyAgICAgICAgICAgICAgOzsgRklYTUU6IFdlIGhhdmUgdG8gYWRqdXN0IGNvbG9y cyBpbiBsaW5lcyBiZWxvdyB0aGlzIGlmIHdlCisgICAgICAgICAgICAgIDs7IGhhdmUgOnJvdy1j b2xvcnMuCisgICAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxlIGxpbmUgMAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMg Y2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLXNwYWNl ciB0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMgZWxs aXBzaXMtd2lkdGgpCisgICAgICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChw b2ludCkgKGxpc3QgJ2tleW1hcCBrZXltYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlKSkpCisgICAgICAgICAgICA7 OyBXZSBtYXkgaGF2ZSBpbnNlcnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZp b3VzbHkKKyAgICAgICAgICAgIDs7IGFsbC1udW1lcmljYWwgdGFibGUsIHNvIHJlY29tcHV0ZS4K KyAgICAgICAgICAgICh2dGFibGUtLXJlY29tcHV0ZS1udW1lcmljYWwgdGFibGUgKGNkciBsaW5l KSkpKSkpKSkKIAogKGRlZnVuIHZ0YWJsZS1jb2x1bW4gKHRhYmxlIGluZGV4KQogICAiUmV0dXJu IHRoZSBuYW1lIG9mIHRoZSBJTkRFWHRoIGNvbHVtbiBpbiBUQUJMRS4iCkBAIC01MjAsMTQgKzUz OCwxNCBAQCB2dGFibGUtLWNhY2hlLXdpZHRocwogKGRlZnVuIHZ0YWJsZS0tY2FjaGUtbGluZXMg KGNhY2hlKQogICAoY2FyIGNhY2hlKSkKIAotKGRlZnVuIHZ0YWJsZS1pbnNlcnQgKHRhYmxlKQor KGRlZnVuIHZ0YWJsZS0taW5zZXJ0ICh0YWJsZSkKICAgKGxldCogKChzcGFjZXIgKHZ0YWJsZS0t c3BhY2VyIHRhYmxlKSkKICAgICAgICAgIChzdGFydCAocG9pbnQpKQogICAgICAgICAgKGVsbGlw c2lzIChpZiAodnRhYmxlLWVsbGlwc2lzIHRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgICAo cHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQogICAgICAgICAgICAg ICAgICAgICAgIiIpKQotICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lk dGggZWxsaXBzaXMpKQorICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lk dGggZWxsaXBzaXMgKGN1cnJlbnQtYnVmZmVyKSkpCiAgICAgICAgICA7OyBXZSBtYWludGFpbiBh IGNhY2hlIHBlciBzY3JlZW4vd2luZG93IHdpZHRoLCBzbyB0aGF0IHdlIHJlbmRlcgogICAgICAg ICAgOzsgY29ycmVjdGx5IGlmIEVtYWNzIGlzIG9wZW4gb24gdHdvIGRpZmZlcmVudCBzY3JlZW5z IChvciB0aGUKICAgICAgICAgIDs7IHVzZXIgcmVzaXplcyB0aGUgZnJhbWUpLgpAQCAtNTQ5LDgg KzU2Nyw3IEBAIHZ0YWJsZS1pbnNlcnQKICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3Rh cnQgKHBvaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAna2V5bWFwIHZ0 YWJsZS1oZWFkZXItbGluZS1tYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J3JlYXItbm9uc3RpY2t5IHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0 YWJsZSB0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNh Y2hlIGNhY2hlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0 YWJsZSkpCiAgICAgICAgIChzZXRxIHN0YXJ0IChwb2ludCkpKSkKICAgICAodnRhYmxlLS1zb3J0 IHRhYmxlIGNhY2hlKQogICAgIDs7IEluc2VydCB0aGUgZGF0YS4KQEAgLTU2MSwxMyArNTc4LDI4 IEBAIHZ0YWJsZS1pbnNlcnQKICAgICAgICAgKHNldHEgbGluZS1udW1iZXIgKDErIGxpbmUtbnVt YmVyKSkpKQogICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAobGlzdCAncmVhci1ub25zdGlja3kgdAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICd2dGFibGUgdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAndnRhYmxlLWNhY2hlIGNhY2hlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAndnRhYmxlIHRhYmxlKSkKKyAgICAodnRhYmxlLS1zZXQtY3VycmVudC1jYWNoZSB0YWJsZSBj YWNoZSkKICAgICAoZ290by1jaGFyIHN0YXJ0KSkpCiAKKyhkZWZ1biB2dGFibGUtaW5zZXJ0ICh0 YWJsZSkKKyAgIkluc2VydCBUQUJMRSBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KK1RoZSBjdXJy ZW50IGJ1ZmZlciB3aWxsIGJlIHJlY29yZGVkIGFzIFRBQkxFJ3MgYnVmZmVyLiAgSWYgdGhpcyBp cyBkb25lCittb3JlIHRoYW4gb25jZSwgb3IgaWYgdGhlIHRhYmxlIGlzIGF0dGVtcHRlZCB0byBi ZSBpbnNlcnRlZCBtb3JlIHRoYW4KK29uY2UgaW50byB0aGUgc2FtZSBidWZmZXIsIHNpZ25hbCBh biBlcnJvci4iCisgIChpZi1sZXQqICgodGFibGUtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxl KSkpCisgICAgICAoaWYgKGVxIHRhYmxlLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQorICAgICAg ICAgIChlcnJvciAiQSB2dGFibGUgY2Fubm90IGJlIGluc2VydGVkIG1vcmUgdGhhbiBvbmNlIGlu dG8gYSBidWZmZXIiKQorICAgICAgICAoZXJyb3IgIkEgdnRhYmxlIGNhbm5vdCBiZSBpbnNlcnRl ZCBpbnRvIG1vcmUgdGhhbiBvbmUgYnVmZmVyIikpKQorICAodnRhYmxlLXNldC1idWZmZXIgKGN1 cnJlbnQtYnVmZmVyKSB0YWJsZSkKKyAgKGxldCAoKGluaGliaXQtcmVhZC1vbmx5IHQpCisgICAg ICAgIChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkKKyAgICAodnRhYmxlLS1pbnNlcnQg dGFibGUpKSkKKwogKGRlZnVuIHZ0YWJsZS0taW5zZXJ0LWxpbmUgKHRhYmxlIGxpbmUgbGluZS1u dW1iZXIgd2lkdGhzIHNwYWNlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZv cHRpb25hbCBlbGxpcHNpcyBlbGxpcHNpcy13aWR0aCkKICAgKGxldCAoKHN0YXJ0IChwb2ludCkp CisgICAgICAgIChidWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpKQogICAgICAgICAoY29sdW1u cyAodnRhYmxlLWNvbHVtbnMgdGFibGUpKQogICAgICAgICAoY29sdW1uLWNvbG9ycwogICAgICAg ICAgKGFuZCAodnRhYmxlLWNvbHVtbi1jb2xvcnMgdGFibGUpCkBAIC02MDcsMTYgKzYzOSwxOCBA QCB2dGFibGUtLWluc2VydC1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdAogICAg ICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1saW1pdC1zdHJpbmcKICAgICAgICAgICAgICAg ICAgICAgICAgIHByZS1jb21wdXRlZCAoLSAoZWx0IHdpZHRocyBpbmRleCkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBzaXMtd2lkdGggMCkpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAw KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAg ICAgZWxsaXBzaXMpCiAgICAgICAgICAgICAgICAgICAgIHByZS1jb21wdXRlZCkpCiAgICAgICAg ICAgICAgICAgIDs7IFJlY29tcHV0ZSB3aWR0aHMuCiAgICAgICAgICAgICAgICAgICh0Ci0gICAg ICAgICAgICAgICAgICAoaWYgKD4gKHN0cmluZy1waXhlbC13aWR0aCB2YWx1ZSkgKGVsdCB3aWR0 aHMgaW5kZXgpKQorICAgICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGgg dmFsdWUgYnVmZmVyKSAoZWx0IHdpZHRocyBpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAg KGNvbmNhdAogICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1saW1pdC1zdHJpbmcKICAg ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICgtIChlbHQgd2lkdGhzIGluZGV4KQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRoIDApKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAwKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBz aXMpCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlKSkpKQogICAgICAgICAgICAgICAgKHN0YXJ0 IChwb2ludCkpCkBAIC02MzAsMTQgKzY2NCwxNSBAQCB2dGFibGUtLWluc2VydC1saW5lCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6d2lkdGggKGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKyAoLSAoZWx0IHdpZHRocyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoIGRpc3BsYXllZCkpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhl bC13aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk aXNwbGF5ZWQgYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaWYgbGFzdCAwIHNwYWNlcikpKSkpKSkKICAgICAgICAgICAgICA7OyBBbGlnbiB0byB0 aGUgcmlnaHQuCiAgICAgICAgICAgICAgKGluc2VydCAocHJvcGVydGl6ZSAiICIgJ2Rpc3BsYXkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOndpZHRoIChsaXN0ICgtIChlbHQgd2lkdGhz IGluZGV4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkKSkpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkIGJ1ZmZl cikpKSkpCiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQpCiAgICAgICAgICAgICAgKHVu bGVzcyBsYXN0CiAgICAgICAgICAgICAgICAoaW5zZXJ0IChwcm9wZXJ0aXplICIgIiAnZGlzcGxh eQpAQCAtNjY0LDE1ICs2OTksMTkgQEAgdnRhYmxlLS1pbnNlcnQtbGluZQogKGRlZnVuIHZ0YWJs ZS0tY2FjaGUta2V5ICgpCiAgIChjb25zIChmcmFtZS10ZXJtaW5hbCkgKHdpbmRvdy13aWR0aCkp KQogCi0oZGVmdW4gdnRhYmxlLS1jdXJyZW50LWNhY2hlICgpCi0gICJSZXR1cm4gdGhlIGN1cnJl bnQgY2FjaGUgZm9yIHRoZSB0YWJsZSBhdCBwb2ludC4KKyhkZWZ1biB2dGFibGUtLWN1cnJlbnQt Y2FjaGUgKCZvcHRpb25hbCB0YWJsZSkKKyAgIlJldHVybiB0aGUgY3VycmVudCBjYWNoZSBmb3Ig VEFCTEUgb3IgdGhlIHRhYmxlIHVuZGVyIHBvaW50LgogCiBJbiBgdnRhYmxlLWluc2VydCcsIHRo ZSBsaW5lcyBhbmQgd2lkdGhzIG9mIHRoZSB2dGFibGUgdGV4dCBhcmUgY29tcHV0ZWQKIGJhc2Vk IG9uIHRoZSBjdXJyZW50IHNlbGVjdGVkIGZyYW1lIGFuZCB3aW5kb3cgYW5kIHN0b3JlZCBpbiBh IGNhY2hlLgogU3Vic2VxdWVudCBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0ZXh0IG9mIHRoZSB2dGFi bGUgc2hvdWxkIHVzZSB0aGF0IGNhY2hlCiB2aWEgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBi eSBjYWxsaW5nIGB2dGFibGUtLWNhY2hlLWtleScgdG8gbG9vayB1cAogdGhlIGNhY2hlLiIKLSAg KGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ3Z0YWJsZS1jYWNoZSkpCisgIChzbG90LXZhbHVl IChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSAnLWN1cnJlbnQtY2FjaGUpKQorCiso ZGVmdW4gdnRhYmxlLS1zZXQtY3VycmVudC1jYWNoZSAodGFibGUgY2FjaGUpCisgICJTZXQgdGhl IGN1cnJlbnQgY2FjaGUgZm9yIHRoZSB0YWJsZS4iCisgIChzZXRmIChzbG90LXZhbHVlIHRhYmxl ICctY3VycmVudC1jYWNoZSkgY2FjaGUpKQogCiAoZGVmdW4gdnRhYmxlLS1jbGVhci1jYWNoZSAo dGFibGUpCiAgIChzZXRmIChnZXRoYXNoICh2dGFibGUtLWNhY2hlLWtleSkgKHNsb3QtdmFsdWUg dGFibGUgJy1jYWNoZSkpIG5pbCkpCkBAIC03MTgsNiArNzU3LDcgQEAgdnRhYmxlLS1pbmRpY2F0 b3IKIChkZWZ1biB2dGFibGUtLWluc2VydC1oZWFkZXItbGluZSAodGFibGUgd2lkdGhzIHNwYWNl cikKICAgOzsgSW5zZXJ0IHRoZSBoZWFkZXIgZGlyZWN0bHkgaW50byB0aGUgYnVmZmVyLgogICAo bGV0ICgoc3RhcnQgKHBvaW50KSkKKyAgICAgICAgKGJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJs ZSkpCiAgICAgICAgIChkaXZpZGVyICh2dGFibGUtZGl2aWRlciB0YWJsZSkpCiAgICAgICAgIChj bWFwIChkZWZpbmUta2V5bWFwCiAgICAgICAgICAgICAgICAgIjxoZWFkZXItbGluZT4gPGRyYWct bW91c2UtMT4iICMndnRhYmxlLS1kcmFnLXJlc2l6ZS1jb2x1bW4KQEAgLTczNywxNCArNzc3LDE1 IEBAIHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lCiAgICAgICAgICAgICAgICAgICAgICAna2V5 bWFwIGNtYXApKQogICAgICAgICAgICAgICAoc3RhcnQgKHBvaW50KSkKICAgICAgICAgICAgICAg KGluZGljYXRvciAodnRhYmxlLS1pbmRpY2F0b3IgdGFibGUgaW5kZXgpKQotICAgICAgICAgICAg ICAoaW5kaWNhdG9yLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggaW5kaWNhdG9yKSkKKyAgICAg ICAgICAgICAgKGluZGljYXRvci13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGluZGljYXRvciBi dWZmZXIpKQogICAgICAgICAgICAgICAobGFzdCAoPSBpbmRleCAoMS0gKGxlbmd0aCAodnRhYmxl LWNvbHVtbnMgdGFibGUpKSkpKQogICAgICAgICAgICAgICBkaXNwbGF5ZWQpCiAgICAgICAgICAo c2V0cSBkaXNwbGF5ZWQKLSAgICAgICAgICAgICAgIChpZiAoPiAoc3RyaW5nLXBpeGVsLXdpZHRo IG5hbWUpCisgICAgICAgICAgICAgICAoaWYgKD4gKHN0cmluZy1waXhlbC13aWR0aCBuYW1lIGJ1 ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAoLSAoZWx0IHdpZHRocyBpbmRleCkgaW5kaWNh dG9yLXdpZHRoKSkKICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1saW1pdC1zdHJpbmcKLSAg ICAgICAgICAgICAgICAgICAgbmFtZSAoLSAoZWx0IHdpZHRocyBpbmRleCkgaW5kaWNhdG9yLXdp ZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgbmFtZSAoLSAoZWx0IHdpZHRocyBpbmRleCkgaW5k aWNhdG9yLXdpZHRoKQorICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAgICAg ICAgIG5hbWUpKQogICAgICAgICAgKGxldCogKChpbmRpY2F0b3ItbGVhZC13aWR0aAogICAgICAg ICAgICAgICAgICA7OyBXZSB3YW50IHRoZSBpbmRpY2F0b3IgdG8gbm90IGJlIHF1aXRlIGZsdXNo IHJpZ2h0LgpAQCAtNzUzLDcgKzc5NCw3IEBAIHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLWxlYWQtd2lk dGgpKQogICAgICAgICAgICAgICAgIChmaWxsLXdpZHRoCiAgICAgICAgICAgICAgICAgICgrICgt IChlbHQgd2lkdGhzIGluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVs LXdpZHRoIGRpc3BsYXllZCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13 aWR0aCBkaXNwbGF5ZWQgYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3It d2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLWxlYWQtd2lkdGgpCiAgICAg ICAgICAgICAgICAgICAgIChpZiBsYXN0IDAgc3BhY2VyKSkpKQpAQCAtNzcxLDcgKzgxMiw4IEBA IHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lCiAgICAgICAgICAgICAgOzsgVGhpcyBpcyB0aGUg ZmluYWwgY29sdW1uLCBhbmQgd2UgaGF2ZSBhIHNvcnRpbmcKICAgICAgICAgICAgICA7OyBpbmRp Y2F0b3IsIGFuZCB0aGUgdGFibGUgaXMgdG9vIHdpZGUgZm9yIHRoZSB3aW5kb3cuCiAgICAgICAg ICAgICAgKGxldCogKChwcmUtaW5kaWNhdG9yIChzdHJpbmctcGl4ZWwtd2lkdGgKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludC1taW4p IChwb2ludCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXIt c3Vic3RyaW5nIChwb2ludC1taW4pIChwb2ludCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBidWZmZXIpKQogICAgICAgICAgICAgICAgICAgICAocHJlLWZpbGwKICAgICAg ICAgICAgICAgICAgICAgICgtICh3aW5kb3ctd2lkdGggbmlsIHQpCiAgICAgICAgICAgICAgICAg ICAgICAgICBwcmUtaW5kaWNhdG9yCkBAIC04NTAsMTQgKzg5MiwxNiBAQCB2dGFibGUtLXNldC1o ZWFkZXItbGluZQogICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtbWluKSAoMS0g KHBvaW50LW1heCkpKSkpKQogICAodnRhYmxlLWhlYWRlci1tb2RlIDEpKQogCi0oZGVmdW4gdnRh YmxlLS1saW1pdC1zdHJpbmcgKHN0cmluZyBwaXhlbHMpCisKKyhkZWZ1biB2dGFibGUtLWxpbWl0 LXN0cmluZyAoc3RyaW5nIHBpeGVscyBidWZmZXIpCiAgICh3aGlsZSAoYW5kIChsZW5ndGg+IHN0 cmluZyAwKQotICAgICAgICAgICAgICAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cmluZykgcGl4 ZWxzKSkKKyAgICAgICAgICAgICAgKD4gKHN0cmluZy1waXhlbC13aWR0aCBzdHJpbmcgYnVmZmVy KSBwaXhlbHMpKQogICAgIChzZXRxIHN0cmluZyAoc3Vic3RyaW5nIHN0cmluZyAwICgxLSAobGVu Z3RoIHN0cmluZykpKSkpCiAgIHN0cmluZykKIAogKGRlZnVuIHZ0YWJsZS0tY2hhci13aWR0aCAo dGFibGUpCi0gIChzdHJpbmctcGl4ZWwtd2lkdGggKHByb3BlcnRpemUgIngiICdmYWNlICh2dGFi bGUtZmFjZSB0YWJsZSkpKSkKKyAgKHN0cmluZy1waXhlbC13aWR0aCAocHJvcGVydGl6ZSAieCIg J2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAodnRhYmxl LWJ1ZmZlciB0YWJsZSkpKQogCiAoZGVmdW4gdnRhYmxlLS1jb21wdXRlLXdpZHRoICh0YWJsZSBz cGVjKQogICAoY29uZApAQCAtOTM2LDcgKzk4MCw3IEBAIHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQt bGluZQogICAgICAgIDs7IFdlIHN0YXNoIHRoZSBjb21wdXRlZCB3aWR0aCBhbmQgc3RyaW5nIGhl cmUgLS0gaWYgdGhlcmUgYXJlCiAgICAgICAgOzsgbm8gZm9ybWF0dGVycy9kaXNwbGF5ZXJzLCB3 ZSdsbCBiZSB1c2luZyB0aGUgc3RyaW5nLCBhbmQKICAgICAgICA7OyB0aGVuIHdvbid0IGhhdmUg dG8gcmVjcmVhdGUgaXQuCi0gICAgICAgKGxpc3QgdmFsdWUgKHN0cmluZy1waXhlbC13aWR0aCBz dHJpbmcpIHN0cmluZykpKQorICAgICAgIChsaXN0IHZhbHVlIChzdHJpbmctcGl4ZWwtd2lkdGgg c3RyaW5nICh2dGFibGUtYnVmZmVyIHRhYmxlKSkgc3RyaW5nKSkpCiAgICAodnRhYmxlLWNvbHVt bnMgdGFibGUpKSkKIAogKGRlZnVuIHZ0YWJsZS0tbWFrZS1rZXltYXAgKHRhYmxlKQpAQCAtOTY3 LDIwICsxMDExLDIxIEBAIHZ0YWJsZS0tbWFrZS1rZXltYXAKICAgICAgICAgICAodnRhYmxlLWtl eW1hcCB0YWJsZSkpCiAgICAgICBtYXApKSkKIAotKGRlZnVuIHZ0YWJsZS1yZXZlcnQgKCkKLSAg IlJlZ2VuZXJhdGUgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKLSAgKGxldCAoKHRhYmxlICh2dGFi bGUtY3VycmVudC10YWJsZSkpCi0gICAgICAgIChvYmplY3QgKHZ0YWJsZS1jdXJyZW50LW9iamVj dCkpCi0gICAgICAgIChjb2x1bW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpCi0gICAgICAgIChp bmhpYml0LXJlYWQtb25seSB0KSkKLSAgICAodW5sZXNzIHRhYmxlCi0gICAgICAodXNlci1lcnJv ciAiTm8gdGFibGUgdW5kZXIgcG9pbnQiKSkKLSAgICAoZGVsZXRlLXJlZ2lvbiAodnRhYmxlLWJl Z2lubmluZy1vZi10YWJsZSkgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKQotICAgICh2dGFibGUtaW5z ZXJ0IHRhYmxlKQotICAgICh3aGVuIG9iamVjdAotICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBv YmplY3QpKQotICAgICh3aGVuIGNvbHVtbgotICAgICAgKHZ0YWJsZS1nb3RvLWNvbHVtbiBjb2x1 bW4pKSkpCisoZGVmdW4gdnRhYmxlLXJldmVydCAoJm9wdGlvbmFsIHRhYmxlKQorICAiUmVnZW5l cmF0ZSBUQUJMRSwgZGVmYXVsdGluZyB0byB0aGUgdGFibGUgdW5kZXIgcG9pbnQuIgorICAoc2V0 cSB0YWJsZSAob3IgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCisgICh1bmxlc3MgdGFi bGUKKyAgICAodXNlci1lcnJvciAiTm8gdGFibGUgdW5kZXIgcG9pbnQiKSkKKyAgKHdpdGgtY3Vy cmVudC1idWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpCisgICAgKGxldCAoKG9iamVjdCAodnRh YmxlLWN1cnJlbnQtb2JqZWN0KSkKKyAgICAgICAgICAoY29sdW1uICh2dGFibGUtY3VycmVudC1j b2x1bW4pKQorICAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KSkKKyAgICAgIChkZWxldGUt cmVnaW9uICh2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlKSAodnRhYmxlLWVuZC1vZi10YWJsZSkp CisgICAgICAodnRhYmxlLS1pbnNlcnQgdGFibGUpCisgICAgICAod2hlbiBvYmplY3QKKyAgICAg ICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpKQorICAgICAgKHdoZW4gY29sdW1uCisgICAg ICAgICh2dGFibGUtZ290by1jb2x1bW4gY29sdW1uKSkpKSkKIAogOzs7IENvbW1hbmRzLgogCkBA IC0xMDA2LDE0ICsxMDUxLDE0IEBAIHZ0YWJsZS1uYXJyb3ctY3VycmVudC1jb2x1bW4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gKCogKHZ0YWJsZS0tY2hhci13aWR0aCB0YWJs ZSkgKG9yIG4gMSkpKSkpKQogCiAoZGVmdW4gdnRhYmxlLS1hbHRlci1jb2x1bW4td2lkdGggKHRh YmxlIGNvbHVtbiBkZWx0YSkKLSAgKGxldCAoKHdpZHRocyAodnRhYmxlLS1jYWNoZS13aWR0aHMg KHZ0YWJsZS0tY3VycmVudC1jYWNoZSkpKSkKKyAgKGxldCAoKHdpZHRocyAodnRhYmxlLS1jYWNo ZS13aWR0aHMgKHZ0YWJsZS0tY3VycmVudC1jYWNoZSB0YWJsZSkpKSkKICAgICAoc2V0ZiAoYXJl ZiB3aWR0aHMgY29sdW1uKQogICAgICAgICAgIChtYXggKCogKHZ0YWJsZS0tY2hhci13aWR0aCB0 YWJsZSkgMikKICAgICAgICAgICAgICAgICgrIChhcmVmIHdpZHRocyBjb2x1bW4pIGRlbHRhKSkp CiAgICAgOzsgU3RvcmUgdGhlIHdpZHRoIHNvIGl0J2xsIGJlIHJlc3BlY3RlZCBvbiBhIHJldmVy dC4KICAgICAoc2V0ZiAodnRhYmxlLWNvbHVtbi13aWR0aCAoZWx0ICh2dGFibGUtY29sdW1ucyB0 YWJsZSkgY29sdW1uKSkKICAgICAgICAgICAoZm9ybWF0ICIlZHB4IiAoYXJlZiB3aWR0aHMgY29s dW1uKSkpCi0gICAgKHZ0YWJsZS1yZXZlcnQpKSkKKyAgICAodnRhYmxlLXJldmVydCB0YWJsZSkp KQogCiAoZGVmdW4gdnRhYmxlLXdpZGVuLWN1cnJlbnQtY29sdW1uICgmb3B0aW9uYWwgbikKICAg IldpZGVuIHRoZSBjdXJyZW50IGNvbHVtbiBieSBOIGNoYXJhY3RlcnMuCkBAIC0xMDI4LDcgKzEw NzMsOCBAQCB2dGFibGUtcHJldmlvdXMtY29sdW1uCiAgIChpbnRlcmFjdGl2ZSkKICAgKHZ0YWJs ZS1nb3RvLWNvbHVtbgogICAgKG1heCAwICgxLSAob3IgKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikK LSAgICAgICAgICAgICAgICAgIChsZW5ndGggKHZ0YWJsZS0tY2FjaGUtd2lkdGhzICh2dGFibGUt LWN1cnJlbnQtY2FjaGUpKSkpKSkpKQorICAgICAgICAgICAgICAgICAgKGxlbmd0aCAodnRhYmxl LS1jYWNoZS13aWR0aHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWN1cnJl bnQtY2FjaGUpKSkpKSkpKQogCiAoZGVmdW4gdnRhYmxlLW5leHQtY29sdW1uICgpCiAgICJHbyB0 byB0aGUgbmV4dCBjb2x1bW4uIgpAQCAtMTAzOCwxNCArMTA4NCwxNiBAQCB2dGFibGUtbmV4dC1j b2x1bW4KICAgICAgKG1pbiAoMS0gKGxlbmd0aCAodnRhYmxlLS1jYWNoZS13aWR0aHMgKHZ0YWJs ZS0tY3VycmVudC1jYWNoZSkpKSkKICAgICAgICAgICAoMSsgKHZ0YWJsZS1jdXJyZW50LWNvbHVt bikpKSkpKQogCi0oZGVmdW4gdnRhYmxlLXJldmVydC1jb21tYW5kICgpCisoZGVmdW4gdnRhYmxl LXJldmVydC1jb21tYW5kICgmb3B0aW9uYWwgdGFibGUpCiAgICJSZS1xdWVyeSBkYXRhIGFuZCBy ZWdlbmVyYXRlIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCiAgIChpbnRlcmFjdGl2ZSkKLSAgKGxl dCAoKHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpKQotICAgICh3aGVuICh2dGFibGUtb2Jq ZWN0cy1mdW5jdGlvbiB0YWJsZSkKLSAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkg KGZ1bmNhbGwgKHZ0YWJsZS1vYmplY3RzLWZ1bmN0aW9uIHRhYmxlKSkpKQotICAgICh2dGFibGUt LWNsZWFyLWNhY2hlIHRhYmxlKSkKLSAgKHZ0YWJsZS1yZXZlcnQpKQorICAoc2V0cSB0YWJsZSAo b3IgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCisgICh1bmxlc3MgdGFibGUKKyAgICAo dXNlci1lcnJvciAiTm8gdGFibGUgZm91bmQiKSkKKyAgKHdoZW4gKHZ0YWJsZS1vYmplY3RzLWZ1 bmN0aW9uIHRhYmxlKQorICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGZ1bmNhbGwg KHZ0YWJsZS1vYmplY3RzLWZ1bmN0aW9uIHRhYmxlKSkpKQorICAodnRhYmxlLS1jbGVhci1jYWNo ZSB0YWJsZSkKKyAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKQogCiAoZGVmdW4gdnRhYmxlLXNvcnQt YnktY3VycmVudC1jb2x1bW4gKCkKICAgIlNvcnQgdGhlIHRhYmxlIHVuZGVyIHBvaW50IGJ5IHRo ZSBjb2x1bW4gdW5kZXIgcG9pbnQuIgpAQCAtMTA2Nyw4ICsxMTE1LDggQEAgdnRhYmxlLXNvcnQt YnktY3VycmVudC1jb2x1bW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYg KGVxIChjZHIgbGFzdCkgJ2FzY2VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2Rlc2NlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2Nl bmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NlbmQpKSkpKSkKLSAgKHZ0 YWJsZS1yZXZlcnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNjZW5kKSkp KSkKKyAgICAodnRhYmxlLXJldmVydCB0YWJsZSkpKQogCiAoZGVmdW4gdnRhYmxlLWhlYWRlci1s aW5lLXNvcnQgKGUpCiAgICJTb3J0IGEgdnRhYmxlIGZyb20gdGhlIGhlYWRlciBsaW5lLiIKZGlm ZiAtLWdpdCBhL3Rlc3QvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbCBiL3Rlc3QvbGlz cC9lbWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbAppbmRleCA3NGZiOGNjODEzOS4uODNmODI2ZWEz NTMgMTAwNjQ0Ci0tLSBhL3Rlc3QvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbAorKysg Yi90ZXN0L2xpc3AvZW1hY3MtbGlzcC92dGFibGUtdGVzdHMuZWwKQEAgLTI3LDE2ICsyNywxOSBA QAogKHJlcXVpcmUgJ2VydCkKIChyZXF1aXJlICdlcnQteCkKIAotKGVydC1kZWZ0ZXN0IHRlc3Qt dnN0YWJsZS1jb21wdXRlLWNvbHVtbnMgKCkKKyhkZWZ1biB2dGFibGUtdGVzdHMtLW1ha2Utbm8t aGVhZGVyLTItb2JqZWN0LXRhYmxlICgpCisgIChtYWtlLXZ0YWJsZSA6Y29sdW1ucyAnKCJhIiAi YiIgImMiKQorICAgICAgICAgICAgICAgOm9iamVjdHMgJygoImZvbyIgMSAyKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAoImJhciIgMyA6em90KSkKKyAgICAgICAgICAgICAgIDppbnNlcnQg bmlsKSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtdnRhYmxlLWNvbXB1dGUtY29sdW1ucyAoKQogICAo c2hvdWxkCiAgICAoZXF1YWwgKG1hcGNhcgogICAgICAgICAgICAobGFtYmRhIChjb2x1bW4pCiAg ICAgICAgICAgICAgKHZ0YWJsZS1jb2x1bW4tYWxpZ24gY29sdW1uKSkKICAgICAgICAgICAgKHZ0 YWJsZS0tY29tcHV0ZS1jb2x1bW5zCi0gICAgICAgICAgICAobWFrZS12dGFibGUgOmNvbHVtbnMg JygiYSIgImIiICJjIikKLSAgICAgICAgICAgICAgICAgICAgICAgICA6b2JqZWN0cyAnKCgiZm9v IiAxIDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImJhciIgMyA6em90 KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICA6aW5zZXJ0IG5pbCkpKQorICAgICAgICAgICAg KHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1vYmplY3QtdGFibGUpKSkKICAgICAgICAg ICAnKGxlZnQgcmlnaHQgbGVmdCkpKSkKIAogKGVydC1kZWZ0ZXN0IHRlc3QtdnRhYmxlLWluc2Vy dC1vYmplY3QgKCkKQEAgLTY5LDQgKzcyLDY5IEBAIHRlc3QtdnRhYmxlLWluc2VydC1vYmplY3QK ICAgICAgICAgICAgICAgKG1hcGNhciAjJ2NhZHIgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkpKQog ICAgICAgICAgIChudW1iZXItc2VxdWVuY2UgMCAxMSkpKSkKIAorKGVydC1kZWZ0ZXN0IHRlc3Qt dnRhYmxlLXVuaXF1ZS1idWZmZXIgKCkKKyAgKGxldCAoKHRhYmxlICh2dGFibGUtdGVzdHMtLW1h a2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxlKSkpCisgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAg ICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAgICAgOzsgVGhpcyB3aWxsIHJ1biBidXQgZmFp bCBvbiBFbWFjcyBwcmUgMzEgdnRhYmxlLgorICAgICAgKHNob3VsZC1lcnJvciAodnRhYmxlLWlu c2VydCB0YWJsZSkpCisgICAgICA7OyBUaGlzIHdpbGwgcnVuIG9ubHkgb24gRW1hY3MgMzErIHZ0 YWJsZS4KKyAgICAgICh3aGVuICg+IGVtYWNzLW1ham9yLXZlcnNpb24gMzApCisgICAgICAgIChz aG91bGQtZXJyb3IgKHZ0YWJsZS1zZXQtYnVmZmVyIHRhYmxlIChjdXJyZW50LWJ1ZmZlcikpKSkp KSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci1pbnNlcnQt b2JqZWN0ICgpCisgIChsZXQgKCh0YWJsZSAodnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0y LW9iamVjdC10YWJsZSkpCisgICAgICAgIChvYmogJygiYmF6IiA0IDUpKSkKKyAgICAod2l0aC10 ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJsZS1pbnNlcnQgdGFibGUpCisgICAgICAoc2hvdWxkICg9 IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMikpCisgICAgICAod2l0aC10 ZW1wLWJ1ZmZlcgorICAgICAgICAodnRhYmxlLWluc2VydC1vYmplY3QgdGFibGUgb2JqKSkKKyAg ICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAzKSkp KSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci1yZW1vdmUt b2JqZWN0ICgpCisgIChsZXQgKCh0YWJsZSAodnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0y LW9iamVjdC10YWJsZSkpCisgICAgICAgIChvYmogJygiYmF6IiA0IDUpKSkKKyAgICAod2l0aC10 ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJsZS1pbnNlcnQgdGFibGUpCisgICAgICAodnRhYmxlLWlu c2VydC1vYmplY3QgdGFibGUgb2JqKQorICAgICAgKHNob3VsZCAoPSAoY291bnQtbGluZXMgKHBv aW50LW1pbikgKHBvaW50LW1heCkpIDMpKQorICAgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAg ICAgKHZ0YWJsZS1yZW1vdmUtb2JqZWN0IHRhYmxlIG9iaikpCisgICAgICAoc2hvdWxkICg9IChj b3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMikpKSkpCisKKyhlcnQtZGVmdGVz dCB0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItdXBkYXRlLW9iamVjdCAoKQorICAobGV0 ICgodGFibGUgKHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1vYmplY3QtdGFibGUpKQor ICAgICAgICAob2JqICcoImJheiIgNCA1KSkKKyAgICAgICAgKG9iai0yICcoInF1eCIgNiA3KSkp CisgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgICh2dGFibGUtaW5zZXJ0IHRhYmxlKQorICAg ICAgKHZ0YWJsZS1pbnNlcnQtb2JqZWN0IHRhYmxlIG9iaikKKyAgICAgIChzaG91bGQgKD0gKGNv dW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAzKSkKKyAgICAgIChsZXQgKChsaW5l LTIgKHByb2duCisgICAgICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkK KyAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIDIpCisgICAgICAgICAgICAgICAg ICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAocG9pbnQtbWF4KSkpKSkKKyAgICAgICAg KHdpdGgtdGVtcC1idWZmZXIKKyAgICAgICAgICAodnRhYmxlLXVwZGF0ZS1vYmplY3QgdGFibGUg b2JqLTIgb2JqKSkKKyAgICAgICAgKGxldCAoKGxpbmUtMi1uZXcgKHByb2duCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAocG9pbnQtbWF4KSkpKSkKKyAgICAgICAgICAo c2hvdWxkICg9IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMykpCisgICAg ICAgICAgKHNob3VsZCAobm90IChzdHJpbmc9IGxpbmUtMiBsaW5lLTItbmV3KSkpKSkpKSkKKwor KGVydC1kZWZ0ZXN0IHRlc3QtdnRhYmxlLS1saW1pdC1zdHJpbmctd2l0aC1mYWNlLXJlbWFwcGVk LWJ1ZmZlciAoKQorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChsZXQgKCh0ZXh0IChwcm9wZXJ0 aXplICJYWFhYWCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAndmFyaWFibGUt cGl0Y2gpKSkKKyAgICAgIChmYWNlLXJlbWFwLWFkZC1yZWxhdGl2ZSAnZGVmYXVsdCA6aGVpZ2h0 IDEuNSkKKyAgICAgIChpZiAoPiBlbWFjcy1tYWpvci12ZXJzaW9uIDMwKQorICAgICAgICAgIChz aG91bGQgKGVxCisgICAgICAgICAgICAgICAgICAgMgorICAgICAgICAgICAgICAgICAgIChsZW5n dGggKHZ0YWJsZS0tbGltaXQtc3RyaW5nIHRleHQgNTAgKGN1cnJlbnQtYnVmZmVyKSkpKSkKKyAg ICAgICAgKHNob3VsZCAoZXEKKyAgICAgICAgICAgICAgICAgMgorICAgICAgICAgICAgICAgICAo bGVuZ3RoICh2dGFibGUtLWxpbWl0LXN0cmluZyB0ZXh0IDUwKSkpKSkpKSkKKwogOzs7IHZ0YWJs ZS10ZXN0cy5lbCBlbmRzIGhlcmUKLS0gCjIuNDcuMQoK --0000000000000c6d050645b01364--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 10 Dec 2025 22:34:48 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 10 17:34:48 2025 Received: from localhost ([127.0.0.1]:37550 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vTSlj-0006pO-7T for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 17:34:48 -0500 Received: from mxout5.mail.janestreet.com ([64.215.233.18]:52979) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>) id 1vTSlf-0006p1-UR for 79982 <at> debbugs.gnu.org; Wed, 10 Dec 2025 17:34:45 -0500 From: Spencer Baugh <sbaugh@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot, [PATCH] Add vtable buffer slot In-Reply-To: <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> (=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Wed, 10 Dec 2025 17:18:31 -0500") References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> <ierikeerwu7.fsf_-_@HIDDEN> <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN> Date: Wed, 10 Dec 2025 17:34:37 -0500 Message-ID: <ierfr9irmo2.fsf_-_@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=waixah; t=1765406078; bh=g9VpJL07XAAU2WHDpXO229eLeHPjYmLLhrekUXaa1vY=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=WzcMW5+baYiHhpQun7SzbFlTK+/kwO3IOHSxdBToPghErC8DrB+tBCvhAYoGOB5pe AmanQEFouw0whYrcOtIq1La6fDffC9ja11qrfF7YbpIu4zIfRRdqcA5gkfkbkScdCW nN+iPzIVsoiCR9rdrEQ1U4O0AppTP1e/x15f/GsTWXiYi7k2NpgTKonrvRaJsN/8Ut p8SGEtSAMTU4SfhgqPJpdUo2asYjfdOWxrSTmnSXdUsU99NbCdqvMGzxGnl8H3XwqY z4Hx1JcAjMEsttQuKLPu9X2WrFi5K7zJ1HG5p4W4oyVxemoq86T9Q1I90fEDgPwz+3 /Ou4XGyfRXkfw== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) St=C3=A9phane Marks <shipmints@HIDDEN> writes: > Thanks. Revised patch, attached. (BTW, you shouldn't include the entire previous patch as email context if you're not replying to individual parts of it, it makes things a bit harder to read) > With regard to point vs. window-point, the code seems no worse off > than before? There is a suite of additional fixes coming that address > keeping point stable during operations and we can see if there are any > ill effects when we get to testing those changes. > > -St=C3=A9phane=20 > > From cf2260c055bed43be6e7208422f9713b2c083d86 Mon Sep 17 00:00:00 2001 > From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN> > Date: Wed, 10 Dec 2025 09:20:02 -0500 > Subject: [PATCH] Add vtable buffer slot > > This solves for background vtable mutations, i.e., updates > initiated from buffers other than the vtable buffer, and for > buffer-adjusted string-pixel-width computations. > > * lisp/emacs-lisp/vtable.el (vtable): New '-buffer' slot. > (vtable-buffer): > (vtable-set-buffer): New function. > (vtable-update-object): > (vtable-remove-object): > (vtable-insert-object): Wrap operation with the vtable buffer. > (vtable--insert): Split from old 'vtable-insert'. > (vtable-insert): Insert table and record the buffer. > (vtable--insert-line): > (vtable--insert-header-line): Use 'vtable-buffer' for pixel-width computa= tion. > (vtable--limit-string): > (vtable--char-width): Pass buffer to 'string-pixel-width'. > (vtable-revert): New optional table argument. > (vtable--alter-column-width): > (vtable-revert-command): > (vtable-sort-by-current-column): Call 'vtable-revert' with the table. > > * test/lisp/emacs-lisp/vtable-tests.el > (vtable-tests--make-no-header-2-object-table): New helper > function. > (test-vstable-compute-columns): Correct typo in test name. Use > new helper function. > (test-vtable-unique-buffer) > (test-vtable-non-current-buffer-insert-object) > (test-vtable-non-current-buffer-remove-object) > (test-vtable-non-current-buffer-update-object) > (test-vtable--limit-string-with-face-remapped-buffer): New test. > --- > lisp/emacs-lisp/vtable.el | 293 +++++++++++++++------------ > test/lisp/emacs-lisp/vtable-tests.el | 78 ++++++- > 2 files changed, 242 insertions(+), 129 deletions(-) > > diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el > index bcdd280fb92..94f3199f12b 100644 > --- a/lisp/emacs-lisp/vtable.el > +++ b/lisp/emacs-lisp/vtable.el > @@ -68,6 +68,7 @@ vtable > (column-colors :initarg :column-colors :accessor vtable-column-colors) > (row-colors :initarg :row-colors :accessor vtable-row-colors) > (-cached-colors :initform nil) > + (-buffer :initform nil) > (-cache :initform (make-hash-table :test #'equal)) > (-cached-keymap :initform nil) > (-has-column-spec :initform nil)) > @@ -221,6 +222,20 @@ vtable--face-color >=20=20 > ;;; Interface utility functions. >=20=20 > +(defun vtable-buffer (&optional table) > + "Return the buffer associated with TABLE. > +If TABLE is nil, use the table under point. Return nil if the table has > +not been inserted into a buffer." > + (slot-value (or table (vtable-current-table)) > + '-buffer)) > + > +(defun vtable-set-buffer (buffer &optional table) > + "Associate BUFFER with TABLE. > +If TABLE is nil, use the table under point." > + (setf (slot-value (or table (vtable-current-table)) > + '-buffer) > + buffer)) > + > (defun vtable-current-table () > "Return the table under point." > (get-text-property (point) 'vtable)) > @@ -301,32 +316,33 @@ vtable-update-object > (unless (cdr objects) > (error "Can't find the old object")) > (setcar (cdr objects) object)) > - ;; Then update the rendered vtable in the current buffer. > - (if-let* ((cache (vtable--current-cache)) > - (line-number (seq-position (vtable--cache-lines cache) > - old-object > - (lambda (a b) > - (equal (car a) b)))) > - (line (elt (vtable--cache-lines cache) line-number))) > - (progn > - (setcar line object) > - (setcdr line (vtable--compute-cached-line table object)) > - ;; ... and redisplay the line in question. > - (save-excursion > - (vtable-goto-object old-object) > - (let ((keymap (get-text-property (point) 'keymap)) > - (start (point))) > - (delete-line) > - (vtable--insert-line table line line-number > - (vtable--cache-widths cache) > - (vtable--spacer table)) > - (add-text-properties start (point) (list 'keymap keymap > - 'vtable table > - 'vtable-cache cac= he)))) > - ;; We may have inserted a non-numerical value into a previously > - ;; all-numerical table, so recompute. > - (vtable--recompute-numerical table (cdr line))) > - (error "Can't find cached object in vtable")))) > + ;; Then update the rendered vtable in its buffer. > + (with-current-buffer (vtable-buffer table) > + (if-let* ((cache (vtable--current-cache)) Since we're restricting a vtable to only be inserted in a single buffer now, we can make vtable--current-cache take the table as an explicit argument, and just pull the cache out of there rather than the current buffer. Actually, we can stop setting the vtable-cache text property entirely: it should only be pulled from the table. > + (line-number (seq-position (vtable--cache-lines cache) > + old-object > + (lambda (a b) > + (equal (car a) b)))) > + (line (elt (vtable--cache-lines cache) line-number))) > + (progn With the above-mentioned change to vtable--current-cache, you could have the change just turn this progn into a with-current-buffer. > + (setcar line object) > + (setcdr line (vtable--compute-cached-line table object)) > + ;; ... and redisplay the line in question. > + (save-excursion > + (vtable-goto-object old-object) > + (let ((keymap (get-text-property (point) 'keymap)) > + (start (point))) > + (delete-line) > + (vtable--insert-line table line line-number > + (vtable--cache-widths cache) > + (vtable--spacer table)) > + (add-text-properties start (point) (list 'keymap keymap > + 'vtable table > + 'vtable-cache c= ache)))) > + ;; We may have inserted a non-numerical value into a previou= sly > + ;; all-numerical table, so recompute. > + (vtable--recompute-numerical table (cdr line))) > + (error "Can't find cached object in vtable"))))) >=20=20 > (defun vtable-remove-object (table object) > "Remove OBJECT from TABLE. > @@ -334,14 +350,15 @@ vtable-remove-object > ;; First remove from the objects. > (setf (vtable-objects table) (delq object (vtable-objects table))) > ;; Then adjust the cache and display. > - (save-excursion > - (vtable-goto-table table) > - (let ((cache (vtable--current-cache)) > - (inhibit-read-only t)) > - (setcar cache (delq (assq object (vtable--cache-lines cache)) > - (vtable--cache-lines cache))) > - (when (vtable-goto-object object) > - (delete-line))))) > + (with-current-buffer (vtable-buffer table) > + (save-excursion > + (vtable-goto-table table) > + (let ((cache (vtable--current-cache)) Maybe we won't need this vtable-goto-table if we make vtable--current-cache take the table? > + (inhibit-read-only t)) > + (setcar cache (delq (assq object (vtable--cache-lines cache)) > + (vtable--cache-lines cache))) > + (when (vtable-goto-object object) > + (delete-line)))))) >=20=20 > ;; FIXME: The fact that the `location' argument of > ;; `vtable-insert-object' can be an integer and is then interpreted as > @@ -369,8 +386,9 @@ vtable-insert-object > (progn > (setf (vtable-objects table) (list object)) > (vtable--recompute-numerical table (vtable--compute-cached-line = table object)) > - (vtable-goto-table table) > - (vtable-revert-command)) > + (with-current-buffer (vtable-buffer table) > + (vtable-goto-table table) > + (vtable-revert-command))) > ;; First insert into the objects. > (let ((pos (if location > (if (integerp location) > @@ -398,56 +416,57 @@ vtable-insert-object > ;; Otherwise, append the object. > (nconc (vtable-objects table) (list object))))) > ;; Then adjust the cache and display. > - (save-excursion > - (vtable-goto-table table) > - (let* ((cache (vtable--current-cache)) > - (inhibit-read-only t) > - (keymap (get-text-property (point) 'keymap)) > - (ellipsis (if (vtable-ellipsis table) > - (propertize (truncate-string-ellipsis) > - 'face (vtable-face table)) > - "")) > - (ellipsis-width (string-pixel-width ellipsis)) > - (lines (vtable--cache-lines cache)) > - (elem (if location ; This binding mirrors the binding of `= pos' above. > - (if (integerp location) > - (nth location lines) > - (or (assq location lines) > - (and before (car lines)))) > - (if before (car lines)))) > - (pos (memq elem lines)) > - (line (cons object (vtable--compute-cached-line table objec= t)))) > - (if (or before > - (and pos (integerp location))) > - ;; Add the new object before:. > - (let ((old-line (car pos))) > - (setcar pos line) > - (setcdr pos (cons old-line (cdr pos))) > - (unless (vtable-goto-object (car elem)) > - (vtable-beginning-of-table))) > - ;; Otherwise, add the object after. > - (if pos > - ;; Splice the object into the list. > - (progn > - (setcdr pos (cons line (cdr pos))) > - (if (vtable-goto-object location) > - (forward-line 1) ; Insert *after*. > - (vtable-end-of-table))) > - ;; Otherwise, append the object. > - (setcar cache (nconc lines (list line))) > - (vtable-end-of-table))) > - (let ((start (point))) > - ;; FIXME: We have to adjust colors in lines below this if we > - ;; have :row-colors. > - (vtable--insert-line table line 0 > - (vtable--cache-widths cache) (vtable--spa= cer table) > - ellipsis ellipsis-width) > - (add-text-properties start (point) (list 'keymap keymap > - 'vtable table > - 'vtable-cache cache))) > - ;; We may have inserted a non-numerical value into a previously > - ;; all-numerical table, so recompute. > - (vtable--recompute-numerical table (cdr line)))))) > + (with-current-buffer (vtable-buffer table) > + (save-excursion > + (vtable-goto-table table) > + (let* ((cache (vtable--current-cache)) > + (inhibit-read-only t) > + (keymap (get-text-property (point) 'keymap)) > + (ellipsis (if (vtable-ellipsis table) > + (propertize (truncate-string-ellipsis) > + 'face (vtable-face table)) > + "")) > + (ellipsis-width (string-pixel-width ellipsis (current-buf= fer))) > + (lines (vtable--cache-lines cache)) > + (elem (if location ; This binding mirrors the binding of= `pos' above. > + (if (integerp location) > + (nth location lines) > + (or (assq location lines) > + (and before (car lines)))) > + (if before (car lines)))) > + (pos (memq elem lines)) > + (line (cons object (vtable--compute-cached-line table obj= ect)))) Hmm... I think this is the only thing in these let-bindings which depends on the current buffer (besides vtable--current-cache which should take the buffer as an argument). If we made vtable--compute-cached-line take the buffer and explicitly passed it to string-pixel-width in there, I think we'd be able to bind with-current-buffer around much less code. > + (if (or before > + (and pos (integerp location))) > + ;; Add the new object before:. > + (let ((old-line (car pos))) > + (setcar pos line) > + (setcdr pos (cons old-line (cdr pos))) > + (unless (vtable-goto-object (car elem)) > + (vtable-beginning-of-table))) > + ;; Otherwise, add the object after. > + (if pos > + ;; Splice the object into the list. > + (progn > + (setcdr pos (cons line (cdr pos))) > + (if (vtable-goto-object location) > + (forward-line 1) ; Insert *after*. > + (vtable-end-of-table))) > + ;; Otherwise, append the object. > + (setcar cache (nconc lines (list line))) > + (vtable-end-of-table))) > + (let ((start (point))) > + ;; FIXME: We have to adjust colors in lines below this if we > + ;; have :row-colors. > + (vtable--insert-line table line 0 > + (vtable--cache-widths cache) (vtable--s= pacer table) > + ellipsis ellipsis-width) > + (add-text-properties start (point) (list 'keymap keymap > + 'vtable table > + 'vtable-cache cache= ))) > + ;; We may have inserted a non-numerical value into a previously > + ;; all-numerical table, so recompute. > + (vtable--recompute-numerical table (cdr line)))))))
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.
Received: (at 79982) by debbugs.gnu.org; 10 Dec 2025 22:18:51 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 10 17:18:50 2025
Received: from localhost ([127.0.0.1]:37406 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vTSWI-0005iy-Pm
for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 17:18:50 -0500
Received: from mail-ua1-x932.google.com ([2607:f8b0:4864:20::932]:52641)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
(Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
id 1vTSWG-0005id-R9
for 79982 <at> debbugs.gnu.org; Wed, 10 Dec 2025 17:18:49 -0500
Received: by mail-ua1-x932.google.com with SMTP id
a1e0cc1a2514c-93f56a97064so121508241.1
for <79982 <at> debbugs.gnu.org>; Wed, 10 Dec 2025 14:18:48 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1765405123; x=1766009923; darn=debbugs.gnu.org;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:from:to:cc:subject:date:message-id:reply-to;
bh=oCq0ZGkhAsD3mOIuDtcIfkDRzbBo7VqFr5uWBKlsUZs=;
b=XsYul7PKNbduhAOozo+V8GT1kVUG/4xvgIDnRXvmwAZ1NCc5Oi7qLYpVAKUnBWrePi
g3Wlfx2k9LC9I1pFa1vTHK4mJ09m2LyGmu0VHEzMRdjCmARAaBKad9AbMG+hATn273rb
pNNdjobWdapOtrhA7j208NveW80VaHqZ/OlxpNTbWSz3P/8OpCF9jIIOhuixA92bnSY8
T5RAunzeWss9o/HhJYx9/2kn2Xgq8dIbuCRvxja0CrQwLsCbKp9JHnKRJpUZ4QGe73/z
7QZwaQJAz3sk/84Db1g0bqJaF49b86iN1jjXSKE7eJSku5O0doXvTxbpov/anaOc/mms
sFgg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1765405123; x=1766009923;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=oCq0ZGkhAsD3mOIuDtcIfkDRzbBo7VqFr5uWBKlsUZs=;
b=mOEZzy6u8eni7XtWOyVEUAYV3tXJu5/s2drysZsWhy8RF0e9LFBPmMrkVKQaxLnshC
iVE+0xQY9dZNYezU8loM7SkcU0cA4UuLA20zNDW7b0m9EH2hmgRbfnobtF2ra48cc6zB
6BJbYagwyqR6Nb5FBGOJRWbvkepOEfvXNlg/ZgD+SnvaJX45AYh/ubIe1Pyg5y2bOrIv
kUC7+Fx1C1dXsbypPM1Ab0HVhycFqRfhbsHb7uAqwK7SI0+XLI2/Ioce9dQmRO0PLa8Z
L8xiLOTmKOOHFTc/GI1AMq9UIkxWukR68bziiT/06ARdTRmXXQAjavvNwWHsGEuKC2+/
aaSA==
X-Forwarded-Encrypted: i=1;
AJvYcCVAV19HK+jBZ0pGmjqtVC4AvcLCaHzR0cLu0cDIqzt+K9FllZOl9pBmWizp0ZfhmT00mo8dnw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Ywkiv4yI1rW0JLjhQ+CsnxXgn7adyMru0dURCMj5y8TjWnCKiut
igTdk9aJTvylJp8aF5BVKPxis6Pyg+k8LA3aJV3yqaTqcEcpOPPTq/on0CKO9T3+niupks5u6r0
b9fUByW2sS74UlyGvw/g2IL2L8Q6sRFQ=
X-Gm-Gg: AY/fxX6N2RRmW8XnnJFHeKE3RyLDUcAMARmZEpX6rk8MC29zk4EX+zwLiXo+dldjbsD
ey50VaulIsJ+TIZSWC5akkF+2+NF6oNq6h+wAOLzgGnAK5Ms3Yks8DhSHUtrNznJ0tQ15/HsV8a
r61DmYSRPGrIn7bYsiEAV/mkB8SFpM8FILaF5F3DRFuaXMncKhA8TlFFxOHGb8+i17K8KhI8iqW
6QzsVic+5ycG99NTOSvr5ZsgnZw33DhQ8/lG93A6e37lU3D9q2hqIeNll6I4RvMjl9pOQI=
X-Google-Smtp-Source: AGHT+IECJwam9lz0iRitbqqpCWpjknR3xREooML7ttCtN1yfPC/5LZ8OW40qYQfnVGAzUFtT0EgXUKEb4kH3jviHn2A=
X-Received: by 2002:a05:6102:419f:b0:5df:b5d4:e45d with SMTP id
ada2fe7eead31-5e571dd1a32mr1435892137.33.1765405122735; Wed, 10 Dec 2025
14:18:42 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN>
<iero6o6s75r.fsf@HIDDEN>
<CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN>
<ierikeerwu7.fsf_-_@HIDDEN>
In-Reply-To: <ierikeerwu7.fsf_-_@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Wed, 10 Dec 2025 17:18:31 -0500
X-Gm-Features: AQt7F2o0OMWOWDjSd0WAOWggBGAOyq9BCDOgE9n7QUEpK5fRrq8BmuIYPPKJ35Q
Message-ID: <CAN+1HbrvHqgeaqXbHB21qLyQ+f0FhO9kfe_uL2fFn3kkTomHeA@HIDDEN>
Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable
buffer slot
To: Spencer Baugh <sbaugh@HIDDEN>
Content-Type: multipart/mixed; boundary="00000000000039c8e10645a0693e"
X-Debbugs-Envelope-To: 79982
Cc: Kristoffer Balintona <krisbalintona@HIDDEN>,
Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN,
79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>,
Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
Augusto Stoffel <arstoffel@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
--00000000000039c8e10645a0693e
Content-Type: multipart/alternative; boundary="00000000000039c8df0645a0693c"
--00000000000039c8df0645a0693c
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Wed, Dec 10, 2025 at 1:54=E2=80=AFPM Spencer Baugh <sbaugh@HIDDEN=
m> wrote:
> St=C3=A9phane Marks <shipmints@HIDDEN> writes:
>
> > On Wed, Dec 10, 2025 at 10:12=E2=80=AFAM Spencer Baugh <sbaugh@janestre=
et.com>
> wrote:
> > Please add a test which passes with this patch and doesn't pass withou=
t
> > this patch.
> >
> > Try the new tests in this updated patch.
>
> Thanks, these tests look good, this will help a lot.
>
> > From 6e33b8cbf2063e1e7689f231bb0c6c6450520bd3 Mon Sep 17 00:00:00 2001
> > From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN>
> > Date: Wed, 10 Dec 2025 09:20:02 -0500
> > Subject: [PATCH] Add vtable buffer slot
> >
> > This solves for background vtable mutations, i.e., updates
> > initiated from buffers other than the vtable buffer, and for
> > buffer-adjusted string-pixel-width computations.
> >
> > * lisp/emacs-lisp/vtable.el (vtable): New '-buffer' slot.
> > (vtable-buffer):
> > (vtable-set-buffer): New function.
> > (vtable-update-object):
> > (vtable-remove-object):
> > (vtable-insert-object): Wrap operation with the vtable buffer.
> > (vtable--insert): Split from old 'vtable-insert'.
> > (vtable-insert): Insert table and record the buffer.
> > (vtable--insert-line):
> > (vtable--insert-header-line): Use 'vtable-buffer' for pixel-width
> computation.
> > (vtable--limit-string):
> > (vtable--char-width): Pass buffer to 'string-pixel-width'.
> > (vtable-revert): New optional table argument.
> > (vtable--alter-column-width):
> > (vtable-revert-command):
> > (vtable-sort-by-current-column): Call 'vtable-revert' with the table.
> >
> > * test/lisp/emacs-lisp/vtable-tests.el
> > (vtable-tests--make-no-header-2-object-table): New helper
> > function.
> > (test-vstable-compute-columns): Correct typo in test name. Use
> > new helper function.
> > (test-vtable-unique-buffer)
> > (test-vtable-non-current-buffer-insert-object)
> > (test-vtable-non-current-buffer-remove-object)
> > (test-vtable-non-current-buffer-update-object)
> > (test-vtable--limit-string-with-face-remapped-buffer): New test.
> > ---
> > lisp/emacs-lisp/vtable.el | 389 +++++++++++++++------------
> > test/lisp/emacs-lisp/vtable-tests.el | 78 +++++-
> > 2 files changed, 291 insertions(+), 176 deletions(-)
> >
> > diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
> > index bcdd280fb92..fe4bae01077 100644
> > --- a/lisp/emacs-lisp/vtable.el
> > +++ b/lisp/emacs-lisp/vtable.el
> > @@ -68,6 +68,7 @@ vtable
> > (column-colors :initarg :column-colors :accessor
> vtable-column-colors)
> > (row-colors :initarg :row-colors :accessor vtable-row-colors)
> > (-cached-colors :initform nil)
> > + (-buffer :initform nil)
> > (-cache :initform (make-hash-table :test #'equal))
> > (-cached-keymap :initform nil)
> > (-has-column-spec :initform nil))
> > @@ -221,6 +222,20 @@ vtable--face-color
> >
> > ;;; Interface utility functions.
> >
> > +(defun vtable-buffer (&optional table)
> > + "Return the buffer associated with TABLE.
> > +If TABLE is nil, use the table under point. Return nil if the table h=
as
> > +not been inserted into a buffer."
> > + (slot-value (or table (vtable-current-table))
> > + '-buffer))
> > +
> > +(defun vtable-set-buffer (buffer &optional table)
> > + "Associate BUFFER with TABLE.
> > +If TABLE is nil, use the table under point."
> > + (setf (slot-value (or table (vtable-current-table))
> > + '-buffer)
> > + buffer))
> > +
> > (defun vtable-current-table ()
> > "Return the table under point."
> > (get-text-property (point) 'vtable))
> > @@ -285,63 +300,65 @@ vtable-update-object
> > compared with `equal'), signal an error.
> >
> > TABLE must be at point in the current buffer."
> > - (unless old-object
> > - (setq old-object object))
> > - (let* ((objects (vtable-objects table))
> > - (inhibit-read-only t))
> > - ;; First replace the object in the object storage.
> > - (if (eq old-object (car objects))
> > - ;; It's at the head, so replace it there.
> > - (setf (vtable-objects table)
> > - (cons object (cdr objects)))
> > - ;; Otherwise splice into the list.
> > - (while (and (cdr objects)
> > - (not (eq (cadr objects) old-object)))
> > - (setq objects (cdr objects)))
> > - (unless (cdr objects)
> > - (error "Can't find the old object"))
> > - (setcar (cdr objects) object))
> > - ;; Then update the rendered vtable in the current buffer.
> > - (if-let* ((cache (vtable--current-cache))
> > - (line-number (seq-position (vtable--cache-lines cache)
> > - old-object
> > - (lambda (a b)
> > - (equal (car a) b))))
> > - (line (elt (vtable--cache-lines cache) line-number)))
> > - (progn
> > - (setcar line object)
> > - (setcdr line (vtable--compute-cached-line table object))
> > - ;; ... and redisplay the line in question.
> > - (save-excursion
> > - (vtable-goto-object old-object)
> > - (let ((keymap (get-text-property (point) 'keymap))
> > - (start (point)))
> > - (delete-line)
> > - (vtable--insert-line table line line-number
> > - (vtable--cache-widths cache)
> > - (vtable--spacer table))
> > - (add-text-properties start (point) (list 'keymap keymap
> > - 'vtable table
> > - 'vtable-cache
> cache))))
> > - ;; We may have inserted a non-numerical value into a
> previously
> > - ;; all-numerical table, so recompute.
> > - (vtable--recompute-numerical table (cdr line)))
> > - (error "Can't find cached object in vtable"))))
> > + (with-current-buffer (vtable-buffer table)
> > + (unless old-object
> > + (setq old-object object))
> > + (let* ((objects (vtable-objects table))
> > + (inhibit-read-only t))
> > + ;; First replace the object in the object storage.
> > + (if (eq old-object (car objects))
> > + ;; It's at the head, so replace it there.
> > + (setf (vtable-objects table)
> > + (cons object (cdr objects)))
> > + ;; Otherwise splice into the list.
> > + (while (and (cdr objects)
> > + (not (eq (cadr objects) old-object)))
> > + (setq objects (cdr objects)))
> > + (unless (cdr objects)
> > + (error "Can't find the old object"))
> > + (setcar (cdr objects) object))
> > + ;; Then update the rendered vtable in the current buffer.
> > + (if-let* ((cache (vtable--current-cache))
> > + (line-number (seq-position (vtable--cache-lines cache)
> > + old-object
> > + (lambda (a b)
> > + (equal (car a) b))))
> > + (line (elt (vtable--cache-lines cache) line-number)))
> > + (progn
> > + (setcar line object)
> > + (setcdr line (vtable--compute-cached-line table object))
> > + ;; ... and redisplay the line in question.
> > + (save-excursion
> > + (vtable-goto-object old-object)
> > + (let ((keymap (get-text-property (point) 'keymap))
> > + (start (point)))
> > + (delete-line)
> > + (vtable--insert-line table line line-number
> > + (vtable--cache-widths cache)
> > + (vtable--spacer table))
> > + (add-text-properties start (point) (list 'keymap keyma=
p
> > + 'vtable table
> > + 'vtable-cache
> cache))))
> > + ;; We may have inserted a non-numerical value into a
> previously
> > + ;; all-numerical table, so recompute.
> > + (vtable--recompute-numerical table (cdr line)))
> > + (error "Can't find cached object in vtable")))))
> >
> > (defun vtable-remove-object (table object)
> > "Remove OBJECT from TABLE.
> > This will also remove the displayed line."
> > - ;; First remove from the objects.
> > - (setf (vtable-objects table) (delq object (vtable-objects table)))
> > - ;; Then adjust the cache and display.
> > - (save-excursion
> > - (vtable-goto-table table)
> > - (let ((cache (vtable--current-cache))
> > - (inhibit-read-only t))
> > - (setcar cache (delq (assq object (vtable--cache-lines cache))
> > - (vtable--cache-lines cache)))
> > - (when (vtable-goto-object object)
> > - (delete-line)))))
> > + (with-current-buffer (vtable-buffer table)
> > + ;; First remove from the objects.
> > + (setf (vtable-objects table) (delq object (vtable-objects table)))
> > + ;; Then adjust the cache and display.
> > + (save-excursion
> > + (vtable-goto-table table)
> > + (let ((cache (vtable--current-cache))
> > + (inhibit-read-only t))
> > + (setcar cache (delq (assq object (vtable--cache-lines cache))
> > + (vtable--cache-lines cache)))
> > + (when (vtable-goto-object object)
> > + (delete-line))))))
> >
> > ;; FIXME: The fact that the `location' argument of
> > ;; `vtable-insert-object' can be an integer and is then interpreted as
> > @@ -363,91 +380,92 @@ vtable-insert-object
> > case.
> >
> > This also updates the displayed table."
> > - ;; If the vtable is empty, just add the object and regenerate the
> > - ;; table.
> > - (if (null (vtable-objects table))
> > - (progn
> > - (setf (vtable-objects table) (list object))
> > - (vtable--recompute-numerical table (vtable--compute-cached-lin=
e
> table object))
> > - (vtable-goto-table table)
> > - (vtable-revert-command))
> > - ;; First insert into the objects.
> > - (let ((pos (if location
> > - (if (integerp location)
> > - (prog1
> > - (nthcdr location (vtable-objects table))
> > - ;; Do not prepend if index is too large:
> > - (setq before nil))
> > - (or (memq location (vtable-objects table))
> > - ;; Prepend if `location' is not found and
> > - ;; `before' is non-nil:
> > - (and before (vtable-objects table))))
> > - ;; If `location' is nil and `before' is non-nil, we
> > - ;; prepend the new object.
> > - (if before (vtable-objects table)))))
> > - (if (or before ; If `before' is non-nil, `pos' should be, as
> well.
> > - (and pos (integerp location)))
> > - ;; Add the new object before.
> > - (let ((old-object (car pos)))
> > - (setcar pos object)
> > - (setcdr pos (cons old-object (cdr pos))))
> > - ;; Otherwise, add the object after.
> > - (if pos
> > - ;; Splice the object into the list.
> > - (setcdr pos (cons object (cdr pos)))
> > - ;; Otherwise, append the object.
> > - (nconc (vtable-objects table) (list object)))))
> > - ;; Then adjust the cache and display.
> > - (save-excursion
> > - (vtable-goto-table table)
> > - (let* ((cache (vtable--current-cache))
> > - (inhibit-read-only t)
> > - (keymap (get-text-property (point) 'keymap))
> > - (ellipsis (if (vtable-ellipsis table)
> > - (propertize (truncate-string-ellipsis)
> > - 'face (vtable-face table))
> > - ""))
> > - (ellipsis-width (string-pixel-width ellipsis))
> > - (lines (vtable--cache-lines cache))
> > - (elem (if location ; This binding mirrors the binding of
> `pos' above.
> > - (if (integerp location)
> > - (nth location lines)
> > - (or (assq location lines)
> > - (and before (car lines))))
> > - (if before (car lines))))
> > - (pos (memq elem lines))
> > - (line (cons object (vtable--compute-cached-line table
> object))))
> > - (if (or before
> > + (with-current-buffer (vtable-buffer table)
> > + ;; If the vtable is empty, just add the object and regenerate the
> > + ;; table.
> > + (if (null (vtable-objects table))
> > + (progn
> > + (setf (vtable-objects table) (list object))
> > + (vtable--recompute-numerical table
> (vtable--compute-cached-line table object))
> > + (vtable-goto-table table)
> > + (vtable-revert-command))
> > + ;; First insert into the objects.
> > + (let ((pos (if location
> > + (if (integerp location)
> > + (prog1
> > + (nthcdr location (vtable-objects table))
> > + ;; Do not prepend if index is too large:
> > + (setq before nil))
> > + (or (memq location (vtable-objects table))
> > + ;; Prepend if `location' is not found and
> > + ;; `before' is non-nil:
> > + (and before (vtable-objects table))))
> > + ;; If `location' is nil and `before' is non-nil, we
> > + ;; prepend the new object.
> > + (if before (vtable-objects table)))))
> > + (if (or before ; If `before' is non-nil, `pos' should be, as
> well.
> > (and pos (integerp location)))
> > - ;; Add the new object before:.
> > - (let ((old-line (car pos)))
> > - (setcar pos line)
> > - (setcdr pos (cons old-line (cdr pos)))
> > - (unless (vtable-goto-object (car elem))
> > - (vtable-beginning-of-table)))
> > + ;; Add the new object before.
> > + (let ((old-object (car pos)))
> > + (setcar pos object)
> > + (setcdr pos (cons old-object (cdr pos))))
> > ;; Otherwise, add the object after.
> > (if pos
> > ;; Splice the object into the list.
> > - (progn
> > - (setcdr pos (cons line (cdr pos)))
> > - (if (vtable-goto-object location)
> > - (forward-line 1) ; Insert *after*.
> > - (vtable-end-of-table)))
> > + (setcdr pos (cons object (cdr pos)))
> > ;; Otherwise, append the object.
> > - (setcar cache (nconc lines (list line)))
> > - (vtable-end-of-table)))
> > - (let ((start (point)))
> > - ;; FIXME: We have to adjust colors in lines below this if we
> > - ;; have :row-colors.
> > - (vtable--insert-line table line 0
> > - (vtable--cache-widths cache)
> (vtable--spacer table)
> > - ellipsis ellipsis-width)
> > - (add-text-properties start (point) (list 'keymap keymap
> > - 'vtable table
> > - 'vtable-cache
> cache)))
> > - ;; We may have inserted a non-numerical value into a previousl=
y
> > - ;; all-numerical table, so recompute.
> > - (vtable--recompute-numerical table (cdr line))))))
> > + (nconc (vtable-objects table) (list object)))))
> > + ;; Then adjust the cache and display.
> > + (save-excursion
> > + (vtable-goto-table table)
> > + (let* ((cache (vtable--current-cache))
> > + (inhibit-read-only t)
> > + (keymap (get-text-property (point) 'keymap))
> > + (ellipsis (if (vtable-ellipsis table)
> > + (propertize (truncate-string-ellipsis)
> > + 'face (vtable-face table))
> > + ""))
> > + (ellipsis-width (string-pixel-width ellipsis
> (current-buffer)))
> > + (lines (vtable--cache-lines cache))
> > + (elem (if location ; This binding mirrors the binding
> of `pos' above.
> > + (if (integerp location)
> > + (nth location lines)
> > + (or (assq location lines)
> > + (and before (car lines))))
> > + (if before (car lines))))
> > + (pos (memq elem lines))
> > + (line (cons object (vtable--compute-cached-line table
> object))))
> > + (if (or before
> > + (and pos (integerp location)))
> > + ;; Add the new object before:.
> > + (let ((old-line (car pos)))
> > + (setcar pos line)
> > + (setcdr pos (cons old-line (cdr pos)))
> > + (unless (vtable-goto-object (car elem))
> > + (vtable-beginning-of-table)))
> > + ;; Otherwise, add the object after.
> > + (if pos
> > + ;; Splice the object into the list.
> > + (progn
> > + (setcdr pos (cons line (cdr pos)))
> > + (if (vtable-goto-object location)
> > + (forward-line 1) ; Insert *after*.
> > + (vtable-end-of-table)))
> > + ;; Otherwise, append the object.
> > + (setcar cache (nconc lines (list line)))
> > + (vtable-end-of-table)))
> > + (let ((start (point)))
> > + ;; FIXME: We have to adjust colors in lines below this if =
we
> > + ;; have :row-colors.
> > + (vtable--insert-line table line 0
> > + (vtable--cache-widths cache)
> (vtable--spacer table)
> > + ellipsis ellipsis-width)
> > + (add-text-properties start (point) (list 'keymap keymap
> > + 'vtable table
> > + 'vtable-cache
> cache)))
> > + ;; We may have inserted a non-numerical value into a
> previously
> > + ;; all-numerical table, so recompute.
> > + (vtable--recompute-numerical table (cdr line)))))))
>
> Is it possible to avoid these massive diffs in vtable-update-object,
> vtable-remove-object, and vtable-insert-object? These will make the
> history worse, and also makes it harder to review. Maybe we only need
> to wrap with-current-buffer around a smaller part of these functions?
>
> FYI, in general, you should change try to make changes in a way which
> minimizes the size of the diff.
>
> > (defun vtable-column (table index)
> > "Return the name of the INDEXth column in TABLE."
> > @@ -520,14 +538,14 @@ vtable--cache-widths
> > (defun vtable--cache-lines (cache)
> > (car cache))
> >
> > -(defun vtable-insert (table)
> > +(defun vtable--insert (table)
> > (let* ((spacer (vtable--spacer table))
> > (start (point))
> > (ellipsis (if (vtable-ellipsis table)
> > (propertize (truncate-string-ellipsis)
> > 'face (vtable-face table))
> > ""))
> > - (ellipsis-width (string-pixel-width ellipsis))
> > + (ellipsis-width (string-pixel-width ellipsis (current-buffer)=
))
> > ;; We maintain a cache per screen/window width, so that we
> render
> > ;; correctly if Emacs is open on two different screens (or th=
e
> > ;; user resizes the frame).
> > @@ -565,9 +583,24 @@ vtable-insert
> > 'vtable-cache cache))
> > (goto-char start)))
> >
> > +(defun vtable-insert (table)
> > + "Insert TABLE into the current buffer.
> > +The current buffer will be recorded as TABLE's buffer. If this is don=
e
> > +more than once, or if the table is attempted to be inserted more than
> > +once into the same buffer, signal an error."
> > + (if-let* ((table-buffer (vtable-buffer table)))
> > + (if (eq table-buffer (current-buffer))
> > + (error "A vtable cannot be inserted more than once into a
> buffer")
> > + (error "A vtable cannot be inserted into more than one
> buffer")))
> > + (vtable-set-buffer (current-buffer) table)
> > + (let ((inhibit-read-only t)
> > + (inhibit-modification-hooks t))
> > + (vtable--insert table)))
> > +
> > (defun vtable--insert-line (table line line-number widths spacer
> > &optional ellipsis ellipsis-width)
> > (let ((start (point))
> > + (buffer (vtable-buffer table))
> > (columns (vtable-columns table))
> > (column-colors
> > (and (vtable-column-colors table)
> > @@ -607,16 +640,18 @@ vtable--insert-line
> > (concat
> > (vtable--limit-string
> > pre-computed (- (elt widths index)
> > - (or ellipsis-width 0)))
> > + (or ellipsis-width 0))
> > + buffer)
> > ellipsis)
> > pre-computed))
> > ;; Recompute widths.
> > (t
> > - (if (> (string-pixel-width value) (elt widths index)=
)
> > + (if (> (string-pixel-width value buffer) (elt widths
> index))
> > (concat
> > (vtable--limit-string
> > value (- (elt widths index)
> > - (or ellipsis-width 0)))
> > + (or ellipsis-width 0))
> > + buffer)
> > ellipsis)
> > value))))
> > (start (point))
> > @@ -630,14 +665,15 @@ vtable--insert-line
> > (list 'space
> > :width (list
> > (+ (- (elt widths index)
> > - (string-pixel-width
> displayed))
> > + (string-pixel-width
> > + displayed buffer))
> > (if last 0 spacer)))))))
> > ;; Align to the right.
> > (insert (propertize " " 'display
> > (list 'space
> > :width (list (- (elt widths
> index)
> >
> (string-pixel-width
> > - displayed)))))
> > + displayed
> buffer)))))
> > displayed)
> > (unless last
> > (insert (propertize " " 'display
> > @@ -718,6 +754,7 @@ vtable--indicator
> > (defun vtable--insert-header-line (table widths spacer)
> > ;; Insert the header directly into the buffer.
> > (let ((start (point))
> > + (buffer (vtable-buffer table))
> > (divider (vtable-divider table))
> > (cmap (define-keymap
> > "<header-line> <drag-mouse-1>"
> #'vtable--drag-resize-column
> > @@ -737,14 +774,15 @@ vtable--insert-header-line
> > 'keymap cmap))
> > (start (point))
> > (indicator (vtable--indicator table index))
> > - (indicator-width (string-pixel-width indicator))
> > + (indicator-width (string-pixel-width indicator buffer))
> > (last (=3D index (1- (length (vtable-columns table)))))
> > displayed)
> > (setq displayed
> > - (if (> (string-pixel-width name)
> > + (if (> (string-pixel-width name buffer)
> > (- (elt widths index) indicator-width))
> > (vtable--limit-string
> > - name (- (elt widths index) indicator-width))
> > + name (- (elt widths index) indicator-width)
> > + buffer)
> > name))
> > (let* ((indicator-lead-width
> > ;; We want the indicator to not be quite flush right.
> > @@ -753,7 +791,7 @@ vtable--insert-header-line
> > indicator-lead-width))
> > (fill-width
> > (+ (- (elt widths index)
> > - (string-pixel-width displayed)
> > + (string-pixel-width displayed buffer)
> > indicator-width
> > indicator-lead-width)
> > (if last 0 spacer))))
> > @@ -771,7 +809,8 @@ vtable--insert-header-line
> > ;; This is the final column, and we have a sorting
> > ;; indicator, and the table is too wide for the window.
> > (let* ((pre-indicator (string-pixel-width
> > - (buffer-substring (point-min)
> (point))))
> > + (buffer-substring (point-min)
> (point))
> > + buffer))
> > (pre-fill
> > (- (window-width nil t)
> > pre-indicator
> > @@ -850,14 +889,16 @@ vtable--set-header-line
> > (buffer-substring (point-min) (1- (point-max))))))
> > (vtable-header-mode 1))
> >
> > -(defun vtable--limit-string (string pixels)
> > +
> > +(defun vtable--limit-string (string pixels buffer)
> > (while (and (length> string 0)
> > - (> (string-pixel-width string) pixels))
> > + (> (string-pixel-width string buffer) pixels))
> > (setq string (substring string 0 (1- (length string)))))
> > string)
> >
> > (defun vtable--char-width (table)
> > - (string-pixel-width (propertize "x" 'face (vtable-face table))))
> > + (string-pixel-width (propertize "x" 'face (vtable-face table))
> > + (vtable-buffer table)))
> >
> > (defun vtable--compute-width (table spec)
> > (cond
> > @@ -967,20 +1008,24 @@ vtable--make-keymap
> > (vtable-keymap table))
> > map)))
> >
> > -(defun vtable-revert ()
> > - "Regenerate the table under point."
> > - (let ((table (vtable-current-table))
> > - (object (vtable-current-object))
> > - (column (vtable-current-column))
> > - (inhibit-read-only t))
> > - (unless table
> > - (user-error "No table under point"))
> > - (delete-region (vtable-beginning-of-table) (vtable-end-of-table))
> > - (vtable-insert table)
> > - (when object
> > - (vtable-goto-object object))
> > - (when column
> > - (vtable-goto-column column))))
> > +(defun vtable-revert (&optional table)
> > + "Regenerate the table under point.
> > +If TABLE is nil, use the table under point."
>
> This repeats itself. It should say "Regenerate TABLE, defaulting to the
> table under point."
>
> > + (setq table (or table (vtable-current-table)))
> > + (unless table
> > + (user-error "No table found"))
>
> I don't think this error message should change.
>
> > + (with-current-buffer (vtable-buffer table)
> > + (let ((object (vtable-current-object))
> > + (column (vtable-current-column))
>
> So we still implicitly depend on the value of point in the buffer? How
> does this interact with window-point? This seems like a potential
> foot-gun.
>
> > + (inhibit-read-only t))
> > + (unless table
> > + (user-error "No table under point"))
> > + (delete-region (vtable-beginning-of-table) (vtable-end-of-table)=
)
> > + (vtable--insert table)
> > + (when object
> > + (vtable-goto-object object))
> > + (when column
> > + (vtable-goto-column column)))))
> >
> > ;;; Commands.
> >
> > @@ -1013,7 +1058,7 @@ vtable--alter-column-width
> > ;; Store the width so it'll be respected on a revert.
> > (setf (vtable-column-width (elt (vtable-columns table) column))
> > (format "%dpx" (aref widths column)))
> > - (vtable-revert)))
> > + (vtable-revert table)))
> >
> > (defun vtable-widen-current-column (&optional n)
> > "Widen the current column by N characters.
> > @@ -1038,14 +1083,16 @@ vtable-next-column
> > (min (1- (length (vtable--cache-widths (vtable--current-cache))))
> > (1+ (vtable-current-column))))))
> >
> > -(defun vtable-revert-command ()
> > +(defun vtable-revert-command (&optional table)
> > "Re-query data and regenerate the table under point."
> > (interactive)
> > - (let ((table (vtable-current-table)))
> > - (when (vtable-objects-function table)
> > - (setf (vtable-objects table) (funcall (vtable-objects-function
> table))))
> > - (vtable--clear-cache table))
> > - (vtable-revert))
> > + (setq table (or table (vtable-current-table)))
> > + (unless table
> > + (user-error "No table found"))
> > + (when (vtable-objects-function table)
> > + (setf (vtable-objects table) (funcall (vtable-objects-function
> table))))
> > + (vtable--clear-cache table)
> > + (vtable-revert table))
> >
> > (defun vtable-sort-by-current-column ()
> > "Sort the table under point by the column under point."
> > @@ -1067,8 +1114,8 @@ vtable-sort-by-current-column
> > (if (eq (cdr last) 'ascend)
> > 'descend
> > 'ascend)
> > - 'ascend))))))
> > - (vtable-revert))
> > + 'ascend)))))
> > + (vtable-revert table)))
> >
> > (defun vtable-header-line-sort (e)
> > "Sort a vtable from the header line."
> > diff --git a/test/lisp/emacs-lisp/vtable-tests.el
> b/test/lisp/emacs-lisp/vtable-tests.el
> > index 74fb8cc8139..83f826ea353 100644
> > --- a/test/lisp/emacs-lisp/vtable-tests.el
> > +++ b/test/lisp/emacs-lisp/vtable-tests.el
> > @@ -27,16 +27,19 @@
> > (require 'ert)
> > (require 'ert-x)
> >
> > -(ert-deftest test-vstable-compute-columns ()
> > +(defun vtable-tests--make-no-header-2-object-table ()
> > + (make-vtable :columns '("a" "b" "c")
> > + :objects '(("foo" 1 2)
> > + ("bar" 3 :zot))
> > + :insert nil))
> > +
> > +(ert-deftest test-vtable-compute-columns ()
> > (should
> > (equal (mapcar
> > (lambda (column)
> > (vtable-column-align column))
> > (vtable--compute-columns
> > - (make-vtable :columns '("a" "b" "c")
> > - :objects '(("foo" 1 2)
> > - ("bar" 3 :zot))
> > - :insert nil)))
> > + (vtable-tests--make-no-header-2-object-table)))
> > '(left right left))))
> >
> > (ert-deftest test-vtable-insert-object ()
> > @@ -69,4 +72,69 @@ test-vtable-insert-object
> > (mapcar #'cadr (vtable-objects table))))
> > (number-sequence 0 11))))
> >
> > +(ert-deftest test-vtable-unique-buffer ()
> > + (let ((table (vtable-tests--make-no-header-2-object-table)))
> > + (with-temp-buffer
> > + (vtable-insert table)
> > + ;; This will run but fail on Emacs pre 31 vtable.
> > + (should-error (vtable-insert table))
> > + ;; This will run only on Emacs 31+ vtable.
> > + (when (> emacs-major-version 30)
> > + (should-error (vtable-set-buffer table (current-buffer)))))))
> > +
> > +(ert-deftest test-vtable-non-current-buffer-insert-object ()
> > + (let ((table (vtable-tests--make-no-header-2-object-table))
> > + (obj '("baz" 4 5)))
> > + (with-temp-buffer
> > + (vtable-insert table)
> > + (should (=3D (count-lines (point-min) (point-max)) 2))
> > + (with-temp-buffer
> > + (vtable-insert-object table obj))
> > + (should (=3D (count-lines (point-min) (point-max)) 3)))))
> > +
> > +(ert-deftest test-vtable-non-current-buffer-remove-object ()
> > + (let ((table (vtable-tests--make-no-header-2-object-table))
> > + (obj '("baz" 4 5)))
> > + (with-temp-buffer
> > + (vtable-insert table)
> > + (vtable-insert-object table obj)
> > + (should (=3D (count-lines (point-min) (point-max)) 3))
> > + (with-temp-buffer
> > + (vtable-remove-object table obj))
> > + (should (=3D (count-lines (point-min) (point-max)) 2)))))
> > +
> > +(ert-deftest test-vtable-non-current-buffer-update-object ()
> > + (let ((table (vtable-tests--make-no-header-2-object-table))
> > + (obj '("baz" 4 5))
> > + (obj-2 '("qux" 6 7)))
> > + (with-temp-buffer
> > + (vtable-insert table)
> > + (vtable-insert-object table obj)
> > + (should (=3D (count-lines (point-min) (point-max)) 3))
> > + (let ((line-2 (progn
> > + (goto-char (point-min))
> > + (forward-line 2)
> > + (buffer-substring (point) (point-max)))))
> > + (with-temp-buffer
> > + (vtable-update-object table obj-2 obj))
> > + (let ((line-2-new (progn
> > + (goto-char (point-min))
> > + (forward-line 2)
> > + (buffer-substring (point) (point-max)))))
> > + (should (=3D (count-lines (point-min) (point-max)) 3))
> > + (should (not (string=3D line-2 line-2-new))))))))
> > +
> > +(ert-deftest test-vtable--limit-string-with-face-remapped-buffer ()
> > + (with-temp-buffer
> > + (let ((text (propertize "XXXXX"
> > + 'face 'variable-pitch)))
> > + (face-remap-add-relative 'default :height 1.5)
> > + (if (> emacs-major-version 30)
> > + (should (eq
> > + 2
> > + (length (vtable--limit-string text 50
> (current-buffer)))))
> > + (should (eq
> > + 2
> > + (length (vtable--limit-string text 50))))))))
> > +
> > ;;; vtable-tests.el ends here
>
Thanks. Revised patch, attached. With regard to point vs. window-point,
the code seems no worse off than before? There is a suite of additional
fixes coming that address keeping point stable during operations and we can
see if there are any ill effects when we get to testing those changes.
-St=C3=A9phane
--00000000000039c8df0645a0693c
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Wed, Dec 10, 2025 at 1:54=E2=80=AFPM Spencer Baugh <<a href=3D"mailto=
:sbaugh@HIDDEN">sbaugh@HIDDEN</a>> wrote:</span></div></=
div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"g=
mail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:shipm=
ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br>
<br>
> On Wed, Dec 10, 2025 at 10:12=E2=80=AFAM Spencer Baugh <<a href=3D"=
mailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN</a>&g=
t; wrote:<br>
>=C2=A0 Please add a test which passes with this patch and doesn't p=
ass without<br>
>=C2=A0 this patch.<br>
><br>
> Try the new tests in this updated patch.<br>
<br>
Thanks, these tests look good, this will help a lot.<br>
<br>
> From 6e33b8cbf2063e1e7689f231bb0c6c6450520bd3 Mon Sep 17 00:00:00 2001=
<br>
> From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <<a href=3D"mailt=
o:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>><br>
> Date: Wed, 10 Dec 2025 09:20:02 -0500<br>
> Subject: [PATCH] Add vtable buffer slot<br>
><br>
> This solves for background vtable mutations, i.e., updates<br>
> initiated from buffers other than the vtable buffer, and for<br>
> buffer-adjusted string-pixel-width computations.<br>
><br>
> * lisp/emacs-lisp/vtable.el (vtable): New '-buffer' slot.<br>
> (vtable-buffer):<br>
> (vtable-set-buffer): New function.<br>
> (vtable-update-object):<br>
> (vtable-remove-object):<br>
> (vtable-insert-object): Wrap operation with the vtable buffer.<br>
> (vtable--insert): Split from old 'vtable-insert'.<br>
> (vtable-insert): Insert table and record the buffer.<br>
> (vtable--insert-line):<br>
> (vtable--insert-header-line): Use 'vtable-buffer' for pixel-wi=
dth computation.<br>
> (vtable--limit-string):<br>
> (vtable--char-width): Pass buffer to 'string-pixel-width'.<br>
> (vtable-revert): New optional table argument.<br>
> (vtable--alter-column-width):<br>
> (vtable-revert-command):<br>
> (vtable-sort-by-current-column): Call 'vtable-revert' with the=
table.<br>
><br>
> * test/lisp/emacs-lisp/vtable-tests.el<br>
> (vtable-tests--make-no-header-2-object-table): New helper<br>
> function.<br>
> (test-vstable-compute-columns): Correct typo in test name.=C2=A0 Use<b=
r>
> new helper function.<br>
> (test-vtable-unique-buffer)<br>
> (test-vtable-non-current-buffer-insert-object)<br>
> (test-vtable-non-current-buffer-remove-object)<br>
> (test-vtable-non-current-buffer-update-object)<br>
> (test-vtable--limit-string-with-face-remapped-buffer): New test.<br>
> ---<br>
>=C2=A0 lisp/emacs-lisp/vtable.el=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 | 389 +++++++++++++++------------<br>
>=C2=A0 test/lisp/emacs-lisp/vtable-tests.el |=C2=A0 78 +++++-<br>
>=C2=A0 2 files changed, 291 insertions(+), 176 deletions(-)<br>
><br>
> diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el<br>
> index bcdd280fb92..fe4bae01077 100644<br>
> --- a/lisp/emacs-lisp/vtable.el<br>
> +++ b/lisp/emacs-lisp/vtable.el<br>
> @@ -68,6 +68,7 @@ vtable<br>
>=C2=A0 =C2=A0 =C2=A0(column-colors :initarg :column-colors :accessor vt=
able-column-colors)<br>
>=C2=A0 =C2=A0 =C2=A0(row-colors :initarg :row-colors :accessor vtable-r=
ow-colors)<br>
>=C2=A0 =C2=A0 =C2=A0(-cached-colors :initform nil)<br>
> +=C2=A0 =C2=A0(-buffer :initform nil)<br>
>=C2=A0 =C2=A0 =C2=A0(-cache :initform (make-hash-table :test #'equa=
l))<br>
>=C2=A0 =C2=A0 =C2=A0(-cached-keymap :initform nil)<br>
>=C2=A0 =C2=A0 =C2=A0(-has-column-spec :initform nil))<br>
> @@ -221,6 +222,20 @@ vtable--face-color<br>
>=C2=A0 <br>
>=C2=A0 ;;; Interface utility functions.<br>
>=C2=A0 <br>
> +(defun vtable-buffer (&optional table)<br>
> +=C2=A0 "Return the buffer associated with TABLE.<br>
> +If TABLE is nil, use the table under point.=C2=A0 Return nil if the t=
able has<br>
> +not been inserted into a buffer."<br>
> +=C2=A0 (slot-value (or table (vtable-current-table))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 '-buffer))<br>
> +<br>
> +(defun vtable-set-buffer (buffer &optional table)<br>
> +=C2=A0 "Associate BUFFER with TABLE.<br>
> +If TABLE is nil, use the table under point."<br>
> +=C2=A0 (setf (slot-value (or table (vtable-current-table))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
'-buffer)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 buffer))<br>
> +<br>
>=C2=A0 (defun vtable-current-table ()<br>
>=C2=A0 =C2=A0 "Return the table under point."<br>
>=C2=A0 =C2=A0 (get-text-property (point) 'vtable))<br>
> @@ -285,63 +300,65 @@ vtable-update-object<br>
>=C2=A0 compared with `equal'), signal an error.<br>
>=C2=A0 <br>
>=C2=A0 TABLE must be at point in the current buffer."<br>
> -=C2=A0 (unless old-object<br>
> -=C2=A0 =C2=A0 (setq old-object object))<br>
> -=C2=A0 (let* ((objects (vtable-objects table))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(inhibit-read-only t))<br>
> -=C2=A0 =C2=A0 ;; First replace the object in the object storage.<br>
> -=C2=A0 =C2=A0 (if (eq old-object (car objects))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; It's at the head, so replace it th=
ere.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (setf (vtable-objects table)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cons object (cdr ob=
jects)))<br>
> -=C2=A0 =C2=A0 =C2=A0 ;; Otherwise splice into the list.<br>
> -=C2=A0 =C2=A0 =C2=A0 (while (and (cdr objects)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (not (=
eq (cadr objects) old-object)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq objects (cdr objects)))<br>
> -=C2=A0 =C2=A0 =C2=A0 (unless (cdr objects)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "Can't find the old objec=
t"))<br>
> -=C2=A0 =C2=A0 =C2=A0 (setcar (cdr objects) object))<br>
> -=C2=A0 =C2=A0 ;; Then update the rendered vtable in the current buffe=
r.<br>
> -=C2=A0 =C2=A0 (if-let* ((cache (vtable--current-cache))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(line-number (seq-pos=
ition (vtable--cache-lines cache)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 old-=
object<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (lam=
bda (a b)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 (equal (car a) b))))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(line (elt (vtable--c=
ache-lines cache) line-number)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar line object)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr line (vtable--compute-cach=
ed-line table object))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; ... and redisplay the line in q=
uestion.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-goto-object old-obj=
ect)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((keymap (get-text-pro=
perty (point) 'keymap))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (start=
(point)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (delete-line)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--insert-line=
table line line-number<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(vtable--cache-widt=
hs cache)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(vtable--spacer tab=
le))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties=
start (point) (list 'keymap keymap<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable table<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable-cache cache=
))))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; We may have inserted a non-nume=
rical value into a previously<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; all-numerical table, so recompu=
te.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--recompute-numerical table=
(cdr line)))<br>
> -=C2=A0 =C2=A0 =C2=A0 (error "Can't find cached object in vta=
ble"))))<br>
> +=C2=A0 (with-current-buffer (vtable-buffer table)<br>
> +=C2=A0 =C2=A0 (unless old-object<br>
> +=C2=A0 =C2=A0 =C2=A0 (setq old-object object))<br>
> +=C2=A0 =C2=A0 (let* ((objects (vtable-objects table))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(inhibit-read-only t))<br>
> +=C2=A0 =C2=A0 =C2=A0 ;; First replace the object in the object storag=
e.<br>
> +=C2=A0 =C2=A0 =C2=A0 (if (eq old-object (car objects))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; It's at the head, so replac=
e it there.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setf (vtable-objects table)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cons object =
(cdr objects)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Otherwise splice into the list.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (while (and (cdr objects)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(not (eq (cadr objects) old-object)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq objects (cdr objects)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (cdr objects)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "Can't find the ol=
d object"))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar (cdr objects) object))<br>
> +=C2=A0 =C2=A0 =C2=A0 ;; Then update the rendered vtable in the curren=
t buffer.<br>
> +=C2=A0 =C2=A0 =C2=A0 (if-let* ((cache (vtable--current-cache))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (line-number =
(seq-position (vtable--cache-lines cache)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0old-object<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0(lambda (a b)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0(equal (car a) b))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (line (elt (v=
table--cache-lines cache) line-number)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar line object)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr line (vtable--compu=
te-cached-line table object))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; ... and redisplay the li=
ne in question.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (save-excursion<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-goto-object =
old-object)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((keymap (get-t=
ext-property (point) 'keymap))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(start (point)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (delete-line)=
<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--inse=
rt-line table line line-number<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(vtable--cac=
he-widths cache)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(vtable--spa=
cer table))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-pro=
perties start (point) (list 'keymap keymap<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable tabl=
e<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable-cach=
e cache))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; We may have inserted a n=
on-numerical value into a previously<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; all-numerical table, so =
recompute.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--recompute-numerica=
l table (cdr line)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "Can't find cached object=
in vtable")))))<br>
>=C2=A0 <br>
>=C2=A0 (defun vtable-remove-object (table object)<br>
>=C2=A0 =C2=A0 "Remove OBJECT from TABLE.<br>
>=C2=A0 This will also remove the displayed line."<br>
> -=C2=A0 ;; First remove from the objects.<br>
> -=C2=A0 (setf (vtable-objects table) (delq object (vtable-objects tabl=
e)))<br>
> -=C2=A0 ;; Then adjust the cache and display.<br>
> -=C2=A0 (save-excursion<br>
> -=C2=A0 =C2=A0 (vtable-goto-table table)<br>
> -=C2=A0 =C2=A0 (let ((cache (vtable--current-cache))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (inhibit-read-only t))<br>
> -=C2=A0 =C2=A0 =C2=A0 (setcar cache (delq (assq object (vtable--cache-=
lines cache))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 (vtable--cache-lines cache)))<br>
> -=C2=A0 =C2=A0 =C2=A0 (when (vtable-goto-object object)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (delete-line)))))<br>
> +=C2=A0 (with-current-buffer (vtable-buffer table)<br>
> +=C2=A0 =C2=A0 ;; First remove from the objects.<br>
> +=C2=A0 =C2=A0 (setf (vtable-objects table) (delq object (vtable-objec=
ts table)))<br>
> +=C2=A0 =C2=A0 ;; Then adjust the cache and display.<br>
> +=C2=A0 =C2=A0 (save-excursion<br>
> +=C2=A0 =C2=A0 =C2=A0 (vtable-goto-table table)<br>
> +=C2=A0 =C2=A0 =C2=A0 (let ((cache (vtable--current-cache))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (inhibit-read-only t))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar cache (delq (assq object (vtable-=
-cache-lines cache))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--cache-lines cache)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (when (vtable-goto-object object)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (delete-line))))))<br>
>=C2=A0 <br>
>=C2=A0 ;; FIXME: The fact that the `location' argument of<br>
>=C2=A0 ;; `vtable-insert-object' can be an integer and is then inte=
rpreted as<br>
> @@ -363,91 +380,92 @@ vtable-insert-object<br>
>=C2=A0 case.<br>
>=C2=A0 <br>
>=C2=A0 This also updates the displayed table."<br>
> -=C2=A0 ;; If the vtable is empty, just add the object and regenerate =
the<br>
> -=C2=A0 ;; table.<br>
> -=C2=A0 (if (null (vtable-objects table))<br>
> -=C2=A0 =C2=A0 =C2=A0 (progn<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (setf (vtable-objects table) (list object=
))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--recompute-numerical table (vtabl=
e--compute-cached-line table object))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-goto-table table)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-revert-command))<br>
> -=C2=A0 =C2=A0 ;; First insert into the objects.<br>
> -=C2=A0 =C2=A0 (let ((pos (if location<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(if (integerp location)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0(prog1<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0(nthcdr location (vtable-objects table))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0;; Do not prepend if index is too large:<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0(setq before nil))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0(or (memq location (vtable-objects table))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0;; Prepend if `location' is not found and<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0;; `before' is non-nil:<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0(and before (vtable-objects table))))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; If `=
location' is nil and `before' is non-nil, we<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; prep=
end the new object.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if bef=
ore (vtable-objects table)))))<br>
> -=C2=A0 =C2=A0 =C2=A0 (if (or before=C2=A0 ; If `before' is non-ni=
l, `pos' should be, as well.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (and pos (integerp l=
ocation)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Add the new object before.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((old-object (car pos)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar pos object)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr pos (cons old-objec=
t (cdr pos))))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Otherwise, add the object after.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (if pos<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Splice the object into t=
he list.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr pos (cons object (c=
dr pos)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Otherwise, append the object.<b=
r>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (nconc (vtable-objects table) (lis=
t object)))))<br>
> -=C2=A0 =C2=A0 ;; Then adjust the cache and display.<br>
> -=C2=A0 =C2=A0 (save-excursion<br>
> -=C2=A0 =C2=A0 =C2=A0 (vtable-goto-table table)<br>
> -=C2=A0 =C2=A0 =C2=A0 (let* ((cache (vtable--current-cache))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(inhibit-read-only t)=
<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(keymap (get-text-pro=
perty (point) 'keymap))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis (if (vtable=
-ellipsis table)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0(propertize (truncate-string-ellipsis)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'=
face (vtable-face table))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0""))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis-width (stri=
ng-pixel-width ellipsis))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lines (vtable--cache=
-lines cache))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(elem (if location=C2=
=A0 ; This binding mirrors the binding of `pos' above.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0(if (integerp location)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0(nth location lines)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0(or (assq location lines)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(and before (car lines))))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0(if before (car lines))))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(pos (memq elem lines=
))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(line (cons object (v=
table--compute-cached-line table object))))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (or before<br>
> +=C2=A0 (with-current-buffer (vtable-buffer table)<br>
> +=C2=A0 =C2=A0 ;; If the vtable is empty, just add the object and rege=
nerate the<br>
> +=C2=A0 =C2=A0 ;; table.<br>
> +=C2=A0 =C2=A0 (if (null (vtable-objects table))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setf (vtable-objects table) (list=
object))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--recompute-numerical table=
(vtable--compute-cached-line table object))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-goto-table table)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-revert-command))<br>
> +=C2=A0 =C2=A0 =C2=A0 ;; First insert into the objects.<br>
> +=C2=A0 =C2=A0 =C2=A0 (let ((pos (if location<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0(if (integerp location)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0(prog1<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(nthcdr location (vtable-objects table))=
<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0;; Do not prepend if index is too large:<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0(setq before nil))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0(or (memq location (vtable-objects table))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0;; Prepend if `location' is not found and<b=
r>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0;; `before' is non-nil:<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0(and before (vtable-objects table))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
;; If `location' is nil and `before' is non-nil, we<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
;; prepend the new object.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(if before (vtable-objects table)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (or before=C2=A0 ; If `before' is=
non-nil, `pos' should be, as well.<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (and pos=
(integerp location)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Add the new object befor=
e:.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((old-line (car pos)))=
<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar pos line)<br=
>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr pos (cons ol=
d-line (cdr pos)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (vtable-goto=
-object (car elem))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-begin=
ning-of-table)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Add the new object befor=
e.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((old-object (car pos)=
))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar pos object)<=
br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr pos (cons ol=
d-object (cdr pos))))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Otherwise, add the object =
after.<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if pos<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Splice the o=
bject into the list.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr pos (=
cons line (cdr pos)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (vtable-g=
oto-object location)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(forward-line 1)=C2=A0 ; Insert *after*.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtabl=
e-end-of-table)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr pos (cons ob=
ject (cdr pos)))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Otherwise, append t=
he object.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar cache (nconc lines =
(list line)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-end-of-table)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((start (point)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; FIXME: We have to adjust colors=
in lines below this if we<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; have :row-colors.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--insert-line table line 0<=
br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(vtable--cache-widths cache) (vta=
ble--spacer table)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ellipsis ellipsis-width)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties start (point)=
(list 'keymap keymap<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable table<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable-cache cache)))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; We may have inserted a non-numerical v=
alue into a previously<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; all-numerical table, so recompute.<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--recompute-numerical table (cdr l=
ine))))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (nconc (vtable-objects tabl=
e) (list object)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 ;; Then adjust the cache and display.<br>
> +=C2=A0 =C2=A0 =C2=A0 (save-excursion<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-goto-table table)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (let* ((cache (vtable--current-cache))<br=
>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(inhibit-read-=
only t)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(keymap (get-t=
ext-property (point) 'keymap))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis (if =
(vtable-ellipsis table)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(propertize (truncate-string-ellipsis)<b=
r>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0'face (vtable-face table))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0""))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis-widt=
h (string-pixel-width ellipsis (current-buffer)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lines (vtable=
--cache-lines cache))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(elem (if loca=
tion=C2=A0 ; This binding mirrors the binding of `pos' above.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0(if (integerp location)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(nth location lines)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0(or (assq location lines)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(and before (car lines))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0(if before (car lines))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(pos (memq ele=
m lines))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(line (cons ob=
ject (vtable--compute-cached-line table object))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (or before<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (and p=
os (integerp location)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Add the new objec=
t before:.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((old-line (car=
pos)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar pos l=
ine)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcdr pos (=
cons old-line (cdr pos)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (vtab=
le-goto-object (car elem))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtabl=
e-beginning-of-table)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Otherwise, add the objec=
t after.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if pos<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Splice the=
object into the list.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcd=
r pos (cons line (cdr pos)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (v=
table-goto-object location)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 (forward-line 1)=C2=A0 ; Insert *after*.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(vtable-end-of-table)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Otherwise, append=
the object.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setcar cache (nconc=
lines (list line)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-end-of-table=
)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((start (point)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; FIXME: We have to adjust=
colors in lines below this if we<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; have :row-colors.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--insert-line table =
line 0<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(vtable--cache-widths cach=
e) (vtable--spacer table)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ellipsis ellipsis-width)<b=
r>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (add-text-properties start =
(point) (list 'keymap keymap<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable table<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable-cache cache)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; We may have inserted a non-nume=
rical value into a previously<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; all-numerical table, so recompu=
te.<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable--recompute-numerical table=
(cdr line)))))))<br>
<br>
Is it possible to avoid these massive diffs in vtable-update-object,<br>
vtable-remove-object, and vtable-insert-object?=C2=A0 These will make the<b=
r>
history worse, and also makes it harder to review.=C2=A0 Maybe we only need=
<br>
to wrap with-current-buffer around a smaller part of these functions?<br>
<br>
FYI, in general, you should change try to make changes in a way which<br>
minimizes the size of the diff.<br>
<br>
>=C2=A0 (defun vtable-column (table index)<br>
>=C2=A0 =C2=A0 "Return the name of the INDEXth column in TABLE.&quo=
t;<br>
> @@ -520,14 +538,14 @@ vtable--cache-widths<br>
>=C2=A0 (defun vtable--cache-lines (cache)<br>
>=C2=A0 =C2=A0 (car cache))<br>
>=C2=A0 <br>
> -(defun vtable-insert (table)<br>
> +(defun vtable--insert (table)<br>
>=C2=A0 =C2=A0 (let* ((spacer (vtable--spacer table))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(start (point))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis (if (vtable-ellipsis=
table)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0(propertize (truncate-string-ellipsis)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'face (vt=
able-face table))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0""))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis-width (string-pixel-width=
ellipsis))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ellipsis-width (string-pixel-width=
ellipsis (current-buffer)))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; We maintain a cache per scr=
een/window width, so that we render<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; correctly if Emacs is open =
on two different screens (or the<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; user resizes the frame).<br=
>
> @@ -565,9 +583,24 @@ vtable-insert<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'vtable-cache cache))<b=
r>
>=C2=A0 =C2=A0 =C2=A0 (goto-char start)))<br>
>=C2=A0 <br>
> +(defun vtable-insert (table)<br>
> +=C2=A0 "Insert TABLE into the current buffer.<br>
> +The current buffer will be recorded as TABLE's buffer.=C2=A0 If t=
his is done<br>
> +more than once, or if the table is attempted to be inserted more than=
<br>
> +once into the same buffer, signal an error."<br>
> +=C2=A0 (if-let* ((table-buffer (vtable-buffer table)))<br>
> +=C2=A0 =C2=A0 =C2=A0 (if (eq table-buffer (current-buffer))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "A vtable cannot be in=
serted more than once into a buffer")<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (error "A vtable cannot be inserted =
into more than one buffer")))<br>
> +=C2=A0 (vtable-set-buffer (current-buffer) table)<br>
> +=C2=A0 (let ((inhibit-read-only t)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (inhibit-modification-hooks t))<br>
> +=C2=A0 =C2=A0 (vtable--insert table)))<br>
> +<br>
>=C2=A0 (defun vtable--insert-line (table line line-number widths spacer=
<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &optional ellip=
sis ellipsis-width)<br>
>=C2=A0 =C2=A0 (let ((start (point))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (buffer (vtable-buffer table))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (columns (vtable-columns table))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (column-colors<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(and (vtable-column-colors tab=
le)<br>
> @@ -607,16 +640,18 @@ vtable--insert-line<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 (concat<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0(vtable--limit-string<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 pre-computed (- (elt widths index)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (or =
ellipsis-width 0)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (or =
ellipsis-width 0))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 buffer)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0ellipsis)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 pre-computed))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;;=
Recompute widths.<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(t=
<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (&=
gt; (string-pixel-width value) (elt widths index))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (&=
gt; (string-pixel-width value buffer) (elt widths index))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 (concat<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0(vtable--limit-string<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 value (- (elt widths index)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(or ellipsis-width 0)))<br=
>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(or ellipsis-width 0))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 buffer)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0ellipsis)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 value))))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(start (p=
oint))<br>
> @@ -630,14 +665,15 @@ vtable--insert-line<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (list 'space<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :width (list<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 (+ (- (elt widths index)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 (string-pixel-width displayed))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 (string-pixel-width<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0displayed buffer))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0(if last 0 spacer)))))))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; Align to the =
right.<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert (propert=
ize " " 'display<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(list 'space<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0:width (list (- (elt widths index)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(string-pixel-wi=
dth<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 displayed)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 displayed buffer)))))<=
br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0displayed)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(unless last<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert (=
propertize " " 'display<br>
> @@ -718,6 +754,7 @@ vtable--indicator<br>
>=C2=A0 (defun vtable--insert-header-line (table widths spacer)<br>
>=C2=A0 =C2=A0 ;; Insert the header directly into the buffer.<br>
>=C2=A0 =C2=A0 (let ((start (point))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (buffer (vtable-buffer table))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (divider (vtable-divider table))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cmap (define-keymap<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "&l=
t;header-line> <drag-mouse-1>" #'vtable--drag-resize-colu=
mn<br>
> @@ -737,14 +774,15 @@ vtable--insert-header-line<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0'keymap cmap))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (start (point))=
<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (indicator (vta=
ble--indicator table index))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (indicator-width (st=
ring-pixel-width indicator))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (indicator-width (st=
ring-pixel-width indicator buffer))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (last (=3D inde=
x (1- (length (vtable-columns table)))))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 displayed)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq displayed<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if (> (str=
ing-pixel-width name)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if (> (str=
ing-pixel-width name buffer)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 (- (elt widths index) indicator-width))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0(vtable--limit-string<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
name (- (elt widths index) indicator-width))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
name (- (elt widths index) indicator-width)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
buffer)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0na=
me))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let* ((indicator-lead-width<b=
r>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;;=
We want the indicator to not be quite flush right.<br>
> @@ -753,7 +791,7 @@ vtable--insert-header-line<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 indicator-lead-width))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (fill-wi=
dth<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(+=
(- (elt widths index)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0(string-pixel-width displayed)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0(string-pixel-width displayed buffer)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0indicator-width<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0indicator-lead-width)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 (if last 0 spacer))))<br>
> @@ -771,7 +809,8 @@ vtable--insert-header-line<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; This is the f=
inal column, and we have a sorting<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; indicator, an=
d the table is too wide for the window.<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let* ((pre-indi=
cator (string-pixel-width<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (buffer-substring =
(point-min) (point))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (buffer-substring =
(point-min) (point))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 buffer))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 (pre-fill<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0(- (window-width nil t)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 pre-indicator<br>
> @@ -850,14 +889,16 @@ vtable--set-header-line<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(buffer-substring (poin=
t-min) (1- (point-max))))))<br>
>=C2=A0 =C2=A0 (vtable-header-mode 1))<br>
>=C2=A0 <br>
> -(defun vtable--limit-string (string pixels)<br>
> +<br>
> +(defun vtable--limit-string (string pixels buffer)<br>
>=C2=A0 =C2=A0 (while (and (length> string 0)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (> (string-pixel-=
width string) pixels))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (> (string-pixel-=
width string buffer) pixels))<br>
>=C2=A0 =C2=A0 =C2=A0 (setq string (substring string 0 (1- (length strin=
g)))))<br>
>=C2=A0 =C2=A0 string)<br>
>=C2=A0 <br>
>=C2=A0 (defun vtable--char-width (table)<br>
> -=C2=A0 (string-pixel-width (propertize "x" 'face (vtabl=
e-face table))))<br>
> +=C2=A0 (string-pixel-width (propertize "x" 'face (vtabl=
e-face table))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 (vtable-buffer table)))<br>
>=C2=A0 <br>
>=C2=A0 (defun vtable--compute-width (table spec)<br>
>=C2=A0 =C2=A0 (cond<br>
> @@ -967,20 +1008,24 @@ vtable--make-keymap<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-keymap table))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 map)))<br>
>=C2=A0 <br>
> -(defun vtable-revert ()<br>
> -=C2=A0 "Regenerate the table under point."<br>
> -=C2=A0 (let ((table (vtable-current-table))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (object (vtable-current-object))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (column (vtable-current-column))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 (inhibit-read-only t))<br>
> -=C2=A0 =C2=A0 (unless table<br>
> -=C2=A0 =C2=A0 =C2=A0 (user-error "No table under point"))<b=
r>
> -=C2=A0 =C2=A0 (delete-region (vtable-beginning-of-table) (vtable-end-=
of-table))<br>
> -=C2=A0 =C2=A0 (vtable-insert table)<br>
> -=C2=A0 =C2=A0 (when object<br>
> -=C2=A0 =C2=A0 =C2=A0 (vtable-goto-object object))<br>
> -=C2=A0 =C2=A0 (when column<br>
> -=C2=A0 =C2=A0 =C2=A0 (vtable-goto-column column))))<br>
> +(defun vtable-revert (&optional table)<br>
> +=C2=A0 "Regenerate the table under point.<br>
> +If TABLE is nil, use the table under point."<br>
<br>
This repeats itself.=C2=A0 It should say "Regenerate TABLE, defaulting=
to the table under point."<br>
<br>
> +=C2=A0 (setq table (or table (vtable-current-table)))<br>
> +=C2=A0 (unless table<br>
> +=C2=A0 =C2=A0 (user-error "No table found"))<br>
<br>
I don't think this error message should change.<br>
<br>
> +=C2=A0 (with-current-buffer (vtable-buffer table)<br>
> +=C2=A0 =C2=A0 (let ((object (vtable-current-object))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (column (vtable-current-column))<b=
r>
<br>
So we still implicitly depend on the value of point in the buffer?=C2=A0 Ho=
w<br>
does this interact with window-point?=C2=A0 This seems like a potential<br>
foot-gun.<br>
<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (inhibit-read-only t))<br>
> +=C2=A0 =C2=A0 =C2=A0 (unless table<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (user-error "No table under point&qu=
ot;))<br>
> +=C2=A0 =C2=A0 =C2=A0 (delete-region (vtable-beginning-of-table) (vtab=
le-end-of-table))<br>
> +=C2=A0 =C2=A0 =C2=A0 (vtable--insert table)<br>
> +=C2=A0 =C2=A0 =C2=A0 (when object<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-goto-object object))<br>
> +=C2=A0 =C2=A0 =C2=A0 (when column<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-goto-column column)))))<br>
><br>
>=C2=A0 ;;; Commands.<br>
>=C2=A0 <br>
> @@ -1013,7 +1058,7 @@ vtable--alter-column-width<br>
>=C2=A0 =C2=A0 =C2=A0 ;; Store the width so it'll be respected on a =
revert.<br>
>=C2=A0 =C2=A0 =C2=A0 (setf (vtable-column-width (elt (vtable-columns ta=
ble) column))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (format "%dpx" (are=
f widths column)))<br>
> -=C2=A0 =C2=A0 (vtable-revert)))<br>
> +=C2=A0 =C2=A0 (vtable-revert table)))<br>
>=C2=A0 <br>
>=C2=A0 (defun vtable-widen-current-column (&optional n)<br>
>=C2=A0 =C2=A0 "Widen the current column by N characters.<br>
> @@ -1038,14 +1083,16 @@ vtable-next-column<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0(min (1- (length (vtable--cache-widths (vtab=
le--current-cache))))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (1+ (vtable-current-column)))=
)))<br>
>=C2=A0 <br>
> -(defun vtable-revert-command ()<br>
> +(defun vtable-revert-command (&optional table)<br>
>=C2=A0 =C2=A0 "Re-query data and regenerate the table under point.=
"<br>
>=C2=A0 =C2=A0 (interactive)<br>
> -=C2=A0 (let ((table (vtable-current-table)))<br>
> -=C2=A0 =C2=A0 (when (vtable-objects-function table)<br>
> -=C2=A0 =C2=A0 =C2=A0 (setf (vtable-objects table) (funcall (vtable-ob=
jects-function table))))<br>
> -=C2=A0 =C2=A0 (vtable--clear-cache table))<br>
> -=C2=A0 (vtable-revert))<br>
> +=C2=A0 (setq table (or table (vtable-current-table)))<br>
> +=C2=A0 (unless table<br>
> +=C2=A0 =C2=A0 (user-error "No table found"))<br>
> +=C2=A0 (when (vtable-objects-function table)<br>
> +=C2=A0 =C2=A0 (setf (vtable-objects table) (funcall (vtable-objects-f=
unction table))))<br>
> +=C2=A0 (vtable--clear-cache table)<br>
> +=C2=A0 (vtable-revert table))<br>
>=C2=A0 <br>
>=C2=A0 (defun vtable-sort-by-current-column ()<br>
>=C2=A0 =C2=A0 "Sort the table under point by the column under poin=
t."<br>
> @@ -1067,8 +1114,8 @@ vtable-sort-by-current-column<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (eq (cdr last) =
'ascend)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 '=
descend<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 'ascend)=
<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 'ascend))))))<br>
> -=C2=A0 (vtable-revert))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 'ascend)))))<br>
> +=C2=A0 =C2=A0 (vtable-revert table)))<br>
>=C2=A0 <br>
>=C2=A0 (defun vtable-header-line-sort (e)<br>
>=C2=A0 =C2=A0 "Sort a vtable from the header line."<br>
> diff --git a/test/lisp/emacs-lisp/vtable-tests.el b/test/lisp/emacs-li=
sp/vtable-tests.el<br>
> index 74fb8cc8139..83f826ea353 100644<br>
> --- a/test/lisp/emacs-lisp/vtable-tests.el<br>
> +++ b/test/lisp/emacs-lisp/vtable-tests.el<br>
> @@ -27,16 +27,19 @@<br>
>=C2=A0 (require 'ert)<br>
>=C2=A0 (require 'ert-x)<br>
>=C2=A0 <br>
> -(ert-deftest test-vstable-compute-columns ()<br>
> +(defun vtable-tests--make-no-header-2-object-table ()<br>
> +=C2=A0 (make-vtable :columns '("a" "b" "=
c")<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:objects '=
(("foo" 1 2)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 ("bar" 3 :zot))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:insert nil))<=
br>
> +<br>
> +(ert-deftest test-vtable-compute-columns ()<br>
>=C2=A0 =C2=A0 (should<br>
>=C2=A0 =C2=A0 =C2=A0(equal (mapcar<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lambda (column)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(vtable-column-a=
lign column))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(vtable--compute-column=
s<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (make-vtable :columns '=
("a" "b" "c")<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0:objects '(("foo" 1 2)<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ("bar" 3=
:zot))<br>
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0:insert nil)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-tests--make-no-head=
er-2-object-table)))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 '(left right left))))<br>
>=C2=A0 <br>
>=C2=A0 (ert-deftest test-vtable-insert-object ()<br>
> @@ -69,4 +72,69 @@ test-vtable-insert-object<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (mapcar #'c=
adr (vtable-objects table))))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (number-sequence 0 11))))<br>
>=C2=A0 <br>
> +(ert-deftest test-vtable-unique-buffer ()<br>
> +=C2=A0 (let ((table (vtable-tests--make-no-header-2-object-table)))<b=
r>
> +=C2=A0 =C2=A0 (with-temp-buffer<br>
> +=C2=A0 =C2=A0 =C2=A0 (vtable-insert table)<br>
> +=C2=A0 =C2=A0 =C2=A0 ;; This will run but fail on Emacs pre 31 vtable=
.<br>
> +=C2=A0 =C2=A0 =C2=A0 (should-error (vtable-insert table))<br>
> +=C2=A0 =C2=A0 =C2=A0 ;; This will run only on Emacs 31+ vtable.<br>
> +=C2=A0 =C2=A0 =C2=A0 (when (> emacs-major-version 30)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (should-error (vtable-set-buffer table (c=
urrent-buffer)))))))<br>
> +<br>
> +(ert-deftest test-vtable-non-current-buffer-insert-object ()<br>
> +=C2=A0 (let ((table (vtable-tests--make-no-header-2-object-table))<br=
>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (obj '("baz" 4 5)))<br>
> +=C2=A0 =C2=A0 (with-temp-buffer<br>
> +=C2=A0 =C2=A0 =C2=A0 (vtable-insert table)<br>
> +=C2=A0 =C2=A0 =C2=A0 (should (=3D (count-lines (point-min) (point-max=
)) 2))<br>
> +=C2=A0 =C2=A0 =C2=A0 (with-temp-buffer<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-insert-object table obj))<br>
> +=C2=A0 =C2=A0 =C2=A0 (should (=3D (count-lines (point-min) (point-max=
)) 3)))))<br>
> +<br>
> +(ert-deftest test-vtable-non-current-buffer-remove-object ()<br>
> +=C2=A0 (let ((table (vtable-tests--make-no-header-2-object-table))<br=
>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (obj '("baz" 4 5)))<br>
> +=C2=A0 =C2=A0 (with-temp-buffer<br>
> +=C2=A0 =C2=A0 =C2=A0 (vtable-insert table)<br>
> +=C2=A0 =C2=A0 =C2=A0 (vtable-insert-object table obj)<br>
> +=C2=A0 =C2=A0 =C2=A0 (should (=3D (count-lines (point-min) (point-max=
)) 3))<br>
> +=C2=A0 =C2=A0 =C2=A0 (with-temp-buffer<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-remove-object table obj))<br>
> +=C2=A0 =C2=A0 =C2=A0 (should (=3D (count-lines (point-min) (point-max=
)) 2)))))<br>
> +<br>
> +(ert-deftest test-vtable-non-current-buffer-update-object ()<br>
> +=C2=A0 (let ((table (vtable-tests--make-no-header-2-object-table))<br=
>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (obj '("baz" 4 5))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (obj-2 '("qux" 6 7)))<br>
> +=C2=A0 =C2=A0 (with-temp-buffer<br>
> +=C2=A0 =C2=A0 =C2=A0 (vtable-insert table)<br>
> +=C2=A0 =C2=A0 =C2=A0 (vtable-insert-object table obj)<br>
> +=C2=A0 =C2=A0 =C2=A0 (should (=3D (count-lines (point-min) (point-max=
)) 3))<br>
> +=C2=A0 =C2=A0 =C2=A0 (let ((line-2 (progn<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 (goto-char (point-min))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 (forward-line 2)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 (buffer-substring (point) (point-max)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (with-temp-buffer<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (vtable-update-object table obj-2 =
obj))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((line-2-new (progn<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (goto-char (point-min))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (forward-line 2)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (buffer-substring (point) (point-max)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (should (=3D (count-lines (point-m=
in) (point-max)) 3))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (should (not (string=3D line-2 lin=
e-2-new))))))))<br>
> +<br>
> +(ert-deftest test-vtable--limit-string-with-face-remapped-buffer ()<b=
r>
> +=C2=A0 (with-temp-buffer<br>
> +=C2=A0 =C2=A0 (let ((text (propertize "XXXXX"<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 'face 'variable-pitch)))<br>
> +=C2=A0 =C2=A0 =C2=A0 (face-remap-add-relative 'default :height 1.=
5)<br>
> +=C2=A0 =C2=A0 =C2=A0 (if (> emacs-major-version 30)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (should (eq<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
2<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(length (vtable--limit-string text 50 (current-buffer)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (should (eq<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A02<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(length=
(vtable--limit-string text 50))))))))<br>
> +<br>
>=C2=A0 ;;; vtable-tests.el ends here<br></blockquote><div><br></div><di=
v class=3D"gmail_default" style=3D"font-family:monospace">Thanks.=C2=A0 Rev=
ised patch, attached.=C2=A0 With regard to point vs. window-point, the code=
seems no worse off than before?=C2=A0 There is a suite of additional fixes=
coming that address keeping point stable during operations and we can see =
if there are any ill effects when we get to testing those changes.</div><di=
v class=3D"gmail_default" style=3D"font-family:monospace"><br></div><div cl=
ass=3D"gmail_default" style=3D"font-family:monospace">-St=C3=A9phane=C2=A0<=
/div></div></div>
--00000000000039c8df0645a0693c--
--00000000000039c8e10645a0693e
Content-Type: application/octet-stream;
name="0001-Add-vtable-buffer-slot.patch"
Content-Disposition: attachment;
filename="0001-Add-vtable-buffer-slot.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mj0km0v50>
X-Attachment-Id: f_mj0km0v50
RnJvbSBjZjIyNjBjMDU1YmVkNDNiZTZlNzIwODQyMmY5NzEzYjJjMDgzZDg2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo
aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTAgRGVjIDIwMjUgMDk6MjA6MDIgLTA1MDAK
U3ViamVjdDogW1BBVENIXSBBZGQgdnRhYmxlIGJ1ZmZlciBzbG90CgpUaGlzIHNvbHZlcyBmb3Ig
YmFja2dyb3VuZCB2dGFibGUgbXV0YXRpb25zLCBpLmUuLCB1cGRhdGVzCmluaXRpYXRlZCBmcm9t
IGJ1ZmZlcnMgb3RoZXIgdGhhbiB0aGUgdnRhYmxlIGJ1ZmZlciwgYW5kIGZvcgpidWZmZXItYWRq
dXN0ZWQgc3RyaW5nLXBpeGVsLXdpZHRoIGNvbXB1dGF0aW9ucy4KCiogbGlzcC9lbWFjcy1saXNw
L3Z0YWJsZS5lbCAodnRhYmxlKTogTmV3ICctYnVmZmVyJyBzbG90LgoodnRhYmxlLWJ1ZmZlcik6
Cih2dGFibGUtc2V0LWJ1ZmZlcik6IE5ldyBmdW5jdGlvbi4KKHZ0YWJsZS11cGRhdGUtb2JqZWN0
KToKKHZ0YWJsZS1yZW1vdmUtb2JqZWN0KToKKHZ0YWJsZS1pbnNlcnQtb2JqZWN0KTogV3JhcCBv
cGVyYXRpb24gd2l0aCB0aGUgdnRhYmxlIGJ1ZmZlci4KKHZ0YWJsZS0taW5zZXJ0KTogU3BsaXQg
ZnJvbSBvbGQgJ3Z0YWJsZS1pbnNlcnQnLgoodnRhYmxlLWluc2VydCk6IEluc2VydCB0YWJsZSBh
bmQgcmVjb3JkIHRoZSBidWZmZXIuCih2dGFibGUtLWluc2VydC1saW5lKToKKHZ0YWJsZS0taW5z
ZXJ0LWhlYWRlci1saW5lKTogVXNlICd2dGFibGUtYnVmZmVyJyBmb3IgcGl4ZWwtd2lkdGggY29t
cHV0YXRpb24uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6Cih2dGFibGUtLWNoYXItd2lkdGgpOiBQ
YXNzIGJ1ZmZlciB0byAnc3RyaW5nLXBpeGVsLXdpZHRoJy4KKHZ0YWJsZS1yZXZlcnQpOiBOZXcg
b3B0aW9uYWwgdGFibGUgYXJndW1lbnQuCih2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCk6Cih2
dGFibGUtcmV2ZXJ0LWNvbW1hbmQpOgoodnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4pOiBD
YWxsICd2dGFibGUtcmV2ZXJ0JyB3aXRoIHRoZSB0YWJsZS4KCiogdGVzdC9saXNwL2VtYWNzLWxp
c3AvdnRhYmxlLXRlc3RzLmVsCih2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0
LXRhYmxlKTogTmV3IGhlbHBlcgpmdW5jdGlvbi4KKHRlc3QtdnN0YWJsZS1jb21wdXRlLWNvbHVt
bnMpOiBDb3JyZWN0IHR5cG8gaW4gdGVzdCBuYW1lLiAgVXNlCm5ldyBoZWxwZXIgZnVuY3Rpb24u
Cih0ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyKQoodGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVm
ZmVyLWluc2VydC1vYmplY3QpCih0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3Zl
LW9iamVjdCkKKHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUtb2JqZWN0KQoo
dGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRoLWZhY2UtcmVtYXBwZWQtYnVmZmVyKTogTmV3
IHRlc3QuCi0tLQogbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCAgICAgICAgICAgIHwgMjkzICsr
KysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRl
c3RzLmVsIHwgIDc4ICsrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMjQyIGluc2VydGlvbnMoKyks
IDEyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVs
IGIvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbAppbmRleCBiY2RkMjgwZmI5Mi4uOTRmMzE5OWYx
MmIgMTAwNjQ0Ci0tLSBhL2xpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwKKysrIGIvbGlzcC9lbWFj
cy1saXNwL3Z0YWJsZS5lbApAQCAtNjgsNiArNjgsNyBAQCB2dGFibGUKICAgIChjb2x1bW4tY29s
b3JzIDppbml0YXJnIDpjb2x1bW4tY29sb3JzIDphY2Nlc3NvciB2dGFibGUtY29sdW1uLWNvbG9y
cykKICAgIChyb3ctY29sb3JzIDppbml0YXJnIDpyb3ctY29sb3JzIDphY2Nlc3NvciB2dGFibGUt
cm93LWNvbG9ycykKICAgICgtY2FjaGVkLWNvbG9ycyA6aW5pdGZvcm0gbmlsKQorICAgKC1idWZm
ZXIgOmluaXRmb3JtIG5pbCkKICAgICgtY2FjaGUgOmluaXRmb3JtIChtYWtlLWhhc2gtdGFibGUg
OnRlc3QgIydlcXVhbCkpCiAgICAoLWNhY2hlZC1rZXltYXAgOmluaXRmb3JtIG5pbCkKICAgICgt
aGFzLWNvbHVtbi1zcGVjIDppbml0Zm9ybSBuaWwpKQpAQCAtMjIxLDYgKzIyMiwyMCBAQCB2dGFi
bGUtLWZhY2UtY29sb3IKIAogOzs7IEludGVyZmFjZSB1dGlsaXR5IGZ1bmN0aW9ucy4KIAorKGRl
ZnVuIHZ0YWJsZS1idWZmZXIgKCZvcHRpb25hbCB0YWJsZSkKKyAgIlJldHVybiB0aGUgYnVmZmVy
IGFzc29jaWF0ZWQgd2l0aCBUQUJMRS4KK0lmIFRBQkxFIGlzIG5pbCwgdXNlIHRoZSB0YWJsZSB1
bmRlciBwb2ludC4gIFJldHVybiBuaWwgaWYgdGhlIHRhYmxlIGhhcworbm90IGJlZW4gaW5zZXJ0
ZWQgaW50byBhIGJ1ZmZlci4iCisgIChzbG90LXZhbHVlIChvciB0YWJsZSAodnRhYmxlLWN1cnJl
bnQtdGFibGUpKQorICAgICAgICAgICAgICAnLWJ1ZmZlcikpCisKKyhkZWZ1biB2dGFibGUtc2V0
LWJ1ZmZlciAoYnVmZmVyICZvcHRpb25hbCB0YWJsZSkKKyAgIkFzc29jaWF0ZSBCVUZGRVIgd2l0
aCBUQUJMRS4KK0lmIFRBQkxFIGlzIG5pbCwgdXNlIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCisg
IChzZXRmIChzbG90LXZhbHVlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQorICAg
ICAgICAgICAgICAgICAgICAnLWJ1ZmZlcikKKyAgICAgICAgYnVmZmVyKSkKKwogKGRlZnVuIHZ0
YWJsZS1jdXJyZW50LXRhYmxlICgpCiAgICJSZXR1cm4gdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIK
ICAgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ3Z0YWJsZSkpCkBAIC0zMDEsMzIgKzMxNiwz
MyBAQCB2dGFibGUtdXBkYXRlLW9iamVjdAogICAgICAgKHVubGVzcyAoY2RyIG9iamVjdHMpCiAg
ICAgICAgIChlcnJvciAiQ2FuJ3QgZmluZCB0aGUgb2xkIG9iamVjdCIpKQogICAgICAgKHNldGNh
ciAoY2RyIG9iamVjdHMpIG9iamVjdCkpCi0gICAgOzsgVGhlbiB1cGRhdGUgdGhlIHJlbmRlcmVk
IHZ0YWJsZSBpbiB0aGUgY3VycmVudCBidWZmZXIuCi0gICAgKGlmLWxldCogKChjYWNoZSAodnRh
YmxlLS1jdXJyZW50LWNhY2hlKSkKLSAgICAgICAgICAgICAobGluZS1udW1iZXIgKHNlcS1wb3Np
dGlvbiAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbGQtb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGxhbWJkYSAoYSBiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGVxdWFsIChjYXIgYSkgYikpKSkKLSAgICAgICAgICAgICAobGluZSAoZWx0
ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSBsaW5lLW51bWJlcikpKQotICAgICAgICAocHJv
Z24KLSAgICAgICAgICAoc2V0Y2FyIGxpbmUgb2JqZWN0KQotICAgICAgICAgIChzZXRjZHIgbGlu
ZSAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpCi0gICAgICAgICAg
OzsgLi4uIGFuZCByZWRpc3BsYXkgdGhlIGxpbmUgaW4gcXVlc3Rpb24uCi0gICAgICAgICAgKHNh
dmUtZXhjdXJzaW9uCi0gICAgICAgICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9sZC1vYmplY3Qp
Ci0gICAgICAgICAgICAobGV0ICgoa2V5bWFwIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdr
ZXltYXApKQotICAgICAgICAgICAgICAgICAgKHN0YXJ0IChwb2ludCkpKQotICAgICAgICAgICAg
ICAoZGVsZXRlLWxpbmUpCi0gICAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxl
IGxpbmUgbGluZS1udW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0
YWJsZS0tY2FjaGUtd2lkdGhzIGNhY2hlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodnRhYmxlLS1zcGFjZXIgdGFibGUpKQotICAgICAgICAgICAgICAoYWRkLXRleHQtcHJv
cGVydGllcyBzdGFydCAocG9pbnQpIChsaXN0ICdrZXltYXAga2V5bWFwCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2
dGFibGUtY2FjaGUgY2FjaGUpKSkpCi0gICAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQg
YSBub24tbnVtZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5Ci0gICAgICAgICAgOzsgYWxs
LW51bWVyaWNhbCB0YWJsZSwgc28gcmVjb21wdXRlLgotICAgICAgICAgICh2dGFibGUtLXJlY29t
cHV0ZS1udW1lcmljYWwgdGFibGUgKGNkciBsaW5lKSkpCi0gICAgICAoZXJyb3IgIkNhbid0IGZp
bmQgY2FjaGVkIG9iamVjdCBpbiB2dGFibGUiKSkpKQorICAgIDs7IFRoZW4gdXBkYXRlIHRoZSBy
ZW5kZXJlZCB2dGFibGUgaW4gaXRzIGJ1ZmZlci4KKyAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAo
dnRhYmxlLWJ1ZmZlciB0YWJsZSkKKyAgICAgIChpZi1sZXQqICgoY2FjaGUgKHZ0YWJsZS0tY3Vy
cmVudC1jYWNoZSkpCisgICAgICAgICAgICAgICAgKGxpbmUtbnVtYmVyIChzZXEtcG9zaXRpb24g
KHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2xkLW9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChsYW1iZGEgKGEgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChlcXVhbCAoY2FyIGEpIGIpKSkpCisgICAgICAgICAgICAgICAgKGxp
bmUgKGVsdCAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkgbGluZS1udW1iZXIpKSkKKyAgICAg
ICAgICAocHJvZ24KKyAgICAgICAgICAgIChzZXRjYXIgbGluZSBvYmplY3QpCisgICAgICAgICAg
ICAoc2V0Y2RyIGxpbmUgKHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3Qp
KQorICAgICAgICAgICAgOzsgLi4uIGFuZCByZWRpc3BsYXkgdGhlIGxpbmUgaW4gcXVlc3Rpb24u
CisgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAgICAgKHZ0YWJsZS1nb3Rv
LW9iamVjdCBvbGQtb2JqZWN0KQorICAgICAgICAgICAgICAobGV0ICgoa2V5bWFwIChnZXQtdGV4
dC1wcm9wZXJ0eSAocG9pbnQpICdrZXltYXApKQorICAgICAgICAgICAgICAgICAgICAoc3RhcnQg
KHBvaW50KSkpCisgICAgICAgICAgICAgICAgKGRlbGV0ZS1saW5lKQorICAgICAgICAgICAgICAg
ICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxlIGxpbmUgbGluZS1udW1iZXIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tc3BhY2VyIHRhYmxl
KSkKKyAgICAgICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpIChs
aXN0ICdrZXltYXAga2V5bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hlIGNhY2hlKSkp
KQorICAgICAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQgYSBub24tbnVtZXJpY2FsIHZh
bHVlIGludG8gYSBwcmV2aW91c2x5CisgICAgICAgICAgICA7OyBhbGwtbnVtZXJpY2FsIHRhYmxl
LCBzbyByZWNvbXB1dGUuCisgICAgICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2Fs
IHRhYmxlIChjZHIgbGluZSkpKQorICAgICAgICAoZXJyb3IgIkNhbid0IGZpbmQgY2FjaGVkIG9i
amVjdCBpbiB2dGFibGUiKSkpKSkKIAogKGRlZnVuIHZ0YWJsZS1yZW1vdmUtb2JqZWN0ICh0YWJs
ZSBvYmplY3QpCiAgICJSZW1vdmUgT0JKRUNUIGZyb20gVEFCTEUuCkBAIC0zMzQsMTQgKzM1MCwx
NSBAQCB2dGFibGUtcmVtb3ZlLW9iamVjdAogICA7OyBGaXJzdCByZW1vdmUgZnJvbSB0aGUgb2Jq
ZWN0cy4KICAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAoZGVscSBvYmplY3QgKHZ0YWJs
ZS1vYmplY3RzIHRhYmxlKSkpCiAgIDs7IFRoZW4gYWRqdXN0IHRoZSBjYWNoZSBhbmQgZGlzcGxh
eS4KLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQotICAg
IChsZXQgKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlKSkKLSAgICAgICAgICAoaW5oaWJp
dC1yZWFkLW9ubHkgdCkpCi0gICAgICAoc2V0Y2FyIGNhY2hlIChkZWxxIChhc3NxIG9iamVjdCAo
dnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2
dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkpCi0gICAgICAod2hlbiAodnRhYmxlLWdvdG8tb2Jq
ZWN0IG9iamVjdCkKLSAgICAgICAgKGRlbGV0ZS1saW5lKSkpKSkKKyAgKHdpdGgtY3VycmVudC1i
dWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAo
dnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCisgICAgICAobGV0ICgoY2FjaGUgKHZ0YWJsZS0tY3Vy
cmVudC1jYWNoZSkpCisgICAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCisgICAgICAg
IChzZXRjYXIgY2FjaGUgKGRlbHEgKGFzc3Egb2JqZWN0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNh
Y2hlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS1saW5lcyBj
YWNoZSkpKQorICAgICAgICAod2hlbiAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkKKyAgICAg
ICAgICAoZGVsZXRlLWxpbmUpKSkpKSkKIAogOzsgRklYTUU6IFRoZSBmYWN0IHRoYXQgdGhlIGBs
b2NhdGlvbicgYXJndW1lbnQgb2YKIDs7IGB2dGFibGUtaW5zZXJ0LW9iamVjdCcgY2FuIGJlIGFu
IGludGVnZXIgYW5kIGlzIHRoZW4gaW50ZXJwcmV0ZWQgYXMKQEAgLTM2OSw4ICszODYsOSBAQCB2
dGFibGUtaW5zZXJ0LW9iamVjdAogICAgICAgKHByb2duCiAgICAgICAgIChzZXRmICh2dGFibGUt
b2JqZWN0cyB0YWJsZSkgKGxpc3Qgb2JqZWN0KSkKICAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRl
LW51bWVyaWNhbCB0YWJsZSAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVj
dCkpCi0gICAgICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKLSAgICAgICAgKHZ0YWJsZS1y
ZXZlcnQtY29tbWFuZCkpCisgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVm
ZmVyIHRhYmxlKQorICAgICAgICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKKyAgICAgICAg
ICAodnRhYmxlLXJldmVydC1jb21tYW5kKSkpCiAgICAgOzsgRmlyc3QgaW5zZXJ0IGludG8gdGhl
IG9iamVjdHMuCiAgICAgKGxldCAoKHBvcyAoaWYgbG9jYXRpb24KICAgICAgICAgICAgICAgICAg
ICAoaWYgKGludGVnZXJwIGxvY2F0aW9uKQpAQCAtMzk4LDU2ICs0MTYsNTcgQEAgdnRhYmxlLWlu
c2VydC1vYmplY3QKICAgICAgICAgICA7OyBPdGhlcndpc2UsIGFwcGVuZCB0aGUgb2JqZWN0Lgog
ICAgICAgICAgIChuY29uYyAodnRhYmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpKSkp
CiAgICAgOzsgVGhlbiBhZGp1c3QgdGhlIGNhY2hlIGFuZCBkaXNwbGF5LgotICAgIChzYXZlLWV4
Y3Vyc2lvbgotICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQotICAgICAgKGxldCogKChj
YWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlKSkKLSAgICAgICAgICAgICAoaW5oaWJpdC1yZWFk
LW9ubHkgdCkKLSAgICAgICAgICAgICAoa2V5bWFwIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQp
ICdrZXltYXApKQotICAgICAgICAgICAgIChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNpcyB0
YWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9wZXJ0aXplICh0cnVuY2F0ZS1z
dHJpbmctZWxsaXBzaXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
ZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICIiKSkK
LSAgICAgICAgICAgICAoZWxsaXBzaXMtd2lkdGggKHN0cmluZy1waXhlbC13aWR0aCBlbGxpcHNp
cykpCi0gICAgICAgICAgICAgKGxpbmVzICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKLSAg
ICAgICAgICAgICAoZWxlbSAoaWYgbG9jYXRpb24gIDsgVGhpcyBiaW5kaW5nIG1pcnJvcnMgdGhl
IGJpbmRpbmcgb2YgYHBvcycgYWJvdmUuCi0gICAgICAgICAgICAgICAgICAgICAgIChpZiAoaW50
ZWdlcnAgbG9jYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobnRoIGxvY2F0aW9u
IGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgIChvciAoYXNzcSBsb2NhdGlvbiBsaW5l
cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBiZWZvcmUgKGNhciBsaW5lcykp
KSkKLSAgICAgICAgICAgICAgICAgICAgIChpZiBiZWZvcmUgKGNhciBsaW5lcykpKSkKLSAgICAg
ICAgICAgICAocG9zIChtZW1xIGVsZW0gbGluZXMpKQotICAgICAgICAgICAgIChsaW5lIChjb25z
IG9iamVjdCAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpKSkKLSAg
ICAgICAgKGlmIChvciBiZWZvcmUKLSAgICAgICAgICAgICAgICAoYW5kIHBvcyAoaW50ZWdlcnAg
bG9jYXRpb24pKSkKLSAgICAgICAgICAgIDs7IEFkZCB0aGUgbmV3IG9iamVjdCBiZWZvcmU6Lgot
ICAgICAgICAgICAgKGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCi0gICAgICAgICAgICAgIChz
ZXRjYXIgcG9zIGxpbmUpCi0gICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIG9sZC1saW5l
IChjZHIgcG9zKSkpCi0gICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3RvLW9iamVjdCAo
Y2FyIGVsZW0pKQotICAgICAgICAgICAgICAgICh2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlKSkp
Ci0gICAgICAgICAgOzsgT3RoZXJ3aXNlLCBhZGQgdGhlIG9iamVjdCBhZnRlci4KLSAgICAgICAg
ICAoaWYgcG9zCi0gICAgICAgICAgICAgIDs7IFNwbGljZSB0aGUgb2JqZWN0IGludG8gdGhlIGxp
c3QuCi0gICAgICAgICAgICAgIChwcm9nbgotICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChj
b25zIGxpbmUgKGNkciBwb3MpKSkKLSAgICAgICAgICAgICAgICAoaWYgKHZ0YWJsZS1nb3RvLW9i
amVjdCBsb2NhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKSAgOyBJ
bnNlcnQgKmFmdGVyKi4KLSAgICAgICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkp
Ci0gICAgICAgICAgICA7OyBPdGhlcndpc2UsIGFwcGVuZCB0aGUgb2JqZWN0LgotICAgICAgICAg
ICAgKHNldGNhciBjYWNoZSAobmNvbmMgbGluZXMgKGxpc3QgbGluZSkpKQotICAgICAgICAgICAg
KHZ0YWJsZS1lbmQtb2YtdGFibGUpKSkKLSAgICAgICAgKGxldCAoKHN0YXJ0IChwb2ludCkpKQot
ICAgICAgICAgIDs7IEZJWE1FOiBXZSBoYXZlIHRvIGFkanVzdCBjb2xvcnMgaW4gbGluZXMgYmVs
b3cgdGhpcyBpZiB3ZQotICAgICAgICAgIDs7IGhhdmUgOnJvdy1jb2xvcnMuCi0gICAgICAgICAg
KHZ0YWJsZS0taW5zZXJ0LWxpbmUgdGFibGUgbGluZSAwCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtd2lkdGhzIGNhY2hlKSAodnRhYmxlLS1zcGFjZXIgdGFi
bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMgZWxsaXBzaXMtd2lk
dGgpCi0gICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBvaW50KSAobGlzdCAn
a2V5bWFwIGtleW1hcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Z0YWJsZSB0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Z0YWJsZS1jYWNoZSBjYWNoZSkpKQotICAgICAgICA7OyBXZSBt
YXkgaGF2ZSBpbnNlcnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkK
LSAgICAgICAgOzsgYWxsLW51bWVyaWNhbCB0YWJsZSwgc28gcmVjb21wdXRlLgotICAgICAgICAo
dnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkpKQorICAgICh3
aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICAgKHNhdmUtZXhj
dXJzaW9uCisgICAgICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKKyAgICAgICAgKGxldCog
KChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlKSkKKyAgICAgICAgICAgICAgIChpbmhpYml0
LXJlYWQtb25seSB0KQorICAgICAgICAgICAgICAgKGtleW1hcCAoZ2V0LXRleHQtcHJvcGVydHkg
KHBvaW50KSAna2V5bWFwKSkKKyAgICAgICAgICAgICAgIChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1l
bGxpcHNpcyB0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUg
KHRydW5jYXRlLXN0cmluZy1lbGxpcHNpcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICIiKSkKKyAgICAgICAgICAgICAgIChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBp
eGVsLXdpZHRoIGVsbGlwc2lzIChjdXJyZW50LWJ1ZmZlcikpKQorICAgICAgICAgICAgICAgKGxp
bmVzICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKKyAgICAgICAgICAgICAgIChlbGVtIChp
ZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRpbmcgbWlycm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBh
Ym92ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGludGVnZXJwIGxvY2F0aW9uKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnRoIGxvY2F0aW9uIGxpbmVzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxvY2F0aW9uIGxpbmVzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChhbmQgYmVmb3JlIChjYXIgbGluZXMpKSkpCisgICAgICAg
ICAgICAgICAgICAgICAgIChpZiBiZWZvcmUgKGNhciBsaW5lcykpKSkKKyAgICAgICAgICAgICAg
IChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCisgICAgICAgICAgICAgICAobGluZSAoY29ucyBvYmpl
Y3QgKHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKSkpCisgICAgICAg
ICAgKGlmIChvciBiZWZvcmUKKyAgICAgICAgICAgICAgICAgIChhbmQgcG9zIChpbnRlZ2VycCBs
b2NhdGlvbikpKQorICAgICAgICAgICAgICA7OyBBZGQgdGhlIG5ldyBvYmplY3QgYmVmb3JlOi4K
KyAgICAgICAgICAgICAgKGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCisgICAgICAgICAgICAg
ICAgKHNldGNhciBwb3MgbGluZSkKKyAgICAgICAgICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBv
bGQtbGluZSAoY2RyIHBvcykpKQorICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3Rv
LW9iamVjdCAoY2FyIGVsZW0pKQorICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1iZWdpbm5pbmct
b2YtdGFibGUpKSkKKyAgICAgICAgICAgIDs7IE90aGVyd2lzZSwgYWRkIHRoZSBvYmplY3QgYWZ0
ZXIuCisgICAgICAgICAgICAoaWYgcG9zCisgICAgICAgICAgICAgICAgOzsgU3BsaWNlIHRoZSBv
YmplY3QgaW50byB0aGUgbGlzdC4KKyAgICAgICAgICAgICAgICAocHJvZ24KKyAgICAgICAgICAg
ICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3MpKSkKKyAgICAgICAgICAgICAg
ICAgIChpZiAodnRhYmxlLWdvdG8tb2JqZWN0IGxvY2F0aW9uKQorICAgICAgICAgICAgICAgICAg
ICAgIChmb3J3YXJkLWxpbmUgMSkgIDsgSW5zZXJ0ICphZnRlciouCisgICAgICAgICAgICAgICAg
ICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisgICAgICAgICAgICAgIDs7IE90aGVyd2lzZSwg
YXBwZW5kIHRoZSBvYmplY3QuCisgICAgICAgICAgICAgIChzZXRjYXIgY2FjaGUgKG5jb25jIGxp
bmVzIChsaXN0IGxpbmUpKSkKKyAgICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKSkK
KyAgICAgICAgICAobGV0ICgoc3RhcnQgKHBvaW50KSkpCisgICAgICAgICAgICA7OyBGSVhNRTog
V2UgaGF2ZSB0byBhZGp1c3QgY29sb3JzIGluIGxpbmVzIGJlbG93IHRoaXMgaWYgd2UKKyAgICAg
ICAgICAgIDs7IGhhdmUgOnJvdy1jb2xvcnMuCisgICAgICAgICAgICAodnRhYmxlLS1pbnNlcnQt
bGluZSB0YWJsZSBsaW5lIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFi
bGUtLWNhY2hlLXdpZHRocyBjYWNoZSkgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMgZWxsaXBzaXMtd2lkdGgpCisgICAgICAg
ICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpIChsaXN0ICdrZXltYXAga2V5
bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd2dGFibGUgdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Z0YWJsZS1jYWNoZSBjYWNoZSkpKQorICAgICAgICAgIDs7IFdlIG1heSBo
YXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2YWx1ZSBpbnRvIGEgcHJldmlvdXNseQorICAg
ICAgICAgIDs7IGFsbC1udW1lcmljYWwgdGFibGUsIHNvIHJlY29tcHV0ZS4KKyAgICAgICAgICAo
dnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkpKSkKIAogKGRl
ZnVuIHZ0YWJsZS1jb2x1bW4gKHRhYmxlIGluZGV4KQogICAiUmV0dXJuIHRoZSBuYW1lIG9mIHRo
ZSBJTkRFWHRoIGNvbHVtbiBpbiBUQUJMRS4iCkBAIC01MjAsMTQgKzUzOSwxNCBAQCB2dGFibGUt
LWNhY2hlLXdpZHRocwogKGRlZnVuIHZ0YWJsZS0tY2FjaGUtbGluZXMgKGNhY2hlKQogICAoY2Fy
IGNhY2hlKSkKIAotKGRlZnVuIHZ0YWJsZS1pbnNlcnQgKHRhYmxlKQorKGRlZnVuIHZ0YWJsZS0t
aW5zZXJ0ICh0YWJsZSkKICAgKGxldCogKChzcGFjZXIgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKSkK
ICAgICAgICAgIChzdGFydCAocG9pbnQpKQogICAgICAgICAgKGVsbGlwc2lzIChpZiAodnRhYmxl
LWVsbGlwc2lzIHRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAodHJ1
bmNhdGUtc3RyaW5nLWVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQogICAgICAgICAgICAgICAgICAgICAgIiIpKQot
ICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxsaXBzaXMpKQor
ICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxsaXBzaXMgKGN1
cnJlbnQtYnVmZmVyKSkpCiAgICAgICAgICA7OyBXZSBtYWludGFpbiBhIGNhY2hlIHBlciBzY3Jl
ZW4vd2luZG93IHdpZHRoLCBzbyB0aGF0IHdlIHJlbmRlcgogICAgICAgICAgOzsgY29ycmVjdGx5
IGlmIEVtYWNzIGlzIG9wZW4gb24gdHdvIGRpZmZlcmVudCBzY3JlZW5zIChvciB0aGUKICAgICAg
ICAgIDs7IHVzZXIgcmVzaXplcyB0aGUgZnJhbWUpLgpAQCAtNTY1LDkgKzU4NCwyNCBAQCB2dGFi
bGUtaW5zZXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZS1jYWNoZSBj
YWNoZSkpCiAgICAgKGdvdG8tY2hhciBzdGFydCkpKQogCisoZGVmdW4gdnRhYmxlLWluc2VydCAo
dGFibGUpCisgICJJbnNlcnQgVEFCTEUgaW50byB0aGUgY3VycmVudCBidWZmZXIuCitUaGUgY3Vy
cmVudCBidWZmZXIgd2lsbCBiZSByZWNvcmRlZCBhcyBUQUJMRSdzIGJ1ZmZlci4gIElmIHRoaXMg
aXMgZG9uZQorbW9yZSB0aGFuIG9uY2UsIG9yIGlmIHRoZSB0YWJsZSBpcyBhdHRlbXB0ZWQgdG8g
YmUgaW5zZXJ0ZWQgbW9yZSB0aGFuCitvbmNlIGludG8gdGhlIHNhbWUgYnVmZmVyLCBzaWduYWwg
YW4gZXJyb3IuIgorICAoaWYtbGV0KiAoKHRhYmxlLWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJs
ZSkpKQorICAgICAgKGlmIChlcSB0YWJsZS1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAg
ICAgICAoZXJyb3IgIkEgdnRhYmxlIGNhbm5vdCBiZSBpbnNlcnRlZCBtb3JlIHRoYW4gb25jZSBp
bnRvIGEgYnVmZmVyIikKKyAgICAgICAgKGVycm9yICJBIHZ0YWJsZSBjYW5ub3QgYmUgaW5zZXJ0
ZWQgaW50byBtb3JlIHRoYW4gb25lIGJ1ZmZlciIpKSkKKyAgKHZ0YWJsZS1zZXQtYnVmZmVyIChj
dXJyZW50LWJ1ZmZlcikgdGFibGUpCisgIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KQorICAg
ICAgICAoaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpCisgICAgKHZ0YWJsZS0taW5zZXJ0
IHRhYmxlKSkpCisKIChkZWZ1biB2dGFibGUtLWluc2VydC1saW5lICh0YWJsZSBsaW5lIGxpbmUt
bnVtYmVyIHdpZHRocyBzcGFjZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
b3B0aW9uYWwgZWxsaXBzaXMgZWxsaXBzaXMtd2lkdGgpCiAgIChsZXQgKChzdGFydCAocG9pbnQp
KQorICAgICAgICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKICAgICAgICAgKGNvbHVt
bnMgKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkKICAgICAgICAgKGNvbHVtbi1jb2xvcnMKICAgICAg
ICAgIChhbmQgKHZ0YWJsZS1jb2x1bW4tY29sb3JzIHRhYmxlKQpAQCAtNjA3LDE2ICs2NDEsMTgg
QEAgdnRhYmxlLS1pbnNlcnQtbGluZQogICAgICAgICAgICAgICAgICAgICAgIChjb25jYXQKICAg
ICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCiAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmUtY29tcHV0ZWQgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRoIDApKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBzaXMtd2lkdGgg
MCkpCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAg
ICAgIGVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQpKQogICAgICAg
ICAgICAgICAgICA7OyBSZWNvbXB1dGUgd2lkdGhzLgogICAgICAgICAgICAgICAgICAodAotICAg
ICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggdmFsdWUpIChlbHQgd2lk
dGhzIGluZGV4KSkKKyAgICAgICAgICAgICAgICAgIChpZiAoPiAoc3RyaW5nLXBpeGVsLXdpZHRo
IHZhbHVlIGJ1ZmZlcikgKGVsdCB3aWR0aHMgaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICAg
IChjb25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCiAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAoLSAoZWx0IHdpZHRocyBpbmRleCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAwKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBzaXMtd2lkdGggMCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlw
c2lzKQogICAgICAgICAgICAgICAgICAgICB2YWx1ZSkpKSkKICAgICAgICAgICAgICAgIChzdGFy
dCAocG9pbnQpKQpAQCAtNjMwLDE0ICs2NjYsMTUgQEAgdnRhYmxlLS1pbnNlcnQtbGluZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOndpZHRoIChsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCsgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aCBkaXNwbGF5ZWQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGl4
ZWwtd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlzcGxheWVkIGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGlmIGxhc3QgMCBzcGFjZXIpKSkpKSkpCiAgICAgICAgICAgICAgOzsgQWxpZ24gdG8g
dGhlIHJpZ2h0LgogICAgICAgICAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgIiAiICdkaXNwbGF5
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp3aWR0aCAobGlzdCAoLSAoZWx0IHdpZHRo
cyBpbmRleCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZCkpKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZCBidWZm
ZXIpKSkpKQogICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkKQogICAgICAgICAgICAgICh1
bmxlc3MgbGFzdAogICAgICAgICAgICAgICAgKGluc2VydCAocHJvcGVydGl6ZSAiICIgJ2Rpc3Bs
YXkKQEAgLTcxOCw2ICs3NTUsNyBAQCB2dGFibGUtLWluZGljYXRvcgogKGRlZnVuIHZ0YWJsZS0t
aW5zZXJ0LWhlYWRlci1saW5lICh0YWJsZSB3aWR0aHMgc3BhY2VyKQogICA7OyBJbnNlcnQgdGhl
IGhlYWRlciBkaXJlY3RseSBpbnRvIHRoZSBidWZmZXIuCiAgIChsZXQgKChzdGFydCAocG9pbnQp
KQorICAgICAgICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKICAgICAgICAgKGRpdmlk
ZXIgKHZ0YWJsZS1kaXZpZGVyIHRhYmxlKSkKICAgICAgICAgKGNtYXAgKGRlZmluZS1rZXltYXAK
ICAgICAgICAgICAgICAgICAiPGhlYWRlci1saW5lPiA8ZHJhZy1tb3VzZS0xPiIgIyd2dGFibGUt
LWRyYWctcmVzaXplLWNvbHVtbgpAQCAtNzM3LDE0ICs3NzUsMTUgQEAgdnRhYmxlLS1pbnNlcnQt
aGVhZGVyLWxpbmUKICAgICAgICAgICAgICAgICAgICAgICdrZXltYXAgY21hcCkpCiAgICAgICAg
ICAgICAgIChzdGFydCAocG9pbnQpKQogICAgICAgICAgICAgICAoaW5kaWNhdG9yICh2dGFibGUt
LWluZGljYXRvciB0YWJsZSBpbmRleCkpCi0gICAgICAgICAgICAgIChpbmRpY2F0b3Itd2lkdGgg
KHN0cmluZy1waXhlbC13aWR0aCBpbmRpY2F0b3IpKQorICAgICAgICAgICAgICAoaW5kaWNhdG9y
LXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggaW5kaWNhdG9yIGJ1ZmZlcikpCiAgICAgICAgICAg
ICAgIChsYXN0ICg9IGluZGV4ICgxLSAobGVuZ3RoICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKSkp
CiAgICAgICAgICAgICAgIGRpc3BsYXllZCkKICAgICAgICAgIChzZXRxIGRpc3BsYXllZAotICAg
ICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggbmFtZSkKKyAgICAgICAgICAg
ICAgIChpZiAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIG5hbWUgYnVmZmVyKQogICAgICAgICAgICAg
ICAgICAgICAgICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpKQogICAgICAg
ICAgICAgICAgICAgICh2dGFibGUtLWxpbWl0LXN0cmluZwotICAgICAgICAgICAgICAgICAgICBu
YW1lICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpKQorICAgICAgICAgICAg
ICAgICAgICBuYW1lICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpCisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgbmFtZSkpCiAgICAgICAg
ICAobGV0KiAoKGluZGljYXRvci1sZWFkLXdpZHRoCiAgICAgICAgICAgICAgICAgIDs7IFdlIHdh
bnQgdGhlIGluZGljYXRvciB0byBub3QgYmUgcXVpdGUgZmx1c2ggcmlnaHQuCkBAIC03NTMsNyAr
NzkyLDcgQEAgdnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3ItbGVhZC13aWR0aCkpCiAgICAgICAgICAgICAg
ICAgKGZpbGwtd2lkdGgKICAgICAgICAgICAgICAgICAgKCsgKC0gKGVsdCB3aWR0aHMgaW5kZXgp
Ci0gICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGggZGlzcGxheWVkKQor
ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoIGRpc3BsYXllZCBidWZm
ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvci13aWR0aAogICAgICAgICAgICAg
ICAgICAgICAgICBpbmRpY2F0b3ItbGVhZC13aWR0aCkKICAgICAgICAgICAgICAgICAgICAgKGlm
IGxhc3QgMCBzcGFjZXIpKSkpCkBAIC03NzEsNyArODEwLDggQEAgdnRhYmxlLS1pbnNlcnQtaGVh
ZGVyLWxpbmUKICAgICAgICAgICAgICA7OyBUaGlzIGlzIHRoZSBmaW5hbCBjb2x1bW4sIGFuZCB3
ZSBoYXZlIGEgc29ydGluZwogICAgICAgICAgICAgIDs7IGluZGljYXRvciwgYW5kIHRoZSB0YWJs
ZSBpcyB0b28gd2lkZSBmb3IgdGhlIHdpbmRvdy4KICAgICAgICAgICAgICAobGV0KiAoKHByZS1p
bmRpY2F0b3IgKHN0cmluZy1waXhlbC13aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50KSkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1p
bikgKHBvaW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikp
CiAgICAgICAgICAgICAgICAgICAgIChwcmUtZmlsbAogICAgICAgICAgICAgICAgICAgICAgKC0g
KHdpbmRvdy13aWR0aCBuaWwgdCkKICAgICAgICAgICAgICAgICAgICAgICAgIHByZS1pbmRpY2F0
b3IKQEAgLTg1MCwxNCArODkwLDE2IEBAIHZ0YWJsZS0tc2V0LWhlYWRlci1saW5lCiAgICAgICAg
ICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludC1taW4pICgxLSAocG9pbnQtbWF4KSkpKSkpCiAg
ICh2dGFibGUtaGVhZGVyLW1vZGUgMSkpCiAKLShkZWZ1biB2dGFibGUtLWxpbWl0LXN0cmluZyAo
c3RyaW5nIHBpeGVscykKKworKGRlZnVuIHZ0YWJsZS0tbGltaXQtc3RyaW5nIChzdHJpbmcgcGl4
ZWxzIGJ1ZmZlcikKICAgKHdoaWxlIChhbmQgKGxlbmd0aD4gc3RyaW5nIDApCi0gICAgICAgICAg
ICAgICg+IChzdHJpbmctcGl4ZWwtd2lkdGggc3RyaW5nKSBwaXhlbHMpKQorICAgICAgICAgICAg
ICAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cmluZyBidWZmZXIpIHBpeGVscykpCiAgICAgKHNl
dHEgc3RyaW5nIChzdWJzdHJpbmcgc3RyaW5nIDAgKDEtIChsZW5ndGggc3RyaW5nKSkpKSkKICAg
c3RyaW5nKQogCiAoZGVmdW4gdnRhYmxlLS1jaGFyLXdpZHRoICh0YWJsZSkKLSAgKHN0cmluZy1w
aXhlbC13aWR0aCAocHJvcGVydGl6ZSAieCIgJ2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkpKQor
ICAoc3RyaW5nLXBpeGVsLXdpZHRoIChwcm9wZXJ0aXplICJ4IiAnZmFjZSAodnRhYmxlLWZhY2Ug
dGFibGUpKQorICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtYnVmZmVyIHRhYmxlKSkpCiAK
IChkZWZ1biB2dGFibGUtLWNvbXB1dGUtd2lkdGggKHRhYmxlIHNwZWMpCiAgIChjb25kCkBAIC05
NjcsMjAgKzEwMDksMjEgQEAgdnRhYmxlLS1tYWtlLWtleW1hcAogICAgICAgICAgICh2dGFibGUt
a2V5bWFwIHRhYmxlKSkKICAgICAgIG1hcCkpKQogCi0oZGVmdW4gdnRhYmxlLXJldmVydCAoKQot
ICAiUmVnZW5lcmF0ZSB0aGUgdGFibGUgdW5kZXIgcG9pbnQuIgotICAobGV0ICgodGFibGUgKHZ0
YWJsZS1jdXJyZW50LXRhYmxlKSkKLSAgICAgICAgKG9iamVjdCAodnRhYmxlLWN1cnJlbnQtb2Jq
ZWN0KSkKLSAgICAgICAgKGNvbHVtbiAodnRhYmxlLWN1cnJlbnQtY29sdW1uKSkKLSAgICAgICAg
KGluaGliaXQtcmVhZC1vbmx5IHQpKQotICAgICh1bmxlc3MgdGFibGUKLSAgICAgICh1c2VyLWVy
cm9yICJObyB0YWJsZSB1bmRlciBwb2ludCIpKQotICAgIChkZWxldGUtcmVnaW9uICh2dGFibGUt
YmVnaW5uaW5nLW9mLXRhYmxlKSAodnRhYmxlLWVuZC1vZi10YWJsZSkpCi0gICAgKHZ0YWJsZS1p
bnNlcnQgdGFibGUpCi0gICAgKHdoZW4gb2JqZWN0Ci0gICAgICAodnRhYmxlLWdvdG8tb2JqZWN0
IG9iamVjdCkpCi0gICAgKHdoZW4gY29sdW1uCi0gICAgICAodnRhYmxlLWdvdG8tY29sdW1uIGNv
bHVtbikpKSkKKyhkZWZ1biB2dGFibGUtcmV2ZXJ0ICgmb3B0aW9uYWwgdGFibGUpCisgICJSZWdl
bmVyYXRlIFRBQkxFLCBkZWZhdWx0aW5nIHRvIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCisgIChz
ZXRxIHRhYmxlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKKyAgKHVubGVzcyB0
YWJsZQorICAgICh1c2VyLWVycm9yICJObyB0YWJsZSB1bmRlciBwb2ludCIpKQorICAod2l0aC1j
dXJyZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKKyAgICAobGV0ICgob2JqZWN0ICh2
dGFibGUtY3VycmVudC1vYmplY3QpKQorICAgICAgICAgIChjb2x1bW4gKHZ0YWJsZS1jdXJyZW50
LWNvbHVtbikpCisgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpKQorICAgICAgKGRlbGV0
ZS1yZWdpb24gKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpICh2dGFibGUtZW5kLW9mLXRhYmxl
KSkKKyAgICAgICh2dGFibGUtLWluc2VydCB0YWJsZSkKKyAgICAgICh3aGVuIG9iamVjdAorICAg
ICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkpCisgICAgICAod2hlbiBjb2x1bW4KKyAg
ICAgICAgKHZ0YWJsZS1nb3RvLWNvbHVtbiBjb2x1bW4pKSkpKQogCiA7OzsgQ29tbWFuZHMuCiAK
QEAgLTEwMTMsNyArMTA1Niw3IEBAIHZ0YWJsZS0tYWx0ZXItY29sdW1uLXdpZHRoCiAgICAgOzsg
U3RvcmUgdGhlIHdpZHRoIHNvIGl0J2xsIGJlIHJlc3BlY3RlZCBvbiBhIHJldmVydC4KICAgICAo
c2V0ZiAodnRhYmxlLWNvbHVtbi13aWR0aCAoZWx0ICh2dGFibGUtY29sdW1ucyB0YWJsZSkgY29s
dW1uKSkKICAgICAgICAgICAoZm9ybWF0ICIlZHB4IiAoYXJlZiB3aWR0aHMgY29sdW1uKSkpCi0g
ICAgKHZ0YWJsZS1yZXZlcnQpKSkKKyAgICAodnRhYmxlLXJldmVydCB0YWJsZSkpKQogCiAoZGVm
dW4gdnRhYmxlLXdpZGVuLWN1cnJlbnQtY29sdW1uICgmb3B0aW9uYWwgbikKICAgIldpZGVuIHRo
ZSBjdXJyZW50IGNvbHVtbiBieSBOIGNoYXJhY3RlcnMuCkBAIC0xMDM4LDE0ICsxMDgxLDE2IEBA
IHZ0YWJsZS1uZXh0LWNvbHVtbgogICAgICAobWluICgxLSAobGVuZ3RoICh2dGFibGUtLWNhY2hl
LXdpZHRocyAodnRhYmxlLS1jdXJyZW50LWNhY2hlKSkpKQogICAgICAgICAgICgxKyAodnRhYmxl
LWN1cnJlbnQtY29sdW1uKSkpKSkpCiAKLShkZWZ1biB2dGFibGUtcmV2ZXJ0LWNvbW1hbmQgKCkK
KyhkZWZ1biB2dGFibGUtcmV2ZXJ0LWNvbW1hbmQgKCZvcHRpb25hbCB0YWJsZSkKICAgIlJlLXF1
ZXJ5IGRhdGEgYW5kIHJlZ2VuZXJhdGUgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKICAgKGludGVy
YWN0aXZlKQotICAobGV0ICgodGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCi0gICAgKHdo
ZW4gKHZ0YWJsZS1vYmplY3RzLWZ1bmN0aW9uIHRhYmxlKQotICAgICAgKHNldGYgKHZ0YWJsZS1v
YmplY3RzIHRhYmxlKSAoZnVuY2FsbCAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpKSkp
Ci0gICAgKHZ0YWJsZS0tY2xlYXItY2FjaGUgdGFibGUpKQotICAodnRhYmxlLXJldmVydCkpCisg
IChzZXRxIHRhYmxlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKKyAgKHVubGVz
cyB0YWJsZQorICAgICh1c2VyLWVycm9yICJObyB0YWJsZSBmb3VuZCIpKQorICAod2hlbiAodnRh
YmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpCisgICAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRh
YmxlKSAoZnVuY2FsbCAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpKSkpCisgICh2dGFi
bGUtLWNsZWFyLWNhY2hlIHRhYmxlKQorICAodnRhYmxlLXJldmVydCB0YWJsZSkpCiAKIChkZWZ1
biB2dGFibGUtc29ydC1ieS1jdXJyZW50LWNvbHVtbiAoKQogICAiU29ydCB0aGUgdGFibGUgdW5k
ZXIgcG9pbnQgYnkgdGhlIGNvbHVtbiB1bmRlciBwb2ludC4iCkBAIC0xMDY3LDggKzExMTIsOCBA
QCB2dGFibGUtc29ydC1ieS1jdXJyZW50LWNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChpZiAoZXEgKGNkciBsYXN0KSAnYXNjZW5kKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnZGVzY2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2FzY2VuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzY2Vu
ZCkpKSkpKQotICAodnRhYmxlLXJldmVydCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdhc2NlbmQpKSkpKQorICAgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkpCiAKIChkZWZ1biB2
dGFibGUtaGVhZGVyLWxpbmUtc29ydCAoZSkKICAgIlNvcnQgYSB2dGFibGUgZnJvbSB0aGUgaGVh
ZGVyIGxpbmUuIgpkaWZmIC0tZ2l0IGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3Rz
LmVsIGIvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsCmluZGV4IDc0ZmI4Y2M4
MTM5Li44M2Y4MjZlYTM1MyAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxl
LXRlc3RzLmVsCisrKyBiL3Rlc3QvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbApAQCAt
MjcsMTYgKzI3LDE5IEBACiAocmVxdWlyZSAnZXJ0KQogKHJlcXVpcmUgJ2VydC14KQogCi0oZXJ0
LWRlZnRlc3QgdGVzdC12c3RhYmxlLWNvbXB1dGUtY29sdW1ucyAoKQorKGRlZnVuIHZ0YWJsZS10
ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1vYmplY3QtdGFibGUgKCkKKyAgKG1ha2UtdnRhYmxlIDpj
b2x1bW5zICcoImEiICJiIiAiYyIpCisgICAgICAgICAgICAgICA6b2JqZWN0cyAnKCgiZm9vIiAx
IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICgiYmFyIiAzIDp6b3QpKQorICAgICAgICAg
ICAgICAgOmluc2VydCBuaWwpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtY29tcHV0ZS1j
b2x1bW5zICgpCiAgIChzaG91bGQKICAgIChlcXVhbCAobWFwY2FyCiAgICAgICAgICAgIChsYW1i
ZGEgKGNvbHVtbikKICAgICAgICAgICAgICAodnRhYmxlLWNvbHVtbi1hbGlnbiBjb2x1bW4pKQog
ICAgICAgICAgICAodnRhYmxlLS1jb21wdXRlLWNvbHVtbnMKLSAgICAgICAgICAgIChtYWtlLXZ0
YWJsZSA6Y29sdW1ucyAnKCJhIiAiYiIgImMiKQotICAgICAgICAgICAgICAgICAgICAgICAgIDpv
YmplY3RzICcoKCJmb28iIDEgMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgiYmFyIiAzIDp6b3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgIDppbnNlcnQgbmlsKSkp
CisgICAgICAgICAgICAodnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10YWJs
ZSkpKQogICAgICAgICAgICcobGVmdCByaWdodCBsZWZ0KSkpKQogCiAoZXJ0LWRlZnRlc3QgdGVz
dC12dGFibGUtaW5zZXJ0LW9iamVjdCAoKQpAQCAtNjksNCArNzIsNjkgQEAgdGVzdC12dGFibGUt
aW5zZXJ0LW9iamVjdAogICAgICAgICAgICAgICAobWFwY2FyICMnY2FkciAodnRhYmxlLW9iamVj
dHMgdGFibGUpKSkpCiAgICAgICAgICAgKG51bWJlci1zZXF1ZW5jZSAwIDExKSkpKQogCisoZXJ0
LWRlZnRlc3QgdGVzdC12dGFibGUtdW5pcXVlLWJ1ZmZlciAoKQorICAobGV0ICgodGFibGUgKHZ0
YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1vYmplY3QtdGFibGUpKSkKKyAgICAod2l0aC10
ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJsZS1pbnNlcnQgdGFibGUpCisgICAgICA7OyBUaGlzIHdp
bGwgcnVuIGJ1dCBmYWlsIG9uIEVtYWNzIHByZSAzMSB2dGFibGUuCisgICAgICAoc2hvdWxkLWVy
cm9yICh2dGFibGUtaW5zZXJ0IHRhYmxlKSkKKyAgICAgIDs7IFRoaXMgd2lsbCBydW4gb25seSBv
biBFbWFjcyAzMSsgdnRhYmxlLgorICAgICAgKHdoZW4gKD4gZW1hY3MtbWFqb3ItdmVyc2lvbiAz
MCkKKyAgICAgICAgKHNob3VsZC1lcnJvciAodnRhYmxlLXNldC1idWZmZXIgdGFibGUgKGN1cnJl
bnQtYnVmZmVyKSkpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtbm9uLWN1cnJlbnQt
YnVmZmVyLWluc2VydC1vYmplY3QgKCkKKyAgKGxldCAoKHRhYmxlICh2dGFibGUtdGVzdHMtLW1h
a2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxlKSkKKyAgICAgICAgKG9iaiAnKCJiYXoiIDQgNSkp
KQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKKyAg
ICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAyKSkK
KyAgICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAgICh2dGFibGUtaW5zZXJ0LW9iamVjdCB0
YWJsZSBvYmopKQorICAgICAgKHNob3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBv
aW50LW1heCkpIDMpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtbm9uLWN1cnJlbnQt
YnVmZmVyLXJlbW92ZS1vYmplY3QgKCkKKyAgKGxldCAoKHRhYmxlICh2dGFibGUtdGVzdHMtLW1h
a2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxlKSkKKyAgICAgICAgKG9iaiAnKCJiYXoiIDQgNSkp
KQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKKyAg
ICAgICh2dGFibGUtaW5zZXJ0LW9iamVjdCB0YWJsZSBvYmopCisgICAgICAoc2hvdWxkICg9IChj
b3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMykpCisgICAgICAod2l0aC10ZW1w
LWJ1ZmZlcgorICAgICAgICAodnRhYmxlLXJlbW92ZS1vYmplY3QgdGFibGUgb2JqKSkKKyAgICAg
IChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAyKSkpKSkK
KworKGVydC1kZWZ0ZXN0IHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUtb2Jq
ZWN0ICgpCisgIChsZXQgKCh0YWJsZSAodnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0yLW9i
amVjdC10YWJsZSkpCisgICAgICAgIChvYmogJygiYmF6IiA0IDUpKQorICAgICAgICAob2JqLTIg
JygicXV4IiA2IDcpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJsZS1pbnNl
cnQgdGFibGUpCisgICAgICAodnRhYmxlLWluc2VydC1vYmplY3QgdGFibGUgb2JqKQorICAgICAg
KHNob3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDMpKQorICAg
ICAgKGxldCAoKGxpbmUtMiAocHJvZ24KKyAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFy
IChwb2ludC1taW4pKQorICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMikKKyAg
ICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQpIChwb2ludC1tYXgp
KSkpKQorICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAgICh2dGFibGUtdXBkYXRl
LW9iamVjdCB0YWJsZSBvYmotMiBvYmopKQorICAgICAgICAobGV0ICgobGluZS0yLW5ldyAocHJv
Z24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQpIChwb2ludC1tYXgpKSkp
KQorICAgICAgICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1t
YXgpKSAzKSkKKyAgICAgICAgICAoc2hvdWxkIChub3QgKHN0cmluZz0gbGluZS0yIGxpbmUtMi1u
ZXcpKSkpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRo
LWZhY2UtcmVtYXBwZWQtYnVmZmVyICgpCisgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgKGxldCAo
KHRleHQgKHByb3BlcnRpemUgIlhYWFhYIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdm
YWNlICd2YXJpYWJsZS1waXRjaCkpKQorICAgICAgKGZhY2UtcmVtYXAtYWRkLXJlbGF0aXZlICdk
ZWZhdWx0IDpoZWlnaHQgMS41KQorICAgICAgKGlmICg+IGVtYWNzLW1ham9yLXZlcnNpb24gMzAp
CisgICAgICAgICAgKHNob3VsZCAoZXEKKyAgICAgICAgICAgICAgICAgICAyCisgICAgICAgICAg
ICAgICAgICAgKGxlbmd0aCAodnRhYmxlLS1saW1pdC1zdHJpbmcgdGV4dCA1MCAoY3VycmVudC1i
dWZmZXIpKSkpKQorICAgICAgICAoc2hvdWxkIChlcQorICAgICAgICAgICAgICAgICAyCisgICAg
ICAgICAgICAgICAgIChsZW5ndGggKHZ0YWJsZS0tbGltaXQtc3RyaW5nIHRleHQgNTApKSkpKSkp
KQorCiA7OzsgdnRhYmxlLXRlc3RzLmVsIGVuZHMgaGVyZQotLSAKMi40Ny4xCgo=
--00000000000039c8e10645a0693e--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.
Received: (at 79982) by debbugs.gnu.org; 10 Dec 2025 18:55:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 10 13:55:07 2025
Received: from localhost ([127.0.0.1]:36036 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vTPL7-0008RC-C9
for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 13:55:07 -0500
Received: from mxout5.mail.janestreet.com ([64.215.233.18]:46563)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>)
id 1vTPL3-0008QT-PC
for 79982 <at> debbugs.gnu.org; Wed, 10 Dec 2025 13:55:03 -0500
From: Spencer Baugh <sbaugh@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Subject: Re: bug#79982: [PATCH] Add vtable buffer slot, [PATCH] Add vtable
buffer slot
In-Reply-To: <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN>
(=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Wed, 10 Dec 2025
12:50:38 -0500")
References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN>
<iero6o6s75r.fsf@HIDDEN>
<CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN>
Date: Wed, 10 Dec 2025 13:54:56 -0500
Message-ID: <ierikeerwu7.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com;
s=waixah; t=1765392896;
bh=gWA9wbOYuNGMklp9CHszzaEMgjwZPwy2loweAJcFivc=;
h=From:To:Cc:Subject:In-Reply-To:References:Date;
b=VWwoD9N3EUz6txe+Dye/HE7Tk9TkOpU4AZ5Aj5mReInHAMpqUiW/NnFMsUIH//LvO
js7f/fhsl2hEdjtQWxSwiCHVKFVGjnWyF0VbIrlpkkwVAQ5GirqRo4I8KuDLI7DScO
HlaXrmFB845d7E1op6Yd1BENkMazq96j67zkg/8fRTLmjDGjIfabdimzPltruX5Yir
ylFYoM2ZHM2xtABcvjDiNJh1eQREqEPU4Wj0t6GXQ3DFBg0pLk+rvp3pDeOgl+7sNS
qdAQbz/aUXMthoZkUDUC2xNCrhgBQA7/hOd3hI0vf27nDqGk9OjmJbGRWH2tSha+8P
PdUByd7TYO7MQ==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 79982
Cc: Kristoffer Balintona <krisbalintona@HIDDEN>,
Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN,
79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>,
Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
Augusto Stoffel <arstoffel@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)
St=C3=A9phane Marks <shipmints@HIDDEN> writes:
> On Wed, Dec 10, 2025 at 10:12=E2=80=AFAM Spencer Baugh <sbaugh@janestreet=
.com> wrote:
> Please add a test which passes with this patch and doesn't pass without
> this patch.
>
> Try the new tests in this updated patch.
Thanks, these tests look good, this will help a lot.
> From 6e33b8cbf2063e1e7689f231bb0c6c6450520bd3 Mon Sep 17 00:00:00 2001
> From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN>
> Date: Wed, 10 Dec 2025 09:20:02 -0500
> Subject: [PATCH] Add vtable buffer slot
>
> This solves for background vtable mutations, i.e., updates
> initiated from buffers other than the vtable buffer, and for
> buffer-adjusted string-pixel-width computations.
>
> * lisp/emacs-lisp/vtable.el (vtable): New '-buffer' slot.
> (vtable-buffer):
> (vtable-set-buffer): New function.
> (vtable-update-object):
> (vtable-remove-object):
> (vtable-insert-object): Wrap operation with the vtable buffer.
> (vtable--insert): Split from old 'vtable-insert'.
> (vtable-insert): Insert table and record the buffer.
> (vtable--insert-line):
> (vtable--insert-header-line): Use 'vtable-buffer' for pixel-width computa=
tion.
> (vtable--limit-string):
> (vtable--char-width): Pass buffer to 'string-pixel-width'.
> (vtable-revert): New optional table argument.
> (vtable--alter-column-width):
> (vtable-revert-command):
> (vtable-sort-by-current-column): Call 'vtable-revert' with the table.
>
> * test/lisp/emacs-lisp/vtable-tests.el
> (vtable-tests--make-no-header-2-object-table): New helper
> function.
> (test-vstable-compute-columns): Correct typo in test name. Use
> new helper function.
> (test-vtable-unique-buffer)
> (test-vtable-non-current-buffer-insert-object)
> (test-vtable-non-current-buffer-remove-object)
> (test-vtable-non-current-buffer-update-object)
> (test-vtable--limit-string-with-face-remapped-buffer): New test.
> ---
> lisp/emacs-lisp/vtable.el | 389 +++++++++++++++------------
> test/lisp/emacs-lisp/vtable-tests.el | 78 +++++-
> 2 files changed, 291 insertions(+), 176 deletions(-)
>
> diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
> index bcdd280fb92..fe4bae01077 100644
> --- a/lisp/emacs-lisp/vtable.el
> +++ b/lisp/emacs-lisp/vtable.el
> @@ -68,6 +68,7 @@ vtable
> (column-colors :initarg :column-colors :accessor vtable-column-colors)
> (row-colors :initarg :row-colors :accessor vtable-row-colors)
> (-cached-colors :initform nil)
> + (-buffer :initform nil)
> (-cache :initform (make-hash-table :test #'equal))
> (-cached-keymap :initform nil)
> (-has-column-spec :initform nil))
> @@ -221,6 +222,20 @@ vtable--face-color
>=20=20
> ;;; Interface utility functions.
>=20=20
> +(defun vtable-buffer (&optional table)
> + "Return the buffer associated with TABLE.
> +If TABLE is nil, use the table under point. Return nil if the table has
> +not been inserted into a buffer."
> + (slot-value (or table (vtable-current-table))
> + '-buffer))
> +
> +(defun vtable-set-buffer (buffer &optional table)
> + "Associate BUFFER with TABLE.
> +If TABLE is nil, use the table under point."
> + (setf (slot-value (or table (vtable-current-table))
> + '-buffer)
> + buffer))
> +
> (defun vtable-current-table ()
> "Return the table under point."
> (get-text-property (point) 'vtable))
> @@ -285,63 +300,65 @@ vtable-update-object
> compared with `equal'), signal an error.
>=20=20
> TABLE must be at point in the current buffer."
> - (unless old-object
> - (setq old-object object))
> - (let* ((objects (vtable-objects table))
> - (inhibit-read-only t))
> - ;; First replace the object in the object storage.
> - (if (eq old-object (car objects))
> - ;; It's at the head, so replace it there.
> - (setf (vtable-objects table)
> - (cons object (cdr objects)))
> - ;; Otherwise splice into the list.
> - (while (and (cdr objects)
> - (not (eq (cadr objects) old-object)))
> - (setq objects (cdr objects)))
> - (unless (cdr objects)
> - (error "Can't find the old object"))
> - (setcar (cdr objects) object))
> - ;; Then update the rendered vtable in the current buffer.
> - (if-let* ((cache (vtable--current-cache))
> - (line-number (seq-position (vtable--cache-lines cache)
> - old-object
> - (lambda (a b)
> - (equal (car a) b))))
> - (line (elt (vtable--cache-lines cache) line-number)))
> - (progn
> - (setcar line object)
> - (setcdr line (vtable--compute-cached-line table object))
> - ;; ... and redisplay the line in question.
> - (save-excursion
> - (vtable-goto-object old-object)
> - (let ((keymap (get-text-property (point) 'keymap))
> - (start (point)))
> - (delete-line)
> - (vtable--insert-line table line line-number
> - (vtable--cache-widths cache)
> - (vtable--spacer table))
> - (add-text-properties start (point) (list 'keymap keymap
> - 'vtable table
> - 'vtable-cache cac=
he))))
> - ;; We may have inserted a non-numerical value into a previously
> - ;; all-numerical table, so recompute.
> - (vtable--recompute-numerical table (cdr line)))
> - (error "Can't find cached object in vtable"))))
> + (with-current-buffer (vtable-buffer table)
> + (unless old-object
> + (setq old-object object))
> + (let* ((objects (vtable-objects table))
> + (inhibit-read-only t))
> + ;; First replace the object in the object storage.
> + (if (eq old-object (car objects))
> + ;; It's at the head, so replace it there.
> + (setf (vtable-objects table)
> + (cons object (cdr objects)))
> + ;; Otherwise splice into the list.
> + (while (and (cdr objects)
> + (not (eq (cadr objects) old-object)))
> + (setq objects (cdr objects)))
> + (unless (cdr objects)
> + (error "Can't find the old object"))
> + (setcar (cdr objects) object))
> + ;; Then update the rendered vtable in the current buffer.
> + (if-let* ((cache (vtable--current-cache))
> + (line-number (seq-position (vtable--cache-lines cache)
> + old-object
> + (lambda (a b)
> + (equal (car a) b))))
> + (line (elt (vtable--cache-lines cache) line-number)))
> + (progn
> + (setcar line object)
> + (setcdr line (vtable--compute-cached-line table object))
> + ;; ... and redisplay the line in question.
> + (save-excursion
> + (vtable-goto-object old-object)
> + (let ((keymap (get-text-property (point) 'keymap))
> + (start (point)))
> + (delete-line)
> + (vtable--insert-line table line line-number
> + (vtable--cache-widths cache)
> + (vtable--spacer table))
> + (add-text-properties start (point) (list 'keymap keymap
> + 'vtable table
> + 'vtable-cache c=
ache))))
> + ;; We may have inserted a non-numerical value into a previou=
sly
> + ;; all-numerical table, so recompute.
> + (vtable--recompute-numerical table (cdr line)))
> + (error "Can't find cached object in vtable")))))
>=20=20
> (defun vtable-remove-object (table object)
> "Remove OBJECT from TABLE.
> This will also remove the displayed line."
> - ;; First remove from the objects.
> - (setf (vtable-objects table) (delq object (vtable-objects table)))
> - ;; Then adjust the cache and display.
> - (save-excursion
> - (vtable-goto-table table)
> - (let ((cache (vtable--current-cache))
> - (inhibit-read-only t))
> - (setcar cache (delq (assq object (vtable--cache-lines cache))
> - (vtable--cache-lines cache)))
> - (when (vtable-goto-object object)
> - (delete-line)))))
> + (with-current-buffer (vtable-buffer table)
> + ;; First remove from the objects.
> + (setf (vtable-objects table) (delq object (vtable-objects table)))
> + ;; Then adjust the cache and display.
> + (save-excursion
> + (vtable-goto-table table)
> + (let ((cache (vtable--current-cache))
> + (inhibit-read-only t))
> + (setcar cache (delq (assq object (vtable--cache-lines cache))
> + (vtable--cache-lines cache)))
> + (when (vtable-goto-object object)
> + (delete-line))))))
>=20=20
> ;; FIXME: The fact that the `location' argument of
> ;; `vtable-insert-object' can be an integer and is then interpreted as
> @@ -363,91 +380,92 @@ vtable-insert-object
> case.
>=20=20
> This also updates the displayed table."
> - ;; If the vtable is empty, just add the object and regenerate the
> - ;; table.
> - (if (null (vtable-objects table))
> - (progn
> - (setf (vtable-objects table) (list object))
> - (vtable--recompute-numerical table (vtable--compute-cached-line =
table object))
> - (vtable-goto-table table)
> - (vtable-revert-command))
> - ;; First insert into the objects.
> - (let ((pos (if location
> - (if (integerp location)
> - (prog1
> - (nthcdr location (vtable-objects table))
> - ;; Do not prepend if index is too large:
> - (setq before nil))
> - (or (memq location (vtable-objects table))
> - ;; Prepend if `location' is not found and
> - ;; `before' is non-nil:
> - (and before (vtable-objects table))))
> - ;; If `location' is nil and `before' is non-nil, we
> - ;; prepend the new object.
> - (if before (vtable-objects table)))))
> - (if (or before ; If `before' is non-nil, `pos' should be, as well.
> - (and pos (integerp location)))
> - ;; Add the new object before.
> - (let ((old-object (car pos)))
> - (setcar pos object)
> - (setcdr pos (cons old-object (cdr pos))))
> - ;; Otherwise, add the object after.
> - (if pos
> - ;; Splice the object into the list.
> - (setcdr pos (cons object (cdr pos)))
> - ;; Otherwise, append the object.
> - (nconc (vtable-objects table) (list object)))))
> - ;; Then adjust the cache and display.
> - (save-excursion
> - (vtable-goto-table table)
> - (let* ((cache (vtable--current-cache))
> - (inhibit-read-only t)
> - (keymap (get-text-property (point) 'keymap))
> - (ellipsis (if (vtable-ellipsis table)
> - (propertize (truncate-string-ellipsis)
> - 'face (vtable-face table))
> - ""))
> - (ellipsis-width (string-pixel-width ellipsis))
> - (lines (vtable--cache-lines cache))
> - (elem (if location ; This binding mirrors the binding of `=
pos' above.
> - (if (integerp location)
> - (nth location lines)
> - (or (assq location lines)
> - (and before (car lines))))
> - (if before (car lines))))
> - (pos (memq elem lines))
> - (line (cons object (vtable--compute-cached-line table objec=
t))))
> - (if (or before
> + (with-current-buffer (vtable-buffer table)
> + ;; If the vtable is empty, just add the object and regenerate the
> + ;; table.
> + (if (null (vtable-objects table))
> + (progn
> + (setf (vtable-objects table) (list object))
> + (vtable--recompute-numerical table (vtable--compute-cached-lin=
e table object))
> + (vtable-goto-table table)
> + (vtable-revert-command))
> + ;; First insert into the objects.
> + (let ((pos (if location
> + (if (integerp location)
> + (prog1
> + (nthcdr location (vtable-objects table))
> + ;; Do not prepend if index is too large:
> + (setq before nil))
> + (or (memq location (vtable-objects table))
> + ;; Prepend if `location' is not found and
> + ;; `before' is non-nil:
> + (and before (vtable-objects table))))
> + ;; If `location' is nil and `before' is non-nil, we
> + ;; prepend the new object.
> + (if before (vtable-objects table)))))
> + (if (or before ; If `before' is non-nil, `pos' should be, as we=
ll.
> (and pos (integerp location)))
> - ;; Add the new object before:.
> - (let ((old-line (car pos)))
> - (setcar pos line)
> - (setcdr pos (cons old-line (cdr pos)))
> - (unless (vtable-goto-object (car elem))
> - (vtable-beginning-of-table)))
> + ;; Add the new object before.
> + (let ((old-object (car pos)))
> + (setcar pos object)
> + (setcdr pos (cons old-object (cdr pos))))
> ;; Otherwise, add the object after.
> (if pos
> ;; Splice the object into the list.
> - (progn
> - (setcdr pos (cons line (cdr pos)))
> - (if (vtable-goto-object location)
> - (forward-line 1) ; Insert *after*.
> - (vtable-end-of-table)))
> + (setcdr pos (cons object (cdr pos)))
> ;; Otherwise, append the object.
> - (setcar cache (nconc lines (list line)))
> - (vtable-end-of-table)))
> - (let ((start (point)))
> - ;; FIXME: We have to adjust colors in lines below this if we
> - ;; have :row-colors.
> - (vtable--insert-line table line 0
> - (vtable--cache-widths cache) (vtable--spa=
cer table)
> - ellipsis ellipsis-width)
> - (add-text-properties start (point) (list 'keymap keymap
> - 'vtable table
> - 'vtable-cache cache)))
> - ;; We may have inserted a non-numerical value into a previously
> - ;; all-numerical table, so recompute.
> - (vtable--recompute-numerical table (cdr line))))))
> + (nconc (vtable-objects table) (list object)))))
> + ;; Then adjust the cache and display.
> + (save-excursion
> + (vtable-goto-table table)
> + (let* ((cache (vtable--current-cache))
> + (inhibit-read-only t)
> + (keymap (get-text-property (point) 'keymap))
> + (ellipsis (if (vtable-ellipsis table)
> + (propertize (truncate-string-ellipsis)
> + 'face (vtable-face table))
> + ""))
> + (ellipsis-width (string-pixel-width ellipsis (current-buf=
fer)))
> + (lines (vtable--cache-lines cache))
> + (elem (if location ; This binding mirrors the binding of=
`pos' above.
> + (if (integerp location)
> + (nth location lines)
> + (or (assq location lines)
> + (and before (car lines))))
> + (if before (car lines))))
> + (pos (memq elem lines))
> + (line (cons object (vtable--compute-cached-line table obj=
ect))))
> + (if (or before
> + (and pos (integerp location)))
> + ;; Add the new object before:.
> + (let ((old-line (car pos)))
> + (setcar pos line)
> + (setcdr pos (cons old-line (cdr pos)))
> + (unless (vtable-goto-object (car elem))
> + (vtable-beginning-of-table)))
> + ;; Otherwise, add the object after.
> + (if pos
> + ;; Splice the object into the list.
> + (progn
> + (setcdr pos (cons line (cdr pos)))
> + (if (vtable-goto-object location)
> + (forward-line 1) ; Insert *after*.
> + (vtable-end-of-table)))
> + ;; Otherwise, append the object.
> + (setcar cache (nconc lines (list line)))
> + (vtable-end-of-table)))
> + (let ((start (point)))
> + ;; FIXME: We have to adjust colors in lines below this if we
> + ;; have :row-colors.
> + (vtable--insert-line table line 0
> + (vtable--cache-widths cache) (vtable--s=
pacer table)
> + ellipsis ellipsis-width)
> + (add-text-properties start (point) (list 'keymap keymap
> + 'vtable table
> + 'vtable-cache cache=
)))
> + ;; We may have inserted a non-numerical value into a previously
> + ;; all-numerical table, so recompute.
> + (vtable--recompute-numerical table (cdr line)))))))
Is it possible to avoid these massive diffs in vtable-update-object,
vtable-remove-object, and vtable-insert-object? These will make the
history worse, and also makes it harder to review. Maybe we only need
to wrap with-current-buffer around a smaller part of these functions?
FYI, in general, you should change try to make changes in a way which
minimizes the size of the diff.
> (defun vtable-column (table index)
> "Return the name of the INDEXth column in TABLE."
> @@ -520,14 +538,14 @@ vtable--cache-widths
> (defun vtable--cache-lines (cache)
> (car cache))
>=20=20
> -(defun vtable-insert (table)
> +(defun vtable--insert (table)
> (let* ((spacer (vtable--spacer table))
> (start (point))
> (ellipsis (if (vtable-ellipsis table)
> (propertize (truncate-string-ellipsis)
> 'face (vtable-face table))
> ""))
> - (ellipsis-width (string-pixel-width ellipsis))
> + (ellipsis-width (string-pixel-width ellipsis (current-buffer)))
> ;; We maintain a cache per screen/window width, so that we rend=
er
> ;; correctly if Emacs is open on two different screens (or the
> ;; user resizes the frame).
> @@ -565,9 +583,24 @@ vtable-insert
> 'vtable-cache cache))
> (goto-char start)))
>=20=20
> +(defun vtable-insert (table)
> + "Insert TABLE into the current buffer.
> +The current buffer will be recorded as TABLE's buffer. If this is done
> +more than once, or if the table is attempted to be inserted more than
> +once into the same buffer, signal an error."
> + (if-let* ((table-buffer (vtable-buffer table)))
> + (if (eq table-buffer (current-buffer))
> + (error "A vtable cannot be inserted more than once into a buff=
er")
> + (error "A vtable cannot be inserted into more than one buffer")))
> + (vtable-set-buffer (current-buffer) table)
> + (let ((inhibit-read-only t)
> + (inhibit-modification-hooks t))
> + (vtable--insert table)))
> +
> (defun vtable--insert-line (table line line-number widths spacer
> &optional ellipsis ellipsis-width)
> (let ((start (point))
> + (buffer (vtable-buffer table))
> (columns (vtable-columns table))
> (column-colors
> (and (vtable-column-colors table)
> @@ -607,16 +640,18 @@ vtable--insert-line
> (concat
> (vtable--limit-string
> pre-computed (- (elt widths index)
> - (or ellipsis-width 0)))
> + (or ellipsis-width 0))
> + buffer)
> ellipsis)
> pre-computed))
> ;; Recompute widths.
> (t
> - (if (> (string-pixel-width value) (elt widths index))
> + (if (> (string-pixel-width value buffer) (elt widths i=
ndex))
> (concat
> (vtable--limit-string
> value (- (elt widths index)
> - (or ellipsis-width 0)))
> + (or ellipsis-width 0))
> + buffer)
> ellipsis)
> value))))
> (start (point))
> @@ -630,14 +665,15 @@ vtable--insert-line
> (list 'space
> :width (list
> (+ (- (elt widths index)
> - (string-pixel-width displa=
yed))
> + (string-pixel-width
> + displayed buffer))
> (if last 0 spacer)))))))
> ;; Align to the right.
> (insert (propertize " " 'display
> (list 'space
> :width (list (- (elt widths index)
> (string-pixel-wid=
th
> - displayed)))))
> + displayed buffer=
)))))
> displayed)
> (unless last
> (insert (propertize " " 'display
> @@ -718,6 +754,7 @@ vtable--indicator
> (defun vtable--insert-header-line (table widths spacer)
> ;; Insert the header directly into the buffer.
> (let ((start (point))
> + (buffer (vtable-buffer table))
> (divider (vtable-divider table))
> (cmap (define-keymap
> "<header-line> <drag-mouse-1>" #'vtable--drag-resize-col=
umn
> @@ -737,14 +774,15 @@ vtable--insert-header-line
> 'keymap cmap))
> (start (point))
> (indicator (vtable--indicator table index))
> - (indicator-width (string-pixel-width indicator))
> + (indicator-width (string-pixel-width indicator buffer))
> (last (=3D index (1- (length (vtable-columns table)))))
> displayed)
> (setq displayed
> - (if (> (string-pixel-width name)
> + (if (> (string-pixel-width name buffer)
> (- (elt widths index) indicator-width))
> (vtable--limit-string
> - name (- (elt widths index) indicator-width))
> + name (- (elt widths index) indicator-width)
> + buffer)
> name))
> (let* ((indicator-lead-width
> ;; We want the indicator to not be quite flush right.
> @@ -753,7 +791,7 @@ vtable--insert-header-line
> indicator-lead-width))
> (fill-width
> (+ (- (elt widths index)
> - (string-pixel-width displayed)
> + (string-pixel-width displayed buffer)
> indicator-width
> indicator-lead-width)
> (if last 0 spacer))))
> @@ -771,7 +809,8 @@ vtable--insert-header-line
> ;; This is the final column, and we have a sorting
> ;; indicator, and the table is too wide for the window.
> (let* ((pre-indicator (string-pixel-width
> - (buffer-substring (point-min) (point=
))))
> + (buffer-substring (point-min) (point=
))
> + buffer))
> (pre-fill
> (- (window-width nil t)
> pre-indicator
> @@ -850,14 +889,16 @@ vtable--set-header-line
> (buffer-substring (point-min) (1- (point-max))))))
> (vtable-header-mode 1))
>=20=20
> -(defun vtable--limit-string (string pixels)
> +
> +(defun vtable--limit-string (string pixels buffer)
> (while (and (length> string 0)
> - (> (string-pixel-width string) pixels))
> + (> (string-pixel-width string buffer) pixels))
> (setq string (substring string 0 (1- (length string)))))
> string)
>=20=20
> (defun vtable--char-width (table)
> - (string-pixel-width (propertize "x" 'face (vtable-face table))))
> + (string-pixel-width (propertize "x" 'face (vtable-face table))
> + (vtable-buffer table)))
>=20=20
> (defun vtable--compute-width (table spec)
> (cond
> @@ -967,20 +1008,24 @@ vtable--make-keymap
> (vtable-keymap table))
> map)))
>=20=20
> -(defun vtable-revert ()
> - "Regenerate the table under point."
> - (let ((table (vtable-current-table))
> - (object (vtable-current-object))
> - (column (vtable-current-column))
> - (inhibit-read-only t))
> - (unless table
> - (user-error "No table under point"))
> - (delete-region (vtable-beginning-of-table) (vtable-end-of-table))
> - (vtable-insert table)
> - (when object
> - (vtable-goto-object object))
> - (when column
> - (vtable-goto-column column))))
> +(defun vtable-revert (&optional table)
> + "Regenerate the table under point.
> +If TABLE is nil, use the table under point."
This repeats itself. It should say "Regenerate TABLE, defaulting to the ta=
ble under point."
> + (setq table (or table (vtable-current-table)))
> + (unless table
> + (user-error "No table found"))
I don't think this error message should change.
> + (with-current-buffer (vtable-buffer table)
> + (let ((object (vtable-current-object))
> + (column (vtable-current-column))
So we still implicitly depend on the value of point in the buffer? How
does this interact with window-point? This seems like a potential
foot-gun.
> + (inhibit-read-only t))
> + (unless table
> + (user-error "No table under point"))
> + (delete-region (vtable-beginning-of-table) (vtable-end-of-table))
> + (vtable--insert table)
> + (when object
> + (vtable-goto-object object))
> + (when column
> + (vtable-goto-column column)))))
>
> ;;; Commands.
>=20=20
> @@ -1013,7 +1058,7 @@ vtable--alter-column-width
> ;; Store the width so it'll be respected on a revert.
> (setf (vtable-column-width (elt (vtable-columns table) column))
> (format "%dpx" (aref widths column)))
> - (vtable-revert)))
> + (vtable-revert table)))
>=20=20
> (defun vtable-widen-current-column (&optional n)
> "Widen the current column by N characters.
> @@ -1038,14 +1083,16 @@ vtable-next-column
> (min (1- (length (vtable--cache-widths (vtable--current-cache))))
> (1+ (vtable-current-column))))))
>=20=20
> -(defun vtable-revert-command ()
> +(defun vtable-revert-command (&optional table)
> "Re-query data and regenerate the table under point."
> (interactive)
> - (let ((table (vtable-current-table)))
> - (when (vtable-objects-function table)
> - (setf (vtable-objects table) (funcall (vtable-objects-function tab=
le))))
> - (vtable--clear-cache table))
> - (vtable-revert))
> + (setq table (or table (vtable-current-table)))
> + (unless table
> + (user-error "No table found"))
> + (when (vtable-objects-function table)
> + (setf (vtable-objects table) (funcall (vtable-objects-function table=
))))
> + (vtable--clear-cache table)
> + (vtable-revert table))
>=20=20
> (defun vtable-sort-by-current-column ()
> "Sort the table under point by the column under point."
> @@ -1067,8 +1114,8 @@ vtable-sort-by-current-column
> (if (eq (cdr last) 'ascend)
> 'descend
> 'ascend)
> - 'ascend))))))
> - (vtable-revert))
> + 'ascend)))))
> + (vtable-revert table)))
>=20=20
> (defun vtable-header-line-sort (e)
> "Sort a vtable from the header line."
> diff --git a/test/lisp/emacs-lisp/vtable-tests.el b/test/lisp/emacs-lisp/=
vtable-tests.el
> index 74fb8cc8139..83f826ea353 100644
> --- a/test/lisp/emacs-lisp/vtable-tests.el
> +++ b/test/lisp/emacs-lisp/vtable-tests.el
> @@ -27,16 +27,19 @@
> (require 'ert)
> (require 'ert-x)
>=20=20
> -(ert-deftest test-vstable-compute-columns ()
> +(defun vtable-tests--make-no-header-2-object-table ()
> + (make-vtable :columns '("a" "b" "c")
> + :objects '(("foo" 1 2)
> + ("bar" 3 :zot))
> + :insert nil))
> +
> +(ert-deftest test-vtable-compute-columns ()
> (should
> (equal (mapcar
> (lambda (column)
> (vtable-column-align column))
> (vtable--compute-columns
> - (make-vtable :columns '("a" "b" "c")
> - :objects '(("foo" 1 2)
> - ("bar" 3 :zot))
> - :insert nil)))
> + (vtable-tests--make-no-header-2-object-table)))
> '(left right left))))
>=20=20
> (ert-deftest test-vtable-insert-object ()
> @@ -69,4 +72,69 @@ test-vtable-insert-object
> (mapcar #'cadr (vtable-objects table))))
> (number-sequence 0 11))))
>=20=20
> +(ert-deftest test-vtable-unique-buffer ()
> + (let ((table (vtable-tests--make-no-header-2-object-table)))
> + (with-temp-buffer
> + (vtable-insert table)
> + ;; This will run but fail on Emacs pre 31 vtable.
> + (should-error (vtable-insert table))
> + ;; This will run only on Emacs 31+ vtable.
> + (when (> emacs-major-version 30)
> + (should-error (vtable-set-buffer table (current-buffer)))))))
> +
> +(ert-deftest test-vtable-non-current-buffer-insert-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (should (=3D (count-lines (point-min) (point-max)) 2))
> + (with-temp-buffer
> + (vtable-insert-object table obj))
> + (should (=3D (count-lines (point-min) (point-max)) 3)))))
> +
> +(ert-deftest test-vtable-non-current-buffer-remove-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (vtable-insert-object table obj)
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (with-temp-buffer
> + (vtable-remove-object table obj))
> + (should (=3D (count-lines (point-min) (point-max)) 2)))))
> +
> +(ert-deftest test-vtable-non-current-buffer-update-object ()
> + (let ((table (vtable-tests--make-no-header-2-object-table))
> + (obj '("baz" 4 5))
> + (obj-2 '("qux" 6 7)))
> + (with-temp-buffer
> + (vtable-insert table)
> + (vtable-insert-object table obj)
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (let ((line-2 (progn
> + (goto-char (point-min))
> + (forward-line 2)
> + (buffer-substring (point) (point-max)))))
> + (with-temp-buffer
> + (vtable-update-object table obj-2 obj))
> + (let ((line-2-new (progn
> + (goto-char (point-min))
> + (forward-line 2)
> + (buffer-substring (point) (point-max)))))
> + (should (=3D (count-lines (point-min) (point-max)) 3))
> + (should (not (string=3D line-2 line-2-new))))))))
> +
> +(ert-deftest test-vtable--limit-string-with-face-remapped-buffer ()
> + (with-temp-buffer
> + (let ((text (propertize "XXXXX"
> + 'face 'variable-pitch)))
> + (face-remap-add-relative 'default :height 1.5)
> + (if (> emacs-major-version 30)
> + (should (eq
> + 2
> + (length (vtable--limit-string text 50 (current-buffer=
)))))
> + (should (eq
> + 2
> + (length (vtable--limit-string text 50))))))))
> +
> ;;; vtable-tests.el ends here
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 10 Dec 2025 17:51:00 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 10 12:51:00 2025 Received: from localhost ([127.0.0.1]:35695 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vTOL5-0004TJ-H1 for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 12:50:59 -0500 Received: from mail-vs1-xe30.google.com ([2607:f8b0:4864:20::e30]:52277) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vTOL2-0004T4-1f for 79982 <at> debbugs.gnu.org; Wed, 10 Dec 2025 12:50:57 -0500 Received: by mail-vs1-xe30.google.com with SMTP id ada2fe7eead31-5e186858102so22295137.0 for <79982 <at> debbugs.gnu.org>; Wed, 10 Dec 2025 09:50:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765389050; x=1765993850; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dxL95OXkWXUM1fZUXad/q8hI6o7kWZl9B9Tv0pqT6Ho=; b=d1QlKGAOttBHF3KJONpuZ6/6q1J6ZiOjgl0EteGir+szL+RpTtL4NPeZUxNxiT+m1Z rfwkpVC0+/lKfXY9INewFtU6t2h7DDb4CGMOei7nXfDPhQ8Dj56pzivD9gOmdxXH9TVh J1uNHGYngOSqM6a54478z4355MMsL5znhGNCH5lZAcNPqlJTM2EuIlNuVbpULER1jVrv /1dxpY/3F/8hK9FFWp1HN3kN6pcEPDuocXnDn3akFDDPYBVhoGqNYLKE7REREormPcvL NFh/ykAkDJDTZudFYm3ZesDxPOnzbkxiOP4Tc9NNLgtvQkh0LNv9gjeOLjtdPIOLUGIW wVEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765389050; x=1765993850; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=dxL95OXkWXUM1fZUXad/q8hI6o7kWZl9B9Tv0pqT6Ho=; b=AP8e+nbRhcrT98h2BUb69lBtXTrTdHhk2QSIho1gOSdCFmi87Om5L9qhbSqV1eN1FV xFgsHonYtg61VTfez+Yy2P/M8SgwIwrxShfTv/jSo2QoTceyXpzfVnJqI2sVVLa5gevA /nJKWzj3QocL7L5XZahIgZVGgtY/lEGHQFZVzz/YZYwKpTA5nvLzHSm6NflnXy96Txp+ cL0ybHk5+dCnQO+yHOKxMmh1pq1NGN42KM4XTM5BRuthccB969DMgxatU5enjZQVbEh0 cLlTLO+nVHRuWqeaAhogG+WKp87O/tRxrX65GeKenWag02AOUYbnhCf6K9B+emHMWCO5 VKUQ== X-Gm-Message-State: AOJu0YwGSTnEhQ3vnt0oj1DgwQFe1tXBthCbaVIx54GvM44wYRcpk86h kWqmjO53anZB6AR6UpFoGy4cLZj/hHoe37CQONg/nnknHY1LWuEYoPW0gKrv1jMTgPTcE+jN7/3 m1kmjvk6Rvp68D+ktAGUugKkuk52Hkeo= X-Gm-Gg: AY/fxX7943zdWuA8ZkcguKDMalkCffBeT401iUtMF70xiOqNDEt3dzjRWCU5wZEaHif gkPv5bYvPq7gzfZNn5S5QH2cMg67vl5MNPrdeOYTxPmITZwdcaCILCVVKOqAzIhDO9/IhfMA5cH LPU5gA+qg52+t3LZVhnAAI6K23L3kLR+puSbKGuYZsT9YtrNZii2+Cmyj6RhQeOaLrMb4qg5xC0 3GxZky7e0B49+5+h7vCAwWjGFpeA5YI2dtcvJaH9QaQU27zLyPvatoGMCYkfSPRbW4cuV8= X-Google-Smtp-Source: AGHT+IEh+Wm+gjPbUGKRi6QrwayhAY1QHp6VT1u6lZjvdC+iswvtMVGhqL1VwcbeCymwBAmjAUoZBZQSMjDcFx+qM/o= X-Received: by 2002:a05:6102:54ac:b0:5df:c094:628d with SMTP id ada2fe7eead31-5e5716f039emr1148235137.3.1765389050338; Wed, 10 Dec 2025 09:50:50 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> <iero6o6s75r.fsf@HIDDEN> In-Reply-To: <iero6o6s75r.fsf@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Wed, 10 Dec 2025 12:50:38 -0500 X-Gm-Features: AQt7F2rdV8r3KEU-8jPl7W_bXcGaAP2K3m9fmLT7Kv331C3TP3lXI_Vk1ZUeN4s Message-ID: <CAN+1HboB1WkN8NQkYSx_=PBk67s1Y5duizM1AvVe_sVH2QWivw@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot To: Spencer Baugh <sbaugh@HIDDEN> Content-Type: multipart/mixed; boundary="0000000000003c79da06459cab30" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000003c79da06459cab30 Content-Type: multipart/alternative; boundary="0000000000003c79d806459cab2e" --0000000000003c79d806459cab2e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Dec 10, 2025 at 10:12=E2=80=AFAM Spencer Baugh <sbaugh@HIDDEN= om> wrote: > St=C3=A9phane Marks <shipmints@HIDDEN> writes: > > This solves for background vtable mutations, i.e., updates initiated > from buffers other than the vtable buffer, and for > > buffer-adjusted string-pixel-width computations. > > > > Many more patches for fixes and enhancements coming on the back of this > one, once agreed. I'd love to see all of these in Emacs > > 31 and I'm now generally available to pick up the pace. > > > > P.S. I've cc'd the same group as the last vtable discussions/patches. > If you do not want to be cc'd on these, let me know. > > > > -St=C3=A9phane > > Please add a test which passes with this patch and doesn't pass without > this patch. > Try the new tests in this updated patch. --0000000000003c79d806459cab2e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Wed, Dec 10, 2025 at 10:12=E2=80=AFAM Spencer Baugh <<a href=3D"mailt= o:sbaugh@HIDDEN">sbaugh@HIDDEN</a>> wrote:</span></div><= /div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"= gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20= 4,204,204);padding-left:1ex">St=C3=A9phane Marks <<a href=3D"mailto:ship= mints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> > This solves for background vtable mutations, i.e., updates initiated f= rom buffers other than the vtable buffer, and for<br> > buffer-adjusted string-pixel-width computations.<br> ><br> > Many more patches for fixes and enhancements coming on the back of thi= s one, once agreed.=C2=A0 I'd love to see all of these in Emacs<br> > 31 and I'm now generally available to pick up the pace.<br> ><br> > P.S. I've cc'd the same group as the last vtable discussions/p= atches.=C2=A0 If you do not want to be cc'd on these, let me know.<br> ><br> > -St=C3=A9phane <br> <br> Please add a test which passes with this patch and doesn't pass without= <br> this patch.<br></blockquote><div><br></div><div class=3D"gmail_default" sty= le=3D"font-family:monospace">Try the new tests in this updated patch.</div>= </div></div> --0000000000003c79d806459cab2e-- --0000000000003c79da06459cab30 Content-Type: application/octet-stream; name="0001-Add-vtable-buffer-slot.patch" Content-Disposition: attachment; filename="0001-Add-vtable-buffer-slot.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mj0b1jqw0> X-Attachment-Id: f_mj0b1jqw0 RnJvbSA2ZTMzYjhjYmYyMDYzZTFlNzY4OWYyMzFiYjBjNmM2NDUwNTIwYmQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTAgRGVjIDIwMjUgMDk6MjA6MDIgLTA1MDAK U3ViamVjdDogW1BBVENIXSBBZGQgdnRhYmxlIGJ1ZmZlciBzbG90CgpUaGlzIHNvbHZlcyBmb3Ig YmFja2dyb3VuZCB2dGFibGUgbXV0YXRpb25zLCBpLmUuLCB1cGRhdGVzCmluaXRpYXRlZCBmcm9t IGJ1ZmZlcnMgb3RoZXIgdGhhbiB0aGUgdnRhYmxlIGJ1ZmZlciwgYW5kIGZvcgpidWZmZXItYWRq dXN0ZWQgc3RyaW5nLXBpeGVsLXdpZHRoIGNvbXB1dGF0aW9ucy4KCiogbGlzcC9lbWFjcy1saXNw L3Z0YWJsZS5lbCAodnRhYmxlKTogTmV3ICctYnVmZmVyJyBzbG90LgoodnRhYmxlLWJ1ZmZlcik6 Cih2dGFibGUtc2V0LWJ1ZmZlcik6IE5ldyBmdW5jdGlvbi4KKHZ0YWJsZS11cGRhdGUtb2JqZWN0 KToKKHZ0YWJsZS1yZW1vdmUtb2JqZWN0KToKKHZ0YWJsZS1pbnNlcnQtb2JqZWN0KTogV3JhcCBv cGVyYXRpb24gd2l0aCB0aGUgdnRhYmxlIGJ1ZmZlci4KKHZ0YWJsZS0taW5zZXJ0KTogU3BsaXQg ZnJvbSBvbGQgJ3Z0YWJsZS1pbnNlcnQnLgoodnRhYmxlLWluc2VydCk6IEluc2VydCB0YWJsZSBh bmQgcmVjb3JkIHRoZSBidWZmZXIuCih2dGFibGUtLWluc2VydC1saW5lKToKKHZ0YWJsZS0taW5z ZXJ0LWhlYWRlci1saW5lKTogVXNlICd2dGFibGUtYnVmZmVyJyBmb3IgcGl4ZWwtd2lkdGggY29t cHV0YXRpb24uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6Cih2dGFibGUtLWNoYXItd2lkdGgpOiBQ YXNzIGJ1ZmZlciB0byAnc3RyaW5nLXBpeGVsLXdpZHRoJy4KKHZ0YWJsZS1yZXZlcnQpOiBOZXcg b3B0aW9uYWwgdGFibGUgYXJndW1lbnQuCih2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCk6Cih2 dGFibGUtcmV2ZXJ0LWNvbW1hbmQpOgoodnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4pOiBD YWxsICd2dGFibGUtcmV2ZXJ0JyB3aXRoIHRoZSB0YWJsZS4KCiogdGVzdC9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLXRlc3RzLmVsCih2dGFibGUtdGVzdHMtLW1ha2Utbm8taGVhZGVyLTItb2JqZWN0 LXRhYmxlKTogTmV3IGhlbHBlcgpmdW5jdGlvbi4KKHRlc3QtdnN0YWJsZS1jb21wdXRlLWNvbHVt bnMpOiBDb3JyZWN0IHR5cG8gaW4gdGVzdCBuYW1lLiAgVXNlCm5ldyBoZWxwZXIgZnVuY3Rpb24u Cih0ZXN0LXZ0YWJsZS11bmlxdWUtYnVmZmVyKQoodGVzdC12dGFibGUtbm9uLWN1cnJlbnQtYnVm ZmVyLWluc2VydC1vYmplY3QpCih0ZXN0LXZ0YWJsZS1ub24tY3VycmVudC1idWZmZXItcmVtb3Zl LW9iamVjdCkKKHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUtb2JqZWN0KQoo dGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRoLWZhY2UtcmVtYXBwZWQtYnVmZmVyKTogTmV3 IHRlc3QuCi0tLQogbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCAgICAgICAgICAgIHwgMzg5ICsr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRl c3RzLmVsIHwgIDc4ICsrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCAyOTEgaW5zZXJ0aW9ucygrKSwg MTc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwg Yi9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVsCmluZGV4IGJjZGQyODBmYjkyLi5mZTRiYWUwMTA3 NyAxMDA2NDQKLS0tIGEvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbAorKysgYi9saXNwL2VtYWNz LWxpc3AvdnRhYmxlLmVsCkBAIC02OCw2ICs2OCw3IEBAIHZ0YWJsZQogICAgKGNvbHVtbi1jb2xv cnMgOmluaXRhcmcgOmNvbHVtbi1jb2xvcnMgOmFjY2Vzc29yIHZ0YWJsZS1jb2x1bW4tY29sb3Jz KQogICAgKHJvdy1jb2xvcnMgOmluaXRhcmcgOnJvdy1jb2xvcnMgOmFjY2Vzc29yIHZ0YWJsZS1y b3ctY29sb3JzKQogICAgKC1jYWNoZWQtY29sb3JzIDppbml0Zm9ybSBuaWwpCisgICAoLWJ1ZmZl ciA6aW5pdGZvcm0gbmlsKQogICAgKC1jYWNoZSA6aW5pdGZvcm0gKG1ha2UtaGFzaC10YWJsZSA6 dGVzdCAjJ2VxdWFsKSkKICAgICgtY2FjaGVkLWtleW1hcCA6aW5pdGZvcm0gbmlsKQogICAgKC1o YXMtY29sdW1uLXNwZWMgOmluaXRmb3JtIG5pbCkpCkBAIC0yMjEsNiArMjIyLDIwIEBAIHZ0YWJs ZS0tZmFjZS1jb2xvcgogCiA7OzsgSW50ZXJmYWNlIHV0aWxpdHkgZnVuY3Rpb25zLgogCisoZGVm dW4gdnRhYmxlLWJ1ZmZlciAoJm9wdGlvbmFsIHRhYmxlKQorICAiUmV0dXJuIHRoZSBidWZmZXIg YXNzb2NpYXRlZCB3aXRoIFRBQkxFLgorSWYgVEFCTEUgaXMgbmlsLCB1c2UgdGhlIHRhYmxlIHVu ZGVyIHBvaW50LiAgUmV0dXJuIG5pbCBpZiB0aGUgdGFibGUgaGFzCitub3QgYmVlbiBpbnNlcnRl ZCBpbnRvIGEgYnVmZmVyLiIKKyAgKHNsb3QtdmFsdWUgKG9yIHRhYmxlICh2dGFibGUtY3VycmVu dC10YWJsZSkpCisgICAgICAgICAgICAgICctYnVmZmVyKSkKKworKGRlZnVuIHZ0YWJsZS1zZXQt YnVmZmVyIChidWZmZXIgJm9wdGlvbmFsIHRhYmxlKQorICAiQXNzb2NpYXRlIEJVRkZFUiB3aXRo IFRBQkxFLgorSWYgVEFCTEUgaXMgbmlsLCB1c2UgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKKyAg KHNldGYgKHNsb3QtdmFsdWUgKG9yIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpCisgICAg ICAgICAgICAgICAgICAgICctYnVmZmVyKQorICAgICAgICBidWZmZXIpKQorCiAoZGVmdW4gdnRh YmxlLWN1cnJlbnQtdGFibGUgKCkKICAgIlJldHVybiB0aGUgdGFibGUgdW5kZXIgcG9pbnQuIgog ICAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAndnRhYmxlKSkKQEAgLTI4NSw2MyArMzAwLDY1 IEBAIHZ0YWJsZS11cGRhdGUtb2JqZWN0CiBjb21wYXJlZCB3aXRoIGBlcXVhbCcpLCBzaWduYWwg YW4gZXJyb3IuCiAKIFRBQkxFIG11c3QgYmUgYXQgcG9pbnQgaW4gdGhlIGN1cnJlbnQgYnVmZmVy LiIKLSAgKHVubGVzcyBvbGQtb2JqZWN0Ci0gICAgKHNldHEgb2xkLW9iamVjdCBvYmplY3QpKQot ICAobGV0KiAoKG9iamVjdHMgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkKLSAgICAgICAgIChpbmhp Yml0LXJlYWQtb25seSB0KSkKLSAgICA7OyBGaXJzdCByZXBsYWNlIHRoZSBvYmplY3QgaW4gdGhl IG9iamVjdCBzdG9yYWdlLgotICAgIChpZiAoZXEgb2xkLW9iamVjdCAoY2FyIG9iamVjdHMpKQot ICAgICAgICA7OyBJdCdzIGF0IHRoZSBoZWFkLCBzbyByZXBsYWNlIGl0IHRoZXJlLgotICAgICAg ICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpCi0gICAgICAgICAgICAgIChjb25zIG9iamVj dCAoY2RyIG9iamVjdHMpKSkKLSAgICAgIDs7IE90aGVyd2lzZSBzcGxpY2UgaW50byB0aGUgbGlz dC4KLSAgICAgICh3aGlsZSAoYW5kIChjZHIgb2JqZWN0cykKLSAgICAgICAgICAgICAgICAgIChu b3QgKGVxIChjYWRyIG9iamVjdHMpIG9sZC1vYmplY3QpKSkKLSAgICAgICAgKHNldHEgb2JqZWN0 cyAoY2RyIG9iamVjdHMpKSkKLSAgICAgICh1bmxlc3MgKGNkciBvYmplY3RzKQotICAgICAgICAo ZXJyb3IgIkNhbid0IGZpbmQgdGhlIG9sZCBvYmplY3QiKSkKLSAgICAgIChzZXRjYXIgKGNkciBv YmplY3RzKSBvYmplY3QpKQotICAgIDs7IFRoZW4gdXBkYXRlIHRoZSByZW5kZXJlZCB2dGFibGUg aW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotICAgIChpZi1sZXQqICgoY2FjaGUgKHZ0YWJsZS0tY3Vy cmVudC1jYWNoZSkpCi0gICAgICAgICAgICAgKGxpbmUtbnVtYmVyIChzZXEtcG9zaXRpb24gKHZ0 YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2xkLW9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsYW1iZGEgKGEgYikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChlcXVhbCAoY2FyIGEpIGIpKSkpCi0gICAgICAgICAgICAgKGxpbmUgKGVsdCAodnRhYmxl LS1jYWNoZS1saW5lcyBjYWNoZSkgbGluZS1udW1iZXIpKSkKLSAgICAgICAgKHByb2duCi0gICAg ICAgICAgKHNldGNhciBsaW5lIG9iamVjdCkKLSAgICAgICAgICAoc2V0Y2RyIGxpbmUgKHZ0YWJs ZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKQotICAgICAgICAgIDs7IC4uLiBh bmQgcmVkaXNwbGF5IHRoZSBsaW5lIGluIHF1ZXN0aW9uLgotICAgICAgICAgIChzYXZlLWV4Y3Vy c2lvbgotICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvbGQtb2JqZWN0KQotICAgICAg ICAgICAgKGxldCAoKGtleW1hcCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAna2V5bWFwKSkK LSAgICAgICAgICAgICAgICAgIChzdGFydCAocG9pbnQpKSkKLSAgICAgICAgICAgICAgKGRlbGV0 ZS1saW5lKQotICAgICAgICAgICAgICAodnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIGxp bmUtbnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNh Y2hlLXdpZHRocyBjYWNoZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0 YWJsZS0tc3BhY2VyIHRhYmxlKSkKLSAgICAgICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMg c3RhcnQgKHBvaW50KSAobGlzdCAna2V5bWFwIGtleW1hcAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUgdGFibGUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNh Y2hlIGNhY2hlKSkpKQotICAgICAgICAgIDs7IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51 bWVyaWNhbCB2YWx1ZSBpbnRvIGEgcHJldmlvdXNseQotICAgICAgICAgIDs7IGFsbC1udW1lcmlj YWwgdGFibGUsIHNvIHJlY29tcHV0ZS4KLSAgICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVt ZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKQotICAgICAgKGVycm9yICJDYW4ndCBmaW5kIGNhY2hl ZCBvYmplY3QgaW4gdnRhYmxlIikpKSkKKyAgKHdpdGgtY3VycmVudC1idWZmZXIgKHZ0YWJsZS1i dWZmZXIgdGFibGUpCisgICAgKHVubGVzcyBvbGQtb2JqZWN0CisgICAgICAoc2V0cSBvbGQtb2Jq ZWN0IG9iamVjdCkpCisgICAgKGxldCogKChvYmplY3RzICh2dGFibGUtb2JqZWN0cyB0YWJsZSkp CisgICAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KSkKKyAgICAgIDs7IEZpcnN0IHJlcGxh Y2UgdGhlIG9iamVjdCBpbiB0aGUgb2JqZWN0IHN0b3JhZ2UuCisgICAgICAoaWYgKGVxIG9sZC1v YmplY3QgKGNhciBvYmplY3RzKSkKKyAgICAgICAgICA7OyBJdCdzIGF0IHRoZSBoZWFkLCBzbyBy ZXBsYWNlIGl0IHRoZXJlLgorICAgICAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkK KyAgICAgICAgICAgICAgICAoY29ucyBvYmplY3QgKGNkciBvYmplY3RzKSkpCisgICAgICAgIDs7 IE90aGVyd2lzZSBzcGxpY2UgaW50byB0aGUgbGlzdC4KKyAgICAgICAgKHdoaWxlIChhbmQgKGNk ciBvYmplY3RzKQorICAgICAgICAgICAgICAgICAgICAobm90IChlcSAoY2FkciBvYmplY3RzKSBv bGQtb2JqZWN0KSkpCisgICAgICAgICAgKHNldHEgb2JqZWN0cyAoY2RyIG9iamVjdHMpKSkKKyAg ICAgICAgKHVubGVzcyAoY2RyIG9iamVjdHMpCisgICAgICAgICAgKGVycm9yICJDYW4ndCBmaW5k IHRoZSBvbGQgb2JqZWN0IikpCisgICAgICAgIChzZXRjYXIgKGNkciBvYmplY3RzKSBvYmplY3Qp KQorICAgICAgOzsgVGhlbiB1cGRhdGUgdGhlIHJlbmRlcmVkIHZ0YWJsZSBpbiB0aGUgY3VycmVu dCBidWZmZXIuCisgICAgICAoaWYtbGV0KiAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUp KQorICAgICAgICAgICAgICAgIChsaW5lLW51bWJlciAoc2VxLXBvc2l0aW9uICh2dGFibGUtLWNh Y2hlLWxpbmVzIGNhY2hlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9sZC1vYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobGFtYmRhIChhIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoZXF1YWwgKGNhciBhKSBiKSkpKQorICAgICAgICAgICAgICAgIChsaW5lIChlbHQgKHZ0 YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpIGxpbmUtbnVtYmVyKSkpCisgICAgICAgICAgKHByb2du CisgICAgICAgICAgICAoc2V0Y2FyIGxpbmUgb2JqZWN0KQorICAgICAgICAgICAgKHNldGNkciBs aW5lICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUgb2JqZWN0KSkKKyAgICAgICAg ICAgIDs7IC4uLiBhbmQgcmVkaXNwbGF5IHRoZSBsaW5lIGluIHF1ZXN0aW9uLgorICAgICAgICAg ICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAgICAgICAgICh2dGFibGUtZ290by1vYmplY3Qgb2xk LW9iamVjdCkKKyAgICAgICAgICAgICAgKGxldCAoKGtleW1hcCAoZ2V0LXRleHQtcHJvcGVydHkg KHBvaW50KSAna2V5bWFwKSkKKyAgICAgICAgICAgICAgICAgICAgKHN0YXJ0IChwb2ludCkpKQor ICAgICAgICAgICAgICAgIChkZWxldGUtbGluZSkKKyAgICAgICAgICAgICAgICAodnRhYmxlLS1p bnNlcnQtbGluZSB0YWJsZSBsaW5lIGxpbmUtbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtd2lkdGhzIGNhY2hlKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCisgICAgICAg ICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3RhcnQgKHBvaW50KSAobGlzdCAna2V5bWFw IGtleW1hcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ3Z0YWJsZSB0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZS1jYWNoZSBjYWNoZSkpKSkKKyAgICAgICAg ICAgIDs7IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2YWx1ZSBpbnRvIGEg cHJldmlvdXNseQorICAgICAgICAgICAgOzsgYWxsLW51bWVyaWNhbCB0YWJsZSwgc28gcmVjb21w dXRlLgorICAgICAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAoY2Ry IGxpbmUpKSkKKyAgICAgICAgKGVycm9yICJDYW4ndCBmaW5kIGNhY2hlZCBvYmplY3QgaW4gdnRh YmxlIikpKSkpCiAKIChkZWZ1biB2dGFibGUtcmVtb3ZlLW9iamVjdCAodGFibGUgb2JqZWN0KQog ICAiUmVtb3ZlIE9CSkVDVCBmcm9tIFRBQkxFLgogVGhpcyB3aWxsIGFsc28gcmVtb3ZlIHRoZSBk aXNwbGF5ZWQgbGluZS4iCi0gIDs7IEZpcnN0IHJlbW92ZSBmcm9tIHRoZSBvYmplY3RzLgotICAo c2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChkZWxxIG9iamVjdCAodnRhYmxlLW9iamVjdHMg dGFibGUpKSkKLSAgOzsgVGhlbiBhZGp1c3QgdGhlIGNhY2hlIGFuZCBkaXNwbGF5LgotICAoc2F2 ZS1leGN1cnNpb24KLSAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAgKGxldCAoKGNh Y2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAgIChpbmhpYml0LXJlYWQtb25s eSB0KSkKLSAgICAgIChzZXRjYXIgY2FjaGUgKGRlbHEgKGFzc3Egb2JqZWN0ICh2dGFibGUtLWNh Y2hlLWxpbmVzIGNhY2hlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2Fj aGUtbGluZXMgY2FjaGUpKSkKLSAgICAgICh3aGVuICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0 KQotICAgICAgICAoZGVsZXRlLWxpbmUpKSkpKQorICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodnRh YmxlLWJ1ZmZlciB0YWJsZSkKKyAgICA7OyBGaXJzdCByZW1vdmUgZnJvbSB0aGUgb2JqZWN0cy4K KyAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChkZWxxIG9iamVjdCAodnRhYmxlLW9i amVjdHMgdGFibGUpKSkKKyAgICA7OyBUaGVuIGFkanVzdCB0aGUgY2FjaGUgYW5kIGRpc3BsYXku CisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCisg ICAgICAobGV0ICgoY2FjaGUgKHZ0YWJsZS0tY3VycmVudC1jYWNoZSkpCisgICAgICAgICAgICAo aW5oaWJpdC1yZWFkLW9ubHkgdCkpCisgICAgICAgIChzZXRjYXIgY2FjaGUgKGRlbHEgKGFzc3Eg b2JqZWN0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpKQorICAgICAgICAod2hlbiAodnRh YmxlLWdvdG8tb2JqZWN0IG9iamVjdCkKKyAgICAgICAgICAoZGVsZXRlLWxpbmUpKSkpKSkKIAog OzsgRklYTUU6IFRoZSBmYWN0IHRoYXQgdGhlIGBsb2NhdGlvbicgYXJndW1lbnQgb2YKIDs7IGB2 dGFibGUtaW5zZXJ0LW9iamVjdCcgY2FuIGJlIGFuIGludGVnZXIgYW5kIGlzIHRoZW4gaW50ZXJw cmV0ZWQgYXMKQEAgLTM2Myw5MSArMzgwLDkyIEBAIHZ0YWJsZS1pbnNlcnQtb2JqZWN0CiBjYXNl LgogCiBUaGlzIGFsc28gdXBkYXRlcyB0aGUgZGlzcGxheWVkIHRhYmxlLiIKLSAgOzsgSWYgdGhl IHZ0YWJsZSBpcyBlbXB0eSwganVzdCBhZGQgdGhlIG9iamVjdCBhbmQgcmVnZW5lcmF0ZSB0aGUK LSAgOzsgdGFibGUuCi0gIChpZiAobnVsbCAodnRhYmxlLW9iamVjdHMgdGFibGUpKQotICAgICAg KHByb2duCi0gICAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGxpc3Qgb2JqZWN0 KSkKLSAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAodnRhYmxlLS1j b21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9iamVjdCkpCi0gICAgICAgICh2dGFibGUtZ290by10 YWJsZSB0YWJsZSkKLSAgICAgICAgKHZ0YWJsZS1yZXZlcnQtY29tbWFuZCkpCi0gICAgOzsgRmly c3QgaW5zZXJ0IGludG8gdGhlIG9iamVjdHMuCi0gICAgKGxldCAoKHBvcyAoaWYgbG9jYXRpb24K LSAgICAgICAgICAgICAgICAgICAoaWYgKGludGVnZXJwIGxvY2F0aW9uKQotICAgICAgICAgICAg ICAgICAgICAgICAocHJvZzEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChudGhjZHIgbG9j YXRpb24gKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICA7 OyBEbyBub3QgcHJlcGVuZCBpZiBpbmRleCBpcyB0b28gbGFyZ2U6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgKHNldHEgYmVmb3JlIG5pbCkpCi0gICAgICAgICAgICAgICAgICAgICAob3IgKG1l bXEgbG9jYXRpb24gKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkKLSAgICAgICAgICAgICAgICAgICAg ICAgICA7OyBQcmVwZW5kIGlmIGBsb2NhdGlvbicgaXMgbm90IGZvdW5kIGFuZAotICAgICAgICAg ICAgICAgICAgICAgICAgIDs7IGBiZWZvcmUnIGlzIG5vbi1uaWw6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgKGFuZCBiZWZvcmUgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkpKQotICAgICAgICAg ICAgICAgICA7OyBJZiBgbG9jYXRpb24nIGlzIG5pbCBhbmQgYGJlZm9yZScgaXMgbm9uLW5pbCwg d2UKLSAgICAgICAgICAgICAgICAgOzsgcHJlcGVuZCB0aGUgbmV3IG9iamVjdC4KLSAgICAgICAg ICAgICAgICAgKGlmIGJlZm9yZSAodnRhYmxlLW9iamVjdHMgdGFibGUpKSkpKQotICAgICAgKGlm IChvciBiZWZvcmUgIDsgSWYgYGJlZm9yZScgaXMgbm9uLW5pbCwgYHBvcycgc2hvdWxkIGJlLCBh cyB3ZWxsLgotICAgICAgICAgICAgICAoYW5kIHBvcyAoaW50ZWdlcnAgbG9jYXRpb24pKSkKLSAg ICAgICAgICA7OyBBZGQgdGhlIG5ldyBvYmplY3QgYmVmb3JlLgotICAgICAgICAgIChsZXQgKChv bGQtb2JqZWN0IChjYXIgcG9zKSkpCi0gICAgICAgICAgICAoc2V0Y2FyIHBvcyBvYmplY3QpCi0g ICAgICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBvbGQtb2JqZWN0IChjZHIgcG9zKSkpKQotICAg ICAgICA7OyBPdGhlcndpc2UsIGFkZCB0aGUgb2JqZWN0IGFmdGVyLgotICAgICAgICAoaWYgcG9z Ci0gICAgICAgICAgICA7OyBTcGxpY2UgdGhlIG9iamVjdCBpbnRvIHRoZSBsaXN0LgotICAgICAg ICAgICAgKHNldGNkciBwb3MgKGNvbnMgb2JqZWN0IChjZHIgcG9zKSkpCi0gICAgICAgICAgOzsg T3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KLSAgICAgICAgICAobmNvbmMgKHZ0YWJsZS1v YmplY3RzIHRhYmxlKSAobGlzdCBvYmplY3QpKSkpKQotICAgIDs7IFRoZW4gYWRqdXN0IHRoZSBj YWNoZSBhbmQgZGlzcGxheS4KLSAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICh2dGFibGUtZ290 by10YWJsZSB0YWJsZSkKLSAgICAgIChsZXQqICgoY2FjaGUgKHZ0YWJsZS0tY3VycmVudC1jYWNo ZSkpCi0gICAgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCi0gICAgICAgICAgICAgKGtl eW1hcCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAna2V5bWFwKSkKLSAgICAgICAgICAgICAo ZWxsaXBzaXMgKGlmICh2dGFibGUtZWxsaXBzaXMgdGFibGUpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkK LSAgICAgICAgICAgICAgICAgICAgICAgICAiIikpCi0gICAgICAgICAgICAgKGVsbGlwc2lzLXdp ZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxsaXBzaXMpKQotICAgICAgICAgICAgIChsaW5lcyAo dnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpCi0gICAgICAgICAgICAgKGVsZW0gKGlmIGxvY2F0 aW9uICA7IFRoaXMgYmluZGluZyBtaXJyb3JzIHRoZSBiaW5kaW5nIG9mIGBwb3MnIGFib3ZlLgot ICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGludGVnZXJwIGxvY2F0aW9uKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG50aCBsb2NhdGlvbiBsaW5lcykKLSAgICAgICAgICAgICAgICAg ICAgICAgICAob3IgKGFzc3EgbG9jYXRpb24gbGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChhbmQgYmVmb3JlIChjYXIgbGluZXMpKSkpCi0gICAgICAgICAgICAgICAgICAgICAo aWYgYmVmb3JlIChjYXIgbGluZXMpKSkpCi0gICAgICAgICAgICAgKHBvcyAobWVtcSBlbGVtIGxp bmVzKSkKLSAgICAgICAgICAgICAobGluZSAoY29ucyBvYmplY3QgKHZ0YWJsZS0tY29tcHV0ZS1j YWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKSkpCi0gICAgICAgIChpZiAob3IgYmVmb3JlCisgICh3 aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgIDs7IElmIHRoZSB2 dGFibGUgaXMgZW1wdHksIGp1c3QgYWRkIHRoZSBvYmplY3QgYW5kIHJlZ2VuZXJhdGUgdGhlCisg ICAgOzsgdGFibGUuCisgICAgKGlmIChudWxsICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpCisgICAg ICAgIChwcm9nbgorICAgICAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGxpc3Qg b2JqZWN0KSkKKyAgICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlICh2 dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUgb2JqZWN0KSkKKyAgICAgICAgICAodnRh YmxlLWdvdG8tdGFibGUgdGFibGUpCisgICAgICAgICAgKHZ0YWJsZS1yZXZlcnQtY29tbWFuZCkp CisgICAgICA7OyBGaXJzdCBpbnNlcnQgaW50byB0aGUgb2JqZWN0cy4KKyAgICAgIChsZXQgKChw b3MgKGlmIGxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAoaWYgKGludGVnZXJwIGxvY2F0 aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9nMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobnRoY2RyIGxvY2F0aW9uICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICA7OyBEbyBub3QgcHJlcGVuZCBpZiBpbmRleCBpcyB0b28g bGFyZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBiZWZvcmUgbmlsKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgKG9yIChtZW1xIGxvY2F0aW9uICh2dGFibGUtb2JqZWN0cyB0 YWJsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBQcmVwZW5kIGlmIGBsb2NhdGlv bicgaXMgbm90IGZvdW5kIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgYGJlZm9y ZScgaXMgbm9uLW5pbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgYmVmb3JlICh2 dGFibGUtb2JqZWN0cyB0YWJsZSkpKSkKKyAgICAgICAgICAgICAgICAgICA7OyBJZiBgbG9jYXRp b24nIGlzIG5pbCBhbmQgYGJlZm9yZScgaXMgbm9uLW5pbCwgd2UKKyAgICAgICAgICAgICAgICAg ICA7OyBwcmVwZW5kIHRoZSBuZXcgb2JqZWN0LgorICAgICAgICAgICAgICAgICAgIChpZiBiZWZv cmUgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkpKSkKKyAgICAgICAgKGlmIChvciBiZWZvcmUgIDsg SWYgYGJlZm9yZScgaXMgbm9uLW5pbCwgYHBvcycgc2hvdWxkIGJlLCBhcyB3ZWxsLgogICAgICAg ICAgICAgICAgIChhbmQgcG9zIChpbnRlZ2VycCBsb2NhdGlvbikpKQotICAgICAgICAgICAgOzsg QWRkIHRoZSBuZXcgb2JqZWN0IGJlZm9yZTouCi0gICAgICAgICAgICAobGV0ICgob2xkLWxpbmUg KGNhciBwb3MpKSkKLSAgICAgICAgICAgICAgKHNldGNhciBwb3MgbGluZSkKLSAgICAgICAgICAg ICAgKHNldGNkciBwb3MgKGNvbnMgb2xkLWxpbmUgKGNkciBwb3MpKSkKLSAgICAgICAgICAgICAg KHVubGVzcyAodnRhYmxlLWdvdG8tb2JqZWN0IChjYXIgZWxlbSkpCi0gICAgICAgICAgICAgICAg KHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpKSkKKyAgICAgICAgICAgIDs7IEFkZCB0aGUgbmV3 IG9iamVjdCBiZWZvcmUuCisgICAgICAgICAgICAobGV0ICgob2xkLW9iamVjdCAoY2FyIHBvcykp KQorICAgICAgICAgICAgICAoc2V0Y2FyIHBvcyBvYmplY3QpCisgICAgICAgICAgICAgIChzZXRj ZHIgcG9zIChjb25zIG9sZC1vYmplY3QgKGNkciBwb3MpKSkpCiAgICAgICAgICAgOzsgT3RoZXJ3 aXNlLCBhZGQgdGhlIG9iamVjdCBhZnRlci4KICAgICAgICAgICAoaWYgcG9zCiAgICAgICAgICAg ICAgIDs7IFNwbGljZSB0aGUgb2JqZWN0IGludG8gdGhlIGxpc3QuCi0gICAgICAgICAgICAgIChw cm9nbgotICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3MpKSkK LSAgICAgICAgICAgICAgICAoaWYgKHZ0YWJsZS1nb3RvLW9iamVjdCBsb2NhdGlvbikKLSAgICAg ICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKSAgOyBJbnNlcnQgKmFmdGVyKi4KLSAgICAg ICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisgICAgICAgICAgICAgIChzZXRj ZHIgcG9zIChjb25zIG9iamVjdCAoY2RyIHBvcykpKQogICAgICAgICAgICAgOzsgT3RoZXJ3aXNl LCBhcHBlbmQgdGhlIG9iamVjdC4KLSAgICAgICAgICAgIChzZXRjYXIgY2FjaGUgKG5jb25jIGxp bmVzIChsaXN0IGxpbmUpKSkKLSAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCi0g ICAgICAgIChsZXQgKChzdGFydCAocG9pbnQpKSkKLSAgICAgICAgICA7OyBGSVhNRTogV2UgaGF2 ZSB0byBhZGp1c3QgY29sb3JzIGluIGxpbmVzIGJlbG93IHRoaXMgaWYgd2UKLSAgICAgICAgICA7 OyBoYXZlIDpyb3ctY29sb3JzLgotICAgICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxl IGxpbmUgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNhY2hlLXdp ZHRocyBjYWNoZSkgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVsbGlwc2lzIGVsbGlwc2lzLXdpZHRoKQotICAgICAgICAgIChhZGQtdGV4dC1w cm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tleW1hcCBrZXltYXAKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUgdGFibGUKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUt Y2FjaGUgY2FjaGUpKSkKLSAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQgYSBub24tbnVt ZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5Ci0gICAgICAgIDs7IGFsbC1udW1lcmljYWwg dGFibGUsIHNvIHJlY29tcHV0ZS4KLSAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNh bCB0YWJsZSAoY2RyIGxpbmUpKSkpKSkKKyAgICAgICAgICAgIChuY29uYyAodnRhYmxlLW9iamVj dHMgdGFibGUpIChsaXN0IG9iamVjdCkpKSkpCisgICAgICA7OyBUaGVuIGFkanVzdCB0aGUgY2Fj aGUgYW5kIGRpc3BsYXkuCisgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgKHZ0YWJsZS1n b3RvLXRhYmxlIHRhYmxlKQorICAgICAgICAobGV0KiAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQt Y2FjaGUpKQorICAgICAgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCisgICAgICAgICAg ICAgICAoa2V5bWFwIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdrZXltYXApKQorICAgICAg ICAgICAgICAgKGVsbGlwc2lzIChpZiAodnRhYmxlLWVsbGlwc2lzIHRhYmxlKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lz KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAodnRhYmxl LWZhY2UgdGFibGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpKQorICAgICAgICAg ICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxsaXBzaXMgKGN1cnJl bnQtYnVmZmVyKSkpCisgICAgICAgICAgICAgICAobGluZXMgKHZ0YWJsZS0tY2FjaGUtbGluZXMg Y2FjaGUpKQorICAgICAgICAgICAgICAgKGVsZW0gKGlmIGxvY2F0aW9uICA7IFRoaXMgYmluZGlu ZyBtaXJyb3JzIHRoZSBiaW5kaW5nIG9mIGBwb3MnIGFib3ZlLgorICAgICAgICAgICAgICAgICAg ICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChudGggbG9jYXRpb24gbGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAob3Ig KGFzc3EgbG9jYXRpb24gbGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFu ZCBiZWZvcmUgKGNhciBsaW5lcykpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGlmIGJlZm9y ZSAoY2FyIGxpbmVzKSkpKQorICAgICAgICAgICAgICAgKHBvcyAobWVtcSBlbGVtIGxpbmVzKSkK KyAgICAgICAgICAgICAgIChsaW5lIChjb25zIG9iamVjdCAodnRhYmxlLS1jb21wdXRlLWNhY2hl ZC1saW5lIHRhYmxlIG9iamVjdCkpKSkKKyAgICAgICAgICAoaWYgKG9yIGJlZm9yZQorICAgICAg ICAgICAgICAgICAgKGFuZCBwb3MgKGludGVnZXJwIGxvY2F0aW9uKSkpCisgICAgICAgICAgICAg IDs7IEFkZCB0aGUgbmV3IG9iamVjdCBiZWZvcmU6LgorICAgICAgICAgICAgICAobGV0ICgob2xk LWxpbmUgKGNhciBwb3MpKSkKKyAgICAgICAgICAgICAgICAoc2V0Y2FyIHBvcyBsaW5lKQorICAg ICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIG9sZC1saW5lIChjZHIgcG9zKSkpCisgICAg ICAgICAgICAgICAgKHVubGVzcyAodnRhYmxlLWdvdG8tb2JqZWN0IChjYXIgZWxlbSkpCisgICAg ICAgICAgICAgICAgICAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJsZSkpKQorICAgICAgICAgICAg OzsgT3RoZXJ3aXNlLCBhZGQgdGhlIG9iamVjdCBhZnRlci4KKyAgICAgICAgICAgIChpZiBwb3MK KyAgICAgICAgICAgICAgICA7OyBTcGxpY2UgdGhlIG9iamVjdCBpbnRvIHRoZSBsaXN0LgorICAg ICAgICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNvbnMg bGluZSAoY2RyIHBvcykpKQorICAgICAgICAgICAgICAgICAgKGlmICh2dGFibGUtZ290by1vYmpl Y3QgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKSAgOyBJ bnNlcnQgKmFmdGVyKi4KKyAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2YtdGFibGUp KSkKKyAgICAgICAgICAgICAgOzsgT3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KKyAgICAg ICAgICAgICAgKHNldGNhciBjYWNoZSAobmNvbmMgbGluZXMgKGxpc3QgbGluZSkpKQorICAgICAg ICAgICAgICAodnRhYmxlLWVuZC1vZi10YWJsZSkpKQorICAgICAgICAgIChsZXQgKChzdGFydCAo cG9pbnQpKSkKKyAgICAgICAgICAgIDs7IEZJWE1FOiBXZSBoYXZlIHRvIGFkanVzdCBjb2xvcnMg aW4gbGluZXMgYmVsb3cgdGhpcyBpZiB3ZQorICAgICAgICAgICAgOzsgaGF2ZSA6cm93LWNvbG9y cy4KKyAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxlIGxpbmUgMAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtd2lkdGhzIGNhY2hlKSAo dnRhYmxlLS1zcGFjZXIgdGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bGxpcHNpcyBlbGxpcHNpcy13aWR0aCkKKyAgICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVz IHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tleW1hcCBrZXltYXAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hl IGNhY2hlKSkpCisgICAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQgYSBub24tbnVtZXJp Y2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5CisgICAgICAgICAgOzsgYWxsLW51bWVyaWNhbCB0 YWJsZSwgc28gcmVjb21wdXRlLgorICAgICAgICAgICh2dGFibGUtLXJlY29tcHV0ZS1udW1lcmlj YWwgdGFibGUgKGNkciBsaW5lKSkpKSkpKQogCiAoZGVmdW4gdnRhYmxlLWNvbHVtbiAodGFibGUg aW5kZXgpCiAgICJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIElOREVYdGggY29sdW1uIGluIFRBQkxF LiIKQEAgLTUyMCwxNCArNTM4LDE0IEBAIHZ0YWJsZS0tY2FjaGUtd2lkdGhzCiAoZGVmdW4gdnRh YmxlLS1jYWNoZS1saW5lcyAoY2FjaGUpCiAgIChjYXIgY2FjaGUpKQogCi0oZGVmdW4gdnRhYmxl LWluc2VydCAodGFibGUpCisoZGVmdW4gdnRhYmxlLS1pbnNlcnQgKHRhYmxlKQogICAobGV0KiAo KHNwYWNlciAodnRhYmxlLS1zcGFjZXIgdGFibGUpKQogICAgICAgICAgKHN0YXJ0IChwb2ludCkp CiAgICAgICAgICAoZWxsaXBzaXMgKGlmICh2dGFibGUtZWxsaXBzaXMgdGFibGUpCiAgICAgICAg ICAgICAgICAgICAgICAgIChwcm9wZXJ0aXplICh0cnVuY2F0ZS1zdHJpbmctZWxsaXBzaXMpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlICh2dGFibGUtZmFjZSB0YWJs ZSkpCiAgICAgICAgICAgICAgICAgICAgICAiIikpCi0gICAgICAgICAoZWxsaXBzaXMtd2lkdGgg KHN0cmluZy1waXhlbC13aWR0aCBlbGxpcHNpcykpCisgICAgICAgICAoZWxsaXBzaXMtd2lkdGgg KHN0cmluZy1waXhlbC13aWR0aCBlbGxpcHNpcyAoY3VycmVudC1idWZmZXIpKSkKICAgICAgICAg IDs7IFdlIG1haW50YWluIGEgY2FjaGUgcGVyIHNjcmVlbi93aW5kb3cgd2lkdGgsIHNvIHRoYXQg d2UgcmVuZGVyCiAgICAgICAgICA7OyBjb3JyZWN0bHkgaWYgRW1hY3MgaXMgb3BlbiBvbiB0d28g ZGlmZmVyZW50IHNjcmVlbnMgKG9yIHRoZQogICAgICAgICAgOzsgdXNlciByZXNpemVzIHRoZSBm cmFtZSkuCkBAIC01NjUsOSArNTgzLDI0IEBAIHZ0YWJsZS1pbnNlcnQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hlIGNhY2hlKSkKICAgICAoZ290by1jaGFyIHN0 YXJ0KSkpCiAKKyhkZWZ1biB2dGFibGUtaW5zZXJ0ICh0YWJsZSkKKyAgIkluc2VydCBUQUJMRSBp bnRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KK1RoZSBjdXJyZW50IGJ1ZmZlciB3aWxsIGJlIHJlY29y ZGVkIGFzIFRBQkxFJ3MgYnVmZmVyLiAgSWYgdGhpcyBpcyBkb25lCittb3JlIHRoYW4gb25jZSwg b3IgaWYgdGhlIHRhYmxlIGlzIGF0dGVtcHRlZCB0byBiZSBpbnNlcnRlZCBtb3JlIHRoYW4KK29u Y2UgaW50byB0aGUgc2FtZSBidWZmZXIsIHNpZ25hbCBhbiBlcnJvci4iCisgIChpZi1sZXQqICgo dGFibGUtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkpCisgICAgICAoaWYgKGVxIHRhYmxl LWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQorICAgICAgICAgIChlcnJvciAiQSB2dGFibGUgY2Fu bm90IGJlIGluc2VydGVkIG1vcmUgdGhhbiBvbmNlIGludG8gYSBidWZmZXIiKQorICAgICAgICAo ZXJyb3IgIkEgdnRhYmxlIGNhbm5vdCBiZSBpbnNlcnRlZCBpbnRvIG1vcmUgdGhhbiBvbmUgYnVm ZmVyIikpKQorICAodnRhYmxlLXNldC1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSB0YWJsZSkKKyAg KGxldCAoKGluaGliaXQtcmVhZC1vbmx5IHQpCisgICAgICAgIChpbmhpYml0LW1vZGlmaWNhdGlv bi1ob29rcyB0KSkKKyAgICAodnRhYmxlLS1pbnNlcnQgdGFibGUpKSkKKwogKGRlZnVuIHZ0YWJs ZS0taW5zZXJ0LWxpbmUgKHRhYmxlIGxpbmUgbGluZS1udW1iZXIgd2lkdGhzIHNwYWNlcgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBlbGxpcHNpcyBlbGxpcHNp cy13aWR0aCkKICAgKGxldCAoKHN0YXJ0IChwb2ludCkpCisgICAgICAgIChidWZmZXIgKHZ0YWJs ZS1idWZmZXIgdGFibGUpKQogICAgICAgICAoY29sdW1ucyAodnRhYmxlLWNvbHVtbnMgdGFibGUp KQogICAgICAgICAoY29sdW1uLWNvbG9ycwogICAgICAgICAgKGFuZCAodnRhYmxlLWNvbHVtbi1j b2xvcnMgdGFibGUpCkBAIC02MDcsMTYgKzY0MCwxOCBAQCB2dGFibGUtLWluc2VydC1saW5lCiAg ICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdAogICAgICAgICAgICAgICAgICAgICAgICAodnRh YmxlLS1saW1pdC1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIHByZS1jb21wdXRlZCAo LSAoZWx0IHdpZHRocyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAob3IgZWxsaXBzaXMtd2lkdGggMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAwKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMpCiAgICAgICAgICAg ICAgICAgICAgIHByZS1jb21wdXRlZCkpCiAgICAgICAgICAgICAgICAgIDs7IFJlY29tcHV0ZSB3 aWR0aHMuCiAgICAgICAgICAgICAgICAgICh0Ci0gICAgICAgICAgICAgICAgICAoaWYgKD4gKHN0 cmluZy1waXhlbC13aWR0aCB2YWx1ZSkgKGVsdCB3aWR0aHMgaW5kZXgpKQorICAgICAgICAgICAg ICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggdmFsdWUgYnVmZmVyKSAoZWx0IHdpZHRo cyBpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdAogICAgICAgICAgICAgICAg ICAgICAgICAodnRhYmxlLS1saW1pdC1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIHZh bHVlICgtIChlbHQgd2lkdGhzIGluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKG9yIGVsbGlwc2lzLXdpZHRoIDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChvciBlbGxpcHNpcy13aWR0aCAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl cikKICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMpCiAgICAgICAgICAgICAgICAgICAg IHZhbHVlKSkpKQogICAgICAgICAgICAgICAgKHN0YXJ0IChwb2ludCkpCkBAIC02MzAsMTQgKzY2 NSwxNSBAQCB2dGFibGUtLWluc2VydC1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChs aXN0ICdzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6d2lkdGggKGxpc3QK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKyAoLSAoZWx0IHdpZHRo cyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLXBpeGVsLXdpZHRoIGRpc3BsYXllZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQgYnVmZmVyKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgbGFzdCAwIHNwYWNlcikp KSkpKSkKICAgICAgICAgICAgICA7OyBBbGlnbiB0byB0aGUgcmlnaHQuCiAgICAgICAgICAgICAg KGluc2VydCAocHJvcGVydGl6ZSAiICIgJ2Rpc3BsYXkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsaXN0ICdzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOndpZHRoIChsaXN0ICgtIChlbHQgd2lkdGhzIGluZGV4KQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lk dGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGlzcGxheWVkKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGlzcGxheWVkIGJ1ZmZlcikpKSkpCiAgICAgICAgICAgICAgICAg ICAgICBkaXNwbGF5ZWQpCiAgICAgICAgICAgICAgKHVubGVzcyBsYXN0CiAgICAgICAgICAgICAg ICAoaW5zZXJ0IChwcm9wZXJ0aXplICIgIiAnZGlzcGxheQpAQCAtNzE4LDYgKzc1NCw3IEBAIHZ0 YWJsZS0taW5kaWNhdG9yCiAoZGVmdW4gdnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUgKHRhYmxl IHdpZHRocyBzcGFjZXIpCiAgIDs7IEluc2VydCB0aGUgaGVhZGVyIGRpcmVjdGx5IGludG8gdGhl IGJ1ZmZlci4KICAgKGxldCAoKHN0YXJ0IChwb2ludCkpCisgICAgICAgIChidWZmZXIgKHZ0YWJs ZS1idWZmZXIgdGFibGUpKQogICAgICAgICAoZGl2aWRlciAodnRhYmxlLWRpdmlkZXIgdGFibGUp KQogICAgICAgICAoY21hcCAoZGVmaW5lLWtleW1hcAogICAgICAgICAgICAgICAgICI8aGVhZGVy LWxpbmU+IDxkcmFnLW1vdXNlLTE+IiAjJ3Z0YWJsZS0tZHJhZy1yZXNpemUtY29sdW1uCkBAIC03 MzcsMTQgKzc3NCwxNSBAQCB2dGFibGUtLWluc2VydC1oZWFkZXItbGluZQogICAgICAgICAgICAg ICAgICAgICAgJ2tleW1hcCBjbWFwKSkKICAgICAgICAgICAgICAgKHN0YXJ0IChwb2ludCkpCiAg ICAgICAgICAgICAgIChpbmRpY2F0b3IgKHZ0YWJsZS0taW5kaWNhdG9yIHRhYmxlIGluZGV4KSkK LSAgICAgICAgICAgICAgKGluZGljYXRvci13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGluZGlj YXRvcikpCisgICAgICAgICAgICAgIChpbmRpY2F0b3Itd2lkdGggKHN0cmluZy1waXhlbC13aWR0 aCBpbmRpY2F0b3IgYnVmZmVyKSkKICAgICAgICAgICAgICAgKGxhc3QgKD0gaW5kZXggKDEtIChs ZW5ndGggKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkpKSkKICAgICAgICAgICAgICAgZGlzcGxheWVk KQogICAgICAgICAgKHNldHEgZGlzcGxheWVkCi0gICAgICAgICAgICAgICAoaWYgKD4gKHN0cmlu Zy1waXhlbC13aWR0aCBuYW1lKQorICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwt d2lkdGggbmFtZSBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAgICAgKC0gKGVsdCB3aWR0aHMg aW5kZXgpIGluZGljYXRvci13aWR0aCkpCiAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGlt aXQtc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIG5hbWUgKC0gKGVsdCB3aWR0aHMgaW5kZXgp IGluZGljYXRvci13aWR0aCkpCisgICAgICAgICAgICAgICAgICAgIG5hbWUgKC0gKGVsdCB3aWR0 aHMgaW5kZXgpIGluZGljYXRvci13aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyKQog ICAgICAgICAgICAgICAgICBuYW1lKSkKICAgICAgICAgIChsZXQqICgoaW5kaWNhdG9yLWxlYWQt d2lkdGgKICAgICAgICAgICAgICAgICAgOzsgV2Ugd2FudCB0aGUgaW5kaWNhdG9yIHRvIG5vdCBi ZSBxdWl0ZSBmbHVzaCByaWdodC4KQEAgLTc1Myw3ICs3OTEsNyBAQCB2dGFibGUtLWluc2VydC1o ZWFkZXItbGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGlj YXRvci1sZWFkLXdpZHRoKSkKICAgICAgICAgICAgICAgICAoZmlsbC13aWR0aAogICAgICAgICAg ICAgICAgICAoKyAoLSAoZWx0IHdpZHRocyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAg KHN0cmluZy1waXhlbC13aWR0aCBkaXNwbGF5ZWQpCisgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctcGl4ZWwtd2lkdGggZGlzcGxheWVkIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAg ICAgaW5kaWNhdG9yLXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvci1sZWFk LXdpZHRoKQogICAgICAgICAgICAgICAgICAgICAoaWYgbGFzdCAwIHNwYWNlcikpKSkKQEAgLTc3 MSw3ICs4MDksOCBAQCB2dGFibGUtLWluc2VydC1oZWFkZXItbGluZQogICAgICAgICAgICAgIDs7 IFRoaXMgaXMgdGhlIGZpbmFsIGNvbHVtbiwgYW5kIHdlIGhhdmUgYSBzb3J0aW5nCiAgICAgICAg ICAgICAgOzsgaW5kaWNhdG9yLCBhbmQgdGhlIHRhYmxlIGlzIHRvbyB3aWRlIGZvciB0aGUgd2lu ZG93LgogICAgICAgICAgICAgIChsZXQqICgocHJlLWluZGljYXRvciAoc3RyaW5nLXBpeGVsLXdp ZHRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmlu ZyAocG9pbnQtbWluKSAocG9pbnQpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtbWluKSAocG9pbnQpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgKHBy ZS1maWxsCiAgICAgICAgICAgICAgICAgICAgICAoLSAod2luZG93LXdpZHRoIG5pbCB0KQogICAg ICAgICAgICAgICAgICAgICAgICAgcHJlLWluZGljYXRvcgpAQCAtODUwLDE0ICs4ODksMTYgQEAg dnRhYmxlLS1zZXQtaGVhZGVyLWxpbmUKICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBv aW50LW1pbikgKDEtIChwb2ludC1tYXgpKSkpKSkKICAgKHZ0YWJsZS1oZWFkZXItbW9kZSAxKSkK IAotKGRlZnVuIHZ0YWJsZS0tbGltaXQtc3RyaW5nIChzdHJpbmcgcGl4ZWxzKQorCisoZGVmdW4g dnRhYmxlLS1saW1pdC1zdHJpbmcgKHN0cmluZyBwaXhlbHMgYnVmZmVyKQogICAod2hpbGUgKGFu ZCAobGVuZ3RoPiBzdHJpbmcgMCkKLSAgICAgICAgICAgICAgKD4gKHN0cmluZy1waXhlbC13aWR0 aCBzdHJpbmcpIHBpeGVscykpCisgICAgICAgICAgICAgICg+IChzdHJpbmctcGl4ZWwtd2lkdGgg c3RyaW5nIGJ1ZmZlcikgcGl4ZWxzKSkKICAgICAoc2V0cSBzdHJpbmcgKHN1YnN0cmluZyBzdHJp bmcgMCAoMS0gKGxlbmd0aCBzdHJpbmcpKSkpKQogICBzdHJpbmcpCiAKIChkZWZ1biB2dGFibGUt LWNoYXItd2lkdGggKHRhYmxlKQotICAoc3RyaW5nLXBpeGVsLXdpZHRoIChwcm9wZXJ0aXplICJ4 IiAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKSkpCisgIChzdHJpbmctcGl4ZWwtd2lkdGggKHBy b3BlcnRpemUgIngiICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCisgICAgICAgICAgICAgICAg ICAgICAgKHZ0YWJsZS1idWZmZXIgdGFibGUpKSkKIAogKGRlZnVuIHZ0YWJsZS0tY29tcHV0ZS13 aWR0aCAodGFibGUgc3BlYykKICAgKGNvbmQKQEAgLTk2NywyMCArMTAwOCwyNCBAQCB2dGFibGUt LW1ha2Uta2V5bWFwCiAgICAgICAgICAgKHZ0YWJsZS1rZXltYXAgdGFibGUpKQogICAgICAgbWFw KSkpCiAKLShkZWZ1biB2dGFibGUtcmV2ZXJ0ICgpCi0gICJSZWdlbmVyYXRlIHRoZSB0YWJsZSB1 bmRlciBwb2ludC4iCi0gIChsZXQgKCh0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQotICAg ICAgICAob2JqZWN0ICh2dGFibGUtY3VycmVudC1vYmplY3QpKQotICAgICAgICAoY29sdW1uICh2 dGFibGUtY3VycmVudC1jb2x1bW4pKQotICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCi0g ICAgKHVubGVzcyB0YWJsZQotICAgICAgKHVzZXItZXJyb3IgIk5vIHRhYmxlIHVuZGVyIHBvaW50 IikpCi0gICAgKGRlbGV0ZS1yZWdpb24gKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpICh2dGFi bGUtZW5kLW9mLXRhYmxlKSkKLSAgICAodnRhYmxlLWluc2VydCB0YWJsZSkKLSAgICAod2hlbiBv YmplY3QKLSAgICAgICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0KSkKLSAgICAod2hlbiBjb2x1 bW4KLSAgICAgICh2dGFibGUtZ290by1jb2x1bW4gY29sdW1uKSkpKQorKGRlZnVuIHZ0YWJsZS1y ZXZlcnQgKCZvcHRpb25hbCB0YWJsZSkKKyAgIlJlZ2VuZXJhdGUgdGhlIHRhYmxlIHVuZGVyIHBv aW50LgorSWYgVEFCTEUgaXMgbmlsLCB1c2UgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKKyAgKHNl dHEgdGFibGUgKG9yIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpKQorICAodW5sZXNzIHRh YmxlCisgICAgKHVzZXItZXJyb3IgIk5vIHRhYmxlIGZvdW5kIikpCisgICh3aXRoLWN1cnJlbnQt YnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgIChsZXQgKChvYmplY3QgKHZ0YWJsZS1j dXJyZW50LW9iamVjdCkpCisgICAgICAgICAgKGNvbHVtbiAodnRhYmxlLWN1cnJlbnQtY29sdW1u KSkKKyAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCisgICAgICAodW5sZXNzIHRhYmxl CisgICAgICAgICh1c2VyLWVycm9yICJObyB0YWJsZSB1bmRlciBwb2ludCIpKQorICAgICAgKGRl bGV0ZS1yZWdpb24gKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpICh2dGFibGUtZW5kLW9mLXRh YmxlKSkKKyAgICAgICh2dGFibGUtLWluc2VydCB0YWJsZSkKKyAgICAgICh3aGVuIG9iamVjdAor ICAgICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkpCisgICAgICAod2hlbiBjb2x1bW4K KyAgICAgICAgKHZ0YWJsZS1nb3RvLWNvbHVtbiBjb2x1bW4pKSkpKQogCiA7OzsgQ29tbWFuZHMu CiAKQEAgLTEwMTMsNyArMTA1OCw3IEBAIHZ0YWJsZS0tYWx0ZXItY29sdW1uLXdpZHRoCiAgICAg OzsgU3RvcmUgdGhlIHdpZHRoIHNvIGl0J2xsIGJlIHJlc3BlY3RlZCBvbiBhIHJldmVydC4KICAg ICAoc2V0ZiAodnRhYmxlLWNvbHVtbi13aWR0aCAoZWx0ICh2dGFibGUtY29sdW1ucyB0YWJsZSkg Y29sdW1uKSkKICAgICAgICAgICAoZm9ybWF0ICIlZHB4IiAoYXJlZiB3aWR0aHMgY29sdW1uKSkp Ci0gICAgKHZ0YWJsZS1yZXZlcnQpKSkKKyAgICAodnRhYmxlLXJldmVydCB0YWJsZSkpKQogCiAo ZGVmdW4gdnRhYmxlLXdpZGVuLWN1cnJlbnQtY29sdW1uICgmb3B0aW9uYWwgbikKICAgIldpZGVu IHRoZSBjdXJyZW50IGNvbHVtbiBieSBOIGNoYXJhY3RlcnMuCkBAIC0xMDM4LDE0ICsxMDgzLDE2 IEBAIHZ0YWJsZS1uZXh0LWNvbHVtbgogICAgICAobWluICgxLSAobGVuZ3RoICh2dGFibGUtLWNh Y2hlLXdpZHRocyAodnRhYmxlLS1jdXJyZW50LWNhY2hlKSkpKQogICAgICAgICAgICgxKyAodnRh YmxlLWN1cnJlbnQtY29sdW1uKSkpKSkpCiAKLShkZWZ1biB2dGFibGUtcmV2ZXJ0LWNvbW1hbmQg KCkKKyhkZWZ1biB2dGFibGUtcmV2ZXJ0LWNvbW1hbmQgKCZvcHRpb25hbCB0YWJsZSkKICAgIlJl LXF1ZXJ5IGRhdGEgYW5kIHJlZ2VuZXJhdGUgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKICAgKGlu dGVyYWN0aXZlKQotICAobGV0ICgodGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCi0gICAg KHdoZW4gKHZ0YWJsZS1vYmplY3RzLWZ1bmN0aW9uIHRhYmxlKQotICAgICAgKHNldGYgKHZ0YWJs ZS1vYmplY3RzIHRhYmxlKSAoZnVuY2FsbCAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUp KSkpCi0gICAgKHZ0YWJsZS0tY2xlYXItY2FjaGUgdGFibGUpKQotICAodnRhYmxlLXJldmVydCkp CisgIChzZXRxIHRhYmxlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKKyAgKHVu bGVzcyB0YWJsZQorICAgICh1c2VyLWVycm9yICJObyB0YWJsZSBmb3VuZCIpKQorICAod2hlbiAo dnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpCisgICAgKHNldGYgKHZ0YWJsZS1vYmplY3Rz IHRhYmxlKSAoZnVuY2FsbCAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpKSkpCisgICh2 dGFibGUtLWNsZWFyLWNhY2hlIHRhYmxlKQorICAodnRhYmxlLXJldmVydCB0YWJsZSkpCiAKIChk ZWZ1biB2dGFibGUtc29ydC1ieS1jdXJyZW50LWNvbHVtbiAoKQogICAiU29ydCB0aGUgdGFibGUg dW5kZXIgcG9pbnQgYnkgdGhlIGNvbHVtbiB1bmRlciBwb2ludC4iCkBAIC0xMDY3LDggKzExMTQs OCBAQCB2dGFibGUtc29ydC1ieS1jdXJyZW50LWNvbHVtbgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChpZiAoZXEgKGNkciBsYXN0KSAnYXNjZW5kKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnZGVzY2VuZAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2FzY2VuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fz Y2VuZCkpKSkpKQotICAodnRhYmxlLXJldmVydCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdhc2NlbmQpKSkpKQorICAgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkpCiAKIChkZWZ1 biB2dGFibGUtaGVhZGVyLWxpbmUtc29ydCAoZSkKICAgIlNvcnQgYSB2dGFibGUgZnJvbSB0aGUg aGVhZGVyIGxpbmUuIgpkaWZmIC0tZ2l0IGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRl c3RzLmVsIGIvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsCmluZGV4IDc0ZmI4 Y2M4MTM5Li44M2Y4MjZlYTM1MyAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRh YmxlLXRlc3RzLmVsCisrKyBiL3Rlc3QvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbApA QCAtMjcsMTYgKzI3LDE5IEBACiAocmVxdWlyZSAnZXJ0KQogKHJlcXVpcmUgJ2VydC14KQogCi0o ZXJ0LWRlZnRlc3QgdGVzdC12c3RhYmxlLWNvbXB1dGUtY29sdW1ucyAoKQorKGRlZnVuIHZ0YWJs ZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1vYmplY3QtdGFibGUgKCkKKyAgKG1ha2UtdnRhYmxl IDpjb2x1bW5zICcoImEiICJiIiAiYyIpCisgICAgICAgICAgICAgICA6b2JqZWN0cyAnKCgiZm9v IiAxIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICgiYmFyIiAzIDp6b3QpKQorICAgICAg ICAgICAgICAgOmluc2VydCBuaWwpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtY29tcHV0 ZS1jb2x1bW5zICgpCiAgIChzaG91bGQKICAgIChlcXVhbCAobWFwY2FyCiAgICAgICAgICAgIChs YW1iZGEgKGNvbHVtbikKICAgICAgICAgICAgICAodnRhYmxlLWNvbHVtbi1hbGlnbiBjb2x1bW4p KQogICAgICAgICAgICAodnRhYmxlLS1jb21wdXRlLWNvbHVtbnMKLSAgICAgICAgICAgIChtYWtl LXZ0YWJsZSA6Y29sdW1ucyAnKCJhIiAiYiIgImMiKQotICAgICAgICAgICAgICAgICAgICAgICAg IDpvYmplY3RzICcoKCJmb28iIDEgMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgiYmFyIiAzIDp6b3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgIDppbnNlcnQgbmls KSkpCisgICAgICAgICAgICAodnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0yLW9iamVjdC10 YWJsZSkpKQogICAgICAgICAgICcobGVmdCByaWdodCBsZWZ0KSkpKQogCiAoZXJ0LWRlZnRlc3Qg dGVzdC12dGFibGUtaW5zZXJ0LW9iamVjdCAoKQpAQCAtNjksNCArNzIsNjkgQEAgdGVzdC12dGFi bGUtaW5zZXJ0LW9iamVjdAogICAgICAgICAgICAgICAobWFwY2FyICMnY2FkciAodnRhYmxlLW9i amVjdHMgdGFibGUpKSkpCiAgICAgICAgICAgKG51bWJlci1zZXF1ZW5jZSAwIDExKSkpKQogCiso ZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtdW5pcXVlLWJ1ZmZlciAoKQorICAobGV0ICgodGFibGUg KHZ0YWJsZS10ZXN0cy0tbWFrZS1uby1oZWFkZXItMi1vYmplY3QtdGFibGUpKSkKKyAgICAod2l0 aC10ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJsZS1pbnNlcnQgdGFibGUpCisgICAgICA7OyBUaGlz IHdpbGwgcnVuIGJ1dCBmYWlsIG9uIEVtYWNzIHByZSAzMSB2dGFibGUuCisgICAgICAoc2hvdWxk LWVycm9yICh2dGFibGUtaW5zZXJ0IHRhYmxlKSkKKyAgICAgIDs7IFRoaXMgd2lsbCBydW4gb25s eSBvbiBFbWFjcyAzMSsgdnRhYmxlLgorICAgICAgKHdoZW4gKD4gZW1hY3MtbWFqb3ItdmVyc2lv biAzMCkKKyAgICAgICAgKHNob3VsZC1lcnJvciAodnRhYmxlLXNldC1idWZmZXIgdGFibGUgKGN1 cnJlbnQtYnVmZmVyKSkpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtbm9uLWN1cnJl bnQtYnVmZmVyLWluc2VydC1vYmplY3QgKCkKKyAgKGxldCAoKHRhYmxlICh2dGFibGUtdGVzdHMt LW1ha2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxlKSkKKyAgICAgICAgKG9iaiAnKCJiYXoiIDQg NSkpKQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkK KyAgICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAy KSkKKyAgICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAgICh2dGFibGUtaW5zZXJ0LW9iamVj dCB0YWJsZSBvYmopKQorICAgICAgKHNob3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikg KHBvaW50LW1heCkpIDMpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtbm9uLWN1cnJl bnQtYnVmZmVyLXJlbW92ZS1vYmplY3QgKCkKKyAgKGxldCAoKHRhYmxlICh2dGFibGUtdGVzdHMt LW1ha2Utbm8taGVhZGVyLTItb2JqZWN0LXRhYmxlKSkKKyAgICAgICAgKG9iaiAnKCJiYXoiIDQg NSkpKQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkK KyAgICAgICh2dGFibGUtaW5zZXJ0LW9iamVjdCB0YWJsZSBvYmopCisgICAgICAoc2hvdWxkICg9 IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMykpCisgICAgICAod2l0aC10 ZW1wLWJ1ZmZlcgorICAgICAgICAodnRhYmxlLXJlbW92ZS1vYmplY3QgdGFibGUgb2JqKSkKKyAg ICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSAyKSkp KSkKKworKGVydC1kZWZ0ZXN0IHRlc3QtdnRhYmxlLW5vbi1jdXJyZW50LWJ1ZmZlci11cGRhdGUt b2JqZWN0ICgpCisgIChsZXQgKCh0YWJsZSAodnRhYmxlLXRlc3RzLS1tYWtlLW5vLWhlYWRlci0y LW9iamVjdC10YWJsZSkpCisgICAgICAgIChvYmogJygiYmF6IiA0IDUpKQorICAgICAgICAob2Jq LTIgJygicXV4IiA2IDcpKSkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKHZ0YWJsZS1p bnNlcnQgdGFibGUpCisgICAgICAodnRhYmxlLWluc2VydC1vYmplY3QgdGFibGUgb2JqKQorICAg ICAgKHNob3VsZCAoPSAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDMpKQor ICAgICAgKGxldCAoKGxpbmUtMiAocHJvZ24KKyAgICAgICAgICAgICAgICAgICAgICAoZ290by1j aGFyIChwb2ludC1taW4pKQorICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMikK KyAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQpIChwb2ludC1t YXgpKSkpKQorICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAgICh2dGFibGUtdXBk YXRlLW9iamVjdCB0YWJsZSBvYmotMiBvYmopKQorICAgICAgICAobGV0ICgobGluZS0yLW5ldyAo cHJvZ24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4p KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQpIChwb2ludC1tYXgp KSkpKQorICAgICAgICAgIChzaG91bGQgKD0gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2lu dC1tYXgpKSAzKSkKKyAgICAgICAgICAoc2hvdWxkIChub3QgKHN0cmluZz0gbGluZS0yIGxpbmUt Mi1uZXcpKSkpKSkpKQorCisoZXJ0LWRlZnRlc3QgdGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13 aXRoLWZhY2UtcmVtYXBwZWQtYnVmZmVyICgpCisgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgKGxl dCAoKHRleHQgKHByb3BlcnRpemUgIlhYWFhYIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdmYWNlICd2YXJpYWJsZS1waXRjaCkpKQorICAgICAgKGZhY2UtcmVtYXAtYWRkLXJlbGF0aXZl ICdkZWZhdWx0IDpoZWlnaHQgMS41KQorICAgICAgKGlmICg+IGVtYWNzLW1ham9yLXZlcnNpb24g MzApCisgICAgICAgICAgKHNob3VsZCAoZXEKKyAgICAgICAgICAgICAgICAgICAyCisgICAgICAg ICAgICAgICAgICAgKGxlbmd0aCAodnRhYmxlLS1saW1pdC1zdHJpbmcgdGV4dCA1MCAoY3VycmVu dC1idWZmZXIpKSkpKQorICAgICAgICAoc2hvdWxkIChlcQorICAgICAgICAgICAgICAgICAyCisg ICAgICAgICAgICAgICAgIChsZW5ndGggKHZ0YWJsZS0tbGltaXQtc3RyaW5nIHRleHQgNTApKSkp KSkpKQorCiA7OzsgdnRhYmxlLXRlc3RzLmVsIGVuZHMgaGVyZQotLSAKMi40Ny4xCgo= --0000000000003c79da06459cab30--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 10 Dec 2025 15:12:10 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 10 10:12:09 2025 Received: from localhost ([127.0.0.1]:34735 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vTLrN-0006uu-Iv for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 10:12:09 -0500 Received: from mxout5.mail.janestreet.com ([64.215.233.18]:33299) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>) id 1vTLrK-0006u3-JZ for 79982 <at> debbugs.gnu.org; Wed, 10 Dec 2025 10:12:07 -0500 From: Spencer Baugh <sbaugh@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot In-Reply-To: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> (=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Wed, 10 Dec 2025 09:54:36 -0500") References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> Date: Wed, 10 Dec 2025 10:12:00 -0500 Message-ID: <iero6o6s75r.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=waixah; t=1765379520; bh=xc7IzzgbRGqBegkqxy0CANomzqM9Kbg+b7X679AUff0=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=zpk5wyrTalgbjlocimiFm2xD6VMDcCaJKitWImqbbMgtk/T3+O5ugCwlz3GqgSdqo morx48hIbXPKI6PEqjY/vERxpTynciwGmDEAG/V1JBQH4DMSjjJ/k3OZ59yUVmt/e+ GW3Asu+5OV2eD/dlQq/B/Yt6oFXHnj09jRJIzkQd5mmTBPHjcISNDZ4+HV5jWK4Rd7 2WjGQzsnDS+r4nnIrrOfkLTmDjPI7fFM1ZGoxcyxdzkxK5NX1en/phLDv+/NrB28nL CxxdQ/JACHTT5npSixxW8/dzwqoVjQaWqVP8VYQRAYN0h3YBiayNL2mnEAyomQIGHQ C6cAwJLfKnDMQ== X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 79982 Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, 79982 <at> debbugs.gnu.org, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.7 (-) St=C3=A9phane Marks <shipmints@HIDDEN> writes: > This solves for background vtable mutations, i.e., updates initiated from= buffers other than the vtable buffer, and for > buffer-adjusted string-pixel-width computations. > > Many more patches for fixes and enhancements coming on the back of this o= ne, once agreed. I'd love to see all of these in Emacs > 31 and I'm now generally available to pick up the pace. > > P.S. I've cc'd the same group as the last vtable discussions/patches. If= you do not want to be cc'd on these, let me know. > > -St=C3=A9phane=20 Please add a test which passes with this patch and doesn't pass without this patch.
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at 79982) by debbugs.gnu.org; 10 Dec 2025 14:59:59 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 10 09:59:59 2025 Received: from localhost ([127.0.0.1]:34676 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vTLfa-00065t-TL for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 09:59:59 -0500 Received: from mail-ua1-x929.google.com ([2607:f8b0:4864:20::929]:45480) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vTLfX-00065Z-UZ for 79982 <at> debbugs.gnu.org; Wed, 10 Dec 2025 09:59:56 -0500 Received: by mail-ua1-x929.google.com with SMTP id a1e0cc1a2514c-9372310418bso1954794241.3 for <79982 <at> debbugs.gnu.org>; Wed, 10 Dec 2025 06:59:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765378790; x=1765983590; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1v3Yp2vx+D66oBRANm+V9mHW3XIpD548mGP51HQ3w/Q=; b=Cu/iPPZnX3I7UpasQHX9RVnVq8VztZA8w8AyJjO+5JuUJUmD6zP8PKo3K0np4Lulm/ 79BNgBfbLmix45awcJZArrTCSb/pH9T8NQMSwKHEqozokqk5plfQmfGsOugi/Cev1ebf /gl9decUIA2GBMEpPowSOEI8qvJjeVPYAEhmH8cZOD9sn97IHkTzh3o6dBy0unIWIWcS 0CD4XXtSNvBTwipmHDdE2/ubH4aSit/RUpK5ULNNcpmvn16UaCsZc3HmY20r4Ks2sZkQ +F/RHIXvD5yJUpCsQT1y+0I/YukUxU2aqjHRqdSABFY6+rCEGCBH1z4iVKL6IOeAn3+z +ZrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765378790; x=1765983590; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=1v3Yp2vx+D66oBRANm+V9mHW3XIpD548mGP51HQ3w/Q=; b=Bjp1+eu8YCOCl2CQLIrcpC0LvYH4M4T/lZALEWmMNA2k1SSJlAFyJyicR0nqhgPL6y 2vhZan5gttYJ3YdmNyof+FcAZXFTPaq3GcWcXppQFzii6tCgP/QTjvJGX6SRJC4vdYFl Sd4Fmctc23Rjh8S0cQTB1lPS9sHmW3Y2cHGtEv4y921aOm3XxBl8uaAAkr7Mr1L9hS8z SHkE/GZ6gcQQUwzUjMm9/ztvK1jgNyybW4XP36RL5ndVif70tcdSH7IPf3FKy2uwTMZn A9ONpBDiSyVuWLEhtEDK8nfnNciaUyzJS+TZpt9+BXGl3C0d/nPbwcr144ax3KjouSGE N7lA== X-Gm-Message-State: AOJu0Yz/1HjGUa2Wpkv2+vt2vOeRsaq7DdT/Nh60r4AmKBHD9lCdELTk 1vBKYALiKrS9FLqN6JNNayMXW3iS2P51JFJW4dY6VtV1GSsXepK+1StGf9qdy9zyPE/kEwqfco7 8fw/9bl3PRH7OMy6etnkq+iS9gm69bAQ9Hw== X-Gm-Gg: AY/fxX7yilAWloGExnaW1qt6uRzmPdT28Z+ZArPXQAdkneGqWJJo10M1z3Pt0Gc2thq c+K3yIoIOquCcOGXqvR9OuxicYgPEn6Cjd0rmapp5YJTOApZ4GaavzQ0gDEIi69YY3meSGXeyBJ 9k/vl5fCgEce5UzqIscmrBhKUZU12pTswt95QVHNQYcp1aJQb0HIYvb2U2Kd8hisPF8HzymWzFl gtcSOANl0AKN4zpDqBr7roZnoqobLfMqvrql4FXycOsenFgkGo3L3JUqSB/ebxy5qI0tY8= X-Google-Smtp-Source: AGHT+IErIrGj5527PHuv7OSD35J4DkX4mDyZ2A53OJ2PidERWF7Gie3F9lvDx7KyWo8eVNhcFrwojQ4uu49GQDK1mBk= X-Received: by 2002:a05:6102:161e:b0:5d5:dbbb:5b86 with SMTP id ada2fe7eead31-5e571bcd008mr764931137.25.1765378789904; Wed, 10 Dec 2025 06:59:49 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> In-Reply-To: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Wed, 10 Dec 2025 09:59:37 -0500 X-Gm-Features: AQt7F2rbW9bCHpRfCkeGK14Q107-Bu7tH1Q1T_anRnIa_C3JXaycXiFaUCVdQp8 Message-ID: <CAN+1HbotdsYfYydMe5HKzr1-16=OY0Qgg6wqhxFy7TWGo8Hsug@HIDDEN> Subject: Re: bug#79982: [PATCH] Add vtable buffer slot To: 79982 <at> debbugs.gnu.org Content-Type: multipart/alternative; boundary="000000000000aa937106459a4714" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79982 Cc: Spencer Baugh <sbaugh@HIDDEN>, Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000aa937106459a4714 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable + Spencer (now in my copy/paste list) On Wed, Dec 10, 2025 at 9:55=E2=80=AFAM St=C3=A9phane Marks <shipmints@gmai= l.com> wrote: > This solves for background vtable mutations, i.e., updates initiated from > buffers other than the vtable buffer, and for buffer-adjusted > string-pixel-width computations. > > Many more patches for fixes and enhancements coming on the back of this > one, once agreed. I'd love to see all of these in Emacs 31 and I'm now > generally available to pick up the pace. > > P.S. I've cc'd the same group as the last vtable discussions/patches. If > you do not want to be cc'd on these, let me know. > > -St=C3=A9phane > --000000000000aa937106459a4714 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac= e">+ Spencer (now in my copy/paste list)<br></div></div><br><div class=3D"g= mail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On = Wed, Dec 10, 2025 at 9:55=E2=80=AFAM St=C3=A9phane Marks <<a href=3D"mai= lto:shipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:<br></div><block= quote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1= px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div class=3D"= gmail_default" style=3D"font-family:monospace">This solves for background v= table mutations, i.e., updates initiated from buffers other than the vtable= buffer, and for buffer-adjusted string-pixel-width computations.<br></div>= <div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><div= class=3D"gmail_default" style=3D"font-family:monospace">Many more patches = for fixes and enhancements coming on the back of this one, once agreed.=C2= =A0 I'd love to see all of these in Emacs 31 and I'm now generally = available to pick up the pace.</div><div class=3D"gmail_default" style=3D"f= ont-family:monospace"><br></div><div class=3D"gmail_default" style=3D"font-= family:monospace">P.S. I've cc'd the same group as the last vtable = discussions/patches.=C2=A0 If you do not want to be cc'd on these, let = me know.</div><div class=3D"gmail_default" style=3D"font-family:monospace">= <br></div><div class=3D"gmail_default" style=3D"font-family:monospace">-St= =C3=A9phane=C2=A0</div></div> </blockquote></div> --000000000000aa937106459a4714--
bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.Received: (at submit) by debbugs.gnu.org; 10 Dec 2025 14:55:00 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 10 09:55:00 2025 Received: from localhost ([127.0.0.1]:34053 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vTLal-0005fg-Nk for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 09:55:00 -0500 Received: from lists.gnu.org ([2001:470:142::17]:51672) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vTLaj-0005fO-JB for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 09:54:58 -0500 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 <shipmints@HIDDEN>) id 1vTLad-0001mH-Iv for bug-gnu-emacs@HIDDEN; Wed, 10 Dec 2025 09:54:51 -0500 Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <shipmints@HIDDEN>) id 1vTLab-0003jM-Hd for bug-gnu-emacs@HIDDEN; Wed, 10 Dec 2025 09:54:51 -0500 Received: by mail-vs1-xe2b.google.com with SMTP id ada2fe7eead31-5dfc6be7df3so2518200137.0 for <bug-gnu-emacs@HIDDEN>; Wed, 10 Dec 2025 06:54:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765378488; x=1765983288; darn=gnu.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=4GsPrFmtJrISWz6b2EzgQfcQ7bCLgrI1dAnixMgwg5Y=; b=aud7pnhPlLRHTP7pyUDapR023mK/YH+UGuHXaQVu1aF1ub/xFbgQm3LOoo76ILsxL0 AbLYpoQBjY/HxvjM4SIiWjbKFVNnVoAVC8WPuNeF79X7cZGK7Jl/T6gRgS/GpH5oNjUk UHbfq3+iI1lvAFNFSGXcfypZYk90CMmsRJGjcojX4elP1p/1jFEs1iHv3ru7fEHfGwrc e5qDvtjA7ovmqjscSUhdNKAiYzGqAojteXcQN19F8hJOGNZnZ3+8RGBrQkaZWdcDg/B8 fOMB3UIdFv/chJEpkgUrNP75H3LBoUipQPCxb8RYnYht/5g1WN1xueM7Q6GxsCGE6Eyx tBdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765378488; x=1765983288; h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4GsPrFmtJrISWz6b2EzgQfcQ7bCLgrI1dAnixMgwg5Y=; b=XSa/aspoiHyy4oDzovt6BPUKdEc1/dPGoUi3e2DCjUYnE69TnJho+LGbeSAix/jWVq skcFa9VasVjl5RQ8RgYjutf9i5mtsuTRhlLke3flautPGdfz3zZ1yXqRQW0Vqpo3IqtO YN5/H0jZLkKVC6A/ZLibrQAQvTO9kmHTPmgGcWvUTIPSZRQbkpDZ184Lruh7JQGqsyXi idoOVZJJl+xVx0NGRAbIY6Dzt4rX2cnvlW0Yumi/i4Gsku1sp3VKmn/5Pk2F53y0Sci2 oY4T5ndAqbn/+1GVtp6yxMUGVYYkJaB+Aj4cQFWxjIQK3zAgO/J09Vku39m2k1XXtRM+ ck1Q== X-Gm-Message-State: AOJu0Yz6eESAOKaN3TorrOIvl9HmHCwPBLHcuGKqmqGzVuRKcacldEFi cjIODXzKkBKFbOUwzJ+IpAXkjlxK6JtnQM2Y+uhEN2aEyPSnCgxE8r/FcHhLlAxwRwPjEfe2s3E 5f6DJlmOG3MQgFR402t2hgPemsvLpKubBJhvT X-Gm-Gg: AY/fxX4PDZPkuvFOj5s3V5M+HkC4zGdro5DuWj7C8w1oy4UqY1/FPk2Qmn3nP94MhUU 9QdtIrznvdOt3e01Bu/FlVfR4U7cLyRh0851Uu1BC6G1qdXTIqLmzAihoXDsvCbYeoJfK08TDVO HYn4/64ia7YrxgGXD+rUje+Bu9yBgGiZmURxOA7xSVUUn/baJAh5wqmrAc1cKu7Pq2hWXj/PijB 9YWXNIZUYwOs/aVn/AZ1gn6VGQet5mXczUlIH/Crj1R/DoU2dNoQS8a2xiVymK/NJcvi50hfb97 GkQxUA== X-Google-Smtp-Source: AGHT+IFLEmxGOvFXbyNs1mlQrQ6ry7AuvY9vmST2ALK2tHeMqlBHaQT7GaNzjdzfiDOhAdZlyLqDK4KL2YkCsph/lRI= X-Received: by 2002:a05:6102:3e23:b0:5db:f710:497e with SMTP id ada2fe7eead31-5e571bcd132mr756756137.21.1765378488213; Wed, 10 Dec 2025 06:54:48 -0800 (PST) MIME-Version: 1.0 From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Wed, 10 Dec 2025 09:54:36 -0500 X-Gm-Features: AQt7F2pFE9uqtv7sR9v34MaDZ5Y_T1wrjs4W-iHk-n8yYAMiQoGV6j7mYl_S3HE Message-ID: <CAN+1HbpDdP3qHJHK7+-RfXk=NUe9q5G+p89DM_R3AYp5jyy9Hg@HIDDEN> Subject: [PATCH] Add vtable buffer slot To: bug-gnu-emacs@HIDDEN Content-Type: multipart/mixed; boundary="000000000000af443706459a3568" Received-SPF: pass client-ip=2607:f8b0:4864:20::e2b; envelope-from=shipmints@HIDDEN; helo=mail-vs1-xe2b.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, HTML_MESSAGE=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-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit Cc: Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.0 (/) --000000000000af443706459a3568 Content-Type: multipart/alternative; boundary="000000000000af443606459a3566" --000000000000af443606459a3566 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable This solves for background vtable mutations, i.e., updates initiated from buffers other than the vtable buffer, and for buffer-adjusted string-pixel-width computations. Many more patches for fixes and enhancements coming on the back of this one, once agreed. I'd love to see all of these in Emacs 31 and I'm now generally available to pick up the pace. P.S. I've cc'd the same group as the last vtable discussions/patches. If you do not want to be cc'd on these, let me know. -St=C3=A9phane --000000000000af443606459a3566 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac= e">This solves for background vtable mutations, i.e., updates initiated fro= m buffers other than the vtable buffer, and for buffer-adjusted string-pixe= l-width computations.<br></div><div class=3D"gmail_default" style=3D"font-f= amily:monospace"><br></div><div class=3D"gmail_default" style=3D"font-famil= y:monospace">Many more patches for fixes and enhancements coming on the bac= k of this one, once agreed.=C2=A0 I'd love to see all of these in Emacs= 31 and I'm now generally available to pick up the pace.</div><div clas= s=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D= "gmail_default" style=3D"font-family:monospace">P.S. I've cc'd the = same group as the last vtable discussions/patches.=C2=A0 If you do not want= to be cc'd on these, let me know.</div><div class=3D"gmail_default" st= yle=3D"font-family:monospace"><br></div><div class=3D"gmail_default" style= =3D"font-family:monospace">-St=C3=A9phane=C2=A0</div></div> --000000000000af443606459a3566-- --000000000000af443706459a3568 Content-Type: application/octet-stream; name="0001-Add-vtable-buffer-slot.patch" Content-Disposition: attachment; filename="0001-Add-vtable-buffer-slot.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mj04o5rk0> X-Attachment-Id: f_mj04o5rk0 RnJvbSBlMTk2MTRjMzNiMDI5NmMzZjc4NjhiYzAwMjFhMzg1OWRiYzg2ZTYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTAgRGVjIDIwMjUgMDk6MjA6MDIgLTA1MDAK U3ViamVjdDogW1BBVENIXSBBZGQgdnRhYmxlIGJ1ZmZlciBzbG90CgpUaGlzIHNvbHZlcyBmb3Ig YmFja2dyb3VuZCB2dGFibGUgbXV0YXRpb25zLCBpLmUuLCB1cGRhdGVzCmluaXRpYXRlZCBmcm9t IGJ1ZmZlcnMgb3RoZXIgdGhhbiB0aGUgdnRhYmxlIGJ1ZmZlciwgYW5kIGZvcgpidWZmZXItYWRq dXN0ZWQgc3RyaW5nLXBpeGVsLXdpZHRoIGNvbXB1dGF0aW9ucy4KCiogbGlzcC9lbWFjcy1saXNw L3Z0YWJsZS5lbCAodnRhYmxlKTogTmV3ICctYnVmZmVyJyBzbG90LgoodnRhYmxlLWJ1ZmZlcik6 Cih2dGFibGUtc2V0LWJ1ZmZlcik6IE5ldyBmdW5jdGlvbi4KKHZ0YWJsZS11cGRhdGUtb2JqZWN0 KToKKHZ0YWJsZS1yZW1vdmUtb2JqZWN0KToKKHZ0YWJsZS1pbnNlcnQtb2JqZWN0KTogV3JhcCBv cGVyYXRpb24gd2l0aCB0aGUgdnRhYmxlIGJ1ZmZlci4KKHZ0YWJsZS0taW5zZXJ0KTogU3BsaXQg ZnJvbSBvbGQgJ3Z0YWJsZS1pbnNlcnQnLgoodnRhYmxlLWluc2VydCk6IEluc2VydCB0YWJsZSBh bmQgcmVjb3JkIHRoZSBidWZmZXIuCih2dGFibGUtLWluc2VydC1saW5lKToKKHZ0YWJsZS0taW5z ZXJ0LWhlYWRlci1saW5lKTogVXNlICd2dGFibGUtYnVmZmVyJyBmb3IgcGl4ZWwtd2lkdGggY29t cHV0YXRpb24uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6Cih2dGFibGUtLWNoYXItd2lkdGgpOiBQ YXNzIGJ1ZmZlciB0byAnc3RyaW5nLXBpeGVsLXdpZHRoJy4KKHZ0YWJsZS1yZXZlcnQpOiBOZXcg b3B0aW9uYWwgdGFibGUgYXJndW1lbnQuCih2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aCk6Cih2 dGFibGUtcmV2ZXJ0LWNvbW1hbmQpOgoodnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4pOiBD YWxsICd2dGFibGUtcmV2ZXJ0JyB3aXRoIHRoZSB0YWJsZS4KLS0tCiBsaXNwL2VtYWNzLWxpc3Av dnRhYmxlLmVsIHwgMzg5ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAx IGZpbGUgY2hhbmdlZCwgMjE4IGluc2VydGlvbnMoKyksIDE3MSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVsIGIvbGlzcC9lbWFjcy1saXNwL3Z0YWJs ZS5lbAppbmRleCBiY2RkMjgwZmI5Mi4uZmU0YmFlMDEwNzcgMTAwNjQ0Ci0tLSBhL2xpc3AvZW1h Y3MtbGlzcC92dGFibGUuZWwKKysrIGIvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbApAQCAtNjgs NiArNjgsNyBAQCB2dGFibGUKICAgIChjb2x1bW4tY29sb3JzIDppbml0YXJnIDpjb2x1bW4tY29s b3JzIDphY2Nlc3NvciB2dGFibGUtY29sdW1uLWNvbG9ycykKICAgIChyb3ctY29sb3JzIDppbml0 YXJnIDpyb3ctY29sb3JzIDphY2Nlc3NvciB2dGFibGUtcm93LWNvbG9ycykKICAgICgtY2FjaGVk LWNvbG9ycyA6aW5pdGZvcm0gbmlsKQorICAgKC1idWZmZXIgOmluaXRmb3JtIG5pbCkKICAgICgt Y2FjaGUgOmluaXRmb3JtIChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCkpCiAgICAoLWNh Y2hlZC1rZXltYXAgOmluaXRmb3JtIG5pbCkKICAgICgtaGFzLWNvbHVtbi1zcGVjIDppbml0Zm9y bSBuaWwpKQpAQCAtMjIxLDYgKzIyMiwyMCBAQCB2dGFibGUtLWZhY2UtY29sb3IKIAogOzs7IElu dGVyZmFjZSB1dGlsaXR5IGZ1bmN0aW9ucy4KIAorKGRlZnVuIHZ0YWJsZS1idWZmZXIgKCZvcHRp b25hbCB0YWJsZSkKKyAgIlJldHVybiB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBUQUJMRS4K K0lmIFRBQkxFIGlzIG5pbCwgdXNlIHRoZSB0YWJsZSB1bmRlciBwb2ludC4gIFJldHVybiBuaWwg aWYgdGhlIHRhYmxlIGhhcworbm90IGJlZW4gaW5zZXJ0ZWQgaW50byBhIGJ1ZmZlci4iCisgIChz bG90LXZhbHVlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQorICAgICAgICAgICAg ICAnLWJ1ZmZlcikpCisKKyhkZWZ1biB2dGFibGUtc2V0LWJ1ZmZlciAoYnVmZmVyICZvcHRpb25h bCB0YWJsZSkKKyAgIkFzc29jaWF0ZSBCVUZGRVIgd2l0aCBUQUJMRS4KK0lmIFRBQkxFIGlzIG5p bCwgdXNlIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCisgIChzZXRmIChzbG90LXZhbHVlIChvciB0 YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQorICAgICAgICAgICAgICAgICAgICAnLWJ1ZmZl cikKKyAgICAgICAgYnVmZmVyKSkKKwogKGRlZnVuIHZ0YWJsZS1jdXJyZW50LXRhYmxlICgpCiAg ICJSZXR1cm4gdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKICAgKGdldC10ZXh0LXByb3BlcnR5IChw b2ludCkgJ3Z0YWJsZSkpCkBAIC0yODUsNjMgKzMwMCw2NSBAQCB2dGFibGUtdXBkYXRlLW9iamVj dAogY29tcGFyZWQgd2l0aCBgZXF1YWwnKSwgc2lnbmFsIGFuIGVycm9yLgogCiBUQUJMRSBtdXN0 IGJlIGF0IHBvaW50IGluIHRoZSBjdXJyZW50IGJ1ZmZlci4iCi0gICh1bmxlc3Mgb2xkLW9iamVj dAotICAgIChzZXRxIG9sZC1vYmplY3Qgb2JqZWN0KSkKLSAgKGxldCogKChvYmplY3RzICh2dGFi bGUtb2JqZWN0cyB0YWJsZSkpCi0gICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCi0gICAg OzsgRmlyc3QgcmVwbGFjZSB0aGUgb2JqZWN0IGluIHRoZSBvYmplY3Qgc3RvcmFnZS4KLSAgICAo aWYgKGVxIG9sZC1vYmplY3QgKGNhciBvYmplY3RzKSkKLSAgICAgICAgOzsgSXQncyBhdCB0aGUg aGVhZCwgc28gcmVwbGFjZSBpdCB0aGVyZS4KLSAgICAgICAgKHNldGYgKHZ0YWJsZS1vYmplY3Rz IHRhYmxlKQotICAgICAgICAgICAgICAoY29ucyBvYmplY3QgKGNkciBvYmplY3RzKSkpCi0gICAg ICA7OyBPdGhlcndpc2Ugc3BsaWNlIGludG8gdGhlIGxpc3QuCi0gICAgICAod2hpbGUgKGFuZCAo Y2RyIG9iamVjdHMpCi0gICAgICAgICAgICAgICAgICAobm90IChlcSAoY2FkciBvYmplY3RzKSBv bGQtb2JqZWN0KSkpCi0gICAgICAgIChzZXRxIG9iamVjdHMgKGNkciBvYmplY3RzKSkpCi0gICAg ICAodW5sZXNzIChjZHIgb2JqZWN0cykKLSAgICAgICAgKGVycm9yICJDYW4ndCBmaW5kIHRoZSBv bGQgb2JqZWN0IikpCi0gICAgICAoc2V0Y2FyIChjZHIgb2JqZWN0cykgb2JqZWN0KSkKLSAgICA7 OyBUaGVuIHVwZGF0ZSB0aGUgcmVuZGVyZWQgdnRhYmxlIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4K LSAgICAoaWYtbGV0KiAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAg ICAgIChsaW5lLW51bWJlciAoc2VxLXBvc2l0aW9uICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hl KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC1vYmplY3QKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChhIGIpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWwgKGNhciBhKSBiKSkp KQotICAgICAgICAgICAgIChsaW5lIChlbHQgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpIGxp bmUtbnVtYmVyKSkpCi0gICAgICAgIChwcm9nbgotICAgICAgICAgIChzZXRjYXIgbGluZSBvYmpl Y3QpCi0gICAgICAgICAgKHNldGNkciBsaW5lICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUg dGFibGUgb2JqZWN0KSkKLSAgICAgICAgICA7OyAuLi4gYW5kIHJlZGlzcGxheSB0aGUgbGluZSBp biBxdWVzdGlvbi4KLSAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICAgICAgICh2dGFi bGUtZ290by1vYmplY3Qgb2xkLW9iamVjdCkKLSAgICAgICAgICAgIChsZXQgKChrZXltYXAgKGdl dC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2tleW1hcCkpCi0gICAgICAgICAgICAgICAgICAoc3Rh cnQgKHBvaW50KSkpCi0gICAgICAgICAgICAgIChkZWxldGUtbGluZSkKLSAgICAgICAgICAgICAg KHZ0YWJsZS0taW5zZXJ0LWxpbmUgdGFibGUgbGluZSBsaW5lLW51bWJlcgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCi0g ICAgICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tl eW1hcCBrZXltYXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAndnRhYmxlIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZS1jYWNoZSBjYWNoZSkpKSkKLSAgICAgICAg ICA7OyBXZSBtYXkgaGF2ZSBpbnNlcnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHBy ZXZpb3VzbHkKLSAgICAgICAgICA7OyBhbGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUu Ci0gICAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAoY2RyIGxpbmUp KSkKLSAgICAgIChlcnJvciAiQ2FuJ3QgZmluZCBjYWNoZWQgb2JqZWN0IGluIHZ0YWJsZSIpKSkp CisgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgICh1bmxl c3Mgb2xkLW9iamVjdAorICAgICAgKHNldHEgb2xkLW9iamVjdCBvYmplY3QpKQorICAgIChsZXQq ICgob2JqZWN0cyAodnRhYmxlLW9iamVjdHMgdGFibGUpKQorICAgICAgICAgICAoaW5oaWJpdC1y ZWFkLW9ubHkgdCkpCisgICAgICA7OyBGaXJzdCByZXBsYWNlIHRoZSBvYmplY3QgaW4gdGhlIG9i amVjdCBzdG9yYWdlLgorICAgICAgKGlmIChlcSBvbGQtb2JqZWN0IChjYXIgb2JqZWN0cykpCisg ICAgICAgICAgOzsgSXQncyBhdCB0aGUgaGVhZCwgc28gcmVwbGFjZSBpdCB0aGVyZS4KKyAgICAg ICAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpCisgICAgICAgICAgICAgICAgKGNvbnMg b2JqZWN0IChjZHIgb2JqZWN0cykpKQorICAgICAgICA7OyBPdGhlcndpc2Ugc3BsaWNlIGludG8g dGhlIGxpc3QuCisgICAgICAgICh3aGlsZSAoYW5kIChjZHIgb2JqZWN0cykKKyAgICAgICAgICAg ICAgICAgICAgKG5vdCAoZXEgKGNhZHIgb2JqZWN0cykgb2xkLW9iamVjdCkpKQorICAgICAgICAg IChzZXRxIG9iamVjdHMgKGNkciBvYmplY3RzKSkpCisgICAgICAgICh1bmxlc3MgKGNkciBvYmpl Y3RzKQorICAgICAgICAgIChlcnJvciAiQ2FuJ3QgZmluZCB0aGUgb2xkIG9iamVjdCIpKQorICAg ICAgICAoc2V0Y2FyIChjZHIgb2JqZWN0cykgb2JqZWN0KSkKKyAgICAgIDs7IFRoZW4gdXBkYXRl IHRoZSByZW5kZXJlZCB2dGFibGUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgorICAgICAgKGlmLWxl dCogKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlKSkKKyAgICAgICAgICAgICAgICAobGlu ZS1udW1iZXIgKHNlcS1wb3NpdGlvbiAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQtb2JqZWN0CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoYSBiKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxdWFsIChjYXIgYSkgYikp KSkKKyAgICAgICAgICAgICAgICAobGluZSAoZWx0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hl KSBsaW5lLW51bWJlcikpKQorICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgKHNldGNhciBs aW5lIG9iamVjdCkKKyAgICAgICAgICAgIChzZXRjZHIgbGluZSAodnRhYmxlLS1jb21wdXRlLWNh Y2hlZC1saW5lIHRhYmxlIG9iamVjdCkpCisgICAgICAgICAgICA7OyAuLi4gYW5kIHJlZGlzcGxh eSB0aGUgbGluZSBpbiBxdWVzdGlvbi4KKyAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAg ICAgICAgICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9sZC1vYmplY3QpCisgICAgICAgICAgICAg IChsZXQgKChrZXltYXAgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2tleW1hcCkpCisgICAg ICAgICAgICAgICAgICAgIChzdGFydCAocG9pbnQpKSkKKyAgICAgICAgICAgICAgICAoZGVsZXRl LWxpbmUpCisgICAgICAgICAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWxpbmUgdGFibGUgbGluZSBs aW5lLW51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUt LWNhY2hlLXdpZHRocyBjYWNoZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAodnRhYmxlLS1zcGFjZXIgdGFibGUpKQorICAgICAgICAgICAgICAgIChhZGQtdGV4dC1wcm9w ZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tleW1hcCBrZXltYXAKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUgdGFibGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICd2dGFibGUtY2FjaGUgY2FjaGUpKSkpCisgICAgICAgICAgICA7OyBXZSBtYXkgaGF2ZSBpbnNl cnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkKKyAgICAgICAgICAg IDs7IGFsbC1udW1lcmljYWwgdGFibGUsIHNvIHJlY29tcHV0ZS4KKyAgICAgICAgICAgICh2dGFi bGUtLXJlY29tcHV0ZS1udW1lcmljYWwgdGFibGUgKGNkciBsaW5lKSkpCisgICAgICAgIChlcnJv ciAiQ2FuJ3QgZmluZCBjYWNoZWQgb2JqZWN0IGluIHZ0YWJsZSIpKSkpKQogCiAoZGVmdW4gdnRh YmxlLXJlbW92ZS1vYmplY3QgKHRhYmxlIG9iamVjdCkKICAgIlJlbW92ZSBPQkpFQ1QgZnJvbSBU QUJMRS4KIFRoaXMgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZGlzcGxheWVkIGxpbmUuIgotICA7OyBG aXJzdCByZW1vdmUgZnJvbSB0aGUgb2JqZWN0cy4KLSAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRh YmxlKSAoZGVscSBvYmplY3QgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkpCi0gIDs7IFRoZW4gYWRq dXN0IHRoZSBjYWNoZSBhbmQgZGlzcGxheS4KLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKHZ0YWJs ZS1nb3RvLXRhYmxlIHRhYmxlKQotICAgIChsZXQgKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNh Y2hlKSkKLSAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCi0gICAgICAoc2V0Y2FyIGNh Y2hlIChkZWxxIChhc3NxIG9iamVjdCAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkpCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkpCi0gICAg ICAod2hlbiAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkKLSAgICAgICAgKGRlbGV0ZS1saW5l KSkpKSkKKyAgKHdpdGgtY3VycmVudC1idWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpCisgICAg OzsgRmlyc3QgcmVtb3ZlIGZyb20gdGhlIG9iamVjdHMuCisgICAgKHNldGYgKHZ0YWJsZS1vYmpl Y3RzIHRhYmxlKSAoZGVscSBvYmplY3QgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkpCisgICAgOzsg VGhlbiBhZGp1c3QgdGhlIGNhY2hlIGFuZCBkaXNwbGF5LgorICAgIChzYXZlLWV4Y3Vyc2lvbgor ICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQorICAgICAgKGxldCAoKGNhY2hlICh2dGFi bGUtLWN1cnJlbnQtY2FjaGUpKQorICAgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpKQor ICAgICAgICAoc2V0Y2FyIGNhY2hlIChkZWxxIChhc3NxIG9iamVjdCAodnRhYmxlLS1jYWNoZS1s aW5lcyBjYWNoZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUt bGluZXMgY2FjaGUpKSkKKyAgICAgICAgKHdoZW4gKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3Qp CisgICAgICAgICAgKGRlbGV0ZS1saW5lKSkpKSkpCiAKIDs7IEZJWE1FOiBUaGUgZmFjdCB0aGF0 IHRoZSBgbG9jYXRpb24nIGFyZ3VtZW50IG9mCiA7OyBgdnRhYmxlLWluc2VydC1vYmplY3QnIGNh biBiZSBhbiBpbnRlZ2VyIGFuZCBpcyB0aGVuIGludGVycHJldGVkIGFzCkBAIC0zNjMsOTEgKzM4 MCw5MiBAQCB2dGFibGUtaW5zZXJ0LW9iamVjdAogY2FzZS4KIAogVGhpcyBhbHNvIHVwZGF0ZXMg dGhlIGRpc3BsYXllZCB0YWJsZS4iCi0gIDs7IElmIHRoZSB2dGFibGUgaXMgZW1wdHksIGp1c3Qg YWRkIHRoZSBvYmplY3QgYW5kIHJlZ2VuZXJhdGUgdGhlCi0gIDs7IHRhYmxlLgotICAoaWYgKG51 bGwgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkKLSAgICAgIChwcm9nbgotICAgICAgICAoc2V0ZiAo dnRhYmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpCi0gICAgICAgICh2dGFibGUtLXJl Y29tcHV0ZS1udW1lcmljYWwgdGFibGUgKHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJs ZSBvYmplY3QpKQotICAgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAgICAgICh2 dGFibGUtcmV2ZXJ0LWNvbW1hbmQpKQotICAgIDs7IEZpcnN0IGluc2VydCBpbnRvIHRoZSBvYmpl Y3RzLgotICAgIChsZXQgKChwb3MgKGlmIGxvY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgKGlm IChpbnRlZ2VycCBsb2NhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgKHByb2cxCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAobnRoY2RyIGxvY2F0aW9uICh2dGFibGUtb2JqZWN0cyB0 YWJsZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgOzsgRG8gbm90IHByZXBlbmQgaWYgaW5k ZXggaXMgdG9vIGxhcmdlOgotICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGJlZm9yZSBu aWwpKQotICAgICAgICAgICAgICAgICAgICAgKG9yIChtZW1xIGxvY2F0aW9uICh2dGFibGUtb2Jq ZWN0cyB0YWJsZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgOzsgUHJlcGVuZCBpZiBgbG9j YXRpb24nIGlzIG5vdCBmb3VuZCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICA7OyBgYmVm b3JlJyBpcyBub24tbmlsOgotICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgYmVmb3JlICh2 dGFibGUtb2JqZWN0cyB0YWJsZSkpKSkKLSAgICAgICAgICAgICAgICAgOzsgSWYgYGxvY2F0aW9u JyBpcyBuaWwgYW5kIGBiZWZvcmUnIGlzIG5vbi1uaWwsIHdlCi0gICAgICAgICAgICAgICAgIDs7 IHByZXBlbmQgdGhlIG5ldyBvYmplY3QuCi0gICAgICAgICAgICAgICAgIChpZiBiZWZvcmUgKHZ0 YWJsZS1vYmplY3RzIHRhYmxlKSkpKSkKLSAgICAgIChpZiAob3IgYmVmb3JlICA7IElmIGBiZWZv cmUnIGlzIG5vbi1uaWwsIGBwb3MnIHNob3VsZCBiZSwgYXMgd2VsbC4KLSAgICAgICAgICAgICAg KGFuZCBwb3MgKGludGVnZXJwIGxvY2F0aW9uKSkpCi0gICAgICAgICAgOzsgQWRkIHRoZSBuZXcg b2JqZWN0IGJlZm9yZS4KLSAgICAgICAgICAobGV0ICgob2xkLW9iamVjdCAoY2FyIHBvcykpKQot ICAgICAgICAgICAgKHNldGNhciBwb3Mgb2JqZWN0KQotICAgICAgICAgICAgKHNldGNkciBwb3Mg KGNvbnMgb2xkLW9iamVjdCAoY2RyIHBvcykpKSkKLSAgICAgICAgOzsgT3RoZXJ3aXNlLCBhZGQg dGhlIG9iamVjdCBhZnRlci4KLSAgICAgICAgKGlmIHBvcwotICAgICAgICAgICAgOzsgU3BsaWNl IHRoZSBvYmplY3QgaW50byB0aGUgbGlzdC4KLSAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25z IG9iamVjdCAoY2RyIHBvcykpKQotICAgICAgICAgIDs7IE90aGVyd2lzZSwgYXBwZW5kIHRoZSBv YmplY3QuCi0gICAgICAgICAgKG5jb25jICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGxpc3Qgb2Jq ZWN0KSkpKSkKLSAgICA7OyBUaGVuIGFkanVzdCB0aGUgY2FjaGUgYW5kIGRpc3BsYXkuCi0gICAg KHNhdmUtZXhjdXJzaW9uCi0gICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAgICAo bGV0KiAoKGNhY2hlICh2dGFibGUtLWN1cnJlbnQtY2FjaGUpKQotICAgICAgICAgICAgIChpbmhp Yml0LXJlYWQtb25seSB0KQotICAgICAgICAgICAgIChrZXltYXAgKGdldC10ZXh0LXByb3BlcnR5 IChwb2ludCkgJ2tleW1hcCkpCi0gICAgICAgICAgICAgKGVsbGlwc2lzIChpZiAodnRhYmxlLWVs bGlwc2lzIHRhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKHRy dW5jYXRlLXN0cmluZy1lbGxpcHNpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIiIpKQotICAgICAgICAgICAgIChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRo IGVsbGlwc2lzKSkKLSAgICAgICAgICAgICAobGluZXMgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2Fj aGUpKQotICAgICAgICAgICAgIChlbGVtIChpZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRpbmcgbWly cm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAgICAg KGlmIChpbnRlZ2VycCBsb2NhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChudGgg bG9jYXRpb24gbGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxvY2F0 aW9uIGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIGJlZm9yZSAoY2Fy IGxpbmVzKSkpKQotICAgICAgICAgICAgICAgICAgICAgKGlmIGJlZm9yZSAoY2FyIGxpbmVzKSkp KQotICAgICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCi0gICAgICAgICAgICAgKGxp bmUgKGNvbnMgb2JqZWN0ICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUgb2JqZWN0 KSkpKQotICAgICAgICAoaWYgKG9yIGJlZm9yZQorICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodnRh YmxlLWJ1ZmZlciB0YWJsZSkKKyAgICA7OyBJZiB0aGUgdnRhYmxlIGlzIGVtcHR5LCBqdXN0IGFk ZCB0aGUgb2JqZWN0IGFuZCByZWdlbmVyYXRlIHRoZQorICAgIDs7IHRhYmxlLgorICAgIChpZiAo bnVsbCAodnRhYmxlLW9iamVjdHMgdGFibGUpKQorICAgICAgICAocHJvZ24KKyAgICAgICAgICAo c2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpCisgICAgICAgICAgKHZ0 YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbCB0YWJsZSAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1s aW5lIHRhYmxlIG9iamVjdCkpCisgICAgICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQor ICAgICAgICAgICh2dGFibGUtcmV2ZXJ0LWNvbW1hbmQpKQorICAgICAgOzsgRmlyc3QgaW5zZXJ0 IGludG8gdGhlIG9iamVjdHMuCisgICAgICAobGV0ICgocG9zIChpZiBsb2NhdGlvbgorICAgICAg ICAgICAgICAgICAgICAgKGlmIChpbnRlZ2VycCBsb2NhdGlvbikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAocHJvZzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG50aGNkciBsb2Nh dGlvbiAodnRhYmxlLW9iamVjdHMgdGFibGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg OzsgRG8gbm90IHByZXBlbmQgaWYgaW5kZXggaXMgdG9vIGxhcmdlOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHNldHEgYmVmb3JlIG5pbCkpCisgICAgICAgICAgICAgICAgICAgICAgIChv ciAobWVtcSBsb2NhdGlvbiAodnRhYmxlLW9iamVjdHMgdGFibGUpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgOzsgUHJlcGVuZCBpZiBgbG9jYXRpb24nIGlzIG5vdCBmb3VuZCBhbmQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGBiZWZvcmUnIGlzIG5vbi1uaWw6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYW5kIGJlZm9yZSAodnRhYmxlLW9iamVjdHMgdGFibGUpKSkp CisgICAgICAgICAgICAgICAgICAgOzsgSWYgYGxvY2F0aW9uJyBpcyBuaWwgYW5kIGBiZWZvcmUn IGlzIG5vbi1uaWwsIHdlCisgICAgICAgICAgICAgICAgICAgOzsgcHJlcGVuZCB0aGUgbmV3IG9i amVjdC4KKyAgICAgICAgICAgICAgICAgICAoaWYgYmVmb3JlICh2dGFibGUtb2JqZWN0cyB0YWJs ZSkpKSkpCisgICAgICAgIChpZiAob3IgYmVmb3JlICA7IElmIGBiZWZvcmUnIGlzIG5vbi1uaWws IGBwb3MnIHNob3VsZCBiZSwgYXMgd2VsbC4KICAgICAgICAgICAgICAgICAoYW5kIHBvcyAoaW50 ZWdlcnAgbG9jYXRpb24pKSkKLSAgICAgICAgICAgIDs7IEFkZCB0aGUgbmV3IG9iamVjdCBiZWZv cmU6LgotICAgICAgICAgICAgKGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCi0gICAgICAgICAg ICAgIChzZXRjYXIgcG9zIGxpbmUpCi0gICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIG9s ZC1saW5lIChjZHIgcG9zKSkpCi0gICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3RvLW9i amVjdCAoY2FyIGVsZW0pKQotICAgICAgICAgICAgICAgICh2dGFibGUtYmVnaW5uaW5nLW9mLXRh YmxlKSkpCisgICAgICAgICAgICA7OyBBZGQgdGhlIG5ldyBvYmplY3QgYmVmb3JlLgorICAgICAg ICAgICAgKGxldCAoKG9sZC1vYmplY3QgKGNhciBwb3MpKSkKKyAgICAgICAgICAgICAgKHNldGNh ciBwb3Mgb2JqZWN0KQorICAgICAgICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBvbGQtb2JqZWN0 IChjZHIgcG9zKSkpKQogICAgICAgICAgIDs7IE90aGVyd2lzZSwgYWRkIHRoZSBvYmplY3QgYWZ0 ZXIuCiAgICAgICAgICAgKGlmIHBvcwogICAgICAgICAgICAgICA7OyBTcGxpY2UgdGhlIG9iamVj dCBpbnRvIHRoZSBsaXN0LgotICAgICAgICAgICAgICAocHJvZ24KLSAgICAgICAgICAgICAgICAo c2V0Y2RyIHBvcyAoY29ucyBsaW5lIChjZHIgcG9zKSkpCi0gICAgICAgICAgICAgICAgKGlmICh2 dGFibGUtZ290by1vYmplY3QgbG9jYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIChmb3J3YXJk LWxpbmUgMSkgIDsgSW5zZXJ0ICphZnRlciouCi0gICAgICAgICAgICAgICAgICAodnRhYmxlLWVu ZC1vZi10YWJsZSkpKQorICAgICAgICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBvYmplY3QgKGNk ciBwb3MpKSkKICAgICAgICAgICAgIDs7IE90aGVyd2lzZSwgYXBwZW5kIHRoZSBvYmplY3QuCi0g ICAgICAgICAgICAoc2V0Y2FyIGNhY2hlIChuY29uYyBsaW5lcyAobGlzdCBsaW5lKSkpCi0gICAg ICAgICAgICAodnRhYmxlLWVuZC1vZi10YWJsZSkpKQotICAgICAgICAobGV0ICgoc3RhcnQgKHBv aW50KSkpCi0gICAgICAgICAgOzsgRklYTUU6IFdlIGhhdmUgdG8gYWRqdXN0IGNvbG9ycyBpbiBs aW5lcyBiZWxvdyB0aGlzIGlmIHdlCi0gICAgICAgICAgOzsgaGF2ZSA6cm93LWNvbG9ycy4KLSAg ICAgICAgICAodnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIDAKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpICh2dGFibGUtLXNw YWNlciB0YWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyBlbGxp cHNpcy13aWR0aCkKLSAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQp IChsaXN0ICdrZXltYXAga2V5bWFwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWNhY2hlIGNhY2hlKSkpCi0gICAgICAg IDs7IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2YWx1ZSBpbnRvIGEgcHJl dmlvdXNseQotICAgICAgICA7OyBhbGwtbnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCi0g ICAgICAgICh2dGFibGUtLXJlY29tcHV0ZS1udW1lcmljYWwgdGFibGUgKGNkciBsaW5lKSkpKSkp CisgICAgICAgICAgICAobmNvbmMgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAobGlzdCBvYmplY3Qp KSkpKQorICAgICAgOzsgVGhlbiBhZGp1c3QgdGhlIGNhY2hlIGFuZCBkaXNwbGF5LgorICAgICAg KHNhdmUtZXhjdXJzaW9uCisgICAgICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkKKyAgICAg ICAgKGxldCogKChjYWNoZSAodnRhYmxlLS1jdXJyZW50LWNhY2hlKSkKKyAgICAgICAgICAgICAg IChpbmhpYml0LXJlYWQtb25seSB0KQorICAgICAgICAgICAgICAgKGtleW1hcCAoZ2V0LXRleHQt cHJvcGVydHkgKHBvaW50KSAna2V5bWFwKSkKKyAgICAgICAgICAgICAgIChlbGxpcHNpcyAoaWYg KHZ0YWJsZS1lbGxpcHNpcyB0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBy b3BlcnRpemUgKHRydW5jYXRlLXN0cmluZy1lbGxpcHNpcykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICIiKSkKKyAgICAgICAgICAgICAgIChlbGxpcHNpcy13aWR0aCAo c3RyaW5nLXBpeGVsLXdpZHRoIGVsbGlwc2lzIChjdXJyZW50LWJ1ZmZlcikpKQorICAgICAgICAg ICAgICAgKGxpbmVzICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKKyAgICAgICAgICAgICAg IChlbGVtIChpZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRpbmcgbWlycm9ycyB0aGUgYmluZGluZyBv ZiBgcG9zJyBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGludGVnZXJwIGxv Y2F0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnRoIGxvY2F0aW9uIGxpbmVz KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxvY2F0aW9uIGxpbmVzKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgYmVmb3JlIChjYXIgbGluZXMpKSkp CisgICAgICAgICAgICAgICAgICAgICAgIChpZiBiZWZvcmUgKGNhciBsaW5lcykpKSkKKyAgICAg ICAgICAgICAgIChwb3MgKG1lbXEgZWxlbSBsaW5lcykpCisgICAgICAgICAgICAgICAobGluZSAo Y29ucyBvYmplY3QgKHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKSkp CisgICAgICAgICAgKGlmIChvciBiZWZvcmUKKyAgICAgICAgICAgICAgICAgIChhbmQgcG9zIChp bnRlZ2VycCBsb2NhdGlvbikpKQorICAgICAgICAgICAgICA7OyBBZGQgdGhlIG5ldyBvYmplY3Qg YmVmb3JlOi4KKyAgICAgICAgICAgICAgKGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCisgICAg ICAgICAgICAgICAgKHNldGNhciBwb3MgbGluZSkKKyAgICAgICAgICAgICAgICAoc2V0Y2RyIHBv cyAoY29ucyBvbGQtbGluZSAoY2RyIHBvcykpKQorICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0 YWJsZS1nb3RvLW9iamVjdCAoY2FyIGVsZW0pKQorICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1i ZWdpbm5pbmctb2YtdGFibGUpKSkKKyAgICAgICAgICAgIDs7IE90aGVyd2lzZSwgYWRkIHRoZSBv YmplY3QgYWZ0ZXIuCisgICAgICAgICAgICAoaWYgcG9zCisgICAgICAgICAgICAgICAgOzsgU3Bs aWNlIHRoZSBvYmplY3QgaW50byB0aGUgbGlzdC4KKyAgICAgICAgICAgICAgICAocHJvZ24KKyAg ICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIGxpbmUgKGNkciBwb3MpKSkKKyAgICAg ICAgICAgICAgICAgIChpZiAodnRhYmxlLWdvdG8tb2JqZWN0IGxvY2F0aW9uKQorICAgICAgICAg ICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkgIDsgSW5zZXJ0ICphZnRlciouCisgICAgICAg ICAgICAgICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisgICAgICAgICAgICAgIDs7IE90 aGVyd2lzZSwgYXBwZW5kIHRoZSBvYmplY3QuCisgICAgICAgICAgICAgIChzZXRjYXIgY2FjaGUg KG5jb25jIGxpbmVzIChsaXN0IGxpbmUpKSkKKyAgICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2Yt dGFibGUpKSkKKyAgICAgICAgICAobGV0ICgoc3RhcnQgKHBvaW50KSkpCisgICAgICAgICAgICA7 OyBGSVhNRTogV2UgaGF2ZSB0byBhZGp1c3QgY29sb3JzIGluIGxpbmVzIGJlbG93IHRoaXMgaWYg d2UKKyAgICAgICAgICAgIDs7IGhhdmUgOnJvdy1jb2xvcnMuCisgICAgICAgICAgICAodnRhYmxl LS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICh2dGFibGUtLWNhY2hlLXdpZHRocyBjYWNoZSkgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMgZWxsaXBzaXMtd2lkdGgp CisgICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpIChsaXN0ICdr ZXltYXAga2V5bWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICd2dGFibGUgdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZS1jYWNoZSBjYWNoZSkpKQorICAgICAgICAgIDs7 IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2YWx1ZSBpbnRvIGEgcHJldmlv dXNseQorICAgICAgICAgIDs7IGFsbC1udW1lcmljYWwgdGFibGUsIHNvIHJlY29tcHV0ZS4KKyAg ICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlIChjZHIgbGluZSkpKSkp KSkKIAogKGRlZnVuIHZ0YWJsZS1jb2x1bW4gKHRhYmxlIGluZGV4KQogICAiUmV0dXJuIHRoZSBu YW1lIG9mIHRoZSBJTkRFWHRoIGNvbHVtbiBpbiBUQUJMRS4iCkBAIC01MjAsMTQgKzUzOCwxNCBA QCB2dGFibGUtLWNhY2hlLXdpZHRocwogKGRlZnVuIHZ0YWJsZS0tY2FjaGUtbGluZXMgKGNhY2hl KQogICAoY2FyIGNhY2hlKSkKIAotKGRlZnVuIHZ0YWJsZS1pbnNlcnQgKHRhYmxlKQorKGRlZnVu IHZ0YWJsZS0taW5zZXJ0ICh0YWJsZSkKICAgKGxldCogKChzcGFjZXIgKHZ0YWJsZS0tc3BhY2Vy IHRhYmxlKSkKICAgICAgICAgIChzdGFydCAocG9pbnQpKQogICAgICAgICAgKGVsbGlwc2lzIChp ZiAodnRhYmxlLWVsbGlwc2lzIHRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVy dGl6ZSAodHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQogICAgICAgICAgICAgICAgICAg ICAgIiIpKQotICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxs aXBzaXMpKQorICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxs aXBzaXMgKGN1cnJlbnQtYnVmZmVyKSkpCiAgICAgICAgICA7OyBXZSBtYWludGFpbiBhIGNhY2hl IHBlciBzY3JlZW4vd2luZG93IHdpZHRoLCBzbyB0aGF0IHdlIHJlbmRlcgogICAgICAgICAgOzsg Y29ycmVjdGx5IGlmIEVtYWNzIGlzIG9wZW4gb24gdHdvIGRpZmZlcmVudCBzY3JlZW5zIChvciB0 aGUKICAgICAgICAgIDs7IHVzZXIgcmVzaXplcyB0aGUgZnJhbWUpLgpAQCAtNTY1LDkgKzU4Mywy NCBAQCB2dGFibGUtaW5zZXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJs ZS1jYWNoZSBjYWNoZSkpCiAgICAgKGdvdG8tY2hhciBzdGFydCkpKQogCisoZGVmdW4gdnRhYmxl LWluc2VydCAodGFibGUpCisgICJJbnNlcnQgVEFCTEUgaW50byB0aGUgY3VycmVudCBidWZmZXIu CitUaGUgY3VycmVudCBidWZmZXIgd2lsbCBiZSByZWNvcmRlZCBhcyBUQUJMRSdzIGJ1ZmZlci4g IElmIHRoaXMgaXMgZG9uZQorbW9yZSB0aGFuIG9uY2UsIG9yIGlmIHRoZSB0YWJsZSBpcyBhdHRl bXB0ZWQgdG8gYmUgaW5zZXJ0ZWQgbW9yZSB0aGFuCitvbmNlIGludG8gdGhlIHNhbWUgYnVmZmVy LCBzaWduYWwgYW4gZXJyb3IuIgorICAoaWYtbGV0KiAoKHRhYmxlLWJ1ZmZlciAodnRhYmxlLWJ1 ZmZlciB0YWJsZSkpKQorICAgICAgKGlmIChlcSB0YWJsZS1idWZmZXIgKGN1cnJlbnQtYnVmZmVy KSkKKyAgICAgICAgICAoZXJyb3IgIkEgdnRhYmxlIGNhbm5vdCBiZSBpbnNlcnRlZCBtb3JlIHRo YW4gb25jZSBpbnRvIGEgYnVmZmVyIikKKyAgICAgICAgKGVycm9yICJBIHZ0YWJsZSBjYW5ub3Qg YmUgaW5zZXJ0ZWQgaW50byBtb3JlIHRoYW4gb25lIGJ1ZmZlciIpKSkKKyAgKHZ0YWJsZS1zZXQt YnVmZmVyIChjdXJyZW50LWJ1ZmZlcikgdGFibGUpCisgIChsZXQgKChpbmhpYml0LXJlYWQtb25s eSB0KQorICAgICAgICAoaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3MgdCkpCisgICAgKHZ0YWJs ZS0taW5zZXJ0IHRhYmxlKSkpCisKIChkZWZ1biB2dGFibGUtLWluc2VydC1saW5lICh0YWJsZSBs aW5lIGxpbmUtbnVtYmVyIHdpZHRocyBzcGFjZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmb3B0aW9uYWwgZWxsaXBzaXMgZWxsaXBzaXMtd2lkdGgpCiAgIChsZXQgKChzdGFy dCAocG9pbnQpKQorICAgICAgICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKICAgICAg ICAgKGNvbHVtbnMgKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkKICAgICAgICAgKGNvbHVtbi1jb2xv cnMKICAgICAgICAgIChhbmQgKHZ0YWJsZS1jb2x1bW4tY29sb3JzIHRhYmxlKQpAQCAtNjA3LDE2 ICs2NDAsMTggQEAgdnRhYmxlLS1pbnNlcnQtbGluZQogICAgICAgICAgICAgICAgICAgICAgIChj b25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCiAgICAg ICAgICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRo IDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBz aXMtd2lkdGggMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAg ICAgICAgICAgICAgIGVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQp KQogICAgICAgICAgICAgICAgICA7OyBSZWNvbXB1dGUgd2lkdGhzLgogICAgICAgICAgICAgICAg ICAodAotICAgICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggdmFsdWUp IChlbHQgd2lkdGhzIGluZGV4KSkKKyAgICAgICAgICAgICAgICAgIChpZiAoPiAoc3RyaW5nLXBp eGVsLXdpZHRoIHZhbHVlIGJ1ZmZlcikgKGVsdCB3aWR0aHMgaW5kZXgpKQogICAgICAgICAgICAg ICAgICAgICAgIChjb25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQt c3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAoLSAoZWx0IHdpZHRocyBpbmRl eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAw KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZWxsaXBzaXMtd2lkdGgg MCkpCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAg ICAgIGVsbGlwc2lzKQogICAgICAgICAgICAgICAgICAgICB2YWx1ZSkpKSkKICAgICAgICAgICAg ICAgIChzdGFydCAocG9pbnQpKQpAQCAtNjMwLDE0ICs2NjUsMTUgQEAgdnRhYmxlLS1pbnNlcnQt bGluZQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOndpZHRoIChsaXN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCsgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aCBkaXNw bGF5ZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctcGl4ZWwtd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGlzcGxheWVkIGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGlmIGxhc3QgMCBzcGFjZXIpKSkpKSkpCiAgICAgICAgICAgICAgOzsg QWxpZ24gdG8gdGhlIHJpZ2h0LgogICAgICAgICAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgIiAi ICdkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp3aWR0aCAobGlzdCAoLSAo ZWx0IHdpZHRocyBpbmRleCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZCkpKSkpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bs YXllZCBidWZmZXIpKSkpKQogICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkKQogICAgICAg ICAgICAgICh1bmxlc3MgbGFzdAogICAgICAgICAgICAgICAgKGluc2VydCAocHJvcGVydGl6ZSAi ICIgJ2Rpc3BsYXkKQEAgLTcxOCw2ICs3NTQsNyBAQCB2dGFibGUtLWluZGljYXRvcgogKGRlZnVu IHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lICh0YWJsZSB3aWR0aHMgc3BhY2VyKQogICA7OyBJ bnNlcnQgdGhlIGhlYWRlciBkaXJlY3RseSBpbnRvIHRoZSBidWZmZXIuCiAgIChsZXQgKChzdGFy dCAocG9pbnQpKQorICAgICAgICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKICAgICAg ICAgKGRpdmlkZXIgKHZ0YWJsZS1kaXZpZGVyIHRhYmxlKSkKICAgICAgICAgKGNtYXAgKGRlZmlu ZS1rZXltYXAKICAgICAgICAgICAgICAgICAiPGhlYWRlci1saW5lPiA8ZHJhZy1tb3VzZS0xPiIg Iyd2dGFibGUtLWRyYWctcmVzaXplLWNvbHVtbgpAQCAtNzM3LDE0ICs3NzQsMTUgQEAgdnRhYmxl LS1pbnNlcnQtaGVhZGVyLWxpbmUKICAgICAgICAgICAgICAgICAgICAgICdrZXltYXAgY21hcCkp CiAgICAgICAgICAgICAgIChzdGFydCAocG9pbnQpKQogICAgICAgICAgICAgICAoaW5kaWNhdG9y ICh2dGFibGUtLWluZGljYXRvciB0YWJsZSBpbmRleCkpCi0gICAgICAgICAgICAgIChpbmRpY2F0 b3Itd2lkdGggKHN0cmluZy1waXhlbC13aWR0aCBpbmRpY2F0b3IpKQorICAgICAgICAgICAgICAo aW5kaWNhdG9yLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggaW5kaWNhdG9yIGJ1ZmZlcikpCiAg ICAgICAgICAgICAgIChsYXN0ICg9IGluZGV4ICgxLSAobGVuZ3RoICh2dGFibGUtY29sdW1ucyB0 YWJsZSkpKSkpCiAgICAgICAgICAgICAgIGRpc3BsYXllZCkKICAgICAgICAgIChzZXRxIGRpc3Bs YXllZAotICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4ZWwtd2lkdGggbmFtZSkKKyAg ICAgICAgICAgICAgIChpZiAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIG5hbWUgYnVmZmVyKQogICAg ICAgICAgICAgICAgICAgICAgICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgp KQogICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWxpbWl0LXN0cmluZwotICAgICAgICAgICAg ICAgICAgICBuYW1lICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpKQorICAg ICAgICAgICAgICAgICAgICBuYW1lICgtIChlbHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lk dGgpCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgbmFtZSkp CiAgICAgICAgICAobGV0KiAoKGluZGljYXRvci1sZWFkLXdpZHRoCiAgICAgICAgICAgICAgICAg IDs7IFdlIHdhbnQgdGhlIGluZGljYXRvciB0byBub3QgYmUgcXVpdGUgZmx1c2ggcmlnaHQuCkBA IC03NTMsNyArNzkxLDcgQEAgdnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3ItbGVhZC13aWR0aCkpCiAgICAg ICAgICAgICAgICAgKGZpbGwtd2lkdGgKICAgICAgICAgICAgICAgICAgKCsgKC0gKGVsdCB3aWR0 aHMgaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGggZGlz cGxheWVkKQorICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXBpeGVsLXdpZHRoIGRpc3Bs YXllZCBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvci13aWR0aAogICAg ICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3ItbGVhZC13aWR0aCkKICAgICAgICAgICAgICAg ICAgICAgKGlmIGxhc3QgMCBzcGFjZXIpKSkpCkBAIC03NzEsNyArODA5LDggQEAgdnRhYmxlLS1p bnNlcnQtaGVhZGVyLWxpbmUKICAgICAgICAgICAgICA7OyBUaGlzIGlzIHRoZSBmaW5hbCBjb2x1 bW4sIGFuZCB3ZSBoYXZlIGEgc29ydGluZwogICAgICAgICAgICAgIDs7IGluZGljYXRvciwgYW5k IHRoZSB0YWJsZSBpcyB0b28gd2lkZSBmb3IgdGhlIHdpbmRvdy4KICAgICAgICAgICAgICAobGV0 KiAoKHByZS1pbmRpY2F0b3IgKHN0cmluZy1waXhlbC13aWR0aAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50KSkp KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcg KHBvaW50LW1pbikgKHBvaW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgIChwcmUtZmlsbAogICAgICAgICAgICAgICAg ICAgICAgKC0gKHdpbmRvdy13aWR0aCBuaWwgdCkKICAgICAgICAgICAgICAgICAgICAgICAgIHBy ZS1pbmRpY2F0b3IKQEAgLTg1MCwxNCArODg5LDE2IEBAIHZ0YWJsZS0tc2V0LWhlYWRlci1saW5l CiAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludC1taW4pICgxLSAocG9pbnQtbWF4 KSkpKSkpCiAgICh2dGFibGUtaGVhZGVyLW1vZGUgMSkpCiAKLShkZWZ1biB2dGFibGUtLWxpbWl0 LXN0cmluZyAoc3RyaW5nIHBpeGVscykKKworKGRlZnVuIHZ0YWJsZS0tbGltaXQtc3RyaW5nIChz dHJpbmcgcGl4ZWxzIGJ1ZmZlcikKICAgKHdoaWxlIChhbmQgKGxlbmd0aD4gc3RyaW5nIDApCi0g ICAgICAgICAgICAgICg+IChzdHJpbmctcGl4ZWwtd2lkdGggc3RyaW5nKSBwaXhlbHMpKQorICAg ICAgICAgICAgICAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cmluZyBidWZmZXIpIHBpeGVscykp CiAgICAgKHNldHEgc3RyaW5nIChzdWJzdHJpbmcgc3RyaW5nIDAgKDEtIChsZW5ndGggc3RyaW5n KSkpKSkKICAgc3RyaW5nKQogCiAoZGVmdW4gdnRhYmxlLS1jaGFyLXdpZHRoICh0YWJsZSkKLSAg KHN0cmluZy1waXhlbC13aWR0aCAocHJvcGVydGl6ZSAieCIgJ2ZhY2UgKHZ0YWJsZS1mYWNlIHRh YmxlKSkpKQorICAoc3RyaW5nLXBpeGVsLXdpZHRoIChwcm9wZXJ0aXplICJ4IiAnZmFjZSAodnRh YmxlLWZhY2UgdGFibGUpKQorICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtYnVmZmVyIHRh YmxlKSkpCiAKIChkZWZ1biB2dGFibGUtLWNvbXB1dGUtd2lkdGggKHRhYmxlIHNwZWMpCiAgIChj b25kCkBAIC05NjcsMjAgKzEwMDgsMjQgQEAgdnRhYmxlLS1tYWtlLWtleW1hcAogICAgICAgICAg ICh2dGFibGUta2V5bWFwIHRhYmxlKSkKICAgICAgIG1hcCkpKQogCi0oZGVmdW4gdnRhYmxlLXJl dmVydCAoKQotICAiUmVnZW5lcmF0ZSB0aGUgdGFibGUgdW5kZXIgcG9pbnQuIgotICAobGV0ICgo dGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkKLSAgICAgICAgKG9iamVjdCAodnRhYmxlLWN1 cnJlbnQtb2JqZWN0KSkKLSAgICAgICAgKGNvbHVtbiAodnRhYmxlLWN1cnJlbnQtY29sdW1uKSkK LSAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpKQotICAgICh1bmxlc3MgdGFibGUKLSAgICAg ICh1c2VyLWVycm9yICJObyB0YWJsZSB1bmRlciBwb2ludCIpKQotICAgIChkZWxldGUtcmVnaW9u ICh2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlKSAodnRhYmxlLWVuZC1vZi10YWJsZSkpCi0gICAg KHZ0YWJsZS1pbnNlcnQgdGFibGUpCi0gICAgKHdoZW4gb2JqZWN0Ci0gICAgICAodnRhYmxlLWdv dG8tb2JqZWN0IG9iamVjdCkpCi0gICAgKHdoZW4gY29sdW1uCi0gICAgICAodnRhYmxlLWdvdG8t Y29sdW1uIGNvbHVtbikpKSkKKyhkZWZ1biB2dGFibGUtcmV2ZXJ0ICgmb3B0aW9uYWwgdGFibGUp CisgICJSZWdlbmVyYXRlIHRoZSB0YWJsZSB1bmRlciBwb2ludC4KK0lmIFRBQkxFIGlzIG5pbCwg dXNlIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCisgIChzZXRxIHRhYmxlIChvciB0YWJsZSAodnRh YmxlLWN1cnJlbnQtdGFibGUpKSkKKyAgKHVubGVzcyB0YWJsZQorICAgICh1c2VyLWVycm9yICJO byB0YWJsZSBmb3VuZCIpKQorICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0 YWJsZSkKKyAgICAobGV0ICgob2JqZWN0ICh2dGFibGUtY3VycmVudC1vYmplY3QpKQorICAgICAg ICAgIChjb2x1bW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpCisgICAgICAgICAgKGluaGliaXQt cmVhZC1vbmx5IHQpKQorICAgICAgKHVubGVzcyB0YWJsZQorICAgICAgICAodXNlci1lcnJvciAi Tm8gdGFibGUgdW5kZXIgcG9pbnQiKSkKKyAgICAgIChkZWxldGUtcmVnaW9uICh2dGFibGUtYmVn aW5uaW5nLW9mLXRhYmxlKSAodnRhYmxlLWVuZC1vZi10YWJsZSkpCisgICAgICAodnRhYmxlLS1p bnNlcnQgdGFibGUpCisgICAgICAod2hlbiBvYmplY3QKKyAgICAgICAgKHZ0YWJsZS1nb3RvLW9i amVjdCBvYmplY3QpKQorICAgICAgKHdoZW4gY29sdW1uCisgICAgICAgICh2dGFibGUtZ290by1j b2x1bW4gY29sdW1uKSkpKSkKIAogOzs7IENvbW1hbmRzLgogCkBAIC0xMDEzLDcgKzEwNTgsNyBA QCB2dGFibGUtLWFsdGVyLWNvbHVtbi13aWR0aAogICAgIDs7IFN0b3JlIHRoZSB3aWR0aCBzbyBp dCdsbCBiZSByZXNwZWN0ZWQgb24gYSByZXZlcnQuCiAgICAgKHNldGYgKHZ0YWJsZS1jb2x1bW4t d2lkdGggKGVsdCAodnRhYmxlLWNvbHVtbnMgdGFibGUpIGNvbHVtbikpCiAgICAgICAgICAgKGZv cm1hdCAiJWRweCIgKGFyZWYgd2lkdGhzIGNvbHVtbikpKQotICAgICh2dGFibGUtcmV2ZXJ0KSkp CisgICAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKSkKIAogKGRlZnVuIHZ0YWJsZS13aWRlbi1jdXJy ZW50LWNvbHVtbiAoJm9wdGlvbmFsIG4pCiAgICJXaWRlbiB0aGUgY3VycmVudCBjb2x1bW4gYnkg TiBjaGFyYWN0ZXJzLgpAQCAtMTAzOCwxNCArMTA4MywxNiBAQCB2dGFibGUtbmV4dC1jb2x1bW4K ICAgICAgKG1pbiAoMS0gKGxlbmd0aCAodnRhYmxlLS1jYWNoZS13aWR0aHMgKHZ0YWJsZS0tY3Vy cmVudC1jYWNoZSkpKSkKICAgICAgICAgICAoMSsgKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpKSkp KQogCi0oZGVmdW4gdnRhYmxlLXJldmVydC1jb21tYW5kICgpCisoZGVmdW4gdnRhYmxlLXJldmVy dC1jb21tYW5kICgmb3B0aW9uYWwgdGFibGUpCiAgICJSZS1xdWVyeSBkYXRhIGFuZCByZWdlbmVy YXRlIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCiAgIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoKHRh YmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpKQotICAgICh3aGVuICh2dGFibGUtb2JqZWN0cy1m dW5jdGlvbiB0YWJsZSkKLSAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGZ1bmNh bGwgKHZ0YWJsZS1vYmplY3RzLWZ1bmN0aW9uIHRhYmxlKSkpKQotICAgICh2dGFibGUtLWNsZWFy LWNhY2hlIHRhYmxlKSkKLSAgKHZ0YWJsZS1yZXZlcnQpKQorICAoc2V0cSB0YWJsZSAob3IgdGFi bGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCisgICh1bmxlc3MgdGFibGUKKyAgICAodXNlci1l cnJvciAiTm8gdGFibGUgZm91bmQiKSkKKyAgKHdoZW4gKHZ0YWJsZS1vYmplY3RzLWZ1bmN0aW9u IHRhYmxlKQorICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGZ1bmNhbGwgKHZ0YWJs ZS1vYmplY3RzLWZ1bmN0aW9uIHRhYmxlKSkpKQorICAodnRhYmxlLS1jbGVhci1jYWNoZSB0YWJs ZSkKKyAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKQogCiAoZGVmdW4gdnRhYmxlLXNvcnQtYnktY3Vy cmVudC1jb2x1bW4gKCkKICAgIlNvcnQgdGhlIHRhYmxlIHVuZGVyIHBvaW50IGJ5IHRoZSBjb2x1 bW4gdW5kZXIgcG9pbnQuIgpAQCAtMTA2Nyw4ICsxMTE0LDggQEAgdnRhYmxlLXNvcnQtYnktY3Vy cmVudC1jb2x1bW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGVxIChj ZHIgbGFzdCkgJ2FzY2VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2Rlc2NlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NlbmQpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NlbmQpKSkpKSkKLSAgKHZ0YWJsZS1y ZXZlcnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNjZW5kKSkpKSkKKyAg ICAodnRhYmxlLXJldmVydCB0YWJsZSkpKQogCiAoZGVmdW4gdnRhYmxlLWhlYWRlci1saW5lLXNv cnQgKGUpCiAgICJTb3J0IGEgdnRhYmxlIGZyb20gdGhlIGhlYWRlciBsaW5lLiIKLS0gCjIuNDcu MQoK --000000000000af443706459a3568--
Stéphane Marks <shipmints@HIDDEN>:bug-gnu-emacs@HIDDEN.
Full text available.bug-gnu-emacs@HIDDEN:bug#79982; Package emacs.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.