From unknown Mon Aug 18 08:27:04 2025 X-Loop: help-debbugs@gnu.org Subject: bug#71874: 30.0.60; [PATCH] Fontify doxygen comments in c-ts-mode,c++-ts-mode and java-ts-mode Resent-From: Vincenzo Pupillo Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 01 Jul 2024 10:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 71874 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 71874@debbugs.gnu.org X-Debbugs-Original-To: Bug Emacs Received: via spool by submit@debbugs.gnu.org id=B.171983093018826 (code B ref -1); Mon, 01 Jul 2024 10:49:02 +0000 Received: (at submit) by debbugs.gnu.org; 1 Jul 2024 10:48:50 +0000 Received: from localhost ([127.0.0.1]:60229 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sOEaX-0004tW-75 for submit@debbugs.gnu.org; Mon, 01 Jul 2024 06:48:50 -0400 Received: from lists.gnu.org ([209.51.188.17]:44194) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sOEaU-0004tM-Ud for submit@debbugs.gnu.org; Mon, 01 Jul 2024 06:48:48 -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 1sOEaN-0007Gi-5e for bug-gnu-emacs@gnu.org; Mon, 01 Jul 2024 06:48:41 -0400 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sOEaK-0005X1-Ip for bug-gnu-emacs@gnu.org; Mon, 01 Jul 2024 06:48:38 -0400 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-a72b3e1c14cso320871466b.1 for ; Mon, 01 Jul 2024 03:48:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719830915; x=1720435715; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=rZH55IERme7j2260849oFZf51OWXo6GKePg5kifUZXE=; b=LQdgQPtDJ/WIJkEVQYBg80+SN24SHnAfWz28XWdxLKqCod7KWo5DwPygme7oVJBJGL 5y4UNNqlbmA8BtZmo+p2CgnuVW2Gf/k1mWJqkPmr7AzDgHV15mVRfJldj/W1IWuqKOtQ H56PzFTioiwnQn5H5eA9Tc9KCshKwlM+GxMk6LmvwfUZe9o3NJmPFWoPt9/g01VT/sBV vWgYKnrDlhbioMGMndlnUXzu80TE4yfx/sLf+HD5+Hd+N36k6Cdfz+OY52JCylFXaW60 F0A+BFhP/CwRACp2JVB5VW3DT3NZEIRTogVasBUUFpGRo6JO25z9Nh0Vfv0V/byAxUMr RXfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719830915; x=1720435715; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rZH55IERme7j2260849oFZf51OWXo6GKePg5kifUZXE=; b=KUZXK6mK2NCMcDQq/Fcc673yd+9i2kC677wApWEnuZLL5VtSl7HcbEktNIoYc7MIew pTPGg4CBqaz/PiFuF7kO+X9BjohMeczehJ7rZ7gj7aKP076CyB0BXGeDZ4eAQvRQt4Mf OOYo4a02aHPyMZKEeObNbbYRJYRuMN+FHpsaPENFFBSXrp2prF2hYA0itbteXuM5MfB2 C3Itg9KAn5cvghNUFPu9FmVGnz/Phv6RIP9Jsh3jL4BPCAQA1cDTP63Zqj40RYlnc0vP 4TgMmrvhLnhsExiwvkBTnZ8DBNmRXRisIaqdeusdoj3HuTt6y57MEniLD+Aa0f5WoCXO MXrQ== X-Gm-Message-State: AOJu0YxWFHgyfA1YG5jCpNxhUALdoob+08PF3Ta45BBBogZtbb4jhvLj zfsdECEuD/ChlbIp7AeegZJky+J0Snaw7yrF97DKHVtTf1PtIj2XVG3k5Q== X-Google-Smtp-Source: AGHT+IGaz43zZn1PBiT9H2dIKAENJJOV9T+T3eflpFP8IxV80Y2eHlXnDEVJV7kw6o4y3HSClSMmcg== X-Received: by 2002:a17:907:7211:b0:a6f:e456:4207 with SMTP id a640c23a62f3a-a75144a2799mr447023566b.61.1719830914518; Mon, 01 Jul 2024 03:48:34 -0700 (PDT) Received: from 3-191.divsi.unimi.it (3-191.divsi.unimi.it. [159.149.3.191]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a72ab065735sm323056466b.135.2024.07.01.03.48.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Jul 2024 03:48:34 -0700 (PDT) From: Vincenzo Pupillo Date: Mon, 01 Jul 2024 12:48:33 +0200 Message-ID: <9826503.eNJFYEL58v@3-191.divsi.unimi.it> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart21879956.4csPzL39Zc" Content-Transfer-Encoding: 7Bit Received-SPF: pass client-ip=2a00:1450:4864:20::62d; envelope-from=v.pupillo@gmail.com; helo=mail-ej1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) 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.3 (--) This is a multi-part message in MIME format. --nextPart21879956.4csPzL39Zc Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="utf-8" Ciao, This patch adds support for comment fontification using the doxygen parser: https://github.com/tree-sitter-grammars/tree-sitter-doxygen This is the same parser used by nvim treesitter and seems to be quite stable. The attached screenshot shows the result. This patch also works with emacs 31. Thanks. Vincenzo --nextPart21879956.4csPzL39Zc Content-Disposition: attachment; filename="0001-Fontify-doxygen-support-to-c-ts-mode-c-ts-mode-and-j.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="x-UTF_8J"; name="0001-Fontify-doxygen-support-to-c-ts-mode-c-ts-mode-and-j.patch" >From 298a7676c924fdc0642dcf867f3ac0da82409968 Mon Sep 17 00:00:00 2001 From: Vincenzo Pupillo Date: Mon, 1 Jul 2024 12:34:01 +0200 Subject: [PATCH] Fontify doxygen support to c-ts-mode, c++-ts-mode and java-ts-mode Add doxygen support to 'c-ts-mode', 'c++-ts-mode' and 'java-ts-mode' using tree-sitter-doxygen from github.com/tree-sitter-grammars. * lisp/progmodes/c-ts-common.el (c-ts-mode-doxygen-comment-font-lock-settings): Add font locking rules for doxygen comment. * lisp/progmodes/c-ts-mode.el (c-ts-mode--feature-list): Add 'document' feature. * lisp/progmodes/c-ts-mode.el (c-ts-mode--doxygen-comment-regex): New regular expression for doxygen comments. * lisp/progmodes/c-ts-mode.el (c-ts-mode): Add support for doxygen parser. * lisp/progmodes/c-ts-mode.el (c++-ts-mode): Add support for doxygen parser. * lisp/progmodes/java-ts-mode.el (java-ts-mode): Add support for doxygen parser. --- lisp/progmodes/c-ts-common.el | 22 +++++ lisp/progmodes/c-ts-mode.el | 126 +++++++++++++++++--------- lisp/progmodes/java-ts-mode.el | 159 ++++++++++++++++++--------------- 3 files changed, 193 insertions(+), 114 deletions(-) diff --git a/lisp/progmodes/c-ts-common.el b/lisp/progmodes/c-ts-common.el index 3882a697c48..a1f257ee09a 100644 --- a/lisp/progmodes/c-ts-common.el +++ b/lisp/progmodes/c-ts-common.el @@ -348,6 +348,28 @@ c-ts-common-comment-indent-new-line (delete-region (line-beginning-position) (point)) (insert whitespaces))))) +;; Font locking using doxygen parser +(defvar c-ts-mode-doxygen-comment-font-lock-settings + (treesit-font-lock-rules + :language 'doxygen + :feature 'document + :override t + '((document) @font-lock-doc-face) + + :language 'doxygen + :override t + :feature 'keyword + '((tag_name) @font-lock-constant-face + (storageclass) @font-lock-constant-face) + + :language 'doxygen + :override t + :feature 'definition + '((tag (identifier) @font-lock-variable-name-face) + (function (identifier) @font-lock-function-name-face) + (function_link) @font-lock-function-name-face)) + "Tree-sitter font lock rules for doxygen like comment styles.") + ;;; Statement indent (defvar c-ts-common-indent-offset nil diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 2ac163d7a7e..201ff09593a 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -63,6 +63,9 @@ ;; will set up Emacs to use the C/C++ modes defined here for other ;; files, provided that you have the corresponding parser grammar ;; libraries installed. +;; +;; If the tree-sitter doxygen grammar is available, then the comment +;; blocks will be highlighted according to this grammar. ;;; Code: @@ -539,7 +542,7 @@ c-ts-mode--top-level-label-matcher ;;; Font-lock (defvar c-ts-mode--feature-list - '(( comment definition) + '(( comment document definition) ( keyword preprocessor string type) ( assignment constant escape-sequence label literal) ( bracket delimiter error function operator property variable)) @@ -591,6 +594,10 @@ c-ts-mode--for-each-tail-regexp "LIVE_BUFFER" "FRAME")) "A regexp matching all the variants of the FOR_EACH_* macro.") +(defvar c-ts-mode--doxygen-comment-regex + (rx (| "/**" "/*!" "//!" "///")) + "A regexp that matches all doxygen comment styles.") + (defun c-ts-mode--font-lock-settings (mode) "Tree-sitter font-lock settings. MODE is either `c' or `cpp'." @@ -1319,30 +1326,47 @@ c-ts-mode (when c-ts-mode-emacs-sources-support (treesit-parser-create 'c nil nil 'for-each)) - (treesit-parser-create 'c) - ;; Comments. - (setq-local comment-start "/* ") - (setq-local comment-end " */") - ;; Indent. - (setq-local treesit-simple-indent-rules - (c-ts-mode--get-indent-style 'c)) - ;; Font-lock. - (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 'c)) - ;; Navigation. - (setq-local treesit-defun-tactic 'top-level) - (treesit-major-mode-setup) - - ;; Emacs source support: handle DEFUN and FOR_EACH_* gracefully. - (when c-ts-mode-emacs-sources-support - (setq-local add-log-current-defun-function - #'c-ts-mode--emacs-current-defun-name) - - (setq-local treesit-range-settings - (treesit-range-rules 'c-ts-mode--emacs-set-ranges)) - - (setq-local treesit-language-at-point-function - (lambda (_pos) 'c)) - (treesit-font-lock-recompute-features '(emacs-devel))))) + (let ((primary-parser (treesit-parser-create 'c))) + ;; Comments. + (setq-local comment-start "/* ") + (setq-local comment-end " */") + ;; Indent. + (setq-local treesit-simple-indent-rules + (c-ts-mode--get-indent-style 'c)) + ;; Font-lock. + (setq-local treesit-font-lock-settings + (c-ts-mode--font-lock-settings 'c)) + ;; Navigation. + (setq-local treesit-defun-tactic 'top-level) + (treesit-major-mode-setup) + + ;; Emacs source support: handle DEFUN and FOR_EACH_* gracefully. + (when c-ts-mode-emacs-sources-support + (setq-local add-log-current-defun-function + #'c-ts-mode--emacs-current-defun-name) + + (setq-local treesit-range-settings + (treesit-range-rules 'c-ts-mode--emacs-set-ranges)) + + (setq-local treesit-language-at-point-function + (lambda (_pos) 'c)) + (treesit-font-lock-recompute-features '(emacs-devel))) + + ;; Inject doxygen parser for comment. + (when (treesit-ready-p 'doxygen) + (setq-local treesit-primary-parser primary-parser) + (setq-local treesit-font-lock-settings + (append + treesit-font-lock-settings + c-ts-mode-doxygen-comment-font-lock-settings)) + (setq-local treesit-range-settings + (treesit-range-rules + :embed 'doxygen + :host 'c + :local t + `(((comment) @cap + (:match + ,c-ts-mode--doxygen-comment-regex @cap))))))))) (derived-mode-add-parents 'c-ts-mode '(c-mode)) @@ -1370,24 +1394,40 @@ c++-ts-mode :after-hook (c-ts-mode-set-modeline) (when (treesit-ready-p 'cpp) - - (treesit-parser-create 'cpp) - - ;; Syntax. - (setq-local syntax-propertize-function - #'c-ts-mode--syntax-propertize) - - ;; Indent. - (setq-local treesit-simple-indent-rules - (c-ts-mode--get-indent-style 'cpp)) - - ;; Font-lock. - (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 'cpp)) - (treesit-major-mode-setup) - - (when c-ts-mode-emacs-sources-support - (setq-local add-log-current-defun-function - #'c-ts-mode--emacs-current-defun-name)))) + (let ((primary-parser (treesit-parser-create 'cpp))) + + ;; Syntax. + (setq-local syntax-propertize-function + #'c-ts-mode--syntax-propertize) + + ;; Indent. + (setq-local treesit-simple-indent-rules + (c-ts-mode--get-indent-style 'cpp)) + + ;; Font-lock. + (setq-local treesit-font-lock-settings + (c-ts-mode--font-lock-settings 'cpp)) + (treesit-major-mode-setup) + + (when c-ts-mode-emacs-sources-support + (setq-local add-log-current-defun-function + #'c-ts-mode--emacs-current-defun-name)) + + ;; Inject doxygen parser for comment. + (when (treesit-ready-p 'doxygen) + (setq-local treesit-primary-parser primary-parser) + (setq-local treesit-font-lock-settings + (append + treesit-font-lock-settings + c-ts-mode-doxygen-comment-font-lock-settings)) + (setq-local treesit-range-settings + (treesit-range-rules + :embed 'doxygen + :host 'cpp + :local t + `(((comment) @cap + (:match + ,c-ts-mode--doxygen-comment-regex @cap))))))))) (derived-mode-add-parents 'c++-ts-mode '(c++-mode)) diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el index bb4a7df3340..04aaf43ac66 100644 --- a/lisp/progmodes/java-ts-mode.el +++ b/lisp/progmodes/java-ts-mode.el @@ -24,6 +24,8 @@ ;;; Commentary: ;; +;; If the tree-sitter doxygen grammar is available, then the comment +;; blocks will be highlighted according to this grammar. ;;; Code: @@ -312,7 +314,7 @@ java-ts-mode--defun-name (defvar java-ts-mode--feature-list - '(( comment definition ) + '(( comment document definition ) ( constant keyword string type) ( annotation expression literal) ( bracket delimiter operator))) @@ -326,76 +328,91 @@ java-ts-mode (unless (treesit-ready-p 'java) (error "Tree-sitter for Java isn't available")) - (treesit-parser-create 'java) - - ;; Comments. - (c-ts-common-comment-setup) - - ;; Indent. - (setq-local c-ts-common-indent-type-regexp-alist - `((block . ,(rx (or "class_body" - "array_initializer" - "constructor_body" - "annotation_type_body" - "interface_body" - "lambda_expression" - "enum_body" - "switch_block" - "record_declaration_body" - "block"))) - (close-bracket . "}") - (if . "if_statement") - (else . ("if_statement" . "alternative")) - (for . "for_statement") - (while . "while_statement") - (do . "do_statement"))) - (setq-local c-ts-common-indent-offset 'java-ts-mode-indent-offset) - (setq-local treesit-simple-indent-rules java-ts-mode--indent-rules) - - ;; Electric - (setq-local electric-indent-chars - (append "{}():;," electric-indent-chars)) - - ;; Navigation. - (setq-local treesit-defun-type-regexp - (regexp-opt '("method_declaration" - "class_declaration" - "record_declaration" - "interface_declaration" - "enum_declaration" - "import_declaration" - "package_declaration" - "module_declaration" - "constructor_declaration"))) - (setq-local treesit-defun-name-function #'java-ts-mode--defun-name) - - (setq-local treesit-thing-settings - `((java - (sexp ,(rx (or "annotation" - "parenthesized_expression" - "argument_list" - "identifier" - "modifiers" - "block" - "body" - "literal" - "access" - "reference" - "_type" - "true" - "false"))) - (sentence ,(rx (or "statement" - "local_variable_declaration" - "field_declaration" - "module_declaration" - "package_declaration" - "import_declaration"))) - (text ,(regexp-opt '("line_comment" - "block_comment" - "text_block")))))) - - ;; Font-lock. - (setq-local treesit-font-lock-settings java-ts-mode--font-lock-settings) + (let ((primary-parser (treesit-parser-create 'java))) + + ;; Comments. + (c-ts-common-comment-setup) + + ;; Indent. + (setq-local c-ts-common-indent-type-regexp-alist + `((block . ,(rx (or "class_body" + "array_initializer" + "constructor_body" + "annotation_type_body" + "interface_body" + "lambda_expression" + "enum_body" + "switch_block" + "record_declaration_body" + "block"))) + (close-bracket . "}") + (if . "if_statement") + (else . ("if_statement" . "alternative")) + (for . "for_statement") + (while . "while_statement") + (do . "do_statement"))) + (setq-local c-ts-common-indent-offset 'java-ts-mode-indent-offset) + (setq-local treesit-simple-indent-rules java-ts-mode--indent-rules) + + ;; Electric + (setq-local electric-indent-chars + (append "{}():;," electric-indent-chars)) + + ;; Navigation. + (setq-local treesit-defun-type-regexp + (regexp-opt '("method_declaration" + "class_declaration" + "record_declaration" + "interface_declaration" + "enum_declaration" + "import_declaration" + "package_declaration" + "module_declaration" + "constructor_declaration"))) + (setq-local treesit-defun-name-function #'java-ts-mode--defun-name) + + (setq-local treesit-thing-settings + `((java + (sexp ,(rx (or "annotation" + "parenthesized_expression" + "argument_list" + "identifier" + "modifiers" + "block" + "body" + "literal" + "access" + "reference" + "_type" + "true" + "false"))) + (sentence ,(rx (or "statement" + "local_variable_declaration" + "field_declaration" + "module_declaration" + "package_declaration" + "import_declaration"))) + (text ,(regexp-opt '("line_comment" + "block_comment" + "text_block")))))) + + ;; Font-lock. + (setq-local treesit-font-lock-settings + java-ts-mode--font-lock-settings) + + ;; Inject doxygen parser for comment. + (when (treesit-ready-p 'doxygen) + (setq-local treesit-primary-parser primary-parser) + (setq-local treesit-font-lock-settings + (append treesit-font-lock-settings + c-ts-mode-doxygen-comment-font-lock-settings)) + (setq-local treesit-range-settings + (treesit-range-rules + :embed 'doxygen + :host 'java + :local t + `(((block_comment) @cap (:match "/\\*\\*" @cap))))))) + (setq-local treesit-font-lock-feature-list java-ts-mode--feature-list) ;; Imenu. -- 2.45.2 --nextPart21879956.4csPzL39Zc-- From unknown Mon Aug 18 08:27:04 2025 X-Loop: help-debbugs@gnu.org Subject: bug#71874: 30.0.60; [PATCH] Fontify doxygen comments in c-ts-mode,c++-ts-mode and java-ts-mode Resent-From: Vincenzo Pupillo Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 01 Jul 2024 10:53:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 71874 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 71874@debbugs.gnu.org Cc: Vincenzo Pupillo X-Debbugs-Original-To: 71874@debbugs.gnu.org, bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.171983116319216 (code B ref -1); Mon, 01 Jul 2024 10:53:02 +0000 Received: (at submit) by debbugs.gnu.org; 1 Jul 2024 10:52:43 +0000 Received: from localhost ([127.0.0.1]:60238 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sOEeJ-0004zr-Hx for submit@debbugs.gnu.org; Mon, 01 Jul 2024 06:52:43 -0400 Received: from lists.gnu.org ([209.51.188.17]:43598) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sOEeI-0004zk-88 for submit@debbugs.gnu.org; Mon, 01 Jul 2024 06:52:42 -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 1sOEeH-0008Qy-EP for bug-gnu-emacs@gnu.org; Mon, 01 Jul 2024 06:52:41 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sOEeF-00085U-3s for bug-gnu-emacs@gnu.org; Mon, 01 Jul 2024 06:52:40 -0400 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-a72af03ebdfso390479266b.3 for ; Mon, 01 Jul 2024 03:52:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719831157; x=1720435957; darn=gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=S3x+U5AcNkqb/nKQiXXJobXaXwN1zIYFoJc9Rxqhbfg=; b=T/p/to2tEFMYELQlUUcgoaWO5T7j7aP7CdgCimR9ypKcI6ycGa/8Rxhx+Q58QyjKf6 eNssJZdBI79S2S6jYojAw2wH+Spu/VqwYc8puFZ4xqOnefsJpWvJK91q6V078pa1yumo Md0KxDFJJn6Oo4Z5Vz1DKBv8C7dIBHxCf/ue2uOWIPpwKitV61l9DNSfWEF2cwrLriGX /c/TH27HFmjZNWYb4sbzWU7XmX9TCXD+DELz0qaZTTy6T3AJ7HgZNnY9B7mfuGko6eoX hb3gfY6jGLaouUlCp1T1xnGbnVXb800VunHrxxuN6nElz5iHPSsXJ5NL4uxiQUMm8uZ+ qdzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719831157; x=1720435957; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S3x+U5AcNkqb/nKQiXXJobXaXwN1zIYFoJc9Rxqhbfg=; b=oLd5Kt4yIxX+sfXXxbFVS3/XNvmRZsXCGqTeo2w8bLSTAMujly4muETZlU+NoviH2O BTYJx2ZdUaq5tVoXdxtPvNm0M51J4pDzMX3/nAVuYN41ch9S2YyjeaDXQEDH35Vo0k6N 7UV1o2NGZCzGwhySU81jZendm/1/Tj3xVnlHsftuZQBOYP3C2OaevDTTqvR/+AcRKuDJ lvYNmcyPlRqh1on7lGsH/+XR/vobJ75dOmBUkRJcJZDO5JJUjQlkMl4BB/AK+CdCB19r TB+A0h8nDDs0wjyHtAK01LDr91b2LgCWaWo+zpYekxd++sjGl+EuJLdz7U/K/KQMW7Ra qJOQ== X-Forwarded-Encrypted: i=1; AJvYcCUXStxS8RBw8YtELWhJ3U1+na2ZzEIuCn0AyFKF+su76aMM/V4dav2kTwXhZ08QCzdLGvonKFhOlsq+yZCgCOZKHtc3qnk= X-Gm-Message-State: AOJu0Yx3d//gcCHKehf9RC8IEueB03dPvt9GNA+Ta+lTk8I1F7T2CDTM ckxdkYxId6x60lDded+HVB7XRhd6aEp13kju8C8Ql7yvdmNzuHfkcAnqYvi4 X-Google-Smtp-Source: AGHT+IGyC5xPMEoa25FodwWVn5spLkcWzvN5voY3UOmDAwt4qk54mkF32AmvUxNDRnqPgNstIUGweA== X-Received: by 2002:a17:906:13cb:b0:a6f:dc25:cc13 with SMTP id a640c23a62f3a-a7514447c6bmr314833766b.49.1719831157442; Mon, 01 Jul 2024 03:52:37 -0700 (PDT) Received: from 3-191.divsi.unimi.it (3-191.divsi.unimi.it. [159.149.3.191]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a72aaf184fdsm321151766b.3.2024.07.01.03.52.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Jul 2024 03:52:37 -0700 (PDT) From: Vincenzo Pupillo Date: Mon, 01 Jul 2024 12:52:36 +0200 Message-ID: <2177049.YKUYFuaPT4@3-191.divsi.unimi.it> In-Reply-To: <9826503.eNJFYEL58v@3-191.divsi.unimi.it> References: <9826503.eNJFYEL58v@3-191.divsi.unimi.it> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart2755839.fDdHjke4Dd" Content-Transfer-Encoding: 7Bit Received-SPF: pass client-ip=2a00:1450:4864:20::632; envelope-from=v.pupillo@gmail.com; helo=mail-ej1-x632.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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" This is a multi-part message in MIME format. --nextPart2755839.fDdHjke4Dd Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Whoops, I forgot the screenshots. Vincenzo In data luned=C3=AC 1 luglio 2024 12:48:33 CEST, Vincenzo Pupillo ha scritt= o: > Ciao, > This patch adds support for comment fontification using the doxygen parse= r: > https://github.com/tree-sitter-grammars/tree-sitter-doxygen >=20 > This is the same parser used by nvim treesitter and seems to be quite sta= ble. > The attached screenshot shows the result. > This patch also works with emacs 31. >=20 > Thanks. >=20 > Vincenzo --nextPart2755839.fDdHjke4Dd Content-Disposition: attachment; filename="c++-ts-mode-doxygen.png" Content-Transfer-Encoding: base64 Content-Type: image/png; name="c++-ts-mode-doxygen.png" iVBORw0KGgoAAAANSUhEUgAABAEAAAXKCAYAAACG23bbAAAACXBIWXMAABkRAAAZEQGQh6VoAAAg AElEQVR4XuzdMZbbttYAYPId/1lAtpA2VVY05dtCpohPUky2kHJW5MpttpAF+BX8i4QxfQWABEVK JPF959wTC7iAII7sCJekpu+6bugAAACAy/tPbAAAAACuSREAAAAAGqEIAAAAAI1QBAAAAIBGKAIA AABAIxQBAAAAoBGKAAAAANAIRQAAAABoxIfYsNgwfP1z3097LumP//0Rm7r//t9/Y1MyL0qNW+uP //2x6Xyj6evYY/6lHn08a+11/AEAAPYy3BXDcNt2sfjjf3/ctJXaa3PuibPPXxvWI4QQQgghhBDr w+0AM0pnev/7f/9ddKYaAAAAjkARAAAAABrx9TsBpvf4j7a61z81d1eYP5ffZcbU5h9M6WqC1FUI Mb90/37pSoZuQf9ScU1dYi2PVLOeVO4oNSbml44/AADA0eTv68+11+bkIjU21Vbqj49jzPXPxNw9 3633l3Jy7ffEkjlzOan2VNuW/UIIIYQQQghxpPhPNwz5s+V9Xz7Lfq818+fWmlObfzBHP7NcupLg Gd+ZsPV6cnMBAACc0fx3Apx8Ew0AAAD87et3Auyt9ow/AAAAsKnHFAFKtxzE4sDcLQJxntr8g5m7 RP0Ml6OX1v8MNeu5wvEHAABYav8iQKkAkFPKT80XH0+l8g+mtNEs3eN+FEdbX+16SvlnOP4AAABL zX8nAAAAAHAJ80WA0qX2DSpdOg4AAABH9p/iPfVbXEpfmj+lJrdbkV8p3jM+fbzFpeJ7FxXi+qdy 7TVK83cbPUeN2vXExwAAAFfWd1339y46tZkuFQC2yB/FcTW53Yr8FVKbxSUFgCWFgtTco7mxXWJ8 akzM6SYb5pr8nFR+NzNmjdx6o5r15HK7TH4Uxy8ZAwAA8AxfiwBUW7ohPbIrvAYAAACW2f+3A1xY 6Uw6afGseYrjCQAAsA9XAjRMAQMAAKAtrgRoQO7suwIAAABAW1wJAAAAAI34T2wAAAAArkkRAAAA ABqhCAAAAACNUAQAAACARmSLAMMwdMPgOwMBAADgKpK/InAYhq7v+9gMAAAAnNjNlQAKAAAAAHBN N0UAAAAA4JoUAQAAAKARigAAAADQCEUAAAAAaMS/vx1g/HWAvhQQAAAArqnvuu7v3f8//HYAAAAA uCa3AwAAAEAjFAEAAACgEYoAAAAA0AhFAAAAAGjETRGg7/t/f1MAAAAAcB03vx1g5FcGAgAAwLVk iwAAAADAtdzcDgAAAABckyIAAAAANEIRAAAAABqhCAAAAACNUAQAAACARigCAAAAQCMUAQAAAKAR igAAAADQiPMXAYYhtiwzDF+jRm0+AAAAHMT5iwBr9f3fAQAAAI1otwgAAAAAjVEEqOXqAQAAAE7q Q2zYXOke+tSGehjS7aNUf+45Yt49ps+xZN7UmhaMG4ah6xfkAQAAQK39iwBdYfOb2tCvkZtjq/m7 yXOkNvdR7nlz7QAAAPAAz70doO+XbarX2nv+lNJG/xnrAQAAgH88twjQolyB4B9uBQAAAGAvigAA AADQCEUAAAAAaIQiAAAAADRCEeBgBl8cCAAAwE4UAR7NJh8AAIAneW4RIPXr9Lb8NXqp+fdWWv8z 1gMAAAD/6Luuy+xYN5LbEHczvy5v6bileVFq3DPzAQAAYGePKQLY/AIAAMDTPfd2AAAAAOBhFAEA AACgEYoAAAAA0Ij9vxMAAAAAOARXAgAAAEAjFAEAAACgEYoAAAAA0AhFAAAAAGiEIgAAAAA0QhEA AAAAGqEIAAAAAI1QBAAAAIBGKAIAAABAIxQBAAAAoBGKAAAAANAIRQAAAABohCIAAAAANEIRAAAA ABqhCAAAAACNUAQAAACARigCAAAAQCMUAQAAAKARigAAAADQCEUAAAAAaIQiAAAAADRCEQAAAAAa oQgAAAAAjVAEAAAAgEYoAgAAAEAjFAEAAACgEYoAAAAA0AhFAAAAAGjEh9hA2fD+2vUvb7H5bsP7 a2za5XkAAABo16WLALUb9tr8reSeN9cOAAAAa7gd4MlKG/3+5S15hQAAAACscdkiQGlznVKbDwAA AGdz6dsBrqh0ZcCWRYzU86TmT+WNcvmp9lHsr50fAACAvEsWAeJGck5t/rPl1rrV68jNk2tPtXWF /FqxKDA+3mp+AACAVlz2doAW9Rt8h0BpY107f21+rb3nBwAAuJrLFQFKm9iU2nwAAAA4q0veDnA2 zmYDAADwCJcqAtSe1a/N30tpDc8oEDzjOQEAANjfpYoAj1DasF9FC68RAACgRZf5ToDas/q1+QAA AHB2lykCPIpL5c/FzwsAAOCrSxQBas/q1+a3ZO7X7pX6lpibHwAAgP34TgBulDbqWxRPSvMDAACw n77ruiE2AgAAANdzidsBAAAAgHmKAAAAANAIRQAAAABohCIAAAAANEIRAAAAABqhCAAAAACNUAQA AACARigCAAAAQCMUASoN76+x6S5L5luScxVbv9at54uWzj+8v/4bj/To57u6qx/PvV9f7fy1+QAA zLt0EeAsHyBL6yz1cR79y1vXv7zFZoBN+H8FALDUpYsAZ9G/vCU/wA3vrzaOAAAAbOayRYDSBjq1 4e4K7ZCTe4/BGR3t/Xy09ewh9/+dXHtK6f93AADRh9jQgvHM+/RDU3z8aHFNc+tJfUBM5cd5asZF qby1UvOXpPJz64m508epMTF/lModzc15r9SaSs+Tyt9Sav7UelJ5o1x+qn0U+2vnX6v0PCmp/Nx6 UrmjmjGp3CXHKzdulOofpeYb5cbFMUuea0nOVHyOLjMulTdK5T9Cf8D/HwEA1zdcLYb315u2VIx5 S/Nrc5dEnG94f022lR6X2qdtqf5U5PJy7bVRmifVl2ortdfm5GLJ2CU5tfm5nNr2ub6lkZsj1Z5q K/Wl2kr9pcexb22U5kn1pdpy7am2uf5UW6793uMxN6bUX+qryanNz+Wk2lNtS/oeEePz166jNl8I IYQQoukiQG3umvy5iPMNM0WA2Bcj9td+sJzLm+ufi7nxsT8+jnFv/1zMjZ/rjzGXX9sfH8eY65+L ufGxPz6OEfvj4xixv/ZxbcyNj/3xcYzYHx/PxVx+7B8fx/alMTdu7/4Yc/m1/fFxjLn+vWPN868Z I4QQQoi243K3A8xdRpm6HDS2lcbvbY/nnjsmwDml/l77+34e8f89qbbSz9LPGgBY43JFgDnxA1ML H6Ku/vq2ED94w1n5+34e8WfVwv+PAIDnu1QRoPYD1JhfO+7qjrYh3ns9pZ//3s+d8oznLDnaeo6m 5viM/97k5N6HXF/t/4+W5gEARJcqAtSYfoCq+eC1JOfsjvYa91zP0p/7I1nPudQen1L+Ed+P7G/t /48AANb4T2w4q5oPTanc8YMXADzKmv8fpcYAACx1mSJAjdyHp1z7VOmDGcAj+ffosfY43rn/7+Ta AQDudYkiQEtnRUpniLY4DqX5uw0+BM/NH83ll/qWmJv/0ebWE/vm8u81N3+pb4m5+R+tdj1z+bEv Pp5Tmn/Y4O/7lp6xnjMdn61c9XUBAI/T7HcCnFnug+9WHwxz83cbPUdp/pRS/tx6UmPjmFTOnGn+ +Oc471RNfmk9qTGl/C2U5k+tp1Zp/meoXU8pPx6fUm6XyB/bUmNSuWvVvD9Ta+kK+VOp15IaV7Oe 1JxjOwAAt/qu64bYCADR4Cw0AMDpXeJ2AAAAAGCeIgAAAAA0QhEAAAAAGuE7AQAAAKARrgQAAACA RigCAAAAQCMUAQAAAKARigAAAADQiA+xgWP7439/xKYb//2///7759r8qxqGv7//su/72AUAANAM RYCTiRv2P/73x01bNNd/dcMw2PwDAAC4HYCrUwAAAAD4ShEAAAAAGnGd2wH+uef7G6kzwKm8US4/ 1T6K/bXzH0zpOwRStxXM3Y4Q+2vnBwAAYDvXKALEjfhce6qtK+TXikWB8fFW8+8stxmPG/q1YlFg fLzV/AAAAKSd/3aA0sa678tn5qPa/Fp7z7+z//7ff4tn8u+19/wAAACtu8aVABTlNtZXPuvuVwIC AADcUgRowJU3+znj5t9vBwAAAPjqGkWAE19iDwAAAI9yjSKAM70AAAAw6/xfDAgAAAAsoggAAAAA jTh/EWDu1+6V+paYm79xR/+1fn3f//ubAgAAAFp3ne8EyG30tvi+gNL8JzC3Sb/3twecqRDgNwUA AAAt67uuO+/uFgAAAFjs/LcDAAAAAIsoAgAAAEAjFAEAAACgEYoAAAAA0AhFAAAAAGiEIgAAAAA0 QhEAAAAAGqEIAAAAAI34EBuAvL/+/C023fj+h1/+/fNff/72zeNorn+p6bpq5tvq+c9ieH/t+pe3 2LzYFuPn3DN/q6bH9UzHr/b9MPf+m+tfau3x3Or5AYB9KQJAhbhhPsomelzDkiLFqCb3GY62odhq PVvMwbfGY7pkU30k8b2w1XvsXmuOZ03uGRzlZwEAe3A7ADToKMWLs7AhgDx/PwDgXBQBoDFnKACU NhW5M4659nuV1gKtO9rfj9y/A7n2lKO9JgDYmtsBYEff//BLdtNdak9J5a6x1TzP0r+83XxIj4+3 ste8S5U2Lql1za039tfOXys+X5Tqz60p5q2Rer6pXH9qTam8vaXe+6NSe0oqd42t5tlK6hjFxwDQ OkUAOJjcJj1XNLiaJR/Ypx/0l+Svsde8tXJr2Gp9uc3SVvPXyj3ns9aTe95c+9Hk1niW9a9xz78P tfkAcEZuB4CTGK8q4G9rPuAvtde8Wxpf/172nr/WM9ZTeh88Yz1bOvv65+z57wMAnJ0rAWBnqVsC 4mP+NvehPbVpiW2l8UvMreFecb2jPZ/zWUobsVw7ZaljGh+3KvV3K7aVjpPjCEArFAHggJzxT4sf 0Pf40J7aZG1pr3mvJG7cuE8rxzP+3drz7zEAnJkiABxM6SqBKxcHaj+wj/m145bYa94WpY5lfDw1 1/doz3jOLR3teD5K7b8PS/MA4AoUAeABprcEzG3yc318Nf3AXvNBf0nOqGZetnHE43209XThvVk6 ZqW+K1v77wMAtMIXAwKLDcMQmzZR8yE9lTt+0N/aXvO2ZnocUz8/2Erq/TX39zg1BgCuTBEAOJXc h/Vc+1RpI5Azt4EA1tnj71Xu34FcOwC0SBEAHmTuVoCu0V8DeIazcGcpBBx5nePaSj/rvddfO/9c fqlvb0c4nlcwdwwB4Ip8JwAczJpCwDR//HOu2BDnnj7OjWHZpmuJuU3ZvfOffeO3Zv3T/PHPueNY O38pP/ccR1Jaf07N8YxzTx/nxgAAz9V3XbfPTb7ApQzD0PV9H5sBAIATUQQAAACARvhOAAAAAGiE IgAAAAA0QhEAAAAAGqEIAAAAAI1QBAAAAIBGKAIAAABAIxQBAAAAoBEfYgOQ99efv8WmG9//8Mu/ f/7rz9++eRzN9S81XdeS+VKvY8m4sxveX7v+5S02L7bF+Dn3zN+q6XE90/GrfT/Mvf/m+peqPZ6p 17FkHADwPIMQYl389edvN21b9tfGkvlyObn2Z8Xw/nrTdm/cM+c9Y7ecQ+Tj7Md3bv339tfGkvly Obn2s8TZ1y+EEEKUwu0A0JDSlQff//BL8goBtjvDCldS+nvRv7wlrxAAAJ5PEQA4nNLmIrexyLXf q7QW4Fhy/w7k2lP8nQfg6nwnAOxoPLueOvteak9J5bZoPMNYc6/0WnvNu1Rp45Ja19x6Y3/t/LXi 80Wp/tyaYt4aqeebyvWn1pTK21vqvT8qtaekcq8gdYziYwBonSIAHExus58rGtS4d/wjLPnAPv2g vyR/jb3mrZVbw1bry22Wtpq/Vu45n7We3PPm2o8mt8Yt1n/v+L3c8+9DbT4AnJHbAeAk9r5nf4si wyOt+YC/1F7zbml8/XvZe/5az1hP6X3wjPVsae/1l47dI+z57wMAnJ0rAWBnqVsC4uNnO8p65j60 pzYtsa00fom5Ndwrrne053M+S2kjlmunLHVM4+Nne9Z6Un+3YltpXc9aNwA8miIAHNCeZ/yjoxQA logf0Pf40J7aZG1pr3mvJG7cuM8jj+eef3fmxOd95loA4MgUAeBgSpvyrYsDped6tNoP7GN+7bgl 9pq3RaljGR9PzfU92jOec0uPPJ6l53q02n8fluYBwBUoAsADTG8JKG28S31be+RzbW36gb3mg/6S nFHNvGzjiMf7aOvpwnuzdMxKfVt75HPNWfvvAwC0whcDQoPWFgCGYYhNm6j5kJ7KHT/ob22veVsz PY6pnx/ndqSfaWotc3+PU2MA4MoUAaAxawsAR5H7sJ5rnyptBHLmNhDQsns20Hv8vcqtJdcOAC1S BIAHmbsVoGv01wDes4l4lLMUAo68znFtpZ/13uuvnX8uv9S3tyMcz7nnP4MrvAYAqOU7AeBg1hQC pvnjn3Ob/bm5c+Nat2TTtcTcpuze+ffe+O1tzfqn+eOfc8exdv5Sfu45jqS0/pya4zk3d24cAPA8 fdd1+9zkC1zKMAxd3/exGQAAOBFFAAAAAGiE7wQAAACARigCAAAAQCMUAQAAAKARigAAAADQCEUA AAAAaIQiAAAAADRCEQAAAAAa8SE2AHl//flbbLrx/Q+//Pvnv/787ZvH0Vz/UtN1LZkv9TqWjDu7 4f2161/eYvNiW4yfc8/8rZoe1zMdv9r3w9z7b65/qdrjmXodS8YBAM8zCCHWxV9//nbTtmV/bSyZ L5eTa39WDO+vN233xj1z3jN2yzlEPs5+fOfWf29/bSyZL5eTaz9LnH39QgghRCncDgANKV158P0P vySvEGC7M6xwJaW/F/3LW/IKAQDg+RQBoCG5AsDRlDYXuY1Frv1epbVAy4749yL370CuPcXfeQCu zncCwI7Gs+upzXepPSWV26LxDGPNvdJr7TXvUqWNS2pdc+uN/bXz14rPF6X6c2uKeWuknm8q159a Uypvb6n3/qjUnpLKvYLUMYqPAaB1igBwMLnNfq5ocDVLPrBPP+gvyV9jr3lr5daw1fpym6Wt5q+V e85nrSf3vLn2o8mt8SzrX+Oefx9q8wHgjNwOACex9z37ZysyrPmAv9Re825pfP172Xv+Ws9YT+l9 8Iz1bGnv9ZeO3SPs+e8DAJydKwFgZ6lbAuLjZ4gFhWevp1uwcUhtWmJbafwSc2u4V1zvaM/nfJbS RizXTlnqmMbHzxDf189YT1xDqq20riMcRwB4BEUAOKC4Qd9D3PQfoTAxJ35A3+NDe2qTtaW95r2S uHHjPo84nvF9veffoZz4fM9YAwCcgSIAHExpM75ncSB1xcIj1X5gH/Nrxy2x17wtSh3L+Hhqru/R nvGcW3rW8Uz93B+p9t+HpXkAcAWKAPAA0w12aaNd6uOr6Qf2mg/6S3JGNfOyjSMe76OtpwvvzdIx K/Vd2dp/HwCgFb4YEHi6mg/pqdzxg/7W9pq3NdPjmPr5wVZS76+5v8epMQBwZYoA0JA9byd4lNyH 9Vz7VGkjkDO3gYBW3fv34t7xKbl/B3LtANAiRQB4kLlbAboH/BrA0vxza9vLGc7CnaUQcOR1jmsr /az3Xn/t/HP5pb69Hf14zq3tKM6yTgDYku8EgIMpbdRzpvnjn3Mb+tz8uXz+tmTTtURu0zS6d/7S xuwM1qx/mj/+OXcca+cv5eee40hK68/Z4njm8gGA5+u7rhtiIwAAAHA9bgcAAACARigCAAAAQCMU AQAAAKARigAAAADQCEUAAAAAaIQiAAAAADRCEQAAAAAaoQgAAAAAjVAE4JKGYeiGYYjNAAAATeu7 rrNT4rKGYej6vo/NAAAATXIlAJfW970rAgAAAP6hCAAAAACNUAQAAACARigCAAAAQCMUAQAAAKAR fjsATRi/HNBvCgAAAFr2ITbA1fg1gQAAAH9zOwAAAAA0QhEAAAAAGqEIAAAAAI1QBAAAAIBGKAJw ab4UEAAA4Cu/HYBL8isBAQAAbvVd1/29WwIAAAAuze0AAAAA0AhFAAAAAGiEIgAAAAA0QhEAAAAA GqEIAAAAAI1QBAAAAIBGKAIAAABAIxQBAAAAoBEfYgNMDe+vXf/yFptXG95fY9ONLZ+vNVv/vKK9 5wcAAPalCHAhtRu02vytPOM5AQAAcDsAAAAANEMR4CJqz+rX5nMOfqYAAECJ2wE4tNJ3CKQ2vHPF jdhfO3+ttfOnxi3NX5oX5cbFMUueK47pMrlLfh6pcQAAwHqDOHcM7683baWoya/JXRK185XyU32p tlJ/6XHsWxOlOXJ9te01OaX+Ut8WOan2rY+3EEIIIYQQohxuB+C0+pe35JnjrTxj/nhmfCqVv6Ut 5l+7/tI4AABgO24HOLnazVNt/h5yG8Fnr4vnOMJ7EgAAWqEIwMPZ8DHl/QAAAI+jCHBitWdQa/Nh jdyVHgAAwPMpAlCkaEAt7xkAADguXwx4UrVn9WvzAQAAuB5FAIpc2s2ReX8CAEAdRYATqj2rX5t/ ZqVfQ3c0qZ9Laf2p/KMprb+zaQcAgKfznQA83NxG8N6N7txG9NFya8m9ztz6c/ldeI7xz6X8tVJr i8+TyhnFXAAA4LH6ruuG2Ahs4wxn7wEAgHa4HQAAAAAaoQgAAAAAjVAEAAAAgEb4TgAAAABohCsB AAAAoBGKAAAAANAIRQAAAABohCIAAAAANOJDbICp4f2161/eYvNqw/trbPrXls8z2nr90dL5p697 ST4AAMAeFAEuZOmG9NlyazzL+tcYX1epCHJ1V/75AgDAWbgdgMPoX96a3iQDAADsTRHgIkpnWXMb 61w7y+WO+ZXk3ie59pTS+xMAAHgctwM0YDzDPt2ExcdHl9pw5tYfc+fux4/5o1TuaG7Oe+TW0+3w XEtc4f0DAAB8NYhzx/D+etOWijFvaX5t7pKYmy/Vn2ortdfm5GLJ2CU5Nfn39u8Za94/a/KFEEII IYQQ+4XbARqSOqN7dKX1jq9nL3vPv0buWDzCGd8/AADAt9wOcHJzm7LUJja2lcbTtvheSbWV3j9z 708AAOCxFAEuLm7AbMrS4saWv8X3ivcPAACcmyLAidVuyMb82nHPtvcGvXQ89n7uaO4WhNw6H6H2 /bM0DwAAeBxFgEZMN2Q1G7klOXvbcw1Lj8MjldbzrPWuff8AAADH4osBT6pmE5bKHTdyMGfN+yc1 BgAAeD5FgAbkNmO59qnSRo/j2ePnlXuf5NoBAIDjUgQ4oaueZU29riVnnO8xN/+jHWkta6V+jgAA wDH4TgAeLrfRzW0cSxv13JhRamwck8qZM80f/xznnVqaP7eW1BgAAICl+q7rhtgIAAAAXI/bAQAA AKARigAAAADQCEUAAAAAaIQiAAAAADRCEQAAAAAaoQgAAAAAjVAEAAAAgEYoAgAAAEAjPsQGOJK/ /vwtNv3r+x9+iU03/vrzt0V5AAAALVAE4PBym3gbfAAAgDpuB+C0vv/hl+KVAgAAAHxLEeCEhmGI TV1XaAcAAIDO7QDn1Pd9NwxD1/f9v23xcZQ6Y566lD6VN8rlp9pHsb92/jXic0wfx+dYsr44BgAA 4KwUAU5qWghYUgBIbWRz7am2rpBfK266x8d7zz+nJhcAAOCM3A5wYvcUALoV99TX5teqnb/02mpt ORcAAMBRuRLgZFL3/ce2UlHgjHKFga027QoAAABAKxQBTiZu8OeuBLiCvTfoe88PAABwFIoAJ1bz nQAAAACgCHBS043/XCHAmW4AAAA6Xwx4TqkN/1gI4LEccwAA4EwUAU4oFgBGuXYAAADoFAGub+7X 7pX6lpibHwAAgOPwnQANKG3Ut/i+gNL8z5Za2xavGQAA4Iz6ruvc1AwrpL6bAQAA4MgUAQAAAKAR vhMAAAAAGqEIAAAAAI1QBAAAAIBGKAIAAABAIxQBAAAAoBGKAAAAANAIRQAAAABoxIfYAFPD+2vX v7zF5tWG99fYdGPL56Nsj5/vmvmm74s14wEAgGUUAS6kdgNWm7+VZzwnxza+J5YUiQAAgPXcDgAA AACNUAS4iNqz+rX5XJP3AAAAtMXtABxa6fLw1AZ2rrgR+2vnrxWfL0r159YU87rE+NTY3LhRqn8q NWdXGFebv0bqObacHwAArmwQ547h/fWmrRQ1+TW5S6J2vlJ+qi/VVuovPY59a2Jujrn+udx717tm TGlsqm1J3xY5uXYhhBBCCCHE13A7AKfVv7wlzwhvZe/5a5XWE68IeITSelJq81NKr3OL+QEA4Orc DnBypU1RSm3+HnIbtWevaw/jxjT12nLttbaaBwAAuD5FAB7OhnVerlCS8ojjWbMeAADguBQBTqz2 DHBtPttIXQ0QH0/N9T3aEdcDAACsowhAUW7zxz5KG+5nONp6Ou9JAAC4iy8GPKnazVltPtsarwbo /CwAAIAnUgSgyKXXXIn3MwAArVMEOKHaM8m1+Wc2PeN+NKnvBoiOtv4t1zP32peYW0+pDwAA8J0A PMHcRm3vjeLRPWL90/nHP+eOe+16crm5+bsN15MbAwAA/K3vum6IjQAAAMD1uB0AAAAAGqEIAAAA AI1QBAAAAIBGKAIAAABAIxQBAAAAoBGKAAAAANAIRQAAAABohCIAAAAANOJDbICp4f2161/eYvNq w/trbPrXls8z2nr90dL5p697ST4AAMAeFAEuZOmG9NlyazzL+tcYX1epCHJ1V/75AgDAWbgdgMPo X96a3iQDAADsTRHgIkpnWXMb61w7y+WO+ZXk3ie59pTS+xMAAHgctwM0YDzDPt2ExcdHl9pw5tYf c+fux4/5o1TuaG7Oe+TW0+3wXEtc4f0DAAB8NYhzx/D+etOWijFvaX5t7pKYmy/Vn2ortdfm5GLJ 2CU5Nfn39u8Za94/a/KFEEIIIYQQ+4XbARqSOqN7dKX1jq9nL3vPv0buWDzCGd8/AADAt9wOcHJz m7LUJja2lcbTtvheSbWV3j9z708AAOCxFAEuLm7AbMrS4saWv8X3ivcPAACcm0QTR+sAACAASURB VCLAidVuyMb82nHPtvcGvXQ89n7uaO4WhNw6H6H2/bM0DwAAeBxFgEZMN2Q1G7klOXvbcw1Lj8Mj ldbzrPWuff8AAADH4osBT6pmE5bKHTdyMGfN+yc1BgAAeD5FgAbkNmO59qnSRo/j2ePnlXuf5NoB AIDjUgQ4oaueZU29riVnnO8xN/+jHWkta6V+jgAAwDH4TgAeLrfRzW0cSxv13JhRamwck8qZM80f /xznnVqaP7eW1BgAAICl+q7rhtgIAAAAXI/bAQAAAKARigAAAADQCEUAAAAAaIQiAAAAADRCEQAA AAAaoQgAAAAAjVAEAAAAgEYoAgAAAEAjFAF4qL/+/C02fWOuHwAAgPUUAQAAAKARigAAAADQCEUA AAAAaETfdd0QGzm+1L3z3//wS2xK5o1y+an2Ueyvnb9LzLGkPSWXO7e+1LjRMAxd3/exGQAA4BI+ xAaOL25059pTbV0hv1bcdI+P95h/am7+uX4AAIDWuB3gZEob2+9/+CV55junNr/WM+cvHScAAIBW KQLwcKnN+5ab9nvmcisAAABwZW4H4BRi0aBkbQEAAADg6hQBTqhmQ3wFpTP7rR0LAACAeygCnFBu Q3wm4y0B0/+mlPoAAACo4zsBYGIY/MZMAADguhQBAAAAoBGKACeT+mb9qVLfEnPzb2nuVoDuwesB AAC4Ot8JcEKljXFpQ71Uaf5nONp6AAAAzqrvus5N0PDP9wH0fR+bAQAALkMRAAAAABrhOwEAAACg EYoAAAAA0AhFAAAAAGiEIgAAAAA0QhEAAAAAGqEIAAAAAI1QBAAAAIBGKAIAAABAIxQBAAAAoBGK AAAAANAIRQAAAABohCIAAAAANEIRAAAAABqhCAAAAACNUAQAAACARigCAAAAQCMUAQAAAKARigAA AADQCEUAAAAAaIQiAAAAADRCEQAAAAAaoQgAAAAAjVAEAAAAgEYoAgAAAEAjFAEAAACgEYoAAAAA 0AhFAAAAAGiEIgAAAAA0QhEAAAAAGqEIAAAAAI1QBAAAAIBGKAIAAABAI55aBBjeX2MTAAAAsJOn FgEAAACAx3laEWB4f+36l7fY3HWFKwS2agcAAIAWPa0IUNK/vN1s4EtFg9p8AAAAaNXw6BjeX2/a UjHm7ZUvhBBCCCGEEEK0FIe8EmA0nuFfeka/Nh8AAABa0v9TDXiYuU16vKw/ZTq+Nh8AAABa9SE2 PFvcsM8VDWLfXD4AAAC06qG3A9Ru0Mf8JWf7uxX5AAAA0JKHFgFqTAsGSzb2tfkAAADQoptvC9wj ar6xP5e7VbsQQgghhBBCCNFiPOyLAWtvBQAAAAC29ZDbARQAAAAA4PkeUgQAAAAAnu9htwMAAAAA z+VKAAAAAGiEIgAAAAA0QhEAAAAAGqEIAAAAAI1QBAAAAIBGKAIAAABAIxQBAAAAoBGKAAAAANCI ZosAH4fPyeA+v3/6Epueau16hvfX2HRjSc7V7P2a954fprzfAIAWfYgNLfg4fO5+7X+MzV0300cb hvfXrn95i803+pe3xbkAAABH0NyVAHOb/F/7H10R0LDaTf1YCAAAADiDQ14JkNuI5drvZdMPy+zx 9w8AAHicvuu6ITYeQdzwx8drxSsB4uPYVioQxHGj3JhUfnz+1Ng4LpXTJfK6Qm6XyV+jdN/9zz99 F5u6LjOmJneUGlObP7rnPXbP2Ch3ZUFq/lxul8lfa/o8pXnXrGerMbncLpM/So1L5efy4r9TUWpc jdScXWbetetJ5Y3ifKnxo9i/dN4oNS6Vn8obpfK7lWMAAK5mOGoM76/f/HeL+Dh8Tv65NmeuLxWp /KXPtSRS42Pbls+Xit8/fblpi5HLSbWn2rbsn8Y977N7xi6N1HOk2pb0rY25OUv9pb4tcmrbc32p tlz7tC3Vv2eknm/Nekp5sS8+jhH7S49j35r2VNuSvpocIYQQQoirxaG/E6A/+Bev1X5/QCk/XhGw Rmn+lNr8Lfz+6Uv2bPzPP31XPIufkpvrisa/D0vV5u9ti/WU/j1IzV/KTynlp+YflcbtZYv1LM3b Q2r9pfWk8ktq8wEAWnG47wRIfWiLbbkPiWe1RQEAeI7SxvUZjrYeAACO5XBFgPjh9awfaGvOsK8p ANTMz/nEwhfH9Yh/n2reD49YDwAA53W4IsDUWAA4WyGgdGZ/i8373vPvreaS/7lbBK54O0Dp/V6z GbyqvY/B3vPXau39cMXXBABwJIctAkw/+O5VCBjviZ/7dv4acb6t7T3/I9Ru3Ev5pe8YOKM93udX s/fx2Xv+Gi2+H1p7vQAAj3bILwZMffAdCwFbGwsBY5x9g816a99jqfcrAADAER3ySoDchirXfq+4 8Y+PAUDBDwC4gkNeCbCnLX8tXurKgS3nT9l7/r3N3eMf++LjvdVeDbD1pqD2+Vszd3xiXyk/1V7K 7zJj9jS3nnuV5k+1l/K3MDd/qQ8AgGUOeSXA3pZspJd8T0AsAIyWzH+Pvee/R2qTH+/ZT+WManK7 RH6UGj83ZtyIzG3ul+SsMbcReobpesY/P+q1x+dJ5Yxi7tiWyq9t7zLz7620ni3k5q9t30pp/q2P f+q5tn4OAICj6buuG2IjX6XO9gPXsFch5yocHwCA62nudgAAAABolSIA0CRnucscHwCAa2ryOwGA dsR7vkc2uH9zfAAA2uI7AQAAAKARbgcAAACARigCAAAAQCMUAQAAAKARigAAAADQiGaLAB+Hz8mA M8t90/uzPHs9z37+Z2v99c/Z+/jsPT8AwBpN/orAj8Pn7tf+x9jcdTN9AAAAcGbNXQkwt8n/tf/R FQEAAABc0iGvBBjeX7v+5S02Z9vvZdMP0J49/n8CAHB0fdd1Q2w8grjhj4/XilcCxMexrVQgiONG uTGp/Pj8qbFxXCqnS+R1hdwuk7/GX3/+Fpv+9f0Pv8Smarn7ard4P4xSz1Gaf2l+Km+Uyu9WjNkq vya3y+R3K8fUSj1Hau5U3iiV3xXGpPLjv0upsXFcKqdL5E2lxuTyU7mjmjGp3DWvt0ZqvlFp3tS4 pflL86LcuK3GpHL3Pv4AQDuGo8bw/vrNf7eIj8Pn5J9rc+b6UpHKX/pcSyI1PrZt+Xxd1w1//fnb TVtN/z2x1fsiN88W7am2Ul+qbcv+UqTGptqW9NXk1EZuzlR7qm1JXypS+dO2VH9N5MbXtm+Vk2rf 8vWmojRnrq+2vSan1F/q2yIn1b738RdCCCFEM3HTcKjY+oPOkk3wkpyl/TFi/vg4tq+NOE/t49rY c5O/JO59f8yNj/3xcYzYHx/HiP3xcW1sPT4+jnFvf23MzRf74+MYc/0xYv74OLavjThPfBzj0f1b v94Yc/PG/vg4xtX69z7+QgghhGgjDvedAKnLG2Pb1S53jLcEcBxXe69d3TN+XvES7Ud6xvM+8/Xi +AMA9ztcESB+uDnrB57SvfjRmgJAzfxXEAtB3MfxLKs5Pmv+faqZ/2jWvF624/gDAPc6XBFgaiwA nK0QUDqzv8Xmfe/5a3z/wy8P+WLA3M//zJuplPH9npM7DjVaOp5r7H189p6/1jOek68cfwDg0Q5b BJh+UN6rEPBr/+PNhvreTXScb2t7z79GaaP/15+/Ffvn7PFzP7rS6733eNw7/ur2Pj57z7/G0dbT GscfAHi0/8SGI0h9UB4LAVsbCwFjHG2DDQAAAFs5ZBEgFgBGufZ7/dr/+G+Mj6Fzqe7ptPbzau31 ch/vFwCgO2oRYE/jmf8tpK4c2HL+lL3nr1X6PoAt7HUFyKg0f+0VKan8Wrm5t1Ja/xmU1r/F8S/N v4Xa+Uv5j3i9pb5HS73e0vpT+UdTWn93sOMPAFzHYb8TYE9LNtJLvicgFgBGS+a/x97z13jEFwPO fVC+V27+3AaiNr9Gbu7R3HOkxscxqZy9pJ4rrqdWas6xfQu5+bdSO38uf8nrTY2N41I5o5j7CLVr ya0/l9+F5xj/XMpfK7W2+DypnFHMBQDYQt913RAb+Sp1th+A7Q0nOHsPAHB2zd0OAAAAAK1SBAAA AIBGKAIAAABAI3wnAAAAADTClQAAAADQCEUAAAAAaIQiAAAAADRCEQAAAAAa8SE2tOLj8Dk2dV3X db/2P8amy/n905fY1P3803ex6RR+//Tl0GtPHevometfe/yWjFuSAwAAPN7QWnwcPt+0Lem7Wvz+ 6ctN29nibK/haOtds56aMTW5QgghhBBCiP2judsBPg6fi2f7f+1/zF4lAK2rPbv/80/fLboaAgAA eIxD3g4wvL92/ctbbM6238umHwAAgBYcsgjQv7zdbPjj462krgyIRYH4eCqOHaXG5HK7Ffl7yp25 TZ0BnjsznOqvmX+UG5OTyq+dv5S/t5r1pHJHqTExf/o4lT9K/SyXGK8GWDMWAADY3s09AkeJ4f31 m/9uEdN7/nP3/y/JKfWn2rZs3ypq79dO5afaavqX5Obac32pti3b74klc+ZyUu2pti371+bGuGes EEIIIYQQYrs49HcCpK4IOJp4tj51ZcEo9X0DtfnPtPf93an5a88gl/Jr50/l723r9eTmAgAA2nS4 2wGG99fYdNN25KJAa0qXeufaz+Ts6wcAAJg6XBEgbvCPfiXAVdWeca619/wAAADcOlwRYGosADyz EDB3SX7qUv5Sfkpt/t5KZ/BTm/fU1QDx8dRcX+tqjsHcLQK54wwAALTpsEWA6cZ/r0LAuMGfbuRT G/LURn8Ux3cz+Sm1+TVKG+6U2vxae89/BbXHp5TveAMAAFOH/GLA1IZ/LARsbSwEjLHnhvzKpmek bTyvae6qgxzvBwAAOI5DXgkQCwCjXPu94sY/PqZdNrAAAMDV3PzewKvHx+HzTVsu5nJT/am2Ul+q bUnf0kj9jvZU2719S/rnclJ9qbZSX6pty/Z7YsmcpZzYFx/HuLc/FTVjanKFEEIIIYQQ+0f/zx+a k7r3f2ruewJGuasGcmO2yq8VL+OeO7sd86dKY5eeOa+df4v8VN6oNn+te49Pamwut8vkR3H80jFz eUtyAACAx2q2CAAAAACtOeR3AsBRxbPmKc5+AwAAR+VKAAAAAGjEIX9FIAAAALA9RQAAAABohCIA AAAANEIRAAAAABqhCAAAAACNUAQAAACARnyIDa34OHyOTV3Xdd2v/Y+xqXm/f/oSm7qff/ouNp3C 75++HHrtqWMdPXP9a4/fknFLcgAAgPsNrcXH4fNN25K+1uP3T19u2s4WZ3sNR1vvmvXUjKnJFUII IYQQQtRHc7cDfBw+F8/2/9r/mL1KAKhTe3b/55++W3Q1BAAAsM4hbwcY3l+7/uUtNmfb72XTDwAA QAsOWQToX95uNvzx8VZSVwbEokB8PBXHjlJjcrndivwjyZ25TZ0BnjsznOqvmX+UG5OTyq+dv5S/ t5r1pHJHqTExf/o4lT9K/SyXGK8GWDMWAACYd3OPwFFieH/95r9bxPSe/9z9/0tySv2pti3bnxW1 92un8lNtNf1LcnPtub5U25bt98SSOXM5qfZU25b9a3Nj3DNWCCGEEEIIkY9DfydA6oqAo4ln61NX FoxS3zdQm7/G75++/BtRqm0re9/fnZq/9gxyKb92/lT+3rZeT24uAADgGg53O8Dw/hqbbtqOXBQ4 mrhJjI8frXSpd679TM6+fgAA4NoOVwSIG/yjXwnA32rPONfae34AAIAWHK4IMDUWAJ5ZCJi7JD91 KX8pP6U2/x7xEvEtzlyXzuCnNu+pqwHi46m5vtbVHIP4849yxxkAALiGwxYBphv/vQoB4wZ/upFP bchTG/1RHN/N5KfU5tdIbepSbaPShjulNr/W3vNfQe3xKeU73gAAcG2H/GLA1IZ/LARsbSwEjLHn hpyvpmekbTyvae6qgxzvBwAA2M8hrwSIBYBRrv1eceMfH8NSNrAAAMDR3fzewKvHx+HzTVsu5nJT /am2Ul+qbUnfXpH6He2ptnv7lvTP5aT6Um2lvlTblu33xJI5SzmxLz6OcW9/KmrG1OQKIYQQQggh 6qP/5w/NSd37PzX3PQGj3FUDuTFb5e8tXsY9d3Y75k+Vxi49c147/xb5qbxRbf5a9x6f1NhcbpfJ j+L4pWPm8pbkAAAA92m2CAAAAACtOeR3AsBVxLPmKc5+AwAAj+JKAAAAAGjEIX9FIAAAALA9RQAA AABohCIAAAAANEIRAAAAABqhCAAAAACNUAQAAACARnyIDa34OHyOTV3Xdd2v/Y+x6VJ+//TlUL+X fm49c/3dwpyc3z99iU031s69pSWvcUkOAADQtiaLAB+Hz9nNfqmP5yhtbpds4kvivKXnepala/r5 p+8W5wIAAG1q7naAuU3+r/2P2asEeI5xcxu1sOGtfY25YwUAANAd9UqA4f2161/eYnO2/V42/QAA ALTgkEWA/uXtZsMfH28ldWVALArEx1Nx7Cg1JpfbrcivEc8MTx/nzjLHMV1l7ig1JuYvWU+81H3u DHl8jq4w9xq189fmdwteY048VgAAAFPDUWN4f/3mv1vEx+Fz8s+1OaX+VNuW7ffE75++3LTFyOWk 2lNte/b//ulLsq30eK59q5yt2pf2l+KesUIIIYQQQojrxqG/EyB1RcDRxLP1qSsLRqnvG6jN31vp DPKa+81zc+1l6/VHtfPX5gMAAOzpcLcDDO+vsemm7chFAfaV21ADAAAw73BFgLjBP/qVAAAAAHAW hysCTI0FgGcWAuYuyU9dyl/KT6nN31vNJepzl7Q/48x9aT0AAAAtO2wRYLrx36sQMG7wpxv51IY8 tdEfxfHdTH5Kbf7eajfupfzSPfF7efTzAQAAnMUhvxgwteEfCwFbGwsBYxxtQ0675q6yyHlG4QUA ADiHQ14JEAsAo1z7veLGPz4GAACAKzjklQB7mrvHP6rJ7RbMH/tq8/c2d/Y59sXHz1a7/lql+VNn 4Gvzo9L4lCVzAgAA7eq7rhtiYwvmNtdz3xMwyl01kBuzVf494qYytWmMOaOa3C6TH8Xx0zFLNrWp nDjnKOZFqblSUvOXxtXmR0vWtSQHAABoW7NFAAAAAGhNc7cDAAAAQKsUAQAAAKARigAAAADQCEUA AAAAaIQiAAAAADRCEQAAAAAaoQgAAAAAjVAEAAAAgEY0WwT4OHxOBnV+//QlNi3y+6cv/0aN2vw5 c/PN9T/KknUsyQEAANr2ITa04OPwufu1/zE2d91MH9v5+afvus7GdZHfP33593iV/PzTd4tzAQCA NjV3JcDcJv/X/kdXBHAYtZv6sRAAAACQcsgrAYb3165/eYvN2fZ72fSfR82GGAAAgG8dsgjQv7zd bPjj462krgyIRYH4eCqOHaXG5HK7FflLlc4KpzbUc2eeU/2554h595g+x5J5U2tKjStdQl9qT8nl TttTY1PjusTYpUqvCQAAYDhqDO+v3/x3i/g4fE7+uTan1J9q27K9Jn7/9OWmrdSXaiv1x8dL+2py avNzOVu15yKVP21L9ZeiNn+rsUIIIYQQQojrxqG/EyB1RcDRxLP1qSsLRqnvG6jN39J4xngve8+f UjoDvvd6SvOX1gUAAPAoh7sdYHh/jU03bUcuCnBsqY146vL5+PgeW84FAABwj8MVAeIG/+hXAtCm 3Bn/FAUAAADgKA5XBJgaCwDPLATMXZKfupS/lJ9Sm89zlc7s1xQHAAAAHu2wRYDpxn+vQsC4wZ9u 5FMb8tRGfxTHdzP5KbX5bG96S8DcJj/XBwAAcHSH/GLA1IZ/LARsbSwEjGFDzlGUvmiwRKECAADI OeSVALEAMMq13ytu/ONjrsMGGQAAaNkhrwTY09w9/lFNbrdg/thXm7+l1IZ47dnnlNT8eyutf249 c7cCdDPz76H2+ebWDwAAtK3vum6IjS2Y21zPfU/AKHfVQG7MVvlLlTaQpc3i0nFL86LUuGfmj5Zu olPzj+LxWTLfnCXzLMkBAADa1mwRoBU2hgAAAIyaux0AAAAAWqUIAAAAAI1QBAAAAIBG+E4AAAAA aIQrAQAAAKARigAAAADQCEUAAAAAaIQiAAAAADTiQ2xoxcfhc2zquq7rfu1/jE0P9XH4/PQ17Gl4 f41NN/qXt3//PLy/fvP4aI62vqOt5yim77ua4+N4AgBwNU0WAUob7VIf94sbKpssHmF8jy0pQgEA wJU1dzvA3Cb/1/7H7FUCAAAAcGaHvBIgd3Y4134vm34AAABacMgiQP/ydrPhj4+3kroyYFoUiP2p gkEc31XkdYnc6eM4Jq4niv2px9Fc/6j0vHvKXcJdej+kxpTya8S5l9xvHsd0lbmj1JiYv2Q9S8W/ d/G5usxzLM3rMrmjOCauJ5rrXyKuZ+54xvypVD4AADzbcNQY3l+/+e8W8XH4nPzzkpxcfoxcXq69 Jqe2v3b9pZxS39qY+9mW+nN9te33xJI5czmp9lTblv21MZ1v6dy5vFR7qq3UHx/HuLc/xlz+vf1C CCGEEEI8Og79nQB94oqAZ4ln1HNKec/8voHSupZ65vpTxvfHVOn9ksrf29bryc21t9LrmCrlnen1 buXs6wcA4HoOdztAapMQ2x79wXqLDfQznX39PFdpYw8AAJzL4YoAcbNxhA3I2TfQZ18/z/Xsv38A AMB2DlcEmBoLAEcoBNQ40iXzLYpXjjxbzXrmLpk/w9+D0vqjs7/es68fAID2HLYIMN3471UIGO9x X/rt+Es58/5cW79P7lW7nlL+Hn8Ptla7vlL+2V/vGdYPAEBbDvnFgKkPznNn3NYaCwFj2MADAABw VYe8EiAWAEa59nvFjX98DAAAAFdwyCsB9rT3r7mbm7/Ut8Tc/K2bu2Kk1LeH2vXEx2ez9+udm//R jrQWAABY4pBXAuxtyUb6nqsBSvPPzZsaG8ekcviqtFHc+mqS1HPF50jljGpyu0R+lBo/N2ZrqTWM 4lpKuV0if2wrjUmZ5o9/Ts0dpZ5rOi7VP7XkOQAA4JH6ruuG2AgAAABcT3O3AwAAAECrFAEAAACg EYoAAAAA0AhFAAAAAGiEIgAAAAA0QhEAAAAAGqEIAAAAAI1QBAAAAIBGKAIAAABAIy5dBBjeX2MT AAAANOvSRQAAAADgq0MWAXJn8HPtKcP7a9e/vMVmAAAAaNYhiwD9y9vNht+mHgAAAO5zyCJAFwoB tQWA2nwAAABowWGLAN2kEGBDDwAAAPfru64bYuMzxdsAUkpFAUUDAAAASPsQG54tbuBt6gEAAGAb h74dYCwALLk6oFMwAAAAgKLDFgGmG/qaQgAAAACQdsgiQOqM/lwhIDUGAAAA+OqQRYDcZj7XDgAA AMw7ZBGglqsAAAAAYN4ligAAAADAvL7ruiE2AgAAANfjSgAAAABohCIAAAAANEIRAAAAABqhCAAA AACNUAQAAACARigCAAAAQCMUAQAAAKARigAAAADQCEWASsP7a2zaxPD+ehPcOvtxOfv6AQCAc/sQ G65keH/t+pe32JxVm7+V3PPm2gEAAGANVwI8WWmj37+8OXMMAADAZi5bBChtrlNq8wEAAOBsLn07 AF+lrigoFT2W5qfyRqn8bsWYmD99HPNjMSeO7cKYmB/l+ufmnYq5pfWP4pgukxvXt3QcAADQruFq Mby/3rSVoia/JndJzM03178kcnNs0Z5qK/Wl2vbqn8tdkpPqT7WV2rfKSbXXvl4hhBBCCCFE23HZ 2wH4WzxTPNUnvnOgNr+kNr/b8Kx16XXcozTvmtcbrZ2/NA4AAGB0uSJA7WaoNv9qrvjan/kzfcbz PvP1AgAA5+I7AQ4gd3aXdVrbELf2egEAgPUuVQSoPSNam7+X0hquViAoXdLezRwLAAAA7nOpIsAj 2KTer3QMj1KYAQAAuKLLfCdA7eaxNh8AAADO7jJFgEcpXcp+Rld7Pc92tuN5tvUCAAD3uUQRoPas fm3+mZXuwU8dh9r8Wrm5n6X0elNK+Vscn73nBwAA2uY7ARqQ21jmNpS1+TVyc4/mniM1fm7MnNSc Jbn8JetIjY3jUjljOwAAwD36ruuG2AgAAABczyVuBwAAAADmKQIAAABAIxQBAAAAoBGKAAAAANAI RQAAAABohCIAAAAANEIRAAAAABqhCAAAAACNUASoNLy/xiYAAAA4hUsXAWzYAQAA4KtLFwEAAACA ry5bBBjeX7v+5S02d13hCoFcOwAAAFzBZYsAJf3L282Gv1Q0AAAAgCu4ZBFgyYZ+WghYkg8AAABn d8kiwFJjIUABAAAAgBZ8iA1nN7epj7cBpNpK4wEAAOCsLlcEmBM3+HNFAwAAALiKS90OULuhH/Pj lQAAAABwRZcqAtSYFgxqCgE1RQYAAAA4kssUAWquAkjl1hQCAAAA4IwuUwSoEQsAo1z7lEIBAAAA Z3WJIkDqzD4AAADwrUsUAQAAAIB5fdd1Q2wEAAAArseVAAAAANAIRQAAAABohCIAAAAANEIRAAAA ABqhCAAAAACNUAQAAACARigCAAAAQCMUAQAAAKARigALDe+vN8Hj7HXct57v2Y7+eo6+vnvt/fpq 56/Nv4I9/52em2+un/uc/fieff0AXMeH2MCt4f2161/eYnO2nf9n746R3ba5hgFDM/6ygGwhbaqs yOW7hdwimaSwt5DyrsiV22whC/Bb6C/y840CHQAERUok8TwzZ8YCDiCQ0rUvjkh5fdN59ksUUOLv ZACANlcCNNR+qbx8/GRTCgAAwGEoAgCspFQwfJW9rQcAgNdzO8CL1a4kqP0CH42L8vMrGXrG5aK8 pbacP5o7VebvzU+FMVH+kvMf5aQgb5Ln3z6eOyZVcpeI5q+J8kvriXInPWOi3CWvV5p5zlNhvklp XD5mznPNybmVP0cqjIvyJlH+UtHzlObPc3uPvaV3/jx/EuVOojG1/F6988/Nj/ImUX5aMCbPr53/ a+fPb56fK/W35r2V59bWP8nHpEJuvr654wAgpZSuohzX97e7tp7+VuTjO/ln8wAAIABJREFUbx/n fUva58yXRymv1N4bpXlK7b05pYjGRm2tvp72Jee/FHPGP5JTau+N2jxRX9RWao/aWv1RW6n90der NabWX+vryenNL+VE7VHbnL6eKM1Tau/NeSRa89f6S3297b1RmmeN9qit1he1bdXfyp2TE/VHbbX2 tXKi9t7jFUIIIW7irkHcROsf1lZ/K/LxvY/zyPunx3l7KVp5rf5WtMY/2t+KfHz+OI+8P3+cR97f e/5b0Zpn6/5WtMbn/fnjPPL+/HErWvl5/6OvV2vc1v15tPJ7+/PHebT6W9Ea/2j/o9Gav7c/f5xH q78VrfF5f/44j7w/f5xH3p8/7o3W+Km/lZfnlyLvzx/n8ez+3uMVQgghpvCdAAPILxnkuZz//Ype F68Xozjj+/yVP7+veN5XHi8Ax+U7AWaI7rM7khF/QdjTa7bk/O9p/aNZ8noB+zDaz+9oxwvAOhQB Zqj9I3vGzdrWx/SM+Uuv2dbPvYat17/GHGvqWc+l8d9yls4b7FXt/Xw2fn4BYB8UAbiz9S9iW85f 20AfwTPWv/X8vXrXU8t/xvmDNY32fq0dr59fAHgO3wkAAAAAg1AEAIZVuzQZzs77f11HO59HWy8A 61EEOJjaPZVrXEpZmz+t8EvDq+fvEZ3P2vxRfq/a/GtozV/rm6M1f66Vn/flj1tq86/xeq3pFevZ 2/nZ23q2VjvetOD9nqvNH53P3vxepblfpXa8kVr+Gudn6/kBYOI7AQ6o9IvCWr8glOZPKz3Hkvlv 86c/l3Jr80dKub3zl/J7leafIxqbryvKmeS5S9Tmj9Ty8/XUclOQP7VFY6LcpXren9FaUiX/VnQs 0bie9URzTu2vsLf13IrW9ui6ojknj86dKvOX5u7N71Gae9J6jmh8a0xLNGdNKX/OOqKx+bgoZ2oH gLVcUkrXvBGA9V19mgcAwIu5HQAAAAAGoQgAAAAAg1AEAAAAgEH4TgAAAAAYhCsBAAAAYBCKAAAA ADAIRQAAAAAYhCIAAAAADEIRAAAAAAahCHDj+v6WNwEAAMBpKAIAAADAIE5RBCh9gl9qj1zf39Ll 46e8GQAAAE7jFEWAy8dPdxt+m3oAAAD4t1MUAVJWCOgtAPTmAwAAwBGdpgiQbgoBNvQAAABw75JS uuaNR5LfBhCpFQUUDQAAABjFh7zhaPINvE09AAAAxE51O8BUAJhzdUBSMAAAAGAwpykC3G7oewoB AAAAMIpTFAGiT/RbhYBoDAAAAJzZKYoApc18qR0AAABGdIoiQC9XAQAAADCiIYsAAAAAMKJLSuma NwIAAADn40oAAAAAGIQiAAAAAAxCEQAAAAAGoQgAAAAAg1AEAAAAgEEoAgAAAMAgFAEAAABgEIoA AAAAMIgPecNRff7yLW9KP//0Xd4U5uWicUt9/vJt1fkmt8exxfxzPft89lp6/q/Xa7pcLnnzv8zJ AQAA2JNTFAFKG72oPX8c5RzBtOY5m/At5efuqOfz1tzN/eVymZ0LAACwB4e/HaC26fz5p+9evknm WHo39VMhAAAA4AgOXwQAAAAA5jnF7QBbq11NEF2FkOfX7t+vXcmQZvTPla8pBWt5pp71RLmTaEye Xzv/t3qvApj03BYwNw8AAGALigANrU141H/7OOp/ttIaSu1bKz1v1B613Yr693b+AQAA9sLtAA/a +waztgn++QXfmbD2ekpzAQAAcE8RAJ7IrQAAAMArKQIAAADAIHwnQEPrEvUjXI5eW/8r9KznDOcf AABgLxQBZqhtNGv3uO/F3tbXu55a/hHOPwAAwF64HQD+v+m/+uvV89/+LZkfAABgLacrAtQuHQcA AICRHb4IkN8zfvt4jUvFty4q5Ou/VWrvUZs/rfQcPXrXkz/eWu/VAD1XAQAAALzaJaU0f8ezY9Fm cU4BYE6hIJp70hqbgvHRmDwn3WyYe/JLovzUGLNEab25nvWUclMhP5ePnzNmzuZ+Tk5uyRgAAIC1 nKYIEJm7Id2zMxwDf1MAAAAAXu3U/ztA7ZN0Yvmn5hHncxkFAAAA4NVOfSXA0SlgAAAAsKZTXwlw FKVP3xUAAAAAWJMrAQAAAGAQh/8vAgEAAIB5FAEAAABgEIoAAAAAMAhFAAAAABiEIgAAAAAMQhEA AAAABqEIAAAAAINQBAAAAIBBKAIAAADAIBQBAAAAYBCKAAAAADAIRQAAAAAYhCIAAAAADEIRAAAA AAahCAAAAACDUAQAAACAQSgCAAAAwCAUAQAAAGAQigAAAAAwCEUAAAAAGIQiAAAAAAxCEQAAAAAG oQgAAAAAg1AEAAAAgEEoAgAAAMAgFAEAAABgEIoAAAAAMAhFAAAAABiEIkCn6/tb3rSK6/vbXTzD s56n5NXP/6ijrx8AABjLh7zhTK7vb+ny8VPeXNSbv5bS85baAQAAYAlXArxYbaN/+fjJJ80AAACs 5rRFgNrmOtKbDwAAAEdz6tsB+EfvFQVRfqlIEuVOojF5/u3jPD8vzuRjUzYmz8+V+lvz3spza+uf 5GNSITdf39xxAAAAc13PFtf3t7u2WvTk9+TOidZ8rf45UZsj6ovaSu1R21b9rdw5OVF/1FZrXysn au89XiGEEEIIIYToidPeDsDf8k+WW2r5lwXfUVCaq1dtXY+ozbvkeHNL56+NAwAAWOp0RYDezVNv Ps/3ytfoFc/7yuMFAADOzXcC7EDp02D+NtqGeLTjBQAAnudURYDeT1B787dSW8MrCgQ9z1m7pD01 jg0AAIDnOlUR4BlG2NT2HmMtfy+FFgAAAE70nQC9m83efAAAADi60xQBnqV26Tvnc7TX+2jrBQAA nusURYDeT/V784+sdc9+rpWf9+WPX621/lwtf433ydbzAwAA9PCdAAOobUQjtfx801rLTUF+Lhrf GtMSzVlTyp+zjmhsPi7KmdoBAACe6ZJSuuaNAAAAwPmc4nYAAAAAoE0RAAAAAAahCAAAAACDUAQA AACAQSgCAAAAwCAUAQAAAGAQigAAAAAwCEUAAAAAGIQiQKfr+1veBAAAAIdw6iKADTsAAAD849RF AAAAAOAfpy0CXN/f0uXjp7w5pcoVAqV2AAAAOIPTFgFqLh8/3W34a0UDAAAAOINTFgHmbOhvCwFz 8gEAAODoTlkEmGsqBCgAAAAAMIIPecPRtTb1+W0AUVttPAAAABzV6YoALfkGv1U0AAAAgLM41e0A vRv6KT+/EgAAAADO6FRFgB63BYOeQkBPkQEAAAD25DRFgJ6rAKLcnkIAAAAAHNFpigA98gLApNR+ S6EAAACAozpFESD6ZB8AAAD4t1MUAQAAAIC2S0rpmjcCAAAA5+NKAAAAABiEIgAAAAAMQhEAAAAA BqEIAAAAAINQBAAAAIBBKAIAAADAIBQBAAAAYBCKAAAAADAIRYCZru9vd8HzbHXe157v1fZ+PHtf 36O2Pr7e+Xvzz2DLv6db87X69+bV63318z/q6OsHYFwf8gbuXd/f0uXjp7y52M76pvPsly6gxN/J AABtrgRoqP1Sefn4yaYUAACAw1AEAFhJqWD4KntbDwAAr+d2gBerXUlQ+wU+Ghfl51cy9IzLRXlL bTl/NHeqzN+bnwpjovwl5z/KSUHeJM+/fTx3TKrkLhHNXxPll9YT5U56xkS5S16vNPOcp8J8k9K4 fMyc55qTcyt/jlQYF+VNovyloucpzZ/n9h57S+/8ef4kyp1EY2r5vaL5a6L80nqi3Ek0Js+vnc9r 589jnp8r9bfmvZXn1tY/ycekQm6+vrnjAGCJqyjH9f3trq2nvxX5+NvHed+S9jnz5VHKK7X3Rmme UntvTimisVFbq6+nfcn5L8Wc8Y/klNp7ozZP1Be1ldqjtlZ/1FZqf/T1ao2p9df6enJ680s5UXvU NqevJ0rzlNp7cx6J1vy1/lJfb3tv1OaJ+qK2UnvUtlV/K3dOTtQftdXa18qJ2nuPVwghhHgg7hrE TbT+IW71tyIf3/s4j7x/epy3l6KV1+pvRWv8o/2tyMfnj/PI+/PHeeT9vee/Fa15tu5vRWt83p8/ ziPvzx+3opWf9z/6erXGbd2fRyu/tz9/nEervxWt8Y/2Pxqt+Xv788d5tPpb0Rqf9+eP88j788e9 0Ro/9bfy8vxS5P354zye3d97vEIIIcTS8J0AA8gvMeS5nP/9il4Xrxfsxyt/Hl/xvK88XgDG4TsB ZojuyzuSEX+h2NNrtuT872n9o1nyegHbGO3ncbTjBeA1FAFmqP2jfMbN2tbH9Iz5S6/Z1s+9hq3X v8Yca+pZz6Xx33KWzhvsVe39/Ao96/HzCADHpAjAna1/cdty/toG+giesf6t5+/Vu55a/jPOH6xp b+/X3vXU8v08AsA++U4AAAAAGIQiADCs2qXMwNiO9vfD0dYLwOsoAhxM7R7MNS69rM2fVvgl49Xz 94jOZ23+KL9Xbf41tOav9c3Rmj/Xys/78scttfnXeL3W9Ir17O387G09W6sdb1rwfs+15s+18vO+ /PGrtdafq+Wv8X7ben4AWMp3AhxQ6ReLtX6hKM2fVnqOJfPf5k9/LuXW5o+UcnvnL+X3Ks0/RzQ2 X1eUM8lzl6jNH6nl5+up5aYgf2qLxkS5S/W8P6O1pEr+rehYonE964nmnNpfYW/ruRWt7dF1RXNO Hp07NeaP1PLz9dRyU5Cfi8a3xrREc9aU8uesIxqbj4typnYAeJVLSumaNwKwvqtP/wAAeDG3AwAA AMAgFAEAAABgEIoAAAAAMAjfCQAAAACDcCUAAAAADEIRAAAAAAahCAAAAACDUAQAAACAQSgCAAAA wCAUAW5c39/yJgAAADgNRQAAAAAYxCmKAKVP8Evtkev7W7p8/JQ3AwAAwGmcoghw+fjpbsNvUw8A AAD/dooiQMoKAb0FgN58AAAAOKLTFAHSTSHAhh4AAADuXVJK17zxSPLbACK1ooCiAQAAAKP4kDcc Tb6Bt6kHAACA2KluB5gKAHOuDkgKBgAAAAzmNEWA2w19TyEAAAAARnGKIkD0iX6rEBCNAQAAgDM7 RRGgtJkvtQMAAMCITlEE6OUqAAAAAEY0ZBEAAAAARnRJKV3zRgAAAOB8XAkAAAAAg1AEAAAAgEEo AgAAAMAgFAEAAABgEIoAAAAAMAhFAAAAABiEIgAAAAAMQhEAAAAABvEhbziqz1++5U3p55++y5vC vFw0bqnPX76tOt/k9ji2mH+uZ5/PXkvP//V6TZfLJW/+lzk5AAAAe3KKIkBpoxe154+jnCOY1jxn E76l/Nwd9Xzemru5v1wus3MBAAD24PC3A9Q2nT//9N3LN8kcS++mfioEAAAAHMHhiwAAAADAPKe4 HWBrtasJoqsQ8vza/fu1KxnSjP658jWlYC3P1LOeKHcSjcnza+f/Vu9VAJOe2wLm5gEAAGxBEaCh tQmP+m8fR/3PVlpDqX1rpeeN2qO2W1H/3s4/AADAXuzydoDr9fq/yEVtr7T3DWZtE/zzC74zYe31 lOYCAADg3u6uBMgvl84fw5F5LwMAAK+0yysBAAAAgPXt7kqAXP5fsD37k9TWJepHuBy9tv5X6FnP Gc4/AADAXuyuCBBt8qO2Z6ptNGv3uO/F3tbXu55a/hHOPwAAwF64HQD+v/yqk7l6vrdiyfwAAABr OV0RoHbpOAAAAIzs8EWA/J7x28drXCq+dVEhX/+tUnuP2vxppefo0bue/PHWeq8G6LkKAAAA4NUu KaX5O54dizaLcwoAcwoF0dyT1tgUjI/G5DnpZsPck18S5afGmCVK6831rKeUmwr5uXz8nDFzNvdz cnJLxgAAAKzlNEWAyNwN6Z6d4Rj4mwIAAADwarv73wHWVPsknVj+qXnE+VxGAQAAAHi1U18JcHQK GAAAAKzp1FcCHEXp03cFAAAAANbkSgAAAAAYxOH/i0AAAABgHkUAAAAAGIQiAAAAAAxCEQAAAAAG oQgAAAAAg1AEAAAAgEEoAgAAAMAgFAEAAABgEIoAAAAAMAhFAAAAABiEIgAAAAAMQhEAAAAABqEI AAAAAINQBAAAAIBBKAIAAADAIBQBAAAAYBCKAAAAADAIRQAAAAAYhCIAAAAADEIRAAAAAAahCAAA AACDUAQAAACAQSgCAAAAwCAUAQAAAGAQigAAAAAwCEUAAAAAGIQiAAAAAAxCEQAAAAAGoQjQ6fr+ ljet4vr+dhcsN8p5PNvxbXE8j8z5yNg9OPr6Wdfo74ejHf/R1ps7+vr3ZuvzufX8xEb5fZX9+ZA3 nMn1/S1dPn7Km4t689dSet5SO23TefOXKgAAe+T3VV7FlQAvVtvoXz5+8pcCAAAAqzltEaC2uY70 5gPn5+8EgGX8/bku5xNY06lvB6B+eVHtH5RoXJSfF09a46L+STR/qowp5W+ptJbUWE80LsqP8iZR fqqMKeWnwpgov/f1XSKf8/ZxNHeeP4lyW/Lju22fRP2T0lrSRuPmyOeuHUvp+Cel/vw5UjD3UtHc qTB/vr5obGlcST5fNH6S98+dNxeNi/KjvEmUn4IxtfdDCvJvRfm9SvNHc5dyUyF/Uhv3iDmvd7Su uXkpyK29Xvl6cnl/9DjX6p+0nncyNy+3xbg5SnNH85ZyUyF/qS3PZz5mznPlY1IlNxXyJ9G4KL+U 13q/RuPmyufPRf3RGtKD65hEz3er1B+tKcpjTNezxfX97a6tFj35PblzojVfq78VtfGlvp7227ao P488p3d8aWwp5uT0RD7fnPX3tOdtrfmjtlZfT3vr+deOR56jNLa3vSen1l/qK7W3+pZEa74l/VFb rX2tiOa/bYv6o6jl5X354zzy/trjvG9Je9Q2p29uzqP9j0Q0d9TW6iu1t/rmxJzXM49SXqm9J6e3 v3f9tZxa39ycWn+pr9Te6ns0ormjtjl9S6M1Z62/1rdGTm97qS9qK7XftkX9j0ZrzlZ/b24rZ0l/ 1FZrF2PFaW8HoO0SfOdAqZKYCvmT2ri5avNHevO3Fq2ndl6i/Jo18peupzZuL2rrzz3jeKL1PON5 t1Rbf3S8a6rNX1vXrbl5W4jWX1tPlF/Tm79Eaa1r6F1/lF87n2ua+zy1vGj9z1Jb11xbrz+af411 LxWtp6Y3f2trrKd2/qP5a/mRWn40/6Q2bi9q699K7by8Yj3sz+mKALU3faQ3n3vO4bmd7fU92/GM zuvJMx39/Xb09cOtLd/PtY3yls8Lz+I7AXag9JfMUTzjL8Kjn6Mje8br22vp+8E/3HV7OT89r+8e 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 ojF5/pz1zJXfrpE/Vyo8x9y8VMid5GPy9eRa/XPk62mdzzz/VpT3WTzEAAAgAElEQVQPAABru4p5 8ev1611bHrc5c/JreaX2npze/t7113JqfUvj+v521za3v9TX2/5IzJmzlBO1R21r9vfG7Xxz5y7l Re1RW60/f5zHo/15tPIf7RdCCCGEEOLRcDvARvJP1Etqea+8DaG2rrleuf7I5eOnu09ha58ER/lb W3s9pbm2VjuOW7W8Ix3vWo6+fgAA9k8RoMPcTe0aG+hXOvr6ea3axh4AAHgtRYANHH0DffT181oK AAAAsF++GLDTdDXAmhvlOVcXsJ3eS8631rOe1iXzR9iQ19afO/rxHn39AAAcnyLADqxZUKDf3jZe veup5R/h0vze9dXyj368R1g/AADH5naABeZ+NwAAAADsiSIAAAAADEIRYKG1rgZozVPrm6M1/+ha 92jX+rbQu5788dFsfbyt+Z9tT2sBAGBMvhNgB2ob9db3BURj8zFRDv+obRTXvj87eq78OaKcSU9u CvJz0fjWmLVFa5jka6nlpiB/aquNidzmT3+O5s5Fz3U7Luq/Nec5AADgEZeU0jVvBAAAAM7H7QAA AAAwCEUAAAAAGIQiAAAAAAxCEQAAAAAGoQgAAAAAg1AEAAAAgEEoAgAAAMAgFAEAAABgEB/yBs7p 85dveVP6+afv8qYwLxeNW+rzl2+rzje5PY4t5p/r2eez19LzP2fcnJy9il636FiivFw0bqmtzqmf l3mWnv854+bkPNve1tRaT6s/zcwp2fv7czLnGOfkHM31/S1dPn7Km3dj6Tlf+vfz0ucrac3X6n+W OeuYkwMjuIp6/Hr9etd2pPj85dtdW629N+eROPr8vXGG9fSM6cndS5TWXGrvzXkkjj5/b5xhPT1j enKfEUdbz+cv36o5rf7eWHOutaJnTT25R4jr+9td257i0fPdO743vxWt+Vr9z4ieNfTkCnHGcDvA ydWqnT//9N2sTzZgUns/RY72Hqsd39GOhdervZ8i3mOPK53D3tfiiHqPsXSu4Ii8/6GPIsAMv11+ TL9ev+bNAACwOz0bYmA8vhNgA7WCwW+XH/OmYn6Uu0e1Smr0j1Cef/s4z29Vdlv9c+VrSsFanqln PVHuJBqT59fO/62l53qqti8Ze0b5+b8VnaM8v/Z6tc5zq3+ufE0pWMsz9awnyp1EY/L82vm/tfRc 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 --nextPart2755839.fDdHjke4Dd Content-Disposition: attachment; filename="java-ts-mode-with-doxygen.png" Content-Transfer-Encoding: base64 Content-Type: image/png; name="java-ts-mode-with-doxygen.png" iVBORw0KGgoAAAANSUhEUgAABAEAAAOCCAYAAAAGAMvgAAAACXBIWXMAABkRAAAZEQGQh6VoAAAg AElEQVR4XuzdMbLcRpYobNwJzb+AMemOK4fPoKPN0OwtPBqjUBt8W2iTK3qW3A45CkbI6QW8Meo3 NOguHp7MRKKAAlD5fREZEvKcTCRQqLqFc6su395/+On2x++/TTVfv36NXQAAAMDF/FvsAAAAAF6T IgAAAAAMQhEAAAAABqEIAAAAAINQBAAAAIBBKAIAAADAIBQBAAAAYBCKAAAAADAIRQAAAAAYhCIA AAAADEIRAAAAAAahCAAAAACDUAQAAACAQSgCAAAAwCAUAQAAAGAQigAAAAAwCEUAAAAAGIQiAAAA AAxCEQAAAAAGoQgAAAAAg1AEAAAAgEEoAgAAAMAgFAEAAABgEIoAAAAAMAhFAAAAABiEIgAAAAAM QhEAAAAABrFJEeD25VPsAgAAAE5mkyIAAAAAcH4PFwFuXz5Nbx8/x+5pqnxCYKt+AAAAYLmHiwA1 bx8/f3cDXysa9OYDAAAAyz1UBFhyg35/Y79HPgAAALDMQ0WApeYb+6U39L35AAAAQNvb+w8/3f74 /bfY/42vX7/GruZNevxYf+Z+fG8+AAAA0OeH2LGVeMPeKhrEWCsfAAAA6LPq6wC9N+hz/pLf9k8r 8gEAAIC2VUWAHvcFgyU39r35AAAAwDLdRYCeTwFkubUb+958AAAAYLnuPwyY3agDAAAA59f1SQAF AAAAALiuriIAAAAAcF1dRQCfAgAAAIDr6ioCAAAAANelCAAAAACDUAQAAACAQSgCAAAAwCAUAQAA AGAQigAAAAAwCEUAAAAAGIQiAAAAAAzih9hxNbcvn2LX9Pbxc+x62O3Lp13mfUQ89rOt70rO+Pj2 sP59zM+x0tric3C2JL+Uk9nj/Owx52zJ3EtyttZ6PJ/l0WN/dHy09Xx7611vb/6jSq8L9565Hva1 5vqK10ht/Jr599az/r2d8fzAFVy+CDA/8Ud7ERjteOHZWs+xWrwUu3+9enWlczAdePyj/rzgueK1 5Xrj3tWvh6uvH/iTrwMABK03Oa3428fPh93onkXpHLTO3TOU1gYAMIJdPwlQerNX6gfW8Xw63p43 lR5f7rke4Dz2fj7uPT8wpl2LAPNvW+5fwOL2s9TeoJfWE8fcby8dMxVy43lYMi7mtNYT82dZ7iwb s2V+r6Xzx/MZZfE4d+t8TsmYqZCb5c2y/GmDMaWce9k+snFZ3izLXyPuY8mxxDFTJfeZllxfayw5 J1NjX7VxJdnxrPEWfgbU5i0dQ5Zfyp0K+XurHddUiJeOIebdW3o9zLJ9lMZluVMlv9ea+UtjSnry a7m1Ne0hXh/Z2rI19eRl/bNSfOn8a2Rzz+I+enLvZeP2yq/lTcncS8YuybkX9zEtHLdEnHvJ2uKY qTN36sivredWuL5nMZ5tR9l8S/OmQu6sNAY29/7DT7d3795V2zRND7Xbl0/f/HeP1pq7Fq/FtsjJ +u/7snirrRnTGrt3f28rzZP1Z31bxms5WX/WV4tlfVvGazlZf9a3JLa2LZmzlFPqf6S15ryPl3JL /a1Y1lr5tXgp1tvf0+Icty+f0r44LmtZXta3JLYmb0lrzRXjcXtpbIucrD/rWxLbopXmL/WXYllf KRa3Y2vFe1trvvt4K7eVl/Vnfa141lfr72mtOWI8bi+J7d3fm7N3fimn1P9IWzJnKafUX2pL8ls5 vfH77RgrtVJe1p/19cQ1bav2lL8J8JZ8IuBM5vU9onZ8tflr4/aSrae2ji3ye/XOn/XNanMtVZuj tu9Mb/60QWX46PU/asv1j6bn/NTO81F61j+tyD+bLdZfexx75+/N75XNX1t/pje/Zcu5eiw9jlpe dj577T1/S2nfmWw9vevvzT+bs61/y/X05m+pdhz3anlr1l+aC7a229cBsos+9o1+oddeOM7mCuuc X2zv1xq3oWZ+jRrxmtnzubLXvI+4f3N2xvXtabTjvYK9n3+l+Uv9PeJ7u8yj+zjSldc+vcD6j7DF 8wLObrciQHzyeEJ97xnnY8kP51dy/2bHNUev+XoZ7do5y/E+8/Vqz2Pec+4re+bjezVXvl6uvHbO 40yvD65pRrBbEeDeKDdlZ3oBmxpvRLdY6xZz1Kydf69rbe16lpjXXLL1scB0d02f4fqqPWdrzw2u 4UyP74ivt9nPxbh9r3Z+HvWM81+bn/31nv+jrsWt9KzxGdc/LLF7EeD+iZ39EHolZzquZ5zns84/ H/vW52DLuTK1+bc+FraTXWu1H/BnMq85rv/Zjt4/+zrj41tbzxnX+2x7H39t/i3O/6PjeUzP+d/i 8T5a7/pr+a9wPriGXf8wYHYhvzUqYPCI+2vOtcazzNfa3OLr3tl5rsDru3+eX/F1CoDt7FoEKP2A KfVzXle4Qcje1Li54VnePn7+Z5u3r8RzZRweZ1ju6s+Xq6+fb3k82cquRYCRtN5A12J7aK0nquWv ubmuxZbonT9b46w11xKtOWqxJR4d31Jbf+3cncWz11/b37QgflVHHdeW+11yPSzJubLa+Tzi2Gvr yeyd35N7RrXjbT2+89glOSW12BKPjr+XHUvv+mv52fxnc7b119YzdZ7/LRw9f4zFbTjK7n8TYG/3 T6b5//d4wcue5HE/Wc4s5j5DbT2ZUn5p7aX8qTKmx97z38v2FfeR5cxibq/a3FNl/p7rv7SPUv4z ZWuL68py5v493O8v20dpPffiuJ7Ha1qRv4X5uPbeT7TkfN4r5dbWvdc5zNZ+v73V/nquh2xNc/8R Susp2TO/lXvUOepROoat1l6af9pgH7W5p8L8pfwsd2rsIxtTys9yZz3PxzV65l+z/j2V1jMV1lTL b8nGxn1kOVuqzd+7lpgPe3l7/+Gn2x+//xb7v/H169fYBQCHuB1QpACO4fkOsD1fBwAAAIBBKAIA AADAIBQBAAAAYBD+JgAAAAAMwicBAAAAYBCKAAAAADAIRQAAAAAYhCIAAAAADEIRAAAAAAZxiSLA 7cun2AUAAAB0ukQRAAAAAHjcrkWA0m/wS/2Z25dP09vHz7EbAAAA6LRrEeDt4+fvbvjd1AMAAMAx di0CTKEQ0FsA6M0HAAAAynYvAkx3hQA39AAAAHCcH2LHVuLXALK+WlFA0QAAAAC2tVsRIN7Au6kH AACAYz3l6wBzASB+EqBEwQAAAAC2t3sR4P6GvqcQAAAAAGxr1yJA9hv9ViEgGwMAAAA8btciQOlm vtQPAAAA7GfXIkAvnwIAAACA/ZyqCAAAAADs51RFAJ8CAAAAgP2cqggAAAAA7EcRAAAAAAahCAAA AACDUAQAAACAQSgCAAAAwCAUAQAAAGAQigAAAAAwCEUAAAAAGMR5igC3W+xZ5nb7V+vRm7+3vdez 9/xr3D92Z1zfA/72339rtpjfsiTnWW7h8WqtrRVvaY3P4nGNl3b2Y3ny+rLHO1qS8yzxWmytrRVv aY3P4nGNz3C73Q7ZLwCM7ofYcTlvb3/+1xuJa7nd/vXYvaC//Ptfvtn+23//7bu+qJaTvWk/yu12 m946Hrvace3p7e2te61cR+268nzp9+znyzP3BQB86zyfBIDB/eXf/5LevBx1U5DpfeN+9NrnGxte j+fL9p71fOk9LwDAtsYtApztDcjZ1gNB7xv3o29oZs+6sYF7ni8AwFkt/zpA7U1B9kan9XHvLF7a R8x7xP0+lsybrWnJuKWWridbx6w0Lo5Zsq84ZirkxsdvybiY01pPzJ9lubNszJb5O5t/uznfDNRu DLLfgk7JVxGmSu5UyI+OvqGJ5+Veqf/ebh91Xnr9xOdLlMXj3K3ny5SMmQq5Wd4sy5/VxkW13No+ OsTronYtlJ4DWX4pdyrkR73XWm3da8Tzcq/Uf2+35wsAcArLiwBT5Y1b9gZ2jdIcW80/3e2j9gZ1 VtpvqX+NnvWU9llaz31fKedeKafUP2vFZ73rKcVLY/fuf5L5Dfz8/yWlWOlNftY3VfJnvTcDrfmO svmNTek6KfX36n2+lHJK/VnfVMkv9U//E4vbpdxpQbyD58s+Nn++AACnsc3XAd7evn8TuKW958/U 3qQesZ6aLdaz9nhr4/aSrae2ji3yL+T+pmiJWn7vTcBZb2hmm33Uuff6yfpmtbmWqs1R23cmy6/N v8aWcz2odv1navmeLwDAFWxTBBhRxxu9l7X1jcGerrLO//GXf//L4TcHZ7uhyW6+1uzzsBubZ9xc D8rz5XtnfL7c/uefBOw5TwDA9vq+DgD3nvFGbqM3n68qvsnfUu/Hgeebjt6bjGfrOabNzYWA+//y NJ4v/XqOqWWeZ8s5AYB+igD8y9luuGs3SVusdYs5DlS7gdjqZufVbmx6jqVp7fWzVwFg7Xr2MB9j ydbHvkDtuvR8yfUcCwBwHb4OwL+8vdXbM+1xkxTF44vtxJ5549D7ceDsY8hbuZ+79xxsfkMTr5fY Su4/CbCluP/Yni3u/75tfewNvdfKIzxfAICzUwQAmva+semZe43T3NDcF7cOuBnmOTxfAIAzUwRY a+c3YWzM4/WwvW9s9nKaG5rs0y0KAS/L8wUAOKttigB7v7nN5t9bbf1HrGdvteOdDriJbq0nquVn j1ctfzrgeDttecPQ8zHhM9zYzHMuWfNuNzS91092Dc5acy3RmqMWW6I1f9ST+wRbXodLr73J86Wo 97wAANvq+8OApR/apTcNW71xLM0/hTHz/2+VX1p/KX+NnvU8IjuWuJ8sZxZzn6G2nkwpv7T2Uv5U GXMivTcMpdwlNwf35jfwS28Wem5CttSzxlWeef1k+4r7yHJmMXeN2vxRK3eL9XTyfKnrWeMW7gsB z9wvADBNb+8//HT74/ffYv83vn79+ucbOj+o4ZKOuKlY6tk3H9Di+QIAvLJtvg4AsJIbGljO8wUA eJQiAAAAAAxCEQAAAAAGsfxvAgAAAACX5pMAAAAAMAhFAAAAABiEIgAAAAAMQhEAAAAABqEIAAAA AINQBAAAAIBBKAIAAADAIBQBAAAAYBCKAAAAADAIRQAAAAAYhCIAAAAADEIRAAAAAAahCAAAAACD UAQAAACAQSgCAAAAwCAUAQAAAGAQigAAAAAwCEUAAAAAGIQiAAAAAAxCEQAAAAAGoQgAAAAAg1AE AAAAgEEoAgAAAMAgFAEAAABgEIoAAAAAMAhFAAAAABiEIgAAAAAMQhEAAAAABqEIAAAAAINQBJim 6fblU+wCAACAl6MIAAAAAIMYvghw+/Jpevv4OXZPU+UTAlv1AwAAwDMNXwSoefv4+bsb+FrRoDcf AAAAnmnoIsCSG/T7G/s98gEAAOBZhi4CLDXf2C+9oe/NBwAAgGd4e//hp9sfv/8W+7/x9evX2HV5 rZv0+LH+zP343nwAAAB4th9iB3+KN+ytokGMtfIBAADg2Yb8OkDvDfqcv+S3/dOKfAAAAHiGIYsA Pe4LBktu7HvzAQAA4FmGKwL0fAogy63d2PfmAwAAwDMN94cBsxt1AAAAGMFQnwRQAAAAAGBkQxUB AAAAYGRDFQF8CgAAAICRDVUEAAAAgJEpAgAAAMAgFAEAAABgEIoAAAAAMAhFAAAAABiEIgAAAAAM QhEAAAAABqEIAAAAAINQBDjY7cun79oIRjjOEY7xUaNd92ud7fzsvZ695+/VWk8rzmPWnN89f662 5mvFecya89tzPbTiW9tif1vMcRavdCxLnOV4lz4/rubVjmdLP8QOnuvt4+dp+p+LdP5/eKYjr737 6x9gC0e+pnE+rgdo835sPD4JAAAAAINQBKgoVcNK/XA1fkNyDWd7jM62Hl6b6417e18Pe89PnfMP z+HrABVvHz9/d5MUt5+lVngorWerMVluPA9LxsWc++2YOyX597L8XqX5t5i7JZ6/+/6olJf1z1rx ltb4LJ6tfSqsv1e2v3uleLamLK9XNu+sNH9pTCl/WvAcmcXjz/ZVG79Uz3pKSuPimCX7imOmSm6v OHdrPTF/luXOsjG1/KWyeWel+UtjsvxS7lTIX6t1zu/FNfWMXaJ3/pg/y3Jn2Zhafo9s7lncR0/u vWzcXvm1vCmZe8nYJTn34j6mxrgs/xluD/58LI2fteJL9Zz/bO2z1tiWtXNn40r5Mbfn2JeI88+2 mvt+nmxf2X6W5k2F3KmSP1XGRHH9USv+Ut5/+On27t27apumaeh2+/Lpm//u0Vpz1+JZLOtrxbO+ Uv99XxZvtdaYR+OPtK3mLs2zRX/W1xNv5dRiS+K9ua2cNfGsr9bf02pz1GJZW5LfyrmPt3K3aK19 1OK12BY5pf5HWmvOWrwU6+3vaXGOR66PLD/rWxJb23rn7M3vba35a/FSrLe/p7XmiPG4vSS2d39v zt75pZze/lZsaSvNsUV/1tcT722t+R6Nt1ptfCnW29+bs1Vbsq9Wzn28ldvKK/WXWim/1J/F4nZs rfgrNV8HWOAt+UTAmczr6xGPpXZ8tflr4/a05z5rx/uo0vkq9U87r+cZjlj/keezd/7e/JracZ/F FsdbO84t5t9Stp4j1987/975o8nOz5HXw9T58zRbT+/6e/PPpnf9tfw9lfZb6p8K67+a0rFtITs/ VzqfW66ndtz3anm968nya/NT5+sABfEiy/pGv+g88fqc6Xy11jK/0GY5pX6O5XEBXoHXscf5ecCe XF+vQRGgIF7cLvjvvcL5iIWdvYxy/TzrfF7VnudnhOuLfe15fQLPMcr7Der2fD1/xvW15/r5kyLA AvML6pVeWOf1lmTHUct/tjXr71V7PGv77jHPU9rPva322VI77nvZNR+377Viz3bEPmvOdn441tke c9fnsfY8x8/6eTqSMx7vvKYlj+cZ17/UM67nqzvb63nvPs+2/lelCNBwfyFmN0VnVltndhxx+2i1 9WTr7/Ho+KXmfSzZXyt+ZkuO79nOtJ4znh+OdabrwfV5vL3Pf23+LR7/R8dfzRmPd5T3G1Nj/UuO /5Wd8fh71nPG9b8qfxiwIrsQ3xoVSMic5brJruma+3X3jgUAnuss7zeAc1MEqCjd8JT6ocYPZgCo 83Pycd5vAC2KAC+q98W/9QOjFtvD3vtrHe9eSvst9c9irJZf619TwJr3VRtbW88Weudv5ddij8rO VWs99Kmdz+z8n01t/dPO12emtZ4eVzj/Z9M6/7XYEo+Ov5c9vr3rr+Vn859Nbf1T5/HuqbTfUv8s xmr5pf49HbHPmtb5efb1XFvPEVrribFWfrRlfqn/VfmbAAe7v+Dm/9/iBaN2kU+FfdTGZPmPyPZ1 v48sfm+L9bT2sZd5v/EYauuJuXNfll/q39ua/fZc/73z1/JL++jRO3dtPSU95+cZnrWe7FzF/WQ5 c//Wsn09up9sztmjc69RW0+mlLvl2p91vfXKztWj68rmnO0591SYv5Sf5U6NfWRjSvlZ7mzv66Fn /tL6p8KYWv6e5v3GNdXWE3Pnviy/1L/G0vPf2mc2Zm+lNS1ZSzZ2ybiabM6Wped/jdp6sn3U8jNb 5Zf6X9Xb+w8/3f74/bfY/42vX7/GLuDEbskPfbbj/DIy1/9r8/jSw/XCKxnpevZ1AAAAABiEIgC8 mJGqmADAMbzf4JWMdj37mwBwUaXvLY30AgYA7Mv7DV6J6/lP/iYAAAAADMLXAQAAAGAQigAAAAAw CEUAAAAAGIQiAAAAAAxCEYBDlP4y51b2nj969v6i3v238ltx/nT78umfDQAArkARAGClt4+fh/sn ZQAAuDZFAAAAABiEIkBF6SO+pX6W89vTbTmfAADAEj/EDv7l7ePn6fbl0zc3WHH7EaViQmn+Uv5U GNObPxXGlHKnB/NreVNh7qkyLuYv2VccM1Vyp0L+FlrXVSm+5Bhnce2tsTF/luWusef8pfM1y+Jn W8/cH2V5AACw2PsPP93evXtXbdM0Dd1uXz5989+9W7afrK8Wj9uxZfGsb8v+3pxSWzL2kZze/lZs SWuNfzQeWyu/Fq/FtmhbzN+aoxXvzW3lrIlnfbV+TdM0TdM0TVvSfB1ggbfkEwF7mvfXo3dtMb92 fNl6evO3tMX8veuv5Y8mOz9b2nv+Xkesp3a9HbEeAABeh68DFGRvsmNf6U06zg3Hmm+Us+uw1A8A ACNQBCiINwl73TjEwgLfGvX87HW9nc3ZHt+zrQcAALamCLDAfEO29Y1Zbb54M9L6CHCcpzf/jHrO zxpbzMF6ez++2XM2bt9rxZ7tiH0CAPD6FAEa7m8MspuKtdbMU8vP5ovb97L8M3nG+vaen7JnPL49 zraeyfUJAMBO/GHAiuzGYC4EAOd3/3zNns8AADAaRYCK0g1DqZ9/USiB43j+AQBQoghwkN5PFPTk Tivya+vJfoPam9+rNv8WWvPHWCufPs88n/O+atfk3uvpnb+VX4sBAEDN2/sPP93++P232P+Nr1+/ xi42UnszH29aenKnFflTYUwpdzoof1YbNyVjs/yYM8typ0r+VBmz1Jq5szGl3CiOvR93a9w0t+JL xTXc22L+2dL19q4ny8/yZln+LBtXys9y7y09XgAAxqMIAAAAAIPwdQAAAAAYhCIAAAAADEIRAAAA AAahCAAAAACDUAQAAACAQSgCAAAAwCAUAQAAAGAQigAAAAAwCEUAAAAAGIQiAAAAAAxCEQAAAAAG oQhQcfvyKXZNU6UfAAAAzkwRoOLt4+fvbvhvXz5Nbx8/f9MHAAAAV6AI0HBfCFAAAAAA4MoUARaY CwEKAAAAAFzZD7GDP8WvAWR9igIAAABciSJAQbzB90kAAAAArs7XARaYCwDxkwAAAABwJYoADfef AFAIAAAA4MoUASqyrwAoBAAAAHBVb+8//HT74/ffYv83vn79GrsAAACAi/FJAAAAABiEIgAAAAAM QhEAAAAABqEIAAAAAINQBAAAAIBBKAIAAADAIBQBAAAAYBCKAAAAADAIRQAAAAAYhCIAAAAADEIR AAAAAAahCHCwn2+/po1+//j7X2MXF3X78il2HWqL9ayZ4/bl03ctU+pfY8u51np0DY+OP9oW699i jqO1rnsAYJ0fYgfP8/Pt1+mXtx9j9zQ1YvDKbl8+TW8fP8fuy3v7+Lnr2Eq5pX7+1Ht+evOvovd6 O6N57YoAALAtnwQ4SOsm/5e3H30igOFc/aalZb4xa6mdh6VzjKh23kbkWgEAMooAFaU3T6X+R/lK ACMb5Qbu7DdmV30M1lw/a8ZczdmvNwDg+XwdoCL7OGXc3kr2yYD7QkCtKBDHzUpjsvy4/2xsHJfl TEneVMmdCvlb+8ff/zr9x3/+V+xO/45AKS/rn7XiZ1C6Eciu51LuVMh/1NLnVbau2rgt8muy/Nr8 s+y15VHZWqaF65nC+NKYbB+l3KkzP+YuWc9s63M5i2uaGmvZIr8my6/NP9v6emvNlcWztU8L19+S 7e9eKZ6tKcsDgJfz/sNPt3fv3lXbNE1Dt9uXT9/8d4v28+3X9P97c1qxrGX5S/e1pGXjY9+W+5vb P/7+1+/6turP+nriZ27ZdZ31LYmtaUvnK+Xt3V+KZX21/qyVckv9pXjcXhrLWil/7/7enDW5PeNK 8b37S7Gsr9aftZ7cWmvN04r35rZy1sSzvlq/pmmapr1UUwRY1rZ+Y7DkJnhJztJ4bDF/3o79a1uc p3d7TctuxLO+Wn8pHrdja8XP3uL1Hbdja8WXtqXztPJiPG7HFuNxO7YYj9uxteKt3KyvFo/bsbXi rdysrxaP27E9Gu/Ny1ptbC2WxeN2bDEet2OL8bgdWyu+NrfUWnO04rG18reOx+3YWnFN0zRNu3rz dYCC7GOCse/VPjYYvxJwdVf4iP7ISh/RXWOreY6w9Ue1r2CLY33knD0ydtpo/UfZ4nqrzVHqBwDO QxGgIL6Jueobm9p38aM1BYCe+Z9JASAXC1lHqt1IjMQ5WMf1s86R5+xMrz8AMDJFgAXmN01Hvnla o/ab/S1u3veef435D/0tKQBkfxTwldWu36PenF/xeTXb4pxd6di3ON6trbl+evPPYovzv+WxZ+c+ bt9rxZ7tiH0CwFkoAjTcv3HJ3vRs4Ze3H7+7oX70JjrOt7W9519rvvlf8kmAVvyV7HHdbmWv59Xe Hl3v1Y75rGu96vXT69HjO/IcHbnvkrOtBwCe6d9iB/+SvXGZ33BubS4EzO2MN9hX8h//+V/D/ab/ yvZ6Xp1V9trCekuvn1HP+17HfX/e99oHALA9RYCK0huaUv+jfnn78Z9t3mY9hYBrWXojl1k77ghu lvZ5vB65fno9az9bcL0BAN/xTwQe13r+WbxabilW6s9icXtJq42Jsd7tNa30z/T19pdiWd/cX4qd qdX+2asYi9uxteKPtNLcR/WXYllfK1bqz1opN+vP+pbEslbKL/WXYllfrb83p9RKY0v9pVbK37u/ FMv6WrFS/9ZtyX5qObXYkngrJ4tlfUtimqZpmvYKzd8EOND8FYCaJX8noPSJgSXzP2Lv+bcyfyIg /g2A2icFYu7cl+WX+s/mmb8pfcS8zvjby9L6Y95sq/ySWn62j+yYakrzl+bIcqdKfq/SeqbCPkr5 WW6UjV0ybrobuzS/JFvD3J/ZKr+klp/tY4tzsKXa+kvu8+f/Lx1T7/y1/NI+AOBVvL3/8NPtj99/ i/3f+Pr1a+ziyfydgHPLigxwZqWbxFI/AACvwd8EAAAAgEEoAsCDfAqAK8o+Du1TAAAAr8/fBICF St/7VwDgqmIhQAEAAOD1+ZsAAAAAMAhfBwAAAIBBKAIAAADAIBQBAAAAYBCKAAAAADAIRYCD/Xz7 NW2c0z/+/td/NvYT/+m6o22xnjVz3L58+q5lSv1rbDnXWo+u4dHxR9ti/VvMcbTWdQ8ArOOfCDzQ z7dfp1/efozd09SIcZz5nwNUBNjP7UX/rfr5n+Nbemyl3FI/f+o9P735V9F7vZ3RvHZFAADYlk8C HKR1k//L248+EcBwrn7T0jLfmLXUzsPSOUZUO28jcq0AABlFgIrSm6dS/6N8JUSyUvYAACAASURB VICRjXIDd/Ybs6s+BmuunzVjrubs1xsA8Hy+DlCRfZwybm8l+2TAfSGgVhSI42alMVl+3H82No7L cqYkb6rkToX8Xv/4+1//+VH9TBYvfaQ/5q2R7e9eKZ6tKctbo3QjkF3PpdypkP+opc+rbF21cVvk 12T5tfln2WvLo7K1TAvXM4XxpTHZPkq5U2d+zF2yntnW53IW1zQ11rJFfk2WX5t/tvX11pori2dr nxauvyXb371SPFtTlgcAL+f9h59u7969q7ZpmoZuty+fvvnvFu3n26/p//fmtGJZy/KX7mtJy8bH vi33N03T7R9//+t3fT3x3txWzpp41lfr36pl13XWtyS2pi2dr5S3d38plvXV+rNWyi31l+Jxe2ks a6X8vft7c9bk9owrxffuL8Wyvlp/1npya601Tyvem9vKWRPP+mr9mqZpmvZSTRFgWdv6jcGSm+Al OUvjscX8eTv2r21xnt7t3ta6UW7FY2vlbx2P27G14o+2eH3H7dha8aVt6TytvBiP27HFeNyOLcbj dmyteCs366vF43ZsrXgrN+urxeN2bI/Ge/OyVhtbi2XxuB1bjMft2GI8bsfWiq/NLbXWHK14bK38 reNxO7ZWXNM0TdOu3nwdoCD7mGDse7WPDcavBFzJf/znf1U/Yp/1c6zSR3TX2GqeI2z9Ue0r2OJY Hzlnj4ydNlr/Uba43mpzlPoBgPNQBCiIb2Ku+sam9l38aE0BoGf+M8q+g//KYiHrSLUbiZE4B+u4 ftY58pyd6fUHAEamCLDA/KbpyDdPa9R+s7/Fzfve8/fKPg0Qt++1Ys+29z5r1+9Rb86v+LyabXHO rnTsWxzv1tZcP735Z7HF+d/y2LNzH7fvtWLPdsQ+AeAsFAEa7t+4ZG96tvDL24/f3VA/ehMd59va 3vPvrVYAOMqe69njut3KXs+rvT263qsd81nXetXrp9ejx3fkOTpy3yVnWw8APNO/xQ7+JXvjMr/h 3NpcCJjblW+wjzR/GmA66Y0+ub2eV2eVvbaw3tLrZ9Tzvtdx35/3vfYBAGxPEaCi9Iam1P+oX95+ /Gebt2EUS2/kMmvHHcHN0j6P1yPXT69n7WcLrjcA4Dv+icDjWs8/i1fLLcVK/Vksbi9ptTEx1rv9 aFvyT+rVcmqxJfFWThbL+pbElrbaP3sVY3E7tlb8kVaa+6j+Uizra8VK/Vkr5Wb9Wd+SWNZK+aX+ Uizrq/X35pRaaWypv9RK+Xv3l2JZXytW6t+6LdlPLacWWxJv5WSxrG9JTNM0TdNeofmbAAeavwJQ s+TvBJQ+MbBk/kfsPf/e7r86sNR9/vz/pa8c9M5fyy/to8czf1P6iHmd8beXpfXHvNlW+SW1/Gwf 2THVlOYvzZHlTpX8XqX1TIV9lPKz3Cgbu2TcdDd2aX5Jtoa5P7NVfkktP9vHFudgS7X1l9znz/9f Oqbe+Wv5pX0AwKt4e//hp9sfv/8W+7/x9evX2MWT+TsBwJZKN4mlfgAAXoO/CQAAAACDUAQAGFD2 cWifAgAAeH3+JgDAoGIhQAEAAOD1+ZsAAAAAMAhfBwAAAIBBKAIAAADAIBQBAAAAYBCKAAAAADAI RYCD/Xz7NW1HO8Manin+U2lRK85jnN9t3L58+mfjOvZ+vPaeP3r2/qLe/bfyW/G9tfbfikdL8pfk 3OvNP9LWa+2db0n+khyAR/gnAg/08+3X6Ze3H2P3NDViAJn5n/jzBhJew+3Lp0P+6c75nw89Yt97 6j2m3vytvOr5B87DJwEO0rrJ/+Xtx+F+Gw8A/Onom8D5RvRVHH0+e73a+QfORRGgovTiW+p/1Nm+ EgDPcqU3ZrA11/+2XuF8nuWG9VVuRNeczzVjtvYq5x84H18HqMg+jhW3t5J9MuC+EBDjWZEgjp86 8qYk9347jonriWI8245a8Vltvz3iD9b77ewxjvmzLHeWjanlL5XNO8vmj9dtNr40LirlZf2zUrx1 zqM915PNPYu5vbL93cvipfXEvDWy/d0rxbM1ZXlrZHNPlflL+VNhTG/+VBhTyp0ezK/lTYW5p8q4 mL9kX3HMVMmdCvlbKF1/s1J8yTHO4tpbY2P+LMt9VOn47sX19K6/lX/vLXkv1KM0Nq5pKqylNH72 aHyNuPbW+ezNv/fo+QdIvf/w0+3du3fVNk3T0O325dM3/92i/Xz7Nf3/JTml/NhKeaX+npzeeO/6 azm12NrWemxr8VKst7+n1ebIYvd9WTxrpbysP+vbMl7Lyfqzvlo8bsfWirdaa3wr3pvbylkTz/pq /Vu1bP6srxaP27Fl8axvy/7enFJbMvaRnN7+VmxJa41/NB5bK78Wr8XWtDXz9Y7pzV8yrhTboj/r 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 cfU3tS3zG/et1c7bXvt8Fc7PddSu8xG5dgGuQxGgovTDrNT/qJ9vv37TgOOM8gb/1d64j/CYcbw1 rw9rxlzNq72eALwqXweoyD7eFre3kn0y4L4QUCsKxHGz0pgsP+4/GxvHZTlTkjdVcqdCfq9//P2v seufsu/Gx+/MZ+NL46Isb3ZEfiYebxTj2XaUzbc0b43SG8s9no9Ln+fZmmrjtsivyfJr88+y17pn y9Y+LVz/FMaXxmT7KOVOnfkxd8l6loqPTdzXVNjH0rzZEfmZeLxRjGfbUTbf0rwo7m8rvevZIr8m y6/NP3vb+PWkNVcWz9Y+LVx/S7a/e6V4tqYsD+Ap3n/46fbu3btqm6Zp6Hb78umb/27Rfr79mv5/ b04rlrUsf+m+lrRsfOzbcn/TNN3+8fe/ftdXi933ZfGslfLO1p/F4nZsMf6M87NV2/J5OXXMV8rb u78Uy/pq/VlbmtvK643H7aWxrJXy9+7vyemN32/HWKmV8s7Wn8Xidmwx/ozzszReaq1xpfje/aVY 1lfrz1pPbq215mnFe3NbOWviWV+tX9M0bfemCLCsbf1CveQmeEnO0nhsMX/ejv1rW5ynd7u3tW40 Y3zejv2l1sqL8bgdW4zH7dhiPG7HFuNxO7YY3/v8bN22en4unaeVF+NxO7YYj9uxxXjcjq0V781t 5fTG43ZsrXgrN+urxeN2bHvGs9jcl8Wy1sqL8bgdW4zH7dhiPG7HFuNxO7YY3/v8tPqXtNrYWiyL x+3YYjxuxxbjcTu2Vnxtbqm15mjFY2vlbx2P27G14pqmaXs0XwcoyD62Ffte7WNc8SsBry5+5P2Z jtpvjyPPzxFKH+FcY6t5jrD1R3lf0RbnJv48mZXmPvIxOWq/PfY+P4/M/8jY6SLnv2SL15PaHKV+ AOoUAQriD5Wr/qCpfRc/WlMA6Jn/bEa6wV3jjOendOO0hdobzZE4B8/Re45780ez9/nx+rDOkeds z58XAFenCLDA/EPsyB9ma9R+s7/Fzfve848m+6N6V7L3+mvPv63e7F3xeT7b4hxc9diX2OL88C9X P59r1r/m9aE3/yzWnJ9oy2PPzn3cvteKPdsR+wSoUQRouP9Bkv0Q2sIvbz9+d0P96E10nG9re88/ ojP+5r3Hnuvf43lXstfzfG+PrveKx9zjlY/tCFc/n2vXf9XXh16PHt+R5+jIfZecbT0A/xY7+Jfs B8n8BmBrcyFgbm6w4Th7Pc/PKnutA3JLXx9GfV7tddz3532vfQCMQhGgSIXGfQAAIABJREFUovQD ptT/qF/efvxnm7d5TXt/dJ7HLX2jn1k77gjeTPe70uO7hdGOd4lHXh96PWs/W/B6AnAR/onA41rP P4tXyy3FSv1ZLG4vabUxMda73dtq/wRdFsv6Wq00Zu/+Uizrq8WyvlIsbi9ptTG12NJW+2eUarFH W2nuo/pLsayvFSv1t9qScaWcrD/rWxLLWim/1F+KZX21/p6cVjy23vzamL37S7GsrxbL+kqxuL2k 1cbUYrGVckv9pVbK37u/FMv6WrFS/9ZtyX5qObXYkngrJ4tlfUtimqZpezV/E+BA81cAapb8nYDS JwaWzP+IvefvVfrt+lbfVf+P//yvdB+l+bfKnwpjavmZ3vxetfmz9fd65m/e7s37jb/dKq0n5s22 yi+p5Wf7yI5pS6X1lPaZ5U6V/F6l9UyFfZTys9woG7tk3JayNcz9ma3yp8KYWn6mN79Xbf5s/SXz PD1jMqX1lObdKr+klp/tY4tzsKXa+kvu8+f/Lx1T7/y1/NI+APb09v7DT7c/fv8t9n/j69evsYsn 83cC6kb7N+1hdKWbjlI/AAB/8jcBAAAAYBCKAABcTvbxWp8CAABo8zcBALikWAhQAAAAaPM3AQAA AGAQvg4AAAAAg1AEAAAAgEEoAgAAAMAgFAEAAABgEIoAB/v59mvajnaGNTzb7cunb9oWtp7vKGvW v8f5nLXma8WPstf54Fxaj28rfoQzrulZrn7sZ1v/s9fz6P4eHQ9wRf6JwAP9fPt1+uXtx9g9TY0Y 27vt9O+Lz3OO9iZjr/N5daNeDwAAnIdPAhykdZP/y9uPQ/42HgAAgP34JEBF6beZpf5HuennrPa4 3gF4nNdnAHopAlS8ffz83Q1/3N5K9smA+6JAjGcFgzh+6sibktz77TgmrieK8Ww7asVntf32iB/J vt/OHuOYP8ty1yjNP1X2kY0p5a7ROif34lp6xi7RO3/Mn2W5s2xMLX9vvetZmp/lzbL8tbL9ZPPf Gq+rpfja+ZeO6xHnfKXrM56/+/6olJf1z7J4Nvcs5q4R5289XlMyZirkxuNpjcvis2z+2ZI1Tyvn L41Zmr9kbXHMVMmdCvlbKc3du56t8rPcqZAfr7coi5fmnwr7mApjSrnABbz/8NPt3bt31TZN09Dt 9uXTN//dov18+zX9/yU5pfzYSnml/p6c3njv+ms5tdja9shju2RsK2dNPOur9T/Seufsze9trflr 8VKst/+RtmTOUs4W/VnfklhPK82T9Wd9rXjWV+q/78viW7fWPmrxUqy3v7eV5tmiP+urxeN2bK14 b1syXykn67/vy+KxxZxHx8dWi9diWVuS/0hOb38rtqTVxpdie/eXWpaf9dXicTu2LJ711fo1TbtA UwRY1rZ+oVtyU5zllHJja+U9O/7s9fe2Rx/f1vhH47G18lvx3tY7X29+b2vN3xuP27G14r2tNV9v PG7HFuNxO7ZWvNVa42M8bscW43E7thift2P/Xq21n9543I6tFV/Ssjmyvlp/KR63Y4vxuL13a+2v Nz5vx/5Si3mt7dj2jsfWyt86Hrdja8VbrTU+xuN2bDEet2NrxWOL+XE7thiP263Wym/FNU07Z/N1 gILsY0+x79kfg4ofqb+aq68f2Mdb8tWrWam/11bzjML5eozzx1KuE+AIigAF8UX5DD/Qr34DffX1 T0khCLiGo1+/r+QMP++u7hXOn593x3L+gT0pAiwwvyG62huj2h/Xo1/t8X/0h/V8fZVk+63l08/5 PFb2Ghu37432eD3jeOd9lM75vT3Xs+b1cG+19byivZ97W8xxpL3Xv+f5X/P8quUD16QI0HD/Qpy9 Sd3CL28/fvdR+S1u4F/hN+9nscfjHtXmz/Yft3mM83ktoz1ezzjeeR/Z603Uij+qNv+S9W3t2fs7 0jPO797z723P9R99/rP9x23g+v4tdvAvpRfCPSqicyFgbm7ggdHcv75mr788x14/5wCAc1AEqCi9 AS31P+qXtx//2eZtAHg2hQB4Ds8z4AiKAAeZf/O/l9b8tdgSrflfzd5viHvnbq2nFuN7ZzuftfVk vyHvza/pzc88sp557JKcklrsio463tJ+S/2zGKvlZ/1Z35Fq659OuN5HtY73Ua35Y6yVv6db8lrU Wk+M1fLXzB/15vfkTgvmr8WA8/I3AQ605Eb6kU8D1OZvzZuNjWOynFfW+kGYuc+f/z/+wJ/7anP3 jsny11i6/mfLjv3RdWVzzh6de9ZzPkvr2So/y50q+b1619OrNP+04T7Wytb26JqyOWePzl0z7zfu o3c9pfysP+u7l83/iGx/cR9ZzizmPkvP60mv2vG2ZGPjurKcWcyd+0r5WyjNna1laqwnG1PKz3Kn Sn5JT34rN1tTbUyWD5zf2/sPP93++P232P+Nr1+/xi4ALuqW3NTBUVyPAPBcvg4AAAAAg1AEAAAO 4VMAAPB8/iYAALAr3ycGgPPwNwEAAABgEL4OAAAAAINQBAAAAIBBKAIAAADAIBQBAAAAYBCKAFD5 y9WzVpxjeXweM/r52+P4b18+fdO2sPV8R9rj/LAdjwnAa/NPBALAhm5fPu3yT9/Nc179Bm2v8wMA LOOTAAAAADAIRYCK0m9bSv0AAABwZr4OUPH28fN3H1uM21xXLObcb2ePccyfZbmzbEwtf6ls3lk2 f7xus/GlcVGWNzsiPxOPN4rxbDvK5lua1+sZ64m599txTFxPFOPZdtSKz1r7jXrztxLnrp3PKcmf ZblrlOafKvvIxpRye8W5W+dnSsZMhdze622NbM5Zae5sTJab5c2y/Fk2rpa/lXi+7/ujUl7WP2vF AdjA+w8/3d69e1dt0zQN3W5fPn3zX+31WuuxrcVLsd7+nlabI4vd92XxrJXyztafxeJ2bDH+jPPT 0569nlZOb7x3/bWcUmyr/lZsTXtkviVjWzlr4llfrf+RtmTOUk7Wf9+XxR9trTmzeNZX6o99S46n t7+3lebZoj/r64lrmqZpGzRFgGXND6XXbq3Htzcet2NrxVutNT7G5+3YX2qtvBiP27HFeNyOLcbj dmwxHrdji/G9z09ve/Z6to7vvf64HVuMx+3YWvHe9uh8rfGPxmNr5bfiva01X2983o79W7XeeVv5 Mf7odmyt+JKWzZH11fpL8bgdWyuuaZqmPd58HaAg+1hb7PNxNa7kyI9YHrXfHkeen8zZ1tPr6uvn Wlxv+3J+AV6LIkBB/GHnByBX5/qtO9v5Odt6el19/c8QC8us53rbj/c/AK9HEWCB+QegH4T08Aa/ 7urn52zrP9t69nb14639PHn02OafVyXZfmv5o1tzPvdWW89W5n0sOb5nrAeA7SgCNNy/UVMIoIfr pO7q5+ds6z/bevZ25eN9xs+R2vzZ/uM236qdn+x87u0Z+5v3seT4WnEAzuXfYgf/kv3ge2v8RgAA 4FV43wPwehQBKmIBYFbqB3LeQAJc15kKAWdZB8CVKQLADlpvmGqxR2WfYOlVW382/5b5U3J+WvlR b36v1vy12B72Xk9r/mdrrSfGWvnPtvd6euduracW20NtPbfk9WRvpbWU7L3+2vzTivUuVdpvqX8W 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 WFrHfpYuBPRc7L0qt84Dm/BPBFZypf4sF9tLcz01vfWlmlJ/R9T+aZ9Sbu/+LWuyXNZXysV2jFa+ N2r/xFyrJuvP+mrRW9/aJstlfaX+rK+Wj+0luVJ/KZf1zf2l3H30/LNGS86vUk3Wn/UtyWVRqi/1 l3JZX62/p6aVj9FbX9tm7/5SLuur5bK+Ui62l0Rtm1ouxpLXzZKarmiNl+WzvlIutpfkSv1ZLrY3 jtrzV8tt/jz9N2r/BF2Wy/paUdpm7/5SLuur5bK+Ui62l0Rtm1puWnFe9NYL8aox1t8EuN1izy9K q8qtP+4TlWpL409hm/n/t6ovzb9U36m0al/6bl9ppX+r+inMaf7/Un1p/KmwTa3+Ckq/2d7qu+3Z 2PfifkrzKSnVx3G3VvobAaX5TIU5lepL/dGa7zrXlM7n7NyfVrzee5XmMxX2UarPaqNs2yXbbSmb w9yf2ap+KmxTq8/01veqjZ/Nv2Tr180ipffeWTaX1jZRqTYbe2qMX9rmAPPzHp/jvZ/D0m/Xt/qu +h//9Ld0H6Xxt6qfCtvU6jO99b1q42fzn+19XsAre/viy69uP/34Q+z/xMePH2PX9dwO+EM8AAtk iwxXl32Qr/UDC/k8s6kz/5v2bMuiAfzG3wQAAABemgUA+I1FAIADveJdAFPhdm53AQAAHG+svwkA cJDS9/5fcQFgFhcCLAAAABxvnL8JAAAAAIPzdQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUA AAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAA AAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAA ABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAA GIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAY hEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiE RQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGIRF 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 /n3xeczRPgTsdTyvbtTzASbnPwCchjsBDtK6yP/H25+H/G08AAAA+3EnQEXpt5ml/ke56Oes9jjf ATg/P/8BXo9FgIq3r7/97II/treS3RlwvygQ89mCQdx+6qibktr7dtwmzieK+awdtfKz2n57xFtS 79vZcxzrZ1ntGqXxp8o+sm1KtWu0jsm9OJeebZfoHT/Wz7LaWbZNrX5vvfNZWp/VzbL6tbL9ZOPf Gj9XS/m14y/drkcc80rnZzw+UZbP5jIdOJ+5P8rqpkLtrLRNjzh+63yYkm2mQm18/K3tsvwsG3+2 ZM7TyvFL2yytXzK3uM1UqZ0K9Vspjd07n63qs9qpUB/PtyjLl8afCvuYCtuUaoENfPHlV7d3795V Y5qmoeP24f0n/90i/n77d/r/S2pK9TFKdaX+nprefO/8azW13Np45Lldsm2rZk0+66v1PxK9Y/bW 90Zr/Fq+lOvtfySWjFmq2aI/61uS64nSOFl/1tfKZ32l/vu+LL91tPZRy5dyvf090Rqjle+tbdWs yWd9pf6sryffG0vGK9Vk/fd9WT5GrHl0+xi1fC2XxZL6R2p6+1u5JVHbvpTbu78UWX3WV8vHdows n/XV+oUQG4RFgGWx9Q+iJRfFWU2pNkar7tn5Z8+/Nx59flvbP5qP0apv5Xujd7ze+t5ojd+bj+0Y rXxvtMbrzcd2jJiP7RitfCta28d8bMeI+diOEfNzO/bvFa399OZjO0Yr34rW9q18jFb91vnYjhHz sb13tPbXm5/bsb8Usa7VjrF3Pkarfut8bMdo5VvR2j7mYztGzMd2jFY+RqyP7RgxH9utaNW38kKI deHrAAXZbUmx79m3KcVb6q/m6vMH9vGWfPVqVurvtdU4r+gZx59teV5YynkCZCwCFMQfmmd4w736 BfTV5z8lC0HANRz98/sV+Xl4nFc4n50/x3L8YWwWARaYFwDOsBDQo/bH9ehXe/4ffTOdz6+SbL+1 evo5nsfKfsbG9r3Rnq+9H++a41/LPVvPPtf8vN1bbT6vaO/zZ4sxjrT3/Pc8/mteX7V6YB8WARru f1BmH5K28I+3P392q/wWF/Cv8Jv3s9jjeY9q42f7j20e43hey2jP15keb/bz6Gi986nVH/H4nr2/ Iz3j+O49/t72nP/Rxz/bf2wD+/td7OA3pR9Ue6xYzgsBc7iAB0Zz//M1+/nLvhx/ABiDOwEqSh+A Sv2Pihf+sQ0AAEtZ0AMy7gQ4yPyb/720xq/llmiN/2r2ugNk1jt2az61HJ872/GszSf7QNdbX9Nb n3lkPvO2S2pKarkreubj3eL4P6p3/FZ9zMX20Xrnf3Wtx/uo1vgx16rfU/Zaa80n5mr1a8aPeut7 aqcF49dywHruBDjQkgvpR+4GqI3fGjfbNm6T1byy1htV5r5+/v/4hjz31cbu3SarX2Pp/J8te+yP zisbc/bo2LOe41maz1b1We1Uqe/VO59epfGnDfexVja3R+eUjTl7dOw1avMp2eL8L6nVx33Uaqek /lHZ/uI+sppZrH2WnuerV+3xtmTbxnllNbNYO/eV6rdQGjuby9SYT7ZNqT6rnSr1JT31rdpsTrVt snrgcW9ffPnV7acff4j9n/j48WPsAuCibslvhwAAGIOvAwAAAMAgLAIAAADAICwCAAAAwCAsAgAM xt8DAAAYl0UAAAAAGIRFAAAAABiERQAAAAAYhEUAAAAAGMTvYweM6PbhffWPpbXyHMvz85jRj98e j//24f0n7S3Gvx9zi/GOtMfx4Vpe6XwGuBqLAACwoT0WFaa7C6V4AX01ex0fruVVzmeAK/J1AAAA ABiERYCK0up0qR8AAADOzNcBKt6+/vaz2xZjm+uKizmt7yfG+llWO8u2qdUvlY07y8aP5222fWm7 KKubHVGfiY83ivmsHWXjLa3r9Yz5xNr7dtwmzieK+awdtfKz1n6j3vqtxLFrx3NK6mdZ7Rql8afK PrJtSrW94tit4zMl20yF2t7zbY1szFlp7GybrDarm2X1s2y7Wv1S8XhGWT6by3TgfOb+KKsDGNIX X351e/fuXTWmaRo6bh/ef/Jf8XrRem5r+VKut78namNkufu+LJ9Fqe5s/VkutmPE/DOOT088ez6t mt587/xrNaXcVv2t3Jp4ZLwl27Zq1uSzvlr/I7FkzFJN1n/fl+UfjdaYWT7rK/XHviWPp7e/J1pj tPK9ta2aNfmsr9YvhBDDhUWAZeGN47Wj9fz25mM7Rivfitb2MT+3Y38pWnUxH9sxYj62Y8R8bMeI +diOEfN7H5/eePZ8ts7vPf/YjhHzsR2jle+NR8drbf9oPkarvpXvjdZ4vfm5Hfu3it5xW/Ux/2g7 Rivfitb2rXyMVv3W+diO0coLIcQI4esABdltZLHPbWVcSemWyWc4ar89jjw+mbPNp9fV58+1ON+2 85Z8FXJW6gfgWiwCFMQ3OW98XJ3zt+5sx+ds8+l19fk/Q1xYZj3n2/GczwDXYRFggXkBwEIAPXwg qrv68Tnb/M82n71d/fHW3k8efWzz+1VJtt9a/ejWHM+91eazhewzT2zfa+We7Yh9AlyJRYCG+ze2 7E0RSpwndVc/Pmeb/9nms7crP95nvI/Uxs/2H9t8qnZ8suO5t2fvr+aIx99ytvkAnM3vYge/yd7Y 3hq/EQAAuLr7zzvZ5yEArssiQEXpDa/UD+QsnAFwBd6vgBFYBIAdtO4YqeUetcVvbGrzz8bfsn5K jk+rPuqt79Uav5bbw97zaY3/bK35xFyr/tn2nk/v2K351HJ7qM3nlvw82VtpLiV7z782/rRivjXz vmpzbs3nUb3jt+prOYBR+JsAUPjQUPvQs0Q25uzRsafKB5ktxp4q8y+Nv1X9VNimVp/pre9VGz+b /94emU+2bdwmqzlSbT5x7nNfqf4Ia+ZzXz///5rH2rtNVr+30nzONJdZNqfSNlntGqXxpw330aM2 n5Kl5/O0YvxafWkfACN5++LLr24//fhD7P/Ex48fYxdwoFvjNzMAAAAZXwcAAACAQVgEAAAAgEFY BAAAAIBBWASAC/L3AAAAgDUsAgAAAMAgLAIAAADAICwCAAAAwCAsAgAAAMAgLAIAAADAICwCPMHt w/vYBQAAAE9nEQAAAAAGYRGgovQb/FJ/5vbhvX/THQAAgFOwCFDx9vW3n13wu6gHAADgqiwCNNwv BPQuAPTWAwAAwJ4sAiwwLwS4oAcAAODKfh87+EX8GkDWV1sUsGgAAADA2VgEKIgX8C7qAQAAuDpf B1hgXgCIdwKUWDAAAADgjCwCNNxf0PcsBAAAAMDZWASoyH6j31oIyLYBAACAM7AIUFG6mC/1AwAA wJlZBNiQuwAAAAA4M4sAAAAAMAiLABtyFwAAAABnZhEAAAAABmERAAAAAAZhEQAAAAAGYREAAAAA BmERAAAAAAZhEQAAAAAGYREAAAAABmERAAAAAAbx+9jBSrfbNL29xd622+23/+/Zfu3+NvLdf76b /vo/f43dh/vuP9/9+v9nnN+e/vmv//uk/b9/+cMn7T3FfWeePZ+e/bXqW/ml7o/TFuNt7Xa7TW/J z5X711VJ9nrLtivVZf1rbDnWWq05ZMdlVtvuVbWO19mVXje3+/f3/8rq2FbrfMrypeeQ7f38/TfT H//0t9h9Ss4LXplFgKPNP1ySDwv0m9/Yax+yX9FWF6mPOHr/VzAfoyWLJs9W+7ATPzBnH6KjUk2p fzSlY+D4XEvpddPbz7He3t48N3zGecEr83UAgMFt/SGndiH71//563CLdD0cn+sovW5K/dPdRQXn 47kh47zgVVkEuKrCBwyAkZUWH2BLtQt9rssFHzCKcb4OUPuhnr2Rt75zn+VL+4h1j+j9GwLZnJZs t0Dpt1W1D+HZNlvW9+oZP6udCvWl2qlQv0a8pXzJ983jNlOhNn69YOl2PbIxp8a42Tal+qx2KtT/ 71/+8NljntX6M1ltr9I+Z6V8Nqes7t5ZLmZKr5mlr5f77UvbZPso1U6d9bF2yXyWindWxH1NhX0s rZsdUZ+JjzeK+awdZeMtrYtO8ZrJ3ttncW7Z55V7Md8z9r1su6x+yf6y7Rb663/vpsmey1L/va1v Af/5+29i16+y78bH78xn25e2i7K62RH1mfh4o5jP2lE23tK6TM85sbQODvfFl1/d3r17V41pmq4f vyzt5pHlsr5aPraX5npqeutLNaX+jvjuP9991tfK7d2/VU2pvxRZfda3JLc2/vmv//usL0apJuu/ 78vyMZbULI3SWD39WV8r19tfiiX1rZo1+ayv1j/HbcXPg9Y53JuP7aW5LEr1e/f31PTm79sxV4pS 3dn6s1xsx4j5ZxyfOda8XrbcfpoWvIfHfGzHiPnYXpLr6b/vy/IbROl5LPVnsclzNU23n7//5rO+ Wu6+L8tnUao7W3+Wi+0YMf+M45PF0vNhaZ0Qh4dFgEI+tmPEfGzHeDQfo1X/aL4RrTfSmI/tGDEf 2zGOzseI9bEdo5XvjdaFXm9+bsf+UiytWxpxvNiOEfOxHSPLZ321/lq0ttk6H9sxavk1H1ha529v PrZjtPKt2qyvlo/tGHvms9zcl+WyaNXFfGzHiPnYjhHzsR0j5mM7RszvfXzmWPNa2XL7X6N3nFZ9 zMd2jJiP7RgxP7dj/4ZReg5L/aXY4jlrXWjG/NyO/aVo1cV8bMeI+diOEfOxHSPmYztGzO99fEqx 9FxYWifE0THO1wH4lFuVaCjdcl6S3Yo+LbgdfQtb7CP7SkBsw7TwlvGW7Fb0qTL2ktuY93LUfnvs fXxuD97i++j2L+fW+IrCg7KvBMT2Ej23gW8p3vL+TEftt8eRx6fl2ecKrGURADqUPri/ot6L3976 qbJwcBVXnz/H6b0Y6a0fzd7H55GLwbXbvbSLHI+jnruzXuCeheMDj7MIwLB6L+hrv0XoHYv6b9mv cHF9tvkfsc8r8Rrd1tWP55r5P7IQsKm3t19+k15yxPxq87moUzzXJ5H9Ub0rufr8YQ8WARhW6YI+ U1sAoF/tAvpI918JqM2xljvK2eZzNl6/27r68Vw7/zULAT21i9XG3PlW+9Sz97fA/VcCet/De5/j V3f137xfff6wh9/FDgDGMV/UAMt4zbw2CwBEPeeEnw1chUWAUfkhxQtxKzzPtOZW8isb7fEu0bMQ sLSO4/Vc7L0qt87DIPwTgZVcqT/LxfbSXE9Nb32pptTfEbV/ZqeU27t/y5osl/WVcrEdo5Xvjdo/ Adeqyfqzvlr01re2yXJZX6k/69sy36qp5ZbkWzVZLutbkpuj5581WnL+lmqy/qxvSS6LUn2pv5TL +mr9PTWtfIze+to2e/eXcllfLZf1lXKxvSRq29RyMZa8bpbUdEVrvCyf9ZVysb0kV+rPcrG9cyx9 Pjd/nv4btX+CLstlfa0obbN3fymX9dVyWV8pF9tLorZNLTetOC9664U4Ksb6mwC3W+z5RWnVt/XH d6JSbWn8KWwz//9W9aX5l+o7lX47VPre3fy9vGir+inMaf7/Un1p/KmwTa3+CubvuUdbfZc8G/te 3E9pPiWl+jjus5TmU3NfP/9/af6949fqS/u4t+a7zjWl10v22ppW/DzpVZrPVNhHqT6rjbJtl2y3 pWwOc39mq/qpsE2tPtNb36s2fjb/kq1fN4uU3ttn2Vxa20Sl2mzsqTF+aZsT2fs5LP12favvqv/x T39L91Eaf6v6qbBNrT7TW9+rNn42/9ne5wUc6e2LL7+6/fTjD7H/Ex8/foxd13M74A/lALCL7wp/ 6KvUDyzk89Kmzvxv2rMtiwZcib8JAAAA8AALAFyJRQAALie7ndtdAAAAbWP9TQAAXkZcCLAAAADQ Ns7fBAAAAIDB+ToAAAAADMIiAAAAAAzCIgAAAAAMwiIAAAAADMIiAAAAAAzCIgAAAAAMwiIAAAAA DMIiAAAAAAzCIgAAAAAMwiIAAAAADMIiAAAAAAzCIgAAAAAMwiIAAAAADMIiAAAAAAzCIgAAAAAM wiIAAAAADMIiAAAAAAzCIgAAAAAMwiIAAAAADMIiAAAAAAzCIgAAAAAMwiIAAAAADMIiAAAAAAzC IgAAAAAMwiIAAAAADMIiAAAAAAzCIgAAAAAMwiIAAAAADMIiAAAAAAzCIgAAAAAMwiIAAAAADMIi AAAAAAzCIgAAAAAMwiIAAAAADMIiAAAAAAzi/wE66oG+3GD7fwAAAABJRU5ErkJggg== --nextPart2755839.fDdHjke4Dd Content-Disposition: attachment; filename="c-ts-mode.png" Content-Transfer-Encoding: base64 Content-Type: image/png; name="c-ts-mode.png" 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 VqN/eq9yfwC4xe6OagAAwCMIzvAk7KbWuT8A3GqXZ5zhyNIzrBOh8N/cHwB6efozzgAAsAZHNQAA IEBwBgCAAMEZAAACBGcAAAjY7atqlN55z5ud0KL3S5T1Xh+u+X4D6GuXwbn2boC1MQAAWGp3RzXm gvGH03fF3WgAAFiqy45z6Z8LS/23EpRZqsf3IwDwnLoE59MPP78IyenjteR2oK+DdC1Up/MmpTm5 +vT5c3PTebmaIVM3VGqHQv1SX798TLuG12/epV2LtLyTW6l2KNQvdf08tXWXXE86J/Jc6ZyhUjsU 6ie5ebn6Ul36c5vKzWuRW3MorLv0enJ1k3S93PxJOh5dN5Wbl6vP1U1y9UNmTuT7DYCFzufzWGrD MNzUxs9v//G/a7T342/Zj1tr5sZyLVcffa5Iy81P+9Z8vql9/fLxRV+tf62W+77I9UXGlra5NWvj tbE1alr7S2O5vlL/dV9uvGfLPd+S66nVpWPp47Sl47XH6diS/lxfZKylRtM0TVveup5xPmV2nrek 9Tx0rT7deV6itn5Oa33O1y8fizvLr9+8y+5Er2X6/ohqre9tjeup/Xzk1q/V59Tqc+tPavN6WeN6 onU95K6/dj25+prWegDWt/pRjdz/sad9pV8ke7VGaN6qUqjmedXC3iNs7XoAOK7Vg3P6C26vv/Ra dnKXhOaW9Z9B+h9PbNc9fl5bvh/ucT0AELF6cL42hea9hefaDvIagbf3+ltT+/q3BKhn1fse9F6/ 1dG+H57xcwI4qm7B+fqXY6/wPJ3xnXtVixbpemvrvf7W9Pi6P5ve96f3+i2O+P1wtM8X4Jl1+ePA 3C/HKTyvbQrPUztSKAUA4H66BOc0NE9K/bf6cPru7zY9Zh09X1UDeKwemxkAz6xLcO5pjZdgm+R2 qNdcP6f3+q1qLzlXe6m6qF7/0vAs5u5POlarz/XX6ofCnJ7mrudWtfVz/bX6NcytXxsDYHu6nXHu KRI+I+ee09A8iax/i97rtyqF51tD82QuPDzC9fVMH/f4F5Hc554+T65mktZOfbn61v6hsH5vtetZ Q2n91v611NZf+/7nnmvt5wA4stNf7xCYdblc0q7dye0qw7MaM39fwH+4PwDcYndHNQAA4BEEZ3gS dlPr3B8AbrXLM85wZOkZ1olQ+G/uDwC9PP0ZZwAAWIOjGgAAECA4AwBAgOAMAAABgjMAAATs9lU1 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 nQOv5YJEz7DXc+2hsH5tTkt9rnZYUN+qtP5aHrV+a/9aauuv9TWb5J5r7ecAIO701xudZF0ul7Tr 4XK7ysAxjSvsygNA1GaPagAAwJYIzsAu2W0G4N52ecYZOI70jO9EaAbg3nZ3xhkAAB7BUQ0AAAgQ nAEAIEBwBgCAAMEZAAACBGduUnrFg8ncOI/l67Ntvj4A27KJ4Lylt6sGAICcTQRnAADYuk0E5w+n 7+w6AwCwabt758BawP5w+i7tGobKnFz9+/G3f/Tn5qbzcjVDpm6o1A6F+qW+fvmYdg2v37xLuxZJ z11eP869m1taP8nVTnJzavUtcmtPSs+Rm1OqHTrW5+omufpJbd6tSmvnrmdM3iY7N7c0ryRdLzd/ ko5H103l5uXqc3WTXP2QmXP9uDQHgDs5n89jqQ3DcNf2fvztRV/aajW1sVzL1V/35cZbWm5+2rfm 803t65ePL/pq/be08fPbF33R8dJYa39Lm1sjN57re1R/rm9urNQ/N3Zry6193Zcbz7VaXTqWPk5b Ol57nI4t6c/1RcZaajRN07Q7tjQs7zk4R8bTltZPj9P+pS1dp/Vxa5sLx3PjrW3uF3vrePo4bXPj c611/lx9Op4+Tls6nj5OWzqePk5bOp4+Ttvc+K0tXX96nPaX2lxdOp4+Tls6fuvjtKXj6eO03Tqu aZqm3bdt4ozzZCtnndPjGs9kreMaLOOf2l8elwCAvdjdGeelWgL5ktDcsj48m/Rcbo3QDMBebS44 T7vOS8JrSW29NQJv7/WPpiWEtTr98HN1/Vyoq9VT30F+xnv3jJ8TADGbC85rq4XaNfRe/4hKIWwt tfVzITB9zH/k7tezO9rnC8B/bOqM82QrZ50BAGCyyeBMP7nXd+Z+/DM/Pfn+Auhrs8F5ya5z7tjE knVa9F6/1es374rh+OuXj5t/VY25M8i1sYjW+a3XU6vPHWtorW9VW38Nj1w/11+rX8Pc+rUxAPZv l2ecS0E1Dc2T3uG29/qtSuG5R2jOBYmeYa/n2kNh/dqclvpc7bCgvlVp/bU8av3W/rXU1l/razbJ PdfazwFA3OmvNzrJulwuadfD5XaVgWMaV9iVB4CozR7VAACALRGcgV2y2wzAve3yjDNwHOkZ34nQ DMC97e6MMwAAPIKjGgAAECA4AwBAgOAMAAABgjMAAAQIzgAAEHDX4Fx6WSkAANi6uwZnAADYq1Bw Lu0Ul/pzvMsXAAB7FgrOpx9+fhGSBWEAAI4kFJyHJDy3hubWegAA2JpwcB6uwrMQDADA0ZzO5/OY dk4ul8uLIxo5tSAtaAMA8AxepR2pNPQKwgAAHFHTUY0pNEd2oQchGwCAJxIOztchuCU8AwDAMwgF 59zO8Vx4zs0BAIC9CgXnUgAu9QMAwLMJBedWdpsBAHg2XYIzAAA8m9nXcQYAAOw4AwBAiOAMAAAB gjMAAAQIzgAAECA4AwBAgOAMAAABgjMAAAQIzgAAELC54Pzpz09pV5Nb56d++fWPtOuhotfzy69/ vGgtxrH4vjj/sPb9TvVef2t6f75rr//1y8e0a1PW/nxTvddvEf2ZBWC5V2kH+/fLr38MP33/Tdpd 7E+N4zicTqe0G9iw0+nkZxegs83tOHObWjj+6ftvZnee/eKF/ZrCMwB9bC44//ivH9MuNszXa13u 57rcTwDWNHtU49Ofn6q/fErjubN/ubrJdX2tbpJbfy3pruz149JubjpnaKyd5Oak9ZHrWaJltzn6 9ap9nUrz0jnR54oqnct9/eZd2nU30c8xvTfXSvPSOdHninI/Y8/VIndPo/fTkQ2Ajs7n81hqwzCM n/78NA7DUGy58VxfrX/NmtrYkvbLr3+86EtbqSbXn+tbc3yu1eaP//433qY2d79r47Wxlpq12tcv H1/03bvNfb618dpYS01Lq92z2ti92tznWxuvjbXUtLbSfSv159qSn2VN0zRtvq1+VKO0Az38tRuT 7ta0qq3/CLeeKU6V1lpD7VofYY3vhzW9fvMuu9O3F+7nuh5xP79++VjcWd77/QR4BrPBufbLY2sh lrKthWagXSlUA3Afs2ec2T+h+SU7dwBAq1Bwnnadr3eX08dH1nIcY+74xtoBV2h+qfbP4QI1AFAS Cs7UtQbTWv2aQXfNtZ5FLTQDANTMnnGeXJ91ttu8fUtCszdPmOf+rMv9XJ+XogPoJxyc2Y8loRnY PkeJAB6rKTjnzjqner8KR239R5g7s5yOpY/XdmtofvZdZy/pdT+OxbSrfX9G7qfdZoC+upxxLoXb Wmi+rp8+LtWX1u8hF4zTYJqrmbTUDpn6VG5+OicdT6X1qcg7j7V8vW6R+1rf+jy1cPIoe76fpXs5 F/J62vP9LH1/zt3PuZ9ZAG53+usdArMul0vaBYclmKzL/QRgb5qOasCRCXnrcj8B2BvBGQAAAgRn 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 --nextPart2755839.fDdHjke4Dd-- From unknown Mon Aug 18 08:27:04 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Vincenzo Pupillo Subject: bug#71874: closed (Re: bug#71874: 30.0.60; [PATCH] Fontify doxygen comments in c-ts-mode,c++-ts-mode and java-ts-mode) Message-ID: References: <86ttgtk312.fsf@gnu.org> <9826503.eNJFYEL58v@3-191.divsi.unimi.it> X-Gnu-PR-Message: they-closed 71874 X-Gnu-PR-Package: emacs X-Gnu-PR-Keywords: patch Reply-To: 71874@debbugs.gnu.org Date: Sat, 13 Jul 2024 10:20:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1720866002-6000-1" This is a multi-part message in MIME format... ------------=_1720866002-6000-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #71874: 30.0.60; [PATCH] Fontify doxygen comments in c-ts-mode,c++-ts-mode = and java-ts-mode which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 71874@debbugs.gnu.org. --=20 71874: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D71874 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1720866002-6000-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 71874-done) by debbugs.gnu.org; 13 Jul 2024 10:19:33 +0000 Received: from localhost ([127.0.0.1]:55154 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sSZqm-0001Xi-VQ for submit@debbugs.gnu.org; Sat, 13 Jul 2024 06:19:33 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47032) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sSZqk-0001XO-4h for 71874-done@debbugs.gnu.org; Sat, 13 Jul 2024 06:19:31 -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 1sSZqd-0006De-Om; Sat, 13 Jul 2024 06:19:23 -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=KgEct91skbvD+JHOE+cC7Vz5xGfUKYLbB+kosFbRBOk=; b=a604AkelrYpC hJrNFgnhFDTYkL64BZ3oeDMUgiO1aqUdO/G7IP92QyjwfZyocj67QIIZNGfyYd/ZzU9wFliKrYcUf 500TBE7pUUj5FO3dFaEZoyLNtaBwR8liXBkxfokKIJYuOW5CsFULvRDZWVUrg5xevZVEjcBmUkbCL AFmy6wu4Mw+zluhrHQ8wi6B9XXPXip3GZPlQTC2dTLfOEelLcU9kEW0lNHO1XUtgOFrtMyAmx8v+y 4dtaEZ80PK7YchWyGr9OYKVlXLM0ATY3paTE9ItO2nU/SrrztIMw/dnTdKT0QGB3Y4HiG9GMGw1wG lCzHnKvYyd3RCUipvld96w==; Date: Sat, 13 Jul 2024 13:19:21 +0300 Message-Id: <86ttgtk312.fsf@gnu.org> From: Eli Zaretskii To: Vincenzo Pupillo In-Reply-To: <9826503.eNJFYEL58v@3-191.divsi.unimi.it> (message from Vincenzo Pupillo on Mon, 01 Jul 2024 12:48:33 +0200) Subject: Re: bug#71874: 30.0.60; [PATCH] Fontify doxygen comments in c-ts-mode,c++-ts-mode and java-ts-mode References: <9826503.eNJFYEL58v@3-191.divsi.unimi.it> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 71874-done Cc: 71874-done@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 (---) > From: Vincenzo Pupillo > Date: Mon, 01 Jul 2024 12:48:33 +0200 > > This patch adds support for comment fontification using the doxygen parser: > https://github.com/tree-sitter-grammars/tree-sitter-doxygen > > This is the same parser used by nvim treesitter and seems to be quite stable. > The attached screenshot shows the result. > This patch also works with emacs 31. Thanks, I installed this on the master branch. The code needed a minor fix to not show a warning if the Doxygen grammar is not available. Also, please note the changes I made in the style of the commit log messages (mainly showing the entries for the same file together, not with a separate "* lisp/..." file-name entry), and try to follow this style in the future. With that, I'm closing this bug. ------------=_1720866002-6000-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 1 Jul 2024 10:48:50 +0000 Received: from localhost ([127.0.0.1]:60229 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sOEaX-0004tW-75 for submit@debbugs.gnu.org; Mon, 01 Jul 2024 06:48:50 -0400 Received: from lists.gnu.org ([209.51.188.17]:44194) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sOEaU-0004tM-Ud for submit@debbugs.gnu.org; Mon, 01 Jul 2024 06:48:48 -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 1sOEaN-0007Gi-5e for bug-gnu-emacs@gnu.org; Mon, 01 Jul 2024 06:48:41 -0400 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sOEaK-0005X1-Ip for bug-gnu-emacs@gnu.org; Mon, 01 Jul 2024 06:48:38 -0400 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-a72b3e1c14cso320871466b.1 for ; Mon, 01 Jul 2024 03:48:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719830915; x=1720435715; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=rZH55IERme7j2260849oFZf51OWXo6GKePg5kifUZXE=; b=LQdgQPtDJ/WIJkEVQYBg80+SN24SHnAfWz28XWdxLKqCod7KWo5DwPygme7oVJBJGL 5y4UNNqlbmA8BtZmo+p2CgnuVW2Gf/k1mWJqkPmr7AzDgHV15mVRfJldj/W1IWuqKOtQ H56PzFTioiwnQn5H5eA9Tc9KCshKwlM+GxMk6LmvwfUZe9o3NJmPFWoPt9/g01VT/sBV vWgYKnrDlhbioMGMndlnUXzu80TE4yfx/sLf+HD5+Hd+N36k6Cdfz+OY52JCylFXaW60 F0A+BFhP/CwRACp2JVB5VW3DT3NZEIRTogVasBUUFpGRo6JO25z9Nh0Vfv0V/byAxUMr RXfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719830915; x=1720435715; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rZH55IERme7j2260849oFZf51OWXo6GKePg5kifUZXE=; b=KUZXK6mK2NCMcDQq/Fcc673yd+9i2kC677wApWEnuZLL5VtSl7HcbEktNIoYc7MIew pTPGg4CBqaz/PiFuF7kO+X9BjohMeczehJ7rZ7gj7aKP076CyB0BXGeDZ4eAQvRQt4Mf OOYo4a02aHPyMZKEeObNbbYRJYRuMN+FHpsaPENFFBSXrp2prF2hYA0itbteXuM5MfB2 C3Itg9KAn5cvghNUFPu9FmVGnz/Phv6RIP9Jsh3jL4BPCAQA1cDTP63Zqj40RYlnc0vP 4TgMmrvhLnhsExiwvkBTnZ8DBNmRXRisIaqdeusdoj3HuTt6y57MEniLD+Aa0f5WoCXO MXrQ== X-Gm-Message-State: AOJu0YxWFHgyfA1YG5jCpNxhUALdoob+08PF3Ta45BBBogZtbb4jhvLj zfsdECEuD/ChlbIp7AeegZJky+J0Snaw7yrF97DKHVtTf1PtIj2XVG3k5Q== X-Google-Smtp-Source: AGHT+IGaz43zZn1PBiT9H2dIKAENJJOV9T+T3eflpFP8IxV80Y2eHlXnDEVJV7kw6o4y3HSClSMmcg== X-Received: by 2002:a17:907:7211:b0:a6f:e456:4207 with SMTP id a640c23a62f3a-a75144a2799mr447023566b.61.1719830914518; Mon, 01 Jul 2024 03:48:34 -0700 (PDT) Received: from 3-191.divsi.unimi.it (3-191.divsi.unimi.it. [159.149.3.191]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a72ab065735sm323056466b.135.2024.07.01.03.48.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Jul 2024 03:48:34 -0700 (PDT) From: Vincenzo Pupillo To: Bug Emacs Subject: 30.0.60; [PATCH] Fontify doxygen comments in c-ts-mode,c++-ts-mode and java-ts-mode Date: Mon, 01 Jul 2024 12:48:33 +0200 Message-ID: <9826503.eNJFYEL58v@3-191.divsi.unimi.it> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart21879956.4csPzL39Zc" Content-Transfer-Encoding: 7Bit Received-SPF: pass client-ip=2a00:1450:4864:20::62d; envelope-from=v.pupillo@gmail.com; helo=mail-ej1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) 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.3 (--) This is a multi-part message in MIME format. --nextPart21879956.4csPzL39Zc Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="utf-8" Ciao, This patch adds support for comment fontification using the doxygen parser: https://github.com/tree-sitter-grammars/tree-sitter-doxygen This is the same parser used by nvim treesitter and seems to be quite stable. The attached screenshot shows the result. This patch also works with emacs 31. Thanks. Vincenzo --nextPart21879956.4csPzL39Zc Content-Disposition: attachment; filename="0001-Fontify-doxygen-support-to-c-ts-mode-c-ts-mode-and-j.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="x-UTF_8J"; name="0001-Fontify-doxygen-support-to-c-ts-mode-c-ts-mode-and-j.patch" >From 298a7676c924fdc0642dcf867f3ac0da82409968 Mon Sep 17 00:00:00 2001 From: Vincenzo Pupillo Date: Mon, 1 Jul 2024 12:34:01 +0200 Subject: [PATCH] Fontify doxygen support to c-ts-mode, c++-ts-mode and java-ts-mode Add doxygen support to 'c-ts-mode', 'c++-ts-mode' and 'java-ts-mode' using tree-sitter-doxygen from github.com/tree-sitter-grammars. * lisp/progmodes/c-ts-common.el (c-ts-mode-doxygen-comment-font-lock-settings): Add font locking rules for doxygen comment. * lisp/progmodes/c-ts-mode.el (c-ts-mode--feature-list): Add 'document' feature. * lisp/progmodes/c-ts-mode.el (c-ts-mode--doxygen-comment-regex): New regular expression for doxygen comments. * lisp/progmodes/c-ts-mode.el (c-ts-mode): Add support for doxygen parser. * lisp/progmodes/c-ts-mode.el (c++-ts-mode): Add support for doxygen parser. * lisp/progmodes/java-ts-mode.el (java-ts-mode): Add support for doxygen parser. --- lisp/progmodes/c-ts-common.el | 22 +++++ lisp/progmodes/c-ts-mode.el | 126 +++++++++++++++++--------- lisp/progmodes/java-ts-mode.el | 159 ++++++++++++++++++--------------- 3 files changed, 193 insertions(+), 114 deletions(-) diff --git a/lisp/progmodes/c-ts-common.el b/lisp/progmodes/c-ts-common.el index 3882a697c48..a1f257ee09a 100644 --- a/lisp/progmodes/c-ts-common.el +++ b/lisp/progmodes/c-ts-common.el @@ -348,6 +348,28 @@ c-ts-common-comment-indent-new-line (delete-region (line-beginning-position) (point)) (insert whitespaces))))) +;; Font locking using doxygen parser +(defvar c-ts-mode-doxygen-comment-font-lock-settings + (treesit-font-lock-rules + :language 'doxygen + :feature 'document + :override t + '((document) @font-lock-doc-face) + + :language 'doxygen + :override t + :feature 'keyword + '((tag_name) @font-lock-constant-face + (storageclass) @font-lock-constant-face) + + :language 'doxygen + :override t + :feature 'definition + '((tag (identifier) @font-lock-variable-name-face) + (function (identifier) @font-lock-function-name-face) + (function_link) @font-lock-function-name-face)) + "Tree-sitter font lock rules for doxygen like comment styles.") + ;;; Statement indent (defvar c-ts-common-indent-offset nil diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 2ac163d7a7e..201ff09593a 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -63,6 +63,9 @@ ;; will set up Emacs to use the C/C++ modes defined here for other ;; files, provided that you have the corresponding parser grammar ;; libraries installed. +;; +;; If the tree-sitter doxygen grammar is available, then the comment +;; blocks will be highlighted according to this grammar. ;;; Code: @@ -539,7 +542,7 @@ c-ts-mode--top-level-label-matcher ;;; Font-lock (defvar c-ts-mode--feature-list - '(( comment definition) + '(( comment document definition) ( keyword preprocessor string type) ( assignment constant escape-sequence label literal) ( bracket delimiter error function operator property variable)) @@ -591,6 +594,10 @@ c-ts-mode--for-each-tail-regexp "LIVE_BUFFER" "FRAME")) "A regexp matching all the variants of the FOR_EACH_* macro.") +(defvar c-ts-mode--doxygen-comment-regex + (rx (| "/**" "/*!" "//!" "///")) + "A regexp that matches all doxygen comment styles.") + (defun c-ts-mode--font-lock-settings (mode) "Tree-sitter font-lock settings. MODE is either `c' or `cpp'." @@ -1319,30 +1326,47 @@ c-ts-mode (when c-ts-mode-emacs-sources-support (treesit-parser-create 'c nil nil 'for-each)) - (treesit-parser-create 'c) - ;; Comments. - (setq-local comment-start "/* ") - (setq-local comment-end " */") - ;; Indent. - (setq-local treesit-simple-indent-rules - (c-ts-mode--get-indent-style 'c)) - ;; Font-lock. - (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 'c)) - ;; Navigation. - (setq-local treesit-defun-tactic 'top-level) - (treesit-major-mode-setup) - - ;; Emacs source support: handle DEFUN and FOR_EACH_* gracefully. - (when c-ts-mode-emacs-sources-support - (setq-local add-log-current-defun-function - #'c-ts-mode--emacs-current-defun-name) - - (setq-local treesit-range-settings - (treesit-range-rules 'c-ts-mode--emacs-set-ranges)) - - (setq-local treesit-language-at-point-function - (lambda (_pos) 'c)) - (treesit-font-lock-recompute-features '(emacs-devel))))) + (let ((primary-parser (treesit-parser-create 'c))) + ;; Comments. + (setq-local comment-start "/* ") + (setq-local comment-end " */") + ;; Indent. + (setq-local treesit-simple-indent-rules + (c-ts-mode--get-indent-style 'c)) + ;; Font-lock. + (setq-local treesit-font-lock-settings + (c-ts-mode--font-lock-settings 'c)) + ;; Navigation. + (setq-local treesit-defun-tactic 'top-level) + (treesit-major-mode-setup) + + ;; Emacs source support: handle DEFUN and FOR_EACH_* gracefully. + (when c-ts-mode-emacs-sources-support + (setq-local add-log-current-defun-function + #'c-ts-mode--emacs-current-defun-name) + + (setq-local treesit-range-settings + (treesit-range-rules 'c-ts-mode--emacs-set-ranges)) + + (setq-local treesit-language-at-point-function + (lambda (_pos) 'c)) + (treesit-font-lock-recompute-features '(emacs-devel))) + + ;; Inject doxygen parser for comment. + (when (treesit-ready-p 'doxygen) + (setq-local treesit-primary-parser primary-parser) + (setq-local treesit-font-lock-settings + (append + treesit-font-lock-settings + c-ts-mode-doxygen-comment-font-lock-settings)) + (setq-local treesit-range-settings + (treesit-range-rules + :embed 'doxygen + :host 'c + :local t + `(((comment) @cap + (:match + ,c-ts-mode--doxygen-comment-regex @cap))))))))) (derived-mode-add-parents 'c-ts-mode '(c-mode)) @@ -1370,24 +1394,40 @@ c++-ts-mode :after-hook (c-ts-mode-set-modeline) (when (treesit-ready-p 'cpp) - - (treesit-parser-create 'cpp) - - ;; Syntax. - (setq-local syntax-propertize-function - #'c-ts-mode--syntax-propertize) - - ;; Indent. - (setq-local treesit-simple-indent-rules - (c-ts-mode--get-indent-style 'cpp)) - - ;; Font-lock. - (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 'cpp)) - (treesit-major-mode-setup) - - (when c-ts-mode-emacs-sources-support - (setq-local add-log-current-defun-function - #'c-ts-mode--emacs-current-defun-name)))) + (let ((primary-parser (treesit-parser-create 'cpp))) + + ;; Syntax. + (setq-local syntax-propertize-function + #'c-ts-mode--syntax-propertize) + + ;; Indent. + (setq-local treesit-simple-indent-rules + (c-ts-mode--get-indent-style 'cpp)) + + ;; Font-lock. + (setq-local treesit-font-lock-settings + (c-ts-mode--font-lock-settings 'cpp)) + (treesit-major-mode-setup) + + (when c-ts-mode-emacs-sources-support + (setq-local add-log-current-defun-function + #'c-ts-mode--emacs-current-defun-name)) + + ;; Inject doxygen parser for comment. + (when (treesit-ready-p 'doxygen) + (setq-local treesit-primary-parser primary-parser) + (setq-local treesit-font-lock-settings + (append + treesit-font-lock-settings + c-ts-mode-doxygen-comment-font-lock-settings)) + (setq-local treesit-range-settings + (treesit-range-rules + :embed 'doxygen + :host 'cpp + :local t + `(((comment) @cap + (:match + ,c-ts-mode--doxygen-comment-regex @cap))))))))) (derived-mode-add-parents 'c++-ts-mode '(c++-mode)) diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el index bb4a7df3340..04aaf43ac66 100644 --- a/lisp/progmodes/java-ts-mode.el +++ b/lisp/progmodes/java-ts-mode.el @@ -24,6 +24,8 @@ ;;; Commentary: ;; +;; If the tree-sitter doxygen grammar is available, then the comment +;; blocks will be highlighted according to this grammar. ;;; Code: @@ -312,7 +314,7 @@ java-ts-mode--defun-name (defvar java-ts-mode--feature-list - '(( comment definition ) + '(( comment document definition ) ( constant keyword string type) ( annotation expression literal) ( bracket delimiter operator))) @@ -326,76 +328,91 @@ java-ts-mode (unless (treesit-ready-p 'java) (error "Tree-sitter for Java isn't available")) - (treesit-parser-create 'java) - - ;; Comments. - (c-ts-common-comment-setup) - - ;; Indent. - (setq-local c-ts-common-indent-type-regexp-alist - `((block . ,(rx (or "class_body" - "array_initializer" - "constructor_body" - "annotation_type_body" - "interface_body" - "lambda_expression" - "enum_body" - "switch_block" - "record_declaration_body" - "block"))) - (close-bracket . "}") - (if . "if_statement") - (else . ("if_statement" . "alternative")) - (for . "for_statement") - (while . "while_statement") - (do . "do_statement"))) - (setq-local c-ts-common-indent-offset 'java-ts-mode-indent-offset) - (setq-local treesit-simple-indent-rules java-ts-mode--indent-rules) - - ;; Electric - (setq-local electric-indent-chars - (append "{}():;," electric-indent-chars)) - - ;; Navigation. - (setq-local treesit-defun-type-regexp - (regexp-opt '("method_declaration" - "class_declaration" - "record_declaration" - "interface_declaration" - "enum_declaration" - "import_declaration" - "package_declaration" - "module_declaration" - "constructor_declaration"))) - (setq-local treesit-defun-name-function #'java-ts-mode--defun-name) - - (setq-local treesit-thing-settings - `((java - (sexp ,(rx (or "annotation" - "parenthesized_expression" - "argument_list" - "identifier" - "modifiers" - "block" - "body" - "literal" - "access" - "reference" - "_type" - "true" - "false"))) - (sentence ,(rx (or "statement" - "local_variable_declaration" - "field_declaration" - "module_declaration" - "package_declaration" - "import_declaration"))) - (text ,(regexp-opt '("line_comment" - "block_comment" - "text_block")))))) - - ;; Font-lock. - (setq-local treesit-font-lock-settings java-ts-mode--font-lock-settings) + (let ((primary-parser (treesit-parser-create 'java))) + + ;; Comments. + (c-ts-common-comment-setup) + + ;; Indent. + (setq-local c-ts-common-indent-type-regexp-alist + `((block . ,(rx (or "class_body" + "array_initializer" + "constructor_body" + "annotation_type_body" + "interface_body" + "lambda_expression" + "enum_body" + "switch_block" + "record_declaration_body" + "block"))) + (close-bracket . "}") + (if . "if_statement") + (else . ("if_statement" . "alternative")) + (for . "for_statement") + (while . "while_statement") + (do . "do_statement"))) + (setq-local c-ts-common-indent-offset 'java-ts-mode-indent-offset) + (setq-local treesit-simple-indent-rules java-ts-mode--indent-rules) + + ;; Electric + (setq-local electric-indent-chars + (append "{}():;," electric-indent-chars)) + + ;; Navigation. + (setq-local treesit-defun-type-regexp + (regexp-opt '("method_declaration" + "class_declaration" + "record_declaration" + "interface_declaration" + "enum_declaration" + "import_declaration" + "package_declaration" + "module_declaration" + "constructor_declaration"))) + (setq-local treesit-defun-name-function #'java-ts-mode--defun-name) + + (setq-local treesit-thing-settings + `((java + (sexp ,(rx (or "annotation" + "parenthesized_expression" + "argument_list" + "identifier" + "modifiers" + "block" + "body" + "literal" + "access" + "reference" + "_type" + "true" + "false"))) + (sentence ,(rx (or "statement" + "local_variable_declaration" + "field_declaration" + "module_declaration" + "package_declaration" + "import_declaration"))) + (text ,(regexp-opt '("line_comment" + "block_comment" + "text_block")))))) + + ;; Font-lock. + (setq-local treesit-font-lock-settings + java-ts-mode--font-lock-settings) + + ;; Inject doxygen parser for comment. + (when (treesit-ready-p 'doxygen) + (setq-local treesit-primary-parser primary-parser) + (setq-local treesit-font-lock-settings + (append treesit-font-lock-settings + c-ts-mode-doxygen-comment-font-lock-settings)) + (setq-local treesit-range-settings + (treesit-range-rules + :embed 'doxygen + :host 'java + :local t + `(((block_comment) @cap (:match "/\\*\\*" @cap))))))) + (setq-local treesit-font-lock-feature-list java-ts-mode--feature-list) ;; Imenu. -- 2.45.2 --nextPart21879956.4csPzL39Zc-- ------------=_1720866002-6000-1-- From unknown Mon Aug 18 08:27:04 2025 X-Loop: help-debbugs@gnu.org Subject: bug#71874: 30.0.60; [PATCH] Fontify doxygen comments in c-ts-mode,c++-ts-mode and java-ts-mode Resent-From: Vincenzo Pupillo Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 13 Jul 2024 10:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 71874 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Eli Zaretskii Cc: 71874-done@debbugs.gnu.org Received: via spool by 71874-done@debbugs.gnu.org id=D71874.17208682269415 (code D ref 71874); Sat, 13 Jul 2024 10:58:02 +0000 Received: (at 71874-done) by debbugs.gnu.org; 13 Jul 2024 10:57:06 +0000 Received: from localhost ([127.0.0.1]:55192 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sSaR7-0002Rn-NC for submit@debbugs.gnu.org; Sat, 13 Jul 2024 06:57:06 -0400 Received: from mail-ej1-f41.google.com ([209.85.218.41]:42218) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sSaR5-0002RI-CO for 71874-done@debbugs.gnu.org; Sat, 13 Jul 2024 06:57:04 -0400 Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-a77d85f7fa3so441706666b.0 for <71874-done@debbugs.gnu.org>; Sat, 13 Jul 2024 03:57:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1720868157; x=1721472957; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:message-id:references :in-reply-to:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=DnIRQGanqYrCy+7VO/tMEZHa+u7/BGH2yn7onwDrw+w=; b=gcbZ+1WZR6y/rip96ZA55kivvsU2jWtWsfblP0VvWDWTRM5xt5oMuLHISa5xG1QPht zTlXKljypqllcEBzETaWxftA1RhZSzJDD2upkmHcnVADsvms6CzmFgN+DOyISICYN1+k nfbtD1WNFmkj0Rd0CUKXHa2lj4C3nRZzmtgPqvzlvPq/2RejPIstSjnM60CMEgZGHqWl e/9yVFfmP/oEH6ISQjgM3kTSXgbQUcAM3rri7nPS6kEGPNikHWdLwEqcLMFS09nN+hm2 44fnPx7xZyu5ebV1B7lCLOX1QthxoXwsNVA4blk6AkQDwee+6H7dtHs6nWkOIULqIfaU u4nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720868157; x=1721472957; h=content-transfer-encoding:mime-version:message-id:references :in-reply-to:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DnIRQGanqYrCy+7VO/tMEZHa+u7/BGH2yn7onwDrw+w=; b=t2k8848lus1O1aRXkfRqUVsLhpyFdmpjZnlCqyoMqmm3qVGAvxBMuUrLdCoEYU7jug BRx4Y5AjV9HH14e4yJUMbvCt9vfLRdo3HKPT50v0o+ip4GuvoXQK7oaWxa1rcVSoFhwu O7Ea7o/tKwYnKF2zhfMTZdQnHbbIdc4LWQ8es9iDNZnhUuAOxYr5ALSu7MabqMEKARCW 2/mHOCfwefxIYZwm1qMnBVlRNG90rMh/V5cAKVM4fhahu9NWyPIuYUXZ/8nw8D+aCUiL MhLlg4VRa9RnngN6iwweqdSczpnbUyEb/vLfQVQ3p1iPTk6WD82uS+pomwSpT6Ine5ag inBA== X-Gm-Message-State: AOJu0Yzu0hFnNW48dZMxBnCCp0e1SZZ4veYpAsTRUIVXVQOCTkdxgoDq odGw74zM3HrZdXLUvz9FMuw0DG2Qy06jpBmnkgAmMKtmP7TckhNz X-Google-Smtp-Source: AGHT+IHhXco0VY2LZRVZZ8BCDES14Dl0oiNzNwVduTLAmd61A+SDbWrs26wEhAhOQlgPPzotZJBTrQ== X-Received: by 2002:a17:907:97cf:b0:a77:e420:9e5d with SMTP id a640c23a62f3a-a799d3a44e5mr435328166b.34.1720868156502; Sat, 13 Jul 2024 03:55:56 -0700 (PDT) Received: from [127.0.0.1] (93-32-172-197.ip34.fastwebnet.it. [93.32.172.197]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a79bc7ff715sm40621666b.161.2024.07.13.03.55.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 13 Jul 2024 03:55:56 -0700 (PDT) Date: Sat, 13 Jul 2024 12:55:54 +0200 From: Vincenzo Pupillo In-Reply-To: <86ttgtk312.fsf@gnu.org> References: <9826503.eNJFYEL58v@3-191.divsi.unimi.it> <86ttgtk312.fsf@gnu.org> Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=----Q1RJAYYMLDUR99XONVWO709Q6G54RJ Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) 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 (-) ------Q1RJAYYMLDUR99XONVWO709Q6G54RJ Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ok, thank you Eli! Vincenzo=20 Il 13 luglio 2024 12:19:21 CEST, Eli Zaretskii ha scritto= : >> From: Vincenzo Pupillo >> Date: Mon, 01 Jul 2024 12:48:33 +0200 >>=20 >> This patch adds support for comment fontification using the doxygen par= ser: >> https://github=2Ecom/tree-sitter-grammars/tree-sitter-doxygen >>=20 >> This is the same parser used by nvim treesitter and seems to be quite s= table=2E >> The attached screenshot shows the result=2E >> This patch also works with emacs 31=2E > >Thanks, I installed this on the master branch=2E > >The code needed a minor fix to not show a warning if the Doxygen >grammar is not available=2E Also, please note the changes I made in the >style of the commit log messages (mainly showing the entries for the >same file together, not with a separate "* lisp/=2E=2E=2E" file-name entr= y), >and try to follow this style in the future=2E > >With that, I'm closing this bug=2E ------Q1RJAYYMLDUR99XONVWO709Q6G54RJ Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable
Ok, thank you Eli!
Vincenzo <= /div>

Il 13 luglio 2024= 12:19:21 CEST, Eli Zaretskii <eliz@gnu=2Eorg> ha scritto:
From: Vincenzo Pupillo <v=2Epupillo@gmail=2Ecom>
Da= te: Mon, 01 Jul 2024 12:48:33 +0200

This patch adds support for comm= ent fontification using the doxygen parser:
https://github=2Ecom/tree-sit= ter-grammars/tree-sitter-doxygen

This is the same parser used by= nvim treesitter and seems to be quite stable=2E
The attached screenshot= shows the result=2E
This patch also works with emacs 31=2E

Thanks, I installed this on the master bran= ch=2E

The code needed a minor fix to not show a warning if the Doxyg= en
grammar is not available=2E Also, please note the changes I made in = the
style of the commit log messages (mainly showing the entries for the=
same file together, not with a separate "* lisp/=2E=2E=2E" file-name en= try),
and try to follow this style in the future=2E

With that, I'= m closing this bug=2E
------Q1RJAYYMLDUR99XONVWO709Q6G54RJ--