From unknown Tue Jun 24 03:24:11 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#69992 <69992@debbugs.gnu.org> To: bug#69992 <69992@debbugs.gnu.org> Subject: Status: Minor improvement to image map transformation logic Reply-To: bug#69992 <69992@debbugs.gnu.org> Date: Tue, 24 Jun 2025 10:24:11 +0000 retitle 69992 Minor improvement to image map transformation logic reassign 69992 emacs submitter 69992 Joseph Turner severity 69992 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Sun Mar 24 21:02:46 2024 Received: (at submit) by debbugs.gnu.org; 25 Mar 2024 01:02:46 +0000 Received: from localhost ([127.0.0.1]:47624 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1roYjd-0004Wc-Hu for submit@debbugs.gnu.org; Sun, 24 Mar 2024 21:02:45 -0400 Received: from lists.gnu.org ([209.51.188.17]:39910) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1roYjY-0004WL-C9 for submit@debbugs.gnu.org; Sun, 24 Mar 2024 21:02:44 -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 ) id 1roYir-0007nO-SR for bug-gnu-emacs@gnu.org; Sun, 24 Mar 2024 21:01:57 -0400 Received: from out-185.mta1.migadu.com ([2001:41d0:203:375::b9]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1roYip-0006hv-6d for bug-gnu-emacs@gnu.org; Sun, 24 Mar 2024 21:01:57 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ushin.org; s=key1; t=1711328511; 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=edFz9bwM2bvhL/gPoQd7QdEP4DBxipy2FskxlpK20Jc=; b=BFCn4ecUdYlnv1ivZkgdGpzIiXVTPdzHkxEaC3FvF+2KDfMAlyyrXWE7teDoZrQzbw0Dvf xAQH/SC67HidcqYtdtz8QMo/Xmlp8EBFdKz8J5G75XTbj5t9OBWmUtGmdS9K/Y8eqk1ths 1bBhpC5olmSrWbsNlfbDu23IIqtn3OZv0B++iYZBzgrnjeOsPxpvdhthYPGxoNt5kgyTSC Pf9I2JvIw6WrfOZe8DmGKhtGp+wh1SM8NzdsIzKfCNmsrDLXiAppRTKypEIqRAlIg4tAWu IcmFkKpCWEGU+1+fGwO0WTYieeDlUhUyXYUjBzKtcntckZh9jEdhf8RELWa6Kw== From: Joseph Turner To: Emacs Bugs Mailing List Subject: Minor improvement to image map transformation logic Date: Sun, 24 Mar 2024 18:00:52 -0700 Message-ID: <87o7b3m8ee.fsf@ushin.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Migadu-Flow: FLOW_OUT Received-SPF: pass client-ip=2001:41d0:203:375::b9; envelope-from=joseph@ushin.org; helo=out-185.mta1.migadu.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.4 (-) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.4 (--) --=-=-= Content-Type: text/plain Hello, This patch is slight simplification/optimization. Joseph --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-copy-tree-just-image-map-not-entire-image.patch >From 96a30a0450384eaeda21f234911f947952c4dcde Mon Sep 17 00:00:00 2001 From: Joseph Turner Date: Sat, 23 Mar 2024 13:29:17 -0700 Subject: [PATCH] copy-tree just image map, not entire image. * lisp/image.el (image--compute-original-map): --- lisp/image.el | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lisp/image.el b/lisp/image.el index 55340ea03dc..d7496485aca 100644 --- a/lisp/image.el +++ b/lisp/image.el @@ -1455,24 +1455,23 @@ image--compute-original-map If IMAGE lacks :map property, return nil. When :rotation is not a multiple of 90, return copy of :map." (when (image-property image :map) - (let* ((image-copy (copy-tree image t)) - (map (image-property image-copy :map)) - (scale (or (image-property image-copy :scale) 1)) - (rotation (or (image-property image-copy :rotation) 0)) - (flip (image-property image-copy :flip)) - (size (image-size image-copy t))) + (let* ((original-map (copy-tree (image-property image :map) t)) + (scale (or (image-property image :scale) 1)) + (rotation (or (image-property image :rotation) 0)) + (flip (image-property image :flip)) + (size (image-size image t))) (when (and ; Handle only 90-degree rotations (zerop (mod rotation 1)) (zerop (% (truncate rotation) 90))) ;; In rendered images, rotation is always applied before flip. - ;; To undo the transformation, flip before rotating. - ;; SIZE fits MAP before it is transformed back to ORIGINAL-MAP. - ;; Therefore, scale MAP after flip and rotate operations, since - ;; both need MAP to fit SIZE. - (image--flip-map map flip size) - (image--rotate-map map (- rotation) size) - (image--scale-map map (/ 1.0 scale))) - map))) + ;; To undo the transformation, flip before rotating. SIZE fits + ;; ORIGINAL-MAP before transformations are applied. Therefore, + ;; scale ORIGINAL-MAP after flip and rotate operations, since + ;; both need ORIGINAL-MAP to fit SIZE. + (image--flip-map original-map flip size) + (image--rotate-map original-map (- rotation) size) + (image--scale-map original-map (/ 1.0 scale))) + original-map))) (defun image--scale-map (map scale) "Scale MAP according to SCALE. -- 2.41.0 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Mar 27 07:16:19 2024 Received: (at 69992) by debbugs.gnu.org; 27 Mar 2024 11:16:19 +0000 Received: from localhost ([127.0.0.1]:35899 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpRGU-0004Jo-ON for submit@debbugs.gnu.org; Wed, 27 Mar 2024 07:16:19 -0400 Received: from smtp-75.smtpout.orange.fr ([80.12.242.75]:63492 helo=msa.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpRGP-0004Jb-Vz for 69992@debbugs.gnu.org; Wed, 27 Mar 2024 07:16:17 -0400 Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id pRGOrIRNHh5dIpRGOrTTdw; Wed, 27 Mar 2024 12:16:12 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711538172; bh=fpJUJIxLzT1ABxtRE6lwiOzZQbxv8f8SZ19exXzBM1U=; h=Message-ID:Date:MIME-Version:To:From:Subject; b=f5VZ8eOEDAFClgrglv+ByNQvm4/g4sh65A7aq123/JelvajZeXrs9E2KPXoNVuOmx hyDf2ndbKdjYcGaOOemmzzCdvG/ZKjJ3bic6O+Wt1mD50ed7Ccg8QS0QyCH5UGLI4e xLNgSAiOJhVsl85ymk9x9vkoa4ZHWCPC9YZ3OUT52xKskaZyQy31hfDdggG442aIvg zBm2iig9dV/up/k9P9w/QCisDkmZGm/5/KTrFaJcMbDESSeZZhL55Q6g4SIQyvwElf 9KsGgtcSXwPLnYCuWOxrsoq0sOcHnRc2HYXU4fSVz0+fBCXsjx9fElpIl8COVP09mM RhWq75evQ34Bw== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Wed, 27 Mar 2024 12:16:12 +0100 X-ME-IP: 2.7.71.181 Content-Type: multipart/mixed; boundary="------------F5wOMzPjOTH0QyUOlqIsL036" Message-ID: <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> Date: Wed, 27 Mar 2024 12:16:11 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: fr, en-US To: 69992@debbugs.gnu.org From: David Ponce Subject: Re: Minor improvement to image map transformation logic X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 69992 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------F5wOMzPjOTH0QyUOlqIsL036 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Many thanks for this feature, which is particularly useful to automatically recalculate the map of computed images like SVG. To make the code faster, by avoiding multiple scans of the map for copy and parsing, I propose the following patch which factors most of the code into the functions `image--compute-map' and `image--compute -original-map'. I have done some tests on my side which are conclusive. Furthermore, I wonder if the term :base-map would not be more descriptive than :original-map? Thanks again for this valuable feature! --------------F5wOMzPjOTH0QyUOlqIsL036 Content-Type: text/x-patch; charset=UTF-8; name="image.el.patch" Content-Disposition: attachment; filename="image.el.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IDU1MzQw ZWEwM2RjLi4yZTM5Mjg0NzhjYSAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDI3LDEwNyArMTQyNywxNzAgQEAgaW1hZ2UtLWNvbXB1dGUt bWFwCiAgICJDb21wdXRlIG1hcCBmb3IgSU1BR0Ugc3VpdGFibGUgdG8gYmUgdXNlZCBhcyBp dHMgOm1hcCBwcm9wZXJ0eS4KIFJldHVybiBhIGNvcHkgb2YgOm9yaWdpbmFsLWltYWdlIHRy YW5zZm9ybWVkIGJhc2VkIG9uIElNQUdFJ3MgOnNjYWxlLAogOnJvdGF0aW9uLCBhbmQgOmZs aXAuICBXaGVuIElNQUdFJ3MgOm9yaWdpbmFsLW1hcCBpcyBuaWwsIHJldHVybiBuaWwuCi1X aGVuIDpyb3RhdGlvbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA5MCwgcmV0dXJuIGNvcHkgb2Yg Om9yaWdpbmFsLW1hcC4iCi0gIChwY2FzZS1sZXQqICgob3JpZ2luYWwtbWFwIChpbWFnZS1w cm9wZXJ0eSBpbWFnZSA6b3JpZ2luYWwtbWFwKSkKLSAgICAgICAgICAgICAgIChtYXAgKGNv cHktdHJlZSBvcmlnaW5hbC1tYXAgdCkpCi0gICAgICAgICAgICAgICAoc2NhbGUgKG9yIChp bWFnZS1wcm9wZXJ0eSBpbWFnZSA6c2NhbGUpIDEpKQotICAgICAgICAgICAgICAgKHJvdGF0 aW9uIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSAwKSkKLSAgICAgICAg ICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6ZmxpcCkpCi0gICAgICAgICAg ICAgICAoKGFuZCBzaXplIGAoLHdpZHRoIC4gLGhlaWdodCkpIChpbWFnZS1zaXplIGltYWdl IHQpKSkKLSAgICAod2hlbiAoYW5kIDsgSGFuZGxlIG9ubHkgOTAtZGVncmVlIHJvdGF0aW9u cwotICAgICAgICAgICAoemVyb3AgKG1vZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgKHpl cm9wICglICh0cnVuY2F0ZSByb3RhdGlvbikgOTApKSkKLSAgICAgIDs7IFNJWkUgZml0cyBN QVAgYWZ0ZXIgdHJhbnNmb3JtYXRpb25zLiAgU2NhbGUgTUFQIGJlZm9yZQotICAgICAgOzsg ZmxpcCBhbmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlIGJvdGggbmVlZCBNQVAgdG8gZml0 IFNJWkUuCi0gICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBtYXAgc2NhbGUpCi0gICAgICA7OyBJ biByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGJlZm9yZSBm bGlwLgotICAgICAgKGltYWdlLS1yb3RhdGUtbWFwCi0gICAgICAgbWFwIHJvdGF0aW9uIChp ZiAob3IgKD0gOTAgcm90YXRpb24pICg9IDI3MCByb3RhdGlvbikpCi0gICAgICAgICAgICAg ICAgICAgICAgICA7OyBJZiByb3RhdGVkIMKxOTDCsCwgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0 LgotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgaGVpZ2h0IHdpZHRoKQotICAgICAg ICAgICAgICAgICAgICAgIHNpemUpKQotICAgICAgOzsgQWZ0ZXIgcm90YXRpb24sIHRoZXJl J3Mgbm8gbmVlZCB0byBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgICAoaW1hZ2UtLWZs aXAtbWFwIG1hcCBmbGlwIHNpemUpKQotICAgIG1hcCkpCitXaGVuIHRoZXJlIGlzIG5vIHRy YW5zZm9ybWF0aW9uLCByZXR1cm4gOm9yaWdpbmFsLW1hcC4iCisgICh3aGVuLWxldCAoKG9t YXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpvcmlnaW5hbC1tYXApKSkKKyAgICAobGV0KiAo KHNjYWxlIChsZXQgKChzIChpbWFnZS0tY3VycmVudC1zY2FsaW5nCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1h Z2UtLWltYWdlLXdpdGhvdXQtcGFyYW1ldGVycyBpbWFnZSkpKSkKKyAgICAgICAgICAgICAg ICAgICAgKHVubGVzcyAoPSBzIDEpIHMpKSkKKyAgICAgICAgICAgKHJvdGF0ZSAobGV0ICgo ZCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSkpCisgICAgICAgICAgICAgICAg ICAgICA7OyBIYW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCisgICAgICAgICAgICAg ICAgICAgICAoYW5kIGQgKD0gMCAobW9kIGQgMSkpICg9IDAgKCUgZCA5MCkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICh0cnVuY2F0ZSAobW9kIGQgMzYwKSkpKSkKKyAgICAgICAg ICAgKGZsaXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkKKyAgICAgICAgICAgKG1h cCBvbWFwKQorICAgICAgICAgICBzaXplIGZsaXAtdykKKyAgICAgICh3aGVuIChvciBzY2Fs ZSByb3RhdGUgZmxpcCkKKyAgICAgICAgKHNldHEgbWFwIG5pbAorICAgICAgICAgICAgICBz aXplIChpbWFnZS1zaXplIGltYWdlIHQpCisgICAgICAgICAgICAgIGZsaXAtdyAoY2FyIHNp emUpKQorICAgICAgICAoaWYgKG1lbXFsIHJvdGF0ZSAnKDkwIDI3MCkpCisgICAgICAgICAg ICA7OyBJZiByb3RhdGVkIMKxOTDCsCwgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0LgorICAgICAg ICAgICAgKHNldHEgc2l6ZSAoY29ucyAoY2RyIHNpemUpIChjYXIgc2l6ZSkpKSkKKyAgICAg ICAgOzsgU0laRSBmaXRzIE1BUCBhZnRlciB0cmFuc2Zvcm1hdGlvbnMuICBTY2FsZSBNQVAg YmVmb3JlIGZsaXAKKyAgICAgICAgOzsgYW5kIHJvdGF0ZSBvcGVyYXRpb25zLCBzaW5jZSBi b3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgICAocGNhc2UtZG9saXN0IChgKCxh cmVhICxpZCAscGxpc3QpIG9tYXApCisgICAgICAgICAgKHBjYXNlLWV4aGF1c3RpdmUgYXJl YQorICAgICAgICAgICAgOzsgUmVjdGFuZ2xlIGhvdCBzcG90LgorICAgICAgICAgICAgKGAo cmVjdCAuICgoLHgwIC4gLHkwKSAuICgseDEgLiAseTEpKSkKKyAgICAgICAgICAgICAoaWYg c2NhbGUKKyAgICAgICAgICAgICAgICAgKHNldHEgeDAgKHJvdW5kICgqIHgwIHNjYWxlKSkg eTAgKHJvdW5kICgqIHkwIHNjYWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgeDEgKHJv dW5kICgqIHgxIHNjYWxlKSkgeTEgKHJvdW5kICgqIHkxIHNjYWxlKSkpKQorICAgICAgICAg ICAgIChpZiByb3RhdGUgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgKGxldCAo KHAwIChpbWFnZS0tcm90YXRlLWNvb3JkIHgwIHkwIHJvdGF0ZSBzaXplKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgKHAxIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJvdGF0ZSBz aXplKSkpCisgICAgICAgICAgICAgICAgICAgKHNldHEgeDAgKGNhciBwMCkgeTAgKGNkciBw MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB4MSAoY2FyIHAxKSB5MSAoY2RyIHAxKSkp KQorICAgICAgICAgICAgIChpZiBmbGlwCisgICAgICAgICAgICAgICAgIChsZXQgKCh4YSB4 MCkgKHhiIHgxKSkKKyAgICAgICAgICAgICAgICAgICAoc2V0cSB4MCAoLSBmbGlwLXcgeGIp CisgICAgICAgICAgICAgICAgICAgICAgICAgeDEgKC0gZmxpcC13IHhhKSkpKQorICAgICAg ICAgICAgIDs7IE5vcm1hbGl6ZSByZWN0IGNvb3JkcyB0byBiZSB0b3AvbGVmdCBib3R0b20v cmlnaHQuCisgICAgICAgICAgICAgKGlmICg+IHgwIHgxKQorICAgICAgICAgICAgICAgICAo bGV0ICgocncgKGFicyAoLSB4MCB4MSkpKSkKKyAgICAgICAgICAgICAgICAgICAoc2V0cSB4 MCAoLSB4MCBydykgeDEgKCsgeDEgcncpKSkpCisgICAgICAgICAgICAgKGlmICg+IHkwIHkx KQorICAgICAgICAgICAgICAgICAobGV0ICgocmggKGFicyAoLSB5MCB5MSkpKSkKKyAgICAg ICAgICAgICAgICAgICAoc2V0cSB5MCAoLSB5MCByaCkgeTEgKCsgeTEgcmgpKSkpCisgICAg ICAgICAgICAgKHB1c2ggYCgocmVjdCAuICgoLHgwIC4gLHkwKSAuICgseDEgLiAseTEpKSkg LGlkICxwbGlzdCkKKyAgICAgICAgICAgICAgICAgICBtYXApKQorICAgICAgICAgICAgOzsg Q2lyY2xlIGhvdCBzcG90LgorICAgICAgICAgICAgKGAoY2lyY2xlIC4gKCgseDAgLiAseTAp IC4gLHIpKQorICAgICAgICAgICAgIChpZiBzY2FsZQorICAgICAgICAgICAgICAgICAoc2V0 cSB4MCAocm91bmQgKCogeDAgc2NhbGUpKSB5MCAocm91bmQgKCogeTAgc2NhbGUpKQorICAg ICAgICAgICAgICAgICAgICAgICByICAocm91bmQgKCogciBzY2FsZSkpKSkKKyAgICAgICAg ICAgICAoaWYgcm90YXRlCisgICAgICAgICAgICAgICAgIChsZXQgKChwMCAoaW1hZ2UtLXJv dGF0ZS1jb29yZCB4MCB5MCByb3RhdGUgc2l6ZSkpKQorICAgICAgICAgICAgICAgICAgIChz ZXRxIHgwIChjYXIgcDApIHkwIChjZHIgcDApKSkpCisgICAgICAgICAgICAgKGlmIGZsaXAK KyAgICAgICAgICAgICAgICAgKHNldHEgeDAgKC0gZmxpcC13IHgwKSkpCisgICAgICAgICAg ICAgKHB1c2ggYCgoY2lyY2xlIC4gKCgseDAgLiAseTApIC4gLHIpKSAsaWQgLHBsaXN0KSBt YXApKQorICAgICAgICAgICAgOzsgUG9seSBob3Qgc3BvdC4KKyAgICAgICAgICAgIChgKHBv bHkgLiAsY29vcmRzKQorICAgICAgICAgICAgIChzZXRxIGNvb3JkcyAoY29weS1zZXF1ZW5j ZSBjb29yZHMpKQorICAgICAgICAgICAgIChsZXQgKChpIDApIChuICgxLSAobGVuZ3RoIGNv b3JkcykpKSkKKyAgICAgICAgICAgICAgICh3aGlsZSAoPCBpIG4pCisgICAgICAgICAgICAg ICAgIChsZXQqICgoaiAoMSsgaSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoeCAoYXJl ZiBjb29yZHMgaSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoeSAoYXJlZiBjb29yZHMg aikpKQorICAgICAgICAgICAgICAgICAgIChpZiBzY2FsZQorICAgICAgICAgICAgICAgICAg ICAgICAoc2V0cSB4IChyb3VuZCAoKiB4IHNjYWxlKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeSAocm91bmQgKCogeSBzY2FsZSkpKSkKKyAgICAgICAgICAgICAgICAgICAo aWYgcm90YXRlCisgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChwIChpbWFnZS0tcm90 YXRlLWNvb3JkIHggeSByb3RhdGUgc2l6ZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg IChzZXRxIHggKGNhciBwKSB5IChjZHIgcCkpKSkKKyAgICAgICAgICAgICAgICAgICAoaWYg ZmxpcAorICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB4ICgtIGZsaXAtdyB4KSkpCisg ICAgICAgICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgeCkKKyAgICAgICAgICAgICAgICAg ICAoYXNldCBjb29yZHMgaiB5KSkKKyAgICAgICAgICAgICAgICAgKHNldHEgaSAoKyBpIDIp KSkpCisgICAgICAgICAgICAgKHB1c2ggYCgocG9seSAuICxjb29yZHMpICxpZCAscGxpc3Qp IG1hcCkpCisgICAgICAgICAgICApKSkKKyAgICAgIG1hcCkpKQogCiAoZGVmdW4gaW1hZ2Ut LWNvbXB1dGUtb3JpZ2luYWwtbWFwIChpbWFnZSkKICAgIlJldHVybiBvcmlnaW5hbCBtYXAg Zm9yIElNQUdFLgogSWYgSU1BR0UgbGFja3MgOm1hcCBwcm9wZXJ0eSwgcmV0dXJuIG5pbC4K LVdoZW4gOnJvdGF0aW9uIGlzIG5vdCBhIG11bHRpcGxlIG9mIDkwLCByZXR1cm4gY29weSBv ZiA6bWFwLiIKLSAgKHdoZW4gKGltYWdlLXByb3BlcnR5IGltYWdlIDptYXApCi0gICAgKGxl dCogKChpbWFnZS1jb3B5IChjb3B5LXRyZWUgaW1hZ2UgdCkpCi0gICAgICAgICAgIChtYXAg KGltYWdlLXByb3BlcnR5IGltYWdlLWNvcHkgOm1hcCkpCi0gICAgICAgICAgIChzY2FsZSAo b3IgKGltYWdlLXByb3BlcnR5IGltYWdlLWNvcHkgOnNjYWxlKSAxKSkKLSAgICAgICAgICAg KHJvdGF0aW9uIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UtY29weSA6cm90YXRpb24pIDAp KQotICAgICAgICAgICAoZmxpcCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UtY29weSA6ZmxpcCkp Ci0gICAgICAgICAgIChzaXplIChpbWFnZS1zaXplIGltYWdlLWNvcHkgdCkpKQotICAgICAg KHdoZW4gKGFuZCA7IEhhbmRsZSBvbmx5IDkwLWRlZ3JlZSByb3RhdGlvbnMKLSAgICAgICAg ICAgICAoemVyb3AgKG1vZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgICAoemVyb3AgKCUg KHRydW5jYXRlIHJvdGF0aW9uKSA5MCkpKQorV2hlbiB0aGVyZSBpcyBubyB0cmFuc2Zvcm1h dGlvbiwgcmV0dXJuIDptYXAuIgorICAod2hlbi1sZXQgKChtYXAgKGltYWdlLXByb3BlcnR5 IGltYWdlIDptYXApKSkKKyAgICAobGV0KiAoKHNjYWxlIChsZXQgKChzIChpbWFnZS0tY3Vy cmVudC1zY2FsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2UtLWltYWdlLXdpdGhvdXQtcGFyYW1ldGVy cyBpbWFnZSkpKSkKKyAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoPSBzIDEpIHMpKSkK KyAgICAgICAgICAgKHJvdGF0ZSAobGV0ICgoZCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJv dGF0aW9uKSkpCisgICAgICAgICAgICAgICAgICAgICA7OyBIYW5kbGUgb25seSA5MC1kZWdy ZWUgcm90YXRpb25zCisgICAgICAgICAgICAgICAgICAgICAoYW5kIGQgKD0gMCAobW9kIGQg MSkpICg9IDAgKCUgZCA5MCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICh0cnVuY2F0 ZSAobW9kICgtIGQpIDM2MCkpKSkpCisgICAgICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0 eSBpbWFnZSA6ZmxpcCkpCisgICAgICAgICAgIChvbWFwIG1hcCkKKyAgICAgICAgICAgc2l6 ZSBmbGlwLXcpCisgICAgICAod2hlbiAob3Igc2NhbGUgcm90YXRlIGZsaXApCisgICAgICAg IChzZXRxIG9tYXAgbmlsCisgICAgICAgICAgICAgIHNpemUgKGltYWdlLXNpemUgaW1hZ2Ug dCkKKyAgICAgICAgICAgICAgZmxpcC13IChjYXIgc2l6ZSkpCiAgICAgICAgIDs7IEluIHJl bmRlcmVkIGltYWdlcywgcm90YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgYmVmb3JlIGZsaXAu CiAgICAgICAgIDs7IFRvIHVuZG8gdGhlIHRyYW5zZm9ybWF0aW9uLCBmbGlwIGJlZm9yZSBy b3RhdGluZy4KLSAgICAgICAgOzsgU0laRSBmaXRzIE1BUCBiZWZvcmUgaXQgaXMgdHJhbnNm b3JtZWQgYmFjayB0byBPUklHSU5BTC1NQVAuCi0gICAgICAgIDs7IFRoZXJlZm9yZSwgc2Nh bGUgTUFQIGFmdGVyIGZsaXAgYW5kIHJvdGF0ZSBvcGVyYXRpb25zLCBzaW5jZQotICAgICAg ICA7OyBib3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgotICAgICAgICAoaW1hZ2UtLWZsaXAt bWFwIG1hcCBmbGlwIHNpemUpCi0gICAgICAgIChpbWFnZS0tcm90YXRlLW1hcCBtYXAgKC0g cm90YXRpb24pIHNpemUpCi0gICAgICAgIChpbWFnZS0tc2NhbGUtbWFwIG1hcCAoLyAxLjAg c2NhbGUpKSkKLSAgICAgIG1hcCkpKQotCi0oZGVmdW4gaW1hZ2UtLXNjYWxlLW1hcCAobWFw IHNjYWxlKQotICAiU2NhbGUgTUFQIGFjY29yZGluZyB0byBTQ0FMRS4KLURlc3RydWN0aXZl bHkgbW9kaWZpZXMgYW5kIHJldHVybnMgTUFQLiIKLSAgKHVubGVzcyAoPSAxIHNjYWxlKQot ICAgIChwY2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3Qp IG1hcCkKLSAgICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKLSAgICAgICAgKCdyZWN0Ci0g ICAgICAgICAoc2V0ZiAoY2FhciBjb29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNj YWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAoY2RhciBj b29yZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2FkciBjb29yZHMpIChyb3VuZCAo KiAoY2FkciBjb29yZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2RkciBjb29yZHMp IChyb3VuZCAoKiAoY2RkciBjb29yZHMpIHNjYWxlKSkpKQotICAgICAgICAoJ2NpcmNsZQot ICAgICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBz Y2FsZSkpKQotICAgICAgICAgKHNldGYgKGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIg Y29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNldGNkciBjb29yZHMgKHJvdW5kICgqIChj ZHIgY29vcmRzKSBzY2FsZSkpKSkKLSAgICAgICAgKCdwb2x5Ci0gICAgICAgICAoZG90aW1l cyAoaSAobGVuZ3RoIGNvb3JkcykpCi0gICAgICAgICAgIChhc2V0IGNvb3JkcyBpCi0gICAg ICAgICAgICAgICAgIChyb3VuZCAoKiAoYXJlZiBjb29yZHMgaSkgc2NhbGUpKSkpKSkpKQot ICBtYXApCi0KLShkZWZ1biBpbWFnZS0tcm90YXRlLW1hcCAobWFwIHJvdGF0aW9uIHNpemUp Ci0gICJSb3RhdGUgTUFQIGFjY29yZGluZyB0byBST1RBVElPTiBhbmQgU0laRS4KLURlc3Ry dWN0aXZlbHkgbW9kaWZpZXMgYW5kIHJldHVybnMgTUFQLiIKLSAgKHVubGVzcyAoemVyb3Ag cm90YXRpb24pCi0gICAgKHBjYXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxf aWQgLF9wbGlzdCkgbWFwKQotICAgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlwZQotICAgICAg ICAoJ3JlY3QKLSAgICAgICAgIChsZXQgKCB4MCB5MCAgOyBOZXcgdXBwZXIgbGVmdCBjb3Ju ZXIKLSAgICAgICAgICAgICAgICB4MSB5MSkgOyBOZXcgYm90dG9tIHJpZ2h0IGNvcm5lcgot ICAgICAgICAgICAocGNhc2UgKHRydW5jYXRlIChtb2Qgcm90YXRpb24gMzYwKSkgOyBTZXQg bmV3IGNvcm5lcnMgdG8uLi4KLSAgICAgICAgICAgICAoOTAgOyAuLi5vbGQgYm90dG9tIGxl ZnQgYW5kIHVwcGVyIHJpZ2h0Ci0gICAgICAgICAgICAgIChzZXRxIHgwIChjYWFyIGNvb3Jk cykgeTAgKGNkZHIgY29vcmRzKQotICAgICAgICAgICAgICAgICAgICB4MSAoY2FkciBjb29y ZHMpIHkxIChjZGFyIGNvb3JkcykpKQotICAgICAgICAgICAgICgxODAgOyAuLi5vbGQgYm90 dG9tIHJpZ2h0IGFuZCB1cHBlciBsZWZ0Ci0gICAgICAgICAgICAgIChzZXRxIHgwIChjYWRy IGNvb3JkcykgeTAgKGNkZHIgY29vcmRzKQotICAgICAgICAgICAgICAgICAgICB4MSAoY2Fh ciBjb29yZHMpIHkxIChjZGFyIGNvb3JkcykpKQotICAgICAgICAgICAgICgyNzAgOyAuLi5v bGQgdXBwZXIgcmlnaHQgYW5kIGJvdHRvbSBsZWZ0Ci0gICAgICAgICAgICAgIChzZXRxIHgw IChjYWRyIGNvb3JkcykgeTAgKGNkYXIgY29vcmRzKQotICAgICAgICAgICAgICAgICAgICB4 MSAoY2FhciBjb29yZHMpIHkxIChjZGRyIGNvb3JkcykpKSkKLSAgICAgICAgICAgKHNldGNh ciBjb29yZHMgKGltYWdlLS1yb3RhdGUtY29vcmQgeDAgeTAgcm90YXRpb24gc2l6ZSkpCi0g ICAgICAgICAgIChzZXRjZHIgY29vcmRzIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJv dGF0aW9uIHNpemUpKSkpCi0gICAgICAgICgnY2lyY2xlCi0gICAgICAgICAoc2V0Y2FyIGNv b3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZAotICAgICAgICAgICAgICAgICAgICAgICAgIChj YWFyIGNvb3JkcykgKGNkYXIgY29vcmRzKSByb3RhdGlvbiBzaXplKSkpCi0gICAgICAgICgn cG9seQotICAgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAg ICAod2hlbiAoPSAwICglIGkgMikpCi0gICAgICAgICAgICAgKHBjYXNlLWxldCAoKGAoLHgg LiAseSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlLS1yb3RhdGUtY29vcmQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmVmIGNvb3JkcyBpKSAoYXJlZiBjb29y ZHMgKDErIGkpKSByb3RhdGlvbiBzaXplKSkpCi0gICAgICAgICAgICAgICAoYXNldCBjb29y ZHMgaSB4KQotICAgICAgICAgICAgICAgKGFzZXQgY29vcmRzICgxKyBpKSB5KSkpKSkpKSkK LSAgbWFwKQorICAgICAgICA7OyBTSVpFIGZpdHMgTUFQIGJlZm9yZSBpdCBpcyB0cmFuc2Zv cm1lZCBiYWNrIHRvCisgICAgICAgIDs7IE9SSUdJTkFMLU1BUC4gIFRoZXJlZm9yZSwgc2Nh bGUgTUFQIGFmdGVyIGZsaXAgYW5kIHJvdGF0ZQorICAgICAgICA7OyBvcGVyYXRpb25zLCBz aW5jZSBib3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgICAocGNhc2UtZG9saXN0 IChgKCxhcmVhICxpZCAscGxpc3QpIG1hcCkKKyAgICAgICAgICAocGNhc2UtZXhoYXVzdGl2 ZSBhcmVhCisgICAgICAgICAgICA7OyBSZWN0YW5nbGUgaG90IHNwb3QuCisgICAgICAgICAg ICAoYChyZWN0IC4gKCgseDAgLiAseTApIC4gKCx4MSAuICx5MSkpKQorICAgICAgICAgICAg IChpZiBmbGlwCisgICAgICAgICAgICAgICAgIChsZXQgKCh4YSB4MCkgKHhiIHgxKSkKKyAg ICAgICAgICAgICAgICAgICAoc2V0cSB4MCAoLSBmbGlwLXcgeGIpCisgICAgICAgICAgICAg ICAgICAgICAgICAgeDEgKC0gZmxpcC13IHhhKSkpKQorICAgICAgICAgICAgIChpZiByb3Rh dGUgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgKGxldCAoKHAwIChpbWFnZS0t cm90YXRlLWNvb3JkIHgwIHkwIHJvdGF0ZSBzaXplKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgKHAxIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJvdGF0ZSBzaXplKSkpCisgICAg ICAgICAgICAgICAgICAgKHNldHEgeDAgKGNhciBwMCkgeTAgKGNkciBwMCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICB4MSAoY2FyIHAxKSB5MSAoY2RyIHAxKSkpKQorICAgICAgICAg ICAgIChpZiBzY2FsZQorICAgICAgICAgICAgICAgICAoc2V0cSB4MCAocm91bmQgKC8geDAg c2NhbGUpKSB5MCAocm91bmQgKC8geTAgc2NhbGUpKQorICAgICAgICAgICAgICAgICAgICAg ICB4MSAocm91bmQgKC8geDEgc2NhbGUpKSB5MSAocm91bmQgKC8geTEgc2NhbGUpKSkpCisg ICAgICAgICAgICAgOzsgTm9ybWFsaXplIHJlY3QgY29vcmRzIHRvIGJlIHRvcC9sZWZ0IGJv dHRvbS9yaWdodC4KKyAgICAgICAgICAgICAoaWYgKD4geDAgeDEpCisgICAgICAgICAgICAg ICAgIChsZXQgKChydyAoYWJzICgtIHgwIHgxKSkpKQorICAgICAgICAgICAgICAgICAgIChz ZXRxIHgwICgtIHgwIHJ3KSB4MSAoKyB4MSBydykpKSkKKyAgICAgICAgICAgICAoaWYgKD4g eTAgeTEpCisgICAgICAgICAgICAgICAgIChsZXQgKChyaCAoYWJzICgtIHkwIHkxKSkpKQor ICAgICAgICAgICAgICAgICAgIChzZXRxIHkwICgtIHkwIHJoKSB5MSAoKyB5MSByaCkpKSkK KyAgICAgICAgICAgICAocHVzaCBgKChyZWN0IC4gKCgseDAgLiAseTApIC4gKCx4MSAuICx5 MSkpKSAsaWQgLHBsaXN0KQorICAgICAgICAgICAgICAgICAgIG9tYXApKQorICAgICAgICAg ICAgOzsgQ2lyY2xlIGhvdCBzcG90LgorICAgICAgICAgICAgKGAoY2lyY2xlIC4gKCgseDAg LiAseTApIC4gLHIpKQorICAgICAgICAgICAgIChpZiBmbGlwCisgICAgICAgICAgICAgICAg IChzZXRxIHgwICgtIGZsaXAtdyB4MCkpKQorICAgICAgICAgICAgIChpZiByb3RhdGUKKyAg ICAgICAgICAgICAgICAgKGxldCAoKHAwIChpbWFnZS0tcm90YXRlLWNvb3JkIHgwIHkwIHJv dGF0ZSBzaXplKSkpCisgICAgICAgICAgICAgICAgICAgKHNldHEgeDAgKGNhciBwMCkgeTAg KGNkciBwMCkpKSkKKyAgICAgICAgICAgICAoaWYgc2NhbGUKKyAgICAgICAgICAgICAgICAg KHNldHEgeDAgKHJvdW5kICgvIHgwIHNjYWxlKSkgeTAgKHJvdW5kICgvIHkwIHNjYWxlKSkK KyAgICAgICAgICAgICAgICAgICAgICAgciAgKHJvdW5kICgvIHIgc2NhbGUpKSkpCisgICAg ICAgICAgICAgKHB1c2ggYCgoY2lyY2xlIC4gKCgseDAgLiAseTApIC4gLHIpKSAsaWQgLHBs aXN0KSBvbWFwKSkKKyAgICAgICAgICAgIDs7IFBvbHkgaG90IHNwb3QuCisgICAgICAgICAg ICAoYChwb2x5IC4gLGNvb3JkcykKKyAgICAgICAgICAgICAoc2V0cSBjb29yZHMgKGNvcHkt c2VxdWVuY2UgY29vcmRzKSkKKyAgICAgICAgICAgICAobGV0ICgoaSAwKSAobiAoMS0gKGxl bmd0aCBjb29yZHMpKSkpCisgICAgICAgICAgICAgICAod2hpbGUgKDwgaSBuKQorICAgICAg ICAgICAgICAgICAobGV0KiAoKGogKDErIGkpKQorICAgICAgICAgICAgICAgICAgICAgICAg KHggKGFyZWYgY29vcmRzIGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgKHkgKGFyZWYg Y29vcmRzIGopKSkKKyAgICAgICAgICAgICAgICAgICAoaWYgZmxpcAorICAgICAgICAgICAg ICAgICAgICAgICAoc2V0cSB4ICgtIGZsaXAtdyB4KSkpCisgICAgICAgICAgICAgICAgICAg KGlmIHJvdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgocCAoaW1hZ2UtLXJv dGF0ZS1jb29yZCB4IHkgcm90YXRlIHNpemUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAoc2V0cSB4IChjYXIgcCkgeSAoY2RyIHApKSkpCisgICAgICAgICAgICAgICAgICAgKGlm IHNjYWxlCisgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHggKHJvdW5kICgvIHggc2Nh bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IChyb3VuZCAoLyB5IHNjYWxl KSkpKQorICAgICAgICAgICAgICAgICAgIChhc2V0IGNvb3JkcyBpIHgpCisgICAgICAgICAg ICAgICAgICAgKGFzZXQgY29vcmRzIGogeSkpCisgICAgICAgICAgICAgICAgIChzZXRxIGkg KCsgaSAyKSkpKQorICAgICAgICAgICAgIChwdXNoIGAoKHBvbHkgLiAsY29vcmRzKSAsaWQg LHBsaXN0KSBvbWFwKSkKKyAgICAgICAgICAgICkpKQorICAgICAgb21hcCkpKQogCiAoZGVm dW4gaW1hZ2UtLXJvdGF0ZS1jb29yZCAoeCB5IGFuZ2xlIHNpemUpCiAgICJSb3RhdGUgY29v cmRpbmF0ZXMgWCBhbmQgWSBieSBBTkdMRSBpbiBpbWFnZSBvZiBTSVpFLgpAQCAtMTU1Mywy NyArMTYxNiw2IEBAIGltYWdlLS1yb3RhdGUtY29vcmQKICAgICAgICAgICAgICAgICh5MSAo LSB5MSkpKQogICAgIChjb25zIChyb3VuZCB4MSkgKHJvdW5kIHkxKSkpKQogCi0oZGVmdW4g aW1hZ2UtLWZsaXAtbWFwIChtYXAgZmxpcCBzaXplKQotICAiSG9yaXpvbnRhbGx5IGZsaXAg TUFQIGFjY29yZGluZyB0byBGTElQIGFuZCBTSVpFLgotRGVzdHJ1Y3RpdmVseSBtb2RpZmll cyBhbmQgcmV0dXJucyBNQVAuIgotICAod2hlbiBmbGlwCi0gICAgKHBjYXNlLWRvbGlzdCAo YCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQotICAgICAgKHBjYXNl LWV4aGF1c3RpdmUgdHlwZQotICAgICAgICAoJ3JlY3QKLSAgICAgICAgIChsZXQgKCh4MCAo LSAoY2FyIHNpemUpIChjYWRyIGNvb3JkcykpKQotICAgICAgICAgICAgICAgKHkwIChjZGFy IGNvb3JkcykpCi0gICAgICAgICAgICAgICAoeDEgKC0gKGNhciBzaXplKSAoY2FhciBjb29y ZHMpKSkKLSAgICAgICAgICAgICAgICh5MSAoY2RkciBjb29yZHMpKSkKLSAgICAgICAgICAg KHNldGNhciBjb29yZHMgKGNvbnMgeDAgeTApKQotICAgICAgICAgICAoc2V0Y2RyIGNvb3Jk cyAoY29ucyB4MSB5MSkpKSkKLSAgICAgICAgKCdjaXJjbGUKLSAgICAgICAgIChzZXRmIChj YWFyIGNvb3JkcykgKC0gKGNhciBzaXplKSAoY2FhciBjb29yZHMpKSkpCi0gICAgICAgICgn cG9seQotICAgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAg ICAod2hlbiAoPSAwICglIGkgMikpCi0gICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgKC0g KGNhciBzaXplKSAoYXJlZiBjb29yZHMgaSkpKSkpKSkpKQotICBtYXApCi0KIChwcm92aWRl ICdpbWFnZSkKIAogOzs7IGltYWdlLmVsIGVuZHMgaGVyZQo= --------------F5wOMzPjOTH0QyUOlqIsL036-- From debbugs-submit-bounces@debbugs.gnu.org Wed Mar 27 08:51:19 2024 Received: (at 69992) by debbugs.gnu.org; 27 Mar 2024 12:51:19 +0000 Received: from localhost ([127.0.0.1]:36035 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpSkQ-00031i-OR for submit@debbugs.gnu.org; Wed, 27 Mar 2024 08:51:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40668) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpSkO-000313-LR for 69992@debbugs.gnu.org; Wed, 27 Mar 2024 08:51:16 -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 ) id 1rpSk5-000599-PU; Wed, 27 Mar 2024 08:51:08 -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=WpC+RumCo5cddWcE+Tod8gHyqM1H99zqmpTeBmHDh/o=; b=Q9BY/z0jUjFF DXCyJHSIZm1dNDsdaTrBOg3BjbVueN/PS+9MXLGMw7l+pjbLEm/XqahlVAXlrnbKJwQ2i/BBRJVAu KbImeIOx9U9BMPLbtQF8mT4WfMaCeqn9QKKeIgNwVnNC2TukM3HOCurImy1KYHbVXuQY7kMAexSqM TjqROrLkT6x0ukq/5YzuKvmqE1wF6qq1IAeD4X7gFCHImKgx9fTMQa8J4sC2tR8fkSmSWuiuaEK0n I1s1197U1vdNFTslFBzWQr1NY4VIW0tGNrgT3IORLS81GHo0RA0Q8UufDAtrleqM0choTZTLcRcAh ECU5rtL660kqZtaeZFjaTg==; Date: Wed, 27 Mar 2024 14:50:48 +0200 Message-Id: <86cyrfj0t3.fsf@gnu.org> From: Eli Zaretskii To: David Ponce , Joseph Turner In-Reply-To: <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> (bug-gnu-emacs@gnu.org) Subject: Re: bug#69992: Minor improvement to image map transformation logic References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 69992 Cc: 69992@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Wed, 27 Mar 2024 12:16:11 +0100 > From: David Ponce via "Bug reports for GNU Emacs, > the Swiss army knife of text editors" > > Many thanks for this feature, which is particularly useful to > automatically recalculate the map of computed images like SVG. > > To make the code faster, by avoiding multiple scans of the map for > copy and parsing, I propose the following patch which factors most of > the code into the functions `image--compute-map' and `image--compute > -original-map'. I have done some tests on my side which are > conclusive. > > Furthermore, I wonder if the term :base-map would not be more > descriptive than :original-map? Thanks. Joseph, any comments or suggestions? From debbugs-submit-bounces@debbugs.gnu.org Wed Mar 27 10:21:38 2024 Received: (at 69992) by debbugs.gnu.org; 27 Mar 2024 14:21:38 +0000 Received: from localhost ([127.0.0.1]:38026 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpU9e-0007tG-5o for submit@debbugs.gnu.org; Wed, 27 Mar 2024 10:21:38 -0400 Received: from out-69.smtpout.orange.fr ([193.252.22.69]:50337 helo=msa.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpU9Y-0007t4-Sz for 69992@debbugs.gnu.org; Wed, 27 Mar 2024 10:21:24 -0400 Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id pU9Wr5rGhgxDjpU9Wr0ZSW; Wed, 27 Mar 2024 15:21:19 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711549279; bh=dhpQBcflZgLnIDNOMgtBn00jjQUSU5gtkL2O8frjwGY=; h=Message-ID:Date:MIME-Version:Subject:To:From; b=KJCSccBPngYyKXf7knSEx920hW/zN5adBTGU/RksaEmUGNon4wRlA4G+K4msDgC22 w8Uk8+X876CYpCayw5DF686AoHY6J+rY0Pl9ABHcOr0an7Tbz+kLce57za+PLzH56h x0UgLcm4Tj40PJAUC7MYzzNJV5T8Oxl2CqJaKilK8qCcA39U7actxeI+QXqqQbuA+k Od9ukluyQTs/vxczNkRsABX/qzQVBB9GKlcpcdafekBPXH21YZ/us5e1Hc9b0oDP2R C7upXXmd4KSHGu1xM+4Uej9xcKSt4Y2asDEGQB8aIa2R6WASljtydTM4nzhZ8awAQv MIidnIlWFBLPA== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Wed, 27 Mar 2024 15:21:19 +0100 X-ME-IP: 2.7.71.181 Content-Type: multipart/mixed; boundary="------------EujwABafJVITOc0pgGa0LBVd" Message-ID: Date: Wed, 27 Mar 2024 15:21:18 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#69992: Minor improvement to image map transformation logic To: Eli Zaretskii , Joseph Turner References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> Content-Language: fr, en-US From: David Ponce In-Reply-To: <86cyrfj0t3.fsf@gnu.org> X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 69992 Cc: 69992@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------EujwABafJVITOc0pgGa0LBVd Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 27/03/2024 13:50, Eli Zaretskii wrote: >> Date: Wed, 27 Mar 2024 12:16:11 +0100 >> From: David Ponce via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" >> >> Many thanks for this feature, which is particularly useful to >> automatically recalculate the map of computed images like SVG. >> >> To make the code faster, by avoiding multiple scans of the map for >> copy and parsing, I propose the following patch which factors most of >> the code into the functions `image--compute-map' and `image--compute >> -original-map'. I have done some tests on my side which are >> conclusive. >> >> Furthermore, I wonder if the term :base-map would not be more >> descriptive than :original-map? > > Thanks. > > Joseph, any comments or suggestions? Attached the same patch slightly cleaned up. --------------EujwABafJVITOc0pgGa0LBVd Content-Type: text/x-patch; charset=UTF-8; name="image.el-compute-map-V1.patch" Content-Disposition: attachment; filename="image.el-compute-map-V1.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IDU1MzQw ZWEwM2RjLi45MmI5ZGZmMDFlMSAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDI3LDEwNyArMTQyNywxNzAgQEAgaW1hZ2UtLWNvbXB1dGUt bWFwCiAgICJDb21wdXRlIG1hcCBmb3IgSU1BR0Ugc3VpdGFibGUgdG8gYmUgdXNlZCBhcyBp dHMgOm1hcCBwcm9wZXJ0eS4KIFJldHVybiBhIGNvcHkgb2YgOm9yaWdpbmFsLWltYWdlIHRy YW5zZm9ybWVkIGJhc2VkIG9uIElNQUdFJ3MgOnNjYWxlLAogOnJvdGF0aW9uLCBhbmQgOmZs aXAuICBXaGVuIElNQUdFJ3MgOm9yaWdpbmFsLW1hcCBpcyBuaWwsIHJldHVybiBuaWwuCi1X aGVuIDpyb3RhdGlvbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA5MCwgcmV0dXJuIGNvcHkgb2Yg Om9yaWdpbmFsLW1hcC4iCi0gIChwY2FzZS1sZXQqICgob3JpZ2luYWwtbWFwIChpbWFnZS1w cm9wZXJ0eSBpbWFnZSA6b3JpZ2luYWwtbWFwKSkKLSAgICAgICAgICAgICAgIChtYXAgKGNv cHktdHJlZSBvcmlnaW5hbC1tYXAgdCkpCi0gICAgICAgICAgICAgICAoc2NhbGUgKG9yIChp bWFnZS1wcm9wZXJ0eSBpbWFnZSA6c2NhbGUpIDEpKQotICAgICAgICAgICAgICAgKHJvdGF0 aW9uIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSAwKSkKLSAgICAgICAg ICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6ZmxpcCkpCi0gICAgICAgICAg ICAgICAoKGFuZCBzaXplIGAoLHdpZHRoIC4gLGhlaWdodCkpIChpbWFnZS1zaXplIGltYWdl IHQpKSkKLSAgICAod2hlbiAoYW5kIDsgSGFuZGxlIG9ubHkgOTAtZGVncmVlIHJvdGF0aW9u cwotICAgICAgICAgICAoemVyb3AgKG1vZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgKHpl cm9wICglICh0cnVuY2F0ZSByb3RhdGlvbikgOTApKSkKLSAgICAgIDs7IFNJWkUgZml0cyBN QVAgYWZ0ZXIgdHJhbnNmb3JtYXRpb25zLiAgU2NhbGUgTUFQIGJlZm9yZQotICAgICAgOzsg ZmxpcCBhbmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlIGJvdGggbmVlZCBNQVAgdG8gZml0 IFNJWkUuCi0gICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBtYXAgc2NhbGUpCi0gICAgICA7OyBJ biByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGJlZm9yZSBm bGlwLgotICAgICAgKGltYWdlLS1yb3RhdGUtbWFwCi0gICAgICAgbWFwIHJvdGF0aW9uIChp ZiAob3IgKD0gOTAgcm90YXRpb24pICg9IDI3MCByb3RhdGlvbikpCi0gICAgICAgICAgICAg ICAgICAgICAgICA7OyBJZiByb3RhdGVkIMKxOTDCsCwgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0 LgotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgaGVpZ2h0IHdpZHRoKQotICAgICAg ICAgICAgICAgICAgICAgIHNpemUpKQotICAgICAgOzsgQWZ0ZXIgcm90YXRpb24sIHRoZXJl J3Mgbm8gbmVlZCB0byBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgICAoaW1hZ2UtLWZs aXAtbWFwIG1hcCBmbGlwIHNpemUpKQotICAgIG1hcCkpCitXaGVuIHRoZXJlIGlzIG5vIHRy YW5zZm9ybWF0aW9uLCByZXR1cm4gOm9yaWdpbmFsLW1hcC4iCisgICh3aGVuLWxldCAoKG9t YXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpvcmlnaW5hbC1tYXApKSkKKyAgICAobGV0KiAo KHNjYWxlIChsZXQgKChzIChpbWFnZS0tY3VycmVudC1zY2FsaW5nCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1h Z2UtLWltYWdlLXdpdGhvdXQtcGFyYW1ldGVycyBpbWFnZSkpKSkKKyAgICAgICAgICAgICAg ICAgICAgKHVubGVzcyAoPSBzIDEpIHMpKSkKKyAgICAgICAgICAgKHJvdGF0ZSAobGV0ICgo ZCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSkpCisgICAgICAgICAgICAgICAg ICAgICA7OyBIYW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCisgICAgICAgICAgICAg ICAgICAgICAoYW5kIGQgKD0gMCAobW9kIGQgMSkpICg9IDAgKCUgZCA5MCkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICh0cnVuY2F0ZSAobW9kIGQgMzYwKSkpKSkKKyAgICAgICAg ICAgKGZsaXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkKKyAgICAgICAgICAgKG1h cCBvbWFwKQorICAgICAgICAgICBzaXplIGZsaXAtdykKKyAgICAgICh3aGVuIChvciBzY2Fs ZSByb3RhdGUgZmxpcCkKKyAgICAgICAgKHNldHEgbWFwIG5pbAorICAgICAgICAgICAgICBz aXplIChpbWFnZS1zaXplIGltYWdlIHQpCisgICAgICAgICAgICAgIGZsaXAtdyAoY2FyIHNp emUpKQorICAgICAgICAoaWYgKG1lbXFsIHJvdGF0ZSAnKDkwIDI3MCkpCisgICAgICAgICAg ICA7OyBJZiByb3RhdGVkIMKxOTDCsCwgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0LgorICAgICAg ICAgICAgKHNldHEgc2l6ZSAoY29ucyAoY2RyIHNpemUpIChjYXIgc2l6ZSkpKSkKKyAgICAg ICAgOzsgU0laRSBmaXRzIE1BUCBhZnRlciB0cmFuc2Zvcm1hdGlvbnMuICBTY2FsZSBNQVAg YmVmb3JlIGZsaXAKKyAgICAgICAgOzsgYW5kIHJvdGF0ZSBvcGVyYXRpb25zLCBzaW5jZSBi b3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgICAocGNhc2UtZG9saXN0IChgKCxh cmVhICxpZCAscGxpc3QpIG9tYXApCisgICAgICAgICAgKHBjYXNlLWV4aGF1c3RpdmUgYXJl YQorICAgICAgICAgICAgOzsgUmVjdGFuZ2xlIGhvdCBzcG90LgorICAgICAgICAgICAgKGAo cmVjdCAuICgoLHgwIC4gLHkwKSAuICgseDEgLiAseTEpKSkKKyAgICAgICAgICAgICAoaWYg c2NhbGUKKyAgICAgICAgICAgICAgICAgKHNldHEgeDAgKHJvdW5kICgqIHgwIHNjYWxlKSkg eTAgKHJvdW5kICgqIHkwIHNjYWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgeDEgKHJv dW5kICgqIHgxIHNjYWxlKSkgeTEgKHJvdW5kICgqIHkxIHNjYWxlKSkpKQorICAgICAgICAg ICAgIChpZiByb3RhdGUKKyAgICAgICAgICAgICAgICAgKGxldCAoKHAwIChpbWFnZS0tcm90 YXRlLWNvb3JkIHgwIHkwIHJvdGF0ZSBzaXplKSkKKyAgICAgICAgICAgICAgICAgICAgICAg KHAxIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJvdGF0ZSBzaXplKSkpCisgICAgICAg ICAgICAgICAgICAgKHNldHEgeDAgKGNhciBwMCkgeTAgKGNkciBwMCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICB4MSAoY2FyIHAxKSB5MSAoY2RyIHAxKSkpKQorICAgICAgICAgICAg IChpZiBmbGlwCisgICAgICAgICAgICAgICAgIChsZXQgKCh4YSB4MCkgKHhiIHgxKSkKKyAg ICAgICAgICAgICAgICAgICAoc2V0cSB4MCAoLSBmbGlwLXcgeGIpCisgICAgICAgICAgICAg ICAgICAgICAgICAgeDEgKC0gZmxpcC13IHhhKSkpKQorICAgICAgICAgICAgIDs7IE5vcm1h bGl6ZSByZWN0IGNvb3JkcyB0byBiZSB0b3AvbGVmdCBib3R0b20vcmlnaHQuCisgICAgICAg ICAgICAgKGlmICg+IHgwIHgxKQorICAgICAgICAgICAgICAgICAobGV0ICgocncgKGFicyAo LSB4MCB4MSkpKSkKKyAgICAgICAgICAgICAgICAgICAoc2V0cSB4MCAoLSB4MCBydykgeDEg KCsgeDEgcncpKSkpCisgICAgICAgICAgICAgKGlmICg+IHkwIHkxKQorICAgICAgICAgICAg ICAgICAobGV0ICgocmggKGFicyAoLSB5MCB5MSkpKSkKKyAgICAgICAgICAgICAgICAgICAo c2V0cSB5MCAoLSB5MCByaCkgeTEgKCsgeTEgcmgpKSkpCisgICAgICAgICAgICAgKHB1c2gg YCgocmVjdCAuICgoLHgwIC4gLHkwKSAuICgseDEgLiAseTEpKSkgLGlkICxwbGlzdCkKKyAg ICAgICAgICAgICAgICAgICBtYXApKQorICAgICAgICAgICAgOzsgQ2lyY2xlIGhvdCBzcG90 LgorICAgICAgICAgICAgKGAoY2lyY2xlIC4gKCgseDAgLiAseTApIC4gLHIpKQorICAgICAg ICAgICAgIChpZiBzY2FsZQorICAgICAgICAgICAgICAgICAoc2V0cSB4MCAocm91bmQgKCog eDAgc2NhbGUpKSB5MCAocm91bmQgKCogeTAgc2NhbGUpKQorICAgICAgICAgICAgICAgICAg ICAgICByICAocm91bmQgKCogciBzY2FsZSkpKSkKKyAgICAgICAgICAgICAoaWYgcm90YXRl CisgICAgICAgICAgICAgICAgIChsZXQgKChwMCAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MCB5 MCByb3RhdGUgc2l6ZSkpKQorICAgICAgICAgICAgICAgICAgIChzZXRxIHgwIChjYXIgcDAp IHkwIChjZHIgcDApKSkpCisgICAgICAgICAgICAgKGlmIGZsaXAKKyAgICAgICAgICAgICAg ICAgKHNldHEgeDAgKC0gZmxpcC13IHgwKSkpCisgICAgICAgICAgICAgKHB1c2ggYCgoY2ly Y2xlIC4gKCgseDAgLiAseTApIC4gLHIpKSAsaWQgLHBsaXN0KSBtYXApKQorICAgICAgICAg ICAgOzsgUG9seSBob3Qgc3BvdC4KKyAgICAgICAgICAgIChgKHBvbHkgLiAsY29vcmRzKQor ICAgICAgICAgICAgIChzZXRxIGNvb3JkcyAoY29weS1zZXF1ZW5jZSBjb29yZHMpKQorICAg ICAgICAgICAgIChsZXQgKChpIDApIChuIChsZW5ndGggY29vcmRzKSkpCisgICAgICAgICAg ICAgICAod2hpbGUgKDwgaSBuKQorICAgICAgICAgICAgICAgICAobGV0KiAoKGogKDErIGkp KQorICAgICAgICAgICAgICAgICAgICAgICAgKHggKGFyZWYgY29vcmRzIGkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgKHkgKGFyZWYgY29vcmRzIGopKSkKKyAgICAgICAgICAgICAg ICAgICAoaWYgc2NhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgeCAocm91bmQg KCogeCBzY2FsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKHJvdW5kICgq IHkgc2NhbGUpKSkpCisgICAgICAgICAgICAgICAgICAgKGlmIHJvdGF0ZQorICAgICAgICAg ICAgICAgICAgICAgICAobGV0ICgocCAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4IHkgcm90YXRl IHNpemUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB4IChjYXIgcCkgeSAo Y2RyIHApKSkpCisgICAgICAgICAgICAgICAgICAgKGlmIGZsaXAKKyAgICAgICAgICAgICAg ICAgICAgICAgKHNldHEgeCAoLSBmbGlwLXcgeCkpKQorICAgICAgICAgICAgICAgICAgIChh c2V0IGNvb3JkcyBpIHgpCisgICAgICAgICAgICAgICAgICAgKGFzZXQgY29vcmRzIGogeSkp CisgICAgICAgICAgICAgICAgIChzZXRxIGkgKCsgaSAyKSkpKQorICAgICAgICAgICAgIChw dXNoIGAoKHBvbHkgLiAsY29vcmRzKSAsaWQgLHBsaXN0KSBtYXApKQorICAgICAgICAgICAg KSkpCisgICAgICBtYXApKSkKIAogKGRlZnVuIGltYWdlLS1jb21wdXRlLW9yaWdpbmFsLW1h cCAoaW1hZ2UpCiAgICJSZXR1cm4gb3JpZ2luYWwgbWFwIGZvciBJTUFHRS4KIElmIElNQUdF IGxhY2tzIDptYXAgcHJvcGVydHksIHJldHVybiBuaWwuCi1XaGVuIDpyb3RhdGlvbiBpcyBu b3QgYSBtdWx0aXBsZSBvZiA5MCwgcmV0dXJuIGNvcHkgb2YgOm1hcC4iCi0gICh3aGVuIChp bWFnZS1wcm9wZXJ0eSBpbWFnZSA6bWFwKQotICAgIChsZXQqICgoaW1hZ2UtY29weSAoY29w eS10cmVlIGltYWdlIHQpKQotICAgICAgICAgICAobWFwIChpbWFnZS1wcm9wZXJ0eSBpbWFn ZS1jb3B5IDptYXApKQotICAgICAgICAgICAoc2NhbGUgKG9yIChpbWFnZS1wcm9wZXJ0eSBp bWFnZS1jb3B5IDpzY2FsZSkgMSkpCi0gICAgICAgICAgIChyb3RhdGlvbiAob3IgKGltYWdl LXByb3BlcnR5IGltYWdlLWNvcHkgOnJvdGF0aW9uKSAwKSkKLSAgICAgICAgICAgKGZsaXAg KGltYWdlLXByb3BlcnR5IGltYWdlLWNvcHkgOmZsaXApKQotICAgICAgICAgICAoc2l6ZSAo aW1hZ2Utc2l6ZSBpbWFnZS1jb3B5IHQpKSkKLSAgICAgICh3aGVuIChhbmQgOyBIYW5kbGUg b25seSA5MC1kZWdyZWUgcm90YXRpb25zCi0gICAgICAgICAgICAgKHplcm9wIChtb2Qgcm90 YXRpb24gMSkpCi0gICAgICAgICAgICAgKHplcm9wICglICh0cnVuY2F0ZSByb3RhdGlvbikg OTApKSkKK1doZW4gdGhlcmUgaXMgbm8gdHJhbnNmb3JtYXRpb24sIHJldHVybiA6bWFwLiIK KyAgKHdoZW4tbGV0ICgobWFwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6bWFwKSkpCisgICAg KGxldCogKChzY2FsZSAobGV0ICgocyAoaW1hZ2UtLWN1cnJlbnQtc2NhbGluZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGltYWdlLS1pbWFnZS13aXRob3V0LXBhcmFtZXRlcnMgaW1hZ2UpKSkpCisgICAgICAg ICAgICAgICAgICAgICh1bmxlc3MgKD0gcyAxKSBzKSkpCisgICAgICAgICAgIChyb3RhdGUg KGxldCAoKGQgKGltYWdlLXByb3BlcnR5IGltYWdlIDpyb3RhdGlvbikpKQorICAgICAgICAg ICAgICAgICAgICAgOzsgSGFuZGxlIG9ubHkgOTAtZGVncmVlIHJvdGF0aW9ucworICAgICAg ICAgICAgICAgICAgICAgKGFuZCBkICg9IDAgKG1vZCBkIDEpKSAoPSAwICglIGQgOTApKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAodHJ1bmNhdGUgKG1vZCAoLSBkKSAzNjApKSkp KQorICAgICAgICAgICAoZmxpcCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOmZsaXApKQorICAg ICAgICAgICAob21hcCBtYXApCisgICAgICAgICAgIHNpemUgZmxpcC13KQorICAgICAgKHdo ZW4gKG9yIHNjYWxlIHJvdGF0ZSBmbGlwKQorICAgICAgICAoc2V0cSBvbWFwIG5pbAorICAg ICAgICAgICAgICBzaXplIChpbWFnZS1zaXplIGltYWdlIHQpCisgICAgICAgICAgICAgIGZs aXAtdyAoY2FyIHNpemUpKQogICAgICAgICA7OyBJbiByZW5kZXJlZCBpbWFnZXMsIHJvdGF0 aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGJlZm9yZSBmbGlwLgogICAgICAgICA7OyBUbyB1bmRv IHRoZSB0cmFuc2Zvcm1hdGlvbiwgZmxpcCBiZWZvcmUgcm90YXRpbmcuCi0gICAgICAgIDs7 IFNJWkUgZml0cyBNQVAgYmVmb3JlIGl0IGlzIHRyYW5zZm9ybWVkIGJhY2sgdG8gT1JJR0lO QUwtTUFQLgotICAgICAgICA7OyBUaGVyZWZvcmUsIHNjYWxlIE1BUCBhZnRlciBmbGlwIGFu ZCByb3RhdGUgb3BlcmF0aW9ucywgc2luY2UKLSAgICAgICAgOzsgYm90aCBuZWVkIE1BUCB0 byBmaXQgU0laRS4KLSAgICAgICAgKGltYWdlLS1mbGlwLW1hcCBtYXAgZmxpcCBzaXplKQot ICAgICAgICAoaW1hZ2UtLXJvdGF0ZS1tYXAgbWFwICgtIHJvdGF0aW9uKSBzaXplKQotICAg ICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBtYXAgKC8gMS4wIHNjYWxlKSkpCi0gICAgICBtYXAp KSkKLQotKGRlZnVuIGltYWdlLS1zY2FsZS1tYXAgKG1hcCBzY2FsZSkKLSAgIlNjYWxlIE1B UCBhY2NvcmRpbmcgdG8gU0NBTEUuCi1EZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGFuZCByZXR1 cm5zIE1BUC4iCi0gICh1bmxlc3MgKD0gMSBzY2FsZSkKLSAgICAocGNhc2UtZG9saXN0IChg KCxgKCx0eXBlIC4gLGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXApCi0gICAgICAocGNhc2Ut ZXhoYXVzdGl2ZSB0eXBlCi0gICAgICAgICgncmVjdAotICAgICAgICAgKHNldGYgKGNhYXIg Y29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNl dGYgKGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIgY29vcmRzKSBzY2FsZSkpKQotICAg ICAgICAgKHNldGYgKGNhZHIgY29vcmRzKSAocm91bmQgKCogKGNhZHIgY29vcmRzKSBzY2Fs ZSkpKQotICAgICAgICAgKHNldGYgKGNkZHIgY29vcmRzKSAocm91bmQgKCogKGNkZHIgY29v cmRzKSBzY2FsZSkpKSkKLSAgICAgICAgKCdjaXJjbGUKLSAgICAgICAgIChzZXRmIChjYWFy IGNvb3JkcykgKHJvdW5kICgqIChjYWFyIGNvb3Jkcykgc2NhbGUpKSkKLSAgICAgICAgIChz ZXRmIChjZGFyIGNvb3JkcykgKHJvdW5kICgqIChjZGFyIGNvb3Jkcykgc2NhbGUpKSkKLSAg ICAgICAgIChzZXRjZHIgY29vcmRzIChyb3VuZCAoKiAoY2RyIGNvb3Jkcykgc2NhbGUpKSkp Ci0gICAgICAgICgncG9seQotICAgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMp KQotICAgICAgICAgICAoYXNldCBjb29yZHMgaQotICAgICAgICAgICAgICAgICAocm91bmQg KCogKGFyZWYgY29vcmRzIGkpIHNjYWxlKSkpKSkpKSkKLSAgbWFwKQotCi0oZGVmdW4gaW1h Z2UtLXJvdGF0ZS1tYXAgKG1hcCByb3RhdGlvbiBzaXplKQotICAiUm90YXRlIE1BUCBhY2Nv cmRpbmcgdG8gUk9UQVRJT04gYW5kIFNJWkUuCi1EZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGFu ZCByZXR1cm5zIE1BUC4iCi0gICh1bmxlc3MgKHplcm9wIHJvdGF0aW9uKQotICAgIChwY2Fz ZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkKLSAg ICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKLSAgICAgICAgKCdyZWN0Ci0gICAgICAgICAo bGV0ICggeDAgeTAgIDsgTmV3IHVwcGVyIGxlZnQgY29ybmVyCi0gICAgICAgICAgICAgICAg eDEgeTEpIDsgTmV3IGJvdHRvbSByaWdodCBjb3JuZXIKLSAgICAgICAgICAgKHBjYXNlICh0 cnVuY2F0ZSAobW9kIHJvdGF0aW9uIDM2MCkpIDsgU2V0IG5ldyBjb3JuZXJzIHRvLi4uCi0g ICAgICAgICAgICAgKDkwIDsgLi4ub2xkIGJvdHRvbSBsZWZ0IGFuZCB1cHBlciByaWdodAot ICAgICAgICAgICAgICAoc2V0cSB4MCAoY2FhciBjb29yZHMpIHkwIChjZGRyIGNvb3JkcykK LSAgICAgICAgICAgICAgICAgICAgeDEgKGNhZHIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMp KSkKLSAgICAgICAgICAgICAoMTgwIDsgLi4ub2xkIGJvdHRvbSByaWdodCBhbmQgdXBwZXIg bGVmdAotICAgICAgICAgICAgICAoc2V0cSB4MCAoY2FkciBjb29yZHMpIHkwIChjZGRyIGNv b3JkcykKLSAgICAgICAgICAgICAgICAgICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RhciBj b29yZHMpKSkKLSAgICAgICAgICAgICAoMjcwIDsgLi4ub2xkIHVwcGVyIHJpZ2h0IGFuZCBi b3R0b20gbGVmdAotICAgICAgICAgICAgICAoc2V0cSB4MCAoY2FkciBjb29yZHMpIHkwIChj ZGFyIGNvb3JkcykKLSAgICAgICAgICAgICAgICAgICAgeDEgKGNhYXIgY29vcmRzKSB5MSAo Y2RkciBjb29yZHMpKSkpCi0gICAgICAgICAgIChzZXRjYXIgY29vcmRzIChpbWFnZS0tcm90 YXRlLWNvb3JkIHgwIHkwIHJvdGF0aW9uIHNpemUpKQotICAgICAgICAgICAoc2V0Y2RyIGNv b3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MSB5MSByb3RhdGlvbiBzaXplKSkpKQotICAg ICAgICAoJ2NpcmNsZQotICAgICAgICAgKHNldGNhciBjb29yZHMgKGltYWdlLS1yb3RhdGUt Y29vcmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAoY2FhciBjb29yZHMpIChjZGFyIGNv b3Jkcykgcm90YXRpb24gc2l6ZSkpKQotICAgICAgICAoJ3BvbHkKLSAgICAgICAgIChkb3Rp bWVzIChpIChsZW5ndGggY29vcmRzKSkKLSAgICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIp KQotICAgICAgICAgICAgIChwY2FzZS1sZXQgKChgKCx4IC4gLHkpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIChpbWFnZS0tcm90YXRlLWNvb3JkCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAoYXJlZiBjb29yZHMgaSkgKGFyZWYgY29vcmRzICgxKyBpKSkgcm90YXRpb24g c2l6ZSkpKQotICAgICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgeCkKLSAgICAgICAgICAg ICAgIChhc2V0IGNvb3JkcyAoMSsgaSkgeSkpKSkpKSkpCi0gIG1hcCkKKyAgICAgICAgOzsg U0laRSBmaXRzIE1BUCBiZWZvcmUgaXQgaXMgdHJhbnNmb3JtZWQgYmFjayB0bworICAgICAg ICA7OyBPUklHSU5BTC1NQVAuICBUaGVyZWZvcmUsIHNjYWxlIE1BUCBhZnRlciBmbGlwIGFu ZCByb3RhdGUKKyAgICAgICAgOzsgb3BlcmF0aW9ucywgc2luY2UgYm90aCBuZWVkIE1BUCB0 byBmaXQgU0laRS4KKyAgICAgICAgKHBjYXNlLWRvbGlzdCAoYCgsYXJlYSAsaWQgLHBsaXN0 KSBtYXApCisgICAgICAgICAgKHBjYXNlLWV4aGF1c3RpdmUgYXJlYQorICAgICAgICAgICAg OzsgUmVjdGFuZ2xlIGhvdCBzcG90LgorICAgICAgICAgICAgKGAocmVjdCAuICgoLHgwIC4g LHkwKSAuICgseDEgLiAseTEpKSkKKyAgICAgICAgICAgICAoaWYgZmxpcAorICAgICAgICAg ICAgICAgICAobGV0ICgoeGEgeDApICh4YiB4MSkpCisgICAgICAgICAgICAgICAgICAgKHNl dHEgeDAgKC0gZmxpcC13IHhiKQorICAgICAgICAgICAgICAgICAgICAgICAgIHgxICgtIGZs aXAtdyB4YSkpKSkKKyAgICAgICAgICAgICAoaWYgcm90YXRlCisgICAgICAgICAgICAgICAg IChsZXQgKChwMCAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MCB5MCByb3RhdGUgc2l6ZSkpCisg ICAgICAgICAgICAgICAgICAgICAgIChwMSAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MSB5MSBy b3RhdGUgc2l6ZSkpKQorICAgICAgICAgICAgICAgICAgIChzZXRxIHgwIChjYXIgcDApIHkw IChjZHIgcDApCisgICAgICAgICAgICAgICAgICAgICAgICAgeDEgKGNhciBwMSkgeTEgKGNk ciBwMSkpKSkKKyAgICAgICAgICAgICAoaWYgc2NhbGUKKyAgICAgICAgICAgICAgICAgKHNl dHEgeDAgKHJvdW5kICgvIHgwIHNjYWxlKSkgeTAgKHJvdW5kICgvIHkwIHNjYWxlKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgeDEgKHJvdW5kICgvIHgxIHNjYWxlKSkgeTEgKHJvdW5k ICgvIHkxIHNjYWxlKSkpKQorICAgICAgICAgICAgIDs7IE5vcm1hbGl6ZSByZWN0IGNvb3Jk cyB0byBiZSB0b3AvbGVmdCBib3R0b20vcmlnaHQuCisgICAgICAgICAgICAgKGlmICg+IHgw IHgxKQorICAgICAgICAgICAgICAgICAobGV0ICgocncgKGFicyAoLSB4MCB4MSkpKSkKKyAg ICAgICAgICAgICAgICAgICAoc2V0cSB4MCAoLSB4MCBydykgeDEgKCsgeDEgcncpKSkpCisg ICAgICAgICAgICAgKGlmICg+IHkwIHkxKQorICAgICAgICAgICAgICAgICAobGV0ICgocmgg KGFicyAoLSB5MCB5MSkpKSkKKyAgICAgICAgICAgICAgICAgICAoc2V0cSB5MCAoLSB5MCBy aCkgeTEgKCsgeTEgcmgpKSkpCisgICAgICAgICAgICAgKHB1c2ggYCgocmVjdCAuICgoLHgw IC4gLHkwKSAuICgseDEgLiAseTEpKSkgLGlkICxwbGlzdCkKKyAgICAgICAgICAgICAgICAg ICBvbWFwKSkKKyAgICAgICAgICAgIDs7IENpcmNsZSBob3Qgc3BvdC4KKyAgICAgICAgICAg IChgKGNpcmNsZSAuICgoLHgwIC4gLHkwKSAuICxyKSkKKyAgICAgICAgICAgICAoaWYgZmxp cAorICAgICAgICAgICAgICAgICAoc2V0cSB4MCAoLSBmbGlwLXcgeDApKSkKKyAgICAgICAg ICAgICAoaWYgcm90YXRlCisgICAgICAgICAgICAgICAgIChsZXQgKChwMCAoaW1hZ2UtLXJv dGF0ZS1jb29yZCB4MCB5MCByb3RhdGUgc2l6ZSkpKQorICAgICAgICAgICAgICAgICAgIChz ZXRxIHgwIChjYXIgcDApIHkwIChjZHIgcDApKSkpCisgICAgICAgICAgICAgKGlmIHNjYWxl CisgICAgICAgICAgICAgICAgIChzZXRxIHgwIChyb3VuZCAoLyB4MCBzY2FsZSkpIHkwIChy b3VuZCAoLyB5MCBzY2FsZSkpCisgICAgICAgICAgICAgICAgICAgICAgIHIgIChyb3VuZCAo LyByIHNjYWxlKSkpKQorICAgICAgICAgICAgIChwdXNoIGAoKGNpcmNsZSAuICgoLHgwIC4g LHkwKSAuICxyKSkgLGlkICxwbGlzdCkgb21hcCkpCisgICAgICAgICAgICA7OyBQb2x5IGhv dCBzcG90LgorICAgICAgICAgICAgKGAocG9seSAuICxjb29yZHMpCisgICAgICAgICAgICAg KHNldHEgY29vcmRzIChjb3B5LXNlcXVlbmNlIGNvb3JkcykpCisgICAgICAgICAgICAgKGxl dCAoKGkgMCkgKG4gKGxlbmd0aCBjb29yZHMpKSkKKyAgICAgICAgICAgICAgICh3aGlsZSAo PCBpIG4pCisgICAgICAgICAgICAgICAgIChsZXQqICgoaiAoMSsgaSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAoeCAoYXJlZiBjb29yZHMgaSkpCisgICAgICAgICAgICAgICAgICAg ICAgICAoeSAoYXJlZiBjb29yZHMgaikpKQorICAgICAgICAgICAgICAgICAgIChpZiBmbGlw CisgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHggKC0gZmxpcC13IHgpKSkKKyAgICAg ICAgICAgICAgICAgICAoaWYgcm90YXRlCisgICAgICAgICAgICAgICAgICAgICAgIChsZXQg KChwIChpbWFnZS0tcm90YXRlLWNvb3JkIHggeSByb3RhdGUgc2l6ZSkpKQorICAgICAgICAg ICAgICAgICAgICAgICAgIChzZXRxIHggKGNhciBwKSB5IChjZHIgcCkpKSkKKyAgICAgICAg ICAgICAgICAgICAoaWYgc2NhbGUKKyAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgeCAo cm91bmQgKC8geCBzY2FsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKHJv dW5kICgvIHkgc2NhbGUpKSkpCisgICAgICAgICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkg eCkKKyAgICAgICAgICAgICAgICAgICAoYXNldCBjb29yZHMgaiB5KSkKKyAgICAgICAgICAg ICAgICAgKHNldHEgaSAoKyBpIDIpKSkpCisgICAgICAgICAgICAgKHB1c2ggYCgocG9seSAu ICxjb29yZHMpICxpZCAscGxpc3QpIG9tYXApKQorICAgICAgICAgICAgKSkpCisgICAgICBv bWFwKSkpCiAKIChkZWZ1biBpbWFnZS0tcm90YXRlLWNvb3JkICh4IHkgYW5nbGUgc2l6ZSkK ICAgIlJvdGF0ZSBjb29yZGluYXRlcyBYIGFuZCBZIGJ5IEFOR0xFIGluIGltYWdlIG9mIFNJ WkUuCkBAIC0xNTUzLDI3ICsxNjE2LDYgQEAgaW1hZ2UtLXJvdGF0ZS1jb29yZAogICAgICAg ICAgICAgICAgKHkxICgtIHkxKSkpCiAgICAgKGNvbnMgKHJvdW5kIHgxKSAocm91bmQgeTEp KSkpCiAKLShkZWZ1biBpbWFnZS0tZmxpcC1tYXAgKG1hcCBmbGlwIHNpemUpCi0gICJIb3Jp em9udGFsbHkgZmxpcCBNQVAgYWNjb3JkaW5nIHRvIEZMSVAgYW5kIFNJWkUuCi1EZXN0cnVj dGl2ZWx5IG1vZGlmaWVzIGFuZCByZXR1cm5zIE1BUC4iCi0gICh3aGVuIGZsaXAKLSAgICAo cGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4gLGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXAp Ci0gICAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBlCi0gICAgICAgICgncmVjdAotICAgICAg ICAgKGxldCAoKHgwICgtIChjYXIgc2l6ZSkgKGNhZHIgY29vcmRzKSkpCi0gICAgICAgICAg ICAgICAoeTAgKGNkYXIgY29vcmRzKSkKLSAgICAgICAgICAgICAgICh4MSAoLSAoY2FyIHNp emUpIChjYWFyIGNvb3JkcykpKQotICAgICAgICAgICAgICAgKHkxIChjZGRyIGNvb3Jkcykp KQotICAgICAgICAgICAoc2V0Y2FyIGNvb3JkcyAoY29ucyB4MCB5MCkpCi0gICAgICAgICAg IChzZXRjZHIgY29vcmRzIChjb25zIHgxIHkxKSkpKQotICAgICAgICAoJ2NpcmNsZQotICAg ICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAoLSAoY2FyIHNpemUpIChjYWFyIGNvb3Jkcykp KSkKLSAgICAgICAgKCdwb2x5Ci0gICAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3Jk cykpCi0gICAgICAgICAgICh3aGVuICg9IDAgKCUgaSAyKSkKLSAgICAgICAgICAgICAoYXNl dCBjb29yZHMgaSAoLSAoY2FyIHNpemUpIChhcmVmIGNvb3JkcyBpKSkpKSkpKSkpCi0gIG1h cCkKLQogKHByb3ZpZGUgJ2ltYWdlKQogCiA7OzsgaW1hZ2UuZWwgZW5kcyBoZXJlCg== --------------EujwABafJVITOc0pgGa0LBVd-- From debbugs-submit-bounces@debbugs.gnu.org Wed Mar 27 18:51:00 2024 Received: (at 69992) by debbugs.gnu.org; 27 Mar 2024 22:51:00 +0000 Received: from localhost ([127.0.0.1]:38508 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpc6l-0007ap-5C for submit@debbugs.gnu.org; Wed, 27 Mar 2024 18:51:00 -0400 Received: from out-175.mta1.migadu.com ([2001:41d0:203:375::af]:41389) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpc6h-0007a4-6e for 69992@debbugs.gnu.org; Wed, 27 Mar 2024 18:50:58 -0400 References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=breatheoutbreathe.in; s=key1; t=1711579848; 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=gFMWfO63LTjF0aopC2JnpqhWMLukqoBTsRUqisYZM20=; b=etLJSxirezko56p4ctOVsGwIfSP0KfNFWZa7TjYDOc0Tq0CSCevLS31xlxVI2HD2kSI24X 2jnOHK0DXa6g5XKXrEWaQiKM/HxSvuujLLxECUjJzN9QYhh/TGORcL73vRaEkn5UZsX2G9 YWUSKrPb2Utu+d0Aj4c/DdpaWkugnBg= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Joseph Turner To: David Ponce Subject: Re: bug#69992: Minor improvement to image map transformation logic Date: Wed, 27 Mar 2024 15:17:31 -0700 In-reply-to: Message-ID: <87cyrfl265.fsf@breatheoutbreathe.in> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 69992 Cc: Eli Zaretskii , 69992@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) David Ponce writes: > On 27/03/2024 13:50, Eli Zaretskii wrote: >>> Date: Wed, 27 Mar 2024 12:16:11 +0100 >>> From: David Ponce via "Bug reports for GNU Emacs, >>> the Swiss army knife of text editors" >>> >>> Many thanks for this feature, which is particularly useful to >>> automatically recalculate the map of computed images like SVG. You're welcome! >>> To make the code faster, by avoiding multiple scans of the map for >>> copy and parsing, I propose the following patch which factors most of >>> the code into the functions `image--compute-map' and `image--compute >>> -original-map'. I have done some tests on my side which are >>> conclusive. Thanks for reviewing and optimizing this feature. Please share the tests/benchmarks that you've performed. >>> Furthermore, I wonder if the term :base-map would not be more >>> descriptive than :original-map? I am fine with changing :original-map to :base-map. If you want to do this, I suggest making this change in its own commit which also updates the relevant docstrings and manual pages. >> Thanks. >> Joseph, any comments or suggestions? On my machine, not all tests pass with the patch. Please be sure that these three new tests pass: image-create-image-with-map image--compute-map-and-original-map image-transform-map Personally, I find it easier to understand image map transformation when the logic is split into multiple functions. However, the benefit of readability could certainly be outweighed by a noticeable improvement to user experience. Please share some benchmarks. Please keep in mind that `image--delayed-change-size' already debounces image transformation, so this code may not be so performance-critical. Thank you, Joseph > Attached the same patch slightly cleaned up. > > [2. text/x-patch; image.el-compute-map-V1.patch]... From debbugs-submit-bounces@debbugs.gnu.org Wed Mar 27 19:53:37 2024 Received: (at 69992) by debbugs.gnu.org; 27 Mar 2024 23:53:38 +0000 Received: from localhost ([127.0.0.1]:38536 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpd5L-0004m0-Ve for submit@debbugs.gnu.org; Wed, 27 Mar 2024 19:53:37 -0400 Received: from smtp-79.smtpout.orange.fr ([80.12.242.79]:53134 helo=msa.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpd5F-0004kS-S5 for 69992@debbugs.gnu.org; Wed, 27 Mar 2024 19:53:33 -0400 Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id pd5DrHChJjqu9pd5DrQ6sv; Thu, 28 Mar 2024 00:53:28 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711583608; bh=/9wndxdCOhi68zlQTQMZ7D966B6KC685neBWd83ARak=; h=Message-ID:Date:MIME-Version:Subject:To:From; b=fymYhlRpC7961VpcdVl2CkXVGVV5ypTmg9ylTmSJlDKREXO9TAFnNOemnWElYGRyw c8xGinGfdMkdYcywKlYNwbJEk2HjwzdWpHfSWJadyvrlBz8POJcM9UR/eJiG8Q0ft/ JsaTIVhjzWRQzKqAUePvIw3zbmIwkvkj/PCVVo9ciYEjrUJsUrq9bFwUd5n7IXwHu8 fduwnaA/5k0hU3MZ6cDoFx5xX7nhhkMCxl7fw6a8B69OnN+jiQ+CQQXwcJi0kDqeu+ qXvCqPjtUbgbPyXxTQIPiRwqysTDECnp5HgcWhhH9q7r38l9HR121CMYbqlgkcox+A /KZ96AvToa+0A== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Thu, 28 Mar 2024 00:53:28 +0100 X-ME-IP: 2.7.71.181 Message-ID: <0feeb39d-f2c5-4109-adce-23df2ab443a4@orange.fr> Date: Thu, 28 Mar 2024 00:53:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#69992: Minor improvement to image map transformation logic To: Joseph Turner References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> Content-Language: fr, en-US From: David Ponce In-Reply-To: <87cyrfl265.fsf@breatheoutbreathe.in> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 69992 Cc: Eli Zaretskii , 69992@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 27/03/2024 23:17, Joseph Turner wrote: > > David Ponce writes: > >> On 27/03/2024 13:50, Eli Zaretskii wrote: >>>> Date: Wed, 27 Mar 2024 12:16:11 +0100 >>>> From: David Ponce via "Bug reports for GNU Emacs, >>>> the Swiss army knife of text editors" >>>> >>>> Many thanks for this feature, which is particularly useful to >>>> automatically recalculate the map of computed images like SVG. > > You're welcome! > >>>> To make the code faster, by avoiding multiple scans of the map for >>>> copy and parsing, I propose the following patch which factors most of >>>> the code into the functions `image--compute-map' and `image--compute >>>> -original-map'. I have done some tests on my side which are >>>> conclusive. > > Thanks for reviewing and optimizing this feature. Please share the > tests/benchmarks that you've performed. OK >>>> Furthermore, I wonder if the term :base-map would not be more >>>> descriptive than :original-map? > > I am fine with changing :original-map to :base-map. If you want to do > this, I suggest making this change in its own commit which also updates > the relevant docstrings and manual pages. I was just wondering. If everyone is happy with :original-map, I'm fine with it. >>> Thanks. >>> Joseph, any comments or suggestions? > > On my machine, not all tests pass with the patch. Please be sure that > these three new tests pass: > > image-create-image-with-map > image--compute-map-and-original-map > image-transform-map Maybe some tests didn't pass because with my patch the computed hot spots are pushed in a new map in reverse order? I will have a look at this as soon as possible. > Personally, I find it easier to understand image map transformation when > the logic is split into multiple functions. However, the benefit of > readability could certainly be outweighed by a noticeable improvement to > user experience. Please share some benchmarks. In this case, I have the opposite feeling ;-) I find harder to read the logic splits into multiple functions that operate by side effect on hot spots coords. But it could be just me :-) > Please keep in mind that `image--delayed-change-size' already debounces > image transformation, so this code may not be so performance-critical. Related to `image--delayed-change-size', you are probably right. My concern is more about computed images and associated maps (I use such kind of images+maps in computed SVG buttons grids). In this case it could be interesting to keep `create-image' as efficient as possible. > Thank you, You are welcome! Thank you for your feedback! > > Joseph > >> Attached the same patch slightly cleaned up. >> >> [2. text/x-patch; image.el-compute-map-V1.patch]... > From debbugs-submit-bounces@debbugs.gnu.org Thu Mar 28 18:22:21 2024 Received: (at 69992) by debbugs.gnu.org; 28 Mar 2024 22:22:21 +0000 Received: from localhost ([127.0.0.1]:41283 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpy8a-0002uB-P5 for submit@debbugs.gnu.org; Thu, 28 Mar 2024 18:22:21 -0400 Received: from out-67.smtpout.orange.fr ([193.252.22.67]:60670 helo=msa.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpy8V-0002tU-Fq for 69992@debbugs.gnu.org; Thu, 28 Mar 2024 18:22:18 -0400 Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id py8RryHljCHlGpy8Rrm0s3; Thu, 28 Mar 2024 23:22:13 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711664533; bh=OdIiOr/FW/7r/uE3UVXdbeg0zq1ufmOUNbzuf9vmvfk=; h=Message-ID:Date:MIME-Version:From:Subject:To; b=rDL8k9+Sc029ZIjXKylAbyoEN586NocHSG8TnNuuav3xNXGgql12vKdUvCk7RLAfu WJQsm7KCObpFP1fUwOQBZXAsEkXpOlBJr8z4EovcBbqbltp2YStfJ9LLB0xWMUJxCP mBbs5Q4TWKrBnQBoWVWLNU+ZLXR+7nD4SQjmPvPRDQlKlFSZ/NNpz+H0te9Byntezz dxKw8MSmo+htRa76sb2/jcKUHZM1YIAAwQJ5oks0VjF6iatSUtW0dmrQP3BBf47Ey6 G9vXJWUpkNmQMoQANJvo+wy0H8Pa5kdEirvriDojmjLk6NWQMecXWQbNMnFTGQuwwT i3q+ukr6zQZkA== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Thu, 28 Mar 2024 23:22:13 +0100 X-ME-IP: 2.7.71.181 Content-Type: multipart/mixed; boundary="------------1Eg710s2HZvrL6xKWqOIBWUm" Message-ID: Date: Thu, 28 Mar 2024 23:22:10 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: David Ponce Subject: Re: bug#69992: Minor improvement to image map transformation logic To: 69992@debbugs.gnu.org References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> Content-Language: fr, en-US In-Reply-To: <87cyrfl265.fsf@breatheoutbreathe.in> X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 69992 Cc: Eli Zaretskii , Joseph Turner X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------1Eg710s2HZvrL6xKWqOIBWUm Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Re-sent to all (sorry) On 27/03/2024 23:17, Joseph Turner wrote: [...] > On my machine, not all tests pass with the patch. Please be sure that > these three new tests pass: > > image-create-image-with-map > image--compute-map-and-original-map > image-transform-map > > Personally, I find it easier to understand image map transformation when > the logic is split into multiple functions. However, the benefit of > readability could certainly be outweighed by a noticeable improvement to > user experience. Please share some benchmarks. > > Please keep in mind that `image--delayed-change-size' already debounces > image transformation, so this code may not be so performance-critical. Hello, After more work, testing and benchmarks, I can finally confirm that my proposed version of `image--compute-*map' without the logic splits into multiple functions is not significantly faster than the current version with the logic splits into multiple functions :-) What I found interesting after profiling both current and proposed functions is that most of the time is consumed by the call to `image-size'! I also found that the current implementation is not correct when rotation is not a multiple of 90 degrees. In this case, Emacs still scales the image if specified, but ignores rotation and flipping. However, in this case, the `image--compute-*map' functions do not recompute map. The attached new patch fixes the logic to be consistent with Emacs internal implementation, plus some other tweaks to check if a transformation apply before to call the transformation function. I also updated some tests according to functions changes. Here is a possible change log: 2024-03-28 David Ponce * lisp/image.el (image--compute-scaling) (image--compute-rotation): New functions. (image--compute-map, image--compute-original-map): Use them. Ensure all transformations are applied or undone according to what Emacs does internally. Call a transformation function only when needed. Fix doc string. (image--scale-map): Assume effective scale argument. (image--rotate-map): Assume effective rotation argument. (image--rotate-coord): Improve doc string. (image--flip-map): Remove no more used flip argument. * test/lisp/image-tests.el (image-create-image-with-map): Use a valid SVG image otherwise `image-size' will not return a valid value and calculation of scale could fail. (image-transform-map): Update according to changed signature of image--flip-map. This new version passes the `image-create-image-with-map' and `image-transform-map' tests. But on my laptop, the `image--compute-map-and-original-map' fails the same for both the current and proposed version of the functions: F image--compute-map-and-original-map Test ‘image--compute-map’ and ‘image--compute-original-map’. (ert-test-failed ((should (image-tests--map-equal (image--compute-map image) rotated-map)) :form (image-tests--map-equal (((circle ... . 24) "a" (help-echo "A")) ((rect ... 127 . 77) "b" (help-echo "B")) ((poly . [199 161 206 160 213 154 218 146 221 136 ...]) "c" (help-echo "C"))) (((circle ... . 24) "a" (help-echo "A")) ((rect ... 54 . 77) "b" (help-echo "B")) ((poly . [126 161 133 160 140 154 145 146 148 136 ...]) "c" (help-echo "C")))) :value nil)) Thanks! --------------1Eg710s2HZvrL6xKWqOIBWUm Content-Type: text/x-patch; charset=UTF-8; name="image-compute-map-V0.patch" Content-Disposition: attachment; filename="image-compute-map-V0.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IGQ3NDk2 NDg1YWNhLi5iNjA5ZjBmYzM0YyAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDIzLDExNSArMTQyMywxMzkgQEAgaW1hZ2UtcmVjb21wdXRl LW1hcC1wCiAgIDp0eXBlICdib29sZWFuCiAgIDp2ZXJzaW9uICIzMC4xIikKIAorKGRlZnN1 YnN0IGltYWdlLS1jb21wdXRlLXNjYWxpbmcgKGltYWdlKQorICAiUmV0dXJuIHRoZSBjdXJy ZW50IHNjYWxpbmcgb2YgSU1BR0UsIG9yIDEgaWYgbm8gc2NhbGluZy4iCisgIDs7IFRoZSBp bWFnZSBtYXkgYmUgc2NhbGVkIGR1ZSB0byBtYW55IHJlYXNvbnMgKDpzY2FsZSwgOm1heC13 aWR0aCwKKyAgOzsgZXRjKSwgc28gdXNpbmcgYGltYWdlLS1jdXJyZW50LXNjYWxpbmcnIHRv IGdldCByYXRpbyBiZXR3ZWVuIHRoZQorICA7OyBvcmlnaW5hbCBpbWFnZSBzaXplIGFuZCB0 aGUgZGlzcGxheWVkIHNpemUpIGlzIGJldHRlciB0aGFuIGp1c3QKKyAgOzsgdXNpbmcgdGhl IDpzY2FsZSB2YWx1ZS4gVW5mb3J0dW5hdGVseSBlYWNoIGNhbGwgdG8gYGltYWdlX3NpemUn IGlzCisgIDs7IHZlcnkgcmVzb3VyY2UgY29uc3VtaW5nIQorICA7OyAoaW1hZ2UtLWN1cnJl bnQtc2NhbGluZworICA7OyAgaW1hZ2UgKGltYWdlLS1pbWFnZS13aXRob3V0LXBhcmFtZXRl cnMgaW1hZ2UpKQorICAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpzY2FsZSkgMSkpCisK KyhkZWZzdWJzdCBpbWFnZS0tY29tcHV0ZS1yb3RhdGlvbiAoaW1hZ2UpCisgICJSZXR1cm4g dGhlIGN1cnJlbnQgcm90YXRpb24gb2YgSU1BR0UsIG9yIDAgaWYgbm8gcm90YXRpb24uCitB bHNvIHJldHVybiBuaWwgaWYgcm90YXRpb24gaXMgbm90IGEgbXVsdGlwbGVzIG9mIDkwIGRl Z3JlZXMgKDAsIDkwLAorMTgwWy0xODBdIGFuZCAyNzBbLTkwXSkuIgorICAobGV0ICgoZGVn cmVlcyAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSkpCisgICAgKGFuZCBkZWdy ZWVzICg9IDAgKG1vZCBkZWdyZWVzIDEpKQorICAgICAgICAgKGNhciAobWVtcWwgKHRydW5j YXRlIChtb2QgZGVncmVlcyAzNjApKSAnKDAgOTAgMTgwIDI3MCkpKSkpKQorCiAoZGVmdW4g aW1hZ2UtLWNvbXB1dGUtbWFwIChpbWFnZSkKICAgIkNvbXB1dGUgbWFwIGZvciBJTUFHRSBz dWl0YWJsZSB0byBiZSB1c2VkIGFzIGl0cyA6bWFwIHByb3BlcnR5LgotUmV0dXJuIGEgY29w eSBvZiA6b3JpZ2luYWwtaW1hZ2UgdHJhbnNmb3JtZWQgYmFzZWQgb24gSU1BR0UncyA6c2Nh bGUsCitSZXR1cm4gYSBjb3B5IG9mIDpvcmlnaW5hbC1tYXAgdHJhbnNmb3JtZWQgYmFzZWQg b24gSU1BR0UncyA6c2NhbGUsCiA6cm90YXRpb24sIGFuZCA6ZmxpcC4gIFdoZW4gSU1BR0Un cyA6b3JpZ2luYWwtbWFwIGlzIG5pbCwgcmV0dXJuIG5pbC4KIFdoZW4gOnJvdGF0aW9uIGlz IG5vdCBhIG11bHRpcGxlIG9mIDkwLCByZXR1cm4gY29weSBvZiA6b3JpZ2luYWwtbWFwLiIK LSAgKHBjYXNlLWxldCogKChvcmlnaW5hbC1tYXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpv cmlnaW5hbC1tYXApKQotICAgICAgICAgICAgICAgKG1hcCAoY29weS10cmVlIG9yaWdpbmFs LW1hcCB0KSkKLSAgICAgICAgICAgICAgIChzY2FsZSAob3IgKGltYWdlLXByb3BlcnR5IGlt YWdlIDpzY2FsZSkgMSkpCi0gICAgICAgICAgICAgICAocm90YXRpb24gKG9yIChpbWFnZS1w cm9wZXJ0eSBpbWFnZSA6cm90YXRpb24pIDApKQotICAgICAgICAgICAgICAgKGZsaXAgKGlt YWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkKLSAgICAgICAgICAgICAgICgoYW5kIHNpemUg YCgsd2lkdGggLiAsaGVpZ2h0KSkgKGltYWdlLXNpemUgaW1hZ2UgdCkpKQotICAgICh3aGVu IChhbmQgOyBIYW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCi0gICAgICAgICAgICh6 ZXJvcCAobW9kIHJvdGF0aW9uIDEpKQotICAgICAgICAgICAoemVyb3AgKCUgKHRydW5jYXRl IHJvdGF0aW9uKSA5MCkpKQotICAgICAgOzsgU0laRSBmaXRzIE1BUCBhZnRlciB0cmFuc2Zv cm1hdGlvbnMuICBTY2FsZSBNQVAgYmVmb3JlCi0gICAgICA7OyBmbGlwIGFuZCByb3RhdGUg b3BlcmF0aW9ucywgc2luY2UgYm90aCBuZWVkIE1BUCB0byBmaXQgU0laRS4KLSAgICAgIChp bWFnZS0tc2NhbGUtbWFwIG1hcCBzY2FsZSkKKyAgKHdoZW4tbGV0ICgobWFwIChpbWFnZS1w cm9wZXJ0eSBpbWFnZSA6b3JpZ2luYWwtbWFwKSkpCisgICAgKHNldHEgbWFwIChjb3B5LXRy ZWUgbWFwIHQpKQorICAgIChsZXQqICgoc2NhbGUgKGltYWdlLS1jb21wdXRlLXNjYWxpbmcg aW1hZ2UpKQorICAgICAgICAgICAocm90YXRpb24gKGltYWdlLS1jb21wdXRlLXJvdGF0aW9u IGltYWdlKSkKKyAgICAgICAgICAgOzsgSW1hZ2UgaXMgZmxpcHBlZCBvbmx5IGlmIHJvdGF0 aW9uIGlzIGEgbXVsdGlwbGUgb2YgOTAsCisgICAgICAgICAgIDs7IGluY2x1ZGluZyAwLgor ICAgICAgICAgICAoZmxpcCAoYW5kIHJvdGF0aW9uIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6 ZmxpcCkpKQorICAgICAgICAgICAoc2l6ZSAoaW1hZ2Utc2l6ZSBpbWFnZSB0KSkpCisgICAg ICA7OyBTSVpFIGZpdHMgTUFQIGFmdGVyIHRyYW5zZm9ybWF0aW9ucy4gIFNjYWxlIE1BUCBi ZWZvcmUgZmxpcCBhbmQKKyAgICAgIDs7IHJvdGF0ZSBvcGVyYXRpb25zLCBzaW5jZSBib3Ro IG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgKHVubGVzcyAoPSBzY2FsZSAxKQorICAg ICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBtYXAgc2NhbGUpKQogICAgICAgOzsgSW4gcmVuZGVy ZWQgaW1hZ2VzLCByb3RhdGlvbiBpcyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KLSAg ICAgIChpbWFnZS0tcm90YXRlLW1hcAotICAgICAgIG1hcCByb3RhdGlvbiAoaWYgKG9yICg9 IDkwIHJvdGF0aW9uKSAoPSAyNzAgcm90YXRpb24pKQorICAgICAgKHdoZW4gKG1lbXFsIHJv dGF0aW9uICcoOTAgMTgwIDI3MCkpCisgICAgICAgIChpbWFnZS0tcm90YXRlLW1hcAorICAg ICAgICAgbWFwIHJvdGF0aW9uIChpZiAoPSByb3RhdGlvbiAxODApCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemUKICAgICAgICAgICAgICAgICAgICAgICAgIDs7IElmIHJvdGF0 ZWQgwrE5MMKwLCBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgICAgICAgICAgICAgICAg ICAgICAoY29ucyBoZWlnaHQgd2lkdGgpCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZSkp CisgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAoY2RyIHNpemUpIChjYXIgc2l6ZSkp KSkpCiAgICAgICA7OyBBZnRlciByb3RhdGlvbiwgdGhlcmUncyBubyBuZWVkIHRvIHN3YXAg d2lkdGggYW5kIGhlaWdodC4KLSAgICAgIChpbWFnZS0tZmxpcC1tYXAgbWFwIGZsaXAgc2l6 ZSkpCisgICAgICAod2hlbiBmbGlwCisgICAgICAgIChpbWFnZS0tZmxpcC1tYXAgbWFwIHNp emUpKSkKICAgICBtYXApKQogCiAoZGVmdW4gaW1hZ2UtLWNvbXB1dGUtb3JpZ2luYWwtbWFw IChpbWFnZSkKICAgIlJldHVybiBvcmlnaW5hbCBtYXAgZm9yIElNQUdFLgogSWYgSU1BR0Ug bGFja3MgOm1hcCBwcm9wZXJ0eSwgcmV0dXJuIG5pbC4KLVdoZW4gOnJvdGF0aW9uIGlzIG5v dCBhIG11bHRpcGxlIG9mIDkwLCByZXR1cm4gY29weSBvZiA6bWFwLiIKLSAgKHdoZW4gKGlt YWdlLXByb3BlcnR5IGltYWdlIDptYXApCi0gICAgKGxldCogKChvcmlnaW5hbC1tYXAgKGNv cHktdHJlZSAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOm1hcCkgdCkpCi0gICAgICAgICAgIChz Y2FsZSAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpzY2FsZSkgMSkpCi0gICAgICAgICAg IChyb3RhdGlvbiAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpyb3RhdGlvbikgMCkpCi0g ICAgICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6ZmxpcCkpCitXaGVuIHRo ZXJlIGlzIG5vIHRyYW5zZm9ybWF0aW9uLCByZXR1cm4gY29weSBvZiA6bWFwLiIKKyAgKHdo ZW4tbGV0ICgob3JpZ2luYWwtbWFwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6bWFwKSkpCisg ICAgKHNldHEgb3JpZ2luYWwtbWFwIChjb3B5LXRyZWUgb3JpZ2luYWwtbWFwIHQpKQorICAg IChsZXQqICgoc2NhbGUgKGltYWdlLS1jb21wdXRlLXNjYWxpbmcgaW1hZ2UpKQorICAgICAg ICAgICAocm90YXRpb24gKGltYWdlLS1jb21wdXRlLXJvdGF0aW9uIGltYWdlKSkKKyAgICAg ICAgICAgOzsgSW1hZ2UgaXMgZmxpcHBlZCBvbmx5IGlmIHJvdGF0aW9uIGlzIGEgbXVsdGlw bGUgb2YgOTAKKyAgICAgICAgICAgOzsgaW5jbHVkaW5nIDAuCisgICAgICAgICAgIChmbGlw IChhbmQgcm90YXRpb24gKGltYWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkpCiAgICAgICAg ICAgIChzaXplIChpbWFnZS1zaXplIGltYWdlIHQpKSkKLSAgICAgICh3aGVuIChhbmQgOyBI YW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCi0gICAgICAgICAgICAgKHplcm9wICht b2Qgcm90YXRpb24gMSkpCi0gICAgICAgICAgICAgKHplcm9wICglICh0cnVuY2F0ZSByb3Rh dGlvbikgOTApKSkKLSAgICAgICAgOzsgSW4gcmVuZGVyZWQgaW1hZ2VzLCByb3RhdGlvbiBp cyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KLSAgICAgICAgOzsgVG8gdW5kbyB0aGUg dHJhbnNmb3JtYXRpb24sIGZsaXAgYmVmb3JlIHJvdGF0aW5nLiAgU0laRSBmaXRzCi0gICAg ICAgIDs7IE9SSUdJTkFMLU1BUCBiZWZvcmUgdHJhbnNmb3JtYXRpb25zIGFyZSBhcHBsaWVk LiAgVGhlcmVmb3JlLAotICAgICAgICA7OyBzY2FsZSBPUklHSU5BTC1NQVAgYWZ0ZXIgZmxp cCBhbmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlCi0gICAgICAgIDs7IGJvdGggbmVlZCBP UklHSU5BTC1NQVAgdG8gZml0IFNJWkUuCi0gICAgICAgIChpbWFnZS0tZmxpcC1tYXAgb3Jp Z2luYWwtbWFwIGZsaXAgc2l6ZSkKLSAgICAgICAgKGltYWdlLS1yb3RhdGUtbWFwIG9yaWdp bmFsLW1hcCAoLSByb3RhdGlvbikgc2l6ZSkKLSAgICAgICAgKGltYWdlLS1zY2FsZS1tYXAg b3JpZ2luYWwtbWFwICgvIDEuMCBzY2FsZSkpKQotICAgICAgb3JpZ2luYWwtbWFwKSkpCisg ICAgICA7OyBJbiByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBsaWVk IGJlZm9yZSBmbGlwLgorICAgICAgOzsgVG8gdW5kbyB0aGUgdHJhbnNmb3JtYXRpb24sIGZs aXAgYmVmb3JlIHJvdGF0aW5nLiAgU0laRSBmaXRzCisgICAgICA7OyBPUklHSU5BTC1NQVAg YmVmb3JlIHRyYW5zZm9ybWF0aW9ucyBhcmUgYXBwbGllZC4gIFRoZXJlZm9yZSwKKyAgICAg IDs7IHNjYWxlIE9SSUdJTkFMLU1BUCBhZnRlciBmbGlwIGFuZCByb3RhdGUgb3BlcmF0aW9u cywgc2luY2UKKyAgICAgIDs7IGJvdGggbmVlZCBPUklHSU5BTC1NQVAgdG8gZml0IFNJWkUu CisgICAgICA7OyBJbiByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBs aWVkIGJlZm9yZSBmbGlwLgorICAgICAgKHdoZW4gZmxpcAorICAgICAgICAoaW1hZ2UtLWZs aXAtbWFwIG9yaWdpbmFsLW1hcCBzaXplKSkKKyAgICAgICh3aGVuIChtZW1xbCByb3RhdGlv biAnKDkwIDE4MCAyNzApKQorICAgICAgICAoaW1hZ2UtLXJvdGF0ZS1tYXAgb3JpZ2luYWwt bWFwICgtIHJvdGF0aW9uKSBzaXplKSkKKyAgICAgICh1bmxlc3MgKD0gc2NhbGUgMSkKKyAg ICAgICAgKGltYWdlLS1zY2FsZS1tYXAgb3JpZ2luYWwtbWFwICgvIDEuMCBzY2FsZSkpKSkK KyAgICBvcmlnaW5hbC1tYXApKQogCiAoZGVmdW4gaW1hZ2UtLXNjYWxlLW1hcCAobWFwIHNj YWxlKQogICAiU2NhbGUgTUFQIGFjY29yZGluZyB0byBTQ0FMRS4KIERlc3RydWN0aXZlbHkg bW9kaWZpZXMgYW5kIHJldHVybnMgTUFQLiIKLSAgKHVubGVzcyAoPSAxIHNjYWxlKQotICAg IChwY2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1h cCkKLSAgICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKLSAgICAgICAgKCdyZWN0Ci0gICAg ICAgICAoc2V0ZiAoY2FhciBjb29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNjYWxl KSkpCi0gICAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAoY2RhciBjb29y ZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2FkciBjb29yZHMpIChyb3VuZCAoKiAo Y2FkciBjb29yZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2RkciBjb29yZHMpIChy b3VuZCAoKiAoY2RkciBjb29yZHMpIHNjYWxlKSkpKQotICAgICAgICAoJ2NpcmNsZQotICAg ICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBzY2Fs ZSkpKQotICAgICAgICAgKHNldGYgKGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIgY29v cmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNldGNkciBjb29yZHMgKHJvdW5kICgqIChjZHIg Y29vcmRzKSBzY2FsZSkpKSkKLSAgICAgICAgKCdwb2x5Ci0gICAgICAgICAoZG90aW1lcyAo aSAobGVuZ3RoIGNvb3JkcykpCi0gICAgICAgICAgIChhc2V0IGNvb3JkcyBpCi0gICAgICAg ICAgICAgICAgIChyb3VuZCAoKiAoYXJlZiBjb29yZHMgaSkgc2NhbGUpKSkpKSkpKQorICAo cGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4gLGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXAp CisgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlwZQorICAgICAgKCdyZWN0CisgICAgICAgKHNl dGYgKGNhYXIgY29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBzY2FsZSkpKQorICAg ICAgIChzZXRmIChjZGFyIGNvb3JkcykgKHJvdW5kICgqIChjZGFyIGNvb3Jkcykgc2NhbGUp KSkKKyAgICAgICAoc2V0ZiAoY2FkciBjb29yZHMpIChyb3VuZCAoKiAoY2FkciBjb29yZHMp IHNjYWxlKSkpCisgICAgICAgKHNldGYgKGNkZHIgY29vcmRzKSAocm91bmQgKCogKGNkZHIg Y29vcmRzKSBzY2FsZSkpKSkKKyAgICAgICgnY2lyY2xlCisgICAgICAgKHNldGYgKGNhYXIg Y29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBzY2FsZSkpKQorICAgICAgIChzZXRm IChjZGFyIGNvb3JkcykgKHJvdW5kICgqIChjZGFyIGNvb3Jkcykgc2NhbGUpKSkKKyAgICAg ICAoc2V0Y2RyIGNvb3JkcyAocm91bmQgKCogKGNkciBjb29yZHMpIHNjYWxlKSkpKQorICAg ICAgKCdwb2x5CisgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQorICAgICAg ICAgKGFzZXQgY29vcmRzIGkKKyAgICAgICAgICAgICAgIChyb3VuZCAoKiAoYXJlZiBjb29y ZHMgaSkgc2NhbGUpKSkpKSkpCiAgIG1hcCkKIAogKGRlZnVuIGltYWdlLS1yb3RhdGUtbWFw IChtYXAgcm90YXRpb24gc2l6ZSkKICAgIlJvdGF0ZSBNQVAgYWNjb3JkaW5nIHRvIFJPVEFU SU9OIGFuZCBTSVpFLgorUk9UQVRJT04gbXVzdCBiZSBhIG5vbi16ZXJvIG11bHRpcGxlIG9m IDkwLgogRGVzdHJ1Y3RpdmVseSBtb2RpZmllcyBhbmQgcmV0dXJucyBNQVAuIgotICAodW5s ZXNzICh6ZXJvcCByb3RhdGlvbikKLSAgICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4g LGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXApCi0gICAgICAocGNhc2UtZXhoYXVzdGl2ZSB0 eXBlCi0gICAgICAgICgncmVjdAotICAgICAgICAgKGxldCAoIHgwIHkwICA7IE5ldyB1cHBl ciBsZWZ0IGNvcm5lcgotICAgICAgICAgICAgICAgIHgxIHkxKSA7IE5ldyBib3R0b20gcmln aHQgY29ybmVyCi0gICAgICAgICAgIChwY2FzZSAodHJ1bmNhdGUgKG1vZCByb3RhdGlvbiAz NjApKSA7IFNldCBuZXcgY29ybmVycyB0by4uLgotICAgICAgICAgICAgICg5MCA7IC4uLm9s ZCBib3R0b20gbGVmdCBhbmQgdXBwZXIgcmlnaHQKLSAgICAgICAgICAgICAgKHNldHEgeDAg KGNhYXIgY29vcmRzKSB5MCAoY2RkciBjb29yZHMpCi0gICAgICAgICAgICAgICAgICAgIHgx IChjYWRyIGNvb3JkcykgeTEgKGNkYXIgY29vcmRzKSkpCi0gICAgICAgICAgICAgKDE4MCA7 IC4uLm9sZCBib3R0b20gcmlnaHQgYW5kIHVwcGVyIGxlZnQKLSAgICAgICAgICAgICAgKHNl dHEgeDAgKGNhZHIgY29vcmRzKSB5MCAoY2RkciBjb29yZHMpCi0gICAgICAgICAgICAgICAg ICAgIHgxIChjYWFyIGNvb3JkcykgeTEgKGNkYXIgY29vcmRzKSkpCi0gICAgICAgICAgICAg KDI3MCA7IC4uLm9sZCB1cHBlciByaWdodCBhbmQgYm90dG9tIGxlZnQKLSAgICAgICAgICAg ICAgKHNldHEgeDAgKGNhZHIgY29vcmRzKSB5MCAoY2RhciBjb29yZHMpCi0gICAgICAgICAg ICAgICAgICAgIHgxIChjYWFyIGNvb3JkcykgeTEgKGNkZHIgY29vcmRzKSkpKQotICAgICAg ICAgICAoc2V0Y2FyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MCB5MCByb3RhdGlv biBzaXplKSkKLSAgICAgICAgICAgKHNldGNkciBjb29yZHMgKGltYWdlLS1yb3RhdGUtY29v cmQgeDEgeTEgcm90YXRpb24gc2l6ZSkpKSkKLSAgICAgICAgKCdjaXJjbGUKLSAgICAgICAg IChzZXRjYXIgY29vcmRzIChpbWFnZS0tcm90YXRlLWNvb3JkCi0gICAgICAgICAgICAgICAg ICAgICAgICAgKGNhYXIgY29vcmRzKSAoY2RhciBjb29yZHMpIHJvdGF0aW9uIHNpemUpKSkK LSAgICAgICAgKCdwb2x5Ci0gICAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3Jkcykp Ci0gICAgICAgICAgICh3aGVuICg9IDAgKCUgaSAyKSkKLSAgICAgICAgICAgICAocGNhc2Ut bGV0ICgoYCgseCAuICx5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2UtLXJv dGF0ZS1jb29yZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZWYgY29vcmRzIGkp IChhcmVmIGNvb3JkcyAoMSsgaSkpIHJvdGF0aW9uIHNpemUpKSkKLSAgICAgICAgICAgICAg IChhc2V0IGNvb3JkcyBpIHgpCi0gICAgICAgICAgICAgICAoYXNldCBjb29yZHMgKDErIGkp IHkpKSkpKSkpKQorICAoc2V0cSByb3RhdGlvbiAobW9kIHJvdGF0aW9uIDM2MCkpCisgIChw Y2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkK KyAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBlCisgICAgICAoJ3JlY3QKKyAgICAgICAobGV0 ICggeDAgeTAgIDsgTmV3IHVwcGVyIGxlZnQgY29ybmVyCisgICAgICAgICAgICAgIHgxIHkx KSA7IE5ldyBib3R0b20gcmlnaHQgY29ybmVyCisgICAgICAgICAocGNhc2Ugcm90YXRpb24g OyBTZXQgbmV3IGNvcm5lcnMgdG8uLi4KKyAgICAgICAgICAgKDkwIDsgLi4ub2xkIGJvdHRv bSBsZWZ0IGFuZCB1cHBlciByaWdodAorICAgICAgICAgICAgKHNldHEgeDAgKGNhYXIgY29v cmRzKSB5MCAoY2RkciBjb29yZHMpCisgICAgICAgICAgICAgICAgICB4MSAoY2FkciBjb29y ZHMpIHkxIChjZGFyIGNvb3JkcykpKQorICAgICAgICAgICAoMTgwIDsgLi4ub2xkIGJvdHRv bSByaWdodCBhbmQgdXBwZXIgbGVmdAorICAgICAgICAgICAgKHNldHEgeDAgKGNhZHIgY29v cmRzKSB5MCAoY2RkciBjb29yZHMpCisgICAgICAgICAgICAgICAgICB4MSAoY2FhciBjb29y ZHMpIHkxIChjZGFyIGNvb3JkcykpKQorICAgICAgICAgICAoMjcwIDsgLi4ub2xkIHVwcGVy IHJpZ2h0IGFuZCBib3R0b20gbGVmdAorICAgICAgICAgICAgKHNldHEgeDAgKGNhZHIgY29v cmRzKSB5MCAoY2RhciBjb29yZHMpCisgICAgICAgICAgICAgICAgICB4MSAoY2FhciBjb29y ZHMpIHkxIChjZGRyIGNvb3JkcykpKSkKKyAgICAgICAgIChzZXRjYXIgY29vcmRzIChpbWFn ZS0tcm90YXRlLWNvb3JkIHgwIHkwIHJvdGF0aW9uIHNpemUpKQorICAgICAgICAgKHNldGNk ciBjb29yZHMgKGltYWdlLS1yb3RhdGUtY29vcmQgeDEgeTEgcm90YXRpb24gc2l6ZSkpKSkK KyAgICAgICgnY2lyY2xlCisgICAgICAgKHNldGNhciBjb29yZHMgKGltYWdlLS1yb3RhdGUt Y29vcmQKKyAgICAgICAgICAgICAgICAgICAgICAgKGNhYXIgY29vcmRzKSAoY2RhciBjb29y ZHMpIHJvdGF0aW9uIHNpemUpKSkKKyAgICAgICgncG9seQorICAgICAgIChkb3RpbWVzIChp IChsZW5ndGggY29vcmRzKSkKKyAgICAgICAgICh3aGVuICg9IDAgKCUgaSAyKSkKKyAgICAg ICAgICAgKHBjYXNlLWxldCAoKGAoLHggLiAseSkKKyAgICAgICAgICAgICAgICAgICAgICAg IChpbWFnZS0tcm90YXRlLWNvb3JkCisgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZWYg Y29vcmRzIGkpIChhcmVmIGNvb3JkcyAoMSsgaSkpIHJvdGF0aW9uIHNpemUpKSkKKyAgICAg ICAgICAgICAoYXNldCBjb29yZHMgaSB4KQorICAgICAgICAgICAgIChhc2V0IGNvb3JkcyAo MSsgaSkgeSkpKSkpKSkKICAgbWFwKQogCiAoZGVmdW4gaW1hZ2UtLXJvdGF0ZS1jb29yZCAo eCB5IGFuZ2xlIHNpemUpCiAgICJSb3RhdGUgY29vcmRpbmF0ZXMgWCBhbmQgWSBieSBBTkdM RSBpbiBpbWFnZSBvZiBTSVpFLgotQU5HTEUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkwLiAg UmV0dXJucyBhIGNvbnMgY2VsbCBvZiByb3VuZGVkCi1jb29yZGluYXRlcyAoWDEgWTEpLiIK K0FOR0xFIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5MCBpbiBbOTAgMTgwIDI3MF0uICBSZXR1 cm5zIGEgY29ucyBjZWxsIG9mCityb3VuZGVkIGNvb3JkaW5hdGVzIChYMSBZMSkuIgogICAo cGNhc2UtbGV0KiAoKHJhZGlhbiAoKiAoLyBhbmdsZSAxODAuMCkgZmxvYXQtcGkpKQogICAg ICAgICAgICAgICAgKGAoLHdpZHRoIC4gLGhlaWdodCkgc2l6ZSkKICAgICAgICAgICAgICAg IDs7IHkgaXMgcG9zaXRpdmUsIGJ1dCB3ZSBhcmUgaW4gdGhlIGJvdHRvbS1yaWdodCBxdWFk cmFudApAQCAtMTU1MiwyNSArMTU3NiwyNCBAQCBpbWFnZS0tcm90YXRlLWNvb3JkCiAgICAg ICAgICAgICAgICAoeTEgKC0geTEpKSkKICAgICAoY29ucyAocm91bmQgeDEpIChyb3VuZCB5 MSkpKSkKIAotKGRlZnVuIGltYWdlLS1mbGlwLW1hcCAobWFwIGZsaXAgc2l6ZSkKLSAgIkhv cml6b250YWxseSBmbGlwIE1BUCBhY2NvcmRpbmcgdG8gRkxJUCBhbmQgU0laRS4KKyhkZWZ1 biBpbWFnZS0tZmxpcC1tYXAgKG1hcCBzaXplKQorICAiSG9yaXpvbnRhbGx5IGZsaXAgTUFQ IGFjY29yZGluZyB0byBTSVpFLgogRGVzdHJ1Y3RpdmVseSBtb2RpZmllcyBhbmQgcmV0dXJu cyBNQVAuIgotICAod2hlbiBmbGlwCi0gICAgKHBjYXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAu ICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQotICAgICAgKHBjYXNlLWV4aGF1c3RpdmUg dHlwZQotICAgICAgICAoJ3JlY3QKLSAgICAgICAgIChsZXQgKCh4MCAoLSAoY2FyIHNpemUp IChjYWRyIGNvb3JkcykpKQotICAgICAgICAgICAgICAgKHkwIChjZGFyIGNvb3JkcykpCi0g ICAgICAgICAgICAgICAoeDEgKC0gKGNhciBzaXplKSAoY2FhciBjb29yZHMpKSkKLSAgICAg ICAgICAgICAgICh5MSAoY2RkciBjb29yZHMpKSkKLSAgICAgICAgICAgKHNldGNhciBjb29y ZHMgKGNvbnMgeDAgeTApKQotICAgICAgICAgICAoc2V0Y2RyIGNvb3JkcyAoY29ucyB4MSB5 MSkpKSkKLSAgICAgICAgKCdjaXJjbGUKLSAgICAgICAgIChzZXRmIChjYWFyIGNvb3Jkcykg KC0gKGNhciBzaXplKSAoY2FhciBjb29yZHMpKSkpCi0gICAgICAgICgncG9seQotICAgICAg ICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAgICAod2hlbiAoPSAw ICglIGkgMikpCi0gICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgKC0gKGNhciBzaXplKSAo YXJlZiBjb29yZHMgaSkpKSkpKSkpKQorICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4g LGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXApCisgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlw ZQorICAgICAgKCdyZWN0CisgICAgICAgKGxldCAoKHgwICgtIChjYXIgc2l6ZSkgKGNhZHIg Y29vcmRzKSkpCisgICAgICAgICAgICAgKHkwIChjZGFyIGNvb3JkcykpCisgICAgICAgICAg ICAgKHgxICgtIChjYXIgc2l6ZSkgKGNhYXIgY29vcmRzKSkpCisgICAgICAgICAgICAgKHkx IChjZGRyIGNvb3JkcykpKQorICAgICAgICAgKHNldGNhciBjb29yZHMgKGNvbnMgeDAgeTAp KQorICAgICAgICAgKHNldGNkciBjb29yZHMgKGNvbnMgeDEgeTEpKSkpCisgICAgICAoJ2Np cmNsZQorICAgICAgIChzZXRmIChjYWFyIGNvb3JkcykgKC0gKGNhciBzaXplKSAoY2FhciBj b29yZHMpKSkpCisgICAgICAoJ3BvbHkKKyAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNv b3JkcykpCisgICAgICAgICAod2hlbiAoPSAwICglIGkgMikpCisgICAgICAgICAgIChhc2V0 IGNvb3JkcyBpICgtIChjYXIgc2l6ZSkgKGFyZWYgY29vcmRzIGkpKSkpKSkpKQogICBtYXAp CiAKIChwcm92aWRlICdpbWFnZSkKZGlmZiAtLWdpdCBhL3Rlc3QvbGlzcC9pbWFnZS10ZXN0 cy5lbCBiL3Rlc3QvbGlzcC9pbWFnZS10ZXN0cy5lbAppbmRleCA2YTVmMDNlMzhhMC4uMDIw NzgxZWZmNTAgMTAwNjQ0Ci0tLSBhL3Rlc3QvbGlzcC9pbWFnZS10ZXN0cy5lbAorKysgYi90 ZXN0L2xpc3AvaW1hZ2UtdGVzdHMuZWwKQEAgLTE1OCw3ICsxNTgsNyBAQCBpbWFnZS1yb3Rh dGUKIChlcnQtZGVmdGVzdCBpbWFnZS1jcmVhdGUtaW1hZ2Utd2l0aC1tYXAgKCkKICAgIlRl c3QgdGhhdCBgY3JlYXRlLWltYWdlJyBjb3JyZWN0bHkgYWRkcyA6bWFwIGFuZC9vciA6b3Jp Z2luYWwtbWFwLiIKICAgKHNraXAtdW5sZXNzIChkaXNwbGF5LWltYWdlcy1wKSkKLSAgKGxl dCAoKGRhdGEgImZvbyIpCisgIChsZXQgKChkYXRhICI8c3ZnIHdpZHRoPVwiMzBcIiBoZWln aHQ9XCIzMFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIw MDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+ PC9zdmc+IikKICAgICAgICAgKG1hcCAnKCgoY2lyY2xlICgxIC4gIDEpIC4gIDEpIGEpKSkK ICAgICAgICAgKG9yaWdpbmFsLW1hcCAnKCgoY2lyY2xlICgyIC4gIDIpIC4gIDIpIGEpKSkK ICAgICAgICAgKG9yaWdpbmFsLW1hcC1vdGhlciAnKCgoY2lyY2xlICgzIC4gMykgLiAzKSBh KSkpKQpAQCAtMjgyLDcgKzI4Miw3IEBAIGltYWdlLXRyYW5zZm9ybS1tYXAKICAgICAgICAg ICAgICAgICAgICAnKCgoY2lyY2xlICgxMiAuIDQpIC4gMikgImNpcmNsZSIpCiAgICAgICAg ICAgICAgICAgICAgICAoKHJlY3QgKDcgLiAzKSA5IC4gOCkgInJlY3QiKQogICAgICAgICAg ICAgICAgICAgICAgKChwb2x5IC4gWzQgNiAyIDcgMSAyXSkgInBvbHkiKSkpKQotICAgIChz aG91bGQgKGVxdWFsIChpbWFnZS0tZmxpcC1tYXAgKGNvcHktdHJlZSBtYXAgdCkgdCBgKCx3 aWR0aCAuICxoZWlnaHQpKQorICAgIChzaG91bGQgKGVxdWFsIChpbWFnZS0tZmxpcC1tYXAg KGNvcHktdHJlZSBtYXAgdCkgYCgsd2lkdGggLiAsaGVpZ2h0KSkKICAgICAgICAgICAgICAg ICAgICAnKCgoY2lyY2xlICg2IC4gMykgLiAyKSAiY2lyY2xlIikKICAgICAgICAgICAgICAg ICAgICAgICgocmVjdCAoMiAuIDYpIDcgLiA4KSAicmVjdCIpCiAgICAgICAgICAgICAgICAg ICAgICAoKHBvbHkgLiBbNCAxMSAzIDEzIDggMTRdKSAicG9seSIpKSkpCkBAIC0yOTEsNyAr MjkxLDcgQEAgaW1hZ2UtdHJhbnNmb3JtLW1hcAogICAgICAgOzsgU2NhbGUgc2l6ZSBiZWNh dXNlIHRoZSBtYXAgaGFzIGJlZW4gc2NhbGVkLgogICAgICAgKGltYWdlLS1yb3RhdGUtbWFw IGNvcHkgOTAgYCgsKCogMiB3aWR0aCkgLiAsKCogMiBoZWlnaHQpKSkKICAgICAgIDs7IFN3 YXAgd2lkdGggYW5kIGhlaWdodCBiZWNhdXNlIHRoZSBtYXAgaGFzIGJlZW4gZmxpcHBlZC4K LSAgICAgIChpbWFnZS0tZmxpcC1tYXAgY29weSB0IGAoLCgqIDIgaGVpZ2h0KSAuICwoKiAy IHdpZHRoKSkpCisgICAgICAoaW1hZ2UtLWZsaXAtbWFwIGNvcHkgYCgsKCogMiBoZWlnaHQp IC4gLCgqIDIgd2lkdGgpKSkKICAgICAgIChzaG91bGQgKGVxdWFsIGNvcHkKICAgICAgICAg ICAgICAgICAgICAgICcoKChjaXJjbGUgKDYgLiA4KSAuIDQpICJjaXJjbGUiKQogICAgICAg ICAgICAgICAgICAgICAgICAoKHJlY3QgKDEyIC4gNikgMTYgLiAxNikgInJlY3QiKQo= --------------1Eg710s2HZvrL6xKWqOIBWUm-- From debbugs-submit-bounces@debbugs.gnu.org Fri Mar 29 06:19:21 2024 Received: (at 69992) by debbugs.gnu.org; 29 Mar 2024 10:19:21 +0000 Received: from localhost ([127.0.0.1]:41756 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rq9KS-0006V6-B2 for submit@debbugs.gnu.org; Fri, 29 Mar 2024 06:19:21 -0400 Received: from smtp-73.smtpout.orange.fr ([80.12.242.73]:56696 helo=msa.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rq9KP-0006Uv-1C for 69992@debbugs.gnu.org; Fri, 29 Mar 2024 06:19:18 -0400 Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id q9KJrtlcjuWdGq9KJrG8oW; Fri, 29 Mar 2024 11:19:14 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711707554; bh=ss6WwIGFOIPwZyd+2qYyRM+lmid/uN+CIAugzmn+dEo=; h=Message-ID:Date:MIME-Version:Subject:From:To; b=Z9+eGvJWDj4fGRLFKJDAcqNF3TcO3Z2OYuYUij5qYz75EYGm56BHkh9FUhntPePPR F6AiT6Ad98q+Lckzi2M6UyOTVMtsfCUZA+eQCd2vPEvLPb3csltjV8N59GpjfC8BLB rSX9TwkskywUZradTFuca47Hx2tp5kifwKvXfv5Z5lGuOaszXRl6fRRRO5vGL+3D5H B1QZoMvexOiYWz59Xxf1gKoFp4nMLm6xK61WVP1BpqMQ4mmD/1+0zzx0KiuysEG5P9 dGuGCMDKrlaqS1KMI2ffjN3BFYdB6nwoQ3lOnad5+XNJ/JEIC/P6HXj6IWqUtFbEOp eKdJEbetW3ulw== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Fri, 29 Mar 2024 11:19:14 +0100 X-ME-IP: 2.7.71.181 Content-Type: multipart/mixed; boundary="------------gaggvpm2T4S8Etn0SDWiFuSi" Message-ID: <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> Date: Fri, 29 Mar 2024 11:19:11 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#69992: Minor improvement to image map transformation logic From: David Ponce To: 69992@debbugs.gnu.org References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> Content-Language: fr, en-US In-Reply-To: X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 69992 Cc: Eli Zaretskii , Joseph Turner X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------gaggvpm2T4S8Etn0SDWiFuSi Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit [...] > The attached new patch fixes the logic to be consistent with Emacs > internal implementation, plus some other tweaks to check if a > transformation apply before to call the transformation function. > I also updated some tests according to functions changes. > Here is a possible change log: > > 2024-03-28  David Ponce  > >     * lisp/image.el (image--compute-scaling) >     (image--compute-rotation): New functions. >     (image--compute-map, image--compute-original-map): Use them. >     Ensure all transformations are applied or undone according to what >     Emacs does internally.  Call a transformation function only when >     needed.  Fix doc string. >     (image--scale-map): Assume effective scale argument. >     (image--rotate-map): Assume effective rotation argument. >     (image--rotate-coord): Improve doc string. >     (image--flip-map): Remove no more used flip argument. > >     * test/lisp/image-tests.el (image-create-image-with-map): Use a >     valid SVG image otherwise `image-size' will not return a valid >     value and calculation of scale could fail. >     (image-transform-map): Update according to changed signature of >     image--flip-map. [...] Hello, Please find attached a new patch with an additional small fix I forgot to include. Sorry. Regards --------------gaggvpm2T4S8Etn0SDWiFuSi Content-Type: text/x-patch; charset=UTF-8; name="image-compute-map-V1.patch" Content-Disposition: attachment; filename="image-compute-map-V1.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IGQ3NDk2 NDg1YWNhLi4yNjI3ZDBiZTEwYSAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDIzLDExNSArMTQyMywxMzkgQEAgaW1hZ2UtcmVjb21wdXRl LW1hcC1wCiAgIDp0eXBlICdib29sZWFuCiAgIDp2ZXJzaW9uICIzMC4xIikKIAorKGRlZnN1 YnN0IGltYWdlLS1jb21wdXRlLXNjYWxpbmcgKGltYWdlKQorICAiUmV0dXJuIHRoZSBjdXJy ZW50IHNjYWxpbmcgb2YgSU1BR0UsIG9yIDEgaWYgbm8gc2NhbGluZy4iCisgIDs7IFRoZSBp bWFnZSBtYXkgYmUgc2NhbGVkIGR1ZSB0byBtYW55IHJlYXNvbnMgKDpzY2FsZSwgOm1heC13 aWR0aCwKKyAgOzsgZXRjKSwgc28gdXNpbmcgYGltYWdlLS1jdXJyZW50LXNjYWxpbmcnIHRv IGdldCByYXRpbyBiZXR3ZWVuIHRoZQorICA7OyBvcmlnaW5hbCBpbWFnZSBzaXplIGFuZCB0 aGUgZGlzcGxheWVkIHNpemUpIGlzIGJldHRlciB0aGFuIGp1c3QKKyAgOzsgdXNpbmcgdGhl IDpzY2FsZSB2YWx1ZS4gVW5mb3J0dW5hdGVseSBlYWNoIGNhbGwgdG8gYGltYWdlX3NpemUn IGlzCisgIDs7IHZlcnkgcmVzb3VyY2UgY29uc3VtaW5nIQorICA7OyAoaW1hZ2UtLWN1cnJl bnQtc2NhbGluZworICA7OyAgaW1hZ2UgKGltYWdlLS1pbWFnZS13aXRob3V0LXBhcmFtZXRl cnMgaW1hZ2UpKQorICAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpzY2FsZSkgMSkpCisK KyhkZWZzdWJzdCBpbWFnZS0tY29tcHV0ZS1yb3RhdGlvbiAoaW1hZ2UpCisgICJSZXR1cm4g dGhlIGN1cnJlbnQgcm90YXRpb24gb2YgSU1BR0UsIG9yIDAgaWYgbm8gcm90YXRpb24uCitB bHNvIHJldHVybiBuaWwgaWYgcm90YXRpb24gaXMgbm90IGEgbXVsdGlwbGVzIG9mIDkwIGRl Z3JlZXMgKDAsIDkwLAorMTgwWy0xODBdIGFuZCAyNzBbLTkwXSkuIgorICAobGV0ICgoZGVn cmVlcyAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpyb3RhdGlvbikgMCkpKQorICAgIChh bmQgKD0gMCAobW9kIGRlZ3JlZXMgMSkpCisgICAgICAgICAoY2FyIChtZW1xbCAodHJ1bmNh dGUgKG1vZCBkZWdyZWVzIDM2MCkpICcoMCA5MCAxODAgMjcwKSkpKSkpCisKIChkZWZ1biBp bWFnZS0tY29tcHV0ZS1tYXAgKGltYWdlKQogICAiQ29tcHV0ZSBtYXAgZm9yIElNQUdFIHN1 aXRhYmxlIHRvIGJlIHVzZWQgYXMgaXRzIDptYXAgcHJvcGVydHkuCi1SZXR1cm4gYSBjb3B5 IG9mIDpvcmlnaW5hbC1pbWFnZSB0cmFuc2Zvcm1lZCBiYXNlZCBvbiBJTUFHRSdzIDpzY2Fs ZSwKK1JldHVybiBhIGNvcHkgb2YgOm9yaWdpbmFsLW1hcCB0cmFuc2Zvcm1lZCBiYXNlZCBv biBJTUFHRSdzIDpzY2FsZSwKIDpyb3RhdGlvbiwgYW5kIDpmbGlwLiAgV2hlbiBJTUFHRSdz IDpvcmlnaW5hbC1tYXAgaXMgbmlsLCByZXR1cm4gbmlsLgogV2hlbiA6cm90YXRpb24gaXMg bm90IGEgbXVsdGlwbGUgb2YgOTAsIHJldHVybiBjb3B5IG9mIDpvcmlnaW5hbC1tYXAuIgot ICAocGNhc2UtbGV0KiAoKG9yaWdpbmFsLW1hcCAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOm9y aWdpbmFsLW1hcCkpCi0gICAgICAgICAgICAgICAobWFwIChjb3B5LXRyZWUgb3JpZ2luYWwt bWFwIHQpKQotICAgICAgICAgICAgICAgKHNjYWxlIChvciAoaW1hZ2UtcHJvcGVydHkgaW1h Z2UgOnNjYWxlKSAxKSkKLSAgICAgICAgICAgICAgIChyb3RhdGlvbiAob3IgKGltYWdlLXBy b3BlcnR5IGltYWdlIDpyb3RhdGlvbikgMCkpCi0gICAgICAgICAgICAgICAoZmxpcCAoaW1h Z2UtcHJvcGVydHkgaW1hZ2UgOmZsaXApKQotICAgICAgICAgICAgICAgKChhbmQgc2l6ZSBg KCx3aWR0aCAuICxoZWlnaHQpKSAoaW1hZ2Utc2l6ZSBpbWFnZSB0KSkpCi0gICAgKHdoZW4g KGFuZCA7IEhhbmRsZSBvbmx5IDkwLWRlZ3JlZSByb3RhdGlvbnMKLSAgICAgICAgICAgKHpl cm9wIChtb2Qgcm90YXRpb24gMSkpCi0gICAgICAgICAgICh6ZXJvcCAoJSAodHJ1bmNhdGUg cm90YXRpb24pIDkwKSkpCi0gICAgICA7OyBTSVpFIGZpdHMgTUFQIGFmdGVyIHRyYW5zZm9y bWF0aW9ucy4gIFNjYWxlIE1BUCBiZWZvcmUKLSAgICAgIDs7IGZsaXAgYW5kIHJvdGF0ZSBv cGVyYXRpb25zLCBzaW5jZSBib3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgotICAgICAgKGlt YWdlLS1zY2FsZS1tYXAgbWFwIHNjYWxlKQorICAod2hlbi1sZXQgKChtYXAgKGltYWdlLXBy b3BlcnR5IGltYWdlIDpvcmlnaW5hbC1tYXApKSkKKyAgICAoc2V0cSBtYXAgKGNvcHktdHJl ZSBtYXAgdCkpCisgICAgKGxldCogKChzY2FsZSAoaW1hZ2UtLWNvbXB1dGUtc2NhbGluZyBp bWFnZSkpCisgICAgICAgICAgIChyb3RhdGlvbiAoaW1hZ2UtLWNvbXB1dGUtcm90YXRpb24g aW1hZ2UpKQorICAgICAgICAgICA7OyBJbWFnZSBpcyBmbGlwcGVkIG9ubHkgaWYgcm90YXRp b24gaXMgYSBtdWx0aXBsZSBvZiA5MCwKKyAgICAgICAgICAgOzsgaW5jbHVkaW5nIDAuCisg ICAgICAgICAgIChmbGlwIChhbmQgcm90YXRpb24gKGltYWdlLXByb3BlcnR5IGltYWdlIDpm bGlwKSkpCisgICAgICAgICAgIChzaXplIChpbWFnZS1zaXplIGltYWdlIHQpKSkKKyAgICAg IDs7IFNJWkUgZml0cyBNQVAgYWZ0ZXIgdHJhbnNmb3JtYXRpb25zLiAgU2NhbGUgTUFQIGJl Zm9yZSBmbGlwIGFuZAorICAgICAgOzsgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlIGJvdGgg bmVlZCBNQVAgdG8gZml0IFNJWkUuCisgICAgICAodW5sZXNzICg9IHNjYWxlIDEpCisgICAg ICAgIChpbWFnZS0tc2NhbGUtbWFwIG1hcCBzY2FsZSkpCiAgICAgICA7OyBJbiByZW5kZXJl ZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGJlZm9yZSBmbGlwLgotICAg ICAgKGltYWdlLS1yb3RhdGUtbWFwCi0gICAgICAgbWFwIHJvdGF0aW9uIChpZiAob3IgKD0g OTAgcm90YXRpb24pICg9IDI3MCByb3RhdGlvbikpCisgICAgICAod2hlbiAobWVtcWwgcm90 YXRpb24gJyg5MCAxODAgMjcwKSkKKyAgICAgICAgKGltYWdlLS1yb3RhdGUtbWFwCisgICAg ICAgICBtYXAgcm90YXRpb24gKGlmICg9IHJvdGF0aW9uIDE4MCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgOzsgSWYgcm90YXRl ZCDCsTkwwrAsIHN3YXAgd2lkdGggYW5kIGhlaWdodC4KLSAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zIGhlaWdodCB3aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgICBzaXplKSkK KyAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIChjZHIgc2l6ZSkgKGNhciBzaXplKSkp KSkKICAgICAgIDs7IEFmdGVyIHJvdGF0aW9uLCB0aGVyZSdzIG5vIG5lZWQgdG8gc3dhcCB3 aWR0aCBhbmQgaGVpZ2h0LgotICAgICAgKGltYWdlLS1mbGlwLW1hcCBtYXAgZmxpcCBzaXpl KSkKKyAgICAgICh3aGVuIGZsaXAKKyAgICAgICAgKGltYWdlLS1mbGlwLW1hcCBtYXAgc2l6 ZSkpKQogICAgIG1hcCkpCiAKIChkZWZ1biBpbWFnZS0tY29tcHV0ZS1vcmlnaW5hbC1tYXAg KGltYWdlKQogICAiUmV0dXJuIG9yaWdpbmFsIG1hcCBmb3IgSU1BR0UuCiBJZiBJTUFHRSBs YWNrcyA6bWFwIHByb3BlcnR5LCByZXR1cm4gbmlsLgotV2hlbiA6cm90YXRpb24gaXMgbm90 IGEgbXVsdGlwbGUgb2YgOTAsIHJldHVybiBjb3B5IG9mIDptYXAuIgotICAod2hlbiAoaW1h Z2UtcHJvcGVydHkgaW1hZ2UgOm1hcCkKLSAgICAobGV0KiAoKG9yaWdpbmFsLW1hcCAoY29w eS10cmVlIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6bWFwKSB0KSkKLSAgICAgICAgICAgKHNj YWxlIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnNjYWxlKSAxKSkKLSAgICAgICAgICAg KHJvdGF0aW9uIChvciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSAwKSkKLSAg ICAgICAgICAgKGZsaXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkKK1doZW4gdGhl cmUgaXMgbm8gdHJhbnNmb3JtYXRpb24sIHJldHVybiBjb3B5IG9mIDptYXAuIgorICAod2hl bi1sZXQgKChvcmlnaW5hbC1tYXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDptYXApKSkKKyAg ICAoc2V0cSBvcmlnaW5hbC1tYXAgKGNvcHktdHJlZSBvcmlnaW5hbC1tYXAgdCkpCisgICAg KGxldCogKChzY2FsZSAoaW1hZ2UtLWNvbXB1dGUtc2NhbGluZyBpbWFnZSkpCisgICAgICAg ICAgIChyb3RhdGlvbiAoaW1hZ2UtLWNvbXB1dGUtcm90YXRpb24gaW1hZ2UpKQorICAgICAg ICAgICA7OyBJbWFnZSBpcyBmbGlwcGVkIG9ubHkgaWYgcm90YXRpb24gaXMgYSBtdWx0aXBs ZSBvZiA5MAorICAgICAgICAgICA7OyBpbmNsdWRpbmcgMC4KKyAgICAgICAgICAgKGZsaXAg KGFuZCByb3RhdGlvbiAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOmZsaXApKSkKICAgICAgICAg ICAgKHNpemUgKGltYWdlLXNpemUgaW1hZ2UgdCkpKQotICAgICAgKHdoZW4gKGFuZCA7IEhh bmRsZSBvbmx5IDkwLWRlZ3JlZSByb3RhdGlvbnMKLSAgICAgICAgICAgICAoemVyb3AgKG1v ZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgICAoemVyb3AgKCUgKHRydW5jYXRlIHJvdGF0 aW9uKSA5MCkpKQotICAgICAgICA7OyBJbiByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlz IGFsd2F5cyBhcHBsaWVkIGJlZm9yZSBmbGlwLgotICAgICAgICA7OyBUbyB1bmRvIHRoZSB0 cmFuc2Zvcm1hdGlvbiwgZmxpcCBiZWZvcmUgcm90YXRpbmcuICBTSVpFIGZpdHMKLSAgICAg ICAgOzsgT1JJR0lOQUwtTUFQIGJlZm9yZSB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFwcGxpZWQu ICBUaGVyZWZvcmUsCi0gICAgICAgIDs7IHNjYWxlIE9SSUdJTkFMLU1BUCBhZnRlciBmbGlw IGFuZCByb3RhdGUgb3BlcmF0aW9ucywgc2luY2UKLSAgICAgICAgOzsgYm90aCBuZWVkIE9S SUdJTkFMLU1BUCB0byBmaXQgU0laRS4KLSAgICAgICAgKGltYWdlLS1mbGlwLW1hcCBvcmln aW5hbC1tYXAgZmxpcCBzaXplKQotICAgICAgICAoaW1hZ2UtLXJvdGF0ZS1tYXAgb3JpZ2lu YWwtbWFwICgtIHJvdGF0aW9uKSBzaXplKQotICAgICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBv cmlnaW5hbC1tYXAgKC8gMS4wIHNjYWxlKSkpCi0gICAgICBvcmlnaW5hbC1tYXApKSkKKyAg ICAgIDs7IEluIHJlbmRlcmVkIGltYWdlcywgcm90YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQg YmVmb3JlIGZsaXAuCisgICAgICA7OyBUbyB1bmRvIHRoZSB0cmFuc2Zvcm1hdGlvbiwgZmxp cCBiZWZvcmUgcm90YXRpbmcuICBTSVpFIGZpdHMKKyAgICAgIDs7IE9SSUdJTkFMLU1BUCBi ZWZvcmUgdHJhbnNmb3JtYXRpb25zIGFyZSBhcHBsaWVkLiAgVGhlcmVmb3JlLAorICAgICAg Ozsgc2NhbGUgT1JJR0lOQUwtTUFQIGFmdGVyIGZsaXAgYW5kIHJvdGF0ZSBvcGVyYXRpb25z LCBzaW5jZQorICAgICAgOzsgYm90aCBuZWVkIE9SSUdJTkFMLU1BUCB0byBmaXQgU0laRS4K KyAgICAgIDs7IEluIHJlbmRlcmVkIGltYWdlcywgcm90YXRpb24gaXMgYWx3YXlzIGFwcGxp ZWQgYmVmb3JlIGZsaXAuCisgICAgICAod2hlbiBmbGlwCisgICAgICAgIChpbWFnZS0tZmxp cC1tYXAgb3JpZ2luYWwtbWFwIHNpemUpKQorICAgICAgKHdoZW4gKG1lbXFsIHJvdGF0aW9u ICcoOTAgMTgwIDI3MCkpCisgICAgICAgIChpbWFnZS0tcm90YXRlLW1hcCBvcmlnaW5hbC1t YXAgKC0gcm90YXRpb24pIHNpemUpKQorICAgICAgKHVubGVzcyAoPSBzY2FsZSAxKQorICAg ICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBvcmlnaW5hbC1tYXAgKC8gMS4wIHNjYWxlKSkpKQor ICAgIG9yaWdpbmFsLW1hcCkpCiAKIChkZWZ1biBpbWFnZS0tc2NhbGUtbWFwIChtYXAgc2Nh bGUpCiAgICJTY2FsZSBNQVAgYWNjb3JkaW5nIHRvIFNDQUxFLgogRGVzdHJ1Y3RpdmVseSBt b2RpZmllcyBhbmQgcmV0dXJucyBNQVAuIgotICAodW5sZXNzICg9IDEgc2NhbGUpCi0gICAg KHBjYXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFw KQotICAgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlwZQotICAgICAgICAoJ3JlY3QKLSAgICAg ICAgIChzZXRmIChjYWFyIGNvb3JkcykgKHJvdW5kICgqIChjYWFyIGNvb3Jkcykgc2NhbGUp KSkKLSAgICAgICAgIChzZXRmIChjZGFyIGNvb3JkcykgKHJvdW5kICgqIChjZGFyIGNvb3Jk cykgc2NhbGUpKSkKLSAgICAgICAgIChzZXRmIChjYWRyIGNvb3JkcykgKHJvdW5kICgqIChj YWRyIGNvb3Jkcykgc2NhbGUpKSkKLSAgICAgICAgIChzZXRmIChjZGRyIGNvb3JkcykgKHJv dW5kICgqIChjZGRyIGNvb3Jkcykgc2NhbGUpKSkpCi0gICAgICAgICgnY2lyY2xlCi0gICAg ICAgICAoc2V0ZiAoY2FhciBjb29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNjYWxl KSkpCi0gICAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAoY2RhciBjb29y ZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0Y2RyIGNvb3JkcyAocm91bmQgKCogKGNkciBj b29yZHMpIHNjYWxlKSkpKQotICAgICAgICAoJ3BvbHkKLSAgICAgICAgIChkb3RpbWVzIChp IChsZW5ndGggY29vcmRzKSkKLSAgICAgICAgICAgKGFzZXQgY29vcmRzIGkKLSAgICAgICAg ICAgICAgICAgKHJvdW5kICgqIChhcmVmIGNvb3JkcyBpKSBzY2FsZSkpKSkpKSkpCisgIChw Y2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkK KyAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBlCisgICAgICAoJ3JlY3QKKyAgICAgICAoc2V0 ZiAoY2FhciBjb29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNjYWxlKSkpCisgICAg ICAgKHNldGYgKGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIgY29vcmRzKSBzY2FsZSkp KQorICAgICAgIChzZXRmIChjYWRyIGNvb3JkcykgKHJvdW5kICgqIChjYWRyIGNvb3Jkcykg c2NhbGUpKSkKKyAgICAgICAoc2V0ZiAoY2RkciBjb29yZHMpIChyb3VuZCAoKiAoY2RkciBj b29yZHMpIHNjYWxlKSkpKQorICAgICAgKCdjaXJjbGUKKyAgICAgICAoc2V0ZiAoY2FhciBj b29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNjYWxlKSkpCisgICAgICAgKHNldGYg KGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIgY29vcmRzKSBzY2FsZSkpKQorICAgICAg IChzZXRjZHIgY29vcmRzIChyb3VuZCAoKiAoY2RyIGNvb3Jkcykgc2NhbGUpKSkpCisgICAg ICAoJ3BvbHkKKyAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3JkcykpCisgICAgICAg ICAoYXNldCBjb29yZHMgaQorICAgICAgICAgICAgICAgKHJvdW5kICgqIChhcmVmIGNvb3Jk cyBpKSBzY2FsZSkpKSkpKSkKICAgbWFwKQogCiAoZGVmdW4gaW1hZ2UtLXJvdGF0ZS1tYXAg KG1hcCByb3RhdGlvbiBzaXplKQogICAiUm90YXRlIE1BUCBhY2NvcmRpbmcgdG8gUk9UQVRJ T04gYW5kIFNJWkUuCitST1RBVElPTiBtdXN0IGJlIGEgbm9uLXplcm8gbXVsdGlwbGUgb2Yg OTAuCiBEZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGFuZCByZXR1cm5zIE1BUC4iCi0gICh1bmxl c3MgKHplcm9wIHJvdGF0aW9uKQotICAgIChwY2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAs Y29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkKLSAgICAgIChwY2FzZS1leGhhdXN0aXZlIHR5 cGUKLSAgICAgICAgKCdyZWN0Ci0gICAgICAgICAobGV0ICggeDAgeTAgIDsgTmV3IHVwcGVy IGxlZnQgY29ybmVyCi0gICAgICAgICAgICAgICAgeDEgeTEpIDsgTmV3IGJvdHRvbSByaWdo dCBjb3JuZXIKLSAgICAgICAgICAgKHBjYXNlICh0cnVuY2F0ZSAobW9kIHJvdGF0aW9uIDM2 MCkpIDsgU2V0IG5ldyBjb3JuZXJzIHRvLi4uCi0gICAgICAgICAgICAgKDkwIDsgLi4ub2xk IGJvdHRvbSBsZWZ0IGFuZCB1cHBlciByaWdodAotICAgICAgICAgICAgICAoc2V0cSB4MCAo Y2FhciBjb29yZHMpIHkwIChjZGRyIGNvb3JkcykKLSAgICAgICAgICAgICAgICAgICAgeDEg KGNhZHIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMpKSkKLSAgICAgICAgICAgICAoMTgwIDsg Li4ub2xkIGJvdHRvbSByaWdodCBhbmQgdXBwZXIgbGVmdAotICAgICAgICAgICAgICAoc2V0 cSB4MCAoY2FkciBjb29yZHMpIHkwIChjZGRyIGNvb3JkcykKLSAgICAgICAgICAgICAgICAg ICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMpKSkKLSAgICAgICAgICAgICAo MjcwIDsgLi4ub2xkIHVwcGVyIHJpZ2h0IGFuZCBib3R0b20gbGVmdAotICAgICAgICAgICAg ICAoc2V0cSB4MCAoY2FkciBjb29yZHMpIHkwIChjZGFyIGNvb3JkcykKLSAgICAgICAgICAg ICAgICAgICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RkciBjb29yZHMpKSkpCi0gICAgICAg ICAgIChzZXRjYXIgY29vcmRzIChpbWFnZS0tcm90YXRlLWNvb3JkIHgwIHkwIHJvdGF0aW9u IHNpemUpKQotICAgICAgICAgICAoc2V0Y2RyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29y ZCB4MSB5MSByb3RhdGlvbiBzaXplKSkpKQotICAgICAgICAoJ2NpcmNsZQotICAgICAgICAg KHNldGNhciBjb29yZHMgKGltYWdlLS1yb3RhdGUtY29vcmQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAoY2FhciBjb29yZHMpIChjZGFyIGNvb3Jkcykgcm90YXRpb24gc2l6ZSkpKQot ICAgICAgICAoJ3BvbHkKLSAgICAgICAgIChkb3RpbWVzIChpIChsZW5ndGggY29vcmRzKSkK LSAgICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIpKQotICAgICAgICAgICAgIChwY2FzZS1s ZXQgKChgKCx4IC4gLHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZS0tcm90 YXRlLWNvb3JkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlZiBjb29yZHMgaSkg KGFyZWYgY29vcmRzICgxKyBpKSkgcm90YXRpb24gc2l6ZSkpKQotICAgICAgICAgICAgICAg KGFzZXQgY29vcmRzIGkgeCkKLSAgICAgICAgICAgICAgIChhc2V0IGNvb3JkcyAoMSsgaSkg eSkpKSkpKSkpCisgIChzZXRxIHJvdGF0aW9uIChtb2Qgcm90YXRpb24gMzYwKSkKKyAgKHBj YXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQor ICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKKyAgICAgICgncmVjdAorICAgICAgIChsZXQg KCB4MCB5MCAgOyBOZXcgdXBwZXIgbGVmdCBjb3JuZXIKKyAgICAgICAgICAgICAgeDEgeTEp IDsgTmV3IGJvdHRvbSByaWdodCBjb3JuZXIKKyAgICAgICAgIChwY2FzZSByb3RhdGlvbiA7 IFNldCBuZXcgY29ybmVycyB0by4uLgorICAgICAgICAgICAoOTAgOyAuLi5vbGQgYm90dG9t IGxlZnQgYW5kIHVwcGVyIHJpZ2h0CisgICAgICAgICAgICAoc2V0cSB4MCAoY2FhciBjb29y ZHMpIHkwIChjZGRyIGNvb3JkcykKKyAgICAgICAgICAgICAgICAgIHgxIChjYWRyIGNvb3Jk cykgeTEgKGNkYXIgY29vcmRzKSkpCisgICAgICAgICAgICgxODAgOyAuLi5vbGQgYm90dG9t IHJpZ2h0IGFuZCB1cHBlciBsZWZ0CisgICAgICAgICAgICAoc2V0cSB4MCAoY2FkciBjb29y ZHMpIHkwIChjZGRyIGNvb3JkcykKKyAgICAgICAgICAgICAgICAgIHgxIChjYWFyIGNvb3Jk cykgeTEgKGNkYXIgY29vcmRzKSkpCisgICAgICAgICAgICgyNzAgOyAuLi5vbGQgdXBwZXIg cmlnaHQgYW5kIGJvdHRvbSBsZWZ0CisgICAgICAgICAgICAoc2V0cSB4MCAoY2FkciBjb29y ZHMpIHkwIChjZGFyIGNvb3JkcykKKyAgICAgICAgICAgICAgICAgIHgxIChjYWFyIGNvb3Jk cykgeTEgKGNkZHIgY29vcmRzKSkpKQorICAgICAgICAgKHNldGNhciBjb29yZHMgKGltYWdl LS1yb3RhdGUtY29vcmQgeDAgeTAgcm90YXRpb24gc2l6ZSkpCisgICAgICAgICAoc2V0Y2Ry IGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MSB5MSByb3RhdGlvbiBzaXplKSkpKQor ICAgICAgKCdjaXJjbGUKKyAgICAgICAoc2V0Y2FyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1j b29yZAorICAgICAgICAgICAgICAgICAgICAgICAoY2FhciBjb29yZHMpIChjZGFyIGNvb3Jk cykgcm90YXRpb24gc2l6ZSkpKQorICAgICAgKCdwb2x5CisgICAgICAgKGRvdGltZXMgKGkg KGxlbmd0aCBjb29yZHMpKQorICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIpKQorICAgICAg ICAgICAocGNhc2UtbGV0ICgoYCgseCAuICx5KQorICAgICAgICAgICAgICAgICAgICAgICAg KGltYWdlLS1yb3RhdGUtY29vcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYXJlZiBj b29yZHMgaSkgKGFyZWYgY29vcmRzICgxKyBpKSkgcm90YXRpb24gc2l6ZSkpKQorICAgICAg ICAgICAgIChhc2V0IGNvb3JkcyBpIHgpCisgICAgICAgICAgICAgKGFzZXQgY29vcmRzICgx KyBpKSB5KSkpKSkpKQogICBtYXApCiAKIChkZWZ1biBpbWFnZS0tcm90YXRlLWNvb3JkICh4 IHkgYW5nbGUgc2l6ZSkKICAgIlJvdGF0ZSBjb29yZGluYXRlcyBYIGFuZCBZIGJ5IEFOR0xF IGluIGltYWdlIG9mIFNJWkUuCi1BTkdMRSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAuICBS ZXR1cm5zIGEgY29ucyBjZWxsIG9mIHJvdW5kZWQKLWNvb3JkaW5hdGVzIChYMSBZMSkuIgor QU5HTEUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkwIGluIFs5MCAxODAgMjcwXS4gIFJldHVy bnMgYSBjb25zIGNlbGwgb2YKK3JvdW5kZWQgY29vcmRpbmF0ZXMgKFgxIFkxKS4iCiAgIChw Y2FzZS1sZXQqICgocmFkaWFuICgqICgvIGFuZ2xlIDE4MC4wKSBmbG9hdC1waSkpCiAgICAg ICAgICAgICAgICAoYCgsd2lkdGggLiAsaGVpZ2h0KSBzaXplKQogICAgICAgICAgICAgICAg OzsgeSBpcyBwb3NpdGl2ZSwgYnV0IHdlIGFyZSBpbiB0aGUgYm90dG9tLXJpZ2h0IHF1YWRy YW50CkBAIC0xNTUyLDI1ICsxNTc2LDI0IEBAIGltYWdlLS1yb3RhdGUtY29vcmQKICAgICAg ICAgICAgICAgICh5MSAoLSB5MSkpKQogICAgIChjb25zIChyb3VuZCB4MSkgKHJvdW5kIHkx KSkpKQogCi0oZGVmdW4gaW1hZ2UtLWZsaXAtbWFwIChtYXAgZmxpcCBzaXplKQotICAiSG9y aXpvbnRhbGx5IGZsaXAgTUFQIGFjY29yZGluZyB0byBGTElQIGFuZCBTSVpFLgorKGRlZnVu IGltYWdlLS1mbGlwLW1hcCAobWFwIHNpemUpCisgICJIb3Jpem9udGFsbHkgZmxpcCBNQVAg YWNjb3JkaW5nIHRvIFNJWkUuCiBEZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGFuZCByZXR1cm5z IE1BUC4iCi0gICh3aGVuIGZsaXAKLSAgICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4g LGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXApCi0gICAgICAocGNhc2UtZXhoYXVzdGl2ZSB0 eXBlCi0gICAgICAgICgncmVjdAotICAgICAgICAgKGxldCAoKHgwICgtIChjYXIgc2l6ZSkg KGNhZHIgY29vcmRzKSkpCi0gICAgICAgICAgICAgICAoeTAgKGNkYXIgY29vcmRzKSkKLSAg ICAgICAgICAgICAgICh4MSAoLSAoY2FyIHNpemUpIChjYWFyIGNvb3JkcykpKQotICAgICAg ICAgICAgICAgKHkxIChjZGRyIGNvb3JkcykpKQotICAgICAgICAgICAoc2V0Y2FyIGNvb3Jk cyAoY29ucyB4MCB5MCkpCi0gICAgICAgICAgIChzZXRjZHIgY29vcmRzIChjb25zIHgxIHkx KSkpKQotICAgICAgICAoJ2NpcmNsZQotICAgICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAo LSAoY2FyIHNpemUpIChjYWFyIGNvb3JkcykpKSkKLSAgICAgICAgKCdwb2x5Ci0gICAgICAg ICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3JkcykpCi0gICAgICAgICAgICh3aGVuICg9IDAg KCUgaSAyKSkKLSAgICAgICAgICAgICAoYXNldCBjb29yZHMgaSAoLSAoY2FyIHNpemUpIChh cmVmIGNvb3JkcyBpKSkpKSkpKSkpCisgIChwY2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAs Y29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkKKyAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBl CisgICAgICAoJ3JlY3QKKyAgICAgICAobGV0ICgoeDAgKC0gKGNhciBzaXplKSAoY2FkciBj b29yZHMpKSkKKyAgICAgICAgICAgICAoeTAgKGNkYXIgY29vcmRzKSkKKyAgICAgICAgICAg ICAoeDEgKC0gKGNhciBzaXplKSAoY2FhciBjb29yZHMpKSkKKyAgICAgICAgICAgICAoeTEg KGNkZHIgY29vcmRzKSkpCisgICAgICAgICAoc2V0Y2FyIGNvb3JkcyAoY29ucyB4MCB5MCkp CisgICAgICAgICAoc2V0Y2RyIGNvb3JkcyAoY29ucyB4MSB5MSkpKSkKKyAgICAgICgnY2ly Y2xlCisgICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAoLSAoY2FyIHNpemUpIChjYWFyIGNv b3JkcykpKSkKKyAgICAgICgncG9seQorICAgICAgIChkb3RpbWVzIChpIChsZW5ndGggY29v cmRzKSkKKyAgICAgICAgICh3aGVuICg9IDAgKCUgaSAyKSkKKyAgICAgICAgICAgKGFzZXQg Y29vcmRzIGkgKC0gKGNhciBzaXplKSAoYXJlZiBjb29yZHMgaSkpKSkpKSkpCiAgIG1hcCkK IAogKHByb3ZpZGUgJ2ltYWdlKQpkaWZmIC0tZ2l0IGEvdGVzdC9saXNwL2ltYWdlLXRlc3Rz LmVsIGIvdGVzdC9saXNwL2ltYWdlLXRlc3RzLmVsCmluZGV4IDZhNWYwM2UzOGEwLi4wMjA3 ODFlZmY1MCAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL2ltYWdlLXRlc3RzLmVsCisrKyBiL3Rl c3QvbGlzcC9pbWFnZS10ZXN0cy5lbApAQCAtMTU4LDcgKzE1OCw3IEBAIGltYWdlLXJvdGF0 ZQogKGVydC1kZWZ0ZXN0IGltYWdlLWNyZWF0ZS1pbWFnZS13aXRoLW1hcCAoKQogICAiVGVz dCB0aGF0IGBjcmVhdGUtaW1hZ2UnIGNvcnJlY3RseSBhZGRzIDptYXAgYW5kL29yIDpvcmln aW5hbC1tYXAuIgogICAoc2tpcC11bmxlc3MgKGRpc3BsYXktaW1hZ2VzLXApKQotICAobGV0 ICgoZGF0YSAiZm9vIikKKyAgKGxldCAoKGRhdGEgIjxzdmcgd2lkdGg9XCIzMFwiIGhlaWdo dD1cIjMwXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAw MC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj48 L3N2Zz4iKQogICAgICAgICAobWFwICcoKChjaXJjbGUgKDEgLiAgMSkgLiAgMSkgYSkpKQog ICAgICAgICAob3JpZ2luYWwtbWFwICcoKChjaXJjbGUgKDIgLiAgMikgLiAgMikgYSkpKQog ICAgICAgICAob3JpZ2luYWwtbWFwLW90aGVyICcoKChjaXJjbGUgKDMgLiAzKSAuIDMpIGEp KSkpCkBAIC0yODIsNyArMjgyLDcgQEAgaW1hZ2UtdHJhbnNmb3JtLW1hcAogICAgICAgICAg ICAgICAgICAgICcoKChjaXJjbGUgKDEyIC4gNCkgLiAyKSAiY2lyY2xlIikKICAgICAgICAg ICAgICAgICAgICAgICgocmVjdCAoNyAuIDMpIDkgLiA4KSAicmVjdCIpCiAgICAgICAgICAg ICAgICAgICAgICAoKHBvbHkgLiBbNCA2IDIgNyAxIDJdKSAicG9seSIpKSkpCi0gICAgKHNo b3VsZCAoZXF1YWwgKGltYWdlLS1mbGlwLW1hcCAoY29weS10cmVlIG1hcCB0KSB0IGAoLHdp ZHRoIC4gLGhlaWdodCkpCisgICAgKHNob3VsZCAoZXF1YWwgKGltYWdlLS1mbGlwLW1hcCAo Y29weS10cmVlIG1hcCB0KSBgKCx3aWR0aCAuICxoZWlnaHQpKQogICAgICAgICAgICAgICAg ICAgICcoKChjaXJjbGUgKDYgLiAzKSAuIDIpICJjaXJjbGUiKQogICAgICAgICAgICAgICAg ICAgICAgKChyZWN0ICgyIC4gNikgNyAuIDgpICJyZWN0IikKICAgICAgICAgICAgICAgICAg ICAgICgocG9seSAuIFs0IDExIDMgMTMgOCAxNF0pICJwb2x5IikpKSkKQEAgLTI5MSw3ICsy OTEsNyBAQCBpbWFnZS10cmFuc2Zvcm0tbWFwCiAgICAgICA7OyBTY2FsZSBzaXplIGJlY2F1 c2UgdGhlIG1hcCBoYXMgYmVlbiBzY2FsZWQuCiAgICAgICAoaW1hZ2UtLXJvdGF0ZS1tYXAg Y29weSA5MCBgKCwoKiAyIHdpZHRoKSAuICwoKiAyIGhlaWdodCkpKQogICAgICAgOzsgU3dh cCB3aWR0aCBhbmQgaGVpZ2h0IGJlY2F1c2UgdGhlIG1hcCBoYXMgYmVlbiBmbGlwcGVkLgot ICAgICAgKGltYWdlLS1mbGlwLW1hcCBjb3B5IHQgYCgsKCogMiBoZWlnaHQpIC4gLCgqIDIg d2lkdGgpKSkKKyAgICAgIChpbWFnZS0tZmxpcC1tYXAgY29weSBgKCwoKiAyIGhlaWdodCkg LiAsKCogMiB3aWR0aCkpKQogICAgICAgKHNob3VsZCAoZXF1YWwgY29weQogICAgICAgICAg ICAgICAgICAgICAgJygoKGNpcmNsZSAoNiAuIDgpIC4gNCkgImNpcmNsZSIpCiAgICAgICAg ICAgICAgICAgICAgICAgICgocmVjdCAoMTIgLiA2KSAxNiAuIDE2KSAicmVjdCIpCg== --------------gaggvpm2T4S8Etn0SDWiFuSi-- From debbugs-submit-bounces@debbugs.gnu.org Sat Mar 30 04:11:12 2024 Received: (at 69992) by debbugs.gnu.org; 30 Mar 2024 08:11:12 +0000 Received: from localhost ([127.0.0.1]:43873 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqTnw-0006E6-9W for submit@debbugs.gnu.org; Sat, 30 Mar 2024 04:11:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42854) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqTnr-0006DN-Lg for 69992@debbugs.gnu.org; Sat, 30 Mar 2024 04:11: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 ) id 1rqTni-0001zT-R3; Sat, 30 Mar 2024 04:10:55 -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=bc163wLrs9uVXLG5X41f518E1RHhXRhdLxFggzH4xEw=; b=Ggsnn8I42qVpDmlDmcXj yVYKrJlfjQ8L22kouIudzQHdlGtTcjEEmbn+EeNVSjC+VocVgvAkAo+aBhL0w5aEyv0bilYM+CBSq 1HsYhRsK6aqw8hxbIDnU+RL3S4xPbawoLa7ivnmoRXoi9PRcoe4veGU1f7O/dO77BrpNK98qxxm1U codvry2BAL8hIvVUPYjxydMQQxses47f20wUiQKpsA2NqyI3C3/9jXOfj01tpxA2KQly0kBkgHfXX PFJPz355ovJpbbbf/LB4cWFFi4U1tPigktRhX6SsZKckeleV7/LynA1WPxdttH95g2W1OMi7IIhSA 0fVv8DX06+GBzg==; Date: Sat, 30 Mar 2024 11:10:50 +0300 Message-Id: <8634s8dtrp.fsf@gnu.org> From: Eli Zaretskii To: David Ponce In-Reply-To: <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> (message from David Ponce on Fri, 29 Mar 2024 11:19:11 +0100) Subject: Re: bug#69992: Minor improvement to image map transformation logic References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 69992 Cc: 69992@debbugs.gnu.org, joseph@breatheoutbreathe.in X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Fri, 29 Mar 2024 11:19:11 +0100 > From: David Ponce > Cc: Eli Zaretskii , Joseph Turner > > > The attached new patch fixes the logic to be consistent with Emacs > > internal implementation, plus some other tweaks to check if a > > transformation apply before to call the transformation function. > > I also updated some tests according to functions changes. > > Here is a possible change log: > > > > 2024-03-28  David Ponce  > > > >     * lisp/image.el (image--compute-scaling) > >     (image--compute-rotation): New functions. > >     (image--compute-map, image--compute-original-map): Use them. > >     Ensure all transformations are applied or undone according to what > >     Emacs does internally.  Call a transformation function only when > >     needed.  Fix doc string. > >     (image--scale-map): Assume effective scale argument. > >     (image--rotate-map): Assume effective rotation argument. > >     (image--rotate-coord): Improve doc string. > >     (image--flip-map): Remove no more used flip argument. > > > >     * test/lisp/image-tests.el (image-create-image-with-map): Use a > >     valid SVG image otherwise `image-size' will not return a valid > >     value and calculation of scale could fail. > >     (image-transform-map): Update according to changed signature of > >     image--flip-map. > [...] > > Hello, > > Please find attached a new patch with an additional small fix I forgot to > include. Sorry. Thanks. Please resend with the updated commit log message, and I will install it. From debbugs-submit-bounces@debbugs.gnu.org Sat Mar 30 04:56:08 2024 Received: (at 69992) by debbugs.gnu.org; 30 Mar 2024 08:56:08 +0000 Received: from localhost ([127.0.0.1]:43913 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqUVU-0008Uu-3k for submit@debbugs.gnu.org; Sat, 30 Mar 2024 04:56:08 -0400 Received: from smtp-20.smtpout.orange.fr ([80.12.242.20]:50779 helo=smtp.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqUVP-0008UB-Tf for 69992@debbugs.gnu.org; Sat, 30 Mar 2024 04:56:07 -0400 Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id qUVLr9iYBCHlGqUVLrqeJ5; Sat, 30 Mar 2024 09:56:00 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711788960; bh=ge9i/4N1JaSSILl+d6ooLa67ebMEpLd2qf3/JttPt+k=; h=Message-ID:Date:MIME-Version:Subject:To:From; b=XyHKKz3v0i0G8DuB5PcElUQmK2ESZTcgp/Ywerd4p3aWV4ggyu1L+KRygzfmT6F8E zQiwzBgTQONkoQZ+cMzOa/WNiWmo/XJznal82aZ0CnzuNRD/C/LaSgABg3aIsgGRlh KNbD8t7EAlToKLYBUrUyyz20nFHr43zsL5mDG17EGnkFhtPyG747+c2vb7jh6xqMvY dj9ZepsOnrZ1DMzArTN8rnpnKCCE8NWS1nHg70VXI6aw6dq8zKj90TizVH3hreGEcg gFypRt2mvd7HX0g5dMuVRHyeeCp2R2vok4ODYpwVVfwhg7knIbu5G8EtHqYwwcnD9h 1zhwZuiG5cKZQ== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Sat, 30 Mar 2024 09:56:00 +0100 X-ME-IP: 2.7.71.181 Message-ID: <645a1ccd-868b-4e02-bfc3-0ce4ab6b8f38@orange.fr> Date: Sat, 30 Mar 2024 09:55:59 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#69992: Minor improvement to image map transformation logic To: Eli Zaretskii References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> <8634s8dtrp.fsf@gnu.org> Content-Language: fr, en-US From: David Ponce In-Reply-To: <8634s8dtrp.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 69992 Cc: 69992@debbugs.gnu.org, joseph@breatheoutbreathe.in X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 30/03/2024 09:10, Eli Zaretskii wrote: >> Date: Fri, 29 Mar 2024 11:19:11 +0100 >> From: David Ponce >> Cc: Eli Zaretskii , Joseph Turner >> >>> The attached new patch fixes the logic to be consistent with Emacs >>> internal implementation, plus some other tweaks to check if a >>> transformation apply before to call the transformation function. >>> I also updated some tests according to functions changes. >>> Here is a possible change log: >>> >>> 2024-03-28  David Ponce  >>> >>>     * lisp/image.el (image--compute-scaling) >>>     (image--compute-rotation): New functions. >>>     (image--compute-map, image--compute-original-map): Use them. >>>     Ensure all transformations are applied or undone according to what >>>     Emacs does internally.  Call a transformation function only when >>>     needed.  Fix doc string. >>>     (image--scale-map): Assume effective scale argument. >>>     (image--rotate-map): Assume effective rotation argument. >>>     (image--rotate-coord): Improve doc string. >>>     (image--flip-map): Remove no more used flip argument. >>> >>>     * test/lisp/image-tests.el (image-create-image-with-map): Use a >>>     valid SVG image otherwise `image-size' will not return a valid >>>     value and calculation of scale could fail. >>>     (image-transform-map): Update according to changed signature of >>>     image--flip-map. >> [...] >> >> Hello, >> >> Please find attached a new patch with an additional small fix I forgot to >> include. Sorry. > > Thanks. Please resend with the updated commit log message, and I will > install it. Hello Eli, The change log is the same. The last patch include a slightly modified version of the new function `image--compute-rotation' to return 0 by default when no rotation is specified, instead of nil. Please let me know if you need anything else. Thanks! From debbugs-submit-bounces@debbugs.gnu.org Sat Mar 30 08:59:50 2024 Received: (at 69992) by debbugs.gnu.org; 30 Mar 2024 12:59:50 +0000 Received: from localhost ([127.0.0.1]:44191 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqYJJ-0006h5-8R for submit@debbugs.gnu.org; Sat, 30 Mar 2024 08:59:50 -0400 Received: from smtp-27.smtpout.orange.fr ([80.12.242.27]:56364 helo=smtp.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqYJF-0006gu-P2 for 69992@debbugs.gnu.org; Sat, 30 Mar 2024 08:59:47 -0400 Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id qYJBrMKHJ32RBqYJBrKZLm; Sat, 30 Mar 2024 13:59:42 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711803582; bh=ZsbfRottl1eEqFT19BxCvqTptb4PyXRWGyC4NpLggFg=; h=Message-ID:Date:MIME-Version:Subject:From:To; b=Hk8sXE4q3IBl+7PL40Y5g3X8SigxsA9NMIFrQ90B/N0rKFp6O58x97gQv+bE8xg7I /yTyC5Xz/35TTW663dn/2pU6o+1N7Oo9kMXz9Y2PM5Ku6Ot1Ogn36cxEWvGwB8BBEq PjwNoMOpPrz+6qzsjmwnYYfUSiiTt9Se/5XMykX3IWJvx+1tBWKylnHfWhcwIrrl2l j2MU1GFbVMIoSb+eeXxMMAc5yHbsjWDjYlKwRyp+Z/YzZQUWTJloNRQ9xgUvkFuFl5 /U9bkLotHNJzyKyelpUsc5MHhgEASR/rxMEnRgW03lxUpQq5eRXuVWNrkzpyr3oS5+ sEn5g+B17UZLw== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Sat, 30 Mar 2024 13:59:42 +0100 X-ME-IP: 2.7.71.181 Content-Type: multipart/mixed; boundary="------------yg83EmNRJ9bgvu0PitxQ12Kj" Message-ID: Date: Sat, 30 Mar 2024 13:59:41 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#69992: Minor improvement to image map transformation logic From: David Ponce To: Eli Zaretskii References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> <8634s8dtrp.fsf@gnu.org> <645a1ccd-868b-4e02-bfc3-0ce4ab6b8f38@orange.fr> Content-Language: fr, en-US In-Reply-To: <645a1ccd-868b-4e02-bfc3-0ce4ab6b8f38@orange.fr> X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 69992 Cc: 69992@debbugs.gnu.org, joseph@breatheoutbreathe.in X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------yg83EmNRJ9bgvu0PitxQ12Kj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 30/03/2024 09:55, David Ponce wrote: > On 30/03/2024 09:10, Eli Zaretskii wrote: >>> Date: Fri, 29 Mar 2024 11:19:11 +0100 >>> From: David Ponce >>> Cc: Eli Zaretskii , Joseph Turner >>> >>>> The attached new patch fixes the logic to be consistent with Emacs >>>> internal implementation, plus some other tweaks to check if a >>>> transformation apply before to call the transformation function. >>>> I also updated some tests according to functions changes. >>>> Here is a possible change log: >>>> >>>> 2024-03-28  David Ponce  >>>> >>>>       * lisp/image.el (image--compute-scaling) >>>>       (image--compute-rotation): New functions. >>>>       (image--compute-map, image--compute-original-map): Use them. >>>>       Ensure all transformations are applied or undone according to what >>>>       Emacs does internally.  Call a transformation function only when >>>>       needed.  Fix doc string. >>>>       (image--scale-map): Assume effective scale argument. >>>>       (image--rotate-map): Assume effective rotation argument. >>>>       (image--rotate-coord): Improve doc string. >>>>       (image--flip-map): Remove no more used flip argument. >>>> >>>>       * test/lisp/image-tests.el (image-create-image-with-map): Use a >>>>       valid SVG image otherwise `image-size' will not return a valid >>>>       value and calculation of scale could fail. >>>>       (image-transform-map): Update according to changed signature of >>>>       image--flip-map. >>> [...] >>> >>> Hello, >>> >>> Please find attached a new patch with an additional small fix I forgot to >>> include.  Sorry. >> >> Thanks.  Please resend with the updated commit log message, and I will >> install it. > > Hello Eli, > > The change log is the same.  The last patch include a slightly modified > version of the new function `image--compute-rotation' to return 0 by default > when no rotation is specified, instead of nil. > > Please let me know if you need anything else. > Thanks! Hello, Here is my last patch. The only change compared to the previous patch is that now the scale factor is correctly calculated based on the size of the image and the displayed size. To minimize the performance impact, I saved a call to `image-size' by doing the calculation directly in the `image--compute-map' and `image--compute-original-map' functions. I did some benchmarks and the difference is not significant. The tests still give the same results :-) Here is the new change log: 2024-03-30 David Ponce * lisp/image.el (image--compute-rotation): New function. (image--compute-map, image--compute-original-map): Use it. Ensure all transformations are applied or undone according to what Emacs does internally. Call a transformation function only when needed. Fix doc string. (image--scale-map): Assume effective scale argument. (image--rotate-map): Assume effective rotation argument. (image--rotate-coord): Improve doc string. (image--flip-map): Remove no more used flip argument. * test/lisp/image-tests.el (image-create-image-with-map): Use a valid SVG image otherwise `image-size' will not return a valid value and calculation of scale could fail. (image-transform-map): Update according to changed signature of image--flip-map. Thanks! --------------yg83EmNRJ9bgvu0PitxQ12Kj Content-Type: text/x-patch; charset=UTF-8; name="image-compute-map-V2.patch" Content-Disposition: attachment; filename="image-compute-map-V2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IGQ3NDk2 NDg1YWNhLi5lOTczZGZmMzJjNyAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDIzLDExNSArMTQyMywxNDIgQEAgaW1hZ2UtcmVjb21wdXRl LW1hcC1wCiAgIDp0eXBlICdib29sZWFuCiAgIDp2ZXJzaW9uICIzMC4xIikKIAorKGRlZnN1 YnN0IGltYWdlLS1jb21wdXRlLXJvdGF0aW9uIChpbWFnZSkKKyAgIlJldHVybiB0aGUgY3Vy cmVudCByb3RhdGlvbiBvZiBJTUFHRSwgb3IgMCBpZiBubyByb3RhdGlvbi4KK0Fsc28gcmV0 dXJuIG5pbCBpZiByb3RhdGlvbiBpcyBub3QgYSBtdWx0aXBsZXMgb2YgOTAgZGVncmVlcyAo MCwgOTAsCisxODBbLTE4MF0gYW5kIDI3MFstOTBdKS4iCisgIChsZXQgKChkZWdyZWVzIChv ciAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSAwKSkpCisgICAgKGFuZCAoPSAw IChtb2QgZGVncmVlcyAxKSkKKyAgICAgICAgIChjYXIgKG1lbXFsICh0cnVuY2F0ZSAobW9k IGRlZ3JlZXMgMzYwKSkgJygwIDkwIDE4MCAyNzApKSkpKSkKKwogKGRlZnVuIGltYWdlLS1j b21wdXRlLW1hcCAoaW1hZ2UpCiAgICJDb21wdXRlIG1hcCBmb3IgSU1BR0Ugc3VpdGFibGUg dG8gYmUgdXNlZCBhcyBpdHMgOm1hcCBwcm9wZXJ0eS4KLVJldHVybiBhIGNvcHkgb2YgOm9y aWdpbmFsLWltYWdlIHRyYW5zZm9ybWVkIGJhc2VkIG9uIElNQUdFJ3MgOnNjYWxlLAorUmV0 dXJuIGEgY29weSBvZiA6b3JpZ2luYWwtbWFwIHRyYW5zZm9ybWVkIGJhc2VkIG9uIElNQUdF J3MgOnNjYWxlLAogOnJvdGF0aW9uLCBhbmQgOmZsaXAuICBXaGVuIElNQUdFJ3MgOm9yaWdp bmFsLW1hcCBpcyBuaWwsIHJldHVybiBuaWwuCiBXaGVuIDpyb3RhdGlvbiBpcyBub3QgYSBt dWx0aXBsZSBvZiA5MCwgcmV0dXJuIGNvcHkgb2YgOm9yaWdpbmFsLW1hcC4iCi0gIChwY2Fz ZS1sZXQqICgob3JpZ2luYWwtbWFwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6b3JpZ2luYWwt bWFwKSkKLSAgICAgICAgICAgICAgIChtYXAgKGNvcHktdHJlZSBvcmlnaW5hbC1tYXAgdCkp Ci0gICAgICAgICAgICAgICAoc2NhbGUgKG9yIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6c2Nh bGUpIDEpKQotICAgICAgICAgICAgICAgKHJvdGF0aW9uIChvciAoaW1hZ2UtcHJvcGVydHkg aW1hZ2UgOnJvdGF0aW9uKSAwKSkKLSAgICAgICAgICAgICAgIChmbGlwIChpbWFnZS1wcm9w ZXJ0eSBpbWFnZSA6ZmxpcCkpCi0gICAgICAgICAgICAgICAoKGFuZCBzaXplIGAoLHdpZHRo IC4gLGhlaWdodCkpIChpbWFnZS1zaXplIGltYWdlIHQpKSkKLSAgICAod2hlbiAoYW5kIDsg SGFuZGxlIG9ubHkgOTAtZGVncmVlIHJvdGF0aW9ucwotICAgICAgICAgICAoemVyb3AgKG1v ZCByb3RhdGlvbiAxKSkKLSAgICAgICAgICAgKHplcm9wICglICh0cnVuY2F0ZSByb3RhdGlv bikgOTApKSkKLSAgICAgIDs7IFNJWkUgZml0cyBNQVAgYWZ0ZXIgdHJhbnNmb3JtYXRpb25z LiAgU2NhbGUgTUFQIGJlZm9yZQotICAgICAgOzsgZmxpcCBhbmQgcm90YXRlIG9wZXJhdGlv bnMsIHNpbmNlIGJvdGggbmVlZCBNQVAgdG8gZml0IFNJWkUuCi0gICAgICAoaW1hZ2UtLXNj YWxlLW1hcCBtYXAgc2NhbGUpCisgICh3aGVuLWxldCAoKG1hcCAoaW1hZ2UtcHJvcGVydHkg aW1hZ2UgOm9yaWdpbmFsLW1hcCkpKQorICAgIChzZXRxIG1hcCAoY29weS10cmVlIG1hcCB0 KSkKKyAgICAobGV0KiAoKHNpemUgKGltYWdlLXNpemUgaW1hZ2UgdCkpCisgICAgICAgICAg IDs7IFRoZSBpbWFnZSBjYW4gYmUgc2NhbGVkIGZvciBtYW55IHJlYXNvbnMgKDpzY2FsZSwK KyAgICAgICAgICAgOzsgOm1heC13aWR0aCwgZXRjKSwgc28gdXNpbmcgYGltYWdlLS1jdXJy ZW50LXNjYWxpbmcnIHRvCisgICAgICAgICAgIDs7IGNhbGN1bGF0ZSB0aGUgY3VycmVudCBz Y2FsaW5nIGlzIHRoZSBjb3JyZWN0IG1ldGhvZC4gIEJ1dCwKKyAgICAgICAgICAgOzsgc2lu Y2UgZWFjaCBjYWxsIHRvIGBpbWFnZV9zaXplJyBpcyBleHBlbnNpdmUsIHRoZSBjb2RlIGlz CisgICAgICAgICAgIDs7IGR1cGxpY2F0ZWQgaGVyZSB0byBzYXZlIHRoZSBhIGNhbGwgdG8g YGltYWdlLXNpemUnLgorICAgICAgICAgICAoc2NhbGUgKC8gKGZsb2F0IChjYXIgc2l6ZSkp CisgICAgICAgICAgICAgICAgICAgICAoY2FyIChpbWFnZS1zaXplCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaW1hZ2UtLWltYWdlLXdpdGhvdXQtcGFyYW1ldGVycyBpbWFnZSkg dCkpKSkKKyAgICAgICAgICAgKHJvdGF0aW9uIChpbWFnZS0tY29tcHV0ZS1yb3RhdGlvbiBp bWFnZSkpCisgICAgICAgICAgIDs7IEltYWdlIGlzIGZsaXBwZWQgb25seSBpZiByb3RhdGlv biBpcyBhIG11bHRpcGxlIG9mIDkwLAorICAgICAgICAgICA7OyBpbmNsdWRpbmcgMC4KKyAg ICAgICAgICAgKGZsaXAgKGFuZCByb3RhdGlvbiAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOmZs aXApKSkpCisgICAgICA7OyBTSVpFIGZpdHMgTUFQIGFmdGVyIHRyYW5zZm9ybWF0aW9ucy4g IFNjYWxlIE1BUCBiZWZvcmUgZmxpcCBhbmQKKyAgICAgIDs7IHJvdGF0ZSBvcGVyYXRpb25z LCBzaW5jZSBib3RoIG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgKHVubGVzcyAoPSBz Y2FsZSAxKQorICAgICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBtYXAgc2NhbGUpKQogICAgICAg OzsgSW4gcmVuZGVyZWQgaW1hZ2VzLCByb3RhdGlvbiBpcyBhbHdheXMgYXBwbGllZCBiZWZv cmUgZmxpcC4KLSAgICAgIChpbWFnZS0tcm90YXRlLW1hcAotICAgICAgIG1hcCByb3RhdGlv biAoaWYgKG9yICg9IDkwIHJvdGF0aW9uKSAoPSAyNzAgcm90YXRpb24pKQorICAgICAgKHdo ZW4gKG1lbXFsIHJvdGF0aW9uICcoOTAgMTgwIDI3MCkpCisgICAgICAgIChpbWFnZS0tcm90 YXRlLW1hcAorICAgICAgICAgbWFwIHJvdGF0aW9uIChpZiAoPSByb3RhdGlvbiAxODApCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUKICAgICAgICAgICAgICAgICAgICAgICAg IDs7IElmIHJvdGF0ZWQgwrE5MMKwLCBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgICAg ICAgICAgICAgICAgICAgICAoY29ucyBoZWlnaHQgd2lkdGgpCi0gICAgICAgICAgICAgICAg ICAgICAgc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAoY2RyIHNpemUp IChjYXIgc2l6ZSkpKSkpCiAgICAgICA7OyBBZnRlciByb3RhdGlvbiwgdGhlcmUncyBubyBu ZWVkIHRvIHN3YXAgd2lkdGggYW5kIGhlaWdodC4KLSAgICAgIChpbWFnZS0tZmxpcC1tYXAg bWFwIGZsaXAgc2l6ZSkpCisgICAgICAod2hlbiBmbGlwCisgICAgICAgIChpbWFnZS0tZmxp cC1tYXAgbWFwIHNpemUpKSkKICAgICBtYXApKQogCiAoZGVmdW4gaW1hZ2UtLWNvbXB1dGUt b3JpZ2luYWwtbWFwIChpbWFnZSkKICAgIlJldHVybiBvcmlnaW5hbCBtYXAgZm9yIElNQUdF LgogSWYgSU1BR0UgbGFja3MgOm1hcCBwcm9wZXJ0eSwgcmV0dXJuIG5pbC4KLVdoZW4gOnJv dGF0aW9uIGlzIG5vdCBhIG11bHRpcGxlIG9mIDkwLCByZXR1cm4gY29weSBvZiA6bWFwLiIK LSAgKHdoZW4gKGltYWdlLXByb3BlcnR5IGltYWdlIDptYXApCi0gICAgKGxldCogKChvcmln aW5hbC1tYXAgKGNvcHktdHJlZSAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOm1hcCkgdCkpCi0g ICAgICAgICAgIChzY2FsZSAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpzY2FsZSkgMSkp Ci0gICAgICAgICAgIChyb3RhdGlvbiAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpyb3Rh dGlvbikgMCkpCi0gICAgICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6Zmxp cCkpCi0gICAgICAgICAgIChzaXplIChpbWFnZS1zaXplIGltYWdlIHQpKSkKLSAgICAgICh3 aGVuIChhbmQgOyBIYW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCi0gICAgICAgICAg ICAgKHplcm9wIChtb2Qgcm90YXRpb24gMSkpCi0gICAgICAgICAgICAgKHplcm9wICglICh0 cnVuY2F0ZSByb3RhdGlvbikgOTApKSkKLSAgICAgICAgOzsgSW4gcmVuZGVyZWQgaW1hZ2Vz LCByb3RhdGlvbiBpcyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KLSAgICAgICAgOzsg VG8gdW5kbyB0aGUgdHJhbnNmb3JtYXRpb24sIGZsaXAgYmVmb3JlIHJvdGF0aW5nLiAgU0la RSBmaXRzCi0gICAgICAgIDs7IE9SSUdJTkFMLU1BUCBiZWZvcmUgdHJhbnNmb3JtYXRpb25z IGFyZSBhcHBsaWVkLiAgVGhlcmVmb3JlLAotICAgICAgICA7OyBzY2FsZSBPUklHSU5BTC1N QVAgYWZ0ZXIgZmxpcCBhbmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlCi0gICAgICAgIDs7 IGJvdGggbmVlZCBPUklHSU5BTC1NQVAgdG8gZml0IFNJWkUuCi0gICAgICAgIChpbWFnZS0t ZmxpcC1tYXAgb3JpZ2luYWwtbWFwIGZsaXAgc2l6ZSkKLSAgICAgICAgKGltYWdlLS1yb3Rh dGUtbWFwIG9yaWdpbmFsLW1hcCAoLSByb3RhdGlvbikgc2l6ZSkKLSAgICAgICAgKGltYWdl LS1zY2FsZS1tYXAgb3JpZ2luYWwtbWFwICgvIDEuMCBzY2FsZSkpKQotICAgICAgb3JpZ2lu YWwtbWFwKSkpCitXaGVuIHRoZXJlIGlzIG5vIHRyYW5zZm9ybWF0aW9uLCByZXR1cm4gY29w eSBvZiA6bWFwLiIKKyAgKHdoZW4tbGV0ICgob3JpZ2luYWwtbWFwIChpbWFnZS1wcm9wZXJ0 eSBpbWFnZSA6bWFwKSkpCisgICAgKHNldHEgb3JpZ2luYWwtbWFwIChjb3B5LXRyZWUgb3Jp Z2luYWwtbWFwIHQpKQorICAgIChsZXQqICgoc2l6ZSAoaW1hZ2Utc2l6ZSBpbWFnZSB0KSkK KyAgICAgICAgICAgOzsgVGhlIGltYWdlIGNhbiBiZSBzY2FsZWQgZm9yIG1hbnkgcmVhc29u cyAoOnNjYWxlLAorICAgICAgICAgICA7OyA6bWF4LXdpZHRoLCBldGMpLCBzbyB1c2luZyBg aW1hZ2UtLWN1cnJlbnQtc2NhbGluZycgdG8KKyAgICAgICAgICAgOzsgY2FsY3VsYXRlIHRo ZSBjdXJyZW50IHNjYWxpbmcgaXMgdGhlIGNvcnJlY3QgbWV0aG9kLiAgQnV0LAorICAgICAg ICAgICA7OyBzaW5jZSBlYWNoIGNhbGwgdG8gYGltYWdlX3NpemUnIGlzIGV4cGVuc2l2ZSwg dGhlIGNvZGUgaXMKKyAgICAgICAgICAgOzsgZHVwbGljYXRlZCBoZXJlIHRvIHNhdmUgdGhl IGEgY2FsbCB0byBgaW1hZ2Utc2l6ZScuCisgICAgICAgICAgIChzY2FsZSAoLyAoZmxvYXQg KGNhciBzaXplKSkKKyAgICAgICAgICAgICAgICAgICAgIChjYXIgKGltYWdlLXNpemUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZS0taW1hZ2Utd2l0aG91dC1wYXJhbWV0 ZXJzIGltYWdlKSB0KSkpKQorICAgICAgICAgICAocm90YXRpb24gKGltYWdlLS1jb21wdXRl LXJvdGF0aW9uIGltYWdlKSkKKyAgICAgICAgICAgOzsgSW1hZ2UgaXMgZmxpcHBlZCBvbmx5 IGlmIHJvdGF0aW9uIGlzIGEgbXVsdGlwbGUgb2YgOTAKKyAgICAgICAgICAgOzsgaW5jbHVk aW5nIDAuCisgICAgICAgICAgIChmbGlwIChhbmQgcm90YXRpb24gKGltYWdlLXByb3BlcnR5 IGltYWdlIDpmbGlwKSkpKQorICAgICAgOzsgSW4gcmVuZGVyZWQgaW1hZ2VzLCByb3RhdGlv biBpcyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KKyAgICAgIDs7IFRvIHVuZG8gdGhl IHRyYW5zZm9ybWF0aW9uLCBmbGlwIGJlZm9yZSByb3RhdGluZy4gIFNJWkUgZml0cworICAg ICAgOzsgT1JJR0lOQUwtTUFQIGJlZm9yZSB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFwcGxpZWQu ICBUaGVyZWZvcmUsCisgICAgICA7OyBzY2FsZSBPUklHSU5BTC1NQVAgYWZ0ZXIgZmxpcCBh bmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlCisgICAgICA7OyBib3RoIG5lZWQgT1JJR0lO QUwtTUFQIHRvIGZpdCBTSVpFLgorICAgICAgOzsgSW4gcmVuZGVyZWQgaW1hZ2VzLCByb3Rh dGlvbiBpcyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KKyAgICAgICh3aGVuIGZsaXAK KyAgICAgICAgKGltYWdlLS1mbGlwLW1hcCBvcmlnaW5hbC1tYXAgc2l6ZSkpCisgICAgICAo d2hlbiAobWVtcWwgcm90YXRpb24gJyg5MCAxODAgMjcwKSkKKyAgICAgICAgKGltYWdlLS1y b3RhdGUtbWFwIG9yaWdpbmFsLW1hcCAoLSByb3RhdGlvbikgc2l6ZSkpCisgICAgICAodW5s ZXNzICg9IHNjYWxlIDEpCisgICAgICAgIChpbWFnZS0tc2NhbGUtbWFwIG9yaWdpbmFsLW1h cCAoLyAxLjAgc2NhbGUpKSkpCisgICAgb3JpZ2luYWwtbWFwKSkKIAogKGRlZnVuIGltYWdl LS1zY2FsZS1tYXAgKG1hcCBzY2FsZSkKICAgIlNjYWxlIE1BUCBhY2NvcmRpbmcgdG8gU0NB TEUuCiBEZXN0cnVjdGl2ZWx5IG1vZGlmaWVzIGFuZCByZXR1cm5zIE1BUC4iCi0gICh1bmxl c3MgKD0gMSBzY2FsZSkKLSAgICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4gLGNvb3Jk cykgLF9pZCAsX3BsaXN0KSBtYXApCi0gICAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBlCi0g ICAgICAgICgncmVjdAotICAgICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAocm91bmQgKCog KGNhYXIgY29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNldGYgKGNkYXIgY29vcmRzKSAo cm91bmQgKCogKGNkYXIgY29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNldGYgKGNhZHIg Y29vcmRzKSAocm91bmQgKCogKGNhZHIgY29vcmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNl dGYgKGNkZHIgY29vcmRzKSAocm91bmQgKCogKGNkZHIgY29vcmRzKSBzY2FsZSkpKSkKLSAg ICAgICAgKCdjaXJjbGUKLSAgICAgICAgIChzZXRmIChjYWFyIGNvb3JkcykgKHJvdW5kICgq IChjYWFyIGNvb3Jkcykgc2NhbGUpKSkKLSAgICAgICAgIChzZXRmIChjZGFyIGNvb3Jkcykg KHJvdW5kICgqIChjZGFyIGNvb3Jkcykgc2NhbGUpKSkKLSAgICAgICAgIChzZXRjZHIgY29v cmRzIChyb3VuZCAoKiAoY2RyIGNvb3Jkcykgc2NhbGUpKSkpCi0gICAgICAgICgncG9seQot ICAgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAgICAoYXNl dCBjb29yZHMgaQotICAgICAgICAgICAgICAgICAocm91bmQgKCogKGFyZWYgY29vcmRzIGkp IHNjYWxlKSkpKSkpKSkKKyAgKHBjYXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMp ICxfaWQgLF9wbGlzdCkgbWFwKQorICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKKyAgICAg ICgncmVjdAorICAgICAgIChzZXRmIChjYWFyIGNvb3JkcykgKHJvdW5kICgqIChjYWFyIGNv b3Jkcykgc2NhbGUpKSkKKyAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAo Y2RhciBjb29yZHMpIHNjYWxlKSkpCisgICAgICAgKHNldGYgKGNhZHIgY29vcmRzKSAocm91 bmQgKCogKGNhZHIgY29vcmRzKSBzY2FsZSkpKQorICAgICAgIChzZXRmIChjZGRyIGNvb3Jk cykgKHJvdW5kICgqIChjZGRyIGNvb3Jkcykgc2NhbGUpKSkpCisgICAgICAoJ2NpcmNsZQor ICAgICAgIChzZXRmIChjYWFyIGNvb3JkcykgKHJvdW5kICgqIChjYWFyIGNvb3Jkcykgc2Nh bGUpKSkKKyAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAoY2RhciBjb29y ZHMpIHNjYWxlKSkpCisgICAgICAgKHNldGNkciBjb29yZHMgKHJvdW5kICgqIChjZHIgY29v cmRzKSBzY2FsZSkpKSkKKyAgICAgICgncG9seQorICAgICAgIChkb3RpbWVzIChpIChsZW5n dGggY29vcmRzKSkKKyAgICAgICAgIChhc2V0IGNvb3JkcyBpCisgICAgICAgICAgICAgICAo cm91bmQgKCogKGFyZWYgY29vcmRzIGkpIHNjYWxlKSkpKSkpKQogICBtYXApCiAKIChkZWZ1 biBpbWFnZS0tcm90YXRlLW1hcCAobWFwIHJvdGF0aW9uIHNpemUpCiAgICJSb3RhdGUgTUFQ IGFjY29yZGluZyB0byBST1RBVElPTiBhbmQgU0laRS4KK1JPVEFUSU9OIG11c3QgYmUgYSBu b24temVybyBtdWx0aXBsZSBvZiA5MC4KIERlc3RydWN0aXZlbHkgbW9kaWZpZXMgYW5kIHJl dHVybnMgTUFQLiIKLSAgKHVubGVzcyAoemVyb3Agcm90YXRpb24pCi0gICAgKHBjYXNlLWRv bGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQotICAgICAg KHBjYXNlLWV4aGF1c3RpdmUgdHlwZQotICAgICAgICAoJ3JlY3QKLSAgICAgICAgIChsZXQg KCB4MCB5MCAgOyBOZXcgdXBwZXIgbGVmdCBjb3JuZXIKLSAgICAgICAgICAgICAgICB4MSB5 MSkgOyBOZXcgYm90dG9tIHJpZ2h0IGNvcm5lcgotICAgICAgICAgICAocGNhc2UgKHRydW5j YXRlIChtb2Qgcm90YXRpb24gMzYwKSkgOyBTZXQgbmV3IGNvcm5lcnMgdG8uLi4KLSAgICAg ICAgICAgICAoOTAgOyAuLi5vbGQgYm90dG9tIGxlZnQgYW5kIHVwcGVyIHJpZ2h0Ci0gICAg ICAgICAgICAgIChzZXRxIHgwIChjYWFyIGNvb3JkcykgeTAgKGNkZHIgY29vcmRzKQotICAg ICAgICAgICAgICAgICAgICB4MSAoY2FkciBjb29yZHMpIHkxIChjZGFyIGNvb3JkcykpKQot ICAgICAgICAgICAgICgxODAgOyAuLi5vbGQgYm90dG9tIHJpZ2h0IGFuZCB1cHBlciBsZWZ0 Ci0gICAgICAgICAgICAgIChzZXRxIHgwIChjYWRyIGNvb3JkcykgeTAgKGNkZHIgY29vcmRz KQotICAgICAgICAgICAgICAgICAgICB4MSAoY2FhciBjb29yZHMpIHkxIChjZGFyIGNvb3Jk cykpKQotICAgICAgICAgICAgICgyNzAgOyAuLi5vbGQgdXBwZXIgcmlnaHQgYW5kIGJvdHRv bSBsZWZ0Ci0gICAgICAgICAgICAgIChzZXRxIHgwIChjYWRyIGNvb3JkcykgeTAgKGNkYXIg Y29vcmRzKQotICAgICAgICAgICAgICAgICAgICB4MSAoY2FhciBjb29yZHMpIHkxIChjZGRy IGNvb3JkcykpKSkKLSAgICAgICAgICAgKHNldGNhciBjb29yZHMgKGltYWdlLS1yb3RhdGUt Y29vcmQgeDAgeTAgcm90YXRpb24gc2l6ZSkpCi0gICAgICAgICAgIChzZXRjZHIgY29vcmRz IChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkxIHJvdGF0aW9uIHNpemUpKSkpCi0gICAgICAg ICgnY2lyY2xlCi0gICAgICAgICAoc2V0Y2FyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29y ZAotICAgICAgICAgICAgICAgICAgICAgICAgIChjYWFyIGNvb3JkcykgKGNkYXIgY29vcmRz KSByb3RhdGlvbiBzaXplKSkpCi0gICAgICAgICgncG9seQotICAgICAgICAgKGRvdGltZXMg KGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAgICAod2hlbiAoPSAwICglIGkgMikpCi0g ICAgICAgICAgICAgKHBjYXNlLWxldCAoKGAoLHggLiAseSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgKGltYWdlLS1yb3RhdGUtY29vcmQKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIChhcmVmIGNvb3JkcyBpKSAoYXJlZiBjb29yZHMgKDErIGkpKSByb3RhdGlvbiBzaXpl KSkpCi0gICAgICAgICAgICAgICAoYXNldCBjb29yZHMgaSB4KQotICAgICAgICAgICAgICAg KGFzZXQgY29vcmRzICgxKyBpKSB5KSkpKSkpKSkKKyAgKHNldHEgcm90YXRpb24gKG1vZCBy b3RhdGlvbiAzNjApKQorICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4gLGNvb3Jkcykg LF9pZCAsX3BsaXN0KSBtYXApCisgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlwZQorICAgICAg KCdyZWN0CisgICAgICAgKGxldCAoIHgwIHkwICA7IE5ldyB1cHBlciBsZWZ0IGNvcm5lcgor ICAgICAgICAgICAgICB4MSB5MSkgOyBOZXcgYm90dG9tIHJpZ2h0IGNvcm5lcgorICAgICAg ICAgKHBjYXNlIHJvdGF0aW9uIDsgU2V0IG5ldyBjb3JuZXJzIHRvLi4uCisgICAgICAgICAg ICg5MCA7IC4uLm9sZCBib3R0b20gbGVmdCBhbmQgdXBwZXIgcmlnaHQKKyAgICAgICAgICAg IChzZXRxIHgwIChjYWFyIGNvb3JkcykgeTAgKGNkZHIgY29vcmRzKQorICAgICAgICAgICAg ICAgICAgeDEgKGNhZHIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMpKSkKKyAgICAgICAgICAg KDE4MCA7IC4uLm9sZCBib3R0b20gcmlnaHQgYW5kIHVwcGVyIGxlZnQKKyAgICAgICAgICAg IChzZXRxIHgwIChjYWRyIGNvb3JkcykgeTAgKGNkZHIgY29vcmRzKQorICAgICAgICAgICAg ICAgICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RhciBjb29yZHMpKSkKKyAgICAgICAgICAg KDI3MCA7IC4uLm9sZCB1cHBlciByaWdodCBhbmQgYm90dG9tIGxlZnQKKyAgICAgICAgICAg IChzZXRxIHgwIChjYWRyIGNvb3JkcykgeTAgKGNkYXIgY29vcmRzKQorICAgICAgICAgICAg ICAgICAgeDEgKGNhYXIgY29vcmRzKSB5MSAoY2RkciBjb29yZHMpKSkpCisgICAgICAgICAo c2V0Y2FyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MCB5MCByb3RhdGlvbiBzaXpl KSkKKyAgICAgICAgIChzZXRjZHIgY29vcmRzIChpbWFnZS0tcm90YXRlLWNvb3JkIHgxIHkx IHJvdGF0aW9uIHNpemUpKSkpCisgICAgICAoJ2NpcmNsZQorICAgICAgIChzZXRjYXIgY29v cmRzIChpbWFnZS0tcm90YXRlLWNvb3JkCisgICAgICAgICAgICAgICAgICAgICAgIChjYWFy IGNvb3JkcykgKGNkYXIgY29vcmRzKSByb3RhdGlvbiBzaXplKSkpCisgICAgICAoJ3BvbHkK KyAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3JkcykpCisgICAgICAgICAod2hlbiAo PSAwICglIGkgMikpCisgICAgICAgICAgIChwY2FzZS1sZXQgKChgKCx4IC4gLHkpCisgICAg ICAgICAgICAgICAgICAgICAgICAoaW1hZ2UtLXJvdGF0ZS1jb29yZAorICAgICAgICAgICAg ICAgICAgICAgICAgIChhcmVmIGNvb3JkcyBpKSAoYXJlZiBjb29yZHMgKDErIGkpKSByb3Rh dGlvbiBzaXplKSkpCisgICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgeCkKKyAgICAgICAg ICAgICAoYXNldCBjb29yZHMgKDErIGkpIHkpKSkpKSkpCiAgIG1hcCkKIAogKGRlZnVuIGlt YWdlLS1yb3RhdGUtY29vcmQgKHggeSBhbmdsZSBzaXplKQogICAiUm90YXRlIGNvb3JkaW5h dGVzIFggYW5kIFkgYnkgQU5HTEUgaW4gaW1hZ2Ugb2YgU0laRS4KLUFOR0xFIG11c3QgYmUg YSBtdWx0aXBsZSBvZiA5MC4gIFJldHVybnMgYSBjb25zIGNlbGwgb2Ygcm91bmRlZAotY29v cmRpbmF0ZXMgKFgxIFkxKS4iCitBTkdMRSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOTAgaW4g WzkwIDE4MCAyNzBdLiAgUmV0dXJucyBhIGNvbnMgY2VsbCBvZgorcm91bmRlZCBjb29yZGlu YXRlcyAoWDEgWTEpLiIKICAgKHBjYXNlLWxldCogKChyYWRpYW4gKCogKC8gYW5nbGUgMTgw LjApIGZsb2F0LXBpKSkKICAgICAgICAgICAgICAgIChgKCx3aWR0aCAuICxoZWlnaHQpIHNp emUpCiAgICAgICAgICAgICAgICA7OyB5IGlzIHBvc2l0aXZlLCBidXQgd2UgYXJlIGluIHRo ZSBib3R0b20tcmlnaHQgcXVhZHJhbnQKQEAgLTE1NTIsMjUgKzE1NzksMjQgQEAgaW1hZ2Ut LXJvdGF0ZS1jb29yZAogICAgICAgICAgICAgICAgKHkxICgtIHkxKSkpCiAgICAgKGNvbnMg KHJvdW5kIHgxKSAocm91bmQgeTEpKSkpCiAKLShkZWZ1biBpbWFnZS0tZmxpcC1tYXAgKG1h cCBmbGlwIHNpemUpCi0gICJIb3Jpem9udGFsbHkgZmxpcCBNQVAgYWNjb3JkaW5nIHRvIEZM SVAgYW5kIFNJWkUuCisoZGVmdW4gaW1hZ2UtLWZsaXAtbWFwIChtYXAgc2l6ZSkKKyAgIkhv cml6b250YWxseSBmbGlwIE1BUCBhY2NvcmRpbmcgdG8gU0laRS4KIERlc3RydWN0aXZlbHkg bW9kaWZpZXMgYW5kIHJldHVybnMgTUFQLiIKLSAgKHdoZW4gZmxpcAotICAgIChwY2FzZS1k b2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkKLSAgICAg IChwY2FzZS1leGhhdXN0aXZlIHR5cGUKLSAgICAgICAgKCdyZWN0Ci0gICAgICAgICAobGV0 ICgoeDAgKC0gKGNhciBzaXplKSAoY2FkciBjb29yZHMpKSkKLSAgICAgICAgICAgICAgICh5 MCAoY2RhciBjb29yZHMpKQotICAgICAgICAgICAgICAgKHgxICgtIChjYXIgc2l6ZSkgKGNh YXIgY29vcmRzKSkpCi0gICAgICAgICAgICAgICAoeTEgKGNkZHIgY29vcmRzKSkpCi0gICAg ICAgICAgIChzZXRjYXIgY29vcmRzIChjb25zIHgwIHkwKSkKLSAgICAgICAgICAgKHNldGNk ciBjb29yZHMgKGNvbnMgeDEgeTEpKSkpCi0gICAgICAgICgnY2lyY2xlCi0gICAgICAgICAo c2V0ZiAoY2FhciBjb29yZHMpICgtIChjYXIgc2l6ZSkgKGNhYXIgY29vcmRzKSkpKQotICAg ICAgICAoJ3BvbHkKLSAgICAgICAgIChkb3RpbWVzIChpIChsZW5ndGggY29vcmRzKSkKLSAg ICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIpKQotICAgICAgICAgICAgIChhc2V0IGNvb3Jk cyBpICgtIChjYXIgc2l6ZSkgKGFyZWYgY29vcmRzIGkpKSkpKSkpKSkKKyAgKHBjYXNlLWRv bGlzdCAoYCgsYCgsdHlwZSAuICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQorICAgIChw Y2FzZS1leGhhdXN0aXZlIHR5cGUKKyAgICAgICgncmVjdAorICAgICAgIChsZXQgKCh4MCAo LSAoY2FyIHNpemUpIChjYWRyIGNvb3JkcykpKQorICAgICAgICAgICAgICh5MCAoY2RhciBj b29yZHMpKQorICAgICAgICAgICAgICh4MSAoLSAoY2FyIHNpemUpIChjYWFyIGNvb3Jkcykp KQorICAgICAgICAgICAgICh5MSAoY2RkciBjb29yZHMpKSkKKyAgICAgICAgIChzZXRjYXIg Y29vcmRzIChjb25zIHgwIHkwKSkKKyAgICAgICAgIChzZXRjZHIgY29vcmRzIChjb25zIHgx IHkxKSkpKQorICAgICAgKCdjaXJjbGUKKyAgICAgICAoc2V0ZiAoY2FhciBjb29yZHMpICgt IChjYXIgc2l6ZSkgKGNhYXIgY29vcmRzKSkpKQorICAgICAgKCdwb2x5CisgICAgICAgKGRv dGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQorICAgICAgICAgKHdoZW4gKD0gMCAoJSBpIDIp KQorICAgICAgICAgICAoYXNldCBjb29yZHMgaSAoLSAoY2FyIHNpemUpIChhcmVmIGNvb3Jk cyBpKSkpKSkpKSkKICAgbWFwKQogCiAocHJvdmlkZSAnaW1hZ2UpCmRpZmYgLS1naXQgYS90 ZXN0L2xpc3AvaW1hZ2UtdGVzdHMuZWwgYi90ZXN0L2xpc3AvaW1hZ2UtdGVzdHMuZWwKaW5k ZXggNmE1ZjAzZTM4YTAuLjAyMDc4MWVmZjUwIDEwMDY0NAotLS0gYS90ZXN0L2xpc3AvaW1h Z2UtdGVzdHMuZWwKKysrIGIvdGVzdC9saXNwL2ltYWdlLXRlc3RzLmVsCkBAIC0xNTgsNyAr MTU4LDcgQEAgaW1hZ2Utcm90YXRlCiAoZXJ0LWRlZnRlc3QgaW1hZ2UtY3JlYXRlLWltYWdl LXdpdGgtbWFwICgpCiAgICJUZXN0IHRoYXQgYGNyZWF0ZS1pbWFnZScgY29ycmVjdGx5IGFk ZHMgOm1hcCBhbmQvb3IgOm9yaWdpbmFsLW1hcC4iCiAgIChza2lwLXVubGVzcyAoZGlzcGxh eS1pbWFnZXMtcCkpCi0gIChsZXQgKChkYXRhICJmb28iKQorICAobGV0ICgoZGF0YSAiPHN2 ZyB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJo dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53 My5vcmcvMTk5OS94bGlua1wiPjwvc3ZnPiIpCiAgICAgICAgIChtYXAgJygoKGNpcmNsZSAo MSAuICAxKSAuICAxKSBhKSkpCiAgICAgICAgIChvcmlnaW5hbC1tYXAgJygoKGNpcmNsZSAo MiAuICAyKSAuICAyKSBhKSkpCiAgICAgICAgIChvcmlnaW5hbC1tYXAtb3RoZXIgJygoKGNp cmNsZSAoMyAuIDMpIC4gMykgYSkpKSkKQEAgLTI4Miw3ICsyODIsNyBAQCBpbWFnZS10cmFu c2Zvcm0tbWFwCiAgICAgICAgICAgICAgICAgICAgJygoKGNpcmNsZSAoMTIgLiA0KSAuIDIp ICJjaXJjbGUiKQogICAgICAgICAgICAgICAgICAgICAgKChyZWN0ICg3IC4gMykgOSAuIDgp ICJyZWN0IikKICAgICAgICAgICAgICAgICAgICAgICgocG9seSAuIFs0IDYgMiA3IDEgMl0p ICJwb2x5IikpKSkKLSAgICAoc2hvdWxkIChlcXVhbCAoaW1hZ2UtLWZsaXAtbWFwIChjb3B5 LXRyZWUgbWFwIHQpIHQgYCgsd2lkdGggLiAsaGVpZ2h0KSkKKyAgICAoc2hvdWxkIChlcXVh bCAoaW1hZ2UtLWZsaXAtbWFwIChjb3B5LXRyZWUgbWFwIHQpIGAoLHdpZHRoIC4gLGhlaWdo dCkpCiAgICAgICAgICAgICAgICAgICAgJygoKGNpcmNsZSAoNiAuIDMpIC4gMikgImNpcmNs ZSIpCiAgICAgICAgICAgICAgICAgICAgICAoKHJlY3QgKDIgLiA2KSA3IC4gOCkgInJlY3Qi KQogICAgICAgICAgICAgICAgICAgICAgKChwb2x5IC4gWzQgMTEgMyAxMyA4IDE0XSkgInBv bHkiKSkpKQpAQCAtMjkxLDcgKzI5MSw3IEBAIGltYWdlLXRyYW5zZm9ybS1tYXAKICAgICAg IDs7IFNjYWxlIHNpemUgYmVjYXVzZSB0aGUgbWFwIGhhcyBiZWVuIHNjYWxlZC4KICAgICAg IChpbWFnZS0tcm90YXRlLW1hcCBjb3B5IDkwIGAoLCgqIDIgd2lkdGgpIC4gLCgqIDIgaGVp Z2h0KSkpCiAgICAgICA7OyBTd2FwIHdpZHRoIGFuZCBoZWlnaHQgYmVjYXVzZSB0aGUgbWFw IGhhcyBiZWVuIGZsaXBwZWQuCi0gICAgICAoaW1hZ2UtLWZsaXAtbWFwIGNvcHkgdCBgKCwo KiAyIGhlaWdodCkgLiAsKCogMiB3aWR0aCkpKQorICAgICAgKGltYWdlLS1mbGlwLW1hcCBj b3B5IGAoLCgqIDIgaGVpZ2h0KSAuICwoKiAyIHdpZHRoKSkpCiAgICAgICAoc2hvdWxkIChl cXVhbCBjb3B5CiAgICAgICAgICAgICAgICAgICAgICAnKCgoY2lyY2xlICg2IC4gOCkgLiA0 KSAiY2lyY2xlIikKICAgICAgICAgICAgICAgICAgICAgICAgKChyZWN0ICgxMiAuIDYpIDE2 IC4gMTYpICJyZWN0IikK --------------yg83EmNRJ9bgvu0PitxQ12Kj-- From debbugs-submit-bounces@debbugs.gnu.org Sat Mar 30 09:37:32 2024 Received: (at 69992-done) by debbugs.gnu.org; 30 Mar 2024 13:37:32 +0000 Received: from localhost ([127.0.0.1]:44225 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqYto-0000LK-1q for submit@debbugs.gnu.org; Sat, 30 Mar 2024 09:37:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44800) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqYtk-0000KV-4D for 69992-done@debbugs.gnu.org; Sat, 30 Mar 2024 09:37: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 ) id 1rqYtc-00039M-E1; Sat, 30 Mar 2024 09:37:20 -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=zl2mz75+JEU4XPxD/7V7qdSIUqYvcmu42YBOKnH02hc=; b=rn3rkQlbn/if 3G2/b0b9lROR6IyBKtJl7lf0J/DknGDdi8jAVclHrmvnGto4sakAu+nBPZ3zaH4q2bq2pHKNtOGZ7 l4NwBdoX4a/Jo68VGbOywO8KBRSlAXTG1h1AQHlA5+5PxWGbYByezNzT9OgXJGr4yHOvB4ea1G+v7 sD2b0BqjsjkphuoomPcSZ9ZrRUUly8w4c/cEXI+tbBturELnHods+85RfFK0IELgaBRLBKWMM10Eu 2SptZe8OAKjgVAgWnk2uWidAqEa2+HfA4FSeRLgb8noTUDZcBNbaKvrbfl8tmEyLkJ7pJs9sYce7g IJidoKR22T7DTSTeBePl1g==; Date: Sat, 30 Mar 2024 16:37:15 +0300 Message-Id: <86h6gndeno.fsf@gnu.org> From: Eli Zaretskii To: David Ponce In-Reply-To: (message from David Ponce on Sat, 30 Mar 2024 13:59:41 +0100) Subject: Re: bug#69992: Minor improvement to image map transformation logic References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> <8634s8dtrp.fsf@gnu.org> <645a1ccd-868b-4e02-bfc3-0ce4ab6b8f38@orange.fr> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 69992-done Cc: 69992-done@debbugs.gnu.org, joseph@breatheoutbreathe.in X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sat, 30 Mar 2024 13:59:41 +0100 > From: David Ponce > Cc: 69992@debbugs.gnu.org, joseph@breatheoutbreathe.in > > Here is my last patch. The only change compared to the previous patch is that > now the scale factor is correctly calculated based on the size of the image and > the displayed size. To minimize the performance impact, I saved a call to > `image-size' by doing the calculation directly in the `image--compute-map' and > `image--compute-original-map' functions. I did some benchmarks and the > difference is not significant. The tests still give the same results :-) > > Here is the new change log: Thanks, installed on master, and closing the bug. From debbugs-submit-bounces@debbugs.gnu.org Sat Mar 30 15:44:21 2024 Received: (at 69992) by debbugs.gnu.org; 30 Mar 2024 19:44:21 +0000 Received: from localhost ([127.0.0.1]:46175 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqecm-00026n-U6 for submit@debbugs.gnu.org; Sat, 30 Mar 2024 15:44:21 -0400 Received: from out-180.mta1.migadu.com ([2001:41d0:203:375::b4]:27372) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rqecj-00026W-E6 for 69992@debbugs.gnu.org; Sat, 30 Mar 2024 15:44:19 -0400 References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> <182126ee-57b1-4a86-82c6-ba46e4b676cb@orange.fr> <8634s8dtrp.fsf@gnu.org> <645a1ccd-868b-4e02-bfc3-0ce4ab6b8f38@orange.fr> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=breatheoutbreathe.in; s=key1; t=1711827848; 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=y9TD7csfxJsaZU6j4ReB8fKCUIojkbmCpxasoAfLDjk=; b=JKjAqMIsbBN3Hds6Wuf6s1m19aDhRTX8UtjRbJEwcFBtKvY3/Aiwa3p21iew3OMUtaoMNb 6jzZpUVrBqdpuat+Fcf0mj/8Ec3pIpgZMnL6b5upvtXrfk6Nx93nwVWrMnCPveq7IuX20D +J0RWRXvgbGPz6MdIsIRMBi1ZidYcMc= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Joseph Turner To: David Ponce Subject: Re: bug#69992: Minor improvement to image map transformation logic Date: Sat, 30 Mar 2024 12:07:05 -0700 In-reply-to: Message-ID: <87bk6vcxoc.fsf@breatheoutbreathe.in> MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 69992 Cc: Eli Zaretskii , 69992@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) David Ponce writes: > Here is my last patch. The only change compared to the previous patch is that > now the scale factor is correctly calculated based on the size of the image and > the displayed size. To minimize the performance impact, I saved a call to > `image-size' by doing the calculation directly in the `image--compute-map' and > `image--compute-original-map' functions. I did some benchmarks and the > difference is not significant. The tests still give the same results :-) Thank you for these fixes and optimizations!!! The tests pass for me. > Here is the new change log: > > 2024-03-30 David Ponce > > * lisp/image.el (image--compute-rotation): New function. > (image--compute-map, image--compute-original-map): Use it. > Ensure all transformations are applied or undone according to what > Emacs does internally. Call a transformation function only when > needed. Fix doc string. With this fix, I think we can remove `image-tests--map-equal'. I'll submit a new bug. > (image--scale-map): Assume effective scale argument. > (image--rotate-map): Assume effective rotation argument. > (image--rotate-coord): Improve doc string. > (image--flip-map): Remove no more used flip argument. > > * test/lisp/image-tests.el (image-create-image-with-map): Use a > valid SVG image otherwise `image-size' will not return a valid > value and calculation of scale could fail. > (image-transform-map): Update according to changed signature of > image--flip-map. > > Thanks! > > [2. text/x-patch; image-compute-map-V2.patch]... From unknown Tue Jun 24 03:24:11 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sun, 28 Apr 2024 11:24:10 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator