Received: (at 70036) by debbugs.gnu.org; 30 Apr 2024 11:30:19 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Tue Apr 30 07:30:19 2024 Received: from localhost ([127.0.0.1]:59395 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1s1lgW-0005FU-F3 for submit <at> debbugs.gnu.org; Tue, 30 Apr 2024 07:30:19 -0400 Received: from mout02.posteo.de ([185.67.36.66]:40471) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <yantar92@HIDDEN>) id 1s1lgT-0004sV-1b for 70036 <at> debbugs.gnu.org; Tue, 30 Apr 2024 07:30:06 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 89657240105 for <70036 <at> debbugs.gnu.org>; Tue, 30 Apr 2024 13:29:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1714476578; bh=G+WS+ELan3bp0iTqUR0ePThlmgfihv2wR5SpC+MfSNk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type: From; b=as3SmemyELBcb5kwTuYMb3xjHo11TbsFIbfWuwZgUcD7R1CUCcRnzbSx89A00r+KU W2dOkhWGidk2tQLxkIgYzyLhfzi7WI3CF7fNd5YwEkZ48ggaO07AtAvXPjzjpdbem/ Ttd8jkxbaTKG1tYRo/Wjr6ihaoV2YzJ58seHQXYWi7f0pweu9fk2YfaS2Qq9E6BROR 2XgdrB62cSiaoOsEEhNMIOCvcAa6OURH7qIAg+Mlqf7Y5UEDOn1HFPWI9QKZJ1yKDA BovmYkUdfSmd47FiOGAiIZJikGDCxjjPBHPk6dnFAW1LV3l/PVrzxk2a13ySanHnQ9 aUIYwrNqJDtNg== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4VTHzP2Ckvz9rxB; Tue, 30 Apr 2024 13:29:36 +0200 (CEST) From: Ihor Radchenko <yantar92@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036: a fix that In-Reply-To: <86sezhbp7g.fsf@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <877cgt7ptk.fsf@localhost> <86sezhbp7g.fsf@HIDDEN> Date: Tue, 30 Apr 2024 11:30:39 +0000 Message-ID: <87r0enozog.fsf@localhost> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: theo@HIDDEN, 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@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 (---) --=-=-= Content-Type: text/plain Eli Zaretskii <eliz@HIDDEN> writes: >> There are some easy things that can be done to improve `file-truename' >> performance somewhat. For example, the number of calls to >> `file-name-nondirectory' can be trivially reduced in the `file-truename' >> code - it is called up to three times in a row. >> >> (see my earlier message in https://yhetil.org/emacs-bugs/87jzlmd831.fsf@localhost/) >> >> Will it be of interest? > > Yes, of course. Those kinds of changes are no-brainers, really. See the attached patch. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-Improve-performance-of-file-truename-bug-70036.patch From cde58b309588008707cc8b00919eb24801e42eb6 Mon Sep 17 00:00:00 2001 Message-ID: <cde58b309588008707cc8b00919eb24801e42eb6.1714476584.git.yantar92@HIDDEN> From: Ihor Radchenko <yantar92@HIDDEN> Date: Tue, 30 Apr 2024 14:27:04 +0300 Subject: [PATCH] Improve performance of `file-truename' (bug#70036) * lisp/files.el (file-truename): Avoid repetitive calls to `file-name-nondirectory'. These calls contribute significantly to CPU time. See the benchmarks in https://debbugs.gnu.org/cgi/bugreport.cgi?bug=70036#47 --- lisp/files.el | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/lisp/files.el b/lisp/files.el index 7dec67c5cf0..b7ebb727c72 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1504,27 +1504,28 @@ file-truename (new (file-name-as-directory (file-truename dirfile counter prev-dirs)))) (setcar prev-dirs (cons (cons old new) (car prev-dirs))) (setq dir new)))) - (if (equal ".." (file-name-nondirectory filename)) - (setq filename - (directory-file-name (file-name-directory (directory-file-name dir))) - done t) - (if (equal "." (file-name-nondirectory filename)) - (setq filename (directory-file-name dir) - done t) - ;; Put it back on the file name. - (setq filename (concat dir (file-name-nondirectory filename))) - ;; Is the file name the name of a link? - (setq target (file-symlink-p filename)) - (if target - ;; Yes => chase that link, then start all over - ;; since the link may point to a directory name that uses links. - ;; We can't safely use expand-file-name here - ;; since target might look like foo/../bar where foo - ;; is itself a link. Instead, we handle . and .. above. - (setq filename (files--splice-dirname-file dir target) - done nil) - ;; No, we are done! - (setq done t)))))))) + (let ((filename-no-dir (file-name-nondirectory filename))) + (if (equal ".." filename-no-dir) + (setq filename + (directory-file-name (file-name-directory (directory-file-name dir))) + done t) + (if (equal "." filename-no-dir) + (setq filename (directory-file-name dir) + done t) + ;; Put it back on the file name. + (setq filename (concat dir filename-no-dir)) + ;; Is the file name the name of a link? + (setq target (file-symlink-p filename)) + (if target + ;; Yes => chase that link, then start all over + ;; since the link may point to a directory name that uses links. + ;; We can't safely use expand-file-name here + ;; since target might look like foo/../bar where foo + ;; is itself a link. Instead, we handle . and .. above. + (setq filename (files--splice-dirname-file dir target) + done nil) + ;; No, we are done! + (setq done t))))))))) filename)) (defun file-chase-links (filename &optional limit) -- 2.44.0 --=-=-= Content-Type: text/plain -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> --=-=-=--
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 22 Apr 2024 22:12:05 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 22 18:12:05 2024 Received: from localhost ([127.0.0.1]:48152 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rz1tN-0002Fy-7Y for submit <at> debbugs.gnu.org; Mon, 22 Apr 2024 18:12:05 -0400 Received: from wfout2-smtp.messagingengine.com ([64.147.123.145]:35809) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <dmitry@HIDDEN>) id 1rz1tK-0002FP-62 for 70036 <at> debbugs.gnu.org; Mon, 22 Apr 2024 18:12:03 -0400 Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailfout.west.internal (Postfix) with ESMTP id 6C5851C000CD; Mon, 22 Apr 2024 18:11:39 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Mon, 22 Apr 2024 18:11:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gutov.dev; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm1; t=1713823898; x=1713910298; bh=eGOwyStwAdgWX4TZW601tTG0wABHbn7S8dXLNGlLy34=; b= oWsdsmWsnczrOjyFJ9RZw84JAo7mMC12206+AkfIecZkKZgAtVhL7oWZWvvnQi+D yIFIz5+nPE17gILW4d0N9oiLlhIqqDlFBVJzwLZCcJPmUHHAH9KlJ/S61GXK+Vs4 NDElU0QYbuFDB3yJ8Kw6jhhHKmDaLfK6jzlnNryuG7qkXYNAgjYTBFQ9Dod/exr9 KYgyoyWR7jDehUun4Qp4pWQHNk3Z28behD8ZjZCIfz2himPhPeyAl5PKQiWs4Ebq GBjU1u+zrsGBDJ1CrZ0X46wvJRqTalEEVQ2u0siPmsPcBVVabHwVl18gUvV7NTF6 KpORFK7ENrU05Vp7afOuwA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1713823898; x= 1713910298; bh=eGOwyStwAdgWX4TZW601tTG0wABHbn7S8dXLNGlLy34=; b=P bZwDZ8JWT+MKjyyU9lPG0ju9BJmUGniC8UFDB8izAPPc9heHEK8G2yzUruVaKm0t OlY1C+8u+heQBql5xrIEMw5B+2EckTZ/wcbxJ2vJOa1v13JQ+s+R2TFAIrbPuZir i85Cgn+3uRjJIPGWpACKlRRMZ5DZpmdj9zkDrU7SCbwmLpE9F/PKRCxk0aLIbGLN wHAuhud+gLQSabn89lf7v2MMCGCpJFcjuqoTkP1kXx0yaNhmIQAezMRj2NC8TVqH eMc/uGkq8kw8E7FupsoLai+aIJYITmrUE4axIWmGDX8Y6ae9FfK5JrPSJEkByGN4 un0inuCar5shUUKaiPdqw== X-ME-Sender: <xms:muAmZhhhCEtcyP4jMGLnSsoM9mMWPM2tc-FFpf6HBm1OpebV2_N_8g> <xme:muAmZmAD4xPpC_Mrk6n8jO_CxLtq9R4FREZRB3h9iC9L6wTxKs-b42XmuWD0AzRKL qkMTXc6quXLvcAzayE> X-ME-Received: <xmr:muAmZhEIkcBOTMLr7Rgvg3700bQQMMwHEUNgRYdCqE1es_NkfsQqj0AwjL8I5rz8PhrV> X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrudeltddgtdekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepkfffgggfuffvvehfhfgjtgfgsehtkeertddtvdejnecuhfhrohhmpeffmhhi thhrhicuifhuthhovhcuoegumhhithhrhiesghhuthhovhdruggvvheqnecuggftrfgrth htvghrnhepgeelfeetkefghfdvhfdtgeevveevteetgeetveegtedthefhudekteehffeu keeknecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepug hmihhtrhihsehguhhtohhvrdguvghv X-ME-Proxy: <xmx:muAmZmQhj71jAOfHx4_3dbhWohBjM4Flx6MWk9mLPXTr-7SPU5drJw> <xmx:muAmZuzTZAo2MUPQxezHisun8maut1Nb9i1jQdXWaB8BZ8tyeO2nNw> <xmx:muAmZs7fyonq7NoneVORlrnc0fLxd1V8kkF42NzVoOzSBAjpf1dDhw> <xmx:muAmZjzw-Vi41268e4qY1RZ1fy4Mj0A0B46iBR9ggs3H6YV_KMIbxA> <xmx:muAmZloV_rrCDL7DnYik9ca757AkfdO7O_47VDzJgdF1l9vDuWa-QeZA> Feedback-ID: i0e71465a:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 22 Apr 2024 18:11:36 -0400 (EDT) Message-ID: <cee76ff8-64f3-4455-950d-764db7ace573@HIDDEN> Date: Tue, 23 Apr 2024 01:11:34 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#70036: a fix that To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>, Eli Zaretskii <eliz@HIDDEN> References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> <86jzkud0be.fsf@HIDDEN> <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> Content-Language: en-US From: Dmitry Gutov <dmitry@HIDDEN> In-Reply-To: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: theo@HIDDEN, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Hi Joao, On 18/04/2024 23:21, João Távora wrote: > * I had to take a long timeout from Eglot maintenance for personal > reasons managed to get maintainers for Flymake and Jsonrpc, but I am > still Eglot maintainer. Would it make sense to update the "Maintainer:" headers for flymake and jsonrpc?
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 21:33:09 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 17:33:08 2024 Received: from localhost ([127.0.0.1]:60496 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxvqw-0007q9-Rk for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 17:33:07 -0400 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]:50210) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxvqn-0007o2-1N for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 17:32:57 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-5196c755e82so3374007e87.0 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 14:32:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713562352; x=1714167152; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=bYUIVldT7Y4HETmG/zVf120qDbpt6U4LDbjzezyHI/s=; b=SBKH3AaHuxnj3t/OcDjFBUndE+1Uta8fyyRmrlosEpdV1p7rbDolFGreCaV2l1ZLZe qOumFB0anh7gN1K6wMSw9wrSTsSaaqh3yqkEkH0e5T4vt9KOS5tEYPWohcnOIEx+1T0a nidDXbtobggMIOPOrSpoh0+OAWWE0DKla3Agsm57DHZrzib1vyfB5pdC0UsdvqLRZ/rM Av/hE1+2CfQf/GDLa0uzCzzoQlhTmEVl8mW/U1ZRq3H9eSXUrVtC8Fj1jFxCfRCjrseC Ki4HxJypkagbbvzJFHpNQpUBY9ewiNmcZYfZNIgxzYNgnxkQh9uw0F9+v/O82fd43Wki +dwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713562352; x=1714167152; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bYUIVldT7Y4HETmG/zVf120qDbpt6U4LDbjzezyHI/s=; b=FGUY0/skXikN2zmxXe7bNeHaWxO/9Z6oUj0lDSkiyOJ0dgjK6aG/zXlUpZRtBevQNx KTJSdljensubwVHnEfNGW7A0fKJFYPNixvfLHJXPXKQowjDh3nqBMAnnfQt+IXCx2zWV OQaGWhWrYPJcZsaHTHMJbdwdRJVKGTrnQTj0juE1DGHDfr3gJrGrx6oxwSx4LrfKaP0f oWCdJnAC5KChT+erNi9OC+SoMeetHTmTggaZnaY7oA7rb34WakA7bHTfPj+B5C9DKPO7 qxxTIw8UhWOAEmGTNXL22k9U/q8K+OHHvFySf5LAtFuRag6S5FPoeFm8ZrRB9BP55XLF nypw== X-Forwarded-Encrypted: i=1; AJvYcCWNhKrITwXzGTsYW4V76GUueBZr2dAfBkDGZ4uQpIP/Rp++VN0p1b/cr1vOIWX0I8radRSdaRk5h6w7OFw+e3pDyiza0hU= X-Gm-Message-State: AOJu0Yy6wuI8ORF1FguYU3i1rhVk1g0Jf/MhZ75qS/3UAwAxLRtxOlQ5 b9FX2I4HgW1h/ICGYrrsmeBYLPAEvBPkDi5acTzTZjmZ1SH1Dbj4bOAHJKJ4eBdwvUW+lr8GdYe 04Wsf8ZalHra5qLsKyXCJiFeU7WA= X-Google-Smtp-Source: AGHT+IGsw+gz9EYVcAvRK+JCk4ryhx8F3HFjPVl0YSi4+1+AzD4skFRKB6yfj84z5nd3QhunAGKEpXbLCSK1WbLykt4= X-Received: by 2002:a19:381a:0:b0:516:d47d:34b9 with SMTP id f26-20020a19381a000000b00516d47d34b9mr2136168lfa.22.1713562352040; Fri, 19 Apr 2024 14:32:32 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> <871q71kspk.fsf@HIDDEN> In-Reply-To: <871q71kspk.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 22:32:20 +0100 Message-ID: <CALDnm51a4TUwNY7PbCAr2MamB7uehSmUyXc83=YgEM7KQe0bzQ@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 9:23=E2=80=AFPM Theodor Thornhill <theo@HIDDEN= o> wrote: > Please check out 49ef173b0287e17273e4476df16dca5f2196b11c. I just pushed > the new version, with a test for the symlink scenario as a regression > test. Looks great. I pushed some very minor tweaks (naming and comments) Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 20:23:31 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 16:23:31 2024 Received: from localhost ([127.0.0.1]:60190 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxulf-00080e-0r for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 16:23:31 -0400 Received: from out-173.mta1.migadu.com ([95.215.58.173]:60228) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxulc-00080Y-VH for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 16:23:29 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713558188; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FviIP0cnN6A99gqYA5bOPbr6vHfjbUpXlZ466lfQj/E=; b=qSglyhQZDRX+Vo0LiMMw0PhMHOjZFwohGbQRHHrVCfwXp4QYfhgVPSKVx3HGubaB//8NaH bYorG/w4IQ5bRNQKx1QjbLXqTjgHP8mpvNx1p6LRd4lVlF/VmligJHGAzn1q8WEUwWuLsV crCRKNvIbqrr1797vyH6U/RT78DUyHylJrtFFELk0NRork1Dr65//ZgdLzABYMSWR4YGUi rSy0fFAuchUNoKl60TDhEOy8SpxMzfhDjPm3mR2LSbDeSxW0ocCF2BG9Z71XvGfc7ZAfAi wzShm+kqQGw6IsQ/m2lAocLZzeAP/lrb5dVWbD+OSTDr7/ePMVeLzsnnyIbSjw== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> Date: Fri, 19 Apr 2024 22:23:03 +0200 Message-ID: <871q71kspk.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > On Fri, Apr 19, 2024 at 12:32=E2=80=AFPM Theodor Thornhill <theo@thornhil= l.no> wrote: > >> I wonder - why can't we use just buffer-file-truename? >> >> In the below function, wouldn't buffer-file-truename let us avoid the >> file-truename in eglot-path-to-uri? > > Never used, but try it out. It seems it's already a built-in cache > of whatever the buffer's truename is (and the docstring says > it does call the slow `file-truename`). But like in my patch, it's > a one-time thing. So yeah, if it's available in old Emacsen as well, > it could replace `eglot--cached-tdi`, but then the search in the > publishDiagnostics > handler would have to be adjusted accordingly to call uri-to-path again. > > Try it out, may be cleaner indeed. > > Beware though, Stefan has fixed the tests which is very good, but there > still isn't a test for the symlink scenario, so you'd have to test it > manually (or > even better, craft that test yourself, with clangd). > > Jo=C3=A3o Please check out 49ef173b0287e17273e4476df16dca5f2196b11c. I just pushed the new version, with a test for the symlink scenario as a regression test. Thanks, Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 19:43:19 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 15:43:19 2024 Received: from localhost ([127.0.0.1]:60018 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxu8k-00030N-GN for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 15:43:19 -0400 Received: from out-170.mta0.migadu.com ([2001:41d0:1004:224b::aa]:58242) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxu8i-0002zO-I0 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 15:43:17 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713555775; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=d5rtgIqcUSbMQicNGXMIELuSm8Cjw4SyAS623CyAwyU=; b=TEtiLRCKQDCFQ+A7a1tgYu4h697XT/zT9DSdbr+Yqa6vKhmEAVBy0bjVnMDf2dT0j4wdAX AA6MudB6Hdp71b/o62nlz8t3L/nGfPcw4WowsiqakixVZ1KRYe/Qn6vDulpiHNeeEk1YJE uXaVFz7fLpQ+EBOcZpca9Whw69liC/GWIfuhdE+jQ+M+LAGYVmM40upWM4IOXUTk9eDmcZ cE7Cp9MdzDITPK89lPHYViUms2GIDumZrpiLEg8QqW9qDkaT7E0DBdXyYg8oz/PTSJWapU WNsXFmTm4hKubQID1o4ZwWJ1jKbC7NYgDvTGo/X8fJVBmChbsPNXluhEYRV1gQ== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm52YeOdfstCLTPzYo-Lw9a96a_zNhCK1w2dQz0Q3+mudGA@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN> <86le59bo7z.fsf@HIDDEN> <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN> <877cgtkyoq.fsf@HIDDEN> <CALDnm52YeOdfstCLTPzYo-Lw9a96a_zNhCK1w2dQz0Q3+mudGA@HIDDEN> Date: Fri, 19 Apr 2024 21:42:50 +0200 Message-ID: <874jbxkukl.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > On Fri, Apr 19, 2024 at 7:14=E2=80=AFPM Theodor Thornhill <theo@thornhill= .no> wrote: >> >> Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: >> >> Open main.go in emacs and M-x eglot. Observe error: >> ``` >> compiler [DuplicateDecl]: main redeclared in this block (this error: oth= er declaration of main) >> ``` > > Reproduced, but that's not Eglot's fault, couldn't be. Eglot told > gopls _nothing_ about mainlink.go. Check your events buffer! No > didOpen for mainlink.go! In fact you probably don't even need to didOpen > any file for that problem to be reported as a project-wide diagnostic. > A simple initialize will do, I bet. IOW, you barely need a client. > Gopls decided to do some out-of-band (meaning out-of-LSP) analysis > of the code, bumped into its own ignorance (or policy, who knows?) > re. symlinks, and decided to issue diagnostics. Seems something a > Go compiler would do. Maybe it does? Are symlinks even supported in > Go projects? > > Bottom line is Eglot wasn't ever the hindrance for this to work and it > should not suddenly become one. Not without a very good reason, which > this performance matter clearly isn't (not least because there are lots > of alternative solutions as we've seen) > Sure. I think it locates this file from the globbing in file watchers. Because it matches a pattern it is allowed to read it. But it's not important, mostly an example of how symlinks and lsps are difficult. As another point of reference, lsp-mode behaves the same as Eglot. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 18:59:46 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 14:59:45 2024 Received: from localhost ([127.0.0.1]:59801 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxtSb-0006Ri-A7 for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 14:59:45 -0400 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]:45064) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxtSY-0006Qo-Bi for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 14:59:43 -0400 Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-518f8a69f82so2904241e87.2 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 11:59:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713553162; x=1714157962; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=lxrrwoe+DpljB+Hs1pXEMAr8f03U02QXV95tq/pQWE8=; b=TbNWO/Y8xvwZC6Y/f1cQC3/YqEiqcfWtJhz8yxMfifYqs2USaGpuDkXfbAVvbyKlxe +APLtyVLe5tgOCzEgb8RvVOygOn+TVyQ96w8wSB1UxPqo8vqJdduk9hSM/arddXz3WB4 AIxpI7Elpwo3YyphKYvj5KqDIwuWb/W1mk5T3wVnyaKu4+RDdXT24MS+vYZLrft+LrSV 46oxKWWraHl86+AJhsh8B1h17APmAVN4qPTrR4PDBuG4l/b2Tw4LOk9SypxSZW5ATewp ladIH6Mgdr1e6baTDGFsJPEk4SOpt31BW4Lg2TXrMSoyX/fg2rEH+DCc+Px+WSdH54S3 Ib+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713553162; x=1714157962; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lxrrwoe+DpljB+Hs1pXEMAr8f03U02QXV95tq/pQWE8=; b=mae+KU5UAU7CVy1Inzf0f4UQbZ/JSmwu9ThGiGrLGfitREOllaBRtCLMf4PG36pAkL UJJ8+9KnEPqplmRvMSEtcpc65Foyjhmzo9Kz1MZQSTUFy44n3pat8gKmbDTfcxzaorAX C+jINbZ63U3fv9v1TfvCMi8kVJaTvpDAGvjDufEM7Bc+4/kuvMQIf0ZCOnAGwm2k6qcH ChGz5UayBu3jy1jH2QxTzDqENbqiF2Woox1FvPo30kYLICrUjmuAmGw8CFntmqSXa5a9 uvy+M11EgqDpEaEow4MJEqx9Ne7T6C3V/3NhNy2QIiKFoEwPQPUw5cbNXWAZId9IDfdf +J/A== X-Forwarded-Encrypted: i=1; AJvYcCXtohak2x8RhrBjcgBGCOosKrSXM+aAobgjSOHOZvz2k6VNvHoe5xCOkmOOrhZuo5ESCN2FFDe5OeEE31qoj4VJq8sbqP0= X-Gm-Message-State: AOJu0YwYJSZRWh4wKAnqiw2+nUGMKHf72M/JIpCzyXN7WqmQ4Tg6/YZb oRhJQfWgdcsAdR92qwgvjeI2kqCBc681xA9L7sCY1LHilbdKDhJ2Vy3eXDLARrKl8j/TO/Mysam H4qLWqq5ggd5JQG8QKKBEKBPFZTQ= X-Google-Smtp-Source: AGHT+IHkmmxRrXl0L5fEfdFh653/rRcrCTy2NDT5CeFqDTymL/wTs+mOYlwiAMCqM6p5npM8bB6Yo5UHLRSrbbWPzGg= X-Received: by 2002:a05:6512:2ee:b0:51a:d1cb:ba0a with SMTP id m14-20020a05651202ee00b0051ad1cbba0amr1040799lfq.12.1713553161835; Fri, 19 Apr 2024 11:59:21 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN> <86le59bo7z.fsf@HIDDEN> <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN> <877cgtkyoq.fsf@HIDDEN> In-Reply-To: <877cgtkyoq.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 19:59:09 +0100 Message-ID: <CALDnm52YeOdfstCLTPzYo-Lw9a96a_zNhCK1w2dQz0Q3+mudGA@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 7:14=E2=80=AFPM Theodor Thornhill <theo@HIDDEN= o> wrote: > > Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > > Open main.go in emacs and M-x eglot. Observe error: > ``` > compiler [DuplicateDecl]: main redeclared in this block (this error: othe= r declaration of main) > ``` Reproduced, but that's not Eglot's fault, couldn't be. Eglot told gopls _nothing_ about mainlink.go. Check your events buffer! No didOpen for mainlink.go! In fact you probably don't even need to didOpen any file for that problem to be reported as a project-wide diagnostic. A simple initialize will do, I bet. IOW, you barely need a client. Gopls decided to do some out-of-band (meaning out-of-LSP) analysis of the code, bumped into its own ignorance (or policy, who knows?) re. symlinks, and decided to issue diagnostics. Seems something a Go compiler would do. Maybe it does? Are symlinks even supported in Go projects? Bottom line is Eglot wasn't ever the hindrance for this to work and it should not suddenly become one. Not without a very good reason, which this performance matter clearly isn't (not least because there are lots of alternative solutions as we've seen) Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 18:14:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 14:14:28 2024 Received: from localhost ([127.0.0.1]:59565 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxskl-00016A-Kr for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 14:14:28 -0400 Received: from out-172.mta0.migadu.com ([2001:41d0:1004:224b::ac]:45149) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxskg-00015H-NQ for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 14:14:26 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713550441; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=w+5ibz3QFRGMY5hb80+YAg43HLHtkkisrv9cVhc/cm8=; b=nDGHb9o3i7Hl8zL502lmZP3btO7hXHwM0oPicmIXyuU87JSaTnJlItuMY8h6wvISnCV5Bl NbCpTC2pkdvTlRwjgvxVC+IpwYS9Mn7MghIxFjq6qSNk5FnGYiBwYiNsaupmTG4aolp0eS OaQwAgEyuDXstJaFKf2fPpLZ31U3SuocfJGbKvKhTK3dlHgpR9TSlpdrTGb1QcUFaYS1H1 G2fky5BDxpJ6VHoC2RF6GLR5IPGMHjcqx5gfPZRQcWQYoEsNpfHcum4rzEHYDKs8yDRmw+ G4G2UHyut/kbLsrnYBGZVy+Ta0p5y/VUaSvzeZ5NbmNkaNGumn+h80mnjfhtiQ== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>, Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN> <86le59bo7z.fsf@HIDDEN> <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN> Date: Fri, 19 Apr 2024 20:13:57 +0200 Message-ID: <877cgtkyoq.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > On Fri, Apr 19, 2024 at 12:12=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wro= te: > >> > > I _think_, but can't be 100% sure, that I explicitly decided that 6 = years >> > > ago, I just didn't document it explicitly beyond typing in "file-tr= uename". >> > > Git archeology brings me to a commit in 2018 where I was reorganizing >> > > code, and file-truename was already there. I definitely knew about >> > > expand-file-name in 2018 though. >> > >> > The fact that I chose find-buffer-visiting over get-file-buffer around >> > the same time is another hint... >> >> Without proper commentary, this is a very weak hint. It could, for >> example, mean the problem you wanted to solve no longer exists, or >> even that you were unsure about whether expand-file-name could do the >> job. > > If I indeed _meant_ to solve the symlink problem, then it most definitely > still exists. I've demonstrated that. > > Intentional or not, the fact of the matter is that Eglot was usable > from very early on projects with symlinks. Not all clients can boast > that, as seems to be evidenced some bug reports to the servers pertaining > to some other clients. FWIW this isn't true AFAICT. Try this: create foo.go: ``` package main func foo () int { return 1 } ``` Then main.go ``` package main func main () { foo() } ``` now `ln -s main.go mainlink.go` Open main.go in emacs and M-x eglot. Observe error: ``` compiler [DuplicateDecl]: main redeclared in this block (this error: other = declaration of main) ``` This is from the revert commit. Same behavior from pre-my-fix, my-fix, your first fix and the latest iteration. For now I'm guessing on the register file watcher init for gopls not caring about symlinks. > > Regardless, foregoing this behaviour should be at a minimum documented > and would need an extremely well-fundamented reason. But there was not > even sufficient awareness that the behaviour was being abandoned. Which > is, like, totally OK and common and normal, and doesn't bring into > question the high credentials of anyone involved in this discussion. > > Jo=C3=A3o Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 14:32:59 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 10:32:59 2024 Received: from localhost ([127.0.0.1]:58509 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxpIQ-0000E9-SN for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 10:32:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50144) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxpIN-0000D3-Kp for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 10:32:57 -0400 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 1rxpI2-0000hs-VU; Fri, 19 Apr 2024 10:32:35 -0400 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=2D65E7IGJ9ZDVKUQznDHvZymis4xo95v5CaEFT2n9zo=; b=dyeOJDpwJ0Q531ZEk2ki 2it7FGuQCv8+pYdiok2sWsKfKC+a4tHTyYZBVvQid2rANFC4HYrpfRJiPhZdkn/p++m/mftY2XgKr 2nW9k/0fllOE4UooRIJ020sQkanbT0elbe5C6Eu+kxihryNv31/Dc26ptKWFES4ytI+lkUhIVb0gq 7yilIvJG5eQerSN3rabnVWSDqADf/ELq3FmU2N3bDvuXd/2QQPfakS9d+FlKzJ6+BN9Y7UYfK11Rj rN/uzMiYwTpFpey8nMvCCks5RTq7D3CPW/pliwUkndFjkxMTnuGbMPx9Mvf9T69+59OR3rhhgnDB6 bAxmB+tFS4JUQA==; Date: Fri, 19 Apr 2024 17:32:24 +0300 Message-Id: <86a5lpbeyv.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm51c0sUM+piRqxgq_t4f5mE-8ws0pbsyLPV1acg-oWsHBQ@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Fri, 19 Apr 2024 13:54:23 +0100) Subject: Re: bug#70036 a fix that References: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <865xwddf5w.fsf@HIDDEN> <CALDnm51c0sUM+piRqxgq_t4f5mE-8ws0pbsyLPV1acg-oWsHBQ@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Fri, 19 Apr 2024 13:54:23 +0100 > Cc: Theodor Thornhill <theo@HIDDEN>, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > On Fri, Apr 19, 2024 at 7:45 AM Eli Zaretskii <eliz@HIDDEN> wrote: > > > Thanks, but that is not what I asked to provide, for us to make a > > decision in this case. > > Could you please show benchmark times of the old code (before your > > changes), the code after your changes, and the current code in Git > > I just noticed this and think a comment needs to be made about Eglot > and performance measurements specifically. > > If a good `benchmark-run` or invocation can be made to measure a specific > problem, it is usually a very good tool. But in Eglot, it's rare (*) > > What some in this discussion may not understand is that Eglot works mostly > asynchronously. The user invokes commands that ask something of the > server and that server will later respond with something that is hopefully > still relevant somehow. On-the-fly diagnostics work like this, and even > startup can be asynchronous. So any slowdowns are usually felt subjectively > in input lag across a session where the user is doing some work. > > More often than not, there isn't a > > (benchamark-run 10 (eglot-foo <some-spoofed-arguiments>)) > > that can tell us something useful. It's more like "I feel diagnostics take > longer to appear", "ElDoc spins my CPU fan", "completions feel laggy", and > things like that. benchamark-run can be unusable in this case, but primitives that measure time are still useful, even if one needs to insert some special calls into the code that measure time. > So that's why the best way to communicate these problems is via a profile > accompanied by the usual bullet-proof Emacs -Q recipe. It should contain a > clear description of when profiler-start and profiler-stop are invoked, and > what the user did in between. And that's _exactly_ what Theo did here, > and was useful to me: I reproduced his results perfectly. Those profiles > easily tell us who the hotspots are at the Elisp level. The profiler is not very useful in such cases because it doesn't provide a clear picture of the time it took some code to execute. Also because typically there's a large portion of it that points to irrelevant functions line execute-extended-command etc.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:54:59 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:54:59 2024 Received: from localhost ([127.0.0.1]:58273 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxnla-0005U0-Ol for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:54:59 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:53342) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxnlY-0005Sj-9X for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:54:57 -0400 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2db2f6cb312so37097741fa.2 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:54:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713531276; x=1714136076; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=OvT2EJQSp+R+oPdMFNZvuetqf3imcvvj3Ne/Gj8KT5U=; b=ZxHMiXBfzGdOOYOhpjoJf1osfG4A3VypUPpaaTRAbm3Ijc0C+1sTDNnHXd3oyzbxJn utNV1NYw2sEqKPVvt1jPnM7ZN9uaW6eShbrpprAPm0KsntV0qufNtmTAzkgOUqgi+Fgb LAbomZRj0kWI63VHFYuBt9vYfYNjlh2CxSuf6E94lGxNAXONUcROclFY+7+K4WrrkdNM OQimr+G8WWE0HsY0tOe6tepTPl+23mt26Y1n1f4IXBGVaQR1Uu4Ibf+NEhOGEGdenDpv vAMkrjv86HnhZiJct/kdPtFVWHwXEkVys+a8poLyOSp5ARnD0wJ519GCgGjXE6l7Yi57 HkAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713531276; x=1714136076; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OvT2EJQSp+R+oPdMFNZvuetqf3imcvvj3Ne/Gj8KT5U=; b=ELYuJWkGm+x2haoe7S5b8sl3SCBpLuO0/vPh3SLlNwTmV8OC1oEdm8hW2x0IF5nPhX iXBWP6PkZ62ZJyoWzoS6pajIB0TiiLysWDU7eVjzdfGpqcXsXqVTcqQjCFAFGaETePXX zEovJjjzJT/s+hl7Jk2+H71Oq8lqbILN/+AKNozX8cigbmi3h78evAMmo47VX+mfksZQ zblS3dfnIPNd/1/jR/F++3hNK1t/JJPwvstZ0ZvrnRwnBss7m/qYc7vcFI/VfV1RY2EI 3JhZhhJ081oHLca28BCt2ciHv7VOSS/k1rG/GLpy9/eA5LOntQzzRzFElK/DDxTwUDV3 QE8g== X-Forwarded-Encrypted: i=1; AJvYcCVebqF3OCfBZSMaUabQpHIr+6m3aFESFxqDMO66/5iE8YtsP/yjxhbgWvj2lb9whMKQTeeEi4IgcjTnNOV6s35mNLTwR7Y= X-Gm-Message-State: AOJu0YyQ4JVCco7iBHVRcxpzCLB94BiAD6oVdP29CUTtV5d2mG3NOMrF 4zVgY7WNESsMMGZOk/AP3fy5aKkGmYllSmuD0pDCIQWHGpcpDaxK+zfzK8xfJCXXAi0IdsxhZvJ Kd198ez02ZwEsM2LS1TMO3YatKCo= X-Google-Smtp-Source: AGHT+IFVxPFGzNQRYIzrsKBidVSEZjtDlc8lx9nFnEe+T5fFvCAInCwxpbNII6qg43pn+JBnhVpMt39zA+96yzQT5SI= X-Received: by 2002:a05:651c:2214:b0:2d8:5af9:90c5 with SMTP id y20-20020a05651c221400b002d85af990c5mr2040893ljq.39.1713531275955; Fri, 19 Apr 2024 05:54:35 -0700 (PDT) MIME-Version: 1.0 References: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <865xwddf5w.fsf@HIDDEN> In-Reply-To: <865xwddf5w.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 13:54:23 +0100 Message-ID: <CALDnm51c0sUM+piRqxgq_t4f5mE-8ws0pbsyLPV1acg-oWsHBQ@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, Theodor Thornhill <theo@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 Fri, Apr 19, 2024 at 7:45=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote: > Thanks, but that is not what I asked to provide, for us to make a > decision in this case. > Could you please show benchmark times of the old code (before your > changes), the code after your changes, and the current code in Git I just noticed this and think a comment needs to be made about Eglot and performance measurements specifically. If a good `benchmark-run` or invocation can be made to measure a specific problem, it is usually a very good tool. But in Eglot, it's rare (*) What some in this discussion may not understand is that Eglot works mostly asynchronously. The user invokes commands that ask something of the server and that server will later respond with something that is hopefully still relevant somehow. On-the-fly diagnostics work like this, and even startup can be asynchronous. So any slowdowns are usually felt subjectivel= y in input lag across a session where the user is doing some work. More often than not, there isn't a (benchamark-run 10 (eglot-foo <some-spoofed-arguiments>)) that can tell us something useful. It's more like "I feel diagnostics take longer to appear", "ElDoc spins my CPU fan", "completions feel laggy", and things like that. Of course, special Elisp code can be crafted to simulate how a user interacts with Eglot, but that's not always easy due to the need to mock complex objects (the server object, notably) and the aforementioned async nature. So that's why the best way to communicate these problems is via a profile accompanied by the usual bullet-proof Emacs -Q recipe. It should contain a clear description of when profiler-start and profiler-stop are invoked, and what the user did in between. And that's _exactly_ what Theo did here, and was useful to me: I reproduced his results perfectly. Those profiles easily tell us who the hotspots are at the Elisp level. That's IF the hotspots are even at the Elisp level, because often a slow-responding server is all it takes. In those cases Eglot/Elisp may or may not be "off the hook", depending on whether the cause for server slowness is some earlier misconfiguration that is ultimately Eglot's fault. Maybe some of this info should be added to the Eglot manual in its troubleshooting section. Jo=C3=A3o (*) The eglot--glob section is a notable exception. I used benchmark-run to optimize back then.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:21:03 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:21:02 2024 Received: from localhost ([127.0.0.1]:58249 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxnEj-0001Vz-6q for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:21:02 -0400 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]:45303) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxnEg-0001Um-9L for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:20:59 -0400 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-2dcbcfe11f8so8859421fa.2 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:20:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713529238; x=1714134038; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=VQXn+7Xc+YxaSQv0TKEihFPQgxqNZcckSYgGHmyMTRI=; b=W8s7C4sYjDoGdCkM2eLboGY073GMCirt8TkZ6LiXiCToiXiZ9KsQZoZMPv+qXzVPjT LIbzaVIhqC2TwHHcuN2NoV8uwSiviXGadAwA88ako4JJSG/axZsEgEkBCeXVWIpDjszA aSR7fk3LZeMlc7usmKe9raT9haBTEpXRmvEvhvm7G/wuuTB4W4AjjsLVmMGqHOJyzmcN 5jFOwbL3SP0REdi26S0lZ0WxTU6csN8JwG5YdySSBkIA6xqE9ZHv0bsRhyRWGhtML8za nRvWqZVUslevrW5GP/XaFFdu5CiYhXpN1KGue4Mc4h3pL+S37oKfys/mFPe8CvQdqZCe 9R6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713529238; x=1714134038; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VQXn+7Xc+YxaSQv0TKEihFPQgxqNZcckSYgGHmyMTRI=; b=J1xQqb8dabmDAy/LZxcwRpB2fHR0uWiMJelwIiMaQBmlwYdIU3w4VfAqh0pOfVDC9s 6zZh+8Lammj9vFU4lq+DrNB91c1QJyfStEwShhDEFBDDrY2Y+de3gbQ4dB/bAf7uXeOB PbqgaX9+QOhIq39rXOZfK9VmsUkasuN/Mrdba3Ua1oQCgJHy9Scu85Ozj4DNQEicwTQg rd5HsDKXJLvXPyoiLCkinJqYBC1C7FRFCPa/Rg0HMfEoctPnJ1d/NfKXV+lknVHqi0AR KKXkwOnhfy6bjl1o/J2ax0pil1ACK/bzC+MsGYPnBG3sjW24BFW150XvN2k5n9hXKh4N eanQ== X-Forwarded-Encrypted: i=1; AJvYcCUl8MWlYXfHLe7AiKKvIJ+BozMAhyc8sJENaAYwtPX86QEZj2CWKA+BRiD6oZZ43C13hbCXdRS46RkbgML3vK0R9vm5yDo= X-Gm-Message-State: AOJu0YxYss6nk9EKRMGFM3h0JdmYBue6a8ZGkrK8iVxbvyJZM+TukuDw iSPvjRwOlteaaqTud/d8ef3LI5G26SR+OWL5B7xXjm27MJMmlMe+tTBE69g3LAbMdf71Y8kS+1g b2dbQdEeuGoKb7ZobGroE983LQuBKr6ul X-Google-Smtp-Source: AGHT+IFp41S7xPyVQmmIBdLGZnBpD9JodrmS5d32nPHd7DcaxN576en/KVtQO90Vh5Lj+ov5OJv1zGb4J30ZiIDsw0s= X-Received: by 2002:a05:6512:b90:b0:51a:b933:b297 with SMTP id b16-20020a0565120b9000b0051ab933b297mr1902124lfv.2.1713529237982; Fri, 19 Apr 2024 05:20:37 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <CALDnm53Su0aBxQ2_7oJawdmBC=YTB7DejY9jGK_70MaxEorW5Q@HIDDEN> <86edb1blf6.fsf@HIDDEN> In-Reply-To: <86edb1blf6.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 13:20:26 +0100 Message-ID: <CALDnm500W=jMaa0Z-jV48XN7-6+PRtp6Q5vBtm99RnbfwxMqug@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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 Fri, Apr 19, 2024 at 1:13=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote: > > Theo's latest measurements show that -- in context -- there is a 4% > > time spent in find-buffer-visiting and all of that is due to its > > delegation of work to file-truename. Does that change your mind? > > No. The original slow-down due to find-buffer-visiting (admittedly, > not in Eglot) was much worse. I understand, wouldn't change my mind, either. But Theo says it's much worse in some other cases, so I don't mind installing a that f-b-v bypass (with a sufficiently explicit comment about a desire to return to it if file-truename is ever sped up).
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:13:32 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:13:32 2024 Received: from localhost ([127.0.0.1]:58239 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxn7T-0000fA-Im for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:13:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40172) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxn7O-0000df-Hz for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:13:29 -0400 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 1rxn73-000630-3d; Fri, 19 Apr 2024 08:13:05 -0400 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=pkQeJIFcQjLyv7utZJXBhtdFuaVx4w4uw4cd+LVupdg=; b=kVP/XDSxbycikMZzGoWj SUI2jcMuTaWcTga+5y8PpEOAL6K+DFjWbjFh1CXjXhJfGIjfSbjfSRn3wIEI7CsRz8TlYkv0I1L3/ V7jOPEx/kx91eScSbSuTaO7CVfCn1KzrUS1zZxbdgpkut8u6HcFvkYSk6jYqMNkt1xs2g2kK2rxPD j2ZUfy/92fLpNXGtDiFLnNUxcboNlcVEhDyCGgRqtnX/I03EJiJXZ43d8dEWB24UihSuWi5c0EK3T CcsqloEaDJ0rx3+a0qImxvsU7QBL/csg7BriyuPwgo+IwBYy2E6ezdXx/8kKXqA4PJnKOtC/cV9+l 7rXE5kcYtOcHUw==; Date: Fri, 19 Apr 2024 15:13:01 +0300 Message-Id: <86edb1blf6.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm53Su0aBxQ2_7oJawdmBC=YTB7DejY9jGK_70MaxEorW5Q@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Fri, 19 Apr 2024 13:00:54 +0100) Subject: Re: bug#70036 a fix that References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <CALDnm53Su0aBxQ2_7oJawdmBC=YTB7DejY9jGK_70MaxEorW5Q@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Fri, 19 Apr 2024 13:00:54 +0100 > Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > On Fri, Apr 19, 2024 at 12:01 PM Eli Zaretskii <eliz@HIDDEN> wrote: > > > > Yes, that's what my latest patch does. But ideally it would be cleaner > > > (IMHO) to have a fast usable find-buffer-visiting by speeding > > > up its underlying file-truename. > > > > We did that at least to some extent in the improvements submitted by > > Ihor and now available on master. From where I stand, we now have a > > reasonably performant implementation of find-buffer-visiting; I would > > need benchmarks showing otherwise to change my mind. > > Theo's latest measurements show that -- in context -- there is a 4% > time spent in find-buffer-visiting and all of that is due to its > delegation of work to file-truename. Does that change your mind? No. The original slow-down due to find-buffer-visiting (admittedly, not in Eglot) was much worse.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:04:32 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:04:32 2024 Received: from localhost ([127.0.0.1]:58210 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmyl-00080n-NS for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:04:32 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:55513) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxmyi-0007zf-Ow for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:04:29 -0400 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2d9fe2b37acso25519921fa.2 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:04:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713528248; x=1714133048; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=OyDVPjiorQzzH6P5hD979iu5Vp3yY7lfB57IuYKO4D4=; b=Gf6Kk7N4i+TLuusQnDsTx7xNAnyeaEx/ONQNc+WWw9D4w2IaI7TY2uCb/R9t0boDf3 Il1yt3u1V4GRaqZ2HP0pUogPSHWb6nKcpA3Oy1VvD1cQHhQ8eunoQzgVz0WSZay8DGfj jHEeMU528d6F47uch5xLt2X4NzU44aYnJK/DzOjm0ujXucQpSRBbdjMb5Zdl3fWf2umX zHUIGvJ/CwxrSLByn5/8mmoKNVIZaqmt6/oJPe6IFFo7GL9aMKPYgjMwPxIWFWAhtLMo Oq5vSfb6jkjXNZ39TIWSuER5eSeUibYiC+YVqt2ZpxL0AEUWr25wdpOF8hYOcMDjnyeH UCaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713528248; x=1714133048; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OyDVPjiorQzzH6P5hD979iu5Vp3yY7lfB57IuYKO4D4=; b=mYbttOrP/KkCbbWV+uWTj+sGpzXSwFvGy/BJea63wWFU3OfK322/xGp1XqV1SwJjWD mVS3/uKHMZ8xUOKrMEEcQke+P/Q+G4wqNlYPictixrHpksyAABOniNu+L+De6P9FlqFe CESXMYMZOU86SYYc51z40VW0ZYgn4MBGaLa484a8yZM9DlgIYcNmSSV21L38MmeG0yb6 n+WCH51n70PNvscq2Cg58d+3Y/HkGXMsc6eR66UiNy1plxB0Dy/htksCbxj3tVWpQy5g K8SVCQNGeZzWu8pSufBAkhtKTfF4C8QD1u+TNFZ0wrR4HU/9FpGPUEHgkMdKn4JsuFM5 ZaKQ== X-Forwarded-Encrypted: i=1; AJvYcCW284cmdC8BJV3Mcj6XbAALH9DMWbpeqOkjeP1MIlw7cgUbg6H0ZL8yCIEuQcf8eZqsozZ7gdZPnXSg7ls8zk6NJzBr34g= X-Gm-Message-State: AOJu0YytRKuRgZ9sdRti0kTEEPYiEMJz3e3LTQTmPs1YItNN4l12GQdT SIsgLgvwHHKeVttpO+gwWyYmB00VSgzBze/E5xcLQrFTgF/OpDkHxQAUoh80/3coiHaeWI1Fr4x wrq9pbTin2oK9JkDckrNzx4e7LHiiOg== X-Google-Smtp-Source: AGHT+IGHadAIvyxgp+lIQPONrsqwT1eJK79I6QEZ0ynQXr51X6VHCQ15E5ZsdS1u23sr7NxymBoI6O1q+9gwvX/Zx7k= X-Received: by 2002:a2e:97cf:0:b0:2d8:71d4:4bb3 with SMTP id m15-20020a2e97cf000000b002d871d44bb3mr1199143ljj.26.1713528248474; Fri, 19 Apr 2024 05:04:08 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> <86frvhbmax.fsf@HIDDEN> In-Reply-To: <86frvhbmax.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 13:03:56 +0100 Message-ID: <CALDnm51cFYbs9772UrM230O9pxHN8NNZv18P=fVMBckXcv_iPQ@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, Theodor Thornhill <theo@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 Fri, Apr 19, 2024 at 12:54=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote= : > > > From: Theodor Thornhill <theo@HIDDEN> > > Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > Date: Fri, 19 Apr 2024 13:32:42 +0200 > > > > I wonder - why can't we use just buffer-file-truename? > > buffer-file-truename records the _abbreviated_ file name, so it can > depend on directory-abbrev-alist. Whether this is important here, I > don't know, but we must at least consider this caveat before we > decide. We definitely need a full, true, unabbreviated file name there. That's what LSP servers like.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:02:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:02:28 2024 Received: from localhost ([127.0.0.1]:58204 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmwl-0007iX-Sf for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:02:28 -0400 Received: from mail-lj1-x229.google.com ([2a00:1450:4864:20::229]:60814) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxmwj-0007h0-0i for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:02:26 -0400 Received: by mail-lj1-x229.google.com with SMTP id 38308e7fff4ca-2d094bc2244so24835871fa.1 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:02:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713528125; x=1714132925; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=hZhNLzO3eQKWLzdnygDyyBlaroFNytqTmeqIeos2cCM=; b=e8OCvcCqDttW47f8KVXXHlz6ecJvHv1wh+kNaRDQRw/lHjeUqh2LtYvr0C/HSu3rux LZdMZ3s7q8a1VgjLi/QYCDcp+ecEuQnWcqvjDLuOFbXDofNgyupN5QuH1LLQ7s5firfq Y8GcdmCpRBgRqSgaYgZtN77NrbxMjSsxOv9Q7ydojXfC+0l6zW8/riAHYp3jTMS31/i0 d7RNASVGcsudDW/Dey5dye/DTSGcXFyfPnggyOZDqWOG8JuBjKsccfhDG1gRQHw4MpuA 90DUQc/jGUyx/nugDtdcaKQuBghIitqQ0TF+U5m7sFYlo8xcoI+RBH99Lq5PMjDBvHcn PjeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713528125; x=1714132925; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hZhNLzO3eQKWLzdnygDyyBlaroFNytqTmeqIeos2cCM=; b=VUYoJDK8hZ3pWy50hOxHmISM1A/l0OUYq+/lqAizHjaQ19IcWY6c/YmhUlPjp5fC2U UNW7jr39f+A3sW5IOcjh4HWOwaYOtKu/STQciRfN5o0aeph3MFg9RacIc1JzjBUHpYBb RA6Hapr+1hMBLsvSzTsn0WEDnFW8TzGgx95uExQuoc94a+z7fdBkdE8rDVGs1H1mlDX6 WZiYwGrt8r/weHyMaL/J74Nu4AMABIbXJHBcava0KdHU8BU9hS63kFRs2058rtCXgRVl hCfEPKmLO8JthBiWJ3C5Jy3MP+eF1V2kxzrJ9sSr3OjL89kJL65WULnFXKceAfjOqq0P Sv0A== X-Forwarded-Encrypted: i=1; AJvYcCXdrODxVk5bUocFKrQfz0UWS167sFGJes2bB6sCMuXHWz2V9SSfFWlAp2Zt0m4B4LnAhrUSeh1OelyJYb6AiqEnfxNkorA= X-Gm-Message-State: AOJu0Yy26M7bZlEgDzVYUAihT4Kyu8qU/SC8m9Z6WHtUCB5caJOVrjgc lvp92PIib1hTZY9HxkFceFfTicFCeaWehqzMBQU6PwmlcGZkfMYAakCIkhSlzphzpkcbxMb82/M pK4EASOTAvw990/cZap6wm8mHgw4= X-Google-Smtp-Source: AGHT+IE/y2bo3LroFCkLthXZ6z594uzvWnCwoY26g8uktNQiucAbKzkv4V0MD/JMCWK2gKYGltllOSqipB5vPFhGvLQ= X-Received: by 2002:a05:651c:1039:b0:2dc:b04b:b3c0 with SMTP id w25-20020a05651c103900b002dcb04bb3c0mr1078838ljm.6.1713528124864; Fri, 19 Apr 2024 05:02:04 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> <87frvhlgl0.fsf@HIDDEN> <87cyqllgen.fsf@HIDDEN> In-Reply-To: <87cyqllgen.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 13:01:53 +0100 Message-ID: <CALDnm52ixgWjJvfgXWzykPsOfgmY3mT_-UEnpizG=7oT1AO+Sw@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 12:51=E2=80=AFPM Theodor Thornhill <theo@thornhill.= no> wrote: > I guess this should be enough: > > commit f6ed2e848d23035748b621a86be74956c093823f > Author: Richard M. Stallman <rms@HIDDEN> > Date: Tue Feb 14 16:33:19 1995 +0000 :-)
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:01:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:01:28 2024 Received: from localhost ([127.0.0.1]:58200 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmvo-0007YW-Ae for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:01:28 -0400 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]:42178) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxmvm-0007XD-4g for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:01:27 -0400 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2db101c11feso13380761fa.0 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:01:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713528066; x=1714132866; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=hwwnHLA3ZUR43zySo9CpuCTUOuoM5OsizwapW11ebYc=; b=gi4ovb0UAGMz4ZNzwUZHxQfdOA85MxdrjS6Ew6rbMjPp/MM8R9TCgvzDK6QlSRqB+K zaw3VfeSuIN8rrBx3D3PCLQvNf5RpiRVqyCkJ8uG/79p1ELcpeagilv/eNblT05sWlY6 d+O8APuBlV6sDEReyXFwFrvl6/ralr60J8jleq2/Zb4hUWPIQ2+oWPpYgyfo1Qk5RvEF GRrFYCj2ZePelWn6BZxXRZHfHQooBJHgrYVUDsNrSD6Pv2Af/VxVnnnlh8JD333VZhJt F/fBTQ6t9Aa35Pp2kcvNI2TySrM0Cpx/oYn1biVbzl6+VoLBxUcgYz84Cz0IEG4zfcCT s68A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713528066; x=1714132866; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hwwnHLA3ZUR43zySo9CpuCTUOuoM5OsizwapW11ebYc=; b=LK/vcGfoOnP5nfy8OgUrw9uhfypRtwFXPbCbf5gW3nZ494d8/7P3ZrHk4D4XUY6KZV KQo+auRkYEFC/nyH+Hy76MerAx1OFo1d72bNfxPESbSV6tHpVnEp7orO1o3NoiE3VGK/ Wqi5eFzdIccx3FpqJKLs2AuMWlsB1C/hCd9CJnXIkyfFvxft/13pYXMttyh87r/rF7A+ I4r0BQ7lNIeiR2c1MJlvvrg3fy/BUP7ozR7pSHJhIuBRqnNpCqxNCnWMsif9STPzchkT bX5y5OfDs+DWzzegzkQo/YcgBda3ncGhNQAxxCDYyoklA6MB7d8/rRpOWXxSdpad7jj2 n7dg== X-Forwarded-Encrypted: i=1; AJvYcCV2n8L+7iIxYVvXPWFrKEbLVAyYNBvmB6mW8SbUV4Rdc38QQ+z0GDmk6UKW7UZPQ28sSbJw4AynY1wujybICAvxlmFdCnY= X-Gm-Message-State: AOJu0YymVBTiPE405hO1AV92pC8pDdfpCwped4SOYd+w1PwESvcYF3q+ TY0DiXTMp2MJNtel/4EQIDte7ixWAp6W7pZwhP+Gez5QDSvqr6lCfuVA9dyolsAyadmOvSV2y0K bqYb/Gd56sMnA2aAr+dNqCNXJvF0= X-Google-Smtp-Source: AGHT+IFv14pUrePhrVaj4ob7kv87oP+X5Yo9Skpaq+200yj+OjjfqXI/uXsB6h9m0FPof7iBsNekliXr8tpnH61rg+4= X-Received: by 2002:a2e:8752:0:b0:2d8:49e8:3132 with SMTP id q18-20020a2e8752000000b002d849e83132mr698013ljj.0.1713528065608; Fri, 19 Apr 2024 05:01:05 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> In-Reply-To: <86r0f1bopx.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 13:00:54 +0100 Message-ID: <CALDnm53Su0aBxQ2_7oJawdmBC=YTB7DejY9jGK_70MaxEorW5Q@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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 Fri, Apr 19, 2024 at 12:01=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote= : > No, IMO we should try it in both "emacs -Q" and in a session with a > lot of buffers, to have the performance in its true relevant context. > Most real-life Emacs sessions have many more buffers than we have in > "emacs -Q". Worst-case testing is not always TRT, because it can skew > the perspective and lead to wrong decisions. The worst case here is relative. It's also a very plausible case in the sense that starting Emacs, navigating to a file of a project you're working on, and pressing M-x eglot is probably one of the most common things you do with Eglot. So IOW the worst case is also the common one. > > > But if calling > > > find-buffer-visiting from Eglot can be avoided, that is of course eve= n > > > better. > > > > Yes, that's what my latest patch does. But ideally it would be cleaner > > (IMHO) to have a fast usable find-buffer-visiting by speeding > > up its underlying file-truename. > > We did that at least to some extent in the improvements submitted by > Ihor and now available on master. From where I stand, we now have a > reasonably performant implementation of find-buffer-visiting; I would > need benchmarks showing otherwise to change my mind. Theo's latest measurements show that -- in context -- there is a 4% time spent in find-buffer-visiting and all of that is due to its delegation of work to file-truename. Does that change your mind? I reproduced the measurements but personally didn't feel this in any way problematic (in my machine) to the use of Eglot. But Theo says there are Java projects that run much, much worse and with much more friction, but he can't share the data with us for other reasons. So it didn't really change _my_ mind. For _me_ `f-b-v` was reasonably fast enough when running Theo's recipe and definitely fast enough when trying any other project. But what changes my mind is the fact that: * I believe Theo is telling the truth that it's a much bigger bottleneck in Java projects. * the workaround isn't _that_ ugly. In summary, I still think f-b-v use in Eglot's publishDiagnostics handler i= s cleanest conceptually, but because I believe Theo that it's a serious bottleneck, I'm not opposed to skipping it with the alternative technique already presented. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:59:33 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:59:33 2024 Received: from localhost ([127.0.0.1]:58180 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmtx-0007G3-DA for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:59:33 -0400 Received: from out-179.mta1.migadu.com ([2001:41d0:203:375::b3]:46670) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxmtu-0007FD-TR for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:59:31 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713527949; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=X1ib8nJhOtXvqdVrvf7nTp+TyR1m3sUgbbkUlFL+DKc=; b=uk/1FtDTRg9mNL4ep0aVl0Y1/6s8XNQwzCs+vE2W+++ayyrWjz6abbQpJEsAhw4QRKeeaK 6lRjCpvnphHR2oAbAU2DUvPdWB53eZZfKFw+s+sXmsa5Hmm9hmp48AO4BoLIYb4I/BySMy eNh52IyHmRtqHkP6R/n6TP/U4biHymJfdl6rvUPJeTeuK91yC5ed2BWXm7l0So2Du0S8V/ inXxvq/JyP6J/z3x2/hVaP3O9X6dpx8RxwlOqYq3oXcG13xk5aFBvlchym9mlEb+5qO/uK n34uymOGd0LSj6kfA/dqrDRd5hv2dGoU6Zm3UTKWp3bjmfgTaw8S6le29y0bXw== From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <86frvhbmax.fsf@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> <86frvhbmax.fsf@HIDDEN> Date: Fri, 19 Apr 2024 13:59:06 +0200 Message-ID: <87a5lplg1h.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@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 (-) Eli Zaretskii <eliz@HIDDEN> writes: >> From: Theodor Thornhill <theo@HIDDEN> >> Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org >> Date: Fri, 19 Apr 2024 13:32:42 +0200 >> >> I wonder - why can't we use just buffer-file-truename? > > buffer-file-truename records the _abbreviated_ file name, so it can > depend on directory-abbrev-alist. Whether this is important here, I > don't know, but we must at least consider this caveat before we > decide. Yeah, it also seems some of functions in question don't need 'path' to be an existing buffer. I'll look at it, but I think it may be a no-go. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:54:52 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:54:52 2024 Received: from localhost ([127.0.0.1]:58169 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmpP-0006d8-G0 for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:54:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54798) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxmpM-0006bY-Gc for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:54:50 -0400 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 1rxmp3-0001pj-3f; Fri, 19 Apr 2024 07:54:29 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=OS3g3TwrMljPbudfmeHS44C3mMJDfvx4VP2Je4fV3TM=; b=M6BnTSlJl3eR MGQ8759jMvdVCcl/fHUpsiu3DHnwlzi1/oB+/qKg7EBaiNpCOBN7unvXrFA6tft/7CsWREhJ+23mi ILMRoyie0ncdZgrgtO9T8f3uloiqO0zFZU1urCmOAtdF16bM2u1lW9ANQLBXq7RSoJADApQk8WlXU fTsUDNpHO6ECzE3ewuMM+ybEVy6jKUP8GSuU38H5puHC+rFhKMJme12Y7EbBYAvNekD0JjiyQOtGx OIsCIqZFXFBDr2gN/WRfL501zxHLvG8PYujKY6su8LU62I80u6jQJKsdbIEWhsyprz4mkA9K/ak8z 0kKM6v0URUVyEj1gxV87aw==; Date: Fri, 19 Apr 2024 14:53:58 +0300 Message-Id: <86frvhbmax.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> In-Reply-To: <87r0f1mvtx.fsf@HIDDEN> (message from Theodor Thornhill on Fri, 19 Apr 2024 13:32:42 +0200) Subject: Re: bug#70036 a fix that References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@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: Theodor Thornhill <theo@HIDDEN> > Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > Date: Fri, 19 Apr 2024 13:32:42 +0200 > > I wonder - why can't we use just buffer-file-truename? buffer-file-truename records the _abbreviated_ file name, so it can depend on directory-abbrev-alist. Whether this is important here, I don't know, but we must at least consider this caveat before we decide.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:52:16 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:52:15 2024 Received: from localhost ([127.0.0.1]:58146 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmmt-0006GK-Jv for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:52:15 -0400 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]:53546) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxmmp-0006F8-Ut for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:52:13 -0400 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-518a3e0d2ecso3030378e87.3 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 04:51:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713527511; x=1714132311; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=e207QKcfART6R1akRzsgtJZ34RrH/Lfx5M1UBhy3Fy4=; b=h/dvvwzUhvLuxiBCTHxrTfAK2nr6CJ5FHAFuY7mSik5zilyx/6WrAf0zbcSQiSvK2h jR0EWMDShhHZGEr7PCtdQXU8hVmML3tMtD77Ufa8jTbCYD3bECUp9CieUHWgpSjyfjE+ E4iJyuhGpDu9StJO/NAU3LpnoSquL+uzmC+QXSEBX1TpE9NFRarazSmVjwTO5HAIT4ox Sg7l1r+mJdinrE7CXbWAHBbnmIcQY6s25jQig7KQ4fNvMq+tcouS+WYV2OvaA7DPvRFN m1F40FXKV9uAQVoW8cEV3qmBwmKUDPDfmdX7nHUqTjaCwW4VprAxdc6RJy/iW5o7QZrl 4qLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713527511; x=1714132311; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=e207QKcfART6R1akRzsgtJZ34RrH/Lfx5M1UBhy3Fy4=; b=p3xsy9E1RwP+eSEN85CMmy0uddC4BrwK6oq4lQYbeBCwCtE45xTw6+H1xrcWXjsUBB N5ds2es3Qy/qEFFVCB/kF+OP5lCHy2vjdR0QVc+sVYgidSFtHJldw1L+OVQdw9wN5G+T xnF6CNHo83dCLT8Q+qjRdfGjKdFzBgDjszCfuS20tcdnNOmVIzg54y6x+By26Dew6fxZ /p6AvfBpehkbgktAvctXuEufrC2D7+UErAnOfxu0/e2MMUYukOwoDmmYDTXYGxgI4Qfs Ocvk1UJDDmzF163BIiEs2e/FB9q9Vh0z/B6YQWX2N0qK7d9865Yq0oHeIiIbbEfu4qA4 ZxLQ== X-Forwarded-Encrypted: i=1; AJvYcCUNPbP+GcCOOD3/twST/hZ7swlek8KCRYEeSvgXWUxHR5h3QOzpEBs0wjkldrO+N2KzyNlK1MprXVini6/1a+47TOESFFU= X-Gm-Message-State: AOJu0YxrombXDNXuABKbcPdoFRr62930HgpSb8qEF3tnL9Sn4t5p66Qj ljS9rE9xQ2GXh9nuivjIjv+KY6H0zb40ghwk0l42bEG7JDiepyN6DYF86jYIwNxLOkvvcK9IqEG dFTRhm1c7KGuR7beK4iftgmgh+TkGcA== X-Google-Smtp-Source: AGHT+IFEvsWntFVz8erBT9EWOHSNMITdvpJd4dpK8ziCLUol+/TQX+F2YK639O2xVGrBTmdte5uLOlMAzd/HMnNzw+E= X-Received: by 2002:a2e:a178:0:b0:2d7:121f:6b7 with SMTP id u24-20020a2ea178000000b002d7121f06b7mr1455037ljl.38.1713527511303; Fri, 19 Apr 2024 04:51:51 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> <87frvhlgl0.fsf@HIDDEN> In-Reply-To: <87frvhlgl0.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 12:51:39 +0100 Message-ID: <CALDnm53Pf8zwMM+OTOC59U5th0M_oKnBrX=-u+2nNXYBfpKvNg@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 12:47=E2=80=AFPM Theodor Thornhill <theo@thornhill.= no> wrote: > What would you consider as a sufficiently old Emacs? The first version supported by Eglot, the GNU ELPA Package. I think it's 2= 6.3 if I'm not mistaken.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:51:37 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:51:37 2024 Received: from localhost ([127.0.0.1]:58142 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmmH-0006AY-7l for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:51:37 -0400 Received: from out-179.mta0.migadu.com ([2001:41d0:1004:224b::b3]:65500) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxmmF-0006AO-Oj for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:51:36 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713527475; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=l3XnPx6JijQLsIWycFmwCwTkpg1TJCnPqSXNNMR9cUI=; b=sitGlPQhYUVqQpdBixlGTtY4W2Ug4/7jRGYQoMh2L1C+oNl4e2b/f7raYnSkoJzCWo8Ut3 wQQTEndjoiTmLItSX2nE5ZPrbnzDw+xBQQVtYOXJ3VxsOq2tCeNyAM8QW0RxqR9q8c/8V4 6l1mcCu3mnUGCGENMgoRotHO8KVzUmcTvjbSL9l5BkrU4WfZfBbXDhslJlszqbKY17OwLh PQ3/TaqROkm3vncMfyl5xuwzhI45KX0ppFAoYMbz1jYADvzhod3EqgxuSQ41n9O6A/ffmJ WSLDHONaP6tFcwWS9hJjANmFFPP7spLllmKE+hk9wEGimUxEY/cnjdc4gjc4UQ== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <87frvhlgl0.fsf@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> <87frvhlgl0.fsf@HIDDEN> Date: Fri, 19 Apr 2024 13:51:12 +0200 Message-ID: <87cyqllgen.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Theodor Thornhill <theo@HIDDEN> writes: > Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > >> On Fri, Apr 19, 2024 at 12:32=E2=80=AFPM Theodor Thornhill <theo@thornhi= ll.no> wrote: >> >>> I wonder - why can't we use just buffer-file-truename? >>> >>> In the below function, wouldn't buffer-file-truename let us avoid the >>> file-truename in eglot-path-to-uri? >> >> Never used, but try it out. It seems it's already a built-in cache >> of whatever the buffer's truename is (and the docstring says >> it does call the slow `file-truename`). But like in my patch, it's >> a one-time thing. So yeah, if it's available in old Emacsen as well, >> it could replace `eglot--cached-tdi`, but then the search in the >> publishDiagnostics >> handler would have to be adjusted accordingly to call uri-to-path again. > > What would you consider as a sufficiently old Emacs? > I guess this should be enough: commit f6ed2e848d23035748b621a86be74956c093823f Author: Richard M. Stallman <rms@HIDDEN> Date: Tue Feb 14 16:33:19 1995 +0000 (syms_of_buffer): Set up Lisp var buffer-file-truename. (init_buffer_once): Set up flag and default value for file_truename. (reset_buffer): Init file_truename slot. diff --git a/src/buffer.c b/src/buffer.c --- a/src/buffer.c +++ b/src/buffer.c @@ -3011,0 +3014,5 @@ + DEFVAR_PER_BUFFER ("buffer-file-truename", ¤t_buffer->file_truenam= e, + make_number (Lisp_String), + "Truename of file visited in current buffer, or nil if not visiting a = file.\n\ +The truename of a file is calculated by `file-truename'.\n\ +Each buffer has its own value of this variable."); Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:47:50 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:47:50 2024 Received: from localhost ([127.0.0.1]:58137 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmib-0005a6-IK for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:47:49 -0400 Received: from out-171.mta0.migadu.com ([91.218.175.171]:43954) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxmiY-0005Ym-43 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:47:47 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713527246; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QobIiwFRT+cSpfYvE+Jp/DpOTA7dqdBkmgKTLe+Fbjs=; b=jNh2ybkCM8u4b3TGoFqS6/v4aXKAzz2gK6DlO7dJcOmIuDbb+AXQt8pkzYEbhOXNzyIXlm y/zgwxv50DIvrZZg5DKCc4u+iqxHVMqbwRrO4RCAlprjBl4tL5ETPUo+RgscB8XW1anpMz J52SqkLvFv0mLUjaDLPslbR7x1VBug+eLXWoVt3OCXaj1KZ7iAU7YmnR94SOIbmmXsnoXZ Re1F/9TbKtuyooiEeByyQY2qguqPb1TFjaFs2LLEVbGbrJSJJyj1/MuLNF7Or3S7Tyzm+o sPYDQUqjS+0IBDtVLyGg2z/BJl9vF8ZaL3Zzs1gwipX3XMAQIBCtXsn9FauoOA== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> Date: Fri, 19 Apr 2024 13:47:23 +0200 Message-ID: <87frvhlgl0.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > On Fri, Apr 19, 2024 at 12:32=E2=80=AFPM Theodor Thornhill <theo@thornhil= l.no> wrote: > >> I wonder - why can't we use just buffer-file-truename? >> >> In the below function, wouldn't buffer-file-truename let us avoid the >> file-truename in eglot-path-to-uri? > > Never used, but try it out. It seems it's already a built-in cache > of whatever the buffer's truename is (and the docstring says > it does call the slow `file-truename`). But like in my patch, it's > a one-time thing. So yeah, if it's available in old Emacsen as well, > it could replace `eglot--cached-tdi`, but then the search in the > publishDiagnostics > handler would have to be adjusted accordingly to call uri-to-path again. What would you consider as a sufficiently old Emacs? > > Try it out, may be cleaner indeed. > > Beware though, Stefan has fixed the tests which is very good, but there > still isn't a test for the symlink scenario, so you'd have to test it > manually (or > even better, craft that test yourself, with clangd). > > Jo=C3=A3o Sure Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:41:18 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:41:18 2024 Received: from localhost ([127.0.0.1]:58132 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmcH-0004oE-Us for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:41:18 -0400 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]:51657) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxmbe-0004gn-Bq for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:40:40 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-51abf1a9332so731669e87.3 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 04:40:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713526818; x=1714131618; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=0Ec5KsJHsnWYs6nTAiVBtlK9Bq7KYs+GFnOmcxqTm1A=; b=nm7DNGtKG6eZW2bJrgEAt/uFchRdxwmk2tytle+vEs2wNoLPL0WW01qZtVB61q9eYI sBuIJSbUqBZsnuj++8XspIVhtvXKtlmvmEDnk5itjtXBd08o6Wsvf0vEh1PoB9HyX5Sx ujI/Ps5NhdNeWMoERiHjLe3Y60LlUitdOEXIC9/B5goRGqyz/tSK042+0ZHK1u8Pk6mD AtHM5+KbT8d83uDGLIqSKM0XTEjnWy12k6WtMtbSHaAHf/l9vjrO5Ae1H+hbIMy4GtJI r2s3WgPPZQ5K+7bZJPGb0YKyYQSo8v7GE72ITF670El4EWbuxz2RKelvZ0M5Wx4Adiz2 uZ+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713526818; x=1714131618; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0Ec5KsJHsnWYs6nTAiVBtlK9Bq7KYs+GFnOmcxqTm1A=; b=jasuiJ/4a0Y/g//vdnxeT32jA//2bMmAvWimOdLQZqSqM++KLuDpzxEKO+HaR9qg3n JttxKRpAk2u2ftlLLIyYm8Unu20kiOoVtScG3XhmdmRa0iIy4H2906vLZAv9mvQgn3mW wEWdc0Nfp5VTElfhyWys1Pukq6xYskV2wT+h85A0J3nFw7EJnoBOqXFuqBIv4qu4ciPs 9jWWEGMY/fqIAA5mo4GKeubngGprp3TP4/92m2qQ5ylKGBMJR51eHjXs1i10TZt4YqBC BPyalkSy0XyLHLBtTlLGZLmVBHaUc+z7kycw9STymzOz/ZqcjcwhYCC70+tADUGWp+re ENRA== X-Forwarded-Encrypted: i=1; AJvYcCXd6UNcO3agRTbUcvwqXW7oHp9dvTElov0c9jOYe0JCbUS3EUHZlrBfPSf8IrPqgODsF06rymPANUNHg8FLp75QE1nnaD8= X-Gm-Message-State: AOJu0YyU7tHGrjO2qZmgtkFfbJ6bBg8Z2aqnTAvNfQ+RcKddwNuSShNz 5LYb0ydJJ32TOgJCGimyBsIkMlCtsSg5QHFlC+fDU8HV1LGTOm9lQuPQ1o2EXIUzjW++SuDZ5fb cyQMpNusOLelSS43/WJ0urD8V/tJIxA== X-Google-Smtp-Source: AGHT+IHgUHzBouBShBj1tmVCrI2r0VFEBuGdVq+7H5iW8vpwYKjMleYTQitG24/mbRkG7aVcUGknKIC+Vr+QJG5heQQ= X-Received: by 2002:a05:6512:1595:b0:516:d692:5e0b with SMTP id bp21-20020a056512159500b00516d6925e0bmr1405906lfb.54.1713526818086; Fri, 19 Apr 2024 04:40:18 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN> In-Reply-To: <87r0f1mvtx.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 12:40:06 +0100 Message-ID: <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 12:32=E2=80=AFPM Theodor Thornhill <theo@thornhill.= no> wrote: > I wonder - why can't we use just buffer-file-truename? > > In the below function, wouldn't buffer-file-truename let us avoid the > file-truename in eglot-path-to-uri? Never used, but try it out. It seems it's already a built-in cache of whatever the buffer's truename is (and the docstring says it does call the slow `file-truename`). But like in my patch, it's a one-time thing. So yeah, if it's available in old Emacsen as well, it could replace `eglot--cached-tdi`, but then the search in the publishDiagnostics handler would have to be adjusted accordingly to call uri-to-path again. Try it out, may be cleaner indeed. Beware though, Stefan has fixed the tests which is very good, but there still isn't a test for the symlink scenario, so you'd have to test it manually (or even better, craft that test yourself, with clangd). Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:35:09 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:35:09 2024 Received: from localhost ([127.0.0.1]:58113 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmWJ-00042v-Fe for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:35:09 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:43471) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxmWG-00041N-Fw for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:35:05 -0400 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2dae975d0dcso30135781fa.1 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 04:34:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713526484; x=1714131284; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Ar8b395eaNQ5JmP5Ji6qUUaDRQuAwddKbzC0kIKNSCE=; b=XavJcdNm0fAQSv14SwWjnSPdJiTLNLecAupsN/YInMAWbVd5+dLmtUIpnTrZQsgL98 6U8Qoa70hmAleoLW8LQwREhxOuBq6qVosP3HieijNFZMY7n3pY65sLbVAAMKVxUA7FqA N/pvzt2v95HIdx0MZqfEk9YmM/b43/4Geon+JkDOLohYglPXMIPnGog/0PuWwNhOnSts 7KatYIpw9ylCy9gqDusqLSZtdbYED/x9h2nq/68hgZvj0BycyuaFXN74NJElklYHpmgS fhG5LEEtf69MgbGRzYsSmWzypMIusDTPdg2YZF0OUMBy1SP7XtnxTwv8+7DjSINXCkSg d4UQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713526484; x=1714131284; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ar8b395eaNQ5JmP5Ji6qUUaDRQuAwddKbzC0kIKNSCE=; b=EIvQnMmRDSjsSFv6mze3IZIKCGnhXzCqmDk/9/Y1br0kjmV5jcsTGw6JRNIbdi2JfX k9eoqH4d7WUpFjEKudR0n+yLH3zjk9X5GqUD0xUcnelVp+CmYBo9xWqTskCFfCR1vS/N pWtQVNVrLXyojOTBTX4YRhZhcya+/AA95Q7rT5K0mGu7OmtG5NJtOKnibKaOzL6hL5a9 nxbpcdfB67LHkYye7Atm6cJtyp2DMghW+MHrHqlI/MTcJ+wg713b0xh6lxKG3p5RReeP XbZS6becheBHXCbUD9aSUVZaxhWmHwfXRxnvJYFa/LSmOUG8L/UVPViODgmD24V7eJSd 6xaw== X-Forwarded-Encrypted: i=1; AJvYcCXlUG0NSKpLUAJ/iiBV0kDyGUBxaY4+MXmF5ggjhpAyMSPE0IaKYiel3xarwtv3i8yhCziv/ckdmAIBNiIST+QcjRD+Fi8= X-Gm-Message-State: AOJu0YxjC634zt1xdruPqDO0AdADlQeGrBnxI3+6gptvD/ZDHqGSRF3T s2rYIxtM0YTRaNwDuBRvAevhiMEfrHaJt3yhOBWNKUvYHXNmW3l2e+cFdujIZIzujyDOHhBXz/k xfoOiXpKKEhI7gmWQ0wte4qOgRzM= X-Google-Smtp-Source: AGHT+IEQgtWMpGHR7gDQmiXOoPYZUrLsZDLa9ElNv8fM/H7sq7eghaWWe1OjxpGpl0PDjcOIOatiG4kgw3+4jrJHJ0g= X-Received: by 2002:a2e:a983:0:b0:2d8:4892:bee2 with SMTP id x3-20020a2ea983000000b002d84892bee2mr725885ljq.20.1713526483777; Fri, 19 Apr 2024 04:34:43 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN> <86le59bo7z.fsf@HIDDEN> In-Reply-To: <86le59bo7z.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 12:34:30 +0100 Message-ID: <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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 Fri, Apr 19, 2024 at 12:12=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote= : > > > I _think_, but can't be 100% sure, that I explicitly decided that 6 y= ears > > > ago, I just didn't document it explicitly beyond typing in "file-tru= ename". > > > Git archeology brings me to a commit in 2018 where I was reorganizing > > > code, and file-truename was already there. I definitely knew about > > > expand-file-name in 2018 though. > > > > The fact that I chose find-buffer-visiting over get-file-buffer around > > the same time is another hint... > > Without proper commentary, this is a very weak hint. It could, for > example, mean the problem you wanted to solve no longer exists, or > even that you were unsure about whether expand-file-name could do the > job. If I indeed _meant_ to solve the symlink problem, then it most definitely still exists. I've demonstrated that. Intentional or not, the fact of the matter is that Eglot was usable from very early on projects with symlinks. Not all clients can boast that, as seems to be evidenced some bug reports to the servers pertaining to some other clients. Regardless, foregoing this behaviour should be at a minimum documented and would need an extremely well-fundamented reason. But there was not even sufficient awareness that the behaviour was being abandoned. Which is, like, totally OK and common and normal, and doesn't bring into question the high credentials of anyone involved in this discussion. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:33:11 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:33:10 2024 Received: from localhost ([127.0.0.1]:58104 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmUQ-0003oT-H4 for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:33:10 -0400 Received: from out-176.mta0.migadu.com ([2001:41d0:1004:224b::b0]:13155) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxmUM-0003mk-GN for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:33:08 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713526365; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yACaqzWwkw35NNrQowyQy51TiM4MgCV9+YilJ3km1Hg=; b=UAPq2kmTeVEQA4ELrtyDl4Vjvm0Rq1d04YmoZeoNvqX6+mtPwn6zhmQz1qZ5mfHGWhvIy0 YOsux+XpP0Gx5WXZ/I5APiPpRe0veZuyzoR0KbnVuAV2ryr6JZvQHxX1rghkmkAddgffc8 2f869WuQ0xUE4Q9j0HcdKZD2nOl+cbF6VPcu+A0MyjxV1XbfIfH/CWaq/It79skEjKbZW2 MW/g3W/t531AebsGPxlDjxhITBaOzT/rHQS5v1YJbznffRbfV01PwIUPnPnTpxRzsHjYDM eycHaAbsI4pM2CS7ZHFycUwQnFU89NDzm82Nn7c3MqX7k6uO7kmtYY3kz2lqNg== From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN>, =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <86r0f1bopx.fsf@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <86r0f1bopx.fsf@HIDDEN> Date: Fri, 19 Apr 2024 13:32:42 +0200 Message-ID: <87r0f1mvtx.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Eli Zaretskii <eliz@HIDDEN> writes: >> From: Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> >> Date: Fri, 19 Apr 2024 09:27:31 +0100 >> Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org >>=20 >> > > I still think the cleanest solution is to write file-truename >> > > in C. >> > >> > I explained in that past discussion why this is not simple. So if >> > simpler solutions exist, we should prefer them. >>=20 >> Fair enough. Shifting complexity around is what we do. But >> having a performant file-truename is a strategically investment, it's >> a very common filesystem primitive that users expect to be as fast >> as it can be made. Common Lisp has TRUENAME, Python has 'realpath()', >> etc. We could compare (here benchmarks are definitely the best >> method) > > file-truename does much more than just the equivalent of realpath. If > all we needed was a single call to realpath, we'd done that in C long > ago. > > The problem with rewriting file-truename in C is that we must be 110% > compatible to what the Lisp implementation does, since it's such a > low-level API that is used so widely. > >> > find-buffer-visiting was made much faster lately, but that speedup >> > AFAIR shows up only if the session has a lot of buffers, so trying >> > these benchmarks in "emacs -Q" will not typically show the effect, and >> > could even obscure the file-truename effect as well, because the >> > number of calls to file-truename will be much smaller. >>=20 >> I'm not sure what test you are suggesting. If f-b-v performs _better_ >> in "lots of buffers" situation, then we should measure Eglot's performan= ce >> in the plausible _worse_ case of few buffers, no? > > No, IMO we should try it in both "emacs -Q" and in a session with a > lot of buffers, to have the performance in its true relevant context. > Most real-life Emacs sessions have many more buffers than we have in > "emacs -Q". Worst-case testing is not always TRT, because it can skew > the perspective and lead to wrong decisions. > >> > But if calling >> > find-buffer-visiting from Eglot can be avoided, that is of course even >> > better. >>=20 >> Yes, that's what my latest patch does. But ideally it would be cleaner >> (IMHO) to have a fast usable find-buffer-visiting by speeding >> up its underlying file-truename. > I wonder - why can't we use just buffer-file-truename? In the below function, wouldn't buffer-file-truename let us avoid the file-truename in eglot-path-to-uri? (defun eglot--TextDocumentIdentifier () "Compute TextDocumentIdentifier object for current buffer." `(:uri ,(or eglot--cached-tdi (setq eglot--cached-tdi (eglot-path-to-uri (or buffer-file-name (ignore-errors (buffer-file-name (buffer-base-buffer))))))))) > We did that at least to some extent in the improvements submitted by > Ihor and now available on master. From where I stand, we now have a > reasonably performant implementation of find-buffer-visiting; I would > need benchmarks showing otherwise to change my mind. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:12:59 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:12:59 2024 Received: from localhost ([127.0.0.1]:58087 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxmAt-00077a-3x for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:12:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54766) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxmAq-00076H-AD for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:12:57 -0400 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 1rxmAW-0002d0-0n; Fri, 19 Apr 2024 07:12:36 -0400 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=5GQ0rT5/gLDUiFK9ohoTbfJqE2Fm1K0GHe4I4eShuj0=; b=kq8Df9YA0OkXoCRsMIGa 4FMhppe9X31TPA6O2qtrQtOkmO9YEOklU4x2b37wVH/+gKpYx+9l0gORT2eiykvKHa56k3uPFzk+v fyA7JgCXV4r8YkqoIHmVE0+oC80gwFltUSl8NLuraa+Y47E1DBsVl3U+1o5bP1EE0S51iOeDuBjwt 8qxQ8PtgREtLoeJUa0FS/VhCZ5TlFTakJ2vqs4broYbMj3NiK+GK+JMKp5fA5npCZ1mg9X01ftszV t4BFnd/x1XAHLD41B9MMHhAiGBOdlnL/HVEPVnxirJLHi0TCqt6k6cqXoIpVl/qsBmDGvVOUe0Zc2 P/91y1MGNVF60g==; Date: Fri, 19 Apr 2024 14:12:32 +0300 Message-Id: <86le59bo7z.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Fri, 19 Apr 2024 09:49:38 +0100) Subject: Re: bug#70036 a fix that References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Fri, 19 Apr 2024 09:49:38 +0100 > Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > On Fri, Apr 19, 2024 at 9:27 AM João Távora <joaotavora@HIDDEN> wrote: > > > > It's only now, that we decided symlinks _should_ be resolved by Emacs, > > > > I _think_, but can't be 100% sure, that I explicitly decided that 6 years > > ago, I just didn't document it explicitly beyond typing in "file-truename". > > Git archeology brings me to a commit in 2018 where I was reorganizing > > code, and file-truename was already there. I definitely knew about > > expand-file-name in 2018 though. > > The fact that I chose find-buffer-visiting over get-file-buffer around > the same time is another hint... Without proper commentary, this is a very weak hint. It could, for example, mean the problem you wanted to solve no longer exists, or even that you were unsure about whether expand-file-name could do the job.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:02:21 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:02:20 2024 Received: from localhost ([127.0.0.1]:58074 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxm0Y-00064q-A2 for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:02:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40998) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxm0R-00063O-Vc for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:02:15 -0400 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 1rxm07-0000JZ-Dh; Fri, 19 Apr 2024 07:01:51 -0400 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=eDTCHQZA2H3voe0RDHNckKHrP0Svf5M048pt27BB0kg=; b=GdAQi0lTk68Qfi1Z4aor 4O9UnTmHrU1k2YCU//Jn5d7wYzhsWl71tm3Ub8UjCkFAhx0XF2fcIHPJiNHB55gtH9dbGoV5b6StT Nhd0LMKS4gnRLfI4NrCmQ1+PVsKGYzJ2H26rQJp7p/Yo1DJlz5WMqDwIAa8/fTAsxOC7dqZq/bQam 49DFK6Ma1luiD50NBonK0Q44GN7M5qYCtumdn7y3vRqepNnDWVbgSmkYseOp6fGYDo/QWeSMNsfjs 6SMOjg8Pc4XCfjbgS6K+p7pR/PXZwmYVMC4f5+3YFCN68H2swHGMK/QwLr5KQuuBPiBldJxPy0f5P 7lWok6X6YdFW0g==; Date: Fri, 19 Apr 2024 14:01:46 +0300 Message-Id: <86r0f1bopx.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Fri, 19 Apr 2024 09:27:31 +0100) Subject: Re: bug#70036 a fix that References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Fri, 19 Apr 2024 09:27:31 +0100 > Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > > > I still think the cleanest solution is to write file-truename > > > in C. > > > > I explained in that past discussion why this is not simple. So if > > simpler solutions exist, we should prefer them. > > Fair enough. Shifting complexity around is what we do. But > having a performant file-truename is a strategically investment, it's > a very common filesystem primitive that users expect to be as fast > as it can be made. Common Lisp has TRUENAME, Python has 'realpath()', > etc. We could compare (here benchmarks are definitely the best > method) file-truename does much more than just the equivalent of realpath. If all we needed was a single call to realpath, we'd done that in C long ago. The problem with rewriting file-truename in C is that we must be 110% compatible to what the Lisp implementation does, since it's such a low-level API that is used so widely. > > find-buffer-visiting was made much faster lately, but that speedup > > AFAIR shows up only if the session has a lot of buffers, so trying > > these benchmarks in "emacs -Q" will not typically show the effect, and > > could even obscure the file-truename effect as well, because the > > number of calls to file-truename will be much smaller. > > I'm not sure what test you are suggesting. If f-b-v performs _better_ > in "lots of buffers" situation, then we should measure Eglot's performance > in the plausible _worse_ case of few buffers, no? No, IMO we should try it in both "emacs -Q" and in a session with a lot of buffers, to have the performance in its true relevant context. Most real-life Emacs sessions have many more buffers than we have in "emacs -Q". Worst-case testing is not always TRT, because it can skew the perspective and lead to wrong decisions. > > But if calling > > find-buffer-visiting from Eglot can be avoided, that is of course even > > better. > > Yes, that's what my latest patch does. But ideally it would be cleaner > (IMHO) to have a fast usable find-buffer-visiting by speeding > up its underlying file-truename. We did that at least to some extent in the improvements submitted by Ihor and now available on master. From where I stand, we now have a reasonably performant implementation of find-buffer-visiting; I would need benchmarks showing otherwise to change my mind.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 10:51:45 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 06:51:45 2024 Received: from localhost ([127.0.0.1]:58055 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxlqJ-0004lW-SY for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 06:51:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47020) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxlqH-0004kR-69 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 06:51:42 -0400 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 1rxlpw-000697-KJ; Fri, 19 Apr 2024 06:51:20 -0400 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=OtjZsJ8CFxiRWeZNV/FrOAdPQAd1NtxpVxdRWwaWBtE=; b=hgvnUz4eKO+ba5AncyUg uKZb2xvP8cAFQTVHqoUJpfGpHqkFARNdUtUcoj/TeuFymGk+oFPtGuzHi+pW+5WGbovsGwKgcaigr Jd1/NCuxQ5X7Jg9MbMfaW6wwV+c8e1RcogOPVf7RqaNjUeAsR7Ter4aWZGY+ouHd6YgtYilybfXcL aY5QHJ/4kYdFDGaqJtWV6milBhqkkf84ApWNJlNqE7WcfN6uf5p7G0dj0x296dogHzQ1bwTAyAlsx 9ROHz9ix1MNMmD7LMgncMybtAAOJ9Kz9aKP/y/j4MteCtPmqZM+Z7XCkW+F01PPcei3NuB2ScINxS +tGEOTEb2zyHmA==; Date: Fri, 19 Apr 2024 13:51:15 +0300 Message-Id: <86sezhbp7g.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Ihor Radchenko <yantar92@HIDDEN> In-Reply-To: <877cgt7ptk.fsf@localhost> (message from Ihor Radchenko on Fri, 19 Apr 2024 07:51:35 +0000) Subject: Re: bug#70036: a fix that References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <877cgt7ptk.fsf@localhost> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: theo@HIDDEN, 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@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: Ihor Radchenko <yantar92@HIDDEN> > Cc: João Távora <joaotavora@HIDDEN>, > felician.nemeth@HIDDEN, > 70036 <at> debbugs.gnu.org, theo@HIDDEN > Date: Fri, 19 Apr 2024 07:51:35 +0000 > > Eli Zaretskii <eliz@HIDDEN> writes: > > >> I still think the cleanest solution is to write file-truename > >> in C. > > > > I explained in that past discussion why this is not simple. So if > > simpler solutions exist, we should prefer them. > > There are some easy things that can be done to improve `file-truename' > performance somewhat. For example, the number of calls to > `file-name-nondirectory' can be trivially reduced in the `file-truename' > code - it is called up to three times in a row. > > (see my earlier message in https://yhetil.org/emacs-bugs/87jzlmd831.fsf@localhost/) > > Will it be of interest? Yes, of course. Those kinds of changes are no-brainers, really.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:23:06 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:23:06 2024 Received: from localhost ([127.0.0.1]:57833 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxkSX-0004OY-PW for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:23:06 -0400 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]:56807) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxkSU-0004N1-KM for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:23:03 -0400 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2dcbcfe117dso8714081fa.1 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 02:22:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713518562; x=1714123362; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Fp3DhlpGn9x+G30FJEziRCDq3AYM2pvONZSCVA88pWE=; b=KLqWQILSYe0S6vwbwDKlMx7Y3+L2wQgx407Zd6cWbcQg588he3E4ApmIQMGbNe9dUD vubDqW4G0YZ/BX5BjL32k2hMDcvON7/MqVPFvbPzEENU4kBe1yH69Do7SJvSXjQPLfCX aWoZ32cOAGI09LL813+PlonT4g6NDdbcd2568vCHCTFHpQjGAoyyBG1Tnv3+bGoteAcF nISVBwt3TmbWwe7tPYqZzkgMK6WJ1dEZETsnrvYqYr/8CV8rxUKtcl6WeBuSn37UOjaH 94rKufSHzKW/XrRDjEQt3Byq+tX+TEi7HRoTk7eDKL41PsobScny8L7PTelNPjn7bdMX +svQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713518562; x=1714123362; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Fp3DhlpGn9x+G30FJEziRCDq3AYM2pvONZSCVA88pWE=; b=SlB0aXnz8pWKg0WbYuXxPHEnabAmytnlDoH/ct1UGZZVwKljXy9uPkIB6BUhRLWLyJ Oux23ScgAbnOP1YdkRj1PAWnbALeVEzDjZZvWjJV8oMjM91GhboSDh3A541YKRbTnLsE XVDJDjqW0ZceYD+yRaGi1WRZC7CHpPKJmgRnYAaSa9V1JrKx9S4q891oGMXpU/Te87fC SfjJNti3K60zo7cT/w3b1QofO8BigQnbFHFM5HbUjmyPIQZmDrbkV6ATKr7Bh8hE/A5J soJ8bqyHvUcSO/9ZKv2eWk84UhnmcN66fAkRNkKeH+jn4NOjn2ekqByDS70zGEdBqld+ GA2Q== X-Forwarded-Encrypted: i=1; AJvYcCUfRNW/98g90OwbZIKh/zIjxMClethPB7iJ9rLxSNBriaHDXf5sSBnSe9CRQU9xA/MoPth1cUsye1zy2kaPfsC3r29YExc= X-Gm-Message-State: AOJu0YyxXbZ+Sr3fIavvZE2N0fVOMvudS7HsLEAbcMm8LzJJWsEPBSL7 HcMQGK0udsyju5J4KB6LV4Ldq7cNQSBH691sB6jXiWrUIFrA+AFXbajXUTmy4ytVOma1MhkfzTm Dp8wvLvPfMmA6KW0YzcOiI53QGZY= X-Google-Smtp-Source: AGHT+IHmVvlfuRJFE70QTsQ1bImwYqpVwfFdb/Tg2bZdA/iaCTeuU1Muh7QefSJH8hJZeWLSENNtxsLywe8iQnMWhv8= X-Received: by 2002:a2e:a313:0:b0:2dc:e69a:fdbc with SMTP id l19-20020a2ea313000000b002dce69afdbcmr493599lje.1.1713518562279; Fri, 19 Apr 2024 02:22:42 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> <87wmot289d.fsf@HIDDEN> <CALDnm51qPPFGHDsCqwAQGk6Q20R4ZsRWkHdxTfVDLWWi7BHkHA@HIDDEN> <87zftpn2fb.fsf@HIDDEN> In-Reply-To: <87zftpn2fb.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 10:22:30 +0100 Message-ID: <CALDnm52TWxUP5jb=vC_pdsKaLgxjc1-iPmnDYyryrkvc9=5QYQ@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 10:10=E2=80=AFAM Theodor Thornhill <theo@thornhill.= no> wrote: > > Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > > > On Fri, Apr 19, 2024 at 7:09=E2=80=AFAM Theodor Thornhill <theo@thornhi= ll.no> wrote: > > But that could be down to other reasons Theodor. We would need data > > for that server too. Last time I tried jdtls (on a docker-based TRAMP > > setup, described somewhere in the mailing list), it was snappy. > > > > If you make a simple recipe like this one I can absolutely > > try though. The difficulty in that one was TRAMP. > > > > I can try, but these repros are hard, because it is hard to find an open > source java project where I easily can construct similar scenarios. And > also time. Yes, it's hard, indeed. But it's very valuable. IOW, we shouldn't make design decisions without gathering hard data and reproducible experiments, like we did here. There are lots and lots of litte factors so at least two people reproducing the same results in a plausible agreed-upon scenario (again, like we did here), is important. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:18:09 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:18:09 2024 Received: from localhost ([127.0.0.1]:57819 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxkNk-00042u-Mv for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:18:08 -0400 Received: from mout.gmx.net ([212.227.17.22]:51527) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <michael.albinus@HIDDEN>) id 1rxkNi-00042Q-CM for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:18:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1713518263; x=1714123063; i=michael.albinus@HIDDEN; bh=J5oSo+C7g00JNXY/FbQYPNj9ogMbq9grTP5arZLhpXI=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date: Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=NiTUflEDSdMM+D9upXO11d6554qlhkY0R9d4pXaeypIr94PG6TuJozmhHcUdQDBF W+QYeIfeP81kHhNdnqSZs9Fu8PuW/3SSsff5Eml9LMs2I2ncQ06W1q4Fds0z66+0E z3hCkhZDEPaK3vmtbT0DMpg+wXVSjOuAiXFBlF1kTSDRejs1u9lJunvZoOTYWHRWd xeTDr20snkogmIQL0GZhEl1XBmPAmhp3jg1B2IFH10VDcpF4hr70cxf8cehIL+IDF LQKZOBHTEORKFXEYGUmZ9qsLWOhE42+ppf0U9qh7NH9krphMH0E8PaKmZ3/LJUcLl i4tKG8a8p+tAmC71YA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from gandalf.gmx.de ([185.89.39.16]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MQ5vc-1sJnUt28si-00M6yk; Fri, 19 Apr 2024 11:17:43 +0200 From: Michael Albinus <michael.albinus@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036: a fix that In-Reply-To: <CALDnm50kR_6TxusPNPNO3+zvNVZK0HPFMVxoGcECB1T0OyR7fw@HIDDEN> (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Thu, 18 Apr 2024 22:37:05 +0100") References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> <86jzkud0be.fsf@HIDDEN> <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <874jbycrd7.fsf@dick> <CALDnm51HWzo2+8ujwRqg_D78Qf42_5S24EjGDenjG+Duu7n6pg@HIDDEN> <CALDnm50kR_6TxusPNPNO3+zvNVZK0HPFMVxoGcECB1T0OyR7fw@HIDDEN> Date: Fri, 19 Apr 2024 11:17:42 +0200 Message-ID: <871q7190eh.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 X-Provags-ID: V03:K1:peB4gFrg0mshvV2FlWOLjUm9RGVkA73lsSN4Hlu2qb/n2Yyyrku AG0gQRcYKtIHThN6CzZ89RDFkgioIUk7m6PJelwZZMJ9xFJhtbw8QbOkyqEXsbbb8Ma9K7r 3/WBC7kjr2Hb9XKp85C+OJRiobj1cRW/OWs688CSk1GgJV9S7xQPVdTYGjKJgdmHLiqxiqM ewfVAgTBSnTWcP/RUnN/Q== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:vGhKUiPDl/Q=;vJeB+ECL+Y/ofvl3RjRb5f7Au62 ivtlB+5IReYVSPOf8vT8Jo6BpUsNWFYBbyvjOP00n5HPTVvZiHEh03TOUzDE527xO8BRxoH69 Q++5UjdQN/XbZG+QJzRolGm1ZMexOnmdcv87dZP8rR+b7GXz9nIsZmwYSE/XSwq9T7yoC1vxC gUDo7g2xeffZPlTD7SPoPyHbZoRS4jtNmSCRTOlhlX0QJQr14kx4vtw6iLIA10Rln+P9asYXx /s5hpNz43mhfTrZSeDNRZbESJ3Seo6/2luCJUC4xSrNZ2010FI4AiX0nlhWl9P0EMew6+kpvP z9OALQ+Ei785IjL95yufrHVUx/7SKe7JLJ5OAFp2k1mtSHrj6tIm/OtS33wPCxhBwaYlO3Hrp 7PgKsXPsna2O+UE9NUx0yX/S4lQEM8fUqZjXogGIxkBBADUD8IpTxpBkzt0tsTDoSh/ByBCGB oEAoRtzwTlumWfHsz1FkH+UYR6CD3MQmY6xsCOgW523TEhjpX6YbcuSlKE+RVpIyayZ2sWrat LaUKMNJLDv+Lmfmcvcov2e7kHaaq4pL0qcq4p+AZ6sD83cIUNq00SMp68krCJJktcBBfVQJu+ yYqUVwS4fNn8XzhLy7WF8Ez07LN3UFslf+pUsyMkmjWRc8+aOAxtQUiWp1PrqBI2CwFOzQRPT D6Pk5gkKupM30Uf0IJtr8HKNjAJtv8WukRLgvNHM2tbd8TO0DDECgY4hQNBa73Zo5GDiQp1vl l0iE1bluyfApTjnZa7g26I5hfZ9AFTFmjZSuXTm8RWgGGfLH3EoiO0UteK4JT5oMxNbSUXw2m DwKaWtTZhawo2Jh48NoVjxVItyFsJcbpwNXaw8ms/Rd2M= X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, theo@HIDDEN, dick <dick.r.chiang@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: >> > Speaking of dicks, you are one, and your code is always dogshit, so yo= ur >> > much heralded leavetaking of the emacs project can't come soon enough. >> >> My dear dick, you on the other hand, are such a lovely wonderful human b= eing >> who writes such great code and is so courageous.. Thank you for >> gracing me with >> your attention. Means a lot to me. Love xoxo > > And I say this even without having the faintest idea of who you are, > imagine if I did :-) Oh, that's the person who is blacklisted on debbugs.gnu.org because of sending offending messages. > Jo=C3=A3o Best regards, Michael.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:14:32 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:14:32 2024 Received: from localhost ([127.0.0.1]:57810 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxkKF-0003m8-Aw for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:14:32 -0400 Received: from out-175.mta1.migadu.com ([95.215.58.175]:62994) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxkKC-0003lD-QW for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:14:29 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713518048; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TuGnHVgeS/PTo1RYEp5yZYZvYl+WdtOdj6lp2MPyn/s=; b=kmWP5jOZDrE9zkTbrsHV1AcJwDMr4PrffrmNjIZYCOZvan1gamTMKn9pBNLVlvYbrNDBhI ahsa8lyyKB5Tz2PMfVh1/GOKRtZXAFbiDoomNqJvL4c9TNmXgGJtwLJ75QabMN9TRQvbb1 L+VMsVeUqNr5FVy3EokcDUT83QxnwllUlY9MvYeekPcQfykWOhc2huzE4swgT8z9W9ablu by1Q75qoNQ0V5LSk/3hOOZzwI1afxUtrm54YHO8saEvSTHA7jvXt3GfkBqN1e43PkvjmCP qzNguqacGnlCZ+Six+iENoKSNS+sogWUMIdJlvxv5xQ99/VWrTWHi6w4p94TCQ== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm52=4L4Bg7VNGwEa6V72MNBgUxwJDoe45LBdiPkO2Dz3mw@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <87zftp28ri.fsf@HIDDEN> <CALDnm52=4L4Bg7VNGwEa6V72MNBgUxwJDoe45LBdiPkO2Dz3mw@HIDDEN> Date: Fri, 19 Apr 2024 11:14:05 +0200 Message-ID: <87wmotn28y.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > On Fri, Apr 19, 2024 at 6:59=E2=80=AFAM Theodor Thornhill <theo@thornhill= .no> wrote: > >> I agree - that's why I want to focus on improving the code, same as >> you. I just want you to understand that being mindful on how you come >> across can't really hurt. > > You're right of course. I do try to be mindful, but maybe I made a mista= ke. > IIUC it was the part where I said this was a "one-off and uncommon" report > that you felt was unkind and harsh. Because you wrote that. I absolutely > think we miscommunicated: I wasn't trying to say you have a bizarre proje= ct > setup, I was simply trying to make a statement about statistics and > the relative importance. > No worries. Water under the bridge. >> There are enough conflicts around these days, > > In Emacs or in the world? If the former I'd rather not know about > them. > In the world. >> let's not make code be one. > > Right. So reverting another person's code isn't that big of a deal. > You "reverted" bits of my code when doing your commits, and that's > fine. > >> Yeah, that's right. I assume that when json serde disappeared as a >> bottleneck others emerge. This is the obvious one to me right now. > > When my hotspot for a given reasonable profile is 4%, I'm feeling > fairly good about my code. But yes, of course, it can be addressed. > Yes, Eglot is pretty fast. Doesn't mean it can't improve, though :) >> Sure. That will make the change you make similar in spirit to mine, yet >> with a different implementation. I'm fine with that. > > With the difference that my change also still ultimately uses truename, > just very frugally. So it still understands symlinks, doesn't > mislead the server and doesn't expose the bug I demonstrated. Yep, I think we agree and have for some time. I wasn't really arguing from your first mail, either. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:10:46 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:10:46 2024 Received: from localhost ([127.0.0.1]:57805 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxkGZ-0003OH-I4 for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:10:45 -0400 Received: from out-179.mta1.migadu.com ([2001:41d0:203:375::b3]:27146) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxkGX-0003NI-PY for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:10:42 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713517820; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DSdEk5U3dmn7ZoTOP61u6S3q318NCDXJAGuBIOAXZrc=; b=0k2KJgc8u+bdG1l7TRsIZMQZ/zJhMgo/sdw8wsKkWXdiC6HR+rUd4zW7AjKFGBa7vvFXGr kyigMT37lFwq86nRd/NrGjd4srgG4JcbKYY3QPR9mcr5pK0WHGwTJ+XjtvqVNt19WFvaEw gjsEYqp+vAJwhzT03iftIAWBHTjhhkeBQ5ReI/m8OQNPe7hlSsbUkczgWzHbVCEo33Qf4E JFVh+EZGvz/2uQax9R6FwdJO5ZlZU43xMf0/x98/jJvhZ+UNTkqKEIixISdTkfb6c9Cjfb ZOznvnHkIKFPtPeRwu8o55EyBcG7+MTm3uCxsfwb+3r1seLXKU9Clikxg/Dqmg== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm51qPPFGHDsCqwAQGk6Q20R4ZsRWkHdxTfVDLWWi7BHkHA@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> <87wmot289d.fsf@HIDDEN> <CALDnm51qPPFGHDsCqwAQGk6Q20R4ZsRWkHdxTfVDLWWi7BHkHA@HIDDEN> Date: Fri, 19 Apr 2024 11:10:16 +0200 Message-ID: <87zftpn2fb.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > On Fri, Apr 19, 2024 at 7:09=E2=80=AFAM Theodor Thornhill <theo@thornhill= .no> wrote: > >> you've also noted earlier. I have an even stronger computer, a 2023 P1 >> gen 5, I believe, running ubuntu. Some servers send _all_ diagnostics on >> every keystroke. > > That could be, but what servers are these? > > Thought it would never be "on every keystroke" though. As you probably > know, Eglot bunches them up in didChange notifications, and you can > can even be the size of these bunches. > Absolutely, it could be. But with these latest changes the felt lag is gone. >> > So my perception is that it must have spent around 4% of 1 second in >> > file-truename. >> > >> > Anyway the reason this shows in this profile is because this project >> > with this particular server sends a lot of publishDiagnostics upfront. >> > That's OK. Gopls is a very good server. I think I see a fix. But can >> > you qualitatively describe the Eglot experience. Do you notice any >> > input lag or something like that? With this project? I didn't feel _a= ny_ >> > lag. >> > Super snappy. Maybe the JSON serde kicking in? >> > >> >> In this particular project I don't notice any input lag. But on every >> java project at work I absolutely do. > > But that could be down to other reasons Theodor. We would need data > for that server too. Last time I tried jdtls (on a docker-based TRAMP > setup, described somewhere in the mailing list), it was snappy. > > If you make a simple recipe like this one I can absolutely > try though. The difficulty in that one was TRAMP. > I can try, but these repros are hard, because it is hard to find an open source java project where I easily can construct similar scenarios. And also time. > >> > Anyway, the idea I suggested earlier is in the patch after my sig. >> > >> > Let's think: LSP's publishDiagnostics coming from the server deals >> > in URIs, right? And we inform the LSP server about URIs, too, right? >> > So the URI is always LSP's idea of the resource identifier (and it lik= es >> > to have truename URI). >> >> Sure, like in my key/value store. (apart from symlinking) > > The other difference is it uses buffer-local variables as the > natural "per-buffer" storage method. > Yes, sure. Not arguing there. Just noticing that what we're doing here isn't too different. >> Could we rather use eglot--managed-buffers, like in my patch? there >> shouldn't be a need to loop through say 200 buffers that are unrelated >> to the project in question, right? Apart from this I agree, and will try >> it. > > Of course, that's a good improvement. > > Jo=C3=A3o :thumbsup: Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:06:13 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:06:13 2024 Received: from localhost ([127.0.0.1]:57794 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxkCB-0002s5-Ui for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:06:13 -0400 Received: from out-171.mta0.migadu.com ([91.218.175.171]:57459) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxkCA-0002qT-4o for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:06:10 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713517549; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NvzKE+2vAlJ0lqHG7hIQprFKlTU4+z/ys7Rbm1fD3b0=; b=mvdc5s3KcpI2PZIjwFsdH2ntNEIT2nWGT5jo/DlUqO6nyIo4HJOyNSDovNhVFJ4yprDX0B gIDcbuc84MMixcsq40U2zNwbwXUxl9FuMcFmSwLOoYHPfedwVkSdefl0AlpqVDt7sI5xkX 3/RvFpi0LC3eg6t7v7o23nIE5tTj2EqvIKTGvuJQhb/RXN2/tJ0ppCrYH84MH3FXVpij1h fUR/+pmYf1W1gL8aUno3IaKdXnE2bWNBmaeHKjoiQL+GQtCKQxbNrAAh0QM/ENNKcolcBJ zIjgkp3dgH8YJKJTEJc15LylGVrqY1hq+1gbgjOyd0DJMKQRkjeSOV0acGsptg== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm52Z+ijxSB8dBNXXsmpRCqHGPJMY2UROsOWA=_=OtoqJng@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> <87wmot289d.fsf@HIDDEN> <87sezh27gy.fsf@HIDDEN> <CALDnm52Z+ijxSB8dBNXXsmpRCqHGPJMY2UROsOWA=_=OtoqJng@HIDDEN> Date: Fri, 19 Apr 2024 11:05:45 +0200 Message-ID: <8734rhoh7a.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > On Fri, Apr 19, 2024 at 7:26=E2=80=AFAM Theodor Thornhill <theo@thornhill= .no> wrote: > >> Like this? >> >> I can confirm with yours and this patch the latency is down again, so >> thanks. > > I'm very happy it works! > >> I'll test a little the difference with/without eglot--managed-buffers. > > Yes, do that change, and if you want (_if_ you want) you can clean up > the patch, add some in-code comments explaining the matter, replace > cl-loop with your preferred thing, rename the slightly cryptic > eglot--cached-tdi, maybe set it more explicitly on in eglot--signal-didOp= en. > And maybe write a test for the symlink situation, perhaps using my > small experiment, so that it becomes less likely to be broken again > in the future. > > Jo=C3=A3o Sure, will do!
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 08:50:16 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 04:50:16 2024 Received: from localhost ([127.0.0.1]:57778 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxjwk-0001Rj-GA for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:50:15 -0400 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]:46312) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxjwg-0001Q9-7T for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:50:12 -0400 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2d858501412so24012221fa.0 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 01:49:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713516590; x=1714121390; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=aMWxcOnjgt19QX87oXHxPEaCZN+THrwa/93xN2gH2PY=; b=GVuzM9xubUjZagLlymFvxsff3JvTWSeZnsHFi21eUFp8cYIRf7LTYJaV1A3Zowk3/p 6tPLpFKFuocRiupmIUwYtSPnf6P6d9BA2/KKuxpeE0VGs9DU5svIIcDRyQiHuj8wjI3i pz8lfHhoha5R+wYDeUp/C4bWmW47HZevjP9SKRWmtdQGf7U9wwDIETYa7jfJe774yn5D BVf/zTDF1HNqe2EdIT+JJjTYy2pKrQ2CUH9WkaJlEhmnZYhd7X2EipJnf79KFnO8bJF2 8HaODa3URhTWWxvOE9qfxR1DvtyvEDMrUqUAkqNq232rx+Y5PSn5mXaDoEDDYswdr/aq /PuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713516590; x=1714121390; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=aMWxcOnjgt19QX87oXHxPEaCZN+THrwa/93xN2gH2PY=; b=ZPt2PjaNMHu56grgQ04drNh+zT4A5Mie8P3VZvezhI1hYUP22z+HpwPKl8WJtSaODq vv68KPWbSejtjNZIAalhJQfZnFDPyp0knlRxEtYEtREWv7SZbWXjCoyIebekf/DxTpBm 3zjk483dqmVDW8YnmmcQS9jNj2Vc/FMXp9AjFp1ifwwtMZfxckxpV8OfH4detc2had7K 2nKUlwr8uwwYYwfl21DtzYDE2H+tq0QHLgl9rEsYjuFnQgoRViqYgNR3B3YZPxFA69g5 ztLH14fSW3naEo8dA3oMgw3L7LhnQhl+tjClwT2CfgR8EgnV9/w9NChaXUmkARmm2uWx LIUQ== X-Forwarded-Encrypted: i=1; AJvYcCU5NCEWzQKwwsosoRPLVrVboA39yy02lTO9aNKxHGhADKvoKxAKgSB3eBJOsUByo27mwn3fRoDkORM8/K73muPQ9ciOC/s= X-Gm-Message-State: AOJu0Yx9YixqvFzs1QU/FN8bm+pcjcRHYHBXrqhXS9cqTYcJxsRWvofh sKJ19iLtwhuiLyGsiqqZyhWZbj0gTOEX0S9gbrBMjkKebr1HxqCcLuIqvXHZzkuwknK8zkPtl9+ jQ+B19abPbxSicHwpqkoMfFxPPo8= X-Google-Smtp-Source: AGHT+IEkfG5tlMTChi3CTi7UZVBlJMR1jGcxEXi0bFtDJDWGyBPJJkZqHBKL9BQUyXpRaJKKkMthnbSdu6C3odf838s= X-Received: by 2002:a2e:8015:0:b0:2d8:9d8c:9533 with SMTP id j21-20020a2e8015000000b002d89d8c9533mr776329ljg.53.1713516590155; Fri, 19 Apr 2024 01:49:50 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> In-Reply-To: <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 09:49:38 +0100 Message-ID: <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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 Fri, Apr 19, 2024 at 9:27=E2=80=AFAM Jo=C3=A3o T=C3=A1vora <joaotavora@g= mail.com> wrote: > > It's only now, that we decided symlinks _should_ be resolved by Emacs, > > I _think_, but can't be 100% sure, that I explicitly decided that 6 years > ago, I just didn't document it explicitly beyond typing in "file-truenam= e". > Git archeology brings me to a commit in 2018 where I was reorganizing > code, and file-truename was already there. I definitely knew about > expand-file-name in 2018 though. The fact that I chose find-buffer-visiting over get-file-buffer around the same time is another hint...
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 08:28:10 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 04:28:09 2024 Received: from localhost ([127.0.0.1]:57697 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxjbM-0007Ya-CY for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:28:09 -0400 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]:53468) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxjbI-0007X5-4C for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:28:06 -0400 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2db2f6cb312so32455361fa.2 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 01:27:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713515264; x=1714120064; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=YINAPaYsBLlfJAgAO40o/47EmTZ6oVxA8eB/eelJt+s=; b=A+mLPz0G7ju890ExwRh6EEaAMtzcfZYzFo6Z6hHVBAgQ7xUrFuRRECotykF8hGF26p 9znbPxxwnD+wDx1wS7iDzvxSxPR0KDsp1LuimnPSJNwcwnEJVllk+2BYQGEW6CmU1/aQ AwLVs4oRMdrtkbbGjfNn3Ya7KqUtgc2HF8hYiCmb392KZec5joAoIwi8DEDyv9esTi5a PxyRWeOFDkmjIghYtTDu7lDYmmcsTYftuE7zartpBSQS9aTwKarG7jL9p4Czsl71kJTD Q3vWydIaR5bbFj0XTx0Q/IQT5ScVNAiDc45eyxIE22wvv+Y7YqQnzsBjUPD8T7Wzonc9 948g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713515264; x=1714120064; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YINAPaYsBLlfJAgAO40o/47EmTZ6oVxA8eB/eelJt+s=; b=GpnNCJzqkOTN2BfvKDohJGVdGG4GcherYAeIXWOSxSTneTbMeWb0i20jqI52hnUio8 edvrXyZAeVzzDz28rN7tVdxnWdQzDy795KsmOWoHe0OTlB3SrgoiMa6Kte3TNDKuQeMA E3AwLi2BBTf8/zVPeRwOgYhth1VsTahGI08DnVon7bh2FcbmHFSuf41egHiIYqsWRVsy nYgPJK9GKekeZVIxPKGyWRDelA9eROhM3zBozvw3tBMEPgvIi6wBB1/WTCR0p5OKIb4T XQUEYdwNJ4Xeo67V+y2GyhPUdxVnRpokyG3Dz19iqt9eiOlcLgAAcMldQsgGOLC6oJ6R 0rsg== X-Forwarded-Encrypted: i=1; AJvYcCX3m54idRqgTiyet79qnVgwLdyx+s2em2V8La7omJ1hJofSW1/lP/I2Q6DGGfYVexg8g7H3WOjsmyVTnhPPwq2kmOYQZP0= X-Gm-Message-State: AOJu0YwjyY+M5GfoAqBLgBDOplkz7lOuoLYaPI72xz18LptZVd8vM5hh 3sTKUHsb+Ule3Nz3RAugO7PfDw1xWhQHA4vKvqMKtX+74+qY0UCtQn7SAQTTB+IRJFrleH4HHk6 buezA+mWK847SpKn3khpUvplppg0= X-Google-Smtp-Source: AGHT+IFZaoxMKLHTGbnrSnJKktqXGMfilghP77jHARgv5lZuY1fnLvjV+iAOhCbUM9fIRuMD9Ui3Xoziy4C3+zHcLz4= X-Received: by 2002:a2e:aa13:0:b0:2d8:bda5:c5f5 with SMTP id bf19-20020a2eaa13000000b002d8bda5c5f5mr1051450ljb.35.1713515263773; Fri, 19 Apr 2024 01:27:43 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> In-Reply-To: <864jbxden1.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 09:27:31 +0100 Message-ID: <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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 Fri, Apr 19, 2024 at 7:56=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote: > > Maybe _I_ missed something. But I see you have now sent a perfect > > reproduction, so it doesn't matter. > > There was no need to have any profiles to demonstrate that > file-truename is significantly slower than expand-file-name. Of course. And there wasn't any need for profiles OR benchmark to understand that file-truename and expand-file-name do different things, so comparing one to the other when that difference in behavior is crucial for the caller is very similar to comparing apple and oranges. > It's only now, that we decided symlinks _should_ be resolved by Emacs, I _think_, but can't be 100% sure, that I explicitly decided that 6 years ago, I just didn't document it explicitly beyond typing in "file-truename"= . Git archeology brings me to a commit in 2018 where I was reorganizing code, and file-truename was already there. I definitely knew about expand-file-name in 2018 though. > > I still think the cleanest solution is to write file-truename > > in C. > > I explained in that past discussion why this is not simple. So if > simpler solutions exist, we should prefer them. Fair enough. Shifting complexity around is what we do. But having a performant file-truename is a strategically investment, it's a very common filesystem primitive that users expect to be as fast as it can be made. Common Lisp has TRUENAME, Python has 'realpath()', etc. We could compare (here benchmarks are definitely the best method) > > But if that can't be done, it doesn't seem terribly hard > > to get rid of find-buffer-visiting in publishDiagnostics and > > still remain symlink-correct. > > find-buffer-visiting was made much faster lately, but that speedup > AFAIR shows up only if the session has a lot of buffers, so trying > these benchmarks in "emacs -Q" will not typically show the effect, and > could even obscure the file-truename effect as well, because the > number of calls to file-truename will be much smaller. I'm not sure what test you are suggesting. If f-b-v performs _better_ in "lots of buffers" situation, then we should measure Eglot's performance in the plausible _worse_ case of few buffers, no? And that's what Theo proposed. And in the possible but not exactly super-common case where you have an extreme 15-long directory chain, find-buffer-visiting was observed to weigh in at 4%, all because of its file-truename call. > But if calling > find-buffer-visiting from Eglot can be avoided, that is of course even > better. Yes, that's what my latest patch does. But ideally it would be cleaner (IMHO) to have a fast usable find-buffer-visiting by speeding up its underlying file-truename. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 08:07:15 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 04:07:15 2024 Received: from localhost ([127.0.0.1]:57567 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxjH8-0005Ev-Pn for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:07:15 -0400 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]:48420) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxjH7-0005En-FM for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:07:14 -0400 Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2d8a24f8a3cso20948311fa.1 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 01:06:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713514013; x=1714118813; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=t/DrjgaORh/1ECvDIu5UiMrFpG2EXSxY/sBg0a7hzdo=; b=PA6sGmx/8q88/Mu3kQoX2oNIjXyDxVdI7SykM9XWB6zUjgHD473ZVFobmfNN0oo5l3 goL/qQOQvy1RyW8mvlmykn6g78HpMyRRXDZ+3PapoGMvmy4PACWjBO5v6J3z4agXzLEF QOg42iSvAxXYbkBt3xU0aX9WMgCeyfTxcgaulUJnHqpnsAiPr2zXIpffiN9IirK49XbQ MEhor8wJhR4xIZzIQbgzwSYP2X9anm/TijwEUAMIJsUGWjUICVfLD0gsBSEMqo1UQcXD sXFMRVTJbJft2gK/Hf6qT+TW5V69WIyGfnvl2oMb4SonNCCF0t9UKn/comJz6gMkEwkE gatw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713514013; x=1714118813; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t/DrjgaORh/1ECvDIu5UiMrFpG2EXSxY/sBg0a7hzdo=; b=ZbejF0GmL7GCQ9+Y5geHTRAtan8Lq24n9ddQoIvrgMtUNIw7YG+kE6bSZIzbbrIFBh cs7bUODOXQvexLGG6fYgtiidgcg9aOOZ0ZHtICCnSISGBXL+9us1ZIM1N73pqpkDzgD1 Z0DWv9psiI1RWb+mtnSPa0bJjjC+W6n6KhFcVMsVieL13+V/7jmnyweVblxIJzacMRpk gfFvhx6YZM9w37Fd5FNnZzqTYctnYgnQfJJQ5qLlAttfQ3mZOXKcw/RRl4oaiBbFILs8 9Ems3MW0+3dUUiMCriZ/4Emx0o2/osovOlJwmwj2zV+hY1y0UsLKA7y9hZQwKJxWgPVi n6Xw== X-Forwarded-Encrypted: i=1; AJvYcCUS4qA2JKbioQGr56+7sXd13gjq1pCJVYI7Nef+ceQA4n9GfgqsqCFneLmXj5k1o5H5qL4TnWBGfPuLoPXohQLAF0Vwt1Q= X-Gm-Message-State: AOJu0YyCPn7h4Cm7FuYBrROp4dwAXUGRsiNSQjsmQe8Fm0FuNyJyuu/C jdD/5juFYThExP4Mw8z674OMQZG+ROodHDe4xMbvruHYK+1rc7mc9KNaggOEYNpN5DQmf4aOqqG Wdjk9of2p8tOnWOhO/kOHMJz1N9Gjxw== X-Google-Smtp-Source: AGHT+IE/HS/cq87Grp1R0DQTtEOWVBbF9g84T/oK/vAg8zeoKqORh94b6Obyn/JoajP3nPxWQaiJGmwP08w4k89xlMI= X-Received: by 2002:a2e:a684:0:b0:2d8:5cc7:fa97 with SMTP id q4-20020a2ea684000000b002d85cc7fa97mr678932lje.26.1713514013351; Fri, 19 Apr 2024 01:06:53 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> <87wmot289d.fsf@HIDDEN> <87sezh27gy.fsf@HIDDEN> In-Reply-To: <87sezh27gy.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 09:06:41 +0100 Message-ID: <CALDnm52Z+ijxSB8dBNXXsmpRCqHGPJMY2UROsOWA=_=OtoqJng@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 7:26=E2=80=AFAM Theodor Thornhill <theo@HIDDEN= o> wrote: > Like this? > > I can confirm with yours and this patch the latency is down again, so > thanks. I'm very happy it works! > I'll test a little the difference with/without eglot--managed-buffers. Yes, do that change, and if you want (_if_ you want) you can clean up the patch, add some in-code comments explaining the matter, replace cl-loop with your preferred thing, rename the slightly cryptic eglot--cached-tdi, maybe set it more explicitly on in eglot--signal-didOpen= . And maybe write a test for the symlink situation, perhaps using my small experiment, so that it becomes less likely to be broken again in the future. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 08:02:02 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 04:02:02 2024 Received: from localhost ([127.0.0.1]:57534 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxjC6-0004jj-6F for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:02:02 -0400 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]:59438) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxjC3-0004hy-24 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:02:00 -0400 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-51acb95b892so146477e87.2 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 01:01:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713513699; x=1714118499; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=bKEYVZrIzc6RGHnW5bqODhNkm3v/gDkKcqRl3NGQgKo=; b=QkXBeH2vTC89F/E7sguUY1JqgcpBNBOUHvH/Ddq9A5lv6N1+f3L5zLvVievrU3pxbm OXGVtCdZYljgfk0HGIfWScpQk4AW/2O8S6fPWv7OpjRgJhhmJpCBgFVOaIkNs8qQZv0f u2ydrxSxOe8DfhmLgr9ny7qhHBOpYz9Up46SW5ZxOqkpE2rOJenGTZAyCrJnUTc/w91D S85WtvRJB/IpVNNhhFiLhJTRhMi1KwZtqP/uWwh/tpw7XHWAc5ZaquMjd+vxRxNegnqt 3Y0d3nCFWRyd985Fk1Ro6d5izjaoEmh9bZEu/IEQ0J2JZ9gzugvqWam+Y93oojDxfSXT 061Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713513699; x=1714118499; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bKEYVZrIzc6RGHnW5bqODhNkm3v/gDkKcqRl3NGQgKo=; b=vwIMjdVV4gRKRfPauoFhMW1rA1amuhAqdFbGv6fdtSvtBpEeDQnh4FsIcb/mLDOvp7 nustE5Z9+2HKmH28Ycl+HxTAIFrHYNvaqMRWWReuo2t2rHJfL4yP9rkaOKrg24lXi1ir 0gG8VWnXVNuhnVwRrpZoiLSFwcnur/QCFm8ZyoFA4ZbM6JYmwm+8WiEEi9SNbgrFdifK DoHypARMtHvqVqOE9qFV1lic/wRoHaAMEA/ulr4TI50bpVF9nsg9pdl8iOJvS36k6hpG hG8ubVVGF3pIlTH9+F8TRca2gI27ysW5GOvfwUj1douY/vfmblGUEKdBlinXprrw0dHg 1Uyw== X-Forwarded-Encrypted: i=1; AJvYcCUC3uuBrj/1Skr6Uk9Vp9RjIH/U1LnzC/PC6jW9zNd57f4jNtaNzFBNfysWTyJ17n9mcMmjt+W9lLA6Tc7GqEXcceiilkk= X-Gm-Message-State: AOJu0Yy55GExpPZNAaXNu/XOBpaTwJW62eOFkMSw+PHCq/MgLpGEq9v2 CRbXvxQhzSArKrKCR6cuFKF43Z6dlD29h5DWiJXrlY6ukmb79CRt6+pFzLYJi69N4LDapNKjMgH UbYXreX3Zi1qK1x5PYvWDCS8WTsY= X-Google-Smtp-Source: AGHT+IHxCgBn1Nf81bxqueslwDbniiI0rHGKlLzaphWUqOvkiUNVJDr+z42Hw07phT+s1TWCTDI/ILCENUpIIzgpz+s= X-Received: by 2002:ac2:4428:0:b0:519:5c34:9652 with SMTP id w8-20020ac24428000000b005195c349652mr1004732lfl.31.1713513698412; Fri, 19 Apr 2024 01:01:38 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> <87wmot289d.fsf@HIDDEN> In-Reply-To: <87wmot289d.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 09:01:25 +0100 Message-ID: <CALDnm51qPPFGHDsCqwAQGk6Q20R4ZsRWkHdxTfVDLWWi7BHkHA@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 7:09=E2=80=AFAM Theodor Thornhill <theo@HIDDEN= o> wrote: > you've also noted earlier. I have an even stronger computer, a 2023 P1 > gen 5, I believe, running ubuntu. Some servers send _all_ diagnostics on > every keystroke. That could be, but what servers are these? Thought it would never be "on every keystroke" though. As you probably know, Eglot bunches them up in didChange notifications, and you can can even be the size of these bunches. > > So my perception is that it must have spent around 4% of 1 second in > > file-truename. > > > > Anyway the reason this shows in this profile is because this project > > with this particular server sends a lot of publishDiagnostics upfront. > > That's OK. Gopls is a very good server. I think I see a fix. But can > > you qualitatively describe the Eglot experience. Do you notice any > > input lag or something like that? With this project? I didn't feel _an= y_ > > lag. > > Super snappy. Maybe the JSON serde kicking in? > > > > In this particular project I don't notice any input lag. But on every > java project at work I absolutely do. But that could be down to other reasons Theodor. We would need data for that server too. Last time I tried jdtls (on a docker-based TRAMP setup, described somewhere in the mailing list), it was snappy. If you make a simple recipe like this one I can absolutely try though. The difficulty in that one was TRAMP. > > Anyway, the idea I suggested earlier is in the patch after my sig. > > > > Let's think: LSP's publishDiagnostics coming from the server deals > > in URIs, right? And we inform the LSP server about URIs, too, right? > > So the URI is always LSP's idea of the resource identifier (and it like= s > > to have truename URI). > > Sure, like in my key/value store. (apart from symlinking) The other difference is it uses buffer-local variables as the natural "per-buffer" storage method. > Could we rather use eglot--managed-buffers, like in my patch? there > shouldn't be a need to loop through say 200 buffers that are unrelated > to the project in question, right? Apart from this I agree, and will try > it. Of course, that's a good improvement. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 07:53:18 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 03:53:18 2024 Received: from localhost ([127.0.0.1]:57494 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxj3d-0003h7-RG for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:53:18 -0400 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]:51701) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxj3b-0003gx-AH for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:53:15 -0400 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2dcc8d10d39so5560931fa.3 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 00:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713513175; x=1714117975; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=iC3ttA/9t+GG5lrffTrHBT7GmCppsKE7ZLKET8aGzQc=; b=Ney6xrQ0HCLTm4VMNIPP2A0vMjN2hzWyoD8wSZPryVE2Z+MJfx1WAGtXy3uC5zCpfM cLzMbSaGWCaaahAfFK94DN32rfJ6uz4W9lK7o3MUpMvc6cpV0a+mT7CYwVj8T5hyiYgd hQX949OtWP/OviRKMmpbrftLtmkTGrcTdgaOLWWvYQqrXN8M63p4GnWj6b94ApxzTY1X kUUERbrJg9TuIIMSbSyzDwT9VmVDvw3TrNj18UxYDk+Fl+Eirdva99GSLBTNkhl9zTHl p3DP/wPMTU6FsswkuypcVRuEE56SmnzNtYyJKb4cQZxEITVA8hjXOT8NNEj/ThGMUK3i wXAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713513175; x=1714117975; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iC3ttA/9t+GG5lrffTrHBT7GmCppsKE7ZLKET8aGzQc=; b=eiPh7xyQodCGkZ66Bc8pO79fivqgiAjoFiHTBkpMm+7nYUOHBdrNSJ9bctYlFDlKfO ckrXEgMjZQdhfw+f9WPP69XV5Ywb9d+BR5pE2RE+/7BdsLw+5w/bvhvlSshF2YIP+qIz nuxFTZTlQiB55jzP1Lj2ImImiVfomKedTfvAeRLc7cnwz4e0VoyJFqVZvRqlRd2h4PCp W+lu9rvyuqq1ip8M+au2JLZD5R5saSx4+X9+80PVMYlxcIS0oFjBH/4LSIU5hwz6OGDq B343v/l2kW86+mRTb2J3GZ8Buz6CRH4S+vtX4GZ9ziB6oEThNUAQGbxbmqKWQOiFOqJx j4Vg== X-Forwarded-Encrypted: i=1; AJvYcCX8Ea11/JXN8UKHT5msGE0J3YO1L1KhRNTrqevuOSlMkU5DguoT/2aCpAp2D92VkpVvRr5eFndF6MeonWcP5t7gBk75pCE= X-Gm-Message-State: AOJu0YwDD6Ljf44dBhvP1wvUp6JaOUlr6pShNf/NGiA0LsypQyA9/nlg +k42cjGVSPCHXjE0V2F1dF8iHKb9U13c2TewidQLELn7K1OncznJ0S9R93ui6LYxWVOTXwAqZuK wO/r8/dw423V5YPpNzrWq7sdXdm0= X-Google-Smtp-Source: AGHT+IGIANdZQ0jcp8wgM7gopF0jebnAGWBiQNKhCKtVmjY1B1zgYF3qGsvVdbCHtgsvgrBJmMeckZEhLM8ZtYf8BR4= X-Received: by 2002:a05:651c:4d4:b0:2d8:34ad:7f4e with SMTP id e20-20020a05651c04d400b002d834ad7f4emr922558lji.4.1713513175078; Fri, 19 Apr 2024 00:52:55 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <87zftp28ri.fsf@HIDDEN> In-Reply-To: <87zftp28ri.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 08:52:42 +0100 Message-ID: <CALDnm52=4L4Bg7VNGwEa6V72MNBgUxwJDoe45LBdiPkO2Dz3mw@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 Fri, Apr 19, 2024 at 6:59=E2=80=AFAM Theodor Thornhill <theo@HIDDEN= o> wrote: > I agree - that's why I want to focus on improving the code, same as > you. I just want you to understand that being mindful on how you come > across can't really hurt. You're right of course. I do try to be mindful, but maybe I made a mistake= . IIUC it was the part where I said this was a "one-off and uncommon" report that you felt was unkind and harsh. Because you wrote that. I absolutely think we miscommunicated: I wasn't trying to say you have a bizarre project setup, I was simply trying to make a statement about statistics and the relative importance. > There are enough conflicts around these days, In Emacs or in the world? If the former I'd rather not know about them. > let's not make code be one. Right. So reverting another person's code isn't that big of a deal. You "reverted" bits of my code when doing your commits, and that's fine. > Yeah, that's right. I assume that when json serde disappeared as a > bottleneck others emerge. This is the obvious one to me right now. When my hotspot for a given reasonable profile is 4%, I'm feeling fairly good about my code. But yes, of course, it can be addressed. > Sure. That will make the change you make similar in spirit to mine, yet > with a different implementation. I'm fine with that. With the difference that my change also still ultimately uses truename, just very frugally. So it still understands symlinks, doesn't mislead the server and doesn't expose the bug I demonstrated. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 07:51:17 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 03:51:17 2024 Received: from localhost ([127.0.0.1]:57466 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxj1g-0003ST-S8 for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:51:17 -0400 Received: from mout01.posteo.de ([185.67.36.65]:38625) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <yantar92@HIDDEN>) id 1rxj1f-0003SN-6D for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:51:15 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id F1700240028 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 09:50:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1713513055; bh=7FrdMBryey9fy7BuNKnrzAHCA9bAlMgGhBjONw1zpA0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type: From; b=Lvs4y43iJkCx8j0Ej1+smwaV0NrDnpBaLXd7Z2hWENA87+u6g+TucP8G+Y/poli4/ 0/WGPdzF95g0Mqm7M7q4CgVVMnxSYEalCDjx+l7Xjpcw1e9gYz2yD1xcIeOzC8W2+J DEVaFeB2dJlKSDB7xRDn9GPYUUc0AeGfeBgAz0Vy0Ga2fmsGRN6/m4QVUB7616EwYL 94vY7wL7sPCEhj6a1U7KVyzoHjdhWwvwjjk7/BAn26qEAAQmMhS6OGBTZNxYYpfq/b zmrXBMQlCt5yZgJfD3dDfEzvj9pSoUiTotXbV5m286rnpC+7/rflqaPI25awdChtgC JZR+oeQ/V0q9A== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4VLRf51vkzz9rxG; Fri, 19 Apr 2024 09:50:52 +0200 (CEST) From: Ihor Radchenko <yantar92@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036: a fix that In-Reply-To: <864jbxden1.fsf@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <864jbxden1.fsf@HIDDEN> Date: Fri, 19 Apr 2024 07:51:35 +0000 Message-ID: <877cgt7ptk.fsf@localhost> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: theo@HIDDEN, 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@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 (---) Eli Zaretskii <eliz@HIDDEN> writes: >> I still think the cleanest solution is to write file-truename >> in C. > > I explained in that past discussion why this is not simple. So if > simpler solutions exist, we should prefer them. There are some easy things that can be done to improve `file-truename' performance somewhat. For example, the number of calls to `file-name-nondirectory' can be trivially reduced in the `file-truename' code - it is called up to three times in a row. (see my earlier message in https://yhetil.org/emacs-bugs/87jzlmd831.fsf@localhost/) Will it be of interest? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 07:39:09 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 03:39:09 2024 Received: from localhost ([127.0.0.1]:57375 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxipv-00026z-AU for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:39:09 -0400 Received: from out-184.mta0.migadu.com ([2001:41d0:1004:224b::b8]:24725) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxipt-00025c-6k for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:39:05 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713512324; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Iaysf7rcU1dR1mfjDOdpRSo7/6IVbKJ2YXBqTS9FO/w=; b=kQTRbnuem78ViZJwf8OlIPLvI6V3hlJxtD8ZygPSisLkJU2ePAxkcq5wYkyQ/dmMnWdV8H LfrJC/n4Y/usSKkRO93CDMYiljJ4ViH4gXFqWcKDEvQMMopmcsJoYVJSIX7P6wv41qB/x7 dZvhPQSPaB4bZ5+Z0B5wkl0cceOz6yY4p/+x68upMCkW+IsbVGsng8rInZdzqGybMSdx2w hbsy9XCB/f92RrK+d9/PrztV9zzpjg+N5wV/aeuOyXy5RXuluSiI7bqI7fIv0dIxPm6hSs B1CNWsPwUoJJkU6I9cE6f2LFJ/XJ/AIzAoGX5PvbZ1+bmihAc9aa7G7paqwdOQ== From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <865xwddf5w.fsf@HIDDEN> References: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <865xwddf5w.fsf@HIDDEN> Date: Fri, 19 Apr 2024 09:38:41 +0200 Message-ID: <87plul245a.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@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 (-) Eli Zaretskii <eliz@HIDDEN> writes: >> Date: Thu, 18 Apr 2024 23:32:00 +0200 >> From: Theodor Thornhill <theo@HIDDEN> >> Cc: Eli Zaretskii <eliz@HIDDEN>, felician.nemeth@HIDDEN, >> 70036 <at> debbugs.gnu.org >>=20 >> I'll add two profiles, one is profile-fast and profile-slow. You can >> guess which is which :) >>=20 >> STEPS: >> I've made an intentionally broken commit into a golang repo I just >> forked, to get some publishDiagnostics quickly. >>=20 >> (for good measure evaluate eglot.el before running profiles) >>=20 >> 1. Install gopls >> 2. Make some directory you can wipe out after the test and cd into it >> 3. git clone git@HIDDEN:theothornhill/gin.git foo/bar/baz/foo/bar/ba= z/foo/bar/baz/foo/bar/baz/gin >> 4. cd foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin >> 5. open fs.go in emacs and make sure some go mode is available. Go-ts-mo= de for example >> 6. M-x profiler-start >> 7. M-x eglot >> 8. Wait 10-20 seconds. Do no actions other than let the lsp settle. >> 9. M-x profiler-stop >> 10. M-x profiler-report >> 11. Rinse repeat with both or all variants of emacs with/without the >> latest eglot changes. >> I'll add my profiles, and let some metrics talk. > > Thanks, but that is not what I asked to provide, for us to make a > decision in this case. I asked to provide results of a benchmark-run > or similar measure of the run time. Profiles, by contrast, are much > harder to interpret when the issue is the overall time it takes to > perform some operations. > > Could you please show benchmark times of the old code (before your > changes), the code after your changes, and the current code in Git > (after Jo=C3=A3o reverted your change and installed his own improvements)? > This will allow us to see the times (both processing and GC) of each > variant, and will allow to compare their performance. > > Thanks. I'll try. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 06:57:02 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 02:57:01 2024 Received: from localhost ([127.0.0.1]:57162 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxiB9-0003HH-Qb for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:57:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43368) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxiB5-0003GB-TS for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:56:57 -0400 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 1rxiAm-0003Tq-4T; Fri, 19 Apr 2024 02:56:36 -0400 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=gW+cI2Ux5InfW/YOM+DISzl5FRvkogK8DJRT22Uc4uY=; b=Hs0rGd3vwYn9Kmr3TORT 4QYARexYslpPtmg7hVfEamnUb/Pk4b55uil22oxSFS7Ksrb1puvdLSxsTSXgX+DgeKVL9s5cSP4AG vJ4v5ZsblctGrbnLg826WB6vxJhoy7d++SbZMRbWSEVccZtDjIUBbD/kAZbtW2ju/fni0jL9dIzRf sgf+f3xGlvls3D+c9dhDYoOzZxoInIRdPWev1WTVobKW3Cy+MNfppIV4h0EtZhrBykkZF5W4xuPZE P92oL8QMx6qRTRSxCxIbLokqOW5A0LvU9AtV/GcB5KZ9hPjH4T56j5MrZZ+g8bVN5mS8tX2Kdswr1 eBV3EPra6vPViA==; Date: Fri, 19 Apr 2024 09:56:34 +0300 Message-Id: <864jbxden1.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 23:06:47 +0100) Subject: Re: bug#70036 a fix that References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Thu, 18 Apr 2024 23:06:47 +0100 > Cc: Eli Zaretskii <eliz@HIDDEN>, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > > > Still, for the very little data that there is available, I do take care > > > to put in a much simpler fix that completely fixes the issue - as far as > > > I or anyone reading the available data can see it. > > > > With this I disagree - but I guess I either have miscommunicated or have > > provided unclear profiles or something inbetween. > > I scanned the bug thread twice and couldn't find any other profiles. > There are mentions of textDocument/publishDiagnostics, but no actual > profile data or information of how to see the performance problem. > > Maybe _I_ missed something. But I see you have now sent a perfect > reproduction, so it doesn't matter. There was no need to have any profiles to demonstrate that file-truename is significantly slower than expand-file-name. It should be clear just by looking at what file-truename does and how it does that. Therefore, once I was told that resolving symlinks in Emacs is unnecessary, replacing file-truename with expand-file-name became a no-brainer, regardless of how many or how few percents of CPU time it takes: it's just a waste of CPU cycles. It's only now, that we decided symlinks _should_ be resolved by Emacs, that quantitative performance of the code and the fraction of it due to file-truename becomes relevant, and must be measured and compared with alternatives. > I still think the cleanest solution is to write file-truename > in C. I explained in that past discussion why this is not simple. So if simpler solutions exist, we should prefer them. > But if that can't be done, it doesn't seem terribly hard > to get rid of find-buffer-visiting in publishDiagnostics and > still remain symlink-correct. find-buffer-visiting was made much faster lately, but that speedup AFAIR shows up only if the session has a lot of buffers, so trying these benchmarks in "emacs -Q" will not typically show the effect, and could even obscure the file-truename effect as well, because the number of calls to file-truename will be much smaller. But if calling find-buffer-visiting from Eglot can be avoided, that is of course even better. > That's because every interesting result of find-buffer-visiting > is a buffer for which we've already issued a 'didOpen', which > in turn means we've already called file-truename once for it. > If we cache that result (the basic idea behind the "better fix") > it should be possible to find the buffer quicker just by iterating > the list. That's what I will try to do, using your recipe as > guide. Thanks.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 06:46:10 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 02:46:10 2024 Received: from localhost ([127.0.0.1]:57119 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxi0e-0000zG-K8 for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:46:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36040) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxi0a-0000ry-QA for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:46:06 -0400 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 1rxi0G-0001vV-AE; Fri, 19 Apr 2024 02:45:45 -0400 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=uBl6jSLWhqIaySs/8FhnCM7kd/I5F2XNiuvI9X4mTeY=; b=aXq26zJIUm9ArFQoI7wJ tTbm3nQSowLpLz0KyyiL+bbeE0XtltBf15+HdlLhstsDz3DE1v9/z59BOog2oU2Ek1B3Z5Q4xT1vk mDEYBQk1gtFVMxW1Rxufz/FOh1frNtiASNNkbO3j/xD0RlHSlKdquCQqZaJbkSFLujCixSeXRWbSA x/EooBrsPuF/GCGVsgOnFy18RH5JMjGV9tYxudjCUXfFYvW+iWNwsdC4T4DNxh6UWRxxl0TR5MzK4 WG+U06x93oTX4GJN+zSHdLPYcNxkpdQDBsbznm6g14j5TsDOY0aBSO51r3cN44CLNBZswJpofhACs 51Lfi1X2w9ChcA==; Date: Fri, 19 Apr 2024 09:45:15 +0300 Message-Id: <865xwddf5w.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> In-Reply-To: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> (message from Theodor Thornhill on Thu, 18 Apr 2024 23:32:00 +0200) Subject: Re: bug#70036 a fix that References: <4e670617-6483-4159-a5cf-27a921764c38@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: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@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 (---) > Date: Thu, 18 Apr 2024 23:32:00 +0200 > From: Theodor Thornhill <theo@HIDDEN> > Cc: Eli Zaretskii <eliz@HIDDEN>, felician.nemeth@HIDDEN, > 70036 <at> debbugs.gnu.org > > I'll add two profiles, one is profile-fast and profile-slow. You can > guess which is which :) > > STEPS: > I've made an intentionally broken commit into a golang repo I just > forked, to get some publishDiagnostics quickly. > > (for good measure evaluate eglot.el before running profiles) > > 1. Install gopls > 2. Make some directory you can wipe out after the test and cd into it > 3. git clone git@HIDDEN:theothornhill/gin.git foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin > 4. cd foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin > 5. open fs.go in emacs and make sure some go mode is available. Go-ts-mode for example > 6. M-x profiler-start > 7. M-x eglot > 8. Wait 10-20 seconds. Do no actions other than let the lsp settle. > 9. M-x profiler-stop > 10. M-x profiler-report > 11. Rinse repeat with both or all variants of emacs with/without the > latest eglot changes. > I'll add my profiles, and let some metrics talk. Thanks, but that is not what I asked to provide, for us to make a decision in this case. I asked to provide results of a benchmark-run or similar measure of the run time. Profiles, by contrast, are much harder to interpret when the issue is the overall time it takes to perform some operations. Could you please show benchmark times of the old code (before your changes), the code after your changes, and the current code in Git (after João reverted your change and installed his own improvements)? This will allow us to see the times (both processing and GC) of each variant, and will allow to compare their performance. Thanks.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 06:27:21 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 02:27:20 2024 Received: from localhost ([127.0.0.1]:57029 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxhiR-0005jv-1i for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:27:20 -0400 Received: from out-171.mta0.migadu.com ([2001:41d0:1004:224b::ab]:50979) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxhiP-0005io-A2 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:27:17 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713508016; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=RfrdPUU9wCJah/nAyBplofOasC4TkvR7WOMtu3yPsAs=; b=TFXARErT8ufWejwWYXK9VuGZpcgZ5Z+XrwH4ut1TJ/WGYds4butVxbQDHgBeoe3PnCyRGp tU1S7+i1cWAy2HzUHpfRpBP9UokBwzt8b9S2jeUxGlMDriVg9cIEFGNxnBvvYSPNAR7o8Y bZ6OfDfRpkABp7rKgAm2aqCJGgIxDYvIfhcYCWDmtj4Zsgq+EVadoBUp44LgmOYLU7jMLf VE7Oesx2zNNgbXQaqFrPndR1l30D652xaYwHi26cAl/OT5x/BnmkGarWf+rrw/SP779yOj m9vApCdQ8mNQ96ydAH/n10o01jbfmnGfW+REXUHNIYw0CC74r4rELvzlPsL9TA== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <87wmot289d.fsf@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> <87wmot289d.fsf@HIDDEN> Date: Fri, 19 Apr 2024 08:26:53 +0200 Message-ID: <87sezh27gy.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) > > Could we rather use eglot--managed-buffers, like in my patch? there > shouldn't be a need to loop through say 200 buffers that are unrelated > to the project in question, right? Apart from this I agree, and will try > it. Like this? I can confirm with yours and this patch the latency is down again, so thanks. I'll test a little the difference with/without eglot--managed-buffers. Theo diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 90a607075d3..3578aed92b4 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -2381,8 +2381,11 @@ eglot-handle-notification (lambda () (remhash token (eglot--progress-reporters server)))))))))) +(defvar-local eglot--cached-tdi nil + "A cached LSP TextDocumentIdentifier URI string.") + (cl-defmethod eglot-handle-notification - (_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics + (server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode' "Handle notification publishDiagnostics." (cl-flet ((eglot--diag-type (sev) @@ -2391,9 +2394,14 @@ eglot-handle-notification ((= sev 2) 'eglot-warning) (t 'eglot-note))) (mess (source code message) - (concat source (and code (format " [%s]" code)) ": " message))) + (concat source (and code (format " [%s]" code)) ": " message)) + (find-it (uri) + (cl-loop for b in (eglot--managed-buffers server) + when (with-current-buffer b + (equal eglot--cached-tdi uri)) + return b))) (if-let* ((path (expand-file-name (eglot-uri-to-path uri))) - (buffer (find-buffer-visiting path))) + (buffer (find-it uri))) (with-current-buffer buffer (cl-loop initially @@ -2518,9 +2526,6 @@ eglot-handle-request (t (setq success :json-false))) `(:success ,success))) -(defvar-local eglot--cached-tdi nil - "A cached LSP TextDocumentIdentifier URI string.") - (defun eglot--TextDocumentIdentifier () "Compute TextDocumentIdentifier object for current buffer." `(:uri ,(or eglot--cached-tdi Thanks, Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 06:10:19 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 02:10:19 2024 Received: from localhost ([127.0.0.1]:56957 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxhRy-0004EJ-SB for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:10:19 -0400 Received: from out-176.mta1.migadu.com ([95.215.58.176]:12883) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxhRv-0004Cq-FR for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:10:17 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713506993; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Qu846u6yOAf5RpzJz31PY4EDHfWmcpYSaUcDI3BmdGo=; b=GgfsoztOKNneNKlqFY4xIq7Ob/pbSlC/6Xq5ENCQ2yXDz/S0xZ3Yvi8NsujpGElUJ4GFXV 1luafhRZtnngHQX5VX+9c8wAicWRmqLxEGGpxzWxCGAY+PT7PVeX5xEQBZPUJ6SCLspDLG lASyEI+altC6F30HBynwgY5AUSC9tQG3u+dEjm0JiFVLzdoyohMMRXzVMvp0VK7CHL6V9C lI21q2uYHWDt/BD2xQUsPZyUwiQbCYDBk00tvXxV8SbLaKqhCUdEX8r2lcmoIfC6zIY5PT 0XYHv8XyIMVlUTKRl/+J+yKJzmzaNOB8eQbkgs0WgY/8aa6Pg98csBcd4h0odg== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> Date: Fri, 19 Apr 2024 08:09:50 +0200 Message-ID: <87wmot289d.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > On Thu, Apr 18, 2024 at 11:06=E2=80=AFPM Jo=C3=A3o T=C3=A1vora <joaotavor= a@HIDDEN> wrote: > >> Anyway is this the hotspot I should be trying to optimize? >> >> > 9 4% - find-buffer-visiting > > Alright, i've reproduced this > > 33 5% - eglot-handle-notification > 33 5% - apply > 33 5% - #<compiled-function B79> > 29 4% - find-buffer-visiting > 29 4% - file-truename > 29 4% - file-truename > 25 4% - file-truename > 25 4% - file-truename > 25 4% - file-truename > 25 4% - file-truename > 25 4% + file-truename > > But I have to say, I wouldn't call this a severe performance penalty. > I followed your instructions very closely and invoked Emacs like this: > > emacs -Q foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin/fs.go -f > go-ts-mode > > The directory is ~/tmp/theo/foo/bar... so it's a pretty long path with > many directories all in all. Great! > > But I didn't have to wait 10 seconds for the LSP to settle down! It was > pretty snappy on my 2018 Lenovo T480 running Archlinux. And if I > profile anything other than the initial M-x eglot (which normally happens > only once in a work session), I don't find any file-truename in the profi= le. > This is true to some extent, but varies a lot from server to server, as you've also noted earlier. I have an even stronger computer, a 2023 P1 gen 5, I believe, running ubuntu. Some servers send _all_ diagnostics on every keystroke. > So my perception is that it must have spent around 4% of 1 second in > file-truename. > > Anyway the reason this shows in this profile is because this project > with this particular server sends a lot of publishDiagnostics upfront. > That's OK. Gopls is a very good server. I think I see a fix. But can > you qualitatively describe the Eglot experience. Do you notice any > input lag or something like that? With this project? I didn't feel _any_ > lag. > Super snappy. Maybe the JSON serde kicking in? > In this particular project I don't notice any input lag. But on every java project at work I absolutely do. With my fix I don't. So if we solve this in any particular way that will be a huge benefit for everyone using java and other either suboptimal lsp servers or languages in general. > Anyway, the idea I suggested earlier is in the patch after my sig. > > Let's think: LSP's publishDiagnostics coming from the server deals > in URIs, right? And we inform the LSP server about URIs, too, right? > So the URI is always LSP's idea of the resource identifier (and it likes > to have truename URI). Sure, like in my key/value store. (apart from symlinking) > > My last "better fix" commit records this URI in the buffer as a buffer > local variable eglot--cached-tdi and it has to do that for every didOpen. > > So, to find an open buffer pertaining to a certain LSP's publishDiagnost= ics > it suffices in theory to go through all the buffers that have a non-nil > cached > URI and compare that. > > No need to convert from URI to file names, not for this job at least! > I tried this and it worked fine. > > When I do that, the profile is completely free of those 4% that > bothered you. > > I'm still testing this for edge cases and will sleep on it, but it seems > promisingly simple at least. I can't run unit tests right now, because > a recent adventurous commit by Stefan Monnier broke them all :-) > but I'm confident that will be fixed soon... > > I hope you can try this patch. I will :) > > Jo=C3=A3o > > diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el > index 90a607075d3..38a16b15e4c 100644 > --- a/lisp/progmodes/eglot.el > +++ b/lisp/progmodes/eglot.el > @@ -2381,6 +2381,9 @@ eglot-handle-notification > (lambda () > (remhash token (eglot--progress-reporters > server)))))))))) > > +(defvar-local eglot--cached-tdi nil > + "A cached LSP TextDocumentIdentifier URI string.") > + > (cl-defmethod eglot-handle-notification > (_server (_method (eql textDocument/publishDiagnostics)) &key uri > diagnostics > &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mod= e' > @@ -2391,9 +2394,14 @@ eglot-handle-notification > ((=3D sev 2) 'eglot-warning) > (t 'eglot-note))) > (mess (source code message) > - (concat source (and code (format " [%s]" code)) ": " > message))) > + (concat source (and code (format " [%s]" code)) ": " > message)) > + (find-it (uri) > + (cl-loop for b in (buffer-list) Could we rather use eglot--managed-buffers, like in my patch? there shouldn't be a need to loop through say 200 buffers that are unrelated to the project in question, right? Apart from this I agree, and will try it. Thanks, Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 05:59:25 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 01:59:24 2024 Received: from localhost ([127.0.0.1]:56903 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxhHP-0003Ae-0f for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 01:59:24 -0400 Received: from out-170.mta1.migadu.com ([2001:41d0:203:375::aa]:30418) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxhHM-00039T-SV for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 01:59:21 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713506340; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5xbVuXdPwcMfulUUbtkRVonJ9QvPhoSnhA2QiVrho74=; b=WrKTrvb5Ko7URzKiZSNUITzYVHpuqw1Ol4DLBEvPItztjCQbx4qGsahMWpuNdfnZGiny4W HmCgiHfeU+ylkQG7x3RbWAhKNlr4EtisNHjHdSOCKX/ajY8kvlk/+4+2rM7OgLp5trr8MK zccDHJbeMi63M4hiMlgEob3m7GsMZyE8up3/NEgQxKRvgcIXHxqvehz4i1AU8fE/aNEfwg eGTMeDQ01KH6UGA3/3cieMuRyEPnEO5rgwJs9quob04RwtnG/hpJl9i2hTu/6BKFCbZt4V kAPq/+0/ONvCIwD6Kv/6K4F88s07kP5PKISDIqshOWWrzMp9jpKditv7TcyhZw== From: Theodor Thornhill <theo@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036 a fix that In-Reply-To: <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> Date: Fri, 19 Apr 2024 07:58:57 +0200 Message-ID: <87zftp28ri.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) >> I'm fine. I do think you do come off strongly though, and it is not >> always easy to judge if it is of good faith. > > Just think: what reason do I have to be in "bad faith"? I just invited > you to collaborate in the GitHub repo and I want you to keep learning > and improving Eglot. I just think you did a commit -- in perfectly > good faith -- that clashes directly with what is a tenet of Eglot: > correctness and backward compatibility. I also think there are other > much better ways to fix the problem (the greatest of these ideas is > yours!!! rewrite it is C). > I agree - that's why I want to focus on improving the code, same as you. I just want you to understand that being mindful on how you come across can't really hurt. There are enough conflicts around these days, let's not make code be one. >> 1. Install gopls >> 2. Make some directory you can wipe out after the test and cd into it >> 3. git clone git@HIDDEN:theothornhill/gin.git foo/bar/baz/foo/bar/ba= z/foo/bar/baz/foo/bar/baz/gin >> 4. cd foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin >> 5. open fs.go in emacs and make sure some go mode is available. Go-ts-mo= de for example >> 6. M-x profiler-start >> 7. M-x eglot >> 8. Wait 10-20 seconds. Do no actions other than let the lsp settle. >> 9. M-x profiler-stop >> 10. M-x profiler-report >> 11. Rinse repeat with both or all variants of emacs with/without the >> latest eglot changes. >> I'll add my profiles, and let some metrics talk. This is from emacs -Q >> from your "better fix" and the commit before your revert. Please try on >> your systems and report back. > > Great recipe. > Good! >> By the way. I have a hunch the reason this is so apparent now is because >> of the faster json serde recently added to emacs. Not sure, but feels >> like it. Json serde is almost gone from the profiles. > > What is Json serde? Is it Json SERialization/DEserialization? That's right > That commit by Hermann made it in? That's great!! So Eglot is probably > faster overall. So I guess your bug report is about not missing > a further optimization opportunity. Fine. Yeah, that's right. I assume that when json serde disappeared as a bottleneck others emerge. This is the obvious one to me right now. > > Anyway is this the hotspot I should be trying to optimize? > >> 9 4% - find-buffer-visiting > > I still think the cleanest solution is to write file-truename > in C. But if that can't be done, it doesn't seem terribly hard > to get rid of find-buffer-visiting in publishDiagnostics and > still remain symlink-correct. I agree, and I'm still experimenting on that. But I need to make sure I have good test coverage on the current behavior before I start making the C one. The initial version, while fast, was just to prove that file-truename should be improved. > > That's because every interesting result of find-buffer-visiting > is a buffer for which we've already issued a 'didOpen', which > in turn means we've already called file-truename once for it. > If we cache that result (the basic idea behind the "better fix") > it should be possible to find the buffer quicker just by iterating > the list. That's what I will try to do, using your recipe as > guide. > > Jo=C3=A3o Sure. That will make the change you make similar in spirit to mine, yet with a different implementation. I'm fine with that. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 01:20:41 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 21:20:41 2024 Received: from localhost ([127.0.0.1]:55727 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxcvg-0006EW-GG for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 21:20:40 -0400 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]:57600) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxcve-0006EO-7X for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 21:20:39 -0400 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-516d3a470d5so1813741e87.3 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 18:20:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713489618; x=1714094418; 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=358WUPzYa2E1+/zCdA2gIXwzQK0Z/UiFizPxkzj30JQ=; b=h525SW6wjKuDickF7csny1dYXeX8gn30GY9aXCbf95Wq+t4fd2SMI2kRU9yPl4sCes iqkZqQ5tjy0ba9h5xKAu0SLwpyO/yotlGbwCD240cHepgM/ue9DP8P6dNjDayIdcPYd+ fHjphdVap8ezmzNz0imhXw6ZSArjAipOvLQFgUI+m8xLhlNMrU/IQplCPB0BCbhSZHIS wr/pDkn1gCWIlge7dbu2fvfGI4F36uupduvzBEqIfKSYI4lOZAaAk295vq154b5RBgY4 DHJre4OC3QOBDYNsMo2bK6gbJoiL/lYwBOvQZUaXc/Fi9RftS7z9oP40GZeiujOADYo1 ekmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713489618; x=1714094418; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=358WUPzYa2E1+/zCdA2gIXwzQK0Z/UiFizPxkzj30JQ=; b=oGGFd5ZXMOElAHAKMos8VoWxTeC1NOgJGGahLfRaga0UAkAVnnB++5G3QKGY9V9sXR +y1/hChukQLvmGK2MJtsKNYYgMI2jfAjG30LS7rNRMt9DYoUilNMJfURHY/RKeJ/ZUGp asX8blL0yvJXDhjwekXDE37bK8h7kpOL69dS6wJ71ntGM9IHdVGwsdDYLnsXHNUgxVQV I+ghI1NQK6hT0f4ee3ew6X9hPFGUlKzTx++LHEYmT0DTSvIOT084v+HfUlSV6+mexH0m yyAMyGL2P2T7wQM7z4IDBtf4BJc/tBveIvASL45mvcSxmwe0wGpFMNVazq0qweanF5O6 oxCw== X-Forwarded-Encrypted: i=1; AJvYcCVkWdQJT4zEf0z5S/kZdEf6ieV1iwwrrkmtT+3hlQ6B3JmasP95KcbahgmMiBnZRN9UXUj0Swyqwcv2uvlVsnnzH+rbhYQ= X-Gm-Message-State: AOJu0YxHqsZDDvxFaZyHTZDkv/8+bno3muPne0aiBbIyVKq3iNxkfyAu yv6q4Zt0jMc8nCcY9l9egUsLhv+KJ+Wl8Gmt7C+LhMws4x3T8xSB1xkLcgS/aOJalmsV6/X35ge CLAKp4CRMqS2pxIlm6wIhZBeNoUA= X-Google-Smtp-Source: AGHT+IH717rQPnEMmE2ZEU+AskIVPECOFf7RR+D5ybUbBVcNRRGacf/t94S4fXTRCy4n02qargdNRe/GlT63WzXOy5Q= X-Received: by 2002:a05:6512:401:b0:519:6e94:9b4d with SMTP id u1-20020a056512040100b005196e949b4dmr410268lfk.48.1713489617962; Thu, 18 Apr 2024 18:20:17 -0700 (PDT) MIME-Version: 1.0 References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> <86jzkud0be.fsf@HIDDEN> <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <3333E3B9-D81B-4C62-A8F5-A8841E7A66F7@HIDDEN> In-Reply-To: <3333E3B9-D81B-4C62-A8F5-A8841E7A66F7@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 02:20:49 +0100 Message-ID: <CALDnm53MnmuFHv0QDRUAEN2oakB7M5TfrKkyKUw9yTxgRJyitA@HIDDEN> Subject: Re: bug#70036: a fix that To: Yuan Fu <casouri@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000014f7c061668e4b3" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: theo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, Felician Nemeth <felician.nemeth@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 (-) --000000000000014f7c061668e4b3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > > On Apr 18, 2024, at 1:21 PM, Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN= m> wrote: > > And please don=E2=80=99t take this as a criticism It's fine Yuan. I don't. My relationship with Eli is past mending, and it doesn't need to be mended. I'm in this thread since this afternoon to understand and fix the performance problem without introducing a functional regression and I'm well on my way to doing all those three things together with the person who I so violated by reverting one of their commits among many. Then I will fix Eglot's unit tests, or Stefan will, and then I will be gone, keep a closer eye on these Eglot proposals since I notice that some would-be maintainers don't (yet) have a good grasp on tests, server variability, etc= . I think not many Emacs old-timers are using Eglot yet and that's crucial. But the situation is improving slowly so eventually that too will come sooner or later and then I will leave you more definitely and wish you lots of success. Jo=C3=A3o --000000000000014f7c061668e4b3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><br><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"> > On Apr 18, 2024, at 1:21 PM, Jo=C3=A3o T=C3=A1vora <<a href=3D"mail= to:joaotavora@HIDDEN" target=3D"_blank">joaotavora@HIDDEN</a>> wro= te:<br><br> And please don=E2=80=99t take this as a criticism</blockquote><div><br></di= v><div>It's fine Yuan.=C2=A0 I don't. My relationship with Eli is p= ast mending, and it doesn't=C2=A0</div><div>need to be mended. <br></di= v><div><br></div><div>I'm in this thread since this afternoon to unders= tand and fix the performance</div><div>problem without introducing a functi= onal regression and I'm well on my way=C2=A0</div><div>to doing all tho= se three things together with the person who I so violated=C2=A0</div><div>= by reverting one of their commits among many.=C2=A0</div><div>Then I will f= ix Eglot's unit tests, or Stefan will, and then I will be gone, keep</d= iv><div>a closer eye on these Eglot proposals since I notice that some woul= d-be=C2=A0</div><div>maintainers don't (yet) have a good grasp on tests= , server variability, etc.</div><div>I think not many Emacs old-timers are = using Eglot yet and that's crucial.</div><div>But the situation is impr= oving slowly so eventually that too will come</div><div>sooner or later and= then I will leave you more definitely and wish=C2=A0</div><div>you lots of= success.</div><div><br></div><div>Jo=C3=A3o<br></div></div></div> --000000000000014f7c061668e4b3--
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 00:58:14 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 20:58:14 2024 Received: from localhost ([127.0.0.1]:55626 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxcZy-00045b-2e for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 20:58:14 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:52317) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <casouri@HIDDEN>) id 1rxcZv-00044c-Pq for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 20:58:13 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-6ed054f282aso1309293b3a.0 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 17:57:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713488272; x=1714093072; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=lKK2ECSN3E3OrD4sIYEnZ/KptVCfJN2jiXLNJ1nqI2g=; b=l314oQ/3HBwLcm2pb5DxlM39zhY2orrr8wjaZgmkb4s56MfLNchy+cHNZOliKFNnCE Oql0ex8kLpJw54FsGYfudwGVtOQoOm+pQ5s0eLlsB0WTtOohhGJMbzjTmhNrQuXAACfo gkIBBgK5XrfjIhC1ak6N5A/npX52LnrI/h4VqIFPPkqUUSPhfM+exJbnNenXOOyi/ftj +azPddwhyC3RyG0xl09GLK6s6KvQhXTLVzcBoLN6EIAf0ULCAjkgCH/bAVEF0TW1xNpU FtrEzbwF/IIVHhvIf4O4kUxaJi6CsXgtEZgabzbVxzNnJXSImn/DZLoqnZBorgP/r/W+ NpdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713488272; x=1714093072; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lKK2ECSN3E3OrD4sIYEnZ/KptVCfJN2jiXLNJ1nqI2g=; b=wShOP8VRdiipG9vCwosBAho1anEuwwkGAtMFJKY1k+up1bALYzEz08mXYX3nGMcmeo QS4nEwXe+nB76h4/v+7+ast9Sdyk4247qvBlKPTixJbxPZ0NEb50RdJnYzDDl+y+JM6n iq4SM4AIrmyVG4XUfUQNm1ukoo/4jDF9Iln9UTp6RT6w8jqNxK/+hgJTa5jgnMeJQ4Je vdMoBH9xqb7uFXKejy+RuOu4tpk7aurAY0QqJ08enbRhmNzpooY3NYcweCkDqOiGbMYN 8vxK0mCVuhcB8I6i94mqMKnUTGPyASz8aVANpUuZKMPdHiMjR9TajwbjMSU2nFd5YexN eGVg== X-Forwarded-Encrypted: i=1; AJvYcCXa5NhzE+BZUXhQAlZUDhzFolBq/qUGa5iKpcJ+twNrmW9kPxsyyxvB/wPPhr9WOmpmC0pyY1W8Cb9f/aopRiJwBmMUuSQ= X-Gm-Message-State: AOJu0YzoMBGDgRw/TjNBYd0BaQE5TqumIKIdRm7PQE76O8wxvlq9TeSA briszaxl2nTq8o2VHwIyZqH5U+1s+jTiBNXjSwuzrtAOIdqvs2FG X-Google-Smtp-Source: AGHT+IHMrFa1qKyVtqF7vavEe9P9YJArVLgrloxh+pJNVBJRa9qX1u5RqARIffnmRnkN7Yd0gx7HOg== X-Received: by 2002:a05:6a20:918f:b0:1a7:5184:8d14 with SMTP id v15-20020a056a20918f00b001a751848d14mr1046496pzd.46.1713488271813; Thu, 18 Apr 2024 17:57:51 -0700 (PDT) Received: from smtpclient.apple ([2601:641:300:4910:7d73:e45c:650a:d52f]) by smtp.gmail.com with ESMTPSA id h3-20020a056a00218300b006ed4aa9d48esm2084207pfi.212.2024.04.18.17.57.50 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Apr 2024 17:57:51 -0700 (PDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.700.6\)) Subject: Re: bug#70036: a fix that From: Yuan Fu <casouri@HIDDEN> In-Reply-To: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> Date: Thu, 18 Apr 2024 17:57:39 -0700 Content-Transfer-Encoding: quoted-printable Message-Id: <3333E3B9-D81B-4C62-A8F5-A8841E7A66F7@HIDDEN> References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> <86jzkud0be.fsf@HIDDEN> <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> X-Mailer: Apple Mail (2.3731.700.6) X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: theo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, Felician Nemeth <felician.nemeth@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 Apr 18, 2024, at 1:21 PM, Jo=C3=A3o T=C3=A1vora = <joaotavora@HIDDEN> wrote: >=20 > On Thu, Apr 18, 2024 at 6:53=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> = wrote: >=20 >> I suggest to get an objective opinion of that from an uninvolved >> party. >=20 > I suggest you drop your sarcasm not because it hurts me or anything > but just because you're not very good at it. I wouldn=E2=80=99t consider it sarcasm, I=E2=80=99m sure Eli does mean = that he=E2=80=99s an uninvolved party, in the sense that he=E2=80=99s = neither Theo nor you. >=20 >>> So let's skip the morals. >>=20 >> No, let's not. >=20 > Really, you want to go at it again? Well let me just add a pinch of > salt to your typical condescension lecture, getting some facts = straight > about what happened here. I=E2=80=99m absolutely sure that you don=E2=80=99t want to hurt anyone = on this list, and I=E2=80=99m sure you have way too many Emacs work to = take care of in the limited personal time you got. But, I can see that = to an average person in the English-speaking culture, your words can = sound a bit harsh. Theo is an adult, yes, but why not be extra nice to = each other when we can? To me, taking some extra care for our fellow = Emacs developers in this cold world is definitely well worth it, even if = it means writing longer sentences :-) I hope you don=E2=80=99t take Eli=E2=80=99s reply as sarcasm plus = lecture, because I can see that he definitely doesn=E2=80=99t mean it. = He=E2=80=99s trying to maintain a nice, friendly environment for Emacs = developers, which is part of the job of a maintainer. He=E2=80=99s = succinctness in phrasing probably didn=E2=80=99t help here, but given = the amount of messages he needs to reply everyday, I can=E2=80=99t = really blame him ;-) And please don=E2=80=99t take this as a criticism, it=E2=80=99s = understandable to feel what you felt in the conversation. I just want to = share a more benefit-of-the-doubt-y view from a third-party. I=E2=80=99ll = be very sad if you, Eli, and any fellow developers ends up in heated = arguments and bad mood because of misunderstandings and = miscommunication. Yuan=
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 23:59:44 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 19:59:43 2024 Received: from localhost ([127.0.0.1]:55402 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxbfI-0006HY-Ik for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 19:59:43 -0400 Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]:43504) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxbfG-0006GN-83 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 19:59:39 -0400 Received: by mail-lj1-x22b.google.com with SMTP id 38308e7fff4ca-2dae975d0dcso25581181fa.1 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 16:59:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713484758; x=1714089558; 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=V9+W8dCveVR2yaZtCWdaxb+sNDspj5ia5ArMQ4W97mc=; b=DZBo70YCt/+M8MVFQxgY7qnehtSR1aA7rEpISd+D70fbmviqpQn//QOhKR03J5aLC8 pHigLOAT0mfEPrAAc1uY7xvQsrBKydJZhZG7NLCAACHjUPTwCJFfLY3r8u971Mnla8c4 lrrfkkWhklN4Y/JAwCSpDIsVIVI6mxPZAvJhYsAFwk6uexKZs0J1KYFyWEqQurnlRqG3 +8NJ8ViQkADDaXYCGFIZcKuYxBpmDoHlQgn6Vk7RTeXX/m6o1N0zClg9xWbHldUrM4D+ 3p60484Y14CCpmX3zXttiTNHY599vhCRCTRXt3iAz+0LWnLCJHZmBMpVTO0jw3cwk6Gd KQ+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713484758; x=1714089558; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=V9+W8dCveVR2yaZtCWdaxb+sNDspj5ia5ArMQ4W97mc=; b=OJQt8IbwzIcXW3O+ikWHN04QGUr2bXTWPutKT2bKaVASrrPzqNmjtlgOaxLGLY7qva qG9/FAr9IlLY9tXrxwhJMHCfQC80EmFJTkY2BQO+e9givTBNpjdDiu6lSXP496g9gigy KNEPPLaQUfJas8x572hZHP3TZfg990wgZKGvemU+DsTMwnl4a7uawnRn5Ix0xF1nyenc 3PzfgSJ4+nyzsELaoKaDHpsMzJ+XD5zV6XdMAwdHic+Ve6I3r06oxVzYR0on03M/YU0h gPlxFoj3nQ5Aq1xcoDgo3oEM7ZXyAiqUghXxOily9VWdgz+coNnpekfNaTKHsfo3NPzr fhFg== X-Forwarded-Encrypted: i=1; AJvYcCVqwDcBmv6Nz01plmI4llvV071v2KTHuw5VoGML5OxoPAncaQGIWJcL/HmuldxYnxm9MrXtmh3GUBp+v7Q/+RiuhsxSLgg= X-Gm-Message-State: AOJu0YwSnFJgwflgW3xDxpwRw8HZYxKfgppOYMttLPGbGuXJyHNrXmxy ulilS7bguSel9jYnTOoeqNLzT4feNJx2tVpF3vvU86eZPM3uJBMD806yE9ZAiolp1TIwsS2yYAm cqd+X+G/QIAqawUYpTYjVxn1S0cM= X-Google-Smtp-Source: AGHT+IHS+wfr2nViYy7gKSBRNNii08ESXfo1r67VTerXgZsqQmPYsbCuUB2HyWft3I/Av22c4Z03xx++fBwUvcWITKs= X-Received: by 2002:a2e:b94d:0:b0:2d8:606d:c797 with SMTP id 13-20020a2eb94d000000b002d8606dc797mr172314ljs.10.1713484758122; Thu, 18 Apr 2024 16:59:18 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> In-Reply-To: <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 19 Apr 2024 00:59:49 +0100 Message-ID: <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000560951061667c2ac" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) --000000000000560951061667c2ac Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Apr 18, 2024 at 11:06=E2=80=AFPM Jo=C3=A3o T=C3=A1vora <joaotavora@= gmail.com> wrote: > Anyway is this the hotspot I should be trying to optimize? > > > 9 4% - find-buffer-visiting Alright, i've reproduced this 33 5% - eglot-handle-notification 33 5% - apply 33 5% - #<compiled-function B79> 29 4% - find-buffer-visiting 29 4% - file-truename 29 4% - file-truename 25 4% - file-truename 25 4% - file-truename 25 4% - file-truename 25 4% - file-truename 25 4% + file-truename But I have to say, I wouldn't call this a severe performance penalty. I followed your instructions very closely and invoked Emacs like this: emacs -Q foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin/fs.go -f go-ts-mode The directory is ~/tmp/theo/foo/bar... so it's a pretty long path with many directories all in all. But I didn't have to wait 10 seconds for the LSP to settle down! It was pretty snappy on my 2018 Lenovo T480 running Archlinux. And if I profile anything other than the initial M-x eglot (which normally happens only once in a work session), I don't find any file-truename in the profile= . So my perception is that it must have spent around 4% of 1 second in file-truename. Anyway the reason this shows in this profile is because this project with this particular server sends a lot of publishDiagnostics upfront. That's OK. Gopls is a very good server. I think I see a fix. But can you qualitatively describe the Eglot experience. Do you notice any input lag or something like that? With this project? I didn't feel _any_ lag. Super snappy. Maybe the JSON serde kicking in? Anyway, the idea I suggested earlier is in the patch after my sig. Let's think: LSP's publishDiagnostics coming from the server deals in URIs, right? And we inform the LSP server about URIs, too, right? So the URI is always LSP's idea of the resource identifier (and it likes to have truename URI). My last "better fix" commit records this URI in the buffer as a buffer local variable eglot--cached-tdi and it has to do that for every didOpen. So, to find an open buffer pertaining to a certain LSP's publishDiagnostic= s it suffices in theory to go through all the buffers that have a non-nil cached URI and compare that. No need to convert from URI to file names, not for this job at least! I tried this and it worked fine. When I do that, the profile is completely free of those 4% that bothered you. I'm still testing this for edge cases and will sleep on it, but it seems promisingly simple at least. I can't run unit tests right now, because a recent adventurous commit by Stefan Monnier broke them all :-) but I'm confident that will be fixed soon... I hope you can try this patch. Jo=C3=A3o diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 90a607075d3..38a16b15e4c 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -2381,6 +2381,9 @@ eglot-handle-notification (lambda () (remhash token (eglot--progress-reporters server)))))))))) +(defvar-local eglot--cached-tdi nil + "A cached LSP TextDocumentIdentifier URI string.") + (cl-defmethod eglot-handle-notification (_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode' @@ -2391,9 +2394,14 @@ eglot-handle-notification ((=3D sev 2) 'eglot-warning) (t 'eglot-note))) (mess (source code message) - (concat source (and code (format " [%s]" code)) ": " message))) + (concat source (and code (format " [%s]" code)) ": " message)) + (find-it (uri) + (cl-loop for b in (buffer-list) + when (with-current-buffer b + (equal eglot--cached-tdi uri)) + return b))) (if-let* ((path (expand-file-name (eglot-uri-to-path uri))) - (buffer (find-buffer-visiting path))) + (buffer (find-it uri))) (with-current-buffer buffer (cl-loop initially @@ -2518,9 +2526,6 @@ eglot-handle-request (t (setq success :json-false))) `(:success ,success))) -(defvar-local eglot--cached-tdi nil - "A cached LSP TextDocumentIdentifier URI string.") - (defun eglot--TextDocumentIdentifier () "Compute TextDocumentIdentifier object for current buffer." `(:uri ,(or eglot--cached-tdi --000000000000560951061667c2ac Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">On Thu, Apr 18, 2024 at 11:06=E2=80=AFPM Jo=C3=A3o T=C3=A1= vora <<a href=3D"mailto:joaotavora@HIDDEN">joaotavora@HIDDEN</a>&g= t; wrote:<br><br>> Anyway is this the hotspot I should be trying to opti= mize?<br>><br>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A09 =C2= =A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- find-buffer-visiti= ng<br><br>Alright, i've reproduced this<br><br>=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 33 =C2=A0 5% =C2=A0 =C2=A0 =C2=A0 - eglot-handle-notification<br= >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 33 =C2=A0 5% =C2=A0 =C2=A0 =C2=A0 =C2= =A0- apply<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 33 =C2=A0 5% =C2=A0 =C2=A0= =C2=A0 =C2=A0 - #<compiled-function B79><br>=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 29 =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- find-buffer-vis= iting<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 29 =C2=A0 4% =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 - file-truename<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 29 = =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- file-truename<br>=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 - file-truename<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2= =A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- file-truename<br>= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 - file-truename<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= 25 =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- file= -truename<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2=A0 4% =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 + file-truename<br><br>But I have= to say, I wouldn't call this a severe performance penalty.<br>I follow= ed your instructions very closely and invoked Emacs like this:<br><br>emacs= -Q foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin/fs.go =C2=A0-f go-t= s-mode<br><br><div>The directory is ~/tmp/theo/foo/bar... so it's a pre= tty long path with</div><div>many directories all in all.</div><br>But I di= dn't have to wait 10 seconds for the LSP to settle down!=C2=A0 It was<b= r>pretty snappy on my 2018 Lenovo T480 running Archlinux.=C2=A0 And if I <b= r>profile anything other than the initial M-x eglot (which normally happens= <br><div>only once in a work session), I don't find any file-truename i= n the profile.</div><div><br></div><div>So my perception is that it must ha= ve spent around 4% of 1 second in <br></div><div>file-truename.<br></div><b= r><div>Anyway the reason this shows in this profile is because this project= =C2=A0</div><div>with this particular server sends a lot of publishDiagnost= ics upfront. =C2=A0</div><div>That's OK.=C2=A0 Gopls is a very good ser= ver.=C2=A0 I think I see a fix.=C2=A0 But can=C2=A0</div><div>you qualitati= vely describe the Eglot experience.=C2=A0 Do you notice any=C2=A0</div><div= >input lag or something like that? With this project?=C2=A0 I didn't fe= el _any_ lag.</div><div>Super snappy.=C2=A0 Maybe the JSON serde kicking in= ?<br></div><br><div>Anyway, the idea I suggested earlier is in the patch af= ter=C2=A0 my sig.</div><div><br></div><div>Let's think:=C2=A0 LSP's= publishDiagnostics coming from the server deals=C2=A0</div><div>in URIs, r= ight?=C2=A0 And we inform the LSP server about URIs, too, right?</div><div>= So the URI is always LSP's idea of the resource identifier (and it like= s</div><div>to have truename URI).<br></div><div><br></div><div>My last &qu= ot;better fix" commit records this URI in the buffer as a buffer</div>= <div>local variable eglot--cached-tdi and it has to do that for every didOp= en.<br></div><div><br></div><div>So, to find an open buffer pertaining to= =C2=A0 a certain LSP's publishDiagnostics</div><div>it suffices in theo= ry to go through all the buffers that have a non-nil cached</div><div>URI a= nd compare that. =C2=A0</div><div><br></div><div>No need to convert from UR= I to file names, not for this job at least!</div><div>I tried this and it w= orked fine.<br></div><br>When I do that, the profile is completely free of = those 4% that <br><div>bothered you.</div><div><br></div><div>I'm still= testing this for edge cases and will sleep on it, but it seems=C2=A0</div>= <div>promisingly simple at least.=C2=A0 I can't run unit tests right no= w, because</div><div>a recent adventurous commit by Stefan Monnier broke th= em all :-)=C2=A0</div><div>but I'm confident that will be fixed soon...= <br></div><div><br></div><div>I hope you can try this patch.<br></div><br><= div>Jo=C3=A3o</div><div><br></div>diff --git a/lisp/progmodes/eglot.el b/li= sp/progmodes/eglot.el<br>index 90a607075d3..38a16b15e4c 100644<br>--- a/lis= p/progmodes/eglot.el<br>+++ b/lisp/progmodes/eglot.el<br>@@ -2381,6 +2381,9= @@ eglot-handle-notification<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(lambda ()<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(remhash token (eglot--progress-reporters server))))))))))<br>=C2= =A0<br>+(defvar-local eglot--cached-tdi nil<br>+ =C2=A0"A cached LSP T= extDocumentIdentifier URI string.")<br>+<br>=C2=A0(cl-defmethod eglot-= handle-notification<br>=C2=A0 =C2=A0(_server (_method (eql textDocument/pub= lishDiagnostics)) &key uri diagnostics<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 &allow-other-keys) ; FIXME: doesn't respect `eglot-st= rict-mode'<br>@@ -2391,9 +2394,14 @@ eglot-handle-notification<br>=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0((= =3D sev 2) =C2=A0'eglot-warning)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(t =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0'eglot-note)))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(m= ess (source code message)<br>- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0(concat source (and code (format " [%s]" code)) ": &qu= ot; message)))<br>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(concat= source (and code (format " [%s]" code)) ": " message))= <br>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(find-it (uri)<br>+ =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(cl-loop for b in (buffer-list)<br= >+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 when (with-current-buffer 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(equal= eglot--cached-tdi uri))<br>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return b)))<br>=C2=A0 =C2=A0 =C2=A0(if-let*= ((path (expand-file-name (eglot-uri-to-path uri)))<br>- =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(buffer (find-buffer-visiting path)))<br>+ = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(buffer (find-it uri)))<br>= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(with-current-buffer buffer<br>=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(cl-loop<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 initially<br>@@ -2518,9 +2526,6 @@ eglot-handle-request<br>=C2= =A0 =C2=A0 =C2=A0 (t (setq success :json-false)))<br>=C2=A0 =C2=A0 =C2=A0`(= :success ,success)))<br>=C2=A0<br>-(defvar-local eglot--cached-tdi nil<br>-= =C2=A0"A cached LSP TextDocumentIdentifier URI string.")<br>-<br= >=C2=A0(defun eglot--TextDocumentIdentifier ()<br>=C2=A0 =C2=A0"Comput= e TextDocumentIdentifier object for current buffer."<br>=C2=A0 =C2=A0`= (:uri ,(or eglot--cached-tdi<br></div> --000000000000560951061667c2ac--
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 22:07:23 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 18:07:23 2024 Received: from localhost ([127.0.0.1]:54962 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxZub-0001of-Uh for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 18:07:22 -0400 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]:59597) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxZua-0001nn-5J for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 18:07:21 -0400 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2d87660d5c9so14704131fa.2 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 15:07:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713478020; x=1714082820; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=cnDehmav1rOAZ70VpWy44L6AG18BzzAO0eNSpTci/QM=; b=AezBtUzcEDbSO3T4DRqqOolEh2i5xiGMz+GMn2MOJ7kjFeuK35lBbJC2/7DZ9wtEo8 2EBORALOydPSYIpUjexdwxCwmmU4gR7SneRiDCht6BulubtFLKxjQ/80Q2FgFH5dq5vY qNxXekTmE6DbJxnll4hBZl0lfjUjuIi7KoRmvCe8wDDU2VoyF8nT5wOUH+eQU7rLC2im LTWAo1ievD+htTENvfULlfhZiAELSiVZWDHAThyZzo0SJKKnNhDQBtjhG9bEK5aNUdK4 u6t28XHXMY4EbsjKtT5X9d6VNa+lJnnUaWLhuneIxCUiuTC8SJ733KIjNGzqD7Gm21ud PZKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713478020; x=1714082820; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cnDehmav1rOAZ70VpWy44L6AG18BzzAO0eNSpTci/QM=; b=j3mbHquE1iicsIf725GQjPW0LeMPTm2rkez16NWF9NjjD+e+yb3vFpg5CdvNhhSe7k EyoWaQUFaJdAENJgDfENH4mtCU7NllUi5D1QGRDW9Kr7V9M2QsPfdvFSuI6RaS7Fo7SE EiF0SfsQIgbD9Y7WEPnurLSy/JOvaUwjNe7ibmWhceb4e9Hm/KagOFoC7lwq6fTQBkVW T82kQpDFaghtZT+P1UTzhUi6+5qiMRrcyZMf25ZFR8BrcRf7w0gY7jAFRc1Wt880aiWP 6WJFKI+BkJVvZsVB0e8V3uY5zmYK19RlNEpZ6jUNy2ZPk6C1+Gqrz7QkYflWmxGDDJOi wRGQ== X-Forwarded-Encrypted: i=1; AJvYcCUiwcHN85TtO7Lj1i+9qRfnCHCUgdH9XEaYws+LIrLYFVtfupCIBAngGP8WesuMrFv48UrjllST0YbPfnCOduXz4o2RE0Y= X-Gm-Message-State: AOJu0Yx4KPUdd5JPvS/LtlNw7+Wt/J4VvAGvQNgcASrN00ZGtD7RpGD5 2CP8h6nNmRIxOhGon/RXkRrV9pvJEqVFBvN1MqSenK49Tleir5LPqmpl1/d2Eu+g05oz4EbpPVu TbvApy3g+lGZpNinqKnRAjg9rrN8= X-Google-Smtp-Source: AGHT+IGjjlSXcNqhQ/Slx5HfD8ItoBW5hdLJeNoKirjdKPjBTX8QW1YrFVdLXKcnFDiFyJl2XuS5fNj/ZIwNjnTc8vI= X-Received: by 2002:a2e:938d:0:b0:2d9:fa96:1620 with SMTP id g13-20020a2e938d000000b002d9fa961620mr160991ljh.29.1713478020011; Thu, 18 Apr 2024 15:07:00 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> In-Reply-To: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 23:06:47 +0100 Message-ID: <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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, Apr 18, 2024 at 10:32=E2=80=AFPM Theodor Thornhill <theo@thornhill.= no> wrote: > > Im having some email client issues. I hope this mail renders readable. > > It doesn't suggest anything other than it, nothing about > > textDocument/publishDiagnostics. There's 0 data about that > > and it never showed up in my profile. > > I don't remember exactly right now, but I believe I mentioned many times > the performance of file-truename directly, and find-buffer-visiting > which uses file-truename indirectly. Yes, but that's not the same as saying there's data about it. Your profiles don't show find-buffer-visiting as a hotspot. Or did I miss any? > Did I decline? I've lost track, but I believe I said something in the > lines of "let's discuss it first", but nevermind. Well, that's declining. Politely, but declining :) > > Still, for the very little data that there is available, I do take care > > to put in a much simpler fix that completely fixes the issue - as far a= s > > I or anyone reading the available data can see it. > > With this I disagree - but I guess I either have miscommunicated or have > provided unclear profiles or something inbetween. I scanned the bug thread twice and couldn't find any other profiles. There are mentions of textDocument/publishDiagnostics, but no actual profile data or information of how to see the performance problem. Maybe _I_ missed something. But I see you have now sent a perfect reproduction, so it doesn't matter. > > And nothing serious will happen after I reverted it, will there? > > Not serious, but now we have a performance regression ;-) As far as we can tell, *you* have one. Noone else has -- as far as I can tell from the 7 years that code has been there. So I wouldn't really call this a "regression", but that doesn't mean I won't try to solve it. I'm confident it can be done. Incidentally I work on deep repos *with* symlinks, so I'm personally interested in the solution too. > I'm fine. I do think you do come off strongly though, and it is not > always easy to judge if it is of good faith. Just think: what reason do I have to be in "bad faith"? I just invited you to collaborate in the GitHub repo and I want you to keep learning and improving Eglot. I just think you did a commit -- in perfectly good faith -- that clashes directly with what is a tenet of Eglot: correctness and backward compatibility. I also think there are other much better ways to fix the problem (the greatest of these ideas is yours!!! rewrite it is C). > And I don't think Eli moralizes on my behalf. I don't know why it's done and I don't care, but I think it helps noone. > 1. Install gopls > 2. Make some directory you can wipe out after the test and cd into it > 3. git clone git@HIDDEN:theothornhill/gin.git foo/bar/baz/foo/bar/baz= /foo/bar/baz/foo/bar/baz/gin > 4. cd foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin > 5. open fs.go in emacs and make sure some go mode is available. Go-ts-mod= e for example > 6. M-x profiler-start > 7. M-x eglot > 8. Wait 10-20 seconds. Do no actions other than let the lsp settle. > 9. M-x profiler-stop > 10. M-x profiler-report > 11. Rinse repeat with both or all variants of emacs with/without the > latest eglot changes. > I'll add my profiles, and let some metrics talk. This is from emacs -Q > from your "better fix" and the commit before your revert. Please try on > your systems and report back. Great recipe. > By the way. I have a hunch the reason this is so apparent now is because > of the faster json serde recently added to emacs. Not sure, but feels > like it. Json serde is almost gone from the profiles. What is Json serde? Is it Json SERialization/DEserialization? That commit by Hermann made it in? That's great!! So Eglot is probably faster overall. So I guess your bug report is about not missing a further optimization opportunity. Fine. Anyway is this the hotspot I should be trying to optimize? > 9 4% - find-buffer-visiting I still think the cleanest solution is to write file-truename in C. But if that can't be done, it doesn't seem terribly hard to get rid of find-buffer-visiting in publishDiagnostics and still remain symlink-correct. That's because every interesting result of find-buffer-visiting is a buffer for which we've already issued a 'didOpen', which in turn means we've already called file-truename once for it. If we cache that result (the basic idea behind the "better fix") it should be possible to find the buffer quicker just by iterating the list. That's what I will try to do, using your recipe as guide. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 21:37:40 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 17:37:40 2024 Received: from localhost ([127.0.0.1]:54830 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxZRs-0006bO-Bl for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:37:40 -0400 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]:56445) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxZRq-0006aU-Gg for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:37:39 -0400 Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-516d4d80d00so1743820e87.0 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 14:37:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713476239; x=1714081039; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=qHGU+aUI68ZSWKC5zRMltg3ElbRi+IAiy5ml/M6/R1c=; b=K+ajAD5MZB1fx9ewEvlXhoZ3YDvApoCKFnQl5rCpdRi2LoNm2tuVrC53E2h+y5RvlN 4ycjlXSHWztmgpZu1kSzlqy2tqDMGEDcmSVE0YsqRIYBY5GAXIzGvIQfk+BhUCeJs6Ug C+SEBH4rA/AYIf0XmuIOqM/zSSAqAO60KuU5fy/I8w1yf1v8p/om4EnIAjTFGiyOxa1b 1616CRR9wzJJvM1wy+26PFPISR7P0bEamU22xyB6XNaCqY+pIkxKI19vW8WBKf0cyZNd nTp0cpjqAB/kCqyws9SlIpwWX3Hs/VFnABQ6zoaxsjWPsf6MBYj/pELosw9jIC8JirHg deCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713476239; x=1714081039; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qHGU+aUI68ZSWKC5zRMltg3ElbRi+IAiy5ml/M6/R1c=; b=rfGsrPtso0GEZ4RpTZy9T8prVJp40xxCnps/5ZpvrRCczeRS5/xgMT6Bm+UN0MXuaT 3iOEfuPab8qmPf5BJqB19q2VuT3IWHeluwuAfMdGNR6k2q4S9NTE/N/JNf+B5ikGKE26 K38FQuiqeNsTlb9888gXhubh6cm3+/0hKTPDdqabHr1wawdSFGq6iuFqXRtK6WAM8b8f QWLTW7VlhNjsF7nJE8dACQOCfx6/tnGl4eEkv1Ft2jv0YyjejitgTmIYCTUlVCpn8QuA +83itdCrCyVlDIVz9VggGxFI0tjhOImhYkKh1aEBjYLlg0LmNvbVHQwiiGeo3TyjDGsZ SuJg== X-Forwarded-Encrypted: i=1; AJvYcCWSluGLUOo99/LsRB+R08z8ox7jyaAZeVcBOSypYVJ8s/pLBDNt5A1OCjyXYiYLBVFtj47fS4ZrOuVN9laOFO0X02BROKQ= X-Gm-Message-State: AOJu0YxbVTGkptCk7QS1oUQLGxfbCQWGav2w1lJRRbHQ+deMiPaDW1uq 1f6KB73cbTywob0mrH8t3MRRyZg4HolzlnpHzsHnb+n4MXM/k0TUHD5mWV7vajT3E3o0iEVEBRC VzeduBiNKk080NpE2pKYJxB/TXRk= X-Google-Smtp-Source: AGHT+IGhDNSlgqReiu/TbX8mE13EqfbY5w4Gl3DEnAPK5uwxBiDOVaio2cVmb+UNWTTfPrBich0I1Lns0+r9RAfbD64= X-Received: by 2002:a05:6512:1322:b0:519:5b13:4739 with SMTP id x34-20020a056512132200b005195b134739mr215173lfu.30.1713476236585; Thu, 18 Apr 2024 14:37:16 -0700 (PDT) MIME-Version: 1.0 References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> <86jzkud0be.fsf@HIDDEN> <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <874jbycrd7.fsf@dick> <CALDnm51HWzo2+8ujwRqg_D78Qf42_5S24EjGDenjG+Duu7n6pg@HIDDEN> In-Reply-To: <CALDnm51HWzo2+8ujwRqg_D78Qf42_5S24EjGDenjG+Duu7n6pg@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 22:37:05 +0100 Message-ID: <CALDnm50kR_6TxusPNPNO3+zvNVZK0HPFMVxoGcECB1T0OyR7fw@HIDDEN> Subject: Re: bug#70036: a fix that To: dick <dick.r.chiang@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: theo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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, Apr 18, 2024 at 10:26=E2=80=AFPM Jo=C3=A3o T=C3=A1vora <joaotavora@= gmail.com> wrote: > > On Thu, Apr 18, 2024 at 10:07=E2=80=AFPM dick <dick.r.chiang@HIDDEN> w= rote: > > > Speaking of dicks, you are one, and your code is always dogshit, so you= r > > much heralded leavetaking of the emacs project can't come soon enough. > > My dear dick, you on the other hand, are such a lovely wonderful human be= ing > who writes such great code and is so courageous.. Thank you for > gracing me with > your attention. Means a lot to me. Love xoxo And I say this even without having the faintest idea of who you are, imagine if I did :-) Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 21:32:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 17:32:28 2024 Received: from localhost ([127.0.0.1]:54805 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxZMq-000613-Ex for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:32:28 -0400 Received: from out-187.mta0.migadu.com ([91.218.175.187]:29932) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxZMo-00060t-Mw for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:32:27 -0400 Date: Thu, 18 Apr 2024 23:32:00 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713475926; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to; bh=HW6KeS0/oUmdeT+TrCxaebMV01fqLc5c+4dWPwfxy7Q=; b=Bljo7L4hA4gfkO2kQmS+0W+58aMZ/QM6l3DgXKWPHAIwZ/n1NFMvgGJ93saDOw2hFfhOKf pmC4uIfbTIKhTilXc4d/WaaZ9yqQ79XBz4F/7dySo5k33u8t/3z9ra7/H3Hzu+hKjMVPc7 kxEfnt9ic4QnIXUMlgZHSkzGHsmGdZwsE7FfTk0rnpGBsvMzQsPZsmykprNZW+81EgORw8 gs3O3FrDfNxwfpnSWwZrbDAo/8VJdvkSuhxzsTv4hFmhhSmHeT0grv15EY+Ugu706KqtYH jlE0u8nEZZvFZHOpZ1b/l1AtlMjHc3Irjb7Gm+StSYz15SCR0roHA8guN8Rx5A== Subject: Re: bug#70036 a fix that Message-ID: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> X-Android-Message-ID: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> In-Reply-To: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. From: Theodor Thornhill <theo@HIDDEN> To: =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= <joaotavora@HIDDEN> Importance: Normal X-Priority: 3 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_OUT X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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> PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkltIGhhdmluZyBzb21lIGVtYWlsIGNsaWVudCBpc3N1 ZXMuIEkgaG9wZSB0aGlzIG1haWwgcmVuZGVycyByZWFkYWJsZS48L2Rpdj48ZGl2IGNsYXNzPSJn bWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Sm/Do28gVMOhdm9yYSAmbHQ7am9hb3Rhdm9yYUBnbWFpbC5jb20mZ3Q7IHdy aXRlczo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IE9uIFRo dSwgQXByIDE4LCAyMDI0IGF0IDY6NTPigK9QTSBFbGkgWmFyZXRza2lpICZsdDtlbGl6QGdudS5v cmcmZ3Q7IHdyb3RlOjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZn dDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7Jmd0OyBJIHN1 Z2dlc3QgdG8gZ2V0IGFuIG9iamVjdGl2ZSBvcGluaW9uIG9mIHRoYXQgZnJvbSBhbiB1bmludm9s dmVkPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyZndDsgcGFy dHkuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OzwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgSSBzdWdnZXN0IHlvdSBkcm9w IHlvdXIgc2FyY2FzbSBub3QgYmVjYXVzZSBpdCBodXJ0cyBtZSBvciBhbnl0aGluZzwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgYnV0IGp1c3QgYmVjYXVzZSB5 b3UncmUgbm90IHZlcnkgZ29vZCBhdCBpdC48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jmd0OyZndDsgJmd0OyBTbyBsZXQncyBza2lwIHRoZSBtb3JhbHMuPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mZ3Q7Jmd0OyBObywgbGV0J3Mgbm90LjwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj5bLi4uXTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPkknbGwgbGV0IG1vc3Qgb2YgdGhpcyBwYXNzLCBidXQgeWlrZXMuIExldCdzIGp1c3QgcmVs YXggYSBsaXR0bGUuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJy PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8L2Rpdj48ZGl2 IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IEl0IGRvZXNuJ3Qgc3VnZ2VzdCBh bnl0aGluZyBvdGhlciB0aGFuIGl0LCBub3RoaW5nIGFib3V0PC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyB0ZXh0RG9jdW1lbnQvcHVibGlzaERpYWdub3N0aWNz LiZuYnNwOyBUaGVyZSdzIDAgZGF0YSBhYm91dCB0aGF0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBhbmQgaXQgbmV2ZXIgc2hvd2VkIHVwIGluIG15IHByb2Zp bGUuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkkgZG9uJ3QgcmVtZW1iZXIgZXhhY3Rs eSByaWdodCBub3csIGJ1dCBJIGJlbGlldmUgSSBtZW50aW9uZWQgbWFueSB0aW1lczwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPnRoZSBwZXJmb3JtYW5jZSBvZiBmaWxl LXRydWVuYW1lIGRpcmVjdGx5LCBhbmQgZmluZC1idWZmZXItdmlzaXRpbmc8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj53aGljaCB1c2VzIGZpbGUtdHJ1ZW5hbWUgaW5k aXJlY3RseS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OzwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgKiBUaGVvZG9yIHN1Z2dlc3RzIHJld3Jp dGluZyBmaWxlLXRydW5lYW1lIGluIEMsIHlvdSBkZWNsaW5lIG9yIHJhaXNlPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBkb3VidHMuJm5ic3A7IEkgZG9uJ3Qg Zm9sbG93IHRoZSByZWFzb25zLCBidXQgZmFpciBlbm91Z2gsIHRoZSBkaXNjdXNzaW9uPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBwaXZvdHMgdG8gY2hhbmdp bmcgRWdsb3QuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0Ozwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgKiBJIHJlcHJvZHVj ZSBUaGVvZG9yJ3MgZXhwZXJpbWVudGFsIGZpbmRpbmdzLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mZ3Q7ICogSSBmaW5kIGEgcGF0Y2ggdG8gYWRkcmVzcyB0aGF0IGhvdHNwb3QgdGhh dCBpcyBzZXZlcmFsIHRpbWVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jmd0OyBmYXN0ZXIgdGhhbiBUaGVvZG9yJ3Mgc29sdXRpb24gKGRvZXNuJ3QgcmVhbGx5IG1h dHRlciB0aG91Z2gpLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZn dDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7ICogSSBhc2sg VGhlb2RvciB0byByZXZlcnQgdGhlIHBhdGNoIGFuZCBzdGFydCBhZnJlc2guIEhlIHVuZGVyc3Rh bmRzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBidXQgZGVj bGluZXMuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkRpZCBJIGRlY2xpbmU/IEkndmUg bG9zdCB0cmFjaywgYnV0IEkgYmVsaWV2ZSBJIHNhaWQgc29tZXRoaW5nIGluIHRoZTwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPmxpbmVzIG9mICJsZXQncyBkaXNjdXNz IGl0IGZpcnN0IiwgYnV0IG5ldmVybWluZC48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj5bLi4uXTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i Pjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7PC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBTdGlsbCwgZm9yIHRoZSB2 ZXJ5IGxpdHRsZSBkYXRhIHRoYXQgdGhlcmUgaXMgYXZhaWxhYmxlLCBJIGRvIHRha2UgY2FyZTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgdG8gcHV0IGluIGEg bXVjaCBzaW1wbGVyIGZpeCB0aGF0IGNvbXBsZXRlbHkgZml4ZXMgdGhlIGlzc3VlIC0gYXMgZmFy IGFzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBJIG9yIGFu eW9uZSByZWFkaW5nIHRoZSBhdmFpbGFibGUgZGF0YSBjYW4gc2VlIGl0LjwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj5XaXRoIHRoaXMgSSBkaXNhZ3JlZSAtIGJ1dCBJIGd1ZXNzIEkgZWl0 aGVyIGhhdmUgbWlzY29tbXVuaWNhdGVkIG9yIGhhdmU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj5wcm92aWRlZCB1bmNsZWFyIHByb2ZpbGVzIG9yIHNvbWV0aGluZyBp bmJldHdlZW4uPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IEFuZCBub3RoaW5nIHNlcmlvdXMgd2ls bCBoYXBwZW4gYWZ0ZXIgSSByZXZlcnRlZCBpdCwgd2lsbCB0aGVyZT88L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiIGRpcj0iYXV0byI+Tm90IHNlcmlvdXMsIGJ1dCBub3cgd2UgaGF2ZSBhIHBlcmZvcm1hbmNl IHJlZ3Jlc3Npb24gOy0pPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IEkgaGF2ZSBubyBpbnRlcmVz dCBpbiBkZWxheWluZyBhIHJlc3BvbnNpYmxlIGRlY2lzaW9uIGp1c3QgZm9yIHRoZTwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgc2FrZSBvZiBhcHBlYXNpbmcg ZmVlbGluZ3MgdGhhdCBzb21lb25lIGVsc2Ugc2F5cyBhcmUgdGhlcmUuJm5ic3A7IElmPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBUaGVvZG9yIGlzIHdvcnJp ZWQgYWJvdXQgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBwcm9ibGVtIEkgaGF2ZSBzb21lPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyB0aW1lIHRoaXMgd2VlayBh bmQgdGhlIG5leHQgb25lIHRvIGhlbHAgZml4IGl0LCBhbmQgSSdtIGNvbmZpZGVudCBJIHdpbGwu PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OzwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgRm9yIHRoZSByZWNvcmQgbXkgcmVw b3NpdG9yaWVzIGF0ICREQVlKT0Igd2l0aCB2ZXJ5IGxvbmcgcGF0aCBuYW1lczwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgX2FuZF8gdmVyeSBzeW1saW5rcy4m bmJzcDsgU28gSSdtIHBlcnNvbmFsbHkgaW50ZXJlc3RlZCBpbiBmaXhpbmcgYW55PC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBwZXJmb3JtYW5jZSBwcm9ibGVt cyBhbmQgbm90IG9wZW5pbmcgbmV3IG9uZXMuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZndDsmZ3Q7ICZndDsgSSdtIHN1cmUgVGhlbyBjYW4gdW5kZXJzdGFuZCB0aGF0LjwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsmZ3Q7PC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyZndDsgSGUgb2J2aW91c2x5IGZlbHQgaHVy dCwgc28gInVuZGVyc3RhbmQiIGlzIG5vdCBhbiBhcHByb3ByaWF0ZSB3b3JkPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyZndDsgaGVyZS48L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBJJ20gY29uZmlkZW50IGhlIHdpbGwgdW5kZXJzdGFuZCB0 aGlzLCBJIGNhbid0IGJlIHN1cmUgb2YgY291cnNlLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZndDsgQnV0IEkga25vdyBoZSB3cm90ZSAiY291bGQgYWJzb2x1dGVs eSBkbyB0aGF0IFtyZXZlcnRdIiB0aG91Z2ggaGUgcHJlZmVycmVkPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBub3QgdG8gZG8gaXQuJm5ic3A7IFRoYXQgYXQg bGVhc3Qgc2hvd3MgdGhhdCBpdCdzIG5vdCBhbiBhYnN1cmQgcHJvcG9zaXRpb24uPC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBBbmQgX0lfIHVuZGVyc3RhbmQg dGhhdCBoZSBkb2Vzbid0IHdhbnQgdG8sIG9mIGNvdXJzZS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jmd0OyBJIGRvbid0IGtub3cgaWYgVGhlb2RvciBmZWx0IGh1cnQsJm5ic3A7IGFu ZCBldmVuIGlmIEkgc3VzcGVjdGVkIHNvbWV0aGluZywmbmJzcDsgSTwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgd291bGRuJ3Qgd3JpdGUgYWJvdXQgaXQgaW4g cHVibGljIHNpbXBseSBiZWNhdXNlJm5ic3A7IEkgcGVyc29uYWxseSBmaW5kIGl0PC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBpbiBwb29yIHRhc3RlIHRvIHNw ZWN1bGF0ZSBvciBtb3JhbGl6ZSBhYm91dCBvdGhlcnMgcGVvcGxlJ3MgZmVlbGluZ3M8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IHNlY29uZGhhbmQuPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkknbSBmaW5lLiBJIGRvIHRoaW5rIHlvdSBkbyBjb21l IG9mZiBzdHJvbmdseSB0aG91Z2gsIGFuZCBpdCBpcyBub3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj5hbHdheXMgZWFzeSB0byBqdWRnZSBpZiBpdCBpcyBvZiBnb29k IGZhaXRoLiBBbmQgSSBkb24ndCB0aGluayBFbGk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj5tb3JhbGl6ZXMgb24gbXkgYmVoYWxmLiBCdXQgSSBkb24ndCBoYXZlIHRp bWUgdG8gbGluZ2VyIG9uIHRoYXQuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IEkgYXdhaXQgVGhl bydzIHJlcHJvZHVjaWJsZSBleHBlcmltZW50IHNvIHRoYXQgd2UgY2FuIHdvcmsgb24gd2hhdCdz PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyByZWFsbHkgaW1w b3J0YW50LjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjxicj48L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj5ZZXMsIG5vdyBvdmVyIHRvIG15 IGV4YW1wbGUuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkknbGwgYWRkIHR3byBwcm9m aWxlcywgb25lIGlzIHByb2ZpbGUtZmFzdCBhbmQgcHJvZmlsZS1zbG93LiBZb3UgY2FuPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Z3Vlc3Mgd2hpY2ggaXMgd2hpY2gg Oik8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+U1RFUFM6PC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+SSd2ZSBtYWRlIGFuIGludGVudGlvbmFsbHkgYnJva2Vu IGNvbW1pdCBpbnRvIGEgZ29sYW5nIHJlcG8gSSBqdXN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Zm9ya2VkLCB0byBnZXQgc29tZSBwdWJsaXNoRGlhZ25vc3RpY3Mg cXVpY2tseS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+KGZvciBnb29kIG1lYXN1cmUg ZXZhbHVhdGUgZWdsb3QuZWwgYmVmb3JlIHJ1bm5pbmcgcHJvZmlsZXMpPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPjEuIEluc3RhbGwgZ29wbHM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4yLiBNYWtlIHNvbWUgZGlyZWN0b3J5IHlvdSBjYW4gd2lwZSBvdXQg YWZ0ZXIgdGhlIHRlc3QgYW5kIGNkIGludG8gaXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4zLiBnaXQgY2xvbmUgZ2l0QGdpdGh1Yi5jb206dGhlb3Rob3JuaGlsbC9n aW4uZ2l0IGZvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2dp bjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjQuIGNkIGZvby9iYXIv YmF6L2Zvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2dpbjwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjUuIG9wZW4gZnMuZ28gaW4gZW1hY3MgYW5kIG1h a2Ugc3VyZSBzb21lIGdvIG1vZGUgaXMgYXZhaWxhYmxlLiBHby10cy1tb2RlIGZvciBleGFtcGxl PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Ni4gTS14IHByb2ZpbGVy LXN0YXJ0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Ny4gTS14IGVn bG90PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+OC4gV2FpdCAxMC0y MCBzZWNvbmRzLiBEbyBubyBhY3Rpb25zIG90aGVyIHRoYW4gbGV0IHRoZSBsc3Agc2V0dGxlLjwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjkuIE0teCBwcm9maWxlci1z dG9wPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+MTAuIE0teCBwcm9m aWxlci1yZXBvcnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4xMS4g Umluc2UgcmVwZWF0IHdpdGggYm90aCBvciBhbGwgdmFyaWFudHMgb2YgZW1hY3Mgd2l0aC93aXRo b3V0IHRoZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPmxhdGVzdCBl Z2xvdCBjaGFuZ2VzLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkkn bGwgYWRkIG15IHByb2ZpbGVzLCBhbmQgbGV0IHNvbWUgbWV0cmljcyB0YWxrLiBUaGlzIGlzIGZy b20gZW1hY3MgLVE8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj5mcm9t IHlvdXIgImJldHRlciBmaXgiIGFuZCB0aGUgY29tbWl0IGJlZm9yZSB5b3VyIHJldmVydC4gUGxl YXNlIHRyeSBvbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPnlvdXIg c3lzdGVtcyBhbmQgcmVwb3J0IGJhY2suPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+QnkgdGhlIHdheS4gSSBoYXZlIGEgaHVuY2ggdGhlIHJlYXNvbiB0aGlzIGlzIHNv IGFwcGFyZW50IG5vdyBpcyBiZWNhdXNlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+b2YgdGhlIGZhc3RlciBqc29uIHNlcmRlIHJlY2VudGx5IGFkZGVkIHRvIGVtYWNz LiBOb3Qgc3VyZSwgYnV0IGZlZWxzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+bGlrZSBpdC4gSnNvbiBzZXJkZSBpcyBhbG1vc3QgZ29uZSBmcm9tIHRoZSBwcm9maWxl cy48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj5Ob3cgbGV0J3Mgc3Rv cCBmaWdodGluZy48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+ PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPlRoZW88L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+UHJvZmlsZS1mYXN0OjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9 ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNjcmbmJzcDsgMzklIC0g Y29tbWFuZC1leGVjdXRlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA2MyZuYnNwOyAzNyUmbmJzcDsgLSBi eXRlLWNvZGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDYzJm5ic3A7IDM3JSZuYnNwOyAmbmJzcDstIHJl YWQtZXh0ZW5kZWQtY29tbWFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNjMmbmJzcDsgMzclJm5ic3A7 ICZuYnNwOyAtIHJlYWQtZXh0ZW5kZWQtY29tbWFuZC0xPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA2MyZu YnNwOyAzNyUmbmJzcDsgJm5ic3A7ICZuYnNwOy0gY29tcGxldGluZy1yZWFkLWRlZmF1bHQ8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IDIxJm5ic3A7IDEyJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBy ZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsz Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBjb21tYW5kLWV4ZWN1dGU8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7bGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJz cDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZnJhbWUtd2luZG93cy1taW4tc2l6ZTwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDt3aW5kb3ctbm9ybWFsaXplLWZyYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBpbnRlcm5hbC10aW1lci1z dGFydC1pZGxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3RpbWVycDwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gdGltZXItZXZlbnQtaGFu ZGxlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOy0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBzaG93LXBhcmVuLWZ1bmN0aW9u PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOy0gc2hvdy1wYXJlbi0tZGVmYXVsdDwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgLSBzaG93LXBhcmVuLS1sb2NhdGUtbmVhci1wYXJlbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO2JhY2stdG8taW5kZW50YXRpb248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIzptaW5pYnVmZmVyLXNl dHVwPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNw OyAmbmJzcDsgLSB1bmRvLWF1dG8tLWFkZC1ib3VuZGFyeTwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gdW5kby1hdXRv LS1ib3VuZGFyaWVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gdW5kby1hdXRvLS1lbnN1cmUtYm91bmRhcnk8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwO3VuZG8tYXV0by0tbmVlZHMtYm91bmRhcnktcDwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsyJSZuYnNwOyAtIGZ1bmNhbGwtaW50ZXJh Y3RpdmVseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsyJSZuYnNwOyAm bmJzcDstIGV4ZWN1dGUtZXh0ZW5kZWQtY29tbWFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgLSBjb21tYW5kLWV4ZWN1dGU8L2Rpdj48ZGl2 IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZnVu Y2FsbC1pbnRlcmFjdGl2ZWx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNw OzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZWdsb3QtLWNvbm5l Y3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZu YnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gcHJvamVjdC1uYW1lPC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7 ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7 Y29tcGlsZWQtZnVuY3Rpb24gNkVBJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNw OyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gYXBw bHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rp b24gMkM1Jmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2plY3QtLXZh bHVlLWluLWRpcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGhhY2st ZGlyLWxvY2FsLXZhcmlhYmxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJz cDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgLSBoYWNrLWRpci1sb2NhbC0tZ2V0LXZhcmlhYmxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBkaXItbG9jYWxzLWZpbmQtZmlsZTwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbG9jYXRlLWRvbWluYXRpbmct ZmlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDtkaXItbG9jYWxzLS1hbGwtZmlsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBseTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgLSBtYWtlLWluc3RhbmNlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7cHV0aGFzaDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNDEmbmJzcDsgMjQlJm5ic3A7ICZu YnNwO0F1dG9tYXRpYyBHQzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMzMmbmJzcDsgMTklIC0gcmVkaXNw bGF5X2ludGVybmFsIChDIGZ1bmN0aW9uKTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MyZuYnNw OyAmbmJzcDsxJSZuYnNwOyAtIHJlZGlzcGxheS0tcHJlLXJlZGlzcGxheS1mdW5jdGlvbnM8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNw O3J1bi1ob29rLXdpdGgtYXJnczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTgmbmJzcDsgMTAlIC0gLi4u PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAxMCZuYnNwOyAmbmJzcDs1JSZuYnNwOyAtIGVnbG90LS1nbG9i LXBhcnNlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxMCZuYnNwOyAmbmJzcDs1JSZuYnNwOyAmbmJzcDst IGxldDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTAmbmJzcDsgJm5ic3A7NSUmbmJzcDsgJm5ic3A7IC0g c2F2ZS1jdXJyZW50LWJ1ZmZlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTAmbmJzcDsgJm5ic3A7NSUm bmJzcDsgJm5ic3A7ICZuYnNwOy0gdW53aW5kLXByb3RlY3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDEw Jm5ic3A7ICZuYnNwOzUlJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBwcm9nbjwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgMTAmbmJzcDsgJm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGxldCo8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7IDEwJm5ic3A7ICZuYnNwOzUlJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7IC0gd2hpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzkmbmJzcDsgJm5ic3A7NSUm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJn bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOzkmbmJzcDsgJm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OSZuYnNwOyAmbmJzcDs1JSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBwcm9nbjwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7OCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7IC0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzgmbmJzcDsgJm5ic3A7 NCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGVnbG90 LXJlZ2lzdGVyLWNhcGFiaWxpdHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzgmbmJzcDsgJm5i c3A7NCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBh cHBseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7Y2xvc3Vy ZSBFOTUmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs4Jm5ic3A7ICZuYnNwOzQlJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2du PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs4Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGxldCo8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzgmbmJzcDsgJm5ic3A7NCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2duPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDs4Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsZXQqPC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs3Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZGVs ZXRlLWR1cHM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcmbmJzcDsgJm5ic3A7NCUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7LSBtYXBjYXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzYmbmJzcDsgJm5i c3A7MyUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gcHJvamVjdC1maWxlczwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7NiZuYnNwOyAmbmJzcDszJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBs eTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NiZuYnNwOyAmbmJzcDszJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7IC0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiA4MUMmZ3Q7PC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDs2Jm5ic3A7ICZuYnNwOzMlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7LSBtYXBjYW48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzYmbmJzcDsgJm5ic3A7MyUm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSAjJmx0O2NvbXBpbGVkLWZ1bmN0aW9u IDhBRSZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBwcm9qZWN0LS12Yy1saXN0LWZpbGVz PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2plY3QtLXZhbHVlLWluLWRpcjwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGhhY2stZGlyLWxvY2FsLS1nZXQtdmFyaWFibGVz PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBkaXItbG9jYWxzLWZpbmQt ZmlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxvY2F0ZS1kb21p bmF0aW5nLWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwO2Rpci1sb2NhbHMtLWFsbC1maWxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZu YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBw cm9qZWN0LS12Yy1tZXJnZS1zdWJtb2R1bGVzLXA8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOy0gcHJvamVjdC0tdmFsdWUtaW4tZGlyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5i c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgLSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDstIGhhY2stZGlyLWxvY2FsLS1nZXQtdmFyaWFibGVzPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZGlyLWxvY2Fscy1maW5kLWZpbGU8L2Rpdj48ZGl2 IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsb2NhdGUtZG9taW5hdGluZy1m aWxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg ZGlyLWxvY2Fscy0tYWxsLWZpbGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZu YnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS1lcXVh bC1wPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNw OyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9 ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAm bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5i c3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7 ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0g ZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxlLXRydWVuYW1l PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtmaWxlLXRy dWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gcHJvamVjdC0tdmFsdWUtaW4tZGlyPC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGhhY2stZGlyLWxvY2FsLXZhcmlhYmxlczwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC0tZ2V0LXZhcmlhYmxlczwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZGlyLWxvY2Fscy1maW5kLWZpbGU8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGxvY2F0ZS1kb21pbmF0aW5nLWZp bGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRpci1sb2Nh bHMtLWFsbC1maWxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGZpbGUtbmFtZS1kaXJlY3Rvcnk8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2 IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSB1bndp bmQtcHJvdGVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgLSBwcm9nbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9 ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAm bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYXBjPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSAjJmx0 O2Nsb3N1cmUgRDMxJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAtIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9Imdt YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgLSBvcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBwdXRoYXNoPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsaXN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwO2ZpbGUtbm90aWZ5LWFkZC13YXRjaDwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJz cDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZWds b3QtLXdvcmtzcGFjZS1jb25maWd1cmF0aW9uLXBsaXN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7IC0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0g bGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHNhdmUtY3VycmVu dC1idWZmZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0g dW53aW5kLXByb3RlY3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAtIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXMtbm9uLWZpbGUtYnVmZmVyPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gaGFjay1k aXItbG9jYWwtdmFyaWFibGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gaGFjay1kaXItbG9jYWwtLWdldC12YXJpYWJsZXM8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 IC0gZGlyLWxvY2Fscy1maW5kLWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbG9jYXRlLWRvbWluYXRpbmctZmls ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyBkaXItbG9jYWxzLS1hbGwtZmlsZXM8L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7LSBzZXRxPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGNvbnM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOy0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gd2hpbGU8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAtIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gc2V0cTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBub3Q8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtzZXRxPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDs0Jm5ic3A7ICZuYnNwOzIlJm5ic3A7IC0gIyZsdDtjbG9zdXJlIDY3RCZn dDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7 LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5i c3A7IC0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MiUmbmJz cDsgJm5ic3A7ICZuYnNwOy0gZWdsb3QtaGFuZGxlLW5vdGlmaWNhdGlvbjwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gYXBwbHk8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDstICMmbHQ7Y2xvc3VyZSBBOEQmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDs0Jm5ic3A7ICZuYnNwOzIlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gcHJvZ248L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7LSBlZ2xvdC0tc2lnbmFsLXRleHREb2N1bWVudC9kaWRPcGVuPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAtIGpzb25ycGMtbm90aWZ5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsz Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDst IGxpc3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGVnbG90LS1UZXh0RG9jdW1lbnRJdGVt PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBlbmQ8L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0tVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmll cjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGFwcGVuZDwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRl bnRpZmllcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBs aXN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xv dC1wYXRoLXRvLXVyaTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOy0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzEl Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7IC0gaWY8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7 MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhbmQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJz cDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9Imdt YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3Vy bC1nZW5lcmljLXBhcnNlLXVybDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJz cDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGVn bG90LS1ndWVzcy1jb250YWN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw Oy0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0t bG9va3VwLW1vZGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw Oy0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0g cHJvZ248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDstIGxldCo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgLSB3aGlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9 ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAm bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBwcm9nbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBzZXRxPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgLSBub3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIHNldHE8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBj bC1zb21lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZnVuY3Rpb248L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyBjY29udi1tYWtlLWludGVycHJldGVkLWNsb3N1cmU8L2Rpdj48ZGl2 IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxldCo8L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOy0gcHJvZ248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7 MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxldCo8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAtIGV4cGFuZC1maWxlLW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBlZ2xvdC11cmktdG8tcGF0aDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZu YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7dXJsLWdlbmVyaWMtcGFyc2UtdXJsPC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7IC0gbWFjcm9leHAtLWV4cGFuZC1hbGw8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7LSBtYWNyb2V4 cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5i c3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDstIG1hY3JvZXhwLS1hbGwtZm9y bXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7 ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsy Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNyb2V4cC0tYWxs LWZvcm1zPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7IC0gbWFjcm9leHAtLWV4cGFuZC1hbGw8L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7LSBtYWNyb2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7 ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1l eHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIG1hY3JvZXhwLS1hbGwtZm9ybXM8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNyb2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbWFjcm9leHAtLWV4cGFuZC1hbGw8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNyb2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bWFjcm9l eHAtLWFsbC1mb3JtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAtIGVnbG90LXNpZ25hbC1kaWRDaGFuZ2VDb25maWd1cmF0aW9uPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOy0ganNvbnJwYy1ub3RpZnk8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7IC0g bGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz cDsgJm5ic3A7LSBvcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7IC0gZWdsb3QtLXdvcmtzcGFjZS1jb25maWd1cmF0aW9uLXBsaXN0 PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7 MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBz YXZlLWN1cnJlbnQtYnVmZmVyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHVud2luZC1wcm90ZWN0PC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsx Jm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXMtbm9uLWZpbGUtYnVmZmVyPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBoYWNrLWRpci1sb2NhbC0tZ2V0LXZhcmlhYmxlczwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGRpci1sb2NhbHMtZmluZC1maWxl PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxvY2F0ZS1kb21pbmF0 aW5nLWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDtkaXItbG9jYWxzLS1hbGwtZmlsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz cDsgJm5ic3A7MCUmbmJzcDsgLSBlbGRvYy1wcmludC1jdXJyZW50LXN5bWJvbC1pbmZvPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOy0gZWxkb2Mt LWludm9rZS1zdHJhdGVneTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgLSBlbGRvYy1kb2N1bWVudGF0aW9uLWNvbXBvc2U8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZWdsb3Qt c2lnbmF0dXJlLWVsZG9jLWZ1bmN0aW9uPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7 ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBpZjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gcHJvZ248L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBqc29ucnBjLWFzeW5jLXJlcXVlc3Q8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7IC0ganNvbnJwYy0tYXN5bmMtcmVxdWVzdC0xPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDstIGpzb25ycGMtY29ubmVjdGlvbi1zZW5kPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgLSBhcHBseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gIyZsdDtj b21waWxlZC1mdW5jdGlvbiBGMDgmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7 ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 IC0ganNvbnJwYy0tZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7 MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 LSAjJmx0O2NvbXBpbGVkLWZ1bmN0aW9uIERFRSZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IC0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDtqc29ucnBjLS1sb2ctZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJn bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 IDExJm5ic3A7ICZuYnNwOzYlIC0gdGltZXItZXZlbnQtaGFuZGxlcjwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7OCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDs3Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOy0gIyZsdDtjb21waWxlZC1mdW5j dGlvbiBBQ0UmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs3Jm5ic3A7ICZuYnNwOzQlJm5i c3A7ICZuYnNwOyAtIGV4ZWN1dGUtZXh0ZW5kZWQtY29tbWFuZC0tc2hvcnRlcjwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7NyZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJzcDsgJm5ic3A7LSAjJmx0 O2NvbXBpbGVkLWZ1bmN0aW9uIDBGOCZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJz cDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGNvbW1hbmRwPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBp bnRlcmFjdGl2ZS1mb3JtPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gb2Nsb3N1cmUtaW50ZXJhY3RpdmUtZm9ybTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Z2V0aGFzaDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gQUU2 Jmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz cDsgLSBqc29ucnBjLWNvbm5lY3Rpb24tcmVjZWl2ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBseTwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0ganNvbnJw Yy0tZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gRDkzJmd0OzwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtqc29ucnBjLS1sb2ctZXZl bnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgKyB0aW1l ci1hY3RpdmF0ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw OyArIHRpbWVyLWluYy10aW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+UHJvZmlsZS1zbG93PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA3OCZuYnNwOyAzNiUgLSBjb21tYW5k LWV4ZWN1dGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDc2Jm5ic3A7IDM1JSZuYnNwOyAtIGJ5dGUtY29k ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgNzYmbmJzcDsgMzUlJm5ic3A7ICZuYnNwOy0gcmVhZC1leHRl bmRlZC1jb21tYW5kPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA3NiZuYnNwOyAzNSUmbmJzcDsgJm5ic3A7 IC0gcmVhZC1leHRlbmRlZC1jb21tYW5kLTE8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDc2Jm5ic3A7IDM1 JSZuYnNwOyAmbmJzcDsgJm5ic3A7LSBjb21wbGV0aW5nLXJlYWQtZGVmYXVsdDwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgMjEmbmJzcDsgJm5ic3A7OSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmVk aXNwbGF5X2ludGVybmFsIChDIGZ1bmN0aW9uKTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTImbmJzcDsg Jm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGNvbW1hbmQtZXhlY3V0ZTwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgMTEmbmJzcDsgJm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGZ1 bmNhbGwtaW50ZXJhY3RpdmVseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NyZuYnNwOyAmbmJz cDszJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHNlbGYtaW5zZXJ0LWNvbW1hbmQ8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7LSBlbGVjdHJpYy1pbmRlbnQtcG9zdC1zZWxmLWluc2VydC1mdW5jdGlv bjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGVsZWN0cmljLS1hZnRlci1jaGFyLXBvczwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7dW5kby1hdXRvLWFtYWxnYW1hdGU8L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBl eGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsg Jm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBjb21tYW5kLWV4ZWN1 dGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5PC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDs0Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDstIGVnbG90PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs0Jm5ic3A7ICZu YnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0t Y29ubmVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsxJSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0KjwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2plY3QtbmFtZTwvZGl2PjxkaXYgY2xhc3M9Imdt YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDstIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5i c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAtICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gRDRBJmd0OzwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBseTwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiBE OEMmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7LSBwcm9qZWN0LS12YWx1ZS1pbi1kaXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBo YWNrLWRpci1sb2NhbC0tZ2V0LXZhcmlhYmxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZu YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBkaXItbG9jYWxzLWZpbmQtZmlsZTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBsb2NhdGUtZG9taW5hdGluZy1maWxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRpci1s b2NhbHMtLWFsbC1maWxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5 PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFrZS1pbnN0YW5jZTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBhcHBseTwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSAjJmx0O2NvbXBpbGVkLWZ1bmN0 aW9uIDI5RiZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAtIGluaXRpYWxpemUtaW5zdGFuY2U8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDstIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5i c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiA5MjEmZ3Q7 PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOy0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IC0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiBFMEMmZ3Q7PC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDstICMmbHQ7Y2xvc3VyZSBGMzQmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7 ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7bWFrZS1wcm9jZXNzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZu YnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0g dW53aW5kLXByb3RlY3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBj b25kaXRpb24tY2FzZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBs ZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gY2F0Y2g8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGpzb25ycGMt YXN5bmMtcmVxdWVzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOy0gbGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAtIGZpbGUtbG9jYWwtbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZmlsZS1yZW1vdGUtcDwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7IC0gdGltZXItZXZlbnQtaGFuZGxlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gYXBwbHk8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg LSBibGluay1jdXJzb3Itc3RhcnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5i c3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBibGluay1jdXJzb3ItLXN0 YXJ0LXRpbWVyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHJ1bi13aXRoLXRpbWVyPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDstIHJ1bi1hdC10aW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5i c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7IHRpbWVyLXJlbGF0aXZlLXRpbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1pbmlidWZmZXItc2V0dXAtb24tc2NyZWVu LWtleWJvYXJkPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBkZXZpY2UtY2xhc3M8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHgt ZGV2aWNlLWNsYXNzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5i c3A7IC0gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5i c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDtleGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQ8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7IDY0Jm5ic3A7IDMwJSZuYnNwOyAmbmJzcDtBdXRvbWF0aWMgR0M8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7IDMzJm5ic3A7IDE1JSZuYnNwOyAmbmJzcDtyZWRpc3BsYXlfaW50 ZXJuYWwgKEMgZnVuY3Rpb24pPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAyMyZuYnNwOyAxMCUgLSAuLi48 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7IDE2Jm5ic3A7ICZuYnNwOzclJm5ic3A7IC0gIyZsdDtjbG9zdXJl IERFRiZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE2Jm5ic3A7ICZuYnNwOzclJm5ic3A7ICZuYnNw Oy0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxNiZuYnNwOyAmbmJzcDs3JSZuYnNwOyAmbmJzcDsg LSBhcHBseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTYmbmJzcDsgJm5ic3A7NyUmbmJzcDsgJm5ic3A7 ICZuYnNwOy0gZWdsb3QtaGFuZGxlLW5vdGlmaWNhdGlvbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTYm bmJzcDsgJm5ic3A7NyUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAxNiZuYnNwOyAmbmJzcDs3JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gIyZsdDtj bG9zdXJlIDJDQiZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE2Jm5ic3A7ICZuYnNwOzclJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gcHJvZ248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE2Jm5ic3A7 ICZuYnNwOzclJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0KjwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgMTYmbmJzcDsgJm5ic3A7NyUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTYmbmJzcDsgJm5ic3A7NyUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gcHJvZ248L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7IDE1Jm5ic3A7ICZuYnNwOzclJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxMCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gYW5kPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDs5Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmluZC1idWZmZXItdmlzaXRpbmc8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzkmbmJzcDsgJm5ic3A7NCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDs5Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzkmbmJzcDsgJm5ic3A7NCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7OSZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7OCZuYnNwOyAmbmJzcDszJSZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10 cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NiZuYnNwOyAmbmJzcDsyJSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5i c3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5h bWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZu YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUt dHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2ZpbGUtdHJ1ZW5hbWU8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBleHBhbmQtZmlsZS1uYW1lPC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZWdsb3QtdXJpLXRvLXBhdGg8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3VybC1nZW5lcmljLXBhcnNlLXVy bDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZGVsZXRlLWR1cHM8L2Rpdj48ZGl2 IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOzUmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBtYXBjYXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7LSBwcm9qZWN0LWZpbGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsz Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZu YnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gQ0UxJmd0OzwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbWFwY2FuPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSAjJmx0O2NvbXBpbGVkLWZ1 bmN0aW9uIDhDRSZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgLSBwcm9qZWN0LS12Yy1saXN0LWZpbGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gdmMtZ2l0LS1ydW4tY29t bWFuZC1zdHJpbmc8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7IC0gdmMtZ2l0LS1vdXQtb2s8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gdmMtZ2l0LS1jYWxs PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgLSBwcm9jZXNzLWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Y2FsbC1w cm9jZXNzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOy0gcHJvamVjdC0tdmMtbWVyZ2Utc3VibW9kdWxlcy1wPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2plY3Qt LXZhbHVlLWluLWRpcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAtIGhhY2stZGlyLWxvY2FsLS1nZXQtdmFyaWFibGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBk aXItbG9jYWxzLWZpbmQtZmlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJz cDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxvY2F0ZS1kb21pbmF0aW5n LWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2Rpci1sb2NhbHMtLWFsbC1maWxl czwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAt IGZpbGUtZXF1YWwtcDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDstIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZu YnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBmaWxlLXRydWVuYW1lPC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7 ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFt ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNz PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBmaWxlLXRy dWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2ZpbGUt dHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmdW5jdGlv bjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBjY29udi1tYWtlLWlu dGVycHJldGVkLWNsb3N1cmU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7 MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOy0gbWFjcm9leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7 ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgLSBtYWNyb2V4cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9Imdt YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFjcm9leHAtLWFsbC1mb3Jtczwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1h Y3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNw OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFjcm9leHAtLWFsbC1mb3JtczwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBtYWNyb2V4 cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNyb2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg LSBtYWNyb2V4cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9 ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAm bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFjcm9leHAtLWFsbC1m b3JtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOy0gbWFjcm9leHAtLWFsbC1mb3JtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgLSBtYWNyb2V4cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwO2Z1bmN0aW9uLWdldDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJz cDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNy b2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBtYWNyb2V4 cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFj cm9leHAtLWFsbC1jbGF1c2VzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 IC0gbWFjcm9leHAtLWFsbC1mb3JtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9 ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAm bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDstIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZnVuY3Rpb24tZ2V0PC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgLSBpZjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0PC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gd2hpbGU8L2Rpdj48ZGl2IGNsYXNzPSJn bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7IC0gc2F2ZS1jdXJyZW50LWJ1ZmZlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBlZ2xvdC0tbWF5YmUtYWN0aXZhdGUtZWRpdGluZy1tb2Rl PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBpZjwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gaWY8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBwcm9n bjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDstIGVnbG90LS1tYW5hZ2VkLW1vZGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGNvbmQ8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAtIGlmPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2FkZC1ob29rPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDs2Jm5ic3A7ICZuYnNwOzIlJm5ic3A7IC0gIyZsdDtjbG9zdXJlIDc2QyZn dDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzYmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7 LSBwcm9nbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NiZuYnNwOyAmbmJzcDsyJSZuYnNwOyAm bmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs2Jm5ic3A7ICZuYnNwOzIlJm5i c3A7ICZuYnNwOyAmbmJzcDstIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs2Jm5ic3A7 ICZuYnNwOzIlJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDs1Jm5ic3A7ICZuYnNwOzIlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYXBjYXI8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzUmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgLSAjJmx0O2Nsb3N1cmUgMDYyJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7NSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGxl dDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs1Jm5i c3A7ICZuYnNwOzIlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIHBy b2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7LSBlZ2xvdC0td29ya3NwYWNlLWNvbmZpZ3VyYXRpb24tcGxpc3Q8L2Rpdj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5i c3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7IC0gc2F2ZS1jdXJyZW50LWJ1ZmZlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MyZuYnNw OyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7LSB1bndpbmQtcHJvdGVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gcHJvZ248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMm bmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGhhY2stZGlyLWxvY2FsLXZhcmlhYmxlcy1ub24t ZmlsZS1idWZmZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgLSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC0t Z2V0LXZhcmlhYmxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MyZuYnNwOyAmbmJzcDsxJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgLSBkaXItbG9jYWxzLWZpbmQtZmlsZTwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsb2Nh dGUtZG9taW5hdGluZy1maWxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNw OzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRpci1sb2NhbHMtLWFsbC1maWxl czwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gY29uczwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOy0gZWdsb3QtLWdsb2ItY29tcGlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAtIGxldCo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBl Z2xvdC0tZ2xvYi1wYXJzZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDtzYXZlLWN1cnJlbnQtYnVmZmVyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZu YnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJn bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSB1bndp bmQtcHJvdGVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAt IG1hcGM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gIyZsdDtjbG9zdXJlIEVFMCZndDs8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxldCo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFuZDwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIG9yPC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAtIHB1dGhhc2g8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOy0gbGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBmaWxlLW5vdGlmeS1hZGQtd2F0Y2g8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgLSBlZ2xvdC1zaWduYWwtZGlkQ2hh bmdlQ29uZmlndXJhdGlvbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDstIGpzb25ycGMtbm90aWZ5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsx Jm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAtIGxpc3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOy0gb3I8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGVnbG90 LS13b3Jrc3BhY2UtY29uZmlndXJhdGlvbi1wbGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0PC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7IC0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gc2F2ZS1jdXJyZW50LWJ1ZmZlcjwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgLSB1bndpbmQtcHJvdGVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZu YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBw cm9nbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gaGFjay1kaXItbG9jYWwtdmFyaWFibGVz LW5vbi1maWxlLWJ1ZmZlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gaGFjay1k aXItbG9jYWwtdmFyaWFibGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gaGFj ay1kaXItbG9jYWwtLWdldC12YXJpYWJsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBkaXItbG9jYWxzLWZpbmQtZmlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgLSBsb2NhdGUtZG9taW5hdGluZy1maWxlPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZGlyLWxvY2Fscy0tYWxsLWZpbGVz PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAxMiZuYnNwOyAmbmJzcDs1JSAtIHRpbWVyLWV2ZW50LWhhbmRs ZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDEyJm5ic3A7ICZuYnNwOzUlJm5ic3A7IC0gYXBwbHk8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcmbmJzcDsgJm5ic3A7MyUmbmJzcDsgJm5ic3A7LSAjJmx0 O2NvbXBpbGVkLWZ1bmN0aW9uIEI0RSZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcmbmJz cDsgJm5ic3A7MyUmbmJzcDsgJm5ic3A7IC0gZXhlY3V0ZS1leHRlbmRlZC1jb21tYW5kLS1zaG9y dGVyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs2Jm5ic3A7ICZuYnNwOzIlJm5ic3A7ICZuYnNw OyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gNUVEJmd0OzwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBjb21t YW5kcDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJz cDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gMDQyJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7NCZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgLSBqc29ucnBjLWNvbm5lY3Rpb24tcmVj ZWl2ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJz cDsgJm5ic3A7LSBhcHBseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsw JSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0ganNvbnJwYy0tZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJn bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7 Y29tcGlsZWQtZnVuY3Rpb24gN0NDJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNw OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDtqc29ucnBjLS1sb2ctZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGpzb25ycGMtLXJlcGx5PC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBqc29ucnBjLWNvbm5lY3Rpb24tc2VuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOy0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiBFRDYmZ3Q7PC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAtIGpzb25ycGMtLWV2ZW50PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5i c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMm bHQ7Y29tcGlsZWQtZnVuY3Rpb24gMDIyJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZu YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0g YXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7anNvbnJwYy0tbG9n LWV2ZW50PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu YnNwOyAmbmJzcDstIGpzb25ycGMtLWNvbnRpbnVlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0 cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsx Jm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICMmbHQ7Y2xvc3VyZSA4 QzYmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlIC0ganNvbnJw Yy0tcHJvY2Vzcy1maWx0ZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7 MCUmbmJzcDsgJm5ic3A7IGJ1ZmZlci1zdHJpbmc8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm bmJzcDsgJm5ic3A7MCUmbmJzcDsgLSAjJmx0O2NvbXBpbGVkLWZ1bmN0aW9uIDMyRCZndDs8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7LSB0aW1l ci1hY3RpdmF0ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw OyAmbmJzcDsgLSB0aW1lci0tYWN0aXZhdGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt0aW1lci0tdGltZS1sZXNzLXA8 L2Rpdj48ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg==
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 21:27:03 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 17:27:03 2024 Received: from localhost ([127.0.0.1]:54780 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxZHa-0005OO-JN for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:27:03 -0400 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]:50585) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxZHY-0005N1-2U for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:27:00 -0400 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-518a56cdc03so1545916e87.1 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 14:26:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713475600; x=1714080400; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=KUUf6zljsVLjPyxMtxrjUJcUqxZzXo7/WHZ0lHdXD6s=; b=SHrHWq7MTzLEkgXOD2GLgvYh7Veb1A6MazPB+BRqKAAyuJcQG7FnQZYpUy/whC/l4O w3eI8+p3os1V8ulTu2ol/PHVQuRb05TNXwTYuEMm6JDRnTZgavlhYdeV2mrigg8GyMzu cACrsKmV79I3B8e2or61YMLZTiO4tOVdd5SMvXGNRAmJ3KW80voHQvHJqGHbeYNNhzen qUPko6/eEMLnGQ0mazyxX6EIvoasuEkiTI6VdecvnJe3lNB5IG8hYqek2WSSNsMa4pCM elSacnhi2vJehcwUhpHbnAukmU5FCUjG7bR+aeJZr7yjXDgIOLaomsDhvNuuL59QMuuX 59Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713475600; x=1714080400; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KUUf6zljsVLjPyxMtxrjUJcUqxZzXo7/WHZ0lHdXD6s=; b=sPb98egmZAtPiIsies3L8hms4wbSqLSaxKgIIaqIQ4XT67O/UHPZgfOqutFoLnhSE9 lTvgq2dR7pya7LHcZrgmpI05SWOIJh1qT0AMJyCPNPxXeoXqbiCvZE5kyq8f6nU91/hv oCh0jpmmcJPFY5lvko0b8q+TlJM/0tOOqQlXc9h1NtSwWKIZuiQrk8i4oRn6Jr705sA0 slbo90kUFplwaTDh6OqlzJ3zdYj8RLBzPuFvyk8G0ZaMLqSz5UwdZAtHdbrfV7SSo8lN lFtlyDIa5P0alk177vKyMyKeQFZQDC8MWkOwZHb3qCwNs0b9V8n6mWob7z0bCo+vU37F qOcQ== X-Forwarded-Encrypted: i=1; AJvYcCVuEYgoa91pGSfgKoFHkCmejksLcetb5gyK7rFP1Bn4xXrv54h1VnGY6ayuNTqP9Dfes5ylWfZxbiuEVDhWE9jnr19V8TA= X-Gm-Message-State: AOJu0YxL6o7dBiOPsKcNmkj33f9BTReMIAbnEWPdqljNdxIdoOXv2BxO +E6vEQ2OE7ivIKobNM2A3Vk+Yc7iWrP3PDJZjCnpFYz6QM0oQNQlqfZE/gY0J0FqigD37HlPtEn ArwhTt+PwTZsATZpMWtZjk+c5CTM= X-Google-Smtp-Source: AGHT+IGt37A5se0HasuVpjksO5/lqOhmUWw5ncpfMQIlJHwIHX8J1TirKalIC0f3ndHZxB5oATUKzrbijGW1x+k+ZBQ= X-Received: by 2002:a05:6512:31c8:b0:513:5fb0:c5ad with SMTP id j8-20020a05651231c800b005135fb0c5admr169674lfe.17.1713475600030; Thu, 18 Apr 2024 14:26:40 -0700 (PDT) MIME-Version: 1.0 References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> <86jzkud0be.fsf@HIDDEN> <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> <874jbycrd7.fsf@dick> In-Reply-To: <874jbycrd7.fsf@dick> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 22:26:28 +0100 Message-ID: <CALDnm51HWzo2+8ujwRqg_D78Qf42_5S24EjGDenjG+Duu7n6pg@HIDDEN> Subject: Re: bug#70036: a fix that To: dick <dick.r.chiang@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: theo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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, Apr 18, 2024 at 10:07=E2=80=AFPM dick <dick.r.chiang@HIDDEN> wro= te: > Speaking of dicks, you are one, and your code is always dogshit, so your > much heralded leavetaking of the emacs project can't come soon enough. My dear dick, you on the other hand, are such a lovely wonderful human bein= g who writes such great code and is so courageous.. Thank you for gracing me with your attention. Means a lot to me. Love xoxo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 20:22:03 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 16:22:02 2024 Received: from localhost ([127.0.0.1]:54429 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxYGe-00066r-7g for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 16:22:02 -0400 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]:46507) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxYGb-00065c-HP for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 16:21:58 -0400 Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-516db2214e6so1719774e87.1 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 13:21:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713471698; x=1714076498; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=bSb1r13+rIbUFqbDfC7peYuBWJPojkWlb1/fSe1UqzQ=; b=jgGQszrAv/4Ubbcwy8gmibcXSBFCqJVxw5ipPA5PxAgvPRThmWAZi0WzMPeUUclw9l VTDRgRhdz3neaWbj9Kqj3TCjZc0R6GYG1Q4gg9jiOtxIYJAeYc2PaTD3iVPVEo4tuULe 3HtlrYIZUb7HI5AKqQhNwVxGmWGiNEer1Xnlcl7R/lTtzD7Qj9aUvm8Q2Rj8mwkzNrta nDERw2nr2GQ8f9kPzSMEw2VbDk4l7Y745OZecxTEQ1FKYXIak/sszJs95s5NftP5qSmK zmDd1yFi815hGx0cje8INPmlEBz/BaOnZO3CI74fYsADoH//U4U6cD4DtcLA/WrtsoxP +VYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713471698; x=1714076498; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bSb1r13+rIbUFqbDfC7peYuBWJPojkWlb1/fSe1UqzQ=; b=dXlQv1CAUAS+A7s3MuYO6qt+mEOhYZ4rwEnRj3rk+5t5Jy6EoMm3EjEc1xbgYUlc6b x/JhBAJOPWwF+sa3N/Lex0pZ0eiJjjWHUk2bpecIsT4qRD6IahP/8ebUatd0NsYBTU5x DTMNRrNZYQ8db8oCCtIsb+CLAFFJaRXM5eZtE9+2k2h2/KC+AP73PBbcraBxD2/YWd6B 2MRygThq8yKW4sP/q2EEVEM2Ts2Bu5JXnzwqy5UBHpQzCvftnA+Gyj7dFg7monwJ2b4W nfnbfQ75SBtv3z8ShrsZWvSFbf+vj4k3GGYrH1aQe767Q/sDiatxFhRx+emqyU8Ckykm ARzw== X-Forwarded-Encrypted: i=1; AJvYcCWKU9EoBiv4o4Ogrn8TSUa1qZdaysf99pd8FBvfXORHXXRyTbeMieZUYAcgbcmfDZAeDhCFwiXd618LDrpxpZhXIqefvXs= X-Gm-Message-State: AOJu0YxCSMdNnst4oh8gvG9XV8WKZxCs/ZY9WEpxJyMA6cB69rhsUMqh YrBwtuzj6pT9YFZHUFnv9emTlU63QLm6t4jNEH75vR0Nd5qAKxOTjHb2X46hino2CMBbTQ08Dgb nsamfebpXdSf9UqxBMcQOiLQAJPg= X-Google-Smtp-Source: AGHT+IHbUgt73TQ3LXj/jADwgRbU1gn7H1jisD7tDlkhgdPCUNXTLH0tCatw2f+86mOnB3k3SjwvJSaaPY1PFwc1yIg= X-Received: by 2002:ac2:5b8d:0:b0:516:c099:e798 with SMTP id o13-20020ac25b8d000000b00516c099e798mr59845lfn.31.1713471697480; Thu, 18 Apr 2024 13:21:37 -0700 (PDT) MIME-Version: 1.0 References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> <86jzkud0be.fsf@HIDDEN> In-Reply-To: <86jzkud0be.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 21:21:25 +0100 Message-ID: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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, Apr 18, 2024 at 6:53=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote: > I suggest to get an objective opinion of that from an uninvolved > party. I suggest you drop your sarcasm not because it hurts me or anything but just because you're not very good at it. > > So let's skip the morals. > > No, let's not. Really, you want to go at it again? Well let me just add a pinch of salt to your typical condescension lecture, getting some facts straight about what happened here. * I had to take a long timeout from Eglot maintenance for personal reasons managed to get maintainers for Flymake and Jsonrpc, but I am still Eglot maintainer. * I notice some discussions going on and I let them proceed with little input. * I regain some capacity some months later, notice a user report on GitHub alerts that there are some very new things in Eglot that didn't ask for explicit greenlighting as was usual during the last 7 years I'm maintaining Eglot. Fair enough, life went on without me. * I post to Emacs-devel about these. I take care to thank everyone for their efforts. * One of the changes is Stefan Monnier's. It's broken, he fixes it immediately in the usual good spirits. * Another one of the changes is Theodor's. It's a good change and I highlight it as such, merely request a change to the doc. * The other change is also Theodor's. I commend it for its clarity and implementation, but ultimately notice a serious bug that affects me and anyone else working a super-common C/C++ servers and symlinks. * I go and read the full bug report and notice that Theodor has been "studying Eglots performance" and has come to the conclusion that there is a hotspot of performance problems. He posts in that email what to this time is the only actual hard data we have. That data suggests that file-truename is slow, and that Eglot uses it a lot in eglot--TextDocumentIdentifier. It doesn't suggest anything other than it, nothing about textDocument/publishDiagnostics. There's 0 data about that and it never showed up in my profile. * Theodor suggests rewriting file-truneame in C, you decline or raise doubts. I don't follow the reasons, but fair enough, the discussion pivots to changing Eglot. * I reproduce Theodor's experimental findings. * I find a patch to address that hotspot that is several times faster than Theodor's solution (doesn't really matter though). * I ask Theodor to revert the patch and start afresh. He understands but declines. * I weigh the pros and cons, especially the time I have to address this and other Eglot recent problems (tests are borked, have to see what happene= d) Since I am Eglot maintainer and revert it myself, just like I've reverted my and others own perfectly well-intentioned and laboriously crafted commits many times and it hurts a bit to do it, but not that much= . It's a no-brainer to revert something like this to me. There is so far very little hard evidence of the effect this is having on the general population, it's a very uncommon report. This code has been there for 7 years and while there have been performance bugs, this was never one of it. This is why I write "one-off" and "uncommon". Absolutely accurate. Ultimately, I see that very little testing has been done around = some rather obvious use cases of removing symlink-smarts from Eglot. The "my servers happen not to have this" just isn't an acceptable argument to me. Sure if Eglot had behaved like this all along from the beginning, displayin= g duplicated references in some servers, maybe it would be different, but that's a different world. Bottom line, Eglot worked correctly three weeks ago and now has a new bug introduced by a performance fix based on very little hard data, and a single very scarse report. It's a no brainer to revert. Still, for the very little data that there is available, I do take care to put in a much simpler fix that completely fixes the issue - as far as I or anyone reading the available data can see it. Your last question to Theodor on this thread before the change was merge good but the answer was completely misinterpreted. You ask if the servers resolve symlinks and Theodor answers this: > The LSP specification does not talk about symlinks. The > servers I used let the operating system resolve symlinks for them. Well, maybe at that point if one would have noticed that there are hundreds of servers arounds, this could have taken a different turn. > > I've told you I'm invested in fixing Theo's performance problems, > > but I must learn more about them obviously. But I'm not going to > > keep a regression in just to be nice to people. > > If -- and it's stil an "if" -- it was a regression, Did you not read my experiment with the three-file project and the clangd server? https://lists.gnu.org/archive/html/emacs-devel/2024-04/msg00350.html Is anything unclear? If you've seen it but don't believe my results maybe you should try Eglot yourself: seeing is believing, they say. > it was there for quite some time So was the supposed relevant performance problem. Only that time is measured in years and this is measured in weeks. > , so nothing serious would have happened if we'd leave > it there for a few more hours or days. And nothing serious will happen after I reverted it, will there? I have no interest in delaying a responsible decision just for the sake of appeasing feelings that someone else says are there. If Theodor is worried about a specific performance problem I have some time this week and the next one to help fix it, and I'm confident I will. For the record my repositories at $DAYJOB with very long path names _and_ very symlinks. So I'm personally interested in fixing any performance problems and not opening new ones. > > I'm sure Theo can understand that. > > He obviously felt hurt, so "understand" is not an appropriate word > here. I'm confident he will understand this, I can't be sure of course. But I know he wrote "could absolutely do that [revert]" though he preferred not to do it. That at least shows that it's not an absurd proposition. And _I_ understand that he doesn't want to, of course. I don't know if Theodor felt hurt, and even if I suspected something, I wouldn't write about it in public simply because I personally find it in poor taste to speculate or moralize about others people's feelings secondhand. I await Theo's reproducible experiment so that we can work on what's really important. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 17:54:10 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 13:54:09 2024 Received: from localhost ([127.0.0.1]:53729 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxVxZ-0008K1-2a for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:54:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56484) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxVxT-0008Hw-6V for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:54:07 -0400 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 1rxVx9-0007xa-PA; Thu, 18 Apr 2024 13:53:43 -0400 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=eh74/ZRCiOVG+XQzBXLJYrlzWNwyTXVWwpf9xnXfK20=; b=Rg4AkjD12aCZM6j9JIRr HZQv4eFM/LZEj02PEeiE0NjI2ka+k2sQx3dhd1OKZ3IjJd/f5EUjQ0tIRuVLjv6RlYGMDePxvYzFi Y0y32ANd7UxHBvNrJYfxfEtwgxuzwRaeoG57xVQ1eA6srlklDpVsFRkI1D1yYIEdCRoGheCxVOUqb y/WXwHndyGx1wWvyqkCmUmZn9I3O4BT5lafmjt0WoKIQkF57VRZ/So7X0CJrsuUDGE08iFucDg2ul obSJw+i+iYGSxV2R1OPNLWCuraWB+taTHnZxACLq1bbyQgM4C9nLmdkHGONWd6vUaeBSC0RwwtU1x iWdFHT81cQkrCg==; Date: Thu, 18 Apr 2024 20:53:41 +0300 Message-Id: <86jzkud0be.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 18:22:09 +0100) Subject: Re: bug#70036 a fix that References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Thu, 18 Apr 2024 18:22:09 +0100 > Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > On Thu, Apr 18, 2024 at 5:30 PM Eli Zaretskii <eliz@HIDDEN> wrote: > > > > > That's unfortunate. > > > > > > For you maybe. > > > > For me also. > > > > And please try to be kinder. Theo might have made a mistake (or not), > > but he is still a valued contributor, so please treat him with respect > > he deserves. > > I'm not being unkind at all. I suggest to get an objective opinion of that from an uninvolved party. > So let's skip the morals. No, let's not. Let's try being kind and cooperative and respectful to the work of others, exactly like you expect us to respect you and yours. > I've told you I'm invested in fixing Theo's performance problems, > but I must learn more about them obviously. But I'm not going to > keep a regression in just to be nice to people. If -- and it's stil an "if" -- it was a regression, it was there for quite some time, so nothing serious would have happened if we'd leave it there for a few more hours or days. > I'm sure Theo can understand that. He obviously felt hurt, so "understand" is not an appropriate word here. > He's done lots of useful contributions and will do more, but this > one was a mistake. We shall see. For now, I reserve my judgment until we see measurements.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 17:28:13 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 13:28:13 2024 Received: from localhost ([127.0.0.1]:53614 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxVYR-00054n-O3 for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:28:13 -0400 Received: from mail-lj1-x22d.google.com ([2a00:1450:4864:20::22d]:57847) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxVYQ-00053j-8Z for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:28:10 -0400 Received: by mail-lj1-x22d.google.com with SMTP id 38308e7fff4ca-2d8b4778f5fso11151581fa.3 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 10:27:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713461270; x=1714066070; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=CCP659ObvLw+FZEw5SXI4JJyr7brnTgJCjjPrdR7Dg0=; b=EtOXD7CmUzB9ElrZFsWJVdusBxXRcxU3Ku3shXYTPMj/Z6MUQYWnHeCKyQQYrzZ0qc rkqVlJyxOJ1tav4G2LT7gYclxC8QoeD70Dx7Ks97OnigNWpjo4Iy4v1SbMB4qnJyHW3M ZwhEqF+fbmWpDCE5NXfrMqt/CmMIet5xMUic3N+RLPXuiw4JE7IziOien5iOGm2943LU j9iQFT8TsvFri1O4/SvKglaZIv/iugmSTPY3zQL2n3U4FGiCeedKNpECLNs9j9TwmI7p YkMX6J3vqnOSIs9TzlzIbABQbTYD5iZXM+TRJWp9s5/7P0M0eo8d5MPwN/gH2g9LUcZY c1Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713461270; x=1714066070; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CCP659ObvLw+FZEw5SXI4JJyr7brnTgJCjjPrdR7Dg0=; b=ZzsHSwjb4sW3u5gcd6Tue62Os3sDWnp/KJQQK7kj7vRibif4USMVEGGMfhU9O8+wfU W53TBzMqhkBScjy5Go3jCwUIcTiYtQAJAjuyT3sHkmQz9ylkBrFTx2waaxaeaYl03wra KyreQxXE+sdAfIgvOzmvkhnfZL8Wr4uTazZGSu6pB/e/XfnbRQwtcpgjy9Dnlfq1v6Eh ZHI0IWfM9KQlVS/4TpbStLPXzsU6uhsLuRXqJyOUYPtX7YzJObHpdTkqAgLW+lDS1JRd lfjgiZeip5+LjHQXoH52sFPQdubc4iv+2R0UCcWKt8KSarE88Vr7WVl+Fr7fNJotZvzV 0mfQ== X-Forwarded-Encrypted: i=1; AJvYcCUC6l4SafKn6g5/wGhYdAdii3WNBxv87tgCom0O4yFNg+amnfbuF4yKiTu5QheseARDDkNepd9sq+m0XsKMZYUUytua1uc= X-Gm-Message-State: AOJu0Ywpf15TbXodWFe3mFN/9n8+8AzhHJYB0jyC4lqVS+3V+8aD9WqL Vr/B0VX0xKRENKes0wYYaUdCGlp+I2QbMx7DCw4Xsng93W8zm187Yotq3y8H5As1kt9FdjN46Hn bIcyX3OFAM//VpYPh84YoBzHOVbgcIdBl X-Google-Smtp-Source: AGHT+IEH2adtBSe6PzfYu/ZOF5BdrBwB4USAExiW2G16sYDTLg5jETM+C8V7C3B9Oi3Rhe4mfZP6msdsbcBHSOrIfxM= X-Received: by 2002:a05:651c:2203:b0:2da:562b:7aa6 with SMTP id y3-20020a05651c220300b002da562b7aa6mr2615418ljq.43.1713461270342; Thu, 18 Apr 2024 10:27:50 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> <86y19ad61t.fsf@HIDDEN> <CALDnm51TSR-_MhUyBTPgmfVGVbzBpQxkaC0weF1YG22fHAYyJQ@HIDDEN> <86sezid4gp.fsf@HIDDEN> In-Reply-To: <86sezid4gp.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 18:27:39 +0100 Message-ID: <CALDnm501k+BCut84dLQQiPpSUeYKuPuDHdhaOUYtvgrFkKg0DA@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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, Apr 18, 2024 at 5:24=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote: > If you timed this code with the likes of benchmark-run, please show > the timings. Profiles are not the best instrument for this kind of > decisions. I disagree completely, but whatever. It's microbenchmarks that are useless, because they don't have any context. But if you want some of these, here you go. I benchmarked eglot--TextDocumentIdentifier because that's the only reasonable thing I could gather from the profile. ;; before Theodor's patch (benchmark-run 10000 (eglot--TextDocumentIdentifier)) ;; (1.716975213 21 0.8623904230000008) ;; after Theodor's patch (benchmark-run 10000 (eglot--TextDocumentIdentifier)) ;; (0.651663934 11 0.46295383499999687) ;; after I reverted Theodor's patch and added my patch (benchmark-run 10000 (eglot--TextDocumentIdentifier)) ;; (0.000280462 0 0.0) yes, this is just reading a cached variable. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 17:27:21 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 13:27:21 2024 Received: from localhost ([127.0.0.1]:53607 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxVXb-0004y1-O7 for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:27:21 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:54410) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxVXX-0004wl-6Y for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:27:17 -0400 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2d895138ce6so16998221fa.0 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 10:27:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713461216; x=1714066016; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=9tQYFsgoXqRD5GHPUty2RsSEiSpRoorTmolt7y2Kxxs=; b=PDXMeh5aOhPcKfXN0VgKaArsslpz0qh4eNB3ZvHMtxMjQb7yMEzadsilmRpA0U8pyT io+0ViDvX1z6HSrdW2S7B73Q72bZG5gFX5oNdrsm23nLRF/MJSf2eVsxKPN/GQXtg7Dk 3iWv0Z6DX2cGIdWcWBIQfWfPk1kA+sMn0qFq7aytR0OFIw+hoxgVozKuhQ4V4Oq/8JuZ d93LnHtcTVa0AQL0Jb7aCaBwemVQIRDM9Ph9V2KyHUDdnW/yMrfvzOTIP714w0urErDX 1mZoWfDpOq24YpoGpOYiuDCOan+KqGMic1dOHJSRFDbjSlP/VdQH2JBO03ZKBMAGuiu8 uaYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713461216; x=1714066016; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9tQYFsgoXqRD5GHPUty2RsSEiSpRoorTmolt7y2Kxxs=; b=tr9THopdp4k+TtkbXq2NTAgZUuyRlSYiJK1JZIN9k05b3Aymdi2IuvdVYna98H+QMj O7gG4WfnjMOdAJD2g3o7vpUBD13FcK+B0O2SjlM01uqD8g3GySoWZ4ahH1vtypTmVKX1 EcCYVSpHcoZdaMDSna3+wx5kTvpLUr7KxKoOEYv+m1Vq6g2zahIrDGejTO+Ila4Iri3m CiHjNFmBMdPogD5mXs3SARZjftlA4ZN36eKOUpQVNxS4L7i4hmuayjMaH33zTvixYwnk KSFfS8pnwZ1+qvD86t/NxO+L29lnNM+Vo35ZFQ+diCtcuRkPmMq5KcltkvAC2ajZXwz2 mJpg== X-Forwarded-Encrypted: i=1; AJvYcCWz1hs6IeHMTdzOqTVzSob50MpB/2lJuYNRbRadXRS2iFoH3AGzjbh+uF0jOPo/ZE4JK/RUaieuAyimxef6Fjc1YjFFMI8= X-Gm-Message-State: AOJu0YyXePrBlBRpKBBHErrbz1VbZzssvO2MWYmsLRHW/dYOEO/EusFd 11Vx8BuqjowU5Ki/Um912Za63JiV7esWkvG0gUavr5y01PJGaH/0uO1MVL3DVttTN0pEuHjMRJO mPt6JaFzA1cDtf+UZd/OSIZZoD3Y= X-Google-Smtp-Source: AGHT+IErtWKxdESRoyp5cAm93pqR9x0BmCoLJQJmpjm01Q6cna8B0t8Mn65MTTbWb/Yi0vnwKM7j8By5ZQmUaZEC2s8= X-Received: by 2002:a2e:868b:0:b0:2d8:9487:7588 with SMTP id l11-20020a2e868b000000b002d894877588mr1953209lji.38.1713461215465; Thu, 18 Apr 2024 10:26:55 -0700 (PDT) MIME-Version: 1.0 References: <86sezid4gp.fsf@HIDDEN> <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN> In-Reply-To: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 18:26:44 +0100 Message-ID: <CALDnm51g18vj=UAmN+=7y-mZGAx-+zn33Q=2wy_rxrndwhcRPw@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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, Apr 18, 2024 at 5:33=E2=80=AFPM Theodor Thornhill <theo@HIDDEN= o> wrote: > I'll make a simple recipe this evening. It will require an lsp server ins= tall, likely, but I'll do my best to keep it contained. OK, but it would be preferable if this performance situation could be reproduced with any language server in a project of certain characteristics. So if you say this happens with a project with a very deep directory hierar= chy, it's ideal if you could describe a generic project so I can reproduce results with clangd, basedpyright, gopls, rust-analyzer or any easy-to-get server. jdtl= s is notoriously hard to install and get running, so I hope that's not the on= e you'll pick. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 17:22:44 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 13:22:44 2024 Received: from localhost ([127.0.0.1]:53581 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxVT9-0004P7-6z for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:22:44 -0400 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]:55694) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxVT6-0004O0-SR for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:22:41 -0400 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-51aa6a8e49aso533746e87.3 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 10:22:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713460941; x=1714065741; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=N8yMp6K71SJ9nH9rjo1U5aaV1KRMiwb0oWJmUA14un8=; b=itRTHJcY2ZiZN2deAJAm4omy/Ccob5uY8PYRNxvF3pun6hSUspvLETIS7HQJB+JBx2 8Fqu6PWL+bt/KUQArEabbn98JFq02+3EerncxyrDVud8MdodbAuaVeXE8K745KiWg0s0 cSMu/KdXzGpIJ6YYeZylTMu6fie2XnAkyplXoKIbPSnUWIufLBdlXNnbPLhnfuHh2Qnq lSC5ZNkvlHLlpRc0YJFbc34xR3+Aj8vX/ZdtAD/g2xzPH1YpscmBT7n38EuUih+2nGtr mXO/r1bVq7g6dgWVS5pqe5imtB079OmNBS4iyVQ5CZvblq7tj2EHvLOA7BJXM9OFTDSt P+VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713460941; x=1714065741; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N8yMp6K71SJ9nH9rjo1U5aaV1KRMiwb0oWJmUA14un8=; b=AXwUhHpB2SlMLBa5gngy19ai7LQxKmYopz7D+obTerH7PwPHYveJeDxV/L6lTvVdl0 EYHYbrxYDppKTvlUz0mN9E1OBAtqXZOf75TfVeccCnryY/XeA3dkIf/LIeMFjlCHM6sp sd2Cn+QtohU3G0EnmuVoGn/Hs0u8LYyfG2SmKjkbO1tX99t9WvmTRAd3kTqAZSFlpa+P cHmv3X3QGVRXm73SlaM6lDruP09xt5sLEuusfCa9t1Lo3PI5j2nBTyD0sbytA3si49dV KkS8AL0DyYR4l46hbgFuxCm0usdudZJJJVkmQSO4o32qO8anK4BlawN6C90jzD9enqhv aHVw== X-Forwarded-Encrypted: i=1; AJvYcCVo7yuBFKuzWMT40pFUGQ7MM103b2wdXl6efO33T6BqLl2sZl5XVLKtl0ranircogkY7QVzsvcQOBvHH++j8SXeGepo6cY= X-Gm-Message-State: AOJu0YzE2tS0P/oqElKLVqC1Xkopj9fgX8+S66KXi2BsdHhddeuySaYH 8YFBKTNCODCITV0Vf7hRfemts9myIyhpvBy4OYLy2XECkrXH3pRBcYy10tAQV4FfAtbtqDITOrN 61CdZ0wVblS4+XJjeCy5By7aBgMw= X-Google-Smtp-Source: AGHT+IE/nKBidnPTpGJjaCO3ATm/19RMDe2a4iJkkwi4S+UbTL+sMjUVFjP7Oh1zDYIywTTandZRp2j/zUX1MjgRaGE= X-Received: by 2002:a05:6512:51b:b0:519:33a5:973e with SMTP id o27-20020a056512051b00b0051933a5973emr1897658lfb.6.1713460940966; Thu, 18 Apr 2024 10:22:20 -0700 (PDT) MIME-Version: 1.0 References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> <86r0f2d46x.fsf@HIDDEN> In-Reply-To: <86r0f2d46x.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 18:22:09 +0100 Message-ID: <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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, Apr 18, 2024 at 5:30=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote: > > > That's unfortunate. > > > > For you maybe. > > For me also. > > And please try to be kinder. Theo might have made a mistake (or not), > but he is still a valued contributor, so please treat him with respect > he deserves. I'm not being unkind at all. So let's skip the morals. I've told you I'm invested in fixing Theo's performance problems, but I must learn more about them obviously. But I'm not going to keep a regression in just to be nice to people. I'm sure Theo can understand that. He's done lots of useful contributions and will do more, but this one was a mistake. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:37:15 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:37:14 2024 Received: from localhost ([127.0.0.1]:53392 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxUl7-0007Xw-1q for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:37:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58012) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxUl4-0007Wu-P7 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:37:11 -0400 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 1rxUkl-00031R-Pr; Thu, 18 Apr 2024 12:36:51 -0400 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=NydLgpo7JYoLx/wkQ0hm72+c8YLqd1rEmVf53YBAtBM=; b=e9I4WSw1uttWf6LvACL9 syu3zecFiexOozXH1Y8xcGnka+Eu3JOxi/j2VnPtXH2QzWuew47Hl2MICpNzwXb11qaBchwbyQ0vb 6E05kousysgHE44qeQpkO4cFjoVBDqjmwAuS5IZnTgbp3OBv06f3HH8OlPHMjJtZkJjhBDd+RYVx1 Ozck7VNOJxQvWZF4Z3FPJ+CTwyUObf9v9VRzW9lS0tbgwGd77vtX3YpN6EBS/Yc96KVAfiLlXRpng wwnk2sse5yxB7c8r1VjANIfZBIOxr3mWBeLW5M0mLgCFGbmXCSi5iQOd9tXrh0R7ksyVcJTslPWeJ WaplWcLBqty+NQ==; Date: Thu, 18 Apr 2024 19:36:49 +0300 Message-Id: <86o7a6d3vi.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> In-Reply-To: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN> (message from Theodor Thornhill on Thu, 18 Apr 2024 18:33:36 +0200) Subject: Re: bug#70036 a fix that References: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@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: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@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 (---) > Date: Thu, 18 Apr 2024 18:33:36 +0200 > From: Theodor Thornhill <theo@HIDDEN> > Cc: João Távora <joaotavora@HIDDEN>, > felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > I'll make a simple recipe this evening. It will require an lsp server install, likely, but I'll do my best to keep it > contained. Thanks, comparative timings are the best means to judging our possibilities.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:34:04 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:34:04 2024 Received: from localhost ([127.0.0.1]:53374 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxUi2-0007BQ-Qk for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:34:04 -0400 Received: from out-182.mta0.migadu.com ([2001:41d0:1004:224b::b6]:32366) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxUhz-0007AD-5U for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:34:00 -0400 Date: Thu, 18 Apr 2024 18:33:36 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713458018; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to; bh=PPyvb5IfdyMSoqdYDhffc3F3ZQa9W6F1MquIHGVuiSg=; b=Aw8qxAziP204VvsF3oWE6uy/RHhIPoa08lyWH5ATdkcfMatHVcvZg3b/XUQLUWH4PjYX06 ji8vdB6vssikHIx9OGy/GppQLo3frWEEFa9/ozwCc+5WPnRXIQyWZAsCQxQuj/drbYy4EG vi7BSNlXpVjPZbd4QvU2gnhDOHhbLzc77FIxssboooAVUr5eEef8Mo13dl44f/Zx4O4BAe EKIadDz+ToHROdn6GyxgLF5KBK/mk+7FmzFPj+VNF0v4JSwClAMisILKzpjppgfU765L2t mrpO0bqwUwjR6gMwv8EuVlKbmKDsmLnDL6HX9uOPiGJSG4On1MAWyGguuPgTMg== Subject: Re: bug#70036 a fix that Message-ID: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN> X-Android-Message-ID: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN> In-Reply-To: <86sezid4gp.fsf@HIDDEN> X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Importance: Normal X-Priority: 3 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= <joaotavora@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.3 (/) PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRp diBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIEFwciAxOCwgMjAyNCAxODoyNCwgRWxpIFphcmV0c2tp aSAmbHQ7ZWxpekBnbnUub3JnJmd0OyB3cm90ZTo8YnIgdHlwZT0iYXR0cmlidXRpb24iPjxibG9j a3F1b3RlIGNsYXNzPSJxdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0 OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxwIGRpcj0ibHRyIj4mZ3Q7IEZyb206 IEpvw6NvIFTDoXZvcmEgJmx0O2pvYW90YXZvcmFAZ21haWwuY29tJmd0Owo8YnI+CiZndDsgRGF0 ZTogVGh1LCAxOCBBcHIgMjAyNCAxNzoxMjozNCArMDEwMAo8YnI+CiZndDsgQ2M6IHRoZW9AdGhv cm5oaWxsLm5vLCBmZWxpY2lhbi5uZW1ldGhAZ21haWwuY29tLCA3MDAzNkBkZWJidWdzLmdudS5v cmcKPGJyPgomZ3Q7IAo8YnI+CiZndDsgJmd0OyBQcm9maWxlcyBjYW4gbWlzbGVhZCBhbmQgdGhl eSBjYW4gbGllLgo8YnI+CiZndDsgCjxicj4KJmd0OyBUaGVvJ3MgcHJvZmlsZXMgYXR0YWNoZWQg dG8gdGhpcyBpc3N1ZSB3ZXJlIHRoZSBiZXN0IEkgY291bGQgZmluZC4KPGJyPgomZ3Q7IElmIHRo ZSBtYW5uZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGNvbGxlY3RlZCB3YXMgZW5vdWdoIHRvIG1ha2Ug YQo8YnI+CiZndDsgZGVjaXNpb24gaW4gYSBjZXJ0YWlud2F5LCB0aGV5IHNob3VsZCBiZSBnb29k IGVub3VnaCB0byBtYWtlIGEgZGVjaXNpb24KPGJyPgomZ3Q7IGluIGFub3RoZXIgd2F5Lgo8YnI+ CiZndDsgCjxicj4KJmd0OyBCdXQgSSBmdWxseSBhZ3JlZSB3ZSBzaG91bGQgaGF2ZSBhIG1vcmUg Y29uc3RyYWluZWQgdGVzdCBjYXNlLgo8YnI+CiZndDsgCjxicj4KJmd0OyAmZ3Q7IEl0IGlzIG11 Y2ggZWFzaWVyIHRvIHRpbWUgdGhlCjxicj4KJmd0OyAmZ3Q7IG9sZCBhbmQgdGhlIG5ldyBjb2Rl IGRvaW5nIHRoZSBzYW1lIGpvYnMsIGFuZCBjb21wYXJlIHRoZSB0aW1lcy4KPGJyPgomZ3Q7IAo8 YnI+CiZndDsgU28uLi4gdGhhdCdzIHdoYXQgSSBkaWQuCjxicj4KCjxicj4KSWYgeW91IHRpbWVk IHRoaXMgY29kZSB3aXRoIHRoZSBsaWtlcyBvZiBiZW5jaG1hcmstcnVuLCBwbGVhc2Ugc2hvdwo8 YnI+CnRoZSB0aW1pbmdzLiZuYnNwOyBQcm9maWxlcyBhcmUgbm90IHRoZSBiZXN0IGluc3RydW1l bnQgZm9yIHRoaXMga2luZCBvZgo8YnI+CmRlY2lzaW9ucy4KPGJyPgoKPGJyPgomZ3Q7IERvIHlv dSBoYXZlIGEgY29uY3JldGUgaWRlYSBvZiB3aGF0IHRoaXMgImpvYiIgaXM/Cjxicj4KCjxicj4K Tm8sIHNvcnJ5LiZuYnNwOyBJZiBub3RoaW5nIGVsc2UgY29tZXMgdG8gbWluZCwgSSB0aGluayBU aGVvIGhhZCBzdWNoIGEKPGJyPgpzY2VuYXJpby4KPGJyPgoKPGJyPgomZ3Q7IE9mIGNvdXJzZS4m bmJzcDsgTGV0J3MgaGF2ZSBUaGVvIGRvIHRoaXMgY29tcGFyaXNvbiBhbmQgcGVyaGFwcyBkZXNj cmliZQo8YnI+CiZndDsgaW4gbW9yZSBkZXRhaWwgdGhlIGNvbmRpdGlvbnMgaW4gd2hpY2ggaGUg Y29sbGVjdGVkIGhpcyBwcm9maWxlcwo8YnI+Cgo8YnI+ClN1cmUsIGl0IGRvZXNuJ3QgbWF0dGVy IHdobyBkb2VzIHRoZSBtZWFzdXJlbWVudHMsIGFzIGxvbmcgYXMgd2UgaGF2ZQo8YnI+CnRoZW0u Cjxicj4KPC9wPgo8L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkknbGwgbWFrZSBhIHNpbXBsZSByZWNpcGUgdGhpcyBl dmVuaW5nLiBJdCB3aWxsIHJlcXVpcmUgYW4gbHNwIHNlcnZlciBpbnN0YWxsLCBsaWtlbHksIGJ1 dCBJJ2xsIGRvIG15IGJlc3QgdG8ga2VlcCBpdCBjb250YWluZWQuPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPlRoZW88L2Rpdj48L2Rpdj4=
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:30:23 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:30:23 2024 Received: from localhost ([127.0.0.1]:53356 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxUeV-0006lQ-3k for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:30:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34978) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxUeR-0006kP-Vn for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:30:21 -0400 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 1rxUe8-0001Sh-G4; Thu, 18 Apr 2024 12:30:00 -0400 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=jN3h4KprQRAVrB3lTs4xPWc749ju68cY3dM1rh1odEo=; b=n87z5tzREcxANBSFMLlZ JIlvx4UkFwI1vLXuX3Z+0SkonAhrNQMpm+FoTxRfXhz66v3CGDkJpQ0qyeY4qcXwhmu/0z4oxZQVu JSO581MTKq3PUD6NFkV23pKvMQf7JTE2mqI65ILTQB5okLOaHE5KstyzFU5LD4CrW3dL70k7Vw0u4 3MJDcLRkBFhLSVqD76D9XzcOiB1rGViSOO3+JBaTCdBv6qmC5MWoW18YzlQ5RQ8ZRId6yNrd+3DmX aBNKE7ZjCXAUggshZ4ft+SdGetmFCSDCtvUt5KJp6UrHQo9/qLm8gI4g2zbjOCbStxCtBuUb8Z90g AQqcVwKOVzFMGQ==; Date: Thu, 18 Apr 2024 19:29:58 +0300 Message-Id: <86r0f2d46x.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 17:15:52 +0100) Subject: Re: bug#70036 a fix that References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Thu, 18 Apr 2024 17:15:52 +0100 > Cc: Eli Zaretskii <eliz@HIDDEN>, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > On Thu, Apr 18, 2024 at 5:11 PM Theodor Thornhill <theo@HIDDEN> wrote: > > > > Profiles can mislead and they can lie. It is much easier to time the > > > old and the new code doing the same jobs, and compare the times. > > > > > >> If so, I think this simpler patch after my sig is all we need, as it > > >> completely clears the profile of any "file-truename". I have reverted > > >> the earlier patch and pushed a patch very similar to the one after my sig. > > > > That's unfortunate. > > For you maybe. For me also. And please try to be kinder. Theo might have made a mistake (or not), but he is still a valued contributor, so please treat him with respect he deserves. > From my standpoint noone else besides you has complained about these > problems, and I am still Eglot maintainer and must protect against > regressions. Yes, but that doesn't mean you should rush to revert others' changes while the discussion is still on-going and the conclusions are not yet in sight. Please don't, it hurts people and makes them less willing to contribute. No catastrophe would have happened if you waited for a while before making the changes.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:25:04 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:25:04 2024 Received: from localhost ([127.0.0.1]:53331 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxUZL-0006A3-8H for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:25:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49478) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxUZI-000695-AC for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:25:01 -0400 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 1rxUYx-0000kn-Kx; Thu, 18 Apr 2024 12:24:40 -0400 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=LJoZY2gJBoFzVR05QuK7Wu+ZARh0QumHtX1xTLDgDv0=; b=j63JScZX4X90/P7rWV/f zdYvtKSSB/UBEll0IWbC14orgzlQ5edWuFfUdOXknbvFpy86aiOZa0D+KHa5RjyyUQ5fTbOTmGAHL FZtDpSww4lb9SlcVw3xbvbRQyW4GN0rqdA15VSlGfn1ykFIQsUvQblnXgrDdTs8V8tM58Irsim971 i3Atnm01YusZEhuBPW2aQoGad7Wx7zmdn2ftwSXpOKGuDZo75wde0l7Jf1j4SgJPN9GYxtiPk3xJM Jm1KrKTNWVYa4dQtdnfRIXdH5mcqclLQQT4tpBmGT4t7Ne7mpmJc1uMXCy/ATC5UhYMm7C+AIpVqF gszS16ksL4OTGQ==; Date: Thu, 18 Apr 2024 19:24:06 +0300 Message-Id: <86sezid4gp.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm51TSR-_MhUyBTPgmfVGVbzBpQxkaC0weF1YG22fHAYyJQ@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 17:12:34 +0100) Subject: Re: bug#70036 a fix that References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> <86y19ad61t.fsf@HIDDEN> <CALDnm51TSR-_MhUyBTPgmfVGVbzBpQxkaC0weF1YG22fHAYyJQ@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Thu, 18 Apr 2024 17:12:34 +0100 > Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > > Profiles can mislead and they can lie. > > Theo's profiles attached to this issue were the best I could find. > If the manner in which they were collected was enough to make a > decision in a certainway, they should be good enough to make a decision > in another way. > > But I fully agree we should have a more constrained test case. > > > It is much easier to time the > > old and the new code doing the same jobs, and compare the times. > > So... that's what I did. If you timed this code with the likes of benchmark-run, please show the timings. Profiles are not the best instrument for this kind of decisions. > Do you have a concrete idea of what this "job" is? No, sorry. If nothing else comes to mind, I think Theo had such a scenario. > Of course. Let's have Theo do this comparison and perhaps describe > in more detail the conditions in which he collected his profiles Sure, it doesn't matter who does the measurements, as long as we have them.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:22:05 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:22:04 2024 Received: from localhost ([127.0.0.1]:53307 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxUWS-0005oq-IO for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:22:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54970) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxUWP-0005nh-D3 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:22:02 -0400 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 1rxUW6-0000Nr-2c; Thu, 18 Apr 2024 12:21:42 -0400 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=kASUMv4ukYP0onJxhImYdKwW4hZXi4/PfidvmZuJcK0=; b=aEhUfRvF9FHvKeHStX7i e13TE5UiqDIGl0heg+gfVHzcgPVIyhqUh567OpfPLFJ/nEmM1Ox1slrFU8ZXZXjlfhoWe6Yq85RhL +NDbtXjL+9KOVbZFJIPxJHw0Cj2te9YSgyZVgHlzxB8H7JDhrJVyf+v/Ygj+lTGIR9UPmk/7YkL37 FhagGdHd3IR/QsLogeSFBdV0vkAdWKFydQfhYdPIxaxZCwsNCUHZEidnVAb/zDMdzLw0bCmgbzHo4 7mGFGIieDsi0KDGCo/J4MK0SnYxyDdYE7TWKEd2VszXROo5bOsqo00qzVL4qWdpjPFBE/p4VhXrUs 2rEIE0NN8TMtXQ==; Date: Thu, 18 Apr 2024 19:21:39 +0300 Message-Id: <86ttjyd4ks.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> In-Reply-To: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> (message from Theodor Thornhill on Thu, 18 Apr 2024 18:11:36 +0200) Subject: Re: bug#70036 a fix that References: <43de4151-ab68-4214-8691-33f3554feba1@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: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@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 (---) > Date: Thu, 18 Apr 2024 18:11:36 +0200 > From: Theodor Thornhill <theo@HIDDEN> > Cc: João Távora <joaotavora@HIDDEN>, > felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org > > >> If so, I think this simpler patch after my sig is all we need, as it > >> completely clears the profile of any "file-truename". I have reverted > >> the earlier patch and pushed a patch very similar to the one after my sig. > > That's unfortunate. > > > > > This new code should also be timed and compared to the other two > > versions, before we make the final decision on this. > > > This is a very unfortunate change. This completely misses the point and > reverts any perf gains from my previous patch... I think your > conclusions are too quick, and actions likewise. > > I'd argue that long paths are a way more common occurrence than > symlinking, and the places you touched in your "better way" ignores the > performance critical parts. Please show timing data which compares the possible variants. We must have quantitative data to have a firm basis for this discussion. I don't yet have an opinion what we should do about this issue, and I cannot form an opinion unless I see some real-life measurements. I asked João to present such measurements as well.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:16:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:16:28 2024 Received: from localhost ([127.0.0.1]:53281 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxUR0-0005CS-Mj for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:16:28 -0400 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]:42246) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxUQx-0005BC-H4 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:16:25 -0400 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2da0f8f7b24so12655901fa.1 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 09:16:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713456964; x=1714061764; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=yOGwPyChjevDXlISv2VPiy2juIj6ZB7GJnB0csU1E6Y=; b=i+VY8VXTubCTjV6vSysUXkJf/+MZi5ur0s2ox09PUfxrK0AAbmK7J2k2SFdn1Uwk8r 4N8ibd7vo3R6t2N7Bd/vDPGF5nrrEzBb2emGo4aKli3/2cmwwULO16+gvpomfg1kcPlB eIK4MSXgpyIvppOImbYmyjnU69AdUDiTxFMaWtxU1Xu3Wl7xf/WMFkEiMkOPWLMkY1Dz FiW2aMlRJ1Z3jXhKyuja4WCH0Yj9Gf/3fFFyLgchNgB2etYA4f+D/RnN5Ii+Bxjg9r8f T7C58u9OfQ2M5JaMZb/hFyuNJ1/AfV47UYEY3YN1JLedJBHhd9zkv3xFRB2jgo/lAfNm OCrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713456964; x=1714061764; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yOGwPyChjevDXlISv2VPiy2juIj6ZB7GJnB0csU1E6Y=; b=WbuhDYNq1bJ6JI8FxZfi4yCexm80g5xl8shJY7CoeWNV42Vda3ET4jxHMOmcaKmaYp us4RXQ/Eo8pUMrehYDosoRT8grnJXcCVYy/9O2vJXlfHatT7wwrVWNmM0JjHhu8x72FG fqCzwYrkhVTZYny1MKFM1CUIWWmbblgbgNjhT67bup8/Vn2rvc6Nt+k5M0sY9GrQHyYk XbPB54+9g4EcmUopkd7tf74jyHIQIes5hpMJXCxgNj3iuN9PCiHSXENonWPFB5zK+qkZ C+tkAvXtAk9B/ybgG/KLnMFoHyfVSHwccKIf4qVhOb/MGjuU2Ja3iQRHV0futGvo7oII MZ1A== X-Forwarded-Encrypted: i=1; AJvYcCV7ySZM8um3eb8+Kqbeq1vH8hPItRS16AN2m8AFFwNXOEnZJZOYiKpBuYTToagCF96fXnMj6k+wK9eGHKbNnkUtDjbLLtQ= X-Gm-Message-State: AOJu0Yxz9PXFwLknPZzBiBX/8pWNVOgHoxZLebfYEYBpsdUkirEZwVGI 6IVTZ0gBWQM5kafuIcCnDVaHPxqtBrljywQaz1YeBL73tn75/BIsErbSeZJesV4FKevpTuJMsr8 QGDRpzEkx/YrxFPBgy4cbWC3zHUc= X-Google-Smtp-Source: AGHT+IEBOOTbd7lnzSb8KBRCh6CKcxZTZ8bq8UlXFyg7jmOgw18d5eqmHaznxYHkCrP9zDv2IatZDx502Zrjg4NOXbA= X-Received: by 2002:a2e:b0d0:0:b0:2d6:f8d7:ab95 with SMTP id g16-20020a2eb0d0000000b002d6f8d7ab95mr773666ljl.21.1713456963735; Thu, 18 Apr 2024 09:16:03 -0700 (PDT) MIME-Version: 1.0 References: <86y19ad61t.fsf@HIDDEN> <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> In-Reply-To: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 17:15:52 +0100 Message-ID: <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, felician.nemeth@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, Apr 18, 2024 at 5:11=E2=80=AFPM Theodor Thornhill <theo@HIDDEN= o> wrote: > > Profiles can mislead and they can lie. It is much easier to time the > > old and the new code doing the same jobs, and compare the times. > > > >> If so, I think this simpler patch after my sig is all we need, as it > >> completely clears the profile of any "file-truename". I have reverte= d > >> the earlier patch and pushed a patch very similar to the one after my= sig. > > That's unfortunate. For you maybe. From my standpoint noone else besides you has complained about these problems, and I am still Eglot maintainer and must protect against regressions. > > This new code should also be timed and compared to the other two > > versions, before we make the final decision on this. > > This is a very unfortunate change. This completely misses the point and > reverts any perf gains from my previous patch... I think your > conclusions are too quick, and actions likewise. > > I'd argue that long paths are a way more common occurrence than > symlinking, and the places you touched in your "better way" ignores the > performance critical parts. > > The function you are suggesting isn't the hotspot. Most notable > publishDiagnostics is, which now is killed again. Then you should publish details for a reproducible experiment and we can take it from there. The experiments I ran were the ones I could gather from a reading of your profiles. The patch I used was very effective in solving the performance effects. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:13:11 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:13:11 2024 Received: from localhost ([127.0.0.1]:53260 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxUNp-0004oa-DF for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:13:10 -0400 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]:44364) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxUNm-0004nI-GD for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:13:07 -0400 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-516d3776334so1247079e87.1 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 09:12:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713456767; x=1714061567; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=lnHSRGSxl0tTNixux9stkcM18PxshHbVbs8DfZzPUy0=; b=aAJP91O09gATWVltBUBoU62z0+OZES/Q6IaqGbeXnnF9JekqrFmKdWrxtY2V5xaFfn SNXPLbFGjdxq5JDEhfO3aG4znDy9T3wmo6LlDEAfeqkdGIS7mxvcM7qD9XofEYIO9sTF 1bUNLg+kAUulvL9IUozOiiKsIlievUlGrx5bkDz15agDL6kX++oJiiYx7UuKIdrRe2Du 56ofhGLC7BzoB46Qm+i74tdeWtRNWP9UpSiUcefkd6tbZPnbIDuRuoAnWpUpUAvh6PE7 u0HUpJwRNe5qdw7gXD7CRkY43dMUltf8GjJ7izjHMISia8Nn55Vjj9+PmG6K8Hf8bnNO vG6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713456767; x=1714061567; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lnHSRGSxl0tTNixux9stkcM18PxshHbVbs8DfZzPUy0=; b=ZVmQlF+/w63JP8SMV+rVdaeJBGEtdZggEoQzGntps9BuKIbGJywJbiZir25LVgY0KL QaVK2g238y6sERLd8SN6HLMQMdqgiQEdaQ2eD3fpLE3H1eIvynEkbui1nC7gfRJ6AplL Gky6gqpiEDOyOxSb+HqARLnn/k+LP4rC4neF3/EbF23MUtpps+WqQuD+sVx8kct6ZWRy RFsDK7fgV7ucL0Y9Zuz1O5A16wLDkWqmEykyrJIapx8ewqTqGXpspMNk7gi6nAq+UIqG 6A+x2VJjIiHjGBCNJzeFfZGxtSdVzowLMO969sall0OjMOBgVjbuHlP9XirsYycISALJ Ml6w== X-Forwarded-Encrypted: i=1; AJvYcCUg/ElPpna5FNWgONRtkviH72Fs0c9Vn2wy7EF553Ep2Bs3DQ0Jdc8Vuk3CUtzqg9KylNL1+/1GGYOxi53amNnTQusJpxk= X-Gm-Message-State: AOJu0YzuMOeDGD6i6FJ28nhZznSWXSL/uAktYt5gIyBxmcV/aCcs2iHT uIoCByue/1sC2td6yBg8l46G63igCbomHl1NypKuRBIYzEasoFpahpuD4j1LRRocKGq/lByb4av ngy05TUGEhGB53zkeANNwJ8ngfcw= X-Google-Smtp-Source: AGHT+IEFh5dmE/Z4TE7trARY8FQVXS9wZEY0Kqltse8Tmfxk6vkmgmQwoeiwpv3cgTumPC+IOGJdE7QHVp1+GQ8nDMI= X-Received: by 2002:ac2:4256:0:b0:51a:62ad:461f with SMTP id m22-20020ac24256000000b0051a62ad461fmr822588lfl.12.1713456766556; Thu, 18 Apr 2024 09:12:46 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> <86y19ad61t.fsf@HIDDEN> In-Reply-To: <86y19ad61t.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 17:12:34 +0100 Message-ID: <CALDnm51TSR-_MhUyBTPgmfVGVbzBpQxkaC0weF1YG22fHAYyJQ@HIDDEN> Subject: Re: bug#70036 a fix that To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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, Apr 18, 2024 at 4:49=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote: > > > From: Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> > > Date: Thu, 18 Apr 2024 16:32:33 +0100 > > Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org > > > > So I've read up on the bug report and I had a close look at the Eglot > > usage profiles (not the micro-benchmarks, those are reasonably > > irrelevant in what concerns Eglot). I see these kinds of things in > > Theodor's profiles > > > > 18 8% - eglot--TextDocumentPositionParams > > 18 8% - eglot--TextDocumentIdentifier > > 18 8% - eglot--path-to-uri > > 15 7% - file-truename > > 14 6% - file-truename > > 14 6% - file-truename > > 11 5% - file-truename > > 11 5% - file-truename > > 11 5% - file-truename > > 10 4% - file-truename > > 10 4% - file-truename > > 8 3% - file-truename > > 8 3% - file-truename > > 8 3% - file-truename > > 5 2% - file-truename > > 3 1% - file-truename > > 2 0% - file-truename > > 1 0% file-truename > > > > > > I could reproduce this, but never even close to the amount of ~7-8%. > > Best I could get was 1% and I had to work pretty hard for it. If I > > invoke completion or something heavier like that, it completely > > dominates the profile. > > > > 25 1% - eglot--TextDocumentPositionParams > > 23 1% - eglot--TextDocumentIdentifier > > 23 1% - eglot-path-to-uri > > 13 0% - file-truename > > 13 0% - file-truename > > 13 0% - file-truename > > 13 0% file-truename > > > > Maybe that's because file-truename is a recursive function that becomes > > slower as the path it's asked to analyse becomes longer (obviously, > > there can be a symlink at every junction). > > Profiles can mislead and they can lie. Theo's profiles attached to this issue were the best I could find. If the manner in which they were collected was enough to make a decision in a certainway, they should be good enough to make a decision in another way. But I fully agree we should have a more constrained test case. > It is much easier to time the > old and the new code doing the same jobs, and compare the times. So... that's what I did. As I wrote, I first reproduced (a fraction of) Theo's findings with the old code (before his patch). Then in the latest master his patch, added my new patch, and verified that the newest code no longer reproduces those findings. Do you have a concrete idea of what this "job" is? I could only gather a moderately useful idea from Theo's profiles, but it wasn't vague by any means. It seems his "timer-event-handler" which is usually doing the work for Eglot's at-point documentation job, is spending about a quarter of its time in file-truename. That's typical when just browsing code with the cursor and reading documentation. > > If so, I think this simpler patch after my sig is all we need, as it > > completely clears the profile of any "file-truename". I have reverted > > the earlier patch and pushed a patch very similar to the one after my s= ig. > > This new code should also be timed and compared to the other two > versions, before we make the final decision on this. Of course. Let's have Theo do this comparison and perhaps describe in more detail the conditions in which he collected his profiles
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:12:06 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:12:06 2024 Received: from localhost ([127.0.0.1]:53253 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxUMm-0004gs-9H for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:12:06 -0400 Received: from out-184.mta0.migadu.com ([2001:41d0:1004:224b::b8]:35550) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rxUMj-0004fe-VY for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:12:02 -0400 Date: Thu, 18 Apr 2024 18:11:36 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1713456701; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to; bh=h+lPC5xsVRxQvADEODA7MGGCnCKkD45OLT5khrq8T2w=; b=t24P2wbHPnkuuHPvTVSdyYrHllxGyz38jDHTtEboS0aQmxyxt5n23LYV5ifHO5fehmx5K4 WSXj/taO3jM7XjzHNsfePEeatojX8Jfbp1PpEywYkGtU54+fnd9cIEkdZUk0bwbi7o6Q00 NXFhz2mXNHHsMa5zmcarTGGQBooMgToTKTK+A9+YbPhveisI2TaoOlA5qZjYDjTducw+xG cgYKXXRX+XhGx8bH2X5/zbTM0wLh8wFZKS2OhfYhI1Wo2WQsskX5FE3J+9uFcC5EreOpsm ozDuKEkAKTncs0uHCvGeN9wcLEL7KEdXTO/NsVdI2wCXS2hrTL5+hbQlKDp0Og== Subject: Re: bug#70036 a fix that Message-ID: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> X-Android-Message-ID: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> In-Reply-To: <86y19ad61t.fsf@HIDDEN> X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Importance: Normal X-Priority: 3 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= <joaotavora@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.3 (/) PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwO0VsaSBaYXJldHNraWkgJmx0O2VsaXpAZ251 Lm9yZyZndDsgd3JpdGVzOjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZn dDsmZ3Q7IEZyb206IEpvw6NvIFTDoXZvcmEgJmx0O2pvYW90YXZvcmFAZ21haWwuY29tJmd0Ozwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IERh dGU6IFRodSwgMTggQXByIDIwMjQgMTY6MzI6MzMgKzAxMDA8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyBDYzogRWxpIFphcmV0c2tpaSAmbHQ7 ZWxpekBnbnUub3JnJmd0OywgNzAwMzZAZGViYnVncy5nbnUub3JnPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDs8L2Rpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyBTbyBJJ3ZlIHJlYWQg dXAgb24gdGhlIGJ1ZyByZXBvcnQgYW5kIEkgaGFkIGEgY2xvc2UgbG9vayBhdCB0aGUgRWdsb3Q8 L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyB1 c2FnZSBwcm9maWxlcyAobm90IHRoZSBtaWNyby1iZW5jaG1hcmtzLCB0aG9zZSBhcmUgcmVhc29u YWJseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsm Z3Q7IGlycmVsZXZhbnQgaW4gd2hhdCBjb25jZXJucyBFZ2xvdCkuJm5ic3A7IEkgc2VlIHRoZXNl IGtpbmRzIG9mIHRoaW5ncyBpbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyZndDsmZ3Q7IFRoZW9kb3IncyBwcm9maWxlczwvZGl2PjxkaXYgY2xhc3M9Imdt YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7PC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzE4Jm5ic3A7ICZuYnNwOzglJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGVnbG90LS1UZXh0RG9jdW1lbnRQb3NpdGlvblBh cmFtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsm Z3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxOCZuYnNwOyAmbmJz cDs4JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZWdsb3QtLVRl eHREb2N1bWVudElkZW50aWZpZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh dXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7MTgmbmJzcDsgJm5ic3A7OCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDstIGVnbG90LS1wYXRoLXRvLXVyaTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4 dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsxNSZuYnNwOyAmbmJzcDs3JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJn bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTQmbmJzcDsgJm5ic3A7NiUmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzE0Jm5ic3A7ICZuYnNwOzYlJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUt dHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsm Z3Q7Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTEmbmJzcDsg Jm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsxMSZuYnNwOyAmbmJzcDs1JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxMSZuYnNwOyAmbmJzcDs1JSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsxMCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2 IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTAmbmJzcDsgJm5ic3A7NCUmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyA4Jm5ic3A7ICZuYnNwOzMlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5h bWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0 OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDgmbmJzcDsgJm5ic3A7 MyUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgOCZuYnNwOyAmbmJzcDszJSZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgNSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgMyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZp bGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz cDsmZ3Q7Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDImbmJz cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxl LXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7 Jmd0OyZndDsmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxJm5ic3A7 ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg ZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOyZndDsmZ3Q7Jm5ic3A7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0 byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyBJIGNvdWxkIHJlcHJvZHVjZSB0aGlzLCBidXQgbmV2ZXIg ZXZlbiBjbG9zZSB0byB0aGUgYW1vdW50IG9mIH43LTglLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IEJlc3QgSSBjb3VsZCBnZXQgd2FzIDEl IGFuZCBJIGhhZCB0byB3b3JrIHByZXR0eSBoYXJkIGZvciBpdC4mbmJzcDsgSWYgSTwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IGludm9rZSBj b21wbGV0aW9uIG9yIHNvbWV0aGluZyBoZWF2aWVyIGxpa2UgdGhhdCwgaXQgY29tcGxldGVseTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IGRv bWluYXRlcyB0aGUgcHJvZmlsZS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh dXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsyNSZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDstIGVnbG90LS1UZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtczwvZGl2PjxkaXYgY2xhc3M9Imdt YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsyMyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcjwvZGl2PjxkaXYg Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyMyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBlZ2xvdC1wYXRoLXRvLXVyaTwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxMyZuYnNwOyAmbmJzcDswJSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxMyZuYnNwOyAmbmJzcDswJSZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwv ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxMyZuYnNwOyAmbmJzcDswJSZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1 ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7 Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTMmbmJzcDsgJm5i c3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO2ZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh IiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IE1heWJlIHRoYXQncyBiZWNhdXNlIGZpbGUtdHJ1 ZW5hbWUgaXMgYSByZWN1cnNpdmUgZnVuY3Rpb24gdGhhdCBiZWNvbWVzPC9kaXY+PGRpdiBjbGFz cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsgc2xvd2VyIGFzIHRoZSBw YXRoIGl0J3MgYXNrZWQgdG8gYW5hbHlzZSBiZWNvbWVzIGxvbmdlciAob2J2aW91c2x5LDwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IHRoZXJl IGNhbiBiZSBhIHN5bWxpbmsgYXQgZXZlcnkganVuY3Rpb24pLjwvZGl2PjxkaXYgY2xhc3M9Imdt YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7IFByb2ZpbGVzIGNhbiBtaXNsZWFkIGFuZCB0aGV5 IGNhbiBsaWUuJm5ic3A7IEl0IGlzIG11Y2ggZWFzaWVyIHRvIHRpbWUgdGhlPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyBvbGQgYW5kIHRoZSBuZXcg Y29kZSBkb2luZyB0aGUgc2FtZSBqb2JzLCBhbmQgY29tcGFyZSB0aGUgdGltZXMuPC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OzwvZGl2PjxkaXYgY2xh c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IElmIHNvLCBJIHRoaW5r IHRoaXMgc2ltcGxlciBwYXRjaCBhZnRlciBteSBzaWcgaXMgYWxsIHdlIG5lZWQsIGFzIGl0PC9k aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsgY29t cGxldGVseSBjbGVhcnMgdGhlIHByb2ZpbGUgb2YgYW55ICJmaWxlLXRydWVuYW1lIi4mbmJzcDsg SSBoYXZlIHJldmVydGVkPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+ Jm5ic3A7Jmd0OyZndDsgdGhlIGVhcmxpZXIgcGF0Y2ggYW5kIHB1c2hlZCBhIHBhdGNoIHZlcnkg c2ltaWxhciB0byB0aGUgb25lIGFmdGVyIG15IHNpZy48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly PSJhdXRvIj4mbmJzcDtUaGF0J3MgdW5mb3J0dW5hdGUuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp cj0iYXV0byI+Jm5ic3A7Jmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1 dG8iPiZuYnNwOyZndDsgVGhpcyBuZXcgY29kZSBzaG91bGQgYWxzbyBiZSB0aW1lZCBhbmQgY29t cGFyZWQgdG8gdGhlIG90aGVyIHR3bzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9 ImF1dG8iPiZuYnNwOyZndDsgdmVyc2lvbnMsIGJlZm9yZSB3ZSBtYWtlIHRoZSBmaW5hbCBkZWNp c2lvbiBvbiB0aGlzLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu YnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOzwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwO1RoaXMgaXMgYSB2ZXJ5 IHVuZm9ydHVuYXRlIGNoYW5nZS4gVGhpcyBjb21wbGV0ZWx5IG1pc3NlcyB0aGUgcG9pbnQgYW5k PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7cmV2ZXJ0cyBh bnkgcGVyZiBnYWlucyBmcm9tIG15IHByZXZpb3VzIHBhdGNoLi4uIEkgdGhpbmsgeW91cjwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwO2NvbmNsdXNpb25zIGFy ZSB0b28gcXVpY2ssIGFuZCBhY3Rpb25zIGxpa2V3aXNlLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk aXI9ImF1dG8iPiZuYnNwO0knZCBhcmd1ZSB0aGF0IGxvbmcgcGF0aHMgYXJlIGEgd2F5IG1vcmUg Y29tbW9uIG9jY3VycmVuY2UgdGhhbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9 ImF1dG8iPiZuYnNwO3N5bWxpbmtpbmcsIGFuZCB0aGUgcGxhY2VzIHlvdSB0b3VjaGVkIGluIHlv dXIgImJldHRlciB3YXkiIGlnbm9yZXMgdGhlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi IGRpcj0iYXV0byI+Jm5ic3A7cGVyZm9ybWFuY2UgY3JpdGljYWwgcGFydHMuPC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7PC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7VGhlIGZ1bmN0aW9uIHlvdSBhcmUgc3VnZ2VzdGlu ZyBpc24ndCB0aGUgaG90c3BvdC4gTW9zdCBub3RhYmxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7cHVibGlzaERpYWdub3N0aWNzIGlzLCB3aGljaCBub3cg aXMga2lsbGVkIGFnYWluLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i PiZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwO1Ro ZW88L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4=
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:50:18 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:50:18 2024 Received: from localhost ([127.0.0.1]:53155 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxU1g-00022n-7l for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:50:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48974) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rxU1d-000215-CD for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:50:14 -0400 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 1rxU1K-0002WM-4g; Thu, 18 Apr 2024 11:49:54 -0400 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=+iG++8JR90pwTuukiBDYtteyQtuSoEo77Q6v1ufh5Fg=; b=UF9at7gBZBiT2tfwdCKt b24ZMBK8u2saS2rwJ+kFINecfIdhdqx4ju3kmKVQfiQVXJ2lz8za9N8NK833VNc/Zi3nF7U3yVNG5 qX4dj4qzFuWdifa9OTi3i5TXsI2sNT1CVcHF46/tqEdT5v0EnTc6bXCaNSgE/GZbYXrq4SzBL4Flf HO6IexAv/wn1lrebpzR+lSQDMNicWaOqyVAlrqXILDvhWNALNP+Zdam9yjnnXPI4HcQUZ81kKOvIU cF2SUj47/3woqmQWEaEscfgPTVhx+9T2wKl6YQb53iHw+4VJlDMlHsDPW/QMgSrOZPiOlbnEfUbHP dEyZpBAe9yqzGw==; Date: Thu, 18 Apr 2024 18:49:50 +0300 Message-Id: <86y19ad61t.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 16:32:33 +0100) Subject: Re: bug#70036 a fix that References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@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: 70036 Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@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: João Távora <joaotavora@HIDDEN> > Date: Thu, 18 Apr 2024 16:32:33 +0100 > Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org > > So I've read up on the bug report and I had a close look at the Eglot > usage profiles (not the micro-benchmarks, those are reasonably > irrelevant in what concerns Eglot). I see these kinds of things in > Theodor's profiles > > 18 8% - eglot--TextDocumentPositionParams > 18 8% - eglot--TextDocumentIdentifier > 18 8% - eglot--path-to-uri > 15 7% - file-truename > 14 6% - file-truename > 14 6% - file-truename > 11 5% - file-truename > 11 5% - file-truename > 11 5% - file-truename > 10 4% - file-truename > 10 4% - file-truename > 8 3% - file-truename > 8 3% - file-truename > 8 3% - file-truename > 5 2% - file-truename > 3 1% - file-truename > 2 0% - file-truename > 1 0% file-truename > > > I could reproduce this, but never even close to the amount of ~7-8%. > Best I could get was 1% and I had to work pretty hard for it. If I > invoke completion or something heavier like that, it completely > dominates the profile. > > 25 1% - eglot--TextDocumentPositionParams > 23 1% - eglot--TextDocumentIdentifier > 23 1% - eglot-path-to-uri > 13 0% - file-truename > 13 0% - file-truename > 13 0% - file-truename > 13 0% file-truename > > Maybe that's because file-truename is a recursive function that becomes > slower as the path it's asked to analyse becomes longer (obviously, > there can be a symlink at every junction). Profiles can mislead and they can lie. It is much easier to time the old and the new code doing the same jobs, and compare the times. > If so, I think this simpler patch after my sig is all we need, as it > completely clears the profile of any "file-truename". I have reverted > the earlier patch and pushed a patch very similar to the one after my sig. This new code should also be timed and compared to the other two versions, before we make the final decision on this.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:46:12 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:46:11 2024 Received: from localhost ([127.0.0.1]:53134 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxTxi-0001Tv-HB for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:46:11 -0400 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]:54341) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxTxg-0001St-DU for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:46:09 -0400 Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2d895138ce6so15371251fa.0 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 08:45:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713455148; x=1714059948; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=hxrgJNb835lwtGWuQpuJWhcT2Ob68O7ydGIg7meJqVw=; b=Rw2bOA5eh5Q5gVY48ksN52wkXLHiMB6umE5WUs/PCa0WpHNpiOji3BPKlRbFqrnqb9 gBTEw61yWX31btMXr6DyCuYCBxB7Fb8t0+q414DO2upIDU5TeYrwHMM/FJZ3G6d8xQq1 HHjdMapKN/yEUKU43IeqMp1CnhmZ0R0mqOts/EEnRiRv45uPf2uVDH6ia6LU7SsqOreX X9Lhrm/0ZMh4j0s1qnaIYD00hqVD/qfBZmbnVUet7lqVlH8SzX6OplVWb35Tb5Po1iLa 2K9PaddM5fehWd24BKmHAfkOtZMtPG4rbqQjn0rDn8K0vEU6MH/3GLBwXULje2dnSDkk vUEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713455148; x=1714059948; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hxrgJNb835lwtGWuQpuJWhcT2Ob68O7ydGIg7meJqVw=; b=QZrqb5wD51dcsNuPyohCifRLDsEIO9cc3yLTtL1RsEP+EnM6xfPJVOLkyB8xzUomrn iu6qkyyNKnbvirYLByoB0C2jK5Vyx87BnL10D2/wEt6w9NxC9Ec/hrK9OqkCLIif+6Ke W+r1NoaQb1cYUSd8Bo39giVBpTY7Fy0kHSQQEgRZDNkHbsXiR6+GrlmD31vzCBnndG/R 3+CPKv/HqnpINuKKQY3+VxyxBY4rqqm0XBhymYtXgwq2X1pl8Z6o1Wtay/2atmUbhxHf BoVBrrSTqH6leGaoyR5EuR6D/RGERWVoJphimBM0HQEYqmdUV4Me8z3RGcReCwBFVG7x /djg== X-Forwarded-Encrypted: i=1; AJvYcCVanjJEp0KCwkVfhPDirfxgvpSuHxPCQvV6AYf4e73BjRLyQqw8AJS/YDFl1xuFp6kDhF3NoLi3dhZa/M7ZrsYGYpJShw4= X-Gm-Message-State: AOJu0YxE13v7NoOEmKUiBfvwp5lHsxS2PiWc8/5KfiBF6TybwDsEeM7u FrFuYBv6UwW655ylvCwF58GqjOvXjhLdwIOF8KMmVqj4LhTmw08rUL1FPrshSryyqYWzRGeQi49 K5aYedNSlohhQ1wqtf3pU4EW0AjTgKw== X-Google-Smtp-Source: AGHT+IEVUJyZWJPSXZM2tPUZjrbK28QCTf9GB4ZnHD8RAQ1SYR+jr2950OKzUfyaG44915dkM/muvoJyPvqjjk6Qg5U= X-Received: by 2002:a2e:720d:0:b0:2d8:f3b:d026 with SMTP id n13-20020a2e720d000000b002d80f3bd026mr2105937ljc.14.1713455148260; Thu, 18 Apr 2024 08:45:48 -0700 (PDT) MIME-Version: 1.0 References: <87le63xzjt.fsf@HIDDEN> <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> <87zftq65n5.fsf@localhost> In-Reply-To: <87zftq65n5.fsf@localhost> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 16:45:37 +0100 Message-ID: <CALDnm50cqP9SO1RxRk3g4A2B-PPmFPyoi4QeQi5r9hHkPY4zDw@HIDDEN> Subject: Re: bug#70036: a fix that To: Ihor Radchenko <yantar92@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Felician Nemeth <felician.nemeth@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, Theodor Thornhill <theo@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, Apr 18, 2024 at 4:39=E2=80=AFPM Ihor Radchenko <yantar92@HIDDEN= > wrote: > > Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > > > 18 8% - eglot--TextDocumentPositionParams > > ... > > 25 1% - eglot--TextDocumentPositionParams > > 23 1% - eglot--TextDocumentIdentifier > > 23 1% - eglot-path-to-uri > > 13 0% - file-truename > > Be aware that 13 is roughly in milliseconds (with the default value of > `profiler-sampling-interval'). The numbers you are seeing in this > profile are close to the "noise" levels. Correct, and that was precisely my point. I had to work hard just to get these numbers to show on the profile with average-length pathnames. But it was enough to verify that I apply my caching patch, they go away completely. Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:40:18 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:40:17 2024 Received: from localhost ([127.0.0.1]:53091 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxTrz-0000nr-QC for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:40:17 -0400 Received: from mout01.posteo.de ([185.67.36.65]:44679) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <yantar92@HIDDEN>) id 1rxTru-0000m7-7C for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:40:11 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 7DFD924002B for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 17:39:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1713454790; bh=IdPpCU2UOs8PhVyUIzN8vEoisqsHSXFAdgvEX7y9KGU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type: Content-Transfer-Encoding:From; b=pGuO2p4n8kNFlGz4P4ClmJVQ86x08N+EO3rMsgH8aF2g5IacmCdPX+/GJzb3CjjKP 2QNplRFStLykVBebWkhKXYo+sq8qYucB5ZEamGpP6rinFkGj7XuTW33brejV9K2j+p WFtAP4kDFLTcYHnZe3R4MkXLIHSBTSj49jRusYh7uii0oDwFdN+h4K+zY8i7PJwoLE Au5Z+Ciir9TUN1wIAKJyvCH8hScP/d09YhIKtT0pqIKkx0t220EDuNJqT/QeDsYUb2 OKnycaWC7GCOvz/Z3eOdtvWBFaNa2bvB8DAjclLbLpVnkf8vwSLTLvu8Rne/f92WNN CqF2f7N3GiHjg== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4VL25b5LXzz9rxP; Thu, 18 Apr 2024 17:39:47 +0200 (CEST) From: Ihor Radchenko <yantar92@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#70036: a fix that In-Reply-To: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> Date: Thu, 18 Apr 2024 15:40:30 +0000 Message-ID: <87zftq65n5.fsf@localhost> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: Felician Nemeth <felician.nemeth@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org, Theodor Thornhill <theo@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 (---) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > 18 8% - eglot--TextDocumentPositionParams > ... > 25 1% - eglot--TextDocumentPositionParams > 23 1% - eglot--TextDocumentIdentifier > 23 1% - eglot-path-to-uri > 13 0% - file-truename Be aware that 13 is roughly in milliseconds (with the default value of `profiler-sampling-interval'). The numbers you are seeing in this profile are close to the "noise" levels. --=20 Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:40:08 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:40:08 2024 Received: from localhost ([127.0.0.1]:53087 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxTrs-0000mf-9M for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:40:08 -0400 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:60485) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxTrp-0000lM-H3 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:40:06 -0400 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2d895e2c6efso13566771fa.0 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 08:39:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713454786; x=1714059586; 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=sJMtDi2js2fTHoGUEGl1rlaSlPfBw9XmWIp5kDzMoxY=; b=P9C23X9uMRittzrcQiFDpu1Vsa3OG/TRG5HvcTy+dlQxF6JcebitzWUXhrMsf2WAEq LmBW9Ap7Qc2TTtV/nPjtQ8vgL7FvuWjT6gknnPRAO7ZkM6e3id8InAIQSXRYQ/rnkhdx ecA06AFuX/1qgGkXzowyKyNStywDbATXfcCXF4Tc3VJD9InmZD8KRRsHwjVVffy/AjX1 XV5a6vtieIT0Eu4NSrPFcifSwNMe9Qp0WhpzHnhOXqbRdX889euLEDtP3sPwr6T2FMS8 +a3jklR0l9P/8mggBpOM2pUcGpmR7UvKZKdy9GRHU9RKw+U8KviVon9AHYnsPIvNDRM9 dofg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713454786; x=1714059586; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=sJMtDi2js2fTHoGUEGl1rlaSlPfBw9XmWIp5kDzMoxY=; b=LPybIbolJXVgonnfF4KDRg++kiuS2BVBDLcRmxypQBIE/HYubstIXmFwSNOO9Hdjem fdU4sMZQdnIvLyDono7Mc+WpPOMExukNPVNq+BQw+CE2yAURyDbj3acG1WajxK5U3Bi7 mjWGL5380Lac9lR8IhMRnMRMaj3s5ckyMk12Q3wPZ1d/HpV9GVTl0fUSS4exLQy57OJB iqE/5dvxIc+h61Ml8FRAogro2bKa/jydx02su2dN44ZePdAViUdXIKOw0lzrUIim3JZm FISaDphJsP3mn0+6M5c9brFegHxsjogSG5dNkiW+uYO+XVxX3/AaavfoMN4Gltym7wGQ Y4Rw== X-Forwarded-Encrypted: i=1; AJvYcCULYMqEwzxpG0RxuuGoyPiPR5nTrg2j9U9omts40e9BLG/HpA1cqigyScbqJAC5BQ7Je3jCB9J78WXBRFHQqg3fdB3llOA= X-Gm-Message-State: AOJu0YwceXI9/XDiNQ+OsGSlWCL92aR/fnNzF3/aokEPofu5x+UV/6M2 eD8qmYuZEhDDFGC/qnYLCD/EvziiMAEjOPFoHWEwhsAeSgq+pUrQR5vdURNXVkIq8i5bMIhYPxv GGQTGUJtOAsdAtcxfDdKWXObHfX4= X-Google-Smtp-Source: AGHT+IGn2vzC0U72NZvCNHBybAigPF5XOIxdRYhzN5S7n5baDPuC+qAv1uNysTwMM51l3t/C2BOw2gmEbzDJhCXwMUQ= X-Received: by 2002:a2e:9346:0:b0:2da:78e:f766 with SMTP id m6-20020a2e9346000000b002da078ef766mr1779660ljh.38.1713454785691; Thu, 18 Apr 2024 08:39:45 -0700 (PDT) MIME-Version: 1.0 References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> In-Reply-To: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 16:39:34 +0100 Message-ID: <CALDnm53WGGhudxtk7HRFoZ_Gm5EvVtAfZoLjtfH3crV+nYxDFA@HIDDEN> Subject: Re: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN>, Felician Nemeth <felician.nemeth@HIDDEN> Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) [Sorry I botched the subject line in my last mail, this is what I get for multitasking million things. I meant to call it: "a fix that doesn't break existing use cases"]
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:33:09 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:33:08 2024 Received: from localhost ([127.0.0.1]:53057 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rxTl6-0008Ro-CV for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:33:08 -0400 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]:60736) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1rxTl4-0008Qf-8B for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:33:07 -0400 Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-2d094bc2244so15779341fa.1 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 08:32:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713454366; x=1714059166; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4/QDhALe5ZENiON9OTNnMEj1KPhuZKBcwVJcY+xHJFU=; b=cjux4CgaBeTYKBiIM6NGfzZyBRkX4admUJEuleuh7vpxtmPh8GsxuVax3hX6ljMtXu Om8U2hkVvgZ9L4ACYWLDj5G8Y2FfKzh+IuflIOPDuTjmhlKB2i8kUmPUF3QaajwvSdiQ 4N8JOgqAZKsm0SOGzYzzOjRaTelsPdjSaKn8Al36+PvUY48v7CEGtS7S0obN2iS+we2i tOxR1Yr/N98sAywmUc7acGmhkazYb2mbmauTX8oxgKBOFjy4hEIk6bgVSom7tChnGA82 /w+3rO8uszFoGxLdKFnymB3xkAoDuNC8Ue3xO+NgpRRN652LuQy3/mFjYTXEZF6Yd26H aCdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713454366; x=1714059166; h=content-transfer-encoding:cc:to:subject:message-id:date:from :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4/QDhALe5ZENiON9OTNnMEj1KPhuZKBcwVJcY+xHJFU=; b=apYwSE5gKHOypTalDHA84K1DKWCGF314wBIeZSfBVwD80kP5JoptoY+vBhRCDNCdPN V8CADWwyXC5mPWbfgKjrDHgHEdcTzegeQaV0af9xleIFO1whwluTqFw1Xol0Y3sRebqb i0VomBahtRU8AgaT0ojYUyyUXGmr7YpsS86QcNXfogl+yZxzkTDgdkNtPmtPzfPGNQcF 0Wg8aABPrGwXAWItaCmxI+KewhstQM+XX1wJr/Ah7kwOlZS2z5uwdWVD1Pl5XlCfftMI 0VJBb7VJh89GrfA0HRpfFpPrLdn7hRMYumIj9XgQoFYKQDTr5AjtoJtudpd57c6J2XyU oemQ== X-Forwarded-Encrypted: i=1; AJvYcCWuY4le2iKEGVxQiSVorSj52Hw53BK6nuBTn714O6S7AV7LuyUU6jh3h2yRSgmwaHzN+liu2dKuXVw2bieJm0R2khdUwts= X-Gm-Message-State: AOJu0YzMBSF1HNpQzUSQsoPdQkg8a4Gi5VNXzW4/Ja7lZM7s63ccg+Ar TgG6BB4pYsm/Z/LKWVhLupFb45FDHXbeWWJ3aJsZOlHu9hfYAC20UhWxheGvY0/AmcDM2KPhn6u MqBSz60KYQ+WJUtE7/riK9tjEsos= X-Google-Smtp-Source: AGHT+IFb47EnrRjs7DwM8ssqQud1eUFhmsXogT0wGxRU1m9nh/HPw6+zUYuhfm6Wll61zgO1axOh3cN5avzEtEsUe1U= X-Received: by 2002:a05:651c:622:b0:2d8:729f:cf3a with SMTP id k34-20020a05651c062200b002d8729fcf3amr1579998lje.32.1713454365697; Thu, 18 Apr 2024 08:32:45 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 18 Apr 2024 16:32:33 +0100 Message-ID: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN> Subject: bug#70036 a fix that To: Theodor Thornhill <theo@HIDDEN>, Felician Nemeth <felician.nemeth@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) So I've read up on the bug report and I had a close look at the Eglot usage profiles (not the micro-benchmarks, those are reasonably irrelevant in what concerns Eglot). I see these kinds of things in Theodor's profiles 18 8% - eglot--TextDocumentPositionParams 18 8% - eglot--TextDocumentIdentifier 18 8% - eglot--path-to-uri 15 7% - file-truename 14 6% - file-truename 14 6% - file-truename 11 5% - file-truename 11 5% - file-truename 11 5% - file-truename 10 4% - file-truename 10 4% - file-truename 8 3% - file-truename 8 3% - file-truename 8 3% - file-truename 5 2% - file-truename 3 1% - file-truename 2 0% - file-truename 1 0% file-truename I could reproduce this, but never even close to the amount of ~7-8%. Best I could get was 1% and I had to work pretty hard for it. If I invoke completion or something heavier like that, it completely dominates the profile. 25 1% - eglot--TextDocumentPositionParams 23 1% - eglot--TextDocumentIdentifier 23 1% - eglot-path-to-uri 13 0% - file-truename 13 0% - file-truename 13 0% - file-truename 13 0% file-truename Maybe that's because file-truename is a recursive function that becomes slower as the path it's asked to analyse becomes longer (obviously, there can be a symlink at every junction). So let's assume for the sake of argument that it's frequent for users to have very long file names with very many components or that the 1% overhead on the average path length is a real performance problem for people. If so, I think this simpler patch after my sig is all we need, as it completely clears the profile of any "file-truename". I have reverted the earlier patch and pushed a patch very similar to the one after my sig. I'm interested in more details of exactly what constitutes actual usage, i.e. what did you do while recording a cpu or mem profile. As to the symlink-outside-the-project issue that Felici=C3=A1n raised, I was not aware of that bug. It seems a separate bug at any rate. I've also noticed that the Eglot automated tests are failing. That too is unexpected. I will have a look at that, too. Jo=C3=A3o commit 23d6517b2499089f775640b88958774ac2c91049 Author: Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> Date: Thu Apr 18 08:03:10 2024 -0500 Better way to fix bug#70036 Cache eglot--cached-tdi per buffer, like we do with some many other variables already, to avoid frequent expensive recomputation of a value that requires potentially many 'file-truename' calls. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 806265544d6..6196aaff7a3 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -2517,12 +2517,17 @@ eglot-handle-request (t (setq success :json-false))) `(:success ,success))) +(defvar-local eglot--cached-tdi nil + "A cached LSP TextDocumentIdentifier URI string.") + (defun eglot--TextDocumentIdentifier () "Compute TextDocumentIdentifier object for current buffer." - `(:uri ,(eglot-path-to-uri (or buffer-file-name - (ignore-errors - (buffer-file-name - (buffer-base-buffer))))))) + `(:uri ,(or eglot--cached-tdi + (setq eglot--cached-tdi + (eglot-path-to-uri (or buffer-file-name + (ignore-errors + (buffer-file-name + (buffer-base-buffer))))))))) (defvar-local eglot--versioned-identifier 0) --=20 Jo=C3=A3o T=C3=A1vora
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 31 Mar 2024 13:33:04 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Mar 31 09:33:04 2024 Received: from localhost ([127.0.0.1]:46801 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rqvJ1-0007Pn-Ak for submit <at> debbugs.gnu.org; Sun, 31 Mar 2024 09:33:04 -0400 Received: from out-179.mta1.migadu.com ([95.215.58.179]:57584) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rqvIy-0007Ox-96 for 70036 <at> debbugs.gnu.org; Sun, 31 Mar 2024 09:33:01 -0400 Date: Sun, 31 Mar 2024 15:32:46 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711891971; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to; bh=aZzDzXVg0rckmhNcsNQXp633KkkX9xzyL8qSW9OkQUg=; b=ISZaxnRJTvD5iCPV1cDAUT63eV9zUZyFtPcCHWLc2qft71ser4+J8BWTMbt6SgvOfVpsS8 Z0VHD8LkAxkYSkSY3gBuOb3hHs5/+fDJmUw5c7ZD9IVH72MLh9mvR8FJtioWhPyxy9vO8P lBc/kk/LW+ya/KtzyvyPgBRBHj1TEt9Qih2PaPeMHi2ztmXx2V+fuiRDJGRkY2vI4xFSGh pOHQnAIbvThYLdwPVFwM0tZOJwNtz6+tS6wyBLPH/JpHrRoc2V3kJ8PUIHMVkaWCcj/svh ca0vmjTZqJI62A95LXsfj+Hk7uUeRqxZOdaDvK7OwjAZSpZ4/o/DTBWOx++BaQ== Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level Message-ID: <804c3c2f-d537-423d-b82b-4f6bcc2d867f@HIDDEN> X-Android-Message-ID: <804c3c2f-d537-423d-b82b-4f6bcc2d867f@HIDDEN> In-Reply-To: <87v852o8yc.fsf@HIDDEN> X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. From: Theodor Thornhill <theo@HIDDEN> To: Felician Nemeth <felician.nemeth@HIDDEN> Importance: Normal X-Priority: 3 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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.3 (/) PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRp diBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIE1hciAzMSwgMjAyNCAxNDo1NywgRmVsaWNpYW4gTmVt ZXRoICZsdDtmZWxpY2lhbi5uZW1ldGhAZ21haWwuY29tJmd0OyB3cm90ZTo8YnIgdHlwZT0iYXR0 cmlidXRpb24iPjxibG9ja3F1b3RlIGNsYXNzPSJxdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAu OGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxwIGRpcj0i bHRyIj5FbGkgWmFyZXRza2lpICZsdDtlbGl6QGdudS5vcmcmZ3Q7IHdyaXRlczoKPGJyPgoKPGJy PgomZ3Q7Jmd0OyBGcm9tOiBGZWxpY2lhbiBOZW1ldGggJmx0O2ZlbGljaWFuLm5lbWV0aEBnbWFp bC5jb20mZ3Q7Cjxicj4KJmd0OyZndDsgQ2M6IEVsaSBaYXJldHNraWkgJmx0O2VsaXpAZ251Lm9y ZyZndDssJm5ic3A7IDcwMDM2QGRlYmJ1Z3MuZ251Lm9yZwo8YnI+CiZndDsmZ3Q7IERhdGU6IFNh dCwgMzAgTWFyIDIwMjQgMTA6NDY6MDAgKzAxMDAKPGJyPgomZ3Q7Jmd0OyAKPGJyPgomZ3Q7Jmd0 OyBJIHRoaW5rIHVzaW5nIGZpbmQtYnVmZmVyLXZpc2l0aW5nIGluc3RlYWQgb2YgZ2V0LWZpbGUt YnVmZmVyIGFuZAo8YnI+CiZndDsmZ3Q7IGZpbGUtdHJ1ZW5hbWUgaW5zdGVhZCBvZiBleHBhbmQt ZmlsZS1uYW1lIGluIEVnbG90IGlzIHByb2JsZW1hdGljLgo8YnI+CiZndDsmZ3Q7IExldCdzIHNh eSB3ZSBoYXZlIHRoZXNlIGZpbGVzOgo8YnI+CiZndDsmZ3Q7IAo8YnI+CiZndDsmZ3Q7IC9wcm9q ZWN0L2EuYwo8YnI+CiZndDsmZ3Q7IC9wcm9qZWN0L2EuaCAtJmd0OyAvb3RoZXIvYS5oCjxicj4K Jmd0OyZndDsgCjxicj4KJmd0OyZndDsgRWdsb3Qgd2lsbCBjb21tdW5pY2F0ZSB0aGVzZSBmaWxl IG5hbWVzIHRvIHRoZSBMU1Agc2VydmVyOiAvcHJvamVjdC9hLmMKPGJyPgomZ3Q7Jmd0OyBhbmQg L290aGVyL2EuaC4mbmJzcDsgVGhlbiB0aGUgc2VydmVyIGNhbm5vdCAiYXNzb2NpYXRlIiBhLmgg d2l0aCBhLmMuCjxicj4KJmd0OyZndDsgQWRkaXRpb25hbGx5LCBhLmggd2lsbCBiZSBvdXRzaWRl IG9mIHRoZSBMU1Agd29ya3NwYWNlLgo8YnI+CiZndDsmZ3Q7IAo8YnI+CiZndDsmZ3Q7IFRoaXMg aW5kZWVkIGNvbmZ1c2VzIGNsYW5nZCBhIGJpdDogaXQgb25seSB0YWtlcyBpbnRvIGFjY291bnQg dGhlCjxicj4KJmd0OyZndDsgY2hhbmdlcyBvZiBidWZmZXIgYS5oIHdoZW4gaXQgaXMgc2F2ZWQu Jm5ic3A7IChCZWNhdXNlIGl0IGFzc3VtZXMKPGJyPgomZ3Q7Jmd0OyAvcHJvamVjdC9hLmggaXMg bm90IG9wZW5lZCBpbiB0aGUgZWRpdG9yLikKPGJyPgomZ3Q7Cjxicj4KJmd0OyBDYW4gTFNQIHNl cnZlcnMgcmVzb2x2ZSBzeW1saW5rcz8mbmJzcDsgSWYgdGhleSBjYW4sIHRoZW4gZXhwYW5kLWZp bGUtbmFtZQo8YnI+CiZndDsgaXMgVFJULCBBRkFJVS4KPGJyPgoKPGJyPgpUaGUgTFNQIHNwZWNp ZmljYXRpb24gZG9lcyBub3QgdGFsayBhYm91dCBzeW1saW5rcy4mbmJzcDsgVGhlIHNlcnZlcnMg SSB1c2VkCjxicj4KbGV0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHJlc29sdmUgc3ltbGlua3MgZm9y IHRoZW0uCjxicj4KCjxicj4KQWxsIGluIGFsbCwgSSB0aGluayBFZ2xvdCBzaG91bGQgc3dpdGNo IHRvIHVzZSBleHBhbmQtZmlsZS1uYW1lIGFzIHdlbGwuCjxicj4KSXQgc2hvdWxkIGFsc28gdXNl IGdldC1maWxlLWJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBtb3JlIGNvbXBsaWNhdGVkCjxicj4KY2Fj aGluZyBtZWNoYW5pc20gcHJvcG9zZWQgcHJldmlvdXNseS4mbmJzcDsgVGhlbz8KPGJyPgoKPC9w PjwvYmxvY2txdW90ZT48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2 PjxkaXYgZGlyPSJhdXRvIj5JIGNhbiBsb29rIGludG8gZ2V0LWZpbGUtYnVmZmVyLCBzdXJlLiBC dXQgcmVtZW1iZXIgdGhhdCBteSBuZXcgY2FjaGluZyBpcyBtZXJlbHkgYSBkYXRhIHN0cnVjdHVy ZSBjaGFuZ2UgZnJvbSBsaXN0IHRvIG1hcC4gVGhlIG1hbmFnZWQgYnVmZmVyIGxpc3QgaXMgc3Rp bGwgdGhlcmU8L2Rpdj48ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgZGlyPSJhdXRvIj48 ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxibG9ja3F1 b3RlIGNsYXNzPSJxdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFw eCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxwIGRpcj0ibHRyIj48YnI+Ck5ldmVydGhl bGVzcywgRWdsb3Qgd2lsbCBjb250aW51ZSB0byBoYW5kbGUgcG9vcmx5IHRoZSBjYXNlIHdoZW4g dGhlcmUKPGJyPgppcyBhIHN5bWxpbmsgaW4gYSBwcm9qZWN0IHRoYXQgcG9pbnRzIG91dHNpZGUg b2YgdGhlIHByb2plY3QuCjxicj4KSG9wZWZ1bGx5LCB0aGlzIGNhbiBiZSBwb3RlbnRpYWxseSBz b2x2ZWQgbGF0ZXIgd2l0aCB0aGUgaWRlYSBiZWhpbmQKPGJyPgplZ2xvdC0tc2VydmVycy1ieS14 cmVmZWQtZmlsZS4KPGJyPgo8L3A+CjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+PC9kaXY+ PC9kaXY+
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 31 Mar 2024 12:57:29 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Mar 31 08:57:29 2024 Received: from localhost ([127.0.0.1]:46763 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rqukb-0005X9-3O for submit <at> debbugs.gnu.org; Sun, 31 Mar 2024 08:57:29 -0400 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]:47547) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <felician.nemeth@HIDDEN>) id 1rqukZ-0005Wg-4T for 70036 <at> debbugs.gnu.org; Sun, 31 Mar 2024 08:57:27 -0400 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-a450bedffdfso356200266b.3 for <70036 <at> debbugs.gnu.org>; Sun, 31 Mar 2024 05:57:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711889838; x=1712494638; darn=debbugs.gnu.org; h=mime-version:face:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=vMXCRTsZvPwJSLZfOj/CE1g92WkNwJUP8zrxYA1SryM=; b=P6Ar78BQYMl6HjwMccQGLixpWMbRoMeVj1RJ/NLVJYL7Rdn3rURr47RdAmcnYVh7f+ HhDZbFPQ4p4Ubbb+xgPRE+2l4A7cCDBUzQGiXDLlByCEEFXfskIHhszN0ChAS4w+toyU OLofRc7M7IBIyyA9bSlKax+SCIvdIyREz0Ml7QE+iKcI09hzz27gCXG2kGFfoMhQqZys mX/nLEkaL7th+JbU+TUyCMA+TlxgjFlS8rzSmrkroFY546IrH3ddMyX9JU2EH0/KgWC3 Ah+IVHZtSvFvsR8fgA+V+uFR3LP1Fo96Xz0Vms39iIHes1enBCsje7NUALvPvlYgCkYO jpNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711889838; x=1712494638; h=mime-version:face:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=vMXCRTsZvPwJSLZfOj/CE1g92WkNwJUP8zrxYA1SryM=; b=NoPY0pqW5gFqtVhQRNSjeYsvto6TSte+ofOJwTCPHN8Gj2RREnYRn8nUY4WerPIqFl u4k55fbmulstE6nih3KUTtNo9ILGh+ik7yxLDQi0Q9ZSqssUwZ5oQ64Y+/Zbrlpfys7v FGtIBuiO/rgTYX0S8pcP9fglY/3mtfEjoGjMvdZ9x5EaRmmv4T5OO5rD2dMM/WtDQyoE bA4B/AKJ0H0C8NAQe0P6jyYt3rOhu8XafkeVCMEvy/ZRprrxXeJXg50S232rEypl5aDL DZDZtQiJf+b0mFrAqnw01X10aKl1CisE0cW7XE+aqF/MVGyrzBDkFb/RXHDGBqWfDoA7 Laug== X-Forwarded-Encrypted: i=1; AJvYcCUZjeChaSHzUx1DjbC30EpD004sKm/gNDPk3+OccLuemEhxTkdl4GH78qgzT+LVARLEME95lLhX5PEEjHHGZ9oEnUfn6kA= X-Gm-Message-State: AOJu0Yxx7CKd2ObTcrGbr+lvUF9fueI+gNrExmJFv5h93GDh3ICyHqsr f2tDK7aqLau6eu3CMEGnV+IsIviMSkQ8z4FmNzTiwwdtAXqLPMEDl9XHLyvH X-Google-Smtp-Source: AGHT+IGoySoOaQVnK2/itQg++at1SzC1co8euSR4ySE3ojmcoQai1DLwmMnflPt8kKzJY+J9azenOQ== X-Received: by 2002:a17:907:3181:b0:a4e:663a:3cf4 with SMTP id xe1-20020a170907318100b00a4e663a3cf4mr754818ejb.6.1711889837589; Sun, 31 Mar 2024 05:57:17 -0700 (PDT) Received: from betli.gmail.com (catv-213-222-160-137.catv.fixed.vodafone.hu. [213.222.160.137]) by smtp.gmail.com with ESMTPSA id h8-20020a1709060f4800b00a46d049ff63sm4118192ejj.21.2024.03.31.05.57.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 31 Mar 2024 05:57:17 -0700 (PDT) From: Felician Nemeth <felician.nemeth@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN> <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN> <8734say2wi.fsf@HIDDEN> <87zfugoxwn.fsf@HIDDEN> <86wmpjdh1o.fsf@HIDDEN> Date: Sun, 31 Mar 2024 14:57:15 +0200 In-Reply-To: <86wmpjdh1o.fsf@HIDDEN> (Eli Zaretskii's message of "Sat, 30 Mar 2024 15:45:39 +0300") Message-ID: <87v852o8yc.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX5+fmhoaEwMDD/ ///TMNVWAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAPEgAADxIBIZvyMwAAAAd0SU1FB+AICBUfHgLs gGoAAAGXSURBVCjPRdK/b5tAFAfw753gBEwM2ApMbuVIqf+Ko0qiyhOu4sj2xJBYMn/FUdX7UUUZ OjHgyvf+yj6IcW6Bjx53934ADEvs8bmEr8UVoTYTOyJO9KoYsVofN8kILdbeJ8Li6YpZWop4xOK0 VdfIoXmkHn5/5D7/Ts/8THacSqnkKTcMTxgUkVzFnEIRTKwwYYSCvzfg16f0i8YApW/XG/Pm8R49 dXjxKmRnxv3OwooQWcv4RUYem1fsNe/WU63uk7AmYxk78y32/ee2tZB4fO+WcZ7lnIGEolXW1EGw LfkSuQ0XTgRefgNlfNwRNV6QhBxJ8JNxTMUPyBqTd0bjaAP5G7NJRU39z80hLOZTjqB7K3tEEFSj aEsuQew6qBxxyhHjVUR7H7NpC9iHJZGLMCEuweqAqE1BHbfK2oRIz9EHYA/+wiFWru9smeVfuWNZ 2+NFtX80UA1TvJNdytM4DwO4kY7bJz8Qcd0G0ceslZGkkeoBsjUHwF1+jjM3XHaXEZ7mGLfwPFO+ RV9QLY2iEdmDo78D/gNPaXVYqd+pyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0wOFQyMzoz MDoyOCswMjowMGy/yHYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMDhUMjM6MzA6MjgrMDI6 MDAd4nDKAAAAAElFTkSuQmCC MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, theo@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 (-) Eli Zaretskii <eliz@HIDDEN> writes: >> From: Felician Nemeth <felician.nemeth@HIDDEN> >> Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org >> Date: Sat, 30 Mar 2024 10:46:00 +0100 >> >> I think using find-buffer-visiting instead of get-file-buffer and >> file-truename instead of expand-file-name in Eglot is problematic. >> Let's say we have these files: >> >> /project/a.c >> /project/a.h -> /other/a.h >> >> Eglot will communicate these file names to the LSP server: /project/a.c >> and /other/a.h. Then the server cannot "associate" a.h with a.c. >> Additionally, a.h will be outside of the LSP workspace. >> >> This indeed confuses clangd a bit: it only takes into account the >> changes of buffer a.h when it is saved. (Because it assumes >> /project/a.h is not opened in the editor.) > > Can LSP servers resolve symlinks? If they can, then expand-file-name > is TRT, AFAIU. The LSP specification does not talk about symlinks. The servers I used let the operating system resolve symlinks for them. All in all, I think Eglot should switch to use expand-file-name as well. It should also use get-file-buffer instead of the more complicated caching mechanism proposed previously. Theo? Nevertheless, Eglot will continue to handle poorly the case when there is a symlink in a project that points outside of the project. Hopefully, this can be potentially solved later with the idea behind eglot--servers-by-xrefed-file.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 30 Mar 2024 12:45:58 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Mar 30 08:45:57 2024 Received: from localhost ([127.0.0.1]:44162 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rqY5t-0005ws-60 for submit <at> debbugs.gnu.org; Sat, 30 Mar 2024 08:45:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58482) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rqY5o-0005wd-30 for 70036 <at> debbugs.gnu.org; Sat, 30 Mar 2024 08:45:55 -0400 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 1rqY5g-0001dS-1D; Sat, 30 Mar 2024 08:45:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=NJn2g1/a824OEDRr9fnTur4Djx5HAZv8JncUeKJxsww=; b=qUfvwD1YFwC5 fvpL8Mp6Q/o7t5HTI7SjLaoZLNtBD1IteY1RTo71VDCvAc+0cd7+RGnDdjW0CeMlpoaseEvRWjRCh P3zoLZH+Z6K/M+HqihhFNp9jIX3dhBFBOdLD3eHi7xSQwfRxbooSIEG/HXKpkL/FADbW/lXnqQ13S h0WQxZSyc5zLzSF/3559yCLXnOj62kvIIJ1MRmlArIxZbqtR3FXQ+2W02Jr/5oMMSeom4sRhUd0Bf FJc0F0COzZzq7uM3eZlh9nzMGzNjOgZBvzK9RwGzWuY/NYIYku6t+ta6rjRouuWBR3jMY0sqnDtoi Fx1y22ms2URY/3oVsjoOUw==; Date: Sat, 30 Mar 2024 15:45:39 +0300 Message-Id: <86wmpjdh1o.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Felician Nemeth <felician.nemeth@HIDDEN> In-Reply-To: <87zfugoxwn.fsf@HIDDEN> (message from Felician Nemeth on Sat, 30 Mar 2024 10:46:00 +0100) Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN> <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN> <8734say2wi.fsf@HIDDEN> <87zfugoxwn.fsf@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, theo@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: Felician Nemeth <felician.nemeth@HIDDEN> > Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org > Date: Sat, 30 Mar 2024 10:46:00 +0100 > > I think using find-buffer-visiting instead of get-file-buffer and > file-truename instead of expand-file-name in Eglot is problematic. > Let's say we have these files: > > /project/a.c > /project/a.h -> /other/a.h > > Eglot will communicate these file names to the LSP server: /project/a.c > and /other/a.h. Then the server cannot "associate" a.h with a.c. > Additionally, a.h will be outside of the LSP workspace. > > This indeed confuses clangd a bit: it only takes into account the > changes of buffer a.h when it is saved. (Because it assumes > /project/a.h is not opened in the editor.) Can LSP servers resolve symlinks? If they can, then expand-file-name is TRT, AFAIU.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 30 Mar 2024 11:18:36 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Mar 30 07:18:36 2024 Received: from localhost ([127.0.0.1]:44075 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rqWjK-0006sR-ER for submit <at> debbugs.gnu.org; Sat, 30 Mar 2024 07:18:36 -0400 Received: from out-171.mta1.migadu.com ([95.215.58.171]:62773) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rqWjF-0006rq-HZ for 70036 <at> debbugs.gnu.org; Sat, 30 Mar 2024 07:18:33 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711797501; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gsvLo7fAxKVbHN9ZmYzSseK0okgzRIMPdyXy2G3fDeo=; b=sfO7KvYjLgnSOst58fzqcNxg0x/c42BTg1huTOlg67AmBWzzOVc2nHg7/ruKdACsFDfhlD uPs2fINI9Ch8IP6YhIW/A3Xj88ZjJl6DfnABuC+XoxY8nFcGzjPFrcDj2jI7PnAsly/TnZ YFDQs4RjOnlnuCnY+rbXmTJMgqVv4gecEgwIoy4x1Tj4JzbPozRgS57zaIsZwLeUKOmSqe FUDSKtWqfi/lCPQAXTPyZACWS+IdkFyLkYvw4+bJLuH94xz3g7raghAFHMQuptTVMAAhIo lDAIki26cfVWxSnb4CBbZvX4vd7na/sAkZ1NQwY3KqfRHWL6O2nJIodPeV+rBg== From: Theodor Thornhill <theo@HIDDEN> To: Felician Nemeth <felician.nemeth@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87zfugoxwn.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN> <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN> <8734say2wi.fsf@HIDDEN> <87zfugoxwn.fsf@HIDDEN> Date: Sat, 30 Mar 2024 12:18:14 +0100 Message-ID: <874jcoeznt.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) --=-=-= Content-Type: text/plain Felician Nemeth <felician.nemeth@HIDDEN> writes: > Theodor Thornhill <theo@HIDDEN> writes: >> Felician Nemeth <felician.nemeth@HIDDEN> writes: > >>> Theo, can you email me the relevant messages that your server sends >>> to Emacs? Does the server send lots of similar diagnostics messages >>> frequently? > >> I'll try to include such a report a little later today. > > Thanks, that would be helpful. > It's a little hard scraping the logs for company related data, so I haven't done this yet, but the profiles should be pretty expanatory if you do some edits after applying the below patch. >> [2. text/x-diff; 0001-Don-t-use-file-truepath-in-Eglot-bug-70036.patch]... > > I think using find-buffer-visiting instead of get-file-buffer and > file-truename instead of expand-file-name in Eglot is problematic. > Let's say we have these files: > > /project/a.c > /project/a.h -> /other/a.h > > Eglot will communicate these file names to the LSP server: /project/a.c > and /other/a.h. Then the server cannot "associate" a.h with a.c. > Additionally, a.h will be outside of the LSP workspace. > > This indeed confuses clangd a bit: it only takes into account the > changes of buffer a.h when it is saved. (Because it assumes > /project/a.h is not opened in the editor.) So in other words this is already a bug in eglot? > > ------ > > Regarding the patch itself, cache invalidation is missing from it. The > user might kill a buffer or save it under a different name with > write-file. Changing (PATH -> BUFFER) to (PATH -> (BUFFER, FILENAME)) > would probably work. Eglot should save the current buffer-file-name > when it inserts a new item into the hash of managed-buffers. And when > it retrieves an item, it should verify whether the buffer-file-name is > the same as the saved file-name. > > Can file-truepath change while buffer-file-name remains the same? Yes, > but I think Eglot could ignore those rare cases, or handle it elsewhere. > (For example, it could update the cache entry after a buffer is saved.) Actually, cache invalidation is there, at least for killing a buffer. Major modes are disabled on killing buffer, and it is removed as a part of the teardown. Saving to a new buffer isn't handled properly yet, but this looks like something not really supported by Eglot yet anyway. If I resave a buffer with C-x C-w its content will be placed in a new buffer, but old one will not be deleted, and the new one will not be registered with the eglot server before running M-x revert-buffer anyways. So that seems like a different issue, really. Please check out the new patch. I find no issues diverging from the current behavior using this one. It seems to solve all the performance issues I stated, and now completely new stuff shows up in the profile, which to me sounds like the bottlenecks have moved, suggesting we get a nice performance upgrade. What do you think? I'll test this for a while and install to master in a few days if nothing comes up :-) Theo --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Don-t-use-file-truepath-in-Eglot-bug-70036.patch From 26e5f3cc8e767215f7c50800a6d713702b8fa144 Mon Sep 17 00:00:00 2001 From: Theodor Thornhill <theo@HIDDEN> Date: Thu, 28 Mar 2024 12:56:23 +0100 Subject: [PATCH] Don't use file-truepath in Eglot (bug#70036) `file-truepath' is slow because of recursive calls and being implemented in lisp. It seems to not be needed in eglot, but it is used behind the scenes in `find-buffer-visiting', thus appearing in profiles. Moving the implementation to a hash map will yield similar performance benefits, but wouldn't require us to rewrite `file-truename' in C. * lisp/progmodes/eglot.el (eglot-lsp-server): Convert 'managed-buffers' to a hashmap. (eglot-uri-to-path): Don't use file-truepath, as it is too slow to be included in the hot path. (eglot--on-shutdown): Use buffers from buffer map. (eglot--managed-mode): Add buffer to map, rather than list. Also remove it from the map on deactivation. (eglot-handle-notification): Expose server and get buffer from the buffer map. --- lisp/progmodes/eglot.el | 42 +++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index f247c43203c..7f4284bf09d 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -1053,8 +1053,8 @@ eglot-lsp-server :documentation "Map (DIR -> (WATCH ID1 ID2...)) for `didChangeWatchedFiles'." :initform (make-hash-table :test #'equal) :accessor eglot--file-watches) (managed-buffers - :initform nil - :documentation "List of buffers managed by server." + :documentation "Map (PATH -> BUFFER) for buffers managed by server." + :initform (make-hash-table :test #'equal) :accessor eglot--managed-buffers) (saved-initargs :documentation "Saved initargs for reconnection purposes." @@ -1085,12 +1085,12 @@ eglot-uri-to-path (defun eglot-path-to-uri (path) "Convert PATH, a file name, to LSP URI string and return it." - (let ((truepath (file-truename path))) + (let ((expanded-path (expand-file-name path))) (if (and (url-type (url-generic-parse-url path)) ;; It might be MS Windows path which includes a drive ;; letter that looks like a URL scheme (bug#59338) (not (and (eq system-type 'windows-nt) - (file-name-absolute-p truepath)))) + (file-name-absolute-p expanded-path)))) ;; Path is already a URI, so forward it to the LSP server ;; untouched. The server should be able to handle it, since ;; it provided this URI to clients in the first place. @@ -1098,11 +1098,11 @@ eglot-path-to-uri (concat "file://" ;; Add a leading "/" for local MS Windows-style paths. (if (and (eq system-type 'windows-nt) - (not (file-remote-p truepath))) + (not (file-remote-p expanded-path))) "/") (url-hexify-string ;; Again watch out for trampy paths. - (directory-file-name (file-local-name truepath)) + (directory-file-name (file-local-name expanded-path)) eglot--uri-path-allowed-chars))))) (defun eglot-range-region (range &optional markers) @@ -1187,7 +1187,7 @@ eglot--servers-by-xrefed-file (defun eglot--on-shutdown (server) "Called by jsonrpc.el when SERVER is already dead." ;; Turn off `eglot--managed-mode' where appropriate. - (dolist (buffer (eglot--managed-buffers server)) + (dolist (buffer (map-values (eglot--managed-buffers server))) (let (;; Avoid duplicate shutdowns (github#389) (eglot-autoshutdown nil)) (eglot--when-live-buffer buffer (eglot--managed-mode-off)))) @@ -1992,7 +1992,11 @@ eglot--managed-mode (add-hook 'eldoc-documentation-functions #'eglot-signature-eldoc-function nil t) (eldoc-mode 1)) - (cl-pushnew (current-buffer) (eglot--managed-buffers (eglot-current-server)))) + + (let ((buffer (current-buffer))) + (puthash (expand-file-name (buffer-file-name buffer)) + buffer + (eglot--managed-buffers (eglot-current-server))))) (t (remove-hook 'after-change-functions #'eglot--after-change t) (remove-hook 'before-change-functions #'eglot--before-change t) @@ -2020,10 +2024,10 @@ eglot--managed-mode (let ((server eglot--cached-server)) (setq eglot--cached-server nil) (when server - (setf (eglot--managed-buffers server) - (delq (current-buffer) (eglot--managed-buffers server))) + (remhash (expand-file-name (buffer-file-name (current-buffer))) + (eglot--managed-buffers server)) (when (and eglot-autoshutdown - (null (eglot--managed-buffers server))) + (null (map-values (eglot--managed-buffers server)))) (eglot-shutdown server))))))) (defun eglot--managed-mode-off () @@ -2346,7 +2350,7 @@ eglot-handle-notification (remhash token (eglot--progress-reporters server)))))))))) (cl-defmethod eglot-handle-notification - (_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics + (server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode' "Handle notification publishDiagnostics." (cl-flet ((eglot--diag-type (sev) @@ -2357,7 +2361,7 @@ eglot-handle-notification (mess (source code message) (concat source (and code (format " [%s]" code)) ": " message))) (if-let* ((path (expand-file-name (eglot-uri-to-path uri))) - (buffer (find-buffer-visiting path))) + (buffer (gethash path (eglot--managed-buffers server)))) (with-current-buffer buffer (cl-loop initially @@ -2842,7 +2846,7 @@ eglot--xref-make-match Try to visit the target file for a richer summary line." (pcase-let* ((file (eglot-uri-to-path uri)) - (visiting (or (find-buffer-visiting file) + (visiting (or (gethash file (eglot--managed-buffers (eglot-current-server))) (gethash uri eglot--temp-location-buffers))) (collect (lambda () (eglot--widening @@ -3542,13 +3546,14 @@ eglot--propose-changes-as-diff (with-current-buffer (get-buffer-create "*EGLOT proposed server changes*") (buffer-disable-undo (current-buffer)) (let ((inhibit-read-only t) - (target (current-buffer))) + (target (current-buffer)) + (managed-buffers (eglot--managed-buffers (eglot-current-server)))) (diff-mode) (erase-buffer) (pcase-dolist (`(,path ,edits ,_) prepared) (with-temp-buffer (let* ((diff (current-buffer)) - (existing-buf (find-buffer-visiting path)) + (existing-buf (gethash path (gethash path managed-buffers))) (existing-buf-label (prin1-to-string existing-buf))) (with-temp-buffer (if existing-buf @@ -3583,7 +3588,8 @@ eglot--apply-workspace-edit (eglot--dbind ((VersionedTextDocumentIdentifier) uri version) textDocument (list (eglot-uri-to-path uri) edits version))) - documentChanges))) + documentChanges)) + (managed-buffers (eglot--managed-buffers (eglot-current-server)))) (unless (and changes documentChanges) ;; We don't want double edits, and some servers send both ;; changes and documentChanges. This unless ensures that we @@ -3591,7 +3597,7 @@ eglot--apply-workspace-edit (cl-loop for (uri edits) on changes by #'cddr do (push (list (eglot-uri-to-path uri) edits) prepared))) (cl-flet ((notevery-visited-p () - (cl-notevery #'find-buffer-visiting + (cl-notevery (lambda (p) (gethash p managed-buffers)) (mapcar #'car prepared))) (accept-p () (y-or-n-p -- 2.40.1 --=-=-=--
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 30 Mar 2024 09:46:15 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Mar 30 05:46:15 2024 Received: from localhost ([127.0.0.1]:44009 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rqVHy-0002MS-U3 for submit <at> debbugs.gnu.org; Sat, 30 Mar 2024 05:46:15 -0400 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]:53427) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <felician.nemeth@HIDDEN>) id 1rqVHv-0002MD-7H for 70036 <at> debbugs.gnu.org; Sat, 30 Mar 2024 05:46:13 -0400 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-a465ddc2c09so149018366b.2 for <70036 <at> debbugs.gnu.org>; Sat, 30 Mar 2024 02:46:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711791963; x=1712396763; darn=debbugs.gnu.org; h=mime-version:face:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=fS5ZHG0AA6HvG/9ndxZby5pbzO7Rll+MbCy4dYEyXG0=; b=jH1NZoElJhwb7ytALWcfdTddwlk9zdyqw5wsgu2j33W6acbjADsU7r97a/J66JTRK1 mtIbUcsuL8Bp4JPG9TVLOvWReZk7yD80cyCzQeVR0esbbdjnMiM794pcHhXlsjI+1GxC NqhpZHn3CP06xavX6xULN1BV1UjdP9aqymaMjphZfLoZThBIy0AMvqDLopzp9POjxdYy pmkHWPfays80AmaL9MFfhG4vnostX9IgGRvqWQg0oYdTBCFTFLjomcCthb+Iocb2mPQw uNnkFURO9lHea+fFUHEQ9dvwjUMwO+JTfD4ULfNl4zk++kaT1fvt2eEstpp3Uzxp2x/S gbbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711791963; x=1712396763; h=mime-version:face:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fS5ZHG0AA6HvG/9ndxZby5pbzO7Rll+MbCy4dYEyXG0=; b=KxyyivxRlpWCHtIAtb8gJh3xf2zoRq+GIlSQdcjfb5yecRqeIxgEr/IpuciexKH0mg BLE+YeZloNjVHpDG99tpU8TC4U546tMMX9eVmuo0V0yn2UfuELxtGfAQ9LsJOpo17D8K hrYC17yGng9uu7Dc63HnEclO0EeQ5unZ01RBIHgqOgvH3hOYgWoJ1tiwxen8oPMdD4CV zCSq7OOXyLLoN4dmp6OUPbsfGVmqOIiibG6FR7JcWLK0DTdkFJJbONQGrHZDJEn+YfBW pgHG2MDac9GibEgU887h20xpZKu5Ec4Hm90KmTYxW2X0VG9gIlHsDK2YY9/yhBla6FKI 5Y0Q== X-Forwarded-Encrypted: i=1; AJvYcCUcmHFj1mAFXE39xYc+6lrtXbGmCjhdt1xzxlNQDAV3pgXrMIm/lUwjQXwmSySb56QUcvuZ+xMdRS2CvAeId2tQQjJNNHM= X-Gm-Message-State: AOJu0Ywu++rH+DB/FSfKGoxQhJqttieGflqt5Ywlap4ejPxGIq/mJCtT WiRq7fDK2rdjlajDZ2O/Lcps/nO4xWJwwi4FP8VK0YR+U+7KGu9yfmqQSM4y X-Google-Smtp-Source: AGHT+IEDOm3mIbAbHZvJfWUNynJXHBT36jFT5lCEu4kq3rm1KfS7MigdI/LWIQIf3UgvL0WJ0WQymQ== X-Received: by 2002:a05:6402:5202:b0:56d:b5ce:9e04 with SMTP id s2-20020a056402520200b0056db5ce9e04mr3368473edd.30.1711791962455; Sat, 30 Mar 2024 02:46:02 -0700 (PDT) Received: from betli.gmail.com (catv-213-222-160-137.catv.fixed.vodafone.hu. [213.222.160.137]) by smtp.gmail.com with ESMTPSA id fe8-20020a056402390800b0056c522d014esm2931729edb.57.2024.03.30.02.46.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 30 Mar 2024 02:46:02 -0700 (PDT) From: Felician Nemeth <felician.nemeth@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN> <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN> <8734say2wi.fsf@HIDDEN> Date: Sat, 30 Mar 2024 10:46:00 +0100 In-Reply-To: <8734say2wi.fsf@HIDDEN> (Theodor Thornhill via's message of "Thu, 28 Mar 2024 13:08:45 +0100") Message-ID: <87zfugoxwn.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX5+fmhoaEwMDD/ ///TMNVWAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAPEgAADxIBIZvyMwAAAAd0SU1FB+AICBUfHgLs gGoAAAGXSURBVCjPRdK/b5tAFAfw753gBEwM2ApMbuVIqf+Ko0qiyhOu4sj2xJBYMn/FUdX7UUUZ OjHgyvf+yj6IcW6Bjx53934ADEvs8bmEr8UVoTYTOyJO9KoYsVofN8kILdbeJ8Li6YpZWop4xOK0 VdfIoXmkHn5/5D7/Ts/8THacSqnkKTcMTxgUkVzFnEIRTKwwYYSCvzfg16f0i8YApW/XG/Pm8R49 dXjxKmRnxv3OwooQWcv4RUYem1fsNe/WU63uk7AmYxk78y32/ee2tZB4fO+WcZ7lnIGEolXW1EGw LfkSuQ0XTgRefgNlfNwRNV6QhBxJ8JNxTMUPyBqTd0bjaAP5G7NJRU39z80hLOZTjqB7K3tEEFSj aEsuQew6qBxxyhHjVUR7H7NpC9iHJZGLMCEuweqAqE1BHbfK2oRIz9EHYA/+wiFWru9smeVfuWNZ 2+NFtX80UA1TvJNdytM4DwO4kY7bJz8Qcd0G0ceslZGkkeoBsjUHwF1+jjM3XHaXEZ7mGLfwPFO+ RV9QLY2iEdmDo78D/gNPaXVYqd+pyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0wOFQyMzoz MDoyOCswMjowMGy/yHYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMDhUMjM6MzA6MjgrMDI6 MDAd4nDKAAAAAElFTkSuQmCC MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) Theodor Thornhill <theo@HIDDEN> writes: > Felician Nemeth <felician.nemeth@HIDDEN> writes: >> Theo, can you email me the relevant messages that your server sends >> to Emacs? Does the server send lots of similar diagnostics messages >> frequently? > I'll try to include such a report a little later today. Thanks, that would be helpful. > [2. text/x-diff; 0001-Don-t-use-file-truepath-in-Eglot-bug-70036.patch]... I think using find-buffer-visiting instead of get-file-buffer and file-truename instead of expand-file-name in Eglot is problematic. Let's say we have these files: /project/a.c /project/a.h -> /other/a.h Eglot will communicate these file names to the LSP server: /project/a.c and /other/a.h. Then the server cannot "associate" a.h with a.c. Additionally, a.h will be outside of the LSP workspace. This indeed confuses clangd a bit: it only takes into account the changes of buffer a.h when it is saved. (Because it assumes /project/a.h is not opened in the editor.) ------ Regarding the patch itself, cache invalidation is missing from it. The user might kill a buffer or save it under a different name with write-file. Changing (PATH -> BUFFER) to (PATH -> (BUFFER, FILENAME)) would probably work. Eglot should save the current buffer-file-name when it inserts a new item into the hash of managed-buffers. And when it retrieves an item, it should verify whether the buffer-file-name is the same as the saved file-name. Can file-truepath change while buffer-file-name remains the same? Yes, but I think Eglot could ignore those rare cases, or handle it elsewhere. (For example, it could update the cache entry after a buffer is saved.)
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 13:52:44 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 09:52:44 2024 Received: from localhost ([127.0.0.1]:39602 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpqBP-0002nP-N2 for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 09:52:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59798) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rpqBL-0002ma-SM for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 09:52:41 -0400 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 1rpqBE-0001Bk-Mj; Thu, 28 Mar 2024 09:52:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=VX/nW8TTq7LQ58CdOHzHjsWauydzcOm9Yejf72dIo88=; b=TdYZTfFe7MwT haBSmQMw46Tcgkt/KrqrSKUbcLCrcrTCjveeipCrm3M2rw++gO9CUvDDwAQp2yrc+w8e59fwJhKJS IjK0fYCZlLUDUxxwF3jxzsf0HHR4CLHkChjENQY9PT/WctKLdJY8xpXQ7PpipFjMcQ5Q4ORswFost rwPW3knvsmAShcdIJE7o8G4VWEjG+juxjtpNgK/+p3lmmsBqVIQIwT8O6sl5AO/3RHI3MVDHBATcj pDJSTRPMooMgLRngm+KQiulYyFGBGsHzqYchyvQD7L1kngb/kxnKurhf+ex8Q8+NNr1H2ZE6B+40B yORMmhQWk2pe2NnU/rFqiw==; Date: Thu, 28 Mar 2024 15:52:23 +0200 Message-Id: <86zfuifoq0.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Ihor Radchenko <yantar92@HIDDEN> In-Reply-To: <87il16tw0l.fsf@localhost> (message from Ihor Radchenko on Thu, 28 Mar 2024 11:51:06 +0000) Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost> <87v856wrj1.fsf@HIDDEN> <87r0futxj4.fsf@localhost> <875xx6y46j.fsf@HIDDEN> <87il16tw0l.fsf@localhost> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, theo@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: 70036 <at> debbugs.gnu.org > From: Ihor Radchenko <yantar92@HIDDEN> > Date: Thu, 28 Mar 2024 11:51:06 +0000 > > If the slow parts of `file-truename' are the calls to C subroutines, > rewriting `file-truename' in C will not help much with the performance. That is only true if the C implementation uses the same C subroutines, or their bodies. If, instead, the C implementation uses something like 'realpath', which produces the fully resolved file name ion one go, then the profile from the Lisp implementation is not really relevant.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 12:47:42 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 08:47:42 2024 Received: from localhost ([127.0.0.1]:39529 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rppAT-0005oV-Hh for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 08:47:42 -0400 Received: from out-184.mta0.migadu.com ([91.218.175.184]:13907) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rppAQ-0005n1-2X for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 08:47:40 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711630050; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=NRnFQsmLBcEvYyzyQR4l6EzsfBnWWz+sjIt3girwMFc=; b=ybJyiSZupupU5wrsk8IUx+1iItFGO2HQTNchO0sjU9nSJVwndUxN5Wb6O2J2/fmiL9pq57 1m5YjxDwykI1zUbKoO3hZ9ae5dtZBcoN4VJBs8mAfy/ThGTAaz6T74638zaqbvY7+qfg4U VxwLOeL+kfDbt+wcLHFZjJh6rXYGIMvT10KxniQJd28/W/3DxSQVRfRKIXIBDThp+bh9wU P/lXOh2h5YCMtf65DtKdaoOdsLRBNLhZOgtMVGmrxGSBhIP0eLye1lMJxEYkWyY+13LFtg TToHITTQOHZxZzLqMlJEuYC7yyxX56HsRWsWZiBi9liGfP2DJxVqniDjFvjupQ== From: Theodor Thornhill <theo@HIDDEN> To: Ihor Radchenko <yantar92@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87il16tw0l.fsf@localhost> References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost> <87v856wrj1.fsf@HIDDEN> <87r0futxj4.fsf@localhost> <875xx6y46j.fsf@HIDDEN> <87il16tw0l.fsf@localhost> Date: Thu, 28 Mar 2024 13:47:27 +0100 Message-ID: <87zfuiwmjk.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (-) Ihor Radchenko <yantar92@HIDDEN> writes: > Theodor Thornhill <theo@HIDDEN> writes: > >> I'm sorry, but I don't see the real difference here. Yes, the profile is >> more detailed this way, but it doesn't change the fact that >> file-truename is slow, does it? > > It does not, but it is important for your suggestion to move > `file-truename' to the C level. > > If the slow parts of `file-truename' are the calls to C subroutines, > rewriting `file-truename' in C will not help much with the performance. > (Unless you try hard and move parts of the used subroutines into the C > implementation of `file-truename', but that will involve copy-pasting > parts of the existing code and cannot be a good idea without very strong > justification) > Yeah, I agree with this. >> The question to me is whether or not this is an acceptable performance >> hit to take for eglot given what it's trying to do, and my opinion is >> no. Whether or not it should be moved to C is open to suggestion. I'm >> preparing a patch that only targets Eglot by removing reliance on this >> function. > > If your aim is improving eglot performance specifically, sure. > If your aim is improving `file-truename' performance in general, a more > detailed analysis can be helpful. > And this. Wrt eglot specifically or not - I'm not sure whether or not this affects other parts of emacs. My guess is that it will, but I haven't investigated that yet. >> 17839 63% - command-execute >> 17794 63% - funcall-interactively >> 17793 63% - eval-last-sexp >> 17793 63% - #<compiled-function EF0> >> 17793 63% - elisp--eval-last-sexp >> 17791 63% - eval >> 17791 63% - benchmark-call >> 17788 63% - #<lambda 219> >> 17783 63% - file-truename >> 17576 62% - let >> ... > > When you have recursive calls, it is generally more useful to view > reversed calltree (B) in the profiler report. It will accumulate calls > to the same function together, regardless on how deep in the call stack > these calls are made. > TIL - thanks :)
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 12:09:01 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 08:09:01 2024 Received: from localhost ([127.0.0.1]:39288 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpoZ2-000288-Hi for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 08:09:01 -0400 Received: from out-174.mta0.migadu.com ([2001:41d0:1004:224b::ae]:10778) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpoYz-000279-HI for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 08:08:58 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711627729; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=WBpMWIZMnBvAJnOO1U8kMO0eLPAy3YaQQaKpYcyJKFQ=; b=x3IljinKolVusJWjgcVxfvv3C2DtsNuBtCe7aDghIwP32VDPnacUsryQO05eSGGKjEwjQy NxcenBW3VckGuyLgapeX/D+QqiConWJhg3ZJYzC7MCKARl0OpdBn6/cYdxn/ckL7mEP6LR rXYbQRhz4Uas3PXCb4WaDciMLo8EPCJKoQZavLQap5DrvpHbkaF3mYNRiWvCw9BHuOpMwJ VZd5nQHBhrJpTXoffMkbVDQ1mLc3SM5eH2y6eeDVuhAm7zp/oGlpC8aXCfLJlQslWwrNeV /WmjrS2lUYew8qWDFpyfeWF3BNLU1XqhR1uYai5myQWwW3BCtvDSaFspeAmmKQ== From: Theodor Thornhill <theo@HIDDEN> To: Felician Nemeth <felician.nemeth@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <875xx6muzt.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN> <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN> Date: Thu, 28 Mar 2024 13:08:45 +0100 Message-ID: <8734say2wi.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Felician Nemeth <felician.nemeth@HIDDEN> writes: > Theodor Thornhill <theo@HIDDEN> writes: > >> This wouldn't help for the usage in find-buffer-visiting, though. But >> this one could more easily be replaced by reworking the diagnostics >> handler. We could store the last received diagnostics in the server >> object, and do a quick lookup from known buffers there. > > eglot-handle-notification:textDocument/publishDiagnostics, > eglot--xref-make-match, and eglot--apply-workspace-edit call > find-buffer-visiting. It seems to me only the first case might be > really time sensitive. Theo, can you email me the relevant messages > that your server sends to Emacs? Does the server send lots of similar > diagnostics messages frequently? > > Thanks, > Felici=C3=A1n I'll try to include such a report a little later today. But yes, it happens a lot. Consider the following patch, though. It eliminates the issues for publishDiagnostics. It can easily be extended to the other places where find-buffer-visiting is used. The publishDiagnostics is sent on change from the server, so that isn't directly initiated by Eglot. What do you think? Theo --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Don-t-use-file-truepath-in-Eglot-bug-70036.patch From d43fe85eae05baa07dd4c3e873a1b94542d97ea9 Mon Sep 17 00:00:00 2001 From: Theodor Thornhill <theo@HIDDEN> Date: Thu, 28 Mar 2024 12:56:23 +0100 Subject: [PATCH] Don't use file-truepath in Eglot (bug#70036) `file-truepath' is slow because of recursive calls and being implemented in lisp. It seems to not be needed in eglot, but it is used behind the scenes in `find-buffer-visiting', thus appearing in profiles. Moving the implementation to a hash map will yield similar performance benefits, but wouldn't require us to rewrite `file-truename' in C. * lisp/progmodes/eglot.el (eglot-lsp-server): Convert 'managed-buffers' to a hashmap. (eglot-uri-to-path): Don't use file-truepath, as it is too slow to be included in the hot path. (eglot--on-shutdown): Use buffers from buffer map. (eglot--managed-mode): Add buffer to map, rather than list. Also remove it from the map on deactivation. (eglot-handle-notification): Expose server and get buffer from the buffer map. --- lisp/progmodes/eglot.el | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 7d2f1a55165..c6dbca6fc6a 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -1053,8 +1053,8 @@ eglot-lsp-server :documentation "Map (DIR -> (WATCH ID1 ID2...)) for `didChangeWatchedFiles'." :initform (make-hash-table :test #'equal) :accessor eglot--file-watches) (managed-buffers - :initform nil - :documentation "List of buffers managed by server." + :documentation "Map (PATH -> BUFFER) for buffers managed by server." + :initform (make-hash-table :test #'equal) :accessor eglot--managed-buffers) (saved-initargs :documentation "Saved initargs for reconnection purposes." @@ -1085,12 +1085,12 @@ eglot-uri-to-path (defun eglot-path-to-uri (path) "Convert PATH, a file name, to LSP URI string and return it." - (let ((truepath (file-truename path))) + (let ((expanded-path (expand-file-name path))) (if (and (url-type (url-generic-parse-url path)) ;; It might be MS Windows path which includes a drive ;; letter that looks like a URL scheme (bug#59338) (not (and (eq system-type 'windows-nt) - (file-name-absolute-p truepath)))) + (file-name-absolute-p expanded-path)))) ;; Path is already a URI, so forward it to the LSP server ;; untouched. The server should be able to handle it, since ;; it provided this URI to clients in the first place. @@ -1098,11 +1098,11 @@ eglot-path-to-uri (concat "file://" ;; Add a leading "/" for local MS Windows-style paths. (if (and (eq system-type 'windows-nt) - (not (file-remote-p truepath))) + (not (file-remote-p expanded-path))) "/") (url-hexify-string ;; Again watch out for trampy paths. - (directory-file-name (file-local-name truepath)) + (directory-file-name (file-local-name expanded-path)) eglot--uri-path-allowed-chars))))) (defun eglot-range-region (range &optional markers) @@ -1187,7 +1187,7 @@ eglot--servers-by-xrefed-file (defun eglot--on-shutdown (server) "Called by jsonrpc.el when SERVER is already dead." ;; Turn off `eglot--managed-mode' where appropriate. - (dolist (buffer (eglot--managed-buffers server)) + (dolist (buffer (map-values (eglot--managed-buffers server))) (let (;; Avoid duplicate shutdowns (github#389) (eglot-autoshutdown nil)) (eglot--when-live-buffer buffer (eglot--managed-mode-off)))) @@ -1992,7 +1992,11 @@ eglot--managed-mode (add-hook 'eldoc-documentation-functions #'eglot-signature-eldoc-function nil t) (eldoc-mode 1)) - (cl-pushnew (current-buffer) (eglot--managed-buffers (eglot-current-server)))) + + (let ((buffer (current-buffer))) + (puthash (expand-file-name (buffer-file-name buffer)) + buffer + (eglot--managed-buffers (eglot-current-server))))) (t (remove-hook 'after-change-functions #'eglot--after-change t) (remove-hook 'before-change-functions #'eglot--before-change t) @@ -2020,10 +2024,10 @@ eglot--managed-mode (let ((server eglot--cached-server)) (setq eglot--cached-server nil) (when server - (setf (eglot--managed-buffers server) - (delq (current-buffer) (eglot--managed-buffers server))) + (remhash (expand-file-name (buffer-file-name (current-buffer))) + (eglot--managed-buffers server)) (when (and eglot-autoshutdown - (null (eglot--managed-buffers server))) + (null (map-values (eglot--managed-buffers server)))) (eglot-shutdown server))))))) (defun eglot--managed-mode-off () @@ -2346,7 +2350,7 @@ eglot-handle-notification (remhash token (eglot--progress-reporters server)))))))))) (cl-defmethod eglot-handle-notification - (_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics + (server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode' "Handle notification publishDiagnostics." (cl-flet ((eglot--diag-type (sev) @@ -2357,7 +2361,7 @@ eglot-handle-notification (mess (source code message) (concat source (and code (format " [%s]" code)) ": " message))) (if-let* ((path (expand-file-name (eglot-uri-to-path uri))) - (buffer (find-buffer-visiting path))) + (buffer (gethash path (eglot--managed-buffers server)))) (with-current-buffer buffer (cl-loop initially -- 2.40.1 --=-=-=--
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:55:14 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:55:14 2024 Received: from localhost ([127.0.0.1]:39258 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpoLh-0000uc-Tc for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:55:14 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]:61919) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <felician.nemeth@HIDDEN>) id 1rpoLf-0000tq-1A for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:55:12 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-414970d4185so6407555e9.3 for <70036 <at> debbugs.gnu.org>; Thu, 28 Mar 2024 04:55:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711626904; x=1712231704; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:face:user-agent:message-id :in-reply-to:date:references:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=QDv4JkwEgB/2C2DOPBdiVMvC4pBds1CZfUP2YYX8nmY=; b=As6hoItS0+xENAHOaSkScUTmmlVCvpqTOfC/Ez0CYEkz6W3KYE2BSA2tpCo+BiIfbN dnvPC4WNSe3QmQOXmkCzIE1EWjfvMxdZXz8epW8g90L6SBaT/2yuqUWMr+J0a3/2r1IH NyMfSbQNSt2jg/0RjNwfK4ntIkeX7wxBObXAuMfEb9TkIR1CIVrb7SnueEz8MJi6MIjq v+sXRgzjKQI0gOro4r7129fNeJ3luqIXzszTbj1wLPDBdp3/TBoxfz7tIGV22qnJm1PK zRjs/DS+IM2qcOR/NyTi9RBpFwOTvt4aVBe6nwg6ADX3fIKWFhpRP7iKr4fNVFfdInaS jeTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711626904; x=1712231704; h=content-transfer-encoding:mime-version:face:user-agent:message-id :in-reply-to:date:references:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=QDv4JkwEgB/2C2DOPBdiVMvC4pBds1CZfUP2YYX8nmY=; b=U9K/iuFMFivv4iGGypWmTcevQ5cl0P1zD6i9kTXVM4Gf9hDBHFQFHn4TONUj5v6Yrb uzT65LGQC3jEsd++36eKCJkvfPXmiDE1LUv842MMlR27P3TCFOH6Dgq3GNNqrE5B2Bv0 VA+5w9Hup9cDr5rRFraalL8BID+yreVGACK7x/v5wjKCMwojEdCTTfB71wl5YdR+liwB lO8KE7hia7vNacxoW9ei0DRGhzqCriqvG7080vCl0DYuO2yjIrx8H5/U6ks5l+K+vpfc N+2igxfZG09j8MmnKLQ3qqM9S2MB/5+KjXYYXqufajKHGUA2VPue9d9NDQOteFifevEp pd0Q== X-Forwarded-Encrypted: i=1; AJvYcCW2NOcUu/4KZul/lS7EuOeWHjSCoXgVWW8VBmCgzm5uvvONAs/CvEEMZWcFU0bq7LYIekVDAJFRMakDn55V4F02G5HV68Y= X-Gm-Message-State: AOJu0Yygoa0IJgxZmwNp2i8UOrAVIGAryLQ1Oi7Vid2HiggJtz2DOjWf rSdwvDWqtRawDVK7k4fO0vo4YJPlcYJjvSeOf4h5fIoRzpZEFKAX4cJJ0kAr X-Google-Smtp-Source: AGHT+IFRx+BZzVoUffJg9pBvUYZUTN5bbriaWLHSKAbRq9gnBE4NVrA8pYFC+PY+gCOjGYAUip4UjA== X-Received: by 2002:a05:600c:4f4e:b0:413:fff2:a7d1 with SMTP id m14-20020a05600c4f4e00b00413fff2a7d1mr2259235wmq.29.1711626903985; Thu, 28 Mar 2024 04:55:03 -0700 (PDT) Received: from ulti.gmail.com ([2001:738:2001:407f:d329:3c92:fe6f:14c3]) by smtp.gmail.com with ESMTPSA id bg3-20020a05600c3c8300b0041481207b23sm2118266wmb.8.2024.03.28.04.55.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Mar 2024 04:55:03 -0700 (PDT) From: Felician Nemeth <felician.nemeth@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN> <874jcqygpn.fsf@HIDDEN> Date: Thu, 28 Mar 2024 12:55:02 +0100 In-Reply-To: <874jcqygpn.fsf@HIDDEN> (Theodor Thornhill's message of "Thu, 28 Mar 2024 08:10:28 +0100") Message-ID: <875xx6muzt.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX5+fmhoaEwMDD/ ///TMNVWAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAPEgAADxIBIZvyMwAAAAd0SU1FB+AICBUfHgLs gGoAAAGXSURBVCjPRdK/b5tAFAfw753gBEwM2ApMbuVIqf+Ko0qiyhOu4sj2xJBYMn/FUdX7UUUZ OjHgyvf+yj6IcW6Bjx53934ADEvs8bmEr8UVoTYTOyJO9KoYsVofN8kILdbeJ8Li6YpZWop4xOK0 VdfIoXmkHn5/5D7/Ts/8THacSqnkKTcMTxgUkVzFnEIRTKwwYYSCvzfg16f0i8YApW/XG/Pm8R49 dXjxKmRnxv3OwooQWcv4RUYem1fsNe/WU63uk7AmYxk78y32/ee2tZB4fO+WcZ7lnIGEolXW1EGw LfkSuQ0XTgRefgNlfNwRNV6QhBxJ8JNxTMUPyBqTd0bjaAP5G7NJRU39z80hLOZTjqB7K3tEEFSj aEsuQew6qBxxyhHjVUR7H7NpC9iHJZGLMCEuweqAqE1BHbfK2oRIz9EHYA/+wiFWru9smeVfuWNZ 2+NFtX80UA1TvJNdytM4DwO4kY7bJz8Qcd0G0ceslZGkkeoBsjUHwF1+jjM3XHaXEZ7mGLfwPFO+ RV9QLY2iEdmDo78D/gNPaXVYqd+pyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0wOFQyMzoz MDoyOCswMjowMGy/yHYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMDhUMjM6MzA6MjgrMDI6 MDAd4nDKAAAAAElFTkSuQmCC MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) Theodor Thornhill <theo@HIDDEN> writes: > This wouldn't help for the usage in find-buffer-visiting, though. But > this one could more easily be replaced by reworking the diagnostics > handler. We could store the last received diagnostics in the server > object, and do a quick lookup from known buffers there. eglot-handle-notification:textDocument/publishDiagnostics, eglot--xref-make-match, and eglot--apply-workspace-edit call find-buffer-visiting. It seems to me only the first case might be really time sensitive. Theo, can you email me the relevant messages that your server sends to Emacs? Does the server send lots of similar diagnostics messages frequently? Thanks, Felici=E1n
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:51:11 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:51:11 2024 Received: from localhost ([127.0.0.1]:39243 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpoHm-0000Z2-Nu for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:51:11 -0400 Received: from mout02.posteo.de ([185.67.36.66]:59195) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <yantar92@HIDDEN>) id 1rpoHi-0000Xx-Mi for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:51:10 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id B130E240103 for <70036 <at> debbugs.gnu.org>; Thu, 28 Mar 2024 12:50:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1711626659; bh=pDFDrS4FYhDwIx7dH/CojKH818PJG2gZ4/1YK2ur4Cc=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type: From; b=B4AayFEJOq9dED5fjgyqaPLiMIfy+MkwoZU8ijjsBkhirop/6Ofgggnh7a6s8K9jF 7IQyL5jqZAQadLv/KZKpijBFyEg9Y/N4tqNEkq5wvHTaa8KkipDqeeRCsjZSGTy0qZ eVtzDYAOfx2750C/5IcdfbFW9uE/tVacmlbBw+dCcAUZtoj9t91L/A8z7C0gj2TGmR 5zpuKuPAp65f8lcupVRw3oKiU8bX1LvQ3vdTp6/6P799gC/GJQa/Nx1//wFpx0b51e 3w1BbzqIFiUPnCwyUFqkWITtupFmseEA4qWBkZUlOdO7ZPs9RNTm+LWWO1mxbpS6Xu 14uUpwzBRv5mw== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4V521G6ccjz9rxB; Thu, 28 Mar 2024 12:50:58 +0100 (CET) From: Ihor Radchenko <yantar92@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <875xx6y46j.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost> <87v856wrj1.fsf@HIDDEN> <87r0futxj4.fsf@localhost> <875xx6y46j.fsf@HIDDEN> Date: Thu, 28 Mar 2024 11:51:06 +0000 Message-ID: <87il16tw0l.fsf@localhost> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (---) Theodor Thornhill <theo@HIDDEN> writes: > I'm sorry, but I don't see the real difference here. Yes, the profile is > more detailed this way, but it doesn't change the fact that > file-truename is slow, does it? It does not, but it is important for your suggestion to move `file-truename' to the C level. If the slow parts of `file-truename' are the calls to C subroutines, rewriting `file-truename' in C will not help much with the performance. (Unless you try hard and move parts of the used subroutines into the C implementation of `file-truename', but that will involve copy-pasting parts of the existing code and cannot be a good idea without very strong justification) > The question to me is whether or not this is an acceptable performance > hit to take for eglot given what it's trying to do, and my opinion is > no. Whether or not it should be moved to C is open to suggestion. I'm > preparing a patch that only targets Eglot by removing reliance on this > function. If your aim is improving eglot performance specifically, sure. If your aim is improving `file-truename' performance in general, a more detailed analysis can be helpful. > 17839 63% - command-execute > 17794 63% - funcall-interactively > 17793 63% - eval-last-sexp > 17793 63% - #<compiled-function EF0> > 17793 63% - elisp--eval-last-sexp > 17791 63% - eval > 17791 63% - benchmark-call > 17788 63% - #<lambda 219> > 17783 63% - file-truename > 17576 62% - let > ... When you have recursive calls, it is generally more useful to view reversed calltree (B) in the profiler report. It will accumulate calls to the same function together, regardless on how deep in the call stack these calls are made. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:41:25 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:41:25 2024 Received: from localhost ([127.0.0.1]:39223 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpo8K-0008Bg-IR for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:41:24 -0400 Received: from out-184.mta1.migadu.com ([95.215.58.184]:26337) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpo8G-0008Aj-Ny for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:41:22 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711626073; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=3b0JR+VrbMtbW4J14nJrHwQeZgm1Yx807o4y4k0m4ok=; b=BEqt0xVVdvTxL7AM6KOeFtvIYOGRvVuQX5H1TZvMfxmqclM9BPlGx1YsqCqHJYaiUoaYYs syv7aCWCZZQxwY47+mmh2Ob23eEr70pduu0eRlzhqPPLXBIxde60tZJEE23yyB7HkzSONC 7/eg8C4WINFEIp/48GYGRB6GbJqHfBuzcfFZD84TexQjAXKczOw3vmRu4MPGwHeWenbqZE QNq5Z/67mMMeqjEPSwSkACVvRf/TCsXkKqMoE/MamEzNJbAiryZ8KWRiMezEnXvPc4QJqL a73mEFX0wKUS0vkNuzriGhoUCWOS3rrW/wq7qQuT+INDZsuHihk71tx+KeJM5Q== From: Theodor Thornhill <theo@HIDDEN> To: Ihor Radchenko <yantar92@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87r0futxj4.fsf@localhost> References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost> <87v856wrj1.fsf@HIDDEN> <87r0futxj4.fsf@localhost> Date: Thu, 28 Mar 2024 12:41:08 +0100 Message-ID: <875xx6y46j.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (-) Ihor Radchenko <yantar92@HIDDEN> writes: > Theodor Thornhill <theo@HIDDEN> writes: > >> Not sure I understand what you mean. I tried it again, but this time the >> call is 100000 times and in an existing file on my system which is >> deeply nested. I run emacs with `emacs -Q` from a build on >> `30b1b0d7cd8e4d46a601e9737350cda970f6bab0`. >> >> the relevant part from the profile this time: >> ``` >> 15478 72% - command-execute >> 15440 72% - funcall-interactively >> 15439 72% - eval-last-sexp >> 15439 72% - #<compiled-function 0C4> >> 15439 72% - elisp--eval-last-sexp >> 15436 71% - eval >> 15436 71% - benchmark-call >> 15434 71% - #<lambda E8B> >> 15434 71% - file-truename >> 13536 63% - file-truename >> 12224 57% - file-truename >> ... >> To me this looks like it spends a lot of time in recursive calls > > No. It is just that your `file-truename' is native-compiled and the > profiler is unable to get the details from inside native subr code. > > You can re-evaluate the defun to reveal the details in the profiler > output. Or use Emacs compiled without native-compilation support. > > -- > Ihor Radchenko // yantar92, > Org mode contributor, > Learn more about Org mode at <https://orgmode.org/>. > Support Org development at <https://liberapay.com/org-mode>, > or support my work at <https://liberapay.com/yantar92> I'm sorry, but I don't see the real difference here. Yes, the profile is more detailed this way, but it doesn't change the fact that file-truename is slow, does it? The question to me is whether or not this is an acceptable performance hit to take for eglot given what it's trying to do, and my opinion is no. Whether or not it should be moved to C is open to suggestion. I'm preparing a patch that only targets Eglot by removing reliance on this function. Theo ``` 17839 63% - command-execute 17794 63% - funcall-interactively 17793 63% - eval-last-sexp 17793 63% - #<compiled-function EF0> 17793 63% - elisp--eval-last-sexp 17791 63% - eval 17791 63% - benchmark-call 17788 63% - #<lambda 219> 17783 63% - file-truename 17576 62% - let 17546 62% - while 17529 62% - let 17358 61% - if 17356 61% - let 16365 58% - or 15969 56% - if 15964 56% - let 15951 56% - file-name-as-directory 15824 56% - file-truename 15788 56% - let 15768 56% - while 15712 55% - let 15579 55% - if 15577 55% - let 7224 25% - or 3429 12% - if 3325 11% - let 3059 10% - file-name-as-directory 1866 6% - file-truename 1501 5% - let 1276 4% - while 1121 3% - let 1004 3% find-file-name-handler 18 0% if 49 0% - setcar 26 0% 1- 37 0% - if 23 0% < 36 0% not 97 0% - if 46 0% - eq 8 0% quote 7 0% or 218 0% - cond 112 0% - and 95 0% - string= 73 0% substring 82 0% - or 57 0% string= 17 0% or 123 0% - setcar 83 0% - cons ```
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:18:30 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:18:30 2024 Received: from localhost ([127.0.0.1]:39200 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpnm8-0003Ro-RM for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:18:29 -0400 Received: from mout02.posteo.de ([185.67.36.66]:41829) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <yantar92@HIDDEN>) id 1rpnm4-0003Qu-Px for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:18:27 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 346BF240104 for <70036 <at> debbugs.gnu.org>; Thu, 28 Mar 2024 12:18:17 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1711624697; bh=td7t6LEN0/qZXYt6Mzs8Ys2JeEOZBjVO8zajkH00fqM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type: From; b=JecxYgESTMQFJFOqsNYo5vJv3N1AimrGBqf3JlKZafOOlF/LJff+MrkX7z7yfL90G ydqI9+uePMulyiEYTayM6sI/wZD4eFDOj67zNuE2rhmZRjXAstvUOspmmZxdXs1fcK ljqmnBP9T6ZcAdx0pbMf4FIr8AtGbd/ZzBcOeyAD8pcMF+omzr7UEvjFLMgWINGL0/ 5FUsKetkq3e+4/Z1lTHU/EAEeoQQuTQXLoMHScPVJ3ZCdlOoCERBdkt+QmqiYZNsMV 8RWH64HRIt5DfqpUrpt/5r5iTsKNRpN6b8vcdH+6AxRUWERPiAnKa8J3GLUxw3djBA l19EiPecx1aYw== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4V51HX0pXkz9rxB; Thu, 28 Mar 2024 12:18:15 +0100 (CET) From: Ihor Radchenko <yantar92@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87v856wrj1.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost> <87v856wrj1.fsf@HIDDEN> Date: Thu, 28 Mar 2024 11:18:23 +0000 Message-ID: <87r0futxj4.fsf@localhost> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (---) Theodor Thornhill <theo@HIDDEN> writes: > Not sure I understand what you mean. I tried it again, but this time the > call is 100000 times and in an existing file on my system which is > deeply nested. I run emacs with `emacs -Q` from a build on > `30b1b0d7cd8e4d46a601e9737350cda970f6bab0`. > > the relevant part from the profile this time: > ``` > 15478 72% - command-execute > 15440 72% - funcall-interactively > 15439 72% - eval-last-sexp > 15439 72% - #<compiled-function 0C4> > 15439 72% - elisp--eval-last-sexp > 15436 71% - eval > 15436 71% - benchmark-call > 15434 71% - #<lambda E8B> > 15434 71% - file-truename > 13536 63% - file-truename > 12224 57% - file-truename > ... > To me this looks like it spends a lot of time in recursive calls No. It is just that your `file-truename' is native-compiled and the profiler is unable to get the details from inside native subr code. You can re-evaluate the defun to reveal the details in the profiler output. Or use Emacs compiled without native-compilation support. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:00:02 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:00:02 2024 Received: from localhost ([127.0.0.1]:39184 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpnUG-0001ps-HY for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:00:01 -0400 Received: from out-175.mta0.migadu.com ([2001:41d0:1004:224b::af]:55273) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpnUD-0001ox-Kw for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 06:59:59 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711623590; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=zch7rFV8HCf+VNhzYWcqY5WKqV7oAXOYHpMMUreB8pg=; b=ZXmm7iPhSQ/USZPana6jrNNid6YYfuIF4juD+Yr+1QbZ0jJaMCqcRPXuq10RV67f8aGqe7 nZuXJbIqCNJhlzFdlkIt/KX788uq3D0uMY+tXrGtI0kUbLcUiY0wPheiU0KQmsYZ7O2Gwa eE2Cr5bZqOVxWB5sqqBBLaUGwMqOtQ7HZklaMgkTvpv95RuXBY8KPbCVoqgIA0TejrpEfp iRlCdfl+YGKzxTITGSnMA98fIY4ASIagfHToyBrcdBYpzcjtIU2hpXDR8F/Hf9VKc+FWIs 38QJUaKCiN0wQLmwqP4qx6ZNnjIybnyc+ReHkgyZrfKkC6jSxUEARSqt0Zue4Q== From: Theodor Thornhill <theo@HIDDEN> To: Ihor Radchenko <yantar92@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87jzlmd831.fsf@localhost> References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost> Date: Thu, 28 Mar 2024 11:59:46 +0100 Message-ID: <87v856wrj1.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (-) Ihor Radchenko <yantar92@HIDDEN> writes: > Theodor Thornhill via "Bug reports for GNU Emacs, the Swiss army knife > of text editors" <bug-gnu-emacs@HIDDEN> writes: > >> Firstly, I'll show some benchmarks >> >> ``` >> ;; Emacs 29 branch >> >> (benchmark-run 10000 >> (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el")) >> ;; (1.810892642 1 0.051070616) >> ... >> Below are the profiles and the patch. On my system I needed to `ln -s >> lisp/loadup.el .` to make it compile. Not sure if that is due to >> differences between old and new `file-truename`, or something else. > > The profiles look fishy. For example, in emacs-30-before > Not sure I understand what you mean. I tried it again, but this time the call is 100000 times and in an existing file on my system which is deeply nested. I run emacs with `emacs -Q` from a build on `30b1b0d7cd8e4d46a601e9737350cda970f6bab0`. the relevant part from the profile this time: ``` 15478 72% - command-execute 15440 72% - funcall-interactively 15439 72% - eval-last-sexp 15439 72% - #<compiled-function 0C4> 15439 72% - elisp--eval-last-sexp 15436 71% - eval 15436 71% - benchmark-call 15434 71% - #<lambda E8B> 15434 71% - file-truename 13536 63% - file-truename 12224 57% - file-truename 10970 51% - file-truename 9673 45% - file-truename 8468 39% - file-truename 7420 34% - file-truename 6374 29% - file-truename 5286 24% - file-truename 4275 19% - file-truename 3313 15% - file-truename 2454 11% - file-truename 1652 7% - file-truename 984 4% - file-truename 376 1% file-truename 1 0% time-since 1 0% execute-extended-command ``` To me this looks like it spends a lot of time in recursive calls Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 09:22:31 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 05:22:31 2024 Received: from localhost ([127.0.0.1]:39056 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rplxu-0002mf-Rp for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 05:22:30 -0400 Received: from mout02.posteo.de ([185.67.36.66]:41263) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <yantar92@HIDDEN>) id 1rplxs-0002lw-1L for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 05:22:28 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 0EF61240101 for <70036 <at> debbugs.gnu.org>; Thu, 28 Mar 2024 10:22:20 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1711617741; bh=CQxQxrYYSQz5C5oja1BEDF67crzNOJ/4OtY8Tmxs/a0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type: From; b=TiCzphK2zW/+Upcg27LORp+hlFxfF7zUaIV9Gye6a4gjWVtGUTrVr1YZ8qVe+g7Ck kPcZXdfBKI5FzdZSMOxEP1bc6EjId0ynwKYNXvGwJkgRb+e7RY5uQ4iK/DXHEvWEt2 BF80AV3/AL0kg0KuGFsnbwXJfTLYnl533RN64bcQc8AIRjwDwGNZ2zsmNqxxFV4xK1 kGJJzc+1v2wgv5LwXAv34tgfk2HETNYTkgm3+JaeV8Ylt6dSJXsJCxSeTyzViVVCW9 lyncKzvyJqU73q6L6jtuKyodQ45ZKWJZNYYlAiIPonPHHk9JU2CuSF30DpEe+XIf79 j5H3JzNZaOmHA== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4V4yjk71Lpz9rxB; Thu, 28 Mar 2024 10:22:18 +0100 (CET) From: Ihor Radchenko <yantar92@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87le63xzjt.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> Date: Thu, 28 Mar 2024 09:22:26 +0000 Message-ID: <87jzlmd831.fsf@localhost> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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> --=-=-= Content-Type: text/plain Theodor Thornhill via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> writes: > Firstly, I'll show some benchmarks > > ``` > ;; Emacs 29 branch > > (benchmark-run 10000 > (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el")) > ;; (1.810892642 1 0.051070616) > ... > Below are the profiles and the patch. On my system I needed to `ln -s > lisp/loadup.el .` to make it compile. Not sure if that is due to > differences between old and new `file-truename`, or something else. The profiles look fishy. For example, in emacs-30-before 73 15% - file-truename 73 is ~0.073 seconds, which cannot be right if you profiled the above `benchmark-run'. I tried to record the profiles on my side, using the above `benchmark-run' call, and what I am seeing is that most of the CPU time is already spend in C subrs: 1285 17% + file-name-nondirectory 1250 16% Automatic GC 1182 15% + file-symlink-p 1060 14% + file-name-case-insensitive-p 495 6% + find-file-name-handler 451 6% + file-name-as-directory 425 5% + file-name-directory 401 5% - directory-file-name 398 5% + setq I am attaching my profile, as saved via M-x profiler-report-write-profile. You can view it via M-x profile-report-find-profile At least, the number of calls to `file-name-nondirectory' can be trivially reduced in the `file-truename' code - it is called up to three times in a row. --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=profile-emacs-master.eld Content-Transfer-Encoding: base64 Cltwcm9maWxlci1wcm9maWxlICIyOC4xIiBjcHUgI3MoaGFzaC10YWJsZSB0ZXN0IGVxdWFsIGRh dGEgKFsicmVkaXNwbGF5X2ludGVybmFsIChDIGZ1bmN0aW9uKSIgIygicmVkaXNwbGF5IiAwIDkg KGhlbHAtYXJncyAocmVkaXNwbGF5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygibm90bXVjaC1zaG93LWNvbW1hbmQtaG9vayIgMCAyNSAoaGVscC1hcmdzIChu b3RtdWNoLXNob3ctY29tbWFuZC1ob29rKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5p bCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCJdIDcgWyJyZWRpc3BsYXlfaW50ZXJuYWwg KEMgZnVuY3Rpb24pIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAi bmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIl0gMTEgWyMoImZp bGUtbmFtZS1jYXNlLWluc2Vuc2l0aXZlLXAiIDAgMjggKGhlbHAtYXJncyAoZmlsZS1uYW1lLWNh c2UtaW5zZW5zaXRpdmUtcCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImFuZCIgMCAzIChoZWxwLWFyZ3MgKGFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChs ZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAy IChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp bGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3Rvcnki IDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA5 NzMgWyMoImZpbGUtc3ltbGluay1wIiAwIDE0IChoZWxwLWFyZ3MgKGZpbGUtc3ltbGluay1wKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygic2V0cSIgMCA0ICho ZWxwLWFyZ3MgKHNldHEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10 cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9u IGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g LiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFw ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p KSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMg LiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5 bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1k YXRhIChsYW1iZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8v cGFyc2UvdGhhdC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5l bCIpKSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0y LCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQg Zm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAg MTQgKGhlbHAtYXJncyAoYmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4 cCIgMCAyMSAoaGVscC1hcmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4i IDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAg KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91 Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1v ZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg LiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVz aC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1i dXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0 dG9uKSkgYnV0dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxh c3Qtc2V4cF0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAi bW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGln aGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRp dmUtZWxpc3AgZXZhbC1sYXN0LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpXSA2OCBbIygiZmls ZS1uYW1lLW5vbmRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtbm9uZGlyZWN0 b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXF1YWwi IDAgNSAoaGVscC1hcmdzIChlcXVhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFy Z3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0 IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5h bWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhl bHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAo aWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAy IChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzNjEgWyMoImZp bGUtbmFtZS1ub25kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVj dG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFwcGx5 IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJ0cmFtcC1ydW4tcmVhbC1oYW5kbGVyIiAwIDIyIChoZWxwLWFyZ3MgKHRy YW1wLXJ1bi1yZWFsLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJ0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDM0IChoZWxw LWFyZ3MgKHRyYW1wLWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IiAw IDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlcXVhbCIgMCA1IChoZWxwLWFyZ3MgKGVxdWFs KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAo aGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg Iygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMg KGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAo ZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAxNiBbIygiZmluZC1maWxlLW5hbWUtaGFuZGxlciIg MCAyMiAoaGVscC1hcmdzIChmaW5kLWZpbGUtbmFtZS1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAo aGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmls ZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRp cmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0 b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMzg1IFsjKCJmaWxlLXN5bWxpbmstcCIg MCAxNCAoaGVscC1hcmdzIChmaWxlLXN5bWxpbmstcCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoInNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAw IDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUi IDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJn cyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1l LWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpXSAxMTE0IFsjKCJmaWxlLW5hbWUtZGlyZWN0b3J5IiAwIDE5IChoZWxwLWFy Z3MgKGZpbGUtbmFtZS1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1h cmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVu YW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyICho ZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAg MiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChs ZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIg MCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSldIDM1MyBbIygiZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdz IChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiZXF1YWwiIDAgNSAoaGVscC1hcmdzIChlcXVhbCkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUg KGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZp bGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1k aXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlm IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKV0gMzg5IFsjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1 ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxl LW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3Rv cnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAg MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIg KGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmls ZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIg MCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVs cC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo Im9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMjQgWyMoImZpbGUtbmFtZS1hcy1kaXJlY3Rvcnki IDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo IndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzICho ZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZp bGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdz IChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKV0gNDIzIFsjKCJjb25jYXQiIDAgNiAoaGVscC1hcmdzIChjb25j YXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRxIiAw IDQgKGhlbHAtYXJncyAoc2V0cSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbmQiIDAgNCAoaGVscC1hcmdzIChjb25kKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIg MCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5z LS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz aC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1 dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNj cmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93 LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1 dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4g YmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1i ZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhh dC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRl Z29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERp c3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2Nr LWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAt YXJncyAoYmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAo aGVscC1hcmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChh Y3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2Ny ZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4t ZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBr ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1 dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24p ICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgy NyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0 dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0g Ml0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwg UkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZv bnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3Ag ZXZhbC1sYXN0LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rp b24gRDg1PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAg KGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5 bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0 b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo bW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNl LTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJh Y2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9y d2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWygmcmVzdCBfaXQpICIICSFcMjExElwyMDciIFth ZC0tYWRkb2l0LWZ1bmN0aW9uIGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRlcm5hbCBhZC1yZXR1cm4t dmFsdWVdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1v dXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hs aWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJldmFsLXNleHAtZnUt Zmxhc2gtZG9pdC1zaW1wbGUiIDAgMzAgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRv aXQtc2ltcGxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi ZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQiIDAgMjMgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZs YXNoLWRvaXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJl c2YtZmxhc2gtZG9pdCIgMCAxNCAoaGVscC1hcmdzIChlc2YtZmxhc2gtZG9pdCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFkLUFkdmljZS1ldmFsLWxhc3Qt c2V4cCIgMCAyNCAoaGVscC1hcmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTAgWyMoImZpbGUtbmFtZS1kaXJl Y3RvcnkiIDAgMTkgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3Ip IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3 aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRhIDM3 Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0 b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAo bW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2Ut MiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJk LWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1i dXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3JrL3Nv bWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBlci9k dXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhl bHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNl LWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImJl bmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFyZ3Mg KGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlbGlz cC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1zZXhw KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxl ZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9u IGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXIt bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1i dXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNl KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNr dGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkg KDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIgW25p bCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0 b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5 IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24p KSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRvbiAo dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChldmFsLWxhc3Qtc2V4 cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMt LWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNo LWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0 dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2Ny ZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ct bGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0 dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBi YWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1soJnJl c3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qtc2V4 cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug YnV0dG9uKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlIiAwIDMwIChoZWxwLWFy Z3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpXSA1MSBbIygiZGlyZWN0b3J5LWZpbGUtbmFtZSIgMCAxOSAo aGVscC1hcmdzIChkaXJlY3RvcnktZmlsZS1uYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygic2V0cSIgMCA0IChoZWxwLWFyZ3MgKHNldHEpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3Rv cnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIg KGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKV0gMzcyIFsjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1l IiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxw LWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlm KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAo aGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1 IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChm aWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMt ZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMjUgWyMoImZpbmQtZmlsZS1u YW1lLWhhbmRsZXIiIDAgMjIgKGhlbHAtYXJncyAoZmluZC1maWxlLW5hbWUtaGFuZGxlcikgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo IndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzICho ZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZp bGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdz IChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFy Z3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVu YW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1i ZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAo a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv bikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht b3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2Ut MiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFj a3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3 YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dv cmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1 cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9u IHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIg bW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSld IDQ2IFsjKCJmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFt ZS1ub25kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJjb25jYXQiIDAgNiAoaGVscC1hcmdzIChjb25jYXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0cSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJp ZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndo aWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxw LWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUt bmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChv cikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpXSAzODMgWyMoImZpbGUtbmFtZS1jYXNlLWluc2Vuc2l0aXZlLXAiIDAgMjggKGhlbHAtYXJn cyAoZmlsZS1uYW1lLWNhc2UtaW5zZW5zaXRpdmUtcCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImFuZCIgMCAzIChoZWxwLWFyZ3MgKGFuZCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAo b3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAg MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdz ICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFt ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRh IDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFw ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p KSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91 c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIg LiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3 YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2Fy ZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3Jr L3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBl ci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0 IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1v dXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMo ImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFy Z3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJl bGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1z ZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21w aWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0 aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFk ZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg LiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz aC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1m YWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChi YWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9u KSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIg W25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBi dXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBi b2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0 b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRv biAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChldmFsLWxhc3Qt c2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rpb24gaGVscC1m bnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBw dXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNo c2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xs b3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gt YnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkg LiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1so JnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qt c2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1s aW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0 aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZh Y2UgYnV0dG9uKSldIDg3IFsjKCJ0cmFtcC1ydW4tcmVhbC1oYW5kbGVyIiAwIDIyIChoZWxwLWFy Z3MgKHRyYW1wLXJ1bi1yZWFsLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJ0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDM0 IChoZWxwLWFyZ3MgKHRyYW1wLWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtbm9uZGlyZWN0 b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJjb25jYXQiIDAgNiAoaGVscC1hcmdz IChjb25jYXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJz ZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0cSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGly ZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSldIDQgWyMoImV4cGFuZC1maWxlLW5hbWUiIDAgMTYgKGhlbHAtYXJncyAoZXhwYW5kLWZp bGUtbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNv bmNhdCIgMCA2IChoZWxwLWFyZ3MgKGNvbmNhdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoInNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29uZCIg MCA0IChoZWxwLWFyZ3MgKGNvbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGxhbWJkYSAz N0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAo dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkg KG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNl LTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4g cHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2Fy ZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQt YnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJkYSBuaWwgKGZpbGUtdHJ1ZW5hbWUgIn4vV29yay9z b21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0L2lzL3ZlcnkvZGVlcC9kZWVwL2RlZXAvc3VwZXIv ZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBo ZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3Vz ZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJi ZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1hcmdzIChiZW5jaG1hcmstY2FsbCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwiIDAgNCAoaGVscC1hcmdz IChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZWxp c3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxIChoZWxwLWFyZ3MgKGVsaXNwLS1ldmFsLWxhc3Qtc2V4 cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGls ZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlv biBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVy LWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4g cHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFj ZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFj a3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikp ICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDciIFtu aWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0 dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9k eSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9u KSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBldmFsLWxhc3Qtc2V4cD4iIDIwIDM0IChidXR0b24g KHQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGhlbHAtYXJncyAoZXZhbC1sYXN0LXNl eHApKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBEODU+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5z LS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz aC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1 dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNj cmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93 LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1 dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4g YmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbKCZy ZXN0IF9pdCkgIggJIVwyMTESXDIwNyIgW2FkLS1hZGRvaXQtZnVuY3Rpb24gZXZhbC1sYXN0LXNl eHAtYXJnLWludGVybmFsIGFkLXJldHVybi12YWx1ZV0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGlu ayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlv bidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNl IGJ1dHRvbikpICMoImV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSIgMCAzMCAoaGVscC1h cmdzIChldmFsLXNleHAtZnUtZmxhc2gtZG9pdC1zaW1wbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsLXNleHAtZnUtZmxhc2gtZG9pdCIgMCAyMyAo aGVscC1hcmdzIChldmFsLXNleHAtZnUtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImVzZi1mbGFzaC1kb2l0IiAwIDE0IChoZWxwLWFyZ3Mg KGVzZi1mbGFzaC1kb2l0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSldIDQzIFsjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdz IChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFy Z3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVu YW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1u YW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5 KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSldIDMyIFsjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAo aGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNw bGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0 b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsg LiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikg a2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dh cmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmls IChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92 ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0 IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkg dGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2Ug YnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAtYXJncyAo YmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAoaGVscC1h cmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChhY3Rpb24g aGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRv d24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAg KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikp IChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAu IHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXlt YXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRh dGEgI1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0gMl0gY2F0 ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBE aXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9j ay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3AgZXZhbC1s YXN0LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gRDg1 PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0 b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAo bW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2Ut MiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJk LWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1i dXR0b24pKSBidXR0b24tZGF0YSAjWygmcmVzdCBfaXQpICIICSFcMjExElwyMDciIFthZC0tYWRk b2l0LWZ1bmN0aW9uIGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRlcm5hbCBhZC1yZXR1cm4tdmFsdWVd IDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIs IFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBm b250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJldmFsLXNleHAtZnUtZmxhc2gt ZG9pdC1zaW1wbGUiIDAgMzAgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2lt cGxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1z ZXhwLWZ1LWZsYXNoLWRvaXQiIDAgMjMgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRv aXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlc2YtZmxh c2gtZG9pdCIgMCAxNCAoaGVscC1hcmdzIChlc2YtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFkLUFkdmljZS1ldmFsLWxhc3Qtc2V4cCIg MCAyNCAoaGVscC1hcmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFw cGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1s YXN0LXNleHAiIDAgMTQgKGhlbHAtYXJncyAoZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDUwOT4i IDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAg KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91 Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1v ZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg LiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVz aC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1i dXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0 dG9uKSkgYnV0dG9uLWRhdGEgI1syNTcgIlwzMDIBIVwyMTEQXDMwMwkhXDIwMw4AXDMwNCBcMjEw XDMwNQFgXCJcMjA3IiBbZXJvcy0tbGFzdC1yZXN1bHQgZXJvcy0taW5zcGVjdC1idWZmZXItbmFt ZSBldmFsLWxhc3Qtc2V4cCBnZXQtYnVmZmVyIGVyb3MtaW5zcGVjdC1sYXN0LXJlc3VsdCBlcm9z LS1ldmFsLW92ZXJsYXldIDUgKCIvaG9tZS95YW50YXI5Mi8uZW1hY3MuZC9zdHJhaWdodC9idWls ZC9lcm9zL2Vyb3MuZWxjIiAuIDY0MzEpICJQIl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1 dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJv ZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRv bikpXSA0IFsjKCJmaW5kLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDIyIChoZWxwLWFyZ3MgKGZpbmQt ZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi ZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAo YWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNj cmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVu LWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUg a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1i dXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u KSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAo Mjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1 dHRvbi1kYXRhIChsYW1iZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3Bh dGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAv ZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJt b3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdo bGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNh bGwiIDAgMTQgKGhlbHAtYXJncyAoYmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxh c3Qtc2V4cCIgMCAyMSAoaGVscC1hcmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9u IENCOD4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1l dmFsLWxhc3Qtc2V4cF0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAt ZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZh Y2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vi ci1uYXRpdmUtZWxpc3AgZXZhbC1sYXN0LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8 Y29tcGlsZWQtZnVuY3Rpb24gRDg1PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1m dW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo aGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz ZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91 c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1h cCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1 dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWygmcmVzdCBfaXQpICII CSFcMjExElwyMDciIFthZC0tYWRkb2l0LWZ1bmN0aW9uIGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRl cm5hbCBhZC1yZXR1cm4tdmFsdWVdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24g dCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBt b3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAj KCJldmFsLXNleHAtZnUtZmxhc2gtZG9pdC1zaW1wbGUiIDAgMzAgKGhlbHAtYXJncyAoZXZhbC1z ZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQiIDAgMjMgKGhlbHAtYXJncyAo ZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJlc2YtZmxhc2gtZG9pdCIgMCAxNCAoaGVscC1hcmdzIChlc2YtZmxhc2gt ZG9pdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFkLUFk dmljZS1ldmFsLWxhc3Qtc2V4cCIgMCAyNCAoaGVscC1hcmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0 LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gNjQgWyMo InNldGNhciIgMCA2IChoZWxwLWFyZ3MgKHNldGNhcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5 IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAo aGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChm aWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDE4IFsjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAw IDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi b3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3 aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVs cC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5 LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24p IChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3du IC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBt b3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5 bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQt YnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmlsIChm aWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5 L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZv bGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhl IGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0 dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAtYXJncyAoYmVu Y2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAoaGVscC1hcmdz IChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChhY3Rpb24gaGVs cC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g LiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1 c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRv dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChm b2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1 c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAg KDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEg I1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0gMl0gY2F0ZWdv cnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNw bGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1m YWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3AgZXZhbC1sYXN0 LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBo ZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpXSAyOCBbIygibGV0IiAwIDMgKGhlbHAtYXJncyAo bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUi IDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJn cyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1l LWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hp bGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAg MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMt ZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMjQg WyMoImNvbnMiIDAgNCAoaGVscC1hcmdzIChjb25zKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiY29ucyIgMCA0IChoZWxwLWFyZ3MgKGNvbnMpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRjYXIiIDAgNiAoaGVscC1h cmdzIChzZXRjYXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxl KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRp cmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKV0gNiBbIygiZXEiIDAgMiAoaGVscC1hcmdzIChlcSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJn cyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQi IDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUt YXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0 KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVl bmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAo aGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDExIFsjKCJvciIgMCAyIChoZWxw LWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhl bHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUt dHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIj PGxhbWJkYSAzN0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5 bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5l IGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gt YnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRv bikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpICht b3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIg LiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAu IGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJkYSBuaWwgKGZpbGUtdHJ1ZW5hbWUg In4vV29yay9zb21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0L2lzL3ZlcnkvZGVlcC9kZWVwL2Rl ZXAvc3VwZXIvZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBi dXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBi b2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0 b24pKSAjKCJiZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1hcmdzIChiZW5jaG1hcmstY2FsbCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwiIDAgNCAo aGVscC1hcmdzIChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiZWxpc3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxIChoZWxwLWFyZ3MgKGVsaXNwLS1ldmFs LWxhc3Qtc2V4cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo IiM8Y29tcGlsZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxh eS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u KSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht b3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93 biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4g bW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtl eW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJk LWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMDFcMzAw IVwyMDciIFtuaWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1s aW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0 aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZh Y2UgYnV0dG9uKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBldmFsLWxhc3Qtc2V4cD4iIDIwIDM0 IChidXR0b24gKHQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGhlbHAtYXJncyAoZXZh bC1sYXN0LXNleHApKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBEODU+IiAyMCAyMyAoYWN0aW9u IGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g LiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFw ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p KSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMg LiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5 bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1k YXRhICNbKCZyZXN0IF9pdCkgIggJIVwyMTESXDIwNyIgW2FkLS1hZGRvaXQtZnVuY3Rpb24gZXZh bC1sYXN0LXNleHAtYXJnLWludGVybmFsIGFkLXJldHVybi12YWx1ZV0gMl0gY2F0ZWdvcnkgdCBm b2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRo ZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1 dHRvbiBmYWNlIGJ1dHRvbikpICMoImV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSIgMCAz MCAoaGVscC1hcmdzIChldmFsLXNleHAtZnUtZmxhc2gtZG9pdC1zaW1wbGUpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsLXNleHAtZnUtZmxhc2gtZG9p dCIgMCAyMyAoaGVscC1hcmdzIChldmFsLXNleHAtZnUtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA3IFsjKCJhcHBseSIgMCA1IChoZWxwLWFy Z3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi dHJhbXAtcnVuLXJlYWwtaGFuZGxlciIgMCAyMiAoaGVscC1hcmdzICh0cmFtcC1ydW4tcmVhbC1o YW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidHJh bXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFuZGxlciIgMCAzNCAoaGVscC1hcmdzICh0cmFtcC1j b21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiZmlsZS1zeW1saW5rLXAiIDAgMTQgKGhlbHAtYXJncyAoZmlsZS1z eW1saW5rLXApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJz ZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0cSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGly ZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSldIDMgWyMoIjEtIiAwIDIgKGhlbHAtYXJncyAoMS0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRjYXIiIDAgNiAoaGVscC1hcmdzIChzZXRjYXIp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1 IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChm aWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9u IGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXIt bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1i dXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNl KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNr dGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkg KDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmlsIChmaWxlLXRydWVu YW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5L2RlZXAvZGVl cC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug YnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAtYXJncyAoYmVuY2htYXJrLWNh bGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsIiAw IDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAoaGVscC1hcmdzIChlbGlzcC0t ZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRp c3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1 dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVu LWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGlu ayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9u KSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNr d2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICJcMzAx XDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0gMl0gY2F0ZWdvcnkgdCBmb2xs b3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBm dW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRv biBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3AgZXZhbC1sYXN0LXNleHA+IiAy MCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBoZWxwLWFyZ3Mg KGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gRDg1PiIgMjAgMjMgKGFj dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3 IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0 b24tZGF0YSAjWygmcmVzdCBfaXQpICIICSFcMjExElwyMDciIFthZC0tYWRkb2l0LWZ1bmN0aW9u IGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRlcm5hbCBhZC1yZXR1cm4tdmFsdWVdIDJdIGNhdGVnb3J5 IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxh eSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFj ZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJldmFsLXNleHAtZnUtZmxhc2gtZG9pdC1zaW1wbGUi IDAgMzAgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNo LWRvaXQiIDAgMjMgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlc2YtZmxhc2gtZG9pdCIgMCAx NCAoaGVscC1hcmdzIChlc2YtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImFkLUFkdmljZS1ldmFsLWxhc3Qtc2V4cCIgMCAyNCAoaGVscC1h cmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygidHJhbXAtcnVuLXJlYWwtaGFuZGxlciIgMCAyMiAoaGVs cC1hcmdzICh0cmFtcC1ydW4tcmVhbC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygidHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFuZGxlciIg MCAzNCAoaGVscC1hcmdzICh0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWRpcmVj dG9yeSIgMCAxOSAoaGVscC1hcmdzIChmaWxlLW5hbWUtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdo aWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFz LWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFy Z3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDEwIFsj KCJlcXVhbCIgMCA1IChoZWxwLWFyZ3MgKGVxdWFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3 aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1h cy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1h cmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpXSAxMyBbIygiZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdz IChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRyYW1wLXJ1bi1yZWFsLWhhbmRsZXIi IDAgMjIgKGhlbHAtYXJncyAodHJhbXAtcnVuLXJlYWwtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRyYW1wLWNvbXBsZXRpb24tZmlsZS1uYW1l LWhhbmRsZXIiIDAgMzQgKGhlbHAtYXJncyAodHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFu ZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUt bmFtZS1ub25kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9y eSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbmNhdCIg MCA2IChoZWxwLWFyZ3MgKGNvbmNhdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoInNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVs cC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10 cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp bGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVj dG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzMSBbIygi Y29uY2F0IiAwIDYgKGhlbHAtYXJncyAoY29uY2F0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygic2V0cSIgMCA0IChoZWxwLWFyZ3MgKHNldHEpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAg MiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChs ZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIg MCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdz IChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUt YXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSldIDEzIFsjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0 KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAo aGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxl LXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAw IDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi b3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3 aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDEwIFsjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFz LWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFy Z3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0 IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5h bWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhl bHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAo aWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTAgWyMoImV4 cGFuZC1maWxlLW5hbWUiIDAgMTYgKGhlbHAtYXJncyAoZXhwYW5kLWZpbGUtbmFtZSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFwcGx5IiAwIDUgKGhlbHAt YXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJ0cmFtcC1ydW4tcmVhbC1oYW5kbGVyIiAwIDIyIChoZWxwLWFyZ3MgKHRyYW1wLXJ1bi1yZWFs LWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ0 cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDM0IChoZWxwLWFyZ3MgKHRyYW1w LWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXN5bWxpbmstcCIgMCAxNCAoaGVscC1hcmdzIChmaWxl LXN5bWxpbmstcCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo InNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGls ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1k aXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzMSBb IygiZGlyZWN0b3J5LWZpbGUtbmFtZSIgMCAxOSAoaGVscC1hcmdzIChkaXJlY3RvcnktZmlsZS1u YW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygic2V0cSIg MCA0IChoZWxwLWFyZ3MgKHNldHEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hp bGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAt YXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoIiM8bGFtYmRhIDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1m dW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo aGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz ZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91 c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1h cCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1 dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmls ZS10cnVlbmFtZSAifi9Xb3JrL3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9k ZWVwL2RlZXAvZGVlcC9zdXBlci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xs b3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBm dW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRv biBmYWNlIGJ1dHRvbikpICMoImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNo bWFyay1jYWxsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi ZXZhbCIgMCA0IChoZWxwLWFyZ3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJlbGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAo ZWxpc3AtLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAt Zm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4g cHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNo LWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3Vj aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9s bG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNo LWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5 IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNb MCAiXDMwMVwzMDAhXDIwNyIgW25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5 IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxh eSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFj ZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1z ZXhwPiIgMjAgMzQgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVs cC1hcmdzIChldmFsLWxhc3Qtc2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIw IDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRv dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hz Y3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUt bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1i dXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0 b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9u KSkgYnV0dG9uLWRhdGEgI1soJnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1m dW5jdGlvbiBldmFsLWxhc3Qtc2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBj YXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6 IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1s b2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQt c2ltcGxlIiAwIDMwIChoZWxwLWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAyNiBbIygib3IiIDAg MiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1k aXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlm IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1l IiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxw LWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlm KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAo aGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp XSAzIFsjKCJzdHJpbmc9IiAwIDcgKGhlbHAtYXJncyAoc3RyaW5nPSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGls ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1k aXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlm IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTEgWyMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyICho ZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUg KGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZp bGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1k aXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlm IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDIzIFsjKCJsZXQiIDAg MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMt ZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJp ZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJn cyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQi IDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFt ZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAt Zm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4g cHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNo LWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3Vj aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9s bG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNo LWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5 IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChs YW1iZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2Uv dGhhdC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBj YXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6 IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1s b2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhl bHAtYXJncyAoYmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAy MSAoaGVscC1hcmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygidHJhbXAtcnVuLXJlYWwtaGFuZGxlciIgMCAy MiAoaGVscC1hcmdzICh0cmFtcC1ydW4tcmVhbC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFu ZGxlciIgMCAzNCAoaGVscC1hcmdzICh0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVy KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1zeW1s aW5rLXAiIDAgMTQgKGhlbHAtYXJncyAoZmlsZS1zeW1saW5rLXApIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0cSkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo IndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzICho ZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZp bGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdz IChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJs ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVs cC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10 cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp bGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVj dG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAg MiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMzAgWyMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp bGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRhIDM3Rj4iIDkgMTIgKGFj dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3 IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0 b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3JrL3NvbWUvbG9uZy9wYXRo L3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBlci9kdXBlci9kZWVwL2Rl ZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91 c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxp Z2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImJlbmNobWFyay1jYWxs IiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFyZ3MgKGV2YWwpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlbGlzcC0tZXZhbC1sYXN0 LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBD Qjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5 bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAg KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikp IChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz ZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAu IHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dh cmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJk LWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIgW25pbCBlbGlzcC0tZXZh bC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVj aG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNl IGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCIjPHN1YnIt bmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRvbiAodCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChldmFsLWxhc3Qtc2V4cCkpKSAjKCIjPGNv bXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVu Y3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhl YWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2Ut MiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBw dXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNl LWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAg KGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0 b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1soJnJlc3QgX2l0KSAiCAkh XDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qtc2V4cC1hcmctaW50ZXJu YWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQg aGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91 c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygi ZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlIiAwIDMwIChoZWxwLWFyZ3MgKGV2YWwtc2V4 cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0IiAwIDIzIChoZWxwLWFyZ3MgKGV2 YWwtc2V4cC1mdS1mbGFzaC1kb2l0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiZXNmLWZsYXNoLWRvaXQiIDAgMTQgKGhlbHAtYXJncyAoZXNmLWZsYXNoLWRv aXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhZC1BZHZp Y2UtZXZhbC1sYXN0LXNleHAiIDAgMjQgKGhlbHAtYXJncyAoYWQtQWR2aWNlLWV2YWwtbGFzdC1z ZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiYXBwbHki IDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImV2YWwtbGFzdC1zZXhwIiAwIDE0IChoZWxwLWFyZ3MgKGV2YWwtbGFzdC1z ZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21w aWxlZC1mdW5jdGlvbiA1MDk+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0 aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFk ZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg LiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz aC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1m YWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChi YWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9u KSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMjU3ICJcMzAyASFcMjExEFwz MDMJIVwyMDMOAFwzMDQgXDIxMFwzMDUBYFwiXDIwNyIgW2Vyb3MtLWxhc3QtcmVzdWx0IGVyb3Mt LWluc3BlY3QtYnVmZmVyLW5hbWUgZXZhbC1sYXN0LXNleHAgZ2V0LWJ1ZmZlciBlcm9zLWluc3Bl Y3QtbGFzdC1yZXN1bHQgZXJvcy0tZXZhbC1vdmVybGF5XSA1ICgiL2hvbWUveWFudGFyOTIvLmVt YWNzLmQvc3RyYWlnaHQvYnVpbGQvZXJvcy9lcm9zLmVsYyIgLiA2NDMxKSAiUCJdIGNhdGVnb3J5 IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxh eSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFj ZSBidXR0b24gZmFjZSBidXR0b24pKV0gNiBbIygiZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSIgMCAy MiAoaGVscC1hcmdzIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXF1YWwiIDAgNSAoaGVscC1hcmdzIChlcXVhbCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAo aGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmls ZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo IiM8bGFtYmRhIDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBr ZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxp bmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVz aC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0 dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkg KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3Rh YiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5 IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFt ZSAifi9Xb3JrL3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAv ZGVlcC9zdXBlci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0 IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidz IGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1 dHRvbikpICMoImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxs KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0 IChoZWxwLWFyZ3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJlbGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2 YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiIzxjb21waWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNw bGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0 b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsg LiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikg a2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dh cmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwz MDAhXDIwNyIgW25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93 LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVu Y3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24g ZmFjZSBidXR0b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAg MzQgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChl dmFsLWxhc3Qtc2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rp b24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVu LWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93 biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv bikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgx MyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBr ZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9u LWRhdGEgI1soJnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBl dmFsLWxhc3Qtc2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0 IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkg dGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2Ug YnV0dG9uIGZhY2UgYnV0dG9uKSldIDM0IFsjKCJzdHJpbmc9IiAwIDcgKGhlbHAtYXJncyAoc3Ry aW5nPSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAw IDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJjb25kIiAwIDQgKGhlbHAtYXJncyAoY29uZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAo ZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFz LWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGly ZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTAgWyMo ImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImNvbmQiIDAgNCAoaGVscC1hcmdzIChjb25kKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVs cC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5 LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24p IChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3du IC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBt b3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5 bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQt YnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmlsIChm aWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5 L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZv bGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhl IGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0 dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAtYXJncyAoYmVu Y2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAoaGVscC1hcmdz IChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChhY3Rpb24gaGVs cC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g LiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1 c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRv dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChm b2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1 c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAg KDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEg I1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0gMl0gY2F0ZWdv cnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNw bGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1m YWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3AgZXZhbC1sYXN0 LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBo ZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gRDg1PiIg MjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAo dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3Vj aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9k ZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAu IHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNo LWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1 dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0 b24pKSBidXR0b24tZGF0YSAjWygmcmVzdCBfaXQpICIICSFcMjExElwyMDciIFthZC0tYWRkb2l0 LWZ1bmN0aW9uIGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRlcm5hbCBhZC1yZXR1cm4tdmFsdWVdIDJd IGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJF VDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250 LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJldmFsLXNleHAtZnUtZmxhc2gtZG9p dC1zaW1wbGUiIDAgMzAgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxl KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1zZXhw LWZ1LWZsYXNoLWRvaXQiIDAgMjMgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlc2YtZmxhc2gt ZG9pdCIgMCAxNCAoaGVscC1hcmdzIChlc2YtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFkLUFkdmljZS1ldmFsLWxhc3Qtc2V4cCIgMCAy NCAoaGVscC1hcmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5 KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1sYXN0 LXNleHAiIDAgMTQgKGhlbHAtYXJncyAoZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTAgWyMoImZpbGUtbmFtZS1ub25kaXJlY3Rvcnki IDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbmNhdCIgMCA2IChoZWxwLWFyZ3MgKGNv bmNhdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInNldHEi IDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRhIDM3Rj4iIDkgMTIg KGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hz Y3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVl bi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5l IGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gt YnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv bikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikg KDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBi dXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3JrL3NvbWUvbG9uZy9w YXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBlci9kdXBlci9kZWVw L2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAi bW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGln aGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImJlbmNobWFyay1j YWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFyZ3MgKGV2YWwpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlbGlzcC0tZXZhbC1s YXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlv biBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAo a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv bikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht b3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2Ut MiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFj a3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3 YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIgW25pbCBlbGlzcC0t ZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxw LWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1m YWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKV0gMzQgWyMo ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxl KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRp cmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUi IDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAt YXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpXSA3IFsjKCJmaWxlLW5hbWUtZGlyZWN0b3J5IiAwIDE5IChoZWxwLWFy Z3MgKGZpbGUtbmFtZS1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidHJhbXAtcnVuLXJlYWwtaGFuZGxlciIg MCAyMiAoaGVscC1hcmdzICh0cmFtcC1ydW4tcmVhbC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUt aGFuZGxlciIgMCAzNCAoaGVscC1hcmdzICh0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5k bGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1u YW1lLWRpcmVjdG9yeSIgMCAxOSAoaGVscC1hcmdzIChmaWxlLW5hbWUtZGlyZWN0b3J5KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1h cmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxw LWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRy dWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmls ZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0 b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMjEgWyMoImZpbGUtbmFtZS1ub25kaXJl Y3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFwcGx5IiAwIDUgKGhlbHAtYXJn cyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ0 cmFtcC1ydW4tcmVhbC1oYW5kbGVyIiAwIDIyIChoZWxwLWFyZ3MgKHRyYW1wLXJ1bi1yZWFsLWhh bmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ0cmFt cC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDM0IChoZWxwLWFyZ3MgKHRyYW1wLWNv bXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3Mg KGZpbGUtbmFtZS1ub25kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJlcXVhbCIgMCA1IChoZWxwLWFyZ3MgKGVxdWFsKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdo aWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFz LWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpXSAxMyBbIygibm90IiAwIDMgKGhlbHAtYXJncyAobm90KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3 aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1h cy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1h cmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVu YW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyICho ZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gNiBbIygic2V0cSIgMCA0IChoZWxw LWFyZ3MgKHNldHEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxl KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRp cmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoImlm IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1l IiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxw LWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlm KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAo aGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1 IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSldIDE1IFsjKCJjb25zIiAwIDQgKGhlbHAtYXJncyAoY29ucykgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInNldGNhciIgMCA2IChoZWxwLWFyZ3MgKHNl dGNhcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAg MiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5 IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAxMCBbIygiZmlsZS1uYW1lLW5vbmRpcmVjdG9y eSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXF1YWwiIDAgNSAoaGVscC1hcmdzIChl cXVhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAw IDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChp ZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAw IDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGxhbWJkYSAzN0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMt LWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNo LWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0 dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2Ny ZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ct bGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0 dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBi YWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJk YSBuaWwgKGZpbGUtdHJ1ZW5hbWUgIn4vV29yay9zb21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0 L2lzL3ZlcnkvZGVlcC9kZWVwL2RlZXAvc3VwZXIvZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVn b3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlz cGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2st ZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJiZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1h cmdzIChiZW5jaG1hcmstY2FsbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImV2YWwiIDAgNCAoaGVscC1hcmdzIChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZWxpc3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxICho ZWxwLWFyZ3MgKGVsaXNwLS1ldmFsLWxhc3Qtc2V4cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFj dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3 IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0 b24tZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDciIFtuaWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAy XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBS RVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9u dC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBl dmFsLWxhc3Qtc2V4cD4iIDIwIDM0IChidXR0b24gKHQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGhlbHAtYXJncyAoZXZhbC1sYXN0LXNleHApKSldIDI0IFsjKCJzdHJpbmc9IiAwIDcg KGhlbHAtYXJncyAoc3RyaW5nPSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImFuZCIgMCAzIChoZWxwLWFyZ3MgKGFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbmQiIDAgNCAoaGVscC1hcmdzIChjb25kKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIg MCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1h cmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhl bHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAo aGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmls ZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRp cmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpXSA3IFsjKCJzZXRjYXIiIDAgNiAoaGVscC1hcmdzIChzZXRjYXIpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAo aWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAg MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIg MCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1h cmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhl bHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhl bHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmls ZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3Mg KG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJn cyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5h bWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGxhbWJk YSAzN0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJkYSBuaWwgKGZpbGUtdHJ1ZW5hbWUgIn4vV29y ay9zb21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0L2lzL3ZlcnkvZGVlcC9kZWVwL2RlZXAvc3Vw ZXIvZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24g dCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBt b3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAj KCJiZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1hcmdzIChiZW5jaG1hcmstY2FsbCkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwiIDAgNCAoaGVscC1h cmdzIChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi ZWxpc3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxIChoZWxwLWFyZ3MgKGVsaXNwLS1ldmFsLWxhc3Qt c2V4cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29t cGlsZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5j dGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVh ZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0y IC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1 c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2Ut ZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAo YmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRv bikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDci IFtuaWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQg YnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3Mg Ym9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0 dG9uKSldIDMgWyMoInNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJp ZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndo aWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxw LWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUt bmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChv cikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKV0gOCBbIygic2V0cSIgMCA0IChoZWxwLWFyZ3MgKHNldHEpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFy Z3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGls ZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1h cmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5h bWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3Ip IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDcgWyMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMg KGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoIiM8bGFtYmRhIDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlz cGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0 dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24p IChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4t ZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5r IC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24p IGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3 YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5p bCAoZmlsZS10cnVlbmFtZSAifi9Xb3JrL3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMv dmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBlci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkg dCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5 IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNl IGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3Mg KGJlbmNobWFyay1jYWxsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiZXZhbCIgMCA0IChoZWxwLWFyZ3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlbGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAt YXJncyAoZWxpc3AtLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9u IGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g LiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFw ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p KSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMg LiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5 bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1k YXRhICNbMCAiXDMwMVwzMDAhXDIwNyIgW25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNh dGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDog RGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxv Y2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwt bGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gaGVscC1hcmdzIChldmFsLWxhc3Qtc2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4 NT4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAo dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkg KG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNl LTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4g cHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2Fy ZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQt YnV0dG9uKSkgYnV0dG9uLWRhdGEgI1soJnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFk ZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qtc2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVl XSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0y LCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQg Zm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNo LWRvaXQtc2ltcGxlIiAwIDMwIChoZWxwLWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNp bXBsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwt c2V4cC1mdS1mbGFzaC1kb2l0IiAwIDIzIChoZWxwLWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1k b2l0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXNmLWZs YXNoLWRvaXQiIDAgMTQgKGhlbHAtYXJncyAoZXNmLWZsYXNoLWRvaXQpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHAi IDAgMjQgKGhlbHAtYXJncyAoYWQtQWR2aWNlLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChh cHBseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwt bGFzdC1zZXhwIiAwIDE0IChoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiA1MDk+ IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFw ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRv dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpICht b2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0y IC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1 c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQt YnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1 dHRvbikpIGJ1dHRvbi1kYXRhICNbMjU3ICJcMzAyASFcMjExEFwzMDMJIVwyMDMOAFwzMDQgXDIx MFwzMDUBYFwiXDIwNyIgW2Vyb3MtLWxhc3QtcmVzdWx0IGVyb3MtLWluc3BlY3QtYnVmZmVyLW5h bWUgZXZhbC1sYXN0LXNleHAgZ2V0LWJ1ZmZlciBlcm9zLWluc3BlY3QtbGFzdC1yZXN1bHQgZXJv cy0tZXZhbC1vdmVybGF5XSA1ICgiL2hvbWUveWFudGFyOTIvLmVtYWNzLmQvc3RyYWlnaHQvYnVp bGQvZXJvcy9lcm9zLmVsYyIgLiA2NDMxKSAiUCJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBi dXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBi b2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0 b24pKSAjKCJmdW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1p bnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSld IDcgWyMoInN1YnN0cmluZyIgMCA5IChoZWxwLWFyZ3MgKHN1YnN0cmluZykgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInN0cmluZz0iIDAgNyAoaGVscC1hcmdz IChzdHJpbmc9KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi YW5kIiAwIDMgKGhlbHAtYXJncyAoYW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiY29uZCIgMCA0IChoZWxwLWFyZ3MgKGNvbmQpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxw LWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUt bmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChv cikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3Mg KHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0 IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1l KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1l LWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDMgWyMoImNhciIgMCAz IChoZWxwLWFyZ3MgKGNhcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImNvbnMiIDAgNCAoaGVscC1hcmdzIChjb25zKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygic2V0Y2FyIiAwIDYgKGhlbHAtYXJncyAoc2V0Y2FyKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1 ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIg KGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJn cyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIg MCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSldIDMgWyMoInRyYW1wLXJ1bi1yZWFsLWhhbmRsZXIiIDAgMjIgKGhlbHAtYXJncyAodHJh bXAtcnVuLXJlYWwtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoInRyYW1wLWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIiIDAgMzQgKGhlbHAt YXJncyAodHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1ub25kaXJlY3RvcnkiIDAg MjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVxdWFsIiAwIDUgKGhlbHAtYXJncyAoZXF1YWwp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUg KGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZp bGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1k aXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA3IFsj KCJjb25kIiAwIDQgKGhlbHAtYXJncyAoY29uZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10 cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp bGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVj dG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAg MiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5 IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpXSA5IFsjKCIxLSIgMCAyIChoZWxwLWFyZ3MgKDEtKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygic2V0Y2FyIiAwIDYgKGhlbHAtYXJncyAo c2V0Y2FyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hp bGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAt YXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1u YW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9y KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAo d2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQi IDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUt YXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygiY29weS1zZXF1 ZW5jZSIgMCAxMyAoaGVscC1hcmdzIChjb3B5LXNlcXVlbmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1h cmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFt ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRh IDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFw ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p KSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91 c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIg LiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3 YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2Fy ZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3Jr L3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBl ci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0 IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1v dXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMo ImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFy Z3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJl bGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1z ZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21w aWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0 aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFk ZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg LiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz aC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1m YWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChi YWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9u KSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIg W25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBi dXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBi b2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0 b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRv biAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChldmFsLWxhc3Qt c2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rpb24gaGVscC1m bnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBw dXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNo c2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xs b3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gt YnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkg LiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1so JnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qt c2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1s aW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0 aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZh Y2UgYnV0dG9uKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlIiAwIDMwIChoZWxw LWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0IiAwIDIz IChoZWxwLWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXNmLWZsYXNoLWRvaXQiIDAgMTQgKGhlbHAtYXJn cyAoZXNmLWZsYXNoLWRvaXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHAiIDAgMjQgKGhlbHAtYXJncyAoYWQtQWR2 aWNlLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSldIDQgWyMoInNldGNhciIgMCA2IChoZWxwLWFyZ3MgKHNldGNhcikgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIg KGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEz IChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCIjPGxhbWJkYSAzN0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMtLWRp c3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1 dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVu LWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGlu ayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9u KSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNr d2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJkYSBu aWwgKGZpbGUtdHJ1ZW5hbWUgIn4vV29yay9zb21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0L2lz L3ZlcnkvZGVlcC9kZWVwL2RlZXAvc3VwZXIvZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVnb3J5 IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxh eSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFj ZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJiZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1hcmdz IChiZW5jaG1hcmstY2FsbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImV2YWwiIDAgNCAoaGVscC1hcmdzIChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZWxpc3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxIChoZWxw LWFyZ3MgKGVsaXNwLS1ldmFsLWxhc3Qtc2V4cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFjdGlv biBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4t ZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3du IC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u KSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEz IC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtl eW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24t ZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDciIFtuaWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAyXSBj YXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6 IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1s b2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBldmFs LWxhc3Qtc2V4cD4iIDIwIDM0IChidXR0b24gKHQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGhlbHAtYXJncyAoZXZhbC1sYXN0LXNleHApKSldIDMgWyMoImFzc29jIiAwIDUgKGhlbHAt YXJncyAoYXNzb2MpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0 KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVl bmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAo aGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAw IDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDcgWyMoImlm IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFt ZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVs cC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChp ZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIg KGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0 KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAg NSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAo ZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFz LWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpXSAzIFsjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmls ZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIg MCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVs cC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo Im9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi d2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhl bHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmls ZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTQgWyMoImNhciIgMCAzIChoZWxw LWFyZ3MgKGNhcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo IjEtIiAwIDIgKGhlbHAtYXJncyAoMS0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJzZXRjYXIiIDAgNiAoaGVscC1hcmdzIChzZXRjYXIpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3Mg KHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0 IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1l KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1l LWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1 ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA2IFsjKCJzZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0 cSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3Mg KHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0 IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1l KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1l LWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJvciIg MCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3Mg KGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxl IiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFy Z3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFt ZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdo aWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSldIDMgWyMoImNhciIgMCAzIChoZWxwLWFyZ3MgKGNhcikgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFzc29jIiAwIDUgKGhlbHAtYXJncyAoYXNzb2Mp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAo aGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChm aWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJn cyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQi IDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5 IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAo aGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChm aWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJ0aW1lci1ldmVudC1o YW5kbGVyIiAwIDE5IChoZWxwLWFyZ3MgKHRpbWVyLWV2ZW50LWhhbmRsZXIpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJyZWRpc3BsYXkiIDAgOSAoaGVscC1h cmdzIChyZWRpc3BsYXkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJub3RtdWNoLXNob3ctY29tbWFuZC1ob29rIiAwIDI1IChoZWxwLWFyZ3MgKG5vdG11Y2gt c2hvdy1jb21tYW5kLWhvb2spIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmls IiAibmlsIiAibmlsIiAibmlsIiAibmlsIl0gNCBbIygibmF0aXZlLWVsaXNwLWxvYWQiIDAgMTcg KGhlbHAtYXJncyAobmF0aXZlLWVsaXNwLWxvYWQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDI2Qj4iIDIwIDIzIChhY3Rp b24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVu LWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93 biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv bikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgx MyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBr ZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9u LWRhdGEgI1s1MTQgIlwzMDRcMzA1XDMwM1wyNDJcIlwyMTBcMzA2AiFcMjEwXDMwNzESAFwzMTBc MzAxITBcMjEwXDMxMVwzMDIhXDMwMFwyMDMvAFwzMTIDIVwzMTNVXDIwMy8AXDMxNAEhXDIwMy8A XDMxNQFcMzAwXDMxNj1cIlwyMTBcMjEwXDMxNyBcMjA3IiBbbGF0ZSAiL3RtcC9lbWFjcy1hc3lu Yy1jb21wLXByb2ZpbGVyLVlzaWtKNC5lbCIgIi9ob21lL3lhbnRhcjkyL0dpdC9lbWFjcy9saXNw L3Byb2ZpbGVyLmVsIiAobmlsKSBydW4taG9vay13aXRoLWFyZ3MgbmF0aXZlLWNvbXAtYXN5bmMt Y3UtZG9uZS1mdW5jdGlvbnMgY29tcC1hY2NlcHQtYW5kLXByb2Nlc3MtYXN5bmMtb3V0cHV0IChl cnJvcikgZGVsZXRlLWZpbGUgY29tcC1lbC10by1lbG4tZmlsZW5hbWUgcHJvY2Vzcy1leGl0LXN0 YXR1cyAwIGZpbGUtZXhpc3RzLXAgbmF0aXZlLWVsaXNwLWxvYWQgbGF0ZSBjb21wLXJ1bi1hc3lu Yy13b3JrZXJzXSA3ICIKCihmbiBQUk9DRVNTIEVWRU5UKSJdIGNhdGVnb3J5IHQgZm9sbG93LWxp bmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rp b24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFj ZSBidXR0b24pKSAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmls IiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIl0gNDMgWyMoIm9iamVjdC1vZi1j bGFzcy1wIiAwIDE3IChoZWxwLWFyZ3MgKG9iamVjdC1vZi1jbGFzcy1wKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY2xvc3FsLW9iamVjdC0tZWllaW8tY2hp bGRwIiAwIDI3IChoZWxwLWFyZ3MgKGNsb3NxbC1vYmplY3QtLWVpZWlvLWNoaWxkcCkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNsb3NxbC0tY2xvc3FsLW9i amVjdC1wIiAwIDIzIChoZWxwLWFyZ3MgKGNsb3NxbC0tY2xvc3FsLW9iamVjdC1wKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZWllaW8tb3JlZi0tY2xvc3Fs LW9yZWYiIDAgMjMgKGhlbHAtYXJncyAoZWllaW8tb3JlZi0tY2xvc3FsLW9yZWYpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhcHBseSIgMCA1IChoZWxwLWFy Z3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi c2xvdC12YWx1ZSIgMCAxMCAoaGVscC1hcmdzIChzbG90LXZhbHVlKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1zb3VyY2UtbW0tZ2V0LXNlYXJjaC1v ci1tYXRjaC1mbnMiIDAgMzggKGhlbHAtYXJncyAoaGVsbS1zb3VyY2UtbW0tZ2V0LXNlYXJjaC1v ci1tYXRjaC1mbnMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEE1Rj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3Bs YXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRv bikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo bW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRv d24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAu IG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBr ZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2Fy ZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1syNTcgIlwzMDEB XDMwMlwiXDMwMz1cMjA0FgBcMzA0XDMwNVwzMDZcMzA3XDMwMQVcMzEwXCJcIlwzMTFcMjExJFwy MTBcMzAxAVwzMTJcIlwzMDECXDMxM1wiXDIxMVwyMDM6AFwzMTQDXDMxMlwzMTVcMzExBgZcMzE2 PT9cMjA1MQAGBlwzMTdcMzIwBghcIkRcIiNcMjEwXDI2NgJcMzAxAVwzMjFcIlwyMDNjAFwzMDEB XDMyMlwiXDIxMVwyMDNbAFwzMTQCXDMyMlwzMjNcMzI0BSEIQ1wiI1wyNjYCXDIwMmMAXDMxNAJc MzIyCEMjXDI2NgJcMzAxAVwzMjVcIlwyMDNzAFwzMTQBXDMyMlwzMjYEXDMyMlwiI1wyMTBcMzAx AVwzMjVcIj9cMjA1fwBcMzAxAVwzMjdcIlwyMTFcMjAzXDIzMABcMjExXDMzMD1cMjA0XDIzMABc MzE0AlwzMjJcMzIzXDMyNFwzMDEGB1wzMjJcIiFcMzMxXCIjXDIxMFwyMTBcMzAxAVwzMzJcIlwy MTFcMzMzXDIzMlwyMDRcMjYwAFwyMTFcMzM0PVwyMDRcMjYwAFwzMDRcMzM1XDMzNlwzMTFcMjEx JFwyMTBcMzAxAlwzMzdcIlwzNDA9XDIwNFwzMDAAXDMwNFwzNDFcMzQyXDMxMVwyMTEkXDIxMFwz MTFcMjA3IiBbaGVsbS1mdXp6eS1zZWFyY2gtZm4gc2xvdC12YWx1ZSBjYW5kaWRhdGVzIGhlbG0t Y2FuZGlkYXRlcy1pbi1idWZmZXIgY2wtLWFzc2VydGlvbi1mYWlsZWQgKGVxIChzbG90LXZhbHVl IHNvdXJjZSAnY2FuZGlkYXRlcykgJ2hlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXIpIGZvcm1hdCAi V3JvbmcgdXNhZ2Ugb2YgYGNhbmRpZGF0ZXMnIGF0dHIgaW4gYCVzJyB1c2UgYGRhdGEnIG9yIGBp bml0JyBpbnN0ZWFkIiBuYW1lIG5pbCBpbml0IGRhdGEgZWllaW8tb3NldCBkZWxxIGhlbG0tZGVm YXVsdC1pbml0LXNvdXJjZS1pbi1idWZmZXItZnVuY3Rpb24gbWFrZS1jbG9zdXJlICNbMCAiXDMw MVwzMDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwyMDMjAFwzMDVcMzAwIVwy MDMjAHJcMzAwcVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbVjAgaGVsbS1pbml0LWNhbmRp ZGF0ZXMtaW4tYnVmZmVyIGdsb2JhbCBmdW5jdGlvbnAgYnVmZmVycCBidWZmZXItbGl2ZS1wIGJ1 ZmZlci1zdHJpbmddIDRdIGZ1enp5LW1hdGNoIHNlYXJjaCBhcHBlbmQgaGVsbS1ta2xpc3QgbXVs dGltYXRjaCBoZWxtLXNvdXJjZS1tbS1nZXQtc2VhcmNoLW9yLW1hdGNoLWZucyBtaWdlbW8gbm9t dWx0aW1hdGNoIChoZWxtLW1tLTMtbWlnZW1vLXNlYXJjaCkgbWF0Y2ggKGlkZW50aXR5KSBpZGVu dGl0eSAob3IgKGVxdWFsICcoaWRlbnRpdHkpIG10YykgKGVxICdpZGVudGl0eSBtdGMpKSAiSW52 YWxpZCBzbG90IHZhbHVlIGZvciBgbWF0Y2gnIiB2b2xhdGlsZSB0IChlcSAoc2xvdC12YWx1ZSBz b3VyY2UgJ3ZvbGF0aWxlKSB0KSAiSW52YWxpZCBzbG90IHZhbHVlIGZvciBgdm9sYXRpbGUnIl0g MTIgKCIvaG9tZS95YW50YXI5Mi8uZW1hY3MuZC9zdHJhaWdodC9idWlsZC9oZWxtLWNvcmUvaGVs bS1zb3VyY2UuZWxjIiAuIDQxNzI0KV0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0 IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1v dXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMo ImFwcGx5IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDE4MD4iIDIwIDIzIChhY3Rp b24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVu LWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93 biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv bikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgx MyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBr ZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9u LWRhdGEgI1sxMjggIlwzMDJcMjExXDIwMxEAXDIxMUBcMzAzAQRcIlwyNjYCQVwyMDIBAFwyMTBc MzAzXDMwMAJcIlwzMDFcMjExXDIwMycAXDIxMUBcMzAzAQVcIlwyNjYCQVwyMDIXAFwyMTBcMjA3 IiBbI1syNTcgIlwzMDEBXDMwMlwiXDMwMz1cMjA0FgBcMzA0XDMwNVwzMDZcMzA3XDMwMQVcMzEw XCJcIlwzMTFcMjExJFwyMTBcMzAxAVwzMTJcIlwzMDECXDMxM1wiXDIxMVwyMDM6AFwzMTQDXDMx MlwzMTVcMzExBgZcMzE2PT9cMjA1MQAGBlwzMTdcMzIwBghcIkRcIiNcMjEwXDI2NgJcMzAxAVwz MjFcIlwyMDNjAFwzMDEBXDMyMlwiXDIxMVwyMDNbAFwzMTQCXDMyMlwzMjNcMzI0BSEIQ1wiI1wy NjYCXDIwMmMAXDMxNAJcMzIyCEMjXDI2NgJcMzAxAVwzMjVcIlwyMDNzAFwzMTQBXDMyMlwzMjYE XDMyMlwiI1wyMTBcMzAxAVwzMjVcIj9cMjA1fwBcMzAxAVwzMjdcIlwyMTFcMjAzXDIzMABcMjEx XDMzMD1cMjA0XDIzMABcMzE0AlwzMjJcMzIzXDMyNFwzMDEGB1wzMjJcIiFcMzMxXCIjXDIxMFwy MTBcMzAxAVwzMzJcIlwyMTFcMzMzXDIzMlwyMDRcMjYwAFwyMTFcMzM0PVwyMDRcMjYwAFwzMDRc MzM1XDMzNlwzMTFcMjExJFwyMTBcMzAxAlwzMzdcIlwzNDA9XDIwNFwzMDAAXDMwNFwzNDFcMzQy XDMxMVwyMTEkXDIxMFwzMTFcMjA3IiBbaGVsbS1mdXp6eS1zZWFyY2gtZm4gc2xvdC12YWx1ZSBj YW5kaWRhdGVzIGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXIgY2wtLWFzc2VydGlvbi1mYWlsZWQg KGVxIChzbG90LXZhbHVlIHNvdXJjZSAnY2FuZGlkYXRlcykgJ2hlbG0tY2FuZGlkYXRlcy1pbi1i dWZmZXIpIGZvcm1hdCAiV3JvbmcgdXNhZ2Ugb2YgYGNhbmRpZGF0ZXMnIGF0dHIgaW4gYCVzJyB1 c2UgYGRhdGEnIG9yIGBpbml0JyBpbnN0ZWFkIiBuYW1lIG5pbCBpbml0IGRhdGEgZWllaW8tb3Nl dCBkZWxxIGhlbG0tZGVmYXVsdC1pbml0LXNvdXJjZS1pbi1idWZmZXItZnVuY3Rpb24gbWFrZS1j bG9zdXJlICNbMCAiXDMwMVwzMDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwy MDMjAFwzMDVcMzAwIVwyMDMjAHJcMzAwcVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbVjAg aGVsbS1pbml0LWNhbmRpZGF0ZXMtaW4tYnVmZmVyIGdsb2JhbCBmdW5jdGlvbnAgYnVmZmVycCBi dWZmZXItbGl2ZS1wIGJ1ZmZlci1zdHJpbmddIDRdIGZ1enp5LW1hdGNoIHNlYXJjaCBhcHBlbmQg aGVsbS1ta2xpc3QgbXVsdGltYXRjaCBoZWxtLXNvdXJjZS1tbS1nZXQtc2VhcmNoLW9yLW1hdGNo LWZucyBtaWdlbW8gbm9tdWx0aW1hdGNoIChoZWxtLW1tLTMtbWlnZW1vLXNlYXJjaCkgbWF0Y2gg KGlkZW50aXR5KSBpZGVudGl0eSAob3IgKGVxdWFsICcoaWRlbnRpdHkpIG10YykgKGVxICdpZGVu dGl0eSBtdGMpKSAiSW52YWxpZCBzbG90IHZhbHVlIGZvciBgbWF0Y2gnIiB2b2xhdGlsZSB0IChl cSAoc2xvdC12YWx1ZSBzb3VyY2UgJ3ZvbGF0aWxlKSB0KSAiSW52YWxpZCBzbG90IHZhbHVlIGZv ciBgdm9sYXRpbGUnIl0gMTIgKCIvaG9tZS95YW50YXI5Mi8uZW1hY3MuZC9zdHJhaWdodC9idWls ZC9oZWxtLWNvcmUvaGVsbS1zb3VyY2UuZWxjIiAuIDQxNzI0KV0gbmlsICgjWzI1NyAiXDMwMAFc MzAxXDMwMiNcMjEwXDMwMAFcMzAzXDMwNCNcMjEwXDMwMAFcMzA1XDMwNiNcMjEwXDMwMAFcMzA3 XDMxMCNcMjEwXDMwMAFcMzExXDMxMiNcMjA3IiBbZWllaW8tb3NldCBhY3Rpb24gaGVsbS10eXBl LWNvbW1hbmQtYWN0aW9ucyBjb2VyY2UgaGVsbS1zeW1ib2xpZnkgcGVyc2lzdGVudC1hY3Rpb24g aGVsbS1NLXgtcGVyc2lzdGVudC1hY3Rpb24gcGVyc2lzdGVudC1oZWxwICJEZXNjcmliZSB0aGlz IGNvbW1hbmQiIGdyb3VwIGhlbG0tY29tbWFuZF0gNSAoIi9ob21lL3lhbnRhcjkyLy5lbWFjcy5k L3N0cmFpZ2h0L2J1aWxkL2hlbG0vaGVsbS10eXBlcy5lbGMiIC4gMjkzMildICNbMjU3ICJcMzAx AVwzMDJcIlwyMDQNAFwzMDMBXDMwMlwzMDQjXDIxMFwzMDEBXDMwNVwiXDIwMxwAXDMwNlwzMDdc MzAxA1wzMTBcIlwiXDIxMFwzMDEBXDMxMVwiXDIxMVwyMDNRAFwyMTE5XDIwMy4AXDIxMUpcMjAy LwBcMjExXDMwMQNcMzEyXCJcMjA1PgBcMzEzIFwzMTQBXDMxNVwzMTYjXDIxMFwyMTFcMjAzSQBc MzE3AQNcIlwyMDJKAAFcMzAzBVwzMTEDI1wyNjYEXDIxMFwzMDEBXDMyMFwiXDIxMVwyMDNoAFwz MDMCXDMyMVwzMjIEBgZcIiNcMjY2AlwyMDJxAFwzMDMCXDMyMVwzMjMFISNcMjY2AlwzMDEBXDMy NFwiXDIwM1wyMzcACFwyMDRcMjAzAFwzMjVcMzAwXDMyNlwzMjdcMjExJFwyMTBcMzAzAVwzMzBc MzAxBFwzMzBcIlwyMTFcMjAzXDIzMgBcMzMxXDMzMgIhCENcIlwyNjIBXDIwMlwyMzUAXDIxMAhD I1wyMTBcMzAxAVwzMzNcIlwyMDRcMzAyAFwzMDMBXDMzMFwzMDEEXDMzMFwiXDIxMVwyMDNcMjc1 AFwzMzFcMzMyAiFcMzM0Q1wiXDI2MgFcMjAyXDMwMABcMjEwXDMzNEMjXDIxMFwzMzVcMzAxAlwz MzZcIiFcMjQ3XDIwM1wzNTAAXDMwMwFcMzMwXDMwMQRcMzMwXCJcMjExXDIwM1wzNDMAXDMzMVwz MzICIVwzMzdDXCJcMjYyAVwyMDJcMzQ2AFwyMTBcMzM3QyNcMjEwXDMwMQFcMzQwXCJcMjExXDIw MwIBXDIxMTlcMjAzXDM3MgBcMjExSlwyMDJcMzczAFwyMTFcMzAzA1wzNDADI1wyNjYCXDIxMFwz MDEBXDMxMFwiXDMwMQJcMzQxXCJcMjExXDIwMyQBXDM0MgEhXDIwMxoBXDIxMTlcMjAzHwFcMjEx OlwyMDMkAVwzMDZcMzQzA1wiXDIxMFwyMTBcMzAxAlwzNDRcIlwyMTFcMjA1QQFcMzQyASFcMjAz OAFcMjExOVwyMDM9AVwyMTE6XDIwNUEBXDMwNlwzNDUDXCJcMjA3IiBbaGVsbS1mdXp6eS1zb3J0 LWZuIHNsb3QtdmFsdWUgZ3JvdXAgZWllaW8tb3NldCBoZWxtIGRlbGF5ZWQgd2FybiAiRGVwcmVj YXRlZCB1c2FnZSBvZiBoZWxtIGBkZWxheWVkJyBzbG90IGluIGAlcyciIG5hbWUga2V5bWFwIG11 c3QtbWF0Y2ggbWFrZS1zcGFyc2Uta2V5bWFwIGRlZmluZS1rZXkgIg0iIGhlbG0tY29uZmlybS1h bmQtZXhpdC1taW5pYnVmZmVyIG1ha2UtY29tcG9zZWQta2V5bWFwIHBlcnNpc3RlbnQtaGVscCBo ZWFkZXItbGluZSBoZWxtLXNvdXJjZS0tcGVyc2lzdGVudC1oZWxwLXN0cmluZyBoZWxtLXNvdXJj ZS0taGVhZGVyLWxpbmUgZnV6enktbWF0Y2ggY2wtLWFzc2VydGlvbi1mYWlsZWQgIldyb25nIHR5 cGUgYXJndW1lbnQgZnVuY3Rpb25wOiBuaWwiIG5pbCBmaWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNm b3JtZXIgYXBwZW5kIGhlbG0tbWtsaXN0IG5vaGlnaGxpZ2h0IGhlbG0tZnV6enktaGlnaGxpZ2h0 LW1hdGNoZXMgaGVsbS1pbnRlcnByZXQtdmFsdWUgbXVsdGlsaW5lIGhlbG0tbXVsdGlsaW5lLXRy YW5zZm9ybWVyIHJlcXVpcmVzLXBhdHRlcm4gYmVmb3JlLWluaXQtaG9vayBmdW5jdGlvbnAgIkhl bG0gc291cmNlIGAlcyc6IGJlZm9yZS1pbml0LWhvb2sgU2hvdWxkIGJlIGRlZmluZWQgYXMgYSBz eW1ib2wiIGFmdGVyLWluaXQtaG9vayAiSGVsbSBzb3VyY2UgYCVzJzogYWZ0ZXItaW5pdC1ob29r IFNob3VsZCBiZSBkZWZpbmVkIGFzIGEgc3ltYm9sIl0gOSAoIi9ob21lL3lhbnRhcjkyLy5lbWFj cy5kL3N0cmFpZ2h0L2J1aWxkL2hlbG0tY29yZS9oZWxtLXNvdXJjZS5lbGMiIC4gNDE3MjQpXSkg YXBwbHldIDcgIgoKKGZuICZyZXN0IEFSR1MpIl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1 dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJv ZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRv bikpICMoImFwcGx5IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLS1zZXR1cC1zb3VyY2UiIDAgMTggKGhlbHAt YXJncyAoaGVsbS0tc2V0dXAtc291cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1tYWtlLXNvdXJjZSIgMCAxNiAoaGVscC1hcmdzIChoZWxtLW1h a2Utc291cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14 LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmdW5jYWxsLWludGVyYWN0aXZl bHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDcgWyMoImhlbG0tY29tcC1yZWFkLWdldC1j YW5kaWRhdGVzIiAwIDI5IChoZWxwLWFyZ3MgKGhlbG0tY29tcC1yZWFkLWdldC1jYW5kaWRhdGVz KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxl ZC1mdW5jdGlvbiBDMEE+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9u IGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXIt bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1i dXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNl KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNr dGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkg KDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMlwzMDFcMzAwXDMwM1wy MTFcMzA0JVwyMDciIFtjb21tYW5kcCAjPG9iYXJyYXkgbj05ODkxOT4gaGVsbS1jb21wLXJlYWQt Z2V0LWNhbmRpZGF0ZXMgbmlsICIiXSA2XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9u IHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIg bW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkg IygiIzxjb21waWxlZC1mdW5jdGlvbiAzMDU+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNw bGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0 b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsg LiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikg a2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dh cmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwz MDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwyMDMjAFwzMDVcMzAwIVwyMDMj AHJcMzAwcVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbI1swICJcMzAyXDMwMVwzMDBcMzAz XDIxMVwzMDQlXDIwNyIgW2NvbW1hbmRwICM8b2JhcnJheSBuPTk4OTE5PiBoZWxtLWNvbXAtcmVh ZC1nZXQtY2FuZGlkYXRlcyBuaWwgIiJdIDZdIGhlbG0taW5pdC1jYW5kaWRhdGVzLWluLWJ1ZmZl ciBnbG9iYWwgZnVuY3Rpb25wIGJ1ZmZlcnAgYnVmZmVyLWxpdmUtcCBidWZmZXItc3RyaW5nXSA0 XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBS RVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9u dC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMt ZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1z b3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt LWNvbXB1dGUtYXR0ci1pbi1zb3VyY2VzIiAwIDI4IChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1h dHRyLWluLXNvdXJjZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJoZWxtLWluaXRpYWwtc2V0dXAiIDAgMTggKGhlbHAtYXJncyAoaGVsbS1pbml0aWFsLXNl dHVwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1p bml0aWFsaXplIiAwIDE1IChoZWxwLWFyZ3MgKGhlbG0taW5pdGlhbGl6ZSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhl bHAtYXJncyAoaGVsbS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0p IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC1y ZWFkLWV4dGVuZGVkLWNvbW1hbmQiIDAgMzAgKGhlbHAtYXJncyAoaGVsbS1NLXgtcmVhZC1leHRl bmRlZC1jb21tYW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS1NLXgiIDAgOCAoaGVscC1hcmdzIChoZWxtLU0teCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZ1bmNhbGwtaW50ZXJhY3RpdmVseSIgMCAyMSAo aGVscC1hcmdzIChmdW5jYWxsLWludGVyYWN0aXZlbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJjb21tYW5kLWV4ZWN1dGUiIDAgMTUgKGhlbHAtYXJncyAo Y29tbWFuZC1leGVjdXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIm5pbCIgIm5pbCJdIDI2IFsjKCJoZWxtLWluaXQtY2FuZGlkYXRlcy1pbi1idWZmZXIiIDAg MzAgKGhlbHAtYXJncyAoaGVsbS1pbml0LWNhbmRpZGF0ZXMtaW4tYnVmZmVyKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiAz MDU+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5 bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAg KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikp IChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz ZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAu IHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dh cmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJk LWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwy MDIkAFwzMDRcMzAwIVwyMDMjAFwzMDVcMzAwIVwyMDMjAHJcMzAwcVwyMTBcMzA2IClcMjAyJABc MzAwXCJcMjA3IiBbI1swICJcMzAyXDMwMVwzMDBcMzAzXDIxMVwzMDQlXDIwNyIgW2NvbW1hbmRw ICM8b2JhcnJheSBuPTk4OTE5PiBoZWxtLWNvbXAtcmVhZC1nZXQtY2FuZGlkYXRlcyBuaWwgIiJd IDZdIGhlbG0taW5pdC1jYW5kaWRhdGVzLWluLWJ1ZmZlciBnbG9iYWwgZnVuY3Rpb25wIGJ1ZmZl cnAgYnVmZmVyLWxpdmUtcCBidWZmZXItc3RyaW5nXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug YnV0dG9uKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAt YXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtYXR0ci1pbi1zb3VyY2Vz IiAwIDI4IChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1hdHRyLWluLXNvdXJjZXMpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWluaXRpYWwtc2V0dXAi IDAgMTggKGhlbHAtYXJncyAoaGVsbS1pbml0aWFsLXNldHVwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbml0aWFsaXplIiAwIDE1IChoZWxwLWFy Z3MgKGhlbG0taW5pdGlhbGl6ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAoaGVsbS1pbnRlcm5hbCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAo aGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC1yZWFkLWV4dGVuZGVkLWNvbW1hbmQiIDAg MzAgKGhlbHAtYXJncyAoaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgiIDAgOCAoaGVscC1h cmdzIChoZWxtLU0teCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImZ1bmNhbGwtaW50ZXJhY3RpdmVseSIgMCAyMSAoaGVscC1hcmdzIChmdW5jYWxsLWludGVy YWN0aXZlbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJj b21tYW5kLWV4ZWN1dGUiIDAgMTUgKGhlbHAtYXJncyAoY29tbWFuZC1leGVjdXRlKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIm5pbCIgIm5pbCIgIm5pbCJdIDQg WyMoIndpbmRvdy0tbWF5YmUtcmFpc2UtZnJhbWUiIDAgMjUgKGhlbHAtYXJncyAod2luZG93LS1t YXliZS1yYWlzZS1mcmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImRpc3BsYXktYnVmZmVyLXBvcC11cC13aW5kb3ciIDAgMjggKGhlbHAtYXJncyAoZGlz cGxheS1idWZmZXItcG9wLXVwLXdpbmRvdykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImRpc3BsYXktYnVmZmVyLS1tYXliZS1wb3AtdXAtd2luZG93IiAwIDM1 IChoZWxwLWFyZ3MgKGRpc3BsYXktYnVmZmVyLS1tYXliZS1wb3AtdXAtd2luZG93KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZGlzcGxheS1idWZmZXItLW1h eWJlLXBvcC11cC1mcmFtZS1vci13aW5kb3ciIDAgNDQgKGhlbHAtYXJncyAoZGlzcGxheS1idWZm ZXItLW1heWJlLXBvcC11cC1mcmFtZS1vci13aW5kb3cpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJkaXNwbGF5LWJ1ZmZlciIgMCAxNCAoaGVscC1hcmdzIChk aXNwbGF5LWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImhlbG0tZGVmYXVsdC1kaXNwbGF5LWJ1ZmZlciIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWRl ZmF1bHQtZGlzcGxheS1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJoZWxtLWRpc3BsYXktYnVmZmVyIiAwIDE5IChoZWxwLWFyZ3MgKGhlbG0tZGlz cGxheS1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJn cyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl bG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxw LWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVs bS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmdW5j YWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2ZWx5 KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29tbWFuZC1l eGVjdXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhlY3V0ZSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICJuaWwiICJuaWwiXSAzIFsjKCJoZWxtLWNhbmRp ZGF0ZS1idWZmZXIiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS1jYW5kaWRhdGUtYnVmZmVyKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1tYWtlLXNlcGFy YXRvciIgMCAxOSAoaGVscC1hcmdzIChoZWxtLW1ha2Utc2VwYXJhdG9yKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXItMSIg MCAyMiAoaGVscC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lci0xKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXIiIDAgMjAg KGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIg MCAzMiAoaGVscC1hcmdzIChoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0 ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIiIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNz LWZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFy Z3MgKGhlbG0tY29tcHV0ZS1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS0tY29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhl bG0tLWNvbGxlY3QtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImhlbG0tdXBkYXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20t bWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5h bCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAt YXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0t eC1yZWFkLWV4dGVuZGVkLWNvbW1hbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJoZWxtLU0teCIgMCA4IChoZWxwLWFyZ3MgKGhlbG0tTS14KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZnVuY2FsbC1pbnRlcmFjdGl2 ZWx5IiAwIDIxIChoZWxwLWFyZ3MgKGZ1bmNhbGwtaW50ZXJhY3RpdmVseSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCIjPGNvbXBpbGVkLWZ1bmN0aW9u IEUzNT4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA1CQBcMzAyXDMwMCFcMjA3 IiBbIzxraWxsZWQgYnVmZmVyPiBidWZmZXItbmFtZSBraWxsLWJ1ZmZlcl0gMl0gY2F0ZWdvcnkg dCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5 IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNl IGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzICho ZWxwLWFyZ3MgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXItMSIgMCAyMiAoaGVs cC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXIiIDAgMjAgKGhlbHAtYXJn cyAoaGVsbS1NLXgtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIgMCAzMiAoaGVs cC1hcmdzIChoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5k aWRhdGUtdHJhbnNmb3JtZXIiIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNzLWZpbHRlcmVk LWNhbmRpZGF0ZS10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0t Y29tcHV0ZS1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS0tY29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxl Y3QtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImhlbG0tdXBkYXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZl ciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAo aGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVs bSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14 LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0teC1yZWFkLWV4 dGVuZGVkLWNvbW1hbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJoZWxtLU0teCIgMCA4IChoZWxwLWFyZ3MgKGhlbG0tTS14KSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZnVuY2FsbC1pbnRlcmFjdGl2ZWx5IiAwIDIx IChoZWxwLWFyZ3MgKGZ1bmNhbGwtaW50ZXJhY3RpdmVseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpXSA0IFsjKCJ3aGVyZS1pcy1pbnRlcm5hbCIgMCAxNyAoaGVs cC1hcmdzICh3aGVyZS1pcy1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzIChoZWxwLWFyZ3Mg KHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXItMSIgMCAyMiAoaGVscC1hcmdzICho ZWxtLU0teC10cmFuc2Zvcm1lci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXIiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1N LXgtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIgMCAzMiAoaGVscC1hcmdzICho ZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJh bnNmb3JtZXIiIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNhbmRpZGF0 ZS10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1t YXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs bS0tY29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxlY3QtbWF0Y2hl cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBk YXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAo aGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdz IChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXJlYWQtZXh0 ZW5kZWQtY29tbWFuZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0teC1yZWFkLWV4dGVuZGVkLWNv bW1hbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt LU0teCIgMCA4IChoZWxwLWFyZ3MgKGhlbG0tTS14KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiZnVuY2FsbC1pbnRlcmFjdGl2ZWx5IiAwIDIxIChoZWxwLWFy Z3MgKGZ1bmNhbGwtaW50ZXJhY3RpdmVseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpXSA3IFsjKCJpbnRlcm4iIDAgNiAoaGVscC1hcmdzIChpbnRlcm4pIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzdWJzdGl0dXRlLWNvbW1h bmQta2V5cyIgMCAyMyAoaGVscC1hcmdzIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cykgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9y bWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVy IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1z b3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2Up IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nl c3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0t cHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAo aGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1h cmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0 ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcmVh ZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhlbHAtYXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1 ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t aW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAoaGVsbS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxt KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0 IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJoZWxtLU0teC1yZWFkLWV4dGVuZGVkLWNvbW1hbmQiIDAgMzAgKGhlbHAtYXJncyAo aGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgiIDAgOCAoaGVscC1hcmdzIChoZWxtLU0teCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZ1bmNhbGwtaW50 ZXJhY3RpdmVseSIgMCAyMSAoaGVscC1hcmdzIChmdW5jYWxsLWludGVyYWN0aXZlbHkpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygic3Vic3RpdHV0ZS1j b21tYW5kLWtleXMiIDAgMjMgKGhlbHAtYXJncyAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFu c2Zvcm1lci0xIiAwIDIyIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zv cm1lciIgMCAyMCAoaGVscC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZy b20tc291cmNlIiAwIDMyIChoZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291 cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1w cm9jZXNzLWZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzICho ZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAg MjAgKGhlbHAtYXJncyAoaGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhl bHAtYXJncyAoaGVsbS0tY29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11 cGRhdGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt LXJlYWQtZnJvbS1taW5pYnVmZmVyIiAwIDI1IChoZWxwLWFyZ3MgKGhlbG0tcmVhZC1mcm9tLW1p bmlidWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo ZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAo aGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0i IDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxwLWFy Z3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVsbS1N LXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmdW5jYWxs LWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2ZWx5KSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29tbWFuZC1leGVj dXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhlY3V0ZSkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJzdHJpbmctd2lkdGgiIDAgMTIgKGhlbHAt YXJncyAoc3RyaW5nLXdpZHRoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygidHJ1bmNhdGUtc3RyaW5nLXRvLXdpZHRoIiAwIDI0IChoZWxwLWFyZ3MgKHRydW5j YXRlLXN0cmluZy10by13aWR0aCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbiIgMCAzMyAoaGVscC1h cmdzIChoZWxtLWdldC1maXJzdC1saW5lLWRvY3VtZW50YXRpb24pIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lci0xIiAwIDIy IChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lciIgMCAyMCAoaGVs cC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMy IChoZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRlcmVk LWNhbmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3MtZmls dGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAo aGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0t Y29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXJlYWQtZnJvbS1taW5p YnVmZmVyIiAwIDI1IChoZWxwLWFyZ3MgKGhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVybmFsIiAw IDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdz IChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs bS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXJl YWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygicmVwbGFjZS1idWZmZXItaW4t d2luZG93cyIgMCAyNSAoaGVscC1hcmdzIChyZXBsYWNlLWJ1ZmZlci1pbi13aW5kb3dzKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygia2lsbC1idWZmZXIiIDAg MTEgKGhlbHAtYXJncyAoa2lsbC1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDA5ND4iIDIwIDIzIChhY3Rpb24g aGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRv d24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAg KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikp IChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAu IHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXlt YXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRh dGEgI1swICJcMzAxXDMwMCFcMjA1CQBcMzAyXDMwMCFcMjA3IiBbIzxraWxsZWQgYnVmZmVyPiBi dWZmZXItbmFtZSBraWxsLWJ1ZmZlcl0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRv biB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHki IG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikp ICMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzIChoZWxwLWFyZ3MgKHN1YnN0aXR1dGUt Y29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS1NLXgtdHJhbnNmb3JtZXItMSIgMCAyMiAoaGVscC1hcmdzIChoZWxtLU0teC10cmFu c2Zvcm1lci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aGVsbS1NLXgtdHJhbnNmb3JtZXIiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3Jt ZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWFw cGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIgMCAzMiAoaGVscC1hcmdzIChoZWxtLWFwcGx5LWZ1 bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIiIDAg NDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1l cikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY29t cHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1tYXRjaGVzKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS0tY29sbGVjdC1t YXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxlY3QtbWF0Y2hlcykgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBkYXRlIiAwIDExICho ZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzICho ZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVy bmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIg MCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFu ZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0teC1yZWFkLWV4dGVuZGVkLWNvbW1hbmQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gNCBbIygiaW5zZXJ0IiAwIDYg KGhlbHAtYXJncyAoaW5zZXJ0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiaGVsbS1pbnNlcnQtbWF0Y2giIDAgMTcgKGhlbHAtYXJncyAoaGVsbS1pbnNlcnQt bWF0Y2gpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt LXJlbmRlci1zb3VyY2UiIDAgMTggKGhlbHAtYXJncyAoaGVsbS1yZW5kZXItc291cmNlKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS11cGRhdGUiIDAg MTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyIiAwIDI1IChoZWxwLWFy Z3MgKGhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0t aW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo ZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1j b21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAw IDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJmdW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVu Y2FsbC1pbnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiY29tbWFuZC1leGVjdXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhlY3V0 ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICJuaWwiICJuaWwi ICJuaWwiICJuaWwiXSAzIFsjKCJoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyIiAwIDI1IChoZWxw LWFyZ3MgKGhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhl bG0taW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRl ZC1jb21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFu ZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14 IiAwIDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJmdW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAo ZnVuY2FsbC1pbnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiY29tbWFuZC1leGVjdXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhl Y3V0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICJuaWwiICJu aWwiICJuaWwiICJuaWwiICJuaWwiICJuaWwiICJuaWwiICJuaWwiXSAxMyBbInJlZGlzcGxheV9p bnRlcm5hbCAoQyBmdW5jdGlvbikiICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUg KGhlbHAtYXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJn cyAoaGVsbS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC1yZWFkLWV4 dGVuZGVkLWNvbW1hbmQiIDAgMzAgKGhlbHAtYXJncyAoaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1j b21tYW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs bS1NLXgiIDAgOCAoaGVscC1hcmdzIChoZWxtLU0teCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImZ1bmNhbGwtaW50ZXJhY3RpdmVseSIgMCAyMSAoaGVscC1h cmdzIChmdW5jYWxsLWludGVyYWN0aXZlbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJjb21tYW5kLWV4ZWN1dGUiIDAgMTUgKGhlbHAtYXJncyAoY29tbWFu ZC1leGVjdXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIm5p bCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCJdIDg2IFsjKCJyZS1zZWFyY2gt Zm9yd2FyZCIgMCAxNyAoaGVscC1hcmdzIChyZS1zZWFyY2gtZm9yd2FyZCkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2FuZGlkYXRlcy1pbi1idWZm ZXItc2VhcmNoLWRlZmF1bHQtZm4iIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1jYW5kaWRhdGVzLWlu LWJ1ZmZlci1zZWFyY2gtZGVmYXVsdC1mbikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gRERFPiIgMjAgMjMgKGFjdGlvbiBo ZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93 biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4g cHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAo dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkg KGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4g cHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1h cCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0 YSAjWzAgIlwzMTBcMzExXDMxMlwiXDMxM1wzMDFcMjM2XDMxNCAeH1wzMTVcMzE2XDMwNVwzMTdc MjExAjpcMjAzJgECQFwyNjICXDMwM2JcMjEwXDMyMDEnAFwzMjFcMzA3ITBcMjAyKwBcMjEwXDIw MjEAXDIwMzEAXDMxNnlcMjEwXDMxN1wyMTFcMjExXDIxMVwyMTEGBlwzMDchXDIxMVwyNjIGXDIw MxIBBDpcMjAzTABcMzE2eVwzMTVVXDIwMk4AbT9cMjAzEgEGCVwzMDRXXDIwMxIBXDMyMlwzMDYG BlwyMDNqAAYGPFwyMDNqAAYGXDIwMm8AXDMyMyBcMzI0IERcIlwyNjIEXDMwMlwyMDNcMjExAFwz MjVcMzE1XDMyNgYGI1wyMDRcMjExAFwzMjcEXDMyNlwzMDIGByEjXDI2MgRcMzMwBAYNXCJcMjYy AwYKXDIwM1wyNDAAAlwyMDNcMjQwAAIGCVVcMjA0XDI0NAACXDIwNA0BA1wzMzFcMjMwXDIwNA0B XDMwMlwyMDRcMjYzAAQ6XDIwM1wyNzMAXDMzMgRcMzA3XDMwMCNcMjAzDQFcMzMzBAYKBg4jXDIx MFwzMzRcMzM1XDMwMVwiXDIxMVwyMDMCAQQ6XDIwM1wzMjUABEFcMjAyXDMyNgAEATxcMjAzXDM3 NABcMzM2AiFcMjA0XDM3NAABXDMxNwE6XDIwM1wzNjcAXDIxMFwyMTFAXDIxMQMhXDI2MggBQVwy NjICXDIwMlwzNDMAXDI2NgRcMjAyAwEBASFcMjYyBlwyMTBcMjEwBglUXDI2MgoDAkJcMjYyAlwy MTBcMzE3XDIwMjYAXDIxMFwyNjZcMjAzXDIzN1wyMzcBXDI0NFwyNjIBA1RcMjYyBAJBXDI2MgNc MjAyEABcMjExXDIzNylcMjA3IiBbbmlsICgobmFtZSAuICJFbWFjcyBDb21tYW5kcyBoaXN0b3J5 IikgKGluaXQgI1swICJcMzAxXDMwMlwzMDNcMzAwIVwyMDMNAFwzMDAgXDIwMiQAXDMwNFwzMDAh XDIwMyMAXDMwNVwzMDAhXDIwMyMAclwzMDBxXDIxMFwzMDYgKVwyMDIkAFwzMDBcIlwyMDciIFsj WzAgIlwzMDJcMzAxXDIwNgYAXDMwM1wzMDBcMzA0XDIxMVwzMDUlXDIwNyIgW2NvbW1hbmRwIG5p bCBoZWxtLWNvbXAtcmVhZC1nZXQtY2FuZGlkYXRlcyBleHRlbmRlZC1jb21tYW5kLWhpc3Rvcnkg bmlsICIiXSA2XSBoZWxtLWluaXQtY2FuZGlkYXRlcy1pbi1idWZmZXIgZ2xvYmFsIGZ1bmN0aW9u cCBidWZmZXJwIGJ1ZmZlci1saXZlLXAgYnVmZmVyLXN0cmluZ10gNF0pIChjYW5kaWRhdGVzIC4g aGVsbS1jYW5kaWRhdGVzLWluLWJ1ZmZlcikgKGNsZWFudXAgLiBoZWxtLU0teC0tdW53aW5kLWZv cm1zKSAoa2V5bWFwIGtleW1hcCAoa2V5bWFwICgxMyAuIGhlbG0tY29uZmlybS1hbmQtZXhpdC1t aW5pYnVmZmVyKSkga2V5bWFwICgyOSAuIGhlbG0tTS14LXRvZ2dsZS1zaG9ydC1kb2MpICgyMSAu IGhlbG0tTS14LXVuaXZlcnNhbC1hcmd1bWVudCkga2V5bWFwICgyNyBrZXltYXAgKDEzIC4gaGVs bS1jci1lbXB0eS1zdHJpbmcpKSAoQy1yZXR1cm4gLiBoZWxtLWNyLWVtcHR5LXN0cmluZykga2V5 bWFwICgyMSAuIGhlbG0tZXhlY3V0ZS1wZXJzaXN0ZW50LWFjdGlvbikgKGYxMiAuICNbMCAiXDMw MVwzMDAhXDIwNyIgWzExIGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmMTEg LiAjWzAgIlwzMDFcMzAwIVwyMDciIFsxMCBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBu aWxdKSAoZjEwIC4gI1swICJcMzAxXDMwMCFcMjA3IiBbOSBoZWxtLXNlbGVjdC1udGgtYWN0aW9u XSAyIG5pbCBuaWxdKSAoZjkgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFs4IGhlbG0tc2VsZWN0LW50 aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmOCAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzcgaGVsbS1z ZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGY3IC4gI1swICJcMzAxXDMwMCFcMjA3IiBb NiBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAoZjYgLiAjWzAgIlwzMDFcMzAw IVwyMDciIFs1IGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmNSAuICNbMCAi XDMwMVwzMDAhXDIwNyIgWzQgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGY0 IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbMyBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBu aWxdKSAoZjMgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFsyIGhlbG0tc2VsZWN0LW50aC1hY3Rpb25d IDIgbmlsIG5pbF0pIChmMiAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzEgaGVsbS1zZWxlY3QtbnRo LWFjdGlvbl0gMiBuaWwgbmlsXSkgKG1lbnUtYmFyIGtleW1hcCAoaGVscC1tZW51IGtleW1hcCAo ZGVzY3JpYmUga2V5bWFwIChkZXNjcmliZS1tb2RlIC4gaGVsbS1oZWxwKSkpKSAoaGVscCBrZXlt YXAgKDEwOSAuIGhlbG0taGVscCkpICgyMyAuIGhlbG0taGVsbS15YW5rLXRleHQtYXQtcG9pbnQt d2l0aC1zdWJrZXlzKSAoZjEgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFswIGhlbG0tc2VsZWN0LW50 aC1hY3Rpb25dIDIgbmlsIG5pbF0pICg4IC4gYmFja3dhcmQtZGVsZXRlLWNoYXItdW50YWJpZnkp ICgyMCAuIGhlbG0tdG9nZ2xlLXJlc3BsaXQtYW5kLXN3YXAtd2luZG93cykgKEMtdGFiIC4gdW5k ZWZpbmVkKSAoNjcxMDg4OTcgLiBoZWxtLXRvZ2dsZS1zdXNwZW5kLXVwZGF0ZSkgKDI2IC4gaGVs bS10b2dnbGUtZnVsbC1mcmFtZSkgKDMga2V5bWFwICgzMzU1NDQ1NSAuIHlhbnQvdG9nZ2xlLXJl ZmlsZS10by10YXNrcykgKDU3IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBU IVwyMDciIFs4IG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmls IG5pbF0pICg1NiAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBb NyBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAo NTUgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzYgbmlsIGhl bG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU0IC4gI1sw ICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs1IG5pbCBoZWxtLWV4ZWN1 dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MyAuICNbMCAiXDMwMlwz MDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNCBuaWwgaGVsbS1leGVjdXRlLXNlbGVj dGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAoNTIgLiAjWzAgIlwzMDJcMzAxXDIwMwsA XDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzMgbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0 aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUxIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wy MDINAFwzMDBUIVwyMDciIFsyIG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1u dGhdIDIgbmlsIG5pbF0pICg1MCAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAw VCFcMjA3IiBbMSBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5p bCBuaWxdKSAoNDkgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIg WzAgbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkg KDExMCAuIGhlbG0taGVsbS1ydW4tY3ljbGUtcmVzdW1lLXdpdGgtc3Via2V5cykgKDEwOCAuIGhl bG0tZGlzcGxheS1saW5lLW51bWJlcnMtbW9kZSkgKDYyIC4gaGVsbS10b2dnbGUtdHJ1bmNhdGUt bGluZSkgKDIxIC4gaGVsbS1yZWZyZXNoKSAoNiAuIGhlbG0tZm9sbG93LW1vZGUpICg5IC4gaGVs bS1pbnNlcnQtb3ItY29weSkgKDExIC4gaGVsbS1raWxsLXNlbGVjdGlvbi1hbmQtcXVpdCkgKDI1 IC4gaGVsbS15YW5rLXNlbGVjdGlvbikgKDM3IC4gaGVsbS1leGNoYW5nZS1taW5pYnVmZmVyLWFu ZC1oZWFkZXItbGluZSkgKDk1IC4gaGVsbS10b2dnbGUtZnVsbC1mcmFtZSkgKDQ1IC4gaGVsbS1z d2FwLXdpbmRvd3MpKSAoNjcxMDg5ODcgLiBoZWxtLWVubGFyZ2Utd2luZG93KSAoNjcxMDg5ODkg LiBoZWxtLW5hcnJvdy13aW5kb3cpICgxOCAuIHVuZGVmaW5lZCkgKDE5IC4gdW5kZWZpbmVkKSAo MjQga2V5bWFwICg1NyAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3 IiBbOCBuZWdhdGl2ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmls IG5pbF0pICg1NiAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBb NyBuZWdhdGl2ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5p bF0pICg1NSAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNiBu ZWdhdGl2ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0p ICg1NCAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNSBuZWdh dGl2ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1 MyAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNCBuZWdhdGl2 ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MiAu ICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMyBuZWdhdGl2ZSBo ZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MSAuICNb MCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMiBuZWdhdGl2ZSBoZWxt LWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MCAuICNbMCAi XDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMSBuZWdhdGl2ZSBoZWxtLWV4 ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg0OSAuICNbMCAiXDMw MlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMCBuZWdhdGl2ZSBoZWxtLWV4ZWN1 dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICgyIC4gaGVsbS1yZXN1bWUt bGlzdC1idWZmZXJzLWFmdGVyLXF1aXQpICg5OCAuIGhlbG0tcmVzdW1lLXByZXZpb3VzLXNlc3Np b24tYWZ0ZXItcXVpdCkgKDYgLiBoZWxtLXF1aXQtYW5kLWZpbmQtZmlsZSkpICgxMjcgLiBoZWxt LWRlbGV0ZS1jaGFyLWJhY2t3YXJkKSAoMTEgLiBoZWxtLWRlbGV0ZS1taW5pYnVmZmVyLWNvbnRl bnRzKSAoNjcxMDg4OTYgLiBoZWxtLXRvZ2dsZS12aXNpYmxlLW1hcmstZm9yd2FyZCkgKDAgLiBo ZWxtLXRvZ2dsZS12aXNpYmxlLW1hcmspIChDLU0tdXAgLiBoZWxtLXNjcm9sbC1vdGhlci13aW5k b3ctZG93bikgKEMtTS1kb3duIC4gaGVsbS1zY3JvbGwtb3RoZXItd2luZG93KSAoTS1wcmlvciAu IGhlbG0tc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duKSAoTS1uZXh0IC4gaGVsbS1zY3JvbGwtb3Ro ZXItd2luZG93KSAoMTIgLiBoZWxtLXJlY2VudGVyLXRvcC1ib3R0b20tb3RoZXItd2luZG93KSAo bGVmdCAuIGhlbG0tcHJldmlvdXMtc291cmNlKSAocmlnaHQgLiBoZWxtLW5leHQtc291cmNlKSAo MTUgLiBoZWxtLW5leHQtc291cmNlKSAoMTAgLiBoZWxtLWV4ZWN1dGUtcGVyc2lzdGVudC1hY3Rp b24pICg5IC4gaGVsbS1zZWxlY3QtYWN0aW9uKSAoMTMgLiBoZWxtLW1heWJlLWV4aXQtbWluaWJ1 ZmZlcikgKDcgLiBoZWxtLWtleWJvYXJkLXF1aXQpICgyMiAuIGhlbG0tc2Nyb2xsLWRvd24pICgy NyBrZXltYXAgKDEwNCAuIGJhY2t3YXJkLWtpbGwtd29yZCkgKDggLiBiYWNrd2FyZC1raWxsLXdv cmQpICgxMDggLiB5YW50L2hlbG0teWFuay1zZWxlY3Rpb24tb3ItZXhlY3V0ZS1wZXJzaXN0ZW50 LWFjdGlvbikgKDEwNSAuIGhlbG0tcHJldmlvdXMtc291cmNlKSAoMTA3IC4gaGVsbS1wcmV2aW91 cy1saW5lKSAoMTA2IC4gaGVsbS1uZXh0LWxpbmUpICgxMTQgLiB1bmRlZmluZWQpICgxMTAgLiBu ZXh0LWhpc3RvcnktZWxlbWVudCkgKDExMiAuIHByZXZpb3VzLWhpc3RvcnktZWxlbWVudCkgKDE5 IC4gdW5kZWZpbmVkKSAoMTggLiB1bmRlZmluZWQpICgxMTUgLiB1bmRlZmluZWQpICg1IC4gaGVs bS1kaXNwbGF5LWFsbC1zb3VyY2VzKSAoMSAuIGhlbG0tc2hvdy1hbGwtY2FuZGlkYXRlcy1pbi1z b3VyY2UpICg4NSAuIGhlbG0tdW5tYXJrLWFsbCkgKDk3IC4gaGVsbS1tYXJrLWFsbCkgKDEwOSAu IGhlbG0tdG9nZ2xlLWFsbC1tYXJrcykgKDQxIC4gaGVsbS1uZXh0LXZpc2libGUtbWFyaykgKDQw IC4gaGVsbS1wcmV2LXZpc2libGUtbWFyaykgKDkxKSAoMzIgLiBoZWxtLXRvZ2dsZS12aXNpYmxl LW1hcmstYmFja3dhcmQpICgzMzU1NDQ1NCAuIGhlbG0tc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3du KSAoMjUgLiBoZWxtLXNjcm9sbC1vdGhlci13aW5kb3ctZG93bikgKDIyIC4gaGVsbS1zY3JvbGwt b3RoZXItd2luZG93KSAoMTIgLiBoZWxtLXJlcG9zaXRpb24td2luZG93LW90aGVyLXdpbmRvdykg KDExMSAuIGhlbG0tbmV4dC1zb3VyY2UpICg2MiAuIGhlbG0tZW5kLW9mLWJ1ZmZlcikgKDYwIC4g aGVsbS1iZWdpbm5pbmctb2YtYnVmZmVyKSAoMTE4IC4gaGVsbS1zY3JvbGwtdXApKSAobmV4dCAu IGhlbG0tbmV4dC1wYWdlKSAocHJpb3IgLiBoZWxtLXByZXZpb3VzLXBhZ2UpIChDLXVwIC4gaGVs bS1mb2xsb3ctYWN0aW9uLWJhY2t3YXJkKSAoQy1kb3duIC4gaGVsbS1mb2xsb3ctYWN0aW9uLWZv cndhcmQpICgxNiAuIGhlbG0tcHJldmlvdXMtbGluZSkgKDE0IC4gaGVsbS1uZXh0LWxpbmUpICh1 cCAuIGhlbG0tcHJldmlvdXMtbGluZSkgKGRvd24gLiBoZWxtLW5leHQtbGluZSkga2V5bWFwICgx OCAuIGhlbG0tbWluaWJ1ZmZlci1oaXN0b3J5KSAoZXNjYXBlIC4ga2V5Ym9hcmQtcXVpdCkgKG1l bnUtYmFyIGtleW1hcCAobWluaWJ1ZiAiTWluaWJ1ZiIga2V5bWFwIChwcmV2aW91cyBtZW51LWl0 ZW0gIlByZXZpb3VzIEhpc3RvcnkgSXRlbSIgcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50IDpoZWxw ICJQdXQgcHJldmlvdXMgbWluaWJ1ZmZlciBoaXN0b3J5IGVsZW1lbnQgaW4gdGhlIG1pbmlidWZm ZXIiKSAobmV4dCBtZW51LWl0ZW0gIk5leHQgSGlzdG9yeSBJdGVtIiBuZXh0LWhpc3RvcnktZWxl bWVudCA6aGVscCAiUHV0IG5leHQgbWluaWJ1ZmZlciBoaXN0b3J5IGVsZW1lbnQgaW4gdGhlIG1p bmlidWZmZXIiKSAoaXNlYXJjaC1iYWNrd2FyZCBtZW51LWl0ZW0gIklzZWFyY2ggSGlzdG9yeSBC YWNrd2FyZCIgaXNlYXJjaC1iYWNrd2FyZCA6aGVscCAiSW5jcmVtZW50YWxseSBzZWFyY2ggbWlu aWJ1ZmZlciBoaXN0b3J5IGJhY2t3YXJkIikgKGlzZWFyY2gtZm9yd2FyZCBtZW51LWl0ZW0gIklz ZWFyY2ggSGlzdG9yeSBGb3J3YXJkIiBpc2VhcmNoLWZvcndhcmQgOmhlbHAgIkluY3JlbWVudGFs bHkgc2VhcmNoIG1pbmlidWZmZXIgaGlzdG9yeSBmb3J3YXJkIikgKHJldHVybiBtZW51LWl0ZW0g IkVudGVyIiBleGl0LW1pbmlidWZmZXIgOmtleS1zZXF1ZW5jZSAiDSIgOmhlbHAgIlRlcm1pbmF0 ZSBpbnB1dCBhbmQgZXhpdCBtaW5pYnVmZmVyIikgKHF1aXQgbWVudS1pdGVtICJRdWl0IiBhYm9y dC1yZWN1cnNpdmUtZWRpdCA6aGVscCAiQWJvcnQgaW5wdXQgYW5kIGV4aXQgbWluaWJ1ZmZlciIp ICJNaW5pYnVmIikpICgyNCBrZXltYXAgKGRvd24gLiBtaW5pYnVmZmVyLWNvbXBsZXRlLWRlZmF1 bHRzKSAodXAgLiBtaW5pYnVmZmVyLWNvbXBsZXRlLWhpc3RvcnkpKSAoMTMgLiBleGl0LW1pbmli dWZmZXIpICgxMCAuIGV4aXQtbWluaWJ1ZmZlcikgKDcgLiBhYm9ydC1taW5pYnVmZmVycykgKEMt dGFiIC4gZmlsZS1jYWNoZS1taW5pYnVmZmVyLWNvbXBsZXRlKSAoOSAuIHNlbGYtaW5zZXJ0LWNv bW1hbmQpIChYRjg2QmFjayAuIHByZXZpb3VzLWhpc3RvcnktZWxlbWVudCkgKHVwIC4gcHJldmlv dXMtbGluZS1vci1oaXN0b3J5LWVsZW1lbnQpIChwcmlvciAuIHByZXZpb3VzLWhpc3RvcnktZWxl bWVudCkgKFhGODZGb3J3YXJkIC4gbmV4dC1oaXN0b3J5LWVsZW1lbnQpIChkb3duIC4gbmV4dC1s aW5lLW9yLWhpc3RvcnktZWxlbWVudCkgKG5leHQgLiBuZXh0LWhpc3RvcnktZWxlbWVudCkgKDI3 IGtleW1hcCAoMTA1IC4gcGFyZWRpdC1jb252b2x1dGUtc2V4cCkgKDExMSAuIHBhcmVkaXQtZm9y d2FyZC1zbHVycC1zZXhwKSAoNjAgLiBtaW5pYnVmZmVyLWJlZ2lubmluZy1vZi1idWZmZXIpICgx MTQgLiBwcmV2aW91cy1tYXRjaGluZy1oaXN0b3J5LWVsZW1lbnQpICgxMTUgLiBuZXh0LW1hdGNo aW5nLWhpc3RvcnktZWxlbWVudCkgKDExMiAuIHByZXZpb3VzLWhpc3RvcnktZWxlbWVudCkgKDEx MCAuIG5leHQtaGlzdG9yeS1lbGVtZW50KSkpIChhY3Rpb24gLiBoZWxtLXR5cGUtY29tbWFuZC1h Y3Rpb25zKSAocGVyc2lzdGVudC1hY3Rpb24gLiBoZWxtLU0teC1wZXJzaXN0ZW50LWFjdGlvbikg KHBlcnNpc3RlbnQtaGVscCAuICJEZXNjcmliZSB0aGlzIGNvbW1hbmQiKSAoaGVscC1tZXNzYWdl IC4gaGVsbS1NLXgtaGVscC1tZXNzYWdlKSAocmVxdWlyZXMtcGF0dGVybiAuIDApIChmaWx0ZXJl ZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIgaGVsbS1NLXgtdHJhbnNmb3JtZXIgIzxzdWJyIEY2MTZl NmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFtYmRhXzIwPiBoZWxtLWZ1 enp5LWhpZ2hsaWdodC1tYXRjaGVzKSAodm9sYXRpbGUgLiB0KSAobWF0Y2ggaWRlbnRpdHkpIChm dXp6eS1tYXRjaCAuIHQpIChyZWRpc3BsYXkgLiBpZGVudGl0eSkgKG5vbWFyayAuIHQpIChjb2Vy Y2UgLiBoZWxtLXN5bWJvbGlmeSkgKGhlYWRlci1saW5lIC4gIygiQy11OiBEZXNjcmliZSB0aGlz IGNvbW1hbmQgKGtlZXBpbmcgc2Vzc2lvbikiIDAgMyAoZm9udC1sb2NrLWZhY2UgaGVscC1rZXkt YmluZGluZyBmYWNlIGhlbHAta2V5LWJpbmRpbmcpKSkgKHJlc3VtZSAuIGhlbG0tTS14LXJlc3Vt ZS1mbikgKG11bHRpbWF0Y2ggLiB0KSAobXVzdC1tYXRjaCAuIHQpIChncm91cCAuIGhlbG0tY29t bWFuZCkgKGRhdGEgLiAjWzAgIlwzMDJcMzAxXDIwNgYAXDMwM1wzMDBcMzA0XDIxMVwzMDUlXDIw NyIgW2NvbW1hbmRwIG5pbCBoZWxtLWNvbXAtcmVhZC1nZXQtY2FuZGlkYXRlcyBleHRlbmRlZC1j b21tYW5kLWhpc3RvcnkgbmlsICIiXSA2XSkgKGdldC1saW5lIC4gYnVmZmVyLXN1YnN0cmluZy1u by1wcm9wZXJ0aWVzKSAoc2VhcmNoIGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhlbG0tbW0tc2VhcmNo IGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4gaGVsbS1mdXp6eS1z ZWFyY2gpKSBuaWwgMCAxNTAgKGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhlbG0tbW0tc2VhcmNoIGhl bG0tY2FuZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4gaGVsbS1mdXp6eS1zZWFy Y2gpIGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAicCIgbWFrZS1oYXNoLXRhYmxlIDp0 ZXN0IGVxdWFsIGFsbG93LWR1cHMgaGVsbS1zZXQtY2FzZS1mb2xkLXNlYXJjaCAwIDEgbmlsIChp bnZhbGlkLXJlZ2V4cCkgbG9va2luZy1hdCBhcHBseSBwb3MtYm9sIHBvcy1lb2wgZ2V0LXRleHQt cHJvcGVydHkgbWF0Y2gtcGFydCBwcm9wZXJ0aXplIGdldGhhc2ggIiIgaGVsbS1zZWFyY2gtbWF0 Y2gtcGFydCBwdXRoYXNoIGFzc29jLWRlZmF1bHQgZmlsdGVyLW9uZS1ieS1vbmUgZnVuY3Rpb25w IGNhc2UtZm9sZC1zZWFyY2hdIDE4XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQg aGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91 c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygi aGVsbS0tc2VhcmNoLWZyb20tY2FuZGlkYXRlLWJ1ZmZlci0xIiAwIDM2IChoZWxwLWFyZ3MgKGhl bG0tLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tc2VhcmNoLWZyb20tY2FuZGlkYXRlLWJ1ZmZl ciIgMCAzMyAoaGVscC1hcmdzIChoZWxtLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXIpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNhbmRpZGF0 ZXMtaW4tYnVmZmVyLTEiIDAgMjcgKGhlbHAtYXJncyAoaGVsbS1jYW5kaWRhdGVzLWluLWJ1ZmZl ci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1j YW5kaWRhdGVzLWluLWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLWNhbmRpZGF0ZXMtaW4t YnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs bS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBs eS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJoZWxtLWludGVycHJldC12YWx1ZSIgMCAyMCAoaGVscC1hcmdzIChoZWxt LWludGVycHJldC12YWx1ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImhlbG0tZ2V0LWNhbmRpZGF0ZXMiIDAgMTkgKGhlbHAtYXJncyAoaGVsbS1nZXQtY2Fu ZGlkYXRlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl bG0tZ2V0LWNhY2hlZC1jYW5kaWRhdGVzIiAwIDI2IChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWNhY2hl ZC1jYW5kaWRhdGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1jb21wdXRlLW1h dGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt LS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0tY29sbGVjdC1tYXRjaGVz KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS11cGRh dGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1dCIgMCAyMCAoaGVscC1h cmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCIgMCAyNyAoaGVscC1h cmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygid2hlcmUtaXMtaW50ZXJuYWwiIDAgMTcgKGhlbHAt YXJncyAod2hlcmUtaXMtaW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyIgMCAyMyAoaGVscC1hcmdzIChz dWJzdGl0dXRlLWNvbW1hbmQta2V5cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVs bS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14 LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVs bS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5z Zm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUt dHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0 Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t LWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0 ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFy Z3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFy Z3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFj dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3 IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0 b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIx MFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5k LXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1j bG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVj dGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJy b3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVj aG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNl IGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIg MCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1l dmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQt ZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDE0IFsjKCJjb21wbGV0aW9u LXBjbS0tcGF0dGVybi0+cmVnZXgiIDAgMzAgKGhlbHAtYXJncyAoY29tcGxldGlvbi1wY20tLXBh dHRlcm4tPnJlZ2V4KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS0tZnV6enktZmxleC1wYXR0ZXJuLXRvLXJlZ2V4cCIgMCAzNCAoaGVscC1hcmdzICho ZWxtLS1mdXp6eS1mbGV4LXBhdHRlcm4tdG8tcmVnZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1mdXp6eS1mbGV4LXN0eWxlLXNjb3JlIiAwIDI3 IChoZWxwLWFyZ3MgKGhlbG0tZnV6enktZmxleC1zdHlsZS1zY29yZSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tc2NvcmUtY2FuZGlkYXRlLWZvci1w YXR0ZXJuIiAwIDMyIChoZWxwLWFyZ3MgKGhlbG0tc2NvcmUtY2FuZGlkYXRlLWZvci1wYXR0ZXJu KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxl ZC1mdW5jdGlvbiAyMEI+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9u IGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXIt bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1i dXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNl KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNr dGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkg KDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbNTE0ICJcMzAzXDIwMwgAXDMwNVwy MDIJAFwzMDZcMzAyXDIwMxoAAjpcMjAzGgBcMzA3AQQhIVwyMDIwAAI6XDIwMyUAXDIxMQMhXDIw MjAAXDMwMlwyMDMvAFwzMDcDIVwyMDIwAAJcMzAyXDIwM0EAAjpcMjAzQQBcMzA3AgQhIVwyMDJX AAI6XDIwM0wAAQMhXDIwMlcAXDMwMlwyMDNWAFwzMDcDIVwyMDJXAAJcMzEwAlwzMDBcIlwyMDZr AFwzMTECXDMxMgQMXCJcMzEzBSFHRFwzMDAjXDMxMAJcMzAwXCJcMjA2fwBcMzExAlwzMTIEDFwi XDMxMwUhR0RcMzAwIwFBQAFBQANAA0ABAVVcMjAzXDIzMABcMzAxP1wyMDVcMjMzAAMDV1wyMDcB AVZcMjA3IiBbI3MoaGFzaC10YWJsZSB0ZXN0IGVxdWFsIGRhdGEgKCJwaWVtLWFtIiAoMC4xNDI4 NTcxNDI4NTcxNDI4NSA3KSAicHJvZmlsZXItc3RhcnQiICgwLjA3MTQyODU3MTQyODU3MTQyIDE0 KSAib3JnLWNhcHR1cmUtcmVmLWNhcHR1cmUtZG9pIiAoMC4wIDI3KSAicHJvZmlsZXItcmVwb3J0 IiAoMC4wNjY2NjY2NjY2NjY2NjY2NyAxNSkgInByb2ZpbGVyLXN0b3AiICgwLjA3NjkyMzA3Njky MzA3NjkzIDEzKSAib3JnLWNhcHR1cmUtcmVmLWNhcHR1cmUtYXQtcG9pbnQiICgwLjAgMzIpICJi eXRlLWNvbXBpbGUtZmlsZSIgKDAuMCAxNykgInBhcmVkaXQtbW9kZSIgKDAuMDgzMzMzMzMzMzMz MzMzMzMgMTIpICJvcmctc3VibWl0LWJ1Zy1yZXBvcnQiICgwLjAgMjEpICJjb21wYW55LW1vZGUi ICgwLjAgMTIpICJhcHJvcG9zLWZ1bmN0aW9uIiAoMC4wIDE2KSAic3RyYWlnaHQtdXNlLXBhY2th Z2UiICgwLjAgMjApICJvcmctdGltZXN0YW1wIiAoMC4wIDEzKSAicGRmLXZpZXctbW9kZSIgKDAu MDc2OTIzMDc2OTIzMDc2OTMgMTMpICJzdHJhaWdodC1yZWJ1aWxkLXBhY2thZ2UiICgwLjAgMjQp ICJlbWFjcy1saXNwLW1vZGUiICgwLjAgMTUpKSkgbmlsIG5pbCB0IGhlbG0tcGF0dGVybiBjZHIg Y2FyIGhlbG0tYmFzZW5hbWUgZ2V0aGFzaCBwdXRoYXNoIGhlbG0tc2NvcmUtY2FuZGlkYXRlLWZv ci1wYXR0ZXJuIGhlbG0tc3RyaW5naWZ5XSAxMyAiCgooZm4gUzEgUzIpIl0gY2F0ZWdvcnkgdCBm b2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRo ZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1 dHRvbiBmYWNlIGJ1dHRvbikpICMoImhlbG0tZnV6enktbWF0Y2hpbmctZGVmYXVsdC1zb3J0LWZu LTEiIDAgMzcgKGhlbHAtYXJncyAoaGVsbS1mdXp6eS1tYXRjaGluZy1kZWZhdWx0LXNvcnQtZm4t MSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8c3Vici1u YXRpdmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19s YW1iZGFfMjA+IiAyMCA3MyAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBoZWxwLWFyZ3MgKEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNf bGFtYmRhXzIwKSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMyICho ZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNh bmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3MtZmlsdGVy ZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAoaGVs bS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0tY29s bGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1dCIg MCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCIg MCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDQy Rj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAo dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkg KG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNl LTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4g cHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2Fy ZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQt YnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAzXDMwNAJc IlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQtYWN0aW9u IGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2VsZWN0ZWQt d2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5hbC0tYWZ0 ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCBo ZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0 dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9k eSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9u KSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJoZWxtLW1tLWV4YWN0LXNlYXJjaCIgMCAyMCAo aGVscC1hcmdzIChoZWxtLW1tLWV4YWN0LXNlYXJjaCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNzA5PiIgMjAgMjMgKGFj dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3 IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0 b24tZGF0YSAjWzAgIlwzMTBcMzExXDMxMlwiXDMxM1wzMDFcMjM2XDMxNCAeH1wzMTVcMzE2XDMw NVwzMTdcMjExAjpcMjAzJgECQFwyNjICXDMwM2JcMjEwXDMyMDEnAFwzMjFcMzA3ITBcMjAyKwBc MjEwXDIwMjEAXDIwMzEAXDMxNnlcMjEwXDMxN1wyMTFcMjExXDIxMVwyMTEGBlwzMDchXDIxMVwy NjIGXDIwMxIBBDpcMjAzTABcMzE2eVwzMTVVXDIwMk4AbT9cMjAzEgEGCVwzMDRXXDIwMxIBXDMy MlwzMDYGBlwyMDNqAAYGPFwyMDNqAAYGXDIwMm8AXDMyMyBcMzI0IERcIlwyNjIEXDMwMlwyMDNc MjExAFwzMjVcMzE1XDMyNgYGI1wyMDRcMjExAFwzMjcEXDMyNlwzMDIGByEjXDI2MgRcMzMwBAYN XCJcMjYyAwYKXDIwM1wyNDAAAlwyMDNcMjQwAAIGCVVcMjA0XDI0NAACXDIwNA0BA1wzMzFcMjMw XDIwNA0BXDMwMlwyMDRcMjYzAAQ6XDIwM1wyNzMAXDMzMgRcMzA3XDMwMCNcMjAzDQFcMzMzBAYK Bg4jXDIxMFwzMzRcMzM1XDMwMVwiXDIxMVwyMDMCAQQ6XDIwM1wzMjUABEFcMjAyXDMyNgAEATxc MjAzXDM3NABcMzM2AiFcMjA0XDM3NAABXDMxNwE6XDIwM1wzNjcAXDIxMFwyMTFAXDIxMQMhXDI2 MggBQVwyNjICXDIwMlwzNDMAXDI2NgRcMjAyAwEBASFcMjYyBlwyMTBcMjEwBglUXDI2MgoDAkJc MjYyAlwyMTBcMzE3XDIwMjYAXDIxMFwyNjZcMjAzXDIzN1wyMzcBXDI0NFwyNjIBA1RcMjYyBAJB XDI2MgNcMjAyEABcMjExXDIzNylcMjA3IiBbbmlsICgobmFtZSAuICJFbWFjcyBDb21tYW5kcyIp IChpbml0ICNbMCAiXDMwMVwzMDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwy MDMjAFwzMDVcMzAwIVwyMDMjAHJcMzAwcVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbI1sw ICJcMzAyXDMwMVwzMDBcMzAzXDIxMVwzMDQlXDIwNyIgW2NvbW1hbmRwICM8b2JhcnJheSBuPTk4 OTE5PiBoZWxtLWNvbXAtcmVhZC1nZXQtY2FuZGlkYXRlcyBuaWwgIiJdIDZdIGhlbG0taW5pdC1j YW5kaWRhdGVzLWluLWJ1ZmZlciBnbG9iYWwgZnVuY3Rpb25wIGJ1ZmZlcnAgYnVmZmVyLWxpdmUt cCBidWZmZXItc3RyaW5nXSA0XSkgKGNhbmRpZGF0ZXMgLiBoZWxtLWNhbmRpZGF0ZXMtaW4tYnVm ZmVyKSAoY2xlYW51cCAuIGhlbG0tTS14LS11bndpbmQtZm9ybXMpIChrZXltYXAga2V5bWFwIChr ZXltYXAgKDEzIC4gaGVsbS1jb25maXJtLWFuZC1leGl0LW1pbmlidWZmZXIpKSBrZXltYXAgKDI5 IC4gaGVsbS1NLXgtdG9nZ2xlLXNob3J0LWRvYykgKDIxIC4gaGVsbS1NLXgtdW5pdmVyc2FsLWFy Z3VtZW50KSBrZXltYXAgKDI3IGtleW1hcCAoMTMgLiBoZWxtLWNyLWVtcHR5LXN0cmluZykpIChD LXJldHVybiAuIGhlbG0tY3ItZW1wdHktc3RyaW5nKSBrZXltYXAgKDIxIC4gaGVsbS1leGVjdXRl LXBlcnNpc3RlbnQtYWN0aW9uKSAoZjEyIC4gI1swICJcMzAxXDMwMCFcMjA3IiBbMTEgaGVsbS1z ZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGYxMSAuICNbMCAiXDMwMVwzMDAhXDIwNyIg WzEwIGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmMTAgLiAjWzAgIlwzMDFc MzAwIVwyMDciIFs5IGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmOSAuICNb MCAiXDMwMVwzMDAhXDIwNyIgWzggaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkg KGY4IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbNyBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5p bCBuaWxdKSAoZjcgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFs2IGhlbG0tc2VsZWN0LW50aC1hY3Rp b25dIDIgbmlsIG5pbF0pIChmNiAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzUgaGVsbS1zZWxlY3Qt bnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGY1IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbNCBoZWxt LXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAoZjQgLiAjWzAgIlwzMDFcMzAwIVwyMDci IFszIGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmMyAuICNbMCAiXDMwMVwz MDAhXDIwNyIgWzIgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGYyIC4gI1sw ICJcMzAxXDMwMCFcMjA3IiBbMSBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAo bWVudS1iYXIga2V5bWFwIChoZWxwLW1lbnUga2V5bWFwIChkZXNjcmliZSBrZXltYXAgKGRlc2Ny aWJlLW1vZGUgLiBoZWxtLWhlbHApKSkpIChoZWxwIGtleW1hcCAoMTA5IC4gaGVsbS1oZWxwKSkg KDIzIC4gaGVsbS1oZWxtLXlhbmstdGV4dC1hdC1wb2ludC13aXRoLXN1YmtleXMpIChmMSAuICNb MCAiXDMwMVwzMDAhXDIwNyIgWzAgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkg KDggLiBiYWNrd2FyZC1kZWxldGUtY2hhci11bnRhYmlmeSkgKDIwIC4gaGVsbS10b2dnbGUtcmVz cGxpdC1hbmQtc3dhcC13aW5kb3dzKSAoQy10YWIgLiB1bmRlZmluZWQpICg2NzEwODg5NyAuIGhl bG0tdG9nZ2xlLXN1c3BlbmQtdXBkYXRlKSAoMjYgLiBoZWxtLXRvZ2dsZS1mdWxsLWZyYW1lKSAo MyBrZXltYXAgKDMzNTU0NDU1IC4geWFudC90b2dnbGUtcmVmaWxlLXRvLXRhc2tzKSAoNTcgLiAj WzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzggbmlsIGhlbG0tZXhl Y3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU2IC4gI1swICJcMzAy XDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs3IG5pbCBoZWxtLWV4ZWN1dGUtc2Vs ZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1NSAuICNbMCAiXDMwMlwzMDFcMjAz CwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNiBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1h Y3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAoNTQgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRb XDIwMg0AXDMwMFQhXDIwNyIgWzUgbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0 LW50aF0gMiBuaWwgbmlsXSkgKDUzIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwz MDBUIVwyMDciIFs0IG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIg bmlsIG5pbF0pICg1MiAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3 IiBbMyBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxd KSAoNTEgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzIgbmls IGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUwIC4g I1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFsxIG5pbCBoZWxtLWV4 ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg0OSAuICNbMCAiXDMw MlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMCBuaWwgaGVsbS1leGVjdXRlLXNl bGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAoMTEwIC4gaGVsbS1oZWxtLXJ1bi1j eWNsZS1yZXN1bWUtd2l0aC1zdWJrZXlzKSAoMTA4IC4gaGVsbS1kaXNwbGF5LWxpbmUtbnVtYmVy cy1tb2RlKSAoNjIgLiBoZWxtLXRvZ2dsZS10cnVuY2F0ZS1saW5lKSAoMjEgLiBoZWxtLXJlZnJl c2gpICg2IC4gaGVsbS1mb2xsb3ctbW9kZSkgKDkgLiBoZWxtLWluc2VydC1vci1jb3B5KSAoMTEg LiBoZWxtLWtpbGwtc2VsZWN0aW9uLWFuZC1xdWl0KSAoMjUgLiBoZWxtLXlhbmstc2VsZWN0aW9u KSAoMzcgLiBoZWxtLWV4Y2hhbmdlLW1pbmlidWZmZXItYW5kLWhlYWRlci1saW5lKSAoOTUgLiBo ZWxtLXRvZ2dsZS1mdWxsLWZyYW1lKSAoNDUgLiBoZWxtLXN3YXAtd2luZG93cykpICg2NzEwODk4 NyAuIGhlbG0tZW5sYXJnZS13aW5kb3cpICg2NzEwODk4OSAuIGhlbG0tbmFycm93LXdpbmRvdykg KDE4IC4gdW5kZWZpbmVkKSAoMTkgLiB1bmRlZmluZWQpICgyNCBrZXltYXAgKDU3IC4gI1swICJc MzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs4IG5lZ2F0aXZlIGhlbG0tZXhl Y3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU2IC4gI1swICJcMzAy XDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs3IG5lZ2F0aXZlIGhlbG0tZXhlY3V0 ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU1IC4gI1swICJcMzAyXDMw MVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs2IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1z ZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU0IC4gI1swICJcMzAyXDMwMVwy MDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs1IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxl Y3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUzIC4gI1swICJcMzAyXDMwMVwyMDML AFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs0IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rp b24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUyIC4gI1swICJcMzAyXDMwMVwyMDMLAFwz MDBUW1wyMDINAFwzMDBUIVwyMDciIFszIG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24t YWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUxIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBU W1wyMDINAFwzMDBUIVwyMDciIFsyIG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0 aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUwIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wy MDINAFwzMDBUIVwyMDciIFsxIG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9u LWF0LW50aF0gMiBuaWwgbmlsXSkgKDQ5IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDIN AFwzMDBUIVwyMDciIFswIG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0 LW50aF0gMiBuaWwgbmlsXSkgKDIgLiBoZWxtLXJlc3VtZS1saXN0LWJ1ZmZlcnMtYWZ0ZXItcXVp dCkgKDk4IC4gaGVsbS1yZXN1bWUtcHJldmlvdXMtc2Vzc2lvbi1hZnRlci1xdWl0KSAoNiAuIGhl bG0tcXVpdC1hbmQtZmluZC1maWxlKSkgKDEyNyAuIGhlbG0tZGVsZXRlLWNoYXItYmFja3dhcmQp ICgxMSAuIGhlbG0tZGVsZXRlLW1pbmlidWZmZXItY29udGVudHMpICg2NzEwODg5NiAuIGhlbG0t dG9nZ2xlLXZpc2libGUtbWFyay1mb3J3YXJkKSAoMCAuIGhlbG0tdG9nZ2xlLXZpc2libGUtbWFy aykgKEMtTS11cCAuIGhlbG0tc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duKSAoQy1NLWRvd24gLiBo ZWxtLXNjcm9sbC1vdGhlci13aW5kb3cpIChNLXByaW9yIC4gaGVsbS1zY3JvbGwtb3RoZXItd2lu ZG93LWRvd24pIChNLW5leHQgLiBoZWxtLXNjcm9sbC1vdGhlci13aW5kb3cpICgxMiAuIGhlbG0t cmVjZW50ZXItdG9wLWJvdHRvbS1vdGhlci13aW5kb3cpIChsZWZ0IC4gaGVsbS1wcmV2aW91cy1z b3VyY2UpIChyaWdodCAuIGhlbG0tbmV4dC1zb3VyY2UpICgxNSAuIGhlbG0tbmV4dC1zb3VyY2Up ICgxMCAuIGhlbG0tZXhlY3V0ZS1wZXJzaXN0ZW50LWFjdGlvbikgKDkgLiBoZWxtLXNlbGVjdC1h Y3Rpb24pICgxMyAuIGhlbG0tbWF5YmUtZXhpdC1taW5pYnVmZmVyKSAoNyAuIGhlbG0ta2V5Ym9h cmQtcXVpdCkgKDIyIC4gaGVsbS1zY3JvbGwtZG93bikgKDI3IGtleW1hcCAoMTA0IC4gYmFja3dh cmQta2lsbC13b3JkKSAoOCAuIGJhY2t3YXJkLWtpbGwtd29yZCkgKDEwOCAuIHlhbnQvaGVsbS15 YW5rLXNlbGVjdGlvbi1vci1leGVjdXRlLXBlcnNpc3RlbnQtYWN0aW9uKSAoMTA1IC4gaGVsbS1w cmV2aW91cy1zb3VyY2UpICgxMDcgLiBoZWxtLXByZXZpb3VzLWxpbmUpICgxMDYgLiBoZWxtLW5l eHQtbGluZSkgKDExNCAuIHVuZGVmaW5lZCkgKDExMCAuIG5leHQtaGlzdG9yeS1lbGVtZW50KSAo MTEyIC4gcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50KSAoMTkgLiB1bmRlZmluZWQpICgxOCAuIHVu ZGVmaW5lZCkgKDExNSAuIHVuZGVmaW5lZCkgKDUgLiBoZWxtLWRpc3BsYXktYWxsLXNvdXJjZXMp ICgxIC4gaGVsbS1zaG93LWFsbC1jYW5kaWRhdGVzLWluLXNvdXJjZSkgKDg1IC4gaGVsbS11bm1h cmstYWxsKSAoOTcgLiBoZWxtLW1hcmstYWxsKSAoMTA5IC4gaGVsbS10b2dnbGUtYWxsLW1hcmtz KSAoNDEgLiBoZWxtLW5leHQtdmlzaWJsZS1tYXJrKSAoNDAgLiBoZWxtLXByZXYtdmlzaWJsZS1t YXJrKSAoOTEpICgzMiAuIGhlbG0tdG9nZ2xlLXZpc2libGUtbWFyay1iYWNrd2FyZCkgKDMzNTU0 NDU0IC4gaGVsbS1zY3JvbGwtb3RoZXItd2luZG93LWRvd24pICgyNSAuIGhlbG0tc2Nyb2xsLW90 aGVyLXdpbmRvdy1kb3duKSAoMjIgLiBoZWxtLXNjcm9sbC1vdGhlci13aW5kb3cpICgxMiAuIGhl bG0tcmVwb3NpdGlvbi13aW5kb3ctb3RoZXItd2luZG93KSAoMTExIC4gaGVsbS1uZXh0LXNvdXJj ZSkgKDYyIC4gaGVsbS1lbmQtb2YtYnVmZmVyKSAoNjAgLiBoZWxtLWJlZ2lubmluZy1vZi1idWZm ZXIpICgxMTggLiBoZWxtLXNjcm9sbC11cCkpIChuZXh0IC4gaGVsbS1uZXh0LXBhZ2UpIChwcmlv ciAuIGhlbG0tcHJldmlvdXMtcGFnZSkgKEMtdXAgLiBoZWxtLWZvbGxvdy1hY3Rpb24tYmFja3dh cmQpIChDLWRvd24gLiBoZWxtLWZvbGxvdy1hY3Rpb24tZm9yd2FyZCkgKDE2IC4gaGVsbS1wcmV2 aW91cy1saW5lKSAoMTQgLiBoZWxtLW5leHQtbGluZSkgKHVwIC4gaGVsbS1wcmV2aW91cy1saW5l KSAoZG93biAuIGhlbG0tbmV4dC1saW5lKSBrZXltYXAgKDE4IC4gaGVsbS1taW5pYnVmZmVyLWhp c3RvcnkpIChlc2NhcGUgLiBrZXlib2FyZC1xdWl0KSAobWVudS1iYXIga2V5bWFwIChtaW5pYnVm ICJNaW5pYnVmIiBrZXltYXAgKHByZXZpb3VzIG1lbnUtaXRlbSAiUHJldmlvdXMgSGlzdG9yeSBJ dGVtIiBwcmV2aW91cy1oaXN0b3J5LWVsZW1lbnQgOmhlbHAgIlB1dCBwcmV2aW91cyBtaW5pYnVm ZmVyIGhpc3RvcnkgZWxlbWVudCBpbiB0aGUgbWluaWJ1ZmZlciIpIChuZXh0IG1lbnUtaXRlbSAi TmV4dCBIaXN0b3J5IEl0ZW0iIG5leHQtaGlzdG9yeS1lbGVtZW50IDpoZWxwICJQdXQgbmV4dCBt aW5pYnVmZmVyIGhpc3RvcnkgZWxlbWVudCBpbiB0aGUgbWluaWJ1ZmZlciIpIChpc2VhcmNoLWJh Y2t3YXJkIG1lbnUtaXRlbSAiSXNlYXJjaCBIaXN0b3J5IEJhY2t3YXJkIiBpc2VhcmNoLWJhY2t3 YXJkIDpoZWxwICJJbmNyZW1lbnRhbGx5IHNlYXJjaCBtaW5pYnVmZmVyIGhpc3RvcnkgYmFja3dh cmQiKSAoaXNlYXJjaC1mb3J3YXJkIG1lbnUtaXRlbSAiSXNlYXJjaCBIaXN0b3J5IEZvcndhcmQi IGlzZWFyY2gtZm9yd2FyZCA6aGVscCAiSW5jcmVtZW50YWxseSBzZWFyY2ggbWluaWJ1ZmZlciBo aXN0b3J5IGZvcndhcmQiKSAocmV0dXJuIG1lbnUtaXRlbSAiRW50ZXIiIGV4aXQtbWluaWJ1ZmZl ciA6a2V5LXNlcXVlbmNlICINIiA6aGVscCAiVGVybWluYXRlIGlucHV0IGFuZCBleGl0IG1pbmli dWZmZXIiKSAocXVpdCBtZW51LWl0ZW0gIlF1aXQiIGFib3J0LXJlY3Vyc2l2ZS1lZGl0IDpoZWxw ICJBYm9ydCBpbnB1dCBhbmQgZXhpdCBtaW5pYnVmZmVyIikgIk1pbmlidWYiKSkgKDI0IGtleW1h cCAoZG93biAuIG1pbmlidWZmZXItY29tcGxldGUtZGVmYXVsdHMpICh1cCAuIG1pbmlidWZmZXIt Y29tcGxldGUtaGlzdG9yeSkpICgxMyAuIGV4aXQtbWluaWJ1ZmZlcikgKDEwIC4gZXhpdC1taW5p YnVmZmVyKSAoNyAuIGFib3J0LW1pbmlidWZmZXJzKSAoQy10YWIgLiBmaWxlLWNhY2hlLW1pbmli dWZmZXItY29tcGxldGUpICg5IC4gc2VsZi1pbnNlcnQtY29tbWFuZCkgKFhGODZCYWNrIC4gcHJl dmlvdXMtaGlzdG9yeS1lbGVtZW50KSAodXAgLiBwcmV2aW91cy1saW5lLW9yLWhpc3RvcnktZWxl bWVudCkgKHByaW9yIC4gcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50KSAoWEY4NkZvcndhcmQgLiBu ZXh0LWhpc3RvcnktZWxlbWVudCkgKGRvd24gLiBuZXh0LWxpbmUtb3ItaGlzdG9yeS1lbGVtZW50 KSAobmV4dCAuIG5leHQtaGlzdG9yeS1lbGVtZW50KSAoMjcga2V5bWFwICgxMDUgLiBwYXJlZGl0 LWNvbnZvbHV0ZS1zZXhwKSAoMTExIC4gcGFyZWRpdC1mb3J3YXJkLXNsdXJwLXNleHApICg2MCAu IG1pbmlidWZmZXItYmVnaW5uaW5nLW9mLWJ1ZmZlcikgKDExNCAuIHByZXZpb3VzLW1hdGNoaW5n LWhpc3RvcnktZWxlbWVudCkgKDExNSAuIG5leHQtbWF0Y2hpbmctaGlzdG9yeS1lbGVtZW50KSAo MTEyIC4gcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50KSAoMTEwIC4gbmV4dC1oaXN0b3J5LWVsZW1l bnQpKSkgKGFjdGlvbiAuIGhlbG0tdHlwZS1jb21tYW5kLWFjdGlvbnMpIChwZXJzaXN0ZW50LWFj dGlvbiAuIGhlbG0tTS14LXBlcnNpc3RlbnQtYWN0aW9uKSAocGVyc2lzdGVudC1oZWxwIC4gIkRl c2NyaWJlIHRoaXMgY29tbWFuZCIpIChoZWxwLW1lc3NhZ2UgLiBoZWxtLU0teC1oZWxwLW1lc3Nh Z2UpIChyZXF1aXJlcy1wYXR0ZXJuIC4gMCkgKGZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1l ciBoZWxtLU0teC10cmFuc2Zvcm1lciAjPHN1YnIgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZk NjI2NDYxX2Fub255bW91c19sYW1iZGFfMjA+IGhlbG0tZnV6enktaGlnaGxpZ2h0LW1hdGNoZXMp ICh2b2xhdGlsZSAuIHQpIChtYXRjaCBpZGVudGl0eSkgKGZ1enp5LW1hdGNoIC4gdCkgKHJlZGlz cGxheSAuIGlkZW50aXR5KSAobm9tYXJrIC4gdCkgKGNvZXJjZSAuIGhlbG0tc3ltYm9saWZ5KSAo aGVhZGVyLWxpbmUgLiAjKCJDLXU6IERlc2NyaWJlIHRoaXMgY29tbWFuZCAoa2VlcGluZyBzZXNz aW9uKSIgMCAzIChmb250LWxvY2stZmFjZSBoZWxwLWtleS1iaW5kaW5nIGZhY2UgaGVscC1rZXkt YmluZGluZykpKSAocmVzdW1lIC4gaGVsbS1NLXgtcmVzdW1lLWZuKSAobXVsdGltYXRjaCAuIHQp IChtdXN0LW1hdGNoIC4gdCkgKGdyb3VwIC4gaGVsbS1jb21tYW5kKSAoZGF0YSAuICNbMCAiXDMw MlwzMDFcMzAwXDMwM1wyMTFcMzA0JVwyMDciIFtjb21tYW5kcCAjPG9iYXJyYXkgbj05ODkxOT4g aGVsbS1jb21wLXJlYWQtZ2V0LWNhbmRpZGF0ZXMgbmlsICIiXSA2XSkgKGdldC1saW5lIC4gYnVm ZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzKSAoc2VhcmNoIGhlbG0tbW0tZXhhY3Qtc2VhcmNo IGhlbG0tbW0tc2VhcmNoIGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQt Zm4gaGVsbS1mdXp6eS1zZWFyY2gpKSBuaWwgMCAxNTAgKGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhl bG0tbW0tc2VhcmNoIGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4g aGVsbS1mdXp6eS1zZWFyY2gpIGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAicCIgbWFr ZS1oYXNoLXRhYmxlIDp0ZXN0IGVxdWFsIGFsbG93LWR1cHMgaGVsbS1zZXQtY2FzZS1mb2xkLXNl YXJjaCAwIDEgbmlsIChpbnZhbGlkLXJlZ2V4cCkgbG9va2luZy1hdCBhcHBseSBwb3MtYm9sIHBv cy1lb2wgZ2V0LXRleHQtcHJvcGVydHkgbWF0Y2gtcGFydCBwcm9wZXJ0aXplIGdldGhhc2ggIiIg aGVsbS1zZWFyY2gtbWF0Y2gtcGFydCBwdXRoYXNoIGFzc29jLWRlZmF1bHQgZmlsdGVyLW9uZS1i eS1vbmUgZnVuY3Rpb25wIGNhc2UtZm9sZC1zZWFyY2hdIDE4XSBjYXRlZ29yeSB0IGZvbGxvdy1s aW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0 aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZh Y2UgYnV0dG9uKSkgIygiaGVsbS0tc2VhcmNoLWZyb20tY2FuZGlkYXRlLWJ1ZmZlci0xIiAwIDM2 IChoZWxwLWFyZ3MgKGhlbG0tLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXItMSkgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tc2VhcmNoLWZyb20t Y2FuZGlkYXRlLWJ1ZmZlciIgMCAzMyAoaGVscC1hcmdzIChoZWxtLXNlYXJjaC1mcm9tLWNhbmRp ZGF0ZS1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJoZWxtLWNhbmRpZGF0ZXMtaW4tYnVmZmVyLTEiIDAgMjcgKGhlbHAtYXJncyAoaGVsbS1jYW5k aWRhdGVzLWluLWJ1ZmZlci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiaGVsbS1jYW5kaWRhdGVzLWluLWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxt LWNhbmRpZGF0ZXMtaW4tYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAt YXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVycHJldC12YWx1ZSIgMCAyMCAo aGVscC1hcmdzIChoZWxtLWludGVycHJldC12YWx1ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tZ2V0LWNhbmRpZGF0ZXMiIDAgMTkgKGhlbHAtYXJn cyAoaGVsbS1nZXQtY2FuZGlkYXRlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImhlbG0tZ2V0LWNhY2hlZC1jYW5kaWRhdGVzIiAwIDI2IChoZWxwLWFyZ3Mg KGhlbG0tZ2V0LWNhY2hlZC1jYW5kaWRhdGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAo aGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0t Y29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1 dCIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1 dCIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9u IDQyRj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAzXDMw NAJcIlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQtYWN0 aW9uIGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2VsZWN0 ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5hbC0t YWZ0ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1 dCBoZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQg YnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3Mg Ym9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0 dG9uKSldIDE3IFsjKCJzcGxpdC1zdHJpbmciIDAgMTIgKGhlbHAtYXJncyAoc3BsaXQtc3RyaW5n KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1nZXQt Zmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAwIDMzIChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWZpcnN0 LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1N LXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRy YW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1h cHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9y bWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJh bnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo ZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hl cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNv bGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIg MCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3Mg KGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3Mg KGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlv biBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4t ZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3du IC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u KSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEz IC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtl eW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24t ZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwz MDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVw ZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9z dXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVk LXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3It bWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8g Im1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhp Z2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1 IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVu dC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJv bS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDcgWyMoImhlbG0tY2FuZGlkYXRl LWJ1ZmZlciIgMCAyMSAoaGVscC1hcmdzIChoZWxtLWNhbmRpZGF0ZS1idWZmZXIpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLW1ha2Utc2VwYXJhdG9y IiAwIDE5IChoZWxwLWFyZ3MgKGhlbG0tbWFrZS1zZXBhcmF0b3IpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lci0xIiAwIDIy IChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lciIgMCAyMCAoaGVs cC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMy IChoZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRlcmVk LWNhbmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3MtZmls dGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAo aGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0t Y29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1 dCIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1 dCIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9u IDQyRj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAzXDMw NAJcIlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQtYWN0 aW9uIGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2VsZWN0 ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5hbC0t YWZ0ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1 dCBoZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQg YnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3Mg Ym9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0 dG9uKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1mdW5j dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRpbWVyLWV2ZW50LWhhbmRsZXIiIDAgMTkgKGhl bHAtYXJncyAodGltZXItZXZlbnQtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhlbHAt YXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAoaGVs bS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA2 IFsjKCJzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyIgMCAyMyAoaGVscC1hcmdzIChzdWJzdGl0dXRl LWNvbW1hbmQta2V5cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJh bnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9y bWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1h cHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1m dW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAw IDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3Jt ZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNv bXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3Qt bWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAo aGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0t Y2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0t Y2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxw LWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu IHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz aC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91 Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZv bGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVz aC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAo OSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAj WzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwy NjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1m bGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNb MCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRv d10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2Fn ZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNl LTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdo dCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxw LWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5k bGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1y ZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5p YnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs bS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhl bG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gNyBbIygia2ls bC1idWZmZXIiIDAgMTEgKGhlbHAtYXJncyAoa2lsbC1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDMyOT4iIDIw IDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRv dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hz Y3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUt bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1i dXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0 b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9u KSkgYnV0dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA1CQBcMzAyXDMwMCFcMjA3IiBbIzxraWxs ZWQgYnVmZmVyPiBidWZmZXItbmFtZSBraWxsLWJ1ZmZlcl0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ct bGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5j dGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBm YWNlIGJ1dHRvbikpICMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzIChoZWxwLWFyZ3Mg KHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1nZXQtZmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAwIDMzICho ZWxwLWFyZ3MgKGhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEi IDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIw IChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2Ui IDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmls dGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vz cy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1h cmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzICho ZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3 LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVy LWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0 ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVu Y3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXlt YXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUg a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1i dXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1v dXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAu IGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4g Zm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwz MDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVu dC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1z ZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVy bmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVy LWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxp bmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rp b24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFj ZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAx OSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSldIDYgWyMoInN0cmluZy13aWR0aCIgMCAxMiAoaGVscC1hcmdz IChzdHJpbmctd2lkdGgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJ0cnVuY2F0ZS1zdHJpbmctdG8td2lkdGgiIDAgMjQgKGhlbHAtYXJncyAodHJ1bmNhdGUt c3RyaW5nLXRvLXdpZHRoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS1nZXQtZmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAwIDMzIChoZWxwLWFyZ3Mg KGhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEiIDAgMjIgKGhl bHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIwIChoZWxwLWFy Z3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhl bHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2Fu ZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJl ZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxt LWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xs ZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAw IDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAw IDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJG PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1h cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0 b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAo bW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2Ut MiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBw dXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJk LWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1i dXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0Alwi XDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24g aGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13 aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRl ci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhl bG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0 b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5 IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24p KSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1h cmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdz IChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSldIDYgWyMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzIChoZWxw LWFyZ3MgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1nZXQtZmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAw IDMzIChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9y bWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVy IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1z b3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2Up IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nl c3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0t cHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAo aGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1h cmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0 ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hl Y2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5p YnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1 dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGls ZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlv biBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVy LWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4g cHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFj ZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFj a3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikp ICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwz MDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVy c2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUt c2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1Yw IGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5p YnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9s bG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUg ZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0 b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxl ciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIg MCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVs cC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSldIDExIFsjKCJoZWxtLU0teC10cmFuc2Zvcm1lci0xIiAwIDIyIChoZWxwLWFyZ3Mg KGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lciIgMCAyMCAoaGVscC1hcmdzIChoZWxt LU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMyIChoZWxwLWFyZ3Mg KGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNhbmRpZGF0ZS10 cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlk YXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1jb21wdXRl LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo ZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0tY29sbGVjdC1tYXRj aGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS11 cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1dCIgMCAyMCAoaGVs cC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0 b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCIgMCAyNyAoaGVs cC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDQyRj4iIDIwIDIz IChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNo c2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3Jl ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGlu ZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNo LWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0 b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24p ICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkg YnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAzXDMwNAJcIlwyMTZcMzA1 IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQtYWN0aW9uIGhlbG0tc3Vz cGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2VsZWN0ZWQtd2luZG93IG1h a2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5hbC0tYWZ0ZXItc2F2ZS1z ZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCBoZWxtLXByaW50 LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVs cC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2Ut ZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYXBw bHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoInRpbWVyLWV2ZW50LWhhbmRsZXIiIDAgMTkgKGhlbHAtYXJncyAodGlt ZXItZXZlbnQtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhlbHAtYXJncyAoaGVsbS1y ZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAoaGVsbS1pbnRlcm5hbCkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAo aGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKV0gMTEgWyMoIm1ha2UtY2xvc3VyZSIgMCAxMiAoaGVscC1hcmdz IChtYWtlLWNsb3N1cmUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJoZWxtLWZ1enp5LWRlZmF1bHQtaGlnaGxpZ2h0LW1hdGNoLTEiIDAgMzYgKGhlbHAtYXJn cyAoaGVsbS1mdXp6eS1kZWZhdWx0LWhpZ2hsaWdodC1tYXRjaC0xKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1mdXp6eS1kZWZhdWx0LWhpZ2hsaWdo dC1tYXRjaCIgMCAzNCAoaGVscC1hcmdzIChoZWxtLWZ1enp5LWRlZmF1bHQtaGlnaGxpZ2h0LW1h dGNoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1m dXp6eS1oaWdobGlnaHQtbWF0Y2hlcyIgMCAyOCAoaGVscC1hcmdzIChoZWxtLWZ1enp5LWhpZ2hs aWdodC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVs bS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5z Zm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUt dHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0 Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t LWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0 ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFy Z3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFy Z3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFj dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3 IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0 b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIx MFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5k LXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1j bG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVj dGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJy b3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVj aG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNl IGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIg MCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1l dmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg IygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQt ZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDMgWyMoImhlbG0taW5zZXJ0 LW1hdGNoIiAwIDE3IChoZWxwLWFyZ3MgKGhlbG0taW5zZXJ0LW1hdGNoKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZW5kZXItc291cmNlIiAwIDE4 IChoZWxwLWFyZ3MgKGhlbG0tcmVuZGVyLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBkYXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0t dXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs bS1jaGVjay1uZXctaW5wdXQiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1jaGVjay1uZXctaW5wdXQp IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNr LW1pbmlidWZmZXItaW5wdXQiIDAgMjcgKGhlbHAtYXJncyAoaGVsbS1jaGVjay1taW5pYnVmZmVy LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxj b21waWxlZC1mdW5jdGlvbiA0MkY+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1 bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICho ZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNl LTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4g cHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3Vz ZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFw IChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0 dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiCFwyMDYFAAk/XDIw NRkAXDMwMiByXDMwM1wzMDQCXCJcMjE2XDMwNSBcMjEwXDMwNiAqXDI2MgFcMjA3IiBbaGVsbS1p bi1wZXJzaXN0ZW50LWFjdGlvbiBoZWxtLXN1c3BlbmQtdXBkYXRlLWZsYWcgaW50ZXJuYWwtLWJl Zm9yZS1zYXZlLXNlbGVjdGVkLXdpbmRvdyBtYWtlLWNsb3N1cmUgI1swICJcMzAxXDMwMCFcMjA3 IiBbVjAgaW50ZXJuYWwtLWFmdGVyLXNhdmUtc2VsZWN0ZWQtd2luZG93XSAyXSBoZWxtLWNoZWNr LW1pbmlidWZmZXItaW5wdXQgaGVsbS1wcmludC1lcnJvci1tZXNzYWdlc10gNF0gY2F0ZWdvcnkg dCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5 IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNl IGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImFwcGx5IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ0aW1lci1ldmVudC1o YW5kbGVyIiAwIDE5IChoZWxwLWFyZ3MgKHRpbWVyLWV2ZW50LWhhbmRsZXIpIGNhdGVnb3J5IGhl bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXJlYWQtZnJvbS1taW5pYnVm ZmVyIiAwIDI1IChoZWxwLWFyZ3MgKGhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVybmFsIiAwIDEz IChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzICho ZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1N LXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQt ZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmdW5jYWxsLWludGVyYWN0aXZlbHkiIDAg MjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29tbWFuZC1leGVjdXRlIiAwIDE1IChoZWxwLWFy Z3MgKGNvbW1hbmQtZXhlY3V0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u ICh0KSkpXSAzIFsjKCJraWxsLWJ1ZmZlciIgMCAxMSAoaGVscC1hcmdzIChraWxsLWJ1ZmZlcikg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQt ZnVuY3Rpb24gMjY0PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBr ZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxp bmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVz aC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0 dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkg KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3Rh YiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5 IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDUJAFwzMDJc MzAwIVwyMDciIFsjPGtpbGxlZCBidWZmZXI+IGJ1ZmZlci1uYW1lIGtpbGwtYnVmZmVyXSAyXSBj YXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6 IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1s b2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygic3Vic3RpdHV0ZS1jb21tYW5kLWtleXMi IDAgMjMgKGhlbHAtYXJncyAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMpIGNhdGVnb3J5IGhlbHAt ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lci0xIiAw IDIyIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lciIgMCAyMCAo aGVscC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAw IDMyIChoZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRl cmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3Mt ZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJn cyAoaGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVs bS0tY29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1p bnB1dCIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1p bnB1dCIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0 aW9uIDQyRj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFw IChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3Vz ZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBi YWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZv cndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAz XDMwNAJcIlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQt YWN0aW9uIGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2Vs ZWN0ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5h bC0tYWZ0ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1p bnB1dCBoZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug YnV0dG9uKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRpbWVyLWV2ZW50LWhhbmRsZXIiIDAgMTkg KGhlbHAtYXJncyAodGltZXItZXZlbnQtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhl bHAtYXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJidWZmZXItc3RyaW5nIiAwIDEzIChoZWxwLWFy Z3MgKGJ1ZmZlci1zdHJpbmcpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKSAjKCJoZWxtLWZ1enp5LWRlZmF1bHQtaGlnaGxpZ2h0LW1hdGNoLTEiIDAgMzYgKGhlbHAt YXJncyAoaGVsbS1mdXp6eS1kZWZhdWx0LWhpZ2hsaWdodC1tYXRjaC0xKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1mdXp6eS1kZWZhdWx0LWhpZ2hs aWdodC1tYXRjaCIgMCAzNCAoaGVscC1hcmdzIChoZWxtLWZ1enp5LWRlZmF1bHQtaGlnaGxpZ2h0 LW1hdGNoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs bS1mdXp6eS1oaWdobGlnaHQtbWF0Y2hlcyIgMCAyOCAoaGVscC1hcmdzIChoZWxtLWZ1enp5LWhp Z2hsaWdodC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAo aGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRy YW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRh dGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUt bWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl bG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNo ZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVw ZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxw LWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxw LWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMg KGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hz Y3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVl bi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5l IGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gt YnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv bikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikg KDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBi dXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUg XDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNw ZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFr ZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNl bGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQt ZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxw LWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1m YWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBs eSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1l ci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp KSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJl YWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBj YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoImluc2VydCIg MCA2IChoZWxwLWFyZ3MgKGluc2VydCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0 dG9uICh0KSkpICMoImhlbG0taW5zZXJ0LW1hdGNoIiAwIDE3IChoZWxwLWFyZ3MgKGhlbG0taW5z ZXJ0LW1hdGNoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aGVsbS1yZW5kZXItc291cmNlIiAwIDE4IChoZWxwLWFyZ3MgKGhlbG0tcmVuZGVyLXNvdXJjZSkg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBkYXRl IiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1uZXctaW5wdXQiIDAgMjAgKGhlbHAtYXJn cyAoaGVsbS1jaGVjay1uZXctaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQiIDAgMjcgKGhlbHAtYXJn cyAoaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiA0MkY+IiAyMCAyMyAoYWN0 aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVl bi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRv d24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5 bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0 b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAo MTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcg a2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRv bi1kYXRhICNbMCAiCFwyMDYFAAk/XDIwNRkAXDMwMiByXDMwM1wzMDQCXCJcMjE2XDMwNSBcMjEw XDMwNiAqXDI2MgFcMjA3IiBbaGVsbS1pbi1wZXJzaXN0ZW50LWFjdGlvbiBoZWxtLXN1c3BlbmQt dXBkYXRlLWZsYWcgaW50ZXJuYWwtLWJlZm9yZS1zYXZlLXNlbGVjdGVkLXdpbmRvdyBtYWtlLWNs b3N1cmUgI1swICJcMzAxXDMwMCFcMjA3IiBbVjAgaW50ZXJuYWwtLWFmdGVyLXNhdmUtc2VsZWN0 ZWQtd2luZG93XSAyXSBoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQgaGVsbS1wcmludC1lcnJv ci1tZXNzYWdlc10gNF0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNo byAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2Ug aGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImFwcGx5IiAw IDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJ0aW1lci1ldmVudC1oYW5kbGVyIiAwIDE5IChoZWxwLWFyZ3MgKHRpbWVyLWV2 ZW50LWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj KCJoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyIiAwIDI1IChoZWxwLWFyZ3MgKGhlbG0tcmVhZC1m cm9tLW1pbmlidWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAt YXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwICho ZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAo aGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm dW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2 ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDMgWyMoImNs YXNzLXAiIDAgNyAoaGVscC1hcmdzIChjbGFzcy1wKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1nZXQtZmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAw IDMzIChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdv cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9y bWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkg aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVy IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1z b3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2Up IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nl c3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0t cHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVu Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAo aGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1h cmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0 ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hl Y2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5p YnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1 dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGls ZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlv biBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVy LWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4g cHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFj ZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFj a3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikp ICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwz MDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVy c2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUt c2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1Yw IGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5p YnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9s bG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUg ZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0 b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxl ciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1 bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIg MCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxw LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVs cC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSldIDMgWyMoImNkciIgMCAzIChoZWxwLWFyZ3MgKGNkcikgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gMzU3PiIg MjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAo dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3Vj aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9k ZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAu IHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNo LWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1 dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0 b24pKSBidXR0b24tZGF0YSAjWzUxNCAiXDMwM1wyMDMIAFwzMDVcMjAyCQBcMzA2XDMwMlwyMDMa AAI6XDIwMxoAXDMwNwEEISFcMjAyMAACOlwyMDMlAFwyMTEDIVwyMDIwAFwzMDJcMjAzLwBcMzA3 AyFcMjAyMAACXDMwMlwyMDNBAAI6XDIwM0EAXDMwNwIEISFcMjAyVwACOlwyMDNMAAEDIVwyMDJX AFwzMDJcMjAzVgBcMzA3AyFcMjAyVwACXDMxMAJcMzAwXCJcMjA2awBcMzExAlwzMTIEDFwiXDMx MwUhR0RcMzAwI1wzMTACXDMwMFwiXDIwNn8AXDMxMQJcMzEyBAxcIlwzMTMFIUdEXDMwMCMBQUAB QUADQANAAQFVXDIwM1wyMzAAXDMwMT9cMjA1XDIzMwADA1dcMjA3AQFWXDIwNyIgWyNzKGhhc2gt dGFibGUgdGVzdCBlcXVhbCBkYXRhICgicHJvZmlsZXItcmVwb3J0LXByZXZpb3VzLWVudHJ5IiAo MC4wIDMwKSAicHJvZmlsZXItcmVwb3J0LWRlc2NyaWJlLWVudHJ5IiAoMC4wIDMwKSAicHJvZmls ZXItcmVwb3J0LXJlbmRlci1jYWxsdHJlZSIgKDAuMCAzMSkgImZvbnQtbG9jay1wcm9maWxlci1z dG9wLWFuZC1yZXBvcnQiICgwLjAgMzQpICJlZGlmZi1wcm9maWxlIiAoMC4wIDEzKSAiZm9udC1s b2NrLXByb2ZpbGVyLXNvcnQiICgwLjAgMjMpICJwcm9maWxlci1yZXBvcnQiICgwLjAgMTUpICJw cm9maWxlci1yZXBvcnQtd3JpdGUtcHJvZmlsZSIgKDAuMCAyOSkgInByb2ZpbGVyLXN0b3AiICgw LjAgMTMpICJwcm9maWxlci1yZXBvcnQtY29sbGFwc2UtZW50cnkiICgwLjAgMzApICJmb250LWxv Y2stcHJvZmlsZXItcmVwb3J0LW1vZGUiICgwLjAgMzApICJwcm9maWxlci1yZXBvcnQtdG9nZ2xl LWVudHJ5IiAoMC4wIDI4KSAicHJvZmlsZXItcmVwb3J0LWNvbXBhcmUtcHJvZmlsZSIgKDAuMCAz MSkgInByb2ZpbGVyLXJlc2V0IiAoMC4wIDE0KSAiZm9udC1sb2NrLXByb2ZpbGVyLWJ1ZmZlciIg KDAuMCAyNSkgImZvbnQtbG9jay1wcm9maWxlci1zdGFydCIgKDAuMCAyNCkgInByb2ZpbGVyLXJl cG9ydC1maW5kLWVudHJ5IiAoMC4wIDI2KSAicHJvZmlsZXItZmluZC1wcm9maWxlLW90aGVyLWZy YW1lIiAoMC4wIDMzKSAiZm9udC1sb2NrLXByb2ZpbGVyLXJlZ2lvbiIgKDAuMCAyNSkgImZvbnQt bG9jay1wcm9maWxlci1yZXBvcnQiICgwLjAgMjUpICJwcm9maWxlci1yZXBvcnQtYXNjZW5kaW5n LXNvcnQiICgwLjAgMzApICJwcm9maWxlci1yZXBvcnQtZXhwYW5kLWVudHJ5IiAoMC4wIDI4KSAi Zm9udC1sb2NrLXByb2ZpbGVyLXRvZ2dsZS10aW1lLWluLXBlcmNlbnQiICgwLjAgNDEpICJwcm9m aWxlci1yZXBvcnQtcmVuZGVyLXJldmVyc2VkLWNhbGx0cmVlIiAoMC4wIDQwKSAicHJvZmlsZXIt cmVwb3J0LWRlc2NlbmRpbmctc29ydCIgKDAuMCAzMSkgInByb2ZpbGVyLWZpbmQtcHJvZmlsZS1v dGhlci13aW5kb3ciICgwLjAgMzQpICJwcm9maWxlci1yZXBvcnQtbmV4dC1lbnRyeSIgKDAuMCAy NikgImhlbG0taW5mby1ncHJvZiIgKDAuMCAxNSkgInByb2ZpbGVyLXJlcG9ydC1tb2RlIiAoMC4w IDIwKSAicHJvZmlsZXItc3RhcnQiICgwLjAgMTQpICJwcm9maWxlci1maW5kLXByb2ZpbGUiICgw LjAgMjEpICJmb250LWxvY2stcHJvZmlsZXItdG9nZ2xlLWV4cGFuZCIgKDAuMCAzMikpKSBuaWwg bmlsIHQgaGVsbS1wYXR0ZXJuIGNkciBjYXIgaGVsbS1iYXNlbmFtZSBnZXRoYXNoIHB1dGhhc2gg aGVsbS1zY29yZS1jYW5kaWRhdGUtZm9yLXBhdHRlcm4gaGVsbS1zdHJpbmdpZnldIDEzICIKCihm biBTMSBTMikiXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJt b3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdo bGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiaGVsbS1mdXp6eS1t YXRjaGluZy1kZWZhdWx0LXNvcnQtZm4tMSIgMCAzNyAoaGVscC1hcmdzIChoZWxtLWZ1enp5LW1h dGNoaW5nLWRlZmF1bHQtc29ydC1mbi0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2 YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xhbWJkYV8yMD4iIDIwIDczIChidXR0b24gKHQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGhlbHAtYXJncyAoRjYxNmU2ZjZlNzk2ZDZmNzU3MzJk NmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfMjApKSkgIygiaGVsbS1hcHBseS1mdW5jdGlv bnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJv bS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo ZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFy Z3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hl cyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAy MSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzICho ZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlu cHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1j aGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1 ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo IiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxh eS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u KSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht b3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93 biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4g bW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtl eW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJk LWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJ P1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hl bG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFs LS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAh XDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1j aGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVn b3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlz cGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2st ZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5 KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZl bnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWlu aWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIg MCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSldIDMgWyMoImRpcmVjdG9yeS1maWxlLW5hbWUiIDAgMTkgKGhlbHAt YXJncyAoZGlyZWN0b3J5LWZpbGUtbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g YnV0dG9uICh0KSkpICMoImhlbG0tYmFzZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoaGVsbS1iYXNl bmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t c2V0LWNhc2UtZm9sZC1zZWFyY2giIDAgMjUgKGhlbHAtYXJncyAoaGVsbS1zZXQtY2FzZS1mb2xk LXNlYXJjaCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8 Y29tcGlsZWQtZnVuY3Rpb24gOUQ0PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1m dW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo aGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz ZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91 c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1h cCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1 dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMTBcMzExXDMx MlwiXDMxM1wzMDFcMjM2XDMxNCAeH1wzMTVcMzE2XDMwNVwzMTdcMjExAjpcMjAzJgECQFwyNjIC XDMwM2JcMjEwXDMyMDEnAFwzMjFcMzA3ITBcMjAyKwBcMjEwXDIwMjEAXDIwMzEAXDMxNnlcMjEw XDMxN1wyMTFcMjExXDIxMVwyMTEGBlwzMDchXDIxMVwyNjIGXDIwMxIBBDpcMjAzTABcMzE2eVwz MTVVXDIwMk4AbT9cMjAzEgEGCVwzMDRXXDIwMxIBXDMyMlwzMDYGBlwyMDNqAAYGPFwyMDNqAAYG XDIwMm8AXDMyMyBcMzI0IERcIlwyNjIEXDMwMlwyMDNcMjExAFwzMjVcMzE1XDMyNgYGI1wyMDRc MjExAFwzMjcEXDMyNlwzMDIGByEjXDI2MgRcMzMwBAYNXCJcMjYyAwYKXDIwM1wyNDAAAlwyMDNc MjQwAAIGCVVcMjA0XDI0NAACXDIwNA0BA1wzMzFcMjMwXDIwNA0BXDMwMlwyMDRcMjYzAAQ6XDIw M1wyNzMAXDMzMgRcMzA3XDMwMCNcMjAzDQFcMzMzBAYKBg4jXDIxMFwzMzRcMzM1XDMwMVwiXDIx MVwyMDMCAQQ6XDIwM1wzMjUABEFcMjAyXDMyNgAEATxcMjAzXDM3NABcMzM2AiFcMjA0XDM3NAAB XDMxNwE6XDIwM1wzNjcAXDIxMFwyMTFAXDIxMQMhXDI2MggBQVwyNjICXDIwMlwzNDMAXDI2NgRc MjAyAwEBASFcMjYyBlwyMTBcMjEwBglUXDI2MgoDAkJcMjYyAlwyMTBcMzE3XDIwMjYAXDIxMFwy NjZcMjAzXDIzN1wyMzcBXDI0NFwyNjIBA1RcMjYyBAJBXDI2MgNcMjAyEABcMjExXDIzNylcMjA3 IiBbbmlsICgobmFtZSAuICJFbWFjcyBDb21tYW5kcyIpIChpbml0ICNbMCAiXDMwMVwzMDJcMzAz XDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwyMDMjAFwzMDVcMzAwIVwyMDMjAHJcMzAw cVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbI1swICJcMzAyXDMwMVwzMDBcMzAzXDIxMVwz MDQlXDIwNyIgW2NvbW1hbmRwICM8b2JhcnJheSBuPTk4OTE5PiBoZWxtLWNvbXAtcmVhZC1nZXQt Y2FuZGlkYXRlcyBuaWwgIiJdIDZdIGhlbG0taW5pdC1jYW5kaWRhdGVzLWluLWJ1ZmZlciBnbG9i YWwgZnVuY3Rpb25wIGJ1ZmZlcnAgYnVmZmVyLWxpdmUtcCBidWZmZXItc3RyaW5nXSA0XSkgKGNh bmRpZGF0ZXMgLiBoZWxtLWNhbmRpZGF0ZXMtaW4tYnVmZmVyKSAoY2xlYW51cCAuIGhlbG0tTS14 LS11bndpbmQtZm9ybXMpIChrZXltYXAga2V5bWFwIChrZXltYXAgKDEzIC4gaGVsbS1jb25maXJt LWFuZC1leGl0LW1pbmlidWZmZXIpKSBrZXltYXAgKDI5IC4gaGVsbS1NLXgtdG9nZ2xlLXNob3J0 LWRvYykgKDIxIC4gaGVsbS1NLXgtdW5pdmVyc2FsLWFyZ3VtZW50KSBrZXltYXAgKDI3IGtleW1h cCAoMTMgLiBoZWxtLWNyLWVtcHR5LXN0cmluZykpIChDLXJldHVybiAuIGhlbG0tY3ItZW1wdHkt c3RyaW5nKSBrZXltYXAgKDIxIC4gaGVsbS1leGVjdXRlLXBlcnNpc3RlbnQtYWN0aW9uKSAoZjEy IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbMTEgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwg bmlsXSkgKGYxMSAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzEwIGhlbG0tc2VsZWN0LW50aC1hY3Rp b25dIDIgbmlsIG5pbF0pIChmMTAgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFs5IGhlbG0tc2VsZWN0 LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmOSAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzggaGVs bS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGY4IC4gI1swICJcMzAxXDMwMCFcMjA3 IiBbNyBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAoZjcgLiAjWzAgIlwzMDFc MzAwIVwyMDciIFs2IGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmNiAuICNb MCAiXDMwMVwzMDAhXDIwNyIgWzUgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkg KGY1IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbNCBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5p bCBuaWxdKSAoZjQgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFszIGhlbG0tc2VsZWN0LW50aC1hY3Rp b25dIDIgbmlsIG5pbF0pIChmMyAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzIgaGVsbS1zZWxlY3Qt bnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGYyIC4gI1swICJcMzAxXDMwMCFcMjA3IiBbMSBoZWxt LXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAobWVudS1iYXIga2V5bWFwIChoZWxwLW1l bnUga2V5bWFwIChkZXNjcmliZSBrZXltYXAgKGRlc2NyaWJlLW1vZGUgLiBoZWxtLWhlbHApKSkp IChoZWxwIGtleW1hcCAoMTA5IC4gaGVsbS1oZWxwKSkgKDIzIC4gaGVsbS1oZWxtLXlhbmstdGV4 dC1hdC1wb2ludC13aXRoLXN1YmtleXMpIChmMSAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzAgaGVs bS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKDggLiBiYWNrd2FyZC1kZWxldGUtY2hh ci11bnRhYmlmeSkgKDIwIC4gaGVsbS10b2dnbGUtcmVzcGxpdC1hbmQtc3dhcC13aW5kb3dzKSAo Qy10YWIgLiB1bmRlZmluZWQpICg2NzEwODg5NyAuIGhlbG0tdG9nZ2xlLXN1c3BlbmQtdXBkYXRl KSAoMjYgLiBoZWxtLXRvZ2dsZS1mdWxsLWZyYW1lKSAoMyBrZXltYXAgKDMzNTU0NDU1IC4geWFu dC90b2dnbGUtcmVmaWxlLXRvLXRhc2tzKSAoNTcgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRb XDIwMg0AXDMwMFQhXDIwNyIgWzggbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0 LW50aF0gMiBuaWwgbmlsXSkgKDU2IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwz MDBUIVwyMDciIFs3IG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIg bmlsIG5pbF0pICg1NSAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3 IiBbNiBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxd KSAoNTQgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzUgbmls IGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUzIC4g I1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs0IG5pbCBoZWxtLWV4 ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MiAuICNbMCAiXDMw MlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMyBuaWwgaGVsbS1leGVjdXRlLXNl bGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAoNTEgLiAjWzAgIlwzMDJcMzAxXDIw MwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzIgbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24t YWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUwIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBU W1wyMDINAFwzMDBUIVwyMDciIFsxIG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1h dC1udGhdIDIgbmlsIG5pbF0pICg0OSAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBc MzAwVCFcMjA3IiBbMCBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAy IG5pbCBuaWxdKSAoMTEwIC4gaGVsbS1oZWxtLXJ1bi1jeWNsZS1yZXN1bWUtd2l0aC1zdWJrZXlz KSAoMTA4IC4gaGVsbS1kaXNwbGF5LWxpbmUtbnVtYmVycy1tb2RlKSAoNjIgLiBoZWxtLXRvZ2ds ZS10cnVuY2F0ZS1saW5lKSAoMjEgLiBoZWxtLXJlZnJlc2gpICg2IC4gaGVsbS1mb2xsb3ctbW9k ZSkgKDkgLiBoZWxtLWluc2VydC1vci1jb3B5KSAoMTEgLiBoZWxtLWtpbGwtc2VsZWN0aW9uLWFu ZC1xdWl0KSAoMjUgLiBoZWxtLXlhbmstc2VsZWN0aW9uKSAoMzcgLiBoZWxtLWV4Y2hhbmdlLW1p bmlidWZmZXItYW5kLWhlYWRlci1saW5lKSAoOTUgLiBoZWxtLXRvZ2dsZS1mdWxsLWZyYW1lKSAo NDUgLiBoZWxtLXN3YXAtd2luZG93cykpICg2NzEwODk4NyAuIGhlbG0tZW5sYXJnZS13aW5kb3cp ICg2NzEwODk4OSAuIGhlbG0tbmFycm93LXdpbmRvdykgKDE4IC4gdW5kZWZpbmVkKSAoMTkgLiB1 bmRlZmluZWQpICgyNCBrZXltYXAgKDU3IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDIN AFwzMDBUIVwyMDciIFs4IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0 LW50aF0gMiBuaWwgbmlsXSkgKDU2IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwz MDBUIVwyMDciIFs3IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50 aF0gMiBuaWwgbmlsXSkgKDU1IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBU IVwyMDciIFs2IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0g MiBuaWwgbmlsXSkgKDU0IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwy MDciIFs1IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBu aWwgbmlsXSkgKDUzIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDci IFs0IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwg bmlsXSkgKDUyIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFsz IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmls XSkgKDUxIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFsyIG5l Z2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkg KDUwIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFsxIG5lZ2F0 aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDQ5 IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFswIG5lZ2F0aXZl IGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDIgLiBo ZWxtLXJlc3VtZS1saXN0LWJ1ZmZlcnMtYWZ0ZXItcXVpdCkgKDk4IC4gaGVsbS1yZXN1bWUtcHJl dmlvdXMtc2Vzc2lvbi1hZnRlci1xdWl0KSAoNiAuIGhlbG0tcXVpdC1hbmQtZmluZC1maWxlKSkg KDEyNyAuIGhlbG0tZGVsZXRlLWNoYXItYmFja3dhcmQpICgxMSAuIGhlbG0tZGVsZXRlLW1pbmli dWZmZXItY29udGVudHMpICg2NzEwODg5NiAuIGhlbG0tdG9nZ2xlLXZpc2libGUtbWFyay1mb3J3 YXJkKSAoMCAuIGhlbG0tdG9nZ2xlLXZpc2libGUtbWFyaykgKEMtTS11cCAuIGhlbG0tc2Nyb2xs LW90aGVyLXdpbmRvdy1kb3duKSAoQy1NLWRvd24gLiBoZWxtLXNjcm9sbC1vdGhlci13aW5kb3cp IChNLXByaW9yIC4gaGVsbS1zY3JvbGwtb3RoZXItd2luZG93LWRvd24pIChNLW5leHQgLiBoZWxt LXNjcm9sbC1vdGhlci13aW5kb3cpICgxMiAuIGhlbG0tcmVjZW50ZXItdG9wLWJvdHRvbS1vdGhl ci13aW5kb3cpIChsZWZ0IC4gaGVsbS1wcmV2aW91cy1zb3VyY2UpIChyaWdodCAuIGhlbG0tbmV4 dC1zb3VyY2UpICgxNSAuIGhlbG0tbmV4dC1zb3VyY2UpICgxMCAuIGhlbG0tZXhlY3V0ZS1wZXJz aXN0ZW50LWFjdGlvbikgKDkgLiBoZWxtLXNlbGVjdC1hY3Rpb24pICgxMyAuIGhlbG0tbWF5YmUt ZXhpdC1taW5pYnVmZmVyKSAoNyAuIGhlbG0ta2V5Ym9hcmQtcXVpdCkgKDIyIC4gaGVsbS1zY3Jv bGwtZG93bikgKDI3IGtleW1hcCAoMTA0IC4gYmFja3dhcmQta2lsbC13b3JkKSAoOCAuIGJhY2t3 YXJkLWtpbGwtd29yZCkgKDEwOCAuIHlhbnQvaGVsbS15YW5rLXNlbGVjdGlvbi1vci1leGVjdXRl LXBlcnNpc3RlbnQtYWN0aW9uKSAoMTA1IC4gaGVsbS1wcmV2aW91cy1zb3VyY2UpICgxMDcgLiBo ZWxtLXByZXZpb3VzLWxpbmUpICgxMDYgLiBoZWxtLW5leHQtbGluZSkgKDExNCAuIHVuZGVmaW5l ZCkgKDExMCAuIG5leHQtaGlzdG9yeS1lbGVtZW50KSAoMTEyIC4gcHJldmlvdXMtaGlzdG9yeS1l bGVtZW50KSAoMTkgLiB1bmRlZmluZWQpICgxOCAuIHVuZGVmaW5lZCkgKDExNSAuIHVuZGVmaW5l ZCkgKDUgLiBoZWxtLWRpc3BsYXktYWxsLXNvdXJjZXMpICgxIC4gaGVsbS1zaG93LWFsbC1jYW5k aWRhdGVzLWluLXNvdXJjZSkgKDg1IC4gaGVsbS11bm1hcmstYWxsKSAoOTcgLiBoZWxtLW1hcmst YWxsKSAoMTA5IC4gaGVsbS10b2dnbGUtYWxsLW1hcmtzKSAoNDEgLiBoZWxtLW5leHQtdmlzaWJs ZS1tYXJrKSAoNDAgLiBoZWxtLXByZXYtdmlzaWJsZS1tYXJrKSAoOTEpICgzMiAuIGhlbG0tdG9n Z2xlLXZpc2libGUtbWFyay1iYWNrd2FyZCkgKDMzNTU0NDU0IC4gaGVsbS1zY3JvbGwtb3RoZXIt d2luZG93LWRvd24pICgyNSAuIGhlbG0tc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duKSAoMjIgLiBo ZWxtLXNjcm9sbC1vdGhlci13aW5kb3cpICgxMiAuIGhlbG0tcmVwb3NpdGlvbi13aW5kb3ctb3Ro ZXItd2luZG93KSAoMTExIC4gaGVsbS1uZXh0LXNvdXJjZSkgKDYyIC4gaGVsbS1lbmQtb2YtYnVm ZmVyKSAoNjAgLiBoZWxtLWJlZ2lubmluZy1vZi1idWZmZXIpICgxMTggLiBoZWxtLXNjcm9sbC11 cCkpIChuZXh0IC4gaGVsbS1uZXh0LXBhZ2UpIChwcmlvciAuIGhlbG0tcHJldmlvdXMtcGFnZSkg KEMtdXAgLiBoZWxtLWZvbGxvdy1hY3Rpb24tYmFja3dhcmQpIChDLWRvd24gLiBoZWxtLWZvbGxv dy1hY3Rpb24tZm9yd2FyZCkgKDE2IC4gaGVsbS1wcmV2aW91cy1saW5lKSAoMTQgLiBoZWxtLW5l eHQtbGluZSkgKHVwIC4gaGVsbS1wcmV2aW91cy1saW5lKSAoZG93biAuIGhlbG0tbmV4dC1saW5l KSBrZXltYXAgKDE4IC4gaGVsbS1taW5pYnVmZmVyLWhpc3RvcnkpIChlc2NhcGUgLiBrZXlib2Fy ZC1xdWl0KSAobWVudS1iYXIga2V5bWFwIChtaW5pYnVmICJNaW5pYnVmIiBrZXltYXAgKHByZXZp b3VzIG1lbnUtaXRlbSAiUHJldmlvdXMgSGlzdG9yeSBJdGVtIiBwcmV2aW91cy1oaXN0b3J5LWVs ZW1lbnQgOmhlbHAgIlB1dCBwcmV2aW91cyBtaW5pYnVmZmVyIGhpc3RvcnkgZWxlbWVudCBpbiB0 aGUgbWluaWJ1ZmZlciIpIChuZXh0IG1lbnUtaXRlbSAiTmV4dCBIaXN0b3J5IEl0ZW0iIG5leHQt aGlzdG9yeS1lbGVtZW50IDpoZWxwICJQdXQgbmV4dCBtaW5pYnVmZmVyIGhpc3RvcnkgZWxlbWVu dCBpbiB0aGUgbWluaWJ1ZmZlciIpIChpc2VhcmNoLWJhY2t3YXJkIG1lbnUtaXRlbSAiSXNlYXJj aCBIaXN0b3J5IEJhY2t3YXJkIiBpc2VhcmNoLWJhY2t3YXJkIDpoZWxwICJJbmNyZW1lbnRhbGx5 IHNlYXJjaCBtaW5pYnVmZmVyIGhpc3RvcnkgYmFja3dhcmQiKSAoaXNlYXJjaC1mb3J3YXJkIG1l bnUtaXRlbSAiSXNlYXJjaCBIaXN0b3J5IEZvcndhcmQiIGlzZWFyY2gtZm9yd2FyZCA6aGVscCAi SW5jcmVtZW50YWxseSBzZWFyY2ggbWluaWJ1ZmZlciBoaXN0b3J5IGZvcndhcmQiKSAocmV0dXJu IG1lbnUtaXRlbSAiRW50ZXIiIGV4aXQtbWluaWJ1ZmZlciA6a2V5LXNlcXVlbmNlICINIiA6aGVs cCAiVGVybWluYXRlIGlucHV0IGFuZCBleGl0IG1pbmlidWZmZXIiKSAocXVpdCBtZW51LWl0ZW0g IlF1aXQiIGFib3J0LXJlY3Vyc2l2ZS1lZGl0IDpoZWxwICJBYm9ydCBpbnB1dCBhbmQgZXhpdCBt aW5pYnVmZmVyIikgIk1pbmlidWYiKSkgKDI0IGtleW1hcCAoZG93biAuIG1pbmlidWZmZXItY29t cGxldGUtZGVmYXVsdHMpICh1cCAuIG1pbmlidWZmZXItY29tcGxldGUtaGlzdG9yeSkpICgxMyAu IGV4aXQtbWluaWJ1ZmZlcikgKDEwIC4gZXhpdC1taW5pYnVmZmVyKSAoNyAuIGFib3J0LW1pbmli dWZmZXJzKSAoQy10YWIgLiBmaWxlLWNhY2hlLW1pbmlidWZmZXItY29tcGxldGUpICg5IC4gc2Vs Zi1pbnNlcnQtY29tbWFuZCkgKFhGODZCYWNrIC4gcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50KSAo dXAgLiBwcmV2aW91cy1saW5lLW9yLWhpc3RvcnktZWxlbWVudCkgKHByaW9yIC4gcHJldmlvdXMt aGlzdG9yeS1lbGVtZW50KSAoWEY4NkZvcndhcmQgLiBuZXh0LWhpc3RvcnktZWxlbWVudCkgKGRv d24gLiBuZXh0LWxpbmUtb3ItaGlzdG9yeS1lbGVtZW50KSAobmV4dCAuIG5leHQtaGlzdG9yeS1l bGVtZW50KSAoMjcga2V5bWFwICgxMDUgLiBwYXJlZGl0LWNvbnZvbHV0ZS1zZXhwKSAoMTExIC4g cGFyZWRpdC1mb3J3YXJkLXNsdXJwLXNleHApICg2MCAuIG1pbmlidWZmZXItYmVnaW5uaW5nLW9m LWJ1ZmZlcikgKDExNCAuIHByZXZpb3VzLW1hdGNoaW5nLWhpc3RvcnktZWxlbWVudCkgKDExNSAu IG5leHQtbWF0Y2hpbmctaGlzdG9yeS1lbGVtZW50KSAoMTEyIC4gcHJldmlvdXMtaGlzdG9yeS1l bGVtZW50KSAoMTEwIC4gbmV4dC1oaXN0b3J5LWVsZW1lbnQpKSkgKGFjdGlvbiAuIGhlbG0tdHlw ZS1jb21tYW5kLWFjdGlvbnMpIChwZXJzaXN0ZW50LWFjdGlvbiAuIGhlbG0tTS14LXBlcnNpc3Rl bnQtYWN0aW9uKSAocGVyc2lzdGVudC1oZWxwIC4gIkRlc2NyaWJlIHRoaXMgY29tbWFuZCIpICho ZWxwLW1lc3NhZ2UgLiBoZWxtLU0teC1oZWxwLW1lc3NhZ2UpIChyZXF1aXJlcy1wYXR0ZXJuIC4g MCkgKGZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1lciBoZWxtLU0teC10cmFuc2Zvcm1lciAj PHN1YnIgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFf MjA+IGhlbG0tZnV6enktaGlnaGxpZ2h0LW1hdGNoZXMpICh2b2xhdGlsZSAuIHQpIChtYXRjaCBp ZGVudGl0eSkgKGZ1enp5LW1hdGNoIC4gdCkgKHJlZGlzcGxheSAuIGlkZW50aXR5KSAobm9tYXJr IC4gdCkgKGNvZXJjZSAuIGhlbG0tc3ltYm9saWZ5KSAoaGVhZGVyLWxpbmUgLiAjKCJDLXU6IERl c2NyaWJlIHRoaXMgY29tbWFuZCAoa2VlcGluZyBzZXNzaW9uKSIgMCAzIChmb250LWxvY2stZmFj ZSBoZWxwLWtleS1iaW5kaW5nIGZhY2UgaGVscC1rZXktYmluZGluZykpKSAocmVzdW1lIC4gaGVs bS1NLXgtcmVzdW1lLWZuKSAobXVsdGltYXRjaCAuIHQpIChtdXN0LW1hdGNoIC4gdCkgKGdyb3Vw IC4gaGVsbS1jb21tYW5kKSAoZGF0YSAuICNbMCAiXDMwMlwzMDFcMzAwXDMwM1wyMTFcMzA0JVwy MDciIFtjb21tYW5kcCAjPG9iYXJyYXkgbj05ODkxOT4gaGVsbS1jb21wLXJlYWQtZ2V0LWNhbmRp ZGF0ZXMgbmlsICIiXSA2XSkgKGdldC1saW5lIC4gYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0 aWVzKSAoc2VhcmNoIGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhlbG0tbW0tc2VhcmNoIGhlbG0tY2Fu ZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4gaGVsbS1mdXp6eS1zZWFyY2gpKSBu aWwgMCAxNTAgKGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhlbG0tbW0tc2VhcmNoIGhlbG0tY2FuZGlk YXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4gaGVsbS1mdXp6eS1zZWFyY2gpIGJ1ZmZl ci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAicHJvZiByZXAiIG1ha2UtaGFzaC10YWJsZSA6dGVz dCBlcXVhbCBhbGxvdy1kdXBzIGhlbG0tc2V0LWNhc2UtZm9sZC1zZWFyY2ggMCAxIG5pbCAoaW52 YWxpZC1yZWdleHApIGxvb2tpbmctYXQgYXBwbHkgcG9zLWJvbCBwb3MtZW9sIGdldC10ZXh0LXBy b3BlcnR5IG1hdGNoLXBhcnQgcHJvcGVydGl6ZSBnZXRoYXNoICIiIGhlbG0tc2VhcmNoLW1hdGNo LXBhcnQgcHV0aGFzaCBhc3NvYy1kZWZhdWx0IGZpbHRlci1vbmUtYnktb25lIGZ1bmN0aW9ucCBj YXNlLWZvbGQtc2VhcmNoXSAxOF0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhl bHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNl LWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImhl bG0tLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXItMSIgMCAzNiAoaGVscC1hcmdzIChoZWxt LS1zZWFyY2gtZnJvbS1jYW5kaWRhdGUtYnVmZmVyLTEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXIi IDAgMzMgKGhlbHAtYXJncyAoaGVsbS1zZWFyY2gtZnJvbS1jYW5kaWRhdGUtYnVmZmVyKSBjYXRl Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jYW5kaWRhdGVz LWluLWJ1ZmZlci0xIiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXIt MSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2Fu ZGlkYXRlcy1pbi1idWZmZXIiIDAgMjUgKGhlbHAtYXJncyAoaGVsbS1jYW5kaWRhdGVzLWluLWJ1 ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t YXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMyIChoZWxwLWFyZ3MgKGhlbG0tYXBwbHkt ZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0 b24gKHQpKSkgIygiaGVsbS1pbnRlcnByZXQtdmFsdWUiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1p bnRlcnByZXQtdmFsdWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp KSAjKCJoZWxtLWdldC1jYW5kaWRhdGVzIiAwIDE5IChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWNhbmRp ZGF0ZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt LWdldC1jYWNoZWQtY2FuZGlkYXRlcyIgMCAyNiAoaGVscC1hcmdzIChoZWxtLWdldC1jYWNoZWQt Y2FuZGlkYXRlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1tYXRj aGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS0t Y29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxlY3QtbWF0Y2hlcykg Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBkYXRl IiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1uZXctaW5wdXQiIDAgMjAgKGhlbHAtYXJn cyAoaGVsbS1jaGVjay1uZXctaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKV0gMyBbIygiaGVsbS1mbGV4LS1zdHlsZS1zY29yZSIgMCAyMiAoaGVscC1hcmdz IChoZWxtLWZsZXgtLXN0eWxlLXNjb3JlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi dXR0b24gKHQpKSkgIygiaGVsbS1mdXp6eS1mbGV4LXN0eWxlLXNjb3JlIiAwIDI3IChoZWxwLWFy Z3MgKGhlbG0tZnV6enktZmxleC1zdHlsZS1zY29yZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tc2NvcmUtY2FuZGlkYXRlLWZvci1wYXR0ZXJuIiAw IDMyIChoZWxwLWFyZ3MgKGhlbG0tc2NvcmUtY2FuZGlkYXRlLWZvci1wYXR0ZXJuKSBjYXRlZ29y eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlv biAxMTA+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAo a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXlt YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv bikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht b3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2Ut MiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFj a3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3 YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbNTE0ICJcMzAzXDIwMwgAXDMwNVwyMDIJAFwzMDZc MzAyXDIwMxoAAjpcMjAzGgBcMzA3AQQhIVwyMDIwAAI6XDIwMyUAXDIxMQMhXDIwMjAAXDMwMlwy MDMvAFwzMDcDIVwyMDIwAAJcMzAyXDIwM0EAAjpcMjAzQQBcMzA3AgQhIVwyMDJXAAI6XDIwM0wA AQMhXDIwMlcAXDMwMlwyMDNWAFwzMDcDIVwyMDJXAAJcMzEwAlwzMDBcIlwyMDZrAFwzMTECXDMx MgQMXCJcMzEzBSFHRFwzMDAjXDMxMAJcMzAwXCJcMjA2fwBcMzExAlwzMTIEDFwiXDMxMwUhR0Rc MzAwIwFBQAFBQANAA0ABAVVcMjAzXDIzMABcMzAxP1wyMDVcMjMzAAMDV1wyMDcBAVZcMjA3IiBb I3MoaGFzaC10YWJsZSB0ZXN0IGVxdWFsIGRhdGEgKCJwcm9maWxlci1yZXBvcnQtcHJldmlvdXMt ZW50cnkiICgwLjAgMzApICJwcm9maWxlci1yZXBvcnQtZGVzY3JpYmUtZW50cnkiICgwLjAgMzAp ICJwcm9maWxlci1yZXBvcnQtcmVuZGVyLWNhbGx0cmVlIiAoMC4wIDMxKSAiZm9udC1sb2NrLXBy b2ZpbGVyLXN0b3AtYW5kLXJlcG9ydCIgKDAuMCAzNCkgInByb2ZpbGVyLXJlcG9ydCIgKDAuMCAx NSkgInByb2ZpbGVyLXJlcG9ydC13cml0ZS1wcm9maWxlIiAoMC4wIDI5KSAicHJvZmlsZXItcmVw b3J0LWNvbGxhcHNlLWVudHJ5IiAoMC4wIDMwKSAiZm9udC1sb2NrLXByb2ZpbGVyLXJlcG9ydC1t b2RlIiAoMC4wIDMwKSAicHJvZmlsZXItcmVwb3J0LXRvZ2dsZS1lbnRyeSIgKDAuMCAyOCkgInBy b2ZpbGVyLXJlcG9ydC1jb21wYXJlLXByb2ZpbGUiICgwLjAgMzEpICJwcm9maWxlci1yZXBvcnQt ZmluZC1lbnRyeSIgKDAuMCAyNikgImZvbnQtbG9jay1wcm9maWxlci1yZXBvcnQiICgwLjAgMjUp ICJwcm9maWxlci1yZXBvcnQtYXNjZW5kaW5nLXNvcnQiICgwLjAgMzApICJwcm9maWxlci1yZXBv cnQtZXhwYW5kLWVudHJ5IiAoMC4wIDI4KSAicHJvZmlsZXItcmVwb3J0LXJlbmRlci1yZXZlcnNl ZC1jYWxsdHJlZSIgKDAuMCA0MCkgInByb2ZpbGVyLXJlcG9ydC1kZXNjZW5kaW5nLXNvcnQiICgw LjAgMzEpICJwcm9maWxlci1yZXBvcnQtbmV4dC1lbnRyeSIgKDAuMCAyNikgInByb2ZpbGVyLXJl cG9ydC1tb2RlIiAoMC4wIDIwKSkpIG5pbCBuaWwgdCBoZWxtLXBhdHRlcm4gY2RyIGNhciBoZWxt LWJhc2VuYW1lIGdldGhhc2ggcHV0aGFzaCBoZWxtLXNjb3JlLWNhbmRpZGF0ZS1mb3ItcGF0dGVy biBoZWxtLXN0cmluZ2lmeV0gMTMgIgoKKGZuIFMxIFMyKSJdIGNhdGVnb3J5IHQgZm9sbG93LWxp bmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rp b24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFj ZSBidXR0b24pKSAjKCJoZWxtLWZ1enp5LW1hdGNoaW5nLWRlZmF1bHQtc29ydC1mbi0xIiAwIDM3 IChoZWxwLWFyZ3MgKGhlbG0tZnV6enktbWF0Y2hpbmctZGVmYXVsdC1zb3J0LWZuLTEpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPHN1YnItbmF0aXZlLWVs aXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFtYmRhXzIw PiIgMjAgNzMgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1h cmdzIChGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xhbWJkYV8y MCkpKSAjKCJoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIgMCAzMiAoaGVscC1hcmdz IChoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUt dHJhbnNmb3JtZXIiIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNhbmRp ZGF0ZS10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0 KSkpICMoImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0 ZS1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aGVsbS0tY29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxlY3QtbWF0 Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t dXBkYXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1uZXctaW5wdXQiIDAgMjAgKGhl bHAtYXJncyAoaGVsbS1jaGVjay1uZXctaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQiIDAgMjcgKGhl bHAtYXJncyAoaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0 aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiA0MkY+IiAyMCAy MyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3Vj aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2Ny ZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxp bmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVz aC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9u KSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikp IGJ1dHRvbi1kYXRhICNbMCAiCFwyMDYFAAk/XDIwNRkAXDMwMiByXDMwM1wzMDQCXCJcMjE2XDMw NSBcMjEwXDMwNiAqXDI2MgFcMjA3IiBbaGVsbS1pbi1wZXJzaXN0ZW50LWFjdGlvbiBoZWxtLXN1 c3BlbmQtdXBkYXRlLWZsYWcgaW50ZXJuYWwtLWJlZm9yZS1zYXZlLXNlbGVjdGVkLXdpbmRvdyBt YWtlLWNsb3N1cmUgI1swICJcMzAxXDMwMCFcMjA3IiBbVjAgaW50ZXJuYWwtLWFmdGVyLXNhdmUt c2VsZWN0ZWQtd2luZG93XSAyXSBoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQgaGVsbS1wcmlu dC1lcnJvci1tZXNzYWdlc10gNF0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhl bHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNl LWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImFw cGx5IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJ0aW1lci1ldmVudC1oYW5kbGVyIiAwIDE5IChoZWxwLWFyZ3MgKHRp bWVyLWV2ZW50LWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo dCkpKV0gMyBbIygid2hlcmUtaXMtaW50ZXJuYWwiIDAgMTcgKGhlbHAtYXJncyAod2hlcmUtaXMt aW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJz dWJzdGl0dXRlLWNvbW1hbmQta2V5cyIgMCAyMyAoaGVscC1hcmdzIChzdWJzdGl0dXRlLWNvbW1h bmQta2V5cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl bG0tZGlzcGxheS1tb2RlLWxpbmUiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1kaXNwbGF5LW1vZGUt bGluZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t bW92ZS1zZWxlY3Rpb24tY29tbW9uIiAwIDI2IChoZWxwLWFyZ3MgKGhlbG0tbW92ZS1zZWxlY3Rp b24tY29tbW9uKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi aGVsbS0tdXBkYXRlLW1vdmUtZmlyc3QtbGluZSIgMCAyOCAoaGVscC1hcmdzIChoZWxtLS11cGRh dGUtbW92ZS1maXJzdC1saW5lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g KHQpKSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1p bnB1dCIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1p bnB1dCIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0 aW9uIDQyRj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFw IChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtl eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0 dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3Vz ZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBi YWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZv cndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAz XDMwNAJcIlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQt YWN0aW9uIGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2Vs ZWN0ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5h bC0tYWZ0ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1p bnB1dCBoZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug YnV0dG9uKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRpbWVyLWV2ZW50LWhhbmRsZXIiIDAgMTkg KGhlbHAtYXJncyAodGltZXItZXZlbnQtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhl bHAtYXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAo aGVsbS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC1yZWFkLWV4dGVu ZGVkLWNvbW1hbmQiIDAgMzAgKGhlbHAtYXJncyAoaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21t YW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoImhl bG0taGFuZGxlLXdpbm5lci1ib3JpbmctYnVmZmVycyIgMCAzMyAoaGVscC1hcmdzIChoZWxtLWhh bmRsZS13aW5uZXItYm9yaW5nLWJ1ZmZlcnMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u IGJ1dHRvbiAodCkpKSAjKCJoZWxtLWxvZy1ydW4taG9vayIgMCAxNyAoaGVscC1hcmdzIChoZWxt LWxvZy1ydW4taG9vaykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp ICMoImhlbG0tY2xlYW51cCIgMCAxMiAoaGVscC1hcmdzIChoZWxtLWNsZWFudXApIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNw IEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFtYmRhXzkxPiIg MjAgNzMgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdz IChGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xhbWJkYV85MSkp KSAjKCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAt YXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo ImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwICho ZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAo aGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm dW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2 ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29tbWFu ZC1leGVjdXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhlY3V0ZSkgY2F0ZWdvcnkgaGVs cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICJuaWwiICJuaWwiICJuaWwiICJuaWwiICJu aWwiXSA3IFsjKCJzZWxlY3QtZnJhbWUtc2V0LWlucHV0LWZvY3VzIiAwIDI4IChoZWxwLWFyZ3Mg KHNlbGVjdC1mcmFtZS1zZXQtaW5wdXQtZm9jdXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0 dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWZyYW1lLW9yLXdpbmRvdy1jb25maWd1cmF0aW9uIiAw IDM0IChoZWxwLWFyZ3MgKGhlbG0tZnJhbWUtb3Itd2luZG93LWNvbmZpZ3VyYXRpb24pIGNhdGVn b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNsZWFudXAiIDAg MTIgKGhlbHAtYXJncyAoaGVsbS1jbGVhbnVwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv biBidXR0b24gKHQpKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBGNjE2ZTZmNmU3OTZkNmY3NTcz MmQ2YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xhbWJkYV85MT4iIDIwIDczIChidXR0b24gKHQpIGNh dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGhlbHAtYXJncyAoRjYxNmU2ZjZlNzk2ZDZmNzU3 MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfOTEpKSkgIygiaGVsbS1pbnRlcm5hbCIg MCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1 dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5 IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJn cyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl bG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0teC1y ZWFkLWV4dGVuZGVkLWNvbW1hbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv biAodCkpKSAjKCJoZWxtLU0teCIgMCA4IChoZWxwLWFyZ3MgKGhlbG0tTS14KSBjYXRlZ29yeSBo ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZnVuY2FsbC1pbnRlcmFjdGl2ZWx5 IiAwIDIxIChoZWxwLWFyZ3MgKGZ1bmNhbGwtaW50ZXJhY3RpdmVseSkgY2F0ZWdvcnkgaGVscC1m dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbW1hbmQtZXhlY3V0ZSIgMCAxNSAoaGVs cC1hcmdzIChjb21tYW5kLWV4ZWN1dGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1 dHRvbiAodCkpKSAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIl0gNiBbIkF1dG9tYXRpYyBH QyIgIm5pbCJdIDEyNTApKSAoMjYxMTcgMTI1NzcgNzkwMzczIDcxNTAwMCkgbmlsXQo= --=-=-= Content-Type: text/plain -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> --=-=-=--
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 08:53:09 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 04:53:09 2024 Received: from localhost ([127.0.0.1]:39014 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rplVV-0000Z7-BS for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 04:53:09 -0400 Received: from out-172.mta0.migadu.com ([2001:41d0:1004:224b::ac]:16600) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rplVR-0000Y4-Ct for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 04:53:07 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711615978; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Hgr01q93yqfEv9BNDIRIzqFx7smpbyKimILzF099i1Y=; b=aumW62MSbpNbNusZ1vq5XIMLg0xbtuHxjn3pfC49mtkVENLkzc4bDFVa0yDwRjxZBshpHV 6QGsxBIVYWi2X4XhEox9n9Q6FMgAbPA8TyfNO8c2z0aovZDWlaw4tvhu5mDIrAFSKz3rYm FzpM1r5RxrEURFgHUhEsy7oBSiUX77bYfOcW1FuR2eg+9wqWisSmBh3ktEVbl3pqM/g6Hv nFqDHOGC2WuLjhXx3wQhTZ7S/IPr99c0SoMDRW+HUNFwokeHSmLWJ/bPMK32ZxDUQerqgv WqE6GVActW80dm/6kQQVUR2XlUDSnP49yKtapNCPbB/IeP0E93A4uT67eqogxw== From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <874jcqygpn.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN> <874jcqygpn.fsf@HIDDEN> Date: Thu, 28 Mar 2024 09:52:53 +0100 Message-ID: <87y1a2wxei.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, =?utf-8?B?Sm/Do28g?= =?utf-8?B?VMOhdm9yYQ==?= <joaotavora@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 (-) Theodor Thornhill <theo@HIDDEN> writes: > Eli Zaretskii <eliz@HIDDEN> writes: > >>> Cc: 70036 <at> debbugs.gnu.org >>> Date: Wed, 27 Mar 2024 22:43:25 +0100 >>> From: Theodor Thornhill via "Bug reports for GNU Emacs, >>> the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> >>> >>> Felician Nemeth <felician.nemeth@HIDDEN> writes: >>> >>> >> I've been studying Eglots performance and have been noticing a couple >>> >> of things that I find very interesting. It seems like `file-truename` >>> >> is in the hot path >>> > >>> > I think Eglot repeatedly calls file-truename with the same argument (or >>> > with an argument from a small set of filenames.) >>> >>> This is true, to some extent. >> >> Can someone explain why Eglot needs to call file-truename in the first >> place? > [...] > handler. We could store the last received diagnostics in the server > object, and do a quick lookup from known buffers there. > > Theo It seems to be there from the very early days, like in 2018. My guess is that we simply never noticed the performance issues here due to other stuff like json parsing etc. CC'd Joao to get some perspective whether or not it is intentional or needed at all. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 07:10:48 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 03:10:48 2024 Received: from localhost ([127.0.0.1]:38911 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpjuQ-0000KX-2O for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:10:48 -0400 Received: from out-175.mta0.migadu.com ([91.218.175.175]:57343) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpjuL-0000JU-9Z for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:10:43 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711609834; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=abEmjJWFPetvcclYMyYRISoFipxOfAjtUlb0dxNIXa4=; b=xoSsxs0fT+IakAHvuyuL3xfPd9/ZSRyL3PFjGciYy/cyuEGCDVZL1to78696qsDAE1B8eQ 4OkVnyOepzCRSBssxQPAlRRwv1KaTJaon7qDkfHHojURWKVo9GExkkY1iWxL1tHNhlVgjz 3W9O7RJczgZaQjhmHdw9Llx6VyuN22SklBD/Rs1fdNj1SkPhdCLRbyn8OhzhcMHaBpWLvx 89IYhRy+bhIgyFtCg0qgURQ0kVkEgTochxqkaFxFb/urBtqXe/EhNk5vZ4FoNPbKDbp2Wk HGzKzq85tjIdmpotR7tkGMiqDmIV1Rbm6bCroYbUKpNnCtOphXxYpjYdTeuN2g== From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <86wmpmhp0a.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN> Date: Thu, 28 Mar 2024 08:10:28 +0100 Message-ID: <874jcqygpn.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@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 (-) Eli Zaretskii <eliz@HIDDEN> writes: >> Cc: 70036 <at> debbugs.gnu.org >> Date: Wed, 27 Mar 2024 22:43:25 +0100 >> From: Theodor Thornhill via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> >> >> Felician Nemeth <felician.nemeth@HIDDEN> writes: >> >> >> I've been studying Eglots performance and have been noticing a couple >> >> of things that I find very interesting. It seems like `file-truename` >> >> is in the hot path >> > >> > I think Eglot repeatedly calls file-truename with the same argument (or >> > with an argument from a small set of filenames.) >> >> This is true, to some extent. > > Can someone explain why Eglot needs to call file-truename in the first > place? I tried quickly just replacing file-truename with expand-file-name, and from some quick testing, it seems to work, and of course remove file-truenames slow performance in the profiles: ``` @@ -1085,7 +1089,7 @@ eglot-uri-to-path (defun eglot-path-to-uri (path) "Convert PATH, a file name, to LSP URI string and return it." - (let ((truepath (file-truename path))) + (let ((truepath (expand-file-name path))) (if (and (url-type (url-generic-parse-url path)) ;; It might be MS Windows path which includes a drive ;; letter that looks like a URL scheme (bug#59338) ``` This wouldn't help for the usage in find-buffer-visiting, though. But this one could more easily be replaced by reworking the diagnostics handler. We could store the last received diagnostics in the server object, and do a quick lookup from known buffers there. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 07:04:36 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 03:04:35 2024 Received: from localhost ([127.0.0.1]:38897 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpjoQ-0008Iz-A1 for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:04:35 -0400 Received: from out-176.mta1.migadu.com ([95.215.58.176]:56291) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpjoO-0008I3-4c for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:04:33 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711609466; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=lCB9PQCPWazdIAUEQnqTKHme6QPE0eACk3hSnqfstzE=; b=me2+Ea5y6jAUvc8iTyQa6B4uiT7KEEDSq+LDThZQWed1v6CVKQ0v4xhDjemViask/Qg8Lz vJa+9rz1S3FFtP9n3x5Lxi32lukaJSQ1yAVh7lwK9oqc3kqGDXPdWwy0VJwYAmpsd4wQ2L ZaOlWNif1a6FuwxsxMIpkxls/ty05/Csn63zB0zevCaXRUmrKvBMgHUDzzFwxGELgRtkbS J95ct7FCMjnkR6TzKCBsoKnv44HcOQmDqIcrXOvpgYekC8lt+W1pyEw786p82+1B/qKPYa SrVdmBhKnNTpZNGQDOZJq1XjiAoviPb3VySLBe8TSZtDVE2Yl0rwyeCyMqLh8A== From: Theodor Thornhill <theo@HIDDEN> To: Po Lu <luangruo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87ttkr3vku.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN> <87frwbxrs6.fsf@HIDDEN> <87zfuj40pz.fsf@HIDDEN> <87ttkr3vku.fsf@HIDDEN> Date: Thu, 28 Mar 2024 08:04:22 +0100 Message-ID: <877chmygzt.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) Po Lu <luangruo@HIDDEN> writes: > Po Lu <luangruo@HIDDEN> writes: > >> Haiku supports realpath, but not wordexp. We must reimplement virtually >> all POSIX functions of this nature on Windows, as the versions provided >> by system C libraries, if they exist at all, are inadequate for some >> reason or another. Furthermore, these functions are absent from a >> number of other operating systems, such as OpenBSD and Android 14.0, and >> on others (Alpine, I believe) wordexp is severely inefficient for being >> implemented as a wrapper around /bin/sh. > > BTW, after reading the subject of this bug report, I don't believe there > is a place for wordexp at all. wordexp is no replacement for > Fexpand_file_name, but rather a means of expanding input in the manner > of a shell, which input might include arithmetic expressions, shell > command substitutions, and other expressions valid as shell input. If > Fexpand_file_name alone will not suffice, TRT is to replicate the > mechanics of file-truename in whole, not cutting corners with these > admittedly tempting functions. I agree, and believe you are right. I think Fexpand_file_name should be enough. I'll look into it! Thanks!
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 07:03:58 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 03:03:58 2024 Received: from localhost ([127.0.0.1]:38891 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpjno-0008EU-KP for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:03:58 -0400 Received: from out-176.mta1.migadu.com ([95.215.58.176]:51364) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpjnl-0008DO-5S for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:03:55 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711609426; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=hVrUWW2gJT6abc/q+zGDPCZsIGQQvm2njGpdFx38rjw=; b=W7Hh5Kfi6tyD2jK/+WWBXfsVWzkfwFiKfbcLEjZaDhCN2dmPEvQ8hxtGJnsrjHa7VBWT3w ULYR0kqnGHqyM6scQcT7+DXU+JdwKfPzxwg9GR7gYvKnWFXDVu1tRyisLcJWHVzFDXOxET bXugLnI4pmxSiizAw94HTYYRmiOj/DgOWsOWOGlb0krUiN5iBh09mrmXWX1QbbLE71cEQT 4cgU7+qQntmmdjpqmGOstSCYHYSG81mRy1ea88+aWPb3EZtIAl6iBkHYKCYZURp7aHS5sY l4yEXKfjLPBeiPG85Y/YFargRh7dQ/K9eZgwXIFsxZgDj5yNfTC4gVjkHFA93w== From: Theodor Thornhill <theo@HIDDEN> To: Po Lu <luangruo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87zfuj40pz.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN> <87frwbxrs6.fsf@HIDDEN> <87zfuj40pz.fsf@HIDDEN> Date: Thu, 28 Mar 2024 08:03:43 +0100 Message-ID: <87a5miyh0w.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) Po Lu <luangruo@HIDDEN> writes: > Theodor Thornhill <theo@HIDDEN> writes: > >> OK - for my education on the portability argument. Is that because of >> Emacs support targets like haiku and old versions of windows, or >> something else inherent in these functions? > > Haiku supports realpath, but not wordexp. We must reimplement virtually > all POSIX functions of this nature on Windows, as the versions provided > by system C libraries, if they exist at all, are inadequate for some > reason or another. Furthermore, these functions are absent from a > number of other operating systems, such as OpenBSD and Android 14.0, and > on others (Alpine, I believe) wordexp is severely inefficient for being > implemented as a wrapper around /bin/sh. Thanks for the input! Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 07:03:44 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 03:03:44 2024 Received: from localhost ([127.0.0.1]:38887 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpjna-0008Cv-Mz for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:03:44 -0400 Received: from out-178.mta1.migadu.com ([2001:41d0:203:375::b2]:28873) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpjnV-0008C0-U9 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:03:40 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711609410; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=y6dwAIoc9FD82X3mPQJuOFejtBgFIUXEoWJoBxtIVI4=; b=gJIQIJFFkqxHrInQ8vq6vC9o5Dr+TXw5VksrUSvtoWPQ0Mke6a/M7QbBEX5AYV604EeQrX M4lvEvcrtH+h9BTzIp2JvbVwM4qNpzBfWx5WojobWYBoSrsvdEruugNIIDXPB+GqRtD89q 5wEDMGbdQVMoXH8v2TFl4+eD8HWc1j4jXUvYAim//iq9ahsIcHjgGunoSNKGrPQpOSScUb 7aZJYnKLhOYnWBhmB+B3MJDlJyDt+AoV+iTaxZkHU+j4L2MlqNdcIUoEo6rUsb1ksxEmZs RQEqFv8q4ScsxaeKsUka7kufegZf/MkW8J7VolK8cIjVVv0MVYcBSI9NOQ8GPw== From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <86ttkqho52.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN> <87frwbxrs6.fsf@HIDDEN> <86ttkqho52.fsf@HIDDEN> Date: Thu, 28 Mar 2024 08:03:25 +0100 Message-ID: <87cyreyh1e.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (-) Eli Zaretskii <eliz@HIDDEN> writes: >> From: Theodor Thornhill <theo@HIDDEN> >> Cc: 70036 <at> debbugs.gnu.org >> Date: Wed, 27 Mar 2024 22:56:41 +0100 >> >> Eli Zaretskii <eliz@HIDDEN> writes: >> >> >> As for the patch - it now relies on wordexp to resolve the paths, and I >> >> believe there is no real feature parity with the old variant as for now, >> >> but I haven't seen any issues thus far. If this approach is accepted I >> >> will of course make sure we have feature parity, unless that isn't >> >> wanted. >> > >> > We cannot rely on wordexp and we cannot rely on realpath: both are not >> > portable enough. >> >> OK - for my education on the portability argument. Is that because of >> Emacs support targets like haiku and old versions of windows, or >> something else inherent in these functions? > > Platforms other than GNU/Linux are the main concern, yes. Another > aspect to consider is whether the function is available in Gnulib -- > if it is, we can import the Gnulib implementation and use it on > platforms which don't provide it natively; in that case, using such a > function is okay (but the MS-Windows port will likely need to provide > its own implementation, because Emacs uses Unicode APIs to access and > process file names, something Gnulib doesn't do on Windows). > > In this case, realpath is available in Gnulib, but wordexp isn't, > AFAICT. And I'm not even sure we want to use wordexp here, because > (reading its docs) it does stuff we don't want to do in file-truename. > Why did you need to call it here? > Thanks! I'll admit Fexpand-file-name likely does what we want in this case, so I'll look into this. >> Another much simpler way to improve Eglot performance her could be to >> allow for the relevant functions to execute through handlers, to not >> break other parts of Emacs. For example `find-buffer-visiting` could >> allow to run through a simpler function that merely expands and looks up >> the current file, considering that the LSP server likely reports on >> files that are already existing, and likely most symlink shenanigans >> aren't an issue here. Just thinking out loudly on this. > > AFAIR, find-buffer-visiting was significantly sped up recently (see > bug#66117), so if you did your benchmarks with Emacs before commit > b7a737ef49 on master, perhaps do it again with the latest master > branch. These reports are made using some commit from yesterday, so these speedups should be included. `find-buffer-visiting` is used inside of the `publishDiagnostics` handler, which sometimes receives file paths for the whole project, so this really becomes a bottleneck for servers that provide project wide diags.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 06:22:13 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 02:22:13 2024 Received: from localhost ([127.0.0.1]:38844 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpj9R-0004Y3-BL for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 02:22:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36884) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rpj9P-0004XK-Da for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 02:22:12 -0400 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 1rpj9I-000152-HX; Thu, 28 Mar 2024 02:22:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=UhZXiJZWBlG+OvvBG2MmwQUR3+cI2M9HbdyQdZO2sAY=; b=A8xGDVixr/f7 pve1gXRDX0MJ0Jv2sd50W+R6Mf7ec5i9bBQVDtXSQxo0z6QIhZ5F6BSbsN7TnXPaY+TDHG8qG+mcb 62Ls+RzJvhjpug1FWhTkNpwpLUNStuWjkGR63ug0YtdSF9Nlhj9J6QIhgt2gOn/FtSXUlqzgL8r73 4s0o6Nrt1RZhDonlLWHk3DKEENR0BtCGofsO2dtd2W3lell9Hi7oNFrqTZtibHvSZYTjmKMp8cTov CzYgQJurbF1v0rq9nylo9FXiI0eiY9Ri5lKhscFKhVeXUyCaW/qKyzAiiZa7uLK0JNJ6P58Oln89J OI1w0L5P4G3/rU9hvfjROA==; Date: Thu, 28 Mar 2024 08:22:01 +0200 Message-Id: <86ttkqho52.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> In-Reply-To: <87frwbxrs6.fsf@HIDDEN> (message from Theodor Thornhill on Wed, 27 Mar 2024 22:56:41 +0100) Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN> <87frwbxrs6.fsf@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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: Theodor Thornhill <theo@HIDDEN> > Cc: 70036 <at> debbugs.gnu.org > Date: Wed, 27 Mar 2024 22:56:41 +0100 > > Eli Zaretskii <eliz@HIDDEN> writes: > > >> As for the patch - it now relies on wordexp to resolve the paths, and I > >> believe there is no real feature parity with the old variant as for now, > >> but I haven't seen any issues thus far. If this approach is accepted I > >> will of course make sure we have feature parity, unless that isn't > >> wanted. > > > > We cannot rely on wordexp and we cannot rely on realpath: both are not > > portable enough. > > OK - for my education on the portability argument. Is that because of > Emacs support targets like haiku and old versions of windows, or > something else inherent in these functions? Platforms other than GNU/Linux are the main concern, yes. Another aspect to consider is whether the function is available in Gnulib -- if it is, we can import the Gnulib implementation and use it on platforms which don't provide it natively; in that case, using such a function is okay (but the MS-Windows port will likely need to provide its own implementation, because Emacs uses Unicode APIs to access and process file names, something Gnulib doesn't do on Windows). In this case, realpath is available in Gnulib, but wordexp isn't, AFAICT. And I'm not even sure we want to use wordexp here, because (reading its docs) it does stuff we don't want to do in file-truename. Why did you need to call it here? > Another much simpler way to improve Eglot performance her could be to > allow for the relevant functions to execute through handlers, to not > break other parts of Emacs. For example `find-buffer-visiting` could > allow to run through a simpler function that merely expands and looks up > the current file, considering that the LSP server likely reports on > files that are already existing, and likely most symlink shenanigans > aren't an issue here. Just thinking out loudly on this. AFAIR, find-buffer-visiting was significantly sped up recently (see bug#66117), so if you did your benchmarks with Emacs before commit b7a737ef49 on master, perhaps do it again with the latest master branch.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 06:03:29 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 02:03:29 2024 Received: from localhost ([127.0.0.1]:38795 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpirI-00035C-2b for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 02:03:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52610) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rpirF-00034g-GQ for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 02:03:26 -0400 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 1rpir9-0006BW-IQ; Thu, 28 Mar 2024 02:03:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=uGuIhyyC/pUs/UfYIe/ekutSEFajoYLD/C9qnVhzuVU=; b=sNyvBqGSLqCI yTetdOORc4wXbrll2yzd1+bJBfquSduLEfWWQK0OPvfu9UjjshJoEngVP0658vbajicvszIgxau60 cKGYGl4qbN4KMHtjPp1m9EaMyEXXWNOkX/qkIBoOS81PXq9VORIixzfpfI03YDA8vid/rgpSdxDFC KRGos8la56G//G6gKL6Naddbk89xTn9PminMfcLm0wL5n7QgCQLsvpCEYH6K0ja30Fgzf9Ge5Utg/ q9+fcZ9Q533Jdcb11h5PqGcCvy+Sh4Fh/o37G49H3OstoBxF8hf8vZBMHjuHn10gaPnxY18tP4uEC bgq/MPEmrom6yjlumc1ebQ==; Date: Thu, 28 Mar 2024 08:03:17 +0200 Message-Id: <86wmpmhp0a.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> In-Reply-To: <87il17xsea.fsf@HIDDEN> (bug-gnu-emacs@HIDDEN) Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> <87il17xsea.fsf@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@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: 70036 <at> debbugs.gnu.org > Date: Wed, 27 Mar 2024 22:43:25 +0100 > From: Theodor Thornhill via "Bug reports for GNU Emacs, > the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> > > Felician Nemeth <felician.nemeth@HIDDEN> writes: > > >> I've been studying Eglots performance and have been noticing a couple > >> of things that I find very interesting. It seems like `file-truename` > >> is in the hot path > > > > I think Eglot repeatedly calls file-truename with the same argument (or > > with an argument from a small set of filenames.) > > This is true, to some extent. Can someone explain why Eglot needs to call file-truename in the first place?
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 03:05:44 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 23:05:44 2024 Received: from localhost ([127.0.0.1]:38643 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpg5H-0005LW-NI for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 23:05:44 -0400 Received: from sonic304-20.consmr.mail.ne1.yahoo.com ([66.163.191.146]:33429) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <luangruo@HIDDEN>) id 1rpg5E-0005L6-6t for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 23:05:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1711595134; bh=rI9gYyBr04PbCYXFCkcyra1mYXu508Zg0qGaTmGL+OE=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=kIihFtrJoyN9BBbhX4ObeQdMo0WGDDhDWGPXe932t79TuMi8f5eazMlaujM+ufDfzZGuwzanqsp6wllihl/OEPQRMr206QjvYmmGxfFpkxjben9TpZFvS61TT4+yyYnf7hPbSW552R8jST7K2X3MxW2P+TQH/khwPX2evpZRreg0IFEFwT8DnNKDxOY7Ru5l8VwWDFO4tx3eixH9qqDDlXlVH4jaaNSNDfog+JdXbB/pcO1ArKokf4z1ifAN9YmHvXPWLkvPYV8LGv+lLyfph15KnOyitP2a0o8I+kpeEWrOQ4cbV4hJJcdI3c3lHZdLZiZQrJrCWz6PeV0SrriEVg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1711595134; bh=dH24HNJAch7CF2iCLQxykF0nocyAZG0NsrfbYBdK5oV=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=NeAnV/xB2Gg8ZZlrv9//OQSuZ0ccmUJKebc2AXuHpUcJTz/GQ9N/rgJzd7n+ckbfEO8GqilNsuymyYxtaEGS0q08earKOpzZrFq76YeYs5iZd5Tnp+Hgb3vb45AJ4j6OhfUXpH0iaJApRe7OrXwO0Vn6fuG+VqY7BVitmH5wnmw2XFzZpIXuUZYmK5iEday6edYtefqxT/RMRIA8/uFOXhycBBvh68+xA7bXOpNAIWjf1CAleJbZC57eIr9g+RUhq17eB0oXJo3DwIvNIThS9F0m5waD5CijRCi/4/GA19Z0FMnHHzScmrcCRMcP34b6B5wXsPRjAoomAkPHh0Bolg== X-YMail-OSG: N5QuSpgVM1kxkuIiCZGFWbuE_wqdpcbVgbfGLW9WJzJDoAcuVyMUsKQD0gr1Yyg DEQ25FU9F0jG4S_QWWzPDZ4t1AdR0c78AKZ19buD_dvvWZnjo4I3GXuARerIc1bgAUwojrlRNBOf Vc.muU4aVtNUzZxRXzQlukDdydVr_nXPxGpG5Nfy5vtqrC3rhhQadyQC9ugtXlhwYQCBk_HfkEpa YwBlezpnorjPCSNAjAkF9AimUI9xhLk72fOL9QRhmnh0FXIAv8gB31XXVkSlTZQJk88Z1usd4Mym wlowQc2NlJ0D6fcyD7xEH9TqzDQ_0Jlzqos46vYUhCcwqEcvYAzmzYhYPNNJeef9EUoOJqvOxbEz msdjzOoF38dIcwXTLamEYwpGoWriRhOisX3WnFSyWDcCEDxfGrF68c4oUVwzby7owa5dGtKEMT7w BqmCQD5h3fCgY9OTBcJZQhaM6Eod3dgs2L34K2AdnzMF_ii1VTE0jKwPXajt0DDaM2LvujaCD2OY ROAJ8B_6YSYDYOlGBmuTmgV4wAN.94pigW12A2RpTKUrvu3_ollte32SILMSVryRTTFISm.nA8fp td2BX6KVee4yUahriNzD_EHd0noqEoUngYfCL6BLpy5h5Pk28xBcCb1DmryM5Zo2begbgVFt0YXa kniP_rUEQI7jRuUo95IBWxHkvTfiZ_3jfevl44N97DibSWVDW_ht3tgIyQRDulJ3h3xVFgire58X SZC2GtrBorF6DJJ5SzFQK06q2YLXBz4m.omcmuE1YuyN.cIw83Ztf1szetl.KQ72xkzMVtBYrEPb CZJyrsMqVtHh_RwkNagqWRMka2x8fnZLFkPmCr9J0dK289tqpfSACgCVrm2EYyn8NEAKL1sdOwOk Ev.E273ZVPOFiO17iegZy1LewDH9kkYSgOgUGPZ2xG_23sQCA9lez7pP7nchmBzrUq8N0lw.ot5B vRW.wtMf1EmPokQXX5gWOuNcREuYYgVeWpGRvS4O1g2UXeKFtA55AH_raAtZwVzATf.AGfQrXRP8 5NKUKzfavA0EFWn6A4LeojxV4gGHiKmE_KWAp5uh6mC9cBLAcsCXtVtj_w5NudSKCjeCeNxsMOEM Yr3pR3w2HHyxXEdqY9xG92dU5OYGCHfvDeylFKtO8DLiNV6KstS9S_C9ZtWFjcWrqpxvAmw1eCAd gtHMNknPf9EAADwXMu1dZw8sFF_1FI5NPV6VFJbCKuwoeuocue8BkRxCek_AIb9t1cOc6mxKUj2T D5gbWkZujjj8A9rDkpYfKh4XeEL.SSjvoeB5j02gzX9ZmR6bKQHapnODtegGrGaE.RjMirnd2XZf mhzZ0OBC6s94U76t0fn8kC22uEX7doO370oO9arUqQ6kE4ofvbmpvugL8Kw4eYfoUQdTfpr0M.ZX o9ee44LK6a3IHpSBRQKehTU6Rp3z8cM.6j4GELlQv856jQ1AypJLH98dhUNT4eRmdkh.LD3CUC1X YQS_TWQx9ZXxHre0u9qGtc9bnFuhIu5Lfnw7sgyyAPFl1QfiA3uFUE4gXQ8EA6kPIYq1qBA36qz9 _O_jnivftEnTRv9pJ6WRR8CF2ZYDc28jwyT4HVdjGOpTM0SMZeA_bNAntQV9Sm_3WkcT4UWr8MAS I8JOtzudMnDJrAFnmSSCTvWW1yPUYvg16exr5x8Ii2Ux6upDwyLv_yKaciK4KPuLJlUwGJZNCGkH ImoyqB7jNSuZnVG9S2IRV_PENdDrNVw4aPWIIYLSN9eJ0.37Meo1zj590ozvH83gNCVT8QOh2uV7 piB0qAX.ML2qdOD2N5VnNhSz1Q1MXrLnMi45biIEh1Qa9h8cMKC7EkJUwJ9L_uTAALxS_7JvBFkR VB6BEmrLjlf5v9CpCLY0fO2qFrTpjUWJCCPF0jg4I.L5n0i9K8Ifhsg8aInc7hw.5YRxzqRatyGs QbSlQGkwubWVZt4ty0m9DcnstrrviHbIDvn8CxKqc1.Q_dQ.mf.W5pLXEPWHKoqN9dwT.m5N0V_r LpAX29243GpMJSn3dzFyvoRQ43g1YTqm4ITjC_VtXw8Sp2OW_9eW6YmtaHGI9SnDqbOXNwi1Q14K tukU5HSwdVBmR9AB4SpgiV9ivze2uSxaww1m4mL2Vkc1nGIRFvys5KOcW2hmn.W8rKhbR9fM1i6O zB_GrwHkzvzgW85HKvUYGNnBnv9Dtp4qKGc.Fm57.gvGzi0E8YB8cVHrNJKoet_fUANhuR6mUnSO nhgWTd3.F2.tH.M06aKT5_gyK5zkTOPt0DxiO6LQn5uKzSv08nXzsEy3yj5MWo_Q- X-Sonic-MF: <luangruo@HIDDEN> X-Sonic-ID: 9bba92af-7873-4922-be94-0066d3b981f8 Received: from sonic.gate.mail.ne1.yahoo.com by sonic304.consmr.mail.ne1.yahoo.com with HTTP; Thu, 28 Mar 2024 03:05:34 +0000 Received: by hermes--production-sg3-6dc75bc8fb-6dxcw (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 308f0bd10d46464ea9d5455e48927266; Thu, 28 Mar 2024 03:05:30 +0000 (UTC) From: Po Lu <luangruo@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87zfuj40pz.fsf@HIDDEN> (Po Lu's message of "Thu, 28 Mar 2024 09:14:00 +0800") References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN> <87frwbxrs6.fsf@HIDDEN> <87zfuj40pz.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) Date: Thu, 28 Mar 2024 11:05:05 +0800 Message-ID: <87ttkr3vku.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Mailer: WebService/1.1.22205 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 1028 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) Po Lu <luangruo@HIDDEN> writes: > Haiku supports realpath, but not wordexp. We must reimplement virtually > all POSIX functions of this nature on Windows, as the versions provided > by system C libraries, if they exist at all, are inadequate for some > reason or another. Furthermore, these functions are absent from a > number of other operating systems, such as OpenBSD and Android 14.0, and > on others (Alpine, I believe) wordexp is severely inefficient for being > implemented as a wrapper around /bin/sh. BTW, after reading the subject of this bug report, I don't believe there is a place for wordexp at all. wordexp is no replacement for Fexpand_file_name, but rather a means of expanding input in the manner of a shell, which input might include arithmetic expressions, shell command substitutions, and other expressions valid as shell input. If Fexpand_file_name alone will not suffice, TRT is to replicate the mechanics of file-truename in whole, not cutting corners with these admittedly tempting functions.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 01:14:46 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 21:14:45 2024 Received: from localhost ([127.0.0.1]:38596 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpeLs-0003lJ-ES for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 21:14:45 -0400 Received: from sonic316-21.consmr.mail.ne1.yahoo.com ([66.163.187.147]:32922) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <luangruo@HIDDEN>) id 1rpeLm-0003kL-8g for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 21:14:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1711588472; bh=z/CY5bCwxbTjNm/iSViwcKxJlNb8iGeon4u8sBERP8M=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=OaOlUfhY1XIK4y9V+D2RuNPLmVW7IiOVaYdLWsWsphrs/6/MiAa/LbtY6vty9ta8VzNU0q1E8xAWEINJfnfp48g3keoCx3DV/XPBU//phu9o/QA1UrFbPweGm44iRKty6jVxjGWaQeUuXcXMZ9cL05TJi8hoj3uGQy7XaFmF1qxDAlxfXw8hG3TlpWzXVcjmApYvg+bJKPzU4s6qPmQV1saJB3rxhtqi5ZrkKk7dXUxkrk2vPvmMIXa7KovVM4xyrk5S98dGXRxcr2uDwChUpLYYTiiskE/9J0uYvLRtcMVE/35bPAiXzoFDIzC6ypUxsGJC4iglXMif1Z+3kaGppw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1711588472; bh=vyfatMqo+XoKvOAp2OmYnURD+TiT7393nFFO17t6jcy=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=LehGx/t5IFbdrH4lWxQ7fDqrBumxgdRjRYl67m9qm90pxpdwrGh6d8/x9ANWWE8E/Iz91u19tVbKXQ96oXmiALdSs5r7WpaluRjtMxSnTQ0l1VYBg+AZFxEJ7tERwhb19tZaFrCeLRX4pmtSs/cRgoFQEI9p20V9XkjGqTBI1UO9BC+FHmz/XRsy4E+dvYHYP8EGaiukDgzq7RWy/g50p72VWSY2jBL1mUznfs/gZt9umLMqd5MgFnWBcEhIMflJ38hGdvPOu5vHrrZ/MWkjzomNBa21ANzFQ4JkOSe01G3Cnyf2gUcvKubIZTnwzKCAooPSqhmGUH6cU8zCxfGtDA== X-YMail-OSG: CBVzzgAVM1kGs0NR7F9RT0Mk1dmNR_X3p4uEDO5DjNDJwIyLwwaVn.newBRKdqu fH2mdx0wvdR1CMgeWw9svd0bc.HAE1CRTKLSpp4NNUzekSYXy0Zd.Ag2UKma33iLVYqWruApPDQi XvxTzDITZMBjs2JRU84r.Aer3uXVPxpZW2Dk0ECoFjLCeC4sa_UgJaKzlvlXzZAlw8IINve82Vdc XxULrmzTX5lTuHc662burTp_bCCNI9ii2SOUcs1wqlrsyIiGZfycu3OGSLaMzZxxCUEodgvYa3Sp vHnsYEFFaZFCgzIvbuQjdrMaDwXuS5ma3waBym.scnHavYmC7LIdhdW.zSlM9keLUhkcS5Z28IFI Z.JGT8jDRqw.kuQCDpdRpxMjSAe1Fuuol9VIFO9NO9TPRXwVKuu63rjr77AJK8D2YF_IsZdW9Y_l yuC5Vqrr0CrEPjFkBulrBrgdfW5rU7X1fi0c1V4zFrIgRZn4osCo06ZTNStgY2IFRbN_bTxxggf8 V92CpHtgiLr.KJRI6TSkqqJ4wlwFvSiQKEQKWRDNDqPWjRyBaXu9lINQC8LK1eDmY9KhVjul7Qth KNwF506JB7lUUjfKuId7l0kguJkN.wwGasPYXUBI4WPx4Xs2uCUkKA.ZWRyn69.4a6SA2cBUC1CT xwfPMBXJ1tRsW8Y0Xie7Ct8EYLaFYEaY8E98PDe3HRH3c9ekutLU8wPh3dm2cSjtFf1wM_ZzaUo_ i3_emqb4nWRUBkEhrL0HjEOoXymzqrp4QcL0vPrQXYlHc8BN7YIMS6poDX0TdIrtiy51oK.T0CUf 3gfAU.gUI4_5j4lB404rLPUcqHYni.1x.nRYcaHm_dK_E23iPMbyzmGQR7pwUOi.Y7cPFjWpmtGz pXRp7a8xzq8n0KKPcUDZTZ_8N6ZjMJJIs4rDX1eqCR5UQJ.C9C_umLS3s_yK827hvVkVzo8dVz.F hyQeH62TqoOvxRoZyuyQRdavAmf4XMZTNLqRXZgdBHDzMtGdsp3t4SmuGlLD3wEKDi_vwHOpHBfi sE8HQ8zcKwdyMiGuRaZ1DX6f.19Pst2KVsn5nJgkVKMPqkZDp028E0bFJithPaco0vFHHzY7B6mE meOEhZKiAog2m5xv2.eof4sFHjnvIy2EWQniUSOJUhzfL.t.M_2nEDxCZUWDaC..0XbMmbEre0sa t8EUyxhJloyzgQZcg6dRJ_UvDfYE6OvvjJEWGLmiOt1U2GQzEZqjRfiPARG017LkEXPg4j78qq_Q G4aRdpx.r1DNVkc.fVXsUkMtm_zwHJkZLDCeDFeEKP7hLN0pEXqClxBVE72mfMVU8t9gb1iRUrfd xuuy5oMuXjqPqOjj2pocOW1MpQPHlOvMpcwSVScNt6_HgXtPvVnCYicPW1aWz4VllTzsARBF70QE CSLVL6O3T3fJF_wYr22lo4ppuys1NVCObF7N0NqoxlJpD6OU_fO6zAH7MS6_89GWUr5L1kiCusHw _ea8yvLTMLKKUIZn06vb7huvX0_ZHmXJvc8ce0plMwf5hrPJ5eF4SoPpJbnKqPCO8X7BeHw8qfxG QmytEW.VS.BdrpbONlk_BJk7vpSp7Zzv6jGRfSGwzGoixgIVr3.W6jJYGNrs13yZZunwnQstzdVb 6ID50Q2puZ8eDCeUvx9.DhSroIt7fDa7_.XMr2f2FPgX15zBFKpeztxoJ1fHb26hgJKMQp1kpzBj foj0kDQbjP6HDgIKnnSyhC.DtrhCHSipe_3nNVbItN50wCoY.b85FU8e03UCNhdGEQFTfrwUG63g h03bR1Irgl7._gq8aKFeFoOgP_Xqt2S.zj3teee_ST6TwS6rsKwRdt8O7R_mOqwbXu0atSidX_9u vNNBH3PuFrSDbkWjLl16zNbYXNyReTAH8AcoF1Y3_0RaGuWsVYUrsgTcuuPBfRvDJENrY8.S6yZJ Ju2gPzSGJRmeeDOqoEgraTbbLXoaCnLigNYLNyFdCQA6PgonmGInLxkgs0182vPRokBljjGcIttW zcEzmvQ6PHc9PmkfEscMqMUYv1caKzABb4exdH0yU2L1JCEMPhwBbWPPXtB23CJT.01a5viwHAfB dBt6ViyA2pwbk.DIvvcsl0VNQDcNtOdLdmwYA0UyTBVrQcP1l8UbonCc4OXCTxGHp5jdx_ddMXxk Tn_WhMZmqDKVXXO0T4E30Pv.WdGbVyNNdNnq5hLUP.H1nb23y6wCzeLV2TIhOEFqTcqvEw3qSjLY gPId2YOtgUvJfGs1OZygbnSnTtGUb9kke3DwRC0LHlgE_Usxd358O5GndlZ_E3zw- X-Sonic-MF: <luangruo@HIDDEN> X-Sonic-ID: 6790214f-feee-45c7-921b-dfb3e912a7f5 Received: from sonic.gate.mail.ne1.yahoo.com by sonic316.consmr.mail.ne1.yahoo.com with HTTP; Thu, 28 Mar 2024 01:14:32 +0000 Received: by hermes--production-sg3-6dc75bc8fb-pl74c (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 089139d690e4c49945154efcaf8257a1; Thu, 28 Mar 2024 01:14:26 +0000 (UTC) From: Po Lu <luangruo@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87frwbxrs6.fsf@HIDDEN> (Theodor Thornhill's message of "Wed, 27 Mar 2024 22:56:41 +0100") References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN> <87frwbxrs6.fsf@HIDDEN> Date: Thu, 28 Mar 2024 09:14:00 +0800 Message-ID: <87zfuj40pz.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Mailer: WebService/1.1.22205 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Content-Length: 700 X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org 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 (-) Theodor Thornhill <theo@HIDDEN> writes: > OK - for my education on the portability argument. Is that because of > Emacs support targets like haiku and old versions of windows, or > something else inherent in these functions? Haiku supports realpath, but not wordexp. We must reimplement virtually all POSIX functions of this nature on Windows, as the versions provided by system C libraries, if they exist at all, are inadequate for some reason or another. Furthermore, these functions are absent from a number of other operating systems, such as OpenBSD and Android 14.0, and on others (Alpine, I believe) wordexp is severely inefficient for being implemented as a wrapper around /bin/sh.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 27 Mar 2024 21:56:55 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 17:56:55 2024 Received: from localhost ([127.0.0.1]:38473 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpbGQ-0000E5-TB for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 17:56:55 -0400 Received: from out-186.mta0.migadu.com ([2001:41d0:1004:224b::ba]:30095) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpbGM-0000Dq-EV for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 17:56:53 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711576603; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=DmY8VxKtKGZycLFpBXkz2Lyt0CbxZrzKHlNH1rr9XwM=; b=ulHb5tHwxMXBKk8hYQ1XHYLLSAr2+VGz0GOP9lVCqLSuFHkA1eLxYYqNf5k4cKy5y46U+a h6MsbsmurX6fGgdBW6w21hpNtwfHdA7Z/EwxjA16ddvHCotoJ0Nxb/rwrlT3aBs/6i6bVd +Xxqw9WrZ1cx2000NecGli43U7MNO1gUC9B6aWZ8zIEd0A48RV9xnCHaqKrkaySyTANpp2 0T5iCT8/Fttms8wJjwkKVwIhi4d7nH06IniokZ0qWyLkmSDCnVqZckch4QfFQhcD37o8zI 9ZBTwpG27l0/ZqCuNIJhJU+5Q7EoQHGJljJVz2AKub9VfApFV16So5JWrD41pQ== From: Theodor Thornhill <theo@HIDDEN> To: Eli Zaretskii <eliz@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <861q7vihnm.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN> Date: Wed, 27 Mar 2024 22:56:41 +0100 Message-ID: <87frwbxrs6.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (-) Eli Zaretskii <eliz@HIDDEN> writes: >> Date: Wed, 27 Mar 2024 20:08:54 +0100 >> From: Theodor Thornhill via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> >> >> During the last couple of weeks I've been studying Eglots performance >> and have been noticing a couple of things that I find very >> interesting. It seems like `file-truename` is in the hot path due to the >> fact that every request to the lsp server has to create the source file >> location, and in every response we have to parse the location the >> relevant file. `file-truename` is used for this, and its performance >> isn't really up to snuff for what it provides, afaict. >> >> Below I've supplied some benchmarks and profile reports along with the >> actual patch. Before we discuss the patch itself, I want to get some >> answers to the following: >> >> - Is there a reason that this function should be supplied at the lisp >> level? > > No, we could have it implemented in C. It just never was needed, > until now, and the processing there is not trivial, to say the least. Yeah, the source is complicated, but it seems most of it is to gradually chop the path shorter and shorter. > >> - Does it have to be recursive? > > No, it doesn't. > I guess making it iterable is something worth checking out anyway, so I'll look into that a little further. >> Firstly, I'll show some benchmarks >> [...] >> >> As you can see, the C implementation, though naive for now is two orders >> of magnitude faster, and makes a noticeable difference when running an >> lsp server in emacs. > > Yes, but comparing a partial implementation is not very useful, since > the complete one could be much more expensive. > No doubt. The most interesting part of that benchmark is maybe to see that the current version is very slow, not that my function is very fast. I'd guess that even if I'd lose an order of magnitude keeping feature parity we're better off. >> As for the patch - it now relies on wordexp to resolve the paths, and I >> believe there is no real feature parity with the old variant as for now, >> but I haven't seen any issues thus far. If this approach is accepted I >> will of course make sure we have feature parity, unless that isn't >> wanted. > > We cannot rely on wordexp and we cannot rely on realpath: both are not > portable enough. > OK - for my education on the portability argument. Is that because of Emacs support targets like haiku and old versions of windows, or something else inherent in these functions? >> + CHECK_STRING (filename); >> + char *c_filename = SSDATA (filename); >> + >> + wordexp_t we; >> + wordexp(c_filename, &we, 0); >> + >> + char *truename = realpath(we.we_wordv[0], NULL); >> + wordfree(&we); >> + >> + if (!truename) >> + return result; >> + >> + result = build_string(truename); > > You cannot pass Lisp strings to libc functions like that: you need to > do 2 things first: > > . call expand-file-name > . encode the file name with ENCODE_FILE > > This is needed because relative file names in Emacs are relative to > the current buffer's directory, not relative to the current directory > of the Emacs process, and because file names with non-ASCII characters > need to be encoded to match the encoding expected by file-related APIs > in libc. Likewise, when you get a file name from a libc function, you > need to decode it with DECODE_FILE, before you create a Lisp string > from it > >> + free(truename); > > IMO, this should be xfree, not free. And for that to work, we need to > call realpath with 2nd argument non-NULL, but pointing to a buffer we > allocated with xmalloc, or maybe a stack-based buffer. (But since we > cannot rely on realpath, this could be a moot point.) > > Thanks. Thanks for the pointers here. I'll take note of them and investigate further. Another much simpler way to improve Eglot performance her could be to allow for the relevant functions to execute through handlers, to not break other parts of Emacs. For example `find-buffer-visiting` could allow to run through a simpler function that merely expands and looks up the current file, considering that the LSP server likely reports on files that are already existing, and likely most symlink shenanigans aren't an issue here. Just thinking out loudly on this. Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 27 Mar 2024 21:43:39 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 17:43:39 2024 Received: from localhost ([127.0.0.1]:38459 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpb3b-0007Mf-6i for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 17:43:39 -0400 Received: from out-170.mta0.migadu.com ([2001:41d0:1004:224b::aa]:37413) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpb3X-0007M7-Vq for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 17:43:37 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711575809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=zZVzUW60J7luxWcrfDfeCGv95/DR3QBLZVCWlNqGtRY=; b=JYFMtXtKbneFAm6nG0SZ9AvrhFzaFD7HO18wzU1fefrGVpytQWxfyInfuWGV0ecpzWOuH9 vZOn7YlF6kX3QSGy2YfuQzURj287+UAY/+5sRI5z8+HueCELSUnTiP0p6UHMEo9/69LQUU 5bZhSfGofYGmT/byelQQp4hsB1Ywp+QTkQ45F1SuAtmFzYxpnMKgLO0L7FDRhDYspsWpVy TDnjL0YKNSmckHFjR5Qqo136+w+mqeByTU0VvepriAzj/6MdmbtpvcDSVduW1r4GwegAt+ Xo60PgDrCLpE/mMZ5F2hOzQKZgZVVXgfjl+OgiEn8fidfAsbn3+0cF3w3BL52A== From: Theodor Thornhill <theo@HIDDEN> To: Felician Nemeth <felician.nemeth@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level In-Reply-To: <87ttkrqvru.fsf@HIDDEN> References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN> Date: Wed, 27 Mar 2024 22:43:25 +0100 Message-ID: <87il17xsea.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (-) Felician Nemeth <felician.nemeth@HIDDEN> writes: >> I've been studying Eglots performance and have been noticing a couple >> of things that I find very interesting. It seems like `file-truename` >> is in the hot path > > I think Eglot repeatedly calls file-truename with the same argument (or > with an argument from a small set of filenames.) This is true, to some extent. For the requests, eglot calls it directly. For some handlers it is called through the function `find-buffer-visiting`, so I'd say it's advisable to keep the function itself fast. > > I wonder whether it would make sense for Eglot to cache the result of > file-truename. Do you think caching would make Eglot faster than it > currently is? (Would it still be worth moving file-truename to the C > level?) I think it would be faster, yes. This was my first thought as well, but I quickly threw the first attempts on that away due to the fact that the processing almost solely lies in that function, and I'd suppose it would make other parts of emacs faster too. Adding complications to eglot would likely make the source more complicated rather than better on the whole. But that's only my opinion. I'd like to try to replicate the function 1 to 1 in C. What do you think? Theo
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 27 Mar 2024 20:12:32 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 16:12:32 2024 Received: from localhost ([127.0.0.1]:38417 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpZdP-0008CJ-Rj for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 16:12:32 -0400 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]:44398) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <felician.nemeth@HIDDEN>) id 1rpZdN-0008BO-Ki for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 16:12:30 -0400 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-a44f2d894b7so24636966b.1 for <70036 <at> debbugs.gnu.org>; Wed, 27 Mar 2024 13:12:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711570343; x=1712175143; darn=debbugs.gnu.org; h=mime-version:face:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=wQddov7wCjSXNAKfS9h6lF5gdYaHRkDSnD+VfB6BiAI=; b=fb35BOkDchcxumuMRjPXcbJ3kJpFSjRNABOpCRfMdtOXGKmvUHCWSw19uX2Sk3V78f HZOOkVft0nly/ulI5yb9FvIWTQl48tcIw9EXDjK+aD7R92jFRlc1/AYxOOkE8V5To/NX 1OdT1dCvNK/ufC3KA7+XusXpukl9iC8Csl6dphVbPy50fQ/IHD7JK4q7jQMGxqm4xqpv CvN7jCqKh3y1PyfXX4poo8LIQaVA1bIXlLKsQy5m5jPyI+cEuBcU6+EVjxNmwhdD/yx2 /His8Koq6/3EE/jffwr0GpRae/kjyHW56qsie2pJjCVlk09IlwSdC3H4yD/tXP6S4yke Tcvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711570343; x=1712175143; h=mime-version:face:user-agent:message-id:in-reply-to:date:references :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wQddov7wCjSXNAKfS9h6lF5gdYaHRkDSnD+VfB6BiAI=; b=quYhhRzgK7sxTdUWNbEI97jo7b8X/TOOvR4XpHn03kP5pOmyrEmcoqFM1VyP8rqUKZ kJhsesY8GvmJCTj38OmLtYSfP6ZrUf+FIoQfxGRTDDPTTYtrSJmGLK0X+AGkKUOVbzUE GvSaf/vrhnACzLP8RcSTFeOszCrczldudC/vAPOvL1E8HVH1CPxXKr37s4rVs0xdN1QT b2RsqL2PhyRWJJYAlB4kG3+bxQEY4/xQwjsE4Hwv+kMlLXOStQ9SyVWRn6WbWoRKJCpn RKtGs3+q/GfjKicJSvuc+aNjcaO9eXSrMI45oao3SoB124ZrxJJJ+Jj+MImAgytR7inC ovsQ== X-Gm-Message-State: AOJu0YxEp5Uwe4O/m6ulT372r8bpk9moQ2AZb00Hjl/1ZszNf6/sBTRF Cytw88J1VgEsorMJte/7REVyz5m3sowir5slmii6Mnzr4EDTppWM3wBppLO1 X-Google-Smtp-Source: AGHT+IHoi1qAzH04UxdC2mE2aHfGGE2+AxLfsH9qbRXh6hgfvfgLhE2G3SJSFiRXdOPFCxxjVQmGaA== X-Received: by 2002:a17:906:cf85:b0:a4d:edbd:a3fb with SMTP id um5-20020a170906cf8500b00a4dedbda3fbmr342997ejb.44.1711570342551; Wed, 27 Mar 2024 13:12:22 -0700 (PDT) Received: from betli.gmail.com (catv-213-222-160-137.catv.fixed.vodafone.hu. [213.222.160.137]) by smtp.gmail.com with ESMTPSA id x18-20020a170906b09200b00a47df55cf5esm4341798ejy.13.2024.03.27.13.12.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Mar 2024 13:12:22 -0700 (PDT) From: Felician Nemeth <felician.nemeth@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> Date: Wed, 27 Mar 2024 21:12:21 +0100 In-Reply-To: <87le63xzjt.fsf@HIDDEN> (Theodor Thornhill via's message of "Wed, 27 Mar 2024 20:08:54 +0100") Message-ID: <87ttkrqvru.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX5+fmhoaEwMDD/ ///TMNVWAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAPEgAADxIBIZvyMwAAAAd0SU1FB+AICBUfHgLs gGoAAAGXSURBVCjPRdK/b5tAFAfw753gBEwM2ApMbuVIqf+Ko0qiyhOu4sj2xJBYMn/FUdX7UUUZ OjHgyvf+yj6IcW6Bjx53934ADEvs8bmEr8UVoTYTOyJO9KoYsVofN8kILdbeJ8Li6YpZWop4xOK0 VdfIoXmkHn5/5D7/Ts/8THacSqnkKTcMTxgUkVzFnEIRTKwwYYSCvzfg16f0i8YApW/XG/Pm8R49 dXjxKmRnxv3OwooQWcv4RUYem1fsNe/WU63uk7AmYxk78y32/ee2tZB4fO+WcZ7lnIGEolXW1EGw LfkSuQ0XTgRefgNlfNwRNV6QhBxJ8JNxTMUPyBqTd0bjaAP5G7NJRU39z80hLOZTjqB7K3tEEFSj aEsuQew6qBxxyhHjVUR7H7NpC9iHJZGLMCEuweqAqE1BHbfK2oRIz9EHYA/+wiFWru9smeVfuWNZ 2+NFtX80UA1TvJNdytM4DwO4kY7bJz8Qcd0G0ceslZGkkeoBsjUHwF1+jjM3XHaXEZ7mGLfwPFO+ RV9QLY2iEdmDo78D/gNPaXVYqd+pyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0wOFQyMzoz MDoyOCswMjowMGy/yHYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMDhUMjM6MzA6MjgrMDI6 MDAd4nDKAAAAAElFTkSuQmCC MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (-) > I've been studying Eglots performance and have been noticing a couple > of things that I find very interesting. It seems like `file-truename` > is in the hot path I think Eglot repeatedly calls file-truename with the same argument (or with an argument from a small set of filenames.) I wonder whether it would make sense for Eglot to cache the result of file-truename. Do you think caching would make Eglot faster than it currently is? (Would it still be worth moving file-truename to the C level?)
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at 70036) by debbugs.gnu.org; 27 Mar 2024 19:45:02 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 15:45:01 2024 Received: from localhost ([127.0.0.1]:38406 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpZCm-0006NS-Is for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 15:45:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55284) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1rpZCj-0006Mf-BL for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 15:44:59 -0400 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 1rpZCd-0007ju-DL; Wed, 27 Mar 2024 15:44:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=qfTSGXNSrLrC8PkVZltd/1o/6TQCz+gybDRqAXiTDZU=; b=D4G5275VWdKw v08TmAUXEYn8JRaIZrOkDG4o/RjVqo+XrmFGesLwcDPTIBZic3GmTN2/ek+U4C3VkEQhjmtujklQP UCYoSUsdxM9X4LafDTLM4vQatZ6KAwTDBD0wOLxbTkfHSvvxwkU+VAQVDYQR0W/gcMcRmsL2p2i3I LNrPrJDFCptd0Sy3le8v5m5hp2ooEvCpH7bIkq8M1+XloU7nObV5zMWakYOR1tRWrGJiwCzjynhjR 0iFGr1qO11p71+XVC82M2d+vdYRcQyYPssu+sJrpdPV8a7Fmgvy2BucptP4OS6Qs46hgkDID0mKue ipUWIL/d4xYUjQ6wtLW70Q==; Date: Wed, 27 Mar 2024 21:44:29 +0200 Message-Id: <861q7vihnm.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Theodor Thornhill <theo@HIDDEN> In-Reply-To: <87le63xzjt.fsf@HIDDEN> (bug-gnu-emacs@HIDDEN) Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level References: <87le63xzjt.fsf@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 70036 Cc: 70036 <at> debbugs.gnu.org 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 (---) > Date: Wed, 27 Mar 2024 20:08:54 +0100 > From: Theodor Thornhill via "Bug reports for GNU Emacs, > the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN> > > During the last couple of weeks I've been studying Eglots performance > and have been noticing a couple of things that I find very > interesting. It seems like `file-truename` is in the hot path due to the > fact that every request to the lsp server has to create the source file > location, and in every response we have to parse the location the > relevant file. `file-truename` is used for this, and its performance > isn't really up to snuff for what it provides, afaict. > > Below I've supplied some benchmarks and profile reports along with the > actual patch. Before we discuss the patch itself, I want to get some > answers to the following: > > - Is there a reason that this function should be supplied at the lisp > level? No, we could have it implemented in C. It just never was needed, until now, and the processing there is not trivial, to say the least. > - Does it have to be recursive? No, it doesn't. > Firstly, I'll show some benchmarks > > ``` > ;; Emacs 29 branch > > (benchmark-run 10000 > (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el")) > ;; (1.810892642 1 0.051070616) > > > ;; With new C implementation > > (benchmark-run 10000 > (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el")) > ;; (0.018811035 0 0.0) > ``` > > As you can see, the C implementation, though naive for now is two orders > of magnitude faster, and makes a noticeable difference when running an > lsp server in emacs. Yes, but comparing a partial implementation is not very useful, since the complete one could be much more expensive. > As for the patch - it now relies on wordexp to resolve the paths, and I > believe there is no real feature parity with the old variant as for now, > but I haven't seen any issues thus far. If this approach is accepted I > will of course make sure we have feature parity, unless that isn't > wanted. We cannot rely on wordexp and we cannot rely on realpath: both are not portable enough. > + CHECK_STRING (filename); > + char *c_filename = SSDATA (filename); > + > + wordexp_t we; > + wordexp(c_filename, &we, 0); > + > + char *truename = realpath(we.we_wordv[0], NULL); > + wordfree(&we); > + > + if (!truename) > + return result; > + > + result = build_string(truename); You cannot pass Lisp strings to libc functions like that: you need to do 2 things first: . call expand-file-name . encode the file name with ENCODE_FILE This is needed because relative file names in Emacs are relative to the current buffer's directory, not relative to the current directory of the Emacs process, and because file names with non-ASCII characters need to be encoded to match the encoding expected by file-related APIs in libc. Likewise, when you get a file name from a libc function, you need to decode it with DECODE_FILE, before you create a Lisp string from it > + free(truename); IMO, this should be xfree, not free. And for that to work, we need to call realpath with 2nd argument non-NULL, but pointing to a buffer we allocated with xmalloc, or maybe a stack-based buffer. (But since we cannot rely on realpath, this could be a moot point.) Thanks.
bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.Received: (at submit) by debbugs.gnu.org; 27 Mar 2024 19:09:23 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 15:09:23 2024 Received: from localhost ([127.0.0.1]:38370 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rpYeH-0003mY-TH for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 15:09:22 -0400 Received: from lists.gnu.org ([2001:470:142::17]:58026) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <theo@HIDDEN>) id 1rpYeE-0003ll-TJ for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 15:09:20 -0400 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 <theo@HIDDEN>) id 1rpYe8-0007A3-Fj for bug-gnu-emacs@HIDDEN; Wed, 27 Mar 2024 15:09:12 -0400 Received: from out-186.mta0.migadu.com ([2001:41d0:1004:224b::ba]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1rpYe4-0007W0-Kh for bug-gnu-emacs@HIDDEN; Wed, 27 Mar 2024 15:09:12 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no; s=key1; t=1711566539; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=aL2wtkRSIyKTcCZcJs7NI2R2zyipYA9+d+sDm40vk14=; b=itoYunPCk/0j6ZwGaNKLmoXxOeTLShtBVXYrIWn/JmSzJ+iKGKf85e2CDdJbRt4+QWGfAJ +Bf9HjTBQ4KVPCFYJylRelfnQ3IxR98zk2zVAFKudgplT9vpax9T7a6KXoYljDy2GhqnOZ nJyeBrkPP7G76/RhEVmudwgxHRCdv7w34FDSQGna+uoAibAXwuz+kOkgfyff4c7NnFaZ/6 aykX9PPZQ9Q6utW11G3yDcnQLnhQpNCGsiiqx3lGfHG4xnd7HjQZcMhTj77XxCOwsOI2Zz Je0IfDGAQv4+UI21vr8wD64LiK7kTu6vUU8GtQ8Trtg0zBN5LjzwvjVtPl5rKg== From: Theodor Thornhill <theo@HIDDEN> To: bug-gnu-emacs@HIDDEN Subject: 30.0.50; Move file-truename to the C level X-Debbugs-Cc: Date: Wed, 27 Mar 2024 20:08:54 +0100 Message-ID: <87le63xzjt.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Migadu-Flow: FLOW_OUT Received-SPF: pass client-ip=2001:41d0:1004:224b::ba; envelope-from=theo@HIDDEN; helo=out-186.mta0.migadu.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: 0.9 (/) X-Debbugs-Envelope-To: submit 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.1 (/) --=-=-= Content-Type: text/plain Hi, all! During the last couple of weeks I've been studying Eglots performance and have been noticing a couple of things that I find very interesting. It seems like `file-truename` is in the hot path due to the fact that every request to the lsp server has to create the source file location, and in every response we have to parse the location the relevant file. `file-truename` is used for this, and its performance isn't really up to snuff for what it provides, afaict. Below I've supplied some benchmarks and profile reports along with the actual patch. Before we discuss the patch itself, I want to get some answers to the following: - Is there a reason that this function should be supplied at the lisp level? - Does it have to be recursive? It seems to eat up a lot of stack, and the comments in the file suggest that has been an issue before. Firstly, I'll show some benchmarks ``` ;; Emacs 29 branch (benchmark-run 10000 (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el")) ;; (1.810892642 1 0.051070616) ;; With new C implementation (benchmark-run 10000 (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el")) ;; (0.018811035 0 0.0) ``` As you can see, the C implementation, though naive for now is two orders of magnitude faster, and makes a noticeable difference when running an lsp server in emacs. As for the patch - it now relies on wordexp to resolve the paths, and I believe there is no real feature parity with the old variant as for now, but I haven't seen any issues thus far. If this approach is accepted I will of course make sure we have feature parity, unless that isn't wanted. As for the profiles - it is very clear the performance is better with my version, as it doesn't really show up in the profiles, but in the current state `file-truename` seems to eat up around 10-20% of the total samplings. And lastly - I've noticed that `redisplay_internal (C function)` shows up as a _huge_ chunk in emacs 30, but not in emacs 29. Is this a known issue, or something to look out for? I could open a different bug report for this if needed. Below are the profiles and the patch. On my system I needed to `ln -s lisp/loadup.el .` to make it compile. Not sure if that is due to differences between old and new `file-truename`, or something else. Thanks, Theo --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=emacs-29-before-everything Content-Transfer-Encoding: base64 ICAgICAgICAgIDY1ICAzMSUgLSBqc29ucnBjLS1wcm9jZXNzLWZpbHRlcgogICAgICAgICAgNjEg IDI5JSAgLSBqc29ucnBjLWNvbm5lY3Rpb24tcmVjZWl2ZQogICAgICAgICAgNDkgIDI0JSAgIC0g Izxjb21waWxlZCAtMHhiZjUwZDA0YmNmZDRmNGI+CiAgICAgICAgICAyOSAgMTQlICAgIC0gZWds b3QtLWhvdmVyLWluZm8KICAgICAgICAgIDI5ICAxNCUgICAgIC0gbWFwY29uY2F0CiAgICAgICAg ICAyOSAgMTQlICAgICAgLSBlZ2xvdC0tZm9ybWF0LW1hcmt1cAogICAgICAgICAgMTQgICA2JSAg ICAgICAtIGdmbS12aWV3LW1vZGUKICAgICAgICAgIDEwICAgNCUgICAgICAgIC0gYnl0ZS1jb2Rl CiAgICAgICAgICAgNCAgIDElICAgICAgICAgLSByZXF1aXJlCiAgICAgICAgICAgMSAgIDAlICAg ICAgICAgIC0gZGVmdmFyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGRlZmluZS1rZXlt YXAKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIGtleW1hcC1zZXQKICAgICAgICAgICAx ICAgMCUgICAgICAgICAgICAgLSBrZXltYXAtLWNoZWNrCiAgICAgICAgICAgMSAgIDAlICAgICAg ICAgICAgICAgIGtleS12YWxpZC1wCiAgICAgICAgICAgNiAgIDIlICAgICAgIC0gZm9udC1sb2Nr LWVuc3VyZQogICAgICAgICAgIDMgICAxJSAgICAgICAgLSAjPGNvbXBpbGVkIC0weDE5ZTJkMTBh OTU1ZGFkODc+CiAgICAgICAgICAgMyAgIDElICAgICAgICAgLSBmb250LWxvY2stZm9udGlmeS1y ZWdpb24KICAgICAgICAgICAzICAgMSUgICAgICAgICAgLSBjLWZvbnQtbG9jay1mb250aWZ5LXJl Z2lvbgogICAgICAgICAgIDMgICAxJSAgICAgICAgICAgLSBmb250LWxvY2stZGVmYXVsdC1mb250 aWZ5LXJlZ2lvbgogICAgICAgICAgIDMgICAxJSAgICAgICAgICAgIC0gZm9udC1sb2NrLWZvbnRp Znkta2V5d29yZHMtcmVnaW9uCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgIC0gYy1mb250 LWxvY2stZGVjbGFyYXRpb25zCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAtIGMtZmlu ZC1kZWNsLXNwb3RzCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVk IC0weGU5YzljNTM2MDMzY2Y5MD4KICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgLSBj LWZvcndhcmQtZGVjbC1vci1jYXN0LTEKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAg IC0gYy1mb3J3YXJkLXR5cGUKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAtIGMt Zm9yd2FyZC1uYW1lCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgIC0gYy1mb3J3 YXJkLTw+LWFyZ2xpc3QKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgIC0gYy1m b3J3YXJkLTw+LWFyZ2xpc3QtcmVjdXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAg ICAgICAtIGMtZm9yd2FyZC10eXBlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAg ICAgICAgYy1mb3J3YXJkLWtleXdvcmQtY2xhdXNlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg ICAgIC0gIzxjb21waWxlZCAweGZlNzliZmNkYjcwMTRkZj4KICAgICAgICAgICAxICAgMCUgICAg ICAgICAgICAgICAgYy1iZWdpbm5pbmctb2YtZGVjbC0xCiAgICAgICAgICAgMyAgIDElICAgICAg ICAtIGZvbnQtbG9jay1zZXQtZGVmYXVsdHMKICAgICAgICAgICAzICAgMSUgICAgICAgICAtIGZv bnQtbG9jay1jb21waWxlLWtleXdvcmRzCiAgICAgICAgICAgMyAgIDElICAgICAgICAgIC0gbWFw Y2FyCiAgICAgICAgICAgMyAgIDElICAgICAgICAgICAtIGZvbnQtbG9jay1jb21waWxlLWtleXdv cmQKICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAtIGV2YWwKICAgICAgICAgICAzICAgMSUg ICAgICAgICAgICAgLSBsaXN0CiAgICAgICAgICAgMyAgIDElICAgICAgICAgICAgICAtIHByb2du CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgLSB1bmxlc3MKICAgICAgICAgICAyICAg MCUgICAgICAgICAgICAgICAgLSBpZgogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAg LSBjLWZhY2UtbmFtZS1wCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgLSBmYWNl LWxpc3QKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgICBtYXBoYXNoCiAgICAg ICAgICAgNCAgIDElICAgICAgIC0gamF2YS1tb2RlCiAgICAgICAgICAgMyAgIDElICAgICAgICAt IGMtY29tbW9uLWluaXQKICAgICAgICAgICAyICAgMCUgICAgICAgICAtIGMtYmFzaWMtY29tbW9u LWluaXQKICAgICAgICAgICAyICAgMCUgICAgICAgICAgLSBjLXNldC1zdHlsZQogICAgICAgICAg IDIgICAwJSAgICAgICAgICAgLSBtYXBjCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgLSAj PGNvbXBpbGVkIDB4MTE3MGMzOTBhNjY1MzJlMT4KICAgICAgICAgICAyICAgMCUgICAgICAgICAg ICAgLSBjLXNldC1zdHlsZS0xCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAtIG1hcGNh cgogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgIzxjb21waWxlZCAweDE4OTJhMGM4 ZGEzOTdjYzg+CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgLSBjLWZvbnQtbG9jay1pbml0CiAg ICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gbWFwY2FyCiAgICAgICAgICAgMSAgIDAlICAgICAg ICAgICAgIGMtbW9kZS1zeW1ib2wKICAgICAgICAgICAxICAgMCUgICAgICAgIC0gYy1pbml0LWxh bmd1YWdlLXZhcnMtZm9yCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgLSBjLW1ha2Uta2V5d29y ZHMtcmUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICByZWdleHAtb3B0CiAgICAgICAgICAy MCAgIDklICAgIC0gIzxjb21waWxlZCAweDEzODUwOGQ5YjExNjQ5YTY+CiAgICAgICAgICAyMCAg IDklICAgICAtICM8Y29tcGlsZWQgMHgzNTMyZmRkODM1MDE4OWE+CiAgICAgICAgICAyMCAgIDkl ICAgICAgLSBydW4taG9vay13aXRoLWFyZ3MKICAgICAgICAgIDIwICAgOSUgICAgICAgLSBlbGRv Yy1kaXNwbGF5LWluLWVjaG8tYXJlYQogICAgICAgICAgMTggICA4JSAgICAgICAgLSBlbGRvYy0t bWVzc2FnZQogICAgICAgICAgMTggICA4JSAgICAgICAgIC0gZWxkb2MtbWluaWJ1ZmZlci1tZXNz YWdlCiAgICAgICAgICAxOCAgIDglICAgICAgICAgIC0gYXBwbHkKICAgICAgICAgIDEzICAgNiUg ICAgICAgICAgICAgbWVzc2FnZQogICAgICAgICAgIDIgICAwJSAgICAgICAgLSBlbGRvYy0tZWNo by1hcmVhLXN1YnN0cmluZwogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgc3Vic3RpdHV0ZS1j b21tYW5kLWtleXMKICAgICAgICAgIDEwICAgNCUgICAtIGpzb25ycGMtLWxvZy1ldmVudAogICAg ICAgICAgIDggICAzJSAgICAtIHBwLXRvLXN0cmluZwogICAgICAgICAgIDggICAzJSAgICAgLSBw cC1idWZmZXIKICAgICAgICAgICA1ICAgMiUgICAgICAtIGRvd24tbGlzdAogICAgICAgICAgIDUg ICAyJSAgICAgICAgIHN5bnRheC1wcHNzCiAgICAgICAgICAgMiAgIDAlICAgICAgLSBpbmRlbnQt c2V4cAogICAgICAgICAgIDIgICAwJSAgICAgICAtIGxpc3AtaW5kZW50LWNhbGMtbmV4dAogICAg ICAgICAgIDEgICAwJSAgICAgICAgICBjYWxjdWxhdGUtbGlzcC1pbmRlbnQKICAgICAgICAgICAx ICAgMCUgICAgICAgIHVwLWxpc3QKICAgICAgICAgICAxICAgMCUgICAgLSBqc29ucnBjLS1ldmVu dHMtYnVmZmVyLXNjcm9sbGJhY2stc2l6ZQogICAgICAgICAgIDEgICAwJSAgICAgLSBhcHBseQog ICAgICAgICAgIDEgICAwJSAgICAgICAgIzxjb21waWxlZCAtMHg0NTVlYzZlMmM2OGQ0MDc+CiAg ICAgICAgICAgMSAgIDAlICAgLSAjPGNvbXBpbGVkIC0weDIyY2E5MjUwOGEwZTFkYz4KICAgICAg ICAgICAxICAgMCUgICAgLSBtYXBjYXIKICAgICAgICAgICAxICAgMCUgICAgIC0gIzxjb21waWxl ZCAweGRhNmM3OTY2MjlkYjdmNz4KICAgICAgICAgICAxICAgMCUgICAgICAtIGVnbG90LS1yYW5n ZS1yZWdpb24KICAgICAgICAgICAxICAgMCUgICAgICAgICBlZ2xvdC0tbHNwLXBvc2l0aW9uLXRv LXBvaW50CiAgICAgICAgICAgMiAgIDAlICAtICM8Y29tcGlsZWQgLTB4MWM3NGFmNzY0MTY4MWRl Zj4KICAgICAgICAgICAyICAgMCUgICAtIGtpbGwtYnVmZmVyCiAgICAgICAgICAgMiAgIDAlICAg ICAgcmVwbGFjZS1idWZmZXItaW4td2luZG93cwogICAgICAgICAgIDEgICAwJSAgICBnZW5lcmF0 ZS1uZXctYnVmZmVyCiAgICAgICAgICA2MCAgMjklIC0gY29tbWFuZC1leGVjdXRlCiAgICAgICAg ICA2MCAgMjklICAtIGNhbGwtaW50ZXJhY3RpdmVseQogICAgICAgICAgNTkgIDI4JSAgIC0gYnl0 ZS1jb2RlCiAgICAgICAgICA1OSAgMjglICAgIC0gcmVhZC1leHRlbmRlZC1jb21tYW5kCiAgICAg ICAgICA1OSAgMjglICAgICAtIHJlYWQtZXh0ZW5kZWQtY29tbWFuZC0xCiAgICAgICAgICA1OSAg MjglICAgICAgLSBjb21wbGV0aW5nLXJlYWQKICAgICAgICAgIDU5ICAyOCUgICAgICAgLSBjb21w bGV0aW5nLXJlYWQtZGVmYXVsdAogICAgICAgICAgMzggIDE4JSAgICAgICAgLSByZWFkLWZyb20t bWluaWJ1ZmZlcgogICAgICAgICAgMTMgICA2JSAgICAgICAgIC0gY29tbWFuZC1leGVjdXRlCiAg ICAgICAgICAgOSAgIDQlICAgICAgICAgIC0gY2FsbC1pbnRlcmFjdGl2ZWx5CiAgICAgICAgICAg OSAgIDQlICAgICAgICAgICAtIGZ1bmNhbGwtaW50ZXJhY3RpdmVseQogICAgICAgICAgIDkgICA0 JSAgICAgICAgICAgIC0gbWluaWJ1ZmZlci1jb21wbGV0ZS1hbmQtZXhpdAogICAgICAgICAgIDkg ICA0JSAgICAgICAgICAgICAtIGNvbXBsZXRpb24tY29tcGxldGUtYW5kLWV4aXQKICAgICAgICAg ICA5ICAgNCUgICAgICAgICAgICAgIC0gY29tcGxldGlvbi0tY29tcGxldGUtYW5kLWV4aXQKICAg ICAgICAgICA4ICAgMyUgICAgICAgICAgICAgICAtIHRyeS1jb21wbGV0aW9uCiAgICAgICAgICAg OCAgIDMlICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZCAweDFiZjNlM2E5NTFlODY1ZDk+CiAg ICAgICAgICAgOCAgIDMlICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlLXdpdGgtYWN0aW9uCiAg ICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICB0ZXN0LWNvbXBsZXRpb24KICAgICAgICAg ICAxICAgMCUgICAgICAgICAtIHJlZGlzcGxheV9pbnRlcm5hbCAoQyBmdW5jdGlvbikKICAgICAg ICAgICAxICAgMCUgICAgICAgICAgLSBldmFsCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAg IGZseW1ha2UtLW1vZGUtbGluZS1jb3VudGVyCiAgICAgICAgICAgMSAgIDAlICAgLSBmdW5jYWxs LWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgLSBleGVjdXRlLWV4dGVuZGVkLWNv bW1hbmQKICAgICAgICAgICAxICAgMCUgICAgIC0gY29tbWFuZC1leGVjdXRlCiAgICAgICAgICAg MSAgIDAlICAgICAgLSBjYWxsLWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgICAg LSBmdW5jYWxsLWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgICAgICAgcHJvZmls ZXItc3RvcAogICAgICAgICAgNTUgIDI2JSAtIHRpbWVyLWV2ZW50LWhhbmRsZXIKICAgICAgICAg IDU1ICAyNiUgIC0gYXBwbHkKICAgICAgICAgIDUxICAyNSUgICAtICM8Y29tcGlsZWQgLTB4ZGFm ZGZlYmVlZGU3YjYyPgogICAgICAgICAgNTEgIDI1JSAgICAtIGVsZG9jLXByaW50LWN1cnJlbnQt c3ltYm9sLWluZm8KICAgICAgICAgIDUxICAyNSUgICAgIC0gZWxkb2MtLWludm9rZS1zdHJhdGVn eQogICAgICAgICAgNTEgIDI1JSAgICAgIC0gZWxkb2MtZG9jdW1lbnRhdGlvbi1jb21wb3NlCiAg ICAgICAgICA1MCAgMjQlICAgICAgIC0gZWxkb2MtLWRvY3VtZW50YXRpb24tY29tcG9zZS0xCiAg ICAgICAgICA1MCAgMjQlICAgICAgICAtIHJ1bi1ob29rLXdyYXBwZWQKICAgICAgICAgIDUwICAy NCUgICAgICAgICAtICM8Y29tcGlsZWQgMHhmNTVhMTcwZmY4MGRmYzk+CiAgICAgICAgICAyNSAg MTIlICAgICAgICAgIC0gZWdsb3Qtc2lnbmF0dXJlLWVsZG9jLWZ1bmN0aW9uCiAgICAgICAgICAx OCAgIDglICAgICAgICAgICAtIGVnbG90LS1UZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtcwogICAg ICAgICAgMTggICA4JSAgICAgICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudElkZW50aWZpZXIK ICAgICAgICAgIDE4ICAgOCUgICAgICAgICAgICAgLSBlZ2xvdC0tcGF0aC10by11cmkKICAgICAg ICAgIDE1ICAgNyUgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgMTQgICA2 JSAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgMTQgICA2JSAgICAgICAg ICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgIDExICAgNSUgICAgICAgICAgICAgICAg IC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgIC0gZmls ZS10cnVlbmFtZQogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1 ZW5hbWUKICAgICAgICAgIDEwICAgNCUgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt ZQogICAgICAgICAgMTAgICA0JSAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQog ICAgICAgICAgIDggICAzJSAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAg ICAgICAgICA4ICAgMyUgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAg ICAgICAgIDggICAzJSAgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAg ICAgICAgIDUgICAyJSAgICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAg ICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQog ICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtdHJ1 ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgdXJsLWhleGlmeS1zdHJpbmcK ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0gZmlsZS1sb2NhbC1uYW1lCiAgICAgICAg ICAgMSAgIDAlICAgICAgICAgICAgICAgICBmaWxlLXJlbW90ZS1wCiAgICAgICAgICAgNyAgIDMl ICAgICAgICAgICAtIGpzb25ycGMtYXN5bmMtcmVxdWVzdAogICAgICAgICAgIDcgICAzJSAgICAg ICAgICAgIC0gYXBwbHkKICAgICAgICAgICA3ICAgMyUgICAgICAgICAgICAgLSBqc29ucnBjLS1h c3luYy1yZXF1ZXN0LTEKICAgICAgICAgICA3ICAgMyUgICAgICAgICAgICAgIC0ganNvbnJwYy1j b25uZWN0aW9uLXNlbmQKICAgICAgICAgICA3ICAgMyUgICAgICAgICAgICAgICAtIGFwcGx5CiAg ICAgICAgICAgNyAgIDMlICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZCAtMHg0YWJjOWI4NGZh N2MyYTQ+CiAgICAgICAgICAgNiAgIDIlICAgICAgICAgICAgICAgICAtIGpzb25ycGMtLWxvZy1l dmVudAogICAgICAgICAgIDYgICAyJSAgICAgICAgICAgICAgICAgIC0gcHAtdG8tc3RyaW5nCiAg ICAgICAgICAgNCAgIDElICAgICAgICAgICAgICAgICAgIC0gcHAtYnVmZmVyCiAgICAgICAgICAg MyAgIDElICAgICAgICAgICAgICAgICAgICAtIGRvd24tbGlzdAogICAgICAgICAgIDIgICAwJSAg ICAgICAgICAgICAgICAgICAgICAgc3ludGF4LXBwc3MKICAgICAgICAgICAxICAgMCUgICAgICAg ICAgICAgICAgICAgIC0gaW5kZW50LXNleHAKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg ICAgICAgICAgIGxpc3AtaW5kZW50LWNhbGMtbmV4dAogICAgICAgICAgMjUgIDEyJSAgICAgICAg ICAtIGVnbG90LWhvdmVyLWVsZG9jLWZ1bmN0aW9uCiAgICAgICAgICAxMSAgIDUlICAgICAgICAg ICAtIGVnbG90LS1oaWdobGlnaHQtcGlnZ3liYWNrCiAgICAgICAgICAgNyAgIDMlICAgICAgICAg ICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMKICAgICAgICAgICA3ICAgMyUg ICAgICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcgogICAgICAgICAgIDcg ICAzJSAgICAgICAgICAgICAgLSBlZ2xvdC0tcGF0aC10by11cmkKICAgICAgICAgICA2ICAgMiUg ICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA1ICAgMiUgICAgICAgICAg ICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgNCAgIDElICAgICAgICAgICAgICAgICAt IGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgICAgICAgICAtIGZpbGUt dHJ1ZW5hbWUKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVu YW1lCiAgICAgICAgICAgMyAgIDElICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUK ICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAg ICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAg ICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAg ICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAg ICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXRydWVuYW1lCiAgICAg ICAgICAgNCAgIDElICAgICAgICAgICAgLSBqc29ucnBjLWFzeW5jLXJlcXVlc3QKICAgICAgICAg ICA0ICAgMSUgICAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDQgICAxJSAgICAgICAgICAg ICAgLSBqc29ucnBjLS1hc3luYy1yZXF1ZXN0LTEKICAgICAgICAgICAyICAgMCUgICAgICAgICAg ICAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1zZW5kCiAgICAgICAgICAgMiAgIDAlICAgICAgICAg ICAgICAgIC0gYXBwbHkKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgIC0gIzxjb21w aWxlZCAtMHg0YWJjOWI4NGZhN2MyYTQ+CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAg ICAgLSBqc29ucnBjLS1sb2ctZXZlbnQKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAg ICAgLSBwcC10by1zdHJpbmcKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAg cHAtYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkIDB4 MTU0N2YzNzNjZThlNTFiMj4KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgLSBydW4t d2l0aC10aW1lcgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgLSBhcHBseQogICAg ICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgIC0gcnVuLWF0LXRpbWUKICAgICAgICAgICAx ICAgMCUgICAgICAgICAgICAgICAgICAgICB0aW1lci1yZWxhdGl2ZS10aW1lCiAgICAgICAgICAg MSAgIDAlICAgICAgICAgICAgICAgLSBqc29ucnBjLS1uZXh0LXJlcXVlc3QtaWQKICAgICAgICAg ICAxICAgMCUgICAgICAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDEgICAwJSAgICAgICAg ICAgICAgICAgICAjPGNvbXBpbGVkIC0weGRmZjgwM2JhNDZjMDJlNT4KICAgICAgICAgIDEwICAg NCUgICAgICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAg ICAxMCAgIDQlICAgICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcgogICAg ICAgICAgMTAgICA0JSAgICAgICAgICAgICAtIGVnbG90LS1wYXRoLXRvLXVyaQogICAgICAgICAg IDggICAzJSAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgOCAgIDMlICAg ICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgOCAgIDMlICAgICAgICAgICAg ICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgIDggICAzJSAgICAgICAgICAgICAgICAgLSBm aWxlLXRydWVuYW1lCiAgICAgICAgICAgNyAgIDMlICAgICAgICAgICAgICAgICAgLSBmaWxlLXRy dWVuYW1lCiAgICAgICAgICAgNyAgIDMlICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt ZQogICAgICAgICAgIDYgICAyJSAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAg ICAgICAgICAgNCAgIDElICAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAg ICAgICAgMyAgIDElICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAg ICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXRydWVuYW1lCiAgICAgICAg ICAgMiAgIDAlICAgICAgICAgICAgICAtIHVybC1oZXhpZnktc3RyaW5nCiAgICAgICAgICAgMiAg IDAlICAgICAgICAgICAgICAgLSBtYXBjb25jYXQKICAgICAgICAgICAxICAgMCUgICAgICAgICAg ICAgICAgICAjPGNvbXBpbGVkIDB4MWU2Y2EwY2I4NWE0NThiYz4KICAgICAgICAgICA0ICAgMSUg ICAgICAgICAgIC0ganNvbnJwYy1hc3luYy1yZXF1ZXN0CiAgICAgICAgICAgNCAgIDElICAgICAg ICAgICAgLSBhcHBseQogICAgICAgICAgIDQgICAxJSAgICAgICAgICAgICAtIGpzb25ycGMtLWFz eW5jLXJlcXVlc3QtMQogICAgICAgICAgIDQgICAxJSAgICAgICAgICAgICAgLSBqc29ucnBjLWNv bm5lY3Rpb24tc2VuZAogICAgICAgICAgIDQgICAxJSAgICAgICAgICAgICAgIC0gYXBwbHkKICAg ICAgICAgICA0ICAgMSUgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkIC0weDRhYmM5Yjg0ZmE3 YzJhND4KICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgIC0ganNvbnJwYy0tbG9nLWV2 ZW50CiAgICAgICAgICAgMyAgIDElICAgICAgICAgICAgICAgICAgLSBwcC10by1zdHJpbmcKICAg ICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgLSBwcC1idWZmZXIKICAgICAgICAgICAy ICAgMCUgICAgICAgICAgICAgICAgICAgIC0gaW5kZW50LXNleHAKICAgICAgICAgICAxICAgMCUg ICAgICAgICAgICAgICAgICAgICAgIGluZGVudC1saW5lLXRvCiAgICAgICAgICAgMSAgIDAlICAg ICAgICAgICAgICAgICAgICAgICBsaXNwLWluZGVudC1jYWxjLW5leHQKICAgICAgICAgICAxICAg MCUgICAgICAgICAgICAgICAgICAganNvbnJwYy0tanNvbi1lbmNvZGUKICAgICAgICAgICAzICAg MSUgICAgICM8Y29tcGlsZWQgMHgxMmM2ZDdiNTRhMWQ2ZDI2PgogICAgICAgICAgIDEgICAwJSAg IC0gc2hvdy1wYXJlbi1mdW5jdGlvbgogICAgICAgICAgIDEgICAwJSAgICAtIHNob3ctcGFyZW4t LWRlZmF1bHQKICAgICAgICAgICAxICAgMCUgICAgICAgc3ludGF4LXBwc3MKICAgICAgICAgIDIx ICAxMCUgLSBlbGRvYy1wcmUtY29tbWFuZC1yZWZyZXNoLWVjaG8tYXJlYQogICAgICAgICAgMjEg IDEwJSAgLSBlbGRvYy0tbWVzc2FnZQogICAgICAgICAgMjEgIDEwJSAgIC0gZWxkb2MtbWluaWJ1 ZmZlci1tZXNzYWdlCiAgICAgICAgICAyMSAgMTAlICAgICAgYXBwbHkKICAgICAgICAgICAzICAg MSUgLSByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAgICAgICAgMyAgIDElICAt IGV2YWwKICAgICAgICAgICAxICAgMCUgICAgIGZseW1ha2UtLW1vZGUtbGluZS1jb3VudGVyCiAg ICAgICAgICAgMCAgIDAlICsgLi4uCg== --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=emacs-30-before Content-Transfer-Encoding: base64 ICAgICAgICAgMjA5ICA0MyUgLSB0aW1lci1ldmVudC1oYW5kbGVyCiAgICAgICAgIDIwOSAgNDMl ICAtIGFwcGx5CiAgICAgICAgIDE4NyAgMzklICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDk3OD4K ICAgICAgICAgMTc5ICAzNyUgICAgLSBqc29ucnBjLWNvbm5lY3Rpb24tcmVjZWl2ZQogICAgICAg ICAxMDQgIDIxJSAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEY3Qj4KICAgICAgICAgMTA0ICAy MSUgICAgICAtIGFwcGx5CiAgICAgICAgIDEwNCAgMjElICAgICAgIC0gZWdsb3QtaGFuZGxlLW5v dGlmaWNhdGlvbgogICAgICAgICAxMDQgIDIxJSAgICAgICAgLSBhcHBseQogICAgICAgICAxMDQg IDIxJSAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA2MDQ+CiAgICAgICAgICA5MCAgMTgl ICAgICAgICAgIC0gZmluZC1idWZmZXItdmlzaXRpbmcKICAgICAgICAgIDczICAxNSUgICAgICAg ICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgNjEgIDEyJSAgICAgICAgICAgIC0gZmlsZS10 cnVlbmFtZQogICAgICAgICAgNTggIDEyJSAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAg ICAgICAgIDUxICAxMCUgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgNDYg ICA5JSAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgNDMgICA5JSAgICAg ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgIDQxICAgOCUgICAgICAgICAgICAg ICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgMzYgICA3JSAgICAgICAgICAgICAgICAgIC0g ZmlsZS10cnVlbmFtZQogICAgICAgICAgMzQgICA3JSAgICAgICAgICAgICAgICAgICAtIGZpbGUt dHJ1ZW5hbWUKICAgICAgICAgIDI4ICAgNSUgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVl bmFtZQogICAgICAgICAgMjIgICA0JSAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt ZQogICAgICAgICAgMTUgICAzJSAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUK ICAgICAgICAgIDEwICAgMiUgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQog ICAgICAgICAgIDUgICAxJSAgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQog ICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtdHJ1ZW5hbWUK ICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAgYWJicmV2aWF0ZS1maWxlLW5hbWUKICAgICAg ICAgICA4ICAgMSUgICAgICAgICAgLSBlZ2xvdC11cmktdG8tcGF0aAogICAgICAgICAgIDcgICAx JSAgICAgICAgICAgLSB1cmwtZ2VuZXJpYy1wYXJzZS11cmwKICAgICAgICAgICAyICAgMCUgICAg ICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNTQ4PgogICAgICAgICAgIDIgICAwJSAgICAg ICAgICAgICAgIGtpbGwtYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICBtYXRj aC1zdHJpbmcKICAgICAgICAgICAxICAgMCUgICAgICAgICAgIC0gZWdsb3QtLXRyYW1waXNoLXAK ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIHByb2plY3Qtcm9vdAogICAgICAgICAgIDEg ICAwJSAgICAgICAgICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAt ICM8Y29tcGlsZWQtZnVuY3Rpb24gNUQ4PgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg ICAgZ2V0aGFzaAogICAgICAgICAgIDUgICAxJSAgICAgICAgICAgIGVnbG90LS1tYWtlLWRpYWcK ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICBleHBhbmQtZmlsZS1uYW1lCiAgICAgICAgICA2 NSAgMTMlICAgICAtIGpzb25ycGMtLWNvbnRpbnVlCiAgICAgICAgICA2MyAgMTMlICAgICAgLSAj PGNvbXBpbGVkLWZ1bmN0aW9uIEE3MD4KICAgICAgICAgIDU2ICAxMSUgICAgICAgLSBlZ2xvdC0t aG92ZXItaW5mbwogICAgICAgICAgNTYgIDExJSAgICAgICAgLSBlZ2xvdC0tZm9ybWF0LW1hcmt1 cAogICAgICAgICAgNDAgICA4JSAgICAgICAgIC0gZ2ZtLXZpZXctbW9kZQogICAgICAgICAgMTMg ICAyJSAgICAgICAgICAtIGRlZmFsaWFzCiAgICAgICAgICAgOCAgIDElICAgICAgICAgICAtIGZp bGUtbmFtZS1zYW5zLWV4dGVuc2lvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgZmls ZS1uYW1lLXNhbnMtdmVyc2lvbnMKICAgICAgICAgICA5ICAgMSUgICAgICAgICAgLSBieXRlLWNv ZGUKICAgICAgICAgICA4ICAgMSUgICAgICAgICAgIC0gcmVxdWlyZQogICAgICAgICAgIDIgICAw JSAgICAgICAgICAgIC0gZGVmYWxpYXMKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICBm aWxlLW5hbWUtc2Fucy1leHRlbnNpb24KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIGN1 c3RvbS1kZWNsYXJlLWZhY2UKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgLSBmYWNlLXNw ZWMtc2V0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIGZhY2Utc3BlYy1yZWNhbGMK ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAtIGZhY2UtYXR0cmlidXRlCiAgICAgICAg ICAgMSAgIDAlICAgICAgICAgICAgICAgICAgZmFjZS1hdHRyaWJ1dGUtcmVsYXRpdmUtcAogICAg ICAgICAgIDEgICAwJSAgICAgICAgICAgLSBjdXN0b20tZGVjbGFyZS12YXJpYWJsZQogICAgICAg ICAgIDEgICAwJSAgICAgICAgICAgIC0gY3VzdG9tLWluaXRpYWxpemUtcmVzZXQKICAgICAgICAg ICAxICAgMCUgICAgICAgICAgICAgLSBldmFsCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAg ICAtIGZ1bmNhbGwKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAtICM8Y29tcGlsZWQt ZnVuY3Rpb24gREYzPgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAtIGV4ZWN1dGFi bGUtZmluZAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICBsb2NhdGUtZmlsZQog ICAgICAgICAgIDQgICAwJSAgICAgICAgICAgIHJlcXVpcmUKICAgICAgICAgICA0ICAgMCUgICAg ICAgICAgLSByZWFkLW9ubHktbW9kZQogICAgICAgICAgIDQgICAwJSAgICAgICAgICAgLSB2aWV3 LW1vZGUtZW50ZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIGRlZmFsaWFzCiAgICAg ICAgICAgMSAgIDAlICAgICAgICAgICAgICAgZmlsZS1uYW1lLXNhbnMtZXh0ZW5zaW9uCiAgICAg ICAgICAgMyAgIDAlICAgICAgICAgICAgcmVhZAogICAgICAgICAgIDMgICAwJSAgICAgICAgICAt IGdmbS1tb2RlCiAgICAgICAgICAgMyAgIDAlICAgICAgICAgICAtIG1hcmtkb3duLW1vZGUKICAg ICAgICAgICAyICAgMCUgICAgICAgICAgICAtIHN5bnRheC1wcm9wZXJ0aXplCiAgICAgICAgICAg MiAgIDAlICAgICAgICAgICAgIC0gbWFya2Rvd24tc3ludGF4LXByb3BlcnRpemUKICAgICAgICAg ICAxICAgMCUgICAgICAgICAgICAgIC0gbWFya2Rvd24tc3ludGF4LXByb3BlcnRpemUtbGlzdC1p dGVtcwogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIC0gbWFya2Rvd24tLWN1ci1saXN0 LWl0ZW0tYm91bmRzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIC0gbWFya2Rvd24t Y3VyLWxpc3QtaXRlbS1lbmQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgIC0gbWFy a2Rvd24tcHJldi1saW5lLWJsYW5rCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAg ICBsb29raW5nLWF0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIG1hcmtkb3duLXN5 bnRheC1wcm9wZXJ0aXplLXByZS1ibG9ja3MKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg ICAgIGZvcm1hdAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgYWRkLWhvb2sKICAgICAg ICAgICAxICAgMCUgICAgICAgICAgLSBjdXN0b20tZGVjbGFyZS1mYWNlCiAgICAgICAgICAgMSAg IDAlICAgICAgICAgICAtIGZhY2Utc3BlYy1zZXQKICAgICAgICAgICAxICAgMCUgICAgICAgICAg ICAtIG1ha2UtZW1wdHktZmFjZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIG1ha2Ut ZmFjZQogICAgICAgICAgMTMgICAyJSAgICAgICAgIC0gZm9udC1sb2NrLWVuc3VyZQogICAgICAg ICAgMTMgICAyJSAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNDZEPgogICAgICAgICAg MTMgICAyJSAgICAgICAgICAgLSBmb250LWxvY2stZm9udGlmeS1yZWdpb24KICAgICAgICAgIDEz ICAgMiUgICAgICAgICAgICAtIGZvbnQtbG9jay1kZWZhdWx0LWZvbnRpZnktcmVnaW9uCiAgICAg ICAgICAgOCAgIDElICAgICAgICAgICAgIC0gZm9udC1sb2NrLWZvbnRpZnkta2V5d29yZHMtcmVn aW9uCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAtIG1hcmtkb3duLWZvbnRpZnktaW5s aW5lLWxpbmtzCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgLSBtYXJrZG93bi1tYXRj aC1nZW5lcmljLWxpbmtzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIC0gbWFya2Rv d24tcmFuZ2UtcHJvcGVydHktYW55CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAg IG51bWJlci1zZXF1ZW5jZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgIHJlLXNl YXJjaC1mb3J3YXJkCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIG1hcmtkb3duLW1h dGNoLXBhbmRvYy1tZXRhZGF0YQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIC0gbWFy a2Rvd24tbWF0Y2gtZ2VuZXJpYy1tZXRhZGF0YQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAg ICAgICAgIHJlLXNlYXJjaC1mb3J3YXJkCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAt IG1hcmtkb3duLW1hdGNoLWJvbGQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAtIG1h cmtkb3duLW1hdGNoLWlubGluZS1nZW5lcmljCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAg ICAgICAgcmUtc2VhcmNoLWZvcndhcmQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0g bWFya2Rvd24tZm9udGlmeS1zdWItc3VwZXJzY3JpcHRzCiAgICAgICAgICAgMSAgIDAlICAgICAg ICAgICAgICAgLSBtYXJrZG93bi1zZWFyY2gtdW50aWwtY29uZGl0aW9uCiAgICAgICAgICAgMSAg IDAlICAgICAgICAgICAgICAgIC0gYXBwbHkKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg ICAgICAgcmUtc2VhcmNoLWZvcndhcmQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0g bWFya2Rvd24tZm9udGlmeS1wbGFpbi11cmlzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAg ICAgLSBtYXJrZG93bi1tYXRjaC1wbGFpbi11cmlzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg ICAgICAgIC0gbWFya2Rvd24tbWF0Y2gtaW5saW5lLWdlbmVyaWMKICAgICAgICAgICAxICAgMCUg ICAgICAgICAgICAgICAgIC0gbWFya2Rvd24tY29kZS1ibG9jay1hdC1wb3MKICAgICAgICAgICAx ICAgMCUgICAgICAgICAgICAgICAgICAtIG1hcmtkb3duLWdldC1lbmNsb3NpbmctZmVuY2VkLWJs b2NrLWNvbnN0cnVjdAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgIGNsLWZp bmQtaWYKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0gbWFya2Rvd24tbWF0Y2gtY29k ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIC0gbWFya2Rvd24tc2VhcmNoLXVudGls LWNvbmRpdGlvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAtIGFwcGx5CiAgICAg ICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgIHJlLXNlYXJjaC1mb3J3YXJkCiAgICAgICAg ICAgNSAgIDElICAgICAgICAgICAgIC0gZm9udC1sb2NrLWZvbnRpZnktc3ludGFjdGljYWxseS1y ZWdpb24KICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAgIC0gdHJlZXNpdC1mb250LWxvY2st Zm9udGlmeS1yZWdpb24KICAgICAgICAgICA0ICAgMCUgICAgICAgICAgICAgICAgIHRyZWVzaXQt cGFyc2VyLXJvb3Qtbm9kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgdHJlZXNp dC0tZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uLTEKICAgICAgICAgICAzICAgMCUgICAgICAgICAt IGphdmEtdHMtbW9kZQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAtIHRyZWVzaXQtbWFqb3It bW9kZS1zZXR1cAogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgLSBrZXltYXAtc2V0CiAgICAg ICAgICAgMiAgIDAlICAgICAgICAgICAgLSBrZXltYXAtLWNoZWNrCiAgICAgICAgICAgMiAgIDAl ICAgICAgICAgICAgIC0ga2V5LXZhbGlkLXAKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAg ICAgc3RyaW5nLW1hdGNoCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gdHJlZXNpdC1yZWFk eS1wCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIHRyZWVzaXQtbGFuZ3VhZ2UtYXZhaWxh YmxlLXAKICAgICAgICAgICA3ICAgMSUgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDI2MD4K ICAgICAgICAgICA2ICAgMSUgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiBBRjA+CiAgICAg ICAgICAgNiAgIDElICAgICAgICAgLSBydW4taG9vay13aXRoLWFyZ3MKICAgICAgICAgICA1ICAg MSUgICAgICAgICAgLSBlbGRvYy1kaXNwbGF5LWluLWVjaG8tYXJlYQogICAgICAgICAgIDMgICAw JSAgICAgICAgICAgLSBlbGRvYy0tbWVzc2FnZQogICAgICAgICAgIDMgICAwJSAgICAgICAgICAg IC0gZWxkb2MtbWluaWJ1ZmZlci1tZXNzYWdlCiAgICAgICAgICAgMyAgIDAlICAgICAgICAgICAg IC0gbWVzc2FnZQogICAgICAgICAgIDMgICAwJSAgICAgICAgICAgICAgICByZWRpc3BsYXlfaW50 ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gZWxkb2MtZGlz cGxheS1pbi1idWZmZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgZWxkb2MtLWZvcm1h dC1kb2MtYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9u IEMzQz4KICAgICAgICAgICAxICAgMCUgICAgICAgLSBlZ2xvdC0tY2hlY2stb2JqZWN0CiAgICAg ICAgICAgMSAgIDAlICAgICAgICAgIGVnbG90LS1pbnRlcmZhY2UKICAgICAgICAgICAxICAgMCUg ICAgICAtIChzZXRmIGpzb25ycGMtLXN5bmMtcmVxdWVzdC1hbGlzdCkKICAgICAgICAgICAxICAg MCUgICAgICAgICBnZXRoYXNoCiAgICAgICAgICAgOCAgIDElICAgICAtIGFwcGx5CiAgICAgICAg ICAgNiAgIDElICAgICAgLSBqc29ucnBjLS1ldmVudAogICAgICAgICAgIDYgICAxJSAgICAgICAt ICM8Y29tcGlsZWQtZnVuY3Rpb24gRkJEPgogICAgICAgICAgIDYgICAxJSAgICAgICAgLSBhcHBs eQogICAgICAgICAgIDYgICAxJSAgICAgICAgIC0ganNvbnJwYy0tbG9nLWV2ZW50CiAgICAgICAg ICAgMSAgIDAlICAgICAgICAgIC0ganNvbnJwYy0tc3luYy1yZXF1ZXN0LWFsaXN0CiAgICAgICAg ICAgMSAgIDAlICAgICAgICAgICAgIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAgICAgLSBqc29u cnBjLS1yZXBseQogICAgICAgICAgIDEgICAwJSAgICAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1z ZW5kCiAgICAgICAgICAgMSAgIDAlICAgICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAg ICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDIwMT4KICAgICAgICAgICAxICAgMCUgICAgICAg ICAgLSBqc29ucnBjLS1qc29uLWVuY29kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICBq c29uLXNlcmlhbGl6ZQogICAgICAgICAgIDEgICAwJSAgICAgLSBqc29ucnBjLWNvbnZlcnQtZnJv bS1lbmRwb2ludAogICAgICAgICAgIDEgICAwJSAgICAgICAgY2wtdHlwZS1vZgogICAgICAgICAg IDEgICAwJSAgICAgICBjbC0tZG8tcmVtZgogICAgICAgICAgIDQgICAwJSAgICAtICM8Y29tcGls ZWQtZnVuY3Rpb24gMTU3PgogICAgICAgICAgIDQgICAwJSAgICAgLSBraWxsLWJ1ZmZlcgogICAg ICAgICAgIDIgICAwJSAgICAgIC0gcmVwbGFjZS1idWZmZXItaW4td2luZG93cwogICAgICAgICAg IDEgICAwJSAgICAgICAgIHVucmVjb3JkLXdpbmRvdy1idWZmZXIKICAgICAgICAgICAxICAgMCUg ICAgICBnZW5lcmF0ZS1uZXctYnVmZmVyCiAgICAgICAgICAyMSAgIDQlICAgLSAjPHN1YnItbmF0 aXZlLWVsaXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFt YmRhXzEyPgogICAgICAgICAgMjEgICA0JSAgICAtIGVsZG9jLXByaW50LWN1cnJlbnQtc3ltYm9s LWluZm8KICAgICAgICAgIDIxICAgNCUgICAgIC0gZWxkb2MtLWludm9rZS1zdHJhdGVneQogICAg ICAgICAgMjEgICA0JSAgICAgIC0gZWxkb2MtZG9jdW1lbnRhdGlvbi1jb21wb3NlCiAgICAgICAg ICAxMSAgIDIlICAgICAgIC0gZWdsb3QtaG92ZXItZWxkb2MtZnVuY3Rpb24KICAgICAgICAgICA1 ICAgMSUgICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAg ICAgNSAgIDElICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcgogICAgICAg ICAgIDUgICAxJSAgICAgICAgICAtIGVnbG90LXBhdGgtdG8tdXJpCiAgICAgICAgICAgNSAgIDEl ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAt IGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAgLSBmaWxlLXRydWVu YW1lCiAgICAgICAgICAgNCAgIDAlICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAg ICAgICAzICAgMCUgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICAzICAg MCUgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgMyAgIDAlICAgICAg ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg ICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAg LSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAtIGZp bGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAtIGZpbGUt dHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXRy dWVuYW1lCiAgICAgICAgICAgNSAgIDElICAgICAgICAtIGVnbG90LS1oaWdobGlnaHQtcGlnZ3li YWNrCiAgICAgICAgICAgNSAgIDElICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50UG9zaXRp b25QYXJhbXMKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50 SWRlbnRpZmllcgogICAgICAgICAgIDUgICAxJSAgICAgICAgICAgLSBlZ2xvdC1wYXRoLXRvLXVy aQogICAgICAgICAgIDUgICAxJSAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAg IDUgICAxJSAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA0ICAgMCUgICAg ICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgIDQgICAwJSAgICAgICAgICAgICAg IC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgIDMgICAwJSAgICAgICAgICAgICAgICAtIGZpbGUt dHJ1ZW5hbWUKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt ZQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAg ICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAg ICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgZmlsZS10cnVlbmFtZQogICAgICAgICAgIDEg ICAwJSAgICAgICAgLSBqc29ucnBjLWFzeW5jLXJlcXVlc3QKICAgICAgICAgICAxICAgMCUgICAg ICAgICAtIGpzb25ycGMtLWFzeW5jLXJlcXVlc3QtMQogICAgICAgICAgIDEgICAwJSAgICAgICAg ICAtIGpzb25ycGMtY29ubmVjdGlvbi1zZW5kCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAt IGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9u IDIwMT4KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICBmb3JtYXQKICAgICAgICAgIDEw ICAgMiUgICAgICAgLSBlZ2xvdC1zaWduYXR1cmUtZWxkb2MtZnVuY3Rpb24KICAgICAgICAgIDEw ICAgMiUgICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAg ICAxMCAgIDIlICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcgogICAgICAg ICAgMTAgICAyJSAgICAgICAgICAtIGVnbG90LXBhdGgtdG8tdXJpCiAgICAgICAgICAxMCAgIDIl ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgIDEwICAgMiUgICAgICAgICAgICAt IGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA4ICAgMSUgICAgICAgICAgICAgLSBmaWxlLXRydWVu YW1lCiAgICAgICAgICAgNyAgIDElICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAg ICAgICA3ICAgMSUgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA3ICAg MSUgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgNyAgIDElICAgICAg ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA3ICAgMSUgICAgICAgICAgICAg ICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA2ICAgMSUgICAgICAgICAgICAgICAgICAg LSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgNiAgIDElICAgICAgICAgICAgICAgICAgICAtIGZp bGUtdHJ1ZW5hbWUKICAgICAgICAgICA2ICAgMSUgICAgICAgICAgICAgICAgICAgICAtIGZpbGUt dHJ1ZW5hbWUKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRy dWVuYW1lCiAgICAgICAgICAgNCAgIDAlICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1 ZW5hbWUKICAgICAgICAgICAzICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1 ZW5hbWUKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRy dWVuYW1lCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW1w LWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAg ICAgICAgICAgICAgICAgLSB0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyCiAgICAg ICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW1wLXJ1bi1yZWFsLWhh bmRsZXIKICAgICAgICAgICAxICAgMCUgICAtICM8c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZl Nzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfOT4KICAgICAgICAgICAx ICAgMCUgICAgICBqaXQtbG9jay1jb250ZXh0LWZvbnRpZnkKICAgICAgICAgIDk0ICAxOSUgLSBy ZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAgICAgICAgOCAgIDElICAtIGV2YWwK ICAgICAgICAgICA1ICAgMSUgICAtIGVnbG90LS1tb2RlLWxpbmUtZm9ybWF0CiAgICAgICAgICAg MyAgIDAlICAgIC0gZWdsb3QtcHJvamVjdC1uaWNrbmFtZQogICAgICAgICAgIDEgICAwJSAgICAg ICBnZXRoYXNoCiAgICAgICAgICAgMSAgIDAlICAgICAgIGNsLXR5cGUtb2YKICAgICAgICAgICAx ICAgMCUgICAgICAgYXBwbHkKICAgICAgICAgICAxICAgMCUgICAgLSBlZ2xvdC0tcHJvZ3Jlc3Mt cmVwb3J0ZXJzCiAgICAgICAgICAgMSAgIDAlICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAl ICAgICAgICAjPGNvbXBpbGVkLWZ1bmN0aW9uIENDMz4KICAgICAgICAgICAyICAgMCUgICAtIGlm CiAgICAgICAgICAgMiAgIDAlICAgICAgZnJhbWUtcGFyYW1ldGVyCiAgICAgICAgICAgMSAgIDAl ICAgLSBmbHltYWtlLS1tb2RlLWxpbmUtZXhjZXB0aW9uCiAgICAgICAgICAgMSAgIDAlICAgIC0g Zmx5bWFrZS1yZXBvcnRpbmctYmFja2VuZHMKICAgICAgICAgICAxICAgMCUgICAgICAgY2FsbGVk LWludGVyYWN0aXZlbHktcAogICAgICAgICAgODUgIDE3JSAtICM8Y29tcGlsZWQtZnVuY3Rpb24g RkI4PgogICAgICAgICAgNzQgIDE1JSAgICBuYXRpdmUtZWxpc3AtbG9hZAogICAgICAgICAgIDcg ICAxJSAgLSBjb21wLXJ1bi1hc3luYy13b3JrZXJzCiAgICAgICAgICAgMyAgIDAlICAgLSBtYXBj YXIKICAgICAgICAgICAzICAgMCUgICAgICBwcmluMS10by1zdHJpbmcKICAgICAgICAgICAyICAg MCUgICAtIGZpbGUtbmFtZS1iYXNlCiAgICAgICAgICAgMSAgIDAlICAgICAgZmlsZS1uYW1lLXNh bnMtZXh0ZW5zaW9uCiAgICAgICAgICAgMSAgIDAlICAgLSB3cml0ZS1yZWdpb24KICAgICAgICAg ICAxICAgMCUgICAgLSBzZWxlY3Qtc2FmZS1jb2Rpbmctc3lzdGVtCiAgICAgICAgICAgMSAgIDAl ICAgICAtIGZpbmQtYXV0by1jb2RpbmcKICAgICAgICAgICAxICAgMCUgICAgICAgIGF1dG8tY29k aW5nLWFsaXN0LWxvb2t1cAogICAgICAgICAgIDEgICAwJSAgICAgbWFrZS1wcm9jZXNzCiAgICAg ICAgICAgMiAgIDAlICAgIGNvbXAtZWwtdG8tZWxuLWZpbGVuYW1lCiAgICAgICAgICAgMSAgIDAl ICAgIGRlbGV0ZS1maWxlCiAgICAgICAgICAgMSAgIDAlICAgIGNvbXAtYWNjZXB0LWFuZC1wcm9j ZXNzLWFzeW5jLW91dHB1dAogICAgICAgICAgNjcgIDE0JSAtIGNvbW1hbmQtZXhlY3V0ZQogICAg ICAgICAgNjUgIDEzJSAgLSBieXRlLWNvZGUKICAgICAgICAgIDY1ICAxMyUgICAtIHJlYWQtZXh0 ZW5kZWQtY29tbWFuZAogICAgICAgICAgNjUgIDEzJSAgICAtIHJlYWQtZXh0ZW5kZWQtY29tbWFu ZC0xCiAgICAgICAgICA2NSAgMTMlICAgICAtIGNvbXBsZXRpbmctcmVhZC1kZWZhdWx0CiAgICAg ICAgICA2NSAgMTMlICAgICAgLSBhcHBseQogICAgICAgICAgNjUgIDEzJSAgICAgICAtIHZlcnRp Y28tLWFkdmljZQogICAgICAgICAgNjUgIDEzJSAgICAgICAgLSBhcHBseQogICAgICAgICAgNjUg IDEzJSAgICAgICAgIC0gIzxzdWJyLW5hdGl2ZS1lbGlzcCBjb21wbGV0aW5nLXJlYWQtZGVmYXVs dD4KICAgICAgICAgIDE5ICAgMyUgICAgICAgICAgLSB2ZXJ0aWNvLS1leGhpYml0CiAgICAgICAg ICAxMyAgIDIlICAgICAgICAgICAtIHZlcnRpY28tLXVwZGF0ZQogICAgICAgICAgMTMgICAyJSAg ICAgICAgICAgIC0gdmVydGljby0tcmVjb21wdXRlCiAgICAgICAgICAxMSAgIDIlICAgICAgICAg ICAgIC0gdmVydGljby0tZmlsdGVyLWNvbXBsZXRpb25zCiAgICAgICAgICAxMSAgIDIlICAgICAg ICAgICAgICAtIGNvbXBsZXRpb24tYWxsLWNvbXBsZXRpb25zCiAgICAgICAgICAxMSAgIDIlICAg ICAgICAgICAgICAgLSBjb21wbGV0aW9uLS1udGgtY29tcGxldGlvbgogICAgICAgICAgMTEgICAy JSAgICAgICAgICAgICAgICAtIHNlcS1zb21lCiAgICAgICAgICAxMSAgIDIlICAgICAgICAgICAg ICAgICAtIHNlcS1kbwogICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAgICAgIC0gbWFwYwog ICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24g RDg4PgogICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1 bmN0aW9uIERCQj4KICAgICAgICAgIDExICAgMiUgICAgICAgICAgICAgICAgICAgICAtIG9yZGVy bGVzcy1hbGwtY29tcGxldGlvbnMKICAgICAgICAgIDExICAgMiUgICAgICAgICAgICAgICAgICAg ICAgLSBvcmRlcmxlc3MtLWZpbHRlcgogICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAgICAg ICAgICAgLSAjPHN1YnItbmF0aXZlLWVsaXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYy NjQ2MV9hbm9ueW1vdXNfbGFtYmRhXzU2PgogICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAg ICAgICAgICAgIC0gY29tcGxldGUtd2l0aC1hY3Rpb24KICAgICAgICAgIDExICAgMiUgICAgICAg ICAgICAgICAgICAgICAgICAgLSBhbGwtY29tcGxldGlvbnMKICAgICAgICAgICA0ICAgMCUgICAg ICAgICAgICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiBERTY+CiAgICAgICAg ICAgMiAgIDAlICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9u IDg0RT4KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t YW5kcAogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAtIHZlcnRpY28tc29ydC1oaXN0b3J5 LWxlbmd0aC1hbHBoYQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgLSAjPHN1YnItbmF0 aXZlLWVsaXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFt YmRhXzE0PgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgIzxwcmltaXRpdmUtZnVu Y3Rpb24gc3RyaW5nLWxlc3NwPgogICAgICAgICAgIDMgICAwJSAgICAgICAgICAgLSB2ZXJ0aWNv LS1hcnJhbmdlLWNhbmRpZGF0ZXMKICAgICAgICAgICAzICAgMCUgICAgICAgICAgICAtIHZlcnRp Y28tLWFmZml4YXRlCiAgICAgICAgICAgMyAgIDAlICAgICAgICAgICAgIC0gcmVhZC1leHRlbmRl ZC1jb21tYW5kLS1hZmZpeGF0aW9uCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICM8 c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255 bW91c19sYW1iZGFfNjE+CiAgICAgICAgICAgMyAgIDAlICAgICAgICAgICAtIHZlcnRpY28tLWRp c3BsYXktY2FuZGlkYXRlcwogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgIC0gdmVydGljby0t cmVzaXplLXdpbmRvdwogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgIHdpbmRvdy10ZXh0 LXBpeGVsLXNpemUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIG1vdmUtb3ZlcmxheQog ICAgICAgICAgMTkgICAzJSAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gMTJBPgogICAg ICAgICAgMTkgICAzJSAgICAgICAgICAgICBuYXRpdmUtZWxpc3AtbG9hZAogICAgICAgICAgMTgg ICAzJSAgICAgICAgICAgIHJlZGlzcGxheV9pbnRlcm5hbCAoQyBmdW5jdGlvbikKICAgICAgICAg ICAyICAgMCUgIC0gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5CiAgICAgICAgICAgMiAgIDAlICAgLSBm aWxlLW5vdGlmeS1oYW5kbGUtZXZlbnQKICAgICAgICAgICAyICAgMCUgICAgLSBmaWxlLW5vdGlm eS0tY2FsbGJhY2staW5vdGlmeQogICAgICAgICAgIDIgICAwJSAgICAgLSBmaWxlLW5vdGlmeS0t aGFuZGxlLWV2ZW50CiAgICAgICAgICAgMiAgIDAlICAgICAgLSBmaWxlLW5vdGlmeS0tY2FsbC1o YW5kbGVyCiAgICAgICAgICAgMiAgIDAlICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA3OUY+ CiAgICAgICAgICAgMSAgIDAlICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gMjY2PgogICAg ICAgICAgIDEgICAwJSAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiAwOEY+CiAgICAgICAg ICAgMSAgIDAlICAgICAgICAgICAgcmUtc2VhcmNoLWZvcndhcmQKICAgICAgICAgICAxICAgMCUg ICAgICAgIC0gZWdsb3QtcGF0aC10by11cmkKICAgICAgICAgICAxICAgMCUgICAgICAgICAtIGZp bGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAg ICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAg MCUgICAgICAgICAgICAgIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgIDExICAgMiUgLSBhcHBseQog ICAgICAgICAgMTEgICAyJSAgICBuYXRpdmUtLWNvbXBpbGUtYXN5bmMKICAgICAgICAgICA2ICAg MSUgLSBqc29ucnBjLS1wcm9jZXNzLWZpbHRlcgogICAgICAgICAgIDQgICAwJSAgLSBqc29ucnBj LS1qc29uLXJlYWQKICAgICAgICAgICA0ICAgMCUgICAgIGpzb24tcGFyc2UtYnVmZmVyCiAgICAg ICAgICAgMSAgIDAlICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNEQ2PgogICAgICAgICAgIDEgICAw JSAgIC0gdGltZXItc2V0LXRpbWUKICAgICAgICAgICAxICAgMCUgICAgLSB0aW1lci0tdGltZS1z ZXR0ZXIKICAgICAgICAgICAxICAgMCUgICAgICAgdGltZXJwCiAgICAgICAgICAgMSAgIDAlICAt IGpzb25ycGMtLWV4cGVjdGVkLWJ5dGVzCiAgICAgICAgICAgMSAgIDAlICAgICBnZXRoYXNoCiAg ICAgICAgICAgMiAgIDAlICAgaW50ZXJuYWwtZGVmYXVsdC1wcm9jZXNzLWZpbHRlcgogICAgICAg ICAgIDEgICAwJSArIC4uLgogICAgICAgICAgIDEgICAwJSArIGVsZG9jLXByZS1jb21tYW5kLXJl ZnJlc2gtZWNoby1hcmVhCg== --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=emacs-30-new-file-truename Content-Transfer-Encoding: base64 ICAgICAgICAgMTA1ICA0NyUgLSByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAg ICAgICAgMiAgIDAlICAtIHJlZGlzcGxheS0tcHJlLXJlZGlzcGxheS1mdW5jdGlvbnMKICAgICAg ICAgICAxICAgMCUgICAgIHJ1bi1ob29rLXdpdGgtYXJncwogICAgICAgICAgIDEgICAwJSAgLSBl dmFsCiAgICAgICAgICAgMSAgIDAlICAgLSBpZgogICAgICAgICAgIDEgICAwJSAgICAgIGZyYW1l LXBhcmFtZXRlcgogICAgICAgICAgNTUgIDI1JSAtIGNvbW1hbmQtZXhlY3V0ZQogICAgICAgICAg NTQgIDI0JSAgLSBieXRlLWNvZGUKICAgICAgICAgIDU0ICAyNCUgICAtIHJlYWQtZXh0ZW5kZWQt Y29tbWFuZAogICAgICAgICAgNTQgIDI0JSAgICAtIHJlYWQtZXh0ZW5kZWQtY29tbWFuZC0xCiAg ICAgICAgICA1NCAgMjQlICAgICAtIGNvbXBsZXRpbmctcmVhZC1kZWZhdWx0CiAgICAgICAgICA1 NCAgMjQlICAgICAgLSBhcHBseQogICAgICAgICAgNTQgIDI0JSAgICAgICAtIHZlcnRpY28tLWFk dmljZQogICAgICAgICAgNTQgIDI0JSAgICAgICAgLSBhcHBseQogICAgICAgICAgNTQgIDI0JSAg ICAgICAgIC0gIzxzdWJyLW5hdGl2ZS1lbGlzcCBjb21wbGV0aW5nLXJlYWQtZGVmYXVsdD4KICAg ICAgICAgIDE5ICAgOCUgICAgICAgICAgLSB2ZXJ0aWNvLS1leGhpYml0CiAgICAgICAgICAxMiAg IDUlICAgICAgICAgICAtIHZlcnRpY28tLXVwZGF0ZQogICAgICAgICAgMTIgICA1JSAgICAgICAg ICAgIC0gdmVydGljby0tcmVjb21wdXRlCiAgICAgICAgICAxMSAgIDUlICAgICAgICAgICAgIC0g dmVydGljby0tZmlsdGVyLWNvbXBsZXRpb25zCiAgICAgICAgICAxMSAgIDUlICAgICAgICAgICAg ICAtIGNvbXBsZXRpb24tYWxsLWNvbXBsZXRpb25zCiAgICAgICAgICAxMSAgIDUlICAgICAgICAg ICAgICAgLSBjb21wbGV0aW9uLS1udGgtY29tcGxldGlvbgogICAgICAgICAgMTEgICA1JSAgICAg ICAgICAgICAgICAtIHNlcS1zb21lCiAgICAgICAgICAxMSAgIDUlICAgICAgICAgICAgICAgICAt IHNlcS1kbwogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgIC0gbWFwYwogICAgICAg ICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gMjEwPgog ICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9u IDI3OT4KICAgICAgICAgIDExICAgNSUgICAgICAgICAgICAgICAgICAgICAtIG9yZGVybGVzcy1h bGwtY29tcGxldGlvbnMKICAgICAgICAgIDExICAgNSUgICAgICAgICAgICAgICAgICAgICAgLSBv cmRlcmxlc3MtLWZpbHRlcgogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAgICAg LSAjPHN1YnItbmF0aXZlLWVsaXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9h bm9ueW1vdXNfbGFtYmRhXzU2PgogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAg ICAgIC0gY29tcGxldGUtd2l0aC1hY3Rpb24KICAgICAgICAgIDExICAgNSUgICAgICAgICAgICAg ICAgICAgICAgICAgLSBhbGwtY29tcGxldGlvbnMKICAgICAgICAgICA4ICAgMyUgICAgICAgICAg ICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA5Q0I+CiAgICAgICAgICAgNCAg IDElICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDVDMD4K ICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kcAog ICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi10by1s aXN0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIC0gdmVydGljby1zb3J0LWhpc3Rvcnkt bGVuZ3RoLWFscGhhCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtICM8c3Vici1uYXRp dmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1i ZGFfMTQ+CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAjPHByaW1pdGl2ZS1mdW5j dGlvbiBzdHJpbmctbGVzc3A+CiAgICAgICAgICAgNSAgIDIlICAgICAgICAgICAtIHZlcnRpY28t LWFycmFuZ2UtY2FuZGlkYXRlcwogICAgICAgICAgIDQgICAxJSAgICAgICAgICAgIC0gdmVydGlj by0tYWZmaXhhdGUKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgICAgLSByZWFkLWV4dGVuZGVk LWNvbW1hbmQtLWFmZml4YXRpb24KICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgIzxz dWJyLW5hdGl2ZS1lbGlzcCBGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2YzYxNmQ2MjY0NjFfYW5vbnlt b3VzX2xhbWJkYV82MT4KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIHZlcnRpY28tLXdp bmRvdy13aWR0aAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIGdldC1idWZmZXItd2lu ZG93LWxpc3QKICAgICAgICAgICAxICAgMCUgICAgICAgICAgIC0gdmVydGljby0tZGlzcGxheS1j b3VudAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgdmVydGljby0tZm9ybWF0LWNvdW50 CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIHZlcnRpY28tLWRpc3BsYXktY2FuZGlkYXRl cwogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgIC0gdmVydGljby0tcmVzaXplLXdpbmRvdwog ICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIHdpbmRvdy10ZXh0LXBpeGVsLXNpemUKICAg ICAgICAgIDE4ICAgOCUgICAgICAgICAgLSByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24p CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIHJlZGlzcGxheS0tcHJlLXJlZGlzcGxheS1m dW5jdGlvbnMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgLSB0aW1lci1ldmVudC1oYW5kbGVy CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAg ICAgICAgICAgLSBzaG93LXBhcmVuLWZ1bmN0aW9uCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg ICAgIC0gc2hvdy1wYXJlbi0tZGVmYXVsdAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg ICBzaG93LXBhcmVuLS1sb2NhdGUtbmVhci1wYXJlbgogICAgICAgICAgIDEgICAwJSAgLSBmdW5j YWxsLWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgIGV4ZWN1dGUtZXh0ZW5kZWQt Y29tbWFuZAogICAgICAgICAgNTMgIDI0JSAtIHRpbWVyLWV2ZW50LWhhbmRsZXIKICAgICAgICAg IDUzICAyNCUgIC0gYXBwbHkKICAgICAgICAgIDM3ICAxNiUgICAtICM8Y29tcGlsZWQtZnVuY3Rp b24gQTM0PgogICAgICAgICAgMzYgIDE2JSAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1yZWNlaXZl CiAgICAgICAgICAzNiAgMTYlICAgICAtIGpzb25ycGMtLWNvbnRpbnVlCiAgICAgICAgICAzNCAg MTUlICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDFBNj4KICAgICAgICAgIDMxICAxNCUgICAg ICAgLSBlZ2xvdC0taG92ZXItaW5mbwogICAgICAgICAgMzEgIDE0JSAgICAgICAgLSBlZ2xvdC0t Zm9ybWF0LW1hcmt1cAogICAgICAgICAgMjAgICA5JSAgICAgICAgIC0gZ2ZtLXZpZXctbW9kZQog ICAgICAgICAgIDUgICAyJSAgICAgICAgICAtIGJ5dGUtY29kZQogICAgICAgICAgIDQgICAxJSAg ICAgICAgICAgICByZXF1aXJlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGN1c3RvbS1k ZWNsYXJlLXZhcmlhYmxlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSBjdXN0b20taGFu ZGxlLWtleXdvcmQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICBjdXN0b20tYWRkLXRv LWdyb3VwCiAgICAgICAgICAgNCAgIDElICAgICAgICAgIC0gZ2ZtLW1vZGUKICAgICAgICAgICA0 ICAgMSUgICAgICAgICAgIC0gbWFya2Rvd24tbW9kZQogICAgICAgICAgIDQgICAxJSAgICAgICAg ICAgIC0gc3ludGF4LXByb3BlcnRpemUKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgLSBt YXJrZG93bi1zeW50YXgtcHJvcGVydGl6ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg LSBtYXJrZG93bi1zeW50YXgtcHJvcGVydGl6ZS1saXN0LWl0ZW1zCiAgICAgICAgICAgMSAgIDAl ICAgICAgICAgICAgICAgLSBtYXJrZG93bi0tY3VyLWxpc3QtaXRlbS1ib3VuZHMKICAgICAgICAg ICAxICAgMCUgICAgICAgICAgICAgICAgICBtYXJrZG93bi1jdXItbGlzdC1pdGVtLWVuZAogICAg ICAgICAgIDEgICAwJSAgICAgICAgICAgICAgLSBtYXJrZG93bi1zeW50YXgtcHJvcGVydGl6ZS1w cmUtYmxvY2tzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgLSBtYXJrZG93bi1jYWxj dWxhdGUtbGlzdC1sZXZlbHMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICBtYXJr ZG93bi1zZWFyY2gtYmFja3dhcmQtYmFzZWxpbmUKICAgICAgICAgICAyICAgMCUgICAgICAgICAg ICAgICAjPGNvbXBpbGVkLWZ1bmN0aW9uIEJBMj4KICAgICAgICAgICAzICAgMSUgICAgICAgICAg ICByZXF1aXJlCiAgICAgICAgICAgMyAgIDElICAgICAgICAgIC0gcmVhZC1vbmx5LW1vZGUKICAg ICAgICAgICAzICAgMSUgICAgICAgICAgICAgdmlldy1tb2RlLWVudGVyCiAgICAgICAgICAgMSAg IDAlICAgICAgICAgIC0gY3VzdG9tLWRlY2xhcmUtZmFjZQogICAgICAgICAgIDEgICAwJSAgICAg ICAgICAgLSBmYWNlLXNwZWMtc2V0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSBtYWtl LWVtcHR5LWZhY2UKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgLSBtYWtlLWZhY2UKICAg ICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0gbWFrZS1mYWNlLXgtcmVzb3VyY2UtaW50ZXJu YWwKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAtIHNldC1mYWNlLWF0dHJpYnV0ZXMt ZnJvbS1yZXNvdXJjZXMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgLSBzZXQtZmFj ZS1hdHRyaWJ1dGUtZnJvbS1yZXNvdXJjZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg ICAgICBpbnRlcm5hbC1mYWNlLXgtZ2V0LXJlc291cmNlCiAgICAgICAgICAgNiAgIDIlICAgICAg ICAgLSBmb250LWxvY2stZW5zdXJlCiAgICAgICAgICAgNiAgIDIlICAgICAgICAgIC0gIzxjb21w aWxlZC1mdW5jdGlvbiBDNUU+CiAgICAgICAgICAgNiAgIDIlICAgICAgICAgICAtIGZvbnQtbG9j ay1mb250aWZ5LXJlZ2lvbgogICAgICAgICAgIDYgICAyJSAgICAgICAgICAgIC0gZm9udC1sb2Nr LWRlZmF1bHQtZm9udGlmeS1yZWdpb24KICAgICAgICAgICA1ICAgMiUgICAgICAgICAgICAgLSBm b250LWxvY2stZm9udGlmeS1rZXl3b3Jkcy1yZWdpb24KICAgICAgICAgICAxICAgMCUgICAgICAg ICAgICAgIC0gbWFya2Rvd24tbWF0Y2gtY29kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAg ICAgIC0gbWFya2Rvd24tc2VhcmNoLXVudGlsLWNvbmRpdGlvbgogICAgICAgICAgIDEgICAwJSAg ICAgICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gRUNBPgogICAgICAgICAgIDEgICAw JSAgICAgICAgICAgICAgICAgLSBtYXJrZG93bi1jb2RlLWJsb2NrLWF0LXBvcwogICAgICAgICAg IDEgICAwJSAgICAgICAgICAgICAgICAgICAgbWFya2Rvd24tZ2V0LWVuY2xvc2luZy1mZW5jZWQt YmxvY2stY29uc3RydWN0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIG1hcmtkb3du LWZvbnRpZnktcGxhaW4tdXJpcwogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIC0gbWFy a2Rvd24tbWF0Y2gtcGxhaW4tdXJpcwogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAt IG1hcmtkb3duLW1hdGNoLWlubGluZS1nZW5lcmljCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg ICAgICAgICAgIG1hcmtkb3duLW1hdGNoLWlubGluZS1nZW5lcmljCiAgICAgICAgICAgMSAgIDAl ICAgICAgICAgICAgICAtIG1hcmtkb3duLWZvbnRpZnktaW5saW5lLWxpbmtzCiAgICAgICAgICAg MSAgIDAlICAgICAgICAgICAgICAgLSBtYXJrZG93bi1tYXRjaC1nZW5lcmljLWxpbmtzCiAgICAg ICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgbWFya2Rvd24tZW5kLW9mLXRleHQtYmxvY2sK ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0gbWFya2Rvd24tbWF0Y2gtYm9sZAogICAg ICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgbWFya2Rvd24tbWF0Y2gtaW5saW5lLWdlbmVy aWMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgLSBmb250LWxvY2stZm9udGlmeS1zeW50 YWN0aWNhbGx5LXJlZ2lvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgLSB0cmVlc2l0 LWZvbnQtbG9jay1mb250aWZ5LXJlZ2lvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg ICAgdHJlZXNpdC0tZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uLTEKICAgICAgICAgICAyICAgMCUg ICAgICAgICAtIGphdmEtdHMtbW9kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAtIHByb2ct bW9kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgLSBtYWdpdC1hdXRvLXJldmVydC1tb2Rl LWNtaGgKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIGFkZC1ob29rCiAgICAgICAgICAg MSAgIDAlICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDg2Nz4KICAgICAgICAgICAxICAg MCUgICAgICAgICAgICBraWxsLWJ1ZmZlcgogICAgICAgICAgIDEgICAwJSAgICAgICAgIC0gc3Ry aW5nLXRyaW0KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICBzdHJpbmctdHJpbS1yaWdodAog ICAgICAgICAgIDMgICAxJSAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gMTUwPgogICAgICAg ICAgIDMgICAxJSAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEIwQz4KICAgICAgICAgICAz ICAgMSUgICAgICAgICAtIHJ1bi1ob29rLXdpdGgtYXJncwogICAgICAgICAgIDIgICAwJSAgICAg ICAgICAtIGVsZG9jLWRpc3BsYXktaW4tZWNoby1hcmVhCiAgICAgICAgICAgMiAgIDAlICAgICAg ICAgICAtIGVsZG9jLS1tZXNzYWdlCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgLSBlbGRv Yy1taW5pYnVmZmVyLW1lc3NhZ2UKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgLSBhcHBs eQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgLSBtZXNzYWdlCiAgICAgICAgICAgMiAg IDAlICAgICAgICAgICAgICAgICByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAg ICAgICAgMSAgIDAlICAgICAgICAgIC0gZWxkb2MtZGlzcGxheS1pbi1idWZmZXIKICAgICAgICAg ICAxICAgMCUgICAgICAgICAgIC0gZWxkb2MtLWZvcm1hdC1kb2MtYnVmZmVyCiAgICAgICAgICAg MSAgIDAlICAgICAgICAgICAgLSBzcGVjaWFsLW1vZGUKICAgICAgICAgICAxICAgMCUgICAgICAg ICAgICAgLSBnbG9iYWwtcHJldHRpZnktc3ltYm9scy1tb2RlLWNtaGgKICAgICAgICAgICAxICAg MCUgICAgICAgICAgICAgICAgYWRkLWhvb2sKICAgICAgICAgICAyICAgMCUgICAgICAtICM8Y29t cGlsZWQtZnVuY3Rpb24gNzUyPgogICAgICAgICAgIDEgICAwJSAgICAgICAgIG1hcGMKICAgICAg ICAgICAxICAgMCUgICAgICAgLSBtYXBjYXIKICAgICAgICAgICAxICAgMCUgICAgICAgIC0gIzxj b21waWxlZC1mdW5jdGlvbiA1MDU+CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgLSBlZ2xvdC1y YW5nZS1yZWdpb24KICAgICAgICAgICAxICAgMCUgICAgICAgICAgLSBlZ2xvdC0tbHNwLXBvc2l0 aW9uLXRvLXBvaW50CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIGVnbG90LW1vdmUtdG8t dXRmLTE2LWxpbmVwb3MKICAgICAgICAgICAxICAgMCUgICAgICBnZW5lcmF0ZS1uZXctYnVmZmVy CiAgICAgICAgICAxNiAgIDclICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEYxRD4KICAgICAgICAg IDE2ICAgNyUgICAgLSBlbGRvYy1wcmludC1jdXJyZW50LXN5bWJvbC1pbmZvCiAgICAgICAgICAx NiAgIDclICAgICAtIGVsZG9jLS1pbnZva2Utc3RyYXRlZ3kKICAgICAgICAgIDE2ICAgNyUgICAg ICAtIGVsZG9jLWRvY3VtZW50YXRpb24tY29tcG9zZQogICAgICAgICAgMTMgICA1JSAgICAgICAt IGVnbG90LWhvdmVyLWVsZG9jLWZ1bmN0aW9uCiAgICAgICAgICAgNSAgIDIlICAgICAgICAtIGVn bG90LS1oaWdobGlnaHQtcGlnZ3liYWNrCiAgICAgICAgICAgNCAgIDElICAgICAgICAgLSBqc29u cnBjLWFzeW5jLXJlcXVlc3QKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgLSBqc29ucnBjLS1h c3luYy1yZXF1ZXN0LTEKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgIC0ganNvbnJwYy1jb25u ZWN0aW9uLXNlbmQKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgICAtIGFwcGx5CiAgICAgICAg ICAgNCAgIDElICAgICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA4MzU+CiAgICAgICAg ICAgMiAgIDAlICAgICAgICAgICAgICAtIGpzb25ycGMtLWV2ZW50CiAgICAgICAgICAgMiAgIDAl ICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDFFMz4KICAgICAgICAgICAyICAg MCUgICAgICAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAg ICAgICBqc29ucnBjLS1sb2ctZXZlbnQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAg cHJvY2Vzcy1zZW5kLXN0cmluZwogICAgICAgICAgIDEgICAwJSAgICAgICAgIC0gZWdsb3QtLVRl eHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gZWds b3QtLVRleHREb2N1bWVudElkZW50aWZpZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg ZWdsb3QtcGF0aC10by11cmkKICAgICAgICAgICA0ICAgMSUgICAgICAgIC0ganNvbnJwYy1hc3lu Yy1yZXF1ZXN0CiAgICAgICAgICAgNCAgIDElICAgICAgICAgLSBqc29ucnBjLS1hc3luYy1yZXF1 ZXN0LTEKICAgICAgICAgICAyICAgMCUgICAgICAgICAgLSBqc29ucnBjLWNvbm5lY3Rpb24tc2Vu ZAogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDIgICAwJSAg ICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA4MzU+CiAgICAgICAgICAgMiAgIDAlICAg ICAgICAgICAgIC0ganNvbnJwYy0tZXZlbnQKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAg IC0gIzxjb21waWxlZC1mdW5jdGlvbiAyQTA+CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAg ICAgLSBhcHBseQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgIGpzb25ycGMtLWxv Zy1ldmVudAogICAgICAgICAgIDQgICAxJSAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50UG9z aXRpb25QYXJhbXMKICAgICAgICAgICA0ICAgMSUgICAgICAgICAtIGVnbG90LS1UZXh0RG9jdW1l bnRJZGVudGlmaWVyCiAgICAgICAgICAgNCAgIDElICAgICAgICAgIC0gZWdsb3QtcGF0aC10by11 cmkKICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgdXJsLWdlbmVyaWMtcGFyc2UtdXJsCiAg ICAgICAgICAgMyAgIDElICAgICAgIC0gZWdsb3Qtc2lnbmF0dXJlLWVsZG9jLWZ1bmN0aW9uCiAg ICAgICAgICAgMiAgIDAlICAgICAgICAtIGpzb25ycGMtYXN5bmMtcmVxdWVzdAogICAgICAgICAg IDIgICAwJSAgICAgICAgIC0ganNvbnJwYy0tYXN5bmMtcmVxdWVzdC0xCiAgICAgICAgICAgMSAg IDAlICAgICAgICAgIC0ganNvbnJwYy1jb25uZWN0aW9uLXNlbmQKICAgICAgICAgICAxICAgMCUg ICAgICAgICAgIC0gYXBwbHkKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtICM8Y29tcGls ZWQtZnVuY3Rpb24gODM1PgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAtIGpzb25ycGMt LWpzb24tZW5jb2RlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIGpzb24tc2VyaWFs aXplCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiBGRTg+ CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIHJ1bi13aXRoLXRpbWVyCiAgICAgICAgICAg MSAgIDAlICAgICAgICAgICAgLSBydW4tYXQtdGltZQogICAgICAgICAgIDEgICAwJSAgICAgICAg ICAgICAtIHRpbWVyLWFjdGl2YXRlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIHRp bWVyLS1hY3RpdmF0ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3Vt ZW50UG9zaXRpb25QYXJhbXMKICAgICAgICAgICAxICAgMCUgICAgICAgICAtIGVnbG90LS1UZXh0 RG9jdW1lbnRJZGVudGlmaWVyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgZWdsb3QtcGF0 aC10by11cmkKICAgICAgICAgICA2ICAgMiUgLSBlbGRvYy1wcmUtY29tbWFuZC1yZWZyZXNoLWVj aG8tYXJlYQogICAgICAgICAgIDYgICAyJSAgLSBlbGRvYy0tbWVzc2FnZQogICAgICAgICAgIDYg ICAyJSAgIC0gZWxkb2MtbWluaWJ1ZmZlci1tZXNzYWdlCiAgICAgICAgICAgNiAgIDIlICAgIC0g YXBwbHkKICAgICAgICAgICA2ICAgMiUgICAgICAgbWVzc2FnZQogICAgICAgICAgIDEgICAwJSAg IGNvcmZ1LS1hdXRvLXBvc3QtY29tbWFuZAogICAgICAgICAgIDAgICAwJSAgIC4uLgo= --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=emacs-Q-30-after-everything Content-Transfer-Encoding: base64 ICAgICAgICAgMTIyICAzOSUgLSByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAg ICAgICAgMSAgIDAlICAgIGZpbGUtcmVtb3RlLXAKICAgICAgICAgIDk3ICAzMSUgLSBjb21tYW5k LWV4ZWN1dGUKICAgICAgICAgIDk2ICAzMCUgIC0gYnl0ZS1jb2RlCiAgICAgICAgICA5NiAgMzAl ICAgLSByZWFkLWV4dGVuZGVkLWNvbW1hbmQKICAgICAgICAgIDk2ICAzMCUgICAgLSByZWFkLWV4 dGVuZGVkLWNvbW1hbmQtMQogICAgICAgICAgOTYgIDMwJSAgICAgLSBjb21wbGV0aW5nLXJlYWQt ZGVmYXVsdAogICAgICAgICAgNDYgIDE0JSAgICAgICAgcmVkaXNwbGF5X2ludGVybmFsIChDIGZ1 bmN0aW9uKQogICAgICAgICAgMTYgICA1JSAgICAgIC0gY29tbWFuZC1leGVjdXRlCiAgICAgICAg ICAxNiAgIDUlICAgICAgIC0gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5CiAgICAgICAgICAxNiAgIDUl ICAgICAgICAtIG1pbmlidWZmZXItY29tcGxldGUKICAgICAgICAgIDE1ICAgNCUgICAgICAgICAt IGNvbXBsZXRpb24taW4tcmVnaW9uCiAgICAgICAgICAxNSAgIDQlICAgICAgICAgIC0gY29tcGxl dGlvbi0taW4tcmVnaW9uCiAgICAgICAgICAxNSAgIDQlICAgICAgICAgICAtICM8Y29tcGlsZWQt ZnVuY3Rpb24gRTMxPgogICAgICAgICAgMTUgICA0JSAgICAgICAgICAgIC0gYXBwbHkKICAgICAg ICAgIDE1ICAgNCUgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDk4Mj4KICAgICAg ICAgIDE1ICAgNCUgICAgICAgICAgICAgIC0gY29tcGxldGlvbi0taW4tcmVnaW9uLTEKICAgICAg ICAgIDE1ICAgNCUgICAgICAgICAgICAgICAtIGNvbXBsZXRpb24tLWRvLWNvbXBsZXRpb24KICAg ICAgICAgIDEwICAgMyUgICAgICAgICAgICAgICAgLSBjb21wbGV0aW9uLXRyeS1jb21wbGV0aW9u CiAgICAgICAgICAxMCAgIDMlICAgICAgICAgICAgICAgICAtIGNvbXBsZXRpb24tLW50aC1jb21w bGV0aW9uCiAgICAgICAgICAxMCAgIDMlICAgICAgICAgICAgICAgICAgLSBzZXEtc29tZQogICAg ICAgICAgMTAgICAzJSAgICAgICAgICAgICAgICAgICAtIHNlcS1kbwogICAgICAgICAgMTAgICAz JSAgICAgICAgICAgICAgICAgICAgLSBtYXBjCiAgICAgICAgICAxMCAgIDMlICAgICAgICAgICAg ICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDM3Mz4KICAgICAgICAgIDEwICAgMyUgICAg ICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDFCOT4KICAgICAgICAgIDEw ICAgMyUgICAgICAgICAgICAgICAgICAgICAgIC0gY29tcGxldGlvbi1iYXNpYy10cnktY29tcGxl dGlvbgogICAgICAgICAgMTAgICAzJSAgICAgICAgICAgICAgICAgICAgICAgIC0gIzxzdWJyLW5h dGl2ZS1lbGlzcCBGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xh bWJkYV81Nj4KICAgICAgICAgIDEwICAgMyUgICAgICAgICAgICAgICAgICAgICAgICAgLSBjb21w bGV0ZS13aXRoLWFjdGlvbgogICAgICAgICAgMTAgICAzJSAgICAgICAgICAgICAgICAgICAgICAg ICAgLSB0cnktY29tcGxldGlvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIzxjb21waWxlZC1mdW5jdGlvbiAzMTc+CiAgICAgICAgICAgNCAgIDElICAgICAg ICAgICAgICAgIC0gbWluaWJ1ZmZlci1jb21wbGV0aW9uLWhlbHAKICAgICAgICAgICAyICAgMCUg ICAgICAgICAgICAgICAgIC0gY29tcGxldGlvbi1hbGwtY29tcGxldGlvbnMKICAgICAgICAgICAy ICAgMCUgICAgICAgICAgICAgICAgICAtIGNvbXBsZXRpb24tLW50aC1jb21wbGV0aW9uCiAgICAg ICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgIC0gc2VxLXNvbWUKICAgICAgICAgICAyICAg MCUgICAgICAgICAgICAgICAgICAgIC0gc2VxLWRvCiAgICAgICAgICAgMiAgIDAlICAgICAgICAg ICAgICAgICAgICAgLSBtYXBjCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgICAg IC0gIzxjb21waWxlZC1mdW5jdGlvbiA3RkQ+CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAg ICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNzlFPgogICAgICAgICAgIDIgICAwJSAg ICAgICAgICAgICAgICAgICAgICAgIC0gY29tcGxldGlvbi1iYXNpYy1hbGwtY29tcGxldGlvbnMK ICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAgLSBjb21wbGV0aW9uLXBj bS0tYWxsLWNvbXBsZXRpb25zCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgICAg ICAgICAtICM8c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2 NDYxX2Fub255bW91c19sYW1iZGFfNTY+CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAg ICAgICAgICAgICAgLSBjb21wbGV0ZS13aXRoLWFjdGlvbgogICAgICAgICAgIDIgICAwJSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbC1jb21wbGV0aW9ucwogICAgICAgICAgIDIgICAw JSAgICAgICAgICAgICAgICAgLSB0ZW1wLWJ1ZmZlci13aW5kb3ctc2hvdwogICAgICAgICAgIDIg ICAwJSAgICAgICAgICAgICAgICAgIC0gZGlzcGxheS1idWZmZXIKICAgICAgICAgICAyICAgMCUg ICAgICAgICAgICAgICAgICAgLSBkaXNwbGF5LWJ1ZmZlci1hdC1ib3R0b20KICAgICAgICAgICAx ICAgMCUgICAgICAgICAgICAgICAgICAgIC0gd2Fsay13aW5kb3ctdHJlZQogICAgICAgICAgIDEg ICAwJSAgICAgICAgICAgICAgICAgICAgIC0gd2Fsay13aW5kb3ctdHJlZS0xCiAgICAgICAgICAg MSAgIDAlICAgICAgICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiAzNjU+CiAg ICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy1pbi1kaXJlY3Rp b24KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgIC0gd2luZG93LS1kaXNwbGF5 LWJ1ZmZlcgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgIC0gIzxjb21waWxl ZC1mdW5jdGlvbiAzOEI+CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgIC0g cmVhZC1leHRlbmRlZC1jb21tYW5kLS1hZmZpeGF0aW9uCiAgICAgICAgICAgMSAgIDAlICAgICAg ICAgICAgICAgICAgICAgICAgICM8c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3 MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfNjE+CiAgICAgICAgICAgMSAgIDAlICAg ICAgICAgICAgICAgIC0gbWluaWJ1ZmZlci1oaWRlLWNvbXBsZXRpb25zCiAgICAgICAgICAgMSAg IDAlICAgICAgICAgICAgICAgICAtIGJ1cnktYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAg ICAgICAgICAgICAgLSB3aW5kb3ctLWRlbGV0ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAg ICAgICAgICAtIGRlbGV0ZS13aW5kb3cKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAg ICAgIC0gd2luZG93LXNpemFibGUtcAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAg ICAgIC0gd2luZG93LXNpemFibGUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAg ICAgLSB3aW5kb3ctc2l6ZS1maXhlZC1wCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAg ICAgICAgICAgIHdpbmRvdy0tc2l6ZS1maXhlZC0xCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg ICBtaW5pYnVmZmVyLS1jb21wbGV0aW9uLXByb21wdC1lbmQKICAgICAgICAgICAxICAgMCUgICAg ICAtIHRpbWVyLWV2ZW50LWhhbmRsZXIKICAgICAgICAgICAxICAgMCUgICAgICAgLSBhcHBseQog ICAgICAgICAgIDEgICAwJSAgICAgICAgLSBzaG93LXBhcmVuLWZ1bmN0aW9uCiAgICAgICAgICAg MSAgIDAlICAgICAgICAgLSBzaG93LXBhcmVuLS1kZWZhdWx0CiAgICAgICAgICAgMSAgIDAlICAg ICAgICAgIC0gc2hvdy1wYXJlbi0tbG9jYXRlLW5lYXItcGFyZW4KICAgICAgICAgICAxICAgMCUg ICAgICAgICAgICAgYmFjay10by1pbmRlbnRhdGlvbgogICAgICAgICAgIDEgICAwJSAgLSBmdW5j YWxsLWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgIGV4ZWN1dGUtZXh0ZW5kZWQt Y29tbWFuZAogICAgICAgICAgNDMgIDEzJSAtIHRpbWVyLWV2ZW50LWhhbmRsZXIKICAgICAgICAg IDQzICAxMyUgIC0gYXBwbHkKICAgICAgICAgIDIxICAgNiUgICAtICM8Y29tcGlsZWQtZnVuY3Rp b24gRTc4PgogICAgICAgICAgMjEgICA2JSAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1yZWNlaXZl CiAgICAgICAgICAxOSAgIDYlICAgICAtIGpzb25ycGMtLWNvbnRpbnVlCiAgICAgICAgICAxNyAg IDUlICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEEzNz4KICAgICAgICAgIDEwICAgMyUgICAg ICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ1Nj4KICAgICAgICAgIDEwICAgMyUgICAgICAgIC0g Izxjb21waWxlZC1mdW5jdGlvbiBEOTI+CiAgICAgICAgICAxMCAgIDMlICAgICAgICAgLSBydW4t aG9vay13aXRoLWFyZ3MKICAgICAgICAgICA5ICAgMiUgICAgICAgICAgLSBlbGRvYy1kaXNwbGF5 LWluLWVjaG8tYXJlYQogICAgICAgICAgIDkgICAyJSAgICAgICAgICAgLSBlbGRvYy0tbWVzc2Fn ZQogICAgICAgICAgIDkgICAyJSAgICAgICAgICAgIC0gZWxkb2MtbWluaWJ1ZmZlci1tZXNzYWdl CiAgICAgICAgICAgOSAgIDIlICAgICAgICAgICAgIC0gYXBwbHkKICAgICAgICAgICA5ICAgMiUg ICAgICAgICAgICAgIC0gbWVzc2FnZQogICAgICAgICAgIDcgICAyJSAgICAgICAgICAgICAgICAg cmVkaXNwbGF5X2ludGVybmFsIChDIGZ1bmN0aW9uKQogICAgICAgICAgIDEgICAwJSAgICAgICAg ICAtIGVsZG9jLWRpc3BsYXktaW4tYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAt IGVsZG9jLS1mb3JtYXQtZG9jLWJ1ZmZlcgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgIC0g c3BlY2lhbC1tb2RlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgYy1sZWF2ZS1jYy1t b2RlLW1vZGUKICAgICAgICAgICA3ICAgMiUgICAgICAgLSBlZ2xvdC0taG92ZXItaW5mbwogICAg ICAgICAgIDcgICAyJSAgICAgICAgLSBlZ2xvdC0tZm9ybWF0LW1hcmt1cAogICAgICAgICAgIDUg ICAxJSAgICAgICAgIC0gZm9udC1sb2NrLWVuc3VyZQogICAgICAgICAgIDUgICAxJSAgICAgICAg ICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gQzVFPgogICAgICAgICAgIDUgICAxJSAgICAgICAgICAg LSBmb250LWxvY2stZm9udGlmeS1yZWdpb24KICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAt IGMtZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uCiAgICAgICAgICAgNSAgIDElICAgICAgICAgICAg IC0gZm9udC1sb2NrLWRlZmF1bHQtZm9udGlmeS1yZWdpb24KICAgICAgICAgICA0ICAgMSUgICAg ICAgICAgICAgIC0gZm9udC1sb2NrLWZvbnRpZnkta2V5d29yZHMtcmVnaW9uCiAgICAgICAgICAg MyAgIDAlICAgICAgICAgICAgICAgLSBjLWZvbnQtbG9jay1kZWNsYXJhdGlvbnMKICAgICAgICAg ICAzICAgMCUgICAgICAgICAgICAgICAgLSBjLWZpbmQtZGVjbC1zcG90cwogICAgICAgICAgIDMg ICAwJSAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEYxQj4KICAgICAgICAg ICAzICAgMCUgICAgICAgICAgICAgICAgICAtIGMtZm9yd2FyZC1kZWNsLW9yLWNhc3QtMQogICAg ICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgICAtIGMtZm9yd2FyZC10eXBlCiAgICAgICAg ICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAtIGMtY2hlY2stcXVhbGlmaWVkLXR5cGUKICAg ICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAtIGMtZm9yd2FyZC1vdmVyLWNvbXBv dW5kLWlkZW50aWZpZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgICBj LWZvcndhcmQtc3dzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAtIGMtZm9y d2FyZC1uYW1lCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgLSBjLWZvcndh cmQtPD4tYXJnbGlzdAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAtIGMt Zm9yd2FyZC08Pi1hcmdsaXN0LXJlY3VyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAg ICAgICAgICAtIGMtZm9yd2FyZC1zd3MKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAg ICAgICAgICAgIGxvb2tpbmctYXQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAg ICBsb29raW5nLWF0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgLSBjLWZvbnQtbG9j ay1lbmNsb3NpbmctZGVjbHMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgLSBjLXBh cnNlLXN0YXRlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgIGMtYmVnaW5uaW5n LW9mLW1hY3JvCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIGZvbnQtbG9jay1mb250 aWZ5LXN5bnRhY3RpY2FsbHktcmVnaW9uCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAg LSBmb250LWxvY2stZGVmYXVsdC1mb250aWZ5LXN5bnRhY3RpY2FsbHkKICAgICAgICAgICAxICAg MCUgICAgICAgICAgICAgICAgLSBjb21tZW50LW5vcm1hbGl6ZS12YXJzCiAgICAgICAgICAgMSAg IDAlICAgICAgICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gQTg3PgogICAgICAgICAg IDEgICAwJSAgICAgICAgICAgICAgICAgIC0ga2lsbC1idWZmZXIKICAgICAgICAgICAxICAgMCUg ICAgICAgICAgICAgICAgICAgICByZXBsYWNlLWJ1ZmZlci1pbi13aW5kb3dzCiAgICAgICAgICAg MiAgIDAlICAgICAgICAgLSBqYXZhLW1vZGUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICBj LWluaXQtbGFuZ3VhZ2UtdmFycy1mb3IKICAgICAgICAgICAxICAgMCUgICAgICAgICAgLSBjLWNv bW1vbi1pbml0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtICM8c3Vici1uYXRpdmUtZWxp c3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfMzU+ CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSBjLXVubWFyay08Pi1hcm91bmQtcmVnaW9u CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIzxjb21waWxlZC1mdW5jdGlvbiBENkU+ CiAgICAgICAgICAgMiAgIDAlICAgICAgICAjPGNvbXBpbGVkLWZ1bmN0aW9uIDNDNj4KICAgICAg ICAgICAxICAgMCUgICAgIC0ganNvbnJwYy0tcmVtb3ZlCiAgICAgICAgICAgMSAgIDAlICAgICAg ICBzbG90LXZhbHVlCiAgICAgICAgICAgMSAgIDAlICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAg IDAlICAgICAgLSBqc29ucnBjLS1ldmVudAogICAgICAgICAgIDEgICAwJSAgICAgICAtICM8Y29t cGlsZWQtZnVuY3Rpb24gMEEzPgogICAgICAgICAgIDEgICAwJSAgICAgICAgLSBhcHBseQogICAg ICAgICAgIDEgICAwJSAgICAgICAgICAganNvbnJwYy0tbG9nLWV2ZW50CiAgICAgICAgICAxMiAg IDMlICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDRCQj4KICAgICAgICAgIDEyICAgMyUgICAgLSBl bGRvYy1wcmludC1jdXJyZW50LXN5bWJvbC1pbmZvCiAgICAgICAgICAxMiAgIDMlICAgICAtIGVs ZG9jLS1pbnZva2Utc3RyYXRlZ3kKICAgICAgICAgIDEyICAgMyUgICAgICAtIGVsZG9jLWRvY3Vt ZW50YXRpb24tY29tcG9zZQogICAgICAgICAgMTIgICAzJSAgICAgICAtIGVnbG90LWhvdmVyLWVs ZG9jLWZ1bmN0aW9uCiAgICAgICAgICAgNiAgIDElICAgICAgICAtIGVnbG90LS1UZXh0RG9jdW1l bnRQb3NpdGlvblBhcmFtcwogICAgICAgICAgIDUgICAxJSAgICAgICAgIC0gZWdsb3QtLVRleHRE b2N1bWVudElkZW50aWZpZXIKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgLSBlZ2xvdC1wYXRo LXRvLXVyaQogICAgICAgICAgIDMgICAwJSAgICAgICAgICAgICB1cmwtZ2VuZXJpYy1wYXJzZS11 cmwKICAgICAgICAgICAxICAgMCUgICAgICAgICAtIGVnbG90LS1wb3MtdG8tbHNwLXBvc2l0aW9u CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gZWdsb3QtdXRmLTE2LWxpbmVwb3MKICAgICAg ICAgICAxICAgMCUgICAgICAgICAgICAgZWdsb3QtLWJvbAogICAgICAgICAgIDQgICAxJSAgICAg ICAgLSBlZ2xvdC0taGlnaGxpZ2h0LXBpZ2d5YmFjawogICAgICAgICAgIDIgICAwJSAgICAgICAg IC0gZWdsb3QtLVRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAgICAgMiAgIDAlICAg ICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudElkZW50aWZpZXIKICAgICAgICAgICAyICAgMCUg ICAgICAgICAgIC0gZWdsb3QtcGF0aC10by11cmkKICAgICAgICAgICAyICAgMCUgICAgICAgICAg ICAtIHVybC1nZW5lcmljLXBhcnNlLXVybAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAt ICM8Y29tcGlsZWQtZnVuY3Rpb24gRDQ2PgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg ICBraWxsLWJ1ZmZlcgogICAgICAgICAgIDIgICAwJSAgICAgICAgIC0ganNvbnJwYy1hc3luYy1y ZXF1ZXN0CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgIC0ganNvbnJwYy0tYXN5bmMtcmVxdWVz dC0xCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1zZW5k CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDEgICAwJSAg ICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNTEwPgogICAgICAgICAgIDEgICAwJSAg ICAgICAgICAgICAgICBqc29ucnBjLS1ldmVudAogICAgICAgICAgIDIgICAwJSAgICAgICAgLSBq c29ucnBjLWFzeW5jLXJlcXVlc3QKICAgICAgICAgICAyICAgMCUgICAgICAgICAtIGpzb25ycGMt LWFzeW5jLXJlcXVlc3QtMQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAtIGpzb25ycGMtY29u bmVjdGlvbi1zZW5kCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAtIGFwcGx5CiAgICAgICAg ICAgMiAgIDAlICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDUxMD4KICAgICAgICAg ICAxICAgMCUgICAgICAgICAgICAgLSBqc29ucnBjLS1ldmVudAogICAgICAgICAgIDEgICAwJSAg ICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDgyQT4KICAgICAgICAgICAxICAgMCUg ICAgICAgICAgICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAg anNvbnJwYy0tbG9nLWV2ZW50CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIC0ganNvbnJw Yy0tanNvbi1lbmNvZGUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAganNvbi1zZXJp YWxpemUKICAgICAgICAgICA2ICAgMSUgICAtICM8c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZl Nzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfOT4KICAgICAgICAgICA2 ICAgMSUgICAgICBqaXQtbG9jay1jb250ZXh0LWZvbnRpZnkKICAgICAgICAgICAzICAgMCUgICAt IHNob3ctcGFyZW4tZnVuY3Rpb24KICAgICAgICAgICAzICAgMCUgICAgLSBzaG93LXBhcmVuLS1k ZWZhdWx0CiAgICAgICAgICAgMiAgIDAlICAgICAtIHN5bnRheC1wcHNzCiAgICAgICAgICAgMSAg IDAlICAgICAgICBwYXJzZS1wYXJ0aWFsLXNleHAKICAgICAgICAgICAxICAgMCUgICAgICAgIHN5 bnRheC1wcm9wZXJ0aXplCiAgICAgICAgICAgMSAgIDAlICAgICAgIHNob3ctcGFyZW4tLWxvY2F0 ZS1uZWFyLXBhcmVuCiAgICAgICAgICAgMSAgIDAlICAgLSBibGluay1jdXJzb3Itc3RhcnQKICAg ICAgICAgICAxICAgMCUgICAgICBibGluay1jdXJzb3ItLXN0YXJ0LXRpbWVyCiAgICAgICAgICA0 MCAgMTIlICAgQXV0b21hdGljIEdDCiAgICAgICAgICAgNCAgIDElIC0gZWxkb2MtcHJlLWNvbW1h bmQtcmVmcmVzaC1lY2hvLWFyZWEKICAgICAgICAgICA0ICAgMSUgIC0gZWxkb2MtLW1lc3NhZ2UK ICAgICAgICAgICA0ICAgMSUgICAtIGVsZG9jLW1pbmlidWZmZXItbWVzc2FnZQogICAgICAgICAg IDQgICAxJSAgICAtIGFwcGx5CiAgICAgICAgICAgNCAgIDElICAgICAgIG1lc3NhZ2UKICAgICAg ICAgICAyICAgMCUgLSBqc29ucnBjLS1wcm9jZXNzLWZpbHRlcgogICAgICAgICAgIDEgICAwJSAg ICBzZWFyY2gtZm9yd2FyZC1yZWdleHAKICAgICAgICAgICAxICAgMCUgIC0gIzxjb21waWxlZC1m dW5jdGlvbiA3OUE+CiAgICAgICAgICAgMSAgIDAlICAgICB0aW1lci1zZXQtdGltZQogICAgICAg ICAgIDEgICAwJSAtIGppdC1sb2NrLS1hbnRpYmxpbmstcG9zdC1jb21tYW5kCiAgICAgICAgICAg MSAgIDAlICAgIHN5bnRheC0tbGJwCiAgICAgICAgICAgMSAgIDAlIC0gdW5kby1hdXRvLS1hZGQt Ym91bmRhcnkKICAgICAgICAgICAxICAgMCUgIC0gdW5kby1hdXRvLS1ib3VuZGFyaWVzCiAgICAg ICAgICAgMSAgIDAlICAgICBhZGQtdG8tbGlzdAogICAgICAgICAgIDAgICAwJSAgIC4uLgo= --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Move-file-truename-to-the-C-level.patch From 183e636eebd9f1653d0cfdacdeba77d2043954af Mon Sep 17 00:00:00 2001 From: Theodor Thornhill <theo@HIDDEN> Date: Wed, 27 Mar 2024 19:42:56 +0100 Subject: [PATCH] Move file-truename to the C level --- lisp/files.el | 116 +++++--------------------------------------------- src/fileio.c | 27 ++++++++++++ 2 files changed, 38 insertions(+), 105 deletions(-) diff --git a/lisp/files.el b/lisp/files.el index 766ed573392..6b9846c2ef4 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -32,6 +32,8 @@ (require 'pcase) (require 'easy-mmode)) ; For `define-minor-mode'. +(declare-function file-truename "fileio.c") + (defvar font-lock-keywords) (defgroup backup nil @@ -1413,111 +1415,15 @@ files--splice-dirname-file unquoted (let (file-name-handler-alist) (file-name-quote unquoted))))) -(defun file-truename (filename &optional counter prev-dirs) - "Return the truename of FILENAME. -If FILENAME is not absolute, first expands it against `default-directory'. -The truename of a file name is found by chasing symbolic links -both at the level of the file and at the level of the directories -containing it, until no links are left at any level. - -\(fn FILENAME)" ;; Don't document the optional arguments. - ;; COUNTER and PREV-DIRS are used only in recursive calls. - ;; COUNTER can be a cons cell whose car is the count of how many - ;; more links to chase before getting an error. - ;; PREV-DIRS can be a cons cell whose car is an alist - ;; of truenames we've just recently computed. - (cond ((or (string= filename "") (string= filename "~")) - (setq filename (expand-file-name filename)) - (if (string= filename "") - (setq filename "/"))) - ((and (string= (substring filename 0 1) "~") - (string-match "~[^/]*/?" filename)) - (let ((first-part - (substring filename 0 (match-end 0))) - (rest (substring filename (match-end 0)))) - (setq filename (concat (expand-file-name first-part) rest))))) - - (or counter (setq counter (list 100))) - (let (done - ;; For speed, remove the ange-ftp completion handler from the list. - ;; We know it's not needed here. - ;; For even more speed, do this only on the outermost call. - (file-name-handler-alist - (if prev-dirs file-name-handler-alist - (let ((tem (copy-sequence file-name-handler-alist))) - (delq (rassq 'ange-ftp-completion-hook-function tem) tem))))) - (or prev-dirs (setq prev-dirs (list nil))) - - ;; andrewi@HIDDEN - on Windows, there is an issue with - ;; case differences being ignored by the OS, and short "8.3 DOS" - ;; name aliases existing for all files. (The short names are not - ;; reported by directory-files, but can be used to refer to files.) - ;; It seems appropriate for file-truename to resolve these issues in - ;; the most natural way, which on Windows is to call the function - ;; `w32-long-file-name' - this returns the exact name of a file as - ;; it is stored on disk (expanding short name aliases with the full - ;; name in the process). - (if (eq system-type 'windows-nt) - (unless (string-match "[[*?]" filename) - ;; If filename exists, use its long name. If it doesn't - ;; exist, the recursion below on the directory of filename - ;; will drill down until we find a directory that exists, - ;; and use the long name of that, with the extra - ;; non-existent path components concatenated. - (let ((longname (w32-long-file-name filename))) - (if longname - (setq filename longname))))) - - ;; If this file directly leads to a link, process that iteratively - ;; so that we don't use lots of stack. - (while (not done) - (setcar counter (1- (car counter))) - (if (< (car counter) 0) - (error "Apparent cycle of symbolic links for %s" filename)) - (let ((handler (find-file-name-handler filename 'file-truename))) - ;; For file name that has a special handler, call handler. - ;; This is so that ange-ftp can save time by doing a no-op. - (if handler - (setq filename (funcall handler 'file-truename filename) - done t) - (let ((dir (or (file-name-directory filename) default-directory)) - target dirfile) - ;; Get the truename of the directory. - (setq dirfile (directory-file-name dir)) - ;; If these are equal, we have the (or a) root directory. - (or (string= dir dirfile) - (and (file-name-case-insensitive-p dir) - (string-equal-ignore-case dir dirfile)) - ;; If this is the same dir we last got the truename for, - ;; save time--don't recalculate. - (if (assoc dir (car prev-dirs)) - (setq dir (cdr (assoc dir (car prev-dirs)))) - (let ((old dir) - (new (file-name-as-directory (file-truename dirfile counter prev-dirs)))) - (setcar prev-dirs (cons (cons old new) (car prev-dirs))) - (setq dir new)))) - (if (equal ".." (file-name-nondirectory filename)) - (setq filename - (directory-file-name (file-name-directory (directory-file-name dir))) - done t) - (if (equal "." (file-name-nondirectory filename)) - (setq filename (directory-file-name dir) - done t) - ;; Put it back on the file name. - (setq filename (concat dir (file-name-nondirectory filename))) - ;; Is the file name the name of a link? - (setq target (file-symlink-p filename)) - (if target - ;; Yes => chase that link, then start all over - ;; since the link may point to a directory name that uses links. - ;; We can't safely use expand-file-name here - ;; since target might look like foo/../bar where foo - ;; is itself a link. Instead, we handle . and .. above. - (setq filename (files--splice-dirname-file dir target) - done nil) - ;; No, we are done! - (setq done t)))))))) - filename)) +;; (defun file-truename (filename &optional _x _y) +;; "Return the truename of FILENAME. +;; If FILENAME is not absolute, first expands it against `default-directory'. +;; The truename of a file name is found by chasing symbolic links +;; both at the level of the file and at the level of the directories +;; containing it, until no links are left at any level. + +;; \(fn FILENAME)" +;; (file-truename-c filename)) (defun file-chase-links (filename &optional limit) "Chase links in FILENAME until a name that is not a link. diff --git a/src/fileio.c b/src/fileio.c index 12da7a9ed3a..05deedead55 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -24,6 +24,8 @@ Copyright (C) 1985-1988, 1993-2024 Free Software Foundation, Inc. #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> +#include <stdlib.h> +#include <wordexp.h> #ifdef DARWIN_OS #include <sys/attr.h> @@ -367,6 +369,30 @@ restore_point_unwind (Lisp_Object location) unchain_marker (XMARKER (location)); } +DEFUN ("file-truename", Ffile_truename, Sfile_truename, + 1, 3, 0, + doc: /* Return the truename of FILENAME. */) + (Lisp_Object filename, Lisp_Object x, Lisp_Object y) +{ + Lisp_Object result = filename; + + CHECK_STRING (filename); + char *c_filename = SSDATA (filename); + + wordexp_t we; + wordexp(c_filename, &we, 0); + + char *truename = realpath(we.we_wordv[0], NULL); + wordfree(&we); + + if (!truename) + return result; + + result = build_string(truename); + free(truename); + + return result; +} DEFUN ("find-file-name-handler", Ffind_file_name_handler, Sfind_file_name_handler, 2, 2, 0, @@ -6850,6 +6876,7 @@ do (file-exists-p FILENAME) and FILENAME is handled by HANDLER, then DEFSYM (Qstdout, "stdout"); DEFSYM (Qstderr, "stderr"); + defsubr (&Sfile_truename); defsubr (&Sfind_file_name_handler); defsubr (&Sfile_name_directory); defsubr (&Sfile_name_nondirectory); -- 2.40.1 --=-=-=--
Theodor Thornhill <theo@HIDDEN>
:bug-gnu-emacs@HIDDEN
.
Full text available.bug-gnu-emacs@HIDDEN
:bug#70036
; Package emacs
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.