From a772c00da4feb69161759381f9a490494488f62b Mon Sep 17 00:00:00 2001 From: Karl Kemister-Sheppard Date: Mon, 19 May 2025 22:00:12 +1000 Subject: [PATCH 1/6] DOC-3216: replace TinyMCE with productname var. --- modules/ROOT/pages/basic-setup.adoc | 2 +- modules/ROOT/pages/blazor-cloud.adoc | 2 +- modules/ROOT/pages/blazor-pm.adoc | 2 +- modules/ROOT/pages/blazor-ref.adoc | 2 +- modules/ROOT/pages/browserify-cjs-npm.adoc | 4 ++-- modules/ROOT/pages/bundling-content-css.adoc | 2 +- modules/ROOT/pages/bundling-icons.adoc | 2 +- modules/ROOT/pages/bundling-localization.adoc | 2 +- modules/ROOT/pages/bundling-plugins.adoc | 4 ++-- modules/ROOT/pages/cloud-deployment-guide.adoc | 2 +- modules/ROOT/pages/contextform.adoc | 2 +- modules/ROOT/pages/creating-a-plugin.adoc | 4 ++-- modules/ROOT/pages/custom-basic-menu-items.adoc | 2 +- modules/ROOT/pages/custom-basic-toolbar-button.adoc | 2 +- modules/ROOT/pages/custom-nested-menu-items.adoc | 2 +- modules/ROOT/pages/custom-toggle-toolbar-button.adoc | 2 +- modules/ROOT/pages/django-cloud.adoc | 2 +- modules/ROOT/pages/django-zip.adoc | 2 +- modules/ROOT/pages/editor-command-identifiers.adoc | 2 +- modules/ROOT/pages/editor-content-css.adoc | 2 +- .../ROOT/pages/editor-context-menu-identifiers.adoc | 2 +- modules/ROOT/pages/editor-icon-identifiers.adoc | 2 +- modules/ROOT/pages/editor-icons.adoc | 2 +- modules/ROOT/pages/editor-important-options.adoc | 2 +- modules/ROOT/pages/editor-model.adoc | 2 +- modules/ROOT/pages/editor-skin.adoc | 2 +- modules/ROOT/pages/editor-theme.adoc | 2 +- modules/ROOT/pages/enhanced-skins-and-icon-packs.adoc | 2 +- modules/ROOT/pages/events.adoc | 2 +- modules/ROOT/pages/expressjs-pm.adoc | 2 +- modules/ROOT/pages/filter-content.adoc | 2 +- modules/ROOT/pages/getting-started.adoc | 2 +- modules/ROOT/pages/how-to-guides.adoc | 10 +++++----- modules/ROOT/pages/ie-template-creation.adoc | 8 ++++---- 34 files changed, 44 insertions(+), 44 deletions(-) diff --git a/modules/ROOT/pages/basic-setup.adoc b/modules/ROOT/pages/basic-setup.adoc index 6072eefccb..1bbc271311 100644 --- a/modules/ROOT/pages/basic-setup.adoc +++ b/modules/ROOT/pages/basic-setup.adoc @@ -290,5 +290,5 @@ liveDemo::basic-conf[] ** Initial configuration - For initial configuration and important settings. ** Interface - For customizing the look and feel of the editor. ** Content - For customizing the allowed content and the associated behaviors. -* For information on Plugins and their options, see: xref:work-with-plugins.adoc[Add plugins to TinyMCE]. +* For information on Plugins and their options, see: xref:work-with-plugins.adoc[Add plugins to {productname}]. * For information on the CSS required to render some {productname} elements outside of the editor, see: xref:editor-content-css.adoc[Boilerplate content CSS]. diff --git a/modules/ROOT/pages/blazor-cloud.adoc b/modules/ROOT/pages/blazor-cloud.adoc index fd5e091f89..f51750d53a 100644 --- a/modules/ROOT/pages/blazor-cloud.adoc +++ b/modules/ROOT/pages/blazor-cloud.adoc @@ -1,4 +1,4 @@ -= Using TinyMCE from the Tiny Cloud CDN with the Blazor framework += Using {productname} from the Tiny Cloud CDN with the Blazor framework :navtitle: Blazor :description: A guide on integrating TinyMCE from the Tiny Cloud into the Blazor framework. :keywords: integration, integrate, blazor, blazorapp diff --git a/modules/ROOT/pages/blazor-pm.adoc b/modules/ROOT/pages/blazor-pm.adoc index a0fd007e23..78c4252602 100644 --- a/modules/ROOT/pages/blazor-pm.adoc +++ b/modules/ROOT/pages/blazor-pm.adoc @@ -1,4 +1,4 @@ -= Using the TinyMCE package with the Blazor framework += Using the {productname} package with the Blazor framework :navtitle: Using a package manager :description: A guide on integrating the TinyMCE package into the Blazor framework. :keywords: integration, integrate, blazor, blazorapp diff --git a/modules/ROOT/pages/blazor-ref.adoc b/modules/ROOT/pages/blazor-ref.adoc index d630a5569b..ce04245f24 100644 --- a/modules/ROOT/pages/blazor-ref.adoc +++ b/modules/ROOT/pages/blazor-ref.adoc @@ -1,4 +1,4 @@ -= TinyMCE Blazor integration technical reference += {productname} Blazor integration technical reference :navtitle: Technical reference :description: Technical reference for the TinyMCE Blazor integration :keywords: integration, integrate, blazor, blazorapp diff --git a/modules/ROOT/pages/browserify-cjs-npm.adoc b/modules/ROOT/pages/browserify-cjs-npm.adoc index 9f84a3c239..a2dc765c5e 100644 --- a/modules/ROOT/pages/browserify-cjs-npm.adoc +++ b/modules/ROOT/pages/browserify-cjs-npm.adoc @@ -1,4 +1,4 @@ -= Bundling an npm version of TinyMCE with CommonJS and Browserify += Bundling an npm version of {productname} with CommonJS and Browserify :navtitle: CommonJS and npm :description_short: Bundling an npm version of TinyMCE in a project using CommonJS and Browserify :description: Bundling an npm version of TinyMCE in a project using CommonJS and Browserify @@ -15,7 +15,7 @@ This guide requires the following: * Node.js and npm * Basic knowledge of how to use https://browserify.org/[Browserify] -* (Optional: For premium features) The latest premium `+.zip+` bundle of TinyMCE for including premium plugins +* (Optional: For premium features) The latest premium `+.zip+` bundle of {productname} for including premium plugins == Procedure diff --git a/modules/ROOT/pages/bundling-content-css.adoc b/modules/ROOT/pages/bundling-content-css.adoc index eb501d2602..43653812e0 100644 --- a/modules/ROOT/pages/bundling-content-css.adoc +++ b/modules/ROOT/pages/bundling-content-css.adoc @@ -1,4 +1,4 @@ -= Bundling TinyMCE content CSS using module loading += Bundling {productname} content CSS using module loading :navtitle: Content CSS :description_short: Information on bundling the editor content CSS :description: Information on bundling the editor content CSS using module loading diff --git a/modules/ROOT/pages/bundling-icons.adoc b/modules/ROOT/pages/bundling-icons.adoc index 3a84ba8b50..89bc152fa2 100644 --- a/modules/ROOT/pages/bundling-icons.adoc +++ b/modules/ROOT/pages/bundling-icons.adoc @@ -1,4 +1,4 @@ -= Bundling TinyMCE icon packs using module loading += Bundling {productname} icon packs using module loading :navtitle: Icons :description_short: Information on bundling icon packs :description: Information on bundling TinyMCE icon packs using module loading diff --git a/modules/ROOT/pages/bundling-localization.adoc b/modules/ROOT/pages/bundling-localization.adoc index 1ed38d9d8c..2568e28ce2 100644 --- a/modules/ROOT/pages/bundling-localization.adoc +++ b/modules/ROOT/pages/bundling-localization.adoc @@ -1,4 +1,4 @@ -= Bundling the User Interface localizations for TinyMCE += Bundling the User Interface localizations for {productname} :navtitle: UI localizations :description_short: Information on bundling User Interface localizations :description: Information on bundling User Interface localizations diff --git a/modules/ROOT/pages/bundling-plugins.adoc b/modules/ROOT/pages/bundling-plugins.adoc index c6853f99f3..8969d9640b 100644 --- a/modules/ROOT/pages/bundling-plugins.adoc +++ b/modules/ROOT/pages/bundling-plugins.adoc @@ -1,4 +1,4 @@ -= Bundling TinyMCE plugins using module loading += Bundling {productname} plugins using module loading :navtitle: Plugins :description_short: Information on bundling plugins :description: Information on bundling TinyMCE plugins using module loading @@ -8,7 +8,7 @@ include::partial$module-loading/bundling-ref-example.adoc[] :!editorcomponent: [NOTE] -If using {productname} 7.0.1 or earlier, please refer to link:https://www.tiny.cloud/docs/tinymce/6/bundling-plugins/[Bundling TinyMCE plugins using module loading] from the {productname} v6 documentation guide. +If using {productname} 7.0.1 or earlier, please refer to link:https://www.tiny.cloud/docs/tinymce/6/bundling-plugins/[Bundling {productname} plugins using module loading] from the {productname} v6 documentation guide. include::partial$plugin-files/plugin-file-index.js.adoc[] diff --git a/modules/ROOT/pages/cloud-deployment-guide.adoc b/modules/ROOT/pages/cloud-deployment-guide.adoc index daf7da9798..c2214963de 100644 --- a/modules/ROOT/pages/cloud-deployment-guide.adoc +++ b/modules/ROOT/pages/cloud-deployment-guide.adoc @@ -29,7 +29,7 @@ a| [.lead] xref:plugin-editor-version-compatibility.adoc[Version compatibility reference] -Matrix of compatibility between TinyMCE editor versions and premium plugins. +Matrix of compatibility between {productname} editor versions and premium plugins. a| [.lead] diff --git a/modules/ROOT/pages/contextform.adoc b/modules/ROOT/pages/contextform.adoc index c0fa210bb6..5d4dbd571b 100644 --- a/modules/ROOT/pages/contextform.adoc +++ b/modules/ROOT/pages/contextform.adoc @@ -4,7 +4,7 @@ :keywords: contextforms, context forms, contextformsbarapi :contextItemType: form -A context form consists of an input field, and a series of related buttons. Context forms can be shown wherever a context toolbar can be shown. Also, when a context form is registered containing a `+launch+` configuration, a special context toolbar button with name `+form:${name}+` is registered which will launch that particular context form. Context forms are a generalization of the `+Insert Link+` form that existed in the original link:https://www.tiny.cloud/docs-4x/themes/inlite/#quicklink[inlite] theme from TinyMCE 4. +A context form consists of an input field, and a series of related buttons. Context forms can be shown wherever a context toolbar can be shown. Also, when a context form is registered containing a `+launch+` configuration, a special context toolbar button with name `+form:${name}+` is registered which will launch that particular context form. Context forms are a generalization of the `+Insert Link+` form that existed in the original link:https://www.tiny.cloud/docs-4x/themes/inlite/#quicklink[inlite] theme from {productname} 4. == Registering a context form diff --git a/modules/ROOT/pages/creating-a-plugin.adoc b/modules/ROOT/pages/creating-a-plugin.adoc index a738b15d4c..82df704005 100644 --- a/modules/ROOT/pages/creating-a-plugin.adoc +++ b/modules/ROOT/pages/creating-a-plugin.adoc @@ -1,4 +1,4 @@ -= Create a plugin for TinyMCE += Create a plugin for {productname} :navtitle: Create a plugin :description_short: Introducing plugin creation, with an example. :description: A short introduction to creating plugins for TinyMCE along with an example plugin. @@ -20,7 +20,7 @@ The plugin identifier passed to `+PluginManager.add()+` is used by {productname} * Be an alphanumeric string, * Not contain any spaces or other whitespaces, -* Be a unique identifier that does not match the IDs of plugins provided with TinyMCE or any other TinyMCE plugin in use. +* Be a unique identifier that does not match the IDs of plugins provided with {productname} or any other {productname} plugin in use. If multiple plugins have the same identifier, one will override the others. diff --git a/modules/ROOT/pages/custom-basic-menu-items.adoc b/modules/ROOT/pages/custom-basic-menu-items.adoc index e31ef12f80..17c5d8cfa8 100644 --- a/modules/ROOT/pages/custom-basic-menu-items.adoc +++ b/modules/ROOT/pages/custom-basic-menu-items.adoc @@ -17,7 +17,7 @@ include::partial$misc/admon-predefined-icons-only.adoc[] |enabled |boolean |optional |default: `true` - Represents the menu item's state. When `false`, the menu item is unclickable. Toggled by the menu item's API. |onSetup |`+(api) => (api) => void+` |optional |default: `+() => () => {}+` - Function invoked when the menu item is rendered, each time its menu is opened. For details, see: xref:using-onsetup[Using `+onSetup+`]. |onAction |`+(api) => void+` |required |Function invoked when the menu item is clicked. -|shortcut |string |optional |Text to display in the shortcut label. To register a shortcut, see: xref:shortcuts.adoc[Add custom shortcuts to TinyMCE]. +|shortcut |string |optional |Text to display in the shortcut label. To register a shortcut, see: xref:shortcuts.adoc[Add custom shortcuts to {productname}]. 4+| |context |string |optional |default: `mode:design` - The context property dynamically enables or disables the menu item based on the editor's current state. For details, see: xref:context.adoc[Context]. |=== diff --git a/modules/ROOT/pages/custom-basic-toolbar-button.adoc b/modules/ROOT/pages/custom-basic-toolbar-button.adoc index 37ac782589..823d06eacf 100644 --- a/modules/ROOT/pages/custom-basic-toolbar-button.adoc +++ b/modules/ROOT/pages/custom-basic-toolbar-button.adoc @@ -18,7 +18,7 @@ include::partial$misc/admon-predefined-icons-only.adoc[] |onSetup |`+(api) => (api) => void+` |optional |default: `+() => () => {}+` - Function invoked when the button is rendered. For details, see: xref:using-onsetup[Using `+onSetup+`]. |onAction |`+(api) => void+` |required |Function invoked when the button is clicked. 4+| -|shortcut |string |optional |Shortcut to display in the tooltip. To register a shortcut, see: xref:shortcuts.adoc[Add custom shortcuts to TinyMCE]. +|shortcut |string |optional |Shortcut to display in the tooltip. To register a shortcut, see: xref:shortcuts.adoc[Add custom shortcuts to {productname}]. 4+| |context |string |optional |default: `mode:design` - The context property dynamically enables or disables the button based on the editor's current state. For details, see: xref:context.adoc[Context]. |=== diff --git a/modules/ROOT/pages/custom-nested-menu-items.adoc b/modules/ROOT/pages/custom-nested-menu-items.adoc index bd0a388225..d04f083732 100644 --- a/modules/ROOT/pages/custom-nested-menu-items.adoc +++ b/modules/ROOT/pages/custom-nested-menu-items.adoc @@ -14,7 +14,7 @@ include::partial$misc/admon-predefined-icons-only.adoc[] |value |string |optional |A value to associate with the menu item. |onSetup |`+(api) => (api) => void+` |optional |default: `+() => () => {}+` - Function invoked when the menu item is rendered, each time its menu is opened. For details, see: xref:using-onsetup[Using `+onSetup+`]. |getSubmenuItems |`+() => string+` or `+MenuItem[]+` |required |Function invoked when the menu item is clicked to open its submenu. Must return either a space separated string of registered menu names or an array of basic, toggle or nested menu items specifications. -|shortcut |string |optional |Text to display in the shortcut label. To register a shortcut, see: xref:shortcuts.adoc[Add custom shortcuts to TinyMCE]. +|shortcut |string |optional |Text to display in the shortcut label. To register a shortcut, see: xref:shortcuts.adoc[Add custom shortcuts to {productname}]. 4+| |context |string |optional |default: `mode:design` - The context property dynamically enables or disables the menu item based on the editor's current state. For details, see: xref:context.adoc[Context]. |=== diff --git a/modules/ROOT/pages/custom-toggle-toolbar-button.adoc b/modules/ROOT/pages/custom-toggle-toolbar-button.adoc index 4b95394a4f..46007bfc22 100644 --- a/modules/ROOT/pages/custom-toggle-toolbar-button.adoc +++ b/modules/ROOT/pages/custom-toggle-toolbar-button.adoc @@ -19,7 +19,7 @@ include::partial$misc/admon-predefined-icons-only.adoc[] |onSetup |`+(api) => (api) => void+` |optional |default: `+() => () => {}+` - Function invoked when the button is rendered. For details, see: xref:using-onsetup[Using `+onSetup+`]. |onAction |`+(api) => void+` |required |Function invoked when the button is clicked. 4+| -|shortcut |string |optional |Shortcut to display in the tooltip. To register a shortcut, see: xref:shortcuts.adoc[Add custom shortcuts to TinyMCE]. +|shortcut |string |optional |Shortcut to display in the tooltip. To register a shortcut, see: xref:shortcuts.adoc[Add custom shortcuts to {productname}]. 4+| |context |string |optional |default: `mode:design` - The context property dynamically enables or disables the button based on the editor's current state. For details, see: xref:context.adoc[Context]. |=== diff --git a/modules/ROOT/pages/django-cloud.adoc b/modules/ROOT/pages/django-cloud.adoc index 77ba5493cc..d04eab2c04 100644 --- a/modules/ROOT/pages/django-cloud.adoc +++ b/modules/ROOT/pages/django-cloud.adoc @@ -1,4 +1,4 @@ -= Using TinyMCE from the Tiny Cloud CDN with the Django framework += Using {productname} from the Tiny Cloud CDN with the Django framework :navtitle: Django :description: A guide on integrating TinyMCE from the Tiny Cloud into the Django framework. :keywords: integration, integrate, Django, django, django-tinymce, python diff --git a/modules/ROOT/pages/django-zip.adoc b/modules/ROOT/pages/django-zip.adoc index 0d510eb1dc..d4202bc85c 100644 --- a/modules/ROOT/pages/django-zip.adoc +++ b/modules/ROOT/pages/django-zip.adoc @@ -1,4 +1,4 @@ -= Using the TinyMCE .zip package with the Django framework += Using the {productname} .zip package with the Django framework :navtitle: Django :description: A guide on integrating a .zip version of TinyMCE into the Django framework. :keywords: integration, integrate, Django, django, django-tinymce, python diff --git a/modules/ROOT/pages/editor-command-identifiers.adoc b/modules/ROOT/pages/editor-command-identifiers.adoc index 257c2bd58c..c304ab5bb1 100644 --- a/modules/ROOT/pages/editor-command-identifiers.adoc +++ b/modules/ROOT/pages/editor-command-identifiers.adoc @@ -1,4 +1,4 @@ -= Commands Available for TinyMCE += Commands Available for {productname} :navtitle: Available Commands :description_short: Complete list of editor commands. :description: The complete list of exposed editor commands. diff --git a/modules/ROOT/pages/editor-content-css.adoc b/modules/ROOT/pages/editor-content-css.adoc index 5a8eb9ba80..efe0e61191 100644 --- a/modules/ROOT/pages/editor-content-css.adoc +++ b/modules/ROOT/pages/editor-content-css.adoc @@ -1,4 +1,4 @@ -= CSS for rendering TinyMCE content outside the editor += CSS for rendering {productname} content outside the editor :navtitle: CSS for rendering content :description: CSS for rendering TinyMCE content outside the editor, such as on a webpage. :keywords: css, content_css diff --git a/modules/ROOT/pages/editor-context-menu-identifiers.adoc b/modules/ROOT/pages/editor-context-menu-identifiers.adoc index 2583cc84a6..a8d0f9c6f9 100644 --- a/modules/ROOT/pages/editor-context-menu-identifiers.adoc +++ b/modules/ROOT/pages/editor-context-menu-identifiers.adoc @@ -1,4 +1,4 @@ -= Context Menu Items Available for TinyMCE += Context Menu Items Available for {productname} :navtitle: Available Context Menu Items :description_short: Complete list of available context menu sections. :description: Complete list of available context menu sections. diff --git a/modules/ROOT/pages/editor-icon-identifiers.adoc b/modules/ROOT/pages/editor-icon-identifiers.adoc index 15f97202db..8109b55c09 100644 --- a/modules/ROOT/pages/editor-icon-identifiers.adoc +++ b/modules/ROOT/pages/editor-icon-identifiers.adoc @@ -1,4 +1,4 @@ -= Icons Available for TinyMCE += Icons Available for {productname} :navtitle: Available Icons :description_short: Complete list of icon identifiers. :description: Complete list of icon identifiers. diff --git a/modules/ROOT/pages/editor-icons.adoc b/modules/ROOT/pages/editor-icons.adoc index 7ea80ae4a3..874167075d 100644 --- a/modules/ROOT/pages/editor-icons.adoc +++ b/modules/ROOT/pages/editor-icons.adoc @@ -1,4 +1,4 @@ -= TinyMCE Icon options += {productname} Icon options :navtitle: Icons :description: Configure the editor's toolbar button and menu item icons. diff --git a/modules/ROOT/pages/editor-important-options.adoc b/modules/ROOT/pages/editor-important-options.adoc index 6266d36056..d0b0d45b8b 100644 --- a/modules/ROOT/pages/editor-important-options.adoc +++ b/modules/ROOT/pages/editor-important-options.adoc @@ -1,4 +1,4 @@ -= Key editor options for adding TinyMCE to an application += Key editor options for adding {productname} to an application :navtitle: Integration options :description: Key editor options for integrating TinyMCE to an application :keywords: diff --git a/modules/ROOT/pages/editor-model.adoc b/modules/ROOT/pages/editor-model.adoc index bd31b4ba18..675f8ed77b 100644 --- a/modules/ROOT/pages/editor-model.adoc +++ b/modules/ROOT/pages/editor-model.adoc @@ -1,4 +1,4 @@ -= TinyMCE Model options += {productname} Model options :navtitle: Editor content models :description: Configure the editor's content model. diff --git a/modules/ROOT/pages/editor-skin.adoc b/modules/ROOT/pages/editor-skin.adoc index 0014317d05..6517c6698f 100644 --- a/modules/ROOT/pages/editor-skin.adoc +++ b/modules/ROOT/pages/editor-skin.adoc @@ -1,4 +1,4 @@ -= TinyMCE Skin options += {productname} Skin options :navtitle: Skins :description: Configure the editor's overall appearance. diff --git a/modules/ROOT/pages/editor-theme.adoc b/modules/ROOT/pages/editor-theme.adoc index c82088d9dd..1effb2941d 100644 --- a/modules/ROOT/pages/editor-theme.adoc +++ b/modules/ROOT/pages/editor-theme.adoc @@ -1,4 +1,4 @@ -= TinyMCE Theme options += {productname} Theme options :navtitle: Themes :description: Configure the editor's theme. diff --git a/modules/ROOT/pages/enhanced-skins-and-icon-packs.adoc b/modules/ROOT/pages/enhanced-skins-and-icon-packs.adoc index 2daf4befc0..089cfe5210 100644 --- a/modules/ROOT/pages/enhanced-skins-and-icon-packs.adoc +++ b/modules/ROOT/pages/enhanced-skins-and-icon-packs.adoc @@ -7,7 +7,7 @@ The {prem_skins_icons} lets you quickly give {productname} a new look. Just choo == How to use a Enhanced skins -NOTE: Enhanced skins are only available with a link:{pricingpage}/[paid TinyMCE subscriptions]. +NOTE: Enhanced skins are only available with a link:{pricingpage}/[paid {productname} subscriptions]. Use the xref:editor-skin.adoc#skin[skin] option, in combination with the xref:add-css-options.adoc#content_css[content_css] option and the values listed below. diff --git a/modules/ROOT/pages/events.adoc b/modules/ROOT/pages/events.adoc index 912f25a988..22f2175abb 100644 --- a/modules/ROOT/pages/events.adoc +++ b/modules/ROOT/pages/events.adoc @@ -1,4 +1,4 @@ -= Events Available for TinyMCE += Events Available for {productname} :navtitle: Available Events :description_short: List of common editor events :description: List of common editor events diff --git a/modules/ROOT/pages/expressjs-pm.adoc b/modules/ROOT/pages/expressjs-pm.adoc index e2d6ac7c68..c14e00e202 100644 --- a/modules/ROOT/pages/expressjs-pm.adoc +++ b/modules/ROOT/pages/expressjs-pm.adoc @@ -1,4 +1,4 @@ -= Integrating TinyMCE into an Express JS App += Integrating {productname} into an Express JS App :navtitle: Node.js + Express :description: A quick start guide on integrating TinyMCE into an Express JS Application :keywords: integration, integrate, nodejs, node.js, express, express.js, expressjs diff --git a/modules/ROOT/pages/filter-content.adoc b/modules/ROOT/pages/filter-content.adoc index 00704f99ac..4358901de6 100644 --- a/modules/ROOT/pages/filter-content.adoc +++ b/modules/ROOT/pages/filter-content.adoc @@ -1,4 +1,4 @@ -= Filtering TinyMCE content += Filtering {productname} content :navtitle: Content filtering :description: Learn how to create clean, maintainable and readable content. diff --git a/modules/ROOT/pages/getting-started.adoc b/modules/ROOT/pages/getting-started.adoc index b2e35f2f86..d1b13094ef 100644 --- a/modules/ROOT/pages/getting-started.adoc +++ b/modules/ROOT/pages/getting-started.adoc @@ -12,7 +12,7 @@ [.lead] xref:introduction-to-tinymce.adoc[What is TinyMCE?] -What is TinyMCE and how do I add it to my project. +What is {productname} and how do I add it to my project. | [.lead] diff --git a/modules/ROOT/pages/how-to-guides.adoc b/modules/ROOT/pages/how-to-guides.adoc index dc0e56b8d3..cedb48ce9d 100644 --- a/modules/ROOT/pages/how-to-guides.adoc +++ b/modules/ROOT/pages/how-to-guides.adoc @@ -11,13 +11,13 @@ a| [.lead] xref:accessibility.adoc[Accessibility] -Learn how TinyMCE works with screen readers and how screen readers work with TinyMCE. +Learn how {productname} works with screen readers and how screen readers work with {productname}. a| [.lead] xref:security.adoc[Security] -Security information for TinyMCE. +Security information for {productname}. a| [.lead] @@ -41,7 +41,7 @@ a| [.lead] xref:annotations.adoc[Annotations] -TinyMCE Annotations provides the ability to describe particular features or add general information to a... +{productname} Annotations provides the ability to describe particular features or add general information to a... a| [.lead] @@ -99,9 +99,9 @@ Complete list of keyboard shortcuts. a| [.lead] -xref:introduction-to-bundling-tinymce.adoc[Bundling TinyMCE] +xref:introduction-to-bundling-tinymce.adoc[Bundling {productname}] -Bundling TinyMCE with Webpack, rollup.js, or Browserify. +Bundling {productname} with Webpack, rollup.js, or Browserify. a| [.lead] diff --git a/modules/ROOT/pages/ie-template-creation.adoc b/modules/ROOT/pages/ie-template-creation.adoc index d63d877197..27713a85a9 100644 --- a/modules/ROOT/pages/ie-template-creation.adoc +++ b/modules/ROOT/pages/ie-template-creation.adoc @@ -29,21 +29,21 @@ xref:content-behavior-options.adoc#newdocument_content[`newdocument_content`] Sets the content a new editor contains when the xref:available-menu-items.adoc#the-core-menu-items[File -> New document] menu item is invoked. -Used here to show a TinyMCE instance loading an entire almost-ready-to-send-out standard document. +Used here to show a {productname} instance loading an entire almost-ready-to-send-out standard document. a| [.lead] xref:non-editable-content-options.adoc#editable_root[`editable_root`] -Sets the initial editable state of a TinyMCE instance’s root. +Sets the initial editable state of a {productname} instance’s root. -Used here to show a TinyMCE being used to present an almost-ready-to-send-out standard document that cannot, in the main, be changed by an end-user. +Used here to show a {productname} being used to present an almost-ready-to-send-out standard document that cannot, in the main, be changed by an end-user. a| [.lead] xref:non-editable-content-options#editable_class[`editable_class`] -Specifies the class name that TinyMCE will use to determine which areas of content are editable. +Specifies the class name that {productname} will use to determine which areas of content are editable. Used here to setup the portions of an almost-ready-to-send-out standard document that end-users can (and should) edit. From e8e192d432314ad799594b3adc9df91fa7a72caa Mon Sep 17 00:00:00 2001 From: Karl Kemister-Sheppard Date: Tue, 15 Jul 2025 20:56:45 +1000 Subject: [PATCH 2/6] DOC-3220: Update the `README.md` file for `tinymce/docs` project to include updated information. (#3733) * DOC-3220: Update the README.md file for tinymce/docs to include updated information. * Update README.md * Update README.md --- README.md | 136 +++++++++++++++++++++++------------------------------- 1 file changed, 59 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index be169e039f..48fa09273e 100644 --- a/README.md +++ b/README.md @@ -1,119 +1,101 @@ -# TinyMCE documentation +# TinyMCE Documentation -This project maintains the documentation for TinyMCE at -[https://www.tiny.cloud/docs](https://www.tiny.cloud/docs). If you have any -modifications you wish to contribute, fork this project, make the changes -and submit a pull request. You will need to sign the contributor’s license -agreement, which will be emailed to you upon creating the pull request. +This project maintains the official documentation for TinyMCE, available at [https://www.tiny.cloud/docs](https://www.tiny.cloud/docs). If you have modifications or improvements to contribute, fork this repository, make the necessary changes, and submit a pull request (PR). A contributor's license agreement (CLA) must be signed before your contribution can be merged. This agreement will be sent via email when you create a PR. -This project is built using [Antora](https://antora.org/). +This project is built using [Antora](https://antora.org/), a powerful documentation site generator that supports multi-repository collaboration, content modularization, and flexible versioning. ## Contributing to the TinyMCE Documentation -If you would like to contribute to the TinyMCE project please read the TinyMCE Documentation Contributor’s Guide at either: +To contribute to the TinyMCE documentation project, please review the following resources: -- [TinyMCE Documentation - Contributor's Guide](https://www.tiny.cloud/docs/configure/contributing-docs/). -- [GitHub - How to contribute to TinyMCE’s documentation](https://github.com/tinymce/tinymce-docs/blob/release/docs-6/CONTRIBUTING.md#how-to-contribute-to-tinymces-documentation). +- [GitHub - How to contribute to TinyMCE’s documentation](https://github.com/tinymce/tinymce-docs/blob/main/CONTRIBUTING.md#how-to-contribute-to-tinymces-documentation) -## Working on TinyMCE documentation +These guides cover contribution guidelines, project structure, style conventions, and best practices for submitting changes. -### Compiling or building the documentation +## Setting Up Your Development Environment -The following procedure assists with building (or compiling) the documentation locally. Tiny recommends testing and reviewing changes locally prior to submitting a pull request. +To contribute effectively, you should set up a local development environment. This allows you to preview and test your changes before submitting a PR. -#### Installing Prerequisites +### Prerequisites -##### Linux users +Ensure the following software is installed: -You need the following programs installed on your computer: +- [Node.js](https://nodejs.org/en/) (version 22.9 or lower) +- [Yarn](https://yarnpkg.com/) +- Git -#### First time set up +### Cloning the Repository -Once you have installed any missing prerequisites, in a terminal or on a command prompt: +Clone the TinyMCE documentation repository: -1. Clone the git repository: - ``` - git clone git@github.com:tinymce/tinymce-docs.git - ``` - -2. Change directory into the cloned git repository: - ``` - cd tinymce-docs - ``` - -3. Run yarn install - ``` - yarn install - ``` +```bash +git clone git@github.com:tinymce/tinymce-docs.git +cd tinymce-docs +yarn +``` -#### Run the development version of the documentation +### Running the Development Server -To create a development version of the documentation, run: +To build and serve the documentation locally: -``` +```bash yarn build -yarn serve +yarn start-dev ``` +Visit [http://127.0.0.1:4000](http://127.0.0.1:4000) to view the documentation. The server supports hot-reloading, so changes will automatically reflect when you save your work. -To view the documentation; in a web browser, navigate to [http://127.0.0.1:4000](http://127.0.0.1:4000). - -> **Note**: The development version of the documentation will update automatically when you save changes locally. +> **Note:** The `yarn build` command generates the API reference documentation from the TinyMCE source code. To adjust the API version, edit the `API_VERSION` variable in the `scripts/api-reference.sh` file. Alternatively, use `yarn build-local` to build using a local TinyMCE instance: -The `yarn build` step will download the latest TinyMCE package and generate new API reference content from source code. To change the version of TinyMCE API, open the `-scripts/api-reference.sh` file and edit the API_VERSION to the TinyMCE version you would like to generate API docs for. Alternatively, to build using a local version of TinyMCE, `yarn build-local ../path/to/local/TinyMCE`. +Example: -> **Note**: The development server does not need to be stopped prior to running the `yarn build` command, antora should pick up the new changes generated by the build step. +```bash +yarn build-local ../path/to/local/tinymce +``` -#### TinyMCE API documentation +### API Documentation -The TinyMCE API documentation is maintained within the [TinyMCE project repository](https://github.com/tinymce/tinymce) and compiled for the documentation site using [MoxieDoc](https://github.com/tinymce/moxiedoc). +The TinyMCE API documentation is compiled and generated using [MoxieDoc](https://github.com/tinymce/moxiedoc) from the core [TinyMCE project repository](https://github.com/tinymce/tinymce). To update the published API docs: -To update the published API documentation: +1. Update the `.api-version` file. +2. Run `yarn build`: -1. Change the version in `.api-version`. -2. Run `yarn build`. + * Running `yarn build` downloads the TinyMCE package specified in `.api-version` and generates new API reference content from source. 3. Commit the changes. -Running `yarn build` downloads the TinyMCE package specified in `.api-version` and generates new API reference content from source. +> **Warning:** The API documentation should not be edited manually. Always generate it from source to ensure accuracy. -**Note:** The API documentation should never be edited manually. +## Live Demos -##### Prerequisites +Live demos can be added to the `modules/ROOT/examples/live-demos` directory. Reference them in your documentation with: -- [Node.js](https://nodejs.org/en/). - - -### Live Demos +```asciidoc +liveDemo::{sub-directory-name}[] +``` -New live demos can be added to the [modules/ROOT/examples/live-demos directory](modules/ROOT/examples/live-demos). It then can be referenced in your doc with the following code: +### Overriding the tinymce URL in Live Demos -``` - liveDemo::{sub-directory-name}[] -``` +By default, live demos load TinyMCE from the URL specified in the `tinymce_live_demo_url` attribute in the `antora.yml` file. This can be overridden for specific use cases: -#### Overriding the tinymce URL in live demos +* Testing a new feature on the `dev` channel. +* Running the site locally while testing live demos on a different channel. -All live demos usually get their `tinymce.min.js` URL from the `tinymce_live_demo_url` setting in the `antora.yml` file. -However, there are some instances where you wish to override this, e.g. +To help with this, there are two mechanisms for overriding the `tinymce.min.js` URL: - - You want to push/deploy a branch for a new feature that's only on the 'dev' channel. - - You want to run the site locally, but test out the live demos in a different channel. +1. **Global Override:** + To change the TinyMCE URL for all live demos, modify the `tinymce_live_demo_url` attribute in `antora-playbook-dev.yml`: -To help with this, there are two mechanisms for overriding the `tinymce.min.js` URL. + ```yaml + asciidoc: + attributes: + tinymce_live_demo_url: https://your-custom-url.com/tinymce.min.js + ``` - 1. Change the URL for all live demos by setting the `tinymce_live_demo_url` attribute in `antora-playbook-dev.yml`. For example: - ``` - asciidoc - attributes: - tinymce_live_demo_url: URL_to_script_file - ``` +2. **Per-Demo Override:** Use the `script_url_override` attribute: + To override the URL for a specific live demo: - 2. Change the URL for an individual live demo by setting `script_url_override` attribute in the live demo markup. For example: - ``` - liveDemo::{sub-directory-name}[script_url_override='URL_to_script_file'] - ``` + ```asciidoc + liveDemo::{sub-directory-name}[script_url_override='https://your-custom-url.com/tinymce.min.js'] + ``` - - This is useful if you want to deploy the develop branch for a feature only in the 'dev' channel. - - This only overrides the URL for one live demo. - - Don't use this in more than one live demo on a page. - - Don't use this long-term - when the feature is fully rolled-out, use the standard channel. +> **Caution:** Use this sparingly. Avoid using different URLs for multiple demos on the same page, and remember to revert these changes once the feature is fully released. From 08dd16ca21716b81a66131456c8dc2761682d6b5 Mon Sep 17 00:00:00 2001 From: Karl Kemister-Sheppard Date: Fri, 18 Jul 2025 16:05:59 +1000 Subject: [PATCH 3/6] DOC-3228: Cherry pick `tinymce/7` latest changes into `tinymce/8 >> release/8.0.0` branch. (#3754) * TINY-11909: Add `readonly` prop to Svelte tech ref (#3738) * TINY-11909: Add `readonly` prop to Svelte tech ref * TINY-11909: typo * TINY-11906: Add readonly prop to React tech ref (#3736) * TINY-11907: Add new readonly prop to Angular integration. (#3741) * TINY-11911: Add disabled and readonly to the web component tech ref (#3739) * TINY-11908: Add new readonly prop to Vue integration. (#3740) * DOC-3227: Update Document Converter JWT authentication requirements and plugin descriptions. (#3755) * DOC-3227: Update Document Converter JWT authentication requirements and plugin descriptions for clarity. * Update modules/ROOT/partials/misc/admon-jwt-authentication-requirements.adoc * DOC-3227: Update JWT authentication requirements for trial period clarity, add ifeval condition. * DOC-3239: Update ai proxy. (#3782) * DOC-3240: Remove registry URL from Docker pull commands in installation guides for export-to-pdf and import-from-word components. * DOC-3244: Fix typo in JWT token claims description for On-Premises documentation (#3796) * DOC-3244: Fix typo in JWT token claims description for On-Premises documentation. * Update modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-autorization-on-premises.adoc Co-authored-by: Andrew Herron --------- Co-authored-by: Andrew Herron * DOC-3245:Update license link for Tiny Cloud users in understanding editor loads documentation. (#3797) --------- Co-authored-by: lorenzo-pomili Co-authored-by: tiny-ben-tran Co-authored-by: Andrew Herron --- antora.yml | 2 +- modules/ROOT/pages/exportpdf.adoc | 4 +-- modules/ROOT/pages/exportword.adoc | 4 +-- modules/ROOT/pages/importword.adoc | 7 ++-- .../pages/understanding-editor-loads.adoc | 2 +- .../export-to-pdf-installation.adoc | 2 +- ...port-to-word-autorization-on-premises.adoc | 2 +- ...port-to-word-installation-on-premises.adoc | 2 +- .../integrations/angular-tech-ref.adoc | 20 +++++++++++ .../partials/integrations/react-tech-ref.adoc | 26 ++++++++++++-- .../integrations/svelte-tech-ref.adoc | 22 +++++++++++- .../partials/integrations/vue-tech-ref.adoc | 22 ++++++++++++ .../integrations/webcomponent-tech-ref.adoc | 22 ++++++++++++ ...admon-jwt-authentication-requirements.adoc | 35 ++++++++++++++----- 14 files changed, 147 insertions(+), 25 deletions(-) diff --git a/antora.yml b/antora.yml index 19391046b8..de3c4e76f5 100644 --- a/antora.yml +++ b/antora.yml @@ -15,7 +15,7 @@ asciidoc: webcomponent_url: https://cdn.jsdelivr.net/npm/@tinymce/tinymce-webcomponent/dist/tinymce-webcomponent.min.js jquery_url: https://cdn.jsdelivr.net/npm/@tinymce/tinymce-jquery@2/dist/tinymce-jquery.min.js openai_proxy_url: https://openai.ai-demo-proxy.tiny.cloud/v1/chat/completions - openai_proxy_token: eyJhbGciOiJFUzM4NCJ9.eyJhdWQiOlsiaHR0cHM6Ly9vcGVuYWkuYWktZGVtby1wcm94eS50aW55LmNsb3VkLyJdLCJleHAiOjE3NTEzMjgwMDAsImh0dHBzOi8vb3BlbmFpLmFpLWRlbW8tcHJveHkudGlueS5jbG91ZC9yb2xlIjoicHVibGljLWRlbW8iLCJpc3MiOiJodHRwczovL2FpLWRlbW8tcHJveHkudGlueS5jbG91ZC8iLCJqdGkiOiJmOGFmY2EyNC1mN2FhLTQxMjktYTc2Yy02YThlZDU3YjAyZjYiLCJzdWIiOiJhaS1hc3Npc3RhbnQtZGVtbyJ9.Xu0apHCbxgmRQTeTqrTIDFFhh2CgKeARRXa3mCxSGoCwZqkoQaFRZBCzDo8Xz7DuUa5mW2XHl-HYcYiXJM9ly16d0oY7lJefHBeLlmJEBE1CSttHBkCRWZS8eFLCasL6 + openai_proxy_token: eyJhbGciOiJFUzM4NCJ9.eyJhdWQiOlsiaHR0cHM6Ly9vcGVuYWkuYWktZGVtby1wcm94eS50aW55LmNsb3VkLyJdLCJleHAiOjE3ODI4NjQwMDAsImh0dHBzOi8vb3BlbmFpLmFpLWRlbW8tcHJveHkudGlueS5jbG91ZC9yb2xlIjoicHVibGljLWRlbW8iLCJpc3MiOiJodHRwczovL2FpLWRlbW8tcHJveHkudGlueS5jbG91ZC8iLCJqdGkiOiIxZWY3NjJiNi1mZDYyLTQ3ZWQtOGRkNS0yOGRmMzBkZDU4YmMiLCJzdWIiOiJhaS1hc3Npc3RhbnQtZGVtbyJ9.WC8GIY19MgZneDVZoA-Ttt9E7gNkD0Yl-pcM_5c2RT3RdV_zE0i4bPOGBJpg_g6wu_4ki2ery6_JZtk2Q9gXEBHH7fIu7hXDFS8uIV9qe8MyxEqqRncGFVDjSTldVXGS default_meta_keywords: tinymce, documentation, docs, plugins, customizable skins, configuration, examples, html, php, java, javascript, image editor, inline editor, distraction-free editor, classic editor, wysiwyg # product docker variables dockerimageimportfromwordexporttoword: registry.containers.tiny.cloud/docx-converter-tiny diff --git a/modules/ROOT/pages/exportpdf.adoc b/modules/ROOT/pages/exportpdf.adoc index a3a84750db..7032ad7341 100644 --- a/modules/ROOT/pages/exportpdf.adoc +++ b/modules/ROOT/pages/exportpdf.adoc @@ -28,8 +28,8 @@ tinymce.init({ selector: 'textarea', plugins: 'exportpdf', toolbar: 'exportpdf', -// Below option is only required when using the cloud-based Export to PDF plugin from Tiny.Cloud. -// Avoid setting it up during the trial period. + // Required for the cloud-based Export to PDF plugin with Tiny Cloud + // Create a JWT key in the Customer Portal for trial functionality to enable watermark-free exports during the trial period exportpdf_token_provider: () => { return fetch('http://localhost:3000/jwt', { // specify your token endpoint method: 'POST', diff --git a/modules/ROOT/pages/exportword.adoc b/modules/ROOT/pages/exportword.adoc index d275fb96ed..042dd16561 100644 --- a/modules/ROOT/pages/exportword.adoc +++ b/modules/ROOT/pages/exportword.adoc @@ -35,8 +35,8 @@ tinymce.init({ selector: 'textarea', plugins: 'exportword', toolbar: 'exportword', -// Below option is only required when using the cloud-based Export to Word plugin from Tiny.Cloud. -// Avoid setting it up during the trial period. + // Required for the cloud-based Export to Word plugin with Tiny Cloud + // Create a JWT key in the Customer Portal for trial functionality to enable watermark-free exports during the trial period exportword_token_provider: () => { return fetch('http://localhost:3000/jwt', { // specify your token endpoint method: 'POST', diff --git a/modules/ROOT/pages/importword.adoc b/modules/ROOT/pages/importword.adoc index 7c5a201d7f..2134fa1653 100644 --- a/modules/ROOT/pages/importword.adoc +++ b/modules/ROOT/pages/importword.adoc @@ -1,4 +1,3 @@ - = {pluginname} plugin :plugincode: importword :pluginname: Import from Word @@ -30,9 +29,9 @@ tinymce.init({ selector: 'textarea', plugins: 'importword', toolbar: 'importword', -// Below option is only required when using the cloud-based Import from Word plugin from Tiny.Cloud. -// Avoid setting it up during the trial period. - importword_token_provider: () => { // required when using the Import from Word plugin with Tiny Cloud. + // Required for the cloud-based Import from Word plugin with Tiny Cloud + // Create a JWT key in the Customer Portal for trial functionality to enable watermark-free exports during the trial period + importword_token_provider: () => { return fetch('http://localhost:3000/jwt', { // specify your token endpoint method: 'POST', headers: { 'Content-Type': 'application/json' }, diff --git a/modules/ROOT/pages/understanding-editor-loads.adoc b/modules/ROOT/pages/understanding-editor-loads.adoc index 7719b0e6ec..83a0376d6e 100644 --- a/modules/ROOT/pages/understanding-editor-loads.adoc +++ b/modules/ROOT/pages/understanding-editor-loads.adoc @@ -6,7 +6,7 @@ == Understanding editor loads for {productname} [IMPORTANT] -This information is only relevant to Tiny Cloud users. Users who self-host the open source version of {productname} are not subject to editor load restrictions, but must comply with the https://github.com/tinymce/tinymce/blob/master/LICENSE.TXT[open source license]. +This information is only relevant to Tiny Cloud users. Users who self-host the open source version of {productname} are not subject to editor load restrictions, but must comply with the link:https://github.com/tinymce/tinymce/blob/release/{productmajorversion}/LICENSE.md[open source license]. An editor load is the event that occurs each time {productname} is initialized in your application. The editor dispatches the 'init' event to indicate a successful load. For example, if 100 users load {productname} 10 times each, the result would be 1,000 editor loads. diff --git a/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-installation.adoc b/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-installation.adoc index e2b5727b8a..bba40324ba 100644 --- a/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-installation.adoc +++ b/modules/ROOT/partials/individually-licensed-components/export-to-pdf/export-to-pdf-installation.adoc @@ -32,7 +32,7 @@ Pull the Docker image: [source, sh, subs="attributes+"] ---- -docker pull registry.containers.tiny.cloud/{dockerimageexporttopdf}:[version] +docker pull {dockerimageexporttopdf}:[version] ---- [TIP] diff --git a/modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-autorization-on-premises.adoc b/modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-autorization-on-premises.adoc index 444a629f2d..180ceac642 100644 --- a/modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-autorization-on-premises.adoc +++ b/modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-autorization-on-premises.adoc @@ -17,7 +17,7 @@ If the `SECRET_KEY` is not setup during the installation, then {pluginname} On-P * it is not issued in the future (e.i. the `iat` timestamp cannot be newer than the current time), * it has not expired yet. -Tokens for the {pluginname} On-Premises do not require any additional claims such as the environment ID (which is specific for Collaboration Server On-Premises), the token can be created with an empty payload. +Tokens for the {pluginname} On-Premises do not require any additional claims such as the `aud` (which is specific to cloud-based document converters), so the token can be created with an empty payload. If the specific use case involves sending requests from a backend server, then JWT tokens can be generated locally, as shown in the below request example. diff --git a/modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-installation-on-premises.adoc b/modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-installation-on-premises.adoc index efb79a5ae1..aa508f7c14 100644 --- a/modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-installation-on-premises.adoc +++ b/modules/ROOT/partials/individually-licensed-components/import-from-word-and-export-to-word/import-from-word-and-export-to-word-installation-on-premises.adoc @@ -32,7 +32,7 @@ Pull the Docker image: [source, sh, subs="attributes+"] ---- -docker pull registry.containers.tiny.cloud/{dockerimageimportfromwordexporttoword}:[version] +docker pull {dockerimageimportfromwordexporttoword}:[version] ---- [TIP] diff --git a/modules/ROOT/partials/integrations/angular-tech-ref.adoc b/modules/ROOT/partials/integrations/angular-tech-ref.adoc index 4a7261db9f..ce1ebbcb8f 100644 --- a/modules/ROOT/partials/integrations/angular-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/angular-tech-ref.adoc @@ -8,6 +8,7 @@ ** xref:licensekey[`+licenseKey+`] ** xref:cloudchannel[`+cloudChannel+`] ** xref:disabled[`+disabled+`] +** xref:readonly[`+readonly+`] ** xref:id[`+id+`] ** xref:init[`+init+`] ** xref:initialvalue[`+initialValue+`] @@ -97,6 +98,7 @@ The editor accepts the following properties: apiKey="no-api-key" cloudChannel="{productmajorversion}" [disabled]="false" + [readonly]="false" id="" [init]="{ }" initialValue="" @@ -193,6 +195,24 @@ The `+disabled+` property can dynamically switch the editor between a "disabled" ---- +[[readonly]] +=== `+readonly+` + +The `+readonly+` property can dynamically switch the editor between a "read-only" mode (`+true+`) and the standard editable mode (`+false+`). + +*Type:* `+Boolean+` + +*Default value:* `+false+` + +*Possible values:* `+true+`, `+false+` + +==== Example: using `+readonly+` + +[source,html] +---- + +---- + [[id]] === `+id+` diff --git a/modules/ROOT/partials/integrations/react-tech-ref.adoc b/modules/ROOT/partials/integrations/react-tech-ref.adoc index 41ed4d0a97..22693ca86d 100644 --- a/modules/ROOT/partials/integrations/react-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/react-tech-ref.adoc @@ -8,6 +8,7 @@ ** xref:licenseKey[`+licenseKey+`] ** xref:cloudchannel[`+cloudChannel+`] ** xref:disabled[`+disabled+`] +** xref:readonly[`+readonly+`] ** xref:id[`+id+`] ** xref:init[`+init+`] ** xref:initialvalue[`+initialValue+`] @@ -143,7 +144,8 @@ xref:toolbar[`+toolbar+`]:: Specify the editor toolbar. This will *override* the These props can be updated after the editor is initialized. Note that there are xref:event-binding[other events] not mentioned here. -xref:disabled[`+disabled+`]:: Should the editor be in read-only mode. +xref:disabled[`+disabled+`]:: Should the editor be disabled. +xref:readonly[`+readonly+`]:: Should the editor be in read-only mode. xref:initialvalue[`+initialValue+`]:: The starting value of the editor. Changing this value after the editor has loaded will reset the editor (including the editor content). @@ -240,7 +242,7 @@ For information {productname} development channels, see: xref:editor-plugin-vers [[disabled]] === `+disabled+` -The `+disabled+` prop can dynamically switch the editor between a "disabled" (read-only) mode (`+true+`) and the standard editable mode (`+false+`). +The `+disabled+` prop can dynamically toggle the editor's disabled state. *Type:* `Boolean` @@ -257,6 +259,26 @@ The `+disabled+` prop can dynamically switch the editor between a "disabled" (re /> ---- +[[readonly]] +=== `+readonly+` + +The `+readonly+` prop can dynamically switch the editor between a read-only mode (`+true+`) and the standard editable mode (`+false+`). + +*Type:* `Boolean` + +*Default value:* `+false+` + +*Possible values:* `+true+`, `+false+` + +==== Example: using `+readonly+` + +[source,jsx] +---- + +---- + [[id]] === `+id+` diff --git a/modules/ROOT/partials/integrations/svelte-tech-ref.adoc b/modules/ROOT/partials/integrations/svelte-tech-ref.adoc index 5929994775..179f871367 100644 --- a/modules/ROOT/partials/integrations/svelte-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/svelte-tech-ref.adoc @@ -7,6 +7,7 @@ Covered in this section: ** xref:id[id] ** xref:inline[inline] ** xref:disabled[disabled] +** xref:readonly[readonly] ** xref:scriptsrc[scriptsrc] ** xref:conf[conf] * xref:component-binding[Component binding] @@ -25,6 +26,7 @@ The `+tinymce-svelte+` `+Editor+` component accepts the following properties: id="uuid" inline=false disabled=false + readonly=false scriptSrc=undefined conf={} modelEvents="input change undo redo" @@ -134,7 +136,7 @@ Sets the editor to use inline mode. [[disabled]] === `+disabled+` -Set the editor to readonly mode. +Set the editor to disabled. *Type:* `+Boolean+` @@ -149,6 +151,24 @@ Set the editor to readonly mode. /> ---- +[[readonly]] +=== `+readonly+` + +Set the editor to readonly mode. + +*Type:* `+Boolean+` + +*Default value:* `+false+` + +==== Example using `+readonly+` + +[source,jsx] +---- + +---- + [[scriptsrc]] === `+scriptSrc+` diff --git a/modules/ROOT/partials/integrations/vue-tech-ref.adoc b/modules/ROOT/partials/integrations/vue-tech-ref.adoc index cb24552b92..fd230670fe 100644 --- a/modules/ROOT/partials/integrations/vue-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/vue-tech-ref.adoc @@ -7,6 +7,7 @@ ** xref:license-key[`+licenseKey+`] ** xref:cloud-channel[`+cloud-channel+`] ** xref:disabled[`+disabled+`] +** xref:readonly[`+readonly+`] ** xref:id[`+id+`] ** xref:init[`+init+`] ** xref:initial-value[`+initial-value+`] @@ -99,6 +100,7 @@ The editor accepts the following properties: api-key="no-api-key" cloud-channel="{productmajorversion}" :disabled=false + :readonly=false id="uuid" :init= "{ }" initial-value="" @@ -205,6 +207,26 @@ The `+disabled+` property can dynamically switch the editor between a "disabled" /> ---- +[[readonly]] +=== `+readonly+` + +The `+readonly+` property can dynamically switch the editor between a "read-only" mode (`+true+`) and the standard editable mode (`+false+`). + +*Type:* `+Boolean+` + +*Default value:* `+false+` + +*Possible values:* `+true+`, `+false+` + +==== Example: using `+readonly+` + +[source,html] +---- + +---- + [[id]] === `+id+` diff --git a/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc b/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc index 1640dc3354..ffb83ab3dc 100644 --- a/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc @@ -8,6 +8,8 @@ ** xref:loading-plugins[Loading plugins] ** xref:setting-the-editor-width[Setting the editor width] ** xref:setting-the-editor-height[Setting the editor height] +** xref:setting-readonly[Setting the editor to readonly] +** xref:setting-disabled[Setting the editor to disabled] ** xref:setting-the-toolbar[Setting the toolbar] ** xref:setting-the-toolbar-mode[Setting the toolbar mode] ** xref:setting-the-menu-bar[Setting the menu bar] @@ -146,6 +148,26 @@ To set the height of the editor (content area and user interface), use the `+hei ---- + +[[setting-readonly]] +=== Setting readonly mode + +To set the editor's mode to `readonly`. + +[source,html] +---- + +---- + +[[setting-disaled-state]] +=== Setting disabled state +To set the editor to a disabled state. + +[source,html] +---- + +---- + [[setting-the-toolbar]] === Setting the toolbar diff --git a/modules/ROOT/partials/misc/admon-jwt-authentication-requirements.adoc b/modules/ROOT/partials/misc/admon-jwt-authentication-requirements.adoc index d4445f6186..d2858ee3e6 100644 --- a/modules/ROOT/partials/misc/admon-jwt-authentication-requirements.adoc +++ b/modules/ROOT/partials/misc/admon-jwt-authentication-requirements.adoc @@ -2,17 +2,34 @@ ==== The {pluginname} plugin **requires** JWT authentication when using the {companyname} Cloud service. -* Configure the `{plugincode}_token_provider` option to specify the endpoint for retrieving a valid JWT token. +**Authentication Setup:** -For more information on how to set up JWT authentication with {pluginname}, see examples: +. Create a JWT key in the Customer Portal +. Configure the `{plugincode}_token_provider` option to specify the endpoint for retrieving your JWT token -* xref:{pluginfilename}-with-jwt-authentication-nodejs.adoc[{pluginname} with JWT authentication (Node.js)] -* xref:{pluginfilename}-with-jwt-authentication-php.adoc[{pluginname} with JWT authentication (PHP)] +For more information on how to set up JWT authentication with {pluginname}, see examples: xref:{pluginfilename}-with-jwt-authentication-nodejs.adoc[{pluginname} with JWT authentication (Node.js)] or xref:{pluginfilename}-with-jwt-authentication-php.adoc[{pluginname} with JWT authentication (PHP)] -**Trial period behavior:** +**Trial period behavior** -* The {pluginname} plugin runs in evaluation mode and adds a watermark to exported content. -* The `{plugincode}_token_provider` option is "not required" during the trial period. -* If the trial period "expires" or the plugin lacks the necessary entitlement, it becomes _non-functional_. -* Attempting to use JWT authentication during the trial will result in an _error_. +ifeval::["{plugincode}" == "importword"] +* **Trial Period:** +** With JWT: Full functionality, unlimited usage, no watermarks. +** Without JWT: Full functionality with watermarks and page limits. + +* **After Trial:** +** With {pluginname} add-on + JWT: Full functionality (subscription-based) +** Without add-on: Plugin entitlements are `disabled` and functionality is no longer available. +endif::[] + +ifeval::["{plugincode}" != "importword"] +* **Trial Period:** +** With JWT: Full functionality, unlimited usage, no watermarks. +** Without JWT: Full functionality with watermarks. + +* **After Trial:** +** With {pluginname} add-on + JWT: Full functionality (subscription-based) +** Without add-on: Plugin entitlements are `disabled` and functionality is no longer available. +endif::[] + +Visit the link:https://www.tiny.cloud/auth/login/[account portal] to obtain your JWT key and test full functionality. ==== \ No newline at end of file From deb117aca5b7b126c670df647a03ed1d6d2aea8b Mon Sep 17 00:00:00 2001 From: Karl Kemister-Sheppard Date: Tue, 22 Jul 2025 12:15:22 +1000 Subject: [PATCH 4/6] DOC-3221: Refine language and structure in CONTRIBUTING.md for clarity and consistency. (#3735) --- CONTRIBUTING.md | 168 ++++++++++++++++++++++++------------------------ 1 file changed, 83 insertions(+), 85 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c436d9243a..976600a0d1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,34 +1,34 @@ -This page outlines how you can provide feedback and contribute to TinyMCE documentation. +This page provides guidance on submitting feedback and contributing to TinyMCE documentation. # Contributor Code of Conduct -For our Contributor Code of Conduct, visit our [Contributor Covenant Code of Conduct on GitHub](https://github.com/tinymce/tinymce-docs/blob/develop/CODE_OF_CONDUCT.md#contributor-covenant-code-of-conduct). +To review the Contributor Code of Conduct, visit the [Contributor Covenant Code of Conduct on GitHub](https://github.com/tinymce/tinymce-docs/blob/develop/CODE_OF_CONDUCT.md#contributor-covenant-code-of-conduct). -# How to contribute to TinyMCE’s documentation +# Contributing to TinyMCE documentation -We welcome people with technical writing experience to help make TinyMCE’s docs as useful to our community as possible. Although you don’t need to be an expert developer to contribute, a basic understanding of software development is helpful. +Contributions from individuals with technical writing experience are encouraged to support the clarity and usefulness of the TinyMCE documentation. While expertise in software development is not required, a basic understanding is beneficial. -What is more important is your ability to articulate complex ideas. Our goal is to help developers understand TinyMCE’s functionality as quickly as possible. +The primary requirement is the ability to communicate complex concepts clearly. The goal is to help developers understand and apply TinyMCE functionality efficiently. -Simply branch the [docs GitHub repository](https://github.com/tinymce/tinymce-docs) and submit a PR, or reach out to the [TinyMCE docs team](https://github.com/tinymce/tinymce-docs/issues/new?assignees=&labels=question&template=question.md) if you have a specific question. +To contribute, create a branch from the [docs GitHub repository](https://github.com/tinymce/tinymce-docs) and submit a pull request (PR). For documentation-specific questions, open an issue using the [TinyMCE docs team contact form](https://github.com/tinymce/tinymce-docs/issues/new?assignees=&labels=question&template=question.md). # TinyMCE documentation tech stack -The documentation is built with [Antora](https://antora.org/) and text files are written in [AsciiDoc](https://asciidoc.org/). You will find the [repo here](https://github.com/tinymce/tinymce-docs). +The documentation is built with [Antora](https://antora.org/), and text content is authored in [AsciiDoc](https://asciidoc.org/). The source repository is available on GitHub: [tinymce-docs](https://github.com/tinymce/tinymce-docs). -## Highlighting +## Syntax highlighting -Code language syntax and associated elements are highlighted using an open and closing backtick. For example, this `object` is actually enclosed with backticks like this: `object`. +Inline code elements must be enclosed in backticks. For example, to highlight `object`, use the following syntax: -Highlight words relating specifically to executable parts of software languages. Keys and their values when pertaining to objects and methods (particularly the case with TinyMCE) should have backticks. We cannot cover every use case here and contributors need to use their best judgment. +Highlight keywords that refer to executable parts of a language. Keys and values used in objects and method options (common in TinyMCE) should also be enclosed in backticks. Exercise judgment for other cases not explicitly covered here. ## Code snippets -Code snippets should be complete, executable code blocks starting with the `tinymce` object. We write code snippets using [source blocks](https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/). These start by specifying the `source` style and the code snippet language in square brackets to enable syntax highlighting. The language is typically html, css, js, or ts. +Code snippets must be complete, executable blocks that begin with the `tinymce` object. Snippets are formatted using [AsciiDoc source blocks](https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/), which start with a `[source,]` declaration. Supported languages include `html`, `css`, `js`, and `ts`. -Include any key values pairs and method options that are required to enable a user to test the snippet in a local HTML file. You do not need to include the `html` surrounding the `tinymce` object that would be required to make the snippet work. +Each snippet must include the key-value pairs and method options necessary to run the example in a local HTML file. It is not necessary to include the full HTML structure around the `tinymce` object. -For example, this is good: +**Valid example:** ```js [source, js] ---- @@ -40,7 +40,7 @@ For example, this is good: ---- ``` -This is not: +**Invalid example:** ```js [source, js] ---- @@ -55,7 +55,7 @@ This is not: ## URLs and links -Resources to be linked take the form of a URL following by the linked text between two brackets. Linking an external resource looks like this: +Resources must be linked using a URL followed by the linked text in square brackets. External links are formatted as follows: ``` hello, http://www.example.com[text to link] to the URL example.com. @@ -63,7 +63,7 @@ Resources to be linked take the form of a URL following by the linked text betwe ## Live demos -New live demos can be added to the [modules/ROOT/examples/live-demos directory](modules/ROOT/examples/live-demos). It then can be referenced in your doc with the following code: +New live demos can be added to the [`modules/ROOT/examples/live-demos`](modules/ROOT/examples/live-demos) directory. These demos can then be referenced in documentation using: ``` liveDemo::{sub-directory-name}[] @@ -72,20 +72,19 @@ New live demos can be added to the [modules/ROOT/examples/live-demos directory]( ## Adding metadata to a page -Every page should have a meta section immediately after the heading containing information that is both informative and system critical. If you are creating a page or editing one that currently has inadequate meta information, please read the comments next to the default meta fields below. +Each page must include a metadata section immediately following the top-level heading. This section contains essential system-level information. When creating or updating a page, ensure that the following meta fields are present and accurate: ``` - :navtitle: // Descriptive title for the navigation bar, if omitted nav defaults to title field. - :description: // Detailed description at page level for the header section under the title. - :keywords: // Comma-separated list of keywords in the content. + :navtitle: // Descriptive title for the navigation bar. If omitted, defaults to the value of the `title` field. + :description: // Detailed description at page header section. + :keywords: // Comma-separated list of relevant keywords. ``` # Recommended tools -The following tools are recommended for significant edits to the documentation. The warnings and notifications from these tools should only be used as *guides*, not as *rules*. +The following tools are recommended for significant documentation contributions. The feedback provided by these tools should serve as guidance rather than strict requirements: -- A Spelling Checker (US English). Note: Some IDE/text editor spelling - checkers work well with Pascal-case, Camel-case, and Snake-case. +- A US English spelling checker. Many IDEs and text editors support spell checking for PascalCase, camelCase, and snake_case. - Alex - [Alex.js integrations](https://alexjs.com/#integrations). @@ -94,36 +93,29 @@ The following tools are recommended for significant edits to the documentation. # Style guide -You are not required to know the style guide, **but** changes may be requested on GitHub pull requests to Tiny documentation where these guidelines are not met. +Familiarity with the style guide is not required; however, edits may be requested on pull requests if content does not align with documentation standards. -The Tiny documentation style guide is based on the [Readability Guidelines](https://readabilityguidelines.co.uk) provided by [Content Design London](https://contentdesign.london/usability/readability-guidelines/). We have chosen this guide because it’s: +The TinyMCE documentation style guide is based on the [Readability Guidelines](https://readabilityguidelines.co.uk) provided by [Content Design London](https://contentdesign.london/usability/readability-guidelines/). This guide was selected due to its community-driven approach and strong focus on readability. -- open to the community - -- focused on readability. - -The information in the following subsections gives an overview of key points and lists both exceptions and additions. Please follow the guidelines on this page when they differ from the linked information. +The following subsections provide key highlights, exceptions, and additions to the source guidelines. When inconsistencies arise, defer to the guidelines listed on this page. ## Keep it simple -Use short, simple words where possible. Use formal language. +Favor short, simple words. Use formal language. -Do not use: +Avoid the following: -- Long sentences. +- Slang (e.g., *there you go*) -- Slang; such as *there you go*. +- Jargon (e.g., *leverage*, *streamline*) -- Jargon; such as *leverage* and *streamline*. +- Ambiguous contractions (e.g., *there’d*, *it’ll*) -- Ambiguous contractions; such as *there’d*, and *it’ll*. +- Latin terms (e.g., *i.e.*, *e.g.*, *etc.*, *vs.*, *via*) -- Latin terms; such as *i.e.*, *e.g.*, *etc.*, *vs.*, and *via*. +- Metaphors (e.g., *cherry picking*, *nutshell*) -- Metaphors; such as *cherry picking* and *nutshell*. - -- Complex or specialist terms; such as *chrome* (the toolbar, menu - bar, status bar) and *upstream*. +- Complex or specialist terms (e.g., *chrome* as in UI elements, *upstream*) For guidelines on using specialist terms, see: [Content Design London: Readability Guidelines - Specialist terms](https://readabilityguidelines.co.uk/clear-language/specialist-terms/). @@ -137,19 +129,19 @@ For information on: For a short list of some commonly used Latin terms, see: [Australian Government Style Manual - Latin shortened forms](https://www.stylemanual.gov.au/format-writing-and-structure/clear-language-and-writing-style/plain-english-and-word-choice/latin-shortened-forms). -## Use US English (en\_US) spelling +## Use US English (en_US) spelling -Use United States English. For example: +Use United States English spelling conventions. For example: -- "behavior" rather than "behaviour". +- "behavior" instead of "behaviour" -- "canceled" rather than "cancelled". +- "canceled" instead of "cancelled" ## Use proper names for programs and languages -When referring to the name of a development language, use the proper name or the industry convention. +Always refer to development languages and software using their proper names or recognized industry conventions. -For example: +Correct examples include: - "CSS" not "css" @@ -157,7 +149,7 @@ For example: - "React" not "React-js" -When using these terms in code elements (\`) or pre blocks (\`\`\`), use standard syntax. Such as: +When referencing code elements (`` ` ``) or fenced code blocks (`` ``` ``), use standard syntax. For example: - `tinymce` @@ -165,7 +157,7 @@ When using these terms in code elements (\`) or pre blocks (\`\`\`), use standar - `var React = require('react');` -When referring to a program, use the proper name. +When referring to software programs, use their full, proper names. For example: For example: @@ -177,53 +169,53 @@ For example: ## TinyMCE or tinymce -Use the capitalized version of TinyMCE when referring to the open source project or the editor. "TinyMCE" is an abbreviation of "Tiny MoxieCode Editor", but is better known as TinyMCE. +Use the capitalized form **TinyMCE** when referring to the open source project or the editor interface. TinyMCE is derived from "Tiny MoxieCode Editor," but is more commonly known by its abbreviation. -Use lowercase when referring to the `tinymce` JavaScript object. +Use lowercase when referring to the **`tinymce`** JavaScript object. -## Use Active voice not Passive voice +## Use active voice, not passive voice -Use active voice. Passive voice decreases readability and comprehension. +Use active voice to improve readability and comprehension. Passive constructions should be avoided unless grammatically necessary. -For information on the difference between active and passive voice, see: [Grammar Girl: Active Voice Versus Passive Voice](https://www.quickanddirtytips.com/education/grammar/active-voice-versus-passive-voice). +For a detailed explination, see: [Grammar Girl: Active Voice Versus Passive Voice](https://www.quickanddirtytips.com/education/grammar/active-voice-versus-passive-voice). ## Titles and headings -Titles and headings should be: +Titles and headings must be: -- Descriptive but concise +- Descriptive yet concise -- Written using Sentence-case capitalization. +- Written in sentence case capitalization. -Sentence case capitalization is more comfortable to read in technical documentation. +Sentence case capitalization improves readability in technical documentation. -For guidelines on headings and titles, see: [Content Design London: Readability Guidelines - Headings and titles](https://readabilityguidelines.co.uk/content-design/headings-titles/). +For additional guidence, see: [Content Design London: Readability Guidelines - Headings and titles](https://readabilityguidelines.co.uk/content-design/headings-titles/). ## Using abbreviations, acronyms, and intialisms -General points: +General guidelines: -- Do not use points or spaces. +- Do not use periods or spaces in abbreviations. -- Write out "for example" and "that is" in full (not "eg" or "ie"). +- Write out "for example" and "that is" in full (not "e.g." or "i.e."). -- If an acronym is better understood than the full text, use the acronym. +- When the acronym is more familiar than its expanded form, use the acronym. -- Use all capital letters for initialisms. +- Use all capital letters for initialisms (e.g., HTML, CSS). -- Start with a capital letter for acronyms. +- Use an initial capital letter for acronyms (e.g., AsciiDoc, Antora). -- Capitalize single letters in expressions. +- Capitalize single-letter expressions (e.g., X-axis, Y-coordinate). -- Provide full text explanations. +- Provide the full form of any abbreviation or acronym on first use. -- Consider providing a full explanation each time. +- When clarity is critical, consider repeating the full form with each usage. For guidelines on using abbreviations, acronyms, and intialisms; see: [Content Design London: Readability Guidelines - Abbreviations and acronyms](https://readabilityguidelines.co.uk/grammar-points/abbreviations-and-acronyms/). ## Adverbs -Avoid adverbs, such as: *very* and *usually*. +Avoid adverbs such as *very*, *usually*, *quickly*, and *clearly*, unless necessary for precision. For examples and a definition of an adverb, see: [Cambridge Dictionary: Grammar - Adverbs](https://dictionary.cambridge.org/grammar/british-grammar/adverbs_2). @@ -231,57 +223,63 @@ For (casual) information on removing adverbs, see: [Grammar Girl: How to Elimina ## Contractions -Avoid contractions, such as: *can’t*, *don’t*, *they’re*, and *could’ve*. +Avoid contractions. Use full word forms to improve clarity and consistency in technical documentation. + +- Examples to avoid include: *can’t*, *don’t*, *they’re*, *could’ve*. For information on contractions, see: [Content Design London: Readability Guidelines - Contractions](https://readabilityguidelines.co.uk/grammar-points/contractions/). ## Hyphens -Limit use of hyphens. Some general pointers: +Use hyphens only when necessary to avoid confusion or ambiguity. Follow current usage standards and remain consistent throughout the content. + +General principles: -- Only use a hyphen if the word or phrase is confusing without it. +- Use a hyphen if omitting it would cause confusion. -- Make sure your hyphen usage is up to date. +- Avoid outdated or unnecessary hyphenation. -- Be consistent with hyphen usage. +- Maintain consistent usage patterns across similar terms. For guidelines on using hyphens, see: [Content Design London: Readability Guidelines - Hyphens and dashes](https://readabilityguidelines.co.uk/grammar-points/hyphens-and-dashes/). ## Pronouns -Avoid pronouns, such as: *we*, *you*, *their*, and *I*. +Avoid pronouns, such as *we*, *you*, *their*, and *I*. For examples and a definition of an pronoun, see: [Cambridge Dictionary: Grammar - Pronouns](https://dictionary.cambridge.org/grammar/british-grammar/pronouns_1). For reasons to avoid pronouns, see: [Content Design London: Readability Guidelines - We, you, our, your, my](https://readabilityguidelines.co.uk/audiences-devices-channels/we-you-our-your-my/). -## First, Second, or Third Person Perspective +## First, second, or third person perspective -Write in a second person perspective, such as: *You*, and *your*. Remember to avoid using pronouns, including *you* and *your*. +Documentation should avoid using any narrative perspective that requires pronouns. Although second person (*you*, *your*) is often used in general guidance, pronouns should still be excluded for clarity and consistency. -For information on writing in a second person perspective, see: [Grammar Girl: First, Second, and Third Person](https://www.quickanddirtytips.com/education/grammar/first-second-and-third-person?page=1). +For an explanation of narrative perspectives, see: [Grammar Girl: First, Second, and Third Person](https://www.quickanddirtytips.com/education/grammar/first-second-and-third-person?page=1). ## Links and cross-references When adding links or cross-references: -- Make link text meaningful. +- Use meaningful and descriptive link text. -- Avoid mid-sentence links. +- Avoid placing links mid-sentence. -- Match the destination content. +- Ensure link text accurately matches the destination content. -- Use sentence case. +- Use sentence case for link text. For guidelines on adding links to the documentation, see: [Content Design London: Readability Guidelines - Links](https://readabilityguidelines.co.uk/content-design/links/). ## Images and icons -Avoid adding images to the documentation. They can quickly become outdated. Use a description or a "demo" instead. +Avoid adding images unless necessary. Images may become outdated quickly and often require maintenance. When applicable, replace images with text descriptions or live demos. + +When images are required: -When images are used, reuse existing images if possible. This includes icons. +- Reuse existing images when possible (including icons). -Ensure a brief description of the image is provided in the alternative text attribute. +- Always include descriptive alternative text using the `alt` attribute. For information on providing useful alternative text for images, see: [WCAG 2.1 specification: G95 - Providing short text alternatives that provide a brief description of the non-text content](https://www.w3.org/WAI/WCAG21/Techniques/general/G95.html). From 45240c50bf3547ce1a2e339410df4bc0b229e677 Mon Sep 17 00:00:00 2001 From: Mitchell Crompton Date: Tue, 22 Jul 2025 20:01:38 +1000 Subject: [PATCH 5/6] DOC-3246: Suggested Edits and User Lookup API documentation (#3798) * Initial setup * add live demo template * Update API sections * Add description of plugin and examples for API options * Comment out note about stacked changes and minor copy edits * add live demo * rename plugin to Suggested Edits * replace all instanes of plugin name and code * Update docs to include Review Permissions V1 * Fix demo for Review Permissions * Add Suggestions section and demo * Revise Suggestions content * Initial setup * add live demo template * Update API sections * Add description of plugin and examples for API options * Comment out note about stacked changes and minor copy edits * add live demo * rename plugin to Suggested Edits * replace all instanes of plugin name and code * Update docs to include Review Permissions V1 * Fix demo for Review Permissions * Add Suggestions section and demo * Revise Suggestions content * DOC-3174: Updating suggestedits docs * DOC-3174: Remove unused options * Update explanation of plugin and add UID options * fix UID options * Update interactive demo * Update suggestededits_access demo * fix UID options * Update option and api examples * Fix UID options * DOC-3174: Adding icons * DOC-3174: Add `Using the User Lookup API` page * Update UID options partials * DOC-3174: Some edits * DOC-3174: Add `UserLookup` partials to `revisionhistory` and `tinycomments` pages * DOC-3174: Replace reference to `userDb` with `userinfos` * DOC-3174: Remove usage of `uid` in `suggestededits` * DOC-3174: Fix indentations within `Types of suggestions` * DOC-3174: Update interactive demos and examples for `embedded` mode in `tinycomments` * DOC-3174: Update interactive demos and examples for `revisionhistory` * DOC-3174: Rewrite suggested edits * DOC-3174: Edits * DOC-3246: More docs * DOC-3246: Fixed, premium-plugin table, removed template material, fixed whitespace, added missing available-toolbar-buttons. * DOC-3246: Add deprecation messaging to `tinycomments_fetch_author_info` option * DOC-3246: Update interactive examples on `comments-with-mentions` page * DOC-3246: Include `user_id` and `fetch_users` options in `Required Comments options for embedded mode` section * DOC-3246: Update `tinycomments_mentions_enabled` to include `user_id` and `fetch_users` * DOC-3246: Demo updates * Apply suggestions from code review Co-authored-by: Andrew Herron * DOC-3246: Use lookup over `find` in `fetch_users` * DOC-3246: Updates to `fetch_users` partial * DOC-3246: Improve examples and access option * DOC-3246: Update fetch_users option across other plugin examples * DOC-3246: Single quotes only * Apply suggestions from code review Co-authored-by: Andrew Herron Co-authored-by: Karl Kemister-Sheppard * DOC-3246: Improve API examples * DOC-3246: Improvements * Apply suggestions from code review Co-authored-by: Karl Kemister-Sheppard Co-authored-by: Shan * DOC-3246: Final edits * DOC-3246: Final final edit * DOC-3246: Docs tweaks * DOC-3246: userlookup api docs restructure and organisation update. * Apply suggestions from code review Co-authored-by: Andrew Herron * DOC-3246: Final improvements --------- Co-authored-by: Sorita Heng Co-authored-by: kimwoodfield Co-authored-by: Karl Kemister-Sheppard Co-authored-by: Andrew Herron Co-authored-by: Shan --- antora-playbook.yml | 2 +- antora.yml | 2 +- .../comments-callback-with-mentions/index.js | 54 ++- .../comments-embedded-with-mentions/index.js | 69 +-- .../live-demos/comments-embedded/index.js | 2 +- .../live-demos/revisionhistory/index.js | 23 +- .../suggestededits-access-feedback/example.js | 21 + .../suggestededits-access-feedback/index.html | 44 ++ .../suggestededits-access-feedback/index.js | 437 ++++++++++++++++++ .../suggestededits-access-read/example.js | 21 + .../suggestededits-access-read/index.html | 44 ++ .../suggestededits-access-read/index.js | 437 ++++++++++++++++++ .../live-demos/suggestededits/example.js | 20 + .../live-demos/suggestededits/index.html | 44 ++ .../live-demos/suggestededits/index.js | 436 +++++++++++++++++ .../ROOT/images/icons/checkmark-filled.svg | 3 + modules/ROOT/images/icons/close-filled.svg | 3 + modules/ROOT/images/icons/feedback.svg | 3 + .../images/icons/suggestededits-badge.svg | 1 + modules/ROOT/images/icons/suggestededits.svg | 5 + modules/ROOT/nav.adoc | 2 + .../ROOT/pages/available-toolbar-buttons.adoc | 7 + .../ROOT/pages/comments-callback-mode.adoc | 4 + .../ROOT/pages/comments-embedded-mode.adoc | 26 +- .../ROOT/pages/comments-with-mentions.adoc | 9 + modules/ROOT/pages/revisionhistory.adoc | 4 + modules/ROOT/pages/suggestededits.adoc | 163 +++++++ modules/ROOT/pages/userlookup.adoc | 203 ++++++++ .../DEPRECATED/generic_8_userlookup.adoc | 1 + .../commands/suggestededits-cmds.adoc | 11 + .../configuration/defaultmenuitems.adoc | 2 +- .../partials/configuration/fetch_users.adoc | 55 +++ .../partials/configuration/icon_list.adoc | 5 + .../configuration/revisionhistory_author.adoc | 2 + .../revisionhistory_fetch_revision.adoc | 16 +- .../configuration/suggestededits_access.adoc | 44 ++ .../configuration/suggestededits_content.adoc | 29 ++ .../configuration/suggestededits_model.adoc | 22 + .../configuration/tinycomments_author.adoc | 2 + .../tinycomments_author_avatar.adoc | 2 + .../tinycomments_author_name.adoc | 2 + .../tinycomments_can_delete.adoc | 6 +- .../tinycomments_can_delete_comment.adoc | 6 +- .../tinycomments_can_edit_comment.adoc | 6 +- .../tinycomments_can_resolve.adoc | 2 +- .../tinycomments_fetch_author_info.adoc | 2 + .../tinycomments_mentions_enabled.adoc | 19 +- .../ROOT/partials/configuration/user_id.adoc | 17 + .../events/suggestededits-events.adoc | 10 + .../partials/index-pages/premium-plugins.adoc | 8 +- .../suggestededits-menu-items.adoc | 6 + .../partials/misc/admon-requires-8.0v.adoc | 1 + .../plugin-apis/suggestededits-apis.adoc | 163 +++++++ .../plugins/comments-open-sidebar.adoc | 2 +- .../suggestededits-toolbar-buttons.adoc | 7 + 55 files changed, 2453 insertions(+), 84 deletions(-) create mode 100644 modules/ROOT/examples/live-demos/suggestededits-access-feedback/example.js create mode 100644 modules/ROOT/examples/live-demos/suggestededits-access-feedback/index.html create mode 100644 modules/ROOT/examples/live-demos/suggestededits-access-feedback/index.js create mode 100644 modules/ROOT/examples/live-demos/suggestededits-access-read/example.js create mode 100644 modules/ROOT/examples/live-demos/suggestededits-access-read/index.html create mode 100644 modules/ROOT/examples/live-demos/suggestededits-access-read/index.js create mode 100644 modules/ROOT/examples/live-demos/suggestededits/example.js create mode 100644 modules/ROOT/examples/live-demos/suggestededits/index.html create mode 100644 modules/ROOT/examples/live-demos/suggestededits/index.js create mode 100644 modules/ROOT/images/icons/checkmark-filled.svg create mode 100644 modules/ROOT/images/icons/close-filled.svg create mode 100644 modules/ROOT/images/icons/feedback.svg create mode 100644 modules/ROOT/images/icons/suggestededits-badge.svg create mode 100644 modules/ROOT/images/icons/suggestededits.svg create mode 100644 modules/ROOT/pages/suggestededits.adoc create mode 100644 modules/ROOT/pages/userlookup.adoc create mode 100644 modules/ROOT/partials/DEPRECATED/generic_8_userlookup.adoc create mode 100644 modules/ROOT/partials/commands/suggestededits-cmds.adoc create mode 100644 modules/ROOT/partials/configuration/fetch_users.adoc create mode 100644 modules/ROOT/partials/configuration/suggestededits_access.adoc create mode 100644 modules/ROOT/partials/configuration/suggestededits_content.adoc create mode 100644 modules/ROOT/partials/configuration/suggestededits_model.adoc create mode 100644 modules/ROOT/partials/configuration/user_id.adoc create mode 100644 modules/ROOT/partials/events/suggestededits-events.adoc create mode 100644 modules/ROOT/partials/menu-item-ids/suggestededits-menu-items.adoc create mode 100644 modules/ROOT/partials/misc/admon-requires-8.0v.adoc create mode 100644 modules/ROOT/partials/plugin-apis/suggestededits-apis.adoc create mode 100644 modules/ROOT/partials/toolbar-button-ids/suggestededits-toolbar-buttons.adoc diff --git a/antora-playbook.yml b/antora-playbook.yml index 1ff597c1d2..94ce607ae1 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -8,7 +8,7 @@ content: branches: HEAD start_path: ./ - url: https://github.com/tinymce/tinymce-docs.git - branches: [ tinymce/5, tinymce/6, tinymce/7] + branches: [ tinymce/5, tinymce/6, tinymce/7 ] urls: html_extension_style: indexify latest_version_segment: latest diff --git a/antora.yml b/antora.yml index de3c4e76f5..25792a7583 100644 --- a/antora.yml +++ b/antora.yml @@ -10,7 +10,7 @@ asciidoc: companyurl: https://www.tiny.cloud cdnurl: https://cdn.tiny.cloud/1/no-api-key/tinymce/7/tinymce.min.js tdcdnurl: https://cdn.tiny.cloud/1/_your_api_key_/tinydrive/7/tinydrive.min.js - tinymce_live_demo_url: https://cdn.tiny.cloud/1/qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc/tinymce/7/tinymce.min.js + tinymce_live_demo_url: https://cdn.tiny.cloud/1/qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc/tinymce/8-dev/tinymce.min.js tinydrive_live_demo_url: https://cdn.tiny.cloud/1/qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc/tinydrive/7/tinydrive.min.js webcomponent_url: https://cdn.jsdelivr.net/npm/@tinymce/tinymce-webcomponent/dist/tinymce-webcomponent.min.js jquery_url: https://cdn.jsdelivr.net/npm/@tinymce/tinymce-jquery@2/dist/tinymce-jquery.min.js diff --git a/modules/ROOT/examples/live-demos/comments-callback-with-mentions/index.js b/modules/ROOT/examples/live-demos/comments-callback-with-mentions/index.js index bb74433204..8cd150d15d 100644 --- a/modules/ROOT/examples/live-demos/comments-callback-with-mentions/index.js +++ b/modules/ROOT/examples/live-demos/comments-callback-with-mentions/index.js @@ -1,18 +1,23 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then(({ faker }) => { + /* This represents a database of users on the server */ const userDb = { 'michaelcook': { id: 'michaelcook', name: 'Michael Cook', - fullName: 'Michael Cook', - description: 'Product Owner', - image: "{{imagesdir}}/avatars/michaelcook.png" + avatar: '{{imagesdir}}/avatars/michaelcook.png', + custom: { + fullName: 'Michael Cook', + description: 'Product Owner' + } }, 'kalebwilson': { id: 'kalebwilson', name: 'Kaleb Wilson', - fullName: 'Kaleb Wilson', - description: 'Marketing Director', - image: "{{imagesdir}}/avatars/kalebwilson.png" + avatar: '{{imagesdir}}/avatars/kalebwilson.png', + custom: { + fullName: 'Kaleb Wilson', + description: 'Marketing Director', + } } }; @@ -35,7 +40,7 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then const getAuthorInfo = (uid) => { const user = userDb[uid]; if (user) { - return fillAuthorInfo(user.id, user.fullName, user.image); + return fillAuthorInfo(user.id, user.custom.fullName, user.avatar); } return { author: uid, @@ -85,8 +90,8 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then const resolvedConversationDb = {}; const setupFakeServer = () => { - const images = [ adminUser.image, currentUser.image ]; - const userNames = [ adminUser.fullName, currentUser.fullName ]; + const images = [ adminUser.avatar, currentUser.avatar ]; + const userNames = [ adminUser.custom.fullName, currentUser.custom.fullName ]; for (let i = 0; i < numberOfUsers; i++) { images.push(faker.image.avatar()); @@ -99,14 +104,16 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then [currentUser.id]: currentUser }; userNames.map((fullName) => { - if ((fullName !== currentUser.fullName) && (fullName !== adminUser.fullName)) { + if ((fullName !== currentUser.custom.fullName) && (fullName !== adminUser.custom.fullName)) { const id = fullName.toLowerCase().replace(/ /g, ''); userDb[id] = { id, name: fullName, - fullName, - description: faker.person.jobTitle(), - image: images[Math.floor(images.length * Math.random())] + avatar: images[Math.floor(images.length * Math.random())], + custom: { + fullName, + description: faker.person.jobTitle(), + } }; } }); @@ -118,8 +125,8 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then const users = Object.keys(userDb).map((id) => ({ id, name: userDb[id].name, - image: userDb[id].image, - description: userDb[id].description + image: userDb[id].avatar, + description: userDb[id].custom.description })); resolve(users); }, fakeDelay); @@ -320,9 +327,6 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then }); setTimeout(() => done({ conversations: fetchedConversations }), fakeDelay); }; - - // Read the above `getAuthorInfo` function to see how this could be implemented - const tinycomments_fetch_author_info = (done) => done(getAuthorInfo(currentUid)); tinymce.init({ selector: 'textarea#comments-callback-with-mentions', @@ -350,9 +354,16 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then mentions_select, tinycomments_mode: 'callback', - tinycomments_author: currentUser.id, - tinycomments_author_name: currentUser.fullName, - tinycomments_avatar: currentUser.image, + user_id: currentUser.id, + fetch_users: (userIds) => { + return Promise.all( + userIds.map( + (userId) => new Promise( + (resolve) => resolve(userDb[userId] || { id: userId }) + ) + ) + ) + }, tinycomments_create, tinycomments_reply, tinycomments_delete, @@ -362,6 +373,5 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then tinycomments_delete_comment, tinycomments_edit_comment, tinycomments_fetch, - tinycomments_fetch_author_info }); }); diff --git a/modules/ROOT/examples/live-demos/comments-embedded-with-mentions/index.js b/modules/ROOT/examples/live-demos/comments-embedded-with-mentions/index.js index c2639167f7..5ff44ba8bc 100644 --- a/modules/ROOT/examples/live-demos/comments-embedded-with-mentions/index.js +++ b/modules/ROOT/examples/live-demos/comments-embedded-with-mentions/index.js @@ -1,19 +1,28 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then(({ faker }) => { - const adminUser = { - id: 'johnsmith', - name: 'John Smith', - fullName: 'John Smith', - description: 'Company Founder', - image: "https://i.pravatar.cc/150?img=11" + /* This represents a database of users on the server */ + const userDb = { + 'johnsmith': { + id: 'johnsmith', + name: 'John Smith', + avatar: 'https://i.pravatar.cc/150?img=11', + custom: { + fullName: 'John Smith', + description: 'Company Founder', + } + }, + 'jennynichols': { + id: 'jennynichols', + name: 'Jenny Nichols', + avatar: 'https://i.pravatar.cc/150?img=10', + custom: { + fullName: 'Jenny Nichols', + description: 'Marketing Director', + } + } }; - const currentUser = { - id: 'jennynichols', - name: 'Jenny Nichols', - fullName: 'Jenny Nichols', - description: 'Marketing Director', - image: "https://i.pravatar.cc/150?img=10" - }; + const adminUser = userDb['johnsmith']; + const currentUser = userDb['jennynichols']; const fakeDelay = 500; const numberOfUsers = 200; @@ -24,28 +33,25 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then const userRequest = {}; const setupFakeServer = () => { - const images = [ adminUser.image, currentUser.image ]; - const userNames = [ adminUser.fullName, currentUser.fullName ]; + const images = [ adminUser.avatar, currentUser.avatar ]; + const userNames = [ adminUser.custom.fullName, currentUser.custom.fullName ]; for (let i = 0; i < numberOfUsers; i++) { images.push(faker.image.avatar()); userNames.push(`${faker.person.firstName()} ${faker.person.lastName()}`); } - - /* This represents a database of users on the server */ - const userDb = { - [adminUser.id]: adminUser, - [currentUser.id]: currentUser - }; + userNames.map((fullName) => { - if ((fullName !== currentUser.fullName) && (fullName !== adminUser.fullName)) { + if ((fullName !== currentUser.custom.fullName) && (fullName !== adminUser.custom.fullName)) { const id = fullName.toLowerCase().replace(/ /g, ''); userDb[id] = { id, name: fullName, - fullName, - description: faker.person.jobTitle(), - image: images[Math.floor(images.length * Math.random())] + avatar: images[Math.floor(images.length * Math.random())], + custom: { + fullName, + description: faker.person.jobTitle(), + } }; } }); @@ -155,9 +161,16 @@ import ('https://cdn.jsdelivr.net/npm/@faker-js/faker@9/dist/index.min.js').then tinycomments_mode: 'embedded', sidebar_show: 'showcomments', - tinycomments_author: currentUser.id, - tinycomments_author_name: currentUser.fullName, - tinycomments_avatar: currentUser.image, + user_id: currentUser.id, + fetch_users: (userIds) => { + return Promise.all( + userIds.map( + (userId) => new Promise( + (resolve) => resolve(userDb[userId] || { id: userId }) + ) + ) + ) + }, tinycomments_can_resolve, }); }); diff --git a/modules/ROOT/examples/live-demos/comments-embedded/index.js b/modules/ROOT/examples/live-demos/comments-embedded/index.js index d0aa9d9c21..6514394809 100644 --- a/modules/ROOT/examples/live-demos/comments-embedded/index.js +++ b/modules/ROOT/examples/live-demos/comments-embedded/index.js @@ -16,7 +16,7 @@ tinymce.init({ quickbars_image_toolbar: 'alignleft aligncenter alignright | rotateleft rotateright | imageoptions', tinycomments_mode: 'embedded', sidebar_show: 'showcomments', - tinycomments_author: currentAuthor, + user_id: currentAuthor, tinycomments_can_resolve: (req, done, fail) => { const allowed = req.comments.length > 0 && req.comments[0].author === currentAuthor; diff --git a/modules/ROOT/examples/live-demos/revisionhistory/index.js b/modules/ROOT/examples/live-demos/revisionhistory/index.js index 946faa0854..7b3b282b87 100644 --- a/modules/ROOT/examples/live-demos/revisionhistory/index.js +++ b/modules/ROOT/examples/live-demos/revisionhistory/index.js @@ -4,6 +4,15 @@ const getRandomDelay = () => { return Math.floor(Math.random() * (maxDelay - minDelay + 1)) + minDelay; }; +/* This represents a database of users on the server */ +const userDb = { + 'john.doe': { + id: 'john.doe', + name: 'John Doe', + avatar: 'https://i.pravatar.cc/150?img=11' + } +}; + const lightRevisions = [ { revisionId: '3', @@ -202,9 +211,15 @@ tinymce.init({ content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }', revisionhistory_fetch, revisionhistory_fetch_revision, - revisionhistory_author: { - id: 'john.doe', - name: 'John Doe' - }, + user_id: 'john.doe', + fetch_users: (userIds) => { + return Promise.all( + userIds.map( + (userId) => new Promise( + (resolve) => resolve(userDb[userId] || { id: userId }) + ) + ) + ) + }, revisionhistory_display_author: true }); diff --git a/modules/ROOT/examples/live-demos/suggestededits-access-feedback/example.js b/modules/ROOT/examples/live-demos/suggestededits-access-feedback/example.js new file mode 100644 index 0000000000..49d1a9df43 --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits-access-feedback/example.js @@ -0,0 +1,21 @@ +const tinymceElement = document.querySelector('textarea#suggested-edits'); +const model = tinymceElement.getAttribute('suggestededits-model'); + +tinymce.init({ + selector: 'textarea#suggested-edits', + height: 500, + plugins: 'suggestededits advlist anchor autolink code charmap emoticons fullscreen help image link lists media preview searchreplace table', + toolbar: 'undo redo | suggestededits | styles fontsizeinput | bold italic | align bullist numlist | table link image | code', + user_id: 'michaelcook', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => + fetch(`/users/${userId}`) // Fetch user data from the server + .then((response) => response.json()) + .catch(() => ({ id: userId })) // Still return a valid user object even if the fetch fails + )), + content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }', + readonly: false, // Set to true to prevent edits to the content + suggestededits_access: 'feedback', // Set this value to restrict the permissions in the Suggested Edits view + suggestededits_content: 'html', + suggestededits_model: model +}); \ No newline at end of file diff --git a/modules/ROOT/examples/live-demos/suggestededits-access-feedback/index.html b/modules/ROOT/examples/live-demos/suggestededits-access-feedback/index.html new file mode 100644 index 0000000000..b410001410 --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits-access-feedback/index.html @@ -0,0 +1,44 @@ + diff --git a/modules/ROOT/examples/live-demos/suggestededits-access-feedback/index.js b/modules/ROOT/examples/live-demos/suggestededits-access-feedback/index.js new file mode 100644 index 0000000000..f493d2f43e --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits-access-feedback/index.js @@ -0,0 +1,437 @@ +/** Fake user database */ +const userDb = { + adamhayes: { + id: 'adamhayes', + name: 'Adam Hayes', + avatar: `https://randomuser.me/api/portraits/men/4.jpg`, + }, + martincook: { + id: 'martincook', + name: 'Martin Cook', + avatar: `https://randomuser.me/api/portraits/men/5.jpg`, + }, + kalebwilson: { + id: 'kalebwilson', + name: 'Kaleb Wilson', + avatar: `https://randomuser.me/api/portraits/men/6.jpg`, + }, + sarahjones: { + id: 'sarahjones', + name: 'Sarah Jones', + avatar: `https://randomuser.me/api/portraits/women/1.jpg`, + } +}; + +const model = { + "history": { + "2": [ + { + "id": 1, + "uid": "sarahjones", + "timestamp": 1752576936000, + "feedback": "Nice improvement!" + } + ] + }, + "version": 1, + "contents": [ + { + "type": "p", + "children": [ + { + "type": "img", + "attrs": { + "style": "display: block; margin-left: auto; margin-right: auto;", + "title": "Tiny Logo", + "src": "https://www.tiny.cloud/docs/images/logos/android-chrome-256x256.png", + "alt": "TinyMCE Logo", + "width": "128", + "height": "128" + } + } + ] + }, + { + "type": "h2", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "Welcome to the TinyMCE Suggested Edits " + }, + { + "text": "interactive ", + "opData": { + "id": 1, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752015064000 + } + }, + { + "text": "demo!" + } + ] + }, + { + "type": "p", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "Try out the Suggested Edits feature" + }, + { + "text": ": type in the editor, apply formatting or delete some content. T", + "opData": { + "id": 2, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752415064000 + } + }, + { + "text": " by typing in the editor and t", + "opData": { + "id": 2, + "type": "remove", + "uid": "adamhayes", + "timestamp": 1752415064000 + } + }, + { + "text": "hen" + }, + { + "text": ",", + "opData": { + "id": 3, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752515064000 + } + }, + { + "text": " click" + }, + { + "text": "ing", + "opData": { + "id": 4, + "type": "remove", + "uid": "adamhayes", + "timestamp": 1752515064000 + } + }, + { + "text": " the Review Changes button in the toolbar" + }, + { + "text": " to see your changes", + "opData": { + "id": 5, + "type": "insert", + "uid": "kalebwilson", + "timestamp": 1752615064000 + } + }, + { + "text": "." + } + ] + }, + { + "type": "p", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "And visit the " + }, + { + "text": "pricing page", + "opData": { + "id": 6, + "type": "modify", + "uid": "kalebwilson", + "timestamp": 1752615064000 + }, + "format": [ + { + "type": "a", + "attrs": { + "href": "https://www.tiny.cloud/pricing" + } + } + ], + "oldFormat": [ + { + "type": "a", + "attrs": { + "href": "https://www.tiny.cloud/pricing" + } + }, + "em" + ] + }, + { + "text": " to learn more about our Premium plugins." + } + ] + }, + { + "type": "h2", + "children": [ + { + "text": "A simple table to play with" + } + ] + }, + { + "type": "table", + "attrs": { + "style": "border-collapse: collapse; width: 100%;", + "border": "1" + }, + "children": [ + { + "type": "thead", + "children": [ + { + "type": "tr", + "attrs": { + "style": "text-align: left;" + }, + "children": [ + { + "type": "th", + "children": [ + { + "text": "Product" + } + ] + }, + { + "type": "th", + "children": [ + { + "text": "Cost" + } + ] + }, + { + "type": "th", + "children": [ + { + "text": "Really?" + } + ] + } + ] + } + ] + }, + { + "type": "tbody", + "children": [ + { + "type": "tr", + "children": [ + { + "type": "td", + "children": [ + { + "text": "TinyMCE Cloud" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Get started for free" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Yes!", + "format": [ + "strong" + ] + } + ] + } + ] + }, + { + "type": "tr", + "children": [ + { + "type": "td", + "children": [ + { + "text": "Plupload" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Free" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Yes!", + "format": [ + "strong" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "h2", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + }, + "children": [ + { + "text": "Found a bug?" + } + ] + }, + { + "type": "p", + "children": [ + { + "text": " ", + "opData": { + "id": 7, + "type": "remove", + "uid": "martincook", + "timestamp": 1752576331000 + } + }, + { + "text": "If you believe you have found a bug please create an issue on the ", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + } + }, + { + "text": "GitHub repo", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + }, + "format": [ + { + "type": "a", + "attrs": { + "href": "https://github.com/tinymce/tinymce/issues" + } + } + ] + }, + { + "text": " to report it to the developers.", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + } + } + ] + }, + { + "type": "h2", + "children": [ + { + "text": "Finally…" + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "Don’t forget to check out " + }, + { + "text": "Plupload", + "format": [ + { + "type": "a", + "attrs": { + "href": "http://www.plupload.com", + "target": "_blank", + "rel": "noopener" + } + } + ] + }, + { + "text": ", the upload solution featuring HTML5 upload support." + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "Thanks for supporting TinyMCE. We hope it helps you and your users create great content." + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "All the best from the TinyMCE team." + } + ] + } + ] +}; + +tinymce.init({ + selector: 'textarea#suggestededits-access-feedback', + height: 500, + plugins: 'suggestededits advlist anchor autolink code charmap emoticons fullscreen help image link lists media preview searchreplace table', + toolbar: 'undo redo | suggestededits | styles fontsizeinput | bold italic | align bullist numlist | table link image | code', + user_id: 'kalebwilson', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => new Promise((resolve) => + resolve(userDb[userId] || { id: userId })) + )), + content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }', + readonly: false, + suggestededits_access: 'feedback', + suggestededits_content: 'html', + suggestededits_model: model +}); \ No newline at end of file diff --git a/modules/ROOT/examples/live-demos/suggestededits-access-read/example.js b/modules/ROOT/examples/live-demos/suggestededits-access-read/example.js new file mode 100644 index 0000000000..9fee7e94ad --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits-access-read/example.js @@ -0,0 +1,21 @@ +const tinymceElement = document.querySelector('textarea#suggested-edits'); +const model = tinymceElement.getAttribute('suggestededits-model'); + +tinymce.init({ + selector: 'textarea#suggested-edits', + height: 500, + plugins: 'suggestededits advlist anchor autolink code charmap emoticons fullscreen help image link lists media preview searchreplace table', + toolbar: 'undo redo | suggestededits | styles fontsizeinput | bold italic | align bullist numlist | table link image | code', + user_id: 'michaelcook', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => + fetch(`/users/${userId}`) // Fetch user data from the server + .then((response) => response.json()) + .catch(() => ({ id: userId })) // Still return a valid user object even if the fetch fails + )), + content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }', + readonly: false, // Set to true to prevent edits to the content + suggestededits_access: 'read', // Set this value to restrict the permissions in the Suggested Edits view + suggestededits_content: 'html', + suggestededits_model: model +}); \ No newline at end of file diff --git a/modules/ROOT/examples/live-demos/suggestededits-access-read/index.html b/modules/ROOT/examples/live-demos/suggestededits-access-read/index.html new file mode 100644 index 0000000000..d0487689c2 --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits-access-read/index.html @@ -0,0 +1,44 @@ + diff --git a/modules/ROOT/examples/live-demos/suggestededits-access-read/index.js b/modules/ROOT/examples/live-demos/suggestededits-access-read/index.js new file mode 100644 index 0000000000..99336e6129 --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits-access-read/index.js @@ -0,0 +1,437 @@ +/** Fake user database */ +const userDb = { + adamhayes: { + id: 'adamhayes', + name: 'Adam Hayes', + avatar: `https://randomuser.me/api/portraits/men/4.jpg`, + }, + martincook: { + id: 'martincook', + name: 'Martin Cook', + avatar: `https://randomuser.me/api/portraits/men/5.jpg`, + }, + kalebwilson: { + id: 'kalebwilson', + name: 'Kaleb Wilson', + avatar: `https://randomuser.me/api/portraits/men/6.jpg`, + }, + sarahjones: { + id: 'sarahjones', + name: 'Sarah Jones', + avatar: `https://randomuser.me/api/portraits/women/1.jpg`, + } +}; + +const model = { + "history": { + "2": [ + { + "id": 1, + "uid": "sarahjones", + "timestamp": 1752576936000, + "feedback": "Nice improvement!" + } + ] + }, + "version": 1, + "contents": [ + { + "type": "p", + "children": [ + { + "type": "img", + "attrs": { + "style": "display: block; margin-left: auto; margin-right: auto;", + "title": "Tiny Logo", + "src": "https://www.tiny.cloud/docs/images/logos/android-chrome-256x256.png", + "alt": "TinyMCE Logo", + "width": "128", + "height": "128" + } + } + ] + }, + { + "type": "h2", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "Welcome to the TinyMCE Suggested Edits " + }, + { + "text": "interactive ", + "opData": { + "id": 1, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752015064000 + } + }, + { + "text": "demo!" + } + ] + }, + { + "type": "p", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "Try out the Suggested Edits feature" + }, + { + "text": ": type in the editor, apply formatting or delete some content. T", + "opData": { + "id": 2, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752415064000 + } + }, + { + "text": " by typing in the editor and t", + "opData": { + "id": 2, + "type": "remove", + "uid": "adamhayes", + "timestamp": 1752415064000 + } + }, + { + "text": "hen" + }, + { + "text": ",", + "opData": { + "id": 3, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752515064000 + } + }, + { + "text": " click" + }, + { + "text": "ing", + "opData": { + "id": 4, + "type": "remove", + "uid": "adamhayes", + "timestamp": 1752515064000 + } + }, + { + "text": " the Review Changes button in the toolbar" + }, + { + "text": " to see your changes", + "opData": { + "id": 5, + "type": "insert", + "uid": "kalebwilson", + "timestamp": 1752615064000 + } + }, + { + "text": "." + } + ] + }, + { + "type": "p", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "And visit the " + }, + { + "text": "pricing page", + "opData": { + "id": 6, + "type": "modify", + "uid": "kalebwilson", + "timestamp": 1752615064000 + }, + "format": [ + { + "type": "a", + "attrs": { + "href": "https://www.tiny.cloud/pricing" + } + } + ], + "oldFormat": [ + { + "type": "a", + "attrs": { + "href": "https://www.tiny.cloud/pricing" + } + }, + "em" + ] + }, + { + "text": " to learn more about our Premium plugins." + } + ] + }, + { + "type": "h2", + "children": [ + { + "text": "A simple table to play with" + } + ] + }, + { + "type": "table", + "attrs": { + "style": "border-collapse: collapse; width: 100%;", + "border": "1" + }, + "children": [ + { + "type": "thead", + "children": [ + { + "type": "tr", + "attrs": { + "style": "text-align: left;" + }, + "children": [ + { + "type": "th", + "children": [ + { + "text": "Product" + } + ] + }, + { + "type": "th", + "children": [ + { + "text": "Cost" + } + ] + }, + { + "type": "th", + "children": [ + { + "text": "Really?" + } + ] + } + ] + } + ] + }, + { + "type": "tbody", + "children": [ + { + "type": "tr", + "children": [ + { + "type": "td", + "children": [ + { + "text": "TinyMCE Cloud" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Get started for free" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Yes!", + "format": [ + "strong" + ] + } + ] + } + ] + }, + { + "type": "tr", + "children": [ + { + "type": "td", + "children": [ + { + "text": "Plupload" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Free" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Yes!", + "format": [ + "strong" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "h2", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + }, + "children": [ + { + "text": "Found a bug?" + } + ] + }, + { + "type": "p", + "children": [ + { + "text": " ", + "opData": { + "id": 7, + "type": "remove", + "uid": "martincook", + "timestamp": 1752576331000 + } + }, + { + "text": "If you believe you have found a bug please create an issue on the ", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + } + }, + { + "text": "GitHub repo", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + }, + "format": [ + { + "type": "a", + "attrs": { + "href": "https://github.com/tinymce/tinymce/issues" + } + } + ] + }, + { + "text": " to report it to the developers.", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + } + } + ] + }, + { + "type": "h2", + "children": [ + { + "text": "Finally…" + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "Don’t forget to check out " + }, + { + "text": "Plupload", + "format": [ + { + "type": "a", + "attrs": { + "href": "http://www.plupload.com", + "target": "_blank", + "rel": "noopener" + } + } + ] + }, + { + "text": ", the upload solution featuring HTML5 upload support." + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "Thanks for supporting TinyMCE. We hope it helps you and your users create great content." + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "All the best from the TinyMCE team." + } + ] + } + ] +}; + +tinymce.init({ + selector: 'textarea#suggestededits-access-read', + height: 500, + plugins: 'suggestededits advlist anchor autolink code charmap emoticons fullscreen help image link lists media preview searchreplace table', + toolbar: 'undo redo | suggestededits | styles fontsizeinput | bold italic | align bullist numlist | table link image | code', + user_id: 'kalebwilson', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => new Promise((resolve) => + resolve(userDb[userId] || { id: userId })) + )), + content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }', + readonly: false, + suggestededits_access: 'read', + suggestededits_content: 'html', + suggestededits_model: model, +}); \ No newline at end of file diff --git a/modules/ROOT/examples/live-demos/suggestededits/example.js b/modules/ROOT/examples/live-demos/suggestededits/example.js new file mode 100644 index 0000000000..345c68ebc5 --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits/example.js @@ -0,0 +1,20 @@ +const tinymceElement = document.querySelector('textarea#suggested-edits'); +const model = tinymceElement.getAttribute('suggestededits-model'); + +tinymce.init({ + selector: 'textarea#suggested-edits', + height: 500, + plugins: 'suggestededits advlist anchor autolink code charmap emoticons fullscreen help image link lists media preview searchreplace table', + toolbar: 'undo redo | suggestededits | styles fontsizeinput | bold italic | align bullist numlist | table link image | code', + user_id: 'michaelcook', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => + fetch(`/users/${userId}`) // Fetch user data from the server + .then((response) => response.json()) + .catch(() => ({ id: userId })) // Still return a valid user object even if the fetch fails + )), + content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }', + suggestededits_model: model, + suggestededits_access: 'full', + suggestededits_content: 'html' +}); \ No newline at end of file diff --git a/modules/ROOT/examples/live-demos/suggestededits/index.html b/modules/ROOT/examples/live-demos/suggestededits/index.html new file mode 100644 index 0000000000..22a924a1b2 --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits/index.html @@ -0,0 +1,44 @@ + diff --git a/modules/ROOT/examples/live-demos/suggestededits/index.js b/modules/ROOT/examples/live-demos/suggestededits/index.js new file mode 100644 index 0000000000..22a13fc46e --- /dev/null +++ b/modules/ROOT/examples/live-demos/suggestededits/index.js @@ -0,0 +1,436 @@ +/** Fake user database */ +const userDb = { + adamhayes: { + id: 'adamhayes', + name: 'Adam Hayes', + avatar: `https://randomuser.me/api/portraits/men/4.jpg`, + }, + martincook: { + id: 'martincook', + name: 'Martin Cook', + avatar: `https://randomuser.me/api/portraits/men/5.jpg`, + }, + kalebwilson: { + id: 'kalebwilson', + name: 'Kaleb Wilson', + avatar: `https://randomuser.me/api/portraits/men/6.jpg`, + }, + sarahjones: { + id: 'sarahjones', + name: 'Sarah Jones', + avatar: `https://randomuser.me/api/portraits/women/1.jpg`, + } +}; + +const model = { + "history": { + "2": [ + { + "id": 1, + "uid": "sarahjones", + "timestamp": 1752576936000, + "feedback": "Nice improvement!" + } + ] + }, + "version": 1, + "contents": [ + { + "type": "p", + "children": [ + { + "type": "img", + "attrs": { + "style": "display: block; margin-left: auto; margin-right: auto;", + "title": "Tiny Logo", + "src": "https://www.tiny.cloud/docs/images/logos/android-chrome-256x256.png", + "alt": "TinyMCE Logo", + "width": "128", + "height": "128" + } + } + ] + }, + { + "type": "h2", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "Welcome to the TinyMCE Suggested Edits " + }, + { + "text": "interactive ", + "opData": { + "id": 1, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752015064000 + } + }, + { + "text": "demo!" + } + ] + }, + { + "type": "p", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "Try out the Suggested Edits feature" + }, + { + "text": ": type in the editor, apply formatting or delete some content. T", + "opData": { + "id": 2, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752415064000 + } + }, + { + "text": " by typing in the editor and t", + "opData": { + "id": 2, + "type": "remove", + "uid": "adamhayes", + "timestamp": 1752415064000 + } + }, + { + "text": "hen" + }, + { + "text": ",", + "opData": { + "id": 3, + "type": "insert", + "uid": "adamhayes", + "timestamp": 1752515064000 + } + }, + { + "text": " click" + }, + { + "text": "ing", + "opData": { + "id": 4, + "type": "remove", + "uid": "adamhayes", + "timestamp": 1752515064000 + } + }, + { + "text": " the Review Changes button in the toolbar" + }, + { + "text": " to see your changes", + "opData": { + "id": 5, + "type": "insert", + "uid": "kalebwilson", + "timestamp": 1752615064000 + } + }, + { + "text": "." + } + ] + }, + { + "type": "p", + "attrs": { + "style": "text-align: center;" + }, + "children": [ + { + "text": "And visit the " + }, + { + "text": "pricing page", + "opData": { + "id": 6, + "type": "modify", + "uid": "kalebwilson", + "timestamp": 1752615064000 + }, + "format": [ + { + "type": "a", + "attrs": { + "href": "https://www.tiny.cloud/pricing" + } + } + ], + "oldFormat": [ + { + "type": "a", + "attrs": { + "href": "https://www.tiny.cloud/pricing" + } + }, + "em" + ] + }, + { + "text": " to learn more about our Premium plugins." + } + ] + }, + { + "type": "h2", + "children": [ + { + "text": "A simple table to play with" + } + ] + }, + { + "type": "table", + "attrs": { + "style": "border-collapse: collapse; width: 100%;", + "border": "1" + }, + "children": [ + { + "type": "thead", + "children": [ + { + "type": "tr", + "attrs": { + "style": "text-align: left;" + }, + "children": [ + { + "type": "th", + "children": [ + { + "text": "Product" + } + ] + }, + { + "type": "th", + "children": [ + { + "text": "Cost" + } + ] + }, + { + "type": "th", + "children": [ + { + "text": "Really?" + } + ] + } + ] + } + ] + }, + { + "type": "tbody", + "children": [ + { + "type": "tr", + "children": [ + { + "type": "td", + "children": [ + { + "text": "TinyMCE Cloud" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Get started for free" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Yes!", + "format": [ + "strong" + ] + } + ] + } + ] + }, + { + "type": "tr", + "children": [ + { + "type": "td", + "children": [ + { + "text": "Plupload" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Free" + } + ] + }, + { + "type": "td", + "children": [ + { + "text": "Yes!", + "format": [ + "strong" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "h2", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + }, + "children": [ + { + "text": "Found a bug?" + } + ] + }, + { + "type": "p", + "children": [ + { + "text": " ", + "opData": { + "id": 7, + "type": "remove", + "uid": "martincook", + "timestamp": 1752576331000 + } + }, + { + "text": "If you believe you have found a bug please create an issue on the ", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + } + }, + { + "text": "GitHub repo", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + }, + "format": [ + { + "type": "a", + "attrs": { + "href": "https://github.com/tinymce/tinymce/issues" + } + } + ] + }, + { + "text": " to report it to the developers.", + "opData": { + "id": 7, + "type": "insert", + "uid": "martincook", + "timestamp": 1752576331000 + } + } + ] + }, + { + "type": "h2", + "children": [ + { + "text": "Finally…" + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "Don’t forget to check out " + }, + { + "text": "Plupload", + "format": [ + { + "type": "a", + "attrs": { + "href": "http://www.plupload.com", + "target": "_blank", + "rel": "noopener" + } + } + ] + }, + { + "text": ", the upload solution featuring HTML5 upload support." + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "Thanks for supporting TinyMCE. We hope it helps you and your users create great content." + } + ] + }, + { + "type": "p", + "children": [ + { + "text": "All the best from the TinyMCE team." + } + ] + } + ] +}; + +tinymce.init({ + selector: 'textarea#suggestededits', + height: 500, + plugins: 'suggestededits advlist anchor autolink code charmap emoticons fullscreen help image link lists media preview searchreplace table', + toolbar: 'undo redo | suggestededits | styles fontsizeinput | bold italic | align bullist numlist | table link image | code', + user_id: 'kalebwilson', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => new Promise((resolve) => + resolve(userDb[userId] || { id: userId })) + )), + content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }', + suggestededits_model: model, + suggestededits_content: 'html', + suggestededits_access: 'full' +}); diff --git a/modules/ROOT/images/icons/checkmark-filled.svg b/modules/ROOT/images/icons/checkmark-filled.svg new file mode 100644 index 0000000000..5fb476da1d --- /dev/null +++ b/modules/ROOT/images/icons/checkmark-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/modules/ROOT/images/icons/close-filled.svg b/modules/ROOT/images/icons/close-filled.svg new file mode 100644 index 0000000000..f4362e0de8 --- /dev/null +++ b/modules/ROOT/images/icons/close-filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/modules/ROOT/images/icons/feedback.svg b/modules/ROOT/images/icons/feedback.svg new file mode 100644 index 0000000000..8aefd52267 --- /dev/null +++ b/modules/ROOT/images/icons/feedback.svg @@ -0,0 +1,3 @@ + + + diff --git a/modules/ROOT/images/icons/suggestededits-badge.svg b/modules/ROOT/images/icons/suggestededits-badge.svg new file mode 100644 index 0000000000..4c1409ca15 --- /dev/null +++ b/modules/ROOT/images/icons/suggestededits-badge.svg @@ -0,0 +1 @@ + diff --git a/modules/ROOT/images/icons/suggestededits.svg b/modules/ROOT/images/icons/suggestededits.svg new file mode 100644 index 0000000000..dbd5bb6d0f --- /dev/null +++ b/modules/ROOT/images/icons/suggestededits.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/modules/ROOT/nav.adoc b/modules/ROOT/nav.adoc index 04ebfa9fe1..e62abddba1 100644 --- a/modules/ROOT/nav.adoc +++ b/modules/ROOT/nav.adoc @@ -62,6 +62,7 @@ *** xref:localize-your-language.adoc[Localization] *** xref:spell-checking.adoc[Spell checking] *** xref:editor-content-css.adoc[CSS for rendering content] +*** xref:userlookup.adoc[Using the UserLookup API] ** Environment setup guides *** React framework **** xref:react-cloud.adoc[Using the Tiny Cloud] @@ -345,6 +346,7 @@ **** xref:introduction-to-tiny-spellchecker.adoc[Spell Checker] **** xref:custom-dictionaries-for-tiny-spellchecker.adoc[Adding custom dictionaries] *** xref:autocorrect.adoc[Spelling Autocorrect] +*** xref:suggestededits.adoc[Suggested Edits] *** xref:tableofcontents.adoc[Table of Contents] *** xref:advanced-templates.adoc[Templates] *** Tiny Drive diff --git a/modules/ROOT/pages/available-toolbar-buttons.adoc b/modules/ROOT/pages/available-toolbar-buttons.adoc index aeb089d9cd..0a95913626 100644 --- a/modules/ROOT/pages/available-toolbar-buttons.adoc +++ b/modules/ROOT/pages/available-toolbar-buttons.adoc @@ -239,6 +239,13 @@ include::partial$misc/plugin-toolbar-button-id-boilerplate.adoc[] include::partial$misc/plugin-toolbar-button-id-boilerplate.adoc[] :!pluginpage: +:plugincategory: premium +:pluginname: Suggested Edits +:plugincode: suggestededits +:pluginpage: suggestededits.adoc +include::partial$misc/plugin-toolbar-button-id-boilerplate.adoc[] +:!pluginpage: + :plugincategory: opensource :pluginname: Table :plugincode: table diff --git a/modules/ROOT/pages/comments-callback-mode.adoc b/modules/ROOT/pages/comments-callback-mode.adoc index 85275ec9fc..a5725f33bd 100644 --- a/modules/ROOT/pages/comments-callback-mode.adoc +++ b/modules/ROOT/pages/comments-callback-mode.adoc @@ -67,6 +67,10 @@ include::partial$configuration/tinycomments_resolve.adoc[leveloffset=+1] include::partial$configuration/tinycomments_fetch.adoc[leveloffset=+1] +include::partial$configuration/user_id.adoc[leveloffset=+1] + +include::partial$configuration/fetch_users.adoc[leveloffset=+1] + include::partial$configuration/tinycomments_fetch_author_info.adoc[leveloffset=+1] include::partial$plugins/comments-open-sidebar.adoc[] diff --git a/modules/ROOT/pages/comments-embedded-mode.adoc b/modules/ROOT/pages/comments-embedded-mode.adoc index f0f8c1fa6f..280630f5bf 100644 --- a/modules/ROOT/pages/comments-embedded-mode.adoc +++ b/modules/ROOT/pages/comments-embedded-mode.adoc @@ -11,17 +11,33 @@ To add the {pluginname} plugin in embedded mode to the {productname}, configure [source,js] ---- +const userDb = { + 'author': { + id: 'author', + name: 'Name of the commenter', + avatar: 'https://example.com/avatar/john.png' + }, +}; + tinymce.init({ selector: 'textarea', // change this value according to your html plugins: 'tinycomments', toolbar: 'addcomment showcomments', - tinycomments_author: 'author', - tinycomments_author_name: 'Name of the commenter', + user_id: 'author', + fetch_users: (userIds) => { + return Promise.all( + userIds.map( + (userId) => new Promise( + (resolve) => resolve(userDb[userId] || { id: userId }) + ) + ) + ) + }, tinycomments_mode: 'embedded' }); ---- -This is the minimum recommended setup for the {pluginname} plugin in embedded mode. If the `+tinycomments_author+` and `+tinycomments_author_name+` options are not configured, all users will be assigned the name "_ANON_". +This is the minimum recommended setup for the {pluginname} plugin in embedded mode. If the `+user_id+` or `+tinycomments_author+` options are not configured, all users will be assigned the name "_ANON_". [[comments-embedded-live-demo]] == Interactive example @@ -30,6 +46,10 @@ liveDemo::comments-embedded[] == Options +include::partial$configuration/user_id.adoc[leveloffset=+1] + +include::partial$configuration/fetch_users.adoc[leveloffset=+1] + include::partial$configuration/tinycomments_author.adoc[leveloffset=+1] include::partial$configuration/tinycomments_author_avatar.adoc[leveloffset=+1] diff --git a/modules/ROOT/pages/comments-with-mentions.adoc b/modules/ROOT/pages/comments-with-mentions.adoc index 950c59350b..f648a0ddea 100644 --- a/modules/ROOT/pages/comments-with-mentions.adoc +++ b/modules/ROOT/pages/comments-with-mentions.adoc @@ -64,9 +64,18 @@ include::partial$configuration/tinycomments_lookup.adoc[leveloffset=+1] When using embedded mode, the {pluginname} plugin requires the following options: +* xref:user_id[`+user_id+`] +* xref:fetch_users[`+fetch_users+`] + +Or: + * xref:tinycomments_author[`+tinycomments_author+`] * xref:tinycomments_author_name[`+tinycomments_author_name+`] +include::partial$configuration/user_id.adoc[leveloffset=+1] + +include::partial$configuration/fetch_users.adoc[leveloffset=+1] + include::partial$configuration/tinycomments_author.adoc[leveloffset=+1] include::partial$configuration/tinycomments_author_name.adoc[leveloffset=+1] diff --git a/modules/ROOT/pages/revisionhistory.adoc b/modules/ROOT/pages/revisionhistory.adoc index 287e7cd506..0df0343897 100644 --- a/modules/ROOT/pages/revisionhistory.adoc +++ b/modules/ROOT/pages/revisionhistory.adoc @@ -109,6 +109,10 @@ include::partial$configuration/revisionhistory_fetch_revision.adoc[leveloffset=+ include::partial$configuration/revisionhistory_allow_restore.adoc[leveloffset=+1] +include::partial$configuration/user_id.adoc[leveloffset=+1] + +include::partial$configuration/fetch_users.adoc[leveloffset=+1] + include::partial$configuration/revisionhistory_author.adoc[leveloffset=+1] include::partial$configuration/revisionhistory_display_author.adoc[leveloffset=+1] diff --git a/modules/ROOT/pages/suggestededits.adoc b/modules/ROOT/pages/suggestededits.adoc new file mode 100644 index 0000000000..0529de12f1 --- /dev/null +++ b/modules/ROOT/pages/suggestededits.adoc @@ -0,0 +1,163 @@ += Suggested Edits Plugin +:navtitle: Suggested Edits +:description: Suggested Edits keeps track of changes and review edits made by multiple authors in a document. +:description_short: A view of tracked changes made by multiple authors +:keywords: plugin, Suggested Edits, changes, diff, track changes, review changes, collaboration, multiple authors +:pluginname: Suggested Edits +:plugincode: suggestededits +:plugincategory: premium + +include::partial$misc/admon-paid-addon-pricing.adoc[] + +The {pluginname} plugin allows multiple users to collaborate on a document. The review window shows which user suggested which edits, whether they added, removed, modified, or replaced any content, and allows users to provide feedback on those suggestions or give a final review by accepting or rejecting them. + +== Interactive example + +liveDemo::{plugincode}[] + +include::partial$misc/admon-iframe-only.adoc[] + +== How it works + +The {pluginname} plugin keeps track of every edit made to the document by the current user and stores this metadata in an internal model of the document. These suggestions can then be reviewed in the Review Edits view, where each edit is highlighted in the document, and where users can accept, reject, or provide feedback. The Review Edits view is accessible via either the `suggestededits` toolbar button or menu button within the `View` menu. + +== The model + +The {pluginname} model is a JSON object representing the document along with all unreviewed edits and feedback. The model must be kept in sync with the editor content and loaded into the editor at the same time as the content. + +The structure of the model is not documented and should not be relied upon. + +The model can be retrieved from the plugin using the xref:#get_model[`+getModel+`] API, saved externally alongside the document, and loaded into the editor with the xref:#suggestededits_model[`+suggestededits_model+`] option. This ensures that the document and the model are in sync and every user's contributions are tracked correctly. If the model and content are out of sync when the editor loads, the difference between them will be applied as a suggested edit by the current user. If a model is not provided in the editor configuration or is set to `+undefined+`, the plugin will generate a new model from the initial content. + +Alternatively the xref:#suggestededits_content[`+suggestededits_content+`] option allows the model to generate the editor content, in which case the two do not need to be kept in sync. + +== Reviewing edits + +The Review Edits view can be used to view and reviewing edits made by multiple authors. The available actions in this view depends on the xref:#suggestededits_access[`+suggestededits_access+` option]. + +=== Header + +The view contains a few controls to manage the review process: + +* Show edits: Toggles whether suggested edits are shown. When hidden, the view shows what the document will look like if the review is completed. +* Complete review: Ends the review, applying resolved suggestions to the document. Unresolved suggestions remain in the document for future review. +* Cancel: Ignores any resolved suggestions and makes no change to the document. Feedback given on suggestions will be retained. + +=== Document + +The current editor document is displayed in a sandboxed iframe, with each suggested edit highlighted as they appear in the document. The following color coding is used to indicate the type of change: + +* Green: Added content. +* Blue: Modified attributes or formatting (e.g. bold, italic, etc.). +* Red: Removed content. + +Replaced content is represented as both added and removed content, and indicates that some content was removed and replaced with new content in a single edit. When a suggestion is selected, whether in the document or in the sidebar, the corresponding highlighted suggestion in the document will be outlined in blue and scrolled into view. + +=== Sidebar + +Each suggested edit is listed as a card in the sidebar and color coded by the type of change, along with the user who made the suggestion, when the edit was made, and any feedback provided on that suggestion. When selected, each suggestion can be handled in the following ways: + +* Accept: Resolves the suggestion, applying the edit to the document when the review is completed. +* Reject: Resolves the suggestion, turning back the edit to the original state. +* Revert: Reverts the current "Accept" or "Reject" resolution on the suggestion. +* Provide feedback: Opens a text area for users to provide feedback on the suggestion. + +Feedback is shown in chronological order beneath the card details when the card is selected. Feedback allows users to discuss suggestions before resolving them. The feedback author can edit or delete their own feedback, with the appropriate permissions in the xref:#suggestededits_access[`+suggestededits_access+`] option. + +At the top of the sidebar there is a dropdown menu to apply review actions in bulk to all suggested edits: + +* Accept all. +* Reject all. +* Revert all. + +=== Finishing a review + +When completing a review, resolved suggestions will be applied to the document and will no longer be tracked in the model as a suggestion. Feedback on resolved suggestions is discarded. Any "accepted" edits will remain in the document, and any "rejected" edits will be reverted to the state before the suggestion was made. + +Review actions will apply the following to the document: + +When added content is: + +* Accepted: The content will remain in the document. +* Rejected: The content will be removed from the document. + +When modified content is: + +* Accepted: The content will retain the current formats and attributes. +* Rejected: The content will revert to modified formats and attributes to match the content state before the edit was made. + +When removed content is: + +* Accepted: The content will be removed from the document. +* Rejected: The removed content will be restored to the document. + +If a review is canceled, no resolved suggestions will be applied to the document. All suggestions, including any feedback provided during that review session, will remain stored in the model. + +== Initial setup + +To setup the {pluginname} plugin in the editor: + +* add `{plugincode}` to the `plugins` option in the editor configuration; +* add `{plugincode}` to the `toolbar` option in the editor configuration; + +For example: + +[source,js] +---- +tinymce.init({ + selector: 'textarea#suggestededits', // change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits', +}); +---- + +This configuration adds {pluginname} to the editor toolbar, enabling access to the plugin features. To fully utilize the plugin, additional configuration options must be provided. + +== Options + +The following configuration options affect the behavior of the {pluginname} plugin. + +include::partial$configuration/suggestededits_model.adoc[leveloffset=+1] + +include::partial$configuration/suggestededits_content.adoc[leveloffset=+1] + +include::partial$configuration/suggestededits_access.adoc[leveloffset=+1] + +include::partial$configuration/user_id.adoc[leveloffset=+1] + +include::partial$configuration/fetch_users.adoc[leveloffset=+1] + +Both the xref:#user_id[`+user_id+`] and xref:#fetch_users[`+fetch_users+`] options are required to configure the xref:userlookup.adoc[User Lookup API]. This API is used in the {pluginname} plugin to provide user information for each user who has made a change, allowing other users to see who made which suggestion. + +* The current user ID should be set with the xref:#user_id[`+user_id+`] option. The user ID should be a unique string that identifies the user, such as a username or an email address. +* The xref:#fetch_users[`+fetch_users+`] option is required to provide the name and avatar for users who have made suggestions. This option can be configured to fetch data from a backend service. The `+fetch_users+` function is given an array of user IDs and should return a promise, which resolves to an array containing data for the requested user IDs. + +include::partial$misc/plugin-toolbar-button-id-boilerplate.adoc[] + +include::partial$misc/plugin-menu-item-id-boilerplate.adoc[] + +== Commands + +The {pluginname} plugin provides the following {productname} commands. + +include::partial$commands/{plugincode}-cmds.adoc[] + +== Events + +The {pluginname} plugin provides the following events. + +include::partial$events/{plugincode}-events.adoc[] + +== APIs + +The {pluginname} plugin provides the following APIs. + +include::partial$plugin-apis/{plugincode}-apis.adoc[] + +//// +== Known Limitations + +[NOTE] +Since the comparison is made against the original version of the document, if there are unresolved changes by multiple authors affecting the same part, the most recent change will be used for comparison. The `hasChanges` API can be used to implement a safeguard that prevents further edits on a document with unresolved changes. + +//// \ No newline at end of file diff --git a/modules/ROOT/pages/userlookup.adoc b/modules/ROOT/pages/userlookup.adoc new file mode 100644 index 0000000000..c1890a3e0b --- /dev/null +++ b/modules/ROOT/pages/userlookup.adoc @@ -0,0 +1,203 @@ += User Lookup API +:navtitle: User Lookup +:description: TinyMCE User Lookup provides an API to identify the current user and retrieve user details via integration-defined methods. +:keywords: userLookup, fetchUsers, user_id, user management, collaborative editing +:apiname: User Lookup + +The {productname} {apiname} API allows you to retrieve and cache user details, such as names and avatars, and identify the current user within the editor. + +This is useful when building features that rely on user context, such as commenting, collaborative editing, or displaying user-specific information. The API provides built-in caching for efficient user data management, as well as fallback user data when none is provided. + +== Properties and Methods + +The {apiname} API serves two purposes, to identify the current user and to fetch user details for other users. These can be configured to suit your application through the xref:#user_id[`user_id`] and xref:#fetch_users[`fetch_users`] options respectively. + +The {apiname} API provides properties and methods through the `editor.userLookup` object, which is available after the editor is initialized. + +[cols="2,1,2",options="header"] +|=== +|API|Type|Return Type + +|xref:#userlookup-userid[`editor.userLookup.userId`]|Property|`string` +|xref:#userlookup-fetchusers[`editor.userLookup.fetchUsers(userIds)`]|Method|`Object>` +|=== + +[[userlookup-userid]] +=== `editor.userLookup.userId` + +Returns the current user's ID, set via the `user_id` configuration option. This is a string that uniquely identifies the user in the context of the editor, such as a username or an email address. If the `user_id` option is not set, it defaults to `'Anonymous'`. + +[[userlookup-fetchusers]] +=== `editor.userLookup.fetchUsers` + +Fetches and caches user information for the specified user IDs. This method accepts an array of user IDs and returns an object where each key is a user ID and each value is a Promise that resolves to the user object. If a user ID is not found, the Promise will reject with an error message. + +=== The `user` object + +The user is an `Object` that contains the following fields: + +[cols="1,1,1,3",options="header"] +|=== +| Field | Type | Required? | Description +| `id` | `string` | required | The unique string ID of the user. +| `name` | `string` | optional | The display name of the user. If not provided, defaults to the `id`. +| `avatar` | `string` | optional | The URL of the user's avatar image or data URI. If not provided, an auto-generated SVG using the user's initials will be used. +| `custom` | `Object` | optional | Additional metadata for the user. This can include any custom fields relevant to your application, such as roles or permissions. +|=== + +.Example user object: +[source,js] +---- +{ + id: 'user-1', // Required: User identifier + name: 'Jane Doe', // Optional: Display name (defaults to id) + avatar: 'https://...', // Optional: Avatar URL or data URI + custom: { // Optional: Additional metadata + role: 'admin', + department: 'engineering' + } +} +---- + +== Options + +The following configuration options affect the behavior of the {apiname} API. + +include::partial$configuration/user_id.adoc[leveloffset=+1] + +include::partial$configuration/fetch_users.adoc[leveloffset=+1] + +== Usage Examples + +=== Basic setup + +For a basic setup, configuring the `user_id` option allows you to identify the current user. The `fetch_users` option can be omitted, and {productname} will provide fallback user data. + +[source,js] +---- +tinymce.init({ + selector: '#editor', + user_id: 'alextaylor' +}); +---- + +=== Complete setup with `fetch_users` + +This example demonstrates how to simulate user lookup in-browser. In a production environment, the `fetch_users` function would typically make network requests to your backend API. + +.Example +[source,js] +---- +const userDb = { + 'janedoe': { + id: 'janedoe', + name: 'Jane Doe', + avatar: 'https://example.com/avatar/jane.png' + }, + 'johnsmith': { + id: 'johnsmith', + name: 'John Smith' + }, + 'alextaylor': { + id: 'alextaylor', + name: 'Alex Taylor', + avatar: 'https://example.com/avatar/alex.png' + } +}; + +tinymce.init({ + selector: '#editor', + user_id: 'alextaylor', + fetch_users: (userIds) => { + return Promise.all( + userIds.map( + (userId) => new Promise( + (resolve) => resolve(userDb[userId] || { id: userId }) // Return user data or a fallback object if not found + ) + ) + ) + }, +}); +---- + +NOTE: It is recommended to handle (or catch) promise rejections in the `fetch_users` function by providing fallback data. This will ensure that your application can gracefully handle cases where user data is not found or the network request fails. + +=== Basic usage + +Once the editor is initialized, you can access the current user ID and fetch user information: + +[source,js] +---- +editor.on('init', () => { + // Get the current user ID + const currentUserId = editor.userLookup.userId; + console.log('Current user:', currentUserId); + + // Fetch user information + const users = editor.userLookup.fetchUsers([ currentUserId ]); + + users[currentUserId].then((user) => { + console.log('Current user name:', user.name); + }); + + // Handle multiple users + Promise.all(Object.values(users)).then((allUsers) => { + allUsers.forEach((user) => { + console.log(`Fetched: ${user.name} (${user.id})`); + }); + }); +}); +---- + +=== Advanced usage with UI example + +This example shows how to create a toolbar button that displays the current user's information: + +[source,js] +---- +tinymce.init({ + selector: '#editor', + user_id: 'alextaylor', + setup: (editor) => { + editor.ui.registry.addButton('show-user', { + text: 'Show User', + onAction: () => { + const currentUser = editor.userLookup.userId; + const users = editor.userLookup.fetchUsers([ currentUser ]); + + users[currentUser].then((user) => { + editor.notificationManager.open({ + text: `Logged in as: ${user.name}`, + type: 'info' + }); + }); + } + }); + }, + toolbar: 'show-user' +}); +---- + +=== Fallback Behavior + +If no `fetch_users` function is configured, {productname} will return fallback users with auto-generated data: + +* `name` defaults to the user ID +* `avatar` is an auto-generated SVG using the first letter of the name + +This is useful for simpler setups or prototyping: + +[source,js] +---- +tinymce.init({ + selector: '#editor', + user_id: 'alextaylor' +}); + +editor.on('init', () => { + const users = editor.userLookup.fetchUsers(['alextaylor']); + users['alextaylor'].then((user) => { + console.log('Generated fallback user:', user); + }); +}); +---- diff --git a/modules/ROOT/partials/DEPRECATED/generic_8_userlookup.adoc b/modules/ROOT/partials/DEPRECATED/generic_8_userlookup.adoc new file mode 100644 index 0000000000..f9d4b1dd5b --- /dev/null +++ b/modules/ROOT/partials/DEPRECATED/generic_8_userlookup.adoc @@ -0,0 +1 @@ +IMPORTANT: This option has been deprecated in {productname} {productmajorversion} and may be removed in a future major {productname} release. Use a combination of `user_id` and `fetch_users` instead. | `xref:apis/tinymce.editor.userlookup.adoc[UserLookup]` diff --git a/modules/ROOT/partials/commands/suggestededits-cmds.adoc b/modules/ROOT/partials/commands/suggestededits-cmds.adoc new file mode 100644 index 0000000000..5ac738e8ff --- /dev/null +++ b/modules/ROOT/partials/commands/suggestededits-cmds.adoc @@ -0,0 +1,11 @@ +[cols="1,3",options="header"] +|=== +|Command |Description +|suggestededits |Toggles the Suggested Edits view. +|=== + +.Example +[source,js] +---- +tinymce.activeEditor.execCommand('suggestededits'); +---- diff --git a/modules/ROOT/partials/configuration/defaultmenuitems.adoc b/modules/ROOT/partials/configuration/defaultmenuitems.adoc index dd2c811ce9..eaf1063a98 100644 --- a/modules/ROOT/partials/configuration/defaultmenuitems.adoc +++ b/modules/ROOT/partials/configuration/defaultmenuitems.adoc @@ -5,7 +5,7 @@ tinymce.init({ menu: { file: { title: 'File', items: 'newdocument restoredraft | preview | importword exportpdf exportword | print | deleteallconversations' }, edit: { title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall | searchreplace' }, - view: { title: 'View', items: 'code revisionhistory | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments' }, + view: { title: 'View', items: 'code suggestededits revisionhistory | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments' }, insert: { title: 'Insert', items: 'image link media addcomment pageembed codesample inserttable | math | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents | insertdatetime' }, format: { title: 'Format', items: 'bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat' }, tools: { title: 'Tools', items: 'spellchecker spellcheckerlanguage | a11ycheck code wordcount' }, diff --git a/modules/ROOT/partials/configuration/fetch_users.adoc b/modules/ROOT/partials/configuration/fetch_users.adoc new file mode 100644 index 0000000000..e904ba7ec9 --- /dev/null +++ b/modules/ROOT/partials/configuration/fetch_users.adoc @@ -0,0 +1,55 @@ +[[fetch_users]] +== `fetch_users` + +A **required callback function** that fetches user data. This function is called with an array of user IDs and should return a `Promise` that resolves to an array of user objects. The callback is used by the xref:userlookup.adoc[`UserLookup`] API. If the returned array does not include all requested user IDs, promises for the missing users will be rejected with a "User \{id} not found" error. + +*Type:* `Function` + +*Parameters:* +- `ids` (`Array`): An array of user IDs to fetch. + +*Returns:* +- `Promise>`: A promise that resolves to an array of user objects. + +.Example: using `fetch_users` option +[source,javascript] +---- +tinymce.init({ + selector: '#editor', + user_id: 'alextaylor', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => + fetch(`/users/${userId}`) // Fetch user data from the server + .then((response) => response.json()) + .catch(() => ({ id: userId })) // Still return a valid user object even if the fetch fails + )), +}); +---- + +.Example: returning user array with validation +[source,javascript] +---- +tinymce.init({ + selector: '#editor', + user_id: 'alextaylor', + fetch_users: async (userIds) => { + const users = await fetch('/users', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ userIds }) + }) + .then((response) => response.json()) + .catch(() => + userIds.map((userId) => + ({ id: userId }) // Still returns valid users even if the fetch fails + ) + ); + + return userIds.map( + (userId) => + users.find((user) => user.id === userId) + || ({ id: userId }) // Still returns a valid user even if it wasn't returned from the server + ) + } +}); +---- \ No newline at end of file diff --git a/modules/ROOT/partials/configuration/icon_list.adoc b/modules/ROOT/partials/configuration/icon_list.adoc index c8a777f63d..69835f6847 100644 --- a/modules/ROOT/partials/configuration/icon_list.adoc +++ b/modules/ROOT/partials/configuration/icon_list.adoc @@ -37,11 +37,13 @@ | `+checklist-rtl+` | image:icons/checklist-rtl.svg[checklist-rtl.svg] | `+checklist-rtl.svg+` | `+checklist+` | image:icons/checklist.svg[checklist.svg] | `+checklist.svg+` | `+checkmark+` | image:icons/checkmark.svg[checkmark.svg] | `+checkmark.svg+` +| `+checkmark-filled+` | image:icons/checkmark-filled.svg[checkmark-filled.svg] | `+checkmark-filled.svg+` | `+chevron-down+` | image:icons/chevron-down.svg[chevron-down.svg] | `+chevron-down.svg+` | `+chevron-left+` | image:icons/chevron-left.svg[chevron-left.svg] | `+chevron-left.svg+` | `+chevron-right+` | image:icons/chevron-right.svg[chevron-right.svg] | `+chevron-right.svg+` | `+chevron-up+` | image:icons/chevron-up.svg[chevron-up.svg] | `+chevron-up.svg+` | `+close+` | image:icons/close.svg[close.svg] | `+close.svg+` +| `+close-filled+` | image:icons/close-filled.svg[close-filled.svg] | `+close-filled.svg+` | `+code-sample+` | image:icons/code-sample.svg[code-sample.svg] | `+code-sample.svg+` | `+color-levels+` | image:icons/color-levels.svg[color-levels.svg] | `+color-levels.svg+` | `+color-picker+` | image:icons/color-picker.svg[color-picker.svg] | `+color-picker.svg+` @@ -71,6 +73,7 @@ | `+export-word+` | image:icons/export-word.svg[export-word.svg] | `+export-word.svg+` | `+exposure+` | image:icons/exposure.svg[exposure.svg] | `+exposure.svg+` | `+fb+` | image:icons/fb.svg[fb.svg] | `+fb.svg+` +| `+feedback+` | image:icons/feedback.svg[feedback.svg] | `+feedback.svg+` | `+fill+` | image:icons/fill.svg[fill.svg] | `+fill.svg+` | `+flickr+` | image:icons/flickr.svg[flickr.svg] | `+flickr.svg+` | `+flip-horizontally+` | image:icons/flip-horizontally.svg[flip-horizontally.svg] | `+flip-horizontally.svg+` @@ -176,6 +179,8 @@ | `+strike-through+` | image:icons/strike-through.svg[strike-through.svg] | `+strike-through.svg+` | `+subscript+` | image:icons/subscript.svg[subscript.svg] | `+subscript.svg+` | `+superscript+` | image:icons/superscript.svg[superscript.svg] | `+superscript.svg+` +| `+suggestededits+` | image:icons/suggestededits.svg[suggestededits.svg] | `+suggestededits.svg+` +| `+suggestededits-badge+` | image:icons/suggestededits-badge.svg[suggestededits-badge.svg] | `+suggestededits-badge.svg+` | `+table-caption+` | image:icons/table-caption.svg[table-caption.svg] | `+table-caption.svg+` | `+table-cell-classes+` | image:icons/table-cell-classes.svg[table-cell-classes.svg] | `+table-cell-classes.svg+` | `+table-cell-properties+` | image:icons/table-cell-properties.svg[table-cell-properties.svg] | `+table-cell-properties.svg+` diff --git a/modules/ROOT/partials/configuration/revisionhistory_author.adoc b/modules/ROOT/partials/configuration/revisionhistory_author.adoc index 5e9d867c4e..35978bbf7d 100644 --- a/modules/ROOT/partials/configuration/revisionhistory_author.adoc +++ b/modules/ROOT/partials/configuration/revisionhistory_author.adoc @@ -1,6 +1,8 @@ [[revisionhistory_author]] == `revisionhistory_author` +include::partial$DEPRECATED/generic_8_userlookup.adoc[] + This option configures the author for the `initial` and `draft` revisions. *Type:* xref:#author[Author] `+Object+` diff --git a/modules/ROOT/partials/configuration/revisionhistory_fetch_revision.adoc b/modules/ROOT/partials/configuration/revisionhistory_fetch_revision.adoc index d729459112..56116855b8 100644 --- a/modules/ROOT/partials/configuration/revisionhistory_fetch_revision.adoc +++ b/modules/ROOT/partials/configuration/revisionhistory_fetch_revision.adoc @@ -65,15 +65,15 @@ tinymce.init({ toolbar: 'revisionhistory', revisionhistory_fetch: () => Promise.resolve(lightRevisions), revisionhistory_fetch_revision: (_editor, revision) => new Promise((resolve) => { - let newRevision = null; - for (let i = 0; i < revisions.length; i++) { - const temp = revisions[i]; - if (temp.revisionId === revision.revisionId) { - newRevision = temp; - break; + let newRevision = null; + for (let i = 0; i < revisions.length; i++) { + const temp = revisions[i]; + if (temp.revisionId === revision.revisionId) { + newRevision = temp; + break; + } } - } - resolve(newRevision); + resolve(newRevision); }) }); ---- diff --git a/modules/ROOT/partials/configuration/suggestededits_access.adoc b/modules/ROOT/partials/configuration/suggestededits_access.adoc new file mode 100644 index 0000000000..f011afb87e --- /dev/null +++ b/modules/ROOT/partials/configuration/suggestededits_access.adoc @@ -0,0 +1,44 @@ +[[suggestededits_access]] +== `suggestededits_access` + +The `suggestededits_access` option determines the level of access a user has to the {pluginname} view. This setting is crucial for controlling who can accept or reject suggestions, add feedback, or view suggestions in read-only mode. The `suggestededits_access` option does not control access to the editor content, however when used in conjunction with the xref:editor-important-options#readonly[`readonly`] option it allows for fine-grained control over user permissions. + +When set to: + +* `'full'`: The user has full access to the {pluginname} view, with permission to accept or reject suggestions. +* `'feedback'`: The user has access to the {pluginname} view, with permission to add feedback to suggestions. +* `'read'`: The user has read-only access to the {pluginname} view. +* `'none'`: The user has no access to the {pluginname} view. + +*Type:* `+String+` + +*Possible Values*: `'full'`, `'feedback'`, `'read'`, `'none'` + +*Default Value*: `'full'` + +.Example: `suggestededits_access: 'feedback'` +[source,javascript] +---- +tinymce.init({ + selector: 'textarea', // Change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits', + suggestededits_access: 'feedback', // Change this value to set the {pluginname} view permissions + readonly: false // Set to true to restrict editing +}); +---- + +liveDemo::suggestededits-access-feedback[] + +.Example: `suggestededits_access: 'read'` +[source,javascript] +---- +tinymce.init({ + selector: 'textarea', // Change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits', + suggestededits_access: 'read', // Change this value to set the {pluginname} view permissions + readonly: false // Set to true to restrict editing +}); +---- +liveDemo::suggestededits-access-read[] \ No newline at end of file diff --git a/modules/ROOT/partials/configuration/suggestededits_content.adoc b/modules/ROOT/partials/configuration/suggestededits_content.adoc new file mode 100644 index 0000000000..76ffd87f55 --- /dev/null +++ b/modules/ROOT/partials/configuration/suggestededits_content.adoc @@ -0,0 +1,29 @@ +[[suggestededits_content]] +== `suggestededits_content` + +The `suggestededits_content` option controls whether the content is loaded from the editor or the `suggestededits_model` model, allowing you to define the source of truth for the document. In either case, if a model is not provided, the plugin will generate a new model from the initial editor content. + +When set to: + +* `'html'`: the editor loads content normally, and the plugin synchronises the model with the content. This simplifies the configuration of {pluginname} in an existing integration, by attaching the {pluginname} model as an additional field alongside the editor content. +* `'model'`: the editor uses the `suggestededits_model` option to generate the initial content, ignoring any pre-existing content in the editor. With this configuration, you only need to store and provide the model, simplifying the integration of the {pluginname} plugin. + +NOTE: You are responsible for saving the model and providing it on the next load using the `suggestededits_model` option. + +*Type:* `+String+` + +*Possible Values*: `'html'`, `'model'` + +*Default value:* `'html'` + +.Example: using `suggestededits_content` +[source,js] +---- +tinymce.init({ + selector: 'textarea', // Change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits', + suggestededits_model, // Load the saved model into the editor + suggestededits_content: 'model' // Set to 'model' if you want to load the initial content from the `suggestededits_model` option +}); +---- diff --git a/modules/ROOT/partials/configuration/suggestededits_model.adoc b/modules/ROOT/partials/configuration/suggestededits_model.adoc new file mode 100644 index 0000000000..6e6b1a70aa --- /dev/null +++ b/modules/ROOT/partials/configuration/suggestededits_model.adoc @@ -0,0 +1,22 @@ +[[suggestededits_model]] +== `suggestededits_model` + +The `suggestededits_model` option loads an existing model into the {pluginname} plugin. This model contains all current suggested edits and is used to maintain continuity across sessions. If a model is not provided, the plugin generates a new model from the initial editor content. + +*Type:* `+Object+` + +.Example: using `{plugincode}_model` + +[source,js] +---- +await fetch(`/models/${documentId}`) + .then((response) => response.json()) + .then((model) => { + tinymce.init({ + selector: 'textarea', // Change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits', + suggestededits_model: model // Load the saved model into the editor + }); + }); +---- diff --git a/modules/ROOT/partials/configuration/tinycomments_author.adoc b/modules/ROOT/partials/configuration/tinycomments_author.adoc index 2fd8b7f9a1..cd88b59723 100644 --- a/modules/ROOT/partials/configuration/tinycomments_author.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_author.adoc @@ -1,6 +1,8 @@ [[tinycomments_author]] == `+tinycomments_author+` +include::partial$DEPRECATED/generic_8_userlookup.adoc[] + This option sets the author id to be used when creating or replying to comments. *Type:* `+String+` diff --git a/modules/ROOT/partials/configuration/tinycomments_author_avatar.adoc b/modules/ROOT/partials/configuration/tinycomments_author_avatar.adoc index a36c4b990c..e9cb63768d 100644 --- a/modules/ROOT/partials/configuration/tinycomments_author_avatar.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_author_avatar.adoc @@ -1,6 +1,8 @@ [[tinycomments_author_avatar]] == `+tinycomments_author_avatar+` +include::partial$DEPRECATED/generic_8_userlookup.adoc[] + _Optional_: This option sets the URL for the author's avatar to be used when creating or replying to comments. If this option is omitted, a generated avatar will be used instead. The avatar, if provided: * will be scaled to a 36px diameter circle; and diff --git a/modules/ROOT/partials/configuration/tinycomments_author_name.adoc b/modules/ROOT/partials/configuration/tinycomments_author_name.adoc index e13792222b..d1e459b17c 100644 --- a/modules/ROOT/partials/configuration/tinycomments_author_name.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_author_name.adoc @@ -1,6 +1,8 @@ [[tinycomments_author_name]] == `+tinycomments_author_name+` +include::partial$DEPRECATED/generic_8_userlookup.adoc[] + _Optional_: This option sets the author's display name to be used when creating or replying to comments. If this option is omitted, the author `+id+` is used instead. *Type:* `+String+` diff --git a/modules/ROOT/partials/configuration/tinycomments_can_delete.adoc b/modules/ROOT/partials/configuration/tinycomments_can_delete.adoc index d4b795e43c..b47abe902d 100644 --- a/modules/ROOT/partials/configuration/tinycomments_can_delete.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_can_delete.adoc @@ -1,7 +1,7 @@ [[tinycomments_can_delete]] == `+tinycomments_can_delete+` -_Optional_: This option sets the author permissions for _deleting comment conversations_. If the `+tinycomments_can_delete+` option is not included, the current author (`+tinycomments_author+`) cannot delete comment conversations created by other authors. +_Optional_: This option sets the author permissions for _deleting comment conversations_. If the `+tinycomments_can_delete+` option is **not included**, the current author (`+user_id+`) cannot delete comment conversations created by other authors. *Type:* `+Function+` @@ -9,7 +9,7 @@ _Optional_: This option sets the author permissions for _deleting comment conver [source,js] ---- (req, done, fail) => { - const allowed = req.comments.length > 0 && req.comments[0].author === ; + const allowed = req.comments.length > 0 && req.comments[0].author === ; done({ canDelete: allowed }); @@ -30,7 +30,7 @@ tinymce.init({ plugins: 'tinycomments', toolbar: 'addcomment showcomments', tinycomments_mode: 'embedded', - tinycomments_author: currentAuthor, + user_id: currentAuthor, tinycomments_can_delete: (req, done, fail) => { const allowed = req.comments.length > 0 && req.comments[0].author === currentAuthor; done({ diff --git a/modules/ROOT/partials/configuration/tinycomments_can_delete_comment.adoc b/modules/ROOT/partials/configuration/tinycomments_can_delete_comment.adoc index 3d7f0e6be5..dbd7cf1cd6 100644 --- a/modules/ROOT/partials/configuration/tinycomments_can_delete_comment.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_can_delete_comment.adoc @@ -1,7 +1,7 @@ [[tinycomments_can_delete_comment]] == `+tinycomments_can_delete_comment+` -_Optional_: This option sets the author permissions for _deleting comments_. If the `+tinycomments_can_delete_comment+` option is not included, the current author (`+tinycomments_author+`) **cannot** delete comments added by other authors. +_Optional_: This option sets the author permissions for _deleting comments_. If the `+tinycomments_can_delete_comment+` option is **not included**, the current author (`+user_id+`) **cannot** delete comments added by other authors. *Type:* `+Function+` @@ -9,7 +9,7 @@ _Optional_: This option sets the author permissions for _deleting comments_. If [source,js] ---- (req, done, fail) => { - const allowed = req.comment.author === ; + const allowed = req.comment.author === ; done({ canDelete: allowed }); @@ -30,7 +30,7 @@ tinymce.init({ plugins: 'tinycomments', toolbar: 'addcomment showcomments', tinycomments_mode: 'embedded', - tinycomments_author: currentAuthor, + user_id: currentAuthor, tinycomments_can_delete_comment: (req, done, fail) => { const allowed = req.comment.author === currentAuthor; done({ diff --git a/modules/ROOT/partials/configuration/tinycomments_can_edit_comment.adoc b/modules/ROOT/partials/configuration/tinycomments_can_edit_comment.adoc index dcf1339e64..1b0d7d2e0b 100644 --- a/modules/ROOT/partials/configuration/tinycomments_can_edit_comment.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_can_edit_comment.adoc @@ -1,7 +1,7 @@ [[tinycomments_can_edit_comment]] == `+tinycomments_can_edit_comment+` -_Optional_: This option sets the author permissions for _editing comments_. If the `+tinycomments_can_edit_comment+` option is not included, the current author (`+tinycomments_author+`) cannot edit comments added by other authors. +_Optional_: This option sets the author permissions for _editing comments_. If the `+tinycomments_can_edit_comment+` option is **not included**, the current author (`+user_id+`) cannot edit comments added by other authors. *Type:* `+Function+` @@ -9,7 +9,7 @@ _Optional_: This option sets the author permissions for _editing comments_. If t [source,js] ---- (req, done, fail) => { - const allowed = req.comment.author === ; + const allowed = req.comment.author === ; done({ canEdit: allowed }); @@ -29,7 +29,7 @@ tinymce.init({ plugins: 'tinycomments', toolbar: 'addcomment showcomments', tinycomments_mode: 'embedded', - tinycomments_author: currentAuthor, + user_id: currentAuthor, tinycomments_can_edit_comment: (req, done, fail) => { const allowed = req.comment.author === currentAuthor; done({ diff --git a/modules/ROOT/partials/configuration/tinycomments_can_resolve.adoc b/modules/ROOT/partials/configuration/tinycomments_can_resolve.adoc index 491cb7ba97..5873857e0b 100644 --- a/modules/ROOT/partials/configuration/tinycomments_can_resolve.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_can_resolve.adoc @@ -16,7 +16,7 @@ tinymce.init({ plugins: 'tinycomments', toolbar: 'addcomment showcomments', tinycomments_mode: 'embedded', - tinycomments_author: currentAuthor, + user_id: currentAuthor, tinycomments_can_resolve: (req, done, fail) => { const allowed = req.comments.length > 0 && req.comments[0].author === currentAuthor; done({ diff --git a/modules/ROOT/partials/configuration/tinycomments_fetch_author_info.adoc b/modules/ROOT/partials/configuration/tinycomments_fetch_author_info.adoc index 077409d53d..801ebe839d 100644 --- a/modules/ROOT/partials/configuration/tinycomments_fetch_author_info.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_fetch_author_info.adoc @@ -1,6 +1,8 @@ [[tinycomments_fetch_author_info]] == `+tinycomments_fetch_author_info+` +include::partial$DEPRECATED/generic_8_userlookup.adoc[] + The {pluginname} plugin uses the `+tinycomments_fetch_author_info+` callback function to provide author details for comments displayed in the editor. This function is called whenever a comment is rendered, and it allows the editor to display the author’s name and avatar based on the current user. diff --git a/modules/ROOT/partials/configuration/tinycomments_mentions_enabled.adoc b/modules/ROOT/partials/configuration/tinycomments_mentions_enabled.adoc index 45e0df05ce..23d0a186fd 100644 --- a/modules/ROOT/partials/configuration/tinycomments_mentions_enabled.adoc +++ b/modules/ROOT/partials/configuration/tinycomments_mentions_enabled.adoc @@ -13,14 +13,29 @@ The {pluginname} plugin offers the `+tinycomments_mentions_enabled+` option to c [source,js] ---- +const userDb = { + 'johnsmith': { + id: 'johnsmith', + name: 'John Smith' + }, +}; + tinymce.init({ selector: 'textarea', // change this value according to your html plugins: 'tinycomments mentions', toolbar: 'addcomment showcomments', tinycomments_mentions_enabled: true, tinycomments_mode: 'embedded', - tinycomments_author: 'johnsmith', - tinycomments_author_name: 'John Smith', + user_id: 'johnsmith', + fetch_users: (userIds) => { + return Promise.all( + userIds.map( + (userId) => new Promise( + (resolve) => resolve(userDb[userId] || { id: userId }) + ) + ) + ) + }, mentions_fetch, mentions_menu_complete, mentions_menu_hover, diff --git a/modules/ROOT/partials/configuration/user_id.adoc b/modules/ROOT/partials/configuration/user_id.adoc new file mode 100644 index 0000000000..2bcc3552bf --- /dev/null +++ b/modules/ROOT/partials/configuration/user_id.adoc @@ -0,0 +1,17 @@ +[[user_id]] +== `+user_id+` + +This option sets the unique identifier for the current user in the editor. It is used in the the xref:userlookup.adoc[`UserLookup`] API. + +*Type:* `+String+` + +*Default value:* `'Anonymous'` + +.Example: using `user_id` option +[source,javascript] +---- +tinymce.init({ + selector: 'textarea', // Change this value according to your HTML + user_id: 'alextaylor' // replace this with a unique string to identify the user +}); +---- \ No newline at end of file diff --git a/modules/ROOT/partials/events/suggestededits-events.adoc b/modules/ROOT/partials/events/suggestededits-events.adoc new file mode 100644 index 0000000000..094c76c1fc --- /dev/null +++ b/modules/ROOT/partials/events/suggestededits-events.adoc @@ -0,0 +1,10 @@ +The following events are provided by the xref:{plugincode}.adoc[{pluginname} plugin]. + +[cols="2,1,3",options="header"] +|=== +|Name |Data |Description +|SuggestedEditsBeginReview |N/A |The Suggested Edits view has opened. +|SuggestedEditsReviewComplete |N/A |A review in the Suggested Edits view has been completed. +|SuggestedEditsReviewCancelled |N/A |A review in the Suggested Edits view was cancelled. +|SuggestedEditsHasChangesUpdate |`+hasChanges+` |The Suggested Edits model is updated. The `+hasChanges+` data is a boolean value indicating whether there are suggestions to review. +|=== \ No newline at end of file diff --git a/modules/ROOT/partials/index-pages/premium-plugins.adoc b/modules/ROOT/partials/index-pages/premium-plugins.adoc index 3d76fe8cc5..75cc78e56a 100644 --- a/modules/ROOT/partials/index-pages/premium-plugins.adoc +++ b/modules/ROOT/partials/index-pages/premium-plugins.adoc @@ -177,6 +177,12 @@ xref:autocorrect.adoc[Spelling Autocorrect] Add autocorrection of common typos and spelling errors as well as capitalization correction to {productname}. +a| +[.lead] +xref:suggestededits.adoc[Suggested Edits] + +Collaborate with multiple users on a document by drafting edits, providing feedback, and reviewing suggestions. + a| [.lead] xref:advanced-templates.adoc[Templates] @@ -202,6 +208,4 @@ Cloud-based file and image management for {productname}. // 2. Prepend the inline comment markup to this element // when the number of cells in the table is even. a| - |=== - diff --git a/modules/ROOT/partials/menu-item-ids/suggestededits-menu-items.adoc b/modules/ROOT/partials/menu-item-ids/suggestededits-menu-items.adoc new file mode 100644 index 0000000000..d45e2420b5 --- /dev/null +++ b/modules/ROOT/partials/menu-item-ids/suggestededits-menu-items.adoc @@ -0,0 +1,6 @@ +[cols="1,1,2",options="header"] +|=== +|Menu item identifier |xref:menus-configuration-options.adoc#example-the-tinymce-default-menu-items[Default Menu Location] |Description + +|`suggestededits` |View |Opens the Suggested Edits view. +|=== \ No newline at end of file diff --git a/modules/ROOT/partials/misc/admon-requires-8.0v.adoc b/modules/ROOT/partials/misc/admon-requires-8.0v.adoc new file mode 100644 index 0000000000..9160a25fc7 --- /dev/null +++ b/modules/ROOT/partials/misc/admon-requires-8.0v.adoc @@ -0,0 +1 @@ +NOTE: This feature is only available for {productname} 8.0 and later. diff --git a/modules/ROOT/partials/plugin-apis/suggestededits-apis.adoc b/modules/ROOT/partials/plugin-apis/suggestededits-apis.adoc new file mode 100644 index 0000000000..5801412599 --- /dev/null +++ b/modules/ROOT/partials/plugin-apis/suggestededits-apis.adoc @@ -0,0 +1,163 @@ +[cols="1,1,4",options="header"] +|=== +|Name |Arguments |Description +|getModel |N/A |Returns a JSON object representing the current model of the document. +|setModel | `+Object+` | Sets the current model of the document. +|resetModel |N/A |Generates a model from the current content and sets it as the current model, clearing all suggestions. +|hasChanges |N/A |Returns a boolean value indicating whether the document contains any suggested edits. +|=== + +.Examples + +[source,js] +---- +// Get the current model of the document +tinymce.activeEditor.plugins.suggestededits.getModel(); + +// Set current model of the document +tinymce.activeEditor.plugins.suggestededits.setModel(model); + +// Reset the model to the current content, clearing all suggestions +tinymce.activeEditor.plugins.suggestededits.resetModel(); + +// Check if document contains changes to be reviewed +tinymce.activeEditor.plugins.suggestededits.hasChanges(); +---- + +[[get_model]] +.`getModel` Example + +This example demonstrates how to submit the current document and model to a server, to ensure they are saved synchronously. The current model is retrieved using the `getModel` API. + +[source,js] +---- +tinymce.init({ + selector: 'textarea#suggestededits', // change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits save', + suggestededits_model, + setup: (editor) => { + editor.ui.registry.addButton('save', { + text: 'Save', + onAction: () => { + // Get the current content of the editor + const content = editor.getContent(); + + // Get the current model of the document + const model = editor.plugins.suggestededits.getModel(); + + fetch(`/api/documents/${documentId}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: content, + }) + .then((response) => response.json()) + .then((data) => console.log('Document saved:', data)) + .catch((error) => console.error('Error saving document:', error)); + + // Save the model to the server + fetch(`/api/models/${documentId}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(model), + }) + .then((response) => response.json()) + .then((data) => console.log('Model saved:', data)) + .catch((error) => console.error('Error saving model:', error)); + } + }); + } +}); + +---- + +[[set_model]] +.`setModel` Example + +This example demonstrates how to set the model and the document in the editor, after fetching them from a server. The `setModel` method sets the current model of the document and the editor content, as generated from that model. + +[source,js] +---- +tinymce.init({ + selector: 'textarea#suggestededits', // change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits', + setup: (editor) => { + editor.on('init', () => { + // Fetch and set the suggested edits model + fetch(`/api/models/${documentId}`) + .then((response) => response.json()) + .then((model) => { + editor.plugins.suggestededits.setModel(model); + }) + .catch((error) => console.error(`Error fetching model for ${documentId}:`, error)); + }); + } +}); +---- + +[[reset_model]] +.`resetModel` Example + +This example demonstrates how to reset the model to the current content of the editor, clearing all suggestions. The `resetModel` method generates a new model from the current content and sets it as the current model. + +[source,js] +---- +tinymce.init({ + selector: 'textarea#suggestededits', // change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits clearsuggestions', + setup: (editor) => { + editor.ui.registry.addButton('clearsuggestions', { + text: 'Clear Suggestions', + onAction: () => { + // Reset the model to the current content, clearing all suggestions + editor.plugins.suggestededits.resetModel(); + + editor.notificationManager.open({ + text: 'All suggestions have been cleared.', + type: 'info', + timeout: 5000, + }); + } + }); + } +}); +---- + +[[has_changes]] +.`hasChanges` Example + +This example demonstrates how to check if there are any changes in the document that need to be reviewed before saving. The `hasChanges` method is used to determine if there are any unreviewed edits. + +[source,js] +---- +tinymce.init({ + selector: 'textarea#suggestededits', // change this value according to your HTML + plugins: 'suggestededits', + toolbar: 'suggestededits', + setup: (editor) => { + editor.ui.registry.addButton('save', { + text: 'Save', + onAction: () => { + // Get the current model of the document + const hasChanges = editor.plugins.suggestededits.hasChanges(); + + if (hasChanges) { + editor.notificationManager.open({ + text: 'There are changes to be reviewed.', + type: 'warning', + timeout: 5000, + }); + } else { + // Insert save logic here + } + } + }); + } +}); +---- diff --git a/modules/ROOT/partials/plugins/comments-open-sidebar.adoc b/modules/ROOT/partials/plugins/comments-open-sidebar.adoc index 03cbc525aa..ce46de407e 100644 --- a/modules/ROOT/partials/plugins/comments-open-sidebar.adoc +++ b/modules/ROOT/partials/plugins/comments-open-sidebar.adoc @@ -30,7 +30,7 @@ tinymce.init({ selector: 'textarea', // change this value according to your html plugins: 'tinycomments', tinycomments_mode: 'embedded', - tinycomments_author: currentAuthor, + user_id: currentAuthor, tinycomments_can_resolve: canResolveCommentsCallback, sidebar_show: 'showcomments' }); diff --git a/modules/ROOT/partials/toolbar-button-ids/suggestededits-toolbar-buttons.adoc b/modules/ROOT/partials/toolbar-button-ids/suggestededits-toolbar-buttons.adoc new file mode 100644 index 0000000000..83f8b4fb4c --- /dev/null +++ b/modules/ROOT/partials/toolbar-button-ids/suggestededits-toolbar-buttons.adoc @@ -0,0 +1,7 @@ +[cols="1,3",options="header"] +|=== +|Toolbar button identifier |Description + +|`+suggestededits+` |Opens the Review edits view. +|`+suggestededits-label+` |Opens the Review edits view (this button uses text instead of an icon). +|=== \ No newline at end of file From 588a01ff59d285f36b93f3e20d1a569cb4c58ed9 Mon Sep 17 00:00:00 2001 From: Karl Kemister-Sheppard Date: Wed, 23 Jul 2025 12:41:35 +1000 Subject: [PATCH 6/6] DOC-3147: TinyMCE 8.0.0 Release notes and community changelog. (#3734) * DOC-3147: TinyMCE 8.0.0 Release notes and community changelog. * DOC-3147: HTML schema did not treat colgroup or col elements as block elements. (#3790) * DOC-3147: Decorative images would lose their decorative properties when the subtoolbar was closed using the confirmation button. (#3774) Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Word import of lists with a lighter level failed parsing. (#3765) * DOC-3147: It wasn't possible to navigate out of a using the left and right arrow keys in Firefox. (#3773) Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Using arrow navigation between buttons when a button had the mouse over could stop the navigation. (#3772) Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Resize handles are more accessible with and attributes. (#3749) * DOC-3147: Toolbar drawer now closes when the editor loses focus. (#3750) Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Instructions on how to navigate the color swatch, image select and insert (#3788) table widget are now announced by the screen readers. Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Default value for `pagebreak_separator` option to better suit modern standards. (#3780) * DOC-3147: Default value for option to better suit modern standards. * DOC-3147: Fixed syntax issue. * Update modules/ROOT/partials/configuration/pagebreak_separator.adoc * Update modules/ROOT/partials/configuration/pagebreak_separator.adoc * Update modules/ROOT/pages/8.0-release-notes.adoc --------- Co-authored-by: Karl Kemister-Sheppard * The `contextform` subtoolbar is no longer dismissed when using the back button in inline editors. (#3770) * The subtoolbar is no longer dismissed when using the back button in inline editors. * Update modules/ROOT/pages/8.0-release-notes.adoc --------- Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Deleting a whole element would sometimes modify nearby content (#3752) * DOC-3147: Deleting a whole element would sometimes modify nearby content. * copy edits. * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-3147: Removed undocumented documentBaseUrl property from Editor instances. documentBaseURI is the supported property now. (#3787) * DOC-3147: The translate API now automatically replaces three dots in a row with an ellipsis character. (#3792) * DOC-3147: Strikethrough format could be added outside font size format, which renders incorrectly in some browsers. (#3778) * DOC-3147: Strikethrough format could be added outside font size format, which renders incorrectly in some browsers. * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: CODE:AG <57781325+abhinavgandham@users.noreply.github.com> --------- Co-authored-by: CODE:AG <57781325+abhinavgandham@users.noreply.github.com> * DOC-3147: Accessibility: Enhanced image accessibility checks & rules in `a11ychecker` plugin. (#3794) * DOC-3147: Accessibility: Enhanced image accessibility checks in a11ychecker plugin. * DOC-3147: Add a11ychecker_alt_text_max_length new option to the release notes. * DOC-3147: Fix lvl heading issues for TOC. * DOC-3147: Update accessibility rules and configuration options for image handling * Update modules/ROOT/partials/configuration/a11ychecker_allow_decorative_images.adoc Co-authored-by: CODE:AG <57781325+abhinavgandham@users.noreply.github.com> --------- Co-authored-by: Arvin Han <20640097+ArvinJ-H@users.noreply.github.com> Co-authored-by: CODE:AG <57781325+abhinavgandham@users.noreply.github.com> * DOC-3231: Refactor documentation for server-side components to support Docker deployment. (#3757) * DOC-3231: Refactor documentation for server-side components to support Docker deployment - Removed the deprecated logging services configuration documentation. - Updated references from WAR file deployment to Docker container deployment across multiple documents. - Revised installation and configuration instructions for spellchecking, image proxy, and media embed services to reflect Docker usage. - Added new sections for Docker image retrieval, configuration, and requirements. - Clarified system requirements and troubleshooting steps for Dockerized services. - Adjusted custom dictionaries and Hunspell dictionaries path requirements to remove references to Java services. - Updated supported application servers section to emphasize Docker as the primary deployment method. * DOC-3231: Remove deprecated server-side component installation documentation duplication page. * File cleanup, removal of files not used during copy edits. * Update modules/ROOT/partials/misc/custom-dictionaries-path.adoc Co-authored-by: Tim Dettrick * Update modules/ROOT/partials/misc/hunspell-dictionaries-path.adoc Co-authored-by: Tim Dettrick * Update modules/ROOT/partials/misc/supported-application-servers.adoc Co-authored-by: Tim Dettrick * Update modules/ROOT/pages/support.adoc Co-authored-by: Tim Dettrick * Update modules/ROOT/pages/support.adoc Co-authored-by: Tim Dettrick * Update modules/ROOT/partials/misc/supported-application-servers.adoc --------- Co-authored-by: Tim Dettrick * DOC-3147: Attempting to add a newline directly after a element such as an image would cause an error. (#3737) Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Language code standardization to RFC5646/BCP47 format. (#3771) * DOC-3147: Deprecated `editor.selection.setContent` API (#3789) * DOC-3147: Deprecated API. * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-3147: New `allow_html_in_comments` option to allow HTML-like content inside comment data (#3791) * DOC-3147: New allow_html_in_comments option to allow HTML-like content inside comment data. * Update modules/ROOT/partials/configuration/allow_html_in_comments.adoc Co-authored-by: michalnieruchalski-tiugo * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: michalnieruchalski-tiugo --------- Co-authored-by: michalnieruchalski-tiugo * DOC-3147: The default value of `pagebreak_split_block` is now `true` to match the new `pagebreak_separator` default. (#3795) * DOC-3147: The default value of pagebreak_split_block is now true to match the new pagebreak_separator default. * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: shirqa <43625458+ShiridiGandham@users.noreply.github.com> * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: shirqa <43625458+ShiridiGandham@users.noreply.github.com> * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: Hamza Benkhaldoun * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: Hamza Benkhaldoun --------- Co-authored-by: shirqa <43625458+ShiridiGandham@users.noreply.github.com> Co-authored-by: Hamza Benkhaldoun * DOC-3147: Tooltips can now be closed by pressing the escape key. (#3785) Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Long tooltips could overflow narrow browser windows. (#3769) * DOC-3147: Tab to create a new row in tables with a non-editable final row would freeze the editor. (#3768) * DOC-3147: Tab to create a new row in tables with a non-editable final row would freeze the editor. * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-3147: Nested font sizes no longer cause excessive line spacing. (#3761) * DOC-3147: Nested font sizes no longer cause excessive line spacing. * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-3147: DomParser no longer tries to fix some nodes when parsed with a context, and Improved structure retention when inserting invalid HTML fragments. (#3779) * DOC-3147: Input label for misspelled word was not announced by screen readers. (#3758) * DOC-3147: Input label for misspelled word was not announced by screen readers. * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-3147: Content marked with lang attributes was sometimes not spellchecked correctly. (#3777) * DOC-3147: Codesample dialog would not disable spellcheck as expected. (#3767) * DOC-3147: Codesample dialog would not disable spellcheck as expected. * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-3147: New list_max_depth option to limit list indentation. (#3766) * DOC-3147: New list_max_depth option to limit list indentation. * Update modules/ROOT/partials/configuration/list_max_depth.adoc * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-12102: New list item was not inserted correctly when existing list item had a block element inside. (#3759) * DOC-3147: Cutting a whole HTML element would add an empty paragraph. (#3756) Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Focus is now restored to a dialog after closing an alert, confirmation or another dialog (#3751) * DOC-3147: Focus is now restored to a dialog after closing an alert, confirmation or another dialog. * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: Zuzanna Tomaszyk <91727075+ztomaszyk@users.noreply.github.com> --------- Co-authored-by: Zuzanna Tomaszyk <91727075+ztomaszyk@users.noreply.github.com> * DOC-3147: The ToggleToolbarDrawer command's skipFocus option has been deprecated. (#3748) * DOC-3147: Removed unused Mentions plugin stylesheet. (#3747) * DOC-3147: Mentions username not updating with skin changes in dark mode. (#3746) * DOC-3147: Removed unused `css/tinycomments.css` and `css/tinycomments.js` files. (#3745) * DOC-3147: Removed unused css/tinycomments.css and css/tinycomments.js files. * minor copy edits. * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-3147: Discontinue advertised support for Medical English (UK) in TinyMCE features. (#3742) * DOC-3147: Tabbing when a was selected didn't move the selection on the `figcaption` correctly. (#3776) * DOC-3147: Tabbing when a was selected didn't move the selection on the correctly. * Update modules/ROOT/pages/8.0-release-notes.adoc * Update modules/ROOT/pages/8.0-release-notes.adoc --------- Co-authored-by: Karl Kemister-Sheppard * Revert "DOC-3147: Default value for `pagebreak_separator` option to better suit modern standards. (#3780)" This reverts commit b2a8207afe7b708315ff2114dffb1231995b8e34. * Revert "DOC-3147: The default value of `pagebreak_split_block` is now `true` to match the new `pagebreak_separator` default. (#3795)" This reverts commit 7ad29fdfc1678bf87e8181f9a233a354f408aa65. * DOC-3147: Updated documentation related to a11y (#3799) * DOC-3147: Add I1 url * DOC-3147: Update accessibility documentation: Adjust alt text length limit to 150 characters, enhance descriptions for decorative images, and clarify filtering behavior for empty alt attributes. * Update modules/ROOT/partials/a11y-rules/i1.adoc Co-authored-by: Karl Kemister-Sheppard * Update modules/ROOT/partials/a11y-rules/i3.adoc * Apply suggestion from @ArvinJ-H --------- Co-authored-by: Karl Kemister-Sheppard * DOC-3147: Update split button documentation (#3793) * DOC-3147: Update split button tooltips and documentation * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: Karl Kemister-Sheppard * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: Karl Kemister-Sheppard * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: Karl Kemister-Sheppard * Update modules/ROOT/pages/8.0-release-notes.adoc Co-authored-by: tiny-ben-tran * Update modules/ROOT/pages/custom-split-toolbar-button.adoc Co-authored-by: tiny-ben-tran * Update modules/ROOT/pages/custom-split-toolbar-button.adoc Co-authored-by: tiny-ben-tran * Update modules/ROOT/pages/custom-split-toolbar-button.adoc Co-authored-by: tiny-ben-tran * DOC-3147: Refactor split button documentation and CSS classes for clarity and consistency * DOC-3147: Update split button notes to reflect structural changes. * DOC-3147: Remove CSS classes section and related file for split buttons * Update modules/ROOT/pages/creating-a-skin.adoc * Update modules/ROOT/pages/8.0-release-notes.adoc * Update modules/ROOT/pages/8.0-release-notes.adoc --------- Co-authored-by: Karl Kemister-Sheppard Co-authored-by: tiny-ben-tran * DOC-3147: draft changelog. * DOC-3147: New User Lookup API for retrieving and caching user details. (#3801) * DOC-3147: New User Lookup API for retrieving and caching user details. * Update modules/ROOT/pages/8.0-release-notes.adoc * DOC-3226: Update licensing information and examples for TinyMCE 8 (#3753) * DOC-3226: Update licensing information and examples for TinyMCE 8, including T8LK: prefix requirements for self-hosted deployments across various integrations and documentation. * Enhance license key documentation for TinyMCE 8, clarifying T8LK prefix usage and client-side JWT validation across various integration references and examples. * DOC-3226: Update license key format across documentation and examples to include T8LK prefix for TinyMCE 8 compatibility and included release notes entry. * Update Blazor integration example to include T8LK prefix in LicenseKey for compliance with TinyMCE 8. * Update Blazor integration example to include T8LK prefix in LicenseKey for TinyMCE 8 compliance. * DOC-3226: Technical and readabilty adjustments * DOC-3226: Enhance license key documentation for TinyMCE 8, clarifying T8LK prefix requirements and updating integration references across various frameworks. * DOC-3226: Update license key documentation for TinyMCE 8, clarifying API key usage, T8LK prefix requirements, and adding common error messages with solutions. * Update modules/ROOT/pages/8.0-release-notes.adoc * Update modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc * Update modules/ROOT/partials/integrations/webcomponent-quick-start.adoc Co-authored-by: tiny-ben-tran * Update modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc Co-authored-by: tiny-ben-tran * Update modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc Co-authored-by: tiny-ben-tran * Update modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc Co-authored-by: tiny-ben-tran * DOC-3226: Change readonly to disabled. Add new messages. * Update modules/ROOT/partials/integrations/common/license-key-property.adoc * Update modules/ROOT/partials/integrations/vue-quick-start.adoc Co-authored-by: Tim Dettrick * Update modules/ROOT/partials/integrations/vue-quick-start.adoc Co-authored-by: Tim Dettrick * Update modules/ROOT/partials/integrations/blazor-postinstall.adoc * Update modules/ROOT/partials/integrations/blazor-tech-ref.adoc Co-authored-by: Tim Dettrick * Update modules/ROOT/partials/integrations/react-bundling.adoc * Update modules/ROOT/partials/integrations/svelte-quick-start.adoc Co-authored-by: tiny-ben-tran * Update modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc * Update modules/ROOT/partials/integrations/react-quick-start.adoc * Apply suggestions from code review * DOC-3147: Update key information for self-hosted for licensekeymanager addon. --------- Co-authored-by: ltrouton Co-authored-by: tiny-ben-tran Co-authored-by: Tim Dettrick * DOC-3147: Add `crossorigin` attribute to all script tags for CORS compliance. (#3762) * DOC-3147: Add crossorigin attribute to script tags for CORS compliance. * DOC-3233: Add release notes entry for new crossorigin option, and updated script_crossorigin.adoc partial to provide examples. * DOC-3233:Refactor CORS documentation: replace script_crossorigin.adoc with crossorigin.adoc for improved clarity and organization. * DOC-3233: Update crossorigin function in release notes to match new implementaiton standard. * DOC-3147: Refactor crossorigin examples in documentation to clarify attribute handling and provide options for omitting the attribute. * DOC-3147: Fix indent issues. * DOC-3147: Update scripttag.png file to include crossorigin. * Update modules/ROOT/partials/configuration/crossorigin.adoc * Update modules/ROOT/partials/configuration/crossorigin.adoc * Update modules/ROOT/partials/configuration/crossorigin.adoc * Update modules/ROOT/partials/configuration/crossorigin.adoc * Update modules/ROOT/pages/8.0-release-notes.adoc * Update modules/ROOT/pages/editor-and-features.adoc * DOC-3147: Cleanup pre-release. * DOC-3147: Add fire() method, update changelog to include license key message. * DOC-3147: Migration guide from TinyMCE 7 to TinyMCE 8. (#3781) * DOC-3147: Migration guide from TinyMCE 7 to TinyMCE 8. * DOC-3238: Enhance migration guide with detailed checklists and improves crossorigin entry. * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc * DOC-3147: document structure changes, to include various suggestions, edits, improvements. * DOC-3147: Update migration guide to clarify license key manager directory and initialization steps. * DOC-2147: Add pagebreak_split_block breaking change. * DOC-3146: downgrade pagebreak_split_block lvl to Low. * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: Andrew Herron * Update modules/ROOT/pages/migration-from-7x.adoc * Update modules/ROOT/pages/migration-from-7x.adoc * Update modules/ROOT/pages/migration-from-7x.adoc * Update modules/ROOT/pages/migration-from-7x.adoc * Update modules/ROOT/pages/migration-from-7x.adoc * DOC-3147: Update migration guide and security documentation for DOMPurify changes, and fix for ref numbers. * DOC-3147: Remove content handling updates from migration guide, not breaking change. * DOC-3147: Update migration quick ref table to reflect changes in DOMPurify sanitization. * DOC-3147: Fix broken table link. * DOC-3147: Update documentBaseUrl to include updated information. * DOC-3147: Refine migration guide for TinyMCE 8.0: update breaking change descriptions, enhance license key system details, and clarify DOMPurify sanitization impacts. * Update modules/ROOT/pages/migration-from-7x.adoc Co-authored-by: michalnieruchalski-tiugo * Update modules/ROOT/pages/migration-from-7x.adoc * DOC-3147: Remove reverted pagebreak_split_block, updated Split button CSS structure updates, general doc structural changes. * Update modules/ROOT/pages/migration-from-7x.adoc * Update modules/ROOT/pages/migration-from-7x.adoc * DOC-2147: fix table, and add ask-ai-widget png file. * Update modules/ROOT/pages/migration-from-7x.adoc * Apply suggestions from code review Co-authored-by: Shan * Update modules/ROOT/pages/migration-from-7x.adoc * Update modules/ROOT/pages/migration-from-7x.adoc --------- Co-authored-by: Andrew Herron Co-authored-by: michalnieruchalski-tiugo Co-authored-by: Shan * DOC-3147: Add suggestededits to new premium plugin section in release notes. * DOC-3147: Add suggestededits to full-feature demo. * DOC-3147: Remove model, and linkchecker from full feature demo as its not currently ignored. * Update modules/ROOT/partials/configuration/crossorigin.adoc * Update modules/ROOT/examples/live-demos/a11ychecker/index.js Co-authored-by: tiny-ben-tran * Update modules/ROOT/examples/live-demos/full-featured/index.js * Update modules/ROOT/partials/configuration/list_max_depth.adoc * Update modules/ROOT/partials/misc/ui-languages.adoc * DOC-3147: api-version bump to 8.0.0 and update CDN version. --------- Co-authored-by: CODE:AG <57781325+abhinavgandham@users.noreply.github.com> Co-authored-by: Arvin Han <20640097+ArvinJ-H@users.noreply.github.com> Co-authored-by: Tim Dettrick Co-authored-by: michalnieruchalski-tiugo Co-authored-by: shirqa <43625458+ShiridiGandham@users.noreply.github.com> Co-authored-by: Hamza Benkhaldoun Co-authored-by: Zuzanna Tomaszyk <91727075+ztomaszyk@users.noreply.github.com> Co-authored-by: tiny-ben-tran Co-authored-by: ltrouton Co-authored-by: Andrew Herron Co-authored-by: Shan --- .api-version | 2 +- antora.yml | 8 +- .../examples/live-demos/a11ychecker/index.js | 2 + .../custom-toolbar-split-button/index.js | 3 +- .../live-demos/full-featured/example.js | 21 +- .../live-demos/full-featured/index.js | 45 +- .../examples/live-demos/spellchecker/index.js | 33 +- modules/ROOT/images/ask-ai/ask-ai-widget.png | Bin 0 -> 513483 bytes modules/ROOT/images/scripttag.png | Bin 6549 -> 46908 bytes modules/ROOT/moxiedoc_nav.adoc | 1 + modules/ROOT/nav.adoc | 9 +- modules/ROOT/pages/8.0-release-notes.adoc | 645 +++++++++++++++--- modules/ROOT/pages/a11ychecker.adoc | 301 +------- .../ROOT/pages/apis/tinymce.dom.domutils.adoc | 2 +- .../pages/apis/tinymce.dom.selection.adoc | 6 +- modules/ROOT/pages/apis/tinymce.editor.adoc | 16 +- modules/ROOT/pages/apis/tinymce.root.adoc | 3 +- .../ROOT/pages/apis/tinymce.userlookup.adoc | 69 ++ modules/ROOT/pages/basic-setup.adoc | 3 +- modules/ROOT/pages/changelog.adoc | 112 ++- modules/ROOT/pages/cloud-troubleshooting.adoc | 6 +- .../pages/configure-logging-services.adoc | 45 -- modules/ROOT/pages/content-filtering.adoc | 2 + modules/ROOT/pages/creating-a-skin.adoc | 2 + ...om-dictionaries-for-tiny-spellchecker.adoc | 2 +- .../pages/custom-split-toolbar-button.adoc | 3 + modules/ROOT/pages/editor-and-features.adoc | 9 +- .../pages/editor-command-identifiers.adoc | 6 +- modules/ROOT/pages/editor-plugin-version.adoc | 18 +- ...to-pdf-with-jwt-authentication-nodejs.adoc | 3 +- ...rt-to-pdf-with-jwt-authentication-php.adoc | 3 +- ...o-word-with-jwt-authentication-nodejs.adoc | 3 +- ...t-to-word-with-jwt-authentication-php.adoc | 3 +- modules/ROOT/pages/features-only.adoc | 4 +- ...m-word-with-jwt-authentication-nodejs.adoc | 3 +- ...from-word-with-jwt-authentication-php.adoc | 3 +- .../pages/introduction-to-mediaembed.adoc | 2 +- ...uction-to-premium-selfhosted-services.adoc | 243 ------- .../introduction-to-tiny-spellchecker.adoc | 8 +- modules/ROOT/pages/license-key.adoc | 333 ++++++++- .../ROOT/pages/localize-your-language.adoc | 4 +- .../ROOT/pages/mediaembed-server-config.adoc | 2 +- modules/ROOT/pages/migration-from-7x.adoc | 591 +++++++++++++++- modules/ROOT/pages/migration-from-froala.adoc | 4 +- modules/ROOT/pages/multiple-editors.adoc | 4 +- .../plugin-editor-version-compatibility.adoc | 2 +- modules/ROOT/pages/security.adoc | 6 +- modules/ROOT/pages/support.adoc | 26 +- modules/ROOT/pages/tiny-docs-ai.adoc | 0 modules/ROOT/pages/tinymce-and-cors.adoc | 2 + modules/ROOT/pages/troubleshoot-server.adoc | 79 +-- modules/ROOT/pages/use-tinymce-inline.adoc | 2 +- .../ROOT/pages/user-formatting-options.adoc | 2 + modules/ROOT/pages/vite-es6-npm.adoc | 12 + modules/ROOT/pages/work-with-plugins.adoc | 2 +- modules/ROOT/partials/a11y-rules/d1.adoc | 51 ++ modules/ROOT/partials/a11y-rules/d2.adoc | 57 ++ modules/ROOT/partials/a11y-rules/d3.adoc | 42 ++ modules/ROOT/partials/a11y-rules/d4o.adoc | 44 ++ modules/ROOT/partials/a11y-rules/d4u.adoc | 44 ++ modules/ROOT/partials/a11y-rules/d5.adoc | 81 +++ modules/ROOT/partials/a11y-rules/h93.adoc | 60 ++ modules/ROOT/partials/a11y-rules/i1.adoc | 73 ++ modules/ROOT/partials/a11y-rules/i2.adoc | 63 ++ modules/ROOT/partials/a11y-rules/i3.adoc | 58 ++ modules/ROOT/partials/a11y-rules/i4.adoc | 46 ++ modules/ROOT/partials/a11y-rules/t1.adoc | 80 +++ modules/ROOT/partials/a11y-rules/t2.adoc | 83 +++ modules/ROOT/partials/a11y-rules/t3.adoc | 71 ++ modules/ROOT/partials/a11y-rules/t4a.adoc | 93 +++ modules/ROOT/partials/a11y-rules/t4b.adoc | 113 +++ modules/ROOT/partials/a11y-rules/t4c.adoc | 97 +++ .../configuration/a11y_advanced_options.adoc | 2 +- .../a11ychecker_allow_decorative_images.adoc | 47 +- .../a11ychecker_alt_text_max_length.adoc | 20 + .../a11ychecker_filter_issue.adoc | 2 +- .../configuration/allow_html_in_comments.adoc | 48 ++ .../autocorrect_service_url.adoc | 4 +- .../partials/configuration/crossorigin.adoc | 58 ++ .../image_proxy_service_url.adoc | 2 +- .../ROOT/partials/configuration/language.adoc | 6 +- .../configuration/list_max_depth.adoc | 24 + .../configuration/mediaembed_service_url.adoc | 2 +- .../configuration/spellchecker_language.adoc | 4 +- .../configuration/spellchecker_languages.adoc | 4 +- .../configuration/spellchecker_rpc_url.adoc | 4 +- .../spelling-service-installation.adoc | 19 +- .../install/basic-quickstart-base.adoc | 8 +- .../integrations/angular-tech-ref.adoc | 21 +- .../integrations/blazor-postinstall.adoc | 24 +- .../integrations/blazor-tech-ref.adoc | 20 +- .../integrations/bootstrap-quick-start.adoc | 2 +- .../common/license-key-property.adoc | 20 + .../integrations/jquery-quick-start.adoc | 10 +- .../integrations/laravel-quick-start.adoc | 2 +- .../integrations/rails-quick-start.adoc | 2 +- .../partials/integrations/react-bundling.adoc | 4 +- .../integrations/react-quick-start.adoc | 8 +- .../partials/integrations/react-tech-ref.adoc | 22 +- .../integrations/svelte-quick-start.adoc | 13 +- .../integrations/svelte-tech-ref.adoc | 22 +- .../partials/integrations/vue-tech-ref.adoc | 22 +- .../webcomponent-quick-start.adoc | 7 +- .../integrations/webcomponent-tech-ref.adoc | 37 + .../misc/custom-dictionaries-path.adoc | 2 +- .../misc/hunspell-dictionaries-path.adoc | 2 +- .../partials/misc/setting-the-license.adoc | 22 +- .../partials/misc/spellchecker-languages.adoc | 31 +- .../misc/supported-application-servers.adoc | 20 +- modules/ROOT/partials/misc/ui-languages.adoc | 59 +- .../bundling-vite-es6-npm_editor.adoc | 3 +- .../plugins/spellchecker-content_langs.adoc | 31 +- ...xss-attacks-dom-parser-and-dom-purify.adoc | 6 + 113 files changed, 3532 insertions(+), 1010 deletions(-) create mode 100644 modules/ROOT/images/ask-ai/ask-ai-widget.png create mode 100644 modules/ROOT/pages/apis/tinymce.userlookup.adoc delete mode 100644 modules/ROOT/pages/configure-logging-services.adoc delete mode 100644 modules/ROOT/pages/introduction-to-premium-selfhosted-services.adoc create mode 100644 modules/ROOT/pages/tiny-docs-ai.adoc create mode 100644 modules/ROOT/partials/a11y-rules/d1.adoc create mode 100644 modules/ROOT/partials/a11y-rules/d2.adoc create mode 100644 modules/ROOT/partials/a11y-rules/d3.adoc create mode 100644 modules/ROOT/partials/a11y-rules/d4o.adoc create mode 100644 modules/ROOT/partials/a11y-rules/d4u.adoc create mode 100644 modules/ROOT/partials/a11y-rules/d5.adoc create mode 100644 modules/ROOT/partials/a11y-rules/h93.adoc create mode 100644 modules/ROOT/partials/a11y-rules/i1.adoc create mode 100644 modules/ROOT/partials/a11y-rules/i2.adoc create mode 100644 modules/ROOT/partials/a11y-rules/i3.adoc create mode 100644 modules/ROOT/partials/a11y-rules/i4.adoc create mode 100644 modules/ROOT/partials/a11y-rules/t1.adoc create mode 100644 modules/ROOT/partials/a11y-rules/t2.adoc create mode 100644 modules/ROOT/partials/a11y-rules/t3.adoc create mode 100644 modules/ROOT/partials/a11y-rules/t4a.adoc create mode 100644 modules/ROOT/partials/a11y-rules/t4b.adoc create mode 100644 modules/ROOT/partials/a11y-rules/t4c.adoc create mode 100644 modules/ROOT/partials/configuration/a11ychecker_alt_text_max_length.adoc create mode 100644 modules/ROOT/partials/configuration/allow_html_in_comments.adoc create mode 100644 modules/ROOT/partials/configuration/crossorigin.adoc create mode 100644 modules/ROOT/partials/configuration/list_max_depth.adoc create mode 100644 modules/ROOT/partials/integrations/common/license-key-property.adoc diff --git a/.api-version b/.api-version index 84c5308f03..fa5fce04b3 100644 --- a/.api-version +++ b/.api-version @@ -1 +1 @@ -7.9.0 \ No newline at end of file +8.0.0 \ No newline at end of file diff --git a/antora.yml b/antora.yml index 25792a7583..98a90fea0a 100644 --- a/antora.yml +++ b/antora.yml @@ -8,10 +8,10 @@ asciidoc: idseparator: '-@' # generic variables companyurl: https://www.tiny.cloud - cdnurl: https://cdn.tiny.cloud/1/no-api-key/tinymce/7/tinymce.min.js - tdcdnurl: https://cdn.tiny.cloud/1/_your_api_key_/tinydrive/7/tinydrive.min.js - tinymce_live_demo_url: https://cdn.tiny.cloud/1/qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc/tinymce/8-dev/tinymce.min.js - tinydrive_live_demo_url: https://cdn.tiny.cloud/1/qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc/tinydrive/7/tinydrive.min.js + cdnurl: https://cdn.tiny.cloud/1/no-api-key/tinymce/8/tinymce.min.js + tdcdnurl: https://cdn.tiny.cloud/1/_your_api_key_/tinydrive/8/tinydrive.min.js + tinymce_live_demo_url: https://cdn.tiny.cloud/1/qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc/tinymce/8/tinymce.min.js + tinydrive_live_demo_url: https://cdn.tiny.cloud/1/qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc/tinydrive/8/tinydrive.min.js webcomponent_url: https://cdn.jsdelivr.net/npm/@tinymce/tinymce-webcomponent/dist/tinymce-webcomponent.min.js jquery_url: https://cdn.jsdelivr.net/npm/@tinymce/tinymce-jquery@2/dist/tinymce-jquery.min.js openai_proxy_url: https://openai.ai-demo-proxy.tiny.cloud/v1/chat/completions diff --git a/modules/ROOT/examples/live-demos/a11ychecker/index.js b/modules/ROOT/examples/live-demos/a11ychecker/index.js index bd41b7b2b9..6b07a57d11 100644 --- a/modules/ROOT/examples/live-demos/a11ychecker/index.js +++ b/modules/ROOT/examples/live-demos/a11ychecker/index.js @@ -2,8 +2,10 @@ tinymce.init({ selector: 'textarea#a11ychecker', plugins: 'a11ychecker advcode table advlist lists image media anchor link autoresize', toolbar: 'a11ycheck | blocks bold forecolor backcolor | bullist numlist | link image media anchor | table | code', + max_height: 500, a11y_advanced_options: true, a11ychecker_html_version: 'html5', a11ychecker_level: 'aaa', + a11ychecker_allow_decorative_images: true, content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }' }); diff --git a/modules/ROOT/examples/live-demos/custom-toolbar-split-button/index.js b/modules/ROOT/examples/live-demos/custom-toolbar-split-button/index.js index 256c3488f5..f60882e3e6 100644 --- a/modules/ROOT/examples/live-demos/custom-toolbar-split-button/index.js +++ b/modules/ROOT/examples/live-demos/custom-toolbar-split-button/index.js @@ -6,7 +6,8 @@ tinymce.init({ editor.ui.registry.addSplitButton('myButton', { text: 'My Button', icon: 'info', - tooltip: 'This is an example split-button', + tooltip: 'Execute my action', + chevronTooltip: 'My Button menu options', onAction: () => editor.insertContent('

You clicked the main button

'), onItemAction: (api, value) => editor.insertContent(value), fetch: (callback) => { diff --git a/modules/ROOT/examples/live-demos/full-featured/example.js b/modules/ROOT/examples/live-demos/full-featured/example.js index f3069b013d..2c2f774016 100644 --- a/modules/ROOT/examples/live-demos/full-featured/example.js +++ b/modules/ROOT/examples/live-demos/full-featured/example.js @@ -8,15 +8,18 @@ const openai_api_key = ""; const isSmallScreen = window.matchMedia('(max-width: 1023.5px)').matches; +const tinymceElement = document.querySelector('textarea#full-featured'); +const model = tinymceElement.getAttribute('suggestededits-model'); + tinymce.init({ selector: 'textarea#full-featured', - plugins: 'importword exportword exportpdf ai preview powerpaste casechange importcss tinydrive searchreplace autolink autosave save directionality advcode visualblocks visualchars fullscreen image link math media mediaembed codesample table charmap pagebreak nonbreaking anchor tableofcontents insertdatetime advlist lists checklist wordcount tinymcespellchecker a11ychecker editimage help formatpainter permanentpen pageembed charmap tinycomments mentions quickbars linkchecker emoticons advtable footnotes mergetags autocorrect typography advtemplate markdown revisionhistory', + plugins: 'importword exportword exportpdf ai suggestededits preview powerpaste casechange importcss tinydrive searchreplace autolink autosave save directionality advcode visualblocks visualchars fullscreen image link math media mediaembed codesample table charmap pagebreak nonbreaking anchor tableofcontents insertdatetime advlist lists checklist wordcount tinymcespellchecker a11ychecker editimage help formatpainter permanentpen pageembed charmap tinycomments mentions quickbars emoticons advtable footnotes mergetags autocorrect typography advtemplate markdown revisionhistory', tinydrive_token_provider: 'URL_TO_YOUR_TOKEN_PROVIDER', tinydrive_dropbox_app_key: 'YOUR_DROPBOX_APP_KEY', tinydrive_google_drive_key: 'YOUR_GOOGLE_DRIVE_KEY', tinydrive_google_drive_client_id: 'YOUR_GOOGLE_DRIVE_CLIENT_ID', mobile: { - plugins: 'ai preview powerpaste casechange importcss tinydrive searchreplace autolink autosave save directionality advcode visualblocks visualchars fullscreen image link math media mediaembed codesample table charmap pagebreak nonbreaking anchor tableofcontents insertdatetime advlist lists checklist wordcount tinymcespellchecker a11ychecker help formatpainter pageembed charmap mentions quickbars linkchecker emoticons advtable footnotes mergetags autocorrect typography advtemplate', + plugins: 'ai suggestededits preview powerpaste casechange importcss tinydrive searchreplace autolink autosave save directionality advcode visualblocks visualchars fullscreen image link math media mediaembed codesample table charmap pagebreak nonbreaking anchor tableofcontents insertdatetime advlist lists checklist wordcount tinymcespellchecker a11ychecker help formatpainter pageembed charmap mentions quickbars emoticons advtable footnotes mergetags autocorrect typography advtemplate', }, menu: { tc: { @@ -25,7 +28,7 @@ tinymce.init({ } }, menubar: 'file edit view insert format tools table tc help', - toolbar: "undo redo | importword exportword exportpdf | revisionhistory | aidialog aishortcuts | blocks fontsizeinput | bold italic | align numlist bullist | link image | table math media pageembed | lineheight outdent indent | strikethrough forecolor backcolor formatpainter removeformat | charmap emoticons checklist | code fullscreen preview | save print | pagebreak anchor codesample footnotes mergetags | addtemplate inserttemplate | addcomment showcomments | ltr rtl casechange | spellcheckdialog a11ycheck", // Note: if a toolbar item requires a plugin, the item will not present in the toolbar if the plugin is not also loaded. + toolbar: "undo redo | importword exportword exportpdf | suggestededits | revisionhistory | aidialog aishortcuts | blocks fontsizeinput | bold italic | align numlist bullist | link image | table math media pageembed | lineheight outdent indent | strikethrough forecolor backcolor formatpainter removeformat | charmap emoticons checklist | code fullscreen preview | save print | pagebreak anchor codesample footnotes mergetags | addtemplate inserttemplate | addcomment showcomments | ltr rtl casechange | spellcheckdialog a11ycheck", // Note: if a toolbar item requires a plugin, the item will not present in the toolbar if the plugin is not also loaded. autosave_ask_before_unload: true, autosave_interval: '30s', autosave_prefix: '{path}{query}-{id}-', @@ -439,4 +442,16 @@ tinymce.init({ mentions_menu_complete: mentions_menu_complete, // TODO: Implement mentions_menu_complete mentions_select: mentions_select, // TODO: Implement mentions_select mentions_item_type: "profile", + + // Suggested edits plugin settings + user_id: 'kalebwilson', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => + fetch(`/users/${userId}`) // Fetch user data from the server + .then((response) => response.json()) + .catch(() => ({ id: userId })) // Still return a valid user object even if the fetch fails + )), + suggestededits_model: model, + suggestededits_access: 'full', + suggestededits_content: 'html' }); diff --git a/modules/ROOT/examples/live-demos/full-featured/index.js b/modules/ROOT/examples/live-demos/full-featured/index.js index 3a6655ff7f..c9721b1615 100644 --- a/modules/ROOT/examples/live-demos/full-featured/index.js +++ b/modules/ROOT/examples/live-demos/full-featured/index.js @@ -412,9 +412,33 @@ tinymce.ScriptLoader.loadScripts(['https://cdn.jsdelivr.net/npm/faker@5/dist/fak ]); }; + /** Fake user database for suggested edits */ + const suggestededitsUserDb = { + adamhayes: { + id: 'adamhayes', + name: 'Adam Hayes', + avatar: `https://randomuser.me/api/portraits/men/4.jpg`, + }, + martincook: { + id: 'martincook', + name: 'Martin Cook', + avatar: `https://randomuser.me/api/portraits/men/5.jpg`, + }, + kalebwilson: { + id: 'kalebwilson', + name: 'Kaleb Wilson', + avatar: `https://randomuser.me/api/portraits/men/6.jpg`, + }, + sarahjones: { + id: 'sarahjones', + name: 'Sarah Jones', + avatar: `https://randomuser.me/api/portraits/women/1.jpg`, + } + }; + tinymce.init({ selector: 'textarea#full-featured', - plugins: 'ai preview powerpaste casechange importcss tinydrive searchreplace autolink autosave save directionality advcode visualblocks visualchars fullscreen image link math media mediaembed codesample table charmap pagebreak nonbreaking anchor tableofcontents insertdatetime advlist lists checklist wordcount tinymcespellchecker a11ychecker editimage help formatpainter permanentpen pageembed charmap tinycomments mentions quickbars linkchecker emoticons advtable footnotes mergetags autocorrect typography advtemplate markdown revisionhistory importword exportword exportpdf', + plugins: 'ai suggestededits preview powerpaste casechange importcss tinydrive searchreplace autolink autosave save directionality advcode visualblocks visualchars fullscreen image link math media mediaembed codesample table charmap pagebreak nonbreaking anchor tableofcontents insertdatetime advlist lists checklist wordcount tinymcespellchecker a11ychecker editimage help formatpainter permanentpen pageembed charmap tinycomments mentions quickbars emoticons advtable footnotes mergetags autocorrect typography advtemplate markdown revisionhistory importword exportword exportpdf', editimage_cors_hosts: ['picsum.photos'], tinydrive_token_provider: (success, failure) => { success({ token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJqb2huZG9lIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.Ks_BdfH4CWilyzLNk8S2gDARFhuxIauLa8PwhdEQhEo' }); @@ -424,7 +448,7 @@ tinymce.ScriptLoader.loadScripts(['https://cdn.jsdelivr.net/npm/faker@5/dist/fak tinydrive_google_drive_key: 'AIzaSyAsVRuCBc-BLQ1xNKtnLHB3AeoK-xmOrTc', tinydrive_google_drive_client_id: '748627179519-p9vv3va1mppc66fikai92b3ru73mpukf.apps.googleusercontent.com', mobile: { - plugins: 'ai preview powerpaste casechange importcss tinydrive searchreplace autolink autosave save directionality advcode visualblocks visualchars fullscreen image link math media mediaembed codesample table charmap pagebreak nonbreaking anchor tableofcontents insertdatetime advlist lists checklist wordcount tinymcespellchecker a11ychecker help formatpainter pageembed charmap mentions quickbars linkchecker emoticons advtable footnotes mergetags autocorrect typography advtemplate', + plugins: 'ai suggestededits preview powerpaste casechange importcss tinydrive searchreplace autolink autosave save directionality advcode visualblocks visualchars fullscreen image link math media mediaembed codesample table charmap pagebreak nonbreaking anchor tableofcontents insertdatetime advlist lists checklist wordcount tinymcespellchecker a11ychecker help formatpainter pageembed charmap mentions quickbars emoticons advtable footnotes mergetags autocorrect typography advtemplate', }, menu: { tc: { @@ -433,7 +457,7 @@ tinymce.ScriptLoader.loadScripts(['https://cdn.jsdelivr.net/npm/faker@5/dist/fak } }, menubar: 'file edit view insert format tools table tc help', - toolbar: "undo redo | importword exportword exportpdf | revisionhistory | aidialog aishortcuts | blocks fontsizeinput | bold italic | align numlist bullist | link image | table math media pageembed | lineheight outdent indent | strikethrough forecolor backcolor formatpainter removeformat | charmap emoticons checklist | code fullscreen preview | save print | pagebreak anchor codesample footnotes mergetags | addtemplate inserttemplate | addcomment showcomments | ltr rtl casechange | spellcheckdialog a11ycheck", // Note: if a toolbar item requires a plugin, the item will not present in the toolbar if the plugin is not also loaded. + toolbar: "undo redo | importword exportword exportpdf | suggestededits | revisionhistory | aidialog aishortcuts | blocks fontsizeinput | bold italic | align numlist bullist | link image | table math media pageembed | lineheight outdent indent | strikethrough forecolor backcolor formatpainter removeformat | charmap emoticons checklist | code fullscreen preview | save print | pagebreak anchor codesample footnotes mergetags | addtemplate inserttemplate | addcomment showcomments | ltr rtl casechange | spellcheckdialog a11ycheck", // Note: if a toolbar item requires a plugin, the item will not present in the toolbar if the plugin is not also loaded. autosave_ask_before_unload: true, autosave_interval: '30s', autosave_prefix: '{path}{query}-{id}-', @@ -583,10 +607,15 @@ tinymce.ScriptLoader.loadScripts(['https://cdn.jsdelivr.net/npm/faker@5/dist/fak } }, revisionhistory_fetch: fetchRevisions, - revisionhistory_author: { - id: 'john.doe', - name: 'John Doe' - }, revisionhistory_display_author: true, + // Suggested Edits plugin configuration + user_id: 'kalebwilson', + fetch_users: (userIds) => Promise.all(userIds + .map((userId) => new Promise((resolve) => + resolve(suggestededitsUserDb[userId] || { id: userId })) + )), + suggestededits_content: 'html', + suggestededits_access: 'full', }); -}); + +}); \ No newline at end of file diff --git a/modules/ROOT/examples/live-demos/spellchecker/index.js b/modules/ROOT/examples/live-demos/spellchecker/index.js index 617b1a579d..b3b3d0f3cb 100644 --- a/modules/ROOT/examples/live-demos/spellchecker/index.js +++ b/modules/ROOT/examples/live-demos/spellchecker/index.js @@ -3,31 +3,30 @@ tinymce.init({ plugins: 'code tinymcespellchecker link', toolbar: 'spellchecker language spellcheckdialog', height: 500, - spellchecker_language: 'en_US', + spellchecker_language: 'en-US', content_langs: [ - { title: 'Afrikaans (South Africa)', code: 'af_ZA', customCode: 'af_ZA' }, - { title: 'English (Australia)', code: 'en_AU' }, - { title: 'English (Canada)', code: 'en_CA' }, - { title: 'English (United Kingdom)', code: 'en_GB' }, - { title: 'English (United States)', code: 'en_US' }, - { title: 'Medical English (US)', code: 'en_US', customCode: 'en_US-medical' }, - { title: 'Medical English (UK)', code: 'en_GB', customCode: 'en_GB-medical' }, + { title: 'Afrikaans (South Africa)', code: 'af-ZA', customCode: 'af-ZA' }, + { title: 'English (Australia)', code: 'en-AU' }, + { title: 'English (Canada)', code: 'en-CA' }, + { title: 'English (United Kingdom)', code: 'en-GB' }, + { title: 'English (United States)', code: 'en-US' }, + { title: 'Medical English (US)', code: 'en-US', customCode: 'en-US-medical' }, { title: 'Danish', code: 'da' }, - { title: 'Dutch', code: 'nl_NL' }, + { title: 'Dutch', code: 'nl-NL' }, { title: 'Finnish', code: 'fi' }, { title: 'French', code: 'fr' }, - { title: 'German', code: 'de_DE' }, + { title: 'German', code: 'de-DE' }, { title: 'Hungarian', code: 'hu' }, - { title: 'Italian', code: 'it_IT' }, - { title: 'Maori (New Zealand)', code: 'mi_NZ' }, - { title: 'Norwegian Bokmål', code: 'nb_NO' }, + { title: 'Italian', code: 'it-IT' }, + { title: 'Maori (New Zealand)', code: 'mi-NZ' }, + { title: 'Norwegian Bokmål', code: 'nb-NO' }, { title: 'Norwegian Nynorsk', code: 'nn' }, { title: 'Polish', code: 'pl' }, - { title: 'Portuguese (Brazil)', code: 'pt_BR' }, - { title: 'Portuguese (Portugal)', code: 'pt_PT' }, + { title: 'Portuguese (Brazil)', code: 'pt-BR' }, + { title: 'Portuguese (Portugal)', code: 'pt-PT' }, { title: 'Spanish', code: 'es' }, - { title: 'Swedish', code: 'sv_SE' }, - { title: 'Swedish (Finland)', code: 'sv_FI' } + { title: 'Swedish', code: 'sv-SE' }, + { title: 'Swedish (Finland)', code: 'sv-FI' } ], content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }' }); diff --git a/modules/ROOT/images/ask-ai/ask-ai-widget.png b/modules/ROOT/images/ask-ai/ask-ai-widget.png new file mode 100644 index 0000000000000000000000000000000000000000..48ecc2d9afea93d464cab1319ea43d68c741203e GIT binary patch literal 513483 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

y*N8b(-WdAY(HEv`~$JUlyV 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%0DA>R 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ⅆP-Z{k?YI9I0)@?p+$Yn+XF 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 FvO7$W^Q}mDg!ScgyuD zX9pW8gi_&(3!%NljEL+;oa;dOv<1$4Cm@4{CwGN!wNjQd7w+N8K~YgrS%6)5h5LsR z&rSGN;kRme1mY`FIeLflx8$G(?UG1gI%^s4UxadH3?x+@6C^4>3fqw<3o44XY(Abt z&>dWab?aP9M7Es!N|rMJ>mB0St*)Pl!%x7ETn#FIh+tGrK{QI#!yuJPK+vQM0 zXA14FtUK^Z(Z@61e`cJ;zm3;cPFa?IdQ$U&-p*2&+u!SaHRtwE%g2{6gl@5{;8ySz4uU*V=b2WI zaxIfcuX=az)Bcd9ihp_V8zOMNgNA>KEzbJ}yt$6JC&HJ29$xuuh&-rhR2&}RMSmbq z9&(im&*pGGq)$oDMsH&=BCTUNIOp@c+o8WdatMMN2zb*NPAB*ZF7Yf^?CIc(b}3sv zNBcVM@VQ18HcxDWJo02Z#Z-xUlY07DvRug5^w-FU9xpSJ1)ZyxS*rKX$Jrx1A`$1O zREQd&5XV~XpL-!_BP|c7>Hde^dcF|)Qg!%f7jP8fK#dA<-GYCPgLu94t$9?aFSeLw zLkE%F-ExId7=zw#n3XNGuc|mhapb$mD+&Yh=m>Q7VO_3_n-LC2RUa*Mgq#5|C(ClY zC1|I~jiNR;mq~_Po6Dtj+k5o9mk{TJ176DHuxC}KiXcyTd6`;VezxoNfX5UNBDolR z@Km+->>BCm{eC#n=@bXtdR5j7nFD zsp6ccVjJR-qxIdTYU1!yL|7lyr8QhDa%lSd$y(a`OQE>6K9IvGhx;k8V2Zw`0EB5~-ZwPcN;yRoDLfl-yx4SPX#DM4kg5h<;>%K)3qF9b+!MC>Z&iDv>l3a@|k~d??W^sa|84;O0q8;*NNn^NN?_+>k{wHA)X9zhMfyu z`*zC>vl|YZlE1a_WvnL21pB&9|3kGHd4IlF66~AaJy<4L zYOT!sjekEkf-3M?O%bF* zZ>C_0N%+y(oAY;v7{Su;AS2&xjiLO!C3C7JC_I>uN;W)Ri9j~ zd`*(;W385TR;*%C5PI+2>HH_E&575NRsjBck>)qt@V{49q1C;+bNV3;SKxiqyi|gT zq4#lyxM^&f9>c2m0|qK!VfRhIky*bp1z&xym!w3jpU^8@*?|%>@2CatW7q2_01$XM zG^DiGFn7%)qH6M7F>CF0r~-$`%uStzyVNf(KH{*wLQNKtNAa*#e|HUBivvqss&5wG z(Fq2-TeJwyjkK2bomFG54kaSt1Cx0fgNSc#m(GReb90X-!>PiHL?8dVdU6jRzsC1d zb-s&KWg(pvhyOj>GGI(Zb*be%?0o9#%1YcYpXmUG=!HV&Q_!L~?6_>@pux;-aJazT z;ENZbxWK0c0+xcD-A*hK`cc5z7ev|xL7-i(Y2`qwkO_OEy9_e8gkhWV`MDACRVFGY z*NY)ut_X4X-mJ<;QQ*CFOysVQOhtRkRFB>DePxh{<}97)YU*2uwpWK zrQF~72^RcR4T-)#m{0pYaI=-E$~#2HR9IomiF5Wmg^pCtp!57~pDj&M3m{no zGRb12#sV`H_;efgtHBV1LrQK2l$Bhwk&kSX7Eiwh?7KW1E;$d2Y(R3zRCv6o$TZpY z$$sprN04xWANTxQj^rW&HrujO6_&HvvisQJOBhSTuaCH&q?JZKlNl5NRdJehchNya z&cx=vON&77L`B2;WTXlMC5gWN^G;n~%f8imY95qVcMP>k=4ujsK0NCwePR!x=R6zQE8+GM zva1_4$>yAypJ5xwrKwZ(>F{ri7=J(HuSSTxjCfgQYb9b3!MD_cla;9oyLcmzo8e+2 z@AF|HHur7m)Tz6G^;}nH=k&=*^&~%PK^EBBq(yC3q3&DlOhw0lT+@iz3{Zg{mvulp z(}JIXnyZ;Yq33*jML$ASl&N=i1gzBD$HUNAGp(dE{^-^4lHnZZy~Rdp4Jo8*s(hzQ(ZOopu%J345~;{CSf zts_b!WDtT#+e$;Hwz9Sk?9dI?e_Q&4Kvq&3^dY!v(Q7SaoYzvePEJ2Lh{Mv} zmKNIEKNl1vXYgHHCszwMy@|XJi42~C4g@&1) zD!fW;zkWO4Eup#Z#udp)x>cH0Z2{muPih=^J&L;LCnpnTR*gg{b7h^3z@1)E;_zRHnc4n!$B%ewMHvPSb+j5+404lg#t(9Xl(Rs^>g`U`{r z(t6X%{bQuXTdJL43?BeJjnx(N@;Gl!?C{jhFDzvE<8a)jex#hQLNrHnkD6?g4ePgM zZe7R_1$34BWM*cf69)hnU-;k!ff$JVpvUm5q_>N06a~|Gq~kMu&l?IwXV|zc-~R#W z_XRv8wo|fI3z0|7Mz?o%ZthFCOudq+FaA}hQZR5Og_WdO=;PiO%v4b0`u??Mn_>IMdXn2IIM~>{2r?3qitt_ln+`Aj3@gYYs$dBDE-2>@L7EwE z@Io}Z?fvr3CL0xW_3)UHm6vb${#^>(tu`n@>LW14teAKj1G)X%%4?#)YX6J}g6(?6 zsui!&%l!(n;=UU~lqz)>z(pPE{2-t~#+R>gQ)M>2)^l;0psBB~H=6_W2~KO3iHgfl zRGjjUC3Pk&R7WAl2DHo|I@D0%oBSi#?6inf-)>5!^j;?y8adzlwELka5rBXSvh6_* zSmcuv?6*_hIuh(b4-XGVxgj)+DpwGdR1MC!k8RuiQr%*8!cRK<03AQWLPz+;=<_v(>9=X=r`x(9oyrq(0+sfI+#~ z*+*0xR_*GxfTQ;fXo_|mqLEEU)Zb5a5y9$Hr_I#8diVpoUOIcBx~Aq0LrnRXh3V-e zBdpOT4H4!a^e1Ta8#wi?08Hol1$}FtG_<5J)!`KmZowS;@2jl|g0=ENqiW&n%Mw7R z?sW05Xtu0QNmp^VS5smj09M;N1`=bYa_?m}Y0P_&Mm=%%Cq3p*g-xBhHj(lEzS@8@ zHa2!NL1jh&5TKl#PEXl@;(aPpTU)#KIW~6N*+f+d;+1LR={ZZ2aX<8;xvXqnI(z8* zbNxJl;X3X9-=FY9v*ARmX0b6sp}~ayL5O#`fBBa$y8d`$KY#kvLNl&cRU}zL$FX9} zqHlzo06)LwoG%4h)V&}d=Iaq}R+B_cDmBbo+c$7EzEz2Z~(Mhdw3*NV5X!`zKw<57pPH z7CNF67ktvsS1D)eQ=)^2AgnJNScATAyS`S!T#$x3J$|hOkzHF`>(&&A2n(aeA?hqn z5&h>%npK*PKfz3>Utf(XG$#3f|G0rb9||;3uPthXvdGkHrLRvVImusIS{hhbShz7j+7E*T+ER=6 z5ahVN>Xm-B5iqlzV&v*NNq-G;{36+u_{Xlv(*JnPBg!hba4i8XRfTkMk6p9V>3h^a z4i4;SmE%Ciz~u_9{_U4Q&U1*%=7DnVf~;|~sym1Z`1bE4A>^ezw(KrIp7(Wrd^`@B zAW9k)!`+?FqDqq~KPS)c z$?uD;2~Jr2WDTs+d`1UB2V|(|<#u&un~PP+8fb2A-gw(EcRc<@c8jvctpQjTO6aALa zJ|jrnzaL{@OofAGr?%+5ULK~N$VA&K8hl`^6xdhPbEDpvC{aWU`5!Z&bTl!L!cns? z)zvGY-l_Og27rydY_6#p`-wzz`0Mv2h33{7%!pF163hL=UOrZ!26|YIfu05{862lN zFVj_|6j(#5>C!CH4KvsyI~pTu^FXI7=DP^>z$wr2XJsmanGCn|AG zkRdd0D;;pjZa*gdkA(&OxIW_-F%X&TPafptZ5+mdl9`;q@QLSm(ERZoqxZVG(>w0WV>t0 z85Ch#dd%I_swuolJpKkuINTaH&L$BkLlqG)jNk(o;zK(wuCDd=nLsN%!I7l?hYfQP zg-!zMhsPr>Jcfa-+x(wSu^%PvwKB^hilTVM zn60(=Jja}p!e$vY&=(#PjPS=9-IOO9Px+BaHITltw+muk7Hn~&jf258c5_` zy>e&^F*{9CfBUw2&R-8A$oCp>PA#xPE<_u^HzFUqHsK3}GSbr^u)))(-4FlX{`*G? zdEMBQ7l8~maaWIHr2Q)@DoQ{J4dA(Cigb9=61v-KrOMsI!$UpoXMtEELI^78Y zwau@TB9C2X{-Lwr_Ee9Fo)ADlEjZ9FIyyB@FnAAZ06HCwM!Pa)$CD;dy7PeV{oYsV z_0AiiF3m3|Cs$uq#^RQCCPOdvUsRTaw*}#OB?A2}xVo}3y|GcS$rMV|snsQT8+9OQP=LVRF~?HT+plQvrc^b6p)UB8_p3457Vq*tXWdnZWm%F(!C z6(|N^2;L9PaJm6iSLs-icq7pGkLD~hfQUS)v8yXWT|4pvmKseO+HZ#vLTnhKfUyCu zm0rx7DUFZc8AnV1CYiQD5rbEpnhBSf?$EE-}L{H#%^5Ajqd6^l?_reYhBHq^18bKTZXBQK4WP4 zd`{=lcH)nXjj~FAAy&q;l$|`t%k|^W0n8B>7uPyA@aO&yqGqc_-jHXej+X zi-X%R5b(O->^;-I(iRuThHjdem?%9m^Xpfp+MSbpD;~=@$YAcf=sy?gN3Y^ICKKk7 zZdPI(twl%%p`y|oM8~EtUxHu~j(0E0111Al(sK9HR!VNBtCw_G%`1B;9yr`2Rc#YdN=5-=uq>-lT#01dt^BcYKzs7JCX;J2|eumwCPF zfRq|ukyzW0I=1~n|DjD5XDlZlNW{5s(kEm(roaFA5+r3`HML@P_fAB2wv@EA=b_i{ zdVis_rfDmvV1;0O(lxa}D-FUA$-Dt<+i|SJaT3xJQNX5tU@V7vQN19U01JZ~(crT^ ztH33{bvZwq126-fcNc^8>fC_2lHr@!xl0dfGg_{a{A@<%`=TB`*O1!IkLa|iPX?IO7NxqZyH>)as9a8-r=)f-k4I))u(wfBK+pL9lx9z z=9uUyIlokLZ&l~gs;X$)ty2VVkhk+Id>oBH2{9IP#E;p)!fM$GD};$b+|s23WlD1^qjN}>IW#~tf}hf3e1&z)e? z(L4Y9J}9jY&;Ux33G#-6o|OP?n2?z~Jw)_%bJISjy=3!H3iRtT-HZklUXlJoN@mMS z&`jyVnBwzm;eT$`ok4Nbo^IBCYo=I8WGR3Zb&sxFjW>hKGqpY{(uT3~{L8~DhP$oF zj}LEaQQikibw3T%%yL7jPFYN zVm7NTHrP50RAXt16HDXh9fD15mb}Svf5bT?e$<%zW~qLmC=IN6EZ9@H3k{JT}P@W zi+XT?LetgP(o-!pDr$rqkyddmE5NPq1)#p4{`UPi%kR(1u^q4`aNcy;+SIZvC!>!= zQtzSgIIw|#{76OLmR*dr@)b+&t!uYv`E!|qgms_Ym_0doJf5O^^7FX8_d$qo6KT1{ za0Bvi%*nzcZPVkd)_b!!R>dri;qyjW=h1n0GeTYga1b93oQ3Qfr$SQiH0h(A?ig`= zo5XByKJgnn{9jDkURga!KdArxv+)#MLd)w`oEjH-a&NCLDJ5kTr@`j^XxrztF6_zy z2m?*H*DpaR91&+*z=aBn!NdR5dEhU9KKqVQ;Lr0N1Z9C~ooeYT3*x)9WKukpdOK{- z7sPzM(chrf%zd?4DwXXo^FYVGA9v-ksp&9R$oRM+9UGwsygCsuEcE&H^BNUZBPA2h z4-sZNy4pnHNV-OF)fP-uMDLjv4KT|@GPnyO_egr(omX{Y0-tkJV&7Pms6~#f7(#Ch z*L?om$8beMQ`4BYZRhCnJu;ar?|pdR_d(0X9XG7_8V=GH4t7K&FZnUJopo+*PVQZ* zRmq$5O|dd5{^1%xz7dkqym=kJj?NMfk!Gn-c;p3$V(!!va8QkkGQi z+zl!kRVJH)OdlO!eBgdi&EQ`9DdXKge}*jzztB^k{0|lbD-yBa#&CKZ+Dd1K7bRYh zWpa8xJb5!^fj~5#lbf2F8mhi!M=~iGZU#+1ki(&M^oehid#&REcceY~j7=Fx3-GhJ zk(Jt5A3fx}<2?tc0AZdEU0MPpxkWbK( zq9QugwEGflIzv3*M}>l$B(*4MvAEvv-{&#X>SO?zg6sz9We&id z;@W%_sv8@pYYCv6g`+y43X=u+4{%_F^%C7IESiqJSUg|!@_;%8{+ZV?F_Y?Cf3DHI z1LGyYNl5){ady*g?ZL#!KVrNLAoP@}y|%X=zcK}&G&{`X_;^1iG(c99?QpsH*hEz% zci3Kj!zGLjw&iMNl@TjqVq)T%pMFF2lnB-elr>7c+=5?o8Q=x_1ww%A>s3`a`{z4s zrHJ#{!dTg~9zl3P?d#>d`J?H$!Ay=hVU*b~UF)vlI6GMFqZEPUS8)wPGB zP`@8wsCw)Zu-b?muU<8oPQU{NmJHi_C7B4}|9qkxO=8^5*VA+8*h^ry+YKb)VEcWI zlTLo>T33{4Y`IWRh5w|P7C>|xf-@n zckV>o1@OC{kcMcXg4EF!RfbBise`XJK|^ zXS4HJxx9&bfAb4_5@=cpwJe>xV#`A!U$(U=RhN}n!dPc7S$^;vWd(1b z+|(M&l1saE>C#~iEam;V!eRUPE0?&qPG9Ha11UVc?w**jGOqIysOgpjUf0Q_{H^oag|+ou^{SdwBxbhMKGLlK-}mQpf*Lb|EI+X=YsDW- zzEG{YRSMdQzNarU{8fd)ZJ^!0QKtVADp8_{*UwP}}pU*hbhh)`yHMr#o9A2rrtQB@vu$$vV zj$-6qpowb#^@`7*&*($qPV^?<`F&h;UrE!0;~Bvh?w(ll1hV zFJHdYs@4{;rS!nzHX0<*Xy&XfrdQVw;>CfNNlZqD0D@@Ygr&Q2oU7-*I2K_z+wD_K zVa=uWPatuOvy<0`SzAEAKe~wO@$7-NOgbzQz_XKaYFV3NFrz6D9v?iFP08s#tnz8l zod%-h0Z9r%BBBaca3q~7`0CXwV&#AI>VjNQ{)T`p%dYhZ$l*kSE1*VR6x@KE9i99;&H>WMjLZ6+zMw+!rpC-b`cU24KcJ+>$!*iJP1Kly^>K)w!5DINp$@9 z@nUeIfRYBlk2>{0((#4}Cxb}06=G&+SjzKG>Uv;?XcOR#$w@kI_qY?>54~OB^@Of4 zAc~@p5f-^#J^DKbU0e2~Wp;Mf{nL6=tvoVEU_(93!lyFWvBAM*XVM~Fv=96*94 zv&y{}_ZYL=zM02;ZqNYFj*Vj#6B7fH1JEoD3WleE)cz*(Fd2u`PO_oFm%SN<;?;P? z?%Wyt#t9UQS?Av0V9Oy*09)MH_pJhy>44}z7p8CpQ29-3Yp(wyT{`F7^~csubg@9J zK4?+bK&nO=y*#M+qCg;8#)D9XzaVg(1w;fSq9<%y}28UWYo!f ze>)sy83EX%gEf()t&FeKP68727I3;?$24y;@Uk<~$y|mV0{rt6cEkWY4T!>Lp(-ttZaJHzG(Z(300;1>WV{wCy+0p%TW1N zoS*J_?b@dQJ(0Kr(qZveArxIxXIVFTVwlAbz%09C)Gk06Fw~Zo_A?x)TLaXO@rTg< z7N7NrxGQ=VEtmhAh*N7*fAr{5*J+>^)q!-&bUh#IF)&D0*t=L(!#>R zN>Z4b(t+x6{?E;`<~) zdxL8{?#;i>p3pOn_HlWKqeZI(FR8CjZy(Td=g*(V0v7A`3)Gaw-mmAL9pXPZz&Osw zyltQ*iyMlV%FE?Quph#}XTeA!+~L@u3ktRGx8|v+vQS`~z%~Y=8-NaQBlQM=qe6M< zH}dXeU$`kKD8b9wyMv}a!^Pgc_UDiKk2=^m3Us96p!Bj(;Q0|vQtvtgHh0%mNTv@k zCJBV(B1xzC7pMOhO-N#Nar1yo7XxhC0&fvL&{EFo{rOW`gZ{$>VLT|6)@BFx%P7>mG1Ou}hmgek>lx4_;|~y1^gS`2x}eKvxcfp+zokQv`+-MDHvT-IV07}HnkFh4whRvsyMmB8%qmq)VADAT5FHPwFvgOGaMkrdM1g~Ni8{!zAusoQ!I^W902?CM2Du9I59=(DB0Dv2 zYSpc00?OoE{;>VOQhp48m~40SoNobUpNIwpFCke8n+Q7tTvUd^_u(GIWfz%AnWY%8 zUQTglV3b%BShSpL0Kx)>)=(UX6;q~$e-^$+ws_d?0cQ2%hY#Y!YBRdOvuqxS@RtJ* zNAB&{@$Qduu^uFKkJ?Y2x5E#^cGR`2Kz23-+BNX^xX%FE2HPrG)d ztu^nB zFB!-rFlLZX1q`!O2xC2{;;$z&@?T$2Lbg~5ev0$bqs;?15SX8H!2V6IxVyT_J^u4+ z1yNbA0U`kNqCEW0ojcBe%HJesWo23UHUmP85_lZ6TCwMDS#ETJxgOa%d9J{)0uK3t z0r3bmIPT4CSXisA+|jCM_S#TrH4v?gIFwC4MW?|ioDVIUo5J;N`TD{ zN`IuTZs;nas+j-WYC!7ZpO4w%W#aY%>V{g@JDARL9s+#l0k~oG>IYfTtXrOo^anlh@2zs~ zT8-jDK?xbgw#}9w@UL$V@>X87?a@}?w7P!%ddNZcH8D5$K6p}=KgHeGw>H*wh)XnB zC`}=fQ5eJyw7O6N)8TdX2X>lxF1;(Qz;*!u1NZ|JabQ_l6g>*lJ=leEB5U5K?jBXQ z_4700y-2vXC}0YhEfb;hxpnD>Q~1J3Y~rUvE>BHQ%MwYM?|>pukmRvJ*1e*H zHN+jzF5~m793W?-v9fIUUy~n3d<*<@dF7Cxh+M2GY6VATUfP(xOnPe@-Xm0S}ULf4@|m7(VtC(yxl{A<>c$L z@}Egb5&B?a^}L~~wkqJq03G`A#Xz+E?lK>^mZC8xrRLBoQ}`3Q#z_ikKOk|D)=a<) zl7vFRK^cIW%!>r8&Bv7pyf|#Y=T&k};nCiG2Ze(W^gpMI&M!4UcJ+NU2)F+V*et_K z@GeH6$;-jmKqgfHsu-};k!outu-AQnZ<6AFu%q}NrF{BuJ(YF#z`%Eh3Qv7A0|2v> zq@)hxz`&cmhJm+rF^AqaPz4)5oMnjpKq3+)Ye6&tf4R~I!~|C$g4VujeqE>eLH0kg zVD1cEMYn#k~kv8er%VLlY z8s8e5n4F@tM#EHr)=QKDn)l~)?!&BlW5$2j9pKdn$W@5Q)60+LJW%X3;^X5F=Fm}W ztJSv?pPbcsw5Rw=?Y6VC^GU$Rek*AsVwbJFqdh0=pem1~`%r zoOVas?kGlr^G6i`+5NBm*5h%OdaCW`LV&^R1{cGjEj##4AsmfHTaYjZM#8W#I)T@@ zDck5TgCw&nZI`z^L0X3evcMvNb@(a(4k%7I-<3b%oSeB-`~`6Gn8C>aSuQ_0H{=BX z^gjVg$qlgNP?l)-EaAsukmfRJEuf=(zM$WB?D$TKBCw^c0>^aGO)H&dk;8>q39JCt zb%y!WsTy#PGn3G>aznVI^Z8dw6sbqYA_qW%c}12t28jW`_7sf=G4atAJrGWnV27)1 zgU29lD5RyHvcP+TjL@+WdH^w3wj6bA)YSnf1~3+s8>wEsFaO79O0b~?>8ti5wGV%O zSy0cyzW0ICNv;M5`C%?F(C!9o5M7Egb5B^kvjk#$$JuDW(+~rJrCjZHd$oa`^1otm z1Sk#J?rupMHXTHm+9t5x3ctcn`uvK;xxFpb=ezyd%*Q5XZ^#brKi>Z z=ZXg**mAMu2tek~okSPh00qVb31qp;Lho&9fQvtsA^8ft%YjwG%ZoVHJ!D`+NRCBH z{rTnlyk`LG2!we@3*g-vo0?i?m3su?Kky*BIFXh$POt)7Kqxqg2^u*qUTBoG9N<8D z>wz%&C1)l^bBZdDC9IBuubb(%(KASXtWqvTqfN#VrNlmTXPFa=zC$q0-sAkuor6v+{6kwbY!l z4-j-h7o93;uD@TK>B|39zgECGchJpqU_NRkl}={+Kl-je4PMcq+Y!`|nLzMe9s!@y z8BjTwcz9OzAd=$Zu1D7RZ9yM!CAPmmZE_OltrDR=DlT1ti8{rCZk~V9b?S623vZkn ze<~Nuwt#@nMz%0f4BjxBOhe6Nq08YX>A5~l;-Ien{-T&d<}HO12ojxlP6D3MZ|B!3~p`qgE?pcyW5+& zbIeI9`i9ppbPSJvkz3T6t*MJ?wv3?e+EGTUygYy9tn!F$k0=*LUZEq>j$$sI9N;$= zGCDaSOHXl^T-_hqpIzA%7W5bF9a6a%dMiE zR?H1LRyoSpMIexWXYSvAK!*R5wNgctzO5Ka#UD-RdPeZZn{vxbUoYvHz)qIWWgsWr zi6!Mk)o*u&A8zK%h#2L(XR##*7H?R)5dD3PM{z0*Kk=A4d=AECskEUOQF(#5Su#hH z-Hc&r!Tb&$5p0-7p!%Rg0}^07$qHbJ(&|LJKqN{{ojEXF1dId@$XsV%WxF}Yk*m1{ zMg$OWZfN`yFy0LqF-h6ocNWeaNoh@kmX1x2!(+IiZgZ$efdl~rZphQy1v&Q{Lu+Tt zxsHv)2MJPPg1zoTntWh?AuoyVn6x+e1|`T6|Y>R zdqC}!?GT>{=TQl06`wIzK3lPn{bl4;0xyXiYjaOI%N6#6HabGvAB#iikJ&%CQtvqt z^=nfo_JU{mozbbv0wpF)!;*-Q;?XvPlB)dxry6WSVD(bR@B|@V224a4okEp3Pe}8h z@xB0j6DiraY3i7(aY>hRP8laXVfyx}1*_IjvYMb(d2M0RCywebzbkOEOo;JJ&FB99 zf-HnpGiT><4(h9f5=UuC(KRMGfW?e_Ia`S*Bv6@GEaq8i}<=9c=Xt{`hS3oC+K#d{uF&zZbDg zD#azUZfTI`GE(P9y`5`Uf3MW^_lLCLvlJA7zkUQXp4$s#0sR7~!$653c!9dm87R_Q z=5C~4JNKdKUgozTS8^_Pa2 zijf=DSI3z1WS>W-k4QXxpx`$?UW(gEyxgR#B^LU_+sEQ zS@HKob48&$;!m5>5WRz3Xufyp!g}X zwtM0GV+(zKsRFNm30|s!O}iPC)K@$iou7ZeCrwPN8l+I_{O9pb+pDxP=DgvCM1q02 zslSu_ErMo=x;gynf`#`5bxcFv3`)U=v8W*c78yC3dGcmZLIuA@erA|y*ZpC3kCqmp zBu;mO>**`Dx^4*-OM|-36v`zt4NU4Xu9cn>-6sN2pX(XhSOr8Ho z(~$BGl(q>yz@@=RD}vcz=+0^tSAl1S{#hg0<2o%!k}T6t{e@9Vitg)Rigcv!M2 zoBN&Ox;p{&Y<-jdyl|eHbn$L9l1oD=2$uD4pf<&f^Km7bKi6f;DkVZK{GSGVH$#R7}wuQMRGpK>)PH@FH{ zn@!?p&sk+u6-KrRP&YR*%6NhHzt=@P4Isl*JO3O@RHGSY+D-VL`M6JB=WO1)>=7xf z8QbPHh6!HS$zdS_B(iRODx_lA2%GQnd-Zn=>`DMGGScrg5R#x28799umGBH={Y16% zYK?)hb%EvlMgkMR(Uy*t8=^E9OpEkXbc<++KW5YIyy zKZMaHH^_dlIkc!h7F#Rfz;->tufn$aAIZeV?74)5{4)~<_CJ12Da9m|sZ>OU8GZV; z^x^r;UBOYrofN(VpH2uD^O$r>1Y`dG{*oe-W;k{CF+i4yHn$CpsVYU!_%7K6t3#oQ zDmH>k#?Co9m1}tUhM&qQn6f!A8@y<axg3ywO%P4cKmP{LLQ7=u*+U{BK z&0nY=MXau^eXT0k=!xFLbNN#yBb=C!BbCiR%DbMG2fK%WnZ!zGoQiaKl>!Y!+rVH^ z;DHD27)HIZx7PA1YsfKxgFxZHfGjCJnk`JPP!Ce9bz{tkou1VX# zWHrfI$z_^nVd@`93t^e@Bv;T4j^WyhpTZhfK0iaV@w^b1`l8Of;>mF~+@(13sB8t8 zC7xZPQM**qRYkQ^A7pqlA)4!1TNLzvW}6?HD)Oi4*v*_9-C2;x8S0pibINW{ASDjw zkoZEt@uxU!)d;yi)U3M@{66Vpve#${8}>(EDvWo~W}foe?S8;b)z9kk{4l>kSvvv_ zQ|E3yst}|Ys>nVxNZ4p;sp>v$cuU+m?Mpl?+^MGJSr^3B{1ti~!!;_8`wy$jUJ^#(*Mwiv7up+EeYGX5t*c6A&7fA3XaNij; zzz*fzBgpIdx{BKjtFblfFU_ZIeS2g1#3{?zjYGT309rjm&@HNlZR`Dn8V|{L^1_AD zT-;o>p`mr0JY1F5KJ2j1MS2A*v^{bn*_!f}Ji8EH>7voz%f|kF4{1|I_0FrHJ6B1w z-G!^o5>C@37Xme5oT8XX`xHXLPm9g31U+vo3odZho$8xhEmKWr#a3K#Z!E1ck$Sl; z>^+OtSS4GSyAyOiB~+nq^$rjPjytGRcVbRguO@^U1ut#e8D_N~W%75fAM-TGF0Lt6 zXtW7pOVI#kE`E1g(Aifk5C^WgVSjEK{5Dy8(#Ph!kdRO~1OvF=^MxfP^Z@$;o!CoU zR+f8ZdHFG~QvXSoBPrq2_cK_jNgF*)DqUBUI*zHQN?vukJCu$E z=e{Z?`sm)`+*wmrQJ#wWXh*86x8ieGN4ksXbGVIW=j^LaaX7XAZ$>u5oklx@Jhw8);=PI4?${;=K8haRa=(i|zxr0cS%9!U+X^j{$ z?f&fMW82i2f(-m+=G0Kt_rCc{%Xnc})zIEO2L9+>k(*I4{?u$rT*%9dUG~+B#nX<4 zK|(Sgs+cYE3rSnM51CT(P@fS{$#>NdctU@b+^@GdmleYw#)Ik;4fOd6992%q%(Icv z3Fl)@)A#R{Jb2d}aeSdd;Fo)T*)teB8;1ttD_d3jkJ_QU zS3u=!)KdMY@0InJHkVQYw@gkJI#og1Mj~}b*dJf{Y2|T#^?0I+N|iKmAMrU&E)~fY z_n~uVt}vZ1u{YQgl8Eq;w9SEh1h$T-m?$HurE*8|s5fC0&h*m3^uoGTJaMNx9v(Ef zIa+sHLe|+rv7yn3-G~`ZGt2Rnw!i0C@6k6BC2wq2qE*2&4UH{UL8F*(re31g-U))`2Ff011bX2KGE)hwm%EFSgQfc09Tw;!PeD>ze zj7=uxqXMv}EQi?>J^@#?R(oIMKl$&{>nq=--vrkAJvD04;!9vVUHR%#531J*tq_H@ zCsH?M)_@A0aO}v=HOaK+fkd$nHVkbOP@Gapq2vp%Kx}9 zXuZq8cqE@PS&L3^b||rf`cnsFeD|iZ^KK=CJZC&}z0{e&LL?Hg@jT{ex4^xDIL=TF zLR0FXtZ%FED^9Uu!^vmrVp;dTyUD4t^gAkFQSG*2&7P{1+avZw7l<(zZF^*t;t{4a z?6H93hzp3h9I@NCXX?xoW`1RQc=VXUq{x{UElKse9k3d0`FyN>w@e^$Dy~|9J-~qT z_qS4Q@4!0S&Ai2!e9zonKr@O}E=k*qQ3xG{L7l1>Q}k+9R%v_V6mkOYrmN&To~oc4 zZk5@OR}ozO0gEIfC~LIdnnrMIAQb6mu6x9Vmikj|&IuYL%Jgf=*V)Mh9g2rLSeM{; za95G#c=E^_#G;R!)Pzc4uI!e!eui$t*IF_16zN0bG~S#%s!~)Or>GmJEMr$Bv5;2b zB$fXppP(k+tq?PMEG3-rptpWjf97YY!SpJ95w;xYMVHVny;rLb8nhs_JM;Zllls6U zprU^^4x05Fbn>1v@<$$vTofa$eN!^U2ER%p^9Lc)1k#oFRj09&)lT9W8Lp>NH`D&Q;0|;RwJvT470;Zvxq$QZ+ z>DM=rnoXZ8`BJzm#Tt2yv4qeHn`YhDt!&W~us+%nfEY8y_zhFmu%=9DQ86(_lU9TR zR`H7XMnZg21ESmAGD~N?`31BD>TWzKHS+s$+!3}TzNXVvoxasJE;U^`YbEu%ZgT`D zvf-vB+qudw^g5_}UlHeGaKd(vH2EM10iC_h*Ob`Dn#40=LjU$1GgzJr}s+XWy7zM|!tD9e0{J%U|ef z5eo|s$IJL{|`<gMxVW?7HpUi@`i4)ji#Su}h1*ws>#PzvPW2&~_>B z2VR5b^@Tjv44pi+5Qk=<8p>zsXhUwl<`zzUH=~j%W*W$w<&{z4n~x7?k6V$cKpA>Y zep&scH$j}`^1L2nljlx@Hhjx_y4v?-Pl0#DUq(~lbU>4gnv{mF3Ipj&e3R0{20nh; zQ&}NhNTYwP?c}3z)uEt%ca}D3(ma>4&F3Bx-RmY zX6h-IDz>6uwoF-q-epBOUcdQ+$NMvFN-Ejxp-!(nZxTE;53|(CEJ)g-i#M*IhN0+R zMzUs4FFl>Cdezr9Y1;>zp?0MU@bEs0zUleH@1?Iyt$EoTJ|``7rpvL{h7i%4UXZh8 z;`ya$(hl9+W&*_L8VFLc42Yk&TH3&wY9ULt#cHZN{o$!znf z4AV@hRi(>tkk;7^Pd9jZI5KJp;mgdzqB5(r?&o#k9yei>Q&2dn<0O0g#hNwz{(1OY zx7IZ#4wdD(63OVDJfg~mNR>@kdUAu$0;r5#R@w^QMRnPsIk|fbW^yQ7HB8VPYUh2EJDyH8ii@5hlvLDL z_KqUVVB5)L>vgB?DzqegZj5qL@H2JANo6+6Ua4^O;Zkt^)}ouIIh!Isd(O0gX2#{Y zUW`oHsEE`j`1qst332laoaOkcwUo`39zqh{SyTEGXH{SBh;f)@<*Ac{p(AGdKUXzP zuB3ST(!?o12QYGjB6m9>_V%bzglueAO}{o<@2g{<7|Rw{?X8LzlLifPmZ`5#ApJW3 z0(lsr7pyo(&v*U$F${(|8H$|NZ@*PqU+-uR+LT|l6E!t%3bl-xs+Mjh?wuBWz}?rj zx&rL1piAwK(f z6bfaEVYa12HOIxCJLjC~kPQFKE%V(*vhuH3`=Ji67%qr>1L(;1Jr1*T5v*4D888kMGy+!w<{ZA7oggmn%Mz{oxC#z(wf(XAPt$rF|_A|$wC(1NB$gyTi zyM`4)FiKNFHhfIH;+#{MC%iJ1`Gjzp`63lfWcoII@f#v*6d_L!?4jMop9b7Vom41G zDI`8BpXP1o{TC}%(m2w3RRL_vY-El8t^J+10c+{oT5~mU%T&sDUps0ni}`YX_Rcwa ziY(*P9N7tv|5oPSyPr}7Fc;3-j@wi*T7QC>+%LKdvsR;X7>f6FbR25_8-H3iccZ^a zz9st{-K%5%g@Ey<)w&RetQwuD8NL3-M8lHbIX^q15>>R@1k}Y|rzFX;K-Xq(G0N~4 zWQhz_$aGYj*Wi{)w=bY49P-nJW1aImI_U6&KO5pVjihA{xYsVk%9}78C zILh&Eeis`AdMb?=ow(bBi{)vTm^1pUF5T9Bp|zAMn^ZE&LU7}x`kr)43k|N8#$@(= zQ8g-o#M!g{vkhIk<4YG9PVxC5$<kdB+e<0GP06nnG037FCpGz++?{^m# zuhy{-Xs_+a%Ha`WG2t3x9&=4bP4l$%*q%+(Vy?LE?e8U`W~&nYvOe?8vyl_bm5oku z)uvaSDNYszJIClMd8zA@5~OYHjKkHNKfkwk|_g z;~4Oy<7~JINJ7!+x)D`6wMsz;;}1e+rK3u5Dr_S|{)z?Iij+!eA!FB5tN0&3E`ObK z4-Sb`Ex^aNou(k9g=E;_9vTSRh<84ajDTW84?LvARp4$y&w@*r@b~!qAI`SCRIp3) zpTh+lR7L}h?v%y%NvMzO^rWlAlSP@InU8J%PSY~-)EZl>e$A|0xjCr%<=0M4*w8z% zjaSQ0V<)eFgUgutqAeHpoM<(Y-|Tme8*|lU&T8Ry=08AvJI802p7>R~K`zbO*ZEoD zrY6eD2;*smT&a)F=iIc7_3w};P^rO$PxmMZV@XjdxB`RgMW^R$pf7wm!)z+{)ewdT z`!7>F8J99`7CWD#MFNM_)zv|&-4WXZ)QIWa=Z2+(hce9Int5xUve3=-{{9^}M|Y(HK&GtWvb)XZcQL<$>SuRc1MGK zZw&Li?0yA^22?OwV}I9x!quNv#x-8?b%bG|Ek?z@N2(4 z=H9`)U&$J9lTrjUFOf|Q1#dX4<2&ieQ8zLH1)U-gW3uRBUGPA!ptgI!fvJAJ+z^Z3 z8%{?f0w-dstsQS_r_o3CI_|DA(k*O`T;^~!$2BfA60Ou?ZC+d5*s+{_AjL-BHyD(( z&81j2oa4~?s-q;VH^+Z5;Zg;jR<-M51aGYi{9Pa-$u=v#ky5&ZgF~G&?Y=hBUhmI! z8L)@+$`cofRU^^H829bcMwA?odd2eq8ryQ4%bzb<<%Ii6H7T7sQM zbcYz$#e~Qhu_Qaze_qv0!F-;}dNNhRGmBpAc-7-)rYhIp&P&X%>RD;sELw$(q>rk{ zO>A71Na+17Iomhu_F(&VTHEyO3pP&g@$K0c5y*D8`xu#gxgIa+=*Og9UY{7ZRs+N( z?Z2~x123%)kgr0`i;>;xviV9OkX?j9TYb&LU||@ld`63U`oYo= zAakIoE5_&Ja{6kjjw!>SjgKKN#&M1OVhhs-@6^;F2QD};7pq_@e1 zMFb}_CO)PCzq75vc9~vCyfOb?lVHK`j}@Po(>dIv7?m78@}KePU&I)ZxS_tkLDgYD zSzBc%=+R)VxmVgl+nXenVxS#Nj)okq?vSKx6 zT6q0}r;*H(KNu(ihP&~EJ_QyOF!ex>-UcXhl*!-}TQm(~ zY~m=6^xT!~8iq;z@1d6i(=>{xB78S5ZxTkmr}t|7X8re{wy6DFtj&w4oqp1YlBx)r z0pd-atozmwrT}!lWX2zR}NW5XR%TGMY_kN`Tgo5i3=3`kJ5M zuy@HRag1h2R#fVqSotUD7;SOnw0Dc93cYg-kP$VLWvazsOwruj6HTa9gsP1%Hl1sJY#`@2AdLopp~S0 zaF`!c46Qon7IujZYk*_sTSJ zY2OLj>mqzSW%)d^A0d*Qo!sl~(LEo^sqo)HQnIn&-g0I?Wbtyxd86)?-Z*-p?bA+=16t`zfJRh@X5{0SLYY=(Ws zn0Vt>)_TZ$I@xH)?+>wUccU|VKeE~8j}RpVufVRX6^vitY#H#G{$iXjW^aU)_I)<% zbWuh3YbICBx2hJ~=WV~uQ;Z!>JrQ@X(!uTZ7OhSeDgK2=cR)Xqfzx(v?P)7_liUOmSY#%aN;e;ar;#U}7+c&bE805%*)v;OFrCr}RvE;M~wbk4u78!DmqTyD*zmLvj zzIuICZSlL?eNx!#tIQ~eOCk){wr9m>I>vYc7YT+jIqNsHFB`-T?-hT+wLWfwOeb$u zrB%l+VZv%Ul%2?+jqSnn{8qw_H9X@kVbPlz>uX2LZN4(`tf;vVIX!{7VUU`xJc~e} z=z>V5HE2AsVztT*T~(x#qDb1%>hdr0W~{|f@t{c(MZ~x*#`^cy(vX^Jqx^L1V{f zqoV7WDz*SCtClGE+`ISCQ!Sr$_sa2R1`Nu)7bvYEz@Rx04LL4&Fu$!bVGC)%ppwrI z64{%K1urjeZ2K#9V4QHfc@mAS+S5GI)w+q5SJ zUAdic#kqT(++yO}HIid}!CQm)UMU8jumILFG<>!$$;9!7G#ri$qTZ(mI(@0VK{2fG_DAM<&}FiO$amenX(j}u&sz1c!jn4d zWr49KEP^PWIO6c8pWX0=9%ZRdT~mEL?yMiBhjGWw%&aYVSbwZ+S9{#s^t8_Ow3jHd zIW0BexBO3u?ojTB-`3y$3gNO6^T!Jcun5}SY>sV+L_YDo}$(L!e9DPZ@>Y%m;XNWws z{cn`LwYLY``R8ltp$0`UP7b4=ZFt*hy-2F9!NcUbvyci8z5?;;CCwVoCmF|g zqzqYq__UPM-vy3op^F%g)kB}QC84+7sFV|M}`)m`AQa5iNbqHG6pn6w)-Ycloo2b z`$1wU5?f5M94r}~5VI>|tQ_GK`>$O&KxomAC?RVQ-HhtaR4rP?&weXGeuC&(f%)7^f-u6oLc$&HL__h1V}|mPS6H zij;+hvR}_1CSmtkaJ%b8-xux`vEM5+mRnEbLHhpe_($}wV#X(l9ZfZKW$mx?7e_KQ zo>)xn)fS5^_oyENrG+mm;<#yvQSWj2|S02bY#ch$i^SyGY-&bA4;!mbWM(1s|+-Hr{(;uXrEnT-Ak4-sHAiwbnpFS zIk8s1Xs8!S`RqKXp9KZdDIvfEFTk{KrtCeYGYm?-#yRHwz4VSg2frUA&iogNdcUMu zV70^K$SPxaYXylJvwvIB5QF^WY2Mva2Q(66{RkD#mHA3YN?28j?|Ru&E+MwhoNDI9 z@E!7iZ2xUR#7BGX34QD>r%kkOUOSsrIV5JG@x->D-mq4aZxO~W3E#)Y*N&Y+8LyiD z)GVQ)jLS#*^-2ngSP&@fTbfHR75eC4x^U#moAeE>PEA`>cbH)pXiUC<;YsvT!mwyP zc)S#rjET;%&p)zALQX&*t0+hGUIFcBXX~|Y+>n|F_IgLo8*yrWEX<%~^J6m@JK^=t z`^_Da5GeLhBt94nX#Xe-Z(3_T^lLwiX+3oIc)5EV6*|#$>U367MYTe3k^bQHwJI|g zW5!1A>e=C>S~CN#%mpP4W;1$9QVc9-W3XSI{OWwth=%Sk2h-ISd|@s}oggMOaI527 z0ei04dOa?0QGtz)e-g!L_U+|^Gu46IWucc%yDQfB!%$~#1Y{oXk4=MSrGvh6skrj3 z@Q?3Doak50+P3P8&L-d_tY>36P2JMM9v9^c!iSk}-?pi@TVM$^Pm_i(!&YWlR<1`Fi`axdw_Dmx=YA<3zFn^~-9)c1Ll2gH;wa zr^HO=&g*jx@pep3RWqrj#eQ1opbQ&zW0pkf7Xe8LhFLXd!K9e@{C~o=hs#**&=#1w zk)*n;QB~_0q#@EahO5=ODpt$B0K5F@`?ama1s8orY)WhXX`iitjH;u=A1N<19O16! zdCPUcp;tYZd0Z^6ZW;&Q-mJzsZ}YeDO7)Y2%* ze|LaD9yM_Chc{>aNYG%{`?w`--B1)&4V5$ChtYY%|39AIJ)Y?X{QocAa!1j@DJ-3d z(9!u2g(7FOoQvc*Ookk`Bq=#mqU3yL%yQTqhJ{eXoHlF@G3S}n%xS0J?%(J0`ToDh zV}I?v_jO&b*Yg=zxEv%niTF0z@2UOLR6$;MEbQ6zV;!~M$2=;)cOgN8aLbKE<{Fok z;YpK1OEg!noxjAqgv32Sw>V?FXN!;#n)inf z;_cH_d}p%X`4iOGjbO&kYX z8g5P@E|!wJXsXEDCCY&Tq5j8pTqT@yb6(Hn3(dBh_xGe3@}NYwIdz=%D&~j<&Il;U zrW{?$-?tTY^T9Y|&3U)>ME_8@>2uXktj`1%S={6}kT}5$Xig%IXBT15=biyMj}u`I zp%DZf?ilA~kNiETTetCgxt^ZiLkq4M<8{RvD*&CGYm^==IYHk9Pi$bA&hS?16-cpT)) z)2v&=(#9bN3IVez3o1yHRR5BDEtQ|Ex->8J=lM7zzV5)ebWiL_V~?*;zUwO@mw8ic zNP?i`GU8CyQ~BeeUdh;iCl{Ong?nN9tk_fuV$!THw_Z*pU#!I@orxS7QM!VRkw;d9 z7}}yk=5P3P1`IoL5^Vzb!s(cJSXpUi!K7E;#e&{r!+?U?I|&?mM)aklHGIvf?M$>EqQcRC?M{i{9~}XyBw?arZt#G*Yvr z@y^`e+pa?$zug527rw#a`L{lwiCo)T6L!|wrVYl z(xK-LSW*ynnp5YhtjD?L$^4QMyuP=-)3qwgDP&FIDvZhZ6dDyw1U%be(j)AAhFW-r zR=mjZotbh)^x80v%S*n=fk|C3Zm%^b<C& zcVTLEr$m~w@G0w>;-XF_@2V58l;d~Vx5vgIVit!MMoSFDDy6I7^HwmKK=2bWrXtUEC}8 z8RVU&I;C$V1wohNT|+j)9%|M0FC5cbEuE5+*a#h>l;0iDBf=m!-AEa<8j*VA+HB=d z{v^FyP~4vLOS<^*#0cLG$2 z72U5L{Cy;}{7~@8&Z67dC36r_kk>Hf%;@N9_C(2C*Y2&$Wp0`^Bd8sj=Q=t`yFIQj z8OY)|h!)#hpEvE_A3`pc5%Z}|qRdm$&rqG0xQDX|GeecPSTCt~vMknyx~sjWDxjWzx7_uod~Iwb!Y9HX zw2}8sh-k-}oBltPUrK&=Qyr_f>~$RV8y_uU-RB7f4sTnB-%eq!W)-I5QK-0(nU8jfiXgfM1ci^6>yb@g^EtR)o9qQAJC zx+H*hM=MBK1_07@*=y?T&qDrVV(J6ZZ-mE@CiX=>0#PFDgN4GDwKqpHlDadg%LmX? zwr!1J9yk1PV-f8H{Rvd^8LVEmf3S6T2r!wO;h-_q{Cr6ELlOyinsmg+vxzFgH$q4o z)~n=;kBPDJCRgjp!!|Zk0WZzWlDbmG3jigP2fB;|({}B?Ta_bIA7aECZY!2lq-3UO zk&090cks|qJnYPOMYsHACz6K4*BVTK94tW56ab7ls2@vl-umQ&fv z3ovS4*<|F((&LA6mna;@SKfY80jS_KcICwx&5SR8sykK-@HHhmicGz(#>z+_UUA<0 zB(u1L5NNhCE~@ZEI<4Jzp-b(@{ESca9QmDL?z1h0?vsv^lyGByt_9zQ8fHJwGRcab zk{8Qwq%5%ekQtbVNvwBu=Kp5nMz`p$5DWHp$Z-_BVdXn-x4(bL3s}k8rlM$teGQ90 zc@-$~!9RBt0ClKieiMZ43QGiRN7;;J$ax zqjdo7zPRxwVreIeWE6b<%ug{9F+MJ3NeGKV{4$br zb?u`!%L61iThzNd8B=v$(j#K2wEFn+$|l}L6$3UThYx--kb_#NW|KFq8X}#^#q7w= z9Ch!BeuDQmS9HcN*txm?1GD~Z(w$xC-mJu@;!k#R(XS+7EK~RQH%H=C7jsOETU&WG zAIaYy;LOW;Gh$rMTwd&}TdPmR@H1ssZmC8@k<50lUy1!5lC}KR+3)zbM4Kd&Vq~oDUk~V^5LckghfdD1w=Ofb#!Q(kd(p~8CwNGc&TlIYb8Q56s^AGKk>B+Vj8=@wb!hRvXiKW z>Y)VhE~2fj*-%t`ph!r4gO)4QAXHA#fkbHu^KkxDdsJZ1iaAy&n5#KC(GWE>!N6bY z4=aTWFCz;3f>9h<&v(cY&YB8ayJ>v9n$fGET`Vv& zmx&h73}2PXu>EdII3$)ZzD;?F^U}uSJvYC3jRQN(ZK132vO{MyF6@Rx%2bi2C~x&| zJ=?)RezKn@U%;?zWcG&=FSvxjx5_XJuRR1m233dFspBqS6{(T;&B#*= zUAa)uIWw>{*s-oayvo5?^cx}K=U)j+jcW;xZxtOs)~1fc{!3CzcIA*GYdo=q4JOJe3U2e3ruwgkJ#FbKn zf3`hAU?%g8c3-&SR52GoC}T%;&p8XxeJA=Or-%9@f-+C7RPfCOjkVza!xYx>Ko%d| zj(Z+8LxHaFKtQ?}Wgh&?*PwN4E4X%Od)P)(7Fd7&)Bcq)FPpTAGGf(wgJnF z0oJT)!Pm#wm!Z$+!)AOPc;yvq41M-K`O;Aq{wW)=8CRC{RZLtwoi8*W7p~(Xl4?6-9cqufDwIkW&EI6EY9(fD&l+DA-qNNp}|QT0mJQLs>B9i zi1__>~-Nu6(l5+7R{5ycBAX zdkT`;OE?l!nY&qXGa$<%>z6LP;WT=~?%!(w{xj$-SM~u=K&FLc-9{AMu0XNcw!sF} zdgW?~;!^POyamk^+%ku$w=j{c7a1`xrm6WGu_vNt3)A&}KD8-8egS_K)ck0RIsjHH zNU?>VhislTmE{~=dQ8Rz3T(uk7l3iyK$ZKa9tj!e#0bAFNLw_V?x>}K=sx{h@gF80NWWYrQVdL6YIJ7pw#b>v_v<~eN&)tUPE|52uQ zZ|=+ID2nXiQ{k-DiE|z5q9u5$4I+20OKFQyCyU$2xoL5U(p<78Zlv@XdV-B(kM>b` zbNId=l(##VZbgCW%u2r}(l6P4E#Q9{AlO{=hdj|sFBxhQTBBZCr0 zJ@Q)XTAOFNo7F3xI@PsW;!y}uOw?L_zPx~Pv9EvV?v%g-TU3ZK%<z)ocm4P#TNhmRu0#_=K(LVCqPmMUZFA00>z$J=p- z1${5>*!;WnXh1+unx~)U1sgqn2v#2@yDw3lqvaAGEZ*jRk?ne6PpY>3%6HyDS8&ox zJDdogM+t%^roZ}*RFZble97TWQ`|5gcaq?Eny&yXGrYZ1MC>pXNZVA=NvfwyNEtWH za^yEEX)h)N@HVoKBh0;UQO7~5gyl-RfoNb7U|;@RUyZ>#tM}_QYb6`^5}9Q$hh4Ne z60y@Y{zM#pyhX!3Z}WBaLDI;>y}3fmuZSWa$C1WT8t+|xQZCnPU_fZn83-Y~vj758 z?|!!%mRj3liiu4QYP(*n-K+Adup`K!;l2*{uYYGa*bC7XDj%9hez=x{^rg=QPI)Ir6T21F#FIu_xXs%io z%_?%DZsg5rMo_|?-gX2o@bu97np$49yP!f+LPD_J0iZR{ zSpVJN?K>Vpeh0^8;`XoCc7OFW3kHLg)OqNQQz;t|$8)?sPWZY?$p+K)rE}|`dUebw zwk}{lW;DPe_McM-UYxvCvtb|_Yw}b!wct~4c#XAIZ=yto-HDB-@{5mgtJ(fd2?~zr zTASWS?_SXUvAw~-2CR{QqRnR;786tDyT1OEcKde*#o6)epS)( z5h;R$3Sx&V4|!_4UDEiKJ61&mw01BwdU6)}n5EWy z=E7d~LA`<2;_QNF^9xf%H@f+7DyXx9|5vOH*BTXXx9vZ?)eCYe_KN zrQEMgl{xMlbSBig=zHnpkJ>}lN9azg2xcc9YhE}6YnEBGLJxLJFjJsNiN+u=a?abe zRicvu`}EC0O^uNUm?>c>AG3EP^r~0LCxsXXs3p3Zq2(PL1r?R9&4;>BGhel9Li$_% z21$2R@)RgbKMTg}sFRKSHc&>76@5bBs6!m1vq|F1>yaSBkvElpB_HCZQl%G8b_)C{ zi|*Sm1sj8Q%jUidpRZLJQl0dYAJ(S9SmzMArIhOL@-DRqo)+#g#|* zb`)@Ddf@@g^wu*V6>kkMHZOzNJnJfeE)by(q>5|W_^IL}&Wh`30Q`KgrvX=X*%Qzm zU=vE`#gEDbRJs0pPL(64lB>Nt_9{&CbpMThLazAC>c*~XCtU~E1UC<_M6m?S8y!@( znDR6gTYW3$m($!7BS?CNaV5TaVMmq;(v{5I1L!ec_^v&kWQd+R>prJH$r)+I@*~yG~W&ljvf@+Og zc9ufbzo0ZG>iEEbfA4jei)s&qjrR0bN4!8kr8LVeP@E}m1?j@ubagk1PS=SHcpBtq z4=wrR8Yvsc=_l9F>KwNtO5!mJeffeRhjJcQpnI@wFw&~n-*E-diiW+TkKUAnr)a!g z-SESaQQRw}RE7<92cV~1GV?BcQg9b>va)k_lK76UtvvLsd2VXmr6n9NC%NTN+U-{W z7P=$mfqVTj-z%yg<9!Yna`M7aq{H_#WZSf?kIR&&$}@sEr7}a%ZuwPQTyl;B!I4%# zmXL`663oD%MMyC2m?7XmOxR_WQ<6hL!;R%pQJu1&(nt6^stOM7z*1~>9LXtpp1$pZ z*b}}Hjiie4gzGD|dfoMEeQCYV4*f^_j2v~ov;qFae!yd(vprxiT^>p-D-F*vM6Z#e z_hMRdE#-gGAY{$^h2Li69>23pJwfbTof3@?Ij*(f-`AJpM zzVz1)G``r)7i(-z(i;us4N~^GzrsliH!u+DUwgtS_?AGvC(Q}{>XHCZ4>Mokv4qik zBDGFO9`baazRgxJf0UDZvR+evNSl-@%h^VmT&mmi>Fy58Dg2v+IIFN#_#>qaBIxN; zq+Mz(r(sn-)0lNUv#^}ccEYS|BMM$!0LX~luD-iUB9w;|-Pxhn&TY=7r^1K?aX~vo zVMV35O~3!P5-M)-n5`>!gHjg~lwXbuzGF`xB1pfgEFKU$7JzHHMDnIKBqt<1y4}m& zoyI-~G#S#lEJ`2u&(hvhIbf7pc*vXI4T{cc^9l`^+N2IgKU?|j}IOW$GizSk6HK=7D+Oi=q>W$0%W~>AXXOj$^@>Al? z;GZx{BK5Yfw68c;Kp)9k`mL?($5eqZGp%y^$AM_VyJWJ@Mf(H0%}w4ObcD5V|*+WFOf&ir$ZYprf&D zp3d$6Jvl`xlOH@6gNq!o?*{s#(uPHoK~&S_-)mEe}7bu7R)6aZjP+d6#M06=suw8 zQfOE(b5SsEG2pJCa^}Xa__CIEEy7fAy7akYd1{DSr4zm9NjICfJ*8!(@-ylhuyx=B zLsU*Y*2@n_FT9gpj9kc5_I^O9;EjA3{Iql&RF8XCwXz(~I^`Z^Kx_IG zj*(2(_Oq8960BS?p1zk@(hSaK?B)@!4Q-kj(u&w{+xmNX72{fO-rfo+Kd*)|aa3OG zqTf=^TZQTEzOZ9-eGE;YcsT)q*BD=oVUc#zq`cPPanf!PHrzv7%2)e@buHv4FVOwg z9bOE%$IT5FmNI2!Lw>p|WA*l($Tj?W8CG8**JOh4rk5H9sovb}_-Fne^*2Qh&z2;= zDQCVQ=%S&cn32uKDT|zyz~ZZ&pgRBE1y@L1a(2BL{{ZE~T8gKNpWm8I!WHuV@wig4 z1Qze!))79QhgX^%nRO~p*xz@e zZHI3-9_&XVM?yZvw7sz-Y`xODuVVqI8D-L^2Qt3zUka)HCO0P#>{qZuw_Wa+b$vM6 zs7VQ5B9sm|E>X34frta5;Iz+hnX(jw-e{{>MkEDJm}>&o z5q4{ZdD=GeR)8&{p5Wd)(C6nB_{*e;s_^ z5i6SWIzG0s7pXL|DWG5_Ujo)|Oaa|l{9ynx8YP@CHjAhXKV|h`?Bn!gz*#fXE;ZT@ zmw)H2qX72H4f1>KH5TsAd>;+9GW0@{4Rm{b1+_ z%~1{MmMt8d{7r>jeV@6scL=qg$MqRaRX?I*tXQL?@eKI_3XQ=eE}B#W;6Z3wF{^d@ zcg*%|_c5?0Hp&YR+r59FV-rBg|I&w9qMOeQ26p!-ODEa}|0k)a)FTaD#(YDj*;sXqYtprkWH z{1N(&SzQF2Rir&dw~knd-umjSG*%ClY$n1uV!Ar`h&O2^lT$ZB2rdeo^&$^K3>hr^ ze~%&7izoy>)k3F|>j$LpYjF2y!5i_3w9Exw)9#!P%OH6msXe8)SV7-ty0ng86nktB zAGsC@?NK%Yb*aUkyv3EW7z}%70I`x^Y(K2I^`gG>Vu4R$o=&k~qnFb|{UVhAq&g_| zd#S=KP@2N)n4+(rXZI=SoI&sn=ka%*lu90-BJbdlPcB@R3K*u$v%XT0jyL`1JJB~| zQYVI^R*1b+tYl-cQ81{S(()kWFcpG9I>GdJp;e>{e3g-&uwpS$*bb7r;0&hdr<`nvLXP z-T6V>AzzI}S;yFvSNKeQYWE_ERaXC@4I#MT069LVWqa=VdNBD3+us1_$o9=X6XxGx zc9<1XJad_3>2 z_dehs4!91mJ5q&Am~Lx(#fH6jVNW&v&k=B^Zb@tmq|v#`xM2z8seL{T{=*RB*3cX` z_nP>{HoO-P0$&xnB5&L(-R$!Lhj+++ z_L?I~e-v&B{$5z_XKr0@DR7aL?tMCOzl*s_CHI;4NkOsU_XIqS!Cjp-Za7EME_WJf z(cUs-c!Z{|xf&b0AZH8DpQx#QO|;Y1YtOxu?n57DZVQ0j-T5P)+jeU;oLsH2CN&1> zgO1Ynz{UZVCgD_!=Gmdv&n=Tuokt2hDrXurEkTb0gP+chql{5|vh2Tf?)No*nJJZ_@v zZm_5aTtSC)IF$6}q(&3{o=DHS8C(bw9NMO^*nuR7tv}z8t}!R(Xh*G%OheSPZ$vKt zwG8M)sn(6#z-7UDc70^?H$kgJ&`nNm1krp@S6pk+_TS2h1P4BC_-eNnc6FK}x7yJI zs&q&czABb!BWVV5K%9TPqZuh4K{=AYM7s*{0fj+2k%@tJJXR zRrt2P`C^4=i$V*cqWM)wW!J%o8zLC?v3mlHMmNgx@a*pfZMw!q5W5Vy!GR6uPgW+- zQ3Du-#C>+5u9IXus+2j7-^s7wtK@3>W)KCWXzCY{Y;!ATXv({3#=8KP{b0!MkeEV{SxiQ|}T}3Kq@R4taifm%uGv`~Yqu)Q^ zlN522RU3u1=oK)@eX>C#Vt#=ow*(UmEOY)ITf_2P_~r?mwW<2@)Nkc3znIc%g0N8Kdym)ow8^}+T?yCBX$BuDaj&}qGntciIG zwQG9DyyB=L)&JJHlIwQ(pxcq#kweXsV;BQ@L2qApVVms;59l#hb1jJDW-99_$*<}( z9Jsx^|8f7MT~dl@Ep$K~Ij`gATG9Lb{0j`J&XF*6wtkp{4heh=kVK<~_KUB((RR>N zO;HiVwK#uL$cs1B@;nBcqT|friir&W)2+)zh<8i%6%8%rw!AF7_~WYG7sHdg>${PpgEUxgo8rJN zvYovp_&3m5)np9Yr(dej=zYklZNInG&}%O5wrn^Z*zxNeE&+Xr3O#=64YDt~j=#Fi zYp)bp`zlFu@9ist=FnBr{W#Y1@l81wg(C2D_wF6%j*$W+ou)W^hv+@iMb?;*<#w?N2&S+2W;pmX+9Ph0i+Ek zDf8|Q%TXRA;02++vWwg-VxS1_>AnD>Z^hkjwoPZKcWkC7T=I~`u4lBgIOq-8hhAe| zST6wDPm02M{dCJ+_Qz5#aqY|SjXReHps#F53Xbabpj#Kog}Oh#VwtH-^3D_~PHy2_ ztyWH&vr=sUD0CTdF6)Ok+tI;7~s*PJA8v z!|AeI`f1!MIXr;be$erYh?Kwp$MWFvP2Gq4v-q7uHSFjd5$7YL2^PA-$@x2c{7UF- zzb}e?A%DgDA2yG{T7I~P|L-IeR>C_q4&~6E&-Hh{9$ccsw=1sy4rl-By!Pq)*bmEY zk2i0UVo&x-f3h(|o%J`Uz{75H88MCAKlM-a;9i36UI!*f5R3za@mpW$=i*KJ2|X7# zc!V+IlCRpbtC|>ZGva1_&Xl49731G3~hk&>y9`n{d zYe{%0QKwHFv7$d(G^HG7$_C2}F!1U#cVv?;e0#r^tUIz@k!bF|>0oY!ec_250s@K7 z$_tEEdoe@3zG4qi8t>Wm3x_W)+D4b#1So~y&g`|HzjqEObV?TSmXL=YXnvT~%lB^S zGe7=}-q?5c9b4e_x9@4*`DKeyRRE}pUl$ESP_=*Zpxh{2v^hzT+!qx^p4eNSmms*1 z*P;vJ-*I|gh1(fj7p!%#lEWo=F*xVvH3GAI;-Y~&W>AFn8{XoDc5CQpKBzkC_knuM zQ1z5RD!WDAhapqHZABK8F*7qC4WbzWZ;P?)2)(rKB&3$rSLQE-*%u6kqB{3lR1b5_ zWYNLuuJg}ps^Ve|u`B9ORfsLiD#q3(N6^l zDk!juw0J_0YqFqp(`N@{)4P9A%`RnO%Ka`Ibt!MnBhxZYol;2FTy|+zcC<9pItO^U zXj0yo_46Lc$Sa0O;EN-2)CF4?3-4YkD6w^6@Ew%mPYZs0ZF;Tz(-uj?*E7!qhGI*n zgipCLyZiP3PxJci)E*Uf;|F)1Itn>9ay8t`p>~Z>!szQlO|e`sSXwz*v-F9 zST6oLH*O;}u(8_koQ>k`NkK3`3Y|;qn9PJ)x=Qw9c{oVm%=pl|ez_(-g)-67dvNPS z`gvXS4cph;=*bsmUe;(Q`EjRflKTG@73CE1~S75>h}cLkup(|hx25uBhQ z;)&S7rxhRSPVUHN5RZX-H0{He>gpCv`T*RuyEvU=q*k2pCWFN5@d6?MQ(Y}tA8z?& zy%%mPI3-HME!#!kc9`--%l}i7QhiAAo$P+f2YHzZpG!SD@5Zu~1mD-uV4A;yr}u_` zbckGo;#$MF`Lxc;ib&)p(?e}$$KDg^n6tmvA`-QmD=tdXlX>LJ2X|Z9(Gy5)q{Y?h z^@~M)o0{+;WWP_lOWHPDT6Aw%Ef8wd`Cn-E?y3Fp97Q>L?ne6i1jS{8uqYx5UnC}D z)skuJElm zXtqs%DWFB?UCL{J+xojXFML-l4~j)$oD+gE3DJ5-nF8wB1 z92Wz<9wht4C0R+&pXsA07;vdWRn#uL%D&npiTDvofcaM1QSLe5Zoet1y6U^PoC!1^ zs(;xj?BG1Df$Z`D{ZV(DEl9qgs=KD1@AM45HC?yR{2Yw8gY@G)Yjuv+V`O)>3j7B! z$6=h$`JF;_E?*{w62DlL+>mw^ssPr%ij$HZ4nZ#GPfQ#KzO$yh5e!q1`P%c;kL@Er zN*!tNLC<4YAure@f)L^O0~b(ps2?Zn-;OtJAu-S#coAzN#nTd><_By zYG^!Jqaf$C8Y8wpG_{bmu*3%7=?{ys&7;9SOdi?G2E(v;vf5f`5Wox0H3CNo5lMny z4M$Yv-++}y7%7PtsLhwl#+SOja>F+N=%K92Ux%lw&ehlRu=&9#$^(DPhBn^vf{f>h zdAP{u*lb$%+5~oi$isf~9Khwovd;yRf1DzJS(Vv-e#2u<^K{wpcH?I%Z=3;QsXu`~ zu0o?vPKIg!WJ@ z491(_j&42T6^p|j3%qr(CF!@k=mi@fxZmm4q0ky3XIV%d-V7 z7|NPEJ%vN;^&<^G66>6CQKaY+^Pn3sS>T7%dx|YVTj$L&3H@y7WA=ECOn`R8s)a)a zQOZT-z4_VT0|g>h!5-OQF0vH*9Zh&^5pN+k-B*>+Xr3K>JUrb_u+i<7n5z;ZsseMY z`I%<4S2m<$(KDiDVL0klo`|Fi^H9%!blGhL(@w+cTdx<#*4t(}6fIO0b+7pebNB4S zZ4sUMq@HvC`@X=kkNS>JwUO9&+8g$B%DrW0J#CV6T`|F(@*45aQkR2||$S?GG4} zSK|5WLkP!?DmD64f*zeXRYA^B{v&&T>?`F9>v~;wGW3UyA!a_qO-^vU)a%c7NYPOA z8u(S1%*HPZi|F34m*lkAME6|=MysNK6J;~p_YHDyZ;|qLdI4a(67rF^av)`+Q6}Yq z9}I#x8-7CTJ$8T#xYsjMi15;vC?4V3?(_{nGNtb7_x(*mTH?Slk9-5`0gQyhUu%t{ z=>AFM3N-&zc($OOZzd@HEPs^PcU>-K_nF8O_fAB1nqZ%k-2>{btwOibQ!DC zt-uDh#08GT&W(_>7!wLt9RB6>SKpl=qi87r-TZ4j2|JH>&C$79Fml;e|0fRy9|(g@ zhG_q;S|gKmGI*GI^1(}|RvN2Yd7wXiLI7zxWx)3f<|k~~K+BCbj)r*7oOK&MtN}~e z6gZz4t~2RnV-+#UUNjN+EszoDtG+v?HaDvxe^Y&{_-J#phAQp4@XGAcuGo?A8Y{7T zMcd#KjpM-82+mAuM!NET4DyIpy>;7uQRU=@z|jG*`!Q)Ob3{Yg>kS_F!hZ;NFu)%? zmSmpV`6*~rE7iGfNu&ZeX4Yek2Nksk>@rJj{Vvnz%`5~u5$44zY#G4g;+3Zb$oMCa z_p@|B;G3-OnDCmqt?;G@boCNM!yEkLkj@uqaH({5xyBZD0mnEo?JorL78&`VU%@Fk2312i(^F6mV^(ClX!x1FCQ=K=6i4=J+O5ERJkfnzTn zM7&S%9o_xdrmkT0SI^x}LMHM0vzcxyiJ}+ZH_Y@7m(JzkQ$#3tT+10Jc$!n1BQ-I+ z_HdxFkzEuRR=~ zF8`v*dulg0fIJRylgkc7%$Uf4H0C}xl;21#Ork&Qdzu+f`Bts-4qz296MxgZNZZEz z#sgrt%8k@VVi7Xr-(|Mu=ND$4H#Ijz{hn_GD=R6zGd*eePVM+V_xTp-EY8F+{fqZM zp1gwWV6ayb4Nv?dmB@1nCN7L{;i5scfnQ<^q^u5pz82~8bcmD&I&J(=n>U%v;Rn?7 zwej1Fz~&tAQN@L>@2n7uwS)XvTkQwQj#|+)q7_ilan(leObO&}hf(dS*DAVCULa4# zXe%kAk>q@mXuENW|1m>%*cA<4Td}?L(=3#^tyBI`O;yu}KU?_jnp&(+YTY9BN~4n} zadI$P=-XOEdEseBWpZ0T#5Xt*vJA1!T3?>C3SAu^OT*A}5(VRrfMrutt>?N*)gQH2 zOIUT_Z`W00p7m_VPdu==$Jzq`L(LpxyQ@qKRHsyC20Mi8nui3B8j1v$G6^d>wcu&{ zDB>t5;XP4HscX<^te06eM-E*zr2Mqg*!bO;k)#KzRT{ON>+kc*v~LX;Gq(Ba;y%bz z$;ce+NGVPcVlmI!LU^{1ZL0mEYqDjkDDYn^`*vO;1_}uosdN@HNOc%)9QAh_LAeH` zxeRB`FDww$98>~J0iRo1T6kuY+x^lOsiNLHtj&w(l79^dAIP_Ed=g2t={XJ9h_iew zy_dERgsiVDfxCrPI%vx8#A>yTGR$6spIQ$H*qHFX&tWv+t1ScH;3c4c&X^Xqc;LYk zxzzMEyVHNqY6>Aooxi{DJ7amrs`XcRk1+3*WJ>}lJ{(zk!@fIUG@f(lyYuPMvo8O% zR+c=KEry(SjZl-B`FrEYgqNqWY!B&$_3hf(JJwpLE_Np=fHQIZ4?GIblJnH;AgnnQ zkA)xZ_!tZEeZ9M2$_*Z?Sx=Hr2q|2)NIj4|d5Cto>@V%5iOSB-z6diRD$F;|2uzYi zRXA$QMOOAKjkb}PX+-33z3wk`AGLk&&ySbVGK)Jq5iP2G_zlql&%&4V5HBr^ex&8s zB*#63&IWc3?|6JKORbB|R3e=wIV(Zx93l^V4-6QHiey$Y7gMyhwV}oFNbD1@H3(p_ zF*x{YdDpQ1x3nUY80vH19@(FzQB8e<+CGL|6vw5u#h$F){yUyOieLRL+v%WdPyMOV zn`$50-fd6zZ)n(=ryZ!D8F`>Zzmic?<0h(G;TT9*^J}zqYSE#@cld*@29Gtm^HPFk z9Xa+nu{ZzE1NpZjbA6|Kbyw$##l~zEZC_%qPjy-6bTUxqbl?&5zY%|l>gMIPkq?Y% z9piavE;2vg8a%X$eNbMRw)D0w5LX5vDCG>Q>voH9RPo(&+A>&Uj5klz=E^3k630hPY)yrQ^)XF!FQez7+WWk;?p;8AM>i$EgR`laov+So& zbWIN$4zNOZJ&Jx*1YL1ZxshIKP_ijUE&9}~;`;M_g@naB&;jHjl5VN#)cZH0bvg7| zzQh;h9rVr3Z?W#Q!o-Vj5p5utbdiUoZMpy20m$&61+^68Ogw?PcM6 z)ca6kc{BDyo#jW}t6ST4|90xmvW(89>N(BT*eRsTWF0)E=dS>WTHk%I8yI3^(t@h% zQogMv?bp-y*J^Br@oc>TUr5H+%;To?79MJI?N;|17PuAC+w`23tBWy)TH>U1 z%XfZ&m;XQ-+_O3$wjrJU#3b7NxQ*}?m%+G)qMHc@p?1z&8fR2Bhdg_LK#Yr4bI82) z@vIl4^EzTbJs)~IuPOw0cuqh`V+TUTR~vZH#Bq?zG2|wb3E`Mqtvf=p!!|=TTgbhnX9XX?dA)Qjy}>r)6!LBhjB9UX}v#l?p+=2 z<)S^c>EvFhUh@KHF=MSEmieA&{m65~i#@oH%*`-Kqb6LYi7r=|H>-$g5|i94LPhVm zgsu0d4aLNfL&BoMqWKS^3u@g{kNR4mFR5RpsS_vwsMa9@-n|tcF;YpJE{C@m7re0D z4PK2AQTkfCkWYK)8c+vb!wSWg5?(p{yNf@77U_S!#^5zeLdZ$jzU@ZmvQB{;DkaDM zPra3y`DML%^N8(|si(EL_&ZHs{%sxjurS&O3CfA1eu} zfPXr(?9}*Le|&S$b)T7k2V_z87{4U%j&w_HV@26sGM$3@vM!BS@BTb90^dOj2THkv zcSp>wpG%~v>b6gX`X(6hKM}OsecZ$M2u*90-s++LNk2G(+8|v>GOHWBF?6Fo7&2S- zGJ#lQ(DFmwZRKg#3E8Gi$j=1^ViMozpNpF^$m~H3Vyd1LeI8b3P7hW~pFV?`m#Kj&1p>ekNo-blcY_*>|jrfMH|UoA9vWbCa&rtcAXo=dgnvN`Qd z#7QjVAC0$|HDa1ZwnQQsVg1xQs$C~?>laYfILr0l)oXqk3sa#yJ5rGUXfvHyFLrYv z+&i{VYT!|jZJ~k(`FBj(gr|mI@!nvFDS&3Z@!WQPmeX#$T7k>d3nen@^CMi4cteDgNQu9}L zL&5`o1J;uA<2zF9cTG zKDd6xNB!Eh$NC+GpWJw6@UV={IL_c7)4B-?HiY)g-wU-kKJK(AcihXsCHF`dEr&;O z<`d;~Tza#A@*e+ce%1|O#ZdIa0?2NbeRDdpnn1*GkCz%g(I+=NaKsV}OnZQrh=j|x zz|q+LkcVOhL*}Lg_#)!gnpMw`PaMKuXRSa)UMtM{S7$&IIaU;XZprG>J+xR|2(K!8 zD5MK)pS-`AP+(*Y7__kPK%o!i$2+Ch|7prj)~#in110Aew+DpvNPFPi9qNuX_MPuH zuZrb!eynw_OjR~yAKMmb$dy!3^OIhuy@?8QQP*4PL^)xyLTNGt%1vS6VTY>z?3fzn zBF6+kP8aTyveuquF|!Ug6OFUrT8iEytoOPyTiCYJC5ClPRxQauQ3-BqCG-*yA#!Ww z;g>Hpdk;b;ZgJ7O72k3_JlWs19%$BEYps}!yN!qZsfKl_ks*KkaA>P_+2O{;ANp&t zG@24f8MJcNm|o+cVE?aW&uy{AW~{pwZTn2v0|9Z8Y}F?+u~>(uoNyHTj`ug;x01x{ zl!Xl`=~$=l_08+sG*mBz8tI||u^;IRS076#m2CIeXkFboqs_}&czVv<6W9w^ss&)f z=RWBjmkzwksWGWdVDOlM#BXP_s&;l8rw%VRE@<2z?j#ytbh-hls|g;r15!*e>Y>t%pkjqH=7l<%$(U%zWdZZBQ;O_cwdw`{k(ek)|@Rid*` z(^9{PUuyHrb~@y~fxEA>lK$Jzv1}G)UQ_8QXo6HV0$$MI3sv#KJB0jb8u8O0Hl>S(v#2rS%0)mvcR|zc-`6Os`a* zZPreUL7e6KMS68Pu02*R6Z6khlFZq~hU>GI3BTSK!acR;0};Os@^}-~HiNj88omhW znZ=0l;@`te!)cS6vT^*Ue~>d?+uG)NHsCO5e9P@kqGLEc`1(}|{NwQqY;Ay466GY0 z_2gsYQ;SK>+BeK3$ll%T(;u;UYa2!TvG5=}Fz`D&= z&LY+&qINL=5z{lx-D($Xjc!TK+#h5Q-FT;S{nM^P(eb1gnZkcAJDly4Y-(vR_5JmJ z&3}Jx`_o4K_?1eoObtyMk~Wi78Nk1ogt>oP#VB(6&gx;`-cwS<&CFA44shl^oNMWqN*vLq6?9lBC7T+rHjh(MYl1m4Fj_=?gQEhG#SawuKJ4t@| z0Nu7bK~$9A+Yj(rxKOgweZouuBJnwMuu!hDW`a?Ztm#du4cG%@o1|xQxmhZ*vrapY z(ks`JqIxUG%1KA=Iee$SM6TaZA6+<_NZJ)66J#vRCen|$CYn-bAdO*7t7V#XsHtZ9 z9T2j=zkf015U}&SpVx~mrV_I9L?c|G(YjRZHga;Ug7!w)s3ew!Mweqe)9MwaGQe8Qs1IRt0M5d4T0XeJ))bubY6_Y&Ln4c&#sXIvJjH1o$_35@6cs zm$*?2B*KUW7_@o4sEt#^$`ew&U_U?@(^s-l3Pf?{-fR{;!z3hdOVk2FD^*WMC3gwL z6DjBA41nGxb$thBhxFqZ{*_LR<35Ce)#$d10Q>K!MIc zzmUlyz}Yq~8yvpfJGa|m2#ojWVn$Rs7=hLLQFi{n-IC$( z@u>~RrDmlYK2FB&sZ=aLM&R3CWE$nijzb?s0DGUG-AtV&rCIEgnrW)Vb65@KoWB$P zgzRvm(&c3kZ}c)P4Kxoc;iwEBI{tK4!id3 z&G3kNK=jU!XEM4YfwSS3bEKS9trNTS=%^M($dvf%@PvPB@Yf8_?voFrWb24!tdg_~ z1~vTl!S+>Dn8$>QiYny1Bq0k+%H;Y1dFxj)vm?x?ztv1=NAcCC%+hVAI2hon*g;S0 zc!kAQc5pX{hD0*-S>XRz04{+4bC>^-<{qV)Jnub><*g?7aNdjmj`fj)eHSeX*1=p+ zvc)ZtbNQ{dfmd&CZf2RbRt(PJ#+t)cb_uoO^9LN`dke}`Xhx#}ROEYJ{D+Q^V#^9o9sk0dJ($zzP8=9QN z`83+eA)&PKvq=57KBs%lO!q0q-vi_15$B-0TH)@f9&Zz`7QM)+oN3!l4ARSwl{bLX zPd5IgnQ&#F>p2v+yA(Vsjq{an5!?E<^Q0olSvbH~ZgY~*albNcG2E$MlJgqwYiDO> zOQ^J(t{+T;yM@(`&4#ZfO?N$QU4&Ov5lrQk)zNB~e5tq_;0SBr>jAwtx}V-FxpL~~ zL4~GB%S&B(2>Xf6`t6E&@@q7*!(Am#EHbDNW(ypX8B1dPwG4}i6gpF=pZ^7hb?oeQ zqDL;Sq<50|+i+VQzVfxcuk+IS4(NyI&(r|0pC=hHtUZA$PrP(iD_*!vg0bdLO-r8< zam<2sJCIcE0Bw!esPA2@o;Y>8c$N<2>9{j17E`i66X0|8G(|{g+}3LJYKPkxsk?xbvMgs1~?#emg3Fk%_-6lH@Mv|e&@&W96+aiAB{t&jy{5JN& zhUV#~XFO|8SmoQyp)liNcdy^$wYDcJPlAW^loD)gJ{v=ycD*P@7feoj_WhjfGpMzH zw3cF1hIT;1d^&W08cWP?>H1Cibfy0)KM}zG3(fGX+VI#9{yKbl_LZt`ntk-Vw%f1& z`={^3rYZlaP=fruaJ)WP!$ii^Qg< z<>5WACOXJr@Izib@m-hjyFuTThT&&6cH~w!({yQW7qIpOvzc(3n|1 z3?1zzjHJ3~dnKfh#Kf@T^^>T~vYiJ32+nI)6Ht(tygqKOfH4g(@$Dm?wDMwJRJ1EU zKDb)R56DG1b|k)h`K4(rbki7``_<~<;#WTUmYYJ=zw+W8?Ow%n!*JR`|Lvromj-W} zQ|=^bh=>@(H2UA}dfpWBxb=i19Y%TH#st~$!M^_T!cm(~mo1M`K6UvjD~m9~XTmJK zAIh&O%_4Xm?_}ikW}{kKS%@iHdaTgOEHHc;N<447_SMvUUo3!euL8Ll>xmmHYHVmA zlh{rCFuI&8Ae69PY}kI9wO1(M$7Et7DzjIX?*DpPmlMW+5j?;ej*(u7{+7%tN{#l6 z?i2k>f?|U;W;~`B#WBk|nSU#MD+54OI!`2AW=@B5x%%*1L8~hc;b(QvLR=gg#5jL6 z2Gc6_#dtHzdTu~QXVl~-DhcEi6`jQAw-{bp;FSt2Q&CfOf4?_9DYk-sHkoE%zN%u- z_^1S)wDqwftIfSwpq^x2MpX#h1z@Swi&@$5Yb)ko1iWX!8fzDbp=AR18Rk?{Dasaw z1Pn$$R-A7`wHxHwai5pJ_(EB?y@mg?FdM%|h2P>uL^em>ogU0?>nBev3Q~RIB8!j~ zDi^>}V+%%M;}FV=FSH$!416A`v}KDg2JE(g9*sC?>pmV4{g)I$2}HcQ6Mdp`qWt=& zae@nxbC+~tQuIf|_))+sM96|Q^+t-QznUhdxVGm}GMu-oYdAY1BsMi!sKy`~O&U{I zA+ZGB;*PV(){+4wtpfQREh?EjjcQ(~+#A`q6>4G_C>w2-9*XRe-y+Kl4Q0#}PbUP# zT@M>0#p)bS0FycUhA6FO8%_4csMVXl(n?`?KZG9+Fe_gosqIzlhjaL9LtcoFP z??BRRK}xN;|I3w}pL|Ufuk8QyLfhBf>6?5t1ljFTRPcB*9qJEZX(l|kxoGVEp1o>t zEXv1eJ0;F3HB@hB*8Be9!z!J7>CB0V#cVY$93_yID{qG2*pD?ya@?~R>k_8`I$A5; z*IXNgE%#NTQxT3n7bIH$QyhFjr6Jx$QBVNLF@7#1p=0^>xPI0N5N>-$NPe=Zs5>uT zLoRc$1L9{xA5bA@Yj{t*;nED;j(pG*-|E>6Z9@S&9slWy@@#4 z^*ou@-TI!BsDa8T(3MgB)jav!=-NhcaORkH8S!ci`!lUfS?T2;@~_TDM1b?9;(xC7 z9cZv8(wnm|uikgBH$ur#o2ByZ%5dg%x1CZhoS2v{x5s!~rr&<&wLq+Xvo8EQuF~Yj zVit5%$=O*&%YSbffoA>cL0xT{aZC5SnKo=-cbGAff7<$*Tg*y5l-a&L)HD9no@qU2 z88ChD)#VJrg?J-&?oHvwl}QdHOZfV`FQ+krlb&s(f?Gj z7+(lNIMu>`G@|5{2IFFPt8ybkr<`R0Iw91(b#k|VORtnsLbTFOyOVOpN)+r=*Y`&O zS49=O1#{zr9zXuPBa+2|-^}f&wDP)BWt85WJ?O3Bm~OW3zZ74XpATE8wNVn>+}wn7 z*Vbwi`j&0o8h&kQ@jf4BWXbi@p z(^H#5@^}^hHkDdd`Yl||>2YdrfL4SEHYX*#0DP*L!?jNd++Eg zz{2sN8t;Q`Ezc~QqriJ}MQU(P;^1VWS?m?R-R$(TZKp9g=6<{gV|VFBF?r4VdF2@i ztnAqcYgFd7l(&WVIbjCi3hiC0STG&_@q+HinVKTI*aBefO{UC zv^02-T7P`!2kKS3sVm_{e>a;F>HaqXO}=a|(pF1H$H8fz%~}vpXc(@y&1sze4`k;S zHk8NqvzuxG738ykUX;D@Nmt4wxb-Ixwd3#@PK@vOUbr|Ts`*<@MY|zkc^(!eF`!iuBQ*`$5;B&-ZB9@}7{k-k&`OzQFge=E)#+<^3MjV-#=72ET`m}p zWA;OJ_Kf~pZ_2*jkEw}yN8|bZ_y+}Usv3d%-yM@F9vmr6uob5?NBrWb#b-jK<(osv zMBW6;rot>(Tns!eX;g;J73vr2ECcGR3} zT+egTbRQXvAPwF^(HSZRo56kuI?Fq8+N|dZnd0q(+HV{?T-IiN_u>Bt7td5{YM#~) z7WqC}B{JL~aE@K=+GmO%SQw7ITC(b%%)>_@^qw#h}LqU#3@UhTeP#(dsyY4 z~b3o0S2)A<7nZ^h}rHFbTN#<(DE7N zUlNcCVk7+7n4h$&S))Mp;7l(iCz{s@fscRx`S}?#cud;15m$N8X)Z%F>8pfO6Vv4( zt=^2E+Y;RFpr0wNdQl{+-qxj*=apHi_O+HkSkB9G|MmS%{K~n-D%yE~ftH8NyYYAh zfXAZwi3C1$UH*p%Y6h`p>v(njTdTClVd4qb*P=RWJh&nk8-3+ zg4at`x2D?wUU{yBTp_LOZ$xfi3&yED$%tEei2^D?YU zML&(C+sq64-cJAp%1@x>$TWWDV*CQFNP_5IB~}{P&MVA~W1ZRQ8_2C-!e221q zm~q<7gSBa~l@zUv!}uil0W%6z4r9Inoij7lm-i^B8OVIA$%%3T6jbzAzj&^DJyq1v zH?~EGC)o3d+Tds5^tTb?HKS^0m!7 z&;M!z>0CWOYN^0ma`!drekn}OMlr-aw3Fdao@zbNhf{0%Dl7fqwFLra3H;_M46j4o z2J5*Z>I&m?`g==TXTzVJk-tX0op1WewJC^%9(K%K%1j)KqIp68isD2UQ>w=OTw8Wo zO%%buNDQ6wWYYX`#_=;q#&#jkf5E}^J_}Tx?Qu5@ktP?iwgDu5VYf{rvCUy(D zJ>~RW>V9S&v6+M5q5h8&EN$j2W)DdU`&Aq&c~1i`JY9_sY!2tz4-ni&oS@9{7;ikz~y5)trFtbQMwd z+$fDq7xqnNFl%l|fQ7B?>#e5Yfy5gDeR1L7?w1MFBRqT7^cQa8su*#vns;r#PTnrs zpG*v%tBOu z113YPn;JT4cL!Xb7^;xR;ne8AhO{$bqt+6tAi0q>_ZMur*vAC}O8b)&smYFnRXO*; ziO#*y&K)Nh5L2Uctzi9nsvsr8{xWpHorU0&`qp2iT1|30v}mF7yG+g)^dY^sx$rza zzbv!Piz1HJCd|GK3`z|YgH zg;A3@O9>_JzO~N3;ruL>!Y|&f8LvC*pQk2PoI+<3a9L5PDoDm~q)4$(ig`_|%dG!| z&ta>|&&`#+CD=69$RMLH*RxM{Wp@d^iE=T+C?k;$;o`P1KAbk>jAPt~D}!x*xy1`5 zMQRjD1(_FRK0xhdaxR&B(@M(`s)}_fZ)OY^_efs13)=d<7#Th}Ui0}&hEJcB}1E0tSXK{NcGop7|iUIeKfZ;jN51E5=hOZIM&DV=v=!y&4yx3>dj>G1A^|WYi!-CH=eF zLR@RW9Gcdo`xJP7ATN&S#5D(n9>4}G)_%u#nXK0Jwq_~AuNObg=@q9xgA}TR`B#EjQK4zHuPR1NRV1rh2&7tU72O6)jrCD4BLAp?M2WTSA0%3|2Km-h4KE%; zevcSnF8a!_pCk7gpD>+)jQe0cF2W|?iHS-x#IbCjnY-Q*|6RWpMXdM}t&~kXhZaSX z83pxBRd6oZ#5GUh9A>ZXfe)a+@`qUa8BL6fW7QQ!eP=vUANQzzjK_ym4gY{g?bZZ$BS zG0_1w>3JW*0@%LB_28r^xbk#0nQ1tpz@D+AsVR%^t__9QtbB=M zRJr}r>6Mr>8^-5Qgzm4F*#;S(7eW4~W{(`+C0r%ZvMG5}ul(cd_6xRxIub`;JJK}$ z{jH{Pl38-i`3Y{LcePQW)L3(yO=?Cjqr$v`IT-E#qp&X%F&yi_Q1fHnCAw;B`3pXD zRQy;R^qtYlTKP8?8!&!0wX`hgX+e^0Y}MV72Y4yhm390GYaZQOy6zxTyiKF~WpmP5 z28{v1(cKvw)~uLh*3JIFypZMryqI4SjaD2ko zz30x| zcqDnk$h&598i;BU1YO2F#^`Qs?`%!nv>miMUzNw3yyg)Z#n;I&Yi91K;II4qXb<|= z#OUsmGOl^SUoS-PRWpfGiXJUj#gUsM-d_t1F?}uRcPixfg5e2Gt=woA=;U_GHf!71 z_#WI>^C&tXV=jsIa*vhi5-5>twNp4k)M|WC>vk_Tx0G|MRX8b%SCPsn?y0nt=n9kl ziSsS7yz!RwWz`_{i)E#{+zy!hPFz49owyzNUNl@7_5Na z7w^aIP#do_rrC0$YEG+FC8G^Sexn;yt-gZ`0|guQxd%o))8?Tm4&b|4+-Rq)1}~qz zm{S~f&Y!<>f5r1H_gd=epPm)PVoj6oKf1Bn=EIw8NEkLXP*XeIcu}fpS(I={UqeY5>9OXQD1PhGA>q}L3*HYF|_j7{?9NzEX1OWSSJTah) zblkp9jCz>&Tq~lKb|+Riul!#Y-+CT>>$nt({@rpYs$&Q+Rp=`9KmHfprRd zw*HNIb?Gs>6I7a?C~A<%xoPvFy>{TX!)^*q%zc2fpBe^@CUZcs{$61f>eZyXuSqYd zUI#!iEuPY^gZW(v>J#>(!#xjpw{u=oB$P+d+kaNF)nXAF=`uAv8a(z@hXkxAP{4Gv zR6rUzm$5BRq4?`g+2ueo0IZe6bi4T7V0zcV?S(WLK_5$yWg zeP+O5M|s%G4>KboEcuDa_>3l%U=;2A5Enn&0B$rae~f~!ZfTFdu=o0pK~JxHNfE5O z(v>xK%^4%Q8XGlm=T}bRuR^uhT-bPf-jGE}HF5iU8T=M;ndU|LHQIp_Jr27&0!AV= zV#na@@V+H;&A4-$^{AS8$l)FkXFgi92HjqMtFYZ@2yQ53>&1C)A96GcH)4n`T1Mg9 z?UO079xI2;F8$orDI`{W2{?te`Dw*W-L{&Xp|P#*L+^xL&q~FQCB9aW>w%yAZ{f8V ze%o%hLwjFct;b{a4$TsFIo)-p;d{e^^!k!@fP{v_wz~$q?{~3DtbfIy8fq<*V{%uH zYX7D?MLnQm{i1~8qk_v4LbxsN#v5LM!&vW3Wa!i?>ndB+38S)&Y&fFBu8u0R;S)q@ zSbk|cKY26d;RieVH{0dAtV=w5VLD=&2qEInCKzgT?*%DJi$SEFaqm|fkPc&WwU1uU zBZ|dgvR1ItcX2aOfQ`Ltp!|;wnO&Xn0+x^k%`E^sYbIv8yKW0XkhA-xCOE84sF%M2 ziIPoKt|-CHKXk7}O%c3mTDzs`Xzl+&E!eoHMKLhQ$H( zcgTSwiVwKXc@h|i2LiP{3UL>M%9(4fMBS$~?g9LS`tA)D*^f6Emo6_@$*G?#xBq72 z-r$%o-APq2nLRBgd4>TahjWF?R(BT)$d0oR-^$8`Rw{qY2;gU|?2CZXvx$S zvg_JscnvcHGFR4O$JwY9Yo*VX>nhM>@TaGd&Ry*{CDGt(hVIVN3sHZ__Y)K)3ala^ z%raA1E1O;O44>^*1F^<-Z#kR87Pp-Vnv{0spRKt{Ulk8kaT3QBA3&&239FQ97imIm znJ(S(Pt}XnS`5gHV!)m&U#LEW{L&-rgLXzN-0rB4;2wt@L{k)lB9?v&isbn6d#St3 z_1>qWZ{eLpvc%od2<97J)$qP^vp8YLF>9;2=5Jb2!YH}QKHESIlT_=PKi&Jpdpd6a z1Z!NzPRuUyy8k9!IZ7uJD&tbG_x?pw6lzXam%%N(<2hhPFP#w(t_@dwoM&n*NaZZJ zd`|~~&PI6{Pab6h(z0o`_O`Wr-(;^SoAG3jCa>ZRwpw8@u+NHGv<80sSX@4LFo}Ct zbl@$K4-?9`m}{)a#=ug_ByVk8 z#jG2G{X96C#(#di9(tYzfAvnu$rS2$#g;D^;x}ElF?0rI@=KuAOrSdW#zXmg zmYxKYYtdy5*`LVne(q>WZnn92p5?vZ#UE0YQ`!-w%s~PT8(&cCk&c%)w9?Q9dN*$D=vrSA1~2dEj_`*F2*fQYV;A`<3Ahj*yY&kOTPZ@k!Jb(~ zH0Uo}G2P!A&{&9@nFlczh$HaJ(tPH$z~^ETF_TD=)d}B8VNBS2KFqilFv>8rl^@r= zZq;g+p*&5B~AVkqZJS#0BQG#J?8Yh4rnaz7SXLG8$D0Gv*!1@YZE z+q=kX4F5}q|M=rN+r0-n2)O&Y?pFA~U9w@u?eNB#peJ0aP&cGnssmMtbp5_m!1I&-l&FsCHWy zkObn174y~j0~O`|{pn~H|4_4V`9z!|1W3g>52aPW$JJ~pZOye}d%d!>|5skqsIfHV zK<0r<6sI^cF6zCqf~X8mL;lrz*SPvIzymO@7P5ioa9f@C=m z?#AsClM}n2x;r@oA7FQr=Uv^eO4H76&fb@<)HAq9%8!BL^Zd|~(^oOfF>2loJfIjTekg%vfi+SWich8!$7b6S3}kFz z!JOVpA|+{Q`GL8R!RT-pf*;h7Fs^cw((VhOH)zsK{I=V2$5FQ-aZw!isy!bQl(TJz zCH2LegvccBrFduA@R?}dUYOz1$b<6~ylY%P4vAmAY9FDA>ZgSCdvNTVTqTuOi=Y|Z z)>y(T^l1}DzJ$#v+ifhQb5ZSf2Q)R6xK5E^@x8`Z|3xUY;-ZI?*Ft(M{ML1A+#DQv z8UfG@5O=4Q%7oZo88v+RQncuL*-RW#1)8XNgn=!yJ7u36#PiG^^Xe?tya~|J-Rx1KMI*p zvh$f;J8I!7?(!P#3*FnkBVXTQ(ed%3kxzOqY2qc=OHtuR)R?@i!snfx+!_rt^S%bs z?%?w@(|?q|eTqN9*wU;Y%DzZ>?3XWYbv(b$u2jsNF|}-dM8CAudJ{OWE7D=GqMFwL zNbaMty^xs#l4>8&*(|3?FEhxtBhUx=heR0NW>CDD;JoI>03M( zB}OmMRGK5WF@eB)C+N8Ni46HL_pH0q;5eP~2Va6;Yw8pVlD4E3jLI0PBy+#f+3gVW zh%chr@ujdOM0tH*%qcSXduA@Y8oaDm>$X$4zr**cM-g_iRAH3EEu=hi#0MPtF7@+E z-l;#&X&rUKF{xLCkWp6?pjgbH!)4vh+WD+pbic0<1b7e2$N>~kvy6q>kShppp$}5P zZvg3UlhKc1hsSSho@d%->q^t!UPMdiTfZ>Lly*o)7BE4^tn)jW*-pL7&l=5s|+iXu}r?vR^M5@zV+Fb`H&I&dsek~pJ;-?eenEH+Rl#5>I0%|OKYoG452a2dA-kWO!bVU zTvIyps!@h0cVk#jp|Nlos*Fx*ZduK87)lrX!}?2p00{^Y1hrR2?*CaWTirpnY61wW zwh@mP4){^x@7J%ZEciQde*U;c1nZCT={z9#SXKRa{Y?I9@K>mav)ohJ8!%x$$R{*< zl-(Yc&0LtD)%yLnuU8qk(c0^Ff&kXVx7DN2n)txx86`<4;Y91hFD{!A2I?=%BCQsk z$ciy~%L|4Mhv(#S%mT^u0KiFZ^yBrR`qW=OgrzlimNbe<*D-<-ydKS26IdoBWGHJ@ zg%UL_g;ybKewvt`i`tL!ZXu34p^jWu>Ks`SF1t4E<@VlU>Zh=H_M`L+$n+Lwak}2>WtBqG7zQs4ha9-Z+ zAU4Ft2W@W%{*P#oaV&7Vid*r?yi)TK<>PXvoqP!89=+`8@9XkV${XtBEx4rdC8a%v z){ljk%Y287JCSz_k-yR7c&&!0`P9>0qR7c%EL-Hneo$TfF%Yx=%j0Y8TE7WVV-gG& z)*=#XVwr_^A+~r;HVz9dShR&USXXLnNLgC=y}4mQqrFsl}S zB>1*j(DlpqK1TRW8Tj*l<}w}jr!UrLrN!r21@0n|ISp?zDC;|Wtj`&J#qfD+I|C|Q zNk+^7@Iu@U5NWyW9WOM3UD9r*e}sZ2(#35 z%GIg@Ob-^vfxT7Sz0wKm6i=$uXiITVM*jgCYWN=cMIax#X|BC*)fLD0^w`Q7IE63= zX!Y^4=1xPln}x_nlNO>l4(CjZF2$#2g;Ui>-d-(^7&VU zZ77f1E@!tXpZdNlJ@>;mV?u-6_ z$F={GLys}KpE_l$_~XQFy*;{I)w>&V$Ca@`Z85=Lmps9Ln~g1rv(56u#W_*+ZDFrn zSbVEdD~H>|`8Z*mn!4v1I8AjdrLEFb4bmb=N^k-@_-p6@zrSDFO1U7nuv5N`*sfwV z9GS5-SwA~7z$a#64Pv_;l`ECd-CstZSPEuscCX0DH zp=>PeAk!6Oa~@oi`vrSn;fAAD(cgR=+LG6K2CsNISy;)XUH$i6?#>#v?nV~qPI*&6 z!ebnC$|b>5J)p8~7U{^f?|!I3)I=cUF1nA}Y6R0OdJ}pTedJA$4rHx9T$;kg8rB^Y zfA(eIq*HKa?CnzRGO8;-Kx70xTad8HU7&r5PYn3Oc_(jo(hz{a#gqQTq9Blam%?qqJ#J?-uC%2C;mxgxq{@QV=}?gAVAiGZRM|%hvTH` zm6EzL8~jD1=M$`Gy53e}Z9u;0FXqQrjDE>GDqL=Hev_nGZs{}r0m~XoXL^Ps>%Aay54^LK;L%JJ%Ro{FK)Lx`_?S>tL>-8E^G z9UnwB8x67Z;S{6WHfKOu7^3C(xoMP+KEZ3wao=9I&76Z}ZV}TLhnde-j^}RMH z$s>L>t>f<0LjQ|iDR)OkvyFA*9}4LgUs%X>y?BXk);hPTlwUJLo3-oqN4lgAl#WIn z%upRe|gyT!I zSTE{{KJ?80ZdgpL>=QO3_pj{)(UimYm>I6o^Q_+Cp+a0C zA=Z5EoqQj??#LlNv6f$1g#}OSF*Avkn`Q?!^NwAm!oWA=hlz^S9Q z66ROR>8*30OlNLy($FXI(qs2IfyBKQ`G)V*v%j8t_9lLcw zVFnUEQ@d;umW+x1 zNeqwsqbl8*igtOa`SS7eyF5gkNofNkY^zcH%@Dgx6X)x^ALKJR-}-cO`cH3 z${m)rsOsQbHs@Gvu9wlVlkBF}g$s(DLeHHX!B{n0K+Ob3seG^e=F`>P?k>_U>1(ii;=$WRe?a)}Q1(r`4|bD96mKYiai9bIu)n9&=Yzm}!wi zKYI|~kv_+!Iu2dnwLj7T3$kilT6UcTzfxY~Iv1w!``nWRoYF+8R!;ZmepK?%!bB<+;KMT>9muX5#{Ng(4w8$qw_#H$O-?&}Z*JlJwH9bKTN!Zxj?~eE~ z4r;N#derxXbA`>9S^KxaXDw%~vA8N*JXE<1>5u^*OUvSOO#=@lnllUyvVqLeNA>79JfXXX@3Mh~E;__^%e&^}Tk z^emt9A69ShC&%mizoa`VLf~`ei^pGtdJQ;!9_c*+QJU#e-0@136?5zBihJgB<(`mz zPCLo1R;?L5rm&r#Wbn0>8!{L&Bz2Yj+1dfFg7O-o!?$}c0dv3HN!Ok28JKp^9>FyrY?d5evtAXJq5% zEOhYpzwr4+E_I@O zSJfED5cylhF9Sl3w)QGq_No`H(0D<*IQnncxwo6H$GxNL_g8vxD=Te|p~$mx8^AfF zPBd?^j%-$P1?8qC^PE92+l>B)eNrWi%%N52pT3xO_B*5V5tvrp{BtzKr;=EmW=)S_~*Y;lWe6kO_?730P!%ooSC7~{wQXL)mv2eAMll4HgiehmDN~L z_l>k-d*Blu0DI*5_~HKa*X6#MXluoY^{ogib%Wt2PjXhv+D&3@Zw0fUTT^41;9n>7 zX-bgEChu%f^%K< z4+^_gC_l^!-{1>|E`f09o{>$Pa+_HZX`&)OEEA@?yu7R%q3i6d`7+e!Ph0A&1CW|p z{?AMr_{s4i+|0p#tp3w+7oNACQJ>0$hCvf5zUO4|`l7dN-D=NCYgB8nkqQgT_lLGZ zrSkcqc<(3V2x!)3EPe>L#97lJ(`d}@YtFBL&fQSdEDL`J9px;sIa~UH!UU#3qs>+ zqRTcl@PGy54}7rp?yB1_HNKT(!|t%;oNxCvms&=Ff`8V42^IY*X?;_8Cz9_d-J;kp zG%aT$0(|wShj;z*mg-=JHHEJ7jhw9(^z{dJ;p9+)t497lG?3`iES);1TqXAvN&-*N zjko!z`msBxol}X=Q%8LDc=wgp$^~e|rKP3rA3sv=B=s|HQ}v~% z@11Uf(QQLhUG423`P}8l>rI&7VT<8xoGM;TEcLk&ej8GyMo7Lh#K|oyB?UMKvQWT6&4~2e0AWTVwjwS?K{vq`+O3RE?T;vB+=Jadx z84;n#Wd!?FeqbXZg~lAP+|f;;W_m-YErirw->fR**9Iu@5B_!lOS0cWGjg2F`-DsW zZ#@XAf+K2VyZOs$eD2I#?cDw}mm=N1$SM^kZ^5_p#)5ks5#0co`oQ>dIBNaVg4C6i z_HYY_Lq*u2*VVMw#88W}k%5@JKe`CkG@FaZa;t3o+e&Qx)LUCByiG16g7D>?196X^ zH;&&b$jqX|t*(r!G=1oYuR!LOBfDW(IoM?+fh0;vZvnR*XRJGxkpl>(rN!hnRXHJ` z4DW&atCmq*v8kiw$=o!AvVolEfs{#%0Se3iHD~_6UvqVT0(altt=eyZHul>t;r%<) zSk+U1r*_W>M?2oZ>y}$BJ-I~3cK?$&^|>8?5^6FWi(p?pqhV$MYJ4y_=UFcrwmuP{ ztOAm_Wc>|-w|uo)KxW*dK7@^L(p#0}>Gd?IdOJ@Kg1jpmVz+Cb#SOS%iwQ4i$Oh>g z`%bT{3rdw?HRlTi_I+Gm=kG#>H2Vjif+(;g_#l{Z$rND>ebur0k&{mDps9sFv4q_X7$snl2B&-Bud?GBH?>kCC{ z>N}Arz}$(5K`1{M^3i>hJOhi~AkaYLPUuImkW!F|Sv>?iy6Cx=p6nu$5pR2+yKFmVx>@H$VyLhDlXhOBrL}6YtD*aS+9q)ST*bxlc^z!)0Dn*D@F77Z^}8i!?$4r@+@+a% zi_xKi-Sv}$XhO-zmHmjKg-^TRRw19#YTNkzR<5mA<26V!)7{Y}<$?imJoqa{fA$qY z6(+m>32#!f%#E4YzqnaA2c30Oeez>jTW+>7m57iu^tta{-=H?a;hr;Lq(sT$BZroV zRp%yy5t_djZSD{8{?ppp8gJwD8}9A>EhM4$tYmW6+I)ZR{kLCB^^YAUTsOV$LX36R zvZ#2tH9l^8^R}76Y73&Nx%qqLp3=WVlad%CZ`|NXhY|9$m(;o{@@JkN8^d7thUAa+CUFaous)@N9%KsL1M^iVV>FdVc9sD;fuj*EL>$Nt^BB9@lr#m&#qquss zw5)8b@Rz#uQkP_c%NlDIxrALS?_vzM>wMB zbz0%G#MwT(z>Y(b?_wn&%GcRAhWWP705!s2n{3w3s2R!3_H>kE(Dd& zHXbVDRM@kl`eube?uzy~=k)33>2GiYb>+nB#y7JP+!a{;pmM`2KE1SWF zhAY1ixCa`UXv9iNYU2856RO-- zLXKmv{H|P7m1Vk||9{4y!rgFa=Z?I93qB6dKc~qmqu1=?2WMPY%ao&$m1c5Q#B9;g z+1czLK_7qoKtV5>kr0k{7=+Sgl;VQfi-nYq2j%WHzg=Bj4c;;sUwpON%ISHWc~$J+Dg8uj-l4)U_G-s7ZNg%a8L{N`bI$I^|#5#;RP%=CePHHim8RwL#K>W5iRO0YkQJ6t^ZQA zG{C3^SJ~TM)?1}iGM=3ns)M6Sv$Mrq%sbLlg$Jkh(a{ZAYd07u@IA6brg(?We6z5r z5_O!*J}xV5M#nk8F=94eD24s@5_dcg6ec7A&cGSk*#*xKkHr49@1HSW%bN5UccOTV zhj=z3>tOsrif}BuF8HjgC>Y6Q^=_+6=-UNq0yvt z*G5aMd!tP1T|Me5pGQYW7p=CXpaeOOA7`}1*Ah1O5OzYF<4>jq>2zH_zVLnKMv?s} z$|+ug-#$`~m8qR-S+2|O-Q>C1@6TGs*-*;TJJN!c^07+|<|O-CnELVd zB7Bu2yq>M3vmb1u>i0ekhdRAZ6hu4R+)+mlM%2tC+x`5>!-q`+GA*##$uUt;g{J;|3`9WXGLd*r{{iL%G>>!l z@W@$90zuPV`|CXXLqHZU+K#@2_i31z3h;86+k4(PXOc5!vR zT;n{2Zr;0x?YYRFz3<+MoM*oBc%*LBEM-$dTjT~JwmU67cVW;XTZYWzS(bfO4?GrhDi4;Rbn1P*Lp3DBZ$;rnE>GV&pl9-b8WY6h8R^zP?olBtS%TOqBhg&>W z-U)LAKBt5ypZ$l*`{#jmQy;$FLw$o*zv<@_&!0cP2l1j@-;q>Wf(bM2QeAl&7aMz* z&#Wd1ltBGEmr&RLt*`vwuRjynzn84-XsNIVExI&9%J; zH5DBk9e*&K&Gd0PtQIO0#1AnY>lDsQiCT#MN$z~zkgbE;5u!_*7C%F9DW;}jkdE*;o9 zAeGnzRK|Q5}FexMj3#6@@#Z@ssuS^3nN9ml{~u5L}Th z<0rO0^s* z^-FeW(vR0Lqsn~ui8^|Eh4G%AP#IY$7I#W0e%l-RhP=L)sHS${i)cmhum$ud@}hYF zTBBhLhCxkKaYE9D9Df*_{Pp_8#M4z{)6-T5BW##P2Q}_)bx_YVln8OLmlDwD? z9H;;nO6snE@(En1TEs7}NF1wD^La!%jnP&X@3AVO85AW)DPYB22CTtka|Dh0N9+D) zzDC#r24&9ibK2P0=-B3CvH1E(xhgM5$HGLbfXw8{r0+?%TtnV^QNa?O^Biv4w~O&( zJZ9qWC%I#k0=7snntB zC*luDL*Lt7!`O0^MwgeJMZu%Hp_&Uc?d577a0(-c@YA$)&zo`|5I5WTXAtP)}2#^(^O0J9{KHIzp0$onONx4%$kWS`qtJq&^|Tw z@Q5XYklXtKyQIoQWo6|(V`F1cYWd~mll%7V%XUmUnXV@A0`MqWecS#BZ60@QjY(Ma z0o?L&aj{VIuJVA4s)|ZwMus4%EP$79^#xnly_m>I^~+*iT$^8_>2D)H_FOa75svW5 z&CL~^;@Tb`|q`#HI zrICS7U;YrPlyV9Hhf(LYW$7wZPOKEo%gND|mnRQDxVUTlK-eX;$xU{}P|>;dA&F$p zFNbcW9Mkkx52@`?LQd~oz6P=E$6q-qC$^es-P9pBeJ$cRbnlSTL>cJn(s$44*0VG= zHWFN$Pt1kG#33psM}LiNZa#gx{3dAX`T6nN?DAWOqmrkT^5eW&AM}Bsstm|vg^a>a zi`xk}B;F)>LX$;*g)n{edVO-h=-S%jbftj6z`*ANGQ`!@eVNI$ERN`~^?4&*u+ZOQAQ!n0W_Qtcc2&wvX#l z%K-$kFG?I%Ub)W&5%NHi`NOPfDlRnFu!_TLCCm7ciW%I~FeiTXYPMB?mZI3Y{s}dv z?E%(>O<6hMXeMKkK>B;7l=J?O#-04u+Ineu9=bXY7{aqGuw~Xn8>Ah`XKrzTlgN8! zRddR~o?K(W4g6=$1wUL%D)bi4OnvWs-}TL{&yK#}+26;+I76ncwBMJ-QK~ zBsN^`@R^e1`~lYW#8@u<4ACO~;kIF1sn`8zL4>q${5KxGA7UEo^Ns6`hOru?yO1rV ztON{+;Hyq>ak)V3ZM|x8 zSm(8qpT~`W>D@8_+tNjfQEw<|xYM@86IMw=l4Y*#l*5;|KGA*}oz7MytrKyTyFw{PFl)sg}o14w98wJSl7R_jvAk}CUy7G4W< zoPFg!>M4}*@ocx>r0fKS;|OWaJ=e<%3lGzxqX%)$x8FuWnc<9zsw!Rcsky;9-7s3p zbaL(Z6{Of5nYQ-!LA>9~mjq&Ww`Nrl=9&kbyHTjJ+&Tj)r^okbegls^*{g=l8c9S5 z!cMHr$;nC3%gJWbWmzNOu?Y&!2tB1sncX_1CWHO zEI|@_P^NJk{!&;FT5anZ?TC@>w(53)I}gDBgFlOXaqxzVWp20CbMJuWqX7&&hy+f{ zLqtC|UV6j^CY22pnrv6Ral3cMCCr+s+xQAI;>X<4Ez|f+yK~@#$O#k^$M)o~b)nISG zpQEFuZw=DCUqNODOeG@p{cVC|N3w{s9Pd%hDD~^|G9zAh^we~w@Wywropodf?~ zSN6~Q*)wF|oKjE^DZ>!ZxFRFM!)M(}o@(*dzt_}N_UdOvF*&QwL)JA1e08`xnmW0@ z{zUTX)mezV1~otv-nt>FognsY-0{EQ3<#O0p8C*8b;QR9ShEX}GD5M8zTSsJiaq{i$Nu-Mk>w)V^s9cy zo@|v1hRMo^yXw*$Fz@_*fixOeKcs`;foSn%# zLAOus?*zgd(78pBsG9VI4_pnj4;FNF9+Chs(JDwI{J`sph*Sao%7I&yL!ZSzk|Yfa?}hx8;@i_U-Wwq3a5sYEZczX8<6E*kdk`n zdx%Dzlm{e{p`o+b>%IeFR-v%fNK#j?+8}*S?SDuA%6l7VA6W)~@jO#7ljJxw*PoM} zt>b6!?2JBo!4pz*pKD~dV^A^4t)izbU1s~Wrfe~5=G zB^(malCkRf^PMDp14S`lmHPX2tKPta2yx;BzQ=@tOSrmSuPevk@J&{?6}Z#6+1VFW z+|>|SwmUY9aBiE204T!5LP6fPx3Fla2X7@}qp#SZB(!n73gXgGt*5jaul&@^3}cvI z*F|(lfnLsbf4jkx6AkopQ3CuixL!v$!a|TEFp-L*Q`5BD&mn8#`?gJ{k%LB5#Kpzkd-4Pr5gN;|+^e5!@9wU5^ow7hlWzu@FIg$z zg0%EtwaU)=70*49q{c5leHe}zb-Q>>a;UthO(b=BgE z`V8hEnw$Iph?Qu6-3)nLehIFKiG@Wvg&UlwT*_(IZmY2WFQ_IFS}ktAg~IEQv1-cAFWtmlt)LwZ{W7QW9MDN2u5GIgk3LT z8aU9(2thvJHK))g#F|b|BS~6tR7wW!^Snles~9NyM^ zFtacT$P-|Uk3tr%EZ`%s;Wnrgun{d6pmcG#`iTZ>{_(7kB(GISYgXKGyxnYJZ?|S4 zG=e{(=o@%JW`MhI(Wovw(CIjv-8tWWLf3y<1m@HIf{vc@H8HSO4{;s?^U*}1t0ua; zyX&@%OJr9I8wbPQdPdrQhAAou83mT(m z4Yb%e_bGb*|M0RJ%0h7~AK=(=3aV*kd3g_DJ*_p-3V+InPp_I!B7EK(l-b=@Pfbnz zWFXv|oeXM+8IrWI5&GC>co^TXZIV0r0a3y%pR-T@Zfa~C?|Tq(Z-NBiyH?kBlOHqv zB`kt|inj|iuO{ZN>}(k?Bpc;u{VP@c<2f&Tjw%JLw*RVxMfCH6`=loo(sNrk8X@OD zSmq%CG!CMK6VaMZ`CfSjsI043hpN>JbeKZul0*Kjv-;;rY3~@0Ya!T4X_TVU(%-a% zSGtJdl!~%4=)+Q^=)#w@+n;<+H49n{+_kf?;7h6fUS^9cJPgJXgT7;6WMnJ*)@%AX z{eL*t@uer^{Q>n!cT!M_;eP}XuhUi9fT?deTFNL`+2h*&?%lg^_t5(K`d?Oom!UaP z0!W0=rf9o+n&u(I(dJ;dv-5uJdpbHg-~)T)bwBs__kTC`7G*lF$SejT-u0F|RbLjs z+^Su<=Qsj4jyCX~*iE-J&ZuyW?{N`iV+iLqFg9iZa2@?q9ymt8)O{`{ob@b3upMs5 zhH@$2=X!GVuLEDO?;tRJP4m~mxX_=({%;9|K@la9;RGKx8I=Lip$m>M?1gK8TTdlY zVt)NiU&VtSVPYWE0iXf+;q;?Au=`Cy0A%I|D2qB0N4t` zvrUC((SFm^)-O?1t=nP|Exv#suIFem!ZFdf${fr!pmhGrt){4%mgpTAG|Y>KJnMO( zABcYRr~DSo@viMZmzRslxrbjvJ95zR6ZK@vLambj6AW}hjsnhOI8#|t0+*r{{-`#> zML~1~cI$ZQP~)QSqd}R*>-A~rxFu*STJqG$(9p&Gl+3*pR6ox6*w#G|bGVs4bH)*T zTUlA}0Vbx4PCoDoJtY-5Pf(25?|~GO|09r+cGua&FF~G`?ox) zZmRnm6GxzYR`PqbQc-|E(*rcdxHm)16m?##$Wlq&xBi~3ZEneOl3@i9&rD2Apn%)5 zbUnD3omPwr+43+T{Q+xe-38hia{EGXABIsdrJ-U&hJU_$;q!1#K!_+^g0x9V%u3Eb zxrWx53$NMmf5}T$GGY=Cf|+%R6x@T0-ZV5VB~?MPT_u9nqiHJks#$O!gJ7m=aVBEg zj@B8Wtu093(C|@&`*yean#N5Yh<+5mQgy)>uwuX&c-s~>gk3t8FgVxG_&53X&?pfG zCWlB6Ky;@s-+!upv~hb((csTbe$U{YkcfZh+76`7$FE;+C%Co)rKKFet+%g(>-(JU z&U!!zS0W#aKZA40G^XDVVkX}xcTDCsOco;tsFYUSz#b@HrK0-@7~wP;ME-+7 zF!Vq&3_%Uaq=>60r(e(N6IEV$^7YmP8hIlLK}Sa58K)K^jORbx`cd;eOY7B@B6L8D ze*~Znmw=XnU$|Itx9IHB%1kdUuv%gLX*oBr<302x-&dZW+{RPH*g_g#c_}Nz6obJU z_QEoPe8GORc&-)91o1u{V>xj5wqOH*pg-WI1aa!4Z5lud@hscj z!3x|GL{H<%+69v@114ZPaDdQscrGKEbIP8v9-AyFT`{QUfTR3jrJE##C1BQ)1g zJ{-JltD;dRH?$F9p{Jc83@V-y1HRg>)FUo3vfxCL@DEz^jmt7JIa=+C<2L~sL&=96 z#sQ#Rv4+~#|_9dsiz{UW8ciL_H1Gv~Pps#=C2p3`cEUKfUV~+^nH13V!Eym2#3ub;B zg(YN1GeIiu4bB*d{OY4RaK1>bYT{IG>iZ#ndy(h6{#tSW+`TF9#Jzzh&sN^Lee3X+ z2?Vhj)gv;Vol~gCoAyI6V&Mpxl8MgJWSj!=n#>Ckl^IxvNL?!XsEHUqnbc z%xB94pmD-2tM#X#Rq~!-M;9a4=r04xW_7AJRX0EG^Hg@;D4alu!W2r|b{ezk4CQtk ze&8Upbvr*5e5kl(6gz^hqmtTp`8V^Yb_%~!tZGwcQ=V;hsWcEC6N#PEq-8$4UV@z! z`p~;r_O$=ck38%Z#Bkp7rOPQCjeDDv3VpHMZ=QQG$sZSLVxy<8&$x08Ahr{KO2>Yj zg-gpLyI$PJt@=mWQ0e!mcmHu)kF=juBe#;+@4EuRt9eql`qQ-&^oD2`wW%^?KKm)> zW*28Og8}2Tx2Bd7W9|V`5rl8$Plabt84=O%GK zW;{!xVq!{_E1db91+U0%O?71_*tA0Ra^|Kf@gO8=lY(N>;)+~-h zS*Ufh@iN`0vW46*j3d6*VQ5a58G!PgqJU9=+Q&hQla`iNy?bZst5V8nkVek1y$eQt z{EOq078#@d{JqsB8o?gcbXsC!`;+=T`ZLtFu9J#)q386q?D)+5zVu$hnhtw*m(#=F z`mj}1j=5?46F)LS4UP7V?_o!Q2dt*yPJTYVDD!=qr^J{A1~3C99zg?q9vT`NQLprn z`U4Ku)-6At(a1s^a>38|a3hymsFgVs^PzEzR{cK`q)Yr-wJrI$!isGy4r@5P2)VG; z0Y7U;j*op3HJ9JaesA1Rfj;}FezVltrL3}cN7?-Ze!HY8g@AM6Wp)G*>RO(IMWd;M>-ACLd!z|Fe z^8TG~SF?B3O9Wp}sU&FiNaCWf4?fE8tmoHc-I_qGok2xnlM9ndyoPgiXC}f*0gH~$U?#!2+Zu{Yl}Go^D4`U}I`MaB|iJ$^9jR$Mn{Seb_i zq-GdxH(Z?|+@?BCFHT4e4b@wA+iziMnbW&CIhpPq;5tDov(Ob_^DbW;)i7t)lvor< zIXm;lFXc+_9nG==-4({{xhoeQMl_YP&WCN4!|Epdr>Wi3iRJ_eiBjm>K3(Y;3%)9Y zGtuJ^VG+}9r5VO{!+hTg3F53F^5R9d^c|)sT?dd=cLg>%+ZYXAz4e&9;X=wny@6z- z_24L=Lrv6c?mF9|ii(T`Q?;yaj%8AX(}cmy?h}4;0s7rhgIZ0B)Y}iSdwfE71#BZ+ ziq(o$j@Bsa-A%Yrri*ip4tq3nZ!;-m*4WLhj0_6$46QIT@h-${GJ5BiWOulUkHG>I zN<{{?(l^Q*$NOVLt!ON^YkLmxYW)6BxZ3$6fvvSL6AY^PLtT7riJ@K{vE&YS}K>Ym* zcEC(pn1Woaj{KC21DMKuE-Zle3|w8BR*53S%|Oe@1ljXKF%YE&`!m)tFWcf&uWjSk zpOv29 MSZ<+Sfs>E-6-YB#X)4T)0C?FKZ#=3f{rKM#xa6l%oQX)$9ede6%XO_E31qdlxvsvxhc;64yBbTnK_UZJsRcctbMK}m zMG_GxmbYw5p|lD>U={e@Ln&1^_mv7SGqam+44}`7e}OD2r@M$!1NV2?5VPMVQ4K%V z-zf3aqMI?hekuFanVs7NNoF(My1H&Fb;_Llg@EP_LDuxycnUd1#Iq?E>on0uYNm&! zBp-8ibEAXh4Ci{i^uiWc4XIdKU8_TjC20_Xb4VyHZx6G8f~?{lNgMLkrU3SpZtnxv z@7mczBKO#ld*-JnK=Cia6$vY$PpTZGvTWUVS6ki%)r%N$s_9~Rh-pj-m53Jp_@{*l zbtVRi1xICV*pJBD&`3hmj)F&36FsQF$`49n(|CaRuDI#x%z6>v$(CG^>+g{38SbiC zdy9pGPs$VqV)H!0L*tb!`Nl6$k`$N)w^vm?M~AANmNlQhFeQK?R)?+t)mu1Z3`=Pk zO265`P3|B9^+8L>M;kT2iK06`L+!3bgFRS%MnDpe*caINJTec;lw%O9Pr7Ms3I^1a*Rv=UsRjq=y?$GI{q9|! z?={BYKKVyQ-nug?I+S-cDPHcLCfn{_)Yok}<}81v^#iWgVIQTfuoFGX@r7QX6Vb%f z3(pp3u#_3&K)c=;dypcbCL)}dRx34+tBQDWgdjnKX^=E#?@#i=OVV->6G@P>i)Xs# zbTbq{K`n^~ylMNceM0EydNg)D+M4pbHr1$WqCH;QTz*D1cK@pGj!5SL_QlxTbMY=y z=zFT+uG?;+ZV?M+d7~+XEvCo=ncpO2L~fph_$t{GHOsD5&B*k_4c_tiaOg)nax}0ua$)v zmdPZ)t_+sl`1;7!c8C51vn4%#Z-BKPm z7h@Ru@lHxmT$u)3mz$$Mr;pzV_dS6nRbdBnsolopZoJ06?~J3Se$7n#tcXL1cTF!8 zCw{}V@zFckm6T6#Mnl<4tPjAE=+En?R%i3sDwalEuO3W z`bjkZyx|9+P7bsT9$0p(5+@r{@UaR}TGoE5{k1HzYjqiKmb$aF36+>N7V1wC^CDey zy3Yo}mMrl@MrDCcKCZaFzV}eL3*{iR+MvPoXs5$3hRSeDz^ARe?1>#ky_V4S@$s=W zH|K@q^jAe0WoUTV)tEf3jj?<5h%jSlXgEizohN07n4<1FU=aaLtnIF@<#O6-EfyDA z_YS-|hd8XU6<|N@xY=KkADO0+3?Qr`*We}GU1{*=#Lp|{>sBRE<|MS@!a3vhfbre) zcr0~>I>}A`;6a&(8Xh1rQc(UDr)p=Qb}#)YO_zqI$%M4jtjvJsU3_~F0`uk)NQ+*S zQ9geDN2`qu4N;i+nHeV;85z~qJYfgwRDMxWCz*ty&QlA#)}M2)?QBgZ!4iAk(Qgp< zNQj%OK7L|yHNu-~YtR4Zn zEj1+;8LRruj*uG^U(1Y`cIJ9wkB8d}QcdIdCaV>ew{4SDxCB8?#n~e(BX5YaQCp$h+4FuS- zRaYR2j>2))`%Nu3KXg1Gy^mBLSXptYD7qoDTGUC+U7k>Ze6vJg@3FmX$LF4Xdc8Fs zJgwE?%QZPFWj;Rr#&0mUJEz_WV(Er^oY_ohiS)9W(4RFPxD_(~f+yI*7(cizQW^FS zBi24|#S1VSR2kUczyBG*vq~iDr&(Y~7K0PX-A*%OimABQla1Qg4NXST%&4T-!NFM< z?|)V;U(ep$J+S-N(vzxq%%58&dUxSmz`#wfxe2d1>dF$5x@5dQJWn1T#cT#sJID~A z|I#$s9D}d)ttZf#cW+&=J&*gVsXXy{(m7{y!vTD5bp_!0tW~0)aUX^1sv%V59-F*X zlo)XmwijmCku-}~rS31;ULJW%o)k=jMrXRr7kOc8?$T zdCn8P@(ig&Dg{qXn@&D~ukAO~J$jv8e0FZG6bs@ls6)r0(kD`x?|pQ%b$UROci;wz zM#w=fCL@^Er{tM@>8!(~==eM*)YILA23_O)@1fc_5)KV4vV<(Myk9806VWnW9PeLD zffielvwz+xt>eWhikt0rH7h+-O_?mrRD@TPVeQlYhZe#{)ssJ_1m@G7Ee7k7$U@Fx z)8T^yxfLs@?njThH|Ga|Q}jsteauBu$L1zE^-_Bf$M-Gk{H#6ryRZ6BWSYtsisco; z6={?(d$NIS?^I#M>k`+w*>B~!20bY#g_fogi{sI0KHmpA6h<}#!z=Y%c&gsohgykhQr)UO2J^B{E zEM3M)ceJKhEsNMz3|u$iyJ#1l#27Q9oMwo4=NKDVY(7)z$R%tUp+cm|?&TJ2&GgsS7d1Dbvd5a%Rb!ajjQpxfd8yIxD2Zha<@UT$4c z5fsEs)IhFiP=k#(>y0-fAjIH}pRWB$tRgQo=BDX5Px!sWMSlGFn~OO!T|nu1>JLHc ziwhjL(P8qJaJJiO$7HF%=Bj%8MmjgAbY@I|@8?sks0(Wh#wjc<&9%i!+uBY)OX zNm%1B_B+T0R^$S59;yL^+)8W`7>*#4L7_VeS%CgE2N##_1I)~RQ_hu<{BS6VK{Jw; zi@X+jj_tz_aB!hpEXnAk4!r0ks9RX0V}P=yOjJfPlAB#SWbk9d?lVHfjpKIZ z;fq0Aw(pJ+PS3TEbaS2<+HZ43w2u#!2;7{krL5#pKZCoNCsWrkJ>8?QP*u4SZ4}}F z>`j^Y_Ffuhmv0TSCX>lM(-ojv4MX`^e0;q2?E*1K@iPfae;*=K@I6L+qYdXLX5O&E zAm2ds@2$;e0MKtBL!j_nP$BFoX!8T}V4hike8M3J!6zTp1&+VxgD$`W$5kRplwEtc+R^e=8i(V#Sp+?H_3)0TEG4QN5d;tXfs$1;y0VF(@dRM-5J3{wyK$ zIDTkJES4-d5LXB7s+_M7w$6B6U`DsqoDYkv{Su%w5}rb&;=HI$@tcZntFyYGn=QTp zW}F($a0DEJPS{OMMwVO>0TP@}@GP$?O=EaTWukaNKGq zVP0PZL<|fQqhK5oQ=1t69c*TmBtrfnQUNu`)A-h-N+r=IyaHo)(oc4HHQ4L|7S<~> zqB!KOBL0Ela^1qa11kv&j|hj;&V-eA)sx==2A`v@1;anVHyMS0VJ7A`x$bCZPOMT%4N-DV$>WJ#U%dK$qqX!)*Nz8`76W9*sf*(NH;*ofDh>F1Wr# zCRgoRXS{dE-Ao7wpb;9_jqbeE%@;oKeyQlY4qjfem#$uoL0yukCjWqh6ZXKI^M{Vx zBvK00RX4P!>nUbsnx+;Ni33v-yQuml7q*OI#^@;VX*+Rwb0CjA&>k!0^jmu6J$ADN z))0p!xy}7Zxzn?{E?qk&ZL@QVUa%mteWKf9VCx?JBcFEd9%yae&m0!66X_r=?CIAL zilc7EQg(1;Zn{RY(j*OZlMhjGk6n!W;OSTxmazO}bYLUD;4=HZu}^%e!6%}%l~2~J!7 z*yvZiHdS}e)Ko4fRs*h1P=O$Tc+a^;r@1DoA;5;B*gd3<9K}$9##mLYqvY)P5U8h| zHj2+-U+%?HRxN>YF0`{b(Ze|r0};lZh&6JH;&&eLVwPDV_kr4~K} z%Q|M-rmHkC2zqTyrD-w!q4OG{8;U16VcKkoKVNcFnxpM%*8?M!8xTC1HBJf&FX6&r z@*ow8js{j&U1g$MGu=&vm<4;l2^{xwciGEECeKjtnbmzDc;&DhIG|f)R`OVja}kb8 zX}J`*ob<80`tsVxhErBLTyP6uDr^n{9_o-XfcjY;8M!wSual~CJ{6AHe)4DFo=(%$ zw4n!SPg7l)bQG;7rY0{>)zD=3fs_qTnRdev-KdwS^R`0y7)m>}V&%)Ks+##}9FW6H zj7>lt>fBQ=`gO$5mt#eI?#(tIds&F>Cb|P_RWc2bYj9wo5YK)a6uZ*!HlV#|N4X#Z zeXdz(I6h}bX~jO2lE&cQ;K?{V`3PoOm7Iae$&RHOva<@Afe)gjfjE3k%y!16o9*4( z(cixpvjK+^l3+?Z+VfMc ze@cn*($=iUuf4(NJBBixfeJGzq^H~5kkkZs`@ppsH=%Eka6Z4a)y`FXlHsyoGvx1i7d8*Vc6h-thPaW*ZHqwUfWI`%O{fYpl4&-#xaKW=-NV5B7i|aPX`*8JRshMw=Y1et5Yd8cv1~@ie}qh7bEFq<}e$o)FzJ1W;IBM26;i^ z7!oAQW^LjxKO1{Gu2{9Kc7xo^bl|41QlV|nq*UJ(Z zm~VG)V-U#P9G$ZY2AV;{d0m1 zKW~!CY_lHLpO$AtP`a@j+U;Z-VHCWa2?dx$F2j<`sH;>GY)Z@%WTZJpeMB@PAw40fCV8l@FP*rua!E^Ddj`ntH&8m(07r%HdwCg&ALYx51G_Ldfnst) z_I|#)bjm27;}i`FE2V^#JUt0L1~!@WM!t)@=z{VRXjzv^#&=Q_^;fq2}O5 zWc6)@16^F>tMOs^Cr@w9V)B}g2qyGR3oJQwJyEgElk?mtV_4%w2G%E$O6^DzjC{4^ z)xlQMRrlpd7VyTDUg~HgX0wr6S5FAnlkk-{v0CtJp`lQ z6-EMVZ0PI=rId}jx@$OODXtfvmWT)d%BoW5nph+q`;8$(`Hr|?4?j^Rf<$I=dVFST zdU!k3UjGqiUyG+XPK&<$v^0KDCE`}alUCa~lwSJ;Y+S=q&5r82Dv(Y)9dm1D2Gix*4niE?xX9`rboc^P&cSD$fO+0P#atDh z+A-X}{QEDo32AvuS$3A^-Rltg7yI}A716qXD(s9-!G7eY?4PRnZ!BB#?!COdn*Fxn z_PoU5^GtG_q4I2^{)^*%Z4p(&wJk0KZt=NZC;20f?sDRuQgrKW%y3fa?k3bLYOb41 z+&n=a+ZH4BPRZL;cKV6ck@^$I_0N-;1Ile}Y%a2#y!w@hbNO8*So$dNLwrQ#j&E1S z{=AMov}7BATY1k-8Y)ppGQ|d-*>DaLIW2XlDWFgD(EV^jHiu;=*|z?cA-+)Z=n?E! z`oP%DU!AH*GS-m%@ZD{m!~QqV{Pq9);TPs+{{2xbl{}B6kmoVfv;2JF8Uapc&MeN( z+7oZ?Kg{BgEgna@AJ@VhuvU|ZV^gOb>xIfKvbbg2uMcqrfu?CkdW%a+x{az_b8tgL zHX!Z%wV7^dI!g= zIT)A4K|EzO7)#4zHKU&Fx`#MU9VZnYx|c+%o=N2AtMwvZF?KKz&&@NcS;QSGICmz5 z4evZw29bSz&5}ppjOCxH&NMrCwXQSQ7pA)bZR4s4K%tQg*<=(8c=!jXM;Wr(t09%!td$MtZTi z-kTM_D;Q&xbIHv*B~M}vg2$s?g;Atl&(8z}J92*!9MFvp^k087lZr$P6F8`&#+%ym zn}L{8h0W--Bh*p+7wrG}P!J5Cvmc_4#t**2uu?DK;HM)j7cdWKKiV)pO8u_7AVPus zRuVomZkAPZ^kG6HN+w4inJ8GlT#935YjJ3=^)XdZIj?YaBKc;qAyi@nl;uRst>yESG}V^wm2XnGd;x`xLgx*86bsv32~X0Xv3OlBa} zB>R68ZoH`)2$Om#p2il?RwaVb_g4a(19-7Y>U(i;EbK00QG9LSC`iSf)m&_(9sP$=1f~b`a&v$G z`a;KY@*?E-t${~GqT1F{#W@sYB%xBes7;6GoV)j#AkVm;eG|EZHgJfaUIF<*RS{+2 zzB0|uFW~;kR3pgK@7rV4?1-<_j>=sdUmN#|d>FX%z41hyzsJ6W;+aGS`!CrOPv<54 zju;yIMQ21@?muX}=5JE`lQGw>-Q1SH`))&GpUg@~;lZ<|&s{1pn`b8DKljPzb+8ou z`NTA)YwpPtVEHsso@=-M`tF+|34DFBI*hE`c~)HgCdr=#h8sNlUp`=MtWWJ-`-&7U z`tv*ixrd{qBqR6;`Oro7cRSBgevGf}yOsT^pN;w)&<(Um*|C!RN-C z(f_VT*{Odl=HotCAhHo{ZT_~1|E(cr!Om$tZ@mkty~h2e(a))=T}rp$#Qf_*NC-k>eK3y``mzjl(fQkx!pQ z;pO-uQ4svesRm>zODA_f{*4IVk&nL!f*QIH{5hOQ<3(JJUl(7#oYm#B`f1~VdZ`_A zY2!Ed$rMwQZ>8sx!W+iKo_=KJP$@pw7xie`OK83A%F~afiK;Cd&7OBEPrM$MT`cRJ z@X|I?t6_mF;boidkBB9%TV=?!*WZ&hVXVp5JNZub8Ts)=<4x07qN(@FNd1eOp_jXV zXApf&f6at?n$>K2t9F(4PPz6pUzYu4jnp<_RuD_F;G)F7YdbzJpj84ysRt;fFxaD?hp{tB}&?-c-3Zzj^H1>d4Mr@Nc);D2vf zng7ohRJRFa?%trkNDmUdMETjck#SG3S10aA%gpC?k>*}`Wjm>;EbplYh$4Hv;MdBy z*$o~6BT!E8><^*6-^Bhi*AG3~d~Z3MTrO~3Y^Jy@ROKO_&IisF|E#D0EqwUyq47Sk zL(;sZj|NBjCJLiXeQ<2#NlWBhe|#0m;3Y)zIcWsIhiLmf&L`QSH9Y; zTyPujE0_+Ci8+1s>rG3~T7l+Wv*OzH0~xdUn=3>7789v|c5#}WZFJZB;}BzY+{$wH z>>$@*5p(8ov$e{cO_ZQ)gUy6`tY%@^jc@l~lNKJ%{`=b-k|lQbGJEA%hEvKju~5 zJ{qm7rWI@iFd*2174`$ah?sCiP-D^=z()9QfkmJ%zy2E_2<19;)Z)L*1U*#>{@5!8 z&=GXo{0c-#+5p+t&vMVRXKydSer-j~5NiOX2&rhfV&XW;E{SztX$2j2l_@EE{Ii&S zeSHxxyzuoZ-j|{iwpnHACFveAPR@fcsu-f(|N+AE>R_y$fB)Rb( zogcUhnOfi^{7@lr&-as;FNVv+U;En90w-WDJxmf#OQ(Y~+~wsweoW=Oe%kAi10oz37{6(#6l;yS&l`G-DNvk2x;p~?NH#c86vhriG4FCmC} z=-@yc;qUa#_)%^F_C0j26&)(cOF@B4)nhN%5csBZYRLeh0v(P0iO8lW`)0>S1bOQx zf@p2FZld+~efOnvMM~2zB#WZBxbfbvwWB&>1_y56&4Vn2Q(I#;JU!GvBWHa*=Y>epAr3aI^G9VA@zVj(>zPVAbJcA!oyhJxQdG8l-&kEgS5=H9~d0W%r*=? ztg5cqQ7&}B63mBS8n+iBrG}nc+*Lh)@~qM=yUzdk9P~fMbp8%=e7oM&+zt&Vkp_$# zRF^V8ONE7>VhVa)ZYlrGuCaNAt@!#s9njy>w-0hy1>Lzk(JP&rugQiXGCiD^m*6+9 z!q!Fw3;R6Ys8DUwq}-SDk!x*IMfkG<&^KhX>xjmbOwr&WOYP-8X2tj9aVZa8QUZJ+ zON4r1hnf}>g9H!gb$3oGL^u}VSa*@uko|unvl*s;@~jvBZM-|tyk==C`sh3ruSmro z{9!MfC{~|B{=)^(3`pmDD+c6N9FKQ!gVOGa#bhe-%#N#fMCYVN8@GPg-5FbQp|dPf zQB{>?aG)uK@eXs(7mUzg1%vuGKR*~2#~OwvFJFFPtbAl~XDm?8ItYeJ$Na%TjD=j= zn}W>c{WqU|7W<8Y$=Oa3zCJu=cA=H>Nh9cjak4AjY|x0l^@R62S^qC>TqaP8bqhWW z;Htp91NiH{z~G&l6OZ*?{`t$*8!zR48%}kSsLZM8%1iUGy0jE?t#j*mhq_&Uq|$32 zwxV3>YMut^k#qmX@dTl!Dn?v^V2+gAH(BI$VU79Sa4|cyJLAP=Kl3@K;P5*voYT$& zhlWcY=4ynSMK+eaF3?I@nJ8}&B-1O4x&DOp>yWpP=6`^}_g%ab4*!J=0E<`F2&{>U z_Dtdb*mQZ&4Usu5ao&&>7cwwY2W%74dX~GwiUC|gWg`qVx@*Je5=ByZ*V<(Gt>snU zZ=r8e6z6++pp9mGM@)ex618Gnxlu!3Kc9{T4Y2hX`Q3~YoUU{zO@Gx9SRe+pbOw#} zA9JN9iSG`8gqbpicRL+b+5_k?5wy5^iYpHf70F2qvoR@Rh1p#@9_L*^e9t^= z!Kq0#COlBVxyV0FZ1edx^YM$C(YeEkb8F_A5y!&%3T6_IMrL0sFW$@1AP?0DtB*WS z)qOKn+u-LQQ(ApL-1|L!gm~E+5@|2T%}KFp6z)z)N>phL`<^#heqsk@;|^lpU|)OU znrY)Po8M6hIHxLo+;b}CH*`L_cYb&KHI?bi%ck1R7H>Md8%_?vg}nAp>#$zGvx)U0 z9ONeZIijCcA#LDCaQ9F!=GGq(vcVUG1XFI6%3e<(vFCF2x-Zpq`kD_8Rd~WUo79ymtC#vC_C|` zQ+rVNrj*))CYE>kT&|}%T2aITi77D%g}nHUU$$+)xCCQIFRtL3`#jt`-sL%yur}U} z_|pzxW#{%QZbT`9C=|onziA0Su=v5fV$g9LAkIJrS3`ax5;X@bDOi5|%;pgniOg27{gfLCFV15LdE>3#>5#d2h}dpqQ~0;QRZ#GcqGbmpQ$gGYvJAZ^ z`$V2=+^3`@A{`F+7{L&$A8_?@=0ctst|{#ZD@QEo!UtUtjzUe_Kx;KOo`yA`mm5%v zd>pol8|;OVFESW30(tpH5a0rKQuo3!P7(=0=CdW{Cc)O7oG|FZ-Qm=&C(-)4TaWq4 zD!OIt4OkDUm6_oG+){{<8d}V#vHm&@0#Q1xW}V zGLC%Jn&_rwFZguyeN>@TXoe~-bPPXe@1W|Ey@Ep>+1L_0qd^`eBU@fRH2KtYm*o<=w7X9v^ zozbD%c$-pZnUa^Z{Oqotn5j<-S){Is73wmOY+)8}>DK4-NJ1_wtfkOc<>%pQO z{X)r%oI~A>ug5Jf827mh;(%0;(|zgErH2or#|Z_=@zHL%0e#et6xF1%Xr){*p88kc z(~3%0B*U*yDRjhfkF!j&qTV5#gN>((EB4z~w~)4?BBfs4Pbbc}NZtx;_SMz?sat@39ns?{Nr-%QRF!^g{-9Kb%(|Ai{;R2% zS~}l*Rp2>ki1#1_R2Lp)prr*Dt${N_cZL1!hxlOep8N|072Wg0JQe~^Le2oB`n-N3 z^4TNvl{hcT{|^M;zN#Cfct{OiQ-uDnhmw5pxc7I|2>PnC8MgDievnhKVPRqV$3#~? zUJSA_=4BOyY;ad4J7Pp2a0}q)eL>qJ#x3X5aDDJ#@@Tr@G0_(XPpklurHR@<5q#?G zy#|s$Q90DyRC;lhj@1QuW_xIVjpA#u<+-)B+n;0-=ae&VE-^QN&B*Ev3=`{q8B?EG zTKe|so|6Qi9Nr*#J>X$SA4}V6vUSILK!xk}TPG$$E1nK|_VxxiA95#|Fx4al=NXZ? z@oOyNK5dQMl0^9jad{$0J?IxZ|-rKq3`0b5=E*B11p0Tm0neqOyzuw z2*y8#)H*Tnc)IOLywm%3|l*=gTvjK2J7|4I%FZR2!-J zgOopW_z{G#Yq4m~Nv2;b`uCYizsS{hY`q6EcvthIp^M5vmLEa`Lr&h!lb?MVou4Jz zlJzWvHA`u&SA~bOch#%n^afVJ@c71_o)WQ$(S=vh_gaA)+|Z)~5=WVz_q9&E z+heewD*dgZ-c^APdR;wI^eN`df{lhkf$y89&_;%|OTzQ-d#}AS2aOFPZK{bbz+6a6 zkN=B{{eu@ev3u;NNW-_RAK2+KAk>2!A}A1hux{!i120oEG~4 zXqj-t94N?Hnt|eJv%nqwz5bvdOe0eO$5$iWA*dzM#4t;@-yoE%6WI$Wj>9G10l~|qaQ!A?Vh4McQy5oD~EKq_1nj}dxv$? z^{Ru|i;u4uB#H-W#CpV>vUc#(8RmL_nyF|%BTgMIEq=+_=5=|bj!$(@@wLem6!3m4 zVSNVxRZfLCYl6V@W9<=?!;9rt`818MGLOEOVju{9KR{6x<(YuH{^rw&VN-AqUNsx3 z%RA7Thx9PhTWVTj4(~vbTHk=Vqvvnt8KE~Ci~=StEYBJS&pTRr8wSmi;bP+8z~;kk zkC#Up!>SuW##t9Yw^VQo3{1lW!=-Cdl6mQ5TyRo*lkwN#-Fw|l+YFDrdF|R1WT{xb z>+QI_1mi>n6%2^-FuTefPq7L&HBmkSbNYT2ep2c~Ry_H)S_+t`mVGp^6Lsx$rp#)3 z*J-i*i#g23YQjC{m(()RgN;56t#gRk$&4Dq>6N3W$1NNaaT5htLJTfcX6s5-xoh?c z4d)-eSbzQXpj!a^cJHN?EyS8qvOY8?GTqrb^0vU|xm#$8NJSS%*!#f7GVS}Gx8V=` zIr=ZZ#W*~!)6B8P6*_ViSD4jBip^uTf#oH7>AT|ccF(N4cit})Q>xs|C#xq$I8@!>>_xGt!O?n)z*9| zOBj;?SMBmm@^1U<>(YH8sYT5=aMZYv{HNO57;Ni$TIUm>~zZiawqknhM} zP{4AusCvDVPf$bX5$(ev^%=T4gYRr7wX!Q>x+0NRTRtr89?-q;g)O9(Nbotqc&rka|vMM zg-4E)t_-IV8w3s(0c${b%Eq>#_w58rAAkhQsuq~v6nUJ1AVo0zwhRN8w;6)?%3A?n z{k#r70kR}So5y&54DVIrE^vzzUkAOyf8o~@VtCg_k3D5$y#T^@e4#vn?|w;WN5-sy zQXVu}v=D7+)_O8xV!wy76b_VQ6tK+;@9qnI``Qwd1IEcfA}(o%Ym)2iQo7ohBo>q-D&TCSdR%Twc;Lc@F zsWlel`S!2`Z}4pJGmY6J*k=oozYSK&P-w7ooIB_X3qm!JNVj+8H;wi&(|x81`wZ4< z+;q?2vN;u+u^Q-y0)fv4Ut)h7OqjewS8M->boTZeEgcg1vaNVKR?XSw;ku=V0)~E% z_Mdt!O;DLb{w_zVU3<)$X_jd;p!mn`cc-D7z0}R#-(o>9F+YaPmH|3Z0gpo zuW+M-am=71!GsHm{a0Y6j@sHFt!w~l8qs{fkX+NSO@#TT_mfuq9lAEn4ZOjwdNgv( zSjKh~87=b;KPD|Rz?Dj=^x)i{O`Zx0U+hrT7ZvsKFAA`s!=BR!7$tpCqDHcKQaWkf zQN+@;M^#zLM#Nx$5Wab5PS7C|%e^E0#kJ$7lU?!I2NqtD^#|CYUnaJBI(mS*wS^TH zp6wFXp{T8_2F9rPJjSyqp+*{LbW)zCqF!HpedG2 zC58>9(wz@A?>A3lwtHzN_i*FO9ixy=(5>53OGsTc2@sFDxbFMQ{`xB~I*g0Mda-WboK7wF#@?@5Kn+WMv5N}>C3~g*1nQyB zrEmP}GhJ*K?cWNulP>xpW+uoFq{msiMYR~GefS6!Dk0E>(7x%}E8;^fNE%lntfpoSa2Ndk~ z1f6Z|?U8~ydsBMA{BB8EA=k)bW=phfMGYz86Q^R;-{h8?TtUDp4u5S>Js8ydwkLLV z1NgRX{!sv6PY=9(HIYr;;7l#i9T3M1BS7qJW=d*jxvR|8H8z6=caS8ST~>!FR|_sK zeY5UgUMcWFFHn81iv^w>wuTx(>Hf9Y(M)0OS~r8Kkj3#+EwH*CU&ht?vJkgM&Z&*# zrmTH9Oi=wO%rsY=RPQI(%pIK7EsO%4om|QNU7>Gg>{hLZxiLid|%d~o# zwkWtt^G1W(enM*CT2^jpsf_cBp`O52j^2x^iYY>W*5}!mRRQ==b?22PxSbTnfp+Mo zecXvzI;)*uaYHWgrA_}G3c;sa(M|x0AGHWR3FlJ?RR9YcvcwGAL?)m}VC9FQ5dFd0 zqdT1$i0I-Uc4V`@iwFDYAkIKaF?bUU2(~^kNmE)Upw)e&E5o5H}%iMAKY!) zvWm9ZA(0C!J4{rr>kHI{t}eQddH_CBeZW9{a?w0pQ)hVVA7y4CM-U2o0^JEF-T~Jl zj9wLQSggx>r+@QNKtyC!6OB=#R;eFS2(-|!ZEH6SYYf|e5Bw+?GgqV0zPPo!4<_M| zyCp8rKJdqfhC>MS`?nI>RR-5W z7d_OV${4$>Qu}a<3g()|NK+6QzO*de?W8VB1%YHr}!nJ z7|?-?%=U~2dj6Ta31f$yS9D}i8odKr82w`W^Y-*o9cOF*9Kn=*AOihewdOk`H>DpT ziHer{$+&;|D-pg@>dWWk|N63Yf?hPwPk~pkGXmzFGOF}-SLUKq&5fr>!C~#7KR>LH z4=@%dx={R6rRCPHym)2)BcJXmWg{CxdRxbhl{NTXRXGjYn$HpUDZo`xJMagu%_5ZD z#cq34YGwa%PV~-KTvJP)pG@3ed3-y0Smfz6CY$vXHPM+Sa0d<8Us2|+7T-8ca$qke zwtf8eDtP$PWp#@~DkO3F!Xi8rw!HF@etUiY^$MeEHJKvenY*`O6Yz7q)EfpXEz4_c zxC&-&LYg>Oi3&H7?f-nsWRy;R%=YwM8C{7SifW`v(<+s~TN{~o$jo-0n&N=#!< zif9ofX2HV;v27Upc%hl1Vx78|R^d~cokkUp^1i!=M?*b5dH{E^+7)2==WJUkxIe!NW zBzGm~ha`j`r~wCc0ySd!)06RdD!eNHSZEocbBN9Xirc*`UGM%VTIRVZrL6K8NNeyJ z^_UpF!kXn)V+6eJ6SmAv@k(HzgzT2*{F4Y3VXhX&7W2?ogDp=A_1aALV~bkcd$K}-PHXSs(i?G8}<;^(8_ZuDC5dD+`Fa2ezM^Bf2VKa zdq*EocnS)YTUxmpy=BVa*jmkyYST+QC~!)oSrrI};bc~w=Juu%GW1Bwa3Ei!-B^FX zvaO9HiE6}{n8rp}u1?!v{JOFBLp37lp+jTPbOPC;J7Fezj^aTgp65LD&*nf7;c(TZ z_~#0h&#z*uMOMx{u6~Z|@e-q5n`peV;Xi-9E<>2z%xbT)=}nt4N|eLb!1Ef1dOS;L z_N)m0Cgzp@TuRP_mMG5+;)Mg2umA%Wi9vw75kXldj$bAH?=8=UtO5%`$78Ft8GioZ ziBiNnK+pNf;~;x@ks+L&G4BIs=9!Fca;wPQVX-8LAcahR+Y_T7JP*zS)M8Xs*ED0a z_9i9o#^YLzAC;n8V_TghjP}>umYprDsjG|qV11=#@_|U_&bWv6)I4)tyY3iqRk390 zB$M9{)I(K96M9RX3G_gvZ@t=QTjmoYH%59&d#$W;mX0pa13%hS7PAjYdjP3z;+aLn z)nP*c4i(4F7!08MUQ3=!_Rm%2xmZvl0AI@Y1ut!Q;YrPbO*vo~ zI3Pg=58sV&y#s5qL)H?H8tyH3WS;8*b*%RVUCRtJ5393Fa)zB<9E|e*1(GDxexfh7_LKLG-s&<};-l$yX(h*kJh_!2$XJ=IiT+*3KJwbB=<3+vog7vDC zMd!S)h4QnQXYApH2wm)_bFbB)K|5phy`yiMGrZMY|I+@@xD(|fJ3H0>0rr;HGdh&heuRXH zC~L;{vVgXY@;*y1r?NiYuf5xpd}Lq{Z~$$x7B*oJgDWG@|FhO5tq=d0VEa_Te~GcN z^a8OOUeCKkeL`2mMHxw#va<(o8&N6U7Z)=^vN?Z6fP$^n$L;IBy3<;4*IDKmZOz_A z-ZSzruh|rmPTDuHy5|-u`d9CnFTbx4S&yVw7{~Rg-7~|4w@2^p>~~RzMj@kxxXt9| z9zy}?rI0WS#_UF2Vns<9)(|$_pqdkm{51cXd9Q+c;_7>jfw^I6lclJ6E5&XZ_J3`M z{|7VvUz{23$;}szn8N5$Njlx3w{pazR{!Kd)~8JM6Zz+c5F83|aT0B7{=TY3Bqo}C zPBb+5eJwL#3(tCcY^XQqultGU9vRZaG~rMBFDKXveZQf~Xo|Rsaa!J9u%}{fc{D4h z9c9LUDm;q!VBFl}RspF_AePCp!rEUiNPn9!?Hz6IW82ZnQF5g!^A2Z-sg{^yK3Vql zq3d?LB7JuXGIuYxlFNMYrOO`jrQ$rWS+0%DEuR z&&=2DxDXa_N%)|jK|v=>vTa}x&|NlGm5Lt1Pp;H$(kw5WRh0{0Kf|{1T=+}u^^;v8 zD?QE?HEI}h(YD;mo%0Jmt|PKrPer|tIpONsk=CL!^F3SKXuGI>@bLP0I8Svvl6=bl zbhwAfR^jG0;m)#3#T>0;?5A?g8!eEHhbdA?dqF4PXOJaCcrs^@yrV8s?O;rO15>f$ zRDDoLEj^5Tc7q1t>7{>FFwhN(6DQrvmO%xdypq2$AB<<#d8^GgBHI5ndbVW#($wx_ zlFuT88&$0PbW5F!)Y?;{t!oCz51iEyUp(hQwo;?U8nr2|CAWBxwj3=pZ6pva67=$3 z_6R7|aPGezoG!ndITq)^pwel-9!U+88-~6)HuSX1g{C$8$FaY3}wcig%&jiVriMzkt!dCDicYAfC;pqLN;1Mr%xa||Z^)n_$t_!fmwI#Mv zkTh=v&qGnGn%&m+c+`i><(RJQD-lYJLj*jYxixCE6aHdE#N9g`6QwhKJKWiAsB_Or zSU7DhVlf5#tY&0=#BKYqbGue_IY8xqZSMb(g#5qW@MgwG1NC^)kX7HD8A;|y6Pp^> zpr$x*Ywi5L;GPu8fTnEhb?)8{!NwHoJWH?<0rOPOl7ZGE+~;GH zbN#j{2{%htE;x{nvxEowy_-=7cb+tG<=85$kCnerX3;AYP0ckHP ze!Are8@XE$w27h5aBT`;=`|o4CIuyLkaD7kRVkvZ{PA6^6aUO5)G+sHu z-i?8P;-0w}pGl`-Y^U5n|5~O;@T=0*Ua~dQkVrbv$eh)SO_YwSfnlg&wjzFR^l?3F zMyV4hu#b%O{Xn=!1+Kkn2Y>^pdi?O(j?bOA=qYlxoP78Jv4 zqX8n882knZ&yU~ w+Un^2F}$_UDmgDYPyYYBfoCqe5}C#md9tQ~x%|X$bN=5c6HDWgB?m2&+0|}YTJ=Z;#TPD1hmla1v!b5_9fIyX$5LJYLK;#3DKO(?^|90?Ip+i8R z$e4?W$V-Zd5X(E*nwVPwAs{5)gVf;FmHMz#wG<^0p1kvo{hCBfO5q#(L=$3L>Px(J;Xj5D@7b)D7>N?h-V1TSZ$n~V0?jP_nz*K z1jGdwA(?>PwEM?uv(Qc?5(o+Q&TY~lX7m*z$hM>)R(AmiQQS3#oXr7cH-^pzhb`jH z3EJfR?m^n*lJ58$>lGvSCxTGE(wGQq2@qx%La92$Ujlhho-^3Rg^(-0yC=CA97v+| zcN6HW`3g7GC%^4D+B(vAmt=AinIja*9XL^bhU1VfN;2^5%bnoZajTSWiGv*)zPh=_ z$yariFU+G~+&2K@ce55}FfxKcLGWYTU zf`|?S=B^>~9BL7aq6)ujkpYV9JGXb|Bqi8%{wr`+vc0+8XhWX-B15Za zM{=+y-bBhbda>My+SLL%F%%o#~K&-ea-uSEY@uB!l9*PXH0KZLqQ^bbbnsBLN1bgvxC42ccVBMvcz7**LDvx^-3gKTA~|aCc@;U_Q|R{@ zo%){$Y~J0jEV#im-E{2uJK7C@e%UgENr*Xvh>kFYKoF>pc@WPATQ`fEV#Y6 z0blzz(Z&tp0D2;Wb*LTHkL&>KyAtOEhli|#0i5ApwdM~^`4tHck|wGG zNyx4!EJ;kyc)|=DUpCf3rqB3{r`4*l+}|R#Tio|E+z~*et$KNR33{!!heO-7L3?9_ zzgf59wzC|8Sekp9p{Sd_VK)&3(fR`A>H-%6Qy=n@OMD4x&X4N|UYHm~)Xyyvg;M0O za)~ECU|XM49U?@SMjdg|52*~+3VuSL=_LZ55Zg;cZ#bMb3Om%fw}rWwe9-($s8{cZ z5fC%Tz}#mMD|!Oo3A;?(BJl*nuamS-0x$Z##8V1Ze2sUpq=ivP#`uZ>FNDI0siICL zcpZ@IBb-Q>qR^?|j>_wdKd*i*p7|m+^lj$x7CAd+%3JJDp_}X4Z1H#2pa15W{Ep3@^8i83 zjylyB`PlqQ`wgzHpW5pAmH8c#H__qe)+bvqWd6{fL))mNiH$LGFhdZ5fhmCt*{C3jm%|k?$^`pfo+a6r8Cbn*FJzYA}Wb;f4g zV%*Zo@P#2g+k*a^{<_&f;EHXub;ab`N6C1avGFNo!-mPTx@{sWe$M!m0Y=j_lgp2| z2|#7aVGU#p|}JSajhkaT6Ye zm8!PI)0v!Kr^sC386Z zVP$V4dAF(K`r>&Ci-A!{H+z`-w&5YEQ@&F@Pn-a!+g?+7n2}x`PhE%(SL1?{QA3!k z*52gG#q@lK&Vlac!n(nB)JFNpDx7#c=AcG5_on0#%2D#>^xpNtz&zdJZu*qoLihsr zLSu7UcqJ|sVXe`e2$3U^-!NwynqG}<;-Tsynjo8?pB`ut+6UPu>QVNQN}Jb)(-r;F z-Ph5VZ^^DrD;38U?NF2$`#FX>#y9LN%-AQ&Po0>)@x5fLC%==k_OG*J^Z?U_5m{}O$D=AVk7LIbtV{1kI z(VeVt#7wF$33epY%o@>iA723^rKb}{d0EU>8s4Ym+vIoUPf<-vC$enc8F%#6$3(~) zNI#Y4j(sg51(;2_kbFXshjEs3I>wcAiQwLT-fl|jGoq;w|4qC}^NzfO%E-BUOgilg zM}m%qw+2vS9wRmD)d?vtyQkE}Y;s<*4!2jmWc}?)ue-Uscoxs-i|y@vN+nZi>v-y?gI=V8>y(k-Zrl7&Udy zJPbzLbHutsH<&!Gbb4K@yAr!jR`5fcacnjGnWE^;wRl{%-)8FpL@8QhdE(UD%?@7T?xOCia094xTyF|`3+hyH^(s5KDnsU1A73eEWK!grw8yjXcra67Wo6Be8hEVUDLlW@+D zs)0%n))%%f-X31X?#@N<(6^ndGiWjh5W4$*T%(5=Q`IH%|vdk=fZOVv*E8ecLR^5lc|XODNJijH@b|Tz$1$(%c&`b z=8@*hg|+7EtD3cx&y72m$(N>rX9KlSRtg{Y_epP)6j2`KM9OokR7F!-JneC%|Ye`Jf5-4A02MMLEO4R=%b$F z=0k{%LB6|$+4@#4;(SCu<#V9?jFb=GD&>TmpNZfu>61W=_v+;lcAm1%=c5a~*6;w> z?DwcX;QAsCs4i(DBLhJT9wR`&LSjHbgGZ3yUkFG%2-qKE2nYZq{(r`bkkr4{KtVtR zn?u0-TB8Ym{r(dPeuANYy+TL7g@6aY!vH@6)1m%YjmVb{{l^&MBlsGGu#$+RB=}Xy z$N>nnaWu1a!iF#622UW`NoY7iKwwjRe?m$sk{>}pKz%b;R(DdDk>)Y7wPrLhwlxGY zx>?(OzYheT8xMGB4RkUfcC)s!apZC1C;hR42R!~h%|uH4V~LX`KdHKmJh6za1CW@L zk(rU1Q~-&Xn3&JO*n~$>^z|=r@H>7|GbblI9wsJNS64CH=n9e|~=A33N06 zb0-_eUu1y^Wcq%EiG`7w>3;%qGB^3ZfPKI66YK|FKeyxiels33qKX@$1GUW1d#Zc{-d=5NRhk+f)Efw5R#(8%5IQ* zDe%cJs?U2C&sP>a4+*U1s5!g!jZi)=$S^^^LO}G3gn(3h2!tRZC;2Q%T=g~7oOAFw zbJz3Lx1NX1DPGO@=Slp77N({bHS_Z&hnE6rjR_-WzGA*ea&MkW_`>|#2iToFOO4)8C{O=?fU>gN3h%!slsu9h zChsVgJt72_0uqDxUp~^?F&F8bxcd%-NaLi^W3fj}fjg{0-9 z7|b*jmi+gU$vf(F{Vyns_iar!3I2je|3!q*{F5bDjd?rMl0OCc#1=}~Erd%UNBl3^ z_(Tor#k&u5vXrm?oJ5rJy>AKhVyA!p`+bFAV6Ln&A?aUJ_&rCEU#5X`Yl{8XDkhQc zf+)Y7@8ZtJ^{=H({Qq*_tSK9pFJb>{l$Rt(A{jxWoYk*pvQ;Ez&j9ABsxD2K)-^dEHi!F*RK822aiaKCYFoYGGrA$t^nDv%%|vxuGBHx$CoAu2}l zyVgp)hTSl z8|9doB{^`$-X|>?|79FYQcg0eq8~t`;zRKa6s@K}!gdN+pKnK@DPkAT#JHGLXa0#N zIWZVdayJQj(%QzB9~Q*tvjigt5K zgGve_(ozx&C=XgwHK>iytBrVQ~$1E*d9%Bzlke4vMuj};&w_3 zS-k~mXRH+mO*@AR<Kn*gd2*Oapx0`YOmhe(* zF`uMqr1oZwwttd_5i5i|@h~@`Xsj1uV`&f?b{557T|Z0;%a1@*J1xHy`S^Ms8PCvF9YbiiKMQmsNK{ z!ktDUCG)4TgZD^m%SM#~8VAe~4;0@tO>xS|Fo_87_-}Aml+{VJFl7g!GO40a{Un@{ z`BfNGnEA*30<*@VGW9qdQ2&ENlxlzL&emIvQB4gO2S95weSMxm%N-k&2q6Drt+T`E zr{Xaq!qhSw==PfZ>5_hgi}z9xB@B2u$^fHk%@P^S><|4iQ3mx1qna{S#zEyLy!MA5 zD1Ng2Ka}~>WjH38G}7{d=n7@D005wueM0ru3@OzHr=c$>iLy31Mf~$~q&nU;m9H+; z93){DX@BBygz&*qo(6T)e>Q9z{$w50gvBkNKuH0jvAD}uT;NuwudSw!e*k>$s}ezw zlIw6}Thj{`1(;hg^BsK<`^jceaBvltc>a5&>yv@7*(J1$F-&+SCnXt=lD#ypjw-sI z1Bd>a;xeV;>^G9-1ra|CGJ-a?HH5kJ)D=j47IcUQ0E!f??OfH#Ns5#)pxXxIL@s&8 zy)WA)Q7zmFtSp;lO{$R;K;e9rKZ1Zi;@P0A8dA02eqYU~qB|v%N=q8_^+(ashXHcyz_ z{Ny#{7fTpjBi&)IA8ZHLJ$@+JL*p!LWO-dzJ9g!J)IHNe`SQW1QmnC|jVHuYF5DId zx|>xF8me)$@5KM`0TPII?_IMxpQrui1AcQzKiIMJ4q`m|#ux}k&6q*`QTidBnM`6D zaq~hst6$4~T~T*CIYc#-B6grrd4~rQGw8?N(($0=<^4ZJD{;mu(*mh3yR+1TaAMV9 zXhcZDSe+T`fDSoBKNS}e!;VS_S?)mlIp8<5`Aw!j)B#aET?`PkmII5vUrI*{YNF+G zu?f;uOgyj<&NO<>qk~irY4kIu3O(@)0Qg-*rCb9PIOS!`brl+7;kzzi*_G|JvUpPp zLSm^Y<_OmFmEBI3y7hnR?hYc1&odPtRHMJ;9^}k^4jda!V{uT!Dl_O+eX%vTpEr6i zuj16%e{uhp-T2W$?Z-NYVd2o>HTL&UWR+h=wuahM(REn?^U2g?UK1%UKJ^=$5|#Z$ zrXS3OT24Q_7_Oh+PM&(b;<<%Lw+RT~Vqx-?V*n{M`|Gkl2Q>!tFL@BdKpvK+J;6D~ z`Yorp`2iTP!t~t+WvK_1sOs0o8@6-X zkWG-@u>!UuZ*P~Ydr{ek#HDb`mtTFaaLAAjy~ z4gzP5JG(KPUcW`EzZ&1q*iHbcKK1fNjx(y4qX-*deXV=CpH{idaO|XAF+Xoj+0Uel z;Rkz#&S1LPrQ;7Y5~4Hcd4N1cJR}nV>+2^|^Fb#-dyj8%pFT06mXiN4;FqI_Fig#8N!gK^@a<2d7L{BQgjb^A&3-i+yWf@^tB4z^LZZew ztYV`w2Bj#iQao0UTDe};4waxANwW@V>i&lim!GD$E4d{<5B&#MiIFIDSj7q!a0p8O zVASh;znFoBC9pBCA9@ZL8<;o5ZVTD`;wD(oH7YPQ{JZ^hKqd2xxdmD&9%B<2>gA2B zoc_AE<|n$s*@|usO2c6yejj0eaIo#E4A|Jj&sNt5e+w-CrRU@DP?#X(M!G~GV5$g3 z4ada}kNs4?rOA$2Y%)${`hCp6`Ev6T|M%)wNC)F((OizVRy0W^`m=#9hEdRZZd*-m zyhWv=Qmhx1M@`{CPiND2q>0VJr3H;S5drcaF6=i8|ASZL@{5RBv=CG5v{7t{#*(ui zgm!TgWpv%^`5H^*1sEkT)fbnVDkwXCSsFRaTa#Eoi9-rrUJW^GExQOH)*&V-w&2?$ z_IvF-yfk+4Sd;z<9mn+>8!d`iN-mc_lEm-4$hbbD|D{}ibKC!UOHK~?60M=${=KwK zG}$27Eho{_&`0N9fch}j+Zjt)LH)8ekfb~cWZ`LS-=nWgK06b(%XZOvRi zQM^EuX=0ZA{2oHD#yBI7! zzX!a(=2gGOa!^#@*c!2?9iML$6>%DpRmCcHlSQ}q%AmiX!l_SfO8$?~gXJfdy&b2L zW22D(X)TYru6e!@r!mT3s;-I^TErv;+Qv$K(6Gv?N+?_n!KtRwL8 z-u{FPlmy#}fxqG3vX%ehQJy7~wc-HKPByNtkoSGzv#_21WRRkw4p!=~q!u!??d;A8 zH&%zbhpQjeA~bz&yi=!@#&;p)lcD>*T_V<4gFXZf;V)178oX=Nv7yyJa3GHj>YlZq zf@?x*K7S~r>%&jyxP$0-56VBOy)Ro*rq0CMfT7_JYL_Pgos4{jy4KST*(;Dx6aP<0 zOa+I;Po_O|{}iTF5uKz515b`?-IU;-`BnW5C*_q7=)?;i6|@!z6ms|jh`*bB>+TR z0w*Z9FA0|BM8-bfNrowoWZJGUkv42h5k%1ru9Z|tc*hrOMgh~hIVcuH_vSlq@-6a1#;*;tmz1*} z0OKq=-;O7KI;wY6;9gr-4CUBQuKbYzlM|P{k}>(ilKyZB(J^h<>u?A@f5=M$3#to{ zVD1V#h)&sms?YtMnDmw>62(kh{kJ~}{ZA$OzZpn)gN+UFVA{+3zghj;8b1#au$rE4 zD4f3j2j%&Lm_IpBeEmHdUZ;^9{`a+in%Vi@tDHy@AH@IHO=bA;*tn`Y&!ixWxTQ3JyElW(sFLUE;WwhQ%#iUoW z&#S%*ln6wroUpBvsq9u&KwHD<{e1UHlv;HZWMCE%K1xkBP(3HbX?0nIufrq}-PW>m z8I$iVE|#5LVX=EaPQwwJKo671-W!*L`sO}@;Py1DuBxazH1(6i)?$5eR(1|R!@Zt< zwyCoFv}hQ&>^^^3PSE|ZS!V2YbV@=-3y2Olc5vV4Nk;D;h9TrRTCSobDI*E`6sb-Ae{Q?`Z_at9W^F~I?FNLP?7n&^I7wKGu?bh!=DJeHk)-OK! ze5>mAvUH(YkGlXpG6rN|KwFxJfG21^Lo8k{Oh;@nS2=D0T@*lmtA?{^sQb>M@v!Tn zXIGNBi4)P7%Zz-#0em`iuGKQ>g}je5g^X5hyvYuFh1Wb14ed*9HL>^9i#LjT;xIu` zn5ja18wQvUlo~>6P~!u3UD1(#V5i>Ov!a`aY4b)=QSl9tDVvW^jwkusNqnenb8vD% zlw!Gf_~n{zZCc}WZ`G3OL-gv6Yh?t}^_b&DOTFW&c@JPyb+9O1d@+$>v3S8Mb;BFu ziBK`~L*9bL(t?`c7u^an$>@Aiyb6(q;Oq!Lt^d-pcHC`Slhd5KwdDwlF6|@)kZ{v`%8_cSWBR1D zhClIE{}vOqx}gyc(~Zo-wFW6tPnlGY@zQ2WJ`HVWMwX|>>=QQMT5qZdp#06Da6+R+ zOhKh<*BeZUR1}^W;O@dc-`KpoNS%P1hnJYtzo`&--*cXS$bN+)nGC* zm-j67Cj2>_+M`V(=wKQ8cJ1L*ykWyW3(gS5$*Hwua$orRdNlZc5&5~G*GkUmp4Q{i z?X#0FR1e2Wx1tz(<6X5MapGnUJj?HoJupy8WuQzKPw;VhyhA|i6}BdQW0!OCNz?Fa z&SPnMib!(%MP>1iPPuO`m+>JtG0)Rm#;4x*r>%!13pH&RkPX+{l=cn|f*5t)AajO< zh63jsoSn7OdHPd4aGhZULag$SuwbihJS3-{ngUKs0*Yt#_;0y^Kno);v8c$)Vvvs0 zvOa7^$y&pE0a)mwf}365G-OIDGLU4)jmG2)yLmcC?B0!ecv6{93!Ox~dAZtNA-2qg zd0El|y3gkUBYLS^x_GJ@?d}E_cRWgN1*5ZohE4cvyr$d8Vo&s5sWhf{v;3kD$RS#j zl4(y=@V_CaV_DFETxivNJk7aB~4&7uL3}6R`hXoYYs^g=IfXh8I z%dLULzI`x&!6)ystW9r~*oKKU6q{e4Lk6EKhGYQZtY@|hj>d~+9P7`&l#e!;clgfk ze64tovOTFwNiZg-YCFr|<9_Qnom*5bO6KCF<9xjTh*<3Qxy743)*Tg*oX}6Xr%pr@ z1PkhKh|0=na5zR6{V0@RZPwk<2CGGzoT>sk0+$z(p+rq`u6aG z#@69vL7em+j&9zcl7}y6npWO!9q5LvrvrBXH03bp#=FAEw2W3-*F`69~np4J-U8I6rZMANU2q({q)h7aK5&%cu%=No2=dNIRz^eY6UA$ zeK>ql%!{Wgq_ADdn8Ls+rfvA)KF*dOVLVi={hV@n(%4L85&CKB<5^?6oBZqM z!)T@bmilmrApIic@zFvrI`^ef$^Ml=d<6zo=G|S6*$d^}=#O4rGO6HhFSwJ}7D#7P z4N6HTeCWU->dko;npO2}bH#RQ@uTBXX|jWY zck*DqfSUotBM3sDUu&s+?wsIVWDF~KhZBKop$8A7Qs4YE&H!2Wew1!96%V$c`Z78fWD;$QeVzjja6F3v3S(SRNtN4 zOmzAE`#9}=J=bMK@mZTW&iw@@e3yM>+Rnk42y}TDkJG}glkTZdhU^^r>?bI68B{1+ zHahThGC27HB=ladNr!H3uBShTs6}Pr$jrI6>X^)LE|Y2wy?d+YRS##gch(+WJsZ=C zs#R-L+Vrqas_@KjPyS$)`n^c{ZThl{LCfP6gZp+wYgt6SQY&I?;o(S=mp4~MP%v6I zZ10earSbCKWpNcJz4cN7);d1qTUz9k|N?+X6{uz&xgUjeG7= z#4D(3N#eO1VyZE&wtx!ZX@_ptfouhvxa2%-t8OXAmk-pptF*f2tSR3Rzi2k`T!?;r zB>{D8HY;KxKPXuvH~|5O9Gfm66fh7%Z)6`HbWmg6Q3A3&d)lg9qpKU_APT~YkLwd$ zcvR%6wV>3|1*gT7r%L6NxNamWyVL zwQPMB3s4)no;UfG6imW-s}K1r7InDq7Vtsn?a8;X%wV4)a~uBJ1JULWYwn+8WS8?b zDoy-}=1O!PCYUJ?#;csn7l4uMW+Ms?i8WCt(XVLwXUW`orv^S-7k{wp#=iYks{)Tb#{Yg6 zSPIxZI*=&=3P0rU49hrq*la#|+oS*|VQ$~DB5xd2y~m=Q=(0!WK0DQ)dXAh$zUWDz zU=lz{>+?t#otO&D4))PNO_FlS#J(tBpcxV*20e?S)85+cn7<%&X>!`)5Ylu#QE7sA zv5q0YR~t~ASf-~tFGmBZ22c)?)754?qj+r7rD3EmyMRw&R%plvxrHTG$MS1&_MX(I zX`1wiWCuA;qvA_4)9D@y@@KiI|$ujl<7S^5(({#BAK6&(iJW* znro1n%zswK+;tF(_3Ud=#-Wa5Y6pvIh$;R-))TmROZXGya!aYzIV(xI^TvtZB8T_E z2!nVV5{~hFXxLbA^>fT)+<9=m2Kfk6XuH#rnw&Po10blr69!&bOul76QchTwX=B`I zjk}TG?8oNd6QG=K3;lGNO#Ln$DjhC0ycw5IUHU5;?5+l==30lO$r=qZI-e_4ALno% zD7vCoDq;;*$&0{o9H}XQ0*qA~zLiInHHmpYLw`-PMYQFt&2)L|&9iQBB5W)aUo$GD z)2g6Bp9->1C(b`2+9`4*pL^-%3Ph%p6Z_2tpfebI2Ji58O2@$O>j27dArbAIS$aRU$R zB-7dHu?M^z;W2R+?Y=zH2Ro7RS|fbiul2<*Xz8Qf3%QVsusdm^#^LKs)j^(~2k3F5 zW6xIa>86bs;Jx*zP`6dASveGlmTJFA$~;^uwBnCb<)x|GOjGE#rdS~30%5As+=ex| z%+0DRdwr@4^tcXYY$p&iqQgwJ5W00AwvNLmyKM!>n-e#WZpZI~KaGw?TC?xW5?X5& zY|a53VzpkE>C^*jO$owolph5~WU=!+SYtmPA184!3NAP0rCF#O%O;Ye`knmP`|EAd?;Ki5A^Jia8h4moszk&(tYY}O=U>#@s z%*{7!Q&1Y<3U@!cUyufE39y^T4i~*?35wa6&V$UnsIuCtpUD;8VTA>BAvfR<)&S zb+uSUR#R0tXLD*~x_fxj8rxRs<}y+KuG$;<3(EyrCEw6^d%obH<=6PV#r$FqK|Cos z6;uCZT@|WNi!oM{r4_;od_4(Z)JUHjfY?OLm-nv+oKXE2tmVQgE=CFe)9p}X_b$mZ#n02jEYdxRe zc&0j>t8^$_;j^i#QJgyL;VieLtp$~n-|d-u%D}`FUlHBQK$w%AE4Aq@E;*d}T5@-Y zf4!|_zruNtm81UAK;Gjy{Gj!o<1^cb11H>MEjI6$hpneK4KH7(;1AZeGSX?cnig`S zyu0T2wRJm_Ov+<<@n$u{`ZfMOO%1!A z+pOd#oY9LBrvirgi(jg~a2Bcb*i0Vc#QD^eY8kvPbP=3%$1(m|;;Cm@lI6Tf7(G^2 zu9CJl+aihW!=h9@c3a2*P1@-pSl6O4i>9jktU$N(?kP-DaCjQ2b;DVe_MnYcqxOc^ zk%v5gaGeAh+w9a~PdUxU0RM>=JJ|i3C6<^X50}&at_uB0UY9gjFI)ar?8iyqPcrJxWZ_?>9LuO}ByUHnTeY zA;_`1-IUX<=J~N$Zo6zt4Goh65W!#OD5*oTF`?$4Y`L=^@(F1=32KI*?}O$oTjTw` zS}uA+wyto{n?Eq>H1yV3&t@ryg-uZ%TUL@E>Ez}EiftELMq7P+%)iNdVU=oag3F=P zz|gGQ@=eJChuaOxXMk<9iM>tZj=61{+verZ%U~}pI4DN zNhsX6IHLu@a_{xmspJMqR2KVt=?JUzTuu|AwN!h#hUX06G;T2uJ=mzF;lJG7CwNRb z&)Tk>j~X1g?asZm&6RpBOSa9tm6cuxUsDq4KD=m6XPoe~d+sW$m>u}msCDX_RI#Ax z)tu>J?0r%^Z@{Vx-`)7>+6R2^Y@U7r3Ut%Iv@P+AKam%xo6xHQwKABmD{*)y50H!tRUGnmgqtsfc@yi0gj%5FI(K&(v!P6Ya= z4)5d^QZCZb09X6t_C3A%9XADNUQ1<1;97R=0Y?xaaj66TX3>Uk>a>NhVdq1-qx?|) z+43fIJ5lomJxBUs?Q_FaK0S@=wlt-K+eLWQ+!2(=d0_7JWXQwS3>B;MoSpgNr*eYz z4^hxX_m`UtF`I?|5liEL%GleX`+4okbU zA_Gjb*OQ*%2c(7x;8@I7J3Csc2(B#EH=SMk%a80kK2N{ijx8T0o^5V{jW-pzR>dwx zw`pSecye0VqY;DS;;+Ihm?xPmhVNg>vT6{y;U`6j+AOCuR((AgM_>_c$o5r@ot)a)3Rgb}SfQIqP*Orn^6DD1arDhn2A4_S zg%>=(ASYSh6a(YIQ%w6Ox&B4Cf(z%LKl<^5+ZUPpuCrghHzo)@yy7?@ZQk~HKAyz9 z9VowVfSWKk5wPRF_;xnTM`f`(jV<6bkuWMN^R@wTfh(5c=~~^xJWNSr)thF+fV=Y) zrn8LZAVZWHCh53F#GO|0g+zk!k_h}cshrd`OV?vY?fZC~dB)m~0~KdGwd^_wzvw>p z3Bn+<<*NPnlMi!VBQ!30D+*mDX^Pz+vY2oqE;g%-Zl=A&q!*mjykHs3^n5NygB@}d zpWtav3@y*C@3=2Kt^^BvNqP~~JTJQI;-+$MI0}3AG3ph!uX}#Wt{11OCbs z^W;i(`vP~H)=tJ26vYdM3DnLVH;>(-(&iiJ2H!C z?nS9l7dVI}gfz8BlCQ9kMzd6s^8nD{n6Dh<1OA z#^42=H?+$Vby8@$=m^(HnC7^rpTO#nzG;X|&E9&~1?8@%aU>0g>$t$dx_pwRE;ip{ zlg;NnP=9i2en=CP%?Q~=&G5 z5A)C(hxwbS(=<43(;Ux>2p=Ot&08&1CQ$2~ldAknC}znw_e5z?Z)KocdBX)Q3!XhD zUFyb75jD=9YqA}M=L$wkXIsI#uQl`mM$D@4wSB_;~Y}dt<+y}kMrS#Bqzl!JS zUFbI2L+O{95ubqct7k%A;auWiYMQ+y$LiTH1 zI-K~}_q{1wd&xssBVW~W=)*QhY$-^%Xej^WAscVt>*AEeb1%%QZS*|*1>RwN+lc-7 ztIooU&e}?5=jls_IEtw7%)!_ZQew z^-4Xiv)x7u*_nz^&1)s%*(yCHHX6O$wF2pL9tUxPIvga%%|sEme$`?+kMST-zfR1} z0PvE}hK2xk$m3nI^J%j`=TalO*S(X@m6XrDDK6^;yVvtFor^(wmH7E5Pc~d2#InJx zrbs6ceKhQsaUGz{zB=njMqjV8w5esBuQH6fJC8e^i;mLce*~XAUf5q7@M&Pn+Z%E- z(Svoq7|v-fOjWA&HKT?<*loQm;4H?2E$~I&UD7YYYfbvpa(r%RS4+CbW2a8&whcWT zBzwHKYb5<_k-)~0!c2SwEpSJxho>as(E5wGP^!vgn(5HxLC-4wZf*SahU$~Ye!<6K zO?8YzTb8?_k_6^{M`5~+h_7hwVYdse+xd`2GK=|#F1a5UJ=Nd&+$tS7J{~7;I>wRA ztqw4?YEPEv(1l_%U{GUBWCa!~Ez?6|rKAUEtT!IEj5Vgtx@`lA14_tpCDLL_s$v7@ zSm$c(-`^cAEYcgX+HCG>GG%6uBI0^Hloo#?Sg6#P^g2&O;aSavw00D9#txC!6ZC4_ z_39L1GMcNiSH(>~3%s=697?gN3$J5t_Mq6r=&&EvoK`D`F>?i4bu?e%!gC~$q&J|tSyJTj-JPlJP zbt2@PR+&aL=iL9Q);-53!&(9T%G_v=DPintxFHRV>>Z%y2`ou=g zUe;J!0RtDVPoK<5Xs+OyvP(P1a|mu#)MWC|WPvxn(u$a`HO<@UU2|1s))zvlJ_;k2 z5#4wND2Cm)s&O{xV*fV6o9(i$+emu zV-mLy8!>UV!C`azac}ITxuQ%t#e^UH4>@M+QwiKsuOaO8D)B|vuT^i*2= zwH6UE>b*gT7ZW6UZbeLZ=mhsigiuw|eDpG?2}__%)%EUf8LerBMMPE8N!P1pd zFNm5vw)C%?loCYy#54Vgu`v-lI{Ti1eP&Iz^4)o|hUUmooLF>CS(LY4y6z1@9iUJ7 zduRIvG9~@8^8W7N&qDaXqU4;(XuaQ>Bc}7RBg#0$IrNWj#~KylPY0#g-F?2KE6-P5 znW#}qiXwZ(H=Aa56MbysBMqeTDs(M$83E(}@&=JhPC!;1ai+chMXcsm_zMgalTba4I|qQ*$i4eV4063E{4OW%B}C&<0g)f7;gR8H~d>6-TO z?J5@3h8!UCvsQc@vgW%Tx#IMF#S?4N3}Zcq2;Cq>CSuV0A++Y`!m-=^0{Zyg{}dZIR#*02;f4I!C%65#9fzn8Qm-& zv>q3=@jOW>=rcN%cDkK8i9X$li5*2bv8UxtIDReDBG1f?R*1QbM43LUj9DlPHnj*% zH~`;-B)gF*e*_-GWeX3Ne)Lp=TyX0BdTM+tQicEe2U9|EPr8!8>AfVrDaEuOsY8eLTZ(!sK+ud8b(SFc#&T0jUB9z1<3*R~?KkJ8vh;z`@ut-Htz*d2Q-t7k$}^T^KrClQqb-RF%K*(MEUlERD3pF*qGs5 z^^Ry=J_HD6a)sbk)>Vt=x$-z|5$C43Bx=7o?s6Dc5SKK`aZSQ@BmwuacPs-m8Oi4+ z%q?Z>>+6N<Au9;cc!q(071p_^x2454%m4O+l@Dcub@`%5RJCWd{ z>j3b@Hi9PfD zdS|X=YgfMjm(_B_VgLvs?cZJzeZaTUK@=lUrkDw9lJIzPv3c`##_(B8Dsy+gac(HP zHRV{-mOThgyWgx{0`*g^LJDDTZa?XuVekY|-IZpss!$Ndz3}6*Kj@^mqQ(F75e*sq zGyqxMJP7Tu{rq!3o?0qjyQ)B2)E5Z53LyT8@#$RPx1One|%oMo#~RGwv)iAHDcBA z-OUj8vQOTVpHz0ZK9a6Z1oxMv670K*Z$7ms6ePEMwDqd&Onl>S@|a)&+f?Gpq!4E} zr`jI`;7WG1D};2c)zr+Jc(`)&(}%qgoM=46I;~yh3sxbto63MCvYBcAfQIZEy2y$Z zwQyxozHWnRBhScfpU3acVPHmNIZgYjH&ZE(=l&NeOZ<;80B+pqpo;{}iFbgxIbRdY9hE$2Q#g#i7sDw@&ixxc%Fc zB2yI1zN`HCa`x{b@(pKJ`25iiS()b$X5~9TQ4crGGYG~jV2y`+TnwPE4#3UzX(3^ z{{i4YAHM~+o7BYg1IltuD2b&lM7ppD*H+abTG0Mz7CNjhx2Gx|u;8Nw)>_=^Unpk4 zN*fdyAov)Zq3YfF%0dD zpPbfV^f~7?+_pW@+aKIlBz?(vw?F8QJgO`YV$kgL5&iA{0G|2d%IX&sgs_qwzYWxV z=>ZGFtY-4@j0upl^;Jf84^{#3` zTOUehe78&~Wev8XpkI&o7WIl2^o2+D?V=B@{(*f^&5mn*?Qu=K`}$~WwVN1ZdCi28 z9yx~&)_qo3PWn_SHsZVKL}k%!c-6DTdjci?>8hV;%6m#tT;~Z3bN~718}qcik2b{o zUO>I$CU7l-{>7E!M+EehVe#RqkLJo*YW1>yPNS9L`2rQ+6ufi4RPVKEF?XK&c0peo z&l{HdV0{h!ZT+2QUXT4#j_MQ87DA~D@0Y$FbtJwAAw8`PeEgQ;IWwk%P{)u!~%4+y#gLo;S!ZkarS>am)(nEc#U_v4qiRN25 zntVcCgL^UE$-^bmWMjf2)U`N=Hqf*vyMD($7l;V z;|w?t>tv>&j?7e+3?N=En#}m|-f!EzPu0^_Rzi1gmyOF7$nMSSrB$bHYJBH7OL57W z=as*GQku2)S-QnJTmvggd$(^?E?!0ml#pO432)H_w?8OLlqCkIyRcXO^h?Pw29PJK ziDzv=e9>p`%i4v3b;Ry18<16iU<_)Kp=<-IIiJ7wl&n(YObwOGzLBS0D7}=GCI}{z zCtrVuy!+&X0cm(0VB!+xhf5#a-{w_Il=4%$a>q7MI)}MvFw(IzjHO+r*lI4makJ^N z`16^TwUL3xonl+m!eYTI@BgPfdi`XtTL=h`<$luCeS^anZ~Rxe2%MuPp$E%2rKF_Y z3E_Ev{`yl=kmn!wLguhk1!X8-ZQ^5zG}bCB^DWi$7^^IeHEHP^U+LIufQ&xl63gOy zK*8g9uu@rEn)&pfp^apvYPoP6H7=qY@Qkj!{~xv`FkHNT$#?1<|3EgcT%xRv^^qRR zz1`pw)HrxmJ~{(fQzfvTOF`u2ySsb;uz;|^<_2IIJ>cSrZ_ z>N(*V%eNT%FxO4=_h)_9`xaW(O*<>a>PyBB3+OjESvZgDy6=@}?N2PfA17P$IMVv9 z-^g*&=a>`hB=S|=_1P=`lI`nPS@RNO&%ef2@*Jb~zj*V%u5L`@G4FE8U60s#;rj_* zFXn&rrW78|llDrv6>igpo;<~>PwfIbcH(tEj$|cWxp(&>#*-bb3Z_4iA4xYzb{<*5V;URt)USt@hhd`?-MJS?M5zgT*! zz6r_}j=cH!Z=|(y!>8rsOK-Ay>#%UQaOa1%@GJF<)-Rc7x%Wf+r^|AbvJUp@BfqlU zv<@0HNFIDJygr9p8O}QEEZenGyy|P6560%cSh~(~8@E}FqhVaMcl%ayuBvzOZG^h; z)+uA;>c?KR6?OHs<~G{CKE{i$K4qj`$74Jm3pZD*xe_Q`VJ=E9$j2fqESQCtfKU?6 zxcwsZPPSAY7?yc}HF6Cb52tq1`j*fM8Ai!-XrQP|ZCIQXF6@ z8to#U53CE{{Eye%iV>Hvc+B&e{fKzX!!~W&RE|IXcscgiV=a$Xu)>p3LE1DG^FTD&THh9Wy(x{bxT zUXL=H(*M*OgV>noL+$Tg`<={x=>apc zo*i%r20Tu@Ah5zgge&fQ!j4x`TqJ+L^#VZ|v|xY$tDW${aq880AN_&`C|WUp8|XZR za;E}UNM7!cLgf!vB&K=DZ&qxOX}4TxYp6q+#Z-(zIh>s|Ou(j9tvbLUdpHVLPK726 z#Oh8FI*86ZLfwOT4if|)FI;5@Vc`D(wNhJasY40GP2s7R8a&qWZ#CKbnc)@<$^|Gd zCIFyZQ`3{)x*U4jykV|A;fk>5!cbJw*P7eQ45cYdrnq&2&G_(}Y+8VU%b4G)iFQl^ zYk^;CD9N0pCW<IX$>rWjW@gxMy)52US-bKg{8@J2eL;2Rn z29A3v<+Pd*_|rDuODGj-g(nOondidEf17d-hCeOs)W=D*3Qw5q{n@|Y61=MrFaclf zegz+6uza;*%TAr0wT1E-lx83kj_&KK@PtV_)2-XvO5v?0B-ZyWUS)zJjGhcdno#gG zpDkRvTr}orrDQkI$`V!;o}c}lry2NI%4PokcB)CpJDz^WQq(}2n9y6Pe#bvQ`^2cS zh_pV4Dw8lTI`=r=#5|(Etz1ROEiZCi*mmnsDh{Arn}6egYZyFORj zTc>+RC<{FE$voF$oU0T*v{D@E$UD?CHW{NG{A&3I`P0>BSp99VMH_G4I}~fR!V|2l zpq_Fnbt7|g1slo~jzrS7Cvy9PdyTX&iEHB7{wz^_G$@1MuTRI;s=f0KFr$vt^*8!) zu#^Vrp%hZg=ZrA8H`4-T;JcrDUny1lf0G-Oi!-NB@pVk>o{@405%9_vrvH+C=UTr;oAECw}!gZ@>-bXz5eX1W~Es*=* zna6^XKJkL73l#4xE;c52!mI6sY1eb%U_x{xm#Ui{vUU{+<dNuz14W$L|O912Re%9HkSLrx5X1byVz3vLIzNJ!t=ZH znOT-{7VZ;nhF*N|cAU25tXqC#TgbvB@n3E}+dmFCSLCbd&&loonJF#Xcd@R)SRf|* zYf7My^~wMIW0O!4=pUiN)48|(*8hxDL7}*3zRMey&bRKNS(}cQ@>;1H+cxFHXCGJY z{r+PGwNnav*$o;6yt6v4=?=i^nxgS|J?cCckTY{8fDP~F82O>-B|&PyHqhfrLOy4iPrwa z`up($9cle`_AU3>Nulj{@bYm=nWn%B!#u~__g_(CM;};HN;trV!kRd~WY)iD##(U+=)@?XicJFl>h(cWGB%ZFv?_$hW+ zs2wPy3jV4DiqNLQwhj+xi+1_pYbObwiahci z)xw?l1DBp=kELIJ(r|lR!n(-iUo_+Tm;=B)ErX^#_HgAAa~jRm$Epef9o(jvtmW) z@yvMXWi;*BS6UgyYGAZw#m7$t6miem?`7?rSET>M8>A%vK)^Y#1GJ}gt(O6Pl`sBr zqgpIeXcZHB75g?WmXVkL(K^m;+Ey9a8DJT!(f1J#y^I+%W(fM(a8KB$Panz2$+40L zlXmUeS$`!ZCDt>>I|plCM}qij;ySt${CHqS3+A*YPo69tJ9Z2hq|DFHm-+MO%L^~O zAn(2Ro~yDGiVpK%T6`v*@%b7orA7Hc3P)zFZlnDjkZnJF8ldcC#w$L&U%q|rF7?Cm zPfVNV-S&TY_i@*}%gah+E{SW{()axz!8+l!b6&PPa+aIEqfXJM5^jstY^Hdb z?k-mq@xo8vF{6gH|IR=E5Txvc3-N*A93;c)Cesx2+fV$?Kgi+84J)oNsAI~84I5B3S`Yg|ThwC3_nwX?9uYcA> zQ42n%k#;14!6E0Q4JI~pI%vrC#9$=pCUe|Rl;VS zN#~78==Y7XV4$R?WV)KjH5GB3`9Ns^7HYIqrx+PaTd4C$#O?WNP|0i$rz_<+FJ&i` z|4d~aMa$Ew-Ed>u04ofLcF|E0v9s0;nx^~7jkIj3Dwrw}l ztE>HJ`;zf&f7UC7Y%Nes(gH*-!s~_t_dmE4U z%}&g*W4aQ1Us)N#U}z}8d02vb*>Dev6{b+yGyC5h9k6Ybg zu5^WkJ*S|JG6#oE#U>pW%1~y18&*->1Z6-w12L7~QHSWd3U!Zu)^1kzw8A>lz<{!; z?1V5a$OrF(uFG`z6r-PyHs*=<=jc-b+rPa#$1VrnBUnhQDOt1KuiUd&Sq;*%TK(>{ z=zb6CWG~BAI&Q4nXzRCF^Nr{A4RbQ>o=_^gEaqn`=zdmBT#V3+v_Vo-ut7& zoFv7we*DMh1}QrsFHClRsg!lXkx0hQMxJ(oo#f2_{y9L|NuR(Z@?vEHOAD+>g(I=t z53CZw%9SYx_w1Afv!>fYZVM>~DJw@>R?Pb>XdDpZk>-1n+pw|VxhApPpBOz$-(-Tx$qR{p|pnI2Ly@)P{?x%#!z7$3xekcYyDcbZrvKy*eJ$StDA(= zc|@|U>2H7Zv)t-de0zqwNFtK^Idzy{`2-X0&i*X=1hA-I+Y)WxtG3HoU4F6te!S9; zq<(|qO|v%b?WErO*B@I*>*!vY_jvZlf+EK;0MEcw zc0$rSH?Fa)W9n>Lcj}>c1y=QyXhvee2a}4(8E@$ z!Z$6(;GBXvHFJyx-=j4pi89Z3@Zdq2GiQ!G_uO;x$tR!4u3i3b65M;^#*HnDPgAE( zl@m`qQD6niDe=;&aHfmnp+kq-!BB#!PU$LMdKvvEUT^1Hl(#2H*-4*-hpDB?fXwz~ z{)JikoY%Il^)gm}_JXbKq|3N}^K!}CxlSKS_v8HEOm<)#cA&%rk5MnZ^pd>&_S=?w zLi3s8T^c-iuv~JB{{KzN#Z za9yVbKeDbPrzqELZ>u1$>RQM4Z?hY<2yiX8;v?S*6@QHA_lonCE0PF)gwf~Zer3V_ z?ShKJDX1X!Zdhn*Pr~(Iq6$oqn=0ZFj?*PpSGi1AUb8#~1M%^S`V*7C5a(|_9%V7p#3ZZNL?*0rpw5a!qNxueNk5Xf z7mx9OTtV?fE0TqiMzr;TX~6)ie_^%DO`z~}PL*3IOsb+jMm+<8^}22@7B}3|afW@T z-W@kZI>duzyw*z57_MdEb6!iSdIz*<1u=c>+{V%tI@5~e8199R@83O=OYFE9AbMR{ zQS=g6(=#mwLXpF1eZ{=CW#a|`6XCGLc}D!ZbPru5IDg z$`n)S0q!c?+B!2n_T$yIJJYR;<7oSm@oazcjb~``H!Y5u`>>K`irEK2x#q2QU-4*O zWA4ZEeKXU=KHN-cOEzeG-u5s*@4OC5QsyL{^E{4!cGih%Aod%}a+TY8XIL!twKJ`{ zJl>`hx6SuNmu0J=(4Aw{zxq73P*BxYm-=;T9poMn%CUO2FHGRWGJ%_vsWA{!@NCh} zU~38nr(i|bsbmBTai+3QG~WksjivU)bp)#aKnd%mX($MJ~!MNYC&8#fkm+5!hGAh zS4ZVCaLq#hB&XXobrsgUU8jI&^vc6`MOBmqpS*3k@59B%OgKlNaAC^Hm;Km2+@>si z6(064n0oo;mj!=`A~pH#kG2)AU~5y*E^2`#b~k~dm8lrz7AM|evGl#-U6yFmi`VbR zE&oXBw~oF2i+a#@n2Jqi+B2ViR7Op{$O=N;42w>tb-;MdyTEl_qh`K7C0vCr`&v!t zZ}v~>nq_j^kJtUUrH!zUlvTRgl=g#sor9|Kr@f)yzI9X@DH#X{c(m)8(a|8l*IbJ#j9MVRfka4)G%nL z1qv$hmiEp4E9FADFWX{R@d~F5aLE--eGpFCk;Z}hFjy9Y;QfMYw@4(~`oLs+Fu%w% zOQf$Sp%JNl^Cp&pCiY>f*-eQM=c*GZXgU?1uoCN{6NXBQ#?>nsV-O>h#L^aqO1HXm zBYJlcuN7t0UAs?N^6*l4!lb^b?1Z%7!Yq_@Y27^F^exJrQ#j&g0dmIt<(A?b+G0F& zya(DM3nn2=Yc8ly!;yHj?cwB88*yUkOUA4HF%=`seN(9g%8gpg0ZN2*Zq-bml1;nz z+xy|}#PfY~=6UIf$Jjw|4Q$?@eZsMG<;f!~9%DW;jvO~;AXHkSG=US)_i9k^9Q{im(&LV*|xkywm^Z`>c0 zqHZ+bm$8;Bp4XQY7YQco!VxGf!9|^x!ODUU{=$(?eTE3!eZ@=KD|cX8($do9yxV@K z4?}L-bn$=Jhl;pHDLln0k&K;n9XKo?yR(1%n}B1lg9eTLi=@2bAUu})*=o2ZGV_2! zn6LKrg~GBs#vvh2_eD_L@e(McX?KRLJ68?3dPT0o@NP<}PD@#7Nr2@u9UjgW*3?Fw zafxcRL>e}2E**OfwB0|YDka_S1O0s$(*<8RY1ej~n*8?Ppz7J$6j+Ehm7(?bin9#6 z4tS5vIpfCbIF`Owyvh)3I`R7bxRoQ4`mJqOzbi!31*$V$C^w;hsmGH$^c-Nh^VIR; zHSeiJ))xtq5`w$bsrAAMiWt>qHV8CZkI zrsc*1Y7Waw_V3(U>k3cX*SRY}nu>5{AIYoibsdfcyHizvwmR!gC}*aj{Nz^dX!`o5 zauw3tzAw)$X)6rhjauQUoiWDic0sh``WRotoYt6uzW&GQ!}|v)JWW)K_Ozg^J43Vq zv3!fQG3JoGxS|~9IJ?&(BVFEDw(*|li=`~iYvEQ5#$WIUi%zh()1!yK|Jbl$L#ysa z9Uf1e3THWn46tlp-upLu_p$9rVeZtmUPgs-1?}c46~#Zi zXN!FonYn>RGVBvIumfebwQJW}f7#jDmf{oKEb9J2Mn;A-YSbuc6`m4i2Dn+XW)|G8 zUAsp77~zL;!RrqSEEZ{j@)LYN_B`Pt88P+$WWt@VN$+u&>(fD7Q{f4kfAN(3y`d*z z;+dCQT1AKVx&>QdMTh+7vK#wd<#=9DhbNxC`+94olr923rlD~TU-0Mu><{w$cNfbo ze|^pJ8L#7nvyD_~sbz<*cCzS@9!V0;0CBn+ut*l!t0r>1B(K1)#ASBEbo|%UL^~|q zn1aa+Oy1rw=~(&a&F9O*S5I+u`DI=c&wUI`pKQ3#dGYh_qe^~?a_gf9J}{}gXnlBf zl-Y^*8Y~G_AXr(_a!{>m@Dh|MTrnp+LS2*Tq1+Sdnq)o~&Tm;ybU5!5ZY}jkjkOx2 zXD2&~=`IEDjXB9=M~c%a;@DDW;6e<7!LFC*EHF>I?xQV*5{{NPmF2WY-kNQ_n;6`L0{>mlyc^IL zylmVsOX*2pI+^Lzhf!6`@i2asVs$6P&YDngmpW8X9@j$`ez zw$fHPM<|}VZ|nTu*-+{<7pgepg*tAkTq{H)9z}{Ksi14j-*UNO+0ay2G})zkX{H6G z99=*x^;>i~#{Vkx@gJN1S%CF0v_qIAf)&eqFPYbV8myzs~KOiL2A zQ#$WlT6XB-eKO>k@P36m)~^hiN;oGY89Rg0OHE2F_Y>+q%t;Azu_KfNw4e=!a)6iQ zAMh)-zzR&FiuwM-DoeD2$?+ZQ{O{L&0-TZx49Ttyymp2}}SGh^spp&$=P-N{r^f;M(-5qlGi*u~M4n6&g0?f$q zydN`N?BgwWy5)4niT82imTl}LL*;E+zOyf=;hk`l!_zafYPb}!B@fHnzrAcySjtYw zNl)l|EAt=v0{bw`$c& znl$l^aidQ#fBt;)wC8?2^fDT>@LP96Mui9c>pV0yrb*4Z8s{66$Np7>YvharCY>I>=1lqNzuuDF2fZ7xc)_21On=)g20Fgqu8Q2knA0-G%U>*rs(8`7 z`+D*wstkEitrGa`hqbmf2)MO_SzjnsXctf@%v;|qskJgi^S;$Y;X>9aW`k4%nU{z7 zXg0HpgjKxi12g|<_hC`RR1$dcv+tu#DyHk)+5@iy&4G+Z-kfb)l=F)36>hpqg{76A z?OWPWH}5_muqXs2Qz(O0RJk|0>->{#_mp;IkDZY3t#M5x_ikL~x%=kVi)GHT$gF7U z#6nr?LL7X6KmX}`fno;Ud06PV?W_~!!B^c)1#51&7VYQV&%KY`YQ=PwWJZ2lS#Ijz z**AE3tWt8CHsdR60Ckdb4W#AM#jEvh$Zb5@_K+DQ*~vs`f6U)@xW6A0bG+X-owliD zgg#(6lSObVsoMoiba`1$`^WoVTFU&$3(C%Y)xfBi!d{}(*P2URZ$DnRN-h~Y)Z*N- zNdtj(B&<|DRaySig1S5sg?@cqxLZ@{M?ddyuhsF)$m67zFf9t`@Nl+pwK0AA^l+j^6~}mt!PiHD zYrnEGUz?&Au_4cB`v$dH-ek)wp1&XGy+>BR8OjwAyqAIH_mvtfwT)Xp2fQFF{7)-pJ+heaiL&w!^5)c+HdRVP@}?y45a=*7iQ&I)CL*qLT5$Hr|3 zB@?uOGt9B?poFRkNW^(Q6dCU9`t|E)xwF&mX%;jt5|UWPf>?#lvijL{Z&DH~uYviTQ6rOhO+$l3=%&>mc01Q8s&?kkS}ExR8r9R{Byt$UBMJNIq-9j}z0o|A(8+x2s_ws||(+s9cA{B8{Fz*u%_ zsG<(HNLdY=dqy=C!wL_EH&Ei4SS_3=SElUW`R5<3KYT#rLwfkB=gGk1PEqfT?{&^; z*hsLV2>z+Vk%&4bD#1NlH;6W|+N^EIaIy%9bMeI&TZ(-FfngqW@7|pXPhqk`v=)sT zc*bs=n`58b5yE^Y+ze?~L(sk-)u)TqQPv$qbR4gnFiQU5G0AFY65|d!fas)afo6I% z0=G+g1pus1e6ckA$!JW}Xlq!oY_d=dmPaB`3eyw$nxEVCEo#tbvs-=$(-yDH^G^37 z=D8z%|J`qw+6qtjh=el1kZv6U6z*1S4X@3JmTj!>TfCl8p>ms|-5ufGgv$>%X=&6q zZiAV4pVHGpcXYLBW4H9p6`>7t{H`~gaU=109!q`T%s19!n4s2zy5)f3N>zu~)YfDh z>KPz^bG4CamU+|e@D%i`yN7Xud)iUpu4po&9rG)CG@Kl%ewJvWWZ84z;tCvT0_pMBX zqBs=DPBK={zBjM>`XH8jGTR{29Zw`_qTSW5S>e_&)_M|oqmFZq@nLX3KEs!h++AYD zjka$b&%1yN-)BCVXZ_)KKe%gq%k{-EJv-WCXQTRdk(a+{6w=j2Jj)cfv?3UP+q!CL zK(BEQQ>#?H2^Tx@5MrrZX`n`J zjVq$?+t;nI?_uj2zcoLM0l`(9o5BDtXwbwzrW|j@IJ-b`*x9_&zkn&HQRA3WTr~SV zx#0E(B{M7A8k-$4>3muK&8K2oE`#ekr<{E9$ufTYcxP}}$Cw0+x587rzWv>9ptf5- zOm>^nFgr^Q7Zsa9);`(*DntcgsWu>0OYb zfY=M7C>p!rZ(^*mmuv2gCO0?9y_y~quZbnmTvHSXMx#Uog9@U8fYJm4f)tnDK{`m$ z|MQ*YnSFM4&h9C5_UyvvdA-h_Idi7Ich0ouH@|1?(naCuwd$0d_lG^bjvDs&>B{QG z@ek)DRqrxs#89J`ikfWgGhm?UeZiGRbv7!xGxqiG{jX7=v0sv2AAj0~=-y;o264ys zdbX94RHfdrO;deUW%{>i)5ctVb$Y?eaSJ_Y&>*AA^rVU&9CKxj-QPX<=i#L?n7Z$> zy*6^=SMsM_J=%4R1ay^vstavEmfhOPsiNWty>4J zT`BoXwCH+7K}R!Z&McD*CLb{sb?eqGRaZS_%9Q9LRrooVxQy)^OSe2z>zKx7=cY9k z&NHn6GPo{GYkCK1`O!xo1+S(}n+9!EHfv@x_t+o4iXt0(_UswF z)~#D-=FFL67B600VMOp3dv}|)^FIt;bsDuaXWssVIb?rRTn$=xD;w~%y5y$DVKr)+ znsw@%&$lI0dF9r%Q17)Hq&}gNjVn7gRov``8`fF6&xLr`6IP#085g{ctX;=^Z}2-t zX;M|%pLAN@7HQ?8kAna!%|JIwDCG-8vm%v0bo{rv>7Gq#X`ir8Rq7vIax%2qJ2_1? zy!xyCWM#F{>;B8mF}ew?($=fs40^=;IlF5+)3!;;flMcCFWII@(haIPuSZ8)(O$gE zR~1@ud7b)5q|#1q>>w4Vb5|pRJrd0p1RnIK%G2iQvCL(%d0?aRzW+~ znanetVO4?n@O1;q40_))uVno+e%#4JnHf~!9;)P0HiDMN7XOAW?Ah7$wiO_*ylt}? zq*K0rPA}s(_oQ*uOxdlE|EBfZty5`Ph}Rr ziB8=NNoA{GD8G_&<%Z3PE~ajb_yJdg-kBOZeJ#V$wyC6aOL^NwHpjwr=bNwLbljY0 zgNsz&oIWqe#OQ)kzS;kjAV|aiy=b^4YfH}Q74W1R`~JQ_!(>{<&YW*tGoN4SbAoBr zxTJEcX!S;;%H)blQpa|GJ{*61jqJLYtSbqSQ#PYaOFp)@8~T+5g??2cjqtvX8+MQlvU$VqyARfq%eisB%yc|drH5W> zmgAQ3Vu`;K$MR zOR|0DJmCUOplD9X`TXIB+W>JJ#I@)1%FS?-YSmkHIVm>asZq1m!F7NeZ~clTuG4(B zW_fV!<&LD9#$s`+s0uIS!oWfgz<^*^fLq(!iv+0K8~ zd!x+B7hV;Ne)cuDnC2ZzDpuF8Tw*q@EnT6N?R@e%UQ*Zo`CP_yr>zX@+P}MCb~S6H z{d}}^YF4tnM!(~8YJsGGKdI+b{x_=^m)x7Hb(FHX6lYh9j-{+h{<;2&g{1?2qr>ZS zQuQt?7tJ-pfA{0yb?2i)OotPTgD{S5(YDNN^SM4{W>yJ3)V$yEea;EybZm<@Dd*U@ zWxJH$@kP8qyQU@QN-s~GnX-PRMZ?r}L-AA2tgr6v>VB{LeJR_o|1gR_wPS5IU|0MH zFI~SR-{1Y$Li=#wDZx2?!@9L?M*Rk+Pp6W4%;EO>HJ`=5FYY({7oDenzh!$&P_AEZ zRzF1(>`iS}+H6WL^?cdPPve|>?zus*lM=o}%a$!$g4hRT*zq%^Mu*eqBx5R0J+*kB ztm&>=waO@oR zJmAU4S-pC-(W^#{8bK;IrE~LBxhWE@Z{NOV;lhPx{P^+ysO5HVTffX~U0Y=8HZ6W? z-p^{}MpP7{+G=-C^PF(eo#vxge(Aoh*6+3I*|u7bX;LOKQa_Fct-FWowsq~|usg2f zb8F;^rdgHBt{vNgw%||u%C*5_xxlA1vn}lV^tkPpUkvs9bPTC(|)u2JKj_+R#E8yi6TcPT*&-ugl?OuGYGe3AMKaV zV_|e&h4}pFu(9TMcYif#hD$e@{`+een*0CoN~s%O8@KHUo?df7*aOcz(WILpC)GNQ zv>97mz>@-Jbz{pF9jDVNNgUfXAC5oiXs17npTV$>4g5K$YkMn|3+>2MS>j)uvB1``ybwX!71jq!{5tj4hwAa56YCMq6akw zjh$lr=5R8a7z3vi$mQHP2m6MX6}dY6l7VFn5i-weX(z!y~kQyp>y^9KQb@= z`nyR?I_GJqnWd?34J$L93vReC?59AuXft+uY+%w6M;2et^}q4o%(MS_b2z-~IR50b zjqVe=vTT0E6^ecZf4xRc-Kcqg*S7EfkFNdhBjyDs$Yu&e^V6p&WcOHomgdFiE>vRcfo zTel{f-AM~^sJ$=h$`0FtMO;ykPjfHhaojLT^i%e4SKp#6O22#k{W6nPix;}L;L5Tr z>Z07Z>AdUOaEiSSbr0+R*TD0`Yelt6kgD~9bf%roFw4CA;_Z*K>z*RZ;DFwp!^v&f zvLozv9UJTe*~Z>)Q}OS)x$pIUN~e;*5x;*X-I><&WioAlShe2c7X>!yx20@On>T0o zP;D+T6^gy^>!~MCp6oAP&fV$6WoRbbHY_*CH0u=1uhV%q9xwq!bE;36dj|kSy z|I?!9h2h5?8&-zhaUI#jWeglRuuL{59siXjY}Tw<)w#Fn^P_~YQ`?E)Tni|sne(=f_3|b_-2?Ej(;H>y-DXY zO!E^j2tWHB3Ya?erbmpXTU|=`%l_RiYRQR!mizegZwa$reQBR;TTwyer2oTf)~#=u z>1mqzDot8<2vVIM)3{m6S?I=sE1TA?a-E64>nV;kUdq@3w?1In^*AMVJ|~>s&)ol1 z=^H6;zx}p({`u##dMVhiIut($M(qS=Q~dPHs+cdm^`ZhW#pE@y4RnF+rHvDSq&a!Et!!Hx)=wqA8aalif!m2=&Y|6D~_Y6lHWuH9P z6JMDW&DXE^`2N8D!3k^JG}Khq^?iGn`fBQerKJJ{ZnI4RM$7FNmF*WDrmB8c+ErJf z6$GSsPfk?TWiD^ICeAGiGobjvPO8+4ONCzEw6ggw*X=FUJpCtaRH5g7Td9WkGok5e z62FNWH_k1#Vp0Ed6`ik)iU}s%WG^UPx$^XqU}M+sR{MK!PXxJs{=2rXe=ROKwq4)% zhEKf{U=&!Pq#iJ8a(9R_%cL|$GhdDLrZgU?=IoPNzo-$WrQDq?+4sRhdod}zx}*s>iQo( zZqC2%p6FLOe=hph)Kd4EzV^LGO@pQ-4^%{FpeDoq{psP+-c{=J#Qn_~X`y=eztVI* zrEkjRYuoK)bMJ3o3@U?D4wTRr%{rW5{QHNRY=h%kniKneC7gqrXp5HVZ@(7y>e%xP zqhQi+o|lc4;N2*ZD`ov?@%ia+1?+0|NXKR z%Ko&o=}zj}Kbv{yW1OMyP7f!m%68qS^Na2^`a$*ncXU@QkmT>D;J+_7=v#;o_(!-fq@eAWDO)c!Gb zPkNyG+gFyp#!Y-7_D}FF?;fxoIE>aO>DuY80cVD@U%z>K-UE&_Gc{x9ihq6TU$?sN zlYSpR=hLuGLDRnL;I$ccg_jZ^_%e)(eG z9F!e)zzGF+i%U1DI?6j-8=0%^flTcxw3TnsMyqM?t8tjT`<|SJG1!2 z^vJr6OuzpaWY#U5W_E2|Z(RG*OQ-$QC|g$2MNc{PvM1+yty^AXKAHNyS^mi^vv=4f?ABzD0^lWYp;6{c0^ z6HSMnrbg5soOk1?fTya{r zptn+QK7H>%Gs9NCC^*Trg*I- zyqaNib{bFf{qyJ#&E1z2pQOw2$-AyLV{G$gpV$huFYI*N+vfdFJ-$s~><4FP{4ee6 zwGU>SYtJbTywXz!b!+!G<7R&vJehHh-Bw)Y9SvU{%Q9O@>b8AV9?C#ZHSF4-2}Vy% zPnx&5%&MJWGY&;Bh&p%~!Bo+z$_c;7{L|IhJq_tkCsnt8XIj>CA{Az@+pH#)QF7hh zQZ3`ySqqHz3%cOc>&ZK>HXkorW47%NTvVnMKl6(M8WarUo^)5BUKd-zJ)>xaQFbt0 zaQV%#jk6bZZd(2_yf=GMxNWHUt^cuEXx_0YhL5yaEtQqYP2V3U+O7T7uWq?4=&j%L zqu;#3D3grlcS5VC=DZ#qqNBuqPGWzc34ed!1*VY=1aigC#@Ey~P5IbuSGuo)_wPSH zvP^sI*Phig4D`|s3uSmJMEUcW56w@mzc`q+0%m@5`;}(oO;9Rjw}RHR{0jVd z__~YiQ_jnSa|<jX>i%Bz$ikF1?;U<06_VcM*gB-vvGldXC zO%78+$jy(j%2fuU4v=a;ePZMsX?>hrYWd-2G65*b6XksoukotJE*xf1qbpKhf5tLT zWF|6XH}43*fTaY`p0mS>Hq;9(YZ!cDK7EH)gVHUzUpnGc$z67)XV*5lS}A=>v~D+Z z#|(8QohR3{aH-x>xeM9rm_((xV2WEWLpvsZb_9H0R1S)Oc3|e8zJmgmEu?C8&Wkc? zYLELCEY|(pbiNkdtZ7IVEeK2VakJwc91xq{n$>m2Z8BBjzL`9vej z`Kar|fvI7JPLcQZufJfQ>{;=(zC4vP$OXsGrb_DLArh5k>Ane)aiECllX5xK?fiO@ zN&;hsm!Ms51a$F+4SGkm5)a%OZ+OsaVnx^b&Plna`2b|P@L|R|kK91&ySD3OuoMjQ zXgs>r7OC#>gLNqTrg3c}tZ^B>^UR_RRt}*Sk`o%%8@_=`%vt%Br-oXgDaQ8IyU*WK zY{>WRgo%XD%Ov}f3bCPDc7(0d`hwCXyfT~s>Mwbd&722OU0QlNacinV`t1+Q;<(8U z^IG(jy?`~NOyQmWU{4?(n)z_Y*Kg#JC%kuved%cbS<{O$&m zOij@eeOIOA+-dNPtZ{Ei>YoXH;dSBqtG0MBxk_p}RNNlq^YOLJP z74~z`2NhKuh^S(Vsmo?q8Lb+Z3JJbf6%6Y|SVTAhxp1G&z# zIzy@+gk#;IgFIDWBbvG;g5_ULUvy)#V}mZW&u?O&=W-W^pJT^ef>z~4l`B1Ol&6Vy zE4(fZ9y`lbvZ~|Ftd!U&wpC|tmRB32W%e#No2Aozx=o548JbcUcHb(+42|y;Xv%i& zpJ)S-l9Jwt_pR?(iRLQn8kj?FlV>qN$iO44+Rm)dP(JILQDUrpl;4pO)*+A>6*kDY)q!iH z6SoFg@-3x0@U_j*BO#8toI7S(nr1SIoos+!3!}q5U*GzK&`?1ihQY(Bbea2Reil~O zXwyEQn?vstWMu4OAsID`aKReSLb1 zmp^l#=7$&HDrQD;tloVm3e656I|uUm4hNj3c|`S9rrB#GC3JS2#bniXT&g-ez2nG! zQg@a8ZEdtosfm;_yWJ0^N$k4+lokNenO(+{n^GopMd@gh5IC?~Ld^KU8h*j;+MwJ* zLvxdpPAGL%yj&Ap&fqq>^@?K_EL2c(uRN-dw_ks8G2Wf2jyRg;LBk_nN}0~owpZ(q;}AT@{#ylE*wnGccGkG`n_ zG2f=%$lKZ{xWN25l&Wy(<7#QLfppkzafiTWs5BAi0R_UP?GRwH#OMuOTe4{NhOTX#>h_3IcdzfkYh%u@5@AB- zvXDG!_pl;X)A(>C2Y5QqPYy1NXaNkj80oy(`hmn#LW2&QIhjC_d5vRACU=r53h3E>B z#)@jcksNSP9rhl-c-8pvuGUUws{CWJYeQtB@s=){s{!fz`?J$TDUeg^dmhuiO1G~J z9rzkBpvWS{LC2bKd+u_YWB1BCL%8s=!kP0u?)J2a7f_&=q8(bPe~8JQmFIeKg}<5$ zHC&Ue<;M?jpalMMp}z`q7ZvimA!lPRzqou#vOwsgwAbqx^kb8f1o~*y8H#VEKM7NC z^7MhPP3>Ug)*cQ-tQs*j@SQ^TKGoADg5<~DlqPO-yZZJ&VBUAP!n!x`9c@p7))!Q= z9onLh^4rkvDjulqiU8*g5kv%6o|gSSu~F!Pe<5+58j;4gH8RDlWM;y~IpUxsT_MgH z%MMh>Qf(_iUw?m}vp!nW)<_wd$~$b9h{#H2u{`t{kwpYg@-}T1q;(6~{45KK&cP!~ zMhuG%XV#s&%N+RlT`c|epYIE=y$wB>IHD?*HM?=+-4ERRHX9Y9Vnh4YnlcK-yi9FV zxs@7Ibqw2~yY(E}`h8|*GpX2YzikTJLW*iRhE) z(S46jf9e1WW#lm%kIFs@cIAC3>9@?MWE)D!-jeVgg`PgOZ6m11XSj|8~)%QsA!qAJ{tNoizc)L29#M1Q+zqY|mSpWx=8zt2B(v=H7K zFEvNh9&VeLU8NfEwMazlCExRhCVHUGsM<~Qxa#-E zpSU0(iNfnKz*4X7GWRyAjxE-4Oo~j%6O~FLGf0$u2}I5MnfdadftpdP{L}f&M~CpS zH33$Map(_!sWKE3~Iwo(^CBj6gsTW0Jse)862_-_g7RNpV_L0zf1a8$eCQSfvyxhuKw2-y_w z%wyc%NJfU{nQaC2(N(YCzfcTYCZWKiz84RCXDe7gO}PVj2s;=o`qpm0GLbh=Xdyf! zs%_7}Co*}|0pqd1UXNTR4|L{+*9NQ23+l+jv?o5X@cL_!KlFL1sbZA;BOvV~k?*|D z)EXKD_MpLQ_TkOhvu1^nAL+vgAAqu?h`U{DJ(w!>2j&p9vQ7pz1mx$DAT@05r&NS2 zG<*kBZA)EO$Ioq}zX!Xis2+u+t}6KR8M1RpTam3gSMLlA*MFf!57RX@;WXEd-8vS~ z*DA5ZAANY4vl2`fxRMGNk;!m$=z5-;DcgBGbhmU6i(WjnrZ%wD#+vQ$JR`6=`;CS# zyY7*Fvb^pO>x%kdl#~^_U7)`ap94vv$mNyUzG@rD)>>h?H3>NfamA=v$BM3DzN`?; zhwtc@u~ENLKr7$SrahrE8^6u}#FSlEsrlki>oG+(MBrv&%<@HADtII}~1^RYh_Ziij+EEYNgR6mt_moWRmzRU(T7g@&U%Ql3Jk`49d(L3T zn_ZKwfW8)c^~#W|eyf7D$gxXzCj8WW!ic1SoxC;E{G>>7X%Z!8ZEKN=H*|>TI@u=3 zZQz6NNpk!hc^dL#c|tN;tIOlO?om|L^|6(y*wM%|`j=ILagrJ96OPFJ9=7=sO~XGT z1r&5(cbmEn3ufczQwrS$3nFpCN;^v7!D)oD{n;N4YSb#*-88w~gNfh*!tVRZHw9l_ zEtkD{ad6~qj}^Jaoc#RloGj%a9Mn{@>+kATIQu|P^&`LN53DS+m*Gd@&L%6ZT0Y#= z>V)OAWy~6stX0DJ-ZH6~dmwUyL$K#`EqSrg+&8$aX`$kq+B10JBAtxtwt#el2!)mo zdM}^O88v2(Ec3m-cP_NGXHK;cDn|RXmq{D1 zJGMTE`T~SIWH*sACK8^%?HcuQHUXUpzY3)5?ZJ8B>ZYb(K{bW9+g#ssmmFlA^`O0* zFm&XjIh3vO+N~dncl0M`l}AwvZ&|OLxS&}ZN%5~70_xNTn2x1qD|vPrXq_MS8txk` zHl0GgT&>W@ODiHQJw>gn#|BgLOd1QMkhdnf`6*~2_$SR}A0P$)lk}ph!`oI_Wv)k< zxBNBLxN~`400WQ3Su+ve?{H0YJ`afZIk!lBef#|#a4x8;M^#S+ak42E3=Lg&TgLU* z1G-rd^l+1Udcz67zz>s}qBUEoWv46B#o!LOp?nW^^G6M@pS?~sFw`XKE;ug_m-GGR zc~SKz_V<(O`A)_cPVP%dgOi1$YJ|)i3iwj=x>`rrP63|jRgQ^KcZY%j>32K74_(sc zNBk^+ft&9eMiRg78-go&=3EK>oTgfYpEz(;jlLpg6lG;T9AhgZGXV)TG{}tBZz2y) zjy&Uxm`-Som&jr@_oo$9tU=(~RXDH$56*cMJ~SZr0BjmdTr)jeZAj0fZayaT@T%R% zWf2#Ymg8;Ds0V!gTrYDTWq~m!Q`h|mdKaiIIN|hQCS}S`YT0wcq@~{-G@T1N-`D6c zI_!vd_OgvGM(|&O1;#0ZM^muFvJ6VC7r63X8y-#XAmK?eZ6`SfzD}59Z4LvU zGfKvlH%Wwv)a#kA?&U<*#Z=KplS>1(Cy=jbYmePN(0&h65R+^E>S4!>Z-A$L zXgwQkib>Ej*fof)xKU{3su-E?eb19%^LfbgHek|&%b&s?8!EZ{(aXn{{o`Sa+QTG+ zKDCk()pmDJ1jTgg50+BXYgo9t8L<9#TBq82Txl8H+zZ-IY}@_ljk=^LivopqhL1`s z$6r-jR!fF|^75@zyX5Bru53LCDye3lkVXPZCRpaK&Zn1ohy~nxk!%16G<0r9TH?p&(I3@7)l&MW4PiYgpj8Rj2+|DX8x=V>t4tY+tEi8++Y?py4mqX zX?*6}mLy=(*G-g)_iXCw3d#3KhwUPMwVQBMv8%`vr69gaE>Y)~lk`4Vn@pp++e1n3 zAZ~VZv0Xdk*v^tfJE6(i$`?(1`1tWC|NC(uCJ z=n}r7#7Yfn@X5E+MG$ef=>bJV+S~L~6WBDp#5*}Jenri{-pWUk8l~hjY(J5Di9C0 z@5*cutDY^jl+jXJz95!w*>G)&{1lRQr*&t2?Bu04*ZeFFlSfNYa$OZ$+ot0-R0faK+~TP;2PT zUHL6cK+JV=^9n*YH~)U|+f?T&FhLw&5xM0ypHnUzV_7qh|9X~~Wztk3-XvQmPlLGQ zY2F*+(5E~fw(8Kg&HA&c^fZO`BGR~xoQz486nWbv z;z%oZTd>F(E;#$X!gUAj;TE85G+cjf*-wM%)&=^+&?`?)(C?o&3Sjf}*KplXF|CB_ zvm)YK^zZQ9_E(kb_WX^vz?wyjRd;G_wbfNnuKuv9_WKivnN@UQm3qES5va~L%z4~a zUdwE(B$nyHwa2-U$_G7hy{E8L_rBLv^6Cfra<1Xt>~3LCf*v2rp^&)iOYj=AL=!bc zf3Z8j32OH)QLZyJU@Fgz+3L1J72N1UbzN?K*K2gkxl=AOMhhKq)YPjsn5P11lWmOI z1*8`IMdJh=<9*h_LepN`z@t{j-aIQ8|I<1sVY%p1pfF?=uJfUQH8r(A4vZBjOf9i+Sx1(5cca>Z#P8zy1BAkrit@T~Wg z%eCv7mTm#XxF1XR%|nFRrCHaXbLQJ&YQ`F>_cUR&{q^wrfCX+J#}5Gd)2!z<-d`6> zzC&Xx>HOZ1q;mjru07rAHv7s33U759L=xLjC9-{Q$kS|JYTAW$XTL zkDc(K`F_)elkA{HIyTpRGZ9hMGl8FV+Y!PEVx<>No~Vv2h@T_IYrLhW_#UR#e`{8= zsqE*%A)OFL>297Q)wuBVh*S?kme-A)(`9UOm>P6OIpET}vy3Fx2+BwMn);<2z2I

$I&nW=PDQXH!}@fr+_Hp2PW$T)gnY#ti}_XC5GSO6ZA(D+}$8q%N^Vacf%CvIMpL zo{-bDZ>tdvCpFGh^^`odgvdd97ha8g;cGHIry&HT-$5t(2Mr(-B^K7rUc#bg#99Bea1#OKMtsgWkYST33>^(YqiWv(% z^9zkC)q|(bB~}j@lQ{PJRqPjQs~*pVno_EYc(&{t%<%T&U2I+1o? ze2zVArkjR>FF!WJD-ngiUZ&wkRl`JEyh z{2D7Dov~H;iH0KA^g~m&BM&M6YA&Hx)9S<8@^7bphKAL)* zZaj3lj?S8@&#IX3h&b1gaRMJe^@hpQ4{1Cij`!+GhO268W-6b)wTB+*?unA82Go(7jEbBX3Cm z1&loXCEp}J7m2^HSHN^*IJf3IKV#CbAxMJj{X+ zu4uHFiddhC`*YJjI{ot*(*>dFg3QD2OMe&n->>#p4fyj{c@CjzaZc%2tv@&Yx7Pe? zLv#$wxeYU;DA3#EGX^_FbL_9UTYo9l{|NS^s(-=iRwe}c}CY0ho__>3jKqLIMd<)n^@od$->j21v*HUR<0XRPBcjYO}C zm;2vJ?oSOY5;Wb{+=tyfK4bqem;ac{f6V3Bw*UWSE;kx81OCOov}j)ahIZf8tg0!N z_$OmE+F`7dDGEE{Og;5C^X}08OI8Af;at|MTLVw)6=El~qdBLB2`2YA@ zbTKV_bi&_q9N*<;R?tWaz5V829G^9-UlSHZ0pb5cTyv$7n2pVJvmX}<9b*MIEk=7O zYyTfonNAu>K}8!(@SkMzzXmxMX`0U+hP-)seE2E9NL=Fp>c^A{4RVJyEf^FNc{z>` zU&4k)(#h=>b!_DpO01>@Hmd=-E60aVQ!+Zk6zQJB<0;rL_JzD?LAnCveE0b9^Sx;# z5;h0Mg78(cuTOG;1)X`~UQTR@O5ai8D! z=KTY2-Y<8~ne*d4b7$`7jjpx|5k4J0001CTQ&rLj06?gJ8iot{H&x2OApigdrmm); zG8&C$W?}pD=g;-^H4iU;PHrA6D?1thU}0rrWe0;fxkRO9xcLM)d3YUz0(galCFK=( z1Oy#kzq0f56%?0X19OVY$$`0e*x11$Qqrmh1{UtFP(3{kFjzoT45Fqkt)yh-fM)ofa zU)s8a2J`W7T6(yLWTuG=^61-GkB*L-yE-dsX}N`mn47}_(~}dCDx6$A{)ul4Y;Cm7 z%@i~=koKxd^865SelbyQGy)+Dg$AS~`o_m3x(!nm^j)8St~nOOR38V%ZTuW z_$mksad||9t3d_5qLA^f8ez67X)$Wf26A4`vPx2dax#2{uk@px)LdW66s2kTdq6BT zr3{qCO!P&y5=&F{Q<50)oim{JLU&G#wp!V#3#4admYSy|~y`ZiqfVN4K{(x3r+&y+hyJBqk?$ zdU;od8lw{vdumP4qN0vY&S)4cJtH$ZCe{lM_we*=h%~K3nxZu|(fs^wp~s^D0JWx? zlDy&T@5hVs+Woo|(VGe2fE^h1XMCDeaRbK97mX1E~U#|dwl&{5qL=0oFX*uQ- z#Nx-U*p=oI#vuP(=+Hm6R9WCFucS{IVihhrr;b>6>F$PtehoyG`GXZ7%Z^xi-KWt{ ztK!3(B{KuTI|&(`{1M1kb0s4KFyfHGXiCDi4C13yYJJ}))Q3>|+<$<^S1KjqFx?+KQ-ry2h$$+4gBy9R$ zT?!BaJo``R?h6faxu00u`__Bs^#JQ=Fn6Ej$ww?KJJ|#_G8kt&SPrGFl&3Zn{U>n2G-=sD8Twy6br%aL0-x6tQrFEUL+f&0)Xcnc;_6u z){fVvJQ~e&g}7VvskOTd`;OOpo5!A09*`dh*%q2-***W?Dx7w@_o_I%SoT2iloQI6 zQN3GbZ)EroVysLjF|HEM;=aMrH5Z6I&y>-g=$XK046mQzRPajMec?h?*7GhA+L>(> z_hefj-*pX-@-!%N7c{WtsPZyvwTQA;dz!;~2i4YjEu zPL?WRt2eh$3TG)x;%!l-~8cK!+b3+sIXQC=>}zhJ0feedB% z=uHmLh$L>hpg$W)#lqd-$Hw%LdU|p>8vgvApmeKX^|>u^67`Q8jCdT_5MnR6r(#Z^ zUbWl5zH6(6z576FMdqU!NlEa|!*MGWi((mh=mAeq3gSM3b45)2bwez?pzxWr3FG6e z{<=-dSFv6ZhS+Tl8JW2Z!z!oHUq6jgo-I&*{QivO^XA$7?Kg4g{rq)?_!TxvGA%A; z5E{t3Q@5D5oN?|Q?!FP>7w{1o>6D?l z5$NI;A40i~LPB-<<-Dua@*CRX#0{`p?mHr?3{uc@{RnKTg0bnB3)~+Dy_?+AeGoO4 z1Dq_^rj-;%d*wfgo2sxA22~R3@PN05ugJ)y$*9S481V1h5VL~O=@c(tQ(u@4_WHkw z7S>8gicpw27z{~^3^Bsvjr3A4Mi%goXfm~{3@(;_d53I;v{~3Nebg0BlE678!>WHD zI6$06M%%(l5^`ubqUkNeJ|WA`A<34eSz?SdOG_Ju%+UdBNjdD9K$GC74poo*b%#D0 zAqoi~Zn(A4Z!e(v$0g34V8QJEQ~)zI!Atpcyy<91=>>xD1B31A+BMSIl$5K(C&Js+ z&1&Moor&l~-UDyIw z6X5}`WY)=_hF;H!U6jEM4Nk{4hmKhlUUE^Z#4>ZN_ivt`cgUJ6D>0j~rB5}f8dUA* zkkv7z{rP^x$FaKB7;EPuz!x(6c7h}I`&;gbPTRWibfz4vI*}Jq*r3YkH*60NLUtvA zRpBE?qy@1b6r;JJMrUoKjh~oaz1roXsuGMS85^yR6M4uQ0edff-TLux@#yG8qzfxn zXX|CvJZ#o0E%A@G-*m$Oi;z;Ku@NB_#g709R!woQ(@R2ZQE8uvy%I^i-Te8L|u?aT%Y1Ub>4 z@5PoTG9M$J`2Ez@iAlek6Qqicy>}8;WmJ8yv;i(G+{v&_`DO(^c(D&s%qod*)@#*7 z?jY$H^W3U7qEBl^Yp)K#PCj-b!KHnYD zSBccF7lq#KmU`X)ywY(Ki<~REu#m@JEx*C8^77svf1K&NwcAhUe5RmLq{Dud0iR#G z+bvGv7MD9>L7aTOx$^73v6z8Ii>9uf8z!b{bv zK<9E_=5C@Hwew1j1c^!~?RNB0h<>5yW@lzTI*jYk`ve=woen%mWoHo^Vd{f>m1^Y6STPLuZr_S|RiAdL&{+b3BW=o`- zH#pR>Q~s|J*&6+HC}|U=H6WGDt||3gmQeE|O`|{$S z$n1%!u_px~n4GNqbGcCoan-bscbA3@L&JabFJWr#SoBVxecZU&eC7S|7;Djg#M(Jj~2M56ZG? z*|~b|o0qX_u)#n|0M`4Is}j^-yoq3I|Bttq!Rbot;rL}lXvWI*ujl=a*j*Vw_VL*! z(%JJgK{9e$7OS}N4JHKiL8MNC8>-I8WnZ0KjQ8RUwo4zPF8Gw$wbqxQBOsgD}(cL^lH+cKMwc}598pf%F92DG@9z|HRHQev+!&8#}ogfU<|+Wy`D-LMsJ79 z<;fQmf9nH1)9?_oM)C$YeomH@Z@=O75reM|9d2qVupv$lf&r5Ml$xH7kyt^$@92j9O5!iyP zno{>8<>))(!3&j*R|~aRCu8vad4SPFecK9^@jReCDna!)hm72oc>yz%?T_E zV{zpAvRFAP>d`ZpV97b5=td{|-p_o{$90H!@>SgqZ4r zy@0OylGCI4^P*hflIno#;pOGs1QQWRqm{zV?=5`ecYGuK*ecL1+@ZJVTc7JKZy@IZ zZr;JO#>>*?lce!1EsD1V1C5{>Yg5{N{4XaXxBW16XGS%9cxjC$27N_6zXANYz1mw4 zg*3_UJikt$vxzAYIi=2krS#qMcd=UX^#Kr+_yfacZp&WX?j zAaKVRNz=lLa#+JObd6M?kq@bzXKS7YRM7%N?CtE7B5t}rM`akke{EGQ4I%*f2N56kutoO7=row#1FHl|Me;@bA>`&Ub+=wX^#roVK&eM; zlrR0$iq#)Knl^Poe(tZL{6d{ug9{Wl?>ZRIWrMqVWkm4|7A-Xa(ec5`fK_Non&-k1 z!Uu~+>GR^uNW|EkfLdwF5hC4MkwSw1Q)ga2LK5W2$~{tmP`B^I(&g;yxNz8CV|V+y z*cF=5JEa4T`aQe#{VGU0taV#asfpJE%P$Pi_1G1pyS_0=OELeS&9TZoxmce#l?S{I z3M-;3v>xJD?*JCP#noC{8T10;vsdixDLA_)1L9@xKTxj`eGHMm9Kh)S7*RgPbE5Rl zi-qRgA!7)<5{>>vE^x+mty`gjPVp4nA=dCS(2D?7htz>}5S#!g90mgUO*>4bn^Jos za(O=@S5#Z|X`fVSU=S^8x+q0}S;y6$e10wl92&F%>54MLXF&qDQT;R+N48l(p5$?X=G8%cagk=Uur1xwF&IKFyj5Y!l*wISIvpCZj~~B zeyQpBP#B6oGc?D2$HVv;be|>#pme(TrGw!Z?uiN6faoNg@Xv_;JOGF4yN@pN} zvsFaJUh&bJAv)CdYELeGkuk(=!WM>eS+*?D*41+7x{IamFE{M`^piUvKEchKAV&@PSc=+YYQY(7$@c!Qmq9Ii@7kU*`Nhh_ob{j&y1Pm4IIX@gKCozfk1jhSU z>a|q<%-qw&mhfV8NqLRa#8Kq`mM!y21U${9!c(|sN1UYXp6BD@n63qJu~3eMbkjDe zHXn{?&J1_~I5R`Cps4f!Q!FYh1IZ#N?)0SJ*=^$F4~H9bS}XDWhZVc zatV;F78bAV(dajrKQJk-U$&iaxX2ipwVF`N03i@prE;ygxYM?=!!^h zW9oJU^=KG5%?Y3;ZpDf|WvK4EyZ^LX^$n+Qtq&Xh zj1oZ@`xL%koa%9Y1UyqJ$rh=gx&$0LX{@xbA_l)~G))3g88zFrfAi4p3@MMJN1V%C zS6AhG0LJ_RTeTp{@9R$H%RkWTK7JWGxjuu(gEE@}+W4<$&g${ilP0HngPOe;0GGoj z<5?$$-aEUy9eiS=6tAx-m(O}(fot@Gy5Qyk_-$p39^P;~&Teh7P*4*VmCt;AFDdo4`g16_!Q!3{ zb>H_{Th-&ky}>@aH^ru2F79yf;^_CQXT4$&d5ZGq$I=#&k7lkul#ZC8&OUHTv4{TZbnCDhA=LJ0y?_FPDf_;`8*q|l8kd-6D7PTbEj;? zX6$}?vLqS!H!rtiMCF50iA|Pm)EGw3)6oPnz521)cjc78Z&CI;<)B7Gi@hJSoPE6s z@=aI<3RRA2@WQ=}yWAn#Xbz_~RmXNK{(dt|X486}PthZz(J@E-MuneUf#p<3CG8*u)-D_BnMX-# znqCKx!TKAEmb34*^R+VWHRG${lB3|WyYsOM{G?y9n*bTvMe?_e&}1uK&C-p2Y_Xxo z4-a+?)Oy=rQyj%M#TTRkI**QuBDGd?=z~@WEI!hIx~lz}vL4k>Tfa7xo`oZ$h+WD{ z*cx)9NjPm-pe8oCL`VR?U`!xh*^u z>AQE|UnYL49D4M11DxBbb4sbpgg-yKC`D7avxuTFlBySRhe_2ht9aoqS;ghnv_Fl2 zHR`#mZMQ+Yvhu&wRfW@b6dHwp_Rm)-F_2O>O2IGZt?)csbU4b+=V2@LSYc^d+YNBR z12GUK7_JUyXW-5kZZ6&_thQ$p&<^OLGiQjYR`&%z*w024K5)i#Sm<4}DbtC_Q00m6 zgw6AT6sXyhT%f_M32Xand3fEFUjDI_7Q%%JSaqwJ@%YuwhP%Xym`Ylj z#S;5ycu}8c9@HZ7r-BYRAN+#FWNZ|j?M93FdiA1eeRi;>Chwp=FF8L?dl6NyvfhCH zqsGKUtb3`05BSy190HwSCvqJ6N0<7S<2$1M7CL8_Tb*uo$d2P7T&FFDDl+Vm>IqW( z-6lSkn{A0F8TwTr^<0kAkLfNK=2VY7@=0G+eui&u8e@QiYJ>KZsV+|om4RLk(Af2# zW-HV0NO~;+;2@L76u{M0;mgaE_{P+daOF(y+KTnzfyFw7xHV3wJw@LF%`c9?gK%e4 zEeEPc84fMUG_pqmgnsoJX;5v%OC5#qE%>Rs8Wf#DGXD1Fc3SEP4FZ==4?KaQ6D9w? z5h(GV{Py5YtE3mcj#=@yD-qpcK(sCQA)JJL?gx6M?(ys7Gc!Vx@l{cj2juzxzxvpr zb1I5E2qBF*Wi?BM;0>y_K|mDB,

^^, . These release notes provide an overview of the changes for {productname} {release-version}, including: +{productname} {release-version} was released for {enterpriseversion} and {cloudname} on Wednesday, July 23^rd^, 2025. These release notes provide an overview of the changes for {productname} {release-version}, including: -// Remove sections and section boilerplates as necessary. -// Pluralise as necessary or remove the placeholder plural marker. -* xref:new-premium-plugin[New Premium plugin] -* xref:new-open-source-plugin[New Open Source plugin] +* xref:new-premium-plugins[New Premium plugins] * xref:accompanying-premium-plugin-changes[Accompanying Premium plugin changes] -* xref:accompanying-premium-plugin-end-of-life-announcement[Accompanying Premium plugin end-of-life announcement] -* xref:accompanying-open-source-plugin-end-of-life-announcement[Accompanying open source plugin end-of-life-announcement] * xref:accompanying-enhanced-skins-and-icon-packs-changes[Accompanying Enhanced Skins & Icon Packs changes] * xref:improvements[Improvements] * xref:additions[Additions] * xref:changes[Changes] * xref:bug-fixes[Bug fixes] -* xref:security-fixes[Security fixes] * xref:deprecated[Deprecated] -* xref:known-issues[Known issues] +[IMPORTANT] +==== +This release includes breaking changes to the license key system. All commercial self-hosted deployments must update their license keys to use the new `T8LK:` prefix format. For details on this and other breaking changes when considering upgrading, see xref:migration-from-7x.adoc[Migrating from {productname} 7 to {productname} {release-version}]. +==== -[[new-premium-plugin]] -New Premium plugin +[[new-premium-plugins]] +== New Premium plugins The following new Premium plugin was released alongside {productname} {release-version}. -=== +=== Suggested Edits -The new Premium plugin, **** // description here. +The {productname} {release-version} release includes an accompanying release of the **Suggested Edits** premium plugin. -For information on the **** plugin, see xref:.adoc[]. +The **Suggested Edits** plugin allows multiple users to collaborate on a document. The review window shows which user suggested which edits, whether they added, removed, modified, or replaced any content, and allows users to provide feedback on those suggestions or give a final review by accepting or rejecting them. +For information on the **Suggested Edits** plugin, see: xref:suggestededits.adoc[Suggested Edits]. -[[new-open-source-plugin]] -== New Open Source plugin -The following new Open Source plugin was released alongside {productname} {release-version}. +[[accompanying-premium-plugin-changes]] +== Accompanying Premium plugin changes -=== +The following premium plugin updates were released alongside {productname} {release-version}. -The new open source plugin, **** // description here. +=== Mentions -For information on the **** plugin, see xref:.adoc[]. +The {productname} {release-version} release includes an accompanying release of the **Mentions** premium plugin. +**Mentions** Premium plugin includes the following fix and removal. -[[accompanying-premium-plugin-changes]] -== Accompanying Premium plugin changes +=== Mentions username not updating with skin changes in dark mode -The following premium plugin updates were released alongside {productname} {release-version}. +Previously, the username displayed on the mentions card did not update correctly when switching between skins, particularly in dark mode. This issue caused the username to become invisible against the dark background, making it difficult for users to read. + +To resolve this, the styling for the username has been updated. The class now uses the `@text-color` variable for its default styling, ensuring that it inherits the correct color from its parent element when the item is active. This change guarantees that the username remains visible and readable in both light and dark themes. + +=== Removed unused Mentions plugin stylesheet + +In {release-version}, the unused `mentions.css` file was removed from the **Mentions** plugin. In earlier versions (such as 7.9), this empty CSS file was still being loaded, despite its contents having been moved to the Oxide theme in a prior update. This change ensures cleaner resource loading and avoids unnecessary network requests. + +[NOTE] +The removal does not impact plugin functionality and applies to all editor modes. + +For information on the **Mentions** plugin, see: xref:mentions.adoc[Mentions]. + +=== Spell Checker + +The {productname} {release-version} release includes an accompanying release of the **Spell Checker** premium plugin. + +**Spell Checker** Premium plugin includes the following fix and improvements. + +=== Content marked with `lang` attributes was sometimes not spellchecked correctly. +// #TINY-12101 + +Previously, the spellchecker did not consistently handle content marked with different `lang` attributes, particularly when the language codes used different formats. This inconsistency led to missed spellchecking for words in spans that used alternate casing or separator conventions (e.g., `en-GB` vs `en_GB`). + +This issue was introduced in {productname} 6.4, where documents containing a mix of language codes using different formats would not be reliably spellchecked. As a result, misspelled words in spans using alternate casing or separator conventions were not detected, even though they functioned as expected in version 6.3. + +In {release-version}, support for mixed-case and mixed-format language codes has been restored. The spellchecker now correctly identifies and handles variations in language attribute formatting, ensuring that content is reliably checked regardless of code style. This improvement enables accurate spellchecking for documents that include multiple languages and diverse regional conventions. + +==== Input label for misspelled word was not announced by screen readers. +// #TINY-12167 + +In previous versions, the Spell Checker dialog's misspelled word input field lacked proper accessibility labeling, preventing screen readers from announcing its purpose. {productname} {release-version} resolves this accessibility limitation by adding the appropriate label association between the "Misspelled Word" text and its input field. This enhancement allows screen readers to correctly identify and announce the input field's purpose, improving the spell checking experience for users who rely on assistive technologies. -=== +=== Language code standardization to RFC5646/BCP47 format +// #TINY-12090 -The {productname} {release-version} release includes an accompanying release of the **** premium plugin. +The {productname} {release-version} release introduces standardized support for language codes using the RFC5646 (also known as BCP47) format. This update applies to all language-related configurations, including: -**** includes the following . +* UI language packs (premium and community) +* Spellchecker language codes +* HTML `lang` attributes +* Content language selection -==== +**Changes** -// CCFR here. +* Language codes now use hyphens (`-`) instead of underscores (`_`). For example: +** `'en-US'` instead of `'en_US'` +** `'zh-TW'` instead of `'zh_TW'` +** `'pt-BR'` instead of `'pt_BR'` +* Base language codes without regions (e.g., `'en'`, `'es'`, `'fr'`) remain unchanged. +* File names for language packs have been updated to use hyphens. +* Premium plugins have been updated to recognize RFC5646-compliant codes. -For information on the **** plugin, see: xref:.adoc[]. +**Backward Compatibility** +To ensure a smooth migration -[[accompanying-premium-plugin-end-of-life-announcement]] -== Accompanying Premium plugin end-of-life announcement +* Both hyphenated and underscore formats are supported in {productname} {release-version}. +* A console warning is displayed when the legacy underscore format is used. +* Both formats of language pack files are distributed with {productname} {release-version}. +* {productname} 9 will support only the RFC5646-compliant hyphenated format. -The following Premium plugin has been announced as reaching its end-of-life: +**Migration** -=== +. Update language-related configuration in `tinymce.init`: ++ +[source,javascript] +---- +language: 'en-US', +spellchecker_language: 'en-US' +---- ++ +. Update `content_langs` configuration: ++ +[source,javascript] +---- +content_langs: [ + { title: 'English (US)', code: 'en-US' }, + { title: 'Portuguese (Brazil)', code: 'pt-BR' } +] +---- ++ +. Rename any custom dictionary files to use hyphens (e.g., `'en-GB.txt'` instead of `'en_GB.txt'`). +. Ensure any server-side integrations or custom language pack files follow the new naming convention. -{productname}’s xref:.adoc[] plugin will be deactivated on
, , and is no longer available for purchase. +This standardization aligns {productname} with modern web standards and improves consistency across its multilingual features. +For information on the **Spell Checker** premium plugin, see: xref:introduction-to-tiny-spellchecker.adoc[Spell Checker plugin] or for an complete list of supported languages, see: xref:introduction-to-tiny-spellchecker.adoc#supported-languages[Supported languages]. -[[accompanying-open-source-plugin-end-of-life-announcement]] -== Accompanying open source plugin end-of-life announcement +=== Accessibility Checker -The following open source plugin has been announced as reaching its end-of-life: +The {productname} {release-version} release includes an accompanying release of the **Accessibility Checker** premium plugin. -=== +**Accessibility Checker** Premium plugin includes the following improvements. -{productname}’s xref:.adoc[] plugin will be deactivated on
, , and is no longer available for purchase. +=== Accessibility: Enhanced image accessibility checks in a11ychecker plugin +// #TINY-10903 + +The {productname} {release-version} introduces four new image accessibility rules (xref:a11ychecker.adoc##image-rules[Image rules]) in the xref:a11ychecker.adoc[a11ychecker] plugin to improve compliance and authoring guidance. These rules help identify common accessibility issues related to image use and provide actionable recommendations: + +* *xref:a11ychecker.adoc#I1[I1: Mixed Signals & Decorative Policy]*: Flags images with conflicting accessibility indicators (e.g., `alt` with `role="presentation"`) and ensures decorative images comply with best practices. +* *xref:a11ychecker.adoc#I2[I2: Alt Attribute Requirement]*: Enforces the presence of the `alt` attribute on all `` elements, regardless of other labeling mechanisms like `aria-label`, `aria-labelledby`, or `title`. +* *xref:a11ychecker.adoc#I3[I3: Filename Detection]*: Warns when `alt` text appears to be a filename (e.g., `image123.jpg`), including cases with URL encoding. +* *xref:a11ychecker.adoc#I4[I4: Alt Text Length]*: Detects `alt` text that exceeds a configurable maximum length, promoting concise descriptions. The default limit is 150 characters and can be adjusted using the new xref:a11ychecker.adoc#a11ychecker_alt_text_max_length[`a11ychecker_alt_text_max_length`] setting. + +Additional improvements include a rule precedence system to avoid duplicate violations, centralized image intent detection (e.g., decorative, informative, mixed signals, incomplete), and more readable user-facing messages. Technical terminology such as "alternative text" has been replaced with "text description," and repair instructions are now more contextual and user-friendly. + +=== New `a11ychecker_alt_text_max_length` configuration option for Accessibility Checker alt text length +// #TINY-10903 + +A new configuration option, xref:a11ychecker.adoc#a11ychecker_alt_text_max_length[`a11ychecker_alt_text_max_length`], has been added to the Accessibility Checker plugin. This option allows users to configure the maximum allowed length for image alt text descriptions. The default value is 150 characters. For example: + +[source,js] +---- +tinymce.init({ + selector: 'textarea', + plugins: 'a11ychecker', + a11ychecker_alt_text_max_length: 150 // Set maximum length to 150 characters +}); +---- + +For more information on the Accessibility Checker plugin, see: xref:a11ychecker.adoc[Accessibility Checker]. + +=== PowerPaste + +The {productname} {release-version} release includes an accompanying release of the **PowerPaste** premium plugin. + +==== Word import of lists with a "lighter" level failed parsing. + +When users pasted content from Microsoft Word documents containing lists styled with Word’s "No List" setting into the editor with PowerPaste enabled, the operation failed due to a parsing error. As a result, the content was not inserted into the editor, causing disruption to content workflows. {productname} {release-version} addresses this issue by updating the **PowerPaste** parser to correctly handle lists with the "No List" style. As a result, users can now successfully paste such content into the editor without encountering errors. + +For information on the **PowerPaste** plugin, see: xref:introduction-to-powerpaste.adoc[PowerPaste]. + +=== Comments + +The {productname} {release-version} release includes an accompanying release of the **Comments** premium plugin. + +**Comments** Premium plugin includes the following removal. + +==== Removed unused Comments stylesheet +// #TINY-11287 + +In {release-version}, the unused `tinycomments.css` file was removed from the **Comments** plugin. In earlier versions (such as 7.9), this empty CSS file was still being loaded, despite its contents having been moved to the Oxide theme in a prior update. This change ensures cleaner resource loading and avoids unnecessary network requests. + +For information on the **Comments** plugin, see: xref:introduction-to-tiny-comments.adoc[Introduction to Tiny Comments]. [[accompanying-enhanced-skins-and-icon-packs-changes]] @@ -110,87 +218,472 @@ For information on using Enhanced Skins & Icon Packs, see: xref:enhanced-skins-a [[improvements]] == Improvements -{productname} {release-version} also includes the following improvement: +{productname} {release-version} also includes the following improvements: + +=== Enhanced cross-origin resource handling + +Added a new function-based `crossorigin` configuration option that provides granular control over cross-origin resource loading. The function receives the resource URL and type (script or stylesheet) as parameters and can return 'anonymous', 'use-credentials', or undefined to control the crossorigin attribute. -=== -// #TINY-vwxyz1 +.Example: Setting `+crossorigin="anonymous"+` to script. +[source,html,subs="attributes+"] +---- + +---- +Or; -// CCFR here. +.Example: Setting reusable constant function. +[source,js] +---- +const crossOriginFunction = (url, resourceType) => { + // Returning 'anonymous' or 'use-credentials' here would explicitly set the attribute + return 'anonymous'; + // return 'use-credentials'; + // return undefined; // Omits the 'crossorigin' attribute for all resources by returning undefined +}; + +tinymce.init({ + selector: "textarea", + crossorigin: crossOriginFunction +}); +---- + +This improvement ensures consistent resource loading behavior across different deployment scenarios and provides better control over CORS settings for both scripts and stylesheets. + +For more details, see xref:tinymce-and-cors.adoc#crossorigin[crossorigin configuration option] documentation. + +=== Tooltips can now be closed by pressing the `escape` key. +// #TINY-12054 + +Prior to {release-version}, tooltips could not be dismissed using the keyboard, which posed an accessibility concern. As of {productname} {release-version}, tooltips can now be closed via the `escape` key, improving accessibility. + +=== Instructions on how to navigate the color swatch, image select and insert table widget are now announced by screen readers. +// #TINY-12189 + +Previously, interactive elements such as the color swatch, create table grid, and image select were missing an `aria-label`. This resulted in a lack of instructions for keyboard users and hindered overall accessibility. + +{productname} {release-version} now includes `aria-labels` for these elements, providing clear keyboard navigation instructions. This improvement ensures a more accessible experience for all users. + +=== Resize handles are more accessible with `role` and `aria-valuetext` attributes. +// #TINY-11421 + +In previous versions of {productname}, the editor's resize handle lacked a `role` attribute, raising accessibility concerns. + +In {productname} {release-version}, the resize handle now includes a `role` seperator and an `aria-valuetext` attribute that dynamically reflects the current dimensions of the editor. These improvements enhance accessibility and ensure more accurate announcements by screen readers. + +=== Focus is now restored to a dialog after closing an alert, confirmation or another dialog +// #TINY-12038 + +Previously, when a dialog was opened from within another dialog — such as a file picker triggered via a `file_picker_callback` the focus was not correctly restored to the original dialog after closing the secondary one. This issue also affected alert and confirmation dialogs opened from within a parent dialog. + +As a result, keyboard users experienced disrupted navigation and loss of focus context, impairing accessibility and usability in multi-dialog workflows. + +In {release-version}, {productname} now restores focus to the triggering button in the parent dialog once the nested dialog is closed. This improvement enhances keyboard navigation and accessibility in scenarios involving multiple overlapping dialogs. + +=== Added support for `skip_focus` option in ToggleToolbarDrawer command +// #TINY-12044 + +The `ToggleToolbarDrawer` command now supports the standard `skip_focus` option, which allows opening the toolbar drawer without focusing the editor. This provides consistent behavior with other editor commands. + +.Updated new `skip_focus` option usage command +[source] +---- +editor.execCommand('ToggleToolbarDrawer', false, null, { skip_focus: true }); +---- + +For more information on the `ToggleToolbarDrawer` command, see: xref:editor-command-identifiers.adoc[Available Commands]. + +=== Split buttons are now rendered as separate action and chevron buttons. +// #TINY-8665 + +Split buttons in {productname} {release-version} now render as two independent, focusable components instead of a single composite element. The main button performs the primary action, while the chevron button controls the dropdown menu. This design improvement enhances accessibility by allowing separate focus targets and ARIA labels for each button. + +=== The translate API now automatically replaces three dots in a row with an ellipsis character. +// #TINY-12155 + +Previously, menu items and tooltips containing three consecutive periods (`...`) were read aloud by the JAWS screen reader as "dot dot dot," which could confuse users relying on assistive technologies. To enhance accessibility, the `translate` API in {productname} {release-version} now automatically replaces three dots with the typographic ellipsis character (`…`) across all translations. This update ensures a consistent visual appearance while improving screen reader behavior, as the ellipsis character is not read aloud. The change is implemented directly in the translation function, ensuring comprehensive coverage across all languages. [[additions]] == Additions -{productname} {release-version} also includes the following addition: +{productname} {release-version} also includes the following additions: + +=== New `allow_html_in_comments` option to allow HTML-like content inside comment data +// #TINY-12220 + +Comments containing HTML-like content are removed from the editor's content by default for security reasons. This is done during the sanitization process, which ensures that any HTML-like content in comments is stripped out. + +{productname} introduces a new configuration option, xref:content-filtering.adoc#allow_html_in_comments[allow_html_in_comments], to give users control over whether HTML-like content in comments should be retained or removed. By default, this content is removed for security, but setting the option to `true` allows HTML-like content in comments to be preserved when needed. + +=== Split button tooltip configuration +// #TINY-8665 + +The `+chevronTooltip+` property provides custom tooltip text for the chevron button portion of split buttons. When `+chevronTooltip+` is not specified, {productname} automatically generates tooltip text using the pattern `+"{tooltip} menu"+`. The `+setTooltip+` method updates both main and chevron tooltips to maintain consistency. + +For more information, see xref:custom-split-toolbar-button.adoc[Split toolbar buttons]. + +=== New User Lookup API for retrieving and caching user details +// #TINY-11974 + +{productname} {release-version} introduces a new xref:userlookup.adoc[User Lookup API] that enables integrations to retrieve and cache user details (such as names and avatars) and identify the current user within the editor. This API is particularly useful when building features that rely on user context, such as commenting systems or displaying lists of elements containing user information. + +The User Lookup API provides efficient user data management with built-in caching, reducing redundant network requests and improving performance. It can be used as a universal solution for `+_author+` and `+_author_avatar+` configurations across various plugins, including currently supported plugins such as **Suggested Edits**, **Comments**, and **Revision History**. + +Key features include: + +* **Current user identification**: Set and retrieve the active user's ID using the new xref:userlookup.adoc#user_id[`user_id`] configuration option +* **Flexible user fetching**: Configure custom user data retrieval through the xref:userlookup.adoc#fetch_users[`fetch_users`] callback function +* **Built-in caching**: Automatic caching of user data to minimize API calls +* **Fallback handling**: Automatic generation of default user information when custom fetch functions are not provided +* **Extensible user objects**: Support for custom metadata through the `custom` property + +==== Basic configuration + +The API requires two main configuration options: + +[source,js] +---- +tinymce.init({ + selector: 'textarea', + user_id: 'alextaylor', // Set the current user's unique identifier + fetch_users: (userIds) => { + // Return a Promise that resolves to an array of user objects + return Promise.all( + userIds.map(userId => + fetch(`/users/${userId}`) + .then(response => response.json()) + .catch(() => ({ id: userId })) // Fallback for failed requests + ) + ); + } +}); +---- + +==== API usage + +Once configured, the API provides two main methods: + +* `editor.userLookup.userId` - Returns the current user's ID +* `editor.userLookup.fetchUsers(userIds)` - Fetches and caches user information -=== -// #TINY-vwxyz1 +[source,js] +---- +editor.on('init', () => { + // Get current user ID + console.log('Current user:', editor.userLookup.userId); + + // Fetch multiple users + const users = editor.userLookup.fetchUsers(['user-1', 'user-2']); + + // Handle individual user promises + users['user-1'].then(user => { + console.log('User 1 name:', user.name); + }); +}); +---- -// CCFR here. +For comprehensive documentation and examples, see: xref:userlookup.adoc[User Lookup API]. +=== New `list_max_depth` option to limit list indentation +// #TINY-11937 + +{productname} {release-version} introduced a new `list_max_depth` option that allows configuration of the maximum indent depth for list items. This setting accepts a non-negative integer value, where `0` permits list creation without any indentation, and higher values set the maximum allowable indent depth. Negative values are invalid and will trigger an error. When the option is not set, list behavior remains unchanged. + +The setting applies only to list indentation and does not affect paragraph indentation. Existing content is not altered, and pasted lists that exceed the maximum indent depth will retain their structure but cannot be further indented. When multiple list items are selected, only items eligible for indentation will be indented individually—validation is applied per item, not across the full selection. + +Outdent functionality remains unaffected and always available. The state of indent and outdent controls reflects the current indentation capabilities based on this setting. + +==== Example configuration + +The following example shows a basic configuration for the `list_max_depth` option, which limits list indentation to a maximum of 2 levels: + +[source,js] +---- +tinymce.init({ + selector: "textarea", + plugins: [ + "advlist", "anchor", "autolink", "charmap", "code", "fullscreen", + "help", "image", "insertdatetime", "link", "lists", "media", + "preview", "searchreplace", "table", "visualblocks", + ], + list_max_depth: 2, + toolbar: "undo redo | styles | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image", +}); +---- + +For more information, see: xref:user-formatting-options.adoc#list_max_depth[User formatting - List max depth]. [[changes]] == Changes -{productname} {release-version} also includes the following change: +{productname} {release-version} includes the following changes: + +=== Enhanced license key system with T8LK prefix + +The license key system in {productname} 8 has been enhanced to provide improved subscription access control and streamlined renewal processes. This change primarily affects self-hosted deployments, as cloud users ({cloudname}) do not require a license key. + +[IMPORTANT] +==== +* If you use {cloudname}, no license key is required - your cloud subscription automatically includes the commercial license. +* For self-hosted deployments, all commercial license keys must use the new `T8LK:` prefix format. +* Existing TinyMCE 7 license keys cannot be made compatible with TinyMCE 8 by adding the T8LK prefix. +==== + +Key changes for self-hosted deployments: + +* New `T8LK:` prefix requirement for all commercial license keys. +* No server communication or "phone home" checks required +* Support for both date-based and version-locked keys +* Streamlined hybrid deployment configuration +* Improved support for air-gapped and offline environments + +[IMPORTANT] +==== +*Cloud Deployments:* + +* When using {cloudname}, only an API key is required - no license key needed +* Your cloud subscription automatically includes the commercial license + +*Self-hosted Deployments:* + +* Commercial use: Contact your account manager or visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to obtain a T8LK-prefixed license key +* GPL use: Set `license_key: 'gpl'` (case insensitive) +* Open source projects using premium features: Use the combined format `license_key: 'GPL+T8LK:...'` + +*Required License Key Manager Setup for Self-hosted Commercial Deployments:* + +For commercial license keys to function, the license key manager must be properly configured. **The editor will not work without this setup.** + +* **Standalone hosting** (e.g., in a `/public` folder): The `+licensekeymanager+` folder is **required** to be located within the `+plugins+` folder alongside all other plugins. +* **Bundled applications**: The `+licensekeymanager/index.js+` file is **required** to be imported, otherwise the editor will result in a disabled state. + +.Example: Importing the License Key Manager in a bundled application +[source,javascript] +---- +import 'tinymce/plugins/licensekeymanager'; +---- + +==== -=== -// #TINY-vwxyz1 +=== Upgrading from {productname} 7 -// CCFR here. +* *Cloud Users ({cloudname})*: No license key changes needed - simply update your {productname} version. +* *Self-hosted Users*: Contact your account manager to obtain a new T8LK-prefixed license key. + +For more information on the new license key system, see: xref:license-key.adoc[License Key]. + +=== DomParser no longer tries to fix some nodes when parsed with a context +// #TINY-8205 + +Previously, the `DomParser` would attempt to fix invalid HTML structures when parsing with a context, such as when inserting content into a specific element. This behavior lead to unexpected results, especially when the structure was not valid in the context of the parent element. + +In {productname} {release-version}, the `DomParser` has been updated to no longer attempt to fix invalid nodes when parsing with a context. Instead, it will validate the nodes and only insert them if they are valid in the context of their parent element. If the nodes are invalid, they will not be inserted. [[removed]] == Removed -{productname} {release-version} also includes the following removal: +{productname} {release-version} also includes the following removal: -=== -// #TINY-vwxyz1 +=== Removed undocumented `documentBaseUrl` property from Editor instances. `documentBaseURI` is the supported property now. +// #TINY-12182 -// CCFR here. +An undocumented `documentBaseUrl` property was previously accessible on `Editor` instances. This property was not part of the supported public API and could lead to confusion or inconsistent usage across implementations. +To improve API clarity and maintain a well-defined interface, the `documentBaseUrl` property has been removed. Integrators should use the officially supported `documentBaseURI` property to access the base URI of the document. [[bug-fixes]] == Bug fixes -{productname} {release-version} also includes the following bug fix: +{productname} {release-version} also includes the following bug fixes: + +=== Tabbing when a `figure` was selected didn't move the selection to the `figcaption` correctly. +// #TINY-11753 + +Previously, the `tab` key did not correctly handle nested components. Specifically, when a `CET` (Content Editable True) element was placed inside a `CEF` (Content Editable False) element such as a `figcaption`, focus behavior was unintuitive. This led to inconsistent and confusing keyboard navigation when interacting with editable nested elements like a `figcaption`. + +{productname} {release-version} addresses this issue by ensuring that pressing the `tab` key correctly moves focus to the `CET` element when it is nested within a `CEF` element. This ensures smooth and predictable keyboard navigation for nested editable elements such as a `figcaption`. + +=== Cutting a whole HTML element would add an empty paragraph. +// #TINY-12171 + +Previously, an issue was identified where cutting an entire block element, such as a `div` or `p` HTML element, resulted in the block being replaced by an empty paragraph. This behavior only occurred for blocks not contained within tables and led to inconsistent outcomes where cutting content inside tables behaved differently from outside. Additionally, the behavior diverged from that of the backspace `delete` operation. + +{productname} {release-version} resolves this issue by unifying the behavior for content both inside and outside tables. The updated implementation aligns cutting behavior with that of the backspace `delete` operation, ensuring a more consistent and predictable editing experience. + +=== Codesample dialog would not disable spellcheck as expected. +// #TINY-12120 + +Previously, the `browser_spellcheck` setting did not correctly disable spellchecking in the Codesample dialog's text area. This was because the setting was applied to the dialog’s text area rather than the main editor instance. + +In addition, the `advcode` and `code` plugin dialogs did not explicitly disable browser-based spellchecking. As a result, red underlines appeared unnecessarily in code content, regardless of the `browser_spellcheck` setting. + +=== Attempting to add a newline directly after a `block` element such as an image would cause an error. +// #TINY-12045 + +In previous versions of {productname}, the content selection logic incorrectly assumed that the target element resided within a text node. In reality, it was placed directly inside a `
` element. This mismatch led to a scenario where the selected content was mistakenly reinserted into itself, resulting in errors when pressing `Enter` immediately after an image and introducing a risk of data loss. + +This issue has been resolved in {productname} {release-version}. The selection logic has been updated to correctly identify and handle content within `
` elements such that it does not try to insert content within itself. As a result, pressing `Enter` after an image inside a `
` element no longer triggers errors or causes unintended behavior. + +=== In inline mode, pressing the back button dismissed the context toolbar and moved focus from the selected image to the editor. +// #TINY-12118 + +In inline mode, the context form toolbar incorrectly shifted focus from the selected image to the editor container. As a result, the plugin which relies on the current selection to apply changes was unable to apply attributes like `alt` text to the correct image. + +{productname} {release-version} resolves this by ensuring that the focus is preserved properly, ensuring that the plugin now applies changes such as `alt` text to the correct image in inline mode. + +=== Toolbar drawer now closes when the editor loses focus. +// #TINY-12125 -=== -// #TINY-vwxyz1 +In previous versions of {productname}, the floating toolbar remained visible even when the editor lost focus. This behavior introduced potential accessibility concerns, as the toolbar was not properly associated with the editor it controlled, potentially causing confusion for users. -// CCFR here. +In {productname} {release-version}, the toolbar now automatically closes when the editor loses focus. This ensures it is only displayed within the appropriate context, enhancing accessibility and improving the overall user experience. +=== Arrow key navigation between buttons was blocked when a button is hovered by the mouse. +// #TINY-12163 -[[security-fixes]] -== Security fixes +In previous versions of {productname}, if a button was hovered by the mouse while using arrow keys for navigation, focus would return to the previously focused element. This caused the selection to become stuck on the button with the `mouseover` event. -{productname} {release-version} includes : +{productname} {release-version} resolves this issue by preventing the `mouseover` event from being triggered again during arrow key navigation, ensuring a seamless user experience when navigating with arrow keys. -=== -// #TINY-vwxyz1 +=== It was not possible to navigate out of a `figcaption` using the left and right arrow keys in Firefox. +// #TINY-11982 -// CCFR here. +Prior to {productname} {release-version}, Firefox exhibited an issue where pressing the left or right arrow keys would not allow users to exit the image `figcaption` element. This behavior was inconsistent with other major browsers such as Google Chrome and Safari, where the arrow keys functioned as expected and allowed seamless navigation out of the `figcaption`. + +With {productname} {release-version}, this issue has been resolved. Users can now exit the `figcaption` using the left/right arrow keys in Firefox, aligning its behavior with that of other browsers. This update ensures a more consistent user experience. + +=== Decorative images would lose their decorative status when the `alt` subtoolbar was closed when using the apply button. +// #TINY-11912 + +Previously, an issue was identified where closing the `alt` subtoolbar using the `Apply` button would inadvertently remove the decorative status from an image that was already marked as decorative. This occurred because the `onSetup` API disabled the input group, leading the `Apply` logic to incorrectly interpret the image as non-decorative. + +This issue has been resolved in {productname} {release-version}. The `onSetup` and `Apply` behavior has been aligned to consistently evaluate the input group, ensuring the decorative status is preserved as expected. + +=== The HTML schema did not treat `colgroup` or `col` elements as block elements. +// #TINY-12092 + +In previous versions of {productname}, whitespace between `` and `` tags was not removed by {productname}'s HTML schema. This behavior caused the editor to preserve unnecessary whitespace characters in the table markup. + +This issue has been resolved in `{release-version}`. Both `colgroup` and `col` elements are now treated as block-level elements, ensuring that extraneous whitespace is stripped from these areas. As a result, the editor now produces cleaner and more concise table markup. + +=== Deleting a whole element would sometimes modify nearby content +// #TINY-11868 + +Previously, deleting a complete HTML element using the "Source Code" editor either by cutting `+Ctrl+X+` or `+Cmd+X+`, backspacing, or pressing delete could inadvertently modify surrounding content. For example, removing a `
` element that precedes a `

` tag could cause the `

` to be transformed into a `

`, resulting in unintended structural changes. + +This issue has been resolved in {productname} {release-version} by improving how element deletions are handled within the editor's DOM logic. Cutting or deleting a selected element now preserves the integrity and tag type of adjacent elements. Users can expect consistent and predictable editing behavior when modifying HTML source content. + +=== Strikethrough format could be added outside font size format, which renders incorrectly in some browsers. +// #TINY-12004 + +Previously, there was an issue where combining strikethrough (`s` element) and font size formatting could lead to incorrect rendering in some browsers, particularly Chrome. This occurred when the `s` (strikethrough) element was placed outside a font size `span`, causing the strikethrough line to render incorrectly. + +The fix ensures that the `s` element is now properly nested inside the font size element, improving visual consistency across browsers. + +=== Long tooltips could overflow narrow browser windows +// #TINY-11884 + +Previously, long tooltips could overflow narrow browser windows, causing the tooltip text to be partially cut off and unreadable. This issue was most noticeable with the `...` ellipsis toolbar for the "reveal or hide additional toolbar options" button, where the tooltip text would not fit within the narrow viewport. + +In {productname} {release-version}, the tooltip behavior has been improved to ensure that long tooltips are properly positioned and wrapped within narrow browser windows. This prevents overflow and ensures that the full tooltip text is visible, even in smaller viewports. + +=== Tab to create a new row in tables with a non-editable final row would freeze the editor. +// #TINY-12018 + +Previously, when tabbing into a non-editable final row of a table, the editor failed to recognize that the row was read-only and instead duplicated it. This resulted in an attempt to place the cursor in the duplicated row, which again could not be edited. The process would repeat indefinitely, creating a loop that ultimately froze the editor. + +{productname} {release-version} resolves this issue by detecting when the final row of a table is read-only and preventing the insertion of a new row in such cases. This ensures stable behavior when navigating through tables using the Tab key. + +=== Nested font sizes no longer cause excessive line spacing +// #TINY-12073 + +Previously, applying different font sizes to nested elements could result in inconsistent and overly large line heights. This affected users by introducing visual clutter and making text blocks appear misaligned or difficult to read. + +{productname} {release-version} introduces a fix that ensures line heights are calculated based on the font size visible in the new line, rather than inheriting line-height from parent element. This means that when different font sizes are applied within the same content, the line heights will be consistent and proportional to the visible font size. + +=== Improved structure retention when inserting invalid HTML fragments +// #TINY-8205 + +Previously, when inserting HTML fragments through APIs or pasting, the parser would attempt to fix invalid structures, which could lead to the loss of valid structures like tables and lists. This behavior was inconsistent and could result in unexpected outcomes when handling complex HTML content. + +In {productname} {release-version}, the parser has been updated to improve the retention of structures when inserting HTML fragments. It now validates these fragments in the context of their parent structure, ensuring that valid structures are preserved even if the fragment contains invalid HTML resulting in more predictable and desirable outcomes when handling complex HTML content. + +=== New list item was not inserted correctly when existing list item had a block element inside +// #TINY-12102 + +{productname} {release-version} resolves an issue affecting list management when parent list items contain block-level formatting. Previously, when a list item containing a sub-list was formatted as a block element (such as `

` or `

`), pressing Enter at the end of that item would incorrectly position the new list item alongside the sub-list items instead of as a sibling of the parent item. + +{productname} {release-version} addresses this by ensuring that when a user presses Enter at the end of a list item that contains block-level formatting, the new list item is correctly inserted as a sibling of the parent list item, rather than being placed incorrectly alongside the sub-list items. [[deprecated]] == Deprecated -{productname} {release-version} includes the following deprecation: +{productname} {release-version} includes the following deprecations: + +=== Java application server-based server components have been deprecated +// #DOC-3231 + +{productname} {release-version} deprecates the Java application server-based deployment method for self-hosted services. Docker containers are now the **only** supported deployment method for self-hosted services. The Java `.war` files (`ephox-spelling.war`, `ephox-image-proxy.war`, `ephox-hyperlinking.war`) will be removed in a future release. + +For information about setting up containerized server-side components using Docker containers, see: xref:bundle-intro-setup.adoc[Introduction and initial setup for containerized server-side services from the premium self-hosted bundles] + +=== Docker container services + +* Enhanced Media Embed and Link Checker service, see: xref:individual-hyperlinking-container.adoc[Deploy the {productname} hyperlinking server-side component using Docker]. +* Image Editing and Export image proxy service, see: xref:individual-image-proxy-container.adoc[Deploy the {productname} image proxy server-side component using Docker]. +* Spell Checker service, see: xref:individual-spelling-container.adoc[Deploy the {productname} spelling service server-side component using Docker]. +* Export to PDF service, see: xref:individual-export-to-pdf-on-premises.adoc[Deploy the {productname} Export to PDF service server-side component using Docker]. +* Import from Word and Export to Word services, see: xref:individual-import-from-word-and-export-to-word-on-premises.adoc[Deploy the {productname} Import from Word and Export to Word service server-side component using Docker]. + +=== The `ToggleToolbarDrawer` command's `skipFocus` option has been deprecated +// #TINY-12044 + +The `ToggleToolbarDrawer` command previously accepted a non-standard `skipFocus` option to prevent the editor from receiving focus when the command was executed. This behavior differed from other editor commands, which use the generic `skip_focus` option for the same purpose. As a result, the inconsistency lead to confusion when implementing or maintaining command logic. + +To resolve this, support for the standard `skip_focus` option has been added to the `ToggleToolbarDrawer` command. The `skipFocus` option is now **deprecated** in {productname} {release-version} and will be removed in a future release. + +.Before deprecation using the `skipFocus` option +[source] +---- +editor.execCommand('ToggleToolbarDrawer', false, { skipFocus: true }); +---- + +.After deprecation using the `skip_focus` option +[source] +---- +editor.execCommand('ToggleToolbarDrawer', false, null, { skip_focus: true }); +---- + +This change improves consistency across commands and aligns with expected usage patterns in {productname} {release-version}. + +=== Deprecated `fire()` method for event handling +// #TINY-12012 -=== The `` configuration property, ``, has been deprecated +The `fire()` method was originally deprecated in {productname} 6 in favor of the `dispatch()` method for event handling, but was never removed from the codebase. {productname} {release-version} now displays a deprecation warning when the `fire()` method is used, serving as a final notice before its removal in {productname} 9. -// placeholder here. +This long-overdue cleanup aligns the API with modern event handling conventions and removes confusion around method naming. Integrators should migrate to the `dispatch()` method to ensure compatibility with future releases. +.Deprecated approach for dispatching custom events +[source,javascript] +---- +// Deprecated in TinyMCE 8, will be removed in 9 +editor.fire('someEvent'); +---- -[[known-issues]] -== Known issues +.New approach for dispatching custom events +[source,javascript] +---- +// Use dispatch() instead +editor.dispatch('someEvent'); +---- -This section describes issues that users of {productname} {release-version} may encounter and possible workarounds for these issues. +For more information on the `dispatch()` method, see: xref:apis/tinymce.util.eventdispatcher.adoc[EventDispatcher]. -There known issue in {productname} {release-version}. +=== Deprecated `editor.selection.setContent` API +// TINY-11692 -=== -// #TINY-vwxyz1 +The `editor.selection.setContent` method has been deprecated in {productname} {release-version}. This low-level API was never intended for external use and does not guarantee consistent behavior when inserting complex content structures, such as lists. Integrators are advised to use the supported `editor.insertContent` method for reliable content insertion. -// CCFR here. \ No newline at end of file +This deprecation helps reduce confusion and aligns content insertion with {productname}'s supported APIs. diff --git a/modules/ROOT/pages/a11ychecker.adoc b/modules/ROOT/pages/a11ychecker.adoc index 240c08ac70..6abb3f1fda 100644 --- a/modules/ROOT/pages/a11ychecker.adoc +++ b/modules/ROOT/pages/a11ychecker.adoc @@ -46,300 +46,59 @@ Each rule has a severity level, which will be one of the following, listed in or * Warning * Error -[[D1]] -=== D1 - Usage of paragraphs as headings +[[document-structure-rules]] +=== Document structure rules -*Rule description:* this rule checks that `+h1+`-`+h6+` tags are used for heading content, not `+p+` tags. Not using correct heading markup will make it difficult for assistive technologies to represent and navigate through your content. +include::partial$a11y-rules/d1.adoc[] -==== {pluginname} rule details - D1 +include::partial$a11y-rules/d2.adoc[] -Notification level (severity):: Warning +include::partial$a11y-rules/d3.adoc[] -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA +include::partial$a11y-rules/d4o.adoc[] -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 +include::partial$a11y-rules/d4u.adoc[] -WCAG 2.1 specifications:: +include::partial$a11y-rules/d5.adoc[] -* https://www.w3.org/WAI/WCAG21/Techniques/html/H42.html[H42 - Using h1-h6 to identify headings]. -* https://www.w3.org/WAI/WCAG21/Techniques/html/H69.html[H69 - Providing heading elements at the beginning of each section of content]. +''' -[[D2]] -=== D2 - Sequential headings +[[html-rules]] +=== HTML rules -*Rule description:* this rule checks that headings tags are used sequentially. +include::partial$a11y-rules/h93.adoc[] -For example: A `+h1+` heading should be followed by a `+h2+` heading, not a `+h3+` heading. Using sequential headings will make it easier for assistive technology to parse your content. +''' -==== {pluginname} rule details - D2 +[[image-rules]] +=== Image rules -Notification level (severity):: Error +include::partial$a11y-rules/i1.adoc[] -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA +include::partial$a11y-rules/i2.adoc[] -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 +include::partial$a11y-rules/i3.adoc[] -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/general/G141.html[G141 - Organizing a page using headings]. +include::partial$a11y-rules/i4.adoc[] -[[D3]] -=== D3 - Adjacent links +''' -*Rule description:* this rule checks that links next to other links do not have the same `+href+` attribute. +[[table-rules]] +=== Table rules -For example: If an image link and a text link have the same `+href+` attribute, both elements should be in the same `+a+` element. If an image link and a text link point to the same URL but are two separate elements, it can be confusing for users of screen readers and other assistive technologies. +include::partial$a11y-rules/t1.adoc[] -==== {pluginname} rule details - D3 +include::partial$a11y-rules/t2.adoc[] -Notification level (severity):: Error +include::partial$a11y-rules/t3.adoc[] -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA +include::partial$a11y-rules/t4a.adoc[] -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 +include::partial$a11y-rules/t4b.adoc[] -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H2.html[H2 - Combining adjacent image and text links for the same resource]. +include::partial$a11y-rules/t4c.adoc[] -[[D4O]] -=== D4O - Ordered list structure - -*Rule description:* this rule checks that an `+ol+` element is used for ordered lists. Do not use paragraphs beginning with numbers or roman numerals instead of an `+ol+` element containing `+li+` items. This is to simplify navigation and parsing of the content for users of assistive technologies. - -==== {pluginname} rule details - D4O - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H48.html[H48 - Using ol, ul and dl for lists or groups of links]. - -[[D4U]] -=== D4U - Unordered list structure - -*Rule description:* this rule checks that a `+ul+` element is used for unordered lists. Do not use paragraphs beginning with `+*+` or `+-+` or some similar character instead of an `+ol+` element containing `+li+` items. This is to simplify navigation and parsing of the content for users of assistive technologies. - -==== {pluginname} rule details - D4U - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H48.html[H48 - Using ol, ul and dl for lists or groups of links]. - -[[D5]] -=== D5 - Contrast ratio of the text (D5A, D5B, and D5C) - -*Rule description:* this rule checks that the contrast ratio of the text is above the following values: - -* When the compliance level is set to AA, -** 4.5:1 for normal text -** 3:1 for large text -* When the compliance level is set to AAA, -** 7:1 for any text - -Text with a low contrast ratio is hard to read for users with impaired vision. - -[[D5A]] -==== {pluginname} rule details - D5A - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level AA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/general/G145.html[G145 - Ensuring that a contrast ratio of at least 3:1 exists between text (and images of text) and background behind the text]. - -[[D5B]] -==== {pluginname} rule details - D5B - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level AA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/general/G18.html[G18 - Ensuring that a contrast ratio of at least 4.5:1 exists between text (and images of text) and background behind the text]. - -[[D5C]] -==== {pluginname} rule details - D5C - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/general/G17.html[G17 - Ensuring that a contrast ratio of at least 7:1 exists between text (and images of text) and background behind the text]. - -[[H93]] -=== H93 - IDs must be unique - -*Rule description:* this rule checks that all `+id+` attributes are unique in the editor. Duplicate `+id+` attributes are known to cause problems for assistive technologies when parsing the content. - -==== {pluginname} rule details - H93 - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H93.html[H93 - Ensuring that id attributes are unique on a Web page]. - -[[I1]] -=== I1 - Image `+alt+` text - -*Rule description:* this rule checks that all images have alternative (`+alt+`) text for screen readers and other assistive technologies. - -==== {pluginname} rule details - I1 - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/general/G95.html[G95 - Providing short text alternatives that provide a brief description of the non-text content]. - -include::partial$misc/admon-accessibility-rule-i3-can-also-be-applied.adoc[] - -[[I2]] -=== I2 - Image `+alt+` text is not the image filename - -*Rule description:* this rule checks that the `+alt+` attribute text of the image is not the same as the filename of the image. - -==== {pluginname} rule details - I2 - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/general/G95.html[G95 - Providing short text alternatives that provide a brief description of the non-text content]. - -include::partial$misc/admon-accessibility-rule-i3-can-also-be-applied.adoc[] - -[[I3]] -=== I3 - Image `+alt+` text is not greater than 100 characters - -*Rule description:* this rule checks that the `+alt+` attribute text of the image is not more than 100 characters. - -An _Image alternative text should be less than 100 characters_ warning dialog presents if the alternative (`+alt+`) text is longer than 100 characters. This dialog also presents the alternative text in an editable field, for immediate repair. - -==== {pluginname} rule details - I3 - -Notification level (severity):: Warning - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: n/a. - - -[[T1]] -=== T1 - Table caption - -*Rule description:* this rule checks that all `+table+` elements have a `+caption+` element describing the data inside the table to simplify parsing and navigation of the content for users of assistive technologies. - -==== {pluginname} rule details - T1 - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H39.html[H39 - Using caption elements to associate data table captions with data tables]. - -[[T2]] -=== T2 - Complex table summary - -*Rule description:* this rule checks that all complex tables must have a `+summary+` attribute explaining to users of assistive technologies how to navigate through the data inside of the table. - -[NOTE] -==== -This rule only applies to HTML 4 content and is not checked when `+a11ychecker_html_version+` is set to `+html5+`. -==== - -==== {pluginname} rule details - T2 - -Notification level (severity):: Warning - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H73.html[H73 - Using the summary attribute of the table element to give an overview of data tables]. - -[[T3]] -=== T3 - Table caption and summary - -*Rule description:* this rule checks that the table caption and summary does not have the same text content. The caption should explain *what* the table is about while the summary should explain *how* to navigate the data inside of the table. - -[NOTE] -==== -The table `+summary+` attribute was deprecated in HTML 5, both the *what* and *how* information should be moved to the table caption. -==== - -==== {pluginname} rule details - T3 - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H73.html[H73 - Using the summary attribute of the table element to give an overview of data tables]. - -[[T4A]] -=== T4A - Table markup - -*Rule description:* this rule checks that all `+tables+` contain both `+tr+` and `+td+` elements. - -==== {pluginname} rule details - T4A - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H51.html[H51 - Using table markup to present tabular information]. - -[[T4B]] -=== T4B - Table headers - -*Rule description:* this rule checks that all `+table+` elements contain at least one table header (`+th+`) element. - -==== {pluginname} rule details - T4B - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H51.html[H51 - Using table markup to present tabular information]. - -[[T4C]] -=== T4C - Table heading scope - -*Rule description:* this rule checks that all table header (`+th+`) elements have a `+scope+` attribute clarifying what scope the heading has inside of the `+table+`. The allowed values are `+row+`, `+col+`, `+rowgroup+`, and `+colgroup+`. This is important for users of assistive technologies to be able to parse table data. - -==== {pluginname} rule details - T4C - -Notification level (severity):: Error - -https://www.w3.org/TR/WCAG21/#conformance[WCAG level]:: Level A ; Level AA ; Level AAA - -xref:a11ychecker_html_version[HTML version]:: HTML4 and HTML5 - -WCAG 2.1 specification:: https://www.w3.org/WAI/WCAG21/Techniques/html/H63.html[H63 - Using the scope attribute to associate header cells and data cells in data tables]. +''' == Options @@ -347,6 +106,8 @@ The following configuration options affect the behavior of the {pluginname} plug include::partial$configuration/a11y_advanced_options.adoc[leveloffset=+1] +include::partial$configuration/a11ychecker_alt_text_max_length.adoc[leveloffset=+1] + include::partial$configuration/a11ychecker_allow_decorative_images.adoc[leveloffset=+1] include::partial$configuration/a11ychecker_filter_issue.adoc[leveloffset=+1] diff --git a/modules/ROOT/pages/apis/tinymce.dom.domutils.adoc b/modules/ROOT/pages/apis/tinymce.dom.domutils.adoc index f524798708..4dff25f656 100644 --- a/modules/ROOT/pages/apis/tinymce.dom.domutils.adoc +++ b/modules/ROOT/pages/apis/tinymce.dom.domutils.adoc @@ -269,7 +269,7 @@ Creates HTML string for element. The element will be closed unless an empty inne [source, javascript] ---- // Creates a html chunk and inserts it at the current selection/caret location -tinymce.activeEditor.selection.setContent(tinymce.activeEditor.dom.createHTML('a', { href: 'test.html' }, 'some line')); +tinymce.activeEditor.insertContent(tinymce.activeEditor.dom.createHTML('a', { href: 'test.html' }, 'some line')); ---- ==== Parameters diff --git a/modules/ROOT/pages/apis/tinymce.dom.selection.adoc b/modules/ROOT/pages/apis/tinymce.dom.selection.adoc index 575cb1dfdb..2a2c7cd0a3 100644 --- a/modules/ROOT/pages/apis/tinymce.dom.selection.adoc +++ b/modules/ROOT/pages/apis/tinymce.dom.selection.adoc @@ -48,7 +48,9 @@ node the parent element will be returned.|`xref:apis/tinymce.dom.selection.adoc[ |xref:#select[select()]|Selects the specified element. This will place the start and end of the selection range around the element.|`xref:apis/tinymce.dom.selection.adoc[Selection]` |xref:#selectorChanged[selectorChanged()]|Executes callback when the current selection starts/stops matching the specified selector. The current state will be passed to the callback as it's first argument.|`xref:apis/tinymce.dom.selection.adoc[Selection]` -|xref:#setContent[setContent()]|Sets the current selection to the specified content. If any contents is selected it will be replaced +|xref:#setContent[setContent()]|This method has been deprecated. Use "editor.insertContent" instead. + +Sets the current selection to the specified content. If any contents is selected it will be replaced with the contents passed in to this function. If there is no selection the contents will be inserted where the caret is placed in the editor/page.|`xref:apis/tinymce.dom.selection.adoc[Selection]` |xref:#setCursorLocation[setCursorLocation()]|Move the selection cursor range to the specified node and offset. @@ -356,6 +358,8 @@ state will be passed to the callback as it's first argument. ---- setContent(content: String, args: Object) ---- +This method has been deprecated. Use "editor.insertContent" instead. + Sets the current selection to the specified content. If any contents is selected it will be replaced with the contents passed in to this function. If there is no selection the contents will be inserted where the caret is placed in the editor/page. diff --git a/modules/ROOT/pages/apis/tinymce.editor.adoc b/modules/ROOT/pages/apis/tinymce.editor.adoc index 0aa6ddec6f..3d8f8a5cc2 100644 --- a/modules/ROOT/pages/apis/tinymce.editor.adoc +++ b/modules/ROOT/pages/apis/tinymce.editor.adoc @@ -1,7 +1,7 @@ = tinymce.Editor :navtitle: tinymce.Editor :description: This class contains the core logic for a TinyMCE editor. -:keywords: Editor, addCommand, addCommandCallback, addQueryStateHandler, addQueryStateHandlerCallback, addQueryValueHandler, addQueryValueHandlerCallback, addShortcut, addVisual, baseURI, contentCSS, contentStyles, convertURL, destroy, dispatch, documentBaseURI, dom, editorUpload, execCommand, fire, focus, formatter, getBody, getContainer, getContent, getContentAreaContainer, getDoc, getElement, getParam, getWin, hasEditableRoot, hasEventListeners, hasFocus, hasPlugin, hide, id, initialized, insertContent, isDirty, isHidden, load, mode, nodeChanged, notificationManager, off, on, once, options, parser, plugins, queryCommandState, queryCommandSupported, queryCommandValue, remove, render, resetContent, save, schema, selection, serializer, setContent, setDirty, setEditableRoot, setProgressState, show, theme, translate, ui, undoManager, uploadImages, windowManager +:keywords: Editor, addCommand, addCommandCallback, addQueryStateHandler, addQueryStateHandlerCallback, addQueryValueHandler, addQueryValueHandlerCallback, addShortcut, addVisual, baseURI, contentCSS, contentStyles, convertURL, destroy, dispatch, documentBaseURI, dom, editorUid, editorUpload, execCommand, fire, focus, formatter, getBody, getContainer, getContent, getContentAreaContainer, getDoc, getElement, getParam, getWin, hasEditableRoot, hasEventListeners, hasFocus, hasPlugin, hide, id, initialized, insertContent, isDirty, isHidden, load, mode, nodeChanged, notificationManager, off, on, once, options, parser, plugins, queryCommandState, queryCommandSupported, queryCommandValue, remove, render, resetContent, save, schema, selection, serializer, setContent, setDirty, setEditableRoot, setProgressState, show, theme, translate, ui, undoManager, uploadImages, userLookup, windowManager :moxie-type: api This class contains the core logic for a TinyMCE editor. @@ -37,6 +37,7 @@ ed.render(); |contentStyles|`Array`|Array of CSS styles to add to head of document when the editor loads.|`xref:apis/tinymce.editor.adoc[Editor]` |documentBaseURI|`xref:apis/tinymce.util.uri.adoc[URI]`|URI object to document configured for the TinyMCE instance.|`xref:apis/tinymce.editor.adoc[Editor]` |dom|`xref:apis/tinymce.dom.domutils.adoc[DOMUtils]`|DOM instance for the editor.|`xref:apis/tinymce.editor.adoc[Editor]` +|editorUid|`String`|A uuid string to uniquely identify an editor across any page.|`xref:apis/tinymce.editor.adoc[Editor]` |editorUpload|`xref:apis/tinymce.editorupload.adoc[EditorUpload]`|Editor upload API|`xref:apis/tinymce.editor.adoc[Editor]` |formatter|`xref:apis/tinymce.formatter.adoc[Formatter]`|Formatter instance.|`xref:apis/tinymce.editor.adoc[Editor]` |id|`String`|Editor instance id, normally the same as the div/textarea that was replaced.|`xref:apis/tinymce.editor.adoc[Editor]` @@ -52,6 +53,7 @@ ed.render(); |theme|`xref:apis/tinymce.theme.adoc[Theme]`|Reference to the theme instance that was used to generate the UI.|`xref:apis/tinymce.editor.adoc[Editor]` |ui|`xref:apis/tinymce.editor.ui.ui.adoc[Ui]`|Editor ui components|`xref:apis/tinymce.editor.adoc[Editor]` |undoManager|`xref:apis/tinymce.undomanager.adoc[UndoManager]`|Undo manager instance, responsible for handling undo levels.|`xref:apis/tinymce.editor.adoc[Editor]` +|userLookup|`xref:apis/tinymce.userlookup.adoc[UserLookup]`|Editor user lookup API|`xref:apis/tinymce.editor.adoc[Editor]` |windowManager|`xref:apis/tinymce.windowmanager.adoc[WindowManager]`|Window manager reference, use this to open new windows and dialogs.|`xref:apis/tinymce.editor.adoc[Editor]` |=== @@ -723,7 +725,7 @@ Returns true/false if the editor is hidden or not. === load() [source, javascript] ---- -load(args: Object): String +load(args: Object) ---- Loads contents from the textarea, input or other element that got converted into an editor instance. This method will move the contents from that textarea, input or other element into the editor by using setContent @@ -733,10 +735,6 @@ so all events etc that method has will get dispatched as well. * `args (Object)` - Optional content object, this gets passed around through the whole load process. -==== Return value - -* `String` - HTML string that got set into the editor. - ''' [[nodeChanged]] @@ -949,7 +947,7 @@ so all events etc that method has will get dispatched as well. === setContent() [source, javascript] ---- -setContent(content: String, args: Object): String +setContent(content: String, args: Object) ---- Sets the specified content to the editor instance, this will cleanup the content before it gets set using the different cleanup rules options. @@ -975,10 +973,6 @@ tinymce.activeEditor.setContent('

Some html

', { format: 'html' }); * `content (String)` - Content to set to editor, normally HTML contents but can be other formats as well. * `args (Object)` - Optional content object, this gets passed around through the whole set process. -==== Return value - -* `String` - HTML string that got set into the editor. - ''' [[setDirty]] diff --git a/modules/ROOT/pages/apis/tinymce.root.adoc b/modules/ROOT/pages/apis/tinymce.root.adoc index 65c46cc4c4..60db0f8dd3 100644 --- a/modules/ROOT/pages/apis/tinymce.root.adoc +++ b/modules/ROOT/pages/apis/tinymce.root.adoc @@ -1,7 +1,7 @@ = tinymce :navtitle: tinymce :description: TinyMCE core class. -:keywords: DOM, PluginManager, ScriptLoader, ThemeManager, activeEditor, add, addI18n, baseURI, baseURL, createEditor, defaultOptions, documentBaseURL, each, execCommand, explode, get, grep, hasOwnProperty, i18n, inArray, init, is, isArray, majorVersion, makeMap, map, minorVersion, overrideDefaults, releaseDate, remove, resolve, setActive, suffix, toArray, translate, triggerSave, trim, walk +:keywords: DOM, PluginManager, ScriptLoader, ThemeManager, activeEditor, add, addI18n, baseURI, baseURL, createEditor, defaultOptions, documentBaseURL, each, execCommand, explode, get, grep, hasOwnProperty, i18n, inArray, init, is, isArray, majorVersion, makeMap, map, minorVersion, overrideDefaults, pageUid, releaseDate, remove, resolve, setActive, suffix, toArray, translate, triggerSave, trim, walk :moxie-type: api TinyMCE core class. @@ -26,6 +26,7 @@ TinyMCE core class. |i18n|`Object`|Collection of language pack data.|`xref:apis/tinymce.root.adoc[tinymce]` |majorVersion|`String`|Major version of TinyMCE build.|`xref:apis/tinymce.root.adoc[tinymce]` |minorVersion|`String`|Minor version of TinyMCE build.|`xref:apis/tinymce.root.adoc[tinymce]` +|pageUid|`String`|A uuid string to anonymously identify the page tinymce is loaded in|`xref:apis/tinymce.root.adoc[tinymce]` |releaseDate|`String`|Release date of TinyMCE build.|`xref:apis/tinymce.root.adoc[tinymce]` |suffix|`String`|Current suffix to add to each plugin/theme that gets loaded for example ".min".|`xref:apis/tinymce.root.adoc[tinymce]` |=== diff --git a/modules/ROOT/pages/apis/tinymce.userlookup.adoc b/modules/ROOT/pages/apis/tinymce.userlookup.adoc new file mode 100644 index 0000000000..02890d9ddb --- /dev/null +++ b/modules/ROOT/pages/apis/tinymce.userlookup.adoc @@ -0,0 +1,69 @@ += tinymce.UserLookup +:navtitle: tinymce.UserLookup +:description: TinyMCE User Lookup API Handles user information retrieval and caching. +:keywords: fetchUsers, userId +:moxie-type: api + +TinyMCE User Lookup API Handles user information retrieval and caching. + +[[examples]] +== Examples +[source, javascript] +---- +// Get the current user's ID from the editor options, or defaults to 'Anonymous'. +tinymce.activeEditor.userLookup.userId; + +// Fetch user information by IDs which returns a record of promises +const userPromises = tinymce.activeEditor.userLookup.fetchUsers(['user-1', 'user-2']); + +// Access individual promises by user ID +userPromises['user-1'].then(user => console.log('User 1:', user)); +userPromises['user-2'].then(user => console.log('User 2:', user)); + +// Or wait for all promises +Promise.all(Object.values(userPromises)).then((users) => { + users.forEach(user => console.log('User found:', user)); +}).catch((error) => { + console.error('Error fetching users:', error); +}); +---- + +[[summary]] +== Summary + +[[properties]] +=== Properties +[cols="2,1,4,1",options="header"] +|=== +|Name|Type|Summary|Defined by +|userId|`String`|The current user's ID retrieved from the editor options, or defaults to 'Anonymous'.|`xref:apis/tinymce.userlookup.adoc[UserLookup]` +|=== + +[[methods-summary]] +=== Methods +[cols="2,5,1",options="header"] +|=== +|Name|Summary|Defined by +|xref:#fetchUsers[fetchUsers()]|Fetches user information using a provided array of userIds.|`xref:apis/tinymce.userlookup.adoc[UserLookup]` +|=== + +[[methods]] +== Methods + +[[fetchUsers]] +=== fetchUsers() +[source, javascript] +---- +fetchUsers(userIds: string[]): Record> +---- +Fetches user information using a provided array of userIds. + +==== Parameters + +* `userIds (string[])` - - A list of user IDs to fetch information for. + +==== Return value + +* `Record>` - An object where each key is a user ID and its value is a Promise that resolves to the user's data or rejects if the user is not found. + +''' diff --git a/modules/ROOT/pages/basic-setup.adoc b/modules/ROOT/pages/basic-setup.adoc index 1bbc271311..5f11695e13 100644 --- a/modules/ROOT/pages/basic-setup.adoc +++ b/modules/ROOT/pages/basic-setup.adoc @@ -198,7 +198,8 @@ The following example is a basic {productname} configuration. + ---- In this case, the editor will be in a **read-only** state, and a notification appears stating: **"A valid API key is required to continue using {productname}. Please alert the admin to check the current API key. Click here to learn more."** @@ -47,7 +47,7 @@ For example: if your API is `+abcd1234+`: + [source,html,subs="attributes+"] ---- - + ---- + . Check the `+apiKey+` provided in the script tag: @@ -82,7 +82,7 @@ For example: if your API is `+abcd1234+`: [source,html,subs="attributes+"] ---- - + ---- To retrieve your API key, or to sign up for an API key, visit: link:{accountsignup}/[{cloudname}]. diff --git a/modules/ROOT/pages/configure-logging-services.adoc b/modules/ROOT/pages/configure-logging-services.adoc deleted file mode 100644 index 2722f9807e..0000000000 --- a/modules/ROOT/pages/configure-logging-services.adoc +++ /dev/null @@ -1,45 +0,0 @@ -= Activity logging -:description: Setting up logging for the premium server-side components. - -It may be useful to make the {productname} server-side components write to their own log file. This can assist in troubleshooting and make it easier to provide logs as part of a support ticket. - -The {productname} server-side components use the http://logback.qos.ch/manual/configuration.html[Logback] logging format. - -To write the logs to a specific file: - -. Create a logging configuration XML file. Save the snippet below as `+logback.xml+` after replacing `+{$LOG_LOCATION}+` with the full path to the destination log file (e.g. /var/log/tinymce_server_components.log). -+ -[source,xml,subs="attributes+"] ----- - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger\{36} - %msg%n - - - - - {$LOG_LOCATION} - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger\{36} - %msg%n - - - - - - - - - - - - - ----- -. Pass the configuration file to the Java application server. Assuming you've saved your `+logback.xml+` file in `+/etc/opt/tinymce+`, follow xref:introduction-to-premium-selfhosted-services.adoc#pass-the-configuration-file-to-the-java-application-server[step 4] and xref:introduction-to-premium-selfhosted-services.adoc#restart-the-java-application-server[step 5] on the _Install Server-side Components_ page to set the following JVM system property on your Java application server: -+ -.... --Dlogback.configurationFile=/etc/opt/tinymce/logback.xml -.... diff --git a/modules/ROOT/pages/content-filtering.adoc b/modules/ROOT/pages/content-filtering.adoc index 2a5896970a..e65bc480a3 100644 --- a/modules/ROOT/pages/content-filtering.adoc +++ b/modules/ROOT/pages/content-filtering.adoc @@ -5,6 +5,8 @@ include::partial$configuration/allow_conditional_comments.adoc[] +include::partial$configuration/allow_html_in_comments.adoc[] + include::partial$configuration/allow_html_in_named_anchor.adoc[] include::partial$configuration/allow_mathml_annotation_encodings.adoc[] diff --git a/modules/ROOT/pages/creating-a-skin.adoc b/modules/ROOT/pages/creating-a-skin.adoc index 5ff800439f..19f20e2fbe 100644 --- a/modules/ROOT/pages/creating-a-skin.adoc +++ b/modules/ROOT/pages/creating-a-skin.adoc @@ -67,6 +67,8 @@ _Do not edit these files directly_. Instead, use them as references when creatin * `+modules/oxide/src/less/theme/components/toolbar-button/toolbar-button.less+` The typical workflow involves copying variables from the theme folder into the skins `skin.less` file and modifying them as needed. + +NOTE: Split buttons have undergone structural changes in {productname} {productmajorversion}. Previously they used a single component structure, but now use separate components for the main button and chevron areas. See xref:migration-from-7x.adoc#split-button-css-breaking-change[split button css breaking change] ==== [NOTE] diff --git a/modules/ROOT/pages/custom-dictionaries-for-tiny-spellchecker.adoc b/modules/ROOT/pages/custom-dictionaries-for-tiny-spellchecker.adoc index 1fe8d8cacc..65bb8f1e08 100644 --- a/modules/ROOT/pages/custom-dictionaries-for-tiny-spellchecker.adoc +++ b/modules/ROOT/pages/custom-dictionaries-for-tiny-spellchecker.adoc @@ -7,7 +7,7 @@ One custom dictionary can be created for each language already supported by the spell checker (see xref:introduction-to-tiny-spellchecker.adoc#supported-languages[supported languages]) or any arbitrary language added by additional Hunspell dictionary files included in Hunspell Dictionary Path (See xref:self-hosting-hunspell.adoc[Add Hunspell dictionaries to Spell Checker]). It's also possible to define an additional "global" dictionary that contains words that are valid across all languages, such as trademarks. -A custom dictionary file for a particular language must be named with the language code of the language (see xref:introduction-to-tiny-spellchecker.adoc#supported-languages[supported languages] for language code examples), plus the suffix `+.txt+`: E.g. `+en.txt+`, `+en_gb.txt+`, `+fr.txt+`, `+de.txt+` etc. +A custom dictionary file for a particular language must be named with the language code of the language (see xref:introduction-to-tiny-spellchecker.adoc#supported-languages[supported languages] for language code examples), plus the suffix `+.txt+`: E.g. `+en.txt+`, `+en-GB.txt+`, `+fr.txt+`, `+de.txt+` etc. The "global" dictionary file for language-independent words must be called "global.txt". diff --git a/modules/ROOT/pages/custom-split-toolbar-button.adoc b/modules/ROOT/pages/custom-split-toolbar-button.adoc index 63fafd4f00..c379abd2ba 100644 --- a/modules/ROOT/pages/custom-split-toolbar-button.adoc +++ b/modules/ROOT/pages/custom-split-toolbar-button.adoc @@ -13,6 +13,8 @@ A split button contains a basic button and a menu button, wrapped up into one to |text |string |Primary button |optional |Text displayed if no icon is found. |icon |string |Primary button |optional | include::partial$misc/admon-predefined-icons-only.adoc[] +|tooltip |string |Primary button |optional |Text displayed when hovering over the main button. +|chevronTooltip |string |Chevron button |optional |Text displayed when hovering over the chevron button. If not provided, it will be generated using the tooltip of the main button. ie: `+"{tooltip} menu"+`. |onAction |`+(api) => void+` |Primary button |required |Function invoked when the basic button section is clicked. |select |`+(value: string) => boolean+` |Choice menu items |optional |default: `false` - Function run on each option when the menu is opened to determine if it should be highlighted as active. |columns |number or `+'auto'+` |Drop-down menu |optional |default: `1` - Number of columns for the list of options. When set to more than 1 column, only the icon for each item will be shown. @@ -35,6 +37,7 @@ include::partial$misc/admon-predefined-icons-only.adoc[] 3+| |setText |`+(text: string) => void+` |Sets the text label to display. |setIcon |`+(icon: string) => void+` |Sets the icon of the button. +|setTooltip |`+(tooltip: string) => void+` |Sets the main button tooltip. |=== [[split-button-example-and-explanation]] diff --git a/modules/ROOT/pages/editor-and-features.adoc b/modules/ROOT/pages/editor-and-features.adoc index 96b67a2cac..8868ce3fe3 100644 --- a/modules/ROOT/pages/editor-and-features.adoc +++ b/modules/ROOT/pages/editor-and-features.adoc @@ -20,7 +20,7 @@ The following example adds a script tag into the application that inserts the co [source,html,subs="attributes+"] ---- - + ---- [cols="1,2,12",options="header"] @@ -28,6 +28,7 @@ The following example adds a script tag into the application that inserts the co | |Value |Description |1 |no-api-key |Replace with your api key |2 |origin |A `+referrerpolicy+` specifies how much of the current page's URL is sent in the `+Referer+` header when the browser fetches page resources (for example, the {productname} editor). The use of the `+Referer+` header ensures API keys are only used on domains registered to their owners. We only care about the domain portion however (similar to the operation of `+Origin+` header), so for improved performance and privacy always set the `+referrerpolicy+` to `+origin+` when requesting {cloudname} resources. +|3 |anonymous |the `+crossorigin="anonymous"+` attribute is required on all script tags loading {productname} from {cloudname}. This attribute ensures consistent Origin header behavior for license key validation and improves security for cross-origin script loading. |=== image::scripttag.png[Script Tag Description] @@ -79,13 +80,15 @@ Migrating from a self-hosted environment to {cloudname} is easy. Remove the exis NOTE: The script tag typically references `+tinymce.min.js+` hosted within the application or available at a legacy CDN. -Replace the script tag with the following: +Replace the script tag with the following, making sure to include both required attributes (`referrerpolicy` and `crossorigin`): [source,html,subs="attributes+"] ---- - + ---- +NOTE: When migrating to {cloudname}, both the `referrerpolicy="origin"` and `crossorigin="anonymous"` attributes are required for optimal performance and cross-browser functionality. + === Step 2: Update custom plugin paths Reference xref:editor-important-options.adoc#external_plugins[external_plugins] to ensure custom plugins or modified plugins continue to function in the {cloudname} deployment. diff --git a/modules/ROOT/pages/editor-command-identifiers.adoc b/modules/ROOT/pages/editor-command-identifiers.adoc index c304ab5bb1..134b326630 100644 --- a/modules/ROOT/pages/editor-command-identifiers.adoc +++ b/modules/ROOT/pages/editor-command-identifiers.adoc @@ -155,7 +155,7 @@ The commands in the following table are provided by the {productname} editor and |mceTogglePlainTextPaste |Toggles paste as plain text. |mceToggleVisualAid |Toggles the visual aids for: tables without borders and anchors. |ToggleSidebar |Closes the current sidebar, or toggles the sidebar if the sidebar name is provided as a value (`__`). -|ToggleToolbarDrawer |Toggles the Toolbar Drawer. For information on toolbars, see: xref:toolbar-configuration-options.adoc#toolbar[User interface options - Toolbar]. +|ToggleToolbarDrawer |Toggles the Toolbar Drawer. Can be used with the `skip_focus` option to prevent focusing the editor. For information on toolbars, see: xref:toolbar-configuration-options.adoc#toolbar[User interface options - Toolbar]. |=== .Examples @@ -199,7 +199,7 @@ tinymce.activeEditor.execCommand('mceTogglePlainTextPaste'); tinymce.activeEditor.execCommand('mceToggleVisualAid'); tinymce.activeEditor.execCommand('ToggleSidebar'); /* OR */ tinymce.activeEditor.execCommand('ToggleSidebar', false, ''); -tinymce.activeEditor.execCommand('ToggleToolbarDrawer'); +tinymce.activeEditor.execCommand('ToggleToolbarDrawer', false, null, { skip_focus: true }); ---- [[core-table-commands]] @@ -614,7 +614,7 @@ The following command states can be queried using the xref:apis/tinymce.editor.a |Strikethrough |Returns `+true+` if the content is formatted using the same markup as the {productname} `+Strikethrough+` command. |Subscript |Returns `+true+` if the content is formatted using the same markup as the {productname} `+Subscript+` command. |Superscript |Returns `+true+` if the content is formatted using the same markup as the {productname} `+Superscript+` command. -|ToggleToolbarDrawer |Returns `+true+` if the Toolbar Drawer is open. The state can be controlled by the {productname} `+ToggleToolbarDrawer+` command. +|ToggleToolbarDrawer |Returns `+true+` if the Toolbar Drawer is open. The state can be controlled by the {productname} `+ToggleToolbarDrawer+` command. When controlling the state, use the `skip_focus` option (recommended) instead of the deprecated `skipFocus` option. |Underline |Returns `+true+` if the content is formatted using the same markup as the {productname} `+Underline+` command. |=== diff --git a/modules/ROOT/pages/editor-plugin-version.adoc b/modules/ROOT/pages/editor-plugin-version.adoc index 34356c31a5..25113309f6 100644 --- a/modules/ROOT/pages/editor-plugin-version.adoc +++ b/modules/ROOT/pages/editor-plugin-version.adoc @@ -10,21 +10,21 @@ The example below shows the default way to load {productname} {productmajorversi [source,html,subs="attributes+"] ---- - + ---- To load a specific version of {productname} {productmajorversion} other than the latest release, replace the `{productmajorversion}` in the URL with the desired version. For example, to load a minor version such as {productname} `{productmajorversion}.1`, use the following URL: [source,html,subs="attributes+"] ---- - + ---- To load a specific patch version, replace the `{productmajorversion}` in the URL with the desired patch version. For example, to load {productname} `{productmajorversion}.1.2`, use the following URL: [source,html,subs="attributes+"] ---- - + ---- [TIP] @@ -55,7 +55,7 @@ This channel deploys the latest release of {productname} that has passed our qua [source,html,subs="attributes+"] ---- - + ---- [#{productmajorversion}-testing-release-channel] @@ -68,7 +68,7 @@ This channel deploys the current *release candidate* for the `{productmajorversi [source,html,subs="attributes+"] ---- - + ---- [#{productmajorversion}-dev-release-channel] @@ -86,7 +86,7 @@ The current version of {productname} available on the `{productmajorversion}-dev [source,html,subs="attributes+"] ---- - + ---- For more details, check out the xref:editor-and-features.adoc[{productname} editor via {cloudname}]. @@ -106,7 +106,7 @@ The `plugins.min.js` script loads every premium plugin the API key is entitled t [source,html,subs="attributes+"] ---- - + ---- === `plugins.min.js` with Exclusions for Specific Plugins @@ -115,7 +115,7 @@ To exclude specific premium plugins from `plugins.min.js` because you are self-h [source,html,subs="attributes+"] ---- - + ---- [NOTE] @@ -131,7 +131,7 @@ The `cloud-plugins.min.js` script allows loading of specific premium plugins fro [source,html,subs="attributes+"] ---- - + ---- [NOTE] diff --git a/modules/ROOT/pages/export-to-pdf-with-jwt-authentication-nodejs.adoc b/modules/ROOT/pages/export-to-pdf-with-jwt-authentication-nodejs.adoc index e597a4f8d9..f30e8a5dae 100644 --- a/modules/ROOT/pages/export-to-pdf-with-jwt-authentication-nodejs.adoc +++ b/modules/ROOT/pages/export-to-pdf-with-jwt-authentication-nodejs.adoc @@ -30,7 +30,8 @@ Inside the `public` folder where you created the `index.html` file add the HTML TinyMCE with Export to PDF + ---- == Step 2: Specify purchased TinyMCE plugins and toolbar buttons @@ -37,7 +37,7 @@ The following is a complete example, where: - + diff --git a/modules/ROOT/pages/import-from-word-with-jwt-authentication-nodejs.adoc b/modules/ROOT/pages/import-from-word-with-jwt-authentication-nodejs.adoc index 51078cfd4d..13cd80da77 100644 --- a/modules/ROOT/pages/import-from-word-with-jwt-authentication-nodejs.adoc +++ b/modules/ROOT/pages/import-from-word-with-jwt-authentication-nodejs.adoc @@ -30,7 +30,8 @@ Inside the `public` folder where you created the `index.html` file add the HTML TinyMCE with Import from Word diff --git a/modules/ROOT/pages/mediaembed-server-config.adoc b/modules/ROOT/pages/mediaembed-server-config.adoc index 8098f3b665..34b0da8f54 100644 --- a/modules/ROOT/pages/mediaembed-server-config.adoc +++ b/modules/ROOT/pages/mediaembed-server-config.adoc @@ -2,7 +2,7 @@ :description: Instructions for getting the Enhanced Media Embed server configured. :keywords: enterprise, pricing, video, youtube, vimeo, mp3, mp4, mov, movie, clip, film, link, linkchecking, linkchecker, mediaembed, media -Once you have the xref:introduction-to-premium-selfhosted-services.adoc[server-side component] installed, additional configuration to your `+application.conf+` file is required. (Don't forget to restart the Java application server after updating the configuration.) +Once you have the xref:individual-hyperlinking-container.adoc[Deploy the {productname} hyperlinking server-side component using Docker] installed, additional configuration to your `+application.conf+` file is required. (Don't forget to restart the Docker container after updating the configuration.) The Enhanced Media Embed service allows you to choose between using your own https://iframely.com/[Iframely] account, configuring custom http://oembed.com/[oEmbed] endpoints or using a combination of both. diff --git a/modules/ROOT/pages/migration-from-7x.adoc b/modules/ROOT/pages/migration-from-7x.adoc index e7c6054b80..cce056d84a 100644 --- a/modules/ROOT/pages/migration-from-7x.adoc +++ b/modules/ROOT/pages/migration-from-7x.adoc @@ -3,5 +3,594 @@ :description: Guidance for migrating from TinyMCE 7 to TinyMCE 8 :keywords: migration, considerations, premigration, pre-migration :release-version: 8.0 +:page-toclevels: 3 -// TODO \ No newline at end of file +== Introduction + +This guide provides a comprehensive overview of the breaking changes introduced in {productname} {release-version}, along with the necessary steps to migrate from {productname} 7.x. It covers key updates to APIs, plugins, and service configurations, including deprecated methods, renamed components, and removed features. These changes are designed to enhance performance, simplify configuration, and align with modern web standards, ensuring a smoother transition and continued compatibility for your integrations. + +[IMPORTANT] +.Breaking Changes Quick Reference +==== +The following table summarizes all breaking changes in {productname} {release-version}. Each item links to detailed information further in the guide. + +Any items marked **"High"** level require immediate attention during migration. + +[cols="2,3,1",options="header"] +|=== +|Breaking Change |Impact |Level +|xref:license-key-system-update[License Key System] +|Self-hosted deployments now require a new license key format and license key manager. Old keys are **not compatible**. +|High + +|xref:dompurify-update-breaking-change[DOMPurify Update] +|Sanitization is now stricter; content previously allowed may be stripped or altered. +|High + +|xref:editor-selection-setcontent-deprecated[editor.selection.setContent] +|Method deprecated. Use `editor.insertContent` instead. +|Medium + +|xref:fire-method-deprecation[fire()] +|Method deprecated. Use `dispatch()` for event handling. +|Medium + +|xref:editor-documentbaseurl-removal[editor.documentBaseUrl] +|Undocumented property removed. Use `editor.editorManager.documentBaseURI` instead. +|Low + +|xref:skipfocus-consolidation[skipFocus and skip_focus] +|Options consolidated to `skipFocus` in `ToggleToolbarDrawer`. +|Low + +|xref:split-button-css-breaking-change[Split buttons] +|Split button CSS classes and structure have changed. +|Low +|=== +==== + +[[license-key-system-update]] +=== Transition from Version 7 License Keys to Version {release-version} License Keys +// #EPIC-192 + +[IMPORTANT] +==== +This section applies to self-hosted installations only. For cloud deployments, license key management is handled automatically. +==== + +{productname} {release-version} introduces an enhanced license key system that requires specific attention during migration. + +The complete licensing documentation xref:license-key.adoc[License Key Management] covers: + +* Detailed explanations of all license types (GPL, Commercial, GPL with Premium Features) +* Time-based vs Version-locked license key differences +* License states (Active, Grace Period, Expired, Invalid) +* Deployment options (Cloud-only, Self-hosted, Hybrid) +* Step-by-step configuration examples for each setup +* Commercial License Key Manager setup and requirements +* Troubleshooting and FAQ + +**Impact**: The new license key system introduces breaking changes that require updates to your configuration and code. + +**Key Migration Considerations**: + +* *License Key Format Change:* +** Version 7 keys are: Not compatible with {productname} {release-version}. +** New keys use the prefix `T8LK:` for commercial licenses or `GPL+T8LK:` for GPL with Premium Features. +* *Mandatory Key Requirement:* Self-hosted deployments **now require** a valid license key; without one, the editor will be set to `readonly`. +* *Commercial License Manager:* Self-hosted commercial deployments **require** the new License Key Manager addon. + +**Migration Steps:** + +. *Obtain New License Key:* ++ +* link:https://www.tiny.cloud/contact/[Contact us] to obtain a new {productname} {release-version} license key, or use `gpl` for the open source version. See: xref:license-key.adoc#setting-the-license[setting the license] for details. ++ +. *Update Configuration:* ++ +[source, javascript] +---- +// Old TinyMCE 7 configuration +tinymce.init({ + selector: '#editor', + // No license key required +}); + +// New TinyMCE 8 configuration +tinymce.init({ + selector: '#editor', + license_key: 'T8LK:...' // New format required +}); +---- + +==== License Key Manager Setup + +When migrating to {productname} {release-version} with a commercial license, the License Key Manager addon is required for the editor to operate. The setup varies based on your deployment method: + +*CDN/Static Hosting:* + +* Ensure the supplied `licensekeymanager` folder is in your {productname} plugins directory: + +[tree] +---- +your-site/ +├── tinymce/ +│ └── plugins/ +│ ├── licensekeymanager/ # Add this folder +│ │ ├── plugin.min.js +│ │ └── index.js +│ └── ... other plugins +---- + +*NPM/Module Bundler:* + +Install {productname} and ensure the license key manager is imported: + +[source, javascript] +---- +// Import TinyMCE +import tinymce from 'tinymce'; + +// Import the license key manager +import 'tinymce/plugins/licensekeymanager'; + +tinymce.init({ + selector: '#editor', + license_key: 'T8LK:...' // New format required +}); +---- + +*React/Next.js:* + +When using the `@tinymce/tinymce-react` package: + +[source, javascript] +---- +import { Editor } from '@tinymce/tinymce-react'; +import 'tinymce/plugins/licensekeymanager'; + +export default function MyEditor() { + return ( + + ); +} +---- + +*PHP/Laravel:* + +Ensure the license key manager is included when publishing {productname} assets: + +[source, php] +---- + + + +---- + +[IMPORTANT] +==== +* The license key manager is automatically included when using {companyname} Cloud. +* The plugin does not need to be added to the `plugins` configuration option. +* For bundled applications, the license key manager must be loaded before {productname} initialization. +* For bundled applications, ensure the license key manager is not excluded during build optimization. +==== + +For complete details on license key manager setup and troubleshooting, see xref:license-key.adoc##setting-up-the-commercial-license-key-manager[Setting up the Commercial License Key Manager]. + +**License Migration checklist:** + +* [ ] Contact support for new {productname} {release-version} license key or use GPL for the open source version +* [ ] Install license key manager addon for commercial licenses +* [ ] Update configuration with new license key format +* [ ] Test editor functionality with new license +* [ ] Verify all premium features are working + +[[dompurify-update-breaking-change]] +=== DOMPurify Update and Stricter Sanitization (Breaking Change) +// #TINY-12056 + +{productname} {release-version} updates the DOMPurify dependency to version 3.2.6 and enables the `SAFE_FOR_XML` flag by default. This is a breaking change: content that previously passed sanitization in {productname} 7 may now be stripped or altered during the sanitization process. + +[IMPORTANT] +==== +This change improves security and aligns with DOMPurify's recommended defaults. However, existing content and integrations that relied on the previous, less strict sanitization behavior may be impacted. +==== + +**Key Changes**: + +* **DOMPurify upgraded to 3.2.6** +* **`SAFE_FOR_XML` enabled** — This setting enforces stricter handling of comments and attribute values, preventing certain XSS vectors. +* **Content Impact** — HTML comments containing tags, Internet Explorer conditional comments, and attributes with HTML-like values may now be removed during sanitization. Content that was previously allowed may be stripped. + +**Impact**: This change improves security by preventing potential XSS attacks through comments and attributes that were previously allowed. However, it may also result in content being stripped or altered unexpectedly. + +**Migration Steps:** + +* Review workflows and test content that previously relied on relaxed sanitization. +* {productname} now provides the xref:content-filtering.adoc#allow_html_in_comments[Content Filtering: allow_html_in_comments option] option. Enabling this option allows HTML tags in comments with sanitization still enabled. + +[WARNING] +Using `allow_html_in_comments` increases the risk of XSS vulnerabilities. xref:security.adoc#allow_html_in_comments[allow_html_in_comments] is not recommended for production use unless you fully understand the implications and have appropriate security measures in place. + +.Example: Content Differences +|=== +|Content |{productname} 7 Output |{productname} {release-version} Output + +|`
` +|`
` +|`
` + +|`` +|`

` +|`` + +|`` +|`` +|`` +|=== + +[NOTE] +==== +For information on disabling DOMPurify sanitization (not recommended), see xref:security.adoc#xss_sanitization-option[xss_sanitization option]. +==== + +== Core Changes + +[[split-button-css-breaking-change]] +=== Split Button Styling Update for Custom Skins +// #TINY-8665 + +{productname} {productmajorversion}, xref:custom-split-toolbar-button.adoc[split toolbar buttons] now render as two distinct components: one for the primary action and one for the dropdown chevron. + +This structural change modifies the DOM layout of split buttons and may break custom CSS rules that rely on the previous structure. + +**Impact**: This change only affects integrators using *custom skins*. + +**Migration Guide:** + +If your implementation includes a custom skin, follow these steps to ensure compatibility: + +* [ ] Confirm whether your project uses a custom skin. +* [ ] **Rebuild your custom skin** using the {productname} {productmajorversion} codebase. See xref:creating-a-skin.adoc[Creating a Skin] for instructions. +* [ ] **Update your split button usage** to align with the new structure, including support for the `chevronTooltip` option. Refer to xref:custom-split-toolbar-button.adoc[Split Toolbar Buttons] for updated configuration details. +* [ ] **Test the rendering and interaction** of split buttons in your editor to verify expected behavior. + +**Summary of Changes:** + +* Split buttons now render as two separate DOM elements. +* CSS selectors and styles that depended on the old structure may no longer apply correctly. +* The `chevronTooltip` API option is now supported. + + +== Core API Changes + +[discrete] +=== Breaking Changes Overview + +IMPORTANT: The following sections detail important changes that require updates to your code. Please review each section carefully. + +=== Updated Methods + +[[skipfocus-consolidation]] +==== skipFocus and skip_focus +// #TINY-12044 + +The `skipFocus` and `skip_focus` options for the `ToggleToolbarDrawer` command have been consolidated into a single, more consistent argument. This reduces API complexity and clarifies the intended behavior. + +**Impact**: This change simplifies focus management, reducing the risk of confusion and unexpected behavior. + +**Migration steps:** + +[source, javascript] +---- +// Old approach (Deprecated) in TinyMCE 8 +editor.execCommand('ToggleToolbarDrawer', false, { skipFocus: true }) + +// New approach (Recommended) +editor.execCommand('ToggleToolbarDrawer', false, null, { skip_focus: true }) +---- + +**Migration checklist:** + +* [ ] Locate all instances of `ToggleToolbarDrawer` command usage +* [ ] Replace `skip_focus` with `skipFocus` in command options +* [ ] Update any custom plugins using this command +* [ ] Test toolbar drawer behavior after changes + +''' + +=== Removed Methods + +[[editor-documentbaseurl-removal]] +==== editor.documentBaseUrl +[.discrete] +// #TINY-12182 + +The undocumented `editor.documentBaseUrl` property has been removed. + +.Example Usage +[source,javascript] +---- +// Removed in TinyMCE 8 +console.log('documentBaseUrl', editor.documentBaseUrl); + +// Use this instead +console.log('documentBaseURI', editor.documentBaseURI.getURI()); +---- + +TIP: Use `editor.documentBaseURI.getURI()` for all base URL operations. + +**Impact**: This change improves URL handling consistency by removing an undocumented API that was not aligned with the documented `documentBaseURI` property. + +**Migration steps:** + +To update all references of `documentBaseUrl` to the new API, replace any usage of `editor.documentBaseUrl` (or similar) with `editor.documentBaseURI.getURI()`. The property `documentBaseUrl` has been removed, and the correct way to access the document base URL is now through the `documentBaseURI` property, which is a URI object. You can then call `.getURI()` on it to get the string value of the URL. + +.For example, update this: +[source, js] +---- +const baseUrl = editor.documentBaseUrl; +---- + +to: + +[source, js] +---- +const baseUrl = tinymce.activeEditor.documentBaseURI.getURI(); +---- + +This change is necessary because the undocumented `editor.documentBaseUrl` API has been removed to improve URL handling consistency. The new approach uses the documented `documentBaseURI` property, which provides a URI object with methods such as `getURI()` to retrieve the full URL string. + +For more information see: link:https://www.tiny.cloud/docs/tinymce/latest/apis/tinymce.editor/#properties[tinymce.editor/#properties]. + +**Migration checklist:** + +* [ ] Search your codebase for all instances of `editor.documentBaseUrl`. +* [ ] Replace them with `tinymce.activeEditor.documentBaseURI.getURI()` (or `editor.documentBaseURI.getURI()` if you have an `editor` reference). + +''' + +=== Deprecated Methods + +[[editor-selection-setcontent-deprecated]] +==== editor.selection.setContent +[.discrete] +// #TINY-12109 + +The `editor.selection.setContent` API has been deprecated and will be removed in {productname} 9. + +*Impact*: This change simplifies content manipulation by consolidating insertion methods. + +**Migration steps:** + +To replace `editor.selection.setContent`, use `editor.insertContent` instead. The new method is more consistent with other content manipulation methods in {productname}. + +.Example Usage +[source,javascript] +---- +// Deprecated in TinyMCE 8, will be removed in 9 +editor.selection.setContent('

New content

'); + +// Recommended replacement +editor.insertContent('

New content

'); +---- + +**Migration checklist:** + +* [ ] Replace all instances of `editor.selection.setContent` with `editor.insertContent` +* [ ] Update custom plugins that use the old method +* [ ] Test content insertion in your editor instances + +[[fire-method-deprecation]] +==== `fire()` +// #TINY-12012, ref TINY-8102 + +The `fire()` method has been replaced by `dispatch()` for event handling. The `fire()` method will be removed in {productname} 9 to avoid confusion with its name. + +[source, javascript] +---- +// Deprecated in TinyMCE 8, will be removed in 9 +// Old approach for dispatching custom events +editor.fire('someEvent'); + +// New approach for dispatching custom events +editor.dispatch('someEvent'); +---- + +**Impact**: This change aligns {productname} with modern event handling conventions, making the API more intuitive for developers. + +**Migration checklist:** + +* [ ] Search codebase for all uses of the `fire()` method +* [ ] Replace each instance with `dispatch()` +* [ ] Review and update third-party plugins +* [ ] Test all custom event handling + +''' + +=== Plugin Updates + +==== Language Pack Filename Changes +// #TINY-12090 + +Language pack filenames have been standardized to follow the RFC5646 format. This update ensures consistent language handling across platforms and improves internationalization support. While both the legacy underscore format (e.g., `en_GB.js`) and the new hyphenated format (e.g., `en-GB.js`) are supported in {productname} {release-version}, the underscore format is deprecated and will be removed in {productname} 9. Migrating to the RFC5646 format now will ensure future compatibility and reduce maintenance overhead during upcoming upgrades. + +**Impact**: Custom language packs and configurations using the underscore-based format should update before upgrading to {productname} 9 to avoid loading failures. + +**Migration checklist:** + +* [ ] Identify all language pack files in your deployment +* [ ] Rename files to RFC5646 format (e.g., `en_GB.js` → `en-GB.js`) +* [ ] Update configuration references to language files +* [ ] Update build scripts that handle language files +* [ ] Test language switching in your application +* [ ] Update custom translation files to use the new format + +[source, javascript] +---- +// Deprecated format (supported only in versions 8.x) +language_url: '/langs/en_GB.js' + +// Recommended format +language_url: '/langs/en-GB.js' +---- + +[IMPORTANT] +Support for the underscore format will be removed in {productname} 9. Early migration is recommended. + +==== Update to Image and Accessibility Checker Plugins +// #TINY-12226 + +The Image and Accessibility Checker plugins now follow the latest W3C standards for decorative images, requiring an empty alt attribute rather than a `+role="presentation"+` attribute. This change helps improve accessibility support. + +**Impact**: Customers using these plugins will need to update their configurations to ensure continued compliance with accessibility standards. + +**Migration checklist:** + +* [ ] Identify images previously using `role="presentation"` for decorative purposes in your content +* [ ] Replace those with empty alt attributes `alt=""` +* [ ] Update image plugin configuration if customized +* [ ] Test accessibility checker with updated content + +For more information on the changes, see: xref:a11ychecker.adoc##image-rules[Accessibility Checker: Image rules]. + +=== Cross-Origin Resource Loading Configuration +// #TINY-12228, TINY-12326 + +When upgrading to {productname} 8, you will need to review and possibly update how your integration handles cross-origin resource loading. {productname} 8 provides a new configuration option for controlling the `crossorigin` attribute on loaded resources. + +**What to check:** + +. If you're using {cloudname}: ++ +* Ensure your script tag includes both required attributes: ++ +[source,html,subs="attributes+"] +---- + +---- ++ +. If your application loads resources (scripts or stylesheets) from different domains: ++ +* Configure the new crossorigin function to control the `crossorigin` attribute for all resources. ++ +.Example: Configuring the crossorigin function +[source, javascript] +---- +const crossOriginFunction = (url, resourceType) => { + // Returning 'anonymous' or 'use-credentials' here would explicitly set the attribute + return 'anonymous'; + // return 'use-credentials'; + // return undefined; // Omits the 'crossorigin' attribute for all resources by returning undefined +}; + +tinymce.init({ + selector: "textarea", + crossorigin: crossOriginFunction +}); +---- ++ +. If you're using content_css from a different domain: + +* The `content_css_cors` option takes precedence for stylesheets. +* Review your `content_css` configuration if you use cross-origin stylesheets. + +**Migration checklist:** + +* [ ] Verify script tag attributes for Cloud deployments. +* [ ] Configure `crossorigin` function if using cross-origin resources. +* [ ] Test resource loading in your deployment environment. +* [ ] Review `content_css` configuration if using cross-origin stylesheets. + +For complete details on the new crossorigin function API, see: xref:tinymce-and-cors.adoc#crossorigin[crossorigin configuration option]. + +=== Technical Cleanup + +==== Removed Empty Files +// #TINY-11287, #TINY-12084 + +Several empty files have been removed from the codebase to reduce clutter and improve maintenance: + +* Empty CSS file from the **Comments** plugin +* Empty LESS file from the **Mentions** plugin + +**Impact**: These changes have no functional impact but may affect custom build processes that explicitly reference these files. + +**Migration checklist:** + +* [ ] Check build processes for references to Comments plugin CSS +* [ ] Check build processes for references to Mentions plugin LESS +* [ ] Remove any imports of these empty files +* [ ] Test Comments and Mentions plugins after removal + +=== Service and Configuration Changes + +==== Discontinuation of Medical English (UK) +// #EPIC-255 + +[WARNING] +The "Medical English (UK)" dictionary has been removed due to licensing constraints. Customers using this feature must update their configurations accordingly. + +**Impact**: Users relying on this dictionary will need to make alternative arrangements for medical-specific spell checking. + +**Migration checklist:** + +* [ ] Remove "Medical English (UK)" from spellchecker configurations +* [ ] Remove any custom dictionary integrations related to Medical English +* [ ] Test spellchecker functionality with remaining dictionaries +* [ ] Configure alternative medical dictionary if required + +==== Decoupling of Service Versions from {productname} Editor +// #EPIC-247, #EPIC-265 + +Services previously bundled with the editor, such as Java Servlet services, are no longer included in {productname} {release-version} packages. Customers should migrate to xref:bundle-intro-setup.adoc[Containerized service deployments] or consider alternative hosting options. + +**Impact**: This reduces the dependency between the editor and backend services, simplifying updates and maintenance. + +**Migration steps:** + +* Update the applications deployment architecture to use xref:bundle-intro-setup.adoc[Containerized services] where applicable + +==== Transition from Java WAR Files to Containerized Services +// #EPIC-247 + +{productname} {release-version} no longer includes Java WAR files for backend services like the spell checker. Customers are required to migrate to modern Docker/OCI containers for self-hosted deployments. + +**Impact**: This reduces infrastructure complexity and aligns with modern DevOps practices. + +**Migration checklist:** + +* [ ] Inventory current WAR file deployments +* [ ] Review containerization requirements for your environment +* [ ] Plan transition timeline to containerized services +* [ ] Set up container infrastructure (Docker/Kubernetes) +* [ ] Deploy and test containerized services +* [ ] Update service connection configurations +* [ ] Contact link:{supporturl}/[{supportname}] if legacy WAR files are still needed + +For more information on deploying the server-side components using Docker, see: xref:bundle-intro-setup.adoc[Containerized service deployments]. + +== Conclusion + +Upgrading to {productname} {release-version} requires integrators to update their API calls, plugin configurations, and service integrations to accommodate the breaking changes introduced in this release. While some adjustments may involve significant code updates, these enhancements are intended to simplify development, and improve the overall editor experience. + +For more guidance, refer to the: + +* link:https://www.tiny.cloud/docs[{productname} Documentation]. +* link:https://www.tiny.cloud/contact/[Contact {supportname}] for assistance. +* Try {productname}’s new **Ask AI** widget is ready to assist you, just click the icon in the bottom-right corner of any documentation page. + +image::ask-ai/ask-ai-widget.png[Ask AI Widget, width=600, align="left"] + +== Additional Resources + +For additional details on {productname} {release-version} changes, see xref:8.0-release-notes.adoc#overview[{productname} {release-version} release notes]. diff --git a/modules/ROOT/pages/migration-from-froala.adoc b/modules/ROOT/pages/migration-from-froala.adoc index 2a9b4784a4..67c958f931 100644 --- a/modules/ROOT/pages/migration-from-froala.adoc +++ b/modules/ROOT/pages/migration-from-froala.adoc @@ -38,7 +38,7 @@ To migrate from a basic Froala 3 configuration to a basic {productname} {product + [source,html,subs="attributes+"] ---- - + ---- + Replace `+no-api-key+` with your link:{accountpageurl}/[{cloudname} API key]. @@ -119,7 +119,7 @@ The following examples show an initial Froala configuration and the migrated {pr - +
diff --git a/modules/ROOT/pages/multiple-editors.adoc b/modules/ROOT/pages/multiple-editors.adoc index dd395fb803..fc6eab32dc 100644 --- a/modules/ROOT/pages/multiple-editors.adoc +++ b/modules/ROOT/pages/multiple-editors.adoc @@ -14,7 +14,7 @@ The following example breaks the page into two separate editable areas. Each are - + + ---- diff --git a/modules/ROOT/pages/security.adoc b/modules/ROOT/pages/security.adoc index 9a60891923..8ef888a7fb 100644 --- a/modules/ROOT/pages/security.adoc +++ b/modules/ROOT/pages/security.adoc @@ -1,7 +1,7 @@ = Security guide :navtitle: Security guide -:description_short: Security information for {productname}. -:description: Information on reporting security issues, what {productname} does to protect users, and what you can do to protect your users. +:description_short: Security information for TinyMCE. +:description: Information on reporting security issues, what TinyMCE does to protect users, and what you can do to protect your users. :keywords: security, xss, scripting, vulnerability, hack, hacker, csp, mitigation, protection, protect, hsts, https NOTE: The following is _general_ security advice that may be relevant to a website or application using {productname}. @@ -113,6 +113,8 @@ include::partial$configuration/sandbox_iframes.adoc[] include::partial$configuration/convert_unsafe_embeds.adoc[] +include::partial$configuration/allow_html_in_comments.adoc[] + [[insecure-transmission-and-storage-of-data]] === Insecure Transmission and Storage of data diff --git a/modules/ROOT/pages/support.adoc b/modules/ROOT/pages/support.adoc index e6c5e79206..88b0b3631d 100644 --- a/modules/ROOT/pages/support.adoc +++ b/modules/ROOT/pages/support.adoc @@ -32,16 +32,24 @@ include::partial$misc/plugin-support-table.adoc[leveloffset=+1] include::partial$misc/support-powerpaste.adoc[leveloffset=+1] -=== Supported Application Servers: Self-hosted Enterprise +=== System Requirements: Self-hosted Enterprise -The {productname} spell checking server-side component requires a Java Web Application Server that supports Servlet Implementation API 3.0. +The {productname} server-side components are delivered as Docker/OCI container images. The following requirements must be met: -Java Development Kit:: -* JDK 8 -Java (J2EE) Application Servers:: -include::partial$misc/supported-application-servers.adoc[] - -Minimum Hardware Requirements:: -* CPU: Dual Core Processor ~ 2Ghz. For higher loads, a quad core or higher is recommended. +Host System Requirements:: +* Operating System: +** Linux +** macOS +** Windows with WSL 2 +* CPU: Dual Core Processor ~ 2Ghz. For higher loads, a quad core or higher is recommended * RAM: 4 Gigabytes of RAM available for services +* Storage: At least 10GB of free disk space for container images and data + +Container Platform Support:: +* Docker standalone +* Container orchestration platforms (such as Kubernetes) +* Cloud container services + +[NOTE] +For production deployments, we recommend using container orchestration platforms or cloud container services that provide built-in scaling and monitoring capabilities. diff --git a/modules/ROOT/pages/tiny-docs-ai.adoc b/modules/ROOT/pages/tiny-docs-ai.adoc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/ROOT/pages/tinymce-and-cors.adoc b/modules/ROOT/pages/tinymce-and-cors.adoc index 5f0a7d2c8c..b08cfbccfc 100644 --- a/modules/ROOT/pages/tinymce-and-cors.adoc +++ b/modules/ROOT/pages/tinymce-and-cors.adoc @@ -5,6 +5,8 @@ == Cross-Origin Resource Sharing related options +include::partial$configuration/crossorigin.adoc[leveloffset=+1] + include::partial$configuration/referrer_policy.adoc[leveloffset=+1] include::partial$configuration/content_css_cors.adoc[leveloffset=+1] diff --git a/modules/ROOT/pages/troubleshoot-server.adoc b/modules/ROOT/pages/troubleshoot-server.adoc index 973197b1d9..81fc806924 100644 --- a/modules/ROOT/pages/troubleshoot-server.adoc +++ b/modules/ROOT/pages/troubleshoot-server.adoc @@ -4,17 +4,21 @@ == General troubleshooting advice -. Verify that that your JavaScript configuration is correct for the relevant {productname} plugin. -. Ensure that your firewall has the appropriate ports and rules configured correctly. Be sure that the server the service is running on is accessible from the browser via the port specified in the server configuration -. Check the logs of your Java server for information. When making changes to the configuration you will need to restart the application server each time a change is made for that change to take effect. Refresh your browser window and then try the service again. +. Verify that your JavaScript configuration is correct for the relevant {productname} plugin. +. Ensure that your firewall has the appropriate ports and rules configured correctly. Be sure Docker containers are accessible from the browser via the port specified in the container configuration. +. Check the Docker container logs for information using `docker logs `. When making configuration changes, you will need to restart the containers for changes to take effect. Refresh your browser window and try the service again. == Debug server configuration If a service does not appear to be working, this is generally caused by one of the following reasons. This guide will walk you through the debugging process to identify the specific problem and how to remedy the issue. -. The `+application.conf+` file is incorrect. Please go back and follow the steps listed in the xref:introduction-to-premium-selfhosted-services.adoc#create-a-configuration-file[installation guide]. This is the most common problem - often the origins are specified without the port numbers and this can cause things to fail, eg: use `+http://localhost:8080+` instead of `+http://localhost+`. After making changes to the `+application.conf+` file, please restart your Java web server (e.g. Jetty or Tomcat). -. The `+application.conf+` file is correct, but something is wrong with one of the services. See the section below to debug the services. -. The `+application.conf+` file is correct, and the services are working, but the server-side component URLs that the editor uses are not quite right. Refer to the xref:introduction-to-tiny-spellchecker.adoc[Spell Checker], xref:editimage.adoc[Image Editing], xref:introduction-to-mediaembed.adoc[Enhanced Media Embed] and xref:linkchecker.adoc[Link Checker] plugin pages for help. +. The `+application.conf+` configuration file is incorrect. Please go back and follow the steps listed in the individual service setup guides: +* xref:individual-spelling-container.adoc[Spelling service configuration] +* xref:individual-image-proxy-container.adoc[Image Proxy service configuration] +* xref:individual-hyperlinking-container.adoc[Hyperlinking service configuration] +This is most commonly due to incorrect origin configuration - make sure to include port numbers (e.g., use `+http://localhost:8080+` instead of `+http://localhost+`). After making configuration changes, restart the Docker containers. +. The configuration is correct, but one of the services is not responding properly. See the section below to debug the services. +. The services are working, but the component URLs that the editor uses are not quite right. Refer to the xref:introduction-to-tiny-spellchecker.adoc[Spell Checker], xref:editimage.adoc[Image Editing], xref:introduction-to-mediaembed.adoc[Enhanced Media Embed] and xref:linkchecker.adoc[Link Checker] plugin pages for help. . The browser is sending a different origin than expected (and configured in `+application.conf+`). Refer to step 6 of xref:using-browser-tooling-to-investigate-services-issues[Using browser tooling to investigate services issues] == Browser-specific issues @@ -42,73 +46,46 @@ If the server is not running on a standard HTTP or HTTPS port (80 or 443) then C image::spell-checking-browser-tools.png[Using browser tools to investigate services issues] -NOTE: The value of the Origin header sent by the must match the origin specified in the `+application.conf+` server configuration. If it does not match, you must make the server configuration match the browser. +NOTE: The value of the Origin header sent by the browser must match the origin specified in the `+application.conf+` for your Docker container configuration. If it does not match, you must update your container configuration to match the browser. == Windows Server specific issues Sometimes the Origin header is never sent to the services, which results in the editor and services not working as intended. Refer to step 6 of xref:using-browser-tooling-to-investigate-services-issues[Using browser tooling to investigate services issues] and determine what the origin is - if you do not see an Origin header at all, please do the following: . Try accessing the editor web page using your machine's fully qualified domain name (FQDN) and keep the network tools open so you can see if the Origin header is sent back to the services. For example, if you have been testing on port 8080 on your local machine and the editor is instantiated on a page with path `+tinymce/index.html+`, navigate to `+http://myserver.example.com:8080/tinymce/index.html+` rather than `+http://localhost:8080/tinymce/index.html+`. -. If you now see an Origin header being sent across, alter your `+application.conf+` and replace all instances of 'localhost' with the domain name of your machine. -. Restart the Tomcat / Jetty service. +. If you now see an Origin header being sent across, update your Docker container `+application.conf+` to replace all instances of 'localhost' with the domain name of your machine. +. Restart the Docker containers. . Reload the browser page and all should work well. -[[out-of-memory-errors]] -== Out of memory errors +[[container-troubleshooting]] +== Container Troubleshooting -=== The Java application server throws "Out of Memory" errors +=== Debugging Service Issues -Even though you may have a large amount of RAM available, the Java Virtual Machine doesn't get to see all of that - by default it is limited to only 256Mb. +If you encounter issues with the containerized services: -For example, if you are using Tomcat, you can view how much memory is being consumed by apps. To do this you need to have the management console enabled. - -On a vanilla install this is done by editing the file /tomcat/install/directory/conf/tomcat-users.xml adding these lines in: - -[source,xml] +. Check the container status: ++ +[source,sh] ---- - - +docker ps ---- -Then, restart the server and go to a browser and open the default tomcat page `+http://localhost:8080+`. On the top right hand side are three buttons, the first of which should be "Server Status". Click that link, login with the details you set above and you should be able to see the memory consumption (see the figure below for an example). - -image::spell-checking-server-status.png[Spell Checking Server Status] - -=== To increase the amount of memory - -==== Tomcat - -Edit the setenv.sh (Unix) or setenv.bat (Windows) to read as follows: - -On Windows, please prefix each line with 'set' and remove the quotes . So the configuration would look like: - +. View service logs for errors or warnings: ++ [source,sh] ---- -set CATALINA_OPTS= -Dephox.config.file=/config/file/location/application.conf -set JAVA_OPTS= -Xms2048m -Xmx2048m -XX:PermSize=64m -XX:MaxPermSize=512m -Dfile.encoding=utf-8 -Djava.awt.headless=true -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 - -CATALINA_OPTS=" -Dephox.config.file=/config/file/location/application.conf" -JAVA_OPTS=" -Xms2048m -Xmx2048m -XX:PermSize=64m -XX:MaxPermSize=512m -Dfile.encoding=utf-8 -Djava.awt.headless=true -XX:+UseParallelGC -XX:MaxGCPauseMillis=100" +docker logs ---- -==== Jetty - -Edit the start.ini file to read as follows: - +. For persistent issues, collect logs for support: ++ [source,sh] ---- -#=========================================================== -# Jetty start.jar arguments -# Each line of this file is prepended to the command line -# arguments # of a call to: -# java -jar start.jar [arg...] -#=========================================================== --Xms2048m -Xmx2048m -XX:PermSize=64m -XX:MaxPermSize=512m -Dephox.config.file=/config/file/location/application.conf +docker logs > service-logs.txt ---- -Restart the service and confirm the settings have been applied like so: - -image::spell-checking-jetty-settings.png[Spell Checking Server Settings on Jetty] +TIP: When contacting support, include the service logs and details about your deployment configuration to help diagnose the issue. == Troubleshooting tools: curl diff --git a/modules/ROOT/pages/use-tinymce-inline.adoc b/modules/ROOT/pages/use-tinymce-inline.adoc index 35add3adf8..c3b580a7b5 100644 --- a/modules/ROOT/pages/use-tinymce-inline.adoc +++ b/modules/ROOT/pages/use-tinymce-inline.adoc @@ -26,7 +26,7 @@ Inline mode only works on content within a block element (such as: `+div+` or `+ - + + +---- +==== + +[TIP] +==== +* The crossorigin function runs for both scripts and stylesheets loaded by {productname}. +* Using `+'anonymous'+` sends the Origin header without credentials. +* Using `+'use-credentials'+` sends the Origin header with credentials (not recommended for most cases). +* Returning `undefined` means no crossorigin attribute will be set, as it omits the attribute entirely for the resource. +* For stylesheet resources, the `+content_css_cors+` option takes precedence over the `+crossorigin+` function. See: xref:add-css-options.adoc#content_css_cors[content_css_cors] for details about cross-origin stylesheet loading. +==== + + +For more details on the crossorigin attribute, see: link:https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin[MDN Web Docs - HTML attribute: crossorigin]. diff --git a/modules/ROOT/partials/configuration/image_proxy_service_url.adoc b/modules/ROOT/partials/configuration/image_proxy_service_url.adoc index 6787a6c76d..6227d3dba5 100644 --- a/modules/ROOT/partials/configuration/image_proxy_service_url.adoc +++ b/modules/ROOT/partials/configuration/image_proxy_service_url.adoc @@ -11,7 +11,7 @@ endif::[] == `{proxy_setting_name}` -This option configures the URL to the server-side proxy service which allows remote images hosted on different domains to be retrieved by the {pluginname} plugin. If a proxy is not configured, then remote images may not be able to be {plugin_proxy_action}. Check the xref:introduction-to-premium-selfhosted-services.adoc[Install Server-side Components] guide for details on configuring the self-hosted Java proxy service. +This option configures the URL to the server-side proxy service which allows remote images hosted on different domains to be retrieved by the {pluginname} plugin. If a proxy is not configured, then remote images may not be able to be {plugin_proxy_action}. Check the xref:individual-image-proxy-container.adoc[Deploy the {productname} image proxy server-side component using Docker] guide for details on configuring the Docker container that you will get as a part of your link:{pricingpage}/[{enterpriseversion} subscription]. NOTE: `{proxy_setting_name}` is *not* required when enabling this plugin via xref:editor-and-features.adoc[{cloudname}]. diff --git a/modules/ROOT/partials/configuration/language.adoc b/modules/ROOT/partials/configuration/language.adoc index 9045a957f7..7915ca95c4 100644 --- a/modules/ROOT/partials/configuration/language.adoc +++ b/modules/ROOT/partials/configuration/language.adoc @@ -19,20 +19,20 @@ For information on: === Example: using `+language+` -In this example we will set the editor language to Swedish. +In this example we will set the editor language to Swedish using the RFC5646 format: [source,js] ---- tinymce.init({ selector: 'textarea', // change this value according to your HTML - language: 'sv_SE' + language: 'sv-SE' }); ---- [[using-the-premium-language-packs]] === Using the premium language packs -The following professionally localized language packs are provided to paid {cloudname} and premium self-hosted deployments. To use these language packs, set the `+language+` option to the corresponding language code. No additional configuration is required. +The following professionally localized language packs are provided to paid {cloudname} and premium self-hosted deployments. To use these language packs, set the `+language+` option to the corresponding language code in RFC5646 format. No additional configuration is required. include::partial$misc/ui-languages.adoc[leveloffset=+2] diff --git a/modules/ROOT/partials/configuration/list_max_depth.adoc b/modules/ROOT/partials/configuration/list_max_depth.adoc new file mode 100644 index 0000000000..d75ef8bd43 --- /dev/null +++ b/modules/ROOT/partials/configuration/list_max_depth.adoc @@ -0,0 +1,24 @@ +[[list_max_depth]] +== `list_max_depth` + +The `list_max_depth` option sets the maximum nesting depth for lists (ordered and unordered). + +*Type:* `Number` + +*Default value:* No limit + +=== Required plugins + +This option requires the `lists` plugin to be enabled. + +=== Example + +[source,js] +---- +tinymce.init({ + selector: 'textarea', + plugins: 'lists', + toolbar: 'bullist numlist', + list_max_depth: 2 // limits list nesting to maximum of 2 levels +}); +---- diff --git a/modules/ROOT/partials/configuration/mediaembed_service_url.adoc b/modules/ROOT/partials/configuration/mediaembed_service_url.adoc index 6c448daa60..09b04dc09c 100644 --- a/modules/ROOT/partials/configuration/mediaembed_service_url.adoc +++ b/modules/ROOT/partials/configuration/mediaembed_service_url.adoc @@ -1,7 +1,7 @@ [[mediaembed_service_url]] == `+mediaembed_service_url+` -This option specifies the URL to the service that will handle your requests and return the embeddable snippets used by the *Media Embed* plugin. Please follow these xref:introduction-to-premium-selfhosted-services.adoc[instructions] to configure the *WAR* file that you will get as a part of your link:{pricingpage}/[{enterpriseversion} subscription]. This option is not required for xref:editor-and-features.adoc[{cloudname}]. +This option specifies the URL to the service that will handle your requests and return the embeddable snippets used by the *Media Embed* plugin. The service is available as a Docker container with your link:{pricingpage}/[{enterpriseversion} subscription]. For deployment instructions, see xref:individual-hyperlinking-container.adoc[Deploy the {productname} hyperlinking server-side component using Docker]. This option is not required for xref:editor-and-features.adoc[{cloudname}]. *Type:* `+String+` diff --git a/modules/ROOT/partials/configuration/spellchecker_language.adoc b/modules/ROOT/partials/configuration/spellchecker_language.adoc index 4314739a62..7161900fc3 100644 --- a/modules/ROOT/partials/configuration/spellchecker_language.adoc +++ b/modules/ROOT/partials/configuration/spellchecker_language.adoc @@ -5,7 +5,7 @@ This option specifies the default language used by Spell Checker. *Type:* `+String+` -*Default value:* `+'en_US'+` +*Default value:* `+'en-US'+` === Example: using `+spellchecker_language+` @@ -14,6 +14,6 @@ This option specifies the default language used by Spell Checker. tinymce.init({ selector: 'textarea', plugins: 'tinymcespellchecker', - spellchecker_language: 'de' + spellchecker_language: 'de' // Use ISO language code, hyphenated for regional variants (e.g., 'de-DE') }); ---- diff --git a/modules/ROOT/partials/configuration/spellchecker_languages.adoc b/modules/ROOT/partials/configuration/spellchecker_languages.adoc index d44edd128f..d366506b6d 100644 --- a/modules/ROOT/partials/configuration/spellchecker_languages.adoc +++ b/modules/ROOT/partials/configuration/spellchecker_languages.adoc @@ -8,7 +8,7 @@ This option specifies the spellchecker languages that are available to the user, *Default value:* [source,js] ---- -'English (United States)=en_US,English (United Kingdom)=en_GB,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Norwegian Bokmål=nb_NO,Norwegian Nynorsk=nn,Brazilian Portuguese=pt_BR,Portuguese=pt,Portuguese (Portugal)=pt_PT,Spanish=es,Swedish=sv,Swedish (Finland)=sv_FI,Afrikaans (South Africa)=af_ZA,English (Australia)=en_AU,English (Canada)=en_CA,English (United Kingdom)=en_GB,English (United States)=en_US,Medical English (US)=en_US-medical,Medical English (UK)=en_GB-medical,Maori (New Zealand)=mi_NZ' +'English (United States)=en-US,English (United Kingdom)=en-GB,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Norwegian Bokmål=nb-NO,Norwegian Nynorsk=nn,Brazilian Portuguese=pt-BR,Portuguese=pt,Portuguese (Portugal)=pt-PT,Spanish=es,Swedish=sv,Swedish (Finland)=sv-FI,Afrikaans (South Africa)=af-ZA,English (Australia)=en-AU,English (Canada)=en-CA,English (United Kingdom)=en-GB,English (United States)=en-US,Medical English (US)=en-US-medical,Maori (New Zealand)=mi-NZ' ---- @@ -19,6 +19,6 @@ This option specifies the spellchecker languages that are available to the user, tinymce.init({ selector: 'textarea', plugins: 'tinymcespellchecker', - spellchecker_languages: 'US English=en_US,UK English=en_GB,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Norwegian Bokmål=nb_NO,Norwegian Nynorsk=nn,Brazilian Portuguese=pt_BR,Portuguese=pt,Portuguese (Portugal)=pt_PT,Spanish=es,Swedish=sv,Swedish (Finland)=sv_FI,Afrikaans (South Africa)=af_ZA,English (Australia)=en_AU,English (Canada)=en_CA,English (United Kingdom)=en_GB,English (United States)=en_US,Medical English (US)=en_US-medical,Medical English (UK)=en_GB-medical,Maori (New Zealand)=mi_NZ' + spellchecker_languages: 'US English=en-US,UK English=en-GB,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Norwegian Bokmål=nb-NO,Norwegian Nynorsk=nn,Brazilian Portuguese=pt-BR,Portuguese=pt,Portuguese (Portugal)=pt-PT,Spanish=es,Swedish=sv,Swedish (Finland)=sv-FI,Afrikaans (South Africa)=af-ZA,English (Australia)=en-AU,English (Canada)=en-CA,English (United Kingdom)=en-GB,English (United States)=en-US,Medical English (US)=en-US-medical,Maori (New Zealand)=mi-NZ' }); ---- \ No newline at end of file diff --git a/modules/ROOT/partials/configuration/spellchecker_rpc_url.adoc b/modules/ROOT/partials/configuration/spellchecker_rpc_url.adoc index a64ba2f882..bd29189f79 100644 --- a/modules/ROOT/partials/configuration/spellchecker_rpc_url.adoc +++ b/modules/ROOT/partials/configuration/spellchecker_rpc_url.adoc @@ -1,7 +1,7 @@ [[spellchecker_rpc_url]] == `+spellchecker_rpc_url+` -This option specifies the URL of the server-side `+ephox-spelling+` service. For instructions on how to set up a Spell Checker server-side component, see: the xref:introduction-to-premium-selfhosted-services.adoc[server-side component installation guide]. +This option specifies the URL of the server-side `+ephox-spelling+` service. For instructions on how to set up a Spell Checker server-side component, see: the xref:individual-spelling-container.adoc[Deploy the {productname} spelling service server-side component using Docker]. NOTE: `+spellchecker_rpc_url+` is *not* required when enabling this plugin via xref:editor-and-features.adoc[{cloudname}] @@ -16,4 +16,4 @@ tinymce.init({ plugins: 'tinymcespellchecker', spellchecker_rpc_url: 'localhost/ephox-spelling' }); ----- +---- \ No newline at end of file diff --git a/modules/ROOT/partials/docker/spelling-service/spelling-service-installation.adoc b/modules/ROOT/partials/docker/spelling-service/spelling-service-installation.adoc index afcc0d41ef..061d819be1 100644 --- a/modules/ROOT/partials/docker/spelling-service/spelling-service-installation.adoc +++ b/modules/ROOT/partials/docker/spelling-service/spelling-service-installation.adoc @@ -175,11 +175,11 @@ spelling-tiny-1 | 2025-02-11 09:51:11.104Z [io-compute-blocker-6] INFO c.e.i.d spelling-tiny-1 | 2025-02-11 09:51:11.161Z [io-compute-blocker-6] INFO com.ephox.nectar.data.Bees$ - Loading all dictionaries from WinterTree spelling-tiny-1 | 2025-02-11 09:51:11.482Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Loading hunspell dictionary from path: /app/resources/hunspell-dictionaries and locale es spelling-tiny-1 | 2025-02-11 09:51:11.536Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Finished loading hunspell for es -spelling-tiny-1 | 2025-02-11 09:51:11.537Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Loading hunspell dictionary from path: /app/resources/hunspell-dictionaries and locale pt_BR -spelling-tiny-1 | 2025-02-11 09:51:11.881Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Finished loading hunspell for pt_BR +spelling-tiny-1 | 2025-02-11 09:51:11.537Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Loading hunspell dictionary from path: /app/resources/hunspell-dictionaries and locale pt-BR +spelling-tiny-1 | 2025-02-11 09:51:11.881Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Finished loading hunspell for pt-BR ... -spelling-tiny-1 | 2025-02-11 09:51:13.593Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Loading hunspell dictionary from path: /app/resources/hunspell-dictionaries and locale de_DE -spelling-tiny-1 | 2025-02-11 09:51:13.651Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Finished loading hunspell for de_DE +spelling-tiny-1 | 2025-02-11 09:51:13.593Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Loading hunspell dictionary from path: /app/resources/hunspell-dictionaries and locale de-DE +spelling-tiny-1 | 2025-02-11 09:51:13.651Z [io-compute-blocker-5] INFO c.e.nectar.hunspell.HunspellLoader$ - Finished loading hunspell for de-DE spelling-tiny-1 | 2025-02-11 09:51:14.142Z [io-compute-9] INFO o.h.b.c.nio1.NIO1SocketServerGroup - Service bound to address /0:0:0:0:0:0:0:0:18080 spelling-tiny-1 | 2025-02-11 09:51:14.146Z [io-compute-9] INFO o.h.blaze.server.BlazeServerBuilder - spelling-tiny-1 | _ _ _ _ _ @@ -215,7 +215,7 @@ To confirm that a request is being sent to the {pluginname} service, use: + [source, sh] ---- -curl http://localhost:18080/2/check -d '{"words": ["teh"], "language": "en_US"}' -H "Origin: http://good.com" -H "Content-Type: application/json" +curl http://localhost:18080/2/check -d '{"words": ["teh"], "language": "en-US"}' -H "Origin: http://good.com" -H "Content-Type: application/json" ---- + @@ -224,7 +224,7 @@ Finally, to verify if a request is unauthorized and originates from an incorrect + [source, sh] ---- -curl http://localhost:18080/2/check -d '{"words": ["teh"], "language": "en_US"}' -H "Origin: http://bad.com" -H "Content-Type: application/json" +curl http://localhost:18080/2/check -d '{"words": ["teh"], "language": "en-US"}' -H "Origin: http://bad.com" -H "Content-Type: application/json" ---- + @@ -245,12 +245,7 @@ tinymce.init({ selector: 'textarea#spellchecker', // change this value according to your HTML plugins: 'code tinymcespellchecker link', toolbar: 'spellchecker language spellcheckdialog', - spellchecker_language: 'en_US', + spellchecker_language: 'en-US', // Note: Using RFC5646 format with hyphen spellchecker_rpc_url: "http://localhost:18080" }); ---- - - - - - diff --git a/modules/ROOT/partials/install/basic-quickstart-base.adoc b/modules/ROOT/partials/install/basic-quickstart-base.adoc index 4138ee9009..79c886efbd 100644 --- a/modules/ROOT/partials/install/basic-quickstart-base.adoc +++ b/modules/ROOT/partials/install/basic-quickstart-base.adoc @@ -131,7 +131,7 @@ Include the following line of code in the `++` of an HTML page. [source,html,subs="attributes+"] ---- - + ---- == Initialize {productname} as part of a web form @@ -151,7 +151,7 @@ ifeval::["{productSource}" == "cloud"] - + + diff --git a/modules/ROOT/partials/integrations/angular-tech-ref.adoc b/modules/ROOT/partials/integrations/angular-tech-ref.adoc index ce1ebbcb8f..e98c75b2cf 100644 --- a/modules/ROOT/partials/integrations/angular-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/angular-tech-ref.adoc @@ -132,21 +132,18 @@ include::partial$misc/get-an-api-key.adoc[] [[licensekey]] === `+licenseKey+` -{cloudname} License key. +include::partial$integrations/common/license-key-property.adoc[] -Use this when self-hosting {productname} instead of loading from {cloudname}. For more information, see: xref:license-key.adoc[License Key]. - -*Type:* `+String+` - -*Default value:* `+undefined+` - -*Possible values:* `undefined`, `'gpl'` or a valid {productname} license key - -==== Example: using `+licenseKey+` +==== Example: Commercial license +[source,html] +---- + +---- -[source,jsx] +==== Example: using `+licenseKey+` with GPL +[source,html] ---- - + ---- [[cloudchannel]] diff --git a/modules/ROOT/partials/integrations/blazor-postinstall.adoc b/modules/ROOT/partials/integrations/blazor-postinstall.adoc index 212562feaf..05f04d7bf4 100644 --- a/modules/ROOT/partials/integrations/blazor-postinstall.adoc +++ b/modules/ROOT/partials/integrations/blazor-postinstall.adoc @@ -1,4 +1,4 @@ -. Verify the installation by checking the `+ItemGroup+` references in the project file. For example, if the project is named _BlazorApp_, the relevant file would be `+BlazorApp.csproj+` with the dependency referenced as follows: +. Verify the installation by checking the `+ItemGroup+` references in the project file. For example, if the project is named _BlazorApp_, the relevant file would be `+BlazorApp.csproj+` with the dependency referenced as follows: + [source,xml] ---- @@ -16,9 +16,9 @@ + [NOTE] ==== -The location of the script depends on the type of Blazor app, including Blazor Server and Blazor WebAssembly (WASM) which are not covered in this guide. +The location of the script depends on the type of Blazor app, including Blazor Server and Blazor WebAssembly (WASM) which are not covered in this guide. -* If using Blazor Server, add the script in `+Pages/_Host.cshtml+`, for example: +* If using Blazor Server, add the script in `+Pages/_Host.cshtml+`, for example: + [source,html] ---- @@ -35,8 +35,8 @@ The location of the script depends on the type of Blazor app, including Blazor S ==== + -. Add the `+Editor+` component to a page by either: -* Using the `+using+` directive: +. Add the `+Editor+` component to a page by either: +* Using the `+using+` directive: + [source,cs] ---- @@ -44,7 +44,7 @@ The location of the script depends on the type of Blazor app, including Blazor S ---- + -For example: +For example: + _File:_ `+Pages/Index.razor+` + @@ -58,7 +58,7 @@ _File:_ `+Pages/Index.razor+`

Welcome to your new app.

---- -* Using the component with its namespace: +* Using the component with its namespace: + [source,cs] ---- @@ -78,10 +78,10 @@ _File:_ `+Pages/Index.razor+`

Hello, world!

Welcome to your new app.

----- +---- + [IMPORTANT] -In a Blazor Web App, different render modes determine how components are rendered and how interactivity is handled. To enable JavaScript interactivity, ensure that `+@rendermode InteractiveServer+` is specified in a page component. +In a Blazor Web App, different render modes determine how components are rendered and how interactivity is handled. To enable JavaScript interactivity, ensure that `+@rendermode InteractiveServer+` is specified in a page component. + ifeval::["{productSource}" == "cloud"] @@ -91,7 +91,7 @@ ifeval::["{productSource}" == "cloud"] [source,cs] ---- ----- +---- + endif::[] @@ -101,8 +101,8 @@ ifeval::["{productSource}" != "cloud"] + [source,cs] ---- - ----- + +---- + . To load {productname} from the self-hosted package instead of the {cloudname}, configure the `+ScriptSrc+` property: diff --git a/modules/ROOT/partials/integrations/blazor-tech-ref.adoc b/modules/ROOT/partials/integrations/blazor-tech-ref.adoc index bf708c773c..bafa0b8e13 100644 --- a/modules/ROOT/partials/integrations/blazor-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/blazor-tech-ref.adoc @@ -19,7 +19,7 @@ The `+TinyMCE.Blazor+` `+Editor+` component accepts the following properties: JsConfSrc="path_to_jsObj" Conf="@yourConf" ApiKey="no-api-key" - LicenseKey="your-license-key" + LicenseKey="gpl" ScriptSrc="/path/to/tinymce.min.js" ClassName="tinymce-wrapper" /> @@ -188,19 +188,29 @@ In your component: === `LicenseKey` -Specifies the {productname} license key. Required for self-hosted deployments of {productname}. This property is not required for deployments using the {cloudname}. For more information on licensing, see: xref:license-key.adoc[License key]. -*Type:* `+String+` +include::partial$integrations/common/license-key-property.adoc[] + +==== Example: Commercial license (TinyMCE 8+) +[source,cs] +---- + +---- -==== Example using LicenseKey +Use this example when you have a commercial license for TinyMCE 8 or newer. The T8LK prefix is required. +==== Example: Open source GPL license [source,cs] ---- ---- +Use this example when you're using TinyMCE under the open source GPL license in a self-hosted environment. + === `ScriptSrc` Use the `+ScriptSrc+` property to specify the location of {productname} to lazy load when the application is not using {cloudname}. This setting is required if the application uses a self-hosted version of {productname}, such as the https://www.nuget.org/packages/TinyMCE/[{productname} NuGet package] or a .zip package of {productname}. diff --git a/modules/ROOT/partials/integrations/bootstrap-quick-start.adoc b/modules/ROOT/partials/integrations/bootstrap-quick-start.adoc index 3093086244..28be9a336e 100644 --- a/modules/ROOT/partials/integrations/bootstrap-quick-start.adoc +++ b/modules/ROOT/partials/integrations/bootstrap-quick-start.adoc @@ -20,7 +20,7 @@ ifeval::["{productSource}" == "cloud"] + [source,html,subs="attributes+"] ---- - + ---- + Replace `+no-api-key+` in the source script (`+ + ---- + Replace `no-api-key` in the source script (` @@ -139,7 +139,7 @@ ifeval::["{productSource}" == "package-manager"] - + @@ -149,7 +149,7 @@ ifeval::["{productSource}" == "package-manager"] + + + ---- The default {productname} editor will load at this location if the page is opened in a web browser. diff --git a/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc b/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc index ffb83ab3dc..a6a2da8379 100644 --- a/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc @@ -3,6 +3,7 @@ * xref:use-a-cloud-version-of-the-tinymce-web-component-integration[Use a cloud version of the {productname} Web Component integration] * xref:installing-the-tinymce-web-component-integration[Installing the {productname} Web Component integration] * xref:loading-tinymce[Loading {productname}] +* xref:licensekey[Setting the license key] * xref:configuring-the-editor[Configuring the editor] ** xref:setting-the-initial-content[Setting the initial content] ** xref:loading-plugins[Loading plugins] @@ -77,6 +78,42 @@ To use {productname} Web Component with a self-hosted copy of {productname}, ens To use {productname} from the {cloudname}, add the `+api-key+` attribute to the `+tinymce-editor+` element with an API from link:{accountpageurl}/[{accountpage}]. +[[licensekey]] +== Setting the license key + +include::partial$integrations/common/license-key-property.adoc[] + +=== Example: Commercial license +[source,html] +---- + + +---- + +=== Example: Open source GPL license +[source,html] +---- + + +---- + +[IMPORTANT] +==== +* The license key is only required when self-hosting {productname} +* License keys starting with "T8LK:" use client-side validation. +* Do not use both an API key and a license key - use API key for cloud deployments, and license key for self-hosted deployments +==== + +For more information on licensing, see: xref:license-key.adoc[License Key]. + [[configuring-the-editor]] == Configuring the editor diff --git a/modules/ROOT/partials/misc/custom-dictionaries-path.adoc b/modules/ROOT/partials/misc/custom-dictionaries-path.adoc index c0197fa035..83af6b5dae 100644 --- a/modules/ROOT/partials/misc/custom-dictionaries-path.adoc +++ b/modules/ROOT/partials/misc/custom-dictionaries-path.adoc @@ -2,7 +2,7 @@ The `+ephox.spelling.custom-dictionaries-path+` element is used to define the lo Requirements: -* The directory containing the custom dictionaries must be on same server machine as the java service. +* The directory containing the custom dictionaries must be mounted as a volume in the container. * The directory should not contain subdirectories or non-dictionary files. {companyname} recommends storing the custom dictionaries in a similar location to the `+application.conf+` file. For example, if `+application.conf+` is in a directory called `+/opt/ephox+`, the dictionary files could be stored in the subdirectory `+/opt/ephox/dictionaries+`. diff --git a/modules/ROOT/partials/misc/hunspell-dictionaries-path.adoc b/modules/ROOT/partials/misc/hunspell-dictionaries-path.adoc index d335cf899a..037c70c892 100644 --- a/modules/ROOT/partials/misc/hunspell-dictionaries-path.adoc +++ b/modules/ROOT/partials/misc/hunspell-dictionaries-path.adoc @@ -3,7 +3,7 @@ The `+ephox.spelling.hunspell-dictionaries-path+` setting is used to define the Requirements: * The directory containing the Hunspell dictionaries must conform to the file structure defined in xref:self-hosting-hunspell.adoc#hunspell-dictionary-storage-for-spell-checker[Hunspell dictionary storage for Spell Checker]. -* The directory containing the Hunspell dictionaries must be on the same server machine (or docker container) as the java service. +* The directory containing the Hunspell dictionaries must be mounted as a volume in the container. {companyname} recommends storing the Hunspell dictionaries in a similar location to the `+application.conf+` file. For example, if `+application.conf+` is in a directory called `+/opt/ephox+`, the Hunspell dictionaries should be stored in the subdirectory `+/opt/ephox/hunspell-dictionaries+`. diff --git a/modules/ROOT/partials/misc/setting-the-license.adoc b/modules/ROOT/partials/misc/setting-the-license.adoc index 57f6e78eb5..0ee4d87229 100644 --- a/modules/ROOT/partials/misc/setting-the-license.adoc +++ b/modules/ROOT/partials/misc/setting-the-license.adoc @@ -2,7 +2,7 @@ === Use {productname} with the GPLv2+ license -If the developer intends to self-host {productname} under the GPL license, they can set the `license_key` config option to 'gpl'. Case sensitivity does not matter. +If the developer intends to self-host {productname} under the GPL license and agree to its terms, they can set the `license_key` config option to 'gpl'. Case sensitivity does not matter. ==== Example @@ -18,12 +18,30 @@ tinymce.init({ If the developer intends to self-host {productname} under a commercial license, a valid license key must be provided. Customers who have purchased a self-hosted-eligible license for {productname} will find their license key in the link:https://www.tiny.cloud/auth/login/[account portal]. To purchase a commercial license, see available options on the link:{pricingpage}/[pricing page]. +The {productname} 8 commercial license key will have a `+T8LK:+` prefix. + ==== Example [source,js] ---- tinymce.init({ selector: 'textarea', // change this value according to your HTML - license_key: '' + license_key: 'T8LK:...' +}); +---- + +=== Use {productname} under GPL with Premium Features + +If the developer intends to self-host the {productname} editor under the GPL license and agree to its terms, whilst also self-hosting premium features, a valid license key must be provided. Customers who have purchased a self-hosted-eligible license for {productname} will find their license key in the link:https://www.tiny.cloud/auth/login/[account portal]. To purchase a commercial license, see available options on the link:{pricingpage}/[pricing page]. + +This type of license key is specifically for open source projects that need premium features while maintaining GPL compliance. + +The {productname} 8 commercial license key will have a `+GPL+T8LK:+` prefix. + +[source,js] +---- +tinymce.init({ + selector: 'textarea', // change this value according to your HTML + license_key: 'GPL+T8LK:...' }); ---- diff --git a/modules/ROOT/partials/misc/spellchecker-languages.adoc b/modules/ROOT/partials/misc/spellchecker-languages.adoc index e6bc1bb04a..707b30d592 100644 --- a/modules/ROOT/partials/misc/spellchecker-languages.adoc +++ b/modules/ROOT/partials/misc/spellchecker-languages.adoc @@ -6,27 +6,26 @@ The following languages are supported for the Spell Checker plugin. All of the l [cols="2,^1,^1,^1",options="header"] |=== |Language |Code |Pre-packaged with {productname} |Supported Hunspell dictionaries -|Afrikaans (South Africa) |af_ZA |{cross} |{tick} -|English (Australia) |en_AU |{cross} |{tick} -|English (Canada) |en_CA |{cross} |{tick} -|English (United Kingdom) |en_GB, en_UK, en_BR |{tick} |{tick} -|English (United States) |en, en_US |{tick} |{tick} -|Medical English (US) |en-medical, en_US-medical |{tick} |{tick} -|Medical English (UK) |en_GB-medical |{tick} |{cross} +|Afrikaans (South Africa) |af-ZA |{cross} |{tick} +|English (Australia) |en-AU |{cross} |{tick} +|English (Canada) |en-CA |{cross} |{tick} +|English (United Kingdom) |en-GB, en-UK, en-BR |{tick} |{tick} +|English (United States) |en, en-US |{tick} |{tick} +|Medical English (US) |en-medical, en-US-medical |{tick} |{tick} |Danish |da |{tick} |{tick} -|Dutch |nl, nl_NL |{tick} |{tick} +|Dutch |nl, nl-NL |{tick} |{tick} |Finnish |fi |{tick} |{cross} |French |fr |{tick} |{tick} -|German |de, de_DE |{tick} |{tick} +|German |de, de-DE |{tick} |{tick} |Hungarian |hu |{cross} |{tick} -|Italian |it, it_IT |{tick} |{tick} -|Maori (New Zealand) |mi_NZ |{cross} |{tick} -|Norwegian Bokmål |nb, nb_NO |{tick} |{tick} +|Italian |it, it-IT |{tick} |{tick} +|Maori (New Zealand) |mi-NZ |{cross} |{tick} +|Norwegian Bokmål |nb, nb-NO |{tick} |{tick} |Norwegian Nynorsk |nn |{cross} |{tick} |Polish |pl |{cross} |{tick} -|Portuguese (Brazil) |pt, pt_BR |{tick} |{tick} -|Portuguese (Portugal) |pt_PT |{tick} |{tick} +|Portuguese (Brazil) |pt, pt-BR |{tick} |{tick} +|Portuguese (Portugal) |pt-PT |{tick} |{tick} |Spanish |es |{tick} |{tick} -|Swedish |sv, sv_SE |{tick} |{tick} -|Swedish (Finland) |sv_FI |{cross} |{tick} +|Swedish |sv, sv-SE |{tick} |{tick} +|Swedish (Finland) |sv-FI |{cross} |{tick} |=== \ No newline at end of file diff --git a/modules/ROOT/partials/misc/supported-application-servers.adoc b/modules/ROOT/partials/misc/supported-application-servers.adoc index 1e8aa7c9cc..9cbf13afa7 100644 --- a/modules/ROOT/partials/misc/supported-application-servers.adoc +++ b/modules/ROOT/partials/misc/supported-application-servers.adoc @@ -1,14 +1,6 @@ -* Eclipse Jetty: -** 9.4+ (with extended support) -* WebSphere Application Server (WAS) 8 or later -* Apache Tomcat: -+ --- -** 10 (See note below) -** 9+ -** 8.5.12+ -** 8.0.42+ -** 7.0.76+ --- -+ -IMPORTANT: Tomcat 10 will require WAR files to be placed in the _webapp-javaee_ directory rather than the _webapps_ directory due to the change to Jakarta servlets. Jetty 11 is not currently supported due to this change. +* Docker Engine: +** 24.0 or later (latest stable version recommended) +* Kubernetes: +** 1.31.x or later (latest stable version recommended) + +IMPORTANT: As of {productname} {productmajorversion}, server-side components are only supported via Docker containers. Java-based WAR file deployments have been deprecated and are no longer supported. diff --git a/modules/ROOT/partials/misc/ui-languages.adoc b/modules/ROOT/partials/misc/ui-languages.adoc index abe916ab5d..20fff45c2c 100644 --- a/modules/ROOT/partials/misc/ui-languages.adoc +++ b/modules/ROOT/partials/misc/ui-languages.adoc @@ -1,45 +1,52 @@ [[supported-languages]] == Supported Languages +[IMPORTANT] +==== +From {productname} {productmajorversion}, language codes use RFC5646 format with hyphens (-) instead of underscores (_). For backward compatibility, both formats are supported in {productname} {productmajorversion}, but underscore format will show console warning. + +Example: "{productname} language code "en_US" is deprecated, please use "en-US" instead.". +==== + ifeval::[{forModuleLoaders} == true] [cols="<2,^1,^2",options="header"] |=== | Language | Code | Filename | Arabic | ar | `+./langs/ar.js+` | Basque | eu | `+./langs/eu.js+` -| Bulgarian (Bulgaria) | bg_BG | `+./langs/bg_BG.js+` +| Bulgarian (Bulgaria) | bg-BG | `+./langs/bg-BG.js+` | Catalan | ca | `+./langs/ca.js+` -| Chinese (China) | zh_CN | `+./langs/zh_CN.js+` -| Chinese (Taiwan) | zh_TW | `+./langs/zh_TW.js+` +| Chinese (China) | zh-CN | `+./langs/zh-CN.js+` +| Chinese (Taiwan) | zh-TW | `+./langs/zh-TW.js+` | Croatian | hr | `+./langs/hr.js+` | Czech | cs | `+./langs/cs.js+` | Danish | da | `+./langs/da.js+` | Dutch | nl | `+./langs/nl.js+` | Finnish | fi | `+./langs/fi.js+` -| French (France) | fr_FR | `+./langs/fr_FR.js+` +| French (France) | fr-FR | `+./langs/fr-FR.js+` | German | de | `+./langs/de.js+` | Greek | el | `+./langs/el.js+` -| Hebrew (Israel) | he_IL | `+./langs/he_IL.js+` +| Hebrew (Israel) | he-IL | `+./langs/he-IL.js+` | Hindi | hi | `+./langs/hi.js+` -| Hungarian (Hungary) | hu_HU | `+./langs/hu_HU.js+` +| Hungarian (Hungary) | hu-HU | `+./langs/hu-HU.js+` | Indonesian | id | `+./langs/id.js+` | Italian | it | `+./langs/it.js+` | Japanese | ja | `+./langs/ja.js+` | Kazakh | kk | `+./langs/kk.js+` -| Korean (Korea) | ko_KR | `+./langs/ko_KR.js+` +| Korean (Korea) | ko-KR | `+./langs/ko-KR.js+` | Malay | ms | `+./langs/ms.js+` -| Norwegian Bokmål (Norway) | nb_NO | `+./langs/nb_NO.js+` +| Norwegian Bokmål (Norway) | nb-NO | `+./langs/nb-NO.js+` | Persian | fa | `+./langs/fa.js+` | Polish | pl | `+./langs/pl.js+` -| Portuguese (Brazil) | pt_BR | `+./langs/pt_BR.js+` -| Portuguese (Portugal) | pt_PT | `+./langs/pt_PT.js+` +| Portuguese (Brazil) | pt-BR | `+./langs/pt-BR.js+` +| Portuguese (Portugal) | pt-PT | `+./langs/pt-PT.js+` | Romanian | ro | `+./langs/ro.js+` | Russian | ru | `+./langs/ru.js+` | Slovak | sk | `+./langs/sk.js+` -| Slovenian (Slovenia) | sl_SI | `+./langs/sl_SI.js+` +| Slovenian (Slovenia) | sl-SI | `+./langs/sl-SI.js+` | Spanish | es | `+./langs/es.js+` -| Swedish (Sweden) | sv_SE | `+./langs/sv_SE.js+` -| Thai (Thailand) | th_TH | `+./langs/th_TH.js+` +| Swedish (Sweden) | sv-SE | `+./langs/sv-SE.js+` +| Thai (Thailand) | th-TH | `+./langs/th-TH.js+` | Turkish | tr | `+./langs/tr.js+` | Ukrainian | uk | `+./langs/uk.js+` | Vietnamese | vi | `+./langs/vi.js+` @@ -51,39 +58,39 @@ ifeval::[{forModuleLoaders} != true] | Language | Code | Arabic | ar | Basque | eu -| Bulgarian (Bulgaria) | bg_BG +| Bulgarian (Bulgaria) | bg-BG | Catalan | ca -| Chinese (China) | zh_CN -| Chinese (Taiwan) | zh_TW +| Chinese (China) | zh-CN +| Chinese (Taiwan) | zh-TW | Croatian | hr | Czech | cs | Danish | da | Dutch | nl | Finnish | fi -| French (France) | fr_FR +| French (France) | fr-FR | German | de | Greek | el -| Hebrew (Israel) | he_IL +| Hebrew (Israel) | he-IL | Hindi | hi -| Hungarian (Hungary) | hu_HU +| Hungarian (Hungary) | hu-HU | Indonesian | id | Italian | it | Japanese | ja | Kazakh | kk -| Korean (Korea) | ko_KR +| Korean (Korea) | ko-KR | Malay | ms -| Norwegian Bokmål (Norway) | nb_NO +| Norwegian Bokmål (Norway) | nb-NO | Persian | fa | Polish | pl -| Portuguese (Brazil) | pt_BR -| Portuguese (Portugal) | pt_PT +| Portuguese (Brazil) | pt-BR +| Portuguese (Portugal) | pt-PT | Romanian | ro | Russian | ru | Slovak | sk -| Slovenian (Slovenia) | sl_SI +| Slovenian (Slovenia) | sl-SI | Spanish | es -| Swedish (Sweden) | sv_SE -| Thai (Thailand) | th_TH +| Swedish (Sweden) | sv-SE +| Thai (Thailand) | th-TH | Turkish | tr | Ukrainian | uk | Vietnamese | vi diff --git a/modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc b/modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc index a26d8d2c51..150aef7df2 100644 --- a/modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc +++ b/modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc @@ -44,10 +44,11 @@ import contentCss from 'tinymce/skins/content/default/content.js'; export function render () { tinymce.init({ selector: 'textarea#editor', + license_key: 'gpl', plugins: 'advlist code emoticons link lists table', toolbar: 'bold italic | bullist numlist | link emoticons', skin_url: 'default', content_css: 'default', }); }; ----- \ No newline at end of file +---- diff --git a/modules/ROOT/partials/plugins/spellchecker-content_langs.adoc b/modules/ROOT/partials/plugins/spellchecker-content_langs.adoc index f7d077b457..8109297d3d 100644 --- a/modules/ROOT/partials/plugins/spellchecker-content_langs.adoc +++ b/modules/ROOT/partials/plugins/spellchecker-content_langs.adoc @@ -22,29 +22,28 @@ tinymce.init({ toolbar: 'language', plugins: 'tinymcespellchecker', content_langs: [ - { title: 'Afrikaans (South Africa)', code: 'af_ZA', customCode: 'af_ZA' }, - { title: 'English (Australia)', code: 'en_AU' }, - { title: 'English (Canada)', code: 'en_CA' }, - { title: 'English (United Kingdom)', code: 'en_GB' }, - { title: 'English (United States)', code: 'en_US' }, - { title: 'Medical English (US)', code: 'en_US', customCode: 'en_US-medical' }, - { title: 'Medical English (UK)', code: 'en_GB', customCode: 'en_GB-medical' }, + { title: 'Afrikaans (South Africa)', code: 'af-ZA', customCode: 'af-ZA' }, + { title: 'English (Australia)', code: 'en-AU' }, + { title: 'English (Canada)', code: 'en-CA' }, + { title: 'English (United Kingdom)', code: 'en-GB' }, + { title: 'English (United States)', code: 'en-US' }, + { title: 'Medical English (US)', code: 'en-US', customCode: 'en-US-medical' }, { title: 'Danish', code: 'da' }, - { title: 'Dutch', code: 'nl_NL' }, + { title: 'Dutch', code: 'nl-NL' }, { title: 'Finnish', code: 'fi' }, { title: 'French', code: 'fr' }, - { title: 'German', code: 'de_DE' }, + { title: 'German', code: 'de-DE' }, { title: 'Hungarian', code: 'hu' }, - { title: 'Italian', code: 'it_IT' }, - { title: 'Maori (New Zealand)', code: 'mi_NZ' }, - { title: 'Norwegian Bokmål', code: 'nb_NO' }, + { title: 'Italian', code: 'it-IT' }, + { title: 'Maori (New Zealand)', code: 'mi-NZ' }, + { title: 'Norwegian Bokmål', code: 'nb-NO' }, { title: 'Norwegian Nynorsk', code: 'nn' }, { title: 'Polish', code: 'pl' }, - { title: 'Portuguese (Brazil)', code: 'pt_BR' }, - { title: 'Portuguese (Portugal)', code: 'pt_PT' }, + { title: 'Portuguese (Brazil)', code: 'pt-BR' }, + { title: 'Portuguese (Portugal)', code: 'pt-PT' }, { title: 'Spanish', code: 'es' }, - { title: 'Swedish', code: 'sv_SE' }, - { title: 'Swedish (Finland)', code: 'sv_FI' } + { title: 'Swedish', code: 'sv-SE' }, + { title: 'Swedish (Finland)', code: 'sv-FI' } ], }); ---- \ No newline at end of file diff --git a/modules/ROOT/partials/security/sanitizing-html-input-and-protecting-against-xss-attacks-dom-parser-and-dom-purify.adoc b/modules/ROOT/partials/security/sanitizing-html-input-and-protecting-against-xss-attacks-dom-parser-and-dom-purify.adoc index 4038fe8c91..d1d9fbe6e3 100644 --- a/modules/ROOT/partials/security/sanitizing-html-input-and-protecting-against-xss-attacks-dom-parser-and-dom-purify.adoc +++ b/modules/ROOT/partials/security/sanitizing-html-input-and-protecting-against-xss-attacks-dom-parser-and-dom-purify.adoc @@ -48,6 +48,7 @@ As of {productname} 6.4, however, it is possible to turn DOMPurify off using the NOTE: `xss_sanitization` is set to `true` by default. That is, {productname} specifically sets the `xss_sanitization` option to `true`, even if this option is not declared in a {productname} configuration. +[[xss_sanitization-option]] *Type:* `+Boolean+` *Default value:* `+true+` @@ -65,3 +66,8 @@ tinymce.init({ ---- WARNING: Turning DomPurify off leaves {productname}, and any application using {productname}, extremely vulnerable to XSS attacks. Only turn DomPurify off if alternative and equivalently capable HTML and XML sanitization and XSS protections are in place. + +[NOTE] +==== +{productname} {release-version} upgrades DOMPurify to version 3.2.6 and enables the `SAFE_FOR_XML` flag by default. This enforces stricter sanitization, which may remove or alter content that previously passed in {productname} 7. For more information see xref:migration-from-7x.adoc#dompurify-update-breaking-change[Migration Guide] +====

*)EW`Tp|$=gd0r)>qffTSZpnp9D2DR#z`}FKvI& zNd+PYYrr?dL!|(4?nV7r8RILmSdfUD2eN-U<~IOB0T5XZJK>*^FiF+8ZOElg@4N=s zgI%5)>VIuGI>RYBG(;+?S43LX0UNU;TF5Y|iU14TQzS3!ammWdJ8+!gI0)QxXvdpb zd1aYT8pZ47gXz!i9F}t--Lamk?oUc+SnOE{tkt{%4Cm>l5u-;<0JsYtgXk zH#r?$_R-!n5c?bby%*R6=0#To3>}S9la)7u0X$;QlLJa3r-^3v(!)EaEg-gre_erI z76@`uPxDo%a%tmoG;AhNz-hz$)OZJmTBuE2gYI zN)Q&!=J5fbYa|{#18I(UK!mc6+5T|N0-6) z_ZRc(KNg0+gKth%xisTXeNo1h=ZQpt{=cAtgkLKQl`nymQxg!b0{mRqK->yo{Tuw3 ziulm~Q|Fjn!SvD66)M9lz8El-9$jHfjdhc{zWjoMf3XJDgk(4AWsZS zZz*I{>&~oAL{W(2jO0ncps^M}K-dajEwHYylObHbdJGdq~C^9JK@Z0M7arh#S zzQqr1Q^g3R15GR|?Pg7*UWRFyX-;)%gUu*#@=g6IO{jl$x_9Rf-^!5{;gQHv6{KKT z8LeCK3rutvH2R=>`Y1kLEDNdh!}=xt0lO1G8g@=SC*90`!4elRBz-BAaeaaw74<*fL(gvK{*H-hEEI$9{)}r*Fr9 zz1Q2f+nE46D!>P*&JF%o@2C4kLwoJY^&@(HAnXHfcG3iFe!)rMWds-S^wr(sn_H~EF#d+t3FImk^ikfIj_ZX>=@Pz4u` z+e6Msw?oH&33W|sCb_>vCmcsA1WJn$9XZv1$2vlgPPoJHdd(=VwGb_Sz(D))iXUHOHZ+$c{S0=YoBSFj9dc1bO zmq|JF*prOIuegk#KA{XP$MQo>bL6ebe*Zg(e6vo8y#`QCbjMWyXCb4L;-<1OOVzlW z2{=_1khOYNfPlqcz^uF9z@n5k!nhb=_b;vh#N{Si}5mqQD zO0K5pSEOpFwYgH3H;})Jk54cmNJlD`>)SNCLn_&6)#7bA==Gx&eXmGS`r9BH7Qkzo zcdk^x7DJ|-xmN2U|E+L8_q-}!@{zev=abXJd~rhNtq+2HoxTc(m_#>V7o#-Qt}qL` zSR3l;1E-4~gEioPEEWNV)jze~oSDCLmo?MuB|*qSpk z^w6zdEwpzMad3@=DUv8!@uxQbrPD&eX*) zy%m-xD)%A5`1chXTNDV{*1w1ydvjlh?|@>|zdH2*lDX%-7&q!s-a7qPcVPPKzq(P3 zb=Fb&)@%Fgn-j#VksIZ4_}n%1MM)$mmG+_G&(+Pq9B?Fpr)uVmA;-N7`s)EMGb0a2 zh`C%k7ml)A#G5^(jCko5W#~=Bh1>3<3E#F_gD~UlFn2mp#o5o-Y3=YIp zfM!D=xnrUKL{FPC`~cXsh3$x(2e1`nkyMTSdB2ZQZKKImNds>pt=Yq`0cNdbm7Skr zyvg06pv{XMpuBQ^-)uUT(35!uMnGOXPMw@Ynm@u2NBv7Ve|aTooECzl4ZZ;~_-Kg- z3(!8R+R?P0LQ=u7LjX`5l$Jg_PJTXVS8ORkvnYLC(E2FmbSN6F6<<%ldexdwdN=Mh z5X}qy=h9|T4V9HuSdw8JA?{u42Oi@t4$*hFxCn^#gB6MT_YipbC>O3DaV)1~RcWuy zsJ)tzW+mF_c-P9*SCl82F45&jnM~mkVsUKDrQ!3sH~>>Sfvm*5aNaPig-`9IV^Ehf zTkmoj0+l^<`gKmF2ae?x*LROv)}}l*HxBLmmY~zwz6`x;jCHw@IkKU>zOxrO;$U~J z&e1>2qUAzmxHuiK`?a(~0Hp~k%Z5B|eE%*p+{b0fj90Aw=gSV&#*uTQPlyfDBfDP; zf}a&Por@M-iz_n2_asns@Cugg$_^MFoMKZ~s$pj|voWSNnM^>>|An8SpT1jM{e z?N-e_flds$ie`z@8HK8lAS3l?cV^=Xs`qLGQ!0q&ktP8DgNbilH9Gv&-ygsNDQyaj z!u>pIESr>dO)v)IwBxbXp`j$0i*zW!o$g@&9E$yF3(*8PnxRi7u8#yk57zyZ32~h6Gvb0qkr(Kpg9)@XO>-FGQ{EMA_r1cZE|LBq5 zYK4VQ8DmC?NV?c=WI1y;NUv=y}K|0G`i!4Op9*_5S6kyKR;sdNA6irGi% zB0>32WyKXz+-zYOuKz^;@u(`1e{N_Iq@D}EGZmfZJ3$27G#OBS7n z9L%7TX0zjfySq$@H3vHiJdAvPZqO)}7`%rxWTi(9tMC8)g&3KxQ(AIBYlRveJg1<+ zdRYJh_ZP-^MeU~UWN!z@!qJ&06SW@(F3FnldI8JgQNWcw{OIM%3yiTzC0B^LnCgjH zWTwQKYp$!@N1Gg1_5QpFEByxca1OK#?JZbKEIXL`YTZt$NC?4r4yA<(d2(PYNhWjl zwgtBHAD8FD)@vF$GcPFZ>{lD-Ee4df?{;^alehO`Cq1MJVq-?sr9sh8P`)QY2H`-* z?5^5X`sY_dNe!btn--0MX)Z1{7VT0X_L&C%>EO^69MVvnw@$GN#^~(pp1m9H6Ot$K zDMgc|sJtEiz*jzBWttDvZhveXZ^>iwI;4hpCR9h{vCP$r78kWvaPG0N8c-Kx=p2|{v&9=w^r*yb+t1BKpyvV{*KmJMBm4ILFG@R}S&Ov|r zmco~Ae`KiH#TwNhZ9(@u>GXudtwNXgKn>fJlf%K=o!|l7Oejo@kscnnW6aLXx-(Jb2Z;zo_HE!Y)b*>&FmPi*ajndVPj-QB(FpN0q+hJ}t(t9*5*_MhsA(#UK20I5v3*G1gLK|NRYNYDaqKmc3tRH%E+OyCM5Jd zLcMH}_c$5HN${)mCN>X@O_xKTiq-YYF^fGLi|L40MFY;&yJAJ9RJp(8B;FjkqSC-; zDl!l^uC0~5Dnw-r={X~5Z=ikv$CAllbm4FLPHSFFYxip1$9dXJQ{WD?m(*K5Xi>nw zJKRAQMk zL0|P@--|y+qMvGf4{5YBB5IGCbGTs4-iTgUL}<7*vem}bhV%m!(P0N;lIc<-z9;XG zc94&3Tnl;V-xv%8cI5LCzt?^IV|o^*gIGg^e`%0~&VHSTQ7!PbvlY58?Lub}T#ghIx3AK)Yn%xWB>9rGL=nuoGDH8&8^)cDV2f9m2Jv1XQ> zgH5UUTafEU943%`g8YE8kpQt&D!zprQtYYgYRwd=_@&WkzwpFe-;gLvaXrAE_^FCxQ2XInw9~AGV>x^ z{fwTE>9i!-B3Q9QVu^LY;$77d@n-blLmw`#EaodnIy*CU^yF7QJ7MHXf9DShE*B0x}iI!0s`*no_n2v6JJ|*qx#c zV+AE>WE^|fwd-IL&#itTdFuyIV(9i>&;+cdpV#dH7h^B10VbZ@4MlX9v7*ub;(68k ztLeA@UeQqzK}ptQ+-nYNFGh9_qmQc+w~)W;u-yn+U?@qS6twbU9t+JjcW<{*W30+m zUBO5h`oN*n6%@0T?Y*p8PG*BscTpM{WhwLlgoa6QV${H)4#l2;8#QB*y)OQDJyR(0 z=+Lf>dO+o2Y!O`CK^Phij~TriQXL7YFjXJGH_Q4eF))Z@h*;IFfIQtfgIO|7>j`(- zL$Y#B1$m}a0xk6Q0emGbj|&c<@-3_6L!5*fmdC?XkO7pnUInDm!}(c2XeuOs`BlHu zKO3Ch{HODuTwe%z7PPaEqU_bKpf4GpGrDI$c>LDyq?ML_M0Mf8O)2!QguHJGtcBWb zkceC~YEVbBPCxhfZwTu5h5vo#>UHpf|tPdT@fIViHV8rg={MSVgd57*|Wbs^y9ZU+8yy+wK+sH0(S0azB0Df z4O@6BAN&}F?~osB4|XowG)|5 zA@zyX8qdN3!_Pbp2NxA8VEvsty9ulu0NN_;8T-=8=_gw;lox5#C}&r&6%#hD4)N1yFg+DmWm zM}It(PNK&~ji?a}?|=(Kl&E*^3? zJ&l@#70d;7AVg?YyFcxzf!{(YfiF`T-Sei}Pu>iU4FqN&f@nb2VKZbZ6-Bp@J8J|O zhUq#$B8VJpcpT?fEF#q_&b67jm&}8$-+W9&*HUMFU9+-`IQ+{kaG&u!;M4!X$vnyf zJmo#~!fF5z7oeeBNbhw}Q``+2B-PLU!$<;vHGsH%a&h6xIEbS{ccRh^68B9HVtDcR z+;>fu)w$$wxwTQFC28a?Ar{e^v$Y2@l48%6-(WG#5vv=phCIiFR&V#=19nD;l&ySS z%U{N++LV;%B4@|`_TYUD*f?aRE*Coe4>^WP*QGTo7bpC^jHNa)@Eb`O-r?tb0?d(M0Aru%uZVb`nBhz<-rUdp{eKtS?rCMcX z!)UboW1BR)^$jy8O|dswuporSHIpt$P=iaJ;o*zaR^aLdPo{CxOwG?S1kXDC6iO9}`2p2rmx5VMnqAPHL_DbH5q$E}Ga;RT4UFPnEYhrfJv&3_131FS9<9^MA| z1~<;%LJDx#E)l4xMFm$x6Hj!1Z1kZ}1Xr$-jCN)-yWuc3AlPAIb~BnZjR21j>+E}z zbE2?=+Nz0&mkLQSh|Cm+eI&a7##8#V!t_ll(G-}z}X za=CE`mi}aPhBPi$e&rUb*|*=^^Sy#bZuUTcn=#6pBBR%bmp zjEvviv+@4@q;?WcEqt?)fpsy0%xRs-W`@TCF7Nt@nWo86N{lK2m4+{QwXo&Dp)~zj zldhZ7D0IJ@=?lXYi+3%GZo775?LQcWzxKk)0Pis&Xb=OA0Z04`|EEa@0o*D-;9#8t zc8SyfqWGKI8s3pWI$z^3vK8PXFwmX=4wSx-dF2Xb0P%$&?(=gM zx)KL{vLz3kjv&t$em&d&<2SM!y*^AVxV%_cCBO(QXj!oP3n z^A?6tPY4Yty@J8C<-)Rgbj6 z%zMJO43GqBy*b~8dk1asg znTrfyXy6;Z`0|xuB)axJ^$y6nc+oQs{PB=&Re$x{ekjnisVZ?|N4o9jVTEY}dT#H~E z0Og5DB0Yf|h{r(mA(|^qZ>pL`ul_pVdbs|TmHTk}lTz~|3|58gZK0Izo4Wn3H_^ov zWmjoOZL>EzWg;LS`3XX-vABkn-!2bC-OJ|%@_#^W#L8Ij8jjdQ3mHOugDuu;j8uN$U}^4*5tlbUGr=O zS((BB3IVc~UXl5}xkJ~K&zZ|;@6|p*S=9zN%gB4RbhrNR!Tbj45*n%u5#?;`t`bVg z$jHg@{l|*}STC*r2n(I_fV`|S$b3|kRInG(6nYXeff0QMnB;bpqt`?%F{7(z4j6R1 zbW=Y#V6+-TkEsl@a7r5XlUv^XZ|vAdOqNPnSeb$|XFhpDUg$4jfdntgxK>oo@7Cl} z=rh$=y<+f{=>0*?b3wJZ`7d|w1kB@ibiWlf;1_W?Sb4Au7|Ms*LpJ2KUb$A|8AS7Y5muN-wJ*?FnnGn&pP+Tk8p}H~kr}L=w?l&m2Yh zt8kS|Bggf+1nez~%aB;NCpN`lH94a=#64z*DU;$2kByIFqpLO3_QRWuA73WLA;Cvp zN!k5m#xk+0rd6|4G;A#4ds@B-=eEXEbIRZ*bk?VO6l2O?LmpH%&**Nr^3={?o|oPM z2s@RB4;t1N2pEYaFyXH(L%f@2#LMR9x%UW+-lcvD0cY?Bu5{X0 zmk<#Ddhpukftoj=5;)PK4DE3$=h>B6^XY%vT--BzP7Qk{HJ zcLdd`c2i)!wXp^D^((I@xXrs(rsCHn_hnm%S<$f99Bsz;y!@APkVlo|iBR{$%F>-2 zGP&d1+#8YNC{a0NcZ0pMm8RO0|AHsq@CMU(qM5}Mga|GK0LTLpK=2owSpNO}BboHC zdLaUkc`dK#nB|9y{3AR8OtB)Md%yrNYVIEckX@s4_E(=-qyL9CDW+qxC8Gb0^b5SP zG!3tXnmwt*l;LVufE4i{ptj$x#a6o#pC{i_=SIC2NB2AQQ>c)+=kA%Iv^_Xu?(qTD zQr1eiaYwhy%QqO<9R{>oJ!lih2 zlD6j0=#E28FLf;AAoUIJWzr8-Tc$Jc4q>c}w}_+(|I$s_sp=KXl#_E8_)xg0biJ(G zIWUj{J2B;`^yvm!kMxHaYh@80!6#cb}08`@3ibm<*d?eQ$sDiPQ?fMuf5?O^&gcJ`fbEsz3s<% zrYESOfUU34MxLTt3Okpn@5E%9h_i z_h-ZbA{zW>FDs{h83uEKg_=8U^u{&|Qe+Z~-NpA-2%*zkI~{}7X(SD|f zLM?)-Ia9ISIAKOFsK+L-K5~~ey0+&{S>f@R>?dOJ4U=VrT|xVn-Fvx(>=pz$9c#~^ zY^m#L>pUFzQ~cXAp_aA4VLH;E!+^r!S&p|S8D*`|2g+TsoC!uk*h$*);nzG8JRW&d z@Xm%3B=QN~1F2DJrjLQTH7vK}=fEL45abrq34A8b*yA{GK80HNUxv=n?MNob^GXY) z%oBZ;w&d)q`i3SiZERYAYu4<)Ym9!vbKUz;@|3w$UVo^z0KY{N9VY@rct6=1q6L!r zYH1D!M*o7e77$~HfEbdl1Yv076ejGdh3a+_2UK*~EMWV-Mw)6M^&xp+V#8j3rQld+ z**U)FrlL%bAW^OqV)5IzYz(h1cN;vqeWCrGsu=Fi5hEoo zF+fkHtzE!9dk%rDk$vn8G6OJ$yhd_CTAZ6EJ2Lxhu$B0 zm>TrGx;Pl?<=oQT1Z#9Hpf7(h9oct?6pqaJ`S^{Yy^ZE`Uvx8ZL?uMj(%zqLPZl~Z zS&Jy{?-8<^*a9cXeFjYGz{`nBw;Z0q+Y=-kpMoL#LsbpU>~9q1oXqU&fcD>H#Ptcv z+u>uBi!*?bfE_E^i$zRRwm#>1zr9l{%l!85v%o*M63Rhgh^`Up`;-FJPXh<*=1>2I z)I~pEJG>aq5Av=x6d?2)yHJno1qOT27ZI*yU|;1R_#~hCD5U#45Mr}7Yi}&t^LxO9 zRh#jUI<}kb_eeK>zLWT+aylMUk9K93OPsjr%4^8D0VUfm{-A5Z%ly{s@j)51bp2-G z#KVhsLyBFZ%6b}ch@{fB9P`FTuorPgdPM9oCYr7b5q`YAR|TFQ9h1;APumTlm`G7$G- zVP0nl>V+z|+c82HtWEA=sC%j+({k*G>(whGefk^)>}Ccpwd~YVThUtD^)Xvj^ruH< z5Kv#c@8O}KLvOGUo9I%8;7<<+yL6g)NKMBX_W;-4-%X9)JJo8j0o0$nManeyT3pjO zvTl@AL&fb+@AoA@ic_r9a~rQm!_@4WT^Ne`Dcr!gvEwDy?Fz23Gmb3 zkaucXNr4#G;J(rvT{Zc#E2%Xn)}!DenAq2;EsUZ^;GxdISS74J^X*$9t+EF>XJE}2 zbA^YC-%PyZK2P1;Q8ryN%y|mYnL-htcq8dx3>0YRNx5A;Sc){9W|Ask;5BJSf5;BD z1U?n628$yz4W41XWStYxf^&B5aR%Y)`Gq&l9rbj-lkM#GsrCbYVw@l-Eqc?!u6cFe zg=V$Cs0z^}$OQFo_F$TuE5HfYZ`yd|ogr6pmt*g5K3NMYkqnT5Y0?E1r$6q-uQ#Kae_9q*55j{hAZ=P+V@O#4lv#!Kg^ zD`RP559Q>}14K)}?>57DM=(c3N5ehh-wjAH3z%`$NlG~rSStqlrYXB&M;zdfZaz^FU!eF94c4BXb zt|2d$vUbO%_n;*t7Mk)J-NO8H^72$ssRNe)8>erN$foEmsbBG}0U(dn2Dih&NACUAAuo88CqcG=lF%on7-%y; z-}3V_L}d~wyFt^P6Y;<>PED*uneX@Tnz2gQwScE@f0B#v)BmP@TE#MSdgsTsnFc{K z2aM)Ht_7s+cTs!(DAm9=Xd%x!-Tf`6w#~$lLpW=aj@k-PC)-I^Ja7o2at~v{zM$ru zTCwU8FL#$#0ApcqV-wkEz^NbKnuahM$E$AEfWEqrgxR-^^ef#V4-5VMdJ@eeB`6|} zRz=e|D}&kD+Cbp|_ua&M?59S8jD!=%g75ojEdA>Lu-6G&?2vZNIfe#*?}%#+)f-a= z)qW{|{mN-GUuH&GUta%od+-Tw{=F*177h?&a|^sP?mp&#`f@iICs4+mMV5E=dEHuG zg<@9mcPjpR?IwcO_8PdZiOK)(vvw+Ba(w&(P^eM?AV!q|@Z0NuTNd%YfLlt>xP_Mv z{tVnC19-m`V^&1wzdE0*g`W$IzGAUU8pVT==JyvS2lzmG#l?A{{>#9`*B#EvxuN?< zJhdwJ9pXBGtthAWd3?Goehmk)(AV?Y5P9P6n@5X*gUb>4-$dF^#tlI?-(sfbxy?E4Mj;u!j-Jgs0 z12kc$(!ZY&4{-~)LXZ&ch$0EB^}kwT=el3QzFoczLIb;V((;}wG{B`b_(C@n%w4!% zs$mLZDr*>d0#2XbalQx^k|J&LMP5jLlSUVYuqx{gP(IoJi6Bll$**^aEZxM6`VI$| zt|KVgsaH6_o5NqP${RfiL(3TRG{kzGr9nsAm zT+zLyw=2UVi8xo>1T7bBid=Zr+;>@M-P*yfaBXd`gJNMe1v2rDUyk{xjO#&19mwym z`I0Ah(n*AM*^wiQ&Vn~f8+*=^o949ZInk;anKwJYg))3T3YLw}iAqFlOVb14cA(cA z`twD7?^;^CF(lE@x8113E^Jg*1W8)?;7B?-^a!o>ob^8w+hA=pgElp>TD0Eea*q7F z074*O{_d}j-%|cmUF3+KVws(;By(6c@`M7bQe;IL#FIcQJXHl$g{d6;psNS1Bf&r_ zB8{jtbTA}5VDX`Md1@+$%g9$Y`A6vM*`qUgPePUNtc=oai=(C1$p+roFzK5k0)x3+-RS!8dip`GgKc7Trx zY!#k9eX16j1#C}}`a_S-cm+||%g4}!sgOb&jx=^ReLoEX#!y%{tYND%7ILEb`&>0= z2r}g<&^A(2Vc5}q^#S9o5PuyW_`c*1e%dWdJuuvJaa2HfmOe_sA-f_*io2l(A)jY6 za$rMji$?C~A^CcGoa)sHk4Qy!!GNuRb`%h^fPFsWbs&uRIab+ip8li-q2WIkZ>&B| zg7$h)z99xy53Die2wb`=FR#fXJryh(%gJxh$IdDYd_}B>a<*)yvoHWc_Hjn z{tntP$D92$T?7+zS{_EZ>JfL2*Jf~^6=l5t`qi(_%&!ODjVgT)CQ@AAE|0`)CpLc? z8`W2JBvw!OVWp%AJPs+Sk9gEFm1FVVYtFArVKol7*lt8=^Ed;kBp9JSgdod#bawjKs(>0W!Ks7 zJZx8#lTMa-I{zGhMO(1s1yCzH8e<}AtKD(hHK*jbIrR`7hXa7m?6bAk&u2oXn?%yZ zt*dL=(CN}cY`eX8pJ{m~`;a!13Zt1b{J@`aX!QghQp(|>{2^_E=~IS=hS25hA{l{B z{ZXs068s-x-)&3}2?F%e$XaCuS8ek}Hnz)UKykqt+xBOW)R?dY-l@A3g?*FQN!xGr zY8p;#t+z^+`lc^kh<@mye*T=ns;PIp+w_3jLTOd>!%oNmc)ZyIb89|(OqsthV9N97 z+l-6QSktgKUw-O8x>i+_BW~wSDz6s+T5FBd%KHdwe-I+k|gD##y2dV68crwY90&<<4a)c z%h9c3naWOY`;!suaZWfj*haihx$Sv;Jkx8>6RYvYKx36o)puv%xQ(PnGghZ*_O6vB-nHhrXJh28_Lk85lG^j*WMkx4g+-&6Cfce|d`PldzEXTm?yM!p5{JIE zxt;ij_Js?#@ls22eN|#kccy^?k81CU1g*?P?zR-hPxRNocdL&g0;Xmrz`hgAoZpLZ ziQnO*?p|~FZf3vV=r^g@gqTb{qnyi^!RlDCS!^|-k1qlae@Z%B#Xsp5X_fe-@yYw; zr%k0X-``28(|c!QOYa&aKR-Nb)D(RE;*X@}LnG9Zkeli=i}V~Z$lwgl0Mk2CbieP) zY0@yIE1X2h9;t7ivB$-lT%-Wb}_!=lT-gYn>4v6B^#Z&S;n3XE~tBXp*DlWzhxap{zPIjD1vTiU5zFRjZVPs^~y};T${^psU&bbJ`4_)W7S9pB_l{{JF+-#{Ax|hGxIS%59 zjjzaPOZ~EyvvhUkn-W*zAf}eru5womug45fM4Fn_))&Hp17G!{jbc_CUIhJa?CKT! zX^!9N&a+dslPggfHsMM%Z?Lh5R;4QeSw784TRdtoqiTPONtBF>6FhZsu#RP>LCm;` zPbymfe9y?uPuaN5Dc&X#veto|$2ucPAD3tLRE+97;J0S{r{Wi{3M+2Fu%-P}w0yR# zX05rEjr)Cln|@b{7p3prRGs{*1&nQ&!pygL8&_9H2M70Auih7J$jR{YuSF6TJ8z6K z8+X14%4O?|x$~L%(}DD>g7)7f#FR-!)bT z7YC1Oj}OhbIDf2N9t)|{W-Z#Btk$$924u6Al%Sw)hMutj7mU@XG<8W2KVZ{5#Nc&z z76m+Yd$Nl`cU657g6n)K2^TGzomVSRl7W!c|HlQXX9L5WuEng1Mgz;!hJFiA90U`QomfdcA4DylUOko0lUU_ z@~xdX7sfn}cXcEwu*&^bkS99N-nL^)mPpP1I9~71c0 z?>k&Kcm9E#VsaHV&ShMfF|a3+no_Y7!lk#IE?>u?>NnG17hN0+bsyjQ?uGs+j?-G_ zI%`G7Dw_Bx=2sCMr&)?#!NtUg?_<1NccUVxpuSI-3YpXF7CcWclb6=WqxL>QQxX1h z%)=Mn4S+>NioJ}pHfATq_ntIdqN`!^EPKoE?&hXCnQkt)rmEmf`uLb{{$LWKMxkL8i z*2HvLSe9VYeuRyHcT2=udo}m?8se1Ax)A+#59eSUpJL4{`sB}8@Tb8*)yTUMovs%B zOEn{qqEX%fiCQ>3>yGM^Zm(v;e50EXx$fR#%B^l03>mSUQGr%c-ca1Daq*?0aCMTYDJWZ2WN$@S z@hSDKY;SN49RDQsd;8ky+916g>0j+qO*PJk->`M=iwDZ3B|ssqX%qKX;MvZZ}fS&Jg_hLv=t+Ktvq(DKCJq;+1Ucw zQQsFYaDm2gJ{!|^&`_jX-;@L~kM>YT$$9nVhl$DT2i5KJ0uCsWUqU+TBjOA}P)s4S zC?MIOpw))CpvX*&VMtPP*$KfVB_P%LQLd2VIdvSrI-GD=H;Y1Zf7t+D9E-bMHZdjw`pHNvf-vpgSSR-MbD0^ke5!drEH5M8>p{2UeCSN{uGjz19%I zad+g&ClG}>1x}i&-f>tR-YeF6sy&9|WtF;-qnIsB{S8?rMH)M(p_n7g)eX62f#y4;XzM0D_zZo7Bd0=jKYH>B^kjkC_! z^6_g=UToQg@t-^_U{bCKO(al%OP!6W+ZS*b5wVGMUgAv1gR5Vb`1IljDqlhH2)S#i zTTKhTxWcMxT4#LD)0w={GKhFy*gf!&J;=+xESv%-KqMU-%uepBEFGVrv#y zg$lIiW@3Hkg64Von4?7rlJv3v=P1sqnr74b{o$P_Yyv=S=iO_^QTw{v$DKx{F5K3l zzO-Zi9se~F2_|^w&h)qEmk>|C-bsFL&P}q3~t zV}<|*#+W4%K2XA2*_}C+71}a=apA_h;@x}33XxoN3GozI?T_ED^hxmvnI`n%f^206 ztI`7dZC=vSBbsGzKc1auojP{-d%Y>kTV53LFwituQ7=Bt=KO4CW~LE`@bWFSdzj%9 zPg>{Ro?4vA6y%9_ba2!+&Vu_Xi@=30=B#Y;myUDtAU*WRkOKVa?`5LGzGQ^DkR&VN zi~433@;VF@{^)$T2rBo{&-DQ3f}W6Pk29V-3%T7SJAfMoT1k$L&N&)v~6kn9$!h4N!7#wbR@oj-D1} z^fG;%SO|5rNZ?Ztjb2g&kHG=l(=_tKX{6FwQ{T94tsfZR@v`m-i1~E%Qe(p zdKfFW+Sr8^$guVKCQs;<+iz*%S4<0N}0>j^A;98u{kB}?|=4v(JH^7a`Vm2 zlH%-W6H^RJTel}7l94asV(z&D5PBhnWy{7q{Wl*-ulRyc?K*G%+#dCXVV%^wH4tHh@x)@=;Kk zQU+Gx0*hCioc6Y_yB`m+evgt#I;wx3IR9r}`%_L<^*-Z`Sx=L7qi2&UR7wr*f)k^_ z!#1y*@d{_FGREFW$jZ~-FTE3hED7^&`e~sq+_+wt8&u6oov~TuL#c#;Eu4 ziIeqRN01x8IhYi8-2p5v{P??ra7{aqIe8 zE&Av5Tan(U79J=sel54owQT0DmuRjNVti(oIsMIR(NO-Q@qQdeS-dTk)u6XOYm!&L z94f=gL~?RT=?nH2%+1mG@?ws0UUceW5B7MXN31ruYPYsj^Vur*yG!1I8zrUt%4*XX zq0tA1*FH>K*O9tXk^8d8y9k+N=`OaMlriFcN?_}NN?G1Mmw(@aO#s}XE^yhr#-|ZY z9t^dy&ba!n@Na8dz`dvk~#Mt-dt_R(x;O& z$Qy2(9rs~Cj}2CckMQGIz-)h&nzJ`@;8e8n@4DY2$i42#3sy_TVVwH;haa!~i8?x` zIUeX~9UaroE0gl%CaC9%K3eH?`GQ44>UW zWA030{$?rb_`KUWFJRR+=xeM=K^tlE05r2Ft?gQxKwhHm)J&!6(bz z>{naf!ImiQ)u}t3%bE!V-Sw>@WF_TUSQSzNW|NAjuI?jtvNX)v&*s54m^Z0?zJE;jXbNha@44bB+ z(3p{dU1SYbst1*CGmY`@ckSP@0K}(~SAUl)E?k@MyHb=N#qU1w*o*OUCd>HdGn*{a zu5w|cYNE81$;8-vBl)M87<=X@ydR4yD;t=a*eAM^^;I!+X!$lR@11LnDRl`u0ZiV) zac3I8EzO!6CGZ;q>&I$$$Lg%RRpw!&TKUs!r`5)ysp96MlCt;NuGEhgA9e3Z$DZqc zW!7^a-C}Fiy#q{&hJVHc6SxSsx%U$YkL9bjjutatYV|ymySZZ~sF&+yk@b9zbWYEr zGZ$7CV{A@se7n02CutaAPRg67+uPsAd`P03?me#H%RT7UEaTaJZJ8xEpwJ0LXMEOf ziD#l);A^Vg4+-mt3h+Mq-mo<-LOoNJVOq1_hAs}h@?%1}fAVhs$S=z6_2N(Mw9!$* zb4`O}A07pvPG&yQiFPJm=DpLSS64*1Vcth=kJwj{^&vl6`Ua0&3@b#8aL2X^zuu4jIcS;Ka(hbt3NOw!8 zbax{yEg&GB(nxnBUDAzo!@KZ&-+j&LS5w2*$#*>5S5j{t7yyrNNJGTb|F(sk%HA|bI_fx%~Hj~ z-#J;Z8y+o(Va(j&3}9qZ{$VHBuX1f=x){pFJCap0y{Nz>uhks3$fzt7@A>?im;LJGY8p@W-dA&K%vfzv~jJ5jJqujefLV&0EK zCpX8&&29WF$}L)rg_A+K1W9~x%_AvQ$~D5r&W?&TY3$a-%4|frVAs;>mA6P4$vmY- z;XY-jG$bb*n?);s*P)^#nJB%V5z1x@DPw9{TvAeHjtHVgABo1?$drz$Q8L~({n|#` zGaCdEVX!mg3Mo2SUoSeiC;Nfis8{6iT%hsurhMXJ3IRBjf(cgC@oiu8UYfM4M90fbc-;a~dErQ70zqjEwg4w?N z{vrMvN$$f}5YZUbZ};o#4d0`p^CI+#f)$Gk$d3CJMam?_L!AY*LE4!L9kX>rMorqE^IseeqnA z-H_h^ifX21MoO{?{Q)G*23#wx6nV+%(`O4<4EOc3q#paRPBMo`A*#*pLbaXjyn>6L zu2Y)l!@X_&Z6Q#pi$9WFX&^At&d76#+6ky2%#YibemjdJZ7{oaOdsXv@{ZG2>Jh)B3c4bp)+JzZ8tm=Ou|!`5 zsA>%@HQ+NQSUV^E#H?>N|6z);+*(WyGhp+QnVs|&;M#Hr9Q?i@VNucBsn6hvce zyS3-VRfrDU(gH3z_m)!5VXQruU)qPc7#sTfFpHJc4iY%TG?aU=w0Dk~aJQF>Q;R;~ z5GK?IUpo@hFlm?8g|H($YX>pY247vLsc&M{&XlfHb6O2Q)uJ|j?6nKBD6Me~MZ7;x zt_bysaFU(EMmwFIwN_QRI_hg>y`aqKb?5u0M#nqbjo@dZ|4zO?D2cOxHk7_F4#C94 zMBU2Diqstu2MyW$t8&hCPP@*4N#z&)_P-bXH-Fz;9=Bj?!eWBux9`K=kvFp{@~vwzvi>my$nytH{h8Ovxfy^CE#2!hr={llNq2s!j3`WRf+6jGsw5xnJ9DK}}cG z%iw)5o0!*Xv_#$*9{$;yWF{NwdXT1RTVt1An^y!iYS`8@+Rne6N(YOguI@Mmzwx2= zNv=F+t4G`3obGF%zs~w503&=6YQke{(MZ` z=MU({gZ=&6P-3_Cyv%VsKXrrJN#2LNd-r)0_E}zjer%YGw9_+D*rBSqdAugGHJDQr zq^}NaY@!F)c_X(!=%f4oWgW6fwxC$(>1Q zHi-4oHLzRg>MC&c*PgcQ+=sYS1JgWh(xrfPUU}d*YkRmecKl?-c&`jEDKW9qy`G=l zk}2x2qo{`1P;-cFOeDil7hU>GYOslOm;0BToas5!<0193K`)>o0?9wWop-#4?V;;6 z%#u;IMm*%I@htf%7)zHTEJat`6<`Yys3_H@)pW&+Wr(DAn=3~UGcv+l&onn#$IHha zS0Bh=#QR!22>tXuscsSeuOr*rV*NFwqhENMFxzw95U$x(wVWS|i7FdV|4Tb)GFXS`PQawmKZAZ7h7q>ou=!Br|h_a+$Wo5 zMBeKKg|(ayiuDKE-qAPEvL;gTB@wDu`W)|hVNqO2sGV)O)`%l>U$BtIB(vF&%`M9# z^9rm`gluwW!w?G%*aw#TD&_Rx3_j$bvHcy*4}>#ioPd z$M9NsO>auuJI2@-G8(S6jyw9YDm{U}9tF(;E zL)U#m%0H(_B;latyDDhY()G#|YG`6su)sv?sSHtWv-;`g+2QjNzs+mT$K|)Ml}{s* z)meK^SK(+Un(FhS8D{_sa>{zH;%dvNh_}Nzag>Yu^}#JcEdDreL$b-3Vrgg<#Lr}v zG!6cNtFV1!jq6fRZ*zCb`U{dSUv`K|OtO7WehX#| zvwoQQKI z8sa3FkM%hzsn*+&M$yfUSs|h+0h6ZAi-W#WkS>33eK7X)Z5dWQJuI)ExIOu->(qhO ziH82Xci*JZacNiMh=uo?s>Yi=uFR+#l^lE@M%ZDWcjG9N49)Q<-`r34L~9*yzak(Z zCJQ{b{5JNA#x9(D+Cii)eH*P&SLO3&Ak;>C``aYv9)ohKPM_a!WTHWbMAe17y|$;N zI_!coqo0P7e_;AZ*T`8Ky22`Gmlb$MT{TCu8(5mYPSom=ypnvGYIZi zlu9@%w>m|V(98ynYQKR2bAw5`uofpDAI&+M{^;o3i(lUY<#faCo*55| zSGP(H6x<6{TP2TS@i0CUeL_m8i1tQvsAy2J&&tNNCi*9TckNvFomJtUnz5$1enfd% z!oKsX>EWi{&gnu&w}ImWCqo3;c%_l$A@u*n9=?ab{j59cXCB)F=FSuq4Mc>8bAky! zXXjwgQ9Y?2&)pBvk*@sW;sCQR>hIqNB)EeW zg~5h8A)9Gj4sb#pDPK$F>x^M&JC8SpW=mQ^NEOXZO{4w&q4G#%5QB#@BicWL@9M6G zE)EeN)5_U%RAQ~$FPFak9{~`G(35foVJS2?|GBNLt(0Pvtu$Q^*l0a)_|GwXn=h}> zKmO!N0sAZCy}h5l1$8@#xqh)TGc(`?{lyjT#i#*boL)BR4GZEoiDRBOxNz0u`wBKZ=X`Z&~~+V5KpQH-YZz>YA5-vD*3sbwBu}2#@w40eduSR^4$^&H*Uj5jd|LR3AwImDJcjOOJwsE zO`G4u|2v%ibHcHVmb7uUD~BAcezikDRN^;bhSGTHJiZ!}SI*2t?O%@Pza5>O-65H` z`vGo!{O8ZTN&wtjiNvcy{?YEhHtzfyu?hx!t<$0ShU zIt4lsrKu8L5U8uE?YisfwbJ9>uIUblKZxdkn`H3+vLS;-$c#+#Rx5o@Pfw-neL;Hf z3_O;23@2bh&4!2Q<7sI1((rJU`^50D&H>6xAaR@&t_N0Q|8cE9T%mB!WIW4!f15i0#X z>WqyI3@D7fa5!ijLE7Hzt82XBvyO!Yt=x)=x2?ZQlLw4^5jlDcY=0g+`Z!jBx{W6$ zFu$^=hKHBfU%zG=K?3SAbzN(>VVhnOzdwE2ykzg-Fb$I=-6=tV=B<>)`4Hay&yxcZ zDv6!#7$KG=8|7XLs1uQ(U=bm3$GgVau3(&Y#0A0ys)NPtRtCkK5xkuf)f(sTGbM;;GL!zoQ3WIqHd!emudam!iSBt``5HokqM1+FeGEsdzf`2MQo{xf0|4s8wl zq^PBd_cC*;>_$BW*WKcP0_sG#*H+qN@;^#}7R)jHyi<=kk>s-us%(f;VDiI@-x6@p zT!{sD!cmLfFn2@E&(0=aH)LhCiQbuT(8|ins%e?h@55sx?I%5Q;xr03g?-*VnW)*W zSaQN9{O6zu$&y4URw)I8^c|1qU4tt)nLg6_>1i5YUtgs69DIEH6F+~h9ZC9%Q;+1aT;-}C6i#Cre0KvF2jUoY`s~to%NTyJQcu1P=Gr%a^4Tdv@%}4nBw>B|(MX zzS;T?Jt7e(ifa9XgIpsfAVJDU_?wn>x~6i8iNUqfxB z31>#R+vw?$eeXY-8-4tIZS&I(BMSS03n^z+23{~)yq(u!JGS-(8F*$6CYk7}cjq%r zP0i{rO-+2*TWL=T(DCu`%$e^E@eS&XAF+$Py9zzDL-w#l^kecbGrGmPkb%!yq+?-G^6+b7q`H&8<&UQko+j;xopzPM>rZsx7AATW$6)^H3ALA|g>5-Qsr4*w;D=X|< zhDUChno?QHPFw-Lvl?NP7ltMsJ{V)3hcatqaghmFZc|g!9(Sxf(&N|v6XXE}h#DnJ zm92lt3JDAp=Kx6xMuM^FgUQZub-Ya(`t|dD2*wb2;c6BR8c+iET18b;lW@VuerT%Z z|4>P?=paCCsL-!pB_&Q8GEj?N!;kW&b2-p{2aj29%*=cW_lBA%Qs4KP1BD0nBO>A# zOEF@?nv0&2k`jA$E+p`O^!&iq=1%-_CT;+6_TwS@}C(i1yB-tk%JbCCiLkjvp5f#(TM*1`jF~V0DK_@wLBy^&%wF5 zlp+(*cl$G8e0-clyE10LNYk_6-|UXaKOI{3iI*5kK!CL(hPE~bJNtTNWo6Av0U$rI z04Q=gY-4Dlyx=mb-Q=K4#W=hKurCFSD@wlAqd-$76A&TV0-YXjg}y4%Ja+HmThBCg zS@ARvZK6^+Gl0oGeapLHALyTg!9Z;<0P2_DRA80Rp+vXs5!_;{>r zxA=|@(H^6U^-AE>6CX!3GGx)P3${qX)8_2i2ENS?hz5wJB@Yo8Mqxj6c0T-pju!x% zMshjUBT?+uAtr`yHkp4O=s)BuYSh5d5zD0|C5B8`}31(wvE6j=ZGTnE`4#p++rYQH{eK%QlfZ3$2(_SNz5@i9I?Tvk>;?Nqm- z%$>SgL**b0!mj8CnqgxoUHemOEr4_W+o;mAve2HsCa9mp-#qfJD2leA0A&mgT;&)X zzL*YS@EIC)>EPG19Xor{AQa&XAuuQr#3k1afL#Go{G#jX zxKuSXSTmPx9Vi|X2g%UsY1QBky{|ODSUG^O)UHnOmN%gamrV4@Ytc;%We%FUv>`o` zcdT68+%kIr5hH>a*U-TigZi;(nGy*B@ooM)*;hCw&odcPl9TNKd<3jHxx2gjdImse z4C=!YsP|CtjK-j;<1oP{BLq@j{IREHpNQvo_NjDp#nnvM|ne=qqtwbj6#243R*rZh>3~WN{UZ9 z2zS3qZDxMdp<-DpO6Mrb6Men{?S%_K$3_U71Hh+>o~;8T zsUuov`~o`~xvrp~@8NjSgGFqGL^Lzevt0+(iD=RZACoHa9<)baoSO!r>`irgE^9>|hwXR!$JQL?+CHNC03rNlrpKj`e-w^k80djO_3RY^ zI`D3XD`7Q%uu6Daxk{8-3Ef zwfO$=x;erq!|?t>wdYG4)R>(ee_yF2ac4(0af4U>|i%Pfh;2-eNAlkRAiHiSTNwuda880#6(PS+jtRg|)j3EvWkUeJbKXwoF=c z&;wdVQ9(g4nrubyZ=s|_UeTL{F@bjXZKG5Z#33#&=ZUWXf$NQe4<_mStM(wkU&(WG z{Uz2>Bpr6NaV+p}xM=v)Sdzk^G&VLi_KX`gVD!N*#eaC|SR}!h)eQ}E3#ehDI#>s= zgUhEBrD_`V7b!M>3tH5uk4@Pg1gr1MS79A`wTnRi_l!Y4Sltddf?E$jNu2}V_@$&3 zaP4!0soci=4_w^4NYJ#^=O1*&JsvHcb+ifVQ|d%I^jZJ~%etE5UuP_Ciq`J_QUWt3 z%oj%=g7Pm}8kXlr`BZ!IHyABw^nklEJ^HC599Z5;JZ!f@1j+dam_=NIP=6Ws6Ll3}=xT)h%POq)tV%?NT2KRn1s|