1var mod_pagespeed_ReSGDlAart = "window.drupalTranslations={\"strings\":{\"\":{\"Home\":\"Inicio\",\"Next\":\"Siguiente\",\"closed\":\"cerrado\",\"Cancel\":\"Cancelar\",\"Edit\":\"Editar\",\"Link\":\"Enlace\",\"Image\":\"Imagen\",\"Open\":\"Abierta\",\"Continue\":\"Continuar\",\"Close\":\"Cerrar\",\"Show\":\"Mostrar\",\"Select all rows in this table\":\"Seleccionar todas las filas de esta tabla\",\"Deselect all rows in this table\":\"Quitar la selecci\\u00f3n a todas las filas de esta tabla\",\"Extend\":\"Ampliar\",\"Changed\":\"Modificado\",\"Loading...\":\"Cargando...\",\"Please wait...\":\"Espere, por favor...\",\"Hide\":\"Ocultar\",\"Unlink\":\"Desvincular\",\"Not promoted\":\"No publicado en p\\u00e1gina principal\",\"Error message\":\"Mensaje de error\",\"Warning message\":\"Mensaje de advertencia\",\"Edit Link\":\"Editar enlace\",\"By @name on @date\":\"Por @name en @date\",\"By @name\":\"Por @name\",\"Alias: @alias\":\"Alias: @alias\",\"No alias\":\"Sin alias\",\"@label\":\"@label\",\"New revision\":\"Nueva revisi\\u00f3n\",\"Drag to re-order\":\"Arrastre para reordenar\",\"Status message\":\"Mensaje de estado\",\"An AJAX HTTP error occurred.\":\"Hubo un error HTTP AJAX.\",\"HTTP Result Code: !status\":\"C\\u00f3digo de Resultado HTTP: !status\",\"An AJAX HTTP request terminated abnormally.\":\"Una solicitud HTTP de AJAX termin\\u00f3 de manera anormal.\",\"Debugging information follows.\":\"A continuaci\\u00f3n se detalla la informaci\\u00f3n de depuraci\\u00f3n.\",\"Path: !uri\":\"Ruta: !uri\",\"StatusText: !statusText\":\"StatusText: !statusText\",\"ResponseText: !responseText\":\"ResponseText: !responseText\",\"ReadyState: !readyState\":\"ReadyState: !readyState\",\"Hide summary\":\"Ocultar resumen\",\"Edit summary\":\"Editar resumen\",\"Collapse\":\"Plegar\",\"The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.\":\"El archivo seleccionado %filename no se puede subir al servidor. Solo se permiten archivos con las siguientes extensiones: %extensions.\",\"Show row weights\":\"Mostrar pesos de la fila\",\"Hide row weights\":\"Ocultar pesos de la fila\",\"Close message\":\"Cerrar mensaje\",\"Needs to be updated\":\"Necesita ser actualizado\",\"Does not need to be updated\":\"No necesita ser actualizado\",\"Show all columns\":\"Mostrar todas las columnas\",\"Show table cells that were hidden to make the table fit within a small screen.\":\"Mostrar celdas de tablas que estaban ocultas para que la tabla se ajuste a una pantalla peque\\u00f1a.\",\"List additional actions\":\"Lista adicional de acciones\",\"Flag other translations as outdated\":\"Marcar las otras traducciones como obsoletas\",\"Do not flag other translations as outdated\":\"No marcar las otras traducciones como obsoletas\",\"opened\":\"abierto\",\"Horizontal orientation\":\"Orientaci\\u00f3n horizontal\",\"Vertical orientation\":\"Orientaci\\u00f3n vertical\",\"Tray orientation changed to @orientation.\":\"La orientaci\\u00f3n de la bandeja se ha cambiado a @orientation.\",\"You have unsaved changes.\":\"Hay cambios sin guardar.\",\"@action @title configuration options\":\"@action @title opciones de configuraci\\u00f3n\",\"Tabbing is no longer constrained by the Contextual module.\":\"Tabulando (Tabbing) ya no se ver\\u00e1 limitado por el m\\u00f3dulo Contextual (Contextual).\",\"Tabbing is constrained to a set of @contextualsCount and the edit mode toggle.\":\"La tabulaci\\u00f3n est\\u00e1 restringida a un conjunto de @contextualsCount y al cambio a modo de edici\\u00f3n.\",\"Press the esc key to exit.\":\"Presionar tecla esc para salir.\",\"@count contextual link\\u0003@count contextual links\":\"@count enlace contextual\\u0003@count enlaces contextuales\",\"!tour_item of !total\":\"!tour_item de !total\",\"End tour\":\"Final del recorrido\",\"The toolbar cannot be set to a horizontal orientation when it is locked.\":\"La barra de herramientas no puede ser puesta en orientaci\\u00f3n horizontal cuando esta bloqueada.\",\"Changing the text format to %text_format will permanently remove content that is not allowed in that text format.\\u003Cbr\\u003E\\u003Cbr\\u003ESave your changes before switching the text format to avoid losing data.\":\"Cambiar el formato de texto a %text_format eliminar\\u00e1 permanentemente el contenido que no est\\u00e1 permitido en ese formato de texto.\\u003Cbr\\u003E\\u003Cbr\\u003EGuarde sus datos antes de cambiar el formato de texto para evitar perder datos.\",\"Change text format?\":\"\\u00bfCambiar el formato de texto?\",\"Rich Text Editor, !label field\":\"Editor de texto con formato, campo !label\",\"Tray \\u0022@tray\\u0022 @action.\":\"Bandeja \\u0022@tray\\u0022 @action\",\"Tray @action.\":\"Bandeja @action.\",\"Hide lower priority columns\":\"Ocultar columnas de menor prioridad\",\"The response failed verification so will not be processed.\":\"La respuesta de verificaci\\u
100f3n fall\\u00f3, por lo que no se procesar\\u00e1.\",\"The callback URL is not local and not trusted: !url\":\"La URL de callback (llamada) no es local y no es confiable: !url\",\"CustomMessage: !customMessage\":\"CustomMessage: !customMessage\",\"Authored on @date\":\"Escrito el @date\",\"Insert this token into your form\":\"Inserte este comod\\u00edn en su formulario\",\"First click a text field to insert your tokens into.\":\"Primero haga clic en un campo de texto en el que quiera insertar sus patrones de reemplazo.\",\"Automatic alias\":\"Alias autom\\u00e1tico\",\"item\":\"elemento\",\"items\":\"elementos\",\"Expand all\":\"Expandir todo\",\"Collapse all\":\"Ocultar todo\",\"No revision\":\"Sin revisi\\u00f3n\"}},\"pluralFormula\":{\"1\":0,\"default\":1}};"; 2var mod_pagespeed_dLUD3h0_e8 = "(function(){const settingsElement=document.querySelector('head > script[type=\"application/json\"][data-drupal-selector=\"drupal-settings-json\"], body > script[type=\"application/json\"][data-drupal-selector=\"drupal-settings-json\"]',);window.drupalSettings={};if(settingsElement!==null){window.drupalSettings=JSON.parse(settingsElement.textContent);}})();"; 3var mod_pagespeed_Gz3E$c3ozg = "/**\n * @file\n * Defines the Drupal JavaScript API.\n */\n\n/**\n * A jQuery object, typically the return value from a `$(selector)` call.\n *\n * Holds an HTMLElement or a collection of HTMLElements.\n *\n * @typedef {object} jQuery\n *\n * @prop {number} length=0\n * Number of elements contained in the jQuery object.\n */\n\n/**\n * Variable generated by Drupal that holds all translated strings from PHP.\n *\n * Content of this variable is automatically created by Drupal when using the\n * Interface Translation module. It holds the translation of strings used on\n * the page.\n *\n * This variable is used to pass data from the backend to the frontend. Data\n * contained in `drupalSettings` is used during behavior initialization.\n *\n * @global\n *\n * @var {object} drupalTranslations\n */\n\n/**\n * Global Drupal object.\n *\n * All Drupal JavaScript APIs are contained in this namespace.\n *\n * @global\n *\n * @namespace\n */\nwindow.Drupal = { behaviors: {}, locale: {} };\n\n// JavaScript should be made compatible with libraries other than jQuery by\n// wrapping it in an anonymous closure.\n(function (\n Drupal,\n drupalSettings,\n drupalTranslations,\n console,\n Proxy,\n Reflect,\n) {\n /**\n * Helper to rethrow errors asynchronously.\n *\n * This way Errors bubbles up outside of the original callstack, making it\n * easier to debug errors in the browser.\n *\n * @param {Error|string} error\n * The error to be thrown.\n */\n Drupal.throwError = function (error) {\n setTimeout(() => {\n throw error;\n }, 0);\n };\n\n /**\n * Custom error thrown after attach/detach if one or more behaviors failed.\n * Initializes the JavaScript behaviors for page loads and Ajax requests.\n *\n * @callback Drupal~behaviorAttach\n *\n * @param {Document|HTMLElement} context\n * An element to detach behaviors from.\n * @param {?object} settings\n * An object containing settings for the current context. It is rarely used.\n *\n * @see Drupal.attachBehaviors\n */\n\n /**\n * Reverts and cleans up JavaScript behavior initialization.\n *\n * @callback Drupal~behaviorDetach\n *\n * @param {Document|HTMLElement} context\n * An element to attach behaviors to.\n * @param {object} settings\n * An object containing settings for the current context.\n * @param {string} trigger\n * One of `'unload'`, `'move'`, or `'serialize'`.\n *\n * @see Drupal.detachBehaviors\n */\n\n /**\n * @typedef {object} Drupal~behavior\n *\n * @prop {Drupal~behaviorAttach} attach\n * Function run on page load and after an Ajax call.\n * @prop {Drupal~behaviorDetach} [detach]\n * Function run when content is serialized or removed from the page.\n */\n\n /**\n * Holds all initialization methods.\n *\n * @namespace Drupal.behaviors\n *\n * @type {Object.<string, Drupal~behavior>}\n */\n\n /**\n * Defines a behavior to be run during attach and detach phases.\n *\n * Attaches all registered behaviors to a page element.\n *\n * Behaviors are event-triggered actions that attach to page elements,\n * enhancing default non-JavaScript UIs. Behaviors are registered in the\n * {@link Drupal.behaviors} object using the method 'attach' and optionally\n * also 'detach'.\n *\n * {@link Drupal.attachBehaviors} is added below to the `jQuery.ready` event\n * and therefore runs on initial page load. Developers implementing Ajax in\n * their solutions should also call this function after new page content has\n * been loaded, feeding in an element to be processed, in order to attach all\n * behaviors to the new content.\n *\n * Behaviors should use `var elements =\n * once('behavior-name', selector, context);` to ensure the behavior is\n * attached only once to a given element. (Doing so enables the reprocessing\n * of given elements, which may be needed on occasion despite the ability to\n * limit behavior attachment to a particular element.)\n *\n * @example\n * Drupal.behaviors.behaviorName = {\n * attach: function (context, settings) {\n * // ...\n * },\n * detach: function (context, settings, trigger) {\n * // ...\n * }\n * };\n *\n * @param {Document|HTMLElement} [context=document]\n * An element to attach behaviors to.\n * @param {object}
3 [settings=drupalSettings]\n * An object containing settings for the current context. If none is given,\n * the global {@link drupalSettings} object is used.\n *\n * @see Drupal~behaviorAttach\n * @see Drupal.detachBehaviors\n *\n * @throws {Drupal~DrupalBehaviorError}\n */\n Drupal.attachBehaviors = function (context, settings) {\n context = context || document;\n settings = settings || drupalSettings;\n const behaviors = Drupal.behaviors;\n // Execute all of them.\n Object.keys(behaviors || {}).forEach((i) => {\n if (typeof behaviors[i].attach === 'function') {\n // Don't stop the execution of behaviors in case of an error.\n try {\n behaviors[i].attach(context, settings);\n } catch (e) {\n Drupal.throwError(e);\n }\n }\n });\n };\n\n /**\n * Detaches registered behaviors from a page element.\n *\n * Developers implementing Ajax in their solutions should call this function\n * before page content is about to be removed, feeding in an element to be\n * processed, in order to allow special behaviors to detach from the content.\n *\n * Such implementations should use `once.filter()` and `once.remove()` to find\n * elements with their corresponding `Drupal.behaviors.behaviorName.attach`\n * implementation, i.e. `once.remove('behaviorName', selector, context)`,\n * to ensure the behavior is detached only from previously processed elements.\n *\n * @param {Document|HTMLElement} [context=document]\n * An element to detach behaviors from.\n * @param {object} [settings=drupalSettings]\n * An object containing settings for the current context. If none given,\n * the global {@link drupalSettings} object is used.\n * @param {string} [trigger='unload']\n * A string containing what's causing the behaviors to be detached. The\n * possible triggers are:\n * - `'unload'`: The context element is being removed from the DOM.\n * - `'move'`: The element is about to be moved within the DOM (for example,\n * during a tabledrag row swap). After the move is completed,\n * {@link Drupal.attachBehaviors} is called, so that the behavior can undo\n * whatever it did in response to the move. Many behaviors won't need to\n * do anything simply in response to the element being moved, but because\n * IFRAME elements reload their \"src\" when being moved within the DOM,\n * behaviors bound to IFRAME elements (like WYSIWYG editors) may need to\n * take some action.\n * - `'serialize'`: When an Ajax form is submitted, this is called with the\n * form as the context. This provides every behavior within the form an\n * opportunity to ensure that the field elements have correct content\n * in them before the form is serialized. The canonical use-case is so\n * that WYSIWYG editors can update the hidden textarea to which they are\n * bound.\n *\n * @throws {Drupal~DrupalBehaviorError}\n *\n * @see Drupal~behaviorDetach\n * @see Drupal.attachBehaviors\n */\n Drupal.detachBehaviors = function (context, settings, trigger) {\n context = context || document;\n settings = settings || drupalSettings;\n trigger = trigger || 'unload';\n const behaviors = Drupal.behaviors;\n // Execute all of them.\n Object.keys(behaviors || {}).forEach((i) => {\n if (typeof behaviors[i].detach === 'function') {\n // Don't stop the execution of behaviors in case of an error.\n try {\n behaviors[i].detach(context, settings, trigger);\n } catch (e) {\n Drupal.throwError(e);\n }\n }\n });\n };\n\n /**\n * Encodes special characters in a plain-text string for display as HTML.\n *\n * @param {string} str\n * The string to be encoded.\n *\n * @return {string}\n * The encoded string.\n *\n * @ingroup sanitization\n */\n Drupal.checkPlain = function (str) {\n str = str\n .toString()\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n return str;\n };\n\n /**\n * Replaces placeholders with sanitized values in a string.\n *\n * @param {string} str\n * A string with placeholders.\n * @param {object} args\n * An object of replacements pairs to make. Incidences of any key in this\n * array are replaced with the corresponding value. Based on the first\n * character of the key, the value is escaped and/or themed:\n * - `'!variable'`: inserted as is.\n * - `'@variable'`: escape plain text to HTML ({@link Drupal.checkPlain}).\n * - `'%variable'`: escape text and theme as a placeholder for user-\n * submitted content ({@link Drupal.checkPlain} +\n * `{@link Drupal.theme}('placeholder')`).\n *\n * @return {string}\n * The formatted string.\n *\n * @see Drupal.t\n */\n Drupal.formatString = function (str, args) {\n // Keep args intact.\n const processedArgs = {};\n // Transform arguments before inserting them.\n Object.keys(args || {}
3).forEach((key) => {\n switch (key.charAt(0)) {\n // Escaped only.\n case '@':\n processedArgs[key] = Drupal.checkPlain(args[key]);\n break;\n\n // Pass-through.\n case '!':\n processedArgs[key] = args[key];\n break;\n\n // Escaped and placeholder.\n default:\n processedArgs[key] = Drupal.theme('placeholder', args[key]);\n break;\n }\n });\n\n return Drupal.stringReplace(str, processedArgs, null);\n };\n\n /**\n * Replaces substring.\n *\n * The longest keys will be tried first. Once a substring has been replaced,\n * its new value will not be searched again.\n *\n * @param {string} str\n * A string with placeholders.\n * @param {object} args\n * Key-value pairs.\n * @param {Array|null} keys\n * Array of keys from `args`. Internal use only.\n *\n * @return {string}\n * The replaced string.\n */\n Drupal.stringReplace = function (str, args, keys) {\n if (str.length === 0) {\n return str;\n }\n\n // If the array of keys is not passed then collect the keys from the args.\n if (!Array.isArray(keys)) {\n keys = Object.keys(args || {});\n\n // Order the keys by the character length. The shortest one is the first.\n keys.sort((a, b) => a.length - b.length);\n }\n\n if (keys.length === 0) {\n return str;\n }\n\n // Take next longest one from the end.\n const key = keys.pop();\n const fragments = str.split(key);\n\n if (keys.length) {\n for (let i = 0; i < fragments.length; i++) {\n // Process each fragment with a copy of remaining keys.\n fragments[i] = Drupal.stringReplace(fragments[i], args, keys.slice(0));\n }\n }\n\n return fragments.join(args[key]);\n };\n\n /**\n * Translates strings to the page language, or a given language.\n *\n * See the documentation of the server-side t() function for further details.\n *\n * @param {string} str\n * A string containing the English text to translate.\n * @param {Object.<string, string>} [args]\n * An object of replacements pairs to make after translation. Incidences\n * of any key in this array are replaced with the corresponding value.\n * See {@link Drupal.formatString}.\n * @param {object} [options]\n * Additional options for translation.\n * @param {string} [options.context='']\n * The context the source string belongs to.\n *\n * @return {string}\n * The formatted string.\n * The translated string.\n */\n Drupal.t = function (str, args, options) {\n options = options || {};\n options.context = options.context || '';\n\n // Fetch the localized version of the string.\n if (\n typeof drupalTranslations !== 'undefined' &&\n drupalTranslations.strings &&\n drupalTranslations.strings[options.context] &&\n drupalTranslations.strings[options.context][str]\n ) {\n str = drupalTranslations.strings[options.context][str];\n }\n\n if (args) {\n str = Drupal.formatString(str, args);\n }\n return str;\n };\n\n /**\n * Returns the URL to a Drupal page.\n *\n * @param {string} path\n * Drupal path to transform to URL.\n *\n * @return {string}\n * The full URL.\n */\n Drupal.url = function (path) {\n return drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix + path;\n };\n\n /**\n * Returns the passed in URL as an absolute URL.\n *\n * @param {string} url\n * The URL string to be normalized to an absolute URL.\n *\n * @return {string}\n * The normalized, absolute URL.\n *\n * @see https://github.com/angular/angular.js/blob/v1.4.4/src/ng/urlUtils.js\n * @see https://grack.com/blog/2009/11/17/absolutizing-url-in-javascript\n * @see https://github.com/jquery/jquery-ui/blob/1.11.4/ui/tabs.js#L53\n */\n Drupal.url.toAbsolute = function (url) {\n const urlParsingNode = document.createElement('a');\n\n // Decode the URL first; this is required by IE <= 6. Decoding non-UTF-8\n // strings may throw an exception.\n try {\n url = decodeURIComponent(url);\n } catch (e) {\n // Empty.\n }\n\n urlParsingNode.setAttribute('href', url);
3\n\n // IE <= 7 normalizes the URL when assigned to the anchor node similar to\n // the other browsers.\n return urlParsingNode.cloneNode(false).href;\n };\n\n /**\n * Returns true if the URL is within Drupal's base path.\n *\n * @param {string} url\n * The URL string to be tested.\n *\n * @return {boolean}\n * `true` if local.\n *\n * @see https://github.com/jquery/jquery-ui/blob/1.11.4/ui/tabs.js#L58\n */\n Drupal.url.isLocal = function (url) {\n // Always use browser-derived absolute URLs in the comparison, to avoid\n // attempts to break out of the base path using directory traversal.\n let absoluteUrl = Drupal.url.toAbsolute(url);\n let { protocol } = window.location;\n\n // Consider URLs that match this site's base URL but use HTTPS instead of HTTP\n // as local as well.\n if (protocol === 'http:' && absoluteUrl.indexOf('https:') === 0) {\n protocol = 'https:';\n }\n let baseUrl = `${protocol}//${\n window.location.host\n }${drupalSettings.path.baseUrl.slice(0, -1)}`;\n\n // Decoding non-UTF-8 strings may throw an exception.\n try {\n absoluteUrl = decodeURIComponent(absoluteUrl);\n } catch (e) {\n // Empty.\n }\n try {\n baseUrl = decodeURIComponent(baseUrl);\n } catch (e) {\n // Empty.\n }\n\n // The given URL matches the site's base URL, or has a path under the site's\n // base URL.\n return absoluteUrl === baseUrl || absoluteUrl.indexOf(`${baseUrl}/`) === 0;\n };\n\n /**\n * Formats a string containing a count of items.\n *\n * This function ensures that the string is pluralized correctly. Since\n * {@link Drupal.t} is called by this function, make sure not to pass\n * already-localized strings to it.\n *\n * See the documentation of the server-side\n * \\Drupal\\Core\\StringTranslation\\TranslationInterface::formatPlural()\n * function for more details.\n *\n * @param {number} count\n * The item count to display.\n * @param {string} singular\n * The string for the singular case. Make sure it is clear this is singular,\n * to ease translation (e.g. use \"1 new comment\" instead of \"1 new\"). Do not\n * use @count in the singular string.\n * @param {string} plural\n * The string for the plural case. Make sure it is clear this is plural, to\n * ease translation. Use @count in place of the item count, as in \"@count\n * new comments\".\n * @param {object} [args]\n * An object of replacements pairs to make after translation. Incidences\n * of any key in this array are replaced with the corresponding value.\n * See {@link Drupal.formatString}.\n * Note that you do not need to include @count in this array.\n * This replacement is done automatically for the plural case.\n * @param {object} [options]\n * The options to pass to the {@link Drupal.t} function.\n *\n * @return {string}\n * A translated string.\n */\n Drupal.formatPlural = function (count, singular, plural, args, options) {\n args = args || {};\n args['@count'] = count;\n\n const pluralDelimiter = drupalSettings.pluralDelimiter;\n const translations = Drupal.t(\n singular + pluralDelimiter + plural,\n args,\n options,\n ).split(pluralDelimiter);\n let index = 0;\n\n // Determine the index of the plural form.\n if (\n typeof drupalTranslations !== 'undefined' &&\n drupalTranslations.pluralFormula\n ) {\n index =\n count in drupalTranslations.pluralFormula\n ? drupalTranslations.pluralFormula[count]\n : drupalTranslations.pluralFormula.default;\n } else if (args['@count'] !== 1) {\n index = 1;\n }\n\n return translations[index];\n };\n\n /**\n * Encodes a Drupal path for use in a URL.\n *\n * For aesthetic reasons slashes are not escaped.\n *\n * @param {string} item\n * Unencoded path.\n *\n * @return {string}\n * The encoded path.\n */\n Drupal.encodePath = function (item) {\n return window.encodeURIComponent(item).replace(/%2F/g, '/');\n };\n\n /**\n * Triggers deprecation error.\n *\n * Deprecation errors are only triggered if deprecation errors haven't\n * been suppressed.\n *\n * @param {Object} deprecation\n * The deprecation options.\n * @param {string} deprecation.message\n * The deprecation message.\n *\n * @see https://www.drupal.org/core/deprecation#javascript\n */\n Drupal.deprecationError = ({ message }) =>
3 {\n if (\n drupalSettings.suppressDeprecationErrors === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn(`[Deprecation] ${message}`);\n }\n };\n\n /**\n * Triggers deprecation error when object property is being used.\n *\n * @param {Object} deprecation\n * The deprecation options.\n * @param {Object} deprecation.target\n * The targeted object.\n * @param {string} deprecation.deprecatedProperty\n * A key of the deprecated property.\n * @param {string} deprecation.message\n * The deprecation message.\n * @returns {Object}\n *\n * @see https://www.drupal.org/core/deprecation#javascript\n */\n Drupal.deprecatedProperty = ({ target, deprecatedProperty, message }) => {\n // Proxy and Reflect are not supported by all browsers. Unsupported browsers\n // are ignored since this is a development feature.\n if (!Proxy || !Reflect) {\n return target;\n }\n\n return new Proxy(target, {\n get: (target, key, ...rest) => {\n if (key === deprecatedProperty) {\n Drupal.deprecationError({ message });\n }\n return Reflect.get(target, key, ...rest);\n },\n });\n };\n\n /**\n * Generates the themed representation of a Drupal object.\n *\n * All requests for themed output must go through this function. It examines\n * the request and routes it to the appropriate theme function. If the current\n * theme does not provide an override function, the generic theme function is\n * called.\n *\n * @example\n * <caption>To retrieve the HTML for text that should be emphasized and\n * displayed as a placeholder inside a sentence.</caption>\n * Drupal.theme('placeholder', text);\n *\n * @namespace\n *\n * @param {function} func\n * The name of the theme function to call.\n * @param {...args}\n * Additional arguments to pass along to the theme function.\n *\n * @return {string|object|HTMLElement|jQuery}\n * Any data the theme function returns. This could be a plain HTML string,\n * but also a complex object.\n */\n Drupal.theme = function (func, ...args) {\n if (func in Drupal.theme) {\n return Drupal.theme[func](...args);\n }\n };\n\n /**\n * Formats text for emphasized display in a placeholder inside a sentence.\n *\n * @param {string} str\n * The text to format (plain-text).\n *\n * @return {string}\n * The formatted text (html).\n */\n Drupal.theme.placeholder = function (str) {\n return `<em class=\"placeholder\">${Drupal.checkPlain(str)}</em>`;\n };\n\n /**\n * Determine if an element is visible.\n *\n * @param {HTMLElement} elem\n * The element to check.\n *\n * @return {boolean}\n * True if the element is visible.\n */\n Drupal.elementIsVisible = function (elem) {\n return !!(\n elem.offsetWidth ||\n elem.offsetHeight ||\n elem.getClientRects().length\n );\n };\n\n /**\n * Determine if an element is hidden.\n *\n * @param {HTMLElement} elem\n * The element to check.\n *\n * @return {boolean}\n * True if the element is hidden.\n */\n Drupal.elementIsHidden = function (elem) {\n return !Drupal.elementIsVisible(elem);\n };\n})(\n Drupal,\n window.drupalSettings,\n window.drupalTranslations,\n window.console,\n window.Proxy,\n window.Reflect,\n);\n"; 4var mod_pagespeed_4FihWyL66o = "// Allow other JavaScript libraries to use $.\nif (window.jQuery) {\n jQuery.noConflict();\n}\n\n// Class indicating that JS is enabled; used for styling purpose.\ndocument.documentElement.className += ' js';\n\n// JavaScript should be made compatible with libraries other than jQuery by\n// wrapping it in an anonymous closure.\n(function (Drupal, drupalSettings) {\n /**\n * Calls callback when document ready.\n *\n * @param {function} callback\n * The function to be called on document ready.\n */\n const domReady = (callback) => {\n const listener = () => {\n callback();\n document.removeEventListener('DOMContentLoaded', listener);\n };\n if (document.readyState !== 'loading') {\n setTimeout(callback, 0);\n } else {\n document.addEventListener('DOMContentLoaded', listener);\n }\n };
4\n\n // Attach all behaviors.\n domReady(() => {\n Drupal.attachBehaviors(document, drupalSettings);\n });\n})(Drupal, window.drupalSettings);\n"; 5var mod_pagespeed_QRmCG2TRXV = "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self,function(){var n=t.tabbable,o=t.tabbable={};e(o),o.noConflict=function(){return t.tabbable=n,o}}())}(this,(function(t){\"use strict\";var e=[\"input:not([inert])\",\"select:not([inert])\",\"textarea:not([inert])\",\"a[href]:not([inert])\",\"button:not([inert])\",\"[tabindex]:not(slot):not([inert])\",\"audio[controls]:not([inert])\",\"video[controls]:not([inert])\",'[contenteditable]:not([contenteditable=\"false\"]):not([inert])',\"details>summary:first-of-type:not([inert])\",\"details:not([inert])\"],n=e.join(\",\"),o=\"undefined\"==typeof Element,r=o?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,i=!o&&Element.prototype.getRootNode?function(t){var e;return null==t||null===(e=t.getRootNode)||void 0===e?void 0:e.call(t)}:function(t){return null==t?void 0:t.ownerDocument},a=function t(e,n){var o;void 0===n&&(n=!0);var r=null==e||null===(o=e.getAttribute)||void 0===o?void 0:o.call(e,\"inert\");return\"\"===r||\"true\"===r||n&&e&&t(e.parentNode)},l=function(t,e,o){if(a(t))return[];var i=Array.prototype.slice.apply(t.querySelectorAll(n));return e&&r.call(t,n)&&i.unshift(t),i=i.filter(o)},u=function t(e,o,i){for(var l=[],u=Array.from(e);u.length;){var d=u.shift();if(!a(d,!1))if(\"SLOT\"===d.tagName){var c=d.assignedElements(),f=t(c.length?c:d.children,!0,i);i.flatten?l.push.apply(l,f):l.push({scopeParent:d,candidates:f})}else{r.call(d,n)&&i.filter(d)&&(o||!e.includes(d))&&l.push(d);var s=d.shadowRoot||\"function\"==typeof i.getShadowRoot&&i.getShadowRoot(d),p=!a(s,!1)&&(!i.shadowRootFilter||i.shadowRootFilter(d));if(s&&p){var h=t(!0===s?d.children:s.children,!0,i);i.flatten?l.push.apply(l,h):l.push({scopeParent:d,candidates:h})}else u.unshift.apply(u,d.children)}}return l},d=function(t){return!isNaN(parseInt(t.getAttribute(\"tabindex\"),10))},c=function(t){if(!t)throw new Error(\"No node provided\");return t.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||function(t){var e,n=null==t||null===(e=t.getAttribute)||void 0===e?void 0:e.call(t,\"contenteditable\");return\"\"===n||\"true\"===n}(t))&&!d(t)?0:t.tabIndex},f=function(t,e){return t.tabIndex===e.tabIndex?t.documentOrder-e.documentOrder:t.tabIndex-e.tabIndex},s=function(t){return\"INPUT\"===t.tagName},p=function(t){return function(t){return s(t)&&\"radio\"===t.type}(t)&&!function(t){if(!t.name)return!0;var e,n=t.form||i(t),o=function(t){return n.querySelectorAll('input[type=\"radio\"][name=\"'+t+'\"]')};if(\"undefined\"!=typeof window&&void 0!==window.CSS&&\"function\"==typeof window.CSS.escape)e=o(window.CSS.escape(t.name));else try{e=o(t.name)}catch(t){return console.error(\"Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s\",t.message),!1}var r=function(t,e){for(var n=0;n<t.length;n++)if(t[n].checked&&t[n].form===e)return t[n]}(e,t.form);return!r||r===t}(t)},h=function(t){var e=t.getBoundingClientRect(),n=e.width,o=e.height;return 0===n&&0===o},v=function(t,e){var n=e.displayCheck,o=e.getShadowRoot;if(\"hidden\"===getComputedStyle(t).visibility)return!0;var a=r.call(t,\"details>summary:first-of-type\")?t.parentElement:t;if(r.call(a,\"details:not([open]) *\"))return!0;if(n&&\"full\"!==n&&\"legacy-full\"!==n){if(\"non-zero-area\"===n)return h(t)}else{if(\"function\"==typeof o){for(var l=t;t;){var u=t.parentElement,d=i(t);if(u&&!u.shadowRoot&&!0===o(u))return h(t);t=t.assignedSlot?t.assignedSlot:u||d===t.ownerDocument?u:d.host}t=l}if(function(t){var e,n,o,r,a=t&&i(t),l=null===(e=a)||void 0===e?void 0:e.host,u=!1;if(a&&a!==t)for(u=!!(null!==(n=l)&&void 0!==n&&null!==(o=n.ownerDocument)&&void 0!==o&&o.contains(l)||null!=t&&null!==(r=t.ownerDocument)&&void 0!==r&&r.contains(t));!u&&l;){var d,c,f;u=!(null===(c=l=null===(d=a=i(l))||void 0===d?void 0:d.host)||void 0===c||null===(f=c.ownerDocument)||void 0===f||!f.contains(l))}return u}(t))return!t.getClientRects().length;if(\"legacy-full\"!==n)return!0}return!1},b=function(t,e){return!(e.disabled||a(e)||function(t){return s(t)&&\"hidden\"===t.type}(e)||v(e,t)||function(t){return\"DETAILS\"===t.tagName&&Array.prototype.slice.apply(t.children).some((function(t){return\"SUMMARY\"===t.tagName}))}
5(e)||function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var e=t.parentElement;e;){if(\"FIELDSET\"===e.tagName&&e.disabled){for(var n=0;n<e.children.length;n++){var o=e.children.item(n);if(\"LEGEND\"===o.tagName)return!!r.call(e,\"fieldset[disabled] *\")||!o.contains(t)}return!0}e=e.parentElement}return!1}(e))},m=function(t,e){return!(p(e)||c(e)<0||!b(t,e))},g=function(t){var e=parseInt(t.getAttribute(\"tabindex\"),10);return!!(isNaN(e)||e>=0)},y=function t(e){var n=[],o=[];return e.forEach((function(e,r){var i=!!e.scopeParent,a=i?e.scopeParent:e,l=function(t,e){var n=c(t);return n<0&&e&&!d(t)?0:n}(a,i),u=i?t(e.candidates):a;0===l?i?n.push.apply(n,u):n.push(a):o.push({documentOrder:r,tabIndex:l,item:e,isScope:i,content:u})})),o.sort(f).reduce((function(t,e){return e.isScope?t.push.apply(t,e.content):t.push(e.content),t}),[]).concat(n)},w=e.concat(\"iframe\").join(\",\");t.focusable=function(t,e){return(e=e||{}).getShadowRoot?u([t],e.includeContainer,{filter:b.bind(null,e),flatten:!0,getShadowRoot:e.getShadowRoot}):l(t,e.includeContainer,b.bind(null,e))},t.getTabIndex=c,t.isFocusable=function(t,e){if(e=e||{},!t)throw new Error(\"No node provided\");return!1!==r.call(t,w)&&b(e,t)},t.isTabbable=function(t,e){if(e=e||{},!t)throw new Error(\"No node provided\");return!1!==r.call(t,n)&&m(e,t)},t.tabbable=function(t,e){var n;return n=(e=e||{}).getShadowRoot?u([t],e.includeContainer,{filter:m.bind(null,e),flatten:!1,getShadowRoot:e.getShadowRoot,shadowRootFilter:g}):l(t,e.includeContainer,m.bind(null,e)),y(n)},Object.defineProperty(t,\"__esModule\",{value:!0})}));";
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.