var mod_pagespeed_gGk5ZZVLjK = "/******/ (() => { // webpackBootstrap\n/******/ 	\"use strict\";\n/******/ 	// The require scope\n/******/ 	var __webpack_require__ = {};\n/******/ 	\n/************************************************************************/\n/******/ 	/* webpack/runtime/define property getters */\n/******/ 	(() => {\n/******/ 		// define getter functions for harmony exports\n/******/ 		__webpack_require__.d = (exports, definition) => {\n/******/ 			for(var key in definition) {\n/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ 				}\n/******/ 			}\n/******/ 		};\n/******/ 	})();\n/******/ 	\n/******/ 	/* webpack/runtime/hasOwnProperty shorthand */\n/******/ 	(() => {\n/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ 	})();\n/******/ 	\n/******/ 	/* webpack/runtime/make namespace object */\n/******/ 	(() => {\n/******/ 		// define __esModule on exports\n/******/ 		__webpack_require__.r = (exports) => {\n/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ 			}\n/******/ 			Object.defineProperty(exports, '__esModule', { value: true });\n/******/ 		};\n/******/ 	})();\n/******/ 	\n/************************************************************************/\nvar __webpack_exports__ = {};\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  actions: () => (/* binding */ actions),\n  addAction: () => (/* binding */ addAction),\n  addFilter: () => (/* binding */ addFilter),\n  applyFilters: () => (/* binding */ applyFilters),\n  createHooks: () => (/* reexport */ build_module_createHooks),\n  currentAction: () => (/* binding */ currentAction),\n  currentFilter: () => (/* binding */ currentFilter),\n  defaultHooks: () => (/* binding */ defaultHooks),\n  didAction: () => (/* binding */ didAction),\n  didFilter: () => (/* binding */ didFilter),\n  doAction: () => (/* binding */ doAction),\n  doingAction: () => (/* binding */ doingAction),\n  doingFilter: () => (/* binding */ doingFilter),\n  filters: () => (/* binding */ filters),\n  hasAction: () => (/* binding */ hasAction),\n  hasFilter: () => (/* binding */ hasFilter),\n  removeAction: () => (/* binding */ removeAction),\n  removeAllActions: () => (/* binding */ removeAllActions),\n  removeAllFilters: () => (/* binding */ removeAllFilters),\n  removeFilter: () => (/* binding */ removeFilter)\n});\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/validateNamespace.js\n/**\n * Validate a namespace string.\n *\n * @param {string} namespace The namespace to validate - should take the form\n *                           `vendor/plugin/function`.\n *\n * @return {boolean} Whether the namespace is valid.\n */\nfunction validateNamespace(namespace) {\n  if ('string' !== typeof namespace || '' === namespace) {\n    // eslint-disable-next-line no-console\n    console.error('The namespace must be a non-empty string.');\n    return false;\n  }\n  if (!/^[a-zA-Z][a-zA-Z0-9_.\\-\\/]*$/.test(namespace)) {\n    // eslint-disable-next-line no-console\n    console.error('The namespace can only contain numbers, letters, dashes, periods, underscores and slashes.');\n    return false;\n  }\n  return true;\n}\n/* harmony default export */ const build_module_validateNamespace = (validateNamespace);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/validateHookName.js\n/**\n * Validate a hookName string.\n *\n * @param {string} hookName The hook name to validate. Should be a non empty string containing\n *                          only numbers, letters, dashes, periods and underscores. Also,\n *                          the hook name cannot begin with `__`.\n *\n * @return {boolean} Whether the hook name is valid.\n */\nfunction validateHookName(hookName) {\n  if ('string' !== typeof hookName || '' === hookName) {\n    // eslint-disable-next-line no-console\n    console.error('The hook name must be a non-empty string.');\n    return false;\n  }\n  if (/^__/.test(hookName)) {\n    // eslint-disable-next-line no-console\n    console.error('The hook name cannot begin with `__`.');\n    return false;\n  }\n  if (!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(hookName)) {\n    // eslint-disable-next-line no-console\n    console.error('The hook name can only contain numbers, letters, dashes, periods and underscores.');\n    return false;\n  }\n  return true;\n}\n/* harmony default export */ const build_module_validateHookName = (validateHookName);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createAddHook.js\n/**\n * Internal dependencies\n */\n\n\n\n/**\n * @callback AddHook\n *\n * Adds the hook to the appropriate hooks container.\n *\n * @param {string}               hookName      Name of hook to add\n * @param {string}               namespace     The unique namespace identifying the callback in the form `vendor/plugin/function`.\n * @param {import('.').Callback} callback      Function to call when the hook is run\n * @param {number}               [priority=10] Priority of this hook\n */\n\n/**\n * Returns a function which, when invoked, will add a hook.\n *\n * @param {import('.').Hooks}    hooks    Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {AddHook} Function that adds a new hook.\n */\nfunction createAddHook(hooks, storeKey) {\n  return function addHook(hookName, namespace, callback, priority = 10) {\n    const hooksStore = hooks[storeKey];\n    if (!build_module_validateHookName(hookName)) {\n      return;\n    }\n    if (!build_module_validateNamespace(namespace)) {\n      return;\n    }\n    if ('function' !== typeof callback) {\n      // eslint-disable-next-line no-console\n      console.error('The hook callback must be a function.');\n      return;\n    }\n\n    // Validate numeric priority\n    if ('number' !== typeof priority) {\n      // eslint-disable-next-line no-console\n      console.error('If specified, the hook priority must be a number.');\n      return;\n    }\n    const handler = {\n      callback,\n      priority,\n      namespace\n    };\n    if (hooksStore[hookName]) {\n      // Find the correct insert index of the new hook.\n      const handlers = hooksStore[hookName].handlers;\n\n      /** @type {number} */\n      let i;\n      for (i = handlers.length; i > 0; i--) {\n        if (priority >= handlers[i - 1].priority) {\n          break;\n        }\n      }\n      if (i === handlers.length) {\n        // If append, operate via direct assignment.\n        handlers[i] = handler;\n      } else {\n        // Otherwise, insert before index via splice.\n        handlers.splice(i, 0, handler);\n      }\n\n      // We may also be currently executing this hook.  If the callback\n      // we're adding would come after the current callback, there's no\n      // problem; otherwise we need to increase the execution index of\n      // any other runs by 1 to account for the added element.\n      hooksStore.__current.forEach(hookInfo => {\n        if (hookInfo.name === hookName && hookInfo.currentIndex >= i) {\n          hookInfo.currentIndex++;\n        }\n      });\n    } else {\n      // This is the first hook of its type.\n      hooksStore[hookName] = {\n        handlers: [handler],\n        runs: 0\n      };\n    }\n    if (hookName !== 'hookAdded') {\n      hooks.doAction('hookAdded', hookName, namespace, callback, priority);\n    }\n  };\n}\n/* harmony default export */ const build_module_createAddHook = (createAddHook);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createRemoveHook.js\n/**\n * Internal dependencies\n */\n\n\n\n/**\n * @callback RemoveHook\n * Removes the specified callback (or all callbacks) from the hook with a given hookName\n * and namespace.\n *\n * @param {string} hookName  The name of the hook to modify.\n * @param {string} namespace The unique namespace identifying the callback in the\n *                           form `vendor/plugin/function`.\n *\n * @return {number | undefined} The number of callbacks removed.\n */\n\n/**\n * Returns a function which, when invoked, will remove a specified hook or all\n * hooks by the given name.\n *\n * @param {import('.').Hooks}    hooks             Hooks instance.\n * @param {import('.').StoreKey} storeKey\n * @param {boolean}              [removeAll=false] Whether to remove all callbacks for a hookName,\n *                                                 without regard to namespace. Used to create\n *                                                 `removeAll*` functions.\n *\n * @return {RemoveHook} Function that removes hooks.\n */\nfunction createRemoveHook(hooks, storeKey, removeAll = false) {\n  return function removeHook(hookName, namespace) {\n    const hooksStore = hooks[storeKey];\n    if (!build_module_validateHookName(hookName)) {\n      return;\n    }\n    if (!removeAll && !build_module_validateNamespace(namespace)) {\n      return;\n    }\n\n    // Bail if no hooks exist by this name.\n    if (!hooksStore[hookName]) {\n      return 0;\n    }\n    let handlersRemoved = 0;\n    if (removeAll) {\n      handlersRemoved = hooksStore[hookName].handlers.length;\n      hooksStore[hookName] = {\n        runs: hooksStore[hookName].runs,\n        handlers: []\n      };\n    } else {\n      // Try to find the specified callback to remove.\n      const handlers = hooksStore[hookName].handlers;\n      for (let i = handlers.length - 1; i >= 0; i--) {\n        if (handlers[i].namespace === namespace) {\n          handlers.splice(i, 1);\n          handlersRemoved++;\n          // This callback may also be part of a hook that is\n          // currently executing.  If the callback we're removing\n          // comes after the current callback, there's no problem;\n          // otherwise we need to decrease the execution index of any\n          // other runs by 1 to account for the removed element.\n          hooksStore.__current.forEach(hookInfo => {\n            if (hookInfo.name === hookName && hookInfo.currentIndex >= i) {\n              hookInfo.currentIndex--;\n            }\n          });\n        }\n      }\n    }\n    if (hookName !== 'hookRemoved') {\n      hooks.doAction('hookRemoved', hookName, namespace);\n    }\n    return handlersRemoved;\n  };\n}\n/* harmony default export */ const build_module_createRemoveHook = (createRemoveHook);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createHasHook.js\n/**\n * @callback HasHook\n *\n * Returns whether any handlers are attached for the given hookName and optional namespace.\n *\n * @param {string} hookName    The name of the hook to check for.\n * @param {string} [namespace] Optional. The unique namespace identifying the callback\n *                             in the form `vendor/plugin/function`.\n *\n * @return {boolean} Whether there are handlers that are attached to the given hook.\n */\n/**\n * Returns a function which, when invoked, will return whether any handlers are\n * attached to a particular hook.\n *\n * @param {import('.').Hooks}    hooks    Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {HasHook} Function that returns whether any handlers are\n *                   attached to a particular hook and optional namespace.\n */\nfunction createHasHook(hooks, storeKey) {\n  return function hasHook(hookName, namespace) {\n    const hooksStore = hooks[storeKey];\n\n    // Use the namespace if provided.\n    if ('undefined' !== typeof namespace) {\n      return hookName in hooksStore && hooksStore[hookName].handlers.some(hook => hook.namespace === namespace);\n    }\n    return hookName in hooksStore;\n  };\n}\n/* harmony default export */ const build_module_createHasHook = (createHasHook);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createRunHook.js\n/**\n * Returns a function which, when invoked, will execute all callbacks\n * registered to a hook of the specified type, optionally returning the final\n * value of the call chain.\n *\n * @param {import('.').Hooks}    hooks                  Hooks instance.\n * @param {import('.').StoreKey} storeKey\n * @param {boolean}              [returnFirstArg=false] Whether each hook callback is expected to\n *                                                      return its first argument.\n *\n * @return {(hookName:string, ...args: unknown[]) => undefined|unknown} Function that runs hook callbacks.\n */\nfunction createRunHook(hooks, storeKey, returnFirstArg = false) {\n  return function runHooks(hookName, ...args) {\n    const hooksStore = hooks[storeKey];\n    if (!hooksStore[hookName]) {\n      hooksStore[hookName] = {\n        handlers: [],\n        runs: 0\n      };\n    }\n    hooksStore[hookName].runs++;\n    const handlers = hooksStore[hookName].handlers;\n\n    // The following code is stripped from production builds.\n    if (false) {}\n    if (!handlers || !handlers.length) {\n      return returnFirstArg ? args[0] : undefined;\n    }\n    const hookInfo = {\n      name: hookName,\n      currentIndex: 0\n    };\n    hooksStore.__current.push(hookInfo);\n    while (hookInfo.currentIndex < handlers.length) {\n      const handler = handlers[hookInfo.currentIndex];\n      const result = handler.callback.apply(null, args);\n      if (returnFirstArg) {\n        args[0] = result;\n      }\n      hookInfo.currentIndex++;\n    }\n    hooksStore.__current.pop();\n    if (returnFirstArg) {\n      return args[0];\n    }\n    return undefined;\n  };\n}\n/* harmony default export */ const build_module_createRunHook = (createRunHook);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createCurrentHook.js\n/**\n * Returns a function which, when invoked, will return the name of the\n * currently running hook, or `null` if no hook of the given type is currently\n * running.\n *\n * @param {import('.').Hooks}    hooks    Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {() => string | null} Function that returns the current hook name or null.\n */\nfunction createCurrentHook(hooks, storeKey) {\n  return function currentHook() {\n    var _hooksStore$__current;\n    const hooksStore = hooks[storeKey];\n    return (_hooksStore$__current = hooksStore.__current[hooksStore.__current.length - 1]?.name) !== null && _hooksStore$__current !== void 0 ? _hooksStore$__current : null;\n  };\n}\n/* harmony default export */ const build_module_createCurrentHook = (createCurrentHook);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createDoingHook.js\n/**\n * @callback DoingHook\n * Returns whether a hook is currently being executed.\n *\n * @param {string} [hookName] The name of the hook to check for.  If\n *                            omitted, will check for any hook being executed.\n *\n * @return {boolean} Whether the hook is being executed.\n */\n\n/**\n * Returns a function which, when invoked, will return whether a hook is\n * currently being executed.\n *\n * @param {import('.').Hooks}    hooks    Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {DoingHook} Function that returns whether a hook is currently\n *                     being executed.\n */\nfunction createDoingHook(hooks, storeKey) {\n  return function doingHook(hookName) {\n    const hooksStore = hooks[storeKey];\n\n    // If the hookName was not passed, check for any current hook.\n    if ('undefined' === typeof hookName) {\n      return 'undefined' !== typeof hooksStore.__current[0];\n    }\n\n    // Return the __current hook.\n    return hooksStore.__current[0] ? hookName === hooksStore.__current[0].name : false;\n  };\n}\n/* harmony default export */ const build_module_createDoingHook = (createDoingHook);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createDidHook.js\n/**\n * Internal dependencies\n */\n\n\n/**\n * @callback DidHook\n *\n * Returns the number of times an action has been fired.\n *\n * @param {string} hookName The hook name to check.\n *\n * @return {number | undefined} The number of times the hook has run.\n */\n\n/**\n * Returns a function which, when invoked, will return the number of times a\n * hook has been called.\n *\n * @param {import('.').Hooks}    hooks    Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {DidHook} Function that returns a hook's call count.\n */\nfunction createDidHook(hooks, storeKey) {\n  return function didHook(hookName) {\n    const hooksStore = hooks[storeKey];\n    if (!build_module_validateHookName(hookName)) {\n      return;\n    }\n    return hooksStore[hookName] && hooksStore[hookName].runs ? hooksStore[hookName].runs : 0;\n  };\n}\n/* harmony default export */ const build_module_createDidHook = (createDidHook);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/createHooks.js\n/**\n * Internal dependencies\n */\n\n\n\n\n\n\n\n\n/**\n * Internal class for constructing hooks. Use `createHooks()` function\n *\n * Note, it is necessary to expose this class to make its type public.\n *\n * @private\n */\nclass _Hooks {\n  constructor() {\n    /** @type {import('.').Store} actions */\n    this.actions = Object.create(null);\n    this.actions.__current = [];\n\n    /** @type {import('.').Store} filters */\n    this.filters = Object.create(null);\n    this.filters.__current = [];\n    this.addAction = build_module_createAddHook(this, 'actions');\n    this.addFilter = build_module_createAddHook(this, 'filters');\n    this.removeAction = build_module_createRemoveHook(this, 'actions');\n    this.removeFilter = build_module_createRemoveHook(this, 'filters');\n    this.hasAction = build_module_createHasHook(this, 'actions');\n    this.hasFilter = build_module_createHasHook(this, 'filters');\n    this.removeAllActions = build_module_createRemoveHook(this, 'actions', true);\n    this.removeAllFilters = build_module_createRemoveHook(this, 'filters', true);\n    this.doAction = build_module_createRunHook(this, 'actions');\n    this.applyFilters = build_module_createRunHook(this, 'filters', true);\n    this.currentAction = build_module_createCurrentHook(this, 'actions');\n    this.currentFilter = build_module_createCurrentHook(this, 'filters');\n    this.doingAction = build_module_createDoingHook(this, 'actions');\n    this.doingFilter = build_module_createDoingHook(this, 'filters');\n    this.didAction = build_module_createDidHook(this, 'actions');\n    this.didFilter = build_module_createDidHook(this, 'filters');\n  }\n}\n\n/** @typedef {_Hooks} Hooks */\n\n/**\n * Returns an instance of the hooks object.\n *\n * @return {Hooks} A Hooks instance.\n */\nfunction createHooks() {\n  return new _Hooks();\n}\n/* harmony default export */ const build_module_createHooks = (createHooks);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/hooks/build-module/index.js\n/**\n * Internal dependencies\n */\n\n\n/** @typedef {(...args: any[])=>any} Callback */\n\n/**\n * @typedef Handler\n * @property {Callback} callback  The callback\n * @property {string}   namespace The namespace\n * @property {number}   priority  The namespace\n */\n\n/**\n * @typedef Hook\n * @property {Handler[]} handlers Array of handlers\n * @property {number}    runs     Run counter\n */\n\n/**\n * @typedef Current\n * @property {string} name         Hook name\n * @property {number} currentIndex The index\n */\n\n/**\n * @typedef {Record<string, Hook> & {__current: Current[]}} Store\n */\n\n/**\n * @typedef {'actions' | 'filters'} StoreKey\n */\n\n/**\n * @typedef {import('./createHooks').Hooks} Hooks\n */\n\nconst defaultHooks = build_module_createHooks();\nconst {\n  addAction,\n  addFilter,\n  removeAction,\n  removeFilter,\n  hasAction,\n  hasFilter,\n  removeAllActions,\n  removeAllFilters,\n  doAction,\n  applyFilters,\n  currentAction,\n  currentFilter,\n  doingAction,\n  doingFilter,\n  didAction,\n  didFilter,\n  actions,\n  filters\n} = defaultHooks;\n\n\n(window.wp = window.wp || {}).hooks = __webpack_exports__;\n/******/ })()\n;";
var mod_pagespeed_kCTYxfbnue = "/******/ (() => { // webpackBootstrap\n/******/ 	var __webpack_modules__ = ({\n\n/***/ 2058:\n/***/ ((module, exports, __webpack_require__) => {\n\nvar __WEBPACK_AMD_DEFINE_RESULT__;/* global window, exports, define */\n\n!function() {\n    'use strict'\n\n    var re = {\n        not_string: /[^s]/,\n        not_bool: /[^t]/,\n        not_type: /[^T]/,\n        not_primitive: /[^v]/,\n        number: /[diefg]/,\n        numeric_arg: /[bcdiefguxX]/,\n        json: /[j]/,\n        not_json: /[^j]/,\n        text: /^[^\\x25]+/,\n        modulo: /^\\x25{2}/,\n        placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n        key: /^([a-z_][a-z_\\d]*)/i,\n        key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n        index_access: /^\\[(\\d+)\\]/,\n        sign: /^[+-]/\n    }\n\n    function sprintf(key) {\n        // `arguments` is not an array, but should be fine for this call\n        return sprintf_format(sprintf_parse(key), arguments)\n    }\n\n    function vsprintf(fmt, argv) {\n        return sprintf.apply(null, [fmt].concat(argv || []))\n    }\n\n    function sprintf_format(parse_tree, argv) {\n        var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n        for (i = 0; i < tree_length; i++) {\n            if (typeof parse_tree[i] === 'string') {\n                output += parse_tree[i]\n            }\n            else if (typeof parse_tree[i] === 'object') {\n                ph = parse_tree[i] // convenience purposes only\n                if (ph.keys) { // keyword argument\n                    arg = argv[cursor]\n                    for (k = 0; k < ph.keys.length; k++) {\n                        if (arg == undefined) {\n                            throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n                        }\n                        arg = arg[ph.keys[k]]\n                    }\n                }\n                else if (ph.param_no) { // positional argument (explicit)\n                    arg = argv[ph.param_no]\n                }\n                else { // positional argument (implicit)\n                    arg = argv[cursor++]\n                }\n\n                if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n                    arg = arg()\n                }\n\n                if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n                    throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n                }\n\n                if (re.number.test(ph.type)) {\n                    is_positive = arg >= 0\n                }\n\n                switch (ph.type) {\n                    case 'b':\n                        arg = parseInt(arg, 10).toString(2)\n                        break\n                    case 'c':\n                        arg = String.fromCharCode(parseInt(arg, 10))\n                        break\n                    case 'd':\n                    case 'i':\n                        arg = parseInt(arg, 10)\n                        break\n                    case 'j':\n                        arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n                        break\n                    case 'e':\n                        arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n                        break\n                    case 'f':\n                        arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n                        break\n                    case 'g':\n                        arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n                        break\n                    case 'o':\n                        arg = (parseInt(arg, 10) >>> 0).toString(8)\n                        break\n                    case 's':\n                        arg = String(arg)\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 't':\n                        arg = String(!!arg)\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'T':\n                        arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'u':\n                        arg = parseInt(arg, 10) >>> 0\n                        break\n                    case 'v':\n                        arg = arg.valueOf()\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'x':\n                        arg = (parseInt(arg, 10) >>> 0).toString(16)\n                        break\n                    case 'X':\n                        arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n                        break\n                }\n                if (re.json.test(ph.type)) {\n                    output += arg\n                }\n                else {\n                    if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n                        sign = is_positive ? '+' : '-'\n                        arg = arg.toString().replace(re.sign, '')\n                    }\n                    else {\n                        sign = ''\n                    }\n                    pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n                    pad_length = ph.width - (sign + arg).length\n                    pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n                    output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n                }\n            }\n        }\n        return output\n    }\n\n    var sprintf_cache = Object.create(null)\n\n    function sprintf_parse(fmt) {\n        if (sprintf_cache[fmt]) {\n            return sprintf_cache[fmt]\n        }\n\n        var _fmt = fmt, match, parse_tree = [], arg_names = 0\n        while (_fmt) {\n            if ((match = re.text.exec(_fmt)) !== null) {\n                parse_tree.push(match[0])\n            }\n            else if ((match = re.modulo.exec(_fmt)) !== null) {\n                parse_tree.push('%')\n            }\n            else if ((match = re.placeholder.exec(_fmt)) !== null) {\n                if (match[2]) {\n                    arg_names |= 1\n                    var field_list = [], replacement_field = match[2], field_match = []\n                    if ((field_match = re.key.exec(replacement_field)) !== null) {\n                        field_list.push(field_match[1])\n                        while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n                            if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n                                field_list.push(field_match[1])\n                            }\n                            else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n                                field_list.push(field_match[1])\n                            }\n                            else {\n                                throw new SyntaxError('[sprintf] failed to parse named argument key')\n                            }\n                        }\n                    }\n                    else {\n                        throw new SyntaxError('[sprintf] failed to parse named argument key')\n                    }\n                    match[2] = field_list\n                }\n                else {\n                    arg_names |= 2\n                }\n                if (arg_names === 3) {\n                    throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n                }\n\n                parse_tree.push(\n                    {\n                        placeholder: match[0],\n                        param_no:    match[1],\n                        keys:        match[2],\n                        sign:        match[3],\n                        pad_char:    match[4],\n                        align:       match[5],\n                        width:       match[6],\n                        precision:   match[7],\n                        type:        match[8]\n                    }\n                )\n            }\n            else {\n                throw new SyntaxError('[sprintf] unexpected placeholder')\n            }\n            _fmt = _fmt.substring(match[0].length)\n        }\n        return sprintf_cache[fmt] = parse_tree\n    }\n\n    /**\n     * export to either browser or node.js\n     */\n    /* eslint-disable quote-props */\n    if (true) {\n        exports.sprintf = sprintf\n        exports.vsprintf = vsprintf\n    }\n    if (typeof window !== 'undefined') {\n        window['sprintf'] = sprintf\n        window['vsprintf'] = vsprintf\n\n        if (true) {\n            !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n                return {\n                    'sprintf': sprintf,\n                    'vsprintf': vsprintf\n                }\n            }).call(exports, __webpack_require__, exports, module),\n		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))\n        }\n    }\n    /* eslint-enable quote-props */\n}(); // eslint-disable-line\n\n\n/***/ })\n\n/******/ 	});\n/************************************************************************/\n/******/ 	// The module cache\n/******/ 	var __webpack_module_cache__ = {};\n/******/ 	\n/******/ 	// The require function\n/******/ 	function __webpack_require__(moduleId) {\n/******/ 		// Check if module is in cache\n/******/ 		var cachedModule = __webpack_module_cache__[moduleId];\n/******/ 		if (cachedModule !== undefined) {\n/******/ 			return cachedModule.exports;\n/******/ 		}\n/******/ 		// Create a new module (and put it into the cache)\n/******/ 		var module = __webpack_module_cache__[moduleId] = {\n/******/ 			// no module.id needed\n/******/ 			// no module.loaded needed\n/******/ 			exports: {}\n/******/ 		};\n/******/ 	\n/******/ 		// Execute the module function\n/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ 	\n/******/ 		// Return the exports of the module\n/******/ 		return module.exports;\n/******/ 	}\n/******/ 	\n/************************************************************************/\n/******/ 	/* webpack/runtime/compat get default export */\n/******/ 	(() => {\n/******/ 		// getDefaultExport function for compatibility with non-harmony modules\n/******/ 		__webpack_require__.n = (module) => {\n/******/ 			var getter = module && module.__esModule ?\n/******/ 				() => (module['default']) :\n/******/ 				() => (module);\n/******/ 			__webpack_require__.d(getter, { a: getter });\n/******/ 			return getter;\n/******/ 		};\n/******/ 	})();\n/******/ 	\n/******/ 	/* webpack/runtime/define property getters */\n/******/ 	(() => {\n/******/ 		// define getter functions for harmony exports\n/******/ 		__webpack_require__.d = (exports, definition) => {\n/******/ 			for(var key in definition) {\n/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ 				}\n/******/ 			}\n/******/ 		};\n/******/ 	})();\n/******/ 	\n/******/ 	/* webpack/runtime/hasOwnProperty shorthand */\n/******/ 	(() => {\n/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ 	})();\n/******/ 	\n/******/ 	/* webpack/runtime/make namespace object */\n/******/ 	(() => {\n/******/ 		// define __esModule on exports\n/******/ 		__webpack_require__.r = (exports) => {\n/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ 			}\n/******/ 			Object.defineProperty(exports, '__esModule', { value: true });\n/******/ 		};\n/******/ 	})();\n/******/ 	\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n(() => {\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  __: () => (/* reexport */ __),\n  _n: () => (/* reexport */ _n),\n  _nx: () => (/* reexport */ _nx),\n  _x: () => (/* reexport */ _x),\n  createI18n: () => (/* reexport */ createI18n),\n  defaultI18n: () => (/* reexport */ default_i18n),\n  getLocaleData: () => (/* reexport */ getLocaleData),\n  hasTranslation: () => (/* reexport */ hasTranslation),\n  isRTL: () => (/* reexport */ isRTL),\n  resetLocaleData: () => (/* reexport */ resetLocaleData),\n  setLocaleData: () => (/* reexport */ setLocaleData),\n  sprintf: () => (/* reexport */ sprintf_sprintf),\n  subscribe: () => (/* reexport */ subscribe)\n});\n\n;// CONCATENATED MODULE: ./node_modules/memize/dist/index.js\n/**\n * Memize options object.\n *\n * @typedef MemizeOptions\n *\n * @property {number} [maxSize] Maximum size of the cache.\n */\n\n/**\n * Internal cache entry.\n *\n * @typedef MemizeCacheNode\n *\n * @property {?MemizeCacheNode|undefined} [prev] Previous node.\n * @property {?MemizeCacheNode|undefined} [next] Next node.\n * @property {Array<*>}                   args   Function arguments for cache\n *                                               entry.\n * @property {*}                          val    Function result.\n */\n\n/**\n * Properties of the enhanced function for controlling cache.\n *\n * @typedef MemizeMemoizedFunction\n *\n * @property {()=>void} clear Clear the cache.\n */\n\n/**\n * Accepts a function to be memoized, and returns a new memoized function, with\n * optional options.\n *\n * @template {(...args: any[]) => any} F\n *\n * @param {F}             fn        Function to memoize.\n * @param {MemizeOptions} [options] Options object.\n *\n * @return {((...args: Parameters<F>) => ReturnType<F>) & MemizeMemoizedFunction} Memoized function.\n */\nfunction memize(fn, options) {\n	var size = 0;\n\n	/** @type {?MemizeCacheNode|undefined} */\n	var head;\n\n	/** @type {?MemizeCacheNode|undefined} */\n	var tail;\n\n	options = options || {};\n\n	function memoized(/* ...args */) {\n		var node = head,\n			len = arguments.length,\n			args,\n			i;\n\n		searchCache: while (node) {\n			// Perform a shallow equality test to confirm that whether the node\n			// under test is a candidate for the arguments passed. Two arrays\n			// are shallowly equal if their length matches and each entry is\n			// strictly equal between the two sets. Avoid abstracting to a\n			// function which could incur an arguments leaking deoptimization.\n\n			// Check whether node arguments match arguments length\n			if (node.args.length !== arguments.length) {\n				node = node.next;\n				continue;\n			}\n\n			// Check whether node arguments match arguments values\n			for (i = 0; i < len; i++) {\n				if (node.args[i] !== arguments[i]) {\n					node = node.next;\n					continue searchCache;\n				}\n			}\n\n			// At this point we can assume we've found a match\n\n			// Surface matched node to head if not already\n			if (node !== head) {\n				// As tail, shift to previous. Must only shift if not also\n				// head, since if both head and tail, there is no previous.\n				if (node === tail) {\n					tail = node.prev;\n				}\n\n				// Adjust siblings to point to each other. If node was tail,\n				// this also handles new tail's empty `next` assignment.\n				/** @type {MemizeCacheNode} */ (node.prev).next = node.next;\n				if (node.next) {\n					node.next.prev = node.prev;\n				}\n\n				node.next = head;\n				node.prev = null;\n				/** @type {MemizeCacheNode} */ (head).prev = node;\n				head = node;\n			}\n\n			// Return immediately\n			return node.val;\n		}\n\n		// No cached value found. Continue to insertion phase:\n\n		// Create a copy of arguments (avoid leaking deoptimization)\n		args = new Array(len);\n		for (i = 0; i < len; i++) {\n			args[i] = arguments[i];\n		}\n\n		node = {\n			args: args,\n\n			// Generate the result from original function\n			val: fn.apply(null, args),\n		};\n\n		// Don't need to check whether node is already head, since it would\n		// have been returned above already if it was\n\n		// Shift existing head down list\n		if (head) {\n			head.prev = node;\n			node.next = head;\n		} else {\n			// If no head, follows that there's no tail (at initial or reset)\n			tail = node;\n		}\n\n		// Trim tail if we're reached max size and are pending cache insertion\n		if (size === /** @type {MemizeOptions} */ (options).maxSize) {\n			tail = /** @type {MemizeCacheNode} */ (tail).prev;\n			/** @type {MemizeCacheNode} */ (tail).next = null;\n		} else {\n			size++;\n		}\n\n		head = node;\n\n		return node.val;\n	}\n\n	memoized.clear = function () {\n		head = null;\n		tail = null;\n		size = 0;\n	};\n\n	// Ignore reason: There's not a clear solution to create an intersection of\n	// the function with additional properties, where the goal is to retain the\n	// function signature of the incoming argument and add control properties\n	// on the return value.\n\n	// @ts-ignore\n	return memoized;\n}\n\n\n\n// EXTERNAL MODULE: ./node_modules/sprintf-js/src/sprintf.js\nvar sprintf = __webpack_require__(2058);\nvar sprintf_default = /*#__PURE__*/__webpack_require__.n(sprintf);\n;// CONCATENATED MODULE: ./node_modules/@wordpress/i18n/build-module/sprintf.js\n/**\n * External dependencies\n */\n\n\n\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\nconst logErrorOnce = memize(console.error); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string} format The format of the string to generate.\n * @param {...*}   args   Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\nfunction sprintf_sprintf(format, ...args) {\n  try {\n    return sprintf_default().sprintf(format, ...args);\n  } catch (error) {\n    if (error instanceof Error) {\n      logErrorOnce('sprintf error: \\n\\n' + error.toString());\n    }\n    return format;\n  }\n}\n\n;// CONCATENATED MODULE: ./node_modules/@tannin/postfix/index.js\nvar PRECEDENCE, OPENERS, TERMINATORS, PATTERN;\n\n/**\n * Operator precedence mapping.\n *\n * @type {Object}\n */\nPRECEDENCE = {\n	'(': 9,\n	'!': 8,\n	'*': 7,\n	'/': 7,\n	'%': 7,\n	'+': 6,\n	'-': 6,\n	'<': 5,\n	'<=': 5,\n	'>': 5,\n	'>=': 5,\n	'==': 4,\n	'!=': 4,\n	'&&': 3,\n	'||': 2,\n	'?': 1,\n	'?:': 1,\n};\n\n/**\n * Characters which signal pair opening, to be terminated by terminators.\n *\n * @type {string[]}\n */\nOPENERS = [ '(', '?' ];\n\n/**\n * Characters which signal pair termination, the value an array with the\n * opener as its first member. The second member is an optional operator\n * replacement to push to the stack.\n *\n * @type {string[]}\n */\nTERMINATORS = {\n	')': [ '(' ],\n	':': [ '?', '?:' ],\n};\n\n/**\n * Pattern matching operators and openers.\n *\n * @type {RegExp}\n */\nPATTERN = /<=|>=|==|!=|&&|\\|\\||\\?:|\\(|!|\\*|\\/|%|\\+|-|<|>|\\?|\\)|:/;\n\n/**\n * Given a C expression, returns the equivalent postfix (Reverse Polish)\n * notation terms as an array.\n *\n * If a postfix string is desired, simply `.join( ' ' )` the result.\n *\n * @example\n *\n * ```js\n * import postfix from '@tannin/postfix';\n *\n * postfix( 'n > 1' );\n * // ⇒ [ 'n', '1', '>' ]\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {string[]} Postfix terms.\n */\nfunction postfix( expression ) {\n	var terms = [],\n		stack = [],\n		match, operator, term, element;\n\n	while ( ( match = expression.match( PATTERN ) ) ) {\n		operator = match[ 0 ];\n\n		// Term is the string preceding the operator match. It may contain\n		// whitespace, and may be empty (if operator is at beginning).\n		term = expression.substr( 0, match.index ).trim();\n		if ( term ) {\n			terms.push( term );\n		}\n\n		while ( ( element = stack.pop() ) ) {\n			if ( TERMINATORS[ operator ] ) {\n				if ( TERMINATORS[ operator ][ 0 ] === element ) {\n					// Substitution works here under assumption that because\n					// the assigned operator will no longer be a terminator, it\n					// will be pushed to the stack during the condition below.\n					operator = TERMINATORS[ operator ][ 1 ] || operator;\n					break;\n				}\n			} else if ( OPENERS.indexOf( element ) >= 0 || PRECEDENCE[ element ] < PRECEDENCE[ operator ] ) {\n				// Push to stack if either an opener or when pop reveals an\n				// element of lower precedence.\n				stack.push( element );\n				break;\n			}\n\n			// For each popped from stack, push to terms.\n			terms.push( element );\n		}\n\n		if ( ! TERMINATORS[ operator ] ) {\n			stack.push( operator );\n		}\n\n		// Slice matched fragment from expression to continue match.\n		expression = expression.substr( match.index + operator.length );\n	}\n\n	// Push remainder of operand, if exists, to terms.\n	expression = expression.trim();\n	if ( expression ) {\n		terms.push( expression );\n	}\n\n	// Pop remaining items from stack into terms.\n	return terms.concat( stack.reverse() );\n}\n\n;// CONCATENATED MODULE: ./node_modules/@tannin/evaluate/index.js\n/**\n * Operator callback functions.\n *\n * @type {Object}\n */\nvar OPERATORS = {\n	'!': function( a ) {\n		return ! a;\n	},\n	'*': function( a, b ) {\n		return a * b;\n	},\n	'/': function( a, b ) {\n		return a / b;\n	},\n	'%': function( a, b ) {\n		return a % b;\n	},\n	'+': function( a, b ) {\n		return a + b;\n	},\n	'-': function( a, b ) {\n		return a - b;\n	},\n	'<': function( a, b ) {\n		return a < b;\n	},\n	'<=': function( a, b ) {\n		return a <= b;\n	},\n	'>': function( a, b ) {\n		return a > b;\n	},\n	'>=': function( a, b ) {\n		return a >= b;\n	},\n	'==': function( a, b ) {\n		return a === b;\n	},\n	'!=': function( a, b ) {\n		return a !== b;\n	},\n	'&&': function( a, b ) {\n		return a && b;\n	},\n	'||': function( a, b ) {\n		return a || b;\n	},\n	'?:': function( a, b, c ) {\n		if ( a ) {\n			throw b;\n		}\n\n		return c;\n	},\n};\n\n/**\n * Given an array of postfix terms and operand variables, returns the result of\n * the postfix evaluation.\n *\n * @example\n *\n * ```js\n * import evaluate from '@tannin/evaluate';\n *\n * // 3 + 4 * 5 / 6 ⇒ '3 4 5 * 6 / +'\n * const terms = [ '3', '4', '5', '*', '6', '/', '+' ];\n *\n * evaluate( terms, {} );\n * // ⇒ 6.333333333333334\n * ```\n *\n * @param {string[]} postfix   Postfix terms.\n * @param {Object}   variables Operand variables.\n *\n * @return {*} Result of evaluation.\n */\nfunction evaluate( postfix, variables ) {\n	var stack = [],\n		i, j, args, getOperatorResult, term, value;\n\n	for ( i = 0; i < postfix.length; i++ ) {\n		term = postfix[ i ];\n\n		getOperatorResult = OPERATORS[ term ];\n		if ( getOperatorResult ) {\n			// Pop from stack by number of function arguments.\n			j = getOperatorResult.length;\n			args = Array( j );\n			while ( j-- ) {\n				args[ j ] = stack.pop();\n			}\n\n			try {\n				value = getOperatorResult.apply( null, args );\n			} catch ( earlyReturn ) {\n				return earlyReturn;\n			}\n		} else if ( variables.hasOwnProperty( term ) ) {\n			value = variables[ term ];\n		} else {\n			value = +term;\n		}\n\n		stack.push( value );\n	}\n\n	return stack[ 0 ];\n}\n\n;// CONCATENATED MODULE: ./node_modules/@tannin/compile/index.js\n\n\n\n/**\n * Given a C expression, returns a function which can be called to evaluate its\n * result.\n *\n * @example\n *\n * ```js\n * import compile from '@tannin/compile';\n *\n * const evaluate = compile( 'n > 1' );\n *\n * evaluate( { n: 2 } );\n * // ⇒ true\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {(variables?:{[variable:string]:*})=>*} Compiled evaluator.\n */\nfunction compile( expression ) {\n	var terms = postfix( expression );\n\n	return function( variables ) {\n		return evaluate( terms, variables );\n	};\n}\n\n;// CONCATENATED MODULE: ./node_modules/@tannin/plural-forms/index.js\n\n\n/**\n * Given a C expression, returns a function which, when called with a value,\n * evaluates the result with the value assumed to be the \"n\" variable of the\n * expression. The result will be coerced to its numeric equivalent.\n *\n * @param {string} expression C expression.\n *\n * @return {Function} Evaluator function.\n */\nfunction pluralForms( expression ) {\n	var evaluate = compile( expression );\n\n	return function( n ) {\n		return +evaluate( { n: n } );\n	};\n}\n\n;// CONCATENATED MODULE: ./node_modules/tannin/index.js\n\n\n/**\n * Tannin constructor options.\n *\n * @typedef {Object} TanninOptions\n *\n * @property {string}   [contextDelimiter] Joiner in string lookup with context.\n * @property {Function} [onMissingKey]     Callback to invoke when key missing.\n */\n\n/**\n * Domain metadata.\n *\n * @typedef {Object} TanninDomainMetadata\n *\n * @property {string}            [domain]       Domain name.\n * @property {string}            [lang]         Language code.\n * @property {(string|Function)} [plural_forms] Plural forms expression or\n *                                              function evaluator.\n */\n\n/**\n * Domain translation pair respectively representing the singular and plural\n * translation.\n *\n * @typedef {[string,string]} TanninTranslation\n */\n\n/**\n * Locale data domain. The key is used as reference for lookup, the value an\n * array of two string entries respectively representing the singular and plural\n * translation.\n *\n * @typedef {{[key:string]:TanninDomainMetadata|TanninTranslation,'':TanninDomainMetadata|TanninTranslation}} TanninLocaleDomain\n */\n\n/**\n * Jed-formatted locale data.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @typedef {{[domain:string]:TanninLocaleDomain}} TanninLocaleData\n */\n\n/**\n * Default Tannin constructor options.\n *\n * @type {TanninOptions}\n */\nvar DEFAULT_OPTIONS = {\n	contextDelimiter: '\\u0004',\n	onMissingKey: null,\n};\n\n/**\n * Given a specific locale data's config `plural_forms` value, returns the\n * expression.\n *\n * @example\n *\n * ```\n * getPluralExpression( 'nplurals=2; plural=(n != 1);' ) === '(n != 1)'\n * ```\n *\n * @param {string} pf Locale data plural forms.\n *\n * @return {string} Plural forms expression.\n */\nfunction getPluralExpression( pf ) {\n	var parts, i, part;\n\n	parts = pf.split( ';' );\n\n	for ( i = 0; i < parts.length; i++ ) {\n		part = parts[ i ].trim();\n		if ( part.indexOf( 'plural=' ) === 0 ) {\n			return part.substr( 7 );\n		}\n	}\n}\n\n/**\n * Tannin constructor.\n *\n * @class\n *\n * @param {TanninLocaleData} data      Jed-formatted locale data.\n * @param {TanninOptions}    [options] Tannin options.\n */\nfunction Tannin( data, options ) {\n	var key;\n\n	/**\n	 * Jed-formatted locale data.\n	 *\n	 * @name Tannin#data\n	 * @type {TanninLocaleData}\n	 */\n	this.data = data;\n\n	/**\n	 * Plural forms function cache, keyed by plural forms string.\n	 *\n	 * @name Tannin#pluralForms\n	 * @type {Object<string,Function>}\n	 */\n	this.pluralForms = {};\n\n	/**\n	 * Effective options for instance, including defaults.\n	 *\n	 * @name Tannin#options\n	 * @type {TanninOptions}\n	 */\n	this.options = {};\n\n	for ( key in DEFAULT_OPTIONS ) {\n		this.options[ key ] = options !== undefined && key in options\n			? options[ key ]\n			: DEFAULT_OPTIONS[ key ];\n	}\n}\n\n/**\n * Returns the plural form index for the given domain and value.\n *\n * @param {string} domain Domain on which to calculate plural form.\n * @param {number} n      Value for which plural form is to be calculated.\n *\n * @return {number} Plural form index.\n */\nTannin.prototype.getPluralForm = function( domain, n ) {\n	var getPluralForm = this.pluralForms[ domain ],\n		config, plural, pf;\n\n	if ( ! getPluralForm ) {\n		config = this.data[ domain ][ '' ];\n\n		pf = (\n			config[ 'Plural-Forms' ] ||\n			config[ 'plural-forms' ] ||\n			// Ignore reason: As known, there's no way to document the empty\n			// string property on a key to guarantee this as metadata.\n			// @ts-ignore\n			config.plural_forms\n		);\n\n		if ( typeof pf !== 'function' ) {\n			plural = getPluralExpression(\n				config[ 'Plural-Forms' ] ||\n				config[ 'plural-forms' ] ||\n				// Ignore reason: As known, there's no way to document the empty\n				// string property on a key to guarantee this as metadata.\n				// @ts-ignore\n				config.plural_forms\n			);\n\n			pf = pluralForms( plural );\n		}\n\n		getPluralForm = this.pluralForms[ domain ] = pf;\n	}\n\n	return getPluralForm( n );\n};\n\n/**\n * Translate a string.\n *\n * @param {string}      domain   Translation domain.\n * @param {string|void} context  Context distinguishing terms of the same name.\n * @param {string}      singular Primary key for translation lookup.\n * @param {string=}     plural   Fallback value used for non-zero plural\n *                               form index.\n * @param {number=}     n        Value to use in calculating plural form.\n *\n * @return {string} Translated string.\n */\nTannin.prototype.dcnpgettext = function( domain, context, singular, plural, n ) {\n	var index, key, entry;\n\n	if ( n === undefined ) {\n		// Default to singular.\n		index = 0;\n	} else {\n		// Find index by evaluating plural form for value.\n		index = this.getPluralForm( domain, n );\n	}\n\n	key = singular;\n\n	// If provided, context is prepended to key with delimiter.\n	if ( context ) {\n		key = context + this.options.contextDelimiter + singular;\n	}\n\n	entry = this.data[ domain ][ key ];\n\n	// Verify not only that entry exists, but that the intended index is within\n	// range and non-empty.\n	if ( entry && entry[ index ] ) {\n		return entry[ index ];\n	}\n\n	if ( this.options.onMissingKey ) {\n		this.options.onMissingKey( singular, domain );\n	}\n\n	// If entry not found, fall back to singular vs. plural with zero index\n	// representing the singular value.\n	return index === 0 ? singular : plural;\n};\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/i18n/build-module/create-i18n.js\n/**\n * External dependencies\n */\n\n\n/**\n * @typedef {Record<string,any>} LocaleData\n */\n\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n *\n * @type {LocaleData}\n */\nconst DEFAULT_LOCALE_DATA = {\n  '': {\n    /** @param {number} n */\n    plural_forms(n) {\n      return n === 1 ? 0 : 1;\n    }\n  }\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * @typedef {(domain?: string) => LocaleData} GetLocaleData\n *\n * Returns locale data by domain in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} AddLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData\n *\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/** @typedef {() => void} SubscribeCallback */\n/** @typedef {() => void} UnsubscribeCallback */\n/**\n * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe\n *\n * Subscribes to changes of locale data\n */\n/**\n * @typedef {(domain?: string) => string} GetFilterDomain\n * Retrieve the domain to use when calling domain-specific filters.\n */\n/**\n * @typedef {(text: string, domain?: string) => string} __\n *\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n */\n/**\n * @typedef {(text: string, context: string, domain?: string) => string} _x\n *\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n */\n/**\n * @typedef {() => boolean} IsRtl\n *\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n */\n/**\n * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation\n *\n * Check if there is a translation for a given string in singular form.\n */\n/** @typedef {import('@wordpress/hooks').Hooks} Hooks */\n\n/**\n * An i18n instance\n *\n * @typedef I18n\n * @property {GetLocaleData}   getLocaleData   Returns locale data by domain in a Jed-formatted JSON object shape.\n * @property {SetLocaleData}   setLocaleData   Merges locale data into the Tannin instance by domain. Note that this\n *                                             function will overwrite the domain configuration. Accepts data in a\n *                                             Jed-formatted JSON object shape.\n * @property {AddLocaleData}   addLocaleData   Merges locale data into the Tannin instance by domain. Note that this\n *                                             function will also merge the domain configuration. Accepts data in a\n *                                             Jed-formatted JSON object shape.\n * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified\n *                                             locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n * @property {Subscribe}       subscribe       Subscribes to changes of Tannin locale data.\n * @property {__}              __              Retrieve the translation of text.\n * @property {_x}              _x              Retrieve translated string with gettext context.\n * @property {_n}              _n              Translates and retrieves the singular or plural form based on the supplied\n *                                             number.\n * @property {_nx}             _nx             Translates and retrieves the singular or plural form based on the supplied\n *                                             number, with gettext context.\n * @property {IsRtl}           isRTL           Check if current locale is RTL.\n * @property {HasTranslation}  hasTranslation  Check if there is a translation for a given string.\n */\n\n/**\n * Create an i18n instance\n *\n * @param {LocaleData} [initialData]   Locale data configuration.\n * @param {string}     [initialDomain] Domain for which configuration applies.\n * @param {Hooks}      [hooks]         Hooks implementation.\n *\n * @return {I18n} I18n instance.\n */\nconst createI18n = (initialData, initialDomain, hooks) => {\n  /**\n   * The underlying instance of Tannin to which exported functions interface.\n   *\n   * @type {Tannin}\n   */\n  const tannin = new Tannin({});\n  const listeners = new Set();\n  const notifyListeners = () => {\n    listeners.forEach(listener => listener());\n  };\n\n  /**\n   * Subscribe to changes of locale data.\n   *\n   * @param {SubscribeCallback} callback Subscription callback.\n   * @return {UnsubscribeCallback} Unsubscribe callback.\n   */\n  const subscribe = callback => {\n    listeners.add(callback);\n    return () => listeners.delete(callback);\n  };\n\n  /** @type {GetLocaleData} */\n  const getLocaleData = (domain = 'default') => tannin.data[domain];\n\n  /**\n   * @param {LocaleData} [data]\n   * @param {string}     [domain]\n   */\n  const doSetLocaleData = (data, domain = 'default') => {\n    tannin.data[domain] = {\n      ...tannin.data[domain],\n      ...data\n    };\n\n    // Populate default domain configuration (supported locale date which omits\n    // a plural forms expression).\n    tannin.data[domain][''] = {\n      ...DEFAULT_LOCALE_DATA[''],\n      ...tannin.data[domain]?.['']\n    };\n\n    // Clean up cached plural forms functions cache as it might be updated.\n    delete tannin.pluralForms[domain];\n  };\n\n  /** @type {SetLocaleData} */\n  const setLocaleData = (data, domain) => {\n    doSetLocaleData(data, domain);\n    notifyListeners();\n  };\n\n  /** @type {AddLocaleData} */\n  const addLocaleData = (data, domain = 'default') => {\n    tannin.data[domain] = {\n      ...tannin.data[domain],\n      ...data,\n      // Populate default domain configuration (supported locale date which omits\n      // a plural forms expression).\n      '': {\n        ...DEFAULT_LOCALE_DATA[''],\n        ...tannin.data[domain]?.[''],\n        ...data?.['']\n      }\n    };\n\n    // Clean up cached plural forms functions cache as it might be updated.\n    delete tannin.pluralForms[domain];\n    notifyListeners();\n  };\n\n  /** @type {ResetLocaleData} */\n  const resetLocaleData = (data, domain) => {\n    // Reset all current Tannin locale data.\n    tannin.data = {};\n\n    // Reset cached plural forms functions cache.\n    tannin.pluralForms = {};\n    setLocaleData(data, domain);\n  };\n\n  /**\n   * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n   * otherwise previously assigned.\n   *\n   * @param {string|undefined} domain   Domain to retrieve the translated text.\n   * @param {string|undefined} context  Context information for the translators.\n   * @param {string}           single   Text to translate if non-plural. Used as\n   *                                    fallback return value on a caught error.\n   * @param {string}           [plural] The text to be used if the number is\n   *                                    plural.\n   * @param {number}           [number] The number to compare against to use\n   *                                    either the singular or plural form.\n   *\n   * @return {string} The translated string.\n   */\n  const dcnpgettext = (domain = 'default', context, single, plural, number) => {\n    if (!tannin.data[domain]) {\n      // Use `doSetLocaleData` to set silently, without notifying listeners.\n      doSetLocaleData(undefined, domain);\n    }\n    return tannin.dcnpgettext(domain, context, single, plural, number);\n  };\n\n  /** @type {GetFilterDomain} */\n  const getFilterDomain = (domain = 'default') => domain;\n\n  /** @type {__} */\n  const __ = (text, domain) => {\n    let translation = dcnpgettext(domain, undefined, text);\n    if (!hooks) {\n      return translation;\n    }\n\n    /**\n     * Filters text with its translation.\n     *\n     * @param {string} translation Translated text.\n     * @param {string} text        Text to translate.\n     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.\n     */\n    translation = /** @type {string} */\n    /** @type {*} */hooks.applyFilters('i18n.gettext', translation, text, domain);\n    return /** @type {string} */(\n      /** @type {*} */hooks.applyFilters('i18n.gettext_' + getFilterDomain(domain), translation, text, domain)\n    );\n  };\n\n  /** @type {_x} */\n  const _x = (text, context, domain) => {\n    let translation = dcnpgettext(domain, context, text);\n    if (!hooks) {\n      return translation;\n    }\n\n    /**\n     * Filters text with its translation based on context information.\n     *\n     * @param {string} translation Translated text.\n     * @param {string} text        Text to translate.\n     * @param {string} context     Context information for the translators.\n     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.\n     */\n    translation = /** @type {string} */\n    /** @type {*} */hooks.applyFilters('i18n.gettext_with_context', translation, text, context, domain);\n    return /** @type {string} */(\n      /** @type {*} */hooks.applyFilters('i18n.gettext_with_context_' + getFilterDomain(domain), translation, text, context, domain)\n    );\n  };\n\n  /** @type {_n} */\n  const _n = (single, plural, number, domain) => {\n    let translation = dcnpgettext(domain, undefined, single, plural, number);\n    if (!hooks) {\n      return translation;\n    }\n\n    /**\n     * Filters the singular or plural form of a string.\n     *\n     * @param {string} translation Translated text.\n     * @param {string} single      The text to be used if the number is singular.\n     * @param {string} plural      The text to be used if the number is plural.\n     * @param {string} number      The number to compare against to use either the singular or plural form.\n     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.\n     */\n    translation = /** @type {string} */\n    /** @type {*} */hooks.applyFilters('i18n.ngettext', translation, single, plural, number, domain);\n    return /** @type {string} */(\n      /** @type {*} */hooks.applyFilters('i18n.ngettext_' + getFilterDomain(domain), translation, single, plural, number, domain)\n    );\n  };\n\n  /** @type {_nx} */\n  const _nx = (single, plural, number, context, domain) => {\n    let translation = dcnpgettext(domain, context, single, plural, number);\n    if (!hooks) {\n      return translation;\n    }\n\n    /**\n     * Filters the singular or plural form of a string with gettext context.\n     *\n     * @param {string} translation Translated text.\n     * @param {string} single      The text to be used if the number is singular.\n     * @param {string} plural      The text to be used if the number is plural.\n     * @param {string} number      The number to compare against to use either the singular or plural form.\n     * @param {string} context     Context information for the translators.\n     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.\n     */\n    translation = /** @type {string} */\n    /** @type {*} */hooks.applyFilters('i18n.ngettext_with_context', translation, single, plural, number, context, domain);\n    return /** @type {string} */(\n      /** @type {*} */hooks.applyFilters('i18n.ngettext_with_context_' + getFilterDomain(domain), translation, single, plural, number, context, domain)\n    );\n  };\n\n  /** @type {IsRtl} */\n  const isRTL = () => {\n    return 'rtl' === _x('ltr', 'text direction');\n  };\n\n  /** @type {HasTranslation} */\n  const hasTranslation = (single, context, domain) => {\n    const key = context ? context + '\\u0004' + single : single;\n    let result = !!tannin.data?.[domain !== null && domain !== void 0 ? domain : 'default']?.[key];\n    if (hooks) {\n      /**\n       * Filters the presence of a translation in the locale data.\n       *\n       * @param {boolean} hasTranslation Whether the translation is present or not..\n       * @param {string}  single         The singular form of the translated text (used as key in locale data)\n       * @param {string}  context        Context information for the translators.\n       * @param {string}  domain         Text domain. Unique identifier for retrieving translated strings.\n       */\n      result = /** @type { boolean } */\n      /** @type {*} */hooks.applyFilters('i18n.has_translation', result, single, context, domain);\n      result = /** @type { boolean } */\n      /** @type {*} */hooks.applyFilters('i18n.has_translation_' + getFilterDomain(domain), result, single, context, domain);\n    }\n    return result;\n  };\n  if (initialData) {\n    setLocaleData(initialData, initialDomain);\n  }\n  if (hooks) {\n    /**\n     * @param {string} hookName\n     */\n    const onHookAddedOrRemoved = hookName => {\n      if (I18N_HOOK_REGEXP.test(hookName)) {\n        notifyListeners();\n      }\n    };\n    hooks.addAction('hookAdded', 'core/i18n', onHookAddedOrRemoved);\n    hooks.addAction('hookRemoved', 'core/i18n', onHookAddedOrRemoved);\n  }\n  return {\n    getLocaleData,\n    setLocaleData,\n    addLocaleData,\n    resetLocaleData,\n    subscribe,\n    __,\n    _x,\n    _n,\n    _nx,\n    isRTL,\n    hasTranslation\n  };\n};\n\n;// CONCATENATED MODULE: external [\"wp\",\"hooks\"]\nconst external_wp_hooks_namespaceObject = window[\"wp\"][\"hooks\"];\n;// CONCATENATED MODULE: ./node_modules/@wordpress/i18n/build-module/default-i18n.js\n/**\n * Internal dependencies\n */\n\n\n/**\n * WordPress dependencies\n */\n\nconst i18n = createI18n(undefined, undefined, external_wp_hooks_namespaceObject.defaultHooks);\n\n/**\n * Default, singleton instance of `I18n`.\n */\n/* harmony default export */ const default_i18n = (i18n);\n\n/*\n * Comments in this file are duplicated from ./i18n due to\n * https://github.com/WordPress/gutenberg/pull/20318#issuecomment-590837722\n */\n\n/**\n * @typedef {import('./create-i18n').LocaleData} LocaleData\n * @typedef {import('./create-i18n').SubscribeCallback} SubscribeCallback\n * @typedef {import('./create-i18n').UnsubscribeCallback} UnsubscribeCallback\n */\n\n/**\n * Returns locale data by domain in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {string} [domain] Domain for which to get the data.\n * @return {LocaleData} Locale data.\n */\nconst getLocaleData = i18n.getLocaleData.bind(i18n);\n\n/**\n * Merges locale data into the Tannin instance by domain. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {LocaleData} [data]   Locale data configuration.\n * @param {string}     [domain] Domain for which configuration applies.\n */\nconst setLocaleData = i18n.setLocaleData.bind(i18n);\n\n/**\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {LocaleData} [data]   Locale data configuration.\n * @param {string}     [domain] Domain for which configuration applies.\n */\nconst resetLocaleData = i18n.resetLocaleData.bind(i18n);\n\n/**\n * Subscribes to changes of locale data\n *\n * @param {SubscribeCallback} callback Subscription callback\n * @return {UnsubscribeCallback} Unsubscribe callback\n */\nconst subscribe = i18n.subscribe.bind(i18n);\n\n/**\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n *\n * @param {string} text     Text to translate.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} Translated text.\n */\nconst __ = i18n.__.bind(i18n);\n\n/**\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n *\n * @param {string} text     Text to translate.\n * @param {string} context  Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} Translated context string without pipe.\n */\nconst _x = i18n._x.bind(i18n);\n\n/**\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n *\n * @param {string} single   The text to be used if the number is singular.\n * @param {string} plural   The text to be used if the number is plural.\n * @param {number} number   The number to compare against to use either the\n *                          singular or plural form.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} The translated singular or plural form.\n */\nconst _n = i18n._n.bind(i18n);\n\n/**\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n *\n * @param {string} single   The text to be used if the number is singular.\n * @param {string} plural   The text to be used if the number is plural.\n * @param {number} number   The number to compare against to use either the\n *                          singular or plural form.\n * @param {string} context  Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} The translated singular or plural form.\n */\nconst _nx = i18n._nx.bind(i18n);\n\n/**\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n *\n * @return {boolean} Whether locale is RTL.\n */\nconst isRTL = i18n.isRTL.bind(i18n);\n\n/**\n * Check if there is a translation for a given string (in singular form).\n *\n * @param {string} single    Singular form of the string to look up.\n * @param {string} [context] Context information for the translators.\n * @param {string} [domain]  Domain to retrieve the translated text.\n * @return {boolean} Whether the translation exists or not.\n */\nconst hasTranslation = i18n.hasTranslation.bind(i18n);\n\n;// CONCATENATED MODULE: ./node_modules/@wordpress/i18n/build-module/index.js\n\n\n\n\n})();\n\n(window.wp = window.wp || {}).i18n = __webpack_exports__;\n/******/ })()\n;";
